shithub: cstory

Download patch

ref: c9dbc5607e9da13cc6dcdc5ae70f14e241764140
parent: aa0f5b153eb29a8ce7e48ebf71eac5db3446276c
author: Clownacy <Clownacy@users.noreply.github.com>
date: Thu Apr 2 15:58:03 EDT 2020

Delete old DoConfig

--- a/DoConfig/CMakeLists.txt
+++ b/DoConfig/CMakeLists.txt
@@ -1,57 +1,50 @@
 cmake_minimum_required(VERSION 3.12)
 
-option(LTO "Enable link-time optimisation" OFF)
+project(DoConfig LANGUAGES C CXX)
 
-option(FORCE_LOCAL_LIBS "Compile the built-in version of FLTK instead of using the system-provided one" OFF)
+add_executable(DoConfig WIN32
+	"icon.rc"
+	"../../external/glad/include/glad/glad.h"
+	"../../external/glad/include/KHR/khrplatform.h"
+	"../../external/glad/src/glad.c"
+	"DoConfig.cpp"
+	"imgui/imconfig.h"
+	"imgui/imgui.cpp"
+	"imgui/imgui.h"
+	"imgui/imgui_demo.cpp"
+	"imgui/imgui_draw.cpp"
+	"imgui/imgui_impl_glfw.cpp"
+	"imgui/imgui_impl_glfw.h"
+	"imgui/imgui_impl_opengl3.cpp"
+	"imgui/imgui_impl_opengl3.h"
+	"imgui/imgui_internal.h"
+	"imgui/imgui_widgets.cpp"
+	"imgui/imstb_rectpack.h"
+	"imgui/imstb_textedit.h"
+	"imgui/imstb_truetype.h"
+)
 
-project(DoConfig LANGUAGES CXX)
+set_target_properties(DoConfig PROPERTIES
+	C_STANDARD 90
+	C_STANDARD_REQUIRED ON
+	C_EXTENSIONS OFF
+	CXX_STANDARD 98
+	CXX_STANDARD_REQUIRED ON
+	CXX_EXTENSIONS OFF
+)
 
-add_executable(DoConfig WIN32 "DoConfig.cpp" "icon.rc")
+target_link_libraries(DoConfig PRIVATE ${CMAKE_DL_LIBS})
 
-# Make some tweaks if we're using MSVC
+target_include_directories(DoConfig PRIVATE "../../external/glad/include")
+target_compile_definitions(DoConfig PRIVATE IMGUI_IMPL_OPENGL_LOADER_GLAD)
+
 if(MSVC)
 	# Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions
-	target_compile_definitions(DoConfig PRIVATE _CRT_SECURE_NO_WARNINGS)
+	target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS)
 
-	# Make it so source files are recognized as UTF-8 by MSVC
-	target_compile_options(DoConfig PRIVATE "/utf-8")
+	# Use `main` instead of `WinMain`
+	set_target_properties(CSE2 PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup")
 endif()
 
-if(LTO)
-	include(CheckIPOSupported)
-
-	check_ipo_supported(RESULT result)
-
-	if(result)
-		set_target_properties(DoConfig PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
-	endif()
-endif()
-
-# Find FLTK
-if(NOT FORCE_LOCAL_LIBS)
-	set(FLTK_SKIP_FLUID ON CACHE INTERNAL "" FORCE)	# Do not require fltk-fluid (the UI designer)
-	find_package(FLTK)
-endif()
-
-if(FLTK_FOUND)
-	message(STATUS "Using system FLTK")
-	target_include_directories(DoConfig PRIVATE ${FLTK_INCLUDE_DIR})
-	target_link_libraries(DoConfig PRIVATE ${FLTK_LIBRARIES})
-else()
-	# Compile it ourselves
-	message(STATUS "Using local FLTK")
-	# Clear this or it will cause an error during FLTK's configuration.
-	# FLTK only appends to it, so the leftover junk gets fed into a bunch
-	# of important functions. THAT was no fun to debug.
-	set(FLTK_LIBRARIES)
-	set(OPTION_BUILD_EXAMPLES OFF CACHE INTERNAL "" FORCE)	# Needed to prevent a name collision
-	if(FORCE_LOCAL_LIBS)
-		set(OPTION_USE_SYSTEM_ZLIB OFF CACHE INTERNAL "" FORCE)
-		set(OPTION_USE_SYSTEM_LIBJPEG OFF CACHE INTERNAL "" FORCE)
-		set(OPTION_USE_SYSTEM_LIBPNG OFF CACHE INTERNAL "" FORCE)
-	endif()
-	add_subdirectory("fltk" EXCLUDE_FROM_ALL)
-	get_target_property(DIRS fltk INCLUDE_DIRECTORIES)	# FLTK doesn't mark its includes as PUBLIC or INTERFACE, so we have to do this stupidity
-	target_include_directories(DoConfig PRIVATE ${DIRS})
-	target_link_libraries(DoConfig PRIVATE fltk)
-endif()
+find_package(glfw3 REQUIRED)
+target_link_libraries(DoConfig PRIVATE glfw)
--- a/DoConfig/DoConfig.cpp
+++ b/DoConfig/DoConfig.cpp
@@ -1,283 +1,286 @@
-/* This program is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
- * and/or modify it under the terms of the Do What The F*** You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/wtfpl/COPYING for more details. */
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
 
-#include "FL/Fl.H"
-#include "FL/Fl_Check_Button.H"
-#include "FL/Fl_Choice.H"
-#include "FL/Fl_Radio_Round_Button.H"
-#include "FL/Fl_Window.H"
-#include <FL/Enumerations.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Round_Button.H>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <fstream>
+#include "glad/glad.h"
+#include <GLFW/glfw3.h>
 
-struct data
+#include "imgui/imgui.h"
+#include "imgui/imgui_impl_glfw.h"
+#include "imgui/imgui_impl_opengl3.h"
+
+#define WINDOW_WIDTH 360
+#define WINDOW_HEIGHT 290
+
+struct Config
 {
-	char magic[32];
-	char font[64];
-	unsigned char move[4];
-	unsigned char attack[4];
-	unsigned char okay[4];
-	unsigned char display[4];
-	unsigned char useJoy[4];
-	unsigned char buttons[8][4];
+	char proof[0x20];
+	char font_name[0x40];
+	int move_button_mode;
+	int attack_button_mode;
+	int ok_button_mode;
+	int display_mode;
+	bool bJoystick;
+	int joystick_button[8];
 };
 
-class RadioRow
+const char *proof = "DOUKUTSU20041206";
+
+int main(int argc, char *argv[])
 {
-public:
-	RadioRow(char offset);
-	int value();
-	void value(int input);
+	char base_directory[0x400];
 
-private:
-	Fl_Group *group;
-	Fl_Radio_Round_Button *buttons[6];
-};
+	strcpy(base_directory, argv[0]);
 
-static const char MAGIC[32] = "DOUKUTSU20041206";
-static const char FONT[64] = "Courier New";
+	for (size_t i = strlen(base_directory);; --i)
+	{
+		if (i == 0 || base_directory[i] == '\\' || base_directory[i] == '/')
+		{
+			base_directory[i] = '\0';
+			break;
+		}
+	}
 
-static char config_path[FILENAME_MAX];
+	/////////////////////
+	// Initialise GLFW //
+	/////////////////////
 
-static data config;
+	if (glfwInit())
+	{
+		const char *glsl_version = "#version 150 core";
+		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+		glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
+		glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+		glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
 
-static unsigned long CharsToLong(unsigned char *chars)
-{
-	return (chars[3] << 24) | (chars[2] << 16) | (chars[1] << 8) | chars[0];
-}
+		glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
 
-static void LongToChars(unsigned long long_var, unsigned char *chars)
-{
-	chars[0] = long_var & 0xFF;
-	chars[1] = (long_var >> 8) & 0xFF;
-	chars[2] = (long_var >> 16) & 0xFF;
-	chars[3] = (long_var >> 24) & 0xFF;
-}
+		GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "DoConfig - Doukutsu Monogatari Settings", NULL, NULL);
 
-RadioRow::RadioRow(char offset)
-{
-	char *temp = new char[2];
-	temp[0] = '1' + offset;
-	temp[1] = '\0';
-	this->group = new Fl_Group(140 + offset * 30, 150, 30, 180);
-	this->group->label(temp);
-	this->group->align(FL_ALIGN_TOP_LEFT);
-	for (int i = 0; i < 6; i++)
-		this->buttons[i] = new Fl_Radio_Round_Button(140 + offset * 30, 150 + 30 * i, 30, 30);
-	this->group->end();
-}
+		if (window != NULL)
+		{
+			glfwMakeContextCurrent(window);
+			glfwSwapInterval(1);
 
-int RadioRow::value()
-{
-	for (int i = 0; i < 6; i++)
-		if (this->buttons[i]->value())
-			return i;
-	return 0;
-}
+			if (gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
+			{
+				// Check if the platform supports OpenGL 3.2
+				if (GLAD_GL_VERSION_3_2)
+				{
+					///////////////////////////
+					// Initialise Dear ImGui //
+					///////////////////////////
 
-void RadioRow::value(int input)
-{
-	this->buttons[input]->setonly();
-}
+					IMGUI_CHECKVERSION();
+					ImGui::CreateContext();
 
-Fl_Round_Button *movear;
-Fl_Round_Button *movegt;
+					ImGui_ImplGlfw_InitForOpenGL(window, true);
+					ImGui_ImplOpenGL3_Init(glsl_version);
 
-Fl_Round_Button *buttonxz;
-Fl_Round_Button *buttonzx;
+					/////////////////////
+					// Load Config.dat //
+					/////////////////////
 
-Fl_Round_Button *okayjump;
-Fl_Round_Button *okayattack;
+					Config configuration;
 
-Fl_Choice *displaychoice;
-Fl_Check_Button *joychoice;
+					char config_path[0x400];
+					sprintf(config_path, "%s/Config.dat", base_directory);
 
-Fl_Group *joystuffcontainer;
-RadioRow *joyRows[8];
+					FILE *file = fopen(config_path, "rb");
 
-void quit(Fl_Widget *, void *)
-{
-	std::exit(0);
-}
+					if (file != NULL)
+					{
+						// Read from file
+						fread(configuration.proof, 1, sizeof(configuration.proof), file);
+						fread(configuration.font_name, 1, sizeof(configuration.font_name), file);
+						configuration.move_button_mode = fgetc(file);
+						fseek(file, 3, SEEK_CUR);
+						configuration.attack_button_mode = fgetc(file);
+						fseek(file, 3, SEEK_CUR);
+						configuration.ok_button_mode = fgetc(file);
+						fseek(file, 3, SEEK_CUR);
+						configuration.display_mode = fgetc(file);
+						fseek(file, 3, SEEK_CUR);
+						configuration.bJoystick = fgetc(file);
 
-void activatejoy(Fl_Widget *, void *)
-{
-	if (joystuffcontainer->active())
-		joystuffcontainer->deactivate();
-	else
-		joystuffcontainer->activate();
-}
+						for (unsigned int i = 0; i < 8; ++i)
+						{
+							const int decode_table[6] = {0, 1, 2, 4, 5, 3};
 
-void read_Config()
-{
-	std::fstream fd;
-	fd.open(config_path, std::ios::in | std::ios::binary);
-	fd.read((char *)&config, sizeof(config));
-	fd.close();
+							fseek(file, 3, SEEK_CUR);
+							configuration.joystick_button[i] = decode_table[fgetc(file) - 1];
+						}
 
-	// If Config.dat's magic value doesn't match, create a blank default Config.dat instead
-	if (memcmp(config.magic, MAGIC, sizeof(config.magic)))
-	{
-		memset(&config, 0, sizeof(config));
-		strcpy(config.magic, MAGIC);
-		strcpy(config.font, FONT);
-	}
+						fclose(file);
+					}
 
-	CharsToLong(config.move) ? movegt->setonly() : movear->setonly();
-	CharsToLong(config.attack) ? buttonzx->setonly() : buttonxz->setonly();
-	CharsToLong(config.okay) ? okayattack->setonly() : okayjump->setonly();
+					if (file == NULL || memcmp(configuration.proof, proof, strlen(proof)))
+					{
+						// Reset to defaults
+						memset(&configuration, 0, sizeof(configuration));
+						strcpy(configuration.proof, proof);
+						strcpy(configuration.font_name, "Courier New");
 
-	displaychoice->value(CharsToLong(config.display));
-	joychoice->value(CharsToLong(config.useJoy));
+						for (unsigned int i = 0; i < 8; ++i)
+							configuration.joystick_button[i] = i % 6;
+					}
 
-	if (!CharsToLong(config.useJoy))
-		joystuffcontainer->deactivate();
+					//////////////
+					// Mainloop //
+					//////////////
 
-	for (int i = 0; i < 8; i++)
-	{
-		const unsigned long button = CharsToLong(config.buttons[i]);
-		if (button < 6 && button > 0)
-		{
-			const unsigned int button_lookup[6] = {0, 1, 2, 4, 5, 3};
-			joyRows[i]->value(button_lookup[button - 1]);
-		}
-	}
-}
+					while (!glfwWindowShouldClose(window))
+					{
+						glfwPollEvents();
 
-void write_Config(Fl_Widget *, void *)
-{
-	LongToChars(movegt->value(), config.move);
-	LongToChars(buttonzx->value(), config.attack);
-	LongToChars(okayattack->value(), config.okay);
+						ImGui_ImplOpenGL3_NewFrame();
+						ImGui_ImplGlfw_NewFrame();
+						ImGui::NewFrame();
 
-	LongToChars(displaychoice->value(), config.display);
-	LongToChars(joychoice->value(), config.useJoy);
-	for (int i = 0; i < 8; i++)
-	{
-		const unsigned int button_lookup[6] = {0, 1, 2, 5, 3, 4};
-		LongToChars(button_lookup[joyRows[i]->value()] + 1, config.buttons[i]);
-	}
-	std::fstream fd;
-	fd.open(config_path, std::ios::out | std::ios::binary);
-	fd.write((char *)&config, sizeof(config));
-	fd.close();
-	exit(0);
-}
+						ImGui::SetNextWindowPos(ImVec2(0, 0));
+						ImGui::SetNextWindowSize(ImVec2(WINDOW_WIDTH, WINDOW_HEIGHT));
 
-int main(int argc, char *argv[])
-{
-	strcpy(config_path, argv[0]);
+						ImGui::Begin("Main window", NULL, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground);
 
-	for (size_t i = strlen(config_path);; --i)
-	{
-		if (i == 0)
-		{
-			strcpy(config_path, "Config.dat");
-			break;
-		}
-		else if (config_path[i] == '\\' || config_path[i] == '/')
-		{
-			config_path[i] = '\0';
-			strcat(config_path, "/Config.dat");
-			break;
-		}
-	}
+							if (ImGui::BeginTable("Block1", 2, ImGuiTableFlags_Borders))
+							{
+								ImGui::TableNextRow();
 
-	Fl_Window *mainw = new Fl_Window(400, 380, "DoConfig - Doukutsu Monogatari Settings");
+								ImGui::TableSetColumnIndex(0);
+								ImGui::RadioButton("Arrows for Movement", &configuration.move_button_mode, 0);
+								ImGui::RadioButton("<>? for Movement", &configuration.move_button_mode, 1);
 
-	Fl_Group *movegroup = new Fl_Group(10, 10, 185, 50);
-	movegroup->box(FL_THIN_DOWN_BOX);
-	movear = new Fl_Radio_Round_Button(10, 10, 185, 20, "Arrows for Movement");
-	movear->setonly();
-	movegt = new Fl_Radio_Round_Button(10, 40, 185, 20, "<>? for Movement");
-	movegroup->end();
+								ImGui::TableSetColumnIndex(1);
+								ImGui::RadioButton("Jump=Okay", &configuration.ok_button_mode, 0);
+								ImGui::RadioButton("Attack=Okay", &configuration.ok_button_mode, 1);
 
-	Fl_Group *buttongroup = new Fl_Group(10, 70, 185, 50);
-	buttongroup->box(FL_THIN_DOWN_BOX);
-	buttonxz = new Fl_Radio_Round_Button(10, 70, 185, 20, "Z=Jump; X=Attack");
-	buttonxz->setonly();
-	buttonzx = new Fl_Radio_Round_Button(10, 100, 185, 20, "X=Jump; Z=Attack");
-	buttongroup->end();
+								ImGui::TableNextRow();
 
-	Fl_Group *okaygroup = new Fl_Group(205, 10, 185, 50);
-	okaygroup->box(FL_THIN_DOWN_BOX);
-	okayjump = new Fl_Radio_Round_Button(205, 10, 185, 20, "Jump=Okay");
-	okayjump->setonly();
-	okayattack = new Fl_Radio_Round_Button(205, 40, 185, 20, "Attack=Okay");
-	okaygroup->end();
+								ImGui::TableSetColumnIndex(0);
+								ImGui::RadioButton("Z=Jump; X=Attack", &configuration.attack_button_mode, 0);
+								ImGui::RadioButton("X=Jump; Z=Attack", &configuration.attack_button_mode, 1);
 
-	displaychoice = new Fl_Choice(205, 70, 185, 20);
-	Fl_Menu_Item screens[] = {
-		{"Fullscreen 16-bit"},
-		{"Windowed 320x240"},
-		{"Windowed 640x480"},
-		{"Fullscreen 24-bit"},
-		{"Fullscreen 32-bit"},
-		{0}};
-	displaychoice->menu(screens);
+								ImGui::TableSetColumnIndex(1);
+								ImGui::SetNextItemWidth(-1.0f);
+								const char *items[] = {"Fullscreen 16-bit", "Windowed 320x240", "Windowed 640x480", "Fullscreen 24-bit", "Fullscreen 32-bit"};
+								ImGui::Combo("", &configuration.display_mode, items, IM_ARRAYSIZE(items));
+								ImGui::Checkbox("Use Joypad", &configuration.bJoystick);
 
-	joychoice = new Fl_Check_Button(205, 100, 185, 20, "Use Joypad");
-	joychoice->callback(&activatejoy);
+								ImGui::EndTable();
+							}
 
-	joystuffcontainer = new Fl_Group(10, 130, 380, 200);
-	joystuffcontainer->box(FL_THIN_DOWN_BOX);
-	for (int i = 0; i < 8; i++)
-	{
-		joyRows[i] = new RadioRow(i);
-	}
+							// Joypad binding
 
-	// There's no Label class alright? I'll switch it as soon as one is introduced.
-	Fl_Group *labeljump = new Fl_Group(10, 150, 10, 20);
-	labeljump->label("Jump:");
-	labeljump->align(FL_ALIGN_RIGHT);
-	labeljump->end();
+							if (ImGui::BeginTable("Joypad binding", 9))
+							{
+								ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 60.0f);
 
-	Fl_Group *labelattack = new Fl_Group(10, 180, 10, 20);
-	labelattack->label("Attack:");
-	labelattack->align(FL_ALIGN_RIGHT);
-	labelattack->end();
+								for (int y = 0; y < 7; ++y)
+								{
+									ImGui::TableNextRow();
 
-	Fl_Group *labelweaponup = new Fl_Group(10, 210, 10, 20);
-	labelweaponup->label("Weapon+:");
-	labelweaponup->align(FL_ALIGN_RIGHT);
-	labelweaponup->end();
+									if (y == 0)
+									{
+										for (int x = 1; x < 9; ++x)
+										{
+											ImGui::TableSetColumnIndex(x);
+											ImGui::Text(" %d", x);
+										}
+									}
+									else
+									{
+										for (int x = 0; x < 9; ++x)
+										{
+											ImGui::TableSetColumnIndex(x);
 
-	Fl_Group *labelweapondown = new Fl_Group(10, 240, 10, 20);
-	labelweapondown->label("Weapon-:");
-	labelweapondown->align(FL_ALIGN_RIGHT);
-	labelweapondown->end();
+											if (x == 0)
+											{
+												const char *inputs[6] = {"Jump:", "Attack:", "Weapon+:", "Weapon-:", "Items:", "Map:"};
+												ImGui::Text(inputs[y - 1]);
+											}
+											else
+											{
+												static char name_buffer[5] = {'#', '#', '0', '0', '\0'};
+												name_buffer[2] = '0' + x;
+												name_buffer[3] = '0' + y;
+												ImGui::RadioButton(name_buffer, &configuration.joystick_button[x - 1], y - 1);
+											}
+										}
+									}
+								}
 
-	Fl_Group *labelitem = new Fl_Group(10, 270, 10, 20);
-	labelitem->label("Items:");
-	labelitem->align(FL_ALIGN_RIGHT);
-	labelitem->end();
+								ImGui::EndTable();
 
-	Fl_Group *labelmap = new Fl_Group(10, 300, 10, 20);
-	labelmap->label("Map:");
-	labelmap->align(FL_ALIGN_RIGHT);
-	labelmap->end();
+								if (ImGui::Button("Okay", ImVec2(ImGui::GetContentRegionAvail().x / 2, 0.0f)))
+								{
+									glfwSetWindowShouldClose(window, 1);
 
-	joystuffcontainer->end();
+									// Save to file
+									FILE *file = fopen(config_path, "wb");
 
-	Fl_Button *okaybutton = new Fl_Button(10, 340, 185, 30, "Okay");
-	okaybutton->callback(&write_Config);
+									if (file != NULL)
+									{
+										fwrite(configuration.proof, 1, sizeof(configuration.proof), file);
+										fwrite(configuration.font_name, 1, sizeof(configuration.font_name), file);
+										fputc(configuration.move_button_mode, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(configuration.attack_button_mode, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(configuration.ok_button_mode, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(configuration.display_mode, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(configuration.bJoystick, file);
+										fputc(0, file);
+										fputc(0, file);
+										fputc(0, file);
 
-	Fl_Button *cancelbutton = new Fl_Button(205, 340, 185, 30, "Cancel");
-	cancelbutton->callback(&quit);
+										for (unsigned int i = 0; i < 8; ++i)
+										{
+											const int encode_table[6] = {0, 1, 2, 5, 3, 4};
 
-	mainw->end();
-	mainw->show(argc, argv);
+											fputc(encode_table[configuration.joystick_button[i]] + 1, file);
+											fputc(0, file);
+											fputc(0, file);
+											fputc(0, file);
+										}
 
-	read_Config();
-	Fl::option(Fl::OPTION_VISIBLE_FOCUS, false);
-	return Fl::run();
+										fclose(file);
+									}
+								}
+
+								ImGui::SameLine();
+
+								if (ImGui::Button("Cancel", ImVec2(ImGui::GetContentRegionAvail().x, 0.0f)))
+									glfwSetWindowShouldClose(window, 1);
+							}
+
+						ImGui::End();
+
+						ImGui::Render();
+						glClear(GL_COLOR_BUFFER_BIT);
+						ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
+						glfwSwapBuffers(window);
+					}
+				}
+			}
+		}
+
+		ImGui_ImplOpenGL3_Shutdown();
+		ImGui_ImplGlfw_Shutdown();
+		ImGui::DestroyContext();
+
+		glfwDestroyWindow(window);
+		glfwTerminate();
+	}
+
+	return 0;
 }
--- a/DoConfig/fltk/ANNOUNCEMENT
+++ /dev/null
@@ -1,43 +1,0 @@
-The initial FLTK 1.3.0 is based on the final 1.1.10.
-
-  It adds internationalization, UTF-8 (Unicode), printing support,
-  Doxygen based documentation, and several new widgets including
-  Fl_Native_File_Chooser, Fl_Table, and Fl_Tree.
-
-FLTK 1.3.5 and previous versions contain many improvements and bug fixes.
-
-  Please see CHANGES for a list of changes in FLTK 1.3.0 to 1.3.5.
-
-  Even though FLTK 1.3.5 does not fix all STRs, we decided to release
-  FLTK 1.3.5 as it contains many new features, bug fixes, and adaptations
-  to new compiler releases and OS versions (e.g. macOS 10.14 "Mojave"
-  and better configure support for some Linux platforms).
-
-  Open bugs and feature requests can be viewed (offline) in KNOWN_BUGS.html
-  with your browser. Links in this file direct you to the current state
-  (online) of all listed bugs and feature requests.
-
-  Note: This file is a snapshot of https://www.fltk.org/roadmap.php
-  as of this release (Feb. 2019). Please take into account that some
-  bugs and/or feature requests in this list might have been fixed without
-  notice.
-
-  Bugs and feature requests for FLTK 1.4.x may also apply to FLTK 1.3.5.
-
-FLTK 1.3.5 is expected to be the last release in the 1.3.x series.
-
-  All bug reports for 1.3.x will be fixed in FLTK 1.4.x if possible.
-
---------------------------------------------------------------------------------
-
-Note to Git users: This branch (branch-1.3) is end of life since the
-release of FLTK 1.3.4. Only very serious bug fixes will be available
-if FLTK 1.4.0 is not yet released or not (yet) stable enough.
-
-This release (1.3.5) is a bug fix and maintenance release without new
-FLTK features (except macOS Mojave support).
-
-The current development branch is 'master' -- please checkout a new,
-clean working copy if you want to get FLTK 1.4 (master).
-
---------------------------------------------------------------------------------
--- a/DoConfig/fltk/CHANGES
+++ /dev/null
@@ -1,761 +1,0 @@
-CHANGES IN FLTK 1.3.5					RELEASED: Mar 03 2019
-
-Bug fixes and other improvements
-
-	- Updated CHANGES for release, removed one wrong entry
-
-
-CHANGES IN FLTK 1.3.5rc2				RELEASED: Feb 17 2019
-
-Bug fixes and other improvements
-
-	- Fix Xcode FLTK project for use under macOS 10.14
-
-
-CHANGES IN FLTK 1.3.5rc1				RELEASED: Feb 11 2019
-
-New features and enhancements (highlights)
-
-	- Add support for macOS 10.13 "High Sierra" and 10.14 "Mojave".
-	- Add FL/platform.H for compatibility with FLTK 1.4 and higher.
-	- Improve OpenGL(3+) support.
-	- Improve Cairo support and (CMake) Cairo detection.
-
-Bug fixes and other improvements
-
-        - Fix for STR 3473 (and its duplicate STR 3507) to restore configure-based
-          builds on recent Linux/Unix distributions where the freetype-config
-          command has been replaced by pkg-config.
-	- Fix Fl_Tree::insert() with pos out ouf range (issue #18).
-	- Fix Fl_GIF_Image Color Table handling (STR 3491).
-	- Make sure not to access Fl_Menu_ widgets if the widget gets
-	  deleted while the menu (pulldown) is open (STR 3503).
-	- Fix CMake build (fluid) on case sensitive macOS file systems.
-	- Windows/OpenGL: improve pixel format detection (STR 3119).
-	- Add support for macOS 10.14 "Mojave": all drawing to windows is done
-	  through "layer-backed views" when the app is linked to SDK 10.14.
-	- MacOS platform: fix regression in macOS 10.13 where an unbundled app
-	  had its system menu bar unresponsive.
-	- MacOS 10.10 platform: Fl_Window::fullscreen() and fullscreen_off() 
-	  no longer call Fl_Window::hide() + Fl_Window::show().
-	  The new procedure essentially resizes the window, as done on 
-	  the X11+EWMH and Windows platforms. This improves in particular 
-	  the possibility to turn an Fl_Gl_Window fullscreen on and off.
-	- MacOS platform: Support \r\n as end of line used by recent
-	  MS Office apps in clipboard.
-	- Fix Fl_Text_Editor overstrike mode (STR 3463).
-	- More consistent and optimized "gleam" scheme box drawing.
-	- Fix a MinGW build error with new MinGW versions as of Feb 2018
-	  (undefined S_OK and __FD_ISSET), see STR 3454.
-	- Windows/CMake: Add missing definition of WIN32 for Windows builds.
-	  This seems to be necessary for VS2017 and other compilers that
-	  don't #define WIN32, but FLTK relies on this preprocessor macro.
-	  Autoconf/configure and bundled IDE files #define WIN32 as well.
-	- Fix illegal memory access after free when closing fluid (valgrind
-	  reports "Invalid read of size 4"), see also STR 3427.
-	- Fix crash when closing fluid with Fl_Table (STR 3427).
-	- Fix ignored buffer pre-allocation (requestedSize) in Fl_Text_Buffer.
-	  See fltk.general "Fl_Text_Buffer constructor bug" on Dec 5, 2016.
-	- Fix Fl_Browser background and text color parsing (STR 3376).
-	- Fix Windows CreateDC/DeleteDC mismatch (STR 3373).
-	- Update bundled configure scripts config.guess and config.sub.
-	- Fix configure --enable-cairo --enable-cairoext,
-	  see report in fltk.general:
-	  https://groups.google.com/forum/#!topic/fltkgeneral/x80qQ6wt0s4
-	- Fix macOS timer implementation (STR 3387).
-	- Fix drop-to-FLTK-widget under MSWindows when the desktop is
-	  rescaled (STR 3390).
-	- Add support for macOS 10.13 "High Sierra". Subwindows don't
-	  move correctly under 10.13 without this fix.
-
-
-CHANGES IN FLTK 1.3.4-1					RELEASED: Nov 15 2016
-
-Bug fixes and other improvements
-
-	- Fix Windows IDE solutions VisualC2008 and VisualC2010 to
-	  build properly if the FLTK source directory is located
-	  in a path that contains spaces.
-	
-	Note: this is a source tar file update that is only necessary
-	if you build one of the above mentioned Visual Studio IDE
-	solutions in a path with spaces. Nothing else changed, no
-	documentation updates.
-
-
-CHANGES IN FLTK 1.3.4					RELEASED: Nov 11 2016
-
-Bug fixes and other improvements
-
-	- Fix test/native-filechooser help display artifact (STR #3349).
-	- MacOS: fix a crash when closing a fullscreen window.
-	- Accept empty Fl_Pixmap in Fl_RGB_Image c'tor (STR #3348).
-	- MacOS: fix drawing error when a window containing a hidden subwindow 
-	  is changed to fullscreen (error visible with the tabs test program).
-	- MacOS: fix possible crash when enabling fullscreen in test/scroll.
-	- Add a snapshot of known STR's and RFE's (KNOWN_BUGS.html).
-
-CHANGES IN FLTK 1.3.4rc3				RELEASED: Oct 31 2016
-
-	Bug fixes and other improvements
-
-	- Fix string truncation in fluid (STR #2722 continued).
-	- MacOS: fix a small problem where the Command-Quit menu hotkey
-	  may not work if Fl_Native_File_Chooser is used before any
-	  window is shown.
-
-
-CHANGES IN FLTK 1.3.4rc2				RELEASED: Oct 24 2016
-
-	Bug fixes and other improvements
-
-	- Make sure the "File Systems" menu item of Fl_File_Chooser
-	  lists "/" as the first mounted file system (Linux/Unix platform).
-	- Added line numbers to fluid Edit -> Show Source Code viewer.
-	- Improved fluid's template handling (STR #3335).
-
-
-CHANGES IN FLTK 1.3.4rc1				RELEASED: Oct 17 2016
-
-	New features and extensions
-
-	- Added support for Mac OS 10.11 "El Capitan" and 10.12 "Sierra".
-	- Added full support of true subwindows to the Mac OS X platform.
-	  Window nesting to any depth is possible. An Fl_Gl_Window window or
-	  subwindow can contain Fl_Window's as subwindows.
-	- Fluid now supports external editors (STR #3213)
-	  See: Edit -> GUI Settings -> Use external editor
-	- Added method Fl_Widget::is_label_copied().
-	- Added methods Fl_Copy_Surface::w(), Fl_Copy_Surface::h(),
-	  and Fl_Copy_Surface::draw_decorated_window().
-	- Added method Fl_Image_Surface::draw_decorated_window().
-	- Added method Fl_Shared_Image *Fl_Image_Surface::highres_image()
-	  to draw into a high-resolution bitmap image (Mac OS X only).
-	- Added support for OpenGL version 3 and later.
-	- Added method Fl_Mac_App_Menu::custom_application_menu_items()
-	  allowing customization of the application menu (Mac OS X only).
-	- Added 'fluid -u' command-line switch to upgrade fluid files in
-	  batch mode. This option opens a fluid ('.fl') file and saves it
-	  overwriting the old file with the current syntax and library version
-	  number. Use with care (input file is overwritten unconditionally).
-	- Added FL_ZOOM_GESTURE gesture for OS X (only). Needs implementation
-	  on other platforms.
-	- Added FL_ABI_VERSION, FL_API_VERSION, Fl::abi_version(), and
-	  Fl::api_version(). Constants can be used to determine the compiled
-	  FLTK version. Functions can be used to find the linked library version.
-	- Added Fl::abi_check() method to test if the runtime (linked)
-	  ABI version is correct.
-	- Added Fl_Image::fail() to test if an image was loaded successfully
-	  to allow for easier error detection when loading images (STR #2873).
-	- Added line numbers to fluid's source code viewer for New -> Code
-
-	New configuration options (ABI version)
-
-	- FLTK's ABI version can now be configured with 'configure', CMake, or
-	  by editing a supplied file when using the bundled IDE projects.
-	  See documentation in README.abi-version.txt.
-
-	1.3.4 ABI FEATURES
-
-	- Added deactivated user icon to Fl_Tree.
-	- Added Fl_Shared_Image::scale(width, height) which gives a shared
-	  image its own drawing size, independently of the size of the
-	  underlying image. This improves image drawing on high resolution
-	  surfaces such as Laser printers, PDF files, and Apple retina displays.
-
-	Other improvements
-
-	- Configure now correctly sets HAVE_* variables only if both the
-	  library and the header files were found. The configuration process
-	  is aborted if Xft was requested explicitly with --enable-xft and
-	  Xft was not found. The configuration summary now shows _found_
-	  options as opposed to requested options.
-	- Improved drawing of rounded box (STR #2943).
-	- Full support of Apple 'retina' displays for which one drawing unit
-	  corresponds to two pixels.
-	- The Mac OS X platform no longer uses the deprecated AGL
-	  (Apple GL library) to draw OpenGL data. Instead, it uses standard
-	  Cocoa APIs. This allows FLTK to support drawing GL scenes at high
-	  resolution when an Fl_Gl_Window is mapped to a 'retina' display.
-	- Added Fl_Gl_Window::pixel_w(), Fl_Gl_Window::pixel_h(), and
-	  Fl_Gl_Window::pixels_per_unit() useful for high resolution OpenGL windows.
-	- fl_read_image() now captures all pixels within the rectangle
-	  described by its arguments, whether they belong to a GL scene
-	  or not (STR #3142). It also captures subwindows of GL windows.
-	- Fl::delete_widget() now hides the widget or window immediately
-	  (i.e. when called) - only destruction is delayed as before.
-	- FLTK header files don't expose X11 definitions in user code any more
-	  unless requested by including FL/x.H explicitly or implicitly.
-	- The PostScript code output when printing images under Linux/Unix
-	  is now much smaller by using lossless compression techniques.
-	- The Linux/Unix printer dialog now uses BSD-style printing commands
-	  (lpr/lpq) when SystemV-style commands (lp/lpstat) are not available.
-	- Drawing alpha-blended images under X11 is now accelerated with
-	  Xrender.
-	- The font used for the FL_COURIER font family was changed on the Mac OS X
-	  platform from 'Courier New' to 'Courier' because it was too thin.
-	- Text drawing on the Mac platform supports Unicode 'variation selectors'
-	  in the range [0xFE00-0xFE0F].
-	- Added a Mac OS implementation of Fl_Window::wait_for_expose() that
-	  became necessary with Mac OS 10.10 "Yosemite".
-	- Added the libfltk target to the Xcode project producing a static
-	  version of the FLTK library (Mac OS X).
-	- Restored the possibility to call Fl::set_font() before main() starts.
-	- Allow using the --enable-x11 configure option on the Mac OS platform
-	  which produces an X11 version of the FLTK library (don't use unless
-	  you know what you're doing).
-	- FLTK code and fluid-generated code can be used in static initializers.
-	- Added light gray separator line to fluid's widget browser (STR #2997).
-	- Improved tooltip behavior for huge tooltips: remove flicker, support
-	  key/mouse dismiss (STR #2650).
-	- Modifier key names displayed in shortcut labels can now be localized.
-	  See documentation of fl_shortcut_label(). You can set modifier key
-	  names for Ctrl, Alt, Shift, and Meta by assigning global string
-	  pointers to your translated modifier key names.
-	- Many documentation improvements and fixes.
-	- Fixed many compiler warnings (STR #2988).
-	- Fluid now generates code with less compiler warnings (STR #2813).
-	- Many CMake improvements and fixes. Note: CMake is mostly operating
-	  now, but not yet recommended for production use. Please test and
-	  report issues.
-	- Updated bundled zlib from 1.2.5 to 1.2.8.
-	- Updated bundled libjpeg from jpeg-8c to jpeg-9a.
-
-
-	Bug fixes
-
-	- Fix potential crash when using keyboard navigation on Fl_Tabs
-	  widget without children (STR #3333).
-	- Fix potential crash if Fl_Window::icon(NULL) was called to clear
-	  (reset) a window icon. This is now legal and documented behavior.
-	  The same applies to Fl_Window::default_icon().
-	- Allow widget callback to be NULL, i.e. no callback (STR #2835).
-	- Fixed Fl_Help_View buffer overflow (STR #3275).
-	- Fl_Browser now correctly adjusts its scrollbars when the default
-	  text size is changed with textsize(int) (STR #3057).
-	- Fixed Fl_Text_Display/Fl_Text_Editor slow scrolling, line number
-	  display, wrap mode "hiding" text behind scrollbars, and more
-	  scrollbar handling (alignment) (STR #3272).
-	- Fixed valgrind warning (uninitialized variable) in Fl_Window.
-	  Visible only with FLTK_ABI_VERSION >= 10303, since FLTK 1.3.3.
-	- Fixed Windows drag'n'drop not showing insert position if the drop
-	  target is inside the same window or process (STR #3209).
-	- Fixed undefined reference building shared cairo library (STR #3276).
-	- Fixed Fl_Browser if text argument to some methods is NULL (STR #3269).
-	- Fixed missing image release in fluid (STR #2840).
-	- Fixed out-of-bounds memory access in fluid (STR #3263).
-	- Fixed trailing white space in fluid .fl files (STR #3239).
-	- Several box types were not drawn correctly when deactivated.
-	  The background color for deactivated widgets is now correct:
-	  fl_inactive(color()) (STR #2907).
-	- Fix inconsistent interpretation of ld() in image handling
-	  (STR #3308). This is a minor issue since ld() is usually 0 or
-	  w()*d(). Documentation has been fixed, and ld() handling is now
-	  consistent in Fl_(RGB_)Image and fl_draw_image() and friends. See
-	  documentation of Fl_Image and Fl_RGB_Image for more information.
-	- Fixed Fl_Pixmap (background) drawing to respect the clip region
-	  (STR #3206).
-	- Fixed reading .pbm image files: 1 is now interpreted as black,
-	  and images whose width are a multiple of 8 are correctly read.
-	  Note: if you relied on the faulty behavior you may need to fix
-	  your image files.
-	- Restored window background drawing, particularly the 'plastic'
-	  scheme's background (STR #3059). This was a regression since
-	  FLTK 1.3.0.
-	- Prevent sending (FL_SHORTCUT) events to inactive widgets (STR #3216).
-	- Fixed button label clipping (STR #3237).
-	- Fixed Fl_Menu_::item_pathname() handling of descending submenu
-	  pointers (STR #3177).
-	- Fl_Text_Display: style buffer colors are no longer manipulated by
-	  fl_contrast() for normal text drawing (fltk.coredev thread started
-	  04/08/15, Subject: "RFC: Fl_Text_Display style buffer color weirdness")
-	- Fl_Tree::deactivate() now affects draw color of items (must have
-	  ABI 1.3.3 or higher enabled). For icons to draw deactivated,
-	  enable ABI 1.3.4. (test/tree has a 'deactivate tree' button)
-	- Fl_Tree::find_item() did not find items if the pathname contained
-	  identical strings (STR #3234).
-	- Fixed possible bad border effect when a set of radio menu items
-	  is located first in its menu (STR #3176): Fl_Menu_Item::set_only()
-	  is deprecated and replaced by Fl_Menu_::set_only(Fl_Menu_item*).
-	- Restore the correct state of mouse buttons and keyboard modifier keys
-	  after closing a file or printer dialog (STR #3221).
-	- Fix for deactivate colors issue with Fl_Text_Display/Editor (STR #3219).
-	- Fixed issue with MSWindows platform where the program kept running
-	  after closing all its windows (STR #3165).
-	- Fix potential buffer overflow (MSWindows: BEX64 error) and problem with
-	  MSWindows environment variables "HOME"(MinGW) vs. "UserProfile"(DOS)
-	- Fix issue with MSWindows platform where a window would decrease
-	  in size after each close/open (STR #3167).
-	- Fix undefined reference XGetUtf8FontAndGlyph (STR #3191).
-	- Fix potential keyboard hangup (STR #3192).
-	- Fix for: .xbm images were not previewed (STR #3131).
-	- Fixed crash on Mac platform when resizing a not yet shown() Fl_Gl_Window.
-	- Fixed potential Windows GDI leak (STR #3254).
-	- Fixed Linux/Unix potential program hang when dialog pops up while
-	  a menu is open (STR #3179).
-	- Fixed a crash when a Unix/Linux program calls take_focus() before any
-	  window has been show()n.
-	- Fixed an error on the Mac platform when drawing to an Fl_Image_Surface
-	  object without using the Fl_Image_Surface::draw() method.
-	- Fixed STR #3268 where a fullscreen window could become relocated
-	  behind the menu bar and dock (Mac OS only).
-	- Fixed STR #3207: ^C not working when numlock or capslock is on.
-	- Fixed code editor in Fluid (STR #3184).
-	- Fixed a potential hangup of the Fl::awake() queue under Windows if
-	  a window is resized or moved while the Fl::awake() message is sent
-	  (STR #3143).
-	- Fixed a regression: restore the possibility to call
-	  fl_draw_image(buf,X,Y,W,H,D,L) with negative D and/or L arguments.
-	- Fixed overflow in Fl_Valuator::precision(int) to 0...9 (STR #3280).
-
-
-CHANGES IN FLTK 1.3.3					RELEASED: Nov 03 2014
-
-	New features and extensions
-
-	- New class Fl_Copy_Surface allows copying graphical data to the
-	  clipboard in a cross-platform way (STR #3058).
-	- Support for pasting graphical data from the clipboard to a widget.
-	- New class Fl_Image_Surface allows drawing into an Fl_Image object.
-	- Methods Fl::add_clipboard_notify() and Fl::remove_clipboard_notify()
-	  to get notifications whenever the clipboard changes (STR #2636).
-	- New method Fl_Window::wait_for_expose() (STR #3124, STR #3129).
-	- New bilinear scaling method for RGB images (STR #2869, STR #3062).
-	- New method Fl_Widget::top_window() (STR #2948).
-	- New method Fl_Widget::top_window_offset() (part of STR #2944).
-	- New Fl_Tree_Item methods label_x(), label_y(), label_w(), label_h().
-	- New methods Fl::enable_im() and Fl::disable_im() to enable/disable
-	  system Input Methods (IM).
-	- New methods Fl::add_system_handler() and Fl::remove_system_handler()
-	  to intercept low level system events.
-	- New FLTK scheme "gleam" (STR #2672).
-	- New method Fl::is_scheme() to compare the current scheme name.
-	- New method to set custom icons for windows (STR #2816),
-	  see Fl_Window::icon() for more info.
-	- New method to set any custom cursor, based on a Fl_RGB_Image object.
-	  Also changed fallback cursors to use this method, so that fallback
-	  cursors are handled in a platform independent manner (STR #2660).
-	- New ability to convert Fl_Pixmap to Fl_RGB_Image (STR #2659).
-	- Support for full screen windows over multiple monitors.
-	- New optional line numbers in Fl_Text_Display and options to control
-	  line numbers and word wrapping (on/off) in example test/editor.cxx.
-	- On Linux/Unix, class Fl_Native_File_Chooser uses file dialogs from
-	  the Gnome environment (provided by the libgtk dynamic library) if
-	  available, and falls back to Fl_File_Chooser if not (STR #3088).
-	  Use option Fl::OPTION_FNFC_USES_GTK to enable/disable this feature.
-	- New support for the Mac OS text input system that deals with character
-	  composition and input of languages with large character sets (e.g.
-	  Chinese and Japanese). This implementation has been reported to work
-	  well for Chinese. Superficial testing suggests it's also operational
-	  for Japanese. In-depth testing remains needed though.
-
-	Other improvements
-
-	- Many CMake improvements (e.g. STR #2962, 2977, 2994, 3045, 3055).
-	- Some autoconf, configure improvements.
-	- Removed 1024 bytes constraint in labels and browser lines (STR #2990).
-	- Mac OS version of Fl_Native_File_Chooser: when using filters in a
-	  save file dialog, the output file extension gets changed when the
-	  user modifies the output file type.
-	- Many Mac OS X improvements related to Fl_Sys_Menu_Bar.
-	- Improved Mac OS X keyboard handling of special keys or combinations.
-	- General Mac OS X improvements, incl. high resolution (Retina)
-	  displays, and support up to Mac OS X 10.10.
-	- Documentation improvements and clarifications.
-	- Printing support improvements, including GL windows.
-	- Many improvements related to Fl_Tree (some of them only as ABI
-	  breaking features, see below).
-	- Some static data has been made 'const' to improve memory usage
-	  with shared libraries.
-	- Don't grab navkeys with modifiers (CTRL, ALT), as the application
-	  may want them (STR #3104).
-	- Check compiler support of -fvisibility, -fvisibility-inlines-hidden,
-	  and use it, if available. Reduces shared library size.
-	- Drag'n'drop behaves better now: if text is dropped in the widget it
-	  comes from, then it works like cut and paste.
-	- Other improvements of DND handling when dragging text from other
-	  applications, e.g. Firefox and Thunderbird.
-	- Windows message WM_QUIT is processed like SIGTERM, i.e. as a
-	  request to terminate the program.
-	- Fluid no longer closes the code window when hitting ESC (STR #2997).
-	- Improved Fl_Widget::when() handling in Fl_Tabs (STR #2939).
-	- Improved support for more recent compilers (clang and gcc) that
-	  issue more warnings, and fixed some 32-/64-bit compilation issues.
-	- Added method Fl_Window::clear_modal_states() to make it possible
-	  to remove the modal or non-modal state from a window (STR #3123).
-
-	Bug fixes
-
-	- Fixed word selection dragging in text input (STR #3014).
-	- Fixed border padding for special cases (STR #3061, Windows only).
-	- Fixed crash if Fl_Window::flush() called while window not shown()
-	  (STR #3028).
-	- Fixed segfault in fl_set_fonts_xft.cxx when loading fonts not named
-	  as expected (STR #2976).
-	- Fixed a memory leak in font loading/allocation (STR #3069).
-	- Fixed minor memory leaks in handling/freeing of X11 objects.
-	- Fixed OS X fl_read_image() and Fl_Paged_Device::print_window_part()
-	  when using a Retina display.
-	- Fixed MinGW build if configure didn't find strcasecmp() (STR #2994).
-	- Fixed access of protected member under Linux/Unix (STR #2903).
-	- Fixed various Mac specific OpenGL issues (STR #2944)
-	- Fixed PostScript printing with non-english locale (STR #3130).
-	- Fixed a regression in Fl_File_Chooser since FLTK 1.1.8: the
-	  Enter key now selects the file again.
-	- Fixed a bug in Fl_Native_File_Chooser (Windows) for some file name
-	  input filters (STR #3101).
-	- Fixed out-of-bounds memory access in Fl_Text_Display (STR #2730).
-
-    1.3.3 ABI FEATURES
-
-	To enable the following ABI features, put:
-	#define FLTK_ABI_VERSION 10303
-	..at the top of your FL/Enumerations.H and rebuild FLTK and your app.
-
-	- Added Fl_Window::shape(const Fl_Image*) to create arbitrarily-shaped
-	  windows
-	- Made Fl_Help_View::handle() public and Fl_Help_View::draw() protected
-	  to enable inheritance and for consistency (STR #2834).
-	  Note: both methods were private.
-	- Made Fl_Scroll::recalc_scrollbars() protected so that it can be used
-	  in derived widgets to calculate scrollbar visibility and positions.
-	- Added Fl_Table::tab_cell_nav() for controlling Tab key navigation of table
-	- Added Fl_Tree::get_selected_items(), returns the selected items as an array
-        - Added Fl_Tree::item_draw_callback(), letting one define a custom draw
-	  function for Fl_Tree_Item's.
-	- Fl_Tree: various related changes:
-	    o Added horizontal scrollbar
-	    o Separated draw() and tree size calculation
-	    o Added new public methods:
-	        > resize()           -- uses optimized dim calc, avoids tree recalc
-		> next_item()        -- added parameters: direction, visibility
-		> extend_selection() -- added parameters, improved algorithm
-		> calc_dimensions()  -- calc tix/y/w/h, tox/y/w/h and scrollbars
-		> calc_tree()        -- calc tree_w/tree_h
-		> recalc_tree()      -- schedules calc_tree()
-		> first_visible_item(), last_visible_item(), next_visible_item()
-		> first_selected_item(), last_selected_item(), next_selected_item()
-	    o Added protected variables:
-	        > _tix/y/w/h      -- tree widget 'inner' dimension
-		> _tox/y/w/h      -- tree widget 'outer' dimension
-		> _tree_w,_tree_h -- entire tree hierarchy width/height
-	    o Deprecated:
-	        > item_clicked() -- use callback_item() instead
-		> first_visible() -- use first_visible_item() instead
-		> last_visible() -- use last_visible_item() instead
-
-	- Fl_Tree_Item: various related changes:
-	    o Added Fl_Tree ptr: needed for auto-recalc when item modified directly
-	    o Added new methods tree(), recalc_tree()
-	    o Added new ctor that accepts Fl_Tree*
-	    o draw() parameters changed to include tree size calculations
-	    o Deprecated:
-	       > ctor using Fl_Tree_Prefs parameter (Fl_Tree* version better,
-	         and must be used for 1.3.3 ABI features to work correctly)
-	       > next_displayed() -- use next_visible() instead
-	       > prev_displayed() -- use prev_visible() instead
-	- test/tree: added tests for newly added features
-
-CHANGES IN FLTK 1.3.2					RELEASED: Dec 12 2012
-
-	- Removed unnecessary drawing calls (STR #2898)
-        - Fixed regression in FLTK 1.3.1 for unbundled Mac OS FLTK applications
-	  that did not appear in dock nor have a menu bar (STR #2890).
-        - Fl_Table::clear() now calls table->clear() for consistency. (STR #2889)
-	- Fixed Fl_Scroll widget that fails under Mac OS X 10.8 and Retina
-	  display (STR #2887).
-	- Prevents scrollbars from drawing when widget is sized too small
-	  to be visible (STR #2886).
-	- Documented how to make a Mac OS X FLTK application launchable
-	  by dropping files on its icon.
-	- Fixed a Mac-specific issue that appeared with OS 10.8 (Mountain Lion):
-	  long delay before opening when the application is started by dragging
-	  a file on the application icon.
-	- Fixed use of PNG image from in-memory data (STR #2884).
-	- Added static Fl_RGB_Image::max_size(size_t) to limit the maximum
-	  memory size allowed to RGB images (STR #2881).
-
-CHANGES IN FLTK 1.3.1					RELEASED: Nov 06 2012
-
-	- Fixed utf_strncasecmp and utf_strcasecmp
-	- Moved all inline constructors into source file to avoid bad DLLs
-	- Fixed Fl_Widget::copy_label() and Fl_Window::copy_label() when
-	  called with the old label() (STR #2836)
-	- Fixed Fl_Input_::maximum_size() documentation and replace() method
-	  to honor maximum_size() as number of allowed characters (STR #2747).
-	- Fixed a potential crash if Fl_Double_Window::flush() was called
-	  before show()
-	- Fixed regression (in FLTK 1.3.0) that could clear a radio
-	  button by using the keyboard (space or shortcut) (STR #2748)
-	- Fixed fl_pie() drawing too small on X11 (STR #2703)
-	- Fixed Fl_Menu issue with unusual menu flags (STR #2680)
-	- Fixed Windows DLL import of fl_xid() (STR #2670)
-	- Added Fl::screen_work_area() functions that compute the work area
-	  of a screen. These functions improve the positioning of menus.
-	  Changed Fl::x(), Fl::y(), Fl::w(), Fl::h() functions
-	  to return the origin and size of the work area of the main screen
-	  (STR #2695 + 2697)
-	- Created the FL_SCREEN_CONFIGURATION_CHANGED event that is triggered
-	  when a screen is added, removed, moved or when resolution is changed
-	  (STR #2600)
-	- Improved the description of page size and orientation by
-	  Fl_PostScript_File_Device.
-	- Added support for horizontal wheel movement under X11 and Windows
-	  Vista and above (STR #2644).
-
-    1.3.1 ABI FEATURES
-	  (To enable the following ABI features, put: #define FLTK_ABI_VERSION 10301
-	  at the top of your FL/Enumerations.H and rebuild FLTK and your app)
-        - Fl_Tree optimized to support large trees (eg. 100k items):
-	  Added _next_sibling and _prev_sibling to Fl_Tree_Item class,
-	  and support methods.
-
-
-CHANGES IN FLTK 1.3.0					RELEASED: Jun 16 2011
-
-	New Features
-
-	- Added UTF-8 Unicode support throughout FLTK and Fluid
-	- Added Fl_Tree widget for hierarchical views
-	- Added Fl_Table widget for widget layout
-	- Added Fl_Native_Filechooser as a widget and global options
-	- Added printing support (Fl_Printer class and friends) for native
-	  printing on Windows and Mac OS X, PostScript printing on X11
-	  with CUPS or lp, and PostScript file output on all platforms
-	- Added basic Fl_Device abstraction layer for all drawing functions
-	- Moved OS X code base to the more modern Cocoa toolkit thanks
-	  to the awesome work of Manolo Gouy (STR #2221)
-
-	API and ABI Compatibility to FLTK 1.1.x
-
-	- All strings are expected to be in UTF-8 Unicode encoding
-	- Replaced Fl_Scroll::position(int,int) with scroll_to(int,int)
-	  to avoid overriding Fl_Widget::position(int,int) (STR #1303)
-	- Although FLTK 1.3 maintains source code compatibility as good
-	  as possible, the binary interface changed considerably.
-	- Updated the bundled libpng to v1.5.1 (released Feb  3, 2011)
-	- Updated the bundled libjpeg to v8c   (released Jan 16, 2011)
-	- Updated the bundled zlib to v1.2.5   (released Apr 19, 2010)
-
-	API Enhancements and Changes
-
-	- Changed font index to 32 bit
-	- Changed font size to 32 bit
-        - Changed widget coordinates to 32 bit
-	- Corrected const methods of Fl_Text_{Buffer|Display|Selection}
-	  to be declared const, corrected an Fl_Text_Buffer attrib. typo
-	- All draw() methods of widgets are now protected (STR #2142).
-	- Changed Fl_Group::clip_children() to public (STR #2017)
-	- Changed socket library to winsock2 (ws2_32.dll) instead of
-	  wsock32.dll for Windows. The dll is now loaded dynamically only
-	  if/when needed.
-	- Changed hide() and show() methods. They are now virtual from
-	  Fl_Widget.
-	- Added new label and image alignments (STR #2269)
-	- Added global UI options (STR #2471)
-	- Added class Fl_Widget_Tracker to simplify safe handling of widget
-	  deletion in callbacks. This is used in Fl_Widget::do_callback()
-	  to prevent accessing widgets after deletion in the callback.
-	- Added sorting to Fl_Browser_ (STR #2113)
-	- Added new method client_area() for easier positioning of children
-	  in Fl_Tabs (STR #2480)
-	- Added interface to set color chooser mode (STR #2407)
-	- Added Fl_Menu_::find_item by callback
-	- Added loading jpeg images from memory
-        - Added support for shortcuts for Fl_Input_, Fl_Value_Input, and
-	  Fl_Text_Display derived widgets (STR #1770)
-        - Added Fl_Menu_ methods: insert(), find_index(), clear_submenu()
-	- Hotspot behavior of fl_message() and other common dialogs is now
-	  optional (STR #2561).
-	- Common dialogs like fl_message() and fl_ask() can now have a window
-	  title (STR #2562).
-
-	IDE Support and Command Line Build Options
-
-	- FLTK now supports Apple Xcode 3, MS VisualC 2008, and
-	  MS VisualC 2010. MS VisualC 6 support is maintained as a
-	  compatibility base for VisualC.net, etc. . FLTK continues
-	  to support configure/make and improved CMake build files.
-	- Added step by step README's for MSWindows, OS X, and four
-	  Linux distros.
-	- Added "ide" subdirectory for all IDE support files
-	- Added template to generate new projects with Xcode.
-	- Added --enable-cairo and --enable-cairoext  configure options.
-	- redesigned CMake files (STR #2317).
-	- The new configure option --enable-x11 (lowercase 'x') enables
-	  Cygwin builds under Windows (with --enable-cygwin) to use X11
-	  instead of GDI drawing (STR #2147, #2183) and is ignored otherwise.
-	- Changed "fltk-config --post foo" to create an application
-	  bundle rather than attaching a resource fork.
-	- Changed default for configure option --with-links for common
-	  misspellings on case sensitive file systems like Unix/Linux.
-	  The new default is --without-links; use --with-links on
-	  Unix/Linux only if you need the links (e.g. lowercase '.h')
-
-	Fluid
-
-	- Added argument-less constructor in Fluid Widget Class
-	- Added jpeg support to Fluid image() element
-	- Added binary data type to Fluid
-	- Empty functions in Fluid no longer create an
-	  implementation (STR #2259)
-	- Fixed internationalisation of menus using Fluid (STR #2246)
-	- Fixed menu item counting issue in Fluid (STR #2322)
-	- Fixed lost top item in Fluid's tree browser (STR #2233)
-	- Fixed Fluid dependency on X11 (STR #2261)
-	- Fixed Fluid textcolor output (STR #1992)
-	- Fixed wrong default value of Fl_Spinner in Fluid (STR #1991)
-
-	Documentation
-
-	- Added documentation for event delivery (STR #1983)
-	- Added Fl_Scroll::bbox() documentation (STR #1893)
-	- Updated documentation for Fl_Input_
-	- Updated Copyright dates to 2010 (STR #2036)
-	- Updated mirror sites in documentation (STR #2220)
-	- Fixed documentation for Fl_Progress (STR #2209)
-	- Fixed documentation (added missing COMCTL32.LIB dependency)
-
-	Other Improvements
-
-	- Added drag'n'drop support for Fl_Text_*
-	- Added visual feedback for button shortcuts (STR #2372)
-	- Added callback when double-clicking file in a file chooser
-	  (STR #2346)
-	- Added alternative Xft font names (STR #2215)
-	- Added mouse!=0 check in Fl_Glut_Window::handle (STR #2381)
-	- Added indexing to Fl_Preferences
-	- Added OS X cursor control to Fl_Input (STR #2169)
-	- Added menu shortcut alignment for OS X
-	- Added drop box to UTF-8 test that will show the UTF-8 encoding
-	  for the first dropped character
-	- Added flexible gap size for text buffer (STR #2046)
-	- Added clarification to Fl_GL_Window mode function (STR #1945)
-	- Added alternative text input awareness on OS X
-	- Improved handling of composed keys in OS X 10.5 and up
-	- Improved stability of fl_read_image (STR #2021)
-	- Much faster fl_read_image() for Windows (STR #2387).
-	- Improved support for faulty X11 clients (STR #2385)
-	- Integrated default menu into Demo test app
-	- Replaced _WIN32 symbols that had come with UTF-8 and the
-	  new Fl_Table widget with WIN32
-	- Widgets now remove stale entries from the default callback
-	  queue when they are deleted (STR #2302)
-	- Managing all Widget flags in a single location now (STR #2161)
-	- File chooser preview now recognizes UTF-8 encoded
-	  text files (STR #2218)
-	- Setting a default font for Xft (STR #2216)
-	- Restructured the unittest application
-	- Fl_Preferences.H now doesn't include windows.h any more
-	  (Windows only, STR #2173).
-	- Fl_Window::draw() now doesn't reset its x/y-coordinates to 0
-	  anymore before drawing itself and its children.
-	- Fl_Help_View handles HTML2 font color specification (STR #890)
-	- Widgets now remove themselves from their parent group (if any),
-	  when destroyed (STR #1894)
-	- Changed Fl_Group and Fl_Scroll to resize themselves before
-	  resizing their children (STR #2032)
-
-	Bug Fixes
-
-	- Fixed potential crash in fl_xid() on Linux (STR #2635)
-	- Fixed keyboard navigation in fl_choice() (STR #2591)
-	- Fixed alpha blending under X11 when line data size != 0 (STR #2606)
-	- Fixed Fl_Tabs selection border drawing, if tabs are at the bottom
-	  of the widget (STR #2480)
-	- Fixed Compiling with mingw-w64 (STR #2308).
-	- Fixed crashes when detecting illegal UTF-8 sequences
-	  in Fl_Text_* widgets (STR #2348)
-	- Fixed Fl_Text_Display Tabulator calculations (STR #2450)
-	- Fixed file access code to use UTF-8 strings (STR #2440)
-	- Fixed ARM Unicode cross compilation issue (STR #2432)
-	- Fixed xclass support for Fl_Window (STR #2053)
-	- Fixed Caps Lock handling in X11/XIM (STR #2366)
-	- Fixed handling of missing fonts in Xft (STR #2355)
-	- Fixed OpenGL hide/show issue in OS X (STR #2260)
-	- Fixed File Chooser preview hang if a device was choosen
-	- Fixed blinking of selection when the mouse was dragged
-	  outside of the Fl_Text_* widget
-	- Fixed Unicode support for Fl_Text_* widgets
-	- Fixed menu and shortcut handling (STR #2243)
-	- Fixed fltk-config to give --libs on one line (STR #2408)
-	- Fixed outside label redraw damage areas (STR #2436)
-	- Fixed compile errors when HAVE_LIBJPEG was not defined
-	  (STR #2382)
-	- Fixed special handling for ISO back-tab keycode (STR #2369)
-	- Fixed static allocation in Fl_Tabs (STR #2370)
-	- Fixed Fl_Widget::measure_label() to const (STR #2406)
-	- Fixed unbalanced Windows OleInitialize/OleUnitialize calls
-	  when loading/unloading the FLTK dll (STR #2417)
-	- Fixed X11/XDBE double buffering (STR #2152, #2197)
-	- Fixed menu and tooltip window animation bug under X11 (compiz)
-	  by setting an appropriate window type (STR #2082)
-	- Fixed max. fd calculation, if USE_POLL is enabled (STR #2324)
-	- Fixed clipping for offscreen rendering (OSX, STR #2330)
-	- Fixed possibility of wrong flags() in Fl_Window::iconlabel()
-	  (STR #2161)
-	- Fixed Scrollbar events when max is less than min (STR #2283)
-	- Fixed crash in test/Editor when freeing buffer
-	  too soon (STR #2294)
-	- Fixed Fl_Preferences Cygwin wide character bug (STR #2164)
-	- Fixed sorting in Fl_Browser - last item would not
-	  be sorted (STR #2300)
-	- Fixed window levels in OS X Cocoa (STR #2316)
-	- Fixed a buffer overflow in fl_utf8from_mb() (STR #2279)
-	- Fixed a Windows GDI leak when testing alpha blending capabilities
-	- Fixed crashes for recursive common dialogs (STR #1986, #2150)
-	- Fixed a name conflict with new (VS 2008 Express) winsock2.h
-	  versions and another conflict that produced compile errors
-	  with VS 2008 Express (STR #2301)
-	- Fixed all color related calls to Fl_Color type (STR #2208)
-	- Fixed Fl_Choice contrast with light-on-dark settings (STR #2219)
-	- Fixed X server "lock", if a modal dialog window is opened
-	  while a menu is active (STR #1986)
-	- Fixed Windows compile bug with "#define USE_COLORMAP 0"
-	  (STR #2241)
-	- Fixed glibc 2.10 compiler problems (Fedora 11 and others)
-	  with scandir() and strchr() (STR #2222)
-	- Fixed OpenGL shared context handling (STR #2135)
-	- Fixed gray-scale images with alpha channel (STR #2105)
-	- Fixed unexpected shortcut behavior for Win32 (STR #2199)
-	- Fixed fl_draw_image to obey the alpha channel (OS X only)
-	- Fix for multiple popups, when dragging and calling fl_alert()
-	  and friends from the callback (STR #2159)
-	- Fixed control key keycodes with modifiers on OS X
-	- Fixed bad system menu handling in OS X (STR #2153)
-	- Fixed File Input mouse pointer dragging (STR #2181)
-	- Fixed 'del' keycode on OS X
-	- Fixed OS X support for sending and receiving dnd data as UTF-8
-	- Fixed Copy/Paste operations with UTF-8, UTF-16 support and
-	  fltk1.1 compatibility. (STR #2104, 2121).
-	- Fixed fl_set_spot() for Windows (STR #2101)
-	- Fixed callback that would not be called when shortcut was used
-	  with radio and toggle buttons in default FL_RELEASE mode.
-	- Fixed a problem with TrackMouseEvent() (Windows only) that would
-	  generate wrong FL_LEAVE events with subwindows. TrackMouseEvent
-	  is now enabled by default (it was disabled for GNU compilers).
-	  It can be disabled by defining NO_TRACK_MOUSE.
-	  Improved test/subwindow.cxx (STR #2079)
-	- Fixed menu position close to screen border (STR #2057)
-	- Fixed adding an idle handler during a draw() call (STR #1950)
-	- Fixed first modifier key event (STR #1952)
-	- Fixed Fl_Scroll inside Fl_Scroll (STR #265)
-
-	Removed Features
-
-	- Removed Watcom compiler support because it was introduced in
-	  1.1.6 as a partial solution and never completed.
-	- Removed an XForms compatibility "feature" that prevented the
-	  down array of Fl_Menu_Button from drawing (STR #2141).
-	- Removed support for gcc 2.x (or older)
-	- Removed redundant Fl_Group casts
-
-
-CHANGES IN FLTK 1.1
-
-	See CHANGES_1.1
-
-
-CHANGES IN FLTK 1.0
-
-	See CHANGES_1.0
--- a/DoConfig/fltk/CHANGES_1.0
+++ /dev/null
@@ -1,799 +1,0 @@
-Changes in FLTK 1.0, up to FLTK 1.0.11 (May 7, 2001)
-
-CHANGES IN FLTK 1.0.11
-
-	- CHANGED THE DEFAULT RUN-TIME LINKING TO "MULTITHREADED
-	  DLL". You'll need to change your project settings to
-	  use this as well or you'll get errors.
-
-	- Added new --disable-gl option to configure script.
-
-	- Added new const const pointer versions of pixmap
-	  functions to eliminate an annoying pointer warning
-	  message that was generated by the Sun and other C++
-	  compilers.
-
-	- Eliminated all "var hides class::var" warnings.
-
-	- Eliminated all "string literal converted to char *"
-	  warnings.
-
-	- OS/2 updates from Alexander Mai.
-
-	- Tidied up the HTML documentation to be more standards
-	  compliant.
-
-	- Compiling with -DBOXX_BUGS will work around some
-	  problems with the newest X drivers that BoXX delivers,
-	  the problems all affect use of Overlays for normal X
-	  drawing and OpenGL drawing. Normal compilation is
-	  unchanged.
-
-	- The file chooser buttons use user_data() rather than
-	  the label to decide what to do, allowing the label to
-	  be somewhat cleaner.
-
-	- Selection color on X changed to blue, to match what
-	  happens on Windows now.
-
-	- Added support for AIX (static library only).
-
-	- Added support for SunOS 4.x
-
-	- Now process WIN32 WM_ACTIVATEAPP message to reset the
-	  key and button states in Fl::e_state.
-
-	- Fl_has_idle only tested N-1 callbacks and missed one.
-
-	- Restored WM_SYNCPAINT handling under WIN32; this fixed
-	  a refresh bug under some versions of Windows.
-
-	- Check for OpenGL headers before checking to see if
-	  OpenGL is supported.  This should eliminate compile
-	  errors due to missing non-FLTK header files...
-
-	- Add -D_INCLUDE_POSIX_SOURCE option when compiling with
-	  the HP compilers.
-
-	- Replaced remaining _WIN32 symbols with WIN32
-
-	- Removed reference to unused GL/glu.h header file, which is missing on
-	  some Linux systems.
-
-	- Fl_Gl_Window has a new method to allow you to get and set the context:
-
-	      void Fl_Gl_Window::context(void*, int destroy = 0)
-	      void* Fl_Gl_Window::context() const;
-
-	  Return or set a pointer to the GLContext that this window is
-	  using. This is a system-dependent structure, but it is portable to
-	  copy the context from one window to another. You can also set it to
-	  NULL, which will force FLTK to recreate the context the next time
-	  make_current() is called, this is useful for getting around bugs in
-	  OpenGL implementations.
-
-	  If destroy_flag is true the context will be destroyed by fltk when
-	  the window is destroyed, or when the mode() is changed, or the next
-	  time context(x) is called.
-
-	- Some cleanup of Fl_Gl_Choice to move most of the system dependent
-	  #ifdefs into Fl_Gl_Choice.cxx.
-
-	- Fl_Gl_Window does not set drawbuffer(BACKBUFFER) for
-	  single-buffered windows.
-
-	- Fl_Input::replace(...) correctly updates the display
-	  if the replaced region does not include the mark,
-	  point, or selected region.
-
-	- Added Fl::add_check(...), Fl::remove_check, and
-	  Fl::has_check. These are similar to idle callbacks but
-	  are only called just before it waits for new events.
-	  They can be used to watch for changes in global state
-	  and respond to them.
-
-	- "accu-timer": some changes to repeat_timeout that seem
-	  to make it accurate on Unix and WIN32 at speeds up to
-	  500000 timeouts/second (and 700000 on Linux), and
-	  within about .001% as accurate as the system clock.
-
-	- Fix to Fl_Valuator::step() by Guillermo Andrade.
-
-	- Fixed the FLUID write-menu bug introduced in 1.0.10
-
-	- Fl::flush() now calls GdiFlush() under WIN32 to
-	  ensure that all graphics are drawn.
-
-	- fl_curve() now uses a much better algorithim to figure
-	  out how many pieces to cut the curve into.
-
-	- FLUID now uses GetTempPath() under WIN32 to determine
-	  where to store the clipboard.
-
-	- Right-ctrl does not delete selected text in Fl_Input,
-	  until you type a composed character.
-
-	- Added simple FLTK and FLUID manual pages.
-
-	- Fl_Gl_Window leaked memory under WIN32.
-
-	- The colbrowser demo was missing an include file when
-	  compiled under OS/2.
-
-
-CHANGES IN FLTK 1.0.10
-
-	- Added a strcasecmp() function to FLUID; AIX doesn't
-	  have it.
-
-	- Bug #115509: Fl_Scroll not repainting background.
-
-	- Updated the configure script and makeinclude.in file
-	  to work with the Sun PRO compilers.
-
-	- Disabled the WIN32 async socket select code by default:
-	  it doesn't seem to work anymore...
-
-	- Fl::below_mouse() was incorrectly clearing e_is_click;
-	  this prevented any double-clicks from getting
-	  through...
-
-	- No longer clear Fl::keysym on every event, this makes
-	  better back compatability and fixes Win2000
-
-	- FLUID now restores which tab in an Fl_Tabs was
-	  selected when loads .fl files.
-
-	- Hack to fix the annoying "raise another application
-	  when a modal window is closed" problem on WIN32.
-
-	- Fl_Tabs now draws the background behind the tabs.
-
-	- Fl::set_fonts() on WIN32 fixed to work before the
-	  first window is shown.
-
-	- CUA function keys, code submitted by George Yohng
-	  <yohng@drivex.dosware.8m.com>
-
-	- Another attempt to get glut.h to work on WIN32.
-
-	- Fl_Menu_::add() ignores '&' signs when comparing menu
-	  items, so you don't have to make the shortcuts the
-	  same all the time.
-
-	- Fixed bit-flipping patterns in WIN32 bitmap code.
-
-	- Fixed size of data written by gif images to .C files
-
-	- Menu titles and buttons in the menubar can be images
-	  (allows it to be used as a toolbar)
-
-	- Reads selectBackground from the xrdb database to set
-	  the selection color. Adding this to your .Xdefaults
-	  will make fltk and Motif programs look much more
-	  Windoze-like:
-
-	      *selectForeground: white
-	      *selectBackground: #000080
-
-	- FL_WHEN_RELEASE on Fl_Input will now do the callback
-	  when the input field is hidden, for instance when it
-	  is on a tab and the user switches to another tab.
-
-	- Fl_Gl_Window with an overlay on X always resized any
-	  child windows even if you turned resizable() off
-	  because it turned it back on to resize the overlay
-	  window. This patch avoids changing resizable().
-
-	- Fix so multiple Fl::add_idle() calls works
-
-	- The input focus got messed up if you called
-	  Fl_Tabs::value(x) and there was something that took
-	  focus on an earlier tab.
-
-	- Removed some (not all) of the warnings when compiled
-	  with -Wwrite-strings, this should also get similar
-	  warnings Solaris produces.
-
-	- Made Fl_Browser not hide the Fl_Widget::show() method
-
-	- Changes & additions for OS/2 from Alexander Mai
-
-	- Patch from Mike Lindner to make the turning on/off of
-	  scrollbars on Fl_Scroll smarter.
-
-	- Added missing FL_EXPORT for Fl_Valuator::format()
-
-	- Shortcuts for "buttons" in a Fl_Menu_Bar work again.
-
-	- Fix for cut/paste support and Xdnd.
-
-	- Shortcuts for submenu titles in a menubar pop up the
-	  submenu (rather than calling the callback)
-
-	- Added documentation for GL_SWAP_TYPE
-
-	- Buttons with box(FL_NO_BOX) did not draw.  Apparently
-	  they did in older versions of fltk, I restored this.
-	  (bug 108771)
-
-	- Removed 8-bit colormap drawing code that was not doing
-	  anything in fl_draw_image due to the colormap
-	  allocation changes.  I also made fl_color(r,g,b)
-	  actually allocate the requested color rather than the
-	  nearest fltk color-cube color (this is only done for
-	  the first color that maps to a given entry in the fltk
-	  color cube), the result is that pixmaps with a small
-	  number of colors are drawn much more accurately. The
-	  resulting code seems to produce better images and is a
-	  good deal smaller!
-
-	- Fixed makeinclude.in so CFLAGS are used for c source
-	  code instead of CXXFLAGS. (bug 108694)
-
-	- Better fix for gif files suggested by pauly (bug
-	  108770)
-
-	- Performance of Fl_Gl_Window may be improved on some
-	  types of OpenGL implementations, in particular MESA
-	  or other software emulators, by setting the
-	  GL_SWAP_TYPE environment variable.  This variable
-	  declares what is in the back buffer after you do a
-	  swapbuffers:
-
-	      setenv GL_SWAP_TYPE COPY
-
-	      This indicates that the back buffer is copied to
-	      the front buffer, and still contains it's old
-	      data. This is true of many hardware
-	      implementations.  Setting this will speed up
-	      emulation of overlays, and widgets that can do
-	      partial update can take advantage of this as
-	      damage() will not be cleared to -1.
-
-	      setenv GL_SWAP_TYPE NODAMAGE
-
-	      This indicates that nothing changes the back
-	      buffer except drawing into it.  This is true of
-	      MESA and Win32 software emulation and perhaps some
-	      hardware emulation on systems with lots of memory.
-
-	  All other values for GL_SWAP_TYPE, and not setting
-	  the variable, cause fltk to assumme that the back
-	  buffer must be completely redrawn after a swap.
-
-	  This is easily tested by running the gl_overlay demo
-	  program and seeing if the display is correct when
-	  you drag another window over it or if you drag the
-	  window off the screen and back on. You have to exit
-	  and run the program again for it to see any changes
-	  to the environment variable.
-
-	- Optimized colormap usage on 8-bit displays with
-	  images. New code only allocates colors as they are
-	  needed (still converts indexed images to full RGB and
-	  dithers, tho...)
-
-	- Fixed .gif files in FLUID, they were broken by the fix
-	  for large .xpm files in version 1.0.9.
-
-	- Fix for OpenGL hardware overlays with the transparent
-	  index != 0. Tested on the brand new HP Linux
-	  Workstations, this is the only bug encountered.  Both
-	  X and OpenGL hardware overlay works perfectly on
-	  these, though configue may not enable it by
-	  default...)
-
-	- Fl_Choice and all other Fl_Menu_ subclasses draw the
-	  items using textcolor() as the default color of the
-	  text.
-
-	- Fix suggested by Stuart Levy to fix scrolling when
-	  deleting items from the browser.
-
-	- Replaced the -$(MAKEFLAGS) with $(MFLAGS) as per the
-	  gmake documenation.  Apperntly this works with other
-	  make programs and MAKEFLAGS is passed invisibly by
-	  gmake, though the documenation is not too clear...
-
-
-CHANGES IN FLTK 1.0.9
-
-	- More documentation fixes.
-	- GLUT_STROKE_*_ROMAN in glut.h are defined as 0,1 on
-	  WIN32 to match the glut header files there.
-	- Added Fl::has_timeout() and Fl::has_idle() functions.
-	- Added new Fl::repeat_timeout() method that
-	  measures time from when the last timeout was called.
-	  This has slightly less overhead and allows accurate
-	  spacing of timeouts.
-	- More Cygwin changes
-	- FLUID could crash with identifiers with trailing
-	  whitespace.
-	- Fixed the XPM loading code in FLUID to handle files
-	  longer than 2048 lines.
-	- Added a bunch of missing FL_EXTERN's to glut.h to
-	  eliminate GLUT linking errors under WIN32.
-	- Fix for sliders so that clicking on one with a small
-	  (or zero) slider_size will not move the slider.
-	- fl_shortcut.cxx didn't export fl_old_shortcut() in the
-	  WIN32 DLL.
-	- Fixed xpaint link in the documentation.
-	- Included Fl_Input word-wrap fixes from Alexander Rabi
-	  Beels. This will not affect things much because
-	  word-wrap is normally disabled.
-	- Patch from Stuart Levy so the *last* widget in an
-	  Fl_Pack may be resizable.  This should be compatable
-	  because resizable didn't do anything before so there
-	  was no reason to set it.
-	- Cleaned up the timeout and Fl::wait() code.  The new
-	  code calls the clock function less than half as much,
-	  which results in a noticable performance improvement
-	  in some apps.
-	- Fl::wait(time) with a time greater than the system can
-	  handle (24.855 days on NT, the same on some Unix
-	  systems) will now act as though the time is infinity.
-	  Before it would do unpredictable things.
-	- "USE_POLL" now compiles and works, although it is
-	  disabled by default. poll() is an alternative to the
-	  UNIX select() call which is available on some version
-	  of UNIX and may be faster depending on the platform;
-	  try it by editing config.h.
-	- The WIN32 USE_ASYNC_SELECT code now does translation
-	  and dispatching of the select events; this makes
-	  Windows a lot happier.
-	- Added a check for an open display in Fl::wait() so
-	  that you don't need an open window under X to call it.
-
-	  [changes in snapshot 2]
-
-	- fl_old_shortcut() wasn't being exported in the WIN32 DLL
-	  project.
-	- Updated Cygwin and Mingw makefiles.
-	- Updated the BC++ project file.
-	- You can no longer insert control chars into Fl_Int/Float_Input.
-	- Fl_Multiline_Input now resets the horizontal position when
-	  focus is changed; this caused problems when multiple multiline
-	  widgets were used in an application.
-	- All handle() methods are now public, and all draw() methods are
-	  now protected in FLTK widgets.
-	- More fixes to the OpenGL overlay code on win32.  This now
-	  seems to work quite reliably on several different pieces of
-	  hardware. Apparently doing SetLayerPaletteEntries with a
-	  palette larger than the overlay size caused the drivers to
-	  screw up in unpredictable ways. Also SwapBuffers swapped both
-	  the overlay and main window, which is not what fltk's
-	  interface wanted, this was easy to fix however.
-	- Patch for full scrollbars so that clicking on them does not
-	  move anything.
-	- Documentation fixes.
-	- Better horizontal scrolling of Fl_Input when cursor is near
-	  the end of the line.
-	- Fl_Input::value(x) selects all text.
-	- Fl_Output and Fl_Multiline_Output would scroll to the end
-	  of the text.
-	- filename_isdir() now drops any trailing slash from the
-	  filename (needed for Windows)
-	- Added return type for main() function in line_style demo.
-	- Running FLUID with the "-cs" option writes the I18N message
-	  file.
-	- The WIN32 version of XParseGeometry() didn't initialize some
-	  variables.  This caused a compiler warning but did not affect
-	  the actual code.
-
-	  [changes in snapshot 1]
-
-	- EMail changes - fltk-bugs@easysw.com now officially
-	  fltk-bugs@fltk.org.
-	- The FLTK DLL project file didn't include fl_compose.cxx
-	- Dropped the GCC -fno-rtti option since it caused problems
-	  with existing programs.
-	- Moved the .fl rules back to the test directory.
-	- Fixed some makefile and spec file problems.
-	- Fixed hardware overlays.  The problem was the new
-	  fl_clipped() code, which tests against the current window
-	  size.  The hardware overlay code did not set the current
-	  window when drawing the overlay.  I needed hardware overlay
-	  for DD's code, I'm not sure if these fixes are good enough to
-	  enable this in our general release.  Hardware overlay still
-	  only works on SGI Irix.
-	- Some patches to turn off the MSVC++ -Oa (assumme no aliasing)
-	  optimization flag.  Suprisingly this only broke a few parts
-	  of fltk, or at least these are the only ones I found.
-	- Does not unmap child windows when the main window is
-	  iconized.  This reduces flashing when the window is
-	  deiconized.
-	- Fl::key() is set to zero by all events except key down/up.
-	  This will allow you to reliably test if an event or callback
-	  was produced by a keystroke.  Fixes the bug posted about
-	  stopping Escape from closing the window.
-	- User defined cursors on OpenGL windows slowed down NT a
-	  *LOT*.  Some attempts to fix this by turning off the cursor
-	  while drawing the window.
-	- Filename completion in the file chooser works better on NT.
-	  Typing TAB fixes the case of everything you typed to match
-	  the shortest name that can be completed.
-
-
-CHANGES IN FLTK 1.0.8
-
-	- Many documentation changes/fixes/improvements.
-	- FLUID didn't save Fl_Double_Window's as
-	  double-buffered windows.
-	- Fl_Menu_ text color is used if Fl_Menu_Item text color
-	  is not set.
-	- Added Fl::first_window(window) method to change the
-	  "top" window that is used when showing modal windows.
-	  By default it is the window the user last
-	  clicked/typed in.
-	- The Fl_Menu::global() handler now uses the current top
-	  window instead of the menu bar for modal stuff.
-	- Added fl_line_style() function to set the line style.
-	  Note that user-defined line styles ONLY WORK UNDER X11
-	  and Windows NT/2000. Windows 95/98 do, however,
-	  support the "standard" line styles.
-	- Fl::wait() does not return immediately when no windows
-	- XForms keyboard shortcuts using hex keycode constants
-	  now work.
-	- Updated the configure script for *BSD and to turn off
-	  exceptions and RTTI in the FLTK library itself (does
-	  not affect applications which use these things)
-	- FLUID now supports I18N using the POSIX or GNU
-	  mechanisms.
-	- Fixed definition of glutBitmapWidth to match header
-	  file.
-	- Does not turn visible() on when a window is iconized()
-	  or if a modal window is shown and it's parent is
-	  iconized.  This allows the code "while (w->visible()
-	  && w->damage()) Fl::check();" to reliably wait for the
-	  window to be mapped and drawn the first time.
-	- Setting box(FL_NO_BOX) on a button makes it an
-	  invisible overlay
-	- FL_NORMAL_SIZE is now a global variable so you can
-	  change the default text size prior to creating your
-	  widgets.
-	- Menus now draw properly with a box type of
-	  FL_FLAT_BOX.
-	- Cygwin fixes to compile in POSIX mode.
-	- Fl_Value_Input callback can call value() or
-	  destructor.
-	- OpenGL overlays now work under Windows NT!
-	- Fl_Slider and Fl_Scrollbar could cause a divide by
-	  zero.
-	- Clicking in an Fl_Input field no longer selects the
-	  whole field, it just moves the text cursor.
-	- Tru64 UNIX fixes for filename_list()
-	- Fl_Browser now draws itself properly when deactivated.
-	- FLUID GUIs now use Courier font for all code input.
-	- The FLUID OK and Cancel buttons are now all shown in
-	  the same order in all windows.
-	- Fixes to compile under GCC 2.95.2
-	- Fixed the BC5 project files.
-	- FL_LEFT_MOUSE and friends are now in
-	  <FL/Enumerations.H>
-	- Fixes for fake OpenGL overlay code under WIN32.
-	- Message windows are now resizeable.
-	- On WIN32 non_modal (but not modal) windows have the
-	  close and size boxes.
-	- Fl_Button and friends didn't honor the
-	  FL_WHEN_NOT_CHANGED condition.
-	- Disabled XDBE on all platforms.
-	- XGetDefault patch from James Roth
-	- New fl_open_display(Display *) function to allow FLTK
-	  to share a display connection with another toolkit
-	  (like Xt, GTK, etc.)
-	- Shortcut labels for special keys should now display
-	  properly under WIN32.
-	- fl_set_fonts() did not reuse fonts.
-	- Fixed shortcut problem under WIN32 when the focus
-	  window changes.
-	- "dead" keys should now work under X11.
-	- Fixes to make FLTK compile with GCC 2.95.2
-	- FL_SHORTCUT fix for I18N.
-	- Fixed cut/paste problems under WIN32
-	- FLUID now produces correct code for nested class
-	  destructors.
-	- Nested windows should now redraw properly under WIN32.
-	- "table" is now static in fl_cursor.cxx
-	- Fl_Chart used the textcolor() and not the color() for
-	  horizontal bar charts.
-	- Now set the input hint for TWM and TWM-derived window
-	  managers.
-	- Now look for TrueColor visual if FLTK is compiled with
-	  USE_COLORMAP == 0.
-	- Fl_Scrollbar could generate a divide-by-0 error if the
-	  min and max values were the same.
-	- Fl_Menu_::remove() now removes whole submenus if
-	  needed.
-	- Scrollbar buttons now draw themselves pushed in as
-	  needed.
-	- Fixed the gl_overlay demo (and gl overlays in general)
-	  when they are faked with no hardware and the window is
-	  resized.
-	- Selections weren't shown in Fl_Browser widgets when an
-	  item used the @B (background) format.
-	- Windows can now be resized by the program under X11
-	  for more window managers.
-	- OS/2 makeinclude updates.
-	- Added Fl.H required by an inline function in
-	  Fl_Repeat_Button.H
-	- Fl_add_idle adds new functions to the end of the queue
-	  ring, rather than the start, so they are executed in
-	  the order added, and a callback that adds itself does
-	  not prevent others from being called.
-	- FLUID lets you type in code that starts with '#' for
-	  cpp directives.
-	- XBell() could be called before the X11 display was
-	  opened, causing a segfault.
-	- Fixed Fl_Gl_Window::ortho() - Borland C++ doesn't
-	  define GLint to "int", but instead to "long"...
-	- Fixed Fl_Browser scrollbars within an Fl_Scroll
-	  widget.
-	- Fl_Output (and non-focused Fl_Input) now scroll in
-	  response to position()
-	- Fl_Input now does not scroll horizontally if the
-	  entire string will fit in the widget.
-	- Fl_Scrollbar didn't push the right arrow buttons when
-	  you clicked outside the scroller.
-	- Now use WSAAsyncSelect() for better socket performance
-	  with Fl::add_fd()
-
-
-CHANGES IN FLTK 1.0.7
-
-	- Fixed Fl_Input_ bug under WIN32 - no longer stop accepting input
-	  when one of the "Windows" keys is pressed.
-	- Now call TranslateEvent for all events under WIN32.
-	- Fixes for OpenBSD and NetBSD
-	- The FL_CURSOR_HAND cursor now uses the IDC_HAND cursor instead of
-	  IDC_UPARROW under Windows 98 and 2000.
-	- Fl_Scrollbar now does a page-up/down when you click outside the
-	  scroller.
-	- Fl_Window::show(0, NULL) causes core dump
-	- Fixed a compile-time error in fl_call_main.c for Borland C++.
-	- "fluid -c filename.fl" would try to open an X display if the
-	  FLUID file contained an Fl_Browser widget.
-	- Fl_Browser now correctly measures items with @C or @B color
-	  formatting commands.
-	- Fixed a bitmap drawing bug for WIN32 (bit reversal table was wrong)
-	- fl_xyz() dialogs now set a title in the title bar.
-	- fl_alert() sounds the bell under X11.
-	- fl_xyz() dialogs now call MessageBeep() under WIN32.
-	- Fl_Browser_ didn't draw the selection box with the inactive color
-	  when the browser wasn't activated.
-	- Fl_Browser now responds to FL_KEYBOARD as well as FL_SHORTCUT.  If
-	  you subclass it to accept focus then keyboard navigation will work.
-	- Fl_Tile and Fl_Tabs do their callback when the user changes their
-	  display.
-	- Made some of the private methods of Fl_Browser protected.
-	- Now set win_gravity correctly, this helps some X
-	  window managers that use it position the window where
-	  FLTK wants it to be.
-	- 0-width browsers crashed.
-	- Minor change: if the X window manager does not do
-	  anything else with windows that don't have their
-	  position specified, the windows appear centered in the
-	  screen, rather than in the top-left corner.  This
-	  happened with modal windows under Irix 4Dwm.  This
-	  also causes windows to be centered when no window
-	  manager is running, which might be useful for
-	  installation gui programs?
-	- Clicking in an Fl_Input field the first time selects the entire
-	  field.
-	- Clicking the middle mouse button in an Fl_Input field now inserts
-	  the text at the indicated position instead of the cursor position.
-	- Drag-selecting text in an Fl_Input field now copies the text
-	  automatically.
-	- Fl::flush() no longer calls the draw() method for invisible windows.
-	- Calling deactivate() on an invisible widget could cause an
-	  infinite loop in some obscure cases.
-	- Added #pragma's for SGI C++ compilers - the 6.{23} X headers had
-	  errors in them.
-	- Fl_Gl_Window::ortho() changed so that text and images
-	  are not erased if the origin is off the left/bottom of the
-	  window.
-	- Small change to Fl_Input so that a click that gives it
-	  the focus also selects all the text.
-	- Fixed a slider drawing problem.
-	- You can now add/delete children of Fl_Tabs widgets whether or
-	  not they are visible.
-	- Now embed woff options for SGI C++ compilers (gets rid of X11
-	  header warnings)
-	- draw_pixmap used a cast that the Digital UNIX C++ compiler didn't
-	  like.
-	- The GLUT function key constants were off by one.
-	- The XPM reading code didn't handle RGB colors other than #rrggbb.
-
-
-CHANGES IN FLTK 1.0.6
-
-    - Fl_win32.cxx defined WM_MOUSE_LEAVE instead of WM_MOUSELEAVE.
-    - Fl_get_key_win32.cxx needed to include <ctype.h>
-    - gl_draw_pixmap.cxx needed a pointer cast for ANSI C++.
-    - Fl_Repeat_Button didn't always delete its timeout.
-    - Now keep track of the current OpenGL context; this provides
-      significant performance improvements for OpenGL applications
-      with a single context.
-
-
-CHANGES IN FLTK 1.0.5
-
-    - Fl_Roller didn't handle a width and height of 0.
-    - filename_list() fix for FreeBSD.
-    - Fixed RPM install docos - needed "--install" option...
-    - Fl_Browser_ wouldn't draw the vertical scrollbar right away if it
-      added a horizontal one which covered the last line.
-    - Fl_Tabs problems - single-character labels don't show up (problem in
-      measure_tabs() or measure_label() methods?), and doesn't clear top
-      tab area before drawing tabs.
-    - Fl_Browser needs a destructor.
-    - fl_draw_label() quoted characters between 0x80 and 0xa0, which
-      caused problems for some programs using the WinANSI character set.
-    - FLUID didn't handle declared class destructors.
-    - Fixed another WIN32 cut/paste bug.
-    - Fl_Tabs didn't work properly when there was only 1 tab.
-    - Fl_Menu::add() didn't delete the old array.
-    - Fl_Repeat_Button didn't delete its timeout when disabled.
-    - fl_draw() would crash if no font was set (now defaults to
-      a 14-pixel Helvetica font)
-    - Can't forward declare classes; need to check for "class ", "struct ",
-      "union ", etc.  See Bill's message
-    - Added #pragma around xlib.h for IRIX
-    - FL_KEYBOARD events have the correct x/y when sent to child X
-      windows. Note that if you worked around this bug by adjusting the
-      x/y yourself you will have to change your code. In addition all
-      events have the correct x/y when sent to the grab() widget.  And
-      the code to do all this was simplified a lot.
-    - The XPM code didn't handle named colors with spaces in the names.
-    - Pressing ESCape closed the window with pointer focus, even if there
-      was a modal window open (now closes the modal window).
-    - FLUID no longer produces trigraphs accidentally in the image data.
-    - FLUID uses string constant concatenation to produce shorter image
-      data.
-    - The Fl_Group deletion code crashed if there was exactly one child
-      widget.
-    - Simulated overlays in single-buffered Fl_Gl_Windows now draw
-      correctly (though very slowly as it requires the entire window to
-      be redrawn to erase the overlay).  This fix ported our Digital
-      Domain programs better to systems with no overlay hardware.
-    - Added support for extern "C" declarations in FLUID.
-    - Added Fl_Pack support to FLUID.
-    - Fixed the order of #include's in FLUID generated header files.
-    - Fixed detection of vsnprintf and snprintf under HP-UX 10.20 once
-      and for all.
-    - The checkers demo did not compile with GCC 2.95
-    - FLUID didn't output virtual destructors properly.
-    - Added inline "make_visible()" method to Fl_Browser.
-    - Fl::wait() now returns immediately if any timeouts are
-      called.
-    - 16-bit XPM files are now properly handled.
-    - Fl_Window::resize() was missing FL_EXPORT (caused problems
-      with Windows DLLs)
-    - FLUID was writing extern declarations twice.
-    - New FLUID arrow key functionality: arrows move by one pixel, shift+arrow
-      resizes, ctrl+arrow steps by grid
-
-
-CHANGES IN FLTK 1.0.4
-
-    - Documentation updates
-    - Fl_Browser::bottomline(size) didn't scroll to the bottom
-      if the second-to-last line was visible.
-    - fl_wait() didn't poll FDs properly for WIN32.
-    - Fixed DLL definitions for BC++.
-    - FLUID now handles nested classes properly.
-    - The "connect" demo now does a wait() for the PPP process
-      so that you aren't left with a lot of zombie processes.
-    - Fixed the FLTK colormap to use FF instead of F4 for full
-      intensity values.
-    - Minor change to scrollbar drawing code to match other
-      toolkits.
-    - New selections would cancel themselves out in WIN32.
-    - The header file links were broken in the IRIX
-      distributions.
-    - fl_elapsed() now always uses GetClockTick() for WIN32.
-    - fl_display is now initialized to GetModuleHandle(NULL) -
-      this fixes problems people had with Cygwin and MingW32.
-    - WinMain() is no longer compiled in with Cygwin and
-      MingW32; it wasn't being used for those compilers anyways.
-    - Added Solaris compiler options to configure script.
-    - Fl_Value_Input wouldn't update properly if you set the
-      value from a callback.
-    - Fl_Tile wouldn't resize if the resizeable widget was the
-      last child.
-    - Was missing #include <ctype.h> and #include <stdlib.h> in
-      several files, which caused problems on some platforms.
-    - Fixed another case where Fl_Browser_ could get in an
-      infinite resizing loop.
-    - Fl_win32.cxx now includes <FL/filename.H> to export missing
-      DLL symbols.
-    - FLUID didn't handle member functions that include the
-      scope operator.
-    - Fl_Chart was dividing by 0 if there were no data samples
-      or if they were all the same (min == max).
-
-
-CHANGES IN FLTK 1.0.3
-
-    - XDBE is now enabled for IRIX 6.[234] as well as 6.5.
-    - FLUID didn't write the when() condition properly.
-    - Tab/space/backtab/backspace can be used to navigate
-      through menus.
-    - Changed $(DSONAME) in the src/Makefile to "libfltk.so.1
-      libfltk.sl.1".
-    - Fl_Browser could read past the end of the string when
-      computing the item height.
-    - Fl_Browser could get in an infinite loop when checking to
-      see if scrollbars needed to be displayed.
-    - FLUID now honors the return type of the outermost widget.
-      This was a problem when substituting Fl_Group in an
-      Fl_Window widget.
-    - Fl_Menu_::copy() wasn't allocating a power of 2 for the
-      array size.
-    - FLWM would crash if fl_xmousewin was deleted.
-    - The fast_slow demo now uses output widgets.
-    - Timers under WIN32 were unreliable.
-
-
-CHANGES IN FLTK 1.0.2
-
-    - Documentation updates
-    - The Visual C++ project files didn't include fl_add_idle.cxx.
-    - LIBRARY/DSO name inconsistencies in src/Makefile.
-    - src/Makefile didn't clean the DSO.
-    - The valuator demo now has only a single callback.
-    - The code looked for HAVE_SYS_SELECT_H, but the
-      config file uses HAVE_SYS_SELECT.
-    - Fl_Image redraw not quite right under X11 or WIN32
-    - Problems with timeouts & cube demo under WIN32
-    - FLUID problems with inline functions.
-    - Documentation fixes...
-    - Fl_Browser::item_height() didn't handle blank lines or
-      non-default fonts properly.
-    - FL/math.h didn't have #ifndef...#define...#endif guards
-      against multiple inclusion...
-    - Fl_Menu_::copy() fix - didn't allocate power of 2...
-    - Fl::damage() now remains true until all windows are actually
-      redrawn.
-    - Fl_Widget destructor, hide(), and deactivate() methods no longer
-      send FL_LEAVE, FL_RELEASE, or FL_UNFOCUS events to the widget
-      (which could cause applications to crash).
-    - FLUID now outputs symbolic names for align() and when().
-    - Fixed select() to use maxfd + 1 instead of maxfd.
-    - Added "Fl::remove_fd(fd, when)" function so you can remove the
-      read and write callbacks separately.
-    - The Fl::add_fd() and Fl::add_timeout() arrays are now dynamically
-      allocated.
-    - FLUID didn't always turn the FL_SUBMENU flag on for submenu titles.
-    - The "extra code" in FLUID now is placed before the "o->end()" call
-      for Fl_Group and its derived classes.
-    - You can now set a FL_Window widget's class in FLUID to Fl_Group to
-      generate a function or class that builds part of a GUI (i.e. no window).
-    - FLUID now displays "Save file before exiting?" with the standard yes,
-      no, and cancel buttons rather than "Discard changes?".
-    - Fl_Menu_::add() now works with any type of menu, even one set with
-      the menu() method.
-    - The keypad keys were not always decoded properly under X11.
-    - Some pointers were not being turned off when widgets were deleted,
-      which caused some applications (like FLWM) to crash.
-
-
-CHANGES IN FLTK 1.0.1
-
-    - Documentation fixes.
-    - Fl::check() didn't return the correct value, breaking a number
-      of applications.
-    - Fixed FLUID bug that caused styles patch to crash when you delete
-      a menu item.
-    - Updated valuators demo to put the values in the gui box.
-    - Fl_Browser_::item_height() didn't always compute the correct
-      value.
-    - Fixed the alignment of Fl_Choice text.
-    - Fixes for OS/2.
-    - Fl_Menu_Item::clear() didn't clear value.
-    - Added some changes to make FLTK work with Borland C++.
-    - ANSI C++ fixes.
-    - Plugged a memory leak in the fractal demo.
-    - Fl::add_timeout() didn't work under WIN32 with small values.
-    - The configure script and makefiles now define DSONAME and
-      use the static library for all example programs.
--- a/DoConfig/fltk/CHANGES_1.1
+++ /dev/null
@@ -1,2660 +1,0 @@
-Changes in FLTK 1.1, up to FLTK 1.1.10 (December 27, 2009)
-
-CHANGES IN FLTK 1.1.10					Dec 27, 2009
-
-	- Widgets now remove stale entries from the default callback
-	  queue when they are deleted (STR #2302)
-	- Fixed selection bug in Fl_Int_Input (STR #2292)
-	- Fixed character set conversion functions (STR #2268)
-	- Fixed image lib configure and fltk-config issues by backporting
-	  the image lib and zlib configure code from FLTK 1.3 (STR #2203)
-	- Updated the bundled libpng to v1.2.40 (released Sep. 10, 2009)
-	- Fixed Fl_Choice contrast with light-on-dark settings (STR #2219)
-	- Added Xft2 font lookup table (STR #2215)
-	- Fixed X server "lock", if a modal dialog window is opened
-	  while a menu is active (STR #1986)
-	- Updated mirror sites in documentation (STR #2220)
-	- Setting a default font for Xft (STR #2216)
-	- Temporarily limited builds to 32-bit on OX S to stay
-	  compatible to Snow Leopard
-	- Fixed Windows compile bug with "#define USE_COLORMAP 0"
-	  (STR #2241)
-	- Fixed glibc 2.10 compiler problems (Fedora 11 and others)
-	  with scandir() and strchr() (STR #2222)
-	- Fixed OpenGL shared context handling (STR #2135)
-	- Fixed gray-scale images with alpha channel (STR #2105)
-	- Fixed unexpected shortcut behavior for Win32 (STR #2199)
-	- Added cast to Fl_Color in all Fluid code (STR #2206)
-	- Fixed wrong identifier for special keys combined with
-	  modifier (STR #2196)
-	- Fixed documentation for Fl_Progress (STR #2209)
-	- Fix for multiple popups, when dragging and calling fl_alert()
-	  and friends from the callback (STR #2159)
-	- Avoiding crashes for recursive common dialogs (this does not
-	  fix the issue at hand yet) (STR 2150)
-	- Fluid printing used wrong colors under Windows (STR #2195)
-	- Fixed bad system menu hadling in OS X (STR #2153)
-	- Fixed File Input mouse pointer dragging (STR #2181)
-	- Added Fl_Scroll::bbox() documentation (STR #1893)
-	- Fixed static linking of image libraries (STR #1962)
-	- Fixed callback would not be called when shortcut was used with
-          radio and toggle buttons in default FL_RELEASE mode.
-	- Fixed a problem with TrackMouseEvent() (Windows only) that would
-	  generate wrong FL_LEAVE events with subwindows. TrackMouseEvent
-	  is now enabled by default (it was disabled for GNU compilers).
-	  It can be disabled by defining NO_TRACK_MOUSE.
-	  Improved test/subwindow.cxx (STR #2079)
-	- Fixed RGB colors for round box (STR #2097)
-	- Fixed documentation (added missing COMCTRL32.LIB dependency)
-	- Fl_Group::clip_children() is now public (STR #2017)
-	- Fixed first modifier key event (STR #1952)
-	- Fixed wrong default value of Fl_Spinner in Fluid (STR #1991)
-	- Fixed Fluid textcolor output (STR #1992)
-	- Added clarification to Fl_GL_Window mode function (STR #1945)
-	- Fl_Group and Fl_Scroll now resize themselves before
-	  resizing their children (STR #2032)
-	- Fixed adding an idle handler during a draw() call (STR #1950)
-	- Improved stability of fl_read_image (STR #2021)
-	- Fixed menu position close to screen border (STR #2057)
-
-
-CHANGES IN FLTK 1.1.9					RELEASED: Apr 27 2008
-
-	- Improved color contrast in secondary selection blocks
-	  of Fl_Text_Display (STR #1917)
-	- Fixed regression in callback handling (STR #1918)
-	- Fixed wrong relative path when absolute path has a
-	  trailing slash in fl_filename_relative (STR #1920)
-	- Fixed multiple selection of files and directories in
-	  Fl_File_Chooser (STR #1913)
-	- Fixed MSWindows crash when selecting umlauts
-	  in Fl_Help_View (STR #1912)
-
-
-CHANGES IN FLTK 1.1.8					RELEASED: Mar 27 2008
-
-	- Documentation fixes  (STR #1454, STR #1455, STR #1456,
-	  STR #1457, STR #1458, STR #1460, STR #1481, STR #1578,
-	  STR #1639, STR #1645, STR #1644, STR #1792, STR #1793,
-	  STR #1742, STR #1777, STR #1794, STR #1827, STR #1843,
-	  STR #1796, STR #1815, STR #1726, STR #1753, STR #1855,
-	  STR #1862, STR #1867, STR #1874, STR #1888)
-	- Fixed library path in Makefile (STR #1885)
-	- Fixed image read for partial regions on X11
-	  (STR #1716)
-	- Fixed KDE/Gnome icon paths (STR #1795)
-	- Fixed Tab key to wrap around menu bars (STR #1877)
-	- Fixed possible timer leak in Scrollbar (STR #1880)
-	- Added documentation about the potential limitations
-	  of Fl::grab on newer operating systems (STR #1747)
-	- Fixed lockout when mixing popups and alerts
-	  (STR # 1869)
-	- Fixed recursion crash in event handling (STR #1873)
-	- Fixed missing return code in 'fltk-config' (STR #1875)
-	- Fixed inconsistencies with CHANGED flags (STR #1719)
-	- Fixed message sent to hidden widgets (STR #1849)
-	- Fixed width calculation in Fl_Help_View (STR #1868)
-	- Fixed offset bug in OS X pixmap code (STR #1856)
-	- Fixed potential buffer overrun
-	  in Fl_Preferences (STR #1853)
-	- Fixed method attributes in consecutive class
-	  declarations in FLUID (STR #1741)
-	- FLUID checks for seperately declared callbacks to
-	  avoid a bogus "extern" declaration (STR #1776)
-	- Added "protected" class memebrs in FLUID
-	- Double-clicking a widget in a FLUID layout will show
-	  the item in the widget browser
-	- Fixed color highlighting in Text_Display
-	- Fixed 16 bit PNM image support (STR #1847)
-	- Fixed exposure event on zero size windows (STR #1824)
-	- Fixed overlay offset for OS X Quartz (STR #1729)
-	- gl_font() support for Xft+X11 (STR #1809)
-	- Fl_Gl_Window::mode() needed to hide and show the window
-	  when toggling stereo mode (STR #1846)
-	- Fl_Gl_Window::show() did not work reliably on Mac OS X
-	  (STR #1707)
-	- Added Fl_Group::clip_children() methods to support
-	  automatic clipping of child widget drawing (STR #1844)
-	- Fl_Browser_ and friends now support FL_WHEN_ENTER_KEY
-	  for both Enter/Return and double-clicks (STR #1818)
-	- Fl_Help_View did not release the images it used (STR
-	  #1817)
-	- Shared libraries would not build on 64-bit Linux
-	  systems with an existing non-PIC FLTK installation
-	  (STR #1791)
-	- Fl_Browser::hide() and Fl_Browser::show() did not
-	  correctly update the scrollbar (STR #1724)
-	- The configure script now shows a summry of the
-	  configuration results (STR #1810)
-	- "fltk-config --use-* --libs" did not list all of the
-	  dependent libraries (STR #1799)
-	- Hiding a nested window on WIN32 caused 100% CPU (STR #1748)
-	- Changing the window size in FLUID would not mark the
-	  project as modified (STR #1751)
-	- Fixed fl_filename_isdir for "/"-path (STR #1761)
-	- Fixed Fl_Chart drawing (STR #1756)
-	- Fixed mapping of subwindows with unmapped parent
-	  windows (STR #1706)
-	- Fixed rendering of grayscale images with alpha
-	  channel (STR #1703)
-	- Fixed occasional incomplete refresh (STR #1681)
-	- Improved fl_down, fl_frame, added fl_box (STR #1678)
-	- Fixed selection of submenu items in
-	  input_choice (STR #1676)
-	- Fixed calculation of stride for image scaling and
-	  color manipulation (STR #1673)
-	- Made -O3 the default optimization on Cygwin/Mingw since
-	  -Os currently creates bad code (STR #1656)
-	- OSF/Tru64 now uses 'install-sh' instead of 'install' to
-	  accomodate for a missing '-d' option (STR #1632)
-	- New option in Fluid project settings to translate all
-	  shortcut modifiers from FL_META or FL_CTRL to FL_COMMAND
-	- Made icon size fixed (50x50) in fl_message etc. (STR #1626)
-	- Fixed selection of first word in Fl_Help_View
-	- Fixed endless loop in Fl_Text_Display (STR #1655)
-	- Allowing shortcuts in Tabs (STR #1652)
-	- Fixed Makefile "make clean" (STR #1642,
-	  STR #1643, STR #1641)
-	- The sample RPM spec file now enables large file support
-	  and threading support (STR #1603)
-	- Changed minimum contrast between background and text to
-	  99 and added more weight to the blue component to improve
-	  readability for certain color combinations (STR #1625)
-	- Fixed VCNet OpenGL project file (STR #1617)
-	- Fixed scrolling of clipped areas in MSWindows (STR
-	  #1601)
-	- Fixed clipping in OS X Quartz offscreen buffers (STR
-	  #1595)
-	- Now flush file chooser preferences after every change to
-	  avoid data loss (STR #1609)
-	- The Fl_File_Chooser constructor now saves and restores the
-	  current group (STR #1611)
-	- Added Fl::awake(fn*,void*) to set a handler for thread
-	  messages (STR #1536)
-	- Added "mute sound" option to Sudoku game.
-	- Updated the bundled zlib to v1.2.3.
-	- Updated the bundled libpng to v1.2.16.
-	- "make install" now uses the install command (or the
-	  included install-sh script) to copy files to the
-	  install directories, to ensure that permissions are
-	  correct.
-	- Fixed DLL generation via MingW/Cygwin (STR #1546)
-	- FLUID incorrectly opened the display when generating
-	  source code for Fl_Help_View widgets (STR #1318)
-	- Fl_Double_Window did not always show the scheme
-	  background image.
-	- Fixed first window behavior in OS X (STR #1548)
-	- Fixed calculation of character widths for OS X
-	  Quartz rendering (no STR)
-	- Fixed OS X mouse click handling (STR #1504)
-	- Added missing GLUT functions so that FLTK can be used
-	  as a fairly complete C++ replacement for the original
-	  GLUT library (STR #1522)
-	- Fl::awake() could block on X11 and OSX (STR #1537)
-	- Updated recursive mutex code to run on platforms other
-	  than Linux and to do a run-time check to determine
-	  whether they are supported by the kernel (STR #1575)
-	- WIN32 did check callbacks after the event processing instead of
-	  before as documented (STR #1535)
-	- Fl_File_Chooser now hides the window before doing a callback
-	  when the user clicks on the OK button (STR #1565)
-	- Fixed indentation of nested HTML elements (STR #1549)
-	- Made layout of Fl_Help_Dialog consistent with other
-	  help windows and web browsers.
-	- Improved GTK+ schemed round box (STR #1531)
-	- Fluid avoids writing unsupported combinations of the
-	  "when()" flags (STR #1501)
-	- Fl_Browser_ would allow keyboard callbacks even though
-	  "when()" was set to "never" (STR #1501)
-	- Added automated little helpers to Sudoku
-	- Added example code for Wizard with the
-	  Tabs demo (STR #1564)
-	- Optimized Fl_Tabs drawing for speed (STR #1520)
-	- OS X resource fork now obsolete (STR #1453)
-	- Added chapter 10 about multithreading (STR #1532,
-	  1533)
-	- OS X system menu bar top level attribute support
-	  improved (STR #1505)
-	- Fixed Quartz image drawing bug (STR #1438)
-	- Fixed Quartz fl_read_image
-	- Overlay drawing is now avoiding XOR mode (STR #1438)
-	- Fixed Scroll crash in Fluid Live Mode (STR #1524)
-	- Fixed mousewheel event propagation (STR #1521)
-	- Fixed drawing issues of a tile in a scroll (STR #1507)
-	- Fixed dismissing buttons in menu bars (STR #1494)
-	- Making a child group visible in a Fl_Tabs or Fl_Wizard
-	  group now shows that tab or pane.
-	- Added fl_open_uri() function as proposed on
-	  fltk.development.
-	- Added Fl::has_check() which previously was prototyped
-	  and documented, but not implemented (STR #1542)
-	- Enabled Fl::add_check() on OS X (STR #1534)
-	- Documented tooltip inheritance (STR #1467)
-	- Better event mouse handling fixing detached menus and
-	  sticky tooltips (STR #1463, STR #449)
-	- Added Fl::scrollbar_size() methods that are used by all
-	  of the scrollbar-using widgets (STR #1500)
-	- fl_read_image() was broken on Intel-based Macs (STR
-	  #1490)
-	- Fl_Progress was using the wrong width to calculate
-	  progress (STR #1492)
-	- Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report
-	  the desktop work area on X11 (STR #1482)
-	- Shortcut events could be sent to the wrong window (STR
-	  #1451)
-	- Fl_Spinner did not handle the arrow keys properly (STR
-	  #1476)
-	- Fl_File_Browser did not calculate the width of
-	  directory items correctly (STR #1469, STR #1470)
-	- Fl_Pack incorrectly started widgets at an offset of 1/2
-	  the spacing value.
-	- FLUID did not generate correct window class code if
-	  the class name was not a standard FLTK window class.
-	- FLUID incorrectly included <FL/Fl_classname.H> for
-	  widget classes that were not subclassed from a standard
-	  FLTK widget class.
-	- The demo master test program now supports scheme
-	  selection and all demos use it (STR #1459)
-	- fl_arc() and fl_pie() did not draw properly on WIN32
-	  when the start and end points were identical (STR
-	  #1461)
-	- Fl_Input and Fl_Text_Editor now hide the mouse pointer
-	  when typing into them (STR #1466)
-	- Implemented alpha blending for Quartz, WIN32, and X11
-	- Check buttons did not redraw properly with box() set to
-	  FL_NO_BOX (STR #1440)
-	- Added the Bluecurve-inspired scheme "gtk+".
-	- Updated documentation (STR #1420, STR #1421)
-	- Fixed font caching issue (STR #1415)
-	- Fixed crash in fl_file_chooser (STR #1410)
-	- Fixed Fluid hotspot bug (STR #1416)
-	- Fixed image copy code (STR #1412)
-	- Fixed latin-to-roman text conversion (STR #1411)
-	- Fixed Cygwin timeout for "select" calls (STR #1151)
-	- Improved Mac OS X subwindow handling (STR #1402)
-	- Fixed more inconsistencies between fl_draw and
-	  fl_measure (STR #1408)
-	- Fixed fl_measure which mistook a trailing '@@' for a
-	  symbol (STR #1406)
-	- Fixed GLUT behavior on window creation (STR #1403)
-	- Fixed OS X bug that would hide tooltips before they
-	  were shown (STR #1392)
-	- Fixed Fl_Tabs tooltip reappearing (STR #1324)
-	- Added a new demo game called "Block Attack!"
-	- Updated the Sudoku game to show a notice about Hard and
-	  Impossible puzzles having multiple solutions which are
-	  not a bug or error (STR #1361)
-	- Fixed filechooser to behave as documented when file
-	  pattern changes (STR #1359)
-	- Completed the global function index and added an
-	  alphabetical list of all methods (STR #1319)
-	- Avoiding problems with some platforms that don't
-	  implement hypot() (STR #1366)
-	- Fixed floating point value formatting for Fl_Spinner
-	  (STR #1331)
-	- Fixed Fl_Positioner callback when released (STR #1387)
-	- Fixed WIN32 zero size window issue (STR #1387)
-	- Fixed Sudoku window positioning (STR #1398)
-	- Fluid Code Declarations can now handle C++ style
-	  comments (STR #1383)
-	- Fixed uninitialized data in OS X and WIN32 timeout
-	  functions (STR #1374).
-	- Fixed speed issues when measuring text on OS X with
-	  Quartz (STR #1386).
-	- Fixed focus issues on OS X (STR #1377)
-	- Optional precision argument when storing floats or
-	  doubles in a Preferences file (STR #1381)
-	- Fixed callback not called when using arrow keys in
-	  Fl_Slider (STR #1333)
-	- Changing the shortcut of a widget in fluid now marks the
-	  document as dirty (STR #1382)
-	- Fl_Text_Editor now correctly handles middle mouse
-	  clicks (STR #1384)
-	- Added some GLUT4 functions (STR #1370)
-	- Added "context_changed()" function for OpenGL windows
-	  which allows efficient texture loading (STR #1372)
-	- Added missing "const" to GLUT call (STR #1371)
-	- Fixed stray FL_RELEASE events after clicking system
-	  areas on OS X (STR #1376)
-	- FLUID now only writes definitions of "o" and "w"
-	  variables as needed, reducing the number of "variable
-	  is shadowed" warnings from GCC.
-	- Added access to Xft font pointer (STR #1328)
-	- Fixed endianness in OS X mouse cursor graphics (STR
-	  #1348)
-	- Fixed crash on mixed use of keyboard and mouse for
-	  Fl_Menu_Button (STR #1356)
-	- Fixed Fl_Window::visible() and shown() for OS X
-	  (STR #1341)
-	- Fixed Fl_Window::copy_label() losing copy (STR #1332)
-	- Documentation fixes (STR #1336, STR #1329, STR #1339,
-	  STR #1340)
-	- Added support for floating point Fl_Spinner in the
-	  API, documentation, and Fluid (STR #1331)
-	- Repeat button now cancels timeout if it should get
-	  deactivated during a callback (STR #1330)
-	- Added support for assigning Fl_Menu_Items to array
-	  variables in Fluid (STR #1280)
-	- Added --with-archflags configure option to allow
-	  passing of specific architecture-selection options to
-	  the compiler and linker.
-	- Fixed WIN32 window stacking bug (STR #1296)
-	- Fixed wrong code generated by FLUID for Scrollbars (STR
-	  #1287)
-	- Loading a file would not update the Widget Properties
-	  dialog in FLUID (STR #1326)
-	- Fixed key compose sequences for shifted keys (STR
-	  #1194)
-	- Added text selection and copy to Fl_Help_View.
-	- Fixed position of popup menu titles (STR #1322)
-	- Showing any window will disable the current tooltip
-	  so it won't pop over menus (STR #1321)
-	- Updated documentation to reflect limitation of
-	  Fl::delete_widget() (STR #1306)
-	- Fixed line wrapping in Fl_Text_Display (STR #1227)
-	- New function Fl::event_original_key() returns key code
-	  before NumLock handling.
-	- Many OS X Quartz fixes (STR #1310, etc.)
-	- Fixed shortcut and default focus for message dialogs
-	  (STR #1298)
-	- Fixed focus issues (STR #1286, STR #1289, STR #1296)
-	- Fixed window resizing in OS X (STR #1297)
-	- In FLUID, declarations starting with the keyword
-	  'typedef', 'class', or 'struct' are now treated
-	  correctly if inside a class (STR #1283)
-	- Tabs now show the correct tooltip (STR #1282)
-	- Included fltk.spec in configure.in (STR #1274)
-	- Fixed insufficiently invalidated cache
-	  in Fl_Browser (STR #1265)
-	- Attempt to fix multi monitor issues (STR #1153)
-	- Fixed warnings when compiling w/Cygwin (STR #1152)
-	- Fixed missing reset of flag in FLUID (STR #1187)
-	- Fixed maximizing in OS X (STR #1221)
-	- Fixed 'make distclean' to remove binaries inside
-	  MacOS app packages (STR #1169)
-	- FLUID Code Viewer is now truly a viewer, not a text
-	  editor because edited text can not be saved.
-	- Fl_Spinner is now fully supported by FLUID (STR #1158)
-	- Fixed usage of deleted object after menu pulldown
-	  (STR #1162)
-	- Calling fl_font(0, 0) under Xft would access a NULL
-	  pointer (STR #1205)
-	- Setting a new value in Fl_Input_ wil now actually move
-	  cursor to the end of the input field as documented
-	  (STR #1161)
-	- FLUID crashed on WIN32 with international characters
-	  (STR #1176)
-	- Fl_Check_Browser did not allow the user to toggle the
-	  check boxes (STR #1232)
-	- Fl_Help_View crashed on WIN32 with international
-	  characters (STR #1228)
-	- Fl::run() no longer clears resources on WIN32 (STR
-	  #1231)
-	- Fl::add_timeout() leaked resources on OSX (STR #1233)
-	- Accented characters could not be entered on OSX (STR
-	  #1195)
-	- The caret key lookup was missing for OS X
-	- FLUID didn't handle loading .fl files with
-	  international characters properly with all compilers
-	  (STR #1150)
-	- Fl_Spinner's minimum() and maximum() "get" methods were
-	  misspelled (STR #1146)
-	- The largefile support changes in 1.1.7 broke binary
-	  compability for fl_filename_list(); you must now use
-	  "--enable-largefile" when configuring to get large file
-	  support, and the large file support definitions are
-	  added to the output of "fltk-config --cflags" (STR
-	  #1159)
-
-
-CHANGES IN FLTK 1.1.7					RELEASED: Jan 17 2006
-
-	- Documentation fixes (STR #571, STR #648, STR #692, STR
-	  #730, STR #744, STR #745, STR #931, STR #942, STR #960,
-	  STR #969)
-	- Various menu widget fixes (STR #1140, STR #1143, STR
-	  #1144)
-	- The threads demo would display negative prime numbers
-	  on MacOS X; this appears to be a MacOS X bug, but we
-	  added a workaround to "fix" this (STR #1138)
-	- Fl::dnd() now sets the content type of the drag to
-	  "text/uri-list" when it sees the dragged text is
-	  composed of URIs.
-	- Fixed keyboard shortcut handling in FLUID and shortcut
-	  labeling in FLTK (STR #1129)
-	- Fixed include path for CMake build (STR #1123)
-	- Fixed unnecessary delay in WIN32 event handling
-	  (STR #1104)
-	- Fixed handling of Ctrl-C in Fl_Text_Display (STR #1122)
-	- OS X Quartz version now draw a nice resize control (STR
-	  #1099)
-	- FLTK now enables large file support when available (STR
-	  #1087)
-	- Fl_Clock_Output depended on a time value that was the
-	  same as an unsigned long, which is incorrect for WIN64
-	  and VC++ 2005 (STR #1079)
-	- Fl_Text_Display::wrap_mode() would crash if no buffer
-	  was associated with the widget (STR #1069)
-	- Updated the default label and text colors of all widgets
-	  to use FL_FOREGROUND_COLOR instead of FL_BLACK (STR
-	  #1052)
-	- Fl::set_fonts() now works with Xft (STR #1012)
-	- Fl_Value_Input now uses the screen-absolute position
-	  instead of the window-relative position when dragging
-	  the value; this avoids some jumping conditions (STR
-	  #1037)
-	- Menus now pop up fully inside the screen if possible
-	  (STR #973)
-	- Fixed illegal access in Preferences (STR #1025)
-	- Fixed x-offset problem in Help_Widget (STR #998)
-	- Clipboard will persist if owner window is hidden (STR
-	  #1019)
-	- Fixed handling of Win32 Device Contexts (STR #1007)
-	- Fixed C++ style comments in C files (STR #997)
-	- Fixed signedness of scanf() argument (STR #996)
-	- Fixed cross-compiling problem (STR #995).
-	- FLUID now knows if a static callback is already
-	  declared in a class and won't declare it 'extern' (STR
-	  #776)
-	- Some actions in FLUID would not set the  "changed" flag
-	  (STR #984, STR #999)
-	- fl_filename_list now always appends a forward slash to
-	  directory names (STR #874)
-	- Multiline Input will update right if a space character is
-	  inserted in word wrap mode (STR #981)
-	- FLUID group labels redraw correctly (STR #959)
-	- FLUID now updates color of Fl_Tabs children (STR #979)
-	- FLUID now supports 'size_range()' (STR #851)
-	- FLUID selection boxes now synchronised (STR #964)
-	- fl_filename_list() now recognizes pathnames without
-	  trailing  slash as directions (STR #854)
-	- Fl_Text_Display now auto-scrolls in all
-	  directions (STR #915)
-	- Borderless windows will not show in the taskbar anymore
-	  on X11 (STR #933)
-	- Fixed event_text() field on FL_DND_* event on
-	  OS X and WIN32 (STR #968)
-	- The fltk-config utility now supports "--cc" and "--cxx"
-	  options to get the C and C++ compilers that were used
-	  to compile FLTK (STR #868)
-	- Fl_Valuator-derived widgets could show more digits than
-	  were necessary (STR #971)
-	- Fl_GIF_Image did not handle images with an incorrect
-	  number of data bits (STR #914)
-	- Fixed some plastic drawing artifacts (STR #906)
-	- Fl_Help_View now draws the box outside the scrollbars,
-	  like the other scrollable widgets (STR #871)
-	- The fltk-config script now handles invocation via a
-	  symlink (STR #869)
-	- Updated WIN32 cut/paste code to consistently handle DOS
-	  text (STR #961)
-	- Added shared library support for Cygwin and MingW (STR
-	  #893)
-	- Fl_File_Chooser did not implement the user_data()
-	  methods (STR #970)
-	- Compilation could fail if a previous installation of
-	  FLTK was in the same (non-standard) directory as an
-	  image library (STR #926)
-	- Fixed OSX compilation problems with non-HFS filesystems
-	  (STR #972)
-	- Problems with CMake on MinGW have been solved, thanks
-	  to Mr. "fltk.x0", who submitted the patch. (STR #863)
-	- Fixed memory leak in Fl_Check_Browser reported by
-	  "miguel2i". (STR #967)
-	- Fl_File_Input could draw in the wrong window (STR #958)
-	- WIN32: Internal WM_PAINT message now ignored (STR #831)
-	- Added Windows support for Fl_Window::xclass() (STR #848)
-	- Floating point input field allows characters from
-	  current locale (STR #903)
-	- Fixed integration of Fl_Input_Choice into FLUID (STR
-	  #879)
-	- New windows touching the right screen border would be
-	  positioned all the way to the left (STR #898)
-	- Made pie drawing size for WIN32 and OS X the same as
-	  X11 (STR #905)
-	- Fixed OS X issue with OpenGL windows inside of Tabs
-	  (STR #602)
-	- FLUID Code Editor would occasionally not draw the last
-	  character in the buffer (STR #798)
-	- FLUID Declaration private flag fixed (STR #799)
-	- FLUID overlay now shows a seperate bounding box of
-	  selected items with correct handles and a dotted
-	  boundig box for all  labels (STR #790)
-	- Fixed left overhang of large chracters in Fl_Input_
-	  (STR #941)
-	- Fixed button resizing in File Chooser (STR #884)
-	- Fixed FLUID redraw issue (STR #912)
-	- Added 32bit BMP Image file format support (STR #918)
-	- Value Sliders would not receive focus when clicked on
-	  (STR #911)
-	- Added redraw of some widgets to show focus change (STR
-	  #910)
-	- Fl::set_font would not clear 'pretty' name (STR #902)
-	- Fixed unescaped '@' in fonts demo (STR #867)
-	- FLUID should not open the Display connection anymore if
-	  creating code only (STR #904)
-	- Improved hidden copy / ctor implementation (STR #860)
-	- Increased matrix stack depth and added over/underflow
-	  error (STR #924)
-	- Reverted Mac Carbon Clipping simplification that broke
-	  subwindow clipping (STR #908, SVN r4386)
-	- Fixed bitmap scaling code
-	- Fixed tiny memory leak (STR #878)
-	- Fixed hang on corrupt jpeg (STR #915)
-	- Fixed static allocation of font buffer in demo (STR #909)
-	- Added symbols 'refresh', 'reload', 'undo', and 'redo'.
-	- Fixed focus loss on Fl_Window:resize()
-	- Fl::delete_widget would hang fl_wait after deleting the
-	  window (STR #679)
-	- Fl::paste would sometimes not recoginze external
-	  changes of the clipboard (STR #722)
-	- Clipping fixes for OSX
-	- Removed attempt to find items via
-	  Fl_Menu_::find_item() in linked submenus
-	- FLUID interactive window resizing fixes (STR #873, 791)
-	- FLUID panel resize and alignment fixes (STR #891)
-	- Fl_Window::show(argc, argv) now sets the scheme before
-	  showing the window; this should eliminate any
-	  flickering between the standard and plastic schemes on
-	  startup (STR #886)
-	- Selected tabs are now drawn slightly larger than
-	  unselected tabs so they stand out more (STR #882)
-	- Round Plastic boxes now draw round (STR #841)
-	- FL_PLASTIC_DOWN_BOX drew with artifacts (STR #852)
-	- Changed initializations on WIN32 (STR #862)
-	- Fl_Preferences::getUserdataPath() didn't work for
-	  sub-groups (STR #872)
-	- Fixed some redraw issues on Windows XP.
-	- FLUID didn't set the initial size of widgets properly
-	  (STR #850)
-	- Fl_Tabs would steal focus away from its children on a
-	  window focus change (STR #870)
-	- filename_relative() now converts the current directory
-	  to forward slashes as needed on WIN32 (STR #816)
-	- Fl_File_Chooser::value() and ::directory() now handle
-	  paths with backslashes on WIN32 (STR #811)
-	- Added the standard rgb.txt file from X11 to the test
-	  directory, allowing all platforms to try the colbrowser
-	  demo (STR #843)
-	- Resizing of OpenGL subwindows was broken on OSX (STR #804)
-	- The fltk-config script now supports running from a
-	  source directory (STR #840)
-	- Fl_Browser_ didn't update the position properly when an
-	  item was deleted (STR #839)
-	- fl_contrast() now compares the luminosity of each color
-	  (STR #837)
-	- Fl_Input_ crashed on some platforms when wrapping
-	  international text characters (STR #836)
-	- Fixed some BMP images loading bugs (STR #825)
-	- Fl_File_Chooser now returns directory names with a
-	  trailing slash to avoid problems with relative
-	  filenames (STR #819)
-	- Fl_Help_View now supports the FONT and U elements (STR
-	  #815)
-	- OpenGL windows that were completely off-screen caused
-	  problems with some graphics cards on WIN32 (STR #831)
-	- Multiple screen support didn't work on Windows NT and
-	  95 (STR #821)
-	- Fl_Scrollbar didn't compute the correct knob size when
-	  using the "nice" types (STR #845)
-	- fl_draw() would segfault on WIN32 if no font was set;
-	  it now uses the default font (STR #828)
-	- Fl_Browser_ was calling the callback multiple times for
-	  a single selection change with FL_WHEN_CHANGED (STR
-	  #834)
-	- Added "filenew", "fileopen", "filesave", "filesaveas",
-	  and "fileprint" symbols with standard toolbar
-	  symbology.
-	- Updated Fl_Tabs to check the contrast of the label
-	  color against the tab background, and to highlight the
-	  top 5 lines of the tab pane with the selection color so
-	  that selected tabs stand out more.
-	- The example programs can now compile separate from the
-	  FLTK source distribution (STR #809)
-	- The example programs are now installed with the
-	  documentation (STR #809)
-	- Fixed the drawing of the Fl_Browser_ selection box (STR
-	  #786)
-	- Dropped Codewarrier project files and support.
-	- The FLTK string functions are now compiled in on all
-	  systems (STR #774)
-	- Fixed symbol demo label bug (STR #777)
-	- Fixed position of menu titles (STR #795)
-	- Added missing Fl_Window::copy_label() method.
-	- Fixed wrong tooltip in FLUID (STR #784)
-	- Added zlib path to FLUID (STR #783)
-	- Menus and other pop-up windows now obey screen
-	  boundaries on multi-screen displays (STR #781)
-	- Fl_Chart would draw outside its bounding box (STR #780)
-	- Added Fl::screen_count() and Fl::screen_xywh() APIs to
-	  support multi-screen displays.
-	- FLUID now supports direct creation of widget classes.
-	- Fl_File_Chooser now correctly handles multiple
-	  selections that are a mix of files and directories.
-	- Fl_File_Chooser no longer resets the type() when
-	  choosing a single file, and it now works when selecting
-	  multiple directories (STR #747)
-	- Fl_File_Icon::load_system_icons() now only loads 16x16
-	  and 32x32 icon images to improve startup performance.
-	- Pressing Enter in the file chooser when selecting a
-	  directory will choose that directory if it is currently
-	  shown (STR #746)
-	- Added a fl_file_chooser_ok_label() function to set the
-	  "OK" button label for the fl_file_chooser() and
-	  fl_dir_chooser() functions.
-	- Added Fl_File_Chooser::ok_label() methods to set the
-	  "OK" button label.
-	- The fl_ask() function is now deprecated since it does
-	  not conform to the FLTK Human Interface Guidelines.
-	- The Fl_File_Chooser window now properly resizes its
-	  controls (STR #766)
-	- The Fl_Help_Dialog window now properly resizes its
-	  controls (STR #768)
-	- The Fl_File_Chooser favorites window is now resizable
-	  (STR #770)
-	- Now provide FL_PLASTIC_ROUND_UP/DOWN_BOX box types
-	  which are used by the plastic scheme.
-	- FLUID windows that are resized through the widget panel
-	  now remain resizable by the window manager.
-	- Increased the size of the background image used by
-	  the plastic scheme to reduce the CPU load of redraws
-	  (STR #769)
-	- Fixed a syntax highlighting bug in the editor demo.
-	- Fl_Progress now contrasts the label color with the bar
-	  color, so labels will be readable at all times.
-	- fl_read_image() didn't use the right red, green, and
-	  blue masks on XFree86.
-	- Fixed Quickdraw drawing of 3 and 4 sided polygons (STR
-	  #765)
-	- Fixed fl_message() code so that it does not get
-	  accidentaly addded to the current group (STR #253)
-	- FLUID now highlights code in the widget callback and
-	  code editors.
-	- FLUID now supports printing of windows.
-	- Fixed inactive drawing of border, embossed, and
-	  engraved box types.
-	- Added Fl_Spinner widget (another combination of
-	  existing widgets in a header file)
-	- FLUID now provides support for UI templates.
-	- fl_not_clipped() incorrectly used the current window
-	  dimensions for gross clipping, which interfered with
-	  off-screen rendering.
-	- Fl_Window::draw() and Fl_Window::iconlabel() could leak
-	  memory if copy_label() was used on the window.
-	- fl_shortcut_label() now shows letter shortcuts in
-	  uppercase, e.g. "Ctrl+N" instead of "Ctrl+n" to be
-	  consistent with other toolkits.
-	- FLUID now provides unlimited undo/redo support.
-	- FLUID now provides an option to choose which scheme
-	  (default, none, plastic) to display.
-	- Fixed scheme background issue with windows in FLUID.
-	- In FLUID, new widgets are now created with the ideal
-	  size by default, and menu bars are positioned to use
-	  the entire width of the window.
-	- Added Layout/Widget Size submenu to select default
-	  label and text size (Tiny, Small, and Normal).
-	- Added Edit/Duplicate command to FLUID to duplicate the
-	  current selection.
-	- FLUID now tracks the current state of the widget bin
-	  and overlays.
-	- Now fill the widget image paths with relative
-	  filenames.
-	- Fixed frame drawing of Fl_Text_Display (STR #762)
-	- Fl_Clock_Output::value() did not return the previously
-	  set value (STR #748)
-	- Added comment type to FLUID. This is useful for
-	  generating copyright notices in the source and header
-	  files.
-	- Fl_Valuator would not format text output with decimal
-	  point when the step value was fractional, but above 1.
-	- fl_filename_relative() didn't compare drive letters in
-	  a case-insensitive way (STR #741)
-	- Fixed menu item width calculations with symbols (STR
-	  #740)
-	- The keyboard shortcut handling code did not handle
-	  8-bit characters properly (STR #731)
-	- Fl_JPEG_Image could still crash an app with a corrupt
-	  JPEG file (STR #739)
-	- Using the layout alignment controls on a menu widget
-	  would cause FLUID to crash (STR #742)
-	- Added QNX bug workaround for menu handling (STR #704)
-	- Added Greg Ercolano's simple Fl_Input_Choice widget
-	  which is a combination of the Fl_Input and
-	  Fl_Menu_Button widgets (STR #650)
-	- Fl_Multiline_Input now scrolls the full height of the
-	  widget instead of 5 lines when the user presses PageUp
-	  or PageDown (STR #727)
-	- CMake build fixes (STR #724)
-	- Fl_Browser::swap() didn't handle redraws properly when
-	  the swapped lines had different heights (STR #729)
-	- FL_MOUSEWHEEL events are now sent first to the widget
-	  under the mouse pointer and then to the first widget
-	  which accepts them. This is similar to the way
-	  shortcut events are handled and is consistent with the
-	  way the mouse wheel is handled by other toolkits.
-	- Fl::wait() could block on WIN32 if the window was
-	  deleted via Fl::delete_widget() (STR #679)
-	- Fl_Preferences::RootNode did not find the user's home
-	  directory on some non-US versions of Windows (STR
-	  #720)
-	- Fl_Window::hide() didn't delete the current clipping
-	  region on WIN32, causing a GDI resource leak in some
-	  situations (STR #723)
-	- Removed a few warnings when compiling on OS X
-	- Fl_Menu now draws the arrow more like other toolkits
-	  and 2.0 (STR #651)
-	- Fixed a VC++ compiler error in Fl_JPEG_Image.cxx (STR
-	  #676)
-	- FL_SHADOW_BOX/FRAME drew outside of the bounding box
-	  (STR #694)
-	- Fl_Widget::copy_label(NULL) didn't work (STR #707)
-	- Fl_Choice now allows click selection like
-	  Fl_Menu_Button and Fl_Menubar (STR #706)
-	- Updated cmake support (STR #645)
-	- Fl_Check_Browser didn't draw properly when inactive
-	  (STR #681)
-	- Removed some redundant code in Fl_Group::handle() (STR
-	  #669)
-	- The file chooser didn't always deactivate the OK
-	  button when necessary (STR #653)
-	- Image drawing on OSX changed the current drawing
-	  colors (STR #662)
-	- Fixed some compiler errors on WIN32 (STR #647, STR
-	  #726)
-	- FLUID didn't update the widget panel X/Y/W/H values
-	  when moving the selected window (STR #701)
-	- FLUID didn't use the label type constant names for
-	  menu items, causing them to be drawn using the normal
-	  label type (STR #668)
-	- Fl_File_Chooser was slow with large directories (STR
-	  #654)
-	- FLUID didn't add xclass() calls to windows (STR #718)
-	- The X11 DND code did not correctly select a text
-	  format for incoming data (STR #711)
-	- Fixes to Fl_JPEG_Image error handler.
-	- Fl_Menu::popup() and ::pulldown() would crash an
-	  application if a callback created widgets before they
-	  returned (STR #685)
-	- Fl_Double_Window would cause a full redraw, even if
-	  only small parts of the UI were changed on Mac OS X.
-	- Fl_JPEG_Image did not correctly handle errors reported
-	  by the JPEG library (STR #652)
-	- Fl_Menu now draws sub-menu arrows like other toolkits
-	  and FLTK 2.0 (STR #651)
-	- Fixed a compiler warning in Fl_Window.H (STR #641)
-	- Tooltips disabled shortcut processing (STR #643)
-	- Fl::event_number() didn't always match the value sent
-	  to the handle() method (STR #634)
-	- Fl_Shared_Image::reload() didn't set the image_
-	  pointer properly in all cases (STR #632)
-	- Fl_Help_View::topline() incorrectly set the changed()
-	  flag (STR #631)
-	- Fl_Choice::value() now supports NULL or -1 to deselect
-	  the current item (STR #637)
-	- More VC++ 6 project file fixes (STR #638)
-	- Added missing Watcom makefile in the test directory
-	  (STR #636)
-	- Fl_Text_Display::word_left would hang if the cursor
-	  was at position 0 (STR #635)
-
-
-CHANGES IN FLTK 1.1.6					RELEASED: Nov 23 2004
-
-	- Documentation updates (STR #552, STR #608)
-	- Added the 2.0 Fl_Widget::copy_label() method to
-	  allow FLTK 1.x applications to have their label
-	  strings managed by FLTK (STR #630)
-	- Added Fl::delete_widget() method to safely delete
-	  widgets in callback methods (STR #629)
-	- Fl_Widget::damage(uchar,int,int,int,int) didn't clip
-	  the bounding box properly (STR #626)
-	- Windows could appear on the wrong screen on OSX (STR
-	  #628)
-	- Fl_Double_Window produced an error on resize with X11
-	- FLUID didn't display menu items using images properly
-	  (STR #564)
-	- Fl_Sys_Menu_Bar didn't compile on case-sensitive
-	  file-systems (STR #622)
-	- FLUID didn't handle default function parameters
-	  properly (STR #579)
-	- Moving or resizing widgets in FLUID didn't always
-	  update the widget panel (STR #600)
-	- FLTK windows could appear off-screen on X11 (STR #586)
-	- The configure script did not support
-	  --disable-localfoo to completely disable image file
-	  support (STR #582)
-	- The Visual C++ 6.0 project files still listed the old
-	  JPEG, PNG, and ZLIB library names (STR #577)
-	- Fixed the scandir() conditional code for HP-UX 11i
-	  (STR #585)
-	- Fl_Text_Display didn't support CTRL/CMD-A/C (STR #601)
-	- Watcom fixes (STR #581, STR #584, STR #594, STR #595,
-	  STR #623, STR #627)
-	- Fixed library include order when building DSOs on
-	  MacOS X (STR #596)
-	- fl_xid() could cause a WIN32 application to crash (STR
-	  #560, STR #576, STR #618)
-	- Fl_Browser::remove_() removed the item from the list
-	  before computing the item height, which caused
-	  problems with some programs (STR #613)
-
-
-CHANGES IN FLTK 1.1.5					RELEASED: Oct 19 2004
-
-	- Documentation updates (STR #568, STR #570)
-	- Shortcuts were incorrectly underlined in multi-line
-	  labels (STR #566)
-	- More CMake updates (STR #499)
-	- The Watcom C++ compiler needed a small change (STR
-	  #567)
-	- Added DESTDIR support and now remove all man pages for
-	  the "uninstall" target (STR #545)
-	- Fix PNG drawing on buggy WIN32 graphics cards (STR
-	  #548)
-	- The configure script didn't propagate the CPPFLAGS
-	  environment variable (STR #549)
-	- The numpad keys didn't work properly on WIN32 (STR
-	  #502)
-	- fl_input() and friends now set the input focus to the
-	  text field when the dialog is shown (STR #553)
-	- Fixed background color mixup when drawing Fl_Choice
-	  menus (STR #544)
-	- Fixed MingW makefiles (STR #550)
-	- More VC++ project file tweaking (STR #559)
-	- Fl_PNG_Image didn't use the png_set_trns_to_alpha
-	  function when available (STR #547)
-	- The FL_UNFOCUS event wasn't always sent when switching
-	  tabs (STR #558)
-
-
-CHANGES IN FLTK 1.1.5rc3
-
-	- Documentation updates (STR #505, STR #513)
-	- Updated PNG library source to 1.2.7.
-	- Updated ZLIB library source to 1.2.1.
-	- Fixed VC++ project file problems (STR #476, STR #478,
-	  STR #520, STR #527, STR #537)
-	- Now look for 8 bits of alpha when the developer has
-	  requested FL_RGB8 (STR #541)
-	- The last line in an Fl_Help_View widget was not
-	  aligned properly (STR #536)
-	- The "search" symbol looked like a Q (STR #536)
-	- Changed Fl_Help_View::get_color() to use a lookup
-	  table to avoid serious Borland C++ 5.5 compiler bugs
-	  (STR #533)
-	- Fixed Watcom compiler warnings with FL/Fl_Widget.H
-	  (STR #540)
-	- The image class copy() methods did not always make a
-	  separate copy of the image data (STR #539)
-	- Fixed an edge case in fl_old_shortcut() that could
-	  cause it to read beyond then end of the shortcut
-	  string (used for XForms named shortcuts)
-	- Added (unsupported) CMake files (STR #499)
-	- Tooltips would not reappear on the same widget, and
-	  the initial tooltip delay was not used after a tooltip
-	  was shown (STR #465)
-	- Fixed a compile problem with the Linux 2.6 threading
-	  support (STR #483)
-	- Fixed problems with 2-byte Xpm files on 64-bit
-	  platforms (STR #525)
-	- FLTK didn't handle the ReparentNotify event on X11
-	  (STR #524)
-	- The old source file "fl_set_gray.cxx" is not needed
-	  (STR #516)
-	- Fl_Text_Display still called delete[] instead of
-	  free() in one place (STR #503)
-	- The symbol test program did not handle the @+ symbol
-	  properly (STR #490)
-	- Fl_File_Chooser didn't correctly call isprint() and
-	  isspace() when checking to see if the current file was
-	  text that can be previewed (STR #517)
-	- FLUID didn't compile with Borland C++ due to a
-	  compiler bug (STR #496)
-	- Fl_Positioner did not handle reversed min and max
-	  values (STR #510)
-	- fl_descent(), fl_height(), and fl_width() would crash
-	  a program if you didn't call fl_font() first; they now
-	  return -1 if no font is set (STR #500)
-	- Added test/unittests to verify pixel drawing and
-	  alignment across platforms
-	- Fl_Menu_::find_item() didn't determine the menu path
-	  properly (STR #481)
-	- The build system now installs image library header
-	  files in FL/images/filename.h so that FLTK programs
-	  will use the same header files as the FLTK image
-	  libraries.
-	- The build system now creates image libraries named
-	  "libfltk_name.a" instead of "libname.a" to avoid
-	  clobbering an existing installed library (STR #480)
-
-
-CHANGES IN FLTK 1.1.5rc2
-
-	- Documentation updates (STR #365, STR #399, STR #407,
-	  STR #412, STR #414, STR #452, STR #462)
-	- Fl_Text_Display did not handle drawing of overlapping
-	  text (italic next to plain, etc.) properly (STR #381)
-	- All of the core widgets now consistently set changed()
-	  before calling the callback function for a change in
-	  value; this allows programs to check the changed()
-	  state in a callback to see why they are being called
-	  (STR #475)
-	- Fl_File_Chooser did not handle some cases for filename
-	  completion (STR #376)
-	- Fl_Help_View didn't properly compute the default
-	  maximum width of the page properly, resulting in
-	  non-wrapped text in table cells (STR #464)
-	- Fl_Text_Editor no longer tries to emulate the Emacs
-	  CTRL-A shortcut to move to the first column, since
-	  there is a key for that and the widget does not
-	  emulate any other Emacs keys (STR #421)
-	- Fl_File_Chooser always disabled the OK button when the
-	  user pressed DELETE or BACKSPACE (STR #397)
-	- Added Fl_Browser::swap() methods (STR #459)
-	- Fl_Counter didn't use a thin down box for the text
-	  field if the box type was set to FL_THIN_UP_BOX (STR
-	  #467)
-	- Fl_Help_View now resets the scrollbars if they go
-	  outside the current view (STR #464)
-	- fl_dir_chooser() did not show the previous selection
-	  as documented (STR #443)
-	- Fl_Text_Display used delete[] instead of free() in
-	  some places (STR #466)
-	- FLTK now includes copies of the PNG, JPEG, and ZLIB
-	  libraries for platforms that do not have them (STR
-	  #441)
-	- The fltk-config script did not include the
-	  "-mno-cygwin" option under CygWin (STR #434)
-	- Fl_Help_View::find() did not check for a NULL value
-	  (STR #442)
-	- Added search symbol to the search field of
-	  Fl_Help_Dialog (STR #417)
-	- Added two new symbols, @search and @FLTK, which can be
-	  used in labels.
-	- MacOS X: fixed NumLock mixup, added support for
-	  FL_Menu and FL_Delete keys on external (PC) keyboards
-	  (STR #445)
-	- Fl_File_Icon::draw() did not support drawing of complex
-	  polygons in icon descriptions (STR #474)
-	- The configure script now offers options for JPEG, PNG,
-	  and ZLIB libraries (STR #416)
-	- The first menu item in a list would not go invisible
-	  (STR #406)
-	- Fl_Text_Buffer::replace() now range checks its input
-	  (STR #385)
-	- FLTK now builds with the current release of MinGW (STR
-	  #325, STR #401, STR #402)
-	- FLTK now honors the numlock key state (STR #369)
-	- The Fl_Text_Display widget did not redraw selections
-	  when focus changed (STR #390)
-	- The plastic background image is now less contrasty
-	  (STR #394)
-	- Fl_Scroll now uses a full redraw when the scheme is
-	  set to plastic and the box type is a frame (STR #205)
-	- Fl_Window::resize() did not work properly with KDE 3.2
-	  (STR #356)
-	- FLTK didn't delete font bitmaps when the last OpenGL
-	  window was deleted, preventing future text from
-	  displaying (STR #310)
-	- FLUID didn't include a full initialization record for
-	  the trailing NULL menu items (STR #375)
-	- Fl_Browser::item_width() did not properly handle
-	  format modifiers (STR #372)
-	- Fl_Browser::item_height() did not handle columns
-	  properly (STR #371)
-	- Fl_Gl_Window's on WIN32 now prefer accelerated pixel
-	  formats over generic formats (STR #382)
-	- Fl_Window::resize() did not work on some systems if
-	  the window was not shown (STR #373)
-	- FLUID did not write the user_data type if the
-	  user_data field was empty (STR #374)
-	- The value(const Fl_Menu_Item*) method was not
-	  implemented for Fl_Choice (STR #366)
-        - Fl_Pack didn't draw child widget labels the same way
-          as Fl_Group, causing display problems (STR #360)
-        - fl_read_image() didn't work when reading from an
-          offscreen buffer with some X11 servers (STR #364)
-
-
-CHANGES IN FLTK 1.1.5rc1
-
-	- Documentation updates (STR #186, STR #245, STR #250,
-	  STR #277, STR #281, STR #328, STR #338)
-	- fl_scroll() did not handle scrolling from off-screen on
-	  WIN32 (STR #315)
-	- Fl_File_Chooser did not allow manual entry of a drive
-	  letter (STR #339)
-	- Fl_Menu now uses the boxtype to redraw the menu
-	  background (STR #204)
-	- Fl_Scroll now shows the background image when a framed
-	  box type is used and the Fl_Scroll is a direct
-	  decendent of a window (STR #205)
-	- Added a new_directory_tooltip string pointer to allow
-	  localization of the file chooser's new directory
-	  button (STR #340)
-	- Added Fl_Menu_::find_item() method (STR #316)
-	- The Fl_Widget copy operator definitions were not
-	  conditionally compiled properly (STR #329)
-	- FLUID's Layout functionality did not move child
-	  widgets when laying out group widgets (STR #319)
-	- FLUID's Layout->Center In Group functionality did not
-	  properly handle widgets that were children of a
-	  Fl_Window widget (STR #318)
-	- The Fl_Text_Display destructor did not remove the
-	  predelete callback associated with the current buffer
-	  (STR #332)
-	- Fixed several bugs in the MacOS X Fl::add_fd()
-	  handling (STR #333, STR #337)
-	- The Fl_Text_Display widget did not display selections
-	  set by the application (STR #322)
-	- FLUID crashed if you did layout with a window widget
-	  (STR #317)
-	- Fl_Scroll::clear() didn't remove the child widget from
-	  the Fl_Scroll widget (STR #327)
-	- Fl_Value_Slider::draw_bg() didn't always apply the
-	  clipping rectangle (STR #235)
-	- fl_filename_relative() returned the wrong string if
-	  the absolute pathname was equal to the current working
-	  directory (STR #224)
-	- Fl_Help_Dialog didn't correctly restore the scroll
-	  position when going forward/back in the link history
-	  if the file changed (STR #218)
-	- glutGetModifiers() did not mask off extra state bits,
-	  confusing some GLUT-based applications (STR #213)
-	- Fixed mouse capture problems on MacOS X (STR #209, STR
-	  #229)
-	- Fl_Sys_Menu_Bar is now built into the library for
-	  MacOS X (STR #229)
-	- Fl_Menu_ now provides item_pathname() methods to get
-	  the "pathname" of a menu item, e.g. "File/Quit" (STR
-	  #283)
-	- Fl_Text_Display now provides cursor_color() methods to
-	  get and set the cursor color (STR #271)
-	- Fl_Scroll didn't honor FL_NO_BOX (STR #305)
-	- FLUID declaration blocks didn't support public/private
-	  definitions (STR #301)
-	- Fl_Preferences incorrectly created the preferences
-	  directory before necessary (STR #247)
-	- The WIN32 project files still defined the (obsolete)
-	  FL_STATIC constant (STR #279)
-	- Fl_Text_Display::buffer() did not support NULL values,
-	  making it impossible to clean up text buffers from a
-	  subclass (STR #295)
-	- Fl_Text_Display did not support a NULL
-	  unfinishedStyleCB function (STR #241)
-	- Fl::background2() incorrectly marked the foreground
-	  color as initialized (STR #255)
-	- Fixed the X11 CTRL + "-" detection code to properly
-	  track the state of the CTRL key (STR #264)
-	- Fl_File_Icon::load_system_icons() didn't support KDE
-	  3.x (STR #299)
-	- WIN32's scandir() emulation did not allocate enough
-	  memory for directory names (STR #263)
-	- Fl::compose() did not handle special keys like
-	  backspace properly (STR #293)
-	- Fl_Choice did not clip its text when drawing using the
-	  plastic scheme (STR #287)
-	- Fl_Group incorrectly mapped the emacs CTRL keys to
-	  keyboard navigation (STR #228)
-	- Fl_File_Browser::load() didn't handle a NULL directory
-	  name (STR #266)
-	- 64-bit library fixes (STR #261)
-	- The Fl_Valuator::format() function did not limit the
-	  size of the number buffer (STR #268)
-	- The keypad Enter key works as the normal Enter/Return
-	  key in common widgets (STR #191)
-	- Fixed some OS/2-specific build problems (STR #185, STR
-	  #197)
-	- Calling Fl_Text_Display::buffer() with the same buffer
-	  would cause an application to lockup (STR #196)
-	- Some of the widgets could crash an application if the
-	  cursor was changed after a window was deleted (STR
-	  #181)
-	- The Fl_Gl_Window WIN32 pixel format code did not
-	  choose the pixel format with the largest depth buffer
-	  (STR #175)
-	- The configure script didn't leave space between the
-	  CFLAGS/CXXFLAGS and X_CFLAGS variables (STR #174)
-	- The Fl_JPEG_Image and Fl_PNG_Image classes did not
-	  trap errors from the corresponding image libraries
-	  (STR #168)
-	- Added "--with-links" configure option to control
-	  whether symlinks are created for the FLTK header files
-	  (STR #164)
-	- Added new hoverdelay() to Fl_Tooltip to control how
-	  quickly recent tooltips appear (STR #126)
-	- FLUID now sets the size range when a window is shown.
-	  This seems to be necessary with some window managers
-	  (STR #166)
-
-
-CHANGES IN FLTK 1.1.4					RELEASED: Sep 08 2003
-
-	- The fl_read_image() function was not implemented on
-	  OSX (STR #161)
-	- VC++ 7.1 didn't like how the copy operators were
-	  disabled for the Fl_Widget class; now include inline
-	  code which will never be used but makes VC++ happy
-	  (STR #156)
-	- Fixed an IRIX compile problem caused by a missing
-	  #include (STR #157)
-	- FLUID didn't write color/selection_color() calls using
-	  the symbolic names when possible, nor did it cast
-	  integer colors to Fl_Color (STR #146)
-	- Fl_File_Chooser was very close for multiple file
-	  selection in large directories (STR #140)
-	- Fl_Text_Display/Editor did not disable the current
-	  selection when focus was shifted to another widget
-	  (STR #131)
-	- Fl_Choice didn't use the normal focus box when the
-	  plastic scheme was in use (STR #129)
-	- Fl_Text_Editor didn't use selection_color()
-	  consistently (STR #130)
-	- The fltk_forms, fltk_gl, and fltk_images DSO's and
-	  HP-UX shared libraries are now linked against the fltk
-	  shared library to provide complete dependency
-	  resolution (STR #118)
-	- The configure.in file did not work with autoconf 2.57.
-	- FLUID didn't redraw widgets when changing the X, Y, W,
-	  or H values in the widget panel (STR #120)
-	- Fl_Window::show(argc, argv) wasn't calling
-	  Fl::get_system_colors() as documented (STR #119)
-	- DSO (shared library) building wasn't quite right for
-	  some platforms (STR #118)
-	- OSX: some changes to make ProjectBuilder compiles
-	  possible.
-	- OSX: FLTK would not know where a window was positioned
-	  by the OS. As a result, popup menus could open at
-	  wrong positions.
-
-
-CHANGES IN FLTK 1.1.4rc2
-
-	- Fl_Window::show(argc,argv) incorrectly opened the
-	  display prior to parsing the arguments; this prevented
-	  the "-display foo" option from working (STR #111)
-	- Images were not clipped properly on MacOS X (STR #114)
-	- Fl::reload_scheme() and Fl::scheme("foo") incorrectly
-	  called Fl::get_system_colors().  This prevented an
-	  application from setting its own color preferences
-	  (STR #115)
-	- The 'Enter' key event on OS X would not set
-	  Fl::e_text.
-	- Changed behaviour of FLUID to always paste into
-	  a selected group (STR #88)
-	- Menuitem now changes font, even if fontsize
-	  is not set (STR #110)
-	- Swapped shortcut labels in OS X (STR #86)
-	- Non-square Fl_Dial would calculate angle from user
-	  input wrong (STR #101)
-	- Updated documentatiopn of fl_draw (STR #94)
-	  and Fl_Menu_::add() (STR #99)
-	- FLUID collapse triangle events were not offset by
-          horizontal scroll (STR #106)
-	- QuitAppleEvent now correctly returns from Fl::run()
-          instead of just exiting (STR #87)
-	- Hiding the first created OpenGL context was not
-	  possible. FLTK now manages a list of contexts (STR #77)
-	- FLUID didn't keep the double/single buffer type for
-	  windows.
-	- FLTK didn't work with Xft2.
-	- OSX window resizing didn't work (STR #64)
-	- Fixed MacOS X shared library generation (STR #51)
-	- Several widgets defined their own size() method but
-	  didn't provide an inline method that mapped to the
-	  Fl_Widget::size() method (STR #62)
-	- Fl_Scroll didn't provide its own clear() method, so
-	  calling clear() on a Fl_Scroll widget would also
-	  destroy the scrollbars (STR #75)
-	- Fl::event_text() was sometimes initialized to NULL
-	  instead of an empty string (STR #70)
-	- fl_draw() didn't properly handle a trailing escaped
-	  "@" character (STR #84)
-	- Added documentation for all forms of
-	  Fl_Widget::damage() (STR #61)
-	- Fl_Double_Window now has a type() value of
-	  FL_DOUBLE_WINDOW, to allow double-buffered windows to
-	  process redraws properly on WIN32 (STR #46)
-	- Added FL_DAMAGE_USER1 and FL_DAMAGE_USER2 damage bits
-	  for use by widget developers (STR #57)
-	- Fl_Help_View didn't support numeric character entities
-	  (STR #66)
-	- Menu shortcuts didn't use the Mac key names under
-	  MacOS X (STR #71)
-	- CodeWarrior Mac OS X updated to work with current
-	  CW8.3 (STR #34)
-	- Apple-C/X/V/Z didn't work in the Fl_Input widget due
-	  to a bad mapping to control keys (STR #79)
-	- Added the OSX-specific fl_open_callback() function to
-	  handle Open Documents messages from the Finder (STR
-	  #80)
-	- The configure script contained erroneous whitespace in
-	  various tests which caused errors on some platforms
-	  (STR #60)
-	- The fltk-config script still supported the deprecated
-	  --prefix and --exec-prefix options; dropped them since
-	  they serve no useful purpose and would never have
-	  worked for the intended purpose anyways... (STR #56)
-	- fl_filename_list returned 0 on Win32 if no directory
-	  existed (STR #54)
-	- Pressing 'home' after the last letter in a Text_Editor
-	  would move the cursor to pos 0 (STR #39)
-	- Fl::get_key(x) would mix up Ctrl and Meta on OS X (STR
-	  #55)
-	- The configure script used the wrong dynamic library
-	  linking command for OSX (STR #51)
-	- The Fl_Text_Editor widget did not set changed() nor
-	  did it call the widget's callback function for
-	  FL_WHEN_CHANGED when processing characters that
-	  Fl::compose() handles (STR #52)
-
-
-CHANGES IN FLTK 1.1.4rc1
-
-	- The file chooser did not reset the click count when
-	  changing directories; if you clicked on a file in the
-	  same position after changing directories with a
-	  double-click, the chooser treated it as a triple
-	  click (STR #27)
-	- Symbols with outlines did not get drawn inactive.
-	- The Fl_Help_View widget now provides a find() method
-	  to search for text within the page.
-	- The Fl_Help_Dialog widget now provides a search box
-	  for entering text to search for.
-	- The default font encoding on OSX did not match the
-	  default on WIN32 or X11.
-	- Menu items were not drawn using the font specified in
-	  the Fl_Menu_Item structure (STR #30)
-	- Long menus that were aligned such that the top of an
-	  item was exactly at the top of the screen would not
-	  scroll (STR #33)
-	- The OS issues appendix incorrectly stated that MacOS
-	  8.6 and 9 were supported; they are not (STR #28)
-	- Fixed handling of nested double-buffered windows (STR
-	  #1)
-	- Showing a subwindow inside a hidden window would crash
-	  the application (STR #23)
-	- OSX users couldn't enter some special chars when using
-	  some foreign key layouts (STR #32)
-	- Hiding subwindows on OSX would hide the parent window
-	  (STR #22)
-	- Added thin plastic box types.
-	- Fl_Pack ignored the box() setting and cleared any
-	  unused areas to the widget color; it now only does so
-	  if the box() is set to something other than FL_NO_BOX.
-	- Updated the Fl_Tabs widget to offset the first tab by
-	  the box dx value to avoid visual errors.
-	- Updated the plastic up box to draw only a single
-	  border frame instead of the old double one for
-	  improved appearance.
-	- Updated the default background color on OSX to provide
-	  better contrast.
-	- Fl_Text_Display and friends now look for the next
-	  non-punctuation/space character for word boundaries
-	  (STR #26)
-	- gl_font() didn't work properly for X11 when Xft was
-	  used (STR #12)
-	- Fl_File_Browser incorrectly included "." on WIN32 (STR
-	  #9)
-	- Include shellapi.h instead of ShellAPI.h in the WIN32
-	  drag-n-drop code in order to work with the MingW cross
-	  compiler (STR #6)
-	- The cursor was not properly restored when doing
-	  drag-n-drop on X11 (STR #4)
-	- Fl::remove_fd() didn't recalculate the highest file
-	  descriptor properly (STR #20)
-	- Fl_Preferences::deleteGroup() didn't work properly
-	  (STR #13)
-	- Fixed the fl_show_file_selector() function - it was
-	  copying using the wrong string size (STR #14)
-	- fl_font() and fl_size() were not implemented on MacOS
-	  X.
-	- Sorted the icon menu bar in FLUID.
-	- Fixed minor memory access complaints from Valgrind
-	- Compiling src/flstring.h on OS X with BSD header would
-	  fail.
-	- Fl_Text_Editor didn't scroll the buffer when the user
-	  pressed Ctrl+End or Ctrl+Home.
-	- Fl_Text_Editor didn't show its cursor when the mouse
-	  was moved inside the window.
-	- FLUID now uses an Fl_Text_Display widget for command
-	  output, which allows you to copy and paste text from
-	  command output into other windows.
-	- Fl_Gl_Window could cause a bus error on MacOS X if the
-	  parent window was not yet shown.
-	- FLUID could crash after displaying a syntax error
-	  dialog for the callback code.
-	- FLUID would reset the callback code if you opened the
-	  widget panel for multiple widgets.
-	- Added a NULL check to Fl_Text_Display (SF Bug #706921).
-	- The fltk-config script placed the LDFLAGS at the wrong
-	  place in the linker options.
-	- Fl_Text_Display didn't draw the outer box in the right
-	  dimensions, so it was invisible.
-	- Fl_Help_Dialog used the same color for links as for
-	  the background, causing links to be invisible on pages
-	  without a background color set.
-
-
-CHANGES IN FLTK 1.1.3					RELEASED: Feb 13 2003
-
-	- Documentation updates.
-	- FLTK now ignores KeyRelease events when X11 sends them
-	  for repeating keys.
-	- FLUID now supports up to two additional qualifiers
-	  before a class name (FL_EXPORT, etc.) to aide in
-	  developing DLL interfaces for WIN32.
-	- Additional NULL checks in Fl_Button,
-	  fl_draw_boxtype(), Fl_File_Chooser, and
-	  Fl_Window::hotspot().
-	- The Fl_Preferences header file needed to FL_EXPORT all
-	  of the nested classes for WIN32.
-	- Fl_Double_Window couldn't be nested on WIN32. [SF Bug
-	  #658219]
-	- Fl_Slider didn't call the callback function when the
-	  user changed the value using the keyboard and the
-	  "when" condition was FL_WHEN_RELEASE. [SF Bug #647072]
-	- Lines with less than 2 unique vertices and polygons
-	  with less the 3 unique vertices were not drawn
-	  properly. [SF Bug #647067]
-	- The size_range() values were not honored under MacOS
-	  X. [SF Bug #647074]
-	- OpenGL windows didn't resize correctly on MacOS X.
-          [SF Bug #667855]
-	- The menus incorrectly used the overlay visual when one
-	  or more menu items contained an image. [SF Bug #653846]
-	- Changed some error messages to use Fl::error() instead
-	  of fprintf()...
-	- Fl_Text_Buffer and Fl_Text_Display used free to free
-	  memory that was allocated using the new operator.
-	- Tweeked the plastic scheme under MacOSX to better
-	  match the colors.
-	- The Fl_Image.H always included the x.H header file,
-	  which included many system headers that could
-	  interfere with normal GUI applications.  It now uses
-	  the corresponding based types for the image id and
-	  mask to avoid this.
-	- The FLUID widget panel wasn't sorted, so keyboard
-	  navigation was strange. [SF Bug #647069]
-	- Fl_Scroll didn't compute the location of labels to the
-	  right or below when determining the area to erase.
-	- Added backward-compatibility macro for
-	  filename_setext().
-	- Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
-	  Fl_RGB_Image::copy() all could overflow the source
-	  image when scaling the image.
-	- Double/triple clicks in Fl_Input fields didn't copy
-	  the expanded selection to the clipboard.
-	- Fl_Glut_Window and Fl_Gl_Window didn't always initialize
-	  the OpenGL context on MacOS.
-
-
-CHANGES IN FLTK 1.1.2					RELEASED: Nov 25 2002
-
-	- Fl_Menu_Bar now supports drawing vertical dividers
-	  between menu items and submenus in the menu bar.
-	- Fl_File_Chooser::value() didn't return NULL when the
-	  user clicked Cancel while selecting a directory.  This
-	  bug also affected fl_dir_chooser().
-	- Fl_Menu_::add(const char *) used too small a menu item
-	  label buffer and didn't do bounds checking.
-	- Eliminate some compiler warnings with CodeWarrier
-	  under WIN32 (Paul Chambers)
-	- Fl_Gl_Window widgets did not resize properly under
-	  MacOS X.
-	- The cursor could be set for the wrong window in the
-	  text widgets.
-	- Fl_Check_Browser didn't provide const char * add
-	  methods as documented.
-	- Fl_Check_Browser didn't draw the same style of check
-	  marks at the other widgets.
-	- Fl_Button, Fl_Choice, and Fl_Menu_Button incorrectly
-	  activated the button/menu when the spacebar was
-	  pressed in conjunction with shift, control, alt, or
-	  meta.
-	- FLTK should now compile with Xft 2.0.
-	- Some versions of Tru64 4.0 have snprintf and
-	  vnsprintf, but don't have the prototypes for those
-	  functions.
-	- FLTK had trouble doing character composition with some
-	  keyboard layouts under X11 (in particular, Belgian).
-	- Fl_Text_Editor would cause a segfault if the user
-	  pressed CTRL-V (paste) without having any data in the
-	  clipboard...
-	- The tab key moved backwards in menus instead of
-	  forwards.  Shift-tab still moves backwards.
-	- The redraw_label() method didn't damage the parent
-	  window when the label was outside the widget's
-	  bounding box.
-	- Added a "draw_children()" method to Fl_Group to make
-	  subclassing Fl_Group with a custom draw() function
-	  easier.
-	- Fl_Text_Editor now supports basic undo functionality.
-	- FLUID now uses Fl_Text_Editor widgets for all
-	  multi-line code fields.
-	- Added new widget bin and icons to FLUID.
-	- FLUID would try running multiple commands in parallel,
-	  even though it wasn't capable of handling it.
-	- FLUID didn't generate code for some attributes when
-	  using custom/named widget classes.
-	- Added a new FL_COMMAND state bit which maps to FL_CTRL
-	  on X11 and WIN32 and FL_META on MacOS.
-	- MacOS keyboard modifiers mapping corrections. Cmd and
-	  Control are no longer swapped, event_key and event_text
-	  return (mostly) the same values as on other platforms.
-	- The Fl_Tabs widget should no longer be a focus hog;
-	  previously it would take focus from child widgets.
-	- The file chooser now activates the OK button when
-	  opening a directory in directory selection mode.
-	- Fixed a bug in the file chooser when entering an
-	  absolute path.
-	- Back-ported some FLTK 2.0 tooltip changes to eliminate
-	  erroneous tooltip display.
-	- MacOS windows were resizable, even when size_range
-	  would not allow for resizing.
-	- Fl_Text_Editor now supports Shift+Delete, Ctrl+Insert,
-	  and Shift+Insert for cut, copy, and paste,
-	  respectively.
-	- Fl_Text_Display didn't restore the mouse pointer when
-	  hidden.
-	- Fl::arg() now ignores the MacOS X -psn_N_NNNNN option.
-	- Added another change to the WIN32 redraw handling for
-	  the MingW compilers.
-	- Fl_File_Chooser didn't handle WIN32 home directories
-	  that used backslashes instead of forward slashes.
-	- Fl_Text_Display didn't limit the resize height to 1
-	  line.
-	- Fl_Scrollbar widgets incorrectly took keyboard focus
-	  when clicked on. This caused widgets such as
-	  Fl_Text_Display to hide the cursor when you scrolled
-	  the text.
-
-
-CHANGES IN FLTK 1.1.1					RELEASED: ??? ?? 2002
-
-	- Fl_Text_Display didn't always show the cursor.
-	- Fl_Tabs now only redraws the tabs themselves when
-	  making focus changes.  This reduces flicker in tabbed
-	  interfaces.
-	- The WIN32 redraw handler now correctly merges the FLTK
-	  and Windows redraw regions.
-	- The Fl_Text_* widgets use the C++ bool type, which is
-	  not supported by older C++ compilers.  Added a
-	  configure check and workaround code for this.
-	- Fl_X::set_xid() didn't initialize the backbuffer_bad
-	  element that was used with XDBE.
-	- Fl_Shared_Image::uncache() was not implemented.
-	- Fl::set_font() didn't 0-initialize all font descriptor
-	  data.
-	- Some OpenGL implementations don't support single-
-	  buffered visuals. The Fl_Gl_Window class now emulates
-	  single-buffered windows using double-buffered
-	  windows.
-	- Added a workaround for a compiler bug in Borland C++
-	  that prevented Fl_Help_View.cxx from compiling.
-	- Checkmarks didn't scale properly; copied the 2.0 check
-	  mark code over.
-	- Replaced several memcpy's with memmove's for
-	  portability (memmove allows for overlapping copies,
-	  memcpy does not)
-	- Bug #621737: Fl_Bitmap::copy(), Fl_Pixmap::copy(), and
-	  Fl_RGB_Image::copy() now range-check the new width and
-	  height to make sure they are positive integers.
-	- Bug #621740: the WIN32 port needed to handle WM_MOUSELEAVE events
-	  in order to avoid problems with tooltips.
-	- Fl_PNM_Image didn't set the "alloc" flag for the data,
-	  which could lead to a memory leak.
-	- fl_filename_match() was inconsistently doing case-
-	  insensitive matching.
-	- Fl_Button redraw fix for bug #620979 (focus boxes and
-	  check buttons).
-	- Fl_Text_Display fix for bug #620633 (crash on
-	  redisplay).
-	- Fl_Output now calls its callback when the user clicks
-	  or drags in the widget.
-	- Shortcuts now cause buttons to take focus when visible
-	  focus is enabled.
-	- fl_filename_relative() didn't check that the path was
-	  absolute under WIN32.
-	- fl_filename_relative() didn't check that the path was
-	  on the current drive under WIN32.
-	- The Fl_BMP_Image class now handles 16-bit BMP files
-	  and BMP files with a transparency mask.
-	- The fltk-config script didn't add the required include
-	  path, if any, when compiling a program.
-	- Added a license clarification that the FLTK manual is
-	  covered by the same license as FLTK itself.
-	- Fl_Check_Browser wasn't documented.
-	- Fl_Preferences::Node::addChild(), deleteEntry(), and
-	  remove() didn't set the "dirty" flag.
-	- The "no change" button didn't work in the FLUID widget
-	  panel.
-	- Vertical scrollbars did not draw the arrows inactive
-	  when the scrollbar was inactive.
-
-
-CHANGES IN FLTK 1.1.0					RELEASED: ??? ?? 2002
-
-	- Documentation updates.
-	- Added a Fl_Widget::redraw_label() method which flags a
-	  redraw of the appropriate area.  This helps to
-	  eliminate flicker when updating the value of a widget.
-	- Fl_Wizard::value() now resets the mouse cursor to the
-	  window's default cursor.
-	- Fl_File_Chooser::type() didn't enable/disable the new
-	  directory button correctly.
-	- Fl_Preferences::entryExists() did not work properly.
-	- FLUID's image file chooser pattern was incorrect.
-	- Fl_File_Icon::load_system_icons() now detects KDE
-	  icons in /opt/kde, /usr/local, and /usr automatically,
-	  and supports the KDEDIR environment variable as well.
-	- Submenus now display to the left of the parent menu if
-	  they won't fit to the right.  Previously they would
-	  display right on top of the parent menu...
-	- Fl_Menu_:add() didn't handle a trailing "\" character
-	  gracefully.
-	- Clicking/dragging the middle mouse button in a
-	  scrollbar now moves directly to that scroll position,
-	  matching the behavior of other toolkits.
-	- Added some more range checking to the Fl_Text_Display
-	  widget.
-	- The editor demo did not correctly update the style
-	  (syntax highlighting) information.
-
-
-CHANGES IN FLTK 1.1.0rc7				CANDIDATE: ??? ?? 2002
-
-	- Updated the Fl_Text_Buffer and Fl_Text_Display classes
-	  to be based on NEdit 5.3 (patch from George Garvey).
-	- Fixed a problem with Fl::wait(0.0) on MacOS X 10.2;
-	  this affected the fractals demo and other OpenGL
-	  applications.
-	- Fl_Glut_Window now takes keyboard focus and handles
-	  shortcut events.
-	- The MacOS X implementation of fl_ready() now checks
-	  the event queue for events.
-	- Fl_PNM_Image now supports the XV/GIMP thumbnail format
-	  (P7).
-	- Fl_Preferences would not find groups inside the root
-	  group.
-	- Small bug fixes for Fl_Chart, Fl_Scrollbar, Fl_Tabs,
-	  and FLUID from Matthew Morrise.
-	- Fl_Chart didn't have its own destructor, so data in
-	  the chart wasn't freed.
-	- Fl_Menu_Button no longer responds to focus or keyboard
-	  events when box() is FL_NO_BOX.
-	- FLTK convenience dialogs put the buttons in the wrong
-	  order.
-	- Fl_BMP_Image didn't load 4-bit BMP files properly.
-	- Minor tweeks to the WIN32 DLL support.
-	- Fl_Text_Display::resize() could go into an infinite
-	  loop if the buffer is emptied.
-	- Fl::handle() didn't pass FL_RELEASE events to the
-	  grab() widget if pushed() was set (for proper menu
-	  handling...)
-	- DND events were being sent to the target window
-	  instead of the target widget under WIN32.
-	- The newest Cygwin needs the same scandir() handling as
-	  HP-UX.
-	- FLUID didn't register the image formats in the
-	  fltk_images library, and had some other image
-	  management problems.
-	- Fixed one more redraw bug in Fl_Browser_ where we
-	  weren't using the box function to erase empty space in
-	  the list.
-	- Fl_Text_Display::buffer() now calls resize() to show
-	  the buffer.
-	- Fl_Help_View didn't support HTML comments.
-	- Fl_Help_View didn't include the extra cellpadding when
-	  handling colspan attributes in cells.
-	- Fl_Help_View didn't support table alignment.
-
-
-CHANGES IN FLTK 1.1.0rc6				CANDIDATE: ??? ?? 2002
-
-	- Documentation updates.
-	- Fl::handle() didn't apply the modal tests for
-	  FL_RELEASE events, which caused Fl_Tabs to allow users
-	  to change tabs even when a modal window was open.
-	- Fl_Browser_, Fl_Input_, Fl_Slider now use the box
-	  function to erase the background.  This fixes some
-	  long-standing redraw problems.
-	- More snprintf/strlcpy/strlcat changes where needed.
-	- Fl::get_font_name() would leak 128 bytes.
-	- Eliminated most of the "shadowed" variables to avoid
-	  potential problems with using the wrong copy of "foo"
-	  in a class method.
-	- Moved Fl_BMP_Image, Fl_GIF_Image, and Fl_PNM_Image to
-	  the fltk_images library, so the only image formats
-	  that are supported by the core library are XBM and XPM
-	  files.  This reduces the size of the FLTK core library
-	  by about 16k...
-	- The Fl_Text_Display::resize() method was incorrectly
-	  flagged as protected.
-	- Fixed some memory/initialization bugs in
-	  Fl_File_Chooser that valgrind caught.
-	- The PNG library png_read_destroy() is deprecated and
-	  does not free all of the memory allocated by
-	  png_create_read_struct(). This caused a memory leak in
-	  FLTK apps that loaded PNG images.
-	- Added uncache() method to Fl_Image and friends.
-	- Added image() methods to Fl_Menu_Item.
-	- Added default_cursor() method and data to Fl_Window.
-	- Fl_Group would send FL_ENTER events before FL_LEAVE
-	  events, causing problems with adjacent widgets.
-	- Fixed filename problems with Fl_File_Chooser -
-	  changing the filename field directly or choosing files
-	  from the root directory could yield interesting
-	  filenames.
-	- Fl_Input_ could crash if it received an empty paste
-	  event.
-	- The mouse pointer now changes to the I beam
-	  (FL_CURSOR_INSERT) when moved over an input field or
-	  text widget.
-	- "make install" didn't automatically (re)compile the
-	  FLUID executable.
-	- Added an Fl::get_boxtype() method to get the current
-	  drawing function for a specific box type.
-	- Fl_Output and Fl_Multiline_Output didn't prevent
-	  middle-mouse pastes.
-	- Fl_JPEG_Image didn't compile out-of-the-box with Cygwin
-	  due to a bug in the Cygwin JPEG library headers.
-	- Fl_BMP_Image still didn't work with some old BMP files.
-	- "make distclean" didn't really clean out everything.
-	- Tweeked the look of the check button with a patch from
-	  Albrecht Schlosser.
-
-
-CHANGES IN FLTK 1.1.0rc5				CANDIDATE: ??? ?? 2002
-
-	- Added "wrap" type bit to Fl_Input_, so you can now
-	  have a multiline text field that wraps text.
-	- Setting the value() of an output text field no longer
-	  selects the text in it.
-	- Output text fields now show a caret for the cursor
-	  instead of the vertical bar.
-	- The newButton and previewButton widgets are now public
-	  members of the Fl_File_Chooser class.  This allows
-	  developers to disable or hide the "new directory" and
-	  "preview" buttons as desired.
-	- Added new visible focus flag bit and methods to
-	  Fl_Widget, so it is now possible to do both global and
-	  per-widget keyboard focus control.
-	- Removed extra 3 pixel border around input fields.
-	- No longer quote characters from 0x80 to 0x9f in input
-	  fields.
-	- Improved speed of Fl_Browser_::display() method with
-	  large lists (patch from Stephen Davies.)
-	- Fl_Help_View didn't properly handle NULL from the link
-	  callback (the original filename/directory name were
-	  not preserved...)
-	- Fl_Help_View didn't use the boxtype border values when
-	  clipping the page that was displayed.
-	- Added first steps to CodeWarrior/OS_X support (see
-	  fltk-1.1.x/CodeWarrior/OS_X.sit)
-	- Cleaned up the WIN32 export definitions for some of
-	  the widget classes.
-	- Fixed a filename completion bug when changing
-	  directories.
-	- Fl_File_Chooser::value() would return directories with
-	  a trailing slash, but would not accept a directory
-	  without a trailing slash.
-	- When installing shared libraries, FLUID is now linked
-	  against the shared libraries.
-	- MacOS: missing compile rule for .dylib files.
-	- Fl_Group::current(), Fl_Group::begin(), and
-	  Fl_Group::end() are no longer inlined so that they are
-	  properly exported in DLLs under WIN32.  Similar
-	  changes for all static inline methods in other
-	  classes.
-	- MacOS: support for Mac system menu (Fl_Sys_Menu_Bar)
-	- MacOS: wait(0) would not handle all pending events
-	- Added new makeinclude file for MingW using GCC 3.1.x.
-	- Fl_Choice::value(n) didn't range check "n".
-	- The MingW and OS/2 makeinclude files didn't have the
-	  new fltk_images library definitions.
-	- Fl_Text_Editor didn't scroll the text in the widget
-	  when dragging text.
-	- Config header file changes for Borland C++.
-	- FLTK didn't provide a Fl::remove_handler() method.
-
-
-CHANGES IN FLTK 1.1.0rc4				CANDIDATE: Jul 02 2002
-
-	- Added new filter_value() methods to Fl_File_Chooser to
-	  get and set the current file filters.
-	- Added support for custom filters to Fl_File_Chooser.
-	- Added Borland C++ Builder IDE project files from
-	  Alexey Parshin.
-	- Resource leak fixes under WIN32 from Ori Berger.
-	- Now register a WIN32 message for thread messages.
-	- Fl_Window didn't initialize the min and max window
-	  size fields.
-	- The JPEG and PNG image classes have been moved to the
-	  fltk_images library, a la FLTK 2.0.  You can register
-	  all image file formats provided in fltk_images using
-	  the new fl_register_images() function.
-	- Fl_XBM_Image didn't correctly load XBM files.
-	- MacOS: Added Greg Ercolano's file descriptor support.
-	- MacOS: Fixed text width bug.
-	- A change in fl_fix_focus() broken click-focus in FLWM.
-	- Cygwin with -mnocygwin didn't like the FL/math.h
-	  header file.
-	- Fl_Browser_ cleared the click count unnecessarily.
-	- MacOS: Pixmap draw fix, gl_font implemented
-	  FL_FOCUS fix, window type fix for modal and nonmodal
-	  windows, glut uninitialised 'display' proc fix
-	- Now support FLTK_1_0_COMPAT symbol to define
-	  compatibility macros for the old FLTK 1.0.x function
-	  names to the 1.1.x names.
-	- Now translate the window coordinates when a window is
-	  shown, moved, or resized.  This should fix the "menus
-	  showing up at the wrong position" bug under XFree86.
-	- Fixed some more problems with the Fl_BMP_Image file
-	  loader.
-	- BC++ fixes.
-	- The pixmap_browser demo didn't check for a NULL image
-	  pointer.
-	- Fl_File_Icon::find() now uses fl_filename_isdir()
-	  under WIN32 to check for directories.
-	- Fl_File_Chooser's preview code called refcount()
-	  on the deleted image's object.
-	- Fixed another problem with the Fl_BMP_Image loader.
-	- The fl_file_chooser() callback was being called with a
-	  NULL filename.
-	- Documented that fl_push_clip() is preferred over
-	  fl_clip(), with a corresponding source change.
-	- Minor changes to the MacOS X event handling code.
-	- Added syntax highlighting example code to the editor
-	  test program.
-	- Fl_Text_Display didn't range check style buffer
-	  values.
-	- Added "dark" color constants (FL_DARK_RED, etc.)
-	- The MacOS font code was missing definitions for
-	  fl_font_ and fl_size_.
-
-
-CHANGES IN FLTK 1.1.0rc3				CANDIDATE: ??? ?? ????
-
-	- Documentation updates.
-	- New file chooser from design contest.
-	- Did some testing with Valgrind and fixed some memory
-	  problems in Fl_Help_View::Fl_HelpView,
-	  Fl_Menu_::remove(), Fl_Text_Display::draw_vline(), and
-	  resizeform() (convenience dialogs).
-	- Fixed some redraw() bugs, and now redraw portions of
-	  the parent widget when the label appears outside the
-	  widget.
-	- The boolean (char) value methods in Fl_Preferences
-	  have been removed since some C++ compilers can't
-	  handle char and int value methods with the same name.
-	- Added fl_read_image() function.
-	- Fixed Fl_Valuator::format() so that the correct format
-	  type is used when step == 1.0.
-	- Fl_Help_View didn't support the TT markup.
-	- Fl_Shared_Image used a double-pointer to the image
-	  handler functions, which was unnecessary and
-	  unintuitive.
-	- Fl_PNM_Image didn't load the height of the image
-	  properly.
-	- Fl_BMP_Image, Fl_JPEG_Image, Fl_PNG_Image, and
-	  Fl_Shared_Image didn't delete image data that was
-	  allocated.
-	- Enabled the OpenGL and threads demos when compiling
-	  for MingW.
-	- Fl_File_Input didn't update the directory buttons if a
-	  callback was registered with the widget.
-	- The file chooser would return the last selected
-	  file(s) when cancel was pressed.
-	- The file chooser limited the resizing of the chooser
-	  window unnecessarily.
-	- Fixed WM_PAINT handling under WIN32.
-	- Minor tweeks to MingW and OS/2 config headers.
-	- Fl_Value_Input now correctly determines if step()
-	  specifies an integer value.
-	- Fl_Help_View didn't add links inside PRE elements.
-	- OS/2 build fixes from Alexander Mai.
-	- Now use strlcat() instead of strncat() which could
-	  cause buffer overflows.
-	- Now use of strlcpy() instead of strncpy() to simplify
-	  the code.
-	- Drag-n-drop under WIN32 now shows a [+] cursor instead
-	  of the link cursor.
-	- Fixed widget width tooltip and default argument
-	  handling code in FLUID.
-	- Fixed colors used when drawing antialiased text using
-	  Xft.
-	- Fl_Preferences::makePath() now uses access() instead
-	  of stat() when checking to see if the destination
-	  directory already exists.
-	- Fl_BMP_Image now supports older BMP files with the 12
-	  byte header.
-	- Optimized the redrawing of tabs and radio/check
-	  buttons when the keyboard focus changes.
-	- More tooltip fixes.
-	- DND text operations would loop under X11.
-
-
-CHANGES IN FLTK 1.1.0rc2				CANDIDATE: ??? ?? ????
-
-	- Portability fixes.
-	- Backported 2.0 tooltip changes.
-	- Several of the valuators did not support tooltips.
-	- The last menu item in a menu didn't pick up on font
-	  changes.
-	- FLUID now properly handles default argument parameters
-	  properly.
-	- Fixed WM_PAINT handling under WIN32 - didn't validate
-	  the correct region that was drawn.
-	- Fl_Multiline_Output would insert the enter key.
-	- Fl_File_Browser didn't clip items to the column width.
-	- Fl_Window::draw() cleared the window label but didn't
-	  restore it, so windows could lose their titles.
-	- Eliminated multiple definitions of dirent structure
-	  when compiling under WIN32.
-	- Adjusted the size of the circle that is drawn inside
-	  radio buttons to scale better for larger labels.
-	- FLUID was opening the display when it shouldn't have.
-	- Fl_File_Chooser.cxx defined the file chooser functions
-	  again; they should only be defined in the header file.
-	- Wide arcs would draw with "teeth".
-	- The preferences demo included Fl/Fl_Preferences.H
-	  instead of FL/Fl_Preferences.H.
-
-
-CHANGES IN FLTK 1.1.0rc1				CANDIDATE: ??? ?? ????
-
-	- The fl_file_chooser() and fl_dir_chooser() functions
-	  now support an optional "relative" argument to get
-	  relative pathnames; the default is to return absolute
-	  pathnames.
-	- The backspace and delete keys now work as expected in
-	  the file chooser when doing filename completion.
-	- FLUID now supports running shell commands.
-	- New Fl_File_Input widget that shows directory
-	  separators with filename in input field.
-	- The Fl_File_Chooser dialog now shows the absolute path
-	  in the filename field using the Fl_File_Input widget.
-	- FLUID now keeps track of grid, tooltip, and other
-	  GUI options, along with the last 10 files opened.
-	- Tooltip windows would show up in the task bar under
-	  WIN32.
-	- Now append trailing slash to directory names in names
-	  in WIN32 version of scandir().  This takes care of a
-	  file chooser performance problem with large
-	  directories.
-	- Added Fl_Preferences class from Matthias Melcher,
-	  including binary data support.
-	- FLUID now recognizes the "using" keyword in
-	  declarations.
-	- fl_file_chooser() didn't highlight the requested file
-	  the second time the file chooser dialog was shown.
-	- Fixed rendering of Fl_Light_Button with the plastic
-	  scheme.
-	- Fixed a bug in the MacOS font enumeration code.
-	- Now show a "locked" icon next to static/private
-	  elements in FLUID, and "unlocked" icon next to
-	  global/public elements.
-	- Implemented Fl_Menu_Item image labels using older
-	  1.0.x labeltype method.
-	- Updated the PNG library check to support both png.h
-	  and libpng/png.h.
-	- Fixed a recursion bug in tooltips that was causing
-	  random crashes.
-	- fl_file_chooser() could cause a segfault when passed a
-	  NULL filename parameter in some situations.
-	- Added a "-g" option to fltk-config to support quick
-	  compiling with debugging enabled.
-	- Fixed redraw problem with Fl_Input and anti-aliased
-	  text.
-	- Added threading support for MacOS X and Darwin.
-	- The filesystem list in the file chooser now works under
-	  MacOS X and Darwin.
-	- The fl_msg structure now contains all data passed to
-	  the WndProc function under WIN32.
-	- Fixed some window focus/positioning problems under
-	  MacOS X.
-	- Added fl_create_alphamask() function to create an alpha
-	  mask from 8-bit data; currently this always generates a
-	  1-bit screen-door bitmask, however in the future it will
-	  allow us to generate N-bit masks as needed by various
-	  OS's.
-	- Fl_File_Browser::load() didn't properly show drives
-	  when compiled in Cygwin mode.
-	- Now pass correctly pass keyboard and mouse events to
-	  widget under tooltip as needed...
-	- Added new Fl::dnd_text_ops() methods to enable/disable
-	  drag-and-drop text operations.
-	- Fl_Input now supports clicking inside a selection to
-	  set the new text position when drag-and-drop is
-	  enabled.
-	- Added support of X resources for scheme, dnd_text_ops,
-	  tooltips, and visible_focus...
-	- Fixed some case problems in includes for the MacOS X
-	  code.
-	- Fl_Widget::handle() returned 1 for FL_ENTER and
-	  FL_LEAVE events, which caused some compatibility
-	  problems with 1.0 code.
-	- Fl_Box::handle() now returns 1 for FL_ENTER and
-	  FL_LEAVE events so that tooltips will work with Fl_Box
-	  widgets.
-	- Some source files still defined strcasecmp and
-	  strncasecmp under WIN32.
-	- Some source files still used the "false" and "true"
-	  C++ keywords, even though several of our "supported"
-	  C++ compilers don't support them.  Using 0 and 1 until
-	  FLTK 2.0 (which uses the bool type instead of int for
-	  any boolean values...)
-	- Minor Fl_Color revamping, so that color constants map
-	  to the color cube and FL_FOREGROUND_COLOR,
-	  FL_BACKGROUND_COLOR, FL_BACKGROUND2_COLOR,
-	  FL_INACTIVE_COLOR, and FL_SELECTION_COLOR map to the
-	  user-defined colors.
-
-
-CHANGES IN FLTK 1.1.0b13				BETA: ??? ?? ????
-
-	- Fixed a bug in the Xft support in Fl_Window::hide()
-	  (the config header wasn't included, so the Xft code
-	  wasn't getting called)
-	- Xdbe support must now be enabled explicitly using
-	  --enable-xdbe due to inconsistent bugs in XFree86 and
-	  others.
-	- Windows resized by a program would revert to their
-	  original size when moved under WIN32.
-	- Cygwin can only compile the new WIN32 drag-n-drop code
-	  using GCC 3.x.
-	- Tooltips now appear for inactive and output widgets.
-	- Tooltips no longer steal keyboard events other than
-	  ESCape.
-	- Tooltips are no longer delayed when moving between
-	  adjacent widgets.
-	- fl_beep(FL_BEEP_DEFAULT) now uses the PC speaker under
-	  Windows (0xFFFFFFFF) rather than an event sound.
-	- The configure script didn't include the -mwindows or
-	  -DWIN32 compiler options in the output of fltk-config
-	  when using the Cygwin tools.
-	- Fl_Output didn't take input focus when needed, so it
-	  was unable to support CTRL-C for copying text in the
-	  field and did not unhighlight selections when the
-	  widget lost focus.
-	- The fl_filename_name() function didn't handle a NULL
-	  input string.
-	- The input field used by the fl_input() and
-	  fl_password() functions was resized too small in
-	  1.1.0b12.
-	- Added casts in fl_set_fonts_win32.cxx for VC++ 5.0.
-	- Fl_File_Icon::find() did not check the basename of a
-	  filename for a match; this caused matches for a
-	  specific filename (e.g. "fluid") to fail.
-	- The Fl_Shared_Image class now supports additional
-	  image handling functions - this allows you to support
-	  additional image file formats transparently.
-
-
-CHANGES IN FLTK 1.1.0b12				BETA: ??? ?? ????
-
-	- Documentation updates.
-	- Fl_Choice didn't clip the current value properly - it
-	  wasn't accounting for the box border width.
-	- The forms compatibility functions are now placed in a
-	  "fltk_forms" library to match FLTK 2.0.
-	- Renamed down() and frame() to fl_down() and
-	  fl_frame(), filename_xyz() to fl_filename_xyz(), and
-	  all of the define_FL_FOO() functions for the custom
-	  boxtypes to fl_define_FL_FOO() to avoid namespace
-	  clashes.
-	- Stereo OpenGL support (patch from Stuart Levy)
-	- All of the convenience functions defined in fl_ask.H
-	  now resize the widgets and dialog window as needed for
-	  the labels and prompt.
-	- Backported FLTK 2.0 dual cut/paste buffer code.
-	- Added support for Xft library to provide anti-aliased
-	  text on X11.
-	- Fl_Help_View didn't keep track of the background color
-	  of cells properly.
-	- Fl_Browser::item_width() didn't compute the width of
-	  the item properly when column_widths() was set.
-	- Fl_Button didn't check to see if the widget could
-	  accept focus before taking input focus.
-	- Fl_Help_View didn't preserve target names (e.g.
-	  "filename.html#target") when following links.
-	- Drag-and-drop support for MacOS.
-	- Updated MacOS issues documentation.
-
-
-CHANGES IN FLTK 1.1.0b11				BETA: ??? ?? ????
-
-	- Now conditionally use the WIN32 TrackMouseEvent API
-	  (default is no...)
-	- Fixed a table rendering bug in the Fl_Help_View
-	  widget.
-	- The fltk-config script now recognizes all common C++
-	  extensions.
-	- The menu code was using overlay visuals when the
-	  scheme was set to "plastic".
-	- Fixed some drawing problems with Fl_Light_Button and
-	  its subclasses.
-	- Fixed a minor event propagation bug in Fl_Group that
-	  caused mousewheel events to be passed to scrollbars
-	  that were not visible.
-	- The fl_file_chooser() function did not preserve the
-	  old file/directory like the old file chooser did.
-	- The prototypes for fl_input() and fl_password() did
-	  not default the "default value" to NULL.
-	- Fl_Tabs now draws tabs using the selection_color() of
-	  the child groups; this allows the tabs to be colored
-	  separately from the body.  Selected tabs are a mix of
-	  the Fl_Tabs selection_color() and the child group's
-	  selection_color().
-	- Fl_Tabs didn't include images in the measurement of
-	  the tabs if no label text was defined.
-	- The WIN32 code didn't return 0 from the window
-	  procedure after handling WM_PAINT messages.
-	- fl_draw() would incorrectly test the clipping of
-	  labels the lay outside the bounding box.
-	- filename_relative() didn't always return the correct
-	  relative path.
-	- Updated the test makefile to work with more versions
-	  of "make".
-	- Added new "--with-optim" configure option to set the
-	  optimization flags to use when compiling FLTK.
-	- The fltk-config script no longer reports the
-	  optimization flags that were used to compile FLTK.
-	- Initial port of FLTK 2.0 drag-and-drop support.
-
-
-CHANGES IN FLTK 1.1.0b10				BETA: ??? ?? ????
-
-	- Fixed the new WIN32 TrackMouseEvent code.
-	- Fixed the VC++ project files to link against
-	  comctl32.lib.
-
-
-CHANGES IN FLTK 1.1.0b9					BETA: ??? ?? ????
-
-	- Better FL_LEAVE event handling for WIN32.
-	- The alpha mask was bit-reversed.
-	- Fl::scheme() applied the scheme tile image to overlay
-	  and menu windows, which caused problems when the
-	  overlay planes were in use.
-	- Fixed Fl::event_button() value when hiding tooltip on
-	  some systems.
-	- Added Fl_BMP_Image class to support loading of Windows
-	  bitmap (BMP) files.
-	- The shiny demo didn't work on some systems (no
-	  single-buffered OpenGL visual), and the new box types
-	  were reset when show(argc, argv) was called.
-	- Fl::scheme() didn't update windows that were not
-	  shown.
-	- The fractals demo would get far ahead of the UI with
-	  some Linux OpenGL drivers.  Now use glFinish() instead
-	  of glFlush() so we are at most 1 frame ahead.
-	- The fractals demo Y axis controls were backwards for
-	  the "flying" mode.
-	- MacOS: cleaned up src/Fl_mac.cxx
-	- MacOS: fixed Fl::wait(0.0), fixed Cmd-Q handling
-	- Update CygWin support for Fl::add_fd().
-	- Update the plastic scheme to not override the default
-	  colors - move the color code to the MacOS-specific
-	  code.  Also updates the tile image colormap to match
-	  the current background color.
-	- Add fl_parse_color() to X11 as well, removing a bunch
-	  of conditional code and providing a common interface
-	  for looking up color values.
-	- Fixed the make problems in the test directory - some
-	  make programs had trouble handling the recursive
-	  dependencies on the FLUID files...
-	- Now use rint() to round floating-point coordinates.
-	- Demo cleanup - made sure they all worked with schemes.
-	- Fl_Tabs no longer clears the unused area of the tab
-	  bar.
-	- Added show(argc, argv) method to Fl_Help_Dialog.
-	- MacOS: implemented cut/copy/paste.
-	- MacOS: improved keyboard handling, fixed keyboard
-	  focus handling, fixed get_key, modified 'keyboard'
-	  demo to show second mouse wheel and additional keys
-	  'help' and FL_NK+'='
-
-
-CHANGES IN FLTK 1.1.0b8					BETA: ??? ?? ????
-
-	- OS/2 build fixes.
-	- fl_draw() didn't ignore symbol escapes properly for
-	  the browsers...
-	- New Fl::scheme() methods from FLTK 2.0; currently only
-	  the standard ("") and plastic ("plastic") methods are
-	  supported.  Schemes can be set on the command-line
-	  ("-scheme plastic") or using the FLTK_SCHEME
-	  environment variable.
-	- MacOS: fixed iBook keyboard handling, moved
-	  remaining message handling to Carbon, added mouse
-	  capture support, added timer support, added overlay
-	  support, fixed double-buffering side effects.
-	- The configure script wasn't using the -fpermissive or
-	  -fno-exceptions options with GCC.
-	- Fl_JPEG_Image and friends didn't set the depth if the
-	  image file couldn't be loaded; since Fl_RGB_Image
-	  didn't check for this, it could fail when displaying
-	  or copying these images.
-	- filename_absolute() did not always free its temporary
-	  buffer.
-	- filename_relative() did not do a case-insensitive
-	  comparison under MacOS, OS/2, and Windows.
-	- filename_isdir() didn't properly handle "D:L" under
-	  WIN32.
-	- Fl_Shared_Image::get() did not check to see if the
-	  image could not be loaded.
-	- Fl_Help_View didn't clear the line array in the
-	  Fl_Help_Block structure; this causes erratic
-	  formatting for some pages.
-	- The font and size members of Fl_Help_Block were never
-	  used.
-	- The threading functions (Fl::lock() and friends) were
-	  not exported under WIN32.
-	- The Fl_Text_Display destructor deleted the scrollbars
-	  twice...
-	- Fl_Help_View didn't reset the horizontal scroll
-	  position when showing a new page.
-	- Fl_Pack now allows any child widget to be the
-	  resizable() widget, not just the last one.
-	- MacOS: opaque window resizing, all events except
-	  Mac menus are now handled using Carbon, window
-	  activation fixed, GL_SWAP_TYPE default changed to
-	  make gl_overlay work.
-	- Fl_Help_View::resize() didn't resize the horizontal
-	  scrollbar.
-	- MacOS: list all fonts, fixed clipping and mouse
-	  pointer bugs.
-	- The Fl_File_Chooser widget now uses hotspot() to
-	  position the dialog under the mouse pointer prior to
-	  showing it.
-	- Added a configure check for *BSD - use -pthread option
-	  instead of -lpthread.
-	- Fl_Text_Display could get in an infinite loop when
-	  redrawing a portion of the screen.  Added a check for
-	  the return value from fl_clip_box() so that the
-	  correct bounding box is used.
-	- Removed the Fl_Mutex and Fl_Signal_Mutex classes from
-	  the threads example, since they weren't being used
-	  and apparently are not very portable.
-	- Fl_Help_View now ignores links when the link callback
-	  returns NULL, and displays a sensible error message
-	  when an unhandled URI scheme is used (e.g. http:,
-	  ftp:)
-	- Fl_File_Icon::load_system_icons() no longer complains
-	  about missing icon files, just files that exist but
-	  can't be loaded.
-	- FLUID didn't list the plastic box and frame types.
-	- Now hide the tooltip window whenever a window is
-	  hidden.  Otherwise a tooltip window could keep an
-	  application running.
-	- Updated FLUID to only append a trailing semicolon to
-	  code lines in a callback (so "#include" and friends
-	  will work...)
-	- The Fl_Color_Chooser widget now supports keyboard
-	  navigation.
-	- Fixed button and valuator widgets to call Fl::focus()
-	  instead of take_focus().
-	- Tweeked the radio button drawing code for better
-	  circles with different boxtypes.
-	- The Fl_File_Chooser widget did not provide a shown()
-	  method, and fl_file_chooser() and fl_dir_chooser() did
-	  not wait on shown(); this would cause them to return
-	  prematurely if you switched desktops/workspaces.
-	- Cosmetic changes to plastic boxtypes.  Now look much
-	  better for large areas and the buttons now have a much
-	  greater "3D" feeling to them.
-	- Added new Fl::draw_box_active() method so that
-	  boxtypes can find out if the widget they are drawing
-	  for is active or not.
-	- Fl_Button and its subclasses did not redraw the parent
-	  when the boxtype was FL_NO_BOX and they lost keyboard
-	  focus (the parent redraw clears the focus box.)
-	- Fixed the example program makefile - wasn't building
-	  the mandelbrot and shiny demos right.
-	- Fl::set_font(Fl_Font, Fl_Font) was not implemented.
-	- Fixed the documentation Makefile commands; was not
-	  using the fltk.book file for some reason...
-
-
-CHANGES IN FLTK 1.1.0b7					BETA: ??? ?? ????
-
-	- More documentation updates...
-	- Mac OS X support works 95%
-	- The Fl_Window::hotspot() off-screen avoidance code was
-	  commented out.
-	- Mac OS X uses mostly Carbon event handling to support
-	  Mousewheel, three buttons, all modifier keys, etc.
-	- Updated paragraph 4 of the FLTK license exceptions;
-	  there was some question about the requirement to show
-	  that a program uses FLTK, which is required by section
-	  6 of the LGPL. The new exemption specifies that
-	  inclusion of the FLTK license is not required, just a
-	  statement that the program uses FLTK.
-	- Fl_Button::handle() was calling take_focus() for both
-	  FL_PUSH and FL_DRAG.
-	- File and memory fixes for Fl_GIF_Image, Fl_PNG_Image,
-	  Fl_PNM_Image, Fl_Shared_Image, Fl_Tiled_Image, and
-	  Fl_XBM_Image.
-	- filename_match() didn't handle backslashes properly
-	  under WIN32, and didn't use a case-insensitive
-	  comparison under MacOS X.
-	- The Fl class was missing access methods for the
-	  FL_MOUSEWHEEL event values - Fl::event_dx() and
-	  Fl::event_dy().
-	- The default help string didn't include the -nokbd
-	  option.
-	- "make uninstall" didn't uninstall the static OpenGL
-	  widget library.
-	- Mac cursor shapes added...
-	- Fl_Text_Display would lockup when all text was
-	  deleted; for example, when running the editor
-	  demo, you couldn't load a second file.
-	- Added Fl::lock() and friends from FLTK 2.0 to
-	  support multi-threaded applications; see the
-	  "threads" demo for an example of this.
-	- Fl_Check_Button and Fl_Round_Button now use the
-	  FL_NO_BOX box type to show the background of the
-	  parent widget.
-	- Tweeked the plastic boxtype code to draw with the
-	  right shading for narrow, but horizontal buttons.
-	- Fl_Progress now shades the bounding box instead of
-	  drawing a polygon inside it.
-	- Fl::warning() under WIN32 defaults to no action. This
-	  avoids warning dialogs when an image file cannot be
-	  loaded.
-	- Some Win32 drivers would draw into wrong buffers
-	  after OpenGL mode change
-	- The file chooser would cause a segfault if you
-	  clicked in an empty area of the file list.
-	- Fl_File_Icon::labeltype() would cause a segfault
-	  if the value pointer was NULL.
-	- Fl_File_Icon::load_image() could cause segfaults
-	  (NULL data and incrementing the data pointer too
-	  often.)
-	- Fl_File_Icon::load_image() now handles 2-byte
-	  per color XPM files.
-	- Some Win32 drivers would draw into wrong buffers
-	  after OpenGL mode change.
-	- Message handling and Resources for MacOS port.
-	- Fl_Help_View could get in an infinitely loop when
-	  determining the maximum width of the page; this
-	  was due to a bug in the get_length() method with
-	  percentages (100% width would cause the bug.)
-	- Don't need -lgdi32 for CygWin, since -mwindows
-	  does this for us.
-	- The WIN32 event handler did not properly handle
-	  WM_SYNCPAINT messages.
-	- Fl_Tabs now uses the boxtype exclusively to draw
-	  both the tabs and surrounding box, so alternate
-	  box types actually work and the look is a little
-	  nicer.
-	- Fixed the drawing of large areas with the new
-	  plastic boxtypes.
-	- Updated the Visual C++ demo projects to use FLUID
-	  to generate the GUI files as needed.
-	- The demo program didn't load the right menu file
-	  when compiled for debugging under WIN32.
-	- Added plastic box types to forms demo.
-	- Added mousewheel to keyboard demo.
-	- The Fl_Text_Editor widget caused an infinite loop
-	  when it received keyboard focus.
-	- filename_isdir() didn't properly handle drive letters
-	  properly; WIN32 needs a trailing slash for drive
-	  letters by themselves, but cannot have a trailing
-	  slash for directory names, go figure...
-	- The Fl_Text_Buffer and Fl_Text_Display classes did not
-	  initialize all of their members.
-	- fl_normal_label() had a totally redundant set of
-	  if/else tests, which the new code handles all from
-	  fl_draw().
-	- The Fl_File_Chooser dialog contained two hotspots.
-	- The fl_draw_pixmap() function didn't free the 2-byte
-	  color lookup table properly (delete instead of
-	  delete[]).
-	- fl_draw() reset the text color under WIN32, causing
-	  bitmaps to draw incorrectly.
-	- Fl::get_font_sizes() is now implemented under WIN32.
-	- Fl_Text_Display now uses the same default colors for
-	  selection and text as Fl_Input_ and friends.
-	- Changed the default line scrolling in Fl_Text_Display
-	  to 3 lines for the mouse wheel and scrollbar arrows.
-
-
-CHANGES IN FLTK 1.1.0b6					BETA: ??? ?? ????
-
-	- Documentation updates...
-	- The configure script now works within the CygWin
-	  environment.
-	- Tooltips are now enabled by default, but are not
-	  re-enabled when calling the Fl_Widget::tooltip()
-	  method.
-	- Added new Fl::version() method to get the current
-	  FLTK library version (for shared libraries/DLLs)
-	- Added new Fl::event() method to get the current
-	  event that is being processed.
-	- Added new fl_beep() function to do audible
-	  notifications of various types.
-	- Added new Fl_GIF_Image, Fl_JPEG_Image, Fl_PNG_Image,
-	  Fl_PNM_Image, Fl_XBM_Image, and Fl_XPM_Image classes.
-	- Added new Fl_Shared_Image class, a la FLTK 2.0.
-	- Added new Fl_Tiled_Image class for tiled backgrounds.
-	- Added new copy(), desaturate(), inactive(), and
-	  color_average() methods to the Fl_Image classes.
-	- Added a horizontal scrollbar to the Fl_Help_View
-	  widget.
-	- Added new FL_PLASTIC_{UP/DOWN}_{BOX/FRAME} boxtypes
-	  for a more "modern" look (sort of a cross between KDE
-	  2.2 and Aqua.)
-	- Fl_Float_Input and Fl_Int_Input no longer accept
-	  pasted text that is not a floating point or integer
-	  value.  Pasted numbers now replace text in these
-	  widgets.
-	- Implemented the Fl_File_Icon::load_png() method.
-	- The Fl_File_Icon::load_system_icons() method now
-	  supports KDE 2.x icons.
-	- Fixed PNG support in Fl_Help_View.
-	- Removed the "Microsoft" mode button from the menubar
-	  demo.
-	- The browser demo now makes sure that the input field
-	  contains a number.
-	- The Fl_Browser::make_visible() method now range checks
-	  the input.
-	- Updated the fl_draw() and fl_measure() methods to
-	  accept an optional draw_symbols argument, which
-	  controls whether symbols are drawn in the text.
-	- Added new Fl::visible_focus() methods to control
-	  whether the focus box is drawn.
-	- The focus box is now drawn using the contrast color.
-	- Fl_Repeat_Button didn't accept keyboard focus.
-	- Added new Fl::visible_focus() method and standard
-	  "-kbd" and "-nokbd" options in Fl::args() processing
-	  to control whether keyboard focus is shown and handled
-	  by non-text widgets.
-	- The wrong tooltip could be shown if the user moved the
-	  mouse over adjacent widgets with tooltips.
-	- The drop-down button on Fl_Choice widgets was not
-	  limited in width.
-	- Tooltips could appear off the screen.
-	- Mouse wheel events are now sent to the focus widget
-	  first, then to any other interested widget.
-	- The Fl_RGB_Image class now supports images with an
-	  alpha channel.  Images are currently drawn using
-	  "screen door" transparency...  See the "image" demo
-	  for an example.
-	- Added new fl_create_bitmask() and fl_delete_bitmask()
-	  functions that create bitmap objects for masking and
-	  bitmap drawing.
-	- Was sending FL_RELEASE events for buttons 4 and 5
-	  under X11, which are only for FL_MOUSEWHEEL.
-	- Fl_Help_View now supports the EM and STRONG elements.
-	- Didn't do callbacks when changing tabs via keyboard.
-	- FLUID didn't write tooltip strings to the message
-	  catalog file.
-	- Fl_File_Icon now uses Fl_Shared_Image to load icon
-	  images; the load_png() and load_xpm() methods have
-	  been replaced by a single load_image() method.
-	- Fl_File_Icon::load_system_icons() now does a better
-	  job of finding KDE icons.
-	- Now use Fl::warning() and Fl::error() in place of
-	  printf's in some of the newer widgets.
-	- The default behavior of Fl::error() is now to display
-	  an error but not to exit; Fl::fatal() still exits.
-	- FLUID now uses the Fl_Shared_Image class, so FLUID-
-	  generated GUIs can embed any of the supported image
-	  file formats.
-	- New filename_relative() function to convert an
-	  absolute filename to a relative one.
-	- Updated the filename_absolute(), filename_expand(),
-	  and filename_setext() functions to take the
-	  destination string size, with inline functions for the
-	  old FL_PATH_MAX size.
-	- fl_file_chooser() and fl_dir_chooser() now return a
-	  relative path.
-	- Fl_Help_View now supports all ampersand escapes.
-
-
-CHANGES IN FLTK 1.1.0b5					BETA: ??? ?? ????
-
-	**** NOTE: DUE TO CHANGES IN THE WIDGET CLASSES,  ****
-	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
-	****       THAT USE FLTK!!!                       ****
-
-	- All FLTK color values are now 32-bits and support
-	  both the legacy 8-bit color values as well as 24-bit
-	  RGB values (0xRRGGBB00 for 24-bit RGB, 0x000000II
-	  for indexed color).
-	- Fl::set_boxtype() and fl_internal_boxtype() now keep
-	  track of when a boxtype is changed; this allows you to
-	  override the "special" boxtypes without references to
-	  those boxtypes causing them to be reset.
-	- Fl_Help_Func now takes a Fl_Widget pointer as well as
-	  a pathname.
-	- Added code to support FL_KEYUP events.
-	- Focus did not return to the Fl_Text_Display and Editor
-	  widgets when scrolling and then clicking inside the
-	  editor window.
-	- Now set the line size of the vertical scrollbar in the
-	  text editor to 1.
-	- The symbols demo didn't show the strings needed to
-	  show the corresponding symbol (the label string was
-	  not quoted...)
-	- FLTK should now compile with Cygwin cleanly.
-	- Shortcut changes were not being saved by FLUID.
-	- FLUID didn't write the deimage() static data.
-
-
-CHANGES IN FLTK 1.1.0b4					BETA: ??? ?? ????
-
-	**** NOTE: DUE TO CHANGES IN THE FL_WIDGET CLASS, ****
-	****       YOU MUST RECOMPILE ALL SOURCE FILES    ****
-	****       THAT USE FLTK!!!                       ****
-
-	- Updated the flags_ member of Fl_Widget to be an
-	  integer instead of uchar, to support the new
-	  FL_OVERRIDE flag for Fl_Window.
-
-	- The parent() method of Fl_Widget now uses pointers to
-	  Fl_Group instead of Fl_Widget.
-
-	- Fl_Window now provides the FLTK 2.0 "override()" and
-	  "set_override()" methods for windows.
-
-	- Added a configure check (and warning) for GCC 3.0.x.
-
-	- Updated the configure script to check for the
-	  png_set_tRNS_to_alpha() function.
-
-	- Updated the config.h files for all platforms for the
-	  image and FLTK documentation defines.
-
-	- Updated the makeinclude files for all platforms to
-	  match the current makeinclude.in file.
-
-	- FLUID would crash if you cleared an image for a
-	  widget.
-
-	- Fl_Help_View::add_image() did not initialize the image
-	  member of the base (unscaled) image.
-
-	- Fl_Help_View didn't support A elements with both a
-	  NAME and HREF attribute - the HREF was ignored.
-
-	- Miscellaneous compile warning fixes.
-
-	- Tooltips were being reset by Fl::belowmouse(), which
-	  caused problems with the FLUID main window (flashing
-	  tooltip windows and serious problems with KDE 2.2)
-
-	- The editor demo had the save and discard button
-	  actions reversed.
-
-	- The Fl_Help_View widget now uses
-	  png_destroy_read_struct() if the older
-	  png_read_destroy() function is not available.
-
-	- The WIN32 DLL library now includes the OpenGL widgets.
-	  This is a simpler solution for the export/import
-	  dillemma under WIN32, as OpenGL and non-OpenGL symbols
-	  need to be exported at different times with the
-	  separate library scheme.  Since OpenGL is standard
-	  under Windows, this is less of a problem than under
-	  UNIX...
-
-
-CHANGES IN FLTK 1.1.0b3					BETA: ??? ?? ????
-
-	- The top-level makefile did not include the makeinclude
-	  file, causing the fltk-config installation commands to
-	  fail.
-
-	- The fl_file_chooser.cxx source file conflicted with
-	  Fl_File_Chooser.cxx under Windows.  Similarly, the
-	  fl_file_chooser.H header file conflicts with the
-	  Fl_File_Chooser.H header file.
-
-	- Now save and restore the GDI pen object when
-	  responding to WIN32 paint messages.
-
-	- Documentation updates from A. Suatoni.
-
-
-CHANGES IN FLTK 1.1.0b2					BETA: ??? ?? ????
-
-	- New fltk-config script.
-
-	- Fixed image/text label handling; in b1 the label
-	  needed a non-blank text string to display the image.
-	  This bug also caused all sorts of crashes and display
-	  problems.
-
-	- Added new filetype() method to Fl_FileBrowser to allow
-	  for file or directory browsing.
-
-	- Fixed the drawing of the focus box around
-	  Fl_Return_Button.
-
-	- Fixed menu item measurement bug (wasn't initializing
-	  image pointers to 0...)
-
-	- Radio and checkbox menu items now draw with the new
-	  style (round radio buttons with dots and square check
-	  buttons with check marks.)
-
-	- Improved the appearance of Fl_Check_Button.
-
-	- Improved the Fl_HelpView table formatting code; now
-	  dynamically sizes the table columns, and supports
-	  COLSPAN.
-
-	- The FLUID keyboard shortcuts now work as expected
-	  (CTRL-C copies, SHIFT-CTRL-C writes code, etc.)
-
-	- The FLTK_DOCDIR environment variable can now be
-	  used to tell FLUID where to find the on-line
-	  documentation files.
-
-	- FLUID now supports image labels in addition to text
-	  labels + text over image alignment.
-
-	- FLUID now supports tooltips.
-
-	- The widget panel in FLUID is now tabbed, a la FLTK
-	  2.0.
-
-	- The FLUID pixmap destructor tried to free 1 too many
-	  lines of image data.
-
-	- FLUID now provides on-line help.
-
-	- Changed Fl_FileXYZ to Fl_File_XYZ.
-
-	- Changed Fl_HelpXYZ to Fl_Help_XYZ.
-
-	- Tooltip fixes for Fl_Browser_, Fl_Choice, and Fl_Input_.
-
-	- Added tooltips to FLUID, help dialog, and file chooser.
-
-	- Now load system icons in FLUID.
-
-
-CHANGES IN FLTK 1.1.0b1
-
-	- Added new image() and deimage() methods to support
-	  image + text labels more easily.
-
-	- Added new alignment bit FL_ALIGN_TEXT_OVER_IMAGE.
-
-	- Added tooltip support using Jacques Tremblay's tooltip
-	  patch.
-
-	- Added keyboard navigation to all widgets.
-
-	- Added support for mouse wheels using the new
-	  FL_MOUSEWHEEL event type.  Get the mouse wheel
-	  movement values from Fl::e_dx (horizontal) and
-	  Fl::e_dy (vertical).
-
-	- Added the Fl_Check_Browser, Fl_FileBrowser,
-	  Fl_FileChooser, Fl_FileIcon, Fl_HelpDialog,
-	  Fl_HelpView, Fl_Progress, and Fl_Wizard widgets from
-	  the bazaar.
-
-	- Added 2.0 Fl_Text_Display and Fl_Text_Editor widgets
-	  based on NEdit.
-
-	- The Fl_Choice widget now looks more line a combo box
-	  than a Motif option menu.
-
-	- Moved the OpenGL widgets into a separate library
-	  called fltkgl - this eliminates shared library
-	  dependencies on OpenGL when no OpenGL functionality is
-	  used/required.
-
-	- FLUID now supports the new Fl_CheckBrowser,
-	  Fl_FileBrowser, Fl_FileIcon, Fl_HelpView,
-	  Fl_Text_Display, Fl_Text_Editor, and Fl_Wizard
-	  widgets.
-
-	- Updated configure stuff to support shared libraries
-	  under AIX (link to -lfltk_s)
-
-	- Symbol labels can now contain regular text.
-
-	- FLUID now supports relative filenames for the source
-	  and header files you generate.
-
-	- Fl_Menu_Item::add() didn't use the flags that were
-	  passed in.
-
-	- Fixed a bug in Fl_Scrollbar - clicking in the "trough"
-	  of the scrollbar would move the scroller in the wrong
-	  direction.
-
-	- Made the Forms pixmap parameter const to match the
-	  Fl_Pixmap.H definitions.
-
-	- Changed the Fl_Pixmap constructor to use the explicit
-	  keyword which should work for all C++ compilers.
-
-	- Fl_Menu_add of a menu item with the same name as an
-	  existing submenu title would mess up by replacing that
-	  menu title, it now adds a new item.
-
-	- Fl_Menu::add() of text starting with '/' to a menu is
-	  assummed to be a filename. So "/foo/bar" creates a
-	  single menu item. You can also put filenames into
-	  submenus by doing "submenu//foo/bar", this will create
-	  a submenu called "submenu" with an item "/foo/bar".
-	  Menu items starting with "\_" will insert an item
-	  starting with '_' rather than a divider line. These
-	  changes make the menus compatable with fltk 2.0.
-
-	- Another little fix for the BoXX OpenGL overlays.
-
-	- Fl_Gl_Window no longer blanks the mouse pointer on
-	  WIN32 unless an OpenGL overlay is being used.  This
-	  should make non-overlay displays faster when a cursor
-	  is set.
-
--- a/DoConfig/fltk/CMake/FLTK-Functions.cmake
+++ /dev/null
@@ -1,53 +1,0 @@
-#
-# "$Id$"
-#
-# FLTK-Functions.cmake
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# functions used by the build system and exported for the end-user
-#######################################################################
-# USAGE: FLTK_RUN_FLUID TARGET_NAME "FLUID_SOURCE [.. FLUID_SOURCE]"
-function(FLTK_RUN_FLUID TARGET SOURCES)
-    set (CXX_FILES)
-    foreach(src ${SOURCES})
-        if ("${src}" MATCHES "\\.fl$")
-            string(REGEX REPLACE "(.*).fl" \\1 basename ${src})
-            add_custom_command(
-                OUTPUT "${basename}.cxx" "${basename}.h"
-                COMMAND "${FLTK_FLUID_EXECUTABLE}" -c ${CMAKE_CURRENT_SOURCE_DIR}/${src}
-                DEPENDS ${src}
-                MAIN_DEPENDENCY ${src}
-            )
-            list(APPEND CXX_FILES "${basename}.cxx")
-        endif ("${src}" MATCHES "\\.fl$")
-        set (${TARGET} ${CXX_FILES} PARENT_SCOPE)
-    endforeach(src)
-endfunction(FLTK_RUN_FLUID TARGET SOURCES)
-
-#######################################################################
-# sets the bundle icon for OSX bundles
-function(FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
-    get_filename_component(ICON_NAME "${ICON_PATH}" NAME)
-    set_target_properties("${TARGET}" PROPERTIES
-        MACOSX_BUNDLE_ICON_FILE "${ICON_NAME}"
-        RESOURCE "${ICON_PATH}"
-    )
-endfunction(FLTK_SET_BUNDLE_ICON TARGET ICON_PATH)
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/CMake/FLTKConfig.cmake.in
+++ /dev/null
@@ -1,43 +1,0 @@
-#
-# "$Id$"
-#
-# FLTKConfig.cmake - FLTK CMake configuration file for external projects.
-#
-# This file is generated by CMake and used to load FLTK's settings for
-# an external project.
-#
-# It defines the following variables:
-#
-#  FLTK_INCLUDE_DIRS     - FLTK include directories
-#  FLTK_LIBRARIES        - list of FLTK libraries built (not yet implemented)
-#  FLTK_FLUID_EXECUTABLE - needed by the function FLTK_RUN_FLUID
-#                          (or the deprecated fltk_wrap_ui() CMake command)
-#
-#  FLTK_USE_FILE - sets things up to use FLTK (deprecated since FLTK 1.3.4)
-#                - will be removed in FLTK 1.4.0
-
-set(FLTK_VERSION @FLTK_VERSION_FULL@)
-
-include(${CMAKE_CURRENT_LIST_DIR}/FLTK-Targets.cmake)
-
-set(FLTK_INCLUDE_DIRS "@INCLUDE_DIRS@")
-set(FLTK_USE_FILE ${CMAKE_CURRENT_LIST_DIR}/UseFLTK.cmake)
-
-if(CMAKE_CROSSCOMPILING)
-   find_file(FLUID_PATH
-      NAMES fluid fluid.exe
-      PATHS ENV PATH
-      NO_CMAKE_FIND_ROOT_PATH
-   )
-   add_executable(fluid IMPORTED)
-   set_target_properties(fluid
-      PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
-   )
-   set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
-else()
-   set(FLTK_FLUID_EXECUTABLE fluid)
-endif(CMAKE_CROSSCOMPILING)
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/CMake/MacOSXBundleInfo.plist.in
+++ /dev/null
@@ -1,36 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>${MACOSX_BUNDLE_INFO_STRING}</string>
-	<key>CFBundleIconFile</key>
-	<string>${MACOSX_BUNDLE_ICON_FILE}</string>
-	<key>CFBundleIdentifier</key>
-	<string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleLongVersionString</key>
-	<string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
-	<key>CFBundleName</key>
-	<string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
-	<key>CSResourcesFileMapped</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/CMake/UseFLTK.cmake.in
+++ /dev/null
@@ -1,20 +1,0 @@
-#
-# "$Id$"
-#
-# UseFLTK.CMake - FLTK CMake environment configuration file for external projects.
-#
-# This file is deprecated and will be removed in FLTK 1.4
-#
-# automatically generated - do not edit
-#
-
-include_directories("@INCLUDE_DIRS@")
-
-message(STATUS "* Notice: UseFLTK.CMake is deprecated and will be removed in FLTK 1.4")
-message(STATUS "*   Please use 'include_directories(\${FLTK_INCLUDE_DIRS})' or")
-message(STATUS "*   'target_include_directories(<target> PUBLIC|PRIVATE \${FLTK_INCLUDE_DIRS})'")
-message(STATUS "*   instead of 'include(\${FLTK_USE_FILE})'.")
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/CMake/cmake_uninstall.cmake.in
+++ /dev/null
@@ -1,19 +1,0 @@
-if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-   message(FATAL_ERROR
-      "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
-endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-
-file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
-string(REGEX REPLACE "\n" ";" files "${files}")
-
-foreach(file ${files})
-message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
-   exec_program("@CMAKE_COMMAND@"
-      ARGS "-E remove -f \"$ENV{DESTDIR}${file}\""
-      OUTPUT_VARIABLE rm_out
-      RETURN_VALUE rm_retval
-   )
-   if(NOT "${rm_retval}" STREQUAL 0)
-      message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
-   endif(NOT "${rm_retval}" STREQUAL 0)
-endforeach(file)
--- a/DoConfig/fltk/CMake/export.cmake
+++ /dev/null
@@ -1,129 +1,0 @@
-#
-# "$Id$"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# final config and export
-#######################################################################
-# Set the fluid executable path
-if(CMAKE_CROSSCOMPILING)
-   find_file(FLUID_PATH
-      NAMES fluid fluid.exe
-      PATHS ENV PATH
-      NO_CMAKE_FIND_ROOT_PATH
-   )
-   add_executable(fluid IMPORTED)
-   set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
-   set(FLUID)       # no export
-   set_target_properties(fluid
-      PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
-   )
-else()
-   add_subdirectory(fluid)
-   set(FLTK_FLUID_EXECUTABLE fluid)
-   set(FLUID fluid) # export
-endif(CMAKE_CROSSCOMPILING)
-
-add_subdirectory(src)
-
-# generate FLTK-Targets.cmake for build directory use
-export(TARGETS ${FLUID} ${FLTK_LIBRARIES} FILE ${CMAKE_BINARY_DIR}/FLTK-Targets.cmake)
-
-# generate FLTK-Functions.cmake for build directory use
-configure_file(
-    ${FLTK_SOURCE_DIR}/CMake/FLTK-Functions.cmake
-    ${FLTK_BINARY_DIR}/FLTK-Functions.cmake
-    COPYONLY
-    )
-
-# generate FLTKConfig.cmake for build directory use
-set(INCLUDE_DIRS "${FLTK_INCLUDE_DIRS}")
-set(CONFIG_PATH ${FLTK_BINARY_DIR})
-
-configure_file(
-   ${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
-   ${FLTK_BINARY_DIR}/FLTKConfig.cmake
-   @ONLY
-)
-
-# generate UseFLTK.cmake for build directory use
-configure_file(
-   ${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
-   ${FLTK_BINARY_DIR}/UseFLTK.cmake
-   @ONLY
-)
-
-# generate fltk-config for build directory use
-set(prefix ${FLTK_BINARY_DIR})
-set(exec_prefix "\${prefix}")
-set(includedir "${FLTK_SOURCE_DIR}")
-set(BINARY_DIR "${FLTK_BINARY_DIR}")
-set(libdir "\${exec_prefix}/lib")
-set(srcdir ".")
-
-set(LIBNAME "${libdir}/libfltk.a")
-
-configure_file(
-   "${FLTK_SOURCE_DIR}/fltk-config.in"
-   "${FLTK_BINARY_DIR}/fltk-config"
-   @ONLY
-)
-if(UNIX)
-   execute_process(COMMAND chmod 755 fltk-config
-      WORKING_DIRECTORY "${FLTK_BINARY_DIR}"
-   )
-endif(UNIX)
-
-# prepare some variables for config.h
-
-if(IS_ABSOLUTE "${FLTK_DATADIR}")
-  set(PREFIX_DATA "${FLTK_DATADIR}/fltk")
-else(IS_ABSOLUTE "${FLTK_DATADIR}")
-  set(PREFIX_DATA "${CMAKE_INSTALL_PREFIX}/${FLTK_DATADIR}/fltk")
-endif(IS_ABSOLUTE "${FLTK_DATADIR}")
-
-if(IS_ABSOLUTE "${FLTK_DOCDIR}")
-  set(PREFIX_DOC "${FLTK_DOCDIR}/fltk")
-else(IS_ABSOLUTE "${FLTK_DOCDIR}")
-  set(PREFIX_DOC "${CMAKE_INSTALL_PREFIX}/${FLTK_DOCDIR}/fltk")
-endif(IS_ABSOLUTE "${FLTK_DOCDIR}")
-
-set(CONFIG_H_IN configh.cmake.in)
-set(CONFIG_H config.h)
-
-# generate config.h
-
-configure_file(
-   "${FLTK_SOURCE_DIR}/${CONFIG_H_IN}"
-   "${FLTK_BINARY_DIR}/${CONFIG_H}"
-   @ONLY
-)
-
-if(OPTION_CREATE_LINKS)
-   # Set PREFIX_INCLUDE to the proper value.
-   if(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
-      set(PREFIX_INCLUDE ${FLTK_INCLUDEDIR})
-   else()
-      set(PREFIX_INCLUDE "${CMAKE_INSTALL_PREFIX}/${FLTK_INCLUDEDIR}")
-   endif(IS_ABSOLUTE ${FLTK_INCLUDEDIR})
-   configure_file(
-      "${FLTK_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
-      "${FLTK_BINARY_DIR}/install-symlinks.cmake"
-      @ONLY
-   )
-endif(OPTION_CREATE_LINKS)
--- a/DoConfig/fltk/CMake/install-symlinks.cmake.in
+++ /dev/null
@@ -1,17 +1,0 @@
-
-# On unix create backward compatibility symlinks
-if(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/Fl)
-   EXECUTE_PROCESS(COMMAND ln -s FL Fl
-      WORKING_DIRECTORY $ENV{DESTDIR}@PREFIX_INCLUDE@
-      )
-endif(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/Fl)
-
-file(GLOB FLTK_HEADER_FILES $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/*.H)
-foreach(file ${FLTK_HEADER_FILES})
-   GET_FILENAME_COMPONENT(nameWE ${file} NAME_WE)
-   if(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/${nameWE}.h)
-      EXECUTE_PROCESS(COMMAND ln -s ${nameWE}.H ${nameWE}.h
-         WORKING_DIRECTORY $ENV{DESTDIR}@PREFIX_INCLUDE@/FL
-      )
-   endif(NOT EXISTS $ENV{DESTDIR}@PREFIX_INCLUDE@/FL/${nameWE}.h)
-endforeach(file)
--- a/DoConfig/fltk/CMake/install.cmake
+++ /dev/null
@@ -1,120 +1,0 @@
-#
-# "$Id$"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# installation
-#######################################################################
-
-# generate uninstall target
-configure_file(
-  "${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
-  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
-  @ONLY
-)
-add_custom_target(uninstall
-  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
-)
-
-install(DIRECTORY ${FLTK_SOURCE_DIR}/FL
-   DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
-   PATTERN ".svn" EXCLUDE
-)
-
-install(DIRECTORY ${FLTK_BINARY_DIR}/FL
-   DESTINATION ${FLTK_INCLUDEDIR} USE_SOURCE_PERMISSIONS
-)
-
-if(OPTION_CREATE_LINKS)
-   install(SCRIPT ${FLTK_BINARY_DIR}/install-symlinks.cmake)
-endif(OPTION_CREATE_LINKS)
-
-# generate FLTKConfig.cmake for installed directory use
-set(INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
-
-set(CONFIG_PATH ${CMAKE_INSTALL_PREFIX}/${FLTK_CONFIG_PATH})
-
-install(EXPORT FLTK-Targets
-   DESTINATION ${FLTK_CONFIG_PATH}
-   FILE FLTK-Targets.cmake
-)
-
-configure_file(
-   ${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
-   ${FLTK_BINARY_DIR}/etc/FLTKConfig.cmake
-   @ONLY
-)
-
-install(FILES
-    ${FLTK_BINARY_DIR}/etc/FLTKConfig.cmake
-    ${FLTK_SOURCE_DIR}/CMake/FLTK-Functions.cmake
-    DESTINATION ${FLTK_CONFIG_PATH}
-)
-
-configure_file(
-   ${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
-   ${FLTK_BINARY_DIR}/etc/UseFLTK.cmake
-   @ONLY
-)
-
-install(FILES ${FLTK_BINARY_DIR}/etc/UseFLTK.cmake
-   DESTINATION ${FLTK_CONFIG_PATH}
-)
-
-# generate fltk-config
-set(prefix ${CMAKE_INSTALL_PREFIX})
-set(exec_prefix "\${prefix}")
-set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
-set(BINARY_DIR)
-set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
-set(srcdir ".")
-
-set(LIBNAME "${libdir}/libfltk.a")
-
-configure_file(
-   "${FLTK_SOURCE_DIR}/fltk-config.in"
-   "${FLTK_BINARY_DIR}/bin/fltk-config"
-   @ONLY
-)
-if(UNIX)
-   execute_process(COMMAND chmod 755 fltk-config
-      WORKING_DIRECTORY "${FLTK_BINARY_DIR}/bin"
-   )
-endif(UNIX)
-
-install(PROGRAMS ${FLTK_BINARY_DIR}/bin/fltk-config
-   DESTINATION ${FLTK_BINDIR}
-)
-
-if(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
-   macro(INSTALL_MAN FILE LEVEL)
-   install(FILES
-      ${FLTK_SOURCE_DIR}/documentation/src/${FILE}.man
-      DESTINATION ${FLTK_MANDIR}/man${LEVEL}
-      RENAME ${FILE}.${LEVEL}
-   )
-   endmacro(INSTALL_MAN FILE LEVEL)
-
-   INSTALL_MAN(fluid 1)
-   INSTALL_MAN(fltk-config 1)
-   INSTALL_MAN(fltk 3)
-   INSTALL_MAN(blocks 6)
-   INSTALL_MAN(checkers 6)
-   INSTALL_MAN(sudoku 6)
-
-endif(UNIX OR MSYS OR (MINGW AND CMAKE_CROSSCOMPILING))
--- a/DoConfig/fltk/CMake/macros.cmake
+++ /dev/null
@@ -1,134 +1,0 @@
-#
-# "$Id$"
-#
-# macros.cmake
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# macros used by the build system
-#######################################################################
-macro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
-
-    if (${LIBTYPE} STREQUAL "SHARED")
-        set (LIBRARY_NAME ${LIBNAME}_SHARED)
-    else ()
-        set (LIBRARY_NAME ${LIBNAME})
-    endif (${LIBTYPE} STREQUAL "SHARED")
-
-    if (MSVC)
-	set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}d")
-    else ()
-	set (LIBRARY_NAME_DEBUG "${LIBRARY_NAME}")
-    endif (MSVC)
-
-    add_library(${LIBRARY_NAME} ${LIBTYPE} ${LIBFILES})
-
-    set_target_properties(${LIBRARY_NAME}
-        PROPERTIES
-        OUTPUT_NAME ${LIBRARY_NAME}
-        DEBUG_OUTPUT_NAME ${LIBRARY_NAME_DEBUG}
-        CLEAN_DIRECT_OUTPUT TRUE
-        COMPILE_DEFINITIONS "FL_LIBRARY"
-	)
-
-    if (${LIBTYPE} STREQUAL "SHARED")
-	set_target_properties(${LIBRARY_NAME}
-	    PROPERTIES
-	    VERSION ${FLTK_VERSION_FULL}
-	    SOVERSION ${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}
-	    PREFIX "lib"    # for MSVC static/shared coexistence
-	    )
-    endif (${LIBTYPE} STREQUAL "SHARED")
-
-    if (MSVC)
-	if (OPTION_LARGE_FILE)
-	    set_target_properties(${LIBRARYNAME}
-		PROPERTIES
-		LINK_FLAGS /LARGEADDRESSAWARE
-		)
-	endif (OPTION_LARGE_FILE)
-
-	if (${LIBTYPE} STREQUAL "SHARED")
-	    set_target_properties(${LIBRARY_NAME}
-		PROPERTIES
-		COMPILE_DEFINITIONS "FL_DLL"
-		)
-	endif (${LIBTYPE} STREQUAL "SHARED")
-    endif (MSVC)
-
-    install(TARGETS ${LIBRARY_NAME}
-        EXPORT FLTK-Targets
-        RUNTIME DESTINATION ${FLTK_BINDIR}
-        LIBRARY DESTINATION ${FLTK_LIBDIR}
-        ARCHIVE DESTINATION ${FLTK_LIBDIR}
-	)
-
-    list(APPEND FLTK_LIBRARIES "${LIBRARY_NAME}")
-    set (FLTK_LIBRARIES ${FLTK_LIBRARIES} PARENT_SCOPE)
-
-endmacro(FL_ADD_LIBRARY LIBNAME LIBTYPE LIBFILES)
-
-#######################################################################
-function(CREATE_EXAMPLE NAME SOURCES LIBRARIES)
-
-    set (srcs)			# source files
-    set (flsrcs)		# fluid source files
-    set (icns)			# mac icons
-
-    set (tname ${NAME})		# target name
-
-    # rename reserved target name "help" (CMake 2.8.12 and later)
-    if (${tname} MATCHES "^help$")
-        set (tname "test_help")
-    endif (${tname} MATCHES "^help$")
-
-    foreach(src ${SOURCES})
-        if ("${src}" MATCHES "\\.fl$")
-            list(APPEND flsrcs ${src})
-        elseif ("${src}" MATCHES "\\.icns$")
-            set(icns "${src}")
-        else ()
-            list(APPEND srcs ${src})
-        endif ("${src}" MATCHES "\\.fl$")
-    endforeach(src)
-
-    set (FLUID_SOURCES)
-    if (flsrcs)
-        FLTK_RUN_FLUID(FLUID_SOURCES "${flsrcs}")
-    endif (flsrcs)
-
-    if (APPLE AND NOT OPTION_APPLE_X11)
-        add_executable(${tname} MACOSX_BUNDLE ${srcs} ${FLUID_SOURCES} ${icns})
-        if (icns)
-            FLTK_SET_BUNDLE_ICON(${tname} ${icns})
-        endif (icns)
-    else ()
-        add_executable(${tname} WIN32 ${srcs} ${FLUID_SOURCES})
-    endif (APPLE AND NOT OPTION_APPLE_X11)
-
-    set_target_properties(${tname}
-        PROPERTIES OUTPUT_NAME ${NAME}
-    )
-
-    target_link_libraries(${tname} ${LIBRARIES})
-
-endfunction(CREATE_EXAMPLE NAME SOURCES LIBRARIES)
-
-#######################################################################
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/CMake/options.cmake
+++ /dev/null
@@ -1,374 +1,0 @@
-#
-# "$Id$"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# options
-#######################################################################
-set(OPTION_OPTIM ""
-   CACHE STRING
-   "custom optimization flags"
-   )
-add_definitions(${OPTION_OPTIM})
-
-#######################################################################
-set(OPTION_ARCHFLAGS ""
-   CACHE STRING
-   "custom architecture flags"
-   )
-add_definitions(${OPTION_ARCHFLAGS})
-
-#######################################################################
-set(OPTION_ABI_VERSION ""
-   CACHE STRING
-   "FLTK ABI Version FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)"
-   )
-set(FL_ABI_VERSION ${OPTION_ABI_VERSION})
-
-#######################################################################
-#######################################################################
-if(UNIX)
-   option(OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
-   list(APPEND FLTK_LDLIBS -lm)
-endif(UNIX)
-
-#######################################################################
-if(APPLE)
-   option(OPTION_APPLE_X11 "use X11" OFF)
-endif(APPLE)
-
-if((NOT APPLE OR OPTION_APPLE_X11) AND NOT WIN32)
-   include(FindX11)
-   if(X11_FOUND)
-      set(USE_X11 1)
-      list(APPEND FLTK_LDLIBS -lX11)
-      if (X11_Xext_FOUND)
-	  list(APPEND FLTK_LDLIBS -lXext)
-      endif(X11_Xext_FOUND)
-   endif(X11_FOUND)
-endif((NOT APPLE OR OPTION_APPLE_X11) AND NOT WIN32)
-
-#######################################################################
-option(OPTION_USE_POLL "use poll if available" OFF)
-mark_as_advanced(OPTION_USE_POLL)
-
-if(OPTION_USE_POLL)
-   CHECK_FUNCTION_EXISTS(poll USE_POLL)
-endif(OPTION_USE_POLL)
-
-#######################################################################
-option(OPTION_BUILD_SHARED_LIBS
-    "Build shared libraries(in addition to static libraries)"
-    OFF
-    )
-
-#######################################################################
-option(OPTION_BUILD_EXAMPLES "build example programs" ON)
-
-#######################################################################
-if(DOXYGEN_FOUND)
-    option(OPTION_BUILD_HTML_DOCUMENTATION "build html docs" OFF)
-    option(OPTION_INSTALL_HTML_DOCUMENTATION "install html docs" OFF)
-    if(LATEX_FOUND)
-	option(OPTION_BUILD_PDF_DOCUMENTATION "build pdf docs" OFF)
-	option(OPTION_INSTALL_PDF_DOCUMENTATION "install pdf docs" OFF)
-    endif(LATEX_FOUND)
-endif(DOXYGEN_FOUND)
-
-if(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
-    add_subdirectory(documentation)
-endif(OPTION_BUILD_HTML_DOCUMENTATION OR OPTION_BUILD_PDF_DOCUMENTATION)
-
-#######################################################################
-include(FindPkgConfig)
-
-option(OPTION_CAIRO "use lib Cairo" OFF)
-option(OPTION_CAIROEXT
-   "use FLTK code instrumentation for Cairo extended use" OFF
-   )
-
-if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
-   pkg_search_module(PKG_CAIRO cairo)
-endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND LIB_CAIRO)
-
-if (PKG_CAIRO_FOUND)
-   set (FLTK_HAVE_CAIRO 1)
-   add_subdirectory(cairo)
-   list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
-   include_directories(${PKG_CAIRO_INCLUDE_DIRS})
-   string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
-endif (PKG_CAIRO_FOUND)
-
-if (LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
-   set(FLTK_USE_CAIRO 1)
-   set(FLTK_CAIRO_FOUND TRUE)
-else()
-   set(FLTK_CAIRO_FOUND FALSE)
-endif (LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
-
-if ((OPTION_CAIRO OR OPTION_CAIROEXT) AND NOT PKG_CAIRO_FOUND)
-   message(STATUS "*** Cairo was requested but not found - please install Cairo ...")
-   message(STATUS "*** or disable options OPTION_CAIRO and OPTION_CAIRO_EXT")
-   message(FATAL_ERROR "*** Terminating: missing Cairo libs or headers")
-endif ((OPTION_CAIRO OR OPTION_CAIROEXT) AND NOT PKG_CAIRO_FOUND)
-
-#######################################################################
-set(HAVE_GL LIB_GL OR LIB_MesaGL)
-
-if(HAVE_GL)
-   option(OPTION_USE_GL "use OpenGL" ON)
-endif(HAVE_GL)
-
-if(OPTION_USE_GL)
-   if(OPTION_APPLE_X11)
-      set(OPENGL_FOUND TRUE)
-      get_filename_component(PATH_TO_XLIBS ${X11_X11_LIB} PATH)
-      set(OPENGL_LIBRARIES -L${PATH_TO_XLIBS} -lGLU -lGL)
-      find_file(HAVE_GL_GLU_H GL/glu.h PATHS /opt/X11/include)
-   else()
-      include(FindOpenGL)
-      if(APPLE)
-         set(HAVE_GL_GLU_H ${HAVE_OPENGL_GLU_H})
-      endif(APPLE)
-   endif(OPTION_APPLE_X11)
-endif(OPTION_USE_GL)
-
-if(OPENGL_FOUND)
-   set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
-   set(GLLIB "-lGLU -lGL")
-
-   # check if function glXGetProcAddressARB exists
-   set(TEMP_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-   set(CMAKE_REQUIRED_LIBRARIES GLU GL)
-   CHECK_FUNCTION_EXISTS(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB)
-   set(CMAKE_REQUIRED_LIBRARIES ${TEMP_REQUIRED_LIBRARIES})
-   unset(TEMP_REQUIRED_LIBRARIES)
-
-   set(FLTK_GL_FOUND TRUE)
-else()
-   set(FLTK_GL_FOUND FALSE)
-endif(OPENGL_FOUND)
-
-#######################################################################
-option(OPTION_USE_THREADS "use multi-threading" ON)
-
-if(OPTION_USE_THREADS)
-   include(FindThreads)
-endif(OPTION_USE_THREADS)
-
-if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
-   add_definitions("-D_THREAD_SAFE -D_REENTRANT")
-   set(USE_THREADS 1)
-   set(FLTK_THREADS_FOUND TRUE)
-else()
-   set(FLTK_THREADS_FOUND FALSE)
-endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
-
-if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
-   set(HAVE_PTHREAD 1)
-   if(NOT APPLE)
-     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
-   endif(NOT APPLE)
-   list(APPEND FLTK_LDLIBS -lpthread)
-   list(APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
-   set(FLTK_PTHREADS_FOUND TRUE)
-else()
-   set(HAVE_PTHREAD 0)
-   set(HAVE_PTHREAD_H 0)
-   set(FLTK_PTHREADS_FOUND FALSE)
-endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
-
-#######################################################################
-option(OPTION_LARGE_FILE "enable large file support" ON)
-
-if(OPTION_LARGE_FILE)
-   if(NOT MSVC)
-      add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
-      list(APPEND FLTK_CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
-   endif(NOT MSVC)
-endif(OPTION_LARGE_FILE)
-
-#######################################################################
-option(OPTION_USE_SYSTEM_ZLIB "use system zlib" ON)
-
-if(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
-   include(FindZLIB)
-endif(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
-
-if(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
-   set(FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
-   include_directories(${ZLIB_INCLUDE_DIRS})
-   set(FLTK_BUILTIN_ZLIB_FOUND FALSE)
-else()
-   add_subdirectory(zlib)
-   set(FLTK_ZLIB_LIBRARIES fltk_z)
-   set(ZLIB_INCLUDE_DIR ${FLTK_SOURCE_DIR}/zlib)
-   include_directories(${FLTK_SOURCE_DIR}/zlib)
-   set(FLTK_BUILTIN_ZLIB_FOUND TRUE)
-endif(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
-
-if(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
-   message(STATUS "\ncannot find system zlib library - using built-in\n")
-endif(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
-
-set(HAVE_LIBZ 1)
-
-#######################################################################
-option(OPTION_USE_SYSTEM_LIBJPEG "use system libjpeg" ON)
-
-if(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
-   include(FindJPEG)
-endif(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
-
-if(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
-   set(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
-   include_directories(${JPEG_INCLUDE_DIR})
-   set(FLTK_BUILTIN_JPEG_FOUND FALSE)
-else()
-   add_subdirectory(jpeg)
-   set(FLTK_JPEG_LIBRARIES fltk_jpeg)
-   include_directories(${FLTK_SOURCE_DIR}/jpeg)
-   set(FLTK_BUILTIN_JPEG_FOUND TRUE)
-endif(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
-
-if(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
-   message(STATUS "\ncannot find system jpeg library - using built-in\n")
-endif(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
-
-set(HAVE_LIBJPEG 1)
-
-#######################################################################
-option(OPTION_USE_SYSTEM_LIBPNG "use system libpng" ON)
-
-if(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
-   include(FindPNG)
-endif(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
-
-if(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
-   set(FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
-   include_directories(${PNG_INCLUDE_DIR})
-   add_definitions(${PNG_DEFINITIONS})
-   set(FLTK_BUILTIN_PNG_FOUND FALSE)
-else()
-   add_subdirectory(png)
-   set(FLTK_PNG_LIBRARIES fltk_png)
-   set(HAVE_PNG_H 1)
-   set(HAVE_PNG_GET_VALID 1)
-   set(HAVE_PNG_SET_TRNS_TO_ALPHA 1)
-   include_directories(${FLTK_SOURCE_DIR}/png)
-   set(FLTK_BUILTIN_PNG_FOUND TRUE)
-endif(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
-
-if(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
-   message(STATUS "\ncannot find system png library - using built-in\n")
-endif(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
-
-set(HAVE_LIBPNG 1)
-
-#######################################################################
-if(X11_Xinerama_FOUND)
-   option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
-endif(X11_Xinerama_FOUND)
-
-if(OPTION_USE_XINERAMA)
-   set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
-   include_directories(${X11_Xinerama_INCLUDE_PATH})
-   list(APPEND FLTK_LDLIBS -lXinerama)
-   set(FLTK_XINERAMA_FOUND TRUE)
-else()
-   set(FLTK_XINERAMA_FOUND FALSE)
-endif(OPTION_USE_XINERAMA)
-
-#######################################################################
-if(X11_Xfixes_FOUND)
-   option(OPTION_USE_XFIXES "use lib Xfixes" ON)
-endif(X11_Xfixes_FOUND)
-
-if(OPTION_USE_XFIXES)
-   set(HAVE_XFIXES ${X11_Xfixes_FOUND})
-   include_directories(${X11_Xfixes_INCLUDE_PATH})
-   list(APPEND FLTK_LDLIBS -lXfixes)
-   set(FLTK_XFIXES_FOUND TRUE)
-else()
-   set(FLTK_XFIXES_FOUND FALSE)
-endif(OPTION_USE_XFIXES)
-
-#######################################################################
-if(X11_Xcursor_FOUND)
-   option(OPTION_USE_XCURSOR "use lib Xcursor" ON)
-endif(X11_Xcursor_FOUND)
-
-if(OPTION_USE_XCURSOR)
-   set(HAVE_XCURSOR ${X11_Xcursor_FOUND})
-   include_directories(${X11_Xcursor_INCLUDE_PATH})
-   list(APPEND FLTK_LDLIBS -lXcursor)
-   set(FLTK_XCURSOR_FOUND TRUE)
-else()
-   set(FLTK_XCURSOR_FOUND FALSE)
-endif(OPTION_USE_XCURSOR)
-
-#######################################################################
-if(X11_Xft_FOUND)
-   option(OPTION_USE_XFT "use lib Xft" ON)
-endif(X11_Xft_FOUND)
-
-if(OPTION_USE_XFT)
-   set(USE_XFT X11_Xft_FOUND)
-   list(APPEND FLTK_LDLIBS -lXft)
-   set(FLTK_XFT_FOUND TRUE)
-else()
-   set(FLTK_XFT_FOUND FALSE)
-endif(OPTION_USE_XFT)
-
-#######################################################################
-if(X11_Xrender_FOUND)
-   option(OPTION_USE_XRENDER "use lib Xrender" ON)
-endif(X11_Xrender_FOUND)
-
-if(OPTION_USE_XRENDER)
-   set(HAVE_XRENDER ${X11_Xrender_FOUND})
-   if(HAVE_XRENDER)
-      include_directories(${X11_Xrender_INCLUDE_PATH})
-      list(APPEND FLTK_LDLIBS -lXrender)
-      set(FLTK_XRENDER_FOUND TRUE)
-   else(HAVE_XRENDER)
-      set(FLTK_XRENDER_FOUND FALSE)
-   endif(HAVE_XRENDER)
-else(OPTION_USE_XRENDER)
-   set(FLTK_XRENDER_FOUND FALSE)
-endif(OPTION_USE_XRENDER)
-
-#######################################################################
-if(X11_FOUND)
-   option(OPTION_USE_XDBE "use lib Xdbe" ON)
-endif(X11_FOUND)
-
-if(OPTION_USE_XDBE AND HAVE_XDBE_H)
-   set(HAVE_XDBE 1)
-   set(FLTK_XDBE_FOUND TRUE)
-else()
-   set(FLTK_XDBE_FOUND FALSE)
-endif(OPTION_USE_XDBE AND HAVE_XDBE_H)
-
-#######################################################################
-# prior to CMake 3.0 this feature was buggy
-if(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
-    option(CMAKE_SUPPRESS_REGENERATION
-	   "suppress rules to re-run CMake on rebuild" OFF)
-    mark_as_advanced(CMAKE_SUPPRESS_REGENERATION)
-endif(NOT CMAKE_VERSION VERSION_LESS 3.0.0)
--- a/DoConfig/fltk/CMake/posixScandir.cxx
+++ /dev/null
@@ -1,10 +1,0 @@
-
-#include <dirent.h>
-
-int func (const char *d, dirent ***list, void *sort) {
-  int n = scandir(d, list, 0, (int(*)(const dirent **, const dirent **))sort);
-}
-
-int main() {
-  return 0;
-}
--- a/DoConfig/fltk/CMake/resources.cmake
+++ /dev/null
@@ -1,195 +1,0 @@
-#
-# "$Id$"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# check for headers, libraries and functions
-#######################################################################
-# headers
-find_file(HAVE_ALSA_ASOUNDLIB_H alsa/asoundlib.h)
-find_file(HAVE_DLFCN_H dlfcn.h)
-find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2 freetype2/freetype)
-find_file(HAVE_GL_GL_H GL/gl.h)
-find_file(HAVE_GL_GLU_H GL/glu.h)
-find_file(HAVE_LIBPNG_PNG_H libpng/png.h)
-find_file(HAVE_LOCALE_H locale.h)
-find_file(HAVE_OPENGL_GLU_H OpenGL/glu.h)
-find_file(HAVE_PNG_H png.h)
-find_file(HAVE_PTHREAD_H pthread.h)
-find_file(HAVE_STDIO_H stdio.h)
-find_file(HAVE_STRINGS_H strings.h)
-find_file(HAVE_SYS_SELECT_H sys/select.h)
-find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
-find_file(HAVE_X11_XREGION_H X11/Xregion.h)
-find_path(HAVE_XDBE_H Xdbe.h PATH_SUFFIXES X11/extensions extensions)
-
-if (MSVC)
-  message(STATUS "Note: The following three headers should all be found!")
-  message(STATUS "HAVE_GL_GL_H = '${HAVE_GL_GL_H}'")
-  message(STATUS "HAVE_GL_GLU_H = '${HAVE_GL_GLU_H}'")
-  message(STATUS "HAVE_LOCALE_H = '${HAVE_LOCALE_H}'")
-  message(STATUS "If one of these headers was not found, run cmake-gui ...")
-  message(STATUS "... again from a Visual Studio developer command prompt!")
-endif (MSVC)
-
-# Simulate the behavior of autoconf macro AC_HEADER_DIRENT, see:
-# https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Headers.html
-# "Check for the following header files. For the first one that is found
-#  and defines ‘DIR’, define the listed C preprocessor macro ..."
-#
-# Note: we don't check if it really defines 'DIR', but we stop processing
-# once we found the first suitable header file.
-
-find_file(HAVE_DIRENT_H dirent.h)
-if(NOT HAVE_DIRENT_H)
-  find_file(HAVE_SYS_NDIR_H sys/ndir.h)
-  if(NOT HAVE_SYS_NDIR_H)
-    find_file(HAVE_SYS_DIR_H sys/dir.h)
-    if(NOT HAVE_SYS_DIR_H)
-      find_file(HAVE_NDIR_H ndir.h)
-    endif(NOT HAVE_SYS_DIR_H)
-  endif(NOT HAVE_SYS_NDIR_H)
-endif(NOT HAVE_DIRENT_H)
-
-mark_as_advanced(HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
-mark_as_advanced(HAVE_FREETYPE_H HAVE_GL_GL_H HAVE_GL_GLU_H)
-mark_as_advanced(HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
-mark_as_advanced(HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
-mark_as_advanced(HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
-mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
-mark_as_advanced(HAVE_SYS_STDTYPES_H HAVE_XDBE_H)
-mark_as_advanced(HAVE_X11_XREGION_H)
-
-# where to find freetype headers
-find_path(FREETYPE_PATH freetype.h PATH_SUFFIXES freetype2)
-find_path(FREETYPE_PATH freetype/freetype.h PATH_SUFFIXES freetype2)
-if(FREETYPE_PATH)
-   include_directories(${FREETYPE_PATH})
-endif(FREETYPE_PATH)
-mark_as_advanced(FREETYPE_PATH)
-
-#######################################################################
-# libraries
-find_library(LIB_CAIRO cairo)
-find_library(LIB_dl dl)
-find_library(LIB_fontconfig fontconfig)
-find_library(LIB_freetype freetype)
-find_library(LIB_GL GL)
-find_library(LIB_MesaGL MesaGL)
-find_library(LIB_jpeg jpeg)
-find_library(LIB_png png)
-find_library(LIB_zlib z)
-
-mark_as_advanced(LIB_CAIRO LIB_dl LIB_fontconfig LIB_freetype)
-mark_as_advanced(LIB_GL LIB_MesaGL)
-mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
-
-#######################################################################
-# functions
-include(CheckFunctionExists)
-
-# save CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
-if(DEFINED CMAKE_REQUIRED_LIBRARIES)
-  set(SAVED_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
-else(DEFINED CMAKE_REQUIRED_LIBRARIES)
-  unset(SAVED_REQUIRED_LIBRARIES)
-endif(DEFINED CMAKE_REQUIRED_LIBRARIES)
-set(CMAKE_REQUIRED_LIBRARIES)
-
-if(HAVE_DLFCN_H)
-   set(HAVE_DLFCN_H 1)
-endif(HAVE_DLFCN_H)
-
-set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
-CHECK_FUNCTION_EXISTS(dlsym			HAVE_DLSYM)
-set(CMAKE_REQUIRED_LIBRARIES)
-
-CHECK_FUNCTION_EXISTS(localeconv		HAVE_LOCALECONV)
-
-if(LIB_png)
-  set(CMAKE_REQUIRED_LIBRARIES ${LIB_png})
-  CHECK_FUNCTION_EXISTS(png_get_valid		HAVE_PNG_GET_VALID)
-  CHECK_FUNCTION_EXISTS(png_set_tRNS_to_alpha	HAVE_PNG_SET_TRNS_TO_ALPHA)
-  set(CMAKE_REQUIRED_LIBRARIES)
-endif(LIB_png)
-
-CHECK_FUNCTION_EXISTS(scandir                HAVE_SCANDIR)
-CHECK_FUNCTION_EXISTS(snprintf               HAVE_SNPRINTF)
-
-# not really true but we convert strcasecmp calls to _stricmp calls in flstring.h
-if(MSVC)
-   set(HAVE_STRCASECMP 1)
-endif(MSVC)
-
-CHECK_FUNCTION_EXISTS(strcasecmp             HAVE_STRCASECMP)
-
-CHECK_FUNCTION_EXISTS(strlcat                HAVE_STRLCAT)
-CHECK_FUNCTION_EXISTS(strlcpy                HAVE_STRLCPY)
-CHECK_FUNCTION_EXISTS(vsnprintf              HAVE_VSNPRINTF)
-
-if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
-   set(MSG "POSIX compatible scandir")
-   message(STATUS "Looking for ${MSG}")
-   try_compile(V
-      ${FLTK_BINARY_DIR}
-      ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
-      )
-   if(V)
-      message(STATUS "${MSG} - found")
-      set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
-   else()
-      message(STATUS "${MSG} - not found")
-      set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
-   endif(V)
-endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
-mark_as_advanced(HAVE_SCANDIR_POSIX)
-
-# restore CMAKE_REQUIRED_LIBRARIES (is this really necessary ?)
-if(DEFINED SAVED_REQUIRED_LIBRARIES)
-  set(CMAKE_REQUIRED_LIBRARIES ${SAVED_REQUIRED_LIBRARIES})
-  unset(SAVED_REQUIRED_LIBRARIES)
-else(DEFINED SAVED_REQUIRED_LIBRARIES)
-  unset(CMAKE_REQUIRED_LIBRARIES)
-endif(DEFINED SAVED_REQUIRED_LIBRARIES)
-
-#######################################################################
-# packages
-
-# Doxygen: necessary for HTML and PDF docs
-find_package(Doxygen)
-
-# LaTex: necessary for PDF docs (note: FindLATEX doesn't return LATEX_FOUND)
-
-# Note: we only check existence of `latex' (LATEX_COMPILER), hence
-# building the pdf docs may still fail because of other missing tools.
-
-set (LATEX_FOUND)
-if (DOXYGEN_FOUND)
-  find_package(LATEX)
-  if (LATEX_COMPILER AND NOT LATEX_FOUND)
-    set(LATEX_FOUND YES)
-  endif (LATEX_COMPILER AND NOT LATEX_FOUND)
-endif (DOXYGEN_FOUND)
-
-# message("Doxygen  found : ${DOXYGEN_FOUND}")
-# message("LaTex    found : ${LATEX_FOUND}")
-# message("LaTex Compiler : ${LATEX_COMPILER}")
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/CMake/setup.cmake
+++ /dev/null
@@ -1,156 +1,0 @@
-#
-# "$Id$"
-#
-# CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2017 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-# basic setup
-#######################################################################
-# The FLTK version
-set(FLTK_VERSION_MAJOR "1")
-set(FLTK_VERSION_MINOR "3")
-set(FLTK_VERSION_PATCH "5")
-set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
-set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
-
-set(EXECUTABLE_OUTPUT_PATH ${FLTK_BINARY_DIR}/bin)
-set(LIBRARY_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
-set(ARCHIVE_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
-
-# Search for modules in the FLTK source dir first
-set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")
-
-set(FLTK_INCLUDE_DIRS ${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR})
-include_directories(${FLTK_INCLUDE_DIRS})
-
-# Setup install locations
-if(CMAKE_VERSION VERSION_GREATER 2.8.4)
-    # Use GNUInstallDirs if available.
-    include(GNUInstallDirs)
-else()
-    # Else set reasonable defaults.
-    set(CMAKE_INSTALL_BINDIR bin)
-    set(CMAKE_INSTALL_LIBDIR lib)
-    set(CMAKE_INSTALL_INCLUDEDIR include)
-    set(CMAKE_INSTALL_DATADIR share)
-    set(CMAKE_INSTALL_MANDIR share/man)
-endif(CMAKE_VERSION VERSION_GREATER 2.8.4)
-
-set(FLTK_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH
-    "Binary install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-set(FLTK_LIBDIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH
-    "Library install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-set(FLTK_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH
-    "Public header install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-set(FLTK_DATADIR ${CMAKE_INSTALL_DATADIR} CACHE PATH
-    "Non-arch data install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-set(FLTK_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH
-    "Manual install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-set(FLTK_DOCDIR ${CMAKE_INSTALL_DATADIR}/doc CACHE PATH
-    "Non-arch doc install path relative to CMAKE_INSTALL_PREFIX unless set to an absolute path.")
-
-
-#######################################################################
-# platform dependent information
-#######################################################################
-
-# The following part is probably wrong but does no harm.
-# This will be removed in FLTK 1.4.0. AlbrechtS, Dec 28, 2017.
-# fix no WIN32 defined issue
-if(NOT WIN32)
-    if(_WIN32)
-        set(WIN32 _WIN32)
-    elseif(__WIN32__)
-        set(WIN32 __WIN32__)
-    endif(_WIN32)
-endif(NOT WIN32)
-
-# set where config files go
-if(WIN32 AND NOT CYGWIN)
-   set(FLTK_CONFIG_PATH CMake)
-elseif(APPLE AND NOT OPTION_APPLE_X11)
-   set(FLTK_CONFIG_PATH FLTK/.framework/Resources/CMake)
-else()
-   set(FLTK_CONFIG_PATH ${FLTK_DATADIR}/fltk)
-endif(WIN32 AND NOT CYGWIN)
-
-include(TestBigEndian)
-TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
-
-if(APPLE)
-   set(HAVE_STRCASECMP 1)
-   set(HAVE_DIRENT_H 1)
-   set(HAVE_SNPRINTF 1)
-   set(HAVE_VSNPRINTF 1)
-   set(HAVE_SCANDIR 1)
-   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated")
-   if(OPTION_APPLE_X11)
-     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U__APPLE__ -mmacosx-version-min=10.3")
-     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U__APPLE__")
-     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/opt/X11/lib -lfontconfig")
-   else()
-     set(__APPLE_QUARTZ__ 1)
-     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
-     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -framework Cocoa")
-   endif(OPTION_APPLE_X11)
-endif(APPLE)
-
-if(WIN32)
-    add_definitions(-DWIN32)
-    if(MSVC)
-        add_definitions(-DWIN32_LEAN_AND_MEAN)
-        add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-######## from ide/VisualC2010/config.h
-        set(BORDER_WIDTH 2)
-########
-    endif(MSVC)
-    if(CMAKE_C_COMPILER_ID STREQUAL GNU)
-        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
-    endif(CMAKE_C_COMPILER_ID STREQUAL GNU)
-    if(MINGW AND EXISTS /mingw)
-        list(APPEND CMAKE_PREFIX_PATH /mingw)
-    endif(MINGW AND EXISTS /mingw)
-endif(WIN32)
-
-#######################################################################
-# size of ints
-include(CheckTypeSize)
-
-CHECK_TYPE_SIZE(short SIZEOF_SHORT)
-CHECK_TYPE_SIZE(int   SIZEOF_INT)
-CHECK_TYPE_SIZE(long  SIZEOF_LONG)
-CHECK_TYPE_SIZE("long long"  HAVE_LONG_LONG)
-
-if(${SIZEOF_SHORT} MATCHES "^2$")
-   set(U16 "unsigned short")
-endif(${SIZEOF_SHORT} MATCHES "^2$")
-
-if(${SIZEOF_INT} MATCHES "^4$")
-   set(U32 "unsigned")
-else()
-   if(${SIZEOF_LONG} MATCHES "^4$")
-      set(U32 "unsigned long")
-   endif(${SIZEOF_LONG} MATCHES "^4$")
-endif(${SIZEOF_INT} MATCHES "^4$")
-
-if(${SIZEOF_INT} MATCHES "^8$")
-   set(U64 "unsigned")
-else()
-   if(${SIZEOF_LONG} MATCHES "^8$")
-      set(U64 "unsigned long")
-   endif(${SIZEOF_LONG} MATCHES "^8$")
-endif(${SIZEOF_INT} MATCHES "^8$")
--- a/DoConfig/fltk/CMake/variables.cmake
+++ /dev/null
@@ -1,81 +1,0 @@
-#
-# "$Id$"
-#
-# This file sets variables for common use in export.cmake and install.cmake
-# Written by Michael Surette
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-#######################################################################
-set(FL_MAJOR_VERSION ${FLTK_VERSION_MAJOR})
-set(FL_MINOR_VERSION ${FLTK_VERSION_MINOR})
-set(FL_PATCH_VERSION ${FLTK_VERSION_PATCH})
-
-#######################################################################
-# add several libraries (STR #3011)
-# FIXME: libraries may need reordering, and this version does not yet
-# correctly support static linking and local zlib, png, and jpeg libs.
-
-if(LIB_fontconfig)
-   list(APPEND FLTK_LDLIBS -lfontconfig)
-endif(LIB_fontconfig)
-
-if(HAVE_DLSYM)
-   list(APPEND FLTK_LDLIBS -ldl)
-endif(HAVE_DLSYM)
-
-if(LIB_png)
-   list(APPEND IMAGELIBS -lpng)
-endif(LIB_png)
-
-if(LIB_zlib)
-   list(APPEND IMAGELIBS -lz)
-endif(LIB_zlib)
-
-if(LIB_jpeg)
-   list(APPEND IMAGELIBS -ljpeg)
-endif(LIB_jpeg)
-
-string(REPLACE ";" " " IMAGELIBS "${IMAGELIBS}")
-set(STATICIMAGELIBS "${IMAGELIBS}")
-
-#######################################################################
-set(CC ${CMAKE_C_COMPILER})
-set(CXX ${CMAKE_CXX_COMPILER})
-
-set(ARCHFLAGS ${OPTION_ARCHFLAGS})
-
-string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_UPPER)
-if(${BUILD_UPPER})
-    set(CFLAGS "${CMAKE_C_FLAGS_${BUILD_UPPER}} ${CFLAGS}")
-endif(${BUILD_UPPER})
-
-set(CFLAGS "${OPTION_OPTIM} ${CMAKE_C_FLAGS} ${CFLAGS}")
-foreach(arg ${FLTK_CFLAGS})
-    set(CFLAGS "${CFLAGS} ${arg}")
-endforeach(arg ${FLTK_CFLAGS})
-
-set(CXXFLAGS ${CFLAGS})
-
-foreach(arg ${FLTK_LDLIBS})
-  set(LINK_LIBS "${LINK_LIBS} ${arg}")
-endforeach(arg ${FLTK_LDLIBS})
-
-set(LIBS ${LINK_LIBS})
-
-if (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")
-    set(SHAREDSUFFIX "_s")
-else ()
-    set(SHAREDSUFFIX "")
-endif (${CMAKE_SYSTEM_NAME} STREQUAL "AIX")
--- a/DoConfig/fltk/CMakeLists.txt
+++ /dev/null
@@ -1,77 +1,0 @@
-#
-# "$Id$"
-#
-# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
-# Written by Michael Surette
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-# Prevent annoying warning under Cygwin; this must be before project().
-# Remove when CMake >= 2.8.4 is required
-set(CMAKE_LEGACY_CYGWIN_WIN32 0)
-
-project(FLTK)
-cmake_minimum_required(VERSION 2.6.3)
-
-#######################################################################
-# define some functions and macros
-#######################################################################
-include(CMake/FLTK-Functions.cmake)
-include(CMake/macros.cmake)
-
-#######################################################################
-# basic setup
-#######################################################################
-include(CMake/setup.cmake)
-
-#######################################################################
-# check for headers, libraries and functions
-#######################################################################
-include(CMake/resources.cmake)
-
-#######################################################################
-# options
-#######################################################################
-include(CMake/options.cmake)
-
-#######################################################################
-# variables shared by export and install
-# export.cmake creates configuration files for direct use in a built but uninstalled FLTK
-# install.cmake creates these files for an installed FLTK
-# these two would only differ in paths, so common variables are set here
-#######################################################################
-include(CMake/variables.cmake)
-
-#######################################################################
-# final config and export
-#######################################################################
-include(CMake/export.cmake)
-
-configure_file(
- ${FLTK_SOURCE_DIR}/abi-version.cmake.in
- ${FLTK_BINARY_DIR}/FL/abi-version.h
- @ONLY
- )
-
-#######################################################################
-# build examples - these have to be built after fluid is built/imported
-#######################################################################
-if(OPTION_BUILD_EXAMPLES)
-   add_subdirectory(test)
-endif(OPTION_BUILD_EXAMPLES)
-
-#######################################################################
-# installation
-#######################################################################
-#include(CMake/install.cmake)
--- a/DoConfig/fltk/COPYING
+++ /dev/null
@@ -1,530 +1,0 @@
-                             FLTK License
-                           December 11, 2001
-
-The FLTK library and included programs are provided under the terms
-of the GNU Library General Public License (LGPL) with the following
-exceptions:
-
-    1. Modifications to the FLTK configure script, config
-       header file, and makefiles by themselves to support
-       a specific platform do not constitute a modified or
-       derivative work.
-
-      The authors do request that such modifications be
-      contributed to the FLTK project - send all contributions
-      through the "Software Trouble Report" on the following page:
- 
-           http://www.fltk.org/str.php
-
-    2. Widgets that are subclassed from FLTK widgets do not
-       constitute a derivative work.
-
-    3. Static linking of applications and widgets to the
-       FLTK library does not constitute a derivative work
-       and does not require the author to provide source
-       code for the application or widget, use the shared
-       FLTK libraries, or link their applications or
-       widgets against a user-supplied version of FLTK.
-
-       If you link the application or widget to a modified
-       version of FLTK, then the changes to FLTK must be
-       provided under the terms of the LGPL in sections
-       1, 2, and 4.
-
-    4. You do not have to provide a copy of the FLTK license
-       with programs that are linked to the FLTK library, nor
-       do you have to identify the FLTK license in your
-       program or documentation as required by section 6
-       of the LGPL.
-
-       However, programs must still identify their use of FLTK.
-       The following example statement can be included in user
-       documentation to satisfy this requirement:
-
-           [program/widget] is based in part on the work of
-           the FLTK project (http://www.fltk.org).
-
------------------------------------------------------------------------
-
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-			 Version 2, June 1991
-
-	  Copyright (C) 1991 Free Software Foundation, Inc.
-       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-     Everyone is permitted to copy and distribute verbatim copies
-      of this license document, but changing it is not allowed.
-
-    [This is the first released version of the library GPL.  It is
-   numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-			       Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-  Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs.  This
-license, the GNU Library General Public License, applies to certain
-designated libraries.  This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
-  The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it.  Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program.  However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
-  Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-  However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.)  The hope is that this
-will lead to faster development of free libraries.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-  Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-		  GNU LIBRARY GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License").  Each licensee is
-addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    c) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    d) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-     Appendix: How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library 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
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public
-    License along with this library; if not, write to the Free
-    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
--- a/DoConfig/fltk/CREDITS
+++ /dev/null
@@ -1,71 +1,0 @@
-CREDITS - Fast Light Tool Kit (FLTK) Version 1.3.5
---------------------------------------------------
-
-    This file lists the people responsible for the toolkit you are
-    now using.  If you've been looking for your name in lights
-    but we've forgotten you here, please use the report on the
-    following page, and we'll update this file accordingly:
-
-        http://www.fltk.org/str.php
-
-
-CORE DEVELOPERS
-
-    The following people do the day-to-day development of FLTK:
-
-	Greg Ercolano
-	Manolo Gouy
-	Lauri Kasanen
-	Ian MacArthur
-	Pierre Ossman
-	Albrecht Schlosser
-
-    These people have previously been active developers of FLTK:
-
-	Fabien Costantini (fabien67@users.sf.net)
-	Craig P. Earls
-	Curtis Edwards (trilec@users.sourceforge.net)
-	Gustavo Hime (hime@users.sourceforge.net)
-	Talbot Hughes
-	Robert Kesterson (robertk@users.sourceforge.net)
-	Matthias Melcher (mm@robowerk.com)
-	James Dean Palmer (jamespalmer@users.sourceforge.net)
-	Vincent Penne (vincentp@users.sourceforge.net)
-	Bill Spitzak (spitzak@users.sourceforge.net)
-	Michael Sweet (easysw@users.sourceforge.net)
-	Carl Thompson (clip@users.sourceforge.net)
-	Nafees Bin Zafar (nafees@users.sourceforge.net)
-
-
-OTHER CONTRIBUTORS
-
-    The following people have contributed fixes or enhancements
-    for FLTK:
-
-        Laszlo Z. Antal (LZA)
-	Teun Burgers
-	Paul Chambers
-	Stephen Davies
-	Yuri D'Elia
-	Domingo Alvarez Duarte
-	Yuri Fedorchenko
-	George Garvey
-	Duncan Gibson
-	Mikael Hultgren
-	Stuart Levy
-	Jean-Marc Lienher (OksiD)
-	Howard Lightstone
-	Mike Lindner
-	Alexander Mai
-	Alexander Rabi
-	James Roth
-	Ivan Nieto (Mr.Satan)
-	Jamie Snape
-	Andrea Suatoni
-	Michael Surette
-	Paul Sydney
-	Aaron Ucko
-	Emanuele Vicentini
-	Josef Vitu
-	Jim Wilson
-	Ken Yarnall
--- a/DoConfig/fltk/DartConfig.cmake
+++ /dev/null
@@ -1,38 +1,0 @@
-# Dashboard is opened for submissions for a 24 hour period starting at
-# the specified NIGHLY_START_TIME. Time is specified in 24 hour format.
-SET (NIGHTLY_START_TIME "21:00:00 EDT")
-
-# Dart server to submit results (used by client)
-SET (DROP_METHOD "http")
-SET (DROP_SITE "public.kitware.com")
-SET (DROP_LOCATION "/cgi-bin/HTTPUploadDartFile.cgi")
-SET (TRIGGER_SITE "http://${DROP_SITE}/cgi-bin/Submit-Fltk-TestingResults.pl")
-
-# Project Home Page
-SET (PROJECT_URL "http://www.fltk.org")
-
-# Dart server configuration 
-SET (ROLLUP_URL "http://${DROP_SITE}/cgi-bin/fltk-rollup-dashboard.sh")
-SET (CVS_WEB_URL "http://cvs.sourceforge.net/viewcvs.py/fltk/fltk/")
-SET (CVS_WEB_CVSROOT "fltk")
-
-SET (USE_GNATS "On")
-SET (GNATS_WEB_URL "http://www.fltk.org/str.php")
-
-# Continuous email delivery variables
-SET (CONTINUOUS_FROM "fltk-dashboard@public.kitware.com")
-SET (SMTP_MAILHOST "public.kitware.com")
-SET (CONTINUOUS_MONITOR_LIST "fltk-dashboard@public.kitware.com")
-SET (CONTINUOUS_BASE_URL "http://public.kitware.com/Fltk/Testing")
-
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_FAILURES ON)
-SET (DELIVER_BROKEN_BUILD_EMAIL "Continuous Nightly")
-SET (EMAIL_FROM "fltk-dashboard@public.kitware.com")
-SET (DARTBOARD_BASE_URL "http://public.kitware.com/Fltk/Testing")
-
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_CONFIGURE_FAILURES 1)
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_BUILD_ERRORS 1)
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_BUILD_WARNINGS 1)
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_NOT_RUNS 1)
-SET (DELIVER_BROKEN_BUILD_EMAIL_WITH_TEST_FAILURES 1)
-
--- a/DoConfig/fltk/FL/Enumerations.H
+++ /dev/null
@@ -1,1127 +1,0 @@
-//
-// "$Id$"
-//
-// Enumerations for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-    This file contains type definitions and general enumerations.
- */
-
-#ifndef Fl_Enumerations_H
-#define Fl_Enumerations_H
-
-/*
- ******************************************************************************
- * Notes on FL_ABI_VERSION and deprecated (obsolete) FLTK_ABI_VERSION:
- *
- * (1)	FLTK_ABI_VERSION is deprecated, but still defined below.
- *	Do NOT define FLTK_ABI_VERSION here - it would be overwritten later.
- *
- * (2)	FL_ABI_VERSION is now (as of FLTK 1.3.4) defined by configure
- *	or CMake. Do NOT define it here. Its definition will be included
- *	below by "#include <FL/abi-version.h>".
- *
- * (3)	If you use the provided IDE files (Windows VC++ or Xcode) you should
- *	edit the definition in the provided file abi-version.ide. The correct
- *	file is `/path/to/fltk/abi-version.ide' .
- *
- ******************************************************************************
- * For more informations on FL_ABI_VERSION see README.abi-version.txt.
- ******************************************************************************
- */
-
-#include <FL/abi-version.h>
-
-#  include "Fl_Export.H"
-#  include "fl_types.h"
-
-/** \name Version Numbers
-
-    FLTK defines some constants to help the programmer to
-    find out, for which FLTK version a program is compiled.
-    
-    The following constants are defined:
- */
-/*@{*/
-
-/**
-   The major release version of this FLTK library.
-   \sa FL_VERSION
- */
-#define FL_MAJOR_VERSION	1
-
-/**
-   The minor release version for this library.
-
-   FLTK remains mostly source-code compatible between minor version changes.
- */
-#define FL_MINOR_VERSION	3
-
-/**
-   The patch version for this library.
-
-   FLTK remains binary compatible between patches.
- */
-#define FL_PATCH_VERSION	5
-
-/**
-    The FLTK version number as a \em double.
-
-    FL_VERSION is a \em double that describes the major, minor, and patch
-    version numbers.
-
-    Version 1.2.3 is actually stored as 1.0203 to allow for more than 9
-    minor and patch releases.
-
-    \deprecated This \p double version number is retained for compatibility
-    with existing program code. New code should use \em int FL_API_VERSION
-    instead. FL_VERSION is deprecated because comparisons of floating point
-    values may fail due to rounding errors. However, there are currently no
-    plans to remove this deprecated constant.
-
-    FL_VERSION is equivalent to <em>(double)FL_API_VERSION / 10000</em>.
-
-    \see Fl::version() (deprecated as well)
-    \see FL_API_VERSION
-    \see Fl::api_version()
- */
-#define FL_VERSION	( (double)FL_MAJOR_VERSION + \
-			  (double)FL_MINOR_VERSION * 0.01 + \
-			  (double)FL_PATCH_VERSION * 0.0001 )
-
-/**
-    The FLTK API version number as an \em int.
-
-    FL_API_VERSION is an \em int that describes the major, minor, and patch
-    version numbers.
-
-    Version 1.2.3 is actually stored as 10203 to allow for more than 9
-    minor and patch releases.
-
-    The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
-    give the integral values for the major, minor, and patch releases
-    respectively.
-
-    \note FL_API_VERSION is intended to replace the deprecated
-    \em double FL_VERSION.
-
-    \see Fl::api_version()
- */
-#define FL_API_VERSION (FL_MAJOR_VERSION*10000 + FL_MINOR_VERSION*100 + FL_PATCH_VERSION)
-
-/**
-    The FLTK ABI (Application Binary Interface) version number as an \em int.
-
-    FL_ABI_VERSION is an \em int that describes the major, minor, and patch
-    ABI version numbers in the same format as FL_API_VERSION.
-
-    The ABI version number \p FL_ABI_VERSION is usually the same as the
-    API version \p FL_API_VERSION with the last two digits set to '00'.
-
-    FLTK retains the ABI (Application Binary Interface) during patch
-    releases of the same major and minor versions. Examples:
-
-    \verbatim
-      FLTK Version  FL_API_VERSION  FL_ABI_VERSION  FL_VERSION (deprecated)
-        1.3.0          10300           10300           1.0300
-	1.3.4          10304           10300           1.0304
-    \endverbatim
-
-    Version 1.2.3 is actually stored as 10203 to allow for more than 9
-    minor and patch releases.
-
-    The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
-    give the integral values for the major, minor, and patch releases
-    respectively.
-
-    To enable new ABI-breaking features in patch releases you can configure
-    FLTK to use a higher FL_ABI_VERSION.
-
-    \see README.abi-version.txt
- */
-#ifndef FL_ABI_VERSION
-#define FL_ABI_VERSION (FL_MAJOR_VERSION*10000 + FL_MINOR_VERSION*100)
-#endif
-
-/*
-  Check if FL_ABI_VERSION is out of allowed range; redefine if necessary.
-
-  This is done to prevent users from defining an illegal ABI version.
-
-  Rule: FL_MAJOR_VERSION * 10000 + FL_MINOR_VERSION * 100
-	  <= FL_ABI_VERSION <= FL_API_VERSION.
-
-  Example (FLTK 1.3.4):
-
-    10300 <= FL_ABI_VERSION <= 10304
-
-  Note: configure + CMake can be used to define FL_ABI_VERSION, but they
-  do not check validity. This is done here.
-*/
-
-#if FL_ABI_VERSION < FL_MAJOR_VERSION*10000 + FL_MINOR_VERSION*100
-
-# undef FL_ABI_VERSION
-# define FL_ABI_VERSION (FL_MAJOR_VERSION*10000 + FL_MINOR_VERSION*100)
-
-#elif FL_ABI_VERSION > FL_API_VERSION
-
-# undef FL_ABI_VERSION
-# define FL_ABI_VERSION FL_API_VERSION
-
-#endif
-
-/*
-  FLTK_ABI_VERSION is deprecated (replaced by FL_ABI_VERSION).
-
-  This deprecated constant will be removed in FLTK 1.4.0 and later.
-  Please use FL_ABI_VERSION when FLTK 1.4.0 has been released.
-*/
-
-#ifdef FLTK_ABI_VERSION
-#undef FLTK_ABI_VERSION
-#endif
-
-#define FLTK_ABI_VERSION FL_ABI_VERSION
-
-/*@}*/	// group: Version Numbers
-
-/**
-    Every time a user moves the mouse pointer, clicks a button,
-    or presses a key, an event is generated and sent to your
-    application. Events can also come from other programs like the
-    window manager.
-   
-    Events are identified by the integer argument passed to the 
-    Fl_Widget::handle() virtual method. Other information about the 
-    most recent event is stored in static locations and acquired  by 
-    calling the Fl::event_*() methods. This static information remains 
-    valid until the next event is read from the window system, so it 
-    is ok to look at it outside of the handle() method.
-
-    Event numbers can be converted to their actual names using the
-    \ref fl_eventnames[] array defined in \#include &lt;FL/names.h&gt;
-
-    \sa Fl::event_text(), Fl::event_key(), class Fl::
- */
-// DEV NOTE: Keep this list in sync with FL/names.H
-enum Fl_Event {	// events
-  /** No event. */
-  FL_NO_EVENT		= 0,
-
-  /** A mouse button has gone down with the mouse pointing at this
-      widget. You can find out what button by calling Fl::event_button(). 
-      You find out the mouse position by calling Fl::event_x() and
-      Fl::event_y().
-
-      A widget indicates that it "wants" the mouse click by returning non-zero 
-      from its Fl_Widget::handle() method. It will then become the 
-      Fl::pushed() widget and will get FL_DRAG and the matching FL_RELEASE events.  
-      If Fl_Widget::handle() returns zero then FLTK will try sending the FL_PUSH 
-      to another widget. 
-   */
-  FL_PUSH		= 1,
-
-  /** A mouse button has been released. You can find out what button by 
-      calling Fl::event_button().
-
-      In order to receive the FL_RELEASE event, the widget must return 
-      non-zero when handling FL_PUSH.
-   */
-  FL_RELEASE		= 2,
-
-  /** The mouse has been moved to point at this widget.  This can
-      be used for highlighting feedback.  If a widget wants to
-      highlight or otherwise track the mouse, it indicates this by
-      returning non-zero from its handle() method. It then
-      becomes the Fl::belowmouse() widget and will receive 
-      FL_MOVE and FL_LEAVE events.
-   */
-  FL_ENTER		= 3,
-
-  /** The mouse has moved out of the widget.
-      In order to receive the FL_LEAVE event, the widget must 
-      return non-zero when handling FL_ENTER.
-   */
-  FL_LEAVE		= 4,
-
-  /** The mouse has moved with a button held down. The current button state 
-      is in Fl::event_state(). The mouse position is in Fl::event_x() and 
-      Fl::event_y().
-
-      In order to receive FL_DRAG events, the widget must return non-zero 
-      when handling FL_PUSH.
-   */
-  FL_DRAG		= 5,
-
-  /** This indicates an <I>attempt</I> to give a widget the keyboard focus.
-
-      If a widget wants the focus, it should change itself to display the 
-      fact that it has the focus, and return non-zero from its handle() method.
-      It then becomes the Fl::focus() widget and gets FL_KEYDOWN, FL_KEYUP, 
-      and FL_UNFOCUS events.
-
-      The focus will change either because the window manager changed which 
-      window gets the focus, or because the user tried to navigate using tab, 
-      arrows, or other keys. You can check Fl::event_key() to figure out why 
-      it moved. For navigation it will be the key pressed and for interaction 
-      with the window manager it will be zero.
-   */
-  FL_FOCUS		= 6,
-  
-  /** This event is sent to the previous Fl::focus() widget when another 
-      widget gets the focus or the window loses focus.
-   */
-  FL_UNFOCUS		= 7,
-
-  /** A key was pressed (FL_KEYDOWN) or released (FL_KEYUP). 
-      Fl_KEYBOARD is a synonym for FL_KEYDOWN.
-      The key can be found in Fl::event_key().
-      The text that the key should insert can be found with Fl::event_text() 
-      and its length is in Fl::event_length(). If you use the key handle()
-      should return 1. If you return zero then FLTK assumes you ignored the 
-      key and will then attempt to send it to a parent widget. If none of 
-      them want it, it will change the event into a FL_SHORTCUT event.
-
-      To receive FL_KEYBOARD events you must also respond to the FL_FOCUS
-      and FL_UNFOCUS events.
-
-      If you are writing a text-editing widget you may also want to call 
-      the Fl::compose() function to translate individual keystrokes into 
-      non-ASCII characters.
-
-      FL_KEYUP events are sent to the widget that currently has focus. This 
-      is not necessarily the same widget that received the corresponding 
-      FL_KEYDOWN event because focus may have changed between events.
-   */
-  FL_KEYDOWN		= 8,
-
-  /** Equivalent to FL_KEYDOWN.
-      \see FL_KEYDOWN
-   */
-  FL_KEYBOARD		= 8,
- 
-  /** Key release event.
-      \see FL_KEYDOWN
-   */
-  FL_KEYUP		= 9,
-
-  /** The user clicked the close button of a window.
-      This event is used internally only to trigger the callback of
-      Fl_Window derived classed. The default callback closes the 
-      window calling Fl_Window::hide().
-   */
-  FL_CLOSE		= 10,
-
-  /** The mouse has moved without any mouse buttons held down. 
-      This event is sent to the Fl::belowmouse() widget.
-
-      In order to receive FL_MOVE events, the widget must return 
-      non-zero when handling FL_ENTER.
-   */
-  FL_MOVE		= 11,
-
-  /** If the Fl::focus() widget is zero or ignores an FL_KEYBOARD
-      event then FLTK tries sending this event to every widget it 
-      can, until one of them returns non-zero. FL_SHORTCUT is first 
-      sent to the Fl::belowmouse() widget, then its parents and siblings, 
-      and eventually to every widget in the window, trying to find an 
-      object that returns non-zero. FLTK tries really hard to not to ignore 
-      any keystrokes!
-
-      You can also make "global" shortcuts by using Fl::add_handler(). A 
-      global shortcut will work no matter what windows are displayed or 
-      which one has the focus.
-   */
-  FL_SHORTCUT		= 12,
-
-  /** This widget is no longer active, due to Fl_Widget::deactivate() 
-      being called on it or one of its parents. Fl_Widget::active() may 
-      still be true after this, the widget is only active if Fl_Widget::active()
-      is true on it and all its parents (use Fl_Widget::active_r() to check this).
-   */
-  FL_DEACTIVATE		= 13,
-
-  /** This widget is now active, due to Fl_Widget::activate() being 
-      called on it or one of its parents.
-   */
-  FL_ACTIVATE		= 14,
-
-  /** This widget is no longer visible, due to Fl_Widget::hide() being 
-      called on it or one of its parents, or due to a parent window being 
-      minimized.  Fl_Widget::visible() may still be true after this, but the 
-      widget is visible only if visible() is true for it and all its 
-      parents (use Fl_Widget::visible_r() to check this).
-   */
-  FL_HIDE		= 15,
-
-  /** This widget is visible again, due to Fl_Widget::show() being called on 
-      it or one of its parents, or due to a parent window being restored. 
-      Child Fl_Windows respond to this by actually creating the window if not 
-      done already, so if you subclass a window, be sure to pass FL_SHOW 
-      to the base class Fl_Widget::handle() method!
-   */
-  FL_SHOW		= 16,
-
-  /** You should get this event some time after you call Fl::paste(). 
-      The contents of Fl::event_text() is the text to insert and the number 
-      of characters is in Fl::event_length().
-   */
-  FL_PASTE		= 17,
-
-  /** The Fl::selection_owner() will get this event before the selection is 
-      moved to another widget. This indicates that some other widget or program 
-      has claimed the selection. Motif programs used this to clear the selection 
-      indication. Most modern programs ignore this.
-   */
-  FL_SELECTIONCLEAR	= 18,
-
-  /** The user has moved the mouse wheel. The Fl::event_dx() and Fl::event_dy()
-      methods can be used to find the amount to scroll horizontally and vertically.
-   */
-  FL_MOUSEWHEEL		= 19,
-
-  /** The mouse has been moved to point at this widget. A widget that is 
-      interested in receiving drag'n'drop data must return 1 to receive 
-      FL_DND_DRAG, FL_DND_LEAVE and FL_DND_RELEASE events.
-   */
-  FL_DND_ENTER		= 20,
-
-  /** The mouse has been moved inside a widget while dragging data.  A 
-      widget that is interested in receiving drag'n'drop data should 
-      indicate the possible drop position.
-   */
-  FL_DND_DRAG		= 21,
-
-  /** The mouse has moved out of the widget.
-   */
-  FL_DND_LEAVE		= 22,
-
-  /** The user has released the mouse button dropping data into the widget. 
-      If the widget returns 1, it will receive the data in the immediately 
-      following FL_PASTE event.
-   */
-  FL_DND_RELEASE	= 23,
-  /** The screen configuration (number, positions) was changed.
-   Use Fl::add_handler() to be notified of this event.
-   */
-  FL_SCREEN_CONFIGURATION_CHANGED = 24,
-  /** The fullscreen state of the window has changed
-   */
-  FL_FULLSCREEN         = 25,
-  /** The user has made a zoom/pinch/magnification gesture. 
-      The Fl::event_dy() method can be used to find magnification amount,
-      Fl::event_x() and Fl::event_y() are set as well.
-     */
-  FL_ZOOM_GESTURE	= 26
-};
-
-/** \name When Conditions */
-/*@{*/
-/** These constants determine when a callback is performed.
-
-    \sa Fl_Widget::when();
-    \todo doxygen comments for values are incomplete and maybe wrong or unclear
- */
-enum Fl_When { // Fl_Widget::when():
-  FL_WHEN_NEVER		= 0,	///< Never call the callback
-  FL_WHEN_CHANGED	= 1,	///< Do the callback only when the widget value changes
-  FL_WHEN_NOT_CHANGED	= 2,	///< Do the callback whenever the user interacts with the widget
-  FL_WHEN_RELEASE	= 4,	///< Do the callback when the button or key is released and the value changes
-  FL_WHEN_RELEASE_ALWAYS= 6,	///< Do the callback when the button or key is released, even if the value doesn't change
-  FL_WHEN_ENTER_KEY	= 8,	///< Do the callback when the user presses the ENTER key and the value changes
-  FL_WHEN_ENTER_KEY_ALWAYS=10,	///< Do the callback when the user presses the ENTER key, even if the value doesn't change
-  FL_WHEN_ENTER_KEY_CHANGED=11	///< ?
-};
-
-/*@}*/		// group: When Conditions
-
-/** \name Mouse and Keyboard Events
-
-	This and the following constants define the non-ASCII keys on the
-	keyboard for FL_KEYBOARD and FL_SHORTCUT events.
-
-	\todo	FL_Button and FL_key... constants could be structured better
-		(use an enum or some doxygen grouping ?)
-  
-	\sa	Fl::event_key() and Fl::get_key(int) (use ascii letters for all other keys):
- */
-
-/*@{*/
-
-// FIXME: These codes collide with valid Unicode keys
-
-#define FL_Button	0xfee8	///< A mouse button; use Fl_Button + n for mouse button n.
-#define FL_BackSpace	0xff08	///< The backspace key.
-#define FL_Tab		0xff09	///< The tab key.
-#define FL_Iso_Key	0xff0c  ///< The additional key of ISO keyboards.
-#define FL_Enter	0xff0d	///< The enter key. 
-#define FL_Pause	0xff13	///< The pause key.
-#define FL_Scroll_Lock	0xff14	///< The scroll lock key.
-#define FL_Escape	0xff1b	///< The escape key.
-#define FL_Kana         0xff2e  ///< The Kana key of JIS keyboards.
-#define FL_Eisu         0xff2f  ///< The Eisu key of JIS keyboards.
-#define FL_Yen          0xff30  ///< The Yen key of JIS keyboards.
-#define FL_JIS_Underscore 0xff31 ///< The underscore key of JIS keyboards.
-#define FL_Home		0xff50	///< The home key.
-#define FL_Left		0xff51	///< The left arrow key.
-#define FL_Up		0xff52	///< The up arrow key.
-#define FL_Right	0xff53	///< The right arrow key.
-#define FL_Down		0xff54	///< The down arrow key.
-#define FL_Page_Up	0xff55	///< The page-up key.
-#define FL_Page_Down	0xff56	///< The page-down key.
-#define FL_End		0xff57	///< The end key.
-#define FL_Print	0xff61	///< The print (or print-screen) key.
-#define FL_Insert	0xff63	///< The insert key. 
-#define FL_Menu		0xff67	///< The menu key.
-#define FL_Help		0xff68	///< The 'help' key on Mac keyboards
-#define FL_Num_Lock	0xff7f	///< The num lock key.
-#define FL_KP		0xff80	///< One of the keypad numbers; use FL_KP + 'n' for digit n.
-#define FL_KP_Enter	0xff8d	///< The enter key on the keypad, same as Fl_KP+'\\r'.
-#define FL_KP_Last	0xffbd	///< The last keypad key; use to range-check keypad.
-#define FL_F		0xffbd	///< One of the function keys; use FL_F + n for function key n.
-#define FL_F_Last	0xffe0	///< The last function key; use to range-check function keys.
-#define FL_Shift_L	0xffe1	///< The lefthand shift key.
-#define FL_Shift_R	0xffe2	///< The righthand shift key.
-#define FL_Control_L	0xffe3	///< The lefthand control key.
-#define FL_Control_R	0xffe4	///< The righthand control key.
-#define FL_Caps_Lock	0xffe5	///< The caps lock key.
-#define FL_Meta_L	0xffe7	///< The left meta/Windows key.
-#define FL_Meta_R	0xffe8	///< The right meta/Windows key.
-#define FL_Alt_L	0xffe9	///< The left alt key.
-#define FL_Alt_R	0xffea	///< The right alt key. 
-#define FL_Delete	0xffff	///< The delete key.
-
-// These use the Private Use Area (PUA) of the Basic Multilingual Plane
-// of Unicode. Guaranteed not to conflict with a proper Unicode character.
-
-// These primarily map to the XFree86 keysym range
-#define FL_Volume_Down  0xEF11   /* Volume control down        */
-#define FL_Volume_Mute  0xEF12   /* Mute sound from the system */
-#define FL_Volume_Up    0xEF13   /* Volume control up          */
-#define FL_Media_Play   0xEF14   /* Start playing of audio     */
-#define FL_Media_Stop   0xEF15   /* Stop playing audio         */
-#define FL_Media_Prev   0xEF16   /* Previous track             */
-#define FL_Media_Next   0xEF17   /* Next track                 */
-#define FL_Home_Page    0xEF18   /* Display user's home page   */
-#define FL_Mail         0xEF19   /* Invoke user's mail program */
-#define FL_Search       0xEF1B   /* Search                     */
-#define FL_Back         0xEF26   /* Like back on a browser     */
-#define FL_Forward      0xEF27   /* Like forward on a browser  */
-#define FL_Stop         0xEF28   /* Stop current operation     */
-#define FL_Refresh      0xEF29   /* Refresh the page           */
-#define FL_Sleep        0xEF2F   /* Put system to sleep        */
-#define FL_Favorites    0xEF30   /* Show favorite locations    */
-
-/*@}*/	// group: Mouse and Keyboard Events
-
-/** \name Mouse Buttons
-
-	These constants define the button numbers for FL_PUSH and FL_RELEASE events.
-	
-	\sa Fl::event_button()
-*/
-
-/*@{*/
-
-#define FL_LEFT_MOUSE	1	///< The left mouse button
-#define FL_MIDDLE_MOUSE	2	///< The middle mouse button
-#define FL_RIGHT_MOUSE	3	///< The right mouse button
-
-/*@}*/		// group: Mouse Buttons
-
-
-/** \name	Event States
-
-	The following constants define bits in the Fl::event_state() value.
-*/
-
-/*@{*/		// group: Event States
-
-// FIXME: it would be nice to have the modifiers in the upper 8 bit so that
-//        a unicode ke (24bit) can be sent as an unsigned with the modifiers.
-
-#define FL_SHIFT	0x00010000	///< One of the shift keys is down
-#define FL_CAPS_LOCK	0x00020000	///< The caps lock is on
-#define FL_CTRL		0x00040000	///< One of the ctrl keys is down
-#define FL_ALT		0x00080000	///< One of the alt keys is down
-#define FL_NUM_LOCK	0x00100000	///< The num lock is on
-					// most X servers do this?
-#define FL_META		0x00400000	///< One of the meta/Windows keys is down
-					// correct for XFree86
-#define FL_SCROLL_LOCK	0x00800000	///< The scroll lock is on
-					// correct for XFree86
-#define FL_BUTTON1	0x01000000	///< Mouse button 1 is pushed
-#define FL_BUTTON2	0x02000000	///< Mouse button 2 is pushed
-#define FL_BUTTON3	0x04000000	///< Mouse button 3 is pushed
-#define FL_BUTTONS	0x7f000000	///< Any mouse button is pushed
-#define FL_BUTTON(n)	(0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed
-
-#define FL_KEY_MASK 0x0000ffff		///< All keys are 16 bit for now 
-					//   FIXME: Unicode needs 24 bits!
-
-#ifdef __APPLE__
-#  define FL_COMMAND	FL_META		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
-#  define FL_CONTROL 	FL_CTRL		///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
-#else
-#  define FL_COMMAND	FL_CTRL		///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
-#  define FL_CONTROL	FL_META		///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
-#endif // __APPLE__
-
-/*@}*/		// group: Event States
-
-/** \name Box Types
-    \brief FLTK standard box types
-    
-    This enum defines the standard box types included with FLTK.
-    
-    FL_NO_BOX means nothing is drawn at all, so whatever is already 
-    on the screen remains. The FL_..._FRAME types only draw their edges, 
-    leaving the interior unchanged. The blue color in Figure 1 
-    is the area that is not drawn by the frame types.
-    
-    \image html boxtypes.png "Figure 1: FLTK standard box types"
-    \image latex boxtypes.png "FLTK standard box types" width=10cm
-    \todo	Description of boxtypes is incomplete.
-    		See below for the defined enum Fl_Boxtype.
-		\see src/Fl_get_system_colors.cxx
-*/
-/*@{*/
-enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.cxx):
-
-  FL_NO_BOX = 0,		///< nothing is drawn at all, this box is invisible
-  FL_FLAT_BOX,			///< a flat box
-  FL_UP_BOX,			///< see figure 1
-  FL_DOWN_BOX,			///< see figure 1
-  FL_UP_FRAME,			///< see figure 1
-  FL_DOWN_FRAME,		///< see figure 1
-  FL_THIN_UP_BOX,		///< see figure 1
-  FL_THIN_DOWN_BOX,		///< see figure 1
-  FL_THIN_UP_FRAME,		///< see figure 1
-  FL_THIN_DOWN_FRAME,		///< see figure 1
-  FL_ENGRAVED_BOX,		///< see figure 1
-  FL_EMBOSSED_BOX,		///< see figure 1
-  FL_ENGRAVED_FRAME,		///< see figure 1
-  FL_EMBOSSED_FRAME,		///< see figure 1
-  FL_BORDER_BOX,		///< see figure 1
-  _FL_SHADOW_BOX,		///< see figure 1
-  FL_BORDER_FRAME,		///< see figure 1
-  _FL_SHADOW_FRAME,		///< see figure 1
-  _FL_ROUNDED_BOX,		///< see figure 1
-  _FL_RSHADOW_BOX,		///< see figure 1
-  _FL_ROUNDED_FRAME,		///< see figure 1
-  _FL_RFLAT_BOX,		///< see figure 1
-  _FL_ROUND_UP_BOX,		///< see figure 1
-  _FL_ROUND_DOWN_BOX,		///< see figure 1
-  _FL_DIAMOND_UP_BOX,		///< see figure 1
-  _FL_DIAMOND_DOWN_BOX,		///< see figure 1
-  _FL_OVAL_BOX,			///< see figure 1
-  _FL_OSHADOW_BOX,		///< see figure 1
-  _FL_OVAL_FRAME,		///< see figure 1
-  _FL_OFLAT_BOX,		///< see figure 1
-  _FL_PLASTIC_UP_BOX,		///< plastic version of FL_UP_BOX
-  _FL_PLASTIC_DOWN_BOX,		///< plastic version of FL_DOWN_BOX
-  _FL_PLASTIC_UP_FRAME,		///< plastic version of FL_UP_FRAME
-  _FL_PLASTIC_DOWN_FRAME,	///< plastic version of FL_DOWN_FRAME
-  _FL_PLASTIC_THIN_UP_BOX,	///< plastic version of FL_THIN_UP_BOX
-  _FL_PLASTIC_THIN_DOWN_BOX,	///< plastic version of FL_THIN_DOWN_BOX
-  _FL_PLASTIC_ROUND_UP_BOX,	///< plastic version of FL_ROUND_UP_BOX
-  _FL_PLASTIC_ROUND_DOWN_BOX,	///< plastic version of FL_ROUND_DOWN_BOX
-  _FL_GTK_UP_BOX,		///< gtk+ version of FL_UP_BOX
-  _FL_GTK_DOWN_BOX,		///< gtk+ version of FL_DOWN_BOX
-  _FL_GTK_UP_FRAME,		///< gtk+ version of FL_UP_FRAME
-  _FL_GTK_DOWN_FRAME,		///< gtk+ version of FL_DOWN_FRAME
-  _FL_GTK_THIN_UP_BOX,		///< gtk+ version of FL_THIN_UP_BOX
-  _FL_GTK_THIN_DOWN_BOX,	///< gtk+ version of FL_THIN_DOWN_BOX
-  _FL_GTK_THIN_UP_FRAME,	///< gtk+ version of FL_THIN_UP_FRAME
-  _FL_GTK_THIN_DOWN_FRAME,	///< gtk+ version of FL_THIN_DOWN_FRAME
-  _FL_GTK_ROUND_UP_BOX,		///< gtk+ version of FL_ROUND_UP_BOX
-  _FL_GTK_ROUND_DOWN_BOX,	///< gtk+ version of FL_ROUND_DOWN_BOX
-  _FL_GLEAM_UP_BOX,		///< gleam version of FL_UP_BOX
-  _FL_GLEAM_DOWN_BOX,		///< gleam version of FL_DOWN_BOX
-  _FL_GLEAM_UP_FRAME,		///< gleam version of FL_UP_FRAME
-  _FL_GLEAM_DOWN_FRAME,		///< gleam version of FL_DOWN_FRAME
-  _FL_GLEAM_THIN_UP_BOX,	///< gleam version of FL_THIN_UP_BOX
-  _FL_GLEAM_THIN_DOWN_BOX,	///< gleam version of FL_THIN_DOWN_BOX
-  _FL_GLEAM_ROUND_UP_BOX,	///< gleam version of FL_ROUND_UP_BOX
-  _FL_GLEAM_ROUND_DOWN_BOX,	///< gleam version of FL_ROUND_DOWN_BOX
-  FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
-};
-extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
-#define FL_ROUND_UP_BOX fl_define_FL_ROUND_UP_BOX()
-#define FL_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_ROUND_UP_BOX()+1)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_SHADOW_BOX();
-#define FL_SHADOW_BOX fl_define_FL_SHADOW_BOX()
-#define FL_SHADOW_FRAME (Fl_Boxtype)(fl_define_FL_SHADOW_BOX()+2)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUNDED_BOX();
-#define FL_ROUNDED_BOX fl_define_FL_ROUNDED_BOX()
-#define FL_ROUNDED_FRAME (Fl_Boxtype)(fl_define_FL_ROUNDED_BOX()+2)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_RFLAT_BOX();
-#define FL_RFLAT_BOX fl_define_FL_RFLAT_BOX()
-extern FL_EXPORT Fl_Boxtype fl_define_FL_RSHADOW_BOX();
-#define FL_RSHADOW_BOX fl_define_FL_RSHADOW_BOX()
-extern FL_EXPORT Fl_Boxtype fl_define_FL_DIAMOND_BOX();
-#define FL_DIAMOND_UP_BOX fl_define_FL_DIAMOND_BOX()
-#define FL_DIAMOND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_DIAMOND_BOX()+1)
-extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX();
-#define FL_OVAL_BOX fl_define_FL_OVAL_BOX()
-#define FL_OSHADOW_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+1)
-#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2)
-#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3)
-
-extern FL_EXPORT Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX();
-#define FL_PLASTIC_UP_BOX fl_define_FL_PLASTIC_UP_BOX()
-#define FL_PLASTIC_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+1)
-#define FL_PLASTIC_UP_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+2)
-#define FL_PLASTIC_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+3)
-#define FL_PLASTIC_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+4)
-#define FL_PLASTIC_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+5)
-#define FL_PLASTIC_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+6)
-#define FL_PLASTIC_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+7)
-
-extern FL_EXPORT Fl_Boxtype fl_define_FL_GTK_UP_BOX();
-#define FL_GTK_UP_BOX fl_define_FL_GTK_UP_BOX()
-#define FL_GTK_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+1)
-#define FL_GTK_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+2)
-#define FL_GTK_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+3)
-#define FL_GTK_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+4)
-#define FL_GTK_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+5)
-#define FL_GTK_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+6)
-#define FL_GTK_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+7)
-#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
-#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
-
-extern FL_EXPORT Fl_Boxtype fl_define_FL_GLEAM_UP_BOX();
-#define FL_GLEAM_UP_BOX fl_define_FL_GLEAM_UP_BOX()
-#define FL_GLEAM_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+1)
-#define FL_GLEAM_UP_FRAME (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+2)
-#define FL_GLEAM_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+3)
-#define FL_GLEAM_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+4)
-#define FL_GLEAM_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+5)
-#define FL_GLEAM_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+6)
-#define FL_GLEAM_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GLEAM_UP_BOX()+7)
-
-// conversions of box types to other boxtypes:
-/**
-  Get the filled version of a frame.
-  If no filled version of a given frame exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_box(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b<FL_UP_BOX||b%4>1)?b:(b-2));
-}
-/**
-  Get the "pressed" or "down" version of a box.
-  If no "down" version of a given box exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_down(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b<FL_UP_BOX)?b:(b|1));
-}
-/**
-  Get the unfilled, frame only version of a box.
-  If no frame version of a given box exists, the behavior of this function
-  is undefined and some random box or frame is returned.
- */
-inline Fl_Boxtype fl_frame(Fl_Boxtype b) {
-  return (Fl_Boxtype)((b%4<2)?b:(b+2));
-}
-
-// back-compatibility box types:
-#define FL_FRAME FL_ENGRAVED_FRAME
-#define FL_FRAME_BOX FL_ENGRAVED_BOX
-#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
-#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX
-
-/*@}*/	// group: Box Types
-
-/**
-   The labeltype() method sets the type of the label.
-
-   The following standard label types are included:
-
-   \todo	The doxygen comments are incomplete, and some labeltypes
-   	start with an underscore. Also, there are three
-		external functions undocumented (yet):
-		  - fl_define_FL_SHADOW_LABEL()
-		  - fl_define_FL_ENGRAVED_LABEL()
-		  - fl_define_FL_EMBOSSED_LABEL()
-*/
-enum Fl_Labeltype {	// labeltypes:
-  FL_NORMAL_LABEL	= 0, ///< draws the text (0)
-  FL_NO_LABEL,         ///< does nothing
-  _FL_SHADOW_LABEL,    ///< draws a drop shadow under the text
-  _FL_ENGRAVED_LABEL,	 ///< draws edges as though the text is engraved
-  _FL_EMBOSSED_LABEL,  ///< draws edges as though the text is raised
-  _FL_MULTI_LABEL,     ///< draws a composite label \see Fl_Multi_Label
-  _FL_ICON_LABEL,      ///< draws the icon associated with the text
-  _FL_IMAGE_LABEL,     ///< the label displays an "icon" based on a Fl_Image
-
-  FL_FREE_LABELTYPE    ///< first free labeltype to use for creating own labeltypes
-};
-
-/** 
-  Sets the current label type and return its corresponding Fl_Labeltype value. 
-  @{
-*/
-#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
-extern Fl_Labeltype FL_EXPORT fl_define_FL_SHADOW_LABEL();
-#define FL_SHADOW_LABEL fl_define_FL_SHADOW_LABEL()
-extern Fl_Labeltype FL_EXPORT fl_define_FL_ENGRAVED_LABEL();
-#define FL_ENGRAVED_LABEL fl_define_FL_ENGRAVED_LABEL()
-extern Fl_Labeltype FL_EXPORT fl_define_FL_EMBOSSED_LABEL();
-#define FL_EMBOSSED_LABEL fl_define_FL_EMBOSSED_LABEL()
-/** @} */
-
-/** \name Alignment Flags 
-    Flags to control the label alignment. 
-
-    This controls how the label is displayed next to or inside the widget. 
-    The default value is FL_ALIGN_CENTER (0) for most widgets, which centers
-    the label inside the widget.
-
-    Flags can be or'd to achieve a combination of alignments, but there
-    are some "magic values" (e.g. combinations of TOP and BOTTOM and of
-    LEFT and RIGHT) that have special meanings (see below). For instance:<BR>
-    FL_ALIGN_TOP_LEFT == (FL_ALIGN_TOP|FL_ALIGN_LEFT) != FL_ALIGN_LEFT_TOP.
-
-    \code
-    Outside alignments (FL_ALIGN_INSIDE is not set):
-
-               TOP_LEFT        TOP       TOP_RIGHT
-               +---------------------------------+
-       LEFT_TOP|                                 |RIGHT_TOP
-               |                                 |
-           LEFT|             CENTER              |RIGHT
-               |                                 |
-    LEFT_BOTTOM|                                 |RIGHT_BOTTOM
-               +---------------------------------+
-               BOTTOM_LEFT   BOTTOM   BOTTOM_RIGHT
-
-    Inside alignments (FL_ALIGN_INSIDE is set):
-
-               +---------------------------------+
-               |TOP_LEFT       TOP      TOP_RIGHT|
-               |                                 |
-               |LEFT         CENTER         RIGHT|
-               |                                 |
-               |BOTTOM_LEFT  BOTTOM  BOTTOM_RIGHT|
-               +---------------------------------+
-    \endcode
-    \see #FL_ALIGN_CENTER, etc.
- */
-/*@{*/
-/** FLTK type for alignment control */
-typedef unsigned Fl_Align;
-  /** Align the label horizontally in the middle. */
-const Fl_Align FL_ALIGN_CENTER		= (Fl_Align)0;
-  /** Align the label at the top of the widget. Inside labels appear below the top,
-      outside labels are drawn on top of the widget. */
-const Fl_Align FL_ALIGN_TOP		= (Fl_Align)1;
-  /** Align the label at the bottom of the widget. */
-const Fl_Align FL_ALIGN_BOTTOM		= (Fl_Align)2;
-  /** Align the label at the left of the widget. Inside labels appear left-justified
-      starting at the left side of the widget, outside labels are right-justified and
-      drawn to the left of the widget. */
-const Fl_Align FL_ALIGN_LEFT		= (Fl_Align)4;
-  /** Align the label to the right of the widget. */
-const Fl_Align FL_ALIGN_RIGHT		= (Fl_Align)8;
-  /** Draw the label inside of the widget. */
-const Fl_Align FL_ALIGN_INSIDE		= (Fl_Align)16;
-  /** If the label contains an image, draw the text on top of the image. */
-const Fl_Align FL_ALIGN_TEXT_OVER_IMAGE	= (Fl_Align)0x0020;
-  /** If the label contains an image, draw the text below the image. */
-const Fl_Align FL_ALIGN_IMAGE_OVER_TEXT	= (Fl_Align)0x0000;
-  /** All parts of the label that are lager than the widget will not be drawn . */
-const Fl_Align FL_ALIGN_CLIP		= (Fl_Align)64;
-  /** Wrap text that does not fit the width of the widget. */
-const Fl_Align FL_ALIGN_WRAP		= (Fl_Align)128;
-  /** If the label contains an image, draw the text to the right of the image. */
-const Fl_Align FL_ALIGN_IMAGE_NEXT_TO_TEXT = (Fl_Align)0x0100;
-  /** If the label contains an image, draw the text to the left of the image. */
-const Fl_Align FL_ALIGN_TEXT_NEXT_TO_IMAGE = (Fl_Align)0x0120;
-/** If the label contains an image, draw the image or deimage in the background. */
-const Fl_Align FL_ALIGN_IMAGE_BACKDROP  = (Fl_Align)0x0200;
-const Fl_Align FL_ALIGN_TOP_LEFT	= FL_ALIGN_TOP | FL_ALIGN_LEFT;
-const Fl_Align FL_ALIGN_TOP_RIGHT	= FL_ALIGN_TOP | FL_ALIGN_RIGHT;
-const Fl_Align FL_ALIGN_BOTTOM_LEFT	= FL_ALIGN_BOTTOM | FL_ALIGN_LEFT;
-const Fl_Align FL_ALIGN_BOTTOM_RIGHT	= FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT;
-const Fl_Align FL_ALIGN_LEFT_TOP	= 0x0007; // magic value
-const Fl_Align FL_ALIGN_RIGHT_TOP	= 0x000b; // magic value
-const Fl_Align FL_ALIGN_LEFT_BOTTOM	= 0x000d; // magic value
-const Fl_Align FL_ALIGN_RIGHT_BOTTOM	= 0x000e; // magic value
-const Fl_Align FL_ALIGN_NOWRAP		= (Fl_Align)0; // for back compatibility
-const Fl_Align FL_ALIGN_POSITION_MASK   = 0x000f; // left, right, top, bottom
-const Fl_Align FL_ALIGN_IMAGE_MASK      = 0x0320; // l/r, t/b, backdrop
-/*@}*/
-
-
-/** \name Font Numbers
-    The following constants define the standard FLTK fonts:
- */
-/*@{*/
-/** A font number is an index into the internal font table. */
-typedef int Fl_Font;
-
-const Fl_Font FL_HELVETICA              = 0;	///< Helvetica (or Arial) normal (0)
-const Fl_Font FL_HELVETICA_BOLD         = 1;	///< Helvetica (or Arial) bold
-const Fl_Font FL_HELVETICA_ITALIC       = 2;	///< Helvetica (or Arial) oblique
-const Fl_Font FL_HELVETICA_BOLD_ITALIC  = 3;	///< Helvetica (or Arial) bold-oblique
-const Fl_Font FL_COURIER                = 4;	///< Courier normal
-const Fl_Font FL_COURIER_BOLD           = 5;	///< Courier bold 
-const Fl_Font FL_COURIER_ITALIC         = 6;	///< Courier italic
-const Fl_Font FL_COURIER_BOLD_ITALIC    = 7;	///< Courier bold-italic
-const Fl_Font FL_TIMES                  = 8;	///< Times roman
-const Fl_Font FL_TIMES_BOLD             = 9;	///< Times roman bold
-const Fl_Font FL_TIMES_ITALIC           = 10;	///< Times roman italic
-const Fl_Font FL_TIMES_BOLD_ITALIC      = 11;	///< Times roman bold-italic
-const Fl_Font FL_SYMBOL                 = 12;	///< Standard symbol font
-const Fl_Font FL_SCREEN                 = 13;	///< Default monospaced screen font
-const Fl_Font FL_SCREEN_BOLD            = 14;	///< Default monospaced bold screen font
-const Fl_Font FL_ZAPF_DINGBATS          = 15;	///< Zapf-dingbats font
-
-const Fl_Font FL_FREE_FONT              = 16;	///< first one to allocate
-const Fl_Font FL_BOLD                   = 1;	///< add this to helvetica, courier, or times
-const Fl_Font FL_ITALIC                 = 2;	///< add this to helvetica, courier, or times
-const Fl_Font FL_BOLD_ITALIC            = 3;	///< add this to helvetica, courier, or times
-
-/*@}*/
-
-/** Size of a font in pixels.
-    This is the approximate height of a font in pixels.
- */
-typedef int Fl_Fontsize;
-
-extern FL_EXPORT Fl_Fontsize FL_NORMAL_SIZE;	///< normal font size
-
-/** \name Colors 
-    The Fl_Color type holds an FLTK color value.
-
-    Colors are either 8-bit indexes into a <a href="fltk-colormap.png">virtual colormap</a>
-    or 24-bit RGB color values. (See \ref drawing_colors for the default FLTK colormap)
-
-    Color indices occupy the lower 8 bits of the value, while
-    RGB colors occupy the upper 24 bits, for a byte organization of RGBI.
-
-<pre>
- Fl_Color => 0xrrggbbii
-                | | | |
-                | | | +--- \ref drawing_colors "index" between 0 and 255
-                | | +----- blue color component (8 bit)
-                | +------- green component (8 bit)
-                +--------- red component (8 bit)
- </pre>
-
-    A color can have either an index or an rgb value. Colors with rgb set 
-    and an index >0 are reserved for special use.
-
- */
-/*@{*/
-/** An FLTK color value; see also \ref drawing_colors  */
-typedef unsigned int Fl_Color;
-
-// Standard colors. These are used as default colors in widgets and altered as necessary
-const Fl_Color FL_FOREGROUND_COLOR  = 0;	///< the default foreground color (0) used for labels and text
-const Fl_Color FL_BACKGROUND2_COLOR = 7;	///< the default background color for text, list, and valuator widgets
-const Fl_Color FL_INACTIVE_COLOR    = 8;	///< the inactive foreground color
-const Fl_Color FL_SELECTION_COLOR   = 15;	///< the default selection/highlight color
-
-  // boxtypes generally limit themselves to these colors so
-  // the whole ramp is not allocated:
-
-const Fl_Color FL_GRAY0   = 32;			// 'A'
-const Fl_Color FL_DARK3   = 39;			// 'H'
-const Fl_Color FL_DARK2   = 45;			// 'N'
-const Fl_Color FL_DARK1   = 47;			// 'P'
-const Fl_Color FL_BACKGROUND_COLOR  = 49;	// 'R' default background color
-const Fl_Color FL_LIGHT1  = 50;			// 'S'
-const Fl_Color FL_LIGHT2  = 52;			// 'U'
-const Fl_Color FL_LIGHT3  = 54;			// 'W'
-
-  // FLTK provides a 5x8x5 color cube that is used with colormap visuals
-
-const Fl_Color FL_BLACK   = 56;
-const Fl_Color FL_RED     = 88;
-const Fl_Color FL_GREEN   = 63;
-const Fl_Color FL_YELLOW  = 95;
-const Fl_Color FL_BLUE    = 216;
-const Fl_Color FL_MAGENTA = 248;
-const Fl_Color FL_CYAN    = 223;
-const Fl_Color FL_DARK_RED = 72;
-
-const Fl_Color FL_DARK_GREEN    = 60;
-const Fl_Color FL_DARK_YELLOW   = 76;
-const Fl_Color FL_DARK_BLUE     = 136;
-const Fl_Color FL_DARK_MAGENTA  = 152;
-const Fl_Color FL_DARK_CYAN     = 140;
-
-const Fl_Color FL_WHITE         = 255;
-
-
-#define FL_FREE_COLOR     (Fl_Color)16
-#define FL_NUM_FREE_COLOR 16
-#define FL_GRAY_RAMP      (Fl_Color)32
-#define FL_NUM_GRAY       24
-#define FL_GRAY           FL_BACKGROUND_COLOR
-#define FL_COLOR_CUBE     (Fl_Color)56
-#define FL_NUM_RED        5
-#define FL_NUM_GREEN      8
-#define FL_NUM_BLUE       5
-
-FL_EXPORT Fl_Color fl_inactive(Fl_Color c);
-
-FL_EXPORT Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg);
-
-FL_EXPORT Fl_Color fl_color_average(Fl_Color c1, Fl_Color c2, float weight);
-
-/** Returns a lighter version of the specified color. */
-inline Fl_Color fl_lighter(Fl_Color c) { return fl_color_average(c, FL_WHITE, .67f); }
-
-/** Returns a darker version of the specified color. */
-inline Fl_Color fl_darker(Fl_Color c) { return fl_color_average(c, FL_BLACK, .67f); }
-
-/** Returns the 24-bit color value closest to \p r, \p g, \p b. */
-inline Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) {
-  if (!r && !g && !b) return FL_BLACK;
-  else return (Fl_Color)(((((r << 8) | g) << 8) | b) << 8);
-}
-
-/** Returns the 24-bit color value closest to \p g (grayscale). */
-inline Fl_Color fl_rgb_color(uchar g) {
-  if (!g) return FL_BLACK;
-  else return (Fl_Color)(((((g << 8) | g) << 8) | g) << 8);
-}
-
-/** Returns a gray color value from black (i == 0) to white (i == FL_NUM_GRAY - 1).
-    FL_NUM_GRAY is defined to be 24 in the current FLTK release.
-    To get the closest FLTK gray value to an 8-bit grayscale color 'I' use:
-
- \code
-   fl_gray_ramp(I * (FL_NUM_GRAY - 1) / 255)
- \endcode
-*/
-inline Fl_Color fl_gray_ramp(int i) {return (Fl_Color)(i+FL_GRAY_RAMP);}
-
-/** Returns a color out of the color cube.
-
-  \p r must be in the range 0 to FL_NUM_RED (5) minus 1,
-  \p g must be in the range 0 to FL_NUM_GREEN (8) minus 1,
-  \p b must be in the range 0 to FL_NUM_BLUE (5) minus 1.
-
-  To get the closest color to a 8-bit set of R,G,B values use:
-
-  \code
-    fl_color_cube(R * (FL_NUM_RED - 1) / 255,
-       G * (FL_NUM_GREEN - 1) / 255,
-       B * (FL_NUM_BLUE - 1) / 255);
-  \endcode
- */
-inline Fl_Color fl_color_cube(int r, int g, int b) {
-  return (Fl_Color)((b*FL_NUM_RED + r) * FL_NUM_GREEN + g + FL_COLOR_CUBE);}
-
-/*@}*/		// group: Colors
-
-/** \name Cursors */
-/*@{*/
-
-/** The following constants define the mouse cursors that are available in FLTK.
-
-    Cursors are provided by the system when available, or bitmaps built into
-    FLTK as a fallback.
-
-    \todo enum Fl_Cursor needs maybe an image.
-*/
-/* FIXME: We should renumber these, but that will break the ABI */
-enum Fl_Cursor {
-  FL_CURSOR_DEFAULT    =  0, /**< the default cursor, usually an arrow. */
-  FL_CURSOR_ARROW      = 35, /**< an arrow pointer. */
-  FL_CURSOR_CROSS      = 66, /**< crosshair. */
-  FL_CURSOR_WAIT       = 76, /**< busy indicator (e.g. hourglass). */
-  FL_CURSOR_INSERT     = 77, /**< I-beam. */
-  FL_CURSOR_HAND       = 31, /**< pointing hand. */
-  FL_CURSOR_HELP       = 47, /**< question mark pointer. */
-  FL_CURSOR_MOVE       = 27, /**< 4-pointed arrow or hand. */
-
-  /* Resize indicators */
-  FL_CURSOR_NS         = 78, /**< up/down resize. */
-  FL_CURSOR_WE         = 79, /**< left/right resize. */
-  FL_CURSOR_NWSE       = 80, /**< diagonal resize. */
-  FL_CURSOR_NESW       = 81, /**< diagonal resize. */
-  FL_CURSOR_N          = 70, /**< upwards resize. */
-  FL_CURSOR_NE         = 69, /**< upwards, right resize. */
-  FL_CURSOR_E          = 49, /**< rightwards resize. */
-  FL_CURSOR_SE         =  8, /**< downwards, right resize. */
-  FL_CURSOR_S          =  9, /**< downwards resize. */
-  FL_CURSOR_SW         =  7, /**< downwards, left resize. */
-  FL_CURSOR_W          = 36, /**< leftwards resize. */
-  FL_CURSOR_NW         = 68, /**< upwards, left resize. */
-
-  FL_CURSOR_NONE       =255  /**< invisible. */
-};
-/*@}*/		// group: Cursors  
-
-/** FD "when" conditions */
-enum { // values for "when" passed to Fl::add_fd()
-  FL_READ   = 1, /**< Call the callback when there is data to be read. */
-  FL_WRITE  = 4, /**< Call the callback when data can be written without blocking. */
-  FL_EXCEPT = 8  /**< Call the callback if an exception occurs on the file. */
-};
-
-/** visual types and Fl_Gl_Window::mode() (values match Glut) */
-enum Fl_Mode { 
-  FL_RGB	= 0,
-  FL_INDEX	= 1,
-  FL_SINGLE	= 0,
-  FL_DOUBLE	= 2,
-  FL_ACCUM	= 4,
-  FL_ALPHA	= 8,
-  FL_DEPTH	= 16,
-  FL_STENCIL	= 32,
-  FL_RGB8	= 64,
-  FL_MULTISAMPLE= 128,
-  FL_STEREO     = 256,
-  FL_FAKE_SINGLE = 512,	// Fake single buffered windows using double-buffer
-  FL_OPENGL3    = 1024
-};
-
-// image alpha blending
-
-#define FL_IMAGE_WITH_ALPHA 0x40000000
-
-/** Damage masks */
-enum Fl_Damage {
-  FL_DAMAGE_CHILD    = 0x01, /**< A child needs to be redrawn. */
-  FL_DAMAGE_EXPOSE   = 0x02, /**< The window was exposed. */
-  FL_DAMAGE_SCROLL   = 0x04, /**< The Fl_Scroll widget was scrolled. */
-  FL_DAMAGE_OVERLAY  = 0x08, /**< The overlay planes need to be redrawn. */
-  FL_DAMAGE_USER1    = 0x10, /**< First user-defined damage bit. */
-  FL_DAMAGE_USER2    = 0x20, /**< Second user-defined damage bit. */
-  FL_DAMAGE_ALL      = 0x80  /**< Everything needs to be redrawn. */
-};
-
-// FLTK 1.0.x compatibility definitions...
-#  ifdef FLTK_1_0_COMPAT
-#    define contrast	fl_contrast
-#    define down	fl_down
-#    define frame	fl_frame
-#    define inactive	fl_inactive
-#  endif // FLTK_1_0_COMPAT
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl.H
+++ /dev/null
@@ -1,1420 +1,0 @@
-//
-// "$Id$"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-    Fl static class.
- */
-
-#ifndef Fl_H
-#  define Fl_H
-
-#include <FL/Fl_Export.H>
-
-#ifdef FLTK_HAVE_CAIRO
-# include <FL/Fl_Cairo.H>
-#endif
-
-#  include "fl_utf8.h"
-#  include "Enumerations.H"
-#  ifndef Fl_Object
-#    define Fl_Object Fl_Widget	/**< for back compatibility - use Fl_Widget! */
-#  endif
-
-#  ifdef check
-#    undef check
-#  endif
-
-
-class Fl_Widget;
-class Fl_Window;
-class Fl_Image;
-struct Fl_Label;
-
-// Keep avoiding having the socket deps at that level but mke sure it will work in both 32 & 64 bit builds
-#if defined(WIN32) && !defined(__CYGWIN__)
-# if defined(_WIN64)
-#  define FL_SOCKET unsigned __int64
-# else
-#  define FL_SOCKET int
-# endif
-#else
-# define FL_SOCKET int
-#endif
-
-
-// Pointers you can use to change FLTK to a foreign language.
-// Note: Similar pointers are defined in FL/fl_ask.H and src/fl_ask.cxx
-extern FL_EXPORT const char* fl_local_ctrl;
-extern FL_EXPORT const char* fl_local_meta;
-extern FL_EXPORT const char* fl_local_alt;
-extern FL_EXPORT const char* fl_local_shift;
-
-/** \defgroup  callback_functions Callback function typedefs
- \brief Typedefs defined in <FL/Fl.H> for callback or handler functions passed as function parameters.
-
-    FLTK uses callback functions as parameters for some function calls, e.g. to
-    set up global event handlers (Fl::add_handler()), to add a timeout handler
-    (Fl::add_timeout()), and many more.
-
-    The typedefs defined in this group describe the function parameters used to set
-    up or clear the callback functions and should also be referenced to define the
-    callback function to handle such events in the user's code.
-
-    \see Fl::add_handler(), Fl::add_timeout(), Fl::repeat_timeout(),
-	 Fl::remove_timeout() and others
-  @{ */
-
-/** Signature of some label drawing functions passed as parameters */
-typedef void (Fl_Label_Draw_F)(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align);
-
-/** Signature of some label measurement functions passed as parameters */
-typedef void (Fl_Label_Measure_F)(const Fl_Label *label, int &width, int &height);
-
-/** Signature of some box drawing functions passed as parameters */
-typedef void (Fl_Box_Draw_F)(int x, int y, int w, int h, Fl_Color color);
-
-/** Signature of some timeout callback functions passed as parameters */
-typedef void (*Fl_Timeout_Handler)(void *data);
-
-/** Signature of some wakeup callback functions passed as parameters */
-typedef void (*Fl_Awake_Handler)(void *data);
-
-/** Signature of add_idle callback functions passed as parameters */
-typedef void (*Fl_Idle_Handler)(void *data);
-
-/** Signature of set_idle callback functions passed as parameters */
-typedef void (*Fl_Old_Idle_Handler)();
-
-/** Signature of add_fd functions passed as parameters */
-typedef void (*Fl_FD_Handler)(FL_SOCKET fd, void *data);
-
-/** Signature of add_handler functions passed as parameters */
-typedef int (*Fl_Event_Handler)(int event);
-
-/** Signature of add_system_handler functions passed as parameters */
-typedef int (*Fl_System_Handler)(void *event, void *data);
-
-/** Signature of set_abort functions passed as parameters */
-typedef void (*Fl_Abort_Handler)(const char *format,...);
-
-/** Signature of set_atclose functions passed as parameters */
-typedef void (*Fl_Atclose_Handler)(Fl_Window *window, void *data);
-
-/** Signature of args functions passed as parameters */
-typedef int (*Fl_Args_Handler)(int argc, char **argv, int &i);
-
-/** Signature of event_dispatch functions passed as parameters.
-    \see Fl::event_dispatch(Fl_Event_Dispatch) */
-typedef int (*Fl_Event_Dispatch)(int event, Fl_Window *w);
-
-/** Signature of add_clipboard_notify functions passed as parameters */
-typedef void (*Fl_Clipboard_Notify_Handler)(int source, void *data);
-
-/** @} */ /* group callback_functions */
-
-
-/**
-  The Fl is the FLTK global (static) class containing
-  state information and global methods for the current application.
-*/
-class FL_EXPORT Fl {
-  Fl() {}; // no constructor!
-  
-private:
-  static int use_high_res_GL_;
-  
-public: // should be private!
-#ifndef FL_DOXYGEN
-  static int e_number;
-  static int e_x;
-  static int e_y;
-  static int e_x_root;
-  static int e_y_root;
-  static int e_dx;
-  static int e_dy;
-  static int e_state;
-  static int e_clicks;
-  static int e_is_click;
-  static int e_keysym;
-  static char* e_text;
-  static int e_length;
-  static void *e_clipboard_data;
-  static const char *e_clipboard_type;
-  static Fl_Event_Dispatch e_dispatch;
-  static Fl_Widget* belowmouse_;
-  static Fl_Widget* pushed_;
-  static Fl_Widget* focus_;
-  static int damage_;
-  static Fl_Widget* selection_owner_;
-  static Fl_Window* modal_;
-  static Fl_Window* grab_;
-  static int compose_state; // used for dead keys (WIN32) or marked text (MacOS)
-  static void call_screen_init(); // recompute screen number and dimensions
-#ifdef __APPLE__
-  static void reset_marked_text(); // resets marked text
-  static void insertion_point_location(int x, int y, int height); // sets window coordinates & height of insertion point
-#endif
-#endif // FL_DOXYGEN
-  
-  
-  /**
-    If true then flush() will do something.
-  */
-  static void damage(int d) {damage_ = d;}
-  
-public:
-  /** Enumerator for global FLTK options.
-      These options can be set system wide, per user, or for the running
-      application only.
-      \see Fl::option(Fl_Option, bool)
-      \see Fl::option(Fl_Option)
-  */
-  typedef enum {
-      /// When switched on, moving the text cursor beyond the start or end of
-      /// a text in a text widget will change focus to the next text widget.
-      /// (This is considered 'old' behavior)
-      ///
-      /// When switched off (default), the cursor will stop at the end of the text.
-      /// Pressing Tab or Ctrl-Tab will advance the keyboard focus.
-      ///
-      /// See also: Fl_Input_::tab_nav()
-      ///
-    OPTION_ARROW_FOCUS = 0,
-      // When switched on, FLTK will use the file chooser dialog that comes 
-      // with your operating system whenever possible. When switched off, FLTK
-      // will present its own file chooser.
-      // \todo implement me
-    // OPTION_NATIVE_FILECHOOSER,
-      // When Filechooser Preview is enabled, the FLTK or native file chooser
-      // will show a preview of a selected file (if possible) before the user
-      // decides to choose the file.
-      // \todo implement me
-    //OPTION_FILECHOOSER_PREVIEW,
-      /// If visible focus is switched on (default), FLTK will draw a dotted rectangle 
-      /// inside the widget that will receive the next keystroke. If switched
-      /// off, no such indicator will be drawn and keyboard navigation
-      /// is disabled.
-    OPTION_VISIBLE_FOCUS,
-      /// If text drag-and-drop is enabled (default), the user can select and drag text
-      /// from any text widget. If disabled, no dragging is possible, however
-      /// dropping text from other applications still works.
-    OPTION_DND_TEXT,
-      /// If tooltips are enabled (default), hovering the mouse over a widget with a 
-      /// tooltip text will open a little tooltip window until the mouse leaves
-      /// the widget. If disabled, no tooltip is shown.
-    OPTION_SHOW_TOOLTIPS,
-     /// When switched on (default), Fl_Native_File_Chooser runs GTK file dialogs
-     /// if the GTK library is available on the platform (linux/unix only).
-     /// When switched off, GTK file dialogs aren't used even if the GTK library is available.
-    OPTION_FNFC_USES_GTK,
-      // don't change this, leave it always as the last element
-      /// For internal use only.
-    OPTION_LAST
-  } Fl_Option;
-
-private:  
-  static unsigned char options_[OPTION_LAST];
-  static unsigned char options_read_;
-  
-public:  
-  /*
-   Return a global setting for all FLTK applications, possibly overridden
-   by a setting specifically for this application.
-   */
-  static bool option(Fl_Option opt);
-  
-  /*
-   Override an option while the application is running.
-   */
-  static void option(Fl_Option opt, bool val);
-  
-  /**
-    The currently executing idle callback function: DO NOT USE THIS DIRECTLY!
-    
-    This is now used as part of a higher level system allowing multiple
-    idle callback functions to be called.
-    \see add_idle(), remove_idle()
-  */
-  static void (*idle)();
-
-#ifndef FL_DOXYGEN
-  static Fl_Awake_Handler *awake_ring_;
-  static void **awake_data_;
-  static int awake_ring_size_;
-  static int awake_ring_head_;
-  static int awake_ring_tail_;
-  static const char* scheme_;
-  static Fl_Image* scheme_bg_;
-
-  static int e_original_keysym; // late addition
-  static int scrollbar_size_;
-#endif
-
-
-  static int add_awake_handler_(Fl_Awake_Handler, void*);
-  static int get_awake_handler_(Fl_Awake_Handler&, void*&);
-
-public:
-
-  // API version number
-  static double version();
-  static int api_version();
-
-  // ABI version number
-  static int abi_version();
-
-  /**
-    Returns whether the runtime library ABI version is correct.
-
-    This enables you to check the ABI version of the linked FLTK
-    library at runtime.
-
-    Returns 1 (true) if the compiled ABI version (in the header files)
-    and the linked library ABI version (used at runtime) are the same,
-    0 (false) otherwise.
-
-    Argument \p val can be used to query a particular library ABI version.
-    Use for instance 10303 to query if the runtime library is compatible
-    with FLTK ABI version 1.3.3. This is rarely useful.
-
-    The default \p val argument is FL_ABI_VERSION, which checks the version
-    defined at configure time (i.e. in the header files at program
-    compilation time) against the linked library version used at runtime.
-    This is particularly useful if you linked with a shared object library,
-    but it also concerns static linking.
-
-    \see Fl::abi_version()
-  */
-  static inline int abi_check(const int val = FL_ABI_VERSION) {
-    return val == abi_version();
-  }
-
-  // argument parsers:
-  static int arg(int argc, char **argv, int& i);
-  static int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0);
-  static void args(int argc, char **argv);
-  /**
-    Usage string displayed if Fl::args() detects an invalid argument.
-    This may be changed to point to customized text at run-time.
-  */
-  static const char* const help;
-
-  // things called by initialization:
-  static void display(const char*);
-  static int visual(int);
-  /**
-    This does the same thing as Fl::visual(int) but also requires OpenGL
-    drawing to work. This <I>must</I> be done if you want to draw in
-    normal windows with OpenGL with gl_start() and gl_end().
-    It may be useful to call this so your X windows use the same visual
-    as an Fl_Gl_Window, which on some servers will reduce colormap flashing.
-
-    See Fl_Gl_Window for a list of additional values for the argument.
-  */
-  static int gl_visual(int, int *alist=0); // platform dependent
-  static void own_colormap();
-  static void get_system_colors();
-  static void foreground(uchar, uchar, uchar);
-  static void background(uchar, uchar, uchar);
-  static void background2(uchar, uchar, uchar);
-
-  // schemes:
-  static int scheme(const char *name);
-  /** See void scheme(const char *name) */
-  static const char* scheme() {return scheme_;}
-
-  /** Returns whether the current scheme is the given name.
-
-    This is a fast inline convenience function to support scheme-specific
-    code in widgets, e.g. in their draw() methods, if required.
-
-    Use a valid scheme name, not \p NULL (although \p NULL is allowed,
-    this is not a useful argument - see below).
-
-    If Fl::scheme() has not been set or has been set to the default
-    scheme ("none" or "base"), then this will always return 0 regardless
-    of the argument, because Fl::scheme() is \p NULL in this case.
-
-    \note The stored scheme name is always lowercase, and this method will
-    do a case-sensitive compare, so you \b must provide a lowercase string to
-    return the correct value. This is intentional for performance reasons.
-
-    Example:
-    \code
-      if (Fl::is_scheme("gtk+")) { your_code_here(); }
-    \endcode
-
-    \param[in] name \b lowercase string of requested scheme name.
-
-    \return 1 if the given scheme is active, 0 otherwise.
-
-    \see Fl::scheme(const char *name)
-  */
-  static int is_scheme(const char *name) {
-    return (scheme_ && name && !strcmp(name,scheme_));
-  }
-  /**
-    Called by scheme according to scheme name. 
-    Loads or reloads the current scheme selection. 
-    See void scheme(const char *name) 
-  */
-  static int reload_scheme(); // platform dependent
-  static int scrollbar_size();
-  static void scrollbar_size(int W);
-
-  // execution:
-  static int wait();
-  static double wait(double time);
-  static int check();
-  static int ready();
-  static int run();
-  static Fl_Widget* readqueue();
-  /**
-  Adds a one-shot timeout callback.  The function will be called by
-  Fl::wait() at <i>t</i> seconds after this function is called.
-  The optional void* argument is passed to the callback.
-  
-  You can have multiple timeout callbacks. To remove a timeout
-  callback use Fl::remove_timeout().
-  
-  If you need more accurate, repeated timeouts, use Fl::repeat_timeout() to
-  reschedule the subsequent timeouts.
-  
-  The following code will print "TICK" each second on
-  stdout with a fair degree of accuracy:
-  
-  \code
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-void callback(void*) {
-  printf("TICK\n");
-  Fl::repeat_timeout(1.0, callback);    // retrigger timeout
-}
-int main() {
-  Fl_Window win(100,100);
-  win.show();
-  Fl::add_timeout(1.0, callback);       // set up first timeout
-  return Fl::run();
-}
-  \endcode
-  */
-  static void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
-  /**
-  Repeats a timeout callback from the expiration of the
-  previous timeout, allowing for more accurate timing. You may only call
-  this method inside a timeout callback.
-  
-  The following code will print "TICK" each second on
-  stdout with a fair degree of accuracy:
-  
-  \code
-     void callback(void*) {
-       puts("TICK");
-       Fl::repeat_timeout(1.0, callback);
-     }
-  
-     int main() {
-       Fl::add_timeout(1.0, callback);
-       return Fl::run();
-     }
-  \endcode
-  */
-  static void repeat_timeout(double t, Fl_Timeout_Handler, void* = 0); // platform dependent
-  static int  has_timeout(Fl_Timeout_Handler, void* = 0);
-  static void remove_timeout(Fl_Timeout_Handler, void* = 0);
-  static void add_check(Fl_Timeout_Handler, void* = 0);
-  static int  has_check(Fl_Timeout_Handler, void* = 0);
-  static void remove_check(Fl_Timeout_Handler, void* = 0);
-  /**
-    Adds file descriptor fd to listen to.
-    
-    When the fd becomes ready for reading Fl::wait() will call the
-    callback and then return. The callback is passed the fd and the
-    arbitrary void* argument.
-    
-    The second version takes a when bitfield, with the bits
-    FL_READ, FL_WRITE, and FL_EXCEPT defined,
-    to indicate when the callback should be done.
-    
-    There can only be one callback of each type for a file descriptor. 
-    Fl::remove_fd() gets rid of <I>all</I> the callbacks for a given
-    file descriptor.
-    
-    Under UNIX <I>any</I> file descriptor can be monitored (files,
-    devices, pipes, sockets, etc.). Due to limitations in Microsoft Windows,
-    WIN32 applications can only monitor sockets.
-  */
-  static void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent
-  /** See void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0) */
-  static void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent
-  /** Removes a file descriptor handler. */
-  static void remove_fd(int, int when); // platform dependent
-  /** Removes a file descriptor handler. */
-  static void remove_fd(int); // platform dependent
-
-  static void add_idle(Fl_Idle_Handler cb, void* data = 0);
-  static int  has_idle(Fl_Idle_Handler cb, void* data = 0);
-  static void remove_idle(Fl_Idle_Handler cb, void* data = 0);
-  /** If true then flush() will do something. */
-  static int damage() {return damage_;}
-  static void redraw();
-  static void flush();
-  /** \addtogroup group_comdlg
-    @{ */
-  /**
-  FLTK calls Fl::warning() to output a warning message.
-  
-  The default version on Windows returns \e without printing a warning
-  message, because Windows programs normally don't have stderr (a console
-  window) enabled.
-
-  The default version on all other platforms prints the warning message to stderr.
-
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::warning() means that there was a recoverable problem, the display may
-  be messed up, but the user can probably keep working - all X protocol
-  errors call this, for example. The default implementation returns after
-  displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*warning)(const char*, ...);
-  /**
-  FLTK calls Fl::error() to output a normal error message.
-  
-  The default version on Windows displays the error message in a MessageBox window.
-
-  The default version on all other platforms prints the error message to stderr.
-
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::error() means there is a recoverable error such as the inability to read
-  an image file. The default implementation returns after displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*error)(const char*, ...);
-  /**
-  FLTK calls Fl::fatal() to output a fatal error message.
-  
-  The default version on Windows displays the error message in a MessageBox window.
-
-  The default version on all other platforms prints the error message to stderr.
-  
-  You can override the behavior by setting the function pointer to your
-  own routine.
-
-  Fl::fatal() must not return, as FLTK is in an unusable state, however your
-  version may be able to use longjmp or an exception to continue, as long as
-  it does not call FLTK again. The default implementation exits with status 1
-  after displaying the message.
-   \note \#include <FL/Fl.H>
-  */
-  static void (*fatal)(const char*, ...);
-  /** @} */
-
-  /** \defgroup  fl_windows Windows handling functions
-      \brief Windows and standard dialogs handling declared in <FL/Fl.H>
-    @{ */
-  static Fl_Window* first_window();
-  static void first_window(Fl_Window*);
-  static Fl_Window* next_window(const Fl_Window*);
-
-  /**
-    Returns the top-most modal() window currently shown.
-
-    This is the most recently shown() window with modal() true, or NULL
-    if there are no modal() windows shown().
-    The modal() window has its handle() method called
-    for all events, and no other windows will have handle()
-    called (grab() overrides this).
-  */
-  static Fl_Window* modal() {return modal_;}
-  /** Returns the window that currently receives all events.
-   
-   \return The window that currently receives all events,
-   or NULL if event grabbing is currently OFF.
-  */
-  static Fl_Window* grab() {return grab_;}
-  /** Selects the window to grab.  
-   This is used when pop-up menu systems are active.
-   
-   Send all events to the passed window no matter where the pointer or
-   focus is (including in other programs). The window <I>does not have
-   to be shown()</I> , this lets the handle() method of a
-   "dummy" window override all event handling and allows you to
-   map and unmap a complex set of windows (under both X and WIN32
-   <I>some</I> window must be mapped because the system interface needs a
-   window id).
-   
-   If grab() is on it will also affect show() of windows by doing
-   system-specific operations (on X it turns on override-redirect).
-   These are designed to make menus popup reliably
-   and faster on the system.
-   
-   To turn off grabbing do Fl::grab(0).
-   
-   <I>Be careful that your program does not enter an infinite loop
-   while grab() is on.  On X this will lock up your screen!</I>
-   To avoid this potential lockup, all newer operating systems seem to 
-   limit mouse pointer grabbing to the time during which a mouse button 
-   is held down. Some OS's may not support grabbing at all.
-   */
-  static void grab(Fl_Window*); // platform dependent
-  /** @} */
-
-  /** \defgroup fl_events Events handling functions
-	Fl class events handling API declared in <FL/Fl.H>
-	@{
-  */
-  // event information:
-  /**
-    Returns the last event that was processed. This can be used
-    to determine if a callback is being done in response to a
-    keypress, mouse click, etc.
-  */
-  static int event()		{return e_number;}
-  /**
-    Returns the mouse position of the event relative to the Fl_Window
-    it was passed to.
-  */
-  static int event_x()	{return e_x;}
-  /**
-    Returns the mouse position of the event relative to the Fl_Window
-    it was passed to.
-  */
-  static int event_y()	{return e_y;}
-  /**
-    Returns the mouse position on the screen of the event.  To find the
-    absolute position of an Fl_Window on the screen, use the
-    difference between event_x_root(),event_y_root() and 
-    event_x(),event_y().
-  */
-  static int event_x_root()	{return e_x_root;}
-  /**
-    Returns the mouse position on the screen of the event.  To find the
-    absolute position of an Fl_Window on the screen, use the
-    difference between event_x_root(),event_y_root() and 
-    event_x(),event_y().
-  */
-  static int event_y_root()	{return e_y_root;}
-  /**
-    Returns the current horizontal mouse scrolling associated with the
-    FL_MOUSEWHEEL event. Right is positive.
-  */
-  static int event_dx()	{return e_dx;}
-  /**
-    Returns the current vertical mouse scrolling associated with the
-    FL_MOUSEWHEEL event. Down is positive.
-  */
-  static int event_dy()	{return e_dy;}
-  /**
-    Return where the mouse is on the screen by doing a round-trip query to
-    the server.  You should use Fl::event_x_root() and 
-    Fl::event_y_root() if possible, but this is necessary if you are
-    not sure if a mouse event has been processed recently (such as to
-    position your first window).  If the display is not open, this will
-    open it.
-  */
-  static void get_mouse(int &,int &); // platform dependent
-  /**
-    Returns non zero if we had a double click event.
-    \retval Non-zero if the most recent FL_PUSH or FL_KEYBOARD was a "double click".  
-    \retval  N-1 for  N clicks. 
-    A double click is counted if the same button is pressed
-    again while event_is_click() is true.
-    
-   */
-  static int event_clicks()	{return e_clicks;}
-  /**
-    Manually sets the number returned by Fl::event_clicks().  
-    This can be used to set it to zero so that
-    later code does not think an item was double-clicked.
-    \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise
-    \see int event_clicks()
-  */
-  static void event_clicks(int i) {e_clicks = i;}
-  /**
-  Returns non-zero if the mouse has not moved far enough
-  and not enough time has passed since the last FL_PUSH or 
-  FL_KEYBOARD event for it to be considered a "drag" rather than a
-  "click".  You can test this on FL_DRAG, FL_RELEASE,
-  and FL_MOVE events.  
-  */
-  static int event_is_click()	{return e_is_click;}
-  /**
-   Clears the value returned by Fl::event_is_click().  
-   Useful to prevent the <I>next</I>
-   click from being counted as a double-click or to make a popup menu
-   pick an item with a single click.  Don't pass non-zero to this. 
-  */
-  static void event_is_click(int i) {e_is_click = i;}
-  /**
-    Gets which particular mouse button caused the current event.
-
-    This returns garbage if the most recent event was not a FL_PUSH or FL_RELEASE event.
-    \retval FL_LEFT_MOUSE
-    \retval FL_MIDDLE_MOUSE
-    \retval FL_RIGHT_MOUSE.
-    \see Fl::event_buttons()
-  */
-  static int event_button()	{return e_keysym-FL_Button;}
-  /**
-    Returns the keyboard and mouse button states of the last event.
-
-    This is a bitfield of what shift states were on and what mouse buttons
-    were held down during the most recent event.
-
-    The legal event state bits are:
-
-    - FL_SHIFT
-    - FL_CAPS_LOCK
-    - FL_CTRL
-    - FL_ALT
-    - FL_NUM_LOCK
-    - FL_META
-    - FL_SCROLL_LOCK
-    - FL_BUTTON1
-    - FL_BUTTON2
-    - FL_BUTTON3
-    
-    X servers do not agree on shift states, and FL_NUM_LOCK, FL_META, and
-    FL_SCROLL_LOCK may not work. The values were selected to match the
-    XFree86 server on Linux. In addition there is a bug in the way X works
-    so that the shift state is not correctly reported until the first event
-    <I>after</I> the shift key is pressed or released.
-  */
-  static int event_state()	{return e_state;}
-
-  /** Returns non-zero if any of the passed event state bits are turned on.
-
-    Use \p mask to pass the event states you're interested in.
-    The legal event state bits are defined in Fl::event_state().
-  */
-  static int event_state(int mask) {return e_state&mask;}
-  /**
-    Gets which key on the keyboard was last pushed.
-
-    The returned integer 'key code' is not necessarily a text
-    equivalent for the keystroke. For instance: if someone presses '5' on the 
-    numeric keypad with numlock on, Fl::event_key() may return the 'key code'
-    for this key, and NOT the character '5'. To always get the '5', use Fl::event_text() instead.
-    
-    \returns an integer 'key code', or 0 if the last event was not a key press or release.
-    \see int event_key(int), event_text(), compose(int&).
-  */
-  static int event_key()	{return e_keysym;}
-  /**
-    Returns the keycode of the last key event, regardless of the NumLock state.
-      
-    If NumLock is deactivated, FLTK translates events from the 
-    numeric keypad into the corresponding arrow key events. 
-    event_key() returns the translated key code, whereas
-    event_original_key() returns the keycode before NumLock translation.
-  */
-  static int event_original_key(){return e_original_keysym;}
-  /** 
-    Returns true if the given \p key was held
-    down (or pressed) <I>during</I> the last event.  This is constant until
-    the next event is read from the server.
-    
-    Fl::get_key(int) returns true if the given key is held down <I>now</I>.
-    Under X this requires a round-trip to the server and is <I>much</I>
-    slower than Fl::event_key(int).
-    
-    Keys are identified by the <I>unshifted</I> values. FLTK defines a
-    set of symbols that should work on most modern machines for every key
-    on the keyboard:
-    
-    \li All keys on the main keyboard producing a printable ASCII
-	character use the value of that ASCII character (as though shift,
-	ctrl, and caps lock were not on). The space bar is 32.
-    \li All keys on the numeric keypad producing a printable ASCII
-	character use the value of that ASCII character plus FL_KP.
-	The highest possible value is FL_KP_Last so you can
-	range-check to see if something is  on the keypad.
-    \li All numbered function keys use the number on the function key plus 
-	FL_F.  The highest possible number is FL_F_Last, so you
-	can range-check a value.
-    \li Buttons on the mouse are considered keys, and use the button
-	number (where the left button is 1) plus FL_Button.
-    \li All other keys on the keypad have a symbol: FL_Escape,
-	FL_BackSpace, FL_Tab, FL_Enter, FL_Print, FL_Scroll_Lock, FL_Pause,
-	FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down,
-	FL_Left, FL_Up, FL_Right, FL_Down, FL_Iso_Key, FL_Shift_L, FL_Shift_R,
-	FL_Control_L, FL_Control_R, FL_Caps_Lock, FL_Alt_L, FL_Alt_R,
-	FL_Meta_L, FL_Meta_R, FL_Menu, FL_Num_Lock, FL_KP_Enter.  Be
-	careful not to confuse these with the very similar, but all-caps,
-	symbols used by Fl::event_state().
-
-    On X Fl::get_key(FL_Button+n) does not work.
-    
-    On WIN32 Fl::get_key(FL_KP_Enter) and Fl::event_key(FL_KP_Enter) do not work.
-  */
-  static int event_key(int key);
-  /** 
-    Returns true if the given \p key is held down <I>now</I>.  
-    Under X this requires a round-trip to the server and is <I>much</I>
-    slower than Fl::event_key(int). \see event_key(int)
-  */
-  static int get_key(int key); // platform dependent
-  /** 
-    Returns the text associated with the current event, including FL_PASTE or FL_DND_RELEASE events.
-    This can be used in response to FL_KEYUP, FL_KEYDOWN, FL_PASTE, and FL_DND_RELEASE.
-
-    When responding to FL_KEYUP/FL_KEYDOWN, use this function instead of Fl::event_key()
-    to get the text equivalent of keystrokes suitable for inserting into strings 
-    and text widgets.
-
-    The returned string is guaranteed to be NULL terminated.
-    However, see Fl::event_length() for the actual length of the string,
-    in case the string itself contains NULLs that are part of the text data.
-
-    \returns A NULL terminated text string equivalent of the last keystroke.
-   */
-  static const char* event_text() {return e_text;}
-  /**
-    Returns the length of the text in Fl::event_text(). There
-    will always be a nul at this position in the text. However there may
-    be a nul before that if the keystroke translates to a nul character or
-    you paste a nul character.
-  */
-  static int event_length() {return e_length;}
-  
-  /** During an FL_PASTE event of non-textual data, returns a pointer to the pasted data.
-   The returned data is an Fl_Image * when the result of Fl::event_clipboard_type() is Fl::clipboard_image.
-   */
-  static void *event_clipboard() { return e_clipboard_data; }
-  /** Returns the type of the pasted data during an FL_PASTE event.
-   This type can be Fl::clipboard_plain_text or Fl::clipboard_image.
-   */
-  static const char *event_clipboard_type() {return e_clipboard_type; }
-
-
-  static int compose(int &del);
-  static void compose_reset();
-  static int event_inside(int,int,int,int);
-  static int event_inside(const Fl_Widget*);
-  static int test_shortcut(Fl_Shortcut);
-
-  /**
-    Enables the system input methods facilities. This is the default.
-    \see disable_im()
-  */
-  static void enable_im();
-  /**
-    Disables the system input methods facilities.
-    \see enable_im()
-  */
-  static void disable_im();
-
-  // event destinations:
-  static int handle(int, Fl_Window*);
-  static int handle_(int, Fl_Window*);
-  /**  Gets the widget that is below the mouse. 
-       \see  belowmouse(Fl_Widget*) */
-  static Fl_Widget* belowmouse() {return belowmouse_;}
-  static void belowmouse(Fl_Widget*);
-  /** Gets the widget that is being pushed.
-      \see void pushed(Fl_Widget*) */
-  static Fl_Widget* pushed()	{return pushed_;}
-  static void pushed(Fl_Widget*);
-  /** Gets the current Fl::focus() widget. \sa Fl::focus(Fl_Widget*) */
-  static Fl_Widget* focus()	{return focus_;}
-  static void focus(Fl_Widget*);
-  static void add_handler(Fl_Event_Handler h);
-  static void remove_handler(Fl_Event_Handler h);
-  static void add_system_handler(Fl_System_Handler h, void *data);
-  static void remove_system_handler(Fl_System_Handler h);
-  static void event_dispatch(Fl_Event_Dispatch d);
-  static Fl_Event_Dispatch event_dispatch();
-  /** @} */
-
-  /** \defgroup  fl_clipboard  Selection & Clipboard functions
-	FLTK global copy/cut/paste functions declared in <FL/Fl.H>
-   @{ */
-  // cut/paste:
-  /**
-  Copies the data pointed to by \p stuff to the selection buffer 
-  (\p destination is 0), the clipboard (\p destination is 1), or
-  both (\p destination is 2). Copying to both is only relevant on X11,
-  on other platforms it maps to the clipboard (1).
-  \p len is the number of relevant bytes in \p stuff.
-  \p type is always Fl::clipboard_plain_text.
-  The selection buffer is used for
-  middle-mouse pastes and for drag-and-drop selections. The 
-  clipboard is used for traditional copy/cut/paste operations.
-   
-   \note This function is, at present, intended only to copy UTF-8 encoded textual data.
-   To copy graphical data, use the Fl_Copy_Surface class. The \p type argument may allow
-   in the future to copy other kinds of data.
-  */
-#if FLTK_ABI_VERSION >= 10303 || defined(FL_DOXYGEN)
-  static void copy(const char* stuff, int len, int destination = 0, const char *type = Fl::clipboard_plain_text); // platform dependent
-#else
-  static void copy(const char* stuff, int len, int destination, const char *type);
-  static void copy(const char* stuff, int len, int destination = 0);
-#endif
-  
-#if !(defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN))
-  static void copy_image(const unsigned char* data, int W, int H, int destination = 0); // platform dependent
-#endif
-  /**
-  Pastes the data from the selection buffer (\p source is 0) or the clipboard 
-  (\p source is 1) into \p receiver.  
-
-  The selection buffer (\p source is 0) is used for middle-mouse pastes and for
-  drag-and-drop selections. The clipboard (\p source is 1) is used for
-  copy/cut/paste operations.
-
-  If \p source is 1, the optional \p type argument indicates what type of data is requested from the clipboard.
-  At present, Fl::clipboard_plain_text (requesting text data) and
-  Fl::clipboard_image (requesting image data) are possible.
-  Set things up so the handle function of the \p receiver widget will be called with an FL_PASTE event some
-  time in the future if the clipboard does contain data of the requested type. 
-  While processing the FL_PASTE event:
-  \li if \p type is Fl::clipboard_plain_text, the text string from the specified \p source is in Fl::event_text()
-   with UTF-8 encoding, and the number of bytes in Fl::event_length(). 
-   If Fl::paste() gets called during the drop step of a files-drag-and-drop operation,
-   Fl::event_text() contains a list of filenames (see \ref events_dnd).
-  \li if \p type is Fl::clipboard_image, the pointer returned by Fl::event_clipboard() can be safely cast to
-   type Fl_Image * to obtain a pointer to the pasted image. Furthermore, starting with FLTK 1.3.4, the image is
-   of type Fl_RGB_Image across all platforms. 
-   If \p receiver accepts the clipboard image, receiver.handle() should return 1 and the
-   application should take ownership of this image (that is, delete it after use). 
-   Conversely, if receiver.handle() returns 0, the application must not use the image.
-
-  The receiver should be prepared to be called \e directly by this, or for
-  it to happen \e later, or possibly <i>not at all</i>.  This
-  allows the window system to take as long as necessary to retrieve
-  the paste buffer (or even to screw up completely) without complex
-  and error-prone synchronization code in FLTK.
-
-   \par Platform details for image data:
-   \li Unix/Linux platform: Clipboard images in PNG or BMP formats are recognized. Requires linking with the fltk_images library.
-   \li MSWindows platform: Both bitmap and vectorial (Enhanced metafile) data from clipboard
-   can be pasted as image data.
-   \li Mac OS X platform: Both bitmap (TIFF) and vectorial (PDF) data from clipboard
-   can be pasted as image data.
-   */
-#if FLTK_ABI_VERSION >= 10303 || defined(FL_DOXYGEN)
-  static void paste(Fl_Widget &receiver, int source, const char *type = Fl::clipboard_plain_text); // platform dependent
-#else
-  static void paste(Fl_Widget &receiver, int source, const char *type);
-  static void paste(Fl_Widget &receiver, int source /*=0*/);
-#endif
-  /**
-  FLTK will call the registered callback whenever there is a change to the
-  selection buffer or the clipboard. The source argument indicates which
-  of the two has changed. Only changes by other applications are reported.
-
-  Example:
-  \code
-    void clip_callback(int source, void *data) {
-        if ( source == 0 ) printf("CLIP CALLBACK: selection buffer changed\n");
-	if ( source == 1 ) printf("CLIP CALLBACK: clipboard changed\n");
-    }
-    [..]
-    int main() {
-        [..]
-	Fl::add_clipboard_notify(clip_callback);
-	[..]
-    }
-  \endcode
-  \note Some systems require polling to monitor the clipboard and may
-  therefore have some delay in detecting changes.
-  */
-  static void add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data = 0);
-  /**
-  Stop calling the specified callback when there are changes to the selection
-  buffer or the clipboard.
-  */
-  static void remove_clipboard_notify(Fl_Clipboard_Notify_Handler h);
-  /** Returns non 0 if the clipboard contains data matching \p type.
-   \p type can be Fl::clipboard_plain_text or Fl::clipboard_image.
-   */
-  static int clipboard_contains(const char *type);
-  /**  Denotes plain textual data
-   */
-  static char const * const clipboard_plain_text;
-  /**  Denotes image data
-   */
-  static char const * const clipboard_image;
-
-  /**
-    Initiate a Drag And Drop operation. The selection buffer should be
-    filled with relevant data before calling this method. FLTK will
-    then initiate the system wide drag and drop handling. Dropped data
-    will be marked as <i>text</i>.
-   
-    Create a selection first using:
-    Fl::copy(const char *stuff, int len, 0)
-  */
-  static int dnd(); // platform dependent
-
-  // These are for back-compatibility only:
-  /**  back-compatibility only: Gets the widget owning the current selection  
-       \see Fl_Widget* selection_owner(Fl_Widget*) */
-  static Fl_Widget* selection_owner() {return selection_owner_;}
-  static void selection_owner(Fl_Widget*);
-  static void selection(Fl_Widget &owner, const char*, int len);
-  static void paste(Fl_Widget &receiver);
-/** @} */
-/** \defgroup  fl_screen  Screen functions
-	fl global screen functions declared in <FL/Fl.H>
-     @{ */
-  // screen size:
-  /** Returns the leftmost x coordinate of the main screen work area. */
-  static int x(); // platform dependent
-  /** Returns the topmost y coordinate of the main screen work area. */
-  static int y(); // platform dependent
-  /** Returns the width in pixels of the main screen work area. */
-  static int w(); // platform dependent
-  /** Returns the height in pixels of the main screen work area. */
-  static int h(); // platform dependent
-
-  // multi-head support:
-  static int screen_count();
-  /** 
-      Gets the bounding box of a screen that contains the mouse pointer.
-      \param[out]  X,Y,W,H the corresponding screen bounding box
-      \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 
-  */
-  static void screen_xywh(int &X, int &Y, int &W, int &H) {
-    int x, y;
-    Fl::get_mouse(x, y);
-    screen_xywh(X, Y, W, H, x, y);
-  }
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int n); 
-  static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh);
-  static int screen_num(int x, int y);
-  static int screen_num(int x, int y, int w, int h);
-  static void screen_dpi(float &h, float &v, int n=0);
-  static void screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my);
-  static void screen_work_area(int &X, int &Y, int &W, int &H, int n);
-  /** 
-   Gets the bounding box of the work area of the screen that contains the mouse pointer.
-   \param[out]  X,Y,W,H the work area bounding box
-   \see void screen_work_area(int &x, int &y, int &w, int &h, int mx, int my) 
-   */
-  static void screen_work_area(int &X, int &Y, int &W, int &H) {
-    int x, y;
-    Fl::get_mouse(x, y);
-    screen_work_area(X, Y, W, H, x, y);
-  }
-
-  /**   @} */
-
-  /** \defgroup  fl_attributes  Color & Font functions
-	fl global color, font functions.
-   These functions are declared in <FL/Fl.H> or <FL/fl_draw.H>. 
-     @{ */
- 
-  // color map:
-  static void	set_color(Fl_Color, uchar, uchar, uchar);
-  /**
-    Sets an entry in the fl_color index table. You can set it to any
-    8-bit RGB color. The color is not allocated until fl_color(i) is used.
-  */
-  static void	set_color(Fl_Color i, unsigned c); // platform dependent
-  static unsigned get_color(Fl_Color i);
-  static void	get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue);
-  /**
-    Frees the specified color from the colormap, if applicable.
-    If overlay is non-zero then the color is freed from the
-    overlay colormap.
-  */
-  static void	free_color(Fl_Color i, int overlay = 0); // platform dependent
-
-  // fonts:
-  static const char* get_font(Fl_Font);
-  /**
-    Get a human-readable string describing the family of this face.  This
-    is useful if you are presenting a choice to the user.  There is no
-    guarantee that each face has a different name.  The return value points
-    to a static buffer that is overwritten each call.
-    
-    The integer pointed to by \p attributes (if the pointer is not
-    zero) is set to zero, FL_BOLD or FL_ITALIC or 
-    FL_BOLD | FL_ITALIC.  To locate a "family" of fonts, search
-    forward and back for a set with non-zero attributes, these faces along
-    with the face with a zero attribute before them constitute a family.
-  */
-  static const char* get_font_name(Fl_Font, int* attributes = 0);
-  /**
-    Return an array of sizes in \p sizep.  The return value is the
-    length of this array.  The sizes are sorted from smallest to largest
-    and indicate what sizes can be given to fl_font() that will
-    be matched exactly (fl_font() will pick the closest size for
-    other sizes).  A zero in the first location of the array indicates a
-    scalable font, where any size works, although the array may list sizes
-    that work "better" than others.  Warning: the returned array
-    points at a static buffer that is overwritten each call.  Under X this
-    will open the display.
-  */
-  static int get_font_sizes(Fl_Font, int*& sizep);
-  static void set_font(Fl_Font, const char*);
-  static void set_font(Fl_Font, Fl_Font);
-  /**
-    FLTK will open the display, and add every fonts on the server to the
-    face table.  It will attempt to put "families" of faces together, so
-    that the normal one is first, followed by bold, italic, and bold
-    italic.
-    
-    The optional argument is a string to describe the set of fonts to
-    add.  Passing NULL will select only fonts that have the
-    ISO8859-1 character set (and are thus usable by normal text).  Passing
-    "-*" will select all fonts with any encoding as long as they have
-    normal X font names with dashes in them.  Passing "*" will list every
-    font that exists (on X this may produce some strange output).  Other
-    values may be useful but are system dependent.  With WIN32 NULL
-    selects fonts with ISO8859-1 encoding and non-NULL selects
-    all fonts.
-    
-    The return value is how many faces are in the table after this is done.
-  */
-  static Fl_Font set_fonts(const char* = 0); // platform dependent
-
-  /**   @} */
- /** \defgroup  fl_drawings  Drawing functions
-  FLTK global graphics and GUI drawing functions.
-  These functions are declared in <FL/fl_draw.H>, 
-  and in <FL/x.H> for offscreen buffer-related ones.
-     @{ */
-  // <Hack to re-order the 'Drawing functions' group>
- /** @} */
-
-  // labeltypes:
-  static void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*);
-  /** Sets the functions to call to draw and measure a specific labeltype. */
-  static void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ?
-
-  // boxtypes:
-  static Fl_Box_Draw_F *get_boxtype(Fl_Boxtype);
-  static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar);
-  static void set_boxtype(Fl_Boxtype, Fl_Boxtype from);
-  static int box_dx(Fl_Boxtype);
-  static int box_dy(Fl_Boxtype);
-  static int box_dw(Fl_Boxtype);
-  static int box_dh(Fl_Boxtype);
-
-  static int draw_box_active();
-  static Fl_Color box_color(Fl_Color);
-  static void set_box_color(Fl_Color);
-
-  // back compatibility:
-  /** \addtogroup fl_windows 
-    @{ */
-  /** For back compatibility, sets the void Fl::fatal handler callback */
-  static void set_abort(Fl_Abort_Handler f) {fatal = f;}
-  static void (*atclose)(Fl_Window*,void*);
-  static void default_atclose(Fl_Window*,void*);
-  /** For back compatibility, sets the Fl::atclose handler callback. You
-      can now simply change the callback for the window instead.
-      \see Fl_Window::callback(Fl_Callback*) */
-  static void set_atclose(Fl_Atclose_Handler f) {atclose = f;}
-  /**   @} */
-
-  /** \addtogroup fl_events 
-    @{ */
-  /** Returns non-zero if the Shift key is pressed. */
-  static int event_shift() {return e_state&FL_SHIFT;}
-  /** Returns non-zero if the Control key is pressed. */
-  static int event_ctrl() {return e_state&FL_CTRL;}
-  /** Returns non-zero if the FL_COMMAND key is pressed, either FL_CTRL or on OSX FL_META. */
-  static int event_command() {return e_state&FL_COMMAND;}
-  /** Returns non-zero if the Alt key is pressed. */
-  static int event_alt() {return e_state&FL_ALT;}
-  /**
-    Returns the mouse buttons state bits; if non-zero, then at least one
-    button is pressed now.  This function returns the button state at the 
-    time of the event. During an FL_RELEASE event, the state 
-    of the released button will be 0. To find out, which button 
-    caused an FL_RELEASE event, you can use Fl::event_button() instead.
-    \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | [FL_BUTTON3] }
-  */
-  static int event_buttons() {return e_state&0x7f000000;}
-  /**
-    Returns non-zero if mouse button 1 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button1() {return e_state&FL_BUTTON1;}
-  /**
-    Returns non-zero if button 2 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button2() {return e_state&FL_BUTTON2;}
-  /**
-    Returns non-zero if button 3 is currently held down.
-    For more details, see Fl::event_buttons().
-  */
-  static int event_button3() {return e_state&FL_BUTTON3;}
-  /**   @} */
-
-  /**
-    Sets an idle callback.
-
-    \deprecated This method is obsolete - use the add_idle() method instead.
-  */
-  static void set_idle(Fl_Old_Idle_Handler cb) {idle = cb;}
-  /** See grab(Fl_Window*) */
-  static void grab(Fl_Window& win) {grab(&win);}
-  /** Releases the current grabbed window, equals grab(0).
-  \deprecated Use Fl::grab(0) instead.
-  \see grab(Fl_Window*) */
-  static void release() {grab(0);}
-
-  // Visible focus methods...
-  /**
-    Gets or sets the visible keyboard focus on buttons and other
-    non-text widgets. The default mode is to enable keyboard focus
-    for all widgets.
-  */
-  static void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); }
-  /**
-    Gets or sets the visible keyboard focus on buttons and other
-    non-text widgets. The default mode is to enable keyboard focus
-    for all widgets.
-  */
-  static int  visible_focus() { return option(OPTION_VISIBLE_FOCUS); }
-
-  // Drag-n-drop text operation methods...
-  /**
-    Gets or sets whether drag and drop text operations are supported.
-    This specifically affects whether selected text can
-    be dragged from text fields or dragged within a text field as a
-    cut/paste shortcut.
-  */
-  static void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); }
-  /**
-    Gets or sets whether drag and drop text operations are
-    supported. This specifically affects whether selected text can
-    be dragged from text fields or dragged within a text field as a
-    cut/paste shortcut.
-  */
-  static int  dnd_text_ops() { return option(OPTION_DND_TEXT); }
-  /** \defgroup fl_multithread Multithreading support functions
-	fl multithreading support functions declared in <FL/Fl.H>
-   @{ */
-
-  // Multithreading support:
-  static int lock();
-  static void unlock();
-  static void awake(void* message = 0);
-  /** See void awake(void* message=0). */
-  static int awake(Fl_Awake_Handler cb, void* message = 0);
-  /**
-    The thread_message() method returns the last message
-    that was sent from a child by the awake() method.
-    
-    See also: \ref advanced_multithreading
-  */
-  static void* thread_message(); // platform dependent
-  /** @} */
-
-  /** \defgroup fl_del_widget Safe widget deletion support functions
-
-    These functions, declared in <FL/Fl.H>, support deletion of widgets inside callbacks.
-
-    Fl::delete_widget() should be called when deleting widgets
-    or complete widget trees (Fl_Group, Fl_Window, ...) inside
-    callbacks.
-
-    The other functions are intended for internal use. The preferred
-    way to use them is by using the helper class Fl_Widget_Tracker.
-
-    The following is to show how it works ...
-
-    There are three groups of related methods:
-
-      -# scheduled widget deletion
-	- Fl::delete_widget() schedules widgets for deletion
-	- Fl::do_widget_deletion() deletes all scheduled widgets
-      -# widget watch list ("smart pointers")
-	- Fl::watch_widget_pointer() adds a widget pointer to the watch list
-	- Fl::release_widget_pointer() removes a widget pointer from the watch list
-	- Fl::clear_widget_pointer() clears a widget pointer \e in the watch list
-      -# the class Fl_Widget_Tracker:
-	- the constructor calls Fl::watch_widget_pointer()
-	- the destructor calls Fl::release_widget_pointer()
-	- the access methods can be used to test, if a widget has been deleted
-	  \see Fl_Widget_Tracker.
-
-   @{ */
-  // Widget deletion:
-  static void delete_widget(Fl_Widget *w);
-  static void do_widget_deletion();
-  static void watch_widget_pointer(Fl_Widget *&w);
-  static void release_widget_pointer(Fl_Widget *&w);
-  static void clear_widget_pointer(Fl_Widget const *w);
-  /** @} */
-  
-  /**  sets whether GL windows should be drawn at high resolution on Apple
-   computers with retina displays
-   \version 1.3.4
-   */
-  static void use_high_res_GL(int val) { use_high_res_GL_ = val; }
-  /**  returns whether GL windows should be drawn at high resolution on Apple
-   computers with retina displays.
-   Default is no.
-   \version 1.3.4
-   */
-  static int use_high_res_GL() { return use_high_res_GL_; }
-
-#ifdef FLTK_HAVE_CAIRO
-  /** \defgroup group_cairo Cairo Support Functions and Classes
-      @{ 
-  */
-public:
-  // Cairo support API
-  static cairo_t * cairo_make_current(Fl_Window* w);
-   /** when FLTK_HAVE_CAIRO is defined and cairo_autolink_context() is true,
-      any current window dc is linked to a current cairo context.
-      This is not the default, because it may not be necessary
-      to add cairo support to all fltk supported windows.
-      When you wish to associate a cairo context in this mode,
-      you need to call explicitly in your draw() overridden method,
-      Fl::cairo_make_current(Fl_Window*). This will create a cairo context
-      but only for this Window. 
-      Still in custom cairo application it is possible to handle 
-      completely this process automatically by setting \p alink to true.
-      In this last case, you don't need anymore to call Fl::cairo_make_current().
-      You can use Fl::cairo_cc() to get the current cairo context anytime.
-     \note Only available when configure has the --enable-cairo option
-  */
-  static void cairo_autolink_context(bool alink) {cairo_state_.autolink(alink);}
-  /** 
-    Gets the current autolink mode for cairo support.
-    \retval false if no cairo context autolink is made for each window. 
-    \retval true if any fltk window is attached a cairo context when it 
-    is current. \see void cairo_autolink_context(bool alink) 
-    \note Only available when configure has the --enable-cairo option
- */
-  static bool cairo_autolink_context() {return cairo_state_.autolink();}
-  /** Gets the current cairo context linked with a fltk window. */
-  static cairo_t * cairo_cc() { return cairo_state_.cc(); }
-  /** Sets the current cairo context to \p c.
-      Set \p own to true if you want fltk to handle this cc deletion.
-     \note Only available when configure has the --enable-cairo option
-*/
-  static void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); } 
-
-private:
-  static cairo_t * cairo_make_current(void* gc);
-  static cairo_t * cairo_make_current(void* gc, int W, int H);
-  static Fl_Cairo_State cairo_state_;
-public:
-  /** @} */ 
-
-#endif // FLTK_HAVE_CAIRO
-
-};
-
-/**
-  This class should be used to control safe widget deletion.
-
-  You can use an Fl_Widget_Tracker object to watch another widget, if you
-  need to know, if this widget has been deleted during a callback.
-
-  This simplifies the use of the "safe widget deletion" methods
-  Fl::watch_widget_pointer() and Fl::release_widget_pointer() and
-  makes their use more reliable, because the destructor autmatically
-  releases the widget pointer from the widget watch list.
-
-  It is intended to be used as an automatic (local/stack) variable,
-  such that the automatic destructor is called when the object's
-  scope is left. This ensures that no stale widget pointers are
-  left in the widget watch list (see example below).
-  
-  You can also create Fl_Widget_Tracker objects with \c new, but then it
-  is your responsibility to delete the object (and thus remove the
-  widget pointer from the watch list) when it is not needed any more.
-
-  Example:
-
-  \code
-    int MyClass::handle (int event) {
-
-      if (...) {
-	Fl_Widget_Tracker wp(this);	// watch myself
-	do_callback();			// call the callback
-
-	if (wp.deleted()) return 1;	// exit, if deleted
-
-	// Now we are sure that the widget has not been deleted.
-	// It is safe to access the widget
-
-	clear_changed();		// access the widget
-      }
-    }
-  \endcode
-
-*/
-class FL_EXPORT Fl_Widget_Tracker {
-
-  Fl_Widget* wp_;
-
-public:
-
-  Fl_Widget_Tracker(Fl_Widget *wi);
-  ~Fl_Widget_Tracker();
-
-  /**
-    Returns a pointer to the watched widget.
-
-    This pointer is \c NULL, if the widget has been deleted.
-  */
-  Fl_Widget *widget() {return wp_;}
-
-  /**
-    Returns 1, if the watched widget has been deleted.
-
-    This is a convenience method. You can also use something like
-
-    <tt>  if (wp.widget() == 0) // ...</tt>
-
-    where \p wp is an Fl_Widget_Tracker object.
-  */
-  int deleted() {return wp_ == 0;}
-
-  /**
-    Returns 1, if the watched widget exists (has not been deleted).
-
-    This is a convenience method. You can also use something like
-
-    <tt>  if (wp.widget() != 0) // ...</tt>
-
-    where \p wp is an Fl_Widget_Tracker object.
-  */
-  int exists()  {return wp_ != 0;}
-
-};
-
- /** \defgroup  fl_unicode  Unicode and UTF-8 functions
-	fl global Unicode and UTF-8 handling functions declared in <FL/fl_utf8.h>
-     @{ */
- /** @} */
-
-#endif // !Fl_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Adjuster.H
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Adjuster widget header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Adjuster widget . */
-
-// 3-button "slider", made for Nuke
-
-#ifndef Fl_Adjuster_H
-#define Fl_Adjuster_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Adjuster widget was stolen from Prisms, and has proven
-  to be very useful for values that need a large dynamic range.
-  \image html adjuster1.png 
-  \image latex adjuster1.png "Fl_Adjuster" width=4cm
-  <P>When you  press a button and drag to the right the value increases.
-  When you drag  to the left it decreases.  The largest button adjusts by
-  100 *  step(), the next by 10 * step() and that
-  smallest button  by step().  Clicking on the buttons
-  increments by 10 times the  amount dragging by a pixel does. Shift +
-  click decrements by 10 times  the amount.
-*/
-class FL_EXPORT Fl_Adjuster : public Fl_Valuator {
-  int drag;
-  int ix;
-  int soft_;
-protected:
-  void draw();
-  int handle(int);
-  void value_damage();
-public:
-  Fl_Adjuster(int X,int Y,int W,int H,const char *l=0);
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  void soft(int s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  int soft() const {return soft_;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_BMP_Image.H
+++ /dev/null
@@ -1,41 +1,0 @@
-//
-// "$Id$"
-//
-// BMP image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_BMP_Image widget . */
-
-#ifndef Fl_BMP_Image_H
-#define Fl_BMP_Image_H
-#  include "Fl_Image.H"
-
-/**
- The Fl_BMP_Image class supports loading, caching,
- and drawing of Windows Bitmap (BMP) image files. 
- */
-class FL_EXPORT Fl_BMP_Image : public Fl_RGB_Image {
-
-  public:
-
-  Fl_BMP_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Bitmap.H
+++ /dev/null
@@ -1,78 +1,0 @@
-//
-// "$Id$"
-//
-// Bitmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Bitmap widget . */
-
-#ifndef Fl_Bitmap_H
-#define Fl_Bitmap_H
-#  include "Fl_Image.H"
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-/**
-  The Fl_Bitmap class supports caching and drawing of mono-color
-  (bitmap) images. Images are drawn using the current color.
-*/
-class FL_EXPORT Fl_Bitmap : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_GDI_Printer_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-public:
-
-  /** pointer to raw bitmap data */
-  const uchar *array;
-  /** Non-zero if array points to bitmap data allocated internally */
-  int alloc_array;
-  
-  private:
-  int start(int XP, int YP, int WP, int HP, int &cx, int &cy, 
-	    int &X, int &Y, int &W, int &H);
-#if defined(__APPLE__) || defined(WIN32)
-  /** for internal use */
-  void *id_;
-#else
-  /** for internal use */
-  unsigned id_;
-#endif // __APPLE__ || WIN32
-
-  public:
-
-  /** The constructors create a new bitmap from the specified bitmap data */
-  Fl_Bitmap(const uchar *bits, int W, int H) :
-    Fl_Image(W,H,0), array(bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
-  /** The constructors create a new bitmap from the specified bitmap data */
-  Fl_Bitmap(const char *bits, int W, int H) :
-    Fl_Image(W,H,0), array((const uchar *)bits), alloc_array(0), id_(0) {data((const char **)&array, 1);}
-  virtual ~Fl_Bitmap();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Box.H
+++ /dev/null
@@ -1,59 +1,0 @@
-//
-// "$Id$"
-//
-// Box header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Box widget . */
-
-#ifndef Fl_Box_H
-#define Fl_Box_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  This widget simply draws its box, and possibly its label.  Putting it
-  before some other widgets and making it big enough to surround them
-  will let you draw a frame around them.
-*/
-class FL_EXPORT Fl_Box : public Fl_Widget {
-protected:
-  void draw();
-public:
-  /**
-    - The first constructor sets box() to FL_NO_BOX, which
-    means it is invisible. However such widgets are useful as placeholders
-    or Fl_Group::resizable()
-    values.  To change the box to something visible, use box(n).
-    - The second form of the constructor sets the box to the specified box
-    type.
-    <P>The destructor removes the box.
-  */
-  Fl_Box(int X, int Y, int W, int H, const char *l=0);
-  
-  /**    See Fl_Box::Fl_Box(int x, int y, int w, int h, const char * = 0)   */
-  Fl_Box(Fl_Boxtype b, int X, int Y, int W, int H, const char *l);
-
-  virtual int handle(int);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Browser.H
+++ /dev/null
@@ -1,326 +1,0 @@
-//
-// "$Id$"
-//
-// Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Browser widget . */
-
-// Forms-compatible browser.  Probably useful for other
-// lists of textual data.  Notice that the line numbers
-// start from 1, and 0 means "no line".
-
-#ifndef Fl_Browser_H
-#define Fl_Browser_H
-
-#include "Fl_Browser_.H"
-#include "Fl_Image.H"
-
-struct FL_BLINE;
-
-/**
-  The Fl_Browser widget displays a scrolling list of text
-  lines, and manages all the storage for the text.  This is not a text
-  editor or spreadsheet!  But it is useful for showing a vertical list of
-  named objects to the user.
-  
-  Each line in the browser is identified by number. <I>The numbers
-  start at one</I> (this is so that zero can be reserved for "no line" in
-  the selective browsers). <I>Unless otherwise noted, the methods do not
-  check to see if the passed line number is in range and legal.  It must
-  always be greater than zero and &lt;= size().</I>
-
-  Each line contains a null-terminated string of text and a void *
-  data pointer.  The text string is displayed, the void *
-  pointer can be used by the callbacks to reference the object the text
-  describes.
-
-  The base class does nothing when the user clicks on it.  The
-  subclasses 
-  Fl_Select_Browser, 
-  Fl_Hold_Browser, and 
-  Fl_Multi_Browser react to user clicks to select lines in
-  the browser and do callbacks.
-
-  The base class
-  Fl_Browser_ provides the scrolling and selection mechanisms of
-  this and all the subclasses, but the dimensions and appearance of each
-  item are determined by the subclass. You can use Fl_Browser_
-  to display information other than text, or text that is dynamically
-  produced from your own data structures. If you find that loading the
-  browser is a lot of work or is inefficient, you may want to make a
-  subclass of Fl_Browser_.
-
-  Some common coding patterns used for working with Fl_Browser:
-  \code
-      // How to loop through all the items in the browser
-      for ( int t=1; t<=browser->size(); t++ ) {       // index 1 based..!
-	  printf("item #%d, label='%s'\n", t, browser->text(t));
-      }
-  \endcode
-
-  Note: If you are <I>subclassing</I> Fl_Browser, it's more efficient
-  to use the protected methods item_first() and item_next(), since
-  Fl_Browser internally uses linked lists to manage the browser's items.
-  For more info, see find_item(int).
-*/
-class FL_EXPORT Fl_Browser : public Fl_Browser_ {
-
-  FL_BLINE *first;		// the array of lines
-  FL_BLINE *last;
-  FL_BLINE *cache;
-  int cacheline;		// line number of cache
-  int lines;                	// Number of lines
-  int full_height_;
-  const int* column_widths_;
-  char format_char_;		// alternative to @-sign
-  char column_char_;		// alternative to tab
-
-protected:
-
-  // required routines for Fl_Browser_ subclass:
-  void* item_first() const ;
-  void* item_next(void* item) const ;
-  void* item_prev(void* item) const ;
-  void* item_last()const ;
-  int item_selected(void* item) const ;
-  void item_select(void* item, int val);
-  int item_height(void* item) const ;
-  int item_width(void* item) const ;
-  void item_draw(void* item, int X, int Y, int W, int H) const ;
-  int full_height() const ;
-  int incr_height() const ;
-  const char *item_text(void *item) const;
-  /** Swap the items \p a and \p b.
-      You must call redraw() to make any changes visible.
-      \param[in] a,b the items to be swapped.
-      \see swap(int,int), item_swap()
-   */
-  void item_swap(void *a, void *b) { swap((FL_BLINE*)a, (FL_BLINE*)b); }
-  /** Return the item at specified \p line.
-      \param[in] line The line of the item to return. (1 based)
-      \returns The item, or NULL if line out of range.
-      \see item_at(), find_line(), lineno()
-   */
-  void *item_at(int line) const { return (void*)find_line(line); }
-
-  FL_BLINE* find_line(int line) const ;
-  FL_BLINE* _remove(int line) ;
-  void insert(int line, FL_BLINE* item);
-  int lineno(void *item) const ;
-  void swap(FL_BLINE *a, FL_BLINE *b);
-
-public:
-
-  void remove(int line);
-  void add(const char* newtext, void* d = 0);
-  void insert(int line, const char* newtext, void* d = 0);
-  void move(int to, int from);
-  int  load(const char* filename);
-  void swap(int a, int b);
-  void clear();
-
-  /**
-    Returns how many lines are in the browser.
-    The last line number is equal to this.
-    Returns 0 if browser is empty.
-  */
-  int size() const { return lines; }
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-
-  /**
-    Gets the default text size (in pixels) for the lines in the browser.
-  */
-  Fl_Fontsize textsize() const { return Fl_Browser_::textsize(); }
-
-  /*
-    Sets the default text size for the lines in the browser to newSize.
-    Defined and documented in Fl_Browser.cxx
-  */
-  void textsize(Fl_Fontsize newSize);
-
-  int topline() const ;
-  /** For internal use only? */
-  enum Fl_Line_Position { TOP, BOTTOM, MIDDLE };
-  void lineposition(int line, Fl_Line_Position pos);
-  /**
-    Scrolls the browser so the top item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed at the top.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void topline(int line) { lineposition(line, TOP); }
-  /**
-    Scrolls the browser so the bottom item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed at the bottom.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void bottomline(int line) { lineposition(line, BOTTOM); }
-  /**
-    Scrolls the browser so the middle item in the browser
-    is showing the specified \p line.
-    \param[in] line The line to be displayed in the middle.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-   */
-  void middleline(int line) { lineposition(line, MIDDLE); }
-
-  int select(int line, int val=1);
-  int selected(int line) const ;
-  void show(int line);
-  /** Shows the entire Fl_Browser widget -- opposite of hide(). */
-  void show() { Fl_Widget::show(); }
-  void hide(int line);
-  /** Hides the entire Fl_Browser widget -- opposite of show(). */
-  void hide() { Fl_Widget::hide(); }
-  int visible(int line) const ;
-
-  int value() const ;
-  /**
-    Sets the browser's value(), which selects the specified \p line.
-    This is the same as calling select(line).
-    \see select(), selected(), value(), item_select(), item_selected()
-   */
-  void value(int line) { select(line); }
-  const char* text(int line) const ;
-  void text(int line, const char* newtext);
-  void* data(int line) const ;
-  void data(int line, void* d);
-
-  Fl_Browser(int X, int Y, int W, int H, const char *L = 0);
-  /**
-    The destructor deletes all list items and destroys the browser.
-   */
-  ~Fl_Browser() { clear(); }
-
-  /**
-    Gets the current format code prefix character, which by default is '\@'.
-    A string of formatting codes at the start of each column are stripped off
-    and used to modify how the rest of the line is printed:
-    
-    \li <tt>'\@.'</tt> Print rest of line, don't look for more '\@' signs
-    \li <tt>'\@\@'</tt> Print rest of line starting with '\@'
-    \li <tt>'\@l'</tt> Use a LARGE (24 point) font
-    \li <tt>'\@m'</tt> Use a medium large (18 point) font
-    \li <tt>'\@s'</tt> Use a <SMALL>small</SMALL> (11 point) font
-    \li <tt>'\@b'</tt> Use a <B>bold</B> font (adds FL_BOLD to font)
-    \li <tt>'\@i'</tt> Use an <I>italic</I> font (adds FL_ITALIC to font)
-    \li <tt>'\@f' or '\@t'</tt> Use a fixed-pitch
-    font (sets font to FL_COURIER)
-    \li <tt>'\@c'</tt> Center the line horizontally
-    \li <tt>'\@r'</tt> Right-justify the text
-    \li <tt>'\@B0', '\@B1', ... '\@B255'</tt> Fill the backgound with
-    fl_color(n)
-    \li <tt>'\@C0', '\@C1', ... '\@C255'</tt> Use fl_color(n) to draw the text
-    \li <tt>'\@F0', '\@F1', ...</tt> Use fl_font(n) to draw the text
-    \li <tt>'\@S1', '\@S2', ...</tt> Use point size n to draw the text
-    \li <tt>'\@u' or '\@_'</tt> Underline the text.
-    \li <tt>'\@-'</tt> draw an engraved line through the middle.
-
-    Notice that the '\@.' command can be used to reliably
-    terminate the parsing.  To print a random string in a random color, use 
-    <tt>sprintf("@C%d@.%s", color, string)</tt> and it will work even if the
-    string starts with a digit or has the format character in it.
-  */
-  char format_char() const { return format_char_; }
-  /**
-    Sets the current format code prefix character to \p c.
-    The default prefix is '\@'.  Set the prefix to 0 to disable formatting.
-    \see format_char() for list of '\@' codes
-  */
-  void format_char(char c) { format_char_ = c; }
-  /**
-    Gets the current column separator character.
-    The default is '\\t' (tab).
-    \see column_char(), column_widths()
-  */
-  char column_char() const { return column_char_; }
-  /**
-    Sets the column separator to c.
-    This will only have an effect if you also set column_widths().
-    The default is '\\t' (tab).
-    \see column_char(), column_widths()
-  */
-  void column_char(char c) { column_char_ = c; }
-  /**
-    Gets the current column width array.
-    This array is zero-terminated and specifies the widths in pixels of
-    each column. The text is split at each column_char() and each part is
-    formatted into it's own column.  After the last column any remaining
-    text is formatted into the space between the last column and the
-    right edge of the browser, even if the text contains instances of
-    column_char() .  The default value is a one-element array of just
-    a zero, which means there are no columns.
-
-    Example:
-    \code
-  Fl_Browser *b = new Fl_Browser(..);
-  static int widths[] = { 50, 50, 50, 70, 70, 40, 40, 70, 70, 50, 0 };  // widths for each column
-  b->column_widths(widths); // assign array to widget
-  b->column_char('\t');     // use tab as the column character
-  b->add("USER\tPID\tCPU\tMEM\tVSZ\tRSS\tTTY\tSTAT\tSTART\tTIME\tCOMMAND");
-  b->add("root\t2888\t0.0\t0.0\t1352\t0\ttty3\tSW\tAug15\t0:00\t@b@f/sbin/mingetty tty3");
-  b->add("root\t13115\t0.0\t0.0\t1352\t0\ttty2\tSW\tAug30\t0:00\t@b@f/sbin/mingetty tty2");
-  [..]
-    \endcode
-    \see column_char(), column_widths()
-  */
-  const int* column_widths() const { return column_widths_; }
-  /**
-    Sets the current array to \p arr.  Make sure the last entry is zero.
-    \see column_char(), column_widths()
-  */
-  void column_widths(const int* arr) { column_widths_ = arr; }
-
-  /**
-    Returns non-zero if \p line has been scrolled to a position where it is being displayed.
-    Checks to see if the item's vertical position is within the top and bottom
-    edges of the display window. This does NOT take into account the hide()/show()
-    status of the widget or item.
-    \param[in] line The line to be checked
-    \returns 1 if visible, 0 if not visible.
-    \see topline(), middleline(), bottomline(), displayed(), lineposition()
-  */
-  int displayed(int line) const { return Fl_Browser_::displayed(find_line(line)); }
-
-  /**
-    Make the item at the specified \p line visible().
-    Functionally similar to show(int line).
-    If \p line is out of range, redisplay top or bottom of list as appropriate.
-    \param[in] line The line to be made visible.
-    \see show(int), hide(int), display(), visible(), make_visible()
-  */
-  void make_visible(int line) {
-    if (line < 1) Fl_Browser_::display(find_line(1));
-    else if (line > lines) Fl_Browser_::display(find_line(lines));
-    else Fl_Browser_::display(find_line(line));
-  }
-
-  // icon support
-  void icon(int line, Fl_Image* icon);
-  Fl_Image* icon(int line) const;
-  void remove_icon(int line);
-
-  /** For back compatibility only. */
-  void replace(int a, const char* b) { text(a, b); }
-  void display(int line, int val=1);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Browser_.H
+++ /dev/null
@@ -1,388 +1,0 @@
-//
-// "$Id$"
-//
-// Common browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Browser_ widget . */
-
-// Yes, I know this should be a template...
-
-#ifndef Fl_Browser__H
-#define Fl_Browser__H
-
-#ifndef Fl_Group_H
-#include "Fl_Group.H"
-#endif
-#include "Fl_Scrollbar.H"
-#include <FL/Fl.H>		// Fl::scrollbar_size()
-
-#define FL_NORMAL_BROWSER	0	/**< type() of Fl_Browser */
-#define FL_SELECT_BROWSER	1	/**< type() of FL_Select_Browser */
-#define FL_HOLD_BROWSER		2	/**< type() of Fl_Hold_Browser */
-#define FL_MULTI_BROWSER	3	/**< type() of Fl_Multi_Browser */
-
-#define FL_SORT_ASCENDING	0	/**< sort browser items in ascending alphabetic order. */
-#define FL_SORT_DESCENDING	1	/**< sort in descending order */
-
-/**
-  This is the base class for browsers.  To be useful it must be
-  subclassed and several virtual functions defined.  The Forms-compatible
-  browser and the file chooser's browser are subclassed off of this.
-
-  This has been designed so that the subclass has complete control
-  over the storage of the data, although because next() and 
-  prev() functions are used to index, it works best as a linked list
-  or as a large block of characters in which the line breaks must be
-  searched for.
-
-  A great deal of work has been done so that the "height" of a data
-  object does not need to be determined until it is drawn.  This is
-  useful if actually figuring out the size of an object requires
-  accessing image data or doing stat() on a file or doing some
-  other slow operation.
-
-  Keyboard navigation of browser items
-  ------------------------------------
-  The keyboard navigation of browser items is only possible if
-  visible_focus() is enabled. If disabled, the widget rejects keyboard focus;
-  Tab and Shift-Tab focus navigation will skip the widget.
-
-  In 'Select' and 'Normal' mode, the widget rejects keyboard focus;
-  no navigation keys are supported (other than scrollbar positioning).
-
-  In 'Hold' mode, the widget accepts keyboard focus, and Up/Down arrow
-  keys can navigate the selected item.
-
-  In 'Multi' mode, the widget accepts keyboard focus, and Up/Down arrow
-  keys navigate the focus box; Space toggles the current item's selection,
-  Enter selects only the current item (deselects all others).  If Shift
-  (or Ctrl) is combined with Up/Down arrow keys, the current item's
-  selection state is extended to the next item. In this way one can
-  extend a selection or de-selection.
-*/
-class FL_EXPORT Fl_Browser_ : public Fl_Group {
-  int position_;	// where user wants it scrolled to
-  int real_position_;	// the current vertical scrolling position
-  int hposition_;	// where user wants it panned to
-  int real_hposition_;	// the current horizontal scrolling position
-  int offset_;		// how far down top_ item the real_position is
-  int max_width;	// widest object seen so far
-  uchar has_scrollbar_;	// which scrollbars are enabled
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  void* top_;		// which item scrolling position is in
-  void* selection_;	// which is selected (except for FL_MULTI_BROWSER)
-  void *redraw1,*redraw2; // minimal update pointers
-  void* max_width_item;	// which item has max_width_
-  int scrollbar_size_;	// size of scrollbar trough
-
-  void update_top();
-
-protected:
-
-  // All of the following must be supplied by the subclass:
-  /**
-    This method must be provided by the subclass 
-    to return the first item in the list.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_first() const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the item in the list after \p item.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_next(void *item) const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the item in the list before \p item.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_prev(void *item) const = 0;
-  /**
-    This method must be provided by the subclass
-    to return the last item in the list.
-    \see item_first(), item_next(), item_last(), item_prev()
-   */
-  virtual void *item_last() const { return 0L; }
-  /** 
-    This method must be provided by the subclass to return 
-    the height of \p item in pixels.
-    Allow for two additional pixels for the list selection box.
-    \param[in] item The item whose height is returned.
-    \returns The height of the specified \p item in pixels.
-    \see item_height(), item_width(), item_quick_height()
-  */
-  virtual int item_height(void *item) const = 0;
-  /**
-    This method must be provided by the subclass to return the width of the
-    \p item in pixels.  Allow for two additional pixels for the list
-    selection box.
-    \param[in] item The item whose width is returned.
-    \returns The width of the item in pixels.
-  */
-  virtual int item_width(void *item) const = 0;
-  virtual int item_quick_height(void *item) const ;
-  /**
-    This method must be provided by the subclass to draw the \p item
-    in the area indicated by \p X, \p Y, \p W, \p H.
-  */
-  virtual void item_draw(void *item,int X,int Y,int W,int H) const = 0;
-  /**
-    This optional method returns a string (label) that may be used for sorting. 
-    \param[in] item The item whose label text is returned.
-    \returns The item's text label. (Can be NULL if blank)
-   */
-  virtual const char *item_text(void *item) const { (void)item; return 0L; }
-  /**
-    This optional method should be provided by the subclass 
-    to efficiently swap browser items \p a and \p b, such as for sorting.
-    \param[in] a,b The two items to be swapped.
-   */
-  virtual void item_swap(void *a,void *b) { (void)a; (void)b; }
-  /**
-    This method must be provided by the subclass 
-    to return the item for the specified \p index. 
-    \param[in] index The \p index of the item to be returned
-    \returns The item at the specified \p index.
-   */
-  virtual void *item_at(int index) const { (void)index; return 0L; }
-  // you don't have to provide these but it may help speed it up:
-  virtual int full_width() const ;	// current width of all items
-  virtual int full_height() const ;	// current height of all items
-  virtual int incr_height() const ;	// average height of an item
-  // These only need to be done by subclass if you want a multi-browser:
-  virtual void item_select(void *item,int val=1);
-  virtual int item_selected(void *item) const ;
-
-  // things the subclass may want to call:
-  /**
-    Returns the item that appears at the top of the list.
-   */
-  void *top() const { return top_; }
-  /**
-    Returns the item currently selected, or NULL if there is no selection.
-    
-    For multiple selection browsers this call returns the currently focused item,
-    even if it is not selected. To find all selected items, call 
-    Fl_Multi_Browser::selected() for every item in question.
-  */
-  void *selection() const { return selection_; }
-  void new_list(); // completely clobber all data, as though list replaced
-  void deleting(void *item); // get rid of any pointers to item
-  void replacing(void *a,void *b); // change a pointers to b
-  void swapping(void *a,void *b); // exchange pointers a and b
-  void inserting(void *a,void *b); // insert b near a
-  int displayed(void *item) const ; // true if this item is visible
-  void redraw_line(void *item); // minimal update, no change in size
-  /**
-    This method will cause the entire list to be redrawn.
-    \see redraw_lines(), redraw_line()
-   */
-  void redraw_lines() { damage(FL_DAMAGE_SCROLL); } // redraw all of them
-  void bbox(int &X,int &Y,int &W,int &H) const;
-  int leftedge() const;	// x position after scrollbar & border
-  void *find_item(int ypos); // item under mouse
-  
-  void draw();
-  Fl_Browser_(int X,int Y,int W,int H,const char *L=0);
-
-public:
-
-  /**
-    Vertical scrollbar. Public, so that it can be accessed directly.
-   */
-  Fl_Scrollbar scrollbar;
-  /**
-    Horizontal scrollbar. Public, so that it can be accessed directly.
-   */
-  Fl_Scrollbar hscrollbar;
-
-  int handle(int event);
-  void resize(int X,int Y,int W,int H);
-
-  int select(void *item,int val=1,int docallbacks=0);
-  int select_only(void *item,int docallbacks=0);
-  int deselect(int docallbacks=0);
-  /**
-    Gets the vertical scroll position of the list as a pixel position \p pos.
-    The position returned is how many pixels of the list are scrolled off the top edge
-    of the screen.  Example: A position of '3' indicates the top 3 pixels of 
-    the list are scrolled off the top edge of the screen.
-    \see position(), hposition()
-  */
-  int position() const { return position_; }
-  void position(int pos); // scroll to here
-  /**
-    Gets the horizontal scroll position of the list as a pixel position \p pos.
-    The position returned is how many pixels of the list are scrolled off the left edge
-    of the screen. Example: A position of '18' indicates the left 18 pixels of
-    the list are scrolled off the left edge of the screen.
-    \see position(), hposition()
-  */
-  int hposition() const { return hposition_; }
-  void hposition(int); // pan to here
-  void display(void *item); // scroll so this item is shown
-
-  /**
-    Values for has_scrollbar().
-   */
-  /** Anonymous enum bit flags for has_scrollbar().
-     -  bit 0: horizontal
-     -  bit 1: vertical
-     -  bit 2: 'always' (to be combined with bits 0 and 1)
-     -  bit 3-31: reserved for future use
-   */
-  enum { // values for has_scrollbar()
-    HORIZONTAL = 1,		///< Only show horizontal scrollbar.
-    VERTICAL = 2,		///< Only show vertical scrollbar.
-    BOTH = 3,			///< Show both scrollbars. (default)
-    ALWAYS_ON = 4,		///< Specified scrollbar(s) should 'always' be shown (to be used with HORIZONTAL/VERTICAL)
-    HORIZONTAL_ALWAYS = 5,	///< Horizontal scrollbar always on.
-    VERTICAL_ALWAYS = 6,	///< Vertical scrollbar always on.
-    BOTH_ALWAYS = 7		///< Both scrollbars always on.
-  };
-  /**
-    Returns the current scrollbar mode, see Fl_Browser_::has_scrollbar(uchar)
-   */
-  uchar has_scrollbar() const { return has_scrollbar_; }
-  /**
-    Sets whether the widget should have scrollbars or not (default Fl_Browser_::BOTH).
-    By default you can scroll in both directions, and the scrollbars
-    disappear if the data will fit in the widget.  
-    has_scrollbar() changes this based on the value of \p mode:
-  
-    - 0 - No scrollbars.
-
-    - Fl_Browser_::HORIZONTAL - Only a horizontal scrollbar.
-
-    - Fl_Browser_::VERTICAL - Only a vertical scrollbar.
-
-    - Fl_Browser_::BOTH - The default is both scrollbars.
-
-    - Fl_Browser_::HORIZONTAL_ALWAYS - Horizontal scrollbar always on,
-      vertical always off.
-
-    - Fl_Browser_::VERTICAL_ALWAYS - Vertical scrollbar always on,
-      horizontal always off.
-
-    - Fl_Browser_::BOTH_ALWAYS - Both always on.
-  */
-  void has_scrollbar(uchar mode) { has_scrollbar_ = mode; }
-
-  /**
-    Gets the default text font for the lines in the browser.
-    \see textfont(), textsize(), textcolor()
-  */
-  Fl_Font textfont() const { return textfont_; }
-  /**
-    Sets the default text font for the lines in the browser to \p font.
-  */
-  void textfont(Fl_Font font) { textfont_ = font; }
-
-  /**
-    Gets the default text size (in pixels) for the lines in the browser.
-  */
-  Fl_Fontsize textsize() const { return textsize_; }
-  /**
-    Sets the default text size (in pixels) for the lines in the browser to \p size.
-  */
-  void textsize(Fl_Fontsize newSize) { textsize_ = newSize; }
-
-  /**
-    Gets the default text color for the lines in the browser.
-  */
-  Fl_Color textcolor() const { return textcolor_; }
-  /**
-    Sets the default text color for the lines in the browser to color \p col.
-  */
-  void textcolor(Fl_Color col) { textcolor_ = col; }
-
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to \p newSize, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL 
-    your widgets' scrollbars. This ensures your application 
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-    
-    Setting \p newSize to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] newSize Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int newSize) {
-      scrollbar_size_ = newSize;
-  }   
-  /**
-    This method has been deprecated, existing for backwards compatibility only.
-    Use scrollbar_size() instead.
-    This method always returns the global value Fl::scrollbar_size().
-    \returns Always returns the global value Fl::scrollbar_size().
-    \todo This method should eventually be removed in 1.4+
-  */
-  int scrollbar_width() const {
-      return(Fl::scrollbar_size());
-  }
-  /**
-    This method has been deprecated, existing for backwards compatibility only.
-    Use scrollbar_size(int) instead.
-    This method sets the global Fl::scrollbar_size(), and forces this
-    instance of the widget to use it.
-    \todo This method should eventually be removed in 1.4+
-  */
-  void scrollbar_width(int width) {
-      Fl::scrollbar_size(width);
-      scrollbar_size_ = 0;
-  }
-  /**
-    Moves the vertical scrollbar to the righthand side of the list.
-    For back compatibility.
-  */
-  void scrollbar_right() { scrollbar.align(FL_ALIGN_RIGHT); }
-  /**
-    Moves the vertical scrollbar to the lefthand side of the list.
-    For back compatibility.
-  */
-  void scrollbar_left() { scrollbar.align(FL_ALIGN_LEFT); }
-  void sort(int flags=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Button.H
+++ /dev/null
@@ -1,176 +1,0 @@
-//
-// "$Id$"
-//
-// Button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Button widget . */
-
-#ifndef Fl_Button_H
-#define Fl_Button_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type()
-#define FL_NORMAL_BUTTON	0   /**< value() will be set to 1 during the press of the button and
-                                         reverts back to 0 when the button is released */
-#define FL_TOGGLE_BUTTON	1   ///< value() toggles between 0 and 1 at every click of the button
-#define FL_RADIO_BUTTON		(FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other
-				         buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt>
-				         are set to zero.*/
-#define FL_HIDDEN_BUTTON	3   ///< for Forms compatibility
-
-extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
-
-class Fl_Widget_Tracker;
-
-/**
-  \class Fl_Button
-  \brief Buttons generate callbacks when they are clicked by the user.
-
-  You control exactly when and how by changing the values for type() and
-  when().  Buttons can also generate callbacks in response to \c FL_SHORTCUT
-  events.  The button can either have an explicit shortcut(int s) value or a
-  letter shortcut can be indicated in the label() with an '\&' character
-  before it.  For the label shortcut it does not matter if \e Alt is held
-  down, but if you have an input field in the same window, the user will have
-  to hold down the \e Alt key so that the input field does not eat the event
-  first as an \c FL_KEYBOARD event.
-
-  \todo Refactor the doxygen comments for Fl_Button type() documentation.
-
-  For an Fl_Button object, the type() call returns one of:
-  \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press.
-  \li \c FL_TOGGLE_BUTTON: value() is inverted after button press.
-  \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other
-         buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt>
-	 are set to zero.
-
-  \todo Refactor the doxygen comments for Fl_Button when() documentation.
-
-  For an Fl_Button object, the following when() values are useful, the default
-  being \c FL_WHEN_RELEASE:
-  \li \c 0: The callback is not done, instead changed() is turned on.
-  \li \c FL_WHEN_RELEASE: The callback is done after the user successfully
-         clicks the button, or when a shortcut is typed.
-  \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes
-         (when the user pushes and releases the button, and as the mouse is
-	 dragged around in and out of the button).
-*/
-
-class FL_EXPORT Fl_Button : public Fl_Widget {
-
-  int shortcut_;
-  char value_;
-  char oldval;
-  uchar down_box_;
-
-protected:
-
-  static Fl_Widget_Tracker *key_release_tracker;
-  static void key_release_timeout(void*);
-  void simulate_key_action();
-
-  virtual void draw();
-
-public:
-
-  virtual int handle(int);
-
-  Fl_Button(int X, int Y, int W, int H, const char *L = 0);
-
-  int value(int v);
-
-  /**
-    Returns the current value of the button (0 or 1).
-   */
-  char value() const {return value_;}
-
-  /**
-    Same as \c value(1).
-    \see value(int v)
-   */
-  int set() {return value(1);}
-
-  /**
-    Same as \c value(0).
-    \see value(int v)
-   */
-  int clear() {return value(0);}
-
-  void setonly(); // this should only be called on FL_RADIO_BUTTONs
-
-  /**
-    Returns the current shortcut key for the button.
-    \retval int
-   */
-  int shortcut() const {return shortcut_;}
-
-  /**
-    Sets the shortcut key to \c s.
-    Setting this overrides the use of '\&' in the label().
-    The value is a bitwise OR of a key and a set of shift flags, for example:
-    <tt>FL_ALT | 'a'</tt>, or
-    <tt>FL_ALT | (FL_F + 10)</tt>, or just
-    <tt>'a'</tt>.
-    A value of 0 disables the shortcut.
-
-    The key can be any value returned by Fl::event_key(), but will usually be
-    an ASCII letter.  Use a lower-case letter unless you require the shift key
-    to be held down.
-
-    The shift flags can be any set of values accepted by Fl::event_state().
-    If the bit is on, that shift key must be pushed.  Meta, Alt, Ctrl, and
-    Shift must be off if they are not in the shift flags (zero for the other
-    bits indicates a "don't care" setting).
-    \param[in] s bitwise OR of key and shift flags
-   */
-  void shortcut(int s) {shortcut_ = s;}
-
-  /**
-    Returns the current down box type, which is drawn when value() is non-zero.
-    \retval Fl_Boxtype
-   */
-  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
-
-  /**
-    Sets the down box type. The default value of 0 causes FLTK to figure out
-    the correct matching down version of box().
-
-    Some derived classes (e.g. Fl_Round_Button and Fl_Light_Button use
-    down_box() for special purposes. See docs of these classes.
-
-    \param[in] b down box type
-   */
-  void down_box(Fl_Boxtype b) {down_box_ = b;}
-
-  /// (for backwards compatibility)
-  void shortcut(const char *s) {shortcut(fl_old_shortcut(s));}
-
-  /// (for backwards compatibility)
-  Fl_Color down_color() const {return selection_color();}
-
-  /// (for backwards compatibility)
-  void down_color(unsigned c) {selection_color(c);}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Cairo.H
+++ /dev/null
@@ -1,88 +1,0 @@
-//
-// "$Id$"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-    Handling transparently platform dependent cairo include files 
-*/
-
-#ifndef FL_CAIRO_H
-# define FL_CAIRO_H
-# ifdef FLTK_HAVE_CAIRO
-
-// Cairo is currently supported for the following platforms:
-// Win32, Apple Quartz, X11
-
-# include <FL/Fl_Export.H>
-
-# include <cairo.h>
-
-/** 
-   \addtogroup group_cairo
-   @{
-*/
-
-/** 
-   Contains all the necessary info on the current cairo context.
-   A private internal & unique corresponding object is created to
-   permit cairo context state handling while keeping it opaque.
-   For internal use only.
-   \note Only available when configure has the --enable-cairo option
-*/
-class FL_EXPORT Fl_Cairo_State {
-public:
-  Fl_Cairo_State() : cc_(0), own_cc_(false), autolink_(false), window_(0), gc_(0) {}
-
-    // access attributes
-    cairo_t* cc() const {return cc_;}		 ///< Gets the current cairo context
-    bool autolink() const {return autolink_;}	 ///< Gets the autolink option. See Fl::cairo_autolink_context(bool)
-    /** Sets the current cairo context.
-
-	\p own == \e true (the default) indicates that the cairo context \p c
-	will be deleted by FLTK internally when another cc is set later.
-
-	\p own == \e false indicates cc deletion is handled externally
-	by the user program.
-    */
-    void cc(cairo_t* c, bool own=true)  {
-	if (cc_ && own_cc_) cairo_destroy(cc_);
-	cc_=c;
-	if (!cc_) window_=0;
-	own_cc_=own;
-    }
-    void  autolink(bool b);                     ///< Sets the autolink option, only available with --enable-cairoext
-    void  window(void* w)  {window_=w;}		///< Sets the window \p w to keep track on
-    void* window() const {return window_;}	///< Gets the last window attached to a cc
-    void  gc(void* c)  {gc_=c;}		        ///< Sets the gc \p c to keep track on
-    void* gc() const {return gc_;}		///< Gets the last gc attached to a cc
-
-private:
-    cairo_t * cc_;	 // contains the unique autoupdated cairo context
-    bool own_cc_;	 // indicates whether we must delete the cc, useful for internal cleanup
-    bool autolink_;	 // false by default, prevents the automatic cairo mapping on fltk windows
-			 // for custom cairo implementations.
-    void* window_, *gc_; // for keeping track internally of last win+gc treated
-};
-
-/** @} */
-
-# endif // FLTK_HAVE_CAIRO
-#endif // FL_CAIRO_H
-
-//
-// End of "$Id$" .
-//
--- a/DoConfig/fltk/FL/Fl_Cairo_Window.H
+++ /dev/null
@@ -1,83 +1,0 @@
-//
-// "$Id$"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-    Fl_Cairo_Window Handling transparently a fltk window incorporte a cairo draw callback.
-*/
-
-#ifndef FL_CAIRO_WINDOW_H
-# define FL_CAIRO_WINDOW_H
-# ifdef FLTK_HAVE_CAIRO
-
-// Cairo is currently supported for the following platforms:
-// Win32, Apple Quartz, X11
-#  include <FL/Fl.H>
-#  include <FL/Fl_Double_Window.H>
-
-/** 
-   \addtogroup group_cairo
-   @{
-*/
-
-/**
-   This defines a pre-configured cairo fltk window.
-   This class overloads the virtual draw() method for you,
-   so that the only thing you have to do is to provide your cairo code.
-   All cairo context handling is achieved transparently.
-   \note You can alternatively define your custom cairo fltk window,
-   and thus at least override the draw() method to provide custom cairo
-   support. In this case you will probably use Fl::cairo_make_current(Fl_Window*)
-   to attach a context to your window. You should do it only when your window is 
-   the current window. \see Fl_Window::current()
-*/
-class FL_EXPORT Fl_Cairo_Window : public Fl_Double_Window {
-
-public:
-  Fl_Cairo_Window(int w, int h) : Fl_Double_Window(w,h),draw_cb_(0) {}
-
-protected:
-  /** Overloaded to provide cairo callback support */
-  void draw() {
-    Fl_Double_Window::draw();
-    // manual method ? if yes explicitly get a cairo_context here
-    if (!Fl::cairo_autolink_context()) 
-      Fl::cairo_make_current(this); 
-    if (draw_cb_) draw_cb_(this, Fl::cairo_cc());
-  }
-
-public:
-  /** This defines the cairo draw callback prototype that you must further */
-  typedef void (*cairo_draw_cb) (Fl_Cairo_Window* self, cairo_t* def);
-  /** 
-    You must provide a draw callback which will implement your cairo rendering.
-    This method will permit you to set your cairo callback to \p cb.
-  */
-  void set_draw_cb(cairo_draw_cb  cb){draw_cb_=cb;}
-private:
-    cairo_draw_cb draw_cb_;
-};
-
-
-/** @} */
-
-# endif // FLTK_HAVE_CAIRO
-#endif // FL_CAIRO_WINDOW_H
-
-//
-// End of "$Id$" .
-//
--- a/DoConfig/fltk/FL/Fl_Chart.H
+++ /dev/null
@@ -1,151 +1,0 @@
-//
-// "$Id$"
-//
-// Forms chart header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Chart widget . */
-
-#ifndef Fl_Chart_H
-#define Fl_Chart_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type()
-#define FL_BAR_CHART		0	/**< type() for Bar Chart variant */
-#define FL_HORBAR_CHART		1	/**< type() for Horizontal Bar Chart variant */
-#define FL_LINE_CHART		2	/**< type() for Line Chart variant */
-#define FL_FILL_CHART		3	/**< type() for Fill Line Chart variant */
-#define FL_SPIKE_CHART		4	/**< type() for Spike Chart variant */
-#define FL_PIE_CHART		5	/**< type() for Pie Chart variant */
-#define FL_SPECIALPIE_CHART	6	/**< type() for Special Pie Chart variant */
-
-#define FL_FILLED_CHART  FL_FILL_CHART	/**< for compatibility */
-
-#define FL_CHART_MAX		128	/**< max entries per chart */
-#define FL_CHART_LABEL_MAX	18	/**< max label length for entry */
-
-/** For internal use only */
-struct FL_CHART_ENTRY {
-   float val;				/**< For internal use only. */
-   unsigned col;			/**< For internal use only. */
-   char str[FL_CHART_LABEL_MAX+1];	/**< For internal use only. */
-};
-
-/**
-  \class Fl_Chart
-  \brief Fl_Chart displays simple charts.
-  It is provided for Forms compatibility.
-
-  \image html charts.png  
-  \image latex charts.png  "Fl_Chart" width=10cm
-  \todo Refactor Fl_Chart::type() information.
-
-  The type of an Fl_Chart object can be set using type(uchar t) to:
-  \li \c FL_BAR_CHART: Each sample value is drawn as a vertical bar.
-  \li \c FL_FILLED_CHART: The chart is filled from the bottom of the graph
-         to the sample values.
-  \li \c FL_HORBAR_CHART: Each sample value is drawn as a horizontal bar.
-  \li \c FL_LINE_CHART: The chart is drawn as a polyline with vertices at
-         each sample value.
-  \li \c FL_PIE_CHART: A pie chart is drawn with each sample value being
-         drawn as a proportionate slice in the circle.
-  \li \c FL_SPECIALPIE_CHART: Like \c FL_PIE_CHART, but the first slice is
-         separated from the pie.
-  \li \c FL_SPIKE_CHART: Each sample value is drawn as a vertical line.
- */
-class FL_EXPORT Fl_Chart : public Fl_Widget {
-    int numb;
-    int maxnumb;
-    int sizenumb;
-    FL_CHART_ENTRY *entries;
-    double min,max;
-    uchar autosize_;
-    Fl_Font textfont_;
-    Fl_Fontsize textsize_;
-    Fl_Color textcolor_;
-protected:
-    void draw();
-public:
-    Fl_Chart(int X, int Y, int W, int H, const char *L = 0);
-
-    ~Fl_Chart();
-
-    void clear();
-
-    void add(double val, const char *str = 0, unsigned col = 0);
-
-    void insert(int ind, double val, const char *str = 0, unsigned col = 0);
-
-    void replace(int ind, double val, const char *str = 0, unsigned col = 0);
-
-    /**
-      Gets the lower and upper bounds of the chart values.
-      \param[out] a, b are set to lower, upper
-     */
-    void bounds(double *a,double *b) const {*a = min; *b = max;}
-
-    void bounds(double a,double b);
-
-    /**
-      Returns the number of data values in the chart.
-     */
-    int size() const {return numb;}
-
-    void size(int W, int H) { Fl_Widget::size(W, H); }
-
-    /**
-      Gets the maximum number of data values for a chart.
-     */
-    int maxsize() const {return maxnumb;}
-
-    void maxsize(int m);
-
-    /** Gets the chart's text font */
-    Fl_Font textfont() const {return textfont_;}
-    /** Sets the chart's text font to \p s. */
-    void textfont(Fl_Font s) {textfont_ = s;}
-
-    /** Gets the chart's text size */
-    Fl_Fontsize textsize() const {return textsize_;}
-    /** gets the chart's text size to \p s. */
-    void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-    /** Gets the chart's text color */
-    Fl_Color textcolor() const {return textcolor_;}
-    /** gets the chart's text color to \p n. */
-    void textcolor(Fl_Color n) {textcolor_ = n;}
-
-    /**
-      Get whether the chart will automatically adjust the bounds of the chart.
-      \returns non-zero if auto-sizing is enabled and zero if disabled.
-     */
-    uchar autosize() const {return autosize_;}
-
-    /**
-      Set whether the chart will automatically adjust the bounds of the chart.
-      \param[in] n non-zero to enable automatic resizing, zero to disable.
-     */
-    void autosize(uchar n) {autosize_ = n;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Check_Browser.H
+++ /dev/null
@@ -1,113 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Check_Browser widget . */
-
-#ifndef Fl_Check_Browser_H
-#define Fl_Check_Browser_H
-
-#include "Fl.H"
-#include "Fl_Browser_.H"
-
-/**
-  The Fl_Check_Browser widget displays a scrolling list of text
-  lines that may be selected and/or checked by the user.
-*/
-class FL_EXPORT Fl_Check_Browser : public Fl_Browser_ {
-  /* required routines for Fl_Browser_ subclass: */
-
-  void *item_first() const;
-  void *item_next(void *) const;
-  void *item_prev(void *) const;
-  int item_height(void *) const;
-  int item_width(void *) const;
-  void item_draw(void *, int, int, int, int) const;
-  void item_select(void *, int);
-  int item_selected(void *) const;
-
-  /* private data */
-
-  public: // IRIX 5.3 C++ compiler doesn't support private structures...
-
-#ifndef FL_DOXYGEN
-  /** For internal use only. */
-  struct cb_item {
-	  cb_item *next;	/**< For internal use only. */
-	  cb_item *prev;	/**< For internal use only. */
-	  char checked;		/**< For internal use only. */
-	  char selected;	/**< For internal use only. */
-	  char *text;		/**< For internal use only. */
-  };
-#endif // !FL_DOXYGEN
-
-  private:
-
-  cb_item *first;
-  cb_item *last;
-  cb_item *cache;
-  int cached_item;
-  int nitems_;
-  int nchecked_;
-  cb_item *find_item(int) const;
-  int lineno(cb_item *) const;
-
-  public:
-
-  Fl_Check_Browser(int x, int y, int w, int h, const char *l = 0);
-   /** The destructor deletes all list items and destroys the browser. */
-  ~Fl_Check_Browser() { clear(); }
-  int add(char *s);               // add an (unchecked) item
-  int add(char *s, int b);        // add an item and set checked
-				  // both return the new nitems()
-  int remove(int item);           // delete an item. Returns nitems()
-
-  // inline const char * methods to avoid breaking binary compatibility...
-   /** See int Fl_Check_Browser::add(char *s) */
-  int add(const char *s) { return add((char *)s); }
-  /** See int Fl_Check_Browser::add(char *s) */
-  int add(const char *s, int b) { return add((char *)s, b); }
-
-  void clear();                   // delete all items
-  /**
-    Returns how many lines are in the browser.  The last line number is equal to
-    this.
-  */
-  int nitems() const { return nitems_; }
-  /**    Returns how many items are currently checked.  */
-  int nchecked() const { return nchecked_; }
-  int checked(int item) const;
-  void checked(int item, int b);
-  /**    Equivalent to Fl_Check_Browser::checked(item, 1).  */
-  void set_checked(int item) { checked(item, 1); }
-  void check_all();
-  void check_none();
-  int value() const;              // currently selected item
-  char *text(int item) const;     // returns pointer to internal buffer
-
-  protected:
-
-  int handle(int);
-};
-
-#endif // Fl_Check_Browser_H
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/FL/Fl_Check_Button.H
+++ /dev/null
@@ -1,39 +1,0 @@
-//
-// "$Id$"
-//
-// Check button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Check_Button_H
-#define Fl_Check_Button_H
-
-#include "Fl_Light_Button.H"
-
-/*
-  class: Fl_Check_Button.
-
-  A button with a "checkmark" to show its status.
-*/
-
-class FL_EXPORT Fl_Check_Button : public Fl_Light_Button {
-public:
-  Fl_Check_Button(int X, int Y, int W, int H, const char *L = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Choice.H
+++ /dev/null
@@ -1,106 +1,0 @@
-//
-// "$Id$"
-//
-// Choice header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Choice widget . */
-
-#ifndef Fl_Choice_H
-#define Fl_Choice_H
-
-#include "Fl_Menu_.H"
-
-/**
-  \class Fl_Choice
-  \brief A button that is used to pop up a menu.
-
-  This is a button that, when pushed, pops up a menu (or hierarchy of menus)
-  defined by an array of Fl_Menu_Item objects.
-  Motif calls this an OptionButton.
-
-  The only difference between this and a Fl_Menu_Button is that the name of
-  the most recent chosen menu item is displayed inside the box, while the
-  label is displayed outside the box. However, since the use of this is most
-  often to control a single variable rather than do individual callbacks,
-  some of the Fl_Menu_Button methods are redescribed here in those terms.
-
-  When the user clicks a menu item, value() is set to that item
-  and then:
-
-      - The item's callback is done if one has been set; the
-        Fl_Choice is passed as the Fl_Widget* argument, 
-        along with any userdata configured for the callback.
-
-      - If the item does not have a callback, the Fl_Choice widget's
-        callback is done instead, along with any userdata configured
-        for it.  The callback can determine which item was picked using
-        value(), mvalue(), item_pathname(), etc.
-
-  All three mouse buttons pop up the menu. The Forms behavior of the first
-  two buttons to increment/decrement the choice is not implemented.  This
-  could be added with a subclass, however.
-
-  The menu will also pop up in response to shortcuts indicated by putting
-  a '\&' character in the label().  See Fl_Button::shortcut(int s) for a
-  description of this.
-
-  Typing the shortcut() of any of the items will do exactly the same as when
-  you pick the item with the mouse.  The '\&' character in item names are
-  only looked at when the menu is popped up, however.
-
-  \image html choice.png
-  \image latex choice.png  "Fl_Choice" width=4cm
-  \todo Refactor the doxygen comments for Fl_Choice changed() documentation.
-
-  \li <tt>int Fl_Widget::changed() const</tt>
-      This value is true the user picks a different value. <em>It is turned
-      off by value() and just before doing a callback (the callback can turn
-      it back on if desired).</em>
-  \li <tt>void Fl_Widget::set_changed()</tt>
-      This method sets the changed() flag.
-  \li <tt>void Fl_Widget::clear_changed()</tt>
-      This method clears the changed() flag.
-  \li <tt>Fl_Boxtype Fl_Choice::down_box() const</tt>
-      Gets the current down box, which is used when the menu is popped up.
-      The default down box type is \c FL_DOWN_BOX.
-  \li <tt>void Fl_Choice::down_box(Fl_Boxtype b)</tt>
-      Sets the current down box type to \p b.
- */
-class FL_EXPORT Fl_Choice : public Fl_Menu_ {
-protected:
-  void draw();
-public:
-  int handle(int);
-
-  Fl_Choice(int X, int Y, int W, int H, const char *L = 0);
-
-  /**
-    Gets the index of the last item chosen by the user.
-    The index is zero initially.
-   */
-  int value() const {return Fl_Menu_::value();}
-
-  int value(int v);
-
-  int value(const Fl_Menu_Item* v);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Clock.H
+++ /dev/null
@@ -1,128 +1,0 @@
-//
-// "$Id$"
-//
-// Clock header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Clock, Fl_Clock_Output widgets . */
-
-#ifndef Fl_Clock_H
-#define Fl_Clock_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type:
-#define FL_SQUARE_CLOCK		0	/**< type() of Square Clock variant */
-#define FL_ROUND_CLOCK		1	/**< type() of Round Clock variant */
-#define FL_ANALOG_CLOCK FL_SQUARE_CLOCK	/**< An analog clock is square */
-#define FL_DIGITAL_CLOCK FL_SQUARE_CLOCK /**< Not yet implemented */
-
-// fabien: Please keep the horizontal formatting of both images in class desc, 
-// don't lose vert. space for nothing!
-
-/**
-  \class Fl_Clock_Output
-  \brief This widget can be used to display a program-supplied time.
-  
-  The time shown on the clock is not updated. To display the current time,
-  use Fl_Clock instead.
-
-  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
-  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
-  \image html clock.png  
-  \htmlonly </TD> <TD> \endhtmlonly
-  \image html round_clock.png 
-  \htmlonly </TD> </TR> </table> \endhtmlonly
-  \image latex clock.png "FL_SQUARE_CLOCK type" width=4cm
-  \image latex round_clock.png "FL_ROUND_CLOCK type" width=4cm
- */
-class FL_EXPORT Fl_Clock_Output : public Fl_Widget {
-  int hour_, minute_, second_;
-  ulong value_;
-  void drawhands(Fl_Color,Fl_Color); // part of draw
-protected:
-  void draw();
-  void draw(int X, int Y, int W, int H);
-public:
-
-  Fl_Clock_Output(int X, int Y, int W, int H, const char *L = 0);
-
-  void value(ulong v);	// set to this Unix time
-  
-  void value(int H, int m, int s);
-
-  /**
-    Returns the displayed time.
-    Returns the time in seconds since the UNIX epoch (January 1, 1970).
-    \see value(ulong)
-   */
-  ulong value() const {return value_;}
-
-  /**
-    Returns the displayed hour (0 to 23).
-    \see value(), minute(), second()
-   */
-  int hour() const {return hour_;}
-
-  /**
-    Returns the displayed minute (0 to 59).
-    \see value(), hour(), second()
-   */
-  int minute() const {return minute_;}
-
-  /**
-    Returns the displayed second (0 to 60, 60=leap second).
-    \see value(), hour(), minute()
-   */
-  int second() const {return second_;}
-};
-
-// a Fl_Clock displays the current time always by using a timeout:
-
-/**
-  \class Fl_Clock
-  \brief This widget provides a round analog clock display.
-
-  Fl_Clock is provided for Forms compatibility. 
-  It installs a 1-second timeout callback using Fl::add_timeout().
-  You can choose the rounded or square type of the clock with type(), see below.
-  \htmlonly <BR>  <table align=CENTER border=1 cellpadding=5 >  
-  <caption align=bottom>type() FL_SQUARE_CLOCK and FL_ROUND_CLOCK </caption> <TR><TD> \endhtmlonly
-  \image html clock.png  
-  \htmlonly </TD> <TD> \endhtmlonly
-  \image html round_clock.png 
-  \htmlonly </TD> </TR> </table> \endhtmlonly
-  \image latex clock.png "FL_SQUARE_CLOCK type" width=4cm  
-  \image latex round_clock.png "FL_ROUND_CLOCK type" width=4cm
- */
-class FL_EXPORT Fl_Clock : public Fl_Clock_Output {
-public:
-  int handle(int);
-
-  Fl_Clock(int X, int Y, int W, int H,  const char *L = 0);
-  
-  Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L);
-  
-  ~Fl_Clock();
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Color_Chooser.H
+++ /dev/null
@@ -1,190 +1,0 @@
-//
-// "$Id$"
-//
-// Color chooser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Color_Chooser widget . */
-
-// The color chooser object and the color chooser popup.  The popup
-// is just a window containing a single color chooser and some boxes
-// to indicate the current and cancelled color.
-
-#ifndef Fl_Color_Chooser_H
-#define Fl_Color_Chooser_H
-
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Value_Input.H>
-
-#ifndef FL_DOXYGEN
-
-/** For internal use only */
-class FL_EXPORT Flcc_HueBox : public Fl_Widget {
-  int px, py;
-protected:
-  void draw();
-  int handle_key(int);
-public:
-  int handle(int);
-  Flcc_HueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-  px = py = 0;}
-};
-
-/** For internal use only */
-class FL_EXPORT Flcc_ValueBox : public Fl_Widget {
-  int py;
-protected:
-  void draw();
-  int handle_key(int);
-public:
-  int handle(int);
-  Flcc_ValueBox(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-  py = 0;}
-};
-
-/** For internal use only */
-class FL_EXPORT Flcc_Value_Input : public Fl_Value_Input {
-public:
-  int format(char*);
-  Flcc_Value_Input(int X, int Y, int W, int H) : Fl_Value_Input(X,Y,W,H) {}
-};
-
-#endif // !FL_DOXYGEN
-
-/** \addtogroup group_comdlg 
-    @{ */
-
-/**
-  \class Fl_Color_Chooser
-  \brief The Fl_Color_Chooser widget provides a standard RGB color chooser.
-
-  \image html fl_color_chooser.jpg
-  \image latex fl_color_chooser.jpg "fl_color_chooser()" width=5cm
-
-  You can place any number of the widgets into a panel of your own design.
-  The diagram shows the widget as part of a color chooser dialog created by
-  the fl_color_chooser() function. The Fl_Color_Chooser widget contains the
-  hue box, value slider, and rgb input fields from the above diagram (it
-  does not have the color chips or the Cancel or OK buttons).
-  The callback is done every time the user changes the rgb value. It is not
-  done if they move the hue control in a way that produces the \e same rgb
-  value, such as when saturation or value is zero.
-
-  The fl_color_chooser() function pops up a window to let the user pick an
-  arbitrary RGB color. They can pick the hue and saturation in the "hue box"
-  on the left (hold down CTRL to just change the saturation), and the
-  brightness using the vertical slider. Or they can type the 8-bit numbers
-  into the RGB Fl_Value_Input fields, or drag the mouse across them to adjust
-  them.  The pull-down menu lets the user set the input fields to show RGB,
-  HSV, or 8-bit RGB (0 to 255).
-
-  fl_color_chooser() returns non-zero if the user picks ok, and updates the
-  RGB values.  If the user picks cancel or closes the window this returns
-  zero and leaves RGB unchanged.
-
-  If you use the color chooser on an 8-bit screen, it will allocate all the
-  available colors, leaving you no space to exactly represent the color the
-  user picks! You can however use fl_rectf() to fill a region with a simulated
-  color using dithering.
- */
-/** @} */
-class FL_EXPORT Fl_Color_Chooser : public Fl_Group {
-  Flcc_HueBox huebox;
-  Flcc_ValueBox valuebox;
-  Fl_Choice choice;
-  Flcc_Value_Input rvalue;
-  Flcc_Value_Input gvalue;
-  Flcc_Value_Input bvalue;
-  Fl_Box resize_box;
-  double hue_, saturation_, value_;
-  double r_, g_, b_;
-  void set_valuators();
-  static void rgb_cb(Fl_Widget*, void*);
-  static void mode_cb(Fl_Widget*, void*);
-public:
-  
-  /** 
-   Returns which Fl_Color_Chooser variant is currently active 
-   \return color modes are rgb(0), byte(1), hex(2), or hsv(3)   
-   */
-  int mode() {return choice.value();}
-  
-  /** 
-   Set which Fl_Color_Chooser variant is currently active 
-   \param[in] newMode color modes are rgb(0), byte(1), hex(2), or hsv(3)   
-   */
-  void mode(int newMode);
-  
-  /**
-    Returns the current hue.
-    0 <= hue < 6. Zero is red, one is yellow, two is green, etc.
-    <em>This value is convenient for the internal calculations - some other
-    systems consider hue to run from zero to one, or from 0 to 360.</em>
-   */
-  double hue() const {return hue_;}
-
-  /**
-    Returns the saturation.
-    0 <= saturation <= 1.
-   */
-  double saturation() const {return saturation_;}
-
-  /**
-    Returns the value/brightness.
-    0 <= value <= 1.
-   */
-  double value() const {return value_;}
-
-  /**
-    Returns the current red value.
-    0 <= r <= 1.
-   */
-  double r() const {return r_;}
-
-  /**
-    Returns the current green value.
-    0 <= g <= 1.
-   */
-  double g() const {return g_;}
-
-  /**
-    Returns the current blue value.
-    0 <= b <= 1.
-   */
-  double b() const {return b_;}
-
-  int hsv(double H, double S, double V);
-
-  int rgb(double R, double G, double B);
-
-  static void hsv2rgb(double H, double S, double V, double& R, double& G, double& B);
-
-  static void rgb2hsv(double R, double G, double B, double& H, double& S, double& V);
-
-  Fl_Color_Chooser(int X, int Y, int W, int H, const char *L = 0);
-};
-
-FL_EXPORT int fl_color_chooser(const char* name, double& r, double& g, double& b, int m=-1);
-FL_EXPORT int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int m=-1);
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Copy_Surface.H
+++ /dev/null
@@ -1,137 +1,0 @@
-//
-// "$Id$"
-//
-// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Copy_Surface_H
-#define Fl_Copy_Surface_H
-
-#include <FL/Fl_Paged_Device.H>
-#include <FL/Fl_Printer.H>
-#include <FL/x.H>
-
-/** Supports copying of graphical data to the clipboard.
- 
- <br> After creation of an Fl_Copy_Surface object, call set_current() on it, and all subsequent graphics requests
- will be recorded in the clipboard. It's possible to draw widgets (using Fl_Copy_Surface::draw()
- ) or to use any of the \ref fl_drawings or the \ref fl_attributes.
- Finally, delete the Fl_Copy_Surface object to load the clipboard with the graphical data.
- <br> Fl_GL_Window 's can be copied to the clipboard as well. 
- <br> Usage example:
- \code
- Fl_Widget *g = ...; // a widget you want to copy to the clipboard
- Fl_Copy_Surface *copy_surf = new Fl_Copy_Surface(g->w(), g->h()); // create an Fl_Copy_Surface object
- copy_surf->set_current(); // direct graphics requests to the clipboard
- fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background
- copy_surf->draw(g); // draw the g widget in the clipboard
- delete copy_surf; // after this, the clipboard is loaded
- Fl_Display_Device::display_device()->set_current();  // direct graphics requests back to the display
- \endcode
- Platform details:
- \li MSWindows: Transparent RGB images copy without transparency.
- The graphical data are copied to the clipboard as an 'enhanced metafile'.
- \li Mac OS: The graphical data are copied to the clipboard (a.k.a. pasteboard) in two 'flavors':
- 1) in vectorial form as PDF data; 2) in bitmap form as a TIFF image. 
- Applications to which the clipboard content is pasted can use the flavor that suits them best.
- \li X11: the graphical data are copied to the clipboard as an image in BMP format.
-*/
-class FL_EXPORT Fl_Copy_Surface : public Fl_Surface_Device {
-private:
-  int width;
-  int height;
-  Fl_Paged_Device *helper;
-#ifdef __APPLE__
-  CFMutableDataRef pdfdata;
-  CGContextRef oldgc;
-  CGContextRef gc;
-  void prepare_copy_pdf_and_tiff(int w, int h);
-  void complete_copy_pdf_and_tiff();
-  void init_PDF_context(int w, int h);
-  static size_t MyPutBytes(void* info, const void* buffer, size_t count);
-#elif defined(WIN32)
-  HDC oldgc;
-  HDC gc;
-#else // Xlib
-  Fl_Offscreen xid;
-  Window oldwindow;
-  Fl_Surface_Device *_ss;
-#endif
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_Copy_Surface(int w, int h);
-  ~Fl_Copy_Surface();
-  void set_current();
-  void draw(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
-  void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
-  /** Returns the pixel width of the copy surface */
-  int w() { return width; }
-  /** Returns the pixel height of the copy surface */
-  int h() { return height; }
-};
-
-#if defined(__APPLE__)
-
-/* Mac class to reimplement Fl_Paged_Device::printable_rect() */
-class FL_EXPORT Fl_Quartz_Surface_ : public Fl_System_Printer {
-protected:
-  int width;
-  int height;
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_Quartz_Surface_(int w, int h);
-  virtual int printable_rect(int *w, int *h);
-  virtual ~Fl_Quartz_Surface_() {};
-};
-
-#elif defined(WIN32)
-
-/* Win class to implement translate()/untranslate() */
-class FL_EXPORT Fl_GDI_Surface_ : public Fl_Paged_Device {
-  int width;
-  int height;
-  unsigned depth;
-  POINT origins[10];
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_GDI_Surface_();
-  virtual void translate(int x, int y);
-  virtual void untranslate();
-  virtual ~Fl_GDI_Surface_();
-};
-
-#elif !defined(FL_DOXYGEN)
-
-/* Xlib class to implement translate()/untranslate() */
-class FL_EXPORT Fl_Xlib_Surface_ : public Fl_Paged_Device {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_Xlib_Surface_();
-  virtual void translate(int x, int y);
-  virtual void untranslate();
-  virtual ~Fl_Xlib_Surface_();
-};
-
-#endif
-
-#endif // Fl_Copy_Surface_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Counter.H
+++ /dev/null
@@ -1,115 +1,0 @@
-//
-// "$Id$"
-//
-// Counter header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Counter widget . */
-
-// A numerical value with up/down step buttons.  From Forms.
-
-#ifndef Fl_Counter_H
-#define Fl_Counter_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_COUNTER	0	/**< type() for counter with fast buttons */
-#define FL_SIMPLE_COUNTER	1	/**< type() for counter without fast buttons */
-
-/**
-  Controls a single floating point value with button (or keyboard) arrows.
-  Double arrows buttons achieve larger steps than simple arrows.
-  \see Fl_Spinner for value input with vertical step arrows.
-  <P align=center>\image html counter.png</P>
-  \image latex counter.png "Fl_Counter" width=4cm
-
-  \todo Refactor the doxygen comments for Fl_Counter type() documentation.
-
-  The type of an Fl_Counter object can be set using type(uchar t) to:
-  \li \c FL_NORMAL_COUNTER: Displays a counter with 4 arrow buttons.
-  \li \c FL_SIMPLE_COUNTER: Displays a counter with only 2 arrow buttons.
-*/
-class FL_EXPORT Fl_Counter : public Fl_Valuator {
-
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  double lstep_;
-  uchar mouseobj;
-  static void repeat_callback(void *);
-  int calc_mouseobj();
-  void increment_cb();
-
-protected:
-
-  void draw();
-
-public:
-
-  int handle(int);
-
-  Fl_Counter(int X, int Y, int W, int H, const char* L = 0);
-  ~Fl_Counter();
-
-  /**
-    Sets the increment for the large step buttons.
-    The default value is 1.0.
-    \param[in] a large step increment.
-  */
-  void lstep(double a) {lstep_ = a;}
-
-  /**
-    Sets the increments for the normal and large step buttons.
-    \param[in] a, b normal and large step increments.
-  */
-  void step(double a,double b) {Fl_Valuator::step(a); lstep_ = b;}
-
-  /**
-    Sets the increment for the normal step buttons.
-    \param[in] a normal step increment.
-  */
-  void step(double a) {Fl_Valuator::step(a);}
-
-  /**
-    Returns the increment for normal step buttons.
-   */
-  double step() const {return Fl_Valuator::step();}
-
-  /** Gets the text font */
-  Fl_Font textfont() const {return textfont_;}
-  /** Sets the text font to \p s */
-  void textfont(Fl_Font s) {textfont_ = s;}
-
-  /** Gets the font size */
-  Fl_Fontsize textsize() const {return textsize_;}
-  /** Sets the font size to \p s */
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-  /** Gets the font color */
-  Fl_Color textcolor() const {return textcolor_;}
-  /** Sets the font color to \p s */
-  void textcolor(Fl_Color s) {textcolor_ = s;}
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Device.H
+++ /dev/null
@@ -1,636 +1,0 @@
-//
-// "$Id$"
-//
-// Definition of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, Fl_Display_Device
-// for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file Fl_Device.H 
- \brief declaration of classes Fl_Device, Fl_Graphics_Driver, Fl_Surface_Device, 
- Fl_Display_Device, Fl_Device_Plugin.
-*/
-
-#ifndef Fl_Device_H
-#define Fl_Device_H
-
-#include <FL/x.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <stdlib.h>
-
-class Fl_Graphics_Driver;
-class Fl_Font_Descriptor;
-/** \brief Points to the driver that currently receives all graphics requests */
-FL_EXPORT extern Fl_Graphics_Driver *fl_graphics_driver;
-
-/**
- signature of image generation callback function.
- \param[in]  data  user data passed to function
- \param[in]  x,y,w position and width of scan line in image
- \param[out] buf   buffer for generated image data. You must copy \p w
- pixels from scanline \p y, starting at pixel \p x
- to this buffer.
- */
-typedef void (*Fl_Draw_Image_Cb)(void* data,int x,int y,int w,uchar* buf);
-
-// typedef what the x,y fields in a point are:
-#ifdef WIN32
-typedef int COORD_T;
-#  define XPOINT XPoint
-#elif defined(__APPLE__)
-typedef float COORD_T;
-typedef struct { float x; float y; } QPoint;
-#  define XPOINT QPoint
-extern float fl_quartz_line_width_;
-#else
-typedef short COORD_T;
-#  define XPOINT XPoint
-#endif
-
-/**
- All graphical output devices and all graphics systems.
- This class supports a rudimentary system of run-time type information.
- */
-class FL_EXPORT Fl_Device {
-public:
-  /** A string that identifies each subclass of Fl_Device.
-     Function class_name() applied to a device of this class returns this string.
-   */
-  static const char *class_id;
-  /** 
-   Returns the name of the class of this object. 
-   Use of the class_name() function is discouraged because it will be removed from future FLTK versions.
-   
-   The class of an instance of an Fl_Device subclass can be checked with code such as:
-   \code
-   if ( instance->class_name() == Fl_Printer::class_id ) { ... }
-   \endcode
-   */
-  virtual const char *class_name() {return class_id;};
-  /** 
-   Virtual destructor.
-   
-   The destructor of Fl_Device must be virtual to make the destructors of
-   derived classes being called correctly on destruction.
-   */
-  virtual ~Fl_Device() {};
-};
-
-#define FL_REGION_STACK_SIZE 10
-#define FL_MATRIX_STACK_SIZE 32
-/**
- \brief A virtual class subclassed for each graphics driver FLTK uses.
- Typically, FLTK applications do not use directly objects from this class. Rather, they perform
- drawing operations (e.g., fl_rectf()) that operate on the current drawing surface (see Fl_Surface_Device).
- Drawing operations are functionally presented in \ref drawing and as function lists
- in the \ref fl_drawings and \ref fl_attributes modules. The \ref fl_graphics_driver global variable
- gives at any time the graphics driver used by all drawing operations. Its value changes when
- drawing operations are directed to another drawing surface by Fl_Surface_Device::set_current().
- 
- \p The Fl_Graphics_Driver class is of interest if one wants to perform new kinds of drawing operations.
- An example would be to draw to a PDF file. This would involve creating a new Fl_Graphics_Driver derived 
- class. This new class should implement all virtual methods of the Fl_Graphics_Driver class
- to support all FLTK drawing functions.
-  */
-class FL_EXPORT Fl_Graphics_Driver : public Fl_Device {
-public:
-  /** A 2D coordinate transformation matrix
-   */
-  struct matrix {double a, b, c, d, x, y;};
-private:
-  static const matrix m0;
-  Fl_Font font_; // current font
-  Fl_Fontsize size_; // current font size
-  Fl_Color color_; // current color
-  int sptr;
-  static const int matrix_stack_size = FL_MATRIX_STACK_SIZE;
-  matrix stack[FL_MATRIX_STACK_SIZE];
-  matrix m;
-  int n, p_size, gap_;
-  XPOINT *p;
-  int what;
-  int fl_clip_state_number;
-  int rstackptr;
-  static const int region_stack_max = FL_REGION_STACK_SIZE - 1;
-  Fl_Region rstack[FL_REGION_STACK_SIZE];
-#ifdef WIN32
-  int numcount;
-  int counts[20];
-#endif
-  Fl_Font_Descriptor *font_descriptor_;
-  void transformed_vertex0(COORD_T x, COORD_T y);
-  void fixloop();
-  
-protected:
-#ifndef FL_DOXYGEN
-  enum {LINE, LOOP, POLYGON, POINT_};
-  inline int vertex_no() { return n; }
-  inline XPOINT *vertices() {return p;}
-  inline int vertex_kind() {return what;}
-#endif
-/*  ** \brief red color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_r_; 
-  ** \brief green color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_g_; 
-  ** \brief blue color for background and/or mixing if device does not support masking or alpha *
-  uchar bg_b_; */
-  friend class Fl_Pixmap;
-  friend class Fl_Bitmap;
-  friend class Fl_RGB_Image;
-  friend void fl_rect(int x, int y, int w, int h);
-  friend void fl_rectf(int x, int y, int w, int h);
-  friend void fl_line_style(int style, int width, char* dashes);
-  friend void fl_xyline(int x, int y, int x1);
-  friend void fl_xyline(int x, int y, int x1, int y2);
-  friend void fl_xyline(int x, int y, int x1, int y2, int x3);
-  friend void fl_yxline(int x, int y, int y1);
-  friend void fl_yxline(int x, int y, int y1, int x2);
-  friend void fl_yxline(int x, int y, int y1, int x2, int y3);
-  friend void fl_line(int x, int y, int x1, int y1);
-  friend void fl_line(int x, int y, int x1, int y1, int x2, int y2);
-  friend void fl_draw(const char *str, int n, int x, int y);
-#ifdef __APPLE__
-  friend void fl_draw(const char *str, int n, float x, float y);
-#endif
-  friend void fl_draw(int angle, const char *str, int n, int x, int y);
-  friend void fl_rtl_draw(const char *str, int n, int x, int y);
-  friend void fl_font(Fl_Font face, Fl_Fontsize size);
-  friend void fl_color(Fl_Color c);
-  friend void fl_color(uchar r, uchar g, uchar b);
-  friend void fl_point(int x, int y);
-  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  friend void fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  friend void fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  friend void fl_begin_points();
-  friend void fl_begin_line();
-  friend void fl_begin_loop();
-  friend void fl_begin_polygon();
-  friend void fl_vertex(double x, double y);
-  friend void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
-  friend void fl_circle(double x, double y, double r);
-  friend void fl_arc(double x, double y, double r, double start, double end);
-  friend void fl_arc(int x, int y, int w, int h, double a1, double a2);
-  friend void fl_pie(int x, int y, int w, int h, double a1, double a2);
-  friend void fl_end_points();
-  friend void fl_end_line();
-  friend void fl_end_loop();
-  friend void fl_end_polygon();
-  friend void fl_transformed_vertex(double xf, double yf);
-  friend void fl_push_clip(int x, int y, int w, int h);
-  friend int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  friend int fl_not_clipped(int x, int y, int w, int h);
-  friend void fl_push_no_clip();
-  friend void fl_pop_clip();
-  friend void fl_begin_complex_polygon();
-  friend void fl_gap();
-  friend void fl_end_complex_polygon();
-  friend void fl_push_matrix();
-  friend void fl_pop_matrix();
-  friend void fl_mult_matrix(double a, double b, double c, double d, double x, double y);
-  friend void fl_scale(double x, double y);
-  friend void fl_scale(double x);
-  friend void fl_translate(double x, double y);
-  friend void fl_rotate(double d);
-  friend double fl_transform_x(double x, double y);
-  friend double fl_transform_y(double x, double y);
-  friend double fl_transform_dx(double x, double y);
-  friend double fl_transform_dy(double x, double y);
-  friend Fl_Region fl_clip_region();
-  friend void fl_clip_region(Fl_Region r);
-  friend void fl_restore_clip();
-  
-  friend void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L);
-  friend void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L);
-  friend void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
-  friend FL_EXPORT void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D);
-  friend FL_EXPORT void gl_start();
-  friend FL_EXPORT void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-  matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */
-
-  /** \brief The constructor. */
-  Fl_Graphics_Driver();
-  /** \brief see fl_rect(int x, int y, int w, int h). */
-  virtual void rect(int x, int y, int w, int h);
-  /** \brief see fl_rectf(int x, int y, int w, int h). */
-  virtual void rectf(int x, int y, int w, int h);
-  /** \brief see fl_line_style(int style, int width, char* dashes). */
-  virtual void line_style(int style, int width=0, char* dashes=0);
-  /** \brief see fl_xyline(int x, int y, int x1). */
-  virtual void xyline(int x, int y, int x1);
-  /** \brief see fl_xyline(int x, int y, int x1, int y2). */
-  virtual void xyline(int x, int y, int x1, int y2);
-  /** \brief see fl_xyline(int x, int y, int x1, int y2, int x3). */
-  virtual void xyline(int x, int y, int x1, int y2, int x3);
-  /** \brief see fl_yxline(int x, int y, int y1). */
-  virtual void yxline(int x, int y, int y1);
-  /** \brief see fl_yxline(int x, int y, int y1, int x2). */
-  virtual void yxline(int x, int y, int y1, int x2);
-  /** \brief see fl_yxline(int x, int y, int y1, int x2, int y3). */
-  virtual void yxline(int x, int y, int y1, int x2, int y3);
-  /** \brief see fl_line(int x, int y, int x1, int y1). */
-  virtual void line(int x, int y, int x1, int y1);
-  /** \brief see fl_line(int x, int y, int x1, int y1, int x2, int y2). */
-  virtual void line(int x, int y, int x1, int y1, int x2, int y2);
-  /** \brief see fl_draw(const char *str, int n, int x, int y). */
-  virtual void draw(const char *str, int n, int x, int y) {}
-#ifdef __APPLE__
-  virtual void draw(const char *str, int n, float x, float y) { draw(str, n, (int)(x+0.5), (int)(y+0.5));}
-#endif
-  /** \brief see fl_draw(int angle, const char *str, int n, int x, int y). */
-  virtual void draw(int angle, const char *str, int n, int x, int y) {}
-  /** \brief see fl_rtl_draw(const char *str, int n, int x, int y). */
-  virtual void rtl_draw(const char *str, int n, int x, int y) {};
-  /** \brief see fl_color(Fl_Color c). */
-  virtual void color(Fl_Color c) {color_ = c;}
-  /** \brief see fl_color(uchar r, uchar g, uchar b). */
-  virtual void color(uchar r, uchar g, uchar b) {}
-  /** \brief see fl_point(int x, int y). */
-  virtual void point(int x, int y);
-  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2). */
-  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  /** \brief see fl_loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
-  virtual void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2). */
-  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  /** \brief see fl_polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3). */
-  virtual void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  /** \brief see fl_begin_points(). */
-  virtual void begin_points();
-  /** \brief see fl_begin_line(). */
-  virtual void begin_line();
-  /** \brief see fl_begin_loop(). */
-  virtual void begin_loop();
-  /** \brief see fl_begin_polygon(). */
-  virtual void begin_polygon();
-  /** \brief see fl_vertex(double x, double y). */
-  virtual void vertex(double x, double y);
-  /** \brief see fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3). */
-  virtual void curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3);
-  /** \brief see fl_circle(double x, double y, double r). */
-  virtual void circle(double x, double y, double r);
-  /** \brief see fl_arc(double x, double y, double r, double start, double end). */
-  virtual void arc(double x, double y, double r, double start, double end);
-  /** \brief see fl_arc(int x, int y, int w, int h, double a1, double a2). */
-  virtual void arc(int x, int y, int w, int h, double a1, double a2);
-  /** \brief see fl_pie(int x, int y, int w, int h, double a1, double a2). */
-  virtual void pie(int x, int y, int w, int h, double a1, double a2);
-  /** \brief see fl_end_points(). */
-  virtual void end_points();
-  /** \brief see fl_end_line(). */
-  virtual void end_line();
-  /** \brief see fl_end_loop(). */
-  virtual void end_loop();
-  /** \brief see fl_end_polygon(). */
-  virtual void end_polygon();
-  /** \brief see fl_begin_complex_polygon(). */
-  virtual void begin_complex_polygon();
-  /** \brief see fl_gap(). */
-  virtual void gap();
-  /** \brief see fl_end_complex_polygon(). */
-  virtual void end_complex_polygon();
-  /** \brief see fl_transformed_vertex(double xf, double yf). */
-  virtual void transformed_vertex(double xf, double yf);
-  /** \brief see fl_push_clip(int x, int y, int w, int h). */
-  virtual void push_clip(int x, int y, int w, int h);
-  /** \brief see fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H). */
-  virtual int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  /** \brief see fl_not_clipped(int x, int y, int w, int h). */
-  virtual int not_clipped(int x, int y, int w, int h);
-  /** \brief see fl_push_no_clip(). */
-  virtual void push_no_clip();
-  /** \brief see fl_pop_clip(). */
-  virtual void pop_clip();
-    
-  /** \brief see fl_push_matrix(). */
-  void push_matrix();
-  /** \brief see fl_pop_matrix(). */
-  void pop_matrix();
-  /** \brief see fl_mult_matrix(double a, double b, double c, double d, double x, double y). */
-  void mult_matrix(double a, double b, double c, double d, double x, double y);
-  /** \brief see fl_scale(double x, double y). */
-  inline void scale(double x, double y) { mult_matrix(x,0,0,y,0,0); }
-  /** \brief see fl_scale(double x). */
-  inline void scale(double x) { mult_matrix(x,0,0,x,0,0); }
-  /** \brief see fl_translate(double x, double y). */
-  inline void translate(double x,double y) { mult_matrix(1,0,0,1,x,y); }
-  /** \brief see fl_rotate(double d). */
-  void rotate(double d);
-  /** \brief see fl_transform_x(double x, double y). */
-  double transform_x(double x, double y);
-  /** \brief see fl_transform_y(double x, double y). */
-  double transform_y(double x, double y);
-  /** \brief see fl_transform_dx(double x, double y). */
-  double transform_dx(double x, double y);
-  /** \brief see fl_transform_dy(double x, double y). */
-  double transform_dy(double x, double y);
-  /** \brief see fl_clip_region(). */
-  Fl_Region clip_region();
-  /** \brief see fl_clip_region(Fl_Region r). */
-  void clip_region(Fl_Region r);
-  /** \brief see fl_restore_clip(). */
-  void restore_clip();
-  
-  // Images
-  /** \brief see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
-  virtual   void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) {}
-  /** \brief see fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D, int L). */
-  virtual   void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) {}
-  /** \brief see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
-  virtual   void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) {}
-  /** \brief see fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D). */
-  virtual   void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) {}
-  // Image classes
-  /** \brief Draws an Fl_RGB_Image object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual   void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy) {}
-  /** \brief Draws an Fl_Pixmap object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual   void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy) {}
-  /** \brief Draws an Fl_Bitmap object to the device. 
-   *
-   Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
-   the image offset by the cx and cy arguments.
-   */
-  virtual void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {}
-#if FLTK_ABI_VERSION >= 10301
-  virtual
-#endif
-  void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-  
-public:
-  static const char *class_id;
-  virtual const char *class_name() {return class_id;};
-  /** \brief see fl_font(Fl_Font face, Fl_Fontsize size). */
-  virtual void font(Fl_Font face, Fl_Fontsize fsize) {font_ = face; size_ = fsize;}
-  /** \brief see fl_font(void). */
-  Fl_Font font() {return font_; }
-  /** \brief see fl_size(). */
-  Fl_Fontsize size() {return size_; }
-  /** \brief see fl_width(const char *str, int n). */
-  virtual double width(const char *str, int n) {return 0;}
-  /** \brief see fl_width(unsigned int n). */
-  virtual inline double width(unsigned int c) { char ch = (char)c; return width(&ch, 1); }
-  /** \brief see fl_text_extents(const char*, int n, int& dx, int& dy, int& w, int& h). */
-  virtual void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  /** \brief see fl_height(). */
-  virtual int height() {return size();}
-  /** \brief see fl_descent(). */
-  virtual int descent() {return 0;}
-  /** \brief see fl_color(void). */
-  Fl_Color color() {return color_;}
-  /** Returns a pointer to the current Fl_Font_Descriptor for the graphics driver */
-  inline Fl_Font_Descriptor *font_descriptor() { return font_descriptor_;}
-  /** Sets the current Fl_Font_Descriptor for the graphics driver */
-  inline void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
-#if FLTK_ABI_VERSION >= 10304 || defined(FL_DOXYGEN)
-  virtual
-#endif
-  int draw_scaled(Fl_Image *img, int X, int Y, int W, int H);
-  /** \brief The destructor */
-  virtual ~Fl_Graphics_Driver() { if (p) free(p); }
-};
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-/**
- \brief The Mac OS X-specific graphics class.
- *
- This class is implemented only on the Mac OS X platform.
- */
-class FL_EXPORT Fl_Quartz_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-#ifdef __APPLE__
-  void draw(const char *str, int n, float x, float y);
-#endif
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-#if ! defined(FL_DOXYGEN)
-  static Fl_Offscreen create_offscreen_with_alpha(int w, int h);
-#endif
-  void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-};
-#endif
-#if defined(WIN32) || defined(FL_DOXYGEN)
-/**
- \brief The MSWindows-specific graphics class.
- *
- This class is implemented only on the MSWindows platform.
- */
-class FL_EXPORT Fl_GDI_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-#if ! defined(FL_DOXYGEN)
-  void copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy);
-#endif
-  void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-};
-
-/**
- The graphics driver used when printing on MSWindows.
- *
- This class is implemented only on the MSWindows platform. It 's extremely similar to Fl_GDI_Graphics_Driver.
- */
-class FL_EXPORT Fl_GDI_Printer_Graphics_Driver : public Fl_GDI_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy);
-  int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
-};
-#endif
-#if !(defined(__APPLE__) || defined(WIN32))
-/**
- \brief The Xlib-specific graphics class.
- *
- This class is implemented only on the Xlib platform.
- */
-class FL_EXPORT Fl_Xlib_Graphics_Driver : public Fl_Graphics_Driver {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  void draw(const char* str, int n, int x, int y);
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* str, int n, int x, int y);
-  void font(Fl_Font face, Fl_Fontsize size);
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
-  double width(const char *str, int n);
-  double width(unsigned int c);
-  void text_extents(const char*, int n, int& dx, int& dy, int& w, int& h);
-  int height();
-  int descent();
-  void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#if ! defined(FL_DOXYGEN)
-  void copy_offscreen_with_alpha(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#endif
-};
-#endif
-
-/**
- A drawing surface that's susceptible to receive graphical output.
- Any FLTK application has at any time a current drawing surface to which all drawing requests are directed.
- The current surface is given by Fl_Surface_Device::surface().
- When main() begins running, the current drawing surface has been set to the computer's display, 
- an instance of the Fl_Display_Device class.
-
- A drawing surface other than the computer's display, is typically used as follows:
- <ol><li> Create \c surface, an object from a particular Fl_Surface_Device derived class (e.g., Fl_Copy_Surface, Fl_Printer).
- <li> Memorize what is the current drawing surface with <tt> Fl_Surface_Device *old_current = Fl_Surface_Device::surface();</tt>
- <li> Call \c surface->set_current(); to redirect all graphics requests to \c surface which becomes the new
- current drawing surface (not necessary with class Fl_Printer because it is done by Fl_Printer::start_job()).
- <li> At this point any of the \ref fl_drawings (e.g., fl_rect()) or the \ref fl_attributes or \ref drawing_images functions
- (e.g., fl_draw_image(), Fl_Image::draw()) operates on the new current drawing surface.
- Certain drawing surfaces allow additional ways to draw to them (e.g., Fl_Printer::print_widget(), Fl_Image_Surface::draw()).
- <li> After all drawing requests have been performed, redirect graphics requests back to their previous destination
- with \c old_current->set_current();.
- <li> Delete \c surface.
- </ol>
- */
-class FL_EXPORT Fl_Surface_Device : public Fl_Device {
-  /** \brief The graphics driver in use by this surface. */
-  Fl_Graphics_Driver *_driver;
-  static Fl_Surface_Device *_surface; // the surface that currently receives graphics output
-  static Fl_Surface_Device *default_surface(); // create surface is none exists yet
-protected:
-  /** \brief Constructor that sets the graphics driver to use for the created surface. */
-  Fl_Surface_Device(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver; };
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  virtual void set_current(void);
-  /** \brief Sets the graphics driver of this drawing surface. */
-  inline void driver(Fl_Graphics_Driver *graphics_driver) {_driver = graphics_driver;};
-  /** \brief Returns the graphics driver of this drawing surface. */
-  inline Fl_Graphics_Driver *driver() {return _driver; };
-  /** The current drawing surface.
-   In other words, the Fl_Surface_Device object that currently receives all graphics output */
-  static inline Fl_Surface_Device *surface() {
-    return _surface ? _surface : default_surface();
-  };
-  /** \brief The destructor. */
-  virtual ~Fl_Surface_Device() {}
-};
-
-/**
- A display to which the computer can draw.
- When the program begins running, an Fl_Display_Device instance has been created and made the current drawing surface.
- There is no need to create any other object of this class.
- */
-class FL_EXPORT Fl_Display_Device : public Fl_Surface_Device {
-  static Fl_Display_Device *_display; // the platform display device
-#ifdef __APPLE__
-  friend class Fl_X;
-  friend class Fl_Graphics_Driver;
-  static bool high_res_window_; //< true when drawing to a window of a retina display (Mac OS X only)
-  static bool high_resolution() {return high_res_window_;}
-#endif
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_Display_Device(Fl_Graphics_Driver *graphics_driver);
-  static Fl_Display_Device *display_device();
-};
-
-/**
- This plugin socket allows the integration of new device drivers for special
- window or screen types. 
- This class is not intended for use outside the FLTK library.
- It is currently used to provide an automated printing
- service and screen capture for OpenGL windows, if linked with fltk_gl.
- */
-class FL_EXPORT Fl_Device_Plugin : public Fl_Plugin {
-public:
-  /** \brief The constructor */
-  Fl_Device_Plugin(const char *pluginName)
-  : Fl_Plugin(klass(), pluginName) { }
-  /** \brief Returns the class name */
-  virtual const char *klass() { return "fltk:device"; }
-  /** \brief Returns the plugin name */
-  virtual const char *name() = 0;
-  /** \brief Prints a widget 
-   \param w the widget
-   \param x,y offsets where to print relatively to coordinates origin
-   \param height height of the current drawing area
-   */
-  virtual int print(Fl_Widget* w, int x, int y, int height) = 0;
-  /** captures a rectangle of a widget as an image
-   \return The captured pixels as an RGB image
-   */
-#ifdef FL_LIBRARY
-    virtual
-#endif
-  Fl_RGB_Image* rectangle_capture(Fl_Widget *widget, int x, int y, int w, int h) {return NULL;}
-};
-
-#endif // Fl_Device_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Dial.H
+++ /dev/null
@@ -1,88 +1,0 @@
-//
-// "$Id$"
-//
-// Dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Dial widget . */
-
-#ifndef Fl_Dial_H
-#define Fl_Dial_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_DIAL	0	/**< type() for dial variant with dot */
-#define FL_LINE_DIAL	1	/**< type() for dial variant with line */
-#define FL_FILL_DIAL	2	/**< type() for dial variant with filled arc */
-
-/**
-  The Fl_Dial widget provides a circular dial to control a
-  single floating point value.
-  <P ALIGN=CENTER>\image html dial.png 
-  \image latex dial.png "Fl_Dial" width=4cm
-  Use type() to set the type of the dial to:
-  <UL>
-  <LI>FL_NORMAL_DIAL - Draws a normal dial with a knob. </LI>
-  <LI>FL_LINE_DIAL - Draws a dial with a line. </LI>
-  <LI>FL_FILL_DIAL - Draws a dial with a filled arc. </LI>
-  </UL>
-
-*/
-class FL_EXPORT Fl_Dial : public Fl_Valuator {
-
-  short a1,a2;
-
-protected:
-
-  // these allow subclasses to put the dial in a smaller area:
-  void draw(int X, int Y, int W, int H);
-  int handle(int event, int X, int Y, int W, int H);
-  void draw();
-
-public:
-
-  int handle(int);
-  /**
-    Creates a new Fl_Dial widget using the given position, size,
-    and label string. The default type is FL_NORMAL_DIAL.
-  */
-  Fl_Dial(int x,int y,int w,int h, const char *l = 0);
-  /** 
-     Sets Or gets the angles used for the minimum and maximum values.  The default
-     values are 45 and 315 (0 degrees is straight down and the angles
-     progress clockwise).  Normally angle1 is less than angle2, but if you
-     reverse them the dial moves counter-clockwise.
-  */
-  short angle1() const {return a1;}
-  /** See short angle1() const */
-  void angle1(short a) {a1 = a;}
-  /** See short angle1() const */
-  short angle2() const {return a2;}
-  /** See short angle1() const */
-  void angle2(short a) {a2 = a;}
-  /** See short angle1() const */
-  void angles(short a, short b) {a1 = a; a2 = b;}
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Double_Window.H
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Double-buffered window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Double_Window widget . */
-
-#ifndef Fl_Double_Window_H
-#define Fl_Double_Window_H
-
-#include "Fl_Window.H"
-
-/**
-  The Fl_Double_Window provides a double-buffered window.
-  If possible this will use the X double buffering extension (Xdbe).  If
-  not, it will draw the window data into an off-screen pixmap, and then
-  copy it to the on-screen window.
-  <P>It is highly recommended that you put the following code before the
-  first show() of <I>any</I> window in your program: </P>
-  \code
-  Fl::visual(FL_DOUBLE|FL_INDEX)
-  \endcode
-  This makes sure you can use Xdbe on servers where double buffering
-  does not exist for every visual.
-*/
-class FL_EXPORT Fl_Double_Window : public Fl_Window {
-protected:
-  void flush(int eraseoverlay);
-  /**
-    Force double buffering, even if the OS already buffers windows
-    (overlays need that on MacOS and Windows2000)
-  */
-  char force_doublebuffering_;
-public:
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-  void resize(int,int,int,int);
-  void hide();
-  ~Fl_Double_Window();
-  
-  /**
-   Creates a new Fl_Double_Window widget using the given
-   position, size, and label (title) string.
-  */
-  Fl_Double_Window(int W, int H, const char *l = 0);
-  
-  /**
-   See  Fl_Double_Window::Fl_Double_Window(int w, int h, const char *label = 0)
-  */
-  Fl_Double_Window(int X, int Y, int W, int H, const char *l = 0);
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Export.H
+++ /dev/null
@@ -1,42 +1,0 @@
-/*
- * "$Id$"
- *
- * WIN32 DLL export .
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef Fl_Export_H
-#  define Fl_Export_H
-
-/*
- * The following is only used when building DLLs under WIN32...
- */
-
-#  if defined(FL_DLL)
-#    ifdef FL_LIBRARY
-#      define FL_EXPORT	__declspec(dllexport)
-#    else
-#      define FL_EXPORT	__declspec(dllimport)
-#    endif /* FL_LIBRARY */
-#  elif __GNUC__ >= 4
-#    define FL_EXPORT __attribute__ ((visibility ("default")))
-#  else
-#    define FL_EXPORT
-#  endif /* FL_DLL */
-
-#endif /* !Fl_Export_H */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/FL/Fl_File_Browser.H
+++ /dev/null
@@ -1,111 +1,0 @@
-//
-// "$Id$"
-//
-// FileBrowser definitions.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Browser widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_File_Browser_H_
-#  define _Fl_File_Browser_H_
-
-#  include "Fl_Browser.H"
-#  include "Fl_File_Icon.H"
-#  include "filename.H"
-
-
-//
-// Fl_File_Browser class...
-//
-
-/** The Fl_File_Browser widget displays a list of filenames, optionally with file-specific icons. */
-class FL_EXPORT Fl_File_Browser : public Fl_Browser {
-  
-  int		filetype_;
-  const char	*directory_;
-  uchar		iconsize_;
-  const char	*pattern_;
-
-  int		full_height() const;
-  int		item_height(void *) const;
-  int		item_width(void *) const;
-  void		item_draw(void *, int, int, int, int) const;
-  int		incr_height() const { return (item_height(0)); }
-
-public:
-  enum { FILES, DIRECTORIES };
-
-  /**
-    The constructor creates the Fl_File_Browser widget at the specified position and size.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-  Fl_File_Browser(int, int, int, int, const char * = 0);
-
-  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
-  uchar		iconsize() const { return (iconsize_); };
-  /**    Sets or gets the size of the icons. The default size is 20 pixels.  */
-  void		iconsize(uchar s) { iconsize_ = s; redraw(); };
-
-  /**
-    Sets or gets the filename filter. The pattern matching uses
-    the fl_filename_match()
-    function in FLTK.
-  */
-  void	filter(const char *pattern);
-  /**
-    Sets or gets the filename filter. The pattern matching uses
-    the fl_filename_match()
-    function in FLTK.
-  */
-  const char	*filter() const { return (pattern_); };
-
-  /**
-    Loads the specified directory into the browser. If icons have been
-    loaded then the correct icon is associated with each file in the list.
-    
-    <P>The sort argument specifies a sort function to be used with
-    fl_filename_list().
-  */
-  int		load(const char *directory, Fl_File_Sort_F *sort = fl_numericsort);
-
-  Fl_Fontsize  textsize() const { return Fl_Browser::textsize(); };
-  void		textsize(Fl_Fontsize s) { Fl_Browser::textsize(s); iconsize_ = (uchar)(3 * s / 2); };
-
-  /**
-    Sets or gets the file browser type, FILES or
-    DIRECTORIES. When set to FILES, both
-    files and directories are shown. Otherwise only directories are
-    shown.
-  */
-  int		filetype() const { return (filetype_); };
-  /**
-    Sets or gets the file browser type, FILES or
-    DIRECTORIES. When set to FILES, both
-    files and directories are shown. Otherwise only directories are
-    shown.
-  */
-  void		filetype(int t) { filetype_ = t; };
-};
-
-#endif // !_Fl_File_Browser_H_
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_File_Chooser.H
+++ /dev/null
@@ -1,245 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// =======================================================================
-//  DO NOT EDIT FL/Fl_File_Chooser.H and src/Fl_File_Chooser.cxx !!!
-// =======================================================================
-//  Please use fluid to change src/Fl_File_Chooser.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// =======================================================================
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef Fl_File_Chooser_H
-#define Fl_File_Chooser_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_File_Browser.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_ask.H>
-
-class FL_EXPORT Fl_File_Chooser {
-public:
-  enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 }; 
-private:
-  static Fl_Preferences *prefs_; 
-  void (*callback_)(Fl_File_Chooser*, void *); 
-  void *data_; 
-  char directory_[FL_PATH_MAX]; 
-  char pattern_[FL_PATH_MAX]; 
-  char preview_text_[2048]; 
-  int type_; 
-  void favoritesButtonCB(); 
-  void favoritesCB(Fl_Widget *w); 
-  void fileListCB(); 
-  void fileNameCB(); 
-  void newdir(); 
-  static void previewCB(Fl_File_Chooser *fc); 
-  void showChoiceCB(); 
-  void update_favorites(); 
-  void update_preview(); 
-public:
-  Fl_File_Chooser(const char *d, const char *p, int t, const char *title);
-private:
-  Fl_Double_Window *window;
-  inline void cb_window_i(Fl_Double_Window*, void*);
-  static void cb_window(Fl_Double_Window*, void*);
-  Fl_Choice *showChoice;
-  inline void cb_showChoice_i(Fl_Choice*, void*);
-  static void cb_showChoice(Fl_Choice*, void*);
-  Fl_Menu_Button *favoritesButton;
-  inline void cb_favoritesButton_i(Fl_Menu_Button*, void*);
-  static void cb_favoritesButton(Fl_Menu_Button*, void*);
-public:
-  Fl_Button *newButton;
-private:
-  inline void cb_newButton_i(Fl_Button*, void*);
-  static void cb_newButton(Fl_Button*, void*);
-  inline void cb__i(Fl_Tile*, void*);
-  static void cb_(Fl_Tile*, void*);
-  Fl_File_Browser *fileList;
-  inline void cb_fileList_i(Fl_File_Browser*, void*);
-  static void cb_fileList(Fl_File_Browser*, void*);
-  Fl_Box *previewBox;
-public:
-  Fl_Check_Button *previewButton;
-private:
-  inline void cb_previewButton_i(Fl_Check_Button*, void*);
-  static void cb_previewButton(Fl_Check_Button*, void*);
-public:
-  Fl_Check_Button *showHiddenButton;
-private:
-  inline void cb_showHiddenButton_i(Fl_Check_Button*, void*);
-  static void cb_showHiddenButton(Fl_Check_Button*, void*);
-  Fl_File_Input *fileName;
-  inline void cb_fileName_i(Fl_File_Input*, void*);
-  static void cb_fileName(Fl_File_Input*, void*);
-  Fl_Return_Button *okButton;
-  inline void cb_okButton_i(Fl_Return_Button*, void*);
-  static void cb_okButton(Fl_Return_Button*, void*);
-  Fl_Button *cancelButton;
-  inline void cb_cancelButton_i(Fl_Button*, void*);
-  static void cb_cancelButton(Fl_Button*, void*);
-  Fl_Double_Window *favWindow;
-  Fl_File_Browser *favList;
-  inline void cb_favList_i(Fl_File_Browser*, void*);
-  static void cb_favList(Fl_File_Browser*, void*);
-  Fl_Button *favUpButton;
-  inline void cb_favUpButton_i(Fl_Button*, void*);
-  static void cb_favUpButton(Fl_Button*, void*);
-  Fl_Button *favDeleteButton;
-  inline void cb_favDeleteButton_i(Fl_Button*, void*);
-  static void cb_favDeleteButton(Fl_Button*, void*);
-  Fl_Button *favDownButton;
-  inline void cb_favDownButton_i(Fl_Button*, void*);
-  static void cb_favDownButton(Fl_Button*, void*);
-  Fl_Button *favCancelButton;
-  inline void cb_favCancelButton_i(Fl_Button*, void*);
-  static void cb_favCancelButton(Fl_Button*, void*);
-  Fl_Return_Button *favOkButton;
-  inline void cb_favOkButton_i(Fl_Return_Button*, void*);
-  static void cb_favOkButton(Fl_Return_Button*, void*);
-public:
-  ~Fl_File_Chooser();
-  void callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0);
-  void color(Fl_Color c);
-  Fl_Color color();
-  int count(); 
-  void directory(const char *d); 
-  char * directory();
-  void filter(const char *p); 
-  const char * filter();
-  int filter_value();
-  void filter_value(int f);
-  void hide();
-  void iconsize(uchar s);
-  uchar iconsize();
-  void label(const char *l);
-  const char * label();
-  void ok_label(const char *l);
-  const char * ok_label();
-  void preview(int e); 
-  int preview() const { return previewButton->value(); }; 
-private:
-  void showHidden(int e); 
-  void remove_hidden_files(); 
-public:
-  void rescan(); 
-  void rescan_keep_filename(); 
-  void show(); 
-  int shown();
-  void textcolor(Fl_Color c);
-  Fl_Color textcolor();
-  void textfont(Fl_Font f);
-  Fl_Font textfont();
-  void textsize(Fl_Fontsize s);
-  Fl_Fontsize textsize();
-  void type(int t);
-  int type();
-  void * user_data() const;
-  void user_data(void *d);
-  const char *value(int f = 1); 
-  void value(const char *filename); 
-  int visible();
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *add_favorites_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *all_files_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *custom_filter_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *existing_file_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *favorites_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *filename_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *filesystems_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *manage_favorites_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *new_directory_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *new_directory_tooltip; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *preview_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *save_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *show_label; 
-  /**
-   [standard text may be customized at run-time]
-  */
-  static const char *hidden_label; 
-  /**
-   the sort function that is used when loading
-   the contents of a directory.
-  */
-  static Fl_File_Sort_F *sort; 
-private:
-  Fl_Widget* ext_group; 
-public:
-  Fl_Widget* add_extra(Fl_Widget* gr);
-};
-FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);
-FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);
-FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));
-FL_EXPORT void fl_file_chooser_ok_label(const char*l);
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_File_Icon.H
+++ /dev/null
@@ -1,159 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Icon definitions.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Icon widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_Fl_File_Icon_H_
-#  define _Fl_Fl_File_Icon_H_
-
-#  include "Fl.H"
-
-
-//
-// Special color value for the icon color.
-//
-
-#  define FL_ICON_COLOR (Fl_Color)0xffffffff	/**< icon color [background?]*/
-
-
-//
-// Fl_File_Icon class...
-//
-
-/** 
-  The Fl_File_Icon class manages icon images that can be used 
-  as labels in other widgets and as icons in the FileBrowser widget.
-*/
-class FL_EXPORT Fl_File_Icon {			//// Icon data
-
-  static Fl_File_Icon *first_;	// Pointer to first icon/filetype
-  Fl_File_Icon	*next_;		// Pointer to next icon/filetype
-  const char	*pattern_;	// Pattern string
-  int		type_;		// Match only if directory or file?
-  int		num_data_;	// Number of data elements
-  int		alloc_data_;	// Number of allocated elements
-  short		*data_;		// Icon data
-
-  public:
-
-  enum				// File types
-  {
-    ANY,			// Any kind of file
-    PLAIN,			// Only plain files
-    FIFO,			// Only named pipes
-    DEVICE,			// Only character and block devices
-    LINK,			// Only symbolic links
-    DIRECTORY			// Only directories
-  };
-
-  enum				// Data opcodes
-  {
-    END,			// End of primitive/icon
-    COLOR,			// Followed by color value (2 shorts)
-    LINE,			// Start of line
-    CLOSEDLINE,			// Start of closed line
-    POLYGON,			// Start of polygon
-    OUTLINEPOLYGON,		// Followed by outline color (2 shorts)
-    VERTEX			// Followed by scaled X,Y
-  };
-
-  Fl_File_Icon(const char *p, int t, int nd = 0, short *d = 0);
-  ~Fl_File_Icon();
-
-  short		*add(short d);
-
-  /**
-    Adds a color value to the icon array, returning a pointer to it.
-    \param[in] c color value
-  */
-  short		*add_color(Fl_Color c)
-		{ short *d = add((short)COLOR); add((short)(c >> 16)); add((short)c); return (d); }
-
-  /**
-    Adds a vertex value to the icon array, returning a pointer to it.
-    The integer version accepts coordinates from 0 to 10000.
-    The origin (0.0) is in the lower-lefthand corner of the icon.
-    \param[in] x, y vertex coordinates
-  */
-  short		*add_vertex(int x, int y)
-		{ short *d = add((short)VERTEX); add((short)x); add((short)y); return (d); }
-
-  /**
-    Adds a vertex value to the icon array, returning a pointer to it.
-    The floating point version goes from 0.0 to 1.0.
-    The origin (0.0) is in the lower-lefthand corner of the icon.
-    \param[in] x, y vertex coordinates
-  */
-  short		*add_vertex(float x, float y)
-		{ short *d = add((short)VERTEX); add((short)(x * 10000.0));
-		  add((short)(y * 10000.0)); return (d); }
-
-  /** Clears all icon data from the icon.*/
-  void		clear() { num_data_ = 0; }
-
-  void		draw(int x, int y, int w, int h, Fl_Color ic, int active = 1);
-
-  void		label(Fl_Widget *w);
-
-  static void	labeltype(const Fl_Label *o, int x, int y, int w, int h, Fl_Align a);
-  void		load(const char *f);
-  int		load_fti(const char *fti);
-  int		load_image(const char *i);
-
-  /** Returns next file icon object. See Fl_File_Icon::first() */
-  Fl_File_Icon	*next() { return (next_); }
-
-  /** Returns the filename matching pattern for the icon.*/
-  const char	*pattern() { return (pattern_); }
-
-  /**  Returns the number of words of data used by the icon.*/
-  int		size() { return (num_data_); }
-
-  /**
-    Returns the filetype associated with the icon, which can be one of the
-    following:
-  
-    \li Fl_File_Icon::ANY, any kind of file.
-    \li Fl_File_Icon::PLAIN, plain files.
-    \li Fl_File_Icon::FIFO, named pipes.
-    \li Fl_File_Icon::DEVICE, character and block devices.
-    \li Fl_File_Icon::LINK, symbolic links.
-    \li Fl_File_Icon::DIRECTORY, directories.
-  */
-  int		type() { return (type_); }
-
-  /**  Returns the data array for the icon.*/
-  short		*value() { return (data_); }
-
-  static Fl_File_Icon *find(const char *filename, int filetype = ANY);
-
-  /** Returns a pointer to the first icon in the list.*/
-  static Fl_File_Icon *first() { return (first_); }
-  static void	load_system_icons(void);
-};
-
-#endif // !_Fl_Fl_File_Icon_H_
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_File_Input.H
+++ /dev/null
@@ -1,97 +1,0 @@
-//
-// "$Id$"
-//
-// File_Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Original version Copyright 1998 by Curtis Edwards.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_File_Input widget . */
-
-#ifndef Fl_File_Input_H
-#  define Fl_File_Input_H
-
-#  include <FL/Fl_Input.H>
-
-/**
-  \class Fl_File_Input
-  \brief This widget displays a pathname in a text input field.
-
-  A navigation bar located above the input field allows the user to
-  navigate upward in the directory tree.
-  You may want to handle FL_WHEN_CHANGED events for tracking text changes
-  and also FL_WHEN_RELEASE for button release when changing to parent dir.
-  FL_WHEN_RELEASE callback won't be called if the directory clicked
-  is the same as the current one.
-
-  <P align=CENTER> \image html Fl_File_Input.png </P> 
-  \image latex Fl_File_Input.png "Fl_File_Input"  width=6cm
-
-  \note As all Fl_Input derived objects, Fl_File_Input may call its callback
-  when losing focus (see FL_UNFOCUS) to update its state like its cursor shape.
-  One resulting side effect is that you should call clear_changed() early in your callback
-  to avoid reentrant calls if you plan to show another window or dialog box in the callback.
-*/
-class FL_EXPORT Fl_File_Input : public Fl_Input {
-  
-  Fl_Color	errorcolor_;
-  char		ok_entry_;
-  uchar		down_box_;
-  short		buttons_[200];
-  short		pressed_;
-
-  void		draw_buttons();
-  int		handle_button(int event);
-  void		update_buttons();
-
-public:
-
-  Fl_File_Input(int X, int Y, int W, int H, const char *L=0);
-
-  virtual int handle(int event);
-
-protected:
-  virtual void draw();
-
-public:
-  /** Gets the box type used for the navigation bar. */
-  Fl_Boxtype	down_box() const { return (Fl_Boxtype)down_box_; }
-  /** Sets the box type to use for the navigation bar.  */
-  void		down_box(Fl_Boxtype b) { down_box_ = b; }
-
-  /**
-    Gets the current error color.
-    \todo Better docs for Fl_File_Input::errorcolor() - is it even used?
-  */
-  Fl_Color	errorcolor() const { return errorcolor_; }
-  /** Sets the current error color to \p c */
-  void		errorcolor(Fl_Color c) { errorcolor_ = c; }
-
-  int	value(const char *str);
-  int	value(const char *str, int len);
-
-  /**
-    Returns the current value, which is a pointer to an internal buffer
-    and is valid only until the next event is handled.
-  */
-  const char	*value() { return Fl_Input_::value(); }
-};
-
-#endif // !Fl_File_Input_H
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Fill_Dial.H
+++ /dev/null
@@ -1,38 +1,0 @@
-//
-// "$Id$"
-//
-// Filled dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Fill_Dial widget . */
-
-#ifndef Fl_Fill_Dial_H
-#define Fl_Fill_Dial_H
-
-#include "Fl_Dial.H"
-
-/** Draws a dial with a filled arc */
-class FL_EXPORT Fl_Fill_Dial : public Fl_Dial {
-public:
-  /** Creates a filled dial, also setting its type to FL_FILL_DIAL. */
-  Fl_Fill_Dial(int X,int Y,int W,int H, const char *L);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Fill_Slider.H
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// Filled slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Fill_Slider widget . */
-
-#ifndef Fl_Fill_Slider_H
-#define Fl_Fill_Slider_H
-
-#include "Fl_Slider.H"
-/** Widget that draws a filled horizontal  slider,  useful as a progress or value meter*/
-class FL_EXPORT Fl_Fill_Slider : public Fl_Slider {
-public:
-  /** Creates the slider from its position,size and optional title. */
-  Fl_Fill_Slider(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Float_Input.H
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Floating point input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Float_Input widget . */
-
-#ifndef Fl_Float_Input_H
-#define Fl_Float_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Float_Input class is a subclass of Fl_Input
-  that only allows the user to type floating point numbers (sign,
-  digits, decimal point, more digits, 'E' or 'e', sign, digits).
-*/
-class FL_EXPORT Fl_Float_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Float_Input widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-  Fl_Float_Input(int X,int Y,int W,int H,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_FormsBitmap.H
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Forms bitmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_FormsBitmap widget . */
-
-#ifndef Fl_FormsBitmap_H
-#define Fl_FormsBitmap_H
-
-#include "Fl_Bitmap.H"
-
-/** 
-    Forms compatibility Bitmap Image Widget
-*/
-class FL_EXPORT Fl_FormsBitmap : public Fl_Widget {
-    Fl_Bitmap *b;
-protected:
-    void draw();
-public:
-    Fl_FormsBitmap(Fl_Boxtype, int, int, int, int, const char * = 0);
-    void set(int W, int H, const uchar *bits);
-    /** Sets a new bitmap. */
-    void bitmap(Fl_Bitmap *B) {b = B;}
-    /** Gets a the current associated Fl_Bitmap objects. */
-    Fl_Bitmap *bitmap() const {return b;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_FormsPixmap.H
+++ /dev/null
@@ -1,54 +1,0 @@
-//
-// "$Id$"
-//
-// Forms pixmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_FormsPixmap widget . */
-
-#ifndef Fl_FormsPixmap_H
-#define Fl_FormsPixmap_H
-
-#include "Fl_Pixmap.H"
-
-/**
-  \class Fl_FormsPixmap
-  \brief Forms pixmap drawing routines
-*/
-class FL_EXPORT Fl_FormsPixmap : public Fl_Widget {
-    Fl_Pixmap *b;
-protected:
-    void draw();
-public:
-    Fl_FormsPixmap(Fl_Boxtype t, int X, int Y, int W, int H, const char *L= 0);
-
-    void set(/*const*/char * const * bits);
-
-    /**
-      Set the internal pixmap pointer to an existing pixmap.
-      \param[in] B existing pixmap
-    */
-    void Pixmap(Fl_Pixmap *B) {b = B;}
-
-    /** Get the internal pixmap pointer. */
-    Fl_Pixmap *Pixmap() const {return b;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Free.H
+++ /dev/null
@@ -1,80 +1,0 @@
-//
-// "$Id$"
-//
-// Forms free header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Free widget . */
-
-#ifndef Fl_Free_H
-#define Fl_Free_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-#define FL_NORMAL_FREE		1 /**< normal event handling */
-#define FL_SLEEPING_FREE	2 /**< deactivate event handling */
-#define FL_INPUT_FREE		3 /**< accepts FL_FOCUS events */
-#define FL_CONTINUOUS_FREE	4 /**< repeated timeout handling */
-#define FL_ALL_FREE		5 /**< FL_INPUT_FREE and FL_CONTINOUS_FREE */
-
-/** appropriate signature for handle function */
-typedef int (*FL_HANDLEPTR)(Fl_Widget *, int , float, float, char);
-
-/**
-  Emulation of the Forms "free" widget.
-  
-  This emulation allows the free demo to run, and appears to be useful for
-  porting programs written in Forms which use the free widget or make
-  subclasses of the Forms widgets.
-
-  There are five types of free, which determine when the handle function
-  is called:
-  
-  \li \c FL_NORMAL_FREE      normal event handling.
-  \li \c FL_SLEEPING_FREE    deactivates event handling (widget is inactive).
-  \li \c FL_INPUT_FREE       accepts FL_FOCUS events.
-  \li \c FL_CONTINUOUS_FREE  sets a timeout callback 100 times a second and
-                             provides an FL_STEP event. This has obvious
-			     detrimental effects on machine performance.
-  \li \c FL_ALL_FREE         same as FL_INPUT_FREE and FL_CONTINUOUS_FREE.
- 
-*/
-class FL_EXPORT Fl_Free : public Fl_Widget {
-    FL_HANDLEPTR hfunc;
-    static void step(void *);
-protected:
-    void draw();
-public:
-    int handle(int e);
-  Fl_Free(uchar t,int X,int Y,int W,int H,const char *L,FL_HANDLEPTR hdl);
-  ~Fl_Free();
-};
-
-// old event names for compatibility:
-#define FL_MOUSE	FL_DRAG /**< for backward compatibility */
-#define FL_DRAW		100     /**< for backward compatibility [UNUSED]*/
-#define FL_STEP		101     /**< for backward compatibility */
-#define FL_FREEMEM	102     /**< for backward compatibility [UNUSED]*/
-#define FL_FREEZE	103     /**< for backward compatibility [UNUSED]*/
-#define FL_THAW		104     /**< for backward compatibility [UNUSED]*/
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_GIF_Image.H
+++ /dev/null
@@ -1,42 +1,0 @@
-//
-// "$Id$"
-//
-// GIF image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_GIF_Image widget . */
-
-#ifndef Fl_GIF_Image_H
-#define Fl_GIF_Image_H
-#  include "Fl_Pixmap.H"
-
-/**
- The Fl_GIF_Image class supports loading, caching,
- and drawing of Compuserve GIF<SUP>SM</SUP> images. The class
- loads the first image and supports transparency.
- */
-class FL_EXPORT Fl_GIF_Image : public Fl_Pixmap {
-
-  public:
-
-  Fl_GIF_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Gl_Window.H
+++ /dev/null
@@ -1,284 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Gl_Window widget . */
-
-#ifndef Fl_Gl_Window_H
-#define Fl_Gl_Window_H
-
-#include "Fl_Window.H"
-
-#ifndef GLContext
-/**
-  Opaque pointer type to hide system specific implementation.
-*/
-typedef void* GLContext; // actually a GLXContext or HGLDC
-#endif
-
-class Fl_Gl_Choice; // structure to hold result of glXChooseVisual
-
-/**
-  The Fl_Gl_Window widget sets things up so OpenGL works.
-  
-  It also keeps an OpenGL "context" for that window, so that changes to the
-  lighting and projection may be reused between redraws. Fl_Gl_Window
-  also flushes the OpenGL streams and swaps buffers after draw() returns.
-
-  OpenGL hardware typically provides some overlay bit planes, which
-  are very useful for drawing UI controls atop your 3D graphics.  If the
-  overlay hardware is not provided, FLTK tries to simulate the overlay.
-  This works pretty well if your graphics are double buffered, but not
-  very well for single-buffered.
-
-  Please note that the FLTK drawing and clipping functions
-  will not work inside an Fl_Gl_Window. All drawing
-  should be done using OpenGL calls exclusively.
-  Even though Fl_Gl_Window is derived from Fl_Group, 
-  it is not useful to add other FLTK Widgets as children,
-  unless those widgets are modified to draw using OpenGL calls.
-*/
-class FL_EXPORT Fl_Gl_Window : public Fl_Window {
-
-  int mode_;
-  const int *alist;
-  Fl_Gl_Choice *g;
-  GLContext context_;
-  char valid_f_;
-  char damage1_; // damage() of back buffer
-  virtual void draw_overlay();
-  void init();
-
-  void *overlay;
-  void make_overlay();
-  friend class _Fl_Gl_Overlay;
-
-  static int can_do(int, const int *);
-  int mode(int, const int *);
-  static int gl_plugin_linkage();
-
-public:
-
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-  void hide();
-  void resize(int,int,int,int);
-  int handle(int);
-  
-  /**
-    Is turned off when FLTK creates a new context for this window or 
-    when the window resizes, and is turned on \e after draw() is called.
-    You can use this inside your draw() method to avoid unnecessarily
-    initializing the OpenGL context. Just do this:
-    \code
-    void mywindow::draw() {
-     if (!valid()) {
-       glViewport(0,0,pixel_w(),pixel_h());
-       glFrustum(...);
-       ...other initialization...
-     }
-     if (!context_valid()) {
-       ...load textures, etc. ...
-     }
-     ... draw your geometry here ...
-    }
-    \endcode
-    
-    You can turn valid() on by calling valid(1).  You
-    should only do this after fixing the transformation inside a draw()
-    or after make_current().  This is done automatically after 
-    draw() returns.
-  */
-  char valid() const {return valid_f_ & 1;}
-  /**
-    See char Fl_Gl_Window::valid() const 
-  */
-  void valid(char v) {if (v) valid_f_ |= 1; else valid_f_ &= 0xfe;}
-  void invalidate();
-
-  /**
-    Will only be set if the 
-    OpenGL context is created or recreated. It differs from
-    Fl_Gl_Window::valid() which is also set whenever the context
-    changes size.
-  */
-  char context_valid() const {return valid_f_ & 2;}
-  /**
-    See char Fl_Gl_Window::context_valid() const 
-  */
-  void context_valid(char v) {if (v) valid_f_ |= 2; else valid_f_ &= 0xfd;}
-
-  /**  Returns non-zero if the hardware supports the given OpenGL mode. */
-  static int can_do(int m) {return can_do(m,0);}
-  /**  Returns non-zero if the hardware supports the given OpenGL mode.
-   \see Fl_Gl_Window::mode(const int *a) */
-  static int can_do(const int *m) {return can_do(0, m);}
-  /**  Returns non-zero if the hardware supports the current OpenGL mode. */
-  int can_do() {return can_do(mode_,alist);}
-  /** Returns the current OpenGL capabilites of the window.
-   Don't use this if capabilities were set through Fl_Gl_Window::mode(const int *a).
-   */
-  Fl_Mode mode() const {return (Fl_Mode)mode_;}
-  /**
-   Set or change the OpenGL capabilites of the window.  The value can be
-   any of the following OR'd together:
-   
-   - \c FL_RGB - RGB color (not indexed)
-   - \c FL_RGB8 - RGB color with at least 8 bits of each color
-   - \c FL_INDEX - Indexed mode
-   - \c FL_SINGLE - not double buffered
-   - \c FL_DOUBLE - double buffered
-   - \c FL_ACCUM - accumulation buffer
-   - \c FL_ALPHA - alpha channel in color
-   - \c FL_DEPTH - depth buffer
-   - \c FL_STENCIL - stencil buffer
-   - \c FL_MULTISAMPLE - multisample antialiasing
-   - \c FL_OPENGL3 - use OpenGL version 3.0 or more.
-   
-   FL_RGB and FL_SINGLE have a value of zero, so they
-   are "on" unless you give FL_INDEX or FL_DOUBLE.
-   
-   If the desired combination cannot be done, FLTK will try turning off
-   FL_MULTISAMPLE.  If this also fails the show() will call
-   Fl::error() and not show the window.
-   
-   You can change the mode while the window is displayed.  This is most
-   useful for turning double-buffering on and off.  Under X this will
-   cause the old X window to be destroyed and a new one to be created.  If
-   this is a top-level window this will unfortunately also cause the
-   window to blink, raise to the top, and be de-iconized, and the xid()
-   will change, possibly breaking other code.  It is best to make the GL
-   window a child of another window if you wish to do this!
-   
-   mode() must not be called within draw() since it
-   changes the current context.
-   
-   The FL_OPENGL3 flag is required to access OpenGL version 3 or more
-   under the X11 and MacOS platforms; it's optional under Windows.
-   See more details in \ref opengl3.
-   
-   \version the <tt>FL_OPENGL3</tt> flag appeared in version 1.3.4
-   */
-  int mode(int a) {return mode(a,0);}
-  /** Set the OpenGL capabilites of the window using platform-specific data.
-   \param a zero-ending array of platform-specific attributes and attribute values
-   <p><b>Unix/Linux platform</b>: attributes are GLX attributes adequate for the 3rd argument of
-   the <tt>glXChooseVisual()</tt> function (e.g., <tt>GLX_DOUBLEBUFFER</tt>, defined by including <GL/glx.h>).
-   \note What attributes are adequate here is subject to change.
-   The preferred, stable public API is Fl_Gl_Window::mode(int a).
-   <p><b>MSWindows platform</b>: this member function is of no use.
-   <p><b>Mac OS X platform</b>: attributes belong to the <tt>CGLPixelFormatAttribute</tt> enumeration
-   (defined by including <tt><OpenGL/OpenGL.h></tt>, e.g., <tt>kCGLPFADoubleBuffer</tt>)
-   and may be followed by adequate attribute values.
-   */
-  int mode(const int *a) {return mode(0, a);}
-  /** Returns a pointer to the GLContext that this window is using.
-   \see void context(void* v, int destroy_flag) */
-  void* context() const {return context_;}
-  void context(void*, int destroy_flag = 0);
-  void make_current();
-  void swap_buffers();
-  void ortho();
-
-  /**
-    Returns true if the hardware overlay is possible.  If this is false,
-    FLTK will try to simulate the overlay, with significant loss of update
-    speed.  Calling this will cause FLTK to open the display.
-  */
-  int can_do_overlay();
-  /**
-    This method causes draw_overlay() to be called at a later time.
-    Initially the overlay is clear. If you want the window to display
-    something in the overlay when it first appears, you must call this
-    immediately after you show() your window.
-  */
-  void redraw_overlay();
-  void hide_overlay();
-  /**
-    The make_overlay_current() method selects the OpenGL context
-    for the widget's overlay.  It is called automatically prior to the 
-    draw_overlay() method being called and can also be used to
-    implement feedback and/or selection within the handle()
-    method.
-  */
-  void make_overlay_current();
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Gl_Window* as_gl_window() {return this;}
-  
-  /** The number of pixels per FLTK unit of length for the window.
-   Returns 1, except for a window mapped to
-   an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
-   when it returns 2. This method dynamically adjusts its value when the window
-   is moved to/from a retina display. This method is useful, e.g., to convert,
-   in a window's handle() method, the FLTK units returned by Fl::event_x() and
-   Fl::event_y() to the pixel units used by the OpenGL source code.
-   \version 1.3.4
-   */
-#ifdef __APPLE__
-  float pixels_per_unit();
-#else
-  float pixels_per_unit() { return 1; }
-#endif
-  /** Gives the window width in OpenGL pixels.
-   Generally identical with the result of the w() function, but for a window mapped to
-   an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
-   pixel_w() returns 2 * w(). This method detects when the window has been moved
-   between low and high resolution displays and automatically adjusts the returned value.
-   \version 1.3.4
-   */
-  int pixel_w() { return int(pixels_per_unit() * w() + 0.5); }
-  /** Gives the window height in OpenGL pixels.
-   Generally identical with the result of the h() function, but for a window mapped to
-   an Apple 'retina' display, and if Fl::use_high_res_GL(bool) is set to true,
-   pixel_h() returns 2 * h(). This method detects when the window has been moved
-   between low and high resolution displays and automatically adjusts the returned value.
-   \version 1.3.4
-   */
-  int pixel_h() { return int(pixels_per_unit() * h() + 0.5); }
-  
-  ~Fl_Gl_Window();
-  /**
-    Creates a new Fl_Gl_Window widget using the given size, and label string. 
-    The default boxtype is FL_NO_BOX. The default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
-  */
-  Fl_Gl_Window(int W, int H, const char *l=0) : Fl_Window(W,H,l) {init();}
-  /**
-    Creates a new Fl_Gl_Window widget using the given position,
-    size, and label string. The default boxtype is FL_NO_BOX. The
-    default mode is FL_RGB|FL_DOUBLE|FL_DEPTH.
-  */
-
-  Fl_Gl_Window(int X, int Y, int W, int H, const char *l=0)
-    : Fl_Window(X,Y,W,H,l) {init();}
-
-protected:
-  /**
-    Draws the Fl_Gl_Window.
-
-    You \e \b must override the draw() method.
-  */
-  virtual void draw();
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Group.H
+++ /dev/null
@@ -1,228 +1,0 @@
-//
-// "$Id$"
-//
-// Group header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Group, Fl_End classes . */
-
-#ifndef Fl_Group_H
-#define Fl_Group_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  The Fl_Group class is the FLTK container widget. It maintains
-  an array of child widgets. These children can themselves be any widget
-  including Fl_Group. The most important subclass of Fl_Group
-  is Fl_Window, however groups can also be used to control radio buttons
-  or to enforce resize behavior.
-
-  The tab and arrow keys are used to move the focus between widgets of
-  this group, and to other groups. The only modifier grabbed is shift
-  (for shift-tab), so that ctrl-tab, alt-up, and such are free
-  for the app to use as shortcuts.
-*/
-class FL_EXPORT Fl_Group : public Fl_Widget {
-
-  Fl_Widget** array_;
-  Fl_Widget* savedfocus_;
-  Fl_Widget* resizable_;
-  int children_;
-  int *sizes_; // remembered initial sizes of children
-
-  int navigation(int);
-  static Fl_Group *current_;
- 
-  // unimplemented copy ctor and assignment operator
-  Fl_Group(const Fl_Group&);
-  Fl_Group& operator=(const Fl_Group&);
-
-protected:
-  void draw();
-  void draw_child(Fl_Widget& widget) const;
-  void draw_children();
-  void draw_outside_label(const Fl_Widget& widget) const ;
-  void update_child(Fl_Widget& widget) const;
-  int  *sizes();
-
-public:
-
-  int handle(int);
-  void begin();
-  void end();
-  static Fl_Group *current();
-  static void current(Fl_Group *g);
-
-  /**
-    Returns how many child widgets the group has.
-  */
-  int children() const {return children_;}
-  /**
-    Returns array()[n].  <i>No range checking is done!</i>
-  */
-  Fl_Widget* child(int n) const {return array()[n];}
-  int find(const Fl_Widget*) const;
-  /**
-    See int Fl_Group::find(const Fl_Widget *w) const 
-  */
-  int find(const Fl_Widget& o) const {return find(&o);}
-  Fl_Widget* const* array() const;
-
-  void resize(int,int,int,int);
-  /**
-    Creates a new Fl_Group widget using the given position, size,
-    and label string. The default boxtype is FL_NO_BOX.
-  */
-  Fl_Group(int,int,int,int, const char * = 0);
-  virtual ~Fl_Group();
-  void add(Fl_Widget&);
-  /**
-    See void Fl_Group::add(Fl_Widget &w) 
-  */
-  void add(Fl_Widget* o) {add(*o);}
-  void insert(Fl_Widget&, int i);
-  /**
-    This does insert(w, find(before)).  This will append the
-    widget if \p before is not in the group.
-  */
-  void insert(Fl_Widget& o, Fl_Widget* before) {insert(o,find(before));}
-  void remove(int index);
-  void remove(Fl_Widget&);
-  /**
-    Removes the widget \p o from the group.
-    \sa void remove(Fl_Widget&)
-  */
-  void remove(Fl_Widget* o) {remove(*o);}
-  void clear();
-
-  /**
-    See void Fl_Group::resizable(Fl_Widget *box) 
-  */
-  void resizable(Fl_Widget& o) {resizable_ = &o;}
-  /**
-    The resizable widget defines the resizing box for the group. When the
-    group is resized it calculates a new size and position for all of its
-    children. Widgets that are horizontally or vertically inside the
-    dimensions of the box are scaled to the new size. Widgets outside the
-    box are moved.
-
-    In these examples the gray area is the resizable:
-
-    \image html resizebox1.png
-
-    <br>
-    
-    \image html resizebox2.png
-    
-    \image latex resizebox1.png "before resize"  width=4cm
-    
-    \image latex resizebox2.png "after resize"   width=4.85cm
-
-    The resizable may be set to the group itself, in which case all the
-    contents are resized. This is the default value for Fl_Group,
-    although NULL is the default for Fl_Window and Fl_Pack.
-
-    If the resizable is NULL then all widgets remain a fixed size
-    and distance from the top-left corner.
-
-    It is possible to achieve any type of resize behavior by using an
-    invisible Fl_Box as the resizable and/or by using a hierarchy
-    of child Fl_Group's.
-  */
-  void resizable(Fl_Widget* o) {resizable_ = o;}
-  /**
-    See void Fl_Group::resizable(Fl_Widget *box) 
-  */
-  Fl_Widget* resizable() const {return resizable_;}
-  /**
-    Adds a widget to the group and makes it the resizable widget.
-  */
-  void add_resizable(Fl_Widget& o) {resizable_ = &o; add(o);}
-  void init_sizes();
-
-  /**
-    Controls whether the group widget clips the drawing of
-    child widgets to its bounding box.
-    
-    Set \p c to 1 if you want to clip the child widgets to the
-    bounding box.
-
-    The default is to not clip (0) the drawing of child widgets.
-  */
-  void clip_children(int c) { if (c) set_flag(CLIP_CHILDREN); else clear_flag(CLIP_CHILDREN); }
-  /**
-    Returns the current clipping mode.
-
-    \return true, if clipping is enabled, false otherwise.
-
-    \see void Fl_Group::clip_children(int c)
-  */
-  unsigned int clip_children() { return (flags() & CLIP_CHILDREN) != 0; }
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Group* as_group() { return this; }
-
-  // back compatibility functions:
-
-  /**
-    \deprecated This is for backwards compatibility only. You should use
-    \e W->%take_focus() instead.
-    \sa Fl_Widget::take_focus();
-  */
-  void focus(Fl_Widget* W) {W->take_focus();}
-
-  /** This is for forms compatibility only */
-  Fl_Widget* & _ddfdesign_kludge() {return resizable_;}
-
-  /** This is for forms compatibility only */
-  void forms_end();
-};
-
-// dummy class used to end child groups in constructors for complex
-// subclasses of Fl_Group:
-/**
-  This is a dummy class that allows you to end a Fl_Group in a constructor list of a
-  class:
-  \code 
-   class MyClass {
-   Fl_Group group;
-   Fl_Button button_in_group;
-   Fl_End end;
-   Fl_Button button_outside_group;
-   MyClass();
-  };
-  MyClass::MyClass() :
-   group(10,10,100,100),
-   button_in_group(20,20,60,30),
-   end(),
-   button_outside_group(10,120,60,30)
-  {} 
-  \endcode
-*/
-class FL_EXPORT Fl_End {
-public:
-  /** All it does is calling Fl_Group::current()->end() */
-  Fl_End() {Fl_Group::current()->end();}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Help_Dialog.H
+++ /dev/null
@@ -1,90 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// ========================================================================
-//  DO NOT EDIT FL/Fl_Help_Dialog.H and src/Fl_Help_Dialog.cxx !!!
-// ========================================================================
-//  Please use fluid to change src/Fl_Help_Dialog.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// ========================================================================
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef Fl_Help_Dialog_H
-#define Fl_Help_Dialog_H
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Help_View.H>
-
-class FL_EXPORT Fl_Help_Dialog {
-  int index_; 
-  int max_; 
-  int line_[100]; // FIXME: we must remove those static numbers
-  char file_[100][FL_PATH_MAX]; // FIXME: we must remove those static numbers
-  int find_pos_; 
-public:
-  Fl_Help_Dialog();
-private:
-  Fl_Double_Window *window_;
-  Fl_Button *back_;
-  inline void cb_back__i(Fl_Button*, void*);
-  static void cb_back_(Fl_Button*, void*);
-  Fl_Button *forward_;
-  inline void cb_forward__i(Fl_Button*, void*);
-  static void cb_forward_(Fl_Button*, void*);
-  Fl_Button *smaller_;
-  inline void cb_smaller__i(Fl_Button*, void*);
-  static void cb_smaller_(Fl_Button*, void*);
-  Fl_Button *larger_;
-  inline void cb_larger__i(Fl_Button*, void*);
-  static void cb_larger_(Fl_Button*, void*);
-  Fl_Input *find_;
-  inline void cb_find__i(Fl_Input*, void*);
-  static void cb_find_(Fl_Input*, void*);
-  Fl_Help_View *view_;
-  inline void cb_view__i(Fl_Help_View*, void*);
-  static void cb_view_(Fl_Help_View*, void*);
-public:
-  ~Fl_Help_Dialog();
-  int h();
-  void hide();
-  void load(const char *f);
-  void position(int xx, int yy);
-  void resize(int xx, int yy, int ww, int hh);
-  void show();
-  void show(int argc, char **argv);
-  void textsize(Fl_Fontsize s);
-  Fl_Fontsize textsize();
-  void topline(const char *n);
-  void topline(int n);
-  void value(const char *f);
-  const char * value() const;
-  int visible();
-  int w();
-  int x();
-  int y();
-};
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Help_View.H
+++ /dev/null
@@ -1,399 +1,0 @@
-//
-// "$Id$"
-//
-// Help Viewer widget definitions.
-//
-// Copyright 1997-2010 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Help_View widget . */
-
-#ifndef Fl_Help_View_H
-#  define Fl_Help_View_H
-
-//
-// Include necessary header files...
-//
-
-#  include <stdio.h>
-#  include "Fl.H"
-#  include "Fl_Group.H"
-#  include "Fl_Scrollbar.H"
-#  include "fl_draw.H"
-#  include "Fl_Shared_Image.H"
-#  include "filename.H"
-
-
-//
-// Fl_Help_Func type - link callback function for files...
-//
-
-
-typedef const char *(Fl_Help_Func)(Fl_Widget *, const char *);
-
-
-//
-// Fl_Help_Block structure...
-//
-
-struct Fl_Help_Block {
-  const char	*start,		// Start of text
-		*end;		// End of text
-  uchar		border;		// Draw border?
-  Fl_Color	bgcolor;	// Background color
-  int		x,		// Indentation/starting X coordinate
-		y,		// Starting Y coordinate
-		w,		// Width
-		h;		// Height
-  int		line[32];	// Left starting position for each line
-};
-
-//
-// Fl_Help_Link structure...
-//
-/** Definition of a link for the html viewer. */
-struct Fl_Help_Link {
-  char		filename[192],	///< Reference filename
-		name[32];	///< Link target (blank if none)
-  int		x,		///< X offset of link text
-		y,		///< Y offset of link text
-		w,		///< Width of link text
-		h;		///< Height of link text
-};
-
-/*
- * Fl_Help_View font stack opaque implementation
- */
-
-/** Fl_Help_View font stack element definition. */
-struct FL_EXPORT Fl_Help_Font_Style {
-  Fl_Font      f;  ///< Font
-  Fl_Fontsize  s;  ///< Font Size
-  Fl_Color     c;  ///< Font Color
-  void get(Fl_Font &afont, Fl_Fontsize &asize, Fl_Color &acolor) {afont=f; asize=s; acolor=c;} ///< Gets current font attributes
-  void set(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {f=afont; s=asize; c=acolor;} ///< Sets current font attributes
-  Fl_Help_Font_Style(Fl_Font afont, Fl_Fontsize asize, Fl_Color acolor) {set(afont, asize, acolor);}
-  Fl_Help_Font_Style(){} // For in table use
-};
-
-/** Fl_Help_View font stack definition. */
-const size_t MAX_FL_HELP_FS_ELTS = 100;
-
-struct FL_EXPORT Fl_Help_Font_Stack {
-  /** font stack construction, initialize attributes. */
-  Fl_Help_Font_Stack() {
-    nfonts_ = 0;
-  }
-
-  void init(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
-    nfonts_ = 0;
-    elts_[nfonts_].set(f, s, c);
-    fl_font(f, s); 
-    fl_color(c);
-  }
-  /** Gets the top (current) element on the stack. */
-  void top(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { elts_[nfonts_].get(f, s, c); }
-  /** Pushes the font style triplet on the stack, also calls fl_font() & fl_color() adequately */
-  void push(Fl_Font f, Fl_Fontsize s, Fl_Color c) { 
-    if (nfonts_ <  MAX_FL_HELP_FS_ELTS-1) nfonts_ ++;
-    elts_[nfonts_].set(f, s, c);
-    fl_font(f, s); fl_color(c); 
-  }
-  /** Pops from the stack the font style triplet and calls fl_font() & fl_color() adequately */
-  void pop(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { 
-    if (nfonts_ > 0) nfonts_ --;
-    top(f, s, c);
-    fl_font(f, s); fl_color(c);
-  }
-  /** Gets the current count of font style elements in the stack. */
-  size_t count() const {return nfonts_;} // Gets the current number of fonts in the stack
-
-protected:
-  size_t nfonts_;		///< current number of fonts in stack
-  Fl_Help_Font_Style elts_[100]; ///< font elements
-};
-
-/** Fl_Help_Target structure */
-
-struct Fl_Help_Target {
-  char		name[32];	///< Target name
-  int		y;		///< Y offset of target
-};
-
-/**
-  The Fl_Help_View widget displays HTML text. Most HTML 2.0
-  elements are supported, as well as a primitive implementation of tables.
-  GIF, JPEG, and PNG images are displayed inline.
-
-  Supported HTML tags:
-     - A: HREF/NAME
-     - B
-     - BODY: BGCOLOR/TEXT/LINK
-     - BR
-     - CENTER
-     - CODE
-     - DD
-     - DL
-     - DT
-     - EM
-     - FONT: COLOR/SIZE/FACE=(helvetica/arial/sans/times/serif/symbol/courier)
-     - H1/H2/H3/H4/H5/H6
-     - HEAD
-     - HR
-     - I
-     - IMG: SRC/WIDTH/HEIGHT/ALT
-     - KBD
-     - LI
-     - OL
-     - P
-     - PRE
-     - STRONG
-     - TABLE: TH/TD/TR/BORDER/BGCOLOR/COLSPAN/ALIGN=CENTER|RIGHT|LEFT
-     - TITLE
-     - TT
-     - U
-     - UL
-     - VAR
-
-  Supported color names:
-     - black,red,green,yellow,blue,magenta,fuchsia,cyan,aqua,white,gray,grey,lime,maroon,navy,olive,purple,silver,teal.
-
-  Supported urls:
-     - Internal: file:
-     - External: http: ftp: https: ipp: mailto: news:
-
-  Quoted char names:
-     - Aacute aacute Acirc acirc acute AElig aelig Agrave agrave amp Aring aring Atilde atilde Auml auml
-     - brvbar bull
-     - Ccedil ccedil cedil cent copy curren
-     - deg divide
-     - Eacute eacute Ecirc ecirc Egrave egrave ETH eth Euml euml euro
-     - frac12 frac14 frac34
-     - gt
-     - Iacute iacute Icirc icirc iexcl Igrave igrave iquest Iuml iuml
-     - laquo lt
-     - macr micro middot
-     - nbsp not Ntilde ntilde
-     - Oacute oacute Ocirc ocirc Ograve ograve ordf ordm Oslash oslash Otilde otilde Ouml ouml
-     - para permil plusmn pound
-     - quot
-     - raquo reg
-     - sect shy sup1 sup2 sup3 szlig
-     - THORN thorn times trade
-     - Uacute uacute Ucirc ucirc Ugrave ugrave uml Uuml uuml
-     - Yacute yacute
-     - yen Yuml yuml
-
-*/
-class FL_EXPORT Fl_Help_View : public Fl_Group {	// Help viewer widget
-  
-  enum { RIGHT = -1, CENTER, LEFT };	///< Alignments
-
-  char		title_[1024];		///< Title string
-  Fl_Color	defcolor_,		///< Default text color
-		bgcolor_,		///< Background color
-		textcolor_,		///< Text color
-		linkcolor_;		///< Link color
-  Fl_Font       textfont_;		///< Default font for text
-  Fl_Fontsize  textsize_;		///< Default font size
-  const char	*value_;		///< HTML text value
-  Fl_Help_Font_Stack fstack_;		///< font stack management
-  int		nblocks_,		///< Number of blocks/paragraphs
-		ablocks_;		///< Allocated blocks
-  Fl_Help_Block	*blocks_;		///< Blocks
-
-  Fl_Help_Func	*link_;			///< Link transform function
-
-  int		nlinks_,		///< Number of links
-		alinks_;		///< Allocated links
-  Fl_Help_Link	*links_;		///< Links
-
-  int		ntargets_,		///< Number of targets
-		atargets_;		///< Allocated targets
-  Fl_Help_Target *targets_;		///< Targets
-
-  char		directory_[FL_PATH_MAX];///< Directory for current file
-  char		filename_[FL_PATH_MAX];	///< Current filename
-  int		topline_,		///< Top line in document
-		leftline_,		///< Lefthand position
-		size_,			///< Total document length
-		hsize_,			///< Maximum document width
-  		scrollbar_size_;	///< Size for both scrollbars
-  Fl_Scrollbar	scrollbar_,		///< Vertical scrollbar for document
-		hscrollbar_;		///< Horizontal scrollbar
-
-  static int    selection_first;
-  static int    selection_last;
-  static int    selection_push_first;
-  static int    selection_push_last;
-  static int    selection_drag_first;
-  static int    selection_drag_last;
-  static int    selected;
-  static int    draw_mode;
-  static int    mouse_x;
-  static int    mouse_y;
-  static int    current_pos;
-  static Fl_Help_View *current_view;
-  static Fl_Color hv_selection_color;
-  static Fl_Color hv_selection_text_color;
-
-
-  void initfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) { f = textfont_; s = textsize_; c = textcolor_; fstack_.init(f, s, c); }
-  void pushfont(Fl_Font f, Fl_Fontsize s) {fstack_.push(f, s, textcolor_);}
-  void pushfont(Fl_Font f, Fl_Fontsize s, Fl_Color c) {fstack_.push(f, s, c);}
-  void popfont(Fl_Font &f, Fl_Fontsize &s, Fl_Color &c) {fstack_.pop(f, s, c);}
-
-  Fl_Help_Block	*add_block(const char *s, int xx, int yy, int ww, int hh, uchar border = 0);
-  void		add_link(const char *n, int xx, int yy, int ww, int hh);
-  void		add_target(const char *n, int yy);
-  static int	compare_targets(const Fl_Help_Target *t0, const Fl_Help_Target *t1);
-  int		do_align(Fl_Help_Block *block, int line, int xx, int a, int &l);
-#if FLTK_ABI_VERSION >= 10303
-protected:
-#endif
-  void		draw();
-#if FLTK_ABI_VERSION >= 10303
-private:
-#endif
-  void		format();
-  void		format_table(int *table_width, int *columns, const char *table);
-  void		free_data();
-  int		get_align(const char *p, int a);
-  const char	*get_attr(const char *p, const char *n, char *buf, int bufsize);
-  Fl_Color	get_color(const char *n, Fl_Color c);
-  Fl_Shared_Image *get_image(const char *name, int W, int H);
-  int		get_length(const char *l);
-#if FLTK_ABI_VERSION >= 10303
-public:
-#endif
-  int		handle(int);
-#if FLTK_ABI_VERSION >= 10303
-private:
-#endif
-
-  void          hv_draw(const char *t, int x, int y, int entity_extra_length = 0);
-  char          begin_selection();
-  char          extend_selection();
-  void          end_selection(int c=0);
-  void          clear_global_selection();
-  Fl_Help_Link  *find_link(int, int);
-  void          follow_link(Fl_Help_Link*);
-
-public:
-
-  Fl_Help_View(int xx, int yy, int ww, int hh, const char *l = 0);
-  ~Fl_Help_View();
-  /** Returns the current directory for the text in the buffer. */
-  const char	*directory() const { if (directory_[0]) return (directory_);
-  					else return ((const char *)0); }
-  /** Returns the current filename for the text in the buffer. */
-  const char	*filename() const { if (filename_[0]) return (filename_);
-  					else return ((const char *)0); }
-  int		find(const char *s, int p = 0);
-  /**
-    This method assigns a callback function to use when a link is
-    followed or a file is loaded (via Fl_Help_View::load()) that
-    requires a different file or path.
-    
-    The callback function receives a pointer to the Fl_Help_View
-    widget and the URI or full pathname for the file in question.
-    It must return a pathname that can be opened as a local file or NULL:
-    
-    \code
-    const char *fn(Fl_Widget *w, const char *uri);
-    \endcode
-    
-    The link function can be used to retrieve remote or virtual
-    documents, returning a temporary file that contains the actual
-    data. If the link function returns NULL, the value of
-    the Fl_Help_View widget will remain unchanged.
-    
-    If the link callback cannot handle the URI scheme, it should
-    return the uri value unchanged or set the value() of the widget
-    before returning NULL.
-  */
-  void		link(Fl_Help_Func *fn) { link_ = fn; }
-  int		load(const char *f);
-  void		resize(int,int,int,int);
-  /** Gets the size of the help view. */
-  int		size() const { return (size_); }
-  void		size(int W, int H) { Fl_Widget::size(W, H); }
-  /** Sets the default text color. */
-  void		textcolor(Fl_Color c) { if (textcolor_ == defcolor_) textcolor_ = c; defcolor_ = c; }
-  /** Returns the current default text color. */
-  Fl_Color	textcolor() const { return (defcolor_); }
-  /** Sets the default text font. */
-  void		textfont(Fl_Font f) { textfont_ = f; format(); }
-  /** Returns the current default text font. */
-  Fl_Font       textfont() const { return (textfont_); }
-  /** Sets the default text size. */
-  void		textsize(Fl_Fontsize s) { textsize_ = s; format(); }
-  /** Gets the default text size. */
-  Fl_Fontsize  textsize() const { return (textsize_); }
-  /** Returns the current document title, or NULL if there is no title. */
-  const char	*title() { return (title_); }
-  void		topline(const char *n);
-  void		topline(int);
-  /** Returns the current top line in pixels. */
-  int		topline() const { return (topline_); }
-  void		leftline(int);
-  /** Gets the left position in pixels. */
-  int		leftline() const { return (leftline_); }
-  void		value(const char *val);
-  /** Returns the current buffer contents. */
-  const char	*value() const { return (value_); }
-  void          clear_selection();
-  void          select_all();
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to \p newSize, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL 
-    your widgets' scrollbars. This ensures your application 
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-    
-    Setting \p newSize to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] newSize Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int newSize) {
-      scrollbar_size_ = newSize;
-  }   
-};
-
-#endif // !Fl_Help_View_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Hold_Browser.H
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// Hold browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hold_Browser widget . */
-
-#ifndef Fl_Hold_Browser_H
-#define Fl_Hold_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The Fl_Hold_Browser is a subclass of Fl_Browser
-  which lets the user select a single item, or no items by clicking on
-  the empty space.  As long as the mouse button is held down the item
-  pointed to by it is highlighted, and this highlighting remains on when
-  the mouse button is released. Normally the callback is done when the
-  user releases the mouse, but you can change this with when().
-  <P>See Fl_Browser for methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Hold_Browser : public Fl_Browser {
-public:
-  /**
-    Creates a new Fl_Hold_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_HOLD_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
- */
-  Fl_Hold_Browser(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Hor_Fill_Slider.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Horizontal fill slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Fill_Slider widget . */
-
-#ifndef Fl_Hor_Fill_Slider_H
-#define Fl_Hor_Fill_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Hor_Fill_Slider : public Fl_Slider {
-public:
-  Fl_Hor_Fill_Slider(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Hor_Nice_Slider.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Horizontal "nice" slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Nice_Slider widget . */
-
-#ifndef Fl_Hor_Nice_Slider_H
-#define Fl_Hor_Nice_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Hor_Nice_Slider : public Fl_Slider {
-public:
-  Fl_Hor_Nice_Slider(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Hor_Slider.H
+++ /dev/null
@@ -1,45 +1,0 @@
-//
-// "$Id$"
-//
-// Horizontal slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Slider widget . */
-
-#ifndef Fl_Hor_Slider_H
-#define Fl_Hor_Slider_H
-
-#include "Fl_Slider.H"
-
-/** Horizontal Slider class.
-
-  \see class Fl_Slider.
-*/
-class FL_EXPORT Fl_Hor_Slider : public Fl_Slider {
-public:
-
-  /**
-    Creates a new Fl_Hor_Slider widget using the given position,
-    size, and label string.
-  */
-  Fl_Hor_Slider(int X,int Y,int W,int H,const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Hor_Value_Slider.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Horizontal value slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Hor_Value_Slider widget . */
-
-#ifndef Fl_Hor_Value_Slider_H
-#define Fl_Hor_Value_Slider_H
-
-#include "Fl_Value_Slider.H"
-
-class FL_EXPORT Fl_Hor_Value_Slider : public Fl_Value_Slider {
-public:
-  Fl_Hor_Value_Slider(int X,int Y,int W,int H,const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Image.H
+++ /dev/null
@@ -1,262 +1,0 @@
-//
-// "$Id$"
-//
-// Image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Image, Fl_RGB_Image classes. */
-
-#ifndef Fl_Image_H
-#  define Fl_Image_H
-
-#  include "Enumerations.H"
-#include <stdlib.h>
-
-class Fl_Widget;
-class Fl_Pixmap;
-struct Fl_Menu_Item;
-struct Fl_Label;
-
-
-/** \enum Fl_RGB_Scaling
- The scaling algorithm to use for RGB images.
-*/
-enum Fl_RGB_Scaling {
-  FL_RGB_SCALING_NEAREST = 0, ///< default RGB image scaling algorithm
-  FL_RGB_SCALING_BILINEAR     ///< more accurate, but slower RGB image scaling algorithm
-};
-
-
-/**
- \brief Base class for image caching and drawing.
- 
- Fl_Image is the base class used for caching and drawing all kinds of images 
- in FLTK. This class keeps track of common image data such as the pixels, 
- colormap, width, height, and depth. Virtual methods are used to provide 
- type-specific image handling.
-  
- Since the Fl_Image class does not support image
- drawing by itself, calling the draw() method results in
- a box with an X in it being drawn instead.
-*/
-class FL_EXPORT Fl_Image {
-    
-public:
-  static const int ERR_NO_IMAGE    = -1;
-  static const int ERR_FILE_ACCESS = -2;
-  static const int ERR_FORMAT      = -3;
-    
-private:
-  int w_, h_, d_, ld_, count_;
-  const char * const *data_;
-  static Fl_RGB_Scaling RGB_scaling_;
-
-  // Forbid use of copy constructor and assign operator
-  Fl_Image & operator=(const Fl_Image &);
-  Fl_Image(const Fl_Image &);
-
-protected:
-
-  /**
-   Sets the current image width in pixels.
-   */
-  void w(int W) {w_ = W;}
-  /**
-   Sets the current image height in pixels.
-   */
-  void h(int H) {h_ = H;}
-  /**
-   Sets the current image depth.
-   */
-  void d(int D) {d_ = D;}
-  /**
-   Sets the current line data size in bytes.
-
-   Color images may contain extra data that is included after every
-   line of color image data and is normally not present.
-
-   If \p LD is zero, then line data size is assumed to be w() * d() bytes.
-
-   If \p LD is non-zero, then it must be positive and larger than w() * d()
-   to account for the extra data per line.
-   */
-  void ld(int LD) {ld_ = LD;}
-  /** 
-   Sets the current array pointer and count of pointers in the array.
-   */
-  void data(const char * const *p, int c) {data_ = p; count_ = c;}
-  void draw_empty(int X, int Y);
-
-  static void labeltype(const Fl_Label *lo, int lx, int ly, int lw, int lh, Fl_Align la);
-  static void measure(const Fl_Label *lo, int &lw, int &lh);
-
-public:
-
-  /** 
-   Returns the current image width in pixels.
-   */
-  int w() const {return w_;}
-  /**
-   Returns the current image height in pixels.
-   */
-  int h() const {return h_;}
-  /**
-   Returns the current image depth.
-   The return value will be 0 for bitmaps, 1 for
-   pixmaps, and 1 to 4 for color images.</P>
-   */
-  int d() const {return d_;}
-  /**
-   Returns the current line data size in bytes.
-   \see ld(int)
-   */
-  int ld() const {return ld_;}
-  /**
-   The count() method returns the number of data values
-   associated with the image. The value will be 0 for images with
-   no associated data, 1 for bitmap and color images, and greater
-   than 2 for pixmap images.
-   */
-  int count() const {return count_;}
-  /**
-   Returns a pointer to the current image data array.
-   Use the count() method to find the size of the data array.
-   */
-  const char * const *data() const {return data_;}
-  int fail();
-  Fl_Image(int W, int H, int D);
-  virtual ~Fl_Image();
-  virtual Fl_Image *copy(int W, int H);
-  /**
-   The copy() method creates a copy of the specified
-   image. If the width and height are provided, the image is
-   resized to the specified size. The image should be deleted (or in
-   the case of Fl_Shared_Image, released) when you are done
-   with it.
-   */
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  /**
-   The inactive() method calls
-   color_average(FL_BACKGROUND_COLOR, 0.33f) to produce
-   an image that appears grayed out.
-
-   An internal copy is made of the original image before
-   changes are applied, to avoid modifying the original image.
-   */
-  void inactive() { color_average(FL_GRAY, .33f); }
-  virtual void desaturate();
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  /**
-   Draws the image with a bounding box.
-   Arguments <tt>X,Y,W,H</tt> specify
-   a bounding box for the image, with the origin        
-   (upper-left corner) of the image offset by the \c cx
-   and \c cy arguments.
-   
-   In other words:  <tt>fl_push_clip(X,Y,W,H)</tt> is applied,
-   the image is drawn with its upper-left corner at <tt>X-cx,Y-cy</tt> and its own width and height,
-   <tt>fl_pop_clip</tt><tt>()</tt> is applied.
-   */
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0); // platform dependent
-  /**
-   Draws the image.
-   This form specifies the upper-lefthand corner of the image.
-   */
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);} // platform dependent
-  virtual void uncache();
-
-  // set RGB image scaling method
-  static void RGB_scaling(Fl_RGB_Scaling);
-
-  // get RGB image scaling method
-  static Fl_RGB_Scaling RGB_scaling();
-};
-
-
-/**
-  The Fl_RGB_Image class supports caching and drawing
-  of full-color images with 1 to 4 channels of color information.
-  Images with an even number of channels are assumed to contain
-  alpha information, which is used to blend the image with the
-  contents of the screen.
-
-  Fl_RGB_Image is defined in
-  &lt;FL/Fl_Image.H&gt;, however for compatibility reasons
-  &lt;FL/Fl_RGB_Image.H&gt; should be included.
-*/
-class FL_EXPORT Fl_RGB_Image : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_GDI_Printer_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-  static size_t max_size_;
-public:
-
-  /** Points to the start of the object's data array
-   */
-  const uchar *array;
-  /** If non-zero, the object's data array is delete[]'d when deleting the object.
-   */
-  int alloc_array;
-
-  private:
-
-#if defined(__APPLE__) || defined(WIN32)
-  void *id_; // for internal use
-  void *mask_; // for internal use (mask bitmap)
-#else
-  unsigned id_; // for internal use
-  unsigned mask_; // for internal use (mask bitmap)
-#endif // __APPLE__ || WIN32
-
-public:
-
-  Fl_RGB_Image(const uchar *bits, int W, int H, int D=3, int LD=0);
-  Fl_RGB_Image(const Fl_Pixmap *pxm, Fl_Color bg=FL_GRAY);
-  virtual ~Fl_RGB_Image();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-  /** Sets the maximum allowed image size in bytes when creating an Fl_RGB_Image object.
-   
-   The image size in bytes of an Fl_RGB_Image object is the value of the product w() * h() * d().
-   If this product exceeds size, the created object of a derived class of Fl_RGB_Image 
-   won't be loaded with the image data.
-   This does not apply to direct RGB image creation with 
-   Fl_RGB_Image::Fl_RGB_Image(const uchar *bits, int W, int H, int D, int LD).
-   The default max_size() value is essentially infinite. 
-   */
-  static void max_size(size_t size) { max_size_ = size;}
-  /** Returns the maximum allowed image size in bytes when creating an Fl_RGB_Image object.
-   
-   \sa  void Fl_RGB_Image::max_size(size_t)
-   */
-  static size_t max_size() {return max_size_;}
-};
-
-#endif // !Fl_Image_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Image_Surface.H
+++ /dev/null
@@ -1,99 +1,0 @@
-//
-// "$Id$"
-//
-// Draw-to-image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Image_Surface_H
-#define Fl_Image_Surface_H
-
-#include <FL/Fl_Copy_Surface.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Shared_Image.H>
-
-
-/** Directs all graphics requests to an Fl_Image.
- 
- After creation of an Fl_Image_Surface object, call set_current() on it, and all subsequent graphics requests
- will be recorded in the image. It's possible to draw widgets (using Fl_Image_Surface::draw()) 
- or to use any of the \ref fl_drawings or the \ref fl_attributes.
- Finally, call image() on the object to obtain a newly allocated Fl_RGB_Image object.
- <br> Fl_GL_Window objects can be drawn in the image as well. 
- 
- <br> Usage example:
- \code
- Fl_Widget *g = ...; // a widget you want to draw in an image
- Fl_Image_Surface *img_surf = new Fl_Image_Surface(g->w(), g->h()); // create an Fl_Image_Surface object
- img_surf->set_current(); // direct graphics requests to the image
- fl_color(FL_WHITE); fl_rectf(0, 0, g->w(), g->h()); // draw a white background
- img_surf->draw(g); // draw the g widget in the image
- Fl_RGB_Image* image = img_surf->image(); // get the resulting image
- delete img_surf; // delete the img_surf object
- Fl_Display_Device::display_device()->set_current();  // direct graphics requests back to the display
- \endcode
-*/
-class FL_EXPORT Fl_Image_Surface : public Fl_Surface_Device {
-private:
-  void prepare_(int w, int h, int highres);
-  Fl_Offscreen offscreen;
-  int width;
-  int height;
-  Fl_Paged_Device *helper;
-#ifdef __APPLE__
-#elif defined(WIN32)
-  HDC _sgc; 
-  Window _sw; 
-  Fl_Surface_Device *_ss;
-  int _savedc;
-#else
-  Fl_Surface_Device *previous;
-  Window pre_window;
-  GC gc;
-#endif
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-#if FLTK_ABI_VERSION >= 10304 || defined(FL_DOXYGEN)
-  Fl_Image_Surface(int w, int h, int highres = 0);
-#else
-  Fl_Image_Surface(int w, int h, int highres);
-  Fl_Image_Surface(int w, int h);
-#endif
-  ~Fl_Image_Surface();
-  void set_current();
-  void draw(Fl_Widget*, int delta_x = 0, int delta_y = 0);
-  void draw_decorated_window(Fl_Window* win, int delta_x = 0, int delta_y = 0);
-  Fl_RGB_Image *image();
-  Fl_Shared_Image *highres_image();
-};
-
-#ifdef __APPLE__
-/* Mac class to implement translate()/untranslate() for a flipped bitmap graphics context */
-class FL_EXPORT Fl_Quartz_Flipped_Surface_ : public Fl_Quartz_Surface_ {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_Quartz_Flipped_Surface_(int w, int h);
-  void translate(int x, int y);
-  void untranslate();
-  virtual ~Fl_Quartz_Flipped_Surface_() {};
-};
-#endif 
-
-#endif // Fl_Image_Surface_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Input.H
+++ /dev/null
@@ -1,269 +1,0 @@
-//
-// "$Id$"
-//
-// Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input widget . */
-
-#ifndef Fl_Input_H
-#define Fl_Input_H
-
-#include "Fl_Input_.H"
-
-/**
-  This is the FLTK text input widget. It displays a single line
-  of text and lets the user edit it. Normally it is drawn with an
-  inset box and a white background. The text may contain any
-  characters, and will correctly display any UTF text, using
-  ^X notation for unprintable control characters. It assumes the
-  font can draw any characters of the used scripts, which is true
-  for standard fonts under MSWindows and Mac OS X.
-  Characters can be input using the keyboard or the character palette/map.
-  Character composition is done using dead keys and/or a compose
-  key as defined by the operating system.
-  <P>
- <!-- DON'T use the class name in the caption, or doxygen 1.8.x will fail. -->
-  <TABLE WIDTH="90%" BORDER="1" SUMMARY="Fl_Input keyboard and mouse bindings.">
-    <CAPTION ALIGN="TOP">Keyboard and mouse bindings.</CAPTION>
-    <TR><TD NOWRAP="NOWRAP" WIDTH="1%">
-      <B>Mouse button 1</B> 
-    </TD><TD>
-      Moves the cursor to this point. 
-      Drag selects characters. 
-      Double click selects words. 
-      Triple click selects all line.
-      Shift+click extends the selection.
-      When you select text it is automatically copied to the selection buffer.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Mouse button 2</B> 
-    </TD><TD>
-      Insert the selection buffer at the point clicked.
-      You can also select a region and replace it with the selection buffer
-      by selecting the region with mouse button 2.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Mouse button 3</B>
-    </TD><TD>
-      Currently acts like button 1.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Backspace</B>
-    </TD><TD>
-      Deletes one character to the left, or deletes the selected region.
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Delete</B>
-    </TD><TD>
-      Deletes one character to the right, or deletes the selected region.
-      Combine with Shift for equivalent of ^X (copy+cut).
-    </TD></TR><TR><TD NOWRAP="NOWRAP">
-      <B>Enter</b>
-    </TD><TD>
-      May cause the callback, see when().
-  </TD></TR></TABLE>
-
-  <P>
-
-  <TABLE WIDTH="90%" BORDER="1" SUMMARY="Fl_Input platform specific keyboard bindings.">
-    <CAPTION ALIGN="TOP">Platform specific keyboard bindings.</CAPTION>
-  <TR>
-    <TD NOWRAP="NOWRAP" WIDTH="1%"><B> Windows/Linux </B></TD>
-    <TD NOWRAP="NOWRAP" WIDTH="1%"><B> Mac </B></TD>
-    <TD NOWRAP="NOWRAP"           ><B> Function </B></TD>
-
-  </TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^A </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-A </B></TD>
-    <TD>
-      <B>Selects all text in the widget.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^C </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-C </B></TD>
-    <TD>
-      <B>Copy the current selection to the clipboard.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^I </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^I </B></TD>
-    <TD>
-      <B>Insert a tab.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^J </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^J </B></TD>
-    <TD>
-      <B>Insert a Line Feed.</B> <BR>
-      (Similar to literal 'Enter' character)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^L </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^L </B></TD>
-    <TD>
-      <B>Insert a Form Feed.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^M </B></TD>
-    <TD NOWRAP="NOWRAP"><B> ^M </B></TD>
-    <TD>
-      <B>Insert a Carriage Return.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^V,<BR>Shift-Insert </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-V </B></TD>
-    <TD>
-      <B>Paste the clipboard.</B> <BR>
-      (Macs keyboards don't have "Insert" keys, 
-      but if they did, Shift-Insert would work)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^X,<BR>Shift-Delete </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-X,<BR>Shift-Delete </B></TD>
-    <TD>
-      <B>Cut.</B> <BR>
-      Copy the selection to the clipboard and delete it.
-      (If there's no selection, Shift-Delete acts like Delete)
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> ^Z </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Z </B></TD>
-    <TD>
-      <B>Undo.</B> <BR>
-      This is a single-level undo mechanism, but all adjacent 
-      deletions and insertions are concatenated into a single "undo".
-      Often this will undo a lot more than you expected. 
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Shift-^Z </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Shift-Command-Z </B></TD>
-    <TD>
-      <B>Redo.</B> <BR>
-      Currently same behavior as ^Z. 
-      Reserved for future multilevel undo/redo.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Arrow Keys </B></TD>
-    <TD>
-      <B>Standard cursor movement.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Home </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Up,<BR>Command-Left </B></TD>
-    <TD>
-      <B>Move to start of line.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> End </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-Down,<BR>Command-Right </B></TD>
-    <TD>
-      <B>Move to end of line.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B>Ctrl-Home</B></TD>
-    <TD NOWRAP="NOWRAP"><B>Command-Up,<BR>Command-PgUp,<BR>Ctrl-Left</B></TD>
-    <TD>
-      <B>Move to top of document/field.</B> <BR>
-      In single line input, moves to start of line.
-      In multiline input, moves to start of top line.
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-End </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Command-End,<BR>Command-PgDn,<BR>Ctrl-Right</B></TD>
-    <TD>
-      <B>Move to bottom of document/field.</B> <BR>
-      In single line input, moves to end of line.
-      In multiline input, moves to end of last line.
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Left </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Left </B></TD>
-    <TD>
-      <B>Word left.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Right </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Right </B></TD>
-    <TD>
-      <B>Word right.</B> <BR>
-      Can be combined with Shift to extend selection.
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Backspace </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Backspace </B></TD>
-    <TD>
-      <B>Delete word left.</B>
-
-  </TD></TR><TR>
-    <TD NOWRAP="NOWRAP"><B> Ctrl-Delete </B></TD>
-    <TD NOWRAP="NOWRAP"><B> Alt-Delete </B></TD>
-    <TD>
-      <B>Delete word right.</B>
-
-  </TD></TR></TABLE>
-  */
-class FL_EXPORT Fl_Input : public Fl_Input_ {
-  int handle_key();
-  int shift_position(int p);
-  int shift_up_down_position(int p);
-  void handle_mouse(int keepmark=0);
-
-  // Private keyboard functions
-  int kf_lines_up(int repeat_num);
-  int kf_lines_down(int repeat_num);
-  int kf_page_up();
-  int kf_page_down();
-  int kf_insert_toggle();
-  int kf_delete_word_right();
-  int kf_delete_word_left();
-  int kf_delete_sol();
-  int kf_delete_eol();
-  int kf_delete_char_right();
-  int kf_delete_char_left();
-  int kf_move_sol();
-  int kf_move_eol();
-  int kf_clear_eol();
-  int kf_move_char_left();
-  int kf_move_char_right();
-  int kf_move_word_left();
-  int kf_move_word_right();
-  int kf_move_up_and_sol();
-  int kf_move_down_and_eol();
-  int kf_top();
-  int kf_bottom();
-  int kf_select_all();
-  int kf_undo();
-  int kf_redo();
-  int kf_copy();
-  int kf_paste();
-  int kf_copy_cut();
-
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Input(int,int,int,int,const char * = 0);
-};
-
-#endif 
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Input_.H
+++ /dev/null
@@ -1,499 +1,0 @@
-//
-// "$Id$"
-//
-// Input base class header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input_ widget . */
-
-#ifndef Fl_Input__H
-#define Fl_Input__H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-#define FL_NORMAL_INPUT		0
-#define FL_FLOAT_INPUT		1
-#define FL_INT_INPUT		2
-#define FL_HIDDEN_INPUT		3
-#define FL_MULTILINE_INPUT	4
-#define FL_SECRET_INPUT		5
-#define FL_INPUT_TYPE		7
-#define FL_INPUT_READONLY	8
-#define FL_NORMAL_OUTPUT	(FL_NORMAL_INPUT | FL_INPUT_READONLY)
-#define FL_MULTILINE_OUTPUT	(FL_MULTILINE_INPUT | FL_INPUT_READONLY)
-#define FL_INPUT_WRAP		16
-#define FL_MULTILINE_INPUT_WRAP	(FL_MULTILINE_INPUT | FL_INPUT_WRAP)
-#define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
-
-/**
-  This class provides a low-overhead text input field.
-
-  This is a virtual base class below Fl_Input. It has all
-  the same interfaces, but lacks the handle() and
-  draw() method. You may want to subclass it if you are
-  one of those people who likes to change how the editing keys
-  work. It may also be useful for adding scrollbars
-  to the input field.
-
-  This can act like any of the subclasses of Fl_Input, by
-  setting type() to one of the following values:
-
-  \code
-  #define FL_NORMAL_INPUT	   0
-  #define FL_FLOAT_INPUT	   1
-  #define FL_INT_INPUT		   2
-  #define FL_MULTILINE_INPUT	   4
-  #define FL_SECRET_INPUT	   5
-  #define FL_INPUT_TYPE		   7
-  #define FL_INPUT_READONLY	   8
-  #define FL_NORMAL_OUTPUT	   (FL_NORMAL_INPUT | FL_INPUT_READONLY)
-  #define FL_MULTILINE_OUTPUT	   (FL_MULTILINE_INPUT | FL_INPUT_READONLY)
-  #define FL_INPUT_WRAP		   16
-  #define FL_MULTILINE_INPUT_WRAP  (FL_MULTILINE_INPUT | FL_INPUT_WRAP)
-  #define FL_MULTILINE_OUTPUT_WRAP (FL_MULTILINE_INPUT | FL_INPUT_READONLY | FL_INPUT_WRAP)
-  \endcode
-
-  All variables that represent an index into a text buffer are byte-oriented,
-  not character oriented, counting from 0 (at or before the first character)
-  to size() (at the end of the buffer, after the last byte). Since UTF-8
-  characters can be up to six bytes long, simply incrementing such an index
-  will not reliably advance to the next character in the text buffer.
-
-  Indices and pointers into the text buffer should always point at a 7 bit ASCII
-  character or the beginning of a UTF-8 character sequence. Behavior for false
-  UTF-8 sequences and pointers into the middle of a sequence are undefined.
-
-  \see Fl_Text_Display, Fl_Text_Editor for more powerful text handling widgets
-
-  \internal
-  When porting this widget from ASCII to UTF-8, previously legal pointers into
-  the text of this widget can become illegal by pointing into the middle of
-  a UTF-8 sequence. This is not a big problem for Fl_Input_ because all code
-  in this module is quite tolerant. It could be problematic though when deriving
-  from this class because no feedback for illegal pointers is given. Additionally,
-  a careless "copy" call can put partial UTF-8 sequences into the clipboard.
-
-  None of these issues should be disastrous. Nevertheless, we should
-  discuss how FLTK should handle false UTF-8 sequences and pointers.
-*/
-class FL_EXPORT Fl_Input_ : public Fl_Widget {
-
-  /** \internal Storage for the text field. */
-  const char* value_;
-
-  /** \internal Buffer memory for expanded text. \see expand() */
-  char* buffer;
-
-  /** \internal Size of text in bytes in the \p value_ field. */
-  int size_;
-
-  /** \internal Current size of internal value() buffer in bytes. */
-  int bufsize;
-
-  /** \internal Position of the cursor in the document. */
-  int position_;
-
-  /** \internal Position of the other end of the selected text.
-      If \p position_ equals \p mark_, no text is selected */
-  int mark_;
-
-  /** \internal Behavior of Tab key in multiline input widget. 
-      If enabled (default) Tab causes focus nav, otherwise Tab is inserted 
-      as a character. */
-  int tab_nav_;
-
-  /** \internal Offset to text origin within widget bounds */
-  int xscroll_, yscroll_;
-
-  /** \internal Minimal update pointer. Display requires redraw from here to the end
-      of the buffer. */
-  int mu_p;
-
-  /** \internal Maximum number of (UTF-8) characters a user can input. */
-  int maximum_size_;
-
-  /** \internal Shortcut key that will fetch focus for this widget. */
-  int shortcut_;
-
-  /** \internal This is set if no text but only the cursor needs updating. */
-  uchar erase_cursor_only;
-
-  /** \internal The font used for the entire text. */
-  Fl_Font textfont_;
-
-  /** \internal Height of the font used for the entire text. */
-  Fl_Fontsize textsize_;
-
-  /** \internal color of the entire text */
-  Fl_Color textcolor_;
-
-  /** \internal color of the text cursor */
-  Fl_Color cursor_color_;
-
-  /** \internal Horizontal cursor position in pixels while moving up or down. */
-  static double up_down_pos;
-
-  /** \internal Flag to remember last cursor move. */
-  static int was_up_down;
-
-  /* Convert a given text segment into the text that will be rendered on screen. */
-  const char* expand(const char*, char*) const;
-
-  /* Calculates the width in pixels of part of a text buffer. */
-  double expandpos(const char*, const char*, const char*, int*) const;
-
-  /* Mark a range of characters for update. */
-  void minimal_update(int, int);
-
-  /* Mark a range of characters for update. */
-  void minimal_update(int p);
-
-  /* Copy the value from a possibly static entry into the internal buffer. */
-  void put_in_buffer(int newsize);
-
-  /* Set the current font and font size. */
-  void setfont() const;
-
-protected:
-
-  /* Find the start of a word. */
-  int word_start(int i) const;
-
-  /* Find the end of a word. */
-  int word_end(int i) const;
-
-  /* Find the start of a line. */
-  int line_start(int i) const;
-  
-  /* Find the end of a line. */
-  int line_end(int i) const;
-
-  /* Draw the text in the passed bounding box. */
-  void drawtext(int, int, int, int);
-
-  /* Move the cursor to the column given by up_down_pos. */
-  int up_down_position(int, int keepmark=0);
-
-  /* Handle mouse clicks and mouse moves. */
-  void handle_mouse(int, int, int, int, int keepmark=0);
-
-  /* Handle all kinds of text field related events. */
-  int handletext(int e, int, int, int, int);
-
-  /* Check the when() field and do a callback if indicated. */
-  void maybe_do_callback();
-
-  /** \internal Horizontal offset of text to left edge of widget. */
-  int xscroll() const {return xscroll_;}
-
-  /** \internal Vertical offset of text to top edge of widget. */
-  int yscroll() const {return yscroll_;}
-  void yscroll(int yOffset) { yscroll_ = yOffset; damage(FL_DAMAGE_EXPOSE);}
-
-  /* Return the number of lines displayed on a single page.  */
-  int linesPerPage();
-
-public:
-
-  /* Change the size of the widget. */
-  void resize(int, int, int, int);
-
-  /* Constructor */
-  Fl_Input_(int, int, int, int, const char* = 0);
-
-  /* Destructor */
-  ~Fl_Input_();
-
-  /* Changes the widget text. */
-  int value(const char*);
-
-  /* Changes the widget text. */
-  int value(const char*, int);
-
-  /* Changes the widget text. */
-  int static_value(const char*);
-
-  /* Changes the widget text. */
-  int static_value(const char*, int);
-
-  /**
-      Returns the text displayed in the widget.
-
-      This function returns the current value, which is a pointer
-      to the internal buffer and is valid only until the next event is
-      handled.
-  
-      \return pointer to an internal buffer - do not free() this    
-      \see Fl_Input_::value(const char*)
-  */
-  const char* value() const {return value_;}
-
-  /* Returns the character at index \p i. */
-  Fl_Char index(int i) const;
-
-  /**
-    Returns the number of bytes in value(). 
-  
-    This may be greater than <tt>strlen(value())</tt> if there are 
-    \c nul characters in the text.
-
-    \return number of bytes in the text
-  */
-  int size() const {return size_;}
-
-  /** Sets the width and height of this widget.
-    \param [in] W, H new width and height
-    \see Fl_Widget::size(int, int) */
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-
-  /** Gets the maximum length of the input field in characters.
-    \see maximum_size(int). */
-  int maximum_size() const {return maximum_size_;}
-
-  /** Sets the maximum length of the input field in characters.
-
-    This limits the number of <b>characters</b> that can be inserted
-    in the widget.
-
-    Since FLTK 1.3 this is different than the buffer size, since one
-    character can be more than one byte in UTF-8 encoding. In FLTK 1.1
-    this was the same (one byte = one character).
-  */
-  void maximum_size(int m) {maximum_size_ = m;}
-
-  /** Gets the position of the text cursor.
-    \return the cursor position as an index in the range 0..size()
-    \see position(int, int)
-  */
-  int position() const {return position_;}
-
-  /** Gets the current selection mark. 
-    \return index into the text */
-  int mark() const {return mark_;}
-
-  /* Sets the index for the cursor and mark. */
-  int position(int p, int m);
-
-  /** Sets the cursor position and mark.
-    position(n) is the same as <tt>position(n, n)</tt>.
-    \param p new index for cursor and mark
-    \return 0 if no positions changed
-    \see position(int, int), position(), mark(int)
-  */
-  int position(int p) {return position(p, p);}
-
-  /** Sets the current selection mark. 
-    mark(n) is the same as <tt>position(position(),n)</tt>.
-    \param m new index of the mark 
-    \return 0 if the mark did not change
-    \see position(), position(int, int) */
-  int mark(int m) {return position(position(), m);}
-
-  /* Deletes text from \p b to \p e and inserts the new string \p text. */
-  int replace(int b, int e, const char *text, int ilen=0);
-
-  /**
-    Deletes the current selection.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \return 0 if no data was copied
-  */
-  int cut() {return replace(position(), mark(), 0);}
-
-  /**
-    Deletes the next \p n bytes rounded to characters before or after the cursor.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \param n number of bytes rounded to full characters and clamped to the buffer.
-           A negative number will cut characters to the left of the cursor.
-    \return 0 if no data was copied
-  */
-  int cut(int n) {return replace(position(), position()+n, 0);}
-
-  /**
-    Deletes all characters between index \p a and \p b.
-
-    This function deletes the currently selected text
-    \e without storing it in the clipboard. To use the clipboard,
-    you may call copy() first or copy_cuts() after
-    this call.
-
-    \param a, b range of bytes rounded to full characters and clamped to the buffer
-    \return 0 if no data was copied
-  */
-  int cut(int a, int b) {return replace(a, b, 0);}
-
-  /**
-    Inserts text at the cursor position.
-
-    This function inserts the string in \p t at the cursor
-    position() and moves the new position and mark to
-    the end of the inserted text.
-
-    \param [in] t text that will be inserted
-    \param [in] l length of text, or 0 if the string is terminated by \c nul.
-    \return 0 if no text was inserted
-  */
-  int insert(const char* t, int l=0){return replace(position_, mark_, t, l);}
-
-  /* Put the current selection into the clipboard. */
-  int copy(int clipboard);
-
-  /* Undo previous changes to the text buffer. */
-  int undo();
-
-  /* Copy the yank buffer to the clipboard. */
-  int copy_cuts();
-
-  /** Return the shortcut key associated with this widget.
-    \return shortcut keystroke
-    \see Fl_Button::shortcut() */
-  int shortcut() const {return shortcut_;}
-
-  /** 
-    Sets the shortcut key associated with this widget.
-    Pressing the shortcut key gives text editing focus to this widget.
-    \param [in] s new shortcut keystroke 
-    \see Fl_Button::shortcut() 
-  */
-  void shortcut(int s) {shortcut_ = s;}
-
-  /** Gets the font of the text in the input field.
-    \return the current Fl_Font index */
-  Fl_Font textfont() const {return textfont_;}
-
-  /** Sets the font of the text in the input field.
-    The text font defaults to \c FL_HELVETICA.
-    \param [in] s the new text font */
-  void textfont(Fl_Font s) {textfont_ = s;}
-
-  /** Gets the size of the text in the input field.
-    \return the text height in pixels */
-  Fl_Fontsize textsize() const {return textsize_;}
-
-  /** Sets the size of the text in the input field.
-    The text height defaults to \c FL_NORMAL_SIZE.
-    \param [in] s the new font height in pixel units */
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-
-  /** Gets the color of the text in the input field.
-    \return the text color
-    \see textcolor(Fl_Color) */
-  Fl_Color textcolor() const {return textcolor_;}
-
-  /** Sets the color of the text in the input field.
-    The text color defaults to \c FL_FOREGROUND_COLOR.
-    \param [in] n new text color
-    \see textcolor() */
-  void textcolor(Fl_Color n) {textcolor_ = n;}
-
-  /** Gets the color of the cursor.  
-    \return the current cursor color */
-  Fl_Color cursor_color() const {return cursor_color_;}
-
-  /** Sets the color of the cursor.  
-    The default color for the cursor is \c FL_BLACK.
-    \param [in] n the new cursor color */
-  void cursor_color(Fl_Color n) {cursor_color_ = n;}
-
-  /** Gets the input field type. 
-    \return the current input type */
-  int input_type() const {return type() & FL_INPUT_TYPE; }
-
-  /** Sets the input field type. 
-    A redraw() is required to reformat the input field.
-    \param [in] t new input type */
-  void input_type(int t) { type((uchar)(t | readonly())); }
-
-  /** Gets the read-only state of the input field.  
-    \return non-zero if this widget is read-only */
-  int readonly() const { return type() & FL_INPUT_READONLY; }
-
-  /** Sets the read-only state of the input field.  
-    \param [in] b if \p b is 0, the text in this widget can be edited by the user */
-  void readonly(int b) { if (b) type((uchar)(type() | FL_INPUT_READONLY));
-                         else type((uchar)(type() & ~FL_INPUT_READONLY)); }
-
-  /**
-    Gets  the word wrapping state of the input field. 
-    Word wrap is only functional with multi-line input fields.
-  */
-  int wrap() const { return type() & FL_INPUT_WRAP; }
-
-  /**
-    Sets the word wrapping state of the input field. 
-    Word wrap is only functional with multi-line input fields.
-  */
-  void wrap(int b) { if (b) type((uchar)(type() | FL_INPUT_WRAP));
-                         else type((uchar)(type() & ~FL_INPUT_WRAP)); }
-
-  /**
-    Sets whether the Tab key does focus navigation, 
-    or inserts tab characters into Fl_Multiline_Input.
-
-    By default this flag is enabled to provide the 'normal' behavior 
-    most users expect; Tab navigates focus to the next widget. 
-    To inserting an actual Tab character, users can use Ctrl-I
-    or copy/paste.
-
-    Disabling this flag gives the old FLTK behavior where Tab
-    inserts a tab character into the text field, in which case
-    only the mouse can be used to navigate to the next field.
-
-    History: This flag was provided for backwards support of FLTK's old 1.1.x
-    behavior where Tab inserts a tab character instead of navigating 
-    focus to the next widget. This behavior was unique to Fl_Multiline_Input. 
-    With the advent of Fl_Text_Editor, this old behavior has been deprecated.
-
-    \param [in] val If \p val is 1, Tab advances focus (default).<BR>
-                    If \p val is 0, Tab inserts a tab character (old FLTK behavior).
-
-    \see tab_nav(), Fl::OPTION_ARROW_FOCUS.
-  */
-  void tab_nav(int val) {
-    tab_nav_ = val;
-  }
-
-  /**
-    Gets whether the Tab key causes focus navigation in multiline input fields or not.
-
-    If enabled (default), hitting Tab causes focus navigation to the next widget.
-
-    If disabled, hitting Tab inserts a tab character into the text field.
-    \returns 1 if Tab advances focus (default), 0 if Tab inserts tab characters.
-
-    \see tab_nav(int), Fl::OPTION_ARROW_FOCUS.
-  */
-  int tab_nav() const {
-    return tab_nav_;
-  }
-};
-
-#endif 
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Input_Choice.H
+++ /dev/null
@@ -1,268 +1,0 @@
-//
-// "$Id$"
-//
-// An input/chooser widget.
-//            ______________  ____
-//           |              || __ |
-//           | input area   || \/ |
-//           |______________||____|
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Input_Choice widget . */
-
-#ifndef Fl_Input_Choice_H
-#define Fl_Input_Choice_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-#include <string.h>
-
-/**
-  A combination of the input widget and a menu button.
-
-  \image html input_choice.jpg
-  \image latex input_choice.jpg "Fl_Input_Choice widget" width=6cm
-
-  The user can either type into the input area, or use the
-  menu button chooser on the right to choose an item which loads
-  the input area with the selected text.
-
-  The application can directly access both the internal Fl_Input 
-  and Fl_Menu_Button widgets respectively using the input() and menubutton()
-  accessor methods.
-
-  The default behavior is to invoke the Fl_Input_Choice::callback()
-  if the user changes the input field's contents, either by typing,
-  pasting, or clicking a different item in the choice menu.
-  
-  The callback can determine if an item was picked vs. typing
-  into the input field by checking the value of menubutton()->changed(),
-  which will be:
-
-      - 1: the user picked a different item in the choice menu
-      - 0: the user typed or pasted directly into the input field
-
-  Example use:
-  \code
-  #include <stdio.h>
-  #include <FL/Fl.H>
-  #include <FL/Fl_Double_Window.H>
-  #include <FL/Fl_Input_Choice.H>
-  void choice_cb(Fl_Widget *w, void *userdata) {
-    // Show info about the picked item
-    Fl_Input_Choice *choice = (Fl_Input_Choice*)w;
-    const Fl_Menu_Item *item = choice->menubutton()->mvalue();
-    printf("*** Choice Callback:\n");
-    printf("    item label()='%s'\n", item ? item->label() : "(No item)");
-    printf("    item value()=%d\n", choice->menubutton()->value());
-    printf("    input value()='%s'\n", choice->input()->value());
-    printf("    The user %s\n", choice->menubutton()->changed()
-                                    ? "picked a menu item"
-                                    : "typed text");
-  }
-  int main() {
-    Fl_Double_Window win(200,100,"Input Choice");
-    win.begin();
-      Fl_Input_Choice choice(10,10,100,30);
-      choice.callback(choice_cb, 0);
-      choice.add("Red");
-      choice.add("Orange");
-      choice.add("Yellow");
-      //choice.value("Red");    // uncomment to make "Red" default
-    win.end();
-    win.show();
-    return Fl::run();
-  }
-  \endcode
-*/
-class FL_EXPORT Fl_Input_Choice : public Fl_Group {
-  // Private class to handle slightly 'special' behavior of menu button
-  class InputMenuButton : public Fl_Menu_Button {
-    void draw() {
-      draw_box(FL_UP_BOX, color());
-      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-      int xc = x()+w()/2, yc=y()+h()/2;
-      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
-      if (Fl::focus() == this) draw_focus();
-    }
-  public:
-    InputMenuButton(int X,int Y,int W,int H,const char*L=0) : 
-	Fl_Menu_Button(X, Y, W, H, L) { box(FL_UP_BOX); }
-  };
-
-  Fl_Input *inp_;
-  InputMenuButton *menu_;
-
-  // note: this is used by the Fl_Input_Choice ctor defined in Fl_Group.
-  static void menu_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    const Fl_Menu_Item *item = o->menubutton()->mvalue();
-    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
-    if (!strcmp(o->inp_->value(), o->menu_->text()))
-    {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    else
-    {
-      o->inp_->value(o->menu_->text());
-      o->inp_->set_changed();
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-    {
-      o->Fl_Widget::clear_changed();
-      o->inp_->clear_changed();
-    }
-  }
-
-  // note: this is used by the Fl_Input_Choice ctor defined in Fl_Group.
-  static void inp_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    if (o->inp_->changed()) {
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    } else {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-      o->Fl_Widget::clear_changed();
-  }
-
-  // Custom resize behavior -- input stretches, menu button doesn't
-  inline int inp_x() { return(x() + Fl::box_dx(box())); }
-  inline int inp_y() { return(y() + Fl::box_dy(box())); }
-  inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); }
-  inline int inp_h() { return(h() - Fl::box_dh(box())); }
-
-  inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); }
-  inline int menu_y() { return(y() + Fl::box_dy(box())); }
-  inline int menu_w() { return(20); }
-  inline int menu_h() { return(h() - Fl::box_dh(box())); }
-
-public:
-  /**
-    Creates a new Fl_Input_Choice widget using the given position, size,
-    and label string.
-    Inherited destructor destroys the widget and any values associated with it.
-  */
-  Fl_Input_Choice(int X,int Y,int W,int H,const char*L=0);
-  
-  /** Adds an item to the menu.
-   You can access the more complex Fl_Menu_Button::add() methods 
-   (setting callbacks, userdata, etc), via menubutton(). Example:
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Fonts");
-   Fl_Menu_Button *mb = choice->menubutton();             // use Fl_Input_Choice's Fl_Menu_Button
-   mb->add("Helvetica", 0, MyFont_CB,     (void*)mydata); // use Fl_Menu_Button's add() methods
-   mb->add("Courier",   0, MyFont_CB,     (void*)mydata);
-   mb->add("More..",    0, FontDialog_CB, (void*)mydata);
-   \endcode
-   */
-  void add(const char *s) { menu_->add(s);  }
-  /** Returns the combined changed() state of the input and menu button widget. */
-  int changed() const { return inp_->changed() | Fl_Widget::changed(); }
-  /** Clears the changed() state of both input and menu button widgets. */
-  void clear_changed() { 
-    inp_->clear_changed();
-    Fl_Widget::clear_changed();
-  }
-  /** Sets the changed() state of both input and menu button widgets
-   to the specfied value.*/
-  void set_changed() { 
-    inp_->set_changed();
-    // no need to call Fl_Widget::set_changed()
-  }
-  /** Removes all items from the menu. */
-  void clear() { menu_->clear(); }
-  /** Gets the box type of the menu button */
-  Fl_Boxtype down_box() const { return (menu_->down_box()); }
-  /** Sets the box type of the menu button */
-  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
-  /** Gets the Fl_Menu_Item array used for the menu. */
-  const Fl_Menu_Item *menu() { return (menu_->menu()); }
-  /** Sets the Fl_Menu_Item array used for the menu. */
-  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
-  void resize(int X, int Y, int W, int H) {
-    Fl_Group::resize(X,Y,W,H);
-    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
-    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
-  }
-  /// Gets the Fl_Input text field's text color.
-  Fl_Color textcolor() const { return (inp_->textcolor());}
-  /// Sets the Fl_Input text field's text color to \p c.
-  void textcolor(Fl_Color c) { inp_->textcolor(c);}
-  /// Gets the Fl_Input text field's font style.
-  Fl_Font textfont() const { return (inp_->textfont());}
-  /// Sets the Fl_Input text field's font style to \p f.
-  void textfont(Fl_Font f) { inp_->textfont(f);}
-  /// Gets the Fl_Input text field's font size
-  Fl_Fontsize textsize() const { return (inp_->textsize()); }
-  /// Sets the Fl_Input text field's font size to \p s.
-  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
-  /// Returns the Fl_Input text field's current contents.
-  const char* value() const { return (inp_->value()); }
-  /** Sets the Fl_Input text field's contents to \p val.
-   Does not affect the menu selection.*/
-  void value(const char *val) { inp_->value(val); }
-  /** Chooses item# \p val in the menu, and sets the Fl_Input text field
-   to that value. Any previous text is cleared.*/
-  void value(int val) {
-    menu_->value(val);
-    inp_->value(menu_->text(val));
-  }
-  /** Returns a pointer to the internal Fl_Menu_Button widget.
-   This can be used to access any of the methods of the menu button, e.g.
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Choice:");
-   [..]
-   // Print all the items in the choice menu
-   for ( int t=0; t<choice->menubutton()->size(); t++ ) {
-       const Fl_Menu_Item &item = choice->menubutton()->menu()[t];
-       printf("item %d -- label=%s\n", t, item.label() ? item.label() : "(Null)");
-   }
-   \endcode
-  */
-  Fl_Menu_Button *menubutton() { return menu_; }
-  /** Returns a pointer to the internal Fl_Input widget.
-   This can be used to directly access all of the Fl_Input widget's
-   methods.*/
-  Fl_Input *input() { return inp_; }
-};
-
-#endif // !Fl_Input_Choice_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Int_Input.H
+++ /dev/null
@@ -1,46 +1,0 @@
-//
-// "$Id$"
-//
-// Integer input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Int_Input widget . */
-
-#ifndef Fl_Int_Input_H
-#define Fl_Int_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Int_Input class is a subclass of Fl_Input that only allows
-  the user to type decimal digits (or hex numbers of the form 0xaef).
-*/
-class FL_EXPORT Fl_Int_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Int_Input widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-  Fl_Int_Input(int X,int Y,int W,int H,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_JPEG_Image.H
+++ /dev/null
@@ -1,44 +1,0 @@
-//
-// "$Id$"
-//
-// JPEG image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_JPEG_Image class . */
-
-#ifndef Fl_JPEG_Image_H
-#define Fl_JPEG_Image_H
-#  include "Fl_Image.H"
-
-/**
- The Fl_JPEG_Image class supports loading, caching,
- and drawing of Joint Photographic Experts Group (JPEG) File
- Interchange Format (JFIF) images. The class supports grayscale
- and color (RGB) JPEG image files.
- */
-class FL_EXPORT Fl_JPEG_Image : public Fl_RGB_Image {
-
-public:
-
-  Fl_JPEG_Image(const char *filename);
-  Fl_JPEG_Image(const char *name, const unsigned char *data);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Light_Button.H
+++ /dev/null
@@ -1,50 +1,0 @@
-//
-// "$Id$"
-//
-// Lighted button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Light_Button widget . */
-
-#ifndef Fl_Light_Button_H
-#define Fl_Light_Button_H
-
-#include "Fl_Button.H"
-
-/**
-  This subclass displays the "on" state by turning on a light, 
-  rather than drawing pushed in.  The shape of the  "light" 
-  is initially set to FL_DOWN_BOX.  The color of the light when
-  on is controlled with selection_color(), which defaults to FL_YELLOW.
-
-  Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type() and when().
-  <P ALIGN=CENTER>\image html Fl_Light_Button.png</P> 
-  \image latex Fl_Light_Button.png "Fl_Light_Button" width=4cm
-*/
-class FL_EXPORT Fl_Light_Button : public Fl_Button {
-protected:
-    virtual void draw();
-public:
-    virtual int handle(int);
-    Fl_Light_Button(int x,int y,int w,int h,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Line_Dial.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Line dial header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Line_Dial widget . */
-
-#ifndef Fl_Line_Dial_H
-#define Fl_Line_Dial_H
-
-#include "Fl_Dial.H"
-
-class FL_EXPORT Fl_Line_Dial : public Fl_Dial {
-public:
-  Fl_Line_Dial(int X,int Y,int W,int H, const char *L = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu.H
+++ /dev/null
@@ -1,24 +1,0 @@
-//
-// "$Id$"
-//
-// Old menu header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// this include file is for back compatibility only
-#include "Fl_Menu_Item.H"
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu_.H
+++ /dev/null
@@ -1,188 +1,0 @@
-//
-// "$Id$"
-//
-// Menu base class header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_ widget . */
-
-#ifndef Fl_Menu__H
-#define Fl_Menu__H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-#include "Fl_Menu_Item.H"
-
-/**
-  Base class of all widgets that have a menu in FLTK.
-
-  Currently FLTK provides you with Fl_Menu_Button, Fl_Menu_Bar, and Fl_Choice.
-
-  The class contains a pointer to an array of structures of type Fl_Menu_Item.
-  The array may either be supplied directly by the user program, or it may
-  be "private": a dynamically allocated array managed by the Fl_Menu_.
-
-  When the user clicks a menu item, value() is set to that item
-  and then:
-
-    - If the Fl_Menu_Item has a callback set, that callback
-      is invoked with any userdata configured for it.
-      (The Fl_Menu_ widget's callback is NOT invoked.)
-
-    - For any Fl_Menu_Items that \b don't have a callback set,
-      the Fl_Menu_ widget's callback is invoked with any userdata
-      configured for it. The callback can determine which item
-      was picked using value(), mvalue(), item_pathname(), etc.
-*/
-class FL_EXPORT Fl_Menu_ : public Fl_Widget {
-
-  Fl_Menu_Item *menu_;
-  const Fl_Menu_Item *value_;
-
-protected:
-
-  uchar alloc;			// flag indicates if menu_ is a dynamic copy (=1) or not (=0)
-  uchar down_box_;
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-
-  int item_pathname_(char *name, int namelen, const Fl_Menu_Item *finditem,
-                     const Fl_Menu_Item *menu=0) const;
-public:
-  Fl_Menu_(int,int,int,int,const char * =0);
-  ~Fl_Menu_();
-
-  int item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem=0) const;
-  const Fl_Menu_Item* picked(const Fl_Menu_Item*);
-  const Fl_Menu_Item* find_item(const char *name);
-  const Fl_Menu_Item* find_item(Fl_Callback*);
-  int find_index(const char *name) const;
-  int find_index(const Fl_Menu_Item *item) const;
-  int find_index(Fl_Callback *cb) const;
-
-  /**
-    Returns the menu item with the entered shortcut (key value).
-
-    This searches the complete menu() for a shortcut that matches the
-    entered key value.  It must be called for a FL_KEYBOARD or FL_SHORTCUT
-    event.
-
-    If a match is found, the menu's callback will be called.
-
-    \return matched Fl_Menu_Item or NULL.
-  */
-  const Fl_Menu_Item* test_shortcut() {return picked(menu()->test_shortcut());}
-  void global();
-
-  /**
-    Returns a pointer to the array of Fl_Menu_Items.  This will either be
-    the value passed to menu(value) or the private copy.
-    \sa size() -- returns the size of the Fl_Menu_Item array.
-
-    \b Example: How to walk the array:
-    \code
-    for ( int t=0; t<menubar->size(); t++ ) {                // walk array of items
-        const Fl_Menu_Item &item = menubar->menu()[t];       // get each item
-        fprintf(stderr, "item #%d -- label=%s, value=%s type=%s\n",
-            t,
-            item.label() ? item.label() : "(Null)",          // menu terminators have NULL labels
-            (item.flags & FL_MENU_VALUE) ? "set" : "clear",  // value of toggle or radio items
-            (item.flags & FL_SUBMENU) ? "Submenu" : "Item"); // see if item is a submenu or actual item
-    }
-    \endcode
-
-  */
-  const Fl_Menu_Item *menu() const {return menu_;}
-  void menu(const Fl_Menu_Item *m);
-  void copy(const Fl_Menu_Item *m, void* user_data = 0);
-  int insert(int index, const char*, int shortcut, Fl_Callback*, void* = 0, int = 0);
-  int  add(const char*, int shortcut, Fl_Callback*, void* = 0, int = 0); // see src/Fl_Menu_add.cxx
-  /** See int Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0) */
-  int  add(const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
-      return add(a,fl_old_shortcut(b),c,d,e);
-  }
-  /** See int Fl_Menu_::insert(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0) */
-  int insert(int index, const char* a, const char* b, Fl_Callback* c, void* d = 0, int e = 0) {
-      return insert(index,a,fl_old_shortcut(b),c,d,e);
-  }
-  int  add(const char *);
-  int  size() const ;
-  void size(int W, int H) { Fl_Widget::size(W, H); }
-  void clear();
-  int clear_submenu(int index);
-  void replace(int,const char *);
-  void remove(int);
-  /** Changes the shortcut of item \p i to \p s. */
-  void shortcut(int i, int s) {menu_[i].shortcut(s);}
-  /** Sets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
-  void mode(int i,int fl) {menu_[i].flags = fl;}
-  /** Gets the flags of item i.  For a list of the flags, see Fl_Menu_Item.  */
-  int  mode(int i) const {return menu_[i].flags;}
-
-  /** Returns a pointer to the last menu item that was picked.  */
-  const Fl_Menu_Item *mvalue() const {return value_;}
-  /** Returns the index into menu() of the last item chosen by the user.  It is zero initially. */
-  int value() const {return value_ ? (int)(value_-menu_) : -1;}
-  int value(const Fl_Menu_Item*);
-  /**
-    The value is the index into menu() of the last item chosen by
-    the user.  It is zero initially.  You can set it as an integer, or set
-    it with a pointer to a menu item.  The set routines return non-zero if
-    the new value is different than the old one.
-  */
-  int value(int i) {return value(menu_+i);}
-  /** Returns the title of the last item chosen.  */
-  const char *text() const {return value_ ? value_->text : 0;}
-  /** Returns the title of item i.  */
-  const char *text(int i) const {return menu_[i].text;}
-
-  /** Gets the current font of menu item labels.  */
-  Fl_Font textfont() const {return textfont_;}
-  /**  Sets the current font of menu item labels.  */
-  void textfont(Fl_Font c) {textfont_=c;}
-  /**  Gets the font size of menu item labels.  */
-  Fl_Fontsize textsize() const {return textsize_;}
-  /**  Sets the font size of menu item labels.  */
-  void textsize(Fl_Fontsize c) {textsize_=c;}
-  /** Get the current color of menu item labels.  */
-  Fl_Color textcolor() const {return textcolor_;}
-  /** Sets the current color of menu item labels. */
-  void textcolor(Fl_Color c) {textcolor_=c;}
-
-  /**
-    This box type is used to surround the currently-selected items in the
-    menus.  If this is FL_NO_BOX then it acts like
-    FL_THIN_UP_BOX and selection_color() acts like
-    FL_WHITE, for back compatibility.
-  */
-  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
-  /**    See Fl_Boxtype Fl_Menu_::down_box() const   */
-  void down_box(Fl_Boxtype b) {down_box_ = b;}
-
-  /** For back compatibility, same as selection_color() */
-  Fl_Color down_color() const {return selection_color();}
-  /** For back compatibility, same as selection_color() */
-  void down_color(unsigned c) {selection_color(c);}
-  void setonly(Fl_Menu_Item* item);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu_Bar.H
+++ /dev/null
@@ -1,97 +1,0 @@
-//
-// "$Id$"
-//
-// Menu bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Bar widget . */
-
-#ifndef Fl_Menu_Bar_H
-#define Fl_Menu_Bar_H
-
-#include "Fl_Menu_.H"
-
-/**
-  This widget provides a standard menubar interface.  Usually you will
-  put this widget along the top edge of your window.  The height of the
-  widget should be 30 for the menu titles to draw correctly with the
-  default font.
-
-  The items on the bar and the menus they bring up are defined by a
-  single Fl_Menu_Item array.
-  Because a Fl_Menu_Item array defines a hierarchy, the
-  top level menu defines the items in the menubar, while the submenus
-  define the pull-down menus. Sub-sub menus and lower pop up to the right
-  of the submenus.
-
-  \image html  menubar.png
-  \image latex  menubar.png " menubar" width=12cm
-
-  If there is an item in the top menu that is not a title of a
-  submenu, then it acts like a "button" in the menubar.  Clicking on it
-  will pick it.
-
-  When the user clicks a menu item, value() is set to that item
-  and then:
-
-    - The item's callback is done if one has been set; the
-      Fl_Menu_Bar is passed as the Fl_Widget* argument,
-      along with any userdata configured for the callback.
-
-    - If the item does not have a callback, the Fl_Menu_Bar's callback
-      is done instead, along with any userdata configured for the callback.
-      The callback can determine which item was picked using
-      value(), mvalue(), item_pathname(), etc.
-
-  Submenus will also pop up in response to shortcuts indicated by
-  putting a '&' character in the name field of the menu item. If you put a
-  '&' character in a top-level "button" then the shortcut picks it.  The
-  '&' character in submenus is ignored until the menu is popped up.
-
-  Typing the shortcut() of any of the menu items will cause
-  callbacks exactly the same as when you pick the item with the mouse.
-*/
-class FL_EXPORT Fl_Menu_Bar : public Fl_Menu_ {
-protected:
-    void draw();
-public:
-    int handle(int);
-  /**
-    Creates a new Fl_Menu_Bar widget using the given position,
-    size, and label string. The default boxtype is FL_UP_BOX.
-
-    The constructor sets menu() to NULL.  See
-    Fl_Menu_ for the methods to set or change the menu.
-
-    labelsize(), labelfont(), and labelcolor()
-    are used to control how the menubar items are drawn.  They are
-    initialized from the Fl_Menu static variables, but you can
-    change them if desired.
-
-    label() is ignored unless you change align() to
-    put it outside the menubar.
-
-    The destructor removes the Fl_Menu_Bar widget and all of its
-    menu items.
-  */
-  Fl_Menu_Bar(int X, int Y, int W, int H, const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu_Button.H
+++ /dev/null
@@ -1,85 +1,0 @@
-//
-// "$Id$"
-//
-// Menu button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Button widget . */
-
-#ifndef Fl_Menu_Button_H
-#define Fl_Menu_Button_H
-
-#include "Fl_Menu_.H"
-
-/**
-  This is a button that when pushed pops up a menu (or hierarchy of
-  menus) defined by an array of 
-  Fl_Menu_Item objects.
-  <P ALIGN=CENTER>\image html  menu_button.png</P>
-  \image latex  menu_button.png " menu_button" width=5cm
-  <P>Normally any mouse button will pop up a menu and it is lined up
-  below the button as shown in the picture.  However an Fl_Menu_Button
-  may also control a pop-up menu.  This is done by setting the type().
-  If type() is zero a normal menu button is produced. 
-  If it is nonzero then this is a pop-up menu. The bits in type() indicate 
-  what mouse buttons pop up the menu (see Fl_Menu_Button::popup_buttons). </P>
-  <P>The menu will also pop up in response to shortcuts indicated by
-  putting a '&' character in the label(). </P>
-  <P>Typing the shortcut() of any of the menu items will cause
-  callbacks exactly the same as when you pick the item with the mouse.
-  The '&' character in menu item names are only looked at when the menu is
-  popped up, however. </P>
-
-  When the user clicks a menu item, value() is set to that item
-  and then:
-
-      - The item's callback is done if one has been set; the
-        Fl_Menu_Button is passed as the Fl_Widget* argument, 
-        along with any userdata configured for the callback.
-
-      - If the item does not have a callback, the Fl_Menu_Button's callback
-        is done instead, along with any userdata configured for it.
-        The callback can determine which item was picked using
-        value(), mvalue(), item_pathname(), etc.
-*/
-class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
-protected:
-  void draw();
-public:
-  /**
-   \brief indicate what mouse buttons pop up the menu.
-   
-   Values for type() used to indicate what mouse buttons pop up the menu. 
-   Fl_Menu_Button::POPUP3 is usually what you want.
-   */  
-  enum popup_buttons {POPUP1 = 1, /**< pops up with the mouse 1st button. */
-    POPUP2,  /**< pops up with the mouse 2nd button. */
-    POPUP12, /**< pops up with the mouse 1st or 2nd buttons. */
-    POPUP3,   /**< pops up with the mouse 3rd button. */
-    POPUP13,  /**< pops up with the mouse 1st or 3rd buttons. */
-    POPUP23,  /**< pops up with the mouse 2nd or 3rd buttons. */
-    POPUP123 /**< pops up with any mouse button. */
-  };
-  int handle(int);
-  const Fl_Menu_Item* popup();
-  Fl_Menu_Button(int,int,int,int,const char * =0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu_Item.H
+++ /dev/null
@@ -1,443 +1,0 @@
-//
-// "$Id$"
-//
-// Menu item header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Menu_Item_H
-#define Fl_Menu_Item_H
-
-#  include "Fl_Widget.H"
-#  include "Fl_Image.H"
-
-#  if defined(__APPLE__) && defined(check)
-#    undef check
-#  endif
-
-// doxygen needs the following line to enable e.g. ::FL_MENU_TOGGLE to link to the enums
-/// @file
-
-enum { // values for flags:
-  FL_MENU_INACTIVE = 1,		///< Deactivate menu item (gray out)
-  FL_MENU_TOGGLE= 2,		///< Item is a checkbox toggle (shows checkbox for on/off state)
-  FL_MENU_VALUE = 4,		///< The on/off state for checkbox/radio buttons (if set, state is 'on')
-  FL_MENU_RADIO = 8,		///< Item is a radio button (one checkbox of many can be on)
-  FL_MENU_INVISIBLE = 0x10,	///< Item will not show up (shortcut will work)
-  FL_SUBMENU_POINTER = 0x20,	///< Indicates user_data() is a pointer to another menu array
-  FL_SUBMENU = 0x40,		///< This item is a submenu to other items
-  FL_MENU_DIVIDER = 0x80,	///< Creates divider line below this item. Also ends a group of radio buttons.
-  FL_MENU_HORIZONTAL = 0x100	///< ??? -- reserved
-};
-
-extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
-
-class Fl_Menu_;
-
-/**
-  The Fl_Menu_Item structure defines a single menu item that
-  is used by the Fl_Menu_ class.  
-  \code
-  struct Fl_Menu_Item {
-   const char*   text;     // label()
-   ulong         shortcut_;
-   Fl_Callback*  callback_;
-   void*         user_data_;
-   int           flags;
-   uchar         labeltype_;
-   uchar         labelfont_;
-   uchar         labelsize_;
-   uchar         labelcolor_;
-  };
-  
-  enum { // values for flags:
-   FL_MENU_INACTIVE   = 1,      // Deactivate menu item (gray out)
-   FL_MENU_TOGGLE     = 2,      // Item is a checkbox toggle (shows checkbox for on/off state)
-   FL_MENU_VALUE      = 4,      // The on/off state for checkbox/radio buttons (if set, state is 'on')
-   FL_MENU_RADIO      = 8,      // Item is a radio button (one checkbox of many can be on)
-   FL_MENU_INVISIBLE  = 0x10,   // Item will not show up (shortcut will work)
-   FL_SUBMENU_POINTER = 0x20,   // Indicates user_data() is a pointer to another menu array
-   FL_SUBMENU         = 0x40,   // This item is a submenu to other items
-   FL_MENU_DIVIDER    = 0x80,   // Creates divider line below this item. Also ends a group of radio buttons.
-   FL_MENU_HORIZONTAL = 0x100   // ??? -- reserved
-  };
-  \endcode
-  Typically menu items are statically defined; for example:
-  \code
-  Fl_Menu_Item popup[] = {
-   {"&alpha",    FL_ALT+'a', the_cb, (void*)1},
-   {"&beta",     FL_ALT+'b', the_cb, (void*)2},
-   {"gamma",     FL_ALT+'c', the_cb, (void*)3, FL_MENU_DIVIDER},
-   {"&strange",  0,          strange_cb},
-   {"&charm",    0,          charm_cb},
-   {"&truth",    0,          truth_cb},
-   {"b&eauty",   0,          beauty_cb},
-   {"sub&menu",  0,          0, 0, FL_SUBMENU},
-   {"one"},
-   {"two"},
-   {"three"},
-   {0},
-   {"inactive", FL_ALT+'i', 0, 0, FL_MENU_INACTIVE|FL_MENU_DIVIDER},
-   {"invisible",FL_ALT+'i', 0, 0, FL_MENU_INVISIBLE},
-   {"check",    FL_ALT+'i', 0, 0, FL_MENU_TOGGLE|FL_MENU_VALUE},
-   {"box",      FL_ALT+'i', 0, 0, FL_MENU_TOGGLE},
-   {0}};
-  \endcode
-  produces:
-
-  \image html   menu.png
-  \image latex  menu.png "menu" width=10cm
-
-  A submenu title is identified by the bit FL_SUBMENU in the 
-  flags field, and ends with a label() that is NULL.
-  You can nest menus to any depth.  A pointer to the first item in the
-  submenu can be treated as an Fl_Menu array itself.  It is also
-  possible to make separate submenu arrays with FL_SUBMENU_POINTER flags.
-
-  You should use the method functions to access structure members and
-  not access them directly to avoid compatibility problems with future
-  releases of FLTK.
-*/
-struct FL_EXPORT Fl_Menu_Item {
-  const char *text;	    ///< menu item text, returned by label()
-  int shortcut_;	    ///< menu item shortcut
-  Fl_Callback *callback_;   ///< menu item callback
-  void *user_data_;	    ///< menu item user_data for the menu's callback
-  int flags;		    ///< menu item flags like FL_MENU_TOGGLE, FL_MENU_RADIO
-  uchar labeltype_;	    ///< how the menu item text looks like
-  Fl_Font labelfont_;	    ///< which font for this menu item text
-  Fl_Fontsize labelsize_;   ///< size of menu item text
-  Fl_Color labelcolor_;	    ///< menu item text color
-
-  // advance N items, skipping submenus:
-  const Fl_Menu_Item *next(int=1) const;
-
-  /**
-    Advances a pointer by n items through a menu array, skipping
-    the contents of submenus and invisible items. There are two calls so
-    that you can advance through const and non-const data.
-  */
-  Fl_Menu_Item *next(int i=1) {
-    return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}
-
-  /** Returns the first menu item, same as next(0). */
-  const Fl_Menu_Item *first() const { return next(0); }
-
-  /** Returns the first menu item, same as next(0). */
-  Fl_Menu_Item *first() { return next(0); }
-
-  // methods on menu items:
-  /**
-    Returns the title of the item.
-    A NULL here indicates the end of the menu (or of a submenu).
-    A '&' in the item will print an underscore under the next letter,
-    and if the menu is popped up that letter will be a "shortcut" to pick
-    that item.  To get a real '&' put two in a row.
-  */
-  const char* label() const {return text;}
-
-  /**    See const char* Fl_Menu_Item::label() const   */
-  void label(const char* a) {text=a;}
-
-  /**    See const char* Fl_Menu_Item::label() const   */
-  void label(Fl_Labeltype a,const char* b) {labeltype_ = a; text = b;}
-
-  /**
-    Returns the menu item's labeltype.
-    A labeltype identifies a routine that draws the label of the
-    widget.  This can be used for special effects such as emboss, or to use
-    the label() pointer as another form of data such as a bitmap.
-    The value FL_NORMAL_LABEL prints the label as text.
-  */
-  Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}
-
-  /**
-    Sets the menu item's labeltype.
-    A labeltype identifies a routine that draws the label of the
-    widget.  This can be used for special effects such as emboss, or to use
-    the label() pointer as another form of data such as a bitmap.
-    The value FL_NORMAL_LABEL prints the label as text.
-  */
-  void labeltype(Fl_Labeltype a) {labeltype_ = a;}
-
-  /**
-    Gets the menu item's label color.
-    This color is passed to the labeltype routine, and is typically the
-    color of the label text.  This defaults to FL_BLACK.  If this
-    color is not black fltk will \b not use overlay bitplanes to draw
-    the menu - this is so that images put in the menu draw correctly.
-  */
-  Fl_Color labelcolor() const {return labelcolor_;}
-
-  /**
-    Sets the menu item's label color.
-    \see Fl_Color Fl_Menu_Item::labelcolor() const
-  */
-  void labelcolor(Fl_Color a) {labelcolor_ = a;}
-  /**
-    Gets the menu item's label font.
-    Fonts are identified by small 8-bit indexes into a table. See the
-    enumeration list for predefined fonts. The default value is a
-    Helvetica font. The function Fl::set_font() can define new fonts.
-  */
-  Fl_Font labelfont() const {return labelfont_;}
-
-  /**
-    Sets the menu item's label font.
-    Fonts are identified by small 8-bit indexes into a table. See the
-    enumeration list for predefined fonts. The default value is a
-    Helvetica font.  The function Fl::set_font() can define new fonts.
-  */
-  void labelfont(Fl_Font a) {labelfont_ = a;}
-
-  /** Gets the label font pixel size/height. */
-  Fl_Fontsize labelsize() const {return labelsize_;}
-
-  /** Sets the label font pixel size/height.*/
-  void labelsize(Fl_Fontsize a) {labelsize_ = a;}
-
-  /**
-    Returns the callback function that is set for the menu item.
-    Each item has space for a callback function and an argument for that
-    function. Due to back compatibility, the Fl_Menu_Item itself
-    is not passed to the callback, instead you have to get it by calling
-    ((Fl_Menu_*)w)->mvalue() where w is the widget argument.
-  */
-  Fl_Callback_p callback() const {return callback_;}
-
-  /**
-    Sets the menu item's callback function and userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-  */
-  void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
-
-  /**
-    Sets the menu item's callback function.
-    This method does not set the userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback* c) {callback_=c;}
-
-  /**
-    Sets the menu item's callback function.
-    This method does not set the userdata() argument.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
-
-  /**
-    Sets the menu item's callback function and userdata() argument.
-    This method does not set the userdata() argument.
-    The argument \p is cast to void* and stored as the userdata()
-    for the menu item's callback function.
-    \see Fl_Callback_p Fl_MenuItem::callback() const
-   */
-  void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)(fl_intptr_t)p;}
-
-  /**
-    Gets the user_data() argument that is sent to the callback function.
-  */
-  void* user_data() const {return user_data_;}
-  /**
-    Sets the user_data() argument that is sent to the callback function.
-  */
-  void user_data(void* v) {user_data_ = v;}
-  /**
-    Gets the user_data() argument that is sent to the callback function.
-    For convenience you can also define the callback as taking a long
-    argument.  This method casts the stored userdata() argument to long
-    and returns it as a \e long value.
-  */
-  long argument() const {return (long)(fl_intptr_t)user_data_;}
-  /**
-    Sets the user_data() argument that is sent to the callback function.
-    For convenience you can also define the callback as taking a long
-    argument.  This method casts the given argument \p v to void*
-    and stores it in the menu item's userdata() member.
-    This may not be portable to some machines.
-  */
-  void argument(long v) {user_data_ = (void*)(fl_intptr_t)v;}
-
-  /** Gets what key combination shortcut will trigger the menu item. */
-  int shortcut() const {return shortcut_;}
-
-  /**
-    Sets exactly what key combination will trigger the menu item.  The
-    value is a logical 'or' of a key and a set of shift flags, for instance 
-    FL_ALT+'a' or FL_ALT+FL_F+10 or just 'a'.  A value of
-    zero disables the shortcut.
-
-    The key can be any value returned by Fl::event_key(), but will usually 
-    be an ASCII letter. Use a lower-case letter unless you require the shift 
-    key to be held down.
-
-    The shift flags can be any set of values accepted by Fl::event_state().
-    If the bit is on that shift key must be pushed.  Meta, Alt, Ctrl, 
-    and Shift must be off if they are not in the shift flags (zero for the 
-    other bits indicates a "don't care" setting).
-  */
-  void shortcut(int s) {shortcut_ = s;}
-  /**
-    Returns true if either FL_SUBMENU or FL_SUBMENU_POINTER
-    is on in the flags. FL_SUBMENU indicates an embedded submenu
-    that goes from the next item through the next one with a NULL
-    label(). FL_SUBMENU_POINTER indicates that user_data()
-    is a pointer to another menu array.
-  */
-  int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
-  /**
-    Returns true if a checkbox will be drawn next to this item.
-    This is true if FL_MENU_TOGGLE or FL_MENU_RADIO is set in the flags.
-  */
-  int checkbox() const {return flags&FL_MENU_TOGGLE;}
-  /**
-    Returns true if this item is a radio item.
-    When a radio button is selected all "adjacent" radio buttons are
-    turned off.  A set of radio items is delimited by an item that has
-    radio() false, or by an item with FL_MENU_DIVIDER turned on.
-  */
-  int radio() const {return flags&FL_MENU_RADIO;}
-  /** Returns the current value of the check or radio item.
-      This is zero (0) if the menu item is not checked and
-      non-zero otherwise. You should not rely on a particular value,
-      only zero or non-zero.
-      \note The returned value for a checked menu item as of FLTK 1.3.2
-      is FL_MENU_VALUE (4), but may be 1 in a future version.
-  */
-  int value() const {return flags&FL_MENU_VALUE;}
-  /**
-    Turns the check or radio item "on" for the menu item. Note that this
-    does not turn off any adjacent radio items like set_only() does.
-  */
-  void set() {flags |= FL_MENU_VALUE;}
-
-  /** Turns the check or radio item "off" for the menu item. */
-  void clear() {flags &= ~FL_MENU_VALUE;}
-
-  void setonly();
-
-  /** Gets the visibility of an item. */
-  int visible() const {return !(flags&FL_MENU_INVISIBLE);}
-
-  /** Makes an item visible in the menu. */
-  void show() {flags &= ~FL_MENU_INVISIBLE;}
-
-  /** Hides an item in the menu. */
-  void hide() {flags |= FL_MENU_INVISIBLE;}
-
-  /** Gets whether or not the item can be picked. */
-  int active() const {return !(flags&FL_MENU_INACTIVE);}
-
-  /** Allows a menu item to be picked. */
-  void activate() {flags &= ~FL_MENU_INACTIVE;}
-  /**
-    Prevents a menu item from being picked. Note that this will also cause
-    the menu item to appear grayed-out.
-  */
-  void deactivate() {flags |= FL_MENU_INACTIVE;}
-  /** Returns non 0 if FL_INACTIVE and FL_INVISIBLE are cleared, 0 otherwise. */
-  int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));}
-
-  // compatibility for FLUID so it can set the image of a menu item...
-
-  /** compatibility api for FLUID, same as a->label(this) */
-  void image(Fl_Image* a) {a->label(this);}
-
-  /** compatibility api for FLUID, same as a.label(this) */
-  void image(Fl_Image& a) {a.label(this);}
-
-  // used by menubar:
-  int measure(int* h, const Fl_Menu_*) const;
-  void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const;
-
-  // popup menus without using an Fl_Menu_ widget:
-  const Fl_Menu_Item* popup(
-    int X, int Y,
-    const char *title = 0,
-    const Fl_Menu_Item* picked=0,
-    const Fl_Menu_* = 0) const;
-  const Fl_Menu_Item* pulldown(
-    int X, int Y, int W, int H,
-    const Fl_Menu_Item* picked = 0,
-    const Fl_Menu_* = 0,
-    const Fl_Menu_Item* title = 0,
-    int menubar=0) const;
-  const Fl_Menu_Item* test_shortcut() const;
-  const Fl_Menu_Item* find_shortcut(int *ip=0, const bool require_alt = false) const;
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    The callback is called with the stored user_data() as its second argument.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o) const {callback_(o, user_data_);}
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    This call overrides the callback's second argument with the given value \p arg.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o,void* arg) const {callback_(o, arg);}
-
-  /**
-    Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
-    This call overrides the callback's second argument with the
-    given value \p arg. long \p arg is cast to void* when calling
-    the callback.
-    You must first check that callback() is non-zero before calling this.
-  */
-  void do_callback(Fl_Widget* o,long arg) const {callback_(o, (void*)(fl_intptr_t)arg);}
-
-  // back-compatibility, do not use:
-
-  /** back compatibility only \deprecated. */
-  int checked() const {return flags&FL_MENU_VALUE;}
-
-  /** back compatibility only \deprecated. */
-  void check() {flags |= FL_MENU_VALUE;}
-
-  /** back compatibility only \deprecated. */
-  void uncheck() {flags &= ~FL_MENU_VALUE;}
-
-  int insert(int,const char*,int,Fl_Callback*,void* =0, int =0);
-  int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);
-
-  /** See int add(const char*, int shortcut, Fl_Callback*, void*, int) */
-  int add(const char*a, const char* b, Fl_Callback* c,
-	  void* d = 0, int e = 0) {
-    return add(a,fl_old_shortcut(b),c,d,e);}
-
-  int size() const ;
-};
-
-typedef Fl_Menu_Item Fl_Menu; // back compatibility
-
-enum {	// back-compatibility enum:
-  FL_PUP_NONE	= 0,
-  FL_PUP_GREY	= FL_MENU_INACTIVE,
-  FL_PUP_GRAY	= FL_MENU_INACTIVE,
-  FL_MENU_BOX	= FL_MENU_TOGGLE,
-  FL_PUP_BOX	= FL_MENU_TOGGLE,
-  FL_MENU_CHECK	= FL_MENU_VALUE,
-  FL_PUP_CHECK	= FL_MENU_VALUE,
-  FL_PUP_RADIO	= FL_MENU_RADIO,
-  FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
-  FL_PUP_SUBMENU = FL_SUBMENU_POINTER
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Menu_Window.H
+++ /dev/null
@@ -1,57 +1,0 @@
-//
-// "$Id$"
-//
-// Menu window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Menu_Window widget . */
-
-#ifndef Fl_Menu_Window_H
-#define Fl_Menu_Window_H
-
-#include "Fl_Single_Window.H"
-
-/**
-  The Fl_Menu_Window widget is a window type used for menus. By
-  default the window is drawn in the hardware overlay planes if they are
-  available so that the menu don't force the rest of the window to
-  redraw.
-*/
-class FL_EXPORT Fl_Menu_Window : public Fl_Single_Window {
-public:
-  void show();
-  void erase();
-  void flush();
-  void hide();
-  /** Tells if hardware overlay mode is set */
-  unsigned int overlay() {return !(flags()&NO_OVERLAY);}
-  /** Tells FLTK to use hardware overlay planes if they are available.  */
-  void set_overlay() {clear_flag(NO_OVERLAY);}
-  /** Tells FLTK to use normal drawing planes instead of overlay planes.
-      This is usually necessary if your menu contains multi-color pixmaps. */
-  void clear_overlay() {set_flag(NO_OVERLAY);}
-  ~Fl_Menu_Window();
-  /** Creates a new Fl_Menu_Window widget using the given size, and label string. */
-  Fl_Menu_Window(int W, int H, const char *l = 0);
-  /** Creates a new Fl_Menu_Window widget using the given position, size, and label string. */
-  Fl_Menu_Window(int X, int Y, int W, int H, const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Multi_Browser.H
+++ /dev/null
@@ -1,54 +1,0 @@
-//
-// "$Id$"
-//
-// Multi browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multi_Browser widget . */
-
-#ifndef Fl_Multi_Browser_H
-#define Fl_Multi_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The Fl_Multi_Browser class is a subclass of Fl_Browser
-  which lets the user select any set of the lines.  The user interface
-  is Macintosh style: clicking an item turns off all the others and
-  selects that one, dragging selects all the items the mouse moves over,
-  and ctrl + click (Cmd+click on the Mac OS platform) toggles the items.  
-  Shift + click extends the selection until the clicked item.
-  This is different from how forms did it.  
-  Normally the callback is done when the user releases the
-  mouse, but you can change this with when().
-  <P>See Fl_Browser for methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Multi_Browser : public Fl_Browser {
-public:
-  /**
-      Creates a new Fl_Multi_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_MULTI_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-    Fl_Multi_Browser(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Multi_Label.H
+++ /dev/null
@@ -1,78 +1,0 @@
-//
-// "$Id$"
-//
-// Multi-label header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Multi_Label_H
-#define Fl_Multi_Label_H
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-/** This struct allows multiple labels to be added to objects that might normally have only one label.
-
-    This struct allows a mixed text and/or graphics label to be applied to an object that
-    would normally only have a single (usually text only) label.
-
-    Most regular FLTK widgets now support the ability to associate both images and text
-    with a label but some special cases, notably the non-widget Fl_Menu_Item objects, do not.
-    Fl_Multi_Label may be used to create menu items that have an icon and text, which would
-    not normally be possible for an Fl_Menu_Item.
-    For example, Fl_Multi_Label is used in the New->Code submenu in fluid, and others.
-
-    Each Fl_Multi_Label holds two elements, labela and labelb; each may hold either a
-    text label (const char*) or an image (Fl_Image*). When displayed, labela is drawn first
-    and labelb is drawn immediately to its right.
-
-    More complex labels might be constructed by setting labelb as another Fl_Multi_Label and
-    thus chaining up a series of label elements.
-
-    When assigning a label element to one of labela or labelb, they should be explicitly cast
-    to (const char*) if they are not of that type already.
-
-    \see Fl_Label and Fl_Labeltype
- */
-struct FL_EXPORT Fl_Multi_Label {
-  /** Holds the "leftmost" of the two elements in the composite label.
-      Typically this would be assigned either a text string (const char*),
-      a (Fl_Image*) or a (Fl_Multi_Label*). */
-  const char* labela;
-  /** Holds the "rightmost" of the two elements in the composite label.
-      Typically this would be assigned either a text string (const char*),
-      a (Fl_Image*) or a (Fl_Multi_Label*). */
-  const char* labelb;
-  /** Holds the "type" of labela.
-    Typically this is set to FL_NORMAL_LABEL for a text label,
-    _FL_IMAGE_LABEL for an image (based on Fl_image) or _FL_MULTI_LABEL
-    if "chaining" multiple Fl_Multi_Label elements together. */
-  uchar typea;
-  /** Holds the "type" of labelb.
-    Typically this is set to FL_NORMAL_LABEL for a text label,
-    _FL_IMAGE_LABEL for an image (based on Fl_image) or _FL_MULTI_LABEL
-    if "chaining" multiple Fl_Multi_Label elements together. */
-  uchar typeb;
-
-  /** This method is used to associate a Fl_Multi_Label with a Fl_Widget. */
-  void label(Fl_Widget*);
-  /** This method is used to associate a Fl_Multi_Label with a Fl_Menu_Item. */
-  void label(Fl_Menu_Item*);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Multiline_Input.H
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$"
-//
-// Multiline input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multiline_Input widget . */ 
-
-#ifndef Fl_Multiline_Input_H
-#define Fl_Multiline_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  This input field displays '\\n' characters as new lines rather than ^J,
-  and accepts the Return, Tab, and up and down arrow keys.  This is for
-  editing multiline text.
-
-  This is far from the nirvana of text editors, and is probably only
-  good for small bits of text, 10 lines at most. Note that this widget
-  does not support scrollbars or per-character color control.
-
-  If you are presenting large amounts of text and need scrollbars
-  or full color control of characters, you probably want Fl_Text_Editor
-  instead.
-
-  In FLTK 1.3.x, the default behavior of the 'Tab' key was changed
-  to support consistent focus navigation. To get the older FLTK 1.1.x
-  behavior, set Fl_Input_::tab_nav() to 0. Newer programs should consider using
-  Fl_Text_Editor.
-*/
-class FL_EXPORT Fl_Multiline_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Multiline_Input widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-  Fl_Multiline_Input(int X,int Y,int W,int H,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Multiline_Output.H
+++ /dev/null
@@ -1,56 +1,0 @@
-//
-// "$Id$"
-//
-// Multi line output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Multiline_Output widget . */
-
-#ifndef Fl_Multiline_Output_H
-#define Fl_Multiline_Output_H
-
-#include "Fl_Output.H"
-
-/**
-  This widget is a subclass of Fl_Output that displays multiple
-  lines of text. It also displays tab characters as whitespace to the
-  next column.
-
-  Note that this widget does not support scrollbars, or per-character
-  color control.
-
-  If you are presenting large amounts of read-only text 
-  and need scrollbars, or full color control of characters,
-  then use Fl_Text_Display. If you want to display HTML text,
-  use Fl_Help_View.
-*/
-class FL_EXPORT Fl_Multiline_Output : public Fl_Output {
-public:
-
-  /**
-    Creates a new Fl_Multiline_Output widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-  Fl_Multiline_Output(int X,int Y,int W,int H,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Native_File_Chooser.H
+++ /dev/null
@@ -1,348 +1,0 @@
-//
-// "$Id$"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2014 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Native_File_Chooser widget. */
-
-#ifndef FL_NATIVE_FILE_CHOOSER_H
-#define FL_NATIVE_FILE_CHOOSER_H
-
-// Use Windows' chooser
-#ifdef WIN32
-// #define _WIN32_WINNT	0x0501	// needed for OPENFILENAME's 'FlagsEx'
-#if defined(FL_LIBRARY) || FLTK_ABI_VERSION < 10304
-#  include <windows.h>
-#  include <commdlg.h>		// OPENFILENAMEW, GetOpenFileName()
-#  include <shlobj.h>		// BROWSEINFOW, SHBrowseForFolder()
-typedef OPENFILENAMEW fl_OPENFILENAMEW;
-typedef BROWSEINFOW fl_BROWSEINFOW;
-#else
-typedef void fl_OPENFILENAMEW;
-typedef void fl_BROWSEINFOW;
-#endif
-#endif
-
-// Use Apple's chooser
-#ifdef __APPLE__
-#  define MAXFILTERS	80
-#endif
-
-// All else falls back to FLTK's own chooser
-#if ! defined(__APPLE__) && !defined(WIN32)
-#  include <FL/Fl_File_Chooser.H>
-#else
-#  include <FL/filename.H>	// FL_EXPORT
-#endif
-
-class Fl_FLTK_File_Chooser;
-class Fl_GTK_File_Chooser;
-
-/**
- This class lets an FLTK application easily and consistently access 
- the operating system's native file chooser. Some operating systems 
- have very complex and specific file choosers that many users want 
- access to specifically, instead of FLTK's default file chooser(s). 
- 
- In cases where there is no native file browser, FLTK's own file browser
- is used instead.
- 
- To use this widget, use the following include in your code:
- \code
- #include <FL/Fl_Native_File_Chooser.H>
- \endcode
- 
- The following example shows how to pick a single file:
- \code
- // Create and post the local native file chooser
- #include <FL/Fl_Native_File_Chooser.H>
- [..]
- Fl_Native_File_Chooser fnfc;
- fnfc.title("Pick a file");
- fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
- fnfc.filter("Text\t*.txt\n"
-             "C Files\t*.{cxx,h,c}");
- fnfc.directory("/var/tmp");           // default directory to use
- // Show native chooser
- switch ( fnfc.show() ) {
-   case -1: printf("ERROR: %s\n", fnfc.errmsg());    break;  // ERROR
-   case  1: printf("CANCEL\n");                      break;  // CANCEL
-   default: printf("PICKED: %s\n", fnfc.filename()); break;  // FILE CHOSEN
- }
- \endcode
- 
- The Fl_Native_File_Chooser widget transmits UTF-8 encoded filenames to its user. It is
- recommended to open files that may have non-ASCII names with the fl_fopen() or
- fl_open() utility functions that handle these names in a cross-platform way 
- (whereas the standard fopen()/open() functions fail on the MSWindows platform 
- to open files with a non-ASCII name).
- 
- <B>Platform Specific Caveats</B>
- 
- - Under X windows, and if Fl::OPTION_FNFC_USES_GTK has not been switched off,
- the widget attempts to use standard GTK file chooser dialogs if they are
- available at run-time on the platform, and falls back to use FLTK's Fl_File_Chooser if they are not.
- In the latter case, it's best if you call Fl_File_Icon::load_system_icons()
- at the start of main(), to enable the nicer looking file browser widgets.
- Use the static public attributes of class Fl_File_Chooser to localize
- the browser.
- - Some operating systems support certain OS specific options; see 
- Fl_Native_File_Chooser::options() for a list.
- 
- \image html Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms."
- \image latex Fl_Native_File_Chooser.png "The Fl_Native_File_Chooser on different platforms" width=14cm
- 
- */
-class FL_EXPORT Fl_Native_File_Chooser {
-public:
-  enum Type {
-    BROWSE_FILE = 0,			///< browse files (lets user choose one file)
-    BROWSE_DIRECTORY,			///< browse directories (lets user choose one directory)
-    BROWSE_MULTI_FILE,			///< browse files (lets user choose multiple files)
-    BROWSE_MULTI_DIRECTORY,		///< browse directories (lets user choose multiple directories)
-    BROWSE_SAVE_FILE,			///< browse to save a file
-    BROWSE_SAVE_DIRECTORY		///< browse to save a directory
-  };
-  enum Option {
-    NO_OPTIONS     = 0x0000,		///< no options enabled
-    SAVEAS_CONFIRM = 0x0001,		///< Show native 'Save As' overwrite confirm dialog
-    NEW_FOLDER     = 0x0002,		///< Show 'New Folder' icon (if supported)
-    PREVIEW        = 0x0004,		///< enable preview mode (if supported)
-    USE_FILTER_EXT = 0x0008		///< Chooser filter pilots the output file extension (if supported)
-  };
-  /** Localizable message */
-  static const char *file_exists_message;
-  
-public:
-  Fl_Native_File_Chooser(int val=BROWSE_FILE);
-  ~Fl_Native_File_Chooser();
-  
-  // Public methods
-  void type(int t);
-  int type() const ;
-  void options(int o);
-  int options() const;
-  int count() const;
-  const char *filename() const ;
-  const char *filename(int i) const ;
-  void directory(const char *val) ;
-  const char *directory() const;
-  void title(const char *t);
-  const char* title() const;
-  const char *filter() const ;
-  void filter(const char *f);
-  int filters() const ;
-  void filter_value(int i) ;
-  int filter_value() const ;
-  void preset_file(const char*f) ;
-  const char* preset_file() const;
-  const char *errmsg() const ;
-  int show() ;
-  
-#ifdef WIN32
-private:
-  int  _btype;			// kind-of browser to show()
-  int  _options;		// general options
-#if FLTK_ABI_VERSION >= 10304
-  fl_OPENFILENAMEW *_ofn_ptr;	// GetOpenFileName() & GetSaveFileName() struct
-  fl_BROWSEINFOW   *_binf_ptr;	// SHBrowseForFolder() struct
-  WCHAR            *_wpattern;	// pattern buffer for filter
-#else
-  fl_OPENFILENAMEW _ofn;
-  fl_BROWSEINFOW   _binf;
-#endif
-  char  **_pathnames;		// array of pathnames
-  int     _tpathnames;		// total pathnames
-  char   *_directory;		// default pathname to use
-  char   *_title;		// title for window
-  char   *_filter;		// user-side search filter
-  char   *_parsedfilt;		// filter parsed for Windows dialog
-  int     _nfilters;		// number of filters parse_filter counted
-  char   *_preset_file;		// the file to preselect
-  char   *_errmsg;		// error message
-  
-  // Private methods
-  void errmsg(const char *msg);
-  
-  void clear_pathnames();
-  void set_single_pathname(const char *s);
-  void add_pathname(const char *s);
-  
-  void ClearOFN();
-  void ClearBINF();
-  void Win2Unix(char *s);
-  void Unix2Win(char *s);
-  int showfile();
-  int showdir();
-  
-  void parse_filter(const char *);
-  void clear_filters();
-  void add_filter(const char *, const char *);
-#endif
-
-#ifdef __APPLE__
-private:
-  int             _btype;		// kind-of browser to show()
-  int             _options;		// general options
-  void 	         *_panel;
-  char          **_pathnames;		// array of pathnames
-  int             _tpathnames;	        // total pathnames
-  char           *_directory;		// default pathname to use
-  char           *_title;		// title for window
-  char           *_preset_file;	        // the 'save as' filename
-  
-  char           *_filter;		// user-side search filter, eg:
-  // C Files\t*.[ch]\nText Files\t*.txt"
-  
-  char           *_filt_names;		// filter names (tab delimited)
-  // eg. "C Files\tText Files"
-  
-  char           *_filt_patt[MAXFILTERS];
-  // array of filter patterns, eg:
-  //     _filt_patt[0]="*.{cxx,h}"
-  //     _filt_patt[1]="*.txt"
-  
-  int             _filt_total;		// parse_filter() # of filters loaded
-  int             _filt_value;		// index of the selected filter
-  char           *_errmsg;		// error message
-  
-  // Private methods
-  void errmsg(const char *msg);
-  void clear_pathnames();
-  void set_single_pathname(const char *s);
-  int get_saveas_basename(void);
-  void clear_filters();
-  void add_filter(const char *, const char *);
-  void parse_filter(const char *from);
-  int post();
-  int runmodal();
-#endif
-
-#if ! defined(__APPLE__) && !defined(WIN32)
-private:
-#if FLTK_ABI_VERSION <= 10302
-  int   _btype;			// kind-of browser to show()
-  int   _options;		// general options
-  int   _nfilters;
-  char *_filter;		// user supplied filter
-  char *_parsedfilt;		// parsed filter
-  int   _filtvalue;		// selected filter
-  char *_preset_file;
-  char *_prevvalue;		// Returned filename
-  char *_directory;
-  char *_errmsg;		// error message
-#endif
-  static int have_looked_for_GTK_libs;
-  union {
-    Fl_FLTK_File_Chooser *_x11_file_chooser;
-    Fl_GTK_File_Chooser *_gtk_file_chooser;
-  };
-#endif
-};
-
-#if !defined(__APPLE__) && !defined(WIN32)
-class FL_EXPORT Fl_FLTK_File_Chooser {
-  friend class Fl_Native_File_Chooser;
-protected:
-  int   _btype;			// kind-of browser to show()
-  int   _options;		// general options
-  int   _nfilters;
-  char *_filter;		// user supplied filter
-  char *_parsedfilt;		// parsed filter
-  int   _filtvalue;		// selected filter
-  char *_preset_file;
-  char *_prevvalue;		// Returned filename
-  char *_directory;
-  char *_errmsg;		// error message
-  Fl_FLTK_File_Chooser(int val);
-  virtual ~Fl_FLTK_File_Chooser();
-  void errmsg(const char *msg);
-  int type_fl_file(int);
-  void parse_filter();
-  int exist_dialog();
-  Fl_File_Chooser *_file_chooser;
-  virtual void type(int);
-  int type() const;
-  void options(int);
-  int options() const;
-  virtual int count() const;
-  virtual const char *filename() const;
-  virtual const char *filename(int i) const;
-  void directory(const char *val);
-  const char *directory() const;
-  virtual void title(const char *);
-  virtual const char* title() const;
-  const char *filter() const;
-  void filter(const char *);
-  int filters() const;
-  void filter_value(int i);
-  int filter_value() const;
-  void preset_file(const char*);
-  const char* preset_file() const;
-  const char *errmsg() const;
-  virtual int show();
-};
-
-
-class FL_EXPORT Fl_GTK_File_Chooser : public Fl_FLTK_File_Chooser {
-  friend class Fl_Native_File_Chooser;
-private:
-  typedef struct _GtkWidget GtkWidget;
-  typedef struct _GtkFileFilterInfo GtkFileFilterInfo;
-  struct pair {
-    Fl_GTK_File_Chooser* running; // the running Fl_GTK_File_Chooser
-    const char *filter; // a filter string of the chooser
-    pair(Fl_GTK_File_Chooser* c, const char *f) {
-      running = c; 
-      filter = strdup(f);
-    };
-    ~pair() {
-      free((char*)filter);
-    };
-  };
-  GtkWidget *gtkw_ptr; // used to hold a GtkWidget* without pulling GTK into everything...
-  void *gtkw_slist; // used to hold a GLib GSList...
-  unsigned gtkw_count; // number of files read back - if any
-  mutable char *gtkw_filename; // last name we read back
-  char *gtkw_title; // the title to be applied to the dialog
-  const char *previous_filter;
-  
-  int fl_gtk_chooser_wrapper(); // method that wraps the GTK widget
-  Fl_GTK_File_Chooser(int val);
-  virtual ~Fl_GTK_File_Chooser();
-  static int did_find_GTK_libs;
-  static void probe_for_GTK_libs(void);
-  virtual void type(int);
-  virtual int count() const;
-  virtual const char *filename() const;
-  virtual const char *filename(int i) const;
-  virtual void title(const char *);
-  virtual const char* title() const;
-  virtual int show();
-  void changed_output_type(const char *filter);
-  
-  static int custom_gtk_filter_function(const GtkFileFilterInfo*, Fl_GTK_File_Chooser::pair*);
-  static void free_pair(pair *p);
-};
-#endif // !defined(__APPLE__) && !defined(WIN32)
-
-#endif /*FL_NATIVE_FILE_CHOOSER_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Nice_Slider.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// "Nice" slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Nice_Slider widget . */
-
-#ifndef Fl_Nice_Slider_H
-#define Fl_Nice_Slider_H
-
-#include "Fl_Slider.H"
-
-class FL_EXPORT Fl_Nice_Slider : public Fl_Slider {
-public:
-  Fl_Nice_Slider(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Object.H
+++ /dev/null
@@ -1,27 +1,0 @@
-//
-// "$Id$"
-//
-// Old Fl_Object header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file is provided for back compatibility only.  Please use Fl_Widget
-#ifndef Fl_Object
-#define Fl_Object Fl_Widget
-#endif
-#include "Fl_Widget.H"
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Output.H
+++ /dev/null
@@ -1,63 +1,0 @@
-//
-// "$Id$"
-//
-// Output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Output widget . */
-
-#ifndef Fl_Output_H
-#define Fl_Output_H
-
-#include "Fl_Input.H"
-/**
-  This widget displays a piece of text.
-  
-  When you set the value() , Fl_Output does a strcpy() to its own storage,
-  which is useful for program-generated values.  The user may select
-  portions of the text using the mouse and paste the contents into other
-  fields or programs.
-
-  <P align=CENTER>\image html text.png</P>
-  \image latex text.png "Fl_Output" width=8cm
-
-  There is a single subclass, Fl_Multiline_Output, which allows you to
-  display multiple lines of text. Fl_Multiline_Output does not provide
-  scroll bars. If a more complete text editing widget is needed, use
-  Fl_Text_Display instead.
-
-  The text may contain any characters except \\0, and will correctly
-  display anything, using ^X notation for unprintable control characters
-  and \\nnn notation for unprintable characters with the high bit set. It
-  assumes the font can draw any characters in the ISO-Latin1 character set.
-*/
-class FL_EXPORT Fl_Output : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Output widget using the given position,
-    size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-
-    Fl_Output(int X,int Y,int W,int H, const char *l = 0);
-};
-
-#endif 
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Overlay_Window.H
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-// Overlay window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Overlay_Window class . */
-
-#ifndef Fl_Overlay_Window_H
-#define Fl_Overlay_Window_H
-
-#include "Fl_Double_Window.H"
-
-/**
-  This window provides double buffering and also the ability to draw the
-  "overlay" which is another picture placed on top of the main image. The
-  overlay is designed to be a rapidly-changing but simple graphic such as
-  a mouse selection box. Fl_Overlay_Window uses the overlay
-  planes provided by your graphics hardware if they are available.
-  <P>If no hardware support is found the overlay is simulated by drawing
-  directly into the on-screen copy of the double-buffered window, and
-  "erased" by copying the backbuffer over it again.  This means the
-  overlay will blink if you change the image in the window.
-*/
-class FL_EXPORT Fl_Overlay_Window : public Fl_Double_Window {
-#ifndef FL_DOXYGEN
-  friend class _Fl_Overlay;
-#endif
-protected:
-  /**
-   You must subclass Fl_Overlay_Window and provide this method.
-   It is just like a draw() method, except it draws the overlay.
-   The overlay will have already been "cleared" when this is called.  You
-   can use any of the routines described in &lt;FL/fl_draw.H&gt;.
-   */
-  virtual void draw_overlay() = 0;
-private:
-  Fl_Window *overlay_;
-public:
-  void show();
-  void flush();
-  void hide();
-  void resize(int,int,int,int);
-  ~Fl_Overlay_Window();
-  /** Returns non-zero if there's hardware overlay support */
-  int can_do_overlay();
-  void redraw_overlay();
-protected:
-  /**
-   See Fl_Overlay_Window::Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0)
-   */
-  Fl_Overlay_Window(int W, int H, const char *l=0);
-  /**
-   Creates a new Fl_Overlay_Window widget using the given
-   position, size, and label (title) string. If the 
-   positions (x,y) are not given, then the window manager
-   will choose them.
-   */
-  Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0);
-public:
-  void show(int a, char **b) {Fl_Double_Window::show(a,b);}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_PNG_Image.H
+++ /dev/null
@@ -1,46 +1,0 @@
-//
-// "$Id$"
-//
-// PNG image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_PNG_Image class . */
-
-#ifndef Fl_PNG_Image_H
-#define Fl_PNG_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_PNG_Image class supports loading, caching,
-  and drawing of Portable Network Graphics (PNG) image files. The
-  class loads colormapped and full-color images and handles color-
-  and alpha-based transparency.
-*/
-class FL_EXPORT Fl_PNG_Image : public Fl_RGB_Image {
-
-public:
-
-  Fl_PNG_Image(const char* filename);
-  Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int datasize);
-private:
-  void load_png_(const char *name_png, const unsigned char *buffer_png, int datasize);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_PNM_Image.H
+++ /dev/null
@@ -1,43 +1,0 @@
-//
-// "$Id$"
-//
-// PNM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_PNM_Image class . */
-
-#ifndef Fl_PNM_Image_H
-#define Fl_PNM_Image_H
-#  include "Fl_Image.H"
-
-/**
-  The Fl_PNM_Image class supports loading, caching,
-  and drawing of Portable Anymap (PNM, PBM, PGM, PPM) image files. The class
-  loads bitmap, grayscale, and full-color images in both ASCII and
-  binary formats.
-*/
-class FL_EXPORT Fl_PNM_Image : public Fl_RGB_Image {
-
-  public:
-
-  Fl_PNM_Image(const char* filename);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Pack.H
+++ /dev/null
@@ -1,75 +1,0 @@
-//
-// "$Id$"
-//
-// Pack header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Pack widget . */
-
-#ifndef Fl_Pack_H
-#define Fl_Pack_H
-
-#include <FL/Fl_Group.H>
-
-/**
-  This widget was designed to add the functionality of compressing and
-  aligning widgets.
-  <P>If type() is Fl_Pack::HORIZONTAL all the children are
-  resized to the height of the Fl_Pack, and are moved next to
-  each other horizontally. If type() is not Fl_Pack::HORIZONTAL
-  then the children are resized to the width and are stacked below each
-  other.  Then the Fl_Pack resizes itself to surround the child
-  widgets.
-  <P>This widget is needed for the Fl_Tabs.
-  In addition you may want to put the Fl_Pack inside an 
-  Fl_Scroll.
-
-  <P>The resizable for Fl_Pack is set to NULL by default.</p>
-  <P>See also: Fl_Group::resizable()
-*/
-class FL_EXPORT Fl_Pack : public Fl_Group {
-  int spacing_;
-
-public:
-  enum { // values for type(int)
-    VERTICAL = 0,
-    HORIZONTAL = 1
-  };
-
-protected:
-  void draw();
-
-public:
-  Fl_Pack(int x,int y,int w ,int h,const char *l = 0);
-  /**
-    Gets the number of extra pixels of blank space that are added
-    between the children.
-  */
-  int spacing() const {return spacing_;}
-  /**
-    Sets the number of extra pixels of blank space that are added
-    between the children.
-  */
-  void spacing(int i) {spacing_ = i;}
-  /** Same as Fl_Group::type() */
-  uchar horizontal() const {return type();}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Paged_Device.H
+++ /dev/null
@@ -1,155 +1,0 @@
-//
-// "$Id$"
-//
-// Printing support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file Fl_Paged_Device.H 
- \brief declaration of class Fl_Paged_Device.
- */
-
-#ifndef Fl_Paged_Device_H
-#define Fl_Paged_Device_H
-
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Window.H>
-
-/** \brief Number of elements in enum Page_Format */
-#define NO_PAGE_FORMATS 30 /* MSVC6 compilation fix */
-
-/**
- \brief Represents page-structured drawing surfaces.
- *
- This class has no public constructor: don't instantiate it; use Fl_Printer 
- or Fl_PostScript_File_Device instead.
- */
-class FL_EXPORT Fl_Paged_Device : public Fl_Surface_Device {
-#ifndef __APPLE__
-  friend class Fl_Copy_Surface;
-  friend class Fl_Image_Surface;
-  void draw_decorated_window(Fl_Window *win, int x_offset, int y_offset, Fl_Surface_Device *toset);
-#endif
-public:
-  /**
-   \brief Possible page formats.
-   
-   All paper formats with pre-defined width and height.
-   */
-  enum Page_Format {
-    A0 = 0, /**<  A0 format */
-    A1,
-    A2,
-    A3,
-    A4, /**<  A4 format */
-    A5,
-    A6,
-    A7,
-    A8,
-    A9,
-    B0,
-    B1,
-    B2,
-    B3,
-    B4,
-    B5,
-    B6,
-    B7,
-    B8,
-    B9,
-    B10,
-    C5E,
-    DLE,
-    EXECUTIVE,
-    FOLIO,
-    LEDGER,
-    LEGAL,
-    LETTER, /**<  Letter format */
-    TABLOID,
-    ENVELOPE,
-    MEDIA = 0x1000
-  };
-  /**
-   \brief Possible page layouts.
-   */
-  enum Page_Layout {
-    PORTRAIT = 0,  /**< Portrait orientation */
-    LANDSCAPE = 0x100,   /**< Landscape orientation */
-    REVERSED = 0x200,  /**< Reversed orientation */
-    ORIENTATION = 0x300 /**<  orientation */
-  };
-
-  /** \brief width, height and name of a page format
- */
-  typedef struct {
-    /** \brief width in points */
-    int width; 
-    /** \brief height in points */
-    int height; 
-    /** \brief format name */
-    const char *name; 
-  } page_format;
-  /** \brief width, height and name of all elements of the enum \ref Page_Format.
-   */
-  static const page_format page_formats[NO_PAGE_FORMATS];  
-private:
-  void traverse(Fl_Widget *widget); // finds subwindows of widget and prints them
-protected:
-  /** \brief horizontal offset to the origin of graphics coordinates */
-  int x_offset;
-  /** \brief vertical offset to the origin of graphics coordinates */
-  int y_offset;
-  /** \brief The constructor */
-  Fl_Paged_Device() : Fl_Surface_Device(NULL), x_offset(0), y_offset(0) {};
-#if FLTK_ABI_VERSION >= 10301
-public:
-  /** \brief The destructor */
-  virtual ~Fl_Paged_Device() {};
-#else
-  /** \brief The destructor */
-  virtual ~Fl_Paged_Device() {};
-public:
-#endif // FLTK_ABI_VERSION
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  virtual int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  virtual int start_page(void);
-  virtual int printable_rect(int *w, int *h);
-  virtual void margins(int *left, int *top, int *right, int *bottom);
-  virtual void origin(int x, int y);
-  virtual void origin(int *x, int *y);
-  virtual void scale(float scale_x, float scale_y = 0.);
-  virtual void rotate(float angle);
-  virtual void translate(int x, int y);
-  virtual void untranslate(void);
-  virtual void print_widget(Fl_Widget* widget, int delta_x = 0, int delta_y = 0);
-  /** Prints a window with its title bar and frame if any.
-   
-   \p x_offset and \p y_offset are optional coordinates of where to position the window top left.
-   Equivalent to print_widget() if \p win is a subwindow or has no border.
-   Use Fl_Window::decorated_w() and Fl_Window::decorated_h() to get the size of the
-   printed window.
-   */
-  void print_window(Fl_Window *win, int x_offset = 0, int y_offset = 0);
-  virtual void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x = 0, int delta_y = 0);
-  virtual int end_page (void);
-  virtual void end_job (void);
-};
-
-#endif // Fl_Paged_Device_H
-
-//
-// End of "$Id$"
-//
-
--- a/DoConfig/fltk/FL/Fl_Pixmap.H
+++ /dev/null
@@ -1,102 +1,0 @@
-//
-// "$Id$"
-//
-// Pixmap header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Pixmap widget . */
-
-#ifndef Fl_Pixmap_H
-#define Fl_Pixmap_H
-#  include "Fl_Image.H"
-#if defined(WIN32)
-#  include "x.H"
-#endif
-
-class Fl_Widget;
-struct Fl_Menu_Item;
-
-// Older C++ compilers don't support the explicit keyword... :(
-#  if defined(__sgi) && !defined(_COMPILER_VERSION)
-#    define explicit
-#  endif // __sgi && !_COMPILER_VERSION
-
-/**
-  The Fl_Pixmap class supports caching and drawing of colormap
-  (pixmap) images, including transparency.
-*/
-class FL_EXPORT Fl_Pixmap : public Fl_Image {
-  friend class Fl_Quartz_Graphics_Driver;
-  friend class Fl_GDI_Graphics_Driver;
-  friend class Fl_GDI_Printer_Graphics_Driver;
-  friend class Fl_Xlib_Graphics_Driver;
-  void copy_data();
-  void delete_data();
-  void set_data(const char * const *p);
-  int prepare(int XP, int YP, int WP, int HP, int &cx, int &cy,
-			 int &X, int &Y, int &W, int &H);
-
-  protected:
-
-  void measure();
-
-  public:
-
-  int alloc_data; // Non-zero if data was allocated
-  
-  private:
-
-#if defined(WIN32)
-#if FLTK_ABI_VERSION < 10301
-  static // a static member is needed for ABI compatibility
-#endif
-  UINT pixmap_bg_color; // RGB color used for pixmap background
-#endif // WIN32
-#if defined(__APPLE__) || defined(WIN32)
-  void *id_; // for internal use
-  void *mask_; // for internal use (mask bitmap)
-#else
-  unsigned id_; // for internal use
-  unsigned mask_; // for internal use (mask bitmap)
-#endif // __APPLE__ || WIN32
-  
-  public:
-
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(const char * const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  /**    The constructors create a new pixmap from the specified XPM data.  */
-  explicit Fl_Pixmap(const uchar* const * D) : Fl_Image(-1,0,1), alloc_data(0), id_(0), mask_(0) {set_data((const char*const*)D); measure();}
-  virtual ~Fl_Pixmap();
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx=0, int cy=0);
-  void draw(int X, int Y) {draw(X, Y, w(), h(), 0, 0);}
-  virtual void label(Fl_Widget*w);
-  virtual void label(Fl_Menu_Item*m);
-  virtual void uncache();
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Plugin.H
+++ /dev/null
@@ -1,95 +1,0 @@
-//
-// "$Id: Fl_Plugin.H 6995 2010-01-12 08:48:55Z matt $"
-//
-// A Plugin system for FLTK, implemented in Fl_Preferences.cxx.
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Plugin class . */
-
-#ifndef Fl_Plugin_H
-#  define Fl_Plugin_H
-
-#  include "Fl_Preferences.H"
-
-
-/**
- \brief Fl_Plugin allows link-time and run-time integration of binary modules.
- 
- Fl_Plugin and Fl_Plugin_Manager provide a small and simple solution for
- linking C++ classes at run-time, or optionally linking modules at compile
- time without the need to change the main application.
-
- Fl_Plugin_Manager uses static initialisation to create the plugin interface
- early during startup. Plugins are stored in a temporary database, organized
- in classes.
- 
- Plugins should derive a new class from Fl_Plugin as a base:
- \code
- class My_Plugin : public Fl_Plugin {
- public:
-   My_Plugin() : Fl_Plugin("effects", "blur") { }
-   void do_something(...);
- };
- My_Plugin blur_plugin();
- \endcode
- 
- Plugins can be put into modules and either linked before distribution, or loaded
- from dynamically linkable files. An Fl_Plugin_Manager is used to list and 
- access all currently loaded plugins.
- \code
- Fl_Plugin_Manager mgr("effects");
- int i, n = mgr.plugins();
- for (i=0; i<n; i++) {
-   My_Plugin *pin = (My_Plugin*)mgr.plugin(i);
-   pin->do_something();
- }
- \endcode
- */
-class FL_EXPORT Fl_Plugin  {
-  Fl_Preferences::ID id;
-public:
-  Fl_Plugin(const char *klass, const char *name);
-  virtual ~Fl_Plugin();
-};
-
-
-/**
- \brief Fl_Plugin_Manager manages link-time and run-time plugin binaries.
- \see Fl_Plugin
- */
-class FL_EXPORT Fl_Plugin_Manager : public Fl_Preferences {
-public:
-  Fl_Plugin_Manager(const char *klass);
-  ~Fl_Plugin_Manager();
-  
-  /** \brief Return the number of plugins in the klass.
-   */
-  int plugins() { return groups(); }
-  Fl_Plugin *plugin(int index);
-  Fl_Plugin *plugin(const char *name);
-  Fl_Preferences::ID addPlugin(const char *name, Fl_Plugin *plugin);
-  
-  static void removePlugin(Fl_Preferences::ID id);
-  static int load(const char *filename);
-  static int loadAll(const char *filepath, const char *pattern=0);
-};
-
-
-#endif // !Fl_Preferences_H
-
-//
-// End of "$Id: Fl_Preferences.H 6995 2010-01-12 08:48:55Z matt $".
-//
--- a/DoConfig/fltk/FL/Fl_Positioner.H
+++ /dev/null
@@ -1,94 +1,0 @@
-//
-// "$Id$"
-//
-// Positioner header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Positioner widget . */
-
-#ifndef Fl_Positioner_H
-#define Fl_Positioner_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-/**
-  This class is provided for Forms compatibility.  It provides 2D input.
-  It would be useful if this could be put atop another widget so that the
-  crosshairs are on top, but this is not implemented.  The color of the
-  crosshairs is selection_color().
-  <P ALIGN=CENTER>\image html  positioner.png </P> 
-  \image latex  positioner.png " Fl_Positioner" width=4cm
-*/
-class FL_EXPORT Fl_Positioner : public Fl_Widget {
-
-  double xmin, ymin;
-  double xmax, ymax;
-  double xvalue_, yvalue_;
-  double xstep_, ystep_;
-
-protected:
-
-  // these allow subclasses to put the dial in a smaller area:
-  void draw(int, int, int, int);
-  int handle(int, int, int, int, int);
-  void draw();
-
-public:
-
-  int handle(int);
-  /**
-    Creates a new Fl_Positioner widget using the given position,
-    size, and label string. The default boxtype is FL_NO_BOX.
-  */
-  Fl_Positioner(int x,int y,int w,int h, const char *l=0);
-  /** Gets the X axis coordinate.*/
-  double xvalue() const {return xvalue_;}
-  /** Gets the Y axis coordinate.*/
-  double yvalue() const {return yvalue_;}
-  int xvalue(double);
-  int yvalue(double);
-  int value(double,double);
-  void xbounds(double, double);
-  /** Gets the X axis minimum */
-  double xminimum() const {return xmin;}
-  /** Same as xbounds(a, xmaximum()) */
-  void xminimum(double a) {xbounds(a,xmax);}
-  /** Gets the X axis maximum */
-  double xmaximum() const {return xmax;}
-  /** Same as xbounds(xminimum(), a) */
-  void xmaximum(double a) {xbounds(xmin,a);}
-  void ybounds(double, double);
-  /** Gets the Y axis minimum */
-  double yminimum() const {return ymin;}
-  /** Same as ybounds(a, ymaximum()) */
-  void yminimum(double a) {ybounds(a, ymax);}
-  /** Gets the Y axis maximum */
-  double ymaximum() const {return ymax;}
-  /** Same as ybounds(ymininimum(), a) */
-  void ymaximum(double a) {ybounds(ymin, a);}
-  /** Sets the stepping value for the X axis.*/
-  void xstep(double a) {xstep_ = a;}
-  /** Sets the stepping value for the Y axis.*/
-  void ystep(double a) {ystep_ = a;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_PostScript.H
+++ /dev/null
@@ -1,264 +1,0 @@
-//
-// "$Id$"
-//
-// Support for graphics output to PostScript file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file Fl_PostScript.H 
- \brief declaration of classes Fl_PostScript_Graphics_Driver, Fl_PostScript_File_Device.
- */
-
-#ifndef Fl_PostScript_H
-#define Fl_PostScript_H
-
-#include <FL/Fl_Paged_Device.H>
-#include <FL/fl_draw.H>
-#include <stdarg.h>
-
-/* Signature of Fl_PostScript::close_command() functions passed as parameters. */
-extern "C" {
-  typedef int (Fl_PostScript_Close_Command)(FILE *);
-}
-
-/**
- \brief PostScript graphical backend.
- *
- PostScript text uses vectorial fonts when using the FLTK standard fonts  
- and the latin alphabet or a few other characters listed in the following table.
- The latin alphabet means all unicode characters between U+0020 and U+017F, or, in other words, 
- the ASCII, Latin-1 Supplement and Latin Extended-A charts.
- <table>
- <tr> <th>Char</th><th>Codepoint</th><th>Name</th>  <th>Char</th><th>Codepoint</th><th>Name</th> <th>Char</th><th>Codepoint</th><th>Name</th></tr>
- <tr><td>ƒ</td><td>U+0192</td><td>florin</td><td>‚</td><td>U+201A</td><td>quotesinglbase</td><td>™</td><td>U+2122</td><td>trademark</td></tr>
- <tr><td>ˆ</td><td>U+02C6</td><td>circumflex</td><td>“</td><td>U+201C</td><td>quotedblleft</td><td>∂</td><td>U+2202</td><td>partialdiff</td></tr>
- <tr><td>ˇ</td><td>U+02C7</td><td>caron</td><td>”</td><td>U+201D</td><td>quotedblright</td><td>Δ</td><td>U+2206</td><td>Delta</td></tr>
- <tr><td>˘</td><td>U+02D8</td><td>breve</td><td>„</td><td>U+201E</td><td>quotedblbase</td><td>∑</td><td>U+2211</td><td>summation</td></tr>
- <tr><td>˙</td><td>U+02D9</td><td>dotaccent</td><td>†</td><td>U+2020</td><td>dagger</td><td>√</td><td>U+221A</td><td>radical</td></tr>
- <tr><td>˚</td><td>U+02DA</td><td>ring</td><td>‡</td><td>U+2021</td><td>daggerdbl</td><td>∞</td><td>U+221E</td><td>infinity</td></tr>
- <tr><td>˛</td><td>U+02DB</td><td>ogonek</td><td>•</td><td>U+2022</td><td>bullet</td><td>≠</td><td>U+2260</td><td>notequal</td></tr>
- <tr><td>˜</td><td>U+02DC</td><td>tilde</td><td>…</td><td>U+2026</td><td>ellipsis</td><td>≤</td><td>U+2264</td><td>lessequal</td></tr>
- <tr><td>˝</td><td>U+02DD</td><td>hungarumlaut</td><td>‰</td><td>U+2030</td><td>perthousand</td><td>≥</td><td>U+2265</td><td>greaterequal</td></tr>
- <tr><td>–</td><td>U+2013</td><td>endash</td><td>‹</td><td>U+2039</td><td>guilsinglleft</td><td>◊</td><td>U+25CA</td><td>lozenge</td></tr>
- <tr><td>—</td><td>U+2014</td><td>emdash</td><td>›</td><td>U+203A</td><td>guilsinglright</td><td>fi</td><td>U+FB01</td><td>fi</td></tr>
- <tr><td>‘</td><td>U+2018</td><td>quoteleft</td><td>/</td><td>U+2044</td><td>fraction</td><td>fl</td><td>U+FB02</td><td>fl</td></tr>
- <tr><td>’</td><td>U+2019</td><td>quoteright</td><td>€</td><td>U+20AC</td><td>Euro</td><td></td><td>U+F8FF</td><td>apple (Mac OS only)</td></tr>
- </table>
- <br> All other unicode characters or all other fonts (FL_FREE_FONT and above) are output as a bitmap.
- <br> FLTK standard fonts are output using the corresponding PostScript standard fonts.
- */
-class FL_EXPORT Fl_PostScript_Graphics_Driver : public Fl_Graphics_Driver {
-private:
-  void transformed_draw_extra(const char* str, int n, double x, double y, int w, bool rtl);
-  void *prepare_rle85();
-  void write_rle85(uchar b, void *data);
-  void close_rle85(void *data);
-  void *prepare85();
-  void write85(void *data, const uchar *p, int len);
-  void close85(void *data);
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_PostScript_Graphics_Driver();
-#ifndef FL_DOXYGEN
-  enum SHAPE{NONE=0, LINE, LOOP, POLYGON, POINTS};
-  
-class Clip {
-  public:
-    int x, y, w, h;
-    Clip *prev;
-  };
-  Clip * clip_;
-  
-  int lang_level_;
-  int gap_;
-  int pages_;
-  
-  double width_;
-  double height_;
-  
-  int shape_;
-  int linewidth_;// need for clipping, lang level 1-2
-  int linestyle_;//
-  int interpolate_; //interpolation of images
-  unsigned char cr_,cg_,cb_;
-  char  linedash_[256];//should be enough
-  void concat();  // transform ror scalable dradings...
-  void reconcat(); //invert
-  void recover(); //recovers the state after grestore (such as line styles...)
-  void reset();
-  
-  uchar * mask;
-  int mx; // width of mask;
-  int my; // mask lines
-  //Fl_Color bg_;
-  Fl_PostScript_Close_Command* close_cmd_;
-  int page_policy_;
-  int nPages;
-  int orientation_;
-  
-  float scale_x;
-  float scale_y;
-  float angle;
-  int left_margin;
-  int top_margin;
- 
-  FILE *output;
-  double pw_, ph_;
-  
-  uchar bg_r, bg_g, bg_b;
-  int start_postscript (int pagecount, enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout);
-  /*  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
-   */
-  void transformed_draw(const char* s, int n, double x, double y); //precise text placing
-  void transformed_draw(const char* s, double x, double y);
-  int alpha_mask(const uchar * data, int w, int h, int D, int LD=0);
-  
-  enum Fl_Paged_Device::Page_Format page_format_;
-  char *ps_filename_;
- 
-  void page_policy(int p);
-  int page_policy(){return page_policy_;};
-  void close_command(Fl_PostScript_Close_Command* cmd){close_cmd_=cmd;};
-  FILE * file() {return output;};
-  //void orientation (int o);
-  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int pages = 0); // ps (also multi-page) constructor
-  //Fl_PostScript_Graphics_Driver(FILE *o, int lang_level, int x, int y, int w, int h); //eps constructor
-  void interpolate(int i){interpolate_=i;};
-  int interpolate(){return interpolate_;}
-  
-  void page(double pw, double ph, int media = 0);
-  void page(int format);
-#endif // FL_DOXYGEN
-  
-  // implementation of drawing methods
-  void color(Fl_Color c);
-  void color(uchar r, uchar g, uchar b);
-  
-  void push_clip(int x, int y, int w, int h);
-  int clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H);
-  int not_clipped(int x, int y, int w, int h);
-  void push_no_clip();
-  void pop_clip();
-  
-  void line_style(int style, int width=0, char* dashes=0);
-  
-  void rect(int x, int y, int w, int h);
-  void rectf(int x, int y, int w, int h);
-  
-  void xyline(int x, int y, int x1);
-  void xyline(int x, int y, int x1, int y2);
-  void xyline(int x, int y, int x1, int y2, int x3);
-  
-  void yxline(int x, int y, int y1);
-  void yxline(int x, int y, int y1, int x2);
-  void yxline(int x, int y, int y1, int x2, int y3);
-  
-  void line(int x1, int y1, int x2, int y2);
-  void line(int x1, int y1, int x2, int y2, int x3, int y3);  
-  
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2);
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
-  void point(int x, int y);
-  
-  void begin_points();
-  void begin_line();
-  void begin_loop();
-  void begin_polygon();
-  void vertex(double x, double y);
-  void curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3);
-  void circle(double x, double y, double r);
-  void arc(double x, double y, double r, double start, double a);
-  void arc(int x, int y, int w, int h, double a1, double a2);
-  void pie(int x, int y, int w, int h, double a1, double a2);
-  void end_points();
-  void end_line();
-  void end_loop();
-  void end_polygon();
-  void begin_complex_polygon(){begin_polygon();};
-  void gap(){gap_=1;};
-  void end_complex_polygon(){end_polygon();};
-  void transformed_vertex(double x, double y);
-    
-  void draw_image(const uchar* d, int x,int y,int w,int h, int delta=3, int ldelta=0);
-  void draw_image_mono(const uchar* d, int x,int y,int w,int h, int delta=1, int ld=0);
-  void draw_image(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=3);
-  void draw_image_mono(Fl_Draw_Image_Cb call, void* data, int x,int y, int w, int h, int delta=1);
-      
-  void draw(const char* s, int nBytes, int x, int y) {transformed_draw(s,nBytes,x,y); };
-#ifdef __APPLE__
-  void draw(const char* s, int nBytes, float x, float y) {transformed_draw(s,nBytes,x,y); };
-#endif
-  void draw(int angle, const char *str, int n, int x, int y);
-  void rtl_draw(const char* s, int n, int x, int y);
-  void font(int face, int size);
-  double width(const char *, int);
-  double width(unsigned int u);
-  void text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h);
-  int height();
-  int descent();
-  void draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy);
-  void draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy);
-  int draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP);
-  int clocale_printf(const char *format, ...);
-  ~Fl_PostScript_Graphics_Driver();
-};
-
-/**
- To send graphical output to a PostScript file.
- This class is used exactly as the Fl_Printer class except for the start_job() call,
- two variants of which are usable and allow to specify what page format and layout are desired.
- */
-class FL_EXPORT Fl_PostScript_File_Device : public Fl_Paged_Device {
-#ifdef __APPLE__
-  CGContextRef gc;
-#endif
-protected:
-  Fl_PostScript_Graphics_Driver *driver();
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_PostScript_File_Device();
-  ~Fl_PostScript_File_Device();
-  int start_job(int pagecount, int* from, int* to);
-  int start_job(int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4,
-		enum Fl_Paged_Device::Page_Layout layout = Fl_Paged_Device::PORTRAIT);
-  int start_job(FILE *ps_output, int pagecount, enum Fl_Paged_Device::Page_Format format = Fl_Paged_Device::A4, 
-		enum Fl_Paged_Device::Page_Layout layout = Fl_Paged_Device::PORTRAIT);
-  int start_page (void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale (float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);    
-  void end_job(void);
-#ifdef __APPLE__
-  void set_current() { fl_gc = gc; Fl_Paged_Device::set_current(); }
-#endif
-  
-  static const char *file_chooser_title; 
-};
-
-#endif // Fl_PostScript_H
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/FL/Fl_Preferences.H
+++ /dev/null
@@ -1,269 +1,0 @@
-//
-// "$Id$"
-//
-// Preferences .
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Preferences class . */
-
-#ifndef Fl_Preferences_H
-#  define Fl_Preferences_H
-
-#  include <stdio.h>
-#  include "Fl_Export.H" 
-
-/**
-   \brief Fl_Preferences provides methods to store user
-   settings between application starts.
-
-   It is similar to the
-   Registry on WIN32 and Preferences on MacOS, and provides a
-   simple configuration mechanism for UNIX.
-
-   Fl_Preferences uses a hierarchy to store data. It
-   bundles similar data into groups and manages entries into those
-   groups as name/value pairs.
-
-   Preferences are stored in text files that can be edited
-   manually. The file format is easy to read and relatively
-   forgiving. Preferences files are the same on all platforms. User
-   comments in preference files are preserved. Filenames are unique
-   for each application by using a vendor/application naming
-   scheme. The user must provide default values for all entries to
-   ensure proper operation should preferences be corrupted or not
-   yet exist.
-
-   Entries can be of any length. However, the size of each
-   preferences file should be kept small for performance
-   reasons. One application can have multiple preferences files.
-   Extensive binary data however should be stored in separate
-   files: see getUserdataPath().
-
-   \note Starting with FLTK 1.3, preference databases are expected to
-   be in UTF-8 encoding. Previous databases were stored in the
-   current character set or code page which renders them incompatible
-   for text entries using international characters.
- */
-class FL_EXPORT Fl_Preferences {
-
-public: 
-  /**
-     Define the scope of the preferences.
-   */
-  enum Root { 
-    SYSTEM=0,   ///< Preferences are used system-wide
-    USER        ///< Preferences apply only to the current user
-  };
-  
-  /**
-   Every Fl_Preferences-Group has a uniqe ID.
-   
-   ID's can be retrieved from an Fl_Preferences-Group and can then be used
-   to create more Fl_Preference references to the same data set, as long as the 
-   database remains open.
-   */
-  typedef void *ID;
-  
-  static const char *newUUID();
-
-  Fl_Preferences( Root root, const char *vendor, const char *application );
-  Fl_Preferences( const char *path, const char *vendor, const char *application );
-  Fl_Preferences( Fl_Preferences &parent, const char *group );
-  Fl_Preferences( Fl_Preferences *parent, const char *group );
-  Fl_Preferences( Fl_Preferences &parent, int groupIndex );
-  Fl_Preferences( Fl_Preferences *parent, int groupIndex );
-  Fl_Preferences(const Fl_Preferences&);
-  Fl_Preferences( ID id );
-  virtual ~Fl_Preferences();
-  
-  /** Return an ID that can later be reused to open more references to this dataset.
-   */
-  ID id() { return (ID)node; }
-  
-  /** Remove the group with this ID from a database.
-   */
-  static char remove(ID id_) { return ((Node*)id_)->remove(); }
-
-  /** Return the name of this entry.
-   */
-  const char *name() { return node->name(); }
-  
-  /** Return the full path to this entry.
-   */
-  const char *path() { return node->path(); }
-  
-  int groups();
-  const char *group( int num_group );
-  char groupExists( const char *key );
-  char deleteGroup( const char *group );
-  char deleteAllGroups();
-
-  int entries();
-  const char *entry( int index );
-  char entryExists( const char *key );
-  char deleteEntry( const char *entry );
-  char deleteAllEntries();
-  
-  char clear();
-
-  char set( const char *entry, int value );
-  char set( const char *entry, float value );
-  char set( const char *entry, float value, int precision );
-  char set( const char *entry, double value );
-  char set( const char *entry, double value, int precision );
-  char set( const char *entry, const char *value );
-  char set( const char *entry, const void *value, int size ); 
-  
-  char get( const char *entry, int &value, int defaultValue );
-  char get( const char *entry, float &value,  float defaultValue );
-  char get( const char *entry, double &value, double defaultValue );
-  char get( const char *entry, char *&value,  const char *defaultValue );
-  char get( const char *entry, char *value,   const char *defaultValue, int maxSize );
-  char get( const char *entry, void *&value,  const void *defaultValue, int defaultSize );
-  char get( const char *entry, void *value,   const void *defaultValue, int defaultSize, int maxSize );
-
-  int size( const char *entry );
-
-  char getUserdataPath( char *path, int pathlen );
-
-  void flush();
-
-  // char export( const char *filename, Type fileFormat );
-  // char import( const char *filename );
-  
-  /**
-     'Name' provides a simple method to create numerical or more complex
-     procedural names for entries and groups on the fly.
-     
-     Example: prefs.set(Fl_Preferences::Name("File%d",i),file[i]);.
-    
-     See test/preferences.cxx as a sample for writing arrays into preferences.
-
-     'Name' is actually implemented as a class inside Fl_Preferences. It casts
-     into const char* and gets automatically destroyed after the enclosing call
-     ends.
-   */
-  class FL_EXPORT Name {
-
-    char *data_;
-
-  public: 
-    Name( unsigned int n );
-    Name( const char *format, ... );
-
-    /**
-       Return the Name as a "C" string.
-       \internal
-     */
-    operator const char *() { return data_; }
-    ~Name();
-  };
-
-  /** \internal An entry associates a preference name to its corresponding value */
-  struct Entry {
-    char *name, *value;
-  };
-
-private: 
-  Fl_Preferences() : node(0), rootNode(0) { }
-  Fl_Preferences &operator=(const Fl_Preferences&);
-
-  static char nameBuffer[128];
-  static char uuidBuffer[40];
-  static Fl_Preferences *runtimePrefs;
-
-public:  // older Sun compilers need this (public definition of the following classes)
-  class RootNode;
-  
-  class FL_EXPORT Node {	// a node contains a list to all its entries 
-            			// and all means to manage the tree structure
-    Node *child_, *next_;
-    union { 			// these two are mutually exclusive
-      Node *parent_;   		// top_ bit clear
-      RootNode *root_; 		// top_ bit set
-    };
-    char *path_;
-    Entry *entry_;
-    int nEntry_, NEntry_;
-    unsigned char dirty_:1;
-    unsigned char top_:1;
-    unsigned char indexed_:1;
-    // indexing routines
-    Node **index_;
-    int nIndex_, NIndex_;
-    void createIndex();
-    void updateIndex();
-    void deleteIndex();
-  public:
-    static int lastEntrySet;
-  public:
-    Node( const char *path );
-    ~Node();
-    // node methods
-    int write( FILE *f );
-    const char *name();
-    const char *path() { return path_; }
-    Node *find( const char *path );
-    Node *search( const char *path, int offset=0 );
-    Node *childNode( int ix );
-    Node *addChild( const char *path );
-    void setParent( Node *parent );
-    Node *parent() { return top_?0L:parent_; }
-    void setRoot(RootNode *r) { root_ = r; top_ = 1; }
-    RootNode *findRoot();
-    char remove();
-    char dirty();
-    void deleteAllChildren();
-    // entry methods
-    int nChildren();
-    const char *child( int ix );
-    void set( const char *name, const char *value );
-    void set( const char *line );
-    void add( const char *line );
-    const char *get( const char *name );
-    int getEntry( const char *name );
-    char deleteEntry( const char *name );
-    void deleteAllEntries();
-    int nEntry() { return nEntry_; }
-    Entry &entry(int i) { return entry_[i]; }
-  };
-  friend class Node;
-
-  class FL_EXPORT RootNode {		// the root node manages file paths and basic reading and writing
-    Fl_Preferences *prefs_;
-    char *filename_;
-    char *vendor_, *application_;
-  public:
-    RootNode( Fl_Preferences *, Root root, const char *vendor, const char *application );
-    RootNode( Fl_Preferences *, const char *path, const char *vendor, const char *application );
-    RootNode( Fl_Preferences * );
-    ~RootNode();
-    int read();
-    int write();
-    char getPath( char *path, int pathlen );
-  };
-  friend class RootNode;
-
-protected:
-  Node *node;
-  RootNode *rootNode;
-};
-
-#endif // !Fl_Preferences_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Printer.H
+++ /dev/null
@@ -1,236 +1,0 @@
-//
-// "$Id$"
-//
-// Printing support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file Fl_Printer.H 
- \brief declaration of classes Fl_Printer, Fl_System_Printer and Fl_PostScript_Printer.
- */
-
-#ifndef Fl_Printer_H
-#define Fl_Printer_H
-
-#include <FL/x.H>
-#include <FL/Fl_Paged_Device.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/Fl_Bitmap.H>
-#include <stdio.h>
-#if !(defined(__APPLE__) || defined(WIN32))
-#include <FL/Fl_PostScript.H>
-#elif defined(WIN32)
-#include <commdlg.h>
-#endif
-
-#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
-/**
- Print support under MSWindows and Mac OS.
-
- Class Fl_System_Printer is implemented only on the MSWindows and Mac OS platforms.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_System_Printer : public Fl_Paged_Device {
-  friend class Fl_Printer;
-private:
-  /** \brief the printer's graphics context, if there's one, NULL otherwise */
-  void *gc; 
-  void set_current(void);
-#ifdef __APPLE__
-  float scale_x;
-  float scale_y;
-  float angle; // rotation angle in radians
-  PMPrintSession  printSession;
-  PMPageFormat    pageFormat;
-  PMPrintSettings printSettings;
-#elif defined(WIN32)
-  int   abortPrint;
-  PRINTDLG      pd;
-  HDC           hPr;
-  int           prerr;
-  int left_margin;
-  int top_margin;
-  void absolute_printable_rect(int *x, int *y, int *w, int *h);
-#endif
-protected:
-  /** \brief The constructor */
-  Fl_System_Printer(void);
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  int start_page (void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale (float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);
-  void end_job (void);
-#ifdef __APPLE__
-  void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y);
-#endif
-  /** \brief The destructor */
-  ~Fl_System_Printer(void);
-}; // class Fl_System_Printer
-
-#endif
-  
-#if !(defined(__APPLE__) || defined(WIN32) )
-/**
- Print support under Unix/Linux.
- 
- Class Fl_PostScript_Printer is implemented only on the Unix/Linux platform.
- It has no public constructor.
- Use Fl_Printer instead that is cross-platform and has the same API.
- */
-class Fl_PostScript_Printer : public Fl_PostScript_File_Device {
-  friend class Fl_Printer;
-protected:
-  /** The constructor */
-  Fl_PostScript_Printer(void) {};
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  int start_job(int pages, int *firstpage = NULL, int *lastpage = NULL);
-};
-
-#endif
-
-/**
- * \brief OS-independent print support.
- *
- Fl_Printer allows to use all drawing, color, text, image, and clip FLTK functions, and to have them operate
- on printed page(s). There are two main, non exclusive, ways to use it.
- <ul><li>Print any widget (standard, custom, Fl_Window, Fl_Gl_Window) as it appears 
- on screen, with optional translation, scaling and rotation. This is done by calling print_widget(), 
- print_window() or print_window_part().
- <li>Use a series of FLTK graphics commands (e.g., font, text, lines, colors, clip, image) to
- compose a page appropriately shaped for printing. 
- </ul>
- In both cases, begin by start_job(), start_page(), printable_rect() and origin() calls
- and finish by end_page() and end_job() calls.
- <p>Example of use: print a widget centered in a page
- \code
- #include <FL/Fl_Printer.H>
- #include <FL/fl_draw.H>
- int width, height;
- Fl_Widget *widget = ...  // a widget we want printed
- Fl_Printer *printer = new Fl_Printer();
- if (printer->start_job(1) == 0) {
-  printer->start_page();
-  printer->printable_rect(&width, &height);
-  fl_color(FL_BLACK);
-  fl_line_style(FL_SOLID, 2);
-  fl_rect(0, 0, width, height);
-  fl_font(FL_COURIER, 12);
-  time_t now; time(&now); fl_draw(ctime(&now), 0, fl_height());
-  printer->origin(width/2, height/2);
-  printer->print_widget(widget, -widget->w()/2, -widget->h()/2);
-  printer->end_page();
-  printer->end_job();
- }
- delete printer;
- \endcode
- <b>Platform specifics</b>
- <ul>
- <li>Unix/Linux platforms:
- Unless it has been previously changed, the default paper size is A4.
- To change that, press the "Properties" button of the "Print" dialog window
- opened by an Fl_Printer::start_job() call. This opens a "Printer Properties" window where it's
- possible to select the adequate paper size. Finally press the "Save" button therein to assign
- the chosen paper size to the chosen printer for this and all further print operations.
- <br>Class Fl_RGB_Image prints but loses its transparency if it has one.
- See class Fl_PostScript_Graphics_Driver for a description of how UTF-8 strings appear in print.
- Use the static public attributes of this class to set the print dialog to other languages 
- than English. For example, the "Printer:" dialog item Fl_Printer::dialog_printer can be set to French with:
- \code
- Fl_Printer::dialog_printer = "Imprimante:";
- \endcode
- before creation of the Fl_Printer object.
- Use Fl_PostScript_File_Device::file_chooser_title to customize the title of the file chooser dialog that opens
- when using the "Print To File" option of the print dialog. 
- <li>MSWindows platform: Transparent Fl_RGB_Image 's don't print with exact transparency on most printers.
- Fl_RGB_Image 's don't rotate() well.
- A workaround is to use the print_window_part() call. 
- <li>Mac OS X platform: all graphics requests print as on display.
- </ul>
- */
-class FL_EXPORT Fl_Printer : public Fl_Paged_Device {
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  /** \brief The constructor */
-  Fl_Printer(void);
-  int start_job(int pagecount, int *frompage = NULL, int *topage = NULL);
-  int start_page(void);
-  int printable_rect(int *w, int *h);
-  void margins(int *left, int *top, int *right, int *bottom);
-  void origin(int *x, int *y);
-  void origin(int x, int y);
-  void scale(float scale_x, float scale_y = 0.);
-  void rotate(float angle);
-  void translate(int x, int y);
-  void untranslate(void);
-  int end_page (void);
-  void end_job (void);
-  void print_widget(Fl_Widget* widget, int delta_x=0, int delta_y=0);
-  void print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x=0, int delta_y=0);
-  void set_current(void);
-  Fl_Graphics_Driver* driver(void);
-  /** \brief The destructor */
-  ~Fl_Printer(void);
- 
-  /** \name These attributes are effective under the Xlib platform only.
-   \{
-   */  
-  static const char *dialog_title; 
-  static const char *dialog_printer; 
-  static const char *dialog_range; 
-  static const char *dialog_copies; 
-  static const char *dialog_all; 
-  static const char *dialog_pages;
-  static const char *dialog_from;
-  static const char *dialog_to;
-  static const char *dialog_properties;
-  static const char *dialog_copyNo;
-  static const char *dialog_print_button;
-  static const char *dialog_cancel_button;
-  static const char *dialog_print_to_file;
-  static const char *property_title;
-  static const char *property_pagesize;
-  static const char *property_mode;
-  static const char *property_use;
-  static const char *property_save;
-  static const char *property_cancel;
-  /** \} */ 
-private:
-#if defined(WIN32) || defined(__APPLE__)
-  Fl_System_Printer *printer;
-#else
-  Fl_PostScript_Printer *printer;
-#endif
-};
-
-#endif // Fl_Printer_H
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/FL/Fl_Progress.H
+++ /dev/null
@@ -1,72 +1,0 @@
-//
-// "$Id$"
-//
-// Progress bar widget definitions.
-//
-// Copyright 2000-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Progress widget . */
-
-#ifndef _Fl_Progress_H_
-#  define _Fl_Progress_H_
-
-//
-// Include necessary headers.
-//
-
-#include "Fl_Widget.H"
-
-
-//
-// Progress class...
-//
-/**
-    Displays a progress bar for the user.
-*/
-class FL_EXPORT Fl_Progress : public Fl_Widget {
-  
-  float	value_,
-	minimum_,
-	maximum_;
-
-  protected:
-
-  virtual void draw();
-
-  public:
-
-  Fl_Progress(int x, int y, int w, int h, const char *l = 0);
-
-  /** Sets the maximum value in the progress widget.  */
-  void	maximum(float v) { maximum_ = v; redraw(); }
-  /** Gets the maximum value in the progress widget.  */
-  float	maximum() const { return (maximum_); }
-
-  /** Sets the minimum value in the progress widget.  */
-  void	minimum(float v) { minimum_ = v; redraw(); }
-  /** Gets the minimum value in the progress widget.  */
-  float	minimum() const { return (minimum_); }
-
-  /** Sets the current value in the progress widget.  */
-  void	value(float v) { value_ = v; redraw(); }
-  /** Gets the current value in the progress widget.  */
-  float	value() const { return (value_); }
-};
-
-#endif // !_Fl_Progress_H_
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_RGB_Image.H
+++ /dev/null
@@ -1,26 +1,0 @@
-//
-// "$Id$"
-//
-// RGB Image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_RGB_Image_H
-# define Fl_RGB_Image_H
-# include "Fl_Image.H"
-#endif // !Fl_RGB_Image_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Radio_Button.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Radio button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Button widget . */
-
-#ifndef Fl_Radio_Button_H
-#define Fl_Radio_Button_H
-
-#include "Fl_Button.H"
-
-class FL_EXPORT Fl_Radio_Button : public Fl_Button {
-public:
-  Fl_Radio_Button(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Radio_Light_Button.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Radio light button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Light_Button widget . */
-
-#ifndef Fl_Radio_Light_Button_H
-#define Fl_Radio_Light_Button_H
-
-#include "Fl_Light_Button.H"
-
-class FL_EXPORT Fl_Radio_Light_Button : public Fl_Light_Button {
-public:
-  Fl_Radio_Light_Button(int X,int Y,int W,int H,const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Radio_Round_Button.H
+++ /dev/null
@@ -1,36 +1,0 @@
-//
-// "$Id$"
-//
-// Radio round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Radio_Round_Button widget . */
-
-#ifndef Fl_Radio_Round_Button_H
-#define Fl_Radio_Round_Button_H
-
-#include "Fl_Round_Button.H"
-
-class FL_EXPORT Fl_Radio_Round_Button : public Fl_Round_Button {
-public:
-  Fl_Radio_Round_Button(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Repeat_Button.H
+++ /dev/null
@@ -1,54 +1,0 @@
-//
-// "$Id$"
-//
-// Repeat button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Repeat_Button widget . */
-
-#ifndef Fl_Repeat_Button_H
-#define Fl_Repeat_Button_H
-#include "Fl.H"
-#include "Fl_Button.H"
-
-/**
-  The Fl_Repeat_Button is a subclass of Fl_Button that
-  generates a callback when it is pressed and then repeatedly generates
-  callbacks as long as it is held down.  The speed of the repeat is fixed
-  and depends on the implementation.
-*/
-class FL_EXPORT Fl_Repeat_Button : public Fl_Button {
-  static void repeat_callback(void *);
-public:
-  int handle(int);
-  /**
-    Creates a new Fl_Repeat_Button widget using the given
-    position, size, and label string. The default boxtype is FL_UP_BOX.
-    Deletes the button.
-  */
-  Fl_Repeat_Button(int X,int Y,int W,int H,const char *l=0);
-
-  void deactivate() {
-    Fl::remove_timeout(repeat_callback,this);
-    Fl_Button::deactivate();
-  }
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Return_Button.H
+++ /dev/null
@@ -1,50 +1,0 @@
-//
-// "$Id$"
-//
-// Return button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Return_Button widget . */
-
-#ifndef Fl_Return_Button_H
-#define Fl_Return_Button_H
-#include "Fl_Button.H"
-
-/**
-  The Fl_Return_Button is a subclass of Fl_Button that
-  generates a callback when it is pressed or when the user presses the
-  Enter key.  A carriage-return symbol is drawn next to the button label.
-  <P ALIGN=CENTER>\image html Fl_Return_Button.png 
-  \image latex Fl_Return_Button.png "Fl_Return_Button" width=4cm
-*/
-class FL_EXPORT Fl_Return_Button : public Fl_Button {
-protected:
-  void draw();
-public:
-  int handle(int);
-  /**
-    Creates a new Fl_Return_Button widget using the given
-    position, size, and label string. The default boxtype is FL_UP_BOX.
-    <P> The inherited destructor deletes the button.
-  */
-  Fl_Return_Button(int X, int Y, int W, int H,const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Roller.H
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Roller header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Roller widget . */
-
-#ifndef Fl_Roller_H
-#define Fl_Roller_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Roller widget is a "dolly" control commonly used to
-  move 3D objects.
-  <P ALIGN=CENTER>\image html Fl_Roller.png 
-  \image latex Fl_Roller.png "Fl_Roller" width=4cm
-*/
-class FL_EXPORT Fl_Roller : public Fl_Valuator {
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Roller(int X,int Y,int W,int H,const char* L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Round_Button.H
+++ /dev/null
@@ -1,45 +1,0 @@
-//
-// "$Id$"
-//
-// Round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Round_Button_H
-#define Fl_Round_Button_H
-
-#include "Fl_Light_Button.H"
-
-/**
-  Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type()
-  and when().
-  <P ALIGN=CENTER>\image html Fl_Round_Button.png</P>
-  \image latex  Fl_Round_Button.png " Fl_Round_Button" width=4cm
-  <P>The Fl_Round_Button subclass display the "on" state by
-  turning on a light, rather than drawing pushed in.  The shape of the
-  "light" is initially set to FL_ROUND_DOWN_BOX.  The color of the light
-  when on is controlled with selection_color(), which defaults to
-  FL_FOREGROUND_COLOR.
-*/
-class FL_EXPORT Fl_Round_Button : public Fl_Light_Button {
-public:
-  Fl_Round_Button(int x,int y,int w,int h,const char *l = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Round_Clock.H
+++ /dev/null
@@ -1,38 +1,0 @@
-//
-// "$Id$"
-//
-// Round clock header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Round_Clock widget . */
-
-#ifndef Fl_Round_Clock_H
-#define Fl_Round_Clock_H
-
-#include "Fl_Clock.H"
-
-/** A clock widget of type FL_ROUND_CLOCK. Has no box. */
-class FL_EXPORT Fl_Round_Clock : public Fl_Clock {
-public:
-  /** Creates the clock widget, setting his type and box. */
-  Fl_Round_Clock(int X,int Y,int W,int H, const char *L = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Scroll.H
+++ /dev/null
@@ -1,209 +1,0 @@
-//
-// "$Id$"
-//
-// Scroll header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Scroll widget . */
-
-#ifndef Fl_Scroll_H
-#define Fl_Scroll_H
-
-#include "Fl_Group.H"
-#include "Fl_Scrollbar.H"
-
-/**
-  This container widget lets you maneuver around a set of widgets much
-  larger than your window.  If the child widgets are larger than the size
-  of this object then scrollbars will appear so that you can scroll over
-  to them:
-  \image html Fl_Scroll.png
-  \image latex  Fl_Scroll.png "Fl_Scroll" width=4cm
-
-  If all of the child widgets are packed together into a solid
-  rectangle then you want to set box() to FL_NO_BOX or
-  one of the _FRAME types. This will result in the best output.
-  However, if the child widgets are a sparse arrangement you must
-  set box() to a real _BOX type. This can result in some
-  blinking during redrawing, but that can be solved by using a
-  Fl_Double_Window.
-
-  By default you can scroll in both directions, and the scrollbars
-  disappear if the data will fit in the area of the scroll.
-
-  Use Fl_Scroll::type() to change this as follows :
-
-  - 0                            - No scrollbars
-  - Fl_Scroll::HORIZONTAL        - Only a horizontal scrollbar.
-  - Fl_Scroll::VERTICAL          - Only a vertical scrollbar.
-  - Fl_Scroll::BOTH              - The default is both scrollbars.
-  - Fl_Scroll::HORIZONTAL_ALWAYS - Horizontal scrollbar always on, vertical always off.
-  - Fl_Scroll::VERTICAL_ALWAYS   - Vertical scrollbar always on, horizontal always off.
-  - Fl_Scroll::BOTH_ALWAYS       - Both always on.
-
-  Use <B> scrollbar.align(int) ( see void Fl_Widget::align(Fl_Align) ) :</B>
-  to change what side the scrollbars are drawn on.
-
-  If the FL_ALIGN_LEFT bit is on, the vertical scrollbar is on the left.
-  If the FL_ALIGN_TOP bit is on, the horizontal scrollbar is on
-  the top. Note that only the alignment flags in scrollbar are
-  considered. The flags in hscrollbar however are ignored.
-
-  This widget can also be used to pan around a single child widget
-  "canvas".  This child widget should be of your own class, with a
-  draw() method that draws the contents.  The scrolling is done by
-  changing the x() and y() of the widget, so this child
-  must use the x() and y() to position its drawing.
-  To speed up drawing it should test fl_not_clipped(int x,int y,int w,int h)
-  to find out if a particular area of the widget must be drawn.
-
-  Another very useful child is a single Fl_Pack, which is itself a group
-  that packs its children together and changes size to surround them.
-  Filling the Fl_Pack with Fl_Tabs groups (and then putting
-  normal widgets inside those) gives you a very powerful scrolling list
-  of individually-openable panels.
-
-  Fluid lets you create these, but you can only lay out objects that
-  fit inside the Fl_Scroll without scrolling.  Be sure to leave
-  space for the scrollbars, as Fluid won't show these either.
-
-  <I>You cannot use Fl_Window as a child of this since the
-  clipping is not conveyed to it when drawn, and it will draw over the
-  scrollbars and neighboring objects.</I>
-*/
-class FL_EXPORT Fl_Scroll : public Fl_Group {
-
-  int xposition_, yposition_;
-  int oldx, oldy;
-  int scrollbar_size_;
-  static void hscrollbar_cb(Fl_Widget*, void*);
-  static void scrollbar_cb(Fl_Widget*, void*);
-  void fix_scrollbar_order();
-  static void draw_clip(void*,int,int,int,int);
-
-#if FLTK_ABI_VERSION >= 10303
-protected:	// NEW (STR#1895)
-#else
-private:	// OLD
-#endif
-  /**
-    Structure to manage scrollbar and widget interior sizes.
-    This is filled out by recalc_scrollbars() for use in calculations
-    that need to know the visible scroll area size, etc.
-    \note Availability in FLTK_ABI_VERSION 10303 or higher.
-  */
-  typedef struct {
-    /// A local struct to manage a region defined by xywh
-    typedef struct { int x,y,w,h; } Fl_Region_XYWH;
-    /// A local struct to manage a region defined by left/right/top/bottom
-    typedef struct {
-      int l;			///< (l)eft "x" position, aka x1
-      int r;			///< (r)ight "x" position, aka x2
-      int t;			///< (t)op "y" position, aka y1
-      int b;			///< (b)ottom "y" position, aka y2
-    } Fl_Region_LRTB;
-    /// A local struct to manage a scrollbar's xywh region and tab values
-    typedef struct {
-      int x,y,w,h;
-      int pos;			///< scrollbar tab's "position of first line displayed"
-      int size;			///< scrollbar tab's "size of window in lines"
-      int first;		///< scrollbar tab's "number of first line"
-      int total;		///< scrollbar tab's "total number of lines"
-    } Fl_Scrollbar_Data;
-    int scrollsize;		///< the effective scrollbar thickness (local or global)
-    Fl_Region_XYWH innerbox;	///< widget's inner box, excluding scrollbars
-    Fl_Region_XYWH innerchild;	///< widget's inner box, including scrollbars
-    Fl_Region_LRTB child;	///< child bounding box: left/right/top/bottom
-    int hneeded;		///< horizontal scrollbar visibility
-    int vneeded;		///< vertical scrollbar visibility
-    Fl_Scrollbar_Data hscroll;	///< horizontal scrollbar region + values
-    Fl_Scrollbar_Data vscroll;	///< vertical scrollbar region + values
-  } ScrollInfo;
-  void recalc_scrollbars(ScrollInfo &si);
-
-protected:
-
-  void bbox(int&,int&,int&,int&);
-  void draw();
-
-public:
-
-  Fl_Scrollbar scrollbar;
-  Fl_Scrollbar hscrollbar;
-
-  void resize(int X, int Y, int W, int H);
-  int handle(int);
-
-  Fl_Scroll(int X,int Y,int W,int H,const char*l=0);
-
-  enum { // values for type()
-    HORIZONTAL = 1,
-    VERTICAL = 2,
-    BOTH = 3,
-    ALWAYS_ON = 4,
-    HORIZONTAL_ALWAYS = 5,
-    VERTICAL_ALWAYS = 6,
-    BOTH_ALWAYS = 7
-  };
-
-  /**    Gets the current horizontal scrolling position.  */
-  int xposition() const {return xposition_;}
-  /**    Gets the current vertical scrolling position.  */
-  int yposition() const {return yposition_;}
-  void scroll_to(int, int);
-  void clear();
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the
-    Fl::scrollbar_size() value as the scrollbar's width.
-
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(scrollbar_size_);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to \p newSize, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL
-    your widgets' scrollbars. This ensures your application
-    has a consistent UI, is the default behavior, and is normally
-    what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-
-    Setting \p newSize to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-
-    \param[in] newSize Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int newSize) {
-      if ( newSize != scrollbar_size_ ) redraw();
-      scrollbar_size_ = newSize;
-  }
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Scrollbar.H
+++ /dev/null
@@ -1,111 +1,0 @@
-//
-// "$Id$"
-//
-// Scroll bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Scrollbar widget . */
-
-#ifndef Fl_Scrollbar_H
-#define Fl_Scrollbar_H
-
-#include "Fl_Slider.H"
-
-/**
-  The Fl_Scrollbar widget displays a slider with arrow buttons at
-  the ends of the scrollbar. Clicking on the arrows move up/left and
-  down/right by linesize(). Scrollbars also accept FL_SHORTCUT events:
-  the arrows move by linesize(), and vertical scrollbars take Page
-  Up/Down (they move by the page size minus linesize()) and Home/End
-  (they jump to the top or bottom).
-
-  Scrollbars have step(1) preset (they always return integers). If
-  desired you can set the step() to non-integer values. You will then
-  have to use casts to get at the floating-point versions of value()
-  from Fl_Slider.
-
-  \image html  scrollbar.png 
-  \image latex scrollbar.png "Fl_Scrollbar" width=4cm
-*/
-class FL_EXPORT Fl_Scrollbar : public Fl_Slider {
-
-  int linesize_;
-  int pushed_;
-  static void timeout_cb(void*);
-  void increment_cb();
-protected:
-  void draw();
-
-public:
-
-  Fl_Scrollbar(int X,int Y,int W,int H, const char *L = 0);
-  ~Fl_Scrollbar();
-  int handle(int);
-
-  /**
-    Gets the integer value (position) of the slider in the scrollbar.
-    You can get the floating point value with Fl_Slider::value().
-
-    \see Fl_Scrollbar::value(int p)
-    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
-  */
-  int value() const {return int(Fl_Slider::value());}
-
-  /**
-    Sets the value (position) of the slider in the scrollbar.
-
-    \see Fl_Scrollbar::value()
-    \see Fl_Scrollbar::value(int pos, int size, int first, int total)
-  */
-  int value(int p) {return int(Fl_Slider::value((double)p));}
-
-  /**
-    Sets the position, size and range of the slider in the scrollbar.
-    \param[in] pos   position, first line displayed
-    \param[in] windowSize  number of lines displayed
-    \param[in] first number of first line
-    \param[in] total total number of lines
-
-    You should call this every time your window changes size, your data
-    changes size, or your scroll position changes (even if in response
-    to a callback from this scrollbar).
-    All necessary calls to redraw() are done.
-
-    Calls Fl_Slider::scrollvalue(int pos, int size, int first, int total).
-  */
-  int value(int pos, int windowSize, int first, int total) {
-    return scrollvalue(pos, windowSize, first, total);
-  }
-
-  /**
-    Get the size of step, in lines, that the arror keys move.
-  */
-  int linesize() const {return linesize_;}
-
-  /**
-    This number controls how big the steps are that the arrow keys do.
-    In addition page up/down move by the size last sent to value()
-    minus one linesize().  The default is 16.
-  */
-  void linesize(int i) {linesize_ = i;}
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Secret_Input.H
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// Secret input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Secret_Input widget . */
-
-#ifndef Fl_Secret_Input_H
-#define Fl_Secret_Input_H
-
-#include "Fl_Input.H"
-
-/**
-  The Fl_Secret_Input class is a subclass of Fl_Input that displays its
-  input as a string of placeholders. Depending on the platform this
-  placeholder is either the asterisk ('*') or the Unicode bullet
-  character (U+2022).
-
-  This subclass is usually used to receive passwords and other "secret" information.
-*/
-class FL_EXPORT Fl_Secret_Input : public Fl_Input {
-public:
-  /**
-    Creates a new Fl_Secret_Input widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-
-    Inherited destructor destroys the widget and any value associated with it.
-  */
-  Fl_Secret_Input(int X,int Y,int W,int H,const char *l = 0);
-  int handle(int);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Select_Browser.H
+++ /dev/null
@@ -1,50 +1,0 @@
-//
-// "$Id$"
-//
-// Select browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Select_Browser widget . */
-
-#ifndef Fl_Select_Browser_H
-#define Fl_Select_Browser_H
-
-#include "Fl_Browser.H"
-
-/**
-  The class is a subclass of Fl_Browser
-  which lets the user select a single item, or no items by clicking on
-  the empty space.  As long as the mouse button is held down on an
-  unselected item it is highlighted. Normally the callback is done when the
-  user presses the mouse, but you can change this with when().
-  <P>See Fl_Browser for  methods to add and remove lines from the browser.
-*/
-class FL_EXPORT Fl_Select_Browser : public Fl_Browser {
-public:
-  /**
-    Creates a new Fl_Select_Browser widget using the given
-    position, size, and label string. The default boxtype is FL_DOWN_BOX.
-    The constructor specializes Fl_Browser() by setting the type to FL_SELECT_BROWSER.
-    The destructor destroys the widget and frees all memory that has been allocated.
-  */
-  Fl_Select_Browser(int X,int Y,int W,int H,const char *L=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Shared_Image.H
+++ /dev/null
@@ -1,144 +1,0 @@
-//
-// "$Id$"
-//
-// Shared image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Shared_Image class. */
-
-#ifndef Fl_Shared_Image_H
-#  define Fl_Shared_Image_H
-
-#  include "Fl_Image.H"
-
-
-// Test function for adding new formats
-typedef Fl_Image *(*Fl_Shared_Handler)(const char *name, uchar *header,
-                                       int headerlen);
-
-// Shared images class.
-/**
-  This class supports caching, loading, scaling, and drawing of image files.
-
-  Most applications will also want to link against the fltk_images library
-  and call the fl_register_images() function to support standard image
-  formats such as BMP, GIF, JPEG, and PNG.
-
-  Images can be requested (loaded) with Fl_Shared_Image::get(), find(),
-  and some other methods. All images are cached in an internal list of
-  shared images and should be released when they are no longer needed.
-  A refcount is used to determine if a released image is to be destroyed
-  with delete.
-
-  \see Fl_Shared_Image::get()
-  \see Fl_Shared_Image::find()
-  \see Fl_Shared_Image::release()
-*/
-class FL_EXPORT Fl_Shared_Image : public Fl_Image {
-
-  friend class Fl_JPEG_Image;
-  friend class Fl_PNG_Image;
-
-private:
-  static Fl_RGB_Scaling scaling_algorithm_; // method used to rescale RGB source images
-#if FLTK_ABI_VERSION >= 10304
-  Fl_Image *scaled_image_;
-#endif
-protected:
-
-  static Fl_Shared_Image **images_;	// Shared images
-  static int	num_images_;		// Number of shared images
-  static int	alloc_images_;		// Allocated shared images
-  static Fl_Shared_Handler *handlers_;	// Additional format handlers
-  static int	num_handlers_;		// Number of format handlers
-  static int	alloc_handlers_;	// Allocated format handlers
-
-  const char	*name_;			// Name of image file
-  int		original_;		// Original image?
-  int		refcount_;		// Number of times this image has been used
-  Fl_Image	*image_;		// The image that is shared
-  int		alloc_image_;		// Was the image allocated?
-
-  static int	compare(Fl_Shared_Image **i0, Fl_Shared_Image **i1);
-
-  // Use get() and release() to load/delete images in memory...
-  Fl_Shared_Image();
-  Fl_Shared_Image(const char *n, Fl_Image *img = 0);
-  virtual ~Fl_Shared_Image();
-  void add();
-  void update();
-
-public:
-  /** Returns the filename of the shared image */
-  const char	*name() { return name_; }
-
-  /** Returns the number of references of this shared image.
-    When reference is below 1, the image is deleted.
-  */
-  int		refcount() { return refcount_; }
-
-  /** Returns whether this is an original image.
-    Images loaded from a file or from memory are marked \p original as
-    opposed to images created as a copy of another image with different
-    size (width or height).
-    \note This is useful for debugging (rarely used in user code).
-    \since FLTK 1.4.0
-  */
-  int original() { return original_; }
-
-  void		release();
-  void		reload();
-
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
-  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
-  void scale(int width, int height, int proportional = 1, int can_expand = 0);
-  virtual void uncache();
-
-  static Fl_Shared_Image *find(const char *name, int W = 0, int H = 0);
-  static Fl_Shared_Image *get(const char *name, int W = 0, int H = 0);
-  static Fl_Shared_Image *get(Fl_RGB_Image *rgb, int own_it = 1);
-  static Fl_Shared_Image **images();
-  static int		num_images();
-  static void		add_handler(Fl_Shared_Handler f);
-  static void		remove_handler(Fl_Shared_Handler f);
-  /** Sets what algorithm is used when resizing a source image.
-   The default algorithm is FL_RGB_SCALING_BILINEAR.
-   Drawing an Fl_Shared_Image is sometimes performed by first resizing the source image
-   and then drawing the resized copy. This occurs, e.g., when drawing to screen under Linux or MSWindows
-   after having called Fl_Shared_Image::scale().
-   This function controls what method is used when the image to be resized is an Fl_RGB_Image.
-   \version 1.3.4 and requires compiling with FLTK_ABI_VERSION = 10304
-   */
-  static void scaling_algorithm(Fl_RGB_Scaling algorithm) {scaling_algorithm_ = algorithm; }
-};
-
-//
-// The following function is provided in the fltk_images library and
-// registers all of the "extra" image file formats that are not part
-// of the core FLTK library...
-//
-
-FL_EXPORT extern void fl_register_images();
-
-#endif // !Fl_Shared_Image_H
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/FL/Fl_Simple_Counter.H
+++ /dev/null
@@ -1,40 +1,0 @@
-//
-// "$Id$"
-//
-// Simple counter header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Simple_Counter widget . */
-
-#ifndef Fl_Simple_Counter_H
-#define Fl_Simple_Counter_H
-
-#include "Fl_Counter.H"
-/** 
-  This widget creates a counter with only 2 arrow buttons 
-  <P align=center>\image html counter.png</P> 
-  \image latex  counter.png "Fl_Simple_Counter" width=4cm
-*/
-class FL_EXPORT Fl_Simple_Counter : public Fl_Counter {
-public:
-  Fl_Simple_Counter(int X,int Y,int W,int H, const char *L = 0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Single_Window.H
+++ /dev/null
@@ -1,58 +1,0 @@
-//
-// "$Id$"
-//
-// Single-buffered window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Single_Window class . */
-
-#ifndef Fl_Single_Window_H
-#define Fl_Single_Window_H
-
-#include "Fl_Window.H"
-
-/**
-  This is the same as Fl_Window.  However, it is possible that
-  some implementations will provide double-buffered windows by default.
-  This subclass can be used to force single-buffering.  This may be
-  useful for modifying existing programs that use incremental update, or
-  for some types of image data, such as a movie flipbook.
-*/
-class FL_EXPORT Fl_Single_Window : public Fl_Window {
-public:
-  void show();
-  void show(int a, char **b) {Fl_Window::show(a,b);}
-  void flush();
-   /**
-    Creates a new Fl_Single_Window widget using the given
-    size, and label (title) string.
-  */
-  Fl_Single_Window(int W, int H, const char *l=0);
-
-  /**
-    Creates a new Fl_Single_Window widget using the given
-    position, size, and label (title) string.
-  */
-  Fl_Single_Window(int X, int Y, int W, int H, const char *l=0);
-  
-  int make_current();
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Slider.H
+++ /dev/null
@@ -1,111 +1,0 @@
-//
-// "$Id$"
-//
-// Slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Slider widget . */
-
-#ifndef Fl_Slider_H
-#define Fl_Slider_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-// values for type(), lowest bit indicate horizontal:
-#define FL_VERT_SLIDER		0
-#define FL_HOR_SLIDER		1
-#define FL_VERT_FILL_SLIDER	2
-#define FL_HOR_FILL_SLIDER	3
-#define FL_VERT_NICE_SLIDER	4
-#define FL_HOR_NICE_SLIDER	5
-
-/**
-  The Fl_Slider widget contains a sliding knob inside a box. It is
-  often used as a scrollbar.  Moving the box all the way to the
-  top/left sets it to the minimum(), and to the bottom/right to the
-  maximum().  The minimum() may be greater than the maximum() to
-  reverse the slider direction.
-
-  Use void Fl_Widget::type(int) to set how the slider is drawn, 
-  which can be one of the following:
-  
-  \li FL_VERTICAL - Draws a vertical slider (this is the default).
-  \li FL_HORIZONTAL - Draws a horizontal slider.
-  \li FL_VERT_FILL_SLIDER - Draws a filled vertical slider,
-      useful as a progress or value meter.
-  \li FL_HOR_FILL_SLIDER - Draws a filled horizontal  slider,
-      useful as a progress or value meter.
-  \li FL_VERT_NICE_SLIDER - Draws a vertical slider with  a nice
-      looking control knob.
-  \li FL_HOR_NICE_SLIDER - Draws a horizontal slider with  a
-      nice looking control knob.
-
-  \image html  slider.png 
-  \image latex slider.png "Fl_Slider" width=4cm
-*/
-class FL_EXPORT Fl_Slider : public Fl_Valuator {
-
-  float slider_size_;
-  uchar slider_;
-  void _Fl_Slider();
-  void draw_bg(int, int, int, int);
-
-protected:
-
-  // these allow subclasses to put the slider in a smaller area:
-  void draw(int, int, int, int);
-  int handle(int, int, int, int, int);
-  void draw();
-
-public:
-
-  int handle(int);
-  Fl_Slider(int X,int Y,int W,int H, const char *L = 0);
-  Fl_Slider(uchar t,int X,int Y,int W,int H, const char *L);
-
-  int scrollvalue(int pos,int size,int first,int total);
-  void bounds(double a, double b);
-
-  /**
-    Get the dimensions of the moving piece of slider.
-  */
-  float slider_size() const {return slider_size_;}
-
-  /**
-    Set the dimensions of the moving piece of slider. This is
-    the fraction of the size of the entire widget. If you set this
-    to 1 then the slider cannot move.  The default value is .08.
-
-    For the "fill" sliders this is the size of the area around the
-    end that causes a drag effect rather than causing the slider to
-    jump to the mouse.
-  */
-  void slider_size(double v);
-
-  /** Gets the slider box type. */
-  Fl_Boxtype slider() const {return (Fl_Boxtype)slider_;}
-
-  /** Sets the slider box type. */
-  void slider(Fl_Boxtype c) {slider_ = c;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Spinner.H
+++ /dev/null
@@ -1,259 +1,0 @@
-//
-// "$Id$"
-//
-// Spinner widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Spinner widget . */
-
-#ifndef Fl_Spinner_H
-#  define Fl_Spinner_H
-
-//
-// Include necessary headers...
-//
-
-#  include <FL/Enumerations.H>
-#  include <FL/Fl_Group.H>
-#  include <FL/Fl_Input.H>
-#  include <FL/Fl_Repeat_Button.H>
-#  include <stdio.h>
-#  include <stdlib.h>
-
-
-/**
-  This widget is a combination of the input
-  widget and repeat buttons. The user can either type into the
-  input area or use the buttons to change the value.
-
-  \image html Fl_Spinner.png "Fl_Spinner widget"
-  \image latex Fl_Spinner.png "Fl_Spinner widget" width=6cm
-*/
-class FL_EXPORT Fl_Spinner : public Fl_Group {
- 
-  double	value_;			// Current value
-  double	minimum_;		// Minimum value
-  double	maximum_;		// Maximum value
-  double	step_;			// Amount to add/subtract for up/down
-  const char	*format_;		// Format string
-
-#if FLTK_ABI_VERSION >= 10301
-// NEW
-protected:
-#endif
-  Fl_Input	input_;			// Input field for the value
-  Fl_Repeat_Button
-		up_button_,		// Up button
-		down_button_;		// Down button
-
-private:
-  static void	sb_cb(Fl_Widget *w, Fl_Spinner *sb) {
-		  double v;		// New value
-
-		  if (w == &(sb->input_)) {
-		    // Something changed in the input field...
-		    v = atof(sb->input_.value());
-
-		    if (v < sb->minimum_) {
-		      sb->value_ = sb->minimum_;
-		      sb->update();
-		    } else if (v > sb->maximum_) {
-		      sb->value_ = sb->maximum_;
-		      sb->update();
-		    } else sb->value_ = v;
-		  } else if (w == &(sb->up_button_)) {
-		    // Up button pressed...
-		    v = sb->value_ + sb->step_;
-
-		    if (v > sb->maximum_) sb->value_ = sb->minimum_;
-		    else sb->value_ = v;
-
-		    sb->update();
-		  } else if (w == &(sb->down_button_)) {
-		    // Down button pressed...
-		    v = sb->value_ - sb->step_;
-
-		    if (v < sb->minimum_) sb->value_ = sb->maximum_;
-		    else sb->value_ = v;
-
-		    sb->update();
-		  }
-
-		  sb->set_changed();
-		  sb->do_callback();
-		}
-  void		update() {
-		  char s[255];		// Value string
-
-		  if (format_[0]=='%'&&format_[1]=='.'&&format_[2]=='*') {  // precision argument
-		    // this code block is a simplified version of
-		    // Fl_Valuator::format() and works well (but looks ugly)
-		    int c = 0;
-		    char temp[64], *sp = temp;
-		    sprintf(temp, "%.12f", step_);
-		    while (*sp) sp++;
-		    sp--;
-		    while (sp>temp && *sp=='0') sp--;
-		    while (sp>temp && (*sp>='0' && *sp<='9')) { sp--; c++; }
-		    sprintf(s, format_, c, value_);
-		  } else {
-		    sprintf(s, format_, value_);
-		  }
-		  input_.value(s);
-		}
-
-  public:
-
-		/**
-		  Creates a new Fl_Spinner widget using the given position, size,
-		  and label string.
-		  <P>Inherited destructor Destroys the widget and any value associated with it.
-		*/
-  Fl_Spinner(int X, int Y, int W, int H, const char *L = 0);
-
-  /** Sets or returns the format string for the value. */
-  const char	*format() { return (format_); }
-  /** Sets or returns the format string for the value. */
-  void		format(const char *f) { format_ = f; update(); }
-
-  int		handle(int event) {
-		  switch (event) {
-		    case FL_KEYDOWN :
-		    case FL_SHORTCUT :
-		      if (Fl::event_key() == FL_Up) {
-			up_button_.do_callback();
-			return 1;
-		      } else if (Fl::event_key() == FL_Down) {
-			down_button_.do_callback();
-			return 1;
-		      } else return 0;
-
-		    case FL_FOCUS :
-		      if (input_.take_focus()) return 1;
-		      else return 0;
-		  }
-
-		  return Fl_Group::handle(event);
-		}
-
-  /** Speling mistakes retained for source compatibility \deprecated */
-  double	maxinum() const { return (maximum_); }
-  /** Gets the maximum value of the widget. */
-  double	maximum() const { return (maximum_); }
-  /** Sets the maximum value of the widget. */
-  void		maximum(double m) { maximum_ = m; }
-  /** Speling mistakes retained for source compatibility \deprecated */
-  double	mininum() const { return (minimum_); }
-  /** Gets the minimum value of the widget. */
-  double	minimum() const { return (minimum_); }
-  /** Sets the minimum value of the widget. */
-  void		minimum(double m) { minimum_ = m; }
-  /** Sets the minimum and maximum values for the widget. */
-  void		range(double a, double b) { minimum_ = a; maximum_ = b; }
-  void		resize(int X, int Y, int W, int H) {
-		  Fl_Group::resize(X,Y,W,H);
-
-		  input_.resize(X, Y, W - H / 2 - 2, H);
-		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
-		  down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
-		                      H / 2 + 2, H / 2);
-		}
-  /**
-    Sets or returns the amount to change the value when the user clicks a button.
-    Before setting step to a non-integer value, the spinner
-    type() should be changed to floating point.
-  */
-  double	step() const { return (step_); }
-  /** See double Fl_Spinner::step() const */
-  void		step(double s) {
-		  step_ = s;
-		  if (step_ != (int)step_) input_.type(FL_FLOAT_INPUT);
-		  else input_.type(FL_INT_INPUT);
-		  update();
-		}
-  /** Gets the color of the text in the input field. */
-  Fl_Color	textcolor() const {
-		  return (input_.textcolor());
-		}
-  /** Sets the color of the text in the input field. */
-  void		textcolor(Fl_Color c) {
-		  input_.textcolor(c);
-		}
-  /** Gets the font of the text in the input field. */
-  Fl_Font       textfont() const {
-		  return (input_.textfont());
-		}
-  /** Sets the font of the text in the input field. */
-  void		textfont(Fl_Font f) {
-		  input_.textfont(f);
-		}
-  /** Gets the size of the text in the input field. */
-  Fl_Fontsize  textsize() const {
-		  return (input_.textsize());
-		}
-  /** Sets the size of the text in the input field. */
-  void		textsize(Fl_Fontsize s) {
-		  input_.textsize(s);
-		}
-  /** Gets the numeric representation in the input field.
-   \see Fl_Spinner::type(uchar)
-  */
-  uchar		type() const { return (input_.type()); }
-  /** Sets the numeric representation in the input field.
-   Valid values are FL_INT_INPUT and FL_FLOAT_INPUT.
-   Also changes the format() template.
-   Setting a new spinner type via a superclass pointer will not work.
-   \note  type is not a virtual function.
-   */
-  void		type(uchar v) {
-		  if (v==FL_FLOAT_INPUT) {
-		    format("%.*f");
-		  } else {
-		    format("%.0f");
-		  }
-		  input_.type(v);
-		}
-  /** Gets the current value of the widget. */
-  double	value() const { return (value_); }
-  /**
-    Sets the current value of the widget.
-    Before setting value to a non-integer value, the spinner
-    type() should be changed to floating point.
-  */
-  void		value(double v) { value_ = v; update(); }
-  /**
-    Change the background color of the spinner widget's input field.
-  */
-  void		color(Fl_Color v) { input_.color(v); }
-  /**
-    Return the background color of the spinner widget's input field.
-  */
-  Fl_Color	color() const { return(input_.color()); }
-  /**
-    Change the selection color of the spinner widget's input field.
-  */
-  void		selection_color(Fl_Color val) { input_.selection_color(val); }
-  /**
-    Return the selection color of the spinner widget's input field.
-  */
-  Fl_Color	selection_color() const { return input_.selection_color(); }
-};
-
-#endif // !Fl_Spinner_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Sys_Menu_Bar.H
+++ /dev/null
@@ -1,134 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Sys_Menu_Bar_H
-#define Fl_Sys_Menu_Bar_H
-
-#include "Fl_Menu_Bar.H"
-#include "x.H"
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-
-/**
-  A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen.
- 
-  On other than Mac OS X platforms, Fl_Sys_Menu_Bar is a synonym of class Fl_Menu_Bar.
- \n To use this class, just replace Fl_Menu_Bar by Fl_Sys_Menu_Bar, and, on the Mac platform,
- a system menu at the top of the screen will be available. This menu will match an array
- of Fl_Menu_Item's exactly as with standard FLTK menus.
-  
-  Changes to the menu state are immediately visible in the menubar when they are made
-  using member functions of the Fl_Sys_Menu_Bar class. Other changes (e.g., by a call to
-  Fl_Menu_Item::set()) should be followed by a call to Fl_Sys_Menu_Bar::update() to be
-  visible in the menubar across all platforms.
-  
-  A few FLTK features are not supported by the Mac System menu:
-
-  \li no symbolic labels
-  \li no embossed labels
-  \li no font sizes
- 
-  You can configure a callback for the 'About' menu item to invoke your own code with fl_mac_set_about().
- */
-class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
-
-#if FLTK_ABI_VERSION >= 10304
-  // NEW -- update() public (STR#3317)
-public:
-  void update();
-protected:
-  void draw();
-#else
-  // OLD -- update() protected
-protected:
-  void update();
-  void draw();
-#endif
-
-public:
-  Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0);
-  ~Fl_Sys_Menu_Bar();
-  /** Return the system menu's array of Fl_Menu_Item's 
-   */
-  const Fl_Menu_Item *menu() const {return Fl_Menu_::menu();}
-  void menu(const Fl_Menu_Item *m);
-  int add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0);
-  /** Adds a new menu item. 
-   \see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0)
-   */
-  int add(const char* label, const char* shortcut, Fl_Callback* cb, void *user_data=0, int flags=0) {
-    return add(label, fl_old_shortcut(shortcut), cb, user_data, flags);
-    }
-  int add(const char* str);
-  int insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data=0, int flags=0);
-  /** Insert a new menu item. 
-   \see Fl_Menu_::insert(int index, const char* label, const char* shortcut, Fl_Callback *cb, void *user_data=0, int flags=0)
-   */
-  int insert(int index, const char* label, const char* shortcut, Fl_Callback *cb, void *user_data=0, int flags=0) {
-    return insert(index, label, fl_old_shortcut(shortcut), cb, user_data, flags);
-    }
-  void remove(int n);
-  void replace(int index, const char *name);
-  /** Set the Fl_Menu_Item array pointer to null, indicating a zero-length menu. 
-   \see Fl_Menu_::clear()
-   */
-  void clear();
-  /** Clears the specified submenu pointed to by index of all menu items.
-   \see Fl_Menu_::clear_submenu(int index)
-   */
-  int clear_submenu(int index);
-  /** Make the shortcuts for this menu work no matter what window has the focus when you type it.
-   */
-  void global() {};
-  /** Sets the flags of item i
-   \see Fl_Menu_::mode(int i, int fl) */
-  void 	mode (int i, int fl) {
-    Fl_Menu_::mode(i, fl);
-    update();
-    }
-  /** Gets the flags of item i.
-   */
-  int mode(int i) const { return Fl_Menu_::mode(i); }
-  /** Changes the shortcut of item i to n.
-   */
-  void shortcut (int i, int s) { Fl_Menu_::shortcut(i, s); update(); }
-  /** Turns the radio item "on" for the menu item and turns "off" adjacent radio items of the same group.*/
-  void setonly (Fl_Menu_Item *item) { Fl_Menu_::setonly(item); update(); }
-};
-
-#else
-
-#if FLTK_ABI_VERSION >= 10304
-// NEW -- small class for update()
-class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
-public:
-  Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0) : Fl_Menu_Bar(x,y,w,h,l) {}
-  inline void update() {}
-};
-#else
-// OLD -- simple typedef
-typedef Fl_Menu_Bar Fl_Sys_Menu_Bar;
-#endif
-
-#endif // defined(__APPLE__) || defined(FL_DOXYGEN)
-
-#endif // Fl_Sys_Menu_Bar_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Table.H
+++ /dev/null
@@ -1,1155 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Table -- A table widget
-//
-// Copyright 2002 by Greg Ercolano.
-// Copyright (c) 2004 O'ksi'D
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef _FL_TABLE_H
-#define _FL_TABLE_H
-
-#include <sys/types.h>
-#include <string.h>		// memcpy
-#ifdef WIN32
-#include <malloc.h>		// WINDOWS: malloc/realloc
-#else /*WIN32*/
-#include <stdlib.h>		// UNIX: malloc/realloc
-#endif /*WIN32*/
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Scrollbar.H>
-
-/**
- A table of widgets or other content.
- 
- This is the base class for table widgets.
- 
- To be useful it must be subclassed and several virtual functions defined.
- Normally applications use widgets derived from this widget, and do not use this 
- widget directly; this widget is usually too low level to be used directly by 
- applications.
- 
- This widget does \em not handle the data in the table. The draw_cell()
- method must be overridden by a subclass to manage drawing the contents of 
- the cells.
- 
- This widget can be used in several ways:
- 
- - As a custom widget; see examples/table-simple.cxx and test/table.cxx.
-   Very optimal for even extremely large tables.
- - As a table made up of a single FLTK widget instanced all over the table,
-   simulating a numeric spreadsheet. See examples/table-spreadsheet.cxx and
-   examples/table-spreadsheet-with-keyboard-nav.cxx. Optimal for large tables.
- - As a regular container of FLTK widgets, one widget per cell.
-   See examples/table-as-container.cxx. \em Not recommended for large tables.
- 
- \image html table-simple.png
- \image latex table-simple.png "table-simple example" width=6cm
-
- \image html table-as-container.png
- \image latex table-as-container.png "table-as-container example" width=6cm
- 
- When acting as part of a custom widget, events on the cells and/or headings
- generate callbacks when they are clicked by the user. You control when events 
- are generated based on the setting for Fl_Table::when().
- 
- When acting as a container for FLTK widgets, the FLTK widgets maintain 
- themselves. Although the draw_cell() method must be overridden, its contents 
- can be very simple. See the draw_cell() code in examples/table-simple.cxx.
- 
- The following variables are available to classes deriving from Fl_Table:
- 
- \image html table-dimensions.png
- \image latex table-dimensions.png "Fl_Table Dimensions" width=6cm
- 
- <table border=0>
- <tr><td>x()/y()/w()/h()</td>
- <td>Fl_Table widget's outer dimension. The outer edge of the border of the 
- Fl_Table. (Red in the diagram above)</td></tr>
- 
- <tr><td>wix/wiy/wiw/wih</td>
- <td>Fl_Table widget's inner dimension. The inner edge of the border of the 
- Fl_Table. eg. if the Fl_Table's box() is FL_NO_BOX, these values are the same 
- as x()/y()/w()/h(). (Yellow in the diagram above)</td></tr>
- 
- <tr><td>tox/toy/tow/toh</td>
- <td>The table's outer dimension. The outer edge of the border around the cells,
- but inside the row/col headings and scrollbars. (Green in the diagram above)
- </td></tr>
- 
- <tr><td>tix/tiy/tiw/tih</td>
- <td>The table's inner dimension. The inner edge of the border around the cells,
- but inside the row/col headings and scrollbars. AKA the table's clip region. 
- eg. if the table_box() is FL_NO_BOX, these values are the same as
- tox/toy/tow/toh. (Blue in the diagram above)
- </td></tr></table>
- 
- CORE DEVELOPERS
- 
- - Greg Ercolano : 12/16/2002 - initial implementation 12/16/02. Fl_Table, Fl_Table_Row, docs.
- - Jean-Marc Lienher : 02/22/2004 - added keyboard nav + mouse selection, and ported Fl_Table into fltk-utf8-1.1.4
- 
- OTHER CONTRIBUTORS
- 
- - Inspired by the Feb 2000 version of FLVW's Flvw_Table widget. Mucho thanks to those folks.
- - Mister Satan : 04/07/2003 - MinGW porting mods, and singleinput.cxx; a cool Fl_Input oriented spreadsheet example
- - Marek Paliwoda : 01/08/2003 - Porting mods for Borland
- - Ori Berger : 03/16/2006 - Optimizations for >500k rows/cols
- 
- LICENSE
- 
- Greg added the following license to the original distribution of Fl_Table. He 
- kindly gave his permission to integrate Fl_Table and Fl_Table_Row into FLTK,
- allowing FLTK license to apply while his widgets are part of the library.
- 
- If used on its own, this is the license that applies:
-
- \verbatim 
- Fl_Table License
- December 16, 2002
- 
- The Fl_Table library and included programs are provided under the terms
- of the GNU Library General Public License (LGPL) with the following
- exceptions:
- 
- 1. Modifications to the Fl_Table configure script, config
- header file, and makefiles by themselves to support
- a specific platform do not constitute a modified or
- derivative work.
- 
- The authors do request that such modifications be
- contributed to the Fl_Table project - send all
- contributions to "erco at seriss dot com".
- 
- 2. Widgets that are subclassed from Fl_Table widgets do not
- constitute a derivative work.
- 
- 3. Static linking of applications and widgets to the
- Fl_Table library does not constitute a derivative work
- and does not require the author to provide source
- code for the application or widget, use the shared
- Fl_Table libraries, or link their applications or
- widgets against a user-supplied version of Fl_Table.
- 
- If you link the application or widget to a modified
- version of Fl_Table, then the changes to Fl_Table must be
- provided under the terms of the LGPL in sections
- 1, 2, and 4.
- 
- 4. You do not have to provide a copy of the Fl_Table license
- with programs that are linked to the Fl_Table library, nor
- do you have to identify the Fl_Table license in your
- program or documentation as required by section 6
- of the LGPL.
- 
- However, programs must still identify their use of Fl_Table.
- The following example statement can be included in user
- documentation to satisfy this requirement:
- 
- [program/widget] is based in part on the work of
- the Fl_Table project http://seriss.com/people/erco/fltk/Fl_Table/
- \endverbatim
- 
- 
- */
-class FL_EXPORT Fl_Table : public Fl_Group {
-public:
-  /**
-   The context bit flags for Fl_Table related callbacks.
-
-   Used in draw_cell(), callback(), etc.
-   */
-  enum TableContext {
-    CONTEXT_NONE       = 0,	///< no known context
-    CONTEXT_STARTPAGE  = 0x01,	///< before a page is redrawn
-    CONTEXT_ENDPAGE    = 0x02,	///< after a page is redrawn
-    CONTEXT_ROW_HEADER = 0x04,	///< in the row header
-    CONTEXT_COL_HEADER = 0x08,	///< in the col header
-    CONTEXT_CELL       = 0x10,	///< in one of the cells
-    CONTEXT_TABLE      = 0x20,	///< in a dead zone of table
-    CONTEXT_RC_RESIZE  = 0x40 	///< column or row being resized
-  };
-  
-private:
-  int _rows, _cols;	// total rows/cols
-  int _row_header_w;	// width of row header
-  int _col_header_h;	// height of column header
-  int _row_position;	// last row_position set (not necessarily == toprow!)
-  int _col_position;	// last col_position set (not necessarily == leftcol!)
-  
-  char _row_header;	// row header enabled?
-  char _col_header;	// col header enabled?
-  char _row_resize;	// row resizing enabled?
-  char _col_resize;	// col resizing enabled?
-  int _row_resize_min;	// row minimum resizing height (default=1)
-  int _col_resize_min;	// col minimum resizing width (default=1)
-  
-  // OPTIMIZATION: partial row/column redraw variables
-  int _redraw_toprow;
-  int _redraw_botrow;
-  int _redraw_leftcol;
-  int _redraw_rightcol;
-  Fl_Color _row_header_color;
-  Fl_Color _col_header_color;
-  
-  int _auto_drag;
-  int _selecting;
-#if FLTK_ABI_VERSION >= 10301
-  int _scrollbar_size;
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  enum {
-    TABCELLNAV = 1<<0,			///> tab cell navigation flag
-  };
-  unsigned int flags_;
-#endif
-  
-  // An STL-ish vector without templates
-  class FL_EXPORT IntVector {
-    int *arr;
-    unsigned int _size;
-    void init() {
-      arr = NULL;
-      _size = 0;
-    }
-    void copy(int *newarr, unsigned int newsize) {
-      size(newsize);
-      memcpy(arr, newarr, newsize * sizeof(int));
-    }
-  public:
-    IntVector() { init(); }					// CTOR
-    ~IntVector() { if ( arr ) free(arr); arr = NULL; }		// DTOR
-    IntVector(IntVector&o) { init(); copy(o.arr, o._size); }	// COPY CTOR
-    IntVector& operator=(IntVector&o) {				// ASSIGN
-      init();
-      copy(o.arr, o._size);
-      return(*this);
-    }
-    int operator[](int x) const { return(arr[x]); }
-    int& operator[](int x) { return(arr[x]); }
-    unsigned int size() { return(_size); }
-    void size(unsigned int count) {
-      if ( count != _size ) {
-        arr = (int*)realloc(arr, count * sizeof(int));
-        _size = count;
-      }
-    }
-    int pop_back() { int tmp = arr[_size-1]; _size--; return(tmp); }
-    void push_back(int val) { unsigned int x = _size; size(_size+1); arr[x] = val; }
-    int back() { return(arr[_size-1]); }
-  };
-  
-  IntVector _colwidths;			// column widths in pixels
-  IntVector _rowheights;		// row heights in pixels
-  
-  Fl_Cursor _last_cursor;		// last mouse cursor before changed to 'resize' cursor
-  
-  // EVENT CALLBACK DATA
-  TableContext _callback_context;	// event context
-  int _callback_row, _callback_col;	// event row/col
-  
-  // handle() state variables.
-  //    Put here instead of local statics in handle(), so more
-  //    than one Fl_Table can exist without crosstalk between them.
-  //
-  int _resizing_col;			// column being dragged
-  int _resizing_row;			// row being dragged
-  int _dragging_x;			// starting x position for horiz drag
-  int _dragging_y;			// starting y position for vert drag
-  int _last_row;			// last row we FL_PUSH'ed
-  
-  // Redraw single cell
-  void _redraw_cell(TableContext context, int R, int C);
-  
-  void _start_auto_drag();
-  void _stop_auto_drag();
-  void _auto_drag_cb();
-  static void _auto_drag_cb2(void *d);
-  
-protected:
-  enum ResizeFlag {
-    RESIZE_NONE      = 0,
-    RESIZE_COL_LEFT  = 1,
-    RESIZE_COL_RIGHT = 2,
-    RESIZE_ROW_ABOVE = 3,
-    RESIZE_ROW_BELOW = 4
-  };
-  
-  int table_w, table_h;				// table's virtual size (in pixels)
-  int toprow, botrow, leftcol, rightcol;	// four corners of viewable table
-  
-  // selection
-  int current_row, current_col;
-  int select_row, select_col;
-  
-  // OPTIMIZATION: Precomputed scroll positions for the toprow/leftcol
-  int toprow_scrollpos;
-  int leftcol_scrollpos;
-  
-  // Dimensions
-  int tix, tiy, tiw, tih;			// data table inner dimension xywh
-  int tox, toy, tow, toh;			// data table outer dimension xywh
-  int wix, wiy, wiw, wih;			// widget inner dimension xywh
-  
-  Fl_Scroll *table;				// container for child fltk widgets (if any)
-  Fl_Scrollbar *vscrollbar; 			// vertical scrollbar
-  Fl_Scrollbar *hscrollbar;			// horizontal scrollbar
-  
-  // Fltk
-  int handle(int e);				// fltk handle() override
-  
-  // Class maintenance
-  void recalc_dimensions();
-  void table_resized();				// table resized; recalc
-  void table_scrolled();			// table scrolled; recalc
-  void get_bounds(TableContext context,		// return x/y/w/h bounds for context
-                  int &X, int &Y, int &W, int &H);
-  void change_cursor(Fl_Cursor newcursor);	// change mouse cursor to some other shape
-  TableContext cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag);
-  // find r/c given current x/y event
-  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
-                int R, int C, int &X, int &Y, int &W, int &H);
-  int row_col_clamp(TableContext context, int &R, int &C);
-  // clamp r/c to known universe
-  
-  /**
-   Subclass should override this method to handle drawing the cells.
-   
-   This method will be called whenever the table is redrawn, once per cell.
-   
-   Only cells that are completely (or partially) visible will be told to draw.
-   
-   \p context will be one of the following:
-   
-   <table border=1>
-   <tr>
-   <td>\p Fl_Table::CONTEXT_STARTPAGE</td>
-   <td>When table, or parts of the table, are about to be redrawn.<br>
-       Use to initialize static data, such as font selections.<p>
-       R/C will be zero,<br>
-       X/Y/W/H will be the dimensions of the table's entire data area.<br>
-       (Useful for locking a database before accessing; see
-       also visible_cells())</td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_ENDPAGE</td>
-   <td>When table has completed being redrawn.<br>
-       R/C will be zero, X/Y/W/H dimensions of table's data area.<br>
-       (Useful for unlocking a database after accessing)</td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_ROW_HEADER</td>
-   <td>Whenever a row header cell needs to be drawn.<br>
-       R will be the row number of the header being redrawn,<br>
-       C will be zero,<br>
-       X/Y/W/H will be the fltk drawing area of the row header in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_COL_HEADER</td>
-   <td>Whenever a column header cell needs to be drawn.<br>
-       R will be zero, <br>
-       C will be the column number of the header being redrawn,<br>
-       X/Y/W/H will be the fltk drawing area of the column header in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_CELL</td>
-   <td>Whenever a data cell in the table needs to be drawn.<br>
-       R/C will be the row/column of the cell to be drawn,<br>
-       X/Y/W/H will be the fltk drawing area of the cell in the window </td>
-   </tr><tr>
-   <td>\p Fl_Table::CONTEXT_RC_RESIZE</td>
-   <td>Whenever table or row/column is resized or scrolled,
-       either interactively or via col_width() or row_height().<br>
-       R/C/X/Y/W/H will all be zero.
-       <p> 
-       Useful for fltk containers that need to resize or move
-       the child fltk widgets.</td>
-   </tr>
-   </table>
-   
-   \p row and \p col will be set to the row and column number
-   of the cell being drawn. In the case of row headers, \p col will be \a 0.
-   In the case of column headers, \p row will be \a 0.
-   
-   <tt>x/y/w/h</tt> will be the position and dimensions of where the cell
-   should be drawn.
-   
-   In the case of custom widgets, a minimal draw_cell() override might
-   look like the following. With custom widgets it is up to the caller to handle
-   drawing everything within the dimensions of the cell, including handling the
-   selection color.  Note all clipping must be handled as well; this allows drawing
-   outside the dimensions of the cell if so desired for 'custom effects'.
-   
-   \code
-   // This is called whenever Fl_Table wants you to draw a cell
-   void MyTable::draw_cell(TableContext context, int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0) {
-       static char s[40];
-       sprintf(s, "%d/%d", R, C);              // text for each cell
-       switch ( context ) {
-	   case CONTEXT_STARTPAGE:             // Fl_Table telling us it's starting to draw page
-	       fl_font(FL_HELVETICA, 16);
-	       return;
-       
-	   case CONTEXT_ROW_HEADER:            // Fl_Table telling us to draw row/col headers
-	   case CONTEXT_COL_HEADER:
-	       fl_push_clip(X, Y, W, H);
-	       {
-		   fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, color());
-		   fl_color(FL_BLACK);
-		   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-	       }
-	       fl_pop_clip();
-	       return;
-	   
-	   case CONTEXT_CELL:                  // Fl_Table telling us to draw cells
-	       fl_push_clip(X, Y, W, H);
-	       {
-		   // BG COLOR
-		   fl_color( row_selected(R) ? selection_color() : FL_WHITE);
-		   fl_rectf(X, Y, W, H);
-		   
-		   // TEXT
-		   fl_color(FL_BLACK);
-		   fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-		   
-		   // BORDER
-		   fl_color(FL_LIGHT2);
-		   fl_rect(X, Y, W, H);
-	       }
-	       fl_pop_clip();
-	       return;
-	   
-       default:
-	   return;
-       }
-       //NOTREACHED
-   }
-   \endcode
-   */
-  virtual void draw_cell(TableContext context, int R=0, int C=0, 
-                         int X=0, int Y=0, int W=0, int H=0)
-  { }						// overridden by deriving class
-  
-  long row_scroll_position(int row);		// find scroll position of row (in pixels)
-  long col_scroll_position(int col);		// find scroll position of col (in pixels)
-  
-  int is_fltk_container() { 			// does table contain fltk widgets?
-    return( Fl_Group::children() > 3 );		// (ie. more than box and 2 scrollbars?)
-  }
-  
-  static void scroll_cb(Fl_Widget*,void*);	// h/v scrollbar callback
-  
-  void damage_zone(int r1, int c1, int r2, int c2, int r3 = 0, int c3 = 0);
-  
-  void redraw_range(int topRow, int botRow, int leftCol, int rightCol) {
-    if ( _redraw_toprow == -1 ) {
-      // Initialize redraw range
-      _redraw_toprow = topRow;
-      _redraw_botrow = botRow;
-      _redraw_leftcol = leftCol;
-      _redraw_rightcol = rightCol;
-    } else {
-      // Extend redraw range
-      if ( topRow < _redraw_toprow ) _redraw_toprow = topRow;
-      if ( botRow > _redraw_botrow ) _redraw_botrow = botRow;
-      if ( leftCol < _redraw_leftcol ) _redraw_leftcol = leftCol;
-      if ( rightCol > _redraw_rightcol ) _redraw_rightcol = rightCol;
-    }
-    
-    // Indicate partial redraw needed of some cells
-    damage(FL_DAMAGE_CHILD);
-  }
-  
-public:
-  /**
-   The constructor for the Fl_Table.
-   This creates an empty table with no rows or columns,
-   with headers and row/column resize behavior disabled.
-   */
-  Fl_Table(int X, int Y, int W, int H, const char *l=0);
-  
-  /**
-   The destructor for the Fl_Table.
-   Destroys the table and its associated widgets.
-   */
-  ~Fl_Table();
-  
-  /**
-   Clears the table to zero rows (rows(0)), zero columns (cols(0)), and clears
-   any widgets (table->clear()) that were added with begin()/end() or add()/insert()/etc.
-   \see rows(int), cols(int)
-   */
-  virtual void clear() { rows(0); cols(0); table->clear(); }
-  
-  // \todo: add topline(), middleline(), bottomline()
-  
-  /**
-   Sets the kind of box drawn around the data table,
-   the default being FL_NO_BOX. Changing this value will cause the table
-   to redraw.
-   */
-  inline void table_box(Fl_Boxtype val) {
-    table->box(val);
-    table_resized();
-  }
-  
-  /**
-   Returns the current box type used for the data table.
-   */
-  inline Fl_Boxtype table_box( void ) {
-    return(table->box());
-  }
-  
-  /**
-   Sets the number of rows in the table, and the table is redrawn.
-   */
-  virtual void rows(int val);			// set/get number of rows
-  
-  /**
-   Returns the number of rows in the table.
-   */
-  inline int rows() {
-    return(_rows);
-  }
-  
-  /**
-   Set the number of columns in the table and redraw.
-   */
-  virtual void cols(int val);			// set/get number of columns
-  
-  /** 
-   Get the number of columns in the table.
-   */
-  inline int cols() {
-    return(_cols);
-  }
-  
-  /**
-   Returns the range of row and column numbers for all visible 
-   and partially visible cells in the table.
-   
-   These values can be used e.g. by your draw_cell() routine during
-   CONTEXT_STARTPAGE to figure out what cells are about to be redrawn
-   for the purposes of locking the data from a database before it's drawn.
-   
-   \code
-          leftcol             rightcol
-             :                   :
-   toprow .. .-------------------.
-             |                   |
-             |  V I S I B L E    |
-             |                   |
-             |    T A B L E      |
-             |                   |
-   botrow .. '-------------------`
-   \endcode
-   
-   e.g. in a table where the visible rows are 5-20, and the
-   visible columns are 100-120, then those variables would be:
-   
-   - toprow = 5
-   - botrow = 20
-   - leftcol = 100
-   - rightcol = 120
-   */
-  inline void visible_cells(int& r1, int& r2, int& c1, int& c2) {
-    r1 = toprow;
-    r2 = botrow;
-    c1 = leftcol;
-    c2 = rightcol;
-  } 
-  
-  /**
-   Returns 1 if someone is interactively resizing a row or column.
-   You can currently call this only from within your callback().
-   */
-  int is_interactive_resize() {
-    return(_resizing_row != -1 || _resizing_col != -1);
-  } 
-  
-  /**
-   Returns if row resizing by the user is allowed.
-   */
-  inline int row_resize() {
-    return(_row_resize);
-  }
-  
-  /**
-   Allows/disallows row resizing by the user.
-   1=allow interactive resizing, 0=disallow interactive resizing.
-   Since interactive resizing is done via the row headers,
-   row_header() must also be enabled to allow resizing.
-   */   
-  void row_resize(int flag) {			// enable row resizing
-    _row_resize = flag;
-  }
-  
-  /**
-   Returns if column resizing by the user is allowed.
-   */
-  inline int col_resize() {
-    return(_col_resize);
-  }
-  /**
-   Allows/disallows column resizing by the user.
-   1=allow interactive resizing, 0=disallow interactive resizing.
-   Since interactive resizing is done via the column headers,
-   \p col_header() must also be enabled to allow resizing.
-   */
-  void col_resize(int flag) {			// enable col resizing
-    _col_resize = flag;
-  }
-  
-  /**
-   Returns the current column minimum resize value.
-   */
-  inline int col_resize_min() {			// column minimum resizing width
-    return(_col_resize_min);
-  }
-  
-  /**
-   Sets the current column minimum resize value.
-   This is used to prevent the user from interactively resizing
-   any column to be smaller than 'pixels'. Must be a value >=1.
-   */
-  void col_resize_min(int val) {
-    _col_resize_min = ( val < 1 ) ? 1 : val;
-  } 
-  
-  /**
-   Returns the current row minimum resize value.
-   */
-  inline int row_resize_min() {			// column minimum resizing width
-    return(_row_resize_min);
-  }
-  
-  /**
-   Sets the current row minimum resize value.
-   This is used to prevent the user from interactively resizing
-   any row to be smaller than 'pixels'. Must be a value >=1.
-   */
-  void row_resize_min(int val) {
-    _row_resize_min = ( val < 1 ) ? 1 : val;
-  }
-  
-  /**
-   Returns if row headers are enabled or not.
-   */
-  inline int row_header() {			// set/get row header enable flag
-    return(_row_header);
-  }
-  
-  /**
-   Enables/disables showing the row headers. 1=enabled, 0=disabled.
-   If changed, the table is redrawn.
-   */
-  void row_header(int flag) {
-    _row_header = flag;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Returns if column headers are enabled or not.
-   */
-  inline int col_header() {			// set/get col header enable flag
-    return(_col_header);
-  }
-  
-  /**
-   Enable or disable column headers.
-   If changed, the table is redrawn.
-   */
-  void col_header(int flag) {
-    _col_header = flag;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Sets the height in pixels for column headers and redraws the table.
-   */
-  inline void col_header_height(int height) {	// set/get col header height
-    _col_header_h = height;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Gets the column header height.
-   */
-  inline int col_header_height() {
-    return(_col_header_h);
-  }
-  
-  /**
-   Sets the row header width to n and causes the screen to redraw.
-   */
-  inline void row_header_width(int width) {	// set/get row header width
-    _row_header_w = width;
-    table_resized();
-    redraw();
-  }
-  
-  /**
-   Returns the current row header width (in pixels).
-   */
-  inline int row_header_width() {
-    return(_row_header_w);
-  }
-  
-  /**
-   Sets the row header color and causes the screen to redraw.
-   */
-  inline void row_header_color(Fl_Color val) {	// set/get row header color
-    _row_header_color = val;
-    redraw();
-  }
-  
-  /**
-   Returns the current row header color.
-   */
-  inline Fl_Color row_header_color() {
-    return(_row_header_color);
-  } 
-  
-  /**
-   Sets the color for column headers and redraws the table.
-   */
-  inline void col_header_color(Fl_Color val) {	// set/get col header color
-    _col_header_color = val;
-    redraw();
-  }
-  
-  /**
-   Gets the color for column headers.
-   */
-  inline Fl_Color col_header_color() {
-    return(_col_header_color);
-  }
-  
-  /**
-   Sets the height of the specified row in pixels,
-   and the table is redrawn.
-   callback() will be invoked with CONTEXT_RC_RESIZE
-   if the row's height was actually changed, and when() is FL_WHEN_CHANGED.
-   */
-  void row_height(int row, int height);		// set/get row height
-  
-  /**
-   Returns the current height of the specified row as a value in pixels.
-   */
-  inline int row_height(int row) {
-    return((row<0 || row>=(int)_rowheights.size()) ? 0 : _rowheights[row]);
-  }
-  
-  /**
-   Sets the width of the specified column in pixels, and the table is redrawn.
-   callback() will be invoked with CONTEXT_RC_RESIZE
-   if the column's width was actually changed, and when() is FL_WHEN_CHANGED.
-   */   
-  void col_width(int col, int width);		// set/get a column's width
-  
-  /**
-   Returns the current width of the specified column in pixels.
-   */
-  inline int col_width(int col) {
-    return((col<0 || col>=(int)_colwidths.size()) ? 0 : _colwidths[col]);
-  }
-  
-  /**
-   Convenience method to set the height of all rows to the
-   same value, in pixels. The screen is redrawn.
-   */
-  void row_height_all(int height) {		// set all row/col heights
-    for ( int r=0; r<rows(); r++ ) {
-      row_height(r, height);
-    }
-  }
-  
-  /**
-   Convenience method to set the width of all columns to the
-   same value, in pixels. The screen is redrawn.
-   */
-  void col_width_all(int width) {
-    for ( int c=0; c<cols(); c++ ) {
-      col_width(c, width);
-    }
-  }
-  
-  /**
-   Sets the row scroll position to 'row', and causes the screen to redraw.
-   */
-  void row_position(int row);			// set/get table's current scroll position
-  
-  /** 
-   Sets the column scroll position to column 'col', and causes the screen to redraw.
-   */
-  void col_position(int col);
-  
-  /**
-   Returns the current row scroll position as a row number.
-   */
-  int row_position() {				// current row position
-    return(_row_position);
-  }
-  
-  /**
-   Returns the current column scroll position as a column number.
-   */
-  int col_position() {				// current col position
-    return(_col_position);
-  }
-  
-  /**
-   Sets which row should be at the top of the table,
-   scrolling as necessary, and the table is redrawn. If the table
-   cannot be scrolled that far, it is scrolled as far as possible.
-   */
-  inline void top_row(int row) {		// set/get top row (deprecated)
-    row_position(row);
-  }
-  
-  /**
-   Returns the current top row shown in the table.
-   This row may be partially obscured.
-   */
-  inline int top_row() {
-    return(row_position());
-  }
-  int is_selected(int r, int c);		// selected cell
-  void get_selection(int &row_top, int &col_left, int &row_bot, int &col_right);
-  void set_selection(int row_top, int col_left, int row_bot, int col_right);
-  int move_cursor(int R, int C, int shiftselect);
-  int move_cursor(int R, int C);
-  
-  /**
-   Changes the size of the Fl_Table, causing it to redraw.
-   */
-  void resize(int X, int Y, int W, int H);	// fltk resize() override
-  void draw(void);				// fltk draw() override
-  
-  // This crashes sortapp() during init.
-  //  void box(Fl_Boxtype val) {
-  //    Fl_Group::box(val);
-  //    if ( table ) {
-  //      resize(x(), y(), w(), h());
-  //    }
-  //  }
-  //  Fl_Boxtype box(void) const {
-  //    return(Fl_Group::box());
-  //  }
-  
-  // Child group
-  void init_sizes() {
-    table->init_sizes();
-    table->redraw();
-  }
-  void add(Fl_Widget& wgt) {
-    table->add(wgt);
-    if ( table->children() > 2 ) {
-      table->show();
-    } else {
-      table->hide();
-    } 
-  }
-  void add(Fl_Widget* wgt) {
-    add(*wgt);
-  }
-  void insert(Fl_Widget& wgt, int n) {
-    table->insert(wgt,n);
-  }
-  void insert(Fl_Widget& wgt, Fl_Widget* w2) {
-    table->insert(wgt,w2);
-  }
-  void remove(Fl_Widget& wgt) {
-    table->remove(wgt);
-  }
-  void begin() {
-    table->begin();
-  }
-  void end() {
-    table->end();
-    // HACK: Avoid showing Fl_Scroll; seems to erase screen
-    //       causing unnecessary flicker, even if its box() is FL_NO_BOX.
-    //
-    if ( table->children() > 2 ) {
-      table->show();
-    } else {
-      table->hide();
-    } 
-    Fl_Group::current(Fl_Group::parent());
-  }
-  Fl_Widget * const *array() {
-    return(table->array());
-  }
-  
-  /**
-   Returns the child widget by an index.
-   
-   When using the Fl_Table as a container for FLTK widgets, this method returns 
-   the widget pointer from the internal array of widgets in the container.
-   
-   Typically used in loops, eg:
-   \code
-   for ( int i=0; i<children(); i++ ) {
-     Fl_Widget *w = child(i);
-     [..]
-   }
-   \endcode
-   */
-  Fl_Widget *child(int n) const {
-    return(table->child(n));
-  }
-  
-  /**
-   Returns the number of children in the table.
-   
-   When using the Fl_Table as a container for FLTK widgets, this method returns 
-   how many child widgets the table has.
-   
-   \see child(int)
-   */
-  int children() const {
-    return(table->children()-2);    // -2: skip Fl_Scroll's h/v scrollbar widgets
-  }
-  int find(const Fl_Widget *wgt) const {
-    return(table->find(wgt));
-  }
-  int find(const Fl_Widget &wgt) const {
-    return(table->find(wgt));
-  } 
-  // CALLBACKS
-  
-  /**
-   * Returns the current row the event occurred on.
-   *
-   * This function should only be used from within the user's callback function.
-   */
-  int callback_row() {
-    return(_callback_row);
-  }
-  
-  /**
-   * Returns the current column the event occurred on.
-   *
-   * This function should only be used from within the user's callback function.
-   */
-  int callback_col() {
-    return(_callback_col);
-  }
-  
-  /**
-   * Returns the current 'table context'.
-   *
-   * This function should only be used from within the user's callback function.
-   */
-  TableContext callback_context() {
-    return(_callback_context);
-  }
-  
-  void do_callback(TableContext context, int row, int col) {
-    _callback_context = context;
-    _callback_row = row;
-    _callback_col = col;
-    Fl_Widget::do_callback();
-  }
-  
-#ifdef FL_DOXYGEN
-  /**
-   The Fl_Widget::when() function is used to set a group of flags, determining
-   when the widget callback is called:
-   
-   <table border=1>
-   <tr>
-   <td>\p FL_WHEN_CHANGED</td>
-   <td>
-   callback() will be called when rows or columns are resized (interactively or 
-   via col_width() or row_height()), passing CONTEXT_RC_RESIZE via 
-   callback_context().
-   </td>
-   </tr><tr>
-   <td>\p FL_WHEN_RELEASE</td>
-   <td>
-   callback() will be called during FL_RELEASE events, such as when someone 
-   releases a mouse button somewhere on the table.
-   </td>
-   </tr>
-   </table>
-
-   The callback() routine is sent a TableContext that indicates the context the
-   event occurred in, such as in a cell, in a header, or elsewhere on the table.
-   When an event occurs in a cell or header, callback_row() and
-   callback_col() can be used to determine the row and column. The callback
-   can also look at the regular fltk event values (ie. Fl::event() and
-   Fl::event_button()) to determine what kind of event is occurring.
-   */
-  void when(Fl_When flags);
-#endif
-  
-#ifdef FL_DOXYGEN
-  /**
-   Callbacks will be called depending on the setting of Fl_Widget::when().
-   
-   Callback functions should use the following functions to determine the 
-   context/row/column:
-
-   - Fl_Table::callback_row() returns current row
-   - Fl_Table::callback_col() returns current column
-   - Fl_Table::callback_context() returns current table context
-
-   callback_row() and callback_col() will be set to the row and column number the 
-   event occurred on. If someone clicked on a row header, \p col will be \a 0.  
-   If someone clicked on a column header, \p row will be \a 0.
-   
-   callback_context() will return one of the following:
-   
-   <table border=1>
-   <tr><td><tt>Fl_Table::CONTEXT_ROW_HEADER</tt></td>
-   <td>Someone clicked on a row header. Excludes resizing.</td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_COL_HEADER</tt></td>
-   <td>Someone clicked on a column header. Excludes resizing.</td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_CELL</tt></td>
-   <td>
-   Someone clicked on a cell.
-   
-   To receive callbacks for FL_RELEASE events, you must set
-   when(FL_WHEN_RELEASE).
-   </td>
-   </tr><tr>
-   <td><tt>Fl_Table::CONTEXT_RC_RESIZE</tt></td>
-   <td>
-   Someone is resizing rows/columns either interactively,
-   or via the col_width() or row_height() API.
-   
-   Use is_interactive_resize()
-   to determine interactive resizing.
-   
-   If resizing a column, R=0 and C=column being resized.
-   
-   If resizing a row, C=0 and R=row being resized.
-   
-   NOTE: To receive resize events, you must set when(FL_WHEN_CHANGED).
-   </td>
-   </tr>
-   </table>
-   
-   \code
-   class MyTable : public Fl_Table {
-     [..]
-   private:
-     // Handle events that happen on the table
-     void event_callback2() {
-       int R = callback_row(),                         // row where event occurred
-       C = callback_col();                             // column where event occurred
-       TableContext context = callback_context();      // which part of table
-       fprintf(stderr, "callback: Row=%d Col=%d Context=%d Event=%d\n",
-               R, C, (int)context, (int)Fl::event());
-     }
-   
-     // Actual static callback
-     static void event_callback(Fl_Widget*, void* data) {
-       MyTable *o = (MyTable*)data;
-       o->event_callback2();
-     }
-     
-   public:
-     // Constructor
-     MyTable() {
-       [..]
-       table.callback(&event_callback, (void*)this);   // setup callback
-       table.when(FL_WHEN_CHANGED|FL_WHEN_RELEASE);    // when to call it
-     }
-   };
-   \endcode
-   */
-  void callback(Fl_Widget*, void*);
-#endif
-
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  /**
-    Gets the current size of the scrollbars' troughs, in pixels.
-
-    If this value is zero (default), this widget will use the 
-    Fl::scrollbar_size() value as the scrollbar's width.
-  
-    \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-    \see Fl::scrollbar_size(int)
-  */
-  int scrollbar_size() const {
-      return(_scrollbar_size);
-  }
-  /**
-    Sets the pixel size of the scrollbars' troughs to \p newSize, in pixels.
-
-    Normally you should not need this method, and should use
-    Fl::scrollbar_size(int) instead to manage the size of ALL your
-    widgets' scrollbars. This ensures your application has a consistent
-    UI, is the default behavior, and is normally what you want.
-
-    Only use THIS method if you really need to override the global
-    scrollbar size. The need for this should be rare.
-
-    Setting \p newSize to the special value of 0 causes the widget to
-    track the global Fl::scrollbar_size(), which is the default.
-    
-    \param[in] newSize Sets the scrollbar size in pixels.\n
-                    If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-    \see Fl::scrollbar_size()
-  */
-  void scrollbar_size(int newSize) {
-      if ( newSize != _scrollbar_size ) redraw();
-      _scrollbar_size = newSize;
-  }   
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  /**
-    Flag to control if Tab navigates table cells or not.
-
-    If on, Tab key navigates table cells.
-    If off, Tab key navigates fltk widget focus. (default)
-
-    As of fltk 1.3, the default behavior of the Tab key is to navigate focus off
-    of the current widget, and on to the next one.  But in some applications,
-    it's useful for Tab to be used to navigate cells in the Fl_Table.
-
-    \param [in] val If \p val is 1, Tab key navigates cells in table, not fltk widgets.<BR>
-                    If \p val is 0, Tab key will advance focus to the next fltk widget (default), and does not navigate cells in table.
-  */
-  void tab_cell_nav(int val) {
-    if ( val ) flags_ |=  TABCELLNAV;
-    else       flags_ &= ~TABCELLNAV;
-  }
-
-  /**
-    Get state of table's 'Tab' key cell navigation flag.
-
-    \returns 1 if Tab configured to navigate cells in table<br>0 to navigate widget focus (default)
-
-    \see tab_cell_nav(int)
-  */
-  int tab_cell_nav() const {
-    return(flags_ & TABCELLNAV ? 1 : 0);
-  }
-#endif
-};
-
-#endif /*_FL_TABLE_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Table_Row.H
+++ /dev/null
@@ -1,201 +1,0 @@
-//
-// "$Id$"
-//
-
-#ifndef _FL_TABLE_ROW_H
-#define _FL_TABLE_ROW_H
-
-//
-// Fl_Table_Row -- A row oriented table widget
-//
-//    A class specializing in a table of rows.
-//    Handles row-specific selection behavior.
-//
-// Copyright 2002 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to "erco at seriss dot com".
-//
-
-#include "Fl_Table.H"
-
-/**
- A table with row selection capabilities.
- 
- This class implements a simple table with the ability to select
- rows.  This widget is similar to an Fl_Browser with columns.  Most
- methods of importance will be found in the Fl_Table widget, such
- as Fl_Table::rows() and Fl_Table::cols().
- 
- To be useful it must be subclassed and at minimum the draw_cell()
- method must be overridden to provide the content of the cells. This widget
- does \em not manage the cell's data content; it is up to the parent
- class's draw_cell() method override to provide this.
- 
- Events on the cells and/or headings generate callbacks when they are 
- clicked by the user.  You control when events are generated based on
- the values you supply for Fl_Table::when().
- */
-class FL_EXPORT Fl_Table_Row : public Fl_Table {
-public:
-  enum TableRowSelectMode {
-    SELECT_NONE,		// no selection allowed
-    SELECT_SINGLE,		// single row selection
-    SELECT_MULTI		// multiple row selection (default)
-  }; 
-private:
-  // An STL-ish vector without templates
-  class FL_EXPORT CharVector {
-    char *arr;
-    int _size;
-    void init() {
-      arr = NULL;
-      _size = 0;
-    }
-    void copy(char *newarr, int newsize) {
-      size(newsize);
-      memcpy(arr, newarr, newsize * sizeof(char));
-    }
-  public:
-    CharVector() {				// CTOR
-      init();
-    }
-    ~CharVector() {				// DTOR
-      if ( arr ) free(arr);
-      arr = NULL;
-    }
-    CharVector(CharVector&o) {			// COPY CTOR
-      init();
-      copy(o.arr, o._size);
-    }
-    CharVector& operator=(CharVector&o) {	// ASSIGN
-      init();
-      copy(o.arr, o._size);
-      return(*this);
-    }
-    char operator[](int x) const {
-      return(arr[x]);
-    }
-    char& operator[](int x) {
-      return(arr[x]);
-    }
-    int size() {
-      return(_size);
-    }
-    void size(int count) {
-      if ( count != _size ) {
-        arr = (char*)realloc(arr, count * sizeof(char));
-        _size = count;
-      }
-    }
-    char pop_back() {
-      char tmp = arr[_size-1];
-      _size--;
-      return(tmp);
-    }
-    void push_back(char val) {
-      int x = _size;
-      size(_size+1);
-      arr[x] = val;
-    }
-    char back() {
-      return(arr[_size-1]);
-    }
-  };
-  CharVector _rowselect;		// selection flag for each row
-  
-  // handle() state variables.
-  //    Put here instead of local statics in handle(), so more
-  //    than one instance can exist without crosstalk between.
-  //
-  int _dragging_select;		// dragging out a selection?
-  int _last_row;
-  int _last_y;			// last event's Y position
-  int _last_push_x;		// last PUSH event's X position
-  int _last_push_y;		// last PUSH event's Y position
-  
-  TableRowSelectMode _selectmode;
-  
-protected:
-  int handle(int event);
-  int find_cell(TableContext context,		// find cell's x/y/w/h given r/c
-                int R, int C, int &X, int &Y, int &W, int &H) {
-    return(Fl_Table::find_cell(context, R, C, X, Y, W, H));
-  }
-  
-public:
-  /**
-   The constructor for the Fl_Table_Row.
-   This creates an empty table with no rows or columns,
-   with headers and row/column resize behavior disabled.
-   */   
-  Fl_Table_Row(int X, int Y, int W, int H, const char *l=0) : Fl_Table(X,Y,W,H,l) {
-    _dragging_select = 0;
-    _last_row        = -1;
-    _last_y          = -1;
-    _last_push_x     = -1;
-    _last_push_y     = -1;
-    _selectmode      = SELECT_MULTI;
-  }
-  
-  /**
-   The destructor for the Fl_Table_Row.
-   Destroys the table and its associated widgets.
-   */
-  ~Fl_Table_Row() { }
-  
-  void rows(int val);			// set number of rows
-  int rows() {				// get number of rows
-    return(Fl_Table::rows());
-  }
-  
-  /**
-   Sets the table selection mode.
-   
-   - \p Fl_Table_Row::SELECT_NONE - No selection allowed
-   - \p Fl_Table_Row::SELECT_SINGLE - Only single rows can be selected
-   - \p Fl_Table_Row::SELECT_MULTI - Multiple rows can be selected
-   */
-  void type(TableRowSelectMode val);	// set selection mode
-  
-  TableRowSelectMode type() const {	// get selection mode
-    return(_selectmode);
-  }
-  
-  /**
-   Checks to see if 'row' is selected. Returns 1 if selected, 0 if not. You can
-   change the selection of a row by clicking on it, or by using
-   select_row(row, flag)
-   */
-  int row_selected(int row);		// is row selected? (0=no, 1=yes, -1=range err)
-  
-  /**
-   Changes the selection state for 'row', depending on the value
-   of 'flag'.  0=deselected, 1=select, 2=toggle existing state.
-   */
-  int select_row(int row, int flag=1);	// select state for row: flag:0=off, 1=on, 2=toggle
-  // returns: 0=no change, 1=changed, -1=range err
-  
-  /**
-   This convenience function changes the selection state 
-   for \em all rows based on 'flag'. 0=deselect, 1=select, 2=toggle existing state.
-   */
-  void select_all_rows(int flag=1);	// all rows to a known state
-  
-  void clear() {
-    rows(0);		// implies clearing selection
-    cols(0);
-    Fl_Table::clear();	// clear the table
-  }
-};
-
-#endif /*_FL_TABLE_ROW_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tabs.H
+++ /dev/null
@@ -1,246 +1,0 @@
-//
-// "$Id$"
-//
-// Tab header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tabs widget . */
-
-#ifndef Fl_Tabs_H
-#define Fl_Tabs_H
-
-#include "Fl_Group.H"
-
-/**
-  The Fl_Tabs widget is the "file card tabs"
-  interface that allows you to put lots and lots of buttons and
-  switches in a panel, as popularized by many toolkits.
-  
-  \image html  tabs.png
-  \image latex tabs.png "Fl_Tabs" width=8cm
-  
-  Clicking the tab makes a child visible() by calling
-  show() on it, and all other children are made invisible
-  by calling hide() on them. Usually the children are Fl_Group widgets
-  containing several widgets themselves.
-  
-  Each child makes a card, and its label() is printed
-  on the card tab, including the label font and style.  The
-  selection color of that child is used to color the tab, while
-  the color of the child determines the background color of the pane.
-  
-  The size of the tabs is controlled by the bounding box of the
-  children (there should be some space between the children and
-  the edge of the Fl_Tabs), and the tabs may be placed
-  "inverted" on the bottom - this is determined by which
-  gap is larger. It is easiest to lay this out in fluid, using the
-  fluid browser to select each child group and resize them until
-  the tabs look the way you want them to.
-  
-  The background area behind and to the right of the tabs is
-  "transparent", exposing the background detail of the parent. The
-  value of Fl_Tabs::box() does not affect this area. So if Fl_Tabs is
-  resized by itself without the parent, force the appropriate parent
-  (visible behind the tabs) to redraw() to prevent artifacts.
-
-  See "Resizing Caveats" below on how to keep tab heights constant.
-  See "Callback's Use Of when()" on how to control the details
-  of how clicks invoke the callback().
-
-  A typical use of the Fl_Tabs widget:
-
-  \par
-  \code
-      // Typical use of Fl_Tabs
-      Fl_Tabs *tabs = new Fl_Tabs(10,10,300,200);
-      {
-          Fl_Group *grp1 = new Fl_Group(20,30,280,170,"Tab1");
-	  {
-	      ..widgets that go in tab#1..
-          }
-	  grp1->end();
-          Fl_Group *grp2 = new Fl_Group(20,30,280,170,"Tab2");
-	  {
-	      ..widgets that go in tab#2..
-	  }
-	  grp2->end();
-      }
-      tabs->end();
-  \endcode
-
-  \b Default \b Appearance
-
-  The appearance of each "tab" is taken from the label() and color() of the
-  child group corresponding to that "tab" and panel. Where the "tabs" appear
-  depends on the position and size of the child groups that make up the
-  panels within the Fl_Tab, i.e. whether there is more space above or
-  below them. The height of the "tabs" depends on how much free space
-  is available.
-
-  \image html  tabs_default.png "Fl_Tabs Default Appearance"
-  \image latex tabs_default.png "Fl_Tabs Default Appearance" width=8cm
-
-  \b Highlighting \b The \b Selected \b Tab
-
-  The selected "tab" can be highlighted further by setting the
-  selection_color() of the Fl_Tab itself, e.g.
-
-  \par
-  \code
-  ..
-  tabs = new Fl_Tabs(..);
-  tabs->selection_color(FL_DARK3);
-  ..
-  \endcode
-
-  The result of the above looks like:
-  \image html  tabs_selection.png "Highlighting the selected tab"
-  \image latex tabs_selection.png "Highlighting the selected tab" width=8cm
-
-  \b Uniform \b Tab \b and \b Panel \b Appearance
-
-  In order to have uniform tab and panel appearance, not only must the color()
-  and selection_color() for each child group be set, but also the 
-  selection_color() of the Fl_Tab itself any time a new "tab" is selected.
-  This can be achieved within the Fl_Tab callback, e.g.
-
-  \par
-  \code
-  void MyTabCallback(Fl_Widget *w, void*) {
-    Fl_Tabs *tabs = (Fl_Tabs*)w;
-    // When tab changed, make sure it has same color as its group
-    tabs->selection_color( (tab->value())->color() );
-  }
-  ..
-  int main(..) {
-    // Define tabs widget
-    tabs = new Fl_Tabs(..);
-    tabs->callback(MyTabCallback);
-
-    // Create three tabs each colored differently
-    grp1 = new Fl_Group(.. "One");
-     grp1->color(9);
-     grp1->selection_color(9);
-    grp1->end();
-
-    grp2 = new Fl_Group(.. "Two");
-     grp2->color(10);
-     grp2->selection_color(10);
-    grp2->end();
-
-    grp3 = new Fl_Group(.. "Three");
-     grp3->color(14);
-     grp3->selection_color(14);
-    grp3->end();
-    ..
-    // Make sure default tab has same color as its group
-    tabs->selection_color( (tab->value())->color() );
-    ..
-    return Fl::run();
-  }
-  \endcode
-
-  The result of the above looks like:
-  \image html  tabs_uniform.png "Fl_Tabs with uniform colors"
-  \image latex tabs_uniform.png "Fl_Tabs with uniform colors" width=8cm
-
-  \b Resizing \b Caveats
-
-  When Fl_Tabs is resized vertically, the default behavior scales the
-  tab's height as well as its children.  To keep the tab height constant
-  during resizing, set the tab widget's resizable() to one of the tab's
-  child groups, i.e.
-
-  \par
-  \code
-    tabs = new Fl_Tabs(..);
-    grp1 = new Fl_Group(..);
-    ..
-    grp2 = new Fl_Group(..);
-    ..
-    tabs->end();
-    tabs->resizable(grp1);	// keeps tab height constant
-  \endcode
-
-  \par Callback's Use Of when()
-
-  As of FLTK 1.3.3, Fl_Tabs() supports the following flags for when():
-
-    - \ref FL_WHEN_NEVER       -- callback never invoked (all flags off)
-    - \ref FL_WHEN_CHANGED     -- if flag set, invokes callback when a tab has been changed (on click or keyboard navigation)
-    - \ref FL_WHEN_NOT_CHANGED -- if flag set, invokes callback when the tabs remain unchanged (on click or keyboard navigation)
-    - \ref FL_WHEN_RELEASE     -- if flag set, invokes callback on RELEASE of mouse button or keyboard navigation
-
-  Notes:
-
-    -#  The above flags can be logically OR-ed (|) or added (+) to combine behaviors.
-    -#  The default value for when() is \ref FL_WHEN_RELEASE (inherited from Fl_Widget).
-    -#  If \ref FL_WHEN_RELEASE is the \em only flag specified, 
-        the behavior will be as if (\ref FL_WHEN_RELEASE|\ref FL_WHEN_CHANGED) was specified.
-    -#  The value of changed() will be valid during the callback.
-    -#  If both \ref FL_WHEN_CHANGED and \ref FL_WHEN_NOT_CHANGED are specified, 
-        the callback is invoked whether the tab has been changed or not.
-	The changed() method can be used to determine the cause.
-    -#  \ref FL_WHEN_NOT_CHANGED can happen if someone clicks on an already selected tab,
-        or if a keyboard navigation attempt results in no change to the tabs,
-	such as using the arrow keys while at the left or right end of the tabs.
-*/
-class FL_EXPORT Fl_Tabs : public Fl_Group {
-#if FLTK_ABI_VERSION >= 10304
-  // NEW (nothing)
-#else
-  // OLD (maintained for ABI compat)
-  Fl_Widget *value_;	// NOTE: this member no longer used -- STR #3169
-#endif
-  Fl_Widget *push_;
-  int *tab_pos;		// array of x-offsets of tabs per child + 1
-  int *tab_width;	// array of widths of tabs per child + 1
-  int tab_count;	// array size
-  int tab_positions();	// allocate and calculate tab positions
-  void clear_tab_positions();
-  int tab_height();
-  void draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int sel=0);
-protected:
-  void redraw_tabs();
-  void draw();
-
-public:
-  int handle(int);
-  Fl_Widget *value();
-  int value(Fl_Widget *);
-  /**
-    Returns the tab group for the tab the user has currently down-clicked on
-    and remains over until FL_RELEASE. Otherwise, returns NULL.
-
-    While the user is down-clicked on a tab, the return value is the tab group
-    for that tab. But as soon as the user releases, or drags off the tab with
-    the button still down, the return value will be NULL.
-
-    \see push(Fl_Widget*).
-  */
-  Fl_Widget *push() const {return push_;}
-  int push(Fl_Widget *);
-  Fl_Tabs(int,int,int,int,const char * = 0);
-  Fl_Widget *which(int event_x, int event_y);
-  ~Fl_Tabs();
-  void client_area(int &rx, int &ry, int &rw, int &rh, int tabh=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Text_Buffer.H
+++ /dev/null
@@ -1,805 +1,0 @@
-//
-// "$Id$"
-//
-// Header file for Fl_Text_Buffer class.
-//
-// Copyright 2001-2016 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
- Fl_Text_Buffer, Fl_Text_Selection widget . */
-
-#ifndef FL_TEXT_BUFFER_H
-#define FL_TEXT_BUFFER_H
-
-
-#undef ASSERT_UTF8
-
-#ifdef ASSERT_UTF8
-# include <assert.h>
-# define IS_UTF8_ALIGNED(a) if (a && *a) assert(fl_utf8len(*(a))>0);
-# define IS_UTF8_ALIGNED2(a, b) if (b>=0 && b<a->length()) assert(fl_utf8len(a->byte_at(b))>0);
-#else
-# define IS_UTF8_ALIGNED(a)
-# define IS_UTF8_ALIGNED2(a, b)
-#endif
-
-
-/*
- "character size" is the size of a UTF-8 character in bytes
- "character width" is the width of a Unicode character in pixels
- "column" was orginally defined as a character offset from the left margin.
- It was identical to the byte offset. In UTF-8, we have neither a byte offset
- nor truly fixed width fonts (*). Column could be a pixel value multiplied with
- an average character width (which is a bearable approximation).
-
- * in Unicode, there are no fixed width fonts! Even if the ASCII characters may
-   happen to be all the same width in pixels, Chinese characters surely are not.
-   There are plenty of exceptions, like ligatures, that make special handling of
-   "fixed" character widths a nightmare. I decided to remove all references to
-   fixed fonts and see "columns" as a multiple of the average width of a
-   character in the main font.
-     - Matthias
- */
-
-
-/* Maximum length in characters of a tab or control character expansion
-   of a single buffer character */
-#define FL_TEXT_MAX_EXP_CHAR_LEN 20
-
-#include "Fl_Export.H"
-
-
-/**
- \class Fl_Text_Selection
- \brief This is an internal class for Fl_Text_Buffer to manage text selections.
- This class works correctly with UTF-8 strings assuming that the parameters
- for all calls are on character boundaries.
- */
-class FL_EXPORT Fl_Text_Selection {
-  friend class Fl_Text_Buffer;
-
-public:
-
-  /**
-   \brief Set the selection range.
-   \param start byte offset to first selected character
-   \param end byte offset pointing after last selected character
-   */
-  void set(int start, int end);
-
-  /**
-   \brief Updates a selection after text was modified.
-
-   Updates an individual selection for changes in the corresponding text
-   \param pos byte offset into text buffer at which the change occurred
-   \param nDeleted number of bytes deleted from the buffer
-   \param nInserted number of bytes inserted into the buffer
-   */
-  void update(int pos, int nDeleted, int nInserted);
-
-  /**
-   \brief Return the byte offset to the first selected character.
-   \return byte offset
-   */
-  int start() const { return mStart; }
-
-  /**
-   \brief Return the byte offset to the character after the last selected character.
-   \return byte offset
-   */
-  int end() const { return mEnd; }
-
-  /**
-   \brief Returns true if any text is selected.
-   \return a non-zero number if any text has been selected, or 0
-   if no text is selected.
-   */
-  bool selected() const { return mSelected; }
-
-  /**
-   \brief Modify the 'selected' flag.
-   \param b new flag
-   */
-  void selected(bool b) { mSelected = b; }
-
-  /**
-   Return true if position \p pos with indentation \p dispIndex is in
-   the Fl_Text_Selection.
-   */
-  int includes(int pos) const;
-
-  /**
-   \brief Return the positions of this selection.
-   \param start return byte offset to first selected character
-   \param end return byte offset pointing after last selected character
-   \return true if selected
-   */
-  int position(int* start, int* end) const;
-
-protected:
-
-  int mStart;         ///< byte offset to the first selected character
-  int mEnd;           ///< byte offset to the character after the last selected character
-  bool mSelected;     ///< this flag is set if any text is selected
-};
-
-
-typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
-                                  int nRestyled, const char* deletedText,
-                                  void* cbArg);
-
-
-typedef void (*Fl_Text_Predelete_Cb)(int pos, int nDeleted, void* cbArg);
-
-
-/**
- \brief This class manages Unicode text displayed in one or more Fl_Text_Display widgets.
-
- All text in Fl_Text_Buffer must be encoded in UTF-8. All indices used in the
- function calls must be aligned to the start of a UTF-8 sequence. All indices
- and pointers returned will be aligned. All functions that return a single
- character will return that in an unsiged int in UCS-4 encoding.
-
- The Fl_Text_Buffer class is used by the Fl_Text_Display
- and Fl_Text_Editor to manage complex text data and is based upon the
- excellent NEdit text editor engine - see http://www.nedit.org/.
- */
-class FL_EXPORT Fl_Text_Buffer {
-public:
-
-  /**
-   Create an empty text buffer of a pre-determined size.
-   \param requestedSize use this to avoid unnecessary re-allocation
-    if you know exactly how much the buffer will need to hold
-   \param preferredGapSize Initial size for the buffer gap (empty space
-    in the buffer where text might be inserted
-    if the user is typing sequential characters)
-   */
-  Fl_Text_Buffer(int requestedSize = 0, int preferredGapSize = 1024);
-
-  /**
-   Frees a text buffer
-   */
-  ~Fl_Text_Buffer();
-
-  /**
-   \brief Returns the number of bytes in the buffer.
-   \return size of text in bytes
-   */
-  int length() const { return mLength; }
-
-  /**
-   \brief Get a copy of the entire contents of the text buffer.
-   Memory is allocated to contain the returned string, which the caller
-   must free.
-   \return newly allocated text buffer - must be free'd, text is UTF-8
-   */
-  char* text() const;
-
-  /**
-   Replaces the entire contents of the text buffer.
-   \param text Text must be valid UTF-8. If null, an empty string is substituted.
-   */
-  void text(const char* text);
-
-  /**
-   \brief Get a copy of a part of the text buffer.
-   Return a copy of the text between \p start and \p end character positions
-   from text buffer \p buf. Positions start at 0, and the range does not
-   include the character pointed to by \p end.
-   When you are done with the text, free it using the free() function.
-   \param start byte offset to first character
-   \param end byte offset after last character in range
-   \return newly allocated text buffer - must be free'd, text is UTF-8
-   */
-  char* text_range(int start, int end) const;
-
-  /**
-   Returns the character at the specified position \p pos in the buffer.
-   Positions start at 0.
-   \param pos byte offset into buffer, \p pos must be at a UTF-8 character boundary
-   \return Unicode UCS-4 encoded character
-   */
-  unsigned int char_at(int pos) const;
-
-  /**
-   Returns the raw byte at the specified position pos in the buffer.
-   Positions start at 0.
-   \param pos byte offset into buffer
-   \return unencoded raw byte
-   */
-  char byte_at(int pos) const;
-
-  /**
-   Convert a byte offset in buffer into a memory address.
-   \param pos byte offset into buffer
-   \return byte offset converted to a memory address
-   */
-  const char *address(int pos) const
-  { return (pos < mGapStart) ? mBuf+pos : mBuf+pos+mGapEnd-mGapStart; }
-
-  /**
-   Convert a byte offset in buffer into a memory address.
-   \param pos byte offset into buffer
-   \return byte offset converted to a memory address
-   */
-  char *address(int pos)
-  { return (pos < mGapStart) ? mBuf+pos : mBuf+pos+mGapEnd-mGapStart; }
-
-  /**
-   Inserts null-terminated string \p text at position \p pos.
-   \param pos insertion position as byte offset (must be UTF-8 character aligned)
-   \param text UTF-8 encoded and nul terminated text
-   */
-  void insert(int pos, const char* text);
-
-  /**
-   Appends the text string to the end of the buffer.
-   \param t UTF-8 encoded and nul terminated text
-   */
-  void append(const char* t) { insert(length(), t); }
-
-  /**
-   Deletes a range of characters in the buffer.
-   \param start byte offset to first character to be removed
-   \param end byte offset to character after last character to be removed
-   */
-  void remove(int start, int end);
-
-  /**
-   Deletes the characters between \p start and \p end, and inserts the
-   null-terminated string \p text in their place in the buffer.
-   \param start byte offset to first character to be removed and new insert position
-   \param end byte offset to character after last character to be removed
-   \param text UTF-8 encoded and nul terminated text
-   */
-  void replace(int start, int end, const char *text);
-
-  /**
-   Copies text from another Fl_Text_Buffer to this one.
-   \param fromBuf source text buffer, may be the same as this
-   \param fromStart byte offset into buffer
-   \param fromEnd byte offset into buffer
-   \param toPos destination byte offset into buffer
-   */
-  void copy(Fl_Text_Buffer* fromBuf, int fromStart, int fromEnd, int toPos);
-
-  /**
-   Undo text modification according to the undo variables or insert text
-   from the undo buffer
-   */
-  int undo(int *cp=0);
-
-  /**
-   Lets the undo system know if we can undo changes
-   */
-  void canUndo(char flag=1);
-
-  /**
-   Inserts a file at the specified position.
-   Returns
-    - 0 on success
-    - non-zero on error (strerror() contains reason)
-    - 1 indicates open for read failed (no data loaded)
-    - 2 indicates error occurred while reading data (data was partially loaded)
-
-   File can be UTF-8 or CP1252 encoded.
-   If the input file is not UTF-8 encoded, the Fl_Text_Buffer widget will
-   contain data transcoded to UTF-8. By default, the message
-   Fl_Text_Buffer::file_encoding_warning_message
-   will warn the user about this.
-   \see input_file_was_transcoded and transcoding_warning_action.
-   */
-  int insertfile(const char *file, int pos, int buflen = 128*1024);
-
-  /**
-   Appends the named file to the end of the buffer. See also insertfile().
-   */
-  int appendfile(const char *file, int buflen = 128*1024)
-  { return insertfile(file, length(), buflen); }
-
-  /**
-   Loads a text file into the buffer. See also insertfile().
-   */
-  int loadfile(const char *file, int buflen = 128*1024)
-  { select(0, length()); remove_selection(); return appendfile(file, buflen); }
-
-  /**
-   Writes the specified portions of the text buffer to a file.
-   Returns
-    - 0 on success
-    - non-zero on error (strerror() contains reason)
-    - 1 indicates open for write failed (no data saved)
-    - 2 indicates error occurred while writing data (data was partially saved)
-
-   \see savefile(const char *file, int buflen)
-   */
-  int outputfile(const char *file, int start, int end, int buflen = 128*1024);
-
-  /**
-   Saves a text file from the current buffer.
-   Returns
-    - 0 on success
-    - non-zero on error (strerror() contains reason)
-    - 1 indicates open for write failed (no data saved)
-    - 2 indicates error occurred while writing data (data was partially saved)
-
-   \see outputfile(const char *file, int start, int end, int buflen)
-   */
-  int savefile(const char *file, int buflen = 128*1024)
-  { return outputfile(file, 0, length(), buflen); }
-
-  /**
-   Gets the tab width.
-
-   The tab width is measured in characters. The pixel position is
-   calculated using an average character width.
-   */
-  int tab_distance() const { return mTabDist; }
-
-  /**
-   Set the hardware tab distance (width) used by all displays for this buffer,
-   and used in computing offsets for rectangular selection operations.
-   */
-  void tab_distance(int tabDist);
-
-  /**
-   Selects a range of characters in the buffer.
-   */
-  void select(int start, int end);
-
-  /**
-   Returns a non-zero value if text has been selected, 0 otherwise.
-   */
-  int selected() const { return mPrimary.selected(); }
-
-  /**
-   Cancels any previous selection on the primary text selection object.
-   */
-  void unselect();
-
-  /**
-   Gets the selection position.
-   */
-  int selection_position(int* start, int* end);
-
-  /**
-   Returns the currently selected text.
-
-   When you are done with the text, free it using the free() function.
-   */
-  char* selection_text();
-
-  /**
-   Removes the text in the primary selection.
-   */
-  void remove_selection();
-
-  /**
-   Replaces the text in the primary selection.
-   */
-  void replace_selection(const char* text);
-
-  /**
-   Selects a range of characters in the secondary selection.
-   */
-  void secondary_select(int start, int end);
-
-  /**
-   Returns a non-zero value if text has been selected in the secondary
-   text selection, 0 otherwise.
-   */
-  int secondary_selected() { return mSecondary.selected(); }
-
-  /**
-   Clears any selection in the secondary text selection object.
-   */
-  void secondary_unselect();
-
-  /**
-   Returns the current selection in the secondary text selection object.
-   */
-  int secondary_selection_position(int* start, int* end);
-
-  /**
-   Returns the text in the secondary selection.
-
-   When you are done with the text, free it using the free() function.
-   */
-  char* secondary_selection_text();
-
-  /**
-   Removes the text from the buffer corresponding to the secondary text
-   selection object.
-   */
-  void remove_secondary_selection();
-
-  /**
-   Replaces the text from the buffer corresponding to the secondary
-   text selection object with the new string \p text.
-   */
-  void replace_secondary_selection(const char* text);
-
-  /**
-   Highlights the specified text within the buffer.
-   */
-  void highlight(int start, int end);
-
-  /**
-   Returns the highlighted text.
-
-   When you are done with the text, free it using the free() function.
-   */
-  int highlight() { return mHighlight.selected(); }
-
-  /**
-   Unhighlights text in the buffer.
-   */
-  void unhighlight();
-
-  /**
-   Highlights the specified text between \p start and \p end within the buffer.
-   */
-  int highlight_position(int* start, int* end);
-
-  /**
-   Returns the highlighted text.
-
-   When you are done with the text, free it using the free() function.
-   */
-  char* highlight_text();
-
-  /**
-   Adds a callback function that is called whenever the text buffer is modified.
-
-   The callback function is declared as follows:
-
-   \code
-   typedef void (*Fl_Text_Modify_Cb)(int pos, int nInserted, int nDeleted,
-      int nRestyled, const char* deletedText,
-      void* cbArg);
-   \endcode
-   */
-  void add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
-
-  /**
-   Removes a modify callback.
-   */
-  void remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, void* cbArg);
-
-  /**
-   Calls all modify callbacks that have been registered using
-   the add_modify_callback() method.
-   */
-  void call_modify_callbacks() { call_modify_callbacks(0, 0, 0, 0, 0); }
-
-  /**
-   Adds a callback routine to be called before text is deleted from the buffer.
-   */
-  void add_predelete_callback(Fl_Text_Predelete_Cb bufPredelCB, void* cbArg);
-
-  /**
-   Removes a callback routine \p bufPreDeleteCB associated with argument \p cbArg
-   to be called before text is deleted from the buffer.
-   */
-  void remove_predelete_callback(Fl_Text_Predelete_Cb predelCB, void* cbArg);
-
-  /**
-   Calls the stored pre-delete callback procedure(s) for this buffer to update
-   the changed area(s) on the screen and any other listeners.
-   */
-  void call_predelete_callbacks() { call_predelete_callbacks(0, 0); }
-
-  /**
-   Returns the text from the entire line containing the specified
-   character position.
-
-   When you are done with the text, free it using the free() function.
-   \param pos byte index into buffer
-   \return copy of UTF-8 text, must be free'd
-   */
-  char* line_text(int pos) const;
-
-  /**
-   Returns the position of the start of the line containing position \p pos.
-   \param pos byte index into buffer
-   \return byte offset to line start
-   */
-  int line_start(int pos) const;
-
-  /**
-   Finds and returns the position of the end of the line containing position
-   \p pos (which is either a pointer to the newline character ending the line
-   or a pointer to one character beyond the end of the buffer).
-   \param pos byte index into buffer
-   \return byte offset to line end
-   */
-  int line_end(int pos) const;
-
-  /**
-   Returns the position corresponding to the start of the word.
-   \param pos byte index into buffer
-   \return byte offset to word start
-   */
-  int word_start(int pos) const;
-
-  /**
-   Returns the position corresponding to the end of the word.
-   \param pos byte index into buffer
-   \return byte offset to word end
-   */
-  int word_end(int pos) const;
-
-  /**
-   Count the number of displayed characters between buffer position
-   \p lineStartPos and \p targetPos.
-
-   Displayed characters are the characters shown on the screen to represent
-   characters in the buffer, where tabs and control characters are expanded.
-   */
-  int count_displayed_characters(int lineStartPos, int targetPos) const;
-
-  /**
-   Count forward from buffer position \p startPos in displayed characters.
-
-   Displayed characters are the characters shown on the screen to represent
-   characters in the buffer, where tabs and control characters are expanded.
-   \param lineStartPos byte offset into buffer
-   \param nChars number of bytes that are sent to the display
-   \return byte offset in input after all output bytes are sent
-   */
-  int skip_displayed_characters(int lineStartPos, int nChars);
-
-  /**
-   Counts the number of newlines between \p startPos and \p endPos in buffer.
-   The character at position \p endPos is not counted.
-   */
-  int count_lines(int startPos, int endPos) const;
-
-  /**
-   Finds the first character of the line \p nLines forward from \p startPos
-   in the buffer and returns its position.
-   */
-  int skip_lines(int startPos, int nLines);
-
-  /**
-   Finds and returns the position of the first character of the line \p nLines
-   backwards from \p startPos (not counting the character pointed to by
-   \p startpos if that is a newline) in the buffer.
-   \p nLines == 0 means find the beginning of the line.
-   */
-  int rewind_lines(int startPos, int nLines);
-
-  /**
-   Finds the next occurrence of the specified character.
-   Search forwards in buffer for character \p searchChar, starting
-   with the character \p startPos, and returning the result in \p foundPos.
-   Returns 1 if found, 0 if not.
-   The difference between this and search_forward() is that it's optimized
-   for single characters. The overall performance of the text widget is
-   dependent on its ability to count lines quickly, hence searching for a
-   single character: newline.
-   \param startPos byte offset to start position
-   \param searchChar UCS-4 character that we want to find
-   \param foundPos byte offset where the character was found
-   \return 1 if found, 0 if not
-   */
-  int findchar_forward(int startPos, unsigned searchChar, int* foundPos) const;
-
-  /**
-   Search backwards in buffer \p buf for character \p searchChar, starting
-   with the character \e before \p startPos, returning the result in \p foundPos.
-
-   Returns 1 if found, 0 if not.  The difference between this and
-   search_backward() is that it's optimized for single characters.  The
-   overall performance of the text widget is dependent on its ability to
-   count lines quickly, hence searching for a single character: newline.
-   \param startPos byte offset to start position
-   \param searchChar UCS-4 character that we want to find
-   \param foundPos byte offset where the character was found
-   \return 1 if found, 0 if not
-   */
-  int findchar_backward(int startPos, unsigned int searchChar, int* foundPos) const;
-
-  /**
-   Search forwards in buffer for string \p searchString, starting with the
-   character \p startPos, and returning the result in \p foundPos.
-
-   Returns 1 if found, 0 if not.
-   \param startPos byte offset to start position
-   \param searchString UTF-8 string that we want to find
-   \param foundPos byte offset where the string was found
-   \param matchCase if set, match character case
-   \return 1 if found, 0 if not
-   */
-  int search_forward(int startPos, const char* searchString, int* foundPos,
-                     int matchCase = 0) const;
-
-  /**
-   Search backwards in buffer for string \p searchString, starting with
-   the character \e at \p startPos, returning the result in \p foundPos.
-
-   Returns 1 if found, 0 if not.
-   \param startPos byte offset to start position
-   \param searchString UTF-8 string that we want to find
-   \param foundPos byte offset where the string was found
-   \param matchCase if set, match character case
-   \return 1 if found, 0 if not
-   */
-  int search_backward(int startPos, const char* searchString, int* foundPos,
-                      int matchCase = 0) const;
-
-  /**
-   Returns the primary selection.
-   */
-  const Fl_Text_Selection* primary_selection() const { return &mPrimary; }
-
-  /**
-   Returns the primary selection.
-   */
-  Fl_Text_Selection* primary_selection() { return &mPrimary; }
-
-  /**
-   Returns the secondary selection.
-   */
-  const Fl_Text_Selection* secondary_selection() const { return &mSecondary; }
-
-  /**
-   Returns the current highlight selection.
-   */
-  const Fl_Text_Selection* highlight_selection() const { return &mHighlight; }
-
-  /**
-   Returns the index of the previous character.
-   \param ix index to the current character
-   */
-  int prev_char(int ix) const;
-  int prev_char_clipped(int ix) const;
-
-  /**
-   Returns the index of the next character.
-   \param ix index to the current character
-   */
-  int next_char(int ix) const;
-  int next_char_clipped(int ix) const;
-
-  /**
-   Align an index into the buffer to the current or previous UTF-8 boundary.
-   */
-  int utf8_align(int) const;
-
-  /**
-   \brief true if the loaded file has been transcoded to UTF-8.
-   */
-  int input_file_was_transcoded;
-
-  /** This message may be displayed using the fl_alert() function when a file
-   which was not UTF-8 encoded is input.
-   */
-  static const char* file_encoding_warning_message;
-
-  /**
-   \brief Pointer to a function called after reading a non UTF-8 encoded file.
-
-   This function is called after reading a file if the file content
-   was transcoded to UTF-8. Its default implementation calls fl_alert()
-   with the text of \ref file_encoding_warning_message. No warning message is
-   displayed if this pointer is set to NULL. Use \ref input_file_was_transcoded
-   to be informed if file input required transcoding to UTF-8.
-   */
-  void (*transcoding_warning_action)(Fl_Text_Buffer*);
-
-protected:
-
-  /**
-   Calls the stored modify callback procedure(s) for this buffer to update the
-   changed area(s) on the screen and any other listeners.
-   */
-  void call_modify_callbacks(int pos, int nDeleted, int nInserted,
-                             int nRestyled, const char* deletedText) const;
-
-  /**
-   Calls the stored pre-delete callback procedure(s) for this buffer to update
-   the changed area(s) on the screen and any other listeners.
-   */
-  void call_predelete_callbacks(int pos, int nDeleted) const;
-
-  /**
-   Internal (non-redisplaying) version of insert().
-
-   Returns the length of text inserted (this is just strlen(\p text), however
-   this calculation can be expensive and the length will be required by any
-   caller who will continue on to call redisplay). \p pos must be contiguous
-   with the existing text in the buffer (i.e. not past the end).
-   \return the number of bytes inserted
-   */
-  int insert_(int pos, const char* text);
-
-  /**
-   Internal (non-redisplaying) version of remove().
-
-   Removes the contents of the buffer between \p start and \p end (and moves
-   the gap to the site of the delete).
-   */
-  void remove_(int start, int end);
-
-  /**
-   Calls the stored redisplay procedure(s) for this buffer to update the
-   screen for a change in a selection.
-   */
-  void redisplay_selection(Fl_Text_Selection* oldSelection,
-                           Fl_Text_Selection* newSelection) const;
-
-  /**
-   Move the gap to start at a new position.
-   */
-  void move_gap(int pos);
-
-  /**
-   Reallocates the text storage in the buffer to have a gap starting at \p newGapStart
-   and a gap size of \p newGapLen, preserving the buffer's current contents.
-   */
-  void reallocate_with_gap(int newGapStart, int newGapLen);
-
-  char* selection_text_(Fl_Text_Selection* sel) const;
-
-  /**
-   Removes the text from the buffer corresponding to \p sel.
-   */
-  void remove_selection_(Fl_Text_Selection* sel);
-
-  /**
-   Replaces the \p text in selection \p sel.
-   */
-  void replace_selection_(Fl_Text_Selection* sel, const char* text);
-
-  /**
-   Updates all of the selections in the buffer for changes in the buffer's text
-   */
-  void update_selections(int pos, int nDeleted, int nInserted);
-
-  Fl_Text_Selection mPrimary;     /**< highlighted areas */
-  Fl_Text_Selection mSecondary;   /**< highlighted areas */
-  Fl_Text_Selection mHighlight;   /**< highlighted areas */
-  int mLength;                    /**< length of the text in the buffer (the length
-                                       of the buffer itself must be calculated:
-                                       gapEnd - gapStart + length) */
-  char* mBuf;                     /**< allocated memory where the text is stored */
-  int mGapStart;                  /**< points to the first character of the gap */
-  int mGapEnd;                    /**< points to the first character after the gap */
-  // The hardware tab distance used by all displays for this buffer,
-  // and used in computing offsets for rectangular selection operations.
-  int mTabDist;                   /**< equiv. number of characters in a tab */
-  int mNModifyProcs;              /**< number of modify-redisplay procs attached */
-  Fl_Text_Modify_Cb *mModifyProcs;/**< procedures to call when buffer is
-                                       modified to redisplay contents */
-  void** mCbArgs;                 /**< caller arguments for modifyProcs above */
-  int mNPredeleteProcs;           /**< number of pre-delete procs attached */
-  Fl_Text_Predelete_Cb *mPredeleteProcs; /**< procedure to call before text is deleted
-                                       from the buffer; at most one is supported. */
-  void **mPredeleteCbArgs;        /**< caller argument for pre-delete proc above */
-  int mCursorPosHint;             /**< hint for reasonable cursor position after
-                                       a buffer modification operation */
-  char mCanUndo;                  /**< if this buffer is used for attributes, it must
-                                       not do any undo calls */
-  int mPreferredGapSize;          /**< the default allocation for the text gap is 1024
-                                       bytes and should only be increased if frequent
-                                       and large changes in buffer size are expected */
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Text_Display.H
+++ /dev/null
@@ -1,543 +1,0 @@
-//
-// "$Id$"
-//
-// Header file for Fl_Text_Display class.
-//
-// Copyright 2001-2016 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
- Fl_Text_Display widget . */
-
-#ifndef FL_TEXT_DISPLAY_H
-#define FL_TEXT_DISPLAY_H
-
-#include "fl_draw.H"
-#include "Fl_Group.H"
-#include "Fl_Widget.H"
-#include "Fl_Scrollbar.H"
-#include "Fl_Text_Buffer.H"
-
-/**
- \brief Rich text display widget.
- 
- This is the FLTK text display widget. It allows the user to view
- multiple lines of text and supports highlighting, word wrap, mixes
- of font faces and colors, line numbers and scrolling.  The buffer
- that is displayed in the widget is managed by the Fl_Text_Buffer
- class. A single Text Buffer can be displayed by multiple Text
- Displays.
-
- \image html editor.png "Fl_Text_Display widget"
- \image latex editor.png "Fl_Text_Display widget" width=6cm
- <BR><BR>
- \image html editor-linenumbers.png "Fl_Text_Display widget with line numbers enabled"
- \image latex editor-linenumbers.png "Fl_Text_Display widget with line numbers enabled" width=6cm
-
- \b Example \b Use
- \code
-     #include <FL/FL_Text_Display.H>
-     ..
-     int main() {
-         ..
-         Fl_Text_Buffer *buff = new Fl_Text_Buffer();
-         Fl_Text_Display *disp = new Fl_Text_Display(10, 10, 640, 480);
-         disp->buffer(buff);                 // attach text buffer to display widget
-         buff->text("line one\nline two");   // add some text to buffer
-	 ..
-     }
- \endcode
-
- \b Features
-
- - Word wrap: wrap_mode(), wrapped_column(), wrapped_row()
- - Font control: textfont(), textsize(), textcolor()
- - Font styling: highlight_data()
- - Cursor: cursor_style(), show_cursor(), hide_cursor(), cursor_color()
- - Line numbers: linenumber_width(), linenumber_font(),
-   linenumber_size(), linenumber_fgcolor(), linenumber_bgcolor(),
-   linenumber_align(), linenumber_format()
-
- Note that other features may be available via Fl_Text_Editor
- and Fl_Text_Buffer classes.
-
- \note Line numbers were added in 1.3.3. To avoid breaking ABI,
-       many of its options are read only. To adjust these features
-       in 1.3.x, you must build FLTK with FLTK_ABI_VERSION set to 10303
-       or higher.
-
- */
-class FL_EXPORT Fl_Text_Display: public Fl_Group {
-
-public:
-  
-  /** 
-   text display cursor shapes enumeration 
-   */
-  enum {
-    NORMAL_CURSOR,    /**< I-beam */
-    CARET_CURSOR,     /**< caret under the text */
-    DIM_CURSOR,       /**< dim I-beam */
-    BLOCK_CURSOR,     /**< unfille box under the current character */
-    HEAVY_CURSOR,     /**< thick I-beam */
-    SIMPLE_CURSOR    /**< as cursor as Fl_Input cursor */
-  };
-  
-  /**
-   the character position is the left edge of a character, whereas 
-   the cursor is thought to be between the centers of two consecutive
-   characters.
-   */
-  enum {
-    CURSOR_POS, 
-    CHARACTER_POS
-  };
-  
-  /** 
-   drag types - they match Fl::event_clicks() so that single clicking to
-   start a collection selects by character, double clicking selects by
-   word and triple clicking selects by line.
-   */
-  enum {
-    DRAG_NONE = -2,
-    DRAG_START_DND = -1,
-    DRAG_CHAR = 0, 
-    DRAG_WORD = 1, 
-    DRAG_LINE = 2
-  };
-  
-  /**
-   wrap types - used in wrap_mode()
-   */
-  enum {
-    WRAP_NONE,      /**< don't wrap text at all */
-    WRAP_AT_COLUMN, /**< wrap text at the given text column */
-    WRAP_AT_PIXEL,  /**< wrap text at a pixel position */
-    WRAP_AT_BOUNDS  /**< wrap text so that it fits into the widget width */
-  };    
-  
-  friend void fl_text_drag_me(int pos, Fl_Text_Display* d);
-  
-  typedef void (*Unfinished_Style_Cb)(int, void *);
-  
-  /** 
-   This structure associates the color, font, and font size of a string to draw
-   with an attribute mask matching attr.
-
-   There must be one entry for each style that can be used in an
-   Fl_Text_Display for displaying text. The style table is an array of
-   struct Style_Table_Entry.
-
-   The style table is associated with an Fl_Text_Display by using
-   Fl_Text_Display::highlight_data().
-   
-   \see Fl_Text_Display::highlight_data()
-   */
-  struct Style_Table_Entry {
-    Fl_Color    color;	///< text color
-    Fl_Font     font;	///< text font
-    Fl_Fontsize size;	///< text font size
-    unsigned    attr;	///< currently unused (this may be change in the future)
-  };
-  
-  Fl_Text_Display(int X, int Y, int W, int H, const char *l = 0);
-  ~Fl_Text_Display();
-  
-  virtual int handle(int e);
-  
-  void buffer(Fl_Text_Buffer* buf);
-  
-  /**
-   Sets the current text buffer associated with the text widget.
-   Multiple text widgets can be associated with the same text buffer.
-   \param buf new text buffer
-   */
-  void buffer(Fl_Text_Buffer& buf) { buffer(&buf); }
-  
-  /**
-   Gets the current text buffer associated with the text widget.
-   Multiple text widgets can be associated with the same text buffer.
-   \return current text buffer
-   */
-  Fl_Text_Buffer* buffer() const { return mBuffer; }
-  
-  void redisplay_range(int start, int end);
-  void scroll(int topLineNum, int horizOffset);
-  void insert(const char* text);
-  void overstrike(const char* text);
-  void insert_position(int newPos);
-  
-  /** 
-   Gets the position of the text insertion cursor for text display.
-   \return insert position index into text buffer 
-   */
-  int insert_position() const { return mCursorPos; }
-  int position_to_xy(int pos, int* x, int* y) const;
-
-  int in_selection(int x, int y) const;
-  void show_insert_position();
-  
-  int move_right();
-  int move_left();
-  int move_up();  
-  int move_down();
-  int count_lines(int start, int end, bool start_pos_is_line_start) const;
-  int line_start(int pos) const;
-  int line_end(int startPos, bool startPosIsLineStart) const;
-  int skip_lines(int startPos, int nLines, bool startPosIsLineStart);
-  int rewind_lines(int startPos, int nLines);
-  void next_word(void);
-  void previous_word(void);
-  
-  void show_cursor(int b = 1);
-  
-  /**
-   Hides the text cursor.
-   */
-  void hide_cursor() { show_cursor(0); }
-  
-  void cursor_style(int style);
-  
-  /**
-   Gets the text cursor color.  
-   \return cursor color
-   */
-  Fl_Color cursor_color() const {return mCursor_color;}
-  
-  /**    
-   Sets the text cursor color.
-   \param n new cursor color
-   */
-  void cursor_color(Fl_Color n) {mCursor_color = n;}
-  
-  /**   
-   Gets the width/height of the scrollbars.
-   \return width of scrollbars
-   */
-  int scrollbar_width() const { return scrollbar_width_; }
-  
-  /**
-   Sets the width/height of the scrollbars.
-   \param W width of scrollbars
-   */
-  void scrollbar_width(int W) { scrollbar_width_ = W; }
-  
-  /**
-   Gets the scrollbar alignment type.
-   \return scrollbar alignment
-   */
-  Fl_Align scrollbar_align() const { return scrollbar_align_; }
-  
-  /**
-   Sets the scrollbar alignment type.
-   \param a new scrollbar alignment
-   */
-  void scrollbar_align(Fl_Align a) { scrollbar_align_ = a; }
-  
-  /**
-   Moves the insert position to the beginning of the current word.
-   \param pos start calculation at this index
-   \return beginning of the words
-   */
-  int word_start(int pos) const { return buffer()->word_start(pos); }
-  
-  /** 
-   Moves the insert position to the end of the current word.
-   \param pos start calculation at this index
-   \return index of first character after the end of the word
-   */
-  int word_end(int pos) const { return buffer()->word_end(pos); }
-  
-  
-  void highlight_data(Fl_Text_Buffer *styleBuffer,
-                      const Style_Table_Entry *styleTable,
-                      int nStyles, char unfinishedStyle,
-                      Unfinished_Style_Cb unfinishedHighlightCB,
-                      void *cbArg);
-  
-  int position_style(int lineStartPos, int lineLen, int lineIndex) const;
-  
-  /** 
-   \todo FIXME : get set methods pointing on shortcut_ 
-   have no effects as shortcut_ is unused in this class and derived! 
-   \return the current shortcut key
-   */
-  int shortcut() const {return shortcut_;}
-  
-  /**
-   \todo FIXME : get set methods pointing on shortcut_ 
-   have no effects as shortcut_ is unused in this class and derived! 
-   \param s the new shortcut key
-   */
-  void shortcut(int s) {shortcut_ = s;}
-  
-  /**
-   Gets the default font used when drawing text in the widget.
-   \return current text font face unless overridden by a style
-   */
-  Fl_Font textfont() const {return textfont_;}
-  
-  /**
-   Sets the default font used when drawing text in the widget.
-   \param s default text font face
-   */
-  void textfont(Fl_Font s) {textfont_ = s; mColumnScale = 0;}
-  
-  /**
-   Gets the default size of text in the widget.
-   \return current text height unless overridden by a style
-   */
-  Fl_Fontsize textsize() const {return textsize_;}
-  
-  /**
-   Sets the default size of text in the widget.
-   \param s new text size
-   */
-  void textsize(Fl_Fontsize s) {textsize_ = s; mColumnScale = 0;}
-  
-  /**
-   Gets the default color of text in the widget.
-   \return text color unless overridden by a style
-   */
-  Fl_Color textcolor() const {return textcolor_;}
-  
-  /**
-   Sets the default color of text in the widget.
-   \param n new text color
-   */
-  void textcolor(Fl_Color n) {textcolor_ = n;}
-  
-  int wrapped_column(int row, int column) const;
-  int wrapped_row(int row) const;
-  void wrap_mode(int wrap, int wrap_margin);
-  
-  virtual void resize(int X, int Y, int W, int H);
-
-  /**
-   Convert an x pixel position into a column number.
-   \param x number of pixels from the left margin
-   \return an approximate column number based on the main font
-   */
-  double x_to_col(double x) const;
-  
-  /**
-   Convert a column number into an x pixel position.
-   \param col an approximate column number based on the main font
-   \return number of pixels from the left margin to the left of an
-	   average sized character
-   */
-  double col_to_x(double col) const;
-  
-  void linenumber_width(int width);
-  int linenumber_width() const;
-  void linenumber_font(Fl_Font val);
-  Fl_Font linenumber_font() const;
-  void linenumber_size(Fl_Fontsize val);
-  Fl_Fontsize linenumber_size() const;
-  void linenumber_fgcolor(Fl_Color val);
-  Fl_Color linenumber_fgcolor() const;
-  void linenumber_bgcolor(Fl_Color val);
-  Fl_Color linenumber_bgcolor() const;
-  void linenumber_align(Fl_Align val);
-  Fl_Align linenumber_align() const;
-  void linenumber_format(const char* val);
-  const char* linenumber_format() const;
-
-protected:
-  // Most (all?) of this stuff should only be called from resize() or
-  // draw().
-  // Anything with "vline" indicates thats it deals with currently
-  // visible lines.
-  
-  virtual void draw();
-  void draw_text(int X, int Y, int W, int H);
-  void draw_range(int start, int end);
-  void draw_cursor(int, int);
-  
-  void draw_string(int style, int x, int y, int toX, const char *string,
-                   int nChars) const;
-  
-  void draw_vline(int visLineNum, int leftClip, int rightClip,
-                  int leftCharIndex, int rightCharIndex);
-  
-  int find_x(const char *s, int len, int style, int x) const;
-  
-  enum { 
-    DRAW_LINE, 
-    FIND_INDEX,
-    FIND_INDEX_FROM_ZERO,
-    GET_WIDTH 
-  };
-  
-  int handle_vline(int mode, 
-                   int lineStart, int lineLen, int leftChar, int rightChar,
-                   int topClip, int bottomClip,
-                   int leftClip, int rightClip) const;
-  
-  void draw_line_numbers(bool clearAll);
-  
-  void clear_rect(int style, int x, int y, int width, int height) const;
-  void display_insert();
-  
-  void offset_line_starts(int newTopLineNum);
-  
-  void calc_line_starts(int startLine, int endLine);
-  
-  void update_line_starts(int pos, int charsInserted, int charsDeleted,
-                          int linesInserted, int linesDeleted, int *scrolled);
-  
-  void calc_last_char();
-  
-  int position_to_line( int pos, int* lineNum ) const;
-  double string_width(const char* string, int length, int style) const;
-  
-  static void scroll_timer_cb(void*);
-  
-  static void buffer_predelete_cb(int pos, int nDeleted, void* cbArg);
-  static void buffer_modified_cb(int pos, int nInserted, int nDeleted,
-                                 int nRestyled, const char* deletedText,
-                                 void* cbArg);
-  
-  static void h_scrollbar_cb(Fl_Scrollbar* w, Fl_Text_Display* d);
-  static void v_scrollbar_cb( Fl_Scrollbar* w, Fl_Text_Display* d);
-  void update_v_scrollbar();
-  void update_h_scrollbar();
-  int measure_vline(int visLineNum) const;
-  int longest_vline() const;
-  int empty_vlines() const;
-  int vline_length(int visLineNum) const;
-  int xy_to_position(int x, int y, int PosType = CHARACTER_POS) const;
-  
-  void xy_to_rowcol(int x, int y, int* row, int* column,
-                    int PosType = CHARACTER_POS) const;
-  void maintain_absolute_top_line_number(int state);
-  int get_absolute_top_line_number() const;
-  void absolute_top_line_number(int oldFirstChar);
-  int maintaining_absolute_top_line_number() const;
-  void reset_absolute_top_line_number();
-  int position_to_linecol(int pos, int* lineNum, int* column) const;
-  int scroll_(int topLineNum, int horizOffset);
-  
-  void extend_range_for_styles(int* start, int* end);
-  
-  void find_wrap_range(const char *deletedText, int pos, int nInserted,
-                       int nDeleted, int *modRangeStart, int *modRangeEnd,
-                       int *linesInserted, int *linesDeleted);
-  void measure_deleted_lines(int pos, int nDeleted);
-  void wrapped_line_counter(Fl_Text_Buffer *buf, int startPos, int maxPos,
-                            int maxLines, bool startPosIsLineStart,
-                            int styleBufOffset, int *retPos, int *retLines,
-                            int *retLineStart, int *retLineEnd,
-                            bool countLastLineMissingNewLine = true) const;
-  void find_line_end(int pos, bool start_pos_is_line_start, int *lineEnd,
-                     int *nextLineStart) const;
-  double measure_proportional_character(const char *s, int colNum, int pos) const;
-  int wrap_uses_character(int lineEndPos) const;
-  
-  int damage_range1_start, damage_range1_end;
-  int damage_range2_start, damage_range2_end;
-  int mCursorPos;
-  int mCursorOn;
-  int mCursorOldY;              /* Y pos. of cursor for blanking */
-  int mCursorToHint;            /* Tells the buffer modified callback
-                                 where to move the cursor, to reduce
-                                 the number of redraw calls */
-  int mCursorStyle;             /* One of enum cursorStyles above */
-  int mCursorPreferredXPos;     /* Pixel position for vert. cursor movement */
-  int mNVisibleLines;           /* # of visible (displayed) lines */
-  int mNBufferLines;            /* # of newlines in the buffer */
-  Fl_Text_Buffer* mBuffer;      /* Contains text to be displayed */
-  Fl_Text_Buffer* mStyleBuffer; /* Optional parallel buffer containing
-                                 color and font information */
-  int mFirstChar, mLastChar;    /* Buffer positions of first and last
-                                 displayed character (lastChar points
-                                 either to a newline or one character
-                                 beyond the end of the buffer) */
-  int mContinuousWrap;          /* Wrap long lines when displaying */
-  int mWrapMarginPix; 	    	/* Margin in # of pixels for
-                                 wrapping in continuousWrap mode */
-  int* mLineStarts;
-  int mTopLineNum;              /* Line number of top displayed line
-                                 of file (first line of file is 1) */
-  int mAbsTopLineNum;           /* In continuous wrap mode, the line
-                                  number of the top line if the text
-                                  were not wrapped (note that this is
-                                  only maintained as needed). */
-  int mNeedAbsTopLineNum;       /* Externally settable flag to continue
-                                 maintaining absTopLineNum even if
-                                 it isn't needed for line # display */
-  int mHorizOffset;             /* Horizontal scroll pos. in pixels */
-  int mTopLineNumHint;          /* Line number of top displayed line
-                                 of file (first line of file is 1) */
-  int mHorizOffsetHint;         /* Horizontal scroll pos. in pixels */
-  int mNStyles;                 /* Number of entries in styleTable */
-  const Style_Table_Entry *mStyleTable; /* Table of fonts and colors for
-                                         coloring/syntax-highlighting */
-  char mUnfinishedStyle;        /* Style buffer entry which triggers
-                                 on-the-fly reparsing of region */
-  Unfinished_Style_Cb mUnfinishedHighlightCB; /* Callback to parse "unfinished" */
-  /* regions */
-  void* mHighlightCBArg;        /* Arg to unfinishedHighlightCB */
-  
-  int mMaxsize;
-  
-  int mSuppressResync;          /* Suppress resynchronization of line
-                                 starts during buffer updates */
-  int mNLinesDeleted;           /* Number of lines deleted during
-                                 buffer modification (only used
-                                 when resynchronization is suppressed) */
-  int mModifyingTabDistance;    /* Whether tab distance is being
-                                 modified */
-  
-  mutable double mColumnScale; /* Width in pixels of an average character. This
-                                 value is calculated as needed (lazy eval); it 
-                                 needs to be mutable so that it can be calculated
-                                 within a method marked as "const" */
-  
-  Fl_Color mCursor_color;
-  
-  Fl_Scrollbar* mHScrollBar;
-  Fl_Scrollbar* mVScrollBar;
-  int scrollbar_width_;
-  Fl_Align scrollbar_align_;
-  int dragPos, dragType, dragging;
-  int display_insert_position_hint;
-  struct { int x, y, w, h; } text_area;
-  
-  int shortcut_;
-  
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  Fl_Color textcolor_;
-  
-  // Line number margin and width
-  int mLineNumLeft, mLineNumWidth;
-
-  // Line number font/colors
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Font     linenumber_font_;
-  Fl_Fontsize linenumber_size_;
-  Fl_Color    linenumber_fgcolor_;
-  Fl_Color    linenumber_bgcolor_;
-  Fl_Align    linenumber_align_;
-  const char* linenumber_format_;
-#endif
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Text_Editor.H
+++ /dev/null
@@ -1,157 +1,0 @@
-//
-// "$Id$"
-//
-// Header file for Fl_Text_Editor class.
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Text_Editor widget . */
-
-
-#ifndef FL_TEXT_EDITOR_H
-#define FL_TEXT_EDITOR_H
-
-#include "Fl_Text_Display.H"
-
-// key will match in any state
-#define FL_TEXT_EDITOR_ANY_STATE  (-1L)
-
-/**
-  This is the FLTK text editor widget.
-
-  It allows the user to edit multiple lines of text and supports highlighting
-  and scrolling. The buffer that is displayed in the widget is managed
-  by the Fl_Text_Buffer class.
-*/
-class FL_EXPORT Fl_Text_Editor : public Fl_Text_Display {
-  public:
-    /** Key function binding callback type. */
-    typedef int (*Key_Func)(int key, Fl_Text_Editor* editor);
-
-    /** Simple linked list item associating a key/state to a function. */
-    struct Key_Binding {
-      int          key;		///< the key pressed
-      int          state;	///< the state of key modifiers
-      Key_Func     function;	///< associated function
-      Key_Binding* next;	///< next key binding in the list
-    };
-
-    Fl_Text_Editor(int X, int Y, int W, int H, const char* l = 0);
-    ~Fl_Text_Editor() { remove_all_key_bindings(); }
-    virtual int handle(int e);
-    /**
-	Sets the current insert mode; if non-zero, new text
-	is inserted before the current cursor position. Otherwise, new
-	text replaces text at the current cursor position.
-    */
-    void insert_mode(int b) { insert_mode_ = b; }
-    /**
-	Gets the current insert mode; if non-zero, new text
-	is inserted before the current cursor position. Otherwise, new
-	text replaces text at the current cursor position.
-    */
-    int insert_mode() { return insert_mode_; }
-
-#if FLTK_ABI_VERSION >= 10304
-    void tab_nav(int val);
-    int tab_nav() const;
-#endif
-
-    void add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
-    /** Adds a \p key of state \p state with the function \p f. */
-    void add_key_binding(int key, int state, Key_Func f)
-      { add_key_binding(key, state, f, &key_bindings); }
-    void remove_key_binding(int key, int state, Key_Binding** list);
-    /** Removes the key binding associated with the key "key" of state "state". */
-    void remove_key_binding(int key, int state)
-      { remove_key_binding(key, state, &key_bindings); }
-    void remove_all_key_bindings(Key_Binding** list);
-    /** Removes all of the key bindings associated with the text editor or list. */
-    void remove_all_key_bindings() { remove_all_key_bindings(&key_bindings); }
-    void add_default_key_bindings(Key_Binding** list);
-#if FLTK_ABI_VERSION < 10304
-    // OLD: non-const
-    Key_Func bound_key_function(int key, int state, Key_Binding* list);
-    /**  Returns the function associated with a key binding. */
-    Key_Func bound_key_function(int key, int state)
-      { return bound_key_function(key, state, key_bindings); }
-#else
-    // NEW: const (STR#3306)
-    Key_Func bound_key_function(int key, int state, Key_Binding* list) const;
-    /**  Returns the function associated with a key binding. */
-    Key_Func bound_key_function(int key, int state) const
-      { return bound_key_function(key, state, key_bindings); }
-#endif
-    /**  Sets the default key function for unassigned keys. */
-    void default_key_function(Key_Func f) { default_key_function_ = f; }
-
-    // functions for the built in default bindings
-    static int kf_default(int c, Fl_Text_Editor* e);
-    static int kf_ignore(int c, Fl_Text_Editor* e);
-    static int kf_backspace(int c, Fl_Text_Editor* e);
-    static int kf_enter(int c, Fl_Text_Editor* e);
-    static int kf_move(int c, Fl_Text_Editor* e);
-    static int kf_shift_move(int c, Fl_Text_Editor* e);
-    static int kf_ctrl_move(int c, Fl_Text_Editor* e);
-    static int kf_c_s_move(int c, Fl_Text_Editor* e);
-    static int kf_meta_move(int c, Fl_Text_Editor* e);
-    static int kf_m_s_move(int c, Fl_Text_Editor* e);
-    static int kf_home(int, Fl_Text_Editor* e);
-    static int kf_end(int c, Fl_Text_Editor* e);
-    static int kf_left(int c, Fl_Text_Editor* e);
-    static int kf_up(int c, Fl_Text_Editor* e);
-    static int kf_right(int c, Fl_Text_Editor* e);
-    static int kf_down(int c, Fl_Text_Editor* e);
-    static int kf_page_up(int c, Fl_Text_Editor* e);
-    static int kf_page_down(int c, Fl_Text_Editor* e);
-    static int kf_insert(int c, Fl_Text_Editor* e);
-    static int kf_delete(int c, Fl_Text_Editor* e);
-    static int kf_copy(int c, Fl_Text_Editor* e);
-    static int kf_cut(int c, Fl_Text_Editor* e);
-    static int kf_paste(int c, Fl_Text_Editor* e);
-    static int kf_select_all(int c, Fl_Text_Editor* e);
-    static int kf_undo(int c, Fl_Text_Editor* e);
-
-  protected:
-    int handle_key();
-    void maybe_do_callback();
-
-#ifndef FL_DOXYGEN
-    int insert_mode_;
-    Key_Binding* key_bindings;
-#endif
-
-    /** Global key binding list.
-
-      Derived classes can add key bindings for all Fl_Text_Editor widgets
-      by adding a Key_Binding to this list.
-
-      \see add_key_binding(int key, int state, Key_Func f, Key_Binding** list);
-    */
-    static Key_Binding* global_key_bindings;
-
-#ifndef FL_DOXYGEN
-    Key_Func default_key_function_;
-#endif
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/FL/Fl_Tile.H
+++ /dev/null
@@ -1,41 +1,0 @@
-//
-// "$Id$"
-//
-// Tile header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef Fl_Tile_H
-#define Fl_Tile_H
-
-#include "Fl_Group.H"
-
-/*
-  The Fl_Tile class lets you resize its children by dragging
-  the border between them.
-*/
-
-class FL_EXPORT Fl_Tile : public Fl_Group {
-public:
-  int handle(int event);
-  Fl_Tile(int X, int Y, int W, int H, const char *L=0);
-  void resize(int X, int Y, int W, int H);
-  void position(int oldx, int oldy, int newx, int newy);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tiled_Image.H
+++ /dev/null
@@ -1,59 +1,0 @@
-//
-// "$Id$"
-//
-// Tiled image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tiled_Image widget . */
-
-#ifndef Fl_Tiled_Image_H
-#  define Fl_Tiled_Image_H
-
-#  include "Fl_Image.H"
-
-
-/**
-  This class supports tiling of images over a specified area.
-
-  The source (tile) image is \b not copied unless you call the
-  color_average(), desaturate(), or inactive() methods.
-*/
-class FL_EXPORT Fl_Tiled_Image : public Fl_Image {
-  protected:
-
-  Fl_Image	*image_;		// The image that is tiled
-  int		alloc_image_;		// Did we allocate this image?
-
-  public:
-
-  Fl_Tiled_Image(Fl_Image *i, int W = 0, int H = 0);
-  virtual ~Fl_Tiled_Image();
-
-  virtual Fl_Image *copy(int W, int H);
-  Fl_Image *copy() { return copy(w(), h()); }
-  virtual void color_average(Fl_Color c, float i);
-  virtual void desaturate();
-  virtual void draw(int X, int Y, int W, int H, int cx, int cy);
-  void draw(int X, int Y) { draw(X, Y, w(), h(), 0, 0); }
-  /** Gets The image that is tiled */
-  Fl_Image *image() { return image_; }
-};
-
-#endif // !Fl_Tiled_Image_H
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/FL/Fl_Timer.H
+++ /dev/null
@@ -1,78 +1,0 @@
-//
-// "$Id$"
-//
-// Timer header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Timer widget . */
-
-#ifndef Fl_Timer_H
-#define Fl_Timer_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// values for type():
-#define FL_NORMAL_TIMER		0
-#define FL_VALUE_TIMER		1
-#define FL_HIDDEN_TIMER		2
-
-/**
-  This is provided only to emulate the Forms Timer widget.  It works by
-  making a timeout callback every 1/5 second.  This is wasteful and
-  inaccurate if you just want something to happen a fixed time in the
-  future.  You should directly call 
-  Fl::add_timeout() instead.
-*/
-class FL_EXPORT Fl_Timer : public Fl_Widget {
-  static void stepcb(void *);
-  void step();
-  char on, direction_;
-  double delay, total;
-  long lastsec,lastusec;
-protected:
-  void draw();
-public:
-  int handle(int);
-  Fl_Timer(uchar t,int x,int y,int w,int h, const char *l);
-  ~Fl_Timer();
-  void value(double);
-  /** See void Fl_Timer::value(double)  */
-  double value() const {return delay>0.0?delay:0.0;}
-  /**
-    Gets or sets the direction of the timer.  If the direction is zero
-    then the timer will count up, otherwise it will count down from the
-    initial value().
-  */
-  char direction() const {return direction_;}
-  /**
-    Gets or sets the direction of the timer.  If the direction is zero
-    then the timer will count up, otherwise it will count down from the
-    initial value().
-  */
-  void direction(char d) {direction_ = d;}
-  /**    Gets or sets whether the timer is suspended.  */
-  char suspended() const {return !on;}
-  void suspended(char d);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/FL/Fl_Toggle_Button.H
+++ /dev/null
@@ -1,50 +1,0 @@
-//
-// "$Id$"
-//
-// Toggle button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Toggle_Button widget . */
-
-#ifndef Fl_Toggle_Button_H
-#define Fl_Toggle_Button_H
-
-#include "Fl_Button.H"
-
-/**
-  The toggle button is a push button that needs to be clicked once 
-  to toggle on, and one more time to toggle off.
-  The Fl_Toggle_Button subclass displays the "on" state by
-  drawing a pushed-in button.</P>
-  <P>Buttons generate callbacks when they are clicked by the user.  You
-  control exactly when and how by changing the values for type()
-  and when().
-*/
-class FL_EXPORT Fl_Toggle_Button : public Fl_Button {
-public:
-  /**
-    Creates a new Fl_Toggle_Button widget using the given
-    position, size, and label string.
-    <P>The inherited destructor deletes the toggle button.
-  */
-  Fl_Toggle_Button(int X,int Y,int W,int H,const char *l=0);
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Toggle_Light_Button.H
+++ /dev/null
@@ -1,28 +1,0 @@
-//
-// "$Id$"
-//
-// Toggle light button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// provided for back-compatibility only
-
-#ifndef Fl_Toggle_Light_Button
-#include "Fl_Light_Button.H"
-#define Fl_Toggle_Light_Button Fl_Light_Button
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Toggle_Round_Button.H
+++ /dev/null
@@ -1,28 +1,0 @@
-//
-// "$Id$"
-//
-// Toggle round button header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// provided for back-compatibility only
-
-#ifndef Fl_Toggle_Round_Button
-#include "Fl_Round_Button.H"
-#define Fl_Toggle_Round_Button Fl_Round_Button
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tooltip.H
+++ /dev/null
@@ -1,133 +1,0 @@
-//
-// "$Id$"
-//
-// Tooltip header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Tooltip widget . */
-
-#ifndef Fl_Tooltip_H
-#define Fl_Tooltip_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-
-/**
-  The Fl_Tooltip class provides tooltip support for
-  all FLTK widgets. It contains only static methods.
-
-  \image html tooltip-options.png "Fl_Tooltip Options"
-  \image latex src/tooltip-options.png "Fl_Tooltip Options" width=6cm
-
-*/
-class FL_EXPORT Fl_Tooltip {
-public:
-  /**    Gets the tooltip delay. The default delay is 1.0 seconds.  */
-  static float delay() { return delay_; }
-  /**    Sets the tooltip delay. The default delay is 1.0 seconds.  */
-  static void delay(float f) { delay_ = f; }
-  /**
-    Gets the tooltip hover delay, the delay between tooltips.
-    The default delay is 0.2 seconds.
-  */
-  static float hoverdelay() { return hoverdelay_; }
-  /**
-    Sets the tooltip hover delay, the delay between tooltips.
-    The default delay is 0.2 seconds.
-  */
-  static void hoverdelay(float f) { hoverdelay_ = f; }
-  /**    Returns non-zero if tooltips are enabled.  */
-  static int enabled() { return Fl::option(Fl::OPTION_SHOW_TOOLTIPS); }
-  /**    Enables tooltips on all widgets (or disables if <i>b</i> is false).  */
-  static void enable(int b = 1) { Fl::option(Fl::OPTION_SHOW_TOOLTIPS, (b!=0));}
-  /**    Same as enable(0), disables tooltips on all widgets.  */
-  static void disable() { enable(0); }
-  static void (*enter)(Fl_Widget* w);
-  static void enter_area(Fl_Widget* w, int X, int Y, int W, int H, const char* tip);
-  static void (*exit)(Fl_Widget *w);
-  /** Gets the current widget target */
-  static Fl_Widget* current() {return widget_;}
-  static void current(Fl_Widget*);
-
-  /**    Gets the typeface for the tooltip text.  */
-  static Fl_Font font() { return font_; }
-  /**    Sets the typeface for the tooltip text.  */
-  static void font(Fl_Font i) { font_ = i; }
-  /**    Gets the size of the tooltip text.  */
-  static Fl_Fontsize size() { return (size_ == -1 ? FL_NORMAL_SIZE : size_); }
-  /**    Sets the size of the tooltip text.  */
-  static void size(Fl_Fontsize s) { size_ = s; }
-  /** Gets the background color for tooltips. The default background color is a pale yellow.  */
-  static Fl_Color color() { return color_; }
-  /** Sets the background color for tooltips. The default background color is a pale yellow.  */
-  static void color(Fl_Color c) { color_ = c; }
-  /** Gets the color of the text in the tooltip. The default is  black. */
-  static Fl_Color textcolor() { return textcolor_; }
-  /** Sets the color of the text in the tooltip. The default is  black. */
-  static void textcolor(Fl_Color c) { textcolor_ = c; }
-#if FLTK_ABI_VERSION >= 10301
-  /** Gets the amount of extra space left/right of the tooltip's text. Default is 3. */
-  static int margin_width() { return margin_width_; }
-  /** Sets the amount of extra space left/right of the tooltip's text. Default is 3. */
-  static void margin_width(int v) { margin_width_ = v; }
-  /** Gets the amount of extra space above and below the tooltip's text. Default is 3. */
-  static int margin_height() { return margin_height_; }
-  /** Sets the amount of extra space above and below the tooltip's text. Default is 3. */
-  static void margin_height(int v) { margin_height_ = v; }
-  /** Gets the maximum width for tooltip's text before it word wraps. Default is 400. */
-  static int wrap_width() { return wrap_width_; }
-  /** Sets the maximum width for tooltip's text before it word wraps. Default is 400. */
-  static void wrap_width(int v) { wrap_width_ = v; }
-#else
-  static int margin_width() { return 3; }
-  static int margin_height() { return 3; }
-  static int wrap_width() { return 400; }
-#endif
-
-#ifdef __APPLE__
-  // the unique tooltip window
-  static Fl_Window* current_window(void);
-#endif
-
-  // These should not be public, but Fl_Widget::tooltip() needs them...
-  // fabien: made it private with only a friend function access
-private:
-  friend void Fl_Widget::tooltip(const char *);
-  friend void Fl_Widget::copy_tooltip(const char *);
-  static void enter_(Fl_Widget* w);
-  static void exit_(Fl_Widget *w);
-  static void set_enter_exit_once_();
-
-private:
-  static float delay_; //!< delay before a tooltip is shown
-  static float hoverdelay_; //!< delay between tooltips
-  static Fl_Color color_;
-  static Fl_Color textcolor_;
-  static Fl_Font font_;
-  static Fl_Fontsize size_;
-  static Fl_Widget* widget_; //!< Keeps track of the current target widget
-#if FLTK_ABI_VERSION >= 10301
-  static int margin_width_;	//!< distance around tooltip text left+right
-  static int margin_height_;	//!< distance around tooltip text top+bottom
-  static int wrap_width_;	//!< maximum width of tooltip text before it word wraps
-#endif
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tree.H
+++ /dev/null
@@ -1,578 +1,0 @@
-//
-// "$Id$"
-//
-
-#ifndef FL_TREE_H
-#define FL_TREE_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
-
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// FL/Fl_Tree.H
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-///
-/// \file
-/// \brief This file contains the definitions of the Fl_Tree class
-///
-
-/// \class Fl_Tree
-///
-/// \brief Tree widget.
-///
-///     \image html tree-simple.png "Fl_Tree example program"
-///     \image latex tree-simple.png "Fl_Tree example program" width=4cm
-///
-/// \code
-///     Fl_Tree                                         // Top level widget
-///        |--- Fl_Tree_Item                            // Items in the tree
-///        |--- Fl_Tree_Prefs                           // Preferences for the tree
-///                  |--- Fl_Tree_Connector (enum)      // Connection modes
-///                  |--- Fl_Tree_Select (enum)         // Selection modes
-///                  |--- Fl_Tree_Sort (enum)           // Sort behavior
-/// \endcode
-///     Similar to Fl_Browser, Fl_Tree is a browser of Fl_Tree_Item's arranged
-///     in a parented hierarchy, or 'tree'. Subtrees can be expanded or closed.
-///     Items can be added, deleted, inserted, sorted and re-ordered.
-///
-///     The tree items may also contain other FLTK widgets, like buttons, input fields,
-///     or even "custom" widgets.
-///
-///     The callback() is invoked depending on the value of when():
-///
-///         - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item
-///         - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state
-///
-///     The simple way to define a tree:
-/// \code
-///    #include <FL/Fl_Tree.H>
-///    [..]
-///    Fl_Tree tree(X,Y,W,H);
-///    tree.begin();
-///      tree.add("Flintstones/Fred");
-///      tree.add("Flintstones/Wilma");
-///      tree.add("Flintstones/Pebbles");
-///      tree.add("Simpsons/Homer");
-///      tree.add("Simpsons/Marge");
-///      tree.add("Simpsons/Bart");
-///      tree.add("Simpsons/Lisa");
-///    tree.end();
-/// \endcode
-///     
-/// \par FEATURES
-///     Items can be added with add(),<BR>
-///     removed with remove(),<BR>
-///     completely cleared with clear(),<BR>
-///     inserted with insert() and insert_above(),<BR>
-///     selected/deselected with select() and deselect(),<BR>
-///     open/closed with open() and close(),<BR>
-///     positioned on the screen with show_item_top(), show_item_middle() and
-///     show_item_bottom(),<BR>
-///     item children can be swapped around with Fl_Tree_Item::swap_children(),<BR>
-///     sorting can be controlled when items are add()ed via sortorder().<BR>
-///     You can walk the entire tree with first() and next().<BR>
-///     You can walk visible items with first_visible_item()
-///     and next_visible_item().<BR>
-///     You can walk selected items with first_selected_item() and
-///     next_selected_item().<BR>
-///     Items can be found by their pathname using find_item(const char*),
-///     and an item's pathname can be found with item_pathname().<BR>
-///     The selected items' colors are controlled by selection_color()
-///     (inherited from Fl_Widget).<BR>
-///     A hook is provided to allow you to redefine how item's labels are drawn
-///     via Fl_Tree::item_draw_callback().<BR>
-///
-/// \par SELECTION OF ITEMS
-///     The tree can have different selection behaviors controlled by selectmode().
-///     The background color used for selected items is the Fl_Tree::selection_color().
-///     The foreground color for selected items is controlled internally with fl_contrast().
-///
-/// \par CHILD WIDGETS
-///     FLTK widgets (including custom widgets) can be assigned to tree items via
-///     Fl_Tree_Item::widget().
-/// \par
-///     When an Fl_Tree_Item::widget() is defined, the default behavior is for the
-///     widget() to be shown in place of the item's label (if it has one).
-///     Only the widget()'s width will be used; the widget()'s x() and y() position
-///     will be managed by the tree, and the h() will track the item's height.
-///     This default behavior can be altered (ABI 1.3.1): 
-///     Setting Fl_Tree::item_draw_mode()'s FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET flag
-///     causes the label + widget to be displayed together in that order, and
-///     adding the FL_TREE_ITEM_HEIGHT_FROM_WIDGET flag causes widget's height
-///     to define the widget()'s height.
-///
-/// \par ICONS
-///     The tree's open/close icons can be redefined with
-///     Fl_Tree::openicon(), Fl_Tree::closeicon(). User icons
-///     can either be changed globally with Fl_Tree::usericon(),
-///     or on a per-item basis with Fl_Tree_Item::usericon().
-/// \par
-///     Various default preferences can be globally manipulated via Fl_Tree_Prefs, 
-///     including colors, margins, icons, connection lines, etc. 
-///
-/// \par FONTS AND COLORS
-///     When adding new items to the tree, the new items get the
-///     defaults for fonts and colors from:
-/// \par
-///	- Fl_Tree::item_labelfont() -- The default item label font (default: FL_HELVETICA)
-///     - Fl_Tree::item_labelsize() -- The default item label size (default: FL_NORMAL_SIZE)
-///     - Fl_Tree::item_labelfgcolor() -- The default item label foreground color (default: FL_FOREGROUND_COLOR)
-///     - Fl_Tree::item_labelbgcolor() -- The default item label background color (default: 0xffffffff, which tree uses as 'transparent')
-/// \par
-///     Each item (Fl_Tree_Item) inherits a copy of these font/color attributes when created,
-///     and each item has its own methods to let the app change these values on a per-item basis
-///	using methods of the same name:
-/// \par
-///	- Fl_Tree_Item::labelfont() -- The item's label font (default: FL_HELVETICA)
-///     - Fl_Tree_Item::labelsize() -- The item's label size (default: FL_NORMAL_SIZE)
-///     - Fl_Tree_Item::labelfgcolor() -- The item's label foreground color (default: FL_FOREGROUND_COLOR)
-///     - Fl_Tree_Item::labelbgcolor() -- The item's label background color (default: 0xffffffff, which uses the tree's own bg color)
-///
-/// \par CALLBACKS
-///     The tree's callback() will be invoked when items change state or are open/closed.
-///     when() controls when mouse/keyboard events invoke the callback.
-///     callback_item() and callback_reason() can be used to determine the cause of the callback. e.g.
-/// \par
-/// \code
-/// void MyTreeCallback(Fl_Widget *w, void *data) {
-///   Fl_Tree      *tree = (Fl_Tree*)w;
-///   Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item();	// get selected item
-///   switch ( tree->callback_reason() ) {
-///     case FL_TREE_REASON_SELECTED: [..]
-///     case FL_TREE_REASON_DESELECTED: [..]
-///     case FL_TREE_REASON_RESELECTED: [..]
-///     case FL_TREE_REASON_OPENED: [..]
-///     case FL_TREE_REASON_CLOSED: [..]
-///   }
-/// \endcode
-///
-/// \par SIMPLE EXAMPLES
-///     To find all the selected items:
-/// \code
-/// for ( Fl_Tree_Item *i=first_selected_item(); i; i=next_selected_item(i) )
-///   printf("Item %s is selected\n", i->label());
-/// \endcode
-///     To get an item's full menu pathname, use Fl_Tree::item_pathname(), e.g.
-/// \code
-///   char pathname[256] = "???";
-///   tree->item_pathname(pathname, sizeof(pathname), item);		// eg. "Parent/Child/Item"
-/// \endcode
-/// \par
-///     To walk all the items of the tree from top to bottom:
-/// \code
-/// // Walk all the items in the tree, and print their labels
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     printf("Item: %s\n", item->label());
-/// }
-/// \endcode
-/// \par
-///     To recursively walk all the children of a particular item, 
-///     define a function that uses recursion:
-///     \code
-/// // Find all of the item's children and print an indented report of their labels
-/// void my_print_all_children(Fl_Tree_Item *item, int indent=0) {
-///     for ( int t=0; t<item->children(); t++ ) {
-///         printf("%*s Item: %s\n", indent, "", item->child(t)->label());
-///         my_print_all_children(item->child(t), indent+4);   // recurse
-///     }
-/// }
-///     \endcode
-/// \par
-///     To change the default label font and color when creating new items:
-/// \code
-///  tree = new Fl_Tree(..);
-///  tree->item_labelfont(FL_COURIER);	// Use Courier font for all new items
-///  tree->item_labelfgcolor(FL_RED);	// Use red color for labels of all new items
-///  [..]
-///  // Now create the items in the tree using the above defaults.
-///  tree->add("Aaa");
-///  tree->add("Bbb");
-///  [..]
-/// \endcode
-/// \par
-///     To change the font and color of all existing items in the tree:
-/// \code
-/// // Change the font and color of all items currently in the tree
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) {
-///     item->labelfont(FL_COURIER);
-///     item->labelcolor(FL_RED);
-/// }
-/// \endcode
-///
-/// \par DISPLAY DESCRIPTION
-///     The following image shows the tree's various visual elements
-///     and the methods that control them:
-/// \par
-///     \image html tree-elements.png
-///     \image latex tree-elements.png "Fl_Tree elements" width=6cm
-/// \par
-///     The following shows the protected dimension variables 'tree inner' (tix..)
-///     and 'tree outer' (tox..):
-///     \image html tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm
-///     \image latex tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm
-///
-/// \par KEYBOARD BINDINGS
-///     The following table lists keyboard bindings for navigating the tree:
-///
-///  <TABLE BORDER="1" SUMMARY="Fl_Tree keyboard bindings.">
-///    <CAPTION ALIGN=TOP>Keyboard bindings.</CAPTION>
-///  <TR>
-///    <TD WIDTH=25% ALIGN=CENTER><B>Keyboard</B></TD>
-///    <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_MULTI</B></TD>
-///    <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_SINGLE</B></TD>
-///    <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_NONE</B></TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Ctrl-A</B> (Linux/Windows)<BR><B>Command-A</B> (Mac)</TD>
-///    <TD ALIGN=CENTER>Select all items.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Space </B></TD>
-///    <TD ALIGN=CENTER>Selects item.</TD>
-///    <TD ALIGN=CENTER>Selects item.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Ctrl-Space </B></TD>
-///    <TD ALIGN=CENTER>Toggle item.</TD>
-///    <TD ALIGN=CENTER>Toggle item.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Shift-Space </B></TD>
-///    <TD ALIGN=CENTER>Extends selection<BR>from last item.</TD>
-///    <TD ALIGN=CENTER>Selects item.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Enter,<BR>Ctrl-Enter,<BR>Shift-Enter </B></TD>
-///    <TD ALIGN=CENTER>Toggles open/close</TD>
-///    <TD ALIGN=CENTER>Toggles open/close</TD>
-///    <TD ALIGN=CENTER>Toggles open/close</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Right / Left</B></TD>
-///    <TD ALIGN=CENTER>Open/Close item.</TD>
-///    <TD ALIGN=CENTER>Open/Close item.</TD>
-///    <TD ALIGN=CENTER>Open/Close item.</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Up / Down</B></TD>
-///    <TD ALIGN=CENTER>Move focus box up/down.</TD>
-///    <TD ALIGN=CENTER>Move focus box up/down.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Shift-Up / Shift-Down</B></TD>
-///    <TD ALIGN=CENTER>Extend selection up/down.</TD>
-///    <TD ALIGN=CENTER>Move focus up/down.</TD>
-///    <TD ALIGN=CENTER>N/A</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>Home / End</B></TD>
-///    <TD ALIGN=CENTER>Move to top/bottom of tree.</TD>
-///    <TD ALIGN=CENTER>Move to top/bottom of tree.</TD>
-///    <TD ALIGN=CENTER>Move to top/bottom of tree.</TD>
-///
-///  </TR><TR>
-///    <TD ALIGN=CENTER><B>PageUp / PageDown</B></TD>
-///    <TD ALIGN=CENTER>Page up/down.</TD>
-///    <TD ALIGN=CENTER>Page up/down.</TD>
-///    <TD ALIGN=CENTER>Page up/down.</TD>
-///
-///  </TD></TR></TABLE>
-///
-
-/// \enum Fl_Tree_Reason
-/// The reason the callback was invoked.
-///
-enum Fl_Tree_Reason {
-  FL_TREE_REASON_NONE=0,	///< unknown reason
-  FL_TREE_REASON_SELECTED,	///< an item was selected
-  FL_TREE_REASON_DESELECTED,	///< an item was de-selected
-#if FLTK_ABI_VERSION >= 10301
-  FL_TREE_REASON_RESELECTED,	///< an item was re-selected (e.g. double-clicked)
-#endif /*FLTK_ABI_VERSION*/
-  FL_TREE_REASON_OPENED,	///< an item was opened
-  FL_TREE_REASON_CLOSED,	///< an item was closed
-  FL_TREE_REASON_DRAGGED	///< an item was dragged into a new place
-};
-
-class FL_EXPORT Fl_Tree : public Fl_Group {
-  friend class Fl_Tree_Item;
-  Fl_Tree_Item  *_root;				// can be null!
-  Fl_Tree_Item  *_item_focus;			// item that has focus box
-  Fl_Tree_Item  *_callback_item;		// item invoked during callback (can be NULL)
-  Fl_Tree_Reason _callback_reason;		// reason for the callback
-  Fl_Tree_Prefs  _prefs;			// all the tree's settings
-  int            _scrollbar_size;		// size of scrollbar trough
-#if FLTK_ABI_VERSION >= 10301
-  // NEW: 
-  Fl_Tree_Item *_lastselect;			// used to extend selections
-#else /*FLTK_ABI_VERSION*/
-  // OLD: static data inside handle() method
-#endif /*FLTK_ABI_VERSION*/
-  void fix_scrollbar_order();
-
-protected:
-  Fl_Scrollbar *_vscroll;	///< Vertical scrollbar
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Scrollbar *_hscroll;	///< Horizontal scrollbar
-  int _tox,_toy,_tow,_toh;	///< Tree widget outer xywh dimension: outside scrollbars, inside widget border
-  int _tix,_tiy,_tiw,_tih;	///< Tree widget inner xywh dimension: inside borders + scrollbars
-
-  /// the calculated width of the entire tree hierarchy. See calc_tree()
-  int _tree_w;
-  /// the calculated height of the entire tree hierarchy. See calc_tree()
-  int _tree_h;
-#endif
-  void item_clicked(Fl_Tree_Item* val);
-  void do_callback_for_item(Fl_Tree_Item* item, Fl_Tree_Reason reason);
-#if FLTK_ABI_VERSION >= 10303
-// next_visible_item() and extend_selection() moved to 'public' in ABI 1.3.3
-// undocmented draw_tree() dropped -- draw() does all the work now
-#else
-  Fl_Tree_Item *next_visible_item(Fl_Tree_Item *start, int dir);
-  void extend_selection(Fl_Tree_Item *from, Fl_Tree_Item *to);
-  int draw_tree();
-#endif
-
-public:
-  Fl_Tree(int X, int Y, int W, int H, const char *L=0);
-  ~Fl_Tree();
-  int handle(int e);
-  void draw();
-  void show_self();
-  void resize(int,int,int,int);
-
-  ///////////////////////
-  // root methods
-  ///////////////////////
-  void root_label(const char *new_label);
-  Fl_Tree_Item* root();
-  void root(Fl_Tree_Item *newitem);
-  const Fl_Tree_Prefs& prefs() const { return _prefs; }
-
-  ////////////////////////////////
-  // Item creation/removal methods
-  ////////////////////////////////
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item *add(const char *path, Fl_Tree_Item *newitem=0);
-#else
-  Fl_Tree_Item *add(const char *path);
-  Fl_Tree_Item *add(const char *path, Fl_Tree_Item *newitem);
-#endif
-  Fl_Tree_Item* add(Fl_Tree_Item *parent_item, const char *name);
-  Fl_Tree_Item *insert_above(Fl_Tree_Item *above, const char *name);
-  Fl_Tree_Item* insert(Fl_Tree_Item *item, const char *name, int pos);
-  int remove(Fl_Tree_Item *item);
-  void clear();
-  void clear_children(Fl_Tree_Item *item);
-
-  ////////////////////////
-  // Item lookup methods
-  ////////////////////////
-  Fl_Tree_Item *find_item(const char *path);
-  const Fl_Tree_Item *find_item(const char *path) const;
-  int item_pathname(char *pathname, int pathnamelen, const Fl_Tree_Item *item) const;
-#if FLTK_ABI_VERSION >= 10303
-  const Fl_Tree_Item* find_clicked(int yonly=0) const;
-  Fl_Tree_Item* find_clicked(int yonly=0);
-#else
-  const Fl_Tree_Item *find_clicked() const;
-  Fl_Tree_Item *find_clicked();
-#endif
-  Fl_Tree_Item *item_clicked();
-  Fl_Tree_Item *first();
-  Fl_Tree_Item *first_visible();		// deprecated in ABI 10303
-  Fl_Tree_Item *first_visible_item();
-  Fl_Tree_Item *next(Fl_Tree_Item *item=0);
-  Fl_Tree_Item *prev(Fl_Tree_Item *item=0);
-  Fl_Tree_Item *last();
-  Fl_Tree_Item *last_visible();			// deprecated in ABI 10303
-  Fl_Tree_Item *last_visible_item();
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item *next_visible_item(Fl_Tree_Item *start, int dir);	// made public in 1.3.3 ABI
-#endif
-  Fl_Tree_Item *first_selected_item();
-  Fl_Tree_Item *last_selected_item();
-  Fl_Tree_Item *next_item(Fl_Tree_Item *item, int dir=FL_Down, bool visible=false);
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item=0, int dir=FL_Down);
-  int get_selected_items(Fl_Tree_Item_Array &ret_items);
-#else
-  Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item=0);
-  Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item, int dir);
-#endif
-
-  //////////////////////////
-  // Item open/close methods
-  //////////////////////////
-  int open(Fl_Tree_Item *item, int docallback=1);
-  int open(const char *path, int docallback=1);
-  void open_toggle(Fl_Tree_Item *item, int docallback=1);
-  int close(Fl_Tree_Item *item, int docallback=1);
-  int close(const char *path, int docallback=1);
-  int is_open(Fl_Tree_Item *item) const;
-  int is_open(const char *path) const;
-  int is_close(Fl_Tree_Item *item) const;
-  int is_close(const char *path) const;
-
-  /////////////////////////
-  // Item selection methods
-  /////////////////////////
-  int select(Fl_Tree_Item *item, int docallback=1);
-  int select(const char *path, int docallback=1);
-  void select_toggle(Fl_Tree_Item *item, int docallback=1);
-  int deselect(Fl_Tree_Item *item, int docallback=1);
-  int deselect(const char *path, int docallback=1);
-  int deselect_all(Fl_Tree_Item *item=0, int docallback=1);
-  int select_only(Fl_Tree_Item *selitem, int docallback=1);
-  int select_all(Fl_Tree_Item *item=0, int docallback=1);
-  int extend_selection_dir(Fl_Tree_Item *from,
-                           Fl_Tree_Item *to,
-			   int dir,
-			   int val,
-			   bool visible);
-#if FLTK_ABI_VERSION >= 10303
-  int extend_selection(Fl_Tree_Item *from,
-  		       Fl_Tree_Item *to,
-		       int val=1,
-		       bool visible=false);
-#else
-private:
-  // Adding overload if not at least one overload breaks ABI, so avoid
-  // by keeping private until we can break ABI. ref: http://www.ros.org/reps/rep-0009.html
-  int extend_selection__(Fl_Tree_Item *from,
-  			 Fl_Tree_Item *to,
-			 int val,
-			 bool visible);
-public:
-#endif
-  void set_item_focus(Fl_Tree_Item *item);
-  Fl_Tree_Item *get_item_focus() const;
-  int is_selected(Fl_Tree_Item *item) const;
-  int is_selected(const char *path);
-
-  /////////////////////////////////
-  // Item attribute related methods
-  /////////////////////////////////
-  Fl_Font     item_labelfont() const;
-  void        item_labelfont(Fl_Font val);
-  Fl_Fontsize item_labelsize() const;
-  void        item_labelsize(Fl_Fontsize val);
-  Fl_Color    item_labelfgcolor(void) const;
-  void        item_labelfgcolor(Fl_Color val);
-  Fl_Color    item_labelbgcolor(void) const;
-  void        item_labelbgcolor(Fl_Color val);
-  Fl_Color connectorcolor() const;
-  void connectorcolor(Fl_Color val);
-  int marginleft() const;
-  void marginleft(int val);
-  int margintop() const;
-  void margintop(int val);
-#if FLTK_ABI_VERSION >= 10301
-  int marginbottom() const;
-  void marginbottom(int val);
-#endif /*FLTK_ABI_VERSION*/
-  int linespacing() const;
-  void linespacing(int val);
-  int openchild_marginbottom() const;
-  void openchild_marginbottom(int val);
-  int usericonmarginleft() const;
-  void usericonmarginleft(int val);
-  int labelmarginleft() const;
-  void labelmarginleft(int val);
-#if FLTK_ABI_VERSION >= 10301
-  int widgetmarginleft() const;
-  void widgetmarginleft(int val);
-#endif /*FLTK_ABI_VERSION*/
-  int connectorwidth() const;
-  void connectorwidth(int val);
-  Fl_Image* usericon() const;
-  void usericon(Fl_Image *val);
-  Fl_Image* openicon() const;
-  void openicon(Fl_Image *val);
-  Fl_Image* closeicon() const;
-  void closeicon(Fl_Image *val);
-  int showcollapse() const;
-  void showcollapse(int val);
-  int showroot() const;
-  void showroot(int val);
-  Fl_Tree_Connector connectorstyle() const;
-  void connectorstyle(Fl_Tree_Connector val);
-  Fl_Tree_Sort sortorder() const;
-  void sortorder(Fl_Tree_Sort val);
-  Fl_Boxtype selectbox() const;
-  void selectbox(Fl_Boxtype val);
-  Fl_Tree_Select selectmode() const;
-  void selectmode(Fl_Tree_Select val);
-#if FLTK_ABI_VERSION >= 10301
-  Fl_Tree_Item_Reselect_Mode item_reselect_mode() const;
-  void item_reselect_mode(Fl_Tree_Item_Reselect_Mode mode);
-  Fl_Tree_Item_Draw_Mode item_draw_mode() const;
-  void item_draw_mode(Fl_Tree_Item_Draw_Mode mode);
-  void item_draw_mode(int mode);
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  void calc_dimensions();
-  void calc_tree();
-#endif
-  void recalc_tree();
-  int displayed(Fl_Tree_Item *item);
-  void show_item(Fl_Tree_Item *item, int yoff);
-  void show_item(Fl_Tree_Item *item);
-  void show_item_top(Fl_Tree_Item *item);
-  void show_item_middle(Fl_Tree_Item *item);
-  void show_item_bottom(Fl_Tree_Item *item);
-  void display(Fl_Tree_Item *item);
-  int  vposition() const;
-  void vposition(int pos);
-  int  hposition() const;
-  void hposition(int pos);
-
-  int is_scrollbar(Fl_Widget *w);
-  int scrollbar_size() const;
-  void scrollbar_size(int size);
-  int is_vscroll_visible() const;
-  int is_hscroll_visible() const;
-
-  ///////////////////////
-  // callback related
-  ///////////////////////
-  void callback_item(Fl_Tree_Item* item);
-  Fl_Tree_Item* callback_item();
-  void callback_reason(Fl_Tree_Reason reason);
-  Fl_Tree_Reason callback_reason() const;
-
-  /// Load FLTK preferences
-  void load(class Fl_Preferences&);
-};
-
-#endif /*FL_TREE_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tree_Item.H
+++ /dev/null
@@ -1,549 +1,0 @@
-//
-// "$Id$"
-//
-
-#ifndef FL_TREE_ITEM_H
-#define FL_TREE_ITEM_H
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Image.H>
-#include <FL/fl_draw.H>
-
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// FL/Fl_Tree_Item.H
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-///
-/// \file
-/// \brief This file contains the definitions for Fl_Tree_Item
-///
-
-/// \class Fl_Tree_Item
-/// \brief Tree widget item.
-///
-/// This class is a single tree item, and manages all of the item's attributes.
-/// Fl_Tree_Item is used by Fl_Tree, which is comprised of many instances of Fl_Tree_Item.
-///
-/// Fl_Tree_Item is hierarchical; it dynamically manages an Fl_Tree_Item_Array of children
-/// that are themselves instances of Fl_Tree_Item. Each item can have zero or more children.
-/// When an item has children, close() and open() can be used to hide or show them.
-///
-/// Items have their own attributes; font size, face, color.
-/// Items maintain their own hierarchy of children.
-///
-/// When you make changes to items, you'll need to tell the tree to redraw()
-/// for the changes to show up.
-///
-/// New 1.3.3 ABI feature:
-/// You can define custom items by either adding a custom widget to the item
-/// with Fl_Tree_Item::widget(), or override the draw_item_content() method
-/// if you want to just redefine how the label is drawn.
-///
-/// The following shows the Fl_Tree_Item's dimensions, useful when overriding
-/// the draw_item_content() method:
-///
-///   \image html  Fl_Tree_Item-dimensions.png "Fl_Tree_Item's internal dimensions." width=6cm
-///   \image latex Fl_Tree_Item-dimensions.png "Fl_Tree_Item's internal dimensions." width=6cm
-///
-class Fl_Tree;
-class FL_EXPORT Fl_Tree_Item {
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree                *_tree;		// parent tree
-#endif
-  const char             *_label;		// label (memory managed)
-  Fl_Font                 _labelfont;		// label's font face
-  Fl_Fontsize             _labelsize;		// label's font size
-  Fl_Color                _labelfgcolor;	// label's fg color
-  Fl_Color                _labelbgcolor;	// label's bg color (0xffffffff is 'transparent')
-#if FLTK_ABI_VERSION >= 10303
-  /// \enum Fl_Tree_Item_Flags
-  enum Fl_Tree_Item_Flags {
-#else
-  /// \enum
-  enum {
-#endif
-    OPEN                = 1<<0,		///> item is open
-    VISIBLE             = 1<<1,		///> item is visible
-    ACTIVE              = 1<<2,		///> item is active
-    SELECTED            = 1<<3		///> item is selected
-  };
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  unsigned short _flags;		// misc flags
-#else /*FLTK_ABI_VERSION*/
-  // OLD: this will go away after 1.3.x
-  char                    _open;		// item is open?
-  char                    _visible;		// item is visible?
-  char                    _active;		// item activated?
-  char                    _selected;		// item selected?
-#endif /*FLTK_ABI_VERSION*/
-  int                     _xywh[4];		// xywh of this widget (if visible)
-  int                     _collapse_xywh[4];	// xywh of collapse icon (if visible)
-  int                     _label_xywh[4];	// xywh of label
-  Fl_Widget              *_widget;		// item's label widget (optional)
-  Fl_Image               *_usericon;		// item's user-specific icon (optional)
-#if FLTK_ABI_VERSION >= 10304
-  Fl_Image               *_userdeicon;		// deactivated usericon
-#endif
-  Fl_Tree_Item_Array      _children;		// array of child items
-  Fl_Tree_Item           *_parent;		// parent item (=0 if root)
-  void                   *_userdata;    	// user data that can be associated with an item
-#if FLTK_ABI_VERSION >= 10301
-  Fl_Tree_Item           *_prev_sibling;	// previous sibling (same level)
-  Fl_Tree_Item           *_next_sibling;	// next sibling (same level)
-#endif /*FLTK_ABI_VERSION*/
-  // Protected methods
-protected:
-  void _Init(const Fl_Tree_Prefs &prefs, Fl_Tree *tree);
-  void show_widgets();
-  void hide_widgets();
-  void draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs);
-  void draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs);
-  void recalc_tree();
-  int calc_item_height(const Fl_Tree_Prefs &prefs) const;
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Color drawfgcolor() const;
-  Fl_Color drawbgcolor() const;
-#endif
-
-public:
-  Fl_Tree_Item(const Fl_Tree_Prefs &prefs);	// CTOR -- backwards compatible
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item(Fl_Tree *tree);			// CTOR -- ABI 1.3.3+
-  virtual ~Fl_Tree_Item();			// DTOR -- ABI 1.3.3+
-#else
-  ~Fl_Tree_Item();				// DTOR -- backwards compatible
-#endif
-  Fl_Tree_Item(const Fl_Tree_Item *o);		// COPY CTOR
-  /// The item's x position relative to the window
-  int x() const { return(_xywh[0]); }
-  /// The item's y position relative to the window
-  int y() const { return(_xywh[1]); }
-  /// The entire item's width to right edge of Fl_Tree's inner width
-  /// within scrollbars.
-  int w() const { return(_xywh[2]); }
-  /// The item's height
-  int h() const { return(_xywh[3]); }
-  /// The item's label x position relative to the window
-  /// \version 1.3.3
-  int label_x() const { return(_label_xywh[0]); }
-  /// The item's label y position relative to the window
-  /// \version 1.3.3
-  int label_y() const { return(_label_xywh[1]); }
-  /// The item's maximum label width to right edge of Fl_Tree's inner width
-  /// within scrollbars.
-  /// \version 1.3.3
-  int label_w() const { return(_label_xywh[2]); }
-  /// The item's label height
-  /// \version 1.3.3
-  int label_h() const { return(_label_xywh[3]); }
-#if FLTK_ABI_VERSION >= 10303
-  virtual int draw_item_content(int render);
-  void draw(int X, int &Y, int W, Fl_Tree_Item *itemfocus, 
-	    int &tree_item_xmax, int lastchild=1, int render=1);
-#else
-  void draw(int X, int &Y, int W, Fl_Widget *tree, 
-            Fl_Tree_Item *itemfocus, const Fl_Tree_Prefs &prefs, int lastchild=1);
-#endif
-  void show_self(const char *indent = "") const;
-  void label(const char *val);
-  const char *label() const;
-
-  /// Set a user-data value for the item.
-  inline void user_data( void* data ) { _userdata = data; }
-
-  /// Retrieve the user-data value that has been assigned to the item.
-  inline void* user_data() const { return _userdata; }
-  
-  /// Set item's label font face.
-  void labelfont(Fl_Font val) {
-    _labelfont = val; 
-    recalc_tree();		// may change tree geometry
-  }
-  /// Get item's label font face.
-  Fl_Font labelfont() const {
-    return(_labelfont);
-  }
-  /// Set item's label font size.
-  void labelsize(Fl_Fontsize val) {
-    _labelsize = val; 
-    recalc_tree();		// may change tree geometry
-  }
-  /// Get item's label font size.
-  Fl_Fontsize labelsize() const {
-    return(_labelsize);
-  }
-  /// Set item's label foreground text color.
-  void labelfgcolor(Fl_Color val) {
-    _labelfgcolor = val; 
-  }
-  /// Return item's label foreground text color.
-  Fl_Color labelfgcolor() const {
-    return(_labelfgcolor); 
-  }
-  /// Set item's label text color. Alias for labelfgcolor(Fl_Color)).
-  void labelcolor(Fl_Color val) {
-     labelfgcolor(val);
-  }
-  /// Return item's label text color. Alias for labelfgcolor() const).
-  Fl_Color labelcolor() const {
-    return labelfgcolor(); 
-  }
-  /// Set item's label background color.
-  /// A special case is made for color 0xffffffff which uses the parent tree's bg color.
-  void labelbgcolor(Fl_Color val) {
-    _labelbgcolor = val; 
-  }
-  /// Return item's label background text color.
-  /// If the color is 0xffffffff, the default behavior is the parent tree's
-  /// bg color will be used. (An overloaded draw_item_content() can override
-  /// this behavior.)
-  Fl_Color labelbgcolor() const {
-    return(_labelbgcolor); 
-  }
-  /// Assign an FLTK widget to this item.
-  void widget(Fl_Widget *val) {
-    _widget = val; 
-    recalc_tree();		// may change tree geometry
-  }
-  /// Return FLTK widget assigned to this item.
-  Fl_Widget *widget() const {
-    return(_widget); 
-  }
-  /// Return the number of children this item has.
-  int children() const {
-    return(_children.total()); 
-  }
-  /// Return the child item for the given 'index'.
-  Fl_Tree_Item *child(int index) {
-    return(_children[index]); 
-  }
-  /// Return the const child item for the given 'index'.
-  const Fl_Tree_Item *child(int t) const;
-  /// See if this item has children.
-  int has_children() const {
-    return(children()); 
-  }
-  int find_child(const char *name);
-  int find_child(Fl_Tree_Item *item);
-  int remove_child(Fl_Tree_Item *item);
-  int remove_child(const char *new_label);
-  void clear_children();
-  void swap_children(int ax, int bx);
-  int swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b);
-  const Fl_Tree_Item *find_child_item(const char *name) const;
-        Fl_Tree_Item *find_child_item(const char *name);
-  const Fl_Tree_Item *find_child_item(char **arr) const;
-        Fl_Tree_Item *find_child_item(char **arr);
-  const Fl_Tree_Item *find_item(char **arr) const;
-        Fl_Tree_Item *find_item(char **arr);
-  //////////////////
-  // Adding items
-  //////////////////
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs,
-  		    const char *new_label,
-  		    Fl_Tree_Item *newitem);
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs,
-  		    const char *new_label);
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs,
-  		    char **arr,
-		    Fl_Tree_Item *newitem);
-  Fl_Tree_Item *add(const Fl_Tree_Prefs &prefs,
-  		    char **arr);
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item *replace(Fl_Tree_Item *new_item);
-  Fl_Tree_Item *replace_child(Fl_Tree_Item *olditem, Fl_Tree_Item *newitem);
-#endif
-  Fl_Tree_Item *insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos=0);
-  Fl_Tree_Item *insert_above(const Fl_Tree_Prefs &prefs, const char *new_label);
-  Fl_Tree_Item* deparent(int index);
-  int reparent(Fl_Tree_Item *newchild, int index);
-  int move(int to, int from);
-  int move(Fl_Tree_Item *item, int op=0, int pos=0);
-  int move_above(Fl_Tree_Item *item);
-  int move_below(Fl_Tree_Item *item);
-  int move_into(Fl_Tree_Item *item, int pos=0);
-  int depth() const;
-  Fl_Tree_Item *prev();
-  Fl_Tree_Item *next();
-  Fl_Tree_Item *next_sibling();
-  Fl_Tree_Item *prev_sibling();
-  void update_prev_next(int index);
-  Fl_Tree_Item *next_displayed(Fl_Tree_Prefs &prefs);	// deprecated
-  Fl_Tree_Item *prev_displayed(Fl_Tree_Prefs &prefs);	// deprecated
-  Fl_Tree_Item *next_visible(Fl_Tree_Prefs &prefs);
-  Fl_Tree_Item *prev_visible(Fl_Tree_Prefs &prefs);
-  
-  /// Return the parent for this item. Returns NULL if we are the root.
-  Fl_Tree_Item *parent() {
-    return(_parent);
-  }
-  /// Return the const parent for this item. Returns NULL if we are the root.
-  const Fl_Tree_Item *parent() const {
-    return(_parent);
-  }
-  /// Set the parent for this item.
-  /// Should only be used by Fl_Tree's internals.
-  ///
-  void parent(Fl_Tree_Item *val) {
-    _parent = val;
-  }
-#if FLTK_ABI_VERSION >= 10303
-  const Fl_Tree_Prefs& prefs() const;
-  /// Return the tree for this item.
-  /// \version 1.3.3 (ABI feature)
-  const Fl_Tree *tree() const {
-    return(_tree);
-  }
-#endif
-#if FLTK_ABI_VERSION >= 10304
-  /// Return the tree for this item.
-  /// \version 1.3.4 (ABI feature)
-  Fl_Tree *tree() {
-    return(_tree);
-  }
-#endif
-  //////////////////
-  // State
-  //////////////////
-  void open();
-  void close();
-  /// See if the item is 'open'.
-  int is_open() const {
-    return(is_flag(OPEN));
-  }
-  /// See if the item is 'closed'.
-  int is_close() const {
-    return(is_flag(OPEN)?0:1);
-  }
-  /// Toggle the item's open/closed state.
-  void open_toggle() {
-    is_open()?close():open();	// handles calling recalc_tree()
-  }
-  /// Change the item's selection state to the optionally specified 'val'.
-  /// If 'val' is not specified, the item will be selected.
-  ///
-  void select(int val=1) {
-    set_flag(SELECTED, val);
-  }
-  /// Toggle the item's selection state.
-  void select_toggle() {
-    if ( is_selected() ) {
-      deselect();	// deselect if selected
-    } else {
-      select();		// select if deselected
-    }
-  }
-  /// Select item and all its children.
-  ///     Returns count of how many items were in the 'deselected' state,
-  ///     ie. how many items were "changed".
-  ///
-  int select_all() {
-    int count = 0;
-    if ( ! is_selected() ) {
-      select();
-      ++count;
-    }
-    for ( int t=0; t<children(); t++ ) {
-      count += child(t)->select_all();
-    }
-    return(count);
-  }
-  /// Disable the item's selection state.
-  void deselect() {
-    set_flag(SELECTED, 0);
-  }
-  /// Deselect item and all its children.
-  ///     Returns count of how many items were in the 'selected' state,
-  ///     ie. how many items were "changed".
-  ///
-  int deselect_all() {
-    int count = 0;
-    if ( is_selected() ) {
-      deselect();
-      ++count;
-    }
-    for ( int t=0; t<children(); t++ ) {
-      count += child(t)->deselect_all();
-    }
-    return(count);
-  }
-  /// See if the item is selected.
-  char is_selected() const {
-    return(is_flag(SELECTED));
-  }
-  /// Change the item's activation state to the optionally specified 'val'.
-  ///
-  /// When deactivated, the item will be 'grayed out'; the callback() 
-  /// won't be invoked if the user clicks on the label. If a widget()
-  /// is associated with the item, its activation state will be changed as well.
-  ///
-  /// If 'val' is not specified, the item will be activated.
-  ///
-  void activate(int val=1) {
-    set_flag(ACTIVE,val);
-    if ( _widget && val != (int)_widget->active() ) {
-      if ( val ) {
-	_widget->activate();
-      } else {
-	_widget->deactivate();
-      }
-      _widget->redraw();
-    }
-  }
-  /// Deactivate the item; the callback() won't be invoked when clicked.
-  /// Same as activate(0)
-  ///
-  void deactivate() {
-    activate(0);
-  }
-  /// See if the item is activated.
-  char is_activated() const {
-    return(is_flag(ACTIVE));
-  }
-  /// See if the item is activated. Alias for is_activated().
-  char is_active() const {
-    return(is_activated());
-  }
-  /// See if the item is visible. Alias for is_visible().
-  int visible() const {
-    return(is_visible());
-  }
-  /// See if the item is visible.
-  int is_visible() const {
-    return(is_flag(VISIBLE));
-  }
-  int visible_r() const;
-
-  /// Set the item's user icon to an Fl_Image. Use '0' to disable.
-  /// No internal copy is made, caller must manage icon's memory.
-  ///
-  /// Note, if you expect your items to be deactivated(),
-  /// use userdeicon(Fl_Image*) to set up a 'grayed out' version of your icon
-  /// to be used for display.
-  ///
-  /// \see userdeicon(Fl_Image*)
-  ///
-  void usericon(Fl_Image *val) {
-    _usericon = val;
-    recalc_tree();		// may change tree geometry
-  }
-  /// Get the item's user icon as an Fl_Image. Returns '0' if disabled.
-  Fl_Image *usericon() const {
-    return(_usericon);
-  }
-  /// Set the usericon to draw when the item is deactivated. Use '0' to disable.
-  /// No internal copy is made; caller must manage icon's memory.
-  ///
-  /// To create a typical 'grayed out' version of your usericon image,
-  /// you can do the following:
-  ///
-  /// \code
-  ///      // Create tree + usericon for items
-  ///      Fl_Tree *tree = new Fl_Tree(..);
-  ///      Fl_Image *usr_icon = new Fl_Pixmap(..); // your usericon
-  ///      Fl_Image *de_icon  = usr_icon->copy();  // make a copy, and..
-  ///      de_icon->inactive();                    // make it 'grayed out'
-  ///      ...
-  ///      for ( .. ) {                 // item loop..
-  ///        item = tree->add("...");   // create new item
-  ///        item->usericon(usr_icon);  // assign usericon to items
-  ///        item->userdeicon(de_icon); // assign userdeicon to items
-  ///        ..
-  ///      }
-  /// \endcode
-  ///
-  /// In the above example, the app should 'delete' the two icons
-  /// when they're no longer needed (e.g. after the tree is destroyed)
-  ///
-  /// \version 1.3.4
-  ///
-#if FLTK_ABI_VERSION >= 10304
-  void userdeicon(Fl_Image* val) {
-    _userdeicon = val;
-  }
-  /// Return the deactivated version of the user icon, if any.
-  /// Returns 0 if none.
-  Fl_Image* userdeicon() const {
-    return _userdeicon;
-  }
-#endif
-  //////////////////
-  // Events
-  //////////////////
-#if FLTK_ABI_VERSION >= 10303
-  const Fl_Tree_Item* find_clicked(const Fl_Tree_Prefs &prefs, int yonly=0) const;
-  Fl_Tree_Item* find_clicked(const Fl_Tree_Prefs &prefs, int yonly=0);
-#else
-  const Fl_Tree_Item* find_clicked(const Fl_Tree_Prefs &prefs) const;
-  Fl_Tree_Item* find_clicked(const Fl_Tree_Prefs &prefs);
-#endif
-  int event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const;
-  int event_on_label(const Fl_Tree_Prefs &prefs) const;
-  /// Is this item the root of the tree?
-  int is_root() const {
-    return(_parent==0?1:0);
-  }
-
-  // Protected methods
-  // TODO: move these to top 'protected:' section
-protected:
-#if FLTK_ABI_VERSION >= 10301
-  /// Set a flag to an on or off value. val is 0 or 1.
-  inline void set_flag(unsigned short flag,int val) {
-    if ( flag==OPEN || flag==VISIBLE ) {
-      recalc_tree();		// may change tree geometry
-    }
-    if ( val ) _flags |= flag; else _flags &= ~flag;
-  }
-  /// See if flag set. Returns 0 or 1.
-  inline int is_flag(unsigned short val) const {
-    return(_flags & val ? 1 : 0);
-  }
-#else /*FLTK_ABI_VERSION*/
-  /// Set a flag to an on or off value. val is 0 or 1.
-  void set_flag(unsigned short flag,int val) {
-    switch (flag) {
-      case     OPEN: _open     = val; break;
-      case  VISIBLE: _visible  = val; break;
-      case   ACTIVE: _active   = val; break;
-      case SELECTED: _selected = val; break;
-    }
-  }
-  /// See if flag set. Returns 0 or 1.
-  int is_flag(unsigned short flag) const {
-    switch (flag) {
-      case     OPEN: return(_open ? 1 : 0);
-      case  VISIBLE: return(_visible ? 1 : 0);
-      case   ACTIVE: return(_active ? 1 : 0);
-      case SELECTED: return(_selected ? 1 : 0);
-      default:       return(0);
-    }
-  }
-#endif /*FLTK_ABI_VERSION*/
-
-};
-
-#endif /*FL_TREE_ITEM_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tree_Item_Array.H
+++ /dev/null
@@ -1,113 +1,0 @@
-//
-// "$Id$"
-//
-
-#ifndef _FL_TREE_ITEM_ARRAY_H
-#define _FL_TREE_ITEM_ARRAY_H
-
-#include <FL/Fl.H>
-#include "Fl_Export.H"
-
-class Fl_Tree_Item;		// forward decl must *precede* first doxygen comment block
-				// or doxygen will not document our class..
-
-//////////////////////////
-// FL/Fl_Tree_Item_Array.H
-//////////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-///
-/// \file
-/// \brief This file defines a class that manages an array of Fl_Tree_Item pointers.
-///
-
-/// \brief Manages an array of Fl_Tree_Item pointers.
-///
-/// Because FLTK 1.x.x. has mandated that templates and STL not be used,
-/// we use this class to dynamically manage the arrays.
-///
-/// None of the methods do range checking on index values; the caller
-/// must be sure that index values are within the range 0<index<total()
-/// (unless otherwise noted).
-///
-
-class FL_EXPORT Fl_Tree_Item_Array {
-  Fl_Tree_Item **_items;	// items array
-  int _total;			// #items in array
-  int _size;			// #items *allocated* for array
-  int _chunksize;		// #items to enlarge mem allocation
-#if FLTK_ABI_VERSION >= 10303
-  enum {			
-    MANAGE_ITEM = 1,		///> manage the Fl_Tree_Item's internals (internal use only)
-  };
-  char _flags;			// flags to control behavior
-#endif
-  void enlarge(int count);
-public:
-  Fl_Tree_Item_Array(int new_chunksize = 10);		// CTOR
-  ~Fl_Tree_Item_Array();				// DTOR
-  Fl_Tree_Item_Array(const Fl_Tree_Item_Array *o);	// COPY CTOR
-  /// Return the item and index \p i.
-  Fl_Tree_Item *operator[](int i) {
-    return(_items[i]);
-  }
-  /// Const version of operator[](int i)
-  const Fl_Tree_Item *operator[](int i) const {
-    return(_items[i]);
-  }
-  /// Return the total items in the array, or 0 if empty.
-  int total() const {
-    return(_total);
-  }
-  /// Swap the two items at index positions \p ax and \p bx.
-#if FLTK_ABI_VERSION >= 10301
-  // NEW -- code moved to .cxx
-  void swap(int ax, int bx);
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  void swap(int ax, int bx) {
-    Fl_Tree_Item *asave = _items[ax];
-    _items[ax] = _items[bx];
-    _items[bx] = asave;
-  }
-#endif /*FLTK_ABI_VERSION*/
-  int move(int to, int from);
-  int deparent(int pos);
-  int reparent(Fl_Tree_Item *item, Fl_Tree_Item *newparent, int pos);
-  void clear();
-  void add(Fl_Tree_Item *val);
-  void insert(int pos, Fl_Tree_Item *new_item);
-  void replace(int pos, Fl_Tree_Item *new_item);
-  void remove(int index);
-  int  remove(Fl_Tree_Item *item);
-#if FLTK_ABI_VERSION >= 10303
-  /// Option to control if Fl_Tree_Item_Array's destructor will also destroy the Fl_Tree_Item's.
-  /// If set: items and item array is destroyed. 
-  /// If clear: only the item array is destroyed, not items themselves.
-  void manage_item_destroy(int val) {
-    if ( val ) _flags |= MANAGE_ITEM; else _flags &= ~MANAGE_ITEM;
-  }
-  int manage_item_destroy() const {
-    return _flags & MANAGE_ITEM ? 1 : 0;
-  }
-#endif
-};
-
-#endif /*_FL_TREE_ITEM_ARRAY_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Tree_Prefs.H
+++ /dev/null
@@ -1,484 +1,0 @@
-//
-// "$Id$"
-//
-
-#ifndef FL_TREE_PREFS_H
-#define FL_TREE_PREFS_H
-
-#include <FL/Fl.H>	// needed for ABI version features (via Enumerations.H)
-
-//////////////////////
-// FL/Fl_Tree_Prefs.H
-//////////////////////
-//
-// Fl_Tree_Prefs -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-///
-/// \file
-/// \brief This file contains the definitions for Fl_Tree's preferences.
-///
-/// \code
-///                  Fl_Tree_Prefs
-///                       :
-///                  .....:.......
-///                  :           :
-///               Fl_Tree        :
-///                  |_____ Fl_Tree_Item
-///
-/// \endcode
-///
-
-/// \class Fl_Tree_Prefs
-/// \brief Tree widget's preferences.
-
-/// \enum Fl_Tree_Sort
-/// Sort order options for items added to the tree
-///
-enum Fl_Tree_Sort {
-  FL_TREE_SORT_NONE=0,		///< No sorting; items are added in the order defined (default).
-  FL_TREE_SORT_ASCENDING=1,	///< Add items in ascending sort order.
-  FL_TREE_SORT_DESCENDING=2	///< Add items in descending sort order.
-};
-
-/// \enum Fl_Tree_Connector
-/// Defines the style of connection lines between items.
-///
-enum Fl_Tree_Connector {
-  FL_TREE_CONNECTOR_NONE=0,	///< Use no lines connecting items
-  FL_TREE_CONNECTOR_DOTTED=1,	///< Use dotted lines connecting items (default)
-  FL_TREE_CONNECTOR_SOLID=2	///< Use solid lines connecting items
-};
-
-/// \enum Fl_Tree_Select
-/// Tree selection style.
-///
-enum Fl_Tree_Select {
-  FL_TREE_SELECT_NONE=0,	///< Nothing selected when items are clicked
-  FL_TREE_SELECT_SINGLE=1,	///< Single item selected when item is clicked (default)
-  FL_TREE_SELECT_MULTI=2,	///< Multiple items can be selected by clicking
-  				///< with SHIFT, CTRL or mouse drags.
-  FL_TREE_SELECT_SINGLE_DRAGGABLE=3 ///< Single items may be selected, and they may be
-                                     ///< reordered by mouse drag.
-};
-
-#if FLTK_ABI_VERSION >= 10301
-/// \enum Fl_Tree_Item_Reselect_Mode
-/// Defines the ways an item can be (re) selected
-/// via item_reselect_mode().
-///
-enum Fl_Tree_Item_Reselect_Mode {
-  FL_TREE_SELECTABLE_ONCE=0,	///< Item can only be selected once (default)
-  FL_TREE_SELECTABLE_ALWAYS, 	///< Enables FL_TREE_REASON_RESELECTED events for callbacks
-};
-
-/// \enum Fl_Tree_Item_Draw_Mode
-/// Bit flags that control how item's labels and widget()s are drawn in the tree
-/// via item_draw_mode().
-///
-enum Fl_Tree_Item_Draw_Mode {
-  FL_TREE_ITEM_DRAW_DEFAULT=0,		///< If widget() defined, draw in place of label,
-                                        ///< and widget() tracks item height (default)
-  FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET=1,	///< If widget() defined, include label to the left of the widget
-  FL_TREE_ITEM_HEIGHT_FROM_WIDGET=2	///< If widget() defined, widget()'s height controls item's height
-};
-#endif /*FLTK_ABI_VERSION*/
-
-#if FLTK_ABI_VERSION >= 10303
-class Fl_Tree_Item;
-typedef void (Fl_Tree_Item_Draw_Callback)(Fl_Tree_Item*, void*);
-#endif
-
-/// \class Fl_Tree_Prefs
-///
-/// \brief Fl_Tree's Preferences class.
-///
-/// This class manages the Fl_Tree's defaults.
-/// You should probably be using the methods in Fl_Tree
-/// instead of trying to accessing tree's preferences settings directly.
-///
-class FL_EXPORT Fl_Tree_Prefs {
-  Fl_Font _labelfont;			// label's font face
-  Fl_Fontsize _labelsize;		// label's font size
-  int _margintop;			// -- 
-  int _marginleft;			//   |- tree's controllable margins
-#if FLTK_ABI_VERSION >= 10301
-  int _marginbottom;			// --
-#endif
-  int _openchild_marginbottom;		// extra space below an open child tree
-  int _usericonmarginleft;		// space to left of user icon (if any)
-  int _labelmarginleft;			// space to left of label
-#if FLTK_ABI_VERSION >= 10301
-  int _widgetmarginleft;		// space to left of widget
-#endif
-  int _connectorwidth;			// connector width (right of open/close icon)
-  int _linespacing;			// vertical space between lines
-  // Colors
-  Fl_Color _labelfgcolor;		// label's foreground color
-  Fl_Color _labelbgcolor;		// label's background color
-  Fl_Color _connectorcolor;		// connector dotted line color
-  Fl_Tree_Connector _connectorstyle;	// connector line style
-  Fl_Image *_openimage;			// the 'open' icon [+]
-  Fl_Image *_closeimage;		// the 'close' icon [-]
-  Fl_Image *_userimage;			// user's own icon
-#if FLTK_ABI_VERSION >= 10304
-  Fl_Image *_opendeimage;		// deactivated 'open' icon
-  Fl_Image *_closedeimage;		// deactivated 'close' icon
-  Fl_Image *_userdeimage;		// deactivated user icon
-#endif
-  char _showcollapse;			// 1=show collapse icons, 0=don't
-  char _showroot;			// show the root item as part of the tree
-  Fl_Tree_Sort   _sortorder;		// none, ascening, descending, etc.
-  Fl_Boxtype     _selectbox;		// selection box type
-  Fl_Tree_Select _selectmode;		// selection mode
-#if FLTK_ABI_VERSION >= 10301
-  Fl_Tree_Item_Reselect_Mode _itemreselectmode;	// controls item selection callback() behavior
-  Fl_Tree_Item_Draw_Mode     _itemdrawmode;	// controls how items draw label + widget()
-#endif /*FLTK_ABI_VERSION*/
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item_Draw_Callback *_itemdrawcallback;	// callback to handle drawing items (0=none)
-  void                       *_itemdrawuserdata;	// data for drawing items (0=none)
-#endif
-public:
-  Fl_Tree_Prefs();
-#if FLTK_ABI_VERSION >= 10304
-  ~Fl_Tree_Prefs();
-#endif
-  
-  ////////////////////////////
-  // Labels
-  ////////////////////////////
-  /// Return the label's font.
-  inline Fl_Font item_labelfont() const { return(_labelfont); }
-  /// Set the label's font to \p val.
-  inline void item_labelfont(Fl_Font val) { _labelfont = val; }
-  /// Return the label's size in pixels.
-  inline Fl_Fontsize item_labelsize() const { return(_labelsize); }
-  /// Set the label's size in pixels to \p val.
-  inline void item_labelsize(Fl_Fontsize val) { _labelsize = val; }
-  /// Get the default label foreground color
-  inline Fl_Color item_labelfgcolor() const { return(_labelfgcolor); }
-  /// Set the default label foreground color
-  inline void item_labelfgcolor(Fl_Color val) { _labelfgcolor = val; }
-#if FLTK_ABI_VERSION >= 10301
-  /// Get the default label background color.
-  ///    This returns the Fl_Tree::color() unless item_labelbgcolor()
-  ///    has been set explicitly.
-  ///
-  inline Fl_Color item_labelbgcolor() const {
-    return _labelbgcolor;
-  }
-  /// Set the default label background color.
-  ///     Once set, overrides the default behavior of using Fl_Tree::color().
-  ///
-  inline void item_labelbgcolor(Fl_Color val) {
-    _labelbgcolor = val;
-  }
-#else /*FLTK_ABI_VERSION*/
-  /// Get the default label background color
-  inline Fl_Color item_labelbgcolor() const {
-    return(_labelbgcolor);
-  }
-  /// Set the default label background color
-  inline void item_labelbgcolor(Fl_Color val) {
-    _labelbgcolor = val;
-  }
-#endif /*FLTK_ABI_VERSION*/
-
-  /////////////////
-  // Obsolete names - for 1.3.0 backwards compat
-  /////////////////
-  /// Obsolete: Return the label's font. Please use item_labelfont() instead.
-  inline Fl_Font labelfont() const { return(_labelfont); }
-  /// Obsolete: Set the label's font to \p val. Please use item_labelfont(Fl_Font) instead.
-  inline void labelfont(Fl_Font val) { _labelfont = val; }
-  /// Obsolete: Return the label's size in pixels. Please use item_labelsize() instead.
-  inline Fl_Fontsize labelsize() const { return(_labelsize); }
-  /// Obsolete: Set the label's size in pixels to \p val. Please use item_labelsize(Fl_Fontsize) instead.
-  inline void labelsize(Fl_Fontsize val) { _labelsize = val; }
-  /// Obsolete: Get the default label foreground color. Please use item_labelfgcolor() instead.
-  inline Fl_Color labelfgcolor() const { return(_labelfgcolor); }
-  /// Obsolete: Set the default label foreground color. Please use item_labelfgcolor(Fl_Color) instead.
-  inline void labelfgcolor(Fl_Color val) { _labelfgcolor = val; }
-  /// Obsolete: Get the default label background color. Please use item_labelbgcolor() instead.
-  inline Fl_Color labelbgcolor() const { return(item_labelbgcolor()); }
-  /// Obsolete: Set the default label background color. Please use item_labelbgcolor(Fl_Color) instead.
-  inline void labelbgcolor(Fl_Color val) { item_labelbgcolor(val); }
-  
-  ////////////////////////////
-  // Margins
-  ////////////////////////////
-  /// Get the left margin's value in pixels
-  inline int marginleft() const {
-    return(_marginleft);
-  }
-  /// Set the left margin's value in pixels
-  inline void marginleft(int val) {
-    _marginleft = val;
-  }
-  /// Get the top margin's value in pixels
-  inline int margintop() const {
-    return(_margintop);
-  }
-  /// Set the top margin's value in pixels
-  inline void margintop(int val) {
-    _margintop = val;
-  }
-#if FLTK_ABI_VERSION >= 10301
-  /// Get the bottom margin's value in pixels.
-  /// This is the extra distance the vertical scroller lets you travel.
-  inline int marginbottom() const {
-    return(_marginbottom);
-  }
-  /// Set the bottom margin's value in pixels
-  /// This is the extra distance the vertical scroller lets you travel.
-  inline void marginbottom(int val) {
-    _marginbottom = val;
-  }
-#endif /*FLTK_ABI_VERSION*/
-  /// Get the margin below an open child in pixels
-  inline int openchild_marginbottom() const {
-    return(_openchild_marginbottom);
-  }
-  /// Set the margin below an open child in pixels
-  inline void openchild_marginbottom(int val) {
-    _openchild_marginbottom = val;
-  }
-  /// Get the user icon's left margin value in pixels
-  inline int usericonmarginleft() const {
-    return(_usericonmarginleft);
-  }
-  /// Set the user icon's left margin value in pixels
-  inline void usericonmarginleft(int val) {
-    _usericonmarginleft = val;
-  }
-  /// Get the label's left margin value in pixels
-  inline int labelmarginleft() const {
-    return(_labelmarginleft);
-  }
-  /// Set the label's left margin value in pixels
-  inline void labelmarginleft(int val) {
-    _labelmarginleft = val;
-  }
-#if FLTK_ABI_VERSION >= 10301
-  /// Get the widget()'s left margin value in pixels
-  inline int widgetmarginleft() const {
-    return(_widgetmarginleft);
-  }
-  /// Set the widget's left margin value in pixels
-  inline void widgetmarginleft(int val) {
-    _widgetmarginleft = val;
-  }
-#endif /*FLTK_ABI_VERSION*/
-  /// Get the line spacing value in pixels
-  inline int linespacing() const {
-    return(_linespacing);
-  }
-  /// Set the line spacing value in pixels
-  inline void linespacing(int val) {
-    _linespacing = val;
-  }
-  
-  ////////////////////////////
-  // Colors and Styles
-  ////////////////////////////
-  /// Get the connector color used for tree connection lines.
-  inline Fl_Color connectorcolor() const {
-    return(_connectorcolor);
-  }
-  /// Set the connector color used for tree connection lines.
-  inline void connectorcolor(Fl_Color val) {
-    _connectorcolor = val;
-  }
-  /// Get the connector style.
-  inline Fl_Tree_Connector connectorstyle() const {
-    return(_connectorstyle);
-  }
-  /// Set the connector style.
-  inline void connectorstyle(Fl_Tree_Connector val) {
-    _connectorstyle = val;
-  }
-  /// Set the connector style [integer].
-  inline void connectorstyle(int val) {
-    _connectorstyle = Fl_Tree_Connector(val);
-  }
-  /// Get the tree connection line's width.
-  inline int connectorwidth() const {
-    return(_connectorwidth);
-  }
-  /// Set the tree connection line's width.
-  inline void connectorwidth(int val) {
-    _connectorwidth = val;
-  }
-  
-  ////////////////////////////
-  // Icons
-  ////////////////////////////
-  /// Get the current default 'open' icon.
-  ///     Returns the Fl_Image* of the icon, or 0 if none.
-  ///
-  inline Fl_Image *openicon() const {
-    return(_openimage);
-  }
-  void openicon(Fl_Image *val);
-  /// Gets the default 'close' icon
-  ///     Returns the Fl_Image* of the icon, or 0 if none.
-  ///
-  inline Fl_Image *closeicon() const {
-    return(_closeimage);
-  }
-  void closeicon(Fl_Image *val);
-  /// Gets the default 'user icon' (default is 0)
-  inline Fl_Image *usericon() const {
-    return(_userimage);
-  }
-  /// Sets the default 'user icon'
-  ///     Returns the Fl_Image* of the icon, or 0 if none (default).
-  ///
-  inline void usericon(Fl_Image *val) {
-    _userimage = val;
-#if FLTK_ABI_VERSION >= 10304
-    // Update deactivated version of icon..
-    if ( _userdeimage ) delete _userdeimage;
-    if ( _userimage ) {
-      _userdeimage = _userimage->copy();
-      _userdeimage->inactive();
-    } else {
-      _userdeimage = 0;
-    }
-#endif
-  }
-
-#if FLTK_ABI_VERSION >= 10304
-  /// Return the deactivated version of the open icon, if any.
-  /// Returns 0 if none.
-  inline Fl_Image *opendeicon() const {
-    return _opendeimage;
-  }
-  /// Return the deactivated version of the close icon, if any.
-  /// Returns 0 if none.
-  inline Fl_Image *closedeicon() const {
-    return _closedeimage;
-  }
-  /// Return the deactivated version of the user icon, if any.
-  /// Returns 0 if none.
-  inline Fl_Image *userdeicon() const {
-    return _userdeimage;
-  }
-#endif
-  
-  ////////////////////////////
-  // Options
-  ////////////////////////////
-  /// Returns 1 if the collapse icon is enabled, 0 if not.
-  inline char showcollapse() const {
-    return(_showcollapse);
-  }
-  /// Set if we should show the collapse icon or not.
-  /// If collapse icons are disabled, the user will not be able
-  /// to interactively collapse items in the tree, unless the application
-  /// provides some other means via open() and close().
-  ///
-  /// \param[in] val 1: shows collapse icons (default),\n
-  ///                0: hides collapse icons.
-  ///
-  inline void showcollapse(int val) {
-    _showcollapse = val;
-  }
-  /// Get the default sort order value
-  inline Fl_Tree_Sort sortorder() const {
-    return(_sortorder);
-  }
-  /// Set the default sort order value.
-  ///     Defines the order new items appear when add()ed to the tree.
-  ///     See Fl_Tree_Sort for possible values.
-  ///
-  inline void sortorder(Fl_Tree_Sort val) {
-    _sortorder = val;
-  }
-  /// Get the default selection box's box drawing style as an Fl_Boxtype.
-  inline Fl_Boxtype selectbox() const {
-    return(_selectbox);
-  }
-  /// Set the default selection box's box drawing style to \p val.
-  inline void selectbox(Fl_Boxtype val) {
-    _selectbox = val;
-  }
-  /// Returns 1 if the root item is to be shown, or 0 if not.
-  inline int showroot() const {
-    return(int(_showroot));
-  }
-  /// Set if the root item should be shown or not.
-  /// \param[in] val 1 -- show the root item (default)\n
-  ///                0 -- hide the root item.
-  ///
-  inline void showroot(int val) {
-    _showroot = char(val);
-  }
-  /// Get the selection mode used for the tree
-  inline Fl_Tree_Select selectmode() const {
-    return(_selectmode);
-  }
-  /// Set the selection mode used for the tree to \p val.
-  ///     This affects how items in the tree are selected
-  ///     when clicked on and dragged over by the mouse.
-  ///     See Fl_Tree_Select for possible values.
-  ///
-  inline void selectmode(Fl_Tree_Select val) {
-    _selectmode = val;
-  }
-#if FLTK_ABI_VERSION >= 10301
-  /// Returns the current item re/selection mode
-  Fl_Tree_Item_Reselect_Mode item_reselect_mode() const {
-    return _itemreselectmode;
-  }
-  /// Sets the item re/selection mode
-  void item_reselect_mode(Fl_Tree_Item_Reselect_Mode mode) {
-    _itemreselectmode = mode;
-  }
-  /// Get the 'item draw mode' used for the tree
-  inline Fl_Tree_Item_Draw_Mode item_draw_mode() const {
-    return(_itemdrawmode);
-  }
-  /// Set the 'item draw mode' used for the tree to \p val.
-  ///     This affects how items in the tree are drawn,
-  ///     such as when a widget() is defined. 
-  ///     See Fl_Tree_Item_Draw_Mode for possible values.
-  ///
-  inline void item_draw_mode(Fl_Tree_Item_Draw_Mode val) {
-    _itemdrawmode = val;
-  }
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  void item_draw_callback(Fl_Tree_Item_Draw_Callback *cb, void *data=0) {
-    _itemdrawcallback = cb;
-    _itemdrawuserdata = data;
-  }
-  Fl_Tree_Item_Draw_Callback* item_draw_callback() const {
-    return(_itemdrawcallback);
-  }
-  void* item_draw_user_data() const {
-    return(_itemdrawuserdata);
-  }
-  void do_item_draw_callback(Fl_Tree_Item *o) const {
-    _itemdrawcallback(o, _itemdrawuserdata);
-  }
-#endif
-};
-
-#endif /*FL_TREE_PREFS_H*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Valuator.H
+++ /dev/null
@@ -1,138 +1,0 @@
-//
-// "$Id$"
-//
-// Valuator header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Valuator widget . */
-
-#ifndef Fl_Valuator_H
-#define Fl_Valuator_H
-
-#ifndef Fl_Widget_H
-#include "Fl_Widget.H"
-#endif
-
-// shared type() values for classes that work in both directions:
-#define FL_VERTICAL		0 ///< The valuator can work vertically
-#define FL_HORIZONTAL		1 ///< The valuator can work horizontally
-
-/**
-  The Fl_Valuator class controls a single floating-point value
-  and provides a consistent interface to set the value, range, and step,
-  and insures that callbacks are done the same for every object.
-
-  There are probably more of these classes in FLTK than any others:
-
-  <P ALIGN=CENTER>\image html valuators.png</P>
-  \image latex valuators.png "Valuators derived from Fl_Valuators" width=10cm
-
-  In the above diagram each box surrounds an actual subclass.  These
-  are further differentiated by setting the type() of the widget to
-  the symbolic value labeling the widget.
-  The ones labelled "0" are the default versions with a type(0).
-  For consistency the symbol FL_VERTICAL is defined as zero.
-*/
-class FL_EXPORT Fl_Valuator : public Fl_Widget {
-
-  double value_;
-  double previous_value_;
-  double min, max; // truncates to this range *after* rounding
-  double A; int B; // rounds to multiples of A/B, or no rounding if A is zero
-
-protected:
-  /** Tells if the valuator is an FL_HORIZONTAL one */
-  int horizontal() const {return type()& FL_HORIZONTAL;}
-  Fl_Valuator(int X, int Y, int W, int H, const char* L);
-
-  /** Gets the previous floating point value before an event changed it */
-  double previous_value() const {return previous_value_;}
-  /** Stores the current value in the previous value */
-  void handle_push() {previous_value_ = value_;}
-  double softclamp(double);
-  void handle_drag(double newvalue);
-  void handle_release(); // use drag() value
-  virtual void value_damage(); // cause damage() due to value() changing
-  /** Sets the current floating point value. */
-  void set_value(double v) {value_ = v;}
-
-public:
-
-    /**    Sets the minimum (a) and maximum (b) values for the valuator widget. */
-    void bounds(double a, double b) {min=a; max=b;}
-    /**    Gets the minimum value for the valuator.  */
-    double minimum() const {return min;}
-    /**    Sets the minimum value for the valuator.  */
-    void minimum(double a) {min = a;}
-    /**    Gets the maximum value for the valuator.  */
-    double maximum() const {return max;}
-    /**    Sets the maximum value for the valuator.  */
-    void maximum(double a) {max = a;}
-  /**
-    Sets the minimum and maximum values for the valuator. When
-    the user manipulates the widget, the value is limited to this
-    range. This clamping is done <I>after</I> rounding to the step
-    value (this makes a difference if the range is not a multiple of
-    the step).
-
-    The minimum may be greater than the maximum. This has the
-    effect of "reversing" the object so the larger values
-    are in the opposite direction. This also switches which end of
-    the filled sliders is filled.
-
-    Some widgets consider this a "soft" range.  This
-    means they will stop at the range, but if the user releases and
-    grabs the control again and tries to move it further, it is
-    allowed.
-
-    The range may affect the display. You must redraw()
-    the widget after changing the range.
-  */
-  void range(double a, double b) {min = a; max = b;}
-  /**    See double Fl_Valuator::step() const   */
-  void step(int a) {A = a; B = 1;}
-  /**    See double Fl_Valuator::step() const   */
-  void step(double a, int b) {A = a; B = b;}
-  void step(double s);
-  /**
-    Gets or sets the step value. As the user moves the mouse the
-    value is rounded to the nearest multiple of the step value. This
-    is done \e before clamping it to the range. For most widgets
-    the default step is zero.
-
-    For precision the step is stored as the ratio of a double \p A and
-    an integer \p B = A/B. You can set these values directly. Currently
-    setting a floating point value sets the nearest A/1 or 1/B value
-    possible.
-  */
-  double step() const {return A/B;}
-  void precision(int digits);
-
-  /** Gets the floating point(double) value. See int value(double) */
-  double value() const {return value_;}
-  int value(double);
-
-  virtual int format(char*);
-  double round(double); // round to nearest multiple of step
-  double clamp(double); // keep in range
-  double increment(double, int); // add n*step to value
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Value_Input.H
+++ /dev/null
@@ -1,130 +1,0 @@
-//
-// "$Id$"
-//
-// Value input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Input widget . */
-
-#ifndef Fl_Value_Input_H
-#define Fl_Value_Input_H
-
-#include "Fl_Valuator.H"
-#include "Fl_Input.H"
-
-/**
-  The Fl_Value_Input widget displays a numeric value.
-  The user can click in the text field and edit it - there is in
-  fact a hidden Fl_Input widget with
-  type(FL_FLOAT_INPUT) or type(FL_INT_INPUT) in
-  there - and when they hit return or tab the value updates to
-  what they typed and the callback is done.
-  
-  <P>If step() is non-zero and integral, then the range of numbers
-  is limited to integers instead of floating point numbers. As
-  well as displaying the value as an integer, typed input is also
-  limited to integer values, even if the hidden Fl_Input widget
-  is of type(FL_FLOAT_INPUT).</P>
-  
-  <P>If step() is non-zero, the user can also drag the
-  mouse across the object and thus slide the value. The left
-  button moves one step() per pixel, the middle by 10
-  * step(), and the right button by 100 * step(). It
-  is therefore impossible to select text by dragging across it,
-  although clicking can still move the insertion cursor.</P>
-  
-  <P>If step() is non-zero and integral, then the range
-  of numbers are limited to integers instead of floating point
-  values.
-  
-  <P ALIGN="CENTER">\image html Fl_Value_Input.png 
-  \image latex  Fl_Value_Input.png "Fl_Value_Input" width=4cm
-*/
-class FL_EXPORT Fl_Value_Input : public Fl_Valuator {
-public:
-  /* This is the encapsulated Fl_input attribute to which 
-  this class delegates the value font, color and shortcut */
-  Fl_Input input;
-private:
-  char soft_;
-  static void input_cb(Fl_Widget*,void*);
-  virtual void value_damage(); // cause damage() due to value() changing
-public:
-  int handle(int);
-protected:
-  void draw();
-public:
-  void resize(int,int,int,int);
-  Fl_Value_Input(int x,int y,int w,int h,const char *l=0);
-  ~Fl_Value_Input();
-
-  /** See void Fl_Value_Input::soft(char s) */
-  void soft(char s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag
-    the value outside the range. If they drag the value to one of
-    the ends, let go, then grab again and continue to drag, they can
-    get to any value. The default is true.
-  */
-  char soft() const {return soft_;}
-  /**
-   Returns the current shortcut key for the Input.
-   \see Fl_Value_Input::shortcut(int) 
-  */
-  int shortcut() const {return input.shortcut();}
-  /** 
-   Sets the shortcut key to \p s. Setting this
-   overrides the use of '&' in the label().  The value is a bitwise
-   OR of a key and a set of shift flags, for example FL_ALT | 'a'
-   , FL_ALT | (FL_F + 10), or just 'a'.  A value
-   of 0 disables the shortcut.
-   
-   The key can be any value returned by 
-   Fl::event_key(), but will usually be an ASCII letter.  Use
-   a lower-case letter unless you require the shift key to be held down.
-   
-   The shift flags can be any set of values accepted by 
-   Fl::event_state().  If the bit is on that shift key must
-   be pushed.  Meta, Alt, Ctrl, and Shift must be off if they are not in
-   the shift flags (zero for the other bits indicates a "don't care"
-   setting).
-   */
-  void shortcut(int s) {input.shortcut(s);}
-
-  /** Gets the typeface of the text in the value box.  */
-  Fl_Font textfont() const {return input.textfont();}
-  /** Sets the typeface of the text in the value box.  */
-  void textfont(Fl_Font s) {input.textfont(s);}
-  /** Gets the size of the text in the value box.  */
-  Fl_Fontsize textsize() const {return input.textsize();}
-  /** Sets the size of the text in the value box.  */
-  void textsize(Fl_Fontsize s) {input.textsize(s);}
-  /** Gets the color of the text in the value box.  */
-  Fl_Color textcolor() const {return input.textcolor();}
-  /** Sets the color of the text in the value box.*/
-  void textcolor(Fl_Color n) {input.textcolor(n);}
-  /** Gets the color of the text cursor. The text cursor is black by default. */
-  Fl_Color cursor_color() const {return input.cursor_color();}
-  /** Sets the color of the text cursor. The text cursor is black by default. */
-  void cursor_color(Fl_Color n) {input.cursor_color(n);}
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Value_Output.H
+++ /dev/null
@@ -1,86 +1,0 @@
-//
-// "$Id$"
-//
-// Value output header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Output widget . */
-
-#ifndef Fl_Value_Output_H
-#define Fl_Value_Output_H
-
-#ifndef Fl_Valuator_H
-#include "Fl_Valuator.H"
-#endif
-
-/**
-  The Fl_Value_Output widget displays a floating point value.
-  If step() is not zero, the user can adjust the value by
-  dragging the mouse left and right.  The left button moves one step()
-  per pixel, the middle by 10 * step(), and the right button by 
-  100 * step().
-  <P>This is much lighter-weight than 
-  Fl_Value_Input because it contains no text editing code or
-  character buffer. </P>
-  <P ALIGN=CENTER>\image html Fl_Value_Output.png 
-  \image latex  Fl_Value_Output.png "Fl_Value_Output" width=4cm
-*/
-class FL_EXPORT Fl_Value_Output : public Fl_Valuator {
-  Fl_Font textfont_;
-  Fl_Fontsize textsize_;
-  uchar soft_;
-  Fl_Color textcolor_;
-
-protected:
-  void draw();
-
-public:
-  int handle(int);
-  Fl_Value_Output(int x,int y,int w,int h,const char *l=0);
-
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  void soft(uchar s) {soft_ = s;}
-  /**
-    If "soft" is turned on, the user is allowed to drag the value outside
-    the range.  If they drag the value to one of the ends, let go, then
-    grab again and continue to drag, they can get to any value.  Default is
-    one.
-  */
-  uchar soft() const {return soft_;}
-
-  /**    Gets the typeface of the text in the value box.  */
-  Fl_Font textfont() const {return textfont_;}
-  /**    Sets the typeface of the text in the value box.  */
-  void textfont(Fl_Font s) {textfont_ = s;}
-  /**    Gets the size of the text in the value box.  */
-  Fl_Fontsize textsize() const {return textsize_;}
-  void textsize(Fl_Fontsize s) {textsize_ = s;}
-  /**    Sets the color of the text in the value box.  */
-  Fl_Color textcolor() const {return textcolor_;}
-  /**    Gets the color of the text in the value box.  */
-  void textcolor(Fl_Color s) {textcolor_ = s;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Value_Slider.H
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$"
-//
-// Value slider header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Value_Slider widget . */
-
-#ifndef Fl_Value_Slider_H
-#define Fl_Value_Slider_H
-
-#include "Fl_Slider.H"
-
-/**
-  The Fl_Value_Slider widget is a Fl_Slider widget
-  with a box displaying the current value.
-  <P ALIGN=CENTER>\image html value_slider.png 
-  \image latex  value_slider.png "Fl_Value_Slider" width=4cm
-*/
-class FL_EXPORT Fl_Value_Slider : public Fl_Slider {
-    Fl_Font textfont_;
-    Fl_Fontsize textsize_;
-    Fl_Color textcolor_;
-protected:
-    void draw();
-public:
-    int handle(int);
-    Fl_Value_Slider(int x,int y,int w,int h, const char *l = 0);
-    /**    Gets the typeface of the text in the value box.  */
-    Fl_Font textfont() const {return textfont_;}
-    /**    Sets the typeface of the text in the value box.  */
-    void textfont(Fl_Font s) {textfont_ = s;}
-    /**    Gets the size of the text in the value box.  */
-    Fl_Fontsize textsize() const {return textsize_;}
-    /**    Sets the size of the text in the value box.  */
-    void textsize(Fl_Fontsize s) {textsize_ = s;}
-    /**    Gets the color of the text in the value box.  */
-    Fl_Color textcolor() const {return textcolor_;}
-    /**    Sets the color of the text in the value box.  */
-    void textcolor(Fl_Color s) {textcolor_ = s;}
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Widget.H
+++ /dev/null
@@ -1,1040 +1,0 @@
-//
-// "$Id$"
-//
-// Widget header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Widget, Fl_Label classes . */
-
-#ifndef Fl_Widget_H
-#define Fl_Widget_H
-
-#include "Enumerations.H"
-
-/**
-  \todo	typedef's fl_intptr_t and fl_uintptr_t should be documented.
-*/
-#ifdef _WIN64
-#if defined(__GNUC__) || defined(__clang__)
-#include <stdint.h>
-#else
-#include <stddef.h>  // M$VC
-#endif
-typedef intptr_t fl_intptr_t;
-typedef uintptr_t fl_uintptr_t;
-#else
-typedef long fl_intptr_t;
-typedef unsigned long fl_uintptr_t;
-#endif
-
-class Fl_Widget;
-class Fl_Window;
-class Fl_Group;
-class Fl_Image;
-
-/** Default callback type definition for all fltk widgets (by far the most used) */
-typedef void (Fl_Callback )(Fl_Widget*, void*);
-/** Default callback type pointer definition for all fltk widgets */
-typedef Fl_Callback* Fl_Callback_p; // needed for BORLAND
-/** One parameter callback type definition passing only the widget */
-typedef void (Fl_Callback0)(Fl_Widget*);
-/** Callback type definition passing the widget and a long data value */
-typedef void (Fl_Callback1)(Fl_Widget*, long);
-
-/** This struct stores all information for a text or mixed graphics label.
-
-    \todo There is an aspiration that the Fl_Label type will become a widget by itself.
-          That way we will be avoiding a lot of code duplication by handling labels in
-          a similar fashion to widgets containing text. We also provide an easy
-          interface for very complex labels, containing html or vector graphics.
-          However, this re-factoring is not in place in this release.
- */
-struct FL_EXPORT Fl_Label {
-  /** label text */
-  const char* value;
-  /** optional image for an active label */
-  Fl_Image* image;
-  /** optional image for a deactivated label */
-  Fl_Image* deimage;
-  /** label font used in text */
-  Fl_Font font;
-  /** size of label font */
-  Fl_Fontsize size;
-  /** text color */
-  Fl_Color color;
-  /** alignment of label */
-  Fl_Align align_;
-  /** type of label. \see Fl_Labeltype */
-  uchar type;
-
-  /** Draws the label aligned to the given box */
-  void draw(int,int,int,int, Fl_Align) const ;
-  void measure(int &w, int &h) const ;
-};
-
-
-/** Fl_Widget is the base class for all widgets in FLTK.  
-  
-    You can't create one of these because the constructor is not public.
-    However you can subclass it.  
-
-    All "property" accessing methods, such as color(), parent(), or argument() 
-    are implemented as trivial inline functions and thus are as fast and small 
-    as accessing fields in a structure. Unless otherwise noted, the property 
-    setting methods such as color(n) or label(s) are also trivial inline 
-    functions, even if they change the widget's appearance. It is up to the 
-    user code to call redraw() after these.
- */
-class FL_EXPORT Fl_Widget {
-  friend class Fl_Group;
-
-  Fl_Group* parent_;
-  Fl_Callback* callback_;
-  void* user_data_;
-  int x_,y_,w_,h_;
-  Fl_Label label_;
-  unsigned int flags_;
-  Fl_Color color_;
-  Fl_Color color2_;
-  uchar type_;
-  uchar damage_;
-  uchar box_;
-  uchar when_;
-
-  const char *tooltip_;
-
-  /** unimplemented copy ctor */
-  Fl_Widget(const Fl_Widget &);
-  /** unimplemented assignment operator */
-  Fl_Widget& operator=(const Fl_Widget &);
-
-protected:
-
-  /** Creates a widget at the given position and size.
-
-      The Fl_Widget is a protected constructor, but all derived widgets have a 
-      matching public constructor. It takes a value for x(), y(), w(), h(), and 
-      an optional value for label().
-    
-      \param[in] x, y the position of the widget relative to the enclosing window
-      \param[in] w, h size of the widget in pixels
-      \param[in] label optional text for the widget label
-   */
-  Fl_Widget(int x, int y, int w, int h, const char *label=0L);
-
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void x(int v) {x_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void y(int v) {y_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void w(int v) {w_ = v;}
-  /** Internal use only. Use position(int,int), size(int,int) or resize(int,int,int,int) instead. */
-  void h(int v) {h_ = v;}
-  /** Gets the widget flags mask */
-  unsigned int flags() const {return flags_;}
-  /** Sets a flag in the flags mask */
-  void set_flag(unsigned int c) {flags_ |= c;}
-  /** Clears a flag in the flags mask */
-  void clear_flag(unsigned int c) {flags_ &= ~c;}
-  /** flags possible values enumeration.
-      See activate(), output(), visible(), changed(), set_visible_focus()
-  */
-  enum {
-        INACTIVE        = 1<<0,   ///< the widget can't receive focus, and is disabled but potentially visible
-        INVISIBLE       = 1<<1,   ///< the widget is not drawn, but can receive a few special events
-        OUTPUT          = 1<<2,   ///< for output only
-        NOBORDER        = 1<<3,   ///< don't draw a decoration (Fl_Window)
-        FORCE_POSITION  = 1<<4,   ///< don't let the window manager position the window (Fl_Window)
-        NON_MODAL       = 1<<5,   ///< this is a hovering toolbar window (Fl_Window)
-        SHORTCUT_LABEL  = 1<<6,   ///< the label contains a shortcut we need to draw
-        CHANGED         = 1<<7,   ///< the widget value changed
-        OVERRIDE        = 1<<8,   ///< position window on top (Fl_Window)
-        VISIBLE_FOCUS   = 1<<9,   ///< accepts keyboard focus navigation if the widget can have the focus
-        COPIED_LABEL    = 1<<10,  ///< the widget label is internally copied, its destruction is handled by the widget
-        CLIP_CHILDREN   = 1<<11,  ///< all drawing within this widget will be clipped (Fl_Group)
-        MENU_WINDOW     = 1<<12,  ///< a temporary popup window, dismissed by clicking outside (Fl_Window)
-        TOOLTIP_WINDOW  = 1<<13,  ///< a temporary popup, transparent to events, and dismissed easily (Fl_Window)
-        MODAL           = 1<<14,  ///< a window blocking input to all other winows (Fl_Window)
-        NO_OVERLAY      = 1<<15,  ///< window not using a hardware overlay plane (Fl_Menu_Window)
-        GROUP_RELATIVE  = 1<<16,  ///< Reserved, not implemented. DO NOT USE.
-        COPIED_TOOLTIP  = 1<<17,  ///< the widget tooltip is internally copied, its destruction is handled by the widget
-        FULLSCREEN      = 1<<18,  ///< a fullscreen window (Fl_Window)
-        MAC_USE_ACCENTS_MENU = 1<<19, ///< On the Mac OS platform, pressing and holding a key on the keyboard opens an accented-character menu window (Fl_Input_, Fl_Text_Editor)
-        // (space for more flags)
-        USERFLAG3       = 1<<29,  ///< reserved for 3rd party extensions
-        USERFLAG2       = 1<<30,  ///< reserved for 3rd party extensions
-        USERFLAG1       = 1<<31   ///< reserved for 3rd party extensions
-  };
-  void draw_box() const;
-  void draw_box(Fl_Boxtype t, Fl_Color c) const;
-  void draw_box(Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c) const;
-  void draw_backdrop() const;
-  /** draws a focus rectangle around the widget */
-  void draw_focus() {draw_focus(box(),x(),y(),w(),h());}
-  void draw_focus(Fl_Boxtype t, int x,int y,int w,int h) const;
-  void draw_label() const;
-  void draw_label(int, int, int, int) const;
-
-public:
-
-  /** Destroys the widget.
-      Destroying single widgets is not very common. You almost always want to 
-      destroy the parent group instead, which will destroy all of the child widgets 
-      and groups in that group.
-      
-      \since FLTK 1.3, the widget's destructor removes the widget from its parent
-      group, if it is member of a group.
-   */
-  virtual ~Fl_Widget();
-
-  /** Draws the widget.
-      Never call this function directly. FLTK will schedule redrawing whenever
-      needed. If your widget must be redrawn as soon as possible, call redraw()
-      instead.
-
-      Override this function to draw your own widgets.
-
-      If you ever need to call another widget's draw method <I>from within your
-      own draw() method</I>, e.g. for an embedded scrollbar, you can do it
-      (because draw() is virtual) like this:
-
-      \code
-        Fl_Widget *s = &scroll;		// scroll is an embedded Fl_Scrollbar
-	s->draw();			// calls Fl_Scrollbar::draw()
-      \endcode
-   */
-  virtual void draw() = 0;
-
-  /** Handles the specified event. 
-      You normally don't call this method directly, but instead let FLTK do 
-      it when the user interacts with the widget.
-     
-      When implemented in a widget, this function must return 0 if the 
-      widget does not use the event or 1 otherwise.
-
-      Most of the time, you want to call the inherited handle() method in 
-      your overridden method so that you don't short-circuit events that you 
-      don't handle. In this last case you should return the callee retval.
-    
-      \param[in] event the kind of event received
-      \retval 0 if the event was not used or understood
-      \retval 1 if the event was used and can be deleted
-      \see Fl_Event
-   */
-  virtual int handle(int event);
-
-  /** Returns whether the current label was assigned with copy_label().
-
-      This can be useful for temporarily overwriting the widget's label
-      and restoring it later.
-
-      \retval 0 current label was assigned with label().
-      \retval 1 current label was assigned with copy_label().
-  */
-  int is_label_copied() const {return ((flags_ & COPIED_LABEL) ? 1 : 0);}
-
-  /** Returns a pointer to the parent widget.  
-      Usually this is a Fl_Group or Fl_Window. 
-      \retval NULL if the widget has no parent
-      \see Fl_Group::add(Fl_Widget*)
-   */
-  Fl_Group* parent() const {return parent_;}
-
-  /** Internal use only - "for hacks only".
-  
-      It is \em \b STRONGLY recommended not to use this method, because it
-      short-circuits Fl_Group's normal widget adding and removing methods,
-      if the widget is already a child widget of another Fl_Group.
-
-      Use Fl_Group::add(Fl_Widget*) and/or Fl_Group::remove(Fl_Widget*) instead.
-  */
-  void parent(Fl_Group* p) {parent_ = p;} // for hacks only, use Fl_Group::add()
-
-  /** Gets the widget type.
-      Returns the widget type value, which is used for Forms compatibility
-      and to simulate RTTI.
-      
-      \todo Explain "simulate RTTI" (currently only used to decide if a widget
-      is a window, i.e. type()>=FL_WINDOW ?). Is type() really used in a way
-      that ensures "Forms compatibility" ?
-   */
-  uchar type() const {return type_;}
-
-  /** Sets the widget type.
-      This is used for Forms compatibility.
-   */
-  void type(uchar t) {type_ = t;}
-
-  /** Gets the widget position in its window.
-      \return the x position relative to the window
-   */
-  int x() const {return x_;}
-
-  /** Gets the widget position in its window.
-      \return the y position relative to the window
-   */
-  int y() const {return y_;}
-
-  /** Gets the widget width.
-      \return the width of the widget in pixels.
-   */
-  int w() const {return w_;}
-
-  /** Gets the widget height.
-      \return the height of the widget in pixels.
-   */
-  int h() const {return h_;}
-
-  /** Changes the size or position of the widget.
-
-      This is a virtual function so that the widget may implement its 
-      own handling of resizing. The default version does \e not
-      call the redraw() method, but instead relies on the parent widget 
-      to do so because the parent may know a faster way to update the 
-      display, such as scrolling from the old position.  
-
-      Some window managers under X11 call resize() a lot more often 
-      than needed. Please verify that the position or size of a widget 
-      did actually change before doing any extensive calculations.
-
-      position(X, Y) is a shortcut for resize(X, Y, w(), h()), 
-      and size(W, H) is a shortcut for resize(x(), y(), W, H).
-    
-      \param[in] x, y new position relative to the parent window 
-      \param[in] w, h new size
-      \see position(int,int), size(int,int)
-   */
-  virtual void resize(int x, int y, int w, int h);
-
-  /** Internal use only. */
-  int damage_resize(int,int,int,int);
-
-  /** Repositions the window or widget.
-
-      position(X, Y) is a shortcut for resize(X, Y, w(), h()).
-    
-      \param[in] X, Y new position relative to the parent window 
-      \see resize(int,int,int,int), size(int,int)
-   */
-  void position(int X,int Y) {resize(X,Y,w_,h_);}
-
-  /** Changes the size of the widget.
-
-      size(W, H) is a shortcut for resize(x(), y(), W, H).
-    
-      \param[in] W, H new size
-      \see position(int,int), resize(int,int,int,int)
-   */
-  void size(int W,int H) {resize(x_,y_,W,H);}
-
-  /** Gets the label alignment.
-
-      \return label alignment
-      \see label(), align(Fl_Align), Fl_Align
-   */
-  Fl_Align align() const {return label_.align_;}
-
-  /** Sets the label alignment.
-      This controls how the label is displayed next to or inside the widget. 
-      The default value is FL_ALIGN_CENTER, which centers the label inside 
-      the widget.
-      \param[in] alignment new label alignment
-      \see align(), Fl_Align
-   */
-  void align(Fl_Align alignment) {label_.align_ = alignment;}
-
-  /** Gets the box type of the widget.
-      \return the current box type
-      \see box(Fl_Boxtype), Fl_Boxtype
-   */
-  Fl_Boxtype box() const {return (Fl_Boxtype)box_;}
-  
-  /** Sets the box type for the widget. 
-      This identifies a routine that draws the background of the widget.
-      See Fl_Boxtype for the available types. The default depends on the 
-      widget, but is usually FL_NO_BOX or FL_UP_BOX.
-      \param[in] new_box the new box type
-      \see box(), Fl_Boxtype
-   */
-  void box(Fl_Boxtype new_box) {box_ = new_box;}
-
-  /** Gets the background color of the widget.
-      \return current background color
-      \see color(Fl_Color), color(Fl_Color, Fl_Color)
-   */
-  Fl_Color color() const {return color_;}
-
-  /** Sets the background color of the widget. 
-      The color is passed to the box routine. The color is either an index into 
-      an internal table of RGB colors or an RGB color value generated using 
-      fl_rgb_color().
-      
-      The default for most widgets is FL_BACKGROUND_COLOR. Use Fl::set_color()
-      to redefine colors in the color map.
-      \param[in] bg background color
-      \see color(), color(Fl_Color, Fl_Color), selection_color(Fl_Color)
-   */
-  void color(Fl_Color bg) {color_ = bg;}
-
-  /** Gets the selection color.
-      \return the current selection color
-      \see selection_color(Fl_Color), color(Fl_Color, Fl_Color)
-   */
-  Fl_Color selection_color() const {return color2_;}
-
-  /** Sets the selection color.
-      The selection color is defined for Forms compatibility and is usually 
-      used to color the widget when it is selected, although some widgets 
-      use this color for other purposes. You can set both colors at once 
-      with color(Fl_Color bg, Fl_Color sel).
-      \param[in] a the new selection color
-      \see selection_color(), color(Fl_Color, Fl_Color)
-   */
-  void selection_color(Fl_Color a) {color2_ = a;}
-
-  /** Sets the background and selection color of the widget. 
-
-      The two color form sets both the background and selection colors. 
-      \param[in] bg background color
-      \param[in] sel selection color
-      \see color(unsigned), selection_color(unsigned)
-   */
-  void color(Fl_Color bg, Fl_Color sel) {color_=bg; color2_=sel;}
-
-  /** Gets the current label text.
-      \return a pointer to the current label text
-      \see label(const char *), copy_label(const char *)
-   */
-  const char* label() const {return label_.value;}
-
-  /** Sets the current label pointer.
-
-      The label is shown somewhere on or next to the widget. The passed pointer 
-      is stored unchanged in the widget (the string is \em not copied), so if 
-      you need to set the label to a formatted value, make sure the buffer is 
-      static, global, or allocated. The copy_label() method can be used 
-      to make a copy of the label string automatically.
-      \param[in] text pointer to new label text
-      \see copy_label()
-   */
-  void label(const char* text);
-
-  /** Sets the current label. 
-      Unlike label(), this method allocates a copy of the label 
-      string instead of using the original string pointer.
-
-      The internal copy will automatically be freed whenever you assign
-      a new label or when the widget is destroyed.
-
-      \param[in] new_label the new label text
-      \see label()
-   */
-  void copy_label(const char *new_label);
-
-  /** Shortcut to set the label text and type in one call.
-      \see label(const char *), labeltype(Fl_Labeltype)
-   */
-  void label(Fl_Labeltype a, const char* b) {label_.type = a; label_.value = b;}
-
-  /** Gets the label type.
-      \return the current label type.
-      \see Fl_Labeltype
-   */
-  Fl_Labeltype labeltype() const {return (Fl_Labeltype)label_.type;}
-
-  /** Sets the label type. 
-      The label type identifies the function that draws the label of the widget. 
-      This is generally used for special effects such as embossing or for using 
-      the label() pointer as another form of data such as an icon. The value 
-      FL_NORMAL_LABEL prints the label as plain text.
-      \param[in] a new label type
-      \see Fl_Labeltype
-   */
-  void labeltype(Fl_Labeltype a) {label_.type = a;}
-
-  /** Gets the label color. 
-      The default color is FL_FOREGROUND_COLOR. 
-      \return the current label color
-   */
-  Fl_Color labelcolor() const {return label_.color;}
-
-  /** Sets the label color. 
-      The default color is FL_FOREGROUND_COLOR. 
-      \param[in] c the new label color
-   */
-  void labelcolor(Fl_Color c) {label_.color=c;}
-
-  /** Gets the font to use. 
-      Fonts are identified by indexes into a table. The default value
-      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
-      The function Fl::set_font() can define new typefaces.
-      \return current font used by the label
-      \see Fl_Font
-   */
-  Fl_Font labelfont() const {return label_.font;}
-
-  /** Sets the font to use. 
-      Fonts are identified by indexes into a table. The default value
-      uses a Helvetica typeface (Arial for Microsoft&reg; Windows&reg;).
-      The function Fl::set_font() can define new typefaces.
-      \param[in] f the new font for the label
-      \see Fl_Font
-   */
-  void labelfont(Fl_Font f) {label_.font=f;}
-
-  /** Gets the font size in pixels. 
-      The default size is 14 pixels.
-      \return the current font size
-   */
-  Fl_Fontsize labelsize() const {return label_.size;}
-
-  /** Sets the font size in pixels.
-      \param[in] pix the new font size
-      \see Fl_Fontsize labelsize()
-   */
-  void labelsize(Fl_Fontsize pix) {label_.size=pix;}
-
-  /** Gets the image that is used as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \return the current image
-   */
-  Fl_Image* image() {return label_.image;}
-  const Fl_Image* image() const {return label_.image;}
-
-  /** Sets the image to use as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \param[in] img the new image for the label 
-   */
-  void image(Fl_Image* img) {label_.image=img;}
-
-  /** Sets the image to use as part of the widget label.
-      This image is used when drawing the widget in the active state.
-      \param[in] img the new image for the label 
-   */
-  void image(Fl_Image& img) {label_.image=&img;}
-
-  /** Gets the image that is used as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \return the current image for the deactivated widget
-   */
-  Fl_Image* deimage() {return label_.deimage;}
-  const Fl_Image* deimage() const {return label_.deimage;}
-
-  /** Sets the image to use as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \param[in] img the new image for the deactivated widget
-   */
-  void deimage(Fl_Image* img) {label_.deimage=img;}
-
-  /** Sets the image to use as part of the widget label.  
-      This image is used when drawing the widget in the inactive state.
-      \param[in] img the new image for the deactivated widget
-   */
-  void deimage(Fl_Image& img) {label_.deimage=&img;}
-
-  /** Gets the current tooltip text.
-      \return a pointer to the tooltip text or NULL
-      \see tooltip(const char*), copy_tooltip(const char*)
-   */
-  const char *tooltip() const {return tooltip_;}
-
-  void tooltip(const char *text);		// see Fl_Tooltip
-  void copy_tooltip(const char *text);		// see Fl_Tooltip
-
-  /** Gets the current callback function for the widget.
-      Each widget has a single callback.
-      \return current callback
-   */
-  Fl_Callback_p callback() const {return callback_;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-      \param[in] p user data
-   */
-  void callback(Fl_Callback* cb, void* p) {callback_=cb; user_data_=p;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-   */
-  void callback(Fl_Callback* cb) {callback_=cb;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-   */
-  void callback(Fl_Callback0*cb) {callback_=(Fl_Callback*)cb;}
-
-  /** Sets the current callback function for the widget.
-      Each widget has a single callback.
-      \param[in] cb new callback
-      \param[in] p user data
-   */
-  void callback(Fl_Callback1*cb, long p=0) {callback_=(Fl_Callback*)cb; user_data_=(void*)(fl_intptr_t)p;}
-
-  /** Gets the user data for this widget.
-      Gets the current user data (void *) argument that is passed to the callback function.
-      \return user data as a pointer
-   */
-  void* user_data() const {return user_data_;}
-
-  /** Sets the user data for this widget.
-      Sets the new user data (void *) argument that is passed to the callback function.
-      \param[in] v new user data
-   */
-  void user_data(void* v) {user_data_ = v;}
-
-  /** Gets the current user data (long) argument that is passed to the callback function.
-      \todo The user data value must be implemented using \em intptr_t or similar
-      to avoid 64-bit machine incompatibilities.
-   */
-  long argument() const {return (long)(fl_intptr_t)user_data_;}
-
-  /** Sets the current user data (long) argument that is passed to the callback function.
-      \todo The user data value must be implemented using \em intptr_t or similar
-      to avoid 64-bit machine incompatibilities.
-   */
-  void argument(long v) {user_data_ = (void*)(fl_intptr_t)v;}
-
-  /** Returns the conditions under which the callback is called.
-
-      You can set the flags with when(uchar), the default value is
-      FL_WHEN_RELEASE.
-
-      \return set of flags
-      \see when(uchar)
-   */
-  Fl_When when() const {return (Fl_When)when_;}
-
-  /** Sets the flags used to decide when a callback is called.
-
-     This controls when callbacks are done. The following values are useful,
-     the default value is FL_WHEN_RELEASE:
-     
-     \li 0: The callback is not done, but changed() is turned on.
-     \li FL_WHEN_CHANGED: The callback is done each time the text is
-         changed by the user.
-     \li FL_WHEN_RELEASE: The callback will be done when this widget loses 
-         the focus, including when the window is unmapped. This is a useful 
-	 value for text fields in a panel where doing the callback on every
-  	 change is wasteful. However the callback will also happen if the 
-	 mouse is moved out of the window, which means it should not do 
-	 anything visible (like pop up an error message).
-	 You might do better setting this to zero, and scanning all the
-	 items for changed() when the OK button on a panel is pressed.
-     \li FL_WHEN_ENTER_KEY: If the user types the Enter key, the entire 
-         text is selected, and the callback is done if the text has changed. 
-	 Normally the Enter key will navigate to the next field (or insert 
-	 a newline for a Fl_Multiline_Input) - this changes the behavior.
-     \li FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED: The Enter key will do the
-         callback even if the text has not changed. Useful for command fields.
-      Fl_Widget::when() is a set of bitflags used by subclasses of 
-      Fl_Widget to decide when to do the callback.
-
-      If the value is zero then the callback is never done. Other values 
-      are described  in the individual widgets. This field is in the base 
-      class so that you can scan a panel and do_callback() on all the ones
-      that don't do their own callbacks in response to an "OK" button.
-      \param[in] i set of flags
-   */
-  void when(uchar i) {when_ = i;}
-
-  /** Returns whether a widget is visible.
-      \retval 0 if the widget is not drawn and hence invisible.
-      \see show(), hide(), visible_r()
-   */
-  unsigned int visible() const {return !(flags_&INVISIBLE);}
-
-  /** Returns whether a widget and all its parents are visible.
-      \retval 0 if the widget or any of its parents are invisible.
-      \see show(), hide(), visible()
-   */
-  int visible_r() const;
-
-  /** Makes a widget visible.
-
-      An invisible widget never gets redrawn and does not get keyboard
-      or mouse events, but can receive a few other events like FL_SHOW.
-
-      The visible() method returns true if the widget is set to be
-      visible. The visible_r() method returns true if the widget and
-      all of its parents are visible. A widget is only visible if
-      visible() is true on it <I>and all of its parents</I>.
-
-      Changing it will send FL_SHOW or FL_HIDE events to the widget.
-      <I>Do not change it if the parent is not visible, as this
-      will send false FL_SHOW or FL_HIDE events to the widget</I>.
-      redraw() is called if necessary on this or the parent.
-
-      \see hide(), visible(), visible_r()
-   */
-  virtual void show();
-  
-  /** Makes a widget invisible.
-      \see show(), visible(), visible_r()
-   */
-  virtual void hide();
-
-  /** Makes the widget visible. 
-      You must still redraw the parent widget to see a change in the 
-      window. Normally you want to use the show() method instead.
-   */
-  void set_visible() {flags_ &= ~INVISIBLE;}
-
-  /** Hides the widget. 
-      You must still redraw the parent to see a change in the window. 
-      Normally you want to use the hide() method instead.
-   */
-  void clear_visible() {flags_ |= INVISIBLE;}
-
-  /** Returns whether the widget is active.
-      \retval 0 if the widget is inactive
-      \see active_r(), activate(), deactivate()
-   */
-  unsigned int active() const {return !(flags_&INACTIVE);}
-
-  /** Returns whether the widget and all of its parents are active. 
-      \retval 0 if this or any of the parent widgets are inactive
-      \see active(), activate(), deactivate()
-   */
-  int active_r() const;
-
-  /** Activates the widget.
-      Changing this value will send FL_ACTIVATE to the widget if 
-      active_r() is true.
-      \see active(), active_r(), deactivate()
-   */
-  void activate();
-
-  /** Deactivates the widget.
-      Inactive widgets will be drawn "grayed out", e.g. with less contrast 
-      than the active widget. Inactive widgets will not receive any keyboard 
-      or mouse button events. Other events (including FL_ENTER, FL_MOVE, 
-      FL_LEAVE, FL_SHORTCUT, and others) will still be sent. A widget is 
-      only active if active() is true on it <I>and all of its parents</I>.  
-
-      Changing this value will send FL_DEACTIVATE to the widget if 
-      active_r() is true.
-
-      Currently you cannot deactivate Fl_Window widgets.
-
-      \see activate(), active(), active_r()
-   */
-  void deactivate();
-
-  /** Returns if a widget is used for output only.
-      output() means the same as !active() except it does not change how the 
-      widget is drawn. The widget will not receive any events. This is useful 
-      for making scrollbars or buttons that work as displays rather than input 
-      devices.
-      \retval 0 if the widget is used for input and output
-      \see set_output(), clear_output() 
-   */
-  unsigned int output() const {return (flags_&OUTPUT);}
-
-  /** Sets a widget to output only.
-      \see output(), clear_output() 
-   */
-  void set_output() {flags_ |= OUTPUT;}
-
-  /** Sets a widget to accept input.
-      \see set_output(), output() 
-   */
-  void clear_output() {flags_ &= ~OUTPUT;}
-
-  /** Returns if the widget is able to take events.
-      This is the same as (active() && !output() && visible())
-      but is faster.
-      \retval 0 if the widget takes no events
-   */
-  unsigned int takesevents() const {return !(flags_&(INACTIVE|INVISIBLE|OUTPUT));}
-
-  /** 
-      Checks if the widget value changed since the last callback.
-
-      "Changed" is a flag that is turned on when the user changes the value 
-      stored in the widget. This is only used by subclasses of Fl_Widget that 
-      store values, but is in the base class so it is easier to scan all the 
-      widgets in a panel and do_callback() on the changed ones in response 
-      to an "OK" button.
-
-      Most widgets turn this flag off when they do the callback, and when 
-      the program sets the stored value.
-
-     \retval 0 if the value did not change
-     \see set_changed(), clear_changed()
-   */
-  unsigned int changed() const {return flags_&CHANGED;}
-
-  /** Marks the value of the widget as changed.
-      \see changed(), clear_changed()
-   */
-  void set_changed() {flags_ |= CHANGED;}
-
-  /** Marks the value of the widget as unchanged.
-      \see changed(), set_changed()
-   */
-  void clear_changed() {flags_ &= ~CHANGED;}
-
-  /** Marks the widget as inactive without sending events or changing focus.
-      This is mainly for specialized use, for normal cases you want deactivate().
-      \see deactivate()
-   */
-  void clear_active() {flags_ |= INACTIVE;}
-
-  /** Marks the widget as active without sending events or changing focus.
-      This is mainly for specialized use, for normal cases you want activate().
-      \see activate()
-   */
-  void set_active() {flags_ &= ~INACTIVE;}
-
-  /** Gives the widget the keyboard focus.
-      Tries to make this widget be the Fl::focus() widget, by first sending 
-      it an FL_FOCUS event, and if it returns non-zero, setting 
-      Fl::focus() to this widget. You should use this method to 
-      assign the focus to a widget.  
-      \return true if the widget accepted the focus.
-   */
-  int take_focus();
-
-  /** Enables keyboard focus navigation with this widget. 
-      Note, however, that this will not necessarily mean that the widget
-      will accept focus, but for widgets that can accept focus, this method
-      enables it if it has been disabled.
-      \see visible_focus(), clear_visible_focus(), visible_focus(int) 
-   */
-  void set_visible_focus() { flags_ |= VISIBLE_FOCUS; }
-
-  /** Disables keyboard focus navigation with this widget. 
-      Normally, all widgets participate in keyboard focus navigation.
-      \see set_visible_focus(), visible_focus(), visible_focus(int) 
-   */
-  void clear_visible_focus() { flags_ &= ~VISIBLE_FOCUS; }
-
-  /** Modifies keyboard focus navigation. 
-      \param[in] v set or clear visible focus
-      \see set_visible_focus(), clear_visible_focus(), visible_focus() 
-   */
-  void visible_focus(int v) { if (v) set_visible_focus(); else clear_visible_focus(); }
-
-  /** Checks whether this widget has a visible focus.
-      \retval 0 if this widget has no visible focus.
-      \see visible_focus(int), set_visible_focus(), clear_visible_focus()
-   */
-  unsigned int  visible_focus() { return flags_ & VISIBLE_FOCUS; }
-
-  /** The default callback for all widgets that don't set a callback.
-
-    This callback function puts a pointer to the widget on the queue
-    returned by Fl::readqueue().
-
-    Relying on the default callback and reading the callback queue with
-    Fl::readqueue() is not recommended. If you need a callback, you should
-    set one with Fl_Widget::callback(Fl_Callback *cb, void *data)
-    or one of its variants.
-
-    \param[in] cb the widget given to the callback
-    \param[in] d user data associated with that callback
-
-    \see callback(), do_callback(), Fl::readqueue()
-   */
-  static void default_callback(Fl_Widget *cb, void *d);
-
-  /** Calls the widget callback.
-      Causes a widget to invoke its callback function with default arguments.
-      \see callback()
-   */
-  void do_callback() {do_callback(this,user_data_);}
-
-  /** Calls the widget callback.
-      Causes a widget to invoke its callback function with arbitrary arguments.
-      \param[in] o call the callback with \p o as the widget argument
-      \param[in] arg call the callback with \p arg as the user data argument
-      \see callback()
-   */
-  void do_callback(Fl_Widget* o,long arg) {do_callback(o,(void*)(fl_intptr_t)arg);}
-
-  // Causes a widget to invoke its callback function with arbitrary arguments.
-  // Documentation and implementation in Fl_Widget.cxx
-  void do_callback(Fl_Widget* o,void* arg=0);
-
-  /* Internal use only. */
-  int test_shortcut();
-  /* Internal use only. */
-  static unsigned int label_shortcut(const char *t);
-  /* Internal use only. */
-  static int test_shortcut(const char*, const bool require_alt = false);
-  /* Internal use only. */
-  void _set_fullscreen() {flags_ |= FULLSCREEN;}
-  void _clear_fullscreen() {flags_ &= ~FULLSCREEN;}
-
-  /** Checks if w is a child of this widget.
-      \param[in] w potential child widget
-      \return Returns 1 if \p w is a child of this widget, or is
-      equal to this widget. Returns 0 if \p w is NULL.
-   */
-  int contains(const Fl_Widget *w) const ;
-
-  /** Checks if this widget is a child of \p wgt.
-      Returns 1 if this widget is a child of \p wgt, or is
-      equal to \p wgt. Returns 0 if \p wgt is NULL.
-      \param[in] wgt the possible parent widget.
-      \see contains()
-   */
-  int inside(const Fl_Widget* wgt) const {return wgt ? wgt->contains(this) : 0;}
-
-  /** Schedules the drawing of the widget.
-      Marks the widget as needing its draw() routine called.
-   */
-  void redraw();
-
-  /** Schedules the drawing of the label.
-     Marks the widget or the parent as needing a redraw for the label area 
-     of a widget.
-   */
-  void redraw_label();
-
-  /** Returns non-zero if draw() needs to be called. 
-      The damage value is actually a bit field that the widget 
-      subclass can use to figure out what parts to draw.
-      \return a bitmap of flags describing the kind of damage to the widget
-      \see damage(uchar), clear_damage(uchar)
-   */
-  uchar damage() const {return damage_;}
-
-  /** Clears or sets the damage flags.
-      Damage flags are cleared when parts of the widget drawing is repaired.
-
-      The optional argument \p c specifies the bits that <b>are set</b>
-      after the call (default: 0) and \b not the bits that are cleared!
-
-      \note Therefore it is possible to set damage bits with this method, but
-      this should be avoided. Use damage(uchar) instead.
-      
-      \param[in] c new bitmask of damage flags (default: 0)
-      \see damage(uchar), damage()
-   */
-  void clear_damage(uchar c = 0) {damage_ = c;}
-
-  /** Sets the damage bits for the widget.
-      Setting damage bits will schedule the widget for the next redraw.
-      \param[in] c bitmask of flags to set
-      \see damage(), clear_damage(uchar)
-   */
-  void damage(uchar c);
-
-  /** Sets the damage bits for an area inside the widget.
-      Setting damage bits will schedule the widget for the next redraw.
-      \param[in] c bitmask of flags to set
-      \param[in] x, y, w, h size of damaged area
-      \see damage(), clear_damage(uchar)
-   */
-  void damage(uchar c, int x, int y, int w, int h);
-
-  void draw_label(int, int, int, int, Fl_Align) const;
-
-  /** Sets width ww and height hh accordingly with the label size.
-      Labels with images will return w() and h() of the image.
-      
-      This calls fl_measure() internally. For more information about
-      the arguments \p ww and \p hh and word wrapping
-      \see fl_measure(const char*, int&, int&, int)
-   */
-  void measure_label(int& ww, int& hh) const {label_.measure(ww, hh);}
-
-  Fl_Window* window() const ;
-  Fl_Window* top_window() const;
-  Fl_Window* top_window_offset(int& xoff, int& yoff) const;
-
-  /** Returns an Fl_Group pointer if this widget is an Fl_Group.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Group. If it returns
-      non-NULL, then the widget in question is derived from Fl_Group,
-      and you can use the returned pointer to access its children
-      or other Fl_Group-specific methods.
-      
-      Example:
-      \code
-      void my_callback (Fl_Widget *w, void *) {
-        Fl_Group *g = w->as_group();
-	if (g)
-	  printf ("This group has %d children\n",g->children());
-	else
-	  printf ("This widget is not a group!\n");
-      }
-      \endcode
-
-      \retval NULL if this widget is not derived from Fl_Group.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_window(), Fl_Widget::as_gl_window()
-   */
-  virtual Fl_Group* as_group() {return 0;}
-
-  /** Returns an Fl_Window pointer if this widget is an Fl_Window.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Window. If it returns
-      non-NULL, then the widget in question is derived from Fl_Window,
-      and you can use the returned pointer to access its children
-      or other Fl_Window-specific methods.
-
-      \retval NULL if this widget is not derived from Fl_Window.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_group(), Fl_Widget::as_gl_window()
-   */
-  virtual Fl_Window* as_window() {return 0;}
-
-  /** Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window.
-
-      Use this method if you have a widget (pointer) and need to
-      know whether this widget is derived from Fl_Gl_Window. If it returns
-      non-NULL, then the widget in question is derived from Fl_Gl_Window.
-
-      \retval NULL if this widget is not derived from Fl_Gl_Window.
-      \note This method is provided to avoid dynamic_cast.
-      \see Fl_Widget::as_group(), Fl_Widget::as_window()
-   */
-  virtual class Fl_Gl_Window* as_gl_window() {return 0;}
-  
-  /** Returns non zero if MAC_USE_ACCENTS_MENU flag is set, 0 otherwise. 
-   */
-  int use_accents_menu() { return flags() & MAC_USE_ACCENTS_MENU; }
-  
-  /** For back compatibility only.
-      \deprecated Use selection_color() instead.
-  */
-  Fl_Color color2() const {return (Fl_Color)color2_;}
-
-  /** For back compatibility only.
-      \deprecated Use selection_color(unsigned) instead.
-  */
-  void color2(unsigned a) {color2_ = a;}
-};
-
-/**
-    Reserved type numbers (necessary for my cheapo RTTI) start here.
-    Grep the header files for "RESERVED_TYPE" to find the next available
-    number.
-*/
-#define FL_RESERVED_TYPE 100
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Window.H
+++ /dev/null
@@ -1,652 +1,0 @@
-//
-// "$Id$"
-//
-// Window header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   Fl_Window widget . */
-
-#ifndef Fl_Window_H
-#define Fl_Window_H
-
-#ifdef WIN32
-#include <windows.h>
-#endif
-
-#include "Fl_Group.H"
-#include "Fl_Bitmap.H"
-#include <stdlib.h>
-
-#define FL_WINDOW 0xF0		///< window type id all subclasses have type() >= this
-#define FL_DOUBLE_WINDOW 0xF1   ///< double window type id
-
-class Fl_X;
-class Fl_RGB_Image;
-
-
-/**
-  This widget produces an actual window.  This can either be a main
-  window, with a border and title and all the window management controls,
-  or a "subwindow" inside a window.  This is controlled by whether or not
-  the window has a parent().
-
-  Once you create a window, you usually add children Fl_Widget
-  's to it by using window->add(child) for each new widget.
-  See Fl_Group for more information on how to add and remove children.
-
-  There are several subclasses of Fl_Window that provide
-  double-buffering, overlay, menu, and OpenGL support.
-
-  The window's callback is done if the user tries to close a window
-  using the window manager and Fl::modal() is zero or equal to the
-  window. Fl_Window has a default callback that calls Fl_Window::hide().
-*/
-class FL_EXPORT Fl_Window : public Fl_Group {
-
-  static char *default_xclass_;
-  // Note: we must use separate statements for each of the following 8 variables,
-  // with the static attribute, otherwise MS VC++ 2008/2010 complains :-(
-  // AlbrechtS 04/2012
-#if FLTK_ABI_VERSION < 10301
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int no_fullscreen_x;
-#if FLTK_ABI_VERSION < 10301
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int no_fullscreen_y;
-#if FLTK_ABI_VERSION < 10301
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int no_fullscreen_w;
-#if FLTK_ABI_VERSION < 10301
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int no_fullscreen_h;
-#if FLTK_ABI_VERSION < 10303
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int fullscreen_screen_top;
-#if FLTK_ABI_VERSION < 10303
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int fullscreen_screen_bottom;
-#if FLTK_ABI_VERSION < 10303
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int fullscreen_screen_left;
-#if FLTK_ABI_VERSION < 10303
-  static // when these members are static, ABI compatibility with 1.3.0 is respected
-#endif
-  int fullscreen_screen_right;
-
-  friend class Fl_X;
-  Fl_X *i; // points at the system-specific stuff
-
-  struct icon_data {
-    const void *legacy_icon;
-    Fl_RGB_Image **icons;
-    int count;
-#ifdef WIN32
-    HICON big_icon;
-    HICON small_icon;
-#endif
-  };
-
-  const char* iconlabel_;
-  char* xclass_;
-  struct icon_data *icon_;
-  // size_range stuff:
-  int minw, minh, maxw, maxh;
-  int dw, dh, aspect;
-  uchar size_range_set;
-  // cursor stuff
-  Fl_Cursor cursor_default;
-#if FLTK_ABI_VERSION < 10303
-  // legacy, not used
-  Fl_Color cursor_fg, cursor_bg;
-#endif
-  
-protected:
-  /** Data supporting a non-rectangular window shape */
-  struct shape_data_type {
-    int lw_; ///<  width of shape image
-    int lh_; ///<  height of shape image
-    Fl_Image* shape_; ///<  shape image
-#if defined(__APPLE__)
-    typedef struct CGImage* CGImageRef;
-    CGImageRef mask;
-#endif
-    Fl_Bitmap *todelete_; ///<  auxiliary bitmap image
-  };
-
-#if FLTK_ABI_VERSION < 10303 && !defined(FL_DOXYGEN)
-  static
-#endif
-  shape_data_type *shape_data_; ///< non-null means the window has a non-rectangular shape
-private:
-  void shape_bitmap_(Fl_Image* b);
-  void shape_alpha_(Fl_Image* img, int offset);
-  void shape_pixmap_(Fl_Image* pixmap);
-public:
-  void shape(const Fl_Image* img);
-  /** Set the window's shape with an Fl_Image.
-   \see void shape(const Fl_Image* img)
-   */
-  inline void shape(const Fl_Image& b) { shape(&b); }
-#if ! (defined(WIN32) || defined(__APPLE__) || defined(FL_DOXYGEN))
-  void combine_mask(void);
-#endif
-private:
-
-
-  void size_range_();
-  void _Fl_Window(); // constructor innards
-  void fullscreen_x(); // platform-specific part of sending a window to full screen
-  void fullscreen_off_x(int X, int Y, int W, int H);// platform-specific part of leaving full screen
-
-  // unimplemented copy ctor and assignment operator
-  Fl_Window(const Fl_Window&);
-  Fl_Window& operator=(const Fl_Window&);
-
-protected:
-
-  /** Stores the last window that was made current. See current() const */
-  static Fl_Window *current_;
-  virtual void draw();
-  /** Forces the window to be drawn, this window is also made current and calls draw(). */
-  virtual void flush();
-
-  /**
-    Sets an internal flag that tells FLTK and the window manager to
-    honor position requests.
-
-    This is used internally and should not be needed by user code.
-
-    \param[in] force 1 to set the FORCE_POSITION flag, 0 to clear it
-  */
-  void force_position(int force) {
-    if (force) set_flag(FORCE_POSITION);
-    else clear_flag(FORCE_POSITION);
-  }
-  /**
-    Returns the internal state of the window's FORCE_POSITION flag.
-
-    \retval 1 if flag is set
-    \retval 0 otherwise
-
-    \see force_position(int)
-  */
-  int force_position() const { return ((flags() & FORCE_POSITION)?1:0); }
-
-  void free_icons();
-
-public:
-
-  /**
-    Creates a window from the given size and title. 
-    If Fl_Group::current() is not NULL, the window is created as a 
-    subwindow of the parent window.
-    
-    The (w,h) form of the constructor creates a top-level window
-    and asks the window manager to position the window. The (x,y,w,h)
-    form of the constructor either creates a subwindow or a
-    top-level window at the specified location (x,y) , subject to window
-    manager configuration. If you do not specify the position of the
-    window, the window manager will pick a place to show the window
-    or allow the user to pick a location. Use position(x,y)
-    or hotspot() before calling show() to request a
-    position on the screen. See Fl_Window::resize() 
-    for some more details on positioning windows.
-    
-    Top-level windows initially have visible() set to 0
-    and parent() set to NULL. Subwindows initially
-    have visible() set to 1 and parent() set to
-    the parent window pointer.
-    
-    Fl_Widget::box() defaults to FL_FLAT_BOX. If you plan to
-    completely fill the window with children widgets you should
-    change this to FL_NO_BOX. If you turn the window border off
-    you may want to change this to FL_UP_BOX.
-
-    \see Fl_Window(int x, int y, int w, int h, const char* title)
-  */
-    Fl_Window(int w, int h, const char* title= 0);
-  /** Creates a window from the given position, size and title.
-
-    \see Fl_Window(int w, int h, const char *title)
-  */
-    Fl_Window(int x, int y, int w, int h, const char* title = 0);
-  /**
-    The destructor <I>also deletes all the children</I>. This allows a
-    whole tree to be deleted at once, without having to keep a pointer to
-    all the children in the user code. A kludge has been done so the 
-    Fl_Window and all of its children can be automatic (local)
-    variables, but you must declare the Fl_Window <I>first</I> so
-    that it is destroyed last.
-  */
-    virtual ~Fl_Window();
-
-  virtual int handle(int);
-
-  /**
-    Changes the size and position of the window.  If shown() is true,
-    these changes are communicated to the window server (which may
-    refuse that size and cause a further resize).  If shown() is
-    false, the size and position are used when show() is called.
-    See Fl_Group for the effect of resizing on the child widgets.
-
-    You can also call the Fl_Widget methods size(x,y) and position(w,h),
-    which are inline wrappers for this virtual function.
-
-    A top-level window can not force, but merely suggest a position and 
-    size to the operating system. The window manager may not be willing or 
-    able to display a window at the desired position or with the given 
-    dimensions. It is up to the application developer to verify window 
-    parameters after the resize request.
-  */
-  virtual void resize(int X,int Y,int W,int H);
-  /**
-    Sets whether or not the window manager border is around the
-    window.  The default value is true. void border(int) can be
-    used to turn the border on and off. <I>Under most X window
-    managers this does not work after show() has been called,
-    although SGI's 4DWM does work.</I>
-  */
-  void border(int b);
-  /**
-    Fast inline function to turn the window manager border
-    off. It only works before show() is called.
-  */
-  void clear_border()	{set_flag(NOBORDER);}
-  /** See void Fl_Window::border(int) */
-  unsigned int border() const	{return !(flags() & NOBORDER);}
-  /** Activates the flags NOBORDER|FL_OVERRIDE */
-  void set_override()	{set_flag(NOBORDER|OVERRIDE);}
-  /** Returns non zero if FL_OVERRIDE flag is set, 0 otherwise. */
-  unsigned int override() const  { return flags()&OVERRIDE; }
-  /**
-    A "modal" window, when shown(), will prevent any events from
-    being delivered to other windows in the same program, and will also
-    remain on top of the other windows (if the X window manager supports
-    the "transient for" property).  Several modal windows may be shown at
-    once, in which case only the last one shown gets events.  You can see
-    which window (if any) is modal by calling Fl::modal().
-  */
-  void set_modal()	{set_flag(MODAL);}
-  /**  Returns true if this window is modal.  */
-  unsigned int modal() const	{return flags() & MODAL;}
-  /**
-    A "non-modal" window (terminology borrowed from Microsoft Windows)
-    acts like a modal() one in that it remains on top, but it has
-    no effect on event delivery.  There are <I>three</I> states for a
-    window: modal, non-modal, and normal.
-  */
-  void set_non_modal()	{set_flag(NON_MODAL);}
-  /**  Returns true if this window is modal or non-modal. */
-  unsigned int non_modal() const {return flags() & (NON_MODAL|MODAL);}
-
-  /**
-    Clears the "modal" flags and converts a "modal" or "non-modal"
-    window back into a "normal" window.
-
-    Note that there are <I>three</I> states for a window: modal,
-    non-modal, and normal.
-
-    You can not change the "modality" of a window whilst
-    it is shown, so it is necessary to first hide() the window,
-    change its "modality" as required, then re-show the window
-    for the new state to take effect.
-
-    This method can also be used to change a "modal" window into a
-    "non-modal" one. On several supported platforms, the "modal" state
-    over-rides the "non-modal" state, so the "modal" state must be
-    cleared before the window can be set into the "non-modal"
-    state.
-    In general, the following sequence should work:
-
-    \code
-    win->hide();
-    win->clear_modal_states();
-    //Set win to new state as desired, or leave "normal", e.g...
-    win->set_non_modal();
-    win->show();
-    \endcode
-
-    \note Under some window managers, the sequence of hiding the
-    window and changing its modality will often cause it to be
-    re-displayed at a different position when it is subsequently
-    shown. This is an irritating feature but appears to be
-    unavoidable at present.
-    As a result we would advise to use this method only when
-    absolutely necessary.
-
-    \see void set_modal(), void set_non_modal()
-  */
-  void clear_modal_states() {clear_flag(NON_MODAL | MODAL);}
-
-  /**
-    Marks the window as a menu window.
-
-    This is intended for internal use, but it can also be used if you
-    write your own menu handling. However, this is not recommended.
-
-    This flag is used for correct "parenting" of windows in communication
-    with the windowing system. Modern X window managers can use different
-    flags to distinguish menu and tooltip windows from normal windows.
-
-    This must be called before the window is shown and cannot be changed
-    later.
-  */
-  void set_menu_window()	{set_flag(MENU_WINDOW);}
-
-  /**  Returns true if this window is a menu window. */
-  unsigned int menu_window() const {return flags() & MENU_WINDOW;}
-  
-  /**
-    Marks the window as a tooltip window.
-
-    This is intended for internal use, but it can also be used if you
-    write your own tooltip handling. However, this is not recommended.
-
-    This flag is used for correct "parenting" of windows in communication
-    with the windowing system. Modern X window managers can use different
-    flags to distinguish menu and tooltip windows from normal windows.
-
-    This must be called before the window is shown and cannot be changed
-    later.
-
-    \note Since Fl_Tooltip_Window is derived from Fl_Menu_Window, this
-    also \b clears the menu_window() state.
-  */
-  void set_tooltip_window()	{ set_flag(TOOLTIP_WINDOW);
-				  clear_flag(MENU_WINDOW); }
-  /**  Returns true if this window is a tooltip window. */
-  unsigned int tooltip_window() const {return flags() & TOOLTIP_WINDOW;}
-
-  /**
-    Positions the window so that the mouse is pointing at the given
-    position, or at the center of the given widget, which may be the
-    window itself.  If the optional offscreen parameter is
-    non-zero, then the window is allowed to extend off the screen (this
-    does not work with some X window managers). \see position()
-  */
-  void hotspot(int x, int y, int offscreen = 0);
-  /** See void Fl_Window::hotspot(int x, int y, int offscreen = 0) */
-  void hotspot(const Fl_Widget*, int offscreen = 0);
-  /** See void Fl_Window::hotspot(int x, int y, int offscreen = 0) */
-  void hotspot(const Fl_Widget& p, int offscreen = 0) {hotspot(&p,offscreen);}
-
-  /**
-    Undoes the effect of a previous resize() or show() so that the next time
-    show() is called the window manager is free to position the window.
-
-    This is for Forms compatibility only.
-
-    \deprecated please use force_position(0) instead
-  */
-  void free_position()	{clear_flag(FORCE_POSITION);}
-  /**
-    Sets the allowable range the user can resize this window to.
-    This only works for top-level windows.
-    <UL>
-    <LI>\p minw and \p minh are the smallest the window can be.
-	Either value must be greater than 0.</LI>
-    <LI>\p maxw and \p maxh are the largest the window can be. If either is
-	<I>equal</I> to the minimum then you cannot resize in that direction.
-	If either is zero  then FLTK picks a maximum size in that direction
-	such that the window will fill the screen.</LI>
-    <LI>\p dw and \p dh are size increments.  The  window will be constrained
-	to widths of minw + N * dw,  where N is any non-negative integer.
-	If these are less or equal to 1 they are ignored (this is ignored
-	on WIN32).</LI>
-    <LI>\p aspect is a flag that indicates that the window should preserve its
-	aspect ratio.  This only works if both the maximum and minimum have
-	the same aspect ratio (ignored on WIN32 and by many X window managers).
-	</LI>
-    </UL>
-
-    If this function is not called, FLTK tries to figure out the range
-    from the setting of resizable():
-    <UL>
-    <LI>If resizable() is NULL (this is the  default) then the window cannot
-	be resized and the resize border and max-size control will not be
-	displayed for the window.</LI>
-    <LI>If either dimension of resizable() is less than 100, then that is
-	considered the minimum size.  Otherwise the resizable() has a minimum
-	size of 100.</LI>
-    <LI>If either dimension of resizable() is zero, then that is also the
-	maximum size (so the window cannot resize in that direction).</LI>
-    </UL>
-
-    It is undefined what happens if the current size does not fit in the
-    constraints passed to size_range().
-  */
-  void size_range(int minw, int minh, int maxw=0, int maxh=0, int dw=0, int dh=0, int aspect=0) {
-    this->minw   = minw;
-    this->minh   = minh;
-    this->maxw   = maxw;
-    this->maxh   = maxh;
-    this->dw     = dw;
-    this->dh     = dh;
-    this->aspect = aspect;
-    size_range_();
-  }
-
-  /** See void Fl_Window::label(const char*)   */
-  const char* label() const	{return Fl_Widget::label();}
-  /**  See void Fl_Window::iconlabel(const char*)   */
-  const char* iconlabel() const	{return iconlabel_;}
-  /** Sets the window title bar label. */
-  void label(const char*);
-  /** Sets the icon label. */
-  void iconlabel(const char*);
-  /** Sets the icon label. */
-  void label(const char* label, const char* iconlabel); // platform dependent
-  void copy_label(const char* a);
-
-  static void default_xclass(const char*);
-  static const char *default_xclass();
-  const char* xclass() const;
-  void xclass(const char* c);
-
-  static void default_icon(const Fl_RGB_Image*);
-  static void default_icons(const Fl_RGB_Image*[], int);
-  void icon(const Fl_RGB_Image*);
-  void icons(const Fl_RGB_Image*[], int);
-
-#ifdef WIN32
-  static void default_icons(HICON big_icon, HICON small_icon);
-  void icons(HICON big_icon, HICON small_icon);
-#endif
-
-  /* for legacy compatibility */
-  const void* icon() const;
-  void icon(const void * ic);
-
-  /**
-    Returns non-zero if show() has been called (but not hide()
-    ). You can tell if a window is iconified with (w->shown()
-    && !w->visible()).
-  */
-  int shown() {return i != 0;}
-  /**
-    Puts the window on the screen. Usually (on X) this has the side
-    effect of opening the display.
-
-    If the window is already shown then it is restored and raised to the
-    top.  This is really convenient because your program can call show()
-    at any time, even if the window is already up.  It also means that
-    show() serves the purpose of raise() in other toolkits.
-
-    Fl_Window::show(int argc, char **argv) is used for top-level
-    windows and allows standard arguments to be parsed from the
-    command-line.
-
-    \note For some obscure reasons Fl_Window::show() resets the current
-    group by calling Fl_Group::current(0). The comments in the code
-    say "get rid of very common user bug: forgot end()". Although
-    this is true it may have unwanted side effects if you show() an
-    unrelated window (maybe for an error message or warning) while
-    building a window or any other group widget.
-
-    \todo Check if we can remove resetting the current group in a later
-    FLTK version (after 1.3.x). This may break "already broken" programs
-    though if they rely on this "feature".
-
-    \see Fl_Window::show(int argc, char **argv)
-  */
-  virtual void show();
-  /**
-    Removes the window from the screen.  If the window is already hidden or
-    has not been shown then this does nothing and is harmless.
-  */
-  virtual void hide();
-  /**
-    Puts the window on the screen and parses command-line arguments.
-
-    Usually (on X) this has the side effect of opening the display.
-
-    This form should be used for top-level windows, at least for the
-    first (main) window. It allows standard arguments to be parsed
-    from the command-line. You can use \p argc and \p argv from
-    main(int argc, char **argv) for this call.
-
-    The first call also sets up some system-specific internal
-    variables like the system colors.
-
-    \todo explain which system parameters are set up.
-
-    \param argc command-line argument count, usually from main()
-    \param argv command-line argument vector, usually from main()
-
-    \see virtual void Fl_Window::show()
-  */
-  void show(int argc, char **argv);
-
-  // Enables synchronous show(), docs in Fl_Window.cxx
-  void wait_for_expose();
-
-  /**
-    Makes the window completely fill one or more screens, without any
-    window manager border visible.  You must use fullscreen_off() to
-    undo this. 
-
-    \note On some platforms, this can result in the keyboard being
-    grabbed. The window may also be recreated, meaning hide() and
-    show() will be called.
-
-    \see void Fl_Window::fullscreen_screens()
-  */
-  void fullscreen();
-  /**
-    Turns off any side effects of fullscreen()
-  */
-  void fullscreen_off();
-  /**
-    Turns off any side effects of fullscreen() and does 
-    resize(x,y,w,h).
-  */
-  void fullscreen_off(int X,int Y,int W,int H);
-  /**
-    Returns non zero if FULLSCREEN flag is set, 0 otherwise. 
-  */
-  unsigned int fullscreen_active() const { return flags() & FULLSCREEN; }
-  /**
-    Sets which screens should be used when this window is in fullscreen
-    mode. The window will be resized to the top of the screen with index
-    \p top, the bottom of the screen with index \p bottom, etc. 
-
-    If this method is never called, or if any argument is < 0, then the
-    window will be resized to fill the screen it is currently on.
-
-    \see void Fl_Window::fullscreen()
-    */
-  void fullscreen_screens(int top, int bottom, int left, int right);
-  /**
-    Iconifies the window.  If you call this when shown() is false
-    it will show() it as an icon.  If the window is already
-    iconified this does nothing.
-
-    Call show() to restore the window.
-
-    When a window is iconified/restored (either by these calls or by the
-    user) the handle() method is called with FL_HIDE and 
-    FL_SHOW events and visible() is turned on and off.
-
-    There is no way to control what is drawn in the icon except with the
-    string passed to Fl_Window::xclass().  You should not rely on
-    window managers displaying the icons.
-  */
-  void iconize();
-
-  int x_root() const ;
-  int y_root() const ;
-
- static Fl_Window *current();
-  /**
-    Sets things up so that the drawing functions in <FL/fl_draw.H> will go
-    into this window. This is useful for incremental update of windows, such
-    as in an idle callback, which will make your program behave much better
-    if it draws a slow graphic. <B>Danger: incremental update is very hard to
-    debug and maintain!</B>
-
-    This method only works for the Fl_Window and Fl_Gl_Window derived classes.
-  */
-  void make_current();
-
-  // Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
-  virtual Fl_Window* as_window() { return this; }
-
-  /**
-    Changes the cursor for this window.  This always calls the system, if
-    you are changing the cursor a lot you may want to keep track of how
-    you set it in a static variable and call this only if the new cursor
-    is different.
-
-    The type Fl_Cursor is an enumeration defined in <FL/Enumerations.H>.
-
-    \see cursor(const Fl_RGB_Image*, int, int), default_cursor()
-  */
-  void cursor(Fl_Cursor);
-  void cursor(const Fl_RGB_Image*, int, int);
-  void default_cursor(Fl_Cursor);
-
-  /* for legacy compatibility */
-  void cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE);
-  void default_cursor(Fl_Cursor c, Fl_Color, Fl_Color=FL_WHITE);
-
-  static void default_callback(Fl_Window*, void* v);
-  
-  /** Returns the window width including any frame added by the window manager.
-   
-   Same as w() if applied to a subwindow.
-   */
-  int decorated_w();
-  /** Returns the window height including any window title bar and any frame 
-   added by the window manager.
-   
-   Same as h() if applied to a subwindow.
-   */
-  int decorated_h();
-
-};
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_Wizard.H
+++ /dev/null
@@ -1,61 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Wizard widget definitions.
-//
-// Copyright 1999-2010 by Easy Software Products.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_Wizard widget . */
-
-//
-// Include necessary header files...
-//
-
-#ifndef _Fl_Wizard_H_
-#  define _Fl_Wizard_H_
-
-#  include <FL/Fl_Group.H>
-
-
-/**
-    This widget is based off the Fl_Tabs
-    widget, but instead of displaying tabs it only changes "tabs" under
-    program control. Its primary purpose is to support "wizards" that
-    step a user through configuration or troubleshooting tasks.
-
-    <P>As with Fl_Tabs, wizard panes are composed of child (usually
-    Fl_Group) widgets. Navigation buttons must be added separately.
-*/
-class FL_EXPORT Fl_Wizard : public Fl_Group {
-
-  Fl_Widget *value_;
-
-  void draw();
-
-  public:
-
-  Fl_Wizard(int, int, int, int, const char * = 0);
-
-  void		next();
-  void		prev();
-  Fl_Widget	*value();
-  void		value(Fl_Widget *);
-};
-
-#endif // !_Fl_Wizard_H_
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_XBM_Image.H
+++ /dev/null
@@ -1,41 +1,0 @@
-//
-// "$Id$"
-//
-// XBM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-   Fl_XBM_Image class . */
-
-#ifndef Fl_XBM_Image_H
-#define Fl_XBM_Image_H
-#  include "Fl_Bitmap.H"
-
-/**
-  The Fl_XBM_Image class supports loading, caching,
-  and drawing of X Bitmap (XBM) bitmap files.
-*/
-class FL_EXPORT Fl_XBM_Image : public Fl_Bitmap {
-
-  public:
-
-  Fl_XBM_Image(const char* filename);
-};
-
-#endif // !Fl_XBM_Image_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Fl_XPM_Image.H
+++ /dev/null
@@ -1,42 +1,0 @@
-//
-// "$Id$"
-//
-// XPM image header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* \file
-  
-   Fl_XPM_Image class . */
-
-#ifndef Fl_XPM_Image_H
-#define Fl_XPM_Image_H
-#  include "Fl_Pixmap.H"
-
-/**
-  The Fl_XPM_Image class supports loading, caching,
-  and drawing of X Pixmap (XPM) images, including transparency.
-*/
-class FL_EXPORT Fl_XPM_Image : public Fl_Pixmap {
-
-  public:
-
-  Fl_XPM_Image(const char* filename);
-};
-
-#endif // !Fl_XPM_Image
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/Makefile.in
+++ /dev/null
@@ -1,54 +1,0 @@
-#
-# "$Id$"
-#
-# Header makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2010 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-all:
-
-clean:
-
-depend:
-
-install:
-	echo "Installing include files in $(DESTDIR)$(includedir)..."
-	$(RMDIR) $(DESTDIR)$(includedir)/FL
-	$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL
-	for file in *.[hH]; do \
-		$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/FL; \
-	done
-@HLINKS@	cd $(DESTDIR)$(includedir)/FL;\
-@HLINKS@	for file in *.H; do\
-@HLINKS@		$(RM) "`basename $$file H`h";\
-@HLINKS@		$(LN) $$file "`basename $$file H`h";\
-@HLINKS@	done
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
-@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
-@HLINKS@	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
-@HLINKS@	$(LN) FL $(DESTDIR)$(includedir)/Fl
-
-uninstall:
-	echo "Uninstalling include files..."
-	$(RMDIR) $(DESTDIR)$(includedir)/FL
-@HLINKS@	$(RM) $(DESTDIR)$(includedir)/Fl
-
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/FL/README.Xcode
+++ /dev/null
@@ -1,2 +1,0 @@
-All FLTK header files are in the FL subdirectory of the fltk.framework.
-Image header files are located in "fltk.framework/Headers/FL/images/".
--- a/DoConfig/fltk/FL/dirent.h
+++ /dev/null
@@ -1,25 +1,0 @@
-//
-// "$Id$"
-//
-// Directory header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// this file is for back-compatibility only
-#include "filename.H"
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/filename.H
+++ /dev/null
@@ -1,176 +1,0 @@
-/*
- * "$Id$"
- *
- * Filename header file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-/** \file
- File names and URI utility functions.
- */
-
-/* Xcode on OS X includes files by recursing down into directories.
- * This code catches the cycle and directly includes the required file.
- */
-#ifdef fl_dirent_h_cyclic_include
-#  include "/usr/include/dirent.h"
-#endif
-
-#ifndef FL_FILENAME_H
-#  define FL_FILENAME_H
-
-#  include "Fl_Export.H"
-
-/** \addtogroup filenames File names and URI utility functions
- File names and URI functions defined in <FL/filename.H>
-    @{ */
-
-#  define FL_PATH_MAX 2048 /**< all path buffers should use this length */
-/** Gets the file name from a path.
-    Similar to basename(3), exceptions shown below.
-    \code
-    #include <FL/filename.H>
-    [..]
-    const char *out;
-    out = fl_filename_name("/usr/lib");     // out="lib"
-    out = fl_filename_name("/usr/");        // out=""      (basename(3) returns "usr" instead)
-    out = fl_filename_name("/usr");         // out="usr"
-    out = fl_filename_name("/");            // out=""      (basename(3) returns "/" instead)
-    out = fl_filename_name(".");            // out="."
-    out = fl_filename_name("..");           // out=".."
-    \endcode
-    \return a pointer to the char after the last slash, or to \p filename if there is none.
- */
-FL_EXPORT const char *fl_filename_name(const char * filename);
-FL_EXPORT const char *fl_filename_ext(const char *buf);
-FL_EXPORT char *fl_filename_setext(char *to, int tolen, const char *ext);
-FL_EXPORT int fl_filename_expand(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_absolute(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_relative(char *to, int tolen, const char *from);
-FL_EXPORT int fl_filename_match(const char *name, const char *pattern);
-FL_EXPORT int fl_filename_isdir(const char *name);
-
-#  if defined(__cplusplus) && !defined(FL_DOXYGEN)
-/*
- * Under WIN32, we include filename.H from numericsort.c; this should probably change...
- */
-
-inline char *fl_filename_setext(char *to, const char *ext) { return fl_filename_setext(to, FL_PATH_MAX, ext); }
-inline int fl_filename_expand(char *to, const char *from) { return fl_filename_expand(to, FL_PATH_MAX, from); }
-inline int fl_filename_absolute(char *to, const char *from) { return fl_filename_absolute(to, FL_PATH_MAX, from); }
-FL_EXPORT int fl_filename_relative(char *to, int tolen, const char *from, const char *cwd);
-inline int fl_filename_relative(char *to, const char *from) { return fl_filename_relative(to, FL_PATH_MAX, from); }
-#  endif /* __cplusplus */
-
-
-#  if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
-
-struct dirent {char d_name[1];};
-
-#  elif defined(__WATCOMC__)
-#    include <sys/types.h>
-#    include <direct.h>
-
-#  else
-/*
- * WARNING: on some systems (very few nowadays?) <dirent.h> may not exist.
- * The correct information is in one of these files:
- *
- *     #include <sys/ndir.h>
- *     #include <sys/dir.h>
- *     #include <ndir.h>
- *
- * plus you must do the following #define:
- *
- *     #define dirent direct
- *
- * It would be best to create a <dirent.h> file that does this...
- */
-#    include <sys/types.h>
-#    define fl_dirent_h_cyclic_include
-#    include <dirent.h>
-#    undef fl_dirent_h_cyclic_include
-#  endif
-
-#  if defined (__cplusplus)
-extern "C" {
-#  endif /* __cplusplus */
-
-#  if !defined(FL_DOXYGEN)
-FL_EXPORT int fl_alphasort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_casealphasort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_casenumericsort(struct dirent **, struct dirent **);
-FL_EXPORT int fl_numericsort(struct dirent **, struct dirent **);
-#  endif
-
-  typedef int (Fl_File_Sort_F)(struct dirent **, struct dirent **); /**< File sorting function. \see fl_filename_list() */
-
-#  if defined(__cplusplus)
-}
-
-/*
- * Portable "scandir" function.  Ugly but necessary...
- */
-
-FL_EXPORT int fl_filename_list(const char *d, struct dirent ***l,
-                               Fl_File_Sort_F *s = fl_numericsort);
-FL_EXPORT void fl_filename_free_list(struct dirent ***l, int n);
-
-/*
- * Generic function to open a Uniform Resource Identifier (URI) using a
- * system-defined program (added in FLTK 1.1.8)
- */
-
-FL_EXPORT int	fl_open_uri(const char *uri, char *msg = (char *)0,
-		            int msglen = 0);
-
-FL_EXPORT void fl_decode_uri(char *uri);
-
-#    ifndef FL_DOXYGEN
-/*
- * _fl_filename_isdir_quick() is a private function that checks for a
- * trailing slash and assumes that the passed name is a directory if
- * it finds one.  This function is used by Fl_File_Browser and
- * Fl_File_Chooser to avoid extra stat() calls, but is not supported
- * outside of FLTK...
- */
-int _fl_filename_isdir_quick(const char *name);
-#    endif
-
-#  endif /* __cplusplus */
-
-/*
- * FLTK 1.0.x compatibility definitions...
- */
-
-#  ifdef FLTK_1_0_COMPAT
-#    define filename_absolute	fl_filename_absolute
-#    define filename_expand	fl_filename_expand
-#    define filename_ext	fl_filename_ext
-#    define filename_isdir	fl_filename_isdir
-#    define filename_list	fl_filename_list
-#    define filename_match	fl_filename_match
-#    define filename_name	fl_filename_name
-#    define filename_relative	fl_filename_relative
-#    define filename_setext	fl_filename_setext
-#    define numericsort		fl_numericsort
-#  endif /* FLTK_1_0_COMPAT */
-
-
-#endif /* FL_FILENAME_H */
-
-/** @} */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/FL/fl_ask.H
+++ /dev/null
@@ -1,82 +1,0 @@
-//
-// "$Id$"
-//
-// Standard dialog header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file fl_ask.H
- API for common dialogs.
- */
-
-#ifndef fl_ask_H
-#  define fl_ask_H
-
-#  include "Enumerations.H"
-
-class Fl_Widget;
-
-/** Different system beeps available. 
- \sa fl_beep(int) */
-enum Fl_Beep {
-  FL_BEEP_DEFAULT = 0,  ///< Default beep.
-  FL_BEEP_MESSAGE,  ///< Message beep.
-  FL_BEEP_ERROR,  ///< Error beep.
-  FL_BEEP_QUESTION,  ///< Question beep.
-  FL_BEEP_PASSWORD,  ///< Password beep.
-  FL_BEEP_NOTIFICATION  ///< Notification beep.
-};
-
-#  ifdef __GNUC__
-/* the GNUC-specific attribute appearing below in prototypes with a variable list of arguments
- helps detection of mismatches between format string and argument list at compilation time */
-#    define __fl_attr(x) __attribute__ (x)
-#  else
-#    define __fl_attr(x)
-#  endif // __GNUC__
-
-FL_EXPORT void fl_beep(int type = FL_BEEP_DEFAULT);
-FL_EXPORT void fl_message(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
-FL_EXPORT void fl_alert(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
-// fl_ask() is deprecated since it uses "Yes" and "No" for the buttons,
-// which does not conform to the current FLTK Human Interface Guidelines.
-// Use fl_choice() instead with the appropriate verbs instead.
-FL_EXPORT int fl_ask(const char *,...) __fl_attr((__format__ (__printf__, 1, 2), __deprecated__));
-FL_EXPORT int fl_choice(const char *q,const char *b0,const char *b1,const char *b2,...) __fl_attr((__format__ (__printf__, 1, 5)));
-FL_EXPORT const char *fl_input(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
-FL_EXPORT const char *fl_password(const char *label, const char *deflt = 0, ...) __fl_attr((__format__ (__printf__, 1, 3)));
-
-FL_EXPORT Fl_Widget *fl_message_icon();
-extern FL_EXPORT Fl_Font fl_message_font_;
-extern FL_EXPORT Fl_Fontsize fl_message_size_;
-inline void fl_message_font(Fl_Font f, Fl_Fontsize s) {
-  fl_message_font_ = f; fl_message_size_ = s;}
-
-FL_EXPORT void fl_message_hotspot(int enable);
-FL_EXPORT int fl_message_hotspot(void);
-
-FL_EXPORT void fl_message_title(const char *title);
-FL_EXPORT void fl_message_title_default(const char *title);
-
-// pointers you can use to change FLTK to a foreign language:
-extern FL_EXPORT const char* fl_no;
-extern FL_EXPORT const char* fl_yes;
-extern FL_EXPORT const char* fl_ok;
-extern FL_EXPORT const char* fl_cancel;
-extern FL_EXPORT const char* fl_close;
-#endif // !fl_ask_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/fl_draw.H
+++ /dev/null
@@ -1,805 +1,0 @@
-//
-// "$Id$"
-//
-// Portable drawing function header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_draw.H
-  \brief utility header to pull drawing functions together
-*/
-
-#ifndef fl_draw_H
-#define fl_draw_H
-
-#include <FL/x.H>	      // for Fl_Region
-#include <FL/Enumerations.H>  // for the color names
-#include <FL/Fl_Window.H>     // for fl_set_spot()
-#include <FL/Fl_Device.H>     // for fl_graphics_driver
-
-// Image class...
-class Fl_Image;
-
-// Label flags...
-FL_EXPORT extern char fl_draw_shortcut;
-
-/** \addtogroup fl_attributes
-    @{
-*/
-
-// Colors:
-/**
- Sets the color for all subsequent drawing operations.
- For colormapped displays, a color cell will be allocated out of
- \p fl_colormap the first time you use a color. If the colormap fills up
- then a least-squares algorithm is used to find the closest color.
- If no valid graphical context (fl_gc) is available,
- the foreground is not set for the current window.
- \param[in] c color 
- */
-inline void	fl_color(Fl_Color c) {fl_graphics_driver->color(c); } // select indexed color
-/** for back compatibility - use fl_color(Fl_Color c) instead */
-inline void fl_color(int c) {fl_color((Fl_Color)c);}
-/**
- Sets the color for all subsequent drawing operations.
- The closest possible match to the RGB color is used.
- The RGB color is used directly on TrueColor displays.
- For colormap visuals the nearest index in the gray
- ramp or color cube is used.
- If no valid graphical context (fl_gc) is available,
- the foreground is not set for the current window.
- \param[in] r,g,b color components
- */
-inline void	fl_color(uchar r, uchar g, uchar b) {fl_graphics_driver->color(r,g,b); } // select actual color
-/**
-  Returns the last fl_color() that was set.
-  This can be used for state save/restore.
-*/
-inline Fl_Color fl_color() {return fl_graphics_driver->color();}
-/** @} */
-
-/** \addtogroup fl_drawings
-    @{
-*/
-// clip:
-/**
- Intersects the current clip region with a rectangle and pushes this
- new region onto the stack.
- \param[in] x,y,w,h position and size
- */
-inline void fl_push_clip(int x, int y, int w, int h) {fl_graphics_driver->push_clip(x,y,w,h); }
-/**
- Intersects the current clip region with a rectangle and pushes this
- new region onto the stack (deprecated).
- \param[in] x,y,w,h position and size
- \deprecated
-   fl_clip(int, int, int, int) is deprecated and will be removed from future releases.
-   Please use fl_push_clip(int x, int y, int w, int h) instead.
- */
-#define fl_clip fl_push_clip
-/**
- Pushes an empty clip region onto the stack so nothing will be clipped.
- */
-inline void fl_push_no_clip() {fl_graphics_driver->push_no_clip(); }
-/**
- Restores the previous clip region.
- 
- You must call fl_pop_clip() once for every time you call fl_push_clip().
- Unpredictable results may occur if the clip stack is not empty when
- you return to FLTK.
- */
-inline void fl_pop_clip() {fl_graphics_driver->pop_clip(); }
-/**
- Does the rectangle intersect the current clip region?
- \param[in] x,y,w,h position and size of rectangle
- \returns non-zero if any of the rectangle intersects the current clip
- region. If this returns 0 you don't have to draw the object.
- 
- \note
- Under X this returns 2 if the rectangle is partially clipped, 
- and 1 if it is entirely inside the clip region.
- */
-inline int fl_not_clipped(int x, int y, int w, int h) {return fl_graphics_driver->not_clipped(x,y,w,h); }
-/**
- Intersects the rectangle with the current clip region and returns the
- bounding box of the result.
- 
- Returns non-zero if the resulting rectangle is different to the original.
- This can be used to limit the necessary drawing to a rectangle.
- \p W and \p H are set to zero if the rectangle is completely outside the region.
- \param[in] x,y,w,h position and size of rectangle
- \param[out] X,Y,W,H position and size of resulting bounding box.
- \returns Non-zero if the resulting rectangle is different to the original.
- */
-inline int fl_clip_box(int x , int y, int w, int h, int& X, int& Y, int& W, int& H) 
-  {return fl_graphics_driver->clip_box(x,y,w,h,X,Y,W,H); }
-/** Undoes any clobbering of clip done by your program */
-inline void fl_restore_clip() { fl_graphics_driver->restore_clip(); }
-/**
- Replaces the top of the clipping stack with a clipping region of any shape.
- 
- Fl_Region is an operating system specific type.
- \param[in] r clipping region
- */
-inline void fl_clip_region(Fl_Region r) { fl_graphics_driver->clip_region(r); }
-/**
- Returns the current clipping region.
- */
-inline Fl_Region fl_clip_region() { return fl_graphics_driver->clip_region(); }
-
-
-// points:
-/**
- Draws a single pixel at the given coordinates
- */
-inline void fl_point(int x, int y) { fl_graphics_driver->point(x,y); }
-
-// line type:
-/**
- Sets how to draw lines (the "pen").
- If you change this it is your responsibility to set it back to the default
- using \c fl_line_style(0).
- 
- \param[in] style A bitmask which is a bitwise-OR of a line style, a cap
- style, and a join style. If you don't specify a dash type you
- will get a solid line. If you don't specify a cap or join type
- you will get a system-defined default of whatever value is
- fastest.
- \param[in] width The thickness of the lines in pixels. Zero results in the
- system defined default, which on both X and Windows is somewhat
- different and nicer than 1.
- \param[in] dashes A pointer to an array of dash lengths, measured in pixels.
- The first location is how long to draw a solid portion, the next
- is how long to draw the gap, then the solid, etc. It is terminated
- with a zero-length entry. A \c NULL pointer or a zero-length
- array results in a solid line. Odd array sizes are not supported
- and result in undefined behavior.
- 
- \note      Because of how line styles are implemented on Win32 systems,
- you \e must set the line style \e after setting the drawing
- color. If you set the color after the line style you will lose
- the line style settings.
- \note      The \p dashes array does not work under Windows 95, 98 or Me,
- since those operating systems do not support complex line styles.
- */
-inline void fl_line_style(int style, int width=0, char* dashes=0) {fl_graphics_driver->line_style(style,width,dashes); }
-enum {
-  FL_SOLID	= 0,		///< line style: <tt>___________</tt>
-  FL_DASH	= 1,		///< line style: <tt>_ _ _ _ _ _</tt>
-  FL_DOT	= 2,		///< line style: <tt>. . . . . .</tt>
-  FL_DASHDOT	= 3,		///< line style: <tt>_ . _ . _ .</tt>
-  FL_DASHDOTDOT	= 4,		///< line style: <tt>_ . . _ . .</tt>
-
-  FL_CAP_FLAT	= 0x100,	///< cap style: end is flat
-  FL_CAP_ROUND	= 0x200,	///< cap style: end is round
-  FL_CAP_SQUARE	= 0x300,	///< cap style: end wraps end point
-
-  FL_JOIN_MITER	= 0x1000,	///< join style: line join extends to a point
-  FL_JOIN_ROUND	= 0x2000,	///< join style: line join is rounded
-  FL_JOIN_BEVEL	= 0x3000	///< join style: line join is tidied
-};
-
-// rectangles tweaked to exactly fill the pixel rectangle:
-
-/** 
- Draws a 1-pixel border \e inside the given bounding box.
- This function is meant for quick drawing of simple boxes. The behavior is 
- undefined for line widths that are not 1.
- */
-inline void fl_rect(int x, int y, int w, int h) { fl_graphics_driver->rect(x,y,w,h); }
-
-/** Draws with passed color a 1-pixel border \e inside the given bounding box */
-inline void fl_rect(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rect(x,y,w,h);}
-/** Colors with current color a rectangle that exactly fills the given bounding box */
-inline void fl_rectf(int x, int y, int w, int h) { fl_graphics_driver->rectf(x,y,w,h); }
-/** Colors with passed color a rectangle that exactly fills the given bounding box */
-inline void fl_rectf(int x, int y, int w, int h, Fl_Color c) {fl_color(c); fl_rectf(x,y,w,h);}
-
-/**
-  Colors a rectangle with "exactly" the passed <tt>r,g,b</tt> color.
-  On screens with less than 24 bits of color this is done by drawing a
-  solid-colored block using fl_draw_image() so that the correct color
-  shade is produced.
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b);
-
-// line segments:
-/**
- Draws a line from (x,y) to (x1,y1)
- */
-inline void fl_line(int x, int y, int x1, int y1) {fl_graphics_driver->line(x,y,x1,y1); }
-/**
- Draws a line from (x,y) to (x1,y1) and another from (x1,y1) to (x2,y2)
- */
-inline void fl_line(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->line(x,y,x1,y1,x2,y2); }
-
-// closed line segments:
-/**
- Outlines a 3-sided polygon with lines
- */
-inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->loop(x,y,x1,y1,x2,y2); }
-/**
- Outlines a 4-sided polygon with lines
- */
-inline void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
-  {fl_graphics_driver->loop(x,y,x1,y1,x2,y2,x3,y3); }
-
-// filled polygons
-/**
- Fills a 3-sided polygon. The polygon must be convex.
- */
-inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) {fl_graphics_driver->polygon(x,y,x1,y1,x2,y2); }
-/**
- Fills a 4-sided polygon. The polygon must be convex.
- */
-inline void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) 
-  { fl_graphics_driver->polygon(x,y,x1,y1,x2,y2,x3,y3); }
-
-// draw rectilinear lines, horizontal segment first:
-/**
- Draws a horizontal line from (x,y) to (x1,y)
- */
-inline void fl_xyline(int x, int y, int x1) {fl_graphics_driver->xyline(x,y,x1);}
-/**
- Draws a horizontal line from (x,y) to (x1,y), then vertical from (x1,y) to (x1,y2)
- */
-inline void fl_xyline(int x, int y, int x1, int y2) {fl_graphics_driver->xyline(x,y,x1,y2);}
-/**
- Draws a horizontal line from (x,y) to (x1,y), then a vertical from (x1,y) to (x1,y2)
- and then another horizontal from (x1,y2) to (x3,y2)
- */
-inline void fl_xyline(int x, int y, int x1, int y2, int x3) {fl_graphics_driver->xyline(x,y,x1,y2,x3);}
-
-// draw rectilinear lines, vertical segment first:
-/**
- Draws a vertical line from (x,y) to (x,y1)
- */
-inline void fl_yxline(int x, int y, int y1) {fl_graphics_driver->yxline(x,y,y1);}
-/**
- Draws a vertical line from (x,y) to (x,y1), then a horizontal from (x,y1) to (x2,y1)
- */
-inline void fl_yxline(int x, int y, int y1, int x2) {fl_graphics_driver->yxline(x,y,y1,x2);}
-/**
- Draws a vertical line from (x,y) to (x,y1) then a horizontal from (x,y1)
- to (x2,y1), then another vertical from (x2,y1) to (x2,y3)
- */
-inline void fl_yxline(int x, int y, int y1, int x2, int y3) {fl_graphics_driver->yxline(x,y,y1,x2,y3);}
-
-// circular lines and pie slices (code in fl_arci.C):
-/**
- Draw ellipse sections using integer coordinates.
- 
- These functions match the rather limited circle drawing code provided by X
- and WIN32. The advantage over using fl_arc with floating point coordinates
- is that they are faster because they often use the hardware, and they draw
- much nicer small circles, since the small sizes are often hard-coded bitmaps.
- 
- If a complete circle is drawn it will fit inside the passed bounding box.
- The two angles are measured in degrees counter-clockwise from 3 o'clock and
- are the starting and ending angle of the arc, \p a2 must be greater or equal
- to \p a1.
- 
- fl_arc() draws a series of lines to approximate the arc. Notice that the
- integer version of fl_arc() has a different number of arguments than the
- double version fl_arc(double x, double y, double r, double start, double end)
- 
- \param[in] x,y,w,h bounding box of complete circle
- \param[in] a1,a2 start and end angles of arc measured in degrees
- counter-clockwise from 3 o'clock. \p a2 must be greater
- than or equal to \p a1.
- */
-inline void fl_arc(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->arc(x,y,w,h,a1,a2); }
-/**
- Draw filled ellipse sections using integer coordinates.
- 
- Like fl_arc(), but fl_pie() draws a filled-in pie slice.
- This slice may extend outside the line drawn by fl_arc();
- to avoid this use w - 1 and h - 1.
- 
- \param[in] x,y,w,h bounding box of complete circle
- \param[in] a1,a2 start and end angles of arc measured in degrees
- counter-clockwise from 3 o'clock. \p a2 must be greater
- than or equal to \p a1.
- */
-inline void fl_pie(int x, int y, int w, int h, double a1, double a2) {fl_graphics_driver->pie(x,y,w,h,a1,a2); }
-/** fl_chord declaration is a place holder - the function does not yet exist */
-FL_EXPORT void fl_chord(int x, int y, int w, int h, double a1, double a2); // nyi
-
-// scalable drawing code (code in fl_vertex.C and fl_arc.C):
-/**
- Saves the current transformation matrix on the stack. 
- The maximum depth of the stack is 32.
- */
-inline void fl_push_matrix() { fl_graphics_driver->push_matrix(); }
-/**
- Restores the current transformation matrix from the stack.
- */
-inline void fl_pop_matrix() { fl_graphics_driver->pop_matrix(); }
-/**
- Concatenates scaling transformation onto the current one.
- \param[in] x,y scale factors in x-direction and y-direction
- */
-inline void fl_scale(double x, double y) { fl_graphics_driver->scale(x, y); }
-/**
- Concatenates scaling transformation onto the current one.
- \param[in] x scale factor in both x-direction and y-direction
- */
-inline void fl_scale(double x) { fl_graphics_driver->scale(x, x); }
-/**
- Concatenates translation transformation onto the current one.
- \param[in] x,y translation factor in x-direction and y-direction
- */
-inline void fl_translate(double x, double y) { fl_graphics_driver->translate(x, y); }
-/**
- Concatenates rotation transformation onto the current one.
- \param[in] d - rotation angle, counter-clockwise in degrees (not radians)
- */
-inline void fl_rotate(double d) { fl_graphics_driver->rotate(d); }
-/**
- Concatenates another transformation onto the current one.
- 
- \param[in] a,b,c,d,x,y transformation matrix elements such that
- <tt> X' = aX + cY + x </tt> and <tt> Y' = bX +dY + y </tt>
- */
-inline void fl_mult_matrix(double a, double b, double c, double d, double x,double y) 
-	{ fl_graphics_driver->mult_matrix(a, b, c, d, x, y); }
-/**
- Starts drawing a list of points. Points are added to the list with fl_vertex()
- */
-inline void fl_begin_points() {fl_graphics_driver->begin_points(); }
-/**
- Starts drawing a list of lines.
- */
-inline void fl_begin_line() {fl_graphics_driver->begin_line(); }
-/**
- Starts drawing a closed sequence of lines.
- */
-inline void fl_begin_loop() {fl_graphics_driver->begin_loop(); }
-/**
- Starts drawing a convex filled polygon.
- */
-inline void fl_begin_polygon() {fl_graphics_driver->begin_polygon(); }
-/**
- Adds a single vertex to the current path.
- \param[in] x,y coordinate
- */
-inline void fl_vertex(double x, double y) {fl_graphics_driver->vertex(x,y); }
-/**
- Adds a series of points on a Bezier curve to the path.
- The curve ends (and two of the points) are at X0,Y0 and X3,Y3.
- \param[in] X0,Y0 curve start point
- \param[in] X1,Y1 curve control point
- \param[in] X2,Y2 curve control point
- \param[in] X3,Y3 curve end point
- */
-inline void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3)
-  {fl_graphics_driver->curve(X0,Y0,X1,Y1,X2,Y2,X3,Y3); }
-/**
- Adds a series of points to the current path on the arc of a circle.
- You can get elliptical paths by using scale and rotate before calling fl_arc().
- \param[in] x,y,r center and radius of circular arc
- \param[in] start,end angles of start and end of arc measured in degrees
- counter-clockwise from 3 o'clock. If \p end is less than \p start
- then it draws the arc in a clockwise direction.
-
- Examples:
- \code
-    // Draw an arc of points
-    fl_begin_points();
-    fl_arc(100.0, 100.0, 50.0, 0.0, 180.0);
-    fl_end_points();
-
-    // Draw arc with a line
-    fl_begin_line();
-    fl_arc(200.0, 100.0, 50.0, 0.0, 180.0);
-    fl_end_line();
-
-    // Draw filled arc
-    fl_begin_polygon();
-    fl_arc(300.0, 100.0, 50.0, 0.0, 180.0);
-    fl_end_polygon();
- \endcode
- */
-inline void fl_arc(double x, double y, double r, double start, double end) {fl_graphics_driver->arc(x,y,r,start,end); }
-/**
- fl_circle() is equivalent to fl_arc(x,y,r,0,360), but may be faster.
- 
- It must be the \e only thing in the path: if you want a circle as part of
- a complex polygon you must use fl_arc()
- \param[in] x,y,r center and radius of circle
- */
-inline void fl_circle(double x, double y, double r) {fl_graphics_driver->circle(x,y,r); }
-/**
- Ends list of points, and draws.
- */
-inline void fl_end_points() {fl_graphics_driver->end_points(); }
-/**
- Ends list of lines, and draws.
- */
-inline void fl_end_line() {fl_graphics_driver->end_line(); }
-/**
- Ends closed sequence of lines, and draws.
- */
-inline void fl_end_loop() {fl_graphics_driver->end_loop(); }
-/**
- Ends convex filled polygon, and draws.
- */
-inline void fl_end_polygon() {fl_graphics_driver->end_polygon(); }
-/**
- Starts drawing a complex filled polygon.
- 
- The polygon may be concave, may have holes in it, or may be several
- disconnected pieces. Call fl_gap() to separate loops of the path.
- 
- To outline the polygon, use fl_begin_loop() and replace each fl_gap()
- with fl_end_loop();fl_begin_loop() pairs.
- 
- \note
- For portability, you should only draw polygons that appear the same
- whether "even/odd" or "non-zero" winding rules are used to fill them.
- Holes should be drawn in the opposite direction to the outside loop.
- */
-inline void fl_begin_complex_polygon() {fl_graphics_driver->begin_complex_polygon(); }
-/**
- Call fl_gap() to separate loops of the path.
- 
- It is unnecessary but harmless to call fl_gap() before the first vertex,
- after the last vertex, or several times in a row.
- */
-inline void fl_gap() {fl_graphics_driver->gap(); }
-/**
- Ends complex filled polygon, and draws.
- */
-inline void fl_end_complex_polygon() {fl_graphics_driver->end_complex_polygon(); }
-// get and use transformed positions:
-/**
- Transforms coordinate using the current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_x(double x, double y) {return fl_graphics_driver->transform_x(x, y); }
-/**
- Transforms coordinate using the current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_y(double x, double y) {return fl_graphics_driver->transform_y(x, y); }
-/**
- Transforms distance using current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_dx(double x, double y) {return fl_graphics_driver->transform_dx(x, y); }
-/**
- Transforms distance using current transformation matrix.
- \param[in] x,y coordinate
- */
-inline double fl_transform_dy(double x, double y) {return fl_graphics_driver->transform_dy(x, y); }
-/**
- Adds coordinate pair to the vertex list without further transformations.
- \param[in] xf,yf transformed coordinate
- */
-inline void fl_transformed_vertex(double xf, double yf) {fl_graphics_driver->transformed_vertex(xf,yf); }
-/** @} */
-
-/** \addtogroup  fl_attributes
-    @{ */
-/* NOTE: doxygen comments here to avoid triplication in os-specific sources */
-
-// Fonts:
-/**
-  Sets the current font, which is then used in various drawing routines.
-  You may call this outside a draw context if necessary to call fl_width(),
-  but on X this will open the display.
-
-  The font is identified by a \p face and a \p size.
-  The size of the font is measured in pixels and not "points".
-  Lines should be spaced \p size pixels apart or more.
-*/
-inline void fl_font(Fl_Font face, Fl_Fontsize fsize) { fl_graphics_driver->font(face,fsize); }
-
-/**
-  Returns the \p face set by the most recent call to fl_font().
-  This can be used to save/restore the font.
-*/
-inline Fl_Font fl_font() {return fl_graphics_driver->font();}
-/**
-  Returns the \p size set by the most recent call to fl_font().
-  This can be used to save/restore the font.
-*/
-inline Fl_Fontsize fl_size() {return fl_graphics_driver->size();}
-
-// information you can get about the current font:
-/**
-  Returns the recommended minimum line spacing for the current font.
-  You can also use the value of \p size passed to fl_font()
-*/
-inline int fl_height() {return fl_graphics_driver->height();}
-FL_EXPORT int fl_height(int font, int size);
-/**
-  Returns the recommended distance above the bottom of a fl_height() tall box to
-  draw the text at so it looks centered vertically in that box.
-*/
-inline int  fl_descent() {return fl_graphics_driver->descent();}
-/** Returns the typographical width of a nul-terminated string
-    using the current font face and size. */
-FL_EXPORT double fl_width(const char* txt);
-/** Returns the typographical width of a sequence of \p n characters
-    using the current font face and size. */
-inline double fl_width(const char* txt, int n) {return fl_graphics_driver->width(txt, n);}
-/** Returns the typographical width of a single character
-    using the current font face and size.
-    \note if a valid fl_gc is NOT found then it uses the first window gc,
-    or the screen gc if no fltk window is available when called. */
-inline double fl_width(unsigned int c)  {return fl_graphics_driver->width(c);}
-/** Determines the minimum pixel dimensions of a nul-terminated string.
-
-  Usage: given a string "txt" drawn using fl_draw(txt, x, y) you would determine
-  its pixel extents on the display using fl_text_extents(txt, dx, dy, wo, ho)
-  such that a bounding box that exactly fits around the text could be drawn with
-  fl_rect(x+dx, y+dy, wo, ho). Note the dx, dy values hold the offset of the first
-  "colored in" pixel of the string, from the draw origin.
-
-  No FLTK symbol expansion will be performed.
-*/
-FL_EXPORT void fl_text_extents(const char*, int& dx, int& dy, int& w, int& h); // NO fltk symbol expansion will be performed
-/** Determines the minimum pixel dimensions of a sequence of \p n characters.
-\see fl_text_extents(const char*, int& dx, int& dy, int& w, int& h)
-*/
-inline void fl_text_extents(const char *t, int n, int& dx, int& dy, int& w, int& h)
-  {fl_graphics_driver->text_extents(t, n, dx, dy, w, h);}
-
-// font encoding:
-// Note: doxygen comments here to avoid duplication for os-sepecific cases
-/**
-  Converts text from Windows/X11 latin1 character set to local encoding.
-  \param[in] t character string (latin1 encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_latin1_to_local(const char *t, int n=-1);
-/**
-  Converts text from local encoding to Windowx/X11 latin1 character set.
-  \param[in] t character string (local encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_local_to_latin1(const char *t, int n=-1);
-/**
-  Converts text from Mac Roman character set to local encoding.
-  \param[in] t character string (Mac Roman encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_mac_roman_to_local(const char *t, int n=-1);
-/**
-  Converts text from local encoding to Mac Roman character set.
-  \param[in] t character string (local encoding)
-  \param[in] n optional number of characters to convert (default is all)
-  \returns pointer to internal buffer containing converted characters
-  */
-FL_EXPORT const char *fl_local_to_mac_roman(const char *t, int n=-1);
-/** @} */
-
-/** \addtogroup  fl_drawings
-    @{ */
-/**
-  Draws a nul-terminated UTF-8 string starting at the given \p x, \p y location.
-
-  Text is aligned to the left and to the baseline of the font.
-  To align to the bottom, subtract fl_descent() from \p y.
-  To align to the top, subtract fl_descent() and add fl_height().
-  This version of fl_draw provides direct access to the text drawing
-  function of the underlying OS. It does not apply any special handling
-  to control characters.
-*/
-FL_EXPORT void fl_draw(const char* str, int x, int y);
-/**
-  Draws a nul-terminated UTF-8 string starting at the given \p x, \p y
-  location and rotating \p angle degrees counter-clockwise.
-  This version of fl_draw provides direct access to the text drawing
-  function of the underlying OS and is supported by Xft, Win32 and MacOS
-  fltk subsets.
-*/
-FL_EXPORT void fl_draw(int angle, const char* str, int x, int y);
-/**
- Draws starting at the given \p x, \p y location a UTF-8 string of length \p n bytes.
-*/
-inline void fl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->draw(str,n,x,y); }
-/**
-  Draws at the given \p x, \p y location a UTF-8 string of length \p n bytes
-  rotating \p angle degrees counter-clockwise.
-
-  \note When using X11 (Unix, Linux, Cygwin et al.) this needs Xft to work.
-	Under plain X11 (w/o Xft) rotated text is not supported by FLTK.
-	A warning will be issued to stderr at runtime (only once) if you
-	use this method with an angle other than 0.
-*/
-inline void fl_draw(int angle, const char* str, int n, int x, int y) {fl_graphics_driver->draw(angle,str,n,x,y); }
-/**
-  Draws a UTF-8 string of length \p n bytes right to left starting at the given \p x, \p y location.
-*/
-inline void fl_rtl_draw(const char* str, int n, int x, int y) {fl_graphics_driver->rtl_draw(str,n,x,y); }
-FL_EXPORT void fl_measure(const char* str, int& x, int& y,
-                          int draw_symbols = 1);
-FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
-                       Fl_Align align,
-                       Fl_Image* img=0, int draw_symbols = 1);
-FL_EXPORT void fl_draw(const char* str, int x, int y, int w, int h,
-                       Fl_Align align,
-                       void (*callthis)(const char *,int,int,int),
-                       Fl_Image* img=0, int draw_symbols = 1);
-
-// boxtypes:
-FL_EXPORT void fl_frame(const char* s, int x, int y, int w, int h);
-FL_EXPORT void fl_frame2(const char* s, int x, int y, int w, int h);
-FL_EXPORT void fl_draw_box(Fl_Boxtype, int x, int y, int w, int h, Fl_Color);
-
-// images:
-
-/**
-  Draws an 8-bit per color RGB or luminance image.
-  \param[in] buf points at the "r" data of the top-left pixel.
-                 Color data must be in <tt>r,g,b</tt> order.
-		 Luminance data is only one <tt>gray</tt> byte.
-  \param[in] X,Y position where to put top-left corner of image
-  \param[in] W,H size of the image
-  \param[in] D   delta to add to the pointer between pixels. It may be
-                 any value greater than or equal to 1, or it can be
-		 negative to flip the image horizontally
-  \param[in] L   delta to add to the pointer between lines (if 0 is
-                 passed it uses \p W * \p D), and may be larger than
-		 \p W * \p D to crop data, or negative to flip the
-		 image vertically
-
-  It is highly recommended that you put the following code before the
-  first <tt>show()</tt> of \e any window in your program to get rid of
-  the dithering if possible:
-  \code
-  Fl::visual(FL_RGB);
-  \endcode
-
-  Gray scale (1-channel) images may be drawn. This is done if
-  <tt>abs(D)</tt> is less than 3, or by calling fl_draw_image_mono().
-  Only one 8-bit sample is used for each pixel, and on screens with
-  different numbers of bits for red, green, and blue only gray colors
-  are used. Setting \p D greater than 1 will let you display one channel
-  of a color image.
-
-  \par Note:
-  The X version does not support all possible visuals. If FLTK cannot
-  draw the image in the current visual it will abort. FLTK supports
-  any visual of 8 bits or less, and all common TrueColor visuals up
-  to 32 bits.
-  */
-inline void fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0)
-  { fl_graphics_driver->draw_image(buf, X, Y, W, H, D, L); }
-
-/**
-  Draws a gray-scale (1 channel) image.
-  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
-  */
-inline void fl_draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0)
-  { fl_graphics_driver->draw_image_mono(buf, X, Y, W, H, D, L); }
-
-/**
-  Draws an image using a callback function to generate image data.
-
-  You can generate the image as it is being drawn, or do arbitrary
-  decompression of stored data, provided it can be decompressed to
-  individual scan lines easily.
-  \param[in] cb   callback function to generate scan line data
-  \param[in] data user data passed to callback function
-  \param[in] X,Y  screen position of top left pixel
-  \param[in] W,H  image width and height
-  \param[in] D    data size in bytes (must be greater than 0)
-  \see fl_draw_image(const uchar* buf, int X,int Y,int W,int H, int D, int L)
-
-  The callback function \p cb is called with the <tt>void*</tt> \p data
-  user data pointer to allow access to a structure of information about
-  the image, and the \p x, \p y, and \p w of the scan line desired from
-  the image. 0,0 is the upper-left corner of the image, not \p x, \p y.
-  A pointer to a buffer to put the data into is passed. You must copy
-  \p w pixels from scanline \p y, starting at pixel \p x, to this buffer.
-
-  Due to cropping, less than the whole image may be requested. So \p x
-  may be greater than zero, the first \p y may be greater than zero,
-  and \p w may be less than \p W. The buffer is long enough to store
-  the entire \p W * \p D pixels, this is for convenience with some
-  decompression schemes where you must decompress the entire line at
-  once: decompress it into the buffer, and then if \p x is not zero,
-  copy the data over so the \p x'th pixel is at the start of the buffer.
-
-  You can assume the \p y's will be consecutive, except the first one
-  may be greater than zero.
-
-  If \p D is 4 or more, you must fill in the unused bytes with zero.
-  */
-inline void fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3)
-  { fl_graphics_driver->draw_image(cb, data, X, Y, W, H, D); }
-
-/**
-  Draws a gray-scale image using a callback function to generate image data.
-  \see fl_draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D)
-  */
-inline void fl_draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1)
-  { fl_graphics_driver->draw_image_mono(cb, data, X, Y, W, H, D); }
-
-/**
-  Checks whether platform supports true alpha blending for RGBA images.
-  \returns 1 if true alpha blending supported by platform
-  \returns 0 not supported so FLTK will use screen door transparency
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT char fl_can_do_alpha_blending();
-
-/**
-  Reads an RGB(A) image from the current window or off-screen buffer.
-  \param[in] p     pixel buffer, or NULL to allocate one
-  \param[in] X,Y   position of top-left of image to read
-  \param[in] W,H   width and height of image to read
-  \param[in] alpha alpha value for image (0 for none)
-  \returns pointer to pixel buffer, or NULL if allocation failed.
-
-  The \p p argument points to a buffer that can hold the image and must
-  be at least \p W*H*3 bytes when reading RGB images, or \p W*H*4 bytes
-  when reading RGBA images. If NULL, fl_read_image() will create an
-  array of the proper size which can be freed using <tt>delete[]</tt>.
-
-  The \p alpha parameter controls whether an alpha channel is created
-  and the value that is placed in the alpha channel. If 0, no alpha
-  channel is generated.
-  */
-/* note: doxygen comment here to avoid triplication in os-speciic files */
-FL_EXPORT uchar *fl_read_image(uchar *p,int X,int Y,int W,int H,int alpha=0);
-
-// pixmaps:
-FL_EXPORT int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color=FL_GRAY);
-FL_EXPORT int fl_draw_pixmap(const char* const* cdata, int x,int y,Fl_Color=FL_GRAY);
-FL_EXPORT int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h);
-FL_EXPORT int fl_measure_pixmap(const char* const* cdata, int &w, int &h);
-
-// other:
-FL_EXPORT void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
-                         void (*draw_area)(void*, int,int,int,int), void* data);
-FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut);
-FL_EXPORT const char* fl_shortcut_label(unsigned int shortcut, const char **eom);
-FL_EXPORT unsigned int fl_old_shortcut(const char* s);
-FL_EXPORT void fl_overlay_rect(int x,int y,int w,int h);
-FL_EXPORT void fl_overlay_clear();
-FL_EXPORT void fl_cursor(Fl_Cursor);
-FL_EXPORT void fl_cursor(Fl_Cursor, Fl_Color fg, Fl_Color bg=FL_WHITE);
-FL_EXPORT const char* fl_expand_text(const char* from, char* buf, int maxbuf,
-                                     double maxw, int& n, double &width,
-                                     int wrap, int draw_symbols = 0);
-
-// XIM:
-/** \todo provide user documentation for fl_set_status function */
-FL_EXPORT void fl_set_status(int X, int Y, int W, int H);
-/** \todo provide user documentation for fl_set_spot function */
-FL_EXPORT void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win=0);
-/** \todo provide user documentation for fl_reset_spot function*/
-FL_EXPORT void fl_reset_spot(void);
-
-
-
-// XForms symbols:
-FL_EXPORT int fl_draw_symbol(const char* label,int x,int y,int w,int h, Fl_Color);
-FL_EXPORT int fl_add_symbol(const char* name, void (*drawit)(Fl_Color), int scalable);
-/** @} */
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/fl_message.H
+++ /dev/null
@@ -1,23 +1,0 @@
-//
-// "$Id$"
-//
-// Standard message header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "fl_ask.H"
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/fl_show_colormap.H
+++ /dev/null
@@ -1,49 +1,0 @@
-//
-// "$Id$"
-//
-// Colormap picker header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file
-   The fl_show_colormap() function hides the implementation classes used
-   to provide the popup window and color selection mechanism.
-*/
-
-#ifndef fl_show_colormap_H
-#define fl_show_colormap_H
-
-/* doxygen comment here to avoid exposing ColorMenu in fl_show_colormap.cxx
-*/
-
-/** \addtogroup  fl_attributes
-    @{ */
-
-/**
-  \brief Pops up a window to let the user pick a colormap entry.
-  \image html fl_show_colormap.png
-  \image latex fl_show_colormap.png "fl_show_colormap" height=10cm
-  \param[in] oldcol color to be highlighted when grid is shown.
-  \retval Fl_Color value of the chosen colormap entry.
-  \see Fl_Color_Chooser
-*/
-FL_EXPORT Fl_Color fl_show_colormap(Fl_Color oldcol);
-
-/** @} */
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/fl_show_input.H
+++ /dev/null
@@ -1,23 +1,0 @@
-//
-// "$Id$"
-//
-// Standard input dialog header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "fl_ask.H"
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/fl_types.h
+++ /dev/null
@@ -1,57 +1,0 @@
-/*
- * "$Id$"
- *
- * Simple "C"-style types for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2015 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/** \file
- *  This file contains simple "C"-style type definitions.
- */
-
-#ifndef FL_TYPES_H
-#define FL_TYPES_H
-
-/** \name	Miscellaneous */
-/*@{*/	/* group: Miscellaneous */
-
-/** unsigned char */
-typedef unsigned char uchar;
-/** unsigned long */
-typedef unsigned long ulong;
-
-/** Flexible length UTF-8 Unicode text.
- *
- *  \todo FIXME: temporary (?) typedef to mark UTF-8 and Unicode conversions
- */
-typedef char *Fl_String;
-
-/** Flexible length UTF-8 Unicode read-only string.
- *  \sa Fl_String
- */
-typedef const char *Fl_CString;
-
-/** 24-bit Unicode character + 8-bit indicator for keyboard flags */
-typedef unsigned int Fl_Shortcut;
-
-/** 24-bit Unicode character - upper 8 bits are unused */
-typedef unsigned int Fl_Char;
-
-/*@}*/	/* group: Miscellaneous */
-
-#endif
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/FL/fl_utf8.h
+++ /dev/null
@@ -1,248 +1,0 @@
-/*
- * "$Id$"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* Merged in some functionality from the fltk-2 version. IMM.
- * The following code is an attempt to merge the functions incorporated in FLTK2
- * with the functions provided in OksiD's fltk-1.1.6-utf8 port
- */
-
-/**
-  \file fl_utf8.h
-  \brief header for Unicode and UTF-8 character handling
-*/
-
-#ifndef _HAVE_FL_UTF8_HDR_
-#define _HAVE_FL_UTF8_HDR_
-
-#include "Fl_Export.H"
-#include "fl_types.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include <sys/types.h>
-#  include <sys/stat.h>
-#  include <locale.h>
-#  include <ctype.h>
-#  define xchar wchar_t
-#  if !defined(FL_DLL) && !defined(__CYGWIN__)
-#    undef strdup
-#    define strdup _strdup
-#    undef putenv
-#    define putenv _putenv
-#    undef stricmp
-#    define stricmp _stricmp
-#    undef strnicmp
-#    define strnicmp _strnicmp
-#    undef chdir
-#    define chdir _chdir
-#  endif
-#elif defined(__APPLE__)
-#  include <wchar.h>
-#  include <sys/stat.h>
-#  define xchar wchar_t
-#else /* X11 */
-#  include <sys/types.h>
-#  include <sys/stat.h>
-#  if defined(FL_LIBRARY) /* don't expose X11 headers in user space */
-#    include <X11/Xlocale.h>
-#    include <X11/Xlib.h>
-#  endif /* defined(FL_LIBRARY) -- don't expose X11 headers in user space */
-#  include <locale.h>
-#  define xchar unsigned short
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-/* F2: comes from FLTK2 */
-/* OD: comes from OksiD */
-
-/**
-  Return the number of bytes needed to encode the given UCS4 character in UTF-8.
-  \param [in] ucs UCS4 encoded character
-  \return number of bytes required
- */
-FL_EXPORT int fl_utf8bytes(unsigned ucs);
-
-/* OD: returns the byte length of the first UTF-8 char sequence (returns -1 if not valid) */
-FL_EXPORT int fl_utf8len(char c);
-
-/* OD: returns the byte length of the first UTF-8 char sequence (returns +1 if not valid) */
-FL_EXPORT int fl_utf8len1(char c);
-
-/* OD: returns the number of Unicode chars in the UTF-8 string */
-FL_EXPORT int fl_utf_nb_char(const unsigned char *buf, int len);
-
-/* F2: Convert the next UTF-8 char-sequence into a Unicode value (and say how many bytes were used) */
-FL_EXPORT unsigned fl_utf8decode(const char* p, const char* end, int* len);
-
-/* F2: Encode a Unicode value into a UTF-8 sequence, return the number of bytes used */
-FL_EXPORT int fl_utf8encode(unsigned ucs, char* buf);
-
-/* F2: Move forward to the next valid UTF-8 sequence start betwen start and end */
-FL_EXPORT const char* fl_utf8fwd(const char* p, const char* start, const char* end);
-
-/* F2: Move backward to the previous valid UTF-8 sequence start */
-FL_EXPORT const char* fl_utf8back(const char* p, const char* start, const char* end);
-
-/* XX: Convert a single 32-bit Unicode value into UTF16 */
-FL_EXPORT unsigned fl_ucs_to_Utf16(const unsigned ucs, unsigned short *dst, const unsigned dstlen);
-
-/* F2: Convert a UTF-8 string into UTF16 */
-FL_EXPORT unsigned fl_utf8toUtf16(const char* src, unsigned srclen, unsigned short* dst, unsigned dstlen);
-
-/* F2: Convert a UTF-8 string into a wide character string - makes UTF16 on win32, "UCS4" elsewhere */
-FL_EXPORT unsigned fl_utf8towc(const char *src, unsigned srclen, wchar_t *dst, unsigned dstlen);
-
-/* F2: Convert a wide character string to UTF-8 - takes in UTF16 on win32, "UCS4" elsewhere */
-FL_EXPORT unsigned fl_utf8fromwc(char *dst, unsigned dstlen, const wchar_t *src, unsigned srclen);
-
-/* F2: Convert a UTF-8 string into ASCII, eliding untranslatable glyphs */
-FL_EXPORT unsigned fl_utf8toa (const char *src, unsigned srclen, char *dst, unsigned dstlen);
-
-/* F2: Convert 8859-1 string to UTF-8 */
-FL_EXPORT unsigned fl_utf8froma (char *dst, unsigned dstlen, const char *src, unsigned srclen);
-
-/* F2: Returns true if the current O/S locale is UTF-8 */
-FL_EXPORT int fl_utf8locale(void);
-
-/* F2: Examine the first len characters of src, to determine if the input text is UTF-8 or not
- * NOTE: The value returned is not simply boolean - it contains information about the probable
- * type of the src text. */
-FL_EXPORT int fl_utf8test(const char *src, unsigned len);
-
-/* XX: return width of "raw" ucs character in columns.
- * for internal use only */
-FL_EXPORT int fl_wcwidth_(unsigned int ucs);
-
-/* XX: return width of utf-8 character string in columns.
- * NOTE: this may also do C1 control character (0x80 to 0x9f) to CP1252 mapping,
- * depending on original build options */
-FL_EXPORT int fl_wcwidth(const char *src);
-
-/* OD: Return true if the character is non-spacing */
-FL_EXPORT unsigned int fl_nonspacing(unsigned int ucs);
-
-/* F2: Convert UTF-8 to a local multi-byte encoding - mainly for win32? */
-FL_EXPORT unsigned fl_utf8to_mb(const char *src, unsigned srclen, char *dst, unsigned dstlen);
-/* OD: Convert UTF-8 to a local multi-byte encoding */
-FL_EXPORT char* fl_utf2mbcs(const char *src);
-
-/* F2: Convert a local multi-byte encoding to UTF-8 - mainly for win32? */
-FL_EXPORT unsigned fl_utf8from_mb(char *dst, unsigned dstlen, const char *src, unsigned srclen);
-
-/*****************************************************************************/
-#ifdef WIN32
-/* OD: Attempt to convert the UTF-8 string to the current locale */
-FL_EXPORT char *fl_utf8_to_locale(const char *s, int len, unsigned int codepage);
-
-/* OD: Attempt to convert a string in the current locale to UTF-8 */
-FL_EXPORT char *fl_locale_to_utf8(const char *s, int len, unsigned int codepage);
-#endif
-
-/*****************************************************************************
- * The following functions are intended to provide portable, UTF-8 aware
- * versions of standard functions
- */
-
-/* OD: UTF-8 aware strncasecmp - converts to lower case Unicode and tests */
-FL_EXPORT int fl_utf_strncasecmp(const char *s1, const char *s2, int n);
-
-/* OD: UTF-8 aware strcasecmp - converts to Unicode and tests */
-FL_EXPORT int fl_utf_strcasecmp(const char *s1, const char *s2);
-
-/* OD: return the Unicode lower case value of ucs */
-FL_EXPORT int fl_tolower(unsigned int ucs);
-
-/* OD: return the Unicode upper case value of ucs */
-FL_EXPORT int fl_toupper(unsigned int ucs);
-
-/* OD: converts the UTF-8 string to the lower case equivalent */
-FL_EXPORT int fl_utf_tolower(const unsigned char *str, int len, char *buf);
-
-/* OD: converts the UTF-8 string to the upper case equivalent */
-FL_EXPORT int fl_utf_toupper(const unsigned char *str, int len, char *buf);
-
-/* OD: Portable UTF-8 aware chmod wrapper */
-FL_EXPORT int fl_chmod(const char* f, int mode);
-
-/* OD: Portable UTF-8 aware access wrapper */
-FL_EXPORT int fl_access(const char* f, int mode);
-
-/* OD: Portable UTF-8 aware stat wrapper */
-FL_EXPORT int fl_stat( const char *path, struct stat *buffer );
-
-/* OD: Portable UTF-8 aware getcwd wrapper */
-FL_EXPORT char* fl_getcwd( char *buf, int maxlen);
-
-/* OD: Portable UTF-8 aware fopen wrapper */
-FL_EXPORT FILE *fl_fopen(const char *f, const char *mode);
-
-/* OD: Portable UTF-8 aware system wrapper */
-FL_EXPORT int fl_system(const char* f);
-
-/* OD: Portable UTF-8 aware execvp wrapper */
-FL_EXPORT int fl_execvp(const char *file, char *const *argv);
-
-/* OD: Portable UTF-8 aware open wrapper */
-FL_EXPORT int fl_open(const char* f, int o, ...);
-
-/* OD: Portable UTF-8 aware unlink wrapper */
-FL_EXPORT int fl_unlink(const char *f);
-
-/* OD: Portable UTF-8 aware rmdir wrapper */
-FL_EXPORT int fl_rmdir(const char *f);
-
-/* OD: Portable UTF-8 aware getenv wrapper */
-FL_EXPORT char* fl_getenv(const char *name);
-
-/* OD: Portable UTF-8 aware execvp wrapper */
-FL_EXPORT int fl_mkdir(const char* f, int mode);
-
-/* OD: Portable UTF-8 aware rename wrapper */
-FL_EXPORT int fl_rename(const char* f, const char *t);
-
-
-/* OD: Given a full pathname, this will create the directory path needed to hold the file named */
-FL_EXPORT void fl_make_path_for_file( const char *path );
-
-/* OD: recursively create a path in the file system */
-FL_EXPORT char fl_make_path( const char *path );
-
-
-/** @} */
-
-/*****************************************************************************/
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* _HAVE_FL_UTF8_HDR_ */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/FL/forms.H
+++ /dev/null
@@ -1,836 +1,0 @@
-//
-// "$Id$"
-//
-// Forms emulation header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef __FORMS_H__
-#define __FORMS_H__
-
-#include "Fl.H"
-#include "Fl_Group.H"
-#include "Fl_Window.H"
-#include "fl_draw.H"
-
-typedef Fl_Widget FL_OBJECT;
-typedef Fl_Window FL_FORM;
-
-////////////////////////////////////////////////////////////////
-// Random constants & symbols defined by forms.h file:
-
-#ifndef NULL
-#define NULL 0
-#endif
-#ifndef FALSE
-#define FALSE 0
-#define TRUE 1
-#endif
-
-#define FL_ON		1
-#define FL_OK		1
-#define FL_VALID	1
-#define FL_PREEMPT	1
-#define FL_AUTO		2
-#define FL_WHEN_NEEDED	FL_AUTO
-#define FL_OFF		0
-#define FL_NONE		0
-#define FL_CANCEL	0
-#define FL_INVALID	0
-#define FL_IGNORE	-1
-//#define FL_CLOSE	-2 // this variable is never used in FLTK Forms. It is removed becaus it conflicts with the window FL_CLOSE event
-
-#define FL_LCOL		FL_BLACK
-#define FL_COL1		FL_GRAY
-#define FL_MCOL		FL_LIGHT1
-#define FL_LEFT_BCOL	FL_LIGHT3 // 53 is better match
-#define FL_TOP_BCOL	FL_LIGHT2 // 51
-#define FL_BOTTOM_BCOL	FL_DARK2  // 40
-#define FL_RIGHT_BCOL	FL_DARK3  // 36
-#define FL_INACTIVE	FL_INACTIVE_COLOR
-#define FL_INACTIVE_COL	FL_INACTIVE_COLOR
-#define FL_FREE_COL1	FL_FREE_COLOR
-#define FL_FREE_COL2	((Fl_Color)(FL_FREE_COLOR+1))
-#define FL_FREE_COL3	((Fl_Color)(FL_FREE_COLOR+2))
-#define FL_FREE_COL4	((Fl_Color)(FL_FREE_COLOR+3))
-#define FL_FREE_COL5	((Fl_Color)(FL_FREE_COLOR+4))
-#define FL_FREE_COL6	((Fl_Color)(FL_FREE_COLOR+5))
-#define FL_FREE_COL7	((Fl_Color)(FL_FREE_COLOR+6))
-#define FL_FREE_COL8	((Fl_Color)(FL_FREE_COLOR+7))
-#define FL_FREE_COL9	((Fl_Color)(FL_FREE_COLOR+8))
-#define FL_FREE_COL10	((Fl_Color)(FL_FREE_COLOR+9))
-#define FL_FREE_COL11	((Fl_Color)(FL_FREE_COLOR+10))
-#define FL_FREE_COL12	((Fl_Color)(FL_FREE_COLOR+11))
-#define FL_FREE_COL13	((Fl_Color)(FL_FREE_COLOR+12))
-#define FL_FREE_COL14	((Fl_Color)(FL_FREE_COLOR+13))
-#define FL_FREE_COL15	((Fl_Color)(FL_FREE_COLOR+14))
-#define FL_FREE_COL16	((Fl_Color)(FL_FREE_COLOR+15))
-#define FL_TOMATO	((Fl_Color)(131))
-#define FL_INDIANRED	((Fl_Color)(164))
-#define FL_SLATEBLUE	((Fl_Color)(195))
-#define FL_DARKGOLD	((Fl_Color)(84))
-#define FL_PALEGREEN	((Fl_Color)(157))
-#define FL_ORCHID	((Fl_Color)(203))
-#define FL_DARKCYAN	((Fl_Color)(189))
-#define FL_DARKTOMATO	((Fl_Color)(113))
-#define FL_WHEAT	((Fl_Color)(174))
-
-#define FL_ALIGN_BESIDE	FL_ALIGN_INSIDE
-
-#define FL_PUP_TOGGLE	2 // FL_MENU_TOGGLE
-#define FL_PUP_INACTIVE 1 // FL_MENU_INACTIVE
-#define FL_NO_FRAME	FL_NO_BOX
-#define FL_ROUNDED3D_UPBOX 	FL_ROUND_UP_BOX
-#define FL_ROUNDED3D_DOWNBOX	FL_ROUND_DOWN_BOX
-#define FL_OVAL3D_UPBOX		FL_ROUND_UP_BOX
-#define FL_OVAL3D_DOWNBOX	FL_ROUND_DOWN_BOX
-
-#define FL_MBUTTON1	1
-#define FL_LEFTMOUSE	1
-#define FL_MBUTTON2	2
-#define FL_MIDDLEMOUSE	2
-#define FL_MBUTTON3	3
-#define FL_RIGHTMOUSE	3
-#define FL_MBUTTON4	4
-#define FL_MBUTTON5	5
-
-#define FL_INVALID_STYLE 255
-#define FL_NORMAL_STYLE	FL_HELVETICA
-#define FL_BOLD_STYLE	FL_HELVETICA_BOLD
-#define FL_ITALIC_STYLE	FL_HELVETICA_ITALIC
-#define FL_BOLDITALIC_STYLE FL_HELVETICA_BOLD_ITALIC
-#define FL_FIXED_STYLE	FL_COURIER
-#define FL_FIXEDBOLD_STYLE FL_COURIER_BOLD
-#define FL_FIXEDITALIC_STYLE FL_COURIER_ITALIC
-#define FL_FIXEDBOLDITALIC_STYLE FL_COURIER_BOLD_ITALIC
-#define FL_TIMES_STYLE	FL_TIMES
-#define FL_TIMESBOLD_STYLE FL_TIMES_BOLD
-#define FL_TIMESITALIC_STYLE FL_TIMES_ITALIC
-#define FL_TIMESBOLDITALIC_STYLE FL_TIMES_BOLD_ITALIC
-
-// hacks to change the labeltype() when passed to fl_set_object_lstyle():
-#define FL_SHADOW_STYLE		(FL_SHADOW_LABEL<<8)
-#define FL_ENGRAVED_STYLE	(FL_ENGRAVED_LABEL<<8)
-#define FL_EMBOSSED_STYLE	(FL_EMBOSSED_LABEL<<0)
-
-// size values are different from XForms, match older Forms:
-#define FL_TINY_SIZE	8
-#define FL_SMALL_SIZE	11 // 10
-//#define FL_NORMAL_SIZE	14 // 12
-#define FL_MEDIUM_SIZE	18 // 14
-#define FL_LARGE_SIZE	24 // 18
-#define FL_HUGE_SIZE	32 // 24
-#define FL_DEFAULT_SIZE	FL_SMALL_SIZE
-#define FL_TINY_FONT	FL_TINY_SIZE
-#define FL_SMALL_FONT	FL_SMALL_SIZE
-#define FL_NORMAL_FONT	FL_NORMAL_SIZE
-#define FL_MEDIUM_FONT	FL_MEDIUM_SIZE
-#define FL_LARGE_FONT	FL_LARGE_SIZE
-#define FL_HUGE_FONT	FL_HUGE_SIZE
-#define FL_NORMAL_FONT1	FL_SMALL_FONT
-#define FL_NORMAL_FONT2	FL_NORMAL_FONT
-#define FL_DEFAULT_FONT	FL_SMALL_FONT
-
-#define FL_RETURN_END_CHANGED	FL_WHEN_RELEASE
-#define FL_RETURN_CHANGED	FL_WHEN_CHANGED
-#define FL_RETURN_END		FL_WHEN_RELEASE_ALWAYS
-#define FL_RETURN_ALWAYS	(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED)
-
-#define FL_BOUND_WIDTH	3
-
-typedef int FL_Coord;
-typedef int FL_COLOR;
-
-////////////////////////////////////////////////////////////////
-// fltk interaction:
-
-#define FL_CMD_OPT void
-extern FL_EXPORT void fl_initialize(int*, char*[], const char*, FL_CMD_OPT*, int);
-inline void fl_finish() {}
-
-typedef void (*FL_IO_CALLBACK) (FL_SOCKET, void*);
-inline void fl_add_io_callback(int fd, short w, FL_IO_CALLBACK cb, void* v) {
-  Fl::add_fd(fd, w, cb, v);}
-inline void fl_remove_io_callback(int fd, short, FL_IO_CALLBACK) {
-  Fl::remove_fd(fd);} // removes all the callbacks!
-
-// type of callback is different and no "id" number is returned:
-inline void fl_add_timeout(long msec, void (*cb)(void*), void* v) {
-  Fl::add_timeout(msec*.001, cb, v);}
-inline void fl_remove_timeout(int) {}
-
-// type of callback is different!
-inline void fl_set_idle_callback(void (*cb)()) {Fl::set_idle(cb);}
-
-FL_EXPORT Fl_Widget* fl_do_forms(void);
-FL_EXPORT Fl_Widget* fl_check_forms();
-inline Fl_Widget* fl_do_only_forms(void) {return fl_do_forms();}
-inline Fl_Widget* fl_check_only_forms(void) {return fl_check_forms();}
-
-// because of new redraw behavior, these are no-ops:
-inline void fl_freeze_object(Fl_Widget*) {}
-inline void fl_unfreeze_object(Fl_Widget*) {}
-inline void fl_freeze_form(Fl_Window*) {}
-inline void fl_unfreeze_form(Fl_Window*) {}
-inline void fl_freeze_all_forms() {}
-inline void fl_unfreeze_all_forms() {}
-
-inline void fl_set_focus_object(Fl_Window*, Fl_Widget* o) {Fl::focus(o);}
-inline void fl_reset_focus_object(Fl_Widget* o) {Fl::focus(o);}
-#define fl_set_object_focus fl_set_focus_object
-
-// void fl_set_form_atclose(Fl_Window*w,int (*cb)(Fl_Window*,void*),void* v)
-// void fl_set_atclose(int (*cb)(Fl_Window*,void*),void*)
-// fl_set_form_atactivate/atdeactivate not implemented!
-
-////////////////////////////////////////////////////////////////
-// Fl_Widget:
-
-inline void fl_set_object_boxtype(Fl_Widget* o, Fl_Boxtype a) {o->box(a);}
-inline void fl_set_object_lsize(Fl_Widget* o,int s) {o->labelsize(s);}
-
-/* forms lib font indexes must be byte sized - extract correct byte from style word */
-inline void fl_set_object_lstyle(Fl_Widget* o,int a) {
-  o->labelfont((Fl_Font)(a&0xff)); o->labeltype((Fl_Labeltype)(a>>8));}
-inline void fl_set_object_lcol(Fl_Widget* o, Fl_Color a) {o->labelcolor(a);}
-#define fl_set_object_lcolor  fl_set_object_lcol
-inline void fl_set_object_lalign(Fl_Widget* o, Fl_Align a) {o->align(a);}
-#define fl_set_object_align fl_set_object_lalign
-inline void fl_set_object_color(Fl_Widget* o,Fl_Color a,Fl_Color b) {o->color(a,b);}
-inline void fl_set_object_label(Fl_Widget* o, const char* a) {o->label(a); o->redraw();}
-inline void fl_set_object_position(Fl_Widget*o,int x,int y) {o->position(x,y);}
-inline void fl_set_object_size(Fl_Widget* o, int w, int h) {o->size(w,h);}
-inline void fl_set_object_geometry(Fl_Widget* o,int x,int y,int w,int h) {o->resize(x,y,w,h);}
-
-inline void fl_get_object_geometry(Fl_Widget* o,int*x,int*y,int*w,int*h) {
-  *x = o->x(); *y = o->y(); *w = o->w(); *h = o->h();}
-inline void fl_get_object_position(Fl_Widget* o,int*x,int*y) {
-  *x = o->x(); *y = o->y();}
-
-typedef void (*Forms_CB)(Fl_Widget*, long);
-inline void fl_set_object_callback(Fl_Widget*o,Forms_CB c,long a) {o->callback(c,a);}
-#define fl_set_call_back      fl_set_object_callback
-inline void fl_call_object_callback(Fl_Widget* o) {o->do_callback();}
-inline void fl_trigger_object(Fl_Widget* o) {o->do_callback();}
-inline void fl_set_object_return(Fl_Widget* o, int v) {
-  o->when((Fl_When)(v|FL_WHEN_RELEASE));}
-
-inline void fl_redraw_object(Fl_Widget* o) {o->redraw();}
-inline void fl_show_object(Fl_Widget* o) {o->show();}
-inline void fl_hide_object(Fl_Widget* o) {o->hide();}
-inline void fl_free_object(Fl_Widget* x) {delete x;}
-inline void fl_delete_object(Fl_Widget* o) {o->parent()->remove(*o);}
-inline void fl_activate_object(Fl_Widget* o) {o->activate();}
-inline void fl_deactivate_object(Fl_Widget* o) {o->deactivate();}
-
-inline void fl_add_object(Fl_Window* f, Fl_Widget* x) {f->add(x);}
-inline void fl_insert_object(Fl_Widget* o, Fl_Widget* b) {b->parent()->insert(*o,b);}
-
-inline Fl_Window* FL_ObjWin(Fl_Widget* o) {return o->window();}
-
-////////////////////////////////////////////////////////////////
-// things that appered in the demos a lot that I don't emulate, but
-// I did not want to edit out of all the demos...
-
-inline int fl_get_border_width() {return 3;}
-inline void fl_set_border_width(int) {}
-inline void fl_set_object_dblbuffer(Fl_Widget*, int) {}
-inline void fl_set_form_dblbuffer(Fl_Window*, int) {}
-
-////////////////////////////////////////////////////////////////
-// Fl_Window:
-
-inline void fl_free_form(Fl_Window* x) {delete x;}
-inline void fl_redraw_form(Fl_Window* f) {f->redraw();}
-
-inline Fl_Window* fl_bgn_form(Fl_Boxtype b,int w,int h) {
-  Fl_Window* g = new Fl_Window(w,h,0);
-  g->box(b);
-  return g;
-}
-FL_EXPORT void fl_end_form();
-inline void fl_addto_form(Fl_Window* f) {f->begin();}
-inline Fl_Group* fl_bgn_group() {return new Fl_Group(0,0,0,0,0);}
-inline void fl_end_group() {Fl_Group::current()->forms_end();}
-inline void fl_addto_group(Fl_Widget* o) {((Fl_Group* )o)->begin();}
-#define resizebox _ddfdesign_kludge()
-
-inline void fl_scale_form(Fl_Window* f, double x, double y) {
-  f->resizable(f); f->size(int(f->w()*x),int(f->h()*y));}
-inline void fl_set_form_position(Fl_Window* f,int x,int y) {f->position(x,y);}
-inline void fl_set_form_size(Fl_Window* f, int w, int h) {f->size(w,h);}
-inline void fl_set_form_geometry(Fl_Window* f,int x,int y,int w,int h) {
-  f->resize(x,y,w,h);}
-#define fl_set_initial_placement fl_set_form_geometry
-inline void fl_adjust_form_size(Fl_Window*) {}
-
-FL_EXPORT void fl_show_form(Fl_Window* f,int p,int b,const char* n);
-enum {	// "p" argument values:
-  FL_PLACE_FREE = 0,	// make resizable
-  FL_PLACE_MOUSE = 1,	// mouse centered on form
-  FL_PLACE_CENTER = 2,	// center of the screen
-  FL_PLACE_POSITION = 4,// fixed position, resizable
-  FL_PLACE_SIZE = 8,	// fixed size, normal fltk behavior
-  FL_PLACE_GEOMETRY =16,// fixed size and position
-  FL_PLACE_ASPECT = 32,	// keep aspect ratio (ignored)
-  FL_PLACE_FULLSCREEN=64,// fill screen
-  FL_PLACE_HOTSPOT = 128,// enables hotspot
-  FL_PLACE_ICONIC = 256,// iconic (ignored)
-  FL_FREE_SIZE=(1<<14),	// force resizable
-  FL_FIX_SIZE =(1<<15)	// force off resizable
-};
-#define FL_PLACE_FREE_CENTER (FL_PLACE_CENTER|FL_FREE_SIZE)
-#define FL_PLACE_CENTERFREE  (FL_PLACE_CENTER|FL_FREE_SIZE)
-enum {	// "b" arguement values:
-  FL_NOBORDER = 0,
-  FL_FULLBORDER,
-  FL_TRANSIENT
-//FL_MODAL = (1<<8)	// not implemented yet in Forms
-};
-inline void fl_set_form_hotspot(Fl_Window* w,int x,int y) {w->hotspot(x,y);}
-inline void fl_set_form_hotobject(Fl_Window* w, Fl_Widget* o) {w->hotspot(o);}
-extern FL_EXPORT char fl_flip;	// in forms.C
-inline void fl_flip_yorigin() {fl_flip = 1;}
-
-#define fl_prepare_form_window fl_show_form
-inline void fl_show_form_window(Fl_Window*) {}
-
-inline void fl_raise_form(Fl_Window* f) {f->show();}
-
-inline void fl_hide_form(Fl_Window* f) {f->hide();}
-inline void fl_pop_form(Fl_Window* f) {f->show();}
-
-extern FL_EXPORT char fl_modal_next; // in forms.C
-inline void fl_activate_all_forms() {}
-inline void fl_deactivate_all_forms() {fl_modal_next = 1;}
-inline void fl_deactivate_form(Fl_Window*w) {w->deactivate();}
-inline void fl_activate_form(Fl_Window*w) {w->activate();}
-
-inline void fl_set_form_title(Fl_Window* f, const char* s) {f->label(s);}
-inline void fl_title_form(Fl_Window* f, const char* s) {f->label(s);}
-
-typedef void (*Forms_FormCB)(Fl_Widget*);
-inline void fl_set_form_callback(Fl_Window* f,Forms_FormCB c) {f->callback(c);}
-#define fl_set_form_call_back fl_set_form_callback
-
-inline void fl_init() {}
-FL_EXPORT void fl_set_graphics_mode(int,int);
-
-inline int fl_form_is_visible(Fl_Window* f) {return f->visible();}
-
-inline int fl_mouse_button() {return Fl::event_button();}
-#define fl_mousebutton fl_mouse_button
-
-#define fl_free       free
-#define fl_malloc     malloc
-#define fl_calloc     calloc
-#define fl_realloc    realloc
-
-////////////////////////////////////////////////////////////////
-// Drawing functions.  Only usable inside an Fl_Free object?
-
-inline void fl_drw_box(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
-    fl_draw_box(b,x,y,w,h,bgc);}
-inline void fl_drw_frame(Fl_Boxtype b,int x,int y,int w,int h,Fl_Color bgc,int=3) {
-    fl_draw_box(b,x,y,w,h,bgc);}
-
-inline void fl_drw_text(Fl_Align align, int x, int y, int w, int h,
-		  Fl_Color fgcolor, int size, Fl_Font style,
-		  const char* s) {
-  fl_font(style,size);
-  fl_color(fgcolor);
-  fl_draw(s,x,y,w,h,align);
-}
-
-// this does not work except for CENTER...
-inline void fl_drw_text_beside(Fl_Align align, int x, int y, int w, int h,
-		  Fl_Color fgcolor, int size, Fl_Font style,
-		  const char* s) {
-  fl_font(style,size);
-  fl_color(fgcolor);
-  fl_draw(s,x,y,w,h,align);
-}
-
-inline void fl_set_font_name(Fl_Font n,const char* s) {Fl::set_font(n,s);}
-
-inline void fl_mapcolor(Fl_Color c, uchar r, uchar g, uchar b) {Fl::set_color(c,r,g,b);}
-
-#define fl_set_clipping(x,y,w,h) fl_push_clip(x,y,w,h)
-#define fl_unset_clipping() fl_pop_clip()
-
-////////////////////////////////////////////////////////////////
-// Forms classes:
-
-inline Fl_Widget* fl_add_new(Fl_Widget* p) {return p;}
-inline Fl_Widget* fl_add_new(uchar t,Fl_Widget* p) {p->type(t); return p;}
-
-#define forms_constructor(type,name) \
-inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(t, new type(x,y,w,h,l)));}
-#define forms_constructort(type,name) \
-inline type* name(uchar t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
-#define forms_constructorb(type,name) \
-inline type* name(Fl_Boxtype t,int x,int y,int w,int h,const char* l) { \
- return (type*)(fl_add_new(new type(t,x,y,w,h,l)));}
-
-#include "Fl_FormsBitmap.H"
-#define FL_NORMAL_BITMAP FL_NO_BOX
-forms_constructorb(Fl_FormsBitmap, fl_add_bitmap)
-inline void fl_set_bitmap_data(Fl_Widget* o, int w, int h, const uchar* b) {
-    ((Fl_FormsBitmap*)o)->set(w,h,b);
-}
-
-#include "Fl_FormsPixmap.H"
-#define FL_NORMAL_PIXMAP FL_NO_BOX
-forms_constructorb(Fl_FormsPixmap, fl_add_pixmap)
-inline void fl_set_pixmap_data(Fl_Widget* o, char*const* b) {
-    ((Fl_FormsPixmap*)o)->set(b);
-}
-//inline void fl_set_pixmap_file(Fl_Widget*, const char*);
-inline void fl_set_pixmap_align(Fl_Widget* o,Fl_Align a,int,int) {o->align(a);}
-//inline void fl_set_pixmap_colorcloseness(int, int, int);
-
-#include "Fl_Box.H"
-forms_constructorb(Fl_Box, fl_add_box)
-
-#include "Fl_Browser.H"
-forms_constructor(Fl_Browser, fl_add_browser)
-
-inline void fl_clear_browser(Fl_Widget* o) {
-    ((Fl_Browser*)o)->clear();}
-inline void fl_add_browser_line(Fl_Widget* o, const char* s) {
-    ((Fl_Browser*)o)->add(s);}
-inline void fl_addto_browser(Fl_Widget* o, const char* s) {
-    ((Fl_Browser*)o)->add(s);} /* should also scroll to bottom */
-//inline void fl_addto_browser_chars(Fl_Widget*, const char*)
-//#define fl_append_browser fl_addto_browser_chars
-inline void fl_insert_browser_line(Fl_Widget* o, int n, const char* s) {
-    ((Fl_Browser*)o)->insert(n,s);}
-inline void fl_delete_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->remove(n);}
-inline void fl_replace_browser_line(Fl_Widget* o, int n, const char* s) {
-    ((Fl_Browser*)o)->replace(n,s);}
-inline char* fl_get_browser_line(Fl_Widget* o, int n) {
-    return (char*)(((Fl_Browser*)o)->text(n));}
-inline int fl_load_browser(Fl_Widget* o, const char* f) {
-    return ((Fl_Browser*)o)->load(f);}
-inline void fl_select_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->select(n,1);}
-inline void fl_deselect_browser_line(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->select(n,0);}
-inline void fl_deselect_browser(Fl_Widget* o) {
-    ((Fl_Browser*)o)->deselect();}
-inline int fl_isselected_browser_line(Fl_Widget* o, int n) {
-    return ((Fl_Browser*)o)->selected(n);}
-inline int fl_get_browser_topline(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->topline();}
-inline int fl_get_browser(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->value();}
-inline int fl_get_browser_maxline(Fl_Widget* o) {
-    return ((Fl_Browser*)o)->size();}
-//linline int fl_get_browser_screenlines(Fl_Widget*);
-inline void fl_set_browser_topline(Fl_Widget* o, int n) {
-    ((Fl_Browser*)o)->topline(n);}
-inline void fl_set_browser_fontsize(Fl_Widget* o, int s) {
-    ((Fl_Browser*)o)->textsize(s);}
-inline void fl_set_browser_fontstyle(Fl_Widget* o, Fl_Font s) {
-    ((Fl_Browser*)o)->textfont(s);}
-inline void fl_set_browser_specialkey(Fl_Widget* o, char c) {
-    ((Fl_Browser*)o)->format_char(c);}
-//inline void fl_set_browser_vscrollbar(Fl_Widget*, int);
-//inline void fl_set_browser_hscrollbar(Fl_Widget*, int);
-//inline void fl_set_browser_leftslider(Fl_Widget*, int);
-//#define fl_set_browser_leftscrollbar fl_set_browser_leftslider
-//inline void fl_set_browser_line_selectable(Fl_Widget*, int, int);
-//inline void fl_get_browser_dimension(Fl_Widget*,int*,int*,int*,int*);
-//inline void fl_set_browser_dblclick_callback(Fl_Widget*,FL_CALLBACKPTR,long);
-//inline void fl_set_browser_xoffset(Fl_Widget*, FL_Coord);
-//inline void fl_set_browser_scrollbarsize(Fl_Widget*, int, int);
-inline void fl_setdisplayed_browser_line(Fl_Widget* o, int n, int i) {
-    ((Fl_Browser*)o)->display(n,i);}
-inline int fl_isdisplayed_browser_line(Fl_Widget* o, int n) {
-    return ((Fl_Browser*)o)->displayed(n);}
-
-#include "Fl_Button.H"
-
-#define FL_NORMAL_BUTTON	0
-#define FL_TOUCH_BUTTON		4
-#define FL_INOUT_BUTTON		5
-#define FL_RETURN_BUTTON	6
-#define FL_HIDDEN_RET_BUTTON	7
-#define FL_PUSH_BUTTON		FL_TOGGLE_BUTTON
-#define FL_MENU_BUTTON		9
-
-FL_EXPORT Fl_Button* fl_add_button(uchar t,int x,int y,int w,int h,const char* l);
-inline int fl_get_button(Fl_Widget* b) {return ((Fl_Button*)b)->value();}
-inline void fl_set_button(Fl_Widget* b, int v) {((Fl_Button*)b)->value(v);}
-inline int fl_get_button_numb(Fl_Widget*) {return Fl::event_button();}
-inline void fl_set_button_shortcut(Fl_Widget* b, const char* s,int=0) {
-    ((Fl_Button*)b)->shortcut(s);}
-//#define fl_set_object_shortcut(b,s) fl_set_button_shortcut(b,s)
-
-#include "Fl_Light_Button.H"
-forms_constructor(Fl_Light_Button, fl_add_lightbutton)
-
-#include "Fl_Round_Button.H"
-forms_constructor(Fl_Round_Button, fl_add_roundbutton)
-forms_constructor(Fl_Round_Button, fl_add_round3dbutton)
-
-#include "Fl_Check_Button.H"
-forms_constructor(Fl_Check_Button, fl_add_checkbutton)
-
-inline Fl_Widget* fl_add_bitmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
-inline void fl_set_bitmapbutton_data(Fl_Widget* o,int a,int b,uchar* c) {
-  (new Fl_Bitmap(c,a,b))->label(o);}  // does not delete old Fl_Bitmap!
-
-inline Fl_Widget* fl_add_pixmapbutton(int t,int x,int y,int w,int h,const char* l) {Fl_Widget* o = fl_add_button(t,x,y,w,h,l); return o;}
-inline void fl_set_pixmapbutton_data(Fl_Widget* o, const char*const* c) {
-  (new Fl_Pixmap(c))->label(o);}  // does not delete old Fl_Pixmap!
-
-// Fl_Canvas object not yet implemented!
-
-#include "Fl_Chart.H"
-
-forms_constructor(Fl_Chart, fl_add_chart)
-inline void fl_clear_chart(Fl_Widget* o) {
-  ((Fl_Chart*)o)->clear();}
-inline void fl_add_chart_value(Fl_Widget* o,double v,const char* s,uchar c){
-  ((Fl_Chart*)o)->add(v,s,c);}
-inline void fl_insert_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
-  ((Fl_Chart*)o)->insert(i,v,s,c);}
-inline void fl_replace_chart_value(Fl_Widget* o, int i, double v, const char* s, uchar c) {
-  ((Fl_Chart*)o)->replace(i,v,s,c);}
-inline void fl_set_chart_bounds(Fl_Widget* o, double a, double b) {
-  ((Fl_Chart*)o)->bounds(a,b);}
-inline void fl_set_chart_maxnumb(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->maxsize(v);}
-inline void fl_set_chart_autosize(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->autosize(v);}
-inline void fl_set_chart_lstyle(Fl_Widget* o, Fl_Font v) {
-  ((Fl_Chart*)o)->textfont(v);}
-inline void fl_set_chart_lsize(Fl_Widget* o, int v) {
-  ((Fl_Chart*)o)->textsize(v);}
-inline void fl_set_chart_lcolor(Fl_Widget* o, Fl_Color v) {
-  ((Fl_Chart*)o)->textcolor(v);}
-#define fl_set_chart_lcol   fl_set_chart_lcolor
-
-#include "Fl_Choice.H"
-
-#define FL_NORMAL_CHOICE	0
-#define FL_NORMAL_CHOICE2	0
-#define FL_DROPLIST_CHOICE	0
-
-forms_constructor(Fl_Choice, fl_add_choice)
-inline void fl_clear_choice(Fl_Widget* o) {
-    ((Fl_Choice*)o)->clear();}
-inline void fl_addto_choice(Fl_Widget* o, const char* s) {
-    ((Fl_Choice*)o)->add(s);}
-inline void fl_replace_choice(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Choice*)o)->replace(i-1,s);}
-inline void fl_delete_choice(Fl_Widget* o, int i) {
-    ((Fl_Choice*)o)->remove(i-1);}
-inline void fl_set_choice(Fl_Widget* o, int i) {
-    ((Fl_Choice*)o)->value(i-1);}
-// inline void fl_set_choice_text(Fl_Widget*, const char*);
-inline int fl_get_choice(Fl_Widget* o) {
-    return ((Fl_Choice*)o)->value()+1;}
-// inline const char* fl_get_choice_item_text(Fl_Widget*, int);
-// inline int fl_get_choice_maxitems(Fl_Widget*);
-inline const char* fl_get_choice_text(Fl_Widget* o) {
-    return ((Fl_Choice*)o)->text();}
-inline void fl_set_choice_fontsize(Fl_Widget* o, int x) {
-    ((Fl_Choice*)o)->textsize(x);}
-inline void fl_set_choice_fontstyle(Fl_Widget* o, Fl_Font x) {
-    ((Fl_Choice*)o)->textfont(x);}
-// inline void fl_set_choice_item_mode(Fl_Widget*, int, unsigned);
-// inline void fl_set_choice_item_shortcut(Fl_Widget*, int, const char*);
-
-#include "Fl_Clock.H"
-forms_constructort(Fl_Clock, fl_add_clock)
-inline void fl_get_clock(Fl_Widget* o, int* h, int* m, int* s) {
-    *h = ((Fl_Clock*)o)->hour();
-    *m = ((Fl_Clock*)o)->minute();
-    *s = ((Fl_Clock*)o)->second();
-}
-
-#include "Fl_Counter.H"
-forms_constructor(Fl_Counter, fl_add_counter)
-inline void fl_set_counter_value(Fl_Widget* o, double v) {
-    ((Fl_Counter*)o)->value(v);}
-inline void fl_set_counter_bounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Counter*)o)->bounds(a,b);}
-inline void fl_set_counter_step(Fl_Widget* o, double a, double b) {
-    ((Fl_Counter*)o)->step(a,b);}
-inline void fl_set_counter_precision(Fl_Widget* o, int v) {
-    ((Fl_Counter*)o)->precision(v);}
-inline void fl_set_counter_return(Fl_Widget* o, int v) {
-    ((Fl_Counter*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
-inline double fl_get_counter_value(Fl_Widget* o) {
-    return ((Fl_Counter*)o)->value();}
-inline void fl_get_counter_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Counter*)o)->minimum());
-  *b = float(((Fl_Counter*)o)->maximum());
-}
-//inline void fl_set_counter_filter(Fl_Widget*,const char* (*)(Fl_Widget*,double,int));
-
-// Cursor stuff cannot be emulated because it uses X stuff
-inline void fl_set_cursor(Fl_Window* w, Fl_Cursor c) {w->cursor(c);}
-#define FL_INVISIBLE_CURSOR FL_CURSOR_NONE
-#define FL_DEFAULT_CURSOR FL_CURSOR_DEFAULT
-
-#include "Fl_Dial.H"
-
-#define FL_DIAL_COL1 FL_GRAY
-#define FL_DIAL_COL2 37
-
-forms_constructor(Fl_Dial, fl_add_dial)
-inline void fl_set_dial_value(Fl_Widget* o, double v) {
-  ((Fl_Dial*)o)->value(v);}
-inline double fl_get_dial_value(Fl_Widget* o) {
-  return ((Fl_Dial*)o)->value();}
-inline void fl_set_dial_bounds(Fl_Widget* o, double a, double b) {
-  ((Fl_Dial*)o)->bounds(a, b);}
-inline void fl_get_dial_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Dial*)o)->minimum());
-  *b = float(((Fl_Dial*)o)->maximum());
-}
-inline void fl_set_dial_return(Fl_Widget* o, int i) {
-  ((Fl_Dial*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
-inline void fl_set_dial_angles(Fl_Widget* o, int a, int b) {
-  ((Fl_Dial*)o)->angles((short)a, (short)b);}
-//inline void fl_set_dial_cross(Fl_Widget* o, int);
-// inline void fl_set_dial_direction(Fl_Widget* o, uchar d) {
-//   ((Fl_Dial*)o)->direction(d);}
-inline void fl_set_dial_step(Fl_Widget* o, double v) {
-  ((Fl_Dial*)o)->step(v);}
-
-// Frames:
-
-inline Fl_Widget* fl_add_frame(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
-  return fl_add_box(i,x-3,y-3,w+6,h+6,l);}
-
-// labelframe nyi
-inline Fl_Widget* fl_add_labelframe(Fl_Boxtype i,int x,int y,int w,int h,const char* l) {
-  Fl_Widget* o = fl_add_box(i,x-3,y-3,w+6,h+6,l);
-  o->align(FL_ALIGN_TOP_LEFT);
-  return o;
-}
-
-#include "Fl_Free.H"
-inline Fl_Free*
-fl_add_free(int t,double x,double y,double w,double h,const char* l,
-	    FL_HANDLEPTR hdl) {
- return (Fl_Free*)(fl_add_new(
-   new Fl_Free(t,int(x),int(y),int(w),int(h),l,hdl)));
-}
-
-#include "fl_ask.H"
-#include "fl_show_colormap.H"
-
-inline int fl_show_question(const char* c, int = 0) {return fl_choice("%s",fl_no,fl_yes,0L,c);}
-FL_EXPORT void fl_show_message(const char *,const char *,const char *);
-FL_EXPORT void fl_show_alert(const char *,const char *,const char *,int=0);
-FL_EXPORT int fl_show_question(const char *,const char *,const char *);
-inline const char *fl_show_input(const char *l,const char*d=0) {return fl_input("%s",d,l);}
-FL_EXPORT /*const*/ char *fl_show_simple_input(const char *label, const char *deflt = 0);
-FL_EXPORT int fl_show_choice(
-    const char *m1,
-    const char *m2,
-    const char *m3,
-    int numb,
-    const char *b0,
-    const char *b1,
-    const char *b2);
-
-inline void fl_set_goodies_font(Fl_Font a, Fl_Fontsize b) {fl_message_font(a,b);}
-#define fl_show_messages fl_message
-inline int fl_show_choices(const char* c,int n,const char* b1,const char* b2,
-			   const char* b3, int) {
-  return fl_show_choice(0,c,0,n,b1,b2,b3);
-}
-
-#include "filename.H"
-#include "Fl_File_Chooser.H"
-inline int do_matching(char* a, const char* b) {return fl_filename_match(a,b);}
-
-// Forms-compatible file chooser (implementation in fselect.C):
-FL_EXPORT char* fl_show_file_selector(const char* message,const char* dir,
-			    const char* pat,const char* fname);
-FL_EXPORT char*	fl_get_directory();
-FL_EXPORT char*	fl_get_pattern();
-FL_EXPORT char*	fl_get_filename();
-
-#include "Fl_Input.H"
-forms_constructor(Fl_Input, fl_add_input)
-inline void fl_set_input(Fl_Widget* o, const char* v) {
-    ((Fl_Input*)o)->value(v);}
-inline void fl_set_input_return(Fl_Widget* o, int x) {
-    ((Fl_Input*)o)->when((Fl_When)(x | FL_WHEN_RELEASE));}
-inline void fl_set_input_color(Fl_Widget* o, Fl_Color a, Fl_Color b) {
-    ((Fl_Input*)o)->textcolor(a);
-    ((Fl_Input*)o)->cursor_color(b);
-}
-// inline void fl_set_input_scroll(Fl_Widget*, int);
-inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
-  ((Fl_Input*)o)->position(x);}
-// inline void fl_set_input_selected(Fl_Widget*, int);
-// inline void fl_set_input_selected_range(Fl_Widget*, int, int);
-// inline void fl_set_input_maxchars(Fl_Widget*, int);
-// inline void fl_set_input_format(Fl_Widget*, int, int);
-// inline void fl_set_input_hscrollbar(Fl_Widget*, int);
-// inline void fl_set_input_vscrollbar(Fl_Widget*, int);
-// inline void fl_set_input_xoffset(Fl_Widget*, int);
-// inline void fl_set_input_topline(Fl_Widget*, int);
-// inline void fl_set_input_scrollbarsize(Fl_Widget*, int, int);
-// inline int fl_get_input_topline(Fl_Widget*);
-// inline int fl_get_input_screenlines(Fl_Widget*);
-inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
-  *x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
-// inline int fl_get_input_numberoflines(Fl_Widget*);
-// inline void fl_get_input_format(Fl_Widget*, int*, int*);
-inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->value();}
-
-#include "Fl_Menu_Button.H"
-
-// types are not implemented, they all act like FL_PUSH_MENU:
-#define FL_TOUCH_MENU		0
-#define FL_PUSH_MENU		1
-#define FL_PULLDOWN_MENU	2
-forms_constructor(Fl_Menu_Button, fl_add_menu)
-
-inline void fl_clear_menu(Fl_Widget* o) {
-    ((Fl_Menu_Button*)o)->clear();}
-inline void fl_set_menu(Fl_Widget* o, const char* s) {
-    ((Fl_Menu_Button*)o)->clear(); ((Fl_Menu_Button*)o)->add(s);}
-inline void fl_addto_menu(Fl_Widget* o, const char* s) {
-    ((Fl_Menu_Button*)o)->add(s);}
-inline void fl_replace_menu_item(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Menu_Button*)o)->replace(i-1,s);}
-inline void fl_delete_menu_item(Fl_Widget* o, int i) {
-    ((Fl_Menu_Button*)o)->remove(i-1);}
-inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
-    ((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
-inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
-    ((Fl_Menu_Button*)o)->mode(i-1,x);}
-inline void fl_show_menu_symbol(Fl_Widget*, int ) {
-/*    ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
-// inline void fl_set_menu_popup(Fl_Widget*, int);
-inline int fl_get_menu(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->value()+1;}
-inline const char* fl_get_menu_item_text(Fl_Widget* o, int i) {
-    return ((Fl_Menu_Button*)o)->text(i);}
-inline int fl_get_menu_maxitems(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->size();}
-inline int fl_get_menu_item_mode(Fl_Widget* o, int i) {
-    return ((Fl_Menu_Button*)o)->mode(i);}
-inline const char* fl_get_menu_text(Fl_Widget* o) {
-    return ((Fl_Menu_Button*)o)->text();}
-
-#include "Fl_Positioner.H"
-#define FL_NORMAL_POSITIONER	0
-forms_constructor(Fl_Positioner, fl_add_positioner)
-inline void fl_set_positioner_xvalue(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->xvalue(v);}
-inline double fl_get_positioner_xvalue(Fl_Widget* o) {
-    return ((Fl_Positioner*)o)->xvalue();}
-inline void fl_set_positioner_xbounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Positioner*)o)->xbounds(a,b);}
-inline void fl_get_positioner_xbounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Positioner*)o)->xminimum());
-  *b = float(((Fl_Positioner*)o)->xmaximum());
-}
-inline void fl_set_positioner_yvalue(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->yvalue(v);}
-inline double fl_get_positioner_yvalue(Fl_Widget* o) {
-    return ((Fl_Positioner*)o)->yvalue();}
-inline void fl_set_positioner_ybounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Positioner*)o)->ybounds(a,b);}
-inline void fl_get_positioner_ybounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Positioner*)o)->yminimum());
-  *b = float(((Fl_Positioner*)o)->ymaximum());
-}
-inline void fl_set_positioner_xstep(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->xstep(v);}
-inline void fl_set_positioner_ystep(Fl_Widget* o, double v) {
-    ((Fl_Positioner*)o)->ystep(v);}
-inline void fl_set_positioner_return(Fl_Widget* o, int v) {
-    ((Fl_Positioner*)o)->when((Fl_When)(v|FL_WHEN_RELEASE));}
-
-#include "Fl_Slider.H"
-
-#define FL_HOR_BROWSER_SLIDER FL_HOR_SLIDER
-#define FL_VERT_BROWSER_SLIDER FL_VERT_SLIDER
-
-forms_constructort(Fl_Slider, fl_add_slider)
-#define FL_SLIDER_COL1 FL_GRAY
-inline void fl_set_slider_value(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->value(v);}
-inline double fl_get_slider_value(Fl_Widget* o) {
-    return ((Fl_Slider*)o)->value();}
-inline void fl_set_slider_bounds(Fl_Widget* o, double a, double b) {
-    ((Fl_Slider*)o)->bounds(a, b);}
-inline void fl_get_slider_bounds(Fl_Widget* o, float* a, float* b) {
-  *a = float(((Fl_Slider*)o)->minimum());
-  *b = float(((Fl_Slider*)o)->maximum());
-}
-inline void fl_set_slider_return(Fl_Widget* o, int i) {
-    ((Fl_Slider*)o)->when((Fl_When)(i|FL_WHEN_RELEASE));}
-inline void fl_set_slider_step(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->step(v);}
-// inline void fl_set_slider_increment(Fl_Widget* o, double v, double);
-inline void fl_set_slider_size(Fl_Widget* o, double v) {
-    ((Fl_Slider*)o)->slider_size(v);}
-
-#include "Fl_Value_Slider.H"
-forms_constructor(Fl_Value_Slider, fl_add_valslider)
-
-inline void fl_set_slider_precision(Fl_Widget* o, int i) {
-    ((Fl_Value_Slider*)o)->precision(i);}
-// filter function!
-
-// The forms text object was the same as an Fl_Box except it inverted the
-// meaning of FL_ALIGN_INSIDE.  Implementation in forms.cxx
-class FL_EXPORT Fl_FormsText : public Fl_Widget {
-protected:
-    void draw();
-public:
-    Fl_FormsText(Fl_Boxtype b, int X, int Y, int W, int H, const char* l=0)
-	: Fl_Widget(X,Y,W,H,l) {box(b); align(FL_ALIGN_LEFT);}
-};
-#define FL_NORMAL_TEXT FL_NO_BOX
-forms_constructorb(Fl_FormsText, fl_add_text)
-
-#include "Fl_Timer.H"
-forms_constructort(Fl_Timer, fl_add_timer)
-inline void fl_set_timer(Fl_Widget* o, double v) {((Fl_Timer*)o)->value(v);}
-inline double fl_get_timer(Fl_Widget* o) {return ((Fl_Timer*)o)->value();}
-inline void fl_suspend_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(1);}
-inline void fl_resume_timer(Fl_Widget* o) {((Fl_Timer*)o)->suspended(0);}
-inline void fl_set_timer_countup(Fl_Widget* o,char d) {((Fl_Timer*)o)->direction(d);}
-void FL_EXPORT fl_gettime(long* sec, long* usec);
-
-// Fl_XYPlot nyi
-
-
-// stuff from DDForms:
-
-inline int fl_double_click() {return Fl::event_clicks();}
-inline void fl_draw() {Fl::flush();}
-
-#endif	/* define __FORMS_H__ */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/gl.h
+++ /dev/null
@@ -1,103 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 by Bill Spitzak and others.
-//
-// You must include this instead of GL/gl.h to get the Microsoft
-// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
-// header files.
-//
-// This file also provides "missing" OpenGL functions, and
-// gl_start() and gl_finish() to allow OpenGL to be used in any window
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \file gl.h
- *  This file defines wrapper functions for OpenGL in FLTK
- *
- *  To use OpenGL from within an FLTK application you MUST use gl_visual()
- *  to select the default visual before doing show() on any windows. Mesa
- *  will crash if yoy try to use a visual not returned by glxChooseVidual.
- *
- *  This does not work with Fl_Double_Window's!  It will try to draw
- *  into the front buffer.  Depending on the system this will either
- *  crash or do nothing (when pixmaps are being used as back buffer
- *  and GL is being done by hardware), work correctly (when GL is done
- *  with software, such as Mesa), or draw into the front buffer and
- *  be erased when the buffers are swapped (when double buffer hardware
- *  is being used)
- */
-
-#ifndef FL_gl_H
-#  define FL_gl_H
-
-#  include "Enumerations.H" // for color names
-#  ifdef WIN32
-#    include <windows.h>
-#  endif
-#  ifndef APIENTRY
-#    if defined(__CYGWIN__)
-#      define APIENTRY __attribute__ ((__stdcall__))
-#    else
-#      define APIENTRY
-#    endif
-#  endif
-
-#  ifdef __APPLE__
-#    include <OpenGL/gl.h>
-#  else
-#    include <GL/gl.h>
-#  endif  // __APPLE__
-
-FL_EXPORT void gl_start();
-FL_EXPORT void gl_finish();
-
-FL_EXPORT void gl_color(Fl_Color i);
-/** back compatibility */
-inline void gl_color(int c) {gl_color((Fl_Color)c);}
-
-FL_EXPORT void gl_rect(int x,int y,int w,int h);
-/**
-  Fills the given rectangle with the current color.
-  \see gl_rect(int x, int y, int w, int h)
-  */
-inline void gl_rectf(int x,int y,int w,int h) {glRecti(x,y,x+w,y+h);}
-
-FL_EXPORT void gl_font(int fontid, int size);
-FL_EXPORT int  gl_height();
-FL_EXPORT int  gl_descent();
-FL_EXPORT double gl_width(const char *);
-FL_EXPORT double gl_width(const char *, int n);
-FL_EXPORT double gl_width(uchar);
-
-FL_EXPORT void gl_draw(const char*);
-FL_EXPORT void gl_draw(const char*, int n);
-FL_EXPORT void gl_draw(const char*, int x, int y);
-FL_EXPORT void gl_draw(const char*, float x, float y);
-FL_EXPORT void gl_draw(const char*, int n, int x, int y);
-FL_EXPORT void gl_draw(const char*, int n, float x, float y);
-FL_EXPORT void gl_draw(const char*, int x, int y, int w, int h, Fl_Align);
-FL_EXPORT void gl_measure(const char*, int& x, int& y);
-#ifdef __APPLE__
-extern FL_EXPORT void gl_texture_pile_height(int max);
-extern FL_EXPORT int gl_texture_pile_height();
-#endif
-
-FL_EXPORT void gl_draw_image(const uchar *, int x,int y,int w,int h, int d=3, int ld=0);
-
-#endif // !FL_gl_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/gl2opengl.h
+++ /dev/null
@@ -1,35 +1,0 @@
-/*	gl.h
-
-	GL to OpenGL translator.
-	If you include this, you might be able to port old GL programs.
-	There are also much better emulators available on the net.
-
-*/
-
-#include <FL/gl.h>
-#include "gl_draw.H"
-
-inline void clear() {glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);}
-#define RGBcolor(r,g,b) glColor3ub(r,g,b)
-#define bgnline() glBegin(GL_LINE_STRIP)
-#define bgnpolygon() glBegin(GL_POLYGON)
-#define bgnclosedline() glBegin(GL_LINE_LOOP)
-#define endline() glEnd()
-#define endpolygon() glEnd()
-#define endclosedline() glEnd()
-#define v2f(v) glVertex2fv(v)
-#define v2s(v) glVertex2sv(v)
-#define cmov(x,y,z) glRasterPos3f(x,y,z)
-#define charstr(s) gl_draw(s)
-#define fmprstr(s) gl_draw(s)
-typedef float Matrix[4][4];
-inline void pushmatrix() {glPushMatrix();}
-inline void popmatrix() {glPopMatrix();}
-inline void multmatrix(Matrix m) {glMultMatrixf((float *)m);}
-inline void color(int n) {glIndexi(n);}
-inline void rect(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectf(int x,int y,int r,int t) {glRectf(x,y,r+1,t+1);}
-inline void recti(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectfi(int x,int y,int r,int t) {glRecti(x,y,r+1,t+1);}
-inline void rects(int x,int y,int r,int t) {gl_rect(x,y,r-x,t-y);}
-inline void rectfs(int x,int y,int r,int t) {glRects(x,y,r+1,t+1);}
--- a/DoConfig/fltk/FL/gl_draw.H
+++ /dev/null
@@ -1,26 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "gl.h"
-
-extern FL_EXPORT void gl_remove_displaylist_fonts();
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/glu.h
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// GLu header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// You must include this instead of GL/gl.h to get the Microsoft
-// APIENTRY stuff included (from <windows.h>) prior to the OpenGL
-// header files.
-//
-// This file also provides "missing" OpenGL functions, and
-// gl_start() and gl_finish() to allow OpenGL to be used in any window
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef FL_glu_H
-#  define FL_glu_H
-
-#  include "Enumerations.H" // for color names
-#  ifdef WIN32
-#    include <windows.h>
-#  endif
-#  ifndef APIENTRY
-#    if defined(__CYGWIN__)
-#      define APIENTRY __attribute__ ((__stdcall__))
-#    else
-#      define APIENTRY
-#    endif
-#  endif
-
-#  ifdef __APPLE__
-#    include <OpenGL/glu.h>
-#  else
-#    include <GL/glu.h>
-#  endif
-
-#endif // !FL_glu_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/glut.H
+++ /dev/null
@@ -1,481 +1,0 @@
-//
-// "$Id$"
-//
-// GLUT emulation header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulation of GLUT using fltk.
-
-// GLUT is Copyright (c) Mark J. Kilgard, 1994, 1995, 1996:
-// "This program is freely distributable without licensing fees  and is
-// provided without guarantee or warrantee expressed or  implied. This
-// program is -not- in the public domain."
-
-// Although I have copied the GLUT API, none of my code is based on
-// any GLUT implementation details and is therefore covered by the LGPL.
-
-// Commented out lines indicate parts of GLUT that are not emulated.
-
-#ifndef Fl_glut_H
-#  define Fl_glut_H
-
-#  include "gl.h"
-
-
-#  include "Fl.H"
-#  include "Fl_Gl_Window.H"
-
-/** 
-  GLUT is emulated using this window class and these static variables
-  (plus several more static variables hidden in glut_compatability.cxx):
-*/
-class FL_EXPORT Fl_Glut_Window : public Fl_Gl_Window {
-  void _init();
-  int mouse_down;
-protected:
-  void draw();
-  void draw_overlay();
-  int handle(int);
-public: // so the inline functions work
-  int number;
-  int menu[3];
-  void make_current();
-  void (*display)();
-  void (*overlaydisplay)();
-  void (*reshape)(int w, int h);
-  void (*keyboard)(uchar, int x, int y);
-  void (*mouse)(int b, int state, int x, int y);
-  void (*motion)(int x, int y);
-  void (*passivemotion)(int x, int y);
-  void (*entry)(int);
-  void (*visibility)(int);
-  void (*special)(int, int x, int y);
-  Fl_Glut_Window(int w, int h, const char *);
-  Fl_Glut_Window(int x, int y, int w, int h, const char *);
-  ~Fl_Glut_Window();
-};
-
-extern FL_EXPORT Fl_Glut_Window *glut_window;	// the current window
-extern FL_EXPORT int glut_menu;			// the current menu
-
-// function pointers that are not per-window:
-extern FL_EXPORT void (*glut_idle_function)();
-extern FL_EXPORT void (*glut_menustate_function)(int);
-extern FL_EXPORT void (*glut_menustatus_function)(int,int,int);
-
-////////////////////////////////////////////////////////////////
-
-//#  define GLUT_API_VERSION This does not match any version of GLUT exactly...
-
-FL_EXPORT void glutInit(int *argcp, char **argv); // creates first window
-
-FL_EXPORT void glutInitDisplayMode(unsigned int mode);
-// the FL_ symbols have the same value as the GLUT ones:
-#  define GLUT_RGB	FL_RGB
-#  define GLUT_RGBA	FL_RGB
-#  define GLUT_INDEX	FL_INDEX
-#  define GLUT_SINGLE	FL_SINGLE
-#  define GLUT_DOUBLE	FL_DOUBLE
-#  define GLUT_ACCUM	FL_ACCUM
-#  define GLUT_ALPHA	FL_ALPHA
-#  define GLUT_DEPTH	FL_DEPTH
-#  define GLUT_STENCIL	FL_STENCIL
-#  define GLUT_MULTISAMPLE FL_MULTISAMPLE
-#  define GLUT_STEREO	FL_STEREO
-// #  define GLUT_LUMINANCE		512
-
-FL_EXPORT void glutInitWindowPosition(int x, int y);
-
-FL_EXPORT void glutInitWindowSize(int w, int h);
-
-FL_EXPORT void glutMainLoop();
-
-FL_EXPORT int glutCreateWindow(char *title);
-FL_EXPORT int glutCreateWindow(const char *title);
-
-FL_EXPORT int glutCreateSubWindow(int win, int x, int y, int width, int height);
-
-FL_EXPORT void glutDestroyWindow(int win);
-
-inline void glutPostRedisplay() {glut_window->redraw();}
-
-FL_EXPORT void glutPostWindowRedisplay(int win);
-
-FL_EXPORT void glutSwapBuffers();
-
-inline int glutGetWindow() {return glut_window->number;}
-
-FL_EXPORT void glutSetWindow(int win);
-
-inline void glutSetWindowTitle(char *t) {glut_window->label(t);}
-
-inline void glutSetIconTitle(char *t) {glut_window->iconlabel(t);}
-
-inline void glutPositionWindow(int x, int y) {glut_window->position(x,y);}
-
-inline void glutReshapeWindow(int w, int h) {glut_window->size(w,h);}
-
-inline void glutPopWindow() {glut_window->show();}
-
-inline void glutPushWindow() { /* do nothing */ }
-
-inline void glutIconifyWindow() {glut_window->iconize();}
-
-inline void glutShowWindow() {glut_window->show();}
-
-inline void glutHideWindow() {glut_window->hide();}
-
-inline void glutFullScreen() {glut_window->fullscreen();}
-
-inline void glutSetCursor(Fl_Cursor cursor) {glut_window->cursor(cursor);}
-// notice that the numeric values are different than glut:
-#  define GLUT_CURSOR_RIGHT_ARROW		((Fl_Cursor)2)
-#  define GLUT_CURSOR_LEFT_ARROW		((Fl_Cursor)67)
-#  define GLUT_CURSOR_INFO			FL_CURSOR_HAND
-#  define GLUT_CURSOR_DESTROY			((Fl_Cursor)45)
-#  define GLUT_CURSOR_HELP			FL_CURSOR_HELP
-#  define GLUT_CURSOR_CYCLE			((Fl_Cursor)26)
-#  define GLUT_CURSOR_SPRAY			((Fl_Cursor)63)
-#  define GLUT_CURSOR_WAIT			FL_CURSOR_WAIT
-#  define GLUT_CURSOR_TEXT			FL_CURSOR_INSERT
-#  define GLUT_CURSOR_CROSSHAIR			FL_CURSOR_CROSS
-#  define GLUT_CURSOR_UP_DOWN			FL_CURSOR_NS
-#  define GLUT_CURSOR_LEFT_RIGHT		FL_CURSOR_WE
-#  define GLUT_CURSOR_TOP_SIDE			FL_CURSOR_N
-#  define GLUT_CURSOR_BOTTOM_SIDE		FL_CURSOR_S
-#  define GLUT_CURSOR_LEFT_SIDE			FL_CURSOR_W
-#  define GLUT_CURSOR_RIGHT_SIDE		FL_CURSOR_E
-#  define GLUT_CURSOR_TOP_LEFT_CORNER		FL_CURSOR_NW
-#  define GLUT_CURSOR_TOP_RIGHT_CORNER		FL_CURSOR_NE
-#  define GLUT_CURSOR_BOTTOM_RIGHT_CORNER	FL_CURSOR_SE
-#  define GLUT_CURSOR_BOTTOM_LEFT_CORNER	FL_CURSOR_SW
-#  define GLUT_CURSOR_INHERIT			FL_CURSOR_DEFAULT
-#  define GLUT_CURSOR_NONE			FL_CURSOR_NONE
-#  define GLUT_CURSOR_FULL_CROSSHAIR		FL_CURSOR_CROSS
-
-inline void glutWarpPointer(int, int) { /* do nothing */ }
-
-inline void glutEstablishOverlay() {glut_window->make_overlay_current();}
-
-inline void glutRemoveOverlay() {glut_window->hide_overlay();}
-
-inline void glutUseLayer(GLenum layer) {
-  layer ? glut_window->make_overlay_current() : glut_window->make_current();}
-enum {GLUT_NORMAL, GLUT_OVERLAY};
-
-inline void glutPostOverlayRedisplay() {glut_window->redraw_overlay();}
-
-inline void glutShowOverlay() {glut_window->redraw_overlay();}
-
-inline void glutHideOverlay() {glut_window->hide_overlay();}
-
-FL_EXPORT int glutCreateMenu(void (*)(int));
-
-FL_EXPORT void glutDestroyMenu(int menu);
-
-inline int glutGetMenu() {return glut_menu;}
-
-inline void glutSetMenu(int m) {glut_menu = m;}
-
-FL_EXPORT void glutAddMenuEntry(char *label, int value);
-
-FL_EXPORT void glutAddSubMenu(char *label, int submenu);
-
-FL_EXPORT void glutChangeToMenuEntry(int item, char *labela, int value);
-
-FL_EXPORT void glutChangeToSubMenu(int item, char *label, int submenu);
-
-FL_EXPORT void glutRemoveMenuItem(int item);
-
-inline void glutAttachMenu(int b) {glut_window->menu[b] = glut_menu;}
-
-inline void glutDetachMenu(int b) {glut_window->menu[b] = 0;}
-
-inline void glutDisplayFunc(void (*f)()) {glut_window->display = f;}
-
-inline void glutReshapeFunc(void (*f)(int w, int h)) {glut_window->reshape=f;}
-
-inline void glutKeyboardFunc(void (*f)(uchar key, int x, int y)) {
-  glut_window->keyboard = f;}
-
-inline void glutMouseFunc(void (*f)(int b, int state, int x, int y)) {
-  glut_window->mouse = f;}
-#  define GLUT_LEFT_BUTTON		0
-#  define GLUT_MIDDLE_BUTTON		1
-#  define GLUT_RIGHT_BUTTON		2
-#  define GLUT_DOWN			0
-#  define GLUT_UP			1
-
-inline void glutMotionFunc(void (*f)(int x, int y)) {glut_window->motion= f;}
-
-inline void glutPassiveMotionFunc(void (*f)(int x, int y)) {
-  glut_window->passivemotion= f;}
-
-inline void glutEntryFunc(void (*f)(int s)) {glut_window->entry = f;}
-enum {GLUT_LEFT, GLUT_ENTERED};
-
-inline void glutVisibilityFunc(void (*f)(int s)) {glut_window->visibility=f;}
-enum {GLUT_NOT_VISIBLE, GLUT_VISIBLE};
-
-FL_EXPORT void glutIdleFunc(void (*f)());
-
-inline void glutTimerFunc(unsigned int msec, void (*f)(int), int value) {
-  Fl::add_timeout(msec*.001, (void (*)(void *))f, (void *)(fl_intptr_t)value);
-}
-
-inline void glutMenuStateFunc(void (*f)(int state)) {
-  glut_menustate_function = f;}
-
-inline void glutMenuStatusFunc(void (*f)(int status, int x, int y)) {
-  glut_menustatus_function = f;}
-enum {GLUT_MENU_NOT_IN_USE, GLUT_MENU_IN_USE};
-
-inline void glutSpecialFunc(void (*f)(int key, int x, int y)) {
-  glut_window->special = f;}
-#  define GLUT_KEY_F1			1
-#  define GLUT_KEY_F2			2
-#  define GLUT_KEY_F3			3
-#  define GLUT_KEY_F4			4
-#  define GLUT_KEY_F5			5
-#  define GLUT_KEY_F6			6
-#  define GLUT_KEY_F7			7
-#  define GLUT_KEY_F8			8
-#  define GLUT_KEY_F9			9
-#  define GLUT_KEY_F10			10
-#  define GLUT_KEY_F11			11
-#  define GLUT_KEY_F12			12
-// WARNING: Different values than GLUT uses:
-#  define GLUT_KEY_LEFT			FL_Left
-#  define GLUT_KEY_UP			FL_Up
-#  define GLUT_KEY_RIGHT		FL_Right
-#  define GLUT_KEY_DOWN			FL_Down
-#  define GLUT_KEY_PAGE_UP		FL_Page_Up
-#  define GLUT_KEY_PAGE_DOWN		FL_Page_Down
-#  define GLUT_KEY_HOME			FL_Home
-#  define GLUT_KEY_END			FL_End
-#  define GLUT_KEY_INSERT		FL_Insert
-
-//inline void glutSpaceballMotionFunc(void (*)(int x, int y, int z));
-
-//inline void glutSpaceballRotateFunc(void (*)(int x, int y, int z));
-
-//inline void glutSpaceballButtonFunc(void (*)(int button, int state));
-
-//inline void glutButtonBoxFunc(void (*)(int button, int state));
-
-//inline void glutDialsFunc(void (*)(int dial, int value));
-
-//inline void glutTabletMotionFunc(void (*)(int x, int y));
-
-//inline void glutTabletButtonFunc(void (*)(int button, int state, int x, int y));
-
-inline void glutOverlayDisplayFunc(void (*f)()) {
-  glut_window->overlaydisplay = f;}
-
-//inline void glutWindowStatusFunc(void (*)(int state));
-//enum {GLUT_HIDDEN, GLUT_FULLY_RETAINED, GLUT_PARTIALLY_RETAINED,
-//	GLUT_FULLY_COVERED};
-
-//inline void glutSetColor(int, GLfloat red, GLfloat green, GLfloat blue);
-
-//inline GLfloat glutGetColor(int ndx, int component);
-//#define GLUT_RED			0
-//#define GLUT_GREEN			1
-//#define GLUT_BLUE			2
-
-//inline void glutCopyColormap(int win);
-
-// Warning: values are changed from GLUT!
-// Also relies on the GL_ symbols having values greater than 100
-FL_EXPORT int glutGet(GLenum type);
-enum {
-  GLUT_RETURN_ZERO = 0,
-  GLUT_WINDOW_X,
-  GLUT_WINDOW_Y,
-  GLUT_WINDOW_WIDTH,
-  GLUT_WINDOW_HEIGHT,
-  GLUT_WINDOW_PARENT,
-  GLUT_SCREEN_WIDTH,
-  GLUT_SCREEN_HEIGHT,
-  GLUT_MENU_NUM_ITEMS,
-  GLUT_DISPLAY_MODE_POSSIBLE,
-  GLUT_INIT_WINDOW_X,
-  GLUT_INIT_WINDOW_Y,
-  GLUT_INIT_WINDOW_WIDTH,
-  GLUT_INIT_WINDOW_HEIGHT,
-  GLUT_INIT_DISPLAY_MODE,
-  GLUT_WINDOW_BUFFER_SIZE,
-  GLUT_VERSION
-//GLUT_WINDOW_NUM_CHILDREN,
-//GLUT_WINDOW_CURSOR,
-//GLUT_SCREEN_WIDTH_MM,
-//GLUT_SCREEN_HEIGHT_MM,
-//GLUT_ELAPSED_TIME,
-};
-
-#  define GLUT_WINDOW_STENCIL_SIZE	GL_STENCIL_BITS
-#  define GLUT_WINDOW_DEPTH_SIZE	GL_DEPTH_BITS
-#  define GLUT_WINDOW_RED_SIZE		GL_RED_BITS
-#  define GLUT_WINDOW_GREEN_SIZE	GL_GREEN_BITS
-#  define GLUT_WINDOW_BLUE_SIZE		GL_BLUE_BITS
-#  define GLUT_WINDOW_ALPHA_SIZE	GL_ALPHA_BITS
-#  define GLUT_WINDOW_ACCUM_RED_SIZE	GL_ACCUM_RED_BITS
-#  define GLUT_WINDOW_ACCUM_GREEN_SIZE	GL_ACCUM_GREEN_BITS
-#  define GLUT_WINDOW_ACCUM_BLUE_SIZE	GL_ACCUM_BLUE_BITS
-#  define GLUT_WINDOW_ACCUM_ALPHA_SIZE	GL_ACCUM_ALPHA_BITS
-#  define GLUT_WINDOW_DOUBLEBUFFER	GL_DOUBLEBUFFER
-#  define GLUT_WINDOW_RGBA		GL_RGBA
-#  define GLUT_WINDOW_COLORMAP_SIZE	GL_INDEX_BITS
-#  ifdef GL_SAMPLES_SGIS
-#    define GLUT_WINDOW_NUM_SAMPLES	GL_SAMPLES_SGIS
-#  else
-#    define GLUT_WINDOW_NUM_SAMPLES	GLUT_RETURN_ZERO
-#  endif
-#  define GLUT_WINDOW_STEREO		GL_STEREO
-
-#  define GLUT_HAS_KEYBOARD		600
-#  define GLUT_HAS_MOUSE		601
-#  define GLUT_HAS_SPACEBALL		602
-#  define GLUT_HAS_DIAL_AND_BUTTON_BOX	603
-#  define GLUT_HAS_TABLET		604
-#  define GLUT_NUM_MOUSE_BUTTONS	605
-#  define GLUT_NUM_SPACEBALL_BUTTONS	606
-#  define GLUT_NUM_BUTTON_BOX_BUTTONS	607
-#  define GLUT_NUM_DIALS		608
-#  define GLUT_NUM_TABLET_BUTTONS	609
-FL_EXPORT int glutDeviceGet(GLenum type);
-
-// WARNING: these values are different than GLUT uses:
-#  define GLUT_ACTIVE_SHIFT               FL_SHIFT
-#  define GLUT_ACTIVE_CTRL                FL_CTRL
-#  define GLUT_ACTIVE_ALT                 FL_ALT
-inline int glutGetModifiers() {return Fl::event_state() & (GLUT_ACTIVE_SHIFT | GLUT_ACTIVE_CTRL | GLUT_ACTIVE_ALT);}
-
-FL_EXPORT int glutLayerGet(GLenum);
-#  define GLUT_OVERLAY_POSSIBLE		800
-//#define GLUT_LAYER_IN_USE		801
-//#define GLUT_HAS_OVERLAY		802
-#  define GLUT_TRANSPARENT_INDEX		803
-#  define GLUT_NORMAL_DAMAGED		804
-#  define GLUT_OVERLAY_DAMAGED		805
-
-extern "C" {
-typedef void (*GLUTproc)();
-}
-
-FL_EXPORT GLUTproc glutGetProcAddress(const char *procName);
-
-//inline int glutVideoResizeGet(GLenum param);
-//#define GLUT_VIDEO_RESIZE_POSSIBLE	900
-//#define GLUT_VIDEO_RESIZE_IN_USE	901
-//#define GLUT_VIDEO_RESIZE_X_DELTA	902
-//#define GLUT_VIDEO_RESIZE_Y_DELTA	903
-//#define GLUT_VIDEO_RESIZE_WIDTH_DELTA	904
-//#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 905
-//#define GLUT_VIDEO_RESIZE_X		906
-//#define GLUT_VIDEO_RESIZE_Y		907
-//#define GLUT_VIDEO_RESIZE_WIDTH	908
-//#define GLUT_VIDEO_RESIZE_HEIGHT	909
-
-//inline void glutSetupVideoResizing();
-
-//inline void glutStopVideoResizing();
-
-//inline void glutVideoResize(int x, int y, int width, int height);
-
-//inline void glutVideoPan(int x, int y, int width, int height);
-
-// Font argument must be a void* for compatibility, so...
-/** fltk glut font/size attributes used in the glutXXX functions */
-struct Fl_Glut_Bitmap_Font {Fl_Font font; Fl_Fontsize size;};
-
-extern FL_EXPORT struct Fl_Glut_Bitmap_Font
-  glutBitmap9By15, glutBitmap8By13, glutBitmapTimesRoman10,
-  glutBitmapTimesRoman24, glutBitmapHelvetica10, glutBitmapHelvetica12,
-  glutBitmapHelvetica18;
-#  define GLUT_BITMAP_9_BY_15             (&glutBitmap9By15)
-#  define GLUT_BITMAP_8_BY_13             (&glutBitmap8By13)
-#  define GLUT_BITMAP_TIMES_ROMAN_10      (&glutBitmapTimesRoman10)
-#  define GLUT_BITMAP_TIMES_ROMAN_24      (&glutBitmapTimesRoman24)
-#  define GLUT_BITMAP_HELVETICA_10        (&glutBitmapHelvetica10)
-#  define GLUT_BITMAP_HELVETICA_12        (&glutBitmapHelvetica12)
-#  define GLUT_BITMAP_HELVETICA_18        (&glutBitmapHelvetica18)
-
-FL_EXPORT void glutBitmapCharacter(void *font, int character);
-FL_EXPORT int glutBitmapHeight(void *font);
-FL_EXPORT int glutBitmapLength(void *font, const unsigned char *string);
-FL_EXPORT void glutBitmapString(void *font, const unsigned char *string);
-FL_EXPORT int glutBitmapWidth(void *font, int character);
-
-FL_EXPORT int glutExtensionSupported(char *name);
-
-/* GLUT stroked font sub-API */
-struct Fl_Glut_StrokeVertex {
-  GLfloat X, Y;
-};
-
-struct Fl_Glut_StrokeStrip {
-  int Number;
-  const Fl_Glut_StrokeVertex* Vertices;
-};
-
-struct Fl_Glut_StrokeChar {
-  GLfloat Right;
-  int Number;
-  const Fl_Glut_StrokeStrip* Strips;
-};
-
-struct Fl_Glut_StrokeFont {
-  char* Name;				// The source font name
-  int Quantity;				// Number of chars in font
-  GLfloat Height;			// Height of the characters
-  const Fl_Glut_StrokeChar** Characters;// The characters mapping
-};
-extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman;
-extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman;
-#  define GLUT_STROKE_ROMAN		(&glutStrokeRoman)
-#  define GLUT_STROKE_MONO_ROMAN	(&glutStrokeMonoRoman)
-
-FL_EXPORT void glutStrokeCharacter(void *font, int character);
-FL_EXPORT GLfloat glutStrokeHeight(void *font);
-FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string);
-FL_EXPORT void glutStrokeString(void *font, const unsigned char *string);
-FL_EXPORT int glutStrokeWidth(void *font, int character);
-
-/* GLUT pre-built models sub-API */
-FL_EXPORT void glutWireSphere(GLdouble radius, GLint slices, GLint stacks);
-FL_EXPORT void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks);
-FL_EXPORT void glutWireCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-FL_EXPORT void glutSolidCone(GLdouble base, GLdouble height, GLint slices, GLint stacks);
-FL_EXPORT void glutWireCube(GLdouble size);
-FL_EXPORT void glutSolidCube(GLdouble size);
-FL_EXPORT void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-FL_EXPORT void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings);
-FL_EXPORT void glutWireDodecahedron();
-FL_EXPORT void glutSolidDodecahedron();
-FL_EXPORT void glutWireTeapot(GLdouble size);
-FL_EXPORT void glutSolidTeapot(GLdouble size);
-FL_EXPORT void glutWireOctahedron();
-FL_EXPORT void glutSolidOctahedron();
-FL_EXPORT void glutWireTetrahedron();
-FL_EXPORT void glutSolidTetrahedron();
-FL_EXPORT void glutWireIcosahedron();
-FL_EXPORT void glutSolidIcosahedron();
-
-#endif // !Fl_glut_H
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/mac.H
+++ /dev/null
@@ -1,332 +1,0 @@
-//
-// "$Id$"
-//
-// Mac header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Do not directly include this file, instead use <FL/x.H>.  It will
-// include this file if "__APPLE__" is defined.  This is to encourage
-// portability of even the system-specific code...
-#ifndef FL_DOXYGEN
-
-#if !defined(Fl_X_H)
-#  error "Never use <FL/mac.H> directly; include <FL/x.H> instead."
-#endif // !Fl_X_H
-
-#ifdef __OBJC__
-@class FLWindow; // a subclass of the NSWindow Cocoa class
-typedef FLWindow *Window;
-#else
-typedef class FLWindow *Window; // pointer to the FLWindow objective-c class
-#endif // __OBJC__
-
-#if !(defined(FL_LIBRARY) || defined(FL_INTERNALS)) // this part is used when compiling an application program
-#  include <FL/Fl_Widget.H>
-
-typedef struct flCocoaRegion* Fl_Region;
-typedef struct CGContext* CGContextRef;
-typedef struct OpaquePMPrintSettings*   PMPrintSettings;
-typedef struct OpaquePMPageFormat*      PMPageFormat;
-typedef struct OpaquePMPrintSession*    PMPrintSession;
-typedef struct CGImage* CGImageRef;
-typedef struct __CFData* CFMutableDataRef; // used in Fl_Copy_Surface.H
-typedef CGContextRef Fl_Offscreen;
-
-#else // this part must be compiled when building the FLTK libraries
-
-// Standard MacOS C/C++ includes...
-#include <ApplicationServices/ApplicationServices.h>
-#undef check // because of Fl::check()
-
-#ifndef MAC_OS_X_VERSION_10_4
-#define MAC_OS_X_VERSION_10_4 1040
-#endif
-#ifndef MAC_OS_X_VERSION_10_5
-#define MAC_OS_X_VERSION_10_5 1050
-#endif
-#ifndef MAC_OS_X_VERSION_10_6
-#define MAC_OS_X_VERSION_10_6 1060
-#endif
-#ifndef MAC_OS_X_VERSION_10_7
-#define MAC_OS_X_VERSION_10_7 1070
-#endif
-#ifndef MAC_OS_X_VERSION_10_8
-#define MAC_OS_X_VERSION_10_8 1080
-#endif
-#ifndef MAC_OS_X_VERSION_10_9
-#define MAC_OS_X_VERSION_10_9 1090
-#endif
-#ifndef MAC_OS_X_VERSION_10_10
-#define MAC_OS_X_VERSION_10_10 101000
-#endif
-#ifndef MAC_OS_X_VERSION_10_11
-#define MAC_OS_X_VERSION_10_11 101100
-#endif
-#ifndef MAC_OS_X_VERSION_10_12
-#define MAC_OS_X_VERSION_10_12 101200
-#endif
-#ifndef MAC_OS_X_VERSION_10_13
-#define MAC_OS_X_VERSION_10_13 101300
-#endif
-#ifndef MAC_OS_X_VERSION_10_14
-#define MAC_OS_X_VERSION_10_14 101400
-#endif
-
-#ifndef NSINTEGER_DEFINED // appears with 10.5 in NSObjCRuntime.h
-#if defined(__LP64__) && __LP64__
-typedef long NSInteger;
-typedef unsigned long NSUInteger;
-#else
-typedef int NSInteger;
-typedef unsigned int NSUInteger;
-#endif
-#endif
-
-#ifdef __OBJC__
-@class NSCursor;
-@class NSOpenGLPixelFormat;
-@class NSOpenGLContext;
-#else
-class NSCursor;
-class NSOpenGLPixelFormat;
-class NSOpenGLContext;
-#endif // __OBJC__
-
-typedef CGContextRef Fl_Offscreen;
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4
-typedef CGImageAlphaInfo CGBitmapInfo;
-#endif
-
-typedef struct flCocoaRegion {
-  int count;
-  CGRect *rects;
-} *Fl_Region;  // a region is the union of a series of rectangles
-
-#  include "Fl_Window.H"
-#  include "../src/Fl_Font.H"
-
-// Some random X equivalents
-struct XPoint { int x, y; };
-struct XRectangle {int x, y, width, height;};
-#ifndef CGFLOAT_DEFINED //appears with 10.5 in CGBase.h
-#if defined(__LP64__) && __LP64__
-typedef double CGFloat;
-#else
-typedef float CGFloat;
-#endif
-#endif // CGFLOAT_DEFINED
-
-extern CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h);
-inline Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  Fl_Region R = (Fl_Region)malloc(sizeof(*R));
-  R->count = 1;
-  R->rects = (CGRect *)malloc(sizeof(CGRect));
-  *(R->rects) = fl_cgrectmake_cocoa(x, y, w, h);
-  return R;
-}
-inline void XDestroyRegion(Fl_Region r) {
-  if(r) {
-    free(r->rects);
-    free(r);
-  }
-}
-extern NSCursor *fl_default_cursor;
-
-// This object contains all mac-specific stuff about a window:
-// WARNING: this object is highly subject to change!
-class Fl_X {
-  
-public:
-  Window xid;              // pointer to the Cocoa window object (FLWindow*)
-  Fl_Offscreen other_xid;  // pointer for offscreen bitmaps (overlay window)
-  Fl_Window *w;            // FLTK window for 
-  Fl_Region region;
-#if FLTK_ABI_VERSION < 10304
-  Fl_Region subRegion;     // for ABI compatibility, recycled to replace subRect_
-#endif
-  Fl_X *next;              // chain of mapped windows
-#if FLTK_ABI_VERSION < 10304
-  Fl_X *xidChildren;       // useless with true subwindows, recycled to replace mapped_to_retina_
-  Fl_X *xidNext;           // useless with true subwindows
-#endif
-  int wait_for_expose;
-  NSCursor *cursor;
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* w) {return w->i;}
-  static int fake_X_wm(const Fl_Window*,int&,int&,int&,int&,int&);
-  static void make(Fl_Window*);
-  void flush();
-  static void set_high_resolution(bool);
-#if FLTK_ABI_VERSION >= 10304
-  CGRect* subRect() { return subRect_; } // getter
-  void subRect(CGRect *r) { subRect_ = r; } // setter
-#else
-  CGRect* subRect() { return (CGRect*)subRegion; } // getter
-  void subRect(CGRect *r) { subRegion = (Fl_Region)r; } // setter
-#endif
-  bool mapped_to_retina();      // is window mapped to retina display?
-  void mapped_to_retina(bool);  // sets whether window is mapped to retina display
-  bool changed_resolution();      // did window just moved to display with another resolution?
-  void changed_resolution(bool);// sets whether window just moved to display with another resolution
-  bool in_windowDidResize();      // is window performing windowDidResize?
-  void in_windowDidResize(bool);  // sets whether window is performing windowDidResize
-  // Quartz additions:
-  CGContextRef gc;                 // graphics context (NULL when using QD)
-  static void q_fill_context();    // fill a Quartz context with current FLTK state
-  static void q_clear_clipping();  // remove all clipping from a Quartz context
-  static void q_release_context(Fl_X *x=0); // free all resources associated with fl_gc
-  static void q_begin_image(CGRect&, int x, int y, int w, int h);
-  static void q_end_image();
-  // Cocoa additions
-  static NSOpenGLPixelFormat *mode_to_NSOpenGLPixelFormat(int mode, const int*); // computes NSOpenGLPixelFormat from Gl window's mode
-  static NSOpenGLContext* create_GLcontext_for_window(NSOpenGLPixelFormat *pixelformat, NSOpenGLContext *shared_ctx, Fl_Window *window);
-  static void GLcontext_update(NSOpenGLContext*);
-  static void GLcontext_flushbuffer(NSOpenGLContext*);
-  static void GLcontext_release(NSOpenGLContext*);
-  static void GLcontext_makecurrent(NSOpenGLContext*);
-  static void GL_cleardrawable(void);
-  static void gl_start(NSOpenGLContext*);
-  void destroy(void);
-  void map(void);
-  void unmap(void);
-  void collapse(void);
-  WindowRef window_ref(void); // useless with cocoa GL windows
-  void set_key_window(void);
-  // OS X doesn't have per window icons
-  static void set_default_icons(const Fl_RGB_Image*[], int) {};
-  void set_icons() {};
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static CGImageRef CGImage_from_window_rect(Fl_Window *win, int x, int y, int w, int h);
-  static unsigned char *bitmap_from_window_rect(Fl_Window *win, int x, int y, int w, int h, int *bytesPerPixel);
-  static Fl_Region intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h);
-  static void *get_carbon_function(const char *name);
-  static void screen_work_area(int &X, int &Y, int &W, int &H, int n); // compute work area of a given screen
-  static int next_marked_length; // next length of marked text after current marked text will have been replaced
-  static int insertion_point_location(int *px, int *py, int *pheight); // computes window coordinates & height of insertion point
-  static const int CoreText_threshold;  // Mac OS version from which the Core Text API is used to display text
-  static Fl_Fontdesc* calc_fl_fonts(void); // computes the fl_fonts global variable
-  static int dnd(int use_selection); // call Fl_X::dnd(1) to support text dragging
-  static int calc_mac_os_version(void); // computes the fl_mac_os_version global variable
-  static void clip_to_rounded_corners(CGContextRef gc, int w, int h);
-  static void *get_titlebar_layer(Fl_Window *win);
-  static void draw_layer_to_context(void *layer, CGContextRef ctxt, int w, int h);
-private:
-#if FLTK_ABI_VERSION >= 10304
-  CGRect* subRect_;           // makes sure subwindow remains inside its parent window
-  // stores 3 binary flags: whether window is mapped to retina display; whether resolution just changed;
-  // whether window is OpenGL and is currently being resized.
-  unsigned mapped_to_retina_;
-#else
-  bool subwindow;     // for ABI compatibility, useless with true subwindows
-#endif
-};
-
-extern Window fl_window;
-
-#endif // FL_LIBRARY || FL_INTERNALS
-
-typedef CGImageRef Fl_Bitmask;
-
-extern CGContextRef fl_gc;
-
-extern Window fl_xid(const Fl_Window*);
-extern Fl_Window* fl_find(Window xid);
-void fl_clip_region(Fl_Region);
-
-extern Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern void fl_delete_bitmask(Fl_Bitmask bm);
-extern Fl_Offscreen fl_create_offscreen(int w, int h);
-extern void fl_copy_offscreen(int x,int y,int w,int h, Fl_Offscreen gWorld, int srcx,int srcy);
-extern void fl_delete_offscreen(Fl_Offscreen gWorld);
-extern void fl_begin_offscreen(Fl_Offscreen gWorld);
-extern void fl_end_offscreen();
-
-extern int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-extern void fl_open_display();
-
-#endif // FL_DOXYGEN
-/** \file
- Mac OS X-specific symbols.
- */
-
-/** \defgroup group_macosx Mac OS X-specific symbols
- Mac OS X-specific symbols declared in <FL/x.H> or <FL/gl.h>
- \sa \ref osissues_macos
- @{ */
-
-/** @brief Register a function called for each file dropped onto an application icon.
- \e cb will be called with a single Unix-style file name and path.
- If multiple files were dropped, \e cb will be called multiple times.
- */
-extern void fl_open_callback(void (*cb)(const char *));
-
-/** 
- * \brief Attaches a callback to the "About myprog" item of the system application menu.
- *
- * \param cb   a callback that will be called by "About myprog" menu item
- *		   with NULL 1st argument.
- * \param user_data   a pointer transmitted as 2nd argument to the callback.
- * \param shortcut    optional shortcut to attach to the "About myprog" menu item (e.g., FL_META+'a')
- */
-extern void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut = 0);
-
-/** \brief The version number of the running Mac OS X (e.g., 100604 for 10.6.4)
- */
-extern int fl_mac_os_version;
-
-/** Determines whether cmd-Q or the "Quit xxx" item of application menu terminates the app or only the event loop.
- By default, fl_mac_quit_early = 1, and cmd-Q or "Quit xxx" terminate the app when all windows are closed
- without Fl::run() returning. If fl_mac_quit_early is set to 0, cmd-Q or "Quit xxx" terminate only the event loop
- when all windows are closed, and Fl::run() returns.
- \note This OS-specific variable will not be part of the API of FLTK 1.4.
- */
-extern int fl_mac_quit_early;
-
-/** The system menu bar.
- */
-extern class Fl_Sys_Menu_Bar *fl_sys_menu_bar;
-
-struct Fl_Menu_Item;
-
-class Fl_Mac_App_Menu {
-public:
-  /** Localizable text for the "About xxx" application menu item */
-  static const char *about;
-  /** Localizable text for the "Print Front Window" application menu item.
-   This menu item won't be displayed if Fl_Mac_App_Menu::print 
-   is set to an empty string.
-   */
-  static const char *print;
-  /** Localizable text for the "Services" application menu item */
-  static const char *services;
-  /** Localizable text for the "Hide xxx" application menu item */
-  static const char *hide;
-  /** Localizable text for the "Hide Others" application menu item */
-  static const char *hide_others;
-  /** Localizable text for the "Show All" application menu item */
-  static const char *show;
-  /** Localizable text for the "Quit xxx" application menu item */
-  static const char *quit;
-  static void custom_application_menu_items(const Fl_Menu_Item *m);
-};
-
-/** @} */
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/FL/math.h
+++ /dev/null
@@ -1,62 +1,0 @@
-//
-// "$Id$"
-//
-// Math header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Xcode on OS X includes files by recursing down into directories.
-// This code catches the cycle and directly includes the required file.
-#ifdef fl_math_h_cyclic_include 
-#  include "/usr/include/math.h"
-#endif
-
-#ifndef fl_math_h
-#  define fl_math_h
-
-#  define fl_math_h_cyclic_include 
-#  include <math.h>
-#  undef fl_math_h_cyclic_include 
-
-#  ifdef __EMX__
-#    include <float.h>
-#  endif
-
-
-#  ifndef M_PI
-#    define M_PI            3.14159265358979323846
-#    define M_PI_2          1.57079632679489661923
-#    define M_PI_4          0.78539816339744830962
-#    define M_1_PI          0.31830988618379067154
-#    define M_2_PI          0.63661977236758134308
-#  endif // !M_PI
-
-#  ifndef M_SQRT2
-#    define M_SQRT2         1.41421356237309504880
-#    define M_SQRT1_2       0.70710678118654752440
-#  endif // !M_SQRT2
-
-#  if (defined(WIN32) || defined(CRAY)) && !defined(__MINGW32__) && !defined(__MWERKS__)
-
-inline double rint(double v) {return floor(v+.5);}
-inline double copysign(double a, double b) {return b<0 ? -a : a;}
-
-#  endif // (WIN32 || CRAY) && !__MINGW32__ && !__MWERKS__
-
-#endif // !fl_math_h
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/names.h
+++ /dev/null
@@ -1,121 +1,0 @@
-//
-// "$Id$"
-//
-// Event names header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Thanks to Greg Ercolano for this addition.
-
-#ifndef FL_NAMES_H
-#define FL_NAMES_H
-
-/** \defgroup fl_events Events handling functions
-    @{
- */
-
-/**
-  This is an array of event names you can use to convert event numbers into names.
-
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
-
-  \b Example:
-  \code
-  #include <FL/names.h>		// array will be defined here
-  int MyClass::handle(int e) {
-      printf("Event was %s (%d)\n", fl_eventnames[e], e);
-      // ..resulting output might be e.g. "Event was FL_PUSH (1)"..
-      [..]
-  }
-  \endcode
- */
-const char * const fl_eventnames[] =
-{
-  "FL_NO_EVENT",
-  "FL_PUSH",
-  "FL_RELEASE",
-  "FL_ENTER",
-  "FL_LEAVE",
-  "FL_DRAG",
-  "FL_FOCUS",
-  "FL_UNFOCUS",
-  "FL_KEYDOWN",
-  "FL_KEYUP",
-  "FL_CLOSE",
-  "FL_MOVE",
-  "FL_SHORTCUT",
-  "FL_DEACTIVATE",
-  "FL_ACTIVATE",
-  "FL_HIDE",
-  "FL_SHOW",
-  "FL_PASTE",
-  "FL_SELECTIONCLEAR",
-  "FL_MOUSEWHEEL",
-  "FL_DND_ENTER",
-  "FL_DND_DRAG",
-  "FL_DND_LEAVE",
-  "FL_DND_RELEASE",
-  "FL_SCREEN_CONFIGURATION_CHANGED",
-  "FL_FULLSCREEN",
-  "FL_ZOOM_GESTURE",
-  "FL_EVENT_27",  // not yet defined, just in case they /will/ be defined ...
-  "FL_EVENT_28",
-  "FL_EVENT_29",
-  "FL_EVENT_30"
-};
-
-/**
-  This is an array of font names you can use to convert font numbers into names.
-
-  The array gets defined inline wherever your '\#include <FL/names.h>' appears.
-
-  \b Example:
-  \code
-  #include <FL/names.h>		// array will be defined here
-  int MyClass::my_callback(Fl_Widget *w, void*) {
-      int fnum = w->labelfont();
-      // Resulting output might be e.g. "Label's font is FL_HELVETICA (0)"
-      printf("Label's font is %s (%d)\n", fl_fontnames[fnum], fnum);
-      // ..resulting output might be e.g. "Label's font is FL_HELVETICA (0)"..
-      [..]
-  }
-  \endcode
- */
-const char * const fl_fontnames[] =
-{
-  "FL_HELVETICA",
-  "FL_HELVETICA_BOLD",
-  "FL_HELVETICA_ITALIC",
-  "FL_HELVETICA_BOLD_ITALIC",
-  "FL_COURIER",
-  "FL_COURIER_BOLD",
-  "FL_COURIER_ITALIC",
-  "FL_COURIER_BOLD_ITALIC",
-  "FL_TIMES",
-  "FL_TIMES_BOLD",
-  "FL_TIMES_ITALIC",
-  "FL_TIMES_BOLD_ITALIC",
-  "FL_SYMBOL",
-  "FL_SCREEN",
-  "FL_SCREEN_BOLD",
-  "FL_ZAPF_DINGBATS",
-};
-
-/** @} */
-
-#endif /* FL_NAMES_H */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/platform.H
+++ /dev/null
@@ -1,31 +1,0 @@
-//
-// "$Id$"
-//
-// Platform abstraction header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file is present for compatibility with FLTK 1.4 and later.
-
-// In FLTK 1.4 FL/platform.H replaces FL/x.H.  FLTK 1.4 code that
-// includes FL/platform.H instead of FL/x.H can now be compiled with
-// FLTK 1.3.5 and later versions.
-
-#if !defined(Fl_X_H)
-#include <FL/x.H>
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/win32.H
+++ /dev/null
@@ -1,163 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Do not directly include this file, instead use <FL/x.H>.  It will
-// include this file if WIN32 is defined.  This is to encourage
-// portability of even the system-specific code...
-
-#ifndef FL_DOXYGEN
-#ifndef Fl_X_H
-#  error "Never use <FL/win32.H> directly; include <FL/x.H> instead."
-#endif // !Fl_X_H
-
-#include <windows.h>
-typedef HRGN Fl_Region;
-typedef HWND Window;
-typedef POINT XPoint;
-
-#include <FL/Fl_Window.H>
-
-// this part is included only when compiling the FLTK library or if requested explicitly
-#if defined(FL_LIBRARY) || defined(FL_INTERNALS) 
-
-// In some of the distributions, the gcc header files are missing some stuff:
-#ifndef LPMINMAXINFO
-#define LPMINMAXINFO MINMAXINFO*
-#endif
-#ifndef VK_LWIN
-#define VK_LWIN 0x5B
-#define VK_RWIN 0x5C
-#define VK_APPS 0x5D
-#endif
-
-// some random X equivalents
-struct XRectangle {int x, y, width, height;};
-extern Fl_Region XRectangleRegion(int x, int y, int w, int h);
-inline void XDestroyRegion(Fl_Region r) {DeleteObject(r);}
-inline void XClipBox(Fl_Region r,XRectangle* rect) {
-    RECT win_rect; GetRgnBox(r,&win_rect);
-    rect->x=win_rect.left;
-    rect->y=win_rect.top;
-    rect->width=win_rect.right-win_rect.left;
-    rect->height=win_rect.bottom-win_rect.top;
-}
-#define XDestroyWindow(a,b) DestroyWindow(b)
-#define XMapWindow(a,b) ShowWindow(b, SW_RESTORE)
-#define XUnmapWindow(a,b) ShowWindow(b, SW_HIDE)
-
-// this object contains all win32-specific stuff about a window:
-// Warning: this object is highly subject to change!
-class FL_EXPORT Fl_X {
-public:
-  // member variables - add new variables only at the end of this block
-  Window xid;
-  HBITMAP other_xid; // for double-buffered windows
-  Fl_Window* w;
-  Fl_Region region;
-  Fl_X *next;
-  int wait_for_expose;
-  HDC private_dc; // used for OpenGL
-  HCURSOR cursor;
-  int custom_cursor;
-  HDC saved_hdc;  // saves the handle of the DC currently loaded
-  // static variables, static functions and member functions
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* w) {return w->i;}
-  static int fake_X_wm(const Fl_Window* w,int &X, int &Y,
-		                 int &bt,int &bx,int &by);
-  void make_fullscreen(int X, int Y, int W, int H);
-  void setwindow(Fl_Window* wi) {w=wi; wi->i=this;}
-  void flush() {w->flush();}
-  void set_minmax(LPMINMAXINFO minmax);
-  void mapraise();
-  static void set_default_icons(const Fl_RGB_Image*[], int);
-  static void set_default_icons(HICON, HICON);
-  void set_icons();
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static Fl_X* make(Fl_Window*);
-};
-extern FL_EXPORT UINT fl_wake_msg;
-extern FL_EXPORT char fl_override_redirect; // hack into Fl_Window::make_xid()
-extern FL_EXPORT int fl_background_pixel;  // hack into Fl_Window::make_xid()
-extern FL_EXPORT HPALETTE fl_palette; // non-zero only on 8-bit displays!
-extern FL_EXPORT void fl_release_dc(HWND w, HDC dc);
-extern FL_EXPORT void fl_save_dc( HWND w, HDC dc);
-
-inline Window fl_xid(const Fl_Window* w) { Fl_X *temp = Fl_X::i(w); return temp ? temp->xid : 0; }
-
-extern FL_EXPORT void fl_open_display();
-
-#else
-FL_EXPORT Window fl_xid_(const Fl_Window* w);
-#define fl_xid(w) fl_xid_(w)
-#endif // FL_LIBRARY || FL_INTERNALS
-
-FL_EXPORT Fl_Window* fl_find(Window xid);
-void fl_clip_region(Fl_Region);
-
-// most recent fl_color() or fl_rgbcolor() points at one of these:
-extern FL_EXPORT struct Fl_XMap {
-  COLORREF rgb;	// this should be the type the RGB() macro returns
-  HPEN pen;	// pen, 0 if none created yet
-  int brush;	// ref to solid brush, 0 if none created yet
-} *fl_current_xmap;
-inline COLORREF fl_RGB() {return fl_current_xmap->rgb;}
-inline HPEN fl_pen() {return fl_current_xmap->pen;}
-FL_EXPORT HBRUSH fl_brush(); // allocates a brush if necessary
-FL_EXPORT HBRUSH fl_brush_action(int); // now does the real work
-
-extern FL_EXPORT HINSTANCE fl_display;
-extern FL_EXPORT Window fl_window;
-extern FL_EXPORT HDC fl_gc;
-extern FL_EXPORT MSG fl_msg;
-extern FL_EXPORT HDC fl_GetDC(Window);
-extern FL_EXPORT HDC fl_makeDC(HBITMAP);
-
-// off-screen pixmaps: create, destroy, draw into, copy to window
-typedef HBITMAP Fl_Offscreen;
-#define fl_create_offscreen(w, h) \
-  CreateCompatibleBitmap( (fl_gc ? fl_gc : fl_GetDC(0) ) , w, h)
-
-# define fl_begin_offscreen(b) \
-   HDC _sgc=fl_gc; Window _sw=fl_window; \
-   Fl_Surface_Device *_ss = Fl_Surface_Device::surface(); Fl_Display_Device::display_device()->set_current(); \
-   fl_gc=fl_makeDC(b); int _savedc = SaveDC(fl_gc); fl_window=(HWND)b; fl_push_no_clip()
-
-# define fl_end_offscreen() \
-   fl_pop_clip(); RestoreDC(fl_gc, _savedc); DeleteDC(fl_gc); _ss->set_current(); fl_window=_sw; fl_gc = _sgc
-
-
-FL_EXPORT void fl_copy_offscreen(int x,int y,int w,int h,HBITMAP pixmap,int srcx,int srcy);
-#define fl_delete_offscreen(bitmap) DeleteObject(bitmap)
-
-// Bitmap masks
-typedef HBITMAP Fl_Bitmask;
-
-extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
-
-// Dummy function to register a function for opening files via the window manager...
-inline void fl_open_callback(void (*)(const char *)) {}
-
-extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-#endif // FL_DOXYGEN
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/FL/x.H
+++ /dev/null
@@ -1,183 +1,0 @@
-//
-// "$Id$"
-//
-// X11 header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// These are internal fltk symbols that are necessary or useful for
-// calling Xlib.  You should include this file if (and ONLY if) you
-// need to call Xlib directly.  These symbols may not exist on non-X
-// systems.
-
-#if !defined(Fl_X_H) && !defined(FL_DOXYGEN) 
-#  define Fl_X_H
-
-#  include "Enumerations.H"
-
-#  ifdef WIN32
-#    include "win32.H"
-#  elif defined(__APPLE__)
-#    include "mac.H"
-#  else
-#    if defined(_ABIN32) || defined(_ABI64) // fix for broken SGI Irix X .h files
-#      pragma set woff 3322
-#    endif
-#    include <X11/Xlib.h>
-#    include <X11/Xutil.h>
-#    if defined(_ABIN32) || defined(_ABI64)
-#      pragma reset woff 3322
-#    endif
-#    include <X11/Xatom.h>
-#    include "Fl_Window.H"
-// Mirror X definition of Region to Fl_Region, for portability...
-typedef Region Fl_Region;
-
-FL_EXPORT void fl_open_display();
-FL_EXPORT void fl_open_display(Display*);
-FL_EXPORT void fl_close_display();
-
-// constant info about the X server connection:
-extern FL_EXPORT Display *fl_display;
-extern FL_EXPORT int fl_screen;
-extern FL_EXPORT XVisualInfo *fl_visual;
-extern FL_EXPORT Colormap fl_colormap;
-
-
-// drawing functions:
-extern FL_EXPORT GC fl_gc;
-extern FL_EXPORT Window fl_window;
-FL_EXPORT ulong fl_xpixel(Fl_Color i);
-FL_EXPORT ulong fl_xpixel(uchar r, uchar g, uchar b);
-FL_EXPORT void fl_clip_region(Fl_Region);
-FL_EXPORT Fl_Region fl_clip_region();
-
-// feed events into fltk:
-FL_EXPORT int fl_handle(const XEvent&);
-
-// you can use these in Fl::add_handler() to look at events:
-extern FL_EXPORT const XEvent* fl_xevent;
-extern FL_EXPORT ulong fl_event_time;
-
-// off-screen pixmaps: create, destroy, draw into, copy to window:
-typedef ulong Fl_Offscreen;
-#    define fl_create_offscreen(w,h) XCreatePixmap(fl_display, RootWindow(fl_display, fl_screen), w, h, fl_visual->depth)
-#    define fl_create_offscreen_with_alpha(w,h) XCreatePixmap(fl_display, RootWindow(fl_display, fl_screen), w, h, 32)
-// begin/end are macros that save the old state in local variables:
-#    define fl_begin_offscreen(pixmap) \
-  Window _sw=fl_window; fl_window=pixmap; \
-  Fl_Surface_Device *_ss = Fl_Surface_Device::surface(); Fl_Display_Device::display_device()->set_current(); \
-  fl_push_no_clip()
-#    define fl_end_offscreen() \
-  fl_pop_clip(); fl_window = _sw; _ss->set_current()
-
-extern FL_EXPORT void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
-#    define fl_delete_offscreen(pixmap) XFreePixmap(fl_display, pixmap)
-
-// Bitmap masks
-typedef ulong Fl_Bitmask;
-
-extern FL_EXPORT Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data);
-extern FL_EXPORT Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *data);
-extern FL_EXPORT void fl_delete_bitmask(Fl_Bitmask bm);
-
-#if defined(FL_LIBRARY) || defined(FL_INTERNALS)
-extern FL_EXPORT Window fl_message_window;
-extern FL_EXPORT void *fl_xftfont;
-FL_EXPORT Fl_Region XRectangleRegion(int x, int y, int w, int h); // in fl_rect.cxx
-
-// access to core fonts:
-// This class provides a "smart pointer" that returns a pointer to an XFontStruct.
-// The global variable fl_xfont can be called wherever a bitmap "core" font is
-// needed, e.g. when rendering to a GL context under X11.
-// With Xlib / X11 fonts, fl_xfont will return the current selected font.
-// With XFT / X11 fonts, fl_xfont will attempt to return the bitmap "core" font most
-// similar to (usually the same as) the current XFT font.
-class Fl_XFont_On_Demand
-{
-public:
-  Fl_XFont_On_Demand(XFontStruct* p = NULL) : ptr(p) { }
-  Fl_XFont_On_Demand& operator=(const Fl_XFont_On_Demand& x)
-  { ptr = x.ptr;  return *this; }
-  Fl_XFont_On_Demand& operator=(XFontStruct* p)
-  { ptr = p;  return *this; }
-  XFontStruct* value();
-  operator XFontStruct*() { return value(); }
-  XFontStruct& operator*() { return *value(); }
-  XFontStruct* operator->() { return value(); }
-  bool operator==(const Fl_XFont_On_Demand& x) { return ptr == x.ptr; }
-  bool operator!=(const Fl_XFont_On_Demand& x) { return ptr != x.ptr; }
-private:
-  XFontStruct *ptr;
-};
-extern FL_EXPORT Fl_XFont_On_Demand fl_xfont;
-extern FL_EXPORT XFontStruct* fl_X_core_font();
-
-// this object contains all X-specific stuff about a window:
-// Warning: this object is highly subject to change!  
-// FL_LIBRARY or FL_INTERNALS must be defined to access this class.
-class FL_EXPORT Fl_X {
-public:
-  Window xid;
-  Window other_xid;
-  Fl_Window *w;
-  Fl_Region region;
-  Fl_X *next;
-  char wait_for_expose;
-  char backbuffer_bad; // used for XDBE
-  static Fl_X* first;
-  static Fl_X* i(const Fl_Window* wi) {return wi->i;}
-  void setwindow(Fl_Window* wi) {w=wi; wi->i=this;}
-  void sendxjunk();
-  static void set_default_icons(const Fl_RGB_Image*[], int);
-  void set_icons();
-  int set_cursor(Fl_Cursor);
-  int set_cursor(const Fl_RGB_Image*, int, int);
-  static void make_xid(Fl_Window*,XVisualInfo* =fl_visual, Colormap=fl_colormap);
-  static Fl_X* set_xid(Fl_Window*, Window);
-  // kludges to get around protection:
-  void flush() {w->flush();}
-  static void x(Fl_Window* wi, int X) {wi->x(X);}
-  static void y(Fl_Window* wi, int Y) {wi->y(Y);}
-  static int ewmh_supported();
-  static int xrender_supported();
-  static void activate_window(Window w);
-};
-
-extern FL_EXPORT char fl_override_redirect; // hack into Fl_X::make_xid()
-extern FL_EXPORT int fl_background_pixel;  // hack into Fl_X::make_xid()
-
-inline Window fl_xid(const Fl_Window* w) { Fl_X *xTemp = Fl_X::i(w); return xTemp ? xTemp->xid : 0; }
-
-#else
-
-extern FL_EXPORT Window fl_xid_(const Fl_Window* w);
-#define fl_xid(w) fl_xid_(w)
-
-#endif // FL_LIBRARY || FL_INTERNALS
-
-FL_EXPORT Fl_Window* fl_find(Window xid);
-
-
-// Dummy function to register a function for opening files via the window manager...
-inline void fl_open_callback(void (*)(const char *)) {}
-
-extern FL_EXPORT int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b);
-
-#  endif
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/GL/glut.h
+++ /dev/null
@@ -1,23 +1,0 @@
-//
-// "$Id$"
-//
-// GLUT compatibility header for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/glut.H>
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/KNOWN_BUGS.html
+++ /dev/null
@@ -1,2448 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-   "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-  <title>Known Bugs and Feature Requests - Fast Light Toolkit (FLTK) 1.3.5</title>
-  <meta http-equiv="Pragma" content="no-cache">
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-  <link rel="stylesheet" type="text/css" href="html/fltk.css">
-</head>
-<body>
-<h1>Known Bugs and Feature Requests in FLTK 1.3.5</h1>
-
-<p>This is a list of open STR's (Software Trouble Reports) and RFE's
-(Requests for Enhancement) at the time of the release of FLTK 1.3.5 (March 2019).
-The current list can be viewed online at FLTK's
-<a href="https://www.fltk.org/roadmap.php#1.3">Development Roadmap</a>.
-<br><br>
-FLTK 1.3.5 is expected to be the last release in the 1.3.x series. Only
-very serious bugs <b>may</b> be addressed in a future 1.3.6 release.
-<br>
-All open STR's and RFE's of FLTK 1.3.x will be considered for FLTK 1.4.0,
-if possible.
-<br><br>
-<b>Click on a bug report to see its current state or to add comments
-and/or patches online.</b>
-</p>
-
-<!-- INSERT BUG LIST HEADER HERE -->
-<h2><a name='1.3' id="1.3">FLTK 1.3 (62 Open Features, 62 Open Bugs)</a></h2>
-<!-- END OF BUG LIST HEADER -->
-
-<p>FLTK 1.3 is the LATEST STABLE BRANCH based on FLTK 1.1.10. It adds internationalization,
-   UTF-8 (Unicode), printing support, Doxygen based documentation, and several new widgets
-   including Fl_Native_File_Chooser, Fl_Table, and Fl_Tree. FLTK 1.3 is no longer in active
-   development but still gets some important bug fixes (and for instance new macOS support).
-</p>
-<br>
-
-<!-- INSERT BUG LIST HERE -->
-
-  <table border='1' cellpadding='5' cellspacing='0' width='100%' summary=''>
-    <tr bgcolor='#CCCCCC'>
-      <th nowrap>STR #</th>
-      <th nowrap>Summary</th>
-      <th nowrap>Subsystem</th>
-      <th nowrap>Status</th>
-      <th nowrap>Priority</th>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2862'>2862</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2862'>Fl_Table keyboard nav issue: can't use tab to navigate
-      off the widget</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2862'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2862'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2862'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2895'>2895</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2895'>Fl_Tree: SINGLE mode selection issues</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2895'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2895'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2895'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2944'>2944</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2944'>Mac OS X Fl_Gl_Window bugs - all FLTK
-      versions</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2944'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2944'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2944'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2961'>2961</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2961'>1.3 very slow on X11 with Unicode locale</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2961'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2961'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2961'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3001'>3001</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3001'>Flickering while resizing</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3001'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3001'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3001'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3018'>3018</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3018'>Selects unclicked cells/rows/cols in the
-      Fl_Table.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3018'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3018'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3018'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3030'>3030</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3030'>resize behavior of widgets in an Fl_Tree</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3030'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3030'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3030'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3170'>3170</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3170'>Fl_Table_Row callback not called</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3170'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3170'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3170'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3188'>3188</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3188'>Callback added using Fl::add_timeout is not called
-      (X11)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3188'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3188'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3188'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3235'>3235</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3235'>Segmentation fault in Fl_Preferences</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3235'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3235'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3235'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3252'>3252</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3252'>Fl_Native_File_Chooser and Fl_Gl_Window on MacOS
-      X</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3252'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3252'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3252'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3259'>3259</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3259'>Incompatibilty with tmux on OSX</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3259'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3259'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3259'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3321'>3321</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3321'>[X11/Xft] Overlapping lines (font rendering
-      problems)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3321'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3321'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3321'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3337'>3337</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3337'>Fl_Text_Display: sometimes selection doesn't
-      work</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3337'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3337'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3337'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3346'>3346</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3346'>FreeBSD/NetBSD: cannot build with make without running
-      configure before</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3346'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3346'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3346'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3352'>3352</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3352'>Linux: Tiny window problem if child group larger than
-      window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3352'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3352'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3352'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3358'>3358</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3358'>checkbox labels become bold when OPTIONS_VISIBLE_FOCUS
-      is off</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3358'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3358'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3358'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3377'>3377</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3377'>Fl::grab() breaks event handling for some
-      controls</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3377'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3377'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3377'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3378'>3378</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3378'>configure.ac script changes for compiling fltk on
-      Solaris</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3378'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3378'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3378'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3384'>3384</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3384'>setting up an offscreen area crashes when no Window
-      exists yet (X11 only)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3384'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3384'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3384'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3410'>3410</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3410'>Fl_Shared_Image:find() doesn't find some existing
-      images</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3410'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3410'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3410'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3434'>3434</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3434'>Support building with unusual prefix</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3434'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3434'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3434'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3441'>3441</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3441'>fl_filename_relative returns a wrong path</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3441'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3441'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3441'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3455'>3455</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3455'>Windows are not positioned at 0,0 when there is no
-      window manager.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3455'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3455'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3455'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3458'>3458</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3458'>GLUT compatibility mode segfaults when there's no
-      current window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3458'>GLUT Emulation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3458'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3458'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3462'>3462</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3462'>Fullscreen windows not updated when screens are added
-      or removed</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3462'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3462'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3462'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3489'>3489</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3489'>alpha blending does not work correctly in
-      Fl_Image.cxx</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3489'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3489'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3489'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3494'>3494</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3494'>check box not visible using gtk+ scheme</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3494'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3494'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3494'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3497'>3497</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3497'>fltk-config - support cross compile</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3497'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3497'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3497'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3502'>3502</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3502'>Cannot use Chinese input method in linux for fltk
-      &gt;= 1.3.4</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3502'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3502'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3502'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2791'>2791</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2791'>Minmum size for tiles in an Fl_Tile</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2791'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2791'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2791'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2797'>2797</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2797'>X errors occur when XDBE disabled + Fl_Double_Windows
-      resized to zero on W or H</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2797'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2797'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2797'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2798'>2798</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2798'>X11 coordinate clipping - label</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2798'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2798'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2798'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2828'>2828</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2828'>Fl_Tree RFE's</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2828'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2828'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2828'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2844'>2844</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2844'>Fl_Text_Display: needs keyboard nav for caret motion
-      and keyboard selection</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2844'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2844'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2844'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2892'>2892</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2892'>Fl_Text_Display::position_to_line(): Consistency check
-      ptvl failed</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2892'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2892'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2892'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2908'>2908</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2908'>Menu_::find_index(const char*) doesn't handle escape
-      sequence correctly</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2908'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2908'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2908'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2909'>2909</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2909'>Fl_Tile does not pass FL_RELEASE event to
-      children</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2909'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2909'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2909'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2978'>2978</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2978'>FL_DND_LEAVE not passed to handle() function</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2978'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2978'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2978'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2983'>2983</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2983'>Documentation isn't built correctly.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2983'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2983'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2983'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3077'>3077</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3077'>fl_normal_measure does not give correct size for
-      FL_ALIGN_IMAGE_NEXT_TO_TEXT</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3077'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3077'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3077'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3080'>3080</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3080'>Implicit type conversion from int64 to int32 in
-      fl_draw</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3080'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3080'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3080'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3134'>3134</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3134'>fl_clip_box fails on X11 with large
-      coordinates</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3134'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3134'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3134'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3147'>3147</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3147'>Assigning Ctrl+Shift+0 to a Fl_Sys_Menu_Bar item does
-      not work using Visual Studio 2012</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3147'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3147'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3147'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3175'>3175</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3175'>Fl_Text_Editor overstrike mode doesn't behave as
-      expected</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3175'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3175'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3175'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3186'>3186</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3186'>fl_filename_match() inconsistent with case
-      sensitivity</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3186'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3186'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3186'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3201'>3201</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3201'>unix Fl_Window::show _NET_ACTIVE_WINDOW event needed
-      to raise</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3201'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3201'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3201'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3214'>3214</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3214'>Fl_Tree::clear() does not delete widgets (only
-      items)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3214'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3214'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3214'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3220'>3220</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3220'>Can select multiple items in Fl_Tree even in
-      FL_TREE_SELECT_SINGLE mode</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3220'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3220'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3220'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3225'>3225</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3225'>Problem with shown directory in
-      fl_file_chooser</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3225'>Example Programs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3225'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3225'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3261'>3261</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3261'>FLTK and glutChangeToMenuEntry</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3261'>GLUT Emulation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3261'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3261'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3273'>3273</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3273'>Fl::screen_dpi() returns generic Xinerama
-      values</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3273'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3273'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3273'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3282'>3282</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3282'>Fl_Table::handle() returns 1 on right clicks</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3282'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3282'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3282'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3290'>3290</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3290'>Fl_Help_Dialog does not number ordered lists</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3290'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3290'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3290'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3292'>3292</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3292'>Fl_Browser: trouble pre-selecting item #1 with type()
-      HOLD or SELECT</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3292'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3292'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3292'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3293'>3293</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3293'>show_item_top() causes tree redraw position
-      bug</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3293'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3293'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3293'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3301'>3301</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3301'>Fl_Text_Display::scroll(line) not working with
-      wrap_mode()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3301'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3301'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3301'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3341'>3341</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3341'>Fl_File_Chooser has no icons under more recent
-      distributions</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3341'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3341'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3341'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3382'>3382</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3382'>wrong DC clean-up on Windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3382'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3382'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3382'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3408'>3408</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3408'>setting Fl_Scroll inactive doesn't draw the background
-      inactive</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3408'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3408'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3408'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3409'>3409</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3409'>libpng</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3409'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3409'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3409'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3438'>3438</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3438'>using ASCII function when Unicode version is available
-      (mingw-w64)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3438'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3438'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3438'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2676'>2676</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2676'>Enhance error reporting on broken Xft installations
-      (was:fl_alert dialogs etc crashes in XftTextExtents32 on Solaris)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2676'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2676'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2676'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2728'>2728</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2728'>Add test program to test for shadowed variables
-      (-Wshadow)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2728'>Test Framework</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2728'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2728'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2790'>2790</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2790'>Patch allow fluid generate constructor without
-      arguments for Widget_Class</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2790'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2790'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2790'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2794'>2794</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2794'>Fluid hacked</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2794'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2794'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2794'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2815'>2815</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2815'>Implementation of Fl_Text_Display backdrop</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2815'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2815'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2815'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2821'>2821</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2821'>MouseWheel acceleration patch</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2821'>OS support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2821'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2821'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2824'>2824</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2824'>Adding scroller animation to FLTK</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2824'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2824'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2824'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2838'>2838</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2838'>Add Colors to FL_Text_Display (+ underscore +
-      strikethru)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2838'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2838'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2838'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2842'>2842</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2842'>putting new widget on place of user's click</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2842'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2842'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2842'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2843'>2843</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2843'>Fluid: "space evenly" makes the same distance between
-      pairs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2843'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2843'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2843'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2867'>2867</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2867'>ADding bgcolor to Style_Table_Entry</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2867'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2867'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2867'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2875'>2875</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2875'>More general methods to select fonts with attributes
-      BOLD/ITALIC (Patch supplied)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2875'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2875'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2875'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2882'>2882</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2882'>a minimum knob-size for Fl_Scrollbar widget</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2882'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2882'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2882'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2894'>2894</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2894'>problem with pressed_menu_button_</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2894'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2894'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2894'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2896'>2896</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2896'>Better looking menu dividers</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2896'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2896'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2896'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2902'>2902</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2902'>FL_HOLD_BROWSER selection positioning</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2902'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2902'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2902'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2923'>2923</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2923'>New Cursors for fltk-1.3</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2923'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2923'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2923'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2924'>2924</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2924'>New Cursors for fltk-1.3 and fltk-3.0</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2924'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2924'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2924'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2926'>2926</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2926'>Remove hardcoded extra pixels from menu window
-      size</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2926'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2926'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2926'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2936'>2936</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2936'>fluid: needs mods to allow defining a
-      'namespace'</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2936'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2936'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2936'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2941'>2941</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2941'>RFE: fl_text_extents(): support multiple
-      lines</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2941'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2941'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2941'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2950'>2950</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2950'>Menu Item behaviour</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2950'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2950'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2950'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2952'>2952</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2952'>fluid - Adding win32 icon</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2952'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2952'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2952'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2980'>2980</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2980'>Fl::event_text() returns no meaningful value for
-      FL_DND_ENTER and FL_DND_DRAG on Windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2980'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2980'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2980'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2981'>2981</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2981'>Fl::event_text() returns "&lt;unknown&gt;" for
-      FL_DND_ENTER and FL_DND_DRAG on X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2981'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2981'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2981'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2992'>2992</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2992'>New widget: Fl_Gl_Window_Group</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2992'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2992'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2992'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3003'>3003</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3003'>New class Fl_Toggle_Browser for fltk-1.3.x .</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3003'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3003'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3003'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3007'>3007</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3007'>Suggestion for improvement to the standard
-      file-chooser.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3007'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3007'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3007'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3015'>3015</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3015'>Allow hiding scrollbars in Fl_Help_View</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3015'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3015'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3015'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3017'>3017</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3017'>FLTK &amp; icons for each scheme.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3017'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3017'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3017'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3020'>3020</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3020'>Function for blending two images with different depth
-      of color.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3020'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3020'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3020'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3021'>3021</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3021'>Logotip for FLTK</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3021'>None</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3021'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3021'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3029'>3029</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3029'>Build FLTK via Clang compiler and native Windows
-      tools</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3029'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3029'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3029'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3052'>3052</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3052'>Fl_Tabs enhancement: tab scrolling when there are too
-      many tabs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3052'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3052'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3052'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3053'>3053</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3053'>Fl_Tabs enhancement - being able to move tabs
-      around</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3053'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3053'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3053'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3074'>3074</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3074'>Patch for Browser supporting copy to clipboard of
-      selected lines</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3074'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3074'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3074'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3092'>3092</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3092'>Fl_Pack: add right-to-left and bottom-to-top
-      packing</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3092'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3092'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3092'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3094'>3094</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3094'>Fl_Scroll: to control the hscrollbar by wheel of
-      mouse</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3094'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3094'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3094'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3112'>3112</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3112'>whether we should define these macros in FLTK sourse
-      files?(strdup stricmp...)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3112'>Multiple</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3112'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3112'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3126'>3126</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3126'>Image resizing algorithm</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3126'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3126'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3126'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3136'>3136</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3136'>Patch to add an option to the Fl_Native_file_Chooser
-      and Fl_File_Chooser to allow selection of either a file or a directory</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3136'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3136'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3136'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3171'>3171</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3171'>Equivalent of names.h for Fl_Table::TableContext
-      enum</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3171'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3171'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3171'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3174'>3174</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3174'>Scrollbar of deactivated Fl_Text_Editor not
-      working</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3174'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3174'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3174'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3180'>3180</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3180'>Linux printer panel, 3 problems</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3180'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3180'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3180'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3181'>3181</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3181'>3d pie chart</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3181'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3181'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3181'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3189'>3189</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3189'>Diagonal cursors from themes for Linux
-      (patch)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3189'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3189'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3189'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3193'>3193</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3193'>Change the Background Color of Checkboxes and Radio
-      Round Indicators for Deactivated Fl_Check_Buttons and Fl_Radio_Round_Buttons</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3193'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3193'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3193'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3210'>3210</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3210'>FLTK 1.3.3 indentation fixed fluid version</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3210'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3210'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3210'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3218'>3218</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3218'>method for deleting child from a Fl_Group</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3218'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3218'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3218'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3229'>3229</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3229'>X11 dual clipboard control</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3229'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3229'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3229'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3240'>3240</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3240'>Fl_Html_View - more capable replacement for
-      Fl_Help_View</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3240'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3240'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3240'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3260'>3260</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3260'>FLTK's glut and special key combinations on OS
-      X</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3260'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3260'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3260'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3279'>3279</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3279'>RFE: option to disable special character handling in
-      menus</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3279'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3279'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3279'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3317'>3317</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3317'>Fl_Sys_Menu_Bar: needs documentation caveats</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3317'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3317'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3317'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3329'>3329</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3329'>Support for tablet features (pen pressure, tilt,
-      etc)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3329'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3329'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3329'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3330'>3330</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3330'>Fl_Window transparency control in FLTK</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3330'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3330'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3330'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3393'>3393</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3393'>enable DND for Fl_Window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3393'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3393'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3393'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3426'>3426</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3426'>Fluid Browser Window: Add status bar at bottom when
-      "Show Completion Dialogs" are disabled</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3426'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3426'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3426'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3440'>3440</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3440'>Drawing bitmap text in Fl_Gl_Window is impossible in
-      macOS when initialized with FL_OPENGL3</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3440'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3440'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3440'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3456'>3456</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3456'>Fl_Input Readonly Cursor</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3456'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3456'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3456'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3466'>3466</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3466'>FLTK and 16 images</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3466'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3466'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3466'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3492'>3492</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3492'>fltk-config shouldn't report its own
-      dependencies</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3492'>Config Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3492'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3492'>RFE</a></td>
-    </tr>
-  </table>
-  <h2><a name='1.4' id="1.4">FLTK 1.4 (121 Open Features, 70 Open Bugs)</a></h2>
-  <p>FLTK 1.4 will add even more features to the FLTK 1 branch. This is the CURRENT DEVELOPMENT BRANCH where
-  new features are added and bugs are fixed.<br>
-  There is no release schedule yet.</p><br>
-  <table border='1' cellpadding='5' cellspacing='0' width='100%' summary=''>
-    <tr bgcolor='#CCCCCC'>
-      <th nowrap>STR #</th>
-      <th nowrap>Summary</th>
-      <th nowrap>Subsystem</th>
-      <th nowrap>Status</th>
-      <th nowrap>Priority</th>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1869'>1869</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1869'>avoid recursing event handlers (Fl::readqueue,
-      Fl::check)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1869'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1869'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1869'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1986'>1986</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1986'>X-server freezes when a window is opened while the
-      menu is open</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1986'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1986'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1986'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2634'>2634</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2634'>fl_help_view bug fixes and new features</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2634'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2634'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2634'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2639'>2639</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2639'>Fl_Pack resizes hidden widgets, which it doesn't touch
-      when visible.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2639'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2639'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2639'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2678'>2678</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2678'>internationalization (fluid)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2678'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2678'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2678'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2861'>2861</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2861'>Enabling "Extract gettext" on fluid menus +
-      possibility of static initialization of strings</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2861'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2861'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2861'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3231'>3231</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3231'>editor.cxx: changed_cb() inducing reading
-      uninitialized memory</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3231'>Example Programs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3231'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3231'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3238'>3238</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3238'>Fl_Group::clear method should be virtual</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3238'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3238'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3238'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3242'>3242</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3242'>Re-enable nested (aka "recursive") common
-      dialogs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3242'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3242'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3242'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3271'>3271</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3271'>Socket for MS-WINDOWS is UINT_PTR</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3271'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3271'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3271'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3284'>3284</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3284'>Cairo integration needs redesign</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3284'>Cairo</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3284'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3284'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3289'>3289</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3289'>Fl_Menu_Items don't have i18n function in them when
-      spit from fluid</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3289'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3289'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3289'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3327'>3327</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3327'>Public members Fl::awake_ring_*_ should be
-      private</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3327'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3327'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3327'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3395'>3395</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3395'>Fl_Text_Display and Fl_Text_Editor has significant
-      clipping on redraw when font sizes are changed.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3395'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3395'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3395'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3399'>3399</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3399'>X11 Drag and drop issue when displaying popup on
-      recept of payload</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3399'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3399'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3399'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3413'>3413</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3413'>security advisory: all use of *snprintf()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3413'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3413'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3413'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3436'>3436</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3436'>use of isspace(), ispunct(), and others must correctly
-      test unicode characters</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3436'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3436'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3436'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3514'>3514</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3514'>Bundled image libs on Linux are incompatible with
-      Xft</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3514'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3514'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3514'>HIGH</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L24'>24</a></td>
-      <td><a href='https://www.fltk.org/str.php?L24'>Fluid should support sub-windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L24'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L24'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L24'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1650'>1650</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1650'>relative widget image path is uncorrect if fl file not
-      saved where created</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1650'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1650'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1650'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1859'>1859</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1859'>Fluid callbacks in declaration blocks not working
-      correctly</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1859'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1859'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1859'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1919'>1919</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1919'>Fl_Tile uses resizable() interface for different
-      functionality</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1919'>None</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1919'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1919'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1993'>1993</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1993'>No redraw when dragging windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1993'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1993'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1993'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2112'>2112</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2112'>OSX: changing a window's size() affects size_range()
-      max</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2112'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2112'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2112'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2131'>2131</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2131'>test/help: The 'search window' doesn't work for text
-      within &lt;PRE&gt;</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2131'>Example Programs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2131'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2131'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2284'>2284</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2284'>Bad return value handling from "getc" in Fl_BMP_Image
-      c'tor</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2284'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2284'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2284'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2306'>2306</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2306'>fltk's use of snprintf() should be hardened --
-      recommend alternatives</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2306'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2306'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2306'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2663'>2663</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2663'>OpenGL overlay bug on Windows 7 + Intel
-      graphics</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2663'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2663'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2663'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3013'>3013</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3013'>Fixes to use of config.h header</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3013'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3013'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3013'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3287'>3287</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3287'>Potential array overrun in Fl::get_font()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3287'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3287'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3287'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3357'>3357</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3357'>fltk-1.4.x-r12117 Windows Data Types bug</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3357'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3357'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3357'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3412'>3412</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3412'>Fl_Text_Display scroll bug (style table with font !=
-      textsize() + wrap)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3412'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3412'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3412'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3415'>3415</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3415'>CMake: Programs may need some definitions from FLTK to
-      work correctly</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3415'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3415'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3415'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3416'>3416</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3416'>Changes to compile FLTK 1.4 with OpenWatcom
-      1.9</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3416'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3416'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3416'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3419'>3419</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3419'>examples/OpenGL*.cxx needs Makefile entries</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3419'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3419'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3419'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3443'>3443</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3443'>cmake/Visual Studio: control /MT vs /MD compiler
-      flags</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3443'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3443'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3443'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3454'>3454</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3454'>MinGW build errors (undefined: S_OK and
-      __FD_ISSET)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3454'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3454'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3454'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3465'>3465</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3465'>scilinux 6.3: Setting FL_SCREEN font falling back to
-      FL_HELVETICA</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3465'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3465'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3465'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3508'>3508</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3508'>fltk2ms() could be public, also does not translate
-      KP_Enter</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3508'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3508'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3508'>MOD</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L469'>469</a></td>
-      <td><a href='https://www.fltk.org/str.php?L469'>Drawing problem when FL_ROUNDED_BOX and
-      Fl_Menu_Button</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L469'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L469'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L469'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L702'>702</a></td>
-      <td><a href='https://www.fltk.org/str.php?L702'>Fl_Scrollbar increments incorrectly in specific
-      situation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L702'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L702'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L702'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L810'>810</a></td>
-      <td><a href='https://www.fltk.org/str.php?L810'>Fl_File_Chooser value(const char*) not wholly
-      functional</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L810'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L810'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L810'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1115'>1115</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1115'>Windows shown while popup menu was active disappear
-      when the menu is dismissed.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1115'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1115'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1115'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1373'>1373</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1373'>per-window vsync control</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1373'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1373'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1373'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1597'>1597</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1597'>Fl_Help_View: HTML problems with font size +
-      &lt;UL&gt;</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1597'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1597'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1597'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1679'>1679</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1679'>Borderless windows on WIN32 do not appear on the
-      taskbar</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1679'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1679'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1679'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1742'>1742</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1742'>Fl_Browser: Inconsistent behavior of value()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1742'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1742'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1742'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1860'>1860</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1860'>Would like ability to specify software rendering for
-      OpenGL contexts</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1860'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1860'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1860'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1925'>1925</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1925'>Fl_Text_Display should have a member for secondary
-      selection color</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1925'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1925'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1925'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1997'>1997</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1997'>fl_file_chooser(...) has a glitch</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1997'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1997'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1997'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2132'>2132</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2132'>Fluid's Write Code shortcut does not work</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2132'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2132'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2132'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2145'>2145</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2145'>FL_ROUND_UP_BOX+Fl_Button+"gtk+" scheme: focus box
-      draws outside widget</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2145'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2145'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2145'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2251'>2251</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2251'>Fl_Pack resize() and draw() behavior should be
-      improved</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2251'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2251'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2251'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2617'>2617</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2617'>Inconsistent behavior for Fl_Window on win32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2617'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2617'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2617'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2658'>2658</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2658'>set_fonts() comments</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2658'>Documentation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2658'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2658'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2901'>2901</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2901'>Fl_Browser format codes</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2901'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2901'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2901'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3179'>3179</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3179'>Opening a popup dialog while a menu is open hangs
-      X</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3179'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3179'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3179'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3334'>3334</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3334'>Minor bug fixes to Fl_Tabs.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3334'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3334'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3334'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3354'>3354</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3354'>v1.4: Include file discrepancy to v1.3</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3354'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3354'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3354'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3368'>3368</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3368'>Fl_Help_View may leak memory when images are in the
-      HTML</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3368'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3368'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3368'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3396'>3396</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3396'>Window manager warning: Buggy client sent a
-      _NET_ACTIVE_WINDOW message with a timestamp of 0</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3396'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3396'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3396'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3424'>3424</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3424'>X11: Fl_Window::default_cursor(FL_CURSOR_NONE)
-      iterates</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3424'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3424'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3424'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3432'>3432</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3432'>Fl_Tree with FL_TREE_SELECT_SINGLE_DRAGGABLE Drops
-      Into Wrong Place</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3432'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3432'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3432'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3433'>3433</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3433'>Add contents of Article #415 on resizing to the
-      docs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3433'>Documentation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3433'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3433'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3448'>3448</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3448'>fl_text_extents() width not correct with Xft+Pango and
-      internal italic/bold fonts</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3448'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3448'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3448'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3449'>3449</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3449'>FL_Window - New SKIP_TASKBAR Flag and Patch</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3449'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3449'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3449'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3461'>3461</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3461'>Follow up to: [RFE] STR #2927: Please make 'LEADING'
-      constant in FL_Menu.cxx an alterable API method</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3461'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3461'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3461'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3470'>3470</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3470'>In fluid code editor, cursor turns into gray box on
-      typing</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3470'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3470'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3470'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3471'>3471</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3471'>CMake improvements</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3471'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3471'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3471'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3476'>3476</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3476'>nanosvg: rendering artecfacts under certain conditions
-      (rounding?)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3476'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3476'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3476'>LOW</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L45'>45</a></td>
-      <td><a href='https://www.fltk.org/str.php?L45'>Help_View does not handle tables with border properly
-      (and more)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L45'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L45'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L45'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L214'>214</a></td>
-      <td><a href='https://www.fltk.org/str.php?L214'>function objects for callbacks.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L214'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L214'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L214'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L275'>275</a></td>
-      <td><a href='https://www.fltk.org/str.php?L275'>fl_ask, fl_alert, fl_file_chooser, fl_*
-      positioning</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L275'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L275'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L275'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L298'>298</a></td>
-      <td><a href='https://www.fltk.org/str.php?L298'>FLUID "commenting out" would be nice</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L298'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L298'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L298'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L334'>334</a></td>
-      <td><a href='https://www.fltk.org/str.php?L334'>technical change : remove statics in fl_ask</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L334'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L334'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L334'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L460'>460</a></td>
-      <td><a href='https://www.fltk.org/str.php?L460'>Provide save() member function to Fl_Image
-      subclasses</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L460'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L460'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L460'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L470'>470</a></td>
-      <td><a href='https://www.fltk.org/str.php?L470'>up / down indicator when portion of menu is off
-      screen</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L470'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L470'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L470'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L749'>749</a></td>
-      <td><a href='https://www.fltk.org/str.php?L749'>Enable a right-click copy/paste menu for all
-      Input/Output/Editor/Display widgets</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L749'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L749'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L749'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L767'>767</a></td>
-      <td><a href='https://www.fltk.org/str.php?L767'>Removeing titlebar but keeping border.(win32)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L767'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L767'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L767'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L829'>829</a></td>
-      <td><a href='https://www.fltk.org/str.php?L829'>Support for animated GIFs in Fl_GIF_Image</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L829'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L829'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L829'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L900'>900</a></td>
-      <td><a href='https://www.fltk.org/str.php?L900'>Fl::add_timeout will also consume all the time of
-      embedded low speed CPU</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L900'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L900'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L900'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1029'>1029</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1029'>Fl::font(), Fl::size(), etc. for changing
-      defaults</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1029'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1029'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1029'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1903'>1903</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1903'>Check for missing functionalities from original UTF8
-      patch</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1903'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1903'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1903'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1923'>1923</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1923'>Enhance non-modal windows on Mac OS X</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1923'>MacOS</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1923'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1923'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1981'>1981</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1981'>[PATCH] Add "stay on top"-feature to
-      Fl_Window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1981'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1981'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1981'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1984'>1984</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1984'>provide a hook to override default event
-      delivery</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1984'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1984'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1984'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1989'>1989</a></td>
-      <td><a href='https://www.fltk.org/str.php?L1989'>Support for Multiple Cursor interaction (MPX)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1989'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1989'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L1989'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2014'>2014</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2014'>Digital Mars C++ support for FLTK 1.3</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2014'>Multiple</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2014'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2014'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2022'>2022</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2022'>Deriving from Fl_Chart</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2022'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2022'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2022'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2041'>2041</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2041'>Addition of a FL_TOOLTIP event (PoC)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2041'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2041'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2041'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2059'>2059</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2059'>Support for CDash</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2059'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2059'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2059'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2060'>2060</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2060'>fluid should rewrite files conservatively on "Write
-      Code"</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2060'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2060'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2060'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2081'>2081</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2081'>add opengl 3 support to fltk</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2081'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2081'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2081'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2083'>2083</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2083'>Add maximize, minimize caps to FL_Window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2083'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2083'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2083'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2118'>2118</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2118'>Multisample support on Windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2118'>OpenGL</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2118'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2118'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2148'>2148</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2148'>Use iconv() if provided by glibc</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2148'>OS support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2148'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2148'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2154'>2154</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2154'>Support XIM on UTF-8 and GBK locale, update XIM
-      support on GB2312.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2154'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2154'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2154'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2162'>2162</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2162'>[PATCH] Wrap CJK characters in Fl_Input_</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2162'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2162'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2162'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2175'>2175</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2175'>why dose not FLTK support framebuffer
-      directly?</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2175'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2175'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2175'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2177'>2177</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2177'>Fl::add_handler() additional data parameter</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2177'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2177'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2177'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2178'>2178</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2178'>Allow Fl_X::make_xid() to call user defined
-      function</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2178'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2178'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2178'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2179'>2179</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2179'>Allow receiving events before FLTK handles
-      them</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2179'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2179'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2179'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2180'>2180</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2180'>pkg-config support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2180'>Config Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2180'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2180'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2188'>2188</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2188'>[PATCH] Support win32 accessibility via MSAA</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2188'>WIN32</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2188'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2188'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2242'>2242</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2242'>Enable usage of FLTK fonts in cairo context (patch
-      included)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2242'>Cairo</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2242'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2242'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2314'>2314</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2314'>Width option for the Fl_Menu_Item</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2314'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2314'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2314'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2338'>2338</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2338'>Propose to add a new method to Fl_Widget
-      Fl_Widget::parent_root()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2338'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2338'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2338'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2340'>2340</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2340'>Allow setting both a window icon and a mask pixmap in
-      the X11 version.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2340'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2340'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2340'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2402'>2402</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2402'>Widget Associations</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2402'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2402'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2402'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2411'>2411</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2411'>ICC Colour management policy</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2411'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2411'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2411'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2445'>2445</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2445'>Small modification to Fl_Value_Input to allow precize
-      steps with left mouse button</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2445'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2445'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2445'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2446'>2446</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2446'>Allow easy customization for special purposes</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2446'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2446'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2446'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2453'>2453</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2453'>Enable cups printing on unix platforms (include a
-      patch)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2453'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2453'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2453'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2454'>2454</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2454'>Fl_Tree: need to fix keyboard nav of *child fltk
-      widgets* added to tree</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2454'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2454'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2454'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2482'>2482</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2482'>glutKeyboardUpFunc, glutSpecialUpFunc,
-      glutLeaveMainLoop</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2482'>GLUT Emulation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2482'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2482'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2494'>2494</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2494'>Patch that adds some macros to the extra code
-      lines</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2494'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2494'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2494'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2583'>2583</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2583'>transparency for fl_draw_image()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2583'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2583'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2583'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2586'>2586</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2586'>Consolidate fluid settings into one dialog</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2586'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2586'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2586'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2609'>2609</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2609'>shape functions (fl_rectf etc.) support alpha</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2609'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2609'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2609'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2610'>2610</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2610'>Add another method for Fl_Menu_Button to allow popup
-      at specific position</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2610'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2610'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2610'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2624'>2624</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2624'>Placement of widgets be Group relative</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2624'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2624'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2624'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2633'>2633</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2633'>New methods for Fl_JPEG_Image and Fl_PNG_Image to
-      encode from Fl_Image</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2633'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2633'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2633'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2642'>2642</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2642'>Need examples and docs for how to build apps against
-      DLL version of FLTK</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2642'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2642'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2642'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2662'>2662</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2662'>Docs for "Drawing Things In FLTK" should cover
-      coordinate space of widgets vs. windows</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2662'>Documentation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2662'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2662'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2675'>2675</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2675'>Patch for a new "oxy" theme of FLTK 1.3 (with
-      gradient).</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2675'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2675'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2675'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2692'>2692</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2692'>right justify option for scroll window</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2692'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2692'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2692'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2751'>2751</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2751'>Limit input field characters in fl_ask, fl_input and
-      friends.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2751'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2751'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2751'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2752'>2752</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2752'>Allow down arrow to open input-choice drop down
-      menu</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2752'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2752'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2752'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2753'>2753</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2753'>Capture enter as click on button with focus</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2753'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2753'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2753'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2755'>2755</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2755'>Allow color change on Browser selection bar based on
-      focus</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2755'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2755'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2755'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2756'>2756</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2756'>New browser checkbox widget</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2756'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2756'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2756'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2757'>2757</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2757'>Allows shortcuts on browser items</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2757'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2757'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2757'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2762'>2762</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2762'>Ability to set icon character for fl_choice</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2762'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2762'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2762'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2763'>2763</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2763'>Full Selection Movement when using Keyboard in
-      Browser</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2763'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2763'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2763'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2766'>2766</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2766'>New configurable option to change symbol prefix
-      character</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2766'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2766'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2766'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2767'>2767</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2767'>Fix scrollbar visiblity from causing miscalcuation on
-      select()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2767'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2767'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2767'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2785'>2785</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2785'>Evalayout with FLTK one attempt</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2785'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2785'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2785'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2792'>2792</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2792'>Change of logic used on browser_ when no
-      selection</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2792'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2792'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2792'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2793'>2793</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2793'>Option to change FL_SHORTCUT logic</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2793'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2793'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2793'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2799'>2799</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2799'>Menus can suddenly disappear</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2799'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2799'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2799'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2822'>2822</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2822'>Fl_Input UTF-8 handling</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2822'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2822'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2822'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2876'>2876</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2876'>Make xft font sorting work (patch supplied)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2876'>X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2876'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2876'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2916'>2916</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2916'>Remove CMake or Autotools build system</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2916'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2916'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2916'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2951'>2951</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2951'>DoubleSlider for selecting low and high values within
-      min/max range</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2951'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2951'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2951'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2982'>2982</a></td>
-      <td><a href='https://www.fltk.org/str.php?L2982'>Cannot build outside of source tree.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2982'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2982'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L2982'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3100'>3100</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3100'>[patch] Allow printing to be disabled</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3100'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3100'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3100'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3204'>3204</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3204'>Fl_Shared_Image improvements</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3204'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3204'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3204'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3211'>3211</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3211'>Scrolling Tabs Widget</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3211'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3211'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3211'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3222'>3222</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3222'>Make the text box area of Fl_Value_Slider etc. user
-      settable</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3222'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3222'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3222'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3224'>3224</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3224'>add CMake package registry option</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3224'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3224'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3224'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3241'>3241</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3241'>Suggesting int Fl_Menu_::value(item) return -1 if item
-      is in a submenu</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3241'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3241'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3241'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3264'>3264</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3264'>The autotools build system does not build
-      FLTKConfig.cmake</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3264'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3264'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3264'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3277'>3277</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3277'>Fl_Text_Display virtual method</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3277'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3277'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3277'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3288'>3288</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3288'>Consistent configuration macros</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3288'>Config Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3288'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3288'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3296'>3296</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3296'>Improvement of bilinear scaling of images</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3296'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3296'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3296'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3297'>3297</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3297'>New implementation of Fl_Shared_Image...</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3297'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3297'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3297'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3313'>3313</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3313'>Speedup fl_read_image() for X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3313'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3313'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3313'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3314'>3314</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3314'>Make some private Fl_Tabs methods protected</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3314'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3314'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3314'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3336'>3336</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3336'>Include some example fluid files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3336'>Example Programs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3336'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3336'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3339'>3339</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3339'>fltk-config: would be nice if one could add extra libs
-      to --compile</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3339'>Config Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3339'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3339'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3350'>3350</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3350'>Some fix to handle dll multi injection and
-      ejection</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3350'>DLL/DSO</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3350'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3350'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3351'>3351</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3351'>optionally changing Fl_Choice's dropdown
-      behavior</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3351'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3351'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3351'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3355'>3355</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3355'>Support generation of UTF-8 file from FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3355'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3355'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3355'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3360'>3360</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3360'>fltk manpage improvements</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3360'>Documentation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3360'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3360'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3364'>3364</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3364'>Fl_Text_Display: wrong text width
-      calculation?</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3364'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3364'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3364'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3370'>3370</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3370'>use freedesktop.org XDG basedir-spec</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3370'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3370'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3370'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3371'>3371</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3371'>Wayland Display Server Protocol support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3371'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3371'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3371'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3372'>3372</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3372'>Vulkan API support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3372'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3372'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3372'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3379'>3379</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3379'>General documentation
-      improvements/elaborations</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3379'>Documentation</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3379'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3379'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3380'>3380</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3380'>Change FLUID codegeneration behavior for "Widget Clas"
-      with "relative" option "ON"</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3380'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3380'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3380'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3383'>3383</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3383'>Allow alpha image with
-      Fl_Image_Surface::image()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3383'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3383'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3383'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3392'>3392</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3392'>Fl::set_font() limited to italic and bold
-      fonts</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3392'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3392'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3392'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3405'>3405</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3405'>Please add more comments to
-      Fl_Native_File_Chooser_MAC.mm</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3405'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3405'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3405'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3418'>3418</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3418'>Promote current scaling factor to child
-      processes</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3418'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3418'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3418'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3442'>3442</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3442'>fluid: ^V (paste) should paste new item below current
-      selection</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3442'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3442'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3442'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3451'>3451</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3451'>Option to disable visibility on Linux</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3451'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3451'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3451'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3453'>3453</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3453'>Fl_Text_Display: Highlight current line
-      (Patch)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3453'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3453'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3453'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3460'>3460</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3460'>Small fluid annoyance bugs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3460'>FLUID</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3460'>Active</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3460'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3467'>3467</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3467'>create Fl_File_Icon from embedded image data</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3467'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3467'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3467'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3477'>3477</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3477'>add oxy scheme</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3477'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3477'>Pending</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3477'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3479'>3479</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3479'>loop bar similar to Fl_Progress</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3479'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3479'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3479'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3485'>3485</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3485'>Cumulative Patch for 1.4 addressing several
-      STR</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3485'>Multiple</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3485'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3485'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3486'>3486</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3486'>system tray functionality</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3486'>OS support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3486'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3486'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3487'>3487</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3487'>Added support for Ctrl-Shift-U to enter unicode chars
-      to input field and enhance UTF8 support.</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3487'>Unicode support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3487'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3487'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3495'>3495</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3495'>build library without dependencies on X11</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3495'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3495'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3495'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3501'>3501</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3501'>Fl_Help_View: copy text selection</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3501'>Core Library</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3501'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3501'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3504'>3504</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3504'>read Windows icon file (.ico)</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3504'>Image Support</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3504'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3504'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3505'>3505</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3505'>Add FLTK as package for the Hunter packaging
-      system</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3505'>Build Files</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3505'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3505'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3509'>3509</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3509'>Modernize FLTK: replace Porsche logo with Tesla logo
-      in"test/Pixmaps"</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3509'>Example Programs</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3509'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3509'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3510'>3510</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3510'>Fl_Native_File_Chooser_GTK not using
-      dlclose()</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3510'></a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3510'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3510'>RFE</a></td>
-    </tr>
-    <tr>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3513'>3513</a></td>
-      <td><a href='https://www.fltk.org/str.php?L3513'>Supporting Haiku</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3513'></a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3513'>New</a></td>
-      <td align='center'><a href='https://www.fltk.org/str.php?L3513'>RFE</a></td>
-    </tr>
-  </table>
-
-<!-- END OF BUG LIST -->
-
-</body>
-</html>
--- a/DoConfig/fltk/Makefile
+++ /dev/null
@@ -1,136 +1,0 @@
-#
-# "$Id$"
-#
-# Top-level makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2010 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-include makeinclude
-
-DIRS = $(IMAGEDIRS) src $(CAIRODIR) fluid test documentation
-
-all: makeinclude fltk-config
-	for dir in $(DIRS); do\
-		echo "=== making $$dir ===";\
-		(cd $$dir; $(MAKE) $(MFLAGS)) || exit 1;\
-	done
-
-install: makeinclude
-	-mkdir -p $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(bindir)/fltk-config
-	$(INSTALL_SCRIPT) fltk-config $(DESTDIR)$(bindir)
-	for dir in FL $(DIRS); do\
-		echo "=== installing $$dir ===";\
-		(cd $$dir; $(MAKE) $(MFLAGS) install) || exit 1;\
-	done
-
-install-desktop: makeinclude
-	cd documentation; $(MAKE) $(MFLAGS) $(INSTALL_DESKTOP)
-	cd fluid; $(MAKE) $(MFLAGS) $(INSTALL_DESKTOP)
-	cd test; $(MAKE) $(MFLAGS) $(INSTALL_DESKTOP)
-
-uninstall: makeinclude
-	$(RM) $(DESTDIR)$(bindir)/fltk-config
-	for dir in FL $(DIRS); do\
-		echo "=== uninstalling $$dir ===";\
-		(cd $$dir; $(MAKE) $(MFLAGS) uninstall) || exit 1;\
-	done
-
-uninstall-desktop: makeinclude
-	cd documentation; $(MAKE) $(MFLAGS) $(UNINSTALL_DESKTOP)
-	cd fluid; $(MAKE) $(MFLAGS) $(UNINSTALL_DESKTOP)
-	cd test; $(MAKE) $(MFLAGS) $(UNINSTALL_DESKTOP)
-
-depend: makeinclude
-	for dir in $(DIRS); do\
-		echo "=== making dependencies in $$dir ===";\
-		(cd $$dir; $(MAKE) $(MFLAGS) depend) || exit 1;\
-	done
-
-clean:
-	-$(RM) core *.o
-	for dir in examples $(DIRS); do\
-		echo "=== cleaning $$dir ===";\
-		(cd $$dir; $(MAKE) $(MFLAGS) clean) || exit 1;\
-	done
-
-distclean: clean
-	$(RM) config.h config.log config.status
-	$(RM) fltk-config fltk.list makeinclude
-	$(RM) fltk.spec
-	$(RM) FL/Makefile
-	$(RM) FL/abi-version.h
-	$(RM) documentation/*.$(CAT1EXT)
-	$(RM) documentation/*.$(CAT3EXT)
-	$(RM) documentation/*.$(CAT6EXT)
-	$(RM) documentation/fltk.ps
-	$(RM) -r documentation/fltk.d
-	for file in test/*.fl; do\
-		$(RM) test/`basename $$file .fl`.cxx; \
-		$(RM) test/`basename $$file .fl`.h; \
-	done
-
-fltk-config: configure configh.in fltk-config.in
-	if test -f config.status; then \
-		./config.status --recheck; \
-		./config.status; \
-	else \
-		./configure; \
-	fi
-	touch config.h
-	chmod +x fltk-config
-
-makeinclude: configure configh.in makeinclude.in config.guess config.sub
-	if test -f config.status; then \
-		./config.status --recheck; \
-		./config.status; \
-	else \
-		./configure; \
-	fi
-	touch config.h
-	chmod +x fltk-config
-
-configure: configure.ac
-	autoconf
-
-config.guess config.sub:
-	-automake --add-missing 2> /dev/null
-	if [ ! -e config.sub   ]; then echo NOTE: Using frozen copy of config.sub;   cp misc/config.sub   . ; fi
-	if [ ! -e config.guess ]; then echo NOTE: Using frozen copy of config.guess; cp misc/config.guess . ; fi
-
-portable-dist:
-	epm -v -s fltk.xpm fltk
-
-native-dist:
-	epm -v -f native fltk
-
-etags:
-	etags FL/*.H FL/*.h src/*.cxx src/*.c src/*.h src/xutf8/*.h src/xutf8/*.c cairo/*.cxx fluid/*.h fluid/*.cxx test/*.h test/*.cxx
-
-#
-# Run the clang.llvm.org static code analysis tool on the C sources.
-# (at least checker-231 is required for scan-build to work this way)
-#
-
-.PHONY: clang clang-changes
-clang:
-	$(RM) -r clang
-	scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all
-clang-changes:
-	scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
-
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/README
+++ /dev/null
@@ -1,173 +1,0 @@
-README - Fast Light Tool Kit (FLTK) Version 1.3.5
--------------------------------------------------
-
-WHAT IS FLTK?
-
-    The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-    a cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
-    Microsoft(r) Windows(r), and MacOS(r) X. FLTK provides
-    modern GUI functionality without the bloat and supports 3D
-    graphics via OpenGL(r) and its built-in GLUT emulation. It
-    was originally developed by Mr. Bill Spitzak and is
-    currently maintained by a small group of developers across
-    the world with a central repository in the US.
-
-
-LICENSING
-
-    FLTK comes with complete free source code. FLTK is available
-    under the terms of the GNU Library General Public License.
-    Contrary to popular belief, it can be used in commercial
-    software! (Even Bill Gates could use it.)
-
-
-ON-LINE DOCUMENTATION
-
-    Documentation is available online in HTML form and can be
-    downloaded as separate distribution tarballs. A PDF version of
-    this documentation is also available from the FLTK web site at:
-
-        https://www.fltk.org/documentation.php
-
-
-BUILDING AND INSTALLING FLTK UNDER UNIX AND Mac OS X
-
-    In most cases you can just type "make".  This will run
-    configure with the default (no) options and then compile
-    everything.
-
-    FLTK uses GNU autoconf to configure itself for your UNIX
-    platform. The main things that the configure script will
-    look for are the X11, OpenGL (or Mesa), and JPEG header and
-    library files.  Make sure that they are in the standard
-    include/library locations.  If they aren't you need to
-    define the CFLAGS, CXXFLAGS, and LDFLAGS environment
-    variables.
-
-    If you aren't using "gcc", "g++", "c++", or "CC" for your
-    C++ compiler, you'll also need to set the CXX environment
-    variable. Similarly, if you aren't using "gcc" or "cc" for
-    your C compiler you'll need to set the CC environment
-    variable.
-
-    You can run configure yourself to get the exact setup you
-    need. Type "./configure <options>".  Options include:
-
-	--enable-cygwin         - Enable the Cygwin libraries (WIN32)
-	--enable-debug          - Enable debugging code & symbols
-	--disable-gl            - Disable OpenGL support
-	--enable-shared         - Enable generation of shared libraries
-	--enable-threads        - Enable multithreading support
-	--enable-xdbe           - Enable the X double-buffer extension
-	--enable-xft            - Enable the Xft library (anti-aliased fonts)
-
-	--bindir=/path          - Set the location for executables
-                        	  [default = /usr/local/bin]
-	--libdir=/path          - Set the location for libraries
-                        	  [default = /usr/local/lib]
-	--includedir=/path      - Set the location for include files.
-                        	  [default = /usr/local/include]
-	--prefix=/dir           - Set the directory prefix for files
-                        	  [default = /usr/local]
-
-    When the configure script is done you can just run the
-    "make" command. This will build the library, FLUID tool, and
-    all of the test programs.
-
-    To install the library, become root and type "make
-    install".  This will copy the "fluid" executable to
-    "bindir", the header files to "includedir", and the library
-    files to "libdir".
-
-    To install additional files and icons to be used by the main
-    desktop environments such as KDE, GNOME and XFCE, you will also
-    need to run "make install-desktop" as root.
-
-
-GIT USERS
-
-    If you've just checked out a fresh copy of FLTK from Git (GitHub),
-    you'll need to generate an initial version of 'configure'
-    by running 'make makeinclude'. (We don't include a copy
-    of configure in git.)
-
-
-MAKE TARGETS
-
-    make            -- builds the library + test programs (does not install)
-    make install    -- builds and installs
-    make clean      -- clean for a rebuild
-    make distclean  -- like 'clean', but also removes docs, configure, fltk-config
-    ( cd src; make ) -- builds just the fltk libraries
-
-
-BUILDING FLTK UNDER MICROSOFT WINDOWS
-
-    There are two ways to build FLTK under Microsoft Windows.
-    The first is to use the Visual C++ project files under the
-    "ide/" directory.  See the file ide/README.IDE for more info.
-
-    The second method is to use a GNU-based development tool.
-    To build with the Cygwin or MinGW tools, use the supplied
-    configure script as specified in the UNIX section above:
-
-        sh configure ...options...
-
-
-BUILDING HTML DOCUMENTATION
-
-    If you want to build the HTML documentation:
-
-    	( cd documentation && make html )
-
-    If you want to build the PDF documentation:
-
-    	( cd documentation && make pdf )
-
-    FLTK uses doxygen for documentation, so you'll at least need doxygen
-    installed for creating html docs, and LaTeX for creating PDF docs.
-
-
-INTERNET RESOURCES
-
-    FLTK is available on the 'net in a bunch of locations:
-
-	- WWW:   https://www.fltk.org/
-	         https://www.fltk.org/str.php [for reporting bugs]
-	         https://www.fltk.org/software.php [source code]
-
-    To join the FLTK mailing list, go the following web page:
-
-        https://www.fltk.org/newsgroups.php
-
-REPORTING BUGS
-
-    To report a bug in FLTK, use the form at:
-
-        https://www.fltk.org/str.php
-
-    For general support and questions, go the following web page:
-
-        https://www.fltk.org/newsgroups.php
-
-
-TRADEMARKS
-
-    Microsoft and Windows are registered trademarks of Microsoft
-    Corporation. UNIX is a registered trademark of the X/Open
-    Group, Inc.  OpenGL is a registered trademark of Silicon
-    Graphics, Inc.  Mac OS is a registered trademark of Apple
-    Computers, Inc.
-
-
-COPYRIGHT
-
-    FLTK is copyright 1998-2019 by Bill Spitzak and others,
-    see the CREDITS file for more info.
-
-    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
-
--- a/DoConfig/fltk/README.CMake.txt
+++ /dev/null
@@ -1,401 +1,0 @@
-README.CMake.txt - Building and using FLTK with CMake
------------------------------------------------------
-
-
- CONTENTS
-==========
-
-  1	Introduction to CMake
-  2	Using CMake to Build FLTK
-    2.1   Prerequisites
-    2.2   Options
-    2.3   Building under Linux with Unix Makefiles
-    2.4   Building under Windows with MinGW using Makefiles
-    2.5   Crosscompiling
-  3	Using CMake with FLTK
-    3.1   Library Names
-    3.2   Using Fluid Files
-  4	Document History
-
-
- 1.  INTRODUCTION TO CMAKE
-===========================
-
-CMake was designed to let you create build files for a project once and
-then compile the project on multiple platforms.
-
-Using it on any platform consists of the same steps.  Create the
-CMakeLists.txt build file(s).  Run one of the CMake executables, picking
-your source directory, build directory, and build target.  The "cmake"
-executable is a one-step process with everything specified on the command
-line.  The others let you select options interactively, then configure
-and generate your platform-specific target.  You then run the resulting
-Makefile / project file / solution file as you normally would.
-
-CMake can be run in up to three ways, depending on your platform.  "cmake"
-is the basic command line tool.  "ccmake" is the curses based interactive
-tool.  "cmake-gui" is the gui-based interactive tool.  Each of these will
-take command line options in the form of -DOPTION=VALUE.  ccmake and
-cmake-gui will also let you change options interactively.
-
-CMake not only supports, but works best with out-of-tree builds.  This means
-that your build directory is not the same as your source directory or with a
-complex project, not the same as your source root directory.  Note that the
-build directory is where, in this case, FLTK will be built, not its final
-installation point.  If you want to build for multiple targets, such as
-VC++ and MinGW on Windows, or do some cross-compiling you must use out-of-tree
-builds exclusively.  In-tree builds will gum up the works by putting a
-CMakeCache.txt file in the source root.
-
-More information on CMake can be found on its web site http://www.cmake.org.
-
-
-
- 2.  Using CMake to Build FLTK
-===============================
-
-
- 2.1  Prerequisites
---------------------
-
-The prerequisites for building FLTK with CMake are staightforward:
-CMake 2.6.3 or later and a recent FLTK 1.3 release, snapshot, or subversion
-download (working copy).  Installation of CMake is covered on its web site.
-
-This howto will cover building FLTK with the default options using CMake
-under Linux and MinGW with Unix Makefiles. Chapter 2.5 shows how to use
-a MinGW cross compiling toolchain to build a FLTK library for Windows
-under Linux.  Other platforms are just as easy to use.
-
-
- 2.2  Options
---------------
-Options can be specified to cmake with the -D flag:
-
-    cmake -D <OPTION_NAME>=<OPTION_VALUE>
-
-Example:
-
-    cmake -D CMAKE_BUILD_TYPE=Debug
-
-All options have sensible defaults so you won't usually need to touch these.
-There are only two CMake options that you may want to specify:
-
-CMAKE_BUILD_TYPE
-    This specifies what kind of build this is i.e. Release, Debug...
-    Platform specific compile/link flags/options are automatically selected
-    by CMake depending on this value.
-
-CMAKE_INSTALL_PREFIX
-    Where everything will go on install.  Defaults are /usr/local for Unix
-    and C:\Program Files\FLTK for Windows.
-
-The following are the FLTK specific options.  Platform specific options
-are ignored on other platforms.
-
-OPTION_OPTIM
-   Extra optimization flags.
-
-OPTION_ARCHFLAGS
-   Extra architecture flags.
-
-OPTION_APPLE_X11 - default OFF
-   In case you want to use X11 on OSX.
-   Use this only if you know what you do, and if you have installed X11.
-
-OPTION_USE_POLL - default OFF
-   Don't use this one either.
-
-OPTION_BUILD_SHARED_LIBS - default OFF
-   Normally FLTK is built as static libraries which makes more portable
-   binaries.  If you want to use shared libraries, this will build them too.
-
-OPTION_BUILD_EXAMPLES - default ON
-   Builds the many fine example programs.
-
-OPTION_CAIRO - default OFF
-   Enables libcairo support
-
-OPTION_CAIROEXT - default OFF
-   Enables extended libcairo support
-
-OPTION_USE_GL - default ON
-   Enables OpenGL support
-
-OPTION_USE_THREADS - default ON
-   Enables multithreaded support
-
-OPTION_LARGE_FILE - default ON
-   Enables large file (>2G) support
-
-OPTION_USE_SYSTEM_LIBJPEG - default ON
-OPTION_USE_SYSTEM_ZLIB - default ON
-OPTION_USE_SYSTEM_LIBPNG - default ON
-   FLTK has built in jpeg, zlib, and png libraries.  These let you use
-   system libraries instead, unless CMake can't find them.  If you set
-   any of these options to OFF, then the built in library will be used.
-
-OPTION_USE_XINERAMA - default ON
-OPTION_USE_XFT - default ON
-OPTION_USE_XDBE - default ON
-OPTION_USE_XCURSOR - default ON
-OPTION_USE_XRENDER - default ON
-   These are X11 extended libraries.
-
-OPTION_ABI_VERSION - default EMPTY
-   Use a numeric value corresponding to the FLTK ABI version you want to
-   build in the form 1xxyy for FLTK 1.x.y (xx and yy with leading zeroes).
-   The default ABI version is 1xx00 (the stable ABI throughout all patch
-   releases of one minor FLTK version). The highest ABI version you may
-   choose is 1xxyy for FLTK 1.x.y (again with leading zeroes).
-   Please see README.abi-version.txt for more information about which
-   ABI version to select.
-
-
- 2.3  Building under Linux with Unix Makefiles
------------------------------------------------
-
-After untaring the FLTK source, go to the root of the FLTK tree and type
-the following.
-
-    mkdir build
-    cd build
-    cmake ..
-    make
-    sudo make install (optional)
-
-This will build and install a default configuration FLTK.
-
-Some flags can be changed during the 'make' command, such as:
-
-    make VERBOSE=on
-
-..which builds in verbose mode, so you can see all the compile/link commands.
-
-Hint: if you intend to build several different versions of FLTK, e.g. a Debug
-and a Release version, or multiple libraries with different ABI versions,
-then use subdirectories in the build directory, like this:
-
-    mkdir build
-    cd build
-    mkdir Debug
-    cd Debug
-    cmake ../..
-    make
-    sudo make install (optional)
-
-
- 2.4  Building under Windows with MinGW using Makefiles
---------------------------------------------------------
-
-Building with CMake under MinGW requires you to specify the CMake Generator
-with the -G command line switch. Using
-
-  cmake -G "Unix Makefiles" /path/to/fltk
-
-is recommended by the FLTK team if you have installed MinGW with the MSYS
-environment. You can use the stock Windows CMake executables, but you must
-run the CMake executables from within the MinGW environment so CMake can
-use your MinGW PATH to find the compilers and build tools. Example:
-
-  alias cmake='/c/CMake/bin/cmake'
-  alias cmake-gui='/c/CMake/bin/cmake-gui'
-
-  mkdir build
-  cd build
-  cmake -G "Unix Makefiles" ..
-
-Note the path to FLTK ".." in the last command line. Depending on where you
-installed CMake you may need to adjust the path's in the alias commands.
-
-
- 2.5  Crosscompiling
----------------------
-
-Once you have a crosscompiler going, to use CMake to build FLTK you need
-two more things.  You need a toolchain file which tells CMake where your
-build tools are.  The CMake website is a good source of information on
-this file.  Here's mine for MinGW under Linux.
-
-----
-# the name of the target operating system
-set(CMAKE_SYSTEM_NAME Windows)
-
-# which tools to use
-set(CMAKE_C_COMPILER   /usr/bin/i486-mingw32-gcc)
-set(CMAKE_CXX_COMPILER /usr/bin/i486-mingw32-g++)
-
-# here is where the target environment located
-set(CMAKE_FIND_ROOT_PATH  /usr/i486-mingw32)
-
-# adjust the default behaviour of the FIND_XXX() commands:
-# search programs in the host environment
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-# search headers and libraries in the target environment,
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-
-set(CMAKE_INSTALL_PREFIX ${CMAKE_FIND_ROOT_PATH}/usr CACHE FILEPATH
-   "install path prefix")
-----
-
-Not too tough.  The other thing you need is a native installation of FLTK
-on your build platform.  This is to supply the fluid executable which will
-compile the *.fl into C++ source and header files.
-
-So, again from the FLTK tree root.
-
-    mkdir mingw
-    cd mingw
-    cmake -DCMAKE_TOOLCHAIN_FILE=~/projects/toolchain/Toolchain-mingw32.cmake ..
-    make
-    sudo make install
-
-This will create a default configuration FLTK suitable for mingw/msys and
-install it in the /usr/i486-mingw32/usr tree.
-
-
-
- 3.  Using CMake with FLTK
-===========================
-
-The CMake Export/Import facility can be thought of as an automated
-fltk-config.  For example, if you link your program to the FLTK
-library, it will automatically link in all of its dependencies.  This
-includes any special flags, i.e. on Linux it includes the -lpthread flag.
-
-This howto assumes that you have FLTK libraries which were built using
-CMake, installed.  Building them with CMake generates some CMake helper
-files which are installed in standard locations, making FLTK easy to find
-and use.
-
-Here is a basic CMakeLists.txt file using FLTK.
-
-------
-
-cmake_minimum_required(VERSION 2.6.3)
-
-project(hello)
-
-# The following line is required only if (a) you didn't install FLTK
-# or if (b) find_package can't find your installation directory because
-# you installed FLTK in a non-standard location.  It points to
-# (a) the base folder of the build directory, or
-# (b) <fltk-install-prefix>/share/fltk
-# resp., where <fltk-install-prefix> is the installation prefix you
-# used to install FLTK.
-# (The file FLTKConfig.cmake and others must be found in that path.)
-
-set(FLTK_DIR /path/to/fltk)
-
-find_package(FLTK REQUIRED NO_MODULE)
-
-include_directories(${FLTK_INCLUDE_DIRS})
-
-add_executable(hello WIN32 hello.cxx)
-# target_include_directories(hello PUBLIC ${FLTK_INCLUDE_DIRS})
-
-target_link_libraries(hello fltk)
-
-------
-
-The set(FLTK_DIR ...) command is a superhint to the find_package command.
-This is very useful if you don't install or have a non-standard install.
-The find_package command tells CMake to find the package FLTK, REQUIRED
-means that it is an error if it's not found.  NO_MODULE tells it to search
-only for the FLTKConfig file, not using the FindFLTK.cmake supplied with
-CMake, which doesn't work with this version of FLTK.
-
-Once the package is found the CMake variable FLTK_INCLUDE_DIRS is defined
-which can be used to add the FLTK include directories to the definitions
-used to compile your program. In older CMake versions you may need to use
-`include_directories()` as shown above. In more recent CMake versions you
-can use the (commented) `target_include_directories()` command. The latter
-should be preferred (YMMV, see the CMake docs).
-
-The WIN32 in the add_executable tells your Windows compiler that this is
-a Windows GUI app.  It is ignored on other platforms and should always be
-present with FLTK GUI programs for better portability.
-
-Note: the variable ${FLTK_USE_FILE} used to include another file in
-previous FLTK versions is deprecated since FLTK 1.3.4 and will be removed
-in FLTK 1.4.0.
-
-
- 3.1  Library Names
---------------------
-
-When you use the target_link_libraries command, CMake uses its own
-internal names for libraries.  The fltk library names are:
-
-    fltk     fltk_forms     fltk_images    fltk_gl
-
-and for the shared libraries (if built):
-
-    fltk_SHARED     fltk_forms_SHARED     fltk_images_SHARED    fltk_gl_SHARED
-
-The built-in libraries (if built):
-
-    fltk_jpeg      fltk_png    fltk_z
-
-
- 3.2  Using Fluid Files
-------------------------
-
-CMake has a command named fltk_wrap_ui which helps deal with fluid *.fl
-files. Unfortunately it is broken in CMake 3.4.x. You can however use
-add_custom_command to achieve the same result.
-This is a more basic approach and should work for all CMake versions.
-
-Here is a sample CMakeLists.txt which compiles the CubeView example from
-a directory you've copied the test/Cube* files to.
-
----
-cmake_minimum_required(VERSION 2.6.3)
-
-project(CubeView)
-
-# change this to your fltk build directory
-set(FLTK_DIR /home/msurette/build/fltk-release/)
-
-find_package(FLTK REQUIRED NO_MODULE)
-include_directories(${FLTK_INCLUDE_DIRS})
-
-#run fluid -c to generate CubeViewUI.cxx and CubeViewUI.h files
-add_custom_command(
-	OUTPUT "CubeViewUI.cxx" "CubeViewUI.h"
-	COMMAND fluid -c ${CMAKE_CURRENT_SOURCE_DIR}/CubeViewUI.fl
-)
-
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-add_executable(CubeView WIN32 CubeMain.cxx CubeView.cxx CubeViewUI.cxx)
-
-target_link_libraries(CubeView fltk fltk_gl)
----
-
-You can repeat the add_custom_command for each fluid file or if you have
-a large number of them see the CMake/macros.cmake function FLTK_RUN_FLUID
-for an example of how to run it in a loop.
-
-The two lines
-
-  include_directories(${CMAKE_CURRENT_BINARY_DIR})
-  include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-
-add the current build ("binary") and source directories as include directories.
-This is necessary for the compiler to find the local header files since the
-fluid-generated files (CubeViewUI.cxx and CubeViewUI.h) are created in the
-current build directory.
-
-
- DOCUMENT HISTORY
-==================
-
-Dec 20 2010 - matt: merged and restructures
-May 15 2013 - erco: small formatting tweaks, added some examples
-Feb 23 2014 - msurette: updated to reflect changes to the CMake files
-Apr 07 2015 - AlbrechtS: update use example and more docs
-Jan 31 2016 - msurette: custom command instead of fltk_wrap_ui
-Nov 01 2016 - AlbrechtS: remove deprecated FLTK_USE_FILE, add MinGW build
--- a/DoConfig/fltk/README.Cairo.txt
+++ /dev/null
@@ -1,175 +1,0 @@
-README.Cairo.txt - 2011-12-10 - Cairo rendering support for FLTK
-----------------------------------------------------------------
-
-
-
- CONTENTS
-==========
-
- 1   INTRODUCTION
- 2   CAIRO SUPPORT FOR FLTK 1.3
-   2.1   Configuration
-   2.2   Currently supported features
-   2.3   Future considerations 
- 3   PLATFORM SPECIFIC NOTES
-   3.1  Linux
-   3.2  Windows
-   3.3  Mac OSX
- 4   DOCUMENT HISTORY
-
-
-
- INTRODUCTION
-==============
-
-Cairo is a software library used to provide a vector graphics-based, 
-device-independent API for software developers. It is designed to provide 
-primitives for 2-dimensional drawing across a number of different 
-backends. Cairo is designed to use hardware acceleration when available.
-
-
- CAIRO SUPPORT FOR FLTK 1.3
-============================
-
-It is now possible to integrate cairo rendering in your fltk application
-more easily and transparently.
-In 1.3, we provide minimum support for Cairo,
-in particular, no "total" cairo rendering layer support is achieved,
-as in fltk2.
-
-
- Configuration
----------------
-
-All the changes are *inactive* as long as the new configuration
-option --enable-cairo is not added to the configure command.
-For non configure based platforms/ide, the FLTK_HAVE_CAIRO preprocess
-variable has to be defined.
-All configure based build files have now this feature integrated,
-also vc2005 build files have 2 new build modes "Release Cairo" and 
-"Debug Cairo".
-Other IDE's will be updated progressively.
-
-
- Currently supported features
-------------------------------
-
-- Adding a new Fl_Cairo_Window class permitting transparent and easy
-integration of a Cairo draw callback without the need to achieve subclassing.
-
-- Adding a Fl::cairo_make_current(Fl_Window*) function only providing
-transparently a cairo context to your custom Fl_Window derived class.
-This function is intended to be used in your overloaded draw() method.
-
-- Adding an optional cairo autolink context mode support (disabled by default)
-  which permits complete & automatic synchronization of OS dependent graphical 
-  context and cairo contexts, thus furthering a valid cairo context anytime, 
-  in any current window. 
-  This feature should be only necessary in the following cases:
-  -  Intensive and almost systematic use of cairo contexts in an fltk application
-  -  Creation of a new cairo based scheme for fltk ...
-  -  Other uses of cairo necessitating the fltk internal instrumentation 
-     to automatically making possible the use of a cairo context 
-     in any fltk window.
-
-- A new cairo demo that is available in the test subdirectory and has been
-   used as a testcase during the multiplatform tests.
-
-For more details, please have a look to the doxygen documentation,
-in the Modules section.
-
-
- Future considerations
------------------------
-
-From Bill:
-First there is the FLTK_HAVE_CAIRO configuration option. This indicates that
-any cairo calls are available. In this case you get something like this:
-
-// static variable holding the last cairo context fltk set:
-cairo_t* Fl::cr;
-
-// Make cr draw in this window. This hides the ugly platform-dependent
-// part of getting cairo going:
-void Fl::cairo_make_current(Fl_Window*)
-
-*** POST 1.3 potential cairo use:
-// Set cr to something you made yourself. This lets you reuse functions
-// that use cr, and also tells fltk that cr is not one of its own and
-// thus cannot be destroyed or reused for a different window:
-void Fl::cairo_make_current(cairo_t*)
-
-Second there is the FLTK_USE_CAIRO configuration option. This means that all
-drawing is done using Cairo. In this case when a widget draw() method is
-called, it is exactly as though cairo_make_current(window) has been done.
-*** 
-
-Note that it should be possible to compile so FLTK_HAVE_CAIRO works even
-if FLTK_USE_CAIRO does not, and so that turning on FLTK_USE_CAIRO does not
-break any programs written for FLTK_HAVE_CAIRO.
-
-
- PLATFORM SPECIFIC NOTES
-=========================
-
-The folowing are notes about building FLTK with Cairo support
-on the various supported operating systems.
-
-    3.1 Linux
-    ---------
-
-    From Greg (erco@seriss.com):
-    To get FLTK 1.3.x (r9204) to build on Centos 5.5, I found that
-    I only needed to install the "cairo-devel" package, ie:
-    
-        sudo yum install cairo-devel
-
-    ..and then rebuild fltk:
-
-        make distclean
-	./configure --enable-cairo
-	make
-
-    If you get this error:
-
-        [..]
-	Linking cairo_test...
-	/usr/bin/ld: cannot find -lpixman-1
-	collect2: ld returned 1 exit status
-	make[1]: *** [cairo_test] Error 1
-
-    ..remove "-lpixman-1" from fltk's makeinclude file, i.e. change this line:
-
-	-CAIROLIBS      = -lcairo -lpixman-1
-	+CAIROLIBS      = -lcairo
-
-    ..then another 'make' should finish the build without errors.
-    You should be able to then run the test/cairo_test program.
-    
-    According to the cairo site, "For Debian and Debian derivatives including
-    Ubuntu" you need to install libcairo2-dev, i.e.
-
-	sudo apt-get install libcairo2-dev
-
-    This has been tested and works with Ubuntu 11.10. Note that this also
-    installs libpixman-1-dev, so that dependencies on this should be resolved
-    as well.
-
-
-    3.2 Windows
-    -----------
-    TBD
-
-
-    3.3 Mac OSX
-    -----------
-    TBD
-
-
-
- DOCUMENT HISTORY
-==================
-
-Dec 20 2010 - matt: restructured document
-Dec 09 2011 - greg: Updates for Centos 5.5 builds
-Dec 10 2011 - Albrecht: Updates for Ubuntu and Debian, fixed typos.
--- a/DoConfig/fltk/README.MSWindows.txt
+++ /dev/null
@@ -1,643 +1,0 @@
-README.MSWindows.txt - 2016-10-16 - Building FLTK under Microsoft Windows
--------------------------------------------------------------------------
-
-
-
- CONTENTS
-==========
-
-  1   INTRODUCTION
-  2   HOW TO BUILD FLTK USING MinGW/Cygwin
-    2.1   The Tools
-    2.2   Recommended Command Line Build Environment
-    2.3   Prerequisites
-    2.4   Downloading and Unpacking
-    2.5   Configuring FLTK
-    2.6   Building FLTK
-    2.7   Testing FLTK
-    2.8   Installing FLTK
-    2.9   Creating new Projects
-  3   HOW TO BUILD FLTK USING VISUAL STUDIO 2008
-    3.1   Prerequisites
-    3.2   Downloading and Unpacking
-    3.3   Configuring FLTK
-    3.4   Building FLTK
-    3.5   Testing FLTK
-    3.6   Installing FLTK
-    3.7   Creating new Projects
-  4   HOW TO BUILD FLTK USING VISUAL STUDIO 2010 OR LATER
-    4.1   Prerequisites
-    4.2   Downloading and Unpacking
-    4.3   Configuring FLTK
-    4.4   Building FLTK
-    4.5   Testing FLTK
-    4.6   Installing FLTK
-    4.7   Creating new Projects
-  5   FREQUENTLY ASKED QUESTIONS
-  7   LINKS
-  6   DOCUMENT HISTORY
-
-
- INTRODUCTION
-==============
-
-FLTK 1.3 and later is officially supported on Windows (2000,) 2003,
-XP, and later.  Older Windows versions are not officially supported,
-but may still work.  The main reason is that the OS version needs
-to support UTF-8. FLTK 1.3 is known to work on Windows Vista, Windows 7,
-Windows 8/8.1, and Windows 10.
-
-FLTK currently supports the following development
-environments on the Windows platform:
-
-    - Free Microsoft Visual C++ 2008 Express and Visual C++ 2010 Express
-      using the supplied workspace and project files. Older and the
-      commercial versions can be used as well, if they can open the project
-      files. Visual C++ 2015 Express/Community can be used with the
-      Visual C++ 2010 project files. Be sure to get your service packs!
-
-      The project files can be found in the ide/ directory.
-      Please read ide/README.IDE for more info about this.
-
-    - GNU toolsets (Cygwin or MinGW) hosted on Windows.
-
-CAUTION: Libraries built by any one of these environments can not be mixed
-with object files from any other environment!
-
-
- HOW TO BUILD FLTK USING MinGW and Cygwin
-==========================================
-
-This chapter of this document gives a brief overview of
-compiling and using FLTK with the Cygwin and MinGW compiler
-toolkits.  Both toolkits provide a build environment based
-around the GNU C/C++ compiler. Further information is
-available from the FLTK website at https://www.fltk.org, such
-as this Howto note: https://www.fltk.org/articles.php?L598
-
-The Cygwin build environment supplies a library (the Cygwin
-DLL) that is primarily intended to provide a number of
-Unix-like POSIX facilities for programs being ported to the
-Windows environment (Win32 or WinNT).  Cygwin also supplies
-a very Unix-like build environment for Windows, including
-the "BASH" Bourne-compatible shell and all of the standard
-Unix file utilities (ls, cat, grep, etc.).
-
-Cygwin is developed by Cygnus (now part of RedHat, Inc).
-Although provided for free download under the GPL,
-distributing programs that require the Cygwin DLL under a
-license other than the GPL requires a commercial license for
-the Cygwin DLL.  Native Windows programs that do not require
-the Cygwin DLL (compiled and linked with the "-mno-cygwin"
-option) may be released under any license freely.
-
-Note: Since December 2009, there is a new gcc 4.x compiler
-that doesn't support the -mno-cygwin option anymore. You
-must use the older gcc-3 compiler instead.
-
-An alternative is to install the new (since about Oct. 2010)
-mingw cross tools that support newer gcc compilers for building
-native Windows applications (like -mno-cygwin above).
-Currently you would have to install mingw64-i686-gcc-g++ for
-32-bit Windows applications (despite its name!), and/or
-mingw64-x86_64-gcc-g++ for 64-bit applications. You may also
-need to install the corresponding '-headers' packages as well.
-Currently these tools support gcc 4.5.x or newer, but the
-setup for FLTK is somewhat more complicated and not yet
-completely supported automatically (you may need to edit
-some lines in the generated makeinclude file).
-
-The MinGW distribution (Minimalist GNU for Windows) provides
-a similar toolset but geared solely towards native Windows
-development without the Unix-like POSIX library.  The lack of
-any libraries under the GPL or any other restrictive license
-means that programs built with the MinGW environment may
-always be released under any license freely. MinGW also
-supplies a Unix-like build environment for Windows,
-including MSYS (a Bourne-compatible shell) and the standard
-Unix file utilities (ls, cat, grep, etc.)
-
-If you are not familiar with these GNU-like toolkits please
-refer to the links section later in this note. In particular,
-check out their license conditions carefully before use.
-
-
- The Tools
------------
-
-There are currently three main configurations supported by
-FLTK with the GNU tools:
-
-    1. Cygwin: Built using the Cygwin toolset and using the
-       Unix-like POSIX compatibility layer provided by the
-       Cygwin DLL.
-
-    2. Cygwin using the "-mno-cygwin" option: Built using
-       the Cygwin toolset but not using the Cygwin DLL.
-
-    3. MinGW: Built using the MinGW utilities, compiler and
-       tools. This is, in many aspects, analogous to the
-       Cygwin "-mno-cygwin" option. This is the recommended
-       one if you want to build native Windows programs only.
-
-
- Recommended Command Line Build Environment
---------------------------------------------
-
-Our recommendation is to:
-
-    1. Get the current Cygwin toolset.
-
-       This can either produce executables that do or do not
-       rely on the Cygwin DLL (check licensing) at your
-       choice.
-
-    2. Get the latest MinGW toolset. It is recommended that
-       you also get the MSYS shell and the msysDTK developer
-       toolset.
-
-       This will only produce normal Windows native
-       executables without any Unix or POSIX compatibility
-       layer.
-
-
-       See the links section below for more information.
-
-Either option can generate windows-native executables and
-option 1 can provide a Unix-like POSIX portability layer that
-is reliant on a GPLed library.
-
-See the later sections for detailed information about using
-one of these configurations.
-
-
- Prerequisites
----------------
-
-In order to build FLTK from the command line, you need to install the MinGW
-environment from www.mingw.org. The graphical installer "mingw-get-inst" can
-be downloaded here for free:
-
-  http://www.mingw.org/wiki/Getting_Started
-
-Launch the installer and follow the instructions. In the "Select Components"
-dialog, add "C++ Compiler", "MSYS Basic System", and "MinGW Developer Toolkit".
-Wait for the installer to finish.
-
-After downloading and installing, you need to launch the MinGW Shell through
-the Start menu.
-
-
- Downloading and Unpacking
----------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-into your home folder. The default location as seen from MSWindows is similar
-to
-
-  C:\MinGW\msys\1.0\home\matt\
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of
-that page. Unpack FLTK into a convenient location. I like to have everything
-in my dev directory:
-
-  cd
-  mkdir dev
-  cd dev
-  tar xvfz fltk-1.3.xxxx.tar.gz
-  cd fltk-1.3.xxxx
-
-
- Configuring FLTK
-------------------
-
-If you got FLTK via git then you need one extra step. Otherwise skip
-over this part. Stay in your FLTK source-code directory and type the
-following:
-
-  NOCONFIGURE=1 ./autogen.sh
-
-Now configure your FLTK installation:
-
-  ./configure
-
-ADVANCED: type "./configure --help" to get a complete list of optional
-configuration parameters. These should be pretty self-explanatory. Some
-more details can be found in README.
-:END_ADVANCED
-
-The configuration script will check your machine for the required resources
-which should all have been part of your MinGW installation. Review the
-Configuration Summary, maybe take some notes.
-
-ADVANCED: some versions of MinGW/Msys are broken and complain about a missing
---enable-auto-import. The solution is to upgrade to the current release. If
-that is not possible, you can include the --enable-auto-import flag when
-linking:
-  ./configure <config flags> LDFLAGS=-Wl,--enable-auto-import
-:END_ADVANCED
-
-
-Known Problems:
-
-  There is a known incompatibility with some Windows git tools that
-  may not set the correct line endings for autoconf. If you get strange
-  error messages when running ./configure or make, you may need to convert
-  configh.in to "Unix line endings" (LF-only). These error messages are
-  unspecific, e.g. compilation errors like:
-
-     error: 'U32' does not name a type
-     error: 'bmibuffer' was not declared in this scope
-
-  You can fix the line endings with the MinGW/msys tool 'unix2dos' (u2d)
-  or with your favorite editor, if it allows to change the line endings,
-  then run autoconf and ./configure again.
-  For further information see this bug report:
-     https://www.fltk.org/newsgroups.php?gfltk.bugs+v:10197
-
-
- Building FLTK
----------------
-
-Now this is easy. Stay in your FLTK source-code directory and type:
-
-  make
-
-The entire FLTK toolkit including many test programs will be built for you.
-No warnings should appear.
-
-
- Testing FLTK
---------------
-
-After a successful build, you can test FLTK's capabilities:
-
-  test/demo
-
-
- Installing FLTK
------------------
-
-If you did not change any of the configuration settings, FLTK will be
-installed in "/usr/local/include" and "/usr/local/lib" by typing
-
-  make install
-
-It is possible to install FLTK in user space by changing the installation path
-to a location within the user account by adding the "--prefix=PREFIX" parameter
-to the "./configure" command.
-
-
- Creating new Projects
------------------------
-
-FLTK provides a neat script named "fltk-config" that can provide all the flags
-needed to build FLTK applications using the same flags that were used to build
-the library itself. Running "fltk-config" without arguments will print a list
-of options. The easiest call to compile an FLTK application from a single
-source file is:
-
-  fltk-config --compile myProgram.cxx
-
-"fltk-config" and "fluid" will be installed in "/usr/local/bin/" by default.
-I recommend that you add it to the command search path.
-
-
-
- HOW TO BUILD FLTK USING VISUAL STUDIO 2008
-============================================
-
-
- Prerequisites
----------------
-
-In order to build FLTK from within VisualStudio 2008, you need to install the
-VisualC developer environment from the Microsoft web site. The Express edition
-is free of charge and sufficient to develop FLTK applications:
-
-  http://www.microsoft.com/express/Downloads/
-
-You must make sure that at least VisualStudio 2008 Service Pack 1 is installed
-or building FLTK on a multicore CPU will be very painful!
-
-
- Downloading and Unpacking
----------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of
-that page.
-
-Unpack FLTK by using an appropriate unpacker and copy the new folder into a
-convenient location. I have set up a "dev" folder in my home folder for all
-my projects.
-
-
- Configuring FLTK
-------------------
-
-Launch VisualStudio. Open the project file in
-
-  ...\fltk-1.3.xxxx\ide\VisualC2008\fltk.sln
-
-Choose "Debug" or "Release" mode from the "Solution Configurations" menu.
-
-
- Building FLTK
----------------
-
-Use the context menu of the "demo" project to "Set as StartUp Project". Then
-select "Build Solution" from the "Build" menu or press F7 to build all
-libraries.
-
-VisualC 2008 has a bug that messes up building a Solution on multicore CPUs.
-Make sure that Visual Studio 2008 Service Pack 1 is installed or, as a
-workaround, set the "maximum number of parallel project builds" to 1 (Tools >
-Options > Projects and Solutions > Build and Run > maximum number of parallel
-project builds). Also, repeating the build command two or three times may
-clear unresolved reference errors.
-
-
- Testing FLTK
---------------
-
-Select "Start Debugging" from the "Debug" menu or just press F5 to run the
-Demo program. Use "Demo" to explore all test programs.
-
-
- Installing FLTK
------------------
-
-The default location for VisualC 2008 libraries and headers is here:
-
-  C:\Program Files\Microsoft Visual Studio 9.0\VC\
-
-It is possible to move the FLTK libraries, headers, and Fluid into the
-respective subdirectories, so that they are available for future development
-without adding link and include paths to the solution.
-
-  copy the entire FL directory into the include path
-
-  add all files from ide\VisualC2008\FL to the FL directory copied above
-    (this is currently only one file: abi-version.h)
-
-  copy all .lib files from the fltk lib directory to the VC lib directory
-
-  copy fluid.exe in the fluid directory to the bin directory
-
-I highly discourage using dll's (dynamically linking libraries) on MSWindows
-because they will require an installation process and likely cause version
-conflicts. Use the static .lib libraries instead.
-
-
- Creating new Projects
------------------------
-
-This chapter assumes that libraries and headers are copied into
-
-  C:\Program Files\Microsoft Visual Studio 9.0\VC\
-
-Create a new project of type "General", "Empty Project" and add a simple "C++"
-file to it. The FLTK "hello" source code is a good base.
-
-Now open the Project Properties dialog and add "Comctl32.lib" and all the FLTK
-libraries that you want to use (at least "fltk.lib") to Additional Dependencies
-(Configuration Properties > Linker > Additional Dependencies). In the same
-dialog, add "WIN32" to the C++ Preprocessor Definitions (Configuration
-Properties > C/C++ > Preprocessor > Preprocessor Definitions).
-
-Compile and run your test program with F5.
-
-You can also include .fl resources: add a new Header file to your project, but
-let the name end in .fl. Right-click and select "Open with...". Add "fluid.exe"
-from the "bin" directory and set it as the default editor.
-
-To automatically compile .fl files, open the Properties editor and set the
-Custom Build Steps to:
-
-  Command Line: fluid.exe -c $(InputPath)
-  Description: Compiling Fluid .fl file
-  Outputs: $(InputDir)$(InputName).cxx; $(InputDir)$(InputName).h
-
-Now add the generated .cxx file to your project as well. Whenever the .fl file
-is changed, the corresponding .cxx file will be recompiled.
-
-
-
- HOW TO BUILD FLTK USING VISUAL STUDIO 2010 OR LATER
-====================================================
-
-
- Prerequisites
----------------
-
-In order to build FLTK from within VisualStudio 2010 or later, you need to
-install the VisualC developer environment from the Microsoft web site. The
-Express edition is free of charge and sufficient to develop FLTK applications:
-
-  http://www.microsoft.com/express/Downloads/
-
-
- Downloading and Unpacking
----------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of
-that page.
-
-Unpack FLTK by using an appropriate unpacker and copy the new folder into a
-convenient location. I have set up a "dev" folder in my home folder for all
-my projects.
-
-
- Configuring FLTK
-------------------
-
-Launch VisualStudio. Open the project file in
-
-  .../fltk-1.3.xxxx/ide/VisualC2010/fltk.sln
-
-Choose "Debug" or "Release" mode from the "Solution Configurations" menu.
-
-
- Building FLTK
----------------
-
-Use the context menu of the "demo" project to "Set as StartUp Project". Then
-select "Build Solution" from the "Build" menu or press F7 to build all
-libraries.
-
-
- Testing FLTK
---------------
-
-Select "Start Debugging" from the "Debug" menu or just press F5 to run the
-Demo program. Use "Demo" to explore all test programs.
-
-
- Installing FLTK
------------------
-
-The default location for VisualC 2010 libraries and headers is here:
-
-  C:\Program Files\Microsoft Visual Studio 10.0\VC\
-
-It is possible to move the FLTK libraries, headers, and Fluid into the
-respective subdirectories, so that they are available for future development
-without adding link and include paths to the solution.
-
-  copy the entire FL directory into the include path
-
-  add all files from ide\VisualC2010\FL to the FL directory copied above
-    (this is currently only one file: abi-version.h)
-
-  copy all .lib files from the fltk lib directory to the VC lib directory
-
-  copy fluid.exe in the fluid directory to the bin directory
-
-I highly discourage using dll's (dynamically linking libraries) on MSWindows
-because they will require an installation process and likely cause version
-conflicts. Use the static .lib libraries instead.
-
-
- Creating new Projects
------------------------
-
-This chapter assumes that libraries and headers are copied into
-
-  C:\Program Files\Microsoft Visual Studio 10.0\VC\
-
-Create a new project of type "General", "Empty Project" and add a simple "C++"
-file to it. The FLTK "hello" source code is a good base.
-
-Now open the Project Properties dialog and add "Comctl32.lib" and all the FLTK
-libraries that you want to use (at least "fltk.lib") to Additional Dependencies
-(Configuration Properties > Linker > Additional Dependencies). In the same
-dialog, add "WIN32" to the C++ Preprocessor Definitions (Configuration
-Properties > C/C++ > Preprocessor > Preprocessor Definitions).
-
-Compile and run your test program with F5.
-
-You can also include .fl resources: add a new Header file to your project, but
-let the name end in .fl. Right-click and select "Open with...". Add "fluid.exe"
-from the "bin" directory and set it as the default editor.
-
-To automatically compile .fl files, open the Properties editor and change the
-Element Type to Custom Build and click Apply. Now set the
-Custom Build Steps to:
-
-  Command Line: fluid.exe -c %(FullPath)
-  Description: Compiling Fluid .fl file
-  Outputs: $(InputDir)$(InputName).cxx; $(InputDir)$(InputName).h
-
-Now add the generated .cxx file to your project as well. Whenever the .fl file
-is changed, the corresponding .cxx file will be recompiled.
-
-
-
- FREQUENTLY ASKED QUESTIONS
-============================
-
-
- Why does a console window appear when I run my program?
----------------------------------------------------------
-
-Windows has a flag that determines whether an application
-runs in the foreground with a console or in the background
-without a console.
-
-If you're using gcc (i.e. MinGW or Cygwin), then use the
-linker option "-mwindows" to make your application run in
-the background and "-mconsole" to run in the foreground. Use
-fltk-config --ldflags to see appropriate linker flags, or use
-fltk-config --compile to compile a single source file.
-
-If you're using MS VC++, then you must set the linker option
-"/subsystem:windows" to create a "Windows" program (w/o console
-window), or set the linker option "/subsystem:console" for a
-console program, i.e. with a console window. These options
-are set differently in the FLTK project files, depending on
-whether you select a "Debug" or "Release" build.
-
-Other compilers and build systems may have different options.
-
-Keep in mind that a windows application cannot send output
-to stdout, even if you run it from an existing console
-application.
-(Note: A special case of this exists if running a MinGW
-application from the command line of an MSYS shell, when an
-application is able to write to stdout, even if compiled with
-"-mwindows".  The same applies to Cygwin.)
-
-
- How do I get OpenGL to work?
-------------------------------
-
-Both builds should automatically support OpenGL.
-
-The configuration file config.h has a number of settings
-which control compile-time compilation.  One such setting is
-"HAVE_GL". This may be set to 0 to disable Open GL operation.
-Changing the line in config.h to
-
-    #define HAVE_GL 1
-
-will change this to compile and link in OpenGL.
-
-
-
- LINKS
-=======
-
-The following links may be of use:
-
-1. Main Cygwin homepage:
-
-       http://www.cygwin.com/
-
-2. Main Mingw homepage:
-
-       http://www.mingw.org/
-
-   In particular look for the MinGW FAQ at this link for
-   a lot of useful Mingw-native development
-   documentation.
-
-
-3. Check out the FLTK newsgroups at the FLTK homepage:
-
-       https://www.fltk.org/
-
-   Its archival search facilities are EXTREMELY useful
-   to check back through previous problems with this
-   sort of configuration before posting new questions.
-
-4. GNU Compiler Collection (GCC) compiler homepage:
-
-       http://gcc.gnu.org/
-
-5. OpenGL page - for OpenGL and GLUT libs
-
-       http://www.opengl.org/
-
-
-
- DOCUMENT HISTORY
-==================
-
-Oct 25 2010 - matt: restructured entire document and verified instructions
-Dec 20 2010 - matt: merged with README.win32
-Dec 22 2010 - AlbrechtS: added newer Cygwin (cross/mingw-w64) options
-Feb 24 2012 - AlbrechtS: clarified console window FAQ
--- a/DoConfig/fltk/README.OSX.txt
+++ /dev/null
@@ -1,484 +1,0 @@
-README.OSX.txt - 2019-01-06 - Building FLTK under macOS
--------------------------------------------------------
-
-
-
- CONTENTS
-==========
-
-  1   INTRODUCTION
-  2   HOW TO BUILD FLTK USING GCC
-    2.1   Prerequisites
-    2.2   Downloading and Unpacking
-    2.3   Configuring FLTK
-    2.4   Building FLTK
-    2.5   Testing FLTK
-    2.6   Installing FLTK
-    2.7   Creating new Projects
-  3   HOW TO BUILD FLTK USING XCODE3
-    3.1   Prerequisites
-    3.2   Downloading and Unpacking
-    3.3   Configuring FLTK
-    3.4   Building FLTK
-    3.5   Testing FLTK
-    3.6   Uninstalling previous versions of FLTK
-    3.7   Installing FLTK
-    3.8   Installing Little Helpers
-    3.9   Creating new Projects
-  4   HOW TO BUILD FLTK USING XCODE4
-    4.1   Prerequisites
-    4.2   Downloading and Unpacking
-    4.3   Configuring FLTK
-    4.4   Building FLTK
-    4.5   Testing FLTK
-    4.6   Uninstalling previous versions of FLTK
-    4.7   Installing FLTK
-  5  MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON
-  6   DOCUMENT HISTORY
-
-
- 1  INTRODUCTION
-=================
-
-FLTK supports all Mac OS X versions above 10.3 (Panther). See below for how to
-build FLTK applications that can run on all (old or recent) Mac OS X versions.
-
-FLTK currently supports the following development environments on the Apple OS X
-platform:
-
-    - gcc command line tools
-    - Xcode 3.x and higher
-
-CAUTION: gcc command line built libraries and Xcode created Frameworks should
-not be mixed!
-
-
- 2  HOW TO BUILD FLTK USING GCC
-================================
-
-
- 2.1  Prerequisites
---------------------
-
-In order to build FLTK from the command line, you need to install the Xcode
-developer environment. It can be downloaded from the Apple Store for free.
-
-After downloading and installing, you need to launch the Terminal. Terminal.app
-is located in the "Utilities" folder inside the "Applications" folder. I like
-to keep the Terminal in the Dock.
-
-
- 2.2  Downloading and Unpacking
---------------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of that
-page. Unpack FLTK into a convenient location. I like to have everything in my
-dev directory:
-
-  cd
-  mkdir dev
-  cd dev
-  mv ~/Downloads/fltk-1.3.xxxx.tar.gz .
-  tar xvfz fltk-1.3.xxxx.tar.gz
-  cd fltk-1.3.xxxx
-
-If you got FLTK via git then you need one extra step: build the
-configure script. Otherwise skip the following part marked ADVANCED:
-
-ADVANCED: (only if you got FLTK via git)
-- The preferred procedure is to build the configure script using tools
-  called autoconf and automake. If these tools are not both available
-  on your system, this post
-     https://www.fltk.org/newsgroups.php?s15486+gfltk.coredev+v15499
-  details how to get them.
-
-  Then, stay in your FLTK source-code directory and type the following:
-
-  NOCONFIGURE=1 ./autogen.sh
-
-- Alternatively, copy the configure script from the last FLTK weekly snapshot
-  to your git source-code directory.
-
-:END_ADVANCED
-
-
- 2.3  Configuring FLTK
------------------------
-
-
-Now configure your FLTK installation: stay in your FLTK source-code directory
-and type
-
-  ./configure
-
-CAVEAT: if configure sends this error message :
-   configure: error: cannot run /bin/sh ./config.sub
-type
-  make
-and interrupt the building process. Then, run ./configure again.
-:END CAVEAT
-
-ADVANCED: type "./configure --help" to get a complete list of optional
-configurations parameters. These should be pretty self-explanatory. Some
-more details can be found in README.
-
-To create multi-architecture binaries, start "configure" with these flags:
-  ./configure  --with-archflags="-arch i386 -arch x86_64"
-
-To create applications that can run under Mac OS X 10.4 and above, use these flags:
-  ./configure CXXFLAGS="-mmacosx-version-min=10.4" LDFLAGS="-mmacosx-version-min=10.4"
-
-:END_ADVANCED
-
-The configuration script will check your machine for the required resources
-which should all have been part of your Xcode installation. Review the
-Configuration Summary, maybe take some notes.
-
-
- 2.4  Building FLTK
---------------------
-
-Now this is easy. Stay in your FLTK source-code directory and type:
-
-  make
-
-The entire FLTK toolkit including many test programs will be built for you. No
-warnings should appear, but "ranlib" may complain about a few modules having no
-symbols. This is normal and can safely be ignored.
-
-
- 2.5  Testing FLTK
--------------------
-
-After a successful build, you can test FLTK's capabilities:
-
-  test/demo
-
-
- 2.6  Installing FLTK
-----------------------
-
-If you did not change any of the configuration settings, FLTK will be installed
-in "/usr/local/include" and "/usr/local/lib" by typing
-
-  sudo make install
-
-It is possible to install FLTK without superuser privileges by changing the
-installation path to a location within the user account by adding the
-"--prefix=PREFIX" parameter to the "./configure" command.
-
-
- 2.7  Creating new Projects
-----------------------------
-
-FLTK provides a neat script named "fltk-config" that can provide all the flags
-needed to build FLTK applications using the same flags that were used to build
-the library itself. Architecture flags (e.g., -arch i386) used to build the
-library, though, are not provided by the fltk-config script. This allows to
-build universal libraries and to produce applications of any architecture
-from them. Running "fltk-config" without arguments will print a list
-of options. The easiest call to compile an FLTK application from a single source
-file is:
-
-  fltk-config --compile myProgram.cxx
-
-"fltk-config" and "fluid" will be installed in "/usr/local/bin/" by default. I
-recommend that you add it to the command search path.
-
-
-
- 3  HOW TO BUILD FLTK USING XCODE3
-===================================
-
-
- 3.1  Prerequisites
---------------------
-
-In order to build FLTK from within Xcode 3, you need to have the Xcode 3
-developer environment on your computer. If you don't, go to: 'HOW TO BUILD
-FLTK USING XCODE4'
-
-
- 3.2  Downloading and Unpacking
---------------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of that
-page. You can use the SCM system that is built into Xcode.
-
-Unpack FLTK by double-clicking it and copy the new folder into a convenient
-location. I have set up a "dev" folder in my home folder for all my projects.
-
-
- 3.3  Configuring FLTK
------------------------
-
-Launch Xcode. Open the project file in
-
-  .../fltk-1.3.xxxx/ide/Xcode4/FLTK.xcodeproj
-
-Use the "Project" pulldown menu to change "Active Build Configuration" to
-"Release". Change the "Active Architecture"  as desired.
-
-
- 3.4  Building FLTK
---------------------
-
-Use the "Project" pulldown menu to set the "Active Target" to "Demo". Select
-"Build" from the "Build" menu to create all libraries and test applications.
-
-By default, the Xcode4 project builds applications that run under Mac OS X 10.5
-and above. To build applications that also run under older Mac OS versions,
-select "Edit Project Settings" of the Project menu, then select the Build panel,
-and modify the "Mac OS X Deployment Target" item.
-
-All frameworks and apps will be located in "./ide/Xcode4/build/Release/".
-
-
- 3.5  Testing FLTK
--------------------
-
-Select "Build and Run" from the "Build" menu to run the Demo program. Use "Demo"
-to explore all test programs.
-
-
- 3.6  Uninstalling previous versions of FLTK
----------------------------------------------
-
-Remove FLTK frameworks:
-
-  sudo rm -r /Library/Frameworks/fltk*.framework
-
-Remove Fluid and possibly other utilities:
-
-  sudo rm -r /Developer/Applications/Utilities/FLTK/
-
-
- 3.7  Installing FLTK
-----------------------
-
-When distributing FLTK applications, the FLTK frameworks should be made part of
-the application package. For development however, it is very convenient to have
-the Release-mode Frameworks in a standard location.
-
-For Xcode project template use, all FLTK frameworks should be copied from
-"./ide/Xcode4/build/Release/" to "/Library/Frameworks/". The FLTK header files
-for all FLTK frameworks will then be at "/Library/Frameworks/fltk.framework/
-Headers/". Add this path to the header search path of your projects.
-
-  sudo rm -f -r /Library/Frameworks/fltk*
-  sudo cp -R ide/Xcode4/build/Release/fltk*.framework /Library/Frameworks/
-
-Many FLTK applications will use Fluid, the FLTK User Interface builder, to
-generate C++ source code from .fl resource files. Add Fluid to the developer
-tools:
-
-  sudo mkdir /Developer/Applications/Utilities/FLTK/
-  sudo rm -f -r /Developer/Applications/Utilities/FLTK/fluid.app
-  sudo cp -R ide/Xcode4/build/Release/fluid.app /Developer/Applications/Utilities/FLTK/
-
-
- 3.8  Installing Little Helpers
---------------------------------
-
-
-- Project Templates:
-
-Project Templates are the quickest way to create a new FLTK application from
-within Xcode. The included project builds an FLTK based Cocoa application
-written in C++ with support for the Fluid UI designer, image reading, and
-OpenGL. Unused FLTK sub-Frameworks can simply be removed from the project.
-The template assumes that Release versions of the FLTK frameworks are installed
-in /Library/Frameworks as described above.
-
-First, we need to create the Template folder:
-
-  sudo mkdir -p /Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/
-
-Next, we copy the project template over:
-
-  sudo cp -r ide/Xcode4/Project\ Templates/* /Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/
-
-After restarting Xcode, the dialog for "File > New Project..." will offer an
-FLTK 1.3 user template which is ready to compile.
-
-
-- Fluid file handling
-
-This section assumes that a Release version of Fluid is installed in
-"/Developer/Applications/Utilities/FLTK/" as described above. It will install
-a new file type which opens Fluid as an editor for files ending in ".fl".
-
-First, we need to create the spec folder:
-
-  sudo mkdir -p /Library/Application\ Support/Developer/Shared/Xcode/Specifications/
-
-Next, we copy the Fluid specification over:
-
-  sudo cp ide/Xcode4/fluid.pbfilespec /Library/Application\ Support/Developer/Shared/Xcode/Specifications/
-
-Open Xcode preferences and select the File Types tab. Find the
-"sourcecode.fluid" entry in "file > text > sourcecode" and set the external
-editor to Fluid. When adding ".fl" files, set the File Type in the Info dialog
-to "sourcecode.fluid" and Xcode will edit your file in Fluid when
-double-clicking.
-
-
-- More
-
-TODO: Language Definition
-TODO: Build Rules
-
-
- 3.9  Creating new Projects
-----------------------------
-
-If the little helpers above were installed, the menu "File > New Project..."
-will pop up a dialog that offers a User Template named Fluid. Select it and
-follow the instructions.
-
-
-
- 4  HOW TO BUILD FLTK USING XCODE4
-===================================
-
-
- 4.1  Prerequisites
---------------------
-
-In order to build FLTK from within Xcode 4, 5, 6, 7, or 8 you need to install
-the Xcode developer environment via the Apple App Store that comes with
-Lion and up. If you also want the command line version of gcc, you can use
-the Download section in the Preferences dialog.
-
-
- 4.2  Downloading and Unpacking
---------------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your
-version, you will find the git access parameters at the bottom of that
-page. You can use the SCM system that is built into Xcode.
-
-Unpack FLTK by double-clicking it and copy the new folder into a convenient
-location. I have set up a "dev" folder in my home folder for all my projects.
-
-
- 4.3  Configuring FLTK
------------------------
-
-Launch Xcode. Open the project file in
-
-  .../fltk-1.3.xxxx/ide/Xcode4/FLTK.xcodeproj
-
-There is nothing else to configure.
-
-
- 4.4  Building FLTK
---------------------
-
-Use the "Scheme" pulldown menu to change the active target to "Demo" and
-"My Mac 32-bit" or "My Mac 64-bit". Select "Build for" -> "Running"Run" from
-the "Product" menu to create all libraries and test applications.
-
-By default, the Xcode4 project builds applications that run under Mac OS X 10.5
-and above. To build applications that also run under older Mac OS versions,
-modify the "OS X Deployment Target" item of the FLTK project build settings.
-
-All frameworks and apps will be located in a private directory. Use
-"Window"->"Organizer" to find the full path.
-
-
- 4.5  Testing FLTK
--------------------
-
-Select "Run" from the "Product" menu to run the Demo program. Use "Demo"
-to explore all test programs.
-
-
- 4.6  Uninstalling previous versions of FLTK
----------------------------------------------
-
-Remove FLTK frameworks:
-
-  sudo rm -r /Library/Frameworks/fltk*.framework
-
-Remove Fluid and possibly other utilities:
-
-  sudo rm -r /Applications/FLTK/
-
-
- 4.7  Installing FLTK
-----------------------
-
-When distributing FLTK applications, the FLTK frameworks should be made part of
-the application package. For development however, it is very convenient to have
-the Release-mode Frameworks in a standard location.
-
-For Xcode project template use, all FLTK frameworks should be built using
-"Build for Archiving" and then copied from
-"./(Organizer->Derived Data Path)/Release/" to "/Library/Frameworks/".
-The FLTK header files for all FLTK frameworks will then be at
-"/Library/Frameworks/fltk.framework/Headers/". Add this path to the header
-search path of your projects.
-
-  sudo rm -f -r /Library/Frameworks/fltk*
-  sudo cp -R (Organizer->Derived Data Path)/Release/fltk*.framework /Library/Frameworks/
-
-Many FLTK applications will use Fluid, the FLTK User Interface builder, to
-generate C++ source code from .fl resource files. Add Fluid to the developer
-tools:
-
-  sudo mkdir /Applications/FLTK/
-  sudo rm -f -r /Applications/FLTK/fluid.app
-  sudo cp -R (Organizer->Derived Data Path)/Release/fluid.app /Applications/FLTK/
-
-    (TODO: 4.8   Installing Little Helpers)
-    (TODO: 4.9   Creating new Projects)
-
-
-
-  5  MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON
-=================================================================
-- Prepare an Info.plist file for your application derived from file
-ide/Xcode4/plists/editor-Info.plist which allows any file to be dropped
-on the application icon.
-You can edit this file in Xcode and change
-Document types/Item 0/CFBundleTypeExtensions/Item 0
-from the current "*" to the desired file extension. Use several items to
-declare several extensions.
-
-- Call fl_open_callback() at the beginning of your main() function that sets
-what function will be called when a file is dropped on the application icon.
-
-- In Xcode, set the "Info.plist File" build setting of your target application
-to the Info.plist file you have prepared.
-
-- Rebuild your application.
-
-
- 6  DOCUMENT HISTORY
-=====================
-
-Oct 29 2010 - matt: removed warnings
-Oct 24 2010 - matt: restructured entire document and verified instructions
-Dec 19 2010 - Manolo: corrected typos
-Dec 29 2010 - Manolo: removed reference to AudioToolbox.framework that's no longer needed
-Feb 24 2011 - Manolo: architecture flags are not propagated to the fltk-config script.
-Apr 17 2012 - matt: added Xcode4 documentation
-Nov 13 2012 - Manolo: added "MAKE AN APPLICATION LAUNCHABLE BY DROPPING FILES ON ITS ICON"
-Apr 28 2014 - Manolo: how to build programs that run on various Mac OS X versions
-Mar 18 2015 - Manolo: removed uses of the Xcode3 project
-Apr 01 2016 - AlbrechtS: corrected typo, formatted most line breaks < 80 columns
--- a/DoConfig/fltk/README.Unix.txt
+++ /dev/null
@@ -1,450 +1,0 @@
-README.Unix.txt - 2010-11-14 - Building FLTK on Unix
------------------------------------------------------
-
-
-
- CONTENTS
-========== 
-
-  1   INTRODUCTION
-  2   PREREQUISITES
-    2.1   Ubuntu 10
-    2.2   Linux Mint 9
-    2.3   Fedora 13
-    2.4   * http://www2.mandriva.com/
-    2.5   * http://www.opensuse.org/en/
-    2.6   * http://www.debian.org/
-    2.7   * Mandrake?
-    2.8   SunOS / Solaris
-    2.9   * SGI?
-    2.10  HP-UX
-    2.11  AIX
-    2.12  NetBSD
-  3   HOW TO BUILD FLTK USING GCC
-    3.1   Prerequisites
-    3.2   Downloading and Unpacking
-    3.3   Configuring FLTK
-    3.4   Building FLTK
-    3.5   Testing FLTK
-    3.6   Installing FLTK
-    3.7   Creating new Projects
-  4   CREATING A NEW PROJECT IN CODE::BLOCKS
-  5   DOCUMENT HISTORY
-
-* TODO: we still need to write these chapters
-
-
-
- 1  INTRODUCTION
-=================
-
-FLTK currently supports the following development environments on most Unix
-platforms:
-
-    - gcc command line tools
-    - Code::Blocks
-    - ...
-    
-The Symbol font and the Zapf Dingbats font do not work on X11. This is correct
-behavior for UTF-8 platforms.
-
-
-
- 2  PREREQUISITES
-==================
-
-
- 2.1  Ubuntu 10
-----------------
-
-Ubuntu Linux can be downloaded here:
-
-  http://www.ubuntu.com/
-  
-If you have not done so yet, download and install Ubuntu.
-
-Open a shell and install some software:
-
-  sudo apt-get install g++
-  sudo apt-get install gdb
-  sudo apt-get install git
-  sudo apt-get install autoconf
-  sudo apt-get install libx11-dev
-  sudo apt-get install libglu1-mesa-dev
-  
-These two are optional, but highly recommended:  
-  
-  sudo apt-get install libasound2-dev
-  sudo apt-get install libxft-dev
-
-If you are planning to use the Code::Blocks IDE, also install this
-
-  sudo apt-get install codeblocks
-
-I like to use git to install the latest FLTK-1.3.release:
-
-  git clone https://github.com/fltk/fltk fltk-1.3
-  cd fltk-1.3
-  git checkout branch-1.3
-
-To update to the latest version, just go into the fltk-1.3 directory and type
-
-  git pull
-
-
- 2.2  Linux Mint 9
--------------------
-
-Linux Mint 9 can be downloaded here:
-
-  http://www.linuxmint.com/
-  
-If you have not done so yet, download and install Linux Mint.
-
-Open a shell and install some software:
-
-  sudo apt-get install g++
-  sudo apt-get install gdb
-  sudo apt-get install git
-  sudo apt-get install autoconf
-  sudo apt-get install libx11-dev
-  sudo apt-get install libglu1-mesa-dev
-  
-These two are optional, but highly recommended:  
-  
-  sudo apt-get install libasound2-dev
-  sudo apt-get install libxft-dev
-
-If you are planning to use the Code::Blocks IDE, also install this
-
-  sudo apt-get install codeblocks
-
-I like to use git to install the latest FLTK-1.3.release:
-
-  git clone https://github.com/fltk/fltk fltk-1.3
-  cd fltk-1.3
-  git checkout branch-1.3
-
-To update to the latest version, just go into the fltk-1.3 directory and type
-
-  git pull
-
-
- 2.3  Fedora 13
--------------------
-
-Fedora 13 Linux can be downloaded here:
-
-  http://fedoraproject.org/
-  
-If you have not done so yet, download and install Fedora.
-
-Open a terminal window and install some software. In Fedora, the default user 
-has no permission to call "sudo", so we will change user a few times:
-
-  su root
-  yum groupinstall "Development Tools"
-  yum groupinstall "X Software Development"
-  yum groupinstall "C Development Tools and Libraries"
-
-If you are planning to use the Code::Blocks IDE, also install this
-
-  yum install codeblocks.i686  (for 64 bit machines)
-
-Don't forget to leave root status (Ctrl-D) before loading FLTK. To install FLTK 
-for every user, you either have to set root user again, or use "visudo" to add 
-yourself to the "sudo" list.
-
-I like to use git to install the latest FLTK-1.3.release:
-
-  git clone https://github.com/fltk/fltk fltk-1.3
-  cd fltk-1.3
-  git checkout branch-1.3
-
-To update to the latest version, just go into the fltk-1.3 directory and type
-
-  git pull
-
-
- 2.8  SunOS / Solaris
-----------------------
-
-SunOS is a commercial operating system from Sun Microsystems (in 2009 the
-company was sold to Oracle). SunOS is also called Solaris since version 5.
-There was an open source derivative called OpenSolaris (based on Solaris 10)
-that was cancelled by Oracle. The successor in spirit is called OpenIndiana
-and can be downloaded from here:
-
-  http://www.openindiana.org/
-
-For FLTK you need at least SunOS 5.7 (aka Solaris 7). This version supports
-64 bit machines and POSIX threads. For machines with 64 bit SPARC processors
-it is highly recommended to use Sun compilers, the 64 bit code generated by
-older versions of GCC for such machines is unusable (expect something between
-horribly broken and immediate crash).
-
-Consider using pkgsrc with this operating system. See the NetBSD section if
-you want to do so.
-If you have GCC and Sun compilers installed, configure your environment like
-this to use the Sun compilers and pkgsrc graphics libraries:
-
-  export CC="cc"
-  export CXX="CC"
-  export CPPFLAGS="-I/usr/pkg/include"
-  export LDFLAGS="-L/usr/pkg/lib -R/usr/pkg/lib"
-
-To build a 64 bit FLTK library, add the following flags:
-
-  export CFLAGS="-xarch=v9"
-  export CXXFLAGS="-xarch=v9"
-
-
- 2.10  HP-UX
--------------
-
-HP-UX is a commercial operating system from HP, no free or open source
-derivatives are available.
-
-For FLTK you need at least HP-UX 11.11 and the latest patch bundles should be
-installed.
-
-Consider using pkgsrc with this operating system. See the NetBSD section if
-you want to do so.
-
-
- 2.11  AIX
------------
-
-AIX is a commercial operating system from IBM, no free or open source
-derivatives are available.
-
-For FLTK you need at least AIX 5L, I have tested version 5.1 patched to ML9.
-
-Consider using pkgsrc with this operating system. See the NetBSD section if
-you want to do so.
-
-
- 2.12  NetBSD
---------------
-
-NetBSD can be downloaded here:
-
-  http://www.netbsd.org/
-
-If you have not done so yet, download and install NetBSD. Ensure that the
-optional distribution sets "comp" (Compiler, header files, development tools)
-and x*** (X Window System) are installed.
-
-Now install and configure pkgsrc. The current version can be downloaded here:
-
-  http://www.pkgsrc.org/
-
-To use the current stable version of FLTK, simply install it from pkgsrc:
-
-  cd /usr/pkgsrc/x11/fltk13
-  bmake install
-
-For the latest development snapshot, first install the git client from pkgsrc:
-
-  cd /usr/pkgsrc/devel/git
-  bmake install
-
-Now fetch the latest FLTK source code:
-
-  git clone https://github.com/fltk/fltk fltk-1.3
-  cd fltk-1.3
-  git checkout branch-1.3
-
-To update to the latest version, just go into the fltk-1.3 directory and type
-
-  git pull
-
-If you have installed JPEG and PNG libraries from pkgsrc, configure your
-environment as follows so that the FLTK configure script can find them:
-
-  export CPPFLAGS="-I/usr/pkg/include"
-  export LDFLAGS="-L/usr/pkg/lib"
-
-To install GNU autoconf from pkgsrc:
-
-  cd /usr/pkgsrc/devel/autoconf
-  bmake install
-
-
- 3  HOW TO BUILD FLTK USING GCC
-================================
-
-
- 3.1  Downloading and Unpacking
---------------------------------
-
-Download FLTK from here:
-
-  https://www.fltk.org/software.php
-
-If you are familiar with "git" and like to stay current with your 
-version, you will find the git access parameters at the bottom of that 
-page. Unpack FLTK into a convenient location. I like to have everything in my 
-dev directory:
-
-  cd
-  mkdir dev
-  cd dev
-  mv ~/Downloads/fltk-1.3.xxxx.tar.gz .
-  tar xvfz fltk-1.3.xxxx.tar.gz
-  cd fltk-1.3.xxxx
-  
-
- 3.2  Configuring FLTK
------------------------
-
-If you got FLTK via git then you need one extra step. Otherwise skip
-over this part. Stay in your FLTK source-code directory and type the
-following:
-
-  NOCONFIGURE=1 ./autogen.sh
-
-Now configure your FLTK installation:
-
-  ./configure
-  
-ADVANCED: type "./configure --help" to get a complete list of optional 
-configuration parameters. These should be pretty self-explanatory. Some
-more details can be found in README. 
-:END_ADVANCED
-
-The configuration script will check your machine for the required resources
-which you should have installed as described in the Prerequisites chapter.
-Review the Configuration Summary, maybe take some notes.
-
-
- 3.3  Building FLTK
---------------------
-
-Now this is easy. Stay in your FLTK source-code directory and type: 
-
-  make
-
-The entire FLTK toolkit including many test programs will be built for you. No 
-warnings should appear. If some do, please let the FLTK developer team know via
-the mailing list or the bug reporting template at www.fltk.org .
-
-Actually, as of Jan. 2019, one or two warnings will show, mostly about
-deprecated declarations. Please ignore them. If you see more warnings
-(depending on the compiler you are using) please consider upgrading to
-FLTK 1.4.
-
-
- 3.4  Testing FLTK
--------------------
-
-After a successful build, you can test FLTK's capabilities:
-
-  test/demo
-
-
- 3.5  Installing FLTK
-----------------------
-
-If you did not change any of the configuration settings, FLTK will be installed 
-in "/usr/local/include" and "/usr/local/lib" by typing
-
-  sudo make install
-  
-If you are using the KDE, GNOME or XFCE desktop environments and want to call
-"fluid" from the desktop menu, you will need to install additional files and
-icons under "/usr/share" by typing:
-
-  sudo make install-desktop
-  
-It is possible to install FLTK without superuser privileges by changing the 
-installation path to a location within the user account by adding the 
-"--prefix=PREFIX" parameters to the "./configure" command.
-
-
- 3.6  Creating new Projects
-----------------------------
-
-FLTK provides a neat script named "fltk-config" that can provide all the flags
-needed to build FLTK applications using the same flags that were used to build
-the library itself. Running "fltk-config" without arguments will print a list
-of options. The easiest call to compile an FLTK application from a single
-source file is:
-
-  fltk-config --compile myProgram.cxx
-
-"fltk-config" and "fluid" will be installed in "/usr/local/bin/" by default. I
-recommend that you add it to the command search path.
-
-
-
- 4  CREATING A NEW PROJECT IN CODE::BLOCKS
-===========================================
-
-Code::Blocks is a free and popular C++ IDE in the Linux world. It also runs on
-macOS and Windows. Configured correctly, it can also cross-compile between
-these platforms. This chapter focuses on creating a new FLTK project for Linux, 
-assuming that FLTK 1.3 was previously built and installed in its default 
-location from the command line.
-
-If not done yet, install Code::Blocks as described in the Prerequisites chapter 
-above, or download it from their web site. This description is based on 
-version 10.05:
-
-  http://www.codeblocks.org/
-  
-Start Code::Blocks. Select File > New > Project. In the "New from template"
-dialog box, click on "FLTK project" and follow the instructions.
-
-The default project supports basic fltk. If you would like to add support for
-images, OpenGL, GLUT, or Forms, add the corresponding flags --use-images,
---use-gl, --use-glut, and --use-forms respectively.
-
-The flags are located in the "Project Build Options" dialog. To change the
-compiler flags, select your project in the tree view, then select the
-"Compiler Settings" tab, then "Other Options" and add the flags to
-`fltk-config --cxxflags` in front of the second "`".
-
-The linker flags are located in the "Linker Settings" tab under "Other Linker
-Options". Add the flags to `fltk-config --ldstaticflags` in front of the 
-second "`".
-
-CodeBlocks can be set up to use fluid to manage modules.
-The following info is from mingodad@gmail.com posted on fltk.general 06/17/2013:
-
-"""
-    I have these settings in codeblocks on linux:
-
-    Settings -> 
-      Compiler and debugging settings ->
-        Other settings -> 
-	  Advanced options:
-
-    -- Add an extension (in my case "fl")
-
-    -- On command line macro:
-		cd $file_dir;  fluid -c $file
-
-    -- Generated files  (to be further compiled):
-		$file_dir/$file_name.cxx
-		$file_dir/$file_name.h
-
-    Settings -> Environment -> Files extension handling :
-		Wildcard : *.fl
-		To open file: Launch an external program
-		External program: fluid
-
-    With that I can double click on any fluid file I include on a project
-    and it opens with fluid. When I press "run" or "build" codeblocks
-    calls fluid to generate the c++ files and compiles if needed.
-"""
-
-
-
- 5  DOCUMENT HISTORY
-=====================
-
-Oct 30 2010 - matt: added Code::Blocks chapter
-Oct 28 2010 - matt: restructured entire document and verified instructions
-Nov 14 2010 - duncan: added install-desktop
-Jun 17 2013 - erco: added mingodad's CodeBlocks/Fluid recommendations
--- a/DoConfig/fltk/README.abi-version.txt
+++ /dev/null
@@ -1,121 +1,0 @@
-Configuration of the ABI version for the Fast Light Toolkit (FLTK)
-------------------------------------------------------------------
-
-FLTK preserves the application binary interface (ABI) throughout
-patch versions, for instance all 1.3.x versions (x = patch version).
-
-This basically means that a program compiled and linked with FLTK 1.3.0
-can run with a FLTK shared library (fltk.dll, fltk.so.1.3.x) of a later
-FLTK version.
-
-Since FLTK 1.3.1 the FLTK team began to introduce ABI-breaking features
-wrapped in so-called ABI guards in the library code, e.g.
-
-		#if FLTK_ABI_VERSION >= 10304
-		 ... new, ABI breaking code ...
-		#else
-		 ... old, ABI preserving code ...
-		#endif
-
-In versions older than 1.3.4 the user had to edit FL/Enumerations.H, but
-since FLTK 1.3.4 the ABI version can be configured when building the
-FLTK library.
-
-Note: This documentation is written for FLTK 1.3.x. It does not apply to
-later FLTK versions. Replace the version numbers given here by the
-version numbers of the version you are using.
-
-
-How to define the FLTK ABI version
-----------------------------------
-
-To define the ABI version the preprocessor macro FL_ABI_VERSION must be
-defined as a number representing the ABI version in the form
-
-	#define FL_ABI_VERSION 1xxyy
-
-where xx and yy are the minor and patch versions, resp. with leading zeroes,
-and '1' is the major version number.
-
-The default ABI version for all FLTK 1.3.x versions is 10300 (the binary
-version of FLTK 1.3.0), but you can configure another version, e.g.
-10304 for FLTK 1.3.4 to enable the ABI features of FLTK 1.3.4 and all
-previous versions. See CHANGES file.
-
-
-Note: the now deprecated macro FLTK_ABI_VERSION has been used before
-FLTK 1.3.4. The FLTK 1.3.4 code still uses FLTK_ABI_VERSION, but since
-FLTK 1.3.4 this is identical to FL_ABI_VERSION.
-FLTK_ABI_VERSION will be removed entirely in FLTK 1.4.0.
-
-
-Depending on how you build FLTK, there are three different ways to configure
-the ABI version. The default is always the lowest version (e.g. 10300). All
-following examples are written for FLTK 1.3.4, hence we use "10304" for
-the version number.
-
-
-(1) Traditional configure + make (Unix, Linux, MinGW etc.)
-----------------------------------------------------------
-
-    Run
-	make clean
-	./configure --with-abiversion=10304
-	make
-
-    This will generate FL/abi-version.h and build FLTK as usual.
-
-    Note: you should always make sure that you compile everything from
-    scratch if you change the ABI version or any other configuration
-    options, e.g. with `make clean'.
-
-(2) CMake + make
-----------------
-
-	FLTK 1.3.4 contains experimental CMake support. This is known to be
-	incomplete, but you can use it for test builds. It "almost works"
-	in many cases, but it is not yet officially supported. Use on your
-	own risk.
-
-	Use CMake to build the Makefile's and run 'make'. To configure the
-	ABI version, use ccmake, cmake-gui, or run make with the following
-	command:
-
-		cmake -D OPTION_ABI_VERSION:STRING=10304 /path/to/fltk
-		make
-
-	You can define OPTION_ABI_VERSION to the required version number using
-	one of the graphical CMake tools.
-
-	For more information on how to use CMake with FLTK see README.CMake.txt.
-
-
-(3) Bundled IDE Projects: Visual C++ and Xcode4
------------------------------------------------
-
-	To use the bundled IDE projects with a different ABI version you need
-	to edit the supplied file abi-version.ide in the FLTK root directory.
-
-	Instructions are given in the file, just make sure that
-
-		#define FL_ABI_VERSION 10304
-
-	is used outside the comment - just replace "#undef FL_ABI_VERSION" with
-	the appropriate definition.
-
-	Then start the build process in the IDE solution of your choice. This
-	will copy the file abi-version.ide to FL/abi-version.h and run the
-	build with the defined ABI version.
-
-	Note: you should always make sure that you compile everything from
-	scratch if you change the ABI version or any other configuration
-	options, e.g. with "Clean all" or "Rebuild all" menu functions.
-
-Note on CMake:
-
-	CMake generates FL/abi-version.h in the build tree. You may run
-	'make install' to install the FLTK library including all headers in
-	the chosen installation directory, although this is not necessary.
-
-	The FLTK team recommends to use the FLTK library directly from the
-	build folder. See README.CMake.txt for more information.
--- a/DoConfig/fltk/VERSION
+++ /dev/null
@@ -1,1 +1,0 @@
-1.3.5
--- a/DoConfig/fltk/abi-version.cmake.in
+++ /dev/null
@@ -1,11 +1,0 @@
-/*
-  ABI Configuration file for the Fast Light Tool Kit (FLTK).
-
-  ============================================================================
-    DO NOT EDIT - This file is generated by CMake !
-  ============================================================================
-
-  define FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)
-*/
-
-#cmakedefine FL_ABI_VERSION @FL_ABI_VERSION@
--- a/DoConfig/fltk/abi-version.ide
+++ /dev/null
@@ -1,28 +1,0 @@
-/*
-  ABI Configuration file for the Fast Light Tool Kit (FLTK).
-
-  ============================================================================
-    Edit with care!  This source file (abi-version.ide) is used to
-    generate FL/abi-version.h by your IDE (Visual C++) build system !
-  ----------------------------------------------------------------------------
-    If you need to change the ABI configuration, edit abi-version.ide
-    in the FLTK source (root) directory and "Rebuild Solution".
-    This will copy abi-version.ide to FL/abi-version.h.
-	DO NOT edit FL/abi-version.h directly !
-  ----------------------------------------------------------------------------
-    See below for instructions how to edit abi-version.ide.
-    The default ABI version (#undef FL_ABI_VERSION) is 1.x.0 (1xx00).
-  ============================================================================
-
-  Define FL_ABI_VERSION as 1xxyy for FLTK ABI version 1.x.y.
-
-  Use leading zeroes in xx and yy - don't use a leading zero for
-  the major version number (currently 1).
-  Replace the line below (#undef FL_ABI_VERSION) with your definition.
-
-  Example:
-
-  #define FL_ABI_VERSION 10302
-*/
-
-#undef FL_ABI_VERSION
--- a/DoConfig/fltk/abi-version.in
+++ /dev/null
@@ -1,11 +1,0 @@
-/*
-  ABI Configuration file for the Fast Light Tool Kit (FLTK).
-
-  ============================================================================
-    DO NOT EDIT - This file is generated by configure !
-  ============================================================================
-
-  define FL_ABI_VERSION: 1xxyy for 1.x.y (xx,yy with leading zero)
-*/
-
-#undef FL_ABI_VERSION
--- a/DoConfig/fltk/autogen.sh
+++ /dev/null
@@ -1,16 +1,0 @@
-#! /bin/sh
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-srcdir=`cd $srcdir && pwd`
-
-ORIGDIR=`pwd`
-cd $srcdir
-
-autoconf --force || exit 1
-automake --add-missing
-if test ! -e config.sub; then echo NOTE: Using frozen copy of config.sub; cp misc/config.sub . ; fi
-if test ! -e config.guess; then echo NOTE: Using frozen copy of config.guess; cp misc/config.guess . ; fi
-cd $ORIGDIR || exit $?
-
-test -n "$NOCONFIGURE" || $srcdir/configure "$@"
--- a/DoConfig/fltk/cairo/CMakeLists.txt
+++ /dev/null
@@ -1,17 +1,0 @@
-
-include_directories(${PKG_CAIRO_INCLUDE_DIRS})
-
-# source files for cairo
-set(cairo_SRCS Fl_Cairo.cxx)
-
-#######################################################################
-FL_ADD_LIBRARY(fltk_cairo STATIC "${cairo_SRCS}")
-
-#######################################################################
-if(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
-FL_ADD_LIBRARY(fltk_cairo SHARED "${cairo_SRCS}")
-
-#######################################################################
-endif(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
--- a/DoConfig/fltk/cairo/Fl_Cairo.cxx
+++ /dev/null
@@ -1,183 +1,0 @@
-//
-// "$Id$"
-//
-// Main header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-#ifdef FLTK_HAVE_CAIRO
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#ifdef __APPLE__
-#include <Carbon/Carbon.h>
-#endif
-
-// Cairo is currently supported for the following platforms:
-// Win32, Apple Quartz, X11
-
-# if defined(USE_X11) // X11
-#  include <cairo-xlib.h>
-# elif defined(WIN32)
-#  include <cairo-win32.h>
-# elif defined(__APPLE_QUARTZ__)
-#  include <cairo-quartz.h>
-# else
-#  error Cairo is not supported on this platform.
-# endif
-
-// static Fl module initialization :
-Fl_Cairo_State Fl::cairo_state_;	///< contains all necessary info for current cairo context mapping
-
-
-// Fl cairo features implementation
-
-// Fl_Cairo_State class impl
-
-void  Fl_Cairo_State::autolink(bool b)  {
-#ifdef FLTK_USE_CAIRO
-  autolink_ = b;
-#else
-  Fl::fatal("In Fl::autolink(bool) : Cairo autolink() feature is only "
-	    "available with the enable-cairoext configure option, now quitting.");
-#endif
-}
-
-/** 
-    Provides a corresponding cairo context for window \a wi.
-    This is needed in a draw() override if Fl::cairo_autolink_context()
-    returns false, which is the default.
-    The cairo_context() does not need to be freed as it is freed every time
-    a new cairo context is created. When the program terminates,
-    a call to Fl::cairo_make_current(0) will destroy any residual context.
-    \note A new cairo context is not always re-created when this method
-    is used. In particular, if the current graphical context and the current
-    window didn't change between two calls, the previous gc is internally kept,
-    thus optimizing the drawing performances.
-    Also, after this call, Fl::cairo_cc() is adequately updated with this
-    cairo  context.
-    \note Only available when configure has the --enable-cairo option
-    \return the valid cairo_t* cairo context associated to this window.
-*/
-cairo_t * Fl::cairo_make_current(Fl_Window* wi) {
-    if (!wi) return NULL; // Precondition
-    
-    if (fl_gc==0) { // means remove current cc
-	Fl::cairo_cc(0); // destroy any previous cc
-	cairo_state_.window(0);
-	return 0;
-    }
-
-    // don't re-create a context if it's the same gc/window couple
-    if (fl_gc==Fl::cairo_state_.gc() && fl_xid(wi) == (Window) Fl::cairo_state_.window())
-	return Fl::cairo_cc();
-
-    cairo_state_.window(wi);
-
-#if defined(USE_X11)
-    return Fl::cairo_make_current(0, wi->w(), wi->h());
-#else
-    return Fl::cairo_make_current(fl_gc, wi->w(), wi->h());
-#endif
-}
-
-/* 
-    Creates transparently a cairo_surface_t object.
-    gc is an HDC context in  WIN32, a CGContext* in Quartz, and
-    a display on X11 (not used on this platform)
- */
-
-static cairo_surface_t * cairo_create_surface(void * gc, int W, int H) {
-# if defined(USE_X11)
-    return cairo_xlib_surface_create(fl_display, fl_window, fl_visual->visual, W, H);
-# elif   defined(WIN32)
-    return cairo_win32_surface_create((HDC) gc);
-# elif defined(__APPLE_QUARTZ__)
-    return cairo_quartz_surface_create_for_cg_context((CGContext*) gc, W, H);
-# else
-#  error Cairo is not supported under this platform.
-# endif
-}
-
-/** 
-  Creates a cairo context from a \a gc only, gets its window size or
-  offscreen size if fl_window is null.
-  \note Only available when configure has the --enable-cairo option
-*/
-cairo_t * Fl::cairo_make_current(void *gc) {
-    int W=0,H=0;
-#if defined(USE_X11)
-    //FIXME X11 get W,H
-    // gc will be the window handle here
-# warning FIXME get W,H for cairo_make_current(void*)
-#elif defined(__APPLE_QUARTZ__) 
-    if (fl_window) {
-      W = Fl_Window::current()->w();
-      H = Fl_Window::current()->h();
-    }
-    else {
-      W = CGBitmapContextGetHeight(fl_gc);
-      H = CGBitmapContextGetHeight(fl_gc);
-    }
-#elif defined(WIN32)
-    // we don't need any W,H for WIN32
-#else
-# error Cairo is not supported on this platform.
-#endif
-    if (!gc) {
-	Fl::cairo_cc(0);
-	cairo_state_.gc(0); // keep track for next time
-	return 0;
-    }
-    if (gc==Fl::cairo_state_.gc() && 
-	fl_window== (Window) Fl::cairo_state_.window() && 
-	cairo_state_.cc()!=0)
-	return Fl::cairo_cc();
-    cairo_state_.gc(fl_gc); // keep track for next time
-    cairo_surface_t * s = cairo_create_surface(gc, W, H);
-    cairo_t * c = cairo_create(s);
-    cairo_surface_destroy(s);
-    cairo_state_.cc(c);
-    return c;
-}
-
-/** 
-   Creates a cairo context from a \a gc and its size 
-   \note Only available when configure has the --enable-cairo option
-*/
-cairo_t * Fl::cairo_make_current(void *gc, int W, int H) {
-    if (gc==Fl::cairo_state_.gc() && 
-	fl_window== (Window) Fl::cairo_state_.window() &&
-	cairo_state_.cc()!=0) // no need to create a cc, just return that one
-	return cairo_state_.cc(); 
-
-    // we need to (re-)create a fresh cc ...
-    cairo_state_.gc(gc); // keep track for next time
-    cairo_surface_t * s = cairo_create_surface(gc, W, H);
-    cairo_t * c = cairo_create(s);
-    cairo_state_.cc(c); //  and purge any previously owned context
-    cairo_surface_destroy(s);
-    return c;
-}
-#else
-// just don't leave the libfltk_cairo lib empty to avoid warnings
-#include <FL/Fl_Export.H>
-FL_EXPORT int fltk_cairo_dummy() { return 1;}
-#endif // FLTK_HAVE_CAIRO
-
-//
-// End of "$Id$" .
-//
--- a/DoConfig/fltk/cairo/Makefile
+++ /dev/null
@@ -1,174 +1,0 @@
-#
-# "$Id: Makefile 5667 2007-02-07 02:35:44Z mike $"
-#
-# CAIRO library makefile for the Fast Light Toolkit (FLTK).
-#
-# Copyright 1997-2009 by Easy Software Products.
-#
-# 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:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-# Note:	see ../configure.in and/or ../makeinclude for definition of
-#	FL_VERSION (x.y.z), FL_ABI_VERSION (x.y.0), and FL_DSO_VERSION (x.y)
-
-FLTKFLAGS = -DFL_LIBRARY
-include ../makeinclude
-
-#
-# Object files...
-#
-CAIROCPPFILES   = Fl_Cairo.cxx
-CAIROOBJECTS	= $(CAIROCPPFILES:.cxx=.o)
-
-#
-# Make all of the targets...
-#
-
-all:	$(CAIROLIBNAME) $(CAIRODSONAME)
-
-$(CAIROLIBNAME): $(CAIROOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(CAIROOBJECTS)
-	$(RANLIB) $@
-
-libfltk_cairo.so.$(FL_DSO_VERSION): $(CAIROOBJECTS) ../src/libfltk.so.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(CAIROOBJECTS) -L../src -lfltk $(CAIROLIBS)
-	$(RM) libfltk_cairo.so
-	$(LN) $(CAIRODSONAME) libfltk_cairo.so
-
-libfltk_cairo.sl.$(FL_DSO_VERSION): $(CAIROOBJECTS) ../src/libfltk.sl.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(CAIROOBJECTS) -L../src -lfltk $(CAIROLIBS)
-	$(RM) libfltk_cairo.sl
-	$(LN) libfltk_cairo.sl.$(FL_DSO_VERSION) libfltk_cairo.sl
-
-libfltk_cairo.$(FL_DSO_VERSION).dylib: $(CAIROOBJECTS) ../src/libfltk.$(FL_DSO_VERSION).dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version $(FL_VERSION) \
-		-compatibility_version $(FL_ABI_VERSION) \
-		$(CAIROOBJECTS)  -L../src $(LDLIBS) $(CAIROLIBS) -lfltk
-	$(RM) libfltk_cairo.dylib
-	$(LN) libfltk_cairo.$(FL_DSO_VERSION).dylib libfltk_cairo.dylib
-
-libfltk_cairo_s.a: $(CAIROOBJECTS)
-	echo $(DSOCOMMAND) libfltk_cairo_s.o ...
-	$(DSOCOMMAND) libfltk_cairo_s.o $(CAIROOBJECTS)
-	echo $(LIBCOMMAND) libfltk_cairo_s.a src/libfltk_cairo_s.o
-	$(RM) $@
-	$(LIBCOMMAND) src/libfltk_cairo_s.a src/libfltk_cairo_s.o
-	$(CHMOD) +x src/libfltk_cairo_s.a
-
-
-cygfltknox_cairo-$(FL_DSO_VERSION).dll: $(CAIROLIBNAME) ../src/cygfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(CAIROLIBNAME) ...
-	$(DSOCOMMAND) $(CAIROLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_cairo.dll.a \
-		-L../src -lfltk $(CAIROLIBS) $(LDLIBS)
-
-mgwfltknox_cairo-$(FL_DSO_VERSION).dll: $(CAIROLIBNAME) ../src/mgwfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(CAIROLIBNAME) ...
-	$(DSOCOMMAND) $(CAIROLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_cairo.dll.a \
-		-L../src -lfltk $(CAIROLIBS) $(LDLIBS)
-
-#
-# Clean all of the targets and object files...
-#
-
-clean:
-	-$(RM) *.o *.dll.a core.* *~ *.bak *.bck
-	-$(RM) $(CAIROOBJECTS)  $(CAIROLIBNAME) $(CAIRODSONAME) \
-		libfltk_cairo.so src/libfltk_cairo.sl  src/libfltk_cairo.dylib
-
-#
-# Install everything...
-#
-
-install: $(CAIROLIBNAME) $(CAIRODSONAME)
-	echo "Installing libfltk_cairo$(LIBEXT) in $(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(CAIROLIBNAME) $(DESTDIR)$(libdir)
-
-	if test x$(CAIRODSONAME) = xlibfltk_cairo.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.so*;\
-		$(INSTALL_LIB) libfltk_cairo.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_cairo.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_cairo.so;\
-	fi
-	if test x$(CAIRODSONAME) = xsrc/libfltk_cairo.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.sl*;\
-		$(INSTALL_LIB) libfltk_cairo.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_cairo.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_cairo.sl;\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.*dylib;\
-		$(INSTALL_LIB) libfltk_cairo.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_cairo.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir)/libfltk_cairo.dylib;\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo_s.a;\
-		$(INSTALL_LIB) libfltk_cairo_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(CAIRODSONAME) = xcygfltknox_cairo-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
-		$(INSTALL_LIB) $(CAIRODSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
-		$(INSTALL_LIB) libfltk_cairo.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(CAIRODSONAME) = xmgwfltknox_cairo-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
-		$(INSTALL_LIB) $(CAIRODSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
-		$(INSTALL_LIB) libfltk_cairo.dll.a $(DESTDIR)$(libdir); \
-	fi
-#
-# Uninstall everything...
-#
-
-uninstall:
-	echo "Uninstalling libfltk_cairo$(LIBEXT) in $(libdir)..."
-	if test x$(CAIROLIBNAME) != x; then\
-		$(RM) $(DESTDIR)$(libdir)/$(CAIROLIBNAME);\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.so*;\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.sl*;\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.*dylib;\
-	fi
-	if test x$(CAIRODSONAME) = xlibfltk_cairo_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo_s.a;\
-	fi
-	if test x$(CAIRODSONAME) = xcygfltknox_cairo-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
-	fi
-	if test x$(CAIRODSONAME) = xmgwfltknox_cairo-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
-	fi
-
-$(CAIROOBJECTS):	../makeinclude
-
-depend: $(CAIROCPPFILES)
-	makedepend -Y -I.. -f makedepend $(CAIROCPPFILES)
-
-include makedepend
-
-#
-# End of "$Id: Makefile 5667 2007-02-07 02:35:44Z mike $".
-#
--- a/DoConfig/fltk/cairo/makedepend
+++ /dev/null
@@ -1,3 +1,0 @@
-# DO NOT DELETE
-
-Fl_Cairo.o: ../config.h ../FL/Fl_Export.H
--- a/DoConfig/fltk/config.guess
+++ /dev/null
@@ -1,1480 +1,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
-
-timestamp='2018-02-24'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Options:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > "$dummy.c" ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "$UNAME_SYSTEM" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval "$set_cc_for_build"
-	cat <<-EOF > "$dummy.c"
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
-
-	# If ldd exists, use it to detect musl libc.
-	if command -v ldd >/dev/null && \
-		ldd --version 2>&1 | grep -q ^musl
-	then
-	    LIBC=musl
-	fi
-	;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-	    "/sbin/$sysctl" 2>/dev/null || \
-	    "/usr/sbin/$sysctl" 2>/dev/null || \
-	    echo unknown)`
-	case "$UNAME_MACHINE_ARCH" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    earmv*)
-		arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-		endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
-		machine="${arch}${endian}"-unknown
-		;;
-	    *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently (or will in the future) and ABI.
-	case "$UNAME_MACHINE_ARCH" in
-	    earm*)
-		os=netbsdelf
-		;;
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval "$set_cc_for_build"
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# Determine ABI tags.
-	case "$UNAME_MACHINE_ARCH" in
-	    earm*)
-		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-		abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "$UNAME_VERSION" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "$machine-${os}${release}${abi}"
-	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
-	exit ;;
-    *:LibertyBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-	echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
-	exit ;;
-    *:MidnightBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
-	exit ;;
-    *:SolidBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
-	exit ;;
-    *:MirBSD:*:*)
-	echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
-	exit ;;
-    *:Sortix:*:*)
-	echo "$UNAME_MACHINE"-unknown-sortix
-	exit ;;
-    *:Redox:*:*)
-	echo "$UNAME_MACHINE"-unknown-redox
-	exit ;;
-    mips:OSF1:*.*)
-        echo mips-dec-osf1
-        exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE=alpha ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE=alpha ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE=alpha ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE=alphaev5 ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE=alphaev56 ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE=alphapca56 ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE=alphapca57 ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE=alphaev6 ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE=alphaev67 ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE=alphaev69 ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE=alphaev7 ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE=alphaev79 ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo "$UNAME_MACHINE"-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix"$UNAME_RELEASE"
-	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux"$UNAME_RELEASE"
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval "$set_cc_for_build"
-	SUN_ARCH=i386
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH=x86_64
-	    fi
-	fi
-	echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos"$UNAME_RELEASE"
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos"$UNAME_RELEASE"
-		;;
-	    sun4)
-		echo sparc-sun-sunos"$UNAME_RELEASE"
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos"$UNAME_RELEASE"
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint"$UNAME_RELEASE"
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint"$UNAME_RELEASE"
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint"$UNAME_RELEASE"
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint"$UNAME_RELEASE"
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten"$UNAME_RELEASE"
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten"$UNAME_RELEASE"
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix"$UNAME_RELEASE"
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix"$UNAME_RELEASE"
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix"$UNAME_RELEASE"
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
-	  dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos"$UNAME_RELEASE"
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
-	then
-	    if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
-	       [ "$TARGET_BINARY_INTERFACE"x = x ]
-	    then
-		echo m88k-dg-dgux"$UNAME_RELEASE"
-	    else
-		echo m88k-dg-dguxbcs"$UNAME_RELEASE"
-	    fi
-	else
-	    echo i586-dg-dgux"$UNAME_RELEASE"
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
-	fi
-	echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval "$set_cc_for_build"
-		sed 's/^		//' << EOF > "$dummy.c"
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/lslpp ] ; then
-		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
-			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
-	else
-		IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
-	fi
-	echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	case "$UNAME_MACHINE" in
-	    9000/31?)            HP_ARCH=m68000 ;;
-	    9000/[34]??)         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "$sc_cpu_version" in
-		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "$sc_kernel_bits" in
-			  32) HP_ARCH=hppa2.0n ;;
-			  64) HP_ARCH=hppa2.0w ;;
-			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "$HP_ARCH" = "" ]; then
-		    eval "$set_cc_for_build"
-		    sed 's/^		//' << EOF > "$dummy.c"
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ "$HP_ARCH" = hppa2.0w ]
-	then
-	    eval "$set_cc_for_build"
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH=hppa2.0w
-	    else
-		HP_ARCH=hppa64
-	    fi
-	fi
-	echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux"$HPUX_REV"
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo "$UNAME_MACHINE"-unknown-osf1mk
-	else
-	    echo "$UNAME_MACHINE"-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi"$UNAME_RELEASE"
-	exit ;;
-    *:BSD/OS:*:*)
-	echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case "$UNAME_PROCESSOR" in
-	    amd64)
-		UNAME_PROCESSOR=x86_64 ;;
-	    i386)
-		UNAME_PROCESSOR=i586 ;;
-	esac
-	echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-	exit ;;
-    i*:CYGWIN*:*)
-	echo "$UNAME_MACHINE"-pc-cygwin
-	exit ;;
-    *:MINGW64*:*)
-	echo "$UNAME_MACHINE"-pc-mingw64
-	exit ;;
-    *:MINGW*:*)
-	echo "$UNAME_MACHINE"-pc-mingw32
-	exit ;;
-    *:MSYS*:*)
-	echo "$UNAME_MACHINE"-pc-msys
-	exit ;;
-    i*:PW*:*)
-	echo "$UNAME_MACHINE"-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case "$UNAME_MACHINE" in
-	    x86)
-		echo i586-pc-interix"$UNAME_RELEASE"
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix"$UNAME_RELEASE"
-		exit ;;
-	    IA64)
-		echo ia64-unknown-interix"$UNAME_RELEASE"
-		exit ;;
-	esac ;;
-    i*:UWIN*:*)
-	echo "$UNAME_MACHINE"-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
-	exit ;;
-    i*86:Minix:*:*)
-	echo "$UNAME_MACHINE"-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    arm*:Linux:*:*)
-	eval "$set_cc_for_build"
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
-	    else
-		echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    cris:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-	exit ;;
-    crisv32:Linux:*:*)
-	echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-	exit ;;
-    e2k:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    frv:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    hexagon:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    i*86:Linux:*:*)
-	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	exit ;;
-    ia64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    k1om:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    m32r*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    m68*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval "$set_cc_for_build"
-	sed 's/^	//' << EOF > "$dummy.c"
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
-	test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
-	;;
-    mips64el:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-"$LIBC"
-	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-"$LIBC"
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-"$LIBC"
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
-	  PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
-	  *)    echo hppa-unknown-linux-"$LIBC" ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-"$LIBC"
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-"$LIBC"
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-"$LIBC"
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-"$LIBC"
-	exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
-	exit ;;
-    sh64*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    sh*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    tile*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    vax:Linux:*:*)
-	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
-	exit ;;
-    x86_64:Linux:*:*)
-	if objdump -f /bin/sh | grep -q elf32-x86-64; then
-	    echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
-	else
-	    echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	fi
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo "$UNAME_MACHINE"-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo "$UNAME_MACHINE"-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo "$UNAME_MACHINE"-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo "$UNAME_MACHINE"-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
-    i*86:*DOS:*:*)
-	echo "$UNAME_MACHINE"-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:*)
-	UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
-	else
-		echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
-	else
-		echo "$UNAME_MACHINE"-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configure will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos"$UNAME_RELEASE"
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv"$UNAME_RELEASE"
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo "$UNAME_MACHINE"-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo "$UNAME_MACHINE"-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux"$UNAME_RELEASE"
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv"$UNAME_RELEASE"
-	else
-		echo mips-unknown-sysv"$UNAME_RELEASE"
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    SX-ACE:SUPER-UX:*:*)
-	echo sxace-nec-superux"$UNAME_RELEASE"
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody"$UNAME_RELEASE"
-	exit ;;
-    *:Rhapsody:*:*)
-	echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval "$set_cc_for_build"
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_PPC >/dev/null
-		then
-		    UNAME_PROCESSOR=powerpc
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = x86; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-*:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSR-*:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSV-*:NONSTOP_KERNEL:*:*)
-	echo nsv-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    NSX-*:NONSTOP_KERNEL:*:*)
-	echo nsx-tandem-nsk"$UNAME_RELEASE"
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = 386; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo "$UNAME_MACHINE"-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux"$UNAME_RELEASE"
-	exit ;;
-    *:DragonFly:*:*)
-	echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "$UNAME_MACHINE" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
-	exit ;;
-    i*86:rdos:*:*)
-	echo "$UNAME_MACHINE"-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo "$UNAME_MACHINE"-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo "$UNAME_MACHINE"-unknown-esx
-	exit ;;
-    amd64:Isilon\ OneFS:*:*)
-	echo x86_64-unknown-onefs
-	exit ;;
-esac
-
-echo "$0: unable to guess system type" >&2
-
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
-    mips:Linux | mips64:Linux)
-	# If we got here on MIPS GNU/Linux, output extra information.
-	cat >&2 <<EOF
-
-NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
-the system type. Please install a C compiler and try again.
-EOF
-	;;
-esac
-
-cat >&2 <<EOF
-
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite *all*
-copies of config.guess and config.sub with the latest versions from:
-
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-and
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = "$UNAME_MACHINE"
-UNAME_RELEASE = "$UNAME_RELEASE"
-UNAME_SYSTEM  = "$UNAME_SYSTEM"
-UNAME_VERSION = "$UNAME_VERSION"
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
--- a/DoConfig/fltk/config.sub
+++ /dev/null
@@ -1,1801 +1,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2018 Free Software Foundation, Inc.
-
-timestamp='2018-02-22'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
-
-Canonicalize a configuration name.
-
-Options:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2018 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo "$1"
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
-    if [ "$basic_machine" != "$1" ]
-    then os=`echo "$1" | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| ba \
-	| be32 | be64 \
-	| bfin \
-	| c4x | c8051 | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| e2k | epiphany \
-	| fido | fr30 | frv | ft32 \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia16 | ia64 \
-	| ip2k | iq2000 \
-	| k1om \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
-	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pru \
-	| pyramid \
-	| riscv32 | riscv64 \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| visium \
-	| wasm32 \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| ba-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| e2k-* | elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| k1om-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| or1k*-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pru-* \
-	| pyramid-* \
-	| riscv32-* | riscv64-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| visium-* \
-	| wasm32-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-pc
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	asmjs)
-		basic_machine=asmjs-unknown
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2*)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	e500v[12])
-		basic_machine=powerpc-unknown
-		os=$os"spe"
-		;;
-	e500v[12]-*)
-		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		os=$os"spe"
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze*)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
-	mingw32)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i686-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next)
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	nsv-tandem)
-		basic_machine=nsv-tandem
-		;;
-	nsx-tandem)
-		basic_machine=nsx-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	x64)
-		basic_machine=x86_64-pc
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases that might get confused
-	# with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# es1800 is here to avoid being matched by es* (a different OS)
-	-es1800*)
-		os=-ose
-		;;
-	# Now accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST end in a * to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* | -cloudabi* | -sortix* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
-	      | -midnightbsd*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -xray | -os68k* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo "$os" | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2)
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-pikeos*)
-		# Until real need of OS specific support for
-		# particular features comes up, bare metal
-		# configurations are quite functional.
-		case $basic_machine in
-		    arm*)
-			os=-eabi
-			;;
-		    *)
-			os=-elf
-			;;
-		esac
-		;;
-	-nacl*)
-		;;
-	-ios)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	pru-*)
-		os=-elf
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next)
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo "$basic_machine$os"
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
--- a/DoConfig/fltk/configh.cmake.in
+++ /dev/null
@@ -1,341 +1,0 @@
-/* @CONFIG_H@.  Generated from @CONFIG_H_IN@ by CMake.  */
-/*
- * "$Id$"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Where to find files...
- */
-
-#define FLTK_DATADIR "@PREFIX_DATA@"
-#define FLTK_DOCDIR "@PREFIX_DOC@"
-
-/*
- * BORDER_WIDTH:
- *
- * Thickness of FL_UP_BOX and FL_DOWN_BOX.  Current 1,2, and 3 are
- * supported.
- *
- * 3 is the historic FLTK look.
- * 2 is the default and looks like Microsoft Windows, KDE, and Qt.
- * 1 is a plausible future evolution...
- *
- * Note that this may be simulated at runtime by redefining the boxtypes
- * using Fl::set_boxtype().
- */
-
-#define BORDER_WIDTH 2
-
-/*
- * HAVE_GL:
- *
- * Do you have OpenGL? Set this to 0 if you don't have or plan to use
- * OpenGL, and FLTK will be smaller.
- */
-
-#cmakedefine01 HAVE_GL
-
-/*
- * HAVE_GL_GLU_H:
- *
- * Do you have the OpenGL Utility Library header file?
- * (many broken Mesa RPMs do not...)
- */
-
-#cmakedefine01 HAVE_GL_GLU_H
-
-/*
- * HAVE_GLXGETPROCADDRESSARB:
- *
- * Do you have the OpenGL glXGetProcAddressARB() function?
- */
-
-#cmakedefine HAVE_GLXGETPROCADDRESSARB 1
-
-/*
- * USE_COLORMAP:
- *
- * Setting this to zero will save a good deal of code (especially for
- * fl_draw_image), but FLTK will only work on TrueColor visuals.
- */
-
-#define USE_COLORMAP 1
-
-/*
- * HAVE_XINERAMA
- *
- * Do we have the Xinerama library to support multi-head displays?
- */
-
-#cmakedefine01 HAVE_XINERAMA
-
-/*
- * USE_XFT
- *
- * Use the new Xft library to draw anti-aliased text.
- */
-
-#cmakedefine01 USE_XFT
-
-/*
- * HAVE_XDBE:
- *
- * Do we have the X double-buffer extension?
- */
-
-#cmakedefine01 HAVE_XDBE
-
-/*
- * USE_XDBE:
- *
- * Actually try to use the double-buffer extension?
- */
-
-#define USE_XDBE HAVE_XDBE
-
-/*
- * HAVE_XFIXES:
- *
- * Do we have the X fixes extension?
- */
-
-#cmakedefine01 HAVE_XFIXES
-
-/*
- * HAVE_XCURSOR:
- *
- * Do we have the X cursor library?
- */
-
-#cmakedefine01 HAVE_XCURSOR
-
-/*
- * HAVE_XRENDER:
- *
- * Do we have the X render library?
- */
-
-#cmakedefine01 HAVE_XRENDER
-
-/*
- * HAVE_X11_XREGION_H:
- *
- * Do we have the X11 Xregion.h header file ?
- */
-
-#cmakedefine01 HAVE_X11_XREGION_H
-
-/*
- * __APPLE_QUARTZ__:
- *
- * All Apple implementations are now based on Quartz and Cocoa,
- * so this flag should always be on for Mac OS X. This flag has
- * no meaning on operating systems other than Mac OS X.
- */
-
-#cmakedefine __APPLE_QUARTZ__ 1
-
-
-/*
- * USE_X11
- *
- * Should we use X11 for the current platform
- *
- */
-
-#cmakedefine USE_X11 1
-
-/*
- * HAVE_OVERLAY:
- *
- * Use the X overlay extension?  FLTK will try to use an overlay
- * visual for Fl_Overlay_Window, the Gl_Window overlay, and for the
- * menus.  Setting this to zero will remove a substantial amount of
- * code from FLTK.  Overlays have only been tested on SGI servers!
- */
-
-#define HAVE_OVERLAY 0
-
-/*
- * HAVE_GL_OVERLAY:
- *
- * It is possible your GL has an overlay even if X does not.  If so,
- * set this to 1.
- */
-
-#define HAVE_GL_OVERLAY HAVE_OVERLAY
-
-/*
- * WORDS_BIGENDIAN:
- *
- * Byte order of your machine: 1 = big-endian, 0 = little-endian.
- */
-
-#ifdef __APPLE__
-#include <mac_endianness.h>
-#else
-#cmakedefine01 WORDS_BIGENDIAN
-#endif
-
-/*
- * U16, U32, U64:
- *
- * Types used by fl_draw_image.  One of U32 or U64 must be defined.
- * U16 is optional but FLTK will work better with it!
- */
-
-#cmakedefine U16 @U16@
-#cmakedefine U32 @U32@
-#cmakedefine U64 @U64@
-
-/*
- * HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H,
- * HAVE_SCANDIR, HAVE_SCANDIR_POSIX:
- *
- * Where is <dirent.h> (used only by fl_file_chooser and scandir).
- */
-
-#cmakedefine HAVE_DIRENT_H 1
-#cmakedefine HAVE_SYS_NDIR_H 1
-#cmakedefine HAVE_SYS_DIR_H 1
-#cmakedefine HAVE_NDIR_H 1
-#cmakedefine HAVE_SCANDIR 1
-#cmakedefine HAVE_SCANDIR_POSIX 1
-
-/*
- * Possibly missing sprintf-style functions:
- */
-
-#cmakedefine HAVE_VSNPRINTF 1
-#cmakedefine HAVE_SNPRINTF 1
-
-/*
- * String functions and headers...
- */
-
-#cmakedefine HAVE_STRINGS_H 1
-#cmakedefine HAVE_STRCASECMP 1
-#cmakedefine HAVE_STRLCAT 1
-#cmakedefine HAVE_STRLCPY 1
-
-/*
- * Do we have POSIX locale support?
- */
-
-#cmakedefine HAVE_LOCALE_H 1
-#cmakedefine HAVE_LOCALECONV 1
-
-/*
- * HAVE_SYS_SELECT_H:
- *
- * Whether or not select() call has its own header file.
- */
-
-#cmakedefine01 HAVE_SYS_SELECT_H
-
-/*
- * HAVE_SYS_STDTYPES_H:
- *
- * Whether or not we have the <sys/stdtypes.h> header file.
- */
-
-#cmakedefine HAVE_SYS_STDTYPES_H 1
-
-/*
- * USE_POLL:
- *
- * Use the poll() call provided on Linux and Irix instead of select()
- */
-
-#cmakedefine01 USE_POLL
-
-/*
- * Do we have various image libraries?
- */
-
-#cmakedefine HAVE_LIBPNG 1
-#cmakedefine HAVE_LIBZ 1
-#cmakedefine HAVE_LIBJPEG 1
-
-/*
- * FLTK_USE_CAIRO
- *
- * Do we have the cairo library available and want extended cairo use in FLTK ?
- * This implies to link cairo.lib in all FLTK based apps.
- */
-
-#cmakedefine FLTK_USE_CAIRO 1
-
-/*
- * FLTK_HAVE_CAIRO
- *
- * Do we have the cairo library available?
- */
-
-#cmakedefine FLTK_HAVE_CAIRO 1
-
-/*
- * Which header file do we include for libpng?
- */
-
-#cmakedefine HAVE_PNG_H 1
-#cmakedefine HAVE_LIBPNG_PNG_H 1
-
-/*
- * Do we have the png_xyz() functions?
- */
-
-#cmakedefine HAVE_PNG_GET_VALID 1
-#cmakedefine HAVE_PNG_SET_TRNS_TO_ALPHA 1
-
-/*
- * Do we have POSIX threading?
- */
-
-#cmakedefine HAVE_PTHREAD 1
-#cmakedefine HAVE_PTHREAD_H 1
-
-/*
- * Do we have the ALSA library?
- */
-
-#cmakedefine HAVE_ALSA_ASOUNDLIB_H 1
-
-/*
- * Do we have the long long type?
- */
-
-#cmakedefine HAVE_LONG_LONG 1
-
-#ifdef HAVE_LONG_LONG
-#  define FLTK_LLFMT	"%lld"
-#  define FLTK_LLCAST	(long long)
-#else
-#  define FLTK_LLFMT	"%ld"
-#  define FLTK_LLCAST	(long)
-#endif /* HAVE_LONG_LONG */
-
-/*
- * Do we have the dlsym() function and header?
- */
-
-#cmakedefine01 HAVE_DLFCN_H
-#cmakedefine01 HAVE_DLSYM
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/configh.in
+++ /dev/null
@@ -1,340 +1,0 @@
-/*
- * "$Id$"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Where to find files...
- */
-
-#define FLTK_DATADIR ""
-#define FLTK_DOCDIR ""
-
-/*
- * BORDER_WIDTH:
- *
- * Thickness of FL_UP_BOX and FL_DOWN_BOX.  Current 1,2, and 3 are
- * supported.
- *
- * 3 is the historic FLTK look.
- * 2 is the default and looks like Microsoft Windows, KDE, and Qt.
- * 1 is a plausible future evolution...
- *
- * Note that this may be simulated at runtime by redefining the boxtypes
- * using Fl::set_boxtype().
- */
-
-#define BORDER_WIDTH 2
-
-/*
- * HAVE_GL:
- *
- * Do you have OpenGL? Set this to 0 if you don't have or plan to use
- * OpenGL, and FLTK will be smaller.
- */
-
-#define HAVE_GL 0
-
-/*
- * HAVE_GL_GLU_H:
- *
- * Do you have the OpenGL Utility Library header file?
- * (many broken Mesa RPMs do not...)
- */
-
-#define HAVE_GL_GLU_H 0
-
-/*
- * HAVE_GLXGETPROCADDRESSARB:
- *
- * Do you have the OpenGL glXGetProcAddressARB() function?
- */
-
-#undef HAVE_GLXGETPROCADDRESSARB
-
-/*
- * USE_COLORMAP:
- *
- * Setting this to zero will save a good deal of code (especially for
- * fl_draw_image), but FLTK will only work on TrueColor visuals.
- */
-
-#define USE_COLORMAP 1
-
-/*
- * HAVE_XINERAMA
- *
- * Do we have the Xinerama library to support multi-head displays?
- */
-
-#define HAVE_XINERAMA 0
-
-/*
- * USE_XFT
- *
- * Use the new Xft library to draw anti-aliased text.
- */
-
-#define USE_XFT 0
-
-/*
- * HAVE_XDBE:
- *
- * Do we have the X double-buffer extension?
- */
-
-#define HAVE_XDBE 0
-
-/*
- * USE_XDBE:
- *
- * Actually try to use the double-buffer extension?
- */
-
-#define USE_XDBE HAVE_XDBE
-
-/*
- * HAVE_XFIXES:
- *
- * Do we have the X fixes extension?
- */
-
-#define HAVE_XFIXES 0
-
-/*
- * HAVE_XCURSOR:
- *
- * Do we have the X cursor library?
- */
-
-#define HAVE_XCURSOR 0
-
-/*
- * HAVE_XRENDER:
- *
- * Do we have the X render library?
- */
-
-#define HAVE_XRENDER 0
-
-/*
- * HAVE_X11_XREGION_H:
- *
- * Do we have the X11 Xregion.h header file ?
- */
-
-#define HAVE_X11_XREGION_H 0
-
-/*
- * __APPLE_QUARTZ__:
- *
- * All Apple implementations are now based on Quartz and Cocoa,
- * so this flag should always be on for Mac OS X. This flag has
- * no meaning on operating systems other than Mac OS X.
- */
-
-#undef __APPLE_QUARTZ__
-
-
-/*
- * USE_X11
- *
- * Should we use X11 for the current platform
- *
- */
-
-#undef USE_X11
-
-/*
- * HAVE_OVERLAY:
- *
- * Use the X overlay extension?  FLTK will try to use an overlay
- * visual for Fl_Overlay_Window, the Gl_Window overlay, and for the
- * menus.  Setting this to zero will remove a substantial amount of
- * code from FLTK.  Overlays have only been tested on SGI servers!
- */
-
-#define HAVE_OVERLAY 0
-
-/*
- * HAVE_GL_OVERLAY:
- *
- * It is possible your GL has an overlay even if X does not.  If so,
- * set this to 1.
- */
-
-#define HAVE_GL_OVERLAY HAVE_OVERLAY
-
-/*
- * WORDS_BIGENDIAN:
- *
- * Byte order of your machine: 1 = big-endian, 0 = little-endian.
- */
-
-#ifdef __APPLE__
-#include <mac_endianness.h>
-#else
-#define WORDS_BIGENDIAN 0
-#endif
-
-/*
- * U16, U32, U64:
- *
- * Types used by fl_draw_image.  One of U32 or U64 must be defined.
- * U16 is optional but FLTK will work better with it!
- */
-
-#undef U16
-#undef U32
-#undef U64
-
-/*
- * HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H,
- * HAVE_SCANDIR, HAVE_SCANDIR_POSIX:
- *
- * Where is <dirent.h> (used only by fl_file_chooser and scandir).
- */
-
-#undef HAVE_DIRENT_H
-#undef HAVE_SYS_NDIR_H
-#undef HAVE_SYS_DIR_H
-#undef HAVE_NDIR_H
-#undef HAVE_SCANDIR
-#undef HAVE_SCANDIR_POSIX
-
-/*
- * Possibly missing sprintf-style functions:
- */
-
-#undef HAVE_VSNPRINTF
-#undef HAVE_SNPRINTF
-
-/*
- * String functions and headers...
- */
-
-#undef HAVE_STRINGS_H
-#undef HAVE_STRCASECMP
-#undef HAVE_STRLCAT
-#undef HAVE_STRLCPY
-
-/*
- * Do we have POSIX locale support?
- */
-
-#undef HAVE_LOCALE_H
-#undef HAVE_LOCALECONV
-
-/*
- * HAVE_SYS_SELECT_H:
- *
- * Whether or not select() call has its own header file.
- */
-
-#define HAVE_SYS_SELECT_H 0
-
-/*
- * HAVE_SYS_STDTYPES_H:
- *
- * Whether or not we have the <sys/stdtypes.h> header file.
- */
-
-#undef HAVE_SYS_STDTYPES_H
-
-/*
- * USE_POLL:
- *
- * Use the poll() call provided on Linux and Irix instead of select()
- */
-
-#define USE_POLL 0
-
-/*
- * Do we have various image libraries?
- */
-
-#undef HAVE_LIBPNG
-#undef HAVE_LIBZ
-#undef HAVE_LIBJPEG
-
-/*
- * FLTK_USE_CAIRO
- *
- * Do we have the cairo library available and want extended cairo use in FLTK ?
- * This implies to link cairo.lib in all FLTK based apps.
- */
-
-#undef FLTK_USE_CAIRO
-
-/*
- * FLTK_HAVE_CAIRO
- *
- * Do we have the cairo library available?
- */
-
-#undef FLTK_HAVE_CAIRO
-
-/*
- * Which header file do we include for libpng?
- */
-
-#undef HAVE_PNG_H
-#undef HAVE_LIBPNG_PNG_H
-
-/*
- * Do we have the png_xyz() functions?
- */
-
-#undef HAVE_PNG_GET_VALID
-#undef HAVE_PNG_SET_TRNS_TO_ALPHA
-
-/*
- * Do we have POSIX threading?
- */
-
-#undef HAVE_PTHREAD
-#undef HAVE_PTHREAD_H
-
-/*
- * Do we have the ALSA library?
- */
-
-#undef HAVE_ALSA_ASOUNDLIB_H
-
-/*
- * Do we have the long long type?
- */
-
-#undef HAVE_LONG_LONG
-
-#ifdef HAVE_LONG_LONG
-#  define FLTK_LLFMT	"%lld"
-#  define FLTK_LLCAST	(long long)
-#else
-#  define FLTK_LLFMT	"%ld"
-#  define FLTK_LLCAST	(long)
-#endif /* HAVE_LONG_LONG */
-
-/*
- * Do we have the dlsym() function and header?
- */
-
-#define HAVE_DLFCN_H 0
-#define HAVE_DLSYM 0
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/configure
+++ /dev/null
@@ -1,10072 +1,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-	 /*)
-	   for as_base in sh bash ksh sh5; do
-	     # Try only shells that exist, to save several forks.
-	     as_shell=$as_dir/$as_base
-	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-	   done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="src/Fl.cxx"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-BINARY_DIR
-MAKEDEPEND
-CAT6EXT
-CAT3EXT
-CAT1EXT
-USEMMFILES
-UNINSTALL_DESKTOP
-INSTALL_DESKTOP
-THREADS
-OSX_ONLY
-HLINKS
-GLLIB
-XPROP
-FTCONFIG
-PKGCONFIG
-X_EXTRA_LIBS
-X_LIBS
-X_PRE_LIBS
-X_CFLAGS
-XMKMF
-PTHREAD_FLAGS
-ZLIBINC
-ZLIB
-PNGINC
-PNG
-JPEGINC
-JPEG
-STATICIMAGELIBS
-IMAGELIBS
-AUDIOLIBS
-LARGEFILE
-EGREP
-GREP
-CPP
-RC
-LIBCOMMAND
-AR
-RANLIB
-DOXYDOC
-GROFF
-NROFF
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-FLUID
-LINKSHARED
-SHAREDSUFFIX
-CAIRODSONAME
-IMGDSONAME
-GLDSONAME
-FLDSONAME
-DSONAME
-DSOLINK
-DSOFLAGS
-DSOCOMMAND
-CAIROLIBBASENAME
-IMGLIBBASENAME
-GLLIBBASENAME
-FLLIBBASENAME
-LIBBASENAME
-LINKFLTKIMG
-LINKFLTKGL
-LINKFLTKFORMS
-LINKFLTK
-LIBNAME
-LIBEXT
-CAIROLIBNAME
-IMGLIBNAME
-GLLIBNAME
-GLDEMOS
-FLLIBNAME
-FLTKCAIROOPTION
-LINKFLTKCAIRO
-CAIROLIBS
-CAIROFLAGS
-CAIRODIR
-OPTIM
-ARCHFLAGS
-FL_VERSION
-FL_ABI_VERSION
-FL_DSO_VERSION
-FL_PATCH_VERSION
-FL_MINOR_VERSION
-FL_MAJOR_VERSION
-ac_ct_CXX
-CXXFLAGS
-CXX
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-runstatedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_cygwin
-enable_x11
-enable_cairoext
-enable_cairo
-with_abiversion
-enable_debug
-enable_cp936
-enable_gl
-enable_shared
-enable_threads
-with_optim
-with_archflags
-enable_largefile
-enable_localjpeg
-enable_localzlib
-enable_localpng
-with_links
-with_x
-enable_xinerama
-enable_xft
-enable_xdbe
-enable_xfixes
-enable_xcursor
-enable_xrender
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CXX
-CXXFLAGS
-CCC
-CPP
-XMKMF'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-runstatedir='${localstatedir}/run'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -runstatedir | --runstatedir | --runstatedi | --runstated \
-  | --runstate | --runstat | --runsta | --runst | --runs \
-  | --run | --ru | --r)
-    ac_prev=runstatedir ;;
-  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
-  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
-  | --run=* | --ru=* | --r=*)
-    runstatedir=$ac_optarg ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-	 ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
-		datadir sysconfdir sharedstatedir localstatedir includedir \
-		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir runstatedir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_myself" : 'X\(//\)[^/]' \| \
-	 X"$as_myself" : 'X\(//\)$' \| \
-	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-	pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-X features:
-  --x-includes=DIR    X include files are in DIR
-  --x-libraries=DIR   X library files are in DIR
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-cygwin         use the Cygwin libraries [default=no]
-  --enable-x11            with Cygwin or Mac OS, use X11 [default=no]
-  --enable-cairoext       use fltk code instrumentation for cairo extended use [default=no]
-  --enable-cairo          use lib Cairo [default=no]
-  --enable-debug          turn on debugging [default=no]
-  --enable-cp936          turn on CP936 [default=no]
-  --enable-gl             turn on OpenGL support [default=yes]
-  --enable-shared         turn on shared libraries [default=no]
-  --enable-threads        enable multi-threading support [default=yes]
-  --disable-largefile     omit support for large files
-  --enable-localjpeg      use local JPEG library [default=auto]
-  --enable-localzlib      use local ZLIB library [default=auto]
-  --enable-localpng       use local PNG library  [default=auto]
-  --enable-xinerama       turn on Xinerama support [default=yes]
-  --enable-xft            turn on Xft support [default=yes]
-  --enable-xdbe           turn on Xdbe support [default=yes]
-  --enable-xfixes         turn on Xfixes support [default=yes]
-  --enable-xcursor        turn on Xcursor support [default=yes]
-  --enable-xrender        turn on Xrender support [default=yes]
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-abiversion       Build with FL_ABI_VERSION, e.g. 10304 for FLTK 1.3.4
-  --with-optim="flags"    use custom optimization flags
-  --with-archflags="flags"
-			  use custom architecture flags
-			  (possible Mac OS X values include -arch i386, -arch x86_64, -arch ppc)
-  --with-links            make header links for common misspellings [default=no]
-  --with-x                use the X Window System
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  CPP         C preprocessor
-  XMKMF       Path to xmkmf, Makefile generator for X Window System
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_cxx_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_compile
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-			if test $ac_lo -le $ac_mid; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-			if test $ac_mid -le $ac_hi; then
-			  ac_lo= ac_hi=
-			  break
-			fi
-			as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-	return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_c_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-	 test "$cross_compiling" = yes ||
-	 test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-	ac_must_keep_next=false # Got value, back to normal.
-      else
-	case $ac_arg in
-	  *=* | --config-cache | -C | -disable-* | --disable-* \
-	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-	  | -with-* | --with-* | -without-* | --without-* | --x)
-	    case "$ac_configure_args0 " in
-	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-	    esac
-	    ;;
-	  -* ) ac_must_keep_next=true ;;
-	esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-	"s/'\''/'\''\\\\'\'''\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-	eval ac_val=\$$ac_var
-	case $ac_val in
-	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-	esac
-	$as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-	# differences in whitespace do not lead to failure.
-	ac_old_val_w=`echo x $ac_old_val`
-	ac_new_val_w=`echo x $ac_new_val`
-	if test "$ac_old_val_w" != "$ac_new_val_w"; then
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-	  ac_cache_corrupted=:
-	else
-	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-	  eval $ac_var=\$ac_old_val
-	fi
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-ARCHFLAGS="${ARCHFLAGS:=}"
-CFLAGS="${CFLAGS:=}"
-CPPFLAGS="${CPPFLAGS:=}"
-CXXFLAGS="${CXXFLAGS:=}"
-DSOFLAGS="${DSOFLAGS:=}"
-LDFLAGS="${LDFLAGS:=}"
-OPTIM="${OPTIM:=}"
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CXX" && break
-  done
-fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CXX" && break
-done
-
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
-fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
-else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
-  fi
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-case $host_os in
-    darwin*)
-	if test "x$with_archflags" != x ; then
-	    CFLAGS="$CFLAGS $with_archflags"
-	fi
-	;;
-esac
-
-FL_MAJOR_VERSION=1
-FL_MINOR_VERSION=3
-FL_PATCH_VERSION=5
-FL_DSO_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}
-FL_ABI_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.0
-FL_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.${FL_PATCH_VERSION}
-
-
-
-
-
-
-
-
-
-
-
-USEMMFILES="No"
-
-host_os_gui=$host_os
-case $host_os in
-    cygwin*)
-	# Handle Cygwin option *first*, before all other tests.
-	# Check whether --enable-cygwin was given.
-if test "${enable_cygwin+set}" = set; then :
-  enableval=$enable_cygwin;
-fi
-
-	# Check whether --enable-x11 was given.
-if test "${enable_x11+set}" = set; then :
-  enableval=$enable_x11;
-fi
-
-	if test x$enable_cygwin = xyes; then
-	    # we target Cygwin in combination with X11
-	    if test x$enable_x11 = xyes; then
-		host_os_gui="X11$host_os"
-	    fi
-	fi
-	;;
-    darwin*)
-	if test x$enable_x11 = xyes; then
-		host_os_gui="X11"
-		OPTIM="-U__APPLE__ -mmacosx-version-min=10.3 $OPTIM"
-	fi
-	;;
-   *)
-   ;;
-esac
-
-LINKFLTK="../lib/libfltk.a"
-LINKFLTKFORMS="../lib/libfltk_forms.a"
-LINKFLTKGL="../lib/libfltk_gl.a"
-LINKFLTKIMG="../lib/libfltk_images.a"
-GLDEMOS="gldemos"
-
-LIBEXT=".a"
-LIBNAME="../lib/libfltk.a"
-FLLIBNAME="../lib/libfltk_forms.a"
-GLLIBNAME="../lib/libfltk_gl.a"
-IMGLIBNAME="../lib/libfltk_images.a"
-CAIROLIBNAME="../lib/libfltk_cairo.a"
-
-LIBBASENAME="libfltk.a"
-FLLIBBASENAME="libfltk_forms.a"
-GLLIBBASENAME="libfltk_gl.a"
-IMGLIBBASENAME="libfltk_images.a"
-CAIROLIBBASENAME="libfltk_cairo.a"
-
-CAIRODIR=""
-CAIROFLAGS=""
-LINKFLTKCAIRO=""
-FLTKCAIROOPTION=""
-CAIROLIBS=""
-
-# Check whether --enable-cairoext was given.
-if test "${enable_cairoext+set}" = set; then :
-  enableval=$enable_cairoext;
-fi
-
-# Check whether --enable-cairo was given.
-if test "${enable_cairo+set}" = set; then :
-  enableval=$enable_cairo;
-fi
-
-
-if test x$enable_cairoext = xyes; then
-	  $as_echo "#define FLTK_USE_CAIRO 1" >>confdefs.h
-
-	  $as_echo "#define FLTK_HAVE_CAIRO 1" >>confdefs.h
-
-	  	  	  CAIRODIR="cairo"
-	  CAIROFLAGS="`pkg-config --cflags cairo`"
-	  CAIROLIBS="-lcairo -lpixman-1"
-	  CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
-	  LINKFLTKCAIRO="../lib/libfltk_cairo.a"
-	  FLTKCAIROOPTION="-L ../cairo -lfltk_cairo$SHAREDSUFFIX"
-	  LIBS="$CAIROLIBS $LIBS"
-	  	  LINKFLTK+=" $LINKFLTKCAIRO"
-else
-    if test x$enable_cairo = xyes; then
-	  $as_echo "#define FLTK_HAVE_CAIRO 1" >>confdefs.h
-
-	  	  	  CAIRODIR="cairo"
-	  CAIROFLAGS="`pkg-config --cflags cairo`"
-	  CAIROLIBS="-lcairo -lpixman-1"
-	  CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
-	  LINKFLTKCAIRO="../lib/libfltk_cairo.a"
-	  FLTKCAIROOPTION="-L ../cairo -lfltk_cairo$SHAREDSUFFIX"
-    fi
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-has_abiversion=""
-
-# Check whether --with-abiversion was given.
-if test "${with_abiversion+set}" = set; then :
-  withval=$with_abiversion;
-fi
-
-has_abiversion="$with_abiversion"
-if test "$has_abiversion" = "yes" ; then
- has_abiversion=""
-else
- if test "$has_abiversion" = "no" ; then
-  has_abiversion=""
- fi
-fi
-if test ! "$has_abiversion" = "" ; then
-
-cat >>confdefs.h <<_ACEOF
-#define FL_ABI_VERSION $has_abiversion
-_ACEOF
-
-fi
-
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then :
-  enableval=$enable_debug;
-fi
-
-if test x$enable_debug = xyes; then
-    DEBUGFLAG="-g "
-else
-    DEBUGFLAG=""
-fi
-
-# Check whether --enable-cp936 was given.
-if test "${enable_cp936+set}" = set; then :
-  enableval=$enable_cp936;
-fi
-
-if test x$enable_cp936 = xyes; then
-    CFLAGS="$CFLAGS -DCP936"
-fi
-
-# Check whether --enable-gl was given.
-if test "${enable_gl+set}" = set; then :
-  enableval=$enable_gl;
-fi
-
-
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then :
-  enableval=$enable_shared;
-fi
-
-if test x$enable_shared = xyes; then
-    PICFLAG=1
-    SHAREDSUFFIX=""
-    FLUID="fluid-shared"
-
-    case $host_os in
-	darwin*)
-	    DSONAME="libfltk.$FL_DSO_VERSION.dylib"
-	    FLDSONAME="libfltk_forms.$FL_DSO_VERSION.dylib"
-	    GLDSONAME="libfltk_gl.$FL_DSO_VERSION.dylib"
-	    IMGDSONAME="libfltk_images.$FL_DSO_VERSION.dylib"
-	    CAIRODSONAME="libfltk_cairo.$FL_DSO_VERSION.dylib"
-	    DSOCOMMAND="\$(CXX) \$(ARCHFLAGS) \$(DSOFLAGS) -dynamiclib -lc -o"
-	    ;;
-
-	solaris*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -h \$@ \$(LDLIBS) -G $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib"; then
-		    DSOLINK="-R$libdir"
-	    fi
-	    ;;
-	hpux*)
-	    DSONAME="libfltk.sl.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.sl.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.sl.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.sl.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.sl.$FL_DSO_VERSION"
-	    DSOCOMMAND="ld \$(DSOFLAGS) -b -z +h \$@ $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	irix*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@,-set_version,sgi1.1 \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32" -a "x$libdir" != "x/usr/lib64"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	osf*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	linux* | *bsd*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared -fPIC $DEBUGFLAG -o"
-
-	    # See if the compiler supports -fvisibility...
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports -fvisibility" >&5
-$as_echo_n "checking if the compiler supports -fvisibility... " >&6; }
-if ${ac_cv_cxx_fvisibility+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-		    OLDCXXFLAGS="$CXXFLAGS"
-		    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
-		    ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-		    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_fvisibility=yes
-else
-  ac_cv_cxx_fvisibility=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-		    CXXFLAGS="$OLDCXXFLAGS"
-		    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_fvisibility" >&5
-$as_echo "$ac_cv_cxx_fvisibility" >&6; }
-	    if test x"$ac_cv_cxx_fvisibility" = xyes; then
-		OPTIM="$OPTIM -fvisibility=hidden"
-	    fi
-
-	    # See if the compiler supports -fvisibility-inlines-hidden...
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the compiler supports -fvisibility-inlines-hidden" >&5
-$as_echo_n "checking if the compiler supports -fvisibility-inlines-hidden... " >&6; }
-if ${ac_cv_cxx_fvisibility_inlines+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-		    OLDCXXFLAGS="$CXXFLAGS"
-		    CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
-		    ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-		    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_fvisibility_inlines=yes
-else
-  ac_cv_cxx_fvisibility_inlines=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-		    CXXFLAGS="$OLDCXXFLAGS"
-		    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_fvisibility_inlines" >&5
-$as_echo "$ac_cv_cxx_fvisibility_inlines" >&6; }
-	    if test x"$ac_cv_cxx_fvisibility_inlines" = xyes; then
-		CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
-	    fi
-
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib64"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	aix*)
-	    DSONAME="libfltk_s.a"
-	    FLDSONAME="libfltk_forms_s.a"
-	    GLDSONAME="libfltk_gl_s.a"
-	    IMGDSONAME="libfltk_images_s.a"
-	    CAIRODSONAME="libfltk_cairo_s.a"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-bexpall,-bM:SRE,-bnoentry -o"
-	    SHAREDSUFFIX="_s"
-	    ;;
-	cygwin* | mingw*)
-	    PICFLAG=0
-	    if test x$enable_cygwin != xyes; then
-		DSONAME="mgwfltknox-$FL_DSO_VERSION.dll"
-		FLDSONAME="mgwfltknox_forms-$FL_DSO_VERSION.dll"
-		GLDSONAME="mgwfltknox_gl-$FL_DSO_VERSION.dll"
-		IMGDSONAME="mgwfltknox_images-$FL_DSO_VERSION.dll"
-		CAIRODSONAME="mgwfltknox_cairo-$FL_DSO_VERSION.dll"
-	    else
-		if test x$enable_x11 = xyes; then
-		    DSONAME="cygfltk-$FL_DSO_VERSION.dll"
-		    FLDSONAME="cygfltk_forms-$FL_DSO_VERSION.dll"
-		    GLDSONAME="cygfltk_gl-$FL_DSO_VERSION.dll"
-		    IMGDSONAME="cygfltk_images-$FL_DSO_VERSION.dll"
-		    CAIRODSONAME="cygfltk_cairo-$FL_DSO_VERSION.dll"
-		else
-		    DSONAME="cygfltknox-$FL_DSO_VERSION.dll"
-		    FLDSONAME="cygfltknox_forms-$FL_DSO_VERSION.dll"
-		    GLDSONAME="cygfltknox_gl-$FL_DSO_VERSION.dll"
-		    IMGDSONAME="cygfltknox_images-$FL_DSO_VERSION.dll"
-		    CAIRODSONAME="cygfltknox_cairo-$FL_DSO_VERSION.dll"
-		fi
-	    fi
-	    #-----------------------------------------------------------
-	    # -Wl,--enable-runtime-pseudo-reloc: See str 1585
-	    # appears to be necessary for older binutils versions < 2.16
-	    #-----------------------------------------------------------
-	    LDFLAGS="$LDFLAGS -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -shared \
-		-Wl,--whole-archive -Wl,--export-all-symbols \
-		-Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import \
-		-Wl,--enable-auto-image-base -o \$@"
-	    ;;
-	*)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Shared libraries may not be supported. Trying -shared option with compiler." >&5
-$as_echo "$as_me: WARNING: Shared libraries may not be supported. Trying -shared option with compiler." >&2;}
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    ;;
-    esac
-
-    LINKSHARED="-L../src $FLTKCAIROOPTION -lfltk_images$SHAREDSUFFIX -lfltk_forms$SHAREDSUFFIX -lfltk$SHAREDSUFFIX"
-else
-    DSOCOMMAND="echo"
-    DSOLINK=""
-    DSONAME=""
-    FLDSONAME=""
-    GLDSONAME=""
-    IMGDSONAME=""
-    CAIRODSONAME=""
-    PICFLAG=0
-    SHAREDSUFFIX=""
-    FLUID="fluid"
-    LINKSHARED="$LINKFLTKCAIRO ../lib/libfltk_images.a ../lib/libfltk_forms.a ../lib/libfltk.a"
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --enable-threads was given.
-if test "${enable_threads+set}" = set; then :
-  enableval=$enable_threads;
-fi
-
-
-
-# Check whether --with-optim was given.
-if test "${with_optim+set}" = set; then :
-  withval=$with_optim;
-fi
-
-
-
-# Check whether --with-archflags was given.
-if test "${with_archflags+set}" = set; then :
-  withval=$with_archflags; ARCHFLAGS="$withval"
-fi
-
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-case $host_os in
-    osf*)
-	INSTALL="`pwd`/install-sh -c"
-	;;
-esac
-if test "$INSTALL" = "$ac_install_sh"; then
-    # Use full path to install-sh script...
-    INSTALL="`pwd`/install-sh -c"
-fi
-# Extract the first word of "nroff", so it can be a program name with args.
-set dummy nroff; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_NROFF+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $NROFF in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_NROFF="$NROFF" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_NROFF="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-NROFF=$ac_cv_path_NROFF
-if test -n "$NROFF"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NROFF" >&5
-$as_echo "$NROFF" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$NROFF" = "x:"; then
-    # Try groff instead of nroff...
-    # Extract the first word of "groff", so it can be a program name with args.
-set dummy groff; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GROFF+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $GROFF in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_GROFF="$GROFF" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GROFF="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-GROFF=$ac_cv_path_GROFF
-if test -n "$GROFF"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GROFF" >&5
-$as_echo "$GROFF" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    if test "x$GROFF" = "x:"; then
-	NROFF="echo"
-    else
-	NROFF="$GROFF -T ascii"
-    fi
-fi
-# Extract the first word of "doxygen", so it can be a program name with args.
-set dummy doxygen; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DOXYDOC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $DOXYDOC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_DOXYDOC="$DOXYDOC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_DOXYDOC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-DOXYDOC=$ac_cv_path_DOXYDOC
-if test -n "$DOXYDOC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYDOC" >&5
-$as_echo "$DOXYDOC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $AR in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_AR="$AR" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-AR=$ac_cv_path_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_AR"; then
-  ac_pt_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ac_pt_AR in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ac_pt_AR="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ac_pt_AR=$ac_cv_path_ac_pt_AR
-if test -n "$ac_pt_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_AR" >&5
-$as_echo "$ac_pt_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_pt_AR" = x; then
-    AR=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_pt_AR
-  fi
-else
-  AR="$ac_cv_path_AR"
-fi
-
-
-if test "x$AR" = "x:"; then
-    as_fn_error $? "Configure could not find the library archiver, aborting." "$LINENO" 5
-fi
-
-if test "x$RANLIB" != "x:"; then
-    LIBCOMMAND="$AR cr"
-else
-    LIBCOMMAND="$AR crs"
-fi
-
-
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
-set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_RC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $RC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_RC="$RC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_RC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-RC=$ac_cv_path_RC
-if test -n "$RC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5
-$as_echo "$RC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_RC"; then
-  ac_pt_RC=$RC
-  # Extract the first word of "windres", so it can be a program name with args.
-set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_ac_pt_RC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $ac_pt_RC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_ac_pt_RC="$ac_pt_RC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_ac_pt_RC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-ac_pt_RC=$ac_cv_path_ac_pt_RC
-if test -n "$ac_pt_RC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_RC" >&5
-$as_echo "$ac_pt_RC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_pt_RC" = x; then
-    RC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RC=$ac_pt_RC
-  fi
-else
-  RC="$ac_cv_path_RC"
-fi
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-		   (('a' <= (c) && (c) <= 'i') \
-		     || ('j' <= (c) && (c) <= 'r') \
-		     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-	|| toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-		  inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_short=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_int=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-if test $ac_cv_sizeof_short -eq 2; then
-    $as_echo "#define U16 unsigned short" >>confdefs.h
-
-fi
-if test $ac_cv_sizeof_int -eq 4; then
-    $as_echo "#define U32 unsigned" >>confdefs.h
-
-else
-    if test $ac_cv_sizeof_long -eq 4; then
-	$as_echo "#define U32 unsigned long" >>confdefs.h
-
-    fi
-fi
-case $host_os in
-    darwin*)
-	;;
-    *)
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_bigendian=unknown
-    # See if we're dealing with a universal compiler.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-	       not a universal capable compiler
-	     #endif
-	     typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-	# Check for potential -arch flags.  It is not universal unless
-	# there are at least two -arch flags with different values.
-	ac_arch=
-	ac_prev=
-	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
-	 if test -n "$ac_prev"; then
-	   case $ac_word in
-	     i?86 | x86_64 | ppc | ppc64)
-	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
-		 ac_arch=$ac_word
-	       else
-		 ac_cv_c_bigendian=universal
-		 break
-	       fi
-	       ;;
-	   esac
-	   ac_prev=
-	 elif test "x$ac_word" = "x-arch"; then
-	   ac_prev=arch
-	 fi
-       done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if sys/param.h defines the BYTE_ORDER macro.
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-	     #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
-		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
-		     && LITTLE_ENDIAN)
-	      bogus endian macros
-	     #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-		#include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
-		 not big endian
-		#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
-	      bogus endian macros
-	     #endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to _BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
-		 not big endian
-		#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # Compile a test program.
-      if test "$cross_compiling" = yes; then :
-  # Try to guess by grepping values from an object file.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-short int ascii_mm[] =
-		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-		short int ascii_ii[] =
-		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-		int use_ascii (int i) {
-		  return ascii_mm[i] + ascii_ii[i];
-		}
-		short int ebcdic_ii[] =
-		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-		short int ebcdic_mm[] =
-		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-		int use_ebcdic (int i) {
-		  return ebcdic_mm[i] + ebcdic_ii[i];
-		}
-		extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
-	      ac_cv_c_bigendian=yes
-	    fi
-	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-	      if test "$ac_cv_c_bigendian" = unknown; then
-		ac_cv_c_bigendian=no
-	      else
-		# finding both strings is unlikely to happen, but who knows?
-		ac_cv_c_bigendian=unknown
-	      fi
-	    fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-
-	     /* Are we little or big endian?  From Harbison&Steele.  */
-	     union
-	     {
-	       long int l;
-	       char c[sizeof (long int)];
-	     } u;
-	     u.l = 1;
-	     return u.c[sizeof (long int) - 1] == 1;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_bigendian=no
-else
-  ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
-   yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
-   no)
-      ;; #(
-   universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
-     ;; #(
-   *)
-     as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-	if test $ac_cv_sizeof_int -eq 8; then
-		$as_echo "#define U64 unsigned" >>confdefs.h
-
-	else
-		if test $ac_cv_sizeof_long -eq 8; then
-			$as_echo "#define U64 unsigned long" >>confdefs.h
-
-		fi
-	fi
-	;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler recognizes bool as a built-in type" >&5
-$as_echo_n "checking whether the compiler recognizes bool as a built-in type... " >&6; }
-if ${ac_cv_cxx_bool+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-	ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-		int f(int  x){return 1;}
-		int f(char x){return 1;}
-		int f(bool x){return 1;}
-
-int
-main ()
-{
-
-		bool b = true;
-		return f(b);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_bool=yes
-else
-  ac_cv_cxx_bool=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_bool" >&5
-$as_echo "$ac_cv_cxx_bool" >&6; }
-
-if test "$ac_cv_cxx_bool" != yes; then
-    CXXFLAGS="-Dbool=char -Dfalse=0 -Dtrue=1 $CXXFLAGS"
-fi
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_ac_Header=yes"
-else
-  eval "$as_ac_Header=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_ac_Header
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-_ACEOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' dir; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
-  ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char opendir ();
-int
-main ()
-{
-return opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' x; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_opendir=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_opendir+:} false; then :
-
-else
-  ac_cv_search_opendir=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
-ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-fi
-
-for ac_header in sys/select.h sys/stdtypes.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have the POSIX compatible scandir() prototype" >&5
-$as_echo_n "checking whether we have the POSIX compatible scandir() prototype... " >&6; }
-if ${ac_cv_cxx_scandir_posix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-	ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <dirent.h>
-		  int func (const char *d, dirent ***list, void *sort) {
-		    int n = scandir(d, list, 0, (int(*)(const dirent **, const dirent **))sort);
-		    return n;
-		  }
-
-int
-main ()
-{
-
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_scandir_posix=yes
-else
-  ac_cv_cxx_scandir_posix=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_scandir_posix" >&5
-$as_echo "$ac_cv_cxx_scandir_posix" >&6; }
-
-if test "$ac_cv_cxx_scandir_posix" = yes; then
-    $as_echo "#define HAVE_SCANDIR 1" >>confdefs.h
-
-    $as_echo "#define HAVE_SCANDIR_POSIX 1" >>confdefs.h
-
-else
-    ac_fn_c_check_func "$LINENO" "scandir" "ac_cv_func_scandir"
-if test "x$ac_cv_func_scandir" = xyes; then :
-
-	case $host_os in
-	    solaris* | *qnx*)
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not using $host_os scandir emulation function." >&5
-$as_echo "$as_me: WARNING: Not using $host_os scandir emulation function." >&2;}
-		;;
-	    *)
-		$as_echo "#define HAVE_SCANDIR 1" >>confdefs.h
-
-		;;
-	esac
-fi
-
-fi
-
-ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
-if test "x$ac_cv_func_vsnprintf" = xyes; then :
-
-    case $host_os in
-	hpux1020)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not using built-in vsnprintf function because you are running HP-UX 10.20." >&5
-$as_echo "$as_me: WARNING: Not using built-in vsnprintf function because you are running HP-UX 10.20." >&2;}
-	    ;;
-	osf4)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not using built-in vsnprintf function because you are running Tru64 4.0." >&5
-$as_echo "$as_me: WARNING: Not using built-in vsnprintf function because you are running Tru64 4.0." >&2;}
-	    ;;
-	*)
-	    $as_echo "#define HAVE_VSNPRINTF 1" >>confdefs.h
-
-	    ;;
-    esac
-fi
-
-ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
-
-    case $host_os in
-	hpux1020)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not using built-in snprintf function because you are running HP-UX 10.20." >&5
-$as_echo "$as_me: WARNING: Not using built-in snprintf function because you are running HP-UX 10.20." >&2;}
-	    ;;
-	osf4)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Not using built-in snprintf function because you are running Tru64 4.0." >&5
-$as_echo "$as_me: WARNING: Not using built-in snprintf function because you are running Tru64 4.0." >&2;}
-	    ;;
-	*)
-	    $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
-
-	    ;;
-    esac
-fi
-
-for ac_header in strings.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
-if test "x$ac_cv_header_strings_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STRINGS_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in strcasecmp strlcat strlcpy
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-for ac_header in locale.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
-if test "x$ac_cv_header_locale_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALE_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in localeconv
-do :
-  ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
-if test "x$ac_cv_func_localeconv" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALECONV 1
-_ACEOF
-
-fi
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5
-$as_echo_n "checking for library containing pow... " >&6; }
-if ${ac_cv_search_pow+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pow ();
-int
-main ()
-{
-return pow ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' m; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_pow=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_pow+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_pow+:} false; then :
-
-else
-  ac_cv_search_pow=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5
-$as_echo "$ac_cv_search_pow" >&6; }
-ac_res=$ac_cv_search_pow
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
-  enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_sys_largefile_CC=no
-     if test "$GCC" != yes; then
-       ac_save_CC=$CC
-       while :; do
-	 # IRIX 6.2 and later do not support large files by default,
-	 # so use the C compiler's -n32 option if that helps.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  break
-fi
-rm -f core conftest.err conftest.$ac_objext
-	 CC="$CC -n32"
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_largefile_CC=' -n32'; break
-fi
-rm -f core conftest.err conftest.$ac_objext
-	 break
-       done
-       CC=$ac_save_CC
-       rm -f conftest.$ac_ext
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
-  if test "$ac_cv_sys_largefile_CC" != no; then
-    CC=$CC$ac_cv_sys_largefile_CC
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_file_offset_bits=unknown
-  break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
-  if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=1; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_large_files=unknown
-  break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -rf conftest*
-  fi
-
-
-fi
-
-
-LARGEFILE=""
-if test x$enable_largefile != xno; then
-	LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
-
-	if test x$ac_cv_sys_large_files = x1; then
-		LARGEFILE="$LARGEFILE -D_LARGE_FILES"
-	fi
-
-	if test x$ac_cv_sys_file_offset_bits = x64; then
-		LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64"
-	fi
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_c_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$GCC" = yes; then
-		ac_cv_c_long_long=yes
-	else
-		cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-long long int i;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_long_long=yes
-else
-  ac_cv_c_long_long=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_long_long" >&5
-$as_echo "$ac_cv_c_long_long" >&6; }
-
-if test $ac_cv_c_long_long = yes; then
-	$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlsym" >&5
-$as_echo_n "checking for library containing dlsym... " >&6; }
-if ${ac_cv_search_dlsym+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlsym ();
-int
-main ()
-{
-return dlsym ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' dl; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_dlsym=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_dlsym+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_dlsym+:} false; then :
-
-else
-  ac_cv_search_dlsym=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlsym" >&5
-$as_echo "$ac_cv_search_dlsym" >&6; }
-ac_res=$ac_cv_search_dlsym
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-  $as_echo "#define HAVE_DLSYM 1" >>confdefs.h
-
-fi
-
-ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
-if test "x$ac_cv_header_dlfcn_h" = xyes; then :
-  $as_echo "#define HAVE_DLFCN_H 1" >>confdefs.h
-
-fi
-
-
-
-AUDIOLIBS=""
-
-case $host_os in
-    cygwin* | mingw*)
-		AUDIOLIBS="-lwinmm"
-	;;
-
-    darwin*)
-	AUDIOLIBS="-framework CoreAudio"
-	;;
-
-    *)
-	ac_fn_c_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_alsa_asoundlib_h" = xyes; then :
-  $as_echo "#define HAVE_ALSA_ASOUNDLIB_H 1" >>confdefs.h
-
-	    AUDIOLIBS="-lasound"
-fi
-
-
-	;;
-esac
-
-
-
-SAVELIBS="$LIBS"
-IMAGELIBS=""
-STATICIMAGELIBS=""
-
-
-
-
-# Handle the JPEG lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localjpeg parameter is not set by user
-# Then we check the JPEG lib usability, with result in sysjpeglib_ok variable
-# Check whether --enable-localjpeg was given.
-if test "${enable_localjpeg+set}" = set; then :
-  enableval=$enable_localjpeg;
-fi
-
-# Check for System lib use if automatic mode or --disable-localjpeg is requested
-sysjpeglib_ok=no
-sysjpeginc_ok=no
-if test x$enable_localjpeg != xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_CreateCompress in -ljpeg" >&5
-$as_echo_n "checking for jpeg_CreateCompress in -ljpeg... " >&6; }
-if ${ac_cv_lib_jpeg_jpeg_CreateCompress+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ljpeg  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char jpeg_CreateCompress ();
-int
-main ()
-{
-return jpeg_CreateCompress ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_jpeg_jpeg_CreateCompress=yes
-else
-  ac_cv_lib_jpeg_jpeg_CreateCompress=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_CreateCompress" >&5
-$as_echo "$ac_cv_lib_jpeg_jpeg_CreateCompress" >&6; }
-if test "x$ac_cv_lib_jpeg_jpeg_CreateCompress" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default"
-if test "x$ac_cv_header_jpeglib_h" = xyes; then :
-  sysjpeginc_ok=yes
-fi
-
-
-	    if test x$sysjpeginc_ok = xyes; then
-		sysjpeglib_ok=yes
-	    fi
-fi
-
-fi
-# Now set the jpeg lib and include flags according to the requested mode and availability
-if test x$enable_localjpeg = xyes -o x$sysjpeglib_ok = xno; then
-    JPEGINC="-I../jpeg"
-    JPEG="jpeg"
-    IMAGELIBS="-lfltk_jpeg $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_jpeg.a $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBJPEG 1" >>confdefs.h
-
-    #ac_cv_lib_jpeg_jpeg_CreateCompress=no # from ima: should not be necessary
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localjpeg = xno; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find system jpeg lib or header: choosing the local lib mode." >&5
-$as_echo "$as_me: WARNING: Cannot find system jpeg lib or header: choosing the local lib mode." >&2;}
-    fi
-else
-    JPEGINC=""
-    JPEG=""
-    IMAGELIBS="-ljpeg $IMAGELIBS"
-    STATICIMAGELIBS="-ljpeg $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBJPEG 1" >>confdefs.h
-
-fi
-
-# Handle the ZLIB lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localzlib parameter is not set by user
-# Then we check the ZLIB lib usability, with result in syszlib_ok variable
-# Check whether --enable-localzlib was given.
-if test "${enable_localzlib+set}" = set; then :
-  enableval=$enable_localzlib;
-fi
-
-# Check for System lib use if automatic mode or --disable-localzlib is requested
-syszlib_ok=no
-syszinc_ok=no
-if test x$enable_localzlib != xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzgets in -lz" >&5
-$as_echo_n "checking for gzgets in -lz... " >&6; }
-if ${ac_cv_lib_z_gzgets+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gzgets ();
-int
-main ()
-{
-return gzgets ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_z_gzgets=yes
-else
-  ac_cv_lib_z_gzgets=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets" >&5
-$as_echo "$ac_cv_lib_z_gzgets" >&6; }
-if test "x$ac_cv_lib_z_gzgets" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_zlib_h" = xyes; then :
-  syszinc_ok=yes
-fi
-
-
-	if test x$syszinc_ok = xyes; then
-	    syszlib_ok=yes
-	fi
-fi
-
-fi
-# Now set the Z lib and include flags according to the requested mode and availability
-if test x$enable_localzlib = xyes -o x$syszlib_ok = xno ; then
-    ZLIBINC="-I../zlib"
-    ZLIB="zlib"
-    LIBS="-lfltk_z $LIBS"
-    IMAGELIBS="-lfltk_z $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_z.a $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBZ 1" >>confdefs.h
-
-    ac_cv_lib_z_gzgets=no # fc: is still necessary ?
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localzlib = xno; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find system z lib or header: choosing the local lib mode." >&5
-$as_echo "$as_me: WARNING: Cannot find system z lib or header: choosing the local lib mode." >&2;}
-    fi
-else
-    ZLIBINC=""
-    ZLIB=""
-    LIBS="-lz $LIBS"
-    IMAGELIBS="-lz $IMAGELIBS"
-    STATICIMAGELIBS="-lz $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBZ 1" >>confdefs.h
-
-fi
-
-# Handle the PNG lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localpng parameter is not set by user
-# Then we check the png lib usability with result in syspng_lib variable
-# Check whether --enable-localpng was given.
-if test "${enable_localpng+set}" = set; then :
-  enableval=$enable_localpng;
-fi
-
-
-# Now check if system lib is usable, we check Lib AND include availability with inc variant,
-# but only, if the builtin lib is not requested
-syspnglib_ok=no
-syspnginc_ok=no
-if test x$enable_localpng != xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_read_info in -lpng" >&5
-$as_echo_n "checking for png_read_info in -lpng... " >&6; }
-if ${ac_cv_lib_png_png_read_info+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpng  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char png_read_info ();
-int
-main ()
-{
-return png_read_info ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_png_png_read_info=yes
-else
-  ac_cv_lib_png_png_read_info=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_read_info" >&5
-$as_echo "$ac_cv_lib_png_png_read_info" >&6; }
-if test "x$ac_cv_lib_png_png_read_info" = xyes; then :
-  ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default"
-if test "x$ac_cv_header_png_h" = xyes; then :
-  $as_echo "#define HAVE_PNG_H 1" >>confdefs.h
-
-	syspnginc_ok=yes
-fi
-
-
-    ac_fn_c_check_header_mongrel "$LINENO" "libpng/png.h" "ac_cv_header_libpng_png_h" "$ac_includes_default"
-if test "x$ac_cv_header_libpng_png_h" = xyes; then :
-  $as_echo "#define HAVE_LIBPNG_PNG_H 1" >>confdefs.h
-
-	syspnginc_ok=yes
-fi
-
-
-    if test x$syspnginc_ok = xyes; then
-	syspnglib_ok=yes
-    fi
-fi
-
-fi
-
-# The following is executed if the lib was not found usable or if local lib is required explicitly
-if test x$enable_localpng = xyes -o x$syspnglib_ok = xno ; then
-    PNGINC="-I../png"
-    PNG="png"
-    IMAGELIBS="-lfltk_png $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_png.a $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h
-
-    $as_echo "#define HAVE_PNG_H 1" >>confdefs.h
-
-    $as_echo "#define HAVE_PNG_GET_VALID 1" >>confdefs.h
-
-    $as_echo "#define HAVE_PNG_SET_TRNS_TO_ALPHA 1" >>confdefs.h
-
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localpng = xno; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find system png lib or header: choosing the local lib mode." >&5
-$as_echo "$as_me: WARNING: Cannot find system png lib or header: choosing the local lib mode." >&2;}
-    fi
-else
-    PNGINC=""
-    PNG=""
-    IMAGELIBS="-lpng $IMAGELIBS"
-    STATICIMAGELIBS="-lpng $STATICIMAGELIBS"
-    $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_get_valid in -lpng" >&5
-$as_echo_n "checking for png_get_valid in -lpng... " >&6; }
-if ${ac_cv_lib_png_png_get_valid+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpng  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char png_get_valid ();
-int
-main ()
-{
-return png_get_valid ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_png_png_get_valid=yes
-else
-  ac_cv_lib_png_png_get_valid=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_get_valid" >&5
-$as_echo "$ac_cv_lib_png_png_get_valid" >&6; }
-if test "x$ac_cv_lib_png_png_get_valid" = xyes; then :
-  $as_echo "#define HAVE_PNG_GET_VALID 1" >>confdefs.h
-
-fi
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_set_tRNS_to_alpha in -lpng" >&5
-$as_echo_n "checking for png_set_tRNS_to_alpha in -lpng... " >&6; }
-if ${ac_cv_lib_png_png_set_tRNS_to_alpha+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpng  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char png_set_tRNS_to_alpha ();
-int
-main ()
-{
-return png_set_tRNS_to_alpha ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_png_png_set_tRNS_to_alpha=yes
-else
-  ac_cv_lib_png_png_set_tRNS_to_alpha=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_set_tRNS_to_alpha" >&5
-$as_echo "$ac_cv_lib_png_png_set_tRNS_to_alpha" >&6; }
-if test "x$ac_cv_lib_png_png_set_tRNS_to_alpha" = xyes; then :
-  $as_echo "#define HAVE_PNG_SET_TRNS_TO_ALPHA 1" >>confdefs.h
-
-fi
-
-fi
-
-
-
-
-
-
-
-
-LIBS="$SAVELIBS"
-
-
-
-have_pthread=no
-PTHREAD_FLAGS=""
-
-check_pthread=yes
-case $host_os in
-    mingw*)
-	check_pthread=no
-	;;
-    cygwin*)
-	if test "x$enable_cygwin" != xyes; then
-	    check_pthread=no
-	fi
-	;;
-    *)
-	;;
-esac
-
-if test "x$enable_threads" != xno -a x$check_pthread = xyes; then
-    for ac_header in pthread.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_PTHREAD_H 1
-_ACEOF
-
-fi
-
-done
-
-
-    if test x$ac_cv_header_pthread_h = xyes; then
-		for flag in -lpthreads -lpthread -pthread; do
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create using $flag" >&5
-$as_echo_n "checking for pthread_create using $flag... " >&6; }
-	    SAVELIBS="$LIBS"
-	    LIBS="$flag $LIBS"
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <pthread.h>
-int
-main ()
-{
-pthread_create(0, 0, 0, 0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  have_pthread=yes
-else
-  LIBS="$SAVELIBS"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_pthread" >&5
-$as_echo "$have_pthread" >&6; }
-
-	    if test $have_pthread = yes; then
-		$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
-		PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT"
-
-		# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
-		# be POSIX-compliant... :(
-		case $host_os in
-		    solaris*)
-			PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
-			;;
-		esac
-		break
-	    fi
-	done
-    fi
-fi
-
-
-
-HLINKS=
-OSX_ONLY=:
-THREADS=
-
-
-# Check whether --with-links was given.
-if test "${with_links+set}" = set; then :
-  withval=$with_links;
-fi
-
-
-INSTALL_DESKTOP=""
-UNINSTALL_DESKTOP=""
-
-case $host_os_gui in
-    cygwin* | mingw*)
-		# Recent versions of Cygwin are seriously broken and the size
-	# checks don't work because the shell puts out \r\n instead of
-	# \n.  Here we just force U32 to be defined to "unsigned"...
-	$as_echo "#define U32 unsigned" >>confdefs.h
-
-	CFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CFLAGS"
-	CXXFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CXXFLAGS"
-	LDFLAGS="-mwindows $LDFLAGS"
-	DSOFLAGS="-mwindows $DSOFLAGS"
-	LIBS="$LIBS -lole32 -luuid -lcomctl32"
-	if test "x$with_optim" = x; then
-	    	    with_optim="-O3"
-	fi
-
-	if test x$enable_gl != xno; then
-	    ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_gl_h" = xyes; then :
-  $as_echo "#define HAVE_GL 1" >>confdefs.h
-
-		GLLIB="-lopengl32"
-fi
-
-
-	    ac_fn_c_check_header_mongrel "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_glu_h" = xyes; then :
-  $as_echo "#define HAVE_GL_GLU_H 1" >>confdefs.h
-
-		GLLIB="-lglu32 $GLLIB"
-fi
-
-
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-	if test "x$enable_threads" != xno; then
-	    if test x$have_pthread = xyes; then
-		$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
-	    fi
-	fi
-
-	THREADS="threads$EXEEXT"
-
-	# Don't make symlinks since Windows is not case sensitive.
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-	;;
-
-    darwin*)
-	$as_echo "#define __APPLE_QUARTZ__ 1" >>confdefs.h
-
-
-	USEMMFILES="Yes"
-
-	# MacOS X uses Cocoa for graphics.
-	LIBS="$LIBS -framework Cocoa"
-
-	if test x$have_pthread = xyes; then
-	    $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
-	    THREADS="threads$EXEEXT"
-	fi
-
-	if test x$enable_gl != xno; then
-	    $as_echo "#define HAVE_GL 1" >>confdefs.h
-
-	    $as_echo "#define HAVE_GL_GLU_H 1" >>confdefs.h
-
-	    GLLIB="-framework OpenGL"
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-	# Don't make symlinks because HFS+ is not case sensitive...
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-
-	# Some steps are only done for OS X package management
-	OSX_ONLY=
-
-	# Install/Uninstall FLUID application
-	INSTALL_DESKTOP="install-osx"
-	UNINSTALL_DESKTOP="uninstall-osx"
-	;;
-
-    *)
-	# All others are UNIX/X11...
-	# This includes Cygwin target combined with X11
-	if test x$have_pthread = xyes; then
-	    $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
-	    THREADS="threads$EXEEXT"
-	fi
-
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
-$as_echo_n "checking for X... " >&6; }
-
-
-# Check whether --with-x was given.
-if test "${with_x+set}" = set; then :
-  withval=$with_x;
-fi
-
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  case $x_includes,$x_libraries in #(
-    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
-    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
-  cd conftest.dir
-  cat >Imakefile <<'_ACEOF'
-incroot:
-	@echo incroot='${INCROOT}'
-usrlibdir:
-	@echo usrlibdir='${USRLIBDIR}'
-libdir:
-	@echo libdir='${LIBDIR}'
-_ACEOF
-  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-    for ac_var in incroot usrlibdir libdir; do
-      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
-    done
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl dylib la dll; do
-      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
-	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
-	ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case $ac_im_incroot in
-	/usr/include) ac_x_includes= ;;
-	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-    esac
-    case $ac_im_usrlibdir in
-	/usr/lib | /usr/lib64 | /lib | /lib64) ;;
-	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-    esac
-  fi
-  cd ..
-  rm -f -r conftest.dir
-fi
-
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R7/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
-
-/usr/include/X11
-/usr/include/X11R7
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
-
-/usr/local/X11/include
-/usr/local/X11R7/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
-
-/usr/local/include/X11
-/usr/local/include/X11R7
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
-
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
-
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
-
-/usr/openwin/include
-/usr/openwin/share/include'
-
-if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for Xlib.h.
-  # First, try using that file with no special directory specified.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
-  for ac_dir in $ac_x_header_dirs; do
-  if test -r "$ac_dir/X11/Xlib.h"; then
-    ac_x_includes=$ac_dir
-    break
-  fi
-done
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-fi # $ac_x_includes = no
-
-if test "$ac_x_libraries" = no; then
-  # Check for the libraries.
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS=$LIBS
-  LIBS="-lX11 $LIBS"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <X11/Xlib.h>
-int
-main ()
-{
-XrmInitialize ()
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
-  LIBS=$ac_save_LIBS
-for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
-  # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl dylib la dll; do
-    if test -r "$ac_dir/libX11.$ac_extension"; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-case $ac_x_includes,$ac_x_libraries in #(
-  no,* | *,no | *\'*)
-    # Didn't find X, or a directory has "'" in its name.
-    ac_cv_have_x="have_x=no";; #(
-  *)
-    # Record where we found X for the cache.
-    ac_cv_have_x="have_x=yes\
-	ac_x_includes='$ac_x_includes'\
-	ac_x_libraries='$ac_x_libraries'"
-esac
-fi
-;; #(
-    *) have_x=yes;;
-  esac
-  eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
-$as_echo "$have_x" >&6; }
-  no_x=yes
-else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes\
-	ac_x_includes='$x_includes'\
-	ac_x_libraries='$x_libraries'"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
-$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
-fi
-
-if test "$no_x" = yes; then
-  # Not all programs may use this symbol, but it does not hurt to define it.
-
-$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
-
-  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
-  if test -n "$x_includes"; then
-    X_CFLAGS="$X_CFLAGS -I$x_includes"
-  fi
-
-  # It would also be nice to do this for all -L options, not just this one.
-  if test -n "$x_libraries"; then
-    X_LIBS="$X_LIBS -L$x_libraries"
-    # For Solaris; some versions of Sun CC require a space after -R and
-    # others require no space.  Words are not sufficient . . . .
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
-$as_echo_n "checking whether -R must be followed by a space... " >&6; }
-    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-    ac_xsave_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       X_LIBS="$X_LIBS -R$x_libraries"
-else
-  LIBS="$ac_xsave_LIBS -R $x_libraries"
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	  X_LIBS="$X_LIBS -R $x_libraries"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
-$as_echo "neither works" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    ac_c_werror_flag=$ac_xsave_c_werror_flag
-    LIBS=$ac_xsave_LIBS
-  fi
-
-  # Check for system-dependent libraries X programs must link with.
-  # Do this before checking for the system-independent R6 libraries
-  # (-lICE), since we may need -lsocket or whatever for X linking.
-
-  if test "$ISC" = yes; then
-    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-  else
-    # Martyn Johnson says this is needed for Ultrix, if the X
-    # libraries were built with DECnet support.  And Karl Berry says
-    # the Alpha needs dnet_stub (dnet does not exist).
-    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XOpenDisplay ();
-int
-main ()
-{
-return XOpenDisplay ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_dnet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-fi
-
-    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_stub_dnet_ntoa=yes
-else
-  ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-fi
-
-    fi
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_xsave_LIBS"
-
-    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-    # to get the SysV transport functions.
-    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-    # needs -lnsl.
-    # The nsl library prevents programs from opening the X display
-    # on Irix 5.2, according to T.E. Dickey.
-    # The functions gethostbyname, getservbyname, and inet_addr are
-    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_gethostbyname = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_nsl_gethostbyname=yes
-else
-  ac_cv_lib_nsl_gethostbyname=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-fi
-
-      if test $ac_cv_lib_nsl_gethostbyname = no; then
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
-$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_bsd_gethostbyname=yes
-else
-  ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
-$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-fi
-
-      fi
-    fi
-
-    # lieder@skyler.mavd.honeywell.com says without -lsocket,
-    # socket/setsockopt and other routines are undefined under SCO ODT
-    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
-    # on later versions), says Simon Leinen: it contains gethostby*
-    # variants that don't use the name server (or something).  -lsocket
-    # must be given before -lnsl if both are needed.  We assume that
-    # if connect needs -lnsl, so does gethostbyname.
-    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_connect = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
-$as_echo_n "checking for connect in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_connect+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_socket_connect=yes
-else
-  ac_cv_lib_socket_connect=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
-$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = xyes; then :
-  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-fi
-
-    fi
-
-    # Guillermo Gomez says -lposix is necessary on A/UX.
-    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_remove = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
-$as_echo_n "checking for remove in -lposix... " >&6; }
-if ${ac_cv_lib_posix_remove+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char remove ();
-int
-main ()
-{
-return remove ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_posix_remove=yes
-else
-  ac_cv_lib_posix_remove=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
-$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-fi
-
-    fi
-
-    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = xyes; then :
-
-fi
-
-    if test $ac_cv_func_shmat = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
-$as_echo_n "checking for shmat in -lipc... " >&6; }
-if ${ac_cv_lib_ipc_shmat+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shmat ();
-int
-main ()
-{
-return shmat ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ipc_shmat=yes
-else
-  ac_cv_lib_ipc_shmat=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
-$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-fi
-
-    fi
-  fi
-
-  # Check for libraries that X11R6 Xt/Xaw programs need.
-  ac_save_LDFLAGS=$LDFLAGS
-  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-  # check for ICE first), but we must link in the order -lSM -lICE or
-  # we get undefined symbols.  So assume we have SM if we have ICE.
-  # These have to be linked with before -lX11, unlike the other
-  # libraries we check for below, so use a different variable.
-  # John Interrante, Karl Berry
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
-$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char IceConnectionNumber ();
-int
-main ()
-{
-return IceConnectionNumber ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ICE_IceConnectionNumber=yes
-else
-  ac_cv_lib_ICE_IceConnectionNumber=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
-  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-fi
-
-  LDFLAGS=$ac_save_LDFLAGS
-
-fi
-
-
-	if test x$no_x = xyes; then
-	    as_fn_error $? "Configure could not find required X11 libraries, aborting." "$LINENO" 5
-	fi
-
-	if test "x$X_PRE_LIBS" != x; then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring libraries \"$X_PRE_LIBS\" requested by configure." >&5
-$as_echo "$as_me: WARNING: Ignoring libraries \"$X_PRE_LIBS\" requested by configure." >&2;}
-	fi
-
-	LIBS="$LIBS -lX11 $X_EXTRA_LIBS"
-	CFLAGS="$CFLAGS $X_CFLAGS"
-	CXXFLAGS="$CXXFLAGS $X_CFLAGS"
-	LDFLAGS="$X_LIBS $LDFLAGS"
-	DSOFLAGS="$X_LIBS $DSOFLAGS"
-	$as_echo "#define USE_X11 1" >>confdefs.h
-
-	if test "x$x_includes" != x; then
-	    ac_cpp="$ac_cpp -I$x_includes"
-	fi
-
-		GLLIB=
-
-	if test x$enable_gl != xno; then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
-$as_echo_n "checking for library containing dlopen... " >&6; }
-if ${ac_cv_search_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen ();
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' dl; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_dlopen=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_dlopen+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_dlopen+:} false; then :
-
-else
-  ac_cv_search_dlopen=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
-$as_echo "$ac_cv_search_dlopen" >&6; }
-ac_res=$ac_cv_search_dlopen
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-	    ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_gl_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXMakeCurrent in -lGL" >&5
-$as_echo_n "checking for glXMakeCurrent in -lGL... " >&6; }
-if ${ac_cv_lib_GL_glXMakeCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lGL -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char glXMakeCurrent ();
-int
-main ()
-{
-return glXMakeCurrent ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_GL_glXMakeCurrent=yes
-else
-  ac_cv_lib_GL_glXMakeCurrent=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glXMakeCurrent" >&5
-$as_echo "$ac_cv_lib_GL_glXMakeCurrent" >&6; }
-if test "x$ac_cv_lib_GL_glXMakeCurrent" = xyes; then :
-  $as_echo "#define HAVE_GL 1" >>confdefs.h
-
-		     GLLIB="-lGL"
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXMakeCurrent in -lMesaGL" >&5
-$as_echo_n "checking for glXMakeCurrent in -lMesaGL... " >&6; }
-if ${ac_cv_lib_MesaGL_glXMakeCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lMesaGL -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char glXMakeCurrent ();
-int
-main ()
-{
-return glXMakeCurrent ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_MesaGL_glXMakeCurrent=yes
-else
-  ac_cv_lib_MesaGL_glXMakeCurrent=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_MesaGL_glXMakeCurrent" >&5
-$as_echo "$ac_cv_lib_MesaGL_glXMakeCurrent" >&6; }
-if test "x$ac_cv_lib_MesaGL_glXMakeCurrent" = xyes; then :
-  $as_echo "#define HAVE_GL 1" >>confdefs.h
-
-			 GLLIB="-lMesaGL"
-fi
-
-fi
-
-		{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXGetProcAddressARB in -lGL" >&5
-$as_echo_n "checking for glXGetProcAddressARB in -lGL... " >&6; }
-if ${ac_cv_lib_GL_glXGetProcAddressARB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lGL -lm $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char glXGetProcAddressARB ();
-int
-main ()
-{
-return glXGetProcAddressARB ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_GL_glXGetProcAddressARB=yes
-else
-  ac_cv_lib_GL_glXGetProcAddressARB=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glXGetProcAddressARB" >&5
-$as_echo "$ac_cv_lib_GL_glXGetProcAddressARB" >&6; }
-if test "x$ac_cv_lib_GL_glXGetProcAddressARB" = xyes; then :
-  $as_echo "#define HAVE_GLXGETPROCADDRESSARB 1" >>confdefs.h
-
-fi
-
-
-fi
-
-
-	    ac_fn_c_check_header_mongrel "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default"
-if test "x$ac_cv_header_GL_glu_h" = xyes; then :
-  $as_echo "#define HAVE_GL_GLU_H 1" >>confdefs.h
-
-		if test x$ac_cv_lib_GL_glXMakeCurrent = xyes; then
-		    GLLIB="-lGLU $GLLIB"
-		fi
-		if test x$ac_cv_lib_MesaGL_glXMakeCurrent = xyes; then
-		    GLLIB="-lMesaGLU $GLLIB"
-		fi
-
-fi
-
-
-
-	    if test x$ac_cv_lib_GL_glXMakeCurrent != xyes -a x$ac_cv_lib_MesaGL_glXMakeCurrent != xyes; then
-		LINKFLTKGL=""
-		GLLIBNAME=""
-		GLDSONAME=""
-		GLDEMOS=""
-	    fi
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-		# Check whether --enable-xinerama was given.
-if test "${enable_xinerama+set}" = set; then :
-  enableval=$enable_xinerama;
-fi
-
-
-	xinerama_found=no
-	if test x$enable_xinerama != xno; then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaIsActive in -lXinerama" >&5
-$as_echo_n "checking for XineramaIsActive in -lXinerama... " >&6; }
-if ${ac_cv_lib_Xinerama_XineramaIsActive+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXinerama  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XineramaIsActive ();
-int
-main ()
-{
-return XineramaIsActive ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xinerama_XineramaIsActive=yes
-else
-  ac_cv_lib_Xinerama_XineramaIsActive=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaIsActive" >&5
-$as_echo "$ac_cv_lib_Xinerama_XineramaIsActive" >&6; }
-if test "x$ac_cv_lib_Xinerama_XineramaIsActive" = xyes; then :
-  $as_echo "#define HAVE_XINERAMA 1" >>confdefs.h
-
-		 LIBS="-lXinerama $LIBS"
-		 xinerama_found=yes
-fi
-
-	fi
-
-		# Check whether --enable-xft was given.
-if test "${enable_xft+set}" = set; then :
-  enableval=$enable_xft;
-fi
-
-
-	xft_found=no
-	if test x$enable_xft != xno; then
-            # Try pkg-config first (freetype2 deprecated freetype-config from some version on)
-            # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PKGCONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PKGCONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-PKGCONFIG=$ac_cv_path_PKGCONFIG
-if test -n "$PKGCONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
-$as_echo "$PKGCONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-            FT_FLAGS=""
-            if test "x$PKGCONFIG" != x; then
-                FT_FLAGS="`$PKGCONFIG --cflags xft`"
-                if test "x$FT_FLAGS" = x; then
-                    FT_FLAGS="`$PKGCONFIG --cflags freetype2`"
-                fi
-            fi
-            # if that failed, try freetype-config
-            if test "x$FT_FLAGS" = x; then
-                # Extract the first word of "freetype-config", so it can be a program name with args.
-set dummy freetype-config; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_FTCONFIG+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $FTCONFIG in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_FTCONFIG="$FTCONFIG" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_FTCONFIG="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-FTCONFIG=$ac_cv_path_FTCONFIG
-if test -n "$FTCONFIG"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FTCONFIG" >&5
-$as_echo "$FTCONFIG" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-                if test "x$FTCONFIG" != x; then
-                    FT_FLAGS="`$FTCONFIG --cflags`"
-                else
-                    # abort if both methods failed
-                    { $as_echo "$as_me:${as_lineno-$LINENO}: please install pkg-config or use 'configure --disable-xft'." >&5
-$as_echo "$as_me: please install pkg-config or use 'configure --disable-xft'." >&6;}
-                    as_fn_error $? "Aborting." "$LINENO" 5
-                fi
-            fi
-            CPPFLAGS="$FT_FLAGS $CPPFLAGS"
-            CXXFLAGS="$FT_FLAGS $CXXFLAGS"
-            CFLAGS="$FT_FLAGS $CFLAGS"
-
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FcPatternCreate in -lfontconfig" >&5
-$as_echo_n "checking for FcPatternCreate in -lfontconfig... " >&6; }
-if ${ac_cv_lib_fontconfig_FcPatternCreate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lfontconfig  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char FcPatternCreate ();
-int
-main ()
-{
-return FcPatternCreate ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_fontconfig_FcPatternCreate=yes
-else
-  ac_cv_lib_fontconfig_FcPatternCreate=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fontconfig_FcPatternCreate" >&5
-$as_echo "$ac_cv_lib_fontconfig_FcPatternCreate" >&6; }
-if test "x$ac_cv_lib_fontconfig_FcPatternCreate" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBFONTCONFIG 1
-_ACEOF
-
-  LIBS="-lfontconfig $LIBS"
-
-fi
-
-            ac_fn_c_check_header_mongrel "$LINENO" "X11/Xft/Xft.h" "ac_cv_header_X11_Xft_Xft_h" "$ac_includes_default"
-if test "x$ac_cv_header_X11_Xft_Xft_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XftDrawCreate in -lXft" >&5
-$as_echo_n "checking for XftDrawCreate in -lXft... " >&6; }
-if ${ac_cv_lib_Xft_XftDrawCreate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXft  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XftDrawCreate ();
-int
-main ()
-{
-return XftDrawCreate ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xft_XftDrawCreate=yes
-else
-  ac_cv_lib_Xft_XftDrawCreate=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xft_XftDrawCreate" >&5
-$as_echo "$ac_cv_lib_Xft_XftDrawCreate" >&6; }
-if test "x$ac_cv_lib_Xft_XftDrawCreate" = xyes; then :
-  $as_echo "#define USE_XFT 1" >>confdefs.h
-
-			 LIBS="-lXft $LIBS"
-			 xft_found=yes
-fi
-
-fi
-
-
-	fi
-
-			if test x$enable_xft != xno -a x$xft_found != xyes; then
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the required Xft headers and/or libraries." >&5
-$as_echo "$as_me: WARNING: could not find the required Xft headers and/or libraries." >&2;}
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: please install Xft headers and libraries or use 'configure --disable-xft'." >&5
-$as_echo "$as_me: please install Xft headers and libraries or use 'configure --disable-xft'." >&6;}
-	    if test x$enable_xft = xyes; then
-		as_fn_error $? "Aborting." "$LINENO" 5
-	    fi
-	fi
-
-		# Check whether --enable-xdbe was given.
-if test "${enable_xdbe+set}" = set; then :
-  enableval=$enable_xdbe;
-fi
-
-
-	xdbe_found=no
-	if test x$enable_xdbe != xno; then
-	    ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XdbeQueryExtension in -lXext" >&5
-$as_echo_n "checking for XdbeQueryExtension in -lXext... " >&6; }
-if ${ac_cv_lib_Xext_XdbeQueryExtension+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXext  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XdbeQueryExtension ();
-int
-main ()
-{
-return XdbeQueryExtension ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xext_XdbeQueryExtension=yes
-else
-  ac_cv_lib_Xext_XdbeQueryExtension=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XdbeQueryExtension" >&5
-$as_echo "$ac_cv_lib_Xext_XdbeQueryExtension" >&6; }
-if test "x$ac_cv_lib_Xext_XdbeQueryExtension" = xyes; then :
-  $as_echo "#define HAVE_XDBE 1" >>confdefs.h
-
-		     LIBS="-lXext $LIBS"
-		     xdbe_found=yes
-fi
-
-fi
-
-
-	fi
-
-		# Check whether --enable-xfixes was given.
-if test "${enable_xfixes+set}" = set; then :
-  enableval=$enable_xfixes;
-fi
-
-
-	xfixes_found=no
-	if test x$enable_xfixes != xno; then
-	    ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xfixes.h" "ac_cv_header_X11_extensions_Xfixes_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_Xfixes_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XFixesQueryExtension in -lXfixes" >&5
-$as_echo_n "checking for XFixesQueryExtension in -lXfixes... " >&6; }
-if ${ac_cv_lib_Xfixes_XFixesQueryExtension+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXfixes  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XFixesQueryExtension ();
-int
-main ()
-{
-return XFixesQueryExtension ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xfixes_XFixesQueryExtension=yes
-else
-  ac_cv_lib_Xfixes_XFixesQueryExtension=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xfixes_XFixesQueryExtension" >&5
-$as_echo "$ac_cv_lib_Xfixes_XFixesQueryExtension" >&6; }
-if test "x$ac_cv_lib_Xfixes_XFixesQueryExtension" = xyes; then :
-  $as_echo "#define HAVE_XFIXES 1" >>confdefs.h
-
-		     LIBS="-lXfixes $LIBS"
-		     xfixes_found=yes
-fi
-
-fi
-
-
-	fi
-
-		# Check whether --enable-xcursor was given.
-if test "${enable_xcursor+set}" = set; then :
-  enableval=$enable_xcursor;
-fi
-
-
-	xcursor_found=no
-	if test x$enable_xcursor != xno; then
-	    ac_fn_c_check_header_compile "$LINENO" "X11/Xcursor/Xcursor.h" "ac_cv_header_X11_Xcursor_Xcursor_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_Xcursor_Xcursor_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XcursorImageCreate in -lXcursor" >&5
-$as_echo_n "checking for XcursorImageCreate in -lXcursor... " >&6; }
-if ${ac_cv_lib_Xcursor_XcursorImageCreate+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXcursor  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XcursorImageCreate ();
-int
-main ()
-{
-return XcursorImageCreate ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xcursor_XcursorImageCreate=yes
-else
-  ac_cv_lib_Xcursor_XcursorImageCreate=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xcursor_XcursorImageCreate" >&5
-$as_echo "$ac_cv_lib_Xcursor_XcursorImageCreate" >&6; }
-if test "x$ac_cv_lib_Xcursor_XcursorImageCreate" = xyes; then :
-  $as_echo "#define HAVE_XCURSOR 1" >>confdefs.h
-
-		     LIBS="-lXcursor $LIBS"
-		     xcursor_found=yes
-fi
-
-fi
-
-
-	fi
-
-		# Check whether --enable-xrender was given.
-if test "${enable_xrender+set}" = set; then :
-  enableval=$enable_xrender;
-fi
-
-
-	xrender_found=no
-	if test x$enable_xrender != xno; then
-	    ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrender.h" "ac_cv_header_X11_extensions_Xrender_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_extensions_Xrender_h" = xyes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderQueryVersion in -lXrender" >&5
-$as_echo_n "checking for XRenderQueryVersion in -lXrender... " >&6; }
-if ${ac_cv_lib_Xrender_XRenderQueryVersion+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lXrender  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XRenderQueryVersion ();
-int
-main ()
-{
-return XRenderQueryVersion ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_Xrender_XRenderQueryVersion=yes
-else
-  ac_cv_lib_Xrender_XRenderQueryVersion=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderQueryVersion" >&5
-$as_echo "$ac_cv_lib_Xrender_XRenderQueryVersion" >&6; }
-if test "x$ac_cv_lib_Xrender_XRenderQueryVersion" = xyes; then :
-  $as_echo "#define HAVE_XRENDER 1" >>confdefs.h
-
-		     LIBS="-lXrender $LIBS"
-		     xrender_found=yes
-fi
-
-fi
-
-
-	fi
-
-		ac_fn_c_check_header_compile "$LINENO" "X11/Xregion.h" "ac_cv_header_X11_Xregion_h" "#include <X11/Xlib.h>
-"
-if test "x$ac_cv_header_X11_Xregion_h" = xyes; then :
-  $as_echo "#define HAVE_X11_XREGION_H 1" >>confdefs.h
-
-fi
-
-
-
-		# Extract the first word of "xprop", so it can be a program name with args.
-set dummy xprop; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XPROP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $XPROP in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_XPROP="$XPROP" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_XPROP="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
-esac
-fi
-XPROP=$ac_cv_path_XPROP
-if test -n "$XPROP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XPROP" >&5
-$as_echo "$XPROP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X overlay visuals" >&5
-$as_echo_n "checking for X overlay visuals... " >&6; }
-if ${ac_cv_have_overlay+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$XPROP" != x; then
-		if $XPROP -root 2>/dev/null | grep -c "SERVER_OVERLAY_VISUALS" >/dev/null; then
-		    ac_cv_have_overlay=yes
-		else
-		    ac_cv_have_overlay=no
-		fi
-	    else
-		ac_cv_have_overlay=no
-	    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_overlay" >&5
-$as_echo "$ac_cv_have_overlay" >&6; }
-
-	if test x$ac_cv_have_overlay = xyes; then
-	    $as_echo "#define HAVE_OVERLAY 1" >>confdefs.h
-
-	fi
-
-	# Make symlinks since UNIX/Linux is case sensitive,
-	# but Cygwin in general not.
-	case $host_os in
-	    cygwin*)
-		HLINKS="#"
-	    ;;
-	    *)
-	    ;;
-	esac
-	# Make symlinks since UNIX/Linux is case sensitive,
-	# but only if explicitly configured (default=no)
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-
-	# Install/Uninstall FLUID application support files
-	INSTALL_DESKTOP="install-linux"
-	UNINSTALL_DESKTOP="uninstall-linux"
-	;;
-esac
-
-
-
-
-
-
-
-
-
-
-
-
-case "$host_os" in
-    *bsd* | darwin*)
-	# *BSD
-	CAT1EXT=0
-	CAT3EXT=0
-	CAT6EXT=0
-	;;
-    irix*)
-	# SGI IRIX
-	CAT1EXT=z
-	CAT3EXT=z
-	CAT6EXT=z
-	;;
-    *)
-	# All others
-	CAT1EXT=1
-	CAT3EXT=3
-	CAT6EXT=6
-	;;
-esac
-
-
-
-
-
-if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/usr"; then
-    case "$host_os" in
-	*bsd* | darwin* | linux*)
-	    # *BSD, Darwin, and Linux
-	    mandir="\${prefix}/share/man"
-	    ;;
-	irix*)
-	    # SGI IRIX
-	    mandir="\${prefix}/share/catman"
-	    ;;
-    esac
-fi
-
-if test "$prefix" = NONE; then
-    prefix=/usr/local
-fi
-
-if test "$exec_prefix" = NONE; then
-    exec_prefix="\${prefix}"
-fi
-
-case $host_os in
-    irix1-5*)
-	;;
-    irix*)
-	if test "$libdir" = "\${exec_prefix}/lib" -a "$exec_prefix" = "\${prefix}" -a "$prefix" = "/usr"; then
-	    libdir="/usr/lib32"
-	fi
-	;;
-esac
-
-MAKEDEPEND="\$(CXX) -M"
-
-
-
-if test -n "$GCC"; then
-    # Show all standard warnings + unused variables, conversion errors,
-    # and inlining problems when compiling...
-    OPTIM="-Wall -Wunused -Wno-format-y2k $OPTIM"
-
-    # The following additional warnings are useful for tracking down problems...
-    #OPTIM="-Wshadow -Wconversion $OPTIM"
-
-    # We know that Carbon is deprecated on OS X 10.4. To avoid hundreds of warnings
-    # we will temporarily disable 'deprecated' warnings on OS X.
-    case $host_os in
-	darwin1-7)
-	    ;;
-	darwin*)
-	    OPTIM="-Wno-deprecated-declarations $OPTIM"
-	    ;;
-    esac
-
-    # Set the default compiler optimizations...
-    if test -z "$DEBUGFLAG"; then
-	#
-	# Note: Can't use -fomit-frame-pointer - prevents tools like
-	#       libsafe from working!
-	#
-	#       Don't use -fforce-mem, -fforce-addr, or -fcaller-saves.
-	#       They all seem to make either no difference or enlarge
-	#       the code by a few hundred bytes.
-	#
-	#       "-Os" seems to be the best compromise between speed and
-	#       code size.  "-O3" and higher seem to make no effective
-	#       difference in the speed of the code, but does bloat the
-	#       library 10+%.
-	#
-
-	if test "x$with_optim" != x; then
-	    OPTIM="$with_optim $OPTIM"
-	else
-	    OPTIM="-Os $OPTIM"
-	fi
-    fi
-
-    # Generate position-independent code when needed...
-    if test $PICFLAG = 1; then
-	OPTIM="$OPTIM -fPIC"
-    fi
-
-    # See if GCC supports -fno-exceptions...
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fno-exceptions" >&5
-$as_echo_n "checking if GCC supports -fno-exceptions... " >&6; }
-    OLDCFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS -fno-exceptions"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  OPTIM="$OPTIM -fno-exceptions"
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    CFLAGS="$OLDCFLAGS"
-
-    # See if GCC supports -fno-strict-aliasing...
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fno-strict-aliasing" >&5
-$as_echo_n "checking if GCC supports -fno-strict-aliasing... " >&6; }
-    OLDCFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS -fno-strict-aliasing"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  OPTIM="$OPTIM -fno-strict-aliasing"
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    CFLAGS="$OLDCFLAGS"
-
-    # See if ld supports -no-undefined...
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld supports -no-undefined" >&5
-$as_echo_n "checking if ld supports -no-undefined... " >&6; }
-    OLDLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-no-undefined"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  DSOFLAGS="$DSOFLAGS -Wl,-no-undefined"
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LDFLAGS="$OLDLDFLAGS"
-
-    # See if ld supports -Bsymbolic-functions...
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ld supports -Bsymbolic-functions" >&5
-$as_echo_n "checking if ld supports -Bsymbolic-functions... " >&6; }
-    OLDLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  DSOFLAGS="$DSOFLAGS -Wl,-Bsymbolic-functions"
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LDFLAGS="$OLDLDFLAGS"
-
-    # See if toolchain supports a sectioned build...
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if toolchain supports sections" >&5
-$as_echo_n "checking if toolchain supports sections... " >&6; }
-    OLDLDFLAGS="$LDFLAGS"
-    OLDCFLAGS="$CFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-gc-sections"
-    CFLAGS="$CFLAGS -ffunction-sections -fdata-sections"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  DSOFLAGS="$DSOFLAGS -Wl,-gc-sections"
-	 OPTIM="$OPTIM -ffunction-sections -fdata-sections"
-	 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LDFLAGS="$OLDLDFLAGS"
-    CFLAGS="$OLDCFLAGS"
-
-    # See if we are running Solaris; if so, try the -fpermissive option...
-    # This option is required on some versions of Solaris to work around
-    # bugs in the X headers up through Solaris 7.
-    #
-    # Unlike the other compiler/optimization settings, this one is placed
-    # in CFLAGS and CXXFLAGS so that fltk-config will provide the option
-    # to clients - otherwise client apps will not compile properly...
-    case $host_os in
-	solaris*)
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fpermissive" >&5
-$as_echo_n "checking if GCC supports -fpermissive... " >&6; }
-
-	    OLDCFLAGS="$CFLAGS"
-	    CFLAGS="$CFLAGS -fpermissive"
-	    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  CXXFLAGS="$CXXFLAGS -fpermissive"
-		 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  CFLAGS="$OLDCFLAGS"
-		 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-	    ;;
-    esac
-else
-    case "$host_os" in
-	irix*)
-	    # Running some flavor of IRIX; see which version and
-	    # set things up according...
-	    if test "$uversion" -ge 62; then
-		# We are running IRIX 6.2 or higher; uncomment the following
-		# lines if you don't have IDO 7.2 or higher:
-		#
-		#     CXX="CC -n32 -mips3"
-		#     CC="cc -n32 -mips3"
-		#     LD="ld -n32 -mips3"
-		#     MAKEDEPEND="CC -M"
-
-		if test "x`grep abi=n32 /etc/compiler.defaults`" = x; then
-			{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: FOR BEST RESULTS BEFORE COMPILING: setenv SGI_ABI \"-n32 -mips3\"" >&5
-$as_echo "$as_me: WARNING: FOR BEST RESULTS BEFORE COMPILING: setenv SGI_ABI \"-n32 -mips3\"" >&2;}
-		fi
-
-		OPTIM="-fullwarn $OPTIM"
-	    fi
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		    if test $uversion -gt 62; then
-			OPTIM="-OPT:Olimit=4000 $OPTIM"
-		    fi
-		fi
-	    fi
-	    ;;
-	hpux*)
-	    # Running HP-UX; these options should work for the HP compilers.
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="+O2 $OPTIM"
-		fi
-	    fi
-
-	    if test $PICFLAG = 1; then
-		OPTIM="+z $OPTIM"
-	    fi
-
-	    CXXFLAGS="$CXXFLAGS +W336,501,736,740,749,829"
-	    ;;
-	OSF1*)
-	    # Running Digital/Tru64 UNIX; these options should work for the
-	    # Digital/Compaq/NewHP compilers.
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		fi
-	    fi
-	    ;;
-	solaris*)
-	    # Solaris
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-xO3 $OPTIM"
-		fi
-	    fi
-
-	    if test $PICFLAG = 1; then
-		OPTIM="-KPIC $OPTIM"
-	    fi
-	    ;;
-	aix*)
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		fi
-	    fi
-
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The AIX C and C++ compilers are known not to correctly compile the FLTK library." >&5
-$as_echo "$as_me: WARNING: The AIX C and C++ compilers are known not to correctly compile the FLTK library." >&2;}
-	    ;;
-	*)
-	    # Running some other operating system; inform the user they
-	    # should contribute the necessary options via the STR form..
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Building FLTK with default compiler optimizations" >&5
-$as_echo "$as_me: WARNING: Building FLTK with default compiler optimizations" >&2;}
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Send the FLTK developers your uname and compiler options via http://www.fltk.org/str.php" >&5
-$as_echo "$as_me: WARNING: Send the FLTK developers your uname and compiler options via http://www.fltk.org/str.php" >&2;}
-	    ;;
-    esac
-fi
-
-OPTIM="$DEBUGFLAG $OPTIM"
-
-case $host_os in
-    darwin*)
-	if test "x$with_archflags" != x ; then
-	    CFLAGS="`echo $CFLAGS | sed -e "s/$with_archflags//g"`"
-	fi
-	;;
-esac
-
-case $host_os in
-  mingw*)
-     # Determine the path where MSys has /usr installed
-	msyspath=`mount | grep '\/usr ' | cut -d ' ' -f -1 | sed -e 's/\\\/\// g'`
-     # Then substitute that in the WIN32 path instead of /usr
-	cat >>confdefs.h <<_ACEOF
-#define FLTK_DOCDIR "$msyspath/local/share/doc/fltk"
-_ACEOF
-
-    ;;
-  *)
-    if test x$prefix = xNONE; then
-	cat >>confdefs.h <<_ACEOF
-#define FLTK_DOCDIR "/usr/local/share/doc/fltk"
-_ACEOF
-
-    else
-	cat >>confdefs.h <<_ACEOF
-#define FLTK_DOCDIR "$prefix/share/doc/fltk"
-_ACEOF
-
-    fi
-    ;;
-esac
-
-if test x$prefix = xNONE; then
-    cat >>confdefs.h <<_ACEOF
-#define FLTK_DATADIR "/usr/local/share/fltk"
-_ACEOF
-
-else
-    cat >>confdefs.h <<_ACEOF
-#define FLTK_DATADIR "$prefix/share/fltk"
-_ACEOF
-
-fi
-
-echo ""
-echo "Configuration Summary"
-echo "-------------------------------------------------------------------------"
-
-case $host_os_gui in
-    cygwin* | mingw*)
-	graphics="GDI"
-	;;
-    darwin*)
-	graphics="Quartz"
-	;;
-    *)
-	graphics="X11"
-	if test x$xft_found = xyes; then
-	    graphics="$graphics + Xft"
-	fi
-	if test x$xdbe_found = xyes; then
-	    graphics="$graphics + Xdbe"
-	fi
-	if test x$xfixes_found = xyes; then
-	    graphics="$graphics + Xfixes"
-	fi
-	if test x$xinerama_found = xyes; then
-	    graphics="$graphics + Xinerama"
-	fi
-	if test x$xcursor_found = xyes; then
-	    graphics="$graphics + Xcursor"
-	fi
-	if test x$xrender_found = xyes; then
-	    graphics="$graphics + Xrender"
-	fi
-	;;
-esac
-
-echo "    Directories: prefix=$prefix"
-echo "                 bindir=$bindir"
-echo "                 datadir=$datadir"
-echo "                 datarootdir=$datarootdir"
-echo "                 exec_prefix=$exec_prefix"
-echo "                 includedir=$includedir"
-echo "                 libdir=$libdir"
-echo "                 mandir=$mandir"
-case $host_os in
-  mingw*)
-    echo "                 MSys docpath=$msyspath/local/share/doc/fltk"
-  ;;
-esac
-echo "       Graphics: $graphics"
-
-if test x$JPEG = x; then
-    echo "Image Libraries: JPEG=System"
-else
-    echo "Image Libraries: JPEG=Builtin"
-fi
-if test x$PNG = x; then
-    echo "                 PNG=System"
-else
-    echo "                 PNG=Builtin"
-fi
-if test x$ZLIB = x; then
-    echo "                 ZLIB=System"
-else
-    echo "                 ZLIB=Builtin"
-fi
-if test x$enable_cairo = xyes; then
-    echo "                 CAIRO=lib"
-fi
-if test x$enable_cairoext = xyes; then
-    echo "                 CAIRO=internal_use"
-fi
-
-if test x$enable_largefile != xno; then
-    echo "    Large Files: YES"
-else
-    echo "    Large Files: NO"
-fi
-
-if test x$GLDEMOS = x; then
-    echo "         OpenGL: NO"
-else
-    echo "         OpenGL: YES"
-fi
-
-if test x$THREADS = x; then
-    echo "        Threads: NO"
-else
-    echo "        Threads: YES"
-fi
-
-BINARY_DIR=
-
-
-ac_config_headers="$ac_config_headers config.h:configh.in"
-
-ac_config_headers="$ac_config_headers FL/abi-version.h:abi-version.in"
-
-ac_config_files="$ac_config_files makeinclude fltk.list fltk-config fltk.spec FL/Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:configh.in" ;;
-    "FL/abi-version.h") CONFIG_HEADERS="$CONFIG_HEADERS FL/abi-version.h:abi-version.in" ;;
-    "makeinclude") CONFIG_FILES="$CONFIG_FILES makeinclude" ;;
-    "fltk.list") CONFIG_FILES="$CONFIG_FILES fltk.list" ;;
-    "fltk-config") CONFIG_FILES="$CONFIG_FILES fltk-config" ;;
-    "fltk.spec") CONFIG_FILES="$CONFIG_FILES fltk.spec" ;;
-    "FL/Makefile") CONFIG_FILES="$CONFIG_FILES FL/Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
-
-
-  esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
-
-chmod +x fltk-config
-
--- a/DoConfig/fltk/configure.ac
+++ /dev/null
@@ -1,1590 +1,0 @@
-dnl -*- sh -*-
-dnl the "configure" script is made from this by running GNU "autoconf"
-dnl
-dnl "$Id$"
-dnl
-dnl Configuration script for the Fast Light Tool Kit (FLTK).
-dnl
-dnl Copyright 1998-2017 by Bill Spitzak and others.
-dnl
-dnl This library is free software. Distribution and use rights are outlined in
-dnl the file "COPYING" which should have been included with this file.  If this
-dnl file is missing or damaged, see the license at:
-dnl
-dnl     http://www.fltk.org/COPYING.php
-dnl
-dnl Please report all bugs and problems on the following page:
-dnl
-dnl      http://www.fltk.org/str.php
-dnl
-
-dnl We need at least autoconf 2.50...
-AC_PREREQ([2.50])
-
-dnl Required file in package...
-AC_INIT
-AC_CONFIG_SRCDIR([src/Fl.cxx])
-
-AC_CANONICAL_HOST
-
-dnl Do not automatically add "-g" to compiler options...
-dnl This must be _before_ "Find compiler commands..."
-ARCHFLAGS="${ARCHFLAGS:=}"
-CFLAGS="${CFLAGS:=}"
-CPPFLAGS="${CPPFLAGS:=}"
-CXXFLAGS="${CXXFLAGS:=}"
-DSOFLAGS="${DSOFLAGS:=}"
-LDFLAGS="${LDFLAGS:=}"
-OPTIM="${OPTIM:=}"
-
-dnl Find compiler commands...
-AC_PROG_CC
-AC_PROG_CXX
-
-dnl So --with-archflags option is used during "checking size of long"
-case $host_os in
-    darwin*)
-	if test "x$with_archflags" != x ; then
-	    CFLAGS="$CFLAGS $with_archflags"
-	fi
-	;;
-esac
-
-dnl FLTK library versions...
-FL_MAJOR_VERSION=1
-FL_MINOR_VERSION=3
-FL_PATCH_VERSION=5
-FL_DSO_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}
-FL_ABI_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.0
-FL_VERSION=${FL_MAJOR_VERSION}.${FL_MINOR_VERSION}.${FL_PATCH_VERSION}
-
-AC_SUBST(FL_MAJOR_VERSION)
-AC_SUBST(FL_MINOR_VERSION)
-AC_SUBST(FL_PATCH_VERSION)
-AC_SUBST(FL_DSO_VERSION)
-AC_SUBST(FL_ABI_VERSION)
-AC_SUBST(FL_VERSION)
-
-AC_SUBST(ARCHFLAGS)
-AC_SUBST(OPTIM)
-
-dnl FLTK build options to be used in Makefiles (defined in makeinclude)
-USEMMFILES="No"
-
-dnl OS-specific pre-tests...
-dnl host_os_gui equals $host_os unless we target Cygwin or Darwin in combination with X11.
-host_os_gui=$host_os
-case $host_os in
-    cygwin*)
-	# Handle Cygwin option *first*, before all other tests.
-	AC_ARG_ENABLE(cygwin, [  --enable-cygwin         use the Cygwin libraries [[default=no]]])
-	AC_ARG_ENABLE(x11,    [  --enable-x11            with Cygwin or Mac OS, use X11 [[default=no]]])
-	if test x$enable_cygwin = xyes; then
-	    # we target Cygwin in combination with X11
-	    if test x$enable_x11 = xyes; then
-		host_os_gui="X11$host_os"
-	    fi
-	fi
-	;;
-    darwin*)
-	if test x$enable_x11 = xyes; then
-		host_os_gui="X11"
-		OPTIM="-U__APPLE__ -mmacosx-version-min=10.3 $OPTIM"
-	fi
-	;;
-   *)
-   ;;
-esac
-
-dnl Define the libraries and link options we will need.
-LINKFLTK="../lib/libfltk.a"
-LINKFLTKFORMS="../lib/libfltk_forms.a"
-LINKFLTKGL="../lib/libfltk_gl.a"
-LINKFLTKIMG="../lib/libfltk_images.a"
-GLDEMOS="gldemos"
-
-LIBEXT=".a"
-LIBNAME="../lib/libfltk.a"
-FLLIBNAME="../lib/libfltk_forms.a"
-GLLIBNAME="../lib/libfltk_gl.a"
-IMGLIBNAME="../lib/libfltk_images.a"
-CAIROLIBNAME="../lib/libfltk_cairo.a"
-
-LIBBASENAME="libfltk.a"
-FLLIBBASENAME="libfltk_forms.a"
-GLLIBBASENAME="libfltk_gl.a"
-IMGLIBBASENAME="libfltk_images.a"
-CAIROLIBBASENAME="libfltk_cairo.a"
-
-dnl Check for Cairo library unless disabled...
-CAIRODIR=""
-CAIROFLAGS=""
-LINKFLTKCAIRO=""
-FLTKCAIROOPTION=""
-CAIROLIBS=""
-
-AC_ARG_ENABLE(cairoext,[  --enable-cairoext       use fltk code instrumentation for cairo extended use [[default=no]]])
-AC_ARG_ENABLE(cairo,   [  --enable-cairo          use lib Cairo [[default=no]]])
-
-if test x$enable_cairoext = xyes; then
-	  AC_DEFINE(FLTK_USE_CAIRO)
-	  AC_DEFINE(FLTK_HAVE_CAIRO)
-	  dnl FIXME This part should be fixed so configure do not depend on
-	  dnl we do not rely on pkg-config .
-	  CAIRODIR="cairo"
-	  CAIROFLAGS="`pkg-config --cflags cairo`"
-	  CAIROLIBS="-lcairo -lpixman-1"
-	  CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
-	  LINKFLTKCAIRO="../lib/libfltk_cairo.a"
-	  FLTKCAIROOPTION="-L ../cairo -lfltk_cairo$SHAREDSUFFIX"
-	  LIBS="$CAIROLIBS $LIBS"
-	  dnl $LINKFLTKCAIRO
-	  LINKFLTK+=" $LINKFLTKCAIRO"
-else
-    if test x$enable_cairo = xyes; then
-	  AC_DEFINE(FLTK_HAVE_CAIRO)
-	  dnl FIXME This part should be fixed so configure do not depend on
-	  dnl we do not rely on pkg-config .
-	  CAIRODIR="cairo"
-	  CAIROFLAGS="`pkg-config --cflags cairo`"
-	  CAIROLIBS="-lcairo -lpixman-1"
-	  CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
-	  LINKFLTKCAIRO="../lib/libfltk_cairo.a"
-	  FLTKCAIROOPTION="-L ../cairo -lfltk_cairo$SHAREDSUFFIX"
-    fi
-fi
-
-AC_SUBST(CAIRODIR)
-AC_SUBST(CAIROFLAGS)
-AC_SUBST(CAIROLIBS)
-AC_SUBST(LINKFLTKCAIRO)
-AC_SUBST(FLTKCAIROOPTION)
-
-AC_SUBST(FLLIBNAME)
-AC_SUBST(GLDEMOS)
-AC_SUBST(GLLIBNAME)
-AC_SUBST(IMGLIBNAME)
-AC_SUBST(CAIROLIBNAME)
-AC_SUBST(LIBEXT)
-AC_SUBST(LIBNAME)
-AC_SUBST(LINKFLTK)
-AC_SUBST(LINKFLTKFORMS)
-AC_SUBST(LINKFLTKGL)
-AC_SUBST(LINKFLTKIMG)
-
-AC_SUBST(LIBBASENAME)
-AC_SUBST(FLLIBBASENAME)
-AC_SUBST(GLLIBBASENAME)
-AC_SUBST(IMGLIBBASENAME)
-AC_SUBST(CAIROLIBBASENAME)
-
-has_abiversion=""
-AC_ARG_WITH(abiversion,
-[  --with-abiversion       Build with FL_ABI_VERSION, e.g. 10304 for FLTK 1.3.4])
-has_abiversion="$with_abiversion"
-if test "$has_abiversion" = "yes" ; then
- has_abiversion=""
-else
- if test "$has_abiversion" = "no" ; then
-  has_abiversion=""
- fi
-fi
-if test ! "$has_abiversion" = "" ; then
- AC_DEFINE_UNQUOTED(FL_ABI_VERSION, [$has_abiversion], [define to FL_ABI_VERSION])
-fi
-
-dnl Handle compile-time options...
-AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging [[default=no]]])
-if test x$enable_debug = xyes; then
-    DEBUGFLAG="-g "
-else
-    DEBUGFLAG=""
-fi
-
-AC_ARG_ENABLE(cp936, [  --enable-cp936          turn on CP936 [[default=no]]])
-if test x$enable_cp936 = xyes; then
-    CFLAGS="$CFLAGS -DCP936"
-fi
-
-AC_ARG_ENABLE(gl, [  --enable-gl             turn on OpenGL support [[default=yes]]])
-
-AC_ARG_ENABLE(shared, [  --enable-shared         turn on shared libraries [[default=no]]])
-if test x$enable_shared = xyes; then
-    PICFLAG=1
-    SHAREDSUFFIX=""
-    FLUID="fluid-shared"
-
-    case $host_os in
-	darwin*)
-	    DSONAME="libfltk.$FL_DSO_VERSION.dylib"
-	    FLDSONAME="libfltk_forms.$FL_DSO_VERSION.dylib"
-	    GLDSONAME="libfltk_gl.$FL_DSO_VERSION.dylib"
-	    IMGDSONAME="libfltk_images.$FL_DSO_VERSION.dylib"
-	    CAIRODSONAME="libfltk_cairo.$FL_DSO_VERSION.dylib"
-	    DSOCOMMAND="\$(CXX) \$(ARCHFLAGS) \$(DSOFLAGS) -dynamiclib -lc -o"
-	    ;;
-
-	solaris*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -h \$@ \$(LDLIBS) -G $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib"; then
-		    DSOLINK="-R$libdir"
-	    fi
-	    ;;
-	hpux*)
-	    DSONAME="libfltk.sl.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.sl.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.sl.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.sl.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.sl.$FL_DSO_VERSION"
-	    DSOCOMMAND="ld \$(DSOFLAGS) -b -z +h \$@ $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	irix*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@,-set_version,sgi1.1 \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32" -a "x$libdir" != "x/usr/lib64"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	osf*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	linux* | *bsd*)
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared -fPIC $DEBUGFLAG -o"
-
-	    # See if the compiler supports -fvisibility...
-	    AC_CACHE_CHECK([if the compiler supports -fvisibility],
-		ac_cv_cxx_fvisibility, [
-		    OLDCXXFLAGS="$CXXFLAGS"
-		    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
-		    AC_LANG_PUSH([C++])
-		    AC_COMPILE_IFELSE(
-			[AC_LANG_PROGRAM([[]], [[]])],
-			[ac_cv_cxx_fvisibility=yes],
-			[ac_cv_cxx_fvisibility=no])
-		    CXXFLAGS="$OLDCXXFLAGS"
-		    AC_LANG_POP([])
-	    ])
-	    if test x"$ac_cv_cxx_fvisibility" = xyes; then
-		OPTIM="$OPTIM -fvisibility=hidden"
-	    fi
-
-	    # See if the compiler supports -fvisibility-inlines-hidden...
-	    AC_CACHE_CHECK([if the compiler supports -fvisibility-inlines-hidden],
-		ac_cv_cxx_fvisibility_inlines, [
-		    OLDCXXFLAGS="$CXXFLAGS"
-		    CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
-		    AC_LANG_PUSH([C++])
-		    AC_COMPILE_IFELSE(
-			[AC_LANG_PROGRAM([[]], [[]])],
-			[ac_cv_cxx_fvisibility_inlines=yes],
-			[ac_cv_cxx_fvisibility_inlines=no])
-		    CXXFLAGS="$OLDCXXFLAGS"
-		    AC_LANG_POP([])
-	    ])
-	    if test x"$ac_cv_cxx_fvisibility_inlines" = xyes; then
-		CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
-	    fi
-
-	    if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib64"; then
-		    DSOLINK="-Wl,-rpath,$libdir"
-	    fi
-	    ;;
-	aix*)
-	    DSONAME="libfltk_s.a"
-	    FLDSONAME="libfltk_forms_s.a"
-	    GLDSONAME="libfltk_gl_s.a"
-	    IMGDSONAME="libfltk_images_s.a"
-	    CAIRODSONAME="libfltk_cairo_s.a"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-bexpall,-bM:SRE,-bnoentry -o"
-	    SHAREDSUFFIX="_s"
-	    ;;
-	cygwin* | mingw*)
-	    PICFLAG=0
-	    if test x$enable_cygwin != xyes; then
-		DSONAME="mgwfltknox-$FL_DSO_VERSION.dll"
-		FLDSONAME="mgwfltknox_forms-$FL_DSO_VERSION.dll"
-		GLDSONAME="mgwfltknox_gl-$FL_DSO_VERSION.dll"
-		IMGDSONAME="mgwfltknox_images-$FL_DSO_VERSION.dll"
-		CAIRODSONAME="mgwfltknox_cairo-$FL_DSO_VERSION.dll"
-	    else
-		if test x$enable_x11 = xyes; then
-		    DSONAME="cygfltk-$FL_DSO_VERSION.dll"
-		    FLDSONAME="cygfltk_forms-$FL_DSO_VERSION.dll"
-		    GLDSONAME="cygfltk_gl-$FL_DSO_VERSION.dll"
-		    IMGDSONAME="cygfltk_images-$FL_DSO_VERSION.dll"
-		    CAIRODSONAME="cygfltk_cairo-$FL_DSO_VERSION.dll"
-		else
-		    DSONAME="cygfltknox-$FL_DSO_VERSION.dll"
-		    FLDSONAME="cygfltknox_forms-$FL_DSO_VERSION.dll"
-		    GLDSONAME="cygfltknox_gl-$FL_DSO_VERSION.dll"
-		    IMGDSONAME="cygfltknox_images-$FL_DSO_VERSION.dll"
-		    CAIRODSONAME="cygfltknox_cairo-$FL_DSO_VERSION.dll"
-		fi
-	    fi
-	    #-----------------------------------------------------------
-	    # -Wl,--enable-runtime-pseudo-reloc: See str 1585
-	    # appears to be necessary for older binutils versions < 2.16
-	    #-----------------------------------------------------------
-	    LDFLAGS="$LDFLAGS -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -shared \
-		-Wl,--whole-archive -Wl,--export-all-symbols \
-		-Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-import \
-		-Wl,--enable-auto-image-base -o \$@"
-	    ;;
-	*)
-	    AC_MSG_WARN([Shared libraries may not be supported. Trying -shared option with compiler.])
-	    DSONAME="libfltk.so.$FL_DSO_VERSION"
-	    FLDSONAME="libfltk_forms.so.$FL_DSO_VERSION"
-	    GLDSONAME="libfltk_gl.so.$FL_DSO_VERSION"
-	    IMGDSONAME="libfltk_images.so.$FL_DSO_VERSION"
-	    CAIRODSONAME="libfltk_cairo.so.$FL_DSO_VERSION"
-	    DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
-	    ;;
-    esac
-
-    LINKSHARED="-L../src $FLTKCAIROOPTION -lfltk_images$SHAREDSUFFIX -lfltk_forms$SHAREDSUFFIX -lfltk$SHAREDSUFFIX"
-else
-    DSOCOMMAND="echo"
-    DSOLINK=""
-    DSONAME=""
-    FLDSONAME=""
-    GLDSONAME=""
-    IMGDSONAME=""
-    CAIRODSONAME=""
-    PICFLAG=0
-    SHAREDSUFFIX=""
-    FLUID="fluid"
-    LINKSHARED="$LINKFLTKCAIRO ../lib/libfltk_images.a ../lib/libfltk_forms.a ../lib/libfltk.a"
-fi
-
-AC_SUBST(DSOCOMMAND)
-AC_SUBST(DSOFLAGS)
-AC_SUBST(DSOLINK)
-AC_SUBST(DSONAME)
-AC_SUBST(FLDSONAME)
-AC_SUBST(GLDSONAME)
-AC_SUBST(IMGDSONAME)
-AC_SUBST(CAIRODSONAME)
-AC_SUBST(SHAREDSUFFIX)
-AC_SUBST(LINKSHARED)
-AC_SUBST(FLUID)
-
-AC_ARG_ENABLE(threads, [  --enable-threads        enable multi-threading support [[default=yes]]])
-
-AC_ARG_WITH(optim, [  --with-optim="flags"    use custom optimization flags])
-
-AC_ARG_WITH(archflags, [  --with-archflags="flags"
-			  use custom architecture flags
-			  (possible Mac OS X values include -arch i386, -arch x86_64, -arch ppc)],
-    ARCHFLAGS="$withval")
-
-dnl Find commands...
-AC_PROG_INSTALL
-case $host_os in
-    osf*)
-	INSTALL="`pwd`/install-sh -c"
-	;;
-esac
-if test "$INSTALL" = "$ac_install_sh"; then
-    # Use full path to install-sh script...
-    INSTALL="`pwd`/install-sh -c"
-fi
-AC_PATH_PROG(NROFF,nroff)
-if test "x$NROFF" = "x:"; then
-    # Try groff instead of nroff...
-    AC_PATH_PROG(GROFF,groff)
-    if test "x$GROFF" = "x:"; then
-	NROFF="echo"
-    else
-	NROFF="$GROFF -T ascii"
-    fi
-fi
-AC_PATH_PROG(DOXYDOC,doxygen)
-
-dnl How do we make libraries?
-AC_PROG_RANLIB
-AC_PATH_TOOL(AR, ar)
-
-if test "x$AR" = "x:"; then
-    AC_MSG_ERROR([Configure could not find the library archiver, aborting.])
-fi
-
-if test "x$RANLIB" != "x:"; then
-    LIBCOMMAND="$AR cr"
-else
-    LIBCOMMAND="$AR crs"
-fi
-
-AC_SUBST(LIBCOMMAND)
-
-dnl how to compile (Windows) resource files
-dnl this will only be used to compile resources for Windows .exe files
-AC_PATH_TOOL(RC,windres)
-
-dnl Architecture checks...
-AC_CHECK_SIZEOF(short, 2)
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-if test $ac_cv_sizeof_short -eq 2; then
-    AC_DEFINE(U16,unsigned short)
-fi
-if test $ac_cv_sizeof_int -eq 4; then
-    AC_DEFINE(U32,unsigned)
-else
-    if test $ac_cv_sizeof_long -eq 4; then
-	AC_DEFINE(U32,unsigned long)
-    fi
-fi
-case $host_os in
-    darwin*)
-	;;
-    *)
-	AC_C_BIGENDIAN
-
-	if test $ac_cv_sizeof_int -eq 8; then
-		AC_DEFINE(U64,unsigned)
-	else
-		if test $ac_cv_sizeof_long -eq 8; then
-			AC_DEFINE(U64,unsigned long)
-		fi
-	fi
-	;;
-esac
-
-dnl Does the C++ compiler support the bool type?
-AC_CACHE_CHECK(whether the compiler recognizes bool as a built-in type,
-    ac_cv_cxx_bool,[
-	AC_LANG_PUSH([C++])
-	AC_COMPILE_IFELSE(
-	    [AC_LANG_PROGRAM([[
-		int f(int  x){return 1;}
-		int f(char x){return 1;}
-		int f(bool x){return 1;}
-	      ]], [[
-		bool b = true;
-		return f(b);
-	    ]])],
-	    [ac_cv_cxx_bool=yes],
-	    [ac_cv_cxx_bool=no])
-	AC_LANG_POP([])
-    ])
-
-if test "$ac_cv_cxx_bool" != yes; then
-    CXXFLAGS="-Dbool=char -Dfalse=0 -Dtrue=1 $CXXFLAGS"
-fi
-
-dnl Standard headers and functions...
-AC_HEADER_DIRENT
-AC_CHECK_HEADERS([sys/select.h sys/stdtypes.h])
-
-dnl Do we have the POSIX compatible scandir() prototype?
-AC_CACHE_CHECK([whether we have the POSIX compatible scandir() prototype],
-    ac_cv_cxx_scandir_posix,[
-	AC_LANG_PUSH([C++])
-	AC_COMPILE_IFELSE(
-	    [AC_LANG_PROGRAM(
-		[[#include <dirent.h>
-		  int func (const char *d, dirent ***list, void *sort) {
-		    int n = scandir(d, list, 0, (int(*)(const dirent **, const dirent **))sort);
-		    return n;
-		  }
-		]], [[
-		]])],
-	    [ac_cv_cxx_scandir_posix=yes],
-	    [ac_cv_cxx_scandir_posix=no])
-	AC_LANG_POP([])
-    ])
-
-dnl Define both HAVE_SCANDIR... macros, if the POSIX compatible function is
-dnl available. Otherwise: check, whether any scandir prototype is available,
-dnl but dont use it on SunOS and QNX because of an incompatibility in pre-Y2K
-dnl SunOS scandir versions. We assume, though, that the POSIX compatible
-dnl version on newer SunOS/Solaris versions works as expected.
-if test "$ac_cv_cxx_scandir_posix" = yes; then
-    AC_DEFINE(HAVE_SCANDIR)
-    AC_DEFINE(HAVE_SCANDIR_POSIX)
-else
-    AC_CHECK_FUNC(scandir,[
-	case $host_os in
-	    solaris* | *qnx*)
-		AC_MSG_WARN([Not using $host_os scandir emulation function.])
-		;;
-	    *)
-		AC_DEFINE(HAVE_SCANDIR)
-		;;
-	esac])
-fi
-
-AC_CHECK_FUNC(vsnprintf,[
-    case $host_os in
-	hpux1020)
-	    AC_MSG_WARN([Not using built-in vsnprintf function because you are running HP-UX 10.20.])
-	    ;;
-	osf4)
-	    AC_MSG_WARN([Not using built-in vsnprintf function because you are running Tru64 4.0.])
-	    ;;
-	*)
-	    AC_DEFINE(HAVE_VSNPRINTF)
-	    ;;
-    esac])
-AC_CHECK_FUNC(snprintf,[
-    case $host_os in
-	hpux1020)
-	    AC_MSG_WARN([Not using built-in snprintf function because you are running HP-UX 10.20.])
-	    ;;
-	osf4)
-	    AC_MSG_WARN([Not using built-in snprintf function because you are running Tru64 4.0.])
-	    ;;
-	*)
-	    AC_DEFINE(HAVE_SNPRINTF)
-	    ;;
-    esac])
-AC_CHECK_HEADERS(strings.h)
-AC_CHECK_FUNCS(strcasecmp strlcat strlcpy)
-
-AC_CHECK_HEADERS(locale.h)
-AC_CHECK_FUNCS(localeconv)
-
-dnl FLTK library uses math library functions...
-AC_SEARCH_LIBS(pow, m)
-
-dnl Check for largefile support...
-AC_SYS_LARGEFILE
-
-dnl Define largefile options as needed...
-LARGEFILE=""
-if test x$enable_largefile != xno; then
-	LARGEFILE="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
-
-	if test x$ac_cv_sys_large_files = x1; then
-		LARGEFILE="$LARGEFILE -D_LARGE_FILES"
-	fi
-
-	if test x$ac_cv_sys_file_offset_bits = x64; then
-		LARGEFILE="$LARGEFILE -D_FILE_OFFSET_BITS=64"
-	fi
-fi
-AC_SUBST(LARGEFILE)
-
-dnl Check for "long long" support...
-AC_CACHE_CHECK(for long long int, ac_cv_c_long_long,
-	[if test "$GCC" = yes; then
-		ac_cv_c_long_long=yes
-	else
-		AC_COMPILE_IFELSE(
-		    [AC_LANG_PROGRAM([[]],
-			[[long long int i;]])],
-		    [ac_cv_c_long_long=yes],
-		    [ac_cv_c_long_long=no])
-	fi])
-
-if test $ac_cv_c_long_long = yes; then
-	AC_DEFINE(HAVE_LONG_LONG)
-fi
-
-dnl Check for dlopen/dlsym...
-AC_SEARCH_LIBS(dlsym, dl, AC_DEFINE(HAVE_DLSYM))
-AC_CHECK_HEADER(dlfcn.h, AC_DEFINE(HAVE_DLFCN_H))
-
-dnl Check for audio libraries...
-AUDIOLIBS=""
-
-case $host_os in
-    cygwin* | mingw*)
-	dnl Cygwin environment...
-	AUDIOLIBS="-lwinmm"
-	;;
-
-    darwin*)
-	AUDIOLIBS="-framework CoreAudio"
-	;;
-
-    *)
-	AC_CHECK_HEADER(alsa/asoundlib.h,
-	    AC_DEFINE(HAVE_ALSA_ASOUNDLIB_H)
-	    AUDIOLIBS="-lasound")
-	;;
-esac
-
-AC_SUBST(AUDIOLIBS)
-
-dnl Check for image libraries...
-SAVELIBS="$LIBS"
-IMAGELIBS=""
-STATICIMAGELIBS=""
-
-AC_SUBST(IMAGELIBS)
-AC_SUBST(STATICIMAGELIBS)
-
-# Handle the JPEG lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localjpeg parameter is not set by user
-# Then we check the JPEG lib usability, with result in sysjpeglib_ok variable
-AC_ARG_ENABLE(localjpeg, [  --enable-localjpeg      use local JPEG library [[default=auto]]])
-# Check for System lib use if automatic mode or --disable-localjpeg is requested
-sysjpeglib_ok=no
-sysjpeginc_ok=no
-if test x$enable_localjpeg != xyes; then
-    AC_CHECK_LIB(jpeg,jpeg_CreateCompress,
-	[AC_CHECK_HEADER(jpeglib.h,
-	    sysjpeginc_ok=yes)
-	    if test x$sysjpeginc_ok = xyes; then
-		sysjpeglib_ok=yes
-	    fi])
-fi
-# Now set the jpeg lib and include flags according to the requested mode and availability
-if test x$enable_localjpeg = xyes -o x$sysjpeglib_ok = xno; then
-    JPEGINC="-I../jpeg"
-    JPEG="jpeg"
-    IMAGELIBS="-lfltk_jpeg $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_jpeg.a $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBJPEG)
-    #ac_cv_lib_jpeg_jpeg_CreateCompress=no # from ima: should not be necessary
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localjpeg = xno; then
-	AC_MSG_WARN([Cannot find system jpeg lib or header: choosing the local lib mode.])
-    fi
-else
-    JPEGINC=""
-    JPEG=""
-    IMAGELIBS="-ljpeg $IMAGELIBS"
-    STATICIMAGELIBS="-ljpeg $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBJPEG)
-fi
-
-# Handle the ZLIB lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localzlib parameter is not set by user
-# Then we check the ZLIB lib usability, with result in syszlib_ok variable
-AC_ARG_ENABLE(localzlib, [  --enable-localzlib      use local ZLIB library [[default=auto]]])
-# Check for System lib use if automatic mode or --disable-localzlib is requested
-syszlib_ok=no
-syszinc_ok=no
-if test x$enable_localzlib != xyes; then
-    AC_CHECK_LIB(z,gzgets,
-	[AC_CHECK_HEADER(zlib.h,
-		syszinc_ok=yes)
-	if test x$syszinc_ok = xyes; then
-	    syszlib_ok=yes
-	fi])
-fi
-# Now set the Z lib and include flags according to the requested mode and availability
-if test x$enable_localzlib = xyes -o x$syszlib_ok = xno ; then
-    ZLIBINC="-I../zlib"
-    ZLIB="zlib"
-    LIBS="-lfltk_z $LIBS"
-    IMAGELIBS="-lfltk_z $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_z.a $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBZ)
-    ac_cv_lib_z_gzgets=no # fc: is still necessary ?
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localzlib = xno; then
-	AC_MSG_WARN([Cannot find system z lib or header: choosing the local lib mode.])
-    fi
-else
-    ZLIBINC=""
-    ZLIB=""
-    LIBS="-lz $LIBS"
-    IMAGELIBS="-lz $IMAGELIBS"
-    STATICIMAGELIBS="-lz $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBZ)
-fi
-
-# Handle the PNG lib linking mode (use fltk local or system lib)
-# If --enable-(resp. --disable-)localpng parameter is not set by user
-# Then we check the png lib usability with result in syspng_lib variable
-AC_ARG_ENABLE(localpng, [  --enable-localpng       use local PNG library  [[default=auto]]])
-
-# Now check if system lib is usable, we check Lib AND include availability with inc variant,
-# but only, if the builtin lib is not requested
-syspnglib_ok=no
-syspnginc_ok=no
-if test x$enable_localpng != xyes; then
-  AC_CHECK_LIB(png, png_read_info,
-    [AC_CHECK_HEADER(png.h,
-	AC_DEFINE(HAVE_PNG_H)
-	syspnginc_ok=yes)
-    AC_CHECK_HEADER(libpng/png.h,
-	AC_DEFINE(HAVE_LIBPNG_PNG_H)
-	syspnginc_ok=yes)
-    if test x$syspnginc_ok = xyes; then
-	syspnglib_ok=yes
-    fi])
-fi
-
-# The following is executed if the lib was not found usable or if local lib is required explicitly
-if test x$enable_localpng = xyes -o x$syspnglib_ok = xno ; then
-    PNGINC="-I../png"
-    PNG="png"
-    IMAGELIBS="-lfltk_png $IMAGELIBS"
-    STATICIMAGELIBS="\$libdir/libfltk_png.a $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBPNG)
-    AC_DEFINE(HAVE_PNG_H)
-    AC_DEFINE(HAVE_PNG_GET_VALID)
-    AC_DEFINE(HAVE_PNG_SET_TRNS_TO_ALPHA)
-    # Finally, warn user if system lib was requested but not found
-    if test x$enable_localpng = xno; then
-	AC_MSG_WARN([Cannot find system png lib or header: choosing the local lib mode.])
-    fi
-else
-    PNGINC=""
-    PNG=""
-    IMAGELIBS="-lpng $IMAGELIBS"
-    STATICIMAGELIBS="-lpng $STATICIMAGELIBS"
-    AC_DEFINE(HAVE_LIBPNG)
-    AC_CHECK_LIB(png,png_get_valid, AC_DEFINE(HAVE_PNG_GET_VALID))
-    AC_CHECK_LIB(png,png_set_tRNS_to_alpha, AC_DEFINE(HAVE_PNG_SET_TRNS_TO_ALPHA))
-fi
-
-AC_SUBST(JPEG)
-AC_SUBST(JPEGINC)
-AC_SUBST(PNG)
-AC_SUBST(PNGINC)
-AC_SUBST(ZLIB)
-AC_SUBST(ZLIBINC)
-
-dnl Restore original LIBS settings...
-LIBS="$SAVELIBS"
-
-dnl See if we need a .exe extension on executables...
-AC_EXEEXT
-
-dnl Check for pthreads for multi-threaded apps...
-have_pthread=no
-PTHREAD_FLAGS=""
-
-dnl Test whether we want to check for pthreads. We must not do it on Windows
-dnl unless we run under Cygwin with --enable-cygwin, since we always use
-dnl native threads on Windows (even if libpthread is available)
-check_pthread=yes
-case $host_os in
-    mingw*)
-	check_pthread=no
-	;;
-    cygwin*)
-	if test "x$enable_cygwin" != xyes; then
-	    check_pthread=no
-	fi
-	;;
-    *)
-	;;
-esac
-
-if test "x$enable_threads" != xno -a x$check_pthread = xyes; then
-    AC_CHECK_HEADERS(pthread.h)
-
-    if test x$ac_cv_header_pthread_h = xyes; then
-	dnl Check various threading options for the platforms we support
-	for flag in -lpthreads -lpthread -pthread; do
-	    AC_MSG_CHECKING([for pthread_create using $flag])
-	    SAVELIBS="$LIBS"
-	    LIBS="$flag $LIBS"
-	    AC_LINK_IFELSE(
-		[AC_LANG_PROGRAM(
-		    [[#include <pthread.h>]],
-		    [[pthread_create(0, 0, 0, 0);]])],
-		[have_pthread=yes],
-		[LIBS="$SAVELIBS"])
-	    AC_MSG_RESULT([$have_pthread])
-
-	    if test $have_pthread = yes; then
-		AC_DEFINE(HAVE_PTHREAD)
-		PTHREAD_FLAGS="-D_THREAD_SAFE -D_REENTRANT"
-
-		# Solaris requires -D_POSIX_PTHREAD_SEMANTICS to
-		# be POSIX-compliant... :(
-		case $host_os in
-		    solaris*)
-			PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS"
-			;;
-		esac
-		break
-	    fi
-	done
-    fi
-fi
-
-AC_SUBST(PTHREAD_FLAGS)
-
-dnl Define OS-specific stuff...
-HLINKS=
-OSX_ONLY=:
-THREADS=
-
-AC_ARG_WITH(links, [  --with-links            make header links for common misspellings [[default=no]]])
-
-INSTALL_DESKTOP=""
-UNINSTALL_DESKTOP=""
-
-case $host_os_gui in
-    cygwin* | mingw*)
-	dnl Cygwin environment, using windows GDI ...
-	# Recent versions of Cygwin are seriously broken and the size
-	# checks don't work because the shell puts out \r\n instead of
-	# \n.  Here we just force U32 to be defined to "unsigned"...
-	AC_DEFINE(U32,unsigned)
-	CFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CFLAGS"
-	CXXFLAGS="-mwindows -DWIN32 -DUSE_OPENGL32 $CXXFLAGS"
-	LDFLAGS="-mwindows $LDFLAGS"
-	DSOFLAGS="-mwindows $DSOFLAGS"
-	LIBS="$LIBS -lole32 -luuid -lcomctl32"
-	if test "x$with_optim" = x; then
-	    dnl Avoid -Os optimization on Cygwin/MinGW
-	    with_optim="-O3"
-	fi
-
-	if test x$enable_gl != xno; then
-	    AC_CHECK_HEADER(GL/gl.h,
-		AC_DEFINE(HAVE_GL)
-		GLLIB="-lopengl32")
-	    AC_CHECK_HEADER(GL/glu.h,
-		AC_DEFINE(HAVE_GL_GLU_H)
-		GLLIB="-lglu32 $GLLIB")
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-	if test "x$enable_threads" != xno; then
-	    if test x$have_pthread = xyes; then
-		AC_DEFINE(HAVE_PTHREAD)
-	    fi
-	fi
-
-	THREADS="threads$EXEEXT"
-
-	# Don't make symlinks since Windows is not case sensitive.
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-	;;
-
-    darwin*)
-	AC_DEFINE(__APPLE_QUARTZ__)
-
-	USEMMFILES="Yes"
-
-	# MacOS X uses Cocoa for graphics.
-	LIBS="$LIBS -framework Cocoa"
-
-	if test x$have_pthread = xyes; then
-	    AC_DEFINE(HAVE_PTHREAD)
-	    THREADS="threads$EXEEXT"
-	fi
-
-	if test x$enable_gl != xno; then
-	    AC_DEFINE(HAVE_GL)
-	    AC_DEFINE(HAVE_GL_GLU_H)
-	    GLLIB="-framework OpenGL"
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-	# Don't make symlinks because HFS+ is not case sensitive...
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-
-	# Some steps are only done for OS X package management
-	OSX_ONLY=
-
-	# Install/Uninstall FLUID application
-	INSTALL_DESKTOP="install-osx"
-	UNINSTALL_DESKTOP="uninstall-osx"
-	;;
-
-    *)
-	# All others are UNIX/X11...
-	# This includes Cygwin target combined with X11
-	if test x$have_pthread = xyes; then
-	    AC_DEFINE(HAVE_PTHREAD)
-	    THREADS="threads$EXEEXT"
-	fi
-
-	dnl Check for X11...
-	AC_PATH_XTRA
-
-	if test x$no_x = xyes; then
-	    AC_MSG_ERROR([Configure could not find required X11 libraries, aborting.])
-	fi
-
-	if test "x$X_PRE_LIBS" != x; then
-	    AC_MSG_WARN([Ignoring libraries "$X_PRE_LIBS" requested by configure.])
-	fi
-
-	LIBS="$LIBS -lX11 $X_EXTRA_LIBS"
-	CFLAGS="$CFLAGS $X_CFLAGS"
-	CXXFLAGS="$CXXFLAGS $X_CFLAGS"
-	LDFLAGS="$X_LIBS $LDFLAGS"
-	DSOFLAGS="$X_LIBS $DSOFLAGS"
-	AC_DEFINE(USE_X11)
-	if test "x$x_includes" != x; then
-	    ac_cpp="$ac_cpp -I$x_includes"
-	fi
-
-	dnl Check for OpenGL unless disabled...
-	GLLIB=
-
-	if test x$enable_gl != xno; then
-	    AC_SEARCH_LIBS(dlopen, dl)
-	    AC_CHECK_HEADER(GL/gl.h,
-		AC_CHECK_LIB(GL, glXMakeCurrent,
-		    [AC_DEFINE(HAVE_GL)
-		     GLLIB="-lGL"],
-		    AC_CHECK_LIB(MesaGL, glXMakeCurrent,
-			[AC_DEFINE(HAVE_GL)
-			 GLLIB="-lMesaGL"],,
-			[-lm]),
-		    [-lm])
-		AC_CHECK_LIB(GL, glXGetProcAddressARB,
-		    AC_DEFINE(HAVE_GLXGETPROCADDRESSARB),, [-lm])
-	    )
-	    AC_CHECK_HEADER(GL/glu.h,
-		AC_DEFINE(HAVE_GL_GLU_H)
-		if test x$ac_cv_lib_GL_glXMakeCurrent = xyes; then
-		    GLLIB="-lGLU $GLLIB"
-		fi
-		if test x$ac_cv_lib_MesaGL_glXMakeCurrent = xyes; then
-		    GLLIB="-lMesaGLU $GLLIB"
-		fi
-	    )
-
-	    if test x$ac_cv_lib_GL_glXMakeCurrent != xyes -a x$ac_cv_lib_MesaGL_glXMakeCurrent != xyes; then
-		LINKFLTKGL=""
-		GLLIBNAME=""
-		GLDSONAME=""
-		GLDEMOS=""
-	    fi
-	else
-	    LINKFLTKGL=""
-	    GLLIBNAME=""
-	    GLDSONAME=""
-	    GLDEMOS=""
-	fi
-
-	dnl Check for Xinerama support unless disabled...
-	AC_ARG_ENABLE(xinerama, [  --enable-xinerama       turn on Xinerama support [[default=yes]]])
-
-	xinerama_found=no
-	if test x$enable_xinerama != xno; then
-	    AC_CHECK_LIB(Xinerama, XineramaIsActive,
-		[AC_DEFINE(HAVE_XINERAMA)
-		 LIBS="-lXinerama $LIBS"
-		 xinerama_found=yes])
-	fi
-
-	dnl Check for the Xft library unless disabled...
-	AC_ARG_ENABLE(xft, [  --enable-xft            turn on Xft support [[default=yes]]])
-
-	xft_found=no
-	if test x$enable_xft != xno; then
-            # Try pkg-config first (freetype2 deprecated freetype-config from some version on)
-            AC_PATH_PROG(PKGCONFIG, pkg-config)
-            FT_FLAGS=""
-            if test "x$PKGCONFIG" != x; then
-                FT_FLAGS="`$PKGCONFIG --cflags xft`"
-                if test "x$FT_FLAGS" = x; then
-                    FT_FLAGS="`$PKGCONFIG --cflags freetype2`"
-                fi
-            fi
-            # if that failed, try freetype-config
-            if test "x$FT_FLAGS" = x; then
-                AC_PATH_PROG(FTCONFIG, freetype-config)
-                if test "x$FTCONFIG" != x; then
-                    FT_FLAGS="`$FTCONFIG --cflags`"
-                else
-                    # abort if both methods failed
-                    AC_MSG_NOTICE([please install pkg-config or use 'configure --disable-xft'.])
-                    AC_MSG_ERROR([Aborting.])
-                fi
-            fi
-            CPPFLAGS="$FT_FLAGS $CPPFLAGS"
-            CXXFLAGS="$FT_FLAGS $CXXFLAGS"
-            CFLAGS="$FT_FLAGS $CFLAGS"
-
-            AC_CHECK_LIB(fontconfig, FcPatternCreate)
-            AC_CHECK_HEADER(X11/Xft/Xft.h,
-		    AC_CHECK_LIB(Xft, XftDrawCreate,
-			[AC_DEFINE(USE_XFT)
-			 LIBS="-lXft $LIBS"
-			 xft_found=yes] ))
-	fi
-
-	dnl Issue a warning message if Xft was not found, abort configure
-	dnl if Xft was requested explicitly (but not found)
-	if test x$enable_xft != xno -a x$xft_found != xyes; then
-	    AC_MSG_WARN([could not find the required Xft headers and/or libraries.])
-	    AC_MSG_NOTICE([please install Xft headers and libraries or use 'configure --disable-xft'.])
-	    if test x$enable_xft = xyes; then
-		AC_MSG_ERROR([Aborting.])
-	    fi
-	fi
-
-	dnl Check for the Xdbe extension unless disabled...
-	AC_ARG_ENABLE(xdbe, [  --enable-xdbe           turn on Xdbe support [[default=yes]]])
-
-	xdbe_found=no
-	if test x$enable_xdbe != xno; then
-	    AC_CHECK_HEADER(
-		[X11/extensions/Xdbe.h],
-		[AC_CHECK_LIB(Xext, XdbeQueryExtension,
-		    [AC_DEFINE(HAVE_XDBE)
-		     LIBS="-lXext $LIBS"
-		     xdbe_found=yes])],
-		[],
-		[#include <X11/Xlib.h>])
-	fi
-
-	dnl Check for the Xfixes extension unless disabled...
-	AC_ARG_ENABLE(xfixes, [  --enable-xfixes         turn on Xfixes support [[default=yes]]])
-
-	xfixes_found=no
-	if test x$enable_xfixes != xno; then
-	    AC_CHECK_HEADER(
-		[X11/extensions/Xfixes.h],
-		[AC_CHECK_LIB(Xfixes, XFixesQueryExtension,
-		    [AC_DEFINE(HAVE_XFIXES)
-		     LIBS="-lXfixes $LIBS"
-		     xfixes_found=yes])],
-		[],
-		[#include <X11/Xlib.h>])
-	fi
-
-	dnl Check for the Xcursor library unless disabled...
-	AC_ARG_ENABLE(xcursor, [  --enable-xcursor        turn on Xcursor support [[default=yes]]])
-
-	xcursor_found=no
-	if test x$enable_xcursor != xno; then
-	    AC_CHECK_HEADER(
-		[X11/Xcursor/Xcursor.h],
-		[AC_CHECK_LIB(Xcursor, XcursorImageCreate,
-		    [AC_DEFINE(HAVE_XCURSOR)
-		     LIBS="-lXcursor $LIBS"
-		     xcursor_found=yes])],
-		[],
-		[#include <X11/Xlib.h>])
-	fi
-
-	dnl Check for the Xrender library unless disabled...
-	AC_ARG_ENABLE(xrender, [  --enable-xrender        turn on Xrender support [[default=yes]]])
-
-	xrender_found=no
-	if test x$enable_xrender != xno; then
-	    AC_CHECK_HEADER(
-		[X11/extensions/Xrender.h],
-		[AC_CHECK_LIB(Xrender, XRenderQueryVersion,
-		    [AC_DEFINE(HAVE_XRENDER)
-		     LIBS="-lXrender $LIBS"
-		     xrender_found=yes])],
-		[],
-		[#include <X11/Xlib.h>])
-	fi
-
-	dnl Check for the X11/Xregion.h header file...
-	AC_CHECK_HEADER(X11/Xregion.h, AC_DEFINE(HAVE_X11_XREGION_H),,
-	    [#include <X11/Xlib.h>])
-
-	dnl Check for overlay visuals...
-	AC_PATH_PROG(XPROP, xprop)
-	AC_CACHE_CHECK(for X overlay visuals, ac_cv_have_overlay,
-	    if test "x$XPROP" != x; then
-		if $XPROP -root 2>/dev/null | grep -c "SERVER_OVERLAY_VISUALS" >/dev/null; then
-		    ac_cv_have_overlay=yes
-		else
-		    ac_cv_have_overlay=no
-		fi
-	    else
-		ac_cv_have_overlay=no
-	    fi)
-
-	if test x$ac_cv_have_overlay = xyes; then
-	    AC_DEFINE(HAVE_OVERLAY)
-	fi
-
-	# Make symlinks since UNIX/Linux is case sensitive,
-	# but Cygwin in general not.
-	case $host_os in
-	    cygwin*)
-		HLINKS="#"
-	    ;;
-	    *)
-	    ;;
-	esac
-	# Make symlinks since UNIX/Linux is case sensitive,
-	# but only if explicitly configured (default=no)
-	if test "x$with_links" != xyes; then
-		HLINKS="#"
-	fi
-
-	# Install/Uninstall FLUID application support files
-	INSTALL_DESKTOP="install-linux"
-	UNINSTALL_DESKTOP="uninstall-linux"
-	;;
-esac
-
-AC_SUBST(GLDEMOS)
-AC_SUBST(GLLIB)
-AC_SUBST(HLINKS)
-AC_SUBST(OSX_ONLY)
-AC_SUBST(THREADS)
-
-AC_SUBST(INSTALL_DESKTOP)
-AC_SUBST(UNINSTALL_DESKTOP)
-
-AC_SUBST(USEMMFILES)
-
-dnl Figure out the appropriate formatted man page extension...
-case "$host_os" in
-    *bsd* | darwin*)
-	# *BSD
-	CAT1EXT=0
-	CAT3EXT=0
-	CAT6EXT=0
-	;;
-    irix*)
-	# SGI IRIX
-	CAT1EXT=z
-	CAT3EXT=z
-	CAT6EXT=z
-	;;
-    *)
-	# All others
-	CAT1EXT=1
-	CAT3EXT=3
-	CAT6EXT=6
-	;;
-esac
-
-AC_SUBST(CAT1EXT)
-AC_SUBST(CAT3EXT)
-AC_SUBST(CAT6EXT)
-
-dnl Fix "mandir" variable...
-if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/usr"; then
-    case "$host_os" in
-	*bsd* | darwin* | linux*)
-	    # *BSD, Darwin, and Linux
-	    mandir="\${prefix}/share/man"
-	    ;;
-	irix*)
-	    # SGI IRIX
-	    mandir="\${prefix}/share/catman"
-	    ;;
-    esac
-fi
-
-dnl Fix "libdir" variable...
-if test "$prefix" = NONE; then
-    prefix=/usr/local
-fi
-
-if test "$exec_prefix" = NONE; then
-    exec_prefix="\${prefix}"
-fi
-
-case $host_os in
-    irix[1-5]*)
-	;;
-    irix*)
-	if test "$libdir" = "\${exec_prefix}/lib" -a "$exec_prefix" = "\${prefix}" -a "$prefix" = "/usr"; then
-	    libdir="/usr/lib32"
-	fi
-	;;
-esac
-
-dnl Define the command used to update the dependencies (this option
-dnl mainly for FLTK core developers - not necessary for users)
-MAKEDEPEND="\$(CXX) -M"
-AC_SUBST(MAKEDEPEND)
-
-dnl Add warnings to compiler switches:
-dnl do this last so messing with switches does not break tests
-
-if test -n "$GCC"; then
-    # Show all standard warnings + unused variables, conversion errors,
-    # and inlining problems when compiling...
-    OPTIM="-Wall -Wunused -Wno-format-y2k $OPTIM"
-
-    # The following additional warnings are useful for tracking down problems...
-    #OPTIM="-Wshadow -Wconversion $OPTIM"
-
-    # We know that Carbon is deprecated on OS X 10.4. To avoid hundreds of warnings
-    # we will temporarily disable 'deprecated' warnings on OS X.
-    case $host_os in
-	darwin[1-7])
-	    ;;
-	darwin*)
-	    OPTIM="-Wno-deprecated-declarations $OPTIM"
-	    ;;
-    esac
-
-    # Set the default compiler optimizations...
-    if test -z "$DEBUGFLAG"; then
-	#
-	# Note: Can't use -fomit-frame-pointer - prevents tools like
-	#       libsafe from working!
-	#
-	#       Don't use -fforce-mem, -fforce-addr, or -fcaller-saves.
-	#       They all seem to make either no difference or enlarge
-	#       the code by a few hundred bytes.
-	#
-	#       "-Os" seems to be the best compromise between speed and
-	#       code size.  "-O3" and higher seem to make no effective
-	#       difference in the speed of the code, but does bloat the
-	#       library 10+%.
-	#
-
-	if test "x$with_optim" != x; then
-	    OPTIM="$with_optim $OPTIM"
-	else
-	    OPTIM="-Os $OPTIM"
-	fi
-    fi
-
-    # Generate position-independent code when needed...
-    if test $PICFLAG = 1; then
-	OPTIM="$OPTIM -fPIC"
-    fi
-
-    # See if GCC supports -fno-exceptions...
-    AC_MSG_CHECKING([if GCC supports -fno-exceptions])
-    OLDCFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS -fno-exceptions"
-    AC_COMPILE_IFELSE(
-	[AC_LANG_PROGRAM([[]], [[]])],
-	[OPTIM="$OPTIM -fno-exceptions"
-	 AC_MSG_RESULT(yes)],
-	[AC_MSG_RESULT(no)])
-    CFLAGS="$OLDCFLAGS"
-
-    # See if GCC supports -fno-strict-aliasing...
-    AC_MSG_CHECKING([if GCC supports -fno-strict-aliasing])
-    OLDCFLAGS="$CFLAGS"
-    CFLAGS="$CFLAGS -fno-strict-aliasing"
-    AC_COMPILE_IFELSE(
-	[AC_LANG_PROGRAM([[]], [[]])],
-	[OPTIM="$OPTIM -fno-strict-aliasing"
-	 AC_MSG_RESULT(yes)],
-	[AC_MSG_RESULT(no)])
-    CFLAGS="$OLDCFLAGS"
-
-dnl Make sure that shared libraries don't have undefined references
-    # See if ld supports -no-undefined...
-    AC_MSG_CHECKING([if ld supports -no-undefined])
-    OLDLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-no-undefined"
-    AC_LINK_IFELSE(
-	[AC_LANG_PROGRAM([[]], [[]])],
-	[DSOFLAGS="$DSOFLAGS -Wl,-no-undefined"
-	 AC_MSG_RESULT(yes)],
-	[AC_MSG_RESULT(no)])
-    LDFLAGS="$OLDLDFLAGS"
-
-    # See if ld supports -Bsymbolic-functions...
-    AC_MSG_CHECKING([if ld supports -Bsymbolic-functions])
-    OLDLDFLAGS="$LDFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions"
-    AC_LINK_IFELSE(
-	[AC_LANG_PROGRAM([[]], [[]])],
-	[DSOFLAGS="$DSOFLAGS -Wl,-Bsymbolic-functions"
-	 AC_MSG_RESULT(yes)],
-	[AC_MSG_RESULT(no)])
-    LDFLAGS="$OLDLDFLAGS"
-
-    # See if toolchain supports a sectioned build...
-    AC_MSG_CHECKING([if toolchain supports sections])
-    OLDLDFLAGS="$LDFLAGS"
-    OLDCFLAGS="$CFLAGS"
-    LDFLAGS="$LDFLAGS -Wl,-gc-sections"
-    CFLAGS="$CFLAGS -ffunction-sections -fdata-sections"
-    AC_LINK_IFELSE(
-	[AC_LANG_PROGRAM([[]], [[]])],
-	[DSOFLAGS="$DSOFLAGS -Wl,-gc-sections"
-	 OPTIM="$OPTIM -ffunction-sections -fdata-sections"
-	 AC_MSG_RESULT(yes)],
-	[AC_MSG_RESULT(no)])
-    LDFLAGS="$OLDLDFLAGS"
-    CFLAGS="$OLDCFLAGS"
-
-    # See if we are running Solaris; if so, try the -fpermissive option...
-    # This option is required on some versions of Solaris to work around
-    # bugs in the X headers up through Solaris 7.
-    #
-    # Unlike the other compiler/optimization settings, this one is placed
-    # in CFLAGS and CXXFLAGS so that fltk-config will provide the option
-    # to clients - otherwise client apps will not compile properly...
-    case $host_os in
-	solaris*)
-	    AC_MSG_CHECKING([if GCC supports -fpermissive])
-
-	    OLDCFLAGS="$CFLAGS"
-	    CFLAGS="$CFLAGS -fpermissive"
-	    AC_COMPILE_IFELSE(
-		[AC_LANG_PROGRAM([[]], [[]])],
-		[CXXFLAGS="$CXXFLAGS -fpermissive"
-		 AC_MSG_RESULT(yes)],
-		[CFLAGS="$OLDCFLAGS"
-		 AC_MSG_RESULT(no)])
-	    ;;
-    esac
-else
-    case "$host_os" in
-	irix*)
-	    # Running some flavor of IRIX; see which version and
-	    # set things up according...
-	    if test "$uversion" -ge 62; then
-		# We are running IRIX 6.2 or higher; uncomment the following
-		# lines if you don't have IDO 7.2 or higher:
-		#
-		#     CXX="CC -n32 -mips3"
-		#     CC="cc -n32 -mips3"
-		#     LD="ld -n32 -mips3"
-		#     MAKEDEPEND="CC -M"
-
-		if test "x`grep abi=n32 /etc/compiler.defaults`" = x; then
-			AC_MSG_WARN([FOR BEST RESULTS BEFORE COMPILING: setenv SGI_ABI "-n32 -mips3"])
-		fi
-
-		OPTIM="-fullwarn $OPTIM"
-	    fi
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		    if test $uversion -gt 62; then
-			OPTIM="-OPT:Olimit=4000 $OPTIM"
-		    fi
-		fi
-	    fi
-	    ;;
-	hpux*)
-	    # Running HP-UX; these options should work for the HP compilers.
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="+O2 $OPTIM"
-		fi
-	    fi
-
-	    if test $PICFLAG = 1; then
-		OPTIM="+z $OPTIM"
-	    fi
-
-	    CXXFLAGS="$CXXFLAGS +W336,501,736,740,749,829"
-	    ;;
-	OSF1*)
-	    # Running Digital/Tru64 UNIX; these options should work for the
-	    # Digital/Compaq/NewHP compilers.
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		fi
-	    fi
-	    ;;
-	solaris*)
-	    # Solaris
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-xO3 $OPTIM"
-		fi
-	    fi
-
-	    if test $PICFLAG = 1; then
-		OPTIM="-KPIC $OPTIM"
-	    fi
-	    ;;
-	aix*)
-	    if test -z "$DEBUGFLAG"; then
-		if test "x$with_optim" != x; then
-		    OPTIM="$with_optim $OPTIM"
-		else
-		    OPTIM="-O2 $OPTIM"
-		fi
-	    fi
-
-	    AC_MSG_WARN([The AIX C and C++ compilers are known not to correctly compile the FLTK library.])
-	    ;;
-	*)
-	    # Running some other operating system; inform the user they
-	    # should contribute the necessary options via the STR form..
-	    AC_MSG_WARN([Building FLTK with default compiler optimizations])
-	    AC_MSG_WARN([Send the FLTK developers your uname and compiler options via http://www.fltk.org/str.php])
-	    ;;
-    esac
-fi
-
-OPTIM="$DEBUGFLAG $OPTIM"
-
-dnl Take archflags away from CFLAGS (makefiles use ARCHFLAGS explicitly)
-case $host_os in
-    darwin*)
-	if test "x$with_archflags" != x ; then
-	    CFLAGS="`echo $CFLAGS | sed -e "s/$with_archflags//g"`"
-	fi
-	;;
-esac
-
-dnl Define the FLTK documentation directory...
-case $host_os in
-  mingw*)
-     # Determine the path where MSys has /usr installed
-	msyspath=`mount | grep '\/usr ' | cut -d ' ' -f -1 | sed -e 's/\\\/\// g'`
-     # Then substitute that in the WIN32 path instead of /usr
-	AC_DEFINE_UNQUOTED(FLTK_DOCDIR, "$msyspath/local/share/doc/fltk")
-    ;;
-  *)
-    if test x$prefix = xNONE; then
-	AC_DEFINE_UNQUOTED(FLTK_DOCDIR, "/usr/local/share/doc/fltk")
-    else
-	AC_DEFINE_UNQUOTED(FLTK_DOCDIR, "$prefix/share/doc/fltk")
-    fi
-    ;;
-esac
-
-dnl Define the FLTK data directory...
-if test x$prefix = xNONE; then
-    AC_DEFINE_UNQUOTED(FLTK_DATADIR, "/usr/local/share/fltk")
-else
-    AC_DEFINE_UNQUOTED(FLTK_DATADIR, "$prefix/share/fltk")
-fi
-
-dnl Summarize results of configure tests...
-echo ""
-echo "Configuration Summary"
-echo "-------------------------------------------------------------------------"
-
-case $host_os_gui in
-    cygwin* | mingw*)
-	graphics="GDI"
-	;;
-    darwin*)
-	graphics="Quartz"
-	;;
-    *)
-	graphics="X11"
-	if test x$xft_found = xyes; then
-	    graphics="$graphics + Xft"
-	fi
-	if test x$xdbe_found = xyes; then
-	    graphics="$graphics + Xdbe"
-	fi
-	if test x$xfixes_found = xyes; then
-	    graphics="$graphics + Xfixes"
-	fi
-	if test x$xinerama_found = xyes; then
-	    graphics="$graphics + Xinerama"
-	fi
-	if test x$xcursor_found = xyes; then
-	    graphics="$graphics + Xcursor"
-	fi
-	if test x$xrender_found = xyes; then
-	    graphics="$graphics + Xrender"
-	fi
-	;;
-esac
-
-echo "    Directories: prefix=$prefix"
-echo "                 bindir=$bindir"
-echo "                 datadir=$datadir"
-echo "                 datarootdir=$datarootdir"
-echo "                 exec_prefix=$exec_prefix"
-echo "                 includedir=$includedir"
-echo "                 libdir=$libdir"
-echo "                 mandir=$mandir"
-case $host_os in
-  mingw*)
-    echo "                 MSys docpath=$msyspath/local/share/doc/fltk"
-  ;;
-esac
-echo "       Graphics: $graphics"
-
-if test x$JPEG = x; then
-    echo "Image Libraries: JPEG=System"
-else
-    echo "Image Libraries: JPEG=Builtin"
-fi
-if test x$PNG = x; then
-    echo "                 PNG=System"
-else
-    echo "                 PNG=Builtin"
-fi
-if test x$ZLIB = x; then
-    echo "                 ZLIB=System"
-else
-    echo "                 ZLIB=Builtin"
-fi
-if test x$enable_cairo = xyes; then
-    echo "                 CAIRO=lib"
-fi
-if test x$enable_cairoext = xyes; then
-    echo "                 CAIRO=internal_use"
-fi
-
-if test x$enable_largefile != xno; then
-    echo "    Large Files: YES"
-else
-    echo "    Large Files: NO"
-fi
-
-if test x$GLDEMOS = x; then
-    echo "         OpenGL: NO"
-else
-    echo "         OpenGL: YES"
-fi
-
-if test x$THREADS = x; then
-    echo "        Threads: NO"
-else
-    echo "        Threads: YES"
-fi
-
-dnl Set empty BINARY_DIR variable for fltk-config.in (CMake compatibility)
-BINARY_DIR=
-AC_SUBST(BINARY_DIR)
-
-dnl Write all of the files...
-AC_CONFIG_HEADER(config.h:configh.in)
-AC_CONFIG_HEADER(FL/abi-version.h:abi-version.in)
-AC_CONFIG_FILES([makeinclude fltk.list fltk-config fltk.spec FL/Makefile])
-AC_OUTPUT
-
-dnl Make sure the fltk-config script is executable...
-chmod +x fltk-config
-
-dnl
-dnl End of "$Id$".
-dnl
--- a/DoConfig/fltk/documentation/CMakeLists.txt
+++ /dev/null
@@ -1,138 +1,0 @@
-#
-# "$Id$"
-#
-# CMakeLists.txt to build docs for the FLTK project using CMake (www.cmake.org)
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-set (DOCS)
-
-#--------------------------
-# build html documentation
-#--------------------------
-
-if(OPTION_BUILD_HTML_DOCUMENTATION)
-
-    list(APPEND DOCS html)
-
-    # generate Doxygen file "Doxyfile"
-
-    set(GENERATE_HTML	YES)
-    set(GENERATE_LATEX	NO)
-    set(LATEX_HEADER	"")
-
-    configure_file(
-	${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
-	${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
-	@ONLY
-    )
-
-    # generate html docs
-
-    add_custom_target(html
-	# ALL
-	${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
-	WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-	COMMENT "Generating HTML documentation" VERBATIM
-	DEPENDS fltk
-	)
-
-endif(OPTION_BUILD_HTML_DOCUMENTATION)
-
-#--------------------------
-# build pdf documentation
-#--------------------------
-
-if (OPTION_BUILD_PDF_DOCUMENTATION)
-
-    list(APPEND DOCS pdf)
-
-    # generate Doxygen file "Doxybook"
-
-    set(GENERATE_HTML	NO)
-    set(GENERATE_LATEX	YES)
-    set(LATEX_HEADER	"${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex")
-
-    configure_file(
-	${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
-	${CMAKE_CURRENT_BINARY_DIR}/Doxybook
-	@ONLY
-    )
-
-    # generate LaTeX header fltk-book.tex
-
-    set(FL_VERSION ${FLTK_VERSION_FULL})
-    set(DOXY_VERSION ${DOXYGEN_VERSION})
-    execute_process(COMMAND date +%Y
-	OUTPUT_VARIABLE YEAR
-	)
-
-    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/fltk-book.tex.in
-	${CMAKE_CURRENT_BINARY_DIR}/fltk-book.tex
-	@ONLY
-	)
-
-    # generate fltk.pdf
-
-    add_custom_command(
-	OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
-	COMMAND ${DOXYGEN_EXECUTABLE} Doxybook
-	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/make_pdf
-	COMMAND cp -f latex/refman.pdf fltk.pdf
-	WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-	COMMENT "Generating PDF documentation" VERBATIM
-	DEPENDS fltk
-	)
-
-    # add target 'pdf'
-
-    add_custom_target(pdf
-	# ALL
-	DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/fltk.pdf
-	)
-
-endif(OPTION_BUILD_PDF_DOCUMENTATION)
-
-#----------------------------------
-# add target 'docs' for all docs
-#----------------------------------
-
-if (DOCS)
-
-    add_custom_target(docs
-	# ALL
-	DEPENDS ${DOCS}
-	)
-
-endif (DOCS)
-
-#----------------------------------
-# install html + pdf documentation
-#----------------------------------
-
-if(OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
-
-    install(DIRECTORY ${CMAKE_BINARY_DIR}/documentation/html
-	DESTINATION ${FLTK_DATADIR}/doc/fltk
-	)
-
-endif(OPTION_INSTALL_HTML_DOCUMENTATION AND OPTION_BUILD_HTML_DOCUMENTATION)
-
-if(OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)
-
-    install(FILES ${CMAKE_BINARY_DIR}/documentation/fltk.pdf
-	DESTINATION ${FLTK_DATADIR}/doc/fltk/
-	)
-
-endif(OPTION_INSTALL_PDF_DOCUMENTATION AND OPTION_BUILD_PDF_DOCUMENTATION)
--- a/DoConfig/fltk/documentation/Doxyfile.in
+++ /dev/null
@@ -1,1507 +1,0 @@
-# Doxyfile 1.5.5
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = "FLTK @FL_VERSION@"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER         =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = .
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,
-# Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen to replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
-# 1.5.7
-#IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penality.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will rougly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols
-# 1.5.7
-# SYMBOL_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = NO
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespace are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS        = YES
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-# obsolete since doxygen 1.8.1
-# SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
-# 1.5.7
-# SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
-# 1.5.7
-# SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
-# doxygen. The layout file controls the global structure of the generated output files
-# in an output format independent way. The create the layout file that represents
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name
-# of the layout file.
-# 1.5.7
-# LAYOUT_FILE            =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = NO
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT =  @CMAKE_CURRENT_SOURCE_DIR@/src/index.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/preface.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/intro.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/basics.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/common.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/editor.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/drawing.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/events.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/subclassing.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/opengl.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/fluid.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/advanced.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/unicode.dox
-INPUT += @CMAKE_SOURCE_DIR@/FL
-INPUT += @CMAKE_SOURCE_DIR@/src
-INPUT += @CMAKE_SOURCE_DIR@/cairo
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/enumerations.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/glut.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/forms.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/osissues.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/migration_1_1.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/migration_1_3.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/development.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/license.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/examples.dox
-INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/faq.dox
-INPUT += @CMAKE_SOURCE_DIR@/src/Fl_Sys_Menu_Bar.mm
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
-FILE_PATTERNS          = *.H \
-                         *.h \
-                         *.c \
-                         *.cxx \
-                         *.dox
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE =  @CMAKE_SOURCE_DIR@/src/fl_font_win32.cxx
-EXCLUDE += @CMAKE_SOURCE_DIR@/src/fl_font_mac.cxx
-EXCLUDE += @CMAKE_SOURCE_DIR@/src/aimm.h
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH           = ../test
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = *.cxx \
-                         *.h \
-                         *.H \
-                         *.fl
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH = @CMAKE_CURRENT_SOURCE_DIR@/src
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = fl_ \
-                         FL_ \
-                         Fl_
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML          = @GENERATE_HTML@
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER            = @CMAKE_CURRENT_SOURCE_DIR@/src/html_footer
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-# obsolete since doxygen 1.8.1
-# HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
-
-GENERATE_DOCSET        = YES
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
-# 1.5.7
-# CHM_INDEX_ENCODING     =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
-# are set, an additional index file will be generated that can be used as input for
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
-# HTML documentation.
-# 1.5.7
-# GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-# be used to specify the file name of the resulting .qch file.
-# The path specified is relative to the HTML output folder.
-# 1.5.7
-# QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
-# 1.5.7
-# QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
-# 1.5.7
-# QHP_VIRTUAL_FOLDER     = doc
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-# be used to specify the location of Qt's qhelpgenerator.
-# If non-empty doxygen will try to run qhelpgenerator on the generated
-# .qhp file .
-# 1.5.7
-# QHG_LOCATION           =
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to FRAME, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature. Other possible values
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
-# and Class Hierarchy pages using a tree view instead of an ordered list;
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
-# disables this behavior completely. For backwards compatibility with previous
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
-# respectively.
-
-GENERATE_TREEVIEW      = YES
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
-# 1.5.7
-# FORMULA_FONTSIZE       = 10
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX         = @GENERATE_LATEX@
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = @LATEX_HEADER@
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = YES
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-# obsolete since doxygen 1.8.8
-# XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-# obsolete since doxygen 1.8.8
-# XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             = FL_DOXYGEN \
-                         FLTK_ABI_VERSION=99999 \
-                         FLTK_HAVE_CAIRO \
-                         HAVE_GL \
-                         HAVE_GL_OVERLAY \
-                         FL_EXPORT:= \
-			 __cplusplus
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# By default doxygen will write a font called FreeSans.ttf to the output
-# directory and reference it in all dot files that doxygen generates. This
-# font does not include all possible unicode characters however, so when you need
-# these (or just want a differently looking font) you can specify the font name
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
-# which can be done by putting it in a standard location or by setting the
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
-# containing the font.
-# 1.5.7
-# DOT_FONTNAME           = FreeSans
-
-# By default doxygen will tell dot to use the output directory to look for the
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a
-# different font using DOT_FONTNAME you can set the path where dot
-# can find it using this tag.
-# 1.5.7
-# DOT_FONTPATH           =
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not
-# seem to support this out of the box. Warning: Depending on the platform used,
-# enabling this option may lead to badly anti-aliased labels on the edges of
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
--- a/DoConfig/fltk/documentation/Makefile
+++ /dev/null
@@ -1,194 +1,0 @@
-#
-# "$Id$"
-#
-# Makefile for the Fast Light Tool Kit (FLTK) documentation.
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-# Get configuration stuff...
-include ../makeinclude
-
-# make sure that all docs are (re-)created independent of missing deps
-.PHONY: pdf html refman.pdf
-
-SRC_DOCDIR      = 	./src
-
-# These are the HTML "source" files...
-HTMLFILES	= 	 \
-			 $(SRC_DOCDIR)/index.dox \
-                         $(SRC_DOCDIR)/preface.dox \
-                         $(SRC_DOCDIR)/intro.dox \
-                         $(SRC_DOCDIR)/basics.dox \
-                         $(SRC_DOCDIR)/common.dox \
-                         $(SRC_DOCDIR)/editor.dox \
-                         $(SRC_DOCDIR)/drawing.dox \
-                         $(SRC_DOCDIR)/events.dox \
-                         $(SRC_DOCDIR)/subclassing.dox \
-                         $(SRC_DOCDIR)/opengl.dox \
-                         $(SRC_DOCDIR)/fluid.dox \
-                         $(SRC_DOCDIR)/advanced.dox \
-                         $(SRC_DOCDIR)/unicode.dox \
-                         $(SRC_DOCDIR)/enumerations.dox \
-                         $(SRC_DOCDIR)/glut.dox \
-                         $(SRC_DOCDIR)/forms.dox \
-                         $(SRC_DOCDIR)/osissues.dox \
-                         $(SRC_DOCDIR)/migration_1_1.dox \
-                         $(SRC_DOCDIR)/migration_1_3.dox \
-                         $(SRC_DOCDIR)/development.dox \
-                         $(SRC_DOCDIR)/license.dox \
-                         $(SRC_DOCDIR)/examples.dox \
-                         $(SRC_DOCDIR)/faq.dox
-
-MANPAGES =	$(SRC_DOCDIR)/fltk.$(CAT3EXT) $(SRC_DOCDIR)/fltk-config.$(CAT1EXT) \
-		$(SRC_DOCDIR)/fluid.$(CAT1EXT) $(SRC_DOCDIR)/blocks.$(CAT6EXT) \
-		$(SRC_DOCDIR)/checkers.$(CAT6EXT) $(SRC_DOCDIR)/sudoku.$(CAT6EXT)
-
-all:	$(MANPAGES)
-
-# Use `make docs' to create all docs for distribution files.
-# You need installed versions of Doxygen and LaTeX for this.
-
-docs:	all html pdf
-
-# Synonyms for docs:
-
-alldocs: docs
-dist:	docs
-
-clean:
-	$(RM) Doxyfile Doxybook
-	$(RM) fltk.pdf refman.pdf src/fltk-book.tex
-	$(RMDIR) html latex
-	$(RM) *~ *.bck *.bak *.log
-	$(RM) $(MANPAGES) $(SRC_DOCDIR)/*.0
-
-depend:
-
-install: $(MANPAGES)
-	echo "Installing documentation files in $(DESTDIR)$(docdir) ..."
-	-$(INSTALL_DIR) $(DESTDIR)$(docdir)
-	if test -f html/index.html ; then \
-	  for file in html/* ; do \
-		$(INSTALL_DATA) $$file $(DESTDIR)$(docdir); \
-	  done \
-	fi
-	if test -f fltk.pdf ; then \
-	  echo "Installing fltk.pdf in $(DESTDIR)$(docdir) ..."; \
-	  $(INSTALL_DATA) fltk.pdf $(DESTDIR)$(docdir); \
-	fi
-	echo "Installing man pages in $(DESTDIR)$(mandir) ..."
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/cat1
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fluid.$(CAT1EXT) $(DESTDIR)$(mandir)/cat1
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fltk-config.$(CAT1EXT) $(DESTDIR)$(mandir)/cat1
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/cat3
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fltk.$(CAT3EXT) $(DESTDIR)$(mandir)/cat3
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/man1
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fluid.man $(DESTDIR)$(mandir)/man1/fluid.1
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fltk-config.man $(DESTDIR)$(mandir)/man1/fltk-config.1
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/man3
-	$(INSTALL_MAN) $(SRC_DOCDIR)/fltk.man $(DESTDIR)$(mandir)/man3/fltk.3
-
-install-linux install-osx:
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/cat6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/blocks.$(CAT6EXT) $(DESTDIR)$(mandir)/cat6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/checkers.$(CAT6EXT) $(DESTDIR)$(mandir)/cat6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/sudoku.$(CAT6EXT) $(DESTDIR)$(mandir)/cat6
-	-$(INSTALL_DIR) $(DESTDIR)$(mandir)/man6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/blocks.man $(DESTDIR)$(mandir)/man6/blocks.6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/checkers.man $(DESTDIR)$(mandir)/man6/checkers.6
-	$(INSTALL_MAN) $(SRC_DOCDIR)/sudoku.man $(DESTDIR)$(mandir)/man6/sudoku.6
-
-
-uninstall:
-	$(RMDIR) $(DESTDIR)$(docdir)
-	$(RM) $(DESTDIR)$(mandir)/cat1/fluid.$(CAT1EXT)
-	$(RM) $(DESTDIR)$(mandir)/man1/fluid.1
-	$(RM) $(DESTDIR)$(mandir)/cat1/fltk-config.$(CAT1EXT)
-	$(RM) $(DESTDIR)$(mandir)/man1/fltk-config.1
-	$(RM) $(DESTDIR)$(mandir)/cat3/fltk.$(CAT3EXT)
-	$(RM) $(DESTDIR)$(mandir)/man3/fltk.3
-
-uninstall-linux uninstall-osx:
-	$(RM) $(DESTDIR)$(mandir)/cat6/blocks.$(CAT6EXT)
-	$(RM) $(DESTDIR)$(mandir)/cat6/checkers.$(CAT6EXT)
-	$(RM) $(DESTDIR)$(mandir)/cat6/sudoku.$(CAT6EXT)
-	$(RM) $(DESTDIR)$(mandir)/man6/blocks.6
-	$(RM) $(DESTDIR)$(mandir)/man6/checkers.6
-	$(RM) $(DESTDIR)$(mandir)/man6/sudoku.6
-
-# The documentation is generated using doxygen. There are two control files
-# for doxygen: Doxyfile for html documentation and Doxybook for pdf docs.
-# Both files are generated from the common source file Doxyfile.in.
-# Note that Doxyfile.in is shared with CMake to configure these files.
-
-Doxyfile: Doxyfile.in
-	echo "Generating Doxyfile ..."
-	sed -e's,@FL_VERSION@,$(FL_VERSION),' \
-	    -e's,@GENERATE_HTML@,YES,' \
-	    -e's,@GENERATE_LATEX@,NO,' \
-	    -e's, @LATEX_HEADER@,,' \
-	    -e's,@CMAKE_CURRENT_SOURCE_DIR@/,,' \
-	    -e's,@CMAKE_SOURCE_DIR@/,../,' \
-	    < $< > $@
-
-Doxybook: Doxyfile.in
-	echo "Generating Doxybook ..."
-	sed -e's,@FL_VERSION@,$(FL_VERSION),' \
-	    -e's,@GENERATE_HTML@,NO,' \
-	    -e's,@GENERATE_LATEX@,YES,' \
-	    -e's,@LATEX_HEADER@,src/fltk-book.tex,' \
-	    -e's,@CMAKE_CURRENT_SOURCE_DIR@/,,' \
-	    -e's,@CMAKE_SOURCE_DIR@/,../,' \
-	    < $< > $@
-
-# The HTML files are generated using doxygen, and this needs
-# an installed doxygen version and may take some time, so this target
-# is not made by default.
-# Use `make html' or `make docs' to create the html docs.
-
-html:	$(HTMLFILES) Doxyfile
-	echo "Generating HTML documentation..."
-	-$(RMDIR) html
-	-$(INSTALL_DIR) html
-	-$(DOXYDOC)
-	if test "x$(DOXYDOC)" = "x" ; then \
-	  echo "Sorry - doxygen not found. Please install doxygen and run configure."; \
-	fi
-	test -d html && cp src/tiny.png html/
-
-# The PDF documentation (fltk.pdf) is generated using doxygen and LaTeX, and
-# this needs installed Doxygen and LaTeX programs and may take some time, so
-# this target is not made by default.
-# Use `make pdf' or `make docs' to create the PDF docs.
-
-pdf:	refman.pdf
-	cp -f latex/refman.pdf fltk.pdf
-
-refman.pdf: $(HTMLFILES) Doxybook src/fltk-book.tex
-	-$(RMDIR) latex
-	echo "Generating PDF documentation ..."
-	$(DOXYDOC) Doxybook
-	./make_pdf
-
-src/fltk-book.tex: src/fltk-book.tex.in
-	DOXY_VERSION=`$(DOXYDOC) --version`; \
-	YEAR=`date +%Y`; \
-	sed -e"s/@YEAR@/$$YEAR/g" \
-	    -e"s/@FL_VERSION@/$(FL_VERSION)/g" \
-	    -e"s/@DOXY_VERSION@/$$DOXY_VERSION/g" \
-	< $< > $@
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/documentation/README
+++ /dev/null
@@ -1,108 +1,0 @@
-README (documentation)
-----------------------
-FLTK 1.3 (and higher) documentation is available in HTML and PDF format.
-The documentation must be generated in a separate step or downloaded
-from FLTK's software download pages. The documentation can also
-be accessed online.
-
-To read the docs after downloading or generating them, open the
-files:
-
-    documentation/html/index.html
-    documentation/fltk.pdf
-
-with your browser or PDF viewer, respectively.
-
-
-Online Documentation:
----------------------
-A documentation version is available online at the FLTK web site,
-along with the PDF version of the manual. The docs on the web site
-are usually somewhat older (latest release). Use this URL to find
-the current online documentation:
-
-    http://www.fltk.org/documentation.php
-
-
-Documentation Download:
------------------------
-To download pre-generated docs, go to
-
-    https://www.fltk.org/software.php
-
-and look for the files
-
-    fltk-<version>-docs-html.tar.gz
-    fltk-<version>-docs-pdf.tar.gz
-
-Extract the documentation tarballs into the same directory as you
-did with the source tarball.
-
-
-Generation of Documentation (common part):
-------------------------------------------
-To generate the documentation yourself, you should have Doxygen
-version 1.5.7 or later (recommended version is 1.7.3 or later).
-
-To generate the PDF version you also need a current version of LaTeX.
-You can use the packages tetex (older) or texlive (current) if your
-distribution provides them. You may need to install additional fonts
-and other sub-packages for the PDF version to be generated correctly.
-
-
-Generation of Documentation with autoconf (configure) + make:
--------------------------------------------------------------
-Use "make html" in the documentation directory to generate the HTML
-documentation, or "make pdf" to generate the PDF version. "make docs"
-generates both versions in one step (as would do "make clean html pdf").
-
-To read the HTML or PDF docs, see above.
-
-
-Generation of Documentation with CMake + make:
-----------------------------------------------
-We assume that you use an out-of-source build as recommended.
-Documentation is not generated in a default build. You must set one or
-more CMake options using cmake-gui, ccmake, or cmake -DOPTION...
-
-These options are predefined to OFF and can be switched ON:
-
-  - OPTION_BUILD_HTML_DOCUMENTATION:BOOL=OFF	target:	html
-  - OPTION_BUILD_PDF_DOCUMENTATION:BOOL=OFF	target:	pdf
-
-  - OPTION_INSTALL_HTML_DOCUMENTATION:BOOL=OFF
-  - OPTION_INSTALL_PDF_DOCUMENTATION:BOOL=OFF
-
-If you switch one or both of the first two options ON, then the
-targets 'html' and/or 'pdf' are generated, respectively. Target 'docs'
-is added to generate both 'html' and 'pdf'. As said above, you need
-installed Doxygen and LaTeX software for this to work.
-
-Use "make html" in the root or documentation directory of the build tree
-to generate the HTML documentation, or "make pdf" to generate the PDF
-version. "make docs" generates both versions in one step (as would do
-"make clean html pdf").
-
-To read the HTML or PDF docs, see above, but use the build directory.
-
-Note: if you enable one or more of the "*INSTALL*" options, then
-`make install' will install the docs, but you must still build them
-manually, because the generation is not included in the standard ('all')
-target. This may be changed in the future.
-
-
-FLTK Developer Snapshots or Subversion Usage:
----------------------------------------------
-There is no pre-generated documentation available if you use a current
-developer snapshot or subversion. You must generate the documentation
-yourself or access the online documentation.
-
-
-Bugs and Feature Requests:
---------------------------
-If you find any typos, things that are unclear, or would like to
-contribute an example, section, or chapter to the FLTK manual, please
-post a question in the fltk newsgroup fltk.general or post a bug
-report or feature request at:
-
-    http://www.fltk.org/str.php
--- a/DoConfig/fltk/documentation/make_pdf
+++ /dev/null
@@ -1,47 +1,0 @@
-#! /bin/sh
-#
-# $Id$
-#
-# Makefile helper script for the Fast Light Tool Kit (FLTK) documentation.
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-# This script generates latex/refman.pdf after doxygen has been executed.
-#
-# Input:  run `doxygen Doxybook' (creates files in subdirectory latex)
-# Output: latex/refman.pdf (if successful)
-#
-# Next step: cp -f latex/refman.pdf fltk.pdf (why is this extra step needed ?)
-#
-# Working directory: fltk/documentation
-#
-# Used in: Makefile and CMakeLists.txt
-
-( cd latex
-  pdflatex --interaction=nonstopmode refman.tex
-  makeindex refman.idx
-  pdflatex --interaction=nonstopmode refman.tex
-  latex_count=5
-  while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log \
-	  && [ $latex_count -gt 0 ]
-    do
-      echo "Rerunning pdflatex ..."
-      pdflatex --interaction=nonstopmode refman.tex
-      latex_count=`expr $latex_count - 1`
-    done
-  cd ..) > pdfall.log 2>&1
-
-#
-# End of "$Id$".
-#
binary files a/DoConfig/fltk/documentation/src/FL.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/FL200.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Check_Button.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_File_Chooser.jpg /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_File_Input.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Help_Dialog.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Light_Button.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Native_File_Chooser.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Return_Button.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Roller.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Round_Button.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Scroll.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Spinner.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Tile.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Tree_Item-dimensions.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Value_Input.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/Fl_Value_Output.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/adjuster1.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/advanced.dox
+++ /dev/null
@@ -1,444 +1,0 @@
-/**
-
- \page advanced Advanced FLTK
-
-This chapter explains advanced programming and design topics
-that will help you to get the most out of FLTK.
-
-\section advanced_multithreading Multithreading
-
-FLTK can be used to implement a GUI for a multithreaded application
-but, as with multithreaded programming generally, there are some
-concepts and caveats that must be kept in mind.
-
-Key amongst these is that, for many of the target platforms on
-which FLTK is supported, only the \p main() thread of the
-process is permitted to handle system events, create or destroy windows
-and open or close windows. Further, only the
-\p main() thread of the process can safely write to the display.
-
-To support this in a portable way, all FLTK \p draw() methods are
-executed in the \p main() thread. A worker thread may update the
-state of an existing widget, but it may not do any rendering directly,
-nor create or destroy a window.
-(\b NOTE: A special case exists for Fl_Gl_Window where it can, with
-suitable precautions, be possible
-to safely render to an existing GL context from a worker thread.)
-
-<H3>Creating portable threads</H3>
-We do not provide a threading interface as part of
-the library. A simple example showing how threads can be implemented,
-for all supported platforms, can be found in \p test/threads.h
-and \p test/threads.cxx.
-
-FLTK has been used with a variety of thread
-interfaces, so if the simple example shown in \p test/threads.cxx
-does not cover your needs, you might want to select a third-party
-library that provides the features you require.
-
-\section advanced_multithreading_lock FLTK multithread locking - Fl::lock() and Fl::unlock()
-
-In a multithreaded
-program, drawing of widgets (in the \p main() thread) happens
-asynchronously to widgets being updated by worker threads, so
-no drawing can occur safely whilst a widget is being modified
-(and no widget should be modified whilst drawing is in progress).
-
-FLTK supports multithreaded applications using a locking mechanism
-internally. This allows a worker thread to lock the rendering context,
-preventing any drawing from taking place,
-whilst it changes the value of its widget.
-
-\note
-The converse is also true;
-whilst a worker thread holds the lock, the \p main() thread may not
-be able to process any drawing requests, nor service any events.
-So a worker thread that holds the FLTK lock \b must contrive to do so
-for the shortest time possible or it could impair operation
-of the application.
-
-The lock operates broadly as follows.
-
-Using the FLTK library, the \p main() thread holds the lock
-whenever it is processing events or redrawing the display.
-It acquires (locks) and releases (unlocks) the FLTK lock
-automatically and no "user intervention" is required.
-Indeed, a function that runs in the context of the \p main()
-thread ideally should \b not acquire / release the FLTK lock
-explicitly. (Though note that the lock calls are recursive,
-so calling Fl::lock() from a thread that already holds
-the lock, including the \p main() thread, is benign.
-The only constraint is that every call to Fl::lock()
-\b must be balanced by a corresponding call to
-Fl::unlock() to ensure the lock count is preserved.)
-
-The \p main() thread \b must call Fl::lock() \b once
-before any windows are shown, to enable the internal lock (it
-is "off" by default since it is not useful in single-threaded
-applications) but thereafter the \p main() thread lock is managed
-by the library internally.
-
-A worker thread, when it wants to alter the value of a widget,
-can acquire the lock using Fl::lock(), update the widget, then
-release the lock using Fl::unlock(). Acquiring the lock ensures
-that the worker thread can update the widget, without any risk
-that the \p main() thread will attempt to redraw the widget
-whilst it is being updated.
-
-Note that acquiring the lock
-is a blocking action; the worker thread will stall for
-as long as it takes to acquire the lock.
-If the \p main() thread is engaged in some complex drawing operation
-this may block the worker thread for a long time, effectively
-serializing what ought to be parallel operations.
-(This frequently comes as a surprise to coders less familiar
-with multithreaded programming issues; see the discussion of
-"lockless programming" later for strategies for managing this.)
-
-
-To incorporate the locking mechanism in the library,
-FLTK must be compiled with
-\p --enable-threads set during the \p configure
-process. IDE-based versions of FLTK are automatically compiled with
-the locking mechanism incorporated if possible.
-Since version 1.3, the
-\p configure script that builds the FLTK
-library also sets \p --enable-threads by default.
-
-\section advanced_multithreading_lock_example Simple multithreaded examples using Fl::lock
-
-In \p main(), call
-Fl::lock() once before Fl::run() or Fl::wait() to enable the lock
-and start the runtime multithreading support for your program.
-All callbacks and derived functions like \p handle() and \p draw()
-will now be properly locked.
-
-This might look something like this:
-
-\code
-    int main(int argc, char **argv) {
-      /* Create your windows and widgets here */
-
-      Fl::lock(); /* "start" the FLTK lock mechanism */
-
-      /* show your window */
-      main_win->show(argc, argv);
-
-      /* start your worker threads */
-      ... start threads ...
-
-      /* Run the FLTK main loop */
-      int result = Fl::run();
-
-      /* terminate any pending worker threads */
-      ... stop threads ...
-
-      return result;
-    }
-\endcode
-
-You can start as many threads as you like. From within
-a thread (other than the \p main() thread) FLTK calls must be wrapped
-with calls to Fl::lock() and Fl::unlock():
-
-\code
-    void my_thread(void) {
-      while (thread_still_running) {
-        /* do thread work */
-        ...
-        /* compute new values for widgets */
-        ...
-
-        Fl::lock();      // acquire the lock
-        my_widget->update(values);
-        Fl::unlock();    // release the lock; allow other threads to access FLTK again
-        Fl::awake();     // use Fl::awake() to signal main thread to refresh the GUI
-      }
-    }
-\endcode
-
-\note
-To trigger a refresh of the GUI from a worker thread, the
-worker code should call Fl::awake()
-
-<H3>Using Fl::awake thread messages</H3>
-You can send messages from worker threads to the \p main() thread
-using Fl::awake(void* message).
-If using this thread message interface, your \p main() might
-look like this:
-
-\code
-    int main(int argc, char **argv) {
-      /* Create your windows and widgets here */
-
-      Fl::lock(); /* "start" the FLTK lock mechanism */
-
-      /* show your window */
-      main_win->show(argc, argv);
-
-      /* start your worker threads */
-      ... start threads ...
-
-      /* Run the FLTK loop and process thread messages */
-      while (Fl::wait() > 0) {
-        if ((next_message = Fl::thread_message()) != NULL) {
-          /* process your data, update widgets, etc. */
-          ...
-        }
-      }
-
-      /* terminate any pending worker threads */
-      ... stop threads ...
-
-      return 0;
-    }
-\endcode
-
-Your worker threads can send messages to the \p main() thread
-using Fl::awake(void* message):
-
-\code
-    void *msg;       // "msg" is a pointer to your message
-    Fl::awake(msg);  // send "msg" to main thread
-\endcode
-
-A message can be anything you like. The \p main() thread can retrieve
-the message by calling Fl::thread_message().
-
-<H3>Using Fl::awake callback messages</H3>
-You can also request that the \p main() thread call a function on behalf of
-the worker thread by using Fl::awake(Fl_Awake_Handler cb, void* userdata).
-
-The \p main() thread will execute the callback "as soon as possible"
-when next processing the pending events. This can be used by a worker
-thread to perform operations (for example showing or hiding windows)
-that are prohibited in a worker thread.
-
-\code
-    void do_something_cb(void *userdata) {
-      // Will run in the context of the main thread
-      ... do_stuff ...
-    }
-
-    // running in worker thread
-    void *data;                       // "data" is a pointer to your user data
-    Fl::awake(do_something_cb, data); // call to execute cb in main thread
-\endcode
-
-\note
-The \p main() thread will execute the Fl_Awake_Handler
-callback \p do_something_cb
-asynchronously to the worker thread, at some short but indeterminate
-time after the worker thread registers the request.
-When it executes the Fl_Awake_Handler callback,
-the \p main() thread will use the contents of
-\p *userdata \b at \b the \b time \b of \b execution, not necessarily
-the contents that \p *userdata had at the time that the worker thread
-posted the callback request.
-The worker thread should
-therefore contrive \b not to alter the contents of \p *userdata once
-it posts the callback, since the worker thread does not know when the
-\p main() thread will consume that data.
-It is often useful that \p userdata point to a struct, one member
-of which the \p main() thread can modify to indicate that it has
-consumed the data, thereby allowing the
-worker thread to re-use or update \p userdata.
-
-\warning
-The mechanisms used to deliver Fl::awake(void* message)
-and Fl::awake(Fl_Awake_Handler cb, void* userdata) events to the
-\p main() thread can interact in unexpected ways on some platforms.
-Therefore, for reliable operation, it is advised that a program use
-either Fl::awake(Fl_Awake_Handler cb, void* userdata) or
-Fl::awake(void* message), but that they never be intermixed. Calling
-Fl::awake() with no parameters should be safe in either case.
-\par
-If you have to choose between using the Fl::awake(void* message)
-and Fl::awake(Fl_Awake_Handler cb, void* userdata) mechanisms and
-don't know which to choose, then try the
-Fl::awake(Fl_Awake_Handler cb, void* userdata) method first as it
-tends to be more powerful in general.
-
-\section advanced_multithreading_lockless FLTK multithreaded "lockless programming"
-
-The simple multithreaded examples shown above, using the FLTK lock,
-work well for many cases where multiple threads are required.
-However, when that model is extended to more complex programs,
-it often produces results that the developer did not anticipate.
-
-A typical case might go something like this.
-A developer creates a program to process a huge data set.
-The program has a \p main() thread and 7 worker threads and
-is targeted to run on an 8-core computer.
-When it runs, the program divides the data between the 7
-worker threads, and as they process their share of the
-data, each thread updates its portion of the GUI with the
-results, locking and unlocking as they do so.
-
-But when this program runs, it is much slower than expected
-and the developer finds that only
-one of the eight CPU cores seems to be utilised, despite
-there being 8 threads in the program. What happened?
-
-The threads in the program all run as expected, but they end up
-being serialized (that is, not able to run in parallel) because
-they all depend on the single FLTK lock.
-Acquiring (and releasing) that lock has an associated cost, and
-is a \b blocking action if the lock is already held by any other
-worker thread or by the \p main() thread.
-
-If the worker threads are acquiring the lock "too often", then the
-lock will \b always be held \b somewhere and every attempt by any
-other thread (even \p main()) to lock will cause that other
-thread (including \p main()) to block. And blocking \p main() also
-blocks event handling, display refresh...
-
-As a result, only one thread will be running at any given time,
-and the multithreaded program is effectively reduced to
-being a (complicated and somewhat less efficient) single thread
-program.
-
-A "solution" is for the worker threads to lock "less often",
-such that they do not block each other or the \p main()
-thread. But judging what constitutes locking "too often"
-for any given configuration,
-and hence will block, is a very tricky question.
-What works well on one machine, with a given graphics card
-and CPU configuration may behave very differently
-on another target machine.
-
-There are "interesting" variations on this theme, too:
-for example it is possible that a "faulty" multithreaded
-program such as described above will work
-adequately on a single-core machine (where all threads are
-inherently serialized anyway and so are less likely to block
-each other) but then stall or even deadlock in unexpected ways
-on a multicore machine when the threads do interfere with each other.
-(I have seen this - it really happens.)
-
-The "better" solution is to avoid using the FLTK lock
-so far as possible. Instead, the code should be designed so
-that the worker threads do not update the GUI
-themselves and therefore never need to acquire the FLTK lock.
-This would be FLTK multithreaded "lockless programming".
-
-There are a number of ways this can be achieved (or at
-least approximated) in practice but the most
-direct approach is for the worker threads to make use of the
-Fl::awake(Fl_Awake_Handler cb, void* userdata) method so that
-GUI updates can all run in the context of the \p main() thread,
-alleviating the need for the worker thread to ever lock.
-The onus is then on the worker threads to manage the \p userdata
-so that it is delivered safely to the \p main() thread, but there
-are many ways that can be done.
-
-\note
-Using Fl::awake is not, strictly speaking,
-entirely "lockless" since the awake handler mechanism
-incorporates resource locking internally to protect the
-queue of pending awake messages.
-These resource locks are held transiently and
-generally do not trigger the pathological blocking
-issues described here.
-
-However, aside from using Fl::awake, there are many other
-ways that a "lockless" design can be implemented, including
-message passing, various forms of IPC, etc.
-
-If you need high performing multithreaded programming,
-then take some time to study the options and understand
-the advantages and disadvantages of each; we can't even
-begin to scratch the surface of this huge topic here!
-
-And of course occasional, sparse, use of the FLTK lock from
-worker threads will do no harm; it is "excessive"
-locking (whatever that might be) that triggers the
-failing behaviour.
-
-It is always a Good Idea to update the GUI at the
-lowest rate that is acceptable when processing bulk
-data (or indeed, in all cases!)
-Updating at a few frames per second is probably
-adequate for providing feedback during a long calculation.
-At the upper limit, anything faster than the frame rate
-of your monitor and the updates
-will never even be displayed; why waste CPU computing
-pixels that you will never show?
-
-
-\section advanced_multithreading_caveats FLTK multithreaded Constraints
-
-FLTK supports multiple platforms, some of which allow only the
-\p main() thread to handle system events and open or close windows.
-The safe thing to do is to adhere to the following rules for
-threads on all operating systems:
-
-\li Don't \p show() or \p hide() anything
-    that contains Fl_Window based widgets from a
-    worker thread.
-    This includes any windows, dialogs, file choosers,
-    subwindows or widgets using Fl_Gl_Window.
-    Note that this constraint also applies to non-window
-    widgets that have tooltips, since the tooltip will
-    contain a Fl_Window object.
-    The safe and portable approach is \b never to
-    call \p show() or \p hide() on any widget from the
-    context of a worker thread.
-    Instead you can use the Fl_Awake_Handler
-    variant of Fl::awake() to request the \p main() thread
-    to create, destroy, show or hide the widget on behalf
-    of the worker thread.
-
-\li Don't call Fl::run(), Fl::wait(), Fl::flush(), Fl::check() or any
-    related methods that will handle system messages from a worker thread
-
-\li Don't intermix use of Fl::awake(Fl_Awake_Handler cb, void* userdata)
-    and Fl::awake(void* message) calls in the same program as they may
-    interact unpredictably on some platforms; choose one or other style
-    of Fl::awake(<thing>) mechanism and use that.
-    (Intermixing calls to Fl::awake() should be safe with either however.)
-
-\li Don't start or cancel timers from a worker thread
-
-\li Don't change window decorations or titles from a worker thread
-
-\li The \p make_current() method will probably not work well for
-    regular windows, but should always work for a Fl_Gl_Window
-    to allow for high speed rendering on graphics cards with multiple
-    pipelines. Managing thread-safe access to the GL pipelines
-    is left as an exercise for the reader!
-    (And may be target specific...)
-
-See also:
-Fl::lock(),
-Fl::unlock(),
-Fl::awake(),
-Fl::awake(Fl_Awake_Handler cb, void* userdata),
-Fl::awake(void* message),
-Fl::thread_message().
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="fluid.html">
-    [Prev]
-    Programming with FLUID
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="unicode.html">
-    Unicode and UTF-8 Support
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/basics.dox
+++ /dev/null
@@ -1,404 +1,0 @@
-/**
-
- \page basics FLTK Basics
- 
-This chapter teaches you the basics of compiling programs
-that use FLTK.
-
-\section basics_writing Writing Your First FLTK Program
-
-All programs must include the file <tt><FL/Fl.H></tt>.
-In addition the program must include a header file for each
-FLTK class it uses. Listing 1 shows a simple "Hello,
-World!" program that uses FLTK to display the window.
-
-\par Listing 1 - "hello.cxx"
-\code
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-
-int main(int argc, char **argv) {
-  Fl_Window *window = new Fl_Window(340,180);
-  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
-  box->box(FL_UP_BOX);
-  box->labelfont(FL_BOLD+FL_ITALIC);
-  box->labelsize(36);
-  box->labeltype(FL_SHADOW_LABEL);
-  window->end();
-  window->show(argc, argv);
-  return Fl::run();
-}
-\endcode
-
-<!-- NEED 2in -->
-
-After including the required header files, the program then creates a
-window. All following widgets will automatically be children of this window.
-
-\code
-Fl_Window *window = new Fl_Window(340,180);
-\endcode
-
-Then we create a box with the "Hello, World!" string in it. FLTK automatically
-adds the new box to \p window, the current grouping widget.
-
-\code
-Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
-\endcode
-
-Next, we set the type of box and the font, size, and style of the label:
-
-\code
-box->box(FL_UP_BOX);
-box->labelfont(FL_BOLD+FL_ITALIC);
-box->labelsize(36);
-box->labeltype(FL_SHADOW_LABEL);
-\endcode
-
-We tell FLTK that we will not add any more widgets to \p window.
-
-\code
-window->end();
-\endcode
-
-Finally, we show the window and enter the FLTK event loop:
-
-\code
-window->show(argc, argv);
-return Fl::run();
-\endcode
-
-The resulting program will display the window in Figure 4.1.
-You can quit the program by closing the window or pressing the
-<tt>ESC</tt>ape key.
-
-\image html hello_cxx.png "Figure 4.1: The Hello, World! Window"
-\image latex hello_cxx.png "The Hello, World! Window" width=8cm
-
-\subsection basics_creating Creating the Widgets
-
-The widgets are created using the C++ \p new operator.  For
-most widgets the arguments to the constructor are:
-
-\code
-Fl_Widget(x, y, width, height, label)
-\endcode
-
-The \p x and \p y parameters determine where the
-widget or window is placed on the screen. In FLTK the top left
-corner of the window or screen is the origin
-(i.e. <tt>x = 0, y = 0</tt>)
-and the units are in pixels.
-
-The \p width and \p height parameters determine
-the size of the widget or window in pixels. The maximum widget
-size is typically governed by the underlying window system or
-hardware.
-
-\p label is a pointer to a character string to label
-the widget with or \p NULL. If not specified the label
-defaults to \p NULL. The label string must be in static
-storage such as a string constant because FLTK does not make a
-copy of it - it just uses the pointer.
-
-\subsection basics_hierarchies Creating Widget hierarchies
-
-Widgets are commonly ordered into functional groups, which 
-in turn may be grouped again, creating a hierarchy of widgets. 
-FLTK makes it easy to fill groups by automatically adding all widgets 
-that are created between a
-<tt>myGroup->begin()</tt>
-and 
-<tt>myGroup->end()</tt>.
-In this example, \p myGroup would be the \e current group.
-
-Newly created groups and their derived widgets implicitly call
-\p begin() in the constructor, effectively adding all 
-subsequently created widgets to itself until \p end()
-is called.
-
-Setting the current group to \p NULL will stop automatic
-hierarchies. New widgets can now be added manually using 
-<tt>Fl_Group::add(...)</tt>
-and
-<tt>Fl_Group::insert(...)</tt>.
-
-\subsection basics_getset Get/Set Methods
-
-<tt>box->box(FL_UP_BOX)</tt>
-sets the type of box the Fl_Box draws, changing it from the default of
-\p FL_NO_BOX, which means that no box is drawn. In our
-"Hello, World!" example we use \p FL_UP_BOX,
-which means that a raised button border will be drawn around
-the widget. More details are available in the
-\ref common_boxtypes
-section.
-
-You could examine the boxtype in by doing
-<tt>box->box()</tt>. FLTK uses method name overloading to make
-short names for get/set methods. A "set" method is always of
-the form "void name(type)", and a "get" method is always
-of the form "type name() const".
-
-\subsection basics_redrawing Redrawing After Changing Attributes
-
-Almost all of the set/get pairs are very fast, short inline
-functions and thus very efficient. However, <i>the "set" methods
-do not call \p redraw()</i> - you have to call it
-yourself. This greatly reduces code size and execution time. The
-only common exceptions are \p value() which calls
-\p redraw() and \p label() which calls
-\p redraw_label() if necessary.
-
-\subsection basics_labels Labels
-
-All widgets support labels. In the case of window widgets,
-the label is used for the label in the title bar. Our example
-program calls the \p labelfont(), \p labelsize(),
-and \p labeltype() methods.
-
-The \p labelfont() method sets the typeface and style
-that is used for the label, which for this example we are using
-\p FL_BOLD and \p FL_ITALIC. You can also specify
-typefaces directly.
-
-The \p labelsize() method sets the height of the font in pixels.
-
-The \p labeltype()
-method sets the type of label. FLTK supports normal, embossed,
-and shadowed labels internally, and more types can be added as
-desired.
-
-A complete list of all label options can be found in the section on
-\ref common_labels.
-
-\subsection basics_showing Showing the Window
-
-The \p show() method shows the widget or window. For windows
-you can also provide the command-line arguments to allow users to
-customize the appearance, size, and position of your windows.
-
-\subsection basics_eventloop The Main Event Loop
-
-All FLTK applications (and most GUI applications in general)
-are based on a simple event processing model. User actions such
-as mouse movement, button clicks, and keyboard activity generate
-events that are sent to an application. The application may then
-ignore the events or respond to the user, typically by redrawing
-a button in the "down" position, adding the text to an input
-field, and so forth.
-
-FLTK also supports idle, timer, and file pseudo-events that
-cause a function to be called when they occur. Idle functions
-are called when no user input is present and no timers or files
-need to be handled - in short, when the application is not doing
-anything. Idle callbacks are often used to update a 3D display
-or do other background processing.
-
-Timer functions are called after a specific amount of time
-has expired. They can be used to pop up a progress dialog after
-a certain amount of time or do other things that need to happen
-at more-or-less regular intervals. FLTK timers are not 100%
-accurate, so they should not be used to measure time intervals,
-for example.
-
-File functions are called when data is ready to read or
-write, or when an error condition occurs on a file. They are
-most often used to monitor network connections (sockets) for
-data-driven displays.
-
-FLTK applications must periodically check (Fl::check()) 
-or wait (Fl::wait()) for events or use the Fl::run()
-method to enter a standard event processing loop. Calling
-Fl::run() is equivalent to the following code:
-
-\code
-while (Fl::wait());
-\endcode
-
-Fl::run() does not return until all of the windows
-under FLTK control are closed by the user or your program.
-
-\section basics_standard_compiler Compiling Programs with Standard Compilers
-
-Under UNIX (and under Microsoft Windows when using the GNU development
-tools) you will probably need to tell the compiler where to find the
-header files. This is usually done using the \p -I option:
-
-\code
-CC -I/usr/local/include ...
-gcc -I/usr/local/include ...
-\endcode
-
-The \p fltk-config script included with FLTK can be
-used to get the options that are required by your compiler:
-
-\code
-CC `fltk-config --cxxflags` ...
-\endcode
-
-Similarly, when linking your application you will need to tell the
-compiler to use the FLTK library:
-
-\code
-CC  ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
-gcc ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
-\endcode
-
-Aside from the "fltk" library, there is also a "fltk_forms"
-library for the XForms compatibility classes, "fltk_gl" for the
-OpenGL and GLUT classes, and "fltk_images" for the image file
-classes, Fl_Help_Dialog widget, and system icon support.
-
-\note
-The libraries are named "fltk.lib", "fltkgl.lib", "fltkforms.lib",
-and "fltkimages.lib", respectively under Windows.
-
-As before, the \p fltk-config script included with FLTK can be
-used to get the options that are required by your linker:
-
-\code
-CC ... `fltk-config --ldflags`
-\endcode
-
-<!-- NEED 2in -->
-
-The forms, GL, and images libraries are included with the "--use-foo"
-options, as follows:
-
-\code
-CC ... `fltk-config --use-forms --ldflags`
-CC ... `fltk-config --use-gl --ldflags`
-CC ... `fltk-config --use-images --ldflags`
-CC ... `fltk-config --use-forms --use-gl --use-images --ldflags`
-\endcode
-
-Finally, you can use the \p fltk-config script to
-compile a single source file as a FLTK program:
-
-\code
-fltk-config --compile filename.cpp
-fltk-config --use-forms --compile filename.cpp
-fltk-config --use-gl --compile filename.cpp
-fltk-config --use-images --compile filename.cpp
-fltk-config --use-forms --use-gl --use-images --compile filename.cpp
-\endcode
-
-Any of these will create an executable named \p filename.
-
-\section basics_makefile Compiling Programs with Makefiles
-
-The previous section described how to use \p fltk-config to
-build a program consisting of a single source file from the command
-line, and this is very convenient for small test programs.
-But \p fltk-config can also be used to set the compiler and
-linker options as variables within a \p Makefile that can be
-used to build programs out of multiple source files:
-
-\code
-CXX      = $(shell fltk-config --cxx)
-DEBUG    = -g
-CXXFLAGS = $(shell fltk-config --use-gl --use-images --cxxflags ) -I.
-LDFLAGS  = $(shell fltk-config --use-gl --use-images --ldflags )
-LDSTATIC = $(shell fltk-config --use-gl --use-images --ldstaticflags )
-LINK     = $(CXX)
-
-TARGET = cube
-OBJS = CubeMain.o CubeView.o CubeViewUI.o
-SRCS = CubeMain.cxx CubeView.cxx CubeViewUI.cxx
-
-.SUFFIXES: .o .cxx
-%.o: %.cxx
-	$(CXX) $(CXXFLAGS) $(DEBUG) -c $<
-
-all: $(TARGET)
-	$(LINK) -o $(TARGET) $(OBJS) $(LDSTATIC)
-
-$(TARGET): $(OBJS)
-CubeMain.o: CubeMain.cxx CubeViewUI.h
-CubeView.o: CubeView.cxx CubeView.h CubeViewUI.h
-CubeViewUI.o: CubeViewUI.cxx CubeView.h
-
-clean: $(TARGET) $(OBJS)
-	rm -f *.o 2> /dev/null
-	rm -f $(TARGET) 2> /dev/null
-\endcode
-
-\section basics_visual_cpp Compiling Programs with Microsoft Visual C++
-
-In Visual C++ you will need to tell the compiler where to
-find the FLTK header files. This can be done by selecting
-"Settings" from the "Project" menu and then changing the 
-"Preprocessor" settings under the "C/C++" tab. You will also 
-need to add the FLTK (<tt>FLTK.LIB</tt> or <tt>FLTKD.LIB</tt>) and the Windows
-Common Controls (<tt>COMCTL32.LIB</tt>) libraries to the "Link" settings.
-You must also define <tt>WIN32</tt>.
-
-More information can be found in <tt>README.MSWindows.txt</tt>.
-
-You can build your Microsoft Windows applications as Console or
-Desktop applications.  If you want to use the standard C \p main()
-function as the entry point, FLTK includes a \p WinMain()
-function that will call your \p main() function for you.
-
-\section basics_naming Naming
-
-All public symbols in FLTK start with the characters 'F' and 'L':
-
-\li Functions are either \p Fl::foo() or \p fl_foo().
-
-\li Class and type names are capitalized: \p Fl_Foo.
-
-\li \ref enumerations "Constants and enumerations"
-    are uppercase: \p FL_FOO.
-
-\li All header files start with <tt><FL/...></tt>.
-
-<!-- NEED 5in -->
-
-\section basics_headerfiles Header Files
-
-The proper way to include FLTK header files is:
-
-\code
-#include <FL/Fl_xyz.H>
-\endcode
-
-\note
-Case \e is significant on many operating systems,
-and the C standard uses the forward slash (/) to
-separate directories. <i>Do not use any of the following
-include lines:</i>
-
-\code
-#include <FL\Fl_xyz.H>
-#include <fl/fl_xyz.h>
-#include <Fl/fl_xyz.h>
-\endcode
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="intro.html">
-    [Prev]
-    Introduction to FLTK
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="common.html">
-    Common Widgets and Attributes
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/blocks.man
+++ /dev/null
@@ -1,26 +1,0 @@
-.TH blocks 6 "FLTK Checkers" "15 January 2006"
-.SH NAME
-blocks \- the fltk block attack! game
-.sp
-.SH SYNOPSIS
-\fIBlocks\fR is a FLTK-based block elimination game. Stacks of
-colored blocks move from right to left as you try to eliminate
-groups adjacent blocks by clicking on them. As the game
-progresses, more colors are added (up to a maximum of 7) and the
-blocks move faster and faster.
-.SH GAME PLAY
-Press the N key to start a game. As the blocks move across the
-window, click on groups of two or more blocks to clear them - the
-larger the number of adjacent blocks, the greater the score.
-Clicking on a blocks containing a dark ball will clear all blocks
-of that color, however you will score much fewer points than a
-normal click. The game is over when the blocks reach the left
-side of the window.
-.LP
-Press the spacebar to pause the game.
-.SH SEE ALSO
-fltk(3)
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHOR
-Michael R Sweet.
binary files a/DoConfig/fltk/documentation/src/boxtypes.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/buttons.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/charts.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/checkers.man
+++ /dev/null
@@ -1,24 +1,0 @@
-.TH checkers 6 "FLTK Checkers" "15 January 2006"
-.SH NAME
-checkers \- the fltk checkers game
-.sp
-.SH SYNOPSIS
-\fICheckers\fR is a FLTK-based version of the game of checkers.
-The game is played on an 8x8 board with each player starting with
-12 pieces or "checkers" on opposite sides of the board. The
-computer plays the white checkers in this version of the game.
-.LP
-The object of the game is to remove all of your opponents pieces.
-Players move one of their pieces diagonally forward on each move,
-either a single space or by "jumping" an adjacent piece. Your
-opponents pieces are removed by jumping them - you can make
-multiple jumps in a single turn.
-.LP
-If a piece reaches the other side of the board, it is converted
-to a "king" which can move both forwards and backwards.
-.SH SEE ALSO
-fltk(3)
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHORS
-Bill Spitzak and others.
binary files a/DoConfig/fltk/documentation/src/choice.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/clock.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/common.dox
+++ /dev/null
@@ -1,630 +1,0 @@
-/**
-
- \page	common Common Widgets and Attributes
-
-This chapter describes many of the widgets that are provided
-with FLTK and covers how to query and set the standard
-attributes.
-
-\section common_buttons Buttons
-
-FLTK provides many types of buttons:
-
-\li Fl_Button - A standard push button.
-
-\li Fl_Check_Button - A button with a check box.
-
-\li Fl_Light_Button - A push button with a light.
-
-\li Fl_Repeat_Button - A push button that repeats when held.
-
-\li Fl_Return_Button - A push button that is activated by the
-    \p Enter key.
-
-\li Fl_Round_Button - A button with a radio circle.
-
-\image html buttons.png "Figure 3-1: FLTK Button Widgets"
-\image latex buttons.png "FLTK Button Widgets" width=10cm
-
-All of these buttons just need the corresponding
-<tt><FL/Fl_xyz_Button.H></tt> header file. The constructor
-takes the bounding box of the button and optionally a label
-string:
-
-\code
-Fl_Button *button = new Fl_Button(x, y, width, height, "label");
-Fl_Light_Button *lbutton = new Fl_Light_Button(x, y, width, height);
-Fl_Round_Button *rbutton = new Fl_Round_Button(x, y, width, height, "label");
-\endcode
-
-Each button has an associated \p type() which allows
-it to behave as a push button, toggle button, or radio button:
-
-\code
-button->type(FL_NORMAL_BUTTON);
-lbutton->type(FL_TOGGLE_BUTTON);
-rbutton->type(FL_RADIO_BUTTON);
-\endcode
-
-For toggle and radio buttons, the \p value() method returns 
-the current button state (0 = off, 1 = on). The \p set() and
-\p clear() methods can be used on toggle buttons to turn a 
-toggle button on or off, respectively. 
-Radio buttons can be turned on with the \p setonly()
-method; this will also turn off other radio buttons in the same
-group.
-
-\section common_text Text
-
-FLTK provides several text widgets for displaying and receiving text:
-
-\li Fl_Input - A one-line text input field.
-
-\li Fl_Output - A one-line text output field.
-
-\li Fl_Multiline_Input - A multi-line text input field.
-
-\li Fl_Multiline_Output	- A multi-line text output field.
-
-\li Fl_Text_Display - A multi-line text display widget.
-
-\li Fl_Text_Editor - A multi-line text editing widget.
-
-\li Fl_Help_View - A HTML text display widget.
-
-The Fl_Output and Fl_Multiline_Output
-widgets allow the user to copy text from the output field but
-not change it.
-
-The \p value() method is used to get or set the 
-string that is displayed:
-
-\code
-Fl_Input *input = new Fl_Input(x, y, width, height, "label");
-input->value("Now is the time for all good men...");
-\endcode
-
-The string is copied to the widget's own storage when you set
-the \p value() of the widget.
-
-The Fl_Text_Display and Fl_Text_Editor
-widgets use an associated Fl_Text_Buffer class for the
-value, instead of a simple string.
-
-<!-- NEED 4in -->
-
-\section common_valuators Valuators
-
-Unlike text widgets, valuators keep track of numbers instead of
-strings. FLTK provides the following valuators:
-
-\li Fl_Counter - A widget with arrow buttons that shows the current value.
-
-\li Fl_Dial - A round knob.
-
-\li Fl_Roller - An SGI-like dolly widget.
-
-\li Fl_Scrollbar - A standard scrollbar widget.
-
-\li Fl_Slider - A scrollbar with a knob.
-
-\li Fl_Value_Slider - A slider that shows the current value.
-
-\image html valuators.png "Figure 3-2: FLTK valuator widgets"
-\image latex valuators.png "FLTK valuator widgets" width=10cm
-
-The \p value() method gets and sets the current value 
-of the widget. The \p minimum() and \p maximum()
-methods set the range of values that are reported by the
-widget.
-
-<!-- NEED 5in -->
-
-\section common_groups Groups
-
-The Fl_Group widget class is used as a general
-purpose "container" widget. Besides grouping radio
-buttons, the groups are used to encapsulate windows, tabs, and
-scrolled windows. The following group classes are available
-with FLTK:
-
-\li Fl_Double_Window - A double-buffered window on the screen.
-
-\li Fl_Gl_Window - An OpenGL window on the screen.
-
-\li Fl_Group - The base container class; can be used to group
-    any widgets together.
-
-\li Fl_Pack - A collection of widgets that are packed into the group area.
-
-\li Fl_Scroll - A scrolled window area.
-
-\li Fl_Tabs - Displays child widgets as tabs.
-
-\li Fl_Tile - A tiled window area.
-
-\li Fl_Window - A window on the screen.
-
-\li Fl_Wizard - Displays one group of widgets at a time.
-
-\section common_sizeposition Setting the Size and Position of Widgets
-
-The size and position of widgets is usually set when you create them.
-You can access them with the \p x(), \p y(), \p w(), and \p h()
-methods.
-
-You can change the size and position by using the \p position(),
-\p resize(), and \p size() methods:
-
-\code
-button->position(x, y);
-group->resize(x, y, width, height);
-window->size(width, height);
-\endcode
-
-If you change a widget's size or position after it is
-displayed you will have to call \p redraw() on the
-widget's parent.
-
-\section common_colors Colors
-
-FLTK stores the colors of widgets as an 32-bit unsigned
-number that is either an index into a color palette of 256
-colors or a 24-bit RGB color. The color palette is \e not
-the X or MS Windows colormap, but instead is an internal table with
-fixed contents.
-
-See the
-\ref drawing_colors
-section of
-\ref drawing
-for implementation details.
-
-There are symbols for naming some of the more common colors:
-
-\li \p FL_BLACK
-\li \p FL_RED
-\li \p FL_GREEN
-\li \p FL_YELLOW
-\li \p FL_BLUE
-\li \p FL_MAGENTA
-\li \p FL_CYAN
-\li \p FL_WHITE
-\li \p FL_WHITE
-
-Other symbols are used as the default colors for all FLTK widgets.
-
-\li \p FL_FOREGROUND_COLOR
-\li \p FL_BACKGROUND_COLOR
-\li \p FL_INACTIVE_COLOR
-\li \p FL_SELECTION_COLOR
-
-The full list of named color values can be found in
-\ref enumerations_colors "FLTK Enumerations".
-
-A color value can be created from its RGB components by using the
-\p %fl_rgb_color() function, and decomposed again with
-\p Fl::get_color():
-
-\code
-Fl_Color c = fl_rgb_color(85, 170, 255);    // RGB to Fl_Color
-Fl::get_color(c, r, g, b);                  // Fl_Color to RGB
-\endcode
-
-The widget color is set using the \p color() method:
-
-\code
-button->color(FL_RED);                      // set color using named value
-\endcode
-
-Similarly, the label color is set using the \p labelcolor() method:
-
-\code
-button->labelcolor(FL_WHITE);
-\endcode
-
-The Fl_Color encoding maps to a 32-bit unsigned integer representing
-RGBI, so it is also possible to specify a color using a hex constant
-as a color map index:
-
-\code
-button->color(0x000000ff);                  // colormap index #255 (FL_WHITE)
-\endcode
-
-or specify a color using a hex constant for the RGB components:
-
-\code
-button->color(0xff000000);                  // RGB: red
-button->color(0x00ff0000);                  // RGB: green
-button->color(0x0000ff00);                  // RGB: blue
-button->color(0xffffff00);                  // RGB: white
-\endcode
-
-\note
-If TrueColor is not available, any RGB colors will be set to
-the nearest entry in the colormap.
-
-\section common_boxtypes Box Types
-
-The type Fl_Boxtype stored and returned in Fl_Widget::box()
-is an enumeration defined in Enumerations.H.
-
-Figure 3-3 shows the standard box types included with FLTK.
-
-\image html boxtypes.png "Figure 3-3: FLTK box types"
-\image latex boxtypes.png "FLTK box types" width=12cm
-
-\p FL_NO_BOX means nothing is drawn at all, so whatever is
-already on the screen remains. The <tt>FL_..._FRAME</tt> types only
-draw their edges, leaving the interior unchanged. The blue color in
-Figure 3-3 is the area that is not drawn by the frame types.
-
-\subsection common_custom_boxtypes Making Your Own Boxtypes
-
-You can define your own boxtypes by making a small function that draws
-the box and adding it to the table of boxtypes.
-
-
-\par The Drawing Function
-
-The drawing function is passed the bounding box and background color
-for the widget:
-
-\code
-void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
-...
-}
-\endcode
-
-<!-- NEED 3in -->
-
-A simple drawing function might fill a rectangle with the
-given color and then draw a black outline:
-
-\code
-void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(c);
-  fl_rectf(x, y, w, h);
-  fl_color(FL_BLACK);
-  fl_rect(x, y, w, h);
-}
-\endcode
-
-\anchor common_fl_down
-Fl_Boxtype fl_down(Fl_Boxtype b)
-
-\par
-fl_down() returns the "pressed" or "down" version of a box.
-If no "down" version of a given box exists, the behavior of this function
-is undefined and some random box or frame is returned.
-See \ref drawing_fl_frame "Drawing Functions" for more details.
-
-\anchor common_fl_frame
-Fl_Boxtype fl_frame(Fl_Boxtype b)
-
-\par
-fl_frame() returns the unfilled, frame-only version of a box.
-If no frame version of a given box exists, the behavior of this function
-is undefined and some random box or frame is returned.
-See \ref drawing_fl_frame "Drawing Functions" for more details.
-
-Fl_Boxtype fl_box(Fl_Boxtype b)
-
-\par
-fl_box() returns the filled version of a frame.
-If no filled version of a given frame exists, the behavior of this function
-is undefined and some random box or frame is returned.
-See \ref drawing_fl_frame "Drawing Functions" for more details.
-
-\par Adding Your Box Type
-
-The Fl::set_boxtype() method adds or replaces the specified box type:
-
-\code
-#define XYZ_BOX FL_FREE_BOXTYPE
-
-Fl::set_boxtype(XYZ_BOX, xyz_draw, 1, 1, 2, 2);
-\endcode
-The last 4 arguments to Fl::set_boxtype() are the
-offsets for the \p x, \p y, \p width, and \p height values that should be
-subtracted when drawing the label inside the box.
-
-A complete box design contains four box types in this order: 
-a filled, neutral box (<tt>UP_BOX</tt>),
-a filled, depressed box (<tt>DOWN_BOX</tt>),
-and the same as outlines only (<tt>UP_FRAME</tt> and <tt>DOWN_FRAME</tt>).
-The function
-\ref common_fl_down "fl_down(Fl_Boxtype)"
-expects the neutral design on a boxtype with a numerical 
-value evenly dividable by two. 
-\ref common_fl_frame "fl_frame(Fl_Boxtype)"
-expects the \p UP_BOX design at a value dividable by four.
-
-\section common_labels Labels and Label Types
-
-The \p label(), \p align(), \p labelfont(), \p labelsize(),
-\p labeltype(), \p image(), and \p deimage() methods control the
-labeling of widgets.
-
-\par label()
-
-The \p label() method sets the string that is displayed
-for the label. Symbols can be included with the label string by
-escaping them using the "@" symbol - "@@" displays a single at
-sign. Figure 3-4 shows the available symbols.
-
-\image html symbols.png "Figure 3-4: FLTK label symbols"
-\image latex symbols.png "FLTK label symbols" width=10cm
-
-<!-- NEED 2in -->
-
-The @ sign may also be followed by the following optional
-"formatting" characters, in this order:
-
-\li '#' forces square scaling, rather than distortion to the widget's shape.
-
-\li +[1-9] or -[1-9] tweaks the scaling a little bigger or smaller.
-
-\li '$' flips the symbol horizontally, '\%' flips it vertically.
-
-\li [0-9] - rotates by a multiple of 45 degrees. '5' and '6' do no rotation
-    while the others point in the direction of that key on a numeric keypad.
-    '0', followed by four more digits rotates the symbol by that amount in
-    degrees.
-
-Thus, to show a very large arrow pointing downward you would use the
-label string "@+92->".
-
-\par align()
-
-The \p align() method positions the label. The following
-constants are defined and may be OR'd together as needed:
-
-\li \p FL_ALIGN_CENTER - center the label in the widget.
-\li \p FL_ALIGN_TOP - align the label at the top of the widget.
-\li \p FL_ALIGN_BOTTOM - align the label at the bottom of the widget.
-\li \p FL_ALIGN_LEFT - align the label to the left of the widget.
-\li \p FL_ALIGN_RIGHT - align the label to the right of the widget.
-\li \p FL_ALIGN_LEFT_TOP - The label appears to the left of the widget, aligned at the top. Outside labels only.
-\li \p FL_ALIGN_RIGHT_TOP - The label appears to the right of the widget, aligned at the top. Outside labels only.
-\li \p FL_ALIGN_LEFT_BOTTOM - The label appears to the left of the widget, aligned at the bottom. Outside labels only.
-\li \p FL_ALIGN_RIGHT_BOTTOM - The label appears to the right of the widget, aligned at the bottom. Outside labels only.
-\li \p FL_ALIGN_INSIDE - align the label inside the widget.
-\li \p FL_ALIGN_CLIP - clip the label to the widget's bounding box.
-\li \p FL_ALIGN_WRAP - wrap the label text as needed.
-\li \p FL_ALIGN_TEXT_OVER_IMAGE - show the label text over the image.
-\li \p FL_ALIGN_IMAGE_OVER_TEXT - show the label image over the text (default).
-\li \p FL_ALIGN_IMAGE_NEXT_TO_TEXT - The image will appear to the left of the text.
-\li \p FL_ALIGN_TEXT_NEXT_TO_IMAGE - The image will appear to the right of the text.
-\li \p FL_ALIGN_IMAGE_BACKDROP - The image will be used as a background for the widget.
-
-\anchor common_labeltype
-\par labeltype()
-
-The \p labeltype() method sets the type of the label.  The
-following standard label types are included:
-
-\li \p FL_NORMAL_LABEL - draws the text.
-\li \p FL_NO_LABEL - does nothing.
-\li \p FL_SHADOW_LABEL - draws a drop shadow under the text.
-\li \p FL_ENGRAVED_LABEL - draws edges as though the text is engraved.
-\li \p FL_EMBOSSED_LABEL - draws edges as thought the text is raised.
-\li \p FL_ICON_LABEL - draws the icon associated with the text.
-
-\par image() and deimage()
-
-The \p image() and \p deimage() methods set an image that
-will be displayed with the widget. The \p deimage() method sets the
-image that is shown when the widget is inactive, while the \p image()
-method sets the image that is shown when the widget is active.
-
-To make an image you use a subclass of
-\ref ssect_Fl_Image "Fl_Image".
-
-\par Making Your Own Label Types
-
-Label types are actually indexes into a table of functions
-that draw them. The primary purpose of this is to use this to
-draw the labels in ways inaccessible through the
-fl_font() mechanism (e.g. <tt>FL_ENGRAVED_LABEL</tt>) or
-with program-generated letters or symbology.
-
-\par Label Type Functions
-
-To setup your own label type you will need to write two
-functions: one to draw and one to measure the label. The draw
-function is called with a pointer to a Fl_Label
-structure containing the label information, the bounding box for
-the label, and the label alignment:
-
-\code
-void xyz_draw(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align) {
-...
-}
-\endcode
-
-The label should be drawn \e inside this bounding box,
-even if \p FL_ALIGN_INSIDE is not enabled. The function
-is not called if the label value is \p NULL.
-
-The measure function is called with a pointer to a
-Fl_Label structure and references to the width and
-height:
-
-\code
-void xyz_measure(const Fl_Label *label, int &w, int &h) {
-...
-}
-\endcode
-
-The function should measure the size of the label and set
-\p w and \p h to the size it will occupy.
-
-\par Adding Your Label Type
-
-The Fl::set_labeltype() method creates a label type
-using your draw and measure functions:
-
-\code
-#define XYZ_LABEL FL_FREE_LABELTYPE
-
-Fl::set_labeltype(XYZ_LABEL, xyz_draw, xyz_measure);
-\endcode
-
-The label type number \p n can be any integer value
-starting at the constant \p FL_FREE_LABELTYPE. Once you
-have added the label type you can use the \p labeltype()
-method to select your label type.
-
-The Fl::set_labeltype() method can also be used to overload
-an existing label type such as \p FL_NORMAL_LABEL.
-
-\par Making your own symbols
-
-It is also possible to define your own drawings and add
-them to the symbol list, so they can be rendered as part of
-any label.
-
-To create a new symbol, you implement a drawing function 
-<tt>void drawit(Fl_Color c)</tt> which typically uses the
-functions described in \ref ssect_Complex
-to generate a vector shape inside a two-by-two units sized box
-around the origin. This function is then linked into the symbols
-table using fl_add_symbol():
-
-\code
-int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable)
-\endcode
-
-\p name is the name of the symbol without the "@"; \p scalable
-must be set to 1 if the symbol is generated using scalable vector drawing
-functions.
-
-\code
-int fl_draw_symbol(const char *name,int x,int y,int w,int h,Fl_Color col)
-\endcode
-
-This function draws a named symbol fitting the given rectangle.
-
-\section common_callbacks Callbacks
-
-Callbacks are functions that are called when the value of a
-widget changes. A callback function is sent a Fl_Widget
-pointer of the widget that changed and a pointer to data that
-you provide:
-
-\code
-void xyz_callback(Fl_Widget *w, void *data) {
-...
-}
-\endcode
-
-The \p callback() method sets the callback function for a
-widget. You can optionally pass a pointer to some data needed for the
-callback:
-
-\code
-int xyz_data;
-
-button->callback(xyz_callback, &xyz_data);
-\endcode
-
-Normally callbacks are performed only when the value of the
-widget changes. You can change this using the Fl_Widget::when()
-method:
-
-\code
-button->when(FL_WHEN_NEVER);
-button->when(FL_WHEN_CHANGED);
-button->when(FL_WHEN_RELEASE);
-button->when(FL_WHEN_RELEASE_ALWAYS);
-button->when(FL_WHEN_ENTER_KEY);
-button->when(FL_WHEN_ENTER_KEY_ALWAYS);
-button->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED);
-\endcode
-
-<CENTER><TABLE WIDTH="80%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
-<TR>
-	<TD><B>Note:</B>
-
-	You cannot delete a widget inside a callback, as the
-	widget may still be accessed by FLTK after your callback
-	is completed. Instead, use the Fl::delete_widget()
-	method to mark your widget for deletion when it is safe
-	to do so.
-
-	<B>Hint:</B>
-
-	Many programmers new to FLTK or C++ try to use a
-	non-static class method instead of a static class method
-	or function for their callback. Since callbacks are done
-	outside a C++ class, the <tt>this</tt> pointer is not
-	initialized for class methods.
-
-	To work around this problem, define a static method
-	in your class that accepts a pointer to the class, and
-	then have the static method call the class method(s) as
-	needed. The data pointer you provide to the
-	\p callback() method of the widget can be a
-	pointer to the instance of your class.
-
-\code
-class Foo {
-  void my_callback(Fl_Widget *w);
-  static void my_static_callback(Fl_Widget *w, void *f) { ((Foo *)f)->my_callback(w); }
-  ...
-}
-
-...
-
-w->callback(my_static_callback, (void *)this);
-\endcode
-	</TD>
-</TR>
-</TABLE></CENTER>
-
-\section common_shortcuts Shortcuts
-
-Shortcuts are key sequences that activate widgets such as
-buttons or menu items. The \p shortcut() method sets the
-shortcut for a widget:
-
-\code
-button->shortcut(FL_Enter);
-button->shortcut(FL_SHIFT + 'b');
-button->shortcut(FL_CTRL + 'b');
-button->shortcut(FL_ALT + 'b');
-button->shortcut(FL_CTRL + FL_ALT + 'b');
-button->shortcut(0); // no shortcut
-\endcode
-
-The shortcut value is the key event value - the ASCII value
-or one of the special keys described in
-\ref enumerations_event_key
-combined with any modifiers like \p Shift , \p Alt , and \p Control.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="basics.html">
-    [Prev]
-    FLTK Basics
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="editor.html">
-    Designing a Simple Text Editor
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/counter.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/cubeview.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/development.dox
+++ /dev/null
@@ -1,361 +1,0 @@
-/**
-
- \page development Developer Information
-
-This chapter describes FLTK development and documentation.
-
-
-<H2>Example</H2>
-
-\verbatim
-/** \file
-   Fl_Clock, Fl_Clock_Output widgets. */
-
-
-/**
-  \class Fl_Clock_Output
-  \brief This widget can be used to display a program-supplied time.
-  
-  The time shown on the clock is not updated. To display the current time,
-  use Fl_Clock instead.
-
-  \image html clock.png 
-  \image latex clock.png "" width=10cm 
-  \image html round_clock.png
-  \image latex clock.png "" width=10cm 
-  \image html round_clock.png "" width=10cm */
-
-  /**
-    Returns the displayed time.
-    Returns the time in seconds since the UNIX epoch (January 1, 1970).
-    \see value(ulong)
-   */
-  ulong value() const {return value_;}
-
-/**
-  Set the displayed time.
-  Set the time in seconds since the UNIX epoch (January 1, 1970).
-  \param[in] v seconds since epoch
-  \see value()
- */
-void Fl_Clock_Output::value(ulong v) {
- [...]
-}
-
-/**
-  Create an Fl_Clock widget using the given position, size, and label string.
-  The default boxtype is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {}
-
-/**
-  Create an Fl_Clock widget using the given boxtype, position, size, and
-  label string.
-  \param[in] t boxtype
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {
-  type(t);
-  box(t==FL_ROUND_CLOCK ? FL_NO_BOX : FL_UP_BOX);
-}
-\endverbatim
-
-
-\note
-
-From Duncan: (will be removed later, just for now as a reminder)
-
-   I've just added comments for the fl_color_chooser() functions, and
-   in order to keep them and the general Function Reference information
-   for them together, I created a new doxygen group, and used \\ingroup
-   in the three comment blocks. This creates a new Modules page (which
-   may not be what we want) with links to it from the File Members and
-   Fl_Color_Chooser.H pages. It needs a bit more experimentation on my
-   part unless someone already knows how this should be handled. (Maybe
-   we can add it to a functions.dox file that defines a functions group
-   and do that for all of the function documentation?)
-
-\b Update: the trick is not to create duplicate entries in a new group, but
-   to move the function information into the doxygen comments for the
-   class, and use the navigation links provided. Simply using \\relatesalso
-   as the first doxygen command in the function's comment puts it in the
-   appropriate place. There is no need to have \\defgroup and \\ingroup as
-   well, and indeed they don't work. So, to summarize:
-
-\verbatim
-Gizmo.H
-  /** \class Gizmo
-      A gizmo that does everything
-    */
-  class Gizmo {
-    etc
-  };
-  extern int popup_gizmo(...);
-
-Gizmo.cxx:
-  /** \relatesalso Gizmo
-      Pops up a gizmo dialog with a Gizmo in it
-    */
-  int popup_gizmo(...);
-\endverbatim
-
-<H3>Comments Within Doxygen Comment Blocks</H3>
-
-You can use HTML comment statements to embed comments in doxygen comment blocks.
-These comments will not be visible in the generated document.
-
-\code
-    The following text is a developer comment.
-    <!-- *** This *** is *** invisible *** -->
-    This will be visible again.
-\endcode
-
-will be shown as:
-
-    The following text is a developer comment.
-    <!-- *** This *** is *** invisible *** -->
-    This will be visible again.
-
-
-<H3>Different Headlines</H3>
-
-You can use HTML tags \<H1> ... \<H4> for headlines with different sizes.
-As of doxygen 1.8.x there must not be more than three spaces at the
-beginning of the line for this to work. Currently (doxygen 1.8.6)
-there seems to be no difference in the font sizes of \<H3> and \<H4>
-in the pdf output, whereas the html output uses different font sizes.
-
-\code
-   <H1>Headline in big text (H1)</H1>
-   <H2>Headline in big text (H2)</H2>
-   <H3>Headline in big text (H3)</H3>
-   <H4>Headline in big text (H4)</H4>
-\endcode
-
-   <H1>Headline in big text (H1)</H1>
-   <H2>Headline in big text (H2)</H2>
-   <H3>Headline in big text (H3)</H3>
-   <H4>Headline in big text (H4)</H4>
-
-
-\section development_non-ascii Non-ASCII Characters
-
-\code
-    Doxygen understands many HTML quoting characters like
-    &quot;, &uuml;, &ccedil;, &Ccedil;, but not all HTML quoting characters.
-\endcode
-
-This will appear in the document:
-
-    Doxygen understands many HTML quoting characters like
-    &quot;, &uuml;, &ccedil;, &Ccedil;, but not all HTML quoting characters.
-
-For further informations about HTML quoting characters see
-    <br> \b http://www.doxygen.org/htmlcmds.html
-
-Alternatively you can use \b UTF-8 encoding within Doxygen comments.
-
-
-\section development_structure Document Structure
-
-  \li	\b \\page	creates a named page
-  \li	\b \\section	creates a named section within that page
-  \li	\b \\subsection	creates a named subsection within the current section
-  \li	\b \\subsubsection creates a named subsubsection within the current subsection
-
-All these statements take a "name" as their first argument, and a title
-as their second argument. The title can contain spaces.
-
-The page, section, and subsection titles are formatted in blue color and
-a size like \b "<H1>", \b "<H2>", and \b "<H3>", and \b "<H4>", respectively.
-
-By <b>FLTK documentation convention</b>, a file like this one with a doxygen
-documentation chapter has the name <b>"<chapter>.dox".</b>
-The \b \\page statement at the top of the page is 
-<b>"\page <chapter> This is the title"</b>.
-Sections within a documentation page must be called \b "<chapter>_<section>",
-where \b "<chapter>" is the name part of the file, and \b "<section>" is a
-unique section name within the page that can be referenced in links. The
-same for subsections and subsubsections.
-
-These doxygen page and section commands work only in special documentation
-chapters, not within normal source or header documentation blocks. However,
-links \b from normal (e.g. class) documentation \b to documentation sections
-\b do \b work.
-
-This page has
-  \code
-	\page development I - Developer Information
-  \endcode
-at its top.
-
-This section is
-  \code
-	\section development_structure Document Structure
-  \endcode
-
-The following section is
-  \code
-	\section development_links Creating Links
-  \endcode
-
-
-\section development_links Creating Links
-
-Links to other documents and external links can be embedded with
-
-- doxygen \\ref links to other doxygen \\page, \\section,
-  \\subsection and \\anchor locations
-- HTML links without markup - doxygen creates "http://..."
-  links automatically
-- standard, non-Doxygen, HTML links
-
-\code
-
--   see chapter \ref unicode creates a link to the named chapter
-    unicode that has been created with a \\page statement.
-
--   For further informations about quoting see
-    http://www.doxygen.org/htmlcmds.html
-
--   see <a href="http://www.nedit.org/">Nedit</a> creates
-    a standard HTML link
-
-\endcode
-
-appears as:
-
--   see chapter \ref unicode creates a link to the named chapter
-    unicode that has been created with a \\page statement.
-
--   For further informations about quoting see
-    http://www.doxygen.org/htmlcmds.html
-
--   see <a href="http://www.nedit.org/">Nedit</a> creates
-    a standard HTML link
-
-
-\section development_paragraphs Paragraph Layout
-
-There is no real need to use HTML \<P\> and \</P\> tags within the text
-to tell doxygen to start or stop a paragraph. In most cases, when doxygen
-encounters a blank line or some, but not all, \b \\commands in the text it
-knows that it has reached the start or end of a paragraph. Doxygen also
-offers the \b \\par command for special paragraph handling. It can be used
-to provide a paragraph title and also to indent a paragraph. Unfortunately
-\b \\par won't do what you expect if you want to have doxygen links and
-sometimes html tags don't work either.
-
-<!-- use verbatim rather than code to avoid links to code reference -->
-\verbatim
-  \par Normal Paragraph with title
-
-  This paragraph will have a title, but because there is a blank line
-  between the \par and the text, it will have the normal layout.
-
-  \par Indented Paragraph with title
-  This paragraph will also have a title, but because there is no blank
-  line between the \par and the text, it will be indented.
-
-  \par
-  It is also possible to have an indented paragraph without title.
-  This is how you indent subsequent paragraphs.
-
-  \par No link to Fl_Widget::draw()
-  Note that the paragraph title is treated as plain text.
-  Doxygen type links will not work.
-  HTML characters and tags may or may not work.
-
-  Fl_Widget::draw() links and &quot;html&quot; tags work<br>
-  \par
-  Use a single line ending with <br> for complicated paragraph titles.
-\endverbatim
-
-The above code produces the following paragraphs:
-
-  \par Normal Paragraph with title
-
-  This paragraph will have a title, but because there is a blank line
-  between the \\par and the text, it will have the normal layout.
-
-  \par Indented Paragraph with title
-  This paragraph will also have a title, but because there is no blank
-  line between the \\par and the text, it will be indented.
-
-  \par
-  It is also possible to have an indented paragraph without title.
-  This is how you indent subsequent paragraphs.
-
-  \par No link to Fl_Widget::draw()
-  Note that the paragraph title is treated as plain text.
-  Doxygen type links will not work.
-  HTML characters and tags may or may not work.
-
-  Fl_Widget::draw() links and &quot;html&quot; tags work<br>
-  \par
-  Use a single line ending with \<br\> for complicated paragraph titles.
-
-
-\section development_navigation_test Navigation Elements
-
-Each introduction (tutorial) page ends with navigation elements. These
-elements must only be included in the html documentation, therefore
-they must be separated with \\htmlonly and \\endhtmlonly.
-
-The following code gives the navigation bar at the bottom of this page:
-
-\verbatim
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="migration_1_3.html">
-    [Prev]
-    Migrating Code from FLTK 1.1 to 1.3
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="license.html">
-    Software License
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-\endverbatim
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="migration_1_3.html">
-    [Prev]
-    Migrating Code from FLTK 1.1 to 1.3
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="license.html">
-    Software License
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/dial.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/drawing.dox
+++ /dev/null
@@ -1,1111 +1,0 @@
-/**
-
- \page	drawing Drawing Things in FLTK
-
-This chapter covers the drawing functions that are provided with FLTK.
-
-\section sect_WhenCanYouDraw When Can You Draw Things in FLTK?
-
-There are only certain places you can execute FLTK code 
-that draws to the computer's display.
-Calling these functions at other places will result in undefined behavior!
-
-\li The most common place is inside the virtual Fl_Widget::draw() method.
-    To write code here, you must subclass one of the existing Fl_Widget
-    classes and implement your own version of draw().
-
-\li You can also create custom \ref common_boxtypes "boxtypes" and
-    \ref common_labeltype "labeltypes". These involve writing small
-    procedures that can be called by existing Fl_Widget::draw() methods.
-    These "types" are identified by an 8-bit index that is stored in the
-    widget's \p box(), \p labeltype(), and possibly other properties.
-
-\li You can call Fl_Window::make_current() to do incremental update of a
-    widget. Use Fl_Widget::window() to find the window.
-    
-In contrast, code that draws to other drawing surfaces than the display
-(i.e., instances of derived classes of the Fl_Surface_Device class, except 
-Fl_Display_Device, such as Fl_Printer and Fl_Copy_Surface) can be executed 
-at any time as follows:
-<ol><li> Memorize what is the current drawing surface calling Fl_Surface_Device::surface(),
-and make your surface the new current drawing surface calling the surface's 
-set_current() function;
-<li> Make a series of calls to any of the drawing functions described below;
-these will operate on the new current drawing surface;
-<li> Set the current drawing surface back to its previous state calling 
-the previous surface's set_current().
-</ol>
-
-\subsection ssect_DrawingUnit What Drawing Unit do FLTK drawing functions use?
-
-When drawing to the display or to instances of Fl_Copy_Surface and Fl_Image_Surface, 
-the unit of drawing functions corresponds
-generally to one pixel. The so-called 'retina' displays of some recent
-Apple computers are an exception to this rule: one drawing unit corresponds
-to the width or the height of 2 display pixels on a retina display.
-
-When drawing to surfaces that are instances of Fl_Paged_Device
-derived classes (i.e., Fl_Printer or Fl_PostScript_File_Device), the drawing unit
-is initially one point, that is, 1/72 of an inch. But this unit is changed
-after calls to Fl_Paged_Device::scale().
-
-
-
-\section sect_DrawingFunctions Drawing Functions
-
-To use the drawing functions you must first include the <FL/fl_draw.H>
-header file. FLTK provides the following types of drawing functions:
-
-\li \ref ssect_Boxes
-\li \ref ssect_Clipping
-\li \ref drawing_colors
-\li \ref ssect_Lines
-\li \ref ssect_Fast
-\li \ref ssect_Complex
-\li \ref ssect_Text
-\li \ref ssect_Fonts
-\li \ref ssect_CharacterEncoding
-\li \ref ssect_Overlay
-\li \ref drawing_images
-\li \ref ssect_DirectImageDrawing
-\li \ref ssect_DirectImageReading
-\li \ref ssect_Fl_Image
-\li \ref ssect_Offscreen
-
-\subsection ssect_Boxes Boxes
-
-FLTK provides three functions that can be used to draw boxes for buttons
-and other UI controls. Each function uses the supplied upper-lefthand corner
-and width and height to determine where to draw the box.
-
-void fl_draw_box(Fl_Boxtype b, int x, int y, int w, int h, Fl_Color c)
-
-\par
-The \p %fl_draw_box() function draws a standard boxtype \p b
-in the specified color \p c.
-
-\anchor drawing_fl_frame
-void fl_frame(const char *s, int x, int y, int w, int h) <br>
-void fl_frame2(const char *s, int x, int y, int w, int h)
-
-\par
-The \p %fl_frame() and \p %fl_frame2() functions draw a series of
-line segments around the given box. The string \p s must contain groups
-of 4 letters which specify one of 24 standard grayscale values,
-where 'A' is black and 'X' is white.
-The results of calling these functions with a string that is not a
-multiple of 4 characters in length are undefined.
-
-\par
-The only difference between \p %fl_frame() and \p %fl_frame2()
-is the order of the line segments:
-  - For \p %fl_frame() the order of each set of 4 characters is:
-    top, left, bottom, right.
-  - For \p %fl_frame2() the order of each set of 4 characters is:
-    bottom, right, top, left.
-
-\par
-Note that
-\ref common_fl_frame "fl_frame(Fl_Boxtype b)" 
-is described in the \ref common_boxtypes section.
-
-
-\subsection ssect_Clipping Clipping
-
-You can limit all your drawing to a rectangular region by calling
-\p %fl_push_clip(), and put the drawings back by using
-\p %fl_pop_clip().
-This rectangle is measured in pixels and is unaffected by the current
-transformation matrix.
-
-In addition, the system may provide clipping when updating windows
-which may be more complex than a simple rectangle.
-
-void fl_push_clip(int x, int y, int w, int h) <br>
-void fl_clip(int x, int y, int w, int h)
-
-\par
-Intersect the current clip region with a rectangle and push this new
-region onto the stack.
-
-\par
-The \p %fl_clip() version is deprecated and
-will be removed from future releases.
-
-void fl_push_no_clip()
-
-\par
-Pushes an empty clip region on the stack so nothing will be clipped.
-
-void fl_pop_clip()
-
-\par
-Restore the previous clip region.
-
-\par
-\b Note:
-You must call \p %fl_pop_clip() once for every time you call
-\p %fl_push_clip().
-If you return to FLTK with the clip stack not empty unpredictable results
-occur.
-
-int fl_not_clipped(int x, int y, int w, int h)
-
-\par
-Returns non-zero if any of the rectangle intersects the current clip
-region. If this returns 0 you don't have to draw the object.
-
-\par
-\b Note:
-Under X this returns 2 if the rectangle is partially clipped,
-and 1 if it is entirely inside the clip region.
-
-int fl_clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H)
-
-\par
-Intersect the rectangle <tt>x,y,w,h</tt> with the current
-clip region and returns the bounding box of the result in
-<tt>X,Y,W,H</tt>. Returns non-zero if the resulting rectangle is
-different than the original. This can be used to limit the
-necessary drawing to a rectangle. \c W and \c H are
-set to zero if the rectangle is completely outside the region.
-
-void fl_clip_region(Fl_Region r) <br>
-Fl_Region fl_clip_region()
-
-\par
-Replace the top of the clip stack with a clipping region of any shape.
-Fl_Region is an operating system specific type. The second form returns 
-the current clipping region.
-
-
-\section drawing_colors Colors
-
-FLTK manages colors as 32-bit unsigned integers, encoded as RGBI.
-When the "RGB" bytes are non-zero, the value is treated as RGB.
-If these bytes are zero, the "I" byte will be used as an index
-into the colormap. Colors with both "RGB" set and an "I" >0
-are reserved for special use.
-
-Values from 0 to 255, i.e. the "I" index value, represent
-colors from the FLTK 1.3.x standard colormap
-and are allocated as needed on screens without TrueColor support.
-The \b Fl_Color enumeration type defines the
-standard colors and color cube for the first 256 colors. All of
-these are named with symbols in
-\ref enumerations "<FL/Enumerations.H>". Example:
-
-\image html fltk-colormap.png "FLTK default colormap (Fl_Color 0x00 - 0xff)"
-\image latex fltk-colormap.png "FLTK default colormap (Fl_Color 0x00 - 0xff)" width=6cm
-
-Color values greater than 255 are treated as 24-bit RGB
-values. These are mapped to the closest color supported by the
-screen, either from one of the 256 colors in the FLTK 1.3.x
-colormap or a direct RGB value on TrueColor screens.
-
-Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) <br>
-Fl_Color fl_rgb_color(uchar grayscale)
-
-\par
-Generate Fl_Color out of specified
-8-bit RGB values or one 8-bit grayscale value.
-
-void fl_color(Fl_Color c) <br>
-void fl_color(int c)
-
-\par
-Sets the color for all subsequent drawing operations.
-Please use the first form:
-the second form is only provided for back compatibility.
-
-\par
-For colormapped displays, a color cell will be allocated out
-of \p fl_colormap the first time you use a color. If the
-colormap fills up then a least-squares algorithm is used to find
-the closest color.
-
-Fl_Color fl_color()
-
-\par
-Returns the last color that was set using \p %fl_color().
-This can be used for state save/restore.
-
-void fl_color(uchar r, uchar g, uchar b)
-
-\par
-Set the color for all subsequent drawing operations. The
-closest possible match to the RGB color is used. The RGB color
-is used directly on TrueColor displays. For colormap visuals the
-nearest index in the gray ramp or color cube is used.
-
-unsigned Fl::get_color(Fl_Color i) <br>
-void Fl::get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue)
-
-\par
-Generate RGB values from a colormap index value \p i.
-The first returns the RGB as a 32-bit unsigned integer,
-and the second decomposes the RGB into three 8-bit values.
-
-Fl::get_system_colors() <br>
-Fl::foreground() <br>
-Fl::background() <br>
-Fl::background2()
-
-\par
-The first gets color values from the user preferences or the system,
-and the other routines are used to apply those values.
-
-Fl::own_colormap() <br>
-Fl::free_color(Fl_Color i, int overlay) <br>
-Fl::set_color(Fl_Color i, unsigned c)
-
-\par
-\p Fl::own_colormap() is used to install a local colormap [X11 only].
-\par
-\p Fl::free_color() and \p Fl::set_color() are used to remove and replace
-entries from the colormap.
-
-There are two predefined graphical interfaces for choosing colors.
-The function fl_show_colormap() shows a table of colors and returns an
-Fl_Color index value.
-The Fl_Color_Chooser widget provides a standard RGB color chooser.
-
-As the Fl_Color encoding maps to a 32-bit unsigned integer representing
-RGBI, it is also possible to specify a color using a hex constant as a
-color map index:
-<pre>
-// COLOR MAP INDEX
-color(0x000000II)
-        ------ |
-           |   |
-           |   Color map index (8 bits)
-           Must be zero
-</pre>
-\code
-button->color(0x000000ff);                  // colormap index #255 (FL_WHITE)
-\endcode
-
-or specify a color using a hex constant for the RGB components:
-<pre>
-// RGB COLOR ASSIGNMENTS
-color(0xRRGGBB00)
-         | | | |
-         | | | Must be zero
-         | | Blue (8 bits)
-         | Green (8 bits)
-         Red (8 bits)
-</pre>
-\code
-button->color(0xff000000);                  // RGB: red
-button->color(0x00ff0000);                  // RGB: green
-button->color(0x0000ff00);                  // RGB: blue
-button->color(0xffffff00);                  // RGB: white
-\endcode
-
-\note
-If TrueColor is not available, any RGB colors will be set to
-the nearest entry in the colormap.
-
-\subsection ssect_Lines Line Dashes and Thickness
-
-FLTK supports drawing of lines with different styles and
-widths. Full functionality is not available under Windows 95, 98,
-and Me due to the reduced drawing functionality these operating
-systems provide.
-
-void fl_line_style(int style, int width, char* dashes)
-
-\par
-Set how to draw lines (the "pen").  If you change this it is your
-responsibility to set it back to the default with
-\p fl_line_style(0).
-
-\par
-\b Note:
-Because of how line styles are implemented on MS Windows systems, you
-\e must set the line style \e after setting the drawing color.
-If you set the
-color after the line style you will lose the line style settings!
-
-\par
-\p style is a bitmask which is a bitwise-OR of the following
-values. If you don't specify a dash type you will get a solid
-line. If you don't specify a cap or join type you will get a
-system-defined default of whatever value is fastest.
-
-\par
-\li <tt>FL_SOLID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------</tt>
-\li <tt>FL_DASH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - - - -</tt>
-\li <tt>FL_DOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .......</tt>
-\li <tt>FL_DASHDOT&nbsp;&nbsp;&nbsp; - . - .</tt>
-\li <tt>FL_DASHDOTDOT - .. -</tt>
-\li <tt>FL_CAP_FLAT</tt>
-\li <tt>FL_CAP_ROUND</tt>
-\li <tt>FL_CAP_SQUARE</tt> (extends past end point 1/2 line width)
-\li <tt>FL_JOIN_MITER</tt> (pointed)
-\li <tt>FL_JOIN_ROUND</tt>
-\li <tt>FL_JOIN_BEVEL</tt> (flat)
-
-\par
-\p width is the number of pixels thick to draw the lines.
-Zero results in the system-defined default, which on both X and
-Windows is somewhat different and nicer than 1.
-
-\par
-\p dashes is a pointer to an array of dash lengths, measured in
-pixels.  The first location is how long to draw a solid portion, the
-next is how long to draw the gap, then the solid, etc.  It is
-terminated with a zero-length entry. A \p NULL pointer or a zero-length
-array results in a solid line. Odd array sizes are not supported and
-result in undefined behavior.
-
-\par
-\b Note:
-The dashes array does not work under Windows 95, 98, or Me, since those
-operating systems do not support complex line styles.
-
-
-\subsection ssect_Fast Drawing Fast Shapes
-
-These functions are used to draw almost all the FLTK widgets.
-They draw on exact pixel boundaries and are as fast as possible.
-Their behavior is duplicated exactly on all platforms FLTK is
-ported. It is undefined whether these are affected by the
-\ref ssect_Complex "transformation matrix",
-so you should only call these while the matrix is set to the
-identity matrix (the default).
-
-void fl_point(int x, int y)
-
-\par
-Draw a single pixel at the given coordinates.
-
-void fl_rectf(int x, int y, int w, int h) <br>
-void fl_rectf(int x, int y, int w, int h, Fl_Color c)
-
-\par
-Color a rectangle that exactly fills the given bounding box.
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b)
-
-\par
-Color a rectangle with "exactly" the passed
-<tt>r,g,b</tt> color. On screens with less than 24 bits of
-color this is done by drawing a solid-colored block using
-\ref drawing_fl_draw_image "fl_draw_image()"
-so that the correct color shade is produced.
-
-void fl_rect(int x, int y, int w, int h) <br>
-void fl_rect(int x, int y, int w, int h, Fl_Color c)
-
-\par
-Draw a 1-pixel border \e inside this bounding box.
-
-void fl_line(int x, int y, int x1, int y1) <br>
-void fl_line(int x, int y, int x1, int y1, int x2, int y2)
-
-\par
-Draw one or two lines between the given points.
-
-void fl_loop(int x, int y, int x1, int y1, int x2, int y2) <br>
-void fl_loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3)
-
-\par
-Outline a 3 or 4-sided polygon with lines.
-
-void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) <br>
-void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3)
-
-\par
-Fill a 3 or 4-sided polygon. The polygon must be convex.
-
-void fl_xyline(int x, int y, int x1) <br>
-void fl_xyline(int x, int y, int x1, int y2) <br>
-void fl_xyline(int x, int y, int x1, int y2, int x3)
-
-\par
-Draw horizontal and vertical lines. A horizontal line is
-drawn first, then a vertical, then a horizontal.
-
-void fl_yxline(int x, int y, int y1) <br>
-void fl_yxline(int x, int y, int y1, int x2) <br>
-void fl_yxline(int x, int y, int y1, int x2, int y3)
-
-\par
-Draw vertical and horizontal lines. A vertical line is drawn
-first, then a horizontal, then a vertical.
-
-void fl_arc(int x, int y, int w, int h, double a1, double a2) <br>
-void fl_pie(int x, int y, int w, int h, double a1, double a2)
-
-\par
-Draw ellipse sections using integer coordinates. These
-functions match the rather limited circle drawing code provided
-by X and MS Windows. The advantage over using
-\ref drawing_fl_arc "fl_arc()"
-with floating point
-coordinates is that they are faster because they often use the
-hardware, and they draw much nicer small circles, since the
-small sizes are often hard-coded bitmaps.
-
-\par
-If a complete circle is drawn it will fit inside the passed bounding
-box. The two angles are measured in degrees counter-clockwise from
-3'oclock and are the starting and ending angle of the arc, \p a2
-must be greater or equal to \p a1.
-
-\par
-\p %fl_arc() draws a series of lines to approximate the arc.
-Notice that the integer version of \p %fl_arc() has a different
-number of arguments to the other
-\ref drawing_fl_arc "fl_arc()"
-function described later in this chapter.
-
-\par
-\p %fl_pie() draws a filled-in pie slice. This slice may
-extend outside the line drawn by \p %fl_arc(); to avoid this
-use \p w-1 and \p h-1.
-
-\todo
-add an Fl_Draw_Area_Cb typedef to allow fl_scroll(...) to be doxygenated?
-
-void fl_scroll(int X, int Y, int W, int H, int dx, int dy, void (*draw_area)(void*, int,int,int,int), void* data)
-
-\par
-Scroll a rectangle and draw the newly exposed portions. The contents
-of the rectangular area is first shifted by \p dx and 
-\p dy pixels. The callback is then called for every newly 
-exposed rectangular area,
-
-
-\subsection ssect_Complex Drawing Complex Shapes
-
-The complex drawing functions let you draw arbitrary shapes
-with 2-D linear transformations. The functionality matches that
-found in the Adobe&reg; PostScript&tm; language. The
-exact pixels that are filled are less defined than for the fast
-drawing functions so that FLTK can take advantage of drawing
-hardware. On both X and MS Windows the transformed vertices are
-rounded to integers before drawing the line segments: this
-severely limits the accuracy of these functions for complex
-graphics, so use OpenGL when greater accuracy and/or performance
-is required.
-
-void fl_push_matrix() <br>
-void fl_pop_matrix()
-
-\par
-Save and restore the current transformation.  The maximum
-depth of the stack is 32 entries.
-
-void fl_scale(double x,double y) <br>
-void fl_scale(double x) <br>
-void fl_translate(double x,double y) <br>
-void fl_rotate(double d) <br>
-void fl_mult_matrix(double a,double b,double c,double d,double x,double y)
-
-\par
-Concatenate another transformation onto the current one. The rotation
-angle is in degrees (not radians) and is counter-clockwise.
-
-double fl_transform_x(double x, double y) <br>
-double fl_transform_y(double x, double y) <br>
-double fl_transform_dx(double x, double y) <br>
-double fl_transform_dy(double x, double y) <br>
-void fl_transformed_vertex(double xf, double yf)
-
-\par
-Transform a coordinate or a distance using the current transformation matrix.
-After transforming a coordinate pair, it can be added to the vertex
-list without any further translations using \p %fl_transformed_vertex().
-
-void fl_begin_points() <br>
-void fl_end_points()
-
-\par
-Start and end drawing a list of points. Points are added to
-the list with \p %fl_vertex().
-
-void fl_begin_line() <br>
-void fl_end_line()
-
-\par
-Start and end drawing lines.
-
-void fl_begin_loop() <br>
-void fl_end_loop()
-
-\par
-Start and end drawing a closed sequence of lines.
-
-void fl_begin_polygon() <br>
-void fl_end_polygon()
-
-\par
-Start and end drawing a convex filled polygon.
-
-void fl_begin_complex_polygon() <br>
-void fl_gap() <br>
-void fl_end_complex_polygon()
-
-\par
-Start and end drawing a complex filled polygon. This polygon
-may be concave, may have holes in it, or may be several
-disconnected pieces. Call \p %fl_gap() to separate loops of
-the path. It is unnecessary but harmless to call
-\p %fl_gap() before the first vertex, after the last one,
-or several times in a row.
-
-\par
-\p %fl_gap() should only be called between 
-\p %fl_begin_complex_polygon() and
-\p %fl_end_complex_polygon().
-To outline the polygon, use
-\p %fl_begin_loop() and replace each
-\p %fl_gap() with a
-\p %fl_end_loop();%fl_begin_loop() pair.
-
-\par
-\b Note:
-For portability, you should only draw polygons that appear the same whether
-"even/odd" or "non-zero" winding rules are used to fill them. Holes should
-be drawn in the opposite direction of the outside loop.
-
-void fl_vertex(double x,double y)
-
-\par
-Add a single vertex to the current path.
-
-void fl_curve(double X0, double Y0, double X1, double Y1, double X2, double Y2, double X3, double Y3)
-
-\par
-Add a series of points on a Bezier curve to the path. The curve ends
-(and two of the points are) at <tt>X0,Y0</tt> and <tt>X3,Y3</tt>.
-
-\anchor drawing_fl_arc
-void fl_arc(double x, double y, double r, double start, double end)
-
-\par
-Add a series of points to the current path on the arc of a
-circle; you can get elliptical paths by using scale and rotate
-before calling \p %fl_arc().
-The center of the circle is given by \p x and \p y,
-and \p r is its radius.
-\p %fl_arc()
-takes \p start and \p end angles that are measured
-in degrees counter-clockwise from 3 o'clock.
-If \p end is less than \p start then it draws the arc in a clockwise
-direction.
-
-void fl_circle(double x, double y, double r)
-
-\par
-\p fl_circle(...) is equivalent to \p fl_arc(...,0,360) but may
-be faster. It must be the \e only thing in the path: if you want
-a circle as part of a complex polygon you must use \p %fl_arc().
-
-\par
-\b Note:
-\p %fl_circle() draws incorrectly if the transformation is both rotated and
-non-square scaled.
-
-\subsection ssect_Text Drawing Text
-
-All text is drawn in the
-\ref drawing_fl_font "current font".
-It is undefined whether this location or the characters are
-modified by the current transformation.
-
-void fl_draw(const char *, int x, int y) <br>
-void fl_draw(const char *, int n, int x, int y)
-
-\par
-Draw a nul-terminated string or an array of \p n characters
-starting at the given location. Text is aligned to the left and to
-the baseline of the font. To align to the bottom, subtract
-\p %fl_descent() from \p y.
-To align to the top, subtract \p %fl_descent() and add \p %fl_height().
-This version of \p %fl_draw()  provides direct access to
-the text drawing function of the underlying OS. It does not apply any 
-special handling to control characters. 
-
-void fl_draw(const char* str, int x, int y, int w, int h, Fl_Align align, Fl_Image* img, int draw_symbols)
-
-\par
-Fancy string drawing function which is used to draw all the
-labels. The string is formatted and aligned inside the passed
-box.  Handles '\\t' and '\\n', expands all other control
-characters to ^X, and aligns inside or against the edges of the
-box described by \p x, \p y, \p w and \p h.
-See Fl_Widget::align() for values for \p align.
-The value \p FL_ALIGN_INSIDE is ignored, as this function always
-prints inside the box.
-
-\par
-If \p img is provided and is not \p NULL, the
-image is drawn above or below the text as specified by the
-\p align value.
-
-\par
-The \p draw_symbols argument specifies whether or not
-to look for symbol names starting with the "@" character.
-
-void fl_measure(const char *str, int& w, int& h, int draw_symbols)
-
-\par
-Measure how wide and tall the string will be when printed by
-the \p fl_draw(...align) function. This includes leading/trailing
-white space in the string, kerning, etc.
-\par
-If the incoming \p w is non-zero it will wrap to that width.
-\par
-This will probably give unexpected values unless you have called
-\ref drawing_fl_font "fl_font()" explicitly in your own code.
-Refer to the full documentation for fl_measure() for details
-on usage and how to avoid common pitfalls.
-
-\see fl_text_extents() -- measure the 'inked' area of a string
-\see fl_width() -- measure the pixel width of a string or single character
-\see fl_height() -- measure the pixel height of the \ref drawing_fl_font "current font"
-\see fl_descent() -- the height of the descender for the \ref drawing_fl_font "current font"
-
-int fl_height()
-
-\par
-Recommended minimum line spacing for the \ref drawing_fl_font "current font".
-You can also just use the value of \p size passed to
-\ref drawing_fl_font "fl_font()".
-
-\see fl_text_extents(), fl_measure(), fl_width(), fl_descent()
-
-int fl_descent()
-
-\par
-Recommended distance above the bottom of a \p %fl_height() tall box to draw
-the text at so it looks centered vertically in that box.
-
-double fl_width(const char* txt) <br>
-double fl_width(const char* txt, int n) <br>
-double fl_width(unsigned int unicode_char)
-
-\par
-Return the pixel width of a nul-terminated string, a sequence of \p n
-characters, or a single character in the \ref drawing_fl_font "current font".
-
-\see fl_measure(), fl_text_extents(), fl_height(), fl_descent()
-
-void fl_text_extents(const char* txt, int& dx, int& dy, int& w, int& h)
-
-\par
-Determines the minimum pixel dimensions of a nul-terminated string,
-ie. the 'inked area'.
-\par
-Given a string "txt" drawn using fl_draw(txt, x, y) you would determine
-its pixel extents on the display using fl_text_extents(txt, dx, dy, wo, ho)
-such that a bounding box that exactly fits around the inked area of the text
-could be drawn with fl_rect(x+dx, y+dy, wo, ho). 
-\par
-Refer to the full documentation for fl_text_extents() for details
-on usage.
-
-\see fl_measure(), fl_width(), fl_height(), fl_descent()
-
-const char* fl_shortcut_label(int shortcut)
-
-\par
-Unparse a shortcut value as used by Fl_Button or Fl_Menu_Item
-into a human-readable string like "Alt+N".  This only
-works if the shortcut is a character key or a numbered function
-key. If the shortcut is zero an empty string is returned. The
-return value points at a static buffer that is overwritten with
-each call.
-
-\subsection ssect_Fonts Fonts
-
-FLTK supports a set of standard fonts based on the Times,
-Helvetica/Arial, Courier, and Symbol typefaces, as well as
-custom fonts that your application may load. Each font is
-accessed by an index into a font table.
-
-Initially only the first 16 faces are filled in. There are
-symbolic names for them: FL_HELVETICA,
-FL_TIMES, FL_COURIER, and modifier values
-FL_BOLD and FL_ITALIC which can be added to
-these, and FL_SYMBOL and FL_ZAPF_DINGBATS.
-Faces greater than 255 cannot be used in Fl_Widget
-labels, since Fl_Widget stores the index as a byte.
-
-One important thing to note about 'current font' is that there
-are so many paths through the GUI event handling code as widgets
-are partially or completely hidden, exposed and then re-drawn
-and therefore you can not guarantee that 'current font' contains
-the same value that you set on the other side of the event loop.
-Your value may have been superseded when a widget was redrawn.
-You are strongly advised to set the font explicitly before you
-draw any text or query the width and height of text strings, etc.
-
-\anchor drawing_fl_font
-void fl_font(int face, int size)
-
-\par
-Set the current font, which is then used by the routines
-described above. You may call this outside a draw context if
-necessary to call fl_width(), but on X this will open
-the display.
-
-\par
-The font is identified by a \p face and a \p size.
-The size of the font is measured in \p pixels and not "points".
-Lines should be spaced \p size pixels apart or more.
-
-int fl_font() <br>
-int fl_size()
-
-\par
-Returns the face and size set by the most recent call to
-\p fl_font(a,b). This can be used to save/restore the font.
-
-\subsection ssect_CharacterEncoding Character Encoding
-
-FLTK 1.3 expects all text in Unicode UTF-8 encoding. UTF-8 is 
-ASCII compatible for the first 128 characters. International 
-characters are encoded in multibyte sequences. 
-
-FLTK expects individual characters, characters that are not part of 
-a string, in UCS-4 encoding, which is also ASCII compatible, but 
-requires 4 bytes to store a Unicode character.
-
-For more information about character encodings, see the chapter on
-\ref unicode.
-
-\subsection ssect_Overlay Drawing Overlays
-
-These functions allow you to draw interactive selection rectangles
-without using the overlay hardware. FLTK will XOR a single rectangle
-outline over a window.
-
-void fl_overlay_rect(int x, int y, int w, int h) <br>
-void fl_overlay_clear()
-
-\par
-\p %fl_overlay_rect() draws a selection rectangle, erasing any
-previous rectangle by XOR'ing it first. \p %fl_overlay_clear()
-will erase the rectangle without drawing a new one.
-
-\par
-Using these functions is tricky. You should make a widget
-with both a \p handle() and \p draw() method.
-\p draw() should call \p %fl_overlay_clear() before
-doing anything else.  Your \p handle() method should call
-<tt>window()->make_current()</tt> and then
-\p %fl_overlay_rect() after FL_DRAG events, and
-should call \p %fl_overlay_clear() after a
-FL_RELEASE event.
-
-
-\section drawing_images Drawing Images
-
-To draw images, you can either do it directly from data in
-your memory, or you can create a Fl_Image object. The advantage of
-drawing directly is that it is more intuitive, and it is faster
-if the image data changes more often than it is redrawn. The
-advantage of using the object is that FLTK will cache translated
-forms of the image (on X it uses a server pixmap) and thus
-redrawing is \e much faster.
-
-\subsection ssect_DirectImageDrawing Direct Image Drawing
-
-The behavior when drawing images when the current
-transformation matrix is not the identity is not defined, so you
-should only draw images when the matrix is set to the identity.
-
-\anchor drawing_fl_draw_image
-void fl_draw_image(const uchar *buf,int X,int Y,int W,int H,int D,int L)<br>
-void fl_draw_image_mono(const uchar *buf,int X,int Y,int W,int H,int D,int L)
-
-\par
-Draw an 8-bit per color RGB or luminance image.  The pointer
-points at the "r" data of the top-left pixel. Color
-data must be in <tt>r,g,b</tt> order.
-The top left corner is given by \p X and \p Y
-and the size of the image is given by \p W and \p H.
-\p D is the delta to add to the pointer between pixels,
-it may be any value greater or equal to \p 3,
-or it can be negative to flip the image horizontally.
-\p L is the delta to add to the pointer between lines
-(if 0 is passed it uses \p W*D).
-and may be larger than \p W*D to crop data,
-or negative to flip the image vertically.
-
-\par
-It is highly recommended that you put the following code before the
-first show() of \e any window in your program to get rid
-of the dithering if possible: 
-
-\code
-Fl::visual(FL_RGB);
-\endcode
-
-\par
-Gray scale (1-channel) images may be drawn. This is done if
-<tt>abs(D)</tt> is less than 3, or by calling
-\p %fl_draw_image_mono(). Only one 8-bit sample is used for
-each pixel, and on screens with different numbers of bits for
-red, green, and blue only gray colors are used. Setting
-\p D greater than 1 will let you display one channel of a
-color image.
-
-\par
-\b Note:
-The X version does not support all possible visuals.
-If FLTK cannot draw the image in the current visual it
-will abort. FLTK supports any visual of 8 bits or less,
-and all common TrueColor visuals up to 32 bits.
-
-typedef void (*Fl_Draw_Image_Cb)(void *data,int x,int y,int w,uchar *buf) <br>
-void fl_draw_image(Fl_Draw_Image_Cb cb,void *data,int X,int Y,int W,int H,int D) <br>
-void fl_draw_image_mono(Fl_Draw_Image_Cb cb,void *data,int X,int Y,int W,int H,int D)
-
-\par
-Call the passed function to provide each scan line of the
-image.  This lets you generate the image as it is being drawn,
-or do arbitrary decompression of stored data, provided it can be
-decompressed to individual scan lines easily.
-
-\par
-The callback is called with the \p void* user data
-pointer which can be used to point at a structure of information
-about the image, and the \p x, \p y, and \p w
-of the scan line desired from the image. 0,0 is the upper-left
-corner of the image, <I>not <tt>X,Y</tt></I>. A pointer to a
-buffer to put the data into is passed. You must copy \p w
-pixels from scanline \p y, starting at pixel \p x,
-to this buffer.
-
-\par
-Due to cropping, less than the whole image may be requested.
-So \p x may be greater than zero, the first \p y may
-be greater than zero, and \p w may be less than \p W.
-The buffer is long enough to store the entire \p W*D
-pixels, this is for convenience with some decompression
-schemes where you must decompress the entire line at once:
-decompress it into the buffer, and then if \p x is not
-zero, copy the data over so the \p x'th pixel is at the
-start of the buffer.
-
-\par
-You can assume the \p y's will be consecutive, except
-the first one may be greater than zero.
-
-\par
-If \p D is 4 or more, you must fill in the unused bytes
-with zero.
-
-int fl_draw_pixmap(char* const* data, int x, int y, Fl_Color bg) <br>
-int fl_draw_pixmap(const char* const* cdata, int x, int y, Fl_Color bg)
-
-\par
-Draws XPM image data, with the top-left corner at the given position.
-The image is dithered on 8-bit displays so you won't lose color space
-for programs displaying both images and pixmaps. This function returns
-zero if there was any error decoding the XPM data.
-
-\par
-To use an XPM, do:
-
-\code
-#include "foo.xpm"
-...
-fl_draw_pixmap(foo, X, Y);
-\endcode
-
-\par
-Transparent colors are replaced by the optional
-Fl_Color argument. To draw with true transparency you must
-use the Fl_Pixmap class.
-
-int fl_measure_pixmap(char* const* data, int &w, int &h) <br>
-int fl_measure_pixmap(const char* const* cdata, int &w, int &h)
-
-\par
-An XPM image contains the dimensions in its data. This
-function finds and returns the width and height. The return
-value is non-zero if the dimensions were parsed ok and zero if
-there was any problem.
-
-\subsection ssect_DirectImageReading Direct Image Reading
-
-FLTK provides a single function for reading from the current
-window or off-screen buffer into a RGB(A) image buffer.
-
-uchar* fl_read_image(uchar *p, int X, int Y, int W, int H, int alpha)
-
-\par
-Read a RGB(A) image from the current window or off-screen
-buffer. The \p p argument points to a buffer that can hold
-the image and must be at least \p W*H*3 bytes when reading
-RGB images and \p W*H*4 bytes when reading RGBA images. If
-\p NULL, \p %fl_read_image() will create an array of
-the proper size which can be freed using \p delete[].
-
-\par
-The \p alpha parameter controls whether an alpha
-channel is created and the value that is placed in the alpha
-channel. If 0, no alpha channel is generated.
-
-\subsection ssect_Fl_Image Image Classes
-
-FLTK provides a base image class called Fl_Image which supports
-creating, copying, and drawing images of various kinds, along
-with some basic color operations. Images can be used as labels
-for widgets using the \p image() and \p deimage() methods or drawn directly.
-
-The Fl_Image class does almost nothing by itself, but is instead 
-supported by three basic image types:
-
-\li Fl_Bitmap
-\li Fl_Pixmap
-\li Fl_RGB_Image
-
-The Fl_Bitmap class encapsulates a mono-color bitmap image.
-The \p draw() method draws the image using the current drawing
-color.
-
-The Fl_Pixmap class encapsulates a colormapped image.
-The \p draw() method draws the image using the colors in the
-file, and masks off any transparent colors automatically.
-
-The Fl_RGB_Image class encapsulates a full-color 
-(or grayscale) image with 1 to 4 color components. Images with 
-an even number of components are assumed to contain an 
-alpha channel that is used for transparency. The transparency 
-provided by the draw() method is either a 24-bit 
-blend against the existing window contents or a "screen door" 
-transparency mask, depending on the platform and screen color depth. 
-
-char fl_can_do_alpha_blending()
-
-\par
-\p %fl_can_do_alpha_blending() will return 1, if your
-platform supports true alpha blending for RGBA images, or 0, 
-if FLTK will use screen door transparency.
-
-FLTK also provides several image classes based on the three
-standard image types for common file formats:
-
-\li Fl_GIF_Image 
-\li Fl_JPEG_Image 
-\li Fl_PNG_Image 
-\li Fl_PNM_Image 
-\li Fl_XBM_Image 
-\li Fl_XPM_Image
-
-Each of these image classes loads a named file of the
-corresponding format. The Fl_Shared_Image class
-can be used to load any type of image file - the class examines
-the file and constructs an image of the appropriate type. It can also be used
-to scale an image to a certain size in drawing units, independently from its size 
-in pixels (see Fl_Shared_Image::scale()).
-
-Finally, FLTK provides a special image class called Fl_Tiled_Image to
-tile another image object in the specified area. This class can be
-used to tile a background image in a Fl_Group widget, for example.
-
-virtual void Fl_Image::copy() <br>
-virtual Fl_Image* Fl_Image::copy(int w, int h)
-
-\par
-The \p copy() method creates a copy of the image. The second form
-specifies the new size of the image - the image is resized using the
-nearest-neighbor algorithm (this is the default).
-
-\note
-As of FLTK 1.3.3 the image resizing algorithm can be changed.
-See Fl_Image::RGB_scaling(Fl_RGB_Scaling method)
-
-
-virtual void Fl_Image::draw(int x, int y, int w, int h, int ox, int oy)
-
-\par
-The \p draw() method draws the image object.
-<tt>x,y,w,h</tt> indicates the destination rectangle.
-<tt>ox,oy,w,h</tt> is the source rectangle. This source rectangle
-is copied to the destination. The source rectangle may extend
-outside the image, i.e. \p ox and \p oy may be
-negative and \p w and \p h may be bigger than the
-image, and this area is left unchanged.
-
-\note
-See exceptions for Fl_Tiled_Image::draw() regarding arguments
-\p ox, \p oy, \p w, and \p h.
-
-virtual void Fl_Image::draw(int x, int y)
-
-\par
-Draws the image with the upper-left corner at <tt>x, y</tt>.
-This is the same as doing <tt>img->draw(x, y, img->w(), img->h(), 0, 0)</tt>
-where img is a pointer to any Fl_Image type.
-
-\subsection ssect_Offscreen Offscreen Drawing
-
-Sometimes it can be very useful to generate a complex drawing
-in memory first and copy it to the screen at a later point in 
-time. This technique can significantly reduce the amount of
-repeated drawing. Offscreen drawing functions are declared in <FL/x.H>.
-Fl_Double_Window uses offscreen rendering
-to avoid flickering on systems that don't support 
-double-buffering natively. 
-
-Fl_Offscreen fl_create_offscreen(int w, int h)
-
-\par
-Create an RGB offscreen buffer with \p w*h pixels.
-
-void fl_delete_offscreen(Fl_Offscreen)
-
-\par
-Delete a previously created offscreen buffer. All drawings are lost.
-
-void fl_begin_offscreen(Fl_Offscreen)
-
-\par
-Send all subsequent drawing commands to this offscreen buffer. 
-FLTK can draw into a buffer at any time. There is no need to wait for 
-an Fl_Widget::draw() to occur.
-
-void fl_end_offscreen()
-
-\par
-Quit sending drawing commands to this offscreen buffer.
-
-void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen osrc, int srcx, int srcy)
-
-\par
-Copy a rectangular area of the size \p w*h from \p srcx,srcy
-in the offscreen buffer into the current buffer at \p x,y.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="editor.html">
-    [Prev]
-    Designing a Simple Text Editor
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="events.html">
-    Handling Events
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/editor-linenumbers.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/editor-replace.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/editor.dox
+++ /dev/null
@@ -1,918 +1,0 @@
-/**
-
- \page	editor Designing a Simple Text Editor
-
-This chapter takes you through the design of a simple
-FLTK-based text editor.
-
-\section editor_goals Determining the Goals of the Text Editor
-
-Since this will be the first big project you'll be doing with FLTK,
-lets define what we want our text editor to do:
-
--# Provide a menubar/menus for all functions.
--# Edit a single text file, possibly with multiple views.
--# Load from a file.
--# Save to a file.
--# Cut/copy/delete/paste functions.
--# Search and replace functions.
--# Keep track of when the file has been changed.
-
-<!-- NEED 4in -->
-
-\section editor_main_window Designing the Main Window
-
-Now that we've outlined the goals for our editor, we can begin with
-the design of our GUI. Obviously the first thing that we need is a
-window, which we'll place inside a class called \p EditorWindow:
-
-\code
-class EditorWindow : public Fl_Double_Window {
-  public:
-    EditorWindow(int w, int h, const char* t);
-    ~EditorWindow();
-
-    Fl_Window          *replace_dlg;
-    Fl_Input           *replace_find;
-    Fl_Input           *replace_with;
-    Fl_Button          *replace_all;
-    Fl_Return_Button   *replace_next;
-    Fl_Button          *replace_cancel;
-
-    Fl_Text_Editor     *editor;
-    char               search[256];
-};
-\endcode
-
-\section editor_variables Variables
-
-Our text editor will need some global variables to keep track of things:
-
-\code
-int            changed = 0;
-char           filename[256] = "";
-Fl_Text_Buffer *textbuf;
-\endcode
-
-The \p textbuf variable is the text editor buffer for
-our window class described previously. We'll cover the other
-variables as we build the application.
-
-\section editor_menubars Menubars and Menus
-
-The first goal requires us to use a menubar and menus that
-define each function the editor needs to perform. The Fl_Menu_Item
-structure is used to define the menus and items in a menubar:
-
-\code
-Fl_Menu_Item menuitems[] = {
-  { "&File",              0, 0, 0, FL_SUBMENU },
-    { "&New File",        0, (Fl_Callback *)new_cb },
-    { "&Open File...",    FL_COMMAND + 'o', (Fl_Callback *)open_cb },
-    { "&Insert File...",  FL_COMMAND + 'i', (Fl_Callback *)insert_cb, 0, FL_MENU_DIVIDER },
-    { "&Save File",       FL_COMMAND + 's', (Fl_Callback *)save_cb },
-    { "Save File &As...", FL_COMMAND + FL_SHIFT + 's', (Fl_Callback *)saveas_cb, 0, FL_MENU_DIVIDER },
-    { "New &View", FL_ALT + 'v', (Fl_Callback *)view_cb, 0 },
-    { "&Close View", FL_COMMAND + 'w', (Fl_Callback *)close_cb, 0, FL_MENU_DIVIDER },
-    { "E&xit", FL_COMMAND + 'q', (Fl_Callback *)quit_cb, 0 },
-    { 0 },
-
-  { "&Edit", 0, 0, 0, FL_SUBMENU },
-    { "&Undo",       FL_COMMAND + 'z', (Fl_Callback *)undo_cb, 0, FL_MENU_DIVIDER },
-    { "Cu&t",        FL_COMMAND + 'x', (Fl_Callback *)cut_cb },
-    { "&Copy",       FL_COMMAND + 'c', (Fl_Callback *)copy_cb },
-    { "&Paste",      FL_COMMAND + 'v', (Fl_Callback *)paste_cb },
-    { "&Delete",     0, (Fl_Callback *)delete_cb },
-    { 0 },
-
-  { "&Search", 0, 0, 0, FL_SUBMENU },
-    { "&Find...",       FL_COMMAND + 'f', (Fl_Callback *)find_cb },
-    { "F&ind Again",    FL_COMMAND + 'g', find2_cb },
-    { "&Replace...",    FL_COMMAND + 'r', replace_cb },
-    { "Re&place Again", FL_COMMAND + 't', replace2_cb },
-    { 0 },
-
-  { 0 }
-};
-\endcode
-
-Once we have the menus defined we can create the
-Fl_Menu_Bar widget and assign the menus to it with:
-
-\code
-Fl_Menu_Bar *m = new Fl_Menu_Bar(0, 0, 640, 30);
-m->copy(menuitems);
-\endcode
-
-We'll define the callback functions later.
-
-\section editor_editing Editing the Text
-
-To keep things simple our text editor will use the
-Fl_Text_Editor widget to edit the text:
-
-\code
-w->editor = new Fl_Text_Editor(0, 30, 640, 370);
-w->editor->buffer(textbuf);
-\endcode
-
-So that we can keep track of changes to the file, we also want to add
-a "modify" callback:
-
-\code
-textbuf->add_modify_callback(changed_cb, w);
-textbuf->call_modify_callbacks();
-\endcode
-
-Finally, we want to use a mono-spaced font like \p FL_COURIER:
-
-\code
-w->editor->textfont(FL_COURIER);
-\endcode
-
-\section editor_replace_dialog The Replace Dialog
-
-We can use the FLTK convenience functions for many of the
-editor's dialogs, however the replace dialog needs its own
-custom window.  To keep things simple we will have a
-"find" string, a "replace" string, and
-"replace all", "replace next", and
-"cancel" buttons.  The strings are just
-Fl_Input widgets, the "replace all" and
-"cancel" buttons are Fl_Button widgets, and
-the "replace next " button is a
-Fl_Return_Button widget:
-
-\image html editor-replace.png "Figure 4-1: The search and replace dialog"
-\image latex editor-replace.png "The search and replace dialog" width=10cm
-
-\code
-Fl_Window *replace_dlg = new Fl_Window(300, 105, "Replace");
-Fl_Input *replace_find = new Fl_Input(70, 10, 200, 25, "Find:");
-Fl_Input *replace_with = new Fl_Input(70, 40, 200, 25, "Replace:");
-Fl_Button *replace_all = new Fl_Button(10, 70, 90, 25, "Replace All");
-Fl_Button *replace_next = new Fl_Button(105, 70, 120, 25, "Replace Next");
-Fl_Button *replace_cancel = new Fl_Button(230, 70, 60, 25, "Cancel");
-\endcode
-
-\section editor_callbacks Callbacks
-
-Now that we've defined the GUI components of our editor, we
-need to define our callback functions.
-
-\subsection editor_changed_cb changed_cb()
-
-This function will be called whenever the user changes any text in the
-\p editor widget:
-
-\code
-void changed_cb(int, int nInserted, int nDeleted,int, const char*, void* v) {
-  if ((nInserted || nDeleted) && !loading) changed = 1;
-  EditorWindow *w = (EditorWindow *)v;
-  set_title(w);
-  if (loading) w->editor->show_insert_position();
-}
-\endcode
-
-The \p set_title() function is one that we will write to set
-the changed status on the current file.  We're doing it this way
-because we want to show the changed status in the window's
-title bar.
-
-\subsection editor_copy_cb copy_cb()
-
-This callback function will call Fl_Text_Editor::kf_copy()
-to copy the currently selected text to the clipboard:
-
-\code
-void copy_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_copy(0, e->editor);
-}
-\endcode
-
-\subsection editor_cut_cb cut_cb()
-
-This callback function will call Fl_Text_Editor::kf_cut()
-to cut the currently selected text to the clipboard:
-
-\code
-void cut_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_cut(0, e->editor);
-}
-\endcode
-
-\subsection editor_delete_cb delete_cb()
-
-This callback function will call Fl_Text_Buffer::remove_selection()
-to delete the currently selected text to the clipboard:
-
-\code
-void delete_cb(Fl_Widget*, void* v) {
-  textbuf->remove_selection();
-}
-\endcode
-
-\subsection editor_find_cb find_cb()
-
-This callback function asks for a search string using the
-fl_input() convenience function and then calls the \p find2_cb()
-function to find the string:
-
-\code
-void find_cb(Fl_Widget* w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *val;
-
-  val = fl_input("Search String:", e->search);
-  if (val != NULL) {
-    // User entered a string - go find it!
-    strcpy(e->search, val);
-    find2_cb(w, v);
-  }
-\endcode
-
-\subsection editor_find2_cb find2_cb()
-
-This function will find the next occurrence of the search
-string. If the search string is blank then we want to pop up the
-search dialog:
-
-\code
-void find2_cb(Fl_Widget* w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  if (e->search[0] == '\0') {
-    // Search string is blank; get a new one...
-    find_cb(w, v);
-    return;
-  }
-
-  int pos = e->editor->insert_position();
-  int found = textbuf->search_forward(pos, e->search, &pos);
-  if (found) {
-    // Found a match; select and update the position...
-    textbuf->select(pos, pos+strlen(e->search));
-    e->editor->insert_position(pos+strlen(e->search));
-    e->editor->show_insert_position();
-  }
-  else fl_alert("No occurrences of \'%s\' found!", e->search);
-}
-\endcode
-
-If the search string cannot be found we use the fl_alert()
-convenience function to display a message to that effect.
-
-\subsection editor_new_cb new_cb()
-
-This callback function will clear the editor widget and current
-filename. It also calls the \p check_save() function to give the
-user the opportunity to save the current file first as needed:
-
-\code
-void new_cb(Fl_Widget*, void*) {
-  if (!check_save()) return;
-
-  filename[0] = '\0';
-  textbuf->select(0, textbuf->length());
-  textbuf->remove_selection();
-  changed = 0;
-  textbuf->call_modify_callbacks();
-}
-\endcode
-
-\subsection editor_open_cb open_cb()
-
-This callback function will ask the user for a filename and then load
-the specified file into the input widget and current filename. It also
-calls the \p check_save() function to give the user the
-opportunity to save the current file first as needed:
-
-\code
-void open_cb(Fl_Widget*, void*) {
-  if (!check_save()) return;
-
-  char *newfile = fl_file_chooser("Open File?", "*", filename);
-  if (newfile != NULL) load_file(newfile, -1);
-}
-\endcode
-
-We call the \p load_file() function to actually load the file.
-
-\subsection editor_paste_cb paste_cb()
-
-This callback function will call Fl_Text_Editor::kf_paste()
-to paste the clipboard at the current position:
-
-\code
-void paste_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_paste(0, e->editor);
-}
-\endcode
-
-\subsection editor_quit_cb quit_cb()
-
-The quit callback will first see if the current file has been
-modified, and if so give the user a chance to save it. It then exits
-from the program:
-
-\code
-void quit_cb(Fl_Widget*, void*) {
-  if (changed && !check_save())
-    return;
-
-  exit(0);
-}
-\endcode
-
-\subsection editor_replace_cb replace_cb()
-
-The replace callback just shows the replace dialog:
-
-\code
-void replace_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  e->replace_dlg->show();
-}
-\endcode
-
-\subsection editor_replace2_cb replace2_cb()
-
-This callback will replace the next occurrence of the replacement
-string. If nothing has been entered for the replacement string, then
-the replace dialog is displayed instead:
-
-\code
-void replace2_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *find = e->replace_find->value();
-  const char *replace = e->replace_with->value();
-
-  if (find[0] == '\0') {
-    // Search string is blank; get a new one...
-    e->replace_dlg->show();
-    return;
-  }
-
-  e->replace_dlg->hide();
-
-  int pos = e->editor->insert_position();
-  int found = textbuf->search_forward(pos, find, &pos);
-
-  if (found) {
-    // Found a match; update the position and replace text...
-    textbuf->select(pos, pos+strlen(find));
-    textbuf->remove_selection();
-    textbuf->insert(pos, replace);
-    textbuf->select(pos, pos+strlen(replace));
-    e->editor->insert_position(pos+strlen(replace));
-    e->editor->show_insert_position();
-  }
-  else fl_alert("No occurrences of \'%s\' found!", find);
-}
-\endcode
-
-\subsection editor_replall_cb replall_cb()
-
-This callback will replace all occurrences of the search
-string in the file:
-
-\code
-void replall_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *find = e->replace_find->value();
-  const char *replace = e->replace_with->value();
-
-  find = e->replace_find->value();
-  if (find[0] == '\0') {
-    // Search string is blank; get a new one...
-    e->replace_dlg->show();
-    return;
-  }
-
-  e->replace_dlg->hide();
-
-  e->editor->insert_position(0);
-  int times = 0;
-
-  // Loop through the whole string
-  for (int found = 1; found;) {
-    int pos = e->editor->insert_position();
-    found = textbuf->search_forward(pos, find, &pos);
-
-    if (found) {
-      // Found a match; update the position and replace text...
-      textbuf->select(pos, pos+strlen(find));
-      textbuf->remove_selection();
-      textbuf->insert(pos, replace);
-      e->editor->insert_position(pos+strlen(replace));
-      e->editor->show_insert_position();
-      times++;
-    }
-  }
-
-  if (times) fl_message("Replaced %d occurrences.", times);
-  else fl_alert("No occurrences of \'%s\' found!", find);
-}
-\endcode
-
-\subsection editor_replcan_cb replcan_cb()
-
-This callback just hides the replace dialog:
-
-\code
-void replcan_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  e->replace_dlg->hide();
-}
-\endcode
-
-\subsection editor_save_cb save_cb()
-
-This callback saves the current file.  If the current filename is
-blank it calls the "save as" callback:
-
-\code
-void save_cb(void) {
-  if (filename[0] == '\0') {
-    // No filename - get one!
-    saveas_cb();
-    return;
-  }
-  else save_file(filename);
-}
-\endcode
-
-The \p save_file() function saves the current file to the
-specified filename.
-
-\subsection editor_saveas_cb saveas_cb()
-
-This callback asks the user for a filename and saves the current file:
-
-\code
-void saveas_cb(void) {
-  char *newfile;
-
-  newfile = fl_file_chooser("Save File As?", "*", filename);
-  if (newfile != NULL) save_file(newfile);
-}
-\endcode
-
-The \p save_file() function saves the current file to the
-specified filename.
-
-\section editor_other_functions Other Functions
-
-Now that we've defined the callback functions, we need our support
-functions to make it all work:
-
-\subsection editor_check_save check_save()
-
-This function checks to see if the current file needs to be saved.  If
-so, it asks the user if they want to save it:
-
-\code
-int check_save(void) {
-  if (!changed) return 1;
-
-  int r = fl_choice("The current file has not been saved.\n"
-                    "Would you like to save it now?",
-                    "Cancel", "Save", "Discard");
-
-  if (r == 1) {
-    save_cb(); // Save the file...
-    return !changed;
-  }
-
-  return (r == 2) ? 1 : 0;
-}
-\endcode
-
-\subsection editor_load_file load_file()
-
-This function loads the specified file into the \p textbuf variable:
-
-\code
-int loading = 0;
-void load_file(char *newfile, int ipos) {
-  loading = 1;
-  int insert = (ipos != -1);
-  changed = insert;
-  if (!insert) strcpy(filename, "");
-  int r;
-  if (!insert) r = textbuf->loadfile(newfile);
-  else r = textbuf->insertfile(newfile, ipos);
-  if (r)
-    fl_alert("Error reading from file \'%s\':\n%s.", newfile, strerror(errno));
-  else
-    if (!insert) strcpy(filename, newfile);
-  loading = 0;
-  textbuf->call_modify_callbacks();
-}
-\endcode
-
-When loading the file we use the Fl_Text_Buffer::loadfile()
-method to "replace" the text in the buffer, or the
-Fl_Text_Buffer::insertfile()
-method to insert text in the buffer from the named file.
-
-\subsection editor_save_file save_file()
-
-This function saves the current buffer to the specified file:
-
-\code
-void save_file(char *newfile) {
-  if (textbuf->savefile(newfile))
-    fl_alert("Error writing to file \'%s\':\n%s.", newfile, strerror(errno));
-  else
-    strcpy(filename, newfile);
-  changed = 0;
-  textbuf->call_modify_callbacks();
-}
-\endcode
-
-\subsection editor_set_title set_title()
-
-This function checks the \p changed variable and updates the
-window label accordingly:
-\code
-void set_title(Fl_Window* w) {
-  if (filename[0] == '\0') strcpy(title, "Untitled");
-  else {
-    char *slash;
-    slash = strrchr(filename, '/');
-#ifdef WIN32
-    if (slash == NULL) slash = strrchr(filename, '\\');
-#endif
-    if (slash != NULL) strcpy(title, slash + 1);
-    else strcpy(title, filename);
-  }
-
-  if (changed) strcat(title, " (modified)");
-
-  w->label(title);
-}
-\endcode
-
-\section editor_main_function The main() Function
-
-Once we've created all of the support functions, the only thing left
-is to tie them all together with the \p main() function.
-The \p main() function creates a new text buffer, creates a
-new view (window) for the text, shows the window, loads the file on
-the command-line (if any), and then enters the FLTK event loop:
-
-\code
-int main(int argc, char **argv) {
-  textbuf = new Fl_Text_Buffer;
-
-  Fl_Window* window = new_view();
-
-  window->show(1, argv);
-
-  if (argc > 1) load_file(argv[1], -1);
-
-  return Fl::run();
-}
-\endcode
-
-\section editor_compiling Compiling the Editor
-
-The complete source for our text editor can be found in the
-\p test/editor.cxx source file.  Both the Makefile and Visual C++
-workspace include the necessary rules to build the editor.  You can
-also compile it using a standard compiler with:
-
-\code
-CC -o editor editor.cxx -lfltk -lXext -lX11 -lm
-\endcode
-
-or by using the \p fltk-config script with:
-
-\code
-fltk-config --compile editor.cxx
-\endcode
-
-As noted in \ref basics_standard_compiler, you may need to
-include compiler and linker options to tell them where to find the FLTK
-library. Also, the \p CC command may also be called \p gcc
-or \p c++ on your system.
-
-Congratulations, you've just built your own text editor!
-
-\section editor_final_product The Final Product
-
-The final editor window should look like the image in Figure 4-2.
-
-\image html editor.png "Figure 4-2: The completed editor window"
-\image latex editor.png "The completed editor window" width=12cm
-
-\section editor_advanced_features Advanced Features
-
-Now that we've implemented the basic functionality, it is
-time to show off some of the advanced features of the
-Fl_Text_Editor widget.
-
-\subsection editor_syntax Syntax Highlighting
-
-The Fl_Text_Editor widget supports highlighting
-of text with different fonts, colors, and sizes. The
-implementation is based on the excellent
-<A HREF="http://www.nedit.org/">NEdit</A>
-text editor core, from http://www.nedit.org/, which
-uses a parallel "style" buffer which tracks the font, color, and
-size of the text that is drawn.
-
-Styles are defined using the
-Fl_Text_Display::Style_Table_Entry structure
-defined in <tt><FL/Fl_Text_Display.H></tt>:
-
-\code
-struct Style_Table_Entry {
-  Fl_Color color;
-  Fl_Font  font;
-  int      size;
-  unsigned attr;
-};
-\endcode
-
-The \p color member sets the color for the text,
-the \p font member sets the FLTK font index to use,
-and the \p size member sets the pixel size of the
-text. The \p attr member is currently not used.
-
-For our text editor we'll define 7 styles for plain code,
-comments, keywords, and preprocessor directives:
-
-\code
-Fl_Text_Display::Style_Table_Entry styletable[] = {     // Style table
-  { FL_BLACK,      FL_COURIER,        FL_NORMAL_SIZE }, // A - Plain
-  { FL_DARK_GREEN, FL_COURIER_ITALIC, FL_NORMAL_SIZE }, // B - Line comments
-  { FL_DARK_GREEN, FL_COURIER_ITALIC, FL_NORMAL_SIZE }, // C - Block comments
-  { FL_BLUE,       FL_COURIER,        FL_NORMAL_SIZE }, // D - Strings
-  { FL_DARK_RED,   FL_COURIER,        FL_NORMAL_SIZE }, // E - Directives
-  { FL_DARK_RED,   FL_COURIER_BOLD,   FL_NORMAL_SIZE }, // F - Types
-  { FL_BLUE,       FL_COURIER_BOLD,   FL_NORMAL_SIZE }  // G - Keywords
-};
-\endcode
-
-You'll notice that the comments show a letter next to each
-style - each style in the style buffer is referenced using a
-character starting with the letter 'A'.
-
-You call the \p highlight_data() method to associate the
-style data and buffer with the text editor widget:
-
-\code
-Fl_Text_Buffer *stylebuf;
-
-w->editor->highlight_data(stylebuf, styletable,
-                          sizeof(styletable) / sizeof(styletable[0]),
-                          'A', style_unfinished_cb, 0);
-\endcode
-
-Finally, you need to add a callback to the main text buffer so
-that changes to the text buffer are mirrored in the style buffer:
-
-\code
-textbuf->add_modify_callback(style_update, w->editor);
-\endcode
-
-The \p style_update() function, like the \p change_cb()
-function described earlier, is called whenever text is added or removed from
-the text buffer. It mirrors the changes in the style buffer and then updates
-the style data as necessary:
-
-\code
-//
-// 'style_update()' - Update the style buffer...
-//
-
-void
-style_update(int        pos,          // I - Position of update
-             int        nInserted,    // I - Number of inserted chars
-             int        nDeleted,     // I - Number of deleted chars
-             int        nRestyled,    // I - Number of restyled chars
-             const char *deletedText, // I - Text that was deleted
-             void       *cbArg) {     // I - Callback data
-  int  start,                         // Start of text
-       end;                           // End of text
-  char last,                          // Last style on line
-       *style,                        // Style data
-       *text;                         // Text data
-
-
-  // If this is just a selection change, just unselect the style buffer...
-  if (nInserted == 0 && nDeleted == 0) {
-    stylebuf->unselect();
-    return;
-  }
-
-  // Track changes in the text buffer...
-  if (nInserted > 0) {
-    // Insert characters into the style buffer...
-    style = new char[nInserted + 1];
-    memset(style, 'A', nInserted);
-    style[nInserted] = '\0';
-
-    stylebuf->replace(pos, pos + nDeleted, style);
-    delete[] style;
-  } else {
-    // Just delete characters in the style buffer...
-    stylebuf->remove(pos, pos + nDeleted);
-  }
-
-  // Select the area that was just updated to avoid unnecessary
-  // callbacks...
-  stylebuf->select(pos, pos + nInserted - nDeleted);
-
-  // Re-parse the changed region; we do this by parsing from the
-  // beginning of the line of the changed region to the end of
-  // the line of the changed region...  Then we check the last
-  // style character and keep updating if we have a multi-line
-  // comment character...
-  start = textbuf->line_start(pos);
-  end   = textbuf->line_end(pos + nInserted - nDeleted);
-  text  = textbuf->text_range(start, end);
-  style = stylebuf->text_range(start, end);
-  last  = style[end - start - 1];
-
-  style_parse(text, style, end - start);
-
-  stylebuf->replace(start, end, style);
-  ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
-
-  if (last != style[end - start - 1]) {
-    // The last character on the line changed styles, so reparse the
-    // remainder of the buffer...
-    free(text);
-    free(style);
-
-    end   = textbuf->length();
-    text  = textbuf->text_range(start, end);
-    style = stylebuf->text_range(start, end);
-
-    style_parse(text, style, end - start);
-
-    stylebuf->replace(start, end, style);
-    ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
-  }
-
-  free(text);
-  free(style);
-}
-\endcode
-
-The \p style_parse() function scans a copy of the
-text in the buffer and generates the necessary style characters
-for display. It assumes that parsing begins at the start of a line:
-
-\code
-//
-// 'style_parse()' - Parse text and produce style data.
-//
-
-void
-style_parse(const char *text,
-            char       *style,
-            int        length) {
-  char             current;
-  int             col;
-  int             last;
-  char             buf[255],
-             *bufptr;
-  const char *temp;
-
-  for (current = *style, col = 0, last = 0; length > 0; length --, text ++) {
-    if (current == 'A') {
-      // Check for directives, comments, strings, and keywords...
-      if (col == 0 && *text == '#') {
-        // Set style to directive
-        current = 'E';
-      } else if (strncmp(text, "//", 2) == 0) {
-        current = 'B';
-      } else if (strncmp(text, "/*", 2) == 0) {
-        current = 'C';
-      } else if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted quote...
-        *style++ = current;
-        *style++ = current;
-        text ++;
-        length --;
-        col += 2;
-        continue;
-      } else if (*text == '\"') {
-        current = 'D';
-      } else if (!last && islower(*text)) {
-        // Might be a keyword...
-        for (temp = text, bufptr = buf;
-             islower(*temp) && bufptr < (buf + sizeof(buf) - 1);
-             *bufptr++ = *temp++);
-
-        if (!islower(*temp)) {
-          *bufptr = '\0';
-
-          bufptr = buf;
-
-          if (bsearch(&bufptr, code_types,
-                      sizeof(code_types) / sizeof(code_types[0]),
-                      sizeof(code_types[0]), compare_keywords)) {
-            while (text < temp) {
-              *style++ = 'F';
-              text ++;
-              length --;
-              col ++;
-            }
-
-            text --;
-            length ++;
-            last = 1;
-            continue;
-          } else if (bsearch(&bufptr, code_keywords,
-                             sizeof(code_keywords) / sizeof(code_keywords[0]),
-                             sizeof(code_keywords[0]), compare_keywords)) {
-            while (text < temp) {
-              *style++ = 'G';
-              text ++;
-              length --;
-              col ++;
-            }
-
-            text --;
-            length ++;
-            last = 1;
-            continue;
-          }
-        }
-      }
-    } else if (current == 'C' && strncmp(text, "*/", 2) == 0) {
-      // Close a C comment...
-      *style++ = current;
-      *style++ = current;
-      text ++;
-      length --;
-      current = 'A';
-      col += 2;
-      continue;
-    } else if (current == 'D') {
-      // Continuing in string...
-      if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted end quote...
-        *style++ = current;
-        *style++ = current;
-        text ++;
-        length --;
-        col += 2;
-        continue;
-      } else if (*text == '\"') {
-        // End quote...
-        *style++ = current;
-        col ++;
-        current = 'A';
-        continue;
-      }
-    }
-
-    // Copy style info...
-    if (current == 'A' && (*text == '{' || *text == '}')) *style++ = 'G';
-    else *style++ = current;
-    col ++;
-
-    last = isalnum(*text) || *text == '.';
-
-    if (*text == '\n') {
-      // Reset column and possibly reset the style
-      col = 0;
-      if (current == 'B' || current == 'E') current = 'A';
-    }
-  }
-}
-\endcode
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="common.html">
-    [Prev]
-    Common Widgets and Attributes
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="drawing.html">
-    Drawing Things in FLTK
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/editor.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/enumerations.dox
+++ /dev/null
@@ -1,345 +1,0 @@
-/**
-
- \page	enumerations	FLTK Enumerations
-
- \note	This file is not actively maintained any more, but is left
- 	here as a reference, until the doxygen documentation is
-	completed.
-
- \sa \ref FL/Enumerations.H.
-
-This appendix lists the enumerations provided in the
-<FL/Enumerations.H> header file, organized by section.
-Constants whose value are zero are marked with "(0)",
-this is often useful to know when programming.
-
-
-\section enumerations_versions Version Numbers
-
-The FLTK version number is stored in a number of compile-time constants:
-
-  - FL_MAJOR_VERSION - The major release number, currently  1
-  - FL_MINOR_VERSION - The minor release number, currently  3
-  - FL_PATCH_VERSION - The patch release number, currently  5
-  - FL_VERSION - \b [Deprecated] A combined floating-point version number for
-      the major, minor, and patch release numbers, currently 1.0305
-  - FL_API_VERSION - A combined integer version number for the major, minor,
-      and patch release numbers, currently 10305 (use this instead of
-      FL_VERSION, if possible)
-  - FL_ABI_VERSION - A combined integer version number for the application
-      binary interface (ABI) major, minor, and patch release numbers,
-      currently 10300 (default)
-
-  \note The ABI version (FL_ABI_VERSION) is usually constant throughout one
-	major/minor release version, for instance 10300 if FL_API_VERSION is 10305.
-	Hence the ABI is constant if only the patch version is changed.
-	You can change this with configure or CMake though if you want the
-	latest enhancements (called "ABI features", see CHANGES).
-
-\section enumerations_events Events
-
-Events are identified by an \ref Fl_Event enumeration value.  The
-following events are currently defined:
-
-  - FL_NO_EVENT - No event (or an event fltk does not
-    understand) occurred (0).
-  - FL_PUSH - A mouse button was pushed.
-  - FL_RELEASE - A mouse button was released.
-  - FL_ENTER - The mouse pointer entered a widget.
-  - FL_LEAVE - The mouse pointer left a widget.
-  - FL_DRAG - The mouse pointer was moved with a button pressed.
-  - FL_FOCUS - A widget should receive keyboard focus.
-  - FL_UNFOCUS - A widget loses keyboard focus.
-  - FL_KEYBOARD - A key was pressed.
-  - FL_CLOSE - A window was closed.
-  - FL_MOVE - The mouse pointer was moved with no buttons pressed.
-  - FL_SHORTCUT - The user pressed a shortcut key.
-  - FL_DEACTIVATE - The widget has been deactivated.
-  - FL_ACTIVATE - The widget has been activated.
-  - FL_HIDE - The widget has been hidden.
-  - FL_SHOW - The widget has been shown.
-  - FL_PASTE - The widget should paste the contents of the
-    clipboard.
-  - FL_SELECTIONCLEAR - The widget should clear any selections
-     made for the clipboard.
-  - FL_MOUSEWHEEL - The horizontal or vertical mousewheel was turned.
-  - FL_DND_ENTER - The mouse pointer entered a widget dragging data.
-  - FL_DND_DRAG - The mouse pointer was moved dragging data.
-  - FL_DND_LEAVE - The mouse pointer left a widget still dragging
-    data.
-  - FL_DND_RELEASE - Dragged data is about to be dropped.
-  - FL_SCREEN_CONFIGURATION_CHANGED - The screen configuration (number, positions) was changed.
-  - FL_FULLSCREEN - The fullscreen state of the window has changed.
-
-
-\section enumerations_when Callback "When" Conditions
-
-The following constants determine when a callback is performed:
-
-  - FL_WHEN_NEVER - Never call the callback (0).
-  - FL_WHEN_CHANGED - Do the callback only when the  widget
-    value changes.
-  - FL_WHEN_NOT_CHANGED - Do the callback whenever the  user
-    interacts with the widget.
-  - FL_WHEN_RELEASE - Do the callback when the button or  key
-    is released and the value changes.
-  - FL_WHEN_ENTER_KEY - Do the callback when the user presses
-    the ENTER key and the value changes.
-  - FL_WHEN_RELEASE_ALWAYS - Do the callback when the button
-    or key is released, even if the value doesn't change.
-  - FL_WHEN_ENTER_KEY_ALWAYS - Do the callback when the user
-    presses the ENTER key, even if the value doesn't change.
-
-
-\section enumeration_button_values Fl::event_button() Values
-
-The following constants define the button numbers for FL_PUSH and
-FL_RELEASE events:
-
-  - FL_LEFT_MOUSE - the left mouse button
-  - FL_MIDDLE_MOUSE - the middle mouse button
-  - FL_RIGHT_MOUSE - the right mouse button
-
-
-\section enumerations_event_key Fl::event_key() Values
-
-The following constants define the non-ASCII keys on the keyboard for
-FL_KEYBOARD and FL_SHORTCUT events:
-
-  - FL_Button - A mouse button; use <tt>Fl_Button +  n</tt>
-    for mouse button <tt>n</tt>.
-  - FL_BackSpace - The backspace key.
-  - FL_Tab - The tab key.
-  - FL_Enter - The enter key.
-  - FL_Pause - The pause key.
-  - FL_Scroll_Lock - The scroll lock key.
-  - FL_Escape - The escape key.
-  - FL_Home - The home key.
-  - FL_Left - The left arrow key.
-  - FL_Up - The up arrow key.
-  - FL_Right - The right arrow key.
-  - FL_Down - The down arrow key.
-  - FL_Page_Up - The page-up key.
-  - FL_Page_Down - The page-down key.
-  - FL_End - The end key.
-  - FL_Print - The print (or print-screen) key.
-  - FL_Insert - The insert key.
-  - FL_Menu - The menu key.
-  - FL_Num_Lock - The num lock key.
-  - FL_KP - One of the keypad numbers; use <tt>FL_KP +  n</tt>
-    for number <tt>n</tt>.
-  - FL_KP_Enter - The enter key on the keypad.
-  - FL_F - One of the function keys; use <tt>FL_F +  n</tt>
-    for function key <tt>n</tt>.
-  - FL_Shift_L - The lefthand shift key.
-  - FL_Shift_R - The righthand shift key.
-  - FL_Control_L - The lefthand control key.
-  - FL_Control_R - The righthand control key.
-  - FL_Caps_Lock - The caps lock key.
-  - FL_Meta_L - The left meta/Windows key.
-  - FL_Meta_R - The right meta/Windows key.
-  - FL_Alt_L - The left alt key.
-  - FL_Alt_R - The right alt key.
-  - FL_Delete - The delete key.
-
-
-\section enumerations_event_state Fl::event_state() Values
-
-The following constants define bits in the Fl::event_state()
-value:
-
-  - FL_SHIFT - One of the shift keys is down.
-  - FL_CAPS_LOCK - The caps lock is on.
-  - FL_CTRL - One of the ctrl keys is down.
-  - FL_ALT - One of the alt keys is down.
-  - FL_NUM_LOCK - The num lock is on.
-  - FL_META - One of the meta/Windows keys is down.
-  - FL_COMMAND - An alias for FL_CTRL on WIN32 and X11,
-    or FL_META on MacOS X.
-  - FL_SCROLL_LOCK - The scroll lock is on.
-  - FL_BUTTON1 - Mouse button 1 is pushed.
-  - FL_BUTTON2 - Mouse button 2 is pushed.
-  - FL_BUTTON3 - Mouse button 3 is pushed.
-  - FL_BUTTONS - Any mouse button is pushed.
-  - FL_BUTTON(n) - Mouse button \p n ( where <tt>n > 0</tt>) is pushed.
-
-\section enumerations_alignment Alignment Values
-
-The following constants define bits that can be used with
-Fl_Widget::align()
-to control the positioning of the label:
-
-  - FL_ALIGN_CENTER - The label is centered (0).
-  - FL_ALIGN_TOP - The label is top-aligned.
-  - FL_ALIGN_BOTTOM - The label is bottom-aligned.
-  - FL_ALIGN_LEFT - The label is left-aligned.
-  - FL_ALIGN_RIGHT - The label is right-aligned.
-  - FL_ALIGN_CLIP - The label is clipped to the widget.
-  - FL_ALIGN_WRAP - The label text is wrapped as needed.
-  - FL_ALIGN_TOP_LEFT - The label appears at the top of the widget, aligned to the left.
-  - FL_ALIGN_TOP_RIGHT - The label appears at the top of the widget, aligned to the right.
-  - FL_ALIGN_BOTTOM_LEFT - The label appears at the bottom of the widget, aligned to the left.
-  - FL_ALIGN_BOTTOM_RIGHT - The label appears at the bottom of the widget, aligned to the right.
-  - FL_ALIGN_LEFT_TOP - The label appears to the left of the widget, aligned at the top. Outside labels only.
-  - FL_ALIGN_RIGHT_TOP - The label appears to the right of the widget, aligned at the top. Outside labels only.
-  - FL_ALIGN_LEFT_BOTTOM - The label appears to the left of the widget, aligned at the bottom. Outside labels only.
-  - FL_ALIGN_RIGHT_BOTTOM - The label appears to the right of the widget, aligned at the bottom. Outside labels only.
-  - FL_ALIGN_INSIDE - 'or' this with other values to put label inside the widget.
-  - FL_ALIGN_TEXT_OVER_IMAGE - Label text will appear above the image.
-  - FL_ALIGN_IMAGE_OVER_TEXT - Label text will be below the image.
-  - FL_ALIGN_IMAGE_NEXT_TO_TEXT - The image will appear to the left of the text.
-  - FL_ALIGN_TEXT_NEXT_TO_IMAGE - The image will appear to the right of the text.
-  - FL_ALIGN_IMAGE_BACKDROP - The image will be used as a background for the widget.
-
-\section enumerations_fonts Fonts
-
-The following constants define the standard FLTK fonts:
-
-  - FL_HELVETICA - Helvetica (or Arial) normal (0).
-  - FL_HELVETICA_BOLD - Helvetica (or Arial) bold.
-  - FL_HELVETICA_ITALIC - Helvetica (or Arial) oblique.
-  - FL_HELVETICA_BOLD_ITALIC - Helvetica (or Arial) bold-oblique.
-  - FL_COURIER - Courier normal.
-  - FL_COURIER_BOLD - Courier bold.
-  - FL_COURIER_ITALIC - Courier italic.
-  - FL_COURIER_BOLD_ITALIC - Courier bold-italic.
-  - FL_TIMES - Times roman.
-  - FL_TIMES_BOLD - Times bold.
-  - FL_TIMES_ITALIC - Times italic.
-  - FL_TIMES_BOLD_ITALIC - Times bold-italic.
-  - FL_SYMBOL - Standard symbol font.
-  - FL_SCREEN - Default monospaced screen font.
-  - FL_SCREEN_BOLD - Default monospaced bold screen font.
-  - FL_ZAPF_DINGBATS - Zapf-dingbats font.
-
-
-\section enumerations_colors Colors
-
-The Fl_Color enumeration type holds a FLTK color value.
-Colors are either 8-bit indexes into a <a href="fltk-colormap.png">virtual colormap</a>
-or 24-bit RGB color values. Color indices occupy the lower 8 bits of the
-value, while RGB colors occupy the upper 24 bits, for a byte organization
-of RGBI.
-
-\subsection enumerations_color_constants Color Constants
-
-Constants are defined for the user-defined foreground and background
-colors, as well as specific colors and the start of the grayscale ramp
-and color cube in the <a href="fltk-colormap.png">virtual colormap</a>.
-Inline functions are provided to retrieve specific grayscale, color cube,
-or RGB color values.
-
-The following color constants can be used to access the user-defined
-colors:
-
-  - FL_BACKGROUND_COLOR - the default background color
-  - FL_BACKGROUND2_COLOR - the default
-    background color for text, list, and valuator widgets
-  - FL_FOREGROUND_COLOR - the default
-    foreground color (0) used for labels and text
-  - FL_INACTIVE_COLOR - the inactive foreground color
-  - FL_SELECTION_COLOR - the default selection/highlight color
-
-The following color constants can be used to access the colors from the
-FLTK standard color cube:
-
-  - FL_BLACK
-  - FL_BLUE
-  - FL_CYAN
-  - FL_DARK_BLUE
-  - FL_DARK_CYAN
-  - FL_DARK_GREEN
-  - FL_DARK_MAGENTA
-  - FL_DARK_RED
-  - FL_DARK_YELLOW
-  - FL_GREEN
-  - FL_MAGENTA
-  - FL_RED
-  - FL_WHITE
-  - FL_YELLOW
-
-The following are named values within the standard grayscale:
-
-  - FL_GRAY0
-  - FL_DARK3
-  - FL_DARK2
-  - FL_DARK1
-  - FL_LIGHT1
-  - FL_LIGHT2
-  - FL_LIGHT3
-
-The inline methods for getting a grayscale, color cube, or
-RGB color value are described in the
-\ref drawing_colors
-section of the
-\ref drawing
-chapter.
-
-
-\section enumerations_cursors Cursors
-
-The following constants define the mouse cursors that are available in
-FLTK.  The  double-headed arrows are bitmaps
-provided by FLTK on X, the others are provided by system-defined
-cursors.
-
-
-  - FL_CURSOR_DEFAULT - the default cursor, usually an arrow (0)
-  - FL_CURSOR_ARROW - an arrow pointer
-  - FL_CURSOR_CROSS - crosshair
-  - FL_CURSOR_WAIT - watch or hourglass
-  - FL_CURSOR_INSERT - I-beam
-  - FL_CURSOR_HAND - hand (uparrow on MSWindows)
-  - FL_CURSOR_HELP - question mark
-  - FL_CURSOR_MOVE - 4-pointed arrow
-  - FL_CURSOR_NS - up/down arrow
-  - FL_CURSOR_WE - left/right arrow
-  - FL_CURSOR_NWSE - diagonal arrow
-  - FL_CURSOR_NESW - diagonal arrow
-  - FL_CURSOR_NONE - invisible
-
-
-\section enumerations_file_when FD "When" Conditions
-
-  - FL_READ - Call the callback when there is data to be read.
-  - FL_WRITE - Call the callback when data can be written without blocking.
-  - FL_EXCEPT - Call the callback if an exception occurs on the file.
-
-
-\section enumerations_damage Damage Masks
-
-The following damage mask bits are used by the standard FLTK widgets:
-
-  - FL_DAMAGE_CHILD - A child needs to be redrawn.
-  - FL_DAMAGE_EXPOSE - The window was exposed.
-  - FL_DAMAGE_SCROLL - The Fl_Scroll widget was scrolled.
-  - FL_DAMAGE_OVERLAY - The overlay planes need to be redrawn.
-  - FL_DAMAGE_USER1 - First user-defined damage bit.
-  - FL_DAMAGE_USER2 - Second user-defined damage bit.
-  - FL_DAMAGE_ALL - Everything needs to be redrawn.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="unicode.html">
-    [Prev]
-    Unicode and UTF-8 Support
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="glut.html">
-    GLUT Compatibility
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/events.dox
+++ /dev/null
@@ -1,473 +1,0 @@
-/**
-
- \page	events Handling Events
- 
-This chapter discusses the FLTK event model and how to handle
-events in your program or widget.
-
-\section events_model The FLTK Event Model
-
-Every time a user moves the mouse pointer, clicks a button,
-or presses a key, an event is generated and sent to your
-application. Events can also come from other programs like the
-window manager.
-
-Events are identified by the integer argument passed to a
-\p handle() method that overrides the
-Fl_Widget::handle()
-virtual method.
-Other information about the most recent event is stored in
-static locations and acquired by calling the
-\ref events_event_xxx.
-This static information remains valid until the next event
-is read from the window system, so it is ok to look at it outside 
-of the
-\p handle()
-method.
-
-Event numbers can be converted to their actual names using the \ref fl_eventnames[] array
-defined in \#include &lt;FL/names.h&gt;; see next chapter for details.
-
-In the next chapter, the
-\ref subclassing_events "MyClass::handle()"
-example shows how to override the
-Fl_Widget::handle()
-method to accept and process specific events.
-
-\section events_mouse Mouse Events
-
-\subsection events_fl_push FL_PUSH
-
-A mouse button has gone down with the mouse pointing at this
-widget. You can find out what button by calling
-Fl::event_button().
-You find out the mouse position by calling
-Fl::event_x()
-and
-Fl::event_y().
-
-A widget indicates that it \e "wants" the mouse click
-by returning non-zero from its
-\p handle()
-method, as in the
-\ref subclassing_events "MyClass::handle()"
-example.
-It will then become the
-Fl::pushed()
-widget and will get \p FL_DRAG and
-the matching \p FL_RELEASE events.
-If
-\p handle()
-returns zero then FLTK will try sending the \p FL_PUSH to
-another widget. 
-
-\subsection events_fl_drag FL_DRAG
-
-The mouse has moved with a button held down. The current
-button state is in
-Fl::event_state().
-The mouse position is in
-Fl::event_x()
-and
-Fl::event_y().
-
-In order to receive \p FL_DRAG events, the widget must
-return non-zero when handling \p FL_PUSH.
-
-\subsection events_fl_release FL_RELEASE
-
-A mouse button has been released. You can find out what button by calling
-Fl::event_button().
-
-In order to receive the \p FL_RELEASE event, the widget must
-return non-zero when handling \p FL_PUSH.
-
-\subsection events_fl_move FL_MOVE
-
-The mouse has moved without any mouse buttons held down. 
-This event is sent to the
-Fl::belowmouse()
-widget.
-
-In order to receive \p FL_MOVE events, the widget must
-return non-zero when handling \p FL_ENTER.
-
-\subsection events_fl_mousewheel FL_MOUSEWHEEL
-
-The user has moved the mouse wheel. The
-Fl::event_dx()
-and
-Fl::event_dy()
-methods can be used to find the amount to scroll horizontally and
-vertically.
-
-\section events_focus Focus Events
-
-\subsection events_fl_enter FL_ENTER
-
-The mouse has been moved to point at this widget.  This can
-be used for highlighting feedback.  If a widget wants to
-highlight or otherwise track the mouse, it indicates this by
-returning non-zero from its
-\p handle()
-method. It then becomes the
-Fl::belowmouse()
-widget and will receive \p FL_MOVE and \p FL_LEAVE
-events.
-
-\subsection events_fl_leave FL_LEAVE
-
-The mouse has moved out of the widget.
-
-In order to receive the \p FL_LEAVE event, the widget must
-return non-zero when handling \p FL_ENTER.
-
-\subsection events_fl_focus FL_FOCUS
-
-This indicates an \e attempt to give a widget the keyboard focus.
-
-If a widget wants the focus, it should change itself to
-display the fact that it has the focus, and return non-zero from its
-\p handle() method. It then becomes the Fl::focus() widget and gets
-\p FL_KEYDOWN, \p FL_KEYUP, and \p FL_UNFOCUS events.
-
-The focus will change either because the window manager changed which
-window gets the focus, or because the user tried to navigate using tab,
-arrows, or other keys. You can check Fl::event_key() to figure out why
-it moved. For navigation it will be the key pressed and for interaction
-with the window manager it will be zero.
-
-\subsection events_fl_unfocus FL_UNFOCUS
-
-This event is sent to the previous Fl::focus() widget when another
-widget gets the focus or the window loses focus.
-
-\section events_keyboard Keyboard Events
-
-\subsection events_fl_keydown FL_KEYBOARD, FL_KEYDOWN, FL_KEYUP
-
-A key was pressed (FL_KEYDOWN) or released (FL_KEYUP). FL_KEYBOARD
-is a synonym for FL_KEYDOWN, and both names are used interchangeably
-in this documentation.
-
-The key can be found in Fl::event_key().
-The text that the key should insert can be found with Fl::event_text()
-and its length is in Fl::event_length().
-
-If you use the key, then \p handle() should return 1. If you
-return zero then FLTK assumes you ignored the key and will
-then attempt to send it to a parent widget. If none of them want
-it, it will change the event into a \p FL_SHORTCUT event.
-FL_KEYBOARD events are also generated by the character palette/map.
-
-To receive \p FL_KEYBOARD events you must also respond to the
-\p FL_FOCUS and \p FL_UNFOCUS events by returning 1. This way
-FLTK knows whether to bother sending your widget keyboard events.
-(Some widgets don't need them, e.g. Fl_Box.)
-
-If you are writing a text-editing widget you may also want to call the
-Fl::compose()
-function to translate individual keystrokes into characters.
-
-\p FL_KEYUP events are sent to the widget that 
-currently has focus. This is not necessarily the same widget
-that received the corresponding \p FL_KEYDOWN event
-because focus may have changed between events.
-
-\todo Add details on how to detect repeating keys, since on some X servers a repeating key will generate both FL_KEYUP and FL_KEYDOWN, such that to tell if a key is held, you need Fl::event_key(int) to detect if the key is being held down during FL_KEYUP or not.
-
-\subsection events_fl_shortcut FL_SHORTCUT
-
-If the Fl::focus() widget is zero or ignores an \p FL_KEYBOARD event
-then FLTK tries sending this event to every widget it can, until one
-of them returns non-zero. \p FL_SHORTCUT is first sent to
-the Fl::belowmouse() widget, then its parents and
-siblings, and eventually to every widget in the window, trying
-to find an object that returns non-zero. FLTK tries really hard
-to not to ignore any keystrokes!
-
-You can also make "global" shortcuts by using Fl::add_handler().
-A global shortcut will work no matter what windows are displayed
-or which one has the focus.
-
-\section events_widget Widget Events
-
-\subsection events_fl_deactivate FL_DEACTIVATE
-
-This widget is no longer active, due to
-\ref Fl_Widget::deactivate() "deactivate()"
-being called on it or one of its parents.
-Please note that although
-\ref Fl_Widget::active() "active()"
-may still return true for this widget after receiving this event,
-it is only truly active if
-\ref Fl_Widget::active() "active()"
-is true for both it and all of its parents.
-(You can use
-\ref Fl_Widget::active_r() "active_r()"
-to check this).
-
-\subsection events_fl_activate FL_ACTIVATE
-
-This widget is now active, due to
-\ref Fl_Widget::activate() "activate()"
-being called on it or one of its parents.
-
-\subsection events_fl_hide FL_HIDE
-
-This widget is no longer visible, due to
-\ref Fl_Widget::hide() "hide()"
-being called on it or one of its parents, or due to a parent window
-being minimized.
-Please note that although
-\ref Fl_Widget::visible() "visible()"
-may still return true for this widget after receiving this event,
-it is only truly visible if
-\ref Fl_Widget::visible() "visible()"
-is true for both it and all of its parents.
-(You can use
-\ref Fl_Widget::visible_r() "visible_r()"
-to check this).
-
-\subsection events_fl_show FL_SHOW
-
-This widget is visible again, due to
-\ref Fl_Widget::show() "show()"
-being called on it or one of its parents, or due to a parent window
-being restored. <I>A child Fl_Window will respond to this by
-actually creating the window if not done already, so if you
-subclass a window, be sure to pass \p FL_SHOW to the base
-class
-\p handle()
-method!</I>
-
-\note	The events in this chapter ("Widget Events"), i.e.
-	FL_ACTIVATE, FL_DEACTIVATE, FL_SHOW, and FL_HIDE,
-	are the only events deactivated and invisible widgets
-	can usually get, depending on their states. Under certain
-	circumstances, there may also be FL_LEAVE or FL_UNFOCUS
-	events delivered to deactivated or hidden widgets.
-
-\section events_clipboard Clipboard Events
-
-\subsection events_fl_paste FL_PASTE
-
-You should get this event some time after you call Fl::paste().
-The contents of Fl::event_text() is the text to insert and the
-number of characters is in Fl::event_length().
-
-\subsection events_fl_selectionclear FL_SELECTIONCLEAR
-
-The Fl::selection_owner()
-will get this event before the selection is moved to another
-widget. This indicates that some other widget or program has
-claimed the selection. Motif programs used this to clear the
-selection indication. Most modern programs ignore this.
-
-\section events_dnd Drag and Drop Events
-
-FLTK supports drag and drop of text and files from any 
-application on the desktop to an FLTK widget. Text is transferred
-using UTF-8 encoding. Files are received as a list of full path
-and file names, separated by newline. 
-
-On some X11 platforms, files are received as a URL-encoded UTF-8 string,
-that is, non-ASCII bytes (and a few others such as space and %) are 
-replaced by the 3 bytes "%XY" where XY are the byte's hexadecimal value.
-The \ref fl_decode_uri() function can be used to transform in-place
-the received string into a proper UTF-8 string. On these platforms,
-strings corresponding to dropped files are further prepended 
-by <tt>file://</tt> (or other prefixes such as <tt>computer://</tt>).
-
-See Fl::dnd() for drag and drop from an FLTK widget.
-
-The drag and drop data is available in Fl::event_text()
-at the concluding \p FL_PASTE. On some platforms, the
-event text is also available for the \p FL_DND_* events,
-however application must not depend on that behavior because it
-depends on the protocol used on each platform.
-
-\p FL_DND_* events cannot be used in widgets derived
-from Fl_Group or Fl_Window.
-
-\subsection events_fl_dnd_enter FL_DND_ENTER
-
-The mouse has been moved to point at this widget. A widget that is
-interested in receiving drag'n'drop data must return 1 to receive
-\p FL_DND_DRAG, \p FL_DND_LEAVE and \p FL_DND_RELEASE events.
-
-\subsection events_fl_dnd_drag FL_DND_DRAG
-
-The mouse has been moved inside a widget while dragging data.
-A widget that is interested in receiving drag'n'drop data should
-indicate the possible drop position.
-
-\subsection events_fl_dnd_leave FL_DND_LEAVE
-
-The mouse has moved out of the widget.
-
-\subsection events_fl_dnd_release FL_DND_RELEASE
-
-The user has released the mouse button dropping data into 
-the widget. If the widget returns 1, it will receive the data in
-the immediately following \p FL_PASTE event.
-
-\section events_fl_misc Other events
-
-\subsection events_fl_screen_config FL_SCREEN_CONFIGURATION_CHANGED
-Sent whenever the screen configuration changes (a screen is added/removed,
-a screen resolution is changed, screens are moved).
-Use Fl::add_handler() to be notified of this event.
-
-\subsection events_fl_fullscreen FL_FULLSCREEN
-
-The application window has been changed from normal to fullscreen, or
-from fullscreen to normal. If you are using a X window manager which
-supports Extended Window Manager Hints, this event will not be
-delivered until the change has actually happened. 
-
-
-\section events_event_xxx Fl::event_*() methods
-
-FLTK keeps the information about the most recent event in
-static storage. This information is good until the next event is
-processed. Thus it is valid inside
-\p handle()
-and
-\p callback()
-methods.
-
-These are all trivial inline functions and thus very fast and small: 
-
-\li Fl::event_button()
-\li Fl::event_clicks()
-\li Fl::event_dx()
-\li Fl::event_dy()
-\li Fl::event_inside()
-\li Fl::event_is_click()
-\li Fl::event_key()
-\li Fl::event_length()
-\li Fl::event_state()
-\li Fl::event_text()
-\li Fl::event_x()
-\li Fl::event_x_root()
-\li Fl::event_y()
-\li Fl::event_y_root()
-\li Fl::get_key()
-\li Fl::get_mouse()
-\li Fl::test_shortcut()
-
-\section events_propagation Event Propagation
-
-Widgets receive events via the virtual handle() function. The argument indicates
-the type of event that can be handled. The widget must indicate if it handled the
-event by returning 1. FLTK will then remove the event and wait for further events 
-from the host. If the widget's handle function returns 0, FLTK may redistribute
-the event based on a few rules.
-
-Most events are sent directly to the \p handle() method
-of the Fl_Window that the window system says they
-belong to.  The window (actually the Fl_Group that
-Fl_Window is a subclass of) is responsible for sending
-the events on to any child widgets.  To make the
-Fl_Group code somewhat easier, FLTK sends some events
-(\p FL_DRAG, \p FL_RELEASE, \p FL_KEYBOARD,
-\p FL_SHORTCUT, \p FL_UNFOCUS, and \p FL_LEAVE)
-directly to leaf widgets. These procedures
-control those leaf widgets:
-
-\li Fl::add_handler()
-\li Fl::belowmouse()
-\li Fl::focus()
-\li Fl::grab()
-\li Fl::modal()
-\li Fl::pushed()
-\li Fl::release() (deprecated, see Fl::grab(0))
-\li Fl_Widget::take_focus()
-
-FLTK propagates events along the widget hierarchy depending on the kind of event
-and the status of the UI. Some events are injected directly into the widgets,
-others may be resent as new events to a different group of receivers.
-
-Mouse click events are first sent to the window that caused them. The window
-then forwards the event down the hierarchy until it reaches the widget that
-is below the click position. If that widget uses the given event, the widget
-is marked "pushed" and will receive all following mouse motion (FL_DRAG) events
-until the mouse button is released.
-
-Mouse motion (FL_MOVE) events are sent to the Fl::belowmouse() widget, i.e.
-the widget that returned 1 on the last FL_ENTER event.
-
-Mouse wheel events are sent to the window that caused the event. The window
-propagates the event down the tree, first to the widget that is below the 
-mouse pointer, and if that does not succeed, to all other widgets in the group.
-This ensures that scroll widgets work as expected with the widget furthest
-down in the hierarchy getting the first opportunity to use the wheel event,
-but also giving scroll bars, that are not directly below the mouse a chance.
-
-Keyboard events are sent directly to the widget that has keyboard focus.
-If the focused widget rejects the event, it is resent as a shortcut event,
-first to the top-most window, then to the widget below the mouse pointer, 
-propagating up the hierarchy to all its parents. Those send the event also
-to all widgets that are not below the mouse pointer. Now if that did not work 
-out, the shortcut is sent to all registered shortcut handlers.
-
-If we are still unsuccessful, the event handler flips the case of the shortcut
-letter and starts over. Finally, if the key is "escape", FLTK sends a close 
-event to the top-most window.
-
-All other events are pretty much sent right away to the window that created 
-the event.
-
-Widgets can "grab" events. The grabbing window gets all events exclusively, but
-usually by the same rules as described above.
-
-Windows can also request exclusivity in event handling by making the 
-window modal.
-
-
-\section events_compose_characters FLTK Compose-Character Sequences
-
-The character composition done by Fl_Input widget
-requires that you call the Fl::compose() function if you are
-writing your own text editor widget.
-
-Currently, all characters made by single key strokes
-with or without modifier keys, or by system-defined character 
-compose sequences (that can involve dead keys or a compose key) can be input.
-You should call Fl::compose() in case any
-enhancements to this processing are done in the future. The
-interface has been designed to handle arbitrary UTF-8 encoded
-text.
-
-The following methods are provided for character composition:
-
-\li Fl::compose()
-\li Fl::compose_reset()
-
-Under Mac OS X, FLTK "previews" partially composed sequences.
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="drawing.html">
-    [Prev]
-    Drawing Things in FLTK
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="subclassing.html">
-    Adding and Extending Widgets
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/examples.dox
+++ /dev/null
@@ -1,628 +1,0 @@
-/**
-
- \page	examples	Example Source Code
-
-The FLTK distribution contains over 60 sample applications written
-in, or ported to, FLTK. If the FLTK archive you received does not
-contain either an 'examples' or 'test' directory, you can download
-the complete FLTK distribution from \b http://fltk.org/software.php .
-
-Most of the example programs were created while testing a group of widgets. 
-They are not meant to be great achievements in clean C++ programming, but
-merely a test platform to verify the functionality of the FLTK library.
-
-Note that extra example programs are also available in an additional
-'examples' directory, but these are \b NOT built automatically when
-you build FLTK, unlike those in the 'test' directory shown below.
-
-\section example_applications  Example Applications
-
-<table width=100% border=0>
-<tr>
-<td> \ref examples_adjuster        </td>
-<td> \ref examples_arc             </td>
-<td> \ref examples_ask             </td>
-<td> \ref examples_bitmap          </td>
-<td> \ref examples_blocks          </td>
-<td> \ref examples_boxtype         </td>
-</tr>
-<tr>
-<td> \ref examples_browser         </td>
-<td> \ref examples_button          </td>
-<td> \ref examples_buttons         </td>
-<td> \ref examples_checkers        </td>
-<td> \ref examples_clock           </td>
-<td> \ref examples_colbrowser      </td>
-</tr>
-<tr>
-<td> \ref examples_color_chooser   </td>
-<td> \ref examples_cube            </td>
-<td> \ref examples_CubeView        </td>
-<td> \ref examples_cursor          </td>
-<td> \ref examples_curve           </td>
-<td> \ref examples_demo            </td>
-</tr>
-<tr>
-<td> \ref examples_device       </td>
-<td> \ref examples_doublebuffer    </td>
-<td> \ref examples_editor          </td>
-<td> \ref examples_fast_slow       </td>
-<td> \ref examples_file_chooser    </td>
-<td> \ref examples_fluid           </td>
-</tr>
-<tr>
-<td> \ref examples_fonts           </td>
-<td> \ref examples_forms           </td>
-<td> \ref examples_fractals        </td>
-<td> \ref examples_fullscreen      </td>
-<td> \ref examples_gl_overlay      </td>
-<td> \ref examples_glpuzzle        </td>
-</tr>
-<tr>
-<td> \ref examples_hello           </td>
-<td> \ref examples_help            </td>
-<td> \ref examples_iconize         </td>
-<td> \ref examples_image           </td>
-<td> \ref examples_inactive        </td>
-<td> \ref examples_input           </td>
-</tr>
-<tr>
-<td> \ref examples_input_choice    </td>
-<td> \ref examples_keyboard        </td>
-<td> \ref examples_label           </td>
-<td> \ref examples_line_style      </td>
-<td> \ref examples_list_visuals    </td>
-<td> \ref examples_mandelbrot      </td>
-</tr>
-<tr>
-<td> \ref examples_menubar         </td>
-<td> \ref examples_message         </td>
-<td> \ref examples_minimum         </td>
-<td> \ref examples_navigation      </td>
-<td> \ref examples_output          </td>
-<td> \ref examples_overlay         </td>
-</tr>
-<tr>
-<td> \ref examples_pack            </td>
-<td> \ref examples_pixmap_browser  </td>
-<td> \ref examples_pixmap          </td>
-<td> \ref examples_preferences     </td>
-<td> \ref examples_radio           </td>
-<td> \ref examples_resizebox       </td>
-</tr>
-<tr>
-<td> \ref examples_resize          </td>
-<td> \ref examples_scroll          </td>
-<td> \ref examples_shape           </td>
-<td> \ref examples_subwindow       </td>
-<td> \ref examples_sudoku          </td>
-<td> \ref examples_symbols         </td>
-</tr>
-<tr>
-<td> \ref examples_tabs            </td>
-<td> \ref examples_threads         </td>
-<td> \ref examples_tile            </td>
-<td> \ref examples_tiled_image     </td>
-<td> \ref examples_unittests       </td>
-<td> \ref examples_utf8            </td>
-</tr>
-<tr>
-<td> \ref examples_valuators       </td>
-</tr>
-</table>
-
-\subsection examples_adjuster adjuster
-
-\par
-\c adjuster shows a nifty little widget for quickly
-setting values in a great range.
-
-\subsection examples_arc arc
-
-\par
-The \c arc demo explains how to derive your own widget to
-generate some custom drawings. The sample drawings use the matrix
-based arc drawing for some fun effects.
-
-\subsection examples_ask ask
-
-\par
-\c ask shows some of FLTK's standard dialog boxes. Click
-the correct answers or you may end up in a loop, or you may end 
-up in a loop, or you... .
-
-\subsection examples_bitmap bitmap
-
-\par
-This simple test shows the use of a single color bitmap as a
-label for a box widget. Bitmaps are stored in the X11 '.bmp' 
-file format and can be part of the source code.
-
-\subsection examples_blocks blocks
-
-\par
-A wonderful and addictive game that shows the usage of FLTK
-timers, graphics, and how to implement sound on all platforms.
-\c blocks is also a good example for the Mac OS X specific
-bundle format.
- 
-\subsection examples_boxtype boxtype
-
-\par
-\c boxtype gives an overview of readily available boxes and
-frames in FLTK. More types can be added by the application programmer. 
-When using themes, FLTK shuffles boxtypes around to give your program
-a new look.
-
-\subsection examples_browser browser
-
-\par
-\c browser shows the capabilities of the Fl_Browser widget. 
-Important features tested are loading of files, line formatting, and
-correct positioning of the browser data window.
-
-\subsection examples_button button
-
-\par
-The \c button test is a simple demo of push-buttons and callbacks.
-
-\subsection examples_buttons buttons
-
-\par
-\c buttons shows a sample of FLTK button types.
-
-\subsection examples_checkers checkers
-
-\par
-Written by Steve Poulsen in early 1979, \c checkers shows
-how to convert a VT100 text-terminal based program into a neat
-application with a graphical UI. Check out the code that drags the
-pieces, and how the pieces are drawn by layering. Then tell me 
-how to beat the computer at Checkers.
-
-\subsection examples_clock clock
-
-\par
-The \c clock demo shows two analog clocks. The innards of
-the Fl_Clock widget are pretty interesting, explaining
-the use of timeouts and matrix based drawing.
-
-\subsection examples_colbrowser colbrowser
-
-\par
-\c colbrowser runs only on X11 systems. It reads 
-<i>/usr/lib/X11/rgb.txt</i> to show the color representation
-of every text entry in the file. This is beautiful, but
-only moderately useful unless your UI is written in <i>Motif</i>.
-
-\subsection examples_color_chooser color_chooser
-
-\par
-The \c color_chooser gives a short demo of FLTK's palette based
-color chooser and of the RGB based color wheel.
-
-\subsection examples_cube cube
-
-\par
-The \c cube demo shows the speed of OpenGL. It also tests
-the ability to render two OpenGL buffers into a single window, 
-and shows OpenGL text.
-
-\subsection examples_CubeView CubeView
-
-\par
-\c CubeView shows how to create a UI containing OpenGL with Fluid.
-
-\subsection examples_cursor cursor
-
-\par
-The \c cursor demo shows all mouse cursor shapes that come standard
-with FLTK. The <i>fgcolor</i> and <i>bgcolor</i> sliders work only
-on few systems (some version of Irix for example).
-
-\subsection examples_curve curve
-
-\par
-\c curve draws a nice Bezier curve into a custom widget. The 
-<i>points</i> option for splines is not supported on all platforms.
-
-\subsection examples_demo demo
-
-\par
-This tool allows quick access to all programs in the \c test directory. 
-\c demo is based on the visuals of the IrixGL demo program. The menu 
-tree can be changed by editing <tt>test/demo.menu</tt>.
-
-\subsection examples_device device
-
-\par
-Exercises the Fl_Image_Surface, Fl_Copy_Surface, and Fl_Printer classes to draw to an
-Fl_Image object, copy graphical data to the clipboard, and for print support.
-\note The clipboard.cxx program of the 'examples' directory is a clipboard watching 
-application that continuously displays the textual or graphical content of the system
-clipboard (a.k.a pasteboard on Mac OS X) exercising Fl::paste().
-
-\subsection examples_doublebuffer doublebuffer
-
-\par
-The \c doublebuffer demo shows the difference between a single
-buffered window, which may flicker during a slow redraw, and a 
-double buffered window, which never flickers, but uses twice the
-amount of RAM. Some modern OS's double buffer all windows automatically
-to allow transparency and shadows on the desktop. FLTK is smart enough
-to not tripple buffer a window in that case.
-
-\subsection examples_editor editor
-
-\par
-FLTK has two very different text input widgets. Fl_Input 
-and derived classes are rather light weight, however 
-Fl_Text_Editor is a complete port of <i>nedit</i> (with permission). 
-The \c editor test is almost a full application, showing custom
-syntax highlighting and dialog creation. 
-
-\subsection examples_fast_slow fast_slow
-
-\par
-\c fast_slow shows how an application can use the Fl_Widget::when()
-setting to receive different kinds of callbacks.
-
-\subsection examples_file_chooser file_chooser
-
-\par
-The standard FLTK \c file_chooser is the result of many
-iterations, trying to find a middle ground between a complex 
-browser and a fast light implementation.
-
-\subsection examples_fonts fonts
-
-\par
-\c fonts shows all available text fonts on the host system.
-If your machine still has some pixmap based fonts, the supported
-sizes will be shown in bold face. Only the first 256 fonts will 
-be listed.
-
-\subsection examples_forms forms
-
-\par
-\c forms is an XForms program with very few changes.
-Search for "fltk" to find all changes necessary to port to fltk.
-This demo shows the different boxtypes. Note that some
-boxtypes are not appropriate for some objects.
-
-\subsection examples_fractals fractals
-
-\par
-\c fractals shows how to mix OpenGL, Glut and FLTK code.
-FLTK supports a rather large subset of Glut, so that many Glut
-applications compile just fine.
-
-\subsection examples_fullscreen fullscreen
-
-\par
-This demo shows how to do many of the window manipulations that
-are popular for games.
-You can toggle the border on/off, switch between single- 
-and double-buffered rendering, and take over the entire
-screen. More information in the source code.
-
-\subsection examples_gl_overlay gl_overlay
-
-\par
-\c gl_overlay shows OpenGL overlay plane rendering. If no
-hardware overlay plane is available, FLTK will simulate it
-for you.
-
-\subsection examples_glpuzzle glpuzzle
-
-\par
-The \c glpuzzle test shows how most Glut source code compiles
-easily under FLTK.
-
-\subsection examples_hello hello
-
-\par
-\c hello: Hello, World. Need I say more? Well, maybe. This 
-tiny demo shows how little is needed to get a functioning application
-running with FLTK. Quite impressive, I'd say.
-
-\subsection examples_help help
-
-\par
-\c help displays the built-in FLTK help browser. The 
-Fl_Help_Dialog understands a subset of html and renders
-various image formats. This widget makes it easy to provide help
-pages to the user without depending on the operating system's 
-html browser.
-
-\subsection examples_iconize iconize
-
-\par
-\c iconize demonstrates the effect of the window functions
-hide(), iconize(), and show().
-
-\subsection examples_image image
-
-\par
-The \c image demo shows how an image can be created on the fly.
-This generated image contains an alpha (transparency) channel which
-lets previous renderings 'shine through', either via true 
-transparency or by using screen door transparency (pixelation).
-
-\subsection examples_inactive inactive
-
-\par
-\c inactive tests the correct rendering of inactive widgets.
-To see the inactive version of images, you can check out the pixmap 
-or image test.
-
-\subsection examples_input input
-
-\par
-This tool shows and tests different types of text input fields based on
-Fl_Input_. The \c input program also tests various 
-settings of Fl_Input::when().
-
-\subsection examples_input_choice input_choice
-
-\par
-\c input_choice tests the latest addition to FLTK1, a text input 
-field with an attached pulldown menu. Windows users will recognize 
-similarities to the 'ComboBox'. \c input_choice starts up in 
-'plastic' scheme, but the traditional scheme is also supported.
-
-\subsection examples_keyboard keyboard
-
-\par
-FLTK unifies keyboard events for all platforms. The \c keyboard
-test can be used to check the return values of Fl::event_key()
-and Fl::event_text(). It is also great to see the modifier 
-buttons and the scroll wheel at work. Quit this application by closing
-the window. The ESC key will not work. 
-
-\subsection examples_label label
-
-\par
-Every FLTK widget can have a label attached to it. The \c label 
-demo shows alignment, clipping, and wrapping of text labels. Labels
-can contain symbols at the start and end of the text, like <i>\@FLTK</i>
-or <i>\@circle uh-huh \@square</i>.
-
-\subsection examples_line_style line_style
-
-\par
-Advanced line drawing can be tested with \c line_style. 
-Not all platforms support all line styles.
-
-\subsection examples_list_visuals list_visuals
-
-\par
-This little app finds all available pixel formats for the current X11
-screen. But since you are now an FLTK user, you don't have to worry 
-about any of this.
-
-\subsection examples_mandelbrot mandelbrot
-
-\par
-\c mandelbrot shows two advanced topics in one test. It creates
-grayscale images on the fly, updating them via the <i>idle</i> callback
-system. This is one of the few occasions where the <i>idle</i> callback
-is very useful by giving all available processor time to the application
-without blocking the UI or other apps.
-
-\subsection examples_menubar menubar
-
-\par
-The \c menubar tests many aspects of FLTK's popup menu system.
-Among the features are radio buttons, menus taller than the screen,
-arbitrary sub menu depth, and global shortcuts.
-
-\subsection examples_message message
-
-\par
-\c message pops up a few of FLTK's standard message boxes.
-
-\subsection examples_minimum minimum
-
-\par
-The \c minimum test program verifies that the update regions
-are set correctly. In a real life application, the trail would
-be avoided by choosing a smaller label or by setting label clipping
-differently. 
-
-\subsection examples_navigation navigation
-
-\par
-\c navigation demonstrates how the text cursor moves from
-text field to text field when using the arrow keys, tab, and shift-tab.
-
-\subsection examples_output output
-
-\par
-\c output shows the difference between the single line and
-multi line mode of the Fl_Output widget. Fonts can be
-selected from the FLTK standard list of fonts.
-
-\subsection examples_overlay overlay
-
-\par
-The \c overlay test app shows how easy an FLTK window can
-be layered to display cursor and manipulator style elements. This
-example derives a new class from Fl_Overlay_Window and 
-provides a new function to draw custom overlays.
-
-\subsection examples_pack pack
-
-\par
-The \c pack test program demonstrates the resizing
-and repositioning of children of the Fl_Pack group.
-Putting an Fl_Pack into an Fl_Scroll is 
-a useful way to create a browser for large sets of data.
-
-\subsection examples_pixmap_browser pixmap_browser
-
-\par
-\c pixmap_browser tests the shared-image interface. When using
-the same image multiple times, Fl_Shared_Image will keep it
-only once in memory.
-
-\subsection examples_pixmap pixmap
-
-\par
-This simple test shows the use of a LUT based pixmap as a
-label for a box widget. Pixmaps are stored in the X11 '.xpm' 
-file format and can be part of the source code. Pixmaps support
-one transparent color.
-
-\subsection examples_preferences preferences
-
-\par
-I do have my \c preferences in the morning, but sometimes I
-just can't remember a thing. This is where the Fl_Preferences
-come in handy. They remember any kind of data between program launches.
-
-\subsection examples_radio radio
-
-\par
-The \c radio tool was created entirely with <i>fluid</i>. It
-shows some of the available button types and tests radio 
-button behavior.
-
-\subsection examples_resizebox resizebox
-
-\par
-\c resizebox shows some possible ways of FLTK's automatic
-resize behavior.
-
-\subsection examples_resize resize
-
-\par
-The \c resize demo tests size and position functions with
-the given window manager.
-
-\subsection examples_scroll scroll
-
-\par
-\c scroll shows how to scroll an area of widgets, one of
-them being a slow custom drawing. Fl_Scroll uses 
-clipping and smart window area copying to improve redraw speed.
-The buttons at the bottom of the window control decoration rendering
-and updates.
-
-\subsection examples_shape shape
-
-\par
-\c shape is a very minimal demo that shows how to create
-your own OpenGL rendering widget. Now that you know that, go ahead 
-and write that flight simulator you always dreamt of.
-
-\subsection examples_subwindow subwindow
-
-\par
-The \c subwindow demo tests messaging and drawing between 
-the main window and 'true' sub windows. A sub window is different
-to a group by resetting the FLTK coordinate system to 0, 0 in the
-top left corner. On Win32 and X11, subwindows have their own 
-operating system specific handle.
-
-\subsection examples_sudoku sudoku
-
-\par
-Another highly addictive game - don't play it, I warned you.
-The implementation shows how to create application icons,
-how to deal with OS specifics, and how to generate sound.
-
-\subsection examples_symbols symbols
-
-\par
-\c symbols are a speciality of FLTK. These little vector 
-drawings can be integrated into labels. They scale and rotate,
-and with a little patience, you can define your own. The rotation 
-number refers to 45 degree rotations if you were looking at a 
-numeric keypad (2 is down, 6 is right, etc.).
-
-\subsection examples_tabs tabs
-
-\par
-The \c tabs tool was created with <i>fluid</i>. It tests
-correct hiding and redisplaying of tabs, navigation across tabs, 
-resize behavior, and no unneeded redrawing of invisible widgets.
-
-\par
-The \c tabs application shows the Fl_Tabs widget
-on the left and the Fl_Wizard widget on the right side 
-for direct comparison of these two panel management widgets.
-
-\subsection examples_threads threads
-
-\par
-FLTK can be used in a multithreading environment. There are some
-limitations, mostly due to the underlying operating system. 
-\c threads shows how to use Fl::lock(), 
-Fl::unlock(), and Fl::awake() in secondary threads 
-to keep FLTK happy. Although locking works on all platforms, 
-this demo is not available on every machine.
-
-\subsection examples_tile tile
-
-\par
-The \c tile tool shows a nice way of using Fl_Tile.
-To test correct resizing of subwindows, the widget for region 
-1 is created from an Fl_Window class.
-
-\subsection examples_tiled_image tiled_image
-
-\par
-The \c tiled_image demo uses an image as the background
-for a window by repeating it over the full size of the widget.
-The window is resizable and shows how the image gets repeated.
-
-\subsection examples_unittests unittests
-
-\par
-\c unittests exercises all of FLTK's drawing features (e.g., text, lines, circles, images),
-as well as scrollbars and schemes.
-
-\subsection examples_utf8 utf8
-
-\par
-\c utf8 shows all fonts available to the platform that runs it, and how each font
-draws each of the Unicode code points ranging between U+0020 and U+FFFF.
-
-\subsection examples_valuators valuators
-
-\par
-\c valuators shows all of FLTK's nifty widgets to change
-numeric values.
-
-\subsection examples_fluid fluid
-
-\par
-\c fluid is not only a big test program, but also a very 
-useful visual UI designer. Many parts of \c fluid were 
-created using \c fluid. See the \link fluid Fluid Tutorial \endlink
-for more details.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="license.html">
-    [Prev]
-    Software License
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    &nbsp;
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/faq.dox
+++ /dev/null
@@ -1,146 +1,0 @@
-/**
-
- \page	FAQ	FAQ (Frequently Asked Questions)
-
-A list of frequently asked questions about FLTK.
-
-This appendix describes various frequently asked questions regarding FLTK.
-\li \ref faq_start
-\li \ref faq_box_with_text
-\li \ref faq_license
-\li \ref faq_escape
-
-\section faq_start Where do I start learning FLTK?
-
-It is assumed you know C++, which is the language all FLTK programs
-are written in, including FLTK itself.
-
-If you like reading manuals to work your way into things, a good start
-is the FLTK documentation's \ref intro. Under the \ref basics section
-there's an example 'hello world' program that includes a line-by-line
-description.
-
-If you like looking at simple code first to pique your interest, and then
-read up from there, start with the example programs in the test/ and examples/
-directory that is included with the source code. A good place to start is
-the 'hello world' program in test/hello.cxx. Also do a google search for
-"FLTK example programs". "Erco's Cheat Page" is one that shows many simple
-examples of how to do specific things.
-
-If you like to run example programs and look for ones that are like yours
-and then read them, download and build FLTK from the source, then run the
-test/demo program. Also, go into the 'examples/' directory and run 'make',
-then run some of those programs.
-
-If you prefer watching TV to reading books and code, google search for 
-"FLTK video tutorials" which has some introductory examples of how to
-write FLTK programs in C++ and build them.
-
-\section faq_box_with_text How do I make a box with text?
-
-The 'hello world' program shows how to make a box with text.
-All widgets have labels, so picking a simple widget like Fl_Box
-and setting its label() and using align() to align the label
-and labelfont() to set the font, and labelsize() to set the size,
-you can get text just how you want.
-
-Labels are not selectable though; if you want selectable text,
-you can use Fl_Output or Fl_Multiline_Output for simple text
-that doesn't include scrollbars. For more complex text that
-might want scrollbars and multiple colors/fonts, use either
-Fl_Text_Display which handles plain text, or Fl_Help_View
-which handles simple HTML formatted text.
-
-\section faq_license Can I use FLTK to make closed-source commercial applications?
-
-Yes. The FLTK \ref license is standard LGPL, but also includes a special
-clause ("exception") to allow for static linking. Specifically:
-
-\verbatim
-
-    [from the top of the FLTK LGPL License section on exceptions]
-
-    3. Static linking of applications and widgets to the FLTK library does
-    not constitute a derivative work and does not require the author to
-    provide source code for the application or widget, use the shared FLTK
-    libraries, or link their applications or widgets against a user-supplied
-    version of FLTK.
-
-    If you link the application or widget to a modified version of FLTK,
-    then the changes to FLTK must be provided under the terms of the LGPL
-    in sections 1, 2, and 4.
-
-    4. You do not have to provide a copy of the FLTK license with programs
-    that are linked to the FLTK library, nor do you have to identify the
-    FLTK license in your program or documentation as required by section 6
-    of the LGPL.
-
-    However, programs must still identify their use of FLTK.  The following
-    example statement can be included in user documentation to satisfy
-    this requirement:
-
-	[program/widget] is based in part on the work of the 
-	FLTK project (http://www.fltk.org).
-
-\endverbatim
-
-\section faq_escape Hitting the 'Escape' key closes windows - how do I prevent this?
-
-[From FLTK article #378]
-
-1. FLTK has a "global event handler" that makes Escape try to close the
-window, the same as clicking the close box.  To disable this everywhere
-you can install your own that pretends it wants the escape key and thus
-stops the default one from seeing it (this may not be what you want,
-see below about the callbacks):
-
-\code
-static int my_handler(int event) {
-  if (event == FL_SHORTCUT) return 1; // eat all shortcut keys
-  return 0;
-}
-...in main():
-  Fl::add_handler(my_handler);
-...
-\endcode
-
-2. Attempts to close a window (both clicking the close box or typing
-Escape) call that window's callback.  The default version of the callback
-does hide().  To make the window not close or otherwise do something
-different you replace the callback.  To make the main window exit the
-program:
-
-\code
-void my_callback(Fl_Widget*, void*) {
-  exit(0);
-}
-...
-  main_window->callback(my_callback);
-...
-\endcode
-
-If you don't want Escape to close the main window and exit you can check
-for and ignore it.  This is better than replacing the global handler
-because Escape will still close pop-up windows:
-
-\code
-void my_callback(Fl_Widget*, void*) {
-  if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) 
-    return; // ignore Escape
-  exit(0);
-}
-\endcode
-
-It is very common to ask for confirmation before exiting, this can be
-done with:
-
-\code
-void my_callback(Fl_Widget*, void*) {
-  if (fl_ask("Are you sure you want to quit?"))
-    exit(0);
-}
-\endcode
-
-
-*/
-
binary files a/DoConfig/fltk/documentation/src/fl_alert.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_ask.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_choice.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_choice_one.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_choice_three.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_choice_two.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_color_chooser.jpg /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_input.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_message.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_password.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fl_show_colormap.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/fltk-book.tex.in
+++ /dev/null
@@ -1,161 +1,0 @@
-% Latex header for FLTK generated by doxygen 1.8.13
-\batchmode
-\documentclass[twoside]{book}
-
-% Packages required by doxygen
-\usepackage{fixltx2e}
-\usepackage{calc}
-\usepackage{doxygen}
-\usepackage[export]{adjustbox} % also loads graphicx
-\usepackage{graphicx}
-\usepackage[utf8]{inputenc}
-\usepackage{makeidx}
-\usepackage{multicol}
-\usepackage{multirow}
-\PassOptionsToPackage{warn}{textcomp}
-\usepackage{textcomp}
-\usepackage[nointegrals]{wasysym}
-\usepackage[table]{xcolor}
-
-% Font selection
-\usepackage[T1]{fontenc}
-\usepackage[scaled=.90]{helvet}
-\usepackage{courier}
-\usepackage{amssymb}
-\usepackage{sectsty}
-\renewcommand{\familydefault}{\sfdefault}
-\allsectionsfont{%
-  \fontseries{bc}\selectfont%
-  \color{darkgray}%
-}
-\renewcommand{\DoxyLabelFont}{%
-  \fontseries{bc}\selectfont%
-  \color{darkgray}%
-}
-\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
-
-% Page & text layout
-\usepackage{geometry}
-\geometry{%
-  a4paper,%
-  top=2.5cm,%
-  bottom=2.5cm,%
-  left=2.5cm,%
-  right=2.5cm%
-}
-\tolerance=750
-\hfuzz=15pt
-\hbadness=750
-\setlength{\emergencystretch}{15pt}
-\setlength{\parindent}{0cm}
-\setlength{\parskip}{3ex plus 2ex minus 2ex}
-\makeatletter
-\renewcommand{\paragraph}{%
-  \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
-    \normalfont\normalsize\bfseries\SS@parafont%
-  }%
-}
-\renewcommand{\subparagraph}{%
-  \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
-    \normalfont\normalsize\bfseries\SS@subparafont%
-  }%
-}
-\makeatother
-
-% Headers & footers
-\usepackage{fancyhdr}
-\pagestyle{fancyplain}
-\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}}
-\fancyhead[CE]{\fancyplain{}{}}
-\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}}
-\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}}
-\fancyhead[CO]{\fancyplain{}{}}
-\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}}
-\fancyfoot[LE]{\fancyplain{}{}}
-\fancyfoot[CE]{\fancyplain{}{}}
-\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
-\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }}
-\fancyfoot[CO]{\fancyplain{}{}}
-\fancyfoot[RO]{\fancyplain{}{}}
-\renewcommand{\footrulewidth}{0.4pt}
-\renewcommand{\chaptermark}[1]{%
-  \markboth{#1}{}%
-}
-\renewcommand{\sectionmark}[1]{%
-  \markright{\thesection\ #1}%
-}
-
-% Indices & bibliography
-\usepackage{natbib}
-\usepackage[titles]{tocloft}
-\setcounter{tocdepth}{3}
-\setcounter{secnumdepth}{5}
-\makeindex
-
-% Hyperlinks (required, but should be loaded last)
-\usepackage{ifpdf}
-\ifpdf
-  \usepackage[pdftex,pagebackref=true]{hyperref}
-\else
-  \usepackage[ps2pdf,pagebackref=true]{hyperref}
-\fi
-\hypersetup{%
-  colorlinks=true,%
-  linkcolor=blue,%
-  citecolor=blue,%
-  unicode%
-}
-
-% Custom commands
-\newcommand{\clearemptydoublepage}{%
-  \newpage{\pagestyle{empty}\cleardoublepage}%
-}
-
-\usepackage{caption}
-\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
-
-%===== C O N T E N T S =====
-
-\begin{document}
-
-% Titlepage & ToC
-\hypersetup{pageanchor=false,
-             bookmarksnumbered=true,
-             pdfencoding=unicode
-            }
-\pagenumbering{alph}
-\begin{titlepage}
-\vspace*{5cm}
-\begin{center}%
-{\Huge FLTK @FL_VERSION@ Programming Manual}\\
-\vspace*{2cm}
-\begin{DoxyImageNoCaption}
- \mbox{\includegraphics[width=6cm]{FL200.png}}
-\end{DoxyImageNoCaption}\\
-\vspace*{2cm}
-{\Large
-Revision 9 by F. Costantini, D. Gibson, M. Melcher, \\
-A. Schlosser, B. Spitzak, and M. Sweet.}\\
-\vspace*{1.5cm}
-{\large Copyright 1998-@YEAR@ by Bill Spitzak and others.}\\
-\vspace*{0.75cm}
-{\small
-This software and manual are provided under the terms of the GNU Library General Public License.}\\
-{\small
-Permission is granted to reproduce this manual or any portion for any purpose,}\\
-{\small
-provided this copyright and permission notice are preserved.}\\
-\vspace*{2.5cm}
-{\large Generated by Doxygen @DOXY_VERSION@}\\
-\vspace*{0.5cm}
-\today{}\\
-\end{center}
-\end{titlepage}
-\clearemptydoublepage
-\pagenumbering{roman}
-\tableofcontents
-\clearemptydoublepage
-\pagenumbering{arabic}
-\hypersetup{pageanchor=true}
-
-%--- Begin generated contents ---
binary files a/DoConfig/fltk/documentation/src/fltk-colormap.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/fltk-config.man
+++ /dev/null
@@ -1,90 +1,0 @@
-.TH fltk\-config 1 "Fast Light Tool Kit" "6 February 2007"
-.SH NAME
-fltk\-config \- script to get information about the installed version of fltk.
-.sp
-.SH SYNOPSIS
-fltk\-config [ \-\-prefix
-.I [=DIR]
-] [ \-\-exec\-prefix
-.I [=DIR]
-] [ \-\-version ] [ \-\-api\-version ] [ \-\-use\-gl ] [ \-\-use\-images ]
-[ \-\-use\-glut ]
-[ \-\-cc ] [ \-\-cxx ]
-[ \-\-cflags ] [ \-\-cxxflags ] [ \-\-ldflags ] [ \-\-ldstaticflags ]
-[ \-\-libs ]
-[ \-D\fIname[=value]\fR ] [ \-g ] [ \-\-compile
-.I program.cxx
-]
-.SH DESCRIPTION
-\fIfltk\-config\fR is a utility script that can be used to get information
-about the current version of FLTK that is installed on the system, what
-compiler and linker options to use when building FLTK-based applications,
-and to build simple FLTK applications.
-.LP
-The following options are supported:
-.TP 5
-\-\-api\-version
-.br
-Displays the current FLTK API version number, e.g. "1.1".
-.TP 5
-\-\-cc
-.TP 5
-\-\-cxx
-.br
-Displays the C/C++ compiler that was used to compile FLTK.
-.TP 5
-\-\-cflags
-.TP 5
-\-\-cxxflags
-.br
-Displays the C/C++ compiler options to use when compiling source
-files that use FLTK.
-.TP 5
-\-\-compile \fIprogram.cxx\fR
-.br
-Compiles the source file \fIprogram.cxx\fR into \fIprogram\fR.
-This option implies "\-\-post \fIprogram\fR".
-.TP 5
-\-g
-.br
-Enables debugging information when compiling with the \fI\-\-compile\fR
-option.
-.TP 5
-\-\-ldflags
-.br
-Displays the linker options to use when linking a FLTK
-application.
-.TP 5
-\-\-ldstaticflags
-.br
-Displays the linker options to use when linking a FLTK
-application to the static FLTK libraries.
-.TP 5
-\-\-libs
-.br
-Displays the full path to the FLTK library files, to be used for
-dependency checking.
-.TP 5
-\-\-use\-gl
-.br
-Enables OpenGL support.
-.TP 5
-\-\-use\-glut
-.br
-Enables GLUT support.
-.TP 5
-\-\-use\-images
-.br
-Enables image file support.
-.TP 5
-\-\-version
-.br
-Displays the current FLTK version number, e.g. "1.1.0".
-.SH SEE ALSO
-fluid(1), fltk(3)
-.br
-FLTK Programming Manual
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHORS
-Bill Spitzak and others.
--- a/DoConfig/fltk/documentation/src/fltk.man
+++ /dev/null
@@ -1,57 +1,0 @@
-.TH fltk 3 "Fast Light Tool Kit" "6 January 2002"
-.SH NAME
-fltk \- the fast light tool kit
-.sp
-.SH SYNOPSIS
-The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-C++ graphical user interface toolkit for the X Window
-System, MacOS(r), and Microsoft Windows(r) that supports OpenGL(r).
-It was originally developed by Mr. Bill Spitzak and is currently
-maintained by a small group of developers across the world with
-a central repository in the US.
-.LP
-FLTK is provides under the terms of the GNU Library General Public License,
-with the following exceptions:
-.IP
-1. Modifications to the FLTK configure script, config header
-file, and makefiles by themselves to support a specific platform
-do not constitute a modified or derivative work.
-.IP
-The authors do request that such modifications be
-contributed to the FLTK project - send all contributions
-through the "Software Trouble Report" on the following page:
-.IP
-    http://www.fltk.org/str.php
-.IP
-2. Widgets that are subclassed from FLTK widgets do not
-constitute a derivative work.
-.IP
-3. Static linking of applications and widgets to the FLTK
-library does not constitute a derivative work and does not
-require the author to provide source code for the application or
-widget, use the shared FLTK libraries, or link their
-applications or widgets against a user-supplied version of FLTK.
-.IP
-If you link the application or widget to a modified version of
-FLTK, then the changes to FLTK must be provided under the terms
-of the LGPL in sections 1, 2, and 4.
-.IP
-4. You do not have to provide a copy of the FLTK license with
-programs that are linked to the FLTK library, nor do you have to
-identify the FLTK license in your program or documentation as
-required by section 6 of the LGPL.
-.IP
-However, programs must still identify their use of FLTK. The
-following example statement can be included in user
-documentation to satisfy this requirement:
-.IP
-[program/widget] is based in part on the work of the FLTK
-project (http://www.fltk.org).
-.SH SEE ALSO
-fltk\-config(1), fluid(1)
-.br
-FLTK Programming Manual
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHORS
-Bill Spitzak and others.
binary files a/DoConfig/fltk/documentation/src/fluid-catgets.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-edit-global-fltk-settings.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-edit-gui-settings.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-edit-proj-settings.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-gettext.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-layout-grid-and-size-settings.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-org.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid-org.xcf /dev/null differ
--- a/DoConfig/fltk/documentation/src/fluid.dox
+++ /dev/null
@@ -1,1555 +1,0 @@
-/**
- <!-- Warning: \p .fl  does not work but <tt>.fl</tt>  does -->
- <!-- Warning: \p .h   does not work but <tt>.h</tt>   does -->
- <!-- Warning: \p .cxx does not work but <tt>.cxx</tt> does -->
-
- \page	fluid	Programming with FLUID
-
-This chapter shows how to use the Fast Light User-Interface Designer
-("FLUID") to create your GUIs.
-
-Subchapters:
-
-\li \ref fluid_what_is_fluid
-\li \ref fluid_fluid_under_unix
-\li \ref fluid_fluid_under_windows
-\li \ref fluid_compiling_fl_files
-\li \ref fluid_tutorial
-\li \ref fluid_references
-\li \ref fluid_i18n
-\li \ref fluid_limitations
-
-\section fluid_what_is_fluid What is FLUID?
-
-The Fast Light User Interface Designer, or FLUID, is a
-graphical editor that is used to produce FLTK source code. FLUID
-edits and saves its state in <tt>.fl</tt> files. These files
-are text, and you can (with care) edit them in a text editor,
-perhaps to get some special effects.
-
-FLUID can "compile" the <tt>.fl</tt> file into a
-<tt>.cxx</tt> and a <tt>.h</tt> file. The <tt>.cxx</tt> file
-defines all the objects from the <tt>.fl</tt> file and the
-<tt>.h</tt> file declares all the global ones. FLUID also
-supports localization (\ref fluid_i18n "Internationalization")
-of label strings using message files and the GNU gettext or
-POSIX catgets interfaces.
-
-A simple program can be made by putting all your code (including a
-\p main() function) into the <tt>.fl</tt> file and thus making the
-<tt>.cxx</tt> file a
-single source file to compile.  Most programs are more complex than
-this, so you write other <tt>.cxx</tt> files that call the FLUID functions.
-These <tt>.cxx</tt> files must
-\p \#include
-the <tt>.h</tt> file or they can
-\p \#include
-the <tt>.cxx</tt> file so it still appears to be a single source file.
-
- \image html fluid-org.png "Figure 9-1: FLUID organization"
- \image latex fluid-org.png "FLUID organization" width=12cm 
-
-Normally the FLUID file defines one or more functions or classes which
-output C++ code.  Each function defines one or more FLTK
-windows, and all the widgets that go inside those windows.
-
-Widgets created by FLUID are either "named", "complex named" or
-"unnamed".  A named widget has a legal C++ variable identifier as its
-name (i.e. only alphanumeric and underscore).  In this case FLUID
-defines a global variable or class member that will point at the widget
-after the function defining it is called.  A complex named object has
-punctuation such as <tt>'.'</tt> or <tt>'->'</tt> or any other symbols
-in its name.  In
-this case FLUID assigns a pointer to the widget to the name, but does
-not attempt to declare it.  This can be used to get the widgets into
-structures.  An unnamed widget has a blank name and no pointer is stored.
-
-Widgets may either call a named callback function that you write in
-another source file, or you can supply a small piece of C++ source and
-FLUID will write a private callback function into the <tt>.cxx</tt> file.
-
-\section fluid_fluid_under_unix Running FLUID Under UNIX
-
-To run FLUID under UNIX, type:
-
-\code
-fluid filename.fl &
-\endcode
-
-to edit the <tt>.fl</tt> file <tt>filename.fl</tt>.
-If the file does not exist
-you will get an error pop-up, but if you dismiss it you will be editing
-a blank file of that name.  You can run FLUID without any name, in
-which case you will be editing an unnamed blank setup (but you can use
-save-as to write it to a file).
-
-You can provide any of the standard FLTK switches before the filename: 
-
-\code
--display host:n.n
--geometry WxH+X+Y
--title windowtitle
--name classname
--iconic
--fg color
--bg color
--bg2 color
--scheme schemename
-\endcode
-
-Changing the colors may be useful to see what your interface
-will look at if the user calls it with the same switches.
-Similarly, using "-scheme plastic" will show how the interface
-will look using the "plastic" scheme.
-
-In the current version, if you don't put FLUID into the
-background with <tt>'&'</tt> then you will be able to abort FLUID by
-typing <tt>CTRL-C</tt> on the terminal. It will exit
-immediately, losing any changes.
-
-\section fluid_fluid_under_windows Running FLUID Under Microsoft Windows
-
-To run FLUID under WIN32, double-click on the \e FLUID.exe
-file. You can also run FLUID from the Command Prompt window.
-FLUID always runs in the background under WIN32.
-
-\section fluid_compiling_fl_files Compiling .fl files
-
-FLUID can also be called as a command-line
-"compiler" to create the <tt>.cxx</tt> and <tt>.h</tt>
-file from a <tt>.fl</tt> file.  To do this type:
-
-\code
-fluid -c filename.fl
-\endcode
-
-This is the same as the menu 'File/Write Code...'.
-It will read the <tt>filename.fl</tt> file and write
-<tt>filename.cxx</tt> and <tt>filename.h</tt>. Any leading
-directory on <tt>filename.fl</tt> will be stripped, so they are
-always written to the current directory. If there are any errors
-reading or writing the files, FLUID will print the error and
-exit with a non-zero code. You can use the following lines in a
-makefile to automate the creation of the source and header
-files:
-
-\code
-my_panels.h my_panels.cxx: my_panels.fl
-	fluid -c my_panels.fl
-\endcode
-
-Most versions of make support rules that cause <tt>.fl</tt>
-files to be compiled:
-
-\code
-.SUFFIXES: .fl .cxx .h
-.fl.h .fl.cxx:
-	fluid -c $<
-\endcode
-
-If you use
-
-\code
-fluid -cs filename.fl
-\endcode
-
-FLUID will also write the "strings" for internationalization in file
-'filename.txt' (menu: 'File/Write Strings...').
-
-Finally there is another option which is useful for program developers
-who have many .fl files and want to upgrade them to the current FLUID
-version. FLUID will read the \p filename.fl file, save it, and exit
-immediately. This writes the file with current syntax and options and
-the current FLTK version in the header of the file. Use
-
-\code
-fluid -u filename.fl
-\endcode
-
-to 'upgrade' \p filename.fl . You may combine this with '-c' or '-cs'.
-
-\note All these commands overwrite existing files w/o warning. You should
-particularly take care when running 'fluid -u' since this overwrites the
-original .fl source file.
-
-
-\section fluid_tutorial A Short Tutorial
-
-FLUID is an amazingly powerful little program. However, this
-power comes at a price as it is not always obvious how to
-accomplish seemingly simple tasks with it. This tutorial will
-show you how to generate a complete user interface class with
-FLUID that is used for the CubeView program provided with FLTK.
-
-\image html cubeview.png "Figure 9-2: CubeView demo"
-\image latex cubeview.png "CubeView demo" width=10cm
-
-The window is of class CubeViewUI, and is completely generated by FLUID,
-including
-class member functions. The central display of the cube is a separate
-subclass of Fl_Gl_Window called CubeView. CubeViewUI manages CubeView
-using callbacks from the various sliders and rollers to manipulate the
-viewing angle and zoom of CubeView.
-
-At the completion of this tutorial you will (hopefully) understand
-how to:
-
--# Use FLUID to create a complete user interface class, including
-   constructor and any member functions necessary.
--# Use FLUID to set callbacks member functions of a custom widget
-   classes.
--# Subclass an Fl_Gl_Window to suit your purposes.
-
-\subsection fluid_cubeview The CubeView Class
-
-The CubeView class is a subclass of Fl_Gl_Window. It has methods for
-setting the zoom, the \e x and \e y pan, and the rotation angle
-about the \e x and \e y axes.
-
-You can safely skip this section as long as you realize that CubeView
-is a sublass of Fl_Gl_Window and will respond to calls from
-CubeViewUI, generated by FLUID.
-
-\par The CubeView Class Definition
-
-Here is the CubeView class definition, as given by its header file
-"test/CubeView.h":
-
-\code
-class CubeView : public Fl_Gl_Window {
-  public:
-    CubeView(int x,int y,int w,int h,const char *l=0);
-    // this value determines the scaling factor used to draw the cube.
-    double size;
-    /* Set the rotation about the vertical (y ) axis.
-     *
-     * This function is called by the horizontal roller in CubeViewUI
-     * and the initialize button in CubeViewUI.
-     */
-    void v_angle(float angle){vAng=angle;};
-    // Return the rotation about the vertical (y ) axis.
-    float v_angle(){return vAng;};
-    /* Set the rotation about the horizontal (x ) axis.
-     *
-     * This function is called by the vertical roller in CubeViewUI
-       and the
-     * initialize button in CubeViewUI.
-     */
-    void h_angle(float angle){hAng=angle;};
-    // the rotation about the horizontal (x ) axis.
-    float h_angle(){return hAng;};
-    /* Sets the x shift of the cube view camera.
-     *
-     * This function is called by the slider in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-    void panx(float x){xshift=x;};
-    /* Sets the y shift of the cube view camera.
-     *
-     * This function is called by the slider in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-    void pany(float y){yshift=y;};
-    /* The widget class draw() override.
-     * The draw() function initialize Gl for another round of
-     * drawing then calls specialized functions for drawing each
-     * of the entities displayed in the cube view.
-     */
-    void draw();
-
-  private:
-    /* Draw the cube boundaries
-     * Draw the faces of the cube using the boxv[] vertices, using
-     * GL_LINE_LOOP for the faces. The color is #defined by
-     * CUBECOLOR.
-     */
-    void drawCube();
-   
-    float vAng,hAng; float xshift,yshift;
-
-    float boxv0[3];float boxv1[3]; float boxv2[3];float boxv3[3];
-    float boxv4[3];float boxv5[3]; float boxv6[3];float boxv7[3];
-};
-\endcode
-
-\par The CubeView Class Implementation
-
-Here is the CubeView implementation. It is very similar to the
-"cube" demo included with FLTK.
-
-\code
-#include "CubeView.h"
-#include <math.h>
-
-CubeView::CubeView(int x,int y,int w,int h,const char *l)
-            : Fl_Gl_Window(x,y,w,h,l)
-{
-    vAng = 0.0; hAng=0.0; size=10.0;
-    /* The cube definition. These are the vertices of a unit cube
-     * centered on the origin.*/
-    boxv0[0] = -0.5; boxv0[1] = -0.5; boxv0[2] = -0.5; boxv1[0] = 0.5;
-    boxv1[1] = -0.5; boxv1[2] = -0.5; boxv2[0] = 0.5; boxv2[1] = 0.5;
-    boxv2[2] = -0.5; boxv3[0] = -0.5; boxv3[1] = 0.5; boxv3[2] = -0.5;
-    boxv4[0] = -0.5; boxv4[1] = -0.5; boxv4[2] = 0.5; boxv5[0] = 0.5;
-    boxv5[1] = -0.5; boxv5[2] = 0.5; boxv6[0] = 0.5; boxv6[1] = 0.5;
-    boxv6[2] = 0.5; boxv7[0] = -0.5; boxv7[1] = 0.5; boxv7[2] = 0.5;
-};
-
-// The color used for the edges of the bounding cube.
-#define CUBECOLOR 255,255,255,255
-
-void CubeView::drawCube() {
-/* Draw a colored cube */
-#define ALPHA 0.5
-    glShadeModel(GL_FLAT);
-
-    glBegin(GL_QUADS);
-      glColor4f(0.0, 0.0, 1.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv3);
-
-      glColor4f(1.0, 1.0, 0.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv1);
-
-      glColor4f(0.0, 1.0, 1.0, ALPHA);
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv3);
-
-      glColor4f(1.0, 0.0, 0.0, ALPHA);
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-
-      glColor4f(1.0, 0.0, 1.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv4);
-
-      glColor4f(0.0, 1.0, 0.0, ALPHA);
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv2);
-    glEnd();
-
-    glColor3f(1.0, 1.0, 1.0);
-    glBegin(GL_LINES);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv1);
-
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv2);
-
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv3);
-
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv0);
-
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv4);
-
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv4);
-
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv5);
-
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv6);
-
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv7);
-    glEnd();
-};//drawCube
-
-void CubeView::draw() {
-    if (!valid()) {
-        glLoadIdentity(); glViewport(0,0,w(),h());
-        glOrtho(-10,10,-10,10,-20000,10000); glEnable(GL_BLEND);
-        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    }
-
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-    glPushMatrix(); glTranslatef(xshift, yshift, 0);
-    glRotatef(hAng,0,1,0); glRotatef(vAng,1,0,0);
-    glScalef(float(size),float(size),float(size)); drawCube();
-    glPopMatrix();
-};
-\endcode
-
-\subsection fluid_cubevieui The CubeViewUI Class
-
-We will completely construct a window to display and control the
-CubeView defined in the previous section using FLUID.
-
-\par Defining the CubeViewUI Class
-
-Once you have started FLUID, the first step in defining a class is to
-create a new class within FLUID using the <b>New->Code->Class</b>
-menu item. Name the class "CubeViewUI" and leave the
-subclass blank. We do not need any inheritance for this
-window. You should see the new class declaration in the FLUID
-browser window.
-
-\image html fluid1.png "Figure 9-3: FLUID file for CubeView"
-\image latex fluid1.png "FLUID file for CubeView" width=10cm
-
-\par Adding the Class Constructor
-
-Click on the CubeViewUI class in the FLUID window and add a new method
-by selecting <b>New->Code->Function/Method.</b> The name of the
-function will also be CubeViewUI. FLUID will understand that this will
-be the constructor for the class and will generate the appropriate
-code. Make sure you declare the constructor public.
-
-Then add a window to the CubeViewUI class. Highlight the name of
-the constructor in the FLUID browser window and click on
-<b>New->Group->Window</b>. In a similar manner add the
-following to the CubeViewUI constructor:
-
-\li A horizontal roller named \p hrot
-\li A vertical roller named \p vrot
-\li A horizontal slider named \p xpan
-\li A vertical slider named \p ypan
-\li A horizontal value slider named \p zoom
-
-None of these additions need be public. And they shouldn't be
-unless you plan to expose them as part of the interface for
-CubeViewUI.
-
-When you are finished you should have something like this:
-
-\image html fluid2.png "Figure 9-4: FLUID window containing CubeView demo"
-\image latex fluid2.png "FLUID window containing CubeView demo" width=10cm
-
-We will talk about the \p show() method that is highlighted
-shortly.
-
-\par Adding the CubeView Widget
-
-What we have is nice, but does little to show our cube. We have already
-defined the CubeView class and we would like to show it within the
-CubeViewUI.
-
-The CubeView class inherits the Fl_Gl_Window class, which
-is created in the same way as a Fl_Box widget. Use
-<b>New->Other->Box</b> to add a square box to the main window.
-This will be no ordinary box, however.
-
-The Box properties window will appear. The key to letting CubeViewUI
-display CubeView is to enter CubeView in the <b>Class:</b> text
-entry box. This tells FLUID that it is not an Fl_Box, but a
-similar widget with the same constructor. 
-
-In the <b>Extra Code:</b> field enter <tt>\#include "CubeView.h"</tt>
-
-This \p \#include is important, as we have just included
-CubeView as a member of CubeViewUI, so any public CubeView methods are
-now available to CubeViewUI.
-
-\image html fluid3-cxx.png "Figure 9-5: CubeView methods"
-\image latex fluid3-cxx.png "CubeView methods" width=10cm
-
-\par Defining the Callbacks
-
-Each of the widgets we defined before adding CubeView can have
-callbacks that call CubeView methods. You can call an external
-function or put in a short amount of code in the <b>Callback</b>
-field of the widget panel. For example, the callback for the
-\p ypan slider is:
-
-\code
-cube->pany(((Fl_Slider *)o)->value());
-cube->redraw();
-\endcode
-
-We call <tt>cube->redraw()</tt> after changing the value to update
-the CubeView window. CubeView could easily be modified to do this, but
-it is nice to keep this exposed. In the case where you may want to do
-more than one view change only redrawing once saves a lot of time.
-
-There is no reason to wait until after you have added CubeView to
-enter these callbacks. FLUID assumes you are smart enough not to refer
-to members or functions that don't exist.
-
-\par Adding a Class Method
-
-You can add class methods within FLUID that have nothing to do with the
-GUI. As an example add a show function so that CubeViewUI can actually
-appear on the screen.
-
-Make sure the top level CubeViewUI is selected and select
-<b>New->Code->Function/Method</b>. Just use the name
-\p show(). We don't need a return value here, and since we will
-not be adding any widgets to this method FLUID will assign it a return
-type of \p void.
-
-\image html fluid4.png "Figure 9-6: CubeView constructor"
-\image latex fluid4.png "CubeView constructor" width=10cm
-
-Once the new method has been added, highlight its name and select
-<b>New->Code->Code.</b> Enter the method's code in the code window.
-
-\subsection fluid_addconst Adding Constructor Initialization Code
-
-If you need to add code to initialize a class, for example setting
-initial values of the horizontal and vertical angles in the
-CubeView, you can simply highlight the constructor and select
-<b>New->Code->Code</b>. Add any required code.
-
-\subsection fluid_gencode Generating the Code
-
-Now that we have completely defined the CubeViewUI, we have to generate
-the code. There is one last trick to ensure this all works. Open the
-preferences dialog from <b>Edit->Preferences</b>.
-
-At the bottom of the preferences dialog box is the key:
-<b>"Include Header from Code"</b>.
-Select that option and set your desired file
-extensions and you are in business. You can include the CubeViewUI.h
-(or whatever extension you prefer) as you would any other C++ class.
-
-<!-- NEW PAGE -->
-
-\section fluid_references FLUID Reference
-
-The following sections describe each of the windows in FLUID.
-
-\subsection fluid_browser The Widget Browser
-
-The main window shows a menu bar and a scrolling browser of
-all the defined widgets. The name of the <tt>.fl</tt> file being
-edited is shown in the window title.
-
-The widgets are stored in a hierarchy.  You can open and close a
-level by clicking the "triangle" at the left of a widget.
-The leftmost widgets are the \e parents, and all the widgets
-listed below them are their \e children.  Parents don't have to have
-any children.
-
-The top level of the hierarchy is composed of \e functions and
-\e classes.  Each of these will produce a single C++ public
-function or class in the output <tt>.cxx</tt> file.  Calling the function or
-instantiating the class will create all of the child widgets.
-
-The second level of the hierarchy contains the \e windows.
-Each of these produces an instance of class Fl_Window.
-
-Below that are either \e widgets (subclasses of Fl_Widget) or
-\e groups of widgets (including other groups).  Plain groups are for
-layout, navigation, and resize purposes. <i>Tab groups</i> provide the
-well-known file-card tab interface.
-
-Widgets are shown in the browser by either their \e name (such
-as "main_panel" in the example), or by their \e type
-and \e label (such as "Button "the green"").
-
-You \e select widgets by clicking on their names, which highlights
-them (you can also select widgets from any displayed window).  You can
-select many widgets by dragging the mouse across them, or by using
-Shift+Click to toggle them on and off.  To select no widgets, click in
-the blank area under the last widget.  Note that hidden children may
-be selected even when there is no visual indication of this.
-
-You \e open widgets by double-clicking on them, or (to open several
-widgets you have picked) by typing the F1 key.  A control panel will appear
-so you can change the widget(s).
-
-\subsection fluid_menu_items Menu Items
-
-The menu bar at the top is duplicated as a pop-up menu on any
-displayed window.  The shortcuts for all the menu items work in any
-window.  The menu items are: 
-
-\par File/Open... (Ctrl+o)
-
-\par
-Discards the current editing session and reads in a different
-<tt>.fl</tt> file. You are asked for confirmation if you have
-changed the current file.
-
-\par
-FLUID can also read <tt>.fd</tt> files produced by the Forms
-and XForms "fdesign" programs. It is best to
-File/Merge them instead of opening them. FLUID does not
-understand everything in a <tt>.fd</tt> file, and will print a
-warning message on the controlling terminal for all data it does
-not understand. You will probably need to edit the resulting
-setup to fix these errors. Be careful not to save the file
-without changing the name, as FLUID will write over the
-<tt>.fd</tt> file with its own format, which fdesign cannot
-read! 
-
-\par File/Insert... (Ctrl+i)
-
-\par
-Inserts the contents of another <tt>.fl</tt> file, without
-changing the name of the current <tt>.fl</tt> file.  All the
-functions (even if they have the same names as the current ones)
-are added, and you will have to use cut/paste to put the widgets
-where you want.
-
-\par File/Save (Ctrl+s)
-
-\par
-Writes the current data to the <tt>.fl</tt> file.  If the
-file is unnamed then FLUID will ask for a filename.
-
-\par File/Save As... (Ctrl+Shift+S)
-
-\par
-Asks for a new filename and saves the file.
-
-\par File/Write Code (Ctrl+Shift+C)
-
-\par
-"Compiles" the data into a <tt>.cxx</tt> and <tt>.h</tt>
-file. These are exactly the same as the files you get when you run
-FLUID with the \c -c switch.
-
-\par
-The output file names are the same as the <tt>.fl</tt> file, with
-the leading  directory and trailing ".fl" stripped, and
-".h" or ".cxx" appended.
-
-\par File/Write Strings (Ctrl+Shift+W)
-
-\par
-Writes a message file for all of the text labels defined in
-the current file.
-
-\par
-The output file name is the same as the <tt>.fl</tt> file,
-with the leading  directory and trailing ".fl"
-stripped, and ".txt", ".po", or ".msg" appended depending on the
-\ref fluid_i18n "Internationalization Mode".
-
-\par File/Quit (Ctrl+q)
-
-\par
-Exits FLUID. You are asked for confirmation if you have
-changed the current file.
-
-\par Edit/Undo (Ctrl+z)
-
-\par
-This isn't implemented yet. You should do save often so you can
-recover from any mistakes you make.
-
-\par Edit/Cut (Ctrl+x)
-
-\par
-Deletes the selected widgets and all of their children. 
-These are saved to a "clipboard" file and can be
-pasted back into any FLUID window.
-
-\par Edit/Copy (Ctrl+c)
-
-\par
-Copies the selected widgets and all of their children to the
-"clipboard" file.
-
-\par Edit/Paste (Ctrl+c)
-
-\par
-Pastes the widgets from the clipboard file.
-
-\par
-If the widget is a window, it is added to whatever function
-is selected, or contained in the current selection.
-
-\par
-If the widget is a normal widget, it is added to whatever
-window or group is selected.  If none is, it is added to the
-window or group that is the parent of the current selection.
-
-\par
-To avoid confusion, it is best to select exactly one widget
-before doing a paste.
-
-\par
-Cut/paste is the only way to change the parent of a
-widget.
-
-\par Edit/Select All (Ctrl+a)
-
-\par
-Selects all widgets in the same group as the current selection.
-
-\par
-If they are all selected already then this selects all
-widgets in that group's parent.  Repeatedly typing Ctrl+a will
-select larger and larger groups of widgets until everything is
-selected.
-
-\par Edit/Open... (F1 or double click)
-
-\par
-Displays the current widget in the attributes panel. If the
-widget is a window and it is not visible then the window is
-shown instead.
-
-\par Edit/Sort
-
-\par
-Sorts the selected widgets into left to right, top to bottom
-order.  You need to do this to make navigation keys in FLTK work
-correctly.  You may then fine-tune the sorting with
-"Earlier" and "Later".  This does not affect
-the positions of windows or functions.
-
-\par Edit/Earlier (F2)
-
-\par
-Moves all of the selected widgets one earlier in order among
-the children of their parent (if possible).  This will affect
-navigation order, and if the widgets overlap it will affect how
-they draw, as the later widget is drawn on top of the earlier
-one.  You can also use this to reorder functions, classes, and
-windows within functions.
-
-\par Edit/Later (F3)
-
-\par
-Moves all of the selected widgets one later in order among
-the children of their parent (if possible).
-
-\par Edit/Group (F7)
-
-\par
-Creates a new Fl_Group and make all the currently
-selected widgets children of it.
-
-\par Edit/Ungroup (F8)
-
-\par
-Deletes the parent group if all the children of a group are
-selected.
-
-\par Edit/Overlays on/off (Ctrl+Shift+O)
-
-\par
-Toggles the display of the red overlays off, without changing
-the selection.  This makes it easier to see box borders and how
-the layout looks.  The overlays will be forced back on if you
-change the selection.
-
-\par Edit/Project Settings... (Alt+p)
-
-\par
-Displays the project settings panel.
-
-\par
-Under the "Output" tab you control the extensions or names of the files
-that are generated by FLUID. If you check the "Include Header from Code"
-button the code file will include the header file automatically.
-
-\par
-Under the "Internationalization" tab are the \ref fluid_i18n "internationalization"
-options, described later in this chapter.
-
-\image html fluid-edit-proj-settings.png "Figure 9-7: FLUID Project Settings Window"
-\image latex fluid-edit-proj-settings.png "FLUID Project Settings Window" width=10cm
-
-\par Edit/GUI Settings... (Shift+Alt+p)
-
-\par
-Displays the GUI Settings panel, used to control the user interface settings.
-
-\image html fluid-edit-gui-settings.png "Figure 9-7a: FLUID GUI Settings Window"
-\image latex fluid-edit-gui-settings.png "FLUID GUI Settings Window" width=10cm
-
-\par Edit/Global FLTK Settings... (Shift+Alt+g)
-
-\par
-Displays the FLTK Global Settings ("Preferences") panel, used to control fluid's
-user specific and/or system wide settings.
-
-\par
-Tooltips provide descriptions of each option.
-
-\par
-At the lower-right, "User Settings" causes changes to only affect the current user,
-"System Settings" causes changes to be applied to all users on the current machine.
-
-\image html fluid-edit-global-fltk-settings.png "Figure 9-7b: FLUID Global Settings Window"
-\image latex fluid-edit-global-fltk-settings.png "FLUID Global Settings Window" width=10cm
-
-\par New/Code/Function
-
-\par
-Creates a new C function.  You will be asked for a name for
-the function.  This name should be a legal C++ function
-template, without the return type.  You can pass arguments which
-can be referred to by code you type into the individual widgets.
-
-\par
-If the function contains any unnamed windows, it will be
-declared as  returning a Fl_Window pointer.  The unnamed window
-will be returned from it  (more than one unnamed window is
-useless).  If the function contains  only named windows, it will
-be declared as returning nothing (\c void ).
-
-\par
-It is possible to make the <tt>.cxx</tt> output be a
-self-contained program  that can be compiled and executed.  This
-is done by deleting the  function name so
-\p main(argc,argv) is used.  The function will call
-\p show() on all the windows it creates and then call
-\p Fl::run().  This can also be used to test resize
-behavior or other parts of the user  interface.
-
-\par
-You can change the function name by double-clicking on the
-function.
-
-\par New/Window
-
-\par
-Creates a new Fl_Window widget.  The window is added
-to the currently selected  function, or to the function
-containing the currently selected item.  The window will appear,
-sized to 100x100. You can resize it to whatever size you
-require.
-
-\par
-The widget panel will also appear and is described later in
-this chapter.
-
-\par New/...
-
-\par
-All other items on the New menu are subclasses of
-Fl_Widget.  Creating them will add them to the
-currently selected group or window, or the group or window
-containing the currently selected widget.  The initial
-dimensions and position are chosen by copying the current
-widget, if possible.
-
-\par
-When you create the widget you will get the widget's control
-panel, which is described later in this chapter.
-
-\par Layout/Align/... 
-
-\par
-Align all selected widgets to the first widget in the selection.
-
-\par Layout/Space Evenly/... 
-
-\par
-Space all selected widgets evenly inside the selected space.
-Widgets will be sorted from first to last.
-
-\par Layout/Make Same Size/... 
-
-\par
-Make all selected widgets the same size as the first selected widget.
-
-\par Layout/Center in Group/... 
-
-\par
-Center all selected widgets relative to their parent widget
-
-\par Layout/Grid and Size Settings... (Ctrl+g)
-
-\par
-Displays the grid settings panel. 
-
-\par
-This panel controls the grid that all widgets snap to when you move
-and resize them, and for the "snap" which is how far a widget has to be
-dragged from its original position to actually change.
-
-\image html fluid-layout-grid-and-size-settings.png "Figure 9-7c: FLUID Layout/Grid Settings Window"
-\image latex fluid-layout-grid-and-size-settings.png "FLUID Layout/Grid Settings Window" width=10cm
-
-\par Shell/Execute Command... (Alt+x)
-
-\par
-Displays the shell command panel. The shell command
-is commonly used to run a 'make' script to compile the FLTK output.
-
-\par Shell/Execute Again (Alt+g)
-
-\par
-Run the shell command again.
-
-\par Help/About FLUID
-
-\par
-Pops up a panel showing the version of FLUID.
-
-\par Help/On FLUID
-
-\par
-Shows this chapter of the manual.
-
-\par Help/Manual
-
-\par
-Shows the contents page of the manual
-
-\subsection fluid_widget_panel The Widget Panel
-
-When you double-click on a widget or a set of widgets you
-will get the "widget attribute panel".
-
-When you change attributes using this panel, the changes are
-reflected immediately in the window. It is useful to hit the
-"no overlay" button (or type Ctrl+Shift+O) to hide the
-red overlay so you can see the widgets more accurately,
-especially when setting the box type.
-
-If you have several widgets selected, they may have different
-values for the fields.  In this case the value for \e one of
-the widgets is shown.  But if you change this value, \e all
-of the selected widgets are changed to the new value.
-
-Hitting "OK" makes the changes permanent. 
-Selecting a different widget also makes the changes permanent. 
-FLUID checks for simple syntax errors such as mismatched
-parenthesis in any code before saving any text.
-
-"Revert" or "Cancel" put everything back
-to when you last brought up the panel or hit OK.  However in the
-current version of FLUID, changes to "visible"
-attributes (such as the color, label, box) are not undone by
-revert or cancel.  Changes to code like the callbacks are
-undone, however.
-
-<!-- NEW PAGE -->
-
-\image html fluid_widget_gui.png "Figure 9-8: The FLUID widget GUI attributes"
-\image latex fluid_widget_gui.png "The FLUID widget GUI attributes" width=10cm
-
-\section fluid_widget_attributes GUI Attributes
-
-\par Label (text field)
-
-\par
-String to print next to or inside the button. You can put
-newlines into the string to make multiple lines. The easiest way
-is by typing Ctrl+j.
-
-\par
-\ref common_labels "Symbols"
-can be added to the label using the at sign ("@").
-
-\par Label (pull down menu)
-
-\par
-How to draw the label.  Normal, shadowed, engraved, and
-embossed change the appearance of the text.
-
-\par Image
-
-\par
-The active image for the widget. Click on the
-\b Browse... button to pick an image file using the file
-chooser.
-
-\par Inactive
-
-\par
-The inactive image for the widget. Click on the
-\b Browse... button to pick an image file using the file
-chooser.
-
-\par Alignment (buttons)
-
-\par
-Where to draw the label.  The arrows put it on that side of the
-widget, you can combine them to put it in the corner. The "box"
-button puts the label inside the widget, rather than outside.
-
-\par
-The \b clip button clips the label to the widget box, the
-\b wrap button wraps any text in the label, and the
-<b>text image</b> button puts the text over the image instead of under
-the image.
-
-\par Position (text fields)
-
-\par
-The position fields show the current position and size of the
-widget box. Enter new values to move and/or resize a widget.
-
-\par Values (text fields)
-
-\par
-The values and limits of the current widget. Depending on the
-type of widget, some or all of these fields may be inactive.
-
-\par Shortcut
-
-\par
-The shortcut key to activate the widget. Click on the
-shortcut button and press any key sequence to set the shortcut.
-
-\par Attributes (buttons)
-
-\par
-The \b Visible button controls whether the widget is
-visible (on) or hidden (off) initially.  Don't change this for
-windows or for the immediate children of a Tabs group.
-
-\par
-The \b Active button controls whether the widget is
-activated (on) or deactivated (off) initially. Most widgets
-appear greyed out when deactivated.
-
-\par
-The \b Resizable button controls whether the window is
-resizeable. In addition all the size changes of a window or
-group will go "into" the resizable child.  If you have
-a large data display surrounded by buttons, you probably want
-that data area to be resizable. You can get more complex
-behavior by making invisible boxes the resizable widget, or by
-using hierarchies of groups.  Unfortunately the only way to test
-it is to compile the program.  Resizing the FLUID window is
-\e not the same as what will happen in the user program.
-
-\par
-The \b Hotspot button causes the parent window to be
-positioned with that widget centered on the mouse.  This
-position is determined <i>when the FLUID function is called</i>,
-so you should call it immediately before showing the window.  If
-you want the window to hide and then reappear at a new position,
-you should have your program set the hotspot itself just before
-\p show().
-
-\par
-The \b Border button turns the window manager border on
-or off. On most window managers you will have to close the
-window and reopen it to see the effect.
-
-\par X Class (text field)
-
-\par
-The string typed into here is passed to the X window manager
-as the class. This can change the icon or window decorations. 
-On most (all?) window managers you will have to close the window
-and reopen it to see the effect.
-
-\image html fluid_widget_style.png "Figure 9-9: The FLUID widget Style attributes"
-\image latex fluid_widget_style.png "The FLUID widget Style attributes" width=10cm
-
-\subsection fluid_style_attributes Style Attributes
-
-\par Label Font (pulldown menu)
-
-\par
-Font to draw the label in.  Ignored by symbols, bitmaps, and
-pixmaps. Your program can change the actual font used by these
-"slots" in case you want some font other than the 16
-provided.
-
-\par Label Size (pulldown menu)
-
-\par
-Pixel size (height) for the font to draw the label in. 
-Ignored by symbols, bitmaps, and pixmaps.  To see the result
-without dismissing the panel, type the new number and then Tab.
-
-\par Label Color (button)
-
-\par
-Color to draw the label.  Ignored by pixmaps (bitmaps,
-however, do use this color as the foreground color).
-
-\par Box (pulldown menu)
-
-\par
-The boxtype to draw as a background for the widget.
-
-\par
-Many widgets will work, and draw faster, with a
-"frame" instead of a "box".  A frame does
-not draw the colored interior, leaving whatever was already
-there visible.  Be careful, as FLUID may draw this ok but the
-real program may leave unwanted stuff inside the widget.
-
-\par
-If a window is filled with child widgets, you can speed up
-redrawing by changing the window's box type to
-"NO_BOX".  FLUID will display a checkerboard for any
-areas that are not colored in by boxes. Note that this
-checkerboard is not drawn by the resulting program. Instead
-random garbage will be displayed.
-
-\par Down Box (pulldown menu)
-
-\par
-The boxtype to draw when a button is pressed or for some
-parts of other widgets like scrollbars and valuators.
-
-\par Color (button)
-
-\par
-The color to draw the box with.
-
-\par Select Color (button)
-
-\par
-Some widgets will use this color for certain parts.  FLUID
-does not always show the result of this: this is the color
-buttons draw in when pushed down, and the color of input fields
-when they have the focus.
-
-\par Text Font, Size, and Color
-
-\par
-Some widgets display text, such as input fields, pull-down
-menus, and browsers.
-
-\image html fluid_widget_cxx.png "Figure 9-10: The FLUID widget C++ attributes"
-\image latex fluid_widget_cxx.png "The FLUID widget C++ attributes" width=10cm
-
-\subsection fluid_cpp_attributes C++ Attributes
-
-\par Class
-
-\par
-This is how you use your own subclasses of
-Fl_Widget.  Whatever identifier you type in here will
-be the class that is instantiated.
-
-\par
-In addition, no \p \#include header file is put in the
-<tt>.h</tt> file.  You must provide a \p \#include line as
-the first line of the "Extra Code" which declares your
-subclass.
-
-\par
-The class must be similar to the class you are spoofing.  It
-does not have to be a subclass.  It is sometimes useful to
-change this to another FLTK class. Currently the only way to get
-a double-buffered window is to change this field for the window
-to "Fl_Double_Window" and to add
-\code #include <FL/Fl_Double_Window.h> \endcode
-to the extra code.
-
-\par Type (upper-right pulldown menu)
-
-\par
-Some classes have subtypes that modify their appearance or behavior.
-You pick the subtype off of this menu.
-
-\par Name (text field)
-
-\par
-Name of a variable to declare, and to store a pointer to this
-widget into.  This variable will be of type "<class>*".  If the name is
-blank then no variable is created.
-
-\par
-You can name several widgets with "name[0]", "name[1]", "name[2]",
-etc.  This will cause FLUID to declare an array of pointers.  The array
-is big enough that the highest number found can be stored.  All widgets
-in the array must be the same type.
-
-\par Public (button)
-
-\par
-Controls whether the widget is publicly accessible. When
-embedding widgets in a C++ class, this controls whether the
-widget is \p public or \p private in the class.
-Otherwise it controls whether the widget is declared
-\p static or global (\p extern ).
-
-\par Extra Code (text fields)
-
-\par
-These four fields let you type in literal lines of code to
-dump into the <tt>.h</tt> or <tt>.cxx</tt> files.
-
-\par
-If the text starts with a <tt>\#</tt> or the word
-\p extern then FLUID thinks this is an "include"
-line, and it is written to the <tt>.h</tt> file. If the same
-include line occurs several times then only one copy is
-written.
-
-\par
-All other lines are "code" lines.  The current
-widget is pointed to by the local variable \p o.  The
-window being constructed is pointed to by the local variable
-\p w.  You can also access any arguments passed to the
-function here, and any named widgets that are before this
-one.
-
-\par
-FLUID will check for matching parenthesis, braces, and
-quotes, but does not do much other error checking.  Be careful
-here, as it may be hard to figure out what widget is producing
-an error in the compiler. If you need more than four lines you
-probably should call a function in your own <tt>.cxx</tt>
-code.
-
-\par Callback (text field)
-
-\par
-This can either be the name of a function, or a small snippet
-of code. If you enter anything other than letters, numbers, and the
-underscore then FLUID treats it as code.
-
-\par
-A name refers to a function in your own code.  It must be
-declared as <tt>void name(<class>*,void*)</tt>.
-
-\par
-A code snippet is inserted into a static function in the
-<tt>.cxx</tt> output  file.  The function prototype is
-<tt>void name(class *o, void *v)</tt>
-so that you can refer to the widget as \p o and the \p user_data()
-as \p v.  FLUID will check for matching  parenthesis, braces,
-and quotes, but does not do much other error  checking.  Be
-careful here, as it may be hard to figure out what widget  is
-producing an error in the compiler.
-
-\par
-If the callback is blank then no callback is set.
-
-\par User Data (text field)
-
-\par
-This is a value for the \p user_data() of the widget. 
-If blank the default value of zero is used.  This can be any
-piece of C code that can be cast to a \p void pointer.
-
-\par Type (text field)
-
-\par
-The \p void* in the callback function prototypes is
-replaced with this. You may want to use \p long for old
-XForms code.  Be warned that anything other than \p void*
-is not guaranteed to work! However on most architectures other
-pointer types are ok, and \p long is usually ok, too.
-
-\par When (pulldown menu)
-
-\par
-When to do the callback. This can be \b Never,
-\b Changed, \b Release, or \b Enter Key. The value of
-<b>Enter Key</b> is only useful for text input fields.
-
-\par
-There are other rare but useful values for the
-\p when() field that are not in the menu. You should use
-the extra code fields to put these values in.
-
-\par No Change (button)
-
-\par
-The <b>No Change</b> button means the callback is done on the
-matching event even if the data is not changed.
-
-\section fluid_selecting_moving Selecting and Moving Widgets
-
-Double-clicking a window name in the browser will display it,
-if not displayed yet.  From this display you can select widgets,
-sets of widgets, and move or resize them.  To close a window
-either double-click it or type \c ESC.
-
-To select a widget, click it. To select several widgets drag
-a rectangle around them.  Holding down shift will toggle the
-selection of the widgets instead.
-
-You cannot pick hidden widgets.  You also cannot choose some
-widgets if they are completely overlapped by later widgets.  Use
-the browser to select these widgets.
-
-The selected widgets are shown with a red "overlay"
-line around them.  You can move the widgets by dragging this
-box.  Or you can resize them by dragging the outer edges and
-corners.  Hold down the Alt key while dragging the mouse to
-defeat the snap-to-grid effect for fine positioning.
-
-If there is a tab box displayed you can change which child is
-visible by clicking on the file tabs.  The child you pick is
-selected.
-
-The arrow, tab, and shift+tab keys "navigate" the
-selection.  Left, right, tab, or shift+tab move to the next or
-previous widgets in the hierarchy.  Hit the right arrow enough
-and you will select every widget in the window.  Up/down widgets
-move to the previous/next widgets that overlap horizontally.  If
-the navigation does not seem to work you probably need to
-"Sort" the widgets.  This is important if you have
-input fields, as FLTK uses the same rules when using arrow keys
-to move between input fields.
-
-To "open" a widget, double click it.  To open
-several widgets select them and then type F1 or pick
-"Edit/Open" off the pop-up menu.
-
-Type Ctrl+o to temporarily toggle the overlay off without
-changing the selection, so you can see the widget borders.
-
-You can resize the window by using the window manager border
-controls.  FLTK will attempt to round the window size to the
-nearest multiple of the grid size and makes it big enough to
-contain all the widgets (it does this using illegal X methods,
-so it is possible it will barf with some window managers!). 
-Notice that the actual window in your program may not be
-resizable, and if it is, the effect on child widgets may be
-different.
-
-The panel for the window (which you get by double-clicking
-it) is almost identical to the panel for any other Fl_Widget. 
-There are three extra items:
-
-\section fluid_images Image Labels
-
-The \e contents of the image files in the \b Image
-and \b Inactive text fields are written to the <tt>.cxx</tt>
-file. If many widgets share the same image then only one copy is
-written. Since the image data is embedded in the generated
-source code, you need only distribute the C++ code and not the
-image files themselves.
-
-However, the \e filenames are stored in the <tt>.fl</tt>
-file so you will need the image files as well to read the
-<tt>.fl</tt> file. Filenames are relative to the location of the
-<tt>.fl</tt> file and not necessarily the current directory. We
-recommend you either put the images in the same directory as the
-<tt>.fl</tt> file, or use absolute path names.
-
-\par Notes for All Image Types
-
-\par
-FLUID runs using the default visual of your X server. This
-may be 8 bits, which will give you dithered images. You may get
-better results in your actual program by adding the code
-"Fl::visual(FL_RGB)" to your code right before the
-first window is displayed.
-
-\par
-All widgets with the same image on them share the same code
-and source X pixmap. Thus once you have put an image on a
-widget, it is nearly free to put the same image on many other
-widgets.
-
-\par
-If you edit an image at the same time you are using it in FLUID,
-the only way to convince FLUID to read the image file again is to
-remove the image from all widgets that are using it or re-load the
-<tt>.fl</tt> file.
-
-\par
-Don't rely on how FLTK crops images that are outside the
-widget, as this may change in future versions! The cropping of
-inside labels will probably be unchanged.
-
-\par
-To more accurately place images, make a new "box"
-widget and put the image in that as the label.
-
-\par XBM (X Bitmap) Files
-
-\par
-FLUID reads X bitmap files which use C source code to define
-a bitmap. Sometimes they are stored with the ".h" or
-".bm" extension rather than the standard
-".xbm" extension.
-
-\par
-FLUID writes code to construct an Fl_Bitmap image and use it
-to label the widget. The '1' bits in the bitmap are drawn using
-the label color of the widget. You can change this color in the
-FLUID widget attributes panel. The '0' bits are transparent.
-
-\par
-The program "bitmap" on the X distribution does an
-adequate job of editing bitmaps.
-
-\par XPM (X Pixmap) Files
-
-\par
-FLUID reads X pixmap files as used by the \p libxpm
-library. These files use C source code to define a pixmap. The
-filenames usually have the ".xpm" extension.
-
-\par
-FLUID writes code to construct an Fl_Pixmap image and use it
-to label the widget. The label color of the widget is ignored,
-even for 2-color images that could be a bitmap. XPM files can
-mark a single color as being transparent, and FLTK uses this
-information to generate a transparency mask for the image.
-
-\par
-We have not found any good editors for small iconic pictures.
-For pixmaps we have used
-<A href="http://home.worldonline.dk/~torsten/xpaint/index.html">XPaint</A>
-and the KDE icon editor.
-
-\par BMP Files
-
-\par
-FLUID reads Windows BMP image files which are often used in
-WIN32 applications for icons. FLUID converts BMP files into
-(modified) XPM format and uses a Fl_BMP_Image image to label the
-widget. Transparency is handled the same as for XPM files. All
-image data is uncompressed when written to the source file, so
-the code may be much bigger than the <tt>.bmp</tt> file.
-
-\par GIF Files
-
-\par
-FLUID reads GIF image files which are often used in HTML
-documents to make icons. FLUID converts GIF files into
-(modified) XPM format and uses a Fl_GIF_Image image to label the
-widget. Transparency is handled the same as for XPM files. All
-image data is uncompressed when written to the source file, so
-the code may be much bigger than the <tt>.gif</tt> file. Only
-the first image of an animated GIF file is used.
-
-\par JPEG Files
-
-\par
-If FLTK is compiled with JPEG support, FLUID can read JPEG
-image files which are often used for digital photos. FLUID uses
-a Fl_JPEG_Image image to label the widget, and writes
-uncompressed RGB or grayscale data to the source file.
-
-\par PNG (Portable Network Graphics) Files
-
-\par
-If FLTK is compiled with PNG support, FLUID can read PNG
-image files which are often used in HTML documents. FLUID uses a
-Fl_PNG_Image image to label the widget, and writes uncompressed
-RGB or grayscale data to the source file. PNG images can provide
-a full alpha channel for partial transparency, and FLTK supports
-this as best as possible on each platform.
-
-\section fluid_i18n Internationalization with FLUID
-
-FLUID supports internationalization (I18N for short) of label
-strings used by widgets. The preferences window
-(<tt>Ctrl+p</tt>) provides access to the I18N options.
-
-\subsection fluid_i18n_methods I18N Methods
-
-FLUID supports three methods of I18N: use none, use GNU
-gettext, and use POSIX catgets. The "use none" method is the
-default and just passes the label strings as-is to the widget
-constructors.
-
-The "GNU gettext" method uses GNU gettext (or a similar
-text-based I18N library) to retrieve a localized string before
-calling the widget constructor.
-
-The "POSIX catgets" method uses the POSIX catgets function to
-retrieve a numbered message from a message catalog before
-calling the widget constructor.
-
-\subsection fluid_gettext_i18n Using GNU gettext for I18N
-
-FLUID's code support for GNU gettext is limited to calling a
-function or macro to retrieve the localized label; you still
-need to call \p setlocale() and \p textdomain() or
-\p bindtextdomain() to select the appropriate language and
-message file.
-
-To use GNU gettext for I18N, open the preferences window and
-choose "GNU gettext" from the \b Use: chooser. Two new input
-fields will then appear to control the include file and
-function/macro name to use when retrieving the localized label
-strings.
-
- \image html fluid-gettext.png "Figure 9-11: Internationalization using GNU gettext"
- \image latex fluid-gettext.png "Internationalization using GNU gettext" width=10cm
-
-The \b \#include
-field controls the header file to include for
-I18N; by default this is \b <libintl.h>, the
-standard I18N file for GNU gettext.
-
-The \b Function: field controls the function (or macro) that
-will retrieve the localized message; by default the
-\p gettext function will be called.
-
-\subsection fluid_catgets_i18n Using POSIX catgets for I18N
-
-FLUID's code support for POSIX catgets allows you to use a
-global message file for all interfaces or a file specific to
-each <tt>.fl</tt> file; you still need to call
-\p setlocale() to select the appropriate language.
-
-To use POSIX catgets for I18N, open the preferences window
-and choose "POSIX catgets" from the \b Use: chooser. Three new
-input fields will then appear to control the include file,
-catalog file, and set number for retrieving the localized label
-strings.
-
- \image html fluid-catgets.png "Figure 9-12: Internationalization using POSIX catgets"
- \image latex fluid-catgets.png "Internationalization using POSIX catgets" width=10cm
-
-The \b \#include
-field controls the header file to include for
-I18N; by default this is \b <nl_types.h>, the
-standard I18N file for POSIX catgets.
-
-The \b File: field controls the name of the catalog file
-variable to use when retrieving localized messages; by default
-the file field is empty which forces a local (static) catalog
-file to be used for all of the windows defined in your
-<tt>.fl</tt> file.
-
-The \b Set: field controls the set number in the catalog file.
-The default set is 1 and rarely needs to be changed.
-
-\section fluid_limitations Known limitations
-
-Declaration Blocks can be used to temporarily block out already
-designed code using <tt>\#if 0</tt> and <tt>\#endif</tt>
-type construction. This will effectively avoid compilation of
-blocks of code. However, static code and data generated by this
-segment (menu items, images, include statements, etc.) will still
-be generated and likely cause compile-time warnings.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="opengl.html">
-    [Prev]
-    Using OpenGL
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="advanced.html">
-    Advanced FLTK
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/fluid.man
+++ /dev/null
@@ -1,32 +1,0 @@
-.TH fluid 1 "Fast Light Tool Kit" "6 January 2002"
-.SH NAME
-fluid \- the fast light user-interface designer
-.sp
-.SH SYNOPSIS
-fluid [ \-c [ \-o
-.I code-filename
-\-h
-.I header-filename
-] ] [
-.I filename.fl
-] 
-.fi
-.SH DESCRIPTION
-\fIfluid\fR is an interactive GUI designer for FLTK. When run
-with no arguments or with a filename, \fIfluid\fR will display
-the GUI hierarchy and any windows defined in the file.
-Functions, classes, windows, and GUI components can be
-manipulated as needed.
-.LP
-When used with the \fI\-c\fR option, \fIfluid\fR will create the
-necessary C++ header and code files in the current directory. 
-You can override the default extensions, filenames, and
-directories using the \fI\-o\fR and \fI\-h\fR options.
-.SH SEE ALSO
-fltk\-config(1), fltk(3)
-.br
-FLTK Programming Manual, Chapter 9
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHORS
-Bill Spitzak and others.
binary files a/DoConfig/fltk/documentation/src/fluid1.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid2.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid3-cxx.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid3-gui.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid3-style.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid4.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid_widget_cxx.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid_widget_gui.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/fluid_widget_style.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/forms.dox
+++ /dev/null
@@ -1,273 +1,0 @@
-/**
- <!-- Warning: \p .fd  does not work but <tt>.fd</tt>  does -->
-
- \page	forms	Forms Compatibility
-
-This appendix describes the Forms compatibility included with FLTK.
-
-<center>
-<table border="1" width="90%" bgcolor="#cccccc">
-<tr>
-<th align="center">
-Warning: The Forms compatility is deprecated and no longer maintained in FLTK1,
-and is likely to be removed completely after the next official release.
-</th>
-</tr>
-</table>
-</center>
-
-\section forms_importing Importing Forms Layout Files
-
-\ref fluid "FLUID"
-can read the <tt>.fd</tt> files put out by
-all versions of Forms and XForms fdesign.  However, it will mangle them
-a bit, but it prints a warning message about anything it does not
-understand.  FLUID cannot write fdesign files, so you should save to a
-new name so you don't write over the old one.
-
-You will need to edit your main code considerably to get it to link
-with the output from FLUID.  If you are not interested in this you may
-have more immediate luck with the forms compatibility header, <FL/forms.H>. 
-
-\section forms_using Using the Compatibility Header File
-
-You should be able to compile existing Forms or XForms source code by
-changing the include directory switch to your compiler so that the
-\c forms.h file supplied with FLTK is included.
-The \c forms.h file simply pulls in <FL/forms.H> so you don't need to
-change your source code.
-Take a look at <FL/forms.H> to see how it works, but the basic trick
-is lots of inline functions. Most of the XForms demo programs work
-without changes.
-
-You will also have to compile your Forms or XForms program using a
-C++ compiler.  The FLTK library does not provide C bindings or header
-files. 
-
-Although FLTK was designed to be compatible with the GL Forms
-library (version 0.3 or so), XForms has bloated severely and its
-interface is X-specific.  Therefore, XForms compatibility is no longer
-a goal of FLTK.  Compatibility was limited to things that were free, or
-that would add code that would not be linked in if the feature is
-unused, or that was not X-specific. 
-
-To use any new features of FLTK, you should rewrite your code to not
-use the inline functions and instead use "pure" FLTK.  This will make
-it a lot cleaner and make it easier to figure out how to call the FLTK
-functions.  Unfortunately this conversion is harder than expected and
-even Digital Domain's inhouse code still uses <tt>forms.H</tt> a lot. 
-
-\section forms_problems Problems You Will Encounter
-
-Many parts of XForms use X-specific structures like \c XEvent
-in their interface.  I did not emulate these!  Unfortunately these
-features (such as the "canvas" widget) are needed by most large
-programs.  You will need to rewrite these to use FLTK subclasses. 
-
-Fl_Free widgets emulate the \e old Forms "free" widget.
-It may be useful for porting programs that change the \c handle()
-function on widgets, but you will still need to rewrite things. 
-
-Fl_Timer widgets are
-provided to emulate the XForms timer.  These work, but are quite
-inefficient and inaccurate compared to using Fl::add_timeout().
-
-<I>All instance variables are hidden.</I> If you directly refer to
-the \p x, \p y, \p w, \p h, \p label, or other fields of your Forms
-widgets you will have to add empty parenthesis after each reference.
-The easiest way to do this is to globally replace <tt>"->x"</tt>
-with <tt>"->x()"</tt>, etc.
-Replace <tt>"boxtype"</tt> with <tt>"box()"</tt>. 
-
-<tt>const char *</tt> arguments to most FLTK methods are simply
-stored, while Forms would \c strdup() the passed string.  This is
-most noticeable with the label of widgets.  Your program must always
-pass static data such as a string constant or malloc'd buffer to
-\c label().  If you are using labels to display program output you
-may want to try the Fl_Output widget. 
-
-The default fonts and sizes are matched to the older GL version of
-Forms, so all labels will draw somewhat larger than an XForms program
-does. 
-
-fdesign outputs a setting of a "fdui" instance variable to the main
-window.  I did not emulate this because I wanted all instance variables
-to be hidden.  You can store the same information in the \c user_data()
-field of a window.  To do this,  search through the fdesign output for all
-occurrences of <tt>"->fdui"</tt> and edit to use <tt>"->user_data()"</tt>
-instead.  This will require casts and is not trivial. 
-
-The prototype for the functions passed to \c fl_add_timeout()
-and \c fl_set_idle_callback() callback are different. 
-
-<B>All the following XForms calls are missing:</B>
-
-\li \c FL_REVISION, \c fl_library_version()
-\li \c FL_RETURN_DBLCLICK (use Fl::event_clicks()) 
-\li \c fl_add_signal_callback()
-\li \c fl_set_form_atactivate() \c fl_set_form_atdeactivate()
-\li \c fl_set_form_property()
-\li \c fl_set_app_mainform(), \c fl_get_app_mainform()
-\li \c fl_set_form_minsize(), \c fl_set_form_maxsize()
-\li \c fl_set_form_event_cmask(), \c fl_get_form_event_cmask()
-\li \c fl_set_form_dblbuffer(), \c fl_set_object_dblbuffer()
-    (use an Fl_Double_Window instead) 
-\li \c fl_adjust_form_size()
-\li \c fl_register_raw_callback()
-\li \c fl_set_object_bw(), \c fl_set_border_width()
-\li \c fl_set_object_resize(), \c fl_set_object_gravity()
-\li \c fl_set_object_shortcutkey()
-\li \c fl_set_object_automatic()
-\li \c fl_get_object_bbox() (maybe FLTK should do this) 
-\li \c fl_set_object_prehandler(), \c fl_set_object_posthandler()
-\li \c fl_enumerate_fonts()
-\li Most drawing functions 
-\li \c fl_set_coordunit() (FLTK uses pixels all the time) 
-\li \c fl_ringbell()
-\li \c fl_gettime()
-\li \c fl_win*() (all these functions) 
-\li \c fl_initialize(argc,argv,x,y,z) ignores last 3 arguments 
-\li \c fl_read_bitmapfile(), \c fl_read_pixmapfile()
-\li \c fl_addto_browser_chars()
-\li \c FL_MENU_BUTTON just draws normally 
-\li \c fl_set_bitmapbutton_file(), \c fl_set_pixmapbutton_file()
-\li \c FL_CANVAS objects 
-\li \c FL_DIGITAL_CLOCK (comes out analog) 
-\li \c fl_create_bitmap_cursor(), \c fl_set_cursor_color()
-\li \c fl_set_dial_angles()
-\li \c fl_show_oneliner()
-\li \c fl_set_choice_shortcut(a,b,c) 
-\li command log 
-\li Only some of file selector is emulated 
-\li \c FL_DATE_INPUT
-\li \c fl_pup*() (all these functions) 
-\li textbox object (should be easy but I had no sample programs) 
-\li xyplot object 
-
-\section forms_notes Additional Notes
-
-These notes were written for porting programs written with the older
-IRISGL version of Forms.  Most of these problems are the same ones
-encountered when going from old Forms to XForms:
-
-\par Does Not Run In Background
-
-The IRISGL library always forked when you created the first window,
-unless "foreground()" was called.  FLTK acts like "foreground()" is
-called all the time.  If you really want the fork behavior do "if
-(fork()) exit(0)" right at the start of your program.
-
-\par You Cannot Use IRISGL Windows or fl_queue
-
-If a Forms (not XForms) program if you wanted your own window for
-displaying things you would create a IRISGL window and draw in it,
-periodically calling Forms to check if the user hit buttons on the
-panels.  If the user did things to the IRISGL window, you would find
-this out by having the value FL_EVENT returned from the call to Forms.
-
-None of this works with FLTK.  Nor will it compile, the necessary
-calls are not in the interface. 
-
-You have to make a subclass of Fl_Gl_Window and write a \c draw() method
-and \c handle() method.  This may require anywhere from a trivial to a
-major rewrite. 
-
-If you draw into the overlay planes you will have to also write a
-\c draw_overlay() method and call \c redraw_overlay() on the
-OpenGL window. 
-
-One easy way to hack your program so it works is to make the \c draw()
-and \c handle() methods on your window set some static variables, storing
-what event happened.  Then in the main loop of your program, call
-Fl::wait() and then check these variables, acting on them as though
-they are events read from \c fl_queue.
-
-\par You Must Use OpenGL to Draw Everything
-
-The file <FL/gl.h> defines replacements for a lot of IRISGL
-calls, translating them to OpenGL.  There are much better translators
-available that you might want to investigate. 
-
-\par You Cannot Make Forms Subclasses
-
-Programs that call \c fl_make_object or directly setting the
-handle routine will not compile.  You have to rewrite them to use a
-subclass of Fl_Widget.  It is important to note that the \c handle()
-method is not exactly the same as the \c handle() function of Forms.
-Where a Forms \c handle() returned non-zero, your \c handle() must
-call \c do_callback(). And your \c handle() must return non-zero
-if it "understood" the event.
-
-An attempt has been made to emulate the "free" widget.  This appears
-to work quite well.  It may be quicker to modify your subclass into a
-"free" widget, since the "handle" functions match. 
-
-If your subclass draws into the overlay you are in trouble and will
-have to rewrite things a lot. 
-
-\par You Cannot Use <device.h>
-
-If you have written your own "free" widgets you will probably get a
-lot of errors about "getvaluator".  You should substitute:
-
-<CENTER>
-<TABLE border=1 WIDTH=90% summary="Mapping of Forms valuators to FLTK.">
-<TR><TH align=center>Forms</TH><TH align=center>FLTK</TH></TR>
-<TR><TD>MOUSE_X</TD><TD>Fl::event_x_root()</TD></TR>
-<TR><TD>MOUSE_Y</TD><TD>Fl::event_y_root()</TD></TR>
-<TR><TD>LEFTSHIFTKEY,RIGHTSHIFTKEY</TD><TD>Fl::event_shift()</TD></TR>
-<TR><TD>CAPSLOCKKEY</TD><TD>Fl::event_capslock()</TD></TR>
-<TR><TD>LEFTCTRLKEY,RIGHTCTRLKEY</TD><TD>Fl::event_ctrl()</TD></TR>
-<TR><TD>LEFTALTKEY,RIGHTALTKEY</TD><TD>Fl::event_alt()</TD></TR>
-<TR><TD>MOUSE1,RIGHTMOUSE</TD><TD>Fl::event_state()</TD></TR>
-<TR><TD>MOUSE2,MIDDLEMOUSE</TD><TD>Fl::event_state()</TD></TR>
-<TR><TD>MOUSE3,LEFTMOUSE</TD><TD>Fl::event_state()</TD></TR>
-</TABLE>
-</CENTER>
-
-Anything else in \c getvaluator and you are on your own...
-
-\par Font Numbers Are Different
-
-The "style" numbers have been changed because I wanted to insert
-bold-italic versions of the normal fonts.  If you use Times, Courier,
-or Bookman to display any text you will get a different font out of
-FLTK.  If you are really desperate to fix this use the following code:
-
-\code
-fl_font_name(3,"*courier-medium-r-no*");
-fl_font_name(4,"*courier-bold-r-no*");
-fl_font_name(5,"*courier-medium-o-no*");
-fl_font_name(6,"*times-medium-r-no*");
-fl_font_name(7,"*times-bold-r-no*");
-fl_font_name(8,"*times-medium-i-no*");
-fl_font_name(9,"*bookman-light-r-no*");
-fl_font_name(10,"*bookman-demi-r-no*");
-fl_font_name(11,"*bookman-light-i-no*");
-\endcode
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="glut.html">
-    [Prev]
-    GLUT Compatibility
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="osissues.html">
-    Operating System Issues
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/glut.dox
+++ /dev/null
@@ -1,254 +1,0 @@
-/**
-
- \page	glut	GLUT Compatibility
-
-This appendix describes the GLUT compatibility header file supplied with
-FLTK. FLTK's GLUT compatibility is based on the original GLUT 3.7 and
-the follow-on FreeGLUT 2.4.0 libraries.
-
-\section glut_using Using the GLUT Compatibility Header File
-
-You should be able to compile existing GLUT source code by including
-\c <FL/glut.H> instead of \c <GL/glut.h>.  This can be
-done by editing the source, by changing the \c -I switches to
-the compiler, or by providing a symbolic link from \c GL/glut.h
-to \c FL/glut.H.
-
-<i>All files calling GLUT procedures must be compiled with C++</i>. You
-may have to alter them slightly to get them to compile without warnings,
-and you may have to rename them to get make to use the C++ compiler.
-
-You must link with the FLTK library. Most of \c FL/glut.H
-is inline functions.  You should take a look at it (and maybe at
-\c test/glpuzzle.cxx in the FLTK source) if you are having trouble
-porting your GLUT program.
-
-This has been tested with most of the demo programs that come with
-the GLUT and FreeGLUT distributions.
-
-\section glut_known_problems Known Problems
-
-The following functions and/or arguments to functions are missing,
-and you will have to replace them or comment them out for your code
-to compile:
-
-\li \p glutGet(GLUT_ELAPSED_TIME)
-\li \p glutGet(GLUT_SCREEN_HEIGHT_MM)
-\li \p glutGet(GLUT_SCREEN_WIDTH_MM)
-\li \p glutGet(GLUT_WINDOW_NUM_CHILDREN)
-\li \p glutInitDisplayMode(GLUT_LUMINANCE)
-\li \p glutKeyboardUpFunc(void(*callback)(unsigned char key, int x, int y))
-\li \p glutLayerGet(GLUT_HAS_OVERLAY)
-\li \p glutLayerGet(GLUT_LAYER_IN_USE)
-\li \p glutPushWindow()
-\li \p glutSetColor(), \p glutGetColor(), \p glutCopyColormap()
-\li \p glutVideoResize() missing. 
-\li \p glutWarpPointer()
-\li \p glutWindowStatusFunc()
-\li Spaceball, buttonbox, dials, and tablet functions
-
-Most of the symbols/enumerations have different values than GLUT uses.
-This will break code that relies on the actual values. The only
-symbols guaranteed to have the same values are true/false pairs like
-GLUT_DOWN and GLUT_UP, mouse buttons
-GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON, and
-GLUT_KEY_F1 thru GLUT_KEY_F12.
-
-The strings passed as menu labels are not copied.
-
-\p glutPostRedisplay() does not work if called from inside a
-display function.  You must use \p glutIdleFunc() if you want
-your display to update continuously.
-
-\p glutSwapBuffers() does not work from inside a display
-function.  This is on purpose, because FLTK swaps the buffers for you.
-
-\p glutUseLayer() does not work well, and should only be used
-to initialize transformations inside a resize callback.  You should
-redraw overlays by using \p glutOverlayDisplayFunc().
-
-Overlays are cleared before the overlay display function is called.
-\p glutLayerGet(GLUT_OVERLAY_DAMAGED) always returns true for
-compatibility with some GLUT overlay programs.  You must rewrite your
-code so that \p gl_color() is used to choose colors in an
-overlay, or you will get random overlay colors.
-
-\p glutSetCursor(GLUT_CURSOR_FULL_CROSSHAIR) just results in a
-small crosshair.
-
-The fonts used by \p glutBitmapCharacter() and \p glutBitmapWidth()
-may be different.
-
-\p glutInit(argc,argv) will consume different switches than
-GLUT does.  It accepts the switches recognized by
-Fl::args(),
-and will accept any abbreviation of these
-switches (such as "-di" for "-display").
-
-\section glut_mixing Mixing GLUT and FLTK Code
-
-You can make your GLUT window a child of a Fl_Window with the
-following scheme.  The biggest trick is that GLUT insists on
-a call to \p show() the window at the point it is created, which means the
-Fl_Window parent window must already be shown.
-
-\li Don't call \p glutInit().
-\li Create your Fl_Window, and any FLTK widgets.  Leave a
-    blank area in the window for your GLUT window. 
-\li \p show() the Fl_Window.  Perhaps call \p show(argc,argv).
-\li Call <tt>window->begin()</tt> so that the GLUT window will  be
-    automatically added to it. 
-\li Use \p glutInitWindowSize() and \p glutInitWindowPosition()
-    to set the location in the  parent window to put the GLUT window. 
-\li Put your GLUT code next.  It probably does not need many changes.
-    Call <tt>window->end()</tt> immediately after the
-    \p glutCreateWindow()!
-\li You can call either \p glutMainLoop(), Fl::run(),
-    or loop calling Fl::wait() to run  the program. 
-
-
-\section glut_Fl_Glut_Window class Fl_Glut_Window
-
-\subsection glut_class_hierarchy Class Hierarchy
-
-\code
-Fl_Gl_Window
-   |
-   +----Fl_Glut_Window
-\endcode
-
-\subsection glut_include_files Include Files
-
-\code
-#include <FL/glut.H>
-\endcode
-
-\subsection glut_description Description
-
-Each GLUT window is an instance of this class.  You may find it useful
-to manipulate instances directly rather than use GLUT window id's.
-These may be created without opening the display, and thus can fit
-better into FLTK's method of creating windows.
-
-The current GLUT window is available in the global variable
-\p glut_window.
-
-<tt>new %Fl_Glut_Window(...)</tt> is the same as
-\p glutCreateWindow() except it does not \p show() the window
-or make the window current.
-
-<tt>window->make_current()</tt> is the same as \p glutSetWindow(number).
-If the window has not had \p show() called on it yet, some functions
-that assume an OpenGL context will not work. 
-If you do \p show() the window, call \p make_current()
-again to set the context.
-
-<tt>~Fl_Glut_Window()</tt> is the same as \p glutDestroyWindow().
-
-\subsection glut_members Members
-
-The Fl_Glut_Window class contains several public members that can
-be altered directly:
-
-<CENTER><TABLE WIDTH="80%" BORDER="1" ALT="Fl_Glut_Window public members.">
-<TR>
-	<TH>member</TH>
-	<TH>description</TH>
-</TR>
-<TR>
-	<TD>display</TD>
-	<TD>A pointer to the function to call to draw the normal planes.</TD>
-</TR>
-<TR>
-	<TD>entry</TD>
-	<TD>A pointer to the function to call when the mouse moves into
-	or out of the window.</TD>
-</TR>
-<TR>
-	<TD>keyboard</TD>
-	<TD>A pointer to the function to call when a regular key is pressed.</TD>
-</TR>
-<TR>
-	<TD>menu[3]</TD>
-	<TD>The menu to post when one of the mouse buttons is pressed.</TD>
-</TR>
-<TR>
-	<TD>mouse</TD>
-	<TD>A pointer to the function to call when a button is pressed or
-	released.</TD>
-</TR>
-<TR>
-	<TD>motion</TD>
-	<TD>A pointer to the function to call when the mouse is moved with
-	a button down.</TD>
-</TR>
-<TR>
-	<TD>overlaydisplay</TD>
-	<TD>A pointer to the function to call to draw the overlay planes.</TD>
-</TR>
-<TR>
-	<TD>passivemotion</TD>
-	<TD>A pointer to the function to call when the mouse is moved with
-	no buttons down.</TD>
-</TR>
-<TR>
-	<TD>reshape</TD>
-	<TD>A pointer to the function to call when the window is resized.</TD>
-</TR>
-<TR>
-	<TD>special</TD>
-	<TD>A pointer to the function to call when a special key is pressed.</TD>
-</TR>
-<TR>
-	<TD>visibility</TD>
-	<TD>A pointer to the function to call when the window is iconified
-	or restored (made visible.)</TD>
-</TR>
-</TABLE></CENTER>
-
-\subsection glut_methods Methods
-
-Fl_Glut_Window::Fl_Glut_Window(int x, int y, int w, int h, const char *title = 0) <br>
-Fl_Glut_Window::Fl_Glut_Window(int w, int h, const char *title = 0)
-
-\par
-The first constructor takes 4 int arguments to create the window with
-a preset position and size.  The second constructor with 2 arguments
-will create the window with a preset size, but the window manager will
-choose the position according to its own whims.
-
-virtual Fl_Glut_Window::~Fl_Glut_Window()
-
-\par
-Destroys the GLUT window.
-
-void Fl_Glut_Window::make_current()
-
-\par
-Switches all drawing functions to the GLUT window.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="enumerations.html">
-    [Prev]
-    FLTK Enumerations
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="forms.html">
-    Forms Compatibility
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/hello_cxx.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/html_footer
+++ /dev/null
@@ -1,24 +1,0 @@
-<!--BEGIN GENERATE_TREEVIEW-->
-    <li class="footer">
-      <!-- Generated for $projectname by Doxygen -->
-      &copy; 1998-2016 by Bill Spitzak and others. &nbsp;&nbsp;&nbsp;
-      <a href="http://www.fltk.org"><img src="tiny.png" align="bottom" alt="FLTK"></a>
-     </li>
-   </ul>
- </div>
-<!--END GENERATE_TREEVIEW-->
-<!--BEGIN !GENERATE_TREEVIEW-->
-<hr class="footer"/><address class="footer"><small>
-    <!-- Generated for $projectname by Doxygen -->
-    &copy; 1998-2016 by Bill Spitzak and others. &nbsp;&nbsp;&nbsp;
-    <a href="http://www.fltk.org"><img src="tiny.png" align="bottom" alt="FLTK"></a>
-</small></address>
-<hr class="footer"/><address class="footer"><small>
-  <div align="center">
-    Permission is granted to reproduce this manual or any portion for any purpose,
-    provided this copyright and permission notice are preserved.
-  </div>
-</small></address>
-<!--END !GENERATE_TREEVIEW-->
-</body>
-</html>
--- a/DoConfig/fltk/documentation/src/index.dox
+++ /dev/null
@@ -1,119 +1,0 @@
-/**
-
-\mainpage FLTK Programming Manual
-<TABLE BGCOLOR="#9f9f9f" CELLPADDING="8" CELLSPACING="0" SUMMARY="TITLE BAR" WIDTH="100%" BORDER="0">
-<TR>
-  <TD><CENTER>
-    \image html FL200.png
-    \image latex FL200.png "" width=5cm
-  </CENTER></TD>
-  <TD><CENTER>
-    <B>FLTK 1.3.5 Programming Manual</B>
-
-    Revision 9 by F.&nbsp;Costantini, D.&nbsp;Gibson, M.&nbsp;Melcher,
-    A.&nbsp;Schlosser, B.&nbsp;Spitzak and M.&nbsp;Sweet.
-
-    Copyright 1998-2016 by Bill Spitzak and others.
-  </CENTER></TD>
-</TR>
-</TABLE>
-<TABLE BGCOLOR="#9f9f9f" CELLPADDING="8" CELLSPACING="0" SUMMARY="TITLE BAR" WIDTH="100%" BORDER="0">
-<TR>
-  <TD>
-    This software and manual are provided under the terms of the GNU
-    Library General Public License. Permission is granted to reproduce
-    this manual or any portion for any purpose, provided this copyright
-    and permission notice are preserved.
-  </TD>
-</TR>
-</TABLE>
-<TABLE BGCOLOR="#9f9fef" CELLPADDING="8" CELLSPACING="0" SUMMARY="Table of Contents" WIDTH="100%" BORDER="0">
-<TR>
-  <TD ALIGN="LEFT" VALIGN="TOP">
-
-    \subpage preface
-
-    \subpage intro
-
-    \subpage basics
-
-    \subpage common
-	- \ref common_colors
-	- \ref common_boxtypes
-	- \ref common_labels
-	- \ref drawing_images
-
-    \subpage editor
-
-    \subpage drawing
-
-    \subpage events
-	- \ref events_event_xxx
-	- \ref events_propagation
-
-    \subpage subclassing
-
-    \subpage opengl
-
-    \subpage fluid
-	- \ref fluid_widget_attributes
-	- \ref fluid_selecting_moving
-	- \ref fluid_images
-
-  </TD>
-  <TD ALIGN="LEFT" VALIGN="TOP">
-
-    \subpage advanced
-
-    \subpage unicode
-
-    &nbsp;
-
-    <b>Appendices:</b>
-	- \subpage enumerations
-
-	-  \subpage glut
-		- \ref glut_Fl_Glut_Window
-		<!-- - Fl_Glut_Window (not yet commented ?) -->
-
-	- \subpage forms
-
-	- \subpage osissues
-
-	- \subpage migration_1_1
-
-	- \subpage migration_1_3
-
-	- \subpage development
-
-	- \subpage license
-
-	- \subpage examples
-
-	- \subpage FAQ
-
-  </TD>
-</TR>
-</TABLE>
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    &nbsp;
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="preface.html">
-    Preface
-    [Next]</a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/input_choice.jpg /dev/null differ
--- a/DoConfig/fltk/documentation/src/intro.dox
+++ /dev/null
@@ -1,403 +1,0 @@
-/**
-
- \page intro Introduction to FLTK
-
-The Fast Light Tool Kit ("FLTK", pronounced
-"fulltick") is a cross-platform C++ GUI toolkit for
-UNIX&reg;/Linux&reg; (X11), Microsoft&reg; Windows&reg;, and
-Apple&reg; OS X&reg;. FLTK provides modern GUI functionality without the
-bloat and supports 3D graphics via OpenGL&reg; and its built-in
-GLUT emulation. It was originally developed by Mr. Bill Spitzak
-and is currently maintained by a small group of developers
-across the world with a central repository in the US.
-
-\section intro_history History of FLTK
-
-It has always been Bill's belief that the GUI API of all
-modern  systems is much too high level. Toolkits (even FLTK) are
-\e not what should be provided and documented as part of an
-operating system. The  system only has to provide arbitrary
-shaped but featureless windows, a  powerful set of graphics
-drawing calls, and a simple \e unalterable method of
-delivering events to the owners of the windows. NeXT (if you
-ignored NextStep) provided this, but they chose to hide it and
-tried to push their own baroque toolkit instead.
-
-Many of the ideas in FLTK were developed on a NeXT (but
-\e not using NextStep) in 1987 in a C toolkit Bill called
-"views". Here he came up with passing events downward
-in the tree and having the handle routine return a value
-indicating whether it used the event, and the table-driven menus. In
-general he was trying to prove that complex UI ideas could be
-entirely implemented in a user space toolkit, with no knowledge
-or support by the system.
-
-After going to film school for a few years, Bill worked at
-Sun Microsystems on the (doomed) NeWS project. Here he found an
-even better and cleaner windowing system, and he reimplemented
-"views" atop that. NeWS did have an unnecessarily
-complex method of delivering events which hurt it. But the
-designers did admit that perhaps the user could write just as
-good of a button as they could, and officially exposed the lower
-level interface.
-
-With the death of NeWS Bill realized that he would have to
-live with X. The biggest problem with X is the "window
-manager", which means that the toolkit can no longer
-control the window borders or drag the window around.
-
-At Digital Domain Bill discovered another toolkit,
-"Forms". Forms was similar to his work, but provided
-many more widgets, since it was used in many real applications,
-rather than as theoretical work. He decided to use Forms, except
-he integrated his table-driven menus into it. Several very large
-programs were created using this version of Forms.
-
-The need to switch to OpenGL and GLX, portability, and a
-desire to use C++ subclassing required a rewrite of Forms.
-This produced the first version of FLTK. The conversion to C++
-required so many changes it made it impossible to recompile any
-Forms objects. Since it was incompatible anyway, Bill decided
-to incorporate his older ideas as much as possible by
-simplifying the lower level interface and the event passing
-mechanism.
-
-Bill received permission to release it for free on the
-Internet, with the GNU general public license. Response from
-Internet users indicated that the Linux market dwarfed the SGI
-and high-speed GL market, so he rewrote it to use X for all
-drawing, greatly speeding it up on these machines. That is the
-version you have now.
-
-Digital Domain has since withdrawn support for FLTK. While
-Bill is no longer able to actively develop it, he still
-contributes to FLTK in his free time and is a part of the FLTK
-development team.
-
-\section intro_features Features
-
-FLTK was designed to be statically linked. This was done by
-splitting it into many small objects and designing it so that
-functions that are not used do not have pointers to them in the
-parts that are used, and thus do not get linked in. This allows
-you to make an easy-to-install program or to modify FLTK to
-the exact requirements of your application without worrying
-about bloat. FLTK works fine as a shared library, though, and
-is now included with several Linux distributions.
-
-Here are some of the core features unique to FLTK:
-
-\li sizeof(Fl_Widget) == 64 to 92.
-
-\li The "core" (the "hello" program compiled & linked with a static FLTK
-    library using gcc on a 486 and then stripped) is 114K.
-
-\li The FLUID program (which includes every widget) is 538k.
-
-\li Written directly atop core libraries (Xlib, WIN32 or Cocoa) for
-    maximum speed, and carefully optimized for code size and performance.
-
-\li Precise low-level compatibility between the X11, WIN32 and MacOS
-    versions - only about 10% of the code is different.
-
-\li Interactive user interface builder program. Output is human-readable
-    and editable C++ source code.
-
-\li Support for overlay hardware, with emulation if none is available.
-
-\li Very small & fast portable 2-D drawing library to hide Xlib, WIN32,
-    or QuickDraw.
-
-\li OpenGL/Mesa drawing area widget.
-
-\li Support for OpenGL overlay hardware on both X11 and WIN32, with
-    emulation if none is available.
-
-\li Text widgets with cut & paste, undo, and support
-   for Unicode text and international input methods.
-
-\li Compatibility header file for the GLUT library.
-
-\li Compatibility header file for the XForms library.
-
-\section intro_licensing Licensing
-
-FLTK comes with complete free source code.
-FLTK is available under the terms of the
-\ref license "GNU Library General Public License"
-with exceptions that allow for static linking.
-Contrary to popular belief, it can be used in
-commercial software - even Bill Gates could use it!
-
-\section intro_what What Does "FLTK" Mean?
-
-FLTK was originally designed to be compatible with the Forms
-Library written for SGI machines. In that library all the
-functions and structures started with "fl_". This
-naming was extended to all new methods and widgets in the C++
-library, and this prefix was taken as the name of the library.
-It is almost impossible to search for "FL" on the
-Internet, due to the fact that it is also the abbreviation for
-Florida. After much debating and searching for a new name for
-the toolkit, which was already in use by several people, Bill
-came up with "FLTK", including a bogus excuse that it
-stands for "The Fast Light Toolkit".
-
-\section intro_unix Building and Installing FLTK Under UNIX and Apple OS X
-
-In most cases you can just type "make". This will
-run configure with the default of no options and then compile
-everything.
-
-For OS X, Xcode 3 project files can be found in the 'ide' directory.
-
-FLTK uses GNU autoconf to configure itself for your UNIX
-platform. The main things that the configure script will look
-for are the X11 and OpenGL (or Mesa) header and library files.
-If these cannot be found in the standard include/library
-locations you'll need to define the \p CFLAGS,
-\p CXXFLAGS, and \p LDFLAGS environment variables.
-For the Bourne and Korn shells you'd use:
-
-\code
-CFLAGS=-Iincludedir; export CFLAGS
-CXXFLAGS=-Iincludedir; export CXXFLAGS
-LDFLAGS=-Llibdir; export LDFLAGS
-\endcode
-
-For C shell and tcsh, use:
-
-\code
-setenv CFLAGS "-Iincludedir"
-setenv CXXFLAGS "-Iincludedir"
-setenv LDFLAGS "-Llibdir"
-\endcode
-
-By default configure will look for a C++ compiler named
-\p CC, \p c++, \p g++, or \p gcc in that
-order. To use another compiler you need to set the \p CXX
-environment variable:
-
-\code
-CXX=xlC; export CXX
-setenv CXX "xlC"
-\endcode
-
-The \p CC environment variable can also be used to
-override the default C compiler (\p cc or \p gcc),
-which is used for a few FLTK source files.
-
-You can run configure yourself to get the exact setup you need.
-Type  "./configure <options>", where options are:
-
-\par --enable-cygwin
-Enable the Cygwin libraries under WIN32
-
-\par --enable-debug
-Enable debugging code & symbols
-
-\par --disable-gl
-Disable OpenGL support
-
-\par --enable-shared
-Enable generation of shared libraries
-
-\par --enable-threads
-Enable multithreading support
-
-\par --enable-xdbe
-Enable the X double-buffer extension
-
-\par --enable-xft
-Enable the Xft library for anti-aliased fonts under X11
-
-\par --enable-x11
-When targeting cygwin, build with X11 GUI instead of windows GDI
-
-\par --enable-cp936
-Under X11, enable use of the GB2312 locale
-
-\par --bindir=/path
-Set the location for executables [default = $prefix/bin]
-
-\par --datadir=/path
-Set the location for data files. [default = $prefix/share]
-
-\par --libdir=/path
-Set the location for libraries [default = $prefix/lib]
-
-\par --includedir=/path
-Set the location for include files. [default = $prefix/include]
-
-\par --mandir=/path
-Set the location for man pages. [default = $prefix/man]
-
-\par --prefix=/dir
-Set the directory prefix for files [default = /usr/local]
-
-When the configure script is done you can just run the
-"make" command. This will build the library, FLUID
-tool, and all of the test programs.
-
-To install the library, become root and type "make install".
-This will copy the "fluid" executable to "bindir", the header
-files to "includedir", and the library files to "libdir".
-
-\section intro_windows Building FLTK Under Microsoft Windows
-
-NOTE: This documentation section is currently under review.
-More up-to-date information for this release may be available
-in the file "README.MSWindows.txt" and you should read
-that file to determine if there are changes that may be
-applicable to your build environment.
-
-FLTK 1.3 is officially supported on Windows (2000,) 2003,
-XP, and later.  Older Windows versions prior to Windows 2000
-are not officially supported, but may still work.
-The main reason is that the OS version needs to support UTF-8.
-FLTK 1.3 is known to work on recent versions of Windows such as
-Windows 7, Windows 8/8.1 and Windows 10 and has been reported to work
-in both 32-bit and 64-bit versions of these.
-
-FLTK currently supports the following development
-environments on the Windows platform:
-
-CAUTION: Libraries built by any one of these build
-environments can not be mixed
-with object files from any of the other environments!
-(They use incompatible C++ conventions internally.)
-
-Free Microsoft Visual C++ 2008 Express and Visual C++ 2010 Express
-or later versions using the supplied workspace and
-project files. Older versions, and the commercial
-versions, can be used as well, if they can open
-the project files.
-Be sure to get your service packs!
-
-The project files can be found in the "ide/" directory.
-Please read "ide/README.IDE" for more info about this.
-
-
-\subsection intro_cygwin_mingw GNU toolsets (Cygwin or MinGW) hosted on Windows
-
-If using Cygwin with the Cygwin shell, or MinGW with
-the Msys shell, these build environments behave very
-much like a Unix or OS X build and the notes above in
-the section on
-<i>Building and Installing FLTK Under UNIX and Apple OS X</i>
-apply, in particular the descriptions of using the
-"configure" script and its related options.
-
-In general for a build using these tools, e.g. for
-the Msys shell with MinGW,
-it should suffice to "cd" into the directory where
-you have extracted the fltk tarball and type:
-
-\code
-./configure
-make
-\endcode
-
-This will build the fltk libraries and they can then be
-utilised directly from the build location.
-NOTE: this may be simpler than "installing" them in
-many cases as different tool chains on Windows have
-different ideas about where the files should be "installed" to.
-
-For example, if you "install" the libraries using Msys/MinGW
-with the following command:
-
-\code
-make install
-\endcode
-
-Then Msys will "install" the libraries to where it thinks
-the path "/usr/local/" leads to. If you only ever build code
-from within the Msys environment this works well, but the
-actual "Windows path" these files are located in will be
-something like "C:\msys\1.0\local\lib", depending
-on where your Msys installation is rooted, which may
-not be useful to other tools.
-
-If you want to install your built fltk libraries in a
-non-standard location you may do:
-
-\code
-sh configure --prefix=C:/FLTK
-make
-\endcode
-
-Where the value passed to "prefix" is the path at which
-you would like fltk to be installed.
-
-A subsequent invocation of "make install" will then place
-the fltk libraries and header files into that path.
-
-The other options to "configure" may also be used to
-tailor the build to suit your environment.
-
-\subsection intro_visualcpp Using the Visual C++ DLL Library
-
-The "fltkdll.dsp" project file builds a DLL-version
-of the FLTK library. Because of name mangling differences
-between PC compilers (even between different versions of Visual
-C++!) you can only use the DLL that is generated with the same
-version compiler that you built it with.
-
-When compiling an application or DLL that uses the FLTK DLL,
-you will need to define the \p FL_DLL preprocessor symbol
-to get the correct linkage commands embedded within the FLTK
-header files.
-
-\section intro_internet Internet Resources
-
-FLTK is available on the 'net in a bunch of locations:
-
-\par WWW
-http://www.fltk.org/ <br>
-http://www.fltk.org/str.php [for reporting bugs] <br>
-https://www.fltk.org/software.php [source code]<br>
-http://www.fltk.org/newsgroups.php [newsgroup/forums]
-
-\par NNTP Newsgroups
-https://groups.google.com/forum/#!forum/fltkgeneral [Google Groups interface]
-news://fltk.org:1024/ [NNTP interface]<br>
-http://fltk.org/newsgroups.php [web interface]<br>
-
-\section intro_reporting Reporting Bugs
-
-To report a bug in FLTK, or for feature requests, please use the form at
-<A href="http://www.fltk.org/str.php">http://www.fltk.org/str.php</A>,
-and click on "Submit Bug or Feature Request".
-
-You'll be prompted for the FLTK version, operating system & version,
-and compiler that you are using. We will be unable to provide
-any kind of help without that basic information.
-
-For general support and questions, please use the fltk.general newsgroup (see above, "NNTP Newsgroups")
-or the web interface to the newsgroups at <A href="http://fltk.org/newsgroups.php">http://fltk.org/newsgroups.php</A>.
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="preface.html">
-    [Prev]
-    Preface
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="basics.html">
-    FLTK Basics
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/license.dox
+++ /dev/null
@@ -1,518 +1,0 @@
-/**
-
- \page	license	Software License
-
-\par December 11, 2001
-
-The FLTK library and included programs are provided under the terms
-of the GNU Library General Public License (LGPL) with the following
-exceptions:
-
--#	Modifications to the FLTK configure script, config
-	header file, and makefiles by themselves to support
-	a specific platform do not constitute a modified or
-	derivative work.<BR>
-	<BR>
-        The authors do request that such modifications be
-        contributed to the FLTK project - send all contributions
-        through the "Software Trouble Report" on the following page:
-        http://www.fltk.org/str.php<BR>
-	<BR>
--#	Widgets that are subclassed from FLTK widgets do not
-	constitute a derivative work.<BR>
-	<BR>
--#	Static linking of applications and widgets to the
-	FLTK library does not constitute a derivative work
-	and does not require the author to provide source
-	code for the application or widget, use the shared
-	FLTK libraries, or link their applications or
-	widgets against a user-supplied version of FLTK.<BR>
-	<BR>
-	If you link the application or widget to a modified
-	version of FLTK, then the changes to FLTK must be
-	provided under the terms of the LGPL in sections
-	1, 2, and 4.<BR>
-	<BR>
--#	You do not have to provide a copy of the FLTK license
-	with programs that are linked to the FLTK library, nor
-	do you have to identify the FLTK license in your
-	program or documentation as required by section 6
-	of the LGPL.<BR>
-	<BR>
-	However, programs must still identify their use of FLTK.
-	The following example statement can be included in user
-	documentation to satisfy this requirement:<BR>
-	<BR>
-	<I>[program/widget] is based in part on the work of
-	the FLTK project (http://www.fltk.org).</I>
-
-<HR>
-
-\par GNU LIBRARY GENERAL PUBLIC LICENSE
-
-Version 2, June 1991 <BR>
-Copyright (C) 1991 Free Software Foundation, Inc. <BR>
-59 Temple Place - Suite 330, Boston, MA  02111-1307, USA <BR>
-Everyone is permitted to copy and distribute verbatim copies of
-this license document, but changing it is not allowed. <BR>
-[This is the first released version of the library GPL.  It is
-numbered 2 because it goes with version 2 of the ordinary GPL.]
-
-\par Preamble
-
-The licenses for most software are designed to take away your freedom
-to share and change it.  By contrast, the GNU General Public Licenses
-are intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.
-
-This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it.  You can use it for
-your libraries, too. 
-
-When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the library, or if you modify it.
-
-For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
-Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library.  If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
-Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software.  To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License, which was designed for utility
-programs.  This license, the GNU Library General Public License,
-applies to certain designated libraries.  This license is quite
-different from the ordinary one; be sure to read it in full, and don't
-assume that anything in it is the same as in the ordinary license.
-
-The reason we have a separate public license for some libraries is
-that they blur the distinction we usually make between modifying or
-adding to a program and simply using it.  Linking a program with a
-library, without changing the library, is in some sense simply using
-the library, and is analogous to running a utility program or
-application program.  However, in a textual and legal sense, the linked
-executable is a combined work, a derivative of the original library,
-and the ordinary General Public License treats it as such.
-
-Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries.  We
-concluded that weaker conditions might promote sharing better.
-
-However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves.  This Library General Public License is intended
-to permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them.  (We have not seen how to
-achieve this as regards changes in header files, but we have achieved
-it as regards changes in the actual functions of the Library.)  The
-hope is that this will lead to faster development of free libraries.
-
-The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-&quot;work based on the libary&quot; and a &quot;work that uses the library&quot;.  The
-former contains code derived from the library, while the latter only
-works together with the library.
-
-Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
-\par TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-\b 0. This License Agreement applies to any software
-library which contains a notice placed by the copyright holder or other
-authorized party saying it may be distributed under the terms of this
-Library General Public License (also called &quot;this License&quot;). 
-Each licensee is addressed as &quot;you&quot;.
-
-A &quot;library&quot; means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-The &quot;Library&quot;, below, refers to any such software library or work
-which has been distributed under these terms.  A &quot;work based on the
-Library&quot; means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term &quot;modification&quot;.)
-
-&quot;Source code&quot; for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation and installation of the library.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does and
-what the program that uses the Library does.
-
-\b 1. You may copy and distribute verbatim copies of
-the Library's complete source code as you receive it, in any medium,
-provided that you conspicuously and appropriately publish on each copy
-an appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the Library.
-
-You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-\b 2. You may modify your copy or copies of the
-Library or any portion of it, thus forming a work based on the Library,
-and copy and distribute such modifications or work under the terms of
-Section 1 above, provided that you also meet all of these conditions:
-
-\b a) The modified work must itself be a software library.
-
-\b b) You must cause the files modified to carry
-prominent notices stating that you changed the files and the date of
-any change.
-
-\b c) You must cause the whole of the work to be
-licensed at no charge to all third parties under the terms of this
-License.
-
-\b d) If a facility in the modified Library refers to
-a function or a table of data to be supplied by an application program
-that uses the facility, other than as an argument passed when the
-facility is invoked, then you must make a good faith effort to ensure
-that, in the event an application does not supply such function or
-table, the facility still operates, and performs whatever part of its
-purpose remains meaningful.
-
-(For example, a function in a library to compute square roots has a
-purpose that is entirely well-defined independent of the application.
- Therefore, Subsection 2d requires that any application-supplied
-function or table used by this function must be optional: if the
-application does not supply it, the square root function must still
-compute square roots.)
-
-These requirements apply to the modified work as a whole.
-If identifiable sections of that work are not derived from the
-Library, and can be reasonably considered independent and separate
-works in themselves, then this License, and its terms, do not apply to
-those sections when you distribute them as separate works.  But when
-you distribute the same sections as part of a whole which is a work
-based on the Library, the distribution of the whole must be on the
-terms of this License, whose permissions for other licensees extend to
-the entire whole, and thus to each and every part regardless of who
-wrote it.
-
-Thus, it is not the intent of this section to claim rights or
-contest your rights to work written entirely by you; rather, the intent
-is to exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the
-Library with the Library (or with a work based on the Library) on a
-volume of a storage or distribution medium does not bring the other
-work under the scope of this License.
-
-\b 3. You may opt to apply the terms of the ordinary
-GNU General Public License instead of this License to a given copy of
-the Library.  To do this, you must alter all the notices that refer to
-this License, so that they refer to the ordinary GNU General Public
-License, version 2, instead of to this License.  (If a newer version
-than version 2 of the ordinary GNU General Public License has appeared,
-then you can specify that version instead if you wish.)  Do not make
-any other change in these notices.
-
-Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-This option is useful when you wish to copy part of the code of the
-Library into a program that is not a library.
-
-\b 4. You may copy and distribute the Library (or a
-portion or derivative of it, under Section 2) in object code or
-executable form under the terms of Sections 1 and 2 above provided that
-you accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections 1
-and 2 above on a medium customarily used for software interchange.
-
-If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to distribute
-the source code, even though third parties are not compelled to copy
-the source along with the object code.
-
-\b 5. A program that contains no derivative of any
-portion of the Library, but is designed to work with the Library by
-being compiled or linked with it, is called a &quot;work that uses the
-Library&quot;.  Such a work, in isolation, is not a derivative work of the
-Library, and therefore falls outside the scope of this License.
-
-However, linking a &quot;work that uses the Library&quot; with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a &quot;work that uses the
-library&quot;.  The executable is therefore covered by this License. Section
-6 states terms for distribution of such executables.
-
-When a &quot;work that uses the Library&quot; uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6, whether
-or not they are linked directly with the Library itself.
-
-\b 6. As an exception to the Sections above, you may also compile or
-link a &quot;work that uses the Library&quot; with the Library to
-produce a work containing portions of the Library, and distribute that
-work under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-\b a) Accompany the work
-with the complete corresponding  machine-readable source code for the
-Library including whatever  changes were used in the work (which must
-be distributed under  Sections 1 and 2 above); and, if the work is an
-executable linked  with the Library, with the complete machine-readable
-&quot;work that  uses the Library&quot;, as object code and/or source code, so
-that the  user can modify the Library and then relink to produce a
-modified  executable containing the modified Library.  (It is
-understood  that the user who changes the contents of definitions files
-in the  Library will not necessarily be able to recompile the
-application  to use the modified definitions.)
-
-\b b) Accompany the work with a written offer, valid
-for at  least three years, to give the same user the materials
-specified in Subsection 6a, above, for a charge no more  than the cost
-of performing this distribution.
-
-\b c) If distribution of the work is made by offering
-access to copy  from a designated place, offer equivalent access to
-copy the above  specified materials from the same place.
-
-\b d) Verify that the user has already received a copy
-of these  materials or that you have already sent this user a copy.
-
-For an executable, the required form of the &quot;work that
-uses the Library&quot; must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major components
-(compiler, kernel, and so on) of the operating system on which the
-executable runs, unless that component itself accompanies the
-executable.
-
-It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-\b 7. You may place library facilities that are a work
-based on the Library side-by-side in a single library together with
-other library facilities not covered by this License, and distribute
-such a combined library, provided that the separate distribution of the
-work based on the Library and of the other library facilities is
-otherwise permitted, and provided that you do these two things:
-
-\b a) Accompany the combined library with a copy of the
-same work  based on the Library, uncombined with any other library
-facilities.  This must be distributed under the terms of the  Sections
-above.
-
-\b b) Give prominent notice with the combined library
-of the fact that part of it is a work based on the Library, and
-explaining where to find the accompanying uncombined form of the same
-work.
-
-
-\b 8. You may not copy, modify, sublicense,
-link with, or distribute the Library except as expressly provided under
-this License.  Any attempt otherwise to copy, modify, sublicense, link
-with, or distribute the Library is void, and will automatically
-terminate your rights under this License.  However, parties who have
-received copies, or rights, from you under this License will not have
-their licenses terminated so long as such parties remain in full
-compliance.
-
-\b 9. You are not required to accept this License,
-since you have not signed it.  However, nothing else grants you
-permission to modify or distribute the Library or its derivative works.
-These actions are prohibited by law if you do not accept this License.
-Therefore, by modifying or distributing the Library (or any work based
-on the Library), you indicate your acceptance of this License to do so,
-and all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-\b 10. Each time you redistribute the Library (or any
-work based on the Library), the recipient automatically receives a
-license from the original licensor to copy, distribute, link with or
-modify the Library subject to these terms and conditions.  You may not
-impose any further restrictions on the recipients' exercise of the
-rights granted herein. You are not responsible for enforcing compliance
-by third parties to this License.
-
-\b 11. If, as a consequence of a court judgment or
-allegation of patent infringement or for any other reason (not limited
-to patent issues), conditions are imposed on you (whether by court
-order, agreement or otherwise) that contradict the conditions of this
-License, they do not excuse you from the conditions of this License.
-If you cannot distribute so as to satisfy simultaneously your
-obligations under this License and any other pertinent obligations,
-then as a consequence you may not distribute the Library at all.  For
-example, if a patent license would not permit royalty-free
-redistribution of the Library by all those who receive copies directly
-or indirectly through you, then the only way you could satisfy both it
-and this License would be to refrain entirely from distribution of the
-Library.
-
-If any portion of this section is held invalid or unenforceable
-under any particular circumstance, the balance of the section is
-intended to apply, and the section as a whole is intended to apply in
-other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is implemented
-by public license practices.  Many people have made generous
-contributions to the wide range of software distributed through that
-system in reliance on consistent application of that system; it is up
-to the author/donor to decide if he or she is willing to distribute
-software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed
-to be a consequence of the rest of this License.
-
-\b 12. If the distribution and/or use of the Library
-is restricted in certain countries either by patents or by copyrighted
-interfaces, the original copyright holder who places the Library under
-this License may add an explicit geographical distribution limitation
-excluding those countries, so that distribution is permitted only in or
-among countries not thus excluded.  In such case, this License
-incorporates the limitation as if written in the body of this License.
-
-\b 13. The Free Software Foundation may publish
-revised and/or new versions of the Library General Public License from
-time to time. Such new versions will be similar in spirit to the
-present version, but may differ in detail to address new problems or
-concerns.
-
-Each version is given a distinguishing version number.  If the
-Library specifies a version number of this License which applies to it
-and &quot;any later version&quot;, you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-\b 14. If you wish to incorporate parts of the Library
-into other free programs whose distribution conditions are incompatible
-with these, write to the author to ask for permission.  For software
-which is copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-\par NO WARRANTY
-
-\b 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE,
-THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY &quot;AS IS&quot; WITHOUT
-WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
-OF THE LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU
-ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-\b 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
-OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
-WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
-LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL
-OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-\par END OF TERMS AND CONDITIONS
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="development.html">
-    [Prev]
-    Developer Information
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="examples.html">
-    Example Source Code
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/menu.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/menu_button.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/menubar.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/migration_1_1.dox
+++ /dev/null
@@ -1,176 +1,0 @@
-/**
-
- \page	migration_1_1	Migrating Code from FLTK 1.0 to 1.1
-
-
-This appendix describes the differences between the FLTK
-1.0.x and FLTK 1.1.x functions and classes.
-
-\section migration_1_1_color Color Values
-
-Color values are now stored in a 32-bit unsigned integer
-instead of the unsigned character in 1.0.x. This allows for the
-specification of 24-bit RGB values or 8-bit FLTK color indices.
-
-\c FL_BLACK and \c FL_WHITE now remain black and white, even if
-the base color of the gray ramp is changed using Fl::background().
-\c FL_DARK3 and \c FL_LIGHT3 can be used instead to 
-draw a very dark or a very bright background hue.
-
-Widgets use the new color symbols \c FL_FOREGROUND_COLOR,
-\c FL_BACKGROUND_COLOR, \c FL_BACKGROUND2_COLOR, 
-\c FL_INACTIVE_COLOR, and \c FL_SELECTION_COLOR.
-More details can be found in the chapter \ref enumerations.
-
-\section migration_1_1_cutnpaste Cut and Paste Support
-
-The FLTK clipboard is now broken into two parts - a local
-selection value and a cut-and-paste value. This allows FLTK to
-support things like highlighting and replacing text that was
-previously cut or copied, which makes FLTK applications behave
-like traditional GUI applications.
-
-\section migration_1_1_file_chooser File Chooser
-
-The file chooser in FLTK 1.1.x is significantly different
-than the one supplied with FLTK 1.0.x. Any code that directly
-references the old \c FCB class or members will need
-to be ported to the new Fl_File_Chooser class.
-
-\section migration_1_1_functions Function Names
-
-Some function names have changed from FLTK 1.0.x to 1.1.x in
-order to avoid name space collisions. You can still use the old
-function names by defining the \c FLTK_1_0_COMPAT symbol on
-the command-line when you compile (\c -DFLTK_1_0_COMPAT) or in
-your source, e.g.:
-
-\code
-#define FLTK_1_0_COMPAT
-#include <FL/Fl.H>
-#include <FL/Enumerations.H>
-#include <FL/filename.H>
-\endcode
-
-The following table shows the old and new function names:
-
-<CENTER>
-<TABLE WIDTH="80%" BORDER="1">
-<TR>
-	<TH>Old 1.0.x Name</TH>
-	<TH>New 1.1.x Name</TH>
-</TR>
-<TR>
-	<TD>contrast()</TD>
-	<TD>fl_contrast()</TD>
-</TR>
-<TR>
-	<TD>down()</TD>
-	<TD>fl_down()</TD>
-</TR>
-<TR>
-	<TD>filename_absolute()</TD>
-	<TD>fl_filename_absolute()</TD>
-</TR>
-<TR>
-	<TD>filename_expand()</TD>
-	<TD>fl_filename_expand()</TD>
-</TR>
-<TR>
-	<TD>filename_ext()</TD>
-	<TD>fl_filename_ext()</TD>
-</TR>
-<TR>
-	<TD>filename_isdir()</TD>
-	<TD>fl_filename_isdir()</TD>
-</TR>
-<TR>
-	<TD>filename_list()</TD>
-	<TD>fl_filename_list()</TD>
-</TR>
-<TR>
-	<TD>filename_match()</TD>
-	<TD>fl_filename_match()</TD>
-</TR>
-<TR>
-	<TD>filename_name()</TD>
-	<TD>fl_filename_name()</TD>
-</TR>
-<TR>
-	<TD>filename_relative()</TD>
-	<TD>fl_filename_relative()</TD>
-</TR>
-<TR>
-	<TD>filename_setext()</TD>
-	<TD>fl_filename_setext()</TD>
-</TR>
-<TR>
-	<TD>frame()</TD>
-	<TD>fl_frame()</TD>
-</TR>
-<TR>
-	<TD>inactive()</TD>
-	<TD>fl_inactive()</TD>
-</TR>
-<TR>
-	<TD>numericsort()</TD>
-	<TD>fl_numericsort()</TD>
-</TR>
-</TABLE>
-</CENTER>
-
-\section migration_1_1_images Image Support
-
-Image support in FLTK has been significantly revamped in 1.1.x.
-The Fl_Image class is now a proper base class, with the core 
-image drawing functionality in the Fl_Bitmap, Fl_Pixmap, and
-Fl_RGB_Image classes.
-
-BMP, GIF, JPEG, PNG, XBM, and XPM image files can now be
-loaded using the appropriate image classes, and the
-Fl_Shared_Image class can be used to cache images in memory.
-
-Image labels are no longer provided as an add-on label type.
-If you use the old \c label() methods on an image, the
-widget's \c image() method is called to set the image
-as the label.
-
-Image labels in menu items must still use the old labeltype
-mechanism to preserve source compatibility.
-
-\section migration_1_1_keyboard Keyboard Navigation
-
-FLTK 1.1.x now supports keyboard navigation and control with
-all widgets. To restore the old FLTK 1.0.x behavior so that only
-text widgets get keyboard focus, call the Fl::visible_focus()
-method to disable it:
-
-\code
-Fl::visible_focus(0);
-\endcode
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="osissues.html">
-    [Prev]
-    Operating System Issues
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="migration_1_3.html">
-    Migrating Code from FLTK 1.1 to 1.3
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/migration_1_3.dox
+++ /dev/null
@@ -1,80 +1,0 @@
-/**
-
- \page	migration_1_3	Migrating Code from FLTK 1.1 to 1.3
-
-This appendix describes the differences between the FLTK
-1.1.x and FLTK 1.3.x functions and classes.
-
-\section migration_1_3_fltk_1_0 Migrating From FLTK 1.0
-
-If you want to migrate your code from FLTK 1.0 to FLTK 1.3,
-then you should first consult Appendix \ref migration_1_1.
-
-
-\section migration_1_3_fl_scroll Fl_Scroll Widget
-
-Fl_Scroll::scroll_to(int x, int y) replaces Fl_Scroll::position(int x, int y).
-
-This change was needed because Fl_Scroll::position(int,int) redefined
-Fl_Widget::position(int,int), but with a completely different function (moving
-the scrollbars instead of moving the widget).
-
-Please be aware that you need to change your application's code for all
-Fl_Scroll-derived widgets, if you used Fl_Scroll::position(int x, int y)
-to position <b>the scrollbars</b> (not the widget itself).
-
-The compiler will not detect any errors, because your calls to 
-\b position(int x, int y) will be calling Fl_Widget::position(int x, int y).
-
-
-\section migration_1_3_unicode Unicode (UTF-8)
-
-FLTK 1.3 uses Unicode (UTF-8) encoding internally. If you are only using
-characters in the ASCII range (32-127), there is a high probability that
-you don't need to modify your code. However, if you use international
-characters (128-255), encoded as e.g. Windows codepage 1252, ISO-8859-1,
-ISO-8859-15 or any other encoding, then you will need to update your character
-string constants and widget input data accordingly.
-
-Please refer to the \ref unicode chapter for more details.
-
-\note It is important that, although your software uses only ASCII characters
-for input to FLTK widgets, the user may enter non-ASCII characters, and FLTK
-will return these characters with UTF-8 encoding to your application, e.g.
-via Fl_Input::value(). You \b will need to re-encode them to \b your (non-UTF-8)
-encoding, otherwise you might see or print garbage in your data.
-
-
-\section migration_1_3_int_coords Widget Coordinate Representation
-
-FLTK 1.3 changed all Widget coordinate variables and methods, e.g.
-Fl_Widget::x(), Fl_Widget::y(), Fl_Widget::w(), Fl_Widget::h(), from
-short (16-bit) to int (32-bit) representation. This should not affect
-any existing code, but makes it possible to use bigger scroll areas
-(e.g. Fl_Scroll widget).
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="migration_1_1.html">
-    [Prev]
-    Migrating Code from FLTK 1.0 to 1.1
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="development.html">
-    Developer Information
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/opengl.dox
+++ /dev/null
@@ -1,550 +1,0 @@
-/**
-
- \page	opengl Using OpenGL
-
-This chapter discusses using FLTK for your OpenGL applications.
-
-\section opengl_using Using OpenGL in FLTK
-
-The easiest way to make an OpenGL display is to subclass
-Fl_Gl_Window.
-Your subclass must implement a \p draw() method which uses
-OpenGL calls to draw the display. Your main program should call
-\p redraw() when the display needs to change, and
-(somewhat later) FLTK will call \p draw().
-
-With a bit of care you can also use OpenGL to draw into
-normal FLTK windows. This allows you to use Gouraud shading for
-drawing your widgets.  To do this you use the
-\ref opengl_gl_start "gl_start()" and
-\ref opengl_gl_finish "gl_finish()"
-functions around your OpenGL code.
-
-You must include FLTK's \p <FL/gl.h> header
-file. It will include the file \p <GL/gl.h>, define
-some extra drawing functions provided by FLTK, and include the
-\p <windows.h> header file needed by WIN32
-applications.
-
-Some simple coding rules (see \ref osissues_retina) allow to write cross-platform code that will draw high resolution
-OpenGL graphics if run on 'retina' displays with Mac OS X.
-
-\section opengl_subclass Making a Subclass of Fl_Gl_Window
-
-To make a subclass of Fl_Gl_Window, you must provide:
-
-\li A class definition.
-\li A \p draw() method.
-\li A \p handle() method if you need to receive input from the user.
-
-If your subclass provides static controls in the window, they
-must be redrawn whenever the \p FL_DAMAGE_ALL bit is set
-in the value returned by \p damage(). For double-buffered
-windows you will need to surround the drawing code with the
-following code to make sure that both buffers are redrawn:
-
-\code
-#ifndef MESA
-glDrawBuffer(GL_FRONT_AND_BACK);
-#endif // !MESA
-... draw stuff here ...
-#ifndef MESA
-glDrawBuffer(GL_BACK);
-#endif // !MESA
-\endcode
-
-<CENTER><TABLE WIDTH="80%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
-<TR>
-	<TD><B>Note:</B>
-
-	If you are using the Mesa graphics library, the call
-	to \p glDrawBuffer() is not required and will slow
-	down drawing considerably. The preprocessor instructions
-	shown above will optimize your code based upon the
-	graphics library used.
-
-	</TD>
-
-</TR>
-</TABLE></CENTER>
-
-\subsection opengl_defining Defining the Subclass
-
-To define the subclass you just subclass the Fl_Gl_Window class:
-
-\code
-class MyWindow : public Fl_Gl_Window {
-  void draw();
-  int handle(int);
-
-public:
-  MyWindow(int X, int Y, int W, int H, const char *L)
-    : Fl_Gl_Window(X, Y, W, H, L) {}
-};
-\endcode
-
-The \p draw() and \p handle() methods are
-described below. Like any widget, you can include additional
-private and public data in your class (such as scene graph
-information, etc.)
-
-\subsection opengl_draw The draw() Method
-
-The \p draw() method is where you actually do your OpenGL drawing:
-
-\code
-void MyWindow::draw() {
-  if (!valid()) {
-    ... set up projection, viewport, etc ...
-    ... window size is in w() and h().
-    ... valid() is turned on by FLTK after draw() returns
-  }
-  ... draw ...
-}
-\endcode
-
-\subsection opengl_handle The handle() Method
-
-The \p handle() method handles mouse and keyboard
-events for the window:
-
-\code
-int MyWindow::handle(int event) {
-  switch(event) {
-  case FL_PUSH:
-    ... mouse down event ...
-    ... position in Fl::event_x() and Fl::event_y()
-    return 1;
-  case FL_DRAG:
-    ... mouse moved while down event ...
-    return 1;
-  case FL_RELEASE:   
-    ... mouse up event ...
-    return 1;
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    ... Return 1 if you want keyboard events, 0 otherwise
-    return 1;
-  case FL_KEYBOARD:
-    ... keypress, key is in Fl::event_key(), ascii in Fl::event_text()
-    ... Return 1 if you understand/use the keyboard event, 0 otherwise...
-    return 1;
-  case FL_SHORTCUT:
-    ... shortcut, key is in Fl::event_key(), ascii in Fl::event_text()
-    ... Return 1 if you understand/use the shortcut event, 0 otherwise...
-    return 1;
-  default:
-    // pass other events to the base class...
-    return Fl_Gl_Window::handle(event);
-  }
-}
-\endcode
-
-When \p handle() is called, the OpenGL context is not
-set up! If your display changes, you should call
-\p redraw() and let \p draw() do the work. Don't
-call any OpenGL drawing functions from inside \p handle()!
-
-You can call \e some OpenGL stuff like hit detection and texture
-loading functions by doing: 
-
-\code
-  case FL_PUSH:
-    make_current();	// make OpenGL context current
-    if (!valid()) {
-
-      ... set up projection exactly the same as draw ...
-
-      valid(1);		// stop it from doing this next time
-    }
-    ... ok to call NON-DRAWING OpenGL code here, such as hit
-    detection, loading textures, etc...
-\endcode
-
-Your main program can now create one of your windows by doing
-<tt>new MyWindow(...)</tt>.
-
-You can also use your new window class in
-\ref fluid "FLUID"
-by:
-
--# Putting your class definition in a \p MyWindow.H file.
--# Creating a Fl_Box widget in FLUID.
--# In the widget panel fill in the "class" field with \p MyWindow.
-   This will make FLUID produce constructors for your new class.
--# In the "Extra Code" field put <tt>\#include "MyWindow.H"</tt>,
-   so that the FLUID output file will compile.
-
-You must put <tt>glwindow->show()</tt> in your main code
-after calling \p show() on the window containing the
-OpenGL window.
-
-\section opengl_normal Using OpenGL in Normal FLTK Windows
-
-You can put OpenGL code into the \p draw() method, as described in
-\ref subclassing_drawing
-in the previous chapter, or into the code for a
-\ref common_boxtypes "boxtype"
-or other places with some care.
-
-Most importantly, before you show \e any windows,
-including those that don't have OpenGL drawing, you <B>must</B>
-initialize FLTK so that it knows it is going to use OpenGL. You
-may use any of the symbols described for \p Fl_Gl_Window::mode()
-to describe how you intend to use OpenGL:
-
-\code
-Fl::gl_visual(FL_RGB);
-\endcode
-
-\anchor opengl_gl_start
-\anchor opengl_gl_finish
-You can then put OpenGL drawing code anywhere you can draw
-normally by surrounding it with
-gl_start() and gl_finish() to set up, and later release, an OpenGL
-context with an orthographic projection so that 0,0 is the
-lower-left corner of the window and each pixel is one unit. The
-current clipping is reproduced with OpenGL \p glScissor()
-commands. These functions also synchronize the OpenGL graphics stream
-with the drawing done by other X, WIN32, or FLTK functions.
-
-\code
-gl_start();
-... put your OpenGL code here ...
-gl_finish();
-\endcode
-
-The same context is reused each time. If your code changes
-the projection transformation or anything else you should use
-\p glPushMatrix() and \p glPopMatrix() functions to
-put the state back before calling \p gl_finish().
-
-You may want to use <tt>Fl_Window::current()-\>h()</tt> to
-get the drawable height so that you can flip the Y
-coordinates.
-
-Unfortunately, there are a bunch of limitations you must
-adhere to for maximum portability: 
-
-\li You must choose a default visual with Fl::gl_visual().
-
-\li You cannot pass \p FL_DOUBLE to Fl::gl_visual().
-
-\li You cannot use Fl_Double_Window or Fl_Overlay_Window.
-
-Do \e not call \p gl_start() or
-\p gl_finish() when drawing into an Fl_Gl_Window !
-
-\section opengl_drawing OpenGL Drawing Functions
-
-FLTK provides some useful OpenGL drawing functions. They can
-be freely mixed with any OpenGL calls, and are defined by
-including \p <FL/gl.h> which you should include
-instead of the OpenGL header \p <GL/gl.h>.
-
-void gl_color(Fl_Color)
-
-\par
-Sets the current OpenGL color to a FLTK color. <I>For
-color-index modes it will use \p fl_xpixel(c), which is
-only right if this window uses the default colormap!</I>
-
-void gl_rect(int x, int y, int w, int h) <br>
-void gl_rectf(int x, int y, int w, int h)
-
-\par
-Outlines or fills a rectangle with the current color. If 
-Fl_Gl_Window::ortho() has been called, then the rectangle will exactly
-fill the pixel rectangle passed.
-
-void gl_font(Fl_Font fontid, int size)
-
-\par
-Sets the current OpenGL font to the same font you get by calling
-\ref ssect_Fonts "fl_font()".
-
-int gl_height() <br>
-int gl_descent() <br>
-float gl_width(const char *s) <br>
-float gl_width(const char *s, int n) <br>
-float gl_width(uchar c)
-
-\par
-Returns information about the current OpenGL font.
-
-void gl_draw(const char *s) <br>
-void gl_draw(const char *s, int n)
-
-\par
-Draws a nul-terminated string or an array of \p n
-characters in the current OpenGL font at the current raster
-position.
-
-void gl_draw(const char *s, int x, int y) <br>
-void gl_draw(const char *s, int n, int x, int y) <br>
-void gl_draw(const char *s, float x, float y) <br>
-void gl_draw(const char *s, int n, float x, float y)
-
-\par
-Draws a nul-terminated string or an array of \p n
-characters in the current OpenGL font at the given position.
-
-void gl_draw(const char *s, int x, int y, int w, int h, Fl_Align)
-
-\par
-Draws a string formatted into a box, with newlines and tabs
-expanded, other control characters changed to ^X, and aligned
-with the edges or center. Exactly the same output as
-\ref ssect_Text "fl_draw()".
-
-\section opengl_speed Speeding up OpenGL
-
-Performance of Fl_Gl_Window may be improved on some types of
-OpenGL implementations, in particular MESA and other software
-emulators, by setting the \p GL_SWAP_TYPE environment
-variable. This variable declares what is in the backbuffer after
-you do a swapbuffers.
-
-\li <tt>setenv GL_SWAP_TYPE COPY</tt> <br>
-    <br>
-    This indicates that the back buffer is copied to the
-    front buffer, and still contains its old data. This is
-    true of many hardware implementations.  Setting this
-    will speed up emulation of overlays, and widgets that
-    can do partial update can take advantage of this as
-    \p damage() will not be cleared to -1.
-
-\li <tt>setenv GL_SWAP_TYPE NODAMAGE</tt> <br>
-    <br>
-    This indicates that nothing changes the back buffer
-    except drawing into it.  This is true of MESA and Win32
-    software emulation and perhaps some hardware emulation
-    on systems with lots of memory.
-
-\li All other values for \p GL_SWAP_TYPE, and not
-    setting the variable, cause FLTK to assume that the
-    back buffer must be completely redrawn after a swap.
-
-This is easily tested by running the \ref examples_gl_overlay demo
-program and seeing if the display is correct when you drag
-another window over it or if you drag the window off the screen
-and back on. You have to exit and run the program again for it
-to see any changes to the environment variable.
-
-\section opengl_optimizer Using OpenGL Optimizer with FLTK
-
-<A href="http://www.sgi.com/software/optimizer">OpenGL Optimizer</A>
-is a scene graph toolkit for OpenGL available from
-Silicon Graphics for IRIX and Microsoft Windows. It allows you
-to view large scenes without writing a lot of OpenGL code.
-
-\par OptimizerWindow Class Definition
-
-\par
-To use
-<A href="http://www.sgi.com/software/optimizer">OpenGL Optimizer</A>
-with FLTK you'll need to create a
-subclass of Fl_Gl_Widget that includes several state
-variables:
-
-\code
-class OptimizerWindow : public Fl_Gl_Window {
-  csContext *context_; // Initialized to 0 and set by draw()...
-  csDrawAction *draw_action_; // Draw action...
-  csGroup *scene_; // Scene to draw...
-  csCamara *camera_; // Viewport for scene...
-
-  void draw();
-
-public:
-  OptimizerWindow(int X, int Y, int W, int H, const char *L)
-    : Fl_Gl_Window(X, Y, W, H, L) {
-      context_ = (csContext *)0;
-      draw_action_ = (csDrawAction *)0;
-      scene_ = (csGroup *)0;
-      camera_ = (csCamera *)0;
-    }
-
-  void scene(csGroup *g) { scene_ = g; redraw(); }
-
-  void camera(csCamera *c) {
-    camera_ = c;
-    if (context_) {
-      draw_action_->setCamera(camera_);
-      camera_->draw(draw_action_);
-      redraw();
-    }
-  }
-};
-\endcode
-
-\par The camera() Method
-
-\par
-The \p camera() method sets the camera (projection and
-viewpoint) to use when drawing the scene. The scene is redrawn after
-this call.
-
-\par The draw() Method
-
-\par
-The \p draw() method performs the needed initialization and does
-the actual drawing:
-
-\code
-void OptimizerWindow::draw() {
-  if (!context_) {
-    // This is the first time we've been asked to draw; create the
-    // Optimizer context for the scene...
-
-#ifdef WIN32
-    context_ = new csContext((HDC)fl_getHDC());
-    context_->ref();
-    context_->makeCurrent((HDC)fl_getHDC());
-#else
-    context_ = new csContext(fl_display, fl_visual);
-    context_->ref();
-    context_->makeCurrent(fl_display, fl_window);
-#endif // WIN32
-
-    ... perform other context setup as desired ...   
-
-    // Then create the draw action to handle drawing things...
-
-    draw_action_ = new csDrawAction;
-    if (camera_) {
-      draw_action_->setCamera(camera_);
-      camera_->draw(draw_action_);
-    }
-  } else {
-#ifdef WIN32
-    context_->makeCurrent((HDC)fl_getHDC());
-#else
-    context_->makeCurrent(fl_display, fl_window);
-#endif // WIN32
-  }
-
-  if (!valid()) {
-    // Update the viewport for this context...
-    context_->setViewport(0, 0, w(), h());
-  }
-
-  // Clear the window...
-  context_->clear(csContext::COLOR_CLEAR | csContext::DEPTH_CLEAR,
-                  0.0f,		// Red
-		  0.0f,		// Green
-		  0.0f,		// Blue
-		  1.0f);	// Alpha
-
-  // Then draw the scene (if any)...
-  if (scene_)
-    draw_action_->apply(scene_);
-}
-\endcode
-
-\par The scene() Method
-
-\par
-The \p scene() method sets the scene to be drawn.  The scene is
-a collection of 3D objects in a \p csGroup.  The scene is redrawn
-after this call.
-
-\section opengl3 Using OpenGL 3.0 (or higher versions)
-
-The examples subdirectory contains OpenGL3test.cxx, a toy program
-showing how to use OpenGL 3.0 (or higher versions) with FLTK in a cross-platform fashion.
-It contains also OpenGL3-glut-test.cxx which shows how to use FLTK's GLUT compatibility
-and OpenGL 3.
-
-To access OpenGL 3.0 (or higher versions), use the <tt>FL_OPENGL3</tt> flag
-when calling Fl_Gl_Window::mode(int a) or glutInitDisplayMode().
-
-<b>On the Windows and Unix/Linux platforms</b>, FLTK creates contexts
-implementing the highest OpenGL version supported by the hardware.
-Such contexts may also be compatible with lower OpenGL versions.
-Access to functions from OpenGL
-versions above 1.1 requires to load function pointers at runtime on these platforms.
-FLTK recommends to use the GLEW library to perform this. It is therefore
-necessary to install the GLEW library (see below).
-
-<b>On the macOS platform</b>, MacOS 10.7 or above is required;
-GLEW is possible but not necessary. FLTK creates contexts for OpenGL
-versions 1 and 2 without the FL_OPENGL3
-flag and for OpenGL versions 3.2 and above with it.
-
-\par GLEW installation (Unix/Linux and MSWindows platforms)
-GLEW is available as a package for most Linux distributions and in source form at http://glew.sourceforge.net/.
-For the MSWindows platform, a Visual Studio static library (glew32.lib) can be downloaded from the same web site; a MinGW-style static library (libglew32.a) can be built from source with the make command.
-
-\par  Source-level changes for OpenGL 3:
-\li Put this in all OpenGL-using source files (instead of \#include <FL/gl.h>, 
-and before \#include <FL/glut.h> if you use GLUT):
-\code
-#if defined(__APPLE__)
-#  include <OpenGL/gl3.h> // defines OpenGL 3.0+ functions
-#else
-#  if defined(WIN32)
-#    define GLEW_STATIC 1
-#  endif
-#  include <GL/glew.h>
-#endif
-\endcode
-\li Add the <tt>FL_OPENGL3</tt> flag when calling Fl_Gl_Window::mode(int a)
-or glutInitDisplayMode().
-\li Put this in the <tt>handle(int event)</tt> member function of the first to be created 
-among your Fl_Gl_Window-derived classes:
-\code
-#ifndef __APPLE__
-    static int first = 1;
-    if (first && event == FL_SHOW && shown()) {
-      first = 0;
-      make_current();
-      glewInit(); // defines pters to functions of OpenGL V 1.2 and above
-    }
-#endif
-\endcode
-\li Alternatively, if you use GLUT, put
-\code
-#ifndef __APPLE__
-  glewInit(); // defines pters to functions of OpenGL V 1.2 and above
-#endif
-\endcode
-after the first glutCreateWindow() call.
-
-If GLEW is installed on the Mac OS development platform, it is possible 
-to use the same code for all platforms, with one exception: put
-\code
-#ifdef __APPLE__
-glewExperimental = GL_TRUE;
-#endif
-\endcode
-before the glewInit() call.
-
-\par Changes in the build process
-Link with libGLEW.so (on Unix/Linux), libglew32.a (with MinGW) or glew32.lib 
-(with MS Visual Studio); no change is needed on the Mac OS platform.
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="subclassing.html">
-    [Prev]
-    Adding and Extending Widgets
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="fluid.html">
-    Programming with FLUID
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/osissues.dox
+++ /dev/null
@@ -1,935 +1,0 @@
-/**
-
- \page	osissues	Operating System Issues
-
-This appendix describes the operating system specific interfaces in FLTK:
-\li \ref osissues_accessing
-\li \ref osissues_unix
-\li \ref osissues_win32
-\li \ref osissues_macos
-
-\section osissues_accessing Accessing the OS Interfaces
-
-All programs that need to access the operating system
-specific interfaces must include the following header file:
-
-\code
-#include <FL/x.H>
-\endcode
-
-Despite the name, this header file will define the appropriate interface
-for your environment.
-
-\note This header file name "x.H" is changed in FLTK 1.4.0 to the better
-  name "platform.H". FLTK 1.3.5 now has a compatibility header file
-  FL/platform.H that includes FL/x.H to help you move to FLTK 1.4.0.
-  If your code is targeted at FLTK 1.3.5 or higher you can safely
-  change it to include FL/platform.H instead. FLTK 1.4.x will keep the
-  file "x.H" for a few releases for backwards compatibility.
-
-The pages that follow describe the functionality that is provided for each
-operating system.
-
-<CENTER>
-<TABLE WIDTH="90%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
-<TR>
-	<TD><B>WARNING:</B>
-
-	The interfaces provided by this header file may
-	change radically in new FLTK releases. Use them only
-	when an existing generic FLTK interface is not
-	sufficient.
-
-	</TD>
-</TR>
-</TABLE>
-</CENTER>
-
-\section osissues_unix The UNIX (X11) Interface
-
-The UNIX interface provides access to the X Window System
-state information and data structures.
-
-\subsection osissues_x_events Handling Other X Events
-
-void Fl::add_handler(int (*f)(int))
-
-\par
-Installs a function to parse unrecognized events. If FLTK
-cannot figure out what to do with an event, it calls each of
-these functions (most recent first) until one of them returns
-non-zero. If none of them returns non-zero then the event is
-ignored.
-
-\par
-FLTK calls this for any X events it does not recognize, or X
-events with a window ID that FLTK does not recognize. You can
-look at the X event in the \c fl_xevent variable.
-
-\par
-The argument is the FLTK event type that was not handled, or
-zero for unrecognized X events. These handlers are also called
-for global shortcuts and some other events that the widget they
-were passed to did not handle, for example
-\c FL_SHORTCUT.
-
-extern XEvent *fl_xevent
-
-\par
-This variable contains the most recent X event.
-
-extern ulong fl_event_time
-
-\par
-This variable contains the time stamp from the most recent X
-event that reported it; not all events do. Many X calls like cut
-and paste need this value.
-
-Window fl_xid(const Fl_Window *)
-
-\par
-Returns the XID for a window, or zero if not \c shown().
-
-Fl_Window *fl_find(ulong xid)
-
-\par
-Returns the Fl_Window that corresponds to the given
-XID, or \c NULL if not found. This function uses a cache
-so it is slightly faster than iterating through the windows
-yourself.
-
-int fl_handle(const XEvent &)
-
-\par
-This call allows you to supply the X events to FLTK, which
-may allow FLTK to cooperate with another toolkit or library. The
-return value is non-zero if FLTK understood the event. If the
-window does not belong to FLTK and the \c add_handler()
-functions all return 0, this function will return false.
-
-\par
-Besides feeding events your code should call Fl::flush()
-periodically so that FLTK redraws its windows.
-
-\par
-This function will call the callback functions. It will not
-return until they complete. In particular, if a callback pops up
-a modal window by calling
-fl_ask(),
-for instance, it will not return until the modal function
-returns.
-
-\subsection osissues_drawing_xlib Drawing using Xlib
-
-The following global variables are set before
-Fl_Widget::draw() is called, or by Fl_Window::make_current():
-
-\code
-extern Display *fl_display;
-extern Window fl_window;
-extern GC fl_gc;
-extern int fl_screen;
-extern XVisualInfo *fl_visual;
-extern Colormap fl_colormap;
-\endcode
-
-You must use them to produce Xlib calls.  Don't attempt to change
-them. A typical X drawing call is written like this:
-
-\code
-XDrawSomething(fl_display, fl_window, fl_gc, ...);
-\endcode
-
-Other information such as the position or size of the X
-window can be found by looking at Fl_Window::current(),
-which returns a pointer to the Fl_Window being drawn.
-
-unsigned long fl_xpixel(Fl_Color i) <br>
-unsigned long fl_xpixel(uchar r, uchar g, uchar b)
-
-\par
-Returns the X pixel number used to draw the given FLTK color
-index or RGB color. This is the X pixel that
-\ref drawing_colors "fl_color()"
-would use.
-
-int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b)
-
-\par
-Convert a name into the red, green, and blue values of a color
-by parsing the X11 color names. On other systems, \c fl_parse_color()
-can only convert names in hexadecimal encoding, for example <tt>\#ff8083</tt>.
- 
-extern XFontStruct *fl_xfont
-
-\par
-Points to the font selected by the most recent
-\ref ssect_Fonts "fl_font()".
-This is not necessarily the current font of \c fl_gc,
-which is not set until
-\ref ssect_Text "fl_draw()"
-is called. If FLTK was compiled with Xft support, \c fl_xfont
-will usually be 0 and \c fl_xftfont will contain a pointer 
-to the \c XftFont structure instead.
-
-extern void *fl_xftfont
-
-\par
-If FLTK was compiled with Xft support enabled, \c fl_xftfont
-points to the xft font selected by the most recent
-\ref ssect_Fonts "fl_font()".
-Otherwise it will be 0. \c fl_xftfont should be cast to 
-<tt>XftFont*</tt>.
-
-\subsection osissues_xvisual Changing the Display, Screen, or X Visual
-
-FLTK uses only a single display, screen, X visual, and X
-colormap. This greatly simplifies its internal structure and
-makes it much smaller and faster. You can change which it uses
-by setting global variables
-<I>
-before the first Fl_Window::show() is called.
-</I>
-You may also want to call Fl::visual(), which is a portable interface
-to get a full color and/or double buffered visual.
-
-int Fl::display(const char *)
-
-\par
-Set which X display to use.  This actually does
-<tt>putenv("DISPLAY=...")</tt> so that child programs
-will display on the same screen if called with \c exec().
-This must be done before the display is opened. This call is
-provided under MacOS and WIN32 but it has no effect.
-
-extern Display *fl_display
-
-\par
-The open X display. This is needed as an argument to most
-Xlib calls. Don't attempt to change it! This is \c NULL
-before the display is opened.
-
-void fl_open_display()
-
-\par
-Opens the display. Does nothing if it is already open. This
-will make sure \c fl_display is non-zero. You should call
-this if you wish to do X calls and there is a chance that your
-code will be called before the first \c show() of a window.
-
-\par
-This may call Fl::abort() if there is an error opening the display.
-
-void fl_close_display()
-
-\par
-This closes the X connection. You do \e not need to call
-this to exit, and in fact it is faster to not do so! It may be
-useful to call this if you want your program to continue without
-the X connection. You cannot open the display again, and
-probably cannot call any FLTK functions.
-
-extern int fl_screen
-
-\par
-Which screen number to use. This is set by
-\c fl_open_display() to the default screen. You can change
-it by setting this to a different value immediately afterwards.
-It can also be set by changing the last number in the
-Fl::display() string to "host:0.#".
-
-extern XVisualInfo *fl_visual <br>
-extern Colormap fl_colormap
-
-\par
-The visual and colormap that FLTK will use for all windows.
-These are set by \c fl_open_display() to the default
-visual and colormap. You can change them before calling
-\c show() on the first window. Typical code for changing
-the default visual is:
-\code
-Fl::args(argc, argv); // do this first so $DISPLAY is set
-fl_open_display();
-fl_visual = find_a_good_visual(fl_display, fl_screen);
-if (!fl_visual) Fl::abort("No good visual");
-fl_colormap = make_a_colormap(fl_display, fl_visual->visual, fl_visual->depth);
-// it is now ok to show() windows:
-window->show(argc, argv);
-\endcode
-
-\subsection osissues_specialx Using a Subclass of Fl_Window for Special X Stuff
-
-FLTK can manage an X window on a different screen, visual
-and/or colormap, you just can't use FLTK's drawing routines to
-draw into it. But you can write your own \c draw() method
-that uses Xlib (and/or OpenGL) calls only.
-
-FLTK can also manage XID's provided by other libraries or
-programs, and call those libraries when the window needs to be
-redrawn.
-
-To do this, you need to make a subclass of
-Fl_Window
-and override some of these virtual functions:
-
-virtual void Fl_Window::show()
-
-\par
-If the window is already \c shown() this must cause it
-to be raised, this can usually be done by calling Fl_Window::show().
-If not \c shown() your implementation must call either
-Fl_X::set_xid() or Fl_X::make_xid().
-
-\par
-An example:
-\code
-void MyWindow::show() {
-  if (shown()) {Fl_Window::show(); return;}  // you must do this!
-  fl_open_display();	// necessary if this is first window
-  // we only calculate the necessary visual colormap once:
-  static XVisualInfo *visual;
-  static Colormap colormap;
-  if (!visual) {
-    visual = figure_out_visual();
-    colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-                               vis->visual, AllocNone);
-  }
-  Fl_X::make_xid(this, visual, colormap);
-}
-\endcode
-
-\verbatim
-Fl_X *Fl_X::set_xid(Fl_Window*, Window xid)
-\endverbatim
-
-\par
-Allocate a hidden class called an Fl_X, put the
-XID into it, and set a pointer to it from the Fl_Window.
-This causes Fl_Window::shown() to return true.
-
-void Fl_X::make_xid(Fl_Window*, XVisualInfo* = fl_visual, Colormap = fl_colormap)
-
-\par
-This static method does the most onerous parts of creating an
-X window, including setting the label, resize limitations, etc.
-It then does Fl_X::set_xid() with this new window and maps the window.
-
-virtual void Fl_Window::flush()
-
-\par
-This virtual function is called by Fl::flush() to
-update the window. For FLTK's own windows it does this by
-setting the global variables \c fl_window and \c fl_gc
-and then calling the \c draw() method.  For
-your own windows you might just want to put all the drawing code
-in here.
-
-\par
-The X region that is a combination of all \c damage()
-calls done so far is in <tt>Fl_X::i(this)->region</tt>. If
-\c NULL then you should redraw the entire window. The
-undocumented function \c fl_clip_region(XRegion) will
-initialize the FLTK clip stack with a region or \c NULL
-for no clipping. You must set region to \c NULL afterwards
-as \c fl_clip_region() will own and delete it when
-done.
-
-\par
-If <tt>damage() & FL_DAMAGE_EXPOSE</tt> then only X
-expose events have happened. This may be useful if you have an
-undamaged image (such as a backing buffer) around.
-
-\par
-Here is a sample where an undamaged image is kept somewhere:
-\code
-void MyWindow::flush() {
-  fl_clip_region(Fl_X::i(this)->region);
-  Fl_X::i(this)->region = 0;
-  if (damage() != 2) {... draw things into backing store ...}
-  ... copy backing store to window ...
-}
-\endcode
-
-virtual void Fl_Window::hide()
-
-\par
-Destroy the window server copy of the window. Usually you
-will destroy contexts, pixmaps, or other resources used by the
-window, and then call Fl_Window::hide() to get rid of
-the main window identified by \c xid(). If you override
-this, you must also override the destructor as shown:
-\code
-void MyWindow::hide() {
-  if (mypixmap) {
-    XFreePixmap(fl_display,mypixmap);
-    mypixmap = 0;
-  }
-  Fl_Window::hide(); // you must call this
-}
-\endcode
-
-virtual void Fl_Window::~Fl_Window()
-
-\par
-Because of the way C++ works, if you override \c hide()
-you \e must override the destructor as well (otherwise only
-the base class \c hide() is called):
-\code
-MyWindow::~MyWindow() {
-  hide();
-}
-\endcode
-
-\note Access to the Fl_X hidden class requires to \#define FL_INTERNALS
-before compilation.
-
-\subsection osissues_x_icon Setting the Icon of a Window
-
-FLTK currently supports setting a window's icon \b before it
-is shown using the Fl_Window::icon() method.
-
-void Fl_Window::icon(const void *)
-
-\par
-Sets the icon for the window to the passed pointer. You will
-need to cast the icon \c Pixmap to a \c char* when
-calling this method. To set a monochrome icon using a bitmap compiled
-with your application use:
-\code
-#include "icon.xbm"
-
-fl_open_display(); // needed if display has not been previously opened
-
-Pixmap p = XCreateBitmapFromData(fl_display, DefaultRootWindow(fl_display),
-                                 icon_bits, icon_width, icon_height);
-
-window->icon((const void*)p);
-\endcode
-
-\par
-To use a multi-colored icon, the XPM format and library
-should be used as follows:
-\code
-#include <X11/xpm.h>
-#include "icon.xpm"
-
-fl_open_display();                // needed if display has not been previously opened
-
-Pixmap p, mask;
-
-XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display),
-                                 icon_xpm, &p, &mask, NULL);
-
-window->icon((const void *)p);
-\endcode
-
-\par
-When using the Xpm library, be sure to include it in the list
-of libraries that are used to link the application (usually "-lXpm").
-
-<CENTER>
-<TABLE WIDTH="90%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
-<TR>
-	<TD><B>NOTE:</B>
-	
-	You must call Fl_Window::show(int argc, char** argv)
-	for the icon to be used. The Fl_Window::show() method
-	does not bind the icon to the window.
-
-	</TD>
-</TR>
-</TABLE>
-</CENTER>
-
-\subsection osissues_xresources X Resources
-
-When the
-Fl_Window::show(int argc, char** argv)
-method is called, FLTK looks for the following X resources:
-
-\li \c background - The default background color
-	for widgets (color).
-
-\li \c dndTextOps - The default setting for
-	drag and drop text operations (boolean).
-
-\li \c foreground - The default foreground (label)
-	color for widgets (color).
-
-\li \c scheme - The default scheme to use (string).
-
-\li \c selectBackground - The default selection
-	color for menus, etc. (color).
-
-\li <tt>Text.background</tt> - The default background
-	color for text fields (color).
-
-\li \c tooltips - The default setting for
-	tooltips (boolean).
-
-\li \c visibleFocus - The default setting for
-	visible keyboard focus on non-text widgets (boolean).
-
-Resources associated with the first window's Fl_Window::xclass()
-string are queried first, or if no class has been specified then
-the class "fltk" is used (e.g. <tt>fltk.background</tt>). If no
-match is found, a global search is done (e.g.
-<tt>*background</tt>).
-
-\section osissues_win32 The Windows (WIN32) Interface
-
-The Windows interface provides access to the WIN32 GDI
-state information and data structures.
-
-\subsection non_ascii_filenames Using filenames with non-ASCII characters
-
-In FLTK, all strings, including filenames, are UTF-8 encoded. The utility functions
-fl_fopen() and fl_open() allow to open files potentially having non-ASCII names in a 
-cross-platform fashion, whereas the standard fopen()/open() functions fail to do so.
-
-\subsection osissues_wm_quit Responding to WM_QUIT
-
-FLTK will intercept WM_QUIT messages that are directed towards the
-thread that runs the main loop. These are converted to SIGTERM signals
-via \c raise(). This allows you to deal with outside termination
-requests with the same code on both Windows and UNIX systems.
-Other processes can send this message via \c PostThreadMessage() in
-order to request, rather than force your application to terminate.
-
-\subsection osissues_win32_messages Handling Other WIN32 Messages
-
-By default a single WNDCLASSEX called "FLTK" is
-created. All Fl_Window 's are of this class unless you
-use Fl_Window::xclass(). The window class is created
-the first time Fl_Window::show() is called.
-
-You can probably combine FLTK with other libraries that make
-their own WIN32 window classes. The easiest way is to call
-Fl::wait(), as it will call \c DispatchMessage()
-for all messages to the other windows. If necessary you can let
-the other library take over as long as it calls
-\c DispatchMessage(), but you will have to arrange for the
-function Fl::flush() to be called regularly so that
-widgets are updated, timeouts are handled, and the idle
-functions are called.
-
-extern MSG fl_msg
-
-\par
-This variable contains the most recent message read by
-\c GetMessage(), which is called by Fl::wait().
-This may not be the
-most recent message sent to an FLTK window, because silly WIN32
-calls the handle procedures directly for some events (sigh).
-
-void Fl::add_handler(int (*f)(int))
-
-\par
-Installs a function to parse unrecognized messages sent to
-FLTK windows. If FLTK cannot figure out what to do with a
-message, it calls each of these functions (most recent first)
-until one of them returns non-zero. The argument passed to the
-functions is the FLTK event that was not handled or zero for
-unknown messages. If all the handlers return zero then FLTK
-calls \c DefWindowProc().
-
-HWND fl_xid(const Fl_Window *)
-
-\par
-Returns the window handle for a Fl_Window, or zero
-if not \c shown().
-
-Fl_Window *fl_find(HWND xid)
-
-\par
-Returns the Fl_Window that corresponds to the given
-window handle, or \c NULL if not found. This function uses
-a cache so it is slightly faster than iterating through the
-windows yourself.
-
-\subsection osissues_win32_gdi Drawing Things Using the WIN32 GDI
-
-When the virtual function Fl_Widget::draw() is
-called, FLTK stores all the extra arguments you need to
-make a proper GDI call in some global variables:
-
-\code
-extern HINSTANCE fl_display;
-extern HWND fl_window;
-extern HDC fl_gc;
-COLORREF fl_RGB();
-HPEN fl_pen();
-HBRUSH fl_brush();
-\endcode
-
-These global variables are set before Fl_Widget::draw() is called, or by
-Fl_Window::make_current().
-You can refer to them when needed to produce GDI calls, but don't
-attempt to change them. The functions return GDI objects for
-the current color set by
-\ref drawing_colors "fl_color()"
-and are created as
-needed and cached. A typical GDI drawing call is written like
-this:
-
-\code
-DrawSomething(fl_gc, ..., fl_brush());
-\endcode
-
-It may also be useful to refer to Fl_Window::current()
-to get the window's size or position.
-
-\subsection osissues_icon_windows Setting the Icon of a Window
-
-FLTK currently supports setting a window's icon *before* it
-is shown using the Fl_Window::icon() method.
-
-void Fl_Window::icon(const void *)
-
-\par
-Sets the icon for the window to the passed pointer. You will
-need to cast the \c HICON handle to a \c char* when
-calling this method. To set the icon using an icon resource
-compiled with your application use:
-\code
-window->icon((const void *)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON)));
-\endcode
-
-\par
-You can also use the \c LoadImage() and related
-functions to load specific resolutions or create the icon from
-bitmap data.
-
-<CENTER>
-<TABLE WIDTH="90%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
-<TR>
-	<TD><B>NOTE:</B>
-	
-	You must call Fl_Window::show(int argc, char** argv)
-	for the icon to be used. The Fl_Window::show() method
-	does not bind the icon to the window.
-
-	</TD>
-</TR>
-</TABLE>
-</CENTER>
-
-\subsection osissues_msdos_console How to Not Get a MSDOS Console Window
-
-WIN32 has a really stupid mode switch stored in the
-executables that controls whether or not to make a console
-window.
-
-To always get a console window you simply create a console
-application (the "/SUBSYSTEM:CONSOLE" option for the
-linker). For a GUI-only application create a WIN32 application
-(the "/SUBSYSTEM:WINDOWS" option for the linker).
-
-FLTK includes a \c WinMain() function that calls the
-ANSI standard \c main() entry point for you.
-<I>
-This function creates a console window when you use the debug
-version of the library.
-</I>
-
-WIN32 applications without a console cannot write to
-\c stdout or \c stderr, even if they are run from a
-console window. Any output is silently thrown away.
-Additionally, WIN32 applications are run in the background by
-the console, although you can use "start /wait program" to run
-them in the foreground.
-
-\subsection osissues_win32_problems Known WIN32 Bugs and Problems
-
-The following is a list of known bugs and problems in the WIN32
-version of FLTK:
-
-\li	If a program is deactivated, <tt>Fl::wait()</tt>
-	does not return until it is activated again, even though
-	many events are delivered to the program. This can cause
-	idle background processes to stop unexpectedly. This
-	also happens while the user is dragging or resizing
-	windows or otherwise holding the mouse down. We were
-	forced to remove most of the efficiency FLTK uses for
-	redrawing in order to get windows to update while being
-	moved. This is a design error in WIN32 and probably
-	impossible to get around.
-
-\li	<tt>Fl_Gl_Window::can_do_overlay()</tt> returns true
-	until the first time it attempts to draw an overlay, and
-	then correctly returns whether or not there is overlay
-	hardware.
-
-\li	<tt>SetCapture</tt> (used by <tt>Fl::grab()</tt>)
-	doesn't work, and the main window title bar turns gray
-	while menus are popped up.
-
-\li	Compilation with <tt>gcc 3.4.4</tt> and <tt>-Os</tt> exposes an
-	optimisation bug in gcc. The symptom is that when drawing
-	filled circles only the perimeter is drawn. This can for instance
-	be seen in the symbols demo. Other optimisation options such
-	as -O2 and -O3 seem to work OK. More details can be found
-	in STR#1656
-
-\section osissues_macos The Apple OS X Interface
-
-FLTK supports Apple OS X using the Apple Cocoa library. Older
-versions of MacOS are no longer supported.
-
-Control, Option, and Command Modifier Keys
-
-\par
-FLTK maps the Mac 'control' key to \c FL_CTRL, the
-'option' key to \c FL_ALT and the 'Apple' key to
-\c FL_META. Furthermore, \c FL_COMMAND designates the 'Apple' key on Mac OS X
-and the 'control' key on other platforms.
-Keyboard events return the key name in
-Fl::event_key() and the keystroke translation in
-Fl::event_text(). For example, typing Option-Y on a Mac
-US keyboard will set \c FL_ALT in Fl::event_state(),
-set Fl::event_key() to 'y' and return the Yen symbol in
-Fl::event_text().
-
-Right Click simulation with Ctrl Click
-\par
-The Apple HIG guidelines indicate applications should support
-'Ctrl Click' to simulate 'Right Click' for e.g. context menus,
-so users with one-button mice and one-click trackpads can still
-access right-click features. However, paraphrasing 
-<A HREF="http://www.fltk.org/newsgroups.php?gfltk.coredev+v:14725">
-Manolo's comment on the fltk.coredev newsgroup</A>:
-\par
-<UL><LI>
-    <I>FLTK does /not/ support Ctrl-Click == Right Click itself because Mac OS
-    X event processing doesn't support this at the system level: the system
-    reports left-clicks with the ctrl modifier when the user ctrl-clicks, and
-    OS X system preferences don't allow changing this behavior. Therefore,
-    applications must handle simulation of Right Click with Ctrl Click
-    in the application code.</I>
-</LI></UL>
-\par
-Ian MacArthur provided the following handle() method code snippet
-showing an example of how to do this:
-\code
-    case FL_PUSH:
-    {
-	int btn = Fl::event_button();
-#ifdef __APPLE__
-	int ev_state = Fl::event_state();
-#endif
-	//
-	// Context menu can be called up in one of two ways: -
-	//     1 - right click, as normally used on Windows and Linux
-	//     2 - Ctrl + left click, as sometimes used on Mac
-	//
-#ifdef __APPLE__
-	// On apple, check right click, and ctrl+left click
-	if ((btn == FL_RIGHT_MOUSE) || (ev_state == (FL_CTRL | FL_BUTTON1)))
-#else
-	// On other platforms, only check right click as ctrl+left is used for selections
-	if (btn == FL_RIGHT_MOUSE)
-#endif
-	{
-	    // Did we right click on the object?..
-\endcode
-\par
-There is a thread about this subject on fltk.coredev (Aug 1-14, 2014)
-entitled "[RFC] Right click emulation for one button mouse on Mac".
-
-Apple "Quit" Event
-
-\par
-When the user presses Cmd-Q or requests a termination of the
-application, FLTK reacts sending an \c FL_CLOSE event to all open
-windows. If any window remains open, the termination request aborts,
-and the app continues. If all windows close, FLTK default behaviour
-is to terminate the application immediately, without letting Fl::run()
-return. Consequently, potential cleanup code placed after the Fl::run()
-call does not run, and potential global destructors that would run
-after main() would return do not run. All code that should run so
-the app cleanly terminates must therefore be placed in
-window callbacks (which run when windows are closed) or in atexit()
-functions.
-Alternatively, FLTK can be directed to just terminate the event loop
-and therefore let potential cleanup code placed after return from Fl::run()
-and from main() execute. This is obtained setting global variable
-\ref fl_mac_quit_early to 0.
-
-Apple "Open" Event
-
-\par
-Whenever the user drops a file onto an application icon, OS X
-generates an Apple Event of the type "Open". You can have FLTK
-notify you of an Open event by calling the \ref fl_open_callback 
-function.
-
-void fl_open_display()
-
-\par
-Opens the display. Does nothing if it is already open. You should call
-this if you wish to do Cocoa or Quartz calls and there is a chance that your
-code will be called before the first \c show() of a window.
-
-Window fl_xid(const Fl_Window *)
-
-\par
-Returns the window reference for an Fl_Window, or
-\c NULL if the window has not been shown. This reference is a pointer
-to an instance of the subclass FLWindow of Cocoa's NSWindow class.
-
-Fl_Window *fl_find(Window xid)
-
-\par
-Returns the Fl_Window that corresponds to the given window reference,
-or \c NULL if not found.
-
-void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut) 
-
-\par
-Attaches the callback \c cb to the "About myprog" item of the system application menu.
-\c cb will be called with NULL first argument and \c user_data second argument.
-
-Fl_Sys_Menu_Bar class
-
-\par
-The Fl_Sys_Menu_Bar class allows to build menu bars that, on Mac OS X, are
-placed in the system menu bar (at top-left of display), and, on other platforms,
-at a user-chosen location of a user-chosen window.
-
-
-\subsection osissues_icon_osx Setting the icon of an application
-\li First, create a .icns file containing several copies of your icon of decreasing sizes.
-This can be done using the Preview application or the Icon Composer application
-available in "Graphics Tools for Xcode". To create a high resolution icon file,
-it is necessary to use the iconutil command-line utility.
-\li Put your .icns file in the Resources subdirectory of your application bundle.
-\li Add these two lines to the Info.plist file of your application bundle
-\verbatim
-<key>CFBundleIconFile</key>
-<string>foo.icns</string>
-\endverbatim
-replacing <tt>foo</tt> by your application name. If you use Xcode, just add your .icns file to your 
-application target.
-
-
-
-\subsection osissues_quartz Drawing Things Using Quartz
-All code inside Fl_Widget::draw()
-is expected to call Quartz drawing functions. The Quartz coordinate system 
-is flipped to match
-FLTK's coordinate system. The origin for all drawing is in the top
-left corner of the enclosing Fl_Window. The global variable
-\c fl_gc (of type \c CGContextRef) is the appropriate Quartz 2D drawing environment.
-Include FL/x.H to declare the \c fl_gc variable.
-
-\subsection osissues_localize Internationalization
-All FLTK programs contain an application menu with, e.g., the About xxx, Hide xxx, and Quit xxx items.
-This menu can be internationalized/localized by any of two means.
-\li using the Fl_Mac_App_Menu class.
-\li using the standard Mac OS X localization procedure. Create a language-specific .lproj directory 
-(e.g., <tt>German.lproj</tt>) in the Resources subdirectory of the application bundle. 
-Create therein a <tt>Localizable.strings</tt> file that translates all menu items to this language. 
-The German <tt>Localizable.strings</tt> file, for example, contains:
-\verbatim
-"About %@" = "Über %@";
-"Print Front Window"="Frontfenster drucken";
-"Services" = "Dienste";
-"Hide %@"="%@ ausblenden";
-"Hide Others"="Andere ausblenden";
-"Show All"="Alle einblenden";
-"Quit %@"="%@ beenden";
-\endverbatim
-Set <tt>"Print Front Window" = "";</tt> therein so the application menu doesn't show a "Print Front Window" item.
-To localize the application name itself, create a file <tt>InfoPlist.strings</tt> in each .lproj directory
-and put <tt>CFBundleName = "localized name";</tt> in each such file.
-
-\subsection osissues_retina OpenGL and 'retina' displays
-It is possible to have OpenGL produce graphics at the high pixel resolution allowed by the so-called 'retina' displays
-present on recent Apple hardware.
-For this, call 
-\verbatim
-Fl::use_high_res_GL(1); 
-\endverbatim
-before any Fl_Gl_Window is shown. Also, adapt your Fl_Gl_Window::draw() and Fl_Gl_Window::draw_overlay() methods replacing
-\verbatim
-glViewport(0, 0, w(), h());
-\endverbatim
-by
-\verbatim
-glViewport(0, 0, pixel_w(), pixel_h());
-\endverbatim
-making use of the Fl_Gl_Window::pixel_w() and Fl_Gl_Window::pixel_h() methods that return the width and height of
-the GL scene in pixels: if the Fl_Gl_Window is mapped on a retina display, these methods return twice as much as
-reported by Fl_Widget::w() and Fl_Widget::h(); if it's mapped on a regular display, they return the same values
-as w() and h(). These methods dynamically change their values if the window is moved into/out from a retina
-display. If Fl::use_high_res_GL(1) is not called, all Fl_Gl_Window 's are drawn at low resolution.
-These methods are synonyms of w() and h() on non-Mac OS X platforms, so the source code remains cross-platform.
-
-The Fl_Gl_Window::pixels_per_unit() method is useful when the OpenGL code depends on the pixel dimension
-of the GL scene. This occurs, e.g., if a window's handle() method uses Fl::event_x() and Fl::event_y()
-whose returned values should be multiplied by Fl_Gl_Window::pixels_per_unit() to obtain the adequate pixel units.
-This method may also be useful, for example, to adjust the width of a line in a high resolution GL scene.
-
-\subsection double_window Fl_Double_Window
-
-OS X double-buffers all windows automatically. On OS X, Fl_Window and Fl_Double_Window are handled
-internally in the same way.
-
-\subsection osissues_mac_files Mac File System Specifics
-
-\par Resource Forks
-
-FLTK does not access the resource fork of an application.
-However, a minimal resource fork must be created for OS X
-applications. Starting with OS X 10.6, resource forks are
-no longer needed.
-
-<CENTER>
-<TABLE WIDTH="80%" BORDER="1" BGCOLOR="#cccccc" CELLPADDING="5">
-<TR><TD><B>Caution (OS X 10.2 and older):</B>
-
-When using UNIX commands to copy or move executables, OS X
-will NOT copy any resource forks! For copying and moving use
-CpMac and MvMac respectively. For creating a tar archive, all
-executables need to be stripped from their Resource Fork before
-packing, e.g. "DeRez fluid > fluid.r". After unpacking the
-Resource Fork needs to be reattached, e.g. "Rez fluid.r -o
-fluid".
-</TD></TR></TABLE>
-</CENTER>
-
-It is advisable to use the Finder for moving and copying and
-Mac archiving tools like Sit for distribution as they will
-handle the Resource Fork correctly. 
-
-\par Mac File Paths
-
-FLTK uses UTF-8-encoded UNIX-style filenames and paths.
-
-\sa  group_macosx 
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="forms.html">
-    [Prev]
-    Forms Compatibility
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="migration_1_1.html">
-    Migrating Code from FLTK 1.0 to 1.1
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/positioner.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/preface.dox
+++ /dev/null
@@ -1,112 +1,0 @@
-/**
-
- \page preface Preface
-
-This manual describes the Fast Light Tool Kit ("FLTK")
-version 1.3.5, a C++ Graphical User Interface
-("GUI") toolkit for UNIX, Microsoft Windows and Apple OS X. Each
-of the chapters in this manual is designed as a tutorial for
-using FLTK, while the appendices provide a convenient reference
-for all FLTK widgets, functions, and operating system
-interfaces.
-
-<B>This manual may be printed, modified, and/or used under
-the terms of the FLTK license provided in \ref license.</B>
-
-\section preface_organisation Organization
-
-This manual is organized into the following chapters and appendices:
-
-\li \ref intro
-\li \ref basics
-\li \ref common
-\li \ref editor
-\li \ref drawing
-\li \ref events
-\li \ref subclassing
-\li \ref opengl
-\li \ref fluid
-\li \ref advanced
-\li \ref unicode
-\li \ref enumerations
-\li \ref glut
-\li \ref forms
-\li \ref osissues
-\li \ref migration_1_1
-\li \ref migration_1_3
-\li \ref development
-\li \ref license
-\li \ref examples
-
-\section preface_conventions Conventions
-
-This manual was generated using Doxygen
-(see http://www.doxygen.org/)
-to process the source code itself, special comments in the code,
-and additional documentation files.
-In general, Doxygen recognizes and denotes the following entities as shown:
-- classes, such as Fl_Widget,
-- methods, such as Fl_Widget::callback(Fl_Callback* cb, void* p),
-- functions, such as fl_draw(const char *str, int x, int y),
-- internal links, such as \ref preface_conventions,
-- external links, such as http://www.stack.nl/~dimitri/doxygen/
-
-Other code samples and commands are shown in <tt>regular courier type</tt>.
-
-\section preface_abbreviations Abbreviations
-
-The following abbreviations are used in this manual:
-
-\par  X11
-The X Window System version 11.
-
-\par Xlib
-The X Window System interface library.
-
-\par MS Windows, <tt>WIN32</tt>
-The Microsoft Windows Application Programmer's Interface for Windows 2000, 
-Windows XP, Windows Vista, and Windows 7. FLTK uses the preprocessor definition
-<tt>WIN32</tt> for the 32 bit and 64 bit MS Windows API.
-
-\par OS X, <tt>__APPLE__</tt>
-The Apple desktop operating sytem OS X 10.0 and later. MacOS 8 and 9 support
-was dropped after FLTK 1.0.10. FLTK uses the preprocessor definition
-<tt>__APPLE__</tt> for OS X.
-
-\section preface_copyrights Copyrights and Trademarks
-
-FLTK is Copyright 1998-2016 by Bill Spitzak and others.  Use and
-distribution of FLTK is governed by the GNU Library General Public
-License with 4 exceptions, located in \ref license.
-
-UNIX is a registered trademark of the X Open Group, Inc. 
-Microsoft and Windows are registered trademarks of Microsoft
-Corporation. OpenGL is a registered trademark of Silicon
-Graphics, Inc. Apple, Macintosh, MacOS, and Mac OS X are
-registered trademarks of Apple Computer, Inc.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="index.html">
-    [Prev]
-    Main Page
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="intro.html">
-    Introduction to FLTK
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/resizebox1.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/resizebox2.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/round_clock.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/scrollbar.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/slider.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/subclassing.dox
+++ /dev/null
@@ -1,568 +1,0 @@
-/**
-
- \page	subclassing Adding and Extending Widgets
-
-
-This chapter describes how to add your own widgets or extend existing
-widgets in FLTK.
-
-\section subclassing_subclassing Subclassing
-
-New widgets are created by \e subclassing an existing FLTK widget,
-typically Fl_Widget for controls and Fl_Group for composite widgets.
-
-A control widget typically interacts with the user to receive and/or
-display a value of some sort. 
-
-A composite widget holds a list of child widgets and handles moving,
-sizing, showing, or hiding them as needed. Fl_Group is the main
-composite widget class in FLTK, and all of the other composite widgets
-(Fl_Pack, Fl_Scroll, Fl_Tabs, Fl_Tile, and Fl_Window) are subclasses of it. 
-
-You can also subclass other existing widgets to provide a different
-look or user-interface. For example, the button widgets are all
-subclasses of Fl_Button since they all interact with the user
-via a mouse button click.  The only difference is the code that draws
-the face of the button. 
-
-\section subclassing_fl_widget Making a Subclass of Fl_Widget
-
-Your subclasses can directly descend from Fl_Widget or any
-subclass of Fl_Widget. Fl_Widget has only four
-virtual methods, and overriding some or all of these may be necessary.
-
-\section subclassing_constructor The Constructor
-
-The constructor should have the following arguments:
-
-\code
-MyClass(int x, int y, int w, int h, const char *label = 0);
-\endcode
-
-This will allow the class to be used in
-\ref fluid "FLUID"
-without problems.
-
-The constructor must call the constructor for the base class and
-pass the same arguments: 
-
-\code
-MyClass::MyClass(int x, int y, int w, int h, const char *label)
-: Fl_Widget(x, y, w, h, label) {
-// do initialization stuff...
-}
-\endcode
-
-Fl_Widget's protected constructor sets \p x(), \p y(),
-\p w(), \p h(), and \p label() to the passed values
-and initializes the other instance variables to:
-
-\code
-type(0);
-box(FL_NO_BOX);
-color(FL_BACKGROUND_COLOR);
-selection_color(FL_BACKGROUND_COLOR);
-labeltype(FL_NORMAL_LABEL);
-labelstyle(FL_NORMAL_STYLE);
-labelsize(FL_NORMAL_SIZE);
-labelcolor(FL_FOREGROUND_COLOR);
-align(FL_ALIGN_CENTER);
-callback(default_callback,0);
-flags(ACTIVE|VISIBLE);
-image(0);
-deimage(0);
-\endcode
-
-\section subclassing_protected Protected Methods of Fl_Widget
-
-The following methods are provided for subclasses to use:
-
-\li \ref subclassing_clear_visible "clear_visible()"
-\li \ref subclassing_damage "damage()"
-\li \ref subclassing_draw_box "draw_box()"
-\li \ref subclassing_draw_focus "draw_focus()"
-\li \ref subclassing_draw_label "draw_label()"
-\li \ref subclassing_set_flag "set_flag()"
-\li \ref subclassing_set_visible "set_visible()"
-\li \ref subclassing_test_shortcut "test_shortcut()"
-\li \ref subclassing_type "type()"
-
-\anchor subclassing_damage
-void Fl_Widget::damage(uchar mask) <br>
-void Fl_Widget::damage(uchar mask, int x, int y, int w, int h) <br>
-uchar Fl_Widget::damage()
-
-\par
-The first form indicates that a partial update of the object is
-needed.  The bits in mask are OR'd into
-\ref subclassing_damage "damage()".
-Your \p draw() routine can examine these bits to limit what it is
-drawing.  The public method Fl_Widget::redraw() simply does
-\p Fl_Widget::damage(FL_DAMAGE_ALL),
-but the implementation of your widget can call the public
-\p damage(n).
-
-\par
-The second form indicates that a region is damaged.  If only these
-calls are done in a window (no calls to \p damage(n)) then FLTK
-will clip to the union of all these calls before drawing anything.
-This can greatly speed up incremental displays.  The mask bits are
-OR'd into \p damage() unless this is a Fl_Window widget. 
-
-\par
-The third form returns the bitwise-OR of all \p damage(n)
-calls done since the last \p draw().
-
-\par
-<I>When redrawing your widgets you should look at the damage bits to
-see what parts of your widget need redrawing.</I> The \p handle()
-method can then set individual damage bits to limit the amount of drawing
-that needs to be done:
-\code
-MyClass::handle(int event) {
-  ...
-  if (change_to_part1) damage(1);
-  if (change_to_part2) damage(2);
-  if (change_to_part3) damage(4);
-}
-
-MyClass::draw() {
-  if (damage() & FL_DAMAGE_ALL) {
-    ... draw frame/box and other static stuff ...
-  }
-
-  if (damage() & (FL_DAMAGE_ALL | 1)) draw_part1();
-  if (damage() & (FL_DAMAGE_ALL | 2)) draw_part2();
-  if (damage() & (FL_DAMAGE_ALL | 4)) draw_part3();
-}
-\endcode
-
-\todo Clarify Fl_Window::damage(uchar) handling - seems confused/wrong?
-      ORing value doesn't match setting behaviour in FL_Widget.H!
-
-\anchor subclassing_draw_box
-void Fl_Widget::draw_box() const <br>
-void Fl_Widget::draw_box(Fl_Boxtype t, Fl_Color c) const
-
-\par
-The first form draws this widget's \p box(), using the
-dimensions of the widget.  The second form uses \p t as the box
-type and \p c as the color for the box.
-
-\anchor subclassing_draw_focus
-void Fl_Widget::draw_focus() <br>
-void Fl_Widget::draw_focus(Fl_Boxtype t, int x, int y, int w, int h) const
-
-\par
-Draws a focus box inside the widget's bounding box. The second
-form allows you to specify a different bounding box.
-
-\anchor subclassing_draw_label
-void Fl_Widget::draw_label() const <br>
-void Fl_Widget::draw_label(int x, int y, int w, int h) const <br>
-void Fl_Widget::draw_label(int x, int y, int w, int h, Fl_Align align) const
-
-\par
-The first form is the usual function for a \p draw() method to call to
-draw the widget's label. It does not draw the label if it is supposed
-to be outside the box (on the assumption that the enclosing group will
-draw those labels).
-
-\par
-The second form uses the passed bounding box instead of the widget's
-bounding box. This is useful so "centered" labels are aligned with some
-feature, like a moving slider. 
-
-\par
-The third form draws the label anywhere. It acts as though
-\p FL_ALIGN_INSIDE has been forced on so the label will appear inside
-the passed bounding box. This is designed for parent groups to draw
-labels with. 
-
-\anchor subclassing_set_flag
-void Fl_Widget::set_flag(int c) <br>
-
-\par
-Calling \p set_flag(SHORTCUT_LABEL) modifies the behavior of
-\ref subclassing_draw_label "draw_label()" so that '\&' characters
-cause an underscore to be printed under the next letter.
-
-\anchor subclassing_clear_visible
-\anchor subclassing_set_visible
-void Fl_Widget::set_visible() <br>
-void Fl_Widget::clear_visible()
-
-\par
-Fast inline versions of Fl_Widget::hide() and Fl_Widget::show().
-These do not send the \p FL_HIDE and \p FL_SHOW events to the widget.
-
-\anchor subclassing_test_shortcut
-int Fl_Widget::test_shortcut() <br>
-static int Fl_Widget::test_shortcut(const char *s)
-
-\par
-The first version tests Fl_Widget::label() against the current event 
-(which should be a \p FL_SHORTCUT event).  If the label contains a '&' 
-character and the character after it matches the keypress, this returns
-true. This returns false if the \p SHORTCUT_LABEL flag is off, if the 
-label is \p NULL, or does not have a '&' character in it, or if the 
-keypress does not match the character.
-
-\par
-The second version lets you do this test against an arbitrary string. 
-
-\todo Clarify Fl_Widget::test_shortcut() explanations. Fl_Widget.h
-      says Internal Use only, but subclassing chapter gives details!
-
-\anchor subclassing_type
-uchar Fl_Widget::type() const <br>
-void Fl_Widget::type(uchar t)
-
-\par
-The property Fl_Widget::type() can return an arbitrary 8-bit
-identifier, and can be set with the protected method <tt>type(uchar t)</tt>.
-This value had to be provided for Forms compatibility, but you can
-use it for any purpose you want.  Try to keep the value less than 100
-to not interfere with reserved values.
-
-\par
-FLTK does not use RTTI (Run Time Typing Information) to enhance portability.
-But this may change in the near future if RTTI becomes standard everywhere.
-
-\par
-If you don't have RTTI you can use the clumsy FLTK mechanism, by
-having \p type() use a unique value.  These unique values must
-be greater than the symbol \p FL_RESERVED_TYPE (which is 100) and
-less than \p FL_WINDOW (unless you make a subclass of Fl_Window).
-Look through the header files for \p FL_RESERVED_TYPE to find an
-unused number. If you make a subclass of Fl_Window you must use
-<tt>FL_WINDOW + n</tt> (where \p n must be in the range 1 to 7). 
-
-\section subclassing_events Handling Events
-
-The virtual method Fl_Widget::handle(int event) is called
-to handle each event passed to the widget. It can:
-
-\li Change the state of the widget. 
-\li Call Fl_Widget::redraw() if the widget needs to be redisplayed. 
-\li Call Fl_Widget::damage(uchar c) if the widget needs a partial-update
-    (assuming you provide support for this in your
-    \ref subclassing_drawing "draw()"
-    method). 
-\li Call Fl_Widget::do_callback() if a callback should be generated. 
-\li Call Fl_Widget::handle() on child widgets. 
-
-Events are identified by the integer argument.  Other information
-about the most recent event is stored in static locations and acquired
-by calling the
-\ref events_event_xxx.
-This information remains valid until another event is handled.
-
-Here is a sample \p handle() method for a widget that acts as
-a pushbutton and also accepts the keystroke \p 'x' to cause the callback: 
-
-\code
-int MyClass::handle(int event) {
-  switch(event) {
-    case FL_PUSH:
-      highlight = 1;
-      redraw();
-      return 1;
-    case FL_DRAG: {
-        int t = Fl::event_inside(this);
-        if (t != highlight) {
-          highlight = t;
-	  redraw();
-	}
-      }
-      return 1;
-    case FL_RELEASE:
-      if (highlight) {
-	highlight = 0;
-	redraw();
-        do_callback();
-	// never do anything after a callback, as the callback
-	// may delete the widget!
-      }
-      return 1;
-    case FL_SHORTCUT:
-      if (Fl::event_key() == 'x') {
-        do_callback();
-	return 1;
-      }
-      return 0;
-    default:
-      return Fl_Widget::handle(event);
-  }
-}
-\endcode
-
-You must return non-zero if your \p handle() method
-uses the event. If you return zero, the parent widget will try
-sending the event to another widget.
-
-For debugging purposes, event numbers can be printed as their actual event names 
-using the \ref fl_eventnames[] array, e.g.:
-\code
-  #include <FL/names.h>		// defines fl_eventnames[]
-  [..]
-  int MyClass::handle(int e) {
-      printf("Event was %s (%d)\n", fl_eventnames[e], e);     // e.g. "Event was FL_PUSH (1)"
-      [..]
-\endcode
-
-\section subclassing_drawing Drawing the Widget
-
-The \p draw() virtual method is called when FLTK wants
-you to redraw your widget. It will be called if and only if
-\p damage() is non-zero, and \p damage() will be
-cleared to zero after it returns. The \p draw() method
-should be declared protected so that it can't be called from
-non-drawing code.
-
-The \p damage() value contains the bitwise-OR of all
-the \p damage(n) calls to this widget since it was last
-drawn. This can be used for minimal update, by only redrawing
-the parts whose bits are set. FLTK will turn on the
-\p FL_DAMAGE_ALL bit if it thinks the entire widget must
-be redrawn, e.g. for an expose event. 
-
-Expose events (and the 
-\ref subclassing_damage "damage(mask,x,y,w,h)" function described 
-above) will cause \p draw() to be called with FLTK's
-\ref ssect_Clipping "clipping"
-turned on.  You can greatly speed up redrawing in some
-cases by testing \p fl_not_clipped(x,y,w,h) or \p %fl_clip_box()
-and skipping invisible parts. 
-
-Besides the protected methods described above, FLTK provides a large
-number of basic drawing functions, which are described in the chapter
-\ref drawing.
-
-\section subclassing_resizing Resizing the Widget
-
-The \p resize(x,y,w,h) method is called when
-the widget is being resized or moved.  The arguments are the new
-position, width, and height. \p x(), \p y(), \p w(),
-and \p h() still remain the old size.  You must call \p resize()
-on your base class with the same arguments to get the widget size to
-actually change.
-
-This should \e not call \p redraw(), at least if only the
-\p x() and \p y() change.  This is because composite widgets like
-Fl_Scroll may have a more efficient way of drawing the new position. 
-
-\section subclassing_composite Making a Composite Widget
-
-A "composite" widget contains one or more "child" widgets.
-To make a composite widget you should subclass Fl_Group.
-It is possible to make a composite object that is not a subclass of
-Fl_Group, but you'll have to duplicate the code in Fl_Group
-anyways.
-
-Instances of the child widgets may be included in the parent: 
-
-\code
-class MyClass : public Fl_Group {
-  Fl_Button the_button;
-  Fl_Slider the_slider;
-  ...
-};
-\endcode
-
-The constructor has to initialize these instances. They are automatically 
-added to the group, since the Fl_Group constructor does
-Fl_Group::begin().
-<I>Don't forget to call Fl_Group::end() or use the Fl_End pseudo-class:</I>
-
-\code
-MyClass::MyClass(int x, int y, int w, int h) :
-  Fl_Group(x, y, w, h),
-  the_button(x + 5, y + 5, 100, 20),
-  the_slider(x, y + 50, w, 20)
-{
-  ...(you could add dynamically created child widgets here)...
-  end(); // don't forget to do this!
-}
-\endcode
-
-The child widgets need callbacks.  These will be called with a pointer
-to the children, but the widget itself may be found in the \p parent()
-pointer of the child.  Usually these callbacks can be static private
-methods, with a matching private method:
-
-\code
-void MyClass::static_slider_cb(Fl_Widget* v, void *) { // static method
-  ((MyClass*)(v->parent())->slider_cb();
-}
-void MyClass::slider_cb() { // normal method
-  use(the_slider->value());
-}
-\endcode
-
-If you make the \p handle() method, you can quickly pass all the
-events to the children using the Fl_Group::handle() method.
-You don't need to override \p handle() if your composite widget
-does nothing other than pass events to the children:
-
-\code
-int MyClass::handle(int event) {
-  if (Fl_Group::handle(event)) return 1;
-  ... handle events that children don't want ...
-}
-\endcode
-
-If you override \p draw() you need to draw all the children.
-If \p redraw() or \p damage() is called on a child,
-\p damage(FL_DAMAGE_CHILD) is done to the group,
-so this bit of \p damage() can be used to indicate
-that a child needs to be drawn. It is fastest if you avoid
-drawing anything else in this case:
-
-\code
-int MyClass::draw() {
-  Fl_Widget *const*a = array();
-  if (damage() == FL_DAMAGE_CHILD) { // only redraw some children
-    for (int i = children(); i --; a ++) update_child(**a);
-  } else { // total redraw
-    ... draw background graphics ...
-    // now draw all the children atop the background:
-    for (int i = children_; i --; a ++) {
-      draw_child(**a);
-      draw_outside_label(**a); // you may not need to do this
-    }
-  }
-}
-\endcode
-
-Fl_Group provides some protected methods to make drawing easier:
-
-\li \ref subclassing_draw_child "draw_child()"
-\li \ref subclassing_draw_children "draw_children()"
-\li \ref subclassing_draw_outside_label "draw_outside_label()"
-\li \ref subclassing_update_child "update_child()"
-
-\anchor subclassing_draw_child
-void Fl_Group::draw_child(Fl_Widget &widget) const
-
-\par
-This will force the child's \p damage() bits all to one and call
-\p draw() on it, then clear the \p damage().  You should call
-this on all children if a total redraw of your widget is requested, or
-if you draw something (like a background box) that damages the child.
-Nothing is done if the child is not \p visible() or if it is
-clipped.
-
-\anchor subclassing_draw_children
-void Fl_Group::draw_children()
-
-\par
-A convenience function that draws all children of the group.
-This is useful if you derived a widget from Fl_Group and want to draw
-a special border or background. You can call \p draw_children() from the
-derived  \p draw() method after drawing the box, border, or background.
-
-\anchor subclassing_draw_outside_label
-void Fl_Group::draw_outside_label(const Fl_Widget &widget) const
-
-\par
-Draw the labels that are \e not drawn by
-\ref subclassing_draw_label "draw_label()".
-If you want more control over the label positions you might want to call
-<tt>child->draw_label(x,y,w,h,a)</tt>.
-
-\anchor subclassing_update_child
-void Fl_Group::update_child(Fl_Widget& widget) const
-
-\par
-Draws the child only if its \p damage() is non-zero.  You
-should call this on all the children if your own damage is equal to
-\p FL_DAMAGE_CHILD.  Nothing is done if the child is not \p visible()
-or if it is clipped.
-
-\section subclassing_cutnpaste Cut and Paste Support
-
-FLTK provides routines to cut and paste UTF-8 encoded text between applications:
-\li Fl::copy()
-\li Fl::paste()
-\li Fl::selection()
-\li Fl::selection_owner()
-
-It is also possible to copy and paste image data between applications:
-\li Fl_Copy_Surface
-\li Fl::clipboard_contains()
-\li Fl::paste()
-
-It may be possible to cut/paste other kinds of data by using Fl::add_handler().
-Note that handling events beyond those provided by FLTK may be operating
-system specific. See \ref osissues for more details.
-
-\section subclassing_dragndrop Drag And Drop Support
-
-FLTK provides routines to drag and drop UTF-8 encoded text between applications:
-
-Drag'n'drop operations are initiated by copying data to the 
-clipboard and calling the function Fl::dnd().
-
-Drop attempts are handled via the following events,
-already described under \ref events_dnd in a previous chapter:
-
-\li \p FL_DND_ENTER
-\li \p FL_DND_DRAG
-\li \p FL_DND_LEAVE
-\li \p FL_DND_RELEASE
-\li \p FL_PASTE
-
-\section subclassing_fl_window Making a subclass of Fl_Window
-
-You may want your widget to be a subclass of
-Fl_Window, Fl_Double_Window, or
-Fl_Gl_Window. This can be useful if your widget wants
-to occupy an entire window, and can also be used to take
-advantage of system-provided clipping, or to work with a library
-that expects a system window ID to indicate where to draw.
-
-Subclassing Fl_Window is almost exactly like
-subclassing Fl_Group, and in fact you can easily
-switch a subclass back and forth. Watch out for the following
-differences: 
-
--# Fl_Window is a subclass of Fl_Group so
-   <I>make sure your constructor calls</I> \p end()
-   unless you actually want children added to your window.
--# When handling events and drawing, the upper-left corner is at
-   0,0, not <tt>x(),y()</tt> as in other Fl_Widget's.
-   For instance, to draw a box around the widget, call
-   <tt>draw_box(0,0,w(),h())</tt>, rather than
-   <tt>draw_box(x(),y(),w(),h())</tt>.
-
-You may also want to subclass Fl_Window in order to
-get access to different visuals or to change other attributes of
-the windows. See the
-\ref osissues chapter for more information.
-
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="events.html">
-    [Prev]
-    Handling Events
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="opengl.html">
-    Using OpenGL
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
--- a/DoConfig/fltk/documentation/src/sudoku.man
+++ /dev/null
@@ -1,33 +1,0 @@
-.TH sudoku 6 "FLTK Sudoku" "15 January 2006"
-.SH NAME
-sudoku \- the fltk sudoku game
-.sp
-.SH SYNOPSIS
-\fISudoku\fR is a FLTK-based version of the game of Sudoku.
-Sudoku (pronounced soo-dough-coo with the emphasis on the first
-syllable) is a simple number-based puzzle/game played on a 9x9
-grid that is divided into 3x3 subgrids. The goal is to enter a
-number from 1 to 9 in each cell so that each number appears only
-once in each column and row.
-.LP
-At the start of a new game, Sudoku fills in a random selection of
-cells for you - the number of cells depends on the difficulty
-level you use. Click in any of the empty cells or use the arrow
-keys to highlight individual cells and press a number from 1 to 9
-to fill in the cell. To clear a cell, press 0, Delete, or
-Backspace. As you complete each subgrid, correct subgrids are
-highlighted in green. When you have successfully completed all
-subgrids, the entire puzzle is highlighted until you start a new
-game.
-.LP
-As you work to complete the puzzle, you can display possible
-solutions inside each cell by holding the Shift key and pressing
-each number in turn. Repeat the process to remove individual
-numbers, or press a number without the Shift key to replace them
-with the actual number to use.
-.SH SEE ALSO
-fltk(3)
-.br
-FLTK Web Site, http://www.fltk.org/
-.SH AUTHOR
-Michael R Sweet.
binary files a/DoConfig/fltk/documentation/src/symbols.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/table-as-container.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/table-dimensions.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/table-simple.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tabs.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tabs_default.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tabs_selection.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tabs_uniform.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/text.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tiny.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tooltip-options.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tree-dimensions.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tree-elements.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/tree-simple.png /dev/null differ
--- a/DoConfig/fltk/documentation/src/unicode.dox
+++ /dev/null
@@ -1,529 +1,0 @@
-/**
-
- \page unicode Unicode and UTF-8 Support
-
-This chapter explains how FLTK handles international 
-text via Unicode and UTF-8.
-
-Unicode support was only recently added to FLTK and is
-still incomplete. This chapter is Work in Progress, reflecting
-the current state of Unicode support.
-
-\section unicode_about About Unicode, ISO 10646 and UTF-8
-
-The summary of Unicode, ISO 10646 and UTF-8 given below is
-deliberately brief and provides just enough information for
-the rest of this chapter.
-
-For further information, please see:
-- http://www.unicode.org
-- http://www.iso.org
-- http://en.wikipedia.org/wiki/Unicode
-- http://www.cl.cam.ac.uk/~mgk25/unicode.html
-- http://www.apps.ietf.org/rfc/rfc3629.html
-
-
-\par The Unicode Standard
-
-The Unicode Standard was originally developed by a consortium of mainly
-US computer manufacturers and developers of multi-lingual software.
-It has now become a defacto standard for character encoding
-and is supported by most of the major computing companies in the world.
-
-Before Unicode, many different systems, on different platforms,
-had been developed for encoding characters for different languages,
-but no single encoding could satisfy all languages.
-Unicode provides access to over 100,000 characters 
-used in all the major languages written today,
-and is independent of platform and language.
-
-Unicode also provides higher-level concepts needed for text processing
-and typographic publishing systems, such as algorithms for sorting and
-comparing text, composite character and text rendering, right-to-left
-and bi-directional text handling.
-
-\note There are currently no plans to add this extra functionality to FLTK.
-
-
-\par ISO 10646
-
-The International Organisation for Standardization (ISO) had also
-been trying to develop a single unified character set.
-Although both ISO and the Unicode Consortium continue to publish
-their own standards, they have agreed to coordinate their work so
-that specific versions of the Unicode and ISO 10646 standards are
-compatible with each other.
-
-The international standard ISO 10646 defines the
-<b>Universal Character Set</b> (UCS)
-which contains the characters required for almost all known languages.
-The standard also defines three different implementation levels specifying
-how these characters can be combined.
-
-\note There are currently no plans for handling the different implementation
-levels or the combining characters in FLTK.
-
-In UCS, characters have a unique numerical code and an official name,
-and are usually shown using 'U+' and the code in hexadecimal,
-e.g. U+0041 is the "Latin capital letter A".
-The UCS characters U+0000 to U+007F correspond to US-ASCII,
-and U+0000 to U+00FF correspond to ISO 8859-1 (Latin1).
-
-ISO 10646 was originally designed to handle a 31-bit character set
-from U+00000000 to U+7FFFFFFF, but the current idea is that 21 bits
-will be sufficient for all future needs, giving characters up to
-U+10FFFF.  The complete character set is sub-divided into \e planes.
-<i>Plane 0</i>, also known as the <b>Basic Multilingual Plane</b>
-(BMP), ranges from U+0000 to U+FFFD and consists of the most commonly
-used characters from previous encoding standards. Other planes
-contain characters for specialist applications.
-
-\todo Do we need this info about planes?
-
-The UCS also defines various methods of encoding characters as
-a sequence of bytes.
-UCS-2 encodes Unicode characters into two bytes,
-which is wasteful if you are only dealing with ASCII or Latin1 text,
-and insufficient if you need characters above U+00FFFF.
-UCS-4 uses four bytes, which lets it handle higher characters,
-but this is even more wasteful for ASCII or Latin1.
-
-\par UTF-8
-
-The Unicode standard defines various UCS Transformation Formats (UTF).
-UTF-16 and UTF-32 are based on units of two and four bytes.
-UCS characters requiring more than 16 bits are encoded using
-"surrogate pairs" in UTF-16.
-
-UTF-8 encodes all Unicode characters into variable length 
-sequences of bytes. Unicode characters in the 7-bit ASCII 
-range map to the same value and are represented as a single byte,
-making the transformation to Unicode quick and easy.
-
-All UCS characters above U+007F are encoded as a sequence of
-several bytes. The top bits of the first byte are set to show
-the length of the byte sequence, and subseqent bytes are
-always in the range 0x80 to 0xBF. This combination provides
-some level of synchronisation and error detection.
-
-\par
-
-<table summary="Unicode character byte sequences" align="center">
-<tr>
- <td>Unicode range</td>
- <td>Byte sequences</td>
-</tr>
-<tr>
- <td><tt>U+00000000 - U+0000007F</tt></td>
- <td><tt>0xxxxxxx</tt></td>
-</tr>
-<tr>
- <td><tt>U+00000080 - U+000007FF</tt></td>
- <td><tt>110xxxxx 10xxxxxx</tt></td>
-</tr>
-<tr>
- <td><tt>U+00000800 - U+0000FFFF</tt></td>
- <td><tt>1110xxxx 10xxxxxx 10xxxxxx</tt></td>
-</tr>
-<tr>
- <td><tt>U+00010000 - U+001FFFFF</tt></td>
- <td><tt>11110xxx 10xxxxxx 10xxxxxx 10xxxxxx</tt></td>
-</tr>
-<tr>
- <td><tt>U+00200000 - U+03FFFFFF</tt></td>
- <td><tt>111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx</tt></td>
-</tr>
-<tr>
- <td><tt>U+04000000 - U+7FFFFFFF</tt></td>
- <td><tt>1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx</tt></td>
-</tr>
-</table>
-
-\par
-
-Moving from ASCII encoding to Unicode will allow all new FLTK
-applications to be easily internationalized and used all over
-the world. By choosing UTF-8 encoding, FLTK remains largely
-source-code compatible to previous iterations of the library.
-
-\section unicode_in_fltk Unicode in FLTK
-
-\todo
-Work through the code and this documentation to harmonize
-the [<b>OksiD</b>] and [<b>fltk2</b>] functions.
-
-FLTK will be entirely converted to Unicode using UTF-8 encoding.
-If a different encoding is required by the underlying operating
-system, FLTK will convert the string as needed.
-
-It is important to note that the initial implementation of
-Unicode and UTF-8 in FLTK involves three important areas:
-
-- provision of Unicode character tables and some simple related functions;
-
-- conversion of char* variables and function parameters from single byte
-  per character representation to UTF-8 variable length sequences;
-
-- modifications to the display font interface to accept general
-  Unicode character or UCS code numbers instead of just ASCII or Latin1
-  characters.
-
-The current implementation of Unicode / UTF-8 in FLTK will impose
-the following limitations:
-
-- An implementation note in the [<b>OksiD</b>] code says that all functions
-  are LIMITED to 24 bit Unicode values, but also says that only 16 bits
-  are really used under linux and win32.
-  <b>[Can we verify this?]</b>
-  
-- The [<b>fltk2</b>] %fl_utf8encode() and %fl_utf8decode() functions are
-  designed to handle Unicode characters in the range U+000000 to U+10FFFF
-  inclusive, which covers all UTF-16 characters, as specified in RFC 3629.
-  <i>Note that the user must first convert UTF-16 surrogate pairs to UCS.</i>
-
-- FLTK will only handle single characters, so composed characters
-  consisting of a base character and floating accent characters
-  will be treated as multiple characters.
-
-- FLTK will only compare or sort strings on a byte by byte basis
-  and not on a general Unicode character basis.
-
-- FLTK will not handle right-to-left or bi-directional text.
-  
-  \todo
-  Verify 16/24 bit Unicode limit for different character sets?
-  OksiD's code appears limited to 16-bit whereas the FLTK2 code
-  appears to handle a wider set. What about illegal characters?
-  See comments in %fl_utf8fromwc() and %fl_utf8toUtf16().
-
-\section unicode_illegals Illegal Unicode and UTF-8 Sequences
-
-Three pre-processor variables are defined in the source code [1] that
-determine how %fl_utf8decode() handles illegal UTF-8 sequences:
-
-- if ERRORS_TO_CP1252 is set to 1 (the default), %fl_utf8decode() will
-  assume that a byte sequence starting with a byte in the range 0x80
-  to 0x9f represents a Microsoft CP1252 character, and will return
-  the value of an equivalent UCS character. Otherwise, it will be
-  processed as an illegal byte value as described below.
-
-- if STRICT_RFC3629 is set to 1 (not the default!) then UTF-8
-  sequences that correspond to illegal UCS values are treated as
-  errors.  Illegal UCS values include those above U+10FFFF, or
-  corresponding to UTF-16 surrogate pairs. Illegal byte values
-  are handled as described below.
-
-- if ERRORS_TO_ISO8859_1 is set to 1 (the default), the illegal
-  byte value is returned unchanged, otherwise 0xFFFD, the Unicode
-  REPLACEMENT CHARACTER, is returned instead.
-
-[1] Since FLTK 1.3.4 you may set these three pre-processor variables on
-    your compile command line with -D"variable=value" (value: 0 or 1)
-    to avoid editing the source code.
-
-%fl_utf8encode() is less strict, and only generates the UTF-8
-sequence for 0xFFFD, the Unicode REPLACEMENT CHARACTER, if it is
-asked to encode a UCS value above U+10FFFF.
-
-Many of the [<b>fltk2</b>] functions below use %fl_utf8decode() and
-%fl_utf8encode() in their own implementation, and are therefore
-somewhat protected from bad UTF-8 sequences.
-
-The [<b>OksiD</b>] %fl_utf8len() function assumes that the byte it is
-passed is the first byte in a UTF-8 sequence, and returns the length
-of the sequence. Trailing bytes in a UTF-8 sequence will return -1.
-
-- \b WARNING:
-  %fl_utf8len() can not distinguish between single
-  bytes representing Microsoft CP1252 characters 0x80-0x9f and
-  those forming part of a valid UTF-8 sequence. You are strongly
-  advised not to use %fl_utf8len() in your own code unless you
-  know that the byte sequence contains only valid UTF-8 sequences.
-
-- \b WARNING:
-  Some of the [OksiD] functions below still use %fl_utf8len() in
-  their implementations. These may need further validation.
-
-Please see the individual function description for further details
-about error handling and return values.
-
-\section unicode_fltk_calls FLTK Unicode and UTF-8 Functions
-
-This section currently provides a brief overview of the functions.
-For more details, consult the main text for each function via its link.
-
-int fl_utf8locale()
-  \b FLTK2
-  <br>
-\par
-\p %fl_utf8locale() returns true if the "locale" seems to indicate
-that UTF-8 encoding is used.
-\par
-<i>It is highly recommended that you change your system so this does return
-true!</i>
-
-
-int fl_utf8test(const char *src, unsigned len)
-  \b FLTK2
-  <br>
-\par
-\p %fl_utf8test() examines the first \p len bytes of \p src.
-It returns 0 if there are any illegal UTF-8 sequences;
-1 if \p src contains plain ASCII or if \p len is zero;
-or 2, 3 or 4 to indicate the range of Unicode characters found.
-
-
-int fl_utf_nb_char(const unsigned char *buf, int len)
-  \b OksiD
-  <br>
-\par
-Returns the number of UTF-8 characters in the first \p len bytes of \p buf.
-
-
-int fl_unichar_to_utf8_size(Fl_Unichar)
-  <br>
-int fl_utf8bytes(unsigned ucs)
-  <br>
-\par
-Returns the number of bytes needed to encode \p ucs in UTF-8.
-
-
-int fl_utf8len(char c)
-  \b OksiD
-  <br>
-\par
-If \p c is a valid first byte of a UTF-8 encoded character sequence,
-\p %fl_utf8len() will return the number of bytes in that sequence.
-It returns -1 if \p c is not a valid first byte.
-
-
-unsigned int fl_nonspacing(unsigned int ucs)
-  \b OksiD
-  <br>
-\par
-Returns true if \p ucs is a non-spacing character.
-
-
-const char* fl_utf8back(const char *p, const char *start, const char *end)
-  \b FLTK2
-  <br>
-const char* fl_utf8fwd(const char *p, const char *start, const char *end)
-  \b FLTK2
-  <br>
-\par
-If \p p already points to the start of a UTF-8 character sequence,
-these functions will return \p p.
-Otherwise \p %fl_utf8back() searches backwards from \p p
-and \p %fl_utf8fwd() searches forwards from \p p,
-within the \p start and \p end limits,
-looking for the start of a UTF-8 character.
-
-
-unsigned int fl_utf8decode(const char *p, const char *end, int *len)
-  \b FLTK2
-  <br>
-int fl_utf8encode(unsigned ucs, char *buf)
-  \b FLTK2
-  <br>
-\par
-\p %fl_utf8decode() attempts to decode the UTF-8 character that starts
-at \p p and may not extend past \p end.
-It returns the Unicode value, and the length of the UTF-8 character sequence
-is returned via the \p len argument.
-\p %fl_utf8encode() writes the UTF-8 encoding of \p ucs into \p buf
-and returns the number of bytes in the sequence.
-See the main documentation for the treatment of illegal Unicode
-and UTF-8 sequences.
-
-
-unsigned int fl_utf8froma(char *dst, unsigned dstlen, const char *src, unsigned srclen)
-  \b FLTK2
-  <br>
-unsigned int fl_utf8toa(const char *src, unsigned srclen, char *dst, unsigned dstlen)
-  \b FLTK2
-  <br>
-\par
-\p %fl_utf8froma() converts a character string containing single bytes
-per character (i.e. ASCII or ISO-8859-1) into UTF-8.
-If the \p src string contains only ASCII characters, the return value will
-be the same as \p srclen.
-\par
-\p %fl_utf8toa() converts a string containing UTF-8 characters into
-single byte characters. UTF-8 characters that do not correspond to ASCII
-or ISO-8859-1 characters below 0xFF are replaced with '?'.
-
-\par
-Both functions return the number of bytes that would be written, not
-counting the null terminator.
-\p dstlen provides a means of limiting the number of bytes written,
-so setting \p dstlen to zero is a means of measuring how much storage
-would be needed before doing the real conversion.
-
-
-char* fl_utf2mbcs(const char *src)
-  \b OksiD
-  <br>
-\par
-converts a UTF-8 string to a local multi-byte character string.
-<b>[More info required here!]</b>
-
-unsigned int fl_utf8fromwc(char *dst, unsigned dstlen, const wchar_t *src, unsigned srclen)
-  \b FLTK2
-  <br>
-unsigned int fl_utf8towc(const char *src, unsigned srclen, wchar_t *dst, unsigned dstlen)
-  \b FLTK2
-  <br>
-unsigned int fl_utf8toUtf16(const char *src, unsigned srclen, unsigned short *dst, unsigned dstlen)
-  \b FLTK2
-  <br>
-\par
-These routines convert between UTF-8 and \p wchar_t or "wide character"
-strings.
-The difficulty lies in the fact that \p sizeof(wchar_t) is 2 on Windows
-and 4 on Linux and most other systems.
-Therefore some "wide characters" on Windows may be represented
-as "surrogate pairs" of more than one \p wchar_t.
-
-\par
-\p %fl_utf8fromwc() converts from a "wide character" string to UTF-8.
-Note that \p srclen is the number of \p wchar_t elements in the source
-string and on Windows this might be larger than the number of characters.
-\p dstlen specifies the maximum number of \b bytes to copy, including
-the null terminator.
-
-\par
-\p %fl_utf8towc() converts a UTF-8 string into a "wide character" string.
-Note that on Windows, some "wide characters" might result in "surrogate
-pairs" and therefore the return value might be more than the number of
-characters.
-\p dstlen specifies the maximum number of \b wchar_t elements to copy,
-including a zero terminating element.
-<b>[Is this all worded correctly?]</b>
-
-\par
-\p %fl_utf8toUtf16() converts a UTF-8 string into a "wide character"
-string using UTF-16 encoding to handle the "surrogate pairs" on Windows.
-\p dstlen specifies the maximum number of \b wchar_t elements to copy,
-including a zero terminating element.
-<b>[Is this all worded correctly?]</b>
-
-\par
-These routines all return the number of elements that would be required
-for a full conversion of the \p src string, including the zero terminator.
-Therefore setting \p dstlen to zero is a way of measuring how much storage
-would be needed before doing the real conversion.
-
-
-unsigned int fl_utf8from_mb(char *dst, unsigned dstlen, const char *src, unsigned srclen)
-  \b FLTK2
-  <br>
-unsigned int fl_utf8to_mb(const char *src, unsigned srclen, char *dst, unsigned dstlen)
-  \b FLTK2
-  <br>
-\par
-These functions convert between UTF-8 and the locale-specific multi-byte
-encodings used on some systems for filenames, etc.
-If fl_utf8locale() returns true, these functions don't do anything useful.
-<b>[Is this all worded correctly?]</b>
-
-
-int fl_tolower(unsigned int ucs)
-  \b OksiD
-  <br>
-int fl_toupper(unsigned int ucs)
-  \b OksiD
-  <br>
-int fl_utf_tolower(const unsigned char *str, int len, char *buf)
-  \b OksiD
-  <br>
-int fl_utf_toupper(const unsigned char *str, int len, char *buf)
-  \b OksiD
-  <br>
-\par
-\p %fl_tolower() and \p %fl_toupper() convert a single Unicode character
-from upper to lower case, and vice versa.
-\p %fl_utf_tolower() and \p %fl_utf_toupper() convert a string of bytes,
-some of which may be multi-byte UTF-8 encodings of Unicode characters,
-from upper to lower case, and vice versa.
-\par
-Warning: to be safe, \p buf length must be at least \p 3*len
-[for 16-bit Unicode]
-
-
-int fl_utf_strcasecmp(const char *s1, const char *s2)
-  \b OksiD
-  <br>
-int fl_utf_strncasecmp(const char *s1, const char *s2, int n)
-  \b OksiD
-  <br>
-\par
-\p %fl_utf_strcasecmp() is a UTF-8 aware string comparison function that
-converts the strings to lower case Unicode as part of the comparison.
-\p %flt_utf_strncasecmp() only compares the first \p n characters [bytes?]
-
-
-\section unicode_system_calls FLTK Unicode Versions of System Calls
-
-- int fl_access(const char* f, int mode)
-  \b OksiD
-- int fl_chmod(const char* f, int mode)
-  \b OksiD
-- int fl_execvp(const char* file, char* const* argv)
-  \b OksiD
-- FILE* fl_fopen(cont char* f, const char* mode)
-  \b OksiD
-- char* fl_getcwd(char* buf, int maxlen)
-  \b OksiD
-- char* fl_getenv(const char* name)
-  \b OksiD
-- char fl_make_path(const char* path)	- returns char ?
-  \b OksiD
-- void fl_make_path_for_file(const char* path)
-  \b OksiD
-- int fl_mkdir(const char* f, int mode)
-  \b OksiD
-- int fl_open(const  char* f, int o, ...)
-  \b OksiD
-- int fl_rename(const char* f, const char* t)
-  \b OksiD
-- int fl_rmdir(const char* f)
-  \b OksiD
-- int fl_stat(const char* path, struct stat* buffer)
-  \b OksiD
-- int fl_system(const char* f)
-  \b OksiD
-- int fl_unlink(const char* f)
-  \b OksiD
-
-\par TODO:
-
-\li more doc on unicode, add links
-\li write something about filename encoding on OS X...
-\li explain the fl_utf8_... commands
-\li explain issues with Fl_Preferences
-\li why FLTK has no Fl_String class
-
-\htmlonly
-<hr>
-<table summary="navigation bar" width="100%" border="0">
-<tr>
-  <td width="45%" align="LEFT">
-    <a class="el" href="advanced.html">
-    [Prev]
-    Advanced FLTK
-    </a>
-  </td>
-  <td width="10%" align="CENTER">
-    <a class="el" href="index.html">[Index]</a>
-  </td>
-  <td width="45%" align="RIGHT">
-    <a class="el" href="enumerations.html">
-    FLTK Enumerations
-    [Next]
-    </a>
-  </td>
-</tr>
-</table>
-\endhtmlonly
-
-*/
binary files a/DoConfig/fltk/documentation/src/valuators.png /dev/null differ
binary files a/DoConfig/fltk/documentation/src/value_slider.png /dev/null differ
--- a/DoConfig/fltk/examples/Makefile
+++ /dev/null
@@ -1,43 +1,0 @@
-include Makefile.FLTK
-
-RM    = rm -f
-SHELL = /bin/sh
-.SILENT:
-
-# Executables
-ALL = clipboard$(EXEEXT) \
-      fltk-versions$(EXEEXT) \
-      howto-add_fd-and-popen$(EXEEXT) \
-      howto-browser-with-icons$(EXEEXT) \
-      howto-drag-and-drop$(EXEEXT) \
-      howto-parse-args$(EXEEXT) \
-      howto-text-over-image-button$(EXEEXT) \
-      menubar-add$(EXEEXT) \
-      nativefilechooser-simple-app$(EXEEXT) \
-      progress-simple$(EXEEXT) \
-      shapedwindow$(EXEEXT) \
-      table-as-container$(EXEEXT) \
-      table-simple$(EXEEXT) \
-      table-sort$(EXEEXT) \
-      table-spreadsheet$(EXEEXT) \
-      table-spreadsheet-with-keyboard-nav$(EXEEXT) \
-      table-with-keynav$(EXEEXT) \
-      tabs-simple$(EXEEXT) \
-      textdisplay-with-colors$(EXEEXT) \
-      texteditor-simple$(EXEEXT) \
-      tree-simple$(EXEEXT) \
-      tree-as-container$(EXEEXT) \
-      tree-custom-draw-items$(EXEEXT) \
-      tree-custom-sort$(EXEEXT) \
-      tree-of-tables$(EXEEXT) \
-      wizard-simple$(EXEEXT)
-
-# default target -- build everything
-default all: $(ALL)
-
-# clean everything
-clean:
-	$(RM) $(ALL)
-	$(RM) *.o
-	$(RM) core
-
--- a/DoConfig/fltk/examples/Makefile.FLTK
+++ /dev/null
@@ -1,35 +1,0 @@
-#
-# Stuff every FLTK application might need
-#
-#    If you take this for use in your own project, be sure to change
-#    the 'FLTKCONFIG' setting to point to where it's installed
-#    on your system. Common examples:
-#
-#	FLTKCONFIG = /usr/local/bin/fltk-config
-#       FLTKCONFIG = /usr/local/src/fltk-1.3.x-svn/fltk-config
-#
-#    Set .SILENT in your Makefile if you want 'quieter' builds.
-#
-
-ifeq '$(OS)' "Windows_NT"
-EXEEXT = .exe
-endif
-
-FLTKCONFIG   = ../fltk-config
-CXX          = $(shell $(FLTKCONFIG) --cxx)
-CXXFLAGS     = $(shell $(FLTKCONFIG) --cxxflags) -Wall -I.
-LINKFLTK     = $(shell $(FLTKCONFIG) --ldstaticflags)
-LINKFLTK_GL  = $(shell $(FLTKCONFIG) --use-gl --ldstaticflags)
-LINKFLTK_IMG = $(shell $(FLTKCONFIG) --use-images --ldstaticflags)
-LINKFLTK_ALL = $(shell $(FLTKCONFIG) --use-images --use-gl --ldstaticflags)
-.SUFFIXES: .cxx .h .fl .o $(EXEEXT)
-
-# HOW TO COMPILE
-.cxx.o:
-	@echo "*** Compile $<..."
-	$(CXX) -I.. $(CXXFLAGS) -c $< -o $@
-
-# HOW TO LINK
-.o$(EXEEXT):
-	@echo "*** Linking $@..."
-	$(CXX) $< $(LINKFLTK_ALL) -o $@
--- a/DoConfig/fltk/examples/OpenGL3-glut-test.cxx
+++ /dev/null
@@ -1,222 +1,0 @@
-//
-// "$Id$"
-//
-// Tiny OpenGL v3 + glut demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#if defined(__APPLE__)
-#  define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED 1
-#  include <OpenGL/gl3.h> // defines OpenGL 3.0+ functions
-#else
-#  if defined(WIN32)
-#    define GLEW_STATIC 1
-#  endif
-#  include <GL/glew.h>
-#endif
-#include <FL/glut.H>
-
-
-// Globals
-// Real programs don't use globals :-D
-// Data would normally be read from files
-GLfloat vertices[] = {	-1.0f,0.0f,0.0f,
-  0.0f,1.0f,0.0f,
-  0.0f,0.0f,0.0f };
-GLfloat colours[] = {	1.0f, 0.0f, 0.0f,
-  0.0f, 1.0f, 0.0f,
-  0.0f, 0.0f, 1.0f };
-GLfloat vertices2[] = {	0.0f,0.0f,0.0f,
-  0.0f,-1.0f,0.0f,
-  1.0f,0.0f,0.0f };
-
-// two vertex array objects, one for each object drawn
-unsigned int vertexArrayObjID[2];
-// three vertex buffer objects in this example
-unsigned int vertexBufferObjID[3];
-
-
-void printShaderInfoLog(GLint shader)
-{
-  int infoLogLen = 0;
-  GLchar *infoLog;
-  
-  glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLen);
-  if (infoLogLen > 0)
-  {
-    infoLog = new GLchar[infoLogLen];
-    // error check for fail to allocate memory omitted
-    glGetShaderInfoLog(shader,infoLogLen, NULL, infoLog);
-    fprintf(stderr, "InfoLog:\n%s\n", infoLog);
-    delete [] infoLog;
-  }
-}
-
-
-void init(void)
-{
-  // Would load objects from file here - but using globals in this example
-  
-  // Allocate Vertex Array Objects
-  glGenVertexArrays(2, &vertexArrayObjID[0]);
-  // Setup first Vertex Array Object
-  glBindVertexArray(vertexArrayObjID[0]);
-  glGenBuffers(2, vertexBufferObjID);
-  
-  // VBO for vertex data
-  glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[0]);
-  glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
-  glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
-  glEnableVertexAttribArray(0);
-  
-  // VBO for colour data
-  glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[1]);
-  glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), colours, GL_STATIC_DRAW);
-  glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0);
-  glEnableVertexAttribArray(1);
-  
-  // Setup second Vertex Array Object
-  glBindVertexArray(vertexArrayObjID[1]);
-  glGenBuffers(1, &vertexBufferObjID[2]);
-  
-  // VBO for vertex data
-  glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[2]);
-  glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices2, GL_STATIC_DRAW);
-  glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
-  glEnableVertexAttribArray(0);
-  
-  glBindVertexArray(0);
-}
-
-
-void initShaders(void)
-{
-  GLuint p, f, v;
-  glClearColor (1.0, 1.0, 1.0, 0.0);
-  
-  v = glCreateShader(GL_VERTEX_SHADER);
-  f = glCreateShader(GL_FRAGMENT_SHADER);
-  
-#ifdef __APPLE__
-#define SHADING_LANG_VERS "140"
-#else
-#define SHADING_LANG_VERS "130"
-#endif
-  // load shaders
-  const char *vv = "#version "SHADING_LANG_VERS"\n\
-  in  vec3 in_Position;\
-  in  vec3 in_Color;\
-  out vec3 ex_Color;\
-  void main(void)\
-  {\
-    ex_Color = in_Color;\
-    gl_Position = vec4(in_Position, 1.0);\
-  }";
-  
-  const char *ff = "#version "SHADING_LANG_VERS"\n\
-  precision highp float;\
-  in  vec3 ex_Color;\
-  out vec4 out_Color;\
-  void main(void)\
-  {\
-    out_Color = vec4(ex_Color,1.0);\
-  }";
-  
-  glShaderSource(v, 1, &vv,NULL);
-  glShaderSource(f, 1, &ff,NULL);
-  
-  GLint compiled;
-  
-  glCompileShader(v);
-  glGetShaderiv(v, GL_COMPILE_STATUS, &compiled);
-  if (!compiled)
-  {
-    fprintf(stderr, "Vertex shader not compiled.\n");
-    printShaderInfoLog(v);
-  }
-  
-  glCompileShader(f);
-  glGetShaderiv(f, GL_COMPILE_STATUS, &compiled);
-  if (!compiled)
-  {
-    fprintf(stderr, "Fragment shader not compiled.\n");
-    printShaderInfoLog(f);
-  }
-  
-  p = glCreateProgram();
-  
-  glAttachShader(p,v);
-  glAttachShader(p,f);
-  glBindAttribLocation(p,0, "in_Position");
-  glBindAttribLocation(p,1, "in_Color");
-
-  glLinkProgram(p);
-  glGetProgramiv(p, GL_LINK_STATUS, &compiled);
-  if (compiled != GL_TRUE) {
-    GLchar *infoLog; GLint length;
-    glGetProgramiv(p, GL_INFO_LOG_LENGTH, &length);
-    infoLog = new GLchar[length];
-    glGetProgramInfoLog(p, length, NULL, infoLog);
-    fprintf(stderr, "Link log=%s\n", infoLog);
-    delete[] infoLog;
-  }
-  glUseProgram(p);
-}
-
-
-void display(void)
-{
-  // clear the screen
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-  
-  glBindVertexArray(vertexArrayObjID[0]);	// First VAO
-  glDrawArrays(GL_TRIANGLES, 0, 3);	// draw first object
-  
-  glBindVertexArray(vertexArrayObjID[1]);		// select second VAO
-  glVertexAttrib3f((GLuint)1, 1.0, 0.0, 0.0); // set constant color attribute
-  glDrawArrays(GL_TRIANGLES, 0, 3);	// draw second object
- }
-
-
-int main (int argc, char* argv[])
-{
-  Fl::use_high_res_GL(true);
-  glutInit(&argc, argv);
-  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | FL_OPENGL3);
-  glutInitWindowSize(400,400);
-  glutCreateWindow("Triangle Test");
-#ifndef __APPLE__
-  GLenum err = glewInit(); // defines pters to functions of OpenGL V 1.2 and above
-  if (err) Fl::error("glewInit() failed returning %u", err);
-  fprintf(stderr, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
-#endif
-  int gl_version_major;
-  const char *glv = (const char*)glGetString(GL_VERSION);
-  fprintf(stderr, "OpenGL version %s supported\n", glv);
-  sscanf(glv, "%d", &gl_version_major);
-  if (gl_version_major < 3) {
-    fprintf(stderr, "\nThis platform does not support OpenGL V3\n\n");
-    exit(1);
-  }
-  initShaders();
-  init();
-  glutDisplayFunc(display);
-  glutMainLoop();
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/OpenGL3test.cxx
+++ /dev/null
@@ -1,233 +1,0 @@
-//
-// "$Id$"
-//
-// Tiny OpenGL v3 demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdarg.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Gl_Window.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Text_Buffer.H>
-#if defined(__APPLE__)
-#  include <OpenGL/gl3.h> // defines OpenGL 3.0+ functions
-#else
-#  if defined(WIN32)
-#    define GLEW_STATIC 1
-#  endif
-#  include <GL/glew.h>
-#endif
-
-
-void add_output(const char *format, ...);
-
-
-class SimpleGL3Window : public Fl_Gl_Window {
-  GLuint shaderProgram;
-  GLuint vertexArrayObject;
-  GLuint vertexBuffer;
-  GLint positionUniform;
-  GLint colourAttribute;
-  GLint positionAttribute;
-  int gl_version_major;
-public:
-  SimpleGL3Window(int x, int y, int w, int h) :  Fl_Gl_Window(x, y, w, h) {
-    mode(FL_RGB8 | FL_DOUBLE | FL_OPENGL3);
-    shaderProgram = 0;
-  }
-  void draw(void) {
-    if (gl_version_major < 3) return;
-    if (!shaderProgram) {
-      GLuint  vs;
-      GLuint  fs;
-      int Mslv, mslv; // major and minor version numbers of the shading language
-      sscanf((char*)glGetString(GL_SHADING_LANGUAGE_VERSION), "%d.%d", &Mslv, &mslv);
-      add_output("Shading Language Version=%d.%d\n",Mslv, mslv);
-      const char *vss_format="#version %d%d\n\
-      uniform vec2 p;\
-      in vec4 position;\
-      in vec4 colour;\
-      out vec4 colourV;\
-      void main (void)\
-      {\
-      colourV = colour;\
-      gl_Position = vec4(p, 0.0, 0.0) + position;\
-      }";
-      char vss_string[300]; const char *vss = vss_string;
-      sprintf(vss_string, vss_format, Mslv, mslv);
-      const char *fss_format="#version %d%d\n\
-      in vec4 colourV;\
-      out vec4 fragColour;\
-      void main(void)\
-      {\
-      fragColour = colourV;\
-      }";
-      char fss_string[200]; const char *fss = fss_string;
-      sprintf(fss_string, fss_format, Mslv, mslv);
-      GLint err; GLchar CLOG[1000]; GLsizei length;
-      vs = glCreateShader(GL_VERTEX_SHADER);
-      glShaderSource(vs, 1, &vss, NULL);
-      glCompileShader(vs);
-      glGetShaderiv(vs, GL_COMPILE_STATUS, &err);
-      if (err != GL_TRUE) {
-	glGetShaderInfoLog(vs, sizeof(CLOG), &length, CLOG); 
-	add_output("vs ShaderInfoLog=%s\n",CLOG);
-	}
-      fs = glCreateShader(GL_FRAGMENT_SHADER);
-      glShaderSource(fs, 1, &fss, NULL);
-      glCompileShader(fs);
-      glGetShaderiv(fs, GL_COMPILE_STATUS, &err);
-      if (err != GL_TRUE) {
-	glGetShaderInfoLog(fs, sizeof(CLOG), &length, CLOG); 
-	add_output("fs ShaderInfoLog=%s\n",CLOG);
-	}     
-      // Attach the shaders
-      shaderProgram = glCreateProgram();
-      glAttachShader(shaderProgram, vs);
-      glAttachShader(shaderProgram, fs);
-      glBindFragDataLocation(shaderProgram, 0, "fragColour");
-      glLinkProgram(shaderProgram);
-      glGetProgramiv(shaderProgram, GL_LINK_STATUS, &err);
-      if (err != GL_TRUE) {
-        glGetProgramInfoLog(shaderProgram, sizeof(CLOG), &length, CLOG);
-        add_output("link log=%s\n", CLOG);
-      }
-      // Get pointers to uniforms and attributes
-      positionUniform = glGetUniformLocation(shaderProgram, "p");
-      colourAttribute = glGetAttribLocation(shaderProgram, "colour");
-      positionAttribute = glGetAttribLocation(shaderProgram, "position");
-      glDeleteShader(vs);
-      glDeleteShader(fs);
-      // Upload vertices (1st four values in a row) and colours (following four values)
-      GLfloat vertexData[]= { -0.5,-0.5,0.0,1.0,   1.0,0.0,0.0,1.0,
-        -0.5, 0.5,0.0,1.0,   0.0,1.0,0.0,1.0,
-        0.5, 0.5,0.0,1.0,   0.0,0.0,1.0,1.0,
-        0.5,-0.5,0.0,1.0,   1.0,1.0,1.0,1.0};
-      glGenVertexArrays(1, &vertexArrayObject);
-      glBindVertexArray(vertexArrayObject);
-      
-      glGenBuffers(1, &vertexBuffer);
-      glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
-      glBufferData(GL_ARRAY_BUFFER, 4*8*sizeof(GLfloat), vertexData, GL_STATIC_DRAW);
-      
-      glEnableVertexAttribArray((GLuint)positionAttribute);
-      glEnableVertexAttribArray((GLuint)colourAttribute  );
-      glVertexAttribPointer((GLuint)positionAttribute, 4, GL_FLOAT, GL_FALSE, 8*sizeof(GLfloat), 0);
-      glVertexAttribPointer((GLuint)colourAttribute  , 4, GL_FLOAT, GL_FALSE, 8*sizeof(GLfloat), (char*)0+4*sizeof(GLfloat));
-    }
-    else if ((!valid())) {
-      glViewport(0, 0, pixel_w(), pixel_h());
-    }
-    glClearColor(0.08, 0.8, 0.8, 1.0);
-    glClear(GL_COLOR_BUFFER_BIT);
-    glUseProgram(shaderProgram);
-    GLfloat p[]={0,0};
-    glUniform2fv(positionUniform, 1, (const GLfloat *)&p);
-    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
-  }
-  virtual int handle(int event) {
-    static int first = 1;
-    if (first && event == FL_SHOW && shown()) {
-      first = 0;
-      make_current();
-#ifndef __APPLE__
-      GLenum err = glewInit(); // defines pters to functions of OpenGL V 1.2 and above
-      if (err) Fl::warning("glewInit() failed returning %u", err);
-      else add_output("Using GLEW %s\n", glewGetString(GLEW_VERSION));
-#endif
-      const uchar *glv = glGetString(GL_VERSION);
-      add_output("GL_VERSION=%s\n", glv);
-      sscanf((const char *)glv, "%d", &gl_version_major);
-      if (gl_version_major < 3) add_output("\nThis platform does not support OpenGL V3\n\n");
-    }
-    
-    if (event == FL_PUSH && gl_version_major >= 3) {
-      static float factor = 1.1;
-      GLfloat data[4];
-      glGetBufferSubData(GL_ARRAY_BUFFER, 0, 4*sizeof(GLfloat), data);
-      if (data[0] < -0.88 || data[0] > -0.5) factor = 1/factor;
-      data[0] *= factor;
-      glBufferSubData(GL_ARRAY_BUFFER, 0, 4*sizeof(GLfloat), data);
-      glGetBufferSubData(GL_ARRAY_BUFFER, 24*sizeof(GLfloat), 4*sizeof(GLfloat), data);
-      data[0] *= factor;
-      glBufferSubData(GL_ARRAY_BUFFER, 24*sizeof(GLfloat), 4*sizeof(GLfloat), data);
-      redraw();
-      add_output("push  Fl_Gl_Window::pixels_per_unit()=%.1f\n", pixels_per_unit());
-      return 1;
-    }
-    return Fl_Gl_Window::handle(event);
-  }
-  void reset(void) { shaderProgram = 0; }
-};
-
-
-void toggle_double(Fl_Widget *wid, void *data) {
-  static bool doublebuff = true;
-  doublebuff = !doublebuff;
-  SimpleGL3Window *glwin = (SimpleGL3Window*)data;
-  int flags = glwin->mode();
-  if (doublebuff) flags |= FL_DOUBLE; else flags &= ~FL_DOUBLE;
-  glwin->mode(flags);
-  glwin->reset();
-}
-
-
-Fl_Text_Display *output; // shared between output_win() and add_output()
-
-void output_win(SimpleGL3Window *gl)
-{
-  output = new Fl_Text_Display(300,0,500, 280);
-  Fl_Light_Button *lb = new Fl_Light_Button(300, 280, 500, 20, "Double-Buffered");
-  lb->callback(toggle_double);
-  lb->user_data(gl);
-  lb->value(1);
-  output->buffer(new Fl_Text_Buffer());
-}
-
-
-void add_output(const char *format, ...)
-{
-  va_list args;
-  char line_buffer[10000];
-  va_start(args, format);
-  vsnprintf(line_buffer, sizeof(line_buffer)-1, format, args);
-  va_end(args);
-  output->buffer()->append(line_buffer);
-  output->scroll(10000, 0);
-  output->redraw();
-}
-
-
-int main(int argc, char **argv)
-{
-  Fl::use_high_res_GL(1);
-  Fl_Window *topwin = new Fl_Window(800, 300);
-  SimpleGL3Window *win = new SimpleGL3Window(0, 0, 300, 300);
-  win->end();
-  output_win(win);
-  topwin->end();
-  topwin->resizable(win);
-  topwin->label("Click GL panel to reshape");
-  topwin->show(argc, argv);
-  Fl::run();
-}
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/examples/README.examples
+++ /dev/null
@@ -1,122 +1,0 @@
-FLTK EXAMPLE PROGRAMS
----------------------
-
-    This directory contains example FLTK programs that demonstrate
-    recommended programming practices and techniques for FLTK application
-    programmers. The "*-simple.cxx" files are a good starting point for
-    those new to FLTK.
-
-    The programs in this directory are NOT built automatically 
-    when you build FLTK; you have to manually build them.
-
-    The goals of these example programs:
-
-      o Show good programming style for app programmers to emulate
-
-      o Show simple examples of how to use widgets to new users of FLTK.
-
-      o Show intermediate or advanced examples of techniques often 
-        misused or hard to document
-
-      o Demonstrate code that are FAQs on the newsgroup forum.
-	(such as how to use threads, callbacks, etc)
-
-      o Example code should be short, but not at the expense of clarity.
-
-      o Where possible, examples should emphasize FLTK's simplicity.
-
-
-NEW SUBMISSIONS: RECOMMENDED PRACTICES
-
-    These programs must follow FLTK coding style as defined in the FLTK
-    "CMP" (Configuration Management Plan/Coding Standards).
-
-    Example code should have the above goals in mind.  The best examples
-    are those that are as short and clear as possible; terse, but not
-    at the expense of clarity.
-
-    To avoid cluttering up the top level directory with ancillary files
-    (such as image files or icons), examples that depend on more than
-    just a .cxx/.h file pair should have their own subdirectory.
-
-    Data files common to several examples should be located in the
-    examples/data directory. 
-    
-    Ancillary data files should be as small as possible, to keep the 
-    distribution tar files small. Avoid high resolution images or
-    uncompressed images when possible. 
-    
-    Examples that need large data sets (HD images, etc) should not
-    be part of the FLTK distribution; they can be provided as separate
-    packages (eg. as articles or external links).
-
-    Some widgets have multiple capabilities that are best demonstrated
-    separately. For instance, the table widget can be used as a
-    custom data table, or as a spreadsheet, or as a widget container.
-    So separate examples for each would be e.g. "table-custom-data.cxx",
-    "table-spreadsheet.cxx", "table-widget-container.cxx", etc.
-
-    Example programs should contain comments that help understand the
-    concepts shown, but not so verbose as to dwarf the code or make
-    the code hard to read. Within code, it's best to use single line
-    comments to emphasize code that might be unclear. Let the code
-    speak as much as possible.
-
-    Examples programs may be referred to from the documentation
-    as good examples on how to do particular programming techniques.
-
-
-NAMING CONVENTIONS
-
-    Example programs that demonstrate a particular widget should start
-    with that widget's name in lowercase, eg. "table.cxx" for Fl_Table.
-
-    Demonstrations of a particular technique should start with
-    "howto-xxx.cxx" to avoid naming conflicts with future widgets 
-    of the same name.
-
-      xxx-simple.cxx          -- Simplest possible example of widget xxx
-                                 eg. table-simple.cxx
-
-      xxx-<technique>.cxx     -- A particular "technique" using widget xxx
-                                 eg. "table-spreadsheet.cxx"
-
-      howto-<technique>.cxx   -- Demonstrate a particular technique, eg. "howto-threading.cxx"
-
-    Some example programs may depend on multiple files. To avoid
-    cluttering up the top level examples directory, such examples will
-    have their own subdirectory with the files they depend on localized
-    to that directory.
-
-    Example programs should be as small as possible, to keep the
-    distribution tar files small.
-
-    Very large examples, or examples that depend on large data sets
-    should be submitted as separate articles on the FLTK site, or as
-    external links on the FLTK site's 'links' page.
-
-
-HISTORY
-
-    Previous to FLTK 1.3.0, the fltk/test directory served the dual
-    purpose of containing test suites as well as example code.
-
-    But the fltk/test programs started becoming necessarily complex,
-    testing for obscure problems, and not necessarily good demos for
-    applications programmers.
-
-    The fltk/examples directory was created in FLTK 1.3.0 to separate
-    'good programming examples' from the test suite code. 
-
-
-DISCLAIMER
-
-    The examples in this directory are provided 'as-is', without any express
-    or implied warranty.  In no event will the authors be held liable for
-    any damages arising from the use of this software.
-  
-
-BUGS
-
-    If you find a bug, please report it through the fltk STR form at
-    http://fltk.org/str.php
--- a/DoConfig/fltk/examples/clipboard.cxx
+++ /dev/null
@@ -1,173 +1,0 @@
-//
-// "$Id$"
-//
-// Clipboard display test application for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#ifdef WIN32
-#include <windows.h>
-#endif // WIN32
-
-/* Displays and follows the content of the clipboard with either image or text data
- */
-
-Fl_Box *image_box;
-Fl_Box *image_size;
-Fl_Text_Display *display;
-
-class chess : public Fl_Box { // a box with a chess-like pattern below its image
-public:
-  chess(int x, int y, int w, int h) : Fl_Box(FL_FLAT_BOX,x,y,w,h,0) {
-    align(FL_ALIGN_CENTER | FL_ALIGN_CLIP);
-  }
-  void draw() {
-    draw_box();
-    Fl_Image *im = image();
-    if (im) { // draw the chess pattern below the box centered image
-      int X = x() + (w()-im->w())/2, Y = y() + (h()-im->h())/2, W = im->w(), H = im->h();
-      fl_push_clip(X,Y,W,H);
-      fl_push_clip(x(),y(),w(),h());
-      fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
-      fl_color(FL_LIGHT2);
-      const int side = 4, side2 = 2*side;
-      for (int j=Y; j<Y+H; j+=side) {
-	for (int i=X + (j-Y)%side2; i<X+W; i+=side2) {
-	  fl_rectf(i,j,side,side);
-	}
-      }
-      fl_pop_clip();
-      fl_pop_clip();
-    }
-    draw_label(); // draw the box image
-  }
-} *chess_obj;
-
-#define TAB_COLOR FL_DARK3
-
-class clipboard_viewer : public Fl_Tabs { // use tabs to display as appropriate the image or textual content of the clipboard
-public:
-  clipboard_viewer(int x, int y, int w, int h) : Fl_Tabs(x,y,w,h) {};
-  virtual int handle(int event) {
-    if (event != FL_PASTE) return Fl_Tabs::handle(event);
-    if (strcmp(Fl::event_clipboard_type(), Fl::clipboard_image) == 0) { // an image is being pasted
-      Fl_Image *im = (Fl_Image*)Fl::event_clipboard(); // get it as an Fl_Image object
-      if (!im) return 1;
-      char title[300];
-      sprintf(title, "%dx%d",im->w(), im->h()); // display the image original size
-#ifdef WIN32
-      OpenClipboard(NULL); // display extra technical info about clipboard content
-      char *p=title + strlen(title);
-      int format = EnumClipboardFormats(0);
-      if (format && format < CF_MAX) { sprintf(p, " %d",format); p += strlen(p); }
-      while (format) {
-	format = EnumClipboardFormats(format);
-	if (format && format < CF_MAX) { sprintf(p, " %d",format); p += strlen(p); }
-      }
-      HANDLE h;
-      if ((h = GetClipboardData(CF_DIB))) {
-	LPBITMAPINFO lpBI = (LPBITMAPINFO)GlobalLock(h);
-	sprintf(p, " biBitCount=%d biCompression=%d biClrUsed=%d",
-		lpBI->bmiHeader.biBitCount, (int)lpBI->bmiHeader.biCompression, (int)lpBI->bmiHeader.biClrUsed);
-      }
-      CloseClipboard();
-#endif
-      float scale_x =  (float)im->w() / image_box->w(); // rescale the image if larger than the display box
-      float scale_y =  (float)im->h() / image_box->h();
-      float scale = scale_x;
-      if (scale_y > scale) scale = scale_y;
-      if (scale > 1) {
-	Fl_Image *im2 = im->copy(im->w()/scale, im->h()/scale);
-	delete im;
-	im = im2;
-      }
-      Fl_Image *oldim = image_box->image();
-      if (oldim) delete oldim;
-      image_box->image(im); // show the scaled image
-      image_size->copy_label(title);
-      value(image_box->parent());
-      window()->redraw();
-    }
-    else { // text is being pasted
-      display->buffer()->text(Fl::event_text());
-      value(display);
-      display->redraw();
-    }
-    return 1;
-  }
-} *tabs;
-
-
-void cb(Fl_Widget *wid, clipboard_viewer *tabs)
-{
-  if (Fl::clipboard_contains(Fl::clipboard_image)) {
-    Fl::paste(*tabs, 1, Fl::clipboard_image); // try to find image in the clipboard
-    return;
-  }
-  if (Fl::clipboard_contains(Fl::clipboard_plain_text)) Fl::paste(*tabs, 1, Fl::clipboard_plain_text); // also try to find text
-}
-
-void clip_callback(int source, void *data) { // called after clipboard was changed or at application activation
-  if ( source == 1 ) cb(NULL, (clipboard_viewer *)data);
-}
-
-int main(int argc, char **argv)
-{
-#if !(defined(__APPLE__) || defined(WIN32))
-  extern void fl_register_images();
-  fl_register_images(); // required to allow pasting of images
-#endif
-  Fl_Window* win = new Fl_Window(500, 550, "clipboard viewer");
-  tabs = new clipboard_viewer(0, 0, 500, 500);
-  Fl_Group *g = new Fl_Group( 5, 30, 490, 460, Fl::clipboard_image); // g will display the image form
-  g->box(FL_FLAT_BOX);
-  image_box = new chess(5, 30, 490, 450);
-  image_size = new Fl_Box(FL_NO_BOX, 5, 485, 490, 10, 0);
-  g->end();
-  g->selection_color(TAB_COLOR);
-
-  Fl_Text_Buffer *buffer = new Fl_Text_Buffer();
-  display = new Fl_Text_Display(5,30,490, 460, Fl::clipboard_plain_text); // display will display the text form
-  display->buffer(buffer);
-  display->selection_color(TAB_COLOR);
-  tabs->end();
-  tabs->resizable(display);
-
-  Fl_Group *g2 = new Fl_Group( 10,510,200,25);
-  Fl_Button *refresh = new Fl_Button(10,510,200,25, "Refresh from clipboard");
-  refresh->callback((Fl_Callback*)cb, tabs);
-  g2->end();
-  g2->resizable(NULL);
-  win->end();
-  win->resizable(tabs);
-  win->show(argc,argv);
-  clip_callback(1, tabs); // use clipboard content at start
-  Fl::add_clipboard_notify(clip_callback, tabs); // will update with new clipboard content immediately or at application activation
-
-  Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR); // set bilinear image scaling method
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/fltk-versions.cxx
+++ /dev/null
@@ -1,87 +1,0 @@
-//
-// "$Id$"
-//
-// Library version test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_ask.H>
-
-static char version[8][80] = { "","","","","","","","" };
-
-int main(int argc, char **argv) {
-
-  int versions = 0;
-
-  sprintf(version[versions++],"FL_VERSION        = %6.4f",FL_VERSION);
-  sprintf(version[versions++],"Fl::version()     = %6.4f  %s",Fl::version(),
-    (FL_VERSION == Fl::version()) ? "" : "***");
-
-#ifdef FL_API_VERSION
-  sprintf(version[versions++],"FL_API_VERSION    = %6d",FL_API_VERSION);
-  sprintf(version[versions++],"Fl::api_version() = %6d  %s",Fl::api_version(),
-    (FL_API_VERSION == Fl::api_version()) ? "" : "***");
-#endif
-
-#ifdef FL_ABI_VERSION
-  sprintf(version[versions++],"FL_ABI_VERSION    = %6d",FL_ABI_VERSION);
-  sprintf(version[versions++],"Fl::abi_version() = %6d  %s",Fl::abi_version(),
-    (FL_ABI_VERSION == Fl::abi_version()) ? "" : "***");
-#endif
-
-#ifdef FLTK_ABI_VERSION
-  sprintf(version[versions++],"FLTK_ABI_VERSION  = %6d",FLTK_ABI_VERSION);
-  sprintf(version[versions++],"NOTE: FLTK_ABI_VERSION is deprecated.\n"
-			      "Please use FL_ABI_VERSION instead !");
-#endif
-
-  for (int i=0; i<versions; i++) {
-    printf("%s\n",version[i]);
-  }
-
-#ifdef FL_ABI_VERSION
-  if (FL_ABI_VERSION != Fl::abi_version()) {
-    printf("*** FLTK ABI version mismatch: headers = %d, lib = %d ***\n",
-      FL_ABI_VERSION, Fl::abi_version());
-    fflush(stdout);
-    fl_message("*** FLTK ABI version mismatch: headers = %d, lib = %d ***",
-      FL_ABI_VERSION, Fl::abi_version());
-    // exit(1);
-  }
-#endif
-
-  Fl_Window *window = new Fl_Window(670,300);
-
-  Fl_Box *box[8];
-  for (int i=0; i<4; i++) {
-    box[2*i]   = new Fl_Box( 10,40+40*i,320,30,version[2*i]);
-    box[2*i+1] = new Fl_Box(340,40+40*i,320,30,version[2*i+1]);
-  }
-
-  for (int i=0; i<8; i++) {
-    box[i]->labelfont(FL_COURIER);
-    box[i]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
-  }
-
-  window->end();
-  window->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/howto-add_fd-and-popen.cxx
+++ /dev/null
@@ -1,76 +1,0 @@
-//
-// "$Id$"
-//
-//     How to use popen() and Fl::add_fd() - erco 10/04/04
-//     Originally from erco's cheat sheet, permission by author.
-//
-//     Shows how the interface can remain "alive" while external
-//     command is running and outputing occassional data. For instance,
-//     while the command is running, keyboard navigation works,
-//     text can be highlighted, and the interface can be resized.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Multi_Browser.H>
-
-#ifdef WIN32
-#  define PING_CMD "ping -n 10 localhost"	// 'slow command' under windows
-#  ifdef _MSC_VER
-#    define popen _popen
-#    define pclose _pclose
-#  else /*_MSC_VER*/
-#    include <unistd.h>				// non-MS win32 compilers (untested)
-#  endif /*_MSC_VER*/
-#else
-#  include <unistd.h>
-#  define PING_CMD "ping -i 2 -c 10 localhost"	// 'slow command' under unix
-#endif
-
-// GLOBALS
-FILE *G_fp = NULL;
-
-// Handler for add_fd() -- called whenever the ping command outputs a new line of data
-// Note: FL_SOCKET as 1st argument is used to fix a compiler error(!) on Windows 64-bit.
-// Unfortunately we need this in FLTK 1.3 - should hopefully be fixed in 1.4 with a better solution.
-void HandleFD(FL_SOCKET fd, void *data) {
-  Fl_Multi_Browser *brow = (Fl_Multi_Browser*)data;
-  char s[1024];
-  if ( fgets(s, 1023, G_fp) == NULL ) {		// read the line of data
-    Fl::remove_fd(fileno(G_fp));		// command ended? disconnect callback
-    pclose(G_fp);				// close the descriptor
-    brow->add(""); brow->add("<<DONE>>");	// append msg indicating command finished
-    return;
-  }
-  brow->add(s);					// line of data read? append to widget
-}
-
-int main(int argc, char *argv[]) {
-  Fl_Window win(600,600);
-  Fl_Multi_Browser brow(10,10,580,580);
-  if ( ( G_fp = popen(PING_CMD, "r") ) == NULL ) {	// start the external unix command
-    perror("popen failed");
-    return(1);
-  }
-  Fl::add_fd(fileno(G_fp), HandleFD, (void*)&brow);	// setup a callback for the popen()ed descriptor
-  win.resizable(brow);
-  win.show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/howto-browser-with-icons.cxx
+++ /dev/null
@@ -1,186 +1,0 @@
-//
-// "$Id$"
-//
-//    Demonstrate creating an Fl_Browser with icons - Greg Ercolano 10/07/09 (STR#1739)
-//
-//    Shows how one can add icons to items in a browser.
-//
-// Copyright 2009,2013 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-// 
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Browser.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Pixmap.H>
-
-static const char *big[] = {                       // XPM
-  "50 34 4 1",
-  "  c #000000",
-  "o c #ff9900",
-  "@ c #ffffff",
-  "# c None",
-  "##################################################",
-  "###      ##############################       ####",
-  "### ooooo  ###########################  ooooo ####",
-  "### oo  oo  #########################  oo  oo ####",
-  "### oo   oo  #######################  oo   oo ####",
-  "### oo    oo  #####################  oo    oo ####",
-  "### oo     oo  ###################  oo     oo ####",
-  "### oo      oo                     oo      oo ####",
-  "### oo       oo  ooooooooooooooo  oo       oo ####",
-  "### oo        ooooooooooooooooooooo        oo ####",
-  "### oo     ooooooooooooooooooooooooooo    ooo ####",
-  "#### oo   ooooooo ooooooooooooo ooooooo   oo #####",
-  "####  oo oooooooo ooooooooooooo oooooooo oo  #####",
-  "##### oo oooooooo ooooooooooooo oooooooo oo ######",
-  "#####  o ooooooooooooooooooooooooooooooo o  ######",
-  "###### ooooooooooooooooooooooooooooooooooo #######",
-  "##### ooooooooo     ooooooooo     ooooooooo ######",
-  "##### oooooooo  @@@  ooooooo  @@@  oooooooo ######",
-  "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
-  "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
-  "##### oooooooo  @@@  ooooooo  @@@  oooooooo ######",
-  "##### ooooooooo     ooooooooo     ooooooooo ######",
-  "###### oooooooooooooo       oooooooooooooo #######",
-  "###### oooooooo@@@@@@@     @@@@@@@oooooooo #######",
-  "###### ooooooo@@@@@@@@@   @@@@@@@@@ooooooo #######",
-  "####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########",
-  "######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########",
-  "########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########",
-  "########### @@@@@@@     @     @@@@@@@ ############",
-  "############  @@@@@@@@@@@@@@@@@@@@@  #############",
-  "##############  @@@@@@@@@@@@@@@@@  ###############",
-  "################    @@@@@@@@@    #################",
-  "####################         #####################",
-  "##################################################",
-};
-
-
-static const char *med[] = {                       // XPM
-  "14 14 2 1",
-  "# c #000000",
-  "  c #ffffff",
-  "##############",
-  "##############",
-  "##          ##",
-  "##  ##  ##  ##",
-  "##  ##  ##  ##",
-  "##   ####   ##",
-  "##    ##    ##",
-  "##    ##    ##",
-  "##   ####   ##",
-  "##  ##  ##  ##",
-  "##  ##  ##  ##",
-  "##          ##",
-  "##############",
-  "##############",
-};
-
-static const char *sml[] = {                       // XPM
-  "9 11 5 1",
-  ".  c None",
-  "@  c #000000",
-  "+  c #808080",
-  "r  c #802020",
-  "#  c #ff8080",
-  ".........",
-  ".........",
-  "@+.......",
-  "@@@+.....",
-  "@@r@@+...",
-  "@@##r@@+.",
-  "@@####r@@",
-  "@@##r@@+.",
-  "@@r@@+...",
-  "@@@+.....",
-  "@+.......",
-};
-
-// Create a custom browser
-//
-//    You don't *have* to derive a class just to control icons in a browser,
-//    but in final apps it's something you'd do to keep the implementation clean.
-//
-//    All it really comes down to is calling browser->icon() to define icons
-//    for the items you want.
-//
-class MyBrowser : public Fl_Browser {
-  Fl_Image *big_icon;
-  Fl_Image *med_icon;
-  Fl_Image *sml_icon;
-
-public:
-  MyBrowser(int X,int Y,int W,int H,const char *L=0) : Fl_Browser(X,Y,W,H,L) {
-
-    // Create icons (these could also be pngs, jpegs..)
-    big_icon = new Fl_Pixmap(big);
-    med_icon = new Fl_Pixmap(med);
-    sml_icon = new Fl_Pixmap(sml);
-
-    // Normal browser initialization stuff
-    textfont(FL_COURIER);
-    textsize(14);
-    type(FL_MULTI_BROWSER);
-    add("One");
-    add("Two");
-    add("Three");
-    add("Four");
-    add("Five");
-    add("Six");
-    add("Seven");
-  }
-  static void Choice_CB(Fl_Widget*w, void *d) {
-    MyBrowser *mb = (MyBrowser*)d;
-    Fl_Choice *ch = (Fl_Choice*)w;
-
-    // See which icon the user picked
-    Fl_Image *i = 0;
-	 if ( strcmp(ch->text(), "None"  ) == 0 ) { i = 0; }
-    else if ( strcmp(ch->text(), "Small" ) == 0 ) { i = mb->sml_icon; }
-    else if ( strcmp(ch->text(), "Medium") == 0 ) { i = mb->med_icon; }
-    else if ( strcmp(ch->text(), "Large" ) == 0 ) { i = mb->big_icon; }
-
-    // Change the icon of three browser items to what the user picked
-    //    This is all you have to do to change a browser item's icon.
-    //    The browser will automatically resize the items if need be.
-    mb->icon(3,i);
-    mb->icon(4,i);
-    mb->icon(5,i);
-  }
-};
-int main() {
-  Fl_Double_Window *w = new Fl_Double_Window(400,300);
-
-  // Create a browser
-  MyBrowser *b = new MyBrowser(10,40,w->w()-20,w->h()-50);
-
-  // Create a chooser to let the user change the icons
-  Fl_Choice *choice = new Fl_Choice(60,10,140,25,"Icon:");
-  choice->add("None");
-  choice->add("Small");
-  choice->add("Medium");
-  choice->add("Large");
-  choice->callback(MyBrowser::Choice_CB, (void*)b);
-  choice->take_focus();
-  choice->value(1); choice->do_callback();
-
-  w->end();
-  w->show();
-  return(Fl::run());
-} 
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/howto-drag-and-drop.cxx
+++ /dev/null
@@ -1,94 +1,0 @@
-//
-// "$Id$"
-//
-//     A simple demo of drag+drop with FLTK. 
-//     Originally from erco's cheat sheet, permission by author.
-//     Inspired by Michael Sephton's original example posted on fltk.general.
-//
-//     When you run the program, just drag the red square over
-//     to the green square to show a 'drag and drop' sequence.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-
-// SIMPLE SENDER CLASS
-class Sender : public Fl_Box {
-public:
-  // Ctor
-  Sender(int x,int y,int w,int h) : Fl_Box(x,y,w,h) {
-    box(FL_FLAT_BOX);
-    color(9);
-    label("Drag\nfrom\nhere..");
-  }
-  // Sender event handler
-  int handle(int event) {
-    int ret = Fl_Box::handle(event);
-    switch ( event ) {
-      case FL_PUSH: {             // do 'copy/dnd' when someone clicks on box
-        const char *msg = "It works!";
-	Fl::copy(msg,strlen(msg),0);
-	Fl::dnd();
-	ret = 1;
-	break;
-      }
-    }
-    return(ret);
-  }
-};
-// SIMPLE RECEIVER CLASS
-class Receiver : public Fl_Box {
-public:
-  // Ctor
-  Receiver(int x,int y,int w,int h) : Fl_Box(x,y,w,h) {
-    box(FL_FLAT_BOX); color(10); label("..to\nhere");
-  }
-  // Receiver event handler
-  int handle(int event) {
-    int ret = Fl_Box::handle(event);
-    switch ( event ) {
-      case FL_DND_ENTER:          // return(1) for these events to 'accept' dnd
-      case FL_DND_DRAG:
-      case FL_DND_RELEASE:
-	ret = 1;
-	break;
-      case FL_PASTE:              // handle actual drop (paste) operation
-	label(Fl::event_text());
-	fprintf(stderr, "Pasted '%s'\n", Fl::event_text());
-	ret = 1;
-	break;
-    }
-    return(ret);
-  }
-};
-int main(int argc, char **argv) {
-  // Create sender window and widget
-  Fl_Window win_a(0,0,200,100,"Sender");
-  Sender a(0,0,100,100);
-  win_a.end();
-  win_a.show();
-  // Create receiver window and widget
-  Fl_Window win_b(400,0,200,100,"Receiver");
-  Receiver b(100,0,100,100);
-  win_b.end();
-  win_b.show();
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/howto-parse-args.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-//     How to parse command line arguments - Duncan Gibson 2010-10-23
-//     First posted in http://www.fltk.org/newsgroups.php?gfltk.general+v:31449
-//
-//     Shows how to decode additional command line arguments using Fl::args()
-//     on top of the "standard" options used by the toolkit itself.
-//
-//     Note that this only handles "option separateValue" rather than the
-//     usual *nix idiom of "option=value", and provides no validation nor
-//     conversion of the paramter string into ints or floats.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <string.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Window.H>
-
-int helpFlag = 0;
-char *optionString = 0;
-
-/*
- * callback function passed to Fl::args() to parse individual argument.
- * If there is a match, 'i' must be incremented by 2 or 1 as appropriate.
- * If there is no match, Fl::args() will then call Fl::arg() as fallback
- * to try to match the "standard" FLTK parameters.
- * 
- * Returns 2 if argv[i] matches with required parameter in argv[i+1],
- * returns 1 if argv[i] matches on its own,
- * returns 0 if argv[i] does not match.
- */
-int arg(int argc, char **argv, int &i)
-{
-  if (strcmp("-h", argv[i]) == 0 || strcmp("--help", argv[i]) == 0) {
-    helpFlag = 1;
-    i += 1;
-    return 1;
-  }
-  if (strcmp("-o", argv[i]) == 0 || strcmp("--option", argv[i]) == 0) {
-    if (i < argc-1 && argv[i+1] != 0) {
-      optionString = argv[i+1];
-      i += 2;
-      return 2;
-    }
-  }
-  return 0;
-}
-
-int main(int argc, char** argv)
-{
-  int i = 1;
-  if (Fl::args(argc, argv, i, arg) < argc)
-    // note the concatenated strings to give a single format string!
-    Fl::fatal("error: unknown option: %s\n"
-              "usage: %s [options]\n"
-              " -h | --help     : print extended help message\n"
-              " -o | --option # : example option with parameter\n"
-              " plus standard fltk options\n",
-              argv[i], argv[0]);
-  if (helpFlag)
-    Fl::fatal("usage: %s [options]\n"
-              " -h | --help     : print extended help message\n"
-              " -o | --option # : example option with parameter\n"
-              " plus standard fltk options:\n"
-              "%s\n",
-              argv[0], Fl::help);
-
-  Fl_Window* mainWin = new Fl_Window(300, 200);
-  Fl_Box* textBox = new Fl_Box(0, 0, 300, 200);
-  if (optionString != 0)
-    textBox->label(optionString);
-  else
-    textBox->label("re-run with [-o|--option] text");
-  mainWin->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/howto-text-over-image-button.cxx
+++ /dev/null
@@ -1,82 +1,0 @@
-//
-// "$Id$"
-//
-// 	Simple example of a button with text over an image
-// 	Originally from erco's cheat sheet 10/25/2010, permission by author.
-//
-//	This shows how to include an 'inline' image (.xpm)
-//	and have it appear on an Fl_Button. Demonstrates the use of the
-//	FL_ALIGN_IMAGE_BACKDROP align() flag (new in FLTK 1.3.0).
-//
-//	Note that the XPM can just as easily be in an #include file,
-//	but to keep the example self contained, the image (a gray scale
-//	gradient) is included here.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Pixmap.H>
-
-/* XPM */
-static const char * gradient_xpm[] = {
-"135 20 26 1",
-"a 	c #e0e0e0", "b 	c #dcdcdc", "c 	c #d8d8d8", "d 	c #d4d4d4", "e 	c #d2d2d2",
-"f 	c #d0d0d0", "g 	c #cccccc", "h 	c #c8c8c8", "i 	c #c4c4c4", "j 	c #c2c2c2",
-"k 	c #c0c0c0", "l 	c #bcbcbc", "m 	c #b8b8b8", "n 	c #b4b4b4", "o 	c #b2b2b2",
-"p 	c #b0b0b0", "q 	c #acacac", "r 	c #a8a8a8", "s 	c #a4a4a4", "t 	c #a2a2a2",
-"u 	c #a0a0a0", "v 	c #9c9c9c", "w 	c #989898", "x 	c #949494", "y 	c #929292",
-"z 	c #909090",
-"aaaaaaaaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrssss",
-"aaaaaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssst",
-"aaabbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssstt",
-"bbbbbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrssssssssstttt",
-"bbbbbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttu",
-"bbcccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuu",
-"ccccccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuu",
-"cccddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvv",
-"ddddddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvv",
-"dddeeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvw",
-"eeeeeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwww",
-"eeefffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwww",
-"fffffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxx",
-"ffffgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxx",
-"fgggggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyy",
-"gggggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyyyyy",
-"ggghhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyyyyyyyy",
-"hhhhhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyyyyyyyyzzz",
-"hhhhiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyyyyyyyyzzzzzz",
-"hiiiiiiijjjjjjjkkkkkkkklllllllmmmmmmmnnnnnnnnnoooooooppppppppqqqqqqrrrrrrrsssssssssttttttuuuuuuuuvvvvvvvwwwwwwwwxxxxxxyyyyyyyyzzzzzzzzz"};
-
-int main(int argc, char **argv) {
-    Fl_Pixmap gradient(gradient_xpm);
-    Fl_Window *win = new Fl_Window(160, 75, "test");          // create window
-
-    Fl_Button *but1 = new Fl_Button(10,10,140,25,"Button 1"); // create regular button
-    but1->image(&gradient);                                   // assign it an image
-    but1->align(FL_ALIGN_IMAGE_BACKDROP|but1->align());       // use image as a 'backdrop'
-
-    Fl_Button *but2 = new Fl_Button(10,40,140,25,"Button 2"); // create second instance of button
-    but2->image(&gradient);                                   // assign it same image
-    but2->align(FL_ALIGN_IMAGE_BACKDROP|but2->align());       // use image as a 'backdrop'
-
-    win->end();
-    win->show(argc,argv);
-    return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/menubar-add.cxx
+++ /dev/null
@@ -1,84 +1,0 @@
-//
-// "$Id$"
-//
-//	An example of using Fl_Menu_Bar's add() to dynamically create menubars
-//
-//	Menu bars can be created several ways. Using add() allows
-//	dynamically creating a menubar using a 'pathname' syntax.
-//	Use if you're creating items dynamically, or if you're making 
-//	menubars by hand (as opposed to using fluid), as it's easier
-//	to type and read. 
-//
-//	In this case we're using one callback for all items, 
-//	but you can make unique callbacks for each item if needed.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>			// fprintf()
-#include <stdlib.h>			// exit()
-#include <string.h>			// strcmp()
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/filename.H>		// fl_open_uri()
-
-// This callback is invoked whenever the user clicks an item in the menu bar
-static void MyMenuCallback(Fl_Widget *w, void *) {
-  Fl_Menu_Bar *bar = (Fl_Menu_Bar*)w;				// Get the menubar widget
-  const Fl_Menu_Item *item = bar->mvalue();			// Get the menu item that was picked
-
-  char ipath[256]; bar->item_pathname(ipath, sizeof(ipath));	// Get full pathname of picked item
-
-  fprintf(stderr, "callback: You picked '%s'", item->label());	// Print item picked
-  fprintf(stderr, ", item_pathname() is '%s'", ipath);		// ..and full pathname
-
-  if ( item->flags & (FL_MENU_RADIO|FL_MENU_TOGGLE) ) {		// Toggle or radio item?
-    fprintf(stderr, ", value is %s", item->value()?"on":"off");	// Print item's value
-  }
-  fprintf(stderr, "\n");
-  if ( strcmp(item->label(), "Google") == 0 ) { fl_open_uri("http://google.com/"); }
-  if ( strcmp(item->label(), "&Quit") == 0 ) { exit(0); }
-}
-
-int main() {
-  Fl::scheme("gtk+");
-  Fl_Window *win = new Fl_Window(400,200, "menubar-simple");	// Create window
-  Fl_Menu_Bar *menu = new Fl_Menu_Bar(0,0,400,25);		// Create menubar, items..
-  menu->add("&File/&Open",  "^o", MyMenuCallback);
-  menu->add("&File/&Save",  "^s", MyMenuCallback, 0, FL_MENU_DIVIDER);
-  menu->add("&File/&Quit",  "^q", MyMenuCallback);
-  menu->add("&Edit/&Copy",  "^c", MyMenuCallback);
-  menu->add("&Edit/&Paste", "^v", MyMenuCallback, 0, FL_MENU_DIVIDER);
-  menu->add("&Edit/Radio 1",   0, MyMenuCallback, 0, FL_MENU_RADIO);
-  menu->add("&Edit/Radio 2",   0, MyMenuCallback, 0, FL_MENU_RADIO|FL_MENU_DIVIDER);
-  menu->add("&Edit/Toggle 1",  0, MyMenuCallback, 0, FL_MENU_TOGGLE);			// Default: off 
-  menu->add("&Edit/Toggle 2",  0, MyMenuCallback, 0, FL_MENU_TOGGLE);			// Default: off
-  menu->add("&Edit/Toggle 3",  0, MyMenuCallback, 0, FL_MENU_TOGGLE|FL_MENU_VALUE);	// Default: on
-  menu->add("&Help/Google",    0, MyMenuCallback);
-
-  // Example: show how we can dynamically change the state of item Toggle #2 (turn it 'on')
-  {
-      Fl_Menu_Item *item = (Fl_Menu_Item*)menu->find_item("&Edit/Toggle 2");	// Find item
-      if ( item ) item->set();							// Turn it on
-      else fprintf(stderr, "'Toggle 2' item not found?!\n");			// (optional) Not found? complain!
-  }
-
-  win->end();
-  win->show();
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/nativefilechooser-simple-app.cxx
+++ /dev/null
@@ -1,152 +1,0 @@
-//
-// "$Id$"
-//
-//	An example of how to use Fl_Native_File_Chooser to open & save files.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>	// printf
-#include <stdlib.h>	// exit,malloc
-#include <string.h>	// strerror
-#include <errno.h>	// errno
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_ask.H>
-
-class Application : public Fl_Window {
-  Fl_Native_File_Chooser *fc;
-  // Does file exist?
-  int exist(const char *filename) {
-    FILE *fp = fl_fopen(filename, "r");
-    if (fp) { fclose(fp); return(1); }
-    else    { return(0); }
-  }
-  // 'Open' the file
-  void open(const char *filename) {
-    printf("Open '%s'\n", filename);
-  }
-  // 'Save' the file
-  //    Create the file if it doesn't exist
-  //    and save something in it.
-  //
-  void save(const char *filename) {
-    printf("Saving '%s'\n", filename);
-    if ( !exist(filename) ) {
-      FILE *fp = fl_fopen(filename, "w");				// create file if it doesn't exist
-      if ( fp ) {
-        // A real app would do something useful here.
-        fprintf(fp, "Hello world.\n");
-        fclose(fp);
-      } else {
-        fl_message("Error: %s: %s", filename, strerror(errno));
-      }
-    } else {
-      // A real app would do something useful here.
-    }
-  }
-  // Handle an 'Open' request from the menu
-  static void open_cb(Fl_Widget *w, void *v) {
-    Application *app = (Application*)v;
-    app->fc->title("Open");
-    app->fc->type(Fl_Native_File_Chooser::BROWSE_FILE);		// only picks files that exist
-    switch ( app->fc->show() ) {
-      case -1: break;	// Error
-      case  1: break; 	// Cancel
-      default:		// Choice
-        app->fc->preset_file(app->fc->filename());
-        app->open(app->fc->filename());
-	break;
-    }
-  }
-  // Handle a 'Save as' request from the menu
-  static void saveas_cb(Fl_Widget *w, void *v) {
-    Application *app = (Application*)v;
-    app->fc->title("Save As");
-    app->fc->type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);	// need this if file doesn't exist yet
-    switch ( app->fc->show() ) {
-      case -1: break;	// Error
-      case  1: break; 	// Cancel
-      default:		// Choice
-        app->fc->preset_file(app->fc->filename());
-        app->save(app->fc->filename());
-	break;
-    }
-  }
-  // Handle a 'Save' request from the menu
-  static void save_cb(Fl_Widget *w, void *v) {
-    Application *app = (Application*)v;
-    if ( strlen(app->fc->filename()) == 0 ) {
-      saveas_cb(w,v);
-    } else {
-      app->save(app->fc->filename());
-    }
-  }
-  static void quit_cb(Fl_Widget *w, void *v) {
-    exit(0);
-  }
-  // Return an 'untitled' default pathname
-  const char* untitled_default() {
-    static char *filename = 0;
-    if ( !filename ) {
-      const char *home =
-        getenv("HOME") ? getenv("HOME") :		 // unix
-	getenv("HOME_PATH") ? getenv("HOME_PATH") :	 // windows
-	".";						 // other
-      filename = (char*)malloc(strlen(home)+20);
-      sprintf(filename, "%s/untitled.txt", home);
-    }
-    return(filename);
-  }
-public:
-  // CTOR
-  Application() : Fl_Window(400,200,"Native File Chooser Example") {
-    Fl_Menu_Bar *menu = new Fl_Menu_Bar(0,0,400,25);
-    menu->add("&File/&Open",  FL_COMMAND+'o', open_cb, (void*)this);
-    menu->add("&File/&Save",  FL_COMMAND+'s', save_cb, (void*)this);
-    menu->add("&File/&Save As", 0,  saveas_cb, (void*)this);
-    menu->add("&File/&Quit",  FL_COMMAND+'q', quit_cb);
-    // Describe the demo..
-    Fl_Box *box = new Fl_Box(20,25+20,w()-40,h()-40-25);
-    box->color(45); 
-    box->box(FL_FLAT_BOX);
-    box->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-    box->label("This demo shows an example of implementing "
-               "common 'File' menu operations like:\n"
-               "    File/Open, File/Save, File/Save As\n"
-	       "..using the Fl_Native_File_Chooser widget.\n\n"
-	       "Note 'Save' and 'Save As' really *does* create files! "
-	       "This is to show how behavior differs when "
-	       "files exist vs. do not.");
-    box->labelsize(12);
-    // Initialize the file chooser
-    fc = new Fl_Native_File_Chooser();
-    fc->filter("Text\t*.txt\n");
-    fc->preset_file(untitled_default());
-    end();
-  }
-};
-
-int main(int argc, char *argv[]) {
-  Fl::scheme("gtk+");
-  Application *app = new Application();
-  app->show(argc,argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/progress-simple.cxx
+++ /dev/null
@@ -1,78 +1,0 @@
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Progress.H>
-
-//
-// "$Id$"
-//
-// Demonstrate using the Fl_Progress widget in an application - erco 05/02/2005
-//
-// Copyright 2005,2012 Greg Ercolano.
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-// WINDOWS
-#include <windows.h>
-#define usleep(v) Sleep(v/1000)
-#else /*WIN32*/
-// UNIX
-#include <unistd.h>                            // usleep
-#endif /*WIN32*/
-
-// Button callback
-void butt_cb(Fl_Widget *butt, void *data) {
-
-    // Deactivate the button
-    butt->deactivate();                        // prevent button from being pressed again                   
-    Fl::check();                               // give fltk some cpu to gray out button
-    // Make the progress bar
-    Fl_Window *w = (Fl_Window*)data;           // access parent window
-    w->begin();                                // add progress bar to it..
-    Fl_Progress *progress = new Fl_Progress(10,50,200,30);
-    progress->minimum(0);                      // set progress range to be 0.0 ~ 1.0
-    progress->maximum(1);
-    progress->color(0x88888800);               // background color
-    progress->selection_color(0x4444ff00);     // progress bar color
-    progress->labelcolor(FL_WHITE);            // percent text color
-    w->end();                                  // end adding to window
-    // Computation loop..
-    for ( int t=1; t<=500; t++ ) {
-        progress->value(t/500.0);              // update progress bar with 0.0 ~ 1.0 value
-        char percent[10];
-        sprintf(percent, "%d%%", int((t/500.0)*100.0));
-        progress->label(percent);              // update progress bar's label
-        Fl::check();                           // give fltk some cpu to update the screen
-        usleep(1000);                          // 'your stuff' that's compute intensive
-    }
-    // Cleanup
-    w->remove(progress);                       // remove progress bar from window
-    delete(progress);                          // deallocate it
-    butt->activate();                          // reactivate button
-    w->redraw();                               // tell window to redraw now that progress removed
-}
-// Main
-int main() {
-    Fl_Window win(220,90);
-    Fl_Button butt(10,10,100,25,"Press");
-    butt.callback(butt_cb, &win);
-    win.resizable(win);
-    win.show();
-    return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/shapedwindow.cxx
+++ /dev/null
@@ -1,126 +1,0 @@
-//
-// "$Id$"
-//
-// shapedwindow example source file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/Fl_Image_Surface.H>
-#include "test/pixmaps/tile.xpm"
-
-
-void cb(Fl_Widget *w, void *) {
-  w->window()->hide();
-}
-
-class dragbox : public Fl_Box {
-public:
-  dragbox(int x, int y, int w, int h, const char *t=0) : Fl_Box(x,y,w,h,t) {};
-  int handle(int event) {
-    static int fromx, fromy, winx, winy;
-    if (event == FL_PUSH) {
-      fromx = Fl::event_x_root();
-      fromy = Fl::event_y_root();
-      winx = window()->x_root();
-      winy = window()->y_root();
-      return 1;
-    }
-    else if (event == FL_DRAG) {
-      int deltax = Fl::event_x_root() - fromx;
-      int deltay = Fl::event_y_root() - fromy;
-      window()->position(winx + deltax, winy + deltay);
-      return 1;
-    }
-    return Fl_Box::handle(event);
-  }
-};
-
-const float factor = 1.3;
-
-void shrink(Fl_Widget *wdgt, void *data)
-{
-  Fl_Window *win = wdgt->window();
-  int old = win->w();
-  win->size(old/factor, old/factor);
-  if (win->w() <= *(int*)data) wdgt->deactivate();
-}
-
-void enlarge(Fl_Widget *wdgt, void *data)
-{
-  Fl_Window *win = wdgt->window();
-  int old = win->w();
-  win->size(old*factor, old*factor);
-  ((Fl_Widget*)data)->activate();
-}
-
-Fl_RGB_Image* prepare_shape(int w)
-{
-  // draw a white circle with a hole in it on black background
-  Fl_Image_Surface *surf = new Fl_Image_Surface(w, w);
-  Fl_Surface_Device* current = Fl_Surface_Device::surface();
-  surf->set_current();
-  fl_color(FL_BLACK);
-  fl_rectf(-1, -1, w+2, w+2);
-  fl_color(FL_WHITE);
-  fl_pie(2,2,w-4,w-4,0,360);
-  fl_color(FL_BLACK);
-  fl_pie(0.7*w,w/2,w/4,w/4,0,360);
-  Fl_RGB_Image* img = surf->image();
-  delete surf;
-  current->set_current();
-  return img; // return white image on black background
-}
-
-int main(int argc, char **argv) {
-  int dim = 200;
-  Fl_Double_Window *win = new Fl_Double_Window(100, 100, dim, dim, "Testing1");
-  Fl_RGB_Image *img = prepare_shape(dim);
-  win->shape(img);
-  dragbox *box = new dragbox(0, 0, win->w(), win->h());
-  box->image(new Fl_Tiled_Image(new Fl_Pixmap((const char * const *)tile_xpm)));
-  Fl_Group *g = new Fl_Group(10, 20, 80, 20);
-  g->box(FL_NO_BOX);
-  Fl_Button *b = new Fl_Button(10, 20, 80, 20, "Close");
-  b->callback(cb);
-  g->end();
-  g->resizable(NULL);
-  g = new Fl_Group(60, 70, 80, 40, "Drag me");
-  g->box(FL_NO_BOX);
-  g->align(FL_ALIGN_TOP);
-  Fl_Button *bs = new Fl_Button(60, 70, 80, 20, "Shrink");
-  bs->callback(shrink, &dim);
-  bs->deactivate();
-  Fl_Button *be = new Fl_Button(60, 90, 80, 20, "Enlarge");
-  be->callback(enlarge, bs);
-  g->end();
-  g->resizable(NULL);
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  Fl::run();
-  delete win;
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-as-container.cxx
+++ /dev/null
@@ -1,162 +1,0 @@
-//
-// "$Id$"
-//
-//	Show how FLTK widgets can be parented by Fl_Table. -erco 03/30/2003
-//
-//	Originally the 'widgettable.cxx' example program that came with 
-//	erco's Fl_Table widget. Added to FLTK in 2010.
-//
-//	This demonstrates how to use Fl_Table as a 'container' for FLTK
-//	widgets; one widget per cell. This isn't optimal for large tables,
-//	where it's better to make one instance of a widget, and move it to
-//	where it's needed. For an example of this, see the example program
-//	"table-spreadsheet.cxx".
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table.H>
-
-void button_cb(Fl_Widget *w, void*);
-
-//
-// Simple demonstration class deriving from Fl_Table
-//
-class WidgetTable : public Fl_Table {
-protected:
-  void draw_cell(TableContext context,  		// table cell drawing
-		 int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0);
-
-public:
-  WidgetTable(int x, int y, int w, int h, const char *l=0) : Fl_Table(x,y,w,h,l) {
-    col_header(1);
-    col_resize(1);
-    col_header_height(25);
-    row_header(1);
-    row_resize(1);
-    row_header_width(80);
-    end();
-  }
-  ~WidgetTable() { }
-
-  void SetSize(int newrows, int newcols) {
-    clear();		// clear any previous widgets, if any
-    rows(newrows);
-    cols(newcols);
-
-    begin();		// start adding widgets to group
-    {
-      for ( int r = 0; r<newrows; r++ ) {
-	for ( int c = 0; c<newcols; c++ ) {
-	  int X,Y,W,H;
-	  find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
-
-	  char s[40];
-	  if ( c & 1 ) {
-	    // Create the input widgets
-	    sprintf(s, "%d.%d", r, c);
-	    Fl_Input *in = new Fl_Input(X,Y,W,H);
-	    in->value(s);
-	  } else {
-	    // Create the light buttons
-	    sprintf(s, "%d/%d ", r, c);
-	    Fl_Light_Button *butt = new Fl_Light_Button(X,Y,W,H,strdup(s));
-	    butt->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
-	    butt->callback(button_cb, (void*)0);
-	    butt->value( ((r+c*2) & 4 ) ? 1 : 0);
-	  }
-	}
-      }
-    }
-    end();
-  }
-};
-
-// Handle drawing all cells in table
-void WidgetTable::draw_cell(TableContext context, 
-			  int R, int C, int X, int Y, int W, int H) {
-  switch ( context ) {
-    case CONTEXT_STARTPAGE:
-      fl_font(FL_HELVETICA, 12);		// font used by all headers
-      break;
-
-    case CONTEXT_RC_RESIZE: {
-      int X, Y, W, H;
-      int index = 0;
-      for ( int r = 0; r<rows(); r++ ) {
-	for ( int c = 0; c<cols(); c++ ) {
-	  if ( index >= children() ) break;
-	  find_cell(CONTEXT_TABLE, r, c, X, Y, W, H);
-	  child(index++)->resize(X,Y,W,H);
-	}
-      }
-      init_sizes();			// tell group children resized
-      return;
-    }
-
-    case CONTEXT_ROW_HEADER:
-      fl_push_clip(X, Y, W, H);
-      {
-	static char s[40];
-	sprintf(s, "Row %d", R);
-	fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, row_header_color());
-	fl_color(FL_BLACK);
-	fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_COL_HEADER:
-      fl_push_clip(X, Y, W, H);
-      {
-	static char s[40];
-	sprintf(s, "Column %d", C);
-	fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, col_header_color());
-	fl_color(FL_BLACK);
-	fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_CELL:
-      return;		// fltk handles drawing the widgets
-
-    default:
-      return;
-  }
-}
-
-void button_cb(Fl_Widget *w, void*) {
-  fprintf(stderr, "BUTTON: %s\n", (const char*)w->label());
-}
-
-int main() {
-  Fl_Double_Window win(940, 500, "table as container");
-  WidgetTable table(20, 20, win.w()-40, win.h()-40, "FLTK widget table");
-  table.SetSize(50, 50);
-  win.end();
-  win.resizable(table);
-  win.show();
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-simple.cxx
+++ /dev/null
@@ -1,121 +1,0 @@
-//
-// "$Id$"
-//
-//    Simple example of using Fl_Table - Greg Ercolano 11/29/2010
-//
-//    Demonstrates the simplest use of Fl_Table possible.
-//    Display a 10x10 array of integers with row/col headers.
-//    No interaction; simple display of data only.
-//    See other examples for more complex interactions with the table.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-// 
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Table.H>
-#include <FL/fl_draw.H>
-
-#define MAX_ROWS 30
-#define MAX_COLS 26		// A-Z
-
-// Derive a class from Fl_Table
-class MyTable : public Fl_Table {
-
-  int data[MAX_ROWS][MAX_COLS];		// data array for cells
-
-  // Draw the row/col headings
-  //    Make this a dark thin upbox with the text inside.
-  //
-  void DrawHeader(const char *s, int X, int Y, int W, int H) {
-    fl_push_clip(X,Y,W,H);
-      fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
-      fl_color(FL_BLACK);
-      fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-    fl_pop_clip();
-  } 
-  // Draw the cell data
-  //    Dark gray text on white background with subtle border
-  //
-  void DrawData(const char *s, int X, int Y, int W, int H) {
-    fl_push_clip(X,Y,W,H);
-      // Draw cell bg
-      fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
-      // Draw cell data
-      fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-      // Draw box border
-      fl_color(color()); fl_rect(X,Y,W,H);
-    fl_pop_clip();
-  } 
-  // Handle drawing table's cells
-  //     Fl_Table calls this function to draw each visible cell in the table.
-  //     It's up to us to use FLTK's drawing functions to draw the cells the way we want.
-  //
-  void draw_cell(TableContext context, int ROW=0, int COL=0, int X=0, int Y=0, int W=0, int H=0) {
-    static char s[40];
-    switch ( context ) {
-      case CONTEXT_STARTPAGE:                   // before page is drawn..
-        fl_font(FL_HELVETICA, 16);              // set the font for our drawing operations
-        return; 
-      case CONTEXT_COL_HEADER:                  // Draw column headers
-        sprintf(s,"%c",'A'+COL);                // "A", "B", "C", etc.
-        DrawHeader(s,X,Y,W,H);
-        return; 
-      case CONTEXT_ROW_HEADER:                  // Draw row headers
-        sprintf(s,"%03d:",ROW);                 // "001:", "002:", etc
-        DrawHeader(s,X,Y,W,H);
-        return; 
-      case CONTEXT_CELL:                        // Draw data in cells
-        sprintf(s,"%d",data[ROW][COL]);
-        DrawData(s,X,Y,W,H);
-        return;
-      default:
-        return;
-    }
-  }
-public:
-  // Constructor
-  //     Make our data array, and initialize the table options.
-  //
-  MyTable(int X, int Y, int W, int H, const char *L=0) : Fl_Table(X,Y,W,H,L) {
-    // Fill data array
-    for ( int r=0; r<MAX_ROWS; r++ )
-      for ( int c=0; c<MAX_COLS; c++ )
-        data[r][c] = 1000+(r*1000)+c;
-    // Rows
-    rows(MAX_ROWS);             // how many rows
-    row_header(1);              // enable row headers (along left)
-    row_height_all(20);         // default height of rows
-    row_resize(0);              // disable row resizing
-    // Cols
-    cols(MAX_COLS);             // how many columns
-    col_header(1);              // enable column headers (along top)
-    col_width_all(80);          // default width of columns
-    col_resize(1);              // enable column resizing
-    end();			// end the Fl_Table group
-  }
-  ~MyTable() { }
-};
-
-int main(int argc, char **argv) {
-  Fl_Double_Window win(900, 400, "Simple Table");
-  MyTable table(10,10,880,380);
-  win.end();
-  win.resizable(table);
-  win.show(argc,argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-sort.cxx
+++ /dev/null
@@ -1,291 +1,0 @@
-//
-// "$Id$"
-//
-//	table-sort -- An example application using a sortable Fl_Table
-//                
-//	Originally the 'sortapp.cxx' example program that came with 
-//	erco's Fl_Table widget. Added to FLTK in 2010.
-//
-//      Example of a non-trivial application that uses Fl_Table 
-//      with sortable columns. This example is not trying to be simple,
-//      but to demonstrate the complexities of an actual app.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-// 
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table_Row.H>
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <vector>
-#include <algorithm>            // STL sort
-
-#define MARGIN 20
-
-#ifdef WIN32
-// WINDOWS
-#  define DIRCMD          "dir"
-static const char *G_header[] = { "Date", "Time", "Size", "Filename", "", "", "", "", "", 0 };
-#  ifdef _MSC_VER
-#    define popen           _popen
-#  endif
-#else /*WIN32*/
-// UNIX
-#  define DIRCMD          "ls -l"
-static const char *G_header[] = { "Perms", "#L", "Own", "Group", "Size", "Date", "", "", "Filename", 0 };
-#endif /*WIN32*/
-
-// Font face/sizes for header and rows
-#define HEADER_FONTFACE FL_HELVETICA_BOLD
-#define HEADER_FONTSIZE 16
-#define ROW_FONTFACE    FL_HELVETICA
-#define ROW_FONTSIZE    16
-
-// A single row of columns
-class Row {
-public:
-    std::vector<char*> cols;
-};
-
-// Sort class to handle sorting column using std::sort
-class SortColumn {
-    int _col, _reverse;
-public:
-    SortColumn(int col, int reverse) {
-        _col = col;
-        _reverse = reverse;
-    }
-    bool operator()(const Row &a, const Row &b) {
-        const char *ap = ( _col < (int)a.cols.size() ) ? a.cols[_col] : "",
-                   *bp = ( _col < (int)b.cols.size() ) ? b.cols[_col] : "";
-        if ( isdigit(*ap) && isdigit(*bp) ) {           // cheezy detection of numeric data
-            // Numeric sort
-            int av=0; sscanf(ap, "%d", &av);
-            int bv=0; sscanf(bp, "%d", &bv);
-            return( _reverse ? av < bv : bv < av );
-        } else {
-            // Alphabetic sort
-            return( _reverse ? strcmp(ap, bp) > 0 : strcmp(ap, bp) < 0 );
-        }
-    }
-};
-
-// Derive a custom class from Fl_Table_Row
-class MyTable : public Fl_Table_Row {
-private:
-    std::vector<Row> _rowdata;                                  // data in each row
-    int _sort_reverse;
-    int _sort_lastcol;
-
-    static void event_callback(Fl_Widget*, void*);
-    void event_callback2();                                     // callback for table events
-
-protected:
-    void draw_cell(TableContext context, int R=0, int C=0,      // table cell drawing
-                   int X=0, int Y=0, int W=0, int H=0);
-    void sort_column(int col, int reverse=0);                   // sort table by a column
-    void draw_sort_arrow(int X,int Y,int W,int H);
-
-public:
-    // Ctor
-    MyTable(int x, int y, int w, int h, const char *l=0) : Fl_Table_Row(x,y,w,h,l) {
-        _sort_reverse = 0;
-        _sort_lastcol = -1;
-        end();
-        callback(event_callback, (void*)this);
-    }
-    ~MyTable() { }                              // Dtor
-    void load_command(const char *cmd);         // Load the output of a command into table
-    void autowidth(int pad);                    // Automatically set column widths to data
-    void resize_window();                       // Resize parent window to size of table
-};
-
-// Sort a column up or down
-void MyTable::sort_column(int col, int reverse) {
-    std::sort(_rowdata.begin(), _rowdata.end(), SortColumn(col, reverse));
-    redraw();
-}
-
-// Draw sort arrow
-void MyTable::draw_sort_arrow(int X,int Y,int W,int H) {
-    int xlft = X+(W-6)-8;
-    int xctr = X+(W-6)-4;
-    int xrit = X+(W-6)-0;
-    int ytop = Y+(H/2)-4;
-    int ybot = Y+(H/2)+4;
-    if ( _sort_reverse ) {
-        // Engraved down arrow
-        fl_color(FL_WHITE);
-        fl_line(xrit, ytop, xctr, ybot);
-        fl_color(41);                   // dark gray
-        fl_line(xlft, ytop, xrit, ytop);
-        fl_line(xlft, ytop, xctr, ybot);
-    } else {
-        // Engraved up arrow
-        fl_color(FL_WHITE);
-        fl_line(xrit, ybot, xctr, ytop);
-        fl_line(xrit, ybot, xlft, ybot);
-        fl_color(41);                   // dark gray
-        fl_line(xlft, ybot, xctr, ytop);
-    }
-}
-
-// Handle drawing all cells in table
-void MyTable::draw_cell(TableContext context, int R, int C, int X, int Y, int W, int H) {
-    const char *s = ""; 
-    if ( R < (int)_rowdata.size() && C < (int)_rowdata[R].cols.size() )
-        s = _rowdata[R].cols[C]; 
-    switch ( context ) {
-        case CONTEXT_COL_HEADER:
-            fl_push_clip(X,Y,W,H); {
-                fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_BACKGROUND_COLOR);
-                if ( C < 9 ) {
-		    fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
-                    fl_color(FL_BLACK);
-                    fl_draw(G_header[C], X+2,Y,W,H, FL_ALIGN_LEFT, 0, 0);         // +2=pad left 
-                    // Draw sort arrow
-                    if ( C == _sort_lastcol ) {
-                        draw_sort_arrow(X,Y,W,H);
-                    }
-                }
-            }
-            fl_pop_clip();
-            return; 
-        case CONTEXT_CELL: {
-            fl_push_clip(X,Y,W,H); {
-                // Bg color
-                Fl_Color bgcolor = row_selected(R) ? selection_color() : FL_WHITE;
-                fl_color(bgcolor); fl_rectf(X,Y,W,H); 
-		fl_font(ROW_FONTFACE, ROW_FONTSIZE);
-                fl_color(FL_BLACK); fl_draw(s, X+2,Y,W,H, FL_ALIGN_LEFT);     // +2=pad left 
-                // Border
-                fl_color(FL_LIGHT2); fl_rect(X,Y,W,H);
-            }
-            fl_pop_clip();
-            return;
-        }
-        default:
-            return;
-    }
-}
-
-// Automatically set column widths to widest data in each column
-void MyTable::autowidth(int pad) {
-    int w, h;
-    // Initialize all column widths to header width
-    fl_font(HEADER_FONTFACE, HEADER_FONTSIZE);
-    for ( int c=0; G_header[c]; c++ ) {
-	w=0; fl_measure(G_header[c], w, h, 0);                   // pixel width of header text
-        col_width(c, w+pad);
-    }
-    fl_font(ROW_FONTFACE, ROW_FONTSIZE);
-    for ( int r=0; r<(int)_rowdata.size(); r++ ) {
-        for ( int c=0; c<(int)_rowdata[r].cols.size(); c++ ) {
-            w=0; fl_measure(_rowdata[r].cols[c], w, h, 0);       // pixel width of row text
-            if ( (w + pad) > col_width(c)) col_width(c, w + pad);
-        }
-    }
-    table_resized();
-    redraw();
-}
-
-// Resize parent window to size of table
-void MyTable::resize_window() {
-    // Determine exact outer width of table with all columns visible
-    int width = 4;                                          // width of table borders
-    for ( int t=0; t<cols(); t++ ) width += col_width(t);   // total width of all columns
-    width += MARGIN*2;
-    if ( width < 200 || width > Fl::w() ) return;
-    window()->resize(window()->x(), window()->y(), width, window()->h());  // resize window to fit
-}
-
-// Load table with output of 'cmd'
-void MyTable::load_command(const char *cmd) {
-    char s[512];
-    FILE *fp = popen(cmd, "r");
-    cols(0);
-    for ( int r=0; fgets(s, sizeof(s)-1, fp); r++ ) {
-        // Add a new row
-        Row newrow; _rowdata.push_back(newrow);
-        std::vector<char*> &rc = _rowdata[r].cols;
-        // Break line into separate word 'columns'
-        char *ss;
-        const char *delim = " \t\n";
-        for(int t=0; (t==0)?(ss=strtok(s,delim)):(ss=strtok(NULL,delim)); t++) {
-            rc.push_back(strdup(ss));
-        }
-        // Keep track of max # columns
-        if ( (int)rc.size() > cols() ) {
-            cols((int)rc.size());
-        }
-    } 
-    // How many rows we loaded
-    rows((int)_rowdata.size()); 
-    // Auto-calculate widths, with 20 pixel padding
-    autowidth(20);
-}
-
-// Callback whenever someone clicks on different parts of the table
-void MyTable::event_callback(Fl_Widget*, void *data) {
-    MyTable *o = (MyTable*)data;
-    o->event_callback2();
-}
-
-void MyTable::event_callback2() {
-    //int ROW = callback_row();                 // unused
-    int COL = callback_col();
-    TableContext context = callback_context();
-    switch ( context ) {
-        case CONTEXT_COL_HEADER: {              // someone clicked on column header
-            if ( Fl::event() == FL_RELEASE && Fl::event_button() == 1 ) {
-                if ( _sort_lastcol == COL ) {   // Click same column? Toggle sort
-                    _sort_reverse ^= 1;
-                } else {                        // Click diff column? Up sort 
-                    _sort_reverse = 0;
-                }
-                sort_column(COL, _sort_reverse);
-                _sort_lastcol = COL;
-            }
-            break;
-        }
-        default:
-            return;
-    }
-}
-
-int main() {
-    Fl_Double_Window win(900,500,"Table Sorting");
-        MyTable table(MARGIN, MARGIN, win.w()-MARGIN*2, win.h()-MARGIN*2);
-        table.selection_color(FL_YELLOW);
-        table.col_header(1);
-        table.col_resize(1);
-        table.when(FL_WHEN_RELEASE);            // handle table events on release
-        table.load_command(DIRCMD);             // load table with a directory listing
-        table.row_height_all(18);               // height of all rows
-	table.tooltip("Click on column headings to toggle column sorting");
-	table.color(FL_WHITE);
-    win.end();
-    win.resizable(table);
-    table.resize_window();
-    win.show();
-    return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-spreadsheet-with-keyboard-nav.cxx
+++ /dev/null
@@ -1,342 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple example of an interactive spreadsheet using Fl_Table.
-//	Uses Mr. Satan's technique of instancing an Fl_Input around.
-//	Modified to test Jean-Marc's mods for keyboard nav and mouse selection.
-//
-//      Fl_Table[1.00/LGPL] 04/18/03 Mister Satan      -- Initial implementation, submitted to erco for Fl_Table
-//      Fl_Table[1.10/LGPL] 05/17/03 Greg Ercolano     -- Small mods to follow changes to Fl_Table
-//      Fl_Table[1.20/LGPL] 02/22/04 Jean-Marc Lienher -- Keyboard nav and mouse selection
-//      Fl_Table[1.21/LGPL] 02/22/04 Greg Ercolano     -- Small reformatting mods, comments
-//         FLTK[1.3.0/LGPL] 10/26/10 Greg Ercolano     -- Moved from Fl_Table to FLTK 1.3.x, CMP compliance
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Table.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/fl_draw.H>
-
-const int MAX_COLS = 26;
-const int MAX_ROWS = 500;
-
-class Spreadsheet : public Fl_Table {
-  Fl_Int_Input *input;					// single instance of Fl_Int_Input widget
-  int values[MAX_ROWS][MAX_COLS];			// array of data for cells
-  int row_edit, col_edit;				// row/col being modified
-  int s_left, s_top, s_right, s_bottom;			// kb nav + mouse selection
-
-protected:
-  void draw_cell(TableContext context,int=0,int=0,int=0,int=0,int=0,int=0);
-  void event_callback2();				// table's event callback (instance)
-  static void event_callback(Fl_Widget*, void *v) {	// table's event callback (static)
-    ((Spreadsheet*)v)->event_callback2();
-  }
-  static void input_cb(Fl_Widget*, void* v) {		// input widget's callback
-    ((Spreadsheet*)v)->set_value_hide();
-  }
-
-public:
-  Spreadsheet(int X,int Y,int W,int H,const char* L=0) : Fl_Table(X,Y,W,H,L) {
-    callback(&event_callback, (void*)this);
-    when(FL_WHEN_NOT_CHANGED|when());
-    // Create input widget that we'll use whenever user clicks on a cell
-    input = new Fl_Int_Input(W/2,H/2,0,0);
-    input->hide();
-    input->callback(input_cb, (void*)this);
-    input->when(FL_WHEN_ENTER_KEY_ALWAYS);		// callback triggered when user hits Enter
-    input->maximum_size(5);
-    row_edit = col_edit = 0;
-    s_left = s_top = s_right = s_bottom = 0;
-    for (int c = 0; c < MAX_COLS; c++)
-      for (int r = 0; r < MAX_ROWS; r++)
-	values[r][c] = (r + 2) * (c + 3);		// initialize cells
-    end();
-  }
-  ~Spreadsheet() { }
-
-  // Apply value from input widget to values[row][col] array and hide (done editing)
-  void set_value_hide() {
-    values[row_edit][col_edit] = atoi(input->value());
-    input->hide();
-    window()->cursor(FL_CURSOR_DEFAULT);		// XXX: if we don't do this, cursor can disappear!
-  }
-  // Change number of rows
-  void rows(int val) {
-    Fl_Table::rows(val);
-  }
-  // Change number of columns
-  void cols(int val) {
-    Fl_Table::cols(val);
-  }
-  // Get number of rows
-  inline int rows() {
-    return Fl_Table::rows();
-  }
-  // Get number of columns
-  inline int cols() {
-    return Fl_Table::cols();
-  }
-  // Start editing a new cell: move the Fl_Int_Input widget to specified row/column
-  //    Preload the widget with the cell's current value,
-  //    and make the widget 'appear' at the cell's location.
-  //
-  void start_editing(int R, int C) {
-    row_edit = R;					// Now editing this row/col
-    col_edit = C;
-    int X,Y,W,H;
-    find_cell(CONTEXT_CELL, R,C, X,Y,W,H);		// Find X/Y/W/H of cell
-    input->resize(X,Y,W,H);				// Move Fl_Input widget there
-    char s[30]; sprintf(s, "%d", values[R][C]);		// Load input widget with cell's current value
-    input->value(s);
-    input->position(0,strlen(s));			// Select entire input field
-    input->show();					// Show the input widget, now that we've positioned it
-    input->take_focus();
-  }
-  // Tell the input widget it's done editing, and to 'hide'
-  void done_editing() {
-    if (input->visible()) {				// input widget visible, ie. edit in progress?
-      set_value_hide();					// Transfer its current contents to cell and hide
-    }
-  }
-  // Return the sum of all rows in this column
-  int sum_rows(int C) {
-    int sum = 0;
-    for (int r=0; r<rows()-1; ++r)			// -1: don't include cell data in 'totals' column
-      sum += values[r][C];
-    return(sum);
-  }
-  // Return the sum of all cols in this row
-  int sum_cols(int R) {
-    int sum = 0;
-    for (int c=0; c<cols()-1; ++c)			// -1: don't include cell data in 'totals' column
-      sum += values[R][c];
-    return(sum);
-  }
-  // Return the sum of all cells in table
-  int sum_all() {
-    int sum = 0;
-    for (int c=0; c<cols()-1; ++c)			// -1: don't include cell data in 'totals' column
-      for (int r=0; r<rows()-1; ++r)			// -1: ""
-	sum += values[r][c];
-    return(sum);
-  }
-};
-
-// Handle drawing all cells in table
-void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W,int H) {
-  static char s[30]; 
-  switch ( context ) {
-    case CONTEXT_STARTPAGE:			// table about to redraw
-      // Get kb nav + mouse 'selection region' for use below
-      get_selection(s_top, s_left, s_bottom, s_right);
-      break;
-
-    case CONTEXT_COL_HEADER:			// table wants us to draw a column heading (C is column)
-      fl_font(FL_HELVETICA | FL_BOLD, 14);	// set font for heading to bold
-      fl_push_clip(X,Y,W,H);			// clip region for text
-      {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
-	fl_color(FL_BLACK);
-	if (C == cols()-1) {			// Last column? show 'TOTAL'
-	  fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
-	} else {				// Not last column? show column letter
-	  sprintf(s, "%c", 'A' + C);
-	  fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-	}
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_ROW_HEADER:			// table wants us to draw a row heading (R is row)
-      fl_font(FL_HELVETICA | FL_BOLD, 14);	// set font for row heading to bold
-      fl_push_clip(X,Y,W,H);
-      {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
-	fl_color(FL_BLACK);
-	if (R == rows()-1) {			// Last row? Show 'Total'
-	  fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
-	} else {				// Not last row? show row#
-	  sprintf(s, "%d", R+1);
-	  fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-	}
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_CELL: {			// table wants us to draw a cell
-      if (R == row_edit && C == col_edit && input->visible()) {
-	return;					// dont draw for cell with input widget over it
-      }
-      // Background
-      // Keyboard nav and mouse selection highlighting
-      if (R >= s_top && R <= s_bottom && C >= s_left && C <= s_right) {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_YELLOW);
-      } else if ( C < cols()-1 && R < rows()-1 ) {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, FL_WHITE);
-      } else {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, 0xbbddbb00);	// money green
-      }
-      // Text
-      fl_push_clip(X+3, Y+3, W-6, H-6);
-      {
-	fl_color(FL_BLACK); 
-	if (C == cols()-1 || R == rows()-1) {	// Last row or col? Show total
-	  fl_font(FL_HELVETICA | FL_BOLD, 14);	// ..in bold font
-	  if (C == cols()-1 && R == rows()-1) {	// Last row+col? Total all cells
-	    sprintf(s, "%d", sum_all());
-	  } else if (C == cols()-1) {		// Row subtotal
-	    sprintf(s, "%d", sum_cols(R));
-	  } else if (R == rows()-1) {		// Col subtotal
-	    sprintf(s, "%d", sum_rows(C));
-	  }
-	  fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
-	} else {				// Not last row or col? Show cell contents
-	  fl_font(FL_HELVETICA, 14);		// ..in regular font
-	  sprintf(s, "%d", values[R][C]);
-	  fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
-	}
-      }
-      fl_pop_clip();
-      return;
-    }
-
-    case CONTEXT_RC_RESIZE: {			// table resizing rows or columns
-      if (!input->visible()) return;
-      find_cell(CONTEXT_TABLE, row_edit, col_edit, X, Y, W, H);
-      if (X==input->x() && Y==input->y() && W==input->w() && H==input->h()) {
-	return;					// no change? ignore
-      }
-      input->resize(X,Y,W,H);
-      return;
-    }
-
-    default:
-      return;
-  }
-}
-
-// Callback whenever someone clicks on different parts of the table
-void Spreadsheet::event_callback2() {
-  int R = callback_row();
-  int C = callback_col();
-  TableContext context = callback_context(); 
-
-  switch ( context ) {
-    case CONTEXT_CELL: {				// A table event occurred on a cell
-      switch (Fl::event()) { 				// see what FLTK event caused it
-	case FL_PUSH:					// mouse click?
-	  done_editing();				// finish editing previous
-	  if (R != rows()-1 && C != cols()-1 )		// only edit cells not in total's columns
-	    start_editing(R,C);				// start new edit
-	  return;
-
-	case FL_KEYBOARD:				// key press in table?
-	  if ( Fl::event_key() == FL_Escape ) exit(0);	// ESC closes app
-	  if (C == cols()-1 || R == rows()-1) return;	// no editing of totals column
-	  done_editing();				// finish any previous editing
-	  set_selection(R, C, R, C);			// select the current cell
-	  start_editing(R,C);				// start new edit
-	  if (Fl::event() == FL_KEYBOARD && Fl::e_text[0] != '\r') {
-	    input->handle(Fl::event());			// pass keypress to input widget
-	  }
-	  return;
-      }
-      return;
-    }
-
-    case CONTEXT_TABLE:					// A table event occurred on dead zone in table
-    case CONTEXT_ROW_HEADER:				// A table event occurred on row/column header
-    case CONTEXT_COL_HEADER:
-      done_editing();					// done editing, hide
-      return;
-    
-    default:
-      return;
-  }
-}
-
-// Change number of columns
-void setcols_cb(Fl_Widget* w, void* v) {
-  Spreadsheet* table = (Spreadsheet*)v;
-  Fl_Valuator* in = (Fl_Valuator*)w;
-  int cols = int(in->value()) + 1;
-  table->cols(cols);
-  table->redraw();
-}
-
-// Change number of rows
-void setrows_cb(Fl_Widget* w, void* v) {
-  Spreadsheet* table = (Spreadsheet*)v;
-  Fl_Valuator* in = (Fl_Valuator*)w;
-  int rows = int(in->value()) + 1;
-  table->rows(rows);
-  table->redraw();
-}
-
-int main() {
-  Fl::option(Fl::OPTION_ARROW_FOCUS, 1);		// we want arrow keys to navigate table's widgets
-  Fl_Double_Window *win = new Fl_Double_Window(922, 382, "Fl_Table Spreadsheet with Keyboard Navigation");
-  Spreadsheet* table = new Spreadsheet(20, 20, win->w()-80, win->h()-80);
-  // Table rows
-  table->row_header(1);
-  table->row_header_width(70);
-  table->row_resize(1);
-  table->rows(11);
-  table->row_height_all(25);
-  // Table cols
-  table->col_header(1);
-  table->col_header_height(25);
-  table->col_resize(1);
-  table->cols(11);
-  table->col_width_all(70);
-  table->set_selection(0,0,0,0);	// select top/left cell
-
-  // Add children to window
-  win->begin();
-
-  // Row slider
-  Fl_Value_Slider setrows(win->w()-40,20,20,win->h()-80, 0);
-  setrows.type(FL_VERT_NICE_SLIDER);
-  setrows.bounds(2,MAX_ROWS);
-  setrows.step(1);
-  setrows.value(table->rows()-1);
-  setrows.callback(setrows_cb, (void*)table);
-  setrows.when(FL_WHEN_CHANGED);
-  setrows.clear_visible_focus();
-
-  // Column slider
-  Fl_Value_Slider setcols(20,win->h()-40,win->w()-80,20, 0);
-  setcols.type(FL_HOR_NICE_SLIDER);
-  setcols.bounds(2,MAX_COLS);
-  setcols.step(1);
-  setcols.value(table->cols()-1);
-  setcols.callback(setcols_cb, (void*)table);
-  setcols.when(FL_WHEN_CHANGED);
-  setcols.clear_visible_focus();
-
-  win->end();
-  win->resizable(table);
-  win->show();
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-spreadsheet.cxx
+++ /dev/null
@@ -1,279 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple example of an interactive spreadsheet using Fl_Table.
-//	Uses Mr. Satan's technique of instancing an Fl_Input around.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Table.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/fl_draw.H>
-
-const int MAX_COLS = 10;
-const int MAX_ROWS = 10;
-
-class Spreadsheet : public Fl_Table {
-  Fl_Int_Input *input;					// single instance of Fl_Int_Input widget
-  int values[MAX_ROWS][MAX_COLS];			// array of data for cells
-  int row_edit, col_edit;				// row/col being modified
-
-protected:
-  void draw_cell(TableContext context,int=0,int=0,int=0,int=0,int=0,int=0);
-  void event_callback2();				// table's event callback (instance)
-  static void event_callback(Fl_Widget*,void *v) {	// table's event callback (static)
-    ((Spreadsheet*)v)->event_callback2();
-  }
-  static void input_cb(Fl_Widget*,void* v) {		// input widget's callback
-    ((Spreadsheet*)v)->set_value_hide();
-  }
-
-public:
-  Spreadsheet(int X,int Y,int W,int H,const char* L=0) : Fl_Table(X,Y,W,H,L) {
-    callback(&event_callback, (void*)this);
-    when(FL_WHEN_NOT_CHANGED|when());
-    // Create input widget that we'll use whenever user clicks on a cell
-    input = new Fl_Int_Input(W/2,H/2,0,0);
-    input->hide();
-    input->callback(input_cb, (void*)this);
-    input->when(FL_WHEN_ENTER_KEY_ALWAYS);		// callback triggered when user hits Enter
-    input->maximum_size(5);
-    input->color(FL_YELLOW);
-    for (int c = 0; c < MAX_COLS; c++)
-      for (int r = 0; r < MAX_ROWS; r++)
-	values[r][c] = c + (r*MAX_COLS);		// initialize cells
-    end();
-    row_edit = col_edit = 0;
-    set_selection(0,0,0,0);
-  }
-  ~Spreadsheet() { }
-
-  // Apply value from input widget to values[row][col] array and hide (done editing)
-  void set_value_hide() {
-    values[row_edit][col_edit] = atoi(input->value());
-    input->hide();
-    window()->cursor(FL_CURSOR_DEFAULT);		// XXX: if we don't do this, cursor can disappear!
-  }
-  // Start editing a new cell: move the Fl_Int_Input widget to specified row/column
-  //    Preload the widget with the cell's current value,
-  //    and make the widget 'appear' at the cell's location.
-  //
-  void start_editing(int R, int C) {
-    row_edit = R;					// Now editing this row/col
-    col_edit = C;
-    set_selection(R,C,R,C);				// Clear any previous multicell selection
-    int X,Y,W,H;
-    find_cell(CONTEXT_CELL, R,C, X,Y,W,H);		// Find X/Y/W/H of cell
-    input->resize(X,Y,W,H);				// Move Fl_Input widget there
-    char s[30]; sprintf(s, "%d", values[R][C]);		// Load input widget with cell's current value
-    input->value(s);
-    input->position(0,strlen(s));			// Select entire input field
-    input->show();					// Show the input widget, now that we've positioned it
-    input->take_focus();
-  }
-  // Tell the input widget it's done editing, and to 'hide'
-  void done_editing() {
-    if (input->visible()) {				// input widget visible, ie. edit in progress?
-      set_value_hide();					// Transfer its current contents to cell and hide
-    }
-  }
-  // Return the sum of all rows in this column
-  int sum_rows(int C) {
-    int sum = 0;
-    for (int r=0; r<rows()-1; ++r)			// -1: don't include cell data in 'totals' column
-      sum += values[r][C];
-    return(sum);
-  }
-  // Return the sum of all cols in this row
-  int sum_cols(int R) {
-    int sum = 0;
-    for (int c=0; c<cols()-1; ++c)			// -1: don't include cell data in 'totals' column
-      sum += values[R][c];
-    return(sum);
-  }
-  // Return the sum of all cells in table
-  int sum_all() {
-    int sum = 0;
-    for (int c=0; c<cols()-1; ++c)			// -1: don't include cell data in 'totals' column
-      for (int r=0; r<rows()-1; ++r)			// -1: ""
-	sum += values[r][c];
-    return(sum);
-  }
-};
-
-// Handle drawing all cells in table
-void Spreadsheet::draw_cell(TableContext context, int R,int C, int X,int Y,int W,int H) {
-  static char s[30]; 
-  switch ( context ) {
-    case CONTEXT_STARTPAGE:			// table about to redraw
-      break;
-
-    case CONTEXT_COL_HEADER:			// table wants us to draw a column heading (C is column)
-      fl_font(FL_HELVETICA | FL_BOLD, 14);	// set font for heading to bold
-      fl_push_clip(X,Y,W,H);			// clip region for text
-      {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col_header_color());
-	fl_color(FL_BLACK);
-	if (C == cols()-1) {			// Last column? show 'TOTAL'
-	  fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
-	} else {				// Not last column? show column letter
-	  sprintf(s, "%c", 'A' + C);
-	  fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-	}
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_ROW_HEADER:			// table wants us to draw a row heading (R is row)
-      fl_font(FL_HELVETICA | FL_BOLD, 14);	// set font for row heading to bold
-      fl_push_clip(X,Y,W,H);
-      {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
-	fl_color(FL_BLACK);
-	if (R == rows()-1) {			// Last row? Show 'Total'
-	  fl_draw("TOTAL", X,Y,W,H, FL_ALIGN_CENTER);
-	} else {				// Not last row? show row#
-	  sprintf(s, "%d", R+1);
-	  fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-	}
-      }
-      fl_pop_clip();
-      return;
-
-    case CONTEXT_CELL: {			// table wants us to draw a cell
-      if (R == row_edit && C == col_edit && input->visible()) {
-	return;					// dont draw for cell with input widget over it
-      }
-      // Background
-      if ( C < cols()-1 && R < rows()-1 ) {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? FL_YELLOW : FL_WHITE);
-      } else {
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, is_selected(R,C) ? 0xddffdd00 : 0xbbddbb00);	// money green
-      }
-      // Text
-      fl_push_clip(X+3, Y+3, W-6, H-6);
-      {
-	fl_color(FL_BLACK); 
-	if (C == cols()-1 || R == rows()-1) {	// Last row or col? Show total
-	  fl_font(FL_HELVETICA | FL_BOLD, 14);	// ..in bold font
-	  if (C == cols()-1 && R == rows()-1) {	// Last row+col? Total all cells
-	    sprintf(s, "%d", sum_all());
-	  } else if (C == cols()-1) {		// Row subtotal
-	    sprintf(s, "%d", sum_cols(R));
-	  } else if (R == rows()-1) {		// Col subtotal
-	    sprintf(s, "%d", sum_rows(C));
-	  }
-	  fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
-	} else {				// Not last row or col? Show cell contents
-	  fl_font(FL_HELVETICA, 14);		// ..in regular font
-	  sprintf(s, "%d", values[R][C]);
-	  fl_draw(s, X+3,Y+3,W-6,H-6, FL_ALIGN_RIGHT);
-	}
-      }
-      fl_pop_clip();
-      return;
-    }
-
-    case CONTEXT_RC_RESIZE:			// table resizing rows or columns
-      if ( input->visible() ) {
-        find_cell(CONTEXT_TABLE, row_edit, col_edit, X, Y, W, H);
-        input->resize(X,Y,W,H);
-        init_sizes();
-      }
-      return;
-
-    default:
-      return;
-  }
-}
-
-// Callback whenever someone clicks on different parts of the table
-void Spreadsheet::event_callback2() {
-  int R = callback_row();
-  int C = callback_col();
-  TableContext context = callback_context(); 
-
-  switch ( context ) {
-    case CONTEXT_CELL: {				// A table event occurred on a cell
-      switch (Fl::event()) { 				// see what FLTK event caused it
-	case FL_PUSH:					// mouse click?
-	  done_editing();				// finish editing previous
-	  if (R != rows()-1 && C != cols()-1 )		// only edit cells not in total's columns
-	    start_editing(R,C);				// start new edit
-	  return;
-
-	case FL_KEYBOARD:				// key press in table?
-	  if ( Fl::event_key() == FL_Escape ) exit(0);	// ESC closes app
-	  done_editing();				// finish any previous editing
-	  if (C==cols()-1 || R==rows()-1) return;	// no editing of totals column
-	  switch ( Fl::e_text[0] ) {
-	    case '0': case '1': case '2': case '3':	// any of these should start editing new cell
-	    case '4': case '5': case '6': case '7':
-	    case '8': case '9': case '+': case '-':
-	      start_editing(R,C);			// start new edit
-	      input->handle(Fl::event());		// pass typed char to input
-	      break;
-	    case '\r': case '\n':			// let enter key edit the cell
-	      start_editing(R,C);			// start new edit
-	      break;
-	  }
-	  return;
-      }
-      return;
-    }
-
-    case CONTEXT_TABLE:					// A table event occurred on dead zone in table
-    case CONTEXT_ROW_HEADER:				// A table event occurred on row/column header
-    case CONTEXT_COL_HEADER:
-      done_editing();					// done editing, hide
-      return;
-    
-    default:
-      return;
-  }
-}
-
-int main() {
-  Fl_Double_Window *win = new Fl_Double_Window(862, 322, "Fl_Table Spreadsheet");
-  Spreadsheet *table = new Spreadsheet(10, 10, win->w()-20, win->h()-20);
-#if FLTK_ABI_VERSION >= 10303
-  table->tab_cell_nav(1);		// enable tab navigation of table cells (instead of fltk widgets)
-#endif
-  table->tooltip("Use keyboard to navigate cells:\n"
-                 "Arrow keys or Tab/Shift-Tab");
-  // Table rows
-  table->row_header(1);
-  table->row_header_width(70);
-  table->row_resize(1);
-  table->rows(MAX_ROWS+1);		// +1: leaves room for 'total row'
-  table->row_height_all(25);
-  // Table cols
-  table->col_header(1);
-  table->col_header_height(25);
-  table->col_resize(1);
-  table->cols(MAX_COLS+1);		// +1: leaves room for 'total column'
-  table->col_width_all(70);
-  // Show window
-  win->end();
-  win->resizable(table);
-  win->show();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/table-with-keynav.cxx
+++ /dev/null
@@ -1,182 +1,0 @@
-//
-// "$Id$"
-//
-//    Example of Fl_Table with keyboard selection navigation - Greg Ercolano 04/14/2012
-//
-//    Display a 10x10 multiplication table, and allow the user to
-//    make cell or row selections (with mouse or keyboard navigation)
-//    to select areas of the table, and show the sum of the cell's values.
-//
-//    Started with the "testkeyboardnav.cxx" example from the original
-//    Fl_Table project, using Jean-Marc Lienher's additions for keyboard nav.
-//
-// Copyright 2003, 2012 Greg Ercolano.
-// Copyright 2004 Jean-Marc Lienher
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Output.H>
-#include <FL/Fl_Table_Row.H>
-#include <FL/names.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-// GLOBALS
-class MyTable;
-Fl_Toggle_Button *G_rowselect = 0;		// toggle to enable row selection
-MyTable          *G_table = 0;			// table widget
-Fl_Output        *G_sum = 0;			// displays sum of user's selection
-
-class MyTable : public Fl_Table_Row {
-protected:
-    // Handle drawing all cells in table
-    void draw_cell(TableContext context, int R=0,int C=0, int X=0,int Y=0,int W=0,int H=0) {
-	static char s[30]; 
-	switch ( context ) {
-	    case CONTEXT_COL_HEADER:
-	    case CONTEXT_ROW_HEADER:
-		fl_font(FL_HELVETICA | FL_BOLD, 14);
-		fl_push_clip(X, Y, W, H);
-		{
-		    Fl_Color c = (context==CONTEXT_COL_HEADER) ? col_header_color() : row_header_color();
-		    fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, c);
-		    fl_color(FL_BLACK);
-		    // Draw text for headers
-		    sprintf(s, "%d", (context == CONTEXT_COL_HEADER) ? C : R);
-		    fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-		}
-		fl_pop_clip();
-		return;
-	    case CONTEXT_CELL: {
-		// Keyboard nav and mouse selection highlighting
-		int selected = G_rowselect->value() ? row_selected(R) : is_selected(R,C);
-		fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, selected ? FL_YELLOW : FL_WHITE);
-		// Draw text for the cell
-		fl_push_clip(X+3, Y+3, W-6, H-6);
-		{
-		    fl_font(FL_HELVETICA, 14);
-		    fl_color(FL_BLACK); 
-		    sprintf(s, "%d", R*C);		// factor row + col for data cells
-		    fl_draw(s, X+3, Y+3, W-6, H-6, FL_ALIGN_RIGHT);
-		}
-		fl_pop_clip();
-		return;
-	    }
-	    default:
-		return;
-	}
-    }
-public:
-    // CTOR
-    MyTable(int x, int y, int w, int h, const char *l=0) : Fl_Table_Row(x,y,w,h,l) {
-	// Row init
-	row_header(1);
-	row_header_width(70);
-	row_resize(1);
-	rows(11);
-	row_height_all(20);
-	// Col init
-	col_header(1);
-	col_header_height(20);
-	col_resize(1);
-	cols(11);
-	col_width_all(70);
-	end();			// Fl_Table derives from Fl_Group, so end() it
-    }
-    ~MyTable() { }
-    // Update the displayed sum value
-    int GetSelectionSum() {
-        int sum = -1;
-        for ( int R=0; R<rows(); R++ ) {
-	    for ( int C=0; C<cols(); C++ ) {
-	        if ( G_rowselect->value() ? row_selected(R) : is_selected(R,C) ) {
-		    if ( sum == -1 ) sum = 0;
-		    sum += R*C;
-		}
-	    }
-	}
-	return(sum);
-    }
-    // Update the "Selection sum:" display
-    void UpdateSum() {
-	static char s[80];
-	int sum = GetSelectionSum();
-	if ( sum == -1 ) { sprintf(s, "(nothing selected)"); G_sum->color(48); }
-	else             { sprintf(s, "%d", sum); G_sum->color(FL_WHITE); }
-	// Update only if different (lets one copy/paste from sum)
-	if ( strcmp(s,G_sum->value()))
-	    { G_sum->value(s); G_sum->redraw(); }
-    }
-    // Keyboard and mouse events
-    int handle(int e) {
-        int ret = Fl_Table_Row::handle(e);
-	if ( e == FL_KEYBOARD && Fl::event_key() == FL_Escape ) exit(0);
-        switch (e) {
-	    case FL_PUSH:
-	    case FL_RELEASE:
-	    case FL_KEYUP:
-	    case FL_KEYDOWN:
-	    case FL_DRAG: {
-		//ret = 1;		// *don't* indicate we 'handled' these, just update ('handling' prevents e.g. tab nav)
-	        UpdateSum();
-		redraw();
-		break;
-	    }
-	    case FL_FOCUS:		// tells FLTK we're interested in keyboard events
-	    case FL_UNFOCUS:
-	        ret = 1;
-		break;
-	}
-	return(ret);
-    }
-};
-
-// User changed the 'row select' toggle button
-void RowSelect_CB(Fl_Widget *w, void*) {
-    w->window()->redraw();		// redraw with changes applied
-    G_table->UpdateSum();
-}
-int main() {
-    Fl::option(Fl::OPTION_ARROW_FOCUS, 0);		// disable arrow focus nav (we want arrows to control cells)
-    Fl_Double_Window win(862, 312, "table-with-keynav");
-    win.begin();
-	// Create table
-	G_table = new MyTable(10, 30, win.w()-20, win.h()-70, "Times Table");
-	G_table->tooltip("Use mouse or Shift + Arrow Keys to make selections.\n"
-		         "Sum of selected values is shown.");
-	// Row select toggle button
-	G_rowselect = new Fl_Toggle_Button(140,10,12,12,"Row selection");
-	G_rowselect->align(FL_ALIGN_LEFT);
-	G_rowselect->value(0);
-	G_rowselect->selection_color(FL_YELLOW);
-	G_rowselect->callback(RowSelect_CB);
-	G_rowselect->tooltip("Click to toggle row vs. row/col selection");
-	// Selection sum display
-	win.end();
-	win.begin();
-	G_sum = new Fl_Output(140,G_table->y()+G_table->h()+10,160,25,"Selection Sum:");
-	G_sum->value("(nothing selected)");
-	G_sum->color(48);
-	G_sum->tooltip("This field shows the sum of the selected cells in the table");
-    win.end();
-    win.resizable(G_table);
-    win.show(); 
-    return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tabs-simple.cxx
+++ /dev/null
@@ -1,83 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple Fl_Tabs widget example. 
-//	Originally from erco's cheat sheet 06/05/2010, permission by author.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-//
-// Simple tabs example
-//      _____  _____
-//   __/ Aaa \/ Bbb \______________________
-//  |    _______                           |
-//  |   |_______|                          |
-//  |    _______                           |
-//  |   |_______|                          |
-//  |    _______                           |
-//  |   |_______|                          |
-//  |______________________________________|
-//
-int main(int argc, char *argv[]) {
-  Fl::scheme("gtk+");
-  Fl_Window *win = new Fl_Window(500,200,"Tabs Example");
-  {
-    // Create the tab widget
-    Fl_Tabs *tabs = new Fl_Tabs(10,10,500-20,200-20);
-    {
-      // ADD THE "Aaa" TAB
-      //   We do this by adding a child group to the tab widget.
-      //   The child group's label defined the label of the tab.
-      //
-      Fl_Group *aaa = new Fl_Group(10,35,500-20,200-45,"Aaa");
-      {
-	// Put some different buttons into the group, which will be shown
-	// when the tab is selected.
-	Fl_Button *b1 = new Fl_Button(50, 60,90,25,"Button A1"); b1->color(88+1);
-	Fl_Button *b2 = new Fl_Button(50, 90,90,25,"Button A2"); b2->color(88+2);
-	Fl_Button *b3 = new Fl_Button(50,120,90,25,"Button A3"); b3->color(88+3);
-      }
-      aaa->end();
-
-      // ADD THE "Bbb" TAB
-      //   Same details as above.
-      //
-      Fl_Group *bbb = new Fl_Group(10,35,500-10,200-35,"Bbb");
-      {
-	// Put some different buttons into the group, which will be shown
-	// when the tab is selected.
-	Fl_Button *b1 = new Fl_Button( 50,60,90,25,"Button B1"); b1->color(88+1);
-	Fl_Button *b2 = new Fl_Button(150,60,90,25,"Button B2"); b2->color(88+3);
-	Fl_Button *b3 = new Fl_Button(250,60,90,25,"Button B3"); b3->color(88+5);
-	Fl_Button *b4 = new Fl_Button( 50,90,90,25,"Button B4"); b4->color(88+2);
-	Fl_Button *b5 = new Fl_Button(150,90,90,25,"Button B5"); b5->color(88+4);
-	Fl_Button *b6 = new Fl_Button(250,90,90,25,"Button B6"); b6->color(88+6);
-      }
-      bbb->end();
-    }
-    tabs->end();
-  }
-  win->end();
-  win->show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/textdisplay-with-colors.cxx
+++ /dev/null
@@ -1,59 +1,0 @@
-//
-// "$Id$"
-//
-//	How to use Fl_Text_Display with colors. -erco 11/09/2010
-//	Originally from erco's cheat sheet, permission by author.
-//
-//	Shows how to use the two Fl_Text_Buffer's needed to manage
-//	the text and style info separately.
-//
-//	For an example of a color text *editor*, see the 'editor'
-//	example in the test directory.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Text_Display.H>
-int main() {
-   // Style table
-   Fl_Text_Display::Style_Table_Entry stable[] = {
-       // FONT COLOR      FONT FACE   FONT SIZE
-       // --------------- ----------- --------------
-       {  FL_RED,         FL_COURIER, 18 }, // A - Red
-       {  FL_DARK_YELLOW, FL_COURIER, 18 }, // B - Yellow
-       {  FL_DARK_GREEN,  FL_COURIER, 18 }, // C - Green
-       {  FL_BLUE,        FL_COURIER, 18 }, // D - Blue
-   };
-   Fl_Window *win = new Fl_Window(640, 480, "Simple Text Display With Colors");
-   Fl_Text_Display *disp = new Fl_Text_Display(20, 20, 640-40, 480-40);
-   Fl_Text_Buffer *tbuff = new Fl_Text_Buffer();	// text buffer
-   Fl_Text_Buffer *sbuff = new Fl_Text_Buffer();	// style buffer
-   disp->buffer(tbuff);
-   int stable_size = sizeof(stable)/sizeof(stable[0]);	// # entries in style table (4)
-   disp->highlight_data(sbuff, stable, stable_size, 'A', 0, 0);
-   // Text
-   tbuff->text("Red Line 1\nYel Line 2\nGrn Line 3\nBlu Line 4\n"
-	       "Red Line 5\nYel Line 6\nGrn Line 7\nBlu Line 8\n");
-   // Style for text
-   sbuff->text("AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\nDDDDDDDDDD\n"
-	       "AAAAAAAAAA\nBBBBBBBBBB\nCCCCCCCCCC\nDDDDDDDDDD\n");
-   win->resizable(*disp);
-   win->show();
-   return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/texteditor-simple.cxx
+++ /dev/null
@@ -1,53 +1,0 @@
-//
-// "$Id$"
-//
-//	A simple example of Fl_Text_Editor
-//
-//	Fl_Text_Editor is unlike other FLTK widgets in that
-//	to work correctly, it must be assigned to an instance of an
-//	Fl_Text_Buffer.  The below shows using buffer() to connect
-//	the two classes together.
-//
-//	Note that the example can also be used to demonstrate
-//	Fl_Text_Display; just replace all instances of
-//	Fl_Text_Editor with Fl_Text_Display and rebuild.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Text_Editor.H>
-
-int main() {
-     Fl_Double_Window *win  = new Fl_Double_Window(640, 480, "Simple Fl_Text_Editor");
-     Fl_Text_Buffer   *buff = new Fl_Text_Buffer();
-     Fl_Text_Editor   *edit = new Fl_Text_Editor(20, 20, 640-40, 480-40);
-     edit->buffer(buff);		// attach the text buffer to our editor widget
-     win->resizable(*edit);
-     win->show();
-     buff->text("line 0\nline 1\nline 2\n"
-                "line 3\nline 4\nline 5\n"
-                "line 6\nline 7\nline 8\n"
-                "line 9\nline 10\nline 11\n"
-                "line 12\nline 13\nline 14\n"
-                "line 15\nline 16\nline 17\n"
-                "line 18\nline 19\nline 20\n"
-                "line 21\nline 22\nline 23\n");
-     return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tree-as-container.cxx
+++ /dev/null
@@ -1,90 +1,0 @@
-//
-// "$Id$"
-//
-//	Fl_Tree as a container of FLTK widgets. - erco 04/15/2012
-//
-// Copyright 2010,2012 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Input.H>
-
-#define MAX_ROWS     20000
-#define MAX_FIELDS   5
-#define FIELD_WIDTH  70
-#define FIELD_HEIGHT 30
-
-class MyData : public Fl_Group {
-    Fl_Input *fields[MAX_FIELDS];
-public:
-    MyData(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) {
-	static unsigned int colors[MAX_FIELDS] = {
-	    0xffffdd00, 0xffdddd00, 0xddffff00, 0xddffdd00, 0xddddff00
-	};
-        for ( int t=0; t<MAX_FIELDS; t++ ) {
-	    fields[t] = new Fl_Input(X+t*FIELD_WIDTH,Y,FIELD_WIDTH,H);
-	    fields[t]->color(Fl_Color(colors[t]));
-	}
-	end();
-    }
-    void SetData(int col, const char *val) {
-        if ( col >= 0 && col < MAX_FIELDS )
-	    fields[col]->value(val);
-    }
-};
-
-int main(int argc, char *argv[]) {
-  Fl_Double_Window *win = new Fl_Double_Window(450, 400, "Tree As FLTK Widget Container");
-  win->begin();
-  {
-    // Create the tree
-    Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
-    tree->showroot(0);				// don't show root of tree
-    // Add some regular text nodes
-    tree->add("Foo/Bar/001");
-    tree->add("Foo/Bar/002");
-    tree->add("Foo/Bla/Aaa");
-    tree->add("Foo/Bla/Bbb");
-    // Add items to the 'Data' node
-    for ( int t=0; t<MAX_ROWS; t++ ) {
-        // Add item to tree
-        static char s[80];
-	sprintf(s, "FLTK Widgets/%d", t);
-	Fl_Tree_Item *item = tree->add(s);
-	// Reconfigure item to be an FLTK widget (MyData)
-	tree->begin();
-	{
-	    MyData *data = new MyData(0,0,FIELD_WIDTH*MAX_FIELDS, FIELD_HEIGHT);
-	    item->widget(data);
-	    // Initialize widget data
-	    for ( int c=0; c<MAX_FIELDS; c++ ) {
-		sprintf(s, "%d-%d", t,c);
-	        data->SetData(c,s);
-	    }
-	}
-	tree->end();
-    }
-  }
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tree-custom-draw-items.cxx
+++ /dev/null
@@ -1,191 +1,0 @@
-//
-// "$Id$"
-//
-//	Demonstrate Fl_Tree custom item draw callback. - erco 11/09/2013
-//
-// Copyright 2013 Greg Ercolano.
-// Copyright 1998-2013 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <time.h>		/* ctime.. */
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tree.H>
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b))?(a):(b)
-#endif
-
-#if FLTK_ABI_VERSION >= 10303
-// DERIVE CUSTOM CLASS FROM Fl_Tree_Item TO IMPLEMENT SHOWING THE TIME OF DAY
-//     This demonstrates that item content can be dynamic and highly customized.
-//
-class MyTimeItem : public Fl_Tree_Item {
-  const char *time_format;
-protected:
-  // Remove trailing crlf
-  const char* StripCrlf(char *s)
-    { char *ss = strchr(s, '\n'); if (ss) *ss = 0; return s; }
-  const struct tm* GetTimeStruct() {
-    time_t t = time(NULL);
-    if ( strcmp(time_format, "Local") == 0 ) return localtime(&t);
-    if ( strcmp(time_format, "GMT"  ) == 0 ) return gmtime(&t);
-    return 0;
-  }
-public:
-  MyTimeItem(Fl_Tree *tree, const char *time_format) : Fl_Tree_Item(tree) {
-    label(time_format);
-    this->time_format = time_format;
-  }
-  // Handle custom drawing of the item
-  //    Fl_Tree has already handled drawing everything to the left
-  //    of the label area, including any 'user icon', collapse buttons,
-  //    connector lines, etc.
-  //
-  //    All we're responsible for is drawing the 'label' area of the item
-  //    and it's background. Fl_Tree gives us a hint as to what the
-  //    foreground and background colors should be via the fg/bg parameters,
-  //    and whether we're supposed to render anything or not.
-  //
-  //    The only other thing we must do is return the maximum X position
-  //    of scrollable content, i.e. the right most X position of content
-  //    that we want the user to be able to use the horizontal scrollbar
-  //    to reach.
-  //
-  int draw_item_content(int render) {
-    Fl_Color fg = drawfgcolor();
-    Fl_Color bg = drawbgcolor();
-    //    Show the date and time as two small strings
-    //    one on top of the other in a single item.
-    //
-    // Our item's label dimensions
-    int X = label_x(), Y = label_y(),
-        W = label_w(), H = label_h(); 
-    // Render background
-    if ( render ) {
-      if ( is_selected() ) {			// Selected? Use selectbox() style
-        fl_draw_box(prefs().selectbox(),X,Y,W,H,bg);
-      } else {					// Not Selected? use plain filled rectangle
-        fl_color(bg); fl_rectf(X,Y,W,H);
-      }
-    }
-    // Render the label
-    if ( render ) {
-      fl_color(fg);
-      if ( label() ) fl_draw(label(), X,Y,W,H, FL_ALIGN_LEFT);
-    }
-    int lw=0, lh=0;
-    if ( label() ) {
-      lw=0; lh=0; fl_measure(label(), lw, lh);
-    }
-    X += lw + 8;
-    // Draw some red/grn/blu boxes
-    if ( render ) {
-      fl_color(FL_RED);   fl_rectf(X+0,  Y+2, 10, H-4);
-      fl_color(FL_GREEN); fl_rectf(X+10, Y+2, 10, H-4);
-      fl_color(FL_BLUE);  fl_rectf(X+20, Y+2, 10, H-4);
-    }
-    X += 35;
-    // Render the date and time, one over the other
-    fl_font(labelfont(), 8);			// small font
-    const struct tm *tm = GetTimeStruct();
-    char s[80];
-    sprintf(s, "Date: %02d/%02d/%02d", tm->tm_mon+1, tm->tm_mday, tm->tm_year % 100);
-    lw=0, lh=0; fl_measure(s, lw, lh);		// get box around text (including white space)
-    if ( render ) fl_draw(s, X,Y+4,W,H, FL_ALIGN_LEFT|FL_ALIGN_TOP);
-    sprintf(s, "Time: %02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
-    if ( render ) fl_draw(s, X,Y+H/2,W,H/2, FL_ALIGN_LEFT|FL_ALIGN_TOP);
-    int lw2=0, lh2=0; fl_measure(s, lw2, lh2);
-    X += MAX(lw, lw2);
-    return X;			// return right most edge of what we've rendered
-  }
-};
-
-// TIMER TO HANDLE DYNAMIC CONTENT IN THE TREE
-void Timer_CB(void *data) {
-  Fl_Tree *tree = (Fl_Tree*)data;
-  tree->redraw();	// keeps time updated
-  Fl::repeat_timeout(0.2, Timer_CB, data);
-}
-
-int main(int argc, char *argv[]) {
-  Fl::scheme("gtk+");
-  Fl_Double_Window *win = new Fl_Double_Window(350, 400, "Simple Tree");
-  win->begin();
-  {
-    // Create the tree
-    Fl_Tree *tree = new Fl_Tree(0, 0, win->w(), win->h());
-    tree->showroot(0);				// don't show root of tree
-    tree->selectmode(FL_TREE_SELECT_MULTI);	// multiselect
-
-    // Add some items
-    tree->add("Flintstones/Fred");
-    tree->add("Flintstones/Wilma");
-    tree->add("Flintstones/Pebbles");
-    {
-      MyTimeItem *myitem;
-      myitem = new MyTimeItem(tree, "Local");	// create custom item
-      myitem->labelsize(20);
-      tree->add("Time Add Item/Local", myitem);
-
-      myitem = new MyTimeItem(tree, "GMT");	// create custom item
-      myitem->labelsize(20);
-      tree->add("Time Add Item/GMT", myitem);
-    }
-    // 'Replace' approach
-    {
-      Fl_Tree_Item *item;
-      MyTimeItem *myitem;
-      item = tree->add("Time Replace Item/Local Time");
-      // Replace the 'Local' item with our own
-      myitem = new MyTimeItem(tree, "Local");	// create custom item
-      myitem->labelsize(20);
-      item->replace(myitem);			// replace normal item with custom
-
-      item = tree->add("Time Replace Item/GMT Time");
-      // Replace the 'GMT' item with our own
-      myitem = new MyTimeItem(tree, "GMT");	// create custom item
-      myitem->labelsize(20);
-      item->replace(myitem);			// replace normal item with custom
-    }
-    tree->add("Superjail/Warden");
-    tree->add("Superjail/Jared");
-    tree->add("Superjail/Alice");
-    tree->add("Superjail/Jailbot");
-
-    tree->show_self();
-
-    // Start with some items closed
-    tree->close("Superjail");
-
-    // Set up a timer to keep time in tree updated
-    Fl::add_timeout(0.2, Timer_CB, (void*)tree);
-  }
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  return(Fl::run());
-}
-#else
-#include <FL/Fl.H>
-#include <FL/fl_message.H>
-int main(int, char**) {
-  fl_alert("This demo is dependent on an ABI feature.\n"
-           "FLTK_ABI_VERSION must be set to 10303 (or higher) in Enumerations.H");
-  return 1;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tree-custom-sort.cxx
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple Fl_Tree custom (numeric) sort example. - erco 12/16/2013
-//      Demonstrates custom sorting of Fl_Tree items.
-//
-// Copyright 2013 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <stdlib.h>	/* qsort(3), srand(3).. */
-#include <time.h>	/* time(2) */
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Button.H>
-
-Fl_Tree *G_tree = 0;
-
-// Resort the tree
-void MySortCallback(Fl_Widget*, void *data) {
-  int dir = int(fl_intptr_t(data));		// forward or reverse
-  Fl_Tree_Item *i = G_tree->root();
-  // Bubble sort
-  for ( int ax=0; ax<i->children(); ax++ ) {
-    for ( int bx=ax+1; bx<i->children(); bx++ ) {
-      long a; sscanf(i->child(ax)->label(), "%ld", &a);
-      long b; sscanf(i->child(bx)->label(), "%ld", &b);
-      switch ( dir ) {
-        case  1: if ( a > b ) { i->swap_children(ax, bx); } break; // fwd
-        case -1: if ( a < b ) { i->swap_children(ax, bx); } break; // rev
-      }
-    }
-  }
-  G_tree->redraw();
-}
-
-int main(int argc, char *argv[]) {
-  // Randomize the random number generator
-  time_t tval; time(&tval);
-  srand((unsigned)tval);
-
-  // Create window with tree
-  Fl::scheme("gtk+");
-  Fl_Double_Window *win = new Fl_Double_Window(250, 600, "Numeric Sort Tree");
-  win->begin();
-  {
-    G_tree = new Fl_Tree(10, 10, win->w()-20, win->h()-60);
-    G_tree->showroot(0);
-
-    // Add 200 random numbers to the tree
-    char word[50];
-    for ( int t=0; t<200; t++ ) {
-      sprintf(word, "%ld", long((float(rand()) / RAND_MAX) * 1000000));
-      G_tree->add(word);
-    }
-
-    // Add some sort buttons
-    Fl_Button *but;
-    but = new Fl_Button(10,   win->h()-40,80,20,"Fwd"); but->callback(MySortCallback, (void*) 1);
-    but = new Fl_Button(20+80,win->h()-40,80,20,"Rev"); but->callback(MySortCallback, (void*)-1);
-  }
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tree-of-tables.cxx
+++ /dev/null
@@ -1,155 +1,0 @@
-//
-// "$Id$"
-//
-//	Fl_Tree as a container of Fl_Table's. - erco 04/25/2012
-//
-//      Demonstrates how one can make a tree where each item
-//      contains a complex widget.
-//
-// Copyright 2010,2012 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <math.h>		// powf()
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Table.H>
-#ifndef PI
-#define PI 3.14159
-#endif
-
-#if FLTK_ABI_VERSION >= 10301
-class MyTable : public Fl_Table {
-  const char *mode;
-public:
-  MyTable(int X,int Y,int W,int H,const char *mode) : Fl_Table(X,Y,W,H) {
-    rows(11); row_height_all(20); row_header(1);
-    cols(11); col_width_all(60);  col_header(1);
-    col_resize(1);				// enable column resizing
-    this->mode = mode;
-    end();
-  }
-  void resize(int X,int Y,int W,int H) {
-      if ( W > 718 ) W = 718;			// don't exceed 700 in width
-      Fl_Table::resize(X,Y,W,h());		// disallow changes in height
-  }
-  // Handle drawing table's cells
-  //     Fl_Table calls this function to draw each visible cell in the table.
-  //     It's up to us to use FLTK's drawing functions to draw the cells the way we want.
-  //
-  void draw_cell(TableContext context, int ROW, int COL, int X, int Y, int W, int H) {
-    static char s[40];
-    switch ( context ) {
-      case CONTEXT_STARTPAGE:         // before page is drawn..
-        fl_font(FL_HELVETICA, 10);    // set the font for our drawing operations
-        return; 
-      case CONTEXT_COL_HEADER:	      // Drawing column/row headers
-      case CONTEXT_ROW_HEADER: {
-        int val = context==CONTEXT_COL_HEADER ? COL : ROW;
-        int col = context==CONTEXT_COL_HEADER ? col_header_color() : row_header_color();
-        fl_push_clip(X,Y,W,H);
-	if ( strcmp(mode, "SinCos" ) == 0 ) { sprintf(s, "%.2f", ((val/10.0)*PI)); }
-	else sprintf(s,"%d",val);
-	fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, col);
-	fl_color(FL_BLACK);
-	fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-        fl_pop_clip();
-        return; 
-      }
-      case CONTEXT_CELL: {            // Draw data in cells
-        int col = is_selected(ROW,COL) ? FL_YELLOW : FL_WHITE;
-        fl_push_clip(X,Y,W,H);
-        if ( strcmp(mode, "Addition") == 0 ) { sprintf(s, "%d", ROW+COL); } else
-        if ( strcmp(mode, "Subtract") == 0 ) { sprintf(s, "%d", ROW-COL); } else
-	if ( strcmp(mode, "Multiply") == 0 ) { sprintf(s, "%d", ROW*COL); } else
-	if ( strcmp(mode, "Divide"  ) == 0 ) { if ( COL==0 ) sprintf(s, "N/A"); else sprintf(s, "%.2f", (float)ROW/(float)COL); } else
-	if ( strcmp(mode, "Exponent") == 0 ) { sprintf(s, "%g", powf((float)ROW,(float)COL)); } else
-	if ( strcmp(mode, "SinCos"  ) == 0 ) { sprintf(s, "%.2f", sin((ROW/10.0)*PI) * cos((COL/10.0)*PI)); } else
-	                                     { sprintf(s, "???"); }
-	fl_color(col); fl_rectf(X,Y,W,H);				// bg
-	fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);	// text
-	fl_color(color());  fl_rect(X,Y,W,H);				// box
-        fl_pop_clip();
-        return;
-      }
-      default:
-        return;
-    }
-  }
-};
-
-int main(int argc, char *argv[]) {
-  Fl_Double_Window *win = new Fl_Double_Window(700, 400, "Tree of tables");
-  win->begin();
-  {
-    // Create tree
-    Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
-    tree->root()->label("Math Tables");
-    tree->item_labelfont(FL_COURIER);		// font to use for items
-    tree->linespacing(4);			// extra space between items
-    tree->item_draw_mode(tree->item_draw_mode() |
-                         FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET |    // draw item with widget() next to it
-	                 FL_TREE_ITEM_HEIGHT_FROM_WIDGET);       // make item height follow table's height
-    tree->selectmode(FL_TREE_SELECT_NONE);	// font to use for items
-    tree->widgetmarginleft(12);			// space between item and table
-    tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED);
-
-    // Create tables, assign each a tree item
-    tree->begin();
-    {
-      MyTable *table;
-      Fl_Tree_Item *item;
-
-      table = new MyTable(0,0,500,156,"Addition");
-      item = tree->add("Arithmetic/Addition");
-      item->widget(table);
-
-      table = new MyTable(0,0,500,156,"Subtract");
-      item = tree->add("Arithmetic/Subtract");
-      item->widget(table);
-
-      table = new MyTable(0,0,500,156,"Multiply");
-      item = tree->add("Arithmetic/Multiply");
-      item->widget(table);
-
-      table = new MyTable(0,0,500,156,"Divide");
-      item = tree->add("Arithmetic/Divide  ");
-      item->widget(table);
-
-      table = new MyTable(0,0,500,156,"Exponent");
-      item = tree->add("Misc/Exponent");
-      item->widget(table);
-
-      table = new MyTable(0,0,500,156,"SinCos");
-      item = tree->add("Misc/Sin*Cos ");
-      item->widget(table);
-    }
-    tree->end();
-  }
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  return(Fl::run());
-}
-#else /*FLTK_ABI_VERSION*/
-#include <FL/fl_ask.H>
-int main(int argc, char *argv[]) {
-  fl_alert("This example must have FLTK_ABI_VERSION enabled to work properly.");
-  return 1;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/tree-simple.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple Fl_Tree widget example. - erco 06/05/2010
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tree.H>
-
-// Tree's callback
-//    Invoked whenever an item's state changes.
-//
-void TreeCallback(Fl_Widget *w, void *data) {
-  Fl_Tree *tree = (Fl_Tree*)w;
-  Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item();
-  if ( ! item ) return;
-  switch ( tree->callback_reason() ) {
-    case FL_TREE_REASON_SELECTED: {
-      char pathname[256];
-      tree->item_pathname(pathname, sizeof(pathname), item);
-      fprintf(stderr, "TreeCallback: Item selected='%s', Full pathname='%s'\n", item->label(), pathname);
-      break;
-    }
-    case FL_TREE_REASON_DESELECTED:
-      // fprintf(stderr, "TreeCallback: Item '%s' deselected\n", item->label());
-      break;
-    case FL_TREE_REASON_OPENED:
-      // fprintf(stderr, "TreeCallback: Item '%s' opened\n", item->label());
-      break;
-    case FL_TREE_REASON_CLOSED:
-      // fprintf(stderr, "TreeCallback: Item '%s' closed\n", item->label());
-      break;
-#if FLTK_ABI_VERSION >= 10301
-    // To enable this callback, use tree->item_reselect_mode(FL_TREE_SELECTABLE_ALWAYS);
-    case FL_TREE_REASON_RESELECTED:
-      // fprintf(stderr, "TreeCallback: Item '%s' reselected\n", item->label());
-      break;
-#endif
-    default:
-      break;
-  }
-}
-
-int main(int argc, char *argv[]) {
-  Fl::scheme("gtk+");
-  Fl_Double_Window *win = new Fl_Double_Window(250, 400, "Simple Tree");
-  win->begin();
-  {
-    // Create the tree
-    Fl_Tree *tree = new Fl_Tree(10, 10, win->w()-20, win->h()-20);
-    tree->showroot(0);				// don't show root of tree
-    tree->callback(TreeCallback);		// setup a callback for the tree
-
-    // Add some items
-    tree->add("Flintstones/Fred");
-    tree->add("Flintstones/Wilma");
-    tree->add("Flintstones/Pebbles");
-    tree->add("Simpsons/Homer");
-    tree->add("Simpsons/Marge");
-    tree->add("Simpsons/Bart");
-    tree->add("Simpsons/Lisa");
-    tree->add("Pathnames/\\/bin");		// front slashes
-    tree->add("Pathnames/\\/usr\\/sbin");
-    tree->add("Pathnames/C:\\\\Program Files");	// backslashes
-    tree->add("Pathnames/C:\\\\Documents and Settings");
-
-    // Start with some items closed
-    tree->close("Simpsons");
-    tree->close("Pathnames");
-  }
-  win->end();
-  win->resizable(win);
-  win->show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/examples/wizard-simple.cxx
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-//	Simple Fl_Wizard widget example. 
-//	Originally from erco's cheat sheet 06/05/2010, permission by author.
-//
-// Copyright 2010 Greg Ercolano.
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Wizard.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Multiline_Output.H>
-//
-// Simple 'wizard' using fltk's new Fl_Wizard widget
-//
-Fl_Window *G_win = 0;
-Fl_Wizard *G_wiz = 0;
-
-void back_cb(Fl_Widget*,void*) { G_wiz->prev(); }
-void next_cb(Fl_Widget*,void*) { G_wiz->next(); }
-void done_cb(Fl_Widget*,void*) { exit(0); }
-
-int main(int argc, char **argv) {
-    G_win = new Fl_Window(400,300,"Example Wizard");
-    G_wiz = new Fl_Wizard(0,0,400,300);
-
-    // Wizard: page 1
-    {
-        Fl_Group *g = new Fl_Group(0,0,400,300);
-        Fl_Button *next = new Fl_Button(290,265,100,25,"Next @->"); next->callback(next_cb);
-        Fl_Multiline_Output *out = new Fl_Multiline_Output(10,30,400-20,300-80,"Welcome");
-        out->labelsize(20);
-        out->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
-        out->value("This is First page");
-        g->end();
-    }
-    // Wizard: page 2
-    {
-        Fl_Group *g = new Fl_Group(0,0,400,300);
-        Fl_Button *next = new Fl_Button(290,265,100,25,"Next @->"); next->callback(next_cb);
-        Fl_Button *back = new Fl_Button(180,265,100,25,"@<- Back"); back->callback(back_cb);
-        Fl_Multiline_Output *out = new Fl_Multiline_Output(10,30,400-20,300-80,"Terms And Conditions");
-        out->labelsize(20);
-        out->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
-        out->value("This is the Second page");
-        g->end();
-    }
-    // Wizard: page 3
-    {
-        Fl_Group *g = new Fl_Group(0,0,400,300);
-        Fl_Button *done = new Fl_Button(290,265,100,25,"Finish"); done->callback(done_cb);
-        Fl_Button *back = new Fl_Button(180,265,100,25,"@<- Back"); back->callback(back_cb);
-        Fl_Multiline_Output *out = new Fl_Multiline_Output(10,30,400-20,300-80,"Finish");
-        out->labelsize(20);
-        out->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
-        out->value("This is the Last page");
-        g->end();
-    }
-    G_wiz->end();
-    G_win->end();
-    G_win->show(argc, argv);
-    return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fltk-config.in
+++ /dev/null
@@ -1,404 +1,0 @@
-#!/bin/sh
-#
-# "$Id$"
-#
-# FLTK configuration utility.
-#
-# Copyright 2000-2016 by Bill Spitzak and others.
-# Original version Copyright 2000 by James Dean Palmer
-# Adapted by Vincent Penne and Michael Sweet
-#
-# 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:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-MAJOR_VERSION=@FL_MAJOR_VERSION@
-MINOR_VERSION=@FL_MINOR_VERSION@
-PATCH_VERSION=@FL_PATCH_VERSION@
-VERSION="$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION"
-APIVERSION="$MAJOR_VERSION.$MINOR_VERSION"
-
-### BEGIN fltk-config
-selfdir=`dirname "$0"`
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-exec_prefix_set=no
-includedir=@includedir@
-libdir=@libdir@
-srcdir=@srcdir@
-
-# BINARY_DIR - used only for CMake builds in local (binary) directory
-BINARY_DIR=@BINARY_DIR@
-
-# compiler names
-CC="@CC@"
-CXX="@CXX@"
-
-# flags for C++ compiler:
-ARCHFLAGS="@ARCHFLAGS@"
-CFLAGS="@CFLAGS@ @LARGEFILE@ @PTHREAD_FLAGS@"
-CXXFLAGS="@CXXFLAGS@ @LARGEFILE@ @PTHREAD_FLAGS@"
-LDFLAGS="@LDFLAGS@"
-LDLIBS="@LIBS@"
-OPTIM="@OPTIM@"
-CAIROFLAGS="@CAIROFLAGS@"
-
-# Check for local invocation, and update paths accordingly...
-if test -f "$selfdir/FL/Fl_Window.H"; then
-	includedir="$selfdir"
-	libdir="$selfdir/lib"
-
-	if test -f "$libdir/libfltk_jpeg.a"; then
-		CFLAGS="-I$includedir/jpeg $CFLAGS"
-		CXXFLAGS="-I$includedir/jpeg $CXXFLAGS"
-	fi
-
-	if test -f "$libdir/libfltk_z.a"; then
-		CFLAGS="-I$includedir/zlib $CFLAGS"
-		CXXFLAGS="-I$includedir/zlib $CXXFLAGS"
-	fi
-
-	if test -f "$libdir/libfltk_png.a"; then
-		CFLAGS="-I$includedir/png $CFLAGS"
-		CXXFLAGS="-I$includedir/png $CXXFLAGS"
-	fi
-fi
-
-if test -d $includedir/FL/images; then
-	CFLAGS="-I$includedir/FL/images $CFLAGS"
-	CXXFLAGS="-I$includedir/FL/images $CXXFLAGS"
-fi
-
-if test -f "$libdir/libfltk_cairo.a"; then
-	CFLAGS="$CAIROFLAGS $CFLAGS"
-	CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
-fi
-
-# libraries to link with:
-LIBNAME="@LIBNAME@"
-DSONAME="@DSONAME@"
-DSOLINK="@DSOLINK@"
-IMAGELIBS="@IMAGELIBS@"
-STATICIMAGELIBS="@STATICIMAGELIBS@"
-CAIROLIBS="@CAIROLIBS@"
-SHAREDSUFFIX="@SHAREDSUFFIX@"
-
-usage ()
-{
-    echo "Usage: fltk-config [OPTIONS]
-Options:
-	[--version]
-	[--api-version]
-
-Options telling what we are doing:
-	[--use-gl]        use GL
-	[--use-images]    use extra image formats (PNG, JPEG)
-	[--use-glut]      use glut compatibility layer
-	[--use-forms]     use forms compatibility layer
-	[--use-cairo]     use cairo graphics lib
-
-Options telling what information we request:
-	[--cc]            return C compiler used to compile FLTK
-	[--cxx]           return C++ compiler used to compile FLTK
-	[--optim]         return compiler optimization used to compile FLTK
-	[--cflags]        return flags to compile C using FLTK
-	[--cxxflags]      return flags to compile C++ using FLTK
-	[--ldflags]       return flags to link against FLTK
-	[--ldstaticflags] return flags to link against static FLTK library
-                                          even if there are DSOs installed
-	[--libs]          return FLTK libraries full path for dependencies
-	[--prefix]        return FLTK install time --prefix directory
-	[--includedir]    return FLTK install time include directory
-
-Options to compile and link an application:
-	[-g]              compile the program with debugging information
-	[-Dname[=value]]  compile the program with the given define
-	[--compile program.cxx]
-        [--post program]  prepare the program for desktop use
-"
-    exit $1
-}
-
-if test $# -eq 0; then
-    usage 1
-fi
-
-no_plugins=no
-compile=
-post=
-debug=
-
-# Parse command line options
-while test $# -gt 0
-do
-    case "$1" in
-	-*=*)
-	    optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
-	    ;;
-	*)
-	    optarg=
-	    ;;
-    esac
-
-    case $1 in
-	--version)
-	    echo $VERSION
-	    ;;
-	--api-version)
-	    echo $APIVERSION
-	    ;;
-	--cc)
-	    echo $CC
-	    ;;
-	--cxx)
-	    echo $CXX
-	    ;;
-	--optim)
-	    echo_optim=yes
-	    ;;
-	--use-gl | --use-glut)
-	    use_gl=yes
-	    ;;
-	--use-forms)
-	    use_forms=yes
-	    ;;
-	--use-images)
-	    use_images=yes
-	    ;;
-	--use-cairo)
-	    use_cairo=yes
-	    ;;
-	--cflags)
-	    echo_cflags=yes
-	    ;;
-	--cxxflags)
-	    echo_cxxflags=yes
-	    ;;
-	--ldflags)
-	    echo_ldflags=yes
-	    ;;
-	--ldstaticflags)
-	    echo_ldstaticflags=yes
-	    ;;
-	--libs)
-	    echo_libs=yes
-	    ;;
-	--prefix)
-	    echo_prefix=yes
-	    ;;
-	--includedir)
-	    echo_includedir=yes
-	    ;;
-	-g)
-	    debug=-g
-	    ;;
-	-D*)
-	    CXXFLAGS="$CXXFLAGS $1"
-	    ;;
-	--compile)
-	    compile="$2"
-	    shift
-	    ;;
-	--post)
-	    post="$2"
-	    shift
-	    ;;
-	*)
-	    echo_help=yes
-	    ;;
-    esac
-    shift
-done
-
-if test "$includedir" != /usr/include; then
-    includes=-I$includedir
-else
-    includes=
-fi
-
-if test "$BINARY_DIR" != ""; then
-    includes="-I$BINARY_DIR $includes"
-fi
-
-if test "$libdir" != /usr/lib -a "$libdir" != /usr/lib32; then
-    libs=-L$libdir
-else
-    libs=
-fi
-
-# Calculate needed libraries
-LDSTATIC="$libdir/libfltk.a $LDLIBS"
-LDLIBS="-lfltk$SHAREDSUFFIX $LDLIBS"
-
-if test x$use_forms = xyes; then
-    LDLIBS="-lfltk_forms$SHAREDSUFFIX $LDLIBS"
-    LDSTATIC="$libdir/libfltk_forms.a $LDSTATIC"
-fi
-if test x$use_gl = xyes; then
-    LDLIBS="-lfltk_gl$SHAREDSUFFIX @GLLIB@ $LDLIBS"
-    LDSTATIC="$libdir/libfltk_gl.a @GLLIB@ $LDSTATIC"
-fi
-if test x$use_images = xyes; then
-    LDLIBS="-lfltk_images$SHAREDSUFFIX $IMAGELIBS $LDLIBS"
-    LDSTATIC="$libdir/libfltk_images.a $STATICIMAGELIBS $LDSTATIC"
-fi
-
-if test x$use_cairo = xyes; then
-    LDLIBS="-lfltk_cairo$SHAREDSUFFIX $CAIROLIBS $LDLIBS"
-    LDSTATIC="$libdir/libfltk_cairo.a $CAIROLIBS $LDSTATIC"
-fi
-
-LDLIBS="$DSOLINK $LDFLAGS $libs $LDLIBS"
-LDSTATIC="$LDFLAGS $LDSTATIC"
-
-# Answer to user requests
-if test -n "$echo_help"; then
-    usage 1
-fi
-
-if test -n "$compile"; then
-    case "$compile" in
-        *.cxx)
-            prog="`basename \"$compile\" .cxx`"
-	    ;;
-        *.cpp)
-            prog="`basename \"$compile\" .cpp`"
-	    ;;
-        *.cc)
-            prog="`basename \"$compile\" .cc`"
-	    ;;
-        *.C)
-            prog="`basename \"$compile\" .C`"
-	    ;;
-	*)
-	    echo "ERROR: Unknown/bad C++ source file extension on \"$compile\"!"
-	    exit 1
-	    ;;
-    esac
-
-    post="$prog"
-
-    echo $CXX $ARCHFLAGS $includes $CXXFLAGS $debug -o "'$prog'" "'$compile'" $LDSTATIC
-    $CXX $ARCHFLAGS $includes $CXXFLAGS $debug -o "$prog" "$compile" $LDSTATIC || exit 1
-fi
-
-if test -n "$post"; then
-    case "`uname`" in
-	Darwin)
-	    echo Creating "'$post.app'" bundle for desktop...
-	    id=`echo $post | tr ' ' '_'`
-
-	    # Make the bundle directory and move the executable there
-	    rm -rf "$post.app/Contents/MacOS"
-	    mkdir -p "$post.app/Contents/MacOS"
-	    mv "$post" "$post.app/Contents/MacOS"
-
-	    # Make a shell script that runs the bundled executable
-	    echo "#!/bin/sh" >"$post"
-	    echo 'dir="`dirname \"$0\"`"' >>"$post"
-	    echo 'exec "$dir/'"$post.app/Contents/MacOS/$post"'" "$@"' >>"$post"
-	    chmod +x "$post"
-
-	    # Make the simplest Info.plist needed for an application
-	    cat >"$post.app/Contents/Info.plist" <<EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<plist version="0.9">
-    <dict>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleExecutable</key>
-	<string>$post</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.$id</string>
-	<key>CFBundleName</key>
-	<string>$post</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-    </dict>
-</plist>
-EOF
-	    ;;
-    esac
-fi
-
-if test "$echo_cflags" = "yes"; then
-    echo $includes $CFLAGS
-fi
-
-if test "$echo_cxxflags" = "yes"; then
-    echo $includes $CXXFLAGS
-fi
-
-if test "$echo_optim" = "yes"; then
-    echo $OPTIM
-fi
-
-if test "$echo_ldflags" = "yes"; then
-    my_libs=
-    libdirs=$libs
-
-    for i in $LDLIBS ; do
-	if test $i != -L$libdir ; then
-	    if test -z "$my_libs" ; then
-		my_libs="$i"
-	    else
-		my_libs="$my_libs $i"
-	    fi
-	fi
-    done
-    echo $libdirs $my_libs
-fi
-
-if test "$echo_ldstaticflags" = "yes"; then
-    echo $LDSTATIC
-fi
-
-if test "$echo_libs" = "yes"; then
-    USELIBS="$libdir/libfltk.a"
-
-    if test x$use_forms = xyes; then
-        USELIBS="$libdir/libfltk_forms.a $USELIBS"
-    fi
-
-    if test x$use_gl = xyes; then
-        USELIBS="$libdir/libfltk_gl.a $USELIBS"
-    fi
-
-    if test x$use_cairo = xyes; then
-        USELIBS="$libdir/libfltk_cairo.a $USELIBS"
-    fi
-
-    if test x$use_images = xyes; then
-        USELIBS="$libdir/libfltk_images.a $USELIBS"
-
-        for lib in fltk_jpeg fltk_png fltk_z; do
-            if test -f $libdir/lib$lib.a; then
-                USELIBS="$libdir/lib$lib.a $USELIBS"
-            fi
-	done
-    fi
-
-    echo $USELIBS
-fi
-
-if test "$echo_prefix" = "yes"; then
-    echo $prefix
-fi
-
-if test "$echo_includedir" = "yes"; then
-    echo $includedir
-fi
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/fltk.list.in
+++ /dev/null
@@ -1,433 +1,0 @@
-#
-# "$Id$"
-#
-# EPM product list file for the Fast Light Tool Kit (FLTK).
-#
-# (EPM can be found at http://www.epmhome.org/)
-#
-# Copyright 1998-2010 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-%product Fast Light Tool Kit (FLTK)
-%copyright 1998-2011 by Bill Spitzak and others.
-%vendor FLTK Development Team
-%license COPYING
-%readme README
-%version @FL_MAJOR_VERSION@.@FL_MINOR_VERSION@.@FL_PATCH_VERSION@
-%description The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-%description cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
-%description Microsoft(r) Windows(r), and MacOS(r) X.  FLTK provides modern
-%description GUI functionality without the bloat and supports 3D graphics via
-%description OpenGL(r) and its built-in GLUT emulation.
-
-$prefix=@prefix@
-$exec_prefix=@exec_prefix@
-$bindir=@bindir@
-$datarootdir=@datarootdir@
-$datadir=@datadir@
-$includedir=@includedir@
-$libdir=@libdir@
-$mandir=@mandir@
-$docdir=${datadir}/doc/fltk
-
-$CAT1EXT=@CAT1EXT@
-$CAT3EXT=@CAT3EXT@
-$CAT6EXT=@CAT6EXT@
-
-$DSONAME=@DSONAME@
-$FLDSONAME=@FLDSONAME@
-$FLLIBNAME=@FLLIBNAME@
-$GLDSONAME=@GLDSONAME@
-$GLLIBNAME=@GLLIBNAME@
-$FLUID=@FLUID@
-$JPEG=@JPEG@
-$PNG=@PNG@
-$ZLIB=@ZLIB@
-
-%if DSONAME
-%system aix
-f 0555 root sys $libdir/libfltk_s.a src/libfltk_s.a nostrip()
-%system hpux
-f 0555 root sys $libdir/libfltk.sl.@FL_DSO_VERSION@ src/libfltk.sl.@FL_DSO_VERSION@ nostrip()
-%system darwin
-f 0555 root sys $libdir/libfltk.@FL_DSO_VERSION@.dylib src/libfltk.@FL_DSO_VERSION@.dylib nostrip()
-%system !aix !darwin !hpux
-f 0555 root sys $libdir/libfltk.so.@FL_DSO_VERSION@ src/libfltk.so.@FL_DSO_VERSION@ nostrip()
-%system all
-
-%system aix
-f 0555 root sys $libdir/libfltk_forms_s.a src/libfltk_forms_s.a nostrip()
-%system hpux
-f 0555 root sys $libdir/libfltk_forms.sl.@FL_DSO_VERSION@ src/libfltk_forms.sl.@FL_DSO_VERSION@ nostrip()
-%system darwin
-f 0555 root sys $libdir/libfltk_forms.@FL_DSO_VERSION@.dylib src/libfltk_forms.@FL_DSO_VERSION@.dylib nostrip()
-%system !aix !darwin !hpux
-f 0555 root sys $libdir/libfltk_forms.so.@FL_DSO_VERSION@ src/libfltk_forms.so.@FL_DSO_VERSION@ nostrip()
-%system all
-
-%system aix
-f 0555 root sys $libdir/libfltk_images_s.a src/libfltk_images_s.a nostrip()
-%system hpux
-f 0555 root sys $libdir/libfltk_images.sl.@FL_DSO_VERSION@ src/libfltk_images.sl.@FL_DSO_VERSION@ nostrip()
-%system darwin
-f 0555 root sys $libdir/libfltk_images.@FL_DSO_VERSION@.dylib src/libfltk_images.@FL_DSO_VERSION@.dylib nostrip()
-%system !aix !darwin !hpux
-f 0555 root sys $libdir/libfltk_images.so.@FL_DSO_VERSION@ src/libfltk_images.so.@FL_DSO_VERSION@ nostrip()
-%system all
-%endif
-
-%if GLDSONAME
-%system aix
-f 0555 root sys $libdir/libfltk_gl_s.a src/libfltk_gl_s.a nostrip()
-%system hpux
-f 0555 root sys $libdir/libfltk_gl.sl.@FL_DSO_VERSION@ src/libfltk_gl.sl.@FL_DSO_VERSION@ nostrip()
-%system darwin
-f 0555 root sys $libdir/libfltk_gl.@FL_DSO_VERSION@.dylib src/libfltk_gl.@FL_DSO_VERSION@.dylib nostrip()
-%system !aix !darwin !hpux
-f 0555 root sys $libdir/libfltk_gl.so.@FL_DSO_VERSION@ src/libfltk_gl.so.@FL_DSO_VERSION@ nostrip()
-%system all
-%endif
-
-
-%subpackage devel
-%description FLTK Development Environment
-%description Install fltk-devel if you need to develop FLTK applications. 
-%description You'll need to install the fltk package if you plan to run
-%description dynamically linked applications.
-
-%system darwin
-d 0555 root sys /Applications/fluid.app -
-d 0555 root sys /Applications/fluid.app/Contents -
-f 0444 root sys /Applications/fluid.app/Contents/Info.plist fluid/fluid.app/Contents/Info.plist
-f 0444 root sys /Applications/fluid.app/Contents/PkgInfo fluid/fluid.app/Contents/PkgInfo
-d 0555 root sys /Applications/fluid.app/Contents/MacOS -
-l 0555 root sys /Applications/fluid.app/Contents/MacOS/fluid $bindir/fluid
-d 0555 root sys /Applications/fluid.app/Contents/Resources -
-f 0444 root sys /Applications/fluid.app/Contents/Resources/fluid.icns fluid/fluid.app/Contents/Resources/fluid.icns
-%postinstall $bindir/fltk-config --post $bindir/fluid
-%postremove /bin/rm -rf /Applications/fluid.app
-
-%system !darwin
-f 0444 root sys /usr/share/applications/fluid.desktop fluid/fluid.desktop
-f 0444 root sys /usr/share/icons/hicolor/16x16/apps/fluid.png fluid/icons/fluid-16.png
-f 0444 root sys /usr/share/icons/hicolor/32x32/apps/fluid.png fluid/icons/fluid-32.png
-f 0444 root sys /usr/share/icons/hicolor/48x48/apps/fluid.png fluid/icons/fluid-48.png
-f 0444 root sys /usr/share/icons/hicolor/64x64/apps/fluid.png fluid/icons/fluid-64.png
-f 0444 root sys /usr/share/icons/hicolor/128x128/apps/fluid.png fluid/icons/fluid-128.png
-f 0444 root sys /usr/share/mimelnk/application/x-fluid.desktop fluid/x-fluid.desktop
-
-%system all
-
-# FLUID
-f 0555 root sys $bindir/fluid fluid/$FLUID
-f 0555 root sys $bindir/fltk-config fltk-config
-
-# Man pages
-f 0444 root sys $mandir/cat1/fluid.$CAT1EXT documentation/src/fluid.$CAT1EXT
-f 0444 root sys $mandir/cat1/fltk-config.$CAT1EXT documentation/src/fltk-config.$CAT1EXT
-f 0444 root sys $mandir/cat3/fltk.$CAT3EXT documentation/src/fltk.$CAT3EXT
-f 0444 root sys $mandir/man1/fluid.1 documentation/src/fluid.man
-f 0444 root sys $mandir/man1/fltk-config.1 documentation/src/fltk-config.man
-f 0444 root sys $mandir/man3/fltk.3 documentation/src/fltk.man
-
-# Library files
-f 0444 root sys $libdir/libfltk.a lib/libfltk.a
-f 0444 root sys $libdir/libfltk_forms.a lib/libfltk_forms.a
-f 0444 root sys $libdir/libfltk_images.a lib/libfltk_images.a
-%if GLLIBNAME
-f 0444 root sys $libdir/libfltk_gl.a lib/libfltk_gl.a
-%endif
-
-%if JPEG
-f 0444 root sys $libdir/libfltk_jpeg.a lib/libfltk_jpeg.a
-%endif
-
-%if PNG
-f 0444 root sys $libdir/libfltk_png.a lib/libfltk_png.a
-%endif
-
-%if ZLIB
-f 0444 root sys $libdir/libfltk_z.a lib/libfltk_z.a
-%endif
-
-%if DSONAME
-%system hpux
-l 0000 root sys $libdir/libfltk.sl libfltk.sl.@FL_DSO_VERSION@
-%system darwin
-l 0000 root sys $libdir/libfltk.dylib libfltk.@FL_DSO_VERSION@.dylib
-%system !aix !darwin !hpux
-l 0000 root sys $libdir/libfltk.so libfltk.so.@FL_DSO_VERSION@
-%system all
-
-%system hpux
-l 0000 root sys $libdir/libfltk_forms.sl libfltk_forms.sl.@FL_DSO_VERSION@
-%system darwin
-l 0000 root sys $libdir/libfltk_forms.dylib libfltk_forms.@FL_DSO_VERSION@.dylib
-%system !aix !darwin !hpux
-l 0000 root sys $libdir/libfltk_forms.so libfltk_forms.so.@FL_DSO_VERSION@
-%system all
-
-%system hpux
-l 0000 root sys $libdir/libfltk_images.sl libfltk_images.sl.@FL_DSO_VERSION@
-%system darwin
-l 0000 root sys $libdir/libfltk_images.dylib libfltk_images.@FL_DSO_VERSION@.dylib
-%system !aix !darwin !hpux
-l 0000 root sys $libdir/libfltk_images.so libfltk_images.so.@FL_DSO_VERSION@
-%system all
-%endif
-
-%if GLDSONAME
-%system hpux
-l 0000 root sys $libdir/libfltk_gl.sl libfltk_gl.sl.@FL_DSO_VERSION@
-%system darwin
-l 0000 root sys $libdir/libfltk_gl.dylib libfltk_gl.@FL_DSO_VERSION@.dylib
-%system !aix !darwin !hpux
-l 0000 root sys $libdir/libfltk_gl.so libfltk_gl.so.@FL_DSO_VERSION@
-%system all
-%endif
-
-# Header files
-f 0444 root sys $includedir/FL/ FL/*.[hH]
-
-%if JPEG
-f 0444 root sys $includedir/FL/images/jconfig.h jpeg/jconfig.h
-f 0444 root sys $includedir/FL/images/jerror.h jpeg/jerror.h
-f 0444 root sys $includedir/FL/images/jmorecfg.h jpeg/jmorecfg.h
-f 0444 root sys $includedir/FL/images/jpeglib.h jpeg/jpeglib.h
-%endif
-
-%if PNG
-f 0444 root sys $includedir/FL/images/png.h png/png.h
-f 0444 root sys $includedir/FL/images/pngconf.h png/pngconf.h
-f 0444 root sys $includedir/FL/images/pnglibconf.h png/pnglibconf.h
-%endif
-
-%if ZLIB
-f 0444 root sys $includedir/FL/images/zconf.h zlib/zconf.h
-f 0444 root sys $includedir/FL/images/zlib.h zlib/zlib.h
-f 0444 root sys $includedir/FL/images/zutil.h zlib/zutil.h
-%endif
-
-%system !darwin
-# Symlinks to handle common case problems...
-l 0000 root sys $includedir/Fl FL
-l 0000 root sys $includedir/FL/Enumerations.h Enumerations.H
-l 0000 root sys $includedir/FL/Fl.h Fl.H
-l 0000 root sys $includedir/FL/Fl_Adjuster.h Fl_Adjuster.H
-l 0000 root sys $includedir/FL/Fl_Bitmap.h Fl_Bitmap.H
-l 0000 root sys $includedir/FL/Fl_BMP_Image.h Fl_BMP_Image.H
-l 0000 root sys $includedir/FL/Fl_Box.h Fl_Box.H
-l 0000 root sys $includedir/FL/Fl_Browser.h Fl_Browser.H
-l 0000 root sys $includedir/FL/Fl_Browser_.h Fl_Browser_.H
-l 0000 root sys $includedir/FL/Fl_Button.h Fl_Button.H
-l 0000 root sys $includedir/FL/Fl_Cairo.h Fl_Cairo.H
-l 0000 root sys $includedir/FL/Fl_Cairo_Window.h Fl_Cairo_Window.H
-l 0000 root sys $includedir/FL/Fl_Chart.h Fl_Chart.H
-l 0000 root sys $includedir/FL/Fl_Check_Browser.h Fl_Check_Browser.H
-l 0000 root sys $includedir/FL/Fl_Check_Button.h Fl_Check_Button.H
-l 0000 root sys $includedir/FL/Fl_Choice.h Fl_Choice.H
-l 0000 root sys $includedir/FL/Fl_Clock.h Fl_Clock.H
-l 0000 root sys $includedir/FL/Fl_Color_Chooser.h Fl_Color_Chooser.H
-l 0000 root sys $includedir/FL/Fl_Counter.h Fl_Counter.H
-l 0000 root sys $includedir/FL/Fl_Device.h Fl_Device.H
-l 0000 root sys $includedir/FL/Fl_Dial.h Fl_Dial.H
-l 0000 root sys $includedir/FL/Fl_Double_Window.h Fl_Double_Window.H
-l 0000 root sys $includedir/FL/Fl_Export.h Fl_Export.H
-l 0000 root sys $includedir/FL/Fl_File_Browser.h Fl_File_Browser.H
-l 0000 root sys $includedir/FL/Fl_File_Chooser.h Fl_File_Chooser.H
-l 0000 root sys $includedir/FL/Fl_File_Icon.h Fl_File_Icon.H
-l 0000 root sys $includedir/FL/Fl_Fill_Dial.h Fl_Fill_Dial.H
-l 0000 root sys $includedir/FL/Fl_Fill_Slider.h Fl_Fill_Slider.H
-l 0000 root sys $includedir/FL/Fl_Float_Input.h Fl_Float_Input.H
-l 0000 root sys $includedir/FL/Fl_FormsBitmap.h Fl_FormsBitmap.H
-l 0000 root sys $includedir/FL/Fl_FormsPixmap.h Fl_FormsPixmap.H
-l 0000 root sys $includedir/FL/Fl_Free.h Fl_Free.H
-l 0000 root sys $includedir/FL/Fl_GIF_Image.h Fl_GIF_Image.H
-l 0000 root sys $includedir/FL/Fl_Gl_Window.h Fl_Gl_Window.H
-l 0000 root sys $includedir/FL/Fl_Group.h Fl_Group.H
-l 0000 root sys $includedir/FL/Fl_Help_Dialog.h Fl_Help_Dialog.H
-l 0000 root sys $includedir/FL/Fl_Help_View.h Fl_Help_View.H
-l 0000 root sys $includedir/FL/Fl_Hold_Browser.h Fl_Hold_Browser.H
-l 0000 root sys $includedir/FL/Fl_Hor_Fill_Slider.h Fl_Hor_Fill_Slider.H
-l 0000 root sys $includedir/FL/Fl_Hor_Nice_Slider.h Fl_Hor_Nice_Slider.H
-l 0000 root sys $includedir/FL/Fl_Hor_Slider.h Fl_Hor_Slider.H
-l 0000 root sys $includedir/FL/Fl_Hor_Value_Slider.h Fl_Hor_Value_Slider.H
-l 0000 root sys $includedir/FL/Fl_Image.h Fl_Image.H
-l 0000 root sys $includedir/FL/Fl_JPEG_Image.h Fl_JPEG_Image.H
-l 0000 root sys $includedir/FL/Fl_Input.h Fl_Input.H
-l 0000 root sys $includedir/FL/Fl_Input_.h Fl_Input_.H
-l 0000 root sys $includedir/FL/Fl_Input_Choice.h Fl_Input_Choice.H
-l 0000 root sys $includedir/FL/Fl_Int_Input.h Fl_Int_Input.H
-l 0000 root sys $includedir/FL/Fl_Light_Button.h Fl_Light_Button.H
-l 0000 root sys $includedir/FL/Fl_Line_Dial.h Fl_Line_Dial.H
-l 0000 root sys $includedir/FL/Fl_Menu.h Fl_Menu.H
-l 0000 root sys $includedir/FL/Fl_Menu_.h Fl_Menu_.H
-l 0000 root sys $includedir/FL/Fl_Menu_Bar.h Fl_Menu_Bar.H
-l 0000 root sys $includedir/FL/Fl_Menu_Button.h Fl_Menu_Button.H
-l 0000 root sys $includedir/FL/Fl_Menu_Item.h Fl_Menu_Item.H
-l 0000 root sys $includedir/FL/Fl_Menu_Window.h Fl_Menu_Window.H
-l 0000 root sys $includedir/FL/Fl_Multi_Browser.h Fl_Multi_Browser.H
-l 0000 root sys $includedir/FL/Fl_Multi_Label.h Fl_Multi_Label.H
-l 0000 root sys $includedir/FL/Fl_Multiline_Input.h Fl_Multiline_Input.H
-l 0000 root sys $includedir/FL/Fl_Multiline_Output.h Fl_Multiline_Output.H
-l 0000 root sys $includedir/FL/Fl_Native_File_Chooser.h Fl_Native_File_Chooser.H
-l 0000 root sys $includedir/FL/Fl_Nice_Slider.h Fl_Nice_Slider.H
-l 0000 root sys $includedir/FL/Fl_Object.h Fl_Object.H
-l 0000 root sys $includedir/FL/Fl_Output.h Fl_Output.H
-l 0000 root sys $includedir/FL/Fl_Overlay_Window.h Fl_Overlay_Window.H
-l 0000 root sys $includedir/FL/Fl_Pack.h Fl_Pack.H
-l 0000 root sys $includedir/FL/Fl_Paged_Device.h Fl_Paged_Device.H
-l 0000 root sys $includedir/FL/Fl_Pixmap.h Fl_Pixmap.H
-l 0000 root sys $includedir/FL/Fl_Plugin.h Fl_Plugin.H
-l 0000 root sys $includedir/FL/Fl_PNG_Image.h Fl_PNG_Image.H
-l 0000 root sys $includedir/FL/Fl_PNM_Image.h Fl_PNM_Image.H
-l 0000 root sys $includedir/FL/Fl_Positioner.h Fl_Positioner.H
-l 0000 root sys $includedir/FL/Fl_PostScript.h Fl_PostScript.H
-l 0000 root sys $includedir/FL/Fl_Preferences.h Fl_Preferences.H
-l 0000 root sys $includedir/FL/Fl_Printer.h Fl_Printer.H
-l 0000 root sys $includedir/FL/Fl_Progress.h Fl_Progress.H
-l 0000 root sys $includedir/FL/Fl_Radio_Button.h Fl_Radio_Button.H
-l 0000 root sys $includedir/FL/Fl_Radio_Light_Button.h Fl_Radio_Light_Button.H
-l 0000 root sys $includedir/FL/Fl_Radio_Round_Button.h Fl_Radio_Round_Button.H
-l 0000 root sys $includedir/FL/Fl_Repeat_Button.h Fl_Repeat_Button.H
-l 0000 root sys $includedir/FL/Fl_Return_Button.h Fl_Return_Button.H
-l 0000 root sys $includedir/FL/Fl_Roller.h Fl_Roller.H
-l 0000 root sys $includedir/FL/Fl_Round_Button.h Fl_Round_Button.H
-l 0000 root sys $includedir/FL/Fl_Round_Clock.h Fl_Round_Clock.H
-l 0000 root sys $includedir/FL/Fl_Scroll.h Fl_Scroll.H
-l 0000 root sys $includedir/FL/Fl_Scrollbar.h Fl_Scrollbar.H
-l 0000 root sys $includedir/FL/Fl_Secret_Input.h Fl_Secret_Input.H
-l 0000 root sys $includedir/FL/Fl_Select_Browser.h Fl_Select_Browser.H
-l 0000 root sys $includedir/FL/Fl_Shared_Image.h Fl_Shared_Image.H
-l 0000 root sys $includedir/FL/Fl_Simple_Counter.h Fl_Simple_Counter.H
-l 0000 root sys $includedir/FL/Fl_Single_Window.h Fl_Single_Window.H
-l 0000 root sys $includedir/FL/Fl_Slider.h Fl_Slider.H
-l 0000 root sys $includedir/FL/Fl_Spinner.h Fl_Spinner.H
-l 0000 root sys $includedir/FL/Fl_Sys_Menu_Bar.h Fl_Sys_Menu_Bar.H
-l 0000 root sys $includedir/FL/Fl_Table.h Fl_Table.H
-l 0000 root sys $includedir/FL/Fl_Table_Row.h Fl_Table_Row.H
-l 0000 root sys $includedir/FL/Fl_Tabs.h Fl_Tabs.H
-l 0000 root sys $includedir/FL/Fl_Text_Buffer.h Fl_Text_Buffer.H
-l 0000 root sys $includedir/FL/Fl_Text_Display.h Fl_Text_Display.H
-l 0000 root sys $includedir/FL/Fl_Text_Editor.h Fl_Text_Editor.H
-l 0000 root sys $includedir/FL/Fl_Tile.h Fl_Tile.H
-l 0000 root sys $includedir/FL/Fl_Tiled_Image.h Fl_Tiled_Image.H
-l 0000 root sys $includedir/FL/Fl_Timer.h Fl_Timer.H
-l 0000 root sys $includedir/FL/Fl_Toggle_Button.h Fl_Toggle_Button.H
-l 0000 root sys $includedir/FL/Fl_Toggle_Light_Button.h Fl_Toggle_Light_Button.H
-l 0000 root sys $includedir/FL/Fl_Toggle_Round_Button.h Fl_Toggle_Round_Button.H
-l 0000 root sys $includedir/FL/Fl_Tooltip.h Fl_Tooltip.H
-l 0000 root sys $includedir/FL/Fl_Tree.h Fl_Tree.H
-l 0000 root sys $includedir/FL/Fl_Tree_Item.h Fl_Tree_Item.H
-l 0000 root sys $includedir/FL/Fl_Tree_Item_Array.h Fl_Tree_Item_Array.H
-l 0000 root sys $includedir/FL/Fl_Tree_Prefs.h Fl_Tree_Prefs.H
-l 0000 root sys $includedir/FL/Fl_Valuator.h Fl_Valuator.H
-l 0000 root sys $includedir/FL/Fl_Value_Input.h Fl_Value_Input.H
-l 0000 root sys $includedir/FL/Fl_Value_Output.h Fl_Value_Output.H
-l 0000 root sys $includedir/FL/Fl_Value_Slider.h Fl_Value_Slider.H
-l 0000 root sys $includedir/FL/Fl_Widget.h Fl_Widget.H
-l 0000 root sys $includedir/FL/Fl_Window.h Fl_Window.H
-l 0000 root sys $includedir/FL/Fl_Wizard.h Fl_Wizard.H
-l 0000 root sys $includedir/FL/Fl_XBM_Image.h Fl_XBM_Image.H
-l 0000 root sys $includedir/FL/Fl_XPM_Image.h Fl_XPM_Image.H
-l 0000 root sys $includedir/FL/filename.h filename.H
-l 0000 root sys $includedir/FL/fl_ask.h fl_ask.H
-l 0000 root sys $includedir/FL/fl_draw.h fl_draw.H
-l 0000 root sys $includedir/FL/fl_message.h fl_message.H
-l 0000 root sys $includedir/FL/fl_show_colormap.h fl_show_colormap.H
-l 0000 root sys $includedir/FL/fl_show_input.h fl_show_input.H
-l 0000 root sys $includedir/FL/forms.h forms.H
-l 0000 root sys $includedir/FL/gl_draw.h gl_draw.H
-l 0000 root sys $includedir/FL/glut.h glut.H
-l 0000 root sys $includedir/FL/mac.h mac.H
-l 0000 root sys $includedir/FL/win32.h win32.H
-l 0000 root sys $includedir/FL/x.h x.H
-%system all
-
-# Documentation
-d 0555 root sys $docdir -
-f 0444 root sys $docdir/ documentation/html/*.gif
-f 0444 root sys $docdir/ documentation/html/*.html
-f 0444 root sys $docdir/ documentation/html/*.jpg
-f 0444 root sys $docdir/COPYING COPYING
-f 0444 root sys $docdir/CHANGES CHANGES
-
-# Examples
-d 0555 root sys $docdir/examples
-f 0444 root sys $docdir/examples/config.h config.h
-f 0444 root sys $docdir/examples/ test/*.cxx
-f 0444 root sys $docdir/examples/ test/*.fl
-f 0444 root sys $docdir/examples/ test/*.h
-
-%subpackage games
-%description FLTK Games
-%description Install fltk-games to play Block Attack!, checkers, or Sudoku on your computer.
-
-%system darwin
-d 0555 root sys /Applications/blocks.app -
-d 0555 root sys /Applications/blocks.app/Contents -
-f 0444 root sys /Applications/blocks.app/Contents/Info.plist test/blocks.app/Contents/Info.plist
-f 0444 root sys /Applications/blocks.app/Contents/PkgInfo test/blocks.app/Contents/PkgInfo
-d 0555 root sys /Applications/blocks.app/Contents/MacOS -
-f 0555 root sys /Applications/blocks.app/Contents/MacOS/blocks test/blocks
-d 0555 root sys /Applications/blocks.app/Contents/Resources -
-f 0444 root sys /Applications/blocks.app/Contents/Resources/blocks.icns test/blocks.app/Contents/Resources/blocks.icns
-%postremove /bin/rm -rf /Applications/blocks.app
-
-d 0555 root sys /Applications/checkers.app -
-d 0555 root sys /Applications/checkers.app/Contents -
-f 0444 root sys /Applications/checkers.app/Contents/Info.plist test/checkers.app/Contents/Info.plist
-f 0444 root sys /Applications/checkers.app/Contents/PkgInfo test/checkers.app/Contents/PkgInfo
-d 0555 root sys /Applications/checkers.app/Contents/MacOS -
-f 0555 root sys /Applications/checkers.app/Contents/MacOS/checkers test/checkers
-d 0555 root sys /Applications/checkers.app/Contents/Resources -
-f 0444 root sys /Applications/checkers.app/Contents/Resources/checkers.icns test/checkers.app/Contents/Resources/checkers.icns
-%postremove /bin/rm -rf /Applications/checkers.app
-
-d 0555 root sys /Applications/sudoku.app -
-d 0555 root sys /Applications/sudoku.app/Contents -
-f 0444 root sys /Applications/sudoku.app/Contents/Info.plist test/sudoku.app/Contents/Info.plist
-f 0444 root sys /Applications/sudoku.app/Contents/PkgInfo test/sudoku.app/Contents/PkgInfo
-d 0555 root sys /Applications/sudoku.app/Contents/MacOS -
-f 0555 root sys /Applications/sudoku.app/Contents/MacOS/sudoku test/sudoku
-d 0555 root sys /Applications/sudoku.app/Contents/Resources -
-f 0444 root sys /Applications/sudoku.app/Contents/Resources/sudoku.icns test/sudoku.app/Contents/Resources/sudoku.icns
-%postremove /bin/rm -rf /Applications/sudoku.app
-
-%system !darwin
-f 0555 root sys $bindir/blocks test/blocks
-f 0444 root sys /usr/share/applications/blocks.desktop test/desktop/blocks.desktop
-f 0444 root sys /usr/share/icons/hicolor/32x32/apps/blocks.png test/desktop/blocks-32.png
-f 0444 root sys /usr/share/icons/hicolor/128x128/apps/blocks.png test/desktop/blocks-128.png
-
-f 0555 root sys $bindir/checkers test/checkers
-f 0444 root sys /usr/share/applications/checkers.desktop test/desktop/checkers.desktop
-f 0444 root sys /usr/share/icons/hicolor/32x32/apps/checkers.png test/desktop/checkers-32.png
-f 0444 root sys /usr/share/icons/hicolor/128x128/apps/checkers.png test/desktop/checkers-128.png
-
-f 0555 root sys $bindir/sudoku test/sudoku
-f 0444 root sys /usr/share/applications/sudoku.desktop test/desktop/sudoku.desktop
-f 0444 root sys /usr/share/icons/hicolor/32x32/apps/sudoku.png test/desktop/sudoku-32.png
-f 0444 root sys /usr/share/icons/hicolor/128x128/apps/sudoku.png test/desktop/sudoku-128.png
-
-%system all
-f 0444 root sys $mandir/cat6/blocks.$CAT6EXT documentation/src/blocks.$CAT6EXT
-f 0444 root sys $mandir/cat6/checkers.$CAT6EXT documentation/src/checkers.$CAT6EXT
-f 0444 root sys $mandir/cat6/sudoku.$CAT6EXT documentation/src/sudoku.$CAT6EXT
-f 0444 root sys $mandir/man6/blocks.6 documentation/src/blocks.man
-f 0444 root sys $mandir/man6/checkers.6 documentation/src/checkers.man
-f 0444 root sys $mandir/man6/sudoku.6 documentation/src/sudoku.man
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/fltk.spec
+++ /dev/null
@@ -1,136 +1,0 @@
-#
-# "$Id$"
-#
-# RPM spec file for FLTK.
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-%define version @FL_MAJOR_VERSION@.@FL_MINOR_VERSION@.@FL_PATCH_VERSION@
-%define release 1
-%define prefix /usr
-
-Summary: Fast Light Tool Kit (FLTK)
-Name: fltk
-Version: %{version}
-Release: %{release}
-License: LGPL
-Group: System Environment/Libraries
-Source: https://www.fltk.org/pub/fltk/1.3.5/fltk-1.3.5-source.tar.gz
-URL: http://www.fltk.org/
-Packager: FLTK Developer <fltk@fltk.org>
-# use BuildRoot so as not to disturb the version already installed
-BuildRoot: /var/tmp/fltk-%{PACKAGE_VERSION}
-
-%description
-The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
-Microsoft(r) Windows(r), and MacOS(r) X.  FLTK provides modern
-GUI functionality without the bloat and supports 3D graphics via
-OpenGL(r) and its built-in GLUT emulation.
-
-%package devel
-Summary: FLTK Development Environment
-Group: Development/Libraries
-
-%description devel
-Install fltk-devel if you need to develop FLTK applications. 
-You'll need to install the fltk package if you plan to run
-dynamically linked applications.
-
-%package games
-Summary: FLTK Games
-Group: Games
-
-%description games
-Install fltk-games to play Block Attack!, Checkers, or Sudoku on your computer.
-
-%prep
-%setup
-
-%build
-CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --mandir=%{_mandir} --enable-largefile --enable-shared --enable-threads --enable-xft --enable-xdbe --enable-xinerama
-
-# If we got this far, all prerequisite libraries must be here.
-make
-
-%install
-# these lines just make sure the directory structure in the
-# RPM_BUILD_ROOT exists
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT
-
-make -e DESTDIR=$RPM_BUILD_ROOT install install-desktop
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-%dir %{prefix}/lib
-%{prefix}/lib/libfltk*.so.*
-
-%files devel
-%defattr(-,root,root)
-
-%dir %{prefix}/bin
-%{prefix}/bin/fltk-config
-%{prefix}/bin/fluid
-
-%dir %{prefix}/include/FL
-%{prefix}/include/FL/*
-%{prefix}/include/Fl
-
-%dir %{prefix}/lib
-%{prefix}/lib/libfltk*.so
-%{prefix}/lib/libfltk*.a
-
-%dir %{_mandir}
-%{_mandir}/cat1/*
-%{_mandir}/cat3/*
-%{_mandir}/man1/*
-%{_mandir}/man3/*
-
-%dir %{prefix}/share/doc/fltk
-%{prefix}/share/doc/fltk/*
-
-%dir %{prefix}/share/applications
-%{prefix}/share/applications/*
-
-%dir %{prefix}/share/icons
-%{prefix}/share/icons/hicolor/*/apps/fluid.png
-
-%dir %{prefix}/share/mimelnk
-%{prefix}/share/mimelnk/*
-
-%files games
-%dir %{prefix}/bin
-%{prefix}/bin/blocks
-%{prefix}/bin/checkers
-%{prefix}/bin/sudoku
-
-%dir %{_mandir}
-%{_mandir}/cat6/*
-%{_mandir}/man6/*
-
-%dir %{prefix}/share/applications
-%{prefix}/share/applications/*
-
-%dir %{prefix}/share/icons
-%{prefix}/share/icons/hicolor/*/apps/blocks.png
-%{prefix}/share/icons/hicolor/*/apps/checkers.png
-%{prefix}/share/icons/hicolor/*/apps/sudoku.png
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/fltk.spec.in
+++ /dev/null
@@ -1,136 +1,0 @@
-#
-# "$Id$"
-#
-# RPM spec file for FLTK.
-#
-# Copyright 1998-2015 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-%define version @FL_MAJOR_VERSION@.@FL_MINOR_VERSION@.@FL_PATCH_VERSION@
-%define release 1
-%define prefix /usr
-
-Summary: Fast Light Tool Kit (FLTK)
-Name: fltk
-Version: %{version}
-Release: %{release}
-License: LGPL
-Group: System Environment/Libraries
-Source: ftp://ftp.fltk.org/pub/fltk/%{version}/fltk-%{version}-source.tar.gz
-URL: http://www.fltk.org/
-Packager: FLTK Developer <fltk@fltk.org>
-# use BuildRoot so as not to disturb the version already installed
-BuildRoot: /var/tmp/fltk-%{PACKAGE_VERSION}
-
-%description
-The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
-cross-platform C++ GUI toolkit for UNIX(r)/Linux(r) (X11),
-Microsoft(r) Windows(r), and MacOS(r) X.  FLTK provides modern
-GUI functionality without the bloat and supports 3D graphics via
-OpenGL(r) and its built-in GLUT emulation.
-
-%package devel
-Summary: FLTK Development Environment
-Group: Development/Libraries
-
-%description devel
-Install fltk-devel if you need to develop FLTK applications. 
-You'll need to install the fltk package if you plan to run
-dynamically linked applications.
-
-%package games
-Summary: FLTK Games
-Group: Games
-
-%description games
-Install fltk-games to play Block Attack!, Checkers, or Sudoku on your computer.
-
-%prep
-%setup
-
-%build
-CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --mandir=%{_mandir} --enable-largefile --enable-shared --enable-threads --enable-xft --enable-xdbe --enable-xinerama
-
-# If we got this far, all prerequisite libraries must be here.
-make
-
-%install
-# these lines just make sure the directory structure in the
-# RPM_BUILD_ROOT exists
-rm -rf $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT
-
-make -e DESTDIR=$RPM_BUILD_ROOT install install-desktop
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(-,root,root)
-%dir %{prefix}/lib
-%{prefix}/lib/libfltk*.so.*
-
-%files devel
-%defattr(-,root,root)
-
-%dir %{prefix}/bin
-%{prefix}/bin/fltk-config
-%{prefix}/bin/fluid
-
-%dir %{prefix}/include/FL
-%{prefix}/include/FL/*
-%{prefix}/include/Fl
-
-%dir %{prefix}/lib
-%{prefix}/lib/libfltk*.so
-%{prefix}/lib/libfltk*.a
-
-%dir %{_mandir}
-%{_mandir}/cat1/*
-%{_mandir}/cat3/*
-%{_mandir}/man1/*
-%{_mandir}/man3/*
-
-%dir %{prefix}/share/doc/fltk
-%{prefix}/share/doc/fltk/*
-
-%dir %{prefix}/share/applications
-%{prefix}/share/applications/*
-
-%dir %{prefix}/share/icons
-%{prefix}/share/icons/hicolor/*/apps/fluid.png
-
-%dir %{prefix}/share/mimelnk
-%{prefix}/share/mimelnk/*
-
-%files games
-%dir %{prefix}/bin
-%{prefix}/bin/blocks
-%{prefix}/bin/checkers
-%{prefix}/bin/sudoku
-
-%dir %{_mandir}
-%{_mandir}/cat6/*
-%{_mandir}/man6/*
-
-%dir %{prefix}/share/applications
-%{prefix}/share/applications/*
-
-%dir %{prefix}/share/icons
-%{prefix}/share/icons/hicolor/*/apps/blocks.png
-%{prefix}/share/icons/hicolor/*/apps/checkers.png
-%{prefix}/share/icons/hicolor/*/apps/sudoku.png
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/fltk.xpm
+++ /dev/null
@@ -1,225 +1,0 @@
-/* XPM */
-static char * fltk_xpm[] = {
-"229 70 152 2",
-"  	c None",
-". 	c #000066",
-"+ 	c #68689A",
-"@ 	c #9292AF",
-"# 	c #232377",
-"$ 	c #CCCCCC",
-"% 	c #31317E",
-"& 	c #7878A2",
-"* 	c #5D5D95",
-"= 	c #1F1F76",
-"- 	c #31317F",
-"; 	c #11116F",
-"> 	c #B4B4C0",
-", 	c #ADADBC",
-"' 	c #4C4C8C",
-") 	c #595993",
-"! 	c #3A3A83",
-"~ 	c #7373A0",
-"{ 	c #51518E",
-"] 	c #A1A1B6",
-"^ 	c #49498B",
-"/ 	c #8989AA",
-"( 	c #020267",
-"_ 	c #050568",
-": 	c #444488",
-"< 	c #71719F",
-"[ 	c #1A1A73",
-"} 	c #5E5E95",
-"| 	c #9E9EB5",
-"1 	c #252578",
-"2 	c #A4A4B8",
-"3 	c #666699",
-"4 	c #2B2B7C",
-"5 	c #8383A7",
-"6 	c #10106E",
-"7 	c #6D6D9D",
-"8 	c #0B0B6B",
-"9 	c #CBCBCB",
-"0 	c #010166",
-"a 	c #7979A2",
-"b 	c #6E6E9D",
-"c 	c #0A0A6B",
-"d 	c #7676A1",
-"e 	c #C9C9CA",
-"f 	c #2A2A7B",
-"g 	c #9696B1",
-"h 	c #6A6A9B",
-"i 	c #262679",
-"j 	c #49498A",
-"k 	c #C2C2C7",
-"l 	c #47478A",
-"m 	c #BCBCC4",
-"n 	c #424287",
-"o 	c #4A4A8B",
-"p 	c #C5C5C9",
-"q 	c #454588",
-"r 	c #BBBBC3",
-"s 	c #434388",
-"t 	c #69699B",
-"u 	c #535390",
-"v 	c #5B5B93",
-"w 	c #73739F",
-"x 	c #CACACB",
-"y 	c #8888AA",
-"z 	c #050569",
-"A 	c #7F7FA5",
-"B 	c #7575A0",
-"C 	c #8C8CAC",
-"D 	c #8A8AAB",
-"E 	c #13136F",
-"F 	c #09096B",
-"G 	c #C8C8CA",
-"H 	c #040468",
-"I 	c #7474A0",
-"J 	c #8F8FAD",
-"K 	c #12126F",
-"L 	c #08086A",
-"M 	c #70709E",
-"N 	c #C7C7CA",
-"O 	c #0D0D6C",
-"P 	c #07076A",
-"Q 	c #8B8BAC",
-"R 	c #8787AA",
-"S 	c #6F6F9D",
-"T 	c #0F0F6E",
-"U 	c #7575A1",
-"V 	c #8787A9",
-"W 	c #CBCBCC",
-"X 	c #11116E",
-"Y 	c #7777A2",
-"Z 	c #8585A9",
-"` 	c #8B8BAB",
-" .	c #8383A8",
-"..	c #030367",
-"+.	c #070769",
-"@.	c #8484A8",
-"#.	c #0F0F6D",
-"$.	c #0D0D6D",
-"%.	c #0C0C6C",
-"&.	c #8181A7",
-"*.	c #ABABBC",
-"=.	c #B5B5C0",
-"-.	c #1E1E75",
-";.	c #A3A3B7",
-">.	c #242478",
-",.	c #A8A8BA",
-"'.	c #141470",
-").	c #A5A5B8",
-"!.	c #252579",
-"~.	c #A5A5B9",
-"{.	c #191973",
-"].	c #B5B5C1",
-"^.	c #161671",
-"/.	c #B7B7C1",
-"(.	c #A3A3B8",
-"_.	c #212177",
-":.	c #B2B2BF",
-"<.	c #B0B0BE",
-"[.	c #232378",
-"}.	c #AEAEBD",
-"|.	c #B6B6C1",
-"1.	c #212176",
-"2.	c #C3C3C8",
-"3.	c #ABABBB",
-"4.	c #151570",
-"5.	c #414186",
-"6.	c #BBBBC4",
-"7.	c #B9B9C2",
-"8.	c #1D1D75",
-"9.	c #464689",
-"0.	c #BFBFC6",
-"a.	c #A7A7B9",
-"b.	c #28287A",
-"c.	c #010167",
-"d.	c #BDBDC5",
-"e.	c #B9B9C3",
-"f.	c #454589",
-"g.	c #BDBDC4",
-"h.	c #A9A9BB",
-"i.	c #414187",
-"j.	c #C0C0C6",
-"k.	c #27277A",
-"l.	c #3E3E85",
-"m.	c #A6A6B9",
-"n.	c #C3C3C7",
-"o.	c #151571",
-"p.	c #030368",
-"q.	c #0B0B6C",
-"r.	c #B1B1BF",
-"s.	c #404086",
-"t.	c #C7C7C9",
-"u.	c #0E0E6D",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ # @ @ @ @ @ @ @ @ @ @ @ @ @ @ ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ : < @ @ @ @ @ @ @ @ @ @ @ @ [ . . . . . . . . . . . . . . . . . . . . . t @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . . c w x $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y z . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . 0 B $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ C z . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . h $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ D E . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . F < G $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y F . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . H I $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ J . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y K . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . L M N $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9 / O . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . P I $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . M $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R 6 . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . z S N $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9 D T . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . F U $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ & * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * = $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^ * * * * * * * * * * * * * * * * * * * * * * * * 2 $ $ $ $ $ $ $ $ $ $ $ $ $ 3 * * * * * * * * * * * * * * * * * * * * * * * 4 | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . ~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ V O . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . ( 7 G $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ W C X . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . 8 Y $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . d $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R F . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . 7 x $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ` ; . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . 8 & 9 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $  .... . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . 0 a $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ / _ . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y ; . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 c d e $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 +.. . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ f & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ D . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ g $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z 6 . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9 @.c . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @.#.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ > , , , , , , , , , , , , , , , , , , , , , , , , , , , ' . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ x Z $.. . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @.%.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9 V #.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @.L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ *.$.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ =.-.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ;.>.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,.'.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > [ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ).!.. . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~.{.. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ > , , , , , , , , , , , , , , , , , , , , , , , , , , , ' . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ].^.. . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,.!.. . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ h $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2 -.. . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ i j k $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ /.X . . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . l m $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ *.1 . . . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . n $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (._.. . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . o p $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :.; . . . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . q r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ <.[.. . . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . s G $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2 >.. . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . o x $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ }.K . . . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . n r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.1.. . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . q 2.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ).i . . . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . l $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3.4.. . . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . 0 5.6.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7.8.. . . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ( . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . 9.0.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ a.b.. . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . : $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,.[ . . . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . c.n d.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ e.{.. . . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . f.g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ h.b.. . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . i.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ a.= . . . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . c.: j.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r '.. . . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . : r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ , k.. . . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . l.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ m.[.. . . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . . q n.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.o.. . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . . . n e.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r.i . . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . . . . s.N $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ m.i . . ",
-". . @ $ $ $ $ $ $ $ $ $ $ $ $ - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . . . . . . . . . . . . . . . . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . . . . . . . . . . . . . . . . . . . | $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . . . . . . . . . . . . . . . . . . . . q t.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r.T . ",
-". . + @ @ @ @ @ @ @ @ @ @ @ @ [.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . %.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ p.. . . . . . . . . . . . . . . . . . . . } @ @ @ @ @ @ @ @ @ @ @ @ @ q.. . . . . . . . . . . . . . . . . . . . . . . . < @ @ @ @ @ @ @ @ @ @ @ @ [ . . . . . . . . . . . . . . . . . . . . . . . s.@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ u.. ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
-". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "};
--- a/DoConfig/fltk/fluid/CMakeLists.txt
+++ /dev/null
@@ -1,78 +1,0 @@
-#
-# "$Id$"
-#
-# CMakeLists.txt to build fluid for the FLTK project using CMake (www.cmake.org)
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-set(CPPFILES
-    CodeEditor.cxx
-    Fl_Function_Type.cxx
-    Fl_Group_Type.cxx
-    Fl_Menu_Type.cxx
-    Fl_Type.cxx
-    ExternalCodeEditor_UNIX.cxx
-    ExternalCodeEditor_WIN32.cxx
-    Fl_Widget_Type.cxx
-    Fl_Window_Type.cxx
-    Fluid_Image.cxx
-    about_panel.cxx
-    align_widget.cxx
-    alignment_panel.cxx
-    code.cxx
-    factory.cxx
-    file.cxx
-    fluid.cxx
-    function_panel.cxx
-    template_panel.cxx
-    undo.cxx
-    widget_panel.cxx
-)
-
-if(APPLE AND NOT OPTION_APPLE_X11)
-    set(FLUID_ICON "${CMAKE_CURRENT_SOURCE_DIR}/fluid.app/Contents/Resources/fluid.icns")
-    add_executable(fluid MACOSX_BUNDLE ${CPPFILES} "${FLUID_ICON}")
-    FLTK_SET_BUNDLE_ICON(fluid "${FLUID_ICON}")
-else()
-    add_executable(fluid WIN32 ${CPPFILES})
-endif(APPLE AND NOT OPTION_APPLE_X11)
-
-target_link_libraries(fluid fltk fltk_images fltk_forms)
-
-# install fluid
-
-install(TARGETS fluid
-    EXPORT FLTK-Targets
-    DESTINATION ${FLTK_BINDIR}
-)
-
-# install desktop files
-
-if(UNIX)
-    install(FILES fluid.desktop
-        DESTINATION ${FLTK_DATADIR}/applications
-        )
-    # Install mime-type file. x-fluid.desktop method is deprecated.
-    install(FILES fluid.xml
-        DESTINATION ${FLTK_DATADIR}/mime/packages
-        )
-
-    # Install desktop icons.
-    foreach(icon 32 48 64 128)
-        install(FILES icons/fluid-${icon}.png
-            DESTINATION ${FLTK_DATADIR}/icons/hicolor/${icon}x${icon}/apps
-            RENAME fluid.png
-        )
-    endforeach()
-endif(UNIX)
--- a/DoConfig/fltk/fluid/CodeEditor.cxx
+++ /dev/null
@@ -1,442 +1,0 @@
-//
-// "$Id$"
-//
-// Code editor widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Include necessary headers...
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "CodeEditor.h"
-
-
-Fl_Text_Display::Style_Table_Entry CodeEditor::
-		styletable[] = {	// Style table
-		  { FL_FOREGROUND_COLOR, FL_COURIER,        11 }, // A - Plain
-		  { FL_DARK_GREEN,       FL_COURIER_ITALIC, 11 }, // B - Line comments
-		  { FL_DARK_GREEN,       FL_COURIER_ITALIC, 11 }, // C - Block comments
-		  { FL_BLUE,             FL_COURIER,        11 }, // D - Strings
-		  { FL_DARK_RED,         FL_COURIER,        11 }, // E - Directives
-		  { FL_DARK_RED,         FL_COURIER_BOLD,   11 }, // F - Types
-		  { FL_BLUE,             FL_COURIER_BOLD,   11 }  // G - Keywords
-		};
-const char * const CodeEditor::
-		code_keywords[] = {	// Sorted list of C/C++ keywords...
-		  "and",
-		  "and_eq",
-		  "asm",
-		  "bitand",
-		  "bitor",
-		  "break",
-		  "case",
-		  "catch",
-		  "compl",
-		  "continue",
-		  "default",
-		  "delete",
-		  "do",
-		  "else",
-		  "false",
-		  "for",
-		  "goto",
-		  "if",
-		  "new",
-		  "not",
-		  "not_eq",
-		  "operator",
-		  "or",
-		  "or_eq",
-		  "return",
-		  "switch",
-		  "template",
-		  "this",
-		  "throw",
-		  "true",
-		  "try",
-		  "while",
-		  "xor",
-		  "xor_eq"
-		};
-const char * const CodeEditor::
-		code_types[] = {	// Sorted list of C/C++ types...
-		  "auto",
-		  "bool",
-		  "char",
-		  "class",
-		  "const",
-		  "const_cast",
-		  "double",
-		  "dynamic_cast",
-		  "enum",
-		  "explicit",
-		  "extern",
-		  "float",
-		  "friend",
-		  "inline",
-		  "int",
-		  "long",
-		  "mutable",
-		  "namespace",
-		  "private",
-		  "protected",
-		  "public",
-		  "register",
-		  "short",
-		  "signed",
-		  "sizeof",
-		  "static",
-		  "static_cast",
-		  "struct",
-		  "template",
-		  "typedef",
-		  "typename",
-		  "union",
-		  "unsigned",
-		  "virtual",
-		  "void",
-		  "volatile"
-		};
-
-// attempt to make the fluid code editor widget honour textsize setting
-void CodeEditor::textsize(Fl_Fontsize s) {
-  Fl_Text_Editor::textsize(s); // call base class method
-  // now attempt to update our styletable to honour the new size...
-  int entries = sizeof(styletable) / sizeof(styletable[0]);
-  for(int iter = 0; iter < entries; iter++) {
-    styletable[iter].size = s;
-  }
-} // textsize
-
-
-// 'compare_keywords()' - Compare two keywords...
-extern "C" {
-  static int compare_keywords(const void *a, const void *b) {
-    return strcmp(*((const char **)a), *((const char **)b));
-  }
-}
-
-// 'style_parse()' - Parse text and produce style data.
-void CodeEditor::style_parse(const char *text, char *style, int length) {
-  char		current;
-  int		col;
-  int		last;
-  char		buf[255],
-		*bufptr;
-  const char	*temp;
-
-  // Style letters:
-  //
-  // A - Plain
-  // B - Line comments
-  // C - Block comments
-  // D - Strings
-  // E - Directives
-  // F - Types
-  // G - Keywords
-
-  for (current = *style, col = 0, last = 0; length > 0; length --, text ++) {
-    if (current == 'B' || current == 'F' || current == 'G') current = 'A';
-    if (current == 'A') {
-      // Check for directives, comments, strings, and keywords...
-      if (col == 0 && *text == '#') {
-        // Set style to directive
-        current = 'E';
-      } else if (strncmp(text, "//", 2) == 0) {
-        current = 'B';
-	for (; length > 0 && *text != '\n'; length --, text ++) *style++ = 'B';
-
-        if (length == 0) break;
-      } else if (strncmp(text, "/*", 2) == 0) {
-        current = 'C';
-      } else if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted quote...
-	*style++ = current;
-	*style++ = current;
-	text ++;
-	length --;
-	col += 2;
-	continue;
-      } else if (*text == '\"') {
-        current = 'D';
-      } else if (!last && (islower(*text) || *text == '_')) {
-        // Might be a keyword...
-	for (temp = text, bufptr = buf;
-	     (islower(*temp) || *temp == '_') && bufptr < (buf + sizeof(buf) - 1);
-	     *bufptr++ = *temp++) {
-	  // nothing
-	}
-
-        if (!islower(*temp) && *temp != '_') {
-	  *bufptr = '\0';
-
-          bufptr = buf;
-
-	  if (bsearch(&bufptr, code_types,
-	              sizeof(code_types) / sizeof(code_types[0]),
-		      sizeof(code_types[0]), compare_keywords)) {
-	    while (text < temp) {
-	      *style++ = 'F';
-	      text ++;
-	      length --;
-	      col ++;
-	    }
-
-	    text --;
-	    length ++;
-	    last = 1;
-	    continue;
-	  } else if (bsearch(&bufptr, code_keywords,
-	                     sizeof(code_keywords) / sizeof(code_keywords[0]),
-		             sizeof(code_keywords[0]), compare_keywords)) {
-	    while (text < temp) {
-	      *style++ = 'G';
-	      text ++;
-	      length --;
-	      col ++;
-	    }
-
-	    text --;
-	    length ++;
-	    last = 1;
-	    continue;
-	  }
-	}
-      }
-    } else if (current == 'C' && strncmp(text, "*/", 2) == 0) {
-      // Close a C comment...
-      *style++ = current;
-      *style++ = current;
-      text ++;
-      length --;
-      current = 'A';
-      col += 2;
-      continue;
-    } else if (current == 'D') {
-      // Continuing in string...
-      if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted end quote...
-	*style++ = current;
-	*style++ = current;
-	text ++;
-	length --;
-	col += 2;
-	continue;
-      } else if (*text == '\"') {
-        // End quote...
-	*style++ = current;
-	col ++;
-	current = 'A';
-	continue;
-      }
-    }
-
-    // Copy style info...
-    if (current == 'A' && (*text == '{' || *text == '}')) *style++ = 'G';
-    else *style++ = current;
-    col ++;
-
-    last = isalnum(*text) || *text == '_' || *text == '.';
-
-    if (*text == '\n') {
-      // Reset column and possibly reset the style
-      col = 0;
-      if (current == 'B' || current == 'E') current = 'A';
-    }
-  }
-}
-
-// 'style_unfinished_cb()' - Update unfinished styles.
-void CodeEditor::style_unfinished_cb(int, void*) { }
-
-// 'style_update()' - Update the style buffer...
-void CodeEditor::style_update(int pos, int nInserted, int nDeleted,
-                              int /*nRestyled*/, const char * /*deletedText*/,
-                              void *cbArg) {
-  CodeEditor	*editor = (CodeEditor *)cbArg;
-  int		start,				// Start of text
-		end;				// End of text
-  char		last,				// Last style on line
-		*style,				// Style data
-		*text;				// Text data
-
-
-  // If this is just a selection change, just unselect the style buffer...
-  if (nInserted == 0 && nDeleted == 0) {
-    editor->mStyleBuffer->unselect();
-    return;
-  }
-
-  // Track changes in the text buffer...
-  if (nInserted > 0) {
-    // Insert characters into the style buffer...
-    style = new char[nInserted + 1];
-    memset(style, 'A', nInserted);
-    style[nInserted] = '\0';
-
-    editor->mStyleBuffer->replace(pos, pos + nDeleted, style);
-    delete[] style;
-  } else {
-    // Just delete characters in the style buffer...
-    editor->mStyleBuffer->remove(pos, pos + nDeleted);
-  }
-
-  // Select the area that was just updated to avoid unnecessary
-  // callbacks...
-  editor->mStyleBuffer->select(pos, pos + nInserted - nDeleted);
-
-  // Re-parse the changed region; we do this by parsing from the
-  // beginning of the line of the changed region to the end of
-  // the line of the changed region...  Then we check the last
-  // style character and keep updating if we have a multi-line
-  // comment character...
-  start = editor->mBuffer->line_start(pos);
-  // the following code checks the style of the last character of the previous
-  // line. If it is a block comment, the previous line is interpreted as well.
-  int altStart = editor->mBuffer->prev_char(start);
-  if (altStart>0) {
-    altStart = editor->mBuffer->prev_char(altStart);
-    if (altStart>=0 && editor->mStyleBuffer->byte_at(start-2)=='C')
-      start = editor->mBuffer->line_start(altStart);
-  }
-  end   = editor->mBuffer->line_end(pos + nInserted);
-  text  = editor->mBuffer->text_range(start, end);
-  style = editor->mStyleBuffer->text_range(start, end);
-  if (start==end)
-    last = 0;
-  else
-    last  = style[end - start - 1];
-
-  style_parse(text, style, end - start);
-
-  editor->mStyleBuffer->replace(start, end, style);
-  editor->redisplay_range(start, end);
-
-  if (start==end || last != style[end - start - 1]) {
-    // The last character on the line changed styles, so reparse the
-    // remainder of the buffer...
-    free(text);
-    free(style);
-
-    end   = editor->mBuffer->length();
-    text  = editor->mBuffer->text_range(start, end);
-    style = editor->mStyleBuffer->text_range(start, end);
-
-    style_parse(text, style, end - start);
-
-    editor->mStyleBuffer->replace(start, end, style);
-    editor->redisplay_range(start, end);
-  }
-
-  free(text);
-  free(style);
-}
-
-int CodeEditor::auto_indent(int, CodeEditor* e) {
-  if (e->buffer()->selected()) {
-    e->insert_position(e->buffer()->primary_selection()->start());
-    e->buffer()->remove_selection();
-  }
-
-  int pos = e->insert_position();
-  int start = e->line_start(pos);
-  char *text = e->buffer()->text_range(start, pos);
-  char *ptr;
-
-  for (ptr = text; isspace(*ptr); ptr ++) {/*empty*/}
-  *ptr = '\0';  
-  if (*text) {
-    // use only a single 'insert' call to avoid redraw issues
-    int n = strlen(text);
-    char *b = (char*)malloc(n+2);
-    *b = '\n';
-    strcpy(b+1, text);
-    e->insert(b);
-    free(b);
-  } else {
-    e->insert("\n");
-  }
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-
-  free(text);
-
-  return 1;
-}
-
-// Create a CodeEditor widget...
-CodeEditor::CodeEditor(int X, int Y, int W, int H, const char *L) :
-  Fl_Text_Editor(X, Y, W, H, L) {
-  buffer(new Fl_Text_Buffer);
-
-  char *style = new char[mBuffer->length() + 1];
-  char *text = mBuffer->text();
-
-  memset(style, 'A', mBuffer->length());
-  style[mBuffer->length()] = '\0';
-
-  highlight_data(new Fl_Text_Buffer(mBuffer->length()), styletable,
-                 sizeof(styletable) / sizeof(styletable[0]),
-		 'A', style_unfinished_cb, this);
-
-  style_parse(text, style, mBuffer->length());
-
-  mStyleBuffer->text(style);
-  delete[] style;
-  free(text);
-
-  mBuffer->add_modify_callback(style_update, this);
-  add_key_binding(FL_Enter, FL_TEXT_EDITOR_ANY_STATE,
-                  (Fl_Text_Editor::Key_Func)auto_indent);
-}
-
-// Destroy a CodeEditor widget...
-CodeEditor::~CodeEditor() {
-  Fl_Text_Buffer *buf = mStyleBuffer;
-  mStyleBuffer = 0;
-  delete buf;
-
-  buf = mBuffer;
-  buffer(0);
-  delete buf;
-}
-
-
-CodeViewer::CodeViewer(int X, int Y, int W, int H, const char *L)
-: CodeEditor(X, Y, W, H, L) 
-{
-  default_key_function(kf_ignore);  
-  remove_all_key_bindings(&key_bindings);
-  cursor_style(CARET_CURSOR);
-}
-
-
-void CodeViewer::draw()
-{
-  // Tricking Fl_Text_Display into using bearable colors for this specific task
-  Fl_Color c = Fl::get_color(FL_SELECTION_COLOR);
-  Fl::set_color(FL_SELECTION_COLOR, fl_color_average(FL_BACKGROUND_COLOR, FL_FOREGROUND_COLOR, 0.9f));
-  CodeEditor::draw();
-  Fl::set_color(FL_SELECTION_COLOR, c);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/CodeEditor.h
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-// Code editor widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef CodeEditor_h
-#  define CodeEditor_h
-
-//
-// Include necessary headers...
-//
-
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include <string.h>
-#  include <ctype.h>
-#  include <FL/Fl.H>
-#  include <FL/Fl_Text_Buffer.H>
-#  include <FL/Fl_Text_Editor.H>
-
-
-class CodeEditor : public Fl_Text_Editor {
-  static Fl_Text_Display::Style_Table_Entry styletable[];
-  static const char * const code_keywords[];
-  static const char * const code_types[];
-
-
-  // 'style_parse()' - Parse text and produce style data.
-  static void style_parse(const char *text, char *style, int length);
-
-  // 'style_unfinished_cb()' - Update unfinished styles.
-  static void style_unfinished_cb(int, void*);
-
-  // 'style_update()' - Update the style buffer...
-  static void style_update(int pos, int nInserted, int nDeleted,
-                           int /*nRestyled*/, const char * /*deletedText*/,
-                           void *cbArg);
-
-  static int auto_indent(int, CodeEditor* e);
-
-  public:
-
-  CodeEditor(int X, int Y, int W, int H, const char *L=0);
-  ~CodeEditor();
-  int top_line() { return get_absolute_top_line_number(); }
-
-  // attempt to make the fluid code editor widget honour textsize setting
-  void textsize(Fl_Fontsize s);
-  
-};
-
-class CodeViewer : public CodeEditor {
-
-  public:
-
-  CodeViewer(int X, int Y, int W, int H, const char *L=0);
-
-  protected:
-
-  int handle(int ev) { return Fl_Text_Display::handle(ev); }
-  void draw();
-};
-
-#endif // !CodeEditor_h
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/ExternalCodeEditor_UNIX.cxx
+++ /dev/null
@@ -1,465 +1,0 @@
-//
-// "$Id$".
-//
-//       External code editor management class for Unix
-//
-#ifndef WIN32           /* This entire file unix only */
-
-#include <errno.h>      /* errno */
-#include <string.h>     /* strerror() */
-#include <sys/types.h>  /* stat().. */
-#include <sys/stat.h>
-#include <sys/wait.h>   /* waitpid().. */
-#include <fcntl.h>      /* open().. */
-#include <signal.h>     /* kill().. */
-#include <unistd.h>
-#include <stdlib.h>     /* free().. */
-#include <stdio.h>      /* snprintf().. */
-
-#include <FL/Fl.H>      /* Fl_Timeout_Handler.. */
-#include <FL/fl_ask.H>  /* fl_alert() */
-
-#include "ExternalCodeEditor_UNIX.h"
-
-extern int G_debug;     // defined in fluid.cxx
-
-// Static local data
-static int L_editors_open = 0;                          // keep track of #editors open
-static Fl_Timeout_Handler L_update_timer_cb = 0;        // app's update timer callback
-
-// [Static/Local] See if file exists
-static int is_file(const char *filename) {
-  struct stat buf;
-  if ( stat(filename, &buf) < 0 ) return(0);
-  return(S_ISREG(buf.st_mode) ? 1 : 0);     // regular file?
-}
-
-// [Static/Local] See if dir exists
-static int is_dir(const char *dirname) {
-  struct stat buf;
-  if ( stat(dirname, &buf) < 0 ) return(0);
-  return(S_ISDIR(buf.st_mode) ? 1 : 0);     // a dir?
-}
-
-// CTOR
-ExternalCodeEditor::ExternalCodeEditor() {
-  pid_        = -1;
-  filename_   = 0;
-  file_mtime_ = 0;
-  file_size_  = 0;
-}
-
-// DTOR
-ExternalCodeEditor::~ExternalCodeEditor() {
-  if ( G_debug )
-    printf("ExternalCodeEditor() DTOR CALLED (this=%p, pid=%ld)\n",
-           (void*)this, (long)pid_);
-  close_editor();   // close editor, delete tmp file
-  set_filename(0);  // free()s filename
-}
-
-// [Protected] Set the filename. Handles memory allocation/free
-//     If set to NULL, frees memory.
-//
-void ExternalCodeEditor::set_filename(const char *val) {
-  if ( filename_ ) free((void*)filename_);
-  filename_ = val ? strdup(val) : 0;
-}
-
-// [Public] Is editor running?
-int ExternalCodeEditor::is_editing() {
-  return( (pid_ != -1) ? 1 : 0 );
-}
-
-// [Protected] Wait for editor to close
-void ExternalCodeEditor::close_editor() {
-  if ( G_debug ) printf("close_editor() called: pid=%ld\n", long(pid_));
-  // Wait until editor is closed + reaped
-  while ( is_editing() ) {
-    switch ( reap_editor() ) {
-      case -1:  // error
-        fl_alert("Error reaping external editor\n"
-                 "pid=%ld file=%s", long(pid_), filename());
-        break;
-      case 0:   // process still running
-	switch ( fl_choice("Please close external editor\npid=%ld file=%s",
-			   "Force Close",	// button 0
-			   "Closed",		// button 1
-			   0,			// button 2
-			   long(pid_), filename() ) ) {
-	  case 0: 	// Force Close
-	    kill_editor();
-	    continue;
-	  case 1: 	// Closed? try to reap
-	    continue;
-	}
-        break;
-      default:  // process reaped
-        return;
-    }
-  }
-}
-
-// [Protected] Kill the running editor (if any)
-//   Kills the editor, reaps the process, and removes the tmp file.
-//   The dtor calls this to ensure no editors remain running when fluid exits.
-//
-void ExternalCodeEditor::kill_editor() {
-  if ( G_debug ) printf("kill_editor() called: pid=%ld\n", (long)pid_);
-  if ( !is_editing() ) return;  // editor not running? return..
-  kill(pid_, SIGTERM);          // kill editor
-  int wcount = 0;
-  while ( pid_ != -1 ) {        // and wait for it to finish..
-    usleep(100000);             // 1/10th sec delay gives editor time to close itself
-    switch (reap_editor()) {
-      case -1:  // error
-        fl_alert("Can't seem to close editor of file: %s\n"
-                 "waitpid() returned: %s\n"
-                 "Please close editor and hit OK",
-                 filename(), strerror(errno));
-        continue;
-      case 0:   // process still running
-        if ( ++wcount > 3 ) {   // retry 3x with 1/10th delay before showing dialog
-          fl_alert("Can't seem to close editor of file: %s\n"
-                   "Please close editor and hit OK", filename());
-        }
-        continue;
-      default:  // process reaped
-        if ( G_debug )
-          printf("*** REAPED KILLED EXTERNAL EDITOR: PID %ld\n", (long)pid_);
-        pid_ = -1;
-        break;
-    }
-  }
-  return;
-}
-
-// [Public] Handle if file changed since last check, and update records if so.
-// Load new data into 'code', which caller must free().
-// If 'force' set, forces reload even if file size/time didn't change.
-//
-// Returns:
-//     0 -- file unchanged or not editing
-//     1 -- file changed, internal records updated, 'code' has new content
-//    -1 -- error getting file info (strerror() has reason)
-//
-int ExternalCodeEditor::handle_changes(const char **code, int force) {
-  code[0] = 0;
-  if ( !is_editing() ) return 0;
-  // Get current time/size info, see if file changed
-  int changed = 0;
-  {
-    struct stat sbuf;
-    if ( stat(filename(), &sbuf) < 0 ) return(-1);  // TODO: show fl_alert(), do this in win32 too, adjust func call docs above
-    time_t now_mtime = sbuf.st_mtime;
-    size_t now_size  = sbuf.st_size;
-    // OK, now see if file changed; update records if so
-    if ( now_mtime != file_mtime_ ) { changed = 1; file_mtime_ = now_mtime; }
-    if ( now_size  != file_size_  ) { changed = 1; file_size_  = now_size; }
-  }
-  // No changes? done
-  if ( !changed && !force ) return 0;
-  // Changes? Load file, and fallthru to close()
-  int fd = open(filename(), O_RDONLY);
-  if ( fd < 0 ) {
-    fl_alert("ERROR: can't open '%s': %s", filename(), strerror(errno));
-    return -1;
-  }
-  int ret = 0;
-  char *buf = (char*)malloc(file_size_ + 1);
-  ssize_t count = read(fd, buf, file_size_);
-  if ( count == -1 ) {
-    fl_alert("ERROR: read() %s: %s", filename(), strerror(errno));
-    free((void*)buf);
-    ret = -1;
-  } else if ( (long)count != (long)file_size_ ) {
-    fl_alert("ERROR: read() failed for %s:\n"
-             "expected %ld bytes, only got %ld",
-             filename(), long(file_size_), long(count));
-    ret = -1;
-  } else {
-    // Success -- file loaded OK
-    buf[count] = '\0';
-    code[0] = buf;        // return pointer to allocated buffer
-    ret = 1;
-  }
-  close(fd);
-  return ret;
-}
-
-// [Public] Remove the tmp file (if it exists), and zero out filename/mtime/size
-// Returns:
-//    -1 -- on error (dialog is posted as to why)
-//     0 -- no file to remove
-//     1 -- file was removed
-//
-int ExternalCodeEditor::remove_tmpfile() {
-  const char *tmpfile = filename();
-  if ( !tmpfile ) return 0;
-  // Filename set? remove (if exists) and zero filename/mtime/size
-  if ( is_file(tmpfile) ) {
-    if ( G_debug ) printf("Removing tmpfile '%s'\n", tmpfile);
-    if ( remove(tmpfile) < 0 ) {
-      fl_alert("WARNING: Can't remove() '%s': %s", tmpfile, strerror(errno));
-      return -1;
-    }
-  }
-  set_filename(0);
-  file_mtime_ = 0;
-  file_size_  = 0;
-  return 1;
-}
-
-// [Static/Public] Return tmpdir name for this fluid instance.
-//     Returns pointer to static memory.
-//
-const char* ExternalCodeEditor::tmpdir_name() {
-  static char dirname[100];
-  snprintf(dirname, sizeof(dirname), "/tmp/.fluid-%ld", (long)getpid());
-  return dirname;
-}
-
-// [Static/Public] Clear the external editor's tempdir
-//    Static so that the main program can call it on exit to clean up.
-//
-void ExternalCodeEditor::tmpdir_clear() {
-  const char *tmpdir = tmpdir_name();
-  if ( is_dir(tmpdir) ) {
-    if ( G_debug ) printf("Removing tmpdir '%s'\n", tmpdir);
-    if ( rmdir(tmpdir) < 0 ) {
-      fl_alert("WARNING: Can't rmdir() '%s': %s", tmpdir, strerror(errno));
-    }
-  }
-}
-
-// [Protected] Creates temp dir (if doesn't exist) and returns the dirname
-// as a static string. Returns NULL on error, dialog shows reason.
-//
-const char* ExternalCodeEditor::create_tmpdir() {
-  const char *dirname = tmpdir_name();
-  if ( ! is_dir(dirname) ) {
-    if ( mkdir(dirname, 0777) < 0 ) {
-      fl_alert("can't create directory '%s': %s",
-        dirname, strerror(errno));
-      return NULL;
-    }
-  }
-  return dirname;
-}
-
-// [Protected] Returns temp filename in static buffer.
-//    Returns NULL if can't, posts dialog explaining why.
-//
-const char* ExternalCodeEditor::tmp_filename() {
-  static char path[512];
-  const char *tmpdir = create_tmpdir();
-  if ( !tmpdir ) return 0;
-  extern const char *code_file_name;   // fluid's global
-  const char *ext  = code_file_name;   // e.g. ".cxx"
-  snprintf(path, sizeof(path), "%s/%p%s", tmpdir, (void*)this, ext);
-  path[sizeof(path)-1] = 0;
-  return path;
-}
-
-// [Static/Local] Save string 'code' to 'filename', returning file's mtime/size
-// 'code' can be NULL -- writes an empty file if so.
-// Returns:
-//    0 on success
-//   -1 on error (posts dialog with reason)
-//
-static int save_file(const char *filename, const char *code) {
-  int fd = open(filename, O_WRONLY|O_CREAT, 0666);
-  if ( fd == -1 ) {
-    fl_alert("ERROR: open() '%s': %s", filename, strerror(errno));
-    return -1;
-  }
-  ssize_t clen = strlen(code);
-  ssize_t count = write(fd, code, clen);
-  int ret = 0;
-  if ( count == -1 ) {
-    fl_alert("ERROR: write() '%s': %s", filename, strerror(errno));
-    ret = -1; // fallthru to close()
-  } else if ( count != clen ) {
-    fl_alert("ERROR: write() '%s': wrote only %lu bytes, expected %lu",
-             filename, (unsigned long)count, (unsigned long)clen);
-    ret = -1; // fallthru to close()
-  }
-  close(fd);
-  return(ret);
-}
-
-// [Static/Local] Convert string 's' to array of argv[], useful for execve()
-//     o 's' will be modified (words will be NULL separated)
-//     o argv[] will end up pointing to the words of 's'
-//     o Caller must free argv with: free(argv);
-//
-static int make_args(char *s,         // string containing words (gets trashed!)
-                     int *aargc,      // pointer to argc
-                     char ***aargv) { // pointer to argv
-  char *ss, **argv;
-  if ((argv=(char**)malloc(sizeof(char*) * (strlen(s)/2)))==NULL) {
-    return -1;
-  }
-  int t;
-  for(t=0; (t==0)?(ss=strtok(s," \t")):(ss=strtok(0," \t")); t++) {
-    argv[t] = ss;
-  }
-  argv[t] = 0;
-  aargv[0] = argv;
-  aargc[0] = t;
-  return(t);
-}
-
-// [Protected] Start editor in background (fork/exec)
-// Returns:
-//    >  0 on success, leaves editor child process running as 'pid_'
-//    > -1 on error, posts dialog with reason (child exits)
-//
-int ExternalCodeEditor::start_editor(const char *editor_cmd,
-                                     const char *filename) {
-  if ( G_debug ) printf("start_editor() cmd='%s', filename='%s'\n",
-                        editor_cmd, filename);
-  char cmd[1024];
-  snprintf(cmd, sizeof(cmd), "%s %s", editor_cmd, filename);
-  // Fork editor to background..
-  switch ( pid_ = fork() ) {
-    case -1:    // error
-      fl_alert("couldn't fork(): %s", strerror(errno));
-      return -1;
-    case 0: {   // child
-      // NOTE: OSX wants minimal code between fork/exec, see Apple TN2083
-      int nargs;
-      char **args = 0;
-      make_args(cmd, &nargs, &args);
-      execvp(args[0], args);  // run command - doesn't return if succeeds
-      fl_alert("couldn't exec() '%s': %s", cmd, strerror(errno));
-      exit(1);
-    }
-    default:    // parent
-      if ( L_editors_open++ == 0 )  // first editor? start timers
-        { start_update_timer(); }
-      if ( G_debug )
-        printf("--- EDITOR STARTED: pid_=%ld #open=%d\n", (long)pid_, L_editors_open);
-      break;
-  }
-  return 0;
-}
-
-// [Public] Try to reap external editor process
-// Returns:
-//   -2 -- editor not open
-//   -1 -- waitpid() failed (errno has reason)
-//    0 -- process still running
-//   >0 -- process finished + reaped (value is pid)
-//         Handles removing tmpfile/zeroing file_mtime/file_size
-//
-pid_t ExternalCodeEditor::reap_editor() {
-  if ( !is_editing() ) return -2;
-  int status = 0;
-  pid_t wpid;
-  switch (wpid = waitpid(pid_, &status, WNOHANG)) {
-    case -1:    // waitpid() failed
-      return -1;
-    case 0:     // process didn't reap, still running
-      return 0;
-    default:    // process reaped
-      remove_tmpfile(); // also zeroes mtime/size
-      pid_ = -1;
-      if ( --L_editors_open <= 0 )
-        { stop_update_timer(); }
-      break;
-  }
-  if ( G_debug ) 
-    printf("*** EDITOR REAPED: pid=%ld #open=%d\n", long(wpid), L_editors_open);
-  return wpid;
-}
-
-// [Public] Open external editor using 'editor_cmd' to edit 'code'
-// 'code' contains multiline code to be edited as a temp file.
-//
-// Returns:
-//   0 if succeeds
-//  -1 if can't open editor (already open, etc),
-//     errors were shown to user in a dialog
-//
-int ExternalCodeEditor::open_editor(const char *editor_cmd,
-                                    const char *code) {
-  // Make sure a temp filename exists
-  if ( !filename() ) {
-    set_filename(tmp_filename());
-    if ( !filename() ) return -1;
-  }
-  // See if tmpfile already exists or editor already open
-  if ( is_file(filename()) ) {
-    if ( is_editing() ) {
-      // See if editor recently closed but not reaped; try to reap
-      pid_t wpid = reap_editor();
-      switch (wpid) {
-        case -1:        // waitpid() failed
-          fl_alert("ERROR: waitpid() failed: %s\nfile='%s', pid=%ld",
-            strerror(errno), filename(), (long)pid_);
-          return -1;
-        case 0:         // process still running
-          fl_alert("Editor Already Open\n  file='%s'\n  pid=%ld",
-            filename(), (long)pid_);
-          return 0;
-        default:        // process reaped, wpid is pid reaped
-          if ( G_debug )
-            printf("*** REAPED EXTERNAL EDITOR: PID %ld\n", (long)wpid);
-          break;        // fall thru to open new editor instance
-      }
-      // Reinstate tmp filename (reap_editor() clears it)
-      set_filename(tmp_filename());
-    }
-  }
-  if ( save_file(filename(), code) < 0 ) {
-    return -1;  // errors were shown in dialog
-  }
-  // Update mtime/size from closed file
-  struct stat sbuf;
-  if ( stat(filename(), &sbuf) < 0 ) {
-    fl_alert("ERROR: can't stat('%s'): %s", filename(), strerror(errno));
-    return -1;
-  }
-  file_mtime_ = sbuf.st_mtime;
-  file_size_  = sbuf.st_size;
-  if ( start_editor(editor_cmd, filename()) < 0 ) { // open file in external editor
-    if ( G_debug ) printf("Editor failed to start\n");
-    return -1;  // errors were shown in dialog
-  }
-  return 0;
-}
-
-// [Public/Static] Start update timer
-void ExternalCodeEditor::start_update_timer() {
-  if ( !L_update_timer_cb ) return;
-  if ( G_debug ) printf("--- TIMER: STARTING UPDATES\n");
-  Fl::add_timeout(2.0, L_update_timer_cb);
-}
-
-// [Public/Static] Stop update timer
-void ExternalCodeEditor::stop_update_timer() {
-  if ( !L_update_timer_cb ) return;
-  if ( G_debug ) printf("--- TIMER: STOPPING UPDATES\n");
-  Fl::remove_timeout(L_update_timer_cb);
-}
-
-// [Public/Static] Set app's external editor update timer callback
-//   This is the app's callback callback we start while editors are open,
-//   and stop when all editors are closed.
-//
-void ExternalCodeEditor::set_update_timer_callback(Fl_Timeout_Handler cb) {
-  L_update_timer_cb = cb;
-}
-
-// [Static/Public] See if any external editors are open.
-//   App's timer cb can see if any editors need checking..
-//
-int ExternalCodeEditor::editors_open() {
-  return L_editors_open;
-}
-
-#endif /* !WIN32 */
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/ExternalCodeEditor_UNIX.h
+++ /dev/null
@@ -1,52 +1,0 @@
-//
-// "$Id$".
-//
-//       External code editor management class for Unix
-//
-//       Handles starting and keeping track of an external text editor,
-//       including process start, temp file creation/removal, bookkeeping, killing..
-//
-#ifndef _EXTCODEEDITOR_H
-#define _EXTCODEEDITOR_H
-
-#include <errno.h>      /* errno */
-#include <string.h>     /* strerror() */
-
-#include <sys/types.h>  /* stat().. */
-#include <sys/stat.h>
-#include <unistd.h>
-
-class ExternalCodeEditor {
-  int pid_;
-  time_t file_mtime_;                   // last modify time of the file (used to determine if file changed)
-  size_t file_size_;                    // last file size (used to determine if changed)
-  const char *filename_;
-protected:
-  void kill_editor();
-  const char *create_tmpdir();
-  const char *tmp_filename();
-  int start_editor(const char *cmd, const char *filename);
-  void set_filename(const char *val);
-public:
-  ExternalCodeEditor();
-  ~ExternalCodeEditor();
-  int is_editing();
-  pid_t reap_editor();
-  void close_editor();
-  const char *filename() { return filename_; }
-  int open_editor(const char *editor_cmd, const char *code);
-  int handle_changes(const char **code, int force=0);
-  int remove_tmpfile();
-  // Public static methods
-  static void start_update_timer();
-  static void stop_update_timer();
-  static const char* tmpdir_name();
-  static void tmpdir_clear();
-  static int editors_open();
-  static void set_update_timer_callback(Fl_Timeout_Handler);
-};
-
-#endif /*_EXTCODEEDITOR_H */
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/ExternalCodeEditor_WIN32.cxx
+++ /dev/null
@@ -1,577 +1,0 @@
-//
-// "$Id$".
-//
-//       External code editor management class for Windows
-//
-
-#ifdef WIN32	        /* This entire file windows only */
-
-#include <stdio.h>      // snprintf()
-
-#include <FL/Fl.H>      // Fl_Timeout_Handler..
-#include <FL/fl_ask.H>  // fl_alert()
-
-#include "ExternalCodeEditor_WIN32.h"
-
-extern int G_debug;     // defined in fluid.cxx
-
-// Static local data
-static int L_editors_open = 0;                          // keep track of #editors open
-static Fl_Timeout_Handler L_update_timer_cb = 0;        // app's update timer callback
-
-// [Static/Local] Get error message string for last failed WIN32 function.
-// Returns a string pointing to static memory.
-//
-//     TODO: Is more code needed here to convert returned string to utf8? -erco
-//
-static const char *get_ms_errmsg() {
-  static char emsg[1024];
-  DWORD lastErr = GetLastError();
-  DWORD flags = FORMAT_MESSAGE_ALLOCATE_BUFFER |
-                FORMAT_MESSAGE_IGNORE_INSERTS  |
-                FORMAT_MESSAGE_FROM_SYSTEM;
-  LPSTR mbuf = 0;
-  DWORD size = FormatMessageA(flags, 0, lastErr, MAKELANGID(LANG_NEUTRAL,
-                              SUBLANG_DEFAULT), (LPSTR)&mbuf, 0, NULL);
-  if ( size == 0 ) {
-    _snprintf(emsg, sizeof(emsg), "Error Code %ld", long(lastErr));
-  } else {
-    // Copy mbuf -> emsg (with '\r's removed -- they screw up fl_alert())
-    for ( char *src=mbuf, *dst=emsg; 1; src++ ) {
-      if ( *src == '\0' ) { *dst = '\0'; break; }
-      if ( *src != '\r' ) { *dst++ = *src; }
-    }
-    LocalFree(mbuf);    // Free the buffer allocated by the system
-  }
-  return emsg;
-}
-
-// [Static/Local] See if file exists
-static int is_file(const char *filename) {
-  DWORD att = GetFileAttributesA(filename);
-  if (att == INVALID_FILE_ATTRIBUTES) return 0;
-  if ( (att & FILE_ATTRIBUTE_DIRECTORY) == 0 ) return 1;        // not a dir == file
-  return 0;
-}
-
-// [Static/Local] See if dir exists
-static int is_dir(const char *dirname) {
-  DWORD att = GetFileAttributesA(dirname);
-  if (att == INVALID_FILE_ATTRIBUTES) return 0;
-  if (att & FILE_ATTRIBUTE_DIRECTORY) return 1;
-  return 0;
-}
-
-// CTOR
-ExternalCodeEditor::ExternalCodeEditor() {
-  memset(&pinfo_, 0, sizeof(pinfo_));
-  memset(&file_mtime_, 0, sizeof(file_mtime_));
-  memset(&file_size_, 0, sizeof(file_size_));
-  filename_ = 0;
-}
-
-// DTOR
-ExternalCodeEditor::~ExternalCodeEditor() {
-  close_editor();   // close editor, delete tmp file
-  set_filename(0);  // free()s filename
-}
-
-// [Protected] Set the filename. Handles memory allocation/free
-//     If set to NULL, frees memory.
-//
-void ExternalCodeEditor::set_filename(const char *val) {
-  if ( filename_ ) free((void*)filename_);
-  filename_ = val ? strdup(val) : 0;
-}
-
-// [Public] Is editor running?
-int ExternalCodeEditor::is_editing() {
-  return( (pinfo_.dwProcessId != 0) ? 1 : 0 );
-}
-
-// [Static/Local] Terminate_app()'s callback to send WM_CLOSE to a single window. 
-static BOOL CALLBACK terminate_app_enum(HWND hwnd, LPARAM lParam) {
-  DWORD dwID;
-  GetWindowThreadProcessId(hwnd, &dwID);
-  if (dwID == (DWORD)lParam) {
-    PostMessage(hwnd, WM_CLOSE, 0, 0);
-    if ( G_debug )
-      printf("terminate_app_enum() sends WIN_CLOSE to hwnd=%p\n", (void*)hwnd);
-  }
-  return TRUE;
-}
-
-// [Static/Local] Handle sending WIN_CLOSE to /all/ windows matching specified pid.
-// Wait up to msecTimeout for process to close, and if it doesn't, use TerminateProcess().
-//
-static int terminate_app(DWORD pid, DWORD msecTimeout) {
-  HANDLE hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pid);
-  if ( !hProc ) return -1;
-  // terminate_app_enum() posts WM_CLOSE to all windows matching pid
-  EnumWindows((WNDENUMPROC)terminate_app_enum, (LPARAM) pid);
-  // Wait on handle. If it closes, great. If it times out, use TerminateProcess()
-  int ret = 0;
-  if ( WaitForSingleObject(hProc, msecTimeout) != WAIT_OBJECT_0 ) {
-    if ( G_debug ) {
-      printf("WARNING: sent WIN_CLOSE, but timeout after %ld msecs.."
-             "trying TerminateProcess\n", msecTimeout);
-    }
-    if ( TerminateProcess(hProc, 0) == 0 ) {
-      if ( G_debug ) {
-        printf("ERROR: TerminateProcess() for pid=%ld failed: %s\n",
-               long(pid), get_ms_errmsg());
-      }
-      ret = -1;
-    } else {
-      ret = 0;      // TerminateProcess succeeded
-    }
-  } else {
-    ret = 0;        // WaitForSingleObject() confirmed WIN_CLOSE succeeded
-  }
-  CloseHandle(hProc);
-  return ret;
-}
-
-// [Protected] Wait for editor to close
-void ExternalCodeEditor::close_editor() {
-  if ( G_debug ) printf("close_editor() called: pid=%ld\n", long(pinfo_.dwProcessId));
-  // Wait until editor is closed + reaped
-  while ( is_editing() ) {
-    switch ( reap_editor() ) {
-      case -1:  // error
-        fl_alert("Error reaping external editor\n"
-                 "pid=%ld file=%s", long(pinfo_.dwProcessId), filename());
-        break;
-      case 0:   // process still running
-	switch ( fl_choice("Please close external editor\npid=%ld file=%s",
-			   "Force Close",	// button 0
-			   "Closed",		// button 1
-			   0,			// button 2
-			   long(pinfo_.dwProcessId), filename() ) ) {
-	  case 0: 	// Force Close
-	    kill_editor();
-	    continue;
-	  case 1: 	// Closed? try to reap
-	    continue;
-	}
-        break;
-      default:  // process reaped
-        return;
-    }
-  }
-}
-
-// [Protected] Kill the running editor (if any) and cleanup
-//   Kills the editor, reaps the process, and removes the tmp file.
-//   The dtor calls this to ensure no editors remain running when fluid exits.
-//
-void ExternalCodeEditor::kill_editor() {
-  if ( G_debug )
-    printf("kill_editor() called: pid=%ld\n", (long)pinfo_.dwProcessId);
-  if ( !is_editing() ) return;
-  switch ( terminate_app(pinfo_.dwProcessId, 500) ) {  // kill editor, wait up to 1/2 sec to die
-    case -1: { // error
-      fl_alert("Can't seem to close editor of file: %s\n"
-               "Please close editor and hit OK", filename());
-      break;
-    }
-    case 0: {  // success -- process reaped
-      DWORD pid = pinfo_.dwProcessId;     // save pid
-      reap_cleanup();
-      if ( G_debug )
-        printf("*** kill_editor() REAP pid=%ld #open=%ld\n",
-               long(pid), long(L_editors_open));
-      break;
-    }
-  }
-  return;
-}
-
-// [Public] Handle if file changed since last check, and update records if so.
-// Load new data into 'code', which caller must free().
-// If 'force' set, forces reload even if file size/time didn't change.
-//
-// Returns:
-//     0 -- file unchanged or not editing
-//     1 -- file changed, internal records updated, 'code' has new content
-//    -1 -- error getting file info (get_ms_errmsg() has reason)
-//
-// OPTIONAL TODO:
-//   Ignore changes made within the last 2 seconds,
-//   to give editor time to fully write out the file.
-//
-int ExternalCodeEditor::handle_changes(const char **code, int force) {
-  code[0] = 0;
-  if ( !is_editing() ) return 0;
-  // Sigh, have to open file to get file time/size :/
-  HANDLE fh = CreateFile(filename(),      // file to read
-                         GENERIC_READ,    // reading only
-                         FILE_SHARE_READ, // sharing -- allow read share; just getting file size
-                         NULL,            // security
-                         OPEN_EXISTING,   // create flags -- must exist
-                         0,               // misc flags
-                         NULL);           // templates
-  if ( fh == INVALID_HANDLE_VALUE ) return -1;
-  LARGE_INTEGER fsize;
-  // Get file size
-  if ( GetFileSizeEx(fh, &fsize) == 0 ) {
-    DWORD err = GetLastError();
-    CloseHandle(fh); 
-    SetLastError(err);  // return error from GetFileSizeEx(), not CloseHandle()
-    return -1;
-  }
-  // Get file time
-  FILETIME ftCreate, ftAccess, ftWrite;
-  if ( GetFileTime(fh, &ftCreate, &ftAccess, &ftWrite) == 0 ) {
-    DWORD err = GetLastError();
-    CloseHandle(fh); 
-    SetLastError(err);  // return error from GetFileTime(), not CloseHandle()
-    return -1;
-  }
-  // OK, now see if file changed; update records if so
-  int changed = 0;
-  if ( fsize.QuadPart != file_size_.QuadPart )
-    { changed = 1; file_size_ = fsize; }
-  if ( CompareFileTime(&ftWrite, &file_mtime_) != 0 )
-    { changed = 1; file_mtime_ = ftWrite; }
-  // Changes? Load file. Be sure to fallthru to CloseHandle()
-  int ret = 0;
-  if ( changed || force ) {
-    char *buf = (char*)malloc(fsize.QuadPart + 1);
-    DWORD count;
-    if ( ReadFile(fh, buf, fsize.QuadPart, &count, 0) == 0 ) {
-      fl_alert("ERROR: ReadFile() failed for %s: %s",
-               filename(), get_ms_errmsg());
-      free((void*)buf); buf = 0;
-      ret = -1;      // fallthru to CloseHandle()
-    } else if ( count != fsize.QuadPart ) {
-      fl_alert("ERROR: ReadFile() failed for %s:\n"
-               "expected %ld bytes, got %ld",
-               filename(), long(fsize.QuadPart), long(count));
-      free((void*)buf); buf = 0;
-      ret = -1;      // fallthru to CloseHandle()
-    } else {
-      // Successfully read changed file
-      buf[count] = '\0';
-      code[0] = buf; // return pointer to allocated buffer
-      ret = 1;       // fallthru to CloseHandle()
-    }
-  }
-  CloseHandle(fh);
-  return ret;
-}
-
-// [Public] Remove the tmp file (if it exists), and zero out filename/mtime/size
-// Returns:
-//    -1 -- on error (dialog is posted as to why)
-//     0 -- no file to remove
-//     1 -- file was removed
-//
-int ExternalCodeEditor::remove_tmpfile() {
-  const char *tmpfile = filename();
-  if ( G_debug ) printf("remove_tmpfile() '%s'\n", tmpfile ? tmpfile : "(empty)");
-  if ( !tmpfile ) return 0;
-  // Filename set? remove (if exists) and zero filename/mtime/size
-  if ( is_file(tmpfile) ) {
-    if ( G_debug ) printf("Removing tmpfile '%s'\n", tmpfile);
-    if ( DeleteFile(tmpfile) == 0 ) {
-      fl_alert("WARNING: Can't DeleteFile() '%s': %s", tmpfile, get_ms_errmsg());
-      return -1;
-    }
-  } else {
-    if ( G_debug ) printf("remove_tmpfile(): is_file(%s) failed\n", tmpfile);
-  }
-  set_filename(0);
-  memset(&file_mtime_, 0, sizeof(file_mtime_));
-  memset(&file_size_, 0, sizeof(file_size_));
-  return 1;
-}
-
-// [Static/Public] Return tmpdir name for this fluid instance.
-//     Returns pointer to static memory.
-//
-const char* ExternalCodeEditor::tmpdir_name() {
-  char tempdir[100];
-  if (GetTempPath(sizeof(tempdir), tempdir) == 0 ) {
-    strcpy(tempdir, "c:\\windows\\temp");      // fallback
-  }
-  static char dirname[100];
-  _snprintf(dirname, sizeof(dirname), "%s.fluid-%ld",
-    tempdir, (long)GetCurrentProcessId());
-  if ( G_debug ) printf("tmpdir_name(): '%s'\n", dirname);
-  return dirname;
-}
-
-// [Static/Public] Clear the external editor's tempdir
-//    Static so that the main program can call it on exit to clean up.
-//
-void ExternalCodeEditor::tmpdir_clear() {
-  const char *tmpdir = tmpdir_name();
-  if ( is_dir(tmpdir) ) {
-    if ( G_debug ) printf("Removing tmpdir '%s'\n", tmpdir);
-    if ( RemoveDirectory(tmpdir) == 0 ) {
-      fl_alert("WARNING: Can't RemoveDirectory() '%s': %s",
-               tmpdir, get_ms_errmsg());
-    }
-  }
-}
-
-// [Protected] Creates temp dir (if doesn't exist) and returns the dirname
-// as a static string. Returns NULL on error, dialog shows reason.
-//
-const char* ExternalCodeEditor::create_tmpdir() {
-  const char *dirname = tmpdir_name();
-  if ( ! is_dir(dirname) ) {
-    if ( CreateDirectory(dirname,0) == 0 ) {
-      fl_alert("can't create directory '%s': %s",
-        dirname, get_ms_errmsg());
-      return NULL;
-    }
-  }
-  return dirname;
-}
-
-// [Protected] Returns temp filename in static buffer.
-//    Returns NULL if can't, posts dialog explaining why.
-//
-const char* ExternalCodeEditor::tmp_filename() {
-  static char path[512];
-  const char *tmpdir = create_tmpdir();
-  if ( !tmpdir ) return 0;
-  extern const char *code_file_name;    // fluid's global
-  const char *ext  = code_file_name;    // e.g. ".cxx"
-  _snprintf(path, sizeof(path), "%s\\%p%s", tmpdir, (void*)this, ext);
-  path[sizeof(path)-1] = 0;
-  return path;
-}
-
-// [Static/Local] Save string 'code' to 'filename', returning file's mtime/size
-// 'code' can be NULL -- writes an empty file if so.
-// Returns:
-//    0 on success
-//   -1 on error (posts dialog with reason)
-//
-static int save_file(const char *filename,
-                     const char *code,
-                     FILETIME &file_mtime,        // return these since in win32 it's..
-                     LARGE_INTEGER &file_size) {  // ..efficient to get while file open
-  if ( code == 0 ) code = "";   // NULL? write an empty file
-  memset(&file_mtime, 0, sizeof(file_mtime));
-  memset(&file_size, 0, sizeof(file_size));
-  HANDLE fh = CreateFile(filename,                // filename
-                         GENERIC_WRITE,           // write only
-                         0,                       // sharing -- no share during write
-                         NULL,                    // security
-                         CREATE_ALWAYS,           // create flags -- recreate
-                         FILE_ATTRIBUTE_NORMAL,   // misc flags
-                         NULL);                   // templates
-  if ( fh == INVALID_HANDLE_VALUE ) {
-    fl_alert("ERROR: couldn't create file '%s': %s",
-             filename, get_ms_errmsg());
-    return(-1);
-  }
-  // Write the file, being careful to CloseHandle() even on errs
-  DWORD clen = strlen(code);
-  DWORD count = 0;
-  int ret = 0;
-  if ( WriteFile(fh, code, clen, &count, NULL) == 0 ) {
-    fl_alert("ERROR: WriteFile() '%s': %s", filename, get_ms_errmsg());
-    ret = -1; // fallthru to CloseHandle()
-  } else if ( count != clen ) {
-    fl_alert("ERROR: WriteFile() '%s': wrote only %lu bytes, expected %lu",
-             filename, (unsigned long)count, (unsigned long)clen);
-    ret = -1; // fallthru to CloseHandle()
-  }
-  // Get mtime/size before closing
-  {
-    FILETIME ftCreate, ftAccess, ftWrite;
-    if ( GetFileSizeEx(fh, &file_size) == 0 ) {
-      fl_alert("ERROR: save_file(%s): GetFileSizeEx() failed: %s\n",
-               filename, get_ms_errmsg());
-    }
-    if ( GetFileTime(fh, &ftCreate, &ftAccess, &ftWrite) == 0 ) {
-      fl_alert("ERROR: save_file(%s): GetFileTime() failed: %s\n",
-               filename, get_ms_errmsg());
-    }
-    file_mtime = ftWrite;
-  }
-  // Close, done
-  CloseHandle(fh);
-  return(ret);
-}
-
-// [Protected] Start editor
-// Returns:
-//    >  0 on success, leaves editor child process running as 'pinfo_'
-//    > -1 on error, posts dialog with reason (child exits)
-//
-int ExternalCodeEditor::start_editor(const char *editor_cmd,
-                                     const char *filename) {
-  if ( G_debug ) printf("start_editor() cmd='%s', filename='%s'\n",
-                        editor_cmd, filename);
-  // Startup info
-  STARTUPINFO sinfo;
-  memset(&sinfo, 0, sizeof(sinfo));
-  sinfo.cb          = sizeof(sinfo);
-  sinfo.dwFlags     = 0;
-  sinfo.wShowWindow = 0;
-  // Process info
-  memset(&pinfo_, 0, sizeof(pinfo_));
-  // Command
-  char cmd[1024];
-  _snprintf(cmd, sizeof(cmd), "%s %s", editor_cmd, filename);
-  // Start editor process
-  if (CreateProcess(NULL,               // app name
-                    (char*)cmd,         // command to exec
-                    NULL,               // secure attribs
-                    NULL,               // thread secure attribs
-                    FALSE,              // handle inheritance
-                    0,                  // creation flags
-                    NULL,               // environ block
-                    NULL,               // current dir
-                    &sinfo,             // startup info
-                    &pinfo_) == 0 ) {   // process info
-    fl_alert("CreateProcess() failed to start '%s': %s",
-             cmd, get_ms_errmsg());
-    return(-1);
-  }
-  if ( L_editors_open++ == 0 )  // first editor? start timers
-    { start_update_timer(); }
-  if ( G_debug )
-    printf("--- EDITOR STARTED: pid_=%ld #open=%d\n",
-           (long)pinfo_.dwProcessId, L_editors_open);
-  return 0;
-}
-
-// [Protected] Cleanup after editor reaped:
-//    > Remove tmpfile, zeroes mtime/size/filename
-//    > Close process handles
-//    > Zero out process info
-//    > Decrease editor count
-//
-void ExternalCodeEditor::reap_cleanup() {
-  remove_tmpfile();                    // also zeroes mtime/size/filename
-  CloseHandle(pinfo_.hProcess);        // close process handle
-  CloseHandle(pinfo_.hThread);         // close thread handle
-  memset(&pinfo_, 0, sizeof(pinfo_));  // clear pinfo_
-  if ( --L_editors_open <= 0 )
-    { stop_update_timer(); }
-}
-
-// [Public] Try to reap external editor process
-// Returns:
-//   -2 -- editor not open
-//   -1 -- WaitForSingleObject() failed (get_ms_errmsg() has reason)
-//    0 -- process still running
-//   >0 -- process finished + reaped (value is pid)
-//         Handles removing tmpfile/zeroing file_mtime/file_size/filename
-//
-DWORD ExternalCodeEditor::reap_editor() {
-  if ( pinfo_.dwProcessId == 0 ) return -2;
-  int err;
-  DWORD msecs_wait = 50;   // .05 sec
-  switch ( err = WaitForSingleObject(pinfo_.hProcess, msecs_wait) ) {
-    case WAIT_TIMEOUT: {   // process didn't reap, still running
-      return 0;
-    }
-    case WAIT_OBJECT_0: {  // reaped
-      DWORD pid = pinfo_.dwProcessId;      // save pid
-      reap_cleanup();
-      if ( G_debug ) printf("*** EDITOR REAPED: pid=%ld #open=%d\n",
-                            long(pid), L_editors_open);
-      return pid;
-    }
-    case WAIT_FAILED: {    // failed
-      return -1;
-    }
-  }
-  return -1;               // any other return unexpected
-}
-
-// [Public] Open external editor using 'editor_cmd' to edit 'code'
-// 'code' contains multiline code to be edited as a temp file.
-//
-// Returns:
-//   0 if succeeds
-//  -1 if can't open editor (already open, etc),
-//     errors were shown to user in a dialog
-//
-int ExternalCodeEditor::open_editor(const char *editor_cmd,
-                                    const char *code) {
-  // Make sure a temp filename exists
-  if ( !filename() ) {
-    set_filename(tmp_filename());
-    if ( !filename() ) return -1;
-  }
-  // See if tmpfile already exists or editor already open
-  if ( is_file(filename()) ) {
-    if ( is_editing() ) {
-      // See if editor recently closed but not reaped; try to reap
-      DWORD wpid = reap_editor();
-      switch (wpid) {
-        case -1:        // wait failed
-          fl_alert("ERROR: WaitForSingleObject() failed: %s\nfile='%s', pid=%ld",
-            get_ms_errmsg(), filename(), long(pinfo_.dwProcessId));
-          return -1;
-        case 0:         // process still running
-          fl_alert("Editor Already Open\n  file='%s'\n  pid=%ld",
-            filename(), long(pinfo_.dwProcessId));
-          return 0;
-        default:        // process reaped, wpid is pid reaped
-          if ( G_debug )
-            printf("*** REAPED EXTERNAL EDITOR: PID %ld\n", long(wpid));
-          break;        // fall thru to open new editor instance
-      }
-      // Reinstate tmp filename (reap_editor() clears it)
-      set_filename(tmp_filename());
-    }
-  }
-  // Save code to tmpfile, getting mtime/size
-  if ( save_file(filename(), code, file_mtime_, file_size_) < 0 ) {
-    return -1;  // errors were shown in dialog
-  }
-  if ( start_editor(editor_cmd, filename()) < 0 ) { // open file in external editor
-    if ( G_debug ) printf("Editor failed to start\n");
-    return -1;  // errors were shown in dialog
-  }
-  // New editor opened -- start update timer (if not already)
-  if ( L_update_timer_cb && !Fl::has_timeout(L_update_timer_cb) ) {
-    if ( G_debug ) printf("--- Editor opened: STARTING UPDATE TIMER\n");
-    Fl::add_timeout(2.0, L_update_timer_cb);
-  }
-  return 0;
-}
-
-// [Public/Static] Start update timer
-void ExternalCodeEditor::start_update_timer() {
-  if ( !L_update_timer_cb ) return;
-  if ( G_debug ) printf("--- TIMER: STARTING UPDATES\n");
-  Fl::add_timeout(2.0, L_update_timer_cb);
-}
-
-// [Public/Static] Stop update timer
-void ExternalCodeEditor::stop_update_timer() {
-  if ( !L_update_timer_cb ) return;
-  if ( G_debug ) printf("--- TIMER: STOPPING UPDATES\n");
-  Fl::remove_timeout(L_update_timer_cb);
-}
-
-// [Public/Static] Set app's external editor update timer callback
-//   This is the app's callback callback we start while editors are open,
-//   and stop when all editors are closed.
-//
-void ExternalCodeEditor::set_update_timer_callback(Fl_Timeout_Handler cb) {
-  L_update_timer_cb = cb;
-}
-
-// [Static/Public] See if any external editors are open.
-//   App's timer cb can see if any editors need checking..
-//
-int ExternalCodeEditor::editors_open() {
-  return L_editors_open;
-}
-
-#endif /* WIN32 */
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/ExternalCodeEditor_WIN32.h
+++ /dev/null
@@ -1,64 +1,0 @@
-//
-// "$Id$".
-//
-//       External code editor management class for Windows
-//
-//       Handles starting and keeping track of an external text editor,
-//       including process start, temp file creation/removal, bookkeeping, killing..
-//
-#ifndef _EXTCODEEDITOR_H
-#define _EXTCODEEDITOR_H
-
-/* We require at least Windows 2000 (WINVER == 0x0500) for GetFileSizeEx().  */
-/* This must be defined before #include <windows.h> - MinGW doesn't do that. */
-#if !defined(WINVER) || (WINVER < 0x0500)
-# ifdef WINVER
-#  undef WINVER
-# endif
-# define WINVER 0x0500
-#endif
-#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
-# ifdef _WIN32_WINNT
-#  undef _WIN32_WINNT
-# endif
-# define _WIN32_WINNT 0x0500
-#endif
-
-#include <windows.h>                /* CreateFile().. */
-#include <string.h>                 /* sprintf().. */
-
-class ExternalCodeEditor {
-  PROCESS_INFORMATION pinfo_;       // CreateProcess() handle to running process 
-  FILETIME            file_mtime_;  // last modify time of the file (used to determine if file changed)
-  LARGE_INTEGER       file_size_;   // last file size (used to determine if changed)
-  const char *        filename_;    // tmpfilename editor uses
-protected:
-  void kill_editor();
-  void reap_cleanup();
-  const char *create_tmpdir();
-  const char *tmp_filename();
-  int start_editor(const char *cmd, const char *filename);
-  void set_filename(const char *val);
-public:
-  ExternalCodeEditor();
-  ~ExternalCodeEditor();
-  int is_editing();
-  DWORD reap_editor();
-  void close_editor();
-  const char *filename() { return filename_; }
-  int open_editor(const char *editor_cmd, const char *code);
-  int handle_changes(const char **code, int force=0);
-  int remove_tmpfile();
-  // Public static methods
-  static void start_update_timer();
-  static void stop_update_timer();
-  static const char* tmpdir_name();
-  static void tmpdir_clear();
-  static int editors_open();
-  static void set_update_timer_callback(Fl_Timeout_Handler);
-};
-
-#endif /*_EXTCODEEDITOR_H */
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Function_Type.cxx
+++ /dev/null
@@ -1,1496 +1,0 @@
-//
-// "$Id$"
-//
-// C function type code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_File_Chooser.H>
-#include "Fl_Type.h"
-#include <FL/fl_show_input.H>
-#include <FL/Fl_File_Chooser.H>
-#include "alignment_panel.h"
-#include "../src/flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WIN32
-  #include "ExternalCodeEditor_WIN32.h"
-#else
-  #include "ExternalCodeEditor_UNIX.h"
-#endif
-
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-extern char i18n_program[];
-
-extern int batch_mode;
-
-extern void redraw_browser();
-extern void goto_source_dir();
-extern void leave_source_dir();
-extern Fl_Window *main_window;
-
-////////////////////////////////////////////////////////////////
-// quick check of any C code for legality, returns an error message
-
-static char buffer[128]; // for error messages
-
-// check a quoted string ending in either " or ' or >:
-const char *_q_check(const char * & c, int type) {
-  for (;;) switch (*c++) {
-    case '\0':
-      sprintf(buffer,"missing %c",type);
-      return buffer;
-    case '\\':
-      if (*c) c++;
-      break;
-    default:
-      if (*(c-1) == type) return 0;
-  }
-}
-
-// check normal code, match braces and parenthesis:
-const char *_c_check(const char * & c, int type) {
-  const char *d;
-  for (;;) switch (*c++) {
-    case 0:
-      if (!type) return 0;
-      sprintf(buffer, "missing %c", type);
-      return buffer;
-    case '/':
-      // Skip comments as needed...
-      if (*c == '/') {
-        while (*c != '\n' && *c) c++;
-      } else if (*c == '*') {
-        c++;
-        while ((*c != '*' || c[1] != '/') && *c) c++;
-        if (*c == '*') c+=2;
-        else {
-          return "missing '*/'";
-        }
-      }
-      break;
-    case '#':
-      // treat cpp directives as a comment:
-      while (*c != '\n' && *c) c++;
-      break;
-    case '{':
-      if (type==')') goto UNEXPECTED;
-      d = _c_check(c,'}');
-      if (d) return d;
-      break;
-    case '(':
-      d = _c_check(c,')');
-      if (d) return d;
-      break;
-    case '\"':
-      d = _q_check(c,'\"');
-      if (d) return d;
-      break;
-    case '\'':
-      d = _q_check(c,'\'');
-      if (d) return d;
-      break;
-    case '}':
-    case ')':
-    UNEXPECTED:
-      if (type == *(c-1)) return 0;
-      sprintf(buffer, "unexpected %c", *(c-1));
-      return buffer;
-  }
-}
-
-const char *c_check(const char *c, int type) {
-  return _c_check(c,type);
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl_Function_Type::is_public() const {return public_;}
-
-Fl_Type *Fl_Function_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_decl_block()) p = p->parent;
-  Fl_Function_Type *o = new Fl_Function_Type();
-  o->name("make_window()");
-  o->return_type = 0;
-  o->add(p);
-  o->factory = this;
-  o->public_ = 1;
-  o->cdecl_ = 0;
-  return o;
-}
-
-void Fl_Function_Type::write_properties() {
-  Fl_Type::write_properties();
-  switch (public_) {
-    case 0: write_string("private"); break;
-    case 2: write_string("protected"); break;
-  }
-  if (cdecl_) write_string("C");
-  if (return_type) {
-    write_string("return_type");
-    write_word(return_type);
-  }
-}
-
-void Fl_Function_Type::read_property(const char *c) {
-  if (!strcmp(c,"private")) {
-    public_ = 0;
-  } else if (!strcmp(c,"protected")) {
-    public_ = 2;
-  } else if (!strcmp(c,"C")) {
-    cdecl_ = 1;
-  } else if (!strcmp(c,"return_type")) {
-    storestring(read_word(),return_type);
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-#include "function_panel.h"
-#include <FL/fl_ask.H>
-
-void Fl_Function_Type::open() {
-  if (!function_panel) make_function_panel();
-  f_return_type_input->static_value(return_type);
-  f_name_input->static_value(name());
-  if (is_in_class()) {
-    f_public_member_choice->value(public_);
-    f_public_member_choice->show();
-    f_public_choice->hide();
-  } else {
-    f_public_choice->value(public_>0);
-    f_public_choice->show();
-    f_public_member_choice->hide();
-  }
-  f_c_button->value(cdecl_);
-  const char *c = comment();
-  f_comment_input->buffer()->text(c?c:"");
-  function_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == f_panel_cancel) goto BREAK2;
-      else if (w == f_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    const char*c = f_name_input->value();
-    while (isspace(*c)) c++;
-    message = c_check(c); if (message) continue;
-    const char *d = c;
-    for (; *d != '('; d++) if (isspace(*d) || !*d) break;
-    if (*c && *d != '(') {
-      message = "must be name(arguments), try again:"; continue;
-    }
-    int mod = 0;
-    c = f_return_type_input->value();
-    message = c_check(c); if (message) continue;
-    name(f_name_input->value());
-    storestring(c, return_type);
-    if (is_in_class()) {
-      if (public_ != f_public_member_choice->value()) {
-        mod = 1;
-        public_ = f_public_member_choice->value();
-        redraw_browser();
-      }
-    } else {
-      if (public_ != f_public_choice->value()) {
-        mod = 1;
-        public_ = f_public_choice->value();
-        redraw_browser();
-      }
-    }
-    if (cdecl_ != f_c_button->value()) {
-      mod = 1;
-      cdecl_ = f_c_button->value();
-    }
-    c = f_comment_input->buffer()->text();
-    if (c && *c) {
-      if (!comment() || strcmp(c, comment())) redraw_browser();
-      comment(c);
-    } else {
-      if (comment()) redraw_browser();
-      comment(0);
-    }
-    if (c) free((void*)c);
-    if (mod) set_modflag(1);
-    break;
-  }
-BREAK2:
-  function_panel->hide();
-}
-
-Fl_Function_Type Fl_Function_type;
-
-extern const char* subclassname(Fl_Type*);
-
-void Fl_Function_Type::write_code1() {
-  constructor=0;
-  havewidgets = 0;
-  Fl_Type *child;
-  // if the function has no children (hence no body), Fluid will not generate
-  // the function either. This is great if you decide to implement that function
-  // inside another module
-  char havechildren = 0;
-  for (child = next; child && child->level > level; child = child->next) {
-    havechildren = 1;
-    if (child->is_widget()) {
-      havewidgets = 1;
-      break;
-    }
-  }
-  if (havechildren)
-    write_c("\n");
-  if (ismain()) {
-    if (havechildren)
-      write_c("int main(int argc, char **argv) {\n");
-  } else {
-    const char* rtype = return_type;
-    const char* star = "";
-    // from matt: let the user type "static " at the start of type
-    // in order to declare a static method;
-    int is_static = 0;
-    int is_virtual = 0;
-    if (rtype) {
-      if (!strcmp(rtype,"static")) {is_static = 1; rtype = 0;}
-      else if (!strncmp(rtype, "static ",7)) {is_static = 1; rtype += 7;}
-      if (!strcmp(rtype, "virtual")) {is_virtual = 1; rtype = 0;}
-      else if (!strncmp(rtype, "virtual ",8)) {is_virtual = 1; rtype += 8;}
-    }
-    if (!rtype) {
-      if (havewidgets) {
-        rtype = subclassname(child);
-        star = "*";
-      } else rtype = "void";
-    }
-    
-    const char* k = class_name(0);
-    if (k) {
-      if (havechildren)
-        write_comment_c();
-      write_public(public_);
-      if (name()[0] == '~')
-        constructor = 1;
-      else {
-        size_t n = strlen(k);
-        if (!strncmp(name(), k, n) && name()[n] == '(') constructor = 1;
-      }
-      write_h("  ");
-      if (is_static) write_h("static ");
-      if (is_virtual) write_h("virtual ");
-      if (!constructor) {
-        write_h("%s%s ", rtype, star);
-        if (havechildren)
-          write_c("%s%s ", rtype, star);
-      }
-      
-      // if this is a subclass, only write_h() the part before the ':'
-      char s[1024], *sptr = s;
-      char *nptr = (char *)name();
-      
-      while (*nptr) {
-        if (*nptr == ':') {
-          if (nptr[1] != ':') break;
-          // Copy extra ":" for "class::member"...
-          *sptr++ = *nptr++;
-        }	  
-        *sptr++ = *nptr++;
-      }
-      *sptr = '\0';
-      
-      write_h("%s;\n", s);
-      // skip all function default param. init in body:
-      int skips=0,skipc=0;
-      int nc=0,plevel=0;
-      for (sptr=s,nptr=(char*)name(); *nptr; nc++,nptr++) {
-        if (!skips && *nptr=='(') plevel++;
-        else if (!skips && *nptr==')') plevel--;
-        if ( *nptr=='"' &&  !(nc &&  *(nptr-1)=='\\') ) 
-          skips = skips ? 0 : 1;
-        else if(!skips && *nptr=='\'' &&  !(nc &&  *(nptr-1)=='\\'))
-          skipc = skipc ? 0 : 1;
-        if(!skips && !skipc && plevel==1 && *nptr =='=' && 
-           !(nc && *(nptr-1)=='\'') ) // ignore '=' case 
-          while(*++nptr  && (skips || skipc || ( (*nptr!=',' && *nptr!=')') || plevel!=1) )) {
-            if ( *nptr=='"' &&  *(nptr-1)!='\\' ) 
-              skips = skips ? 0 : 1;
-            else if(!skips && *nptr=='\'' &&  *(nptr-1)!='\\')
-              skipc = skipc ? 0 : 1;
-            if (!skips && !skipc && *nptr=='(') plevel++;
-            else if (!skips && *nptr==')') plevel--;
-          }
-        
-        if (sptr < (s + sizeof(s) - 1))	*sptr++ = *nptr;
-      }
-      *sptr = '\0';
-      
-      if (havechildren)
-        write_c("%s::%s {\n", k, s);
-    } else {
-      if (havechildren)
-        write_comment_c();
-      if (public_) {
-        if (cdecl_)
-          write_h("extern \"C\" { %s%s %s; }\n", rtype, star, name());
-        else
-          write_h("%s%s %s;\n", rtype, star, name());
-      } else {
-        if (havechildren)
-          write_c("static ");
-      }
-      
-      // write everything but the default parameters (if any)
-      char s[1024], *sptr;
-      char *nptr;
-      int skips=0,skipc=0;
-      int nc=0,plevel=0;
-      for (sptr=s,nptr=(char*)name(); *nptr; nc++,nptr++) {
-        if (!skips && *nptr=='(') plevel++;
-        else if (!skips && *nptr==')') plevel--;
-        if ( *nptr=='"' &&  !(nc &&  *(nptr-1)=='\\') ) 
-          skips = skips ? 0 : 1;
-        else if(!skips && *nptr=='\'' &&  !(nc &&  *(nptr-1)=='\\'))
-          skipc = skipc ? 0 : 1;
-        if(!skips && !skipc && plevel==1 && *nptr =='=' && 
-           !(nc && *(nptr-1)=='\'') ) // ignore '=' case 
-          while(*++nptr  && (skips || skipc || ( (*nptr!=',' && *nptr!=')') || plevel!=1) )) {
-            if ( *nptr=='"' &&  *(nptr-1)!='\\' ) 
-              skips = skips ? 0 : 1;
-            else if(!skips && *nptr=='\'' &&  *(nptr-1)!='\\')
-              skipc = skipc ? 0 : 1;
-            if (!skips && !skipc && *nptr=='(') plevel++;
-            else if (!skips && *nptr==')') plevel--;
-          }
-        
-        if (sptr < (s + sizeof(s) - 1))	*sptr++ = *nptr;
-      }
-      *sptr = '\0';
-      
-      if (havechildren)
-        write_c("%s%s %s {\n", rtype, star, s);
-    }
-  }
-  
-  if (havewidgets && !child->name()) write_c("  %s* w;\n", subclassname(child));
-  indentation += 2;
-}
-
-void Fl_Function_Type::write_code2() {
-  Fl_Type *child;
-  const char *var = "w";
-  char havechildren = 0;
-  for (child = next; child && child->level > level; child = child->next) {
-    havechildren = 1;
-    if (child->is_window() && child->name()) var = child->name();
-  }
-  
-  if (ismain()) {
-    if (havewidgets) write_c("  %s->show(argc, argv);\n", var);
-    if (havechildren) write_c("  return Fl::run();\n");
-  } else if (havewidgets && !constructor && !return_type) {
-    write_c("  return %s;\n", var);
-  }
-  if (havechildren)
-    write_c("}\n");
-  indentation = 0;
-}
-
-int Fl_Function_Type::has_signature(const char *rtype, const char *sig) const {
-  if (rtype && !return_type) return 0;
-  if (!name()) return 0;
-  if ( (rtype==0L || strcmp(return_type, rtype)==0) 
-      && fl_filename_match(name(), sig)) {
-    return 1;
-  }
-  return 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Type *Fl_Code_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_code_block()) p = p->parent;
-  if (!p) {
-    fl_message("Please select a function");
-    return 0;
-  }
-  Fl_Code_Type *o = new Fl_Code_Type();
-  o->name("printf(\"Hello, World!\\n\");");
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_Code_Type::open() {
-  // Using an external code editor? Open it..
-  if ( G_use_external_editor && G_external_editor_command[0] ) {
-    const char *cmd = G_external_editor_command;
-    const char *code = name();
-    if ( editor_.open_editor(cmd, code) == 0 )
-      return;   // return if editor opened ok, fallthru to built-in if not
-  }
-  // Use built-in code editor..
-  if (!code_panel) make_code_panel();
-  const char *text = name();
-  code_input->buffer()->text( text ? text : "" );
-  code_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == code_panel_cancel) goto BREAK2;
-      else if (w == code_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    char*c = code_input->buffer()->text();
-    message = c_check(c); if (message) continue;
-    name(c);
-    free(c);
-    break;
-  }
-BREAK2:
-  code_panel->hide();
-}
-
-Fl_Code_Type Fl_Code_type;
-
-void Fl_Code_Type::write() {
-  // External editor changes? If so, load changes into ram, update mtime/size
-  if ( handle_editor_changes() == 1 ) {
-    main_window->redraw();    // tell fluid to redraw; edits may affect tree's contents
-  }
-  Fl_Type::write();
-}
-
-void Fl_Code_Type::write_code1() {
-  // External editor changes? If so, load changes into ram, update mtime/size
-  if ( handle_editor_changes() == 1 ) {
-    main_window->redraw();    // tell fluid to redraw; edits may affect tree's contents
-  }
-
-  const char* c = name();
-  if (!c) return;
-
-  const char *pch;
-  const char *ind = indent();
-  while( (pch=strchr(c,'\n')) )
-  {
-    int line_len = pch - c;
-    write_c("%s%.*s\n", ind, line_len, c);
-    c = pch+1;
-  }
-  write_c("%s%s\n", ind, c);
-}
-
-void Fl_Code_Type::write_code2() {}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Type *Fl_CodeBlock_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_code_block()) p = p->parent;
-  if (!p) {
-    fl_message("Please select a function");
-    return 0;
-  }
-  Fl_CodeBlock_Type *o = new Fl_CodeBlock_Type();
-  o->name("if (test())");
-  o->after = 0;
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_CodeBlock_Type::write_properties() {
-  Fl_Type::write_properties();
-  if (after) {
-    write_string("after");
-    write_word(after);
-  }
-}
-
-void Fl_CodeBlock_Type::read_property(const char *c) {
-  if (!strcmp(c,"after")) {
-    storestring(read_word(),after);
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-void Fl_CodeBlock_Type::open() {
-  if (!codeblock_panel) make_codeblock_panel();
-  code_before_input->static_value(name());
-  code_after_input->static_value(after);
-  codeblock_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == codeblock_panel_cancel) goto BREAK2;
-      else if (w == codeblock_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    const char*c = code_before_input->value();
-    message = c_check(c); if (message) continue;
-    name(c);
-    c = code_after_input->value();
-    message = c_check(c); if (message) continue;
-    storestring(c, after);
-    break;
-  }
-BREAK2:
-  codeblock_panel->hide();
-}
-
-Fl_CodeBlock_Type Fl_CodeBlock_type;
-
-void Fl_CodeBlock_Type::write_code1() {
-  const char* c = name();
-  write_c("%s%s {\n", indent(), c ? c : "");
-  indentation += 2;
-}
-
-void Fl_CodeBlock_Type::write_code2() {
-  indentation -= 2;
-  if (after) write_c("%s} %s\n", indent(), after);
-  else write_c("%s}\n", indent());
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl_Decl_Type::is_public() const 
-{
-  Fl_Type *p = parent;
-  while (p && !p->is_decl_block()) p = p->parent;
-  if(p && p->is_public() && public_)
-    return public_;
-  else if(!p)
-    return public_;
-  return 0;
-}
-
-Fl_Type *Fl_Decl_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_decl_block()) p = p->parent;
-  Fl_Decl_Type *o = new Fl_Decl_Type();
-  o->public_ = 0;
-  o->static_ = 1;
-  o->name("int x;");
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_Decl_Type::write_properties() {
-  Fl_Type::write_properties();
-  switch (public_) {
-    case 0: write_string("private"); break;
-    case 1: write_string("public"); break;
-    case 2: write_string("protected"); break;
-  }
-  if (static_) 
-    write_string("local");
-  else
-    write_string("global");
-}
-
-void Fl_Decl_Type::read_property(const char *c) {
-  if (!strcmp(c,"public")) {
-    public_ = 1;
-  } else if (!strcmp(c,"private")) {
-    public_ = 0;
-  } else if (!strcmp(c,"protected")) {
-    public_ = 2;
-  } else if (!strcmp(c,"local")) {
-    static_ = 1;
-  } else if (!strcmp(c,"global")) {
-    static_ = 0;
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-void Fl_Decl_Type::open() {
-  if (!decl_panel) make_decl_panel();
-  decl_input->static_value(name());
-  if (is_in_class()) {
-    decl_class_choice->value(public_);
-    decl_class_choice->show();
-    decl_choice->hide();
-  } else {
-    decl_choice->value((public_&1)|((static_&1)<<1));
-    decl_choice->show();
-    decl_class_choice->hide();
-  }
-  const char *c = comment();
-  decl_comment_input->buffer()->text(c?c:"");
-  decl_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == decl_panel_cancel) goto BREAK2;
-      else if (w == decl_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    const char*c = decl_input->value();
-    while (isspace(*c)) c++;
-    message = c_check(c&&c[0]=='#' ? c+1 : c);
-    if (message) continue;
-    name(c);
-    if (is_in_class()) {
-      if (public_!=decl_class_choice->value()) {
-        set_modflag(1);
-        public_ = decl_class_choice->value();
-      }
-    } else {
-      if (public_!=(decl_choice->value()&1)) {
-        set_modflag(1);
-        public_ = (decl_choice->value()&1);
-      }
-      if (static_!=((decl_choice->value()>>1)&1)) {
-        set_modflag(1);
-        static_ = ((decl_choice->value()>>1)&1);
-      }
-    }
-    c = decl_comment_input->buffer()->text();
-    if (c && *c) {
-      if (!comment() || strcmp(c, comment())) redraw_browser();
-      comment(c);
-    } else {
-      if (comment()) redraw_browser();
-      comment(0);
-    }
-    if (c) free((void*)c);
-    break;
-  }
-BREAK2:
-  decl_panel->hide();
-}
-
-Fl_Decl_Type Fl_Decl_type;
-
-void Fl_Decl_Type::write_code1() {
-  const char* c = name();
-  if (!c) return;
-  // handle a few keywords differently if inside a class
-  if (is_in_class() && (   (!strncmp(c,"class",5) && isspace(c[5]))
-                        || (!strncmp(c,"typedef",7) && isspace(c[7]))
-                        || (!strncmp(c,"FL_EXPORT",9) && isspace(c[9]))
-                        || (!strncmp(c,"struct",6) && isspace(c[6]))
-                        ) ) {
-    write_public(public_);
-    write_comment_h("  ");
-    write_h("  %s\n", c);
-    return;
-  }
-  // handle putting #include, extern, using or typedef into decl:
-  if (   (!isalpha(*c) && *c != '~')
-      || (!strncmp(c,"extern",6) && isspace(c[6]))
-      || (!strncmp(c,"class",5) && isspace(c[5]))
-      || (!strncmp(c,"typedef",7) && isspace(c[7]))
-      || (!strncmp(c,"using",5) && isspace(c[5]))
-      || (!strncmp(c,"FL_EXPORT",9) && isspace(c[9]))
-      //    || !strncmp(c,"struct",6) && isspace(c[6])
-      ) {
-    if (public_) {
-      write_comment_h();
-      write_h("%s\n", c);
-    } else {
-      write_comment_c();
-      write_c("%s\n", c);
-    }
-    return;
-  }
-  // find the first C++ style comment
-  const char* e = c+strlen(c), *csc = c;
-  while (csc<e && (csc[0]!='/' || csc[1]!='/')) csc++;
-  if (csc!=e) e = csc; // comment found
-                       // lose all trailing semicolons so I can add one:
-  while (e>c && e[-1]==' ') e--;
-  while (e>c && e[-1]==';') e--;
-  if (class_name(1)) {
-    write_public(public_);
-    write_comment_h("  ");
-    write_h("  %.*s; %s\n", (int)(e-c), c, csc);
-  } else {
-    if (public_) {
-      if (static_) 
-        write_h("extern ");
-      else
-        write_comment_h();
-      write_h("%.*s; %s\n", (int)(e-c), c, csc);
-      if (static_) {
-        write_comment_c();
-        write_c("%.*s; %s\n", (int)(e-c), c, csc);
-      }
-    } else {
-      write_comment_c();
-      if (static_) 
-        write_c("static ");
-      write_c("%.*s; %s\n", (int)(e-c), c, csc);
-    }
-  }
-}
-
-void Fl_Decl_Type::write_code2() {}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Type *Fl_Data_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_decl_block()) p = p->parent;
-  Fl_Data_Type *o = new Fl_Data_Type();
-  o->public_ = 1;
-  o->static_ = 1;
-  o->filename_ = 0;
-  o->name("myBinaryData");
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_Data_Type::write_properties() {
-  Fl_Decl_Type::write_properties();
-  if (filename_) {
-    write_string("filename");
-    write_word(filename_);
-  }
-}
-
-void Fl_Data_Type::read_property(const char *c) {
-  if (!strcmp(c,"filename")) {
-    storestring(read_word(), filename_, 1);
-  } else {
-    Fl_Decl_Type::read_property(c);
-  }
-}
-
-void Fl_Data_Type::open() {
-  if (!data_panel) make_data_panel();
-  data_input->static_value(name());
-  if (is_in_class()) {
-    data_class_choice->value(public_);
-    data_class_choice->show();
-    data_choice->hide();
-  } else {
-    data_choice->value((public_&1)|((static_&1)<<1));
-    data_choice->show();
-    data_class_choice->hide();
-  }
-  data_filename->value(filename_?filename_:"");
-  const char *c = comment();
-  data_comment_input->buffer()->text(c?c:"");
-  data_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == data_panel_cancel) goto BREAK2;
-      else if (w == data_panel_ok) break;
-      else if (w == data_filebrowser) {
-        goto_source_dir();
-        const char *fn = fl_file_chooser("Load Binary Data", 0L, data_filename->value(), 1);
-        leave_source_dir();
-        if (fn) {
-          if (strcmp(fn, data_filename->value()))
-            set_modflag(1); 
-          data_filename->value(fn);
-        }
-      }
-      else if (!w) Fl::wait();
-    }
-    // store the variable name:
-    const char*c = data_input->value();
-    char *s = strdup(c), *p = s, *q, *n;
-    for (;;++p) {
-      if (!isspace((unsigned char)(*p))) break;
-    }
-    n = p;
-    if ( (!isalpha((unsigned char)(*p))) && ((*p)!='_') && ((*p)!=':') ) goto OOPS;
-    ++p;
-    for (;;++p) {
-      if ( (!isalnum((unsigned char)(*p))) && ((*p)!='_') && ((*p)!=':') ) break;
-    }
-    q = p;
-    for (;;++q) {
-      if (!*q) break;
-      if (!isspace((unsigned char)(*q))) goto OOPS;
-    }		
-    if (n==q) {
-    OOPS: message = "variable name must be a C identifier";
-      free((void*)s);
-      continue;
-    }
-    *p = 0;
-    name(n);
-    free(s);
-    // store flags
-    if (is_in_class()) {
-      if (public_!=data_class_choice->value()) {
-        set_modflag(1);
-        public_ = data_class_choice->value();
-      }
-    } else {
-      if (public_!=(data_choice->value()&1)) {
-        set_modflag(1);
-        public_ = (data_choice->value()&1);
-      }
-      if (static_!=((data_choice->value()>>1)&1)) {
-        set_modflag(1);
-        static_ = ((data_choice->value()>>1)&1);
-      }
-    }
-    // store the filename
-    c = data_filename->value();
-    if (filename_ && strcmp(filename_, data_filename->value()))
-      set_modflag(1); 
-    else if (!filename_ && *c)
-      set_modflag(1);
-    if (filename_) { free((void*)filename_); filename_ = 0L; }
-    if (c && *c) filename_ = strdup(c);
-    // store the comment
-    c = data_comment_input->buffer()->text();
-    if (c && *c) {
-      if (!comment() || strcmp(c, comment())) redraw_browser();
-      comment(c);
-    } else {
-      if (comment()) redraw_browser();
-      comment(0);
-    }
-    if (c) free((void*)c);
-    break;
-  }
-BREAK2:
-  data_panel->hide();
-}
-
-Fl_Data_Type Fl_Data_type;
-
-void Fl_Data_Type::write_code1() {
-  const char *message = 0;
-  const char *c = name();
-  if (!c) return;
-  const char *fn = filename_;
-  char *data = 0;
-  int nData = -1;
-  // path should be set correctly already
-  if (filename_ && !write_sourceview) {
-    FILE *f = fl_fopen(filename_, "rb");
-    if (!f) {
-      message = "Can't include binary file. Can't open";
-    } else {
-      fseek(f, 0, SEEK_END);
-      nData = ftell(f);
-      fseek(f, 0, SEEK_SET);
-      if (nData) {
-        data = (char*)calloc(nData, 1);
-        if (fread(data, nData, 1, f)==0) { /* use default */ }
-      }
-      fclose(f);
-    }
-  } else {
-    fn = "<no filename>";
-  }
-  if (is_in_class()) {
-    write_public(public_);
-    write_comment_h("  ");
-    write_h("  static unsigned char %s[%d];\n", c, nData);
-    write_c("unsigned char %s::%s[%d] = /* binary data included from %s */\n", class_name(1), c, nData, fn);
-    if (message) write_c("#error %s %s\n", message, fn);
-    write_cdata(data, nData);
-    write_c(";\n");
-  } else {
-    // the "header only" option does not apply here!
-    if (public_) {
-      if (static_) {
-        write_h("extern unsigned char %s[%d];\n", c, nData);
-        write_comment_c();
-        write_c("unsigned char %s[%d] = /* binary data included from %s */\n", c, nData, fn);
-        if (message) write_c("#error %s %s\n", message, fn);
-        write_cdata(data, nData);
-        write_c(";\n");
-      } else {
-        write_comment_h();
-        write_h("#error Unsupported declaration loading binary data %s\n", fn);
-        write_h("unsigned char %s[3] = { 1, 2, 3 };\n", c);
-      }
-    } else {
-      write_comment_c();
-      if (static_) 
-        write_c("static ");
-      write_c("unsigned char %s[%d] = /* binary data included from %s */\n", c, nData, fn);
-      if (message) write_c("#error %s %s\n", message, fn);
-      write_cdata(data, nData);
-      write_c(";\n");
-    }
-  }
-  // if we are in interactive mode, we pop up a warning dialog 
-  // giving the error: (batch_mode && !write_sourceview) ???
-  if (message && !write_sourceview) {
-    if (batch_mode)
-      fprintf(stderr, "FLUID ERROR: %s %s\n", message, fn);
-    else
-      fl_alert("%s\n%s\n", message, fn);
-  }
-  if (data) free(data);
-}
-
-void Fl_Data_Type::write_code2() {}
-
-////////////////////////////////////////////////////////////////
-
-int Fl_DeclBlock_Type::is_public() const {return public_;}
-
-Fl_Type *Fl_DeclBlock_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_decl_block()) p = p->parent;
-  Fl_DeclBlock_Type *o = new Fl_DeclBlock_Type();
-  o->name("#if 1");
-  o->public_ = 0;
-  o->after = strdup("#endif");
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_DeclBlock_Type::write_properties() {
-  Fl_Type::write_properties();
-  switch (public_) {
-    case 1: write_string("public"); break;
-    case 2: write_string("protected"); break;
-  }
-  write_string("after");
-  write_word(after);
-}
-
-void Fl_DeclBlock_Type::read_property(const char *c) {
-  if(!strcmp(c,"public")) {
-    public_ = 1;
-  } else if(!strcmp(c,"protected")) {
-    public_ = 2;
-  } else  if (!strcmp(c,"after")) {
-    storestring(read_word(),after);
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-void Fl_DeclBlock_Type::open() {
-  if (!declblock_panel) make_declblock_panel();
-  decl_before_input->static_value(name());
-  declblock_public_choice->value((public_>0));
-  decl_after_input->static_value(after);
-  declblock_panel->show();
-  const char* message = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == declblock_panel_cancel) goto BREAK2;
-      else if (w == declblock_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    const char*c = decl_before_input->value();
-    while (isspace(*c)) c++;
-    message = c_check(c&&c[0]=='#' ? c+1 : c);
-    if (message) continue;
-    name(c);
-    c = decl_after_input->value();
-    while (isspace(*c)) c++;
-    message = c_check(c&&c[0]=='#' ? c+1 : c);
-    if (message) continue;
-    storestring(c,after);
-    if (public_ != declblock_public_choice->value()) {
-      set_modflag(1);
-      public_ = declblock_public_choice->value();
-      redraw_browser();
-    }
-    break;
-  }
-BREAK2:
-  declblock_panel->hide();
-}
-
-Fl_DeclBlock_Type Fl_DeclBlock_type;
-
-void Fl_DeclBlock_Type::write_code1() {
-  const char* c = name();
-  if (public_)
-    write_h("%s\n", c);
-  write_c("%s\n", c);
-}
-
-void Fl_DeclBlock_Type::write_code2() {
-  const char* c = after;
-  if (public_)
-    write_h("%s\n", c);
-  write_c("%s\n", c);
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Type *Fl_Comment_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_code_block()) p = p->parent;
-  Fl_Comment_Type *o = new Fl_Comment_Type();
-  o->in_c_ = 1;
-  o->in_h_ = 1;
-  o->style_ = 0;
-  o->name("my comment");
-  o->add(p);
-  o->factory = this;
-  o->title_buf[0] = 0;
-  return o;
-}
-
-void Fl_Comment_Type::write_properties() {
-  Fl_Type::write_properties();
-  if (in_c_) write_string("in_source"); else write_string("not_in_source"); 
-  if (in_h_) write_string("in_header"); else write_string("not_in_header");
-}
-
-void Fl_Comment_Type::read_property(const char *c) {
-  if (!strcmp(c,"in_source")) {
-    in_c_ = 1;
-  } else if (!strcmp(c,"not_in_source")) {
-    in_c_ = 0;
-  } else if (!strcmp(c,"in_header")) {
-    in_h_ = 1;
-  } else if (!strcmp(c,"not_in_header")) {
-    in_h_ = 0;
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-#include "comments.h"
-
-static void load_comments_preset(Fl_Preferences &menu) {
-  static const char * const predefined_comment[] = {
-    "GNU Public License/GPL Header",  "GNU Public License/GPL Footer",
-    "GNU Public License/LGPL Header", "GNU Public License/LGPL Footer",
-    "FLTK/Header", "FLTK/Footer" };
-  int i;
-  menu.set("n", 6);
-  Fl_Preferences db(Fl_Preferences::USER, "fltk.org", "fluid_comments");
-  for (i=0; i<6; i++) {
-    menu.set(Fl_Preferences::Name(i), predefined_comment[i]);
-    db.set(predefined_comment[i], comment_text[i]);
-  }
-}
-
-void Fl_Comment_Type::open() {
-  if (!comment_panel) make_comment_panel();
-  const char *text = name();
-  {
-    int i=0, n=0;
-    Fl_Preferences menu(Fl_Preferences::USER, "fltk.org", "fluid_comments_menu");
-    comment_predefined->clear();
-    comment_predefined->add("_Edit/Add current comment...");
-    comment_predefined->add("_Edit/Remove last selection...");
-    menu.get("n", n, -1);
-    if (n==-1) load_comments_preset(menu);
-    menu.get("n", n, 0);
-    for (i=0;i<n;i++) {
-      char *text;
-      menu.get(Fl_Preferences::Name(i), text, "");
-      comment_predefined->add(text);
-      free(text);
-    }
-  }
-  comment_input->buffer()->text( text ? text : "" );
-  comment_in_source->value(in_c_);
-  comment_in_header->value(in_h_);
-  comment_panel->show();
-  const char* message = 0;
-  char itempath[FL_PATH_MAX]; itempath[0] = 0;
-  int last_selected_item = 0;
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == comment_panel_cancel) goto BREAK2;
-      else if (w == comment_panel_ok) break;
-      else if (w == comment_predefined) {
-        if (comment_predefined->value()==1) {
-          // add the current comment to the database
-          const char *xname = fl_input(
-                                       "Please enter a name to reference the current\ncomment in your database.\n\n"
-                                       "Use forward slashes '/' to create submenus.", 
-                                       "My Comment");
-          if (xname) {
-            char *name = strdup(xname);
-            for (char*s=name;*s;s++) if (*s==':') *s = ';';
-            int n;
-            Fl_Preferences db(Fl_Preferences::USER, "fltk.org", "fluid_comments");
-            db.set(name, comment_input->buffer()->text());
-            Fl_Preferences menu(Fl_Preferences::USER, "fltk.org", "fluid_comments_menu");
-            menu.get("n", n, 0);
-            menu.set(Fl_Preferences::Name(n), name);
-            menu.set("n", ++n);
-            comment_predefined->add(name);
-            free(name);
-          }
-        } else if (comment_predefined->value()==2) {
-          // remove the last selected comment from the database
-          if (itempath[0]==0 || last_selected_item==0) {
-            fl_message("Please select an entry form this menu first.");
-          } else if (fl_choice("Are you sure that you want to delete the entry\n"
-	                       "\"%s\"\nfrom the database?", "Cancel", "Delete",
-			       NULL, itempath)) {
-            Fl_Preferences db(Fl_Preferences::USER, "fltk.org", "fluid_comments");
-            db.deleteEntry(itempath);
-            comment_predefined->remove(last_selected_item);
-            Fl_Preferences menu(Fl_Preferences::USER, "fltk.org", "fluid_comments_menu");
-            int i, n;
-            for (i=4, n=0; i<comment_predefined->size(); i++) {
-              const Fl_Menu_Item *mi = comment_predefined->menu()+i;
-              if (comment_predefined->item_pathname(itempath, 255, mi)==0) {
-                if (itempath[0]=='/') memmove(itempath, itempath+1, 255);
-                if (itempath[0]) menu.set(Fl_Preferences::Name(n++), itempath);
-              }
-            }
-            menu.set("n", n);
-          }
-        } else {
-          // load the selected comment from the database
-          if (comment_predefined->item_pathname(itempath, 255)==0) {
-            if (itempath[0]=='/') memmove(itempath, itempath+1, 255);
-            Fl_Preferences db(Fl_Preferences::USER, "fltk.org", "fluid_comments");
-            char *text; 
-            db.get(itempath, text, "(no text found in data base)");
-            comment_input->buffer()->text(text);
-            free(text);
-            last_selected_item = comment_predefined->value();
-          }
-        }
-      }
-      else if (w == comment_load) {
-        // load a comment from disk
-	fl_file_chooser_ok_label("Use File");
-        const char *fname = fl_file_chooser("Pick a comment", 0L, 0L);
-	fl_file_chooser_ok_label(NULL);
-        if (fname) {
-          if (comment_input->buffer()->loadfile(fname)) {
-            fl_alert("Error loading file\n%s", fname);
-          }
-        }
-      }
-      else if (!w) Fl::wait();
-    }
-    char*c = comment_input->buffer()->text();
-    name(c);
-    free(c);
-    int mod = 0;
-    if (in_c_ != comment_in_source->value()) {
-      in_c_ = comment_in_source->value();
-      mod = 1;
-    }
-    if (in_h_ != comment_in_header->value()) {
-      in_h_ = comment_in_header->value();
-      mod = 1;
-    }
-    if (mod) set_modflag(1);
-    break;
-  }
-BREAK2:
-  title_buf[0] = 0;
-  comment_panel->hide();
-}
-
-const char *Fl_Comment_Type::title() {
-  const char* n = name(); 
-  if (!n || !*n) return type_name();
-  if (title_buf[0]==0) {
-    const char *s = n;
-    char *d = title_buf;
-    int i = 50;
-    while (--i > 0) {
-      char n = *s++;
-      if (n==0) break;
-      if (n=='\r') { *d++ = '\\'; *d++ = 'r'; i--; }
-      else if (n=='\n') { *d++ = '\\'; *d++ = 'n'; i--; }
-      else if (n<32) { *d++ = '^'; *d++ = 'A'+n; i--; }
-      else *d++ = n;
-    }
-    if (i<=0) { *d++ = '.'; *d++ = '.'; *d++ = '.'; }
-    *d++ = 0;
-  }
-  return title_buf;
-}
-
-Fl_Comment_Type Fl_Comment_type;
-
-void Fl_Comment_Type::write_code1() {
-  const char* c = name();
-  if (!c) return;
-  if (!in_c_ && !in_h_) return;
-  // find out if there is already a valid comment:
-  const char *s = c;
-  while (isspace(*s)) s++;
-  // if this seems to be a C style comment, copy the block as is
-  // (it's up to the user to correctly close the comment)
-  if (s[0]=='/' && s[1]=='*') {
-    if (in_h_) write_h("%s\n", c);
-    if (in_c_) write_c("%s\n", c);
-    return;
-  }
-  // copy the comment line by line, add the double slash if needed
-  char *txt = strdup(c);
-  char *b = txt, *e = txt;
-  for (;;) {
-    // find the end of the line and set it to NUL
-    while (*e && *e!='\n') e++;
-    char eol = *e;
-    *e = 0;
-    // check if there is a C++ style comment at the beginning of the line
-    char *s = b;
-    while (isspace(*s)) s++;
-    if (s!=e && ( s[0]!='/' || s[1]!='/') ) {
-      // if no comment marker was found, we add one ourselves
-      if (in_h_) write_h("// ");
-      if (in_c_) write_c("// ");
-    }
-    // now copy the rest of the line
-    if (in_h_) write_h("%s\n", b);
-    if (in_c_) write_c("%s\n", b);
-    if (eol==0) break;
-    *e++ = eol;
-    b = e;
-  }
-}
-
-void Fl_Comment_Type::write_code2() {}
-
-////////////////////////////////////////////////////////////////
-
-const char* Fl_Type::class_name(const int need_nest) const {
-  Fl_Type* p = parent;
-  while (p) {
-    if (p->is_class()) {
-      // see if we are nested in another class, we must fully-qualify name:
-      // this is lame but works...
-      const char* q = 0;
-      if(need_nest) q=p->class_name(need_nest);
-      if (q) {
-	static char s[256];
-	if (q != s) strlcpy(s, q, sizeof(s));
-	strlcat(s, "::", sizeof(s));
-	strlcat(s, p->name(), sizeof(s));
-	return s;
-      }
-      return p->name();
-    }
-    p = p->parent;
-  }
-  return 0;
-}
-
-/**
- * If this Type resides inside a class, this function returns the class type, or null.
- */
-const Fl_Class_Type *Fl_Type::is_in_class() const {
-  Fl_Type* p = parent;
-  while (p) {
-    if (p->is_class()) {
-      return (Fl_Class_Type*)p;
-    }
-    p = p->parent;
-  }
-  return 0;
-}
-
-int Fl_Class_Type::is_public() const {return public_;}
-
-void Fl_Class_Type::prefix(const char*p) {
-  free((void*) class_prefix);
-  class_prefix=strdup(p ? p : "" );
-}
-
-Fl_Type *Fl_Class_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_decl_block()) p = p->parent;
-  Fl_Class_Type *o = new Fl_Class_Type();
-  o->name("UserInterface");
-  o->class_prefix=0;
-  o->subclass_of = 0;
-  o->public_ = 1;
-  o->add(p);
-  o->factory = this;
-  return o;
-}
-
-void Fl_Class_Type::write_properties() {
-  Fl_Type::write_properties();
-  if (subclass_of) {
-    write_string(":");
-    write_word(subclass_of);
-  }
-  switch (public_) {
-    case 0: write_string("private"); break;
-    case 2: write_string("protected"); break;
-  }
-}
-
-void Fl_Class_Type::read_property(const char *c) {
-  if (!strcmp(c,"private")) {
-    public_ = 0;
-  } else if (!strcmp(c,"protected")) {
-    public_ = 2;
-  } else if (!strcmp(c,":")) {
-    storestring(read_word(), subclass_of);
-  } else {
-    Fl_Type::read_property(c);
-  }
-}
-
-void Fl_Class_Type::open() {
-  if (!class_panel) make_class_panel();
-  char fullname[FL_PATH_MAX]="";
-  if (prefix() && strlen(prefix())) 
-    sprintf(fullname,"%s %s",prefix(),name());
-  else 
-    strcpy(fullname, name());
-  c_name_input->static_value(fullname);
-  c_subclass_input->static_value(subclass_of);
-  c_public_button->value(public_);
-  const char *c = comment();
-  c_comment_input->buffer()->text(c?c:"");
-  class_panel->show();
-  const char* message = 0;
-  
-  char *na=0,*pr=0,*p=0; // name and prefix substrings
-  
-  for (;;) { // repeat as long as there are errors
-    if (message) fl_alert("%s", message);
-    for (;;) {
-      Fl_Widget* w = Fl::readqueue();
-      if (w == c_panel_cancel) goto BREAK2;
-      else if (w == c_panel_ok) break;
-      else if (!w) Fl::wait();
-    }
-    const char*c = c_name_input->value();
-    char *s = strdup(c);
-    size_t len = strlen(s);
-    if (!*s) goto OOPS;
-    p = (char*) (s+len-1);
-    while (p>=s && isspace(*p)) *(p--)='\0';
-    if (p<s) goto OOPS;
-    while (p>=s && is_id(*p)) p--;
-    if ( (p<s && !is_id(*(p+1))) || !*(p+1) ) {
-    OOPS: message = "class name must be C++ identifier";
-      free((void*)s);
-      continue;
-    }
-    na=p+1; // now we have the name
-    if(p>s) *p--='\0';
-    while (p>=s && isspace(*p)) *(p--)='\0';
-    while (p>=s && is_id(*p))   p--;
-    if (p<s)                    p++;
-    if (is_id(*p) && p<na)      pr=p; // prefix detected
-    c = c_subclass_input->value();
-    message = c_check(c); 
-    if (message) { free((void*)s);continue;}
-    name(na);
-    prefix(pr);
-    free((void*)s);
-    storestring(c, subclass_of);
-    if (public_ != c_public_button->value()) {
-      public_ = c_public_button->value();
-      set_modflag(1);
-    }
-    c = c_comment_input->buffer()->text();
-    if (c && *c) {
-      if (!comment() || strcmp(c, comment())) redraw_browser();
-      comment(c);
-    } else {
-      if (comment()) redraw_browser();
-      comment(0);
-    }
-    if (c) free((void*)c);
-    break;
-  }
-BREAK2:
-  class_panel->hide();
-}
-
-Fl_Class_Type Fl_Class_type;
-
-Fl_Class_Type *current_class;
-extern Fl_Widget_Class_Type *current_widget_class;
-void write_public(int state) {
-  if (!current_class && !current_widget_class) return;
-  if (current_class && current_class->write_public_state == state) return;
-  if (current_widget_class && current_widget_class->write_public_state == state) return;
-  if (current_class) current_class->write_public_state = state;
-  if (current_widget_class) current_widget_class->write_public_state = state;
-  switch (state) {
-    case 0: write_h("private:\n"); break;
-    case 1: write_h("public:\n"); break;
-    case 2: write_h("protected:\n"); break;
-  }
-}
-
-void Fl_Class_Type::write_code1() {
-  parent_class = current_class;
-  current_class = this;
-  write_public_state = 0;
-  write_h("\n");
-  write_comment_h();
-  if (prefix() && strlen(prefix()))
-    write_h("class %s %s ", prefix(), name());
-  else
-    write_h("class %s ", name());
-  if (subclass_of) write_h(": %s ", subclass_of);
-  write_h("{\n");
-}
-
-void Fl_Class_Type::write_code2() {
-  write_h("};\n");
-  current_class = parent_class;
-}
-
-/**
- * Return 1 if this class contains a function with the given signature.
- */
-int Fl_Class_Type::has_function(const char *rtype, const char *sig) const {
-  Fl_Type *child;
-  for (child = next; child && child->level > level; child = child->next) {
-    if (child->level == level+1 && strcmp(child->type_name(), "Function")==0) {
-      const Fl_Function_Type *fn = (const Fl_Function_Type*)child;
-      if (fn->has_signature(rtype, sig))
-        return 1;
-    }
-  }
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Group_Type.cxx
+++ /dev/null
@@ -1,444 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Group object code for the Fast Light Tool Kit (FLTK).
-//
-// Object describing an Fl_Group and links to Fl_Window_Type.C and
-// the Fl_Tabs widget, with special stuff to select tab items and
-// insure that only one is visible.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Table.H>
-#include <FL/fl_message.H>
-#include "Fl_Widget_Type.h"
-#include "../src/flstring.h"
-
-// Override group's resize behavior to do nothing to children:
-void igroup::resize(int X, int Y, int W, int H) {
-  Fl_Widget::resize(X,Y,W,H);
-  redraw();
-}
-
-Fl_Group_Type Fl_Group_type;	// the "factory"
-
-Fl_Type *Fl_Group_Type::make() {
-  return Fl_Widget_Type::make();
-}
-
-void fix_group_size(Fl_Type *tt) {
-  if (!tt || !tt->is_group()) return;
-  Fl_Group_Type* t = (Fl_Group_Type*)tt;
-  int X = t->o->x();
-  int Y = t->o->y();
-  int R = X+t->o->w();
-  int B = Y+t->o->h();
-  for (Fl_Type *nn = t->next; nn && nn->level > t->level; nn = nn->next) {
-    if (!nn->is_widget() || nn->is_menu_item()) continue;
-    Fl_Widget_Type* n = (Fl_Widget_Type*)nn;
-    int x = n->o->x();	if (x < X) X = x;
-    int y = n->o->y();	if (y < Y) Y = y;
-    int r = x+n->o->w();if (r > R) R = r;
-    int b = y+n->o->h();if (b > B) B = b;
-  }
-  t->o->resize(X,Y,R-X,B-Y);
-}
-
-extern int force_parent;
-
-void group_cb(Fl_Widget *, void *) {
-  // Find the current widget:
-  Fl_Type *qq = Fl_Type::current;
-  while (qq && (!qq->is_widget() || qq->is_menu_item())) qq = qq->parent;
-  if (!qq || qq->level < 1 || (qq->level == 1 && !strcmp(qq->type_name(), "widget_class"))) {
-    fl_message("Please select widgets to group");
-    return;
-  }
-  Fl_Widget_Type* q = (Fl_Widget_Type*)qq;
-  force_parent = 1;
-  Fl_Group_Type *n = (Fl_Group_Type*)(Fl_Group_type.make());
-  n->move_before(q);
-  n->o->resize(q->o->x(),q->o->y(),q->o->w(),q->o->h());
-  for (Fl_Type *t = Fl_Type::first; t;) {
-    if (t->level != n->level || t == n || !t->selected) {
-      t = t->next; continue;}
-    Fl_Type *nxt = t->remove();
-    t->add(n);
-    t = nxt;
-  }
-  fix_group_size(n);
-}
-
-void ungroup_cb(Fl_Widget *, void *) {
-  // Find the group:
-  Fl_Type *q = Fl_Type::current;
-  while (q && (!q->is_widget() || q->is_menu_item())) q = q->parent;
-  if (q) q = q->parent;
-  if (!q || q->level < 1 || (q->level == 1 && !strcmp(q->type_name(), "widget_class"))) {
-    fl_message("Please select widgets in a group");
-    return;
-  }
-  Fl_Type* n;
-  for (n = q->next; n && n->level > q->level; n = n->next) {
-    if (n->level == q->level+1 && !n->selected) {
-      fl_message("Please select all widgets in group");
-      return;
-    }
-  }
-  for (n = q->next; n && n->level > q->level;) {
-    Fl_Type *nxt = n->remove();
-    n->insert(q);
-    n = nxt;
-  }
-  delete q;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <stdio.h>
-
-void Fl_Group_Type::write_code1() {
-  Fl_Widget_Type::write_code1();
-}
-
-void Fl_Group_Type::write_code2() {
-  const char *var = name() ? name() : "o";
-  write_extra_code();
-  write_c("%s%s->end();\n", indent(), var);
-  if (resizable()) {
-    write_c("%sFl_Group::current()->resizable(%s);\n", indent(), var);
-  }
-  write_block_close();
-}
-
-////////////////////////////////////////////////////////////////
-
-const char pack_type_name[] = "Fl_Pack";
-
-Fl_Menu_Item pack_type_menu[] = {
-  {"HORIZONTAL", 0, 0, (void*)Fl_Pack::HORIZONTAL},
-  {"VERTICAL", 0, 0, (void*)Fl_Pack::VERTICAL},
-  {0}};
-
-Fl_Pack_Type Fl_Pack_type;	// the "factory"
-
-////////////////////////////////////////////////////////////////
-
-static const int MAX_ROWS = 14;
-static const int MAX_COLS = 7;
-
-// this is a minimal table widget used as an example when adding tables in Fluid
-class Fluid_Table : public Fl_Table {
-  int data[MAX_ROWS][MAX_COLS];         // data array for cells
-  
-  // Draw the row/col headings
-  //    Make this a dark thin upbox with the text inside.
-  //
-  void DrawHeader(const char *s, int X, int Y, int W, int H) {
-    fl_push_clip(X,Y,W,H);
-    fl_draw_box(FL_THIN_UP_BOX, X,Y,W,H, row_header_color());
-    fl_color(FL_BLACK);
-    fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-    fl_pop_clip();
-  } 
-  // Draw the cell data
-  //    Dark gray text on white background with subtle border
-  //
-  void DrawData(const char *s, int X, int Y, int W, int H) {
-    fl_push_clip(X,Y,W,H);
-    // Draw cell bg
-    fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
-    // Draw cell data
-    fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-    // Draw box border
-    fl_color(color()); fl_rect(X,Y,W,H);
-    fl_pop_clip();
-  } 
-  // Handle drawing table's cells
-  //     Fl_Table calls this function to draw each visible cell in the table.
-  //     It's up to us to use FLTK's drawing functions to draw the cells the way we want.
-  //
-  void draw_cell(TableContext context, int ROW=0, int COL=0, int X=0, int Y=0, int W=0, int H=0) {
-    static char s[40];
-    switch ( context ) {
-      case CONTEXT_STARTPAGE:                   // before page is drawn..
-        fl_font(FL_HELVETICA, 16);              // set the font for our drawing operations
-        return; 
-      case CONTEXT_COL_HEADER:                  // Draw column headers
-        sprintf(s,"%c",'A'+COL);                // "A", "B", "C", etc.
-        DrawHeader(s,X,Y,W,H);
-        return; 
-      case CONTEXT_ROW_HEADER:                  // Draw row headers
-        sprintf(s,"%03d:",ROW);                 // "001:", "002:", etc
-        DrawHeader(s,X,Y,W,H);
-        return; 
-      case CONTEXT_CELL:                        // Draw data in cells
-        sprintf(s,"%d",data[ROW][COL]);
-        DrawData(s,X,Y,W,H);
-        return;
-      default:
-        return;
-    }
-  }
-public:
-  Fluid_Table(int x, int y, int w, int h, const char *l=0L)
-  : Fl_Table(x, y, w, h, l) {
-    end();
-    for ( int r=0; r<MAX_ROWS; r++ )
-      for ( int c=0; c<MAX_COLS; c++ )
-        data[r][c] = 1000+(r*1000)+c;
-    // Rows
-    rows(MAX_ROWS);             // how many rows
-    row_header(1);              // enable row headers (along left)
-    row_height_all(20);         // default height of rows
-    row_resize(0);              // disable row resizing
-    // Cols
-    cols(MAX_COLS);             // how many columns
-    col_header(1);              // enable column headers (along top)
-    col_width_all(80);          // default width of columns
-    col_resize(1);              // enable column resizing
-  }
-};
-
-const char table_type_name[] = "Fl_Table";
-
-Fl_Table_Type Fl_Table_type;	// the "factory"
-
-Fl_Widget *Fl_Table_Type::widget(int X,int Y,int W,int H) {
-  Fluid_Table *table = new Fluid_Table(X, Y, W, H);
-  return table;
-}
-
-////////////////////////////////////////////////////////////////
-
-const char tabs_type_name[] = "Fl_Tabs";
-
-// Override group's resize behavior to do nothing to children:
-void itabs::resize(int X, int Y, int W, int H) {
-  Fl_Widget::resize(X,Y,W,H);
-  redraw();
-}
-
-Fl_Tabs_Type Fl_Tabs_type;	// the "factory"
-
-// This is called when user clicks on a widget in the window.  See
-// if it is a tab title, and adjust visibility and return new selection:
-// If none, return o unchanged:
-
-Fl_Type* Fl_Tabs_Type::click_test(int x, int y) {
-  Fl_Tabs *t = (Fl_Tabs*)o;
-  Fl_Widget *a = t->which(x,y);
-  if (!a) return 0; // didn't click on tab
-  // changing the visible tab has an impact on the generated
-  // source code, so mark this project as changed.
-  int changed = (a!=t->value());
-  // okay, run the tabs ui until they let go of mouse:
-  t->handle(FL_PUSH);
-  Fl::pushed(t);
-  while (Fl::pushed()==t) Fl::wait();
-  if (changed) set_modflag(1);
-  return (Fl_Type*)(t->value()->user_data());
-}
-
-////////////////////////////////////////////////////////////////
-
-const char wizard_type_name[] = "Fl_Wizard";
-
-// Override group's resize behavior to do nothing to children:
-void iwizard::resize(int X, int Y, int W, int H) {
-  Fl_Widget::resize(X,Y,W,H);
-  redraw();
-}
-
-Fl_Wizard_Type Fl_Wizard_type;	// the "factory"
-
-// This is called when o is created.  If it is in the tab group make
-// sure it is visible:
-
-void Fl_Group_Type::add_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Group*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-void Fl_Tabs_Type::add_child(Fl_Type* c, Fl_Type* before) {
-  Fl_Group_Type::add_child(c, before);
-}
-
-void Fl_Table_Type::add_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  if (((Fl_Table*)o)->children()==1) { // the FLuid_Table has one extra child
-    fl_message("Inserting child widgets into an Fl_Table is not recommended.\n"
-               "Please refer to the documentation on Fl_Table.");
-  }
-  ((Fl_Table*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-
-// This is called when o is deleted.  If it is in the tab group make
-// sure it is not visible:
-
-void Fl_Group_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Group*)o)->remove(c->o);
-  o->redraw();
-}
-
-void Fl_Tabs_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Tabs *t = (Fl_Tabs*)o;
-  if (t->value() == c->o) t->value(0);
-  Fl_Group_Type::remove_child(c);
-}
-
-void Fl_Table_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Table*)o)->remove(*(c->o));
-  o->redraw();
-}
-
-// move, don't change selected value:
-
-void Fl_Group_Type::move_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Group*)o)->remove(c->o);
-  ((Fl_Group*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-void Fl_Table_Type::move_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Table*)o)->remove(*(c->o));
-  ((Fl_Table*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-////////////////////////////////////////////////////////////////
-// live mode support
-
-Fl_Widget *Fl_Group_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fl_Group(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  if (live_widget) {
-    copy_properties();
-    Fl_Type *n;
-    for (n = next; n && n->level > level; n = n->next) {
-      if (n->level == level+1)
-        n->enter_live_mode();
-    }
-    grp->end();
-  }
-  return live_widget;
-}
-
-Fl_Widget *Fl_Tabs_Type::enter_live_mode(int) {
-  Fl_Tabs *grp = new Fl_Tabs(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  if (live_widget) {
-    copy_properties();
-    Fl_Type *n;
-    for (n = next; n && n->level > level; n = n->next) {
-      if (n->level == level+1)
-        n->enter_live_mode();
-    }
-    grp->end();
-  }
-  grp->value(((Fl_Tabs*)o)->value());
-  return live_widget;
-}
-
-Fl_Widget *Fl_Table_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fluid_Table(o->x(), o->y(), o->w(), o->h());
-  live_widget = grp;
-  if (live_widget) {
-    copy_properties();
-    grp->end();
-  }
-  return live_widget;
-}
-
-void Fl_Group_Type::leave_live_mode() {
-}
-
-/**
- * copy all properties from the edit widget to the live widget
- */
-void Fl_Group_Type::copy_properties() {
-  Fl_Widget_Type::copy_properties();
-}
-
-////////////////////////////////////////////////////////////////
-// some other group subclasses that fluid does not treat specially:
-
-#include <FL/Fl_Scroll.H>
-
-const char scroll_type_name[] = "Fl_Scroll";
-
-Fl_Widget *Fl_Scroll_Type::enter_live_mode(int) {
-  Fl_Group *grp = new Fl_Scroll(o->x(), o->y(), o->w(), o->h());
-  grp->show();
-  live_widget = grp;
-  if (live_widget) {
-    copy_properties();
-    Fl_Type *n;
-    for (n = next; n && n->level > level; n = n->next) {
-      if (n->level == level+1)
-        n->enter_live_mode();
-    }
-    grp->end();
-  }
-  return live_widget;
-}
-
-Fl_Menu_Item scroll_type_menu[] = {
-  {"BOTH", 0, 0, 0/*(void*)Fl_Scroll::BOTH*/},
-  {"HORIZONTAL", 0, 0, (void*)Fl_Scroll::HORIZONTAL},
-  {"VERTICAL", 0, 0, (void*)Fl_Scroll::VERTICAL},
-  {"HORIZONTAL_ALWAYS", 0, 0, (void*)Fl_Scroll::HORIZONTAL_ALWAYS},
-  {"VERTICAL_ALWAYS", 0, 0, (void*)Fl_Scroll::VERTICAL_ALWAYS},
-  {"BOTH_ALWAYS", 0, 0, (void*)Fl_Scroll::BOTH_ALWAYS},
-  {0}};
-
-Fl_Scroll_Type Fl_Scroll_type;	// the "factory"
-
-void Fl_Scroll_Type::copy_properties() {
-  Fl_Group_Type::copy_properties();
-  Fl_Scroll *s = (Fl_Scroll*)o, *d = (Fl_Scroll*)live_widget;
-  d->position(s->xposition(), s->yposition());
-  d->type(s->type()); // TODO: get this flag from Fl_Scroll_Type!
-  d->scrollbar.align(s->scrollbar.align());
-  d->hscrollbar.align(s->hscrollbar.align());
-}
-
-////////////////////////////////////////////////////////////////
-
-const char tile_type_name[] = "Fl_Tile";
-
-Fl_Tile_Type Fl_Tile_type;	// the "factory"
-
-void Fl_Tile_Type::copy_properties() {
-  Fl_Group_Type::copy_properties();
-  // no additional properties
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Menu_Type.cxx
+++ /dev/null
@@ -1,658 +1,0 @@
-//
-// "$Id$"
-//
-// Menu item code for the Fast Light Tool Kit (FLTK).
-//
-// Menu items are kludged by making a phony Fl_Box widget so the normal
-// widget panel can be used to control them.
-//
-// This file also contains code to make Fl_Menu_Button, Fl_Menu_Bar,
-// etc widgets.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include "Fl_Widget_Type.h"
-#include "alignment_panel.h"
-#include <FL/fl_message.H>
-#include <FL/Fl_Menu_.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Value_Input.H>
-#include <FL/Fl_Text_Display.H>
-#include "../src/flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-Fl_Menu_Item menu_item_type_menu[] = {
-  {"Normal",0,0,(void*)0},
-  {"Toggle",0,0,(void*)FL_MENU_BOX},
-  {"Radio",0,0,(void*)FL_MENU_RADIO},
-  {0}};
-
-extern int reading_file;
-extern int force_parent;
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-
-static char submenuflag;
-
-void Fl_Input_Choice_Type::build_menu() {
-  Fl_Input_Choice* w = (Fl_Input_Choice*)o;
-  // count how many Fl_Menu_Item structures needed:
-  int n = 0;
-  Fl_Type* q;
-  for (q = next; q && q->level > level; q = q->next) {
-    if (q->is_parent()) n++; // space for null at end of submenu
-    n++;
-  }
-  if (!n) {
-    if (menusize) delete[] (Fl_Menu_Item*)(w->menu());
-    w->menu(0);
-    menusize = 0;
-  } else {
-    n++; // space for null at end of menu
-    if (menusize<n) {
-      if (menusize) delete[] (Fl_Menu_Item*)(w->menu());
-      menusize = n+10;
-      w->menu(new Fl_Menu_Item[menusize]);
-    }
-    // fill them all in:
-    Fl_Menu_Item* m = (Fl_Menu_Item*)(w->menu());
-    int lvl = level+1;
-    for (q = next; q && q->level > level; q = q->next) {
-      Fl_Menu_Item_Type* i = (Fl_Menu_Item_Type*)q;
-      if (i->o->image()) i->o->image()->label(m);
-      else {
-        m->label(i->o->label() ? i->o->label() : "(nolabel)");
-        m->labeltype(i->o->labeltype());
-      }
-      m->shortcut(((Fl_Button*)(i->o))->shortcut());
-      m->callback(0,(void*)i);
-      m->flags = i->flags();
-      m->labelfont(i->o->labelfont());
-      m->labelsize(i->o->labelsize());
-      m->labelcolor(i->o->labelcolor());
-      if (q->is_parent()) {lvl++; m->flags |= FL_SUBMENU;}
-      m++;
-      int l1 =
-	(q->next && q->next->is_menu_item()) ? q->next->level : level;
-      while (lvl > l1) {m->label(0); m++; lvl--;}
-      lvl = l1;
-    }
-  }
-  o->redraw();
-}
-
-
-Fl_Type *Fl_Menu_Item_Type::make() {
-  // Find the current menu item:
-  Fl_Type* q = Fl_Type::current;
-  Fl_Type* p = q;
-  if (p) {
-    if ( (force_parent && q->is_menu_item()) || !q->is_parent()) p = p->parent;
-  }
-  force_parent = 0;
-  if (!p || !(p->is_menu_button() || (p->is_menu_item() && p->is_parent()))) {
-    fl_message("Please select a menu to add to");
-    return 0;
-  }
-  if (!o) {
-    o = new Fl_Button(0,0,100,20); // create template widget
-    o->labelsize(Fl_Widget_Type::default_size);
-  }
-
-  Fl_Menu_Item_Type* t = submenuflag ? new Fl_Submenu_Type() : new Fl_Menu_Item_Type();
-  t->o = new Fl_Button(0,0,100,20);
-  t->factory = this;
-  t->add(p);
-  if (!reading_file) t->label(submenuflag ? "submenu" : "item");
-  return t;
-}
-
-Fl_Type *Fl_Submenu_Type::make() {
-  submenuflag = 1;
-  Fl_Type* t = Fl_Menu_Item_Type::make();
-  submenuflag = 0;
-  return t;
-}
-
-Fl_Menu_Item_Type Fl_Menu_Item_type;
-Fl_Submenu_Type Fl_Submenu_type;
-
-////////////////////////////////////////////////////////////////
-// Writing the C code:
-
-// test functions in Fl_Widget_Type.C:
-int is_name(const char *c);
-const char *array_name(Fl_Widget_Type *o);
-int isdeclare(const char *c);
-
-// Search backwards to find the parent menu button and return it's name.
-// Also put in i the index into the button's menu item array belonging
-// to this menu item.
-const char* Fl_Menu_Item_Type::menu_name(int& i) {
-  i = 0;
-  Fl_Type* t = prev;
-  while (t && t->is_menu_item()) {
-    // be sure to count the {0} that ends a submenu:
-    if (t->level > t->next->level) i += (t->level - t->next->level);
-    // detect empty submenu:
-    else if (t->level == t->next->level && t->is_parent()) i++;
-    t = t->prev;
-    i++;
-  }
-  return unique_id(t, "menu", t->name(), t->label());
-}
-
-#include "Fluid_Image.h"
-
-void Fl_Menu_Item_Type::write_static() {
-  if (callback() && is_name(callback()) && !user_defined(callback()))
-    write_declare("extern void %s(Fl_Menu_*, %s);", callback(),
-                  user_data_type() ? user_data_type() : "void*");
-  for (int n=0; n < NUM_EXTRA_CODE; n++) {
-    if (extra_code(n) && isdeclare(extra_code(n)))
-      write_declare("%s", extra_code(n));
-  }
-  if (callback() && !is_name(callback())) {
-    // see if 'o' or 'v' used, to prevent unused argument warnings:
-    int use_o = 0;
-    int use_v = 0;
-    const char *d;
-    for (d = callback(); *d;) {
-      if (*d == 'o' && !is_id(d[1])) use_o = 1;
-      if (*d == 'v' && !is_id(d[1])) use_v = 1;
-      do d++; while (is_id(*d));
-      while (*d && !is_id(*d)) d++;
-    }
-    const char* cn = callback_name();
-    const char* k = class_name(1);
-    if (k) {
-      write_c("\nvoid %s::%s_i(Fl_Menu_*", k, cn);
-    } else {
-      write_c("\nstatic void %s(Fl_Menu_*", cn);
-    }
-    if (use_o) write_c(" o");
-    const char* ut = user_data_type() ? user_data_type() : "void*";
-    write_c(", %s", ut);
-    if (use_v) write_c(" v");
-    write_c(") {\n  %s", callback());
-    if (*(d-1) != ';') {
-      const char *p = strrchr(callback(), '\n');
-      if (p) p ++;
-      else p = callback();
-      // Only add trailing semicolon if the last line is not a preprocessor
-      // statement...
-      if (*p != '#' && *p) write_c(";");
-    }
-    write_c("\n}\n");
-    if (k) {
-      write_c("void %s::%s(Fl_Menu_* o, %s v) {\n", k, cn, ut);
-      write_c("  ((%s*)(o", k);
-      Fl_Type* t = parent; while (t->is_menu_item()) t = t->parent;
-      Fl_Type *q = 0;
-      // Go up one more level for Fl_Input_Choice, as these are groups themselves
-      if (t && !strcmp(t->type_name(), "Fl_Input_Choice"))
-        write_c("->parent()");
-      for (t = t->parent; t && t->is_widget() && !is_class(); q = t, t = t->parent) 
-        write_c("->parent()");
-      if (!q || strcmp(q->type_name(), "widget_class"))
-        write_c("->user_data()");
-      write_c("))->%s_i(o,v);\n}\n", cn);
-    }
-  }
-  if (image) {
-    if (image->written != write_number) {
-      image->write_static();
-      image->written = write_number;
-    }
-  }
-  if (next && next->is_menu_item()) return;
-  // okay, when we hit last item in the menu we have to write the
-  // entire array out:
-  const char* k = class_name(1);
-  if (k) {
-    int i; 
-    if (i18n_type) write_c("\nunsigned char %s::%s_i18n_done = 0;", k, menu_name(i));
-    write_c("\nFl_Menu_Item %s::%s[] = {\n", k, menu_name(i));
-  } else {
-    int i; 
-    if (i18n_type) write_c("\nunsigned char %s_i18n_done = 0;", menu_name(i));
-    write_c("\nFl_Menu_Item %s[] = {\n", menu_name(i));
-  }
-  Fl_Type* t = prev; while (t && t->is_menu_item()) t = t->prev;
-  for (Fl_Type* q = t->next; q && q->is_menu_item(); q = q->next) {
-    ((Fl_Menu_Item_Type*)q)->write_item();
-    int thislevel = q->level; if (q->is_parent()) thislevel++;
-    int nextlevel =
-      (q->next && q->next->is_menu_item()) ? q->next->level : t->level+1;
-    while (thislevel > nextlevel) {write_c(" {0,0,0,0,0,0,0,0,0},\n"); thislevel--;}
-  }
-  write_c(" {0,0,0,0,0,0,0,0,0}\n};\n");
-
-  if (k) {
-    // Write menu item variables...
-    t = prev; while (t && t->is_menu_item()) t = t->prev;
-    for (Fl_Type* q = t->next; q && q->is_menu_item(); q = q->next) {
-      Fl_Menu_Item_Type *m = (Fl_Menu_Item_Type*)q;
-      const char *c = array_name(m);
-      if (c) {
-        if (c==m->name()) {
-          // assign a menu item address directly to a variable
-          int i; 
-          const char* n = ((Fl_Menu_Item_Type *)q)->menu_name(i);
-          write_c("Fl_Menu_Item* %s::%s = %s::%s + %d;\n", k, c, k, n, i);
-        } else {
-          // if the name is an array, only define the array. 
-          // The actual assignment is in write_code1()
-          write_c("Fl_Menu_Item* %s::%s;\n", k, c);
-        }
-      }
-    }
-  }
-}
-
-int Fl_Menu_Item_Type::flags() {
-  int i = o->type();
-  if (((Fl_Button*)o)->value()) i |= FL_MENU_VALUE;
-  if (!o->active()) i |= FL_MENU_INACTIVE;
-  if (!o->visible()) i |= FL_MENU_INVISIBLE;
-  if (is_parent()) {
-    if (user_data() == NULL) i |= FL_SUBMENU;
-    else i |= FL_SUBMENU_POINTER;
-  }
-  if (hotspot()) i |= FL_MENU_DIVIDER;
-  return i;
-}
-
-void Fl_Menu_Item_Type::write_item() {
-  static const char * const labeltypes[] = {
-    "FL_NORMAL_LABEL",
-    "FL_NO_LABEL",
-    "FL_SHADOW_LABEL",
-    "FL_ENGRAVED_LABEL",
-    "FL_EMBOSSED_LABEL",
-    "FL_MULTI_LABEL",
-    "FL_ICON_LABEL",
-    "FL_IMAGE_LABEL"
-  };
-
-  write_comment_inline_c(" ");
-  write_c(" {");
-  if (image) write_c("0");
-  else if (label()) write_cstring(label()); // we will call i18n when the widget is instantiated for the first time
-  else write_c("\"\"");
-  if (((Fl_Button*)o)->shortcut()) {
-		int s = ((Fl_Button*)o)->shortcut();
-		if (use_FL_COMMAND && (s & (FL_CTRL|FL_META))) {
-			write_c(", FL_COMMAND|0x%x, ", s & ~(FL_CTRL|FL_META));
-		} else {
-			write_c(", 0x%x, ", s);
-		}
-  } else
-    write_c(", 0, ");
-  if (callback()) {
-    const char* k = is_name(callback()) ? 0 : class_name(1);
-    if (k) {
-      write_c(" (Fl_Callback*)%s::%s,", k, callback_name());
-    } else {
-      write_c(" (Fl_Callback*)%s,", callback_name());
-    }
-  } else
-    write_c(" 0,");
-  if (user_data())
-    write_c(" (void*)(%s),", user_data());
-  else
-    write_c(" 0,");
-  write_c(" %d, (uchar)%s, %d, %d, %d", flags(),
-	  labeltypes[o->labeltype()], o->labelfont(), o->labelsize(), o->labelcolor());
-  write_c("},\n");
-}
-
-void Fl_Menu_Item_Type::write_code1() {
-  int i; const char* mname = menu_name(i);
-
-  if (!prev->is_menu_item()) {
-    // for first menu item, declare the array
-    if (class_name(1)) {
-      if (i18n_type) write_h("  static unsigned char %s_i18n_done;\n", mname);
-      write_h("  static Fl_Menu_Item %s[];\n", mname);
-    } else {
-      if (i18n_type) write_h("extern unsigned char %s_i18n_done;\n", mname);
-      write_h("extern Fl_Menu_Item %s[];\n", mname);
-    }
-  }
-
-  const char *c = array_name(this);
-  if (c) {
-    if (class_name(1)) {
-      write_public(public_);
-      write_h("  static Fl_Menu_Item *%s;\n", c);
-    } else {
-      if (c==name())
-        write_h("#define %s (%s+%d)\n", c, mname, i);
-      else
-        write_h("extern Fl_Menu_Item *%s;\n", c);
-    }
-  }
-
-  if (callback()) {
-    if (!is_name(callback()) && class_name(1)) {
-      const char* cn = callback_name();
-      const char* ut = user_data_type() ? user_data_type() : "void*";
-      write_public(0);
-      write_h("  inline void %s_i(Fl_Menu_*, %s);\n", cn, ut);
-      write_h("  static void %s(Fl_Menu_*, %s);\n", cn, ut);
-    }
-  }
-
-  int init = 0;
-  // if the name is an array variable, assign the value here
-  if (name() && strchr(name(), '[')) {
-    write_c("%s%s = &%s[%d];\n", indent(), name(), mname, i);
-  }
-  if (image) {
-    if (!init) {
-      init = 1;
-      write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
-    }
-    image->write_code("o");
-  }
-  for (int n=0; n < NUM_EXTRA_CODE; n++)
-    if (extra_code(n) && !isdeclare(extra_code(n))) {
-      if (!init) {
-	init = 1;
-	write_c("%s{ Fl_Menu_Item* o = &%s[%d];\n", indent(), mname, i);
-      }
-      write_c("%s  %s\n", indent(), extra_code(n));
-    }
-  if (init) write_c("%s}\n",indent());
-}
-
-void Fl_Menu_Item_Type::write_code2() {}
-
-////////////////////////////////////////////////////////////////
-// This is the base class for widgets that contain a menu (ie
-// subclasses of Fl_Menu_.
-// This is a parent widget and menu items can be added as
-// children.  An actual array of Fl_Menu_Items is kept parallel
-// with the child objects and updated as they change.
-
-void Fl_Menu_Type::build_menu() {
-  Fl_Menu_* w = (Fl_Menu_*)o;
-  // count how many Fl_Menu_Item structures needed:
-  int n = 0;
-  Fl_Type* q;
-  for (q = next; q && q->level > level; q = q->next) {
-    if (q->is_parent()) n++; // space for null at end of submenu
-    n++;
-  }
-  if (!n) {
-    if (menusize) delete[] (Fl_Menu_Item*)(w->menu());
-    w->menu(0);
-    menusize = 0;
-  } else {
-    n++; // space for null at end of menu
-    if (menusize<n) {
-      if (menusize) delete[] (Fl_Menu_Item*)(w->menu());
-      menusize = n+10;
-      w->menu(new Fl_Menu_Item[menusize]);
-    }
-    // fill them all in:
-    Fl_Menu_Item* m = (Fl_Menu_Item*)(w->menu());
-    int lvl = level+1;
-    for (q = next; q && q->level > level; q = q->next) {
-      Fl_Menu_Item_Type* i = (Fl_Menu_Item_Type*)q;
-      if (i->o->image()) i->o->image()->label(m);
-      else {
-        m->label(i->o->label() ? i->o->label() : "(nolabel)");
-        m->labeltype(i->o->labeltype());
-      }
-      m->shortcut(((Fl_Button*)(i->o))->shortcut());
-      m->callback(0,(void*)i);
-      m->flags = i->flags();
-      m->labelfont(i->o->labelfont());
-      m->labelsize(i->o->labelsize());
-      m->labelcolor(i->o->labelcolor());
-      if (q->is_parent()) {lvl++; m->flags |= FL_SUBMENU;}
-      m++;
-      int l1 =
-	(q->next && q->next->is_menu_item()) ? q->next->level : level;
-      while (lvl > l1) {m->label(0); m++; lvl--;}
-      lvl = l1;
-    }
-  }
-  o->redraw();
-}
-
-Fl_Type* Fl_Menu_Type::click_test(int, int) {
-  if (selected) return 0; // let user move the widget
-  Fl_Menu_* w = (Fl_Menu_*)o;
-  if (!menusize) return 0;
-  const Fl_Menu_Item* save = w->mvalue();
-  w->value((Fl_Menu_Item*)0);
-  Fl::pushed(w);
-  w->handle(FL_PUSH);
-  const Fl_Menu_Item* m = w->mvalue();
-  if (m) {
-    // restore the settings of toggles & radio items:
-    if (m->flags & (FL_MENU_RADIO | FL_MENU_TOGGLE)) build_menu();
-    return (Fl_Type*)(m->user_data());
-  }
-  w->value(save);
-  return this;
-}
-
-void Fl_Menu_Type::write_code2() {
-  if (next && next->is_menu_item()) {
-    if (i18n_type) {
-      // take care of i18n now!
-      Fl_Menu_Item_Type *mi = (Fl_Menu_Item_Type*)next;
-      int i, nItem = 0, nLabel = 0;
-      const char *mName = mi->menu_name(i);
-      for (Fl_Type* q = next; q && q->is_menu_item(); q = q->next) {
-        if (((Fl_Menu_Item_Type*)q)->label()) nLabel++;
-	int thislevel = q->level; if (q->is_parent()) thislevel++;
-	int nextlevel =
-	    (q->next && q->next->is_menu_item()) ? q->next->level : next->level+1;
-	nItem += 1 + ((thislevel > nextlevel) ? (thislevel-nextlevel) : 0);
-      }
-      if (nLabel) {
-        write_c("%sif (!%s_i18n_done) {\n", indent(), mName);
-        write_c("%s  int i=0;\n", indent());
-        write_c("%s  for ( ; i<%d; i++)\n", indent(), nItem);
-        write_c("%s    if (%s[i].label())\n", indent(), mName);
-        switch (i18n_type) {
-          case 1:
-            write_c("%s      %s[i].label(%s(%s[i].label()));\n",
-                    indent(), mName, i18n_function, mName);
-            break;
-          case 2:
-            write_c("%s      %s[i].label(catgets(%s,%s,i+%d,%s[i].label()));\n",
-                    indent(), mName, i18n_file[0] ? i18n_file : "_catalog", 
-                    i18n_set, mi->msgnum(), mName);
-            break;
-        }
-        write_c("%s  %s_i18n_done = 1;\n", indent(), mName);
-        write_c("%s}\n", indent());
-      }
-    }
-    write_c("%s%s->menu(%s);\n", indent(), name() ? name() : "o",
-	    unique_id(this, "menu", name(), label()));
-  }
-  Fl_Widget_Type::write_code2();
-}
-
-void Fl_Menu_Type::copy_properties() {
-  Fl_Widget_Type::copy_properties();
-  Fl_Menu_ *s = (Fl_Menu_*)o, *d = (Fl_Menu_*)live_widget;
-  d->menu(s->menu());
-  d->down_box(s->down_box());
-  d->textcolor(s->textcolor());
-  d->textfont(s->textfont());
-  d->textsize(s->textsize());
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Menu_Button.H>
-Fl_Menu_Item button_type_menu[] = {
-  {"normal",0,0,(void*)0},
-  {"popup1",0,0,(void*)Fl_Menu_Button::POPUP1},
-  {"popup2",0,0,(void*)Fl_Menu_Button::POPUP2},
-  {"popup3",0,0,(void*)Fl_Menu_Button::POPUP3},
-  {"popup12",0,0,(void*)Fl_Menu_Button::POPUP12},
-  {"popup23",0,0,(void*)Fl_Menu_Button::POPUP23},
-  {"popup13",0,0,(void*)Fl_Menu_Button::POPUP13},
-  {"popup123",0,0,(void*)Fl_Menu_Button::POPUP123},
-  {0}};
-
-Fl_Menu_Button_Type Fl_Menu_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-Fl_Menu_Item dummymenu[] = {{"CHOICE"},{0}};
-
-Fl_Choice_Type Fl_Choice_type;
-
-Fl_Input_Choice_Type Fl_Input_Choice_type;
-
-void Fl_Input_Choice_Type::copy_properties() {
-  Fl_Widget_Type::copy_properties();
-  Fl_Input_Choice *s = (Fl_Input_Choice*)o, *d = (Fl_Input_Choice*)live_widget;
-  d->menu(s->menu());
-  d->down_box(s->down_box());
-  d->textcolor(s->textcolor());
-  d->textfont(s->textfont());
-  d->textsize(s->textsize());
-}
-
-Fl_Type* Fl_Input_Choice_Type::click_test(int, int) {
-  if (selected) return 0; // let user move the widget
-  Fl_Menu_* w = ((Fl_Input_Choice*)o)->menubutton();
-  if (!menusize) return 0;
-  const Fl_Menu_Item* save = w->mvalue();
-  w->value((Fl_Menu_Item*)0);
-  Fl::pushed(w);
-  w->handle(FL_PUSH);
-  const Fl_Menu_Item* m = w->mvalue();
-  if (m) {
-    // restore the settings of toggles & radio items:
-    if (m->flags & (FL_MENU_RADIO | FL_MENU_TOGGLE)) build_menu();
-    return (Fl_Type*)(m->user_data());
-  }
-  w->value(save);
-  return this;
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Menu_Bar_Type Fl_Menu_Bar_type;
-
-////////////////////////////////////////////////////////////////
-// Shortcut entry item in panel:
-
-#include <FL/Fl_Output.H>
-#include "Shortcut_Button.h"
-#include <FL/fl_draw.H>
-
-void Shortcut_Button::draw() {
-  if (value()) draw_box(FL_DOWN_BOX, (Fl_Color)9);
-  else draw_box(FL_UP_BOX, FL_WHITE);
-  fl_font(FL_HELVETICA,14); fl_color(FL_FOREGROUND_COLOR);
-	if (use_FL_COMMAND && (svalue & (FL_CTRL|FL_META))) {
-		char buf[1024];
-		fl_snprintf(buf, 1023, "Command+%s", fl_shortcut_label(svalue&~(FL_CTRL|FL_META)));
-		fl_draw(buf,x()+6,y(),w(),h(),FL_ALIGN_LEFT);
-	} else {
-		fl_draw(fl_shortcut_label(svalue),x()+6,y(),w(),h(),FL_ALIGN_LEFT);
-	}
-}
-
-int Shortcut_Button::handle(int e) {
-  when(0); type(FL_TOGGLE_BUTTON);
-  if (e == FL_KEYBOARD) {
-    if (!value()) return 0;
-    int v = Fl::event_text()[0];
-    if ( (v > 32 && v < 0x7f) || (v > 0xa0 && v <= 0xff) ) {
-      if (isupper(v)) {
-        v = tolower(v);
-        v |= FL_SHIFT;
-      }
-      v = v | (Fl::event_state()&(FL_META|FL_ALT|FL_CTRL));
-    } else {
-      v = (Fl::event_state()&(FL_META|FL_ALT|FL_CTRL|FL_SHIFT)) | Fl::event_key();
-      if (v == FL_BackSpace && svalue) v = 0;
-    }
-    if (v != svalue) {svalue = v; set_changed(); redraw(); do_callback(); }
-    return 1;
-  } else if (e == FL_UNFOCUS) {
-    int c = changed(); value(0); if (c) set_changed();
-    return 1;
-  } else if (e == FL_FOCUS) {
-    return value();
-  } else {
-    int r = Fl_Button::handle(e);
-    if (e == FL_RELEASE && value() && Fl::focus() != this) take_focus();
-    return r;
-  }
-}
-  
-void shortcut_in_cb(Shortcut_Button* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_button())
-      i->svalue = ((Fl_Button*)(current_widget->o))->shortcut();
-    else if (current_widget->is_input())
-      i->svalue = ((Fl_Input_*)(current_widget->o))->shortcut();
-    else if (current_widget->is_value_input())
-      i->svalue = ((Fl_Value_Input*)(current_widget->o))->shortcut();
-    else if (current_widget->is_text_display())
-      i->svalue = ((Fl_Text_Display*)(current_widget->o))->shortcut();
-    else {
-      i->hide();
-      return;
-    }
-    i->show();
-    i->redraw();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_button()) {
-	Fl_Button* b = (Fl_Button*)(((Fl_Widget_Type*)o)->o);
-        if (b->shortcut()!=i->svalue) mod = 1;
-	b->shortcut(i->svalue);
-	if (o->is_menu_item()) ((Fl_Widget_Type*)o)->redraw();
-      } else if (o->selected && o->is_input()) {
-	Fl_Input_* b = (Fl_Input_*)(((Fl_Widget_Type*)o)->o);
-        if (b->shortcut()!=i->svalue) mod = 1;
-	b->shortcut(i->svalue);
-      } else if (o->selected && o->is_value_input()) {
-	Fl_Value_Input* b = (Fl_Value_Input*)(((Fl_Widget_Type*)o)->o);
-        if (b->shortcut()!=i->svalue) mod = 1;
-	b->shortcut(i->svalue);
-      } else if (o->selected && o->is_text_display()) {
-	Fl_Text_Display* b = (Fl_Text_Display*)(((Fl_Widget_Type*)o)->o);
-        if (b->shortcut()!=i->svalue) mod = 1;
-	b->shortcut(i->svalue);
-      }
-    if (mod) set_modflag(1);
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Type.cxx
+++ /dev/null
@@ -1,1139 +1,0 @@
-//
-// "$Id$"
-//
-// Widget type code for the Fast Light Tool Kit (FLTK).
-//
-// Each object described by Fluid is one of these objects.  They
-// are all stored in a double-linked list.
-//
-// They "type" of the object is covered by the virtual functions.
-// There will probably be a lot of these virtual functions.
-//
-// The type browser is also a list of these objects, but they
-// are "factory" instances, not "real" ones.  These objects exist
-// only so the "make" method can be called on them.  They are
-// not in the linked list and are not written to files or
-// copied or otherwise examined.
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Browser_.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <stdio.h>
-
-#include "Fl_Type.h"
-#include "undo.h"
-
-#include <FL/Fl_Pixmap.H>
-#include "pixmaps/lock.xpm"
-#include "pixmaps/protected.xpm"
-//#include "pixmaps/unlock.xpm"
-
-static Fl_Pixmap	lock_pixmap(lock_xpm);
-static Fl_Pixmap	protected_pixmap(protected_xpm);
-//static Fl_Pixmap	unlock_pixmap(unlock_xpm);
-
-#include "pixmaps/flWindow.xpm"
-#include "pixmaps/flButton.xpm"
-#include "pixmaps/flCheckButton.xpm"
-#include "pixmaps/flRoundButton.xpm"
-#include "pixmaps/flBox.xpm"
-#include "pixmaps/flGroup.xpm"
-#include "pixmaps/flFunction.xpm"
-#include "pixmaps/flCode.xpm"
-#include "pixmaps/flCodeBlock.xpm"
-#include "pixmaps/flComment.xpm"
-#include "pixmaps/flData.xpm"
-#include "pixmaps/flDeclaration.xpm"
-#include "pixmaps/flDeclarationBlock.xpm"
-#include "pixmaps/flClass.xpm"
-#include "pixmaps/flTabs.xpm"
-#include "pixmaps/flInput.xpm"
-#include "pixmaps/flChoice.xpm"
-#include "pixmaps/flMenuitem.xpm"
-#include "pixmaps/flMenubar.xpm"
-#include "pixmaps/flSubmenu.xpm"
-#include "pixmaps/flScroll.xpm"
-#include "pixmaps/flTile.xpm"
-#include "pixmaps/flWizard.xpm"
-#include "pixmaps/flPack.xpm"
-#include "pixmaps/flReturnButton.xpm"
-#include "pixmaps/flLightButton.xpm"
-#include "pixmaps/flRepeatButton.xpm"
-#include "pixmaps/flMenuButton.xpm"
-#include "pixmaps/flOutput.xpm"
-#include "pixmaps/flTextDisplay.xpm"
-#include "pixmaps/flTextEdit.xpm"
-#include "pixmaps/flFileInput.xpm"
-#include "pixmaps/flBrowser.xpm"
-#include "pixmaps/flCheckBrowser.xpm"
-#include "pixmaps/flFileBrowser.xpm"
-#include "pixmaps/flClock.xpm"
-#include "pixmaps/flHelp.xpm"
-#include "pixmaps/flProgress.xpm"
-#include "pixmaps/flSlider.xpm"
-#include "pixmaps/flScrollBar.xpm"
-#include "pixmaps/flValueSlider.xpm"
-#include "pixmaps/flAdjuster.xpm"
-#include "pixmaps/flCounter.xpm"
-#include "pixmaps/flDial.xpm"
-#include "pixmaps/flRoller.xpm"
-#include "pixmaps/flValueInput.xpm"
-#include "pixmaps/flValueOutput.xpm"
-#include "pixmaps/flSpinner.xpm"
-#include "pixmaps/flWidgetClass.xpm"
-#include "pixmaps/flTree.xpm"
-#include "pixmaps/flTable.xpm"
-
-static Fl_Pixmap	window_pixmap(flWindow_xpm);
-static Fl_Pixmap	button_pixmap(flButton_xpm);
-static Fl_Pixmap	checkbutton_pixmap(flCheckButton_xpm);
-static Fl_Pixmap	roundbutton_pixmap(flRoundButton_xpm);
-static Fl_Pixmap	box_pixmap(flBox_xpm);
-static Fl_Pixmap	group_pixmap(flGroup_xpm);
-static Fl_Pixmap	function_pixmap(flFunction_xpm);
-static Fl_Pixmap	code_pixmap(flCode_xpm);
-static Fl_Pixmap	codeblock_pixmap(flCodeBlock_xpm);
-static Fl_Pixmap	comment_pixmap(flComment_xpm);
-static Fl_Pixmap	declaration_pixmap(flDeclaration_xpm);
-static Fl_Pixmap	declarationblock_pixmap(flDeclarationBlock_xpm);
-static Fl_Pixmap	class_pixmap(flClass_xpm);
-static Fl_Pixmap	tabs_pixmap(flTabs_xpm);
-static Fl_Pixmap	input_pixmap(flInput_xpm);
-static Fl_Pixmap	choice_pixmap(flChoice_xpm);
-static Fl_Pixmap	menuitem_pixmap(flMenuitem_xpm);
-static Fl_Pixmap	menubar_pixmap(flMenubar_xpm);
-static Fl_Pixmap	submenu_pixmap(flSubmenu_xpm);
-static Fl_Pixmap	scroll_pixmap(flScroll_xpm);
-static Fl_Pixmap	tile_pixmap(flTile_xpm);
-static Fl_Pixmap	wizard_pixmap(flWizard_xpm);
-static Fl_Pixmap	pack_pixmap(flPack_xpm);
-static Fl_Pixmap	returnbutton_pixmap(flReturnButton_xpm);
-static Fl_Pixmap	lightbutton_pixmap(flLightButton_xpm);
-static Fl_Pixmap	repeatbutton_pixmap(flRepeatButton_xpm);
-static Fl_Pixmap	menubutton_pixmap(flMenuButton_xpm);
-static Fl_Pixmap	output_pixmap(flOutput_xpm);
-static Fl_Pixmap	textdisplay_pixmap(flTextDisplay_xpm);
-static Fl_Pixmap	textedit_pixmap(flTextEdit_xpm);
-static Fl_Pixmap	fileinput_pixmap(flFileInput_xpm);
-static Fl_Pixmap	browser_pixmap(flBrowser_xpm);
-static Fl_Pixmap	checkbrowser_pixmap(flCheckBrowser_xpm);
-static Fl_Pixmap	filebrowser_pixmap(flFileBrowser_xpm);
-static Fl_Pixmap	clock_pixmap(flClock_xpm);
-static Fl_Pixmap	help_pixmap(flHelp_xpm);
-static Fl_Pixmap	progress_pixmap(flProgress_xpm);
-static Fl_Pixmap	slider_pixmap(flSlider_xpm);
-static Fl_Pixmap	scrollbar_pixmap(flScrollBar_xpm);
-static Fl_Pixmap	valueslider_pixmap(flValueSlider_xpm);
-static Fl_Pixmap	adjuster_pixmap(flAdjuster_xpm);
-static Fl_Pixmap	counter_pixmap(flCounter_xpm);
-static Fl_Pixmap	dial_pixmap(flDial_xpm);
-static Fl_Pixmap	roller_pixmap(flRoller_xpm);
-static Fl_Pixmap	valueinput_pixmap(flValueInput_xpm);
-static Fl_Pixmap	valueoutput_pixmap(flValueOutput_xpm);
-static Fl_Pixmap	spinner_pixmap(flSpinner_xpm);
-static Fl_Pixmap	widgetclass_pixmap(flWidgetClass_xpm);
-static Fl_Pixmap	data_pixmap(flData_xpm);
-static Fl_Pixmap	tree_pixmap(flTree_xpm);
-static Fl_Pixmap	table_pixmap(flTable_xpm);
-
-Fl_Pixmap *pixmap[] = { 0, &window_pixmap, &button_pixmap, &checkbutton_pixmap, &roundbutton_pixmap, /* 0..4 */
- &box_pixmap, &group_pixmap, &function_pixmap, &code_pixmap, &codeblock_pixmap, &declaration_pixmap, /* 5..10 */ 
- &declarationblock_pixmap, &class_pixmap, &tabs_pixmap, &input_pixmap, &choice_pixmap,               /* 11..15 */
- &menuitem_pixmap, &menubar_pixmap, &submenu_pixmap, &scroll_pixmap, &tile_pixmap, &wizard_pixmap,   /* 16..21 */
- &pack_pixmap, &returnbutton_pixmap, &lightbutton_pixmap, &repeatbutton_pixmap, &menubutton_pixmap,  /* 22..26 */
- &output_pixmap, &textdisplay_pixmap, &textedit_pixmap, &fileinput_pixmap, &browser_pixmap,          /* 27..32 */
- &checkbrowser_pixmap, &filebrowser_pixmap, &clock_pixmap, &help_pixmap, &progress_pixmap,	     /* 33..36 */
- &slider_pixmap, &scrollbar_pixmap, &valueslider_pixmap, &adjuster_pixmap, &counter_pixmap,          /* 37..41 */
- &dial_pixmap, &roller_pixmap, &valueinput_pixmap, &valueoutput_pixmap, &comment_pixmap,             /* 42..46 */
- &spinner_pixmap, &widgetclass_pixmap, &data_pixmap, &tree_pixmap, &table_pixmap };                  /* 47..51 */
-
-extern int show_comments;
-
-////////////////////////////////////////////////////////////////
-
-// Copy the given string str to buffer p with no more than maxl characters.
-// Add "..." if string was truncated.
-// If parameter quote is true (not 0) the string is quoted with "".
-// Quote characters are NOT counted.
-// The returned buffer (string) is terminated with a null byte.
-// Returns pointer to end of string (before terminating null byte).
-// Note: the buffer p must be large enough to hold (4 * (maxl+1) + 1) bytes
-// or (4 * (maxl+1) + 3) bytes if quoted, e.g. "123..." because each UTF-8
-// character can consist of 4 bytes, "..." adds 3 bytes, quotes '""' add two
-// bytes, and the terminating null byte adds another byte.
-// This supports Unicode code points up to U+10FFFF (standard as of 10/2016).
-// Sanity checks for illegal UTF-8 sequences are included.
-
-static char *copy_trunc(char *p, const char *str, int maxl, int quote) {
-
-  int size = 0;				// truncated string size in characters
-  int bs;				// size of UTF-8 character in bytes
-  const char *end = str + strlen(str);	// end of input string
-  if (quote) *p++ = '"';		// opening quote
-  while (size < maxl) {			// maximum <maxl> characters
-    if (!(*str & (-32))) break;		// end of string (0 or control char)
-    bs = fl_utf8len(*str);		// size of next character
-    if (bs <= 0) break;			// some error - leave
-    if (str + bs > end) break;		// UTF-8 sequence beyond end of string
-    while (bs--) *p++ = *str++;		// copy that character into the buffer
-    size++;				// count copied characters
-  }
-  if (*str) {				// string was truncated
-    strcpy(p,"..."); p += 3;
-  }
-  if (quote) *p++ = '"';		// closing quote
-  *p = 0;				// terminating null byte
-  return p;
-}
-
-////////////////////////////////////////////////////////////////
-
-class Widget_Browser : public Fl_Browser_ {
-  friend class Fl_Type;
-
-  // required routines for Fl_Browser_ subclass:
-  void *item_first() const ;
-  void *item_next(void *) const ;
-  void *item_prev(void *) const ;
-  int item_selected(void *) const ;
-  void item_select(void *,int);
-  int item_width(void *) const ;
-  int item_height(void *) const ;
-  void item_draw(void *,int,int,int,int) const ;
-  int incr_height() const ;
-
-public:	
-
-  int handle(int);
-  void callback();
-  Widget_Browser(int,int,int,int,const char * =0);
-};
-
-static Widget_Browser *widget_browser;
-Fl_Widget *make_widget_browser(int x,int y,int w,int h) {
-  return (widget_browser = new Widget_Browser(x,y,w,h));
-}
-
-void redraw_widget_browser(Fl_Type *caller)
-{
-  if (caller) {
-    widget_browser->display(caller);
-  }
-  widget_browser->redraw();
-}
-
-void select(Fl_Type *o, int v) {
-  widget_browser->select(o,v,1);
-  //  Fl_Type::current = o;
-}
-
-void select_only(Fl_Type *o) {
-  widget_browser->select_only(o,1);
-}
-
-void deselect() {
-  widget_browser->deselect();
-  //Fl_Type::current = 0; // this breaks the paste & merge functions
-}
-
-Fl_Type *Fl_Type::first;
-Fl_Type *Fl_Type::last;
-
-static void Widget_Browser_callback(Fl_Widget *o,void *) {
-  ((Widget_Browser *)o)->callback();
-}
-
-Widget_Browser::Widget_Browser(int X,int Y,int W,int H,const char*l)
-: Fl_Browser_(X,Y,W,H,l) {
-  type(FL_MULTI_BROWSER);
-  Fl_Widget::callback(Widget_Browser_callback);
-  when(FL_WHEN_RELEASE);
-}
-
-void *Widget_Browser::item_first() const {return Fl_Type::first;}
-
-void *Widget_Browser::item_next(void *l) const {return ((Fl_Type*)l)->next;}
-
-void *Widget_Browser::item_prev(void *l) const {return ((Fl_Type*)l)->prev;}
-
-int Widget_Browser::item_selected(void *l) const {return ((Fl_Type*)l)->new_selected;}
-
-void Widget_Browser::item_select(void *l,int v) {((Fl_Type*)l)->new_selected = v;}
-
-int Widget_Browser::item_height(void *l) const {
-  Fl_Type *t = (Fl_Type*)l;
-  if (t->visible) {
-    if (show_comments && t->comment())
-      return textsize()*2+4;
-    else
-      return textsize()+5;
-  }
-  return 0;
-}
-
-int Widget_Browser::incr_height() const {return textsize()+2;}
-
-static Fl_Type* pushedtitle;
-
-// Generate a descriptive text for this item, to put in browser & window titles
-const char* Fl_Type::title() {
-  const char* c = name(); if (c) return c;
-  return type_name();
-}
-
-extern const char* subclassname(Fl_Type*);
-
-
-/**
-  Draw an item in the widget browser.
-
-  A browser line starts with a variable size space. This space directly
-  relates to the level of the type entry.
-
-  If this type has the ability to store children, a triangle follows,
-  pointing right (closed) or pointing down (open, children shown).
-
-  Next follows an icon that is specific to the type. This makes it easy to
-  spot certain types.
-
-  Now follows some text. For classes and widgets, this is the type itself,
-  followed by the name of the object. Other objects show their content as
-  text, possibly abbreviated with an ellipsis.
-
-  \param v	v is a pointer to the actual widget type and can be cast safely
-		to Fl_Type
-  \param X,Y	these give the position in window coordinates of the top left 
-		corner of this line
-*/
-void Widget_Browser::item_draw(void *v, int X, int Y, int, int) const {
-  // cast to a more general type
-  Fl_Type *l = (Fl_Type *)v;
-
-  char buf[340]; // edit buffer: large enough to hold 80 UTF-8 chars + nul
-
-  // calculate the horizontal start position of this item
-  // 3 is the edge of the browser
-  // 13 is the width of the arrow that indicates children for the item
-  // 18 is the width of the icon
-  // 12 is the indent per level
-  X += 3 + 13 + 18 + l->level * 12;
-
-  // calculate the horizontal start position and width of the separator line
-  int x1 = X;
-  int w1 = w() - x1;
-
-  // items can contain a comment. If they do, the comment gets a second text
-  // line inside this browser line
-  int comment_incr = 0;
-  if (show_comments && l->comment()) {
-    copy_trunc(buf, l->comment(), 80, 0);
-    comment_incr = textsize()-1;
-    if (l->new_selected) fl_color(fl_contrast(FL_DARK_GREEN,FL_SELECTION_COLOR));
-    else fl_color(fl_contrast(FL_DARK_GREEN,color()));
-    fl_font(textfont()+FL_ITALIC, textsize()-2);
-    fl_draw(buf, X, Y+12);
-    Y += comment_incr/2;
-    comment_incr -= comment_incr/2;
-  }
-  
-  if (l->new_selected) fl_color(fl_contrast(FL_FOREGROUND_COLOR,FL_SELECTION_COLOR));
-  else fl_color(FL_FOREGROUND_COLOR);
-  
-  // Width=10: Draw the triangle that indicates possible children
-  if (l->is_parent()) {
-    X = X - 18 - 13;
-    if (!l->next || l->next->level <= l->level) {
-      if (l->open_!=(l==pushedtitle)) {
-        // an outlined triangle to the right indicates closed item, no children
-        fl_loop(X,Y+7,X+5,Y+12,X+10,Y+7);
-      } else {
-        // an outlined triangle to the bottom indicates open item, no children
-        fl_loop(X+2,Y+2,X+7,Y+7,X+2,Y+12);
-      }
-    } else {
-      if (l->open_!=(l==pushedtitle)) {
-        // a filled triangle to the right indicates closed item, with children
-        fl_polygon(X,Y+7,X+5,Y+12,X+10,Y+7);
-      } else {
-        // a filled triangle to the bottom indicates open item, with children
-        fl_polygon(X+2,Y+2,X+7,Y+7,X+2,Y+12);
-      }
-    }
-    X = X + 13 + 18;
-  }
-  
-  // Width=18: Draw the icon associated with the type.
-  Fl_Pixmap *pm = pixmap[l->pixmapID()];
-  if (pm) pm->draw(X-18, Y);
-  
-  // Add tags on top of the icon for locked and protected types.
-  switch (l->is_public()) {
-    case 0: lock_pixmap.draw(X - 17, Y); break;
-    case 2: protected_pixmap.draw(X - 17, Y); break;
-  }
-  
-  // Indent=12 per level: Now write the text that comes after the graphics representation
-  Y += comment_incr;
-  if (l->is_widget() || l->is_class()) {
-    const char* c = subclassname(l);
-    if (!strncmp(c,"Fl_",3)) c += 3;
-    fl_font(textfont(), textsize());
-    fl_draw(c, X, Y+13);
-    X += int(fl_width(c)+fl_width('n'));
-    c = l->name();
-    if (c) {
-      fl_font(textfont()|FL_BOLD, textsize());
-      fl_draw(c, X, Y+13);
-    } else if ((c = l->label())) {
-      copy_trunc(buf, c, 20, 1); // quoted string
-      fl_draw(buf, X, Y+13);
-    }
-  } else {
-    copy_trunc(buf, l->title(), 55, 0);
-    fl_font(textfont() | (l->is_code_block() && (l->level==0 || l->parent->is_class())?0:FL_BOLD), textsize());
-    fl_draw(buf, X, Y+13);
-  }
-
-  // draw a thin line below the item if this item is not selected
-  // (if it is selected this additional line would look bad)
-  if (!l->new_selected) {
-    fl_color(fl_lighter(FL_GRAY));
-    fl_line(x1,Y+16,x1+w1,Y+16);
-  }
-}
-
-int Widget_Browser::item_width(void *v) const {
-
-  char buf[340]; // edit buffer: large enough to hold 80 UTF-8 chars + nul
-
-  Fl_Type *l = (Fl_Type *)v;
-
-  if (!l->visible) return 0;
-
-  int W = 3 + 13 + 18 + l->level * 12;
-
-  if (l->is_widget() || l->is_class()) {
-    const char* c = l->type_name();
-    if (!strncmp(c,"Fl_",3)) c += 3;
-    fl_font(textfont(), textsize());
-    W += int(fl_width(c) + fl_width('n'));
-    c = l->name();
-    if (c) {
-      fl_font(textfont()|FL_BOLD, textsize());
-      W += int(fl_width(c));
-    } else if (l->label()) {
-      copy_trunc(buf, l->label(), 20, 1); // quoted string
-      W += int(fl_width(buf));
-    }
-  } else {
-    copy_trunc(buf, l->title(), 55, 0);
-    fl_font(textfont() | (l->is_code_block() && (l->level==0 || l->parent->is_class())?0:FL_BOLD), textsize());
-    W += int(fl_width(buf));
-  }
-
-  return W;
-}
-
-void redraw_browser() {
-  widget_browser->redraw();
-}
-
-void Widget_Browser::callback() {
-  selection_changed((Fl_Type*)selection());
-}
-
-
-/**
-  Override the event handling for this browser.
-
-  The vertical mouse position corresponds to an entry in the type tree.
-  The horizontal position has the following hot zones:
-  - 0-3 is the widget frame and ignored
-  - the next hot zone starts 12*indent pixels further to the right
-  - the next 13 pixels refer to the arrow that indicates children for the item
-  - 18 pixels follow for the icon
-  - the remaining part is filled with text
-
-  \param[in] e the incoming event type
-  \return 0 if the event is not supported, and 1 if the event was "used up"
-*/
-int Widget_Browser::handle(int e) {
-  static Fl_Type *title;
-  Fl_Type *l;
-  int X,Y,W,H; bbox(X,Y,W,H);
-  switch (e) {
-  case FL_PUSH:
-    if (!Fl::event_inside(X,Y,W,H)) break;
-    l = (Fl_Type*)find_item(Fl::event_y());
-    if (l) {
-      X += 3 + 12*l->level - hposition();
-      if (l->is_parent() && Fl::event_x()>X && Fl::event_x()<X+13) {
-	title = pushedtitle = l;
-	redraw_line(l);
-	return 1;
-      }
-    }
-    break;
-  case FL_DRAG:
-    if (!title) break;
-    l = (Fl_Type*)find_item(Fl::event_y());
-    if (l) {
-      X += 3 + 12*l->level - hposition();
-      if (l->is_parent() && Fl::event_x()>X && Fl::event_x()<X+13) ;
-      else l = 0;
-    }
-    if (l != pushedtitle) {
-      if (pushedtitle) redraw_line(pushedtitle);
-      if (l) redraw_line(l);
-      pushedtitle = l;
-    }
-    return 1;
-  case FL_RELEASE:
-    if (!title) {
-      l = (Fl_Type*)find_item(Fl::event_y());
-      if (l && l->new_selected && (Fl::event_clicks() || Fl::event_state(FL_CTRL)))
-	l->open();
-      break;
-    }
-    l = pushedtitle;
-    title = pushedtitle = 0;
-    if (l) {
-      if (l->open_) {
-	l->open_ = 0;
-	for (Fl_Type*k = l->next; k&&k->level>l->level; k = k->next)
-	  k->visible = 0;
-      } else {
-	l->open_ = 1;
-	for (Fl_Type*k=l->next; k&&k->level>l->level;) {
-	  k->visible = 1;
-	  if (k->is_parent() && !k->open_) {
-	    Fl_Type *j;
-	    for (j = k->next; j && j->level>k->level; j = j->next) {/*empty*/}
-	    k = j;
-	  } else
-	    k = k->next;
-	}
-      }
-      redraw();
-    }
-    return 1;
-  }
-  return Fl_Browser_::handle(e);
-}
-
-Fl_Type::Fl_Type() {
-  factory = 0;
-  parent = 0;
-  next = prev = 0;
-  selected = new_selected = 0;
-  visible = 0;
-  name_ = 0;
-  label_ = 0;
-  user_data_ = 0;
-  user_data_type_ = 0;
-  callback_ = 0;
-  comment_ = 0;
-  rtti = 0;
-  level = 0;
-  code_position = header_position = -1;
-  code_position_end = header_position_end = -1;
-}
-
-static void fixvisible(Fl_Type *p) {
-  Fl_Type *t = p;
-  for (;;) {
-    if (t->parent) t->visible = t->parent->visible && t->parent->open_;
-    else t->visible = 1;
-    t = t->next;
-    if (!t || t->level <= p->level) break;
-  }
-}
-
-// turn a click at x,y on this into the actual picked object:
-Fl_Type* Fl_Type::click_test(int,int) {return 0;}
-void Fl_Type::add_child(Fl_Type*, Fl_Type*) {}
-void Fl_Type::move_child(Fl_Type*, Fl_Type*) {}
-void Fl_Type::remove_child(Fl_Type*) {}
-
-// add a list of widgets as a new child of p:
-void Fl_Type::add(Fl_Type *p) {
-  if (p && parent == p) return;
-  undo_checkpoint();
-  parent = p;
-  Fl_Type *end = this;
-  while (end->next) end = end->next;
-  Fl_Type *q;
-  int newlevel;
-  if (p) {
-    for (q = p->next; q && q->level > p->level; q = q->next) {/*empty*/}
-    newlevel = p->level+1;
-  } else {
-    q = 0;
-    newlevel = 0;
-  }
-  for (Fl_Type *t = this->next; t; t = t->next) t->level += (newlevel-level);
-  level = newlevel;
-  if (q) {
-    prev = q->prev;
-    prev->next = this;
-    q->prev = end;
-    end->next = q;
-  } else if (first) {
-    prev = last;
-    prev->next = this;
-    end->next = 0;
-    last = end;
-  } else {
-    first = this;
-    last = end;
-    prev = end->next = 0;
-  }
-  if (p) p->add_child(this,0);
-  open_ = 1;
-  fixvisible(this);
-  set_modflag(1);
-  widget_browser->redraw();
-}
-
-// add to a parent before another widget:
-void Fl_Type::insert(Fl_Type *g) {
-  Fl_Type *end = this;
-  while (end->next) end = end->next;
-  parent = g->parent;
-  int newlevel = g->level;
-  visible = g->visible;
-  for (Fl_Type *t = this->next; t; t = t->next) t->level += newlevel-level;
-  level = newlevel;
-  prev = g->prev;
-  if (prev) prev->next = this; else first = this;
-  end->next = g;
-  g->prev = end;
-  fixvisible(this);
-  if (parent) parent->add_child(this, g);
-  widget_browser->redraw();
-}
-
-// Return message number for I18N...
-int
-Fl_Type::msgnum() {
-  int		count;
-  Fl_Type	*p;
-
-  for (count = 0, p = this; p;) {
-    if (p->label()) count ++;
-    if (p != this && p->is_widget() && ((Fl_Widget_Type *)p)->tooltip()) count ++;
-
-    if (p->prev) p = p->prev;
-    else p = p->parent;
-  }
-
-  return count;
-}
-
-
-// delete from parent:
-Fl_Type *Fl_Type::remove() {
-  Fl_Type *end = this;
-  for (;;) {
-    if (!end->next || end->next->level <= level) break;
-    end = end->next;
-  }
-  if (prev) prev->next = end->next;
-  else first = end->next;
-  if (end->next) end->next->prev = prev;
-  else last = prev;
-  Fl_Type *r = end->next;
-  prev = end->next = 0;
-  if (parent) parent->remove_child(this);
-  parent = 0;
-  widget_browser->redraw();
-  selection_changed(0);
-  return r;
-}
-
-// update a string member:
-int storestring(const char *n, const char * & p, int nostrip) {
-  if (n == p) return 0;
-  undo_checkpoint();
-  int length = 0;
-  if (n) { // see if blank, strip leading & trailing blanks
-    if (!nostrip) while (isspace((int)(unsigned char)*n)) n++;
-    const char *e = n + strlen(n);
-    if (!nostrip) while (e > n && isspace((int)(unsigned char)*(e-1))) e--;
-    length = e-n;
-    if (!length) n = 0;
-  }    
-  if (n == p) return 0;
-  if (n && p && !strncmp(n,p,length) && !p[length]) return 0;
-  if (p) free((void *)p);
-  if (!n || !*n) {
-    p = 0;
-  } else {
-    char *q = (char *)malloc(length+1);
-    strlcpy(q,n,length+1);
-    p = q;
-  }
-  set_modflag(1);
-  return 1;
-}
-
-void Fl_Type::name(const char *n) {
-  int nostrip = is_comment();
-  if (storestring(n,name_,nostrip)) {
-    if (visible) widget_browser->redraw();
-  }
-}
-
-void Fl_Type::label(const char *n) {
-  if (storestring(n,label_,1)) {
-    setlabel(label_);
-    if (visible && !name_) widget_browser->redraw();
-  }
-}
-
-void Fl_Type::callback(const char *n) {
-  storestring(n,callback_);
-}
-
-void Fl_Type::user_data(const char *n) {
-  storestring(n,user_data_);
-}
-
-void Fl_Type::user_data_type(const char *n) {
-  storestring(n,user_data_type_);
-}
-
-void Fl_Type::comment(const char *n) {
-  if (storestring(n,comment_,1)) {
-    if (visible) widget_browser->redraw();
-  }
-}
-
-void Fl_Type::open() {
-  printf("Open of '%s' is not yet implemented\n",type_name());
-}
-
-void Fl_Type::setlabel(const char *) {}
-
-Fl_Type::~Fl_Type() {
-  // warning: destructor only works for widgets that have been add()ed.
-  if (widget_browser) widget_browser->deleting(this);
-  if (prev) prev->next = next; else first = next;
-  if (next) next->prev = prev; else last = prev;
-  if (current == this) current = 0;
-  if (parent) parent->remove_child(this);
-  if (name_) free((void*)name_);
-  if (label_) free((void*)label_);
-  if (callback_) free((void*)callback_);
-  if (user_data_) free((void*)user_data_);
-  if (user_data_type_) free((void*)user_data_type_);
-  if (comment_) free((void*)comment_);
-}
-
-int Fl_Type::is_parent() const {return 0;}
-int Fl_Type::is_widget() const {return 0;}
-int Fl_Type::is_valuator() const {return 0;}
-int Fl_Type::is_spinner() const {return 0;}
-int Fl_Type::is_button() const {return 0;}
-int Fl_Type::is_input() const {return 0;}
-int Fl_Type::is_value_input() const {return 0;}
-int Fl_Type::is_text_display() const {return 0;}
-int Fl_Type::is_menu_item() const {return 0;}
-int Fl_Type::is_menu_button() const {return 0;}
-int Fl_Type::is_group() const {return 0;}
-int Fl_Type::is_window() const {return 0;}
-int Fl_Type::is_code() const {return 0;}
-int Fl_Type::is_code_block() const {return 0;}
-int Fl_Type::is_decl_block() const {return 0;}
-int Fl_Type::is_comment() const {return 0;}
-int Fl_Type::is_class() const {return 0;}
-int Fl_Type::is_public() const {return 1;}
-
-int Fl_Code_Type::is_public()const { return -1; }
-int Fl_CodeBlock_Type::is_public()const { return -1; }
-
-
-////////////////////////////////////////////////////////////////
-
-Fl_Type *in_this_only; // set if menu popped-up in window
-
-void select_all_cb(Fl_Widget *,void *) {
-  Fl_Type *p = Fl_Type::current ? Fl_Type::current->parent : 0;
-  if (in_this_only) {
-    Fl_Type *t = p;
-    for (; t && t != in_this_only; t = t->parent) {/*empty*/}
-    if (t != in_this_only) p = in_this_only;
-  }
-  for (;;) {
-    if (p) {
-      int foundany = 0;
-      for (Fl_Type *t = p->next; t && t->level>p->level; t = t->next) {
-	if (!t->new_selected) {widget_browser->select(t,1,0); foundany = 1;}
-      }
-      if (foundany) break;
-      p = p->parent;
-    } else {
-      for (Fl_Type *t = Fl_Type::first; t; t = t->next)
-	widget_browser->select(t,1,0);
-      break;
-    }
-  }
-  selection_changed(p);
-}
-
-void select_none_cb(Fl_Widget *,void *) {
-  Fl_Type *p = Fl_Type::current ? Fl_Type::current->parent : 0;
-  if (in_this_only) {
-    Fl_Type *t = p;
-    for (; t && t != in_this_only; t = t->parent) {/*empty*/}
-    if (t != in_this_only) p = in_this_only;
-  }
-  for (;;) {
-    if (p) {
-      int foundany = 0;
-      for (Fl_Type *t = p->next; t && t->level>p->level; t = t->next) {
-	if (t->new_selected) {widget_browser->select(t,0,0); foundany = 1;}
-      }
-      if (foundany) break;
-      p = p->parent;
-    } else {
-      for (Fl_Type *t = Fl_Type::first; t; t = t->next)
-	widget_browser->select(t,0,0);
-      break;
-    }
-  }
-  selection_changed(p);
-}
-
-static void delete_children(Fl_Type *p) {
-  Fl_Type *f;
-  for (f = p; f && f->next && f->next->level > p->level; f = f->next) {/*empty*/}
-  for (; f != p; ) {
-    Fl_Type *g = f->prev;
-    delete f;
-    f = g;
-  }
-}
-
-void delete_all(int selected_only) {
-  for (Fl_Type *f = Fl_Type::first; f;) {
-    if (f->selected || !selected_only) {
-      delete_children(f);
-      Fl_Type *g = f->next;
-      delete f;
-      f = g;
-    } else f = f->next;
-  }
-  if(!selected_only) {
-		include_H_from_C=1;
-		use_FL_COMMAND=0;
-	}
-
-  selection_changed(0);
-}
-
-// move f (and it's children) into list before g:
-// returns pointer to whatever is after f & children
-void Fl_Type::move_before(Fl_Type* g) {
-  if (level != g->level) printf("move_before levels don't match! %d %d\n",
-				level, g->level);
-  Fl_Type* n;
-  for (n = next; n && n->level > level; n = n->next) {/*empty*/}
-  if (n == g) return;
-  Fl_Type *l = n ? n->prev : Fl_Type::last;
-  prev->next = n;
-  if (n) n->prev = prev; else Fl_Type::last = prev;
-  prev = g->prev;
-  l->next = g;
-  if (prev) prev->next = this; else Fl_Type::first = this;
-  g->prev = l;
-  if (parent && is_widget()) parent->move_child(this,g);
-  widget_browser->inserting(g, this);
-  widget_browser->display(this);
-  widget_browser->redraw();
-}
-
-
-// move selected widgets in their parent's list:
-void earlier_cb(Fl_Widget*,void*) {
-  Fl_Type *f;
-  int mod = 0;
-  for (f = Fl_Type::first; f; ) {
-    Fl_Type* nxt = f->next;
-    if (f->selected) {
-      Fl_Type* g;
-      for (g = f->prev; g && g->level > f->level; g = g->prev) {/*empty*/}
-      if (g && g->level == f->level && !g->selected) {
-        f->move_before(g);
-        mod = 1;
-      }
-    }
-    f = nxt;
-  }
-  if (mod) set_modflag(1);
-}
-
-void later_cb(Fl_Widget*,void*) {
-  Fl_Type *f;
-  int mod = 0;
-  for (f = Fl_Type::last; f; ) {
-    Fl_Type* prv = f->prev;
-    if (f->selected) {
-      Fl_Type* g;
-      for (g = f->next; g && g->level > f->level; g = g->next) {/*empty*/}
-      if (g && g->level == f->level && !g->selected) {
-        g->move_before(f);
-        mod = 1;
-      }
-    }
-    f = prv;
-  }
-  if (mod) set_modflag(1);
-}
-
-////////////////////////////////////////////////////////////////
-
-// write a widget and all it's children:
-void Fl_Type::write() {
-    write_indent(level);
-    write_word(type_name());
-    
-    if (is_class()) {
-      const char * p = 	((Fl_Class_Type*)this)->prefix();
-      if (p &&	strlen(p))
-        write_word(p);
-    }
-
-    write_word(name());
-    write_open(level);
-    write_properties();
-    write_close(level);
-    if (!is_parent()) return;
-    // now do children:
-    write_open(level);
-    Fl_Type *child;
-    for (child = next; child && child->level > level; child = child->next)
-	if (child->level == level+1) child->write();
-    write_close(level);
-}
-
-void Fl_Type::write_properties() {
-  // repeat this for each attribute:
-  if (label()) {
-    write_indent(level+1);
-    write_word("label");
-    write_word(label());
-  }
-  if (user_data()) {
-    write_indent(level+1);
-    write_word("user_data");
-    write_word(user_data());
-  }
-  if (user_data_type()) {
-    write_word("user_data_type");
-    write_word(user_data_type());
-  }
-  if (callback()) {
-    write_indent(level+1);
-    write_word("callback");
-    write_word(callback());
-  }
-  if (comment()) {
-    write_indent(level+1);
-    write_word("comment");
-    write_word(comment());
-  }
-  if (is_parent() && open_) write_word("open");
-  if (selected) write_word("selected");
-}
-
-void Fl_Type::read_property(const char *c) {
-  if (!strcmp(c,"label"))
-    label(read_word());
-  else if (!strcmp(c,"user_data"))
-    user_data(read_word());
-  else if (!strcmp(c,"user_data_type"))
-    user_data_type(read_word());
-  else if (!strcmp(c,"callback"))
-    callback(read_word());
-  else if (!strcmp(c,"comment"))
-    comment(read_word());
-  else if (!strcmp(c,"open"))
-    open_ = 1;
-  else if (!strcmp(c,"selected"))
-    select(this,1);
-  else
-    read_error("Unknown property \"%s\"", c);
-}
-
-int Fl_Type::read_fdesign(const char*, const char*) {return 0;}
-
-/**
-  Return 1 if the list contains a function with the given signature at the top level.
- */
-int has_toplevel_function(const char *rtype, const char *sig) {
-  Fl_Type *child;
-  for (child = Fl_Type::first; child; child = child->next) {
-    if (!child->is_in_class() && strcmp(child->type_name(), "Function")==0) {
-      const Fl_Function_Type *fn = (const Fl_Function_Type*)child;
-      if (fn->has_signature(rtype, sig))
-        return 1;
-    }
-  }
-  return 0;
-}
-
-/**
-  Write a comment into the header file.
-*/
-void Fl_Type::write_comment_h(const char *pre)
-{
-  if (comment() && *comment()) {
-    write_h("%s/**\n", pre);
-    const char *s = comment();
-    write_h("%s ", pre);
-    while(*s) {
-      if (*s=='\n') {
-        if (s[1]) {
-          write_h("\n%s ", pre);
-        }
-      } else {
-        write_h("%c", *s); // FIXME this is much too slow!
-      }
-      s++;
-    }
-    write_h("\n%s*/\n", pre);
-  }
-}
-
-/**
-  Write a comment into the source file.
-*/
-void Fl_Type::write_comment_c(const char *pre)
-{
-  if (comment() && *comment()) {
-    write_c("%s/**\n", pre);
-    const char *s = comment();
-    write_c("%s ", pre);
-    while(*s) {
-      if (*s=='\n') {
-        if (s[1]) {
-          write_c("\n%s ", pre);
-        }
-      } else {
-        write_c("%c", *s); // FIXME this is much too slow!
-      }
-      s++;
-    }
-    write_c("\n%s*/\n", pre);
-  }
-}
-
-/**
-  Write a comment into the source file.
-*/
-void Fl_Type::write_comment_inline_c(const char *pre)
-{
-  if (comment() && *comment()) {
-    const char *s = comment();
-    if (strchr(s, '\n')==0L) {
-      // single line comment
-      if (pre) write_c("%s", pre);
-      write_c("// %s\n", s);
-      if (!pre) write_c("%s  ", indent());
-    } else {
-      write_c("%s/*\n", pre?pre:"");
-      if (pre) write_c("%s ", pre); else write_c("%s   ", indent());
-      while(*s) {
-        if (*s=='\n') {
-          if (s[1]) {
-            if (pre) write_c("\n%s ", pre); else write_c("\n%s   ", indent());
-          }
-        } else {
-          write_c("%c", *s); // FIXME this is much too slow!
-        }
-        s++;
-      }
-      if (pre) write_c("\n%s */\n", pre); else write_c("\n%s   */\n", indent());
-      if (!pre) write_c("%s  ", indent());
-    }
-  }
-}
-
-/**
-  Make sure that the given item is visible in the browser by opening
-  all parent groups and moving the item into the visible space.
-*/
-void reveal_in_browser(Fl_Type *t) {
-  Fl_Type *p = t->parent;
-  if (p) {
-    for (;;) {
-      if (!p->open_)
-        p->open_ = 1;
-      if (!p->parent) break;
-      p = p->parent;
-    }
-    fixvisible(p);
-  }
-  widget_browser->display(t);
-  redraw_browser();
-}
-
-/**
-  Build widgets and dataset needed in live mode.
-  \return a widget pointer that the live mode initiator can 'show()'
-  \see leave_live_mode()
-*/
-Fl_Widget *Fl_Type::enter_live_mode(int) {
-  return 0L;
-}
-
-/**
-  Release all resources created when entering live mode.
-  \see enter_live_mode()
-*/
-void Fl_Type::leave_live_mode() {
-}
-
-/**
-  Copy all needed properties for this type into the live object.
-*/
-void Fl_Type::copy_properties() {
-}
-
-/**
-  Check whether callback \p cbname is declared anywhere else by the user.
-
-  \b Warning: this just checks that the name is declared somewhere,
-  but it should probably also check that the name corresponds to a
-  plain function or a member function within the same class and that
-  the parameter types match.
- */
-int Fl_Type::user_defined(const char* cbname) const {
-  for (Fl_Type* p = Fl_Type::first; p ; p = p->next)
-    if (strcmp(p->type_name(), "Function") == 0 && p->name() != 0)
-      if (strncmp(p->name(), cbname, strlen(cbname)) == 0)
-        if (p->name()[strlen(cbname)] == '(')
-          return 1;
-  return 0;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Type.h
+++ /dev/null
@@ -1,917 +1,0 @@
-//
-// "$Id$"
-//
-// Widget type header file for the Fast Light Tool Kit (FLTK).
-//
-// Each object described by Fluid is one of these objects.  They
-// are all stored in a double-linked list.
-//
-// There is also a single "factory" instance of each type of this.
-// The method "make()" is called on this factory to create a new
-// instance of this object.  It could also have a "copy()" function,
-// but it was easier to implement this by using the file read/write
-// that is needed to save the setup anyways.
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu.H>
-#include <FL/Fl_Plugin.H>
-#include "Fluid_Image.h"
-#include <FL/fl_draw.H>
-#include <stdarg.h>
-
-#ifdef WIN32
-  #include "ExternalCodeEditor_WIN32.h"
-#else
-  #include "ExternalCodeEditor_UNIX.h"
-#endif
-
-void set_modflag(int mf);
-
-class Fl_Type {
-
-  friend class Widget_Browser;
-  friend Fl_Widget *make_type_browser(int,int,int,int,const char *);
-  friend class Fl_Window_Type;
-  virtual void setlabel(const char *); // virtual part of label(char*)
-
-protected:
-
-  Fl_Type();
-
-  const char *name_;
-  const char *label_;
-  const char *callback_;
-  const char *user_data_;
-  const char *user_data_type_;
-  const char *comment_;
-
-public:	// things that should not be public:
-
-  Fl_Type *parent; // parent, which is previous in list
-  char new_selected; // browser highlight
-  char selected; // copied here by selection_changed()
-  char open_;	// state of triangle in browser
-  char visible; // true if all parents are open
-  char rtti;	// hack because I have no rtti, this is 0 for base class
-  int level;	// number of parents over this
-  static Fl_Type *first, *last; // linked list of all objects
-  Fl_Type *next, *prev;	// linked list of all objects
-
-  Fl_Type *factory;
-  const char *callback_name();
-
-  int code_position, header_position;
-  int code_position_end, header_position_end;
-
-protected:
-  int user_defined(const char* cbname) const;
-
-public:
-
-  virtual ~Fl_Type();
-  virtual Fl_Type *make() = 0;
-
-  void add(Fl_Type *parent); // add as new child
-  void insert(Fl_Type *n); // insert into list before n
-  Fl_Type* remove();	// remove from list
-  void move_before(Fl_Type*); // move before a sibling
-
-  virtual const char *title(); // string for browser
-  virtual const char *type_name() = 0; // type for code output
-  virtual const char *alt_type_name() { return type_name(); } // alternate type for FLTK2 code output
-
-  const char *name() const {return name_;}
-  void name(const char *);
-  const char *label() const {return label_;}
-  void label(const char *);
-  const char *callback() const {return callback_;}
-  void callback(const char *);
-  const char *user_data() const {return user_data_;}
-  void user_data(const char *);
-  const char *user_data_type() const {return user_data_type_;}
-  void user_data_type(const char *);
-  const char *comment() { return comment_; }
-  void comment(const char *);
-
-  virtual Fl_Type* click_test(int,int);
-  virtual void add_child(Fl_Type*, Fl_Type* beforethis);
-  virtual void move_child(Fl_Type*, Fl_Type* beforethis);
-  virtual void remove_child(Fl_Type*);
-
-  static Fl_Type *current;  // most recently picked object
-  virtual void open();	// what happens when you double-click
-
-  // read and write data to a saved file:
-  virtual void write();
-  virtual void write_properties();
-  virtual void read_property(const char *);
-  virtual int read_fdesign(const char*, const char*);
-
-  // write code, these are called in order:
-  virtual void write_static(); // write static stuff to .c file
-  virtual void write_code1(); // code and .h before children
-  virtual void write_code2(); // code and .h after children
-  void write_comment_h(const char *ind=""); // write the commentary text into the header file
-  void write_comment_c(const char *ind=""); // write the commentary text into the source file
-  void write_comment_inline_c(const char *ind=0L); // write the commentary text
-
-  // live mode
-  virtual Fl_Widget *enter_live_mode(int top=0); // build wdgets needed for live mode
-  virtual void leave_live_mode(); // free allocated resources
-  virtual void copy_properties(); // copy properties from this type into a potetial live object
-
-  // get message number for I18N
-  int msgnum();
-
-  // fake rtti:
-  virtual int is_parent() const;
-  virtual int is_widget() const;
-  virtual int is_button() const;
-  virtual int is_input() const;
-  virtual int is_value_input() const;
-  virtual int is_text_display() const;
-  virtual int is_valuator() const;
-  virtual int is_spinner() const;
-  virtual int is_menu_item() const;
-  virtual int is_menu_button() const;
-  virtual int is_group() const;
-  virtual int is_window() const;
-  virtual int is_code() const;
-  virtual int is_code_block() const;
-  virtual int is_decl_block() const;
-  virtual int is_comment() const;
-  virtual int is_class() const;
-  virtual int is_public() const;
-
-  virtual int pixmapID() { return 0; }
-
-  const char* class_name(const int need_nest) const;
-  const class Fl_Class_Type* is_in_class() const;
-};
-
-class Fl_Function_Type : public Fl_Type {
-  const char* return_type;
-  char public_, cdecl_, constructor, havewidgets;
-public:
-  Fl_Function_Type() : 
-    Fl_Type(), 
-    return_type(0L), public_(0), cdecl_(0), constructor(0), havewidgets(0)
-  { }
-  ~Fl_Function_Type() {
-    if (return_type) free((void*)return_type);
-  }
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  int ismain() {return name_ == 0;}
-  virtual const char *type_name() {return "Function";}
-  virtual const char *title() {
-    return name() ? name() : "main()";
-  }
-  int is_parent() const {return 1;}
-  int is_code_block() const {return 1;}
-  virtual int is_public() const;
-  int pixmapID() { return 7; }
-  void write_properties();
-  void read_property(const char *);
-  int has_signature(const char *, const char*) const;
-};
-
-class Fl_Code_Type : public Fl_Type {
-  ExternalCodeEditor editor_;
-public:
-  Fl_Type *make();
-  void write();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "code";}
-  int is_code_block() const {return 0;}
-  int is_code() const {return 1;}
-  int pixmapID() { return 8; }
-  virtual int is_public() const;
-  // See if external editor is open
-  int is_editing() {
-    return editor_.is_editing();
-  }
-  // Reap the editor's pid
-  // Returns:
-  //   -2 -- editor not open
-  //   -1 -- wait failed
-  //    0 -- process still running
-  //   >0 -- process finished + reaped (returns pid)
-  //
-  int reap_editor() {
-    return editor_.reap_editor();
-  }
-  // Handle external editor file modifications
-  // If changed, record keeping is updated and file's contents is loaded into ram
-  //
-  // Returns:
-  //     0 -- file unchanged or not editing
-  //     1 -- file changed, internal records updated, 'code' has new content
-  //    -1 -- error getting file info (get_ms_errmsg() has reason)
-  //
-  // TODO: Figure out how saving a fluid file can be intercepted to grab 
-  //       current contents of editor file..
-  //
-  int handle_editor_changes() {
-    const char *newcode = 0;
-    switch ( editor_.handle_changes(&newcode) ) {
-      case 1: {            // (1)=changed
-        name(newcode);     // update value in ram
-        free((void*)newcode);
-        return 1;
-      }
-      case -1: return -1;  // (-1)=error -- couldn't read file (dialog showed reason)
-      default: break;      // (0)=no change
-    }
-    return 0;
-  }
-};
-
-class Fl_CodeBlock_Type : public Fl_Type {
-  const char* after;
-public:
-  Fl_CodeBlock_Type() : Fl_Type(), after(0L) { }
-  ~Fl_CodeBlock_Type() {
-    if (after) free((void*)after);
-  }
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "codeblock";}
-  int is_code_block() const {return 1;}
-  int is_parent() const {return 1;}
-  virtual int is_public() const;
-  int pixmapID() { return 9; }
-  void write_properties();
-  void read_property(const char *);
-};
-
-class Fl_Decl_Type : public Fl_Type {
-protected:
-  char public_;
-  char static_;
-public:
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "decl";}
-  void write_properties();
-  void read_property(const char *);
-  virtual int is_public() const;
-  int pixmapID() { return 10; }
-};
-
-class Fl_Data_Type : public Fl_Decl_Type {
-  const char *filename_;
-public:
-  Fl_Data_Type() : Fl_Decl_Type(), filename_(0L) { }
-  ~Fl_Data_Type() {
-    if (filename_) free((void*)filename_);
-  }
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "data";}
-  void write_properties();
-  void read_property(const char *);
-  int pixmapID() { return 49; }
-};
-
-class Fl_DeclBlock_Type : public Fl_Type {
-  const char* after;
-  char public_;
-public:
-  Fl_DeclBlock_Type() : Fl_Type(), after(0L) { }
-  ~Fl_DeclBlock_Type() {
-    if (after) free((void*)after);
-  }
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "declblock";}
-  void write_properties();
-  void read_property(const char *);
-  int is_parent() const {return 1;}
-  int is_decl_block() const {return 1;}
-  virtual int is_public() const;
-  int pixmapID() { return 11; }
-};
-
-class Fl_Comment_Type : public Fl_Type {
-  char in_c_, in_h_, style_;
-  char title_buf[64];
-public:
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "comment";}
-  virtual const char *title(); // string for browser
-  void write_properties();
-  void read_property(const char *);
-  virtual int is_public() const { return 1; }
-  virtual int is_comment() const { return 1; }
-  int pixmapID() { return 46; }
-};
-
-class Fl_Class_Type : public Fl_Type {
-  const char* subclass_of;
-  char public_;
-public:
-  Fl_Class_Type() : Fl_Type(), subclass_of(0L) { }
-  ~Fl_Class_Type() {
-    if (subclass_of) free((void*)subclass_of);
-  }
-  
-  // state variables for output:
-  char write_public_state; // true when public: has been printed
-  Fl_Class_Type* parent_class; // save class if nested
-//
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void open();
-  virtual const char *type_name() {return "class";}
-  int is_parent() const {return 1;}
-  int is_decl_block() const {return 1;}
-  int is_class() const {return 1;}
-  virtual int is_public() const;
-  int pixmapID() { return 12; }
-  void write_properties();
-  void read_property(const char *);
-
-  // class prefix attribute access
-  void prefix(const char* p);
-  const char*  prefix() const {return class_prefix;}
-  int has_function(const char*, const char*) const;
-private:
-  const char* class_prefix;
-};
-
-#define NUM_EXTRA_CODE 4
-
-class Fl_Widget_Type : public Fl_Type {
-  virtual Fl_Widget *widget(int,int,int,int) = 0;
-  virtual Fl_Widget_Type *_make() = 0; // virtual constructor
-  virtual void setlabel(const char *);
-
-  const char *extra_code_[NUM_EXTRA_CODE];
-  const char *subclass_;
-  const char *tooltip_;
-  const char *image_name_;
-  const char *inactive_name_;
-  uchar hotspot_;
-
-protected:
-
-  void write_static();
-  void write_code1();
-  void write_widget_code();
-  void write_extra_code();
-  void write_block_close();
-  void write_code2();
-  void write_color(const char*, Fl_Color);
-  Fl_Widget *live_widget;
-
-public:
-  static int default_size;
-
-  const char *xclass; // junk string, used for shortcut
-  Fl_Widget *o;
-  int public_;
-
-  Fluid_Image *image;
-  void setimage(Fluid_Image *);
-  Fluid_Image *inactive;
-  void setinactive(Fluid_Image *);
-
-  Fl_Widget_Type();
-  Fl_Type *make();
-  void open();
-
-  const char *extra_code(int n) const {return extra_code_[n];}
-  void extra_code(int n,const char *);
-  const char *subclass() const {return subclass_;}
-  void subclass(const char *);
-  const char *tooltip() const {return tooltip_;}
-  void tooltip(const char *);
-  const char *image_name() const {return image_name_;}
-  void image_name(const char *);
-  const char *inactive_name() const {return inactive_name_;}
-  void inactive_name(const char *);
-  uchar hotspot() const {return hotspot_;}
-  void hotspot(uchar v) {hotspot_ = v;}
-  uchar resizable() const;
-  void resizable(uchar v);
-
-  virtual int textstuff(int what, Fl_Font &, int &, Fl_Color &);
-  virtual Fl_Menu_Item *subtypes();
-
-  virtual int is_widget() const;
-  virtual int is_public() const;
-
-  virtual void write_properties();
-  virtual void read_property(const char *);
-  virtual int read_fdesign(const char*, const char*);
-
-  virtual Fl_Widget *enter_live_mode(int top=0);
-  virtual void leave_live_mode();
-  virtual void copy_properties();
-
-  virtual void ideal_size(int &w, int &h);
-  virtual void ideal_spacing(int &x, int &y);
-
-  ~Fl_Widget_Type();
-  void redraw();
-};
-
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Pack.H>
-#include <FL/Fl_Wizard.H>
-
-class igroup : public Fl_Group {
-public:
-  void resize(int,int,int,int);
-  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
-  igroup(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) {Fl_Group::current(0);}
-};
-
-class itabs : public Fl_Tabs {
-public:
-  void resize(int,int,int,int);
-  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
-  itabs(int X,int Y,int W,int H) : Fl_Tabs(X,Y,W,H) {}
-};
-
-class iwizard : public Fl_Wizard {
-public:
-  void resize(int,int,int,int);
-  void full_resize(int X, int Y, int W, int H) { Fl_Group::resize(X, Y, W, H); }
-  iwizard(int X,int Y,int W,int H) : Fl_Wizard(X,Y,W,H) {}
-};
-
-class Fl_Group_Type : public Fl_Widget_Type {
-public:
-  virtual const char *type_name() {return "Fl_Group";}
-  virtual const char *alt_type_name() {return "fltk::Group";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    igroup *g = new igroup(X,Y,W,H); Fl_Group::current(0); return g;}
-  Fl_Widget_Type *_make() {return new Fl_Group_Type();}
-  Fl_Type *make();
-  void write_code1();
-  void write_code2();
-  void add_child(Fl_Type*, Fl_Type*);
-  void move_child(Fl_Type*, Fl_Type*);
-  void remove_child(Fl_Type*);
-  int is_parent() const {return 1;}
-  int is_group() const {return 1;}
-  int pixmapID() { return 6; }
-
-  virtual Fl_Widget *enter_live_mode(int top=0);
-  virtual void leave_live_mode();
-  virtual void copy_properties();
-};
-
-extern const char pack_type_name[];
-extern Fl_Menu_Item pack_type_menu[];
-
-class Fl_Pack_Type : public Fl_Group_Type {
-  Fl_Menu_Item *subtypes() {return pack_type_menu;}
-public:
-  virtual const char *type_name() {return pack_type_name;}
-  virtual const char *alt_type_name() {return "fltk::PackedGroup";}
-  Fl_Widget_Type *_make() {return new Fl_Pack_Type();}
-  int pixmapID() { return 22; }
-  void copy_properties();
-};
-
-extern const char table_type_name[];
-
-class Fl_Table_Type : public Fl_Group_Type {
-public:
-  virtual const char *type_name() {return table_type_name;}
-  virtual const char *alt_type_name() {return "fltk::TableGroup";}
-  Fl_Widget_Type *_make() {return new Fl_Table_Type();}
-  Fl_Widget *widget(int X,int Y,int W,int H);
-  int pixmapID() { return 51; }
-  virtual Fl_Widget *enter_live_mode(int top=0);
-  void add_child(Fl_Type*, Fl_Type*);
-  void move_child(Fl_Type*, Fl_Type*);
-  void remove_child(Fl_Type*);
-};
-
-extern const char tabs_type_name[];
-
-class Fl_Tabs_Type : public Fl_Group_Type {
-public:
-  virtual void ideal_spacing(int &x, int &y) {
-     x = 10;
-     fl_font(o->labelfont(), o->labelsize());
-     y = fl_height() + o->labelsize() - 6;
-  }
-  virtual const char *type_name() {return tabs_type_name;}
-  virtual const char *alt_type_name() {return "fltk::TabGroup";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    itabs *g = new itabs(X,Y,W,H); Fl_Group::current(0); return g;}
-  Fl_Widget_Type *_make() {return new Fl_Tabs_Type();}
-  Fl_Type* click_test(int,int);
-  void add_child(Fl_Type*, Fl_Type*);
-  void remove_child(Fl_Type*);
-  int pixmapID() { return 13; }
-  Fl_Widget *enter_live_mode(int top=0);
-};
-
-extern const char scroll_type_name[];
-extern Fl_Menu_Item scroll_type_menu[];
-
-class Fl_Scroll_Type : public Fl_Group_Type {
-  Fl_Menu_Item *subtypes() {return scroll_type_menu;}
-public:
-  virtual const char *type_name() {return scroll_type_name;}
-  virtual const char *alt_type_name() {return "fltk::ScrollGroup";}
-  Fl_Widget_Type *_make() {return new Fl_Scroll_Type();}
-  int pixmapID() { return 19; }
-  Fl_Widget *enter_live_mode(int top=0);
-  void copy_properties();
-};
-
-extern const char tile_type_name[];
-
-class Fl_Tile_Type : public Fl_Group_Type {
-public:
-  virtual const char *type_name() {return tile_type_name;}
-  virtual const char *alt_type_name() {return "fltk::TileGroup";}
-  Fl_Widget_Type *_make() {return new Fl_Tile_Type();}
-  int pixmapID() { return 20; }
-  void copy_properties();
-};
-
-extern const char wizard_type_name[];
-
-class Fl_Wizard_Type : public Fl_Group_Type {
-public:
-  virtual const char *type_name() {return wizard_type_name;}
-  virtual const char *alt_type_name() {return "fltk::WizardGroup";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    iwizard *g = new iwizard(X,Y,W,H); Fl_Group::current(0); return g;}
-  Fl_Widget_Type *_make() {return new Fl_Wizard_Type();}
-  int pixmapID() { return 21; }
-};
-
-extern Fl_Menu_Item window_type_menu[];
-
-class Fl_Window_Type : public Fl_Widget_Type {
-protected:
-
-  Fl_Menu_Item* subtypes() {return window_type_menu;}
-
-  friend class Overlay_Window;
-  int mx,my;		// mouse position during dragging
-  int x1,y1;		// initial position of selection box
-  int bx,by,br,bt;	// bounding box of selection before snapping
-  int sx,sy,sr,st;	// bounding box of selection after snapping to guides
-  int dx,dy;
-  int drag;		// which parts of bbox are being moved
-  int numselected;	// number of children selected
-  enum {LEFT=1,RIGHT=2,BOTTOM=4,TOP=8,DRAG=16,BOX=32};
-  void draw_overlay();
-  void newdx();
-  void newposition(Fl_Widget_Type *,int &x,int &y,int &w,int &h);
-  int handle(int);
-  virtual void setlabel(const char *);
-  void write_code1();
-  void write_code2();
-  Fl_Widget_Type *_make() {return 0;} // we don't call this
-  Fl_Widget *widget(int,int,int,int) {return 0;}
-  int recalc;		// set by fix_overlay()
-  void moveallchildren();
-  int pixmapID() { return 1; }
-
-public:
-
-  Fl_Window_Type() { drag = dx = dy = 0; sr_min_w = sr_min_h = sr_max_w = sr_max_h = 0; }
-  uchar modal, non_modal;
-
-  Fl_Type *make();
-  virtual const char *type_name() {return "Fl_Window";}
-  virtual const char *alt_type_name() {return "fltk::Window";}
-
-  void open();
-
-  void fix_overlay();			// Update the bounding box, etc
-  uchar *read_image(int &ww, int &hh);	// Read an image of the window
-
-  virtual void write_properties();
-  virtual void read_property(const char *);
-  virtual int read_fdesign(const char*, const char*);
-
-  void add_child(Fl_Type*, Fl_Type*);
-  void move_child(Fl_Type*, Fl_Type*);
-  void remove_child(Fl_Type*);
-
-  int is_parent() const {return 1;}
-  int is_group() const {return 1;}
-  int is_window() const {return 1;}
-
-  Fl_Widget *enter_live_mode(int top=0);
-  void leave_live_mode();
-  void copy_properties();
-
-  int sr_min_w, sr_min_h, sr_max_w, sr_max_h;
-};
-
-class Fl_Widget_Class_Type : private Fl_Window_Type {
-public:
-  Fl_Widget_Class_Type() {
-    write_public_state = 0;
-    wc_relative = 0;
-  }
-  // state variables for output:
-  char write_public_state; // true when public: has been printed
-  char wc_relative; // if true, reposition all child widgets in an Fl_Group
-
-  virtual void write_properties();
-  virtual void read_property(const char *);
-
-  void write_code1();
-  void write_code2();
-  Fl_Type *make();
-  virtual const char *type_name() {return "widget_class";}
-  int pixmapID() { return 48; }
-  int is_parent() const {return 1;}
-  int is_code_block() const {return 1;}
-  int is_decl_block() const {return 1;}
-  int is_class() const {return 1;}
-};
-
-
-extern Fl_Menu_Item menu_item_type_menu[];
-
-class Fl_Menu_Item_Type : public Fl_Widget_Type {
-public:
-  Fl_Menu_Item* subtypes() {return menu_item_type_menu;}
-  const char* type_name() {return "MenuItem";}
-  const char* alt_type_name() {return "fltk::Item";}
-  Fl_Type* make();
-  int is_menu_item() const {return 1;}
-  int is_button() const {return 1;} // this gets shortcut to work
-  Fl_Widget* widget(int,int,int,int) {return 0;}
-  Fl_Widget_Type* _make() {return 0;}
-  const char* menu_name(int& i);
-  int flags();
-  void write_static();
-  void write_item();
-  void write_code1();
-  void write_code2();
-  int pixmapID() { return 16; }
-};
-
-class Fl_Submenu_Type : public Fl_Menu_Item_Type {
-public:
-  Fl_Menu_Item* subtypes() {return 0;}
-  const char* type_name() {return "Submenu";}
-  const char* alt_type_name() {return "fltk::ItemGroup";}
-  int is_parent() const {return 1;}
-  int is_button() const {return 0;} // disable shortcut
-  Fl_Type* make();
-  // changes to submenu must propagate up so build_menu is called
-  // on the parent Fl_Menu_Type:
-  void add_child(Fl_Type*a, Fl_Type*b) {parent->add_child(a,b);}
-  void move_child(Fl_Type*a, Fl_Type*b) {parent->move_child(a,b);}
-  void remove_child(Fl_Type*a) {parent->remove_child(a);}
-  int pixmapID() { return 18; }
-};
-
-
-#include <FL/Fl_Menu_.H>
-class Fl_Menu_Type : public Fl_Widget_Type {
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-    Fl_Menu_ *myo = (Fl_Menu_*)(w==4 ? ((Fl_Widget_Type*)this->factory)->o : this->o);
-    switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-    }
-    return 1;
-  }
-public:
-  int is_menu_button() const {return 1;}
-  int is_parent() const {return 1;}
-  int menusize;
-  virtual void build_menu();
-  Fl_Menu_Type() : Fl_Widget_Type() {menusize = 0;}
-  ~Fl_Menu_Type() {
-    if (menusize) delete[] (Fl_Menu_Item*)(((Fl_Menu_*)o)->menu());
-  }
-  void add_child(Fl_Type*, Fl_Type*) {build_menu();}
-  void move_child(Fl_Type*, Fl_Type*) {build_menu();}
-  void remove_child(Fl_Type*) {build_menu();}
-  Fl_Type* click_test(int x, int y);
-  void write_code2();
-  void copy_properties();
-};
-
-extern Fl_Menu_Item button_type_menu[];
-
-#include <FL/Fl_Menu_Button.H>
-class Fl_Menu_Button_Type : public Fl_Menu_Type {
-  Fl_Menu_Item *subtypes() {return button_type_menu;}
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Widget_Type::ideal_size(w, h);
-    w += 2 * ((o->labelsize() - 3) & ~1) + o->labelsize() - 4;
-    h = (h / 5) * 5;
-    if (h < 15) h = 15;
-    if (w < (15 + h)) w = 15 + h;
-  }
-  virtual const char *type_name() {return "Fl_Menu_Button";}
-  virtual const char *alt_type_name() {return "fltk::MenuButton";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    return new Fl_Menu_Button(X,Y,W,H,"menu");}
-  Fl_Widget_Type *_make() {return new Fl_Menu_Button_Type();}
-  int pixmapID() { return 26; }
-};
-
-extern Fl_Menu_Item dummymenu[];
-
-#include <FL/Fl_Choice.H>
-class Fl_Choice_Type : public Fl_Menu_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Widget_Type::ideal_size(w, h);
-    int w1 = o->h() - Fl::box_dh(o->box());
-    if (w1 > 20) w1 = 20;
-    w1 = (w1 - 4) / 3;
-    if (w1 < 1) w1 = 1;
-    w += 2 * w1 + o->labelsize() - 4;
-    h = (h / 5) * 5;
-    if (h < 15) h = 15;
-    if (w < (15 + h)) w = 15 + h;
-  }
-  virtual const char *type_name() {return "Fl_Choice";}
-  virtual const char *alt_type_name() {return "fltk::Choice";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    Fl_Choice *myo = new Fl_Choice(X,Y,W,H,"choice:");
-    myo->menu(dummymenu);
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Choice_Type();}
-  int pixmapID() { return 15; }
-};
-
-#include <FL/Fl_Input_Choice.H>
-class Fl_Input_Choice_Type : public Fl_Menu_Type {
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-    Fl_Input_Choice *myo = (Fl_Input_Choice*)(w==4 ? ((Fl_Widget_Type*)this->factory)->o : this->o);
-    switch (w) {
-    case 4:
-    case 0: f = (Fl_Font)myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-    }
-    return 1;
-  }
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Input_Choice *myo = (Fl_Input_Choice *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    w = o->w() - 20 - Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + 20 + Fl::box_dw(o->box());
-    if (h < 15) h = 15;
-    if (w < (15 + h)) w = 15 + h;
-  }
-  virtual const char *type_name() {return "Fl_Input_Choice";}
-  virtual const char *alt_type_name() {return "fltk::ComboBox";}
-  virtual Fl_Type* click_test(int,int);
-  Fl_Widget *widget(int X,int Y,int W,int H) {
-    Fl_Input_Choice *myo = new Fl_Input_Choice(X,Y,W,H,"input choice:");
-    myo->menu(dummymenu);
-    myo->value("input");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Input_Choice_Type();}
-  virtual void build_menu();
-  int pixmapID() { return 15; }
-  void copy_properties();
-};
-
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Menu_Bar.H>
-class Fl_Menu_Bar_Type : public Fl_Menu_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    w = o->window()->w();
-    h = ((o->labelsize() + Fl::box_dh(o->box()) + 4) / 5) * 5;
-    if (h < 15) h = 15;
-  }
-  virtual const char *type_name() {return "Fl_Menu_Bar";}
-  virtual const char *alt_type_name() {return "fltk::MenuBar";}
-  Fl_Widget *widget(int X,int Y,int W,int H) {return new Fl_Menu_Bar(X,Y,W,H);}
-  Fl_Widget_Type *_make() {return new Fl_Menu_Bar_Type();}
-  int pixmapID() { return 17; }
-};
-// object list operations:
-Fl_Widget *make_widget_browser(int X,int Y,int W,int H);
-void redraw_widget_browser(Fl_Type*);
-extern int modflag;
-void delete_all(int selected_only=0);
-void selection_changed(Fl_Type* new_current);
-void reveal_in_browser(Fl_Type*);
-int has_toplevel_function(const char *rtype, const char *sig);
-
-// file operations:
-#  ifdef __GNUC__
-#    define __fl_attr(x) __attribute__ (x)
-#  else
-#    define __fl_attr(x)
-#  endif // __GNUC__
-
-void write_word(const char *);
-void write_string(const char *,...) __fl_attr((__format__ (__printf__, 1, 2)));
-int write_file(const char *, int selected_only = 0);
-int write_code(const char *cfile, const char *hfile);
-int write_strings(const char *sfile);
-
-int write_declare(const char *, ...) __fl_attr((__format__ (__printf__, 1, 2)));
-int is_id(char);
-const char* unique_id(void* o, const char*, const char*, const char*);
-void write_c(const char*, ...) __fl_attr((__format__ (__printf__, 1, 2)));
-void vwrite_c(const char* format, va_list args);
-void write_h(const char*, ...) __fl_attr((__format__ (__printf__, 1, 2)));
-void write_cstring(const char *);
-void write_cstring(const char *,int length);
-void write_cdata(const char *,int length);
-void write_indent(int n);
-void write_open(int);
-void write_close(int n);
-extern int write_number;
-extern int write_sourceview;
-void write_public(int state); // writes pubic:/private: as needed
-extern int indentation;
-extern const char* indent();
-
-int read_file(const char *, int merge);
-const char *read_word(int wantbrace = 0);
-void read_error(const char *format, ...);
-
-// check legality of c code (sort of) and return error:
-const char *c_check(const char *c, int type = 0);
-
-// replace a string pointer with new value, strips leading/trailing blanks:
-int storestring(const char *n, const char * & p, int nostrip=0);
-
-extern int include_H_from_C;
-extern int use_FL_COMMAND;
-
-/*
- * This class is needed for additional command line plugins.
- */
-class Fl_Commandline_Plugin : public Fl_Plugin {
-public:
-  Fl_Commandline_Plugin(const char *name)
-  : Fl_Plugin(klass(), name) { }
-  virtual const char *klass() { return "commandline"; }
-  // return a unique name for this plugin
-  virtual const char *name() = 0;
-  // return a help text for all supported commands
-  virtual const char *help() = 0;
-  // handle a command and return the number of args used, or 0
-  virtual int arg(int argc, char **argv, int &i) = 0;
-  // optional test the plugin
-  virtual int test(const char *a1=0L, const char *a2=0L, const char *a3=0L) { 
-    return 0;
-  }
-  // show a GUI panel to edit some data
-  virtual void show_panel() { }
-};
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Widget_Type.cxx
+++ /dev/null
@@ -1,2905 +1,0 @@
-//
-// "$Id$"
-//
-// Widget type code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Table.H>
-#include <FL/Fl_Input.H>
-#include "Fl_Widget_Type.h"
-#include "alignment_panel.h"
-#include <FL/fl_message.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Spinner.H>
-#include <FL/Fl_Window.H>
-#include "../src/flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-// Make an Fl_Widget_Type subclass instance.
-// It figures out the automatic size and parent of the new widget,
-// creates the Fl_Widget (by calling the virtual function _make),
-// adds it to the Fl_Widget hierarchy, creates a new Fl_Type
-// instance, sets the widget pointers, and makes all the display
-// update correctly...
-
-extern int reading_file;
-int force_parent;
-extern int gridx;
-extern int gridy;
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-
-int Fl_Widget_Type::default_size = FL_NORMAL_SIZE;
-
-int Fl_Widget_Type::is_widget() const {return 1;}
-int Fl_Widget_Type::is_public() const {return public_;}
-
-const char* subclassname(Fl_Type* l) {
-  if (l->is_widget()) {
-    Fl_Widget_Type* p = (Fl_Widget_Type*)l;
-    const char* c = p->subclass();
-    if (c) return c;
-    if (l->is_class()) return "Fl_Group";
-    if (p->o->type() == FL_WINDOW+1) return "Fl_Double_Window";
-    if (strcmp(p->type_name(), "Fl_Input") == 0) {
-      if (p->o->type() == FL_FLOAT_INPUT) return "Fl_Float_Input";
-      if (p->o->type() == FL_INT_INPUT) return "Fl_Int_Input";
-    }
-  }
-  return l->type_name();
-}
-
-// Return the ideal widget size...
-void
-Fl_Widget_Type::ideal_size(int &w, int &h) {
-  h = o->labelsize();
-  o->measure_label(w, h);
-
-  w += Fl::box_dw(o->box());
-  h += Fl::box_dh(o->box());
-
-  if (w < 15) w = 15;
-  if (h < 15) h = 15;
-}
-
-// Return the ideal widget spacing...
-void
-Fl_Widget_Type::ideal_spacing(int &x, int &y) {
-  if (o->labelsize() < 10)
-    x = y = 0;
-  else if (o->labelsize() < 14)
-    x = y = 5;
-  else
-    x = y = 10;
-}
-
-Fl_Type *Fl_Widget_Type::make() {
-  // Find the current widget, or widget to copy:
-  Fl_Type *qq = Fl_Type::current;
-  while (qq && (!qq->is_widget() || qq->is_menu_item())) qq = qq->parent;
-  if (!qq) {
-    fl_message("Please select a widget");
-    return 0;
-  }
-  Fl_Widget_Type* q = (Fl_Widget_Type*)qq;
-  // find the parent widget:
-  Fl_Widget_Type* p = q;
-  if ((force_parent || !p->is_group()) && p->parent->is_widget())
-    p = (Fl_Widget_Type*)(p->parent);
-  force_parent = 0;
-
-  // Figure out a border between widget and window:
-  int B = p->o->w()/2; if (p->o->h()/2 < B) B = p->o->h()/2; if (B>25) B = 25;
-
-  int ULX,ULY; // parent's origin in window
-  if (!p->is_window()) { // if it is a group, add corner
-    ULX = p->o->x(); ULY = p->o->y();
-  } else {
-    ULX = ULY = 0;
-  }
-
-  // Figure out a position and size for the widget
-  int X,Y,W,H;
-  if (is_group()) {	// fill the parent with the widget
-    X = ULX+B;
-    W = p->o->w()-B;
-    Y = ULY+B;
-    H = p->o->h()-B;
-  } else if (q != p) {	// copy position and size of current widget
-    W = q->o->w();
-    H = q->o->h();
-    X = q->o->x()+W;
-    Y = q->o->y();
-    if (X+W > ULX+p->o->w()) {
-      X = q->o->x();
-      Y = q->o->y()+H;
-      if (Y+H > ULY+p->o->h()) Y = ULY+B;
-    }
-  } else {	// just make it small and square...
-    X = ULX+B;
-    Y = ULY+B;
-    W = H = B;
-  }
-
-  // satisfy the grid requirements (otherwise it edits really strangely):
-  if (gridx>1) {
-    X = (X/gridx)*gridx;
-    W = ((W-1)/gridx+1)*gridx;
-  }
-  if (gridy>1) {
-    Y = (Y/gridy)*gridy;
-    H = ((H-1)/gridy+1)*gridy;
-  }
-
-  // Construct the Fl_Type:
-  Fl_Widget_Type *t = _make();
-  if (!o) o = widget(0,0,100,100); // create template widget
-  t->factory = this;
-  // Construct the Fl_Widget:
-  t->o = widget(X,Y,W,H);
-  if (reading_file) t->o->label(0);
-  else if (t->o->label()) t->label(t->o->label()); // allow editing
-  t->o->user_data((void*)t);
-  // Put it in the parent:
-  //  ((Fl_Group *)(p->o))->add(t->o); (done by Fl_Type::add())
-  // add to browser:
-  t->add(p);
-  t->redraw();
-  return t;
-}
-
-#include "Fluid_Image.h"
-
-void Fl_Widget_Type::setimage(Fluid_Image *i) {
-  if (i == image || is_window()) return;
-  if (image) image->decrement();
-  if (i) i->increment();
-  image = i;
-  if (i) i->image(o);
-  else o->image(0);
-  redraw();
-}
-
-void Fl_Widget_Type::setinactive(Fluid_Image *i) {
-  if (i == inactive || is_window()) return;
-  if (inactive) inactive->decrement();
-  if (i) i->increment();
-  inactive = i;
-  if (i) i->deimage(o);
-  else o->deimage(0);
-  redraw();
-}
-
-void Fl_Widget_Type::setlabel(const char *n) {
-  o->label(n);
-  redraw();
-}
-
-Fl_Widget_Type::Fl_Widget_Type() {
-  for (int n=0; n<NUM_EXTRA_CODE; n++) {extra_code_[n] = 0; }
-  subclass_ = 0;
-  hotspot_ = 0;
-  tooltip_ = 0;
-  image_name_ = 0;
-  inactive_name_ = 0;
-  image = 0;
-  inactive = 0;
-  xclass = 0;
-  o = 0;
-  public_ = 1;
-}
-
-Fl_Widget_Type::~Fl_Widget_Type() {
-  if (o) {
-    o->hide();
-    if (o->parent()) ((Fl_Group*)o->parent())->remove(*o);
-    delete o;
-  }
-  if (subclass_) free((void*)subclass_);
-  if (tooltip_) free((void*)tooltip_);
-  if (image_name_) {
-    free((void*)image_name_);
-    if (image) image->decrement();
-  }
-  if (inactive_name_) {
-    free((void*)inactive_name_);
-    if (inactive) inactive->decrement();
-  }
-  for (int n=0; n<NUM_EXTRA_CODE; n++) {
-    if (extra_code_[n]) free((void*) extra_code_[n]);
-  }
-}
-
-void Fl_Widget_Type::extra_code(int m,const char *n) {
-  storestring(n,extra_code_[m]);
-}
-
-extern void redraw_browser();
-void Fl_Widget_Type::subclass(const char *n) {
-  if (storestring(n,subclass_) && visible)
-    redraw_browser();
-}
-
-void Fl_Widget_Type::tooltip(const char *n) {
-  storestring(n,tooltip_);
-  o->tooltip(n);
-}
-
-void Fl_Widget_Type::image_name(const char *n) {
-  setimage(Fluid_Image::find(n));
-  storestring(n,image_name_);
-}
-
-void Fl_Widget_Type::inactive_name(const char *n) {
-  setinactive(Fluid_Image::find(n));
-  storestring(n,inactive_name_);
-}
-
-void Fl_Widget_Type::redraw() {
-  Fl_Type *t = this;
-  if (is_menu_item()) {
-    // find the menu button that parents this menu:
-    do t = t->parent; while (t && t->is_menu_item());
-    // kludge to cause build_menu to be called again:
-    t->add_child(0,0);
-  } else {
-    while (t->parent && t->parent->is_widget()) t = t->parent;
-    ((Fl_Widget_Type*)t)->o->redraw();
-  }
-}
-
-// the recursive part sorts all children, returns pointer to next:
-Fl_Type *sort(Fl_Type *parent) {
-  Fl_Type *f,*n=0;
-  for (f = parent ? parent->next : Fl_Type::first; ; f = n) {
-    if (!f || (parent && f->level <= parent->level)) return f;
-    n = sort(f);
-    if (!f->selected || (!f->is_widget() || f->is_menu_item())) continue;
-    Fl_Widget* fw = ((Fl_Widget_Type*)f)->o;
-    Fl_Type *g; // we will insert before this
-    for (g = parent->next; g != f; g = g->next) {
-      if (!g->selected || g->level > f->level) continue;
-      Fl_Widget* gw = ((Fl_Widget_Type*)g)->o;
-      if (gw->y() > fw->y()) break;
-      if (gw->y() == fw->y() && gw->x() > fw->x()) break;
-    }
-    if (g != f) f->move_before(g);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// The control panels!
-
-#include "widget_panel.h"
-#include <FL/fl_show_colormap.H>
-
-static Fl_Window *the_panel;
-
-// All the callbacks use the argument to indicate whether to load or store.
-// This avoids the need for pointers to all the widgets, and keeps the
-// code localized in the callbacks.
-// A value of LOAD means to load.  The hope is that this will not collide
-// with any actual useful values for the argument.  I also use this to
-// initialized parts of the widget that are nyi by fluid.
-
-Fl_Widget_Type *current_widget; // one of the selected ones
-void* const LOAD = (void *)"LOAD"; // "magic" pointer to indicate that we need to load values into the dialog
-static int numselected; // number selected
-static int haderror;
-
-void name_cb(Fl_Input* o, void *v) {
-  if (v == LOAD) {
-    static char buf[1024];
-    if (numselected != 1) {
-      snprintf(buf, sizeof(buf), "Widget Properties (%d widgets)", numselected);
-      o->hide();
-    } else {
-      o->static_value(current_widget->name());
-      o->show();
-      snprintf(buf, sizeof(buf), "%s Properties", current_widget->title());
-    }
-
-    the_panel->label(buf);
-  } else {
-    if (numselected == 1) {
-      current_widget->name(o->value());
-      // I don't update window title, as it probably is being closed
-      // and wm2 (a window manager) barfs if you retitle and then
-      // hide a window:
-      // ((Fl_Window*)(o->parent()->parent()->parent()))->label(current_widget->title());
-    }
-  }
-}
-
-void name_public_member_cb(Fl_Choice* i, void* v) {
-  if (v == LOAD) {
-    i->value(current_widget->public_);
-    if (current_widget->is_in_class()) i->show(); else i->hide();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget_Type *w = ((Fl_Widget_Type*)o);
-        if (w->is_in_class()) {
-          w->public_ = i->value();
-        } else {
-          // if this is not in a class, it can be only private or public
-          w->public_ = (i->value()>0);
-        }
-	mod = 1;
-      }
-    }
-    if (mod) {
-      set_modflag(1);
-      redraw_browser();
-    }
-  }
-}    
-
-void name_public_cb(Fl_Choice* i, void* v) {
-  if (v == LOAD) {
-    i->value(current_widget->public_>0);
-    if (current_widget->is_in_class()) i->hide(); else i->show();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	((Fl_Widget_Type*)o)->public_ = i->value();
-	mod = 1;
-      }
-    }
-    if (mod) {
-      set_modflag(1);
-      redraw_browser();
-    }
-  }
-}    
-
-static char* oldlabel;
-static unsigned oldlabellen;
-
-void label_cb(Fl_Input* i, void *v) {
-  if (v == LOAD) {
-    i->static_value(current_widget->label());
-    if (strlen(i->value()) >= oldlabellen) {
-      oldlabellen = strlen(i->value())+128;
-      oldlabel = (char*)realloc(oldlabel,oldlabellen);
-    }
-    strcpy(oldlabel,i->value());
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        o->label(i->value());
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-static Fl_Input *image_input;
-
-void image_cb(Fl_Input* i, void *v) {
-  if (v == LOAD) {
-    image_input = i;
-    if (current_widget->is_widget() && !current_widget->is_window()) {
-      i->activate();
-      i->static_value(((Fl_Widget_Type*)current_widget)->image_name());
-    } else i->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        ((Fl_Widget_Type*)o)->image_name(i->value());
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void image_browse_cb(Fl_Button* b, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_widget() && !current_widget->is_window())
-      b->activate();
-    else 
-      b->deactivate();
-  } else {
-    int mod = 0;
-    if (ui_find_image(image_input->value())) {
-      image_input->value(ui_find_image_name);
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-	if (o->selected && o->is_widget()) {
-	  ((Fl_Widget_Type*)o)->image_name(ui_find_image_name);
-	  mod = 1;
-	}
-      }
-      if (mod) set_modflag(1);
-    }
-  }
-}
-
-static Fl_Input *inactive_input;
-
-void inactive_cb(Fl_Input* i, void *v) {
-  if (v == LOAD) {
-    inactive_input = i;
-    if (current_widget->is_widget() && !current_widget->is_window()) {
-      i->activate();
-      i->static_value(((Fl_Widget_Type*)current_widget)->inactive_name());
-    } else i->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        ((Fl_Widget_Type*)o)->inactive_name(i->value());
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void inactive_browse_cb(Fl_Button* b, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_widget() && !current_widget->is_window()) 
-      b->activate();
-    else 
-      b->deactivate();
-  } else {
-    int mod = 0;
-    if (ui_find_image(inactive_input->value())) {
-      inactive_input->value(ui_find_image_name);
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-	if (o->selected && o->is_widget()) {
-	  ((Fl_Widget_Type*)o)->inactive_name(ui_find_image_name);
-	  mod = 1;
-	}
-      }
-      if (mod) set_modflag(1);
-    }
-  }
-}
-
-void tooltip_cb(Fl_Input* i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_widget()) {
-      i->activate();
-      i->static_value(((Fl_Widget_Type*)current_widget)->tooltip());
-    } else i->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        ((Fl_Widget_Type*)o)->tooltip(i->value());
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-Fl_Value_Input *x_input, *y_input, *w_input, *h_input;
-
-void x_cb(Fl_Value_Input *i, void *v) {
-  if (v == LOAD) {
-    x_input = i;
-    if (current_widget->is_widget()) {
-      i->value(((Fl_Widget_Type *)current_widget)->o->x());
-      x_input->activate();
-    } else x_input->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	w->resize((int)i->value(), w->y(), w->w(), w->h());
-	if (w->window()) w->window()->redraw();
-	if (o->is_window()) {
-          ((Fl_Window *)w)->size_range(gridx, gridy, Fl::w(), Fl::h(),
-                                       gridx, gridy, 0);
-	}
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void y_cb(Fl_Value_Input *i, void *v) {
-  if (v == LOAD) {
-    y_input = i;
-    if (current_widget->is_widget()) {
-      i->value(((Fl_Widget_Type *)current_widget)->o->y());
-      y_input->activate();
-    } else y_input->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	w->resize(w->x(), (int)i->value(), w->w(), w->h());
-	if (w->window()) w->window()->redraw();
-	if (o->is_window()) {
-          ((Fl_Window *)w)->size_range(gridx, gridy, Fl::w(), Fl::h(),
-                                       gridx, gridy, 0);
-	}
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void w_cb(Fl_Value_Input *i, void *v) {
-  if (v == LOAD) {
-    w_input = i;
-    if (current_widget->is_widget()) {
-      i->value(((Fl_Widget_Type *)current_widget)->o->w());
-      w_input->activate();
-    } else w_input->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	w->resize(w->x(), w->y(), (int)i->value(), w->h());
-	if (w->window()) w->window()->redraw();
-	if (o->is_window()) {
-          ((Fl_Window *)w)->size_range(gridx, gridy, Fl::w(), Fl::h(),
-                                       gridx, gridy, 0);
-	}
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void h_cb(Fl_Value_Input *i, void *v) {
-  if (v == LOAD) {
-    h_input = i;
-    if (current_widget->is_widget()) {
-      i->value(((Fl_Widget_Type *)current_widget)->o->h());
-      h_input->activate();
-    } else h_input->deactivate();
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	w->resize(w->x(), w->y(), w->w(), (int)i->value());
-	if (w->window()) w->window()->redraw();
-	if (o->is_window()) {
-          ((Fl_Window *)w)->size_range(gridx, gridy, Fl::w(), Fl::h(),
-                                       gridx, gridy, 0);
-	}
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void wc_relative_cb(Fl_Light_Button *i, void *v) {
-  if (v == LOAD) {
-    if (!strcmp(current_widget->type_name(), "widget_class")) {
-      i->show();
-      i->value(((Fl_Widget_Class_Type *)current_widget)->wc_relative);
-    } else {
-      i->hide();
-    }
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && !strcmp(current_widget->type_name(), "widget_class")) {
-        Fl_Widget_Class_Type *t = (Fl_Widget_Class_Type *)o;
-        t->wc_relative = i->value();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// turn number to string or string to number for saving to file:
-// does not work for hierarchial menus!
-
-const char *item_name(Fl_Menu_Item* m, int i) {
-  if (m) {
-    while (m->label()) {
-      if (m->argument() == i) return m->label();
-      m++;
-    }
-  }
-  static char buffer[20];
-  sprintf(buffer, "%d", i);
-  return buffer;
-}
-int item_number(Fl_Menu_Item* m, const char* i) {
-  if (m && i) {
-    if (i[0]=='F' && i[1]=='L' && i[2]=='_') i += 3;
-    while (m->label()) {
-      if (!strcmp(m->label(), i)) return int(m->argument());
-      m++;
-    }
-  }
-  return atoi(i);
-}
-
-#define ZERO_ENTRY 1000
-
-Fl_Menu_Item boxmenu[] = {
-{"NO_BOX",0,0,(void *)ZERO_ENTRY},
-{"boxes",0,0,0,FL_SUBMENU},
-{"UP_BOX",0,0,(void *)FL_UP_BOX},
-{"DOWN_BOX",0,0,(void *)FL_DOWN_BOX},
-{"FLAT_BOX",0,0,(void *)FL_FLAT_BOX},
-{"BORDER_BOX",0,0,(void *)FL_BORDER_BOX},
-{"THIN_UP_BOX",0,0,(void *)FL_THIN_UP_BOX},
-{"THIN_DOWN_BOX",0,0,(void *)FL_THIN_DOWN_BOX},
-{"ENGRAVED_BOX",0,0,(void *)FL_ENGRAVED_BOX},
-{"EMBOSSED_BOX",0,0,(void *)FL_EMBOSSED_BOX},
-{"ROUND_UP_BOX",0,0,(void *)FL_ROUND_UP_BOX},
-{"ROUND_DOWN_BOX",0,0,(void *)FL_ROUND_DOWN_BOX},
-{"DIAMOND_UP_BOX",0,0,(void *)FL_DIAMOND_UP_BOX},
-{"DIAMOND_DOWN_BOX",0,0,(void *)FL_DIAMOND_DOWN_BOX},
-{"SHADOW_BOX",0,0,(void *)FL_SHADOW_BOX},
-{"ROUNDED_BOX",0,0,(void *)FL_ROUNDED_BOX},
-{"RSHADOW_BOX",0,0,(void *)FL_RSHADOW_BOX},
-{"RFLAT_BOX",0,0,(void *)FL_RFLAT_BOX},
-{"OVAL_BOX",0,0,(void *)FL_OVAL_BOX},
-{"OSHADOW_BOX",0,0,(void *)FL_OSHADOW_BOX},
-{"OFLAT_BOX",0,0,(void *)FL_OFLAT_BOX},
-{"PLASTIC_UP_BOX",0,0,(void *)FL_PLASTIC_UP_BOX},
-{"PLASTIC_DOWN_BOX",0,0,(void *)FL_PLASTIC_DOWN_BOX},
-{"PLASTIC_THIN_UP_BOX",0,0,(void *)FL_PLASTIC_THIN_UP_BOX},
-{"PLASTIC_THIN_DOWN_BOX",0,0,(void *)FL_PLASTIC_THIN_DOWN_BOX},
-{"PLASTIC_ROUND_UP_BOX",0,0,(void *)FL_PLASTIC_ROUND_UP_BOX},
-{"PLASTIC_ROUND_DOWN_BOX",0,0,(void *)FL_PLASTIC_ROUND_DOWN_BOX},
-{"GTK_UP_BOX",0,0,(void *)FL_GTK_UP_BOX},
-{"GTK_DOWN_BOX",0,0,(void *)FL_GTK_DOWN_BOX},
-{"GTK_THIN_UP_BOX",0,0,(void *)FL_GTK_THIN_UP_BOX},
-{"GTK_THIN_DOWN_BOX",0,0,(void *)FL_GTK_THIN_DOWN_BOX},
-{"GTK_ROUND_UP_BOX",0,0,(void *)FL_GTK_ROUND_UP_BOX},
-{"GTK_ROUND_DOWN_BOX",0,0,(void *)FL_GTK_ROUND_DOWN_BOX},
-{"GLEAM_UP_BOX",0,0,(void *)FL_GLEAM_UP_BOX},
-{"GLEAM_DOWN_BOX",0,0,(void *)FL_GLEAM_DOWN_BOX},
-{"GLEAM_THIN_UP_BOX",0,0,(void *)FL_GLEAM_THIN_UP_BOX},
-{"GLEAM_THIN_DOWN_BOX",0,0,(void *)FL_GLEAM_THIN_DOWN_BOX},
-{"GLEAM_ROUND_UP_BOX",0,0,(void *)FL_GLEAM_ROUND_UP_BOX},
-{"GLEAM_ROUND_DOWN_BOX",0,0,(void *)FL_GLEAM_ROUND_DOWN_BOX},
-{0},
-{"frames",0,0,0,FL_SUBMENU},
-{"UP_FRAME",0,0,(void *)FL_UP_FRAME},
-{"DOWN_FRAME",0,0,(void *)FL_DOWN_FRAME},
-{"THIN_UP_FRAME",0,0,(void *)FL_THIN_UP_FRAME},
-{"THIN_DOWN_FRAME",0,0,(void *)FL_THIN_DOWN_FRAME},
-{"ENGRAVED_FRAME",0,0,(void *)FL_ENGRAVED_FRAME},
-{"EMBOSSED_FRAME",0,0,(void *)FL_EMBOSSED_FRAME},
-{"BORDER_FRAME",0,0,(void *)FL_BORDER_FRAME},
-{"SHADOW_FRAME",0,0,(void *)FL_SHADOW_FRAME},
-{"ROUNDED_FRAME",0,0,(void *)FL_ROUNDED_FRAME},
-{"OVAL_FRAME",0,0,(void *)FL_OVAL_FRAME},
-{"PLASTIC_UP_FRAME",0,0,(void *)FL_PLASTIC_UP_FRAME},
-{"PLASTIC_DOWN_FRAME",0,0,(void *)FL_PLASTIC_DOWN_FRAME},
-{"GTK_UP_FRAME",0,0,(void *)FL_GTK_UP_FRAME},
-{"GTK_DOWN_FRAME",0,0,(void *)FL_GTK_DOWN_FRAME},
-{"GTK_THIN_UP_FRAME",0,0,(void *)FL_GTK_THIN_UP_FRAME},
-{"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME},
-{"GLEAM_UP_FRAME",0,0,(void *)FL_GLEAM_UP_FRAME},
-{"GLEAM_DOWN_FRAME",0,0,(void *)FL_GLEAM_DOWN_FRAME},
-{0},
-{0}};
-
-const char *boxname(int i) {
-  if (!i) i = ZERO_ENTRY;
-  for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
-    if (boxmenu[j].argument() == i) return boxmenu[j].label();
-  return 0;
-}
-
-int boxnumber(const char *i) {
-  if (i[0]=='F' && i[1]=='L' && i[2]=='_') i += 3;
-  for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
-    if (boxmenu[j].label() && !strcmp(boxmenu[j].label(), i)) {
-      return int(boxmenu[j].argument());
-    }
-  return 0;
-}
-
-void box_cb(Fl_Choice* i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    int n = current_widget->o->box(); if (!n) n = ZERO_ENTRY;
-    for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
-      if (boxmenu[j].argument() == n) {i->value(j); break;}
-  } else {
-    int mod = 0;
-    int m = i->value();
-    int n = int(boxmenu[m].argument());
-    if (!n) return; // should not happen
-    if (n == ZERO_ENTRY) n = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-        q->o->box((Fl_Boxtype)n);
-        q->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void down_box_cb(Fl_Choice* i, void *v) {
-  if (v == LOAD) {
-    int n;
-    if (current_widget->is_button() && !current_widget->is_menu_item())
-      n = ((Fl_Button*)(current_widget->o))->down_box();
-    else if (!strcmp(current_widget->type_name(), "Fl_Input_Choice"))
-      n = ((Fl_Input_Choice*)(current_widget->o))->down_box();
-    else if (current_widget->is_menu_button())
-      n = ((Fl_Menu_*)(current_widget->o))->down_box();
-    else {
-      i->deactivate(); return;
-    }
-    i->activate();
-    if (!n) n = ZERO_ENTRY;
-    for (int j = 0; j < int(sizeof(boxmenu)/sizeof(*boxmenu)); j++)
-      if (boxmenu[j].argument() == n) {i->value(j); break;}
-  } else {
-    int mod = 0;
-    int m = i->value();
-    int n = int(boxmenu[m].argument());
-    if (!n) return; // should not happen
-    if (n == ZERO_ENTRY) n = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected) {
-	if (o->is_button() && !o->is_menu_item()) {
-	  Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-          ((Fl_Button*)(q->o))->down_box((Fl_Boxtype)n);
-          if (((Fl_Button*)(q->o))->value()) q->redraw();
-	} else if (!strcmp(o->type_name(), "Fl_Input_Choice")) {
-	  Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	  ((Fl_Input_Choice*)(q->o))->down_box((Fl_Boxtype)n);
-	} else if (o->is_menu_button()) {
-	  Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-          ((Fl_Menu_*)(q->o))->down_box((Fl_Boxtype)n);
-	}
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Menu_Item whenmenu[] = {
-  {"Never",0,0,(void*)ZERO_ENTRY},
-  {"Release",0,0,(void*)FL_WHEN_RELEASE},
-  {"Changed",0,0,(void*)FL_WHEN_CHANGED},
-  {"Enter key",0,0,(void*)FL_WHEN_ENTER_KEY},
-  //{"Release or Enter",0,0,(void*)(FL_WHEN_ENTER_KEY|FL_WHEN_RELEASE)},
-  {0}};
-
-static Fl_Menu_Item whensymbolmenu[] = {
-  {"FL_WHEN_NEVER",0,0,(void*)(FL_WHEN_NEVER)},
-  {"FL_WHEN_CHANGED",0,0,(void*)(FL_WHEN_CHANGED)},
-  {"FL_WHEN_RELEASE",0,0,(void*)(FL_WHEN_RELEASE)},
-  {"FL_WHEN_RELEASE_ALWAYS",0,0,(void*)(FL_WHEN_RELEASE_ALWAYS)},
-  {"FL_WHEN_ENTER_KEY",0,0,(void*)(FL_WHEN_ENTER_KEY)},
-  {"FL_WHEN_ENTER_KEY_ALWAYS",0,0,(void*)(FL_WHEN_ENTER_KEY_ALWAYS)},
-  {0}};
-
-void when_cb(Fl_Choice* i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    int n = current_widget->o->when() & (~FL_WHEN_NOT_CHANGED);
-    if (!n) n = ZERO_ENTRY;
-    for (int j = 0; j < int(sizeof(whenmenu)/sizeof(*whenmenu)); j++)
-      if (whenmenu[j].argument() == n) {i->value(j); break;}
-  } else {
-    int mod = 0;
-    int m = i->value();
-    int n = int(whenmenu[m].argument());
-    if (!n) return; // should not happen
-    if (n == ZERO_ENTRY) n = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->when(n|(q->o->when()&FL_WHEN_NOT_CHANGED));
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void when_button_cb(Fl_Light_Button* i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    i->value(current_widget->o->when()&FL_WHEN_NOT_CHANGED);
-  } else {
-    int mod = 0;
-    int n = i->value() ? FL_WHEN_NOT_CHANGED : 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->when(n|(q->o->when()&~FL_WHEN_NOT_CHANGED));
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-uchar Fl_Widget_Type::resizable() const {
-  if (is_window()) return ((Fl_Window*)o)->resizable() != 0;
-  Fl_Group* p = (Fl_Group*)o->parent();
-  if (p) return p->resizable() == o;
-  else return 0;
-}
-
-void Fl_Widget_Type::resizable(uchar v) {
-  if (v) {
-    if (resizable()) return;
-    if (is_window()) ((Fl_Window*)o)->resizable(o);
-    else {
-      Fl_Group* p = (Fl_Group*)o->parent();
-      if (p) p->resizable(o);
-    }
-  } else {
-    if (!resizable()) return;
-    if (is_window()) {
-      ((Fl_Window*)o)->resizable(0);
-    } else {
-      Fl_Group* p = (Fl_Group*)o->parent();
-      if (p) p->resizable(0);
-    }
-  }
-}
-
-void resizable_cb(Fl_Light_Button* i,void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;}
-    if (numselected > 1) {i->deactivate(); return;}
-    i->activate();
-    i->value(current_widget->resizable());
-  } else {
-    current_widget->resizable(i->value());
-    set_modflag(1);
-  }
-}
-
-void hotspot_cb(Fl_Light_Button* i,void* v) {
-  if (v == LOAD) {
-    if (numselected > 1) {i->deactivate(); return;}
-    if (current_widget->is_menu_item()) i->label("divider");
-    else i->label("hotspot");
-    i->activate();
-    i->value(current_widget->hotspot());
-  } else {
-    current_widget->hotspot(i->value());
-    if (current_widget->is_menu_item()) {current_widget->redraw(); return;}
-    if (i->value()) {
-      Fl_Type *p = current_widget->parent;
-      if (!p || !p->is_widget()) return;
-      while (!p->is_window()) p = p->parent;
-      for (Fl_Type *o = p->next; o && o->level > p->level; o = o->next) {
-	if (o->is_widget() && o != current_widget)
-	  ((Fl_Widget_Type*)o)->hotspot(0);
-      }
-    }
-    set_modflag(1);
-  }
-}
-
-void visible_cb(Fl_Light_Button* i, void* v) {
-  if (v == LOAD) {
-    i->value(current_widget->o->visible());
-    if (current_widget->is_window()) i->deactivate();
-    else i->activate();
-  } else {
-    int mod = 0;
-    int n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	n ? q->o->show() : q->o->hide();
-	q->redraw();
-	mod = 1;
-	if (n && q->parent && q->parent->type_name()) {
-	  if (!strcmp(q->parent->type_name(), "Fl_Tabs")) {
-	    ((Fl_Tabs *)q->o->parent())->value(q->o);
-	  } else if (!strcmp(q->parent->type_name(), "Fl_Wizard")) {
-	    ((Fl_Wizard *)q->o->parent())->value(q->o);
-	  }
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void active_cb(Fl_Light_Button* i, void* v) {
-  if (v == LOAD) {
-    i->value(current_widget->o->active());
-    if (current_widget->is_window()) i->deactivate();
-    else i->activate();
-  } else {
-    int mod = 0;
-    int n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	n ? q->o->activate() : q->o->deactivate();
-	q->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Menu_Item fontmenu[] = {
-{"Helvetica"},
-{"Helvetica bold"},
-{"Helvetica italic"},
-{"Helvetica bold italic"},
-{"Courier"},
-{"Courier bold"},
-{"Courier italic"},
-{"Courier bold italic"},
-{"Times"},
-{"Times bold"},
-{"Times italic"},
-{"Times bold italic"},
-{"Symbol"},
-{"Terminal"},
-{"Terminal Bold"},
-{"Zapf Dingbats"},
-{0}};
-
-void labelfont_cb(Fl_Choice* i, void *v) {
-  if (v == LOAD) {
-    int n = current_widget->o->labelfont();
-    if (n > 15) n = 0;
-    i->value(n);
-  } else {
-    int mod = 0;
-    int n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->labelfont(n);
-	q->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void labelsize_cb(Fl_Value_Input* i, void *v) {
-  int n;
-  if (v == LOAD) {
-    n = current_widget->o->labelsize();
-  } else {
-    int mod = 0;
-    n = int(i->value());
-    if (n <= 0) n = Fl_Widget_Type::default_size;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->labelsize(n);
-	q->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->value(n);
-}
-
-extern const char *ui_find_image_name;
-
-Fl_Menu_Item labeltypemenu[] = {
-  {"NORMAL_LABEL",0,0,(void*)0},
-  {"SHADOW_LABEL",0,0,(void*)FL_SHADOW_LABEL},
-  {"ENGRAVED_LABEL",0,0,(void*)FL_ENGRAVED_LABEL},
-  {"EMBOSSED_LABEL",0,0,(void*)FL_EMBOSSED_LABEL},
-  {"NO_LABEL",0,0,(void*)(FL_NO_LABEL)},
-{0}};
-
-void labeltype_cb(Fl_Choice* i, void *v) {
-  if (v == LOAD) {
-    int n;
-    n = current_widget->o->labeltype();
-    i->when(FL_WHEN_RELEASE);
-    for (int j = 0; j < int(sizeof(labeltypemenu)/sizeof(*labeltypemenu)); j++)
-      if (labeltypemenu[j].argument() == n) {i->value(j); break;}
-  } else {
-    int mod = 0;
-    int m = i->value();
-    int n = int(labeltypemenu[m].argument());
-    if (n<0) return; // should not happen
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* p = (Fl_Widget_Type*)o;
-	p->o->labeltype((Fl_Labeltype)n);
-	p->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-void color_cb(Fl_Button* i, void *v) {
-  Fl_Color c = current_widget->o->color();
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-  } else {
-    int mod = 0;
-    Fl_Color d = fl_show_colormap(c);
-    if (d == c) return;
-    c = d;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->color(c); q->o->redraw();
-        if (q->parent && q->parent->type_name() == tabs_type_name) {
-          if (q->o->parent()) q->o->parent()->redraw();
-        }
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->color(c); i->labelcolor(fl_contrast(FL_BLACK,c)); i->redraw();
-}
-
-void color2_cb(Fl_Button* i, void *v) {
-  Fl_Color c = current_widget->o->selection_color();
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-  } else {
-    int mod = 0;
-    Fl_Color d = fl_show_colormap(c);
-    if (d == c) return;
-    c = d;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->selection_color(c); q->o->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->color(c); i->labelcolor(fl_contrast(FL_BLACK,c)); i->redraw();
-}
-
-void labelcolor_cb(Fl_Button* i, void *v) {
-  Fl_Color c = current_widget->o->labelcolor();
-  if (v != LOAD) {
-    int mod = 0;
-    Fl_Color d = fl_show_colormap(c);
-    if (d == c) return;
-    c = d;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->o->labelcolor(c); q->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->color(c); i->labelcolor(fl_contrast(FL_BLACK,c)); i->redraw();
-}
-
-static Fl_Button* relative(Fl_Widget* o, int i) {
-  Fl_Group* g = (Fl_Group*)(o->parent());
-  return (Fl_Button*)(g->child(g->find(*o)+i));
-}
-
-static Fl_Menu_Item alignmenu[] = {
-  {"FL_ALIGN_CENTER",0,0,(void*)(fl_intptr_t)(FL_ALIGN_CENTER)},
-  {"FL_ALIGN_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP)},
-  {"FL_ALIGN_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM)},
-  {"FL_ALIGN_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT)},
-  {"FL_ALIGN_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT)},
-  {"FL_ALIGN_INSIDE",0,0,(void*)(fl_intptr_t)(FL_ALIGN_INSIDE)},
-  {"FL_ALIGN_CLIP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_CLIP)},
-  {"FL_ALIGN_WRAP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_WRAP)},
-  {"FL_ALIGN_TEXT_OVER_IMAGE",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TEXT_OVER_IMAGE)},
-  {"FL_ALIGN_TOP_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP_LEFT)},
-  {"FL_ALIGN_TOP_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_TOP_RIGHT)},
-  {"FL_ALIGN_BOTTOM_LEFT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_LEFT)},
-  {"FL_ALIGN_BOTTOM_RIGHT",0,0,(void*)(fl_intptr_t)(FL_ALIGN_BOTTOM_RIGHT)},
-  {"FL_ALIGN_LEFT_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_TOP)},
-  {"FL_ALIGN_RIGHT_TOP",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_TOP)},
-  {"FL_ALIGN_LEFT_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_LEFT_BOTTOM)},
-  {"FL_ALIGN_RIGHT_BOTTOM",0,0,(void*)(fl_intptr_t)(FL_ALIGN_RIGHT_BOTTOM)},
-{0}};
-
-void align_cb(Fl_Button* i, void *v) {
-  Fl_Align b = Fl_Align(fl_uintptr_t(i->user_data()));
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    i->value(current_widget->o->align() & b);
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	Fl_Align x = q->o->align();
-	Fl_Align y;
-	if (i->value()) {
-	  y = x | b;
-	  if (b == FL_ALIGN_LEFT || b == FL_ALIGN_TOP) {
-	    Fl_Button *b1 = relative(i,+1);
-	    b1->clear();
-	    y = y & ~(b1->argument());
-	  }
-	  if (b == FL_ALIGN_RIGHT || b == FL_ALIGN_BOTTOM) {
-	    Fl_Button *b1 = relative(i,-1);
-	    b1->clear();
-	    y = y & ~(b1->argument());
-	  }
-	} else {
-	  y = x & ~b;
-	}
-	if (x != y) {
-          q->o->align(y);
-	  q->redraw();
-	  mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void align_position_cb(Fl_Choice *i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    Fl_Menu_Item *mi = (Fl_Menu_Item*)i->menu();
-    Fl_Align b = current_widget->o->align() & FL_ALIGN_POSITION_MASK;
-    for (;mi->text;mi++) {
-      if ((Fl_Align)(mi->argument())==b)
-        i->value(mi);
-    }
-  } else {
-    const Fl_Menu_Item *mi = i->menu() + i->value();
-    Fl_Align b = Fl_Align(fl_uintptr_t(mi->user_data()));
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	Fl_Align x = q->o->align();
-	Fl_Align y = (x & ~FL_ALIGN_POSITION_MASK) | b;
-	if (x != y) {
-          q->o->align(y);
-	  q->redraw();
-	  mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void align_text_image_cb(Fl_Choice *i, void *v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    Fl_Menu_Item *mi = (Fl_Menu_Item*)i->menu();
-    Fl_Align b = current_widget->o->align() & FL_ALIGN_IMAGE_MASK;
-    for (;mi->text;mi++) {
-      if ((Fl_Align)(mi->argument())==b)
-        i->value(mi);
-    }
-  } else {
-    const Fl_Menu_Item *mi = i->menu() + i->value();
-    Fl_Align b = Fl_Align(fl_uintptr_t(mi->user_data()));
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	Fl_Align x = q->o->align();
-	Fl_Align y = (x & ~FL_ALIGN_IMAGE_MASK) | b;
-	if (x != y) {
-          q->o->align(y);
-	  q->redraw();
-	  mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-void callback_cb(CodeEditor* i, void *v) {
-  if (v == LOAD) {
-    const char *cbtext = current_widget->callback();
-    i->buffer()->text( cbtext ? cbtext : "" );
-  } else {
-    int mod = 0;
-    char *c = i->buffer()->text();
-    const char *d = c_check(c);
-    if (d) {
-      fl_message("Error in callback: %s",d);
-      if (i->window()) i->window()->make_current();
-      haderror = 1;
-    }
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected) {
-        o->callback(c);
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-    free(c);
-  }
-}
-
-void comment_cb(Fl_Text_Editor* i, void *v) {
-  if (v == LOAD) {
-    const char *cmttext = current_widget->comment();
-    i->buffer()->text( cmttext ? cmttext : "" );
-  } else {
-    int mod = 0;
-    char *c = i->buffer()->text();
-    const char *d = c_check(c);
-    if (d) {
-      fl_message("Error in comment: %s",d);
-      if (i->window()) i->window()->make_current();
-      haderror = 1;
-    }
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected) {
-        o->comment(c);
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-    free(c);
-  }
-}
-
-void user_data_cb(Fl_Input *i, void *v) {
-  if (v == LOAD) {
-    i->static_value(current_widget->user_data());
-  } else {
-    int mod = 0;
-    const char *c = i->value();
-    const char *d = c_check(c);
-    if (d) {fl_message("Error in user_data: %s",d); haderror = 1; return;}
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected) {
-        o->user_data(c);
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void user_data_type_cb(Fl_Input *i, void *v) {
-  static const char *dflt = "void*";
-  if (v == LOAD) {
-    const char *c = current_widget->user_data_type();
-    if (!c) c = dflt;
-    i->static_value(c);
-  } else {
-    int mod = 0;
-    const char *c = i->value();
-    const char *d = c_check(c);
-    if (!*c) i->value(dflt);
-    else if (!strcmp(c,dflt)) c = 0;
-    if (!d) {
-      if (c && *c && c[strlen(c)-1] != '*' && strcmp(c,"long"))
-	d = "must be pointer or long";
-    }
-    if (d) {fl_message("Error in type: %s",d); haderror = 1; return;}
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected) {
-        o->user_data_type(c);
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-// "v_attributes" let user type in random code for attribute settings:
-
-void v_input_cb(Fl_Input* i, void* v) {
-  int n = fl_intptr_t(i->user_data());
-  if (v == LOAD) {
-    i->static_value(current_widget->extra_code(n));
-  } else {
-    int mod = 0;
-    const char *c = i->value();
-    const char *d = c_check(c&&c[0]=='#' ? c+1 : c);
-    if (d) {fl_message("Error in %s: %s",i->label(),d); haderror = 1; return;}
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type *t = (Fl_Widget_Type*)o;
-	t->extra_code(n,c);
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void subclass_cb(Fl_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_menu_item()) {i->deactivate(); return;} else i->activate();
-    i->static_value(current_widget->subclass());
-  } else {
-    int mod = 0;
-    const char *c = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type *t = (Fl_Widget_Type*)o;
-	t->subclass(c);
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// textstuff: set textfont, textsize, textcolor attributes:
-
-// default widget returns 0 to indicate not-implemented:
-int Fl_Widget_Type::textstuff(int, Fl_Font&, int&, Fl_Color&) {return 0;}
-
-void textfont_cb(Fl_Choice* i, void* v) {
-  Fl_Font n; int s; Fl_Color c;
-  if (v == LOAD) {
-    if (!current_widget->textstuff(0,n,s,c)) {i->deactivate(); return;}
-    i->activate();
-    if (n > 15) n = FL_HELVETICA;
-    i->value(n);
-  } else {
-    int mod = 0;
-    n = (Fl_Font)i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->textstuff(1,n,s,c);
-	q->o->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void textsize_cb(Fl_Value_Input* i, void* v) {
-  Fl_Font n; int s; Fl_Color c;
-  if (v == LOAD) {
-    if (!current_widget->textstuff(0,n,s,c)) {i->deactivate(); return;}
-    i->activate();
-  } else {
-    int mod = 0;
-    s = int(i->value());
-    if (s <= 0) s = Fl_Widget_Type::default_size;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->textstuff(2,n,s,c);
-	q->o->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->value(s);
-}
-
-void textcolor_cb(Fl_Button* i, void* v) {
-  Fl_Font n; int s; Fl_Color c;
-  if (v == LOAD) {
-    if (!current_widget->textstuff(0,n,s,c)) {i->deactivate(); return;}
-    i->activate();
-  } else {
-    int mod = 0;
-    c = i->color();
-    Fl_Color d = fl_show_colormap(c);
-    if (d == c) return;
-    c = d;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	q->textstuff(3,n,s,c); q->o->redraw();
-	mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-  i->color(c); i->labelcolor(fl_contrast(FL_BLACK,c)); i->redraw();
-}
-
-////////////////////////////////////////////////////////////////
-// Kludges to the panel for subclasses:
-
-void min_w_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) {i->parent()->hide(); return;}
-    i->parent()->show();
-    i->value(((Fl_Window_Type*)current_widget)->sr_min_w);
-  } else {
-    int mod = 0;
-    int n = (int)i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        ((Fl_Window_Type*)current_widget)->sr_min_w = n;
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void min_h_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) return;
-    i->value(((Fl_Window_Type*)current_widget)->sr_min_h);
-  } else {
-    int mod = 0;
-    int n = (int)i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        ((Fl_Window_Type*)current_widget)->sr_min_h = n;
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void max_w_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) return;
-    i->value(((Fl_Window_Type*)current_widget)->sr_max_w);
-  } else {
-    int mod = 0;
-    int n = (int)i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        ((Fl_Window_Type*)current_widget)->sr_max_w = n;
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void max_h_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) return;
-    i->value(((Fl_Window_Type*)current_widget)->sr_max_h);
-  } else {
-    int mod = 0;
-    int n = (int)i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        ((Fl_Window_Type*)current_widget)->sr_max_h = n;
-        mod = 1;
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void set_min_size_cb(Fl_Button*, void* v) {
-  if (v == LOAD) {
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        Fl_Window_Type *win = (Fl_Window_Type*)current_widget;
-        win->sr_min_w = win->o->w();
-        win->sr_min_h = win->o->h();
-        mod = 1;
-      }
-    }
-    propagate_load(the_panel, LOAD);
-    if (mod) set_modflag(1);
-  }
-}
-
-void set_max_size_cb(Fl_Button*, void* v) {
-  if (v == LOAD) {
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_window()) {
-        Fl_Window_Type *win = (Fl_Window_Type*)current_widget;
-        win->sr_max_w = win->o->w();
-        win->sr_max_h = win->o->h();
-        mod = 1;
-      }
-    }
-    propagate_load(the_panel, LOAD);
-    if (mod) set_modflag(1);
-  }
-}
-
-void slider_size_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_window()) 
-      i->parent()->hide(); 
-    else
-      i->parent()->show();
-    if (current_widget->is_valuator()<2) {i->deactivate(); return;}
-    i->activate();
-    i->value(((Fl_Slider*)(current_widget->o))->slider_size());
-  } else {
-    int mod = 0;
-    double n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	if (q->is_valuator()>=2) {
-	  ((Fl_Slider*)(q->o))->slider_size(n);
-	  q->o->redraw();
-	  mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void min_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_valuator()) {
-      i->activate();
-      i->value(((Fl_Valuator*)(current_widget->o))->minimum());
-    } else if (current_widget->is_spinner()) {
-      i->activate();
-      i->value(((Fl_Spinner*)(current_widget->o))->minimum());
-    } else {
-      i->deactivate();
-      return;
-    }
-  } else {
-    int mod = 0;
-    double n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	if (q->is_valuator()) {
-	  ((Fl_Valuator*)(q->o))->minimum(n);
-	  q->o->redraw();
-	  mod = 1;
-	} else if (q->is_spinner()) {
-          ((Fl_Spinner*)(q->o))->minimum(n);
-          q->o->redraw();
-          mod = 1;
-        }
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void max_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_valuator()) {
-      i->activate();
-      i->value(((Fl_Valuator*)(current_widget->o))->maximum());
-    } else if (current_widget->is_spinner()) {
-      i->activate();
-      i->value(((Fl_Spinner*)(current_widget->o))->maximum());
-    } else {
-      i->deactivate();
-      return;
-    }
-  } else {
-    int mod = 0;
-    double n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	if (q->is_valuator()) {
-	  ((Fl_Valuator*)(q->o))->maximum(n);
-	  q->o->redraw();
-	  mod = 1;
-        } else if (q->is_spinner()) {
-          ((Fl_Spinner*)(q->o))->maximum(n);
-          q->o->redraw();
-          mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void step_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_valuator()) {
-      i->activate();
-      i->value(((Fl_Valuator*)(current_widget->o))->step());
-    } else if (current_widget->is_spinner()) {
-      i->activate();
-      i->value(((Fl_Spinner*)(current_widget->o))->step());
-    } else {
-      i->deactivate();
-      return;
-    }
-  } else {
-    int mod = 0;
-    double n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-        if (q->is_valuator()) {
-          ((Fl_Valuator*)(q->o))->step(n);
-          q->o->redraw();
-          mod = 1;
-        } else if (q->is_spinner()) {
-          ((Fl_Spinner*)(q->o))->step(n);
-          q->o->redraw();
-          mod = 1;
-        }
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-void value_cb(Fl_Value_Input* i, void* v) {
-  if (v == LOAD) {
-    if (current_widget->is_valuator()) {
-      i->activate();
-      i->value(((Fl_Valuator*)(current_widget->o))->value());
-    } else if (current_widget->is_button()) {
-      i->activate();
-      i->value(((Fl_Button*)(current_widget->o))->value());
-    } else if (current_widget->is_spinner()) {
-      i->activate();
-      i->value(((Fl_Spinner*)(current_widget->o))->value());
-    } else 
-      i->deactivate();
-  } else {
-    int mod = 0;
-    double n = i->value();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-	Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-	if (q->is_valuator()) {
-	  ((Fl_Valuator*)(q->o))->value(n);
-	  mod = 1;
-	} else if (q->is_button()) {
-	  ((Fl_Button*)(q->o))->value(n != 0);
-	  if (q->is_menu_item()) q->redraw();
-	  mod = 1;
-        } else if (q->is_spinner()) {
-          ((Fl_Spinner*)(q->o))->value(n);
-          mod = 1;
-	}
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// subtypes:
-
-Fl_Menu_Item *Fl_Widget_Type::subtypes() {return 0;}
-
-void subtype_cb(Fl_Choice* i, void* v) {
-  if (v == LOAD) {
-    Fl_Menu_Item* m = current_widget->subtypes();
-    if (!m) {i->deactivate(); return;}
-    i->menu(m);
-    int j;
-    for (j = 0;; j++) {
-      if (!m[j].text) {j = 0; break;}
-      if (current_widget->is_spinner()) {
-        if (m[j].argument() == ((Fl_Spinner*)current_widget->o)->type()) break;
-      } else {
-        if (m[j].argument() == current_widget->o->type()) break;
-      }
-    }
-    i->value(j);
-    i->activate();
-    i->redraw();
-  } else {
-    int mod = 0;
-    int n = int(i->mvalue()->argument());
-    Fl_Menu_Item* m = current_widget->subtypes();
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        Fl_Widget_Type* q = (Fl_Widget_Type*)o;
-        if (q->subtypes()==m) {
-          if (q->is_spinner())
-            ((Fl_Spinner*)q->o)->type(n);
-          else
-            q->o->type(n);
-          q->redraw();
-          mod = 1;
-        }
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-void propagate_load(Fl_Group* g, void* v) {
-  if (v == LOAD) {
-    Fl_Widget*const* a = g->array();
-    for (int i=g->children(); i--;) {
-      Fl_Widget* o = *a++;
-      o->do_callback(o,LOAD);
-    }
-  }
-}
-
-void set_cb(Fl_Button*, void*) {
-  haderror = 0;
-  Fl_Widget*const* a = the_panel->array();
-  for (int i=the_panel->children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o->changed()) {
-      o->do_callback();
-      if (haderror) return;
-      o->clear_changed();
-    }
-  }
-}
-
-void ok_cb(Fl_Return_Button* o, void* v) {
-  set_cb(o,v);
-  if (!haderror) the_panel->hide();
-}
-
-void revert_cb(Fl_Button*, void*) {
-  // We have to revert all dynamically changing fields:
-  // but for now only the first label works...
-  if (numselected == 1) current_widget->label(oldlabel);
-  propagate_load(the_panel, LOAD);
-}
-
-void cancel_cb(Fl_Button* o, void* v) {
-  revert_cb(o,v);
-  the_panel->hide();
-}
-
-void toggle_overlays(Fl_Widget *,void *); // in Fl_Window_Type.cxx
-void overlay_cb(Fl_Button*o,void *v) {
-  toggle_overlays(o,v);
-}
-
-void leave_live_mode_cb(Fl_Widget*, void*);
-
-void live_mode_cb(Fl_Button*o,void *) {
-  /// \todo live mode should end gracefully when the application quits
-  ///       or when the user closes the live widget
-  static Fl_Type *live_type = 0L;
-  static Fl_Widget *live_widget = 0L;
-  static Fl_Window *live_window = 0L;
-  // if 'o' is 0, we must quit live mode
-  if (!o) {
-    o = wLiveMode;
-    o->value(0);
-  }
-  if (o->value()) {
-    if (numselected == 1) {
-      Fl_Group::current(0L);
-      live_widget = current_widget->enter_live_mode(1);
-      if (live_widget) {
-        live_type = current_widget;
-        Fl_Group::current(0);
-        int w = live_widget->w();
-        int h = live_widget->h();
-        live_window = new Fl_Double_Window(w+20, h+55, "Fluid Live Mode Widget");
-        live_window->box(FL_FLAT_BOX);
-        live_window->color(FL_GREEN);
-        Fl_Group *rsz = new Fl_Group(0, h+20, 130, 35);
-        rsz->box(FL_NO_BOX);
-        Fl_Box *rsz_dummy = new Fl_Box(110, h+20, 1, 25);
-        rsz_dummy->box(FL_NO_BOX);
-        rsz->resizable(rsz_dummy);
-        Fl_Button *btn = new Fl_Button(10, h+20, 100, 25, "Exit Live Mode");
-        btn->labelsize(12);
-        btn->callback(leave_live_mode_cb);
-        rsz->end();
-        live_window->add(live_widget);
-        live_widget->position(10, 10);
-        live_window->resizable(live_widget);
-        live_window->set_modal(); // block all other UI
-        live_window->callback(leave_live_mode_cb);
-        if (current_widget->is_window()) {
-          Fl_Window_Type *w = (Fl_Window_Type*)current_widget;
-          int mw = w->sr_min_w; if (mw>0) mw += 20;
-          int mh = w->sr_min_h; if (mh>0) mh += 55;
-          int MW = w->sr_max_w; if (MW>0) MW += 20; 
-          int MH = w->sr_max_h; if (MH>2) MH += 55;
-          if (mw || mh || MW || MH)
-            live_window->size_range(mw, mh, MW, MH);
-        }
-        live_window->show();
-      } else o->value(0);
-    } else o->value(0);
-  } else {
-    if (live_type)
-      live_type->leave_live_mode();
-    if (live_window) {
-      live_window->hide();
-      Fl::delete_widget(live_window);
-    }
-    live_type = 0L;
-    live_widget = 0L;
-    live_window = 0L;
-  }
-}
-
-// update the panel according to current widget set:
-static void load_panel() {
-  if (!the_panel) return;
-
-  // find all the Fl_Widget subclasses currently selected:
-  numselected = 0;
-  current_widget = 0;
-  if (Fl_Type::current) {
-    if (Fl_Type::current->is_widget())
-      current_widget=(Fl_Widget_Type*)Fl_Type::current;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->is_widget() && o->selected) {
-	numselected++;
-	if (!current_widget) current_widget = (Fl_Widget_Type*)o;
-      }
-    }
-  }
-  if (numselected)
-    propagate_load(the_panel, LOAD);
-  else
-    the_panel->hide();
-}
-
-// This is called when user double-clicks an item, open or update the panel:
-void Fl_Widget_Type::open() {
-  if (!the_panel) the_panel = make_widget_panel();
-  load_panel();
-  if (numselected) the_panel->show();
-}
-
-Fl_Type *Fl_Type::current;
-
-extern void redraw_overlays();
-extern void check_redraw_corresponding_parent(Fl_Type*);
-extern void redraw_browser();
-extern void update_sourceview_position();
-
-// Called when ui changes what objects are selected:
-// p is selected object, null for all deletions (we must throw away
-// old panel in that case, as the object may no longer exist)
-void selection_changed(Fl_Type *p) {
-  // store all changes to the current selected objects:
-  if (p && the_panel && the_panel->visible()) {
-    set_cb(0,0);
-    // if there was an error, we try to leave the selected set unchanged:
-    if (haderror) {
-      Fl_Type *q = 0;
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-	o->new_selected = o->selected;
-	if (!q && o->selected) q = o;
-      }
-      if (!p || !p->selected) p = q;
-      Fl_Type::current = p;
-      redraw_browser();
-      return;
-    }
-  }
-  // update the selected flags to new set:
-  Fl_Type *q = 0;
-  for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-    o->selected = o->new_selected;
-    if (!q && o->selected) q = o;
-  }
-  if (!p || !p->selected) p = q;
-  Fl_Type::current = p;
-  check_redraw_corresponding_parent(p);
-  redraw_overlays();
-  // load the panel with the new settings:
-  load_panel();
-  // update the source viewer to show the code for the selected object
-  update_sourceview_position();
-}
-
-////////////////////////////////////////////////////////////////
-// Writing the C code:
-
-// test to see if user named a function, or typed in code:
-int is_name(const char *c) {
-  for (; *c; c++) if (ispunct(*c) && *c!='_' && *c!=':') return 0;
-  return 1;
-}
-
-// Test to see if name() is an array entry.  If so, and this is the
-// highest number, return name[num+1].  Return null if not the highest
-// number or a field or function.  Return name() if not an array entry.
-const char *array_name(Fl_Widget_Type *o) {
-  const char *c = o->name();
-  if (!c) return 0;
-  const char *d;
-  for (d = c; *d != '['; d++) {
-    if (!*d) return c;
-    if (ispunct(*d) && *d!='_') return 0;
-  }
-  int num = atoi(d+1);
-  int sawthis = 0;
-  Fl_Type *t = o->prev;
-  Fl_Type *tp = o;
-  const char *cn = o->class_name(1);
-  for (; t && t->class_name(1) == cn; tp = t, t = t->prev) {/*empty*/}
-  for (t = tp; t && t->class_name(1) == cn; t = t->next) {
-    if (t == o) {sawthis=1; continue;}
-    const char *e = t->name();
-    if (!e) continue;
-    if (strncmp(c,e,d-c)) continue;
-    int n1 = atoi(e+(d-c)+1);
-    if (n1 > num || (n1==num && sawthis)) return 0;
-  }
-  static char buffer[128];
-  // MRS: we want strncpy() here...
-  strncpy(buffer,c,d-c+1);
-  snprintf(buffer+(d-c+1),sizeof(buffer) - (d-c+1), "%d]",num+1);
-  return buffer;
-}
-
-// Test to see if extra code is a declaration:
-int isdeclare(const char *c) {
-  while (isspace(*c)) c++;
-  if (*c == '#') return 1;
-  if (!strncmp(c,"extern",6)) return 1;
-  if (!strncmp(c,"typedef",7)) return 1;
-  if (!strncmp(c,"using",5)) return 1;
-  return 0;
-}
-
-void Fl_Widget_Type::write_static() {
-  const char* t = subclassname(this);
-  if (!subclass() || (is_class() && !strncmp(t, "Fl_", 3))) {
-    write_declare("#include <FL/%s.H>", t);
-  }
-  for (int n=0; n < NUM_EXTRA_CODE; n++) {
-    if (extra_code(n) && isdeclare(extra_code(n)))
-      write_declare("%s", extra_code(n));
-  }
-  if (callback() && is_name(callback())) {
-    int write_extern_declaration = 1;
-    const Fl_Class_Type *cc = is_in_class();
-    char buf[1024]; snprintf(buf, 1023, "%s(*)",  callback());
-    if (cc) {
-      if (cc->has_function("static void", buf))
-        write_extern_declaration = 0;
-    } else {
-      if (has_toplevel_function(0L, buf))
-        write_extern_declaration = 0;
-    }
-    if (write_extern_declaration)
-      write_declare("extern void %s(%s*, %s);", callback(), t,
-		    user_data_type() ? user_data_type() : "void*");
-  }
-  const char* k = class_name(1);
-  const char* c = array_name(this);
-  if (c && !k && !is_class()) {
-    write_c("\n");
-    if (!public_) write_c("static ");
-    else write_h("extern %s *%s;\n", t, c);
-    if (strchr(c, '[') == NULL) write_c("%s *%s=(%s *)0;\n", t, c, t);
-    else write_c("%s *%s={(%s *)0};\n", t, c, t);
-  }
-  if (callback() && !is_name(callback())) {
-    // see if 'o' or 'v' used, to prevent unused argument warnings:
-    int use_o = 0;
-    int use_v = 0;
-    const char *d;
-    for (d = callback(); *d;) {
-      if (*d == 'o' && !is_id(d[1])) use_o = 1;
-      if (*d == 'v' && !is_id(d[1])) use_v = 1;
-      do d++; while (is_id(*d));
-      while (*d && !is_id(*d)) d++;
-    }
-    const char* cn = callback_name();
-    if (k) {
-      write_c("\nvoid %s::%s_i(%s*", k, cn, t);
-    } else {
-      write_c("\nstatic void %s(%s*", cn, t);
-    }
-    if (use_o) write_c(" o");
-    const char* ut = user_data_type() ? user_data_type() : "void*";
-    write_c(", %s", ut);
-    if (use_v) write_c(" v");
-    write_c(") {\n  %s", callback());
-    if (*(d-1) != ';') {
-      const char *p = strrchr(callback(), '\n');
-      if (p) p ++;
-      else p = callback();
-      // Only add trailing semicolon if the last line is not a preprocessor
-      // statement...
-      if (*p != '#' && *p) write_c(";");
-    }
-    write_c("\n}\n");
-    if (k) {
-      write_c("void %s::%s(%s* o, %s v) {\n", k, cn, t, ut);
-      write_c("  ((%s*)(o", k);
-      Fl_Type *q = 0;
-      for (Fl_Type* p = parent; p && p->is_widget(); q = p, p = p->parent)
-	write_c("->parent()");
-      if (!q || strcmp(q->type_name(), "widget_class"))
-        write_c("->user_data()");
-      write_c("))->%s_i(o,v);\n}\n", cn);
-    }
-  }
-  if (image) {
-    if (image->written != write_number) {
-      image->write_static();
-      image->written = write_number;
-    }
-  }
-  if (inactive) {
-    if (inactive->written != write_number) {
-      inactive->write_static();
-      inactive->written = write_number;
-    }
-  }
-}
-
-const char *Fl_Type::callback_name() {
-  if (is_name(callback())) return callback();
-  return unique_id(this, "cb", name(), label());
-}
-
-extern int varused_test, varused;
-
-void Fl_Widget_Type::write_code1() {
-  const char* t = subclassname(this);
-  const char *c = array_name(this);
-  if (c) {
-    if (class_name(1)) {
-      write_public(public_);
-      write_h("  %s *%s;\n", t, c);
-    }
-  }
-  if (class_name(1) && callback() && !is_name(callback())) {
-    const char* cn = callback_name();
-    const char* ut = user_data_type() ? user_data_type() : "void*";
-    write_public(0);
-    write_h("  inline void %s_i(%s*, %s);\n", cn, t, ut);
-    write_h("  static void %s(%s*, %s);\n", cn, t, ut);
-  }
-  // figure out if local variable will be used (prevent compiler warnings):
-  int wused = !name() && is_window();
-  const char *ptr;
-
-  varused = wused;
-
-  if (!name() && !varused) {
-    varused |= is_parent();
-
-    if (!varused) {
-      varused_test = 1;
-      write_widget_code();
-      varused_test = 0;
-    }
-  }
-
-  if (!varused) {
-    for (int n=0; n < NUM_EXTRA_CODE; n++)
-      if (extra_code(n) && !isdeclare(extra_code(n)))
-      {
-        int instring = 0;
-	int inname = 0;
-        for (ptr = extra_code(n); *ptr; ptr ++) {
-	  if (instring) {
-	    if (*ptr == '\\') ptr++;
-	    else if (*ptr == '\"') instring = 0;
-	  } else if (inname && !isalnum(*ptr & 255)) inname = 0;
-          else if (*ptr == '\"') instring = 1;
-	  else if (isalnum(*ptr & 255) || *ptr == '_') {
-	    size_t len = strspn(ptr, "0123456789_"
-	                             "abcdefghijklmnopqrstuvwxyz"
-				     "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
-
-            if (!strncmp(ptr, "o", len)) {
-	      varused = 1;
-	      break;
-	    } else ptr += len - 1;
-          }
-	}
-      }
-  }
-
-  write_c("%s{ ", indent());
-  write_comment_inline_c();
-  if (varused) write_c("%s* o = ", t);
-  if (name()) write_c("%s = ", name());
-  if (is_window()) {
-    // Handle special case where user is faking a Fl_Group type as a window,
-    // there is no 2-argument constructor in that case:
-    if (!strstr(t, "Window"))
-      write_c("new %s(0, 0, %d, %d", t, o->w(), o->h());
-    else
-      write_c("new %s(%d, %d", t, o->w(), o->h());
-  } else {
-    write_c("new %s(%d, %d, %d, %d", t, o->x(), o->y(), o->w(), o->h());
-  }
-  if (label() && *label()) {
-    write_c(", ");
-    switch (i18n_type) {
-    case 0 : /* None */
-        write_cstring(label());
-        break;
-    case 1 : /* GNU gettext */
-        write_c("%s(", i18n_function);
-        write_cstring(label());
-	write_c(")");
-        break;
-    case 2 : /* POSIX catgets */
-        write_c("catgets(%s,%s,%d,", i18n_file[0] ? i18n_file : "_catalog",
-	        i18n_set, msgnum());
-        write_cstring(label());
-	write_c(")");
-        break;
-    }
-  }
-  write_c(");\n");
-
-  indentation += 2;
-
-  if (wused) write_c("%sw = o; if (w) {/* empty */}\n", indent());
-
-  write_widget_code();
-}
-
-void Fl_Widget_Type::write_color(const char* field, Fl_Color color) {
-  const char* color_name = 0;
-  switch (color) {
-  case FL_FOREGROUND_COLOR:	color_name = "FL_FOREGROUND_COLOR";	break;
-  case FL_BACKGROUND2_COLOR:	color_name = "FL_BACKGROUND2_COLOR";	break;
-  case FL_INACTIVE_COLOR:	color_name = "FL_INACTIVE_COLOR";	break;
-  case FL_SELECTION_COLOR:	color_name = "FL_SELECTION_COLOR";	break;
-  case FL_GRAY0:		color_name = "FL_GRAY0";		break;
-  case FL_DARK3:		color_name = "FL_DARK3";		break;
-  case FL_DARK2:		color_name = "FL_DARK2";		break;
-  case FL_DARK1:		color_name = "FL_DARK1";		break;
-  case FL_BACKGROUND_COLOR:	color_name = "FL_BACKGROUND_COLOR";	break;
-  case FL_LIGHT1:		color_name = "FL_LIGHT1";		break;
-  case FL_LIGHT2:		color_name = "FL_LIGHT2";		break;
-  case FL_LIGHT3:		color_name = "FL_LIGHT3";		break;
-  case FL_BLACK:		color_name = "FL_BLACK";		break;
-  case FL_RED:			color_name = "FL_RED";			break;
-  case FL_GREEN:		color_name = "FL_GREEN";		break;
-  case FL_YELLOW:		color_name = "FL_YELLOW";		break;
-  case FL_BLUE:			color_name = "FL_BLUE";			break;
-  case FL_MAGENTA:		color_name = "FL_MAGENTA";		break;
-  case FL_CYAN:			color_name = "FL_CYAN";			break;
-  case FL_DARK_RED:		color_name = "FL_DARK_RED";		break;
-  case FL_DARK_GREEN:		color_name = "FL_DARK_GREEN";		break;
-  case FL_DARK_YELLOW:		color_name = "FL_DARK_YELLOW";		break;
-  case FL_DARK_BLUE:		color_name = "FL_DARK_BLUE";		break;
-  case FL_DARK_MAGENTA:		color_name = "FL_DARK_MAGENTA";		break;
-  case FL_DARK_CYAN:		color_name = "FL_DARK_CYAN";		break;
-  case FL_WHITE:		color_name = "FL_WHITE";		break;
-  }
-  const char *var = is_class() ? "this" : name() ? name() : "o";
-  if (color_name) {
-    write_c("%s%s->%s(%s);\n", indent(), var, field, color_name);
-  } else {
-    write_c("%s%s->%s((Fl_Color)%d);\n", indent(), var, field, color);
-  }
-}
-
-// this is split from write_code1() for Fl_Window_Type:
-void Fl_Widget_Type::write_widget_code() {
-  Fl_Widget* tplate = ((Fl_Widget_Type*)factory)->o;
-  const char *var = is_class() ? "this" : name() ? name() : "o";
-
-  if (tooltip() && *tooltip()) {
-    write_c("%s%s->tooltip(",indent(), var);
-    switch (i18n_type) {
-    case 0 : /* None */
-        write_cstring(tooltip());
-        break;
-    case 1 : /* GNU gettext */
-        write_c("%s(", i18n_function);
-        write_cstring(tooltip());
-	write_c(")");
-        break;
-    case 2 : /* POSIX catgets */
-        write_c("catgets(%s,%s,%d,", i18n_file[0] ? i18n_file : "_catalog",
-	        i18n_set, msgnum() + 1);
-        write_cstring(tooltip());
-	write_c(")");
-        break;
-    }
-    write_c(");\n");
-  }
-
-  if (is_spinner() && ((Fl_Spinner*)o)->type() != ((Fl_Spinner*)tplate)->type())
-    write_c("%s%s->type(%d);\n", indent(), var, ((Fl_Spinner*)o)->type());
-  else if (o->type() != tplate->type() && !is_window())
-    write_c("%s%s->type(%d);\n", indent(), var, o->type());
-  if (o->box() != tplate->box() || subclass())
-    write_c("%s%s->box(FL_%s);\n", indent(), var, boxname(o->box()));
-
-  // write shortcut command if needed
-  int shortcut = 0;
-  if (is_button()) shortcut = ((Fl_Button*)o)->shortcut();
-  else if (is_input()) shortcut = ((Fl_Input_*)o)->shortcut();
-  else if (is_value_input()) shortcut = ((Fl_Value_Input*)o)->shortcut();
-  else if (is_text_display()) shortcut = ((Fl_Text_Display*)o)->shortcut();
-  if (shortcut) {
-    if (use_FL_COMMAND && (shortcut & (FL_CTRL|FL_META))) {
-      write_c("%s%s->shortcut(FL_COMMAND|0x%x);\n", indent(), var, shortcut & ~(FL_CTRL|FL_META));
-    } else {
-      write_c("%s%s->shortcut(0x%x);\n", indent(), var, shortcut);
-    }
-  }
-
-  if (is_button()) {
-    Fl_Button* b = (Fl_Button*)o;
-    if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
-			       boxname(b->down_box()));
-    if (b->value()) write_c("%s%s->value(1);\n", indent(), var);
-  } else if (!strcmp(type_name(), "Fl_Input_Choice")) {
-    Fl_Input_Choice* b = (Fl_Input_Choice*)o;
-    if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
-			       boxname(b->down_box()));
-  } else if (is_menu_button()) {
-    Fl_Menu_* b = (Fl_Menu_*)o;
-    if (b->down_box()) write_c("%s%s->down_box(FL_%s);\n", indent(), var,
-			       boxname(b->down_box()));
-  }
-  if (o->color() != tplate->color() || subclass())
-    write_color("color", o->color());
-  if (o->selection_color() != tplate->selection_color() || subclass())
-    write_color("selection_color", o->selection_color());
-  if (image) image->write_code(var);
-  if (inactive) inactive->write_code(var, 1);
-  if (o->labeltype() != tplate->labeltype() || subclass())
-    write_c("%s%s->labeltype(FL_%s);\n", indent(), var,
-	    item_name(labeltypemenu, o->labeltype()));
-  if (o->labelfont() != tplate->labelfont() || subclass())
-    write_c("%s%s->labelfont(%d);\n", indent(), var, o->labelfont());
-  if (o->labelsize() != tplate->labelsize() || subclass())
-    write_c("%s%s->labelsize(%d);\n", indent(), var, o->labelsize());
-  if (o->labelcolor() != tplate->labelcolor() || subclass())
-    write_color("labelcolor", o->labelcolor());
-  if (is_valuator()) {
-    Fl_Valuator* v = (Fl_Valuator*)o;
-    Fl_Valuator* f = (Fl_Valuator*)(tplate);
-    if (v->minimum()!=f->minimum())
-      write_c("%s%s->minimum(%g);\n", indent(), var, v->minimum());
-    if (v->maximum()!=f->maximum())
-      write_c("%s%s->maximum(%g);\n", indent(), var, v->maximum());
-    if (v->step()!=f->step())
-      write_c("%s%s->step(%g);\n", indent(), var, v->step());
-    if (v->value()) {
-      if (is_valuator()==3) { // Fl_Scrollbar::value(double) is nott available
-        write_c("%s%s->Fl_Slider::value(%g);\n", indent(), var, v->value());
-      } else {
-        write_c("%s%s->value(%g);\n", indent(), var, v->value());
-      }
-    }
-    if (is_valuator()>=2) {
-      double x = ((Fl_Slider*)v)->slider_size();
-      double y = ((Fl_Slider*)f)->slider_size();
-      if (x != y) write_c("%s%s->slider_size(%g);\n", indent(), var, x);
-    }
-  }
-  if (is_spinner()) {
-    Fl_Spinner* v = (Fl_Spinner*)o;
-    Fl_Spinner* f = (Fl_Spinner*)(tplate);
-    if (v->minimum()!=f->minimum())
-      write_c("%s%s->minimum(%g);\n", indent(), var, v->minimum());
-    if (v->maximum()!=f->maximum())
-      write_c("%s%s->maximum(%g);\n", indent(), var, v->maximum());
-    if (v->step()!=f->step())
-      write_c("%s%s->step(%g);\n", indent(), var, v->step());
-    if (v->value()!=1.0f)
-      write_c("%s%s->value(%g);\n", indent(), var, v->value());
-  }
-
-  {Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) {
-    Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c);
-    if (f != ff) write_c("%s%s->textfont(%d);\n", indent(), var, f);
-    if (s != fs) write_c("%s%s->textsize(%d);\n", indent(), var, s);
-    if (c != fc) write_color("textcolor", c);
-  }}
-  const char* ud = user_data();
-  if (class_name(1) && !parent->is_widget()) ud = "this";
-  if (callback()) {
-    write_c("%s%s->callback((Fl_Callback*)%s", indent(), var, callback_name());
-    if (ud)
-      write_c(", (void*)(%s));\n", ud);
-    else
-      write_c(");\n");
-  } else if (ud) {
-    write_c("%s%s->user_data((void*)(%s));\n", indent(), var, ud);
-  }
-  if (o->align() != tplate->align() || subclass()) {
-    int i = o->align();
-    write_c("%s%s->align(Fl_Align(%s", indent(), var,
-	    item_name(alignmenu, i & ~FL_ALIGN_INSIDE));
-    if (i & FL_ALIGN_INSIDE) write_c("|FL_ALIGN_INSIDE");
-    write_c("));\n");
-  }
-  // avoid the unsupported combination of flegs when user sets 
-  // "when" to "FL_WHEN_NEVER", but keeps the "no change" set. 
-  // FIXME: This could be reflected in the GUI by graying out the button.
-  Fl_When ww = o->when();
-  if (ww==FL_WHEN_NOT_CHANGED)
-    ww = FL_WHEN_NEVER;
-  if (ww != tplate->when() || subclass())
-    write_c("%s%s->when(%s);\n", indent(), var,
-            item_name(whensymbolmenu, ww));
-  if (!o->visible() && o->parent())
-    write_c("%s%s->hide();\n", indent(), var);
-  if (!o->active())
-    write_c("%s%s->deactivate();\n", indent(), var);
-  if (!is_group() && resizable())
-    write_c("%sFl_Group::current()->resizable(%s);\n", indent(), var);
-  if (hotspot()) {
-    if (is_class())
-      write_c("%shotspot(%s);\n", indent(), var);
-    else if (is_window())
-      write_c("%s%s->hotspot(%s);\n", indent(), var, var);
-    else
-      write_c("%s%s->window()->hotspot(%s);\n", indent(), var, var);
-  }
-}
-
-void Fl_Widget_Type::write_extra_code() {
-  for (int n=0; n < NUM_EXTRA_CODE; n++)
-    if (extra_code(n) && !isdeclare(extra_code(n)))
-      write_c("%s%s\n", indent(), extra_code(n));
-}
-
-void Fl_Widget_Type::write_block_close() {
-  indentation -= 2;
-  write_c("%s} // %s* %s\n", indent(), subclassname(this),
-          name() ? name() : "o");
-}
-
-void Fl_Widget_Type::write_code2() {
-  write_extra_code();
-  write_block_close();
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Widget_Type::write_properties() {
-  Fl_Type::write_properties();
-  write_indent(level+1);
-  switch (public_) {
-    case 0: write_string("private"); break;
-    case 1: break;
-    case 2: write_string("protected"); break;
-  }
-  if (tooltip() && *tooltip()) {
-    write_string("tooltip");
-    write_word(tooltip());
-  }
-  if (image_name() && *image_name()) {
-    write_string("image");
-    write_word(image_name());
-  }
-  if (inactive_name() && *inactive_name()) {
-    write_string("deimage");
-    write_word(inactive_name());
-  }
-  write_string("xywh {%d %d %d %d}", o->x(), o->y(), o->w(), o->h());
-  Fl_Widget* tplate = ((Fl_Widget_Type*)factory)->o;
-  if (is_spinner() && ((Fl_Spinner*)o)->type() != ((Fl_Spinner*)tplate)->type()) {
-    write_string("type");
-    write_word(item_name(subtypes(), ((Fl_Spinner*)o)->type()));
-  } else if (o->type() != tplate->type() || is_window()) {
-    write_string("type");
-    write_word(item_name(subtypes(), o->type()));
-  }
-  if (o->box() != tplate->box()) {
-    write_string("box"); write_word(boxname(o->box()));}
-  if (is_input()) {
-    Fl_Input_* b = (Fl_Input_*)o;
-    if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
-  }
-  if (is_value_input()) {
-    Fl_Value_Input* b = (Fl_Value_Input*)o;
-    if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
-  }
-  if (is_text_display()) {
-    Fl_Text_Display* b = (Fl_Text_Display*)o;
-    if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
-  }
-  if (is_button()) {
-    Fl_Button* b = (Fl_Button*)o;
-    if (b->down_box()) {
-      write_string("down_box"); write_word(boxname(b->down_box()));}
-    if (b->shortcut()) write_string("shortcut 0x%x", b->shortcut());
-    if (b->value()) write_string("value 1");
-  } else if (!strcmp(type_name(), "Fl_Input_Choice")) {
-    Fl_Input_Choice* b = (Fl_Input_Choice*)o;
-    if (b->down_box()) {
-      write_string("down_box"); write_word(boxname(b->down_box()));}
-  } else if (is_menu_button()) {
-    Fl_Menu_* b = (Fl_Menu_*)o;
-    if (b->down_box()) {
-      write_string("down_box"); write_word(boxname(b->down_box()));}
-  }
-  if (o->color()!=tplate->color())
-    write_string("color %d", o->color());
-  if (o->selection_color()!=tplate->selection_color())
-    write_string("selection_color %d", o->selection_color());
-  if (o->labeltype()!=tplate->labeltype()) {
-    write_string("labeltype");
-    write_word(item_name(labeltypemenu, o->labeltype()));
-  }
-  if (o->labelfont()!=tplate->labelfont())
-    write_string("labelfont %d", o->labelfont());
-  if (o->labelsize()!=tplate->labelsize())
-    write_string("labelsize %d", o->labelsize());
-  if (o->labelcolor()!=tplate->labelcolor())
-    write_string("labelcolor %d", o->labelcolor());
-  if (o->align()!=tplate->align())
-    write_string("align %d", o->align());
-  if (o->when() != tplate->when())
-    write_string("when %d", o->when());
-  if (is_valuator()) {
-    Fl_Valuator* v = (Fl_Valuator*)o;
-    Fl_Valuator* f = (Fl_Valuator*)(tplate);
-    if (v->minimum()!=f->minimum()) write_string("minimum %g",v->minimum());
-    if (v->maximum()!=f->maximum()) write_string("maximum %g",v->maximum());
-    if (v->step()!=f->step()) write_string("step %g",v->step());
-    if (v->value()!=0.0) write_string("value %g",v->value());
-    if (is_valuator()>=2) {
-      double x = ((Fl_Slider*)v)->slider_size();
-      double y = ((Fl_Slider*)f)->slider_size();
-      if (x != y) write_string("slider_size %g", x);
-    }
-  }
-  if (is_spinner()) {
-    Fl_Spinner* v = (Fl_Spinner*)o;
-    Fl_Spinner* f = (Fl_Spinner*)(tplate);
-    if (v->minimum()!=f->minimum()) write_string("minimum %g",v->minimum());
-    if (v->maximum()!=f->maximum()) write_string("maximum %g",v->maximum());
-    if (v->step()!=f->step()) write_string("step %g",v->step());
-    if (v->value()!=1.0) write_string("value %g",v->value());
-  }
-  {Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) {
-    Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c);
-    if (f != ff) write_string("textfont %d", f);
-    if (s != fs) write_string("textsize %d", s);
-    if (c != fc) write_string("textcolor %d", c);
-  }}
-  if (!o->visible()) write_string("hide");
-  if (!o->active()) write_string("deactivate");
-  if (resizable()) write_string("resizable");
-  if (hotspot()) write_string(is_menu_item() ? "divider" : "hotspot");
-  for (int n=0; n < NUM_EXTRA_CODE; n++) if (extra_code(n)) {
-    write_indent(level+1);
-    write_string("code%d",n);
-    write_word(extra_code(n));
-  }
-  if (subclass()) {
-    write_indent(level+1);
-    write_string("class");
-    write_word(subclass());
-  }
-}
-
-int pasteoffset;
-extern double read_version;
-void Fl_Widget_Type::read_property(const char *c) {
-  int x,y,w,h; Fl_Font f; int s; Fl_Color cc;
-  if (!strcmp(c,"private")) {
-    public_ = 0;
-  } else if (!strcmp(c,"protected")) {
-    public_ = 2;
-  } else if (!strcmp(c,"xywh")) {
-    if (sscanf(read_word(),"%d %d %d %d",&x,&y,&w,&h) == 4) {
-      x += pasteoffset;
-      y += pasteoffset;
-      // FIXME temporary change!
-      if (read_version>=2.0 && o->parent() && o->parent()!=o->window()) {
-        x += o->parent()->x();
-        y += o->parent()->y();
-      }
-      o->resize(x,y,w,h);
-    }
-  } else if (!strcmp(c,"tooltip")) {
-    tooltip(read_word());
-  } else if (!strcmp(c,"image")) {
-    image_name(read_word());
-  } else if (!strcmp(c,"deimage")) {
-    inactive_name(read_word());
-  } else if (!strcmp(c,"type")) {
-    if (is_spinner()) 
-      ((Fl_Spinner*)o)->type(item_number(subtypes(), read_word()));
-    else
-      o->type(item_number(subtypes(), read_word()));
-  } else if (!strcmp(c,"box")) {
-    const char* value = read_word();
-    if ((x = boxnumber(value))) {
-      if (x == ZERO_ENTRY) x = 0;
-      o->box((Fl_Boxtype)x);
-    } else if (sscanf(value,"%d",&x) == 1) o->box((Fl_Boxtype)x);
-  } else if (is_button() && !strcmp(c,"down_box")) {
-    const char* value = read_word();
-    if ((x = boxnumber(value))) {
-      if (x == ZERO_ENTRY) x = 0;
-      ((Fl_Button*)o)->down_box((Fl_Boxtype)x);
-    }
-  } else if (!strcmp(type_name(), "Fl_Input_Choice") && !strcmp(c,"down_box")) {
-    const char* value = read_word();
-    if ((x = boxnumber(value))) {
-      if (x == ZERO_ENTRY) x = 0;
-      ((Fl_Input_Choice*)o)->down_box((Fl_Boxtype)x);
-    }
-  } else if (is_menu_button() && !strcmp(c,"down_box")) {
-    const char* value = read_word();
-    if ((x = boxnumber(value))) {
-      if (x == ZERO_ENTRY) x = 0;
-      ((Fl_Menu_*)o)->down_box((Fl_Boxtype)x);
-    }
-  } else if (is_button() && !strcmp(c,"value")) {
-    const char* value = read_word();
-    ((Fl_Button*)o)->value(atoi(value));
-  } else if (!strcmp(c,"color")) {
-    const char *cw = read_word();
-    if (cw[0]=='0' && cw[1]=='x') {
-      sscanf(cw,"0x%x",&x);
-      o->color(x);
-    } else {
-      int n = sscanf(cw,"%d %d",&x,&y);
-      if (n == 2) { // back compatibility...
-        if (x != 47) o->color(x);
-        o->selection_color(y);
-      } else {
-        o->color(x);
-      }
-    }
-  } else if (!strcmp(c,"selection_color")) {
-    if (sscanf(read_word(),"%d",&x)) o->selection_color(x);
-  } else if (!strcmp(c,"labeltype")) {
-    c = read_word();
-    if (!strcmp(c,"image")) {
-      Fluid_Image *i = Fluid_Image::find(label());
-      if (!i) read_error("Image file '%s' not found", label());
-      else setimage(i);
-      image_name(label());
-      label("");
-    } else {
-      o->labeltype((Fl_Labeltype)item_number(labeltypemenu,c));
-    }
-  } else if (!strcmp(c,"labelfont")) {
-    if (sscanf(read_word(),"%d",&x) == 1) o->labelfont(x);
-  } else if (!strcmp(c,"labelsize")) {
-    if (sscanf(read_word(),"%d",&x) == 1) o->labelsize(x);
-  } else if (!strcmp(c,"labelcolor")) {
-    if (sscanf(read_word(),"%d",&x) == 1) o->labelcolor(x);
-  } else if (!strcmp(c,"align")) {
-    if (sscanf(read_word(),"%d",&x) == 1) o->align(x);
-  } else if (!strcmp(c,"when")) {
-    if (sscanf(read_word(),"%d",&x) == 1) o->when(x);
-  } else if (!strcmp(c,"minimum")) {
-    if (is_valuator()) ((Fl_Valuator*)o)->minimum(strtod(read_word(),0));
-    if (is_spinner()) ((Fl_Spinner*)o)->minimum(strtod(read_word(),0));
-  } else if (!strcmp(c,"maximum")) {
-    if (is_valuator()) ((Fl_Valuator*)o)->maximum(strtod(read_word(),0));
-    if (is_spinner()) ((Fl_Spinner*)o)->maximum(strtod(read_word(),0));
-  } else if (!strcmp(c,"step")) {
-    if (is_valuator()) ((Fl_Valuator*)o)->step(strtod(read_word(),0));
-    if (is_spinner()) ((Fl_Spinner*)o)->step(strtod(read_word(),0));
-  } else if (!strcmp(c,"value")) {
-    if (is_valuator()) ((Fl_Valuator*)o)->value(strtod(read_word(),0));
-    if (is_spinner()) ((Fl_Spinner*)o)->value(strtod(read_word(),0));
-  } else if ((!strcmp(c,"slider_size")||!strcmp(c,"size"))&&is_valuator()==2) {
-    ((Fl_Slider*)o)->slider_size(strtod(read_word(),0));
-  } else if (!strcmp(c,"textfont")) {
-    if (sscanf(read_word(),"%d",&x) == 1) {f=(Fl_Font)x; textstuff(1,f,s,cc);}
-  } else if (!strcmp(c,"textsize")) {
-    if (sscanf(read_word(),"%d",&x) == 1) {s=x; textstuff(2,f,s,cc);}
-  } else if (!strcmp(c,"textcolor")) {
-    if (sscanf(read_word(),"%d",&x) == 1) {cc=(Fl_Color)x;textstuff(3,f,s,cc);}
-  } else if (!strcmp(c,"hide")) {
-    o->hide();
-  } else if (!strcmp(c,"deactivate")) {
-    o->deactivate();
-  } else if (!strcmp(c,"resizable")) {
-    resizable(1);
-  } else if (!strcmp(c,"hotspot") || !strcmp(c, "divider")) {
-    hotspot(1);
-  } else if (!strcmp(c,"class")) {
-    subclass(read_word());
-  } else if (!strcmp(c,"shortcut")) {
-    int shortcut = strtol(read_word(),0,0);
-    if (is_button()) ((Fl_Button*)o)->shortcut(shortcut);
-    else if (is_input()) ((Fl_Input_*)o)->shortcut(shortcut);
-    else if (is_value_input()) ((Fl_Value_Input*)o)->shortcut(shortcut);
-    else if (is_text_display()) ((Fl_Text_Display*)o)->shortcut(shortcut);
-  } else {
-    if (!strncmp(c,"code",4)) {
-      int n = atoi(c+4);
-      if (n >= 0 && n <= NUM_EXTRA_CODE) {
-        extra_code(n,read_word());
-        return;
-      }
-    } else if (!strcmp(c,"extra_code")) {
-      extra_code(0,read_word());
-      return;
-    }
-    Fl_Type::read_property(c);
-  }
-}
-
-Fl_Menu_Item boxmenu1[] = {
-  // these extra ones are for looking up fdesign saved strings:
-  {"NO_FRAME",		0,0,(void *)FL_NO_BOX},
-  {"ROUNDED3D_UPBOX",	0,0,(void *)_FL_ROUND_UP_BOX},
-  {"ROUNDED3D_DOWNBOX",	0,0,(void *)_FL_ROUND_DOWN_BOX},
-  {"OVAL3D_UPBOX",	0,0,(void *)_FL_ROUND_UP_BOX},
-  {"OVAL3D_DOWNBOX",	0,0,(void *)_FL_ROUND_DOWN_BOX},
-  {"0",			0,0,(void *)ZERO_ENTRY},
-  {"1",			0,0,(void *)FL_UP_BOX},
-  {"2",			0,0,(void *)FL_DOWN_BOX},
-  {"3",			0,0,(void *)FL_FLAT_BOX},
-  {"4",			0,0,(void *)FL_BORDER_BOX},
-  {"5",			0,0,(void *)FL_SHADOW_BOX},
-  {"6",			0,0,(void *)FL_FRAME_BOX},
-  {"7",			0,0,(void *)FL_ROUNDED_BOX},
-  {"8",			0,0,(void *)FL_RFLAT_BOX},
-  {"9",			0,0,(void *)FL_RSHADOW_BOX},
-  {"10",		0,0,(void *)FL_UP_FRAME},
-  {"11",		0,0,(void *)FL_DOWN_FRAME},
-{0}};
-
-extern int fdesign_flip;
-int lookup_symbol(const char *, int &, int numberok = 0);
-
-int Fl_Widget_Type::read_fdesign(const char* propname, const char* value) {
-  int v;
-  if (!strcmp(propname,"box")) {
-    float x,y,w,h;
-    if (sscanf(value,"%f %f %f %f",&x,&y,&w,&h) == 4) {
-      if (fdesign_flip) {
-	Fl_Type *p;
-	for (p = parent; p && !p->is_window(); p = p->parent) {/*empty*/}
-	if (p && p->is_widget()) y = ((Fl_Widget_Type*)p)->o->h()-(y+h);
-      }	  
-      x += pasteoffset;
-      y += pasteoffset;
-      o->resize(int(x),int(y),int(w),int(h));
-    }
-  } else if (!strcmp(propname,"label")) {
-    label(value);
-  } else if (!strcmp(propname,"name")) {
-    this->name(value);
-  } else if (!strcmp(propname,"callback")) {
-    callback(value); user_data_type("long");
-  } else if (!strcmp(propname,"argument")) {
-    user_data(value);
-  } else if (!strcmp(propname,"shortcut")) {
-    if (value[0]) {
-      char buf[128]; sprintf(buf,"o->shortcut(\"%s\");",value);
-      extra_code(0,buf);
-    }
-  } else if (!strcmp(propname,"style")) {
-    if (!strncmp(value,"FL_NORMAL",9)) return 1;
-    if (!lookup_symbol(value,v,1)) return 0;
-    o->labelfont(v); o->labeltype((Fl_Labeltype)(v>>8));
-  } else if (!strcmp(propname,"size")) {
-    if (!lookup_symbol(value,v,1)) return 0;
-    o->labelsize(v);
-  } else if (!strcmp(propname,"type")) {
-    if (!strncmp(value,"NORMAL",6)) return 1;
-    if (lookup_symbol(value,v,1)) {o->type(v); return 1;}
-    if (!strcmp(value+strlen(value)-5,"FRAME")) goto TRY_BOXTYPE;
-    if (!strcmp(value+strlen(value)-3,"BOX")) goto TRY_BOXTYPE;
-    return 0;
-  } else if (!strcmp(propname,"lcol")) {
-    if (!lookup_symbol(value,v,1)) return 0;
-    o->labelcolor(v);
-  } else if (!strcmp(propname,"return")) {
-    if (!lookup_symbol(value,v,0)) return 0;
-    o->when(v|FL_WHEN_RELEASE);
-  } else if (!strcmp(propname,"alignment")) {
-    if (!lookup_symbol(value,v)) {
-      // convert old numeric values:
-      int v1 = atoi(value); if (v1 <= 0 && strcmp(value,"0")) return 0;
-      v = 0;
-      if (v1 >= 5) {v = FL_ALIGN_INSIDE; v1 -= 5;}
-      switch (v1) {
-      case 0: v += FL_ALIGN_TOP; break;
-      case 1: v += FL_ALIGN_BOTTOM; break;
-      case 2: v += FL_ALIGN_LEFT; break;
-      case 3: v += FL_ALIGN_RIGHT; break;
-      case 4: v += FL_ALIGN_CENTER; break;
-      default: return 0;
-      }
-    }
-    o->align(v);
-  } else if (!strcmp(propname,"resizebox")) {
-    resizable(1);
-  } else if (!strcmp(propname,"colors")) {
-    char* p = (char*)value;
-    while (*p != ' ') {if (!*p) return 0; p++;}
-    *p = 0;
-    int v1;
-    if (!lookup_symbol(value,v,1) || !lookup_symbol(p+1,v1,1)) {
-      *p=' '; return 0;}
-    o->color(v,v1);
-  } else if (!strcmp(propname,"resize")) {
-    return !strcmp(value,"FL_RESIZE_ALL");
-  } else if (!strcmp(propname,"gravity")) {
-    return !strcmp(value,"FL_NoGravity FL_NoGravity");
-  } else if (!strcmp(propname,"boxtype")) {
-  TRY_BOXTYPE:
-    int x = boxnumber(value);
-    if (!x) {x = item_number(boxmenu1, value); if (x < 0) return 0;}
-    if (x == ZERO_ENTRY) {
-      x = 0;
-      if (o->box() != ((Fl_Widget_Type*)factory)->o->box()) return 1; // kludge for frame
-    }
-    o->box((Fl_Boxtype)x);
-  } else {
-    return 0;
-  }
-  return 1;
-}
-
-void leave_live_mode_cb(Fl_Widget*, void*) {
-  live_mode_cb(0, 0);
-}
-
-Fl_Widget *Fl_Widget_Type::enter_live_mode(int) {
-  live_widget = widget(o->x(), o->y(), o->w(), o->h());
-  if (live_widget)
-    copy_properties();
-  return live_widget;
-}
-
-void Fl_Widget_Type::leave_live_mode() {
-}
-
-/**
- * copy all properties from the edit widget to the live widget
- */
-void Fl_Widget_Type::copy_properties() {
-  if (!live_widget) 
-    return;
-
-  // copy all attributes common to all widget types
-  Fl_Widget *w = live_widget;
-  w->label(o->label());
-  w->tooltip(tooltip());
-  w->type(o->type());
-  w->box(o->box());
-  w->color(o->color());
-  w->selection_color(o->selection_color());
-  w->labeltype(o->labeltype());
-  w->labelfont(o->labelfont());
-  w->labelsize(o->labelsize());
-  w->labelcolor(o->labelcolor());
-  w->align(o->align());
-
-  // copy all attributes specific to widgets derived from Fl_Button
-  if (is_button()) {
-    Fl_Button* d = (Fl_Button*)live_widget, *s = (Fl_Button*)o;
-    d->down_box(s->down_box());
-    d->shortcut(s->shortcut());
-    d->value(s->value());
-  }
-
-  // copy all attributes specific to widgets derived from Fl_Input_
-  if (is_input()) {
-    Fl_Input_* d = (Fl_Input_*)live_widget, *s = (Fl_Input_*)o;
-    d->shortcut(s->shortcut());
-  }
-
-  // copy all attributes specific to widgets derived from Fl_Value_Input
-  if (is_value_input()) {
-    Fl_Value_Input* d = (Fl_Value_Input*)live_widget, *s = (Fl_Value_Input*)o;
-    d->shortcut(s->shortcut());
-  }
-
-  // copy all attributes specific to widgets derived from Fl_Text_Display
-  if (is_text_display()) {
-    Fl_Text_Display* d = (Fl_Text_Display*)live_widget, *s = (Fl_Text_Display*)o;
-    d->shortcut(s->shortcut());
-  }
-
-  // copy all attributes specific to Fl_Valuator and derived classes
-  if (is_valuator()) {
-    Fl_Valuator* d = (Fl_Valuator*)live_widget, *s = (Fl_Valuator*)o;
-    d->minimum(s->minimum());
-    d->maximum(s->maximum());
-    d->step(s->step());
-    d->value(s->value());
-    if (is_valuator()>=2) {
-      Fl_Slider *d = (Fl_Slider*)live_widget, *s = (Fl_Slider*)o;
-      d->slider_size(s->slider_size());
-    }
-  }
-
-  // copy all attributes specific to Fl_Spinner and derived classes
-  if (is_spinner()) {
-    Fl_Spinner* d = (Fl_Spinner*)live_widget, *s = (Fl_Spinner*)o;
-    d->minimum(s->minimum());
-    d->maximum(s->maximum());
-    d->step(s->step());
-    d->value(s->value());
-  }
- 
-/* TODO: implement this
-  {Fl_Font ff; int fs; Fl_Color fc; if (textstuff(4,ff,fs,fc)) {
-    Fl_Font f; int s; Fl_Color c; textstuff(0,f,s,c);
-    if (f != ff) write_string("textfont %d", f);
-    if (s != fs) write_string("textsize %d", s);
-    if (c != fc) write_string("textcolor %d", c);
-  }}*/
-
-  if (!o->visible()) 
-    w->hide();
-  if (!o->active()) 
-    w->deactivate();
-  if (resizable() && w->parent()) 
-    w->parent()->resizable(o);
-}
-
-void Fl_Pack_Type::copy_properties()
-{
-  Fl_Group_Type::copy_properties();
-  Fl_Pack *d = (Fl_Pack*)live_widget, *s =(Fl_Pack*)o;
-  d->spacing(s->spacing());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Widget_Type.h
+++ /dev/null
@@ -1,33 +1,0 @@
-//
-// "$Id$"
-//
-// Widget type header file for the Fast Light Tool Kit (FLTK).
-//
-// Type for creating all subclasses of Fl_Widget
-// This should have the widget pointer in it, but it is still in the
-// Fl_Type base class.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "Fl_Type.h"
-
-struct Fl_Menu_Item;
-class Fluid_Image;
-
-extern void* const LOAD;
-extern Fl_Widget_Type *current_widget; // one of the selected ones
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fl_Window_Type.cxx
+++ /dev/null
@@ -1,1601 +1,0 @@
-//
-// "$Id$"
-//
-// Window type code for the Fast Light Tool Kit (FLTK).
-//
-// The widget describing an Fl_Window.  This is also all the code
-// for interacting with the overlay, which allows the user to
-// select, move, and resize the children widgets.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/fl_message.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Round_Button.H>
-#include "Fl_Widget_Type.h"
-#include "undo.h"
-#include <math.h>
-#include <stdlib.h>
-#include "alignment_panel.h"
-#include <stdio.h>
-
-extern int gridx;
-extern int gridy;
-extern int snap;
-extern int show_guides;
-
-int include_H_from_C = 1;
-int use_FL_COMMAND = 0;
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-
-extern Fl_Preferences	fluid_prefs;
-
-inline int fl_min(int a, int b) { return (a < b ? a : b); } 
-
-#include "widget_panel.h"
-
-// Update the XYWH values in the widget panel...
-static void update_xywh() {
-  if (current_widget && current_widget->is_widget()) {
-    widget_x_input->value(((Fl_Widget_Type *)current_widget)->o->x());
-    widget_y_input->value(((Fl_Widget_Type *)current_widget)->o->y());
-    widget_w_input->value(((Fl_Widget_Type *)current_widget)->o->w());
-    widget_h_input->value(((Fl_Widget_Type *)current_widget)->o->h());
-  }
-}
-
-void guides_cb(Fl_Check_Button *i, long) {
-  show_guides = i->value();
-  fluid_prefs.set("show_guides", show_guides);
-
-  for (Fl_Type *p = Fl_Type::first; p; p = p->next) {
-    if (p->is_window()) {
-      Fl_Window_Type *w = (Fl_Window_Type *)p;
-      ((Fl_Overlay_Window *)(w->o))->redraw_overlay();
-    }
-  }
-}
-
-void grid_cb(Fl_Int_Input *i, long v) {
-  int n = atoi(i->value());
-  if (n < 0) n = 0;
-  switch (v) {
-    case 1:
-      gridx = n;
-      fluid_prefs.set("gridx", n);
-      break;
-    case 2:
-      gridy = n;
-      fluid_prefs.set("gridy", n);
-      break;
-    case 3:
-      snap = n;
-      fluid_prefs.set("snap", n);
-      break;
-  }
-
-  // Next go through all of the windows in the project and set the
-  // stepping for resizes...
-  Fl_Type *p;
-  Fl_Window_Type *w;
-
-  for (p = Fl_Type::first; p; p = p->next) {
-    if (p->is_window()) {
-      w = (Fl_Window_Type *)p;
-      ((Fl_Window *)(w->o))->size_range(gridx, gridy,
-                                        Fl::w(), Fl::h(),
-                                        gridx, gridy, 0);
-    }
-  }
-}
-
-// Set default widget sizes...
-void default_widget_size_cb(Fl_Round_Button *b, long size) {
-  // Update the "normal" text size of new widgets...
-  b->setonly();
-  Fl_Widget_Type::default_size = size;
-  fluid_prefs.set("widget_size", Fl_Widget_Type::default_size);
-}
-
-
-void i18n_type_cb(Fl_Choice *c, void *) {
-  undo_checkpoint();
-
-  switch (i18n_type = c->value()) {
-  case 0 : /* None */
-      i18n_include_input->hide();
-      i18n_file_input->hide();
-      i18n_set_input->hide();
-      i18n_function_input->hide();
-      break;
-  case 1 : /* GNU gettext */
-      i18n_include_input->value("<libintl.h>");
-      i18n_include = i18n_include_input->value();
-      i18n_function_input->value("gettext");
-      i18n_function = i18n_function_input->value();
-      i18n_include_input->show();
-      i18n_file_input->hide();
-      i18n_set_input->hide();
-      i18n_function_input->show();
-      break;
-  case 2 : /* POSIX cat */
-      i18n_include_input->value("<nl_types.h>");
-      i18n_file_input->value("");
-      i18n_file = i18n_file_input->value();
-      i18n_set_input->value("1");
-      i18n_set = i18n_set_input->value();
-      i18n_include_input->show();
-      i18n_include = i18n_include_input->value();
-      i18n_file_input->show();
-      i18n_set_input->show();
-      i18n_function_input->hide();
-      break;
-  }
-
-  set_modflag(1);
-}
-
-void i18n_text_cb(Fl_Input *i, void *) {
-  undo_checkpoint();
-  
-  if (i == i18n_function_input)
-    i18n_function = i->value();
-  else if (i == i18n_file_input)
-    i18n_file = i->value();
-  else if (i == i18n_include_input)
-    i18n_include = i->value();
-  
-  set_modflag(1);
-}
-
-void i18n_int_cb(Fl_Int_Input *i, void *) {
-  undo_checkpoint();
-  
-  if (i == i18n_set_input)
-    i18n_set = i->value();
-  
-  set_modflag(1);
-}
-
-extern const char* header_file_name;
-extern const char* code_file_name;
-
-void show_project_cb(Fl_Widget *, void *) {
-  if(project_window==0) make_project_window();
-  include_H_from_C_button->value(include_H_from_C);
-  use_FL_COMMAND_button->value(use_FL_COMMAND);
-  header_file_input->value(header_file_name);
-  code_file_input->value(code_file_name);
-  i18n_type_chooser->value(i18n_type);
-  i18n_function_input->value(i18n_function);
-  i18n_file_input->value(i18n_file);
-  i18n_set_input->value(i18n_set);
-  i18n_include_input->value(i18n_include);
-  switch (i18n_type) {
-  case 0 : /* None */
-      i18n_include_input->hide();
-      i18n_file_input->hide();
-      i18n_set_input->hide();
-      i18n_function_input->hide();
-      break;
-  case 1 : /* GNU gettext */
-      i18n_include_input->show();
-      i18n_file_input->hide();
-      i18n_set_input->hide();
-      i18n_function_input->show();
-      break;
-  case 2 : /* POSIX cat */
-      i18n_include_input->show();
-      i18n_file_input->show();
-      i18n_set_input->show();
-      i18n_function_input->hide();
-      break;
-  }
-  project_window->hotspot(project_window);
-  project_window->show();
-}
-
-void show_grid_cb(Fl_Widget *, void *) {
-  char buf[128];
-  sprintf(buf,"%d",gridx); horizontal_input->value(buf);
-  sprintf(buf,"%d",gridy); vertical_input->value(buf);
-  sprintf(buf,"%d",snap); snap_input->value(buf);
-  guides_toggle->value(show_guides);
-  int s = Fl_Widget_Type::default_size;
-  if (s<=8) def_widget_size[0]->setonly();
-  else if (s<=11) def_widget_size[1]->setonly();
-  else if (s<=14) def_widget_size[2]->setonly();
-  else if (s<=18) def_widget_size[3]->setonly();
-  else if (s<=24) def_widget_size[4]->setonly();
-  else if (s<=32) def_widget_size[5]->setonly();
-  grid_window->hotspot(grid_window);
-  grid_window->show();
-}
-
-void show_settings_cb(Fl_Widget *, void *) {
-  settings_window->hotspot(settings_window);
-  settings_window->show();
-}
-
-void show_global_settings_cb(Fl_Widget *, void *) {
-  global_settings_window->hotspot(global_settings_window);
-  show_global_settings_window();
-}
-
-void header_input_cb(Fl_Input* i, void*) {
-  if (header_file_name && strcmp(header_file_name, i->value()))
-    set_modflag(1);
-  header_file_name = i->value();
-}
-void code_input_cb(Fl_Input* i, void*) {
-  if (code_file_name && strcmp(code_file_name, i->value()))
-    set_modflag(1);
-  code_file_name = i->value();
-}
-
-void include_H_from_C_button_cb(Fl_Check_Button* b, void*) {
-  if (include_H_from_C != b->value()) {
-    set_modflag(1);
-    include_H_from_C = b->value();
-  }
-}
-
-void use_FL_COMMAND_button_cb(Fl_Check_Button* b, void*) {
-  if (use_FL_COMMAND != b->value()) {
-    set_modflag(1);
-    use_FL_COMMAND = b->value();
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Menu_Item window_type_menu[] = {
-  {"Single",0,0,(void*)FL_WINDOW},
-  {"Double",0,0,(void*)(FL_WINDOW+1)},
-  {0}};
-
-static int overlays_invisible;
-
-// The following Fl_Widget is used to simulate the windows.  It has
-// an overlay for the fluid ui, and special-cases the FL_NO_BOX.
-
-class Overlay_Window : public Fl_Overlay_Window {
-  void draw();
-  void draw_overlay();
-public:
-  Fl_Window_Type *window;
-  int handle(int);
-  Overlay_Window(int W,int H) : Fl_Overlay_Window(W,H) {Fl_Group::current(0);}
-  void resize(int,int,int,int);
-  uchar *read_image(int &ww, int &hh);
-};
-void Overlay_Window::draw() {
-  const int CHECKSIZE = 8;
-  // see if box is clear or a frame or rounded:
-  if ((damage()&FL_DAMAGE_ALL) &&
-      (!box() || (box()>=4&&!(box()&2)) || box()>=_FL_ROUNDED_BOX)) {
-    // if so, draw checkerboard so user can see what areas are clear:
-    for (int Y = 0; Y < h(); Y += CHECKSIZE) 
-      for (int X = 0; X < w(); X += CHECKSIZE) {
-	fl_color(((Y/(2*CHECKSIZE))&1) != ((X/(2*CHECKSIZE))&1) ?
-		 FL_WHITE : FL_BLACK);
-	fl_rectf(X,Y,CHECKSIZE,CHECKSIZE);
-      }
-  }
-  Fl_Overlay_Window::draw();
-}
-
-extern Fl_Window *main_window;
-
-// Read an image of the overlay window
-uchar *Overlay_Window::read_image(int &ww, int &hh) {
-  // Create an off-screen buffer for the window...
-  //main_window->make_current();
-  make_current();
-
-  ww = w();
-  hh = h();
-
-  Fl_Offscreen offscreen = fl_create_offscreen(ww, hh);
-  uchar *pixels;
-
-  // Redraw the window into the offscreen buffer...
-  fl_begin_offscreen(offscreen);
-
-  if (!shown()) image(Fl::scheme_bg_);
-
-  redraw();
-  draw();
-
-  // Read the screen image...
-  pixels = fl_read_image(0, 0, 0, ww, hh);
-
-  fl_end_offscreen();
-
-  // Cleanup and return...
-  fl_delete_offscreen(offscreen);
-  main_window->make_current();
-  return pixels;
-}
-
-void Overlay_Window::draw_overlay() {
-  window->draw_overlay();
-}
-int Overlay_Window::handle(int e) {
-  int ret =  window->handle(e);
-  if (ret==0) {
-    switch (e) {
-      case FL_SHOW:
-      case FL_HIDE:
-        ret = Fl_Overlay_Window::handle(e);
-    }
-  }
-  return ret;
-}
-
-Fl_Type *Fl_Window_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && !p->is_code_block()) p = p->parent;
-  if (!p) {
-    fl_message("Please select a function");
-    return 0;
-  }
-  Fl_Window_Type *myo = new Fl_Window_Type();
-  if (!this->o) {// template widget
-    this->o = new Fl_Window(100,100);
-    Fl_Group::current(0);
-  }
-  // Set the size ranges for this window; in order to avoid opening the
-  // X display we use an arbitrary maximum size...
-  ((Fl_Window *)(this->o))->size_range(gridx, gridy,
-                                       3072, 2048,
-                                       gridx, gridy, 0);
-  myo->factory = this;
-  myo->drag = 0;
-  myo->numselected = 0;
-  Overlay_Window *w = new Overlay_Window(100,100);
-  w->window = myo;
-  myo->o = w;
-  myo->add(p);
-  myo->modal = 0;
-  myo->non_modal = 0;
-  return myo;
-}
-
-void Fl_Window_Type::add_child(Fl_Type* cc, Fl_Type* before) {
-  if (!cc->is_widget()) return;
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Window*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-void Fl_Window_Type::remove_child(Fl_Type* cc) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Window*)o)->remove(c->o);
-  o->redraw();
-}
-
-void Fl_Window_Type::move_child(Fl_Type* cc, Fl_Type* before) {
-  Fl_Widget_Type* c = (Fl_Widget_Type*)cc;
-  ((Fl_Window*)o)->remove(c->o);
-  Fl_Widget* b = before ? ((Fl_Widget_Type*)before)->o : 0;
-  ((Fl_Window*)o)->insert(*(c->o), b);
-  o->redraw();
-}
-
-////////////////////////////////////////////////////////////////
-
-// Double-click on window widget shows the window, or if already shown,
-// it shows the control panel.
-void Fl_Window_Type::open() {
-  Overlay_Window *w = (Overlay_Window *)o;
-  if (w->shown()) {
-    w->show();
-    Fl_Widget_Type::open();
-  } else {
-    Fl_Widget *p = w->resizable();
-    if (!p) w->resizable(w);
-    w->show();
-    w->resizable(p);
-  }
-
-  w->image(Fl::scheme_bg_);
-  w->size_range(gridx, gridy, Fl::w(), Fl::h(), gridx, gridy, 0);
-}
-
-// Read an image of the window
-uchar *Fl_Window_Type::read_image(int &ww, int &hh) {
-  Overlay_Window *w = (Overlay_Window *)o;
-
-  // Read the screen image...
-  return (w->read_image(ww, hh));
-}
-
-
-// control panel items:
-
-void modal_cb(Fl_Light_Button* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) {i->hide(); return;}
-    i->show();
-    i->value(((Fl_Window_Type *)current_widget)->modal);
-  } else {
-    ((Fl_Window_Type *)current_widget)->modal = i->value();
-    set_modflag(1);
-  }
-}
-
-void non_modal_cb(Fl_Light_Button* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) {i->hide(); return;}
-    i->show();
-    i->value(((Fl_Window_Type *)current_widget)->non_modal);
-  } else {
-    ((Fl_Window_Type *)current_widget)->non_modal = i->value();
-    set_modflag(1);
-  }
-}
-
-void border_cb(Fl_Light_Button* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) {i->hide(); return;}
-    i->show();
-    i->value(((Fl_Window*)(current_widget->o))->border());
-  } else {
-    ((Fl_Window*)(current_widget->o))->border(i->value());
-    set_modflag(1);
-  }
-}
-
-void xclass_cb(Fl_Input* i, void* v) {
-  if (v == LOAD) {
-    if (!current_widget->is_window()) {
-      i->hide(); 
-      i->parent()->hide(); // hides the "X Class:" label as well
-      return;
-    }
-    i->show();
-    i->parent()->show();
-    i->value(((Fl_Widget_Type *)current_widget)->xclass);
-  } else {
-    int mod = 0;
-    for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-      if (o->selected && o->is_widget()) {
-        mod = 1;
-	Fl_Widget_Type* w = (Fl_Widget_Type*)o;
-	if (w->is_window() || w->is_button())
-	  storestring(i->value(),w->xclass);
-	if (w->is_window()) ((Fl_Window*)(w->o))->xclass(w->xclass);
-	else if (w->is_menu_item()) w->redraw();
-      }
-    }
-    if (mod) set_modflag(1);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Window_Type::setlabel(const char *n) {
-  if (o) ((Fl_Window *)o)->label(n);
-}
-
-// make() is called on this widget when user picks window off New menu:
-Fl_Window_Type Fl_Window_type;
-
-// Resize from window manager...
-void Overlay_Window::resize(int X,int Y,int W,int H) {
-  Fl_Widget* t = resizable(); resizable(0);
-
-  // do not set the mod flag if the window was not resized. In FLUID, all
-  // windows are opened without a given x/y position, so modifying x/y
-  // should not mark the project as dirty
-  if (W!=w() || H!=h())
-    set_modflag(1);
-
-  Fl_Overlay_Window::resize(X,Y,W,H);
-  resizable(t);
-  update_xywh();
-}
-
-// calculate actual move by moving mouse position (mx,my) to
-// nearest multiple of gridsize, and snap to original position
-void Fl_Window_Type::newdx() {
-  int mydx, mydy;
-  if (Fl::event_state(FL_ALT) || !snap) {
-    mydx = mx-x1;
-    mydy = my-y1;
-
-    if (abs(mydx) < 2 && abs(mydy) < 2) mydx = mydy = 0;
-  } else {
-    int dx0 = mx-x1;
-    int ix = (drag&RIGHT) ? br : bx;
-    mydx = gridx ? ((ix+dx0+gridx/2)/gridx)*gridx - ix : dx0;
-    if (dx0 > snap) {
-      if (mydx < 0) mydx = 0;
-    } else if (dx0 < -snap) {
-      if (mydx > 0) mydx = 0;
-    } else 
-      mydx = 0;
-    int dy0 = my-y1;
-    int iy = (drag&BOTTOM) ? by : bt;
-    mydy = gridy ? ((iy+dy0+gridy/2)/gridy)*gridy - iy : dy0;
-    if (dy0 > snap) {
-      if (mydy < 0) mydy = 0;
-    } else if (dy0 < -snap) {
-      if (mydy > 0) mydy = 0;
-    } else 
-      mydy = 0;
-  }
-
-  if (!(drag & (DRAG | BOX | LEFT | RIGHT))) {
-    mydx = 0;
-    dx = 0;
-  }
-
-  if (!(drag & (DRAG | BOX | TOP | BOTTOM))) {
-    mydy = 0;
-    dy = 0;
-  }
-
-  if (dx != mydx || dy != mydy) {
-    dx = mydx; dy = mydy;
-    ((Overlay_Window *)o)->redraw_overlay();
-  }
-}
-
-// Move a widget according to dx and dy calculated above
-void Fl_Window_Type::newposition(Fl_Widget_Type *myo,int &X,int &Y,int &R,int &T) {
-  X = myo->o->x();
-  Y = myo->o->y();
-  R = X+myo->o->w();
-  T = Y+myo->o->h();
-  if (!drag) return;
-  if (drag&DRAG) {
-    X += dx;
-    Y += dy;
-    R += dx;
-    T += dy;
-  } else {
-    if (drag&LEFT) {
-      if (X==bx) {
-        X += dx; 
-      } else {
-        if (X<bx+dx) X = bx+dx;
-      }
-    }
-    if (drag&TOP) {
-      if (Y==by) {
-        Y += dy;
-      } else {
-        if (Y<by+dy) Y = by+dy;
-      }
-    }
-    if (drag&RIGHT) {
-      if (R==br) {
-        R += dx; 
-      } else {
-        if (R>br+dx) R = br+dx;
-      }
-    }
-    if (drag&BOTTOM) {
-      if (T==bt) {
-        T += dy; 
-      } else {
-        if (T>bt+dx) T = bt+dx;
-      }
-    }
-  }
-  if (R<X) {int n = X; X = R; R = n;}
-  if (T<Y) {int n = Y; Y = T; T = n;}
-}
-
-// draw a vertical arrow pointing toward y2
-static void draw_v_arrow(int x, int y1, int y2) {
-  int dy = (y1>y2) ? -1 : 1 ;
-  fl_yxline(x, y1, y2);
-  fl_xyline(x-4, y2, x+4);
-  fl_line(x-2, y2-dy*5, x, y2-dy);
-  fl_line(x+2, y2-dy*5, x, y2-dy);
-}
-
-static void draw_h_arrow(int x1, int y, int x2) {
-  int dx = (x1>x2) ? -1 : 1 ;
-  fl_xyline(x1, y, x2);
-  fl_yxline(x2, y-4, y+4);
-  fl_line(x2-dx*5, y-2, x2-dx, y);
-  fl_line(x2-dx*5, y+2, x2-dx, y);
-}
-
-static void draw_top_brace(const Fl_Widget *w) {
-  fl_yxline(w->x(), w->y()-2, w->y()+6);
-  fl_yxline(w->x()+w->w()-1, w->y()-2, w->y()+6);
-  fl_xyline(w->x()-2, w->y(), w->x()+w->w()+1);
-}
-
-static void draw_left_brace(const Fl_Widget *w) {
-  fl_xyline(w->x()-2, w->y(), w->x()+6);
-  fl_xyline(w->x()-2, w->y()+w->h()-1, w->x()+6);
-  fl_yxline(w->x(), w->y()-2, w->y()+w->h()+1);
-}
-
-static void draw_right_brace(const Fl_Widget *w) {
-  int xx = w->x() + w->w() - 1;
-  fl_xyline(xx-6, w->y(), xx+2);
-  fl_xyline(xx-6, w->y()+w->h()-1, xx+2);
-  fl_yxline(xx, w->y()-2, w->y()+w->h()+1);
-}
-
-static void draw_bottom_brace(const Fl_Widget *w) {
-  int yy = w->y() + w->h() - 1;
-  fl_yxline(w->x(), yy-6, yy+2);
-  fl_yxline(w->x()+w->w()-1, yy-6, yy+2);
-  fl_xyline(w->x()-2, yy, w->x()+w->w()+1);
-}
-
-static void draw_height(int x, int y, int b, Fl_Align a) {
-  char buf[16];
-  int h = b - y;
-  sprintf(buf, "%d", h);
-  fl_font(FL_HELVETICA, 9);
-  int lw = (int)fl_width(buf);
-  int lx;
-
-  b --;
-  if (h < 30) {
-    // Move height to the side...
-    if (a == FL_ALIGN_LEFT) lx = x - lw - 2;
-    else lx = x + 2;
-
-    fl_yxline(x, y, b);
-  } else {
-    // Put height inside the arrows...
-    lx = x - lw / 2;
-
-    fl_yxline(x, y, y + (h - 11) / 2);
-    fl_yxline(x, y + (h + 11) / 2, b);
-  }
-
-  // Draw the height...
-  fl_draw(buf, lx, y + (h + 9) / 2);
-
-  // Draw the arrowheads...
-  fl_line(x-2, y+5, x, y+1, x+2, y+5);
-  fl_line(x-2, b-5, x, b-1, x+2, b-5);
-
-  // Draw the end lines...
-  fl_xyline(x - 4, y, x + 4);
-  fl_xyline(x - 4, b, x + 4);
-}
-
-static void draw_width(int x, int y, int r, Fl_Align a) {
-  char buf[16];
-  int w = r-x;
-  sprintf(buf, "%d", w);
-  fl_font(FL_HELVETICA, 9);
-  int lw = (int)fl_width(buf);
-  int ly = y + 4;
-
-  r --;
-
-  if (lw > (w - 20)) {
-    // Move width above/below the arrows...
-    if (a == FL_ALIGN_TOP) ly -= 10;
-    else ly += 10;
-
-    fl_xyline(x, y, r);
-  } else {
-    // Put width inside the arrows...
-    fl_xyline(x, y, x + (w - lw - 2) / 2);
-    fl_xyline(x + (w + lw + 2) / 2, y, r);
-  }
-
-  // Draw the width...
-  fl_draw(buf, x + (w - lw) / 2, ly);
-
-  // Draw the arrowheads...
-  fl_line(x+5, y-2, x+1, y, x+5, y+2);
-  fl_line(r-5, y-2, r-1, y, r-5, y+2);
-
-  // Draw the end lines...
-  fl_yxline(x, y - 4, y + 4);
-  fl_yxline(r, y - 4, y + 4);
-}
-
-void Fl_Window_Type::draw_overlay() {
-  if (recalc) {
-    bx = o->w(); by = o->h(); br = 0; bt = 0;
-    numselected = 0;
-    for (Fl_Type *q=next; q && q->level>level; q=q->next)
-      if (q->selected && q->is_widget() && !q->is_menu_item()) {
-	numselected++;
-	Fl_Widget_Type* myo = (Fl_Widget_Type*)q;
-	if (myo->o->x() < bx) bx = myo->o->x();
-	if (myo->o->y() < by) by = myo->o->y();
-	if (myo->o->x()+myo->o->w() > br) br = myo->o->x()+myo->o->w();
-	if (myo->o->y()+myo->o->h() > bt) bt = myo->o->y()+myo->o->h();
-      }
-    recalc = 0;
-    sx = bx; sy = by; sr = br; st = bt;
-  }
-  fl_color(FL_RED);
-  if (drag==BOX && (x1 != mx || y1 != my)) {
-    int x = x1; int r = mx; if (x > r) {x = mx; r = x1;}
-    int y = y1; int b = my; if (y > b) {y = my; b = y1;}
-    fl_rect(x,y,r-x,b-y);
-  }
-  if (overlays_invisible && !drag) return;
-  if (selected) fl_rect(0,0,o->w(),o->h());
-  if (!numselected) return;
-  int mybx,myby,mybr,mybt;
-  int mysx,mysy,mysr,myst;
-  mybx = mysx = o->w(); myby = mysy = o->h(); mybr = mysr = 0; mybt = myst = 0;
-  Fl_Type *selection = 0L; // used to store the one selected widget (if n==1)
-  for (Fl_Type *q=next; q && q->level>level; q = q->next)
-    if (q->selected && q->is_widget() && !q->is_menu_item()) {
-      selection = q;
-      Fl_Widget_Type* myo = (Fl_Widget_Type*)q;
-      int x,y,r,t;
-      newposition(myo,x,y,r,t);
-      if (!show_guides || !drag || numselected != 1) fl_rect(x,y,r-x,t-y);
-      if (x < mysx) mysx = x;
-      if (y < mysy) mysy = y;
-      if (r > mysr) mysr = r;
-      if (t > myst) myst = t;
-      if (!(myo->o->align() & FL_ALIGN_INSIDE)) {
-        // Adjust left/right/top/bottom for top/bottom labels...
-	int ww, hh;
-	ww = (myo->o->align() & FL_ALIGN_WRAP) ? myo->o->w() : 0;
-	hh = myo->o->labelsize();
-	myo->o->measure_label(ww, hh);
-	if (myo->o->align() & FL_ALIGN_TOP) y -= hh;
-	else if (myo->o->align() & FL_ALIGN_BOTTOM) t += hh;
-	else if (myo->o->align() & FL_ALIGN_LEFT) x -= ww + 4;
-	else if (myo->o->align() & FL_ALIGN_RIGHT) r += ww + 4;
-      }
-      if (x < mybx) mybx = x;
-      if (y < myby) myby = y;
-      if (r > mybr) mybr = r;
-      if (t > mybt) mybt = t;
-    }
-  if (selected) return;
-
-  if (show_guides && drag) {
-    // draw overlays for UI Guideline distances
-    // - check for distance to the window edge
-    //    * FLTK suggests 10 pixels from the edge
-    int d;
-    int xsp, ysp;
-    int mybx_bak = mybx, myby_bak = myby, mybr_bak = mybr, mybt_bak = mybt;
-    Fl_Widget_Type *mysel = (Fl_Widget_Type *)selection;
-
-
-    ideal_spacing(xsp, ysp);
-
-    if (drag) {
-      // Check top spacing...
-      if (abs(d = myby - ysp) < 3) {
-	dy -= d;
-	if (drag & DRAG) mybt -= d;
-	myby -= d;
-	draw_v_arrow(mybx+5, myby, 0);
-      }
-
-      // Check bottom spacing...
-      if (abs(d = o->h() - mybt - ysp) < 3) {
-	dy += d;
-	if (drag & DRAG) myby += d;
-	mybt += d;
-	draw_v_arrow(mybx+5, mybt, o->h());
-      }
-
-      // Check left spacing...
-      if (abs(d = mybx - xsp) < 3) {
-        dx -= d;
-	if (drag & DRAG) mybr -= d;
-	mybx -= d;
-	draw_h_arrow(mybx, myby+5, 0);
-      }
-
-      // Check right spacing...
-      if (abs(d = o->w() - mybr - xsp) < 3) {
-	dx += d;
-	if (drag & DRAG) mybx += d;
-	mybr += d;
-	draw_h_arrow(mybr, myby+5, o->w());
-      }
-    }
-
-    if (numselected==1 && selection && !(drag & DRAG)) {
-      // Check ideal sizes
-      int x,y,r,t;
-      newposition(mysel,x,y,r,t);
-      int w = r-x;
-      int h = t-y;
-      int iw = w, ih = h;
-
-      mysel->ideal_size(iw, ih);
-
-      if (drag & (TOP | BOTTOM)) {
-	// Check height
-	if (abs(d = ih - h) < 5) {
-          // Resize height
-	  if (drag & TOP) {
-	    myby -= d;
-	    y -= d;
-	    dy -= d;
-	  } else {
-	    mybt += d;
-	    t += d;
-	    dy += d;
-	  }
-	}
-
-	// Draw height guide
-	draw_height(x < 50 ? x+10 : x-10, y, t,
-	            x < 50 ? FL_ALIGN_RIGHT : FL_ALIGN_LEFT);
-      }
-
-      if (drag & (LEFT | RIGHT)) {
-	// Check width
-	if (abs(d = iw - w) < 5) {
-          // Resize width
-          if (drag & LEFT) {
-	    mybx -= d;
-	    x -= d;
-	    dx -= d;
-	  } else {
-	    mybr += d;
-	    r += d;
-	    dx += d;
-	  }
-	}
-
-	// Draw width guide
-	draw_width(x, y < 50 ? y+10 : y-10, r,
-	           y < 50 ? FL_ALIGN_BOTTOM : FL_ALIGN_TOP);
-      }
-    }
-
-    // Check spacing and alignment between individual widgets
-    if (drag && selection->is_widget()) {
-      for (Fl_Type *q=next; q && q->level>level; q = q->next)
-	if (q != selection && q->is_widget()) {
-          Fl_Widget_Type *qw = (Fl_Widget_Type*)q;
-          // Only check visible widgets...
-	  if (!qw->o->visible_r()) continue;
-
-          // Get bounding box of widget...
-	  int qx = qw->o->x();
-	  int qr = qw->o->x() + qw->o->w();
-	  int qy = qw->o->y();
-	  int qt = qw->o->y() + qw->o->h();
-
-	  if (!(qw->o->align() & FL_ALIGN_INSIDE)) {
-            // Adjust top/bottom for top/bottom labels...
-	    int ww, hh;
-	    ww = qw->o->w();
-	    hh = qw->o->labelsize();
-	    qw->o->measure_label(ww, hh);
-	    if (qw->o->align() & FL_ALIGN_TOP) qy -= hh;
-	    if (qw->o->align() & FL_ALIGN_BOTTOM) qt += hh;
-	  }
-
-          // Do horizontal alignment when the widget is within 25
-	  // pixels vertically...
-	  if (fl_min(abs(qy - mysel->o->y() - mysel->o->h()),
-	             abs(mysel->o->y() - qt)) < 25) {
-            // Align to left of other widget...
-            if ((drag & (LEFT | DRAG)) && abs(d = mybx - qx) < 3) {
-	      dx += d;
-              mybx += d;
-	      if (drag & DRAG) mybr += d;
-
-	      draw_left_brace(qw->o);
-	    }
-
-            // Align to right of other widget...
-            if ((drag & (RIGHT | DRAG)) &&
-	        abs(d = qr - mybr) < 3) {
-	      dx += d;
-              if (drag & DRAG) mybx += d;
-	      mybr += d;
-
-	      draw_right_brace(qw->o);
-	    }
-          }
-
-          // Align to top of other widget...
-          if ((drag & (TOP | DRAG)) && abs(d = myby - qy) < 3) {
-	    dy += d;
-            myby += d;
-	    if (drag & DRAG) mybt += d;
-
-	    draw_top_brace(qw->o);
-	  }
-
-          // Align to bottom of other widget...
-          if ((drag & (BOTTOM | DRAG)) && abs(d = qt - mybt) < 3) {
-	    dy += d;
-            if (drag & DRAG) myby += d;
-	    mybt += d;
-
-	    draw_bottom_brace(qw->o);
-	  }
-
-          // Check spacing between widgets
-	  if (mysel->is_group()) mysel->ideal_spacing(xsp, ysp);
-          else qw->ideal_spacing(xsp, ysp);
-
-          if ((qt)>=myby && qy<=mybt) {
-            if (drag & (LEFT | DRAG)) {
-	      // Compare left of selected to left of current
-	      if (abs(d = qx - mybx - xsp) >= 3)
-	        d = qx - mybx + xsp;
-
-	      if (abs(d) < 3) {
-		dx += d;
-        	mybx += d;
-		if (drag & DRAG) mybr += d;
-
-        	// Draw left arrow
-		draw_h_arrow(mybx, (myby+mybt)/2, qx);
-              }
-
-	      // Compare left of selected to right of current
-              if (abs(d = qr - mybx - xsp) >= 3)
-	        d = qr - mybx + xsp;
-
-	      if (abs(d) < 3) {
-		dx += d;
-        	mybx += d;
-		if (drag & DRAG) mybr += d;
-
-        	// Draw left arrow
-		draw_h_arrow(mybx, (myby+mybt)/2, qr);
-              }
-	    }
-
-            if (drag & (RIGHT | DRAG)) {
-	      // Compare right of selected to left of current
-	      if (abs(d = qx - mybr - xsp) >= 3)
-	        d = qx - mybr + xsp;
-
-	      if (abs(d) < 3) {
-		dx += d;
-        	if (drag & DRAG) mybx += d;
-		mybr += d;
-
-        	// Draw right arrow
-		draw_h_arrow(mybr, (myby+mybt)/2, qx);
-              }
-
-	      // Compare right of selected to right of current
-              if (abs(d = qr - mybr + xsp) >= 3)
-	        d = qr - mybr - xsp;
-
-              if (abs(d) < 3) {
-		dx += d;
-        	if (drag & DRAG) mybx += d;
-		mybr += d;
-
-        	// Draw right arrow
-		draw_h_arrow(mybr, (myby+mybt)/2, qr);
-              }
-            }
-	  }
-
-          if (qr>=mybx && qx<=mybr) {
-            // Compare top of selected to top of current
-            if (drag & (TOP | DRAG)) {
-	      if (abs(d = qy - myby - ysp) >= 3)
-	        d = qy - myby + ysp;
-
-	      if (abs(d) < 3) {
-		dy += d;
-		myby += d;
-		if (drag & DRAG) mybt += d;
-
-		// Draw up arrow...
-		draw_v_arrow((mybx+mybr)/2, myby, qy);
-              }
-
-              // Compare top of selected to bottom of current
-              if (abs(d = qt - myby - ysp) >= 3)
-                d = qt - myby + ysp;
-
-              if (abs(d) < 3) {
-		dy += d;
-		myby += d;
-		if (drag & DRAG) mybt += d;
-
-		// Draw up arrow...
-		draw_v_arrow((mybx+mybr)/2, myby, qt);
-              }
-	    }
-
-	    // Compare bottom of selected to top of current
-            if (drag & (BOTTOM | DRAG)) {
-	      if (abs(d = qy - mybt - ysp) >= 3)
-	        d = qy - mybt + ysp;
-
-	      if (abs(d) < 3) {
-		dy += d;
-		if (drag & DRAG) myby += d;
-		mybt += d;
-
-		// Draw down arrow...
-		draw_v_arrow((mybx+mybr)/2, mybt, qy);
-              }
-
-	      // Compare bottom of selected to bottom of current
-              if (abs(d = qt - mybt - ysp) >= 3)
-                d = qt - mybt + ysp;
-
-              if (abs(d) < 3) {
-		dy += d;
-		if (drag & DRAG) myby += d;
-		mybt += d;
-
-		// Draw down arrow...
-		draw_v_arrow((mybx+mybr)/2, mybt, qt);
-              }
-	    }
-          }
-	}
-    }
-    mysx += mybx-mybx_bak; mysr += mybr-mybr_bak;
-    mysy += myby-myby_bak; myst += mybt-mybt_bak;
-  }
-  // align the snapping selection box with the box we draw.
-  sx = mysx; sy = mysy; sr = mysr; st = myst;
-
-  // Draw selection box + resize handles...
-  // draw box including all labels
-  fl_line_style(FL_DOT);
-  fl_rect(mybx,myby,mybr-mybx,mybt-myby);
-  fl_line_style(FL_SOLID);
-  // draw box excluding labels
-  fl_rect(mysx,mysy,mysr-mysx,myst-mysy);
-  fl_rectf(mysx,mysy,5,5);
-  fl_rectf(mysr-5,mysy,5,5);
-  fl_rectf(mysr-5,myst-5,5,5);
-  fl_rectf(mysx,myst-5,5,5);
-}
-
-extern Fl_Menu_Item Main_Menu[];
-
-// Calculate new bounding box of selected widgets:
-void Fl_Window_Type::fix_overlay() {
-  Main_Menu[40].label("Hide O&verlays");
-  overlays_invisible = 0;
-  recalc = 1;
-  ((Overlay_Window *)(this->o))->redraw_overlay();
-}
-
-// check if we must redraw any parent of tabs/wizard type
-void check_redraw_corresponding_parent(Fl_Type *s) {
-    Fl_Widget_Type * prev_parent = 0;
-    if( !s || !s->selected || !s->is_widget()) return;
-    for (Fl_Type *i=s; i && i->parent; i=i->parent) {
-	if (i->is_group() && prev_parent && 
-	    (!strcmp(i->type_name(), "Fl_Tabs") || 
-	     !strcmp(i->type_name(), "Fl_Wizard"))) {
-	     ((Fl_Tabs*)((Fl_Widget_Type*)i)->o)->value(prev_parent->o);
-	     return;
-	}
-	if (i->is_group() && s->is_widget()) 
-	    prev_parent = (Fl_Widget_Type*)i;
-    }
-}
- 
-// do that for every window (when selected set changes):
-void redraw_overlays() {
-  for (Fl_Type *o=Fl_Type::first; o; o=o->next)
-    if (o->is_window()) ((Fl_Window_Type*)o)->fix_overlay();
-}
-
-void toggle_overlays(Fl_Widget *,void *) {
-  overlays_invisible = !overlays_invisible;
-
-  if (overlays_invisible) Main_Menu[40].label("Show O&verlays");
-  else Main_Menu[40].label("Hide O&verlays");
-
-  for (Fl_Type *o=Fl_Type::first; o; o=o->next)
-    if (o->is_window()) {
-      Fl_Widget_Type* w = (Fl_Widget_Type*)o;
-      ((Overlay_Window*)(w->o))->redraw_overlay();
-    }
-}
-
-extern void select(Fl_Type *,int);
-extern void select_only(Fl_Type *);
-extern void deselect();
-extern Fl_Type* in_this_only;
-extern void fix_group_size(Fl_Type *t);
-
-extern Fl_Menu_Item Main_Menu[];
-extern Fl_Menu_Item New_Menu[];
-
-// move the selected children according to current dx,dy,drag state:
-void Fl_Window_Type::moveallchildren()
-{
-  undo_checkpoint();
-  Fl_Type *i;
-  for (i=next; i && i->level>level;) {
-    if (i->selected && i->is_widget() && !i->is_menu_item()) {
-      Fl_Widget_Type* myo = (Fl_Widget_Type*)i;
-      int x,y,r,t;
-      newposition(myo,x,y,r,t);
-      myo->o->resize(x,y,r-x,t-y);
-      // move all the children, whether selected or not:
-      Fl_Type* p;
-      for (p = myo->next; p && p->level>myo->level; p = p->next)
-	if (p->is_widget() && !p->is_menu_item()) {
-	  Fl_Widget_Type* myo2 = (Fl_Widget_Type*)p;
-	  int X,Y,R,T;
-	  newposition(myo2,X,Y,R,T);
-	  myo2->o->resize(X,Y,R-X,T-Y);
-	}
-      i = p;
-    } else {
-      i = i->next;
-    }
-  }
-  for (i=next; i && i->level>level; i=i->next) 
-    fix_group_size(i);
-  o->redraw();
-  recalc = 1;
-  ((Overlay_Window *)(this->o))->redraw_overlay();
-  set_modflag(1);
-  dx = dy = 0;
-
-  update_xywh();
-}
-
-int Fl_Window_Type::handle(int event) {
-  static Fl_Type* selection;
-  switch (event) {
-  case FL_PUSH:
-    x1 = mx = Fl::event_x();
-    y1 = my = Fl::event_y();
-    drag = dx = dy = 0;
-    // test for popup menu:
-    if (Fl::event_button() >= 3) {
-      in_this_only = this; // modifies how some menu items work.
-      static const Fl_Menu_Item* myprev;
-      const Fl_Menu_Item* m = New_Menu->popup(mx,my,"New",myprev);
-      if (m && m->callback()) {myprev = m; m->do_callback(this->o);}
-      in_this_only = 0;
-      return 1;
-    }
-    // find the innermost item clicked on:
-    selection = this;
-    {for (Fl_Type* i=next; i && i->level>level; i=i->next)
-      if (i->is_widget() && !i->is_menu_item()) {
-      Fl_Widget_Type* myo = (Fl_Widget_Type*)i;
-      for (Fl_Widget *o1 = myo->o; o1; o1 = o1->parent())
-	if (!o1->visible()) goto CONTINUE2;
-      if (Fl::event_inside(myo->o)) {
-        selection = myo;
-        if (Fl::event_clicks()==1)
-          reveal_in_browser(myo);
-      }
-    CONTINUE2:;
-    }}
-    // see if user grabs edges of selected region:
-    if (numselected && !(Fl::event_state(FL_SHIFT)) &&
-	mx<=br+snap && mx>=bx-snap && my<=bt+snap && my>=by-snap) {
-      int snap1 = snap>5 ? snap : 5;
-      int w1 = (br-bx)/4; if (w1 > snap1) w1 = snap1;
-      if (mx>=br-w1) drag |= RIGHT;
-      else if (mx<bx+w1) drag |= LEFT;
-      w1 = (bt-by)/4; if (w1 > snap1) w1 = snap1;
-      if (my<=by+w1) drag |= TOP;
-      else if (my>bt-w1) drag |= BOTTOM;
-      if (!drag) drag = DRAG;
-    }
-    // do object-specific selection of other objects:
-    {Fl_Type* t = selection->click_test(mx, my);
-    if (t) {
-      //if (t == selection) return 1; // indicates mouse eaten w/o change
-      if (Fl::event_state(FL_SHIFT)) {
-	Fl::event_is_click(0);
-	select(t, !t->selected);
-      } else {
-	deselect();
-	select(t, 1);
-	if (t->is_menu_item()) t->open();
-      }
-      selection = t;
-      drag = 0;
-    } else {
-      if (!drag) drag = BOX; // if all else fails, start a new selection region
-    }}
-    return 1;
-
-  case FL_DRAG:
-    if (!drag) return 0;
-    mx = Fl::event_x();
-    my = Fl::event_y();
-    newdx();
-    return 1;
-
-  case FL_RELEASE:
-    if (!drag) return 0;
-    mx = Fl::event_x();
-    my = Fl::event_y();
-    if (drag != BOX && (dx || dy || !Fl::event_is_click())) {
-      if (dx || dy) moveallchildren();
-    } else if ((Fl::event_clicks() || Fl::event_state(FL_CTRL))) {
-      Fl_Widget_Type::open();
-    } else {
-      if (mx<x1) {int t = x1; x1 = mx; mx = t;}
-      if (my<y1) {int t = y1; y1 = my; my = t;}
-      int n = 0;
-      int toggle = Fl::event_state(FL_SHIFT);
-      // clear selection on everything:
-      if (!toggle) deselect(); else Fl::event_is_click(0);
-      // select everything in box:
-      for (Fl_Type*i=next; i&&i->level>level; i=i->next)
-	if (i->is_widget() && !i->is_menu_item()) {
-	Fl_Widget_Type* myo = (Fl_Widget_Type*)i;
-	for (Fl_Widget *o1 = myo->o; o1; o1 = o1->parent())
-	  if (!o1->visible()) goto CONTINUE;
-	if (Fl::event_inside(myo->o)) selection = myo;
-	if (myo->o->x()>=x1 && myo->o->y()>y1 &&
-	    myo->o->x()+myo->o->w()<mx && myo->o->y()+myo->o->h()<my) {
-	  n++;
-	  select(myo, toggle ? !myo->selected : 1);
-	}
-      CONTINUE:;
-      }
-      // if nothing in box, select what was clicked on:
-      if (!n) {
-	select(selection, toggle ? !selection->selected : 1);
-      }
-    }
-    drag = 0;
-    ((Overlay_Window *)o)->redraw_overlay();
-    return 1;
-
-  case FL_KEYBOARD: {
-
-    int backtab = 0;
-    switch (Fl::event_key()) {
-
-    case FL_Escape:
-      ((Fl_Window*)o)->hide();
-      return 1;
-
-    case FL_Tab: {
-      if (Fl::event_state(FL_SHIFT)) backtab = 1;
-      // find current child:
-      Fl_Type *i = Fl_Type::current;
-      while (i && (!i->is_widget() || i->is_menu_item())) i = i->parent;
-      if (!i) return 0;
-      Fl_Type *p = i->parent;
-      while (p && p != this) p = p->parent;
-      if (!p || !p->is_widget()) {
-	i = next; if (!i || i->level <= level) return 0;
-      }
-      p = i;
-      for (;;) {
-	i = backtab ? i->prev : i->next;
-	if (!i || i->level <= level) {i = p; break;}
-	if (i->is_widget() && !i->is_menu_item()) break;
-      }
-      deselect(); select(i,1);
-      return 1;}
-
-    case FL_Left:  dx = -1; dy = 0; goto ARROW;
-    case FL_Right: dx = +1; dy = 0; goto ARROW;
-    case FL_Up:    dx = 0; dy = -1; goto ARROW;
-    case FL_Down:  dx = 0; dy = +1; goto ARROW;
-    ARROW:
-      // for some reason BOTTOM/TOP are swapped... should be fixed...
-      drag = (Fl::event_state(FL_SHIFT)) ? (RIGHT|TOP) : DRAG;
-      if (Fl::event_state(FL_CTRL)) {dx *= gridx; dy *= gridy;}
-      moveallchildren();
-      drag = 0;
-      return 1;
-
-    case 'o':
-      toggle_overlays(0, 0);
-      break;
-
-    default:
-      return 0;
-    }}
-
-  case FL_SHORTCUT: {
-    in_this_only = this; // modifies how some menu items work.
-    const Fl_Menu_Item* m = Main_Menu->test_shortcut();
-    if (m && m->callback()) m->do_callback(this->o);
-    in_this_only = 0;
-    return (m != 0);}
-
-  default:
-    return 0;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <stdio.h>
-#include "../src/flstring.h"
-
-void Fl_Window_Type::write_code1() {
-  Fl_Widget_Type::write_code1();
-}
-
-void Fl_Window_Type::write_code2() {
-  const char *var = is_class() ? "this" : name() ? name() : "o";
-  write_extra_code();
-  if (modal) write_c("%s%s->set_modal();\n", indent(), var);
-  else if (non_modal) write_c("%s%s->set_non_modal();\n", indent(), var);
-  if (!((Fl_Window*)o)->border()) {
-    write_c("%s%s->clear_border();\n", indent(), var);
-  }
-  if (xclass) {
-    write_c("%s%s->xclass(", indent(), var);
-    write_cstring(xclass);
-    write_c(");\n");
-  }
-  if (sr_max_w || sr_max_h) {
-    write_c("%s%s->size_range(%d, %d, %d, %d);\n", indent(), var,
-            sr_min_w, sr_min_h, sr_max_w, sr_max_h);
-  } else if (sr_min_w || sr_min_h) {
-    write_c("%s%s->size_range(%d, %d);\n", indent(), var, sr_min_w, sr_min_h);
-  }
-  write_c("%s%s->end();\n", indent(), var);
-  if (((Fl_Window*)o)->resizable() == o)
-    write_c("%s%s->resizable(%s);\n", indent(), var, var);
-  write_block_close();
-}
-
-void Fl_Window_Type::write_properties() {
-  Fl_Widget_Type::write_properties();
-  if (modal) write_string("modal");
-  else if (non_modal) write_string("non_modal");
-  if (!((Fl_Window*)o)->border()) write_string("noborder");
-  if (xclass) {write_string("xclass"); write_word(xclass);}
-  if (sr_min_w || sr_min_h || sr_max_w || sr_max_h)
-    write_string("size_range {%d %d %d %d}", sr_min_w, sr_min_h, sr_max_w, sr_max_h);
-  if (o->visible()) write_string("visible");
-}
-
-extern int pasteoffset;
-void Fl_Window_Type::read_property(const char *c) {
-  if (!strcmp(c,"modal")) {
-    modal = 1;
-  } else if (!strcmp(c,"non_modal")) {
-    non_modal = 1;
-  } else if (!strcmp(c, "visible")) {
-    if (Fl::first_window()) open(); // only if we are using user interface
-  } else if (!strcmp(c,"noborder")) {
-    ((Fl_Window*)o)->border(0);
-  } else if (!strcmp(c,"xclass")) {
-    storestring(read_word(),xclass);
-    ((Fl_Window*)o)->xclass(xclass);
-  } else if (!strcmp(c,"size_range")) {
-    int mw, mh, MW, MH;
-    if (sscanf(read_word(),"%d %d %d %d",&mw,&mh,&MW,&MH) == 4) {
-      sr_min_w = mw; sr_min_h = mh; sr_max_w = MW; sr_max_h = MH;
-    }
-  } else if (!strcmp(c,"xywh")) {
-    Fl_Widget_Type::read_property(c);
-    pasteoffset = 0; // make it not apply to contents
-  } else {
-    Fl_Widget_Type::read_property(c);
-  }
-}
-
-int Fl_Window_Type::read_fdesign(const char* propname, const char* value) {
-  int x;
-  o->box(FL_NO_BOX); // because fdesign always puts an Fl_Box next
-  if (!strcmp(propname,"Width")) {
-    if (sscanf(value,"%d",&x) == 1) o->size(x,o->h());
-  } else if (!strcmp(propname,"Height")) {
-    if (sscanf(value,"%d",&x) == 1) o->size(o->w(),x);
-  } else if (!strcmp(propname,"NumberofWidgets")) {
-    return 1; // we can figure out count from file
-  } else if (!strcmp(propname,"border")) {
-    if (sscanf(value,"%d",&x) == 1) ((Fl_Window*)o)->border(x);
-  } else if (!strcmp(propname,"title")) {
-    label(value);
-  } else {
-    return Fl_Widget_Type::read_fdesign(propname,value);
-  }
-  return 1;
-}
-
-///////////////////////////////////////////////////////////////////////
-
-Fl_Widget_Class_Type Fl_Widget_Class_type;
-Fl_Widget_Class_Type *current_widget_class = 0;
-
-Fl_Type *Fl_Widget_Class_Type::make() {
-  Fl_Type *p = Fl_Type::current;
-  while (p && (!p->is_decl_block() || (p->is_widget() && p->is_class()))) p = p->parent;
-  Fl_Widget_Class_Type *myo = new Fl_Widget_Class_Type();
-  myo->name("UserInterface");
-
-  if (!this->o) {// template widget
-    this->o = new Fl_Window(100,100);
-    Fl_Group::current(0);
-  }
-  // Set the size ranges for this window; in order to avoid opening the
-  // X display we use an arbitrary maximum size...
-  ((Fl_Window *)(this->o))->size_range(gridx, gridy,
-                                       3072, 2048,
-                                       gridx, gridy, 0);
-  myo->factory = this;
-  myo->drag = 0;
-  myo->numselected = 0;
-  Overlay_Window *w = new Overlay_Window(100,100);
-  w->window = myo;
-  myo->o = w;
-  myo->add(p);
-  myo->modal = 0;
-  myo->non_modal = 0;
-  myo->wc_relative = 0;
-
-  return myo;
-}
-
-void Fl_Widget_Class_Type::write_properties() {
-  Fl_Window_Type::write_properties();
-  if (wc_relative) write_string("position_relative");
-}
-
-void Fl_Widget_Class_Type::read_property(const char *c) {
-  if (!strcmp(c,"position_relative")) {
-    wc_relative = 1;
-  } else {
-    Fl_Window_Type::read_property(c);
-  }
-}
-
-// Convert A::B::C::D to D (i.e. keep only innermost name)
-// This is useful for classes that contain a namespace component
-static const char *trimclassname(const char *n) {
-  const char *nn;
-  while((nn = strstr(n, "::"))) {
-    n = nn + 2;
-  }
-  return(n);
-}
-
-
-void Fl_Widget_Class_Type::write_code1() {
-#if 0
-  Fl_Widget_Type::write_code1();
-#endif // 0
-
-  current_widget_class = this;
-  write_public_state = 1;
-
-  const char *c = subclass();
-  if (!c) c = "Fl_Group";
-
-  write_comment_h();
-  write_h("\nclass %s : public %s {\n", name(), c);
-  if (strstr(c, "Window")) {
-    write_h("  void _%s();\n", trimclassname(name()));
-    write_h("public:\n");
-    write_h("  %s(int X, int Y, int W, int H, const char *L = 0);\n", trimclassname(name()));
-    write_h("  %s(int W, int H, const char *L = 0);\n", trimclassname(name()));
-    write_h("  %s();\n", trimclassname(name()));
-
-    // a constructor with all four dimensions plus label
-    write_c("%s::%s(int X, int Y, int W, int H, const char *L)\n", name(), trimclassname(name()));
-    write_c("  : %s(X, Y, W, H, L) {\n", c);
-    write_c("  _%s();\n", trimclassname(name()));
-    write_c("}\n\n");
-
-    // a constructor with just the size and label. The window manager will position the window
-    write_c("%s::%s(int W, int H, const char *L)\n", name(), trimclassname(name()));
-    write_c("  : %s(0, 0, W, H, L) {\n", c);
-    write_c("  clear_flag(16);\n");
-    write_c("  _%s();\n", trimclassname(name()));
-    write_c("}\n\n");
-    
-    // a constructor that takes size and label from the Fluid database
-    write_c("%s::%s()\n", name(), trimclassname(name()));
-    write_c("  : %s(0, 0, %d, %d, ", c, o->w(), o->h());
-    const char *cstr = label();
-    if (cstr) write_cstring(cstr);
-    else write_c("0");
-    write_c(") {\n");
-    write_c("  clear_flag(16);\n");
-    write_c("  _%s();\n", trimclassname(name()));
-    write_c("}\n\n");
-    
-    write_c("void %s::_%s() {\n", name(), trimclassname(name()));
-//    write_c("  %s *w = this;\n", name());
-  } else {
-    write_h("public:\n");
-    write_h("  %s(int X, int Y, int W, int H, const char *L = 0);\n", trimclassname(name()));
-
-    write_c("%s::%s(int X, int Y, int W, int H, const char *L)\n", name(), trimclassname(name()));
-    if (wc_relative)
-      write_c("  : %s(0, 0, W, H, L) {\n", c);
-    else
-      write_c("  : %s(X, Y, W, H, L) {\n", c);
-  }
-
-//  write_c("  %s *o = this;\n", name());
-
-  write_widget_code();
-}
-
-void Fl_Widget_Class_Type::write_code2() {
-  write_extra_code();
-  if (wc_relative) write_c("%sposition(X, Y);\n", indent());
-  if (modal) write_c("%sset_modal();\n", indent());
-  else if (non_modal) write_c("%sset_non_modal();\n", indent());
-  if (!((Fl_Window*)o)->border()) write_c("%sclear_border();\n", indent());
-  if (xclass) {
-    write_c("%sxclass(", indent());
-    write_cstring(xclass);
-    write_c(");\n");
-  }
-  write_c("%send();\n", indent());
-  if (((Fl_Window*)o)->resizable() == o)
-    write_c("%sresizable(this);\n", indent());
-  write_c("}\n");
-}
-
-////////////////////////////////////////////////////////////////
-// live mode support
-
-Fl_Widget *Fl_Window_Type::enter_live_mode(int) {
-  Fl_Window *win = new Fl_Window(o->x(), o->y(), o->w(), o->h());
-  live_widget = win;
-  if (live_widget) {
-    copy_properties();
-    Fl_Type *n;
-    for (n = next; n && n->level > level; n = n->next) {
-      if (n->level == level+1)
-        n->enter_live_mode();
-    }
-    win->end();
-  }
-  return live_widget;
-}
-
-void Fl_Window_Type::leave_live_mode() {
-}
-
-/**
- * copy all properties from the edit widget to the live widget
- */
-void Fl_Window_Type::copy_properties() {
-  Fl_Widget_Type::copy_properties();
-  /// \todo copy resizing constraints over
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fluid_Image.cxx
+++ /dev/null
@@ -1,256 +1,0 @@
-//
-// "$Id$"
-//
-// Pixmap (and other images) label support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include "Fl_Type.h"
-#include "Fluid_Image.h"
-#include "../src/flstring.h"
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <FL/filename.H>
-
-extern void goto_source_dir(); // in fluid.cxx
-extern void leave_source_dir(); // in fluid.cxx
-
-void Fluid_Image::image(Fl_Widget *o) {
-  if (o->window() != o) o->image(img);
-}
-
-void Fluid_Image::deimage(Fl_Widget *o) {
-  if (o->window() != o) o->deimage(img);
-}
-
-static int pixmap_header_written = 0;
-static int bitmap_header_written = 0;
-static int image_header_written = 0;
-static int jpeg_header_written = 0;
-
-void Fluid_Image::write_static() {
-  if (!img) return;
-  const char *idata_name = unique_id(this, "idata", fl_filename_name(name()), 0);
-  function_name_ = unique_id(this, "image", fl_filename_name(name()), 0);
-  if (img->count() > 1) {
-    // Write Pixmap data...
-    write_c("\n");
-    if (pixmap_header_written != write_number) {
-      write_c("#include <FL/Fl_Pixmap.H>\n");
-      pixmap_header_written = write_number;
-    }
-    write_c("static const char *%s[] = {\n", idata_name);
-    write_cstring(img->data()[0], strlen(img->data()[0]));
-
-    int i;
-    int ncolors, chars_per_color;
-    sscanf(img->data()[0], "%*d%*d%d%d", &ncolors, &chars_per_color);
-
-    if (ncolors < 0) {
-      write_c(",\n");
-      write_cstring(img->data()[1], ncolors * -4);
-      i = 2;
-    } else {
-      for (i = 1; i <= ncolors; i ++) {
-        write_c(",\n");
-        write_cstring(img->data()[i], strlen(img->data()[i]));
-      }
-    }
-    for (; i < img->count(); i ++) {
-      write_c(",\n");
-      write_cstring(img->data()[i], img->w() * chars_per_color);
-    }
-    write_c("\n};\n");
-    write_initializer("Fl_Pixmap", "%s", idata_name);
-  } else if (img->d() == 0) {
-    // Write Bitmap data...
-    write_c("\n");
-    if (bitmap_header_written != write_number) {
-      write_c("#include <FL/Fl_Bitmap.H>\n");
-      bitmap_header_written = write_number;
-    }
-    write_c("static const unsigned char %s[] =\n", idata_name);
-    write_cdata(img->data()[0], ((img->w() + 7) / 8) * img->h());
-    write_c(";\n");
-    write_initializer( "Fl_Bitmap", "%s, %d, %d", idata_name, img->w(), img->h());
-  } else if (strcmp(fl_filename_ext(name()), ".jpg")==0) {
-    // Write jpeg image data...
-    write_c("\n");
-    if (jpeg_header_written != write_number) {
-      write_c("#include <FL/Fl_JPEG_Image.H>\n");
-      jpeg_header_written = write_number;
-    }
-    write_c("static const unsigned char %s[] =\n", idata_name);
-
-    FILE *f = fl_fopen(name(), "rb");
-    if (!f) {
-      // message = "Can't include binary file. Can't open";
-    } else {
-      fseek(f, 0, SEEK_END);
-      size_t nData = ftell(f);
-      fseek(f, 0, SEEK_SET);
-      if (nData) {
-        char *data = (char*)calloc(nData, 1);
-        if (fread(data, nData, 1, f)==0) { /* ignore */ }
-        write_cdata(data, nData);
-        free(data);
-      }
-      fclose(f);
-    }
-    
-    write_c(";\n");
-    write_initializer("Fl_JPEG_Image", "\"%s\", %s", fl_filename_name(name()), idata_name);
-  } else {
-    // Write image data...
-    write_c("\n");
-    if (image_header_written != write_number) {
-      write_c("#include <FL/Fl_Image.H>\n");
-      image_header_written = write_number;
-    } 
-    write_c("static const unsigned char %s[] =\n", idata_name);
-    const int extra_data = img->ld() ? (img->ld()-img->w()*img->d()) : 0;
-    write_cdata(img->data()[0], (img->w() * img->d() + extra_data) * img->h());
-    write_c(";\n");
-    write_initializer("Fl_RGB_Image", "%s, %d, %d, %d, %d", idata_name, img->w(), img->h(), img->d(), img->ld());
-  }
-}
-
-void Fluid_Image::write_initializer(const char *type_name, const char *format, ...) {
-  /* Outputs code that returns (and initializes if needed) an Fl_Image as follows:
-   static Fl_Image *'function_name_'() {
-     static Fl_Image *image = new 'type_name'('product of format and remaining args');
-     return image;
-   } */
-  va_list ap;
-  va_start(ap, format);
-  write_c("static Fl_Image *%s() {\n  static Fl_Image *image = new %s(", function_name_, type_name);
-  vwrite_c(format, ap);
-  write_c(");\n  return image;\n}\n");
-  va_end(ap);
-}
-
-void Fluid_Image::write_code(const char *var, int inactive) {
-  /* Outputs code that attaches an image to an Fl_Widget or Fl_Menu_Item.
-   This code calls a function output before by Fluid_Image::write_initializer() */
-  if (img) write_c("%s%s->%s( %s() );\n", indent(), var, inactive ? "deimage" : "image", function_name_);
-}
-
-
-////////////////////////////////////////////////////////////////
-
-static Fluid_Image** images = 0; // sorted list
-static int numimages = 0;
-static int tablesize = 0;
-
-Fluid_Image* Fluid_Image::find(const char *iname) {
-  if (!iname || !*iname) return 0;
-
-  // first search to see if it exists already:
-  int a = 0;
-  int b = numimages;
-  while (a < b) {
-    int c = (a+b)/2;
-    int i = strcmp(iname,images[c]->name_);
-    if (i < 0) b = c;
-    else if (i > 0) a = c+1;
-    else return images[c];
-  }
-
-  // no, so now see if the file exists:
-
-  goto_source_dir();
-  FILE *f = fl_fopen(iname,"rb");
-  if (!f) {
-    read_error("%s : %s",iname,strerror(errno));
-    leave_source_dir();
-    return 0;
-  }
-  fclose(f);
-
-  Fluid_Image *ret = new Fluid_Image(iname);
-
-  if (!ret->img || !ret->img->w() || !ret->img->h()) {
-    delete ret;
-    ret = 0;
-    read_error("%s : unrecognized image format", iname);
-  }
-  leave_source_dir();
-  if (!ret) return 0;
-
-  // make a new entry in the table:
-  numimages++;
-  if (numimages > tablesize) {
-    tablesize = tablesize ? 2*tablesize : 16;
-    if (images) images = (Fluid_Image**)realloc(images, tablesize*sizeof(Fluid_Image*));
-    else images = (Fluid_Image**)malloc(tablesize*sizeof(Fluid_Image*));
-  }
-  for (b = numimages-1; b > a; b--) images[b] = images[b-1];
-  images[a] = ret;
-
-  return ret;
-}
-
-Fluid_Image::Fluid_Image(const char *iname) {
-  name_ = strdup(iname);
-  written = 0;
-  refcount = 0;
-  img = Fl_Shared_Image::get(iname);
-  function_name_ = NULL;
-}
-
-void Fluid_Image::increment() {
-  ++refcount;
-}
-
-void Fluid_Image::decrement() {
-  --refcount;
-  if (refcount > 0) return;
-  delete this;
-}
-
-Fluid_Image::~Fluid_Image() {
-  int a;
-  if (images) {
-    for (a = 0;; a++) if (images[a] == this) break;
-    numimages--;
-    for (; a < numimages; a++) images[a] = images[a+1];
-  }
-  if (img) img->release();
-  free((void*)name_);
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_File_Chooser.H>
-
-const char *ui_find_image_name;
-Fluid_Image *ui_find_image(const char *oldname) {
-  goto_source_dir();
-  fl_file_chooser_ok_label("Use Image");
-  const char *name = fl_file_chooser("Image?","Image Files (*.{bm,bmp,gif,jpg,pbm,pgm,png,ppm,xbm,xpm})",oldname,1);
-  fl_file_chooser_ok_label(NULL);
-  ui_find_image_name = name;
-  Fluid_Image *ret = (name && *name) ? Fluid_Image::find(name) : 0;
-  leave_source_dir();
-  return ret;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Fluid_Image.h
+++ /dev/null
@@ -1,59 +1,0 @@
-//
-// "$Id$"
-//
-// Image header file for the Fast Light Tool Kit (FLTK).
-//
-// This class stores the image labels for widgets in fluid.  This is
-// not a class in FLTK itself, and will produce different types of
-// code depending on what the image type is.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef FLUID_IMAGE_H
-#  define FLUID_IMAGE_H
-
-#  include <FL/Fl_Shared_Image.H>
-
-
-class Fluid_Image {
-  const char *name_;
-  int refcount;
-  Fl_Shared_Image *img;
-  const char *function_name_;
-protected:
-  Fluid_Image(const char *name); // no public constructor
-  ~Fluid_Image(); // no public destructor
-public:
-  int written;
-  static Fluid_Image* find(const char *);
-  void decrement(); // reference counting & automatic free
-  void increment();
-  void image(Fl_Widget *); // set the image of this widget
-  void deimage(Fl_Widget *); // set the deimage of this widget
-  void write_static();
-  void write_initializer(const char *type_name, const char *format, ...);
-  void write_code(const char *var, int inactive = 0);
-  const char *name() const {return name_;}
-};
-
-// pop up file chooser and return a legal image selected by user,
-// or zero for any errors:
-Fluid_Image *ui_find_image(const char *);
-extern const char *ui_find_image_name;
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/Makefile
+++ /dev/null
@@ -1,130 +1,0 @@
-#
-# "$Id$"
-#
-# FLUID makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2016 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-CPPFILES = \
-	CodeEditor.cxx \
-	ExternalCodeEditor_UNIX.cxx \
-	ExternalCodeEditor_WIN32.cxx \
-	Fl_Function_Type.cxx \
-	Fl_Group_Type.cxx \
-	Fl_Menu_Type.cxx \
-	Fl_Type.cxx \
-	Fl_Widget_Type.cxx \
-	Fl_Window_Type.cxx \
-	Fluid_Image.cxx \
-	about_panel.cxx \
-	align_widget.cxx \
-	alignment_panel.cxx \
-	code.cxx \
-	factory.cxx \
-	file.cxx \
-	fluid.cxx \
-	function_panel.cxx \
-	template_panel.cxx \
-	undo.cxx \
-	widget_panel.cxx
-
-################################################################
-
-OBJECTS = $(CPPFILES:.cxx=.o)
-
-include ../makeinclude
-
-all:	$(FLUID) fluid$(EXEEXT)
-
-fluid$(EXEEXT):		$(OBJECTS) $(LIBNAME) $(FLLIBNAME) \
-			$(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LINKFLTKFORMS) $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) $(RM) -r -f fluid.app/Contents/MacOS
-	$(OSX_ONLY) mkdir fluid.app/Contents/MacOS
-	$(OSX_ONLY) $(INSTALL_BIN) fluid fluid.app/Contents/MacOS
-
-fluid-shared$(EXEEXT):	$(OBJECTS) ../src/$(DSONAME) ../src/$(FLDSONAME) \
-			../src/$(IMGDSONAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJECTS) $(LINKSHARED) $(LDLIBS)
-
-clean:
-	-$(RM) *.o core.* *~ *.bck *.bak
-	-$(RM) core fluid$(EXEEXT) fluid-shared$(EXEEXT)
-	-$(RM) fluid.app/Contents/MacOS/fluid$(EXEEXT)
-
-depend:	$(CPPFILES)
-	makedepend -Y -I.. -f makedepend $(CPPFILES)
-
-# Automatically generated dependencies...
-include makedepend
-
-install: all
-	echo "Installing FLUID in $(DESTDIR)$(bindir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(bindir)
-	$(INSTALL_BIN) $(FLUID) $(DESTDIR)$(bindir)/fluid$(EXEEXT)
-
-install-linux:
-	-$(INSTALL_DIR) $(DESTDIR)/usr/share/applications
-	$(INSTALL_DATA) fluid.desktop  $(DESTDIR)/usr/share/applications
-	for size in 16 32 48 64 128; do \
-		if test ! -d $(DESTDIR)/usr/share/icons/hicolor/$${size}x$${size}/apps; then \
-			$(INSTALL_DIR) $(DESTDIR)/usr/share/icons/hicolor/$${size}x$${size}/apps; \
-		fi; \
-		$(INSTALL_DATA) icons/fluid-$$size.png $(DESTDIR)/usr/share/icons/hicolor/$${size}x$${size}/apps/fluid.png; \
-	done
-	-$(INSTALL_DIR) $(DESTDIR)/usr/share/mimelnk/application
-	$(INSTALL_DATA) x-fluid.desktop  $(DESTDIR)/usr/share/mimelnk/application
-
-install-osx:
-	echo Installing Fluid in $(DESTDIR)/Applications...
-	-$(INSTALL_DIR) $(DESTDIR)/Applications/fluid.app
-	-$(INSTALL_DIR) $(DESTDIR)/Applications/fluid.app/Contents
-	$(INSTALL_DATA) fluid.app/Contents/Info.plist $(DESTDIR)/Applications/fluid.app/Contents/Info.plist
-	$(INSTALL_DATA) fluid.app/Contents/PkgInfo $(DESTDIR)/Applications/fluid.app/Contents/PkgInfo
-	-$(INSTALL_DIR) $(DESTDIR)/Applications/fluid.app/Contents/MacOS
-	$(RM) $(DESTDIR)/Applications/fluid.app/Contents/MacOS/fluid
-	$(LN) $(bindir)/fluid $(DESTDIR)/Applications/fluid.app/Contents/MacOS/fluid
-	-$(INSTALL_DIR) $(DESTDIR)/Applications/fluid.app/Contents/Resources
-	$(INSTALL_DATA) fluid.app/Contents/Resources/fluid.icns $(DESTDIR)/Applications/fluid.app/Contents/Resources
-
-uninstall:
-	$(RM) $(DESTDIR)$(bindir)/fluid$(EXEEXT)
-
-uninstall-linux:
-	$(RM) $(DESTDIR)/usr/share/applications/fluid.desktop
-	$(RM) $(DESTDIR)/usr/share/icons/hicolor/*/fluid.png
-	$(RM) $(DESTDIR)/usr/share/mimelnk/application/x-fluid.desktop
-
-uninstall-osx:
-	$(RM) -r $(DESTDIR)/Applications/fluid.app
-
-
-#
-# Note: The rebuild target can only be used if you have the original .fl
-#       files.  This is normally only used by the FLTK maintainers...
-#
-
-rebuild:
-	./fluid -c about_panel.fl
-	./fluid -c alignment_panel.fl
-	./fluid -c function_panel.fl
-	./fluid -c print_panel.fl
-	./fluid -c template_panel.fl
-	./fluid -c widget_panel.fl
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/fluid/Shortcut_Button.h
+++ /dev/null
@@ -1,32 +1,0 @@
-//
-// "$Id$"
-//
-// Shortcut header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Button.H>
-
-class Shortcut_Button : public Fl_Button {
-public:
-  int svalue;
-  int handle(int);
-  void draw();
-  Shortcut_Button(int X,int Y,int W,int H, const char* l = 0) :
-    Fl_Button(X,Y,W,H,l) {svalue = 0;}
-};
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/about_panel.cxx
+++ /dev/null
@@ -1,1561 +1,0 @@
-//
-// "$Id$"
-//
-// About dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "about_panel.h"
-void show_help(const char *name); 
-
-Fl_Double_Window *about_panel=(Fl_Double_Window *)0;
-
-#include <FL/Fl_Pixmap.H>
-static const char *idata_fluid[] = {
-"96 96 32 1",
-" \tc None",
-".\tc #000100",
-"+\tc #031F3F",
-"@\tc #00366C",
-"#\tc #2E302D",
-"$\tc #0058AC",
-"%\tc #0060BF",
-"&\tc #4E504D",
-"*\tc #14659F",
-"=\tc #006DDC",
-"-\tc #2C7087",
-";\tc #0080FF",
-">\tc #407B74",
-",\tc #0F85F9",
-"\'\tc #268CCD",
-")\tc #7C7E7B",
-"!\tc #2D92EC",
-"~\tc #4498A9",
-"{\tc #2F94FE",
-"]\tc #5BA18C",
-"^\tc #6BA674",
-"/\tc #7DAD62",
-"(\tc #93BD53",
-"_\tc #A4A6A2",
-":\tc #6CB6FF",
-"<\tc #ABCC3F",
-"[\tc #C4DA2A",
-"}\tc #CACCC9",
-"|\tc #DCE913",
-"1\tc #BBDEFF",
-"2\tc #FDFE00",
-"3\tc #FDFFFC",
-"                                                                             \
-                   ",
-"                                                                             \
-                   ",
-"                                                                             \
-                   ",
-"                                           ...........                       \
-                   ",
-"                                     ......................                  \
-                   ",
-"                                    ........................                 \
-                   ",
-"                                    ........#&#&#&#&##......                 \
-                   ",
-"                                    ....)__}33333333333}_...                 \
-                   ",
-"                                    ...&33333333333333333...                 \
-                   ",
-"                                    ...#33311133333333333...                 \
-                   ",
-"                                    ...&33!,{,;:333333333...                 \
-                   ",
-"                                    ...&3:,{{{{,13333333}...                 \
-                   ",
-"                                    ...&3!{{!{{,13333333}...                 \
-                   ",
-"                                    ...&3:!{{!{;13333333}...                 \
-                   ",
-"                                    ...&3{{{{{{;133333333...                 \
-                   ",
-"                                    ...&31,{{{;,33333333}...                 \
-                   ",
-"                                    ...&331{{{:133333333}...                 \
-                   ",
-"                                    ...&3333333333333333_...                 \
-                   ",
-"                                    ...&3333333333333333}...                 \
-                   ",
-"                                    ...&3333333333333333_...                 \
-                   ",
-"                                    ...&3333333333333333}...                 \
-                   ",
-"                                    ...&3333333333333333_...                 \
-                   ",
-"                                    ...&3333333333333333}...                 \
-                   ",
-"                                    ...&3333333333333333_...                 \
-                   ",
-"                                    ...&3333333331!,,;:3}...                 \
-                   ",
-"                                    ...&333333333{{{{{;:_...                 \
-                   ",
-"                                    ...&333333331,{!{!{{}...                 \
-                   ",
-"                                    ...&333333331{{{{{{,_...                 \
-                   ",
-"                                    ...)333333331{{!{{{{_...                 \
-                   ",
-"                                    ...)333333333{{{!{;:_...                 \
-                   ",
-"                                    ...)3333333331{;;;:3_...                 \
-                   ",
-"                                    ...)3333333333331333_...                 \
-                   ",
-"                                    ...)3333333333333333_...                 \
-                   ",
-"                                    ...)3333333333333333_...                 \
-                   ",
-"                                    ..._3333333333333333_...                 \
-                   ",
-"                                    ..._3333333333333333_...                 \
-                   ",
-"                                    ..._3333333333333333_...                 \
-                   ",
-"                                    ..._3333333333333333}....                \
-                   ",
-"                                   ...._33333333333333333#...                \
-                   ",
-"                                  ....&333333333333333333_....               \
-                   ",
-"                                 ....&33333333333333333333)....              \
-                   ",
-"                                 ....333333333333333333333}&....             \
-                   ",
-"                                ...._33333333333333333333333....             \
-                   ",
-"                               ....&333333333331:11333333333_....            \
-                   ",
-"                              ....#33333333333:,,,;:333333333&....           \
-                   ",
-"                              ....}3333333333:,!{{{;1333333333&....          \
-                   ",
-"                             ....}33333333333{{{!{{,!3333333333....          \
-                   ",
-"                            ....)333333333333{{{{!{{{3333333333_....         \
-                   ",
-"                           ....#3333333333333!{{{{{,:33333333333&....        \
-                   ",
-"                           ...._33333333333331{{!{,;1333333333333#....       \
-                   ",
-"                          ...._333333333333333:;,;,13333333333333_....       \
-                   ",
-"                         ...._333333333333333333113333333333333333_....      \
-                   ",
-"                        ....&33333333333333333333333333331::1333333&....     \
-                   ",
-"                        ...._333333333333333333333333333{,{{;{133333#...     \
-                   ",
-"                       ...._3333333333333333333333333331,{!{{,:33333}....    \
-                   ",
-"                      ....&3333333333133333333333333333:{{{{{{:333333)....   \
-                   ",
-"                      ...#333333331{,,;:333333333333333:{!{!{{:3333333&....  \
-                   ",
-"                     ....}33333333,{{{{;:333333333333331,{!{{;:33333333#...  \
-                   ",
-"                    ...._333333331,!{!{{,333333333333333{,{{;{1333333333.... \
-                   ",
-"                   ....&3333333331{{{{{{{3333333333333333::::33333333333)....\
-                   ",
-"                  ....+!:::::::::{{{{!{{;::::::::::::::::::::::::::!:::::+...\
-.                  ",
-"                  ...+=;;;;;;;;;;;;{{{{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=...\
-.                  ",
-"                 ....%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%..\
-..                 ",
-"                ....@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$.\
-...                ",
-"                ...+%;;;;;;!!!;;;;;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!=;;;+\
-....               ",
-"               ....%;;;;;!([<|^~]^([%;;;;;;;;;;;;;;;;;,(<\'=;;;;;;;!^/<[|\'=;\
-;=+...               ",
-"              ....$;;;;;\'|2>]22<|22[%=;;;;;;;;;;;;;;;;^22[%=;;;;;;!][22|%=;;\
-;$....              ",
-"             ....@;;;;;;[2[%^2|*[22(%=;;;;;;;;;;;;;;;,/22|$=;;;;;;;;<22<%=;;;\
-;$....             ",
-"            ....+=;;;;;~22^$%]~$|22>%=;;;;;;;;;;;;;;;;\'||^%=;;;;;;;,[22^$=;;\
-;;;+....            ",
-"            ....%;;;;;,[22-%===\'22|*==;;;;;;;;;;;;;;;;;;=%=;;;;;;;;\'22|*%=;\
-;;;;=+...            ",
-"           ....$;;;;;;!22|$%;,;^22<$=;;;;;;;;;;;;;;;;;;===;;;;;;;;;^22|$==;;;\
-;;;%....           ",
-"          ....@;;;;;\'](22[^]=;;<22^$==!~]/~=;!]]~;;;;{\'~]==;;;;~<<]<22($=;;\
-;;;;;;@....          ",
-"         ....@;;;;;;]<|22|[<%;!|22-%\'[2222*=;/22(%;~|222(=;;;!<2|^[222>$=;;;\
-;;;;;;+....         ",
-"         ....=;;;;;;;,[22>$===~22|$==,[22[%=;[22]%=,!|22]%=;![2|*%]22|*==;;;;\
-;;;;;%+...         ",
-"        ....@;;;;;;;;!|22*$=;;/22($=;,[22/$=\'222*%=;!|22-%;;<22>%=]22[$%;;;;\
-;;;;;;;=....        ",
-"       ....@;;;;;;;;;~22[*==;;[22>%=;\'22|-%,^22[$=;,~22[$%;]22<$%=(22/$=;;;;\
-;;;;;;;;@....       ",
-"      ....+;;;;;;;;;;^22<$=;;!222*$=;]22[$==[22/$=;;(22/$=![22]$=;|22-%=;;;;;\
-;;;;;;;;+...       ",
-"      ....;;;;;;;;;;;<22^%=;;]22[$=;;(22/$=~222-%=;;[22>%=]22|$%;~22|$==;;;;;\
-;;;;;;;;;....      ",
-"     ....%;;;;;;;;;;;|22-%=;;(22/$=;{|22-%=<22|$%;;\'22|*%;<22<$==(22<$=;=;;;\
-;;;;;;;;;;$....     ",
-"    ....+;;;;;;;;;;;!222$==;,|22>%=;~22|$=]|22($=;;]22[$%,|22^%=!|22^$=;;;;;;\
-;;;;;;;;;;@....    ",
-"   ....+=;;;;;;;;;;;~22[$%;;\'22|*-/;]22($*[<22^$^=;(22/$(-222>$=(222->~;;;;;\
-;;;;;;;;;;;=+....   ",
-"   ...+;;;;;;;;;;;;;(22/$=;;]22|*<\'=(22/*[~[22>(]=;|22>//=|22/$^(|2|-[%=;;;;\
-;;;;;;;;;;;;=....   ",
-"  ....$;;;;;;;;;;;;;<22>%=;;]222|>==(222|^=|22|<%=;|222<%=(222|<-222|-==;;;;;\
-;;;;;;;;;;;;$....  ",
-" ....@;;;;;;;;;;;;;!|2|$=;;;\'[2[>%=;\'|2[]%=/2|/$==;^2|(*%=!(2|($%<2[-%=;;;;\
-;;;;;;;;;;;;;;;@.... ",
-"....@;;;;;;;;;;;;;;\'22($%;;;;=%%==;;;=%%%==;=%%==;;;=%===;;==%%====%%=,;;;;;\
-;;;;;;;;;;;;;;;+... ",
-"...+=;;;;;;;;;;!\'=,]22-%=;;;;;;==;=;;;===;=;;===;;;;;===;;;;=;=,;;,=;=;;;;;;\
-;;;;;;;;;;;;;;;=....",
-"...+;;;;;;;;;;;[2^=<2<$==;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;22(\'2|*%=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;^|<[[-%=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;;*~*%===;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;;;@...",
-"...+;;;;;;;;;;;;;====;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;;;+...",
-"....$=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\
-;;;;;;;;;;;;;=$....",
-" .....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\
-+++++++++++++..... ",
-" ............................................................................\
-.................  ",
-"  ...........................................................................\
-.................  ",
-"     ........................................................................\
-..............     "
-};
-static Fl_Image *image_fluid() {
-  static Fl_Image *image = new Fl_Pixmap(idata_fluid);
-  return image;
-}
-
-static void cb_View(Fl_Button*, void*) {
-  show_help("license.html");
-}
-
-static void cb_Close(Fl_Return_Button* o, void*) {
-  ((Fl_Window*)(o->parent()))->hide();
-}
-
-Fl_Double_Window* make_about_panel() {
-  { about_panel = new Fl_Double_Window(345, 180, "About FLUID");
-    about_panel->color(FL_LIGHT1);
-    about_panel->selection_color(FL_DARK1);
-    about_panel->hotspot(about_panel);
-    { Fl_Box* o = new Fl_Box(10, 10, 115, 120);
-      o->image( image_fluid() );
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(135, 10, 205, 75, "FLTK User\nInterface Designer\nVersion x.x.x");
-      o->color((Fl_Color)12);
-      o->selection_color(FL_DARK1);
-      o->labelfont(1);
-      o->labelsize(18);
-      o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      char about[80]; // uses less than 60
-      snprintf(about,sizeof(about),"FLTK User\nInterface Designer\nVersion %d.%d.%d",FL_MAJOR_VERSION,FL_MINOR_VERSION,FL_PATCH_VERSION);
-      o->copy_label(about);
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(135, 90, 200, 45, "Copyright 1998-2017 by\nBill Spitzak and others");
-      o->align(Fl_Align(132|FL_ALIGN_INSIDE));
-    } // Fl_Box* o
-    { Fl_Button* o = new Fl_Button(115, 145, 123, 25, "View License...");
-      o->labelcolor(FL_DARK_BLUE);
-      o->callback((Fl_Callback*)cb_View);
-    } // Fl_Button* o
-    { Fl_Return_Button* o = new Fl_Return_Button(250, 145, 83, 25, "Close");
-      o->callback((Fl_Callback*)cb_Close);
-    } // Fl_Return_Button* o
-    about_panel->set_non_modal();
-    about_panel->end();
-  } // Fl_Double_Window* about_panel
-  return about_panel;
-}
-/**
- Embedded image for internal fluid.html web page.
-*/
-unsigned char fluid_org_png[27580] = /* binary data included from ../documentation/src/fluid-org.png */
-{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,161,0,0,1,25,8,6,0,0,0,
-167,211,252,219,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,
-0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,
-156,24,0,0,0,7,116,73,77,69,7,224,7,20,17,48,43,217,213,171,14,0,0,32,0,73,68,
-65,84,120,218,236,157,121,152,84,213,153,255,63,85,213,221,208,11,8,173,32,52,
-130,44,46,32,38,44,58,137,75,38,106,70,147,113,69,163,38,128,6,25,198,12,24,13,
-78,98,130,137,58,106,242,51,139,78,36,78,20,141,17,73,196,128,38,6,183,232,152,
-168,209,24,23,156,168,44,134,69,69,164,93,128,86,192,6,123,163,187,171,234,254,
-254,56,247,86,159,186,125,111,117,117,117,117,211,203,247,243,60,231,169,187,
-213,189,85,167,234,158,243,189,239,123,222,247,128,16,66,8,33,132,16,66,8,33,
-132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,
-16,66,8,33,132,16,66,8,33,132,240,17,81,21,8,33,132,218,124,17,138,163,42,16,
-66,13,146,16,66,136,252,181,241,106,255,115,19,158,18,165,66,72,132,10,33,132,
-104,71,219,174,246,62,191,162,84,98,84,8,137,80,33,132,16,1,109,122,38,33,26,81,
-95,208,166,168,116,218,216,46,49,42,132,68,168,16,66,168,45,207,208,174,71,124,
-226,83,86,210,182,5,168,95,132,6,9,82,71,66,84,8,137,80,33,132,80,59,30,188,156,
-169,100,35,96,251,154,0,245,47,39,3,196,104,54,162,84,8,33,17,42,132,16,125,162,
-13,15,18,159,81,119,61,234,91,14,18,163,145,62,218,39,248,69,164,95,96,38,173,
-109,65,203,254,243,72,136,10,33,17,42,132,16,125,82,128,70,125,34,212,46,17,32,
-102,237,235,41,66,212,233,196,62,203,9,17,160,73,75,104,38,172,245,100,128,24,
-149,16,21,34,71,10,84,5,66,8,209,227,5,104,196,39,46,99,150,248,140,89,235,177,
-12,98,180,175,25,40,252,98,209,47,46,147,174,0,245,68,104,220,183,221,22,172,
-66,8,137,80,33,132,232,211,2,212,43,5,174,208,188,14,248,58,80,162,106,203,138,
-39,129,159,2,91,93,209,153,112,95,227,110,189,122,219,112,95,189,186,119,2,94,
-133,16,109,16,83,21,8,33,68,143,19,160,182,248,180,5,104,12,40,2,174,5,30,6,142,
-1,10,85,109,89,51,14,248,154,91,143,175,211,98,65,14,203,42,224,160,192,46,33,
-36,66,133,16,162,15,137,80,239,53,234,19,160,19,128,59,129,11,84,85,29,170,227,
-97,192,14,96,27,233,99,106,51,165,109,234,204,177,171,66,244,74,162,170,2,33,
-132,232,21,2,180,0,88,4,156,108,191,105,250,244,233,206,214,173,91,113,28,167,
-91,149,68,34,225,120,203,205,205,205,77,13,13,13,117,53,53,53,187,234,234,234,
-118,215,212,212,236,170,173,173,173,174,175,175,223,211,216,216,216,96,189,39,
-105,191,207,94,118,12,237,253,12,201,101,203,150,57,21,21,21,254,186,30,133,113,
-183,151,98,134,50,20,3,253,220,82,72,203,112,135,176,180,87,66,8,33,132,16,189,
-74,132,70,44,209,89,232,138,162,18,96,127,224,23,184,22,186,194,194,66,231,198,
-27,111,116,68,118,52,53,53,57,11,22,44,176,35,228,227,192,82,224,52,224,11,192,
-177,192,36,224,112,224,96,140,165,180,28,24,224,10,212,34,87,152,218,86,83,33,
-68,27,40,48,73,8,33,122,134,0,245,191,122,81,238,5,192,133,192,55,189,131,103,
-207,158,205,130,5,11,84,107,89,82,88,88,200,161,135,30,106,111,138,1,35,129,50,
-90,60,134,118,100,124,220,61,38,78,230,89,168,20,160,36,68,6,228,142,23,66,136,
-158,39,72,253,57,64,231,120,59,103,205,154,197,13,55,220,160,90,106,39,69,69,69,
-12,29,58,212,222,244,50,45,174,248,254,164,187,226,61,171,167,92,242,66,228,
-225,233,90,8,33,68,247,110,167,253,99,65,61,49,52,20,216,4,80,94,94,206,174,93,
-187,84,99,57,80,93,93,77,121,121,185,183,218,128,201,48,80,7,212,186,165,198,45,
-117,64,189,123,76,35,208,236,22,59,127,168,18,215,11,145,5,114,199,11,33,68,207,
-18,164,254,124,160,51,188,157,179,102,205,82,13,229,200,210,165,75,237,213,117,
-24,11,104,2,104,162,181,5,52,108,250,83,33,68,59,144,59,94,8,33,122,134,248,
-180,95,109,33,154,82,158,115,231,206,85,77,229,200,157,119,222,105,175,110,112,
-133,103,33,233,209,240,246,236,83,10,64,18,66,34,84,8,33,122,189,248,244,150,
-253,137,233,43,128,67,0,134,15,31,206,248,241,227,85,99,57,80,85,85,197,198,141,
-27,189,213,122,140,219,221,22,159,81,171,191,148,240,20,66,34,84,8,33,250,148,
-16,13,18,161,51,189,131,230,204,153,163,154,202,145,37,75,150,216,171,111,211,
-98,241,148,203,93,8,137,80,33,132,144,24,13,16,162,41,17,122,241,197,23,171,
-134,114,100,241,226,197,246,234,230,128,67,236,96,163,164,181,110,111,23,66,72,
-132,10,33,68,175,17,157,153,4,232,24,76,46,75,198,140,25,195,232,209,163,85,99,
-57,80,89,89,201,150,45,91,0,136,197,98,13,152,72,120,91,120,218,249,65,147,86,
-113,36,70,133,144,8,21,66,136,222,46,68,237,128,36,47,73,125,106,126,248,158,
-110,5,125,252,241,199,249,204,103,62,67,73,73,9,145,72,132,107,175,189,150,215,
-95,127,157,72,36,194,194,133,11,211,142,61,250,232,163,153,50,101,74,222,174,
-109,91,65,19,137,196,102,75,120,38,124,197,47,64,147,1,2,84,66,84,136,118,160,
-20,77,66,8,209,51,196,168,61,75,82,20,248,170,183,179,39,143,7,125,243,205,55,
-57,231,156,115,56,234,168,163,184,229,150,91,40,41,41,225,184,227,142,227,185,
-231,158,75,137,78,143,120,60,206,186,117,235,152,57,115,102,222,174,255,171,95,
-253,202,177,68,254,59,150,224,244,102,70,242,23,191,85,52,204,18,42,65,42,132,
-68,168,16,66,244,72,209,233,23,160,118,90,166,195,49,73,234,153,48,97,2,195,
-134,13,235,177,95,244,238,187,239,38,30,143,179,98,197,10,42,42,42,82,219,15,62,
-248,96,102,204,152,65,191,126,253,82,219,54,108,216,64,99,99,35,147,39,79,206,
-203,181,215,175,95,207,142,29,59,188,186,246,18,209,135,137,79,191,16,77,134,8,
-77,137,79,33,36,66,133,16,162,87,8,81,251,213,139,138,239,53,185,65,95,120,225,
-5,14,57,228,144,52,1,10,16,139,197,136,197,98,105,219,214,172,89,3,144,55,119,
-188,47,55,232,22,159,0,109,246,149,56,173,221,243,158,91,94,226,83,136,28,208,
-152,80,33,132,232,158,226,211,91,14,10,74,58,215,59,32,219,89,146,118,238,220,
-201,85,87,93,197,196,137,19,41,46,46,166,172,172,140,99,143,61,150,21,43,86,0,
-208,208,208,192,65,7,29,196,168,81,163,104,108,108,76,123,239,197,23,95,76,44,
-22,227,254,251,239,111,247,177,97,92,119,221,117,68,34,17,86,174,92,201,166,77,
-155,136,68,34,173,202,153,103,158,153,246,158,213,171,87,19,137,68,152,52,105,
-82,218,246,119,223,125,151,111,124,227,27,140,25,51,134,162,162,34,42,42,42,
-184,252,242,203,169,171,171,203,248,25,150,45,91,102,175,86,90,34,180,153,112,
-43,168,39,66,195,198,133,10,33,132,16,66,228,157,65,192,169,192,13,192,127,3,
-23,2,35,58,65,132,218,86,207,34,204,20,146,3,128,253,129,47,121,162,103,234,
-212,169,78,54,172,94,189,218,25,54,108,152,51,104,208,32,231,242,203,47,119,238,
-190,251,110,103,225,194,133,206,201,39,159,236,252,244,167,63,77,29,183,120,241,
-98,7,112,22,46,92,152,218,246,189,239,125,207,1,156,69,139,22,165,157,51,211,
-177,191,248,197,47,146,109,125,166,149,43,87,58,55,221,116,147,3,56,51,102,204,
-112,238,189,247,222,84,185,237,182,219,28,192,185,246,218,107,211,222,115,226,
-137,39,58,227,198,141,75,219,246,252,243,207,59,251,237,183,159,115,200,33,135,
-56,63,250,209,143,156,37,75,150,56,151,92,114,137,19,139,197,156,51,207,60,51,
-244,250,171,86,173,178,197,227,110,224,62,96,49,176,16,184,30,248,79,96,54,112,
-54,112,18,112,20,102,24,196,40,96,8,48,16,40,113,127,31,255,116,158,66,8,33,
-132,16,121,229,68,224,21,140,69,204,193,88,196,62,2,126,233,238,43,203,147,8,
-181,231,134,47,114,197,206,126,152,113,160,203,61,241,116,215,93,119,181,41,64,
-119,238,220,233,84,84,84,56,163,70,141,114,222,125,247,221,86,251,247,238,221,
-155,90,142,199,227,206,196,137,19,157,33,67,134,56,53,53,53,206,207,127,254,115,
-7,112,126,240,131,31,180,122,95,123,142,13,99,197,138,21,14,224,60,246,216,99,
-105,219,255,242,151,191,56,128,243,208,67,15,165,109,31,52,104,144,115,238,185,
-231,166,214,171,170,170,156,3,14,56,192,249,210,151,190,228,212,215,215,167,29,
-123,245,213,87,59,128,179,105,211,166,192,107,127,253,235,95,183,69,232,42,224,
-183,192,29,192,77,192,85,192,55,48,121,88,79,7,254,25,152,132,153,157,170,2,40,
-119,31,10,138,221,223,39,70,250,124,242,66,8,33,132,16,121,229,114,75,128,6,149,
-93,192,175,59,32,72,253,86,208,66,160,191,123,174,193,192,48,76,240,140,3,56,
-117,117,117,109,10,189,111,127,251,219,14,224,188,240,194,11,89,9,195,63,254,
-241,143,14,224,124,225,11,95,112,34,145,136,243,205,111,126,51,47,199,6,225,9,
-197,109,219,182,165,109,247,44,164,149,149,149,169,109,91,182,108,113,0,231,134,
-27,110,72,109,155,63,127,190,83,84,84,228,172,95,191,222,217,177,99,71,90,89,
-186,116,169,3,56,79,63,253,116,224,181,75,75,75,237,223,109,5,240,27,224,86,224,
-71,192,119,129,175,3,231,3,95,4,142,1,38,2,163,129,3,221,223,162,20,232,231,
-254,70,81,137,80,33,132,16,66,116,182,8,77,102,16,161,118,249,4,120,30,184,194,
-21,47,185,136,80,207,21,63,16,227,138,159,230,157,255,248,227,143,111,83,228,
-37,147,73,231,128,3,14,112,142,57,230,152,118,137,195,41,83,166,56,128,51,125,
-250,116,39,153,76,230,237,88,63,167,158,122,170,115,224,129,7,182,218,254,213,
-175,126,213,25,60,120,112,218,182,7,31,124,208,1,156,199,31,127,60,237,187,181,
-245,59,172,90,181,170,213,249,95,124,241,197,212,254,178,178,178,61,24,87,252,
-93,24,87,252,117,132,187,226,71,34,87,188,16,121,67,209,241,66,8,145,61,107,
-129,173,192,65,89,28,59,0,248,156,91,126,10,124,0,252,25,184,31,120,149,150,153,
-121,130,132,168,255,213,203,15,250,111,222,65,151,94,122,105,155,31,224,131,15,
-62,96,231,206,157,92,120,225,133,89,127,193,223,253,238,119,172,93,187,214,124,
-129,1,3,136,68,34,121,57,54,136,213,171,87,51,117,234,212,86,219,95,123,237,181,
-86,17,240,171,87,175,6,72,165,103,242,190,219,69,23,93,148,241,251,29,121,228,
-145,173,182,45,90,180,40,181,92,91,91,251,38,233,129,71,205,64,147,85,130,34,
-227,131,18,212,43,48,73,8,137,80,33,132,104,69,99,200,246,202,118,158,39,138,
-177,126,53,99,220,176,237,105,107,71,3,115,129,57,24,11,233,2,224,181,0,241,105,
-11,79,207,194,22,115,203,233,222,1,231,159,127,126,155,23,173,175,175,7,72,203,
-181,153,137,39,159,124,146,89,179,102,113,206,57,231,80,88,88,200,146,37,75,248,
-214,183,190,197,132,9,19,58,116,108,16,219,182,109,163,170,170,170,149,216,220,
-179,103,15,155,55,111,230,236,179,207,78,219,190,102,205,26,134,14,29,154,74,
-229,228,125,183,177,99,199,114,242,201,39,183,235,71,124,224,129,7,236,213,119,
-125,226,211,159,150,201,142,148,183,163,226,147,40,42,94,8,33,132,16,33,148,1,
-51,200,206,125,222,149,37,142,9,48,34,68,120,250,93,241,7,0,211,189,247,159,
-114,202,41,173,92,204,31,125,244,145,179,113,227,70,167,166,166,38,181,173,174,
-174,206,41,42,42,114,142,58,234,40,39,145,72,180,114,213,199,227,241,212,250,
-203,47,191,236,148,150,150,58,39,157,116,146,179,119,239,94,231,237,183,223,118,
-10,11,11,157,105,211,166,181,186,86,123,142,109,107,60,233,31,254,240,135,180,
-237,207,60,243,140,3,56,203,150,45,75,219,126,208,65,7,57,95,252,226,23,211,190,
-91,191,126,253,156,73,147,38,57,141,141,141,173,206,95,93,93,157,246,253,60,
-158,122,234,169,212,239,80,92,92,188,203,253,29,108,87,252,229,192,69,152,161,
-15,114,197,11,33,132,16,34,39,78,196,184,207,157,110,88,146,1,34,52,83,84,252,
-159,189,247,62,242,200,35,173,196,213,244,233,211,29,192,121,245,213,87,211,182,
-95,126,249,229,14,224,156,112,194,9,206,109,183,221,230,220,125,247,221,206,
-149,87,94,233,28,126,248,225,41,193,186,126,253,122,167,188,188,220,153,50,101,
-138,179,103,207,158,212,123,231,205,155,215,42,168,169,61,199,102,226,7,63,248,
-129,3,56,155,55,111,78,219,254,223,255,253,223,14,224,108,216,176,33,45,194,31,
-112,174,188,242,202,180,99,191,251,221,239,58,128,51,121,242,100,231,230,155,
-111,118,126,243,155,223,56,63,251,217,207,156,175,126,245,171,206,152,49,99,2,
-175,59,109,218,52,251,55,88,9,220,11,220,14,220,72,122,84,252,105,152,161,20,
-159,6,198,145,30,21,223,31,69,197,11,33,132,16,34,3,191,238,166,2,212,139,164,
-183,5,104,88,84,124,57,48,220,126,111,16,135,30,122,168,83,88,88,216,202,42,24,
-143,199,157,155,110,186,201,153,48,97,130,83,84,84,228,244,239,223,223,153,56,
-113,162,115,205,53,215,56,142,227,56,239,190,251,174,115,208,65,7,57,227,198,
-141,115,170,170,170,210,222,187,117,235,86,167,184,184,216,57,238,184,227,218,
-125,108,91,156,125,246,217,206,160,65,131,2,197,116,73,73,73,154,229,214,179,94,
-222,119,223,125,105,199,38,18,9,231,182,219,110,115,166,76,153,226,20,23,23,59,
-5,5,5,206,136,17,35,156,51,206,56,195,89,190,124,121,224,117,125,191,193,239,
-221,255,200,47,48,185,95,191,3,92,12,156,7,156,2,124,22,56,130,150,168,248,65,
-40,42,94,136,188,161,155,70,8,209,91,25,141,9,36,26,216,13,63,91,29,240,99,183,
-216,109,177,127,28,104,33,198,226,118,38,176,4,96,218,180,105,60,252,240,195,
-250,117,115,224,209,71,31,101,218,180,105,0,12,30,60,120,103,117,117,245,83,152,
-0,177,90,76,194,122,175,236,113,203,39,238,190,6,96,47,102,108,177,127,254,
-120,208,216,80,33,114,66,129,73,66,136,222,202,220,16,1,234,69,56,67,251,3,147,
-74,48,185,58,219,219,118,38,129,237,152,128,164,103,128,191,3,239,100,48,10,
-248,3,147,82,81,241,151,93,118,153,126,217,28,185,237,182,219,82,203,213,213,
-213,111,88,130,210,142,130,207,52,95,124,208,92,241,18,159,66,228,136,44,161,66,
-136,222,200,104,96,53,198,125,106,179,27,152,146,131,248,244,184,28,248,121,150,
-109,103,13,198,18,251,48,38,25,122,101,27,237,176,223,37,239,141,11,45,5,222,3,
-40,44,44,164,169,169,73,191,110,14,196,227,113,10,11,77,66,131,72,36,226,56,
-142,243,7,90,172,160,158,229,211,111,9,173,197,88,173,61,43,168,39,76,147,214,
-131,140,196,168,16,57,34,75,168,16,162,55,114,81,128,0,5,51,189,102,101,7,207,
-157,116,69,98,16,31,3,143,2,247,144,57,23,104,38,195,128,109,1,141,2,103,121,59,
-179,73,203,36,130,177,211,50,245,239,223,191,170,161,161,193,206,11,26,150,27,
-212,182,132,250,39,41,176,145,0,21,66,34,84,8,33,40,115,69,168,159,79,128,59,59,
-120,238,181,24,11,235,20,87,136,38,49,1,70,15,210,118,18,250,182,196,167,127,
-217,19,161,179,189,29,217,36,168,23,193,216,9,234,27,26,26,222,34,61,57,125,166,
-220,160,73,95,9,74,84,47,132,232,96,195,39,132,16,189,129,19,129,167,105,109,
-173,252,53,38,81,124,71,24,4,28,11,28,143,137,144,94,11,60,139,73,3,213,145,54,
-56,204,21,63,24,120,27,160,180,180,148,218,218,90,253,186,57,80,95,95,79,105,
-105,169,81,246,209,104,50,153,76,174,32,61,32,201,239,138,247,2,146,234,48,65,
-73,158,133,212,182,138,34,49,42,68,199,144,37,84,8,209,155,40,3,46,13,16,160,9,
-96,105,30,206,191,27,120,194,45,249,54,6,4,205,146,116,174,119,208,204,153,51,
-245,235,230,200,242,229,45,243,2,244,239,223,127,91,125,125,189,109,5,13,179,
-134,198,45,193,153,204,32,54,37,64,133,200,145,168,170,64,8,209,139,56,26,56,53,
-96,251,123,24,87,121,119,38,18,32,68,191,230,237,188,228,146,75,244,235,230,
-200,29,119,220,145,90,222,187,119,175,237,138,111,162,245,88,208,48,17,42,87,
-188,16,18,161,66,8,17,202,69,152,104,114,27,7,19,40,212,221,124,217,145,54,4,
-104,57,112,36,64,121,121,121,171,57,214,69,118,84,87,87,179,106,213,42,0,10,10,
-10,226,201,100,114,39,173,173,159,97,2,52,17,32,64,29,223,127,75,8,33,17,42,
-132,232,227,140,6,190,28,176,125,187,43,66,187,51,118,48,82,4,227,138,255,138,
-183,115,214,172,89,250,117,115,100,233,210,150,81,24,101,101,101,219,92,97,25,
-148,15,212,19,163,237,113,197,11,33,36,66,133,16,34,52,57,253,175,232,120,90,
-166,206,22,159,65,150,208,11,83,95,108,238,92,253,186,57,114,231,157,45,9,17,18,
-137,196,38,130,173,160,77,150,0,109,70,174,120,33,186,132,238,18,152,164,40,253,
-246,163,70,80,136,22,70,3,243,2,182,239,166,123,90,65,219,114,197,15,7,14,1,24,
-62,124,56,227,199,143,215,47,156,3,85,85,85,108,220,184,17,128,162,162,162,230,
-154,154,154,93,100,151,27,52,147,59,94,109,176,16,61,92,132,70,36,72,59,44,60,
-35,18,165,66,164,232,204,228,244,93,213,30,218,174,248,25,222,206,57,115,230,
-232,215,205,145,37,75,150,164,150,7,13,26,180,245,163,143,62,10,138,132,247,151,
-160,228,244,32,43,168,16,121,167,171,221,241,145,0,241,20,241,21,209,118,253,
-101,170,71,33,250,26,157,153,156,190,171,30,198,253,66,52,37,66,167,79,159,190,
-83,63,113,110,44,94,188,56,181,108,37,168,247,196,102,35,225,86,208,48,55,188,
-16,34,143,116,149,37,52,18,178,236,223,22,201,240,190,190,74,216,244,112,142,
-175,126,28,95,157,169,209,20,125,133,83,128,81,1,219,51,205,215,222,157,196,167,
-223,21,63,26,24,9,16,141,70,63,172,168,168,168,1,14,208,207,220,62,42,43,43,217,
-178,101,139,233,232,10,10,26,106,106,106,62,38,221,5,223,28,240,42,87,188,16,
-189,72,132,102,18,159,17,90,15,202,71,34,180,149,224,140,100,16,161,65,130,212,
-22,163,106,40,69,111,167,12,248,62,173,147,211,55,147,159,228,244,93,37,74,61,
-17,26,1,46,240,118,204,152,49,99,215,192,129,3,199,233,103,110,63,182,21,52,26,
-141,86,6,136,206,176,252,160,158,0,149,43,94,136,30,44,66,35,89,60,249,7,149,
-108,4,108,95,17,160,97,203,201,0,49,234,88,98,84,66,84,244,21,142,198,204,227,
-238,103,13,221,63,57,61,180,246,2,69,129,233,222,206,146,146,146,113,141,141,
-141,253,10,10,52,185,93,123,184,245,214,91,185,229,150,91,82,235,77,77,77,111,
-18,28,140,20,38,66,229,138,23,162,7,139,208,72,6,241,25,181,26,91,123,57,72,
-140,70,250,168,8,245,139,78,255,19,185,221,56,6,45,219,86,81,9,81,209,155,185,
-40,160,29,75,2,63,161,251,37,167,167,141,7,235,8,112,24,48,212,219,240,194,11,
-47,244,243,230,60,23,217,241,198,27,111,48,127,254,252,212,122,44,22,171,77,36,
-18,53,174,216,108,12,40,77,180,182,130,102,26,19,170,246,84,136,110,44,66,131,
-132,99,148,214,227,158,162,164,71,131,70,2,196,104,119,22,162,78,27,29,74,62,
-206,237,23,160,118,163,232,53,148,17,107,123,212,18,163,88,2,84,66,84,244,70,70,
-19,156,156,254,93,224,169,30,242,29,252,99,66,135,0,235,129,137,0,67,134,12,
-113,214,172,89,19,153,60,121,178,126,237,44,120,238,185,231,248,214,183,190,149,
-90,31,53,106,84,253,123,239,189,247,124,136,248,220,75,112,96,146,29,25,15,114,
-197,11,209,165,79,227,249,20,160,254,177,78,49,75,124,198,172,245,88,6,49,218,
-153,159,183,59,226,111,232,252,150,206,164,239,105,61,238,219,110,31,167,6,84,
-244,102,126,2,124,47,96,251,245,192,15,122,128,240,196,106,3,11,128,34,160,31,
-176,17,95,186,169,111,127,251,219,252,248,199,63,166,95,191,126,56,142,67,50,
-153,76,198,98,49,77,54,226,178,112,225,66,174,190,250,106,246,238,221,235,223,
-181,2,147,37,161,206,45,159,0,53,192,30,119,217,91,175,5,234,129,6,159,40,245,
-218,85,181,165,66,116,115,17,154,73,128,70,173,134,54,6,92,7,124,29,40,209,79,
-144,21,79,2,63,5,182,90,79,234,113,223,114,130,224,136,78,53,158,162,55,50,26,
-88,77,235,220,160,187,49,99,68,43,123,128,8,141,88,15,225,158,8,29,225,10,232,
-115,244,19,119,160,130,35,145,70,199,113,86,187,130,190,193,21,160,181,110,249,
-36,64,128,214,185,199,121,238,121,127,170,38,208,248,80,33,242,78,172,19,196,
-108,80,202,145,152,219,192,94,11,60,12,28,3,20,170,250,179,102,28,240,53,183,30,
-95,183,172,39,97,89,5,28,20,216,37,122,55,151,3,255,26,176,253,22,140,245,171,
-187,63,252,71,66,30,212,61,87,241,167,129,114,253,204,57,81,5,60,15,108,193,184,
-220,27,48,86,206,122,75,140,214,91,194,115,111,6,241,169,7,120,33,122,144,8,181,
-35,60,109,1,58,1,147,52,250,2,85,121,135,234,120,24,176,3,216,70,250,152,218,
-176,180,77,254,198,83,98,84,244,6,202,220,246,100,176,111,251,39,192,197,24,107,
-104,79,16,161,88,247,176,61,68,105,187,43,164,29,96,42,93,63,169,72,79,101,61,
-240,39,224,13,160,218,18,160,117,150,232,172,179,214,61,1,234,141,13,245,187,
-224,101,249,20,162,147,201,71,96,82,91,2,180,0,88,4,124,198,126,211,244,233,211,
-157,155,111,190,57,82,81,81,209,173,42,36,153,76,58,209,104,52,2,16,143,199,155,
-226,241,120,115,60,30,223,27,141,70,99,201,100,50,17,137,68,162,209,104,52,26,
-139,197,138,138,138,138,138,221,247,36,129,136,247,62,251,28,4,231,250,108,235,
-51,36,239,191,255,254,200,119,191,251,221,200,182,109,219,236,93,163,220,198,
-177,148,150,161,13,254,132,245,222,152,80,219,210,162,134,84,244,38,122,90,114,
-250,76,4,5,33,122,34,232,215,192,3,192,0,183,148,185,247,126,41,208,223,45,133,
-110,241,123,71,122,251,12,106,78,64,155,231,213,155,55,43,146,103,85,110,160,
-181,21,212,182,128,106,186,78,33,246,225,19,121,62,69,168,223,5,95,140,25,255,
-249,77,128,194,194,66,110,184,225,6,22,44,88,160,154,207,130,230,230,102,174,
-185,230,26,110,186,233,38,111,83,2,88,14,220,79,186,155,105,47,233,46,165,160,
-124,119,232,201,94,244,2,202,128,103,128,127,242,223,46,192,23,129,191,246,144,
-118,215,255,208,94,64,122,112,82,49,102,204,124,169,79,124,150,186,251,250,185,
-34,180,192,122,32,181,189,35,125,5,59,53,93,194,39,66,189,148,76,123,73,119,
-199,215,91,66,212,22,163,65,211,118,74,132,10,209,137,116,212,18,26,22,140,228,
-89,64,47,244,4,40,192,236,217,179,37,64,219,65,97,97,33,135,30,122,168,189,41,
-134,153,206,175,140,22,23,157,223,2,16,115,95,51,205,66,165,198,84,244,84,122,
-122,114,250,32,17,101,63,32,122,247,179,45,164,246,90,2,211,19,91,222,190,66,
-159,0,141,230,217,200,208,221,235,205,110,3,147,33,34,180,209,18,156,13,164,91,
-66,155,104,29,224,41,43,168,16,61,68,132,250,197,141,63,7,232,28,111,231,172,
-89,179,184,225,134,27,84,227,237,164,168,168,136,161,67,135,242,209,71,31,121,
-155,94,118,45,36,142,175,179,106,118,127,79,79,136,38,144,75,94,244,62,122,106,
-114,250,32,17,101,15,217,241,167,95,179,93,202,246,216,111,207,82,215,232,10,
-208,32,43,104,119,20,159,157,213,6,249,45,161,73,171,142,154,72,183,134,250,139,
-61,83,146,45,62,229,49,18,162,11,27,134,142,190,55,204,173,52,20,216,4,80,94,
-94,206,174,93,187,84,219,57,80,93,93,77,121,121,42,72,182,1,147,97,192,78,55,
-82,227,22,123,176,189,61,206,41,153,225,233,94,136,158,196,104,96,45,48,208,
-183,125,11,38,154,188,167,136,208,76,109,103,140,150,113,158,253,104,113,187,
-247,243,149,66,171,173,245,11,208,238,42,68,239,160,117,90,190,171,48,169,231,
-114,17,159,182,8,197,18,161,9,171,253,243,91,68,237,101,123,170,78,127,146,122,
-181,151,66,116,1,249,178,132,6,229,3,157,225,237,156,53,107,150,106,58,71,150,
-46,93,106,175,174,195,140,7,75,208,226,138,235,105,29,145,16,185,50,55,64,128,
-2,220,67,207,181,130,98,9,158,132,213,158,218,247,175,61,222,209,179,142,122,
-110,248,48,43,104,119,188,247,27,3,68,232,30,76,36,123,71,68,104,88,112,146,87,
-60,33,106,207,27,31,167,245,216,121,89,65,133,232,97,34,52,83,100,124,74,121,
-206,157,59,87,53,157,35,119,222,121,167,189,186,193,178,146,216,174,184,160,206,
-72,136,222,196,104,96,94,192,246,221,174,8,237,137,216,83,234,250,35,227,253,
-34,213,115,51,219,247,125,216,195,39,61,168,13,240,102,47,202,135,8,181,93,242,
-9,159,24,109,246,189,106,130,15,33,122,176,8,13,74,78,111,71,197,87,0,135,0,
-12,31,62,156,241,227,199,171,166,115,160,170,170,138,141,27,55,122,171,245,110,
-131,29,52,14,172,39,117,58,66,228,194,69,180,158,29,9,224,151,244,188,180,76,97,
-162,202,78,175,22,15,16,166,5,174,136,10,122,232,140,102,104,163,187,11,219,73,
-207,237,234,96,172,160,29,17,161,30,73,159,16,117,2,132,166,29,128,100,11,85,71,
-2,84,136,158,37,66,33,115,106,166,153,222,65,115,230,204,81,45,231,200,146,37,
-75,236,213,183,173,206,71,46,119,209,151,24,13,252,71,192,246,79,48,73,235,123,
-170,232,140,248,94,147,110,27,234,31,195,237,207,126,225,23,159,17,122,198,12,
-105,254,33,19,123,105,25,219,158,107,29,6,137,120,191,107,222,191,236,183,124,
-74,128,10,209,3,69,40,62,17,106,11,209,148,8,189,248,226,139,85,203,57,178,120,
-241,98,123,117,115,6,235,137,223,18,160,113,77,162,55,113,17,48,60,96,123,79,76,
-78,159,173,16,245,130,109,188,116,107,158,120,10,18,159,61,69,132,142,246,173,
-23,187,223,171,161,131,34,52,108,124,168,227,19,155,137,128,125,10,64,18,162,
-135,137,208,182,230,137,31,131,201,101,201,152,49,99,24,61,122,180,106,57,7,42,
-43,43,217,178,101,11,0,177,88,172,33,145,72,212,6,60,241,251,159,234,131,132,
-168,26,86,209,147,41,115,69,168,95,88,213,1,75,123,209,247,244,11,209,136,245,
-112,25,181,238,99,255,16,156,158,34,64,195,68,158,151,7,181,163,231,12,154,186,
-248,115,238,185,95,6,206,196,76,231,185,145,214,214,79,50,44,11,33,186,153,8,
-181,27,58,255,252,199,49,172,249,225,101,5,205,29,219,10,154,72,36,54,147,62,54,
-44,104,64,125,208,211,189,158,240,69,79,231,104,130,167,232,124,130,158,153,
-156,62,76,124,250,133,168,227,219,231,9,211,100,6,225,25,233,1,223,213,143,23,
-177,158,143,115,250,151,23,1,59,128,127,193,204,50,247,107,204,176,14,39,228,
-125,14,102,122,212,74,224,125,96,178,110,63,33,58,151,104,7,223,111,63,137,123,
-99,149,190,234,237,212,120,208,220,249,213,175,126,101,55,146,239,144,62,158,
-41,30,80,130,198,58,5,89,66,251,162,32,117,66,202,245,89,30,215,158,247,173,
-203,225,51,133,189,103,29,153,45,218,109,157,35,40,114,184,30,19,32,242,10,176,
-24,152,150,161,29,8,251,254,235,186,232,119,43,3,46,117,219,22,155,132,43,48,
-106,123,217,255,51,104,217,63,150,49,65,112,10,34,123,210,138,238,90,194,68,104,
-71,138,191,14,236,200,247,65,152,113,195,94,90,175,79,104,61,254,211,255,160,
-94,1,148,3,147,186,209,255,227,88,76,80,170,125,31,143,238,228,107,222,78,235,
-96,175,81,234,153,69,190,105,175,37,52,83,84,124,20,56,28,147,164,158,9,19,38,
-48,108,216,48,213,112,14,172,95,191,158,29,59,118,120,117,237,37,162,15,19,159,
-65,243,29,59,89,90,33,68,223,123,232,44,118,203,48,140,149,241,223,129,127,96,
-198,113,175,235,102,159,247,104,224,212,128,237,239,209,59,172,160,153,238,81,
-167,151,127,63,15,47,121,124,190,137,184,226,179,26,40,117,183,85,211,50,214,54,
-140,106,247,65,237,131,110,84,111,195,221,7,50,251,62,238,223,201,215,60,204,
-215,223,71,105,157,227,85,136,46,23,161,182,16,181,95,189,168,248,78,203,13,250,
-236,179,207,242,139,95,252,130,55,223,124,147,198,198,244,54,235,251,223,255,
-126,214,174,255,103,159,125,150,255,249,159,255,225,173,183,222,162,177,177,145,
-203,46,187,140,83,79,61,149,211,79,63,157,171,174,186,138,127,255,247,127,79,29,
-59,109,218,52,18,137,4,143,61,246,88,151,254,40,190,220,160,91,104,157,239,206,
-111,9,240,187,231,237,89,68,36,62,211,249,4,120,202,93,222,144,229,113,126,54,
-244,224,239,93,136,25,179,253,105,90,44,140,159,2,94,4,62,143,153,145,200,99,
-133,181,124,238,62,248,204,23,89,2,194,22,50,61,45,57,189,232,122,202,220,126,
-105,15,176,159,187,45,155,84,80,31,5,252,231,246,53,15,97,172,161,101,25,218,
-164,124,115,62,48,197,173,195,167,244,119,18,221,65,132,134,5,36,217,214,208,84,
-71,213,209,89,146,28,199,33,18,49,151,220,188,121,51,243,230,205,227,200,35,
-143,228,191,254,235,191,40,46,46,6,96,213,170,85,44,91,182,140,35,142,56,34,171,
-115,190,243,206,59,173,206,51,117,234,84,254,239,255,254,207,244,196,159,250,84,
-234,216,120,60,206,91,111,189,197,89,103,157,213,229,63,202,178,101,203,236,213,
-74,210,231,146,14,179,130,6,229,188,11,115,227,142,0,78,194,184,156,26,93,1,
-178,18,147,248,187,171,24,228,54,172,199,99,166,33,92,11,60,75,110,83,248,181,
-135,247,129,243,242,120,92,79,193,255,125,70,2,183,98,220,241,96,172,70,247,187,
-226,180,217,221,118,158,79,252,117,37,163,129,47,7,108,223,78,207,77,78,47,186,
-134,247,220,255,55,24,75,191,103,89,248,57,240,159,116,190,43,59,223,56,152,224,
-170,174,164,26,120,70,127,37,209,157,68,104,144,40,181,93,241,147,92,97,193,212,
-169,83,25,60,120,112,135,62,152,39,64,1,30,120,224,1,226,241,56,183,223,126,59,
-7,30,120,96,106,251,219,111,191,13,144,181,8,253,221,239,126,23,120,158,17,35,
-70,112,214,89,103,81,84,84,148,118,238,166,166,38,38,76,152,208,165,63,200,234,
-213,171,249,248,227,143,177,158,220,235,73,183,128,54,89,197,182,134,218,209,
-242,65,2,180,12,56,10,152,238,118,238,251,211,146,147,112,53,240,93,224,175,93,
-248,85,39,3,63,116,159,182,99,238,103,223,5,60,232,138,161,87,145,181,171,179,
-69,233,151,221,142,230,4,119,219,120,247,255,113,111,55,248,124,97,83,116,254,
-138,222,145,156,94,116,30,251,181,241,240,27,196,68,224,37,235,63,215,64,184,
-251,121,24,176,6,56,208,109,63,143,5,190,5,156,142,25,234,242,162,43,124,223,9,
-120,239,129,192,181,238,195,223,112,76,224,212,211,192,91,192,247,221,7,191,199,
-59,240,221,15,6,94,115,219,119,7,24,135,241,166,205,192,4,102,245,195,12,239,
-42,11,120,239,88,224,70,224,95,49,30,147,181,152,177,161,153,56,0,184,194,253,
-62,227,220,109,155,129,63,2,55,99,44,203,66,228,77,132,102,114,197,95,228,29,
-116,201,37,151,228,245,67,190,250,234,171,140,30,61,58,77,56,130,25,59,89,81,81,
-193,160,65,131,178,58,207,107,175,189,22,120,158,88,44,70,44,150,30,251,176,97,
-131,241,184,78,156,56,177,75,127,144,59,238,184,195,94,245,2,146,60,161,233,23,
-160,182,21,52,78,235,36,215,165,192,84,204,48,137,179,48,3,238,253,196,92,33,56,
-169,139,69,232,36,75,128,226,254,143,134,184,226,99,46,240,49,240,40,198,234,37,
-65,218,57,36,221,14,241,57,107,219,185,221,64,132,142,166,247,77,209,41,186,
-142,9,192,113,192,3,192,77,192,135,174,32,250,6,240,72,6,49,101,63,244,20,103,
-56,255,65,174,152,244,218,207,199,112,99,33,92,78,4,126,131,25,222,226,23,136,
-47,98,60,81,182,40,189,192,247,112,222,17,17,58,208,21,160,94,255,220,207,93,
-30,105,45,151,134,220,115,255,231,214,131,199,103,220,18,198,97,24,239,85,133,
-187,30,119,53,197,4,183,204,118,235,98,163,254,146,162,163,34,180,173,128,164,
-40,45,110,61,102,206,156,153,151,15,119,203,45,183,112,235,173,183,166,214,199,
-141,51,15,90,183,222,122,43,167,157,118,26,235,215,175,103,234,212,169,57,159,
-199,230,164,147,78,74,75,139,228,137,80,255,148,163,91,183,110,229,206,59,239,
-228,175,127,253,43,31,126,248,33,131,7,15,230,180,211,78,227,59,223,249,14,37,
-37,29,31,183,189,124,249,114,123,117,11,225,99,65,155,3,132,168,227,54,54,103,
-186,229,211,152,148,35,109,17,221,71,255,191,76,215,45,119,27,177,217,152,224,
-172,181,192,195,116,93,130,242,145,192,31,66,246,253,222,45,189,129,23,49,214,
-118,239,207,123,212,62,254,60,69,192,101,244,238,41,58,69,231,178,205,125,136,
-245,30,228,189,135,242,215,221,125,65,252,13,248,39,224,136,44,30,116,94,115,
-239,147,215,44,241,53,219,109,175,103,97,172,160,255,236,254,135,237,33,78,191,
-112,5,104,53,112,157,43,250,6,98,50,202,92,28,208,215,230,194,63,220,7,252,181,
-190,237,11,129,119,49,94,166,32,126,230,10,208,106,224,191,48,222,177,41,192,13,
-132,91,143,23,187,2,116,17,112,159,91,231,81,87,128,94,143,177,46,223,225,10,81,
-33,58,36,66,131,68,169,45,68,63,235,117,98,199,31,127,124,94,196,24,192,9,39,
-156,64,73,73,9,55,222,120,35,103,158,121,38,39,158,104,254,203,199,30,123,44,31,
-126,248,33,187,118,237,202,202,21,31,118,30,128,154,154,26,174,191,254,122,142,
-60,242,200,180,247,108,216,176,129,81,163,70,49,96,64,139,134,123,245,213,87,
-185,248,226,139,41,47,47,103,250,244,233,12,25,50,132,127,252,227,31,220,123,
-239,189,188,255,254,251,220,117,215,93,29,250,190,47,189,244,18,117,117,117,0,
-148,149,149,125,82,91,91,107,187,220,155,66,68,104,145,123,179,159,134,25,231,
-89,145,195,239,186,53,160,209,234,108,214,186,215,61,40,139,99,7,96,18,79,127,
-14,248,41,38,114,245,207,116,174,219,126,32,225,193,56,235,122,81,27,144,192,
-140,179,28,103,89,102,242,69,25,112,37,240,109,58,30,89,219,147,242,37,73,139,0,
-0,32,0,73,68,65,84,167,232,20,93,203,179,192,161,238,242,15,172,135,221,101,
-152,233,143,79,14,120,143,211,142,182,196,1,86,89,235,243,48,238,103,48,110,250,
-127,183,238,165,221,86,123,114,134,187,252,85,210,131,125,158,118,239,193,171,9,
-158,25,175,189,188,30,176,45,158,161,141,47,177,140,72,179,48,150,93,48,195,19,
-222,39,216,122,60,212,21,218,96,210,168,93,26,114,238,207,233,239,40,242,37,66,
-131,92,241,94,126,208,127,243,14,186,244,210,75,243,246,225,166,76,153,194,135,
-31,126,8,152,72,245,147,78,58,41,181,239,153,103,204,152,233,108,68,104,166,
-243,188,244,210,75,129,231,217,176,97,3,199,29,119,92,106,125,231,206,157,204,
-155,55,143,201,147,39,243,203,95,254,146,254,253,77,134,140,243,207,63,159,253,
-246,219,143,219,111,191,157,202,202,202,14,205,16,181,104,209,162,212,114,109,
-109,237,155,180,206,5,232,119,199,31,6,124,211,125,130,207,245,129,194,19,178,
-119,209,118,250,18,155,67,125,79,237,185,4,174,236,112,175,95,216,206,255,236,
-104,140,203,126,14,240,60,176,192,178,74,136,220,30,42,59,131,225,192,229,228,
-39,181,203,163,200,10,154,203,239,25,201,162,45,239,204,255,64,91,255,179,130,
-118,222,255,217,112,56,45,211,188,218,15,85,7,187,109,93,97,6,113,105,143,203,
-138,101,104,219,236,109,111,91,203,53,33,223,119,152,37,134,255,22,112,190,107,
-49,214,195,100,23,255,23,192,88,103,189,254,195,31,9,255,100,134,135,244,108,
-120,81,183,163,232,168,8,205,228,138,143,185,229,116,239,128,243,207,63,63,175,
-31,112,253,250,245,64,235,177,153,222,246,108,131,146,194,206,179,110,221,186,
-86,219,63,248,224,3,106,106,106,210,182,221,126,251,237,212,214,214,114,245,
-213,87,83,95,95,79,125,125,125,106,223,216,177,99,1,227,170,239,136,8,125,224,
-129,7,236,213,119,125,226,211,239,130,111,6,46,196,140,217,137,117,160,138,11,
-221,167,218,161,251,64,200,116,244,154,133,152,160,154,43,48,121,46,243,250,215,
-3,142,236,196,123,47,73,250,244,139,65,68,125,199,119,86,27,96,207,203,94,149,
-199,115,15,32,187,225,32,217,160,135,140,236,241,207,194,228,191,71,247,213,76,
-106,65,215,243,178,122,228,147,131,128,175,99,134,111,156,140,201,53,123,133,
-251,63,255,168,29,159,49,219,137,62,178,201,239,250,161,245,187,28,135,177,214,
-226,19,188,71,99,172,152,13,121,252,15,216,17,194,227,66,142,181,83,87,77,198,
-12,19,72,217,112,66,222,243,190,251,57,139,49,25,78,94,10,185,255,11,117,59,
-138,142,138,208,32,177,97,11,209,19,188,243,156,114,202,41,20,20,20,228,245,3,
-174,95,191,158,253,247,223,159,161,67,135,182,218,62,104,208,32,42,42,42,58,116,
-158,117,235,214,49,112,224,64,70,140,24,17,42,112,29,199,225,209,71,31,165,185,
-185,153,127,253,215,127,13,189,70,182,1,82,65,60,253,244,211,52,55,155,204,56,
-197,197,197,31,55,52,52,248,103,3,9,10,74,58,149,238,63,85,95,103,19,195,68,116,
-207,236,97,159,123,143,213,65,132,165,146,176,255,80,157,149,62,235,120,210,131,
-48,86,229,241,220,53,110,201,135,16,61,10,145,171,224,139,132,8,164,174,104,59,
-250,99,172,128,241,144,254,102,48,102,28,102,18,51,94,179,38,79,226,216,11,190,
-169,165,197,106,87,155,161,79,155,138,25,62,98,207,10,228,101,141,168,199,184,
-234,109,241,62,197,247,223,220,236,126,199,207,250,4,221,91,238,119,219,3,252,
-201,109,179,127,143,177,124,174,116,235,228,56,76,208,212,225,192,85,192,79,124,
-15,162,71,211,218,155,240,25,171,94,95,161,117,194,255,15,221,253,215,99,198,
-117,14,195,140,251,180,63,219,26,119,249,35,90,198,185,62,136,25,22,176,30,51,
-204,235,71,214,123,198,0,111,186,223,191,17,88,138,241,72,121,239,89,233,246,77,
-135,0,103,187,70,146,122,76,192,169,16,29,18,161,97,174,248,40,150,43,254,178,
-203,46,203,251,7,92,191,126,125,171,241,154,222,246,108,173,160,153,206,179,110,
-221,186,86,214,81,47,40,201,59,255,246,237,219,169,174,174,230,203,95,254,50,
-103,159,125,118,232,53,14,59,236,176,156,191,231,109,183,221,150,90,110,104,104,
-120,139,150,168,248,76,101,15,225,131,198,251,18,213,61,240,51,111,162,37,242,
-116,184,219,249,189,103,237,63,152,116,11,229,91,157,36,224,255,159,111,219,138,
-60,158,127,59,240,63,228,103,76,232,89,152,97,24,149,250,187,119,72,144,102,
-179,61,95,68,129,47,97,134,12,13,165,117,234,164,38,76,16,204,72,119,249,15,152,
-148,64,249,120,224,42,177,30,246,6,184,223,181,46,228,59,159,78,203,56,72,27,59,
-79,230,69,174,232,2,19,240,105,63,172,253,214,21,144,149,192,221,214,246,251,
-220,118,220,115,113,93,6,188,224,222,215,65,169,143,118,98,130,47,109,102,184,
-231,247,99,7,79,253,63,87,212,218,252,17,99,13,62,197,45,222,249,61,86,187,226,
-214,243,48,124,211,253,190,21,152,84,78,65,15,191,255,235,62,236,223,231,174,95,
-233,158,227,40,76,144,82,16,15,232,246,19,109,53,18,217,136,79,191,240,180,93,
-241,95,76,245,18,121,78,236,254,225,135,31,178,115,231,206,86,98,115,247,238,
-221,108,219,182,45,235,244,73,97,231,169,169,169,225,221,119,223,13,20,161,251,
-239,191,127,42,149,211,222,189,123,1,24,57,114,36,199,31,127,124,104,41,44,204,
-221,243,240,200,35,105,99,191,223,39,179,21,212,179,132,46,118,159,52,251,50,
-117,152,244,43,61,141,63,251,214,239,162,37,72,235,32,76,62,76,155,39,243,124,
-253,145,152,153,88,254,217,218,246,6,225,209,179,185,80,235,138,140,82,90,79,
-112,145,169,92,31,112,174,129,174,213,69,244,28,138,48,121,47,79,194,88,213,250,
-5,28,115,138,187,111,10,38,85,209,216,60,93,219,111,9,173,203,32,186,171,200,
-28,144,180,151,244,105,60,247,96,114,26,219,98,250,29,183,221,182,207,211,224,
-62,136,121,188,131,177,184,46,114,143,117,220,99,214,96,44,142,19,105,157,206,
-104,43,153,221,243,137,144,7,179,43,221,7,202,6,183,60,226,62,200,121,195,122,
-118,144,158,41,96,37,198,43,242,103,247,248,70,204,248,208,207,91,223,169,158,
-244,241,175,123,220,246,227,251,152,168,252,102,247,252,219,93,17,252,21,204,
-184,125,33,66,105,111,96,146,95,136,166,124,211,211,166,77,203,249,67,236,218,
-181,139,221,187,119,51,108,216,48,74,75,91,82,152,121,110,113,191,5,51,215,241,
-160,254,243,4,141,7,245,68,168,157,164,126,248,240,225,20,21,21,241,231,63,255,
-153,121,243,230,165,37,181,7,248,228,147,79,40,45,45,109,149,107,52,91,30,125,
-244,209,212,242,224,193,131,119,86,87,87,219,179,35,5,9,80,111,223,18,76,78,185,
-79,185,141,193,241,164,15,128,207,150,184,219,16,183,71,208,230,35,48,41,65,
-251,135,132,120,141,220,243,238,147,251,223,9,78,10,189,175,200,148,218,9,90,
-102,33,186,221,181,62,120,150,236,47,186,29,83,99,64,103,93,141,73,117,146,143,
-207,85,232,138,220,201,190,255,201,110,76,212,110,115,55,168,195,123,48,51,219,
-248,173,252,243,48,17,242,149,106,186,123,4,222,252,237,153,68,170,95,56,22,229,
-233,218,239,97,220,204,59,221,229,245,25,142,125,141,246,13,25,121,151,244,124,
-154,54,109,157,167,10,99,17,205,214,109,248,87,114,243,34,84,19,60,227,91,166,
-78,106,149,221,167,103,249,157,26,48,25,75,126,170,191,187,232,44,17,154,201,
-26,154,23,87,252,15,127,248,67,30,123,236,49,30,126,248,225,180,169,51,61,145,
-232,23,155,97,226,49,140,182,206,99,111,175,174,174,166,170,170,42,77,84,23,23,
-23,115,209,69,23,113,215,93,119,241,229,47,127,153,115,206,57,135,65,131,6,81,
-93,93,205,235,175,191,206,218,181,107,121,238,185,231,114,254,254,182,43,190,
-186,186,250,13,90,172,160,246,248,207,160,249,226,107,49,99,127,94,163,37,186,
-125,36,112,14,38,229,198,164,44,27,215,24,102,188,208,255,116,225,127,239,114,
-204,52,122,217,176,47,242,132,230,74,166,212,78,254,206,232,92,247,251,216,98,
-203,47,64,119,187,157,73,85,39,126,174,215,49,110,182,245,221,164,14,43,49,65,
-37,223,243,109,31,132,177,134,126,95,77,119,143,32,238,10,155,51,178,60,126,
-187,43,240,242,193,29,214,131,219,37,250,41,132,232,121,34,52,108,174,120,79,
-128,246,195,117,229,21,22,22,114,242,201,39,231,252,33,214,173,91,71,65,65,1,
-135,31,126,120,218,246,13,27,54,48,96,192,0,70,141,26,213,106,123,255,254,253,
-25,51,102,76,86,231,15,59,207,186,117,235,232,223,191,127,42,186,221,59,22,104,
-53,93,231,130,5,11,24,49,98,4,191,255,253,239,185,249,230,155,137,199,227,28,
-112,192,1,28,113,196,17,92,113,197,21,185,183,210,241,56,79,61,101,178,98,68,34,
-17,199,113,156,237,180,78,80,31,100,5,245,132,168,55,93,167,55,83,210,22,76,98,
-226,155,105,153,170,243,34,194,103,76,130,206,139,188,110,139,100,134,39,243,
-190,48,99,210,51,152,160,140,75,49,99,231,14,113,31,26,106,48,110,175,63,99,92,
-119,219,243,116,61,47,160,96,55,198,21,183,22,227,54,123,100,31,254,7,194,184,
-19,99,249,148,53,52,191,116,101,32,99,220,253,143,127,43,139,135,225,56,198,37,
-92,69,247,11,182,116,244,183,17,98,223,52,86,158,232,44,192,184,73,74,92,139,
-202,1,110,199,233,0,206,204,153,51,29,145,27,203,151,47,79,205,243,94,92,92,188,
-13,88,142,25,15,120,51,102,176,249,124,90,166,221,60,17,51,166,232,48,140,75,
-213,155,106,174,196,253,125,10,172,135,4,127,67,94,230,190,255,151,24,55,149,55,
-195,146,23,93,121,98,23,255,191,78,116,175,27,119,63,71,194,253,92,191,116,247,
-149,229,185,19,241,202,58,221,218,61,166,14,127,226,187,174,87,126,162,159,163,
-199,176,63,102,200,144,211,70,169,38,61,178,92,8,209,199,159,138,35,214,126,59,
-16,169,200,45,143,99,34,227,120,241,197,23,211,18,187,139,236,249,220,231,62,
-199,139,47,166,242,249,62,135,25,191,84,139,153,33,102,15,198,106,181,219,93,
-222,131,177,146,213,98,6,203,239,197,88,73,109,171,168,61,119,124,216,19,252,8,
-76,176,192,36,140,101,236,69,215,10,177,187,11,191,250,32,224,88,204,56,214,
-126,24,171,220,179,152,129,248,93,101,201,248,1,193,65,48,34,115,189,117,118,14,
-85,143,209,152,40,94,191,53,116,55,38,144,165,82,63,81,143,224,135,152,0,181,
-76,108,114,31,174,133,16,125,136,130,44,196,105,144,43,126,128,39,64,75,75,75,
-37,64,115,164,190,190,62,37,64,163,209,104,50,153,76,126,68,250,120,80,127,177,
-199,131,198,105,237,138,207,214,109,180,21,147,246,227,183,251,240,235,239,6,
-158,112,139,16,65,84,162,177,161,189,129,149,152,104,236,76,249,34,31,86,53,9,
-33,17,26,36,68,131,82,51,165,2,28,102,206,156,169,90,204,145,229,203,151,167,
-150,251,247,239,191,173,190,190,222,30,11,234,15,70,10,27,11,10,109,79,43,215,
-215,9,203,125,185,65,85,147,83,189,189,215,133,159,65,99,67,123,62,47,98,198,56,
-103,18,161,191,82,53,9,33,17,26,38,70,253,66,244,107,222,206,75,46,81,224,97,
-174,220,113,71,75,214,157,189,123,247,190,69,184,21,52,147,8,205,214,5,223,151,
-57,79,85,208,99,235,173,18,89,67,123,58,159,96,102,20,58,134,224,33,96,31,146,
-158,127,82,8,209,71,136,134,136,206,76,2,180,28,119,60,88,121,121,57,83,166,76,
-81,45,230,64,117,117,53,171,86,153,73,55,10,10,10,226,201,100,114,39,173,173,
-159,97,2,52,40,42,62,155,249,139,133,232,137,220,73,240,120,229,121,152,113,163,
-162,251,243,2,102,12,123,16,26,146,35,132,68,104,32,118,96,82,4,227,138,255,138,
-183,115,214,172,89,170,193,28,89,186,116,105,106,185,172,172,108,27,45,227,60,
-253,238,119,79,140,182,199,21,47,68,111,162,18,99,13,245,227,89,67,69,247,231,
-97,194,39,195,144,43,94,136,62,74,36,100,155,183,61,70,75,138,166,66,76,20,243,
-11,152,124,134,108,220,184,145,241,227,199,171,22,115,224,136,35,142,96,227,70,
-51,67,219,128,1,3,254,82,83,83,179,13,19,249,238,143,138,223,237,110,171,193,
-76,61,231,77,169,150,75,84,188,16,61,149,209,40,82,62,31,109,251,190,100,53,
-102,222,117,155,189,152,57,229,227,221,188,62,53,238,94,136,78,32,154,161,145,
-10,114,197,15,247,4,232,240,225,195,37,64,115,164,170,170,42,37,64,139,138,138,
-154,107,106,106,118,209,58,57,189,63,34,190,45,119,188,26,70,209,155,169,68,214,
-208,108,197,103,36,160,13,15,11,52,181,3,78,59,187,60,27,240,121,255,100,25,60,
-246,117,241,215,73,88,93,6,213,181,16,34,15,34,52,72,144,218,174,248,25,222,206,
-57,115,230,168,246,114,100,201,146,37,45,61,232,160,65,91,9,142,132,247,23,91,
-124,6,89,61,37,62,69,111,71,99,67,219,39,62,237,125,126,193,25,221,7,229,207,1,
-159,251,190,16,81,220,213,37,146,197,254,76,245,43,132,200,129,130,12,226,51,72,
-136,166,68,232,244,233,211,119,98,102,236,17,237,100,241,226,197,169,229,134,
-134,134,183,124,34,212,115,181,7,89,65,195,34,226,133,232,11,84,162,72,121,178,
-108,179,109,177,20,86,218,122,127,190,89,135,153,75,126,170,187,254,16,102,214,
-180,194,125,92,127,78,134,229,164,239,65,223,46,17,107,95,68,237,177,16,249,105,
-188,108,119,77,140,150,41,59,15,1,254,15,32,26,141,126,184,99,199,142,154,242,
-242,242,67,84,133,237,236,69,43,43,83,115,222,23,20,20,52,196,227,241,71,48,99,
-61,63,33,125,60,168,247,234,205,144,84,135,25,63,213,104,137,83,127,128,146,26,
-65,209,219,25,141,198,134,18,210,110,19,208,134,123,70,132,168,207,160,16,228,
-166,239,108,17,26,1,198,98,178,171,236,197,204,146,246,225,62,110,183,252,162,
-211,239,101,178,31,248,131,150,253,231,81,27,44,68,59,104,43,89,125,196,106,180,
-46,240,118,204,152,49,99,215,192,129,3,199,169,250,218,143,109,5,141,70,163,
-149,164,167,98,202,148,31,212,115,199,203,21,47,250,244,115,28,178,134,102,18,
-160,81,194,199,125,122,195,170,34,1,98,180,171,132,232,86,210,167,230,237,215,
-78,161,152,239,207,230,132,8,80,219,227,228,13,131,138,88,219,163,150,24,245,
-62,151,223,58,42,132,200,81,132,250,27,163,40,48,221,219,89,82,82,50,174,177,
-177,177,95,65,65,129,106,176,29,220,122,235,173,220,114,203,45,169,245,166,166,
-166,55,9,14,70,10,19,161,114,197,11,161,89,148,8,17,142,17,159,216,244,7,29,69,
-45,17,26,36,70,233,68,177,215,29,241,183,161,126,75,103,146,244,177,248,113,
-223,118,91,176,10,33,242,32,66,195,210,122,28,6,12,245,54,188,240,194,11,253,74,
-75,75,85,123,237,224,141,55,222,96,254,252,249,169,245,88,44,86,155,72,36,106,
-92,177,217,24,80,252,115,197,103,154,37,9,137,82,209,135,168,164,111,91,67,51,
-9,80,175,20,184,66,243,58,224,235,64,137,254,54,89,241,36,112,35,198,90,235,
-181,189,222,152,252,24,45,65,162,184,175,94,221,59,200,26,42,68,187,137,102,104,
-228,236,134,109,8,176,222,219,57,100,200,16,103,205,154,53,170,189,44,121,238,
-185,231,152,57,115,102,106,125,212,168,81,245,137,68,226,249,16,241,185,151,224,
-192,36,59,50,30,228,138,23,125,155,190,26,41,31,9,105,171,109,171,103,145,43,62,
-63,6,46,151,0,109,23,95,4,158,2,230,3,101,64,41,80,140,25,54,80,228,150,66,87,
-228,23,144,110,77,14,250,125,132,16,57,136,80,63,47,3,35,188,149,191,253,237,
-111,145,41,83,166,112,197,21,87,208,216,216,104,148,144,227,144,72,36,228,150,
-176,88,184,112,33,197,197,197,156,120,226,137,172,94,189,58,181,253,189,247,222,
-123,2,168,114,5,231,94,76,2,250,189,1,2,212,22,161,138,140,23,162,133,74,250,
-118,222,80,91,244,216,2,116,2,240,0,240,109,253,69,58,212,47,158,1,252,11,208,
-223,42,69,180,88,152,253,99,108,251,226,112,6,33,242,250,84,237,183,126,218,145,
-241,35,128,31,0,231,168,202,58,80,217,145,72,163,227,56,171,129,141,174,240,172,
-195,68,190,215,210,18,29,239,205,142,228,69,196,251,103,72,82,84,188,16,134,209,
-244,173,72,249,160,177,250,81,95,123,253,36,240,25,251,77,211,167,79,119,110,
-190,249,230,72,69,69,69,183,250,50,201,100,210,137,70,163,17,128,120,60,222,20,
-143,199,155,227,241,248,222,104,52,26,75,38,147,137,72,36,18,141,70,163,209,88,
-44,86,84,84,84,84,236,190,39,9,68,188,247,217,231,160,197,21,222,158,207,144,
-188,255,254,251,35,223,253,238,119,35,219,182,109,243,239,254,79,247,255,101,
-123,169,252,195,165,60,247,124,144,129,64,237,178,16,109,16,11,17,161,254,241,
-69,222,141,247,105,160,92,213,150,19,85,192,243,192,22,90,172,159,245,110,241,
-196,104,189,37,60,247,102,16,159,106,228,132,48,98,115,16,240,57,223,246,254,
-238,253,243,151,94,44,66,253,22,208,98,215,80,240,101,128,194,194,66,126,242,
-147,159,240,212,83,79,113,222,121,231,69,6,12,24,208,29,31,202,83,130,49,26,141,
-198,10,10,10,138,138,138,138,74,10,11,11,251,23,21,21,149,20,21,21,21,23,22,22,
-246,143,197,98,133,246,123,236,247,217,203,228,96,125,140,68,34,145,79,125,234,
-83,145,249,243,231,211,216,216,200,139,47,190,232,237,74,0,187,128,183,104,241,
-24,58,109,148,156,132,176,16,125,153,32,119,188,63,101,133,183,252,2,48,13,184,
-141,238,63,207,111,119,98,61,176,20,120,28,248,192,21,153,158,232,244,150,235,
-93,225,105,91,61,237,185,225,189,72,76,185,226,133,72,167,175,140,13,13,11,70,
-242,44,160,23,2,223,244,14,158,61,123,54,11,22,44,208,191,35,75,10,11,11,57,244,
-208,67,253,6,154,145,152,113,161,37,174,200,247,92,242,133,180,100,28,8,74,254,
-159,179,40,22,162,175,17,150,99,41,40,119,154,151,150,226,215,152,49,71,3,220,
-226,13,222,46,165,101,236,76,161,117,163,134,37,71,238,141,248,235,205,78,231,
-225,205,138,228,89,149,61,75,168,109,5,181,45,160,154,174,83,136,182,169,36,60,
-82,254,34,140,117,176,183,17,148,3,52,53,143,242,172,89,179,184,225,134,27,244,
-207,104,39,69,69,69,12,29,58,148,143,62,250,200,219,244,178,43,64,189,182,220,
-158,217,174,128,150,136,249,132,175,127,83,155,44,68,59,159,174,241,9,68,59,205,
-135,55,46,180,159,251,52,88,226,10,78,91,124,218,17,132,253,173,247,217,185,234,
-250,210,83,161,109,181,76,248,68,168,151,146,105,47,233,238,248,122,210,45,162,
-158,24,13,154,182,83,34,84,136,22,70,99,102,223,25,232,219,190,13,56,158,158,63,
-54,52,108,44,168,215,206,14,5,54,1,148,151,151,179,107,215,46,253,35,114,160,
-186,186,154,242,242,212,104,179,6,224,90,210,199,237,215,184,197,246,94,217,6,3,
-59,127,168,218,103,33,178,32,91,75,104,210,247,36,216,228,138,36,175,49,244,
-196,150,183,175,208,39,64,163,33,194,183,55,138,79,15,59,154,61,72,132,54,90,
-130,179,129,116,75,168,237,138,143,163,153,146,132,200,68,37,240,32,48,219,183,
-125,56,189,207,26,26,148,15,116,134,183,115,214,172,89,250,55,228,200,210,165,
-75,237,213,117,174,97,37,97,245,105,158,232,183,13,43,125,193,195,39,68,167,63,
-97,251,159,182,35,1,79,219,94,158,52,207,229,94,76,203,56,25,59,133,133,119,
-179,198,2,110,214,190,130,223,18,234,9,248,56,45,227,61,61,107,168,191,216,51,
-38,5,37,170,151,8,21,162,53,39,2,143,97,188,50,54,189,193,26,218,150,151,106,
-37,112,8,192,198,141,27,25,63,126,188,254,13,57,112,196,17,71,176,113,227,70,
-111,245,30,224,61,210,51,151,236,161,181,53,212,107,179,237,161,83,178,132,10,
-145,37,153,44,161,254,241,160,113,90,79,243,230,137,44,207,202,215,215,159,22,
-29,159,8,197,18,144,158,165,216,158,166,211,78,247,225,45,251,199,130,42,73,
-189,16,109,243,42,240,4,112,158,111,123,79,183,134,6,13,153,178,163,226,43,60,1,
-58,124,248,112,9,208,28,169,170,170,178,5,104,189,43,52,131,12,42,32,171,167,
-16,157,34,66,253,169,37,28,75,100,18,32,36,237,241,142,94,192,141,29,53,24,100,
-5,237,75,34,52,44,56,41,78,186,107,222,158,55,222,219,238,159,33,73,17,241,66,
-100,166,22,88,4,156,74,186,53,52,2,252,7,198,178,85,217,195,133,104,144,8,77,77,
-197,54,103,206,28,253,11,114,100,201,146,37,246,234,219,4,71,191,75,124,10,209,
-137,34,212,47,70,131,34,227,253,34,213,179,144,218,79,140,97,86,208,190,42,66,
-109,151,124,194,39,70,155,125,175,182,251,221,159,0,25,100,5,21,34,19,189,213,
-26,74,128,33,192,107,99,83,34,244,226,139,47,214,63,32,71,22,47,94,108,175,110,
-14,105,219,189,118,55,73,112,142,80,33,68,30,68,104,208,141,151,116,27,190,120,
-128,48,45,112,69,84,144,5,52,26,242,68,223,219,69,40,1,141,149,55,86,200,47,52,
-237,0,36,91,168,58,18,160,66,180,139,222,102,13,141,180,33,64,199,96,114,89,50,
-102,204,24,70,143,30,173,127,64,14,84,86,86,178,101,203,22,0,98,177,88,67,34,
-145,168,13,232,255,146,62,195,64,144,16,85,219,44,68,7,69,168,109,5,141,88,55,
-96,148,214,3,174,109,23,115,144,248,140,16,28,248,212,219,113,66,68,124,88,99,
-150,8,216,38,1,42,68,110,244,54,107,104,80,122,38,47,73,253,5,222,65,178,130,
-230,142,109,5,77,36,18,155,125,70,150,32,207,148,191,141,86,32,146,16,121,120,
-210,206,212,240,69,124,2,211,110,8,195,196,103,95,23,161,97,227,67,29,95,67,150,
-8,216,23,214,168,169,129,19,162,109,78,164,119,68,202,219,109,168,215,214,122,
-17,241,69,192,235,152,28,161,108,223,190,157,97,195,134,233,151,207,129,161,67,
-135,58,59,118,236,240,234,249,81,204,116,157,181,152,104,248,221,86,217,131,137,
-146,247,102,187,179,243,132,6,229,113,86,123,45,68,27,100,227,142,183,45,162,
-222,141,234,89,71,29,235,233,60,234,107,56,251,162,0,109,75,136,226,19,153,201,
-16,145,138,4,168,16,57,211,27,172,161,153,162,226,163,192,225,158,0,157,48,97,
-130,4,104,142,172,95,191,30,75,128,122,169,151,252,65,164,65,37,25,208,94,171,
-173,22,162,157,68,219,16,81,126,33,229,119,27,219,227,25,237,32,27,59,215,165,
-127,189,47,21,59,2,222,31,128,100,55,100,201,12,2,84,79,212,66,180,15,111,108,
-104,93,128,176,187,8,51,219,91,71,24,132,25,119,122,3,240,223,152,121,219,71,
-116,162,16,245,123,164,98,64,42,43,253,220,185,115,243,122,209,163,143,62,154,
-201,147,39,119,248,60,143,63,254,56,159,249,204,103,40,41,41,33,18,137,112,237,
-181,215,242,250,235,175,19,137,68,88,184,112,97,171,107,78,153,50,165,203,255,
-40,119,222,121,167,189,186,133,214,129,163,118,9,10,28,181,211,241,169,157,22,
-162,157,100,178,132,58,86,195,231,95,246,138,63,117,72,166,167,249,190,72,216,
-83,114,38,129,41,235,167,16,29,39,204,26,122,48,112,10,240,80,7,206,61,25,248,
-33,48,197,21,132,73,140,11,247,65,224,126,247,218,181,121,16,159,118,219,234,
-183,134,158,235,29,208,209,89,146,28,199,33,18,49,151,140,199,227,172,91,183,
-142,175,124,229,43,29,58,231,155,111,190,201,57,231,156,195,81,71,29,197,45,183,
-220,66,73,73,9,199,29,119,28,207,61,247,92,74,116,122,120,215,156,57,115,102,
-151,255,73,150,45,91,102,175,86,6,24,85,130,74,80,240,168,140,5,66,228,89,132,
-218,66,40,18,178,236,132,60,177,251,197,171,68,104,250,122,91,46,28,53,102,66,
-116,12,207,26,122,182,175,157,139,2,223,7,158,234,128,80,156,100,9,80,239,156,
-67,128,185,110,249,24,51,182,240,158,60,8,82,104,237,138,159,132,177,198,50,
-117,234,84,6,15,30,220,177,147,71,90,154,237,13,27,54,208,216,216,200,167,63,
-253,233,14,157,243,174,187,238,34,30,143,179,98,197,10,42,42,42,90,158,0,14,62,
-152,25,51,102,208,175,95,191,86,215,204,135,245,181,61,172,94,189,154,143,63,
-254,216,91,221,131,73,82,111,91,64,253,94,45,255,216,207,68,6,1,170,54,92,136,
-60,137,208,32,241,233,127,98,87,100,96,126,68,170,234,80,136,252,241,42,176,26,
-248,39,223,246,169,116,220,26,26,205,176,175,28,51,143,253,108,204,56,195,181,
-192,195,192,10,178,15,138,202,228,138,191,200,59,232,146,75,46,201,107,133,173,
-89,179,6,160,195,34,244,165,151,94,226,144,67,14,73,19,160,0,177,88,140,88,44,
-22,120,205,174,118,199,223,113,199,29,246,234,59,180,76,188,18,15,16,160,182,
-21,52,78,248,244,156,106,191,133,200,83,67,26,36,142,252,79,124,202,145,150,91,
-253,101,170,71,33,68,126,168,5,126,66,203,172,111,41,45,132,177,134,230,58,54,
-116,45,176,53,203,99,7,0,159,3,126,6,108,194,140,59,252,37,38,130,191,44,131,
-248,244,150,253,86,208,40,48,205,59,32,223,46,236,213,171,87,3,38,239,232,85,87,
-93,197,216,177,99,233,215,175,31,71,30,121,36,207,60,243,76,155,239,191,238,
-186,235,136,68,34,172,92,185,146,77,155,54,17,137,68,90,149,51,207,60,179,213,
-53,35,145,8,147,38,77,74,219,254,238,187,239,242,141,111,124,131,49,99,198,80,
-84,84,68,69,69,5,151,95,126,57,117,117,117,121,249,174,203,151,47,183,87,183,
-16,62,22,180,57,64,136,250,179,156,168,237,22,34,7,10,114,124,159,19,210,104,
-234,70,108,127,253,9,33,58,143,167,128,85,180,182,134,254,19,80,237,138,136,202,
-28,30,222,139,92,97,82,216,206,246,118,52,198,101,63,7,120,30,88,0,188,150,225,
-61,126,33,250,89,160,4,224,248,227,143,167,164,164,36,175,149,181,102,205,26,
-138,139,139,249,202,87,190,194,196,137,19,185,234,170,171,120,255,253,247,249,
-217,207,126,198,121,231,157,199,246,237,219,211,92,233,126,78,61,245,84,202,202,
-202,88,176,96,1,51,102,204,224,180,211,78,75,237,219,179,103,15,151,93,118,25,
-83,167,78,109,117,205,177,99,199,50,112,224,192,212,182,23,94,120,129,51,206,
-56,131,33,67,134,240,245,175,127,157,225,195,135,243,202,43,175,176,104,209,34,
-182,108,217,194,163,143,62,218,161,239,249,210,75,47,165,196,108,89,89,217,39,
-181,181,181,182,203,189,41,131,8,181,243,58,203,21,47,132,16,66,136,140,156,67,
-250,108,111,221,165,196,129,229,1,162,211,19,156,94,78,208,18,96,63,76,74,166,
-135,189,247,47,95,190,220,201,55,131,6,13,114,34,145,136,243,192,3,15,164,109,
-191,242,202,43,29,192,89,191,126,125,155,231,88,177,98,133,3,56,143,61,246,88,
-218,246,191,252,229,47,14,224,60,244,208,67,173,174,121,238,185,231,166,214,171,
-170,170,156,3,14,56,192,249,210,151,190,228,212,215,215,167,29,123,245,213,87,
-59,128,179,105,211,166,14,125,207,153,51,103,218,191,195,223,129,123,129,59,
-128,155,128,171,128,111,96,166,68,61,13,99,201,158,4,28,2,84,96,134,91,12,0,138,
-221,223,199,203,225,170,249,229,133,200,225,137,94,8,33,122,51,158,53,180,187,
-17,3,166,251,4,168,189,108,11,82,111,90,228,211,189,3,206,63,255,252,188,126,
-152,202,202,74,118,239,222,205,249,231,159,207,121,231,165,39,21,40,46,46,6,160,
-172,172,237,17,12,171,86,153,170,246,91,60,95,123,205,24,124,237,177,159,222,53,
-237,109,63,254,241,143,249,228,147,79,88,184,112,33,117,117,117,236,220,185,51,
-85,14,63,252,112,192,184,234,59,194,3,15,60,96,175,190,75,122,122,65,191,245,
-83,174,120,33,58,137,2,85,129,16,162,151,227,141,13,125,176,27,126,182,234,12,
-251,252,66,244,4,175,205,62,229,148,83,40,40,200,111,243,237,141,7,245,11,80,48,
-17,236,3,6,12,96,228,200,145,89,137,208,3,15,60,144,225,195,135,183,18,161,131,
-7,15,230,224,131,15,110,117,77,79,132,58,142,195,242,229,203,105,106,106,98,
-226,196,137,161,215,40,47,47,207,249,123,62,253,244,211,52,55,55,123,226,250,
-227,134,134,6,91,100,6,69,197,219,2,84,174,120,33,36,66,133,16,162,93,60,213,13,
-63,83,29,112,115,128,240,244,191,122,66,244,223,188,131,46,187,236,178,188,127,
-24,79,16,218,57,60,109,1,57,101,202,148,180,116,78,153,206,227,183,130,218,231,
-8,186,166,151,158,233,131,15,62,96,231,206,157,92,116,209,69,92,120,225,133,
-161,215,56,242,200,35,115,254,158,183,221,118,91,106,185,161,161,225,45,90,162,
-226,51,149,160,252,160,182,232,148,248,20,66,34,84,8,33,2,169,117,197,132,55,
-126,207,161,197,178,85,217,206,115,149,0,195,114,104,63,147,192,118,76,64,210,
-51,152,177,136,239,248,68,167,95,120,218,174,248,47,122,7,156,117,214,89,121,
-175,160,53,107,214,48,120,240,96,198,140,25,147,182,125,247,238,221,108,222,188,
-185,85,84,123,16,219,182,109,163,170,170,170,149,216,220,179,103,15,155,55,111,
-230,236,179,207,110,117,205,161,67,135,166,82,57,213,215,215,3,48,118,236,88,78,
-62,249,228,78,249,35,60,242,200,35,246,234,251,100,182,130,250,5,168,223,13,47,
-241,41,132,68,168,16,66,180,73,81,158,206,115,57,240,243,44,143,205,37,79,104,
-208,12,73,255,234,237,156,54,109,90,135,62,252,142,29,59,216,181,107,23,7,29,
-116,80,218,24,207,213,171,87,7,230,234,12,27,227,25,68,216,177,171,86,173,194,
-113,156,64,75,168,157,164,126,228,200,145,244,235,215,143,7,31,124,144,239,125,
-239,123,20,21,21,181,18,196,3,6,12,104,149,107,52,91,236,168,250,193,131,7,239,
-172,174,174,182,199,124,6,9,80,127,84,124,38,1,42,65,42,68,59,81,96,146,16,66,
-180,159,100,134,125,31,3,191,1,78,194,68,83,255,51,198,237,222,150,0,205,100,13,
-205,155,43,126,254,252,249,76,152,48,129,55,223,124,51,181,109,215,174,93,124,
-240,193,7,129,66,51,23,17,234,23,155,65,65,73,222,53,237,109,37,37,37,204,159,
-63,159,181,107,215,242,217,207,126,150,133,11,23,114,207,61,247,112,243,205,55,
-51,125,250,116,166,78,157,154,179,0,133,116,87,124,117,117,245,27,180,88,65,
-237,241,159,153,230,139,151,43,94,136,60,34,75,168,16,66,180,143,181,152,153,
-152,242,53,119,124,216,92,241,158,0,237,231,10,89,10,11,11,59,236,166,126,237,
-181,215,40,44,44,228,83,159,250,84,106,155,55,54,51,108,44,103,73,73,9,227,199,
-143,111,243,220,171,87,175,102,208,160,65,140,29,59,54,240,28,94,116,187,125,77,
-255,116,157,63,253,233,79,57,248,224,131,185,251,238,187,185,230,154,107,104,
-110,110,230,192,3,15,100,202,148,41,252,232,71,63,202,249,123,199,227,113,158,
-122,202,12,13,142,68,34,142,227,56,219,105,157,160,62,200,10,154,173,37,84,8,
-209,78,148,211,76,8,33,218,199,32,224,88,224,120,87,32,174,5,158,37,251,89,148,
-194,218,97,127,142,80,47,79,232,87,129,219,192,204,144,180,108,217,50,253,2,57,
-112,223,125,247,165,102,152,42,46,46,222,222,208,208,240,87,247,97,161,6,51,119,
-252,110,171,124,226,150,90,204,156,242,123,93,129,234,137,82,79,144,34,65,42,68,
-238,200,18,42,132,16,237,99,55,240,132,91,58,195,32,224,45,123,130,116,182,183,
-227,210,75,47,85,237,231,200,162,69,139,82,203,110,84,124,216,52,157,254,220,
-160,73,95,9,154,51,94,8,209,193,134,79,8,33,196,190,105,131,109,23,124,140,22,
-43,232,96,224,109,128,210,210,82,106,107,107,85,99,57,80,95,95,79,105,105,169,
-81,246,209,104,50,153,76,174,192,88,57,107,221,135,10,219,18,186,135,22,43,104,
-29,208,64,75,192,146,29,37,143,196,168,16,29,67,129,73,66,8,209,253,132,168,39,
-70,207,245,14,242,92,201,162,253,44,95,222,50,59,106,255,254,253,183,145,110,5,
-13,179,134,250,199,130,134,137,77,9,80,33,36,66,133,16,162,199,139,81,191,16,
-253,154,183,243,146,75,46,81,13,229,200,29,119,220,145,90,222,187,119,175,237,
-138,111,34,60,55,168,95,132,202,21,47,132,68,168,16,66,244,26,209,153,73,128,
-150,3,71,130,153,166,50,40,135,167,104,155,234,234,234,84,234,168,130,130,130,
-120,50,153,220,73,107,235,103,152,0,109,43,42,94,66,84,8,137,80,33,132,232,21,
-130,52,234,46,199,128,175,120,59,103,205,154,165,26,202,145,165,75,151,166,150,
-203,202,202,182,185,194,50,40,31,168,39,70,219,227,138,23,66,72,132,10,33,68,
-143,22,159,65,150,208,212,228,233,115,231,206,85,77,229,200,157,119,222,153,90,
-78,36,18,155,8,182,130,54,89,2,52,104,150,36,185,226,133,144,8,21,66,136,94,41,
-68,253,2,116,56,112,8,192,240,225,195,179,74,20,47,90,83,85,85,197,198,141,27,
-1,40,42,42,106,174,169,169,217,69,235,228,244,246,120,208,56,109,187,227,145,
-16,21,66,34,84,8,33,122,139,8,245,218,99,207,21,63,195,219,57,103,206,28,213,
-80,142,44,89,178,36,181,60,104,208,160,173,4,71,194,251,139,45,62,131,172,159,
-18,159,66,72,132,10,33,68,175,16,159,65,66,52,37,66,167,79,159,190,83,85,149,
-27,139,23,47,78,45,91,9,234,61,177,217,72,184,21,52,204,13,47,132,144,8,21,66,
-136,94,35,68,253,174,248,209,192,72,128,104,52,250,97,69,69,197,110,85,83,251,
-169,172,172,100,203,150,45,0,20,20,20,52,212,212,212,124,76,186,11,190,57,224,
-85,174,120,33,36,66,133,16,162,207,9,81,207,10,122,129,183,99,198,140,25,187,6,
-14,28,56,82,85,212,126,108,43,104,52,26,173,12,16,157,97,249,65,61,1,42,87,188,
-16,18,161,66,8,209,171,5,168,253,26,5,166,123,59,75,74,74,198,53,54,54,246,83,
-53,181,143,91,111,189,149,91,110,185,37,181,222,212,212,244,38,193,193,72,97,
-34,84,174,120,33,186,128,2,85,129,16,66,116,27,65,122,24,48,212,219,240,194,11,
-47,244,243,230,60,23,217,241,198,27,111,48,127,254,252,212,122,44,22,171,77,36,
-18,53,174,216,108,12,40,77,180,182,130,102,26,19,42,81,42,68,158,144,37,84,8,
-33,246,173,240,180,221,241,67,128,245,222,206,33,67,134,56,107,214,172,81,45,
-101,201,115,207,61,199,204,153,51,83,235,163,70,141,170,79,36,18,207,135,136,
-207,189,4,7,38,217,145,241,32,87,188,16,18,161,66,8,209,7,150,247,61,206,0,0,32,
-0,73,68,65,84,120,25,24,225,173,252,237,111,127,139,76,153,50,133,43,174,184,
-130,198,198,70,163,132,28,135,68,34,145,84,85,181,176,112,225,66,138,139,139,57,
-241,196,19,89,189,122,117,106,251,123,239,189,247,4,80,229,10,206,189,64,131,
-181,28,54,95,188,34,227,133,232,194,167,112,33,132,16,93,79,204,53,4,196,48,67,
-163,138,92,1,250,3,224,28,85,79,7,58,182,72,164,209,113,156,213,192,70,87,120,
-214,1,181,110,249,196,42,53,238,182,58,247,56,207,61,239,23,164,72,144,10,209,
-57,141,160,16,66,136,174,199,139,134,143,90,197,115,21,127,26,40,87,21,229,68,
-21,240,60,176,133,22,235,103,189,91,60,49,90,111,9,207,189,25,196,167,92,241,
-66,72,132,10,33,68,175,35,226,19,162,49,183,108,7,86,184,194,103,42,26,54,149,
-45,235,129,63,1,111,0,213,150,0,173,179,68,103,157,181,238,119,205,55,91,2,212,
-159,162,73,8,209,73,141,160,16,66,136,174,39,234,19,159,69,110,233,15,20,3,165,
-64,25,48,192,45,101,238,182,82,247,152,254,64,161,91,98,150,160,181,75,111,197,
-182,80,58,180,88,46,19,180,204,138,228,89,149,27,72,183,130,134,137,81,47,125,
-83,91,211,118,10,33,242,132,82,52,9,33,68,247,16,84,182,144,178,197,84,147,43,
-146,60,161,9,45,110,227,2,183,196,44,81,27,233,99,117,231,137,197,160,122,243,
-162,224,109,119,188,39,60,131,210,51,57,40,32,73,8,137,80,33,132,232,67,2,212,
-111,209,243,11,80,79,96,122,98,203,219,87,232,19,160,182,235,190,47,88,66,109,
-241,158,12,17,161,158,53,212,43,182,245,179,201,18,160,182,16,85,122,38,33,36,
-66,133,16,162,79,8,209,48,43,104,35,45,214,77,135,22,11,104,163,43,64,131,172,
-160,125,217,18,154,180,234,168,137,116,107,168,191,216,233,153,108,241,41,43,
-168,16,18,161,66,8,209,39,68,148,93,60,17,21,241,137,74,199,39,78,61,1,90,16,32,
-64,187,163,16,141,228,89,216,57,62,17,138,37,66,19,150,184,244,91,68,237,101,
-91,128,250,199,129,130,172,160,66,72,132,10,33,68,31,17,162,9,75,176,217,66,
-210,30,239,232,89,71,61,55,124,152,21,180,59,90,67,239,195,4,85,217,92,10,188,
-223,65,17,26,22,156,20,39,221,53,111,207,27,239,109,247,207,144,36,43,168,16,18,
-161,66,8,209,39,196,103,36,64,72,37,124,34,210,182,144,218,46,248,48,43,104,119,
-21,161,123,3,68,104,13,176,39,79,34,212,118,201,39,124,98,180,217,247,106,207,
-19,111,207,21,47,43,168,16,18,161,66,8,209,231,4,169,39,54,35,174,72,242,11,
-211,2,87,68,5,89,64,253,185,68,123,202,184,208,142,138,80,143,164,79,136,58,1,
-66,211,14,64,178,133,170,35,1,42,132,68,168,16,66,244,69,241,25,177,132,80,148,
-214,17,218,182,139,57,72,124,250,199,128,118,87,1,186,29,216,223,247,221,63,193,
-228,238,204,181,238,130,68,188,223,53,239,95,246,91,62,37,64,133,144,8,21,66,
-136,62,43,64,253,66,212,11,182,241,130,148,60,241,20,36,62,123,138,8,173,241,
-173,219,105,147,58,34,66,195,198,135,58,192,241,152,97,0,47,3,103,96,102,83,218,
-64,112,62,80,9,79,33,186,24,205,152,36,132,16,221,163,13,182,199,115,218,46,
-246,104,200,114,79,18,160,184,226,239,64,223,182,99,128,77,29,20,242,65,66,20,
-87,100,254,3,216,1,156,2,236,6,126,13,204,37,221,250,233,23,160,101,64,37,38,
-96,106,178,254,162,66,116,30,178,132,10,33,196,190,195,33,61,10,222,31,168,20,
-177,4,85,196,122,13,19,175,221,253,187,250,241,242,121,230,227,156,65,238,249,
-65,192,59,152,105,79,193,88,99,195,4,168,247,90,1,148,187,165,187,112,44,240,
-164,43,144,189,255,195,56,87,44,119,22,183,3,243,124,255,193,49,192,123,186,109,
-133,68,168,16,66,244,30,33,10,233,185,52,195,196,104,88,14,208,158,234,213,242,
-34,214,59,67,224,2,12,4,170,45,17,90,77,176,251,221,94,174,198,204,170,244,65,
-55,170,167,225,150,0,5,99,13,239,223,201,215,60,204,247,191,138,2,37,186,93,
-133,68,168,16,66,244,78,49,26,9,89,118,124,98,211,111,9,117,122,200,247,243,227,
-5,9,229,251,220,142,43,60,163,152,232,251,129,238,246,61,25,196,167,199,71,
-180,78,37,181,175,121,8,99,13,45,3,158,234,162,107,158,15,76,113,235,240,41,221,
-158,66,8,33,132,232,169,108,165,117,94,207,241,157,116,173,247,2,174,229,149,
-202,94,240,176,210,153,117,215,93,174,41,250,0,81,85,129,16,66,136,94,198,126,
-25,246,13,10,217,62,145,22,75,169,131,113,201,135,49,12,168,162,37,31,233,63,1,
-203,221,247,55,1,207,2,99,67,222,123,32,176,8,227,238,79,184,231,249,45,112,45,
-38,83,192,233,29,252,238,7,3,59,105,201,0,48,198,221,62,3,147,41,192,33,60,45,
-214,88,224,1,204,216,217,189,192,255,1,23,181,113,189,3,128,159,96,2,207,188,41,
-81,55,0,55,2,67,245,87,20,66,8,33,196,190,166,43,45,161,21,192,121,238,53,110,
-4,190,237,46,95,226,238,11,226,132,128,207,23,198,209,190,227,62,12,120,239,
-223,66,4,226,7,132,91,105,29,224,234,54,190,91,91,117,247,169,144,58,94,208,198,
-119,27,141,201,36,144,233,179,249,175,121,152,239,119,109,14,168,151,9,250,235,
-11,33,132,16,162,175,136,80,128,47,184,215,152,11,252,7,45,121,67,195,136,184,
-226,114,86,22,34,52,2,76,181,142,219,138,177,24,126,30,88,76,122,116,190,205,35,
-238,246,143,129,111,2,159,1,78,6,238,178,222,115,77,7,69,40,192,167,3,142,43,0,
-190,154,225,187,253,193,250,108,151,2,199,185,175,213,25,174,249,55,119,251,109,
-110,221,78,192,88,148,207,3,214,185,251,254,170,191,190,16,66,8,33,250,138,8,
-125,150,22,139,99,21,38,216,200,27,15,250,116,27,239,29,159,133,8,245,11,194,51,
-173,109,3,173,237,135,251,182,123,179,97,157,18,112,174,31,186,251,103,228,65,
-132,134,29,23,246,221,74,104,177,98,158,225,219,119,86,200,185,134,146,217,106,
-234,149,184,254,250,66,8,33,132,232,43,34,116,91,6,81,180,173,19,68,168,237,114,
-142,132,124,191,195,172,237,253,66,206,23,109,199,53,199,231,240,217,38,132,124,
-183,67,51,124,182,254,33,215,60,36,75,17,250,156,254,250,130,14,252,225,133,16,
-66,136,158,68,5,198,13,15,240,47,192,207,220,229,3,9,31,19,218,17,218,74,251,4,
-45,227,70,193,184,186,253,196,48,1,78,197,121,254,76,131,173,109,227,66,142,
-221,99,45,251,103,137,154,18,242,158,247,105,153,114,245,120,90,79,35,27,193,88,
-127,207,209,223,81,72,132,10,33,132,232,75,120,185,62,107,104,201,19,26,22,21,
-30,1,142,2,78,196,140,211,244,56,209,218,22,205,32,206,142,2,10,221,243,28,227,
-19,116,81,75,232,253,201,93,254,61,38,72,106,50,102,28,234,124,96,61,102,142,
-251,255,12,232,167,63,99,125,22,15,111,219,231,8,182,172,126,232,190,94,143,25,
-171,250,21,204,44,72,65,98,243,35,224,53,119,249,65,96,182,43,136,103,99,198,
-138,122,140,161,37,71,109,35,176,212,122,207,191,3,71,96,172,170,167,2,119,98,
-134,66,188,169,191,162,16,66,8,33,246,37,65,238,248,195,59,241,122,215,208,226,
-66,190,143,150,41,79,131,56,157,182,221,202,179,172,227,63,29,176,255,135,192,
-156,128,237,231,91,239,27,75,230,161,2,59,104,29,77,126,65,22,159,237,135,1,223,
-233,87,33,231,183,215,143,178,142,63,22,99,217,244,191,167,218,183,110,143,89,
-221,15,120,181,141,207,246,27,253,245,69,24,178,132,10,33,132,232,44,250,99,82,
-255,28,68,240,12,125,131,49,214,179,241,24,107,101,62,167,31,245,44,161,181,238,
-185,235,8,119,149,87,17,110,37,5,147,51,211,158,198,115,15,176,203,90,111,194,
-204,81,255,190,239,60,13,192,118,107,253,29,76,84,253,34,247,88,199,61,102,13,
-240,35,76,100,249,198,0,241,222,144,225,179,37,8,78,192,127,37,176,194,125,111,
-3,38,50,255,44,90,102,168,218,65,250,248,216,149,24,183,250,159,221,227,27,49,
-51,37,125,222,250,78,245,192,219,190,122,248,103,224,251,192,63,48,193,77,73,
-247,59,255,17,99,125,157,163,219,64,8,33,132,16,93,73,20,51,30,240,25,76,186,30,
-47,81,186,87,26,129,39,220,125,171,128,171,8,79,36,159,11,151,96,92,210,253,
-129,59,48,174,110,33,132,16,66,8,209,203,233,15,44,35,220,77,219,136,73,223,227,
-173,175,199,88,9,133,16,125,132,2,85,129,16,66,136,78,192,139,142,14,163,200,
-183,94,26,176,77,8,209,139,209,152,80,33,132,16,157,65,28,227,102,207,150,237,
-192,187,170,54,33,36,66,133,16,66,136,142,208,12,252,5,147,34,41,27,193,186,146,
-244,32,30,33,132,16,66,8,33,114,98,127,224,113,218,78,49,84,13,124,86,213,37,68,
-223,66,99,66,133,16,162,231,16,201,114,91,119,161,26,227,146,63,173,141,227,118,
-0,175,176,111,188,115,78,150,219,132,16,121,70,238,120,33,132,232,57,216,214,
-195,160,109,221,81,60,173,116,69,102,38,30,217,7,245,151,169,30,133,16,66,8,33,
-68,22,68,186,113,217,15,120,137,204,238,248,67,247,193,231,18,66,8,33,132,16,
-189,156,123,49,51,233,4,9,208,42,85,143,16,125,19,185,227,133,16,66,116,54,47,
-96,102,76,10,226,9,85,143,16,125,19,185,36,132,16,162,111,180,237,251,178,189,
-63,16,51,183,248,254,1,251,62,135,25,55,218,157,81,240,146,238,17,209,9,247,
-136,42,92,8,33,122,103,199,154,169,147,141,236,131,190,224,53,224,83,190,109,
-123,129,114,76,158,208,238,214,137,58,109,108,151,24,213,61,210,215,133,102,135,
-239,17,165,104,18,66,136,222,221,177,70,124,29,235,190,178,0,61,27,32,66,255,
-228,118,80,251,122,104,152,19,80,7,118,7,235,4,28,231,88,117,39,33,170,123,164,
-47,8,208,188,223,35,18,161,66,8,209,59,59,215,108,163,195,219,178,12,229,139,
-167,129,249,190,109,191,239,6,253,144,147,97,57,25,208,209,58,86,71,43,33,170,
-123,164,175,8,208,78,185,71,36,66,133,16,162,231,119,174,65,29,171,103,93,140,
-250,150,131,58,218,72,23,116,176,27,128,53,192,100,119,253,17,140,139,190,168,
-27,117,174,126,139,142,29,209,31,180,108,91,124,36,68,117,143,244,5,1,154,215,
-123,68,99,28,132,16,162,247,116,174,81,95,7,107,151,8,16,179,246,117,117,39,27,
-1,198,0,71,96,198,130,254,3,248,40,11,225,230,116,98,159,229,132,116,174,73,
-171,19,77,88,235,201,128,142,54,232,92,66,247,200,190,18,138,61,234,30,145,8,21,
-66,136,158,223,185,70,124,29,103,204,234,88,99,214,122,44,67,71,219,215,12,20,
-126,177,232,239,56,147,110,231,234,117,176,113,223,118,251,56,137,80,221,35,186,
-71,114,184,71,228,142,23,66,136,222,211,185,122,165,192,237,68,175,3,190,14,
-148,168,218,178,226,73,224,167,192,86,183,67,77,184,175,113,183,94,189,109,184,
-175,94,221,59,1,175,66,247,72,111,189,71,110,12,185,71,98,64,115,123,238,145,
-152,234,83,8,33,122,92,231,106,119,172,118,231,26,195,140,177,188,22,120,24,56,
-6,40,84,181,101,205,56,224,107,110,61,190,78,139,117,44,44,98,218,65,65,43,
-186,71,250,238,61,242,15,87,204,103,26,71,155,204,116,143,104,198,36,33,132,232,
-185,29,173,191,115,157,0,60,0,124,91,85,148,51,81,224,76,224,20,140,117,172,216,
-45,253,92,177,82,64,107,215,109,190,93,181,95,2,238,3,182,0,245,152,49,180,155,
-129,101,192,52,253,68,186,71,186,193,61,114,6,240,47,64,127,171,20,249,238,143,
-72,91,247,136,68,168,16,66,244,188,78,21,210,93,139,49,183,241,95,4,156,108,
-191,105,250,244,233,206,214,173,91,113,28,167,91,149,68,34,225,120,203,205,205,
-205,77,13,13,13,117,53,53,53,187,234,234,234,118,215,212,212,236,170,173,173,
-173,174,175,175,223,211,216,216,216,96,189,39,105,191,207,94,118,12,237,253,12,
-201,101,203,150,57,21,21,21,254,186,30,133,113,37,150,90,66,180,95,128,16,13,75,
-233,147,43,251,1,127,196,228,79,157,14,140,182,174,61,22,152,137,177,222,9,221,
-35,125,245,30,17,66,8,177,143,58,216,136,213,161,22,186,13,126,9,102,58,204,95,
-224,6,13,20,22,22,58,55,222,120,163,35,178,163,169,169,201,89,176,96,129,29,253,
-27,7,150,2,167,1,95,0,142,5,38,1,135,3,7,3,195,48,51,61,13,112,59,95,207,2,100,
-71,89,231,98,93,250,139,245,25,154,92,193,116,150,251,25,230,0,15,210,246,236,
-82,195,72,143,98,110,15,29,121,175,238,17,221,35,237,190,71,20,152,36,132,16,
-61,207,194,227,117,182,158,117,231,66,224,155,222,193,179,103,207,102,193,130,
-5,170,181,44,41,44,44,228,208,67,15,181,55,197,128,145,64,25,45,30,67,59,234,
-215,11,194,136,147,121,134,157,246,136,185,153,110,103,142,123,141,51,48,65,32,
-54,75,104,61,235,148,208,61,210,99,239,17,185,227,133,16,162,231,117,182,254,
-252,134,115,188,157,179,102,205,226,134,27,110,80,45,181,147,162,162,34,134,14,
-29,106,111,122,153,22,55,99,127,210,221,140,158,69,39,159,238,198,175,89,203,
-191,15,16,160,30,255,208,175,165,123,164,183,220,35,242,207,11,33,68,247,239,80,
-237,87,59,197,76,1,48,20,216,4,80,94,94,206,174,93,187,84,99,57,80,93,93,77,121,
-121,185,183,218,128,137,158,174,3,106,221,82,227,150,58,76,176,80,3,208,136,73,
-73,211,76,122,110,196,92,114,134,238,0,14,112,151,103,3,247,228,248,85,134,1,
-219,115,236,227,59,242,94,221,35,186,71,218,125,143,200,29,47,132,16,61,171,179,
-245,231,58,156,225,237,156,53,107,150,106,40,71,150,46,93,106,175,174,195,88,
-119,18,152,177,153,126,235,78,88,74,154,142,48,200,90,110,143,74,114,218,177,47,
-146,199,247,234,30,209,61,210,225,123,68,238,120,33,132,232,25,29,171,253,106,
-119,178,169,94,117,238,220,185,170,169,28,185,243,206,59,237,213,13,110,167,90,
-72,122,164,175,61,179,78,174,1,72,97,236,182,150,247,215,47,162,123,164,47,220,
-35,178,132,10,33,68,247,239,88,33,56,233,118,5,112,8,192,240,225,195,25,63,126,
-188,106,44,7,170,170,170,216,184,113,163,183,90,143,113,41,250,115,130,70,3,126,
-147,124,178,10,248,162,187,252,69,178,119,199,255,179,111,189,28,120,36,100,95,
-62,223,171,123,68,247,72,135,239,17,137,80,33,132,232,25,157,108,80,7,59,211,
-59,104,206,156,57,170,169,28,89,178,100,137,189,250,54,45,214,156,174,204,113,
-184,212,18,161,95,197,68,194,255,37,224,184,35,49,174,80,143,23,124,251,135,101,
-216,231,167,35,239,213,61,162,123,164,195,247,136,2,147,132,16,162,123,119,174,
-94,59,237,89,27,10,92,11,68,17,240,42,38,77,10,91,182,108,97,244,232,209,170,
-177,28,24,59,118,44,91,182,108,241,86,31,2,170,48,129,22,123,220,178,219,90,254,
-132,150,192,139,189,152,241,112,222,28,218,29,9,76,138,2,79,209,146,166,169,9,
-248,21,38,74,190,22,147,28,252,116,224,28,50,79,51,217,215,2,147,116,143,244,
-224,123,68,150,80,33,132,232,190,157,171,191,163,181,173,60,99,188,206,117,204,
-152,49,234,92,115,164,178,178,50,213,185,198,98,177,134,68,34,81,107,9,72,135,
-244,220,135,73,171,56,1,165,35,36,129,47,3,191,197,228,8,45,2,46,115,139,208,61,
-210,43,239,17,5,38,9,33,68,247,239,100,237,96,11,47,1,247,5,222,65,23,95,124,
-177,106,42,71,22,47,94,156,90,78,36,18,155,173,78,53,225,43,254,206,53,25,208,
-185,118,84,136,238,193,204,91,127,42,112,63,80,73,139,37,233,93,76,254,208,47,
-235,87,211,61,210,91,238,17,185,227,133,16,162,251,118,174,65,110,198,34,183,
-188,142,201,127,200,246,237,219,25,54,108,152,106,44,7,134,14,29,234,236,216,
-177,195,171,231,71,49,233,145,60,55,227,110,171,120,110,198,90,140,171,209,206,
-129,24,183,58,95,232,217,83,95,234,30,17,93,118,143,200,29,47,132,16,221,175,99,
-13,234,104,237,148,51,135,123,157,235,132,9,19,186,188,115,141,199,227,236,222,
-189,155,253,246,219,143,194,194,194,30,91,209,235,215,175,199,234,92,189,36,219,
-222,148,131,153,138,109,237,241,35,241,25,206,32,204,28,227,199,99,102,215,89,
-11,60,11,108,237,224,125,210,237,238,145,222,66,103,223,35,114,199,11,33,68,
-247,196,78,246,140,213,201,198,216,199,121,15,87,175,94,205,136,17,35,248,251,
-223,255,222,163,43,216,151,247,112,139,175,115,109,246,21,59,176,34,65,186,203,
-81,226,51,59,38,3,63,4,190,7,124,7,147,134,106,53,240,75,224,68,204,60,228,185,
-8,209,110,119,143,244,22,58,251,30,145,8,21,66,136,238,69,36,68,136,218,150,
-158,115,189,3,58,58,3,140,227,180,95,59,69,34,17,190,240,133,47,48,114,228,200,
-30,93,209,203,150,45,179,87,43,173,14,182,153,112,11,143,29,225,27,52,230,77,
-132,51,9,152,226,138,68,239,255,61,4,152,139,177,136,190,11,252,58,11,65,26,22,
-144,212,109,238,145,222,66,103,223,35,114,199,11,33,68,247,20,160,246,54,219,
-205,56,9,119,138,199,169,83,167,50,120,240,224,142,93,48,210,254,208,128,163,
-143,62,154,39,158,120,34,116,127,34,145,112,98,177,88,183,142,57,88,189,122,53,
-31,127,252,177,183,186,7,147,78,198,182,238,52,89,197,182,244,216,145,192,97,
-157,171,4,105,56,153,140,95,229,192,108,183,212,96,220,245,15,3,43,92,1,148,233,
-190,233,178,123,36,30,143,19,141,70,137,70,115,183,227,181,117,143,36,147,73,18,
-137,196,62,29,238,210,21,247,136,44,161,66,8,209,125,197,104,144,155,241,34,239,
-160,75,46,185,164,213,27,155,154,154,248,211,159,254,196,219,111,191,205,134,13,
-27,184,255,254,251,89,182,108,25,111,188,241,6,0,59,118,236,224,161,135,30,226,
-158,123,238,97,229,202,149,52,55,55,167,189,127,199,142,29,60,253,244,211,252,
-246,183,191,229,215,191,254,53,79,60,241,4,213,213,213,105,157,227,115,207,61,
-199,203,47,191,156,218,246,202,43,175,240,167,63,253,137,234,234,106,254,248,
-199,63,114,239,189,247,70,158,124,242,73,26,27,27,219,252,162,142,227,176,114,
-229,74,150,45,91,198,111,126,243,27,254,247,127,255,151,143,62,250,8,128,87,95,
-125,149,251,238,187,47,237,248,170,170,42,238,185,231,30,54,109,218,4,152,220,
-143,247,222,123,47,117,117,117,169,99,106,107,107,249,221,239,126,199,154,53,
-107,66,175,123,199,29,119,216,171,239,184,29,166,215,137,250,59,87,219,194,19,
-39,60,31,168,196,103,102,214,146,253,248,207,1,192,231,128,159,1,155,48,174,96,
-219,109,159,243,61,2,102,172,227,184,113,227,88,178,100,9,55,222,120,35,163,71,
-143,166,127,255,254,156,118,218,105,188,253,246,219,169,227,22,45,90,68,36,18,
-97,211,166,77,92,112,193,5,20,21,21,49,123,246,108,154,154,154,168,170,170,226,
-63,254,227,63,24,50,100,8,253,250,245,227,132,19,78,224,165,151,94,106,117,173,
-167,159,126,154,163,142,58,138,126,253,250,241,217,207,126,150,45,91,182,112,
-248,225,135,71,102,204,48,83,218,127,248,225,135,28,119,220,113,124,235,91,223,
-98,201,146,37,76,152,48,129,88,44,198,186,117,235,216,188,121,51,23,92,112,1,7,
-31,124,48,133,133,133,12,25,50,132,239,124,231,59,105,231,127,229,149,87,168,
-168,168,96,197,138,21,92,119,221,117,140,24,49,130,210,210,82,230,205,155,71,34,
-145,96,253,250,245,156,121,230,153,20,23,23,51,106,212,40,30,123,236,177,172,
-126,0,221,35,66,8,209,247,196,167,215,153,22,96,130,55,250,187,157,238,96,76,50,
-241,58,175,113,175,171,171,115,252,84,85,85,57,163,71,143,118,206,58,235,44,103,
-246,236,217,206,231,63,255,121,103,240,224,193,206,105,167,157,230,252,245,175,
-127,117,230,207,159,239,156,114,202,41,206,168,81,163,156,81,163,70,57,43,87,
-174,76,189,183,161,161,193,185,233,166,155,156,99,143,61,214,57,230,152,99,156,
-137,19,39,58,195,134,13,115,174,185,230,26,167,182,182,214,113,28,199,217,187,
-119,175,51,101,202,20,103,222,188,121,169,247,157,126,250,233,206,144,33,67,156,
-107,174,185,198,57,245,212,83,157,67,15,61,212,25,48,96,128,179,120,241,98,39,
-19,13,13,13,206,245,215,95,239,76,154,52,201,57,234,168,163,156,201,147,39,59,
-227,198,141,115,150,46,93,234,56,142,227,44,90,180,200,1,156,191,255,253,239,
-142,227,56,78,99,99,163,51,111,222,60,103,228,200,145,206,139,47,190,232,56,142,
-227,60,253,244,211,78,36,18,113,238,191,255,254,212,121,111,186,233,38,103,232,
-208,161,206,138,21,43,66,175,93,90,90,106,91,104,86,0,191,1,110,5,126,4,124,151,
-255,223,222,185,7,69,117,166,105,252,105,26,154,75,27,65,110,42,200,69,140,130,
-163,209,68,133,104,28,53,70,217,138,110,149,151,100,116,140,26,209,108,118,172,
-217,100,29,77,197,168,152,41,181,38,147,90,53,168,227,136,226,168,41,43,86,225,
-154,184,185,176,206,24,163,51,171,155,139,51,174,32,23,35,40,70,209,4,12,42,42,
-183,230,214,221,239,254,209,125,14,167,155,110,110,162,180,225,249,85,125,197,
-233,115,235,230,116,63,253,188,253,126,231,253,62,224,95,1,204,129,109,22,163,
-177,0,134,1,136,133,109,182,152,203,246,192,232,146,189,57,119,57,90,93,52,105,
-71,179,182,210,228,62,207,161,108,191,216,193,253,149,99,46,182,243,255,108,
-171,149,219,3,23,233,100,107,132,109,38,169,68,123,192,233,211,81,141,136,136,
-252,237,111,127,147,190,125,251,74,108,108,172,60,255,252,243,146,145,145,33,
-169,169,169,2,64,102,207,158,45,102,179,89,68,68,150,46,93,42,70,163,81,18,18,
-18,228,149,87,94,145,140,140,12,57,121,242,164,92,186,116,73,134,12,25,34,49,
-49,49,178,113,227,70,73,79,79,151,81,163,70,73,66,66,130,228,229,229,169,207,
-115,228,200,17,1,32,83,167,78,149,125,251,246,201,146,37,75,100,220,184,113,2,
-64,54,110,220,40,34,34,223,125,247,157,196,197,197,73,112,112,176,76,158,60,89,
-182,111,223,46,27,55,110,148,234,234,106,73,75,75,147,9,19,38,200,214,173,91,
-101,255,254,253,242,226,139,47,10,0,121,231,157,119,212,231,200,202,202,146,176,
-176,48,137,141,141,149,5,11,22,200,190,125,251,100,222,188,121,226,239,239,47,
-139,22,45,146,105,211,166,201,234,213,171,37,61,61,93,194,195,195,37,44,44,76,
-172,86,171,180,197,125,104,164,175,253,189,48,218,191,195,124,224,56,151,60,71,
-102,34,132,144,71,32,8,245,3,224,15,160,55,128,16,0,51,21,83,24,63,126,188,75,
-227,184,118,237,154,24,12,6,73,74,74,146,131,7,15,74,97,97,161,236,219,183,79,
-252,252,252,36,41,41,73,54,109,218,36,249,249,249,114,252,248,113,137,136,136,
-144,13,27,54,168,134,107,50,153,228,147,79,62,145,172,172,44,41,42,42,146,243,
-231,207,203,186,117,235,164,111,223,190,146,147,147,163,6,161,253,250,245,147,
-93,187,118,169,207,25,29,29,45,161,161,161,178,105,211,38,201,205,205,149,115,
-231,206,73,98,98,162,36,38,38,182,106,114,169,169,169,226,231,231,39,219,183,
-111,151,188,188,60,185,112,225,130,28,60,120,80,254,254,247,191,139,136,72,109,
-109,173,140,28,57,82,146,147,147,69,68,100,199,142,29,18,21,21,37,127,254,243,
-159,213,115,52,54,54,202,47,127,249,75,121,242,201,39,85,211,143,140,140,148,
-157,59,119,186,125,222,175,191,254,90,53,215,94,189,122,85,2,56,8,96,15,128,45,
-0,214,1,88,14,91,151,240,44,0,147,1,140,134,173,218,58,234,62,130,39,182,174,
-107,102,251,123,166,135,109,40,166,14,105,68,68,228,208,161,67,2,64,22,47,94,44,
-213,213,213,234,103,233,237,183,223,150,152,152,24,57,119,238,156,136,136,140,
-31,63,94,0,56,252,160,50,155,205,50,107,214,44,121,252,241,199,165,188,188,92,
-93,159,157,157,45,189,122,245,146,244,244,116,245,243,27,20,20,36,51,103,206,
-116,120,238,153,51,103,10,0,249,226,139,47,68,68,36,63,63,95,0,72,114,114,178,
-252,240,195,15,14,251,154,76,166,22,175,61,49,49,81,198,142,29,171,62,254,211,
-159,254,36,0,100,253,250,245,210,208,208,32,34,34,183,111,223,150,208,208,80,
-233,219,183,175,28,59,118,76,221,55,61,61,93,124,125,125,229,252,249,243,173,
-106,243,62,53,18,102,127,63,2,236,239,143,183,83,16,74,8,33,196,67,131,80,229,
-203,90,201,240,4,0,8,132,109,184,153,79,21,99,200,204,204,116,105,30,103,207,
-158,21,0,106,54,81,68,228,198,141,27,18,24,24,232,144,189,172,171,171,147,25,51,
-102,200,111,126,243,27,213,184,92,81,82,82,34,253,250,245,147,83,167,78,169,231,
-242,243,243,83,141,205,108,54,11,0,153,63,127,190,195,113,111,189,245,150,60,
-241,196,19,210,216,216,232,242,188,255,248,199,63,68,167,211,201,182,109,219,92,
-110,87,50,53,239,191,255,190,0,144,205,155,55,203,192,129,3,37,45,45,173,197,
-190,95,124,241,133,248,249,249,73,90,90,154,196,199,199,203,107,175,189,230,246,
-121,69,68,230,207,159,175,13,104,206,0,56,0,96,23,128,77,0,82,1,252,27,108,115,
-142,79,135,173,75,120,36,128,199,1,68,48,0,244,152,102,69,243,152,160,29,210,
-136,136,72,90,90,154,248,251,251,75,118,118,182,195,250,163,71,143,74,96,96,160,
-250,121,143,141,141,149,113,227,198,181,248,188,5,6,6,74,86,86,150,67,70,177,
-164,164,68,70,141,26,37,107,214,172,17,17,145,119,222,121,71,244,122,189,148,
-149,149,57,28,255,246,219,111,11,0,185,121,243,166,67,182,244,208,161,67,110,95,
-111,67,67,131,84,84,84,72,125,125,189,36,39,39,75,82,82,146,195,143,185,168,168,
-40,41,46,46,86,215,221,185,115,71,226,226,226,36,37,37,197,225,60,7,14,28,16,
-131,193,32,151,46,93,106,53,8,189,79,141,4,195,118,59,133,191,253,253,209,187,
-203,130,242,158,80,66,8,241,156,0,212,85,70,84,185,207,77,15,219,220,225,0,128,
-57,115,230,184,60,201,249,243,231,17,23,23,135,9,19,38,168,235,76,38,19,116,58,
-29,102,205,154,229,176,238,214,173,91,24,48,96,0,188,189,155,107,84,15,31,62,
-140,5,11,22,224,185,231,158,195,196,137,19,49,103,206,28,24,12,6,4,4,4,0,0,10,
-10,10,208,171,87,47,196,196,196,168,143,1,64,185,191,77,161,180,180,20,65,65,
-65,110,11,43,50,50,50,16,17,17,129,101,203,150,185,190,24,246,98,144,37,75,150,
-224,103,63,251,25,126,255,251,223,99,250,244,233,120,237,181,215,90,236,155,156,
-156,140,201,147,39,99,195,134,13,136,143,143,199,187,239,190,219,106,65,199,71,
-31,125,164,125,120,13,205,197,22,218,2,139,38,180,172,2,182,240,99,234,49,220,
-237,172,70,76,38,19,46,93,186,132,201,147,39,35,58,58,218,97,91,67,67,3,124,124,
-124,16,16,16,128,43,87,174,160,178,178,18,41,41,41,14,251,156,59,119,14,189,123,
-247,198,176,97,195,28,138,150,172,86,43,154,154,154,224,231,231,7,0,200,204,204,
-196,207,127,254,115,244,239,223,223,225,248,198,198,70,132,134,134,162,79,159,
-62,48,155,205,40,40,40,64,66,66,2,70,143,30,237,176,159,197,98,65,122,122,58,
-18,18,18,224,239,239,143,144,144,16,248,249,249,225,248,241,227,136,143,143,7,
-0,84,85,85,225,242,229,203,120,230,153,103,16,22,22,166,30,219,212,212,132,
-242,242,114,36,38,38,58,156,179,176,176,16,62,62,62,24,60,120,112,171,23,247,62,
-53,162,189,85,163,213,145,35,24,132,18,66,136,231,6,165,90,147,157,100,207,252,
-32,57,57,217,33,112,212,146,147,147,131,129,3,7,58,24,95,89,89,25,124,125,125,
-17,17,17,161,174,171,169,169,65,89,89,25,6,14,28,168,86,249,110,216,176,1,111,
-190,249,38,154,154,154,48,118,236,88,76,157,58,21,209,209,209,48,26,141,8,14,14,
-6,0,156,57,115,6,125,250,244,81,231,225,206,201,201,129,193,96,64,82,82,146,
-195,235,200,206,206,198,208,161,67,221,254,115,185,185,185,152,52,105,82,155,
-213,249,165,165,165,40,45,45,69,85,85,21,38,76,152,0,95,95,223,22,251,84,86,86,
-226,250,245,235,168,170,170,194,248,241,227,209,187,119,111,183,231,59,113,226,
-132,90,140,229,239,239,127,199,201,64,93,85,252,106,205,213,202,143,165,71,80,
-11,96,107,103,53,82,83,83,131,203,151,47,99,208,160,65,8,10,10,82,215,155,205,
-102,228,230,230,162,95,191,126,136,142,142,70,81,81,17,170,171,171,49,110,220,
-56,135,227,127,248,225,7,68,70,70,170,63,204,20,170,171,171,113,235,214,45,85,
-27,101,101,101,45,2,75,0,184,116,233,18,18,18,18,160,211,233,96,177,88,80,80,
-80,128,136,136,8,245,135,157,194,242,229,203,177,124,249,114,76,158,60,25,7,15,
-30,196,137,19,39,112,248,240,97,248,248,248,168,231,189,119,239,30,174,92,185,
-130,248,248,120,135,207,253,245,235,215,97,181,90,91,4,155,57,57,57,234,235,123,
-128,26,105,247,200,17,12,66,9,33,196,179,2,79,231,191,138,201,46,81,118,122,253,
-245,215,221,158,32,47,47,15,209,209,209,14,193,90,126,126,62,250,247,239,239,
-144,41,49,153,76,168,174,174,86,103,146,41,43,43,67,90,90,26,222,120,227,13,236,
-217,179,7,107,215,174,197,170,85,171,16,22,22,134,136,136,8,53,8,205,206,206,70,
-255,254,253,213,243,103,103,103,227,177,199,30,67,120,120,184,195,235,184,120,
-241,34,70,140,24,225,242,53,54,54,54,162,174,174,174,205,89,108,106,106,106,48,
-127,254,124,12,29,58,20,79,63,253,52,62,254,248,227,22,251,52,53,53,97,197,138,
-21,48,24,12,120,246,217,103,145,153,153,217,234,57,119,236,216,161,46,215,213,
-213,93,66,115,197,111,107,77,59,246,161,82,148,164,45,76,114,101,180,130,142,
-143,33,218,90,247,51,238,243,28,106,12,212,193,253,209,193,255,179,61,247,115,
-118,20,43,108,85,245,255,9,219,152,162,19,0,164,119,86,35,53,53,53,184,122,245,
-42,252,253,253,161,215,235,213,245,245,245,245,56,116,232,16,158,122,234,41,
-132,135,135,227,194,133,11,208,235,245,24,52,104,80,243,11,177,90,97,54,155,161,
-215,235,91,252,128,202,203,203,131,213,106,69,66,66,2,76,38,19,172,86,107,139,
-31,77,215,175,95,199,183,223,126,171,102,81,205,102,51,138,138,138,16,21,21,
-229,16,52,223,190,125,27,59,118,236,192,250,245,235,177,107,215,46,204,157,59,
-23,83,166,76,65,67,67,3,204,102,179,26,132,86,86,86,226,198,141,27,136,141,141,
-117,120,61,231,206,157,67,159,62,125,16,23,23,215,34,8,29,53,106,212,131,214,
-136,171,1,234,93,126,134,25,132,18,66,136,231,4,159,206,166,170,67,115,55,227,
-63,41,59,204,152,49,195,237,137,138,138,138,48,100,200,144,22,198,51,96,192,0,
-135,32,244,218,181,107,48,26,141,8,13,13,85,143,51,155,205,24,55,110,28,2,3,3,
-97,52,26,81,92,92,140,140,140,12,12,30,60,88,205,24,229,228,228,56,4,151,103,
-206,156,193,83,79,61,229,240,124,5,5,5,208,233,116,24,62,124,184,26,116,150,151,
-151,163,177,177,17,0,96,48,24,96,52,26,241,229,151,95,182,140,54,172,86,245,239,
-234,213,171,241,221,119,223,225,195,15,63,68,106,106,42,142,28,57,130,211,167,
-79,59,236,191,123,247,110,124,250,233,167,200,200,200,192,150,45,91,144,151,
-151,215,106,32,250,217,103,159,105,31,126,223,70,134,199,217,92,173,176,205,250,
-243,4,108,149,192,67,237,205,249,158,55,47,23,77,215,142,230,213,74,211,221,231,
-57,148,237,241,29,220,95,57,38,30,238,39,79,104,111,91,129,230,129,234,219,162,
-26,192,87,176,205,172,52,8,182,130,151,249,0,246,194,54,39,124,13,90,118,197,
-183,75,35,213,213,213,248,254,251,239,81,92,92,140,138,138,10,117,253,158,61,
-123,80,86,86,134,87,95,125,21,128,173,235,122,240,224,193,14,193,161,151,151,23,
-34,35,35,113,225,194,5,84,85,85,57,232,41,53,53,21,211,166,77,195,152,49,99,16,
-16,16,0,127,127,127,156,60,121,210,225,185,51,50,50,80,92,92,140,145,35,71,170,
-65,232,213,171,87,145,144,144,224,176,95,73,73,9,0,96,192,128,1,234,186,91,183,
-110,97,243,230,205,16,17,53,144,188,119,239,30,26,26,26,90,116,249,43,65,168,54,
-128,174,170,170,66,69,69,69,11,189,62,0,141,180,123,18,7,14,86,79,8,33,158,23,
-144,58,155,252,243,202,198,153,51,103,186,61,176,178,178,18,55,111,222,116,48,
-52,17,65,65,65,1,146,146,146,212,172,143,136,32,55,55,23,17,17,17,8,9,9,1,0,36,
-36,36,160,174,174,14,235,214,173,67,74,74,10,242,243,243,145,153,153,137,208,
-208,80,245,190,57,17,193,181,107,215,48,114,228,72,245,252,197,197,197,45,178,
-78,103,207,158,133,143,143,15,134,13,27,6,192,54,222,96,106,106,42,114,115,115,
-213,238,193,133,11,23,98,197,138,21,152,55,111,30,126,241,139,95,224,222,189,
-123,216,189,123,55,62,255,252,115,132,132,132,224,192,129,3,216,191,127,63,142,
-28,57,130,168,168,40,4,4,4,32,46,46,14,31,125,244,17,18,19,19,225,237,237,141,
-111,190,249,6,171,86,173,194,150,45,91,144,152,152,8,157,78,135,169,83,167,98,
-255,254,253,152,61,123,54,252,253,253,29,94,87,86,86,150,186,220,167,79,159,219,
-119,239,222,213,222,207,230,202,92,181,6,219,150,185,114,252,195,246,103,53,221,
-5,162,119,0,100,193,54,157,231,89,123,160,217,218,15,181,14,107,4,0,238,220,
-185,3,47,47,47,156,62,125,26,111,190,249,38,38,78,156,136,147,39,79,34,51,51,19,
-107,215,174,197,196,137,19,1,216,198,160,29,58,116,104,139,65,233,167,78,157,
-138,189,123,247,98,241,226,197,72,73,73,65,69,69,5,210,211,211,17,18,18,130,223,
-254,246,183,234,254,243,230,205,195,31,254,240,7,188,252,242,203,152,50,101,10,
-142,30,61,170,254,136,26,49,98,4,116,58,29,110,223,190,141,170,170,42,245,30,79,
-133,97,195,134,193,215,215,23,235,215,175,71,77,77,13,106,107,107,241,241,199,
-31,163,188,188,220,225,86,0,229,86,27,231,94,133,252,252,124,68,69,69,57,100,
-71,149,76,237,147,79,62,233,246,218,80,35,132,16,210,51,3,79,197,76,149,241,65,
-3,96,27,107,47,28,192,255,42,88,146,182,45,0,0,11,24,73,68,65,84,95,234,199,
-143,31,119,91,209,122,226,196,9,241,247,247,151,130,130,2,135,42,243,128,128,0,
-217,190,125,187,186,206,98,177,200,220,185,115,229,133,23,94,112,216,111,239,
-222,189,18,20,20,36,70,163,81,230,206,157,43,151,47,95,22,131,193,160,86,25,43,
-149,247,223,124,243,141,136,136,92,190,124,89,244,122,189,124,242,201,39,14,175,
-227,87,191,250,149,132,132,132,168,143,23,46,92,40,182,24,214,145,173,91,183,74,
-76,76,140,120,121,121,73,88,88,152,44,94,188,88,204,102,179,156,61,123,86,124,
-125,125,37,45,45,205,161,250,120,231,206,157,98,52,26,229,202,149,43,82,90,90,
-42,189,123,247,150,87,95,125,85,44,22,139,186,207,169,83,167,4,128,252,229,47,
-127,105,241,124,201,201,201,90,115,252,18,192,7,0,118,2,248,15,0,107,96,171,248,
-125,9,182,138,223,241,0,70,216,179,112,218,138,95,63,180,81,241,75,220,242,44,
-128,255,179,7,45,98,15,92,110,162,125,115,199,187,211,72,80,71,52,98,54,155,37,
-61,61,93,70,143,30,45,31,126,248,161,76,154,52,73,12,6,131,196,199,199,59,12,
-195,84,94,94,46,195,135,15,151,223,253,238,119,234,16,102,90,142,31,63,46,73,73,
-73,226,227,227,35,97,97,97,178,116,233,210,22,85,240,102,179,89,82,82,82,36,32,
-32,64,66,67,67,101,205,154,53,178,113,227,70,9,15,15,151,235,215,175,139,136,
-200,225,195,135,37,56,56,88,242,243,243,91,60,199,177,99,199,36,54,54,86,12,6,
-131,140,29,59,86,206,158,61,43,99,198,140,145,233,211,167,171,21,243,235,214,
-173,147,167,159,126,90,74,75,75,29,142,13,10,10,146,149,43,87,58,172,219,177,99,
-135,0,144,187,119,239,186,189,62,15,91,35,20,14,33,132,116,127,0,10,167,204,142,
-222,201,104,175,3,128,143,143,143,218,165,77,58,134,217,108,86,43,230,117,58,
-157,136,200,97,123,166,173,6,182,41,9,43,1,220,179,55,229,113,13,108,69,48,245,
-0,26,224,56,45,161,197,41,187,195,44,79,219,4,1,24,103,15,94,124,97,155,65,
-233,127,208,246,44,74,173,105,196,0,219,160,232,237,210,72,125,125,61,86,174,92,
-137,139,23,47,34,43,43,75,173,100,127,88,44,93,186,20,133,133,133,248,236,179,
-207,238,123,58,209,159,130,70,216,29,79,8,33,158,21,144,58,223,107,167,222,220,
-230,110,200,25,210,54,218,33,103,252,252,252,126,172,171,171,211,222,231,214,86,
-197,175,210,213,200,110,198,251,227,30,128,163,246,214,45,26,105,106,106,66,97,
-97,33,34,35,35,31,104,0,234,106,126,249,191,254,245,175,56,116,232,16,222,123,
-239,61,4,6,6,82,35,12,66,9,33,196,99,130,79,231,101,165,27,107,177,178,193,213,
-24,153,164,125,164,167,167,171,203,246,138,95,103,131,117,55,238,161,187,233,
-44,25,124,122,134,70,188,58,162,145,166,166,38,92,187,118,13,227,199,143,127,
-160,47,246,202,149,43,88,184,112,33,102,206,156,137,200,200,72,20,20,20,96,207,
-158,61,120,238,185,231,48,99,198,140,22,247,153,246,84,141,48,8,37,132,16,207,
-49,86,231,44,207,99,0,198,0,128,209,104,196,51,207,60,195,43,214,9,76,38,19,
-190,254,250,107,91,212,226,229,101,181,90,173,55,53,6,218,232,162,105,139,45,
-204,232,96,197,239,67,66,251,26,166,1,248,220,195,206,231,145,26,105,108,108,68,
-105,105,105,139,161,139,186,26,95,95,95,132,135,135,99,243,230,205,168,173,173,
-197,128,1,3,176,124,249,114,44,91,182,76,29,145,130,26,97,16,74,8,33,158,98,178,
-174,102,73,122,81,217,105,254,252,249,188,82,157,68,59,100,147,159,159,95,153,
-201,100,210,102,120,220,101,122,156,43,126,225,198,88,187,42,32,245,212,32,240,
-39,165,145,126,253,250,193,100,50,61,240,23,28,19,19,131,35,71,142,80,35,109,
-104,132,65,40,33,132,120,142,209,58,155,236,203,202,198,95,255,250,215,188,66,
-157,100,215,174,93,234,114,125,125,189,182,155,209,85,118,199,157,193,122,90,87,
-252,4,205,242,121,106,132,26,121,20,53,194,32,148,16,66,186,207,80,91,51,215,96,
-0,195,1,32,56,56,184,205,1,166,137,107,238,222,189,139,156,156,28,155,225,121,
-123,155,205,102,243,109,180,204,236,184,51,215,182,198,62,236,206,64,244,43,106,
-132,26,121,212,53,194,25,147,8,33,196,115,204,86,59,75,210,92,101,227,162,69,
-139,120,133,58,201,7,31,124,160,46,247,234,213,171,12,205,247,176,185,42,180,
-104,68,199,186,25,187,19,173,225,63,223,202,182,233,176,205,84,84,4,219,16,58,
-37,0,86,118,224,121,210,53,231,250,30,192,16,106,132,26,233,42,141,48,19,74,8,
-33,221,31,124,186,202,242,44,84,118,90,186,116,41,175,84,39,217,189,123,183,
-186,108,177,88,138,225,58,195,211,168,49,87,87,51,192,60,202,85,241,219,0,12,
-214,60,142,1,176,9,182,105,49,51,218,56,118,59,108,131,147,3,192,21,0,83,236,65,
-44,53,66,141,116,137,70,152,9,37,132,144,238,15,68,157,205,181,63,128,199,1,
-160,127,255,254,45,230,149,38,237,227,199,31,127,68,97,97,33,0,192,96,48,52,85,
-87,87,87,160,125,227,30,182,214,213,136,71,44,16,29,8,219,252,235,211,96,155,
-115,93,141,219,218,56,110,43,128,127,183,47,23,194,118,15,106,9,53,66,141,116,
-165,70,24,132,18,66,72,247,7,161,202,247,177,210,205,248,146,178,241,149,87,94,
-225,21,234,36,239,191,255,190,186,28,20,20,84,10,215,85,190,206,205,213,192,219,
-192,163,59,54,232,46,0,105,176,85,219,111,209,172,111,45,106,91,7,96,185,125,57,
-23,192,36,0,101,212,8,53,210,213,26,97,16,74,8,33,221,107,172,174,76,86,53,216,
-121,243,230,221,230,165,234,28,123,247,238,85,151,53,131,111,43,70,218,0,247,25,
-30,119,93,140,143,34,167,52,203,218,207,82,107,211,5,141,181,255,189,7,96,42,
-128,91,212,8,53,242,32,52,194,32,148,16,66,186,55,16,117,238,102,140,5,16,5,0,
-94,94,94,229,17,17,17,247,120,153,58,78,73,73,9,174,94,189,10,0,240,246,246,
-174,171,174,174,190,3,199,238,197,38,23,127,127,106,93,241,128,109,94,111,5,75,
-59,143,81,246,11,2,176,209,41,24,164,70,168,145,46,211,8,131,80,66,8,241,140,
-64,84,201,240,44,80,54,188,244,210,75,21,189,123,247,142,226,37,234,56,218,12,
-143,151,151,87,137,11,67,117,55,246,161,98,174,63,133,174,248,206,178,26,192,93,
-251,242,191,192,86,160,68,141,80,35,93,174,17,86,199,19,66,72,247,154,171,246,
-175,23,128,121,202,198,128,128,128,65,13,13,13,190,222,222,252,170,238,8,127,
-252,227,31,177,109,219,54,245,113,99,99,227,69,184,46,180,112,103,176,221,221,
-21,191,4,192,179,46,214,159,176,183,7,205,121,0,255,108,127,174,0,0,175,3,48,1,
-88,69,141,80,35,93,169,17,190,107,132,16,226,57,1,233,16,0,225,202,138,175,190,
-250,202,215,104,52,242,202,116,128,162,162,34,44,91,182,76,125,172,215,235,107,
-44,22,75,181,221,72,27,92,52,231,121,176,91,27,118,6,15,41,40,157,235,102,125,
-253,67,10,66,1,224,52,128,23,0,252,55,0,31,0,111,217,3,209,13,212,8,53,210,85,
-26,97,119,60,33,132,116,175,169,106,187,26,195,0,124,171,108,12,11,11,147,220,
-220,92,94,165,118,114,234,212,41,135,249,195,163,163,163,77,22,139,229,75,55,
-198,90,15,215,69,23,218,170,95,160,231,117,197,107,57,6,96,17,154,7,35,95,15,
-219,112,79,212,8,53,210,37,26,209,241,45,33,132,144,110,193,11,182,161,102,188,
-96,235,149,50,0,240,133,109,76,198,32,237,142,111,188,241,6,222,125,247,93,248,
-250,250,66,68,96,181,90,173,122,189,158,73,4,59,91,182,108,193,218,181,107,81,
-95,95,239,188,233,191,0,84,193,86,156,83,107,95,174,6,80,105,95,86,30,215,192,
-150,229,171,115,50,92,43,154,139,116,122,114,48,74,141,80,35,15,68,35,12,66,9,
-33,164,123,208,107,76,86,49,216,72,216,186,59,103,243,242,116,30,157,78,215,32,
-34,231,236,193,74,157,221,92,107,236,173,202,133,185,214,218,247,83,186,30,157,
-135,161,81,140,149,1,40,53,66,141,116,161,70,244,124,43,8,33,164,91,80,42,125,
-189,52,77,233,6,27,1,32,152,151,168,83,252,8,224,75,0,87,97,235,78,172,131,45,
-131,99,210,24,173,73,99,170,245,173,24,43,179,159,212,8,53,242,0,53,194,32,148,
-16,66,186,41,25,225,100,178,122,123,187,1,91,23,153,0,24,5,222,187,223,94,190,
-133,109,86,160,34,216,134,23,82,204,181,86,99,168,181,154,199,138,185,42,247,
-189,57,119,47,50,243,73,141,80,35,15,88,35,236,142,39,132,144,238,193,203,201,
-88,13,246,230,7,192,31,128,17,64,47,0,143,217,91,47,251,58,163,125,31,63,216,
-170,150,125,208,220,109,169,115,106,63,85,180,217,23,65,115,86,198,130,230,25,
-95,148,140,89,29,28,51,60,238,140,86,25,154,166,173,41,9,9,53,66,141,116,145,
-70,56,68,19,33,132,120,134,89,104,77,66,107,20,141,118,3,80,76,20,104,238,18,
-243,182,55,189,198,176,117,61,236,218,41,70,232,234,186,41,21,190,218,174,70,
-197,84,93,13,61,35,248,105,76,213,73,141,80,35,143,132,70,24,132,18,66,136,231,
-101,43,156,205,85,49,79,197,72,148,109,62,78,230,170,237,150,236,9,89,30,109,96,
-98,117,99,176,74,166,71,105,218,204,78,163,198,92,181,38,203,225,153,168,17,
-106,228,33,104,132,65,40,33,132,120,70,166,194,85,134,167,1,205,153,27,65,115,
-118,167,193,110,174,174,50,60,61,57,203,99,213,92,163,70,56,102,122,156,155,118,
-22,24,173,177,50,11,74,141,80,35,15,73,35,12,66,9,33,164,123,13,66,219,20,131,
-208,57,25,166,56,25,175,98,174,222,46,204,181,39,152,172,56,25,44,52,6,107,209,
-24,167,115,182,71,187,172,53,87,231,123,220,0,102,65,169,17,106,228,129,107,
-132,65,40,33,132,120,134,201,42,3,62,59,155,164,246,94,46,37,243,163,116,49,186,
-203,240,244,36,131,117,87,120,97,134,99,183,163,118,78,108,101,189,243,236,47,
-204,130,82,35,212,200,67,212,8,131,80,66,8,233,62,147,208,185,48,9,139,147,65,
-106,179,63,218,238,69,119,25,158,158,106,176,218,238,70,139,147,209,54,57,253,
-213,206,129,173,157,7,155,89,80,106,132,26,121,136,26,97,16,74,8,33,158,97,24,
-138,145,234,236,6,224,108,186,222,118,131,112,149,221,113,30,39,177,167,24,172,
-130,213,201,100,197,133,137,106,139,43,180,38,44,12,64,169,17,106,164,123,52,
-194,32,148,16,66,186,215,40,116,154,47,121,47,180,172,62,213,118,159,185,50,86,
-231,251,219,116,61,232,218,185,10,80,156,187,29,157,151,157,179,58,12,64,169,17,
-106,164,155,52,194,193,234,9,33,164,251,208,185,248,235,60,85,161,174,13,99,237,
-233,6,235,238,222,55,113,50,82,139,139,109,238,6,218,102,16,74,141,80,35,15,65,
-35,12,66,9,33,164,251,13,214,217,100,181,221,135,94,110,150,123,178,185,182,
-101,178,112,50,80,171,27,3,6,3,80,106,132,26,233,62,141,48,8,37,132,16,207,51,
-89,87,70,219,86,86,167,39,126,159,183,102,146,206,149,188,238,198,56,100,23,60,
-53,66,141,116,147,70,24,132,18,66,200,163,97,180,128,251,241,13,123,250,119,
-185,184,89,231,42,251,211,150,57,19,106,132,26,121,72,26,97,16,74,8,33,158,111,
-178,206,235,122,114,247,98,123,12,86,218,48,94,6,159,212,8,53,226,1,26,225,27,
-67,8,33,158,107,178,252,174,126,48,6,204,0,148,16,66,8,33,132,16,66,8,33,132,
-16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,
-66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,
-8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,16,66,8,33,132,144,206,
-240,255,228,188,96,226,178,174,58,106,0,0,0,0,73,69,78,68,174,66,96,130};
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/about_panel.fl
+++ /dev/null
@@ -1,73 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// About dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {void show_help(const char *name);} {public local
-}
-
-Function {make_about_panel()} {open
-} {
-  Fl_Window about_panel {
-    label {About FLUID} open selected
-    xywh {340 195 345 180} type Double color 50 selection_color 47 hide hotspot
-    code0 {\#include "../src/flstring.h"} non_modal
-  } {
-    Fl_Box {} {
-      image {icons/fluid-96.xpm} xywh {10 10 115 120}
-    }
-    Fl_Box {} {
-      label {FLTK User
-Interface Designer
-Version x.x.x}
-      xywh {135 10 205 75} color 12 selection_color 47 labelfont 1 labelsize 18 align 21
-      code0 {char about[80]; // uses less than 60}
-      code1 {snprintf(about,sizeof(about),"FLTK User\\nInterface Designer\\nVersion %d.%d.%d",FL_MAJOR_VERSION,FL_MINOR_VERSION,FL_PATCH_VERSION);}
-      code2 {o->copy_label(about);}
-    }
-    Fl_Box {} {
-      label {Copyright 1998-2017 by
-Bill Spitzak and others}
-      xywh {135 90 200 45} align 148
-    }
-    Fl_Button {} {
-      label {View License...}
-      callback {show_help("license.html");}
-      xywh {115 145 123 25} labelcolor 136
-    }
-    Fl_Return_Button {} {
-      label Close
-      callback {((Fl_Window*)(o->parent()))->hide();}
-      xywh {250 145 83 25}
-    }
-  }
-}
-
-data fluid_org_png {
-  comment {Embedded image for internal fluid.html web page.} public local filename {../documentation/src/fluid-org.png}
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/about_panel.h
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// About dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef about_panel_h
-#define about_panel_h
-#include <FL/Fl.H>
-extern void show_help(const char *name); 
-#include <FL/Fl_Double_Window.H>
-#include "../src/flstring.h"
-extern Fl_Double_Window *about_panel;
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-Fl_Double_Window* make_about_panel();
-extern unsigned char fluid_org_png[27580];
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/align_widget.cxx
+++ /dev/null
@@ -1,532 +1,0 @@
-//
-// "$Id$"
-//
-// Alignment code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include "Fl_Widget_Type.h"
-#include "undo.h"
-
-/**
- * the first behaviour always uses the first selected widget as a reference
- * the second behaviour uses the largest widget (most extreme positions) as
- * a reference.
- */
-#define BREAK_ON_FIRST break
-//#define BREAK_ON_FIRST
-
-void align_widget_cb(Fl_Widget*, long how) 
-{
-  const int max = 32768, min = -32768;
-  int left, right, top, bot, wdt, hgt, n;
-  Fl_Type *o;
-  int changed = 0;
-  switch ( how )
-  {
-  //---- align
-  case 10: // align left
-    left = max;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->x()<left)
-	  left = w->x();
-	BREAK_ON_FIRST;
-      }
-    if (left!=max)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(left, w->y(), w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(left, w->y(), w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  case 11: // align h.center
-    left = max; right = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->x()<left)
-	  left = w->x();
-	if (w->x()+w->w()>right)
-	  right = w->x()+w->w();
-	BREAK_ON_FIRST;
-      }
-    if (left!=max)
-    {
-      int center2 = left+right;
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize((center2-w->w())/2, w->y(), w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize((center2-w->w())/2, w->y(), w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    }
-    break;
-  case 12: // align right
-    right = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->x()+w->w()>right)
-	  right = w->x()+w->w();
-	BREAK_ON_FIRST;
-      }
-    if (right!=min)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(right-w->w(), w->y(), w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(right-w->w(), w->y(), w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  case 13: // align top
-    top = max;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->y()<top)
-	  top = w->y();
-	BREAK_ON_FIRST;
-      }
-    if (top!=max)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(w->x(), top, w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(w->x(), top, w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  case 14: // align v.center
-    top = max; bot = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->y()<top)
-	  top = w->y();
-	if (w->y()+w->h()>bot)
-	  bot = w->y()+w->h();
-	BREAK_ON_FIRST;
-      }
-    if (top!=max)
-    {
-      int center2 = top+bot;
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(w->x(), (center2-w->h())/2, w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(w->x(), (center2-w->h())/2, w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    }
-    break;
-  case 15: // align bottom
-    bot = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->y()+w->h()>bot)
-	  bot = w->y()+w->h();
-	BREAK_ON_FIRST;
-      }
-    if (bot!=min)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize( w->x(), bot-w->h(), w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize( w->x(), bot-w->h(), w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  //---- space evently
-  case 20: // space evenly across
-    left = max; right = min; wdt = 0, n = 0;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->x()<left)
-	  left = w->x();
-	if (w->x()+w->w()>right)
-	  right = w->x()+w->w();
-	wdt += w->w();
-	n++;
-      }
-    wdt = (right-left)-wdt;
-    n--;
-    if (n>0)
-    {
-      int cnt = 0, wsum = 0;
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(left+wsum+wdt*cnt/n, w->y(), w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(left+wsum+wdt*cnt/n, w->y(), w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	  cnt++;
-	  wsum += w->w();
-	}
-    }
-    break;
-  case 21: // space evenly down
-    top = max; bot = min; hgt = 0, n = 0;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->y()<top)
-	  top = w->y();
-	if (w->y()+w->h()>bot)
-	  bot = w->y()+w->h();
-	hgt += w->h();
-	n++;
-      }
-    hgt = (bot-top)-hgt;
-    n--;
-    if (n>0)
-    {
-      int cnt = 0, hsum = 0;
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(w->x(), top+hsum+hgt*cnt/n, w->w(), w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(w->x(), top+hsum+hgt*cnt/n, w->w(), w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	  cnt++;
-	  hsum += w->h();
-	}
-    }
-    break;
-  //---- make same size
-  case 30: // same width
-    wdt = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->w()>wdt)
-	  wdt = w->w();
-	BREAK_ON_FIRST;
-      }
-    if (wdt!=min)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize(w->x(), w->y(), wdt, w->h());
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize(w->x(), w->y(), wdt, w->h());
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  case 31: // same height
-    hgt = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->h()>hgt)
-	  hgt = w->h();
-	BREAK_ON_FIRST;
-      }
-    if (hgt!=min)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize( w->x(), w->y(), w->w(), hgt);
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize( w->x(), w->y(), w->w(), hgt);
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  case 32: // same size
-    hgt = min; wdt = min;
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget())
-      {
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	if (w->w()>wdt)
-	  wdt = w->w();
-	if (w->h()>hgt)
-	  hgt = w->h();
-	BREAK_ON_FIRST;
-      }
-    if (hgt!=min)
-      for (Fl_Type *o = Fl_Type::first; o; o = o->next)
-	if (o->selected && o->is_widget())
-	{
-	  if (!changed) {
-	    changed = 1;
-	    set_modflag(1);
-	    undo_checkpoint();
-	  }
-
-	  Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	  if (o->next && o->next->level > o->level && !o->next->selected &&
-	      !o->is_menu_button()) {
-	    // When resizing a group, make sure we also move the children...
-	    ((igroup *)w)->full_resize( w->x(), w->y(), wdt, hgt);
-	  } else {
-	    // Otherwise, just do the widget...
-	    w->resize( w->x(), w->y(), wdt, hgt);
-	  }
-	  w->redraw();
-	  if (w->window()) w->window()->redraw();
-	}
-    break;
-  //---- center in group
-  case 40: // center hor
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget() && o->parent)
-      {
-	if (!changed) {
-	  changed = 1;
-	  set_modflag(1);
-	  undo_checkpoint();
-	}
-
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	Fl_Widget *p = ((Fl_Widget_Type *)o->parent)->o;
-	int center2;
-
-	if (w->window() == p) center2 = p->w();
-	else center2 = 2*p->x()+p->w();
-
-	if (o->next && o->next->level > o->level && !o->next->selected &&
-	    !o->is_menu_button() && !o->is_menu_button()) {
-	  // When resizing a group, make sure we also move the children...
-	  ((igroup *)w)->full_resize((center2-w->w())/2, w->y(), w->w(), w->h());
-	} else {
-	  // Otherwise, just do the widget...
-	  w->resize((center2-w->w())/2, w->y(), w->w(), w->h());
-	}
-	w->redraw();
-	if (w->window()) w->window()->redraw();
-      }
-    break;
-  case 41: // center vert
-    for (o = Fl_Type::first; o; o = o->next)
-      if (o->selected && o->is_widget() && o->parent)
-      {
-	if (!changed) {
-	  changed = 1;
-	  set_modflag(1);
-	  undo_checkpoint();
-	}
-
-	Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-	Fl_Widget *p = ((Fl_Widget_Type *)o->parent)->o;
-	int center2;
-
-	if (w->window() == p) center2 = p->h();
-	else center2 = 2*p->y()+p->h();
-
-	if (o->next && o->next->level > o->level && !o->next->selected &&
-	    !o->is_menu_button()) {
-	  // When resizing a group, make sure we also move the children...
-	  ((igroup *)w)->full_resize(w->x(), (center2-w->h())/2, w->w(), w->h());
-	} else {
-	  // Otherwise, just do the widget...
-	  w->resize(w->x(), (center2-w->h())/2, w->w(), w->h());
-	}
-	set_modflag(1);
-	w->redraw();
-	if (w->window()) w->window()->redraw();
-      }
-    break;
-  }
-}
-
-
-// Set sizes of selected widgets...
-void widget_size_cb(Fl_Widget *, long size) {
-  // Update any selected widgets...
-  int changed = 0;
-  for (Fl_Type *o = Fl_Type::first; o; o = o->next) {
-    if (o->selected && o->is_widget()) {
-      if (!changed) {
-	changed = 1;
-	set_modflag(1);
-	undo_checkpoint();
-      }
-
-      Fl_Widget *w = ((Fl_Widget_Type *)o)->o;
-      w->labelsize((Fl_Font)size);
-      Fl_Font f;
-      int s = (int)size;
-      Fl_Color c;
-      ((Fl_Widget_Type *)o)->textstuff(2, f, s, c);
-
-      w->redraw();
-      // since this may be a major change, the whole window should be redrawn
-      if (w->window()) w->window()->redraw();
-    }
-  }
-}
-
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/fluid/alignment_panel.cxx
+++ /dev/null
@@ -1,823 +1,0 @@
-//
-// "$Id$"
-//
-// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "alignment_panel.h"
-#include <FL/Fl_Preferences.H>
-#include <FL/fl_ask.H>
-Fl_Text_Buffer *shell_run_buffer; 
-
-Fl_Double_Window *project_window=(Fl_Double_Window *)0;
-
-static void cb_Close(Fl_Button*, void*) {
-  project_window->hide();
-}
-
-Fl_Input *header_file_input=(Fl_Input *)0;
-
-Fl_Input *code_file_input=(Fl_Input *)0;
-
-Fl_Check_Button *include_H_from_C_button=(Fl_Check_Button *)0;
-
-Fl_Check_Button *use_FL_COMMAND_button=(Fl_Check_Button *)0;
-
-Fl_Choice *i18n_type_chooser=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_i18n_type_chooser[] = {
- {"None", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"GNU gettext", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"POSIX catgets", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Input *i18n_include_input=(Fl_Input *)0;
-
-Fl_Input *i18n_file_input=(Fl_Input *)0;
-
-Fl_Int_Input *i18n_set_input=(Fl_Int_Input *)0;
-
-Fl_Input *i18n_function_input=(Fl_Input *)0;
-
-Fl_Double_Window* make_project_window() {
-  { project_window = new Fl_Double_Window(399, 252, "Project Settings");
-    { Fl_Button* o = new Fl_Button(328, 216, 60, 25, "Close");
-      o->tooltip("Close this dialog.");
-      o->callback((Fl_Callback*)cb_Close);
-    } // Fl_Button* o
-    { Fl_Tabs* o = new Fl_Tabs(10, 10, 378, 195);
-      o->selection_color((Fl_Color)12);
-      { Fl_Group* o = new Fl_Group(10, 36, 378, 169, "Output");
-        o->hide();
-        { Fl_Box* o = new Fl_Box(20, 49, 340, 49, "Use \"name.ext\" to set a file name or just \".ext\" to set extension.");
-          o->align(Fl_Align(132|FL_ALIGN_INSIDE));
-        } // Fl_Box* o
-        { header_file_input = new Fl_Input(119, 103, 252, 20, "Header File:");
-          header_file_input->tooltip("The name of the generated header file.");
-          header_file_input->box(FL_THIN_DOWN_BOX);
-          header_file_input->labelfont(1);
-          header_file_input->textfont(4);
-          header_file_input->callback((Fl_Callback*)header_input_cb, (void*)(1));
-          header_file_input->when(FL_WHEN_CHANGED);
-        } // Fl_Input* header_file_input
-        { code_file_input = new Fl_Input(119, 128, 252, 20, "Code File:");
-          code_file_input->tooltip("The name of the generated code file.");
-          code_file_input->box(FL_THIN_DOWN_BOX);
-          code_file_input->labelfont(1);
-          code_file_input->textfont(4);
-          code_file_input->callback((Fl_Callback*)code_input_cb, (void*)(1));
-          code_file_input->when(FL_WHEN_CHANGED);
-        } // Fl_Input* code_file_input
-        { include_H_from_C_button = new Fl_Check_Button(117, 153, 272, 20, "Include Header from Code");
-          include_H_from_C_button->tooltip("Include the header file from the code file.");
-          include_H_from_C_button->down_box(FL_DOWN_BOX);
-          include_H_from_C_button->callback((Fl_Callback*)include_H_from_C_button_cb);
-        } // Fl_Check_Button* include_H_from_C_button
-        { use_FL_COMMAND_button = new Fl_Check_Button(117, 176, 272, 20, "Menu shortcuts use FL_COMMAND");
-          use_FL_COMMAND_button->tooltip("Replace FL_CTRL with FL_COMMAND when generating menu shortcut code.");
-          use_FL_COMMAND_button->down_box(FL_DOWN_BOX);
-          use_FL_COMMAND_button->callback((Fl_Callback*)use_FL_COMMAND_button_cb);
-        } // Fl_Check_Button* use_FL_COMMAND_button
-        o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(10, 36, 378, 169, "Internationalization");
-        { i18n_type_chooser = new Fl_Choice(100, 48, 136, 25, "Use:");
-          i18n_type_chooser->tooltip("Type of internationalization to use.");
-          i18n_type_chooser->box(FL_THIN_UP_BOX);
-          i18n_type_chooser->down_box(FL_BORDER_BOX);
-          i18n_type_chooser->labelfont(1);
-          i18n_type_chooser->callback((Fl_Callback*)i18n_type_cb);
-          i18n_type_chooser->menu(menu_i18n_type_chooser);
-        } // Fl_Choice* i18n_type_chooser
-        { i18n_include_input = new Fl_Input(100, 78, 272, 20, "#include:");
-          i18n_include_input->tooltip("The include file for internationalization.");
-          i18n_include_input->box(FL_THIN_DOWN_BOX);
-          i18n_include_input->labelfont(1);
-          i18n_include_input->textfont(4);
-          i18n_include_input->callback((Fl_Callback*)i18n_text_cb);
-        } // Fl_Input* i18n_include_input
-        { i18n_file_input = new Fl_Input(100, 104, 272, 20, "File:");
-          i18n_file_input->tooltip("The name of the message catalog.");
-          i18n_file_input->box(FL_THIN_DOWN_BOX);
-          i18n_file_input->labelfont(1);
-          i18n_file_input->textfont(4);
-          i18n_file_input->callback((Fl_Callback*)i18n_text_cb);
-        } // Fl_Input* i18n_file_input
-        { i18n_set_input = new Fl_Int_Input(100, 128, 272, 20, "Set:");
-          i18n_set_input->tooltip("The message set number.");
-          i18n_set_input->type(2);
-          i18n_set_input->box(FL_THIN_DOWN_BOX);
-          i18n_set_input->labelfont(1);
-          i18n_set_input->textfont(4);
-          i18n_set_input->callback((Fl_Callback*)i18n_int_cb);
-        } // Fl_Int_Input* i18n_set_input
-        { i18n_function_input = new Fl_Input(100, 103, 272, 20, "Function:");
-          i18n_function_input->tooltip("The function to call to internationalize the labels and tooltips.");
-          i18n_function_input->box(FL_THIN_DOWN_BOX);
-          i18n_function_input->labelfont(1);
-          i18n_function_input->textfont(4);
-          i18n_function_input->callback((Fl_Callback*)i18n_text_cb);
-        } // Fl_Input* i18n_function_input
-        o->end();
-      } // Fl_Group* o
-      o->end();
-    } // Fl_Tabs* o
-    project_window->set_modal();
-    project_window->end();
-  } // Fl_Double_Window* project_window
-  return project_window;
-}
-void scheme_cb(Fl_Choice *, void *); 
-
-Fl_Double_Window *settings_window=(Fl_Double_Window *)0;
-
-Fl_Choice *scheme_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_scheme_choice[] = {
- {"Default", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"None", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"Plastic", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"GTK+", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"Gleam", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Check_Button *tooltips_button=(Fl_Check_Button *)0;
-
-static void cb_tooltips_button(Fl_Check_Button*, void*) {
-  Fl_Tooltip::enable(tooltips_button->value());
-fluid_prefs.set("show_tooltips", tooltips_button->value());
-}
-
-Fl_Check_Button *completion_button=(Fl_Check_Button *)0;
-
-static void cb_completion_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("show_completion_dialogs", completion_button->value());
-}
-
-Fl_Check_Button *openlast_button=(Fl_Check_Button *)0;
-
-static void cb_openlast_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("open_previous_file", openlast_button->value());
-}
-
-Fl_Check_Button *prevpos_button=(Fl_Check_Button *)0;
-
-static void cb_prevpos_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("prev_window_pos", prevpos_button->value());
-}
-
-Fl_Check_Button *show_comments_button=(Fl_Check_Button *)0;
-
-static void cb_show_comments_button(Fl_Check_Button*, void*) {
-  show_comments = show_comments_button->value();
-fluid_prefs.set("show_comments", show_comments);
-redraw_browser();
-}
-
-Fl_Spinner *recent_spinner=(Fl_Spinner *)0;
-
-static void cb_recent_spinner(Fl_Spinner*, void*) {
-  fluid_prefs.set("recent_files", recent_spinner->value());
-load_history();
-}
-
-Fl_Check_Button *use_external_editor_button=(Fl_Check_Button *)0;
-
-static void cb_use_external_editor_button(Fl_Check_Button*, void*) {
-  G_use_external_editor = use_external_editor_button->value();
-fluid_prefs.set("use_external_editor", G_use_external_editor);
-redraw_browser();
-}
-
-Fl_Input *editor_command_input=(Fl_Input *)0;
-
-static void cb_editor_command_input(Fl_Input*, void*) {
-  strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1);
-G_external_editor_command[sizeof(G_external_editor_command)-1] = 0;
-fluid_prefs.set("external_editor_command", G_external_editor_command);
-redraw_browser();
-}
-
-static void cb_Close1(Fl_Button*, void*) {
-  settings_window->hide();
-}
-
-Fl_Double_Window* make_settings_window() {
-  { Fl_Double_Window* o = settings_window = new Fl_Double_Window(360, 355, "GUI Settings");
-    { scheme_choice = new Fl_Choice(140, 10, 115, 25, "Scheme: ");
-      scheme_choice->down_box(FL_BORDER_BOX);
-      scheme_choice->labelfont(1);
-      scheme_choice->callback((Fl_Callback*)scheme_cb);
-      scheme_choice->menu(menu_scheme_choice);
-      int s;
-      fluid_prefs.get("scheme", s, 0);
-      scheme_choice->value(s);
-      scheme_cb(0, 0);
-    } // Fl_Choice* scheme_choice
-    { Fl_Group* o = new Fl_Group(20, 43, 330, 161);
-      o->labelfont(1);
-      o->align(Fl_Align(FL_ALIGN_CENTER));
-      { Fl_Box* o = new Fl_Box(140, 43, 1, 25, "Options: ");
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_LEFT));
-      } // Fl_Box* o
-      { tooltips_button = new Fl_Check_Button(138, 43, 113, 25, "Show Tooltips");
-        tooltips_button->down_box(FL_DOWN_BOX);
-        tooltips_button->labelsize(12);
-        tooltips_button->callback((Fl_Callback*)cb_tooltips_button);
-        int b;
-        fluid_prefs.get("show_tooltips", b, 1);
-        tooltips_button->value(b);
-        Fl_Tooltip::enable(b);
-      } // Fl_Check_Button* tooltips_button
-      { completion_button = new Fl_Check_Button(138, 68, 186, 25, "Show Completion Dialogs");
-        completion_button->down_box(FL_DOWN_BOX);
-        completion_button->labelsize(12);
-        completion_button->callback((Fl_Callback*)cb_completion_button);
-        int b;
-        fluid_prefs.get("show_completion_dialogs", b, 1);
-        completion_button->value(b);
-      } // Fl_Check_Button* completion_button
-      { openlast_button = new Fl_Check_Button(138, 93, 214, 25, "Open Previous File on Startup");
-        openlast_button->down_box(FL_DOWN_BOX);
-        openlast_button->labelsize(12);
-        openlast_button->callback((Fl_Callback*)cb_openlast_button);
-        int b;
-        fluid_prefs.get("open_previous_file", b, 0);
-        openlast_button->value(b);
-      } // Fl_Check_Button* openlast_button
-      { prevpos_button = new Fl_Check_Button(138, 118, 209, 25, "Remember Window Positions");
-        prevpos_button->down_box(FL_DOWN_BOX);
-        prevpos_button->labelsize(12);
-        prevpos_button->callback((Fl_Callback*)cb_prevpos_button);
-        int b;
-        fluid_prefs.get("prev_window_pos", b, 1);
-        prevpos_button->value(b);
-      } // Fl_Check_Button* prevpos_button
-      { show_comments_button = new Fl_Check_Button(138, 143, 209, 25, "Show Comments in Browser");
-        show_comments_button->down_box(FL_DOWN_BOX);
-        show_comments_button->labelsize(12);
-        show_comments_button->callback((Fl_Callback*)cb_show_comments_button);
-        fluid_prefs.get("show_comments", show_comments, 1);
-        show_comments_button->value(show_comments);
-      } // Fl_Check_Button* show_comments_button
-      o->end();
-    } // Fl_Group* o
-    { recent_spinner = new Fl_Spinner(140, 173, 40, 25, "# Recent Files: ");
-      recent_spinner->labelfont(1);
-      recent_spinner->callback((Fl_Callback*)cb_recent_spinner);
-      recent_spinner->when(FL_WHEN_CHANGED);
-      int c;
-      fluid_prefs.get("recent_files", c, 5);
-      recent_spinner->maximum(10);
-      recent_spinner->value(c);
-    } // Fl_Spinner* recent_spinner
-    { Fl_Group* o = new Fl_Group(10, 210, 337, 95);
-      o->box(FL_THIN_UP_BOX);
-      o->color(FL_DARK1);
-      { use_external_editor_button = new Fl_Check_Button(25, 218, 209, 22, "Use external editor?");
-        use_external_editor_button->down_box(FL_DOWN_BOX);
-        use_external_editor_button->labelsize(12);
-        use_external_editor_button->callback((Fl_Callback*)cb_use_external_editor_button);
-        fluid_prefs.get("use_external_editor", G_use_external_editor, 0);
-        use_external_editor_button->value(G_use_external_editor);
-      } // Fl_Check_Button* use_external_editor_button
-      { editor_command_input = new Fl_Input(25, 264, 305, 21, "Editor Command");
-        editor_command_input->tooltip("The editor command to open your external text editor.\nInclude any necessary \
-flags to ensure your editor does not background itself.\nExamples:\n    gvim -\
-f\n    gedit\n emacs");
-        editor_command_input->labelsize(12);
-        editor_command_input->textsize(12);
-        editor_command_input->callback((Fl_Callback*)cb_editor_command_input);
-        editor_command_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        editor_command_input->when(FL_WHEN_CHANGED);
-        fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1);
-        editor_command_input->value(G_external_editor_command);
-      } // Fl_Input* editor_command_input
-      o->end();
-      Fl_Group::current()->resizable(o);
-    } // Fl_Group* o
-    { Fl_Button* o = new Fl_Button(285, 320, 64, 25, "Close");
-      o->tooltip("Close this dialog.");
-      o->callback((Fl_Callback*)cb_Close1);
-    } // Fl_Button* o
-    o->size_range(o->w(), o->h());
-    settings_window->set_non_modal();
-    settings_window->end();
-  } // Fl_Double_Window* settings_window
-  return settings_window;
-}
-
-Fl_Double_Window *shell_window=(Fl_Double_Window *)0;
-
-Fl_Input *shell_command_input=(Fl_Input *)0;
-
-static void cb_shell_command_input(Fl_Input*, void*) {
-  fluid_prefs.set("shell_command", shell_command_input->value());
-}
-
-Fl_Check_Button *shell_writecode_button=(Fl_Check_Button *)0;
-
-static void cb_shell_writecode_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("shell_writecode", shell_writecode_button->value());
-}
-
-Fl_Check_Button *shell_writemsgs_button=(Fl_Check_Button *)0;
-
-static void cb_shell_writemsgs_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("shell_writemsgs", shell_writemsgs_button->value());
-}
-
-Fl_Check_Button *shell_savefl_button=(Fl_Check_Button *)0;
-
-static void cb_shell_savefl_button(Fl_Check_Button*, void*) {
-  fluid_prefs.set("shell_savefl", shell_savefl_button->value());
-}
-
-static void cb_Cancel(Fl_Button*, void*) {
-  shell_window->hide();
-}
-
-Fl_Double_Window *shell_run_window=(Fl_Double_Window *)0;
-
-Fl_Text_Display *shell_run_display=(Fl_Text_Display *)0;
-
-Fl_Return_Button *shell_run_button=(Fl_Return_Button *)0;
-
-static void cb_shell_run_button(Fl_Return_Button*, void*) {
-  shell_run_window->hide();
-}
-
-Fl_Double_Window* make_shell_window() {
-  { shell_window = new Fl_Double_Window(365, 125, "Shell Command");
-    { shell_command_input = new Fl_Input(10, 27, 347, 25, "Command:");
-      shell_command_input->labelfont(1);
-      shell_command_input->callback((Fl_Callback*)cb_shell_command_input);
-      shell_command_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      char buf[1024];
-      fluid_prefs.get("shell_command", buf, "", sizeof(buf));
-      shell_command_input->value(buf);
-    } // Fl_Input* shell_command_input
-    { shell_writecode_button = new Fl_Check_Button(128, 61, 93, 19, "Write Code");
-      shell_writecode_button->down_box(FL_DOWN_BOX);
-      shell_writecode_button->callback((Fl_Callback*)cb_shell_writecode_button);
-      int b;
-      fluid_prefs.get("shell_writecode", b, 1);
-      shell_writecode_button->value(b);
-    } // Fl_Check_Button* shell_writecode_button
-    { shell_writemsgs_button = new Fl_Check_Button(231, 61, 126, 19, "Write Messages");
-      shell_writemsgs_button->down_box(FL_DOWN_BOX);
-      shell_writemsgs_button->callback((Fl_Callback*)cb_shell_writemsgs_button);
-      int b;
-      fluid_prefs.get("shell_writemsgs", b, 0);
-      shell_writemsgs_button->value(b);
-    } // Fl_Check_Button* shell_writemsgs_button
-    { shell_savefl_button = new Fl_Check_Button(10, 62, 108, 19, "Save .FL File");
-      shell_savefl_button->down_box(FL_DOWN_BOX);
-      shell_savefl_button->callback((Fl_Callback*)cb_shell_savefl_button);
-      int b;
-      fluid_prefs.get("shell_savefl", b, 1);
-      shell_savefl_button->value(b);
-    } // Fl_Check_Button* shell_savefl_button
-    { Fl_Return_Button* o = new Fl_Return_Button(132, 90, 143, 25, "Run Command");
-      o->callback((Fl_Callback*)do_shell_command);
-    } // Fl_Return_Button* o
-    { Fl_Button* o = new Fl_Button(285, 90, 72, 25, "Cancel");
-      o->callback((Fl_Callback*)cb_Cancel);
-    } // Fl_Button* o
-    shell_window->end();
-  } // Fl_Double_Window* shell_window
-  { shell_run_window = new Fl_Double_Window(555, 430, "Shell Command Output");
-    { shell_run_display = new Fl_Text_Display(10, 10, 535, 375);
-      shell_run_display->box(FL_DOWN_BOX);
-      shell_run_display->textfont(4);
-      Fl_Group::current()->resizable(shell_run_display);
-      shell_run_buffer = new Fl_Text_Buffer();
-      shell_run_display->buffer(shell_run_buffer);
-    } // Fl_Text_Display* shell_run_display
-    { shell_run_button = new Fl_Return_Button(468, 395, 77, 25, "Close");
-      shell_run_button->callback((Fl_Callback*)cb_shell_run_button);
-    } // Fl_Return_Button* shell_run_button
-    shell_run_window->end();
-  } // Fl_Double_Window* shell_run_window
-  return shell_run_window;
-}
-
-Fl_Double_Window *grid_window=(Fl_Double_Window *)0;
-
-Fl_Int_Input *horizontal_input=(Fl_Int_Input *)0;
-
-Fl_Int_Input *vertical_input=(Fl_Int_Input *)0;
-
-Fl_Int_Input *snap_input=(Fl_Int_Input *)0;
-
-Fl_Check_Button *guides_toggle=(Fl_Check_Button *)0;
-
-static void cb_Close2(Fl_Button*, void*) {
-  grid_window->hide();
-}
-
-Fl_Round_Button *def_widget_size[6]={(Fl_Round_Button *)0};
-
-Fl_Double_Window* make_layout_window() {
-  { grid_window = new Fl_Double_Window(310, 245, "Layout Settings");
-    { Fl_Int_Input* o = horizontal_input = new Fl_Int_Input(116, 10, 50, 25, "x");
-      horizontal_input->tooltip("Horizontal grid spacing.");
-      horizontal_input->type(2);
-      horizontal_input->box(FL_THIN_DOWN_BOX);
-      horizontal_input->callback((Fl_Callback*)grid_cb, (void*)(1));
-      horizontal_input->align(Fl_Align(FL_ALIGN_RIGHT));
-      o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
-    } // Fl_Int_Input* horizontal_input
-    { Fl_Int_Input* o = vertical_input = new Fl_Int_Input(179, 10, 50, 25, "pixels");
-      vertical_input->tooltip("Vertical grid spacing.");
-      vertical_input->type(2);
-      vertical_input->box(FL_THIN_DOWN_BOX);
-      vertical_input->callback((Fl_Callback*)grid_cb, (void*)(2));
-      vertical_input->align(Fl_Align(FL_ALIGN_RIGHT));
-      o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
-    } // Fl_Int_Input* vertical_input
-    { Fl_Int_Input* o = snap_input = new Fl_Int_Input(116, 45, 50, 25, "pixel snap");
-      snap_input->tooltip("Snap to grid within this many pixels.");
-      snap_input->type(2);
-      snap_input->box(FL_THIN_DOWN_BOX);
-      snap_input->callback((Fl_Callback*)grid_cb, (void*)(3));
-      snap_input->align(Fl_Align(FL_ALIGN_RIGHT));
-      o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
-    } // Fl_Int_Input* snap_input
-    { guides_toggle = new Fl_Check_Button(116, 80, 110, 25, "Show Guides");
-      guides_toggle->tooltip("Show distance and alignment guides in overlay");
-      guides_toggle->down_box(FL_DOWN_BOX);
-      guides_toggle->callback((Fl_Callback*)guides_cb, (void*)(4));
-    } // Fl_Check_Button* guides_toggle
-    { Fl_Button* o = new Fl_Button(240, 210, 60, 25, "Close");
-      o->tooltip("Close this dialog.");
-      o->callback((Fl_Callback*)cb_Close2);
-    } // Fl_Button* o
-    { Fl_Box* o = new Fl_Box(47, 10, 70, 25, "Grid:");
-      o->labelfont(1);
-      o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
-    } // Fl_Box* o
-    { Fl_Box* o = new Fl_Box(10, 115, 107, 25, "Widget Size:");
-      o->labelfont(1);
-      o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
-    } // Fl_Box* o
-    { Fl_Group* o = new Fl_Group(105, 115, 170, 75);
-      { def_widget_size[0] = new Fl_Round_Button(115, 115, 70, 25);
-        def_widget_size[0]->type(102);
-        def_widget_size[0]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[0]->callback((Fl_Callback*)default_widget_size_cb, (void*)(8));
-      } // Fl_Round_Button* def_widget_size[0]
-      { Fl_Box* o = new Fl_Box(130, 115, 50, 25, "tiny");
-        o->labelsize(8);
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      { def_widget_size[1] = new Fl_Round_Button(202, 115, 70, 25);
-        def_widget_size[1]->type(102);
-        def_widget_size[1]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[1]->callback((Fl_Callback*)default_widget_size_cb, (void*)(11));
-      } // Fl_Round_Button* def_widget_size[1]
-      { Fl_Box* o = new Fl_Box(218, 115, 50, 25, "small");
-        o->labelsize(11);
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      { def_widget_size[2] = new Fl_Round_Button(115, 140, 70, 25);
-        def_widget_size[2]->type(102);
-        def_widget_size[2]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[2]->callback((Fl_Callback*)default_widget_size_cb, (void*)(14));
-      } // Fl_Round_Button* def_widget_size[2]
-      { Fl_Box* o = new Fl_Box(130, 140, 50, 25, "normal");
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      { def_widget_size[3] = new Fl_Round_Button(202, 140, 90, 25);
-        def_widget_size[3]->type(102);
-        def_widget_size[3]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[3]->callback((Fl_Callback*)default_widget_size_cb, (void*)(18));
-      } // Fl_Round_Button* def_widget_size[3]
-      { Fl_Box* o = new Fl_Box(218, 140, 68, 25, "medium");
-        o->labelsize(18);
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      { def_widget_size[4] = new Fl_Round_Button(115, 165, 75, 25);
-        def_widget_size[4]->type(102);
-        def_widget_size[4]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[4]->callback((Fl_Callback*)default_widget_size_cb, (void*)(24));
-      } // Fl_Round_Button* def_widget_size[4]
-      { Fl_Box* o = new Fl_Box(130, 165, 64, 25, "large");
-        o->labelsize(24);
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      { def_widget_size[5] = new Fl_Round_Button(202, 165, 95, 25);
-        def_widget_size[5]->type(102);
-        def_widget_size[5]->down_box(FL_ROUND_DOWN_BOX);
-        def_widget_size[5]->callback((Fl_Callback*)default_widget_size_cb, (void*)(32));
-      } // Fl_Round_Button* def_widget_size[5]
-      { Fl_Box* o = new Fl_Box(218, 165, 76, 25, "huge");
-        o->labelsize(32);
-        o->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    grid_window->set_non_modal();
-    grid_window->end();
-  } // Fl_Double_Window* grid_window
-  return grid_window;
-}
-/**
- Copy of all options in user and system mode
-*/
-static int opt[10][2]; 
-
-/**
- Update the UI using the values in the opt array
-*/
-static void refreshUI() {
-  int mode = wUserOrSystem->value();
-  wVisibleFocus->value(opt[Fl::OPTION_VISIBLE_FOCUS][mode]);
-  wArrowFocus->value(opt[Fl::OPTION_ARROW_FOCUS][mode]);
-  wShowTooltips->value(opt[Fl::OPTION_SHOW_TOOLTIPS][mode]);
-  wDNDText->value(opt[Fl::OPTION_DND_TEXT][mode]);
-  wGTKText->value(opt[Fl::OPTION_FNFC_USES_GTK][mode]);
-}
-
-/**
- read all preferences and refresh the GUI
-*/
-static void readPrefs() {
-  // read all preferences and refresh the GUI
-  {
-    Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-    Fl_Preferences opt_prefs(prefs, "options");
-    opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1], 2);
-    opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1], 2);
-    opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][1], 2);
-    opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1], 2);
-    opt_prefs.get("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK ][1], 2);
-  }
-  {
-    Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-    Fl_Preferences opt_prefs(prefs, "options");
-    opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0], 2);
-    opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0], 2);
-    opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][0], 2);
-    opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0], 2);
-    opt_prefs.get("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK ][0], 2);
-  }
-  refreshUI();
-}
-
-/**
- write all preferences using the array
-*/
-static void writePrefs() {
-  // write all preferences using the array
-  {
-    Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-    Fl_Preferences opt_prefs(prefs, "options");
-    if (opt[Fl::OPTION_ARROW_FOCUS][1]==2) opt_prefs.deleteEntry("ArrowFocus");
-    else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1]);
-    if (opt[Fl::OPTION_VISIBLE_FOCUS][1]==2) opt_prefs.deleteEntry("VisibleFocus");
-    else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1]);
-    if (opt[Fl::OPTION_DND_TEXT][1]==2) opt_prefs.deleteEntry("DNDText");
-    else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][1]);
-    if (opt[Fl::OPTION_SHOW_TOOLTIPS][1]==2) opt_prefs.deleteEntry("ShowTooltips");
-    else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1]);
-    if (opt[Fl::OPTION_FNFC_USES_GTK][1]==2) opt_prefs.deleteEntry("FNFCUsesGTK");
-    else opt_prefs.set("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK][1]);
-  }
-  {
-    Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-    Fl_Preferences opt_prefs(prefs, "options");
-    if (opt[Fl::OPTION_ARROW_FOCUS][0]==2) opt_prefs.deleteEntry("ArrowFocus");
-    else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0]);
-    if (opt[Fl::OPTION_VISIBLE_FOCUS][0]==2) opt_prefs.deleteEntry("VisibleFocus");
-    else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0]);
-    if (opt[Fl::OPTION_DND_TEXT][0]==2) opt_prefs.deleteEntry("DNDText");
-    else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][0]);
-    if (opt[Fl::OPTION_SHOW_TOOLTIPS][0]==2) opt_prefs.deleteEntry("ShowTooltips");
-    else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0]);
-    if (opt[Fl::OPTION_FNFC_USES_GTK][0]==2) opt_prefs.deleteEntry("FNFCUsesGTK");
-    else opt_prefs.set("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK][0]);
-  }
-}
-
-void show_global_settings_window() {
-  if (!global_settings_window)
-    make_global_settings_window();
-  readPrefs();
-  refreshUI();
-  fl_message(
-  	"WARNING!\n\n"
-  	"The following dialog changes the user interface behavior\n"
-  	"of ALL FLTK applications, for the current user, or for \n"
-  	"ALL users on this machine.\n\n"
-  	"Please choose these settings carefully, or reset\n"
-  	"user and system settings to \"default\".");
-  global_settings_window->show();
-}
-
-Fl_Double_Window *global_settings_window=(Fl_Double_Window *)0;
-
-Fl_Choice *wVisibleFocus=(Fl_Choice *)0;
-
-static void cb_wVisibleFocus(Fl_Choice*, void*) {
-  int mode = wUserOrSystem->value();
-opt[Fl::OPTION_VISIBLE_FOCUS][mode] = wVisibleFocus->value();
-}
-
-Fl_Menu_Item menu_wVisibleFocus[] = {
- {"off", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"on", 0,  0, (void*)(1), 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"default", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *wArrowFocus=(Fl_Choice *)0;
-
-static void cb_wArrowFocus(Fl_Choice*, void*) {
-  int mode = wUserOrSystem->value();
-opt[Fl::OPTION_ARROW_FOCUS][mode] = wArrowFocus->value();
-}
-
-Fl_Menu_Item menu_wArrowFocus[] = {
- {"off", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"on", 0,  0, (void*)(1), 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"default", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *wShowTooltips=(Fl_Choice *)0;
-
-static void cb_wShowTooltips(Fl_Choice*, void*) {
-  int mode = wUserOrSystem->value();
-opt[Fl::OPTION_SHOW_TOOLTIPS][mode] = wShowTooltips->value();
-}
-
-Fl_Menu_Item menu_wShowTooltips[] = {
- {"off", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"on", 0,  0, (void*)(1), 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"default", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *wDNDText=(Fl_Choice *)0;
-
-static void cb_wDNDText(Fl_Choice*, void*) {
-  int mode = wUserOrSystem->value();
-opt[Fl::OPTION_DND_TEXT][mode] = wDNDText->value();
-}
-
-Fl_Menu_Item menu_wDNDText[] = {
- {"off", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"on", 0,  0, (void*)(1), 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"default", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *wGTKText=(Fl_Choice *)0;
-
-static void cb_wGTKText(Fl_Choice*, void*) {
-  int mode = wUserOrSystem->value();
-opt[Fl::OPTION_FNFC_USES_GTK ][mode] = wGTKText->value();
-}
-
-Fl_Menu_Item menu_wGTKText[] = {
- {"off", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"on", 0,  0, (void*)(1), 128, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"default", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *wUserOrSystem=(Fl_Choice *)0;
-
-static void cb_wUserOrSystem(Fl_Choice*, void*) {
-  refreshUI();
-}
-
-Fl_Menu_Item menu_wUserOrSystem[] = {
- {"User Settings", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"System Settings", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-static void cb_Cancel1(Fl_Button*, void*) {
-  global_settings_window->hide();
-}
-
-static void cb_OK(Fl_Button*, void*) {
-  writePrefs();
-global_settings_window->hide();
-}
-
-Fl_Double_Window* make_global_settings_window() {
-  { global_settings_window = new Fl_Double_Window(400, 378, "FLTK Preferences");
-    global_settings_window->color(FL_LIGHT1);
-    { Fl_Group* o = new Fl_Group(10, 10, 380, 100, "Keyboard Focus Options");
-      o->box(FL_GTK_DOWN_BOX);
-      o->labelfont(2);
-      o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { wVisibleFocus = new Fl_Choice(245, 40, 100, 25, "Visible Keyboard Focus:");
-        wVisibleFocus->tooltip("OPTION_VISIBLE_FOCUS\n\nIf visible focus is switched on, FLTK will draw a dot\
-ted rectangle inside the widget that will receive the next keystroke. If switc\
-hed off, no such indicator will be drawn and keyboard navigation is disabled.\
-\n\nDefault is on.");
-        wVisibleFocus->down_box(FL_BORDER_BOX);
-        wVisibleFocus->callback((Fl_Callback*)cb_wVisibleFocus);
-        wVisibleFocus->menu(menu_wVisibleFocus);
-      } // Fl_Choice* wVisibleFocus
-      { wArrowFocus = new Fl_Choice(245, 75, 100, 25, "Arrow Keys move Focus:");
-        wArrowFocus->tooltip("OPTION_ARROW_FOCUS\n\nWhen switched on, moving the text cursor beyond the sta\
-rt or end of the text in a text widget will change focus to the next widget. W\
-hen switched off, the cursor will stop at the end of the text. Pressing Tab or\
- Ctrl-Tab will advance the keyboard focus. Switch this on, if you want the old\
- behavior of FLTK 1.1.\n\nDefault is off.");
-        wArrowFocus->down_box(FL_BORDER_BOX);
-        wArrowFocus->callback((Fl_Callback*)cb_wArrowFocus);
-        wArrowFocus->menu(menu_wArrowFocus);
-      } // Fl_Choice* wArrowFocus
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 120, 380, 65, "Tooltip Options");
-      o->box(FL_GTK_DOWN_BOX);
-      o->labelfont(2);
-      o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { wShowTooltips = new Fl_Choice(245, 150, 100, 25, "Show Tooltips:");
-        wShowTooltips->tooltip("OPTION_SHOW_TOOLTIPS\n\nIf tooltips are enabled, hovering the mouse over a wi\
-dget with a tooltip text will open a little tooltip window until the mouse lea\
-ves the widget. If disabled, no tooltip is shown.\n\nDefault is on.");
-        wShowTooltips->down_box(FL_BORDER_BOX);
-        wShowTooltips->callback((Fl_Callback*)cb_wShowTooltips);
-        wShowTooltips->menu(menu_wShowTooltips);
-      } // Fl_Choice* wShowTooltips
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 194, 380, 66, "Drag And Drop Options");
-      o->box(FL_GTK_DOWN_BOX);
-      o->labelfont(2);
-      o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { wDNDText = new Fl_Choice(245, 225, 100, 25, "Allow dragging Text:");
-        wDNDText->tooltip("OPTION_DND_TEXT\n\nIf text drag-and-drop is enabled, the user can select and \
-drag text from any text widget. If disabled, no dragging is possible, however \
-dropping text from other applications still works.\n\nDefault is on.");
-        wDNDText->down_box(FL_BORDER_BOX);
-        wDNDText->callback((Fl_Callback*)cb_wDNDText);
-        wDNDText->menu(menu_wDNDText);
-      } // Fl_Choice* wDNDText
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 269, 380, 66, "Native File Chooser Options");
-      o->box(FL_GTK_DOWN_BOX);
-      o->labelfont(2);
-      o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
-      { wGTKText = new Fl_Choice(245, 300, 100, 25, "Native File Chooser uses GTK:");
-        wGTKText->tooltip("OPTION_FNFC_USES_GTK\n        \nIf \'Native File Chooser uses GTK\' is enable\
-d, the Fl_Native_File_Chooser class\ncalls the GTK open/save file dialogs when\
- they are available on the platfom. If disabled, the Fl_Native_File_Chooser cl\
-ass\nalways uses FLTK\'s own file dialog (i.e., Fl_File_Chooser) even if GTK i\
-s available.\n\nDefault is on.");
-        wGTKText->down_box(FL_BORDER_BOX);
-        wGTKText->callback((Fl_Callback*)cb_wGTKText);
-        wGTKText->menu(menu_wGTKText);
-      } // Fl_Choice* wGTKText
-      o->end();
-    } // Fl_Group* o
-    { wUserOrSystem = new Fl_Choice(10, 345, 141, 25);
-      wUserOrSystem->tooltip("Change settings for the current user, or default values for all users of this\
- computer. Individual users can override system options, if they set their opt\
-ions to specific values (not \'default\').");
-      wUserOrSystem->down_box(FL_BORDER_BOX);
-      wUserOrSystem->callback((Fl_Callback*)cb_wUserOrSystem);
-      wUserOrSystem->menu(menu_wUserOrSystem);
-    } // Fl_Choice* wUserOrSystem
-    { Fl_Button* o = new Fl_Button(230, 345, 75, 25, "Cancel");
-      o->callback((Fl_Callback*)cb_Cancel1);
-    } // Fl_Button* o
-    { Fl_Button* o = new Fl_Button(315, 345, 75, 25, "OK");
-      o->callback((Fl_Callback*)cb_OK);
-    } // Fl_Button* o
-    global_settings_window->end();
-  } // Fl_Double_Window* global_settings_window
-  readPrefs();
-    Fl::option(Fl::OPTION_SHOW_TOOLTIPS,1); // make sure tooltips are on !
-  return global_settings_window;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/alignment_panel.fl
+++ /dev/null
@@ -1,753 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {\#include <FL/Fl_Text_Buffer.H>} {public local
-}
-
-decl {\#include <FL/Fl_Text_Display.H>} {public local
-}
-
-decl {\#include <FL/filename.H>} {public local
-}
-
-decl {\#include <FL/Fl_Preferences.H>} {private global
-}
-
-decl {\#include <FL/fl_ask.H>} {private global
-}
-
-decl {extern void load_history();} {public local
-}
-
-decl {extern void redraw_browser();} {public local
-}
-
-decl {extern int show_comments;} {public local
-}
-
-decl {extern int G_use_external_editor;} {public local
-}
-
-decl {extern char G_external_editor_command[512];} {public local
-}
-
-decl {extern int show_coredevmenus;} {public local
-}
-
-decl {extern struct Fl_Menu_Item *dbmanager_item;} {public local
-}
-
-decl {extern Fl_Preferences fluid_prefs;} {public local
-}
-
-decl {Fl_Text_Buffer *shell_run_buffer;} {public local
-}
-
-Function {make_project_window()} {open
-} {
-  Fl_Window project_window {
-    label {Project Settings} open
-    xywh {396 475 399 252} type Double hide
-    code0 {\#include <FL/Fl_Preferences.H>}
-    code1 {\#include <FL/Fl_Tooltip.H>} modal
-  } {
-    Fl_Button {} {
-      label Close
-      callback {project_window->hide();}
-      tooltip {Close this dialog.} xywh {328 216 60 25}
-    }
-    Fl_Tabs {} {open
-      xywh {10 10 378 195} selection_color 12
-    } {
-      Fl_Group {} {
-        label Output open
-        xywh {10 36 378 169} hide
-      } {
-        Fl_Box {} {
-          label {Use "name.ext" to set a file name or just ".ext" to set extension.}
-          xywh {20 49 340 49} align 148
-        }
-        Fl_Input header_file_input {
-          label {Header File:}
-          user_data 1 user_data_type {void*}
-          callback header_input_cb
-          tooltip {The name of the generated header file.} xywh {119 103 252 20} box THIN_DOWN_BOX labelfont 1 when 1 textfont 4
-        }
-        Fl_Input code_file_input {
-          label {Code File:}
-          user_data 1 user_data_type {void*}
-          callback code_input_cb
-          tooltip {The name of the generated code file.} xywh {119 128 252 20} box THIN_DOWN_BOX labelfont 1 when 1 textfont 4
-        }
-        Fl_Check_Button include_H_from_C_button {
-          label {Include Header from Code}
-          callback include_H_from_C_button_cb
-          tooltip {Include the header file from the code file.} xywh {117 153 272 20} down_box DOWN_BOX
-        }
-        Fl_Check_Button use_FL_COMMAND_button {
-          label {Menu shortcuts use FL_COMMAND}
-          callback use_FL_COMMAND_button_cb
-          tooltip {Replace FL_CTRL with FL_COMMAND when generating menu shortcut code.} xywh {117 176 272 20} down_box DOWN_BOX
-        }
-      }
-      Fl_Group {} {
-        label Internationalization open
-        xywh {10 36 378 169}
-      } {
-        Fl_Choice i18n_type_chooser {
-          label {Use:}
-          callback i18n_type_cb open
-          tooltip {Type of internationalization to use.} xywh {100 48 136 25} box THIN_UP_BOX down_box BORDER_BOX labelfont 1
-        } {
-          MenuItem {} {
-            label None
-            xywh {0 0 100 20}
-          }
-          MenuItem {} {
-            label {GNU gettext}
-            xywh {0 0 100 20}
-          }
-          MenuItem {} {
-            label {POSIX catgets}
-            xywh {0 0 100 20}
-          }
-        }
-        Fl_Input i18n_include_input {
-          label {\#include:}
-          callback i18n_text_cb selected
-          tooltip {The include file for internationalization.} xywh {100 78 272 20} box THIN_DOWN_BOX labelfont 1 textfont 4
-        }
-        Fl_Input i18n_file_input {
-          label {File:}
-          callback i18n_text_cb
-          tooltip {The name of the message catalog.} xywh {100 104 272 20} box THIN_DOWN_BOX labelfont 1 textfont 4
-        }
-        Fl_Input i18n_set_input {
-          label {Set:}
-          callback i18n_int_cb
-          tooltip {The message set number.} xywh {100 128 272 20} type Int box THIN_DOWN_BOX labelfont 1 textfont 4
-        }
-        Fl_Input i18n_function_input {
-          label {Function:}
-          callback i18n_text_cb
-          tooltip {The function to call to internationalize the labels and tooltips.} xywh {100 103 272 20} box THIN_DOWN_BOX labelfont 1 textfont 4
-        }
-      }
-    }
-  }
-}
-
-decl {extern void i18n_cb(Fl_Choice *,void *);} {public local
-}
-
-decl {void scheme_cb(Fl_Choice *, void *);} {public local
-}
-
-Function {make_settings_window()} {} {
-  Fl_Window settings_window {
-    label {GUI Settings} open
-    xywh {355 85 360 355} type Double hide resizable
-    code0 {o->size_range(o->w(), o->h());} non_modal
-  } {
-    Fl_Choice scheme_choice {
-      label {Scheme: }
-      callback scheme_cb open
-      xywh {140 10 115 25} down_box BORDER_BOX labelfont 1
-      code0 {int s;}
-      code1 {fluid_prefs.get("scheme", s, 0);}
-      code2 {scheme_choice->value(s);}
-      code3 {scheme_cb(0, 0);}
-    } {
-      MenuItem {} {
-        label Default
-        xywh {0 0 35 25}
-      }
-      MenuItem {} {
-        label None
-        xywh {0 0 35 25}
-      }
-      MenuItem {} {
-        label Plastic
-        xywh {0 0 35 25}
-      }
-      MenuItem {} {
-        label {GTK+}
-        xywh {10 10 35 25}
-      }
-      MenuItem {} {
-        label Gleam
-        xywh {20 20 35 25}
-      }
-    }
-    Fl_Group {} {open
-      xywh {20 43 330 161} labelfont 1 align 0
-    } {
-      Fl_Box {} {
-        label {Options: }
-        xywh {140 43 1 25} labelfont 1 align 4
-      }
-      Fl_Check_Button tooltips_button {
-        label {Show Tooltips}
-        callback {Fl_Tooltip::enable(tooltips_button->value());
-fluid_prefs.set("show_tooltips", tooltips_button->value());}
-        xywh {138 43 113 25} down_box DOWN_BOX labelsize 12
-        code0 {int b;}
-        code1 {fluid_prefs.get("show_tooltips", b, 1);}
-        code2 {tooltips_button->value(b);}
-        code3 {Fl_Tooltip::enable(b);}
-      }
-      Fl_Check_Button completion_button {
-        label {Show Completion Dialogs}
-        callback {fluid_prefs.set("show_completion_dialogs", completion_button->value());}
-        xywh {138 68 186 25} down_box DOWN_BOX labelsize 12
-        code0 {int b;}
-        code1 {fluid_prefs.get("show_completion_dialogs", b, 1);}
-        code2 {completion_button->value(b);}
-      }
-      Fl_Check_Button openlast_button {
-        label {Open Previous File on Startup}
-        callback {fluid_prefs.set("open_previous_file", openlast_button->value());}
-        xywh {138 93 214 25} down_box DOWN_BOX labelsize 12
-        code0 {int b;}
-        code1 {fluid_prefs.get("open_previous_file", b, 0);}
-        code2 {openlast_button->value(b);}
-      }
-      Fl_Check_Button prevpos_button {
-        label {Remember Window Positions}
-        callback {fluid_prefs.set("prev_window_pos", prevpos_button->value());}
-        xywh {138 118 209 25} down_box DOWN_BOX labelsize 12
-        code0 {int b;}
-        code1 {fluid_prefs.get("prev_window_pos", b, 1);}
-        code2 {prevpos_button->value(b);}
-      }
-      Fl_Check_Button show_comments_button {
-        label {Show Comments in Browser}
-        callback {show_comments = show_comments_button->value();
-fluid_prefs.set("show_comments", show_comments);
-redraw_browser();}
-        xywh {138 143 209 25} down_box DOWN_BOX labelsize 12
-        code1 {fluid_prefs.get("show_comments", show_comments, 1);}
-        code2 {show_comments_button->value(show_comments);}
-      }
-    }
-    Fl_Spinner recent_spinner {
-      label {\# Recent Files: }
-      callback {fluid_prefs.set("recent_files", recent_spinner->value());
-load_history();}
-      xywh {140 173 40 25} labelfont 1 when 1
-      code0 {int c;}
-      code1 {fluid_prefs.get("recent_files", c, 5);}
-      code2 {recent_spinner->maximum(10);}
-      code3 {recent_spinner->value(c);}
-    }
-    Fl_Group {} {open
-      xywh {10 210 337 95} box THIN_UP_BOX color 47 resizable
-    } {
-      Fl_Check_Button use_external_editor_button {
-        label {Use external editor?}
-        callback {G_use_external_editor = use_external_editor_button->value();
-fluid_prefs.set("use_external_editor", G_use_external_editor);
-redraw_browser();}
-        xywh {25 218 209 22} down_box DOWN_BOX labelsize 12
-        code1 {fluid_prefs.get("use_external_editor", G_use_external_editor, 0);}
-        code2 {use_external_editor_button->value(G_use_external_editor);}
-      }
-      Fl_Input editor_command_input {
-        label {Editor Command}
-        callback {strncpy(G_external_editor_command, editor_command_input->value(), sizeof(G_external_editor_command)-1);
-G_external_editor_command[sizeof(G_external_editor_command)-1] = 0;
-fluid_prefs.set("external_editor_command", G_external_editor_command);
-redraw_browser();} selected
-        tooltip {The editor command to open your external text editor.
-Include any necessary flags to ensure your editor does not background itself.
-Examples:
-    gvim -f
-    gedit
- emacs} xywh {25 264 305 21} labelsize 12 align 5 when 1 textsize 12
-        code1 {fluid_prefs.get("external_editor_command", G_external_editor_command, "", sizeof(G_external_editor_command)-1);}
-        code2 {editor_command_input->value(G_external_editor_command);}
-      }
-    }
-    Fl_Button {} {
-      label Close
-      callback {settings_window->hide();}
-      tooltip {Close this dialog.} xywh {285 320 64 25}
-    }
-  }
-}
-
-Function {make_shell_window()} {} {
-  Fl_Window shell_window {
-    label {Shell Command} open
-    xywh {761 190 365 125} type Double hide
-  } {
-    Fl_Input shell_command_input {
-      label {Command:}
-      callback {fluid_prefs.set("shell_command", shell_command_input->value());}
-      xywh {10 27 347 25} labelfont 1 align 5
-      code0 {char buf[1024];}
-      code1 {fluid_prefs.get("shell_command", buf, "", sizeof(buf));}
-      code2 {shell_command_input->value(buf);}
-    }
-    Fl_Check_Button shell_writecode_button {
-      label {Write Code}
-      callback {fluid_prefs.set("shell_writecode", shell_writecode_button->value());}
-      xywh {128 61 93 19} down_box DOWN_BOX
-      code0 {int b;}
-      code1 {fluid_prefs.get("shell_writecode", b, 1);}
-      code2 {shell_writecode_button->value(b);}
-    }
-    Fl_Check_Button shell_writemsgs_button {
-      label {Write Messages}
-      callback {fluid_prefs.set("shell_writemsgs", shell_writemsgs_button->value());}
-      xywh {231 61 126 19} down_box DOWN_BOX
-      code0 {int b;}
-      code1 {fluid_prefs.get("shell_writemsgs", b, 0);}
-      code2 {shell_writemsgs_button->value(b);}
-    }
-    Fl_Check_Button shell_savefl_button {
-      label {Save .FL File}
-      callback {fluid_prefs.set("shell_savefl", shell_savefl_button->value());}
-      xywh {10 62 108 19} down_box DOWN_BOX
-      code0 {int b;}
-      code1 {fluid_prefs.get("shell_savefl", b, 1);}
-      code2 {shell_savefl_button->value(b);}
-    }
-    Fl_Return_Button {} {
-      label {Run Command}
-      callback do_shell_command
-      xywh {132 90 143 25}
-    }
-    Fl_Button {} {
-      label Cancel
-      callback {shell_window->hide();}
-      xywh {285 90 72 25}
-    }
-  }
-  Fl_Window shell_run_window {
-    label {Shell Command Output}
-    xywh {592 332 555 430} type Double hide resizable
-  } {
-    Fl_Text_Display shell_run_display {
-      xywh {10 10 535 375} box DOWN_BOX textfont 4 resizable
-      code0 {shell_run_buffer = new Fl_Text_Buffer();}
-      code1 {shell_run_display->buffer(shell_run_buffer);}
-    }
-    Fl_Return_Button shell_run_button {
-      label Close
-      callback {shell_run_window->hide();}
-      xywh {468 395 77 25}
-    }
-  }
-}
-
-Function {make_layout_window()} {} {
-  Fl_Window grid_window {
-    label {Layout Settings} open
-    xywh {812 369 310 245} type Double hide non_modal
-  } {
-    Fl_Input horizontal_input {
-      label x
-      user_data 1 user_data_type long
-      callback grid_cb
-      tooltip {Horizontal grid spacing.} xywh {116 10 50 25} type Int box THIN_DOWN_BOX align 8
-      code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);}
-    }
-    Fl_Input vertical_input {
-      label pixels
-      user_data 2 user_data_type long
-      callback grid_cb
-      tooltip {Vertical grid spacing.} xywh {179 10 50 25} type Int box THIN_DOWN_BOX align 8
-      code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);}
-    }
-    Fl_Input snap_input {
-      label {pixel snap}
-      user_data 3 user_data_type long
-      callback grid_cb
-      tooltip {Snap to grid within this many pixels.} xywh {116 45 50 25} type Int box THIN_DOWN_BOX align 8
-      code0 {o->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);}
-    }
-    Fl_Check_Button guides_toggle {
-      label {Show Guides}
-      user_data 4 user_data_type long
-      callback guides_cb
-      tooltip {Show distance and alignment guides in overlay} xywh {116 80 110 25} down_box DOWN_BOX
-    }
-    Fl_Button {} {
-      label Close
-      callback {grid_window->hide();}
-      tooltip {Close this dialog.} xywh {240 210 60 25}
-    }
-    Fl_Box {} {
-      label {Grid:}
-      xywh {47 10 70 25} labelfont 1 align 24
-    }
-    Fl_Box {} {
-      label {Widget Size:}
-      xywh {10 115 107 25} labelfont 1 align 24
-    }
-    Fl_Group {} {open
-      xywh {105 115 170 75}
-    } {
-      Fl_Round_Button {def_widget_size[0]} {
-        user_data 8 user_data_type long
-        callback default_widget_size_cb
-        xywh {115 115 70 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label tiny
-        xywh {130 115 50 25} labelsize 8 align 20
-      }
-      Fl_Round_Button {def_widget_size[1]} {
-        user_data 11 user_data_type long
-        callback default_widget_size_cb
-        xywh {202 115 70 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label small
-        xywh {218 115 50 25} labelsize 11 align 20
-      }
-      Fl_Round_Button {def_widget_size[2]} {
-        user_data 14 user_data_type long
-        callback default_widget_size_cb
-        xywh {115 140 70 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label normal
-        xywh {130 140 50 25} align 20
-      }
-      Fl_Round_Button {def_widget_size[3]} {
-        user_data 18 user_data_type long
-        callback default_widget_size_cb
-        xywh {202 140 90 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label medium
-        xywh {218 140 68 25} labelsize 18 align 20
-      }
-      Fl_Round_Button {def_widget_size[4]} {
-        user_data 24 user_data_type long
-        callback default_widget_size_cb
-        xywh {115 165 75 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label large
-        xywh {130 165 64 25} labelsize 24 align 20
-      }
-      Fl_Round_Button {def_widget_size[5]} {
-        user_data 32 user_data_type long
-        callback default_widget_size_cb
-        xywh {202 165 95 25} type Radio down_box ROUND_DOWN_BOX
-      }
-      Fl_Box {} {
-        label huge
-        xywh {218 165 76 25} labelsize 32 align 20
-      }
-    }
-  }
-}
-
-decl {int opt[10][2];} {
-  comment {Copy of all options in user and system mode} private local
-}
-
-Function {refreshUI()} {
-  comment {Update the UI using the values in the opt array} private return_type void
-} {
-  code {int mode = wUserOrSystem->value();
-wVisibleFocus->value(opt[Fl::OPTION_VISIBLE_FOCUS][mode]);
-wArrowFocus->value(opt[Fl::OPTION_ARROW_FOCUS][mode]);
-wShowTooltips->value(opt[Fl::OPTION_SHOW_TOOLTIPS][mode]);
-wDNDText->value(opt[Fl::OPTION_DND_TEXT][mode]);
-wGTKText->value(opt[Fl::OPTION_FNFC_USES_GTK][mode]);} {}
-}
-
-Function {readPrefs()} {
-  comment {read all preferences and refresh the GUI} private return_type void
-} {
-  code {// read all preferences and refresh the GUI
-{
-  Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-  Fl_Preferences opt_prefs(prefs, "options");
-  opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1], 2);
-  opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1], 2);
-  opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][1], 2);
-  opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1], 2);
-  opt_prefs.get("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK ][1], 2);
-}
-{
-  Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-  Fl_Preferences opt_prefs(prefs, "options");
-  opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0], 2);
-  opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0], 2);
-  opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][0], 2);
-  opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0], 2);
-  opt_prefs.get("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK ][0], 2);
-}
-refreshUI();} {}
-}
-
-Function {writePrefs()} {
-  comment {write all preferences using the array} private return_type void
-} {
-  code {// write all preferences using the array
-{
-  Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-  Fl_Preferences opt_prefs(prefs, "options");
-  if (opt[Fl::OPTION_ARROW_FOCUS][1]==2) opt_prefs.deleteEntry("ArrowFocus");
-  else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1]);
-  if (opt[Fl::OPTION_VISIBLE_FOCUS][1]==2) opt_prefs.deleteEntry("VisibleFocus");
-  else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1]);
-  if (opt[Fl::OPTION_DND_TEXT][1]==2) opt_prefs.deleteEntry("DNDText");
-  else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][1]);
-  if (opt[Fl::OPTION_SHOW_TOOLTIPS][1]==2) opt_prefs.deleteEntry("ShowTooltips");
-  else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1]);
-  if (opt[Fl::OPTION_FNFC_USES_GTK][1]==2) opt_prefs.deleteEntry("FNFCUsesGTK");
-  else opt_prefs.set("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK][1]);
-}
-{
-  Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-  Fl_Preferences opt_prefs(prefs, "options");
-  if (opt[Fl::OPTION_ARROW_FOCUS][0]==2) opt_prefs.deleteEntry("ArrowFocus");
-  else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0]);
-  if (opt[Fl::OPTION_VISIBLE_FOCUS][0]==2) opt_prefs.deleteEntry("VisibleFocus");
-  else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0]);
-  if (opt[Fl::OPTION_DND_TEXT][0]==2) opt_prefs.deleteEntry("DNDText");
-  else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][0]);
-  if (opt[Fl::OPTION_SHOW_TOOLTIPS][0]==2) opt_prefs.deleteEntry("ShowTooltips");
-  else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0]);
-  if (opt[Fl::OPTION_FNFC_USES_GTK][0]==2) opt_prefs.deleteEntry("FNFCUsesGTK");
-  else opt_prefs.set("FNFCUsesGTK", opt[Fl::OPTION_FNFC_USES_GTK][0]);
-}} {}
-}
-
-Function {show_global_settings_window()} {open return_type void
-} {
-  code {if (!global_settings_window)
-  make_global_settings_window();
-readPrefs();
-refreshUI();
-fl_message(
-	"WARNING!\\n\\n"
-	"The following dialog changes the user interface behavior\\n"
-	"of ALL FLTK applications, for the current user, or for \\n"
-	"ALL users on this machine.\\n\\n"
-	"Please choose these settings carefully, or reset\\n"
-	"user and system settings to \\"default\\".");
-global_settings_window->show();} {}
-}
-
-Function {make_global_settings_window()} {} {
-  Fl_Window global_settings_window {
-    label {FLTK Preferences} open
-    xywh {1147 190 400 378} type Double color 50 hide
-  } {
-    Fl_Group {} {
-      label {Keyboard Focus Options} open
-      xywh {10 10 380 100} box GTK_DOWN_BOX labelfont 2 align 21
-    } {
-      Fl_Choice wVisibleFocus {
-        label {Visible Keyboard Focus:}
-        callback {int mode = wUserOrSystem->value();
-opt[Fl::OPTION_VISIBLE_FOCUS][mode] = wVisibleFocus->value();} open
-        tooltip {OPTION_VISIBLE_FOCUS
-
-If visible focus is switched on, FLTK will draw a dotted rectangle inside the widget that will receive the next keystroke. If switched off, no such indicator will be drawn and keyboard navigation is disabled.
-
-Default is on.} xywh {245 40 100 25} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label off
-          user_data 0 user_data_type long
-          xywh {10 10 31 20}
-        }
-        MenuItem {} {
-          label on
-          user_data 1 user_data_type long
-          xywh {10 10 31 20} divider
-        }
-        MenuItem {} {
-          label default
-          user_data 2 user_data_type long
-          xywh {10 10 31 20}
-        }
-      }
-      Fl_Choice wArrowFocus {
-        label {Arrow Keys move Focus:}
-        callback {int mode = wUserOrSystem->value();
-opt[Fl::OPTION_ARROW_FOCUS][mode] = wArrowFocus->value();} open
-        tooltip {OPTION_ARROW_FOCUS
-
-When switched on, moving the text cursor beyond the start or end of the text in a text widget will change focus to the next widget. When switched off, the cursor will stop at the end of the text. Pressing Tab or Ctrl-Tab will advance the keyboard focus. Switch this on, if you want the old behavior of FLTK 1.1.
-
-Default is off.} xywh {245 75 100 25} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label off
-          user_data 0 user_data_type long
-          xywh {0 0 31 20}
-        }
-        MenuItem {} {
-          label on
-          user_data 1 user_data_type long
-          xywh {0 0 31 20} divider
-        }
-        MenuItem {} {
-          label default
-          user_data 2 user_data_type long
-          xywh {0 0 31 20}
-        }
-      }
-    }
-    Fl_Group {} {
-      label {Tooltip Options} open
-      xywh {10 120 380 65} box GTK_DOWN_BOX labelfont 2 align 21
-    } {
-      Fl_Choice wShowTooltips {
-        label {Show Tooltips:}
-        callback {int mode = wUserOrSystem->value();
-opt[Fl::OPTION_SHOW_TOOLTIPS][mode] = wShowTooltips->value();} open
-        tooltip {OPTION_SHOW_TOOLTIPS
-
-If tooltips are enabled, hovering the mouse over a widget with a tooltip text will open a little tooltip window until the mouse leaves the widget. If disabled, no tooltip is shown.
-
-Default is on.} xywh {245 150 100 25} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label off
-          user_data 0 user_data_type long
-          xywh {10 10 31 20}
-        }
-        MenuItem {} {
-          label on
-          user_data 1 user_data_type long
-          xywh {10 10 31 20} divider
-        }
-        MenuItem {} {
-          label default
-          user_data 2 user_data_type long
-          xywh {10 10 31 20}
-        }
-      }
-    }
-    Fl_Group {} {
-      label {Drag And Drop Options} open
-      xywh {10 194 380 66} box GTK_DOWN_BOX labelfont 2 align 21
-    } {
-      Fl_Choice wDNDText {
-        label {Allow dragging Text:}
-        callback {int mode = wUserOrSystem->value();
-opt[Fl::OPTION_DND_TEXT][mode] = wDNDText->value();} open
-        tooltip {OPTION_DND_TEXT
-
-If text drag-and-drop is enabled, the user can select and drag text from any text widget. If disabled, no dragging is possible, however dropping text from other applications still works.
-
-Default is on.} xywh {245 225 100 25} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label off
-          user_data 0 user_data_type long
-          xywh {30 30 31 20}
-        }
-        MenuItem {} {
-          label on
-          user_data 1 user_data_type long
-          xywh {30 30 31 20} divider
-        }
-        MenuItem {} {
-          label default
-          user_data 2 user_data_type long
-          xywh {30 30 31 20}
-        }
-      }
-    }
-    Fl_Group {} {
-      label {Native File Chooser Options} open
-      xywh {10 269 380 66} box GTK_DOWN_BOX labelfont 2 align 21
-    } {
-      Fl_Choice wGTKText {
-        label {Native File Chooser uses GTK:}
-        callback {int mode = wUserOrSystem->value();
-opt[Fl::OPTION_FNFC_USES_GTK ][mode] = wGTKText->value();} open
-        tooltip {OPTION_FNFC_USES_GTK
-        
-If 'Native File Chooser uses GTK' is enabled, the Fl_Native_File_Chooser class
-calls the GTK open/save file dialogs when they are available on the platfom. If disabled, the Fl_Native_File_Chooser class
-always uses FLTK's own file dialog (i.e., Fl_File_Chooser) even if GTK is available.
-
-Default is on.} xywh {245 300 100 25} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label off
-          user_data 0 user_data_type long
-          xywh {30 30 31 20}
-        }
-        MenuItem {} {
-          label on
-          user_data 1 user_data_type long
-          xywh {30 30 31 20} divider
-        }
-        MenuItem {} {
-          label default
-          user_data 2 user_data_type long
-          xywh {30 30 31 20}
-        }
-      }
-    }
-    Fl_Choice wUserOrSystem {
-      callback {refreshUI();} open
-      tooltip {Change settings for the current user, or default values for all users of this computer. Individual users can override system options, if they set their options to specific values (not 'default').} xywh {10 345 141 25} down_box BORDER_BOX
-    } {
-      MenuItem {} {
-        label {User Settings}
-        user_data 0 user_data_type long
-        xywh {0 0 31 20}
-      }
-      MenuItem {} {
-        label {System Settings}
-        user_data 1 user_data_type long
-        xywh {0 0 31 20}
-      }
-    }
-    Fl_Button {} {
-      label Cancel
-      callback {global_settings_window->hide();}
-      xywh {230 345 75 25}
-    }
-    Fl_Button {} {
-      label OK
-      callback {writePrefs();
-global_settings_window->hide();}
-      xywh {315 345 75 25}
-    }
-  }
-  code {readPrefs();
-  Fl::option(Fl::OPTION_SHOW_TOOLTIPS,1); // make sure tooltips are on !} {}
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/alignment_panel.h
+++ /dev/null
@@ -1,124 +1,0 @@
-//
-// "$Id$"
-//
-// Setting and shell dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef alignment_panel_h
-#define alignment_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/filename.H>
-extern void load_history();
-extern void redraw_browser();
-extern int show_comments;
-extern int G_use_external_editor;
-extern char G_external_editor_command[512];
-extern int show_coredevmenus;
-extern struct Fl_Menu_Item *dbmanager_item;
-extern Fl_Preferences fluid_prefs;
-extern Fl_Text_Buffer *shell_run_buffer; 
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Tooltip.H>
-extern Fl_Double_Window *project_window;
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Input.H>
-extern void header_input_cb(Fl_Input*, void*);
-extern Fl_Input *header_file_input;
-extern void code_input_cb(Fl_Input*, void*);
-extern Fl_Input *code_file_input;
-#include <FL/Fl_Check_Button.H>
-extern void include_H_from_C_button_cb(Fl_Check_Button*, void*);
-extern Fl_Check_Button *include_H_from_C_button;
-extern void use_FL_COMMAND_button_cb(Fl_Check_Button*, void*);
-extern Fl_Check_Button *use_FL_COMMAND_button;
-#include <FL/Fl_Choice.H>
-extern void i18n_type_cb(Fl_Choice*, void*);
-extern Fl_Choice *i18n_type_chooser;
-extern void i18n_text_cb(Fl_Input*, void*);
-extern Fl_Input *i18n_include_input;
-extern Fl_Input *i18n_file_input;
-#include <FL/Fl_Int_Input.H>
-extern void i18n_int_cb(Fl_Int_Input*, void*);
-extern Fl_Int_Input *i18n_set_input;
-extern Fl_Input *i18n_function_input;
-Fl_Double_Window* make_project_window();
-extern Fl_Menu_Item menu_i18n_type_chooser[];
-extern void i18n_cb(Fl_Choice *,void *);
-extern void scheme_cb(Fl_Choice *, void *); 
-extern Fl_Double_Window *settings_window;
-extern void scheme_cb(Fl_Choice*, void*);
-extern Fl_Choice *scheme_choice;
-extern Fl_Check_Button *tooltips_button;
-extern Fl_Check_Button *completion_button;
-extern Fl_Check_Button *openlast_button;
-extern Fl_Check_Button *prevpos_button;
-extern Fl_Check_Button *show_comments_button;
-#include <FL/Fl_Spinner.H>
-extern Fl_Spinner *recent_spinner;
-extern Fl_Check_Button *use_external_editor_button;
-extern Fl_Input *editor_command_input;
-Fl_Double_Window* make_settings_window();
-extern Fl_Menu_Item menu_scheme_choice[];
-extern Fl_Double_Window *shell_window;
-extern Fl_Input *shell_command_input;
-extern Fl_Check_Button *shell_writecode_button;
-extern Fl_Check_Button *shell_writemsgs_button;
-extern Fl_Check_Button *shell_savefl_button;
-#include <FL/Fl_Return_Button.H>
-extern void do_shell_command(Fl_Return_Button*, void*);
-extern Fl_Double_Window *shell_run_window;
-#include <FL/Fl_Text_Display.H>
-extern Fl_Text_Display *shell_run_display;
-extern Fl_Return_Button *shell_run_button;
-Fl_Double_Window* make_shell_window();
-extern Fl_Double_Window *grid_window;
-extern void grid_cb(Fl_Int_Input*, long);
-extern Fl_Int_Input *horizontal_input;
-extern Fl_Int_Input *vertical_input;
-extern Fl_Int_Input *snap_input;
-extern void guides_cb(Fl_Check_Button*, long);
-extern Fl_Check_Button *guides_toggle;
-#include <FL/Fl_Round_Button.H>
-extern void default_widget_size_cb(Fl_Round_Button*, long);
-extern Fl_Round_Button *def_widget_size[6];
-Fl_Double_Window* make_layout_window();
-void show_global_settings_window();
-extern Fl_Double_Window *global_settings_window;
-extern Fl_Choice *wVisibleFocus;
-extern Fl_Choice *wArrowFocus;
-extern Fl_Choice *wShowTooltips;
-extern Fl_Choice *wDNDText;
-extern Fl_Choice *wGTKText;
-extern Fl_Choice *wUserOrSystem;
-Fl_Double_Window* make_global_settings_window();
-extern Fl_Menu_Item menu_wVisibleFocus[];
-extern Fl_Menu_Item menu_wArrowFocus[];
-extern Fl_Menu_Item menu_wShowTooltips[];
-extern Fl_Menu_Item menu_wDNDText[];
-extern Fl_Menu_Item menu_wGTKText[];
-extern Fl_Menu_Item menu_wUserOrSystem[];
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/code.cxx
+++ /dev/null
@@ -1,599 +1,0 @@
-//
-// "$Id$"
-//
-// Code output routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <stdarg.h>
-
-#include <FL/Fl.H>
-#include "Fl_Type.h"
-#include "alignment_panel.h"
-
-static FILE *code_file;
-static FILE *header_file;
-
-extern char i18n_program[];
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-
-// return true if c can be in a C identifier.  I needed this so
-// it is not messed up by locale settings:
-int is_id(char c) {
-  return (c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9') || c=='_';
-}
-
-////////////////////////////////////////////////////////////////
-// Generate unique but human-readable identifiers:
-
-struct id {
-  char* text;
-  void* object;
-  id *left, *right;
-  id (const char* t, void* o) : text(strdup(t)), object(o) {left = right = 0;}
-  ~id();
-};
-
-id::~id() {
-  delete left;
-  free((void *)text);
-  delete right;
-}
-
-static id* id_root;
-
-const char* unique_id(void* o, const char* type, const char* name, const char* label) {
-  char buffer[128];
-  char* q = buffer;
-  while (*type) *q++ = *type++;
-  *q++ = '_';
-  const char* n = name;
-  if (!n || !*n) n = label;
-  if (n && *n) {
-    while (*n && !is_id(*n)) n++;
-    while (is_id(*n)) *q++ = *n++;
-  }
-  *q = 0;
-  // okay, search the tree and see if the name was already used:
-  id** p = &id_root;
-  int which = 0;
-  while (*p) {
-    int i = strcmp(buffer, (*p)->text);
-    if (!i) {
-      if ((*p)->object == o) return (*p)->text;
-      // already used, we need to pick a new name:
-      sprintf(q,"%x",++which);
-      p = &id_root;
-      continue;
-    }
-    else if (i < 0) p = &((*p)->left);
-    else p  = &((*p)->right);
-  }
-  *p = new id(buffer, o);
-  return (*p)->text;
-}
-
-////////////////////////////////////////////////////////////////
-// return current indentation:
-
-static const char* spaces = "                ";
-int indentation;
-const char* indent() {
-  int i = indentation; if (i>16) i = 16;
-  return spaces+16-i;
-}
-
-////////////////////////////////////////////////////////////////
-// declarations/include files:
-// Each string generated by write_declare is written only once to
-// the header file.  This is done by keeping a binary tree of all
-// the calls so far and not printing it if it is in the tree.
-
-struct included {
-  char *text;
-  included *left, *right;
-  included(const char *t) {
-    text = strdup(t);
-    left = right = 0;
-  }
-  ~included();
-};
-
-included::~included() {
-  delete left;
-  free((void *)text);
-  delete right;
-}
-static included *included_root;
-
-int write_declare(const char *format, ...) {
-  va_list args;
-  char buf[1024];
-  va_start(args, format);
-  vsnprintf(buf, sizeof(buf), format, args);
-  va_end(args);
-  included **p = &included_root;
-  while (*p) {
-    int i = strcmp(buf,(*p)->text);
-    if (!i) return 0;
-    else if (i < 0) p = &((*p)->left);
-    else p  = &((*p)->right);
-  }
-  fprintf(header_file,"%s\n",buf);
-  *p = new included(buf);
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-// silly thing to prevent declaring unused variables:
-// When this symbol is on, all attempts to write code don't write
-// anything, but set a variable if it looks like the variable "o" is used:
-int varused_test;
-int varused;
-
-// write an array of C characters (adds a null):
-void write_cstring(const char *s, int length) {
-  if (varused_test) {
-    varused = 1;
-    return;
-  }
-  const char *p = s;
-  const char *e = s+length;
-  int linelength = 1;
-  putc('\"', code_file);
-  for (; p < e;) {
-    int c = *p++;
-    switch (c) {
-    case '\b': c = 'b'; goto QUOTED;
-    case '\t': c = 't'; goto QUOTED;
-    case '\n': c = 'n'; goto QUOTED;
-    case '\f': c = 'f'; goto QUOTED;
-    case '\r': c = 'r'; goto QUOTED;
-    case '\"':
-    case '\'':
-    case '\\':
-    QUOTED:
-      if (linelength >= 77) {fputs("\\\n",code_file); linelength = 0;}
-      putc('\\', code_file);
-      putc(c, code_file);
-      linelength += 2;
-      break;
-    case '?': // prevent trigraphs by writing ?? as ?\?
-      if (p-2 >= s && *(p-2) == '?') goto QUOTED;
-      // else fall through:
-    default:
-      if (c >= ' ' && c < 127) {
-	// a legal ASCII character
-	if (linelength >= 78) {fputs("\\\n",code_file); linelength = 0;}
-	putc(c, code_file);
-	linelength++;
-	break;
-      }
-      // otherwise we must print it as an octal constant:
-      c &= 255;
-      if (c < 8) {
-	if (linelength >= 76) {fputs("\\\n",code_file); linelength = 0;}
-	fprintf(code_file, "\\%o",c);
-	linelength += 2;
-      } else if (c < 64) {
-	if (linelength >= 75) {fputs("\\\n",code_file); linelength = 0;}
-	fprintf(code_file, "\\%o",c);
-	linelength += 3;
-      } else {
-	if (linelength >= 74) {fputs("\\\n",code_file); linelength = 0;}
-	fprintf(code_file, "\\%o",c);
-	linelength += 4;
-      }
-      // We must not put more numbers after it, because some C compilers
-      // consume them as part of the quoted sequence.  Use string constant
-      // pasting to avoid this:
-      c = *p;
-      if (p < e && ( (c>='0'&&c<='9') || (c>='a'&&c<='f') || (c>='A'&&c<='F') )) {
-	putc('\"', code_file); linelength++;
-	if (linelength >= 79) {fputs("\n",code_file); linelength = 0;}
-	putc('\"', code_file); linelength++;
-      }
-      break;
-    }
-  }
-  putc('\"', code_file);
-}
-
-// write a C string, quoting characters if necessary:
-void write_cstring(const char *s) {write_cstring(s,strlen(s));}
-
-// write an array of C binary data (does not add a null):
-void write_cdata(const char *s, int length) {
-  if (varused_test) {
-    varused = 1;
-    return;
-  }
-  if (write_sourceview) {
-    if (length>=0)
-      fprintf(code_file, "{ /* ... %d bytes of binary data... */ }", length);
-    else
-      fprintf(code_file, "{ /* ... binary data... */ }");
-    return;
-  }
-  if (length==-1) {
-    fprintf(code_file, "{ /* ... undefined size binary data... */ }");
-    return;
-  }
-  const unsigned char *w = (const unsigned char *)s;
-  const unsigned char *e = w+length;
-  int linelength = 1;
-  putc('{', code_file);
-  for (; w < e;) {
-    unsigned char c = *w++;
-    if (c>99) linelength += 4;
-    else if (c>9) linelength += 3;
-    else linelength += 2;
-    if (linelength >= 77) {fputs("\n",code_file); linelength = 0;}
-    fprintf(code_file, "%d", c);
-    if (w<e) putc(',', code_file);
-  }
-  putc('}', code_file);
-}
-
-void vwrite_c(const char* format, va_list args) {
-  if (varused_test) {
-    varused = 1;
-    return;
-  }
-  vfprintf(code_file, format, args);
-}
-
-void write_c(const char* format,...) {
-  va_list args;
-  va_start(args, format);
-  vwrite_c(format, args);
-  va_end(args);
-}
-
-void write_h(const char* format,...) {
-  if (varused_test) return;
-  va_list args;
-  va_start(args, format);
-  vfprintf(header_file, format, args);
-  va_end(args);
-}
-
-#include <FL/filename.H>
-int write_number;
-int write_sourceview;
-extern Fl_Widget_Class_Type *current_widget_class;
-
-// recursively dump code, putting children between the two parts
-// of the parent code:
-static Fl_Type* write_code(Fl_Type* p) {
-  if (write_sourceview) {
-    p->code_position = (int)ftell(code_file);
-    if (p->header_position_end==-1)
-      p->header_position = (int)ftell(header_file);
-  }
-  // write all code that come before the children code
-  // (but don't write the last comment until the very end)
-  if (!(p==Fl_Type::last && p->is_comment()))
-    p->write_code1();
-  // recursively write the code of all children
-  Fl_Type* q;
-  if (p->is_widget() && p->is_class()) {
-    // Handle widget classes specially
-    for (q = p->next; q && q->level > p->level;) {
-      if (strcmp(q->type_name(), "Function")) q = write_code(q);
-      else {
-        int level = q->level;
-	do {
-	  q = q->next;
-	} while (q && q->level > level);
-      }
-    }
-
-    // write all code that come after the children 
-    p->write_code2();
-
-    for (q = p->next; q && q->level > p->level;) {
-      if (!strcmp(q->type_name(), "Function")) q = write_code(q);
-      else {
-        int level = q->level;
-	do {
-	  q = q->next;
-	} while (q && q->level > level);
-      }
-    }
-
-    write_h("};\n");
-    current_widget_class = 0L;
-  } else {
-    for (q = p->next; q && q->level > p->level;) q = write_code(q);
-    // write all code that come after the children 
-    p->write_code2();
-  }
-  if (write_sourceview) {
-    p->code_position_end = (int)ftell(code_file);
-    if (p->header_position_end==-1)
-      p->header_position_end = (int)ftell(header_file);
-  }
-  return q;
-}
-
-extern const char* header_file_name;
-extern Fl_Class_Type *current_class;
-
-int write_code(const char *s, const char *t) {
-  const char *filemode = "w";
-  if (write_sourceview) 
-    filemode = "wb";
-  write_number++;
-  delete id_root; id_root = 0;
-  indentation = 0;
-  current_class = 0L;
-  current_widget_class = 0L;
-  if (!s) code_file = stdout;
-  else {
-    FILE *f = fl_fopen(s, filemode);
-    if (!f) return 0;
-    code_file = f;
-  }
-  if (!t) header_file = stdout;
-  else {
-    FILE *f = fl_fopen(t, filemode);
-    if (!f) {fclose(code_file); return 0;}
-    header_file = f;
-  }
-  // if the first entry in the Type tree is a comment, then it is probably 
-  // a copyright notice. We print that before anything else in the file!
-  Fl_Type* first_type = Fl_Type::first;
-  if (first_type && first_type->is_comment()) {
-    if (write_sourceview) {
-      first_type->code_position = (int)ftell(code_file);
-      first_type->header_position = (int)ftell(header_file);
-    }
-    // it is ok to write non-recusive code here, because comments have no children or code2 blocks
-    first_type->write_code1();
-    if (write_sourceview) {
-      first_type->code_position_end = (int)ftell(code_file);
-      first_type->header_position_end = (int)ftell(header_file);
-    }
-    first_type = first_type->next;
-  }
-
-  const char *hdr = "\
-// generated by Fast Light User Interface Designer (fluid) version %.4f\n\n";
-  fprintf(header_file, hdr, FL_VERSION);
-  fprintf(code_file, hdr, FL_VERSION);
-
-  {char define_name[102];
-  const char* a = fl_filename_name(t);
-  char* b = define_name;
-  if (!isalpha(*a)) {*b++ = '_';}
-  while (*a) {*b++ = isalnum(*a) ? *a : '_'; a++;}
-  *b = 0;
-  fprintf(header_file, "#ifndef %s\n", define_name);
-  fprintf(header_file, "#define %s\n", define_name);
-  }  
-
-  write_declare("#include <FL/Fl.H>");
-  if (i18n_type && i18n_include[0]) {
-    if (i18n_include[0] != '<' &&
-        i18n_include[0] != '\"')
-      write_c("#include \"%s\"\n", i18n_include);
-    else
-      write_c("#include %s\n", i18n_include);
-    if (i18n_type == 2) {
-      if (i18n_file[0]) write_c("extern nl_catd %s;\n", i18n_file);
-      else {
-        write_c("// Initialize I18N stuff now for menus...\n");
-        write_c("#include <locale.h>\n");
-	write_c("static char *_locale = setlocale(LC_MESSAGES, \"\");\n");
-        write_c("static nl_catd _catalog = catopen(\"%s\", 0);\n",
-                   i18n_program);
-      }
-    }
-  }
-  if (t && include_H_from_C) {
-    if (*header_file_name == '.' && strchr(header_file_name, '/') == NULL) {
-      write_c("#include \"%s\"\n", fl_filename_name(t));
-    } else {
-      write_c("#include \"%s\"\n", t);
-    }
-  }
-  for (Fl_Type* p = first_type; p;) {
-    // write all static data for this & all children first
-    if (write_sourceview) p->header_position = (int)ftell(header_file);
-    p->write_static();
-    if (write_sourceview) {
-      p->header_position_end = (int)ftell(header_file);
-      if (p->header_position==p->header_position_end) p->header_position_end = -1;
-    }
-    for (Fl_Type* q = p->next; q && q->level > p->level; q = q->next) {
-      if (write_sourceview) q->header_position = (int)ftell(header_file);
-      q->write_static();
-      if (write_sourceview) {
-        q->header_position_end = (int)ftell(header_file);
-        if (q->header_position==q->header_position_end) q->header_position_end = -1;
-      }
-    }
-    // then write the nested code:
-    p = write_code(p);
-  }
-
-  delete included_root; included_root = 0;
-
-  if (!s) return 1;
-
-  fprintf(header_file, "#endif\n");
-
-  Fl_Type* last_type = Fl_Type::last;
-  if (last_type && last_type->is_comment()) {
-    if (write_sourceview) {
-      last_type->code_position = (int)ftell(code_file);
-      last_type->header_position = (int)ftell(header_file);
-    }
-    last_type->write_code1();
-    if (write_sourceview) {
-      last_type->code_position_end = (int)ftell(code_file);
-      last_type->header_position_end = (int)ftell(header_file);
-    }
-  }
-
-  int x = fclose(code_file);
-  code_file = 0;
-  int y = fclose(header_file);
-  header_file = 0;
-  return x >= 0 && y >= 0;
-}
-
-int write_strings(const char *sfile) {
-  FILE *fp = fl_fopen(sfile, "w");
-  Fl_Type *p;
-  Fl_Widget_Type *w;
-  int i;
-
-  if (!fp) return 1;
-
-  switch (i18n_type) {
-  case 0 : /* None, just put static text out */
-      fprintf(fp, "# generated by Fast Light User Interface Designer (fluid) version %.4f\n",
-	      FL_VERSION);
-      for (p = Fl_Type::first; p; p = p->next) {
-        if (p->is_widget()) {
-	  w = (Fl_Widget_Type *)p;
-
-	  if (w->label()) {
-	    for (const char *s = w->label(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            putc('\n', fp);
-	  }
-
-	  if (w->tooltip()) {
-	    for (const char *s = w->tooltip(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            putc('\n', fp);
-	  }
-	}
-      }
-      break;
-  case 1 : /* GNU gettext, put a .po file out */
-      fprintf(fp, "# generated by Fast Light User Interface Designer (fluid) version %.4f\n",
-	      FL_VERSION);
-      for (p = Fl_Type::first; p; p = p->next) {
-        if (p->is_widget()) {
-	  w = (Fl_Widget_Type *)p;
-
-	  if (w->label()) {
-	    const char *s;
-
-	    fputs("msgid \"", fp);
-	    for (s = w->label(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-
-	    fputs("msgstr \"", fp);
-	    for (s = w->label(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-	  }
-
-	  if (w->tooltip()) {
-	    const char *s;
-
-	    fputs("msgid \"", fp);
-	    for (s = w->tooltip(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-
-	    fputs("msgstr \"", fp);
-	    for (s = w->tooltip(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-	  }
-	}
-      }
-      break;
-  case 2 : /* POSIX catgets, put a .msg file out */
-      fprintf(fp, "$ generated by Fast Light User Interface Designer (fluid) version %.4f\n",
-	      FL_VERSION);
-      fprintf(fp, "$set %s\n", i18n_set);
-      fputs("$quote \"\n", fp);
-
-      for (i = 1, p = Fl_Type::first; p; p = p->next) {
-        if (p->is_widget()) {
-	  w = (Fl_Widget_Type *)p;
-
-	  if (w->label()) {
-	    fprintf(fp, "%d \"", i ++);
-	    for (const char *s = w->label(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-	  }
-
-	  if (w->tooltip()) {
-	    fprintf(fp, "%d \"", i ++);
-	    for (const char *s = w->tooltip(); *s; s ++)
-	      if (*s < 32 || *s > 126 || *s == '\"')
-		fprintf(fp, "\\%03o", *s);
-	      else
-		putc(*s, fp);
-            fputs("\"\n", fp);
-	  }
-	}
-      }
-      break;
-  }
-
-  return fclose(fp);
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Type::write_static() {}
-void Fl_Type::write_code1() {
-  write_h("// Header for %s\n", title());
-  write_c("// Code for %s\n", title());
-}
-void Fl_Type::write_code2() {}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/comments.h
+++ /dev/null
@@ -1,73 +1,0 @@
-
-static const char * const comment_text[] = {
-  // GNU Public License/GPL Header
-    "//\n"
-    "// NameOfProgram, ShortDescription\n"
-    "// Copyright (C) YYYY  NameOfAuthor\n"
-    "//\n"
-    "// This program is free software; you can redistribute it and/or\n"
-    "// modify it under the terms of the GNU General Public License\n"
-    "// as published by the Free Software Foundation; either version 2\n"
-    "// of the License, or (at your option) any later version.\n"
-    "//\n"
-    "// This program is distributed in the hope that it will be useful,\n"
-    "// but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-    "// GNU General Public License for more details.\n"
-    "//\n"
-    "// You should have received a copy of the GNU General Public License\n"
-    "// along with this program; if not, write to the Free Software\n"
-    "// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n"
-    "//\n",
-  // GNU Public License/GPL Footer
-    "\n//\n"
-    "// NameOfProgram, ShortDescription\n"
-    "// Copyright (C) YYYY  NameOfAuthor\n"
-    "//",
-  // GNU Public License/LGPL Header
-    "//\n"
-    "// NameOfLibrary, ShortDescription\n"
-    "// Copyright (C) YYYY  NameOfAuthor\n"
-    "//\n"
-    "// This library is free software; you can redistribute it and/or\n"
-    "// modify it under the terms of the GNU Lesser General Public\n"
-    "// License as published by the Free Software Foundation; either\n"
-    "// version 2.1 of the License, or (at your option) any later version.\n"
-    "//\n"
-    "// This library is distributed in the hope that it will be useful,\n"
-    "// but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-    "// GNU Lesser General Public License for more details.\n"
-    "//\n"
-    "// You should have received a copy of the GNU Lesser General Public\n"
-    "// License along with this program; if not, write to the Free Software\n"
-    "// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n"
-    "//\n",
-  // GNU Public License/LGPL Footer
-    "\n//\n"
-    "// NameOfLibrary, ShortDescription\n"
-    "// Copyright (C) YYYY  NameOfAuthor\n"
-    "//",
-  // FLTK/Header
-    "//\n"
-    "// \"$Id$\"\n"
-    "//\n"
-    "// ... for the Fast Light Tool Kit (FLTK).\n"
-    "//\n"
-    "// Copyright 1998-2010 by Bill Spitzak and others.\n"
-    "//\n"
-    "// This library is free software. Distribution and use rights are outlined in\n"
-    "// the file \"COPYING\" which should have been included with this file.  If this\n"
-    "// file is missing or damaged, see the license at:\n"
-    "//\n"
-    "//     http://www.fltk.org/COPYING.php\n"
-    "//\n"
-    "// Please report all bugs and problems on the following page:\n"
-    "//\n"
-    "//     http://www.fltk.org/str.php\n"
-    "//\n",
-  // FLTK/Footer
-    "\n//\n"
-    "// End of \"$Id$\".\n"
-    "//",
-};
--- a/DoConfig/fltk/fluid/factory.cxx
+++ /dev/null
@@ -1,1243 +1,0 @@
-//
-// "$Id$"
-//
-// Widget factory code for the Fast Light Tool Kit (FLTK).
-//
-// Type classes for most of the fltk widgets.  Most of the work
-// is done by code in Fl_Widget_Type.C.  Also a factory instance
-// of each of these type classes.
-//
-// This file also contains the "new" menu, which has a pointer
-// to a factory instance for every class (both the ones defined
-// here and ones in other files)
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tree.H>
-#include <stdio.h>
-#include "../src/flstring.h"
-#include "undo.h"
-
-#include "Fl_Widget_Type.h"
-
-extern Fl_Pixmap *pixmap[];
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Box.H>
-class Fl_Box_Type : public Fl_Widget_Type {
-public:
-  virtual const char *type_name() {return "Fl_Box";}
-  virtual const char *alt_type_name() {return "fltk::Widget";}
-  Fl_Widget *widget(int x,int y,int w, int h) {
-    return new Fl_Box(x,y,w,h,"label");}
-  Fl_Widget_Type *_make() {return new Fl_Box_Type();}
-  int pixmapID() { return 5; }
-};
-static Fl_Box_Type Fl_Box_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Button.H>
-static Fl_Menu_Item buttontype_menu[] = {
-  {"Normal",0,0,(void*)0},
-  {"Toggle",0,0,(void*)FL_TOGGLE_BUTTON},
-  {"Radio",0,0,(void*)FL_RADIO_BUTTON},
-  {0}};
-class Fl_Button_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return buttontype_menu;}
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Widget_Type::ideal_size(w, h);
-    w += 2 * (o->labelsize() - 4);
-    h = (h / 5) * 5;
-  }
-  virtual const char *type_name() {return "Fl_Button";}
-  virtual const char *alt_type_name() {return "fltk::Button";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Button_Type();}
-  int is_button() const {return 1;}
-  int pixmapID() { return 2; }
-};
-static Fl_Button_Type Fl_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Return_Button.H>
-class Fl_Return_Button_Type : public Fl_Button_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Button_Type::ideal_size(w, h);
-    int W = o->h();
-    if (o->w()/3 < W) W = o->w()/3;
-    w += W + 8 - o->labelsize();
-  }
-  virtual const char *type_name() {return "Fl_Return_Button";}
-  virtual const char *alt_type_name() {return "fltk::ReturnButton";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Return_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Return_Button_Type();}
-  int pixmapID() { return 23; }
-};
-static Fl_Return_Button_Type Fl_Return_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Repeat_Button.H>
-class Fl_Repeat_Button_Type : public Fl_Widget_Type {
-public:
-  virtual const char *type_name() {return "Fl_Repeat_Button";}
-  virtual const char *alt_type_name() {return "fltk::RepeatButton";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Repeat_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Repeat_Button_Type();}
-  int pixmapID() { return 25; }
-};
-static Fl_Repeat_Button_Type Fl_Repeat_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Light_Button.H>
-class Fl_Light_Button_Type : public Fl_Button_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Button_Type::ideal_size(w, h);
-    w += 4;
-  }
-  virtual const char *type_name() {return "Fl_Light_Button";}
-  virtual const char *alt_type_name() {return "fltk::LightButton";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Light_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Light_Button_Type();}
-  int pixmapID() { return 24; }
-};
-static Fl_Light_Button_Type Fl_Light_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Check_Button.H>
-class Fl_Check_Button_Type : public Fl_Button_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Button_Type::ideal_size(w, h);
-    w += 4;
-  }
-  virtual const char *type_name() {return "Fl_Check_Button";}
-  virtual const char *alt_type_name() {return "fltk::CheckButton";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Check_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Check_Button_Type();}
-  int pixmapID() { return 3; }
-};
-static Fl_Check_Button_Type Fl_Check_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Round_Button.H>
-class Fl_Round_Button_Type : public Fl_Button_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Button_Type::ideal_size(w, h);
-    w += 4;
-  }
-  virtual const char *type_name() {return "Fl_Round_Button";}
-  virtual const char *alt_type_name() {return "fltk::RadioButton";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Round_Button(x,y,w,h,"button");}
-  Fl_Widget_Type *_make() {return new Fl_Round_Button_Type();}
-  int pixmapID() { return 4; }
-};
-static Fl_Round_Button_Type Fl_Round_Button_type;
-
-////////////////////////////////////////////////////////////////
-
-extern int batch_mode;
-
-#include <FL/Fl_Browser.H>
-#include <FL/Fl_Check_Browser.H>
-#include <FL/Fl_File_Browser.H>
-
-static Fl_Menu_Item browser_type_menu[] = {
-  {"No Select",0,0,(void*)FL_NORMAL_BROWSER},
-  {"Select",0,0,(void*)FL_SELECT_BROWSER},
-  {"Hold",0,0,(void*)FL_HOLD_BROWSER},
-  {"Multi",0,0,(void*)FL_MULTI_BROWSER},
-  {0}};
-class Fl_Browser_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return browser_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Browser *myo = (Fl_Browser *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_Browser";}
-  virtual const char *alt_type_name() {return "fltk::Browser";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Browser* b = new Fl_Browser(x,y,w,h);
-    // Fl_Browser::add calls fl_height(), which requires the X display open.
-    // Avoid this when compiling so it works w/o a display:
-    if (!batch_mode) {
-      char buffer[20];
-      for (int i = 1; i <= 20; i++) {
-	sprintf(buffer,"Browser Line %d",i);
-	b->add(buffer);
-      }
-    }
-    return b;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Browser_Type();}
-  int pixmapID() { return 31; }
-};
-static Fl_Browser_Type Fl_Browser_type;
-
-int Fl_Browser_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Browser *myo = (Fl_Browser*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-class Fl_Check_Browser_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return browser_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Check_Browser *myo = (Fl_Check_Browser *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box()) - fl_height();
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_Check_Browser";}
-  virtual const char *alt_type_name() {return "fltk::CheckBrowser";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Check_Browser* b = new Fl_Check_Browser(x,y,w,h);
-    // Fl_Check_Browser::add calls fl_height(), which requires the X display open.
-    // Avoid this when compiling so it works w/o a display:
-    if (!batch_mode) {
-      char buffer[20];
-      for (int i = 1; i <= 20; i++) {
-	sprintf(buffer,"Browser Line %d",i);
-	b->add(buffer);
-      }
-    }
-    return b;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Check_Browser_Type();}
-  int pixmapID() { return 32; }
-};
-static Fl_Check_Browser_Type Fl_Check_Browser_type;
-
-int Fl_Check_Browser_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Check_Browser *myo = (Fl_Check_Browser*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-class Fl_Tree_Type : public Fl_Widget_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    if (h < 60) h = 60;
-    if (w < 80) w = 80;
-  }
-  virtual const char *type_name() {return "Fl_Tree";}
-  virtual const char *alt_type_name() {return "fltk::TreeBrowser";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Tree* b = new Fl_Tree(x,y,w,h);
-    if (!batch_mode) {
-      b->add("/A1/B1/C1");
-      b->add("/A1/B1/C2");
-      b->add("/A1/B2/C1");
-      b->add("/A1/B2/C2");
-      b->add("/A2/B1/C1");
-      b->add("/A2/B1/C2");
-      b->add("/A2/B2/C1");
-      b->add("/A2/B2/C2");
-    }
-    return b;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Tree_Type();}
-  int pixmapID() { return 50; }
-};
-static Fl_Tree_Type Fl_Tree_type;
-
-class Fl_File_Browser_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return browser_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_File_Browser *myo = (Fl_File_Browser *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box()) + fl_height();
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_File_Browser";}
-  virtual const char *alt_type_name() {return "fltk::FileBrowser";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_File_Browser* b = new Fl_File_Browser(x,y,w,h);
-    // Fl_File_Browser::add calls fl_height(), which requires the X display open.
-    // Avoid this when compiling so it works w/o a display:
-    if (!batch_mode) {
-      b->load(".");
-    }
-    return b;
-  }
-  Fl_Widget_Type *_make() {return new Fl_File_Browser_Type();}
-  int pixmapID() { return 33; }
-};
-static Fl_File_Browser_Type Fl_File_Browser_type;
-
-int Fl_File_Browser_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_File_Browser *myo = (Fl_File_Browser*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Counter.H>
-static Fl_Menu_Item counter_type_menu[] = {
-  {"Normal",0,0,(void*)FL_NORMAL_COUNTER},
-  {"Simple",0,0,(void*)FL_SIMPLE_COUNTER},
-  {0}};
-class Fl_Counter_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return counter_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-  int is_valuator() const {return 1;}
-  int pixmapID() { return 41; }
-public:
-  virtual const char *type_name() {return "Fl_Counter";}
-  virtual const char *alt_type_name() {return "fltk::Counter";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Counter(x,y,w,h,"counter:");}
-  Fl_Widget_Type *_make() {return new Fl_Counter_Type();}
-};
-static Fl_Counter_Type Fl_Counter_type;
-
-int Fl_Counter_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Counter *myo = (Fl_Counter*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Spinner.H>
-static Fl_Menu_Item spinner_type_menu[] = {
-  {"Integer",0,0,(void*)FL_INT_INPUT},
-  {"Float",  0,0,(void*)FL_FLOAT_INPUT},
-  {0}};
-class Fl_Spinner_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return spinner_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-  int pixmapID() { return 47; }
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Spinner *myo = (Fl_Spinner *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    if (h < 15) h = 15;
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box()) + h / 2;
-    if (w < 40) w = 40	;
-  }
-  virtual const char *type_name() {return "Fl_Spinner";}
-  virtual const char *alt_type_name() {return "fltk::Spinner";}
-  int is_spinner() const { return 1; }
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Spinner(x,y,w,h,"spinner:");}
-  Fl_Widget_Type *_make() {return new Fl_Spinner_Type();}
-};
-static Fl_Spinner_Type Fl_Spinner_type;
-
-int Fl_Spinner_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Spinner *myo = (Fl_Spinner*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = (Fl_Font)myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Input.H>
-static Fl_Menu_Item input_type_menu[] = {
-  {"Normal",0,0,(void*)FL_NORMAL_INPUT},
-  {"Multiline",0,0,(void*)FL_MULTILINE_INPUT},
-  {"Secret",0,0,(void*)FL_SECRET_INPUT},
-  {"Int",0,0,(void*)FL_INT_INPUT},
-  {"Float",0,0,(void*)FL_FLOAT_INPUT},
-  {0}};
-class Fl_Input_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return input_type_menu;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Input *myo = (Fl_Input *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    if (h < 15) h = 15;
-    if (w < 15) w = 15;
-  }
-  virtual const char *type_name() {return "Fl_Input";}
-  virtual const char *alt_type_name() {return "fltk::Input";}
-  int is_input() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Input *myo = new Fl_Input(x,y,w,h,"input:");
-    myo->value("Text Input");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Input_Type();}
-  int pixmapID() { return 14; }
-  virtual void copy_properties() {
-    Fl_Widget_Type::copy_properties();
-    Fl_Input_ *d = (Fl_Input_*)live_widget, *s = (Fl_Input_*)o;
-    d->textfont(s->textfont());
-    d->textsize(s->textsize());
-    d->textcolor(s->textcolor());
-    d->shortcut(s->shortcut());
-  }
-};
-static Fl_Input_Type Fl_Input_type;
-
-int Fl_Input_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Input_ *myo = (Fl_Input_*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_File_Input.H>
-class Fl_File_Input_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return 0;}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_File_Input *myo = (Fl_File_Input *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() + 4;
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    if (h < 20) h = 20;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_File_Input";}
-  virtual const char *alt_type_name() {return "fltk::FileInput";}
-  int is_input() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_File_Input *myo = new Fl_File_Input(x,y,w,h,"file:");
-    myo->value("/now/is/the/time/for/a/filename.ext");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_File_Input_Type();}
-  int pixmapID() { return 30; }
-};
-static Fl_File_Input_Type Fl_File_Input_type;
-
-int Fl_File_Input_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_File_Input *myo = (Fl_File_Input*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Text_Display.H>
-class Fl_Text_Display_Type : public Fl_Widget_Type {
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Text_Display *myo = (Fl_Text_Display *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_Text_Display";}
-  virtual const char *alt_type_name() {return "fltk::TextDisplay";}
-  int is_text_display() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Text_Display *myo = new Fl_Text_Display(x,y,w,h);
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Text_Display_Type();}
-  int pixmapID() { return 28; }
-};
-static Fl_Text_Display_Type Fl_Text_Display_type;
-
-int Fl_Text_Display_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Text_Display *myo = (Fl_Text_Display*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Text_Editor.H>
-class Fl_Text_Editor_Type : public Fl_Widget_Type {
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Text_Editor *myo = (Fl_Text_Editor *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_Text_Editor";}
-  virtual const char *alt_type_name() {return "fltk::TextEditor";}
-  int is_text_display() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Text_Editor *myo = new Fl_Text_Editor(x,y,w,h);
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Text_Editor_Type();}
-  int pixmapID() { return 29; }
-};
-static Fl_Text_Editor_Type Fl_Text_Editor_type;
-
-int Fl_Text_Editor_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Text_Editor *myo = (Fl_Text_Editor*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Clock.H>
-class Fl_Clock_Type : public Fl_Widget_Type {
-public:
-  virtual const char *type_name() {return "Fl_Clock";}
-  virtual const char *alt_type_name() {return "fltk::Clock";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Clock(x,y,w,h);}
-  Fl_Widget_Type *_make() {return new Fl_Clock_Type();}
-  int pixmapID() { return 34; }
-};
-static Fl_Clock_Type Fl_Clock_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Help_View.H>
-class Fl_Help_View_Type : public Fl_Widget_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Help_View *myo = (Fl_Help_View *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h -= Fl::box_dh(o->box());
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    h = ((h + fl_height() - 1) / fl_height()) * fl_height() +
-        Fl::box_dh(o->box());
-    if (h < 30) h = 30;
-    if (w < 50) w = 50;
-  }
-  virtual const char *type_name() {return "Fl_Help_View";}
-  virtual const char *alt_type_name() {return "fltk::HelpView";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Help_View *myo = new Fl_Help_View(x,y,w,h);
-    if (!batch_mode) {
-      myo->value("<HTML><BODY><H1>Fl_Help_View Widget</H1>"
-                 "<P>This is a Fl_Help_View widget.</P></BODY></HTML>");
-    }
-    return myo;}
-  Fl_Widget_Type *_make() {return new Fl_Help_View_Type();}
-  int pixmapID() { return 35; }
-};
-static Fl_Help_View_Type Fl_Help_View_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Progress.H>
-class Fl_Progress_Type : public Fl_Widget_Type {
-public:
-  virtual const char *type_name() {return "Fl_Progress";}
-  virtual const char *alt_type_name() {return "fltk::ProgressBar";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Progress *myo = new Fl_Progress(x,y,w,h,"label");
-    myo->value(50);
-    return myo;}
-  Fl_Widget_Type *_make() {return new Fl_Progress_Type();}
-  int pixmapID() { return 36; }
-};
-static Fl_Progress_Type Fl_Progress_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Adjuster.H>
-class Fl_Adjuster_Type : public Fl_Widget_Type {
-  int is_valuator() const {return 1;}
-public:
-  virtual const char *type_name() {return "Fl_Adjuster";}
-  virtual const char *alt_type_name() {return "fltk::Adjuster";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Adjuster(x,y,w,h);}
-  Fl_Widget_Type *_make() {return new Fl_Adjuster_Type();}
-  int pixmapID() { return 40; }
-};
-static Fl_Adjuster_Type Fl_Adjuster_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Dial.H>
-static Fl_Menu_Item dial_type_menu[] = {
-  {"Dot",0,0,(void*)0},
-  {"Line",0,0,(void*)FL_LINE_DIAL},
-  {"Fill",0,0,(void*)FL_FILL_DIAL},
-  {0}};
-class Fl_Dial_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return dial_type_menu;}
-  int is_valuator() const {return 1;}
-public:
-  virtual const char *type_name() {return "Fl_Dial";}
-  virtual const char *alt_type_name() {return "fltk::Dial";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Dial(x,y,w,h);}
-  Fl_Widget_Type *_make() {return new Fl_Dial_Type();}
-  int pixmapID() { return 42; }
-};
-static Fl_Dial_Type Fl_Dial_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Roller.H>
-static Fl_Menu_Item roller_type_menu[] = {
-  {"Vertical",0,0,(void*)0},
-  {"Horizontal",0,0,(void*)FL_HORIZONTAL},
-  {0}};
-class Fl_Roller_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return roller_type_menu;}
-  int is_valuator() const {return 1;}
-public:
-  virtual const char *type_name() {return "Fl_Roller";}
-  virtual const char *alt_type_name() {return "fltk::Roller";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Roller(x,y,w,h);}
-  Fl_Widget_Type *_make() {return new Fl_Roller_Type();}
-  int pixmapID() { return 43; }
-};
-static Fl_Roller_Type Fl_Roller_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Scrollbar.H>
-static Fl_Menu_Item slider_type_menu[] = {
-  {"Vertical",0,0,(void*)FL_VERT_SLIDER},
-  {"Horizontal",0,0,(void*)FL_HOR_SLIDER},
-  {"Vert Fill",0,0,(void*)FL_VERT_FILL_SLIDER},
-  {"Horz Fill",0,0,(void*)FL_HOR_FILL_SLIDER},
-  {"Vert Knob",0,0,(void*)FL_VERT_NICE_SLIDER},
-  {"Horz Knob",0,0,(void*)FL_HOR_NICE_SLIDER},
-  {0}};
-class Fl_Slider_Type : public Fl_Widget_Type {
-  Fl_Menu_Item *subtypes() {return slider_type_menu;}
-  int is_valuator() const {return 2;}
-public:
-  virtual const char *type_name() {return "Fl_Slider";}
-  virtual const char *alt_type_name() {return "fltk::Slider";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Slider(x,y,w,h,"slider:");}
-  Fl_Widget_Type *_make() {return new Fl_Slider_Type();}
-  int pixmapID() { return 37; }
-};
-static Fl_Slider_Type Fl_Slider_type;
-
-static Fl_Menu_Item scrollbar_type_menu[] = {
-  {"Vertical",0,0,(void*)FL_VERT_SLIDER},
-  {"Horizontal",0,0,(void*)FL_HOR_SLIDER},
-  {0}};
-class Fl_Scrollbar_Type : public Fl_Slider_Type {
-  Fl_Menu_Item *subtypes() {return scrollbar_type_menu;}
-  int is_valuator() const {return 3;}
-public:
-  virtual const char *type_name() {return "Fl_Scrollbar";}
-  virtual const char *alt_type_name() {return "fltk::Scrollbar";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Scrollbar(x,y,w,h);}
-  Fl_Widget_Type *_make() {return new Fl_Scrollbar_Type();}
-  int pixmapID() { return 38; }
-};
-static Fl_Scrollbar_Type Fl_Scrollbar_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Output.H>
-static Fl_Menu_Item output_type_menu[] = {
-  {"Normal",0,0,(void*)FL_NORMAL_OUTPUT},
-  {"Multiline",0,0,(void*)FL_MULTILINE_OUTPUT},
-  {0}};
-class Fl_Output_Type : public Fl_Input_Type {
-  Fl_Menu_Item *subtypes() {return output_type_menu;}
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Output *myo = (Fl_Output *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    if (h < 15) h = 15;
-    if (w < 15) w = 15;
-  }
-  virtual const char *type_name() {return "Fl_Output";}
-  virtual const char *alt_type_name() {return "fltk::Output";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Output *myo = new Fl_Output(x,y,w,h,"output:");
-    myo->value("Text Output");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Output_Type();}
-  int pixmapID() { return 27; }
-};
-static Fl_Output_Type Fl_Output_type;
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Value_Input.H>
-class Fl_Value_Input_Type : public Fl_Widget_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Value_Input *myo = (Fl_Value_Input *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    w -= Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    if (h < 15) h = 15;
-    if (w < 15) w = 15;
-  }
-  virtual const char *type_name() {return "Fl_Value_Input";}
-  virtual const char *alt_type_name() {return "fltk::ValueInput";}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-  int is_valuator() const {return 1;}
-  int is_value_input() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Value_Input *myo = new Fl_Value_Input(x,y,w,h,"value:");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Value_Input_Type();}
-  int pixmapID() { return 44; }
-};
-static Fl_Value_Input_Type Fl_Value_Input_type;
-
-int Fl_Value_Input_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Value_Input *myo = (Fl_Value_Input*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Value_Output.H>
-class Fl_Value_Output_Type : public Fl_Widget_Type {
-public:
-  virtual void ideal_size(int &w, int &h) {
-    Fl_Value_Output *myo = (Fl_Value_Output *)o;
-    fl_font(myo->textfont(), myo->textsize());
-    h = fl_height() + myo->textsize() - 6;
-    w = o->w() - Fl::box_dw(o->box());
-    int ww = (int)fl_width('m');
-    w = ((w + ww - 1) / ww) * ww + Fl::box_dw(o->box());
-    if (h < 15) h = 15;
-    if (w < 15) w = 15;
-  }
-  virtual const char *type_name() {return "Fl_Value_Output";}
-  virtual const char *alt_type_name() {return "fltk::ValueOutput";}
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-  int is_valuator() const {return 1;}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    Fl_Value_Output *myo = new Fl_Value_Output(x,y,w,h,"value:");
-    return myo;
-  }
-  Fl_Widget_Type *_make() {return new Fl_Value_Output_Type();}
-  int pixmapID() { return 45; }
-};
-static Fl_Value_Output_Type Fl_Value_Output_type;
-
-int Fl_Value_Output_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Value_Output *myo = (Fl_Value_Output*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/Fl_Value_Slider.H>
-class Fl_Value_Slider_Type : public Fl_Slider_Type {
-  int textstuff(int w, Fl_Font& f, int& s, Fl_Color& c);
-public:
-  virtual const char *type_name() {return "Fl_Value_Slider";}
-  virtual const char *alt_type_name() {return "fltk::ValueSlider";}
-  Fl_Widget *widget(int x,int y,int w,int h) {
-    return new Fl_Value_Slider(x,y,w,h,"slider:");}
-  Fl_Widget_Type *_make() {return new Fl_Value_Slider_Type();}
-  int pixmapID() { return 39; }
-};
-static Fl_Value_Slider_Type Fl_Value_Slider_type;
-
-int Fl_Value_Slider_Type::textstuff(int w, Fl_Font& f, int& s, Fl_Color& c) {
-  Fl_Value_Slider *myo = (Fl_Value_Slider*)(w==4 ? ((Fl_Widget_Type*)factory)->o : o);
-  switch (w) {
-    case 4:
-    case 0: f = myo->textfont(); s = myo->textsize(); c = myo->textcolor(); break;
-    case 1: myo->textfont(f); break;
-    case 2: myo->textsize(s); break;
-    case 3: myo->textcolor(c); break;
-  }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-extern class Fl_Function_Type Fl_Function_type;
-extern class Fl_Code_Type Fl_Code_type;
-extern class Fl_CodeBlock_Type Fl_CodeBlock_type;
-extern class Fl_Data_Type Fl_Data_type;
-extern class Fl_Decl_Type Fl_Decl_type;
-extern class Fl_DeclBlock_Type Fl_DeclBlock_type;
-extern class Fl_Comment_Type Fl_Comment_type;
-extern class Fl_Class_Type Fl_Class_type;
-extern class Fl_Window_Type Fl_Window_type;
-extern class Fl_Widget_Class_Type Fl_Widget_Class_type;
-extern class Fl_Group_Type Fl_Group_type;
-extern class Fl_Pack_Type Fl_Pack_type;
-extern class Fl_Tabs_Type Fl_Tabs_type;
-extern class Fl_Scroll_Type Fl_Scroll_type;
-extern class Fl_Table_Type Fl_Table_type;
-extern class Fl_Tile_Type Fl_Tile_type;
-extern class Fl_Input_Choice_Type Fl_Input_Choice_type;
-extern class Fl_Choice_Type Fl_Choice_type;
-extern class Fl_Menu_Bar_Type Fl_Menu_Bar_type;
-extern class Fl_Menu_Button_Type Fl_Menu_Button_type;
-extern class Fl_Menu_Item_Type Fl_Menu_Item_type;
-extern class Fl_Submenu_Type Fl_Submenu_type;
-extern class Fl_Wizard_Type Fl_Wizard_type;
-
-extern void select(Fl_Type *,int);
-extern void select_only(Fl_Type *);
-
-#include <FL/Fl_Window.H>
-
-static void cb(Fl_Widget *, void *v) {
-  undo_checkpoint();
-  undo_suspend();
-  Fl_Type *t = ((Fl_Type*)v)->make();
-  if (t) {
-    if (t->is_widget() && !t->is_window()) {
-      Fl_Widget_Type *wt = (Fl_Widget_Type *)t;
-
-      // Set font sizes...
-      wt->o->labelsize(Fl_Widget_Type::default_size);
-
-      Fl_Font f;
-      int s = Fl_Widget_Type::default_size;
-      Fl_Color c;
-
-      wt->textstuff(2, f, s, c);
-
-      // Resize and/or reposition new widget...
-      int w = 0, h = 0;
-      wt->ideal_size(w, h);
-
-      if (!strcmp(wt->type_name(), "Fl_Menu_Bar")) {
-        // Move and resize the menubar across the top of the window...
-        wt->o->resize(0, 0, w, h);
-      } else {
-        // Just resize to the ideal size...
-        wt->o->size(w, h);
-      }
-    }
-    select_only(t);
-    set_modflag(1);
-    t->open();
-  } else {
-    undo_current --;
-    undo_last --;
-  }
-  undo_resume();
-}
-
-Fl_Menu_Item New_Menu[] = {
-{"Code",0,0,0,FL_SUBMENU},
-  {"Function/Method",0,cb,(void*)&Fl_Function_type},
-  {"Code",0,cb,(void*)&Fl_Code_type},
-  {"Code Block",0,cb,(void*)&Fl_CodeBlock_type},
-  {"Declaration",0,cb,(void*)&Fl_Decl_type},
-  {"Declaration Block",0,cb,(void*)&Fl_DeclBlock_type},
-  {"Class",0,cb,(void*)&Fl_Class_type},
-  {"Widget Class",0,cb,(void*)&Fl_Widget_Class_type},
-  {"Comment",0,cb,(void*)&Fl_Comment_type},
-  {"Binary Data",0,cb,(void*)&Fl_Data_type},
-{0},
-{"Group",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Window_type},
-  {0,0,cb,(void*)&Fl_Group_type},
-  {0,0,cb,(void*)&Fl_Pack_type},
-  {0,0,cb,(void*)&Fl_Tabs_type},
-  {0,0,cb,(void*)&Fl_Scroll_type},
-  {0,0,cb,(void*)&Fl_Table_type},
-  {0,0,cb,(void*)&Fl_Tile_type},
-  {0,0,cb,(void*)&Fl_Wizard_type},
-{0},
-{"Buttons",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Button_type},
-  {0,0,cb,(void*)&Fl_Return_Button_type},
-  {0,0,cb,(void*)&Fl_Light_Button_type},
-  {0,0,cb,(void*)&Fl_Check_Button_type},
-  {0,0,cb,(void*)&Fl_Repeat_Button_type},
-  {0,0,cb,(void*)&Fl_Round_Button_type},
-{0},
-{"Valuators",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Slider_type},
-  {0,0,cb,(void*)&Fl_Scrollbar_type},
-  {0,0,cb,(void*)&Fl_Value_Slider_type},
-  {0,0,cb,(void*)&Fl_Adjuster_type},
-  {0,0,cb,(void*)&Fl_Counter_type},
-  {0,0,cb,(void*)&Fl_Spinner_type},
-  {0,0,cb,(void*)&Fl_Dial_type},
-  {0,0,cb,(void*)&Fl_Roller_type},
-  {0,0,cb,(void*)&Fl_Value_Input_type},
-  {0,0,cb,(void*)&Fl_Value_Output_type},
-{0},
-{"Text",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_File_Input_type},
-  {0,0,cb,(void*)&Fl_Input_type},
-  {0,0,cb,(void*)&Fl_Output_type},
-  {0,0,cb,(void*)&Fl_Text_Display_type},
-  {0,0,cb,(void*)&Fl_Text_Editor_type},
-{0},
-{"Menus",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Menu_Bar_type},
-  {0,0,cb,(void*)&Fl_Menu_Button_type},
-  {0,0,cb,(void*)&Fl_Choice_type},
-  {0,0,cb,(void*)&Fl_Input_Choice_type},
-  {0,0,cb, (void*)&Fl_Submenu_type},
-  {0,0,cb, (void*)&Fl_Menu_Item_type},
-{0},
-{"Browsers",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Browser_type},
-  {0,0,cb,(void*)&Fl_Check_Browser_type},
-  {0,0,cb,(void*)&Fl_File_Browser_type},
-  {0,0,cb,(void*)&Fl_Tree_type},
-{0},
-{"Other",0,0,0,FL_SUBMENU},
-  {0,0,cb,(void*)&Fl_Box_type},
-  {0,0,cb,(void*)&Fl_Clock_type},
-  {0,0,cb,(void*)&Fl_Help_View_type},
-  {0,0,cb,(void*)&Fl_Progress_type},
-{0},
-{0}};
-
-#include <FL/Fl_Multi_Label.H>
-
-// modify a menuitem to display an icon in front of the label
-static void make_iconlabel( Fl_Menu_Item *mi, Fl_Image *ic, const char *txt )
-{
-  if (ic) {
-    char *t1 = new char[strlen(txt)+6];
-    strcpy( t1, " " );
-    strcat(t1, txt);
-    strcat(t1, "...");
-    mi->image( ic );
-    Fl_Multi_Label *ml = new Fl_Multi_Label;
-    ml->labela = (char*)ic;
-    ml->labelb = t1;
-    ml->typea = _FL_IMAGE_LABEL;
-    ml->typeb = FL_NORMAL_LABEL;
-    ml->label( mi );
-  }
-  else if (txt!=mi->text)
-    mi->label(txt);
-}
-
-void fill_in_New_Menu() {
-  for (unsigned i = 0; i < sizeof(New_Menu)/sizeof(*New_Menu); i++) {
-    Fl_Menu_Item *m = New_Menu+i;
-    if (m->user_data()) {
-      Fl_Type *t = (Fl_Type*)m->user_data();
-      if (m->text) {
-        make_iconlabel( m, pixmap[t->pixmapID()], m->label() );
-      } else {
-        const char *n = t->type_name();
-        if (!strncmp(n,"Fl_",3)) n += 3;
-        if (!strncmp(n,"fltk::",6)) n += 6;
-        make_iconlabel( m, pixmap[t->pixmapID()], n );
-      }
-    }
-  }
-}
-
-// use keyword to pick the type, this is used to parse files:
-int reading_file;
-Fl_Type *Fl_Type_make(const char *tn) {
-  reading_file = 1; // makes labels be null
-  Fl_Type *r = 0;
-  for (unsigned i = 0; i < sizeof(New_Menu)/sizeof(*New_Menu); i++) {
-    Fl_Menu_Item *m = New_Menu+i;
-    if (!m->user_data()) continue;
-    Fl_Type *t = (Fl_Type*)(m->user_data());
-    if (!fl_ascii_strcasecmp(tn,t->type_name())) {r = t->make(); break;}
-    if (!fl_ascii_strcasecmp(tn,t->alt_type_name())) {r = t->make(); break;}
-  }
-  reading_file = 0;
-  return r;
-}
-
-////////////////////////////////////////////////////////////////
-
-// Since I have included all the .H files, do this table here:
-// This table is only used to read fdesign files:
-
-struct symbol {const char *name; int value;};
-
-static symbol table[] = {
-  {"BLACK",	FL_BLACK},
-  {"RED",	FL_RED},
-  {"GREEN",	FL_GREEN},
-  {"YELLOW",	FL_YELLOW},
-  {"BLUE",	FL_BLUE},
-  {"MAGENTA",	FL_MAGENTA},
-  {"CYAN",	FL_CYAN},
-  {"WHITE",	FL_WHITE},
-
-  {"LCOL",		 FL_BLACK},
-  {"COL1",		 FL_GRAY},
-  {"MCOL",		 FL_LIGHT1},
-  {"LEFT_BCOL",		 FL_LIGHT3},
-  {"TOP_BCOL",		 FL_LIGHT2},
-  {"BOTTOM_BCOL",	 FL_DARK2},
-  {"RIGHT_BCOL",		 FL_DARK3},
-  {"INACTIVE",		 FL_INACTIVE_COLOR},
-  {"INACTIVE_COL",	 FL_INACTIVE_COLOR},
-  {"FREE_COL1",		 FL_FREE_COLOR},
-  {"FREE_COL2",		 FL_FREE_COLOR+1},
-  {"FREE_COL3",		 FL_FREE_COLOR+2},
-  {"FREE_COL4",		 FL_FREE_COLOR+3},
-  {"FREE_COL5",		 FL_FREE_COLOR+4},
-  {"FREE_COL6",		 FL_FREE_COLOR+5},
-  {"FREE_COL7",		 FL_FREE_COLOR+6},
-  {"FREE_COL8",		 FL_FREE_COLOR+7},
-  {"FREE_COL9",		 FL_FREE_COLOR+8},
-  {"FREE_COL10",		 FL_FREE_COLOR+9},
-  {"FREE_COL11",		 FL_FREE_COLOR+10},
-  {"FREE_COL12",		 FL_FREE_COLOR+11},
-  {"FREE_COL13",		 FL_FREE_COLOR+12},
-  {"FREE_COL14",		 FL_FREE_COLOR+13},
-  {"FREE_COL15",		 FL_FREE_COLOR+14},
-  {"FREE_COL16",		 FL_FREE_COLOR+15},
-  {"TOMATO",		 131},
-  {"INDIANRED",		 164},
-  {"SLATEBLUE",		 195},
-  {"DARKGOLD",		 84},
-  {"PALEGREEN",		 157},
-  {"ORCHID",		 203},
-  {"DARKCYAN",		 189},
-  {"DARKTOMATO",		 113},
-  {"WHEAT",		 174},
-  {"ALIGN_CENTER",	FL_ALIGN_CENTER},
-  {"ALIGN_TOP",		FL_ALIGN_TOP},
-  {"ALIGN_BOTTOM",	FL_ALIGN_BOTTOM},
-  {"ALIGN_LEFT",	FL_ALIGN_LEFT},
-  {"ALIGN_RIGHT",	FL_ALIGN_RIGHT},
-  {"ALIGN_INSIDE",	FL_ALIGN_INSIDE},
-  {"ALIGN_TOP_LEFT",	 FL_ALIGN_TOP | FL_ALIGN_LEFT},
-  {"ALIGN_TOP_RIGHT",	 FL_ALIGN_TOP | FL_ALIGN_RIGHT},
-  {"ALIGN_BOTTOM_LEFT",	 FL_ALIGN_BOTTOM | FL_ALIGN_LEFT},
-  {"ALIGN_BOTTOM_RIGHT", FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT},
-  {"ALIGN_CENTER|FL_ALIGN_INSIDE",	FL_ALIGN_CENTER|FL_ALIGN_INSIDE},
-  {"ALIGN_TOP|FL_ALIGN_INSIDE",		FL_ALIGN_TOP|FL_ALIGN_INSIDE},
-  {"ALIGN_BOTTOM|FL_ALIGN_INSIDE",	FL_ALIGN_BOTTOM|FL_ALIGN_INSIDE},
-  {"ALIGN_LEFT|FL_ALIGN_INSIDE",	FL_ALIGN_LEFT|FL_ALIGN_INSIDE},
-  {"ALIGN_RIGHT|FL_ALIGN_INSIDE",	FL_ALIGN_RIGHT|FL_ALIGN_INSIDE},
-  {"ALIGN_INSIDE|FL_ALIGN_INSIDE",	FL_ALIGN_INSIDE|FL_ALIGN_INSIDE},
-  {"ALIGN_TOP_LEFT|FL_ALIGN_INSIDE",	FL_ALIGN_TOP|FL_ALIGN_LEFT|FL_ALIGN_INSIDE},
-  {"ALIGN_TOP_RIGHT|FL_ALIGN_INSIDE",	FL_ALIGN_TOP|FL_ALIGN_RIGHT|FL_ALIGN_INSIDE},
-  {"ALIGN_BOTTOM_LEFT|FL_ALIGN_INSIDE",	FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_INSIDE},
-  {"ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE",FL_ALIGN_BOTTOM|FL_ALIGN_RIGHT|FL_ALIGN_INSIDE},
-
-  {"ALIGN_LEFT_TOP",	 FL_ALIGN_TOP | FL_ALIGN_LEFT},
-  {"ALIGN_RIGHT_TOP",	 FL_ALIGN_TOP | FL_ALIGN_RIGHT},
-  {"ALIGN_LEFT_BOTTOM",	 FL_ALIGN_BOTTOM | FL_ALIGN_LEFT},
-  {"ALIGN_RIGHT_BOTTOM", FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT},
-  {"INVALID_STYLE",	 255},
-  {"NORMAL_STYLE",	 FL_HELVETICA},
-  {"BOLD_STYLE",		 FL_HELVETICA|FL_BOLD},
-  {"ITALIC_STYLE",	 FL_HELVETICA|FL_ITALIC},
-  {"BOLDITALIC_STYLE",	 FL_HELVETICA|FL_BOLD|FL_ITALIC},
-  {"FIXED_STYLE",	 FL_COURIER},
-  {"FIXEDBOLD_STYLE",	 FL_COURIER|FL_BOLD},
-  {"FIXEDITALIC_STYLE",	 FL_COURIER|FL_ITALIC},
-  {"FIXEDBOLDITALIC_STYLE",  FL_COURIER|FL_BOLD|FL_ITALIC},
-  {"TIMES_STYLE",	 FL_TIMES},
-  {"TIMESBOLD_STYLE",	 FL_TIMES|FL_BOLD},
-  {"TIMESITALIC_STYLE",	 FL_TIMES|FL_ITALIC},
-  {"TIMESBOLDITALIC_STYLE",  FL_TIMES|FL_BOLD|FL_ITALIC},
-  {"SHADOW_STYLE",	(_FL_SHADOW_LABEL<<8)},
-  {"ENGRAVED_STYLE",	(_FL_ENGRAVED_LABEL<<8)},
-  {"EMBOSSED_STYLE",	(_FL_EMBOSSED_LABEL<<0)},
-  {"TINY_SIZE",		 8},
-  {"SMALL_SIZE",		 11},
-  {"NORMAL_SIZE",	 FL_NORMAL_SIZE},
-  {"MEDIUM_SIZE",	 18},
-  {"LARGE_SIZE",		 24},
-  {"HUGE_SIZE",		 32},
-  {"DEFAULT_SIZE",	 FL_NORMAL_SIZE},
-  {"TINY_FONT",		 8},
-  {"SMALL_FONT",		 11},
-  {"NORMAL_FONT",	 FL_NORMAL_SIZE},
-  {"MEDIUM_FONT",	 18},
-  {"LARGE_FONT",		 24},
-  {"HUGE_FONT",		 32},
-  {"NORMAL_FONT1",	 11},
-  {"NORMAL_FONT2",	 FL_NORMAL_SIZE},
-  {"DEFAULT_FONT",	 11},
-  {"RETURN_END_CHANGED",  0},
-  {"RETURN_CHANGED",	 1},
-  {"RETURN_END",		 2},
-  {"RETURN_ALWAYS",	 3},
-  {"PUSH_BUTTON",	FL_TOGGLE_BUTTON},
-  {"RADIO_BUTTON",	FL_RADIO_BUTTON},
-  {"HIDDEN_BUTTON",	FL_HIDDEN_BUTTON},
-  {"SELECT_BROWSER",	FL_SELECT_BROWSER},
-  {"HOLD_BROWSER",	FL_HOLD_BROWSER},
-  {"MULTI_BROWSER",	FL_MULTI_BROWSER},
-  {"SIMPLE_COUNTER",	FL_SIMPLE_COUNTER},
-  {"LINE_DIAL",		FL_LINE_DIAL},
-  {"FILL_DIAL",		FL_FILL_DIAL},
-  {"VERT_SLIDER",	FL_VERT_SLIDER},
-  {"HOR_SLIDER",	FL_HOR_SLIDER},
-  {"VERT_FILL_SLIDER",	FL_VERT_FILL_SLIDER},
-  {"HOR_FILL_SLIDER",	FL_HOR_FILL_SLIDER},
-  {"VERT_NICE_SLIDER",	FL_VERT_NICE_SLIDER},
-  {"HOR_NICE_SLIDER",	FL_HOR_NICE_SLIDER},
-};
-
-#include <stdlib.h>
-
-int lookup_symbol(const char *name, int &v, int numberok) {
-  if (name[0]=='F' && name[1]=='L' && name[2]=='_') name += 3;
-  for (int i=0; i < int(sizeof(table)/sizeof(*table)); i++)
-    if (!fl_ascii_strcasecmp(name,table[i].name)) {v = table[i].value; return 1;}
-  if (numberok && ((v = atoi(name)) || !strcmp(name,"0"))) return 1;
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/file.cxx
+++ /dev/null
@@ -1,642 +1,0 @@
-//
-// "$Id$"
-//
-// Fluid file routines for the Fast Light Tool Kit (FLTK).
-//
-// You may find the basic read_* and write_* routines to
-// be useful for other programs.  I have used them many times.
-// They are somewhat similar to tcl, using matching { and }
-// to quote strings.
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <stdarg.h>
-#include "alignment_panel.h"
-#include <FL/Fl.H>
-#include "Fl_Widget_Type.h"
-
-////////////////////////////////////////////////////////////////
-// BASIC FILE WRITING:
-
-static FILE *fout;
-
-int open_write(const char *s) {
-  if (!s) {fout = stdout; return 1;}
-  FILE *f = fl_fopen(s,"w");
-  if (!f) return 0;
-  fout = f;
-  return 1;
-}
-
-int close_write() {
-  if (fout != stdout) {
-    int x = fclose(fout);
-    fout = stdout;
-    return x >= 0;
-  }
-  return 1;
-}
-
-static int needspace;
-int is_id(char); // in code.C
-
-// write a string, quoting characters if necessary:
-void write_word(const char *w) {
-  if (needspace) putc(' ', fout);
-  needspace = 1;
-  if (!w || !*w) {fprintf(fout,"{}"); return;}
-  const char *p;
-  // see if it is a single word:
-  for (p = w; is_id(*p); p++) ;
-  if (!*p) {fprintf(fout,"%s",w); return;}
-  // see if there are matching braces:
-  int n = 0;
-  for (p = w; *p; p++) {
-    if (*p == '{') n++;
-    else if (*p == '}') {n--; if (n<0) break;}
-  }
-  int mismatched = (n != 0);
-  // write out brace-quoted string:
-  putc('{', fout);
-  for (; *w; w++) {
-    switch (*w) {
-    case '{':
-    case '}':
-      if (!mismatched) break;
-    case '\\':
-    case '#':
-      putc('\\',fout);
-      break;
-    }
-    putc(*w,fout);
-  }
-  putc('}', fout);
-}
-
-// write an arbitrary formatted word, or a comment, etc.
-// if needspace is set, then one space is written before the string
-// unless the format starts with a newline character ('\n'):
-void write_string(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  if (needspace && *format != '\n') fputc(' ',fout);
-  vfprintf(fout, format, args);
-  va_end(args);
-  needspace = !isspace(format[strlen(format)-1] & 255);
-}
-
-// start a new line and indent it for a given nesting level:
-void write_indent(int n) {
-  fputc('\n',fout);
-  while (n--) {fputc(' ',fout); fputc(' ',fout);}
-  needspace = 0;
-}
-
-// write a '{' at the given indenting level:
-void write_open(int) {
-  if (needspace) fputc(' ',fout);
-  fputc('{',fout);
-  needspace = 0;
-}
-
-// write a '}' at the given indenting level:
-void write_close(int n) {
-  if (needspace) write_indent(n);
-  fputc('}',fout);
-  needspace = 1;
-}
-
-////////////////////////////////////////////////////////////////
-// BASIC FILE READING:
-
-static FILE *fin;
-static int lineno;
-static const char *fname;
-
-int open_read(const char *s) {
-  lineno = 1;
-  if (!s) {fin = stdin; fname = "stdin"; return 1;}
-  FILE *f = fl_fopen(s,"r");
-  if (!f) return 0;
-  fin = f;
-  fname = s;
-  return 1;
-}
-
-int close_read() {
-  if (fin != stdin) {
-    int x = fclose(fin);
-    fin = 0;
-    return x >= 0;
-  }
-  return 1;
-}
-
-#include <FL/fl_message.H>
-
-void read_error(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  if (!fin) {
-    char buffer[1024];
-    vsnprintf(buffer, sizeof(buffer), format, args);
-    fl_message("%s", buffer);
-  } else {
-    fprintf(stderr, "%s:%d: ", fname, lineno);
-    vfprintf(stderr, format, args);
-    fprintf(stderr, "\n");
-  }
-  va_end(args);
-}
-
-static int hexdigit(int x) {
-  if (isdigit(x)) return x-'0';
-  if (isupper(x)) return x-'A'+10;
-  if (islower(x)) return x-'a'+10;
-  return 20;
-}
-
-
-static int read_quoted() {	// read whatever character is after a \ .
-  int c,d,x;
-  switch(c = fgetc(fin)) {
-  case '\n': lineno++; return -1;
-  case 'a' : return('\a');
-  case 'b' : return('\b');
-  case 'f' : return('\f');
-  case 'n' : return('\n');
-  case 'r' : return('\r');
-  case 't' : return('\t');
-  case 'v' : return('\v');
-  case 'x' :	/* read hex */
-    for (c=x=0; x<3; x++) {
-      int ch = fgetc(fin);
-      d = hexdigit(ch);
-      if (d > 15) {ungetc(ch,fin); break;}
-      c = (c<<4)+d;
-    }
-    break;
-  default:		/* read octal */
-    if (c<'0' || c>'7') break;
-    c -= '0';
-    for (x=0; x<2; x++) {
-      int ch = fgetc(fin);
-      d = hexdigit(ch);
-      if (d>7) {ungetc(ch,fin); break;}
-      c = (c<<3)+d;
-    }
-    break;
-  }
-  return(c);
-}
-
-// return a word read from the file, or NULL at the EOF:
-// This will skip all comments (# to end of line), and evaluate
-// all \xxx sequences and use \ at the end of line to remove the newline.
-// A word is any one of:
-//	a continuous string of non-space chars except { and } and #
-//	everything between matching {...} (unless wantbrace != 0)
-//	the characters '{' and '}'
-
-static char *buffer;
-static int buflen;
-static void expand_buffer(int length) {
-  if (length >= buflen) {
-    if (!buflen) {
-      buflen = length+1;
-      buffer = (char*)malloc(buflen);
-    } else {
-      buflen = 2*buflen;
-      if (length >= buflen) buflen = length+1;
-      buffer = (char *)realloc((void *)buffer,buflen);
-    }
-  }
-}
-
-const char *read_word(int wantbrace) {
-  int x;
-
-  // skip all the whitespace before it:
-  for (;;) {
-    x = getc(fin);
-    if (x < 0 && feof(fin)) {	// eof
-      return 0;
-    } else if (x == '#') {	// comment
-      do x = getc(fin); while (x >= 0 && x != '\n');
-      lineno++;
-      continue;
-    } else if (x == '\n') {
-      lineno++;
-    } else if (!isspace(x & 255)) {
-      break;
-    }
-  }
-
-  expand_buffer(100);
-
-  if (x == '{' && !wantbrace) {
-
-    // read in whatever is between braces
-    int length = 0;
-    int nesting = 0;
-    for (;;) {
-      x = getc(fin);
-      if (x<0) {read_error("Missing '}'"); break;}
-      else if (x == '#') { // embedded comment
-	do x = getc(fin); while (x >= 0 && x != '\n');
-	lineno++;
-	continue;
-      } else if (x == '\n') lineno++;
-      else if (x == '\\') {x = read_quoted(); if (x<0) continue;}
-      else if (x == '{') nesting++;
-      else if (x == '}') {if (!nesting--) break;}
-      buffer[length++] = x;
-      expand_buffer(length);
-    }
-    buffer[length] = 0;
-    return buffer;
-
-  } else if (x == '{' || x == '}') {
-    // all the punctuation is a word:
-    buffer[0] = x;
-    buffer[1] = 0;
-    return buffer;
-
-  } else {
-
-    // read in an unquoted word:
-    int length = 0;
-    for (;;) {
-      if (x == '\\') {x = read_quoted(); if (x<0) continue;}
-      else if (x<0 || isspace(x & 255) || x=='{' || x=='}' || x=='#') break;
-      buffer[length++] = x;
-      expand_buffer(length);
-      x = getc(fin);
-    }
-    ungetc(x, fin);
-    buffer[length] = 0;
-    return buffer;
-
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// global int variables:
-extern int i18n_type;
-extern const char* i18n_include;
-extern const char* i18n_function;
-extern const char* i18n_file;
-extern const char* i18n_set;
-
-
-extern int header_file_set;
-extern int code_file_set;
-extern const char* header_file_name;
-extern const char* code_file_name;
-
-int write_file(const char *filename, int selected_only) {
-  if (!open_write(filename)) return 0;
-  write_string("# data file for the Fltk User Interface Designer (fluid)\n"
-	       "version %.4f",FL_VERSION);
-  if(!include_H_from_C)
-    write_string("\ndo_not_include_H_from_C");
-  if(use_FL_COMMAND)
-    write_string("\nuse_FL_COMMAND");
-  if (i18n_type) {
-    write_string("\ni18n_type %d", i18n_type);
-    write_string("\ni18n_include %s", i18n_include);
-    switch (i18n_type) {
-    case 1 : /* GNU gettext */
-	write_string("\ni18n_function %s", i18n_function);
-        break;
-    case 2 : /* POSIX catgets */
-        if (i18n_file[0]) write_string("\ni18n_file %s", i18n_file);
-	write_string("\ni18n_set %s", i18n_set);
-        break;
-    }
-  }
-  if (!selected_only) {
-    write_string("\nheader_name"); write_word(header_file_name);
-    write_string("\ncode_name"); write_word(code_file_name);
-  }
-  for (Fl_Type *p = Fl_Type::first; p;) {
-    if (!selected_only || p->selected) {
-      p->write();
-      write_string("\n");
-      int q = p->level;
-      for (p = p->next; p && p->level > q; p = p->next) {/*empty*/}
-    } else {
-      p = p->next;
-    }
-  }
-  return close_write();
-}
-
-////////////////////////////////////////////////////////////////
-// read all the objects out of the input file:
-
-void read_fdesign();
-
-double read_version;
-
-extern Fl_Type *Fl_Type_make(const char *tn);
-
-static void read_children(Fl_Type *p, int paste) {
-  Fl_Type::current = p;
-  for (;;) {
-    const char *c = read_word();
-  REUSE_C:
-    if (!c) {
-      if (p && !paste) read_error("Missing '}'");
-      break;
-    }
-
-    if (!strcmp(c,"}")) {
-      if (!p) read_error("Unexpected '}'");
-      break;
-    }
-
-    // this is the first word in a .fd file:
-    if (!strcmp(c,"Magic:")) {
-      read_fdesign();
-      return;
-    }
-
-    if (!strcmp(c,"version")) {
-      c = read_word();
-      read_version = strtod(c,0);
-      if (read_version<=0 || read_version>double(FL_VERSION+0.00001))
-        read_error("unknown version '%s'",c);
-      continue;
-    }
-
-    // back compatibility with Vincent Penne's original class code:
-    if (!p && !strcmp(c,"define_in_struct")) {
-      Fl_Type *t = Fl_Type_make("class");
-      t->name(read_word());
-      Fl_Type::current = p = t;
-      paste = 1; // stops "missing }" error
-      continue;
-    }
-
-    if (!strcmp(c,"do_not_include_H_from_C")) {
-      include_H_from_C=0;
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"use_FL_COMMAND")) {
-      use_FL_COMMAND=1;
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_type")) {
-      i18n_type = atoi(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_function")) {
-      i18n_function = strdup(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_file")) {
-      i18n_file = strdup(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_set")) {
-      i18n_set = strdup(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_include")) {
-      i18n_include = strdup(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_type"))
-    {
-      i18n_type = atoi(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"i18n_type"))
-    {
-      i18n_type = atoi(read_word());
-      goto CONTINUE;
-    }
-    if (!strcmp(c,"header_name")) {
-      if (!header_file_set) header_file_name = strdup(read_word());
-      else read_word();
-      goto CONTINUE;
-    }
-
-    if (!strcmp(c,"code_name")) {
-      if (!code_file_set) code_file_name = strdup(read_word());
-      else read_word();
-      goto CONTINUE;
-    }
-
-    if (!strcmp(c, "snap") || !strcmp(c, "gridx") || !strcmp(c, "gridy")) {
-      // grid settings are now global
-      read_word();
-      goto CONTINUE;
-    }
-
-    {Fl_Type *t = Fl_Type_make(c);
-    if (!t) {
-      read_error("Unknown word \"%s\"", c);
-      continue;
-    }
-    t->name(read_word());
-
-    c = read_word(1);
-    if (strcmp(c,"{") && t->is_class()) {   // <prefix> <name>
-      ((Fl_Class_Type*)t)->prefix(t->name());
-      t->name(c);
-      c = read_word(1);
-    }
-
-    if (strcmp(c,"{")) {
-      read_error("Missing property list for %s\n",t->title());
-      goto REUSE_C;
-    }
-
-    t->open_ = 0;
-    for (;;) {
-      const char *cc = read_word();
-      if (!cc || !strcmp(cc,"}")) break;
-      t->read_property(cc);
-    }
-
-    if (!t->is_parent()) continue;
-    c = read_word(1);
-    if (strcmp(c,"{")) {
-      read_error("Missing child list for %s\n",t->title());
-      goto REUSE_C;
-    }
-    read_children(t, 0);}
-    Fl_Type::current = p;
-  CONTINUE:;
-  }
-}
-
-extern void deselect();
-
-int read_file(const char *filename, int merge) {
-  Fl_Type *o;
-  read_version = 0.0;
-  if (!open_read(filename)) return 0;
-  if (merge) deselect(); else    delete_all();
-  read_children(Fl_Type::current, merge);
-  Fl_Type::current = 0;
-  // Force menu items to be rebuilt...
-  for (o = Fl_Type::first; o; o = o->next)
-    if (o->is_menu_button()) o->add_child(0,0);
-  for (o = Fl_Type::first; o; o = o->next)
-    if (o->selected) {Fl_Type::current = o; break;}
-  selection_changed(Fl_Type::current);
-  return close_read();
-}
-
-////////////////////////////////////////////////////////////////
-// Read Forms and XForms fdesign files:
-
-int read_fdesign_line(const char*& name, const char*& value) {
-
-  int length = 0;
-  int x;
-  // find a colon:
-  for (;;) {
-    x = getc(fin);
-    if (x < 0 && feof(fin)) return 0;
-    if (x == '\n') {length = 0; continue;} // no colon this line...
-    if (!isspace(x & 255)) {
-      buffer[length++] = x;
-      expand_buffer(length);
-    }
-    if (x == ':') break;
-  }
-  int valueoffset = length;
-  buffer[length-1] = 0;
-
-  // skip to start of value:
-  for (;;) {
-    x = getc(fin);
-    if ((x < 0 && feof(fin)) || x == '\n' || !isspace(x & 255)) break;
-  }
-
-  // read the value:
-  for (;;) {
-    if (x == '\\') {x = read_quoted(); if (x<0) continue;}
-    else if (x == '\n') break;
-    buffer[length++] = x;
-    expand_buffer(length);
-    x = getc(fin);
-  }
-  buffer[length] = 0;
-  name = buffer;
-  value = buffer+valueoffset;
-  return 1;
-}
-
-int fdesign_flip;
-int fdesign_magic;
-#include <FL/Fl_Group.H>
-
-static const char *class_matcher[] = {
-"FL_CHECKBUTTON", "Fl_Check_Button",
-"FL_ROUNDBUTTON", "Fl_Round_Button",
-"FL_ROUND3DBUTTON", "Fl_Round_Button",
-"FL_LIGHTBUTTON", "Fl_Light_Button",
-"FL_FRAME", "Fl_Box",
-"FL_LABELFRAME", "Fl_Box",
-"FL_TEXT", "Fl_Box",
-"FL_VALSLIDER", "Fl_Value_Slider",
-"FL_MENU", "Fl_Menu_Button",
-"3", "FL_BITMAP",
-"1", "FL_BOX",
-"71","FL_BROWSER",
-"11","FL_BUTTON",
-"4", "FL_CHART",
-"42","FL_CHOICE",
-"61","FL_CLOCK",
-"25","FL_COUNTER",
-"22","FL_DIAL",
-"101","FL_FREE",
-"31","FL_INPUT",
-"12","Fl_Light_Button",
-"41","FL_MENU",
-"23","FL_POSITIONER",
-"13","Fl_Round_Button",
-"21","FL_SLIDER",
-"2", "FL_BOX", // was FL_TEXT
-"62","FL_TIMER",
-"24","Fl_Value_Slider",
-0};
-
-void read_fdesign() {
-  fdesign_magic = atoi(read_word());
-  fdesign_flip = (fdesign_magic < 13000);
-  Fl_Widget_Type *window = 0;
-  Fl_Widget_Type *group = 0;
-  Fl_Widget_Type *widget = 0;
-  if (!Fl_Type::current) {
-    Fl_Type *t = Fl_Type_make("Function");
-    t->name("create_the_forms()");
-    Fl_Type::current = t;
-  }
-  for (;;) {
-    const char *name;
-    const char *value;
-    if (!read_fdesign_line(name, value)) break;
-
-    if (!strcmp(name,"Name")) {
-
-      window = (Fl_Widget_Type*)Fl_Type_make("Fl_Window");
-      window->name(value);
-      window->label(value);
-      Fl_Type::current = widget = window;
-
-    } else if (!strcmp(name,"class")) {
-
-      if (!strcmp(value,"FL_BEGIN_GROUP")) {
-	group = widget = (Fl_Widget_Type*)Fl_Type_make("Fl_Group");
-	Fl_Type::current = group;
-      } else if (!strcmp(value,"FL_END_GROUP")) {
-	if (group) {
-	  Fl_Group* g = (Fl_Group*)(group->o);
-	  g->begin();
-	  g->forms_end();
-	  Fl_Group::current(0);
-	}
-	group = widget = 0;
-	Fl_Type::current = window;
-      } else {
-	for (int i = 0; class_matcher[i]; i += 2)
-	  if (!strcmp(value,class_matcher[i])) {
-	    value = class_matcher[i+1]; break;}
-	widget = (Fl_Widget_Type*)Fl_Type_make(value);
-	if (!widget) {
-	  printf("class %s not found, using Fl_Button\n", value);
-	  widget = (Fl_Widget_Type*)Fl_Type_make("Fl_Button");
-	}
-      }
-
-    } else if (widget) {
-      if (!widget->read_fdesign(name, value))
-	printf("Ignoring \"%s: %s\"\n", name, value);
-    }
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/fluid.app/Contents/Info.plist
+++ /dev/null
@@ -1,53 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleExecutable</key>
-	<string>fluid</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fluid</string>
-	<key>CFBundleVersion</key>
-	<string>1.3.5</string>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2017 by Bill Spitzak and others</string>
-	<key>CFAppleHelpAnchor</key>
-	<string>help</string>
-	<key>CFBundleName</key>
-	<string>Fluid</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLID</string>
-	<key>CFBundleIconFile</key>
-	<string>fluid.icns</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.3.5</string>
-	<key>CFBundleGetInfoString</key>
-	<string>1.3.5, Copyright 1998-2017 by Bill Spitzak and others</string>
-	<key>CFBundleDocumentTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleTypeExtensions</key>
-			<array>
-				<string>fl</string>
-			</array>
-			<key>CFBundleTypeIconFile</key>
-			<string>fluid.icns</string>
-			<key>CFBundleTypeName</key>
-			<string>FLUID Designer File</string>
-			<key>CFBundleTypeOSTypes</key>
-			<array>
-				<string>Flid</string>
-			</array>
-			<key>CFBundleTypeRole</key>
-			<string>Editor</string>
-		</dict>
-	</array>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/fluid/fluid.app/Contents/PkgInfo
+++ /dev/null
@@ -1,1 +1,0 @@
-FLIDFlid
binary files a/DoConfig/fltk/fluid/fluid.app/Contents/Resources/fluid.icns /dev/null differ
--- a/DoConfig/fltk/fluid/fluid.cxx
+++ /dev/null
@@ -1,1879 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID main entry for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Help_Dialog.H>
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/Fl_PNG_Image.H>
-#include <FL/fl_message.H>
-#include <FL/filename.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_Printer.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <time.h> // time(), localtime(), etc.
-
-#include "../src/flstring.h"
-#include "alignment_panel.h"
-#include "function_panel.h"
-#include "template_panel.h"
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <direct.h>
-#  include <windows.h>
-#  include <io.h>
-#  include <fcntl.h>
-#  include <commdlg.h>
-#  include <FL/x.H>
-#  ifndef __WATCOMC__
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#    define access _access
-#    define chdir _chdir
-#    define getcwd _getcwd
-#  endif // !__WATCOMC__
-#else
-#  include <unistd.h>
-#endif
-#ifdef __EMX__
-#  include <X11/Xlibint.h>
-#endif
-
-#include "about_panel.h"
-#include "undo.h"
-
-#include "Fl_Type.h"
-
-extern "C"
-{
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-#  include <zlib.h>
-#  ifdef HAVE_PNG_H
-#    include <png.h>
-#  else
-#    include <libpng/png.h>
-#  endif // HAVE_PNG_H
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-}
-
-//
-// Globals..
-//
-static Fl_Help_Dialog *help_dialog = 0;
-
-Fl_Preferences	fluid_prefs(Fl_Preferences::USER, "fltk.org", "fluid");
-int gridx = 5;
-int gridy = 5;
-int snap = 1;
-int show_guides = 1;
-int show_comments = 1;
-int G_use_external_editor = 0;
-int G_debug = 0;
-char G_external_editor_command[512];
-int show_coredevmenus = 1;
-
-// File history info...
-char	absolute_history[10][FL_PATH_MAX];
-char	relative_history[10][FL_PATH_MAX];
-
-void	load_history();
-void	update_history(const char *);
-
-// Shell command support...
-void	show_shell_window();
-
-Fl_Menu_Item *save_item = 0L;
-Fl_Menu_Item *history_item = 0L;
-Fl_Menu_Item *widgetbin_item = 0L;
-Fl_Menu_Item *sourceview_item = 0L;
-
-////////////////////////////////////////////////////////////////
-
-static const char *filename;
-void set_filename(const char *c);
-void set_modflag(int mf);
-int modflag;
-
-static char* pwd;
-static char in_source_dir;
-void goto_source_dir() {
-  if (in_source_dir) return;
-  if (!filename || !*filename) return;
-  const char *p = fl_filename_name(filename);
-  if (p <= filename) return; // it is in the current directory
-  char buffer[FL_PATH_MAX];
-  strlcpy(buffer, filename, sizeof(buffer));
-  int n = (int)(p-filename); if (n>1) n--; buffer[n] = 0;
-  if (!pwd) {
-    pwd = getcwd(0,FL_PATH_MAX);
-    if (!pwd) {fprintf(stderr,"getwd : %s\n",strerror(errno)); return;}
-  }
-  if (chdir(buffer)<0) {fprintf(stderr, "Can't chdir to %s : %s\n",
-				buffer, strerror(errno)); return;}
-  in_source_dir = 1;
-}
-
-void leave_source_dir() {
-  if (!in_source_dir) return;
-  if (chdir(pwd)<0) {fprintf(stderr, "Can't chdir to %s : %s\n",
-			     pwd, strerror(errno));}
-  in_source_dir = 0;
-}
-
-char position_window(Fl_Window *w, const char *prefsName, int Visible, int X, int Y, int W=0, int H=0 ) {
-  Fl_Preferences pos(fluid_prefs, prefsName);
-  if (prevpos_button->value()) {
-    pos.get("x", X, X);
-    pos.get("y", Y, Y);
-    if ( W!=0 ) {
-      pos.get("w", W, W);
-      pos.get("h", H, H);
-      w->resize( X, Y, W, H );
-    }
-    else
-      w->position( X, Y );
-  }
-  pos.get("visible", Visible, Visible);
-  return Visible;
-}
-
-void save_position(Fl_Window *w, const char *prefsName) {
-  Fl_Preferences pos(fluid_prefs, prefsName);
-  pos.set("x", w->x());
-  pos.set("y", w->y());
-  pos.set("w", w->w());
-  pos.set("h", w->h());
-  pos.set("visible", (int)(w->shown() && w->visible()));
-}
-
-Fl_Window *main_window;
-Fl_Menu_Bar *main_menubar;
-
-static char* cutfname(int which = 0) {
-  static char name[2][FL_PATH_MAX];
-  static char beenhere = 0;
-
-  if (!beenhere) {
-    beenhere = 1;
-    fluid_prefs.getUserdataPath(name[0], sizeof(name[0]));
-    strlcat(name[0], "cut_buffer", sizeof(name[0]));
-    fluid_prefs.getUserdataPath(name[1], sizeof(name[1]));
-    strlcat(name[1], "dup_buffer", sizeof(name[1]));
-  }
-
-  return name[which];
-}
-
-// Timer to watch for external editor modifications
-//    If one or more external editors open, check if their files were modified.
-//    If so: reload to ram, update size/mtime records, and change fluid's 'modified' state.
-//
-static void external_editor_timer(void*) {
-  int editors_open = ExternalCodeEditor::editors_open();
-  if ( G_debug ) printf("--- TIMER --- External editors open=%d\n", editors_open);
-  if ( editors_open > 0 ) {
-    // Walk tree looking for files modified by external editors.
-    int modified = 0;
-    for (Fl_Type *p = Fl_Type::first; p; p = p->next) {
-      if ( p->is_code() ) {
-        Fl_Code_Type *code = (Fl_Code_Type*)p;
-        // Code changed by external editor?
-        if ( code->handle_editor_changes() ) {	// updates ram, file size/mtime
-          modified++;
-        }
-        if ( code->is_editing() ) {             // editor open?
-          code->reap_editor();                  // Try to reap; maybe it recently closed
-        }
-      }
-    }
-    if ( modified ) set_modflag(1);
-  }
-  // Repeat timeout if editors still open
-  //    The ExternalCodeEditor class handles start/stopping timer, we just
-  //    repeat_timeout() if it's already on. NOTE: above code may have reaped
-  //    only open editor, which would disable further timeouts. So *recheck*
-  //    if editors still open, to ensure we don't accidentally re-enable them.
-  //
-  if ( ExternalCodeEditor::editors_open() ) {
-    Fl::repeat_timeout(2.0, external_editor_timer);
-  }
-}
-
-void save_cb(Fl_Widget *, void *v) {
-  Fl_Native_File_Chooser fnfc;
-  const char *c = filename;
-  if (v || !c || !*c) {    
-    fnfc.title("Save To:");
-    fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
-    fnfc.filter("FLUID Files\t*.f[ld]");
-    if (fnfc.show() != 0) return;
-    c = fnfc.filename();
-    if (!access(c, 0)) {
-      const char *basename;
-      if ((basename = strrchr(c, '/')) != NULL)
-        basename ++;
-#if defined(WIN32) || defined(__EMX__)
-      if ((basename = strrchr(c, '\\')) != NULL)
-        basename ++;
-#endif // WIN32 || __EMX__
-      else
-        basename = c;
-
-      if (fl_choice("The file \"%s\" already exists.\n"
-                    "Do you want to replace it?", "Cancel",
-		    "Replace", NULL, basename) == 0) return;
-    }
-
-    if (v != (void *)2) set_filename(c);
-  }
-  if (!write_file(c)) {
-    fl_alert("Error writing %s: %s", c, strerror(errno));
-    return;
-  }
-
-  if (v != (void *)2) {
-    set_modflag(0);
-    undo_save = undo_current;
-  }
-}
-
-void save_template_cb(Fl_Widget *, void *) {
-  // Setup the template panel...
-  if (!template_panel) make_template_panel();
-
-  template_clear();
-  template_browser->add("New Template");
-  template_load();
-
-  template_name->show();
-  template_name->value("");
-
-  template_instance->hide();
-
-  template_delete->show();
-  template_delete->deactivate();
-
-  template_submit->label("Save");
-  template_submit->deactivate();
-
-  template_panel->label("Save Template");
-
-  // Show the panel and wait for the user to do something...
-  template_panel->show();
-  while (template_panel->shown()) Fl::wait();
-
-  // Get the template name, return if it is empty...
-  const char *c = template_name->value();
-  if (!c || !*c) return;
-
-  // Convert template name to filename_with_underscores
-  char safename[FL_PATH_MAX], *safeptr;
-  strlcpy(safename, c, sizeof(safename));
-  for (safeptr = safename; *safeptr; safeptr ++) {
-    if (isspace(*safeptr)) *safeptr = '_';
-  }
-
-  // Find the templates directory...
-  char filename[FL_PATH_MAX];
-  fluid_prefs.getUserdataPath(filename, sizeof(filename));
-
-  strlcat(filename, "templates", sizeof(filename));
-#if defined(WIN32) && !defined(__CYGWIN__)
-  if (access(filename, 0)) mkdir(filename);
-#else
-  if (access(filename, 0)) mkdir(filename, 0777);
-#endif // WIN32 && !__CYGWIN__
-
-  strlcat(filename, "/", sizeof(filename));
-  strlcat(filename, safename, sizeof(filename));
-
-  char *ext = filename + strlen(filename);
-  if (ext >= (filename + sizeof(filename) - 5)) {
-    fl_alert("The template name \"%s\" is too long!", c);
-    return;
-  }
-
-  // Save the .fl file...
-  strcpy(ext, ".fl");
-
-  if (!access(filename, 0)) {
-    if (fl_choice("The template \"%s\" already exists.\n"
-                  "Do you want to replace it?", "Cancel",
-		  "Replace", NULL, c) == 0) return;
-  }
-
-  if (!write_file(filename)) {
-    fl_alert("Error writing %s: %s", filename, strerror(errno));
-    return;
-  }
-
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-  // Get the screenshot, if any...
-  Fl_Type *t;
-
-  for (t = Fl_Type::first; t; t = t->next) {
-    // Find the first window...
-    if (t->is_window()) break;
-  }
-
-  if (!t) return;
-
-  // Grab a screenshot...
-  Fl_Window_Type *wt = (Fl_Window_Type *)t;
-  uchar *pixels;
-  int w, h;
-
-  if ((pixels = wt->read_image(w, h)) == NULL) return;
-
-  // Save to a PNG file...
-  strcpy(ext, ".png");
-
-  FILE *fp;
-
-  if ((fp = fl_fopen(filename, "wb")) == NULL) {
-    delete[] pixels;
-    fl_alert("Error writing %s: %s", filename, strerror(errno));
-    return;
-  }
-
-  png_structp pptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0);
-  png_infop iptr = png_create_info_struct(pptr);
-  png_bytep ptr = (png_bytep)pixels;
-
-  png_init_io(pptr, fp);
-  png_set_IHDR(pptr, iptr, w, h, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,
-               PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
-  png_set_sRGB(pptr, iptr, PNG_sRGB_INTENT_PERCEPTUAL);
-
-  png_write_info(pptr, iptr);
-
-  for (int i = h; i > 0; i --, ptr += w * 3) {
-    png_write_row(pptr, ptr);
-  }
-
-  png_write_end(pptr, iptr);
-  png_destroy_write_struct(&pptr, &iptr);
-
-  fclose(fp);
-
-#  if 0 // The original PPM output code...
-  strcpy(ext, ".ppm");
-  fp = fl_fopen(filename, "wb");
-  fprintf(fp, "P6\n%d %d 255\n", w, h);
-  fwrite(pixels, w * h, 3, fp);
-  fclose(fp);
-#  endif // 0
-
-  delete[] pixels;
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-}
-
-void revert_cb(Fl_Widget *,void *) {
-  if (modflag) {
-    if (!fl_choice("This user interface has been changed. Really revert?",
-                   "Cancel", "Revert", NULL)) return;
-  }
-  undo_suspend();
-  if (!read_file(filename, 0)) {
-    undo_resume();
-    fl_message("Can't read %s: %s", filename, strerror(errno));
-    return;
-  }
-  undo_resume();
-  set_modflag(0);
-  undo_clear();
-}
-
-void exit_cb(Fl_Widget *,void *) {
-
-  // Stop any external editor update timers
-  ExternalCodeEditor::stop_update_timer();
-
-  if (modflag)
-    switch (fl_choice("Do you want to save changes to this user\n"
-                      "interface before exiting?", "Cancel",
-                      "Save", "Don't Save"))
-    {
-      case 0 : /* Cancel */
-          return;
-      case 1 : /* Save */
-          save_cb(NULL, NULL);
-	  if (modflag) return;	// Didn't save!
-    }
-
-  save_position(main_window,"main_window_pos");
-
-  if (widgetbin_panel) {
-    save_position(widgetbin_panel,"widgetbin_pos");
-    delete widgetbin_panel;
-  }
-  if (sourceview_panel) {
-    Fl_Preferences svp(fluid_prefs, "sourceview");
-    svp.set("autorefresh", sv_autorefresh->value());
-    svp.set("autoposition", sv_autoposition->value());
-    svp.set("tab", sv_tab->find(sv_tab->value()));
-    save_position(sourceview_panel,"sourceview_pos");
-    delete sourceview_panel;
-    sourceview_panel = 0;
-  }
-  if (about_panel)
-    delete about_panel;
-  if (help_dialog)
-    delete help_dialog;
-
-  undo_clear();
-
-  // Destroy tree
-  //    Doing so causes dtors to automatically close all external editors
-  //    and cleans up editor tmp files. Then remove fluid tmpdir /last/.
-  delete_all();
-  ExternalCodeEditor::tmpdir_clear();
-
-  exit(0);
-}
-
-#ifdef __APPLE__
-#  include <FL/x.H>
-
-void
-apple_open_cb(const char *c) {
-  if (modflag) {
-    switch (fl_choice("Do you want to save changes to this user\n"
-                      "interface before opening another one?", "Don't Save",
-                      "Save", "Cancel"))
-    {
-      case 0 : /* Cancel */
-          return;
-      case 1 : /* Save */
-          save_cb(NULL, NULL);
-	  if (modflag) return;	// Didn't save!
-    }
-  }
-  const char *oldfilename;
-  oldfilename = filename;
-  filename    = NULL;
-  set_filename(c);
-  undo_suspend();
-  if (!read_file(c, 0)) {
-    undo_resume();
-    fl_message("Can't read %s: %s", c, strerror(errno));
-    free((void *)filename);
-    filename = oldfilename;
-    if (main_window) main_window->label(filename);
-    return;
-  }
-
-  // Loaded a file; free the old filename...
-  set_modflag(0);
-  undo_resume();
-  undo_clear();
-  if (oldfilename) free((void *)oldfilename);
-}
-#endif // __APPLE__
-
-void open_cb(Fl_Widget *, void *v) {
-  if (!v && modflag) {
-    switch (fl_choice("Do you want to save changes to this user\n"
-                      "interface before opening another one?", "Cancel",
-                      "Save", "Don't Save"))
-    {
-      case 0 : /* Cancel */
-          return;
-      case 1 : /* Save */
-          save_cb(NULL, NULL);
-	  if (modflag) return;	// Didn't save!
-    }
-  }
-  const char *c;
-  const char *oldfilename;
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title("Open:");
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
-  fnfc.filter("FLUID Files\t*.f[ld]\n");
-  if (fnfc.show() != 0) return;
-  c = fnfc.filename();
-  oldfilename = filename;
-  filename    = NULL;
-  set_filename(c);
-  if (v != 0) undo_checkpoint();
-  undo_suspend();
-  if (!read_file(c, v!=0)) {
-    undo_resume();
-    fl_message("Can't read %s: %s", c, strerror(errno));
-    free((void *)filename);
-    filename = oldfilename;
-    if (main_window) set_modflag(modflag);
-    return;
-  }
-  undo_resume();
-  if (v) {
-    // Inserting a file; restore the original filename...
-    free((void *)filename);
-    filename = oldfilename;
-    set_modflag(1);
-  } else {
-    // Loaded a file; free the old filename...
-    set_modflag(0);
-    undo_clear();
-    if (oldfilename) free((void *)oldfilename);
-  }
-}
-
-void open_history_cb(Fl_Widget *, void *v) {
-  if (modflag) {
-    switch (fl_choice("Do you want to save changes to this user\n"
-                      "interface before opening another one?", "Cancel",
-                      "Save", "Don't Save"))
-    {
-      case 0 : /* Cancel */
-          return;
-      case 1 : /* Save */
-          save_cb(NULL, NULL);
-	  if (modflag) return;	// Didn't save!
-    }
-  }
-  const char *oldfilename = filename;
-  filename = NULL;
-  set_filename((char *)v);
-  undo_suspend();
-  if (!read_file(filename, 0)) {
-    undo_resume();
-    undo_clear();
-    fl_message("Can't read %s: %s", filename, strerror(errno));
-    free((void *)filename);
-    filename = oldfilename;
-    if (main_window) main_window->label(filename);
-    return;
-  }
-  set_modflag(0);
-  undo_resume();
-  undo_clear();
-  if (oldfilename) free((void *)oldfilename);
-}
-
-void new_cb(Fl_Widget *, void *v) {
-  // Check if the current file has been modified...
-  if (!v && modflag) {
-    // Yes, ask the user what to do...
-    switch (fl_choice("Do you want to save changes to this user\n"
-                      "interface before creating a new one?", "Cancel",
-                      "Save", "Don't Save"))
-    {
-      case 0 : /* Cancel */
-          return;
-      case 1 : /* Save */
-          save_cb(NULL, NULL);
-	  if (modflag) return;	// Didn't save!
-    }
-  }
-
-  // Setup the template panel...
-  if (!template_panel) make_template_panel();
-
-  template_clear();
-  template_browser->add("Blank");
-  template_load();
-
-  template_name->hide();
-  template_name->value("");
-
-  template_instance->show();
-  template_instance->deactivate();
-  template_instance->value("");
-
-  template_delete->hide();
-
-  template_submit->label("New");
-  template_submit->deactivate();
-
-  template_panel->label("New");
-
-  if ( template_browser->size() == 1 ) { // only one item?
-    template_browser->value(1);          // select it
-    template_browser->do_callback();
-  }
-
-  // Show the panel and wait for the user to do something...
-  template_panel->show();
-  while (template_panel->shown()) Fl::wait();
-
-  // See if the user chose anything...
-  int item = template_browser->value();
-  if (item < 1) return;
-
-  // Clear the current data...
-  delete_all();
-  set_filename(NULL);
-
-  // Load the template, if any...
-  const char *tname = (const char *)template_browser->data(item);
-
-  if (tname) {
-    // Grab the instance name...
-    const char *iname = template_instance->value();
-
-    if (iname && *iname) {
-      // Copy the template to a temp file, then read it in...
-      char line[1024], *ptr, *next;
-      FILE *infile, *outfile;
-
-      if ((infile = fl_fopen(tname, "r")) == NULL) {
-	fl_alert("Error reading template file \"%s\":\n%s", tname,
-        	 strerror(errno));
-	set_modflag(0);
-	undo_clear();
-	return;
-      }
-
-      if ((outfile = fl_fopen(cutfname(1), "w")) == NULL) {
-	fl_alert("Error writing buffer file \"%s\":\n%s", cutfname(1),
-        	 strerror(errno));
-	fclose(infile);
-	set_modflag(0);
-	undo_clear();
-	return;
-      }
-
-      while (fgets(line, sizeof(line), infile)) {
-	// Replace @INSTANCE@ with the instance name...
-	for (ptr = line; (next = strstr(ptr, "@INSTANCE@")) != NULL; ptr = next + 10) {
-	  fwrite(ptr, next - ptr, 1, outfile);
-	  fputs(iname, outfile);
-	}
-
-	fputs(ptr, outfile);
-      }
-
-      fclose(infile);
-      fclose(outfile);
-
-      undo_suspend();
-      read_file(cutfname(1), 0);
-      unlink(cutfname(1));
-      undo_resume();
-    } else {
-      // No instance name, so read the template without replacements...
-      undo_suspend();
-      read_file(tname, 0);
-      undo_resume();
-    }
-  }
-
-  set_modflag(0);
-  undo_clear();
-}
-
-int exit_early = 0;
-int update_file = 0;		// fluid -u
-int compile_file = 0;		// fluid -c
-int compile_strings = 0;	// fluic -cs
-int batch_mode = 0;		// if set (-c, -u) don't open display
-int header_file_set = 0;
-int code_file_set = 0;
-const char* header_file_name = ".h";
-const char* code_file_name = ".cxx";
-int i18n_type = 0;
-const char* i18n_include = "";
-const char* i18n_function = "";
-const char* i18n_file = "";
-const char* i18n_set = "";
-char i18n_program[FL_PATH_MAX] = "";
-
-void write_cb(Fl_Widget *, void *) {
-  if (!filename) {
-    save_cb(0,0);
-    if (!filename) return;
-  }
-  char cname[FL_PATH_MAX];
-  char hname[FL_PATH_MAX];
-  strlcpy(i18n_program, fl_filename_name(filename), sizeof(i18n_program));
-  fl_filename_setext(i18n_program, sizeof(i18n_program), "");
-  if (*code_file_name == '.' && strchr(code_file_name, '/') == NULL) {
-    strlcpy(cname, fl_filename_name(filename), sizeof(cname));
-    fl_filename_setext(cname, sizeof(cname), code_file_name);
-  } else {
-    strlcpy(cname, code_file_name, sizeof(hname));
-  }
-  if (*header_file_name == '.' && strchr(header_file_name, '/') == NULL) {
-    strlcpy(hname, fl_filename_name(filename), sizeof(hname));
-    fl_filename_setext(hname, sizeof(hname), header_file_name);
-  } else {
-    strlcpy(hname, header_file_name, sizeof(hname));
-  }
-  if (!batch_mode) goto_source_dir();
-  int x = write_code(cname,hname);
-  if (!batch_mode) leave_source_dir();
-  strlcat(cname, " and ", sizeof(cname));
-  strlcat(cname, hname, sizeof(cname));
-  if (batch_mode) {
-    if (!x) {fprintf(stderr,"%s : %s\n",cname,strerror(errno)); exit(1);}
-  } else {
-    if (!x) {
-      fl_message("Can't write %s: %s", cname, strerror(errno));
-    } else if (completion_button->value()) {
-      fl_message("Wrote %s", cname);
-    }
-  }
-}
-
-void write_strings_cb(Fl_Widget *, void *) {
-  static const char *exts[] = { ".txt", ".po", ".msg" };
-  if (!filename) {
-    save_cb(0,0);
-    if (!filename) return;
-  }
-  char sname[FL_PATH_MAX];
-  strlcpy(sname, fl_filename_name(filename), sizeof(sname));
-  fl_filename_setext(sname, sizeof(sname), exts[i18n_type]);
-  if (!batch_mode) goto_source_dir();
-  int x = write_strings(sname);
-  if (!batch_mode) leave_source_dir();
-  if (batch_mode) {
-    if (x) {fprintf(stderr,"%s : %s\n",sname,strerror(errno)); exit(1);}
-  } else {
-    if (x) {
-      fl_message("Can't write %s: %s", sname, strerror(errno));
-    } else if (completion_button->value()) {
-      fl_message("Wrote %s", sname);
-    }
-  }
-}
-
-void openwidget_cb(Fl_Widget *, void *) {
-  if (!Fl_Type::current) {
-    fl_message("Please select a widget");
-    return;
-  }
-  Fl_Type::current->open();
-}
-
-void toggle_overlays(Fl_Widget *,void *);
-
-void select_all_cb(Fl_Widget *,void *);
-void select_none_cb(Fl_Widget *,void *);
-
-void group_cb(Fl_Widget *, void *);
-
-void ungroup_cb(Fl_Widget *, void *);
-
-extern int pasteoffset;
-static int ipasteoffset;
-
-void copy_cb(Fl_Widget*, void*) {
-  if (!Fl_Type::current) {
-    fl_beep();
-    return;
-  }
-  ipasteoffset = 10;
-  if (!write_file(cutfname(),1)) {
-    fl_message("Can't write %s: %s", cutfname(), strerror(errno));
-    return;
-  }
-}
-
-extern void select_only(Fl_Type *);
-void cut_cb(Fl_Widget *, void *) {
-  if (!Fl_Type::current) {
-    fl_beep();
-    return;
-  }
-  if (!write_file(cutfname(),1)) {
-    fl_message("Can't write %s: %s", cutfname(), strerror(errno));
-    return;
-  }
-  undo_checkpoint();
-  set_modflag(1);
-  ipasteoffset = 0;
-  Fl_Type *p = Fl_Type::current->parent;
-  while (p && p->selected) p = p->parent;
-  delete_all(1);
-  if (p) select_only(p);
-}
-
-void delete_cb(Fl_Widget *, void *) {
-  if (!Fl_Type::current) {
-    fl_beep();
-    return;
-  }
-  undo_checkpoint();
-  set_modflag(1);
-  ipasteoffset = 0;
-  Fl_Type *p = Fl_Type::current->parent;
-  while (p && p->selected) p = p->parent;
-  delete_all(1);
-  if (p) select_only(p);
-}
-
-extern int force_parent;
-
-void paste_cb(Fl_Widget*, void*) {
-  //if (ipasteoffset) force_parent = 1;
-  pasteoffset = ipasteoffset;
-  if (gridx>1) pasteoffset = ((pasteoffset-1)/gridx+1)*gridx;
-  if (gridy>1) pasteoffset = ((pasteoffset-1)/gridy+1)*gridy;
-  undo_checkpoint();
-  undo_suspend();
-  if (!read_file(cutfname(), 1)) {
-    fl_message("Can't read %s: %s", cutfname(), strerror(errno));
-  }
-  undo_resume();
-  pasteoffset = 0;
-  ipasteoffset += 10;
-  force_parent = 0;
-}
-
-// Duplicate the selected widgets...
-void duplicate_cb(Fl_Widget*, void*) {
-  if (!Fl_Type::current) {
-    fl_beep();
-    return;
-  }
-
-  if (!write_file(cutfname(1),1)) {
-    fl_message("Can't write %s: %s", cutfname(1), strerror(errno));
-    return;
-  }
-
-  pasteoffset  = 0;
-  force_parent = 1;
-
-  undo_checkpoint();
-  undo_suspend();
-  if (!read_file(cutfname(1), 1)) {
-    fl_message("Can't read %s: %s", cutfname(1), strerror(errno));
-  }
-  unlink(cutfname(1));
-  undo_resume();
-
-  force_parent = 0;
-}
-
-void earlier_cb(Fl_Widget*,void*);
-
-void later_cb(Fl_Widget*,void*);
-
-Fl_Type *sort(Fl_Type *parent);
-
-static void sort_cb(Fl_Widget *,void *) {
-  sort((Fl_Type*)0);
-}
-
-void show_project_cb(Fl_Widget *, void *);
-void show_grid_cb(Fl_Widget *, void *);
-void show_settings_cb(Fl_Widget *, void *);
-void show_global_settings_cb(Fl_Widget *, void *);
-
-void align_widget_cb(Fl_Widget *, long);
-void widget_size_cb(Fl_Widget *, long);
-
-void about_cb(Fl_Widget *, void *) {
-  if (!about_panel) make_about_panel();
-  about_panel->show();
-}
-
-void show_help(const char *name) {
-  const char	*docdir;
-  char		helpname[FL_PATH_MAX];
-
-  if (!help_dialog) help_dialog = new Fl_Help_Dialog();
-
-  if ((docdir = getenv("FLTK_DOCDIR")) == NULL) {
-#ifdef __EMX__
-    // Doesn't make sense to have a hardcoded fallback
-    static char fltk_docdir[FL_PATH_MAX];
-
-    strlcpy(fltk_docdir, __XOS2RedirRoot("/XFree86/lib/X11/fltk/doc"),
-            sizeof(fltk_docdir));
-
-    docdir = fltk_docdir;
-#else
-    docdir = FLTK_DOCDIR;
-#endif // __EMX__
-  }
-  snprintf(helpname, sizeof(helpname), "%s/%s", docdir, name);
-
-  // make sure that we can read the file
-  FILE *f = fopen(helpname, "rb");
-  if (f) {
-    fclose(f);
-    help_dialog->load(helpname);
-  } else {
-    // if we can not read the file, we display the canned version instead
-    // or ask the native browser to open the page on www.fltk.org
-    if (strcmp(name, "fluid.html")==0) {
-      if (!Fl_Shared_Image::find("embedded:/fluid-org.png"))
-        new Fl_PNG_Image("embedded:/fluid-org.png", fluid_org_png, sizeof(fluid_org_png));
-      help_dialog->value
-      (
-       "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
-       "<html><head><title>FLTK: Programming with FLUID</title></head><body>\n"
-       "<h2>What is FLUID?</h2>\n"
-       "The Fast Light User Interface Designer, or FLUID, is a graphical editor "
-       "that is used to produce FLTK source code. FLUID edits and saves its state "
-       "in <code>.fl</code> files. These files are text, and you can (with care) "
-       "edit them in a text editor, perhaps to get some special effects.<p>\n"
-       "FLUID can \"compile\" the <code>.fl</code> file into a <code>.cxx</code> "
-       "and a <code>.h</code> file. The <code>.cxx</code> file defines all the "
-       "objects from the <code>.fl</code> file and the <code>.h</code> file "
-       "declares all the global ones. FLUID also supports localization "
-       "(Internationalization) of label strings using message files and the GNU "
-       "gettext or POSIX catgets interfaces.<p>\n"
-       "A simple program can be made by putting all your code (including a <code>"
-       "main()</code> function) into the <code>.fl</code> file and thus making the "
-       "<code>.cxx</code> file a single source file to compile. Most programs are "
-       "more complex than this, so you write other <code>.cxx</code> files that "
-       "call the FLUID functions. These <code>.cxx</code> files must <code>"
-       "#include</code> the <code>.h</code> file or they can <code>#include</code> "
-       "the <code>.cxx</code> file so it still appears to be a single source file.<p>"
-       "<img src=\"embedded:/fluid-org.png\"></p>"
-       "<p>More information is available online at <a href="
-       "\"http://www.fltk.org/doc-1.3/fluid.html\">http://www.fltk.org/</a>"
-       "</body></html>"
-       );
-    } else if (strcmp(name, "license.html")==0) {
-      fl_open_uri("http://www.fltk.org/doc-1.3/license.html");
-      return;
-    } else if (strcmp(name, "index.html")==0) {
-      fl_open_uri("http://www.fltk.org/doc-1.3/index.html");
-      return;
-    } else {
-      snprintf(helpname, sizeof(helpname), "http://www.fltk.org/%s", name);
-      fl_open_uri(helpname);
-      return;
-    }
-  }
-  help_dialog->show();
-}
-
-void help_cb(Fl_Widget *, void *) {
-  show_help("fluid.html");
-}
-
-void manual_cb(Fl_Widget *, void *) {
-  show_help("index.html");
-}
-
-
-////////////////////////////////////////////////////////////////
-void print_menu_cb(Fl_Widget *, void *) {
-  int w, h, ww, hh;
-  int frompage, topage;
-  Fl_Type	*t;			// Current widget
-  int		num_windows;		// Number of windows
-  Fl_Window_Type *windows[1000];	// Windows to print
-  int		winpage;		// Current window page
-  Fl_Window *win;
-  
-  for (t = Fl_Type::first, num_windows = 0; t; t = t->next) {
-    if (t->is_window()) {
-      windows[num_windows] = (Fl_Window_Type *)t;
-      if (!((Fl_Window*)(windows[num_windows]->o))->shown()) continue;
-      num_windows ++;
-    }
-  }
-  
-  Fl_Printer printjob;
-  if ( printjob.start_job(num_windows, &frompage, &topage) ) return;
-  int pagecount = 0;
-  for (winpage = 0; winpage < num_windows; winpage++) {
-    float scale = 1, scale_x = 1, scale_y = 1;
-    if (winpage+1 < frompage || winpage+1 > topage) continue;
-    printjob.start_page();
-    printjob.printable_rect(&w, &h);
-    // Get the time and date...
-    time_t curtime = time(NULL);
-    struct tm *curdate = localtime(&curtime);
-    char date[1024];
-    strftime(date, sizeof(date), "%c", curdate);
-    fl_font(FL_HELVETICA, 12);
-    fl_color(FL_BLACK);
-    fl_draw(date, (w - (int)fl_width(date))/2, fl_height());
-    sprintf(date, "%d/%d", ++pagecount, topage-frompage+1);
-    fl_draw(date, w - (int)fl_width(date), fl_height());
-    // Get the base filename...
-    const char *basename = strrchr(filename, 
-#ifdef WIN32
-				   '\\'
-#else
-				   '/'
-#endif
-				   );
-    if (basename) basename ++;
-    else basename = filename;
-    sprintf(date, "%s", basename);
-    fl_draw(date, 0, fl_height());
-// print centered and scaled to fit in the page
-    win = (Fl_Window*)windows[winpage]->o;
-    ww = win->decorated_w();
-    if(ww > w) scale_x = float(w)/ww;
-    hh = win->decorated_h();
-    if(hh > h) scale_y = float(h)/hh;
-    if (scale_x < scale) scale = scale_x;
-    if (scale_y < scale) scale = scale_y;
-    if (scale < 1) {
-      printjob.scale(scale);
-      printjob.printable_rect(&w, &h);
-      }
-    printjob.origin(w/2, h/2);
-    printjob.print_window(win, -ww/2, -hh/2);
-    printjob.end_page();
-  }
-  printjob.end_job();
-}
-
-////////////////////////////////////////////////////////////////
-
-extern Fl_Menu_Item New_Menu[];
-
-void toggle_widgetbin_cb(Fl_Widget *, void *);
-void toggle_sourceview_cb(Fl_Double_Window *, void *);
-
-Fl_Menu_Item Main_Menu[] = {
-{"&File",0,0,0,FL_SUBMENU},
-  {"&New...", FL_COMMAND+'n', new_cb, 0},
-  {"&Open...", FL_COMMAND+'o', open_cb, 0},
-  {"&Insert...", FL_COMMAND+'i', open_cb, (void*)1, FL_MENU_DIVIDER},
-  {"&Save", FL_COMMAND+'s', save_cb, 0},
-  {"Save &As...", FL_COMMAND+FL_SHIFT+'s', save_cb, (void*)1},
-  {"Sa&ve A Copy...", 0, save_cb, (void*)2},
-  {"Save &Template...", 0, save_template_cb},
-  {"&Revert...", 0, revert_cb, 0, FL_MENU_DIVIDER},
-  {"&Print...", FL_COMMAND+'p', print_menu_cb},
-  {"Write &Code...", FL_COMMAND+FL_SHIFT+'c', write_cb, 0},
-  {"&Write Strings...", FL_COMMAND+FL_SHIFT+'w', write_strings_cb, 0, FL_MENU_DIVIDER},
-  {relative_history[0], FL_COMMAND+'0', open_history_cb, absolute_history[0]},
-  {relative_history[1], FL_COMMAND+'1', open_history_cb, absolute_history[1]},
-  {relative_history[2], FL_COMMAND+'2', open_history_cb, absolute_history[2]},
-  {relative_history[3], FL_COMMAND+'3', open_history_cb, absolute_history[3]},
-  {relative_history[4], FL_COMMAND+'4', open_history_cb, absolute_history[4]},
-  {relative_history[5], FL_COMMAND+'5', open_history_cb, absolute_history[5]},
-  {relative_history[6], FL_COMMAND+'6', open_history_cb, absolute_history[6]},
-  {relative_history[7], FL_COMMAND+'7', open_history_cb, absolute_history[7]},
-  {relative_history[8], FL_COMMAND+'8', open_history_cb, absolute_history[8]},
-  {relative_history[9], FL_COMMAND+'9', open_history_cb, absolute_history[9], FL_MENU_DIVIDER},
-  {"&Quit", FL_COMMAND+'q', exit_cb},
-  {0},
-{"&Edit",0,0,0,FL_SUBMENU},
-  {"&Undo", FL_COMMAND+'z', undo_cb},
-  {"&Redo", FL_COMMAND+FL_SHIFT+'z', redo_cb, 0, FL_MENU_DIVIDER},
-  {"C&ut", FL_COMMAND+'x', cut_cb},
-  {"&Copy", FL_COMMAND+'c', copy_cb},
-  {"&Paste", FL_COMMAND+'v', paste_cb},
-  {"Dup&licate", FL_COMMAND+'u', duplicate_cb},
-  {"&Delete", FL_Delete, delete_cb, 0, FL_MENU_DIVIDER},
-  {"Select &All", FL_COMMAND+'a', select_all_cb},
-  {"Select &None", FL_COMMAND+FL_SHIFT+'a', select_none_cb, 0, FL_MENU_DIVIDER},
-  {"Pr&operties...", FL_F+1, openwidget_cb},
-  {"&Sort",0,sort_cb},
-  {"&Earlier", FL_F+2, earlier_cb},
-  {"&Later", FL_F+3, later_cb},
-  {"&Group", FL_F+7, group_cb},
-  {"Ung&roup", FL_F+8, ungroup_cb,0, FL_MENU_DIVIDER},
-  {"Hide O&verlays",FL_COMMAND+FL_SHIFT+'o',toggle_overlays},
-  {"Show Widget &Bin...",FL_ALT+'b',toggle_widgetbin_cb},
-  {"Show Source Code...",FL_ALT+FL_SHIFT+'s', (Fl_Callback*)toggle_sourceview_cb, 0, FL_MENU_DIVIDER},
-  {"Pro&ject Settings...",FL_ALT+'p',show_project_cb},
-  {"GU&I Settings...",FL_ALT+FL_SHIFT+'p',show_settings_cb,0,FL_MENU_DIVIDER},
-  {"Global &FLTK Settings...",FL_ALT+FL_SHIFT+'g',show_global_settings_cb},
-  {0},
-{"&New", 0, 0, (void *)New_Menu, FL_SUBMENU_POINTER},
-{"&Layout",0,0,0,FL_SUBMENU},
-  {"&Align",0,0,0,FL_SUBMENU},
-    {"&Left",0,(Fl_Callback *)align_widget_cb,(void*)10},
-    {"&Center",0,(Fl_Callback *)align_widget_cb,(void*)11},
-    {"&Right",0,(Fl_Callback *)align_widget_cb,(void*)12},
-    {"&Top",0,(Fl_Callback *)align_widget_cb,(void*)13},
-    {"&Middle",0,(Fl_Callback *)align_widget_cb,(void*)14},
-    {"&Bottom",0,(Fl_Callback *)align_widget_cb,(void*)15},
-    {0},
-  {"&Space Evenly",0,0,0,FL_SUBMENU},
-    {"&Across",0,(Fl_Callback *)align_widget_cb,(void*)20},
-    {"&Down",0,(Fl_Callback *)align_widget_cb,(void*)21},
-    {0},
-  {"&Make Same Size",0,0,0,FL_SUBMENU},
-    {"&Width",0,(Fl_Callback *)align_widget_cb,(void*)30},
-    {"&Height",0,(Fl_Callback *)align_widget_cb,(void*)31},
-    {"&Both",0,(Fl_Callback *)align_widget_cb,(void*)32},
-    {0},
-  {"&Center In Group",0,0,0,FL_SUBMENU},
-    {"&Horizontal",0,(Fl_Callback *)align_widget_cb,(void*)40},
-    {"&Vertical",0,(Fl_Callback *)align_widget_cb,(void*)41},
-    {0},
-  {"Set &Widget Size",0,0,0,FL_SUBMENU|FL_MENU_DIVIDER},
-    {"&Tiny",FL_ALT+'1',(Fl_Callback *)widget_size_cb,(void*)8,0,FL_NORMAL_LABEL,FL_HELVETICA,8},
-    {"&Small",FL_ALT+'2',(Fl_Callback *)widget_size_cb,(void*)11,0,FL_NORMAL_LABEL,FL_HELVETICA,11},
-    {"&Normal",FL_ALT+'3',(Fl_Callback *)widget_size_cb,(void*)14,0,FL_NORMAL_LABEL,FL_HELVETICA,14},
-    {"&Medium",FL_ALT+'4',(Fl_Callback *)widget_size_cb,(void*)18,0,FL_NORMAL_LABEL,FL_HELVETICA,18},
-    {"&Large",FL_ALT+'5',(Fl_Callback *)widget_size_cb,(void*)24,0,FL_NORMAL_LABEL,FL_HELVETICA,24},
-    {"&Huge",FL_ALT+'6',(Fl_Callback *)widget_size_cb,(void*)32,0,FL_NORMAL_LABEL,FL_HELVETICA,32},
-    {0},
-  {"&Grid and Size Settings...",FL_COMMAND+'g',show_grid_cb},
-  {0},
-{"&Shell",0,0,0,FL_SUBMENU},
-  {"Execute &Command...",FL_ALT+'x',(Fl_Callback *)show_shell_window},
-  {"Execute &Again...",FL_ALT+'g',(Fl_Callback *)do_shell_command},
-  {0},
-{"&Help",0,0,0,FL_SUBMENU},
-  {"&Rapid development with FLUID...",0,help_cb},
-  {"&FLTK Programmers Manual...",0,manual_cb, 0, FL_MENU_DIVIDER},
-  {"&About FLUID...",0,about_cb},
-  {0},
-{0}};
-
-#define BROWSERWIDTH 300
-#define BROWSERHEIGHT 500
-#define WINWIDTH 300
-#define MENUHEIGHT 25
-#define WINHEIGHT (BROWSERHEIGHT+MENUHEIGHT)
-
-extern void fill_in_New_Menu();
-
-void scheme_cb(Fl_Choice *, void *) {
-  if (batch_mode)
-    return;
-
-  switch (scheme_choice->value()) {
-    case 0 : // Default
-      Fl::scheme(NULL);
-      break;
-    case 1 : // None
-      Fl::scheme("none");
-      break;
-    case 2 : // Plastic
-      Fl::scheme("plastic");
-      break;
-    case 3 : // GTK+
-      Fl::scheme("gtk+");
-      break;
-    case 4 : // Gleam
-      Fl::scheme("gleam");
-      break;
-  }
-
-  fluid_prefs.set("scheme", scheme_choice->value());
-}
-
-void toggle_widgetbin_cb(Fl_Widget *, void *) {
-  if (!widgetbin_panel) {
-    make_widgetbin();
-    if (!position_window(widgetbin_panel,"widgetbin_pos", 1, 320, 30)) return;
-  }
-
-  if (widgetbin_panel->visible()) {
-    widgetbin_panel->hide();
-    widgetbin_item->label("Show Widget &Bin...");
-  } else {
-    widgetbin_panel->show();
-    widgetbin_item->label("Hide Widget &Bin");
-  }
-}
-
-
-void toggle_sourceview_cb(Fl_Double_Window *, void *) {
-  if (!sourceview_panel) {
-    make_sourceview();
-    sourceview_panel->callback((Fl_Callback*)toggle_sourceview_cb);
-    Fl_Preferences svp(fluid_prefs, "sourceview");
-    int autorefresh;
-    svp.get("autorefresh", autorefresh, 1);
-    sv_autorefresh->value(autorefresh);
-    int autoposition;
-    svp.get("autoposition", autoposition, 1);
-    sv_autoposition->value(autoposition);
-    int tab;
-    svp.get("tab", tab, 0);
-    if (tab>=0 && tab<sv_tab->children()) sv_tab->value(sv_tab->child(tab));
-    if (!position_window(sourceview_panel,"sourceview_pos", 0, 320, 120, 550, 500)) return;
-  }
-
-  if (sourceview_panel->visible()) {
-    sourceview_panel->hide();
-    sourceview_item->label("Show Source Code...");
-  } else {
-    sourceview_panel->show();
-    sourceview_item->label("Hide Source Code...");
-    update_sourceview_cb(0,0);
-  }
-}
-
-void toggle_sourceview_b_cb(Fl_Button*, void *) {
-  toggle_sourceview_cb(0,0);
-}
-
-void make_main_window() {
-  if (!batch_mode) {
-    fluid_prefs.get("snap", snap, 1);
-    fluid_prefs.get("gridx", gridx, 5);
-    fluid_prefs.get("gridy", gridy, 5);
-    fluid_prefs.get("show_guides", show_guides, 0);
-    fluid_prefs.get("widget_size", Fl_Widget_Type::default_size, 14);
-    fluid_prefs.get("show_comments", show_comments, 1);
-    make_layout_window();
-    make_shell_window();
-  }
-
-  if (!main_window) {
-    Fl_Widget *o;
-    main_window = new Fl_Double_Window(WINWIDTH,WINHEIGHT,"fluid");
-    main_window->box(FL_NO_BOX);
-    o = make_widget_browser(0,MENUHEIGHT,BROWSERWIDTH,BROWSERHEIGHT);
-    o->box(FL_FLAT_BOX);
-    o->tooltip("Double-click to view or change an item.");
-    main_window->resizable(o);
-    main_menubar = new Fl_Menu_Bar(0,0,BROWSERWIDTH,MENUHEIGHT);
-    main_menubar->menu(Main_Menu);
-    // quick access to all dynamic menu items
-    save_item = (Fl_Menu_Item*)main_menubar->find_item(save_cb);
-    history_item = (Fl_Menu_Item*)main_menubar->find_item(open_history_cb);
-    widgetbin_item = (Fl_Menu_Item*)main_menubar->find_item(toggle_widgetbin_cb);
-    sourceview_item = (Fl_Menu_Item*)main_menubar->find_item((Fl_Callback*)toggle_sourceview_cb);
-    main_menubar->global();
-    fill_in_New_Menu();
-    main_window->end();
-  }
-
-  if (!batch_mode) {
-    load_history();
-    make_settings_window();
-    make_global_settings_window();
-  }
-}
-
-// Load file history from preferences...
-void load_history() {
-  int	i;		// Looping var
-  int	max_files;
-
-
-  fluid_prefs.get("recent_files", max_files, 5);
-  if (max_files > 10) max_files = 10;
-
-  for (i = 0; i < max_files; i ++) {
-    fluid_prefs.get( Fl_Preferences::Name("file%d", i), absolute_history[i], "", sizeof(absolute_history[i]));
-    if (absolute_history[i][0]) {
-      // Make a relative version of the filename for the menu...
-      fl_filename_relative(relative_history[i], sizeof(relative_history[i]),
-                           absolute_history[i]);
-
-      if (i == 9) history_item[i].flags = FL_MENU_DIVIDER;
-      else history_item[i].flags = 0;
-    } else break;
-  }
-
-  for (; i < 10; i ++) {
-    if (i) history_item[i-1].flags |= FL_MENU_DIVIDER;
-    history_item[i].hide();
-  }
-}
-
-// Update file history from preferences...
-void update_history(const char *flname) {
-  int	i;		// Looping var
-  char	absolute[FL_PATH_MAX];
-  int	max_files;
-
-
-  fluid_prefs.get("recent_files", max_files, 5);
-  if (max_files > 10) max_files = 10;
-
-  fl_filename_absolute(absolute, sizeof(absolute), flname);
-
-  for (i = 0; i < max_files; i ++)
-#if defined(WIN32) || defined(__APPLE__)
-    if (!strcasecmp(absolute, absolute_history[i])) break;
-#else
-    if (!strcmp(absolute, absolute_history[i])) break;
-#endif // WIN32 || __APPLE__
-
-  if (i == 0) return;
-
-  if (i >= max_files) i = max_files - 1;
-
-  // Move the other flnames down in the list...
-  memmove(absolute_history + 1, absolute_history,
-          i * sizeof(absolute_history[0]));
-  memmove(relative_history + 1, relative_history,
-          i * sizeof(relative_history[0]));
-
-  // Put the new file at the top...
-  strlcpy(absolute_history[0], absolute, sizeof(absolute_history[0]));
-
-  fl_filename_relative(relative_history[0], sizeof(relative_history[0]),
-                       absolute_history[0]);
-
-  // Update the menu items as needed...
-  for (i = 0; i < max_files; i ++) {
-    fluid_prefs.set( Fl_Preferences::Name("file%d", i), absolute_history[i]);
-    if (absolute_history[i][0]) {
-      if (i == 9) history_item[i].flags = FL_MENU_DIVIDER;
-      else history_item[i].flags = 0;
-    } else break;
-  }
-
-  for (; i < 10; i ++) {
-    fluid_prefs.set( Fl_Preferences::Name("file%d", i), "");
-    if (i) history_item[i-1].flags |= FL_MENU_DIVIDER;
-    history_item[i].hide();
-  }
-  fluid_prefs.flush();
-}
-
-// ********** portable process class definition **********
-
-class Fl_Process {
-public:
-  // construction / destruction
-  Fl_Process() {_fpt= NULL;}
-  ~Fl_Process() {if (_fpt) close();}
-
-  // FIXME: popen needs the UTF-8 equivalent fl_popen
-  FILE * popen	(const char *cmd, const char *mode="r");
-  //not necessary here: FILE * fl_fopen	(const char *file, const char *mode="r");
-  int  close();
-
-  FILE * desc() const { return _fpt;} // non null if file is open
-  char * get_line(char * line, size_t s) const {return _fpt ? fgets(line, s, _fpt) : NULL;}
-
-#if defined(WIN32)  && !defined(__CYGWIN__)
-protected:
-  HANDLE pin[2], pout[2], perr[2];
-  char ptmode;
-  PROCESS_INFORMATION pi;
-  STARTUPINFO si;
-
-  static bool createPipe(HANDLE * h, BOOL bInheritHnd=TRUE);
-
-private:
-  FILE * freeHandles()  {
-    clean_close(pin[0]);    clean_close(pin[1]);
-    clean_close(pout[0]);   clean_close(pout[1]);
-    clean_close(perr[0]);   clean_close(perr[1]);
-    return NULL; // convenient for error management
-  }
-  static void clean_close(HANDLE& h);
-#endif
-
-protected:
-  FILE * _fpt;
-};
-
-#if defined(WIN32)  && !defined(__CYGWIN__)
-bool Fl_Process::createPipe(HANDLE * h, BOOL bInheritHnd) {
-  SECURITY_ATTRIBUTES sa;
-  sa.nLength = sizeof(sa);
-  sa.lpSecurityDescriptor = NULL;
-  sa.bInheritHandle = bInheritHnd;
-  return CreatePipe (&h[0],&h[1],&sa,0) ? true : false;
-}
-#endif
-// portable open process:
-FILE * Fl_Process::popen(const char *cmd, const char *mode) {
-#if defined(WIN32)  && !defined(__CYGWIN__)
-  // PRECONDITIONS
-  if (!mode || !*mode || (*mode!='r' && *mode!='w') ) return NULL;
-  if (_fpt) close(); // close first before reuse
-
-  ptmode = *mode;
-  pin[0] = pin[1] = pout[0] = pout[1] = perr[0] = perr[1] = INVALID_HANDLE_VALUE;
-  // stderr to stdout wanted ?
-  int fusion = (strstr(cmd,"2>&1") !=NULL);
-
-  // Create windows pipes
-  if (!createPipe(pin) || !createPipe(pout) || (!fusion && !createPipe(perr) ) )
-	return freeHandles(); // error
-
-  // Initialize Startup Info
-  ZeroMemory(&si, sizeof(STARTUPINFO));
-  si.cb           = sizeof(STARTUPINFO);
-  si.dwFlags    = STARTF_USESTDHANDLES;
-  si.hStdInput    = pin[0];
-  si.hStdOutput   = pout[1];
-  si.hStdError  = fusion ? pout[1] : perr [1];
-
-  if ( CreateProcess(NULL, (LPTSTR) cmd,NULL,NULL,TRUE,
-		     DETACHED_PROCESS,NULL,NULL, &si, &pi)) {
-    // don't need theses handles inherited by child process:
-    clean_close(pin[0]); clean_close(pout[1]); clean_close(perr[1]);
-    HANDLE & h = *mode == 'r' ? pout[0] : pin[1];
-    _fpt = _fdopen(_open_osfhandle((fl_intptr_t) h,_O_BINARY),mode);
-    h= INVALID_HANDLE_VALUE;  // reset the handle pointer that is shared
-    // with _fpt so we don't free it twice
-  }
-
-  if (!_fpt)  freeHandles();
-  return _fpt;
-#else
-  _fpt=::popen(cmd,mode);
-  return _fpt;
-#endif
-}
-
-int Fl_Process::close() {
-#if defined(WIN32)  && !defined(__CYGWIN__)
-  if (_fpt) {
-    fclose(_fpt);
-    clean_close(perr[0]);
-    clean_close(pin[1]);
-    clean_close(pout[0]);
-    _fpt = NULL;
-    return 0;
-  }
-  return -1;
-#else
-  int ret = ::pclose(_fpt);
-  _fpt=NULL;
-  return ret;
-#endif
-}
-
-#if defined(WIN32)  && !defined(__CYGWIN__)
-void Fl_Process::clean_close(HANDLE& h) {
-  if (h!= INVALID_HANDLE_VALUE) CloseHandle(h);
-  h = INVALID_HANDLE_VALUE;
-}
-#endif
-// ********** Fl_Process class end **********
-
-static Fl_Process s_proc;
-
-// Shell command support...
-
-static bool prepare_shell_command(const char * &command)  { // common pre-shell command code all platforms
-  shell_window->hide();
-  if (s_proc.desc()) {
-    fl_alert("Previous shell command still running!");
-    return false;
-  }
-  if ((command = shell_command_input->value()) == NULL || !*command) {
-    fl_alert("No shell command entered!");
-    return false;
-  }
-  if (shell_savefl_button->value()) {
-    save_cb(0, 0);
-  }
-  if (shell_writecode_button->value()) {
-    batch_mode = 1;
-    write_cb(0, 0);
-    batch_mode = 0;
-  }
-  if (shell_writemsgs_button->value()) {
-    batch_mode = 1;
-    write_strings_cb(0, 0);
-    batch_mode = 0;
-  }
-  return true;
-}
-
-#if !defined(__MWERKS__)
-// Support the full piped shell command...
-void
-shell_pipe_cb(FL_SOCKET, void*) {
-  char	line[1024]="";		// Line from command output...
-
-  if (s_proc.get_line(line, sizeof(line)) != NULL) {
-    // Add the line to the output list...
-    shell_run_buffer->append(line);
-  } else {
-    // End of file; tell the parent...
-    Fl::remove_fd(fileno(s_proc.desc()));
-    s_proc.close();
-    shell_run_buffer->append("... END SHELL COMMAND ...\n");
-  }
-
-  shell_run_display->scroll(shell_run_display->count_lines(0,
-                            shell_run_buffer->length(), 1), 0);
-}
-
-void
-do_shell_command(Fl_Return_Button*, void*) {
-  const char	*command=NULL;	// Command to run
-
-  if (!prepare_shell_command(command)) return;
-
-  // Show the output window and clear things...
-  shell_run_buffer->text("");
-  shell_run_buffer->append(command);
-  shell_run_buffer->append("\n");
-  shell_run_window->label("Shell Command Running...");
-
-  if (s_proc.popen((char *)command) == NULL) {
-    fl_alert("Unable to run shell command: %s", strerror(errno));
-    return;
-  }
-
-  shell_run_button->deactivate();
-  shell_run_window->hotspot(shell_run_display);
-  shell_run_window->show();
-
-  Fl::add_fd(fileno(s_proc.desc()), shell_pipe_cb);
-
-  while (s_proc.desc()) Fl::wait();
-
-  shell_run_button->activate();
-  shell_run_window->label("Shell Command Complete");
-  fl_beep();
-
-  while (shell_run_window->shown()) Fl::wait();
-}
-#else
-// Just do basic shell command stuff, no status window...
-void
-do_shell_command(Fl_Return_Button*, void*) {
-  const char	*command;	// Command to run
-  int		status;		// Status from command...
-
-  if (!prepare_shell_command(command)) return;
-
-  if ((status = system(command)) != 0) {
-    fl_alert("Shell command returned status %d!", status);
-  } else if (completion_button->value()) {
-    fl_message("Shell command completed successfully!");
-  }
-}
-#endif // !__MWERKS__
-
-void
-show_shell_window() {
-  shell_window->hotspot(shell_command_input);
-  shell_window->show();
-}
-
-void set_filename(const char *c) {
-  if (filename) free((void *)filename);
-  filename = c ? strdup(c) : NULL;
-
-  if (filename && !batch_mode)
-    update_history(filename);
-
-  set_modflag(modflag);
-}
-
-//
-// The Source View system offers an immediate preview of the code
-// files that will be generated by FLUID. It also marks the code
-// generated for the last selected item in the header and the source
-// file.
-//
-// Can we patent this?  ;-)  - Matt, mm@matthiasm.com
-//
-
-//
-// Update the header and source code highlighting depending on the
-// currently selected object
-//
-void update_sourceview_position()
-{
-  if (!sourceview_panel || !sourceview_panel->visible())
-    return;
-  if (sv_autoposition->value()==0)
-    return;
-  if (sourceview_panel && sourceview_panel->visible() && Fl_Type::current) {
-    int pos0, pos1;
-    if (sv_source->visible_r()) {
-      pos0 = Fl_Type::current->code_position;
-      pos1 = Fl_Type::current->code_position_end;
-      if (pos0>=0) {
-        if (pos1<pos0)
-          pos1 = pos0;
-        sv_source->buffer()->highlight(pos0, pos1);
-        int line = sv_source->buffer()->count_lines(0, pos0);
-        sv_source->scroll(line, 0);
-      }
-    }
-    if (sv_header->visible_r()) {
-      pos0 = Fl_Type::current->header_position;
-      pos1 = Fl_Type::current->header_position_end;
-      if (pos0>=0) {
-        if (pos1<pos0)
-          pos1 = pos0;
-        sv_header->buffer()->highlight(pos0, pos1);
-        int line = sv_header->buffer()->count_lines(0, pos0);
-        sv_header->scroll(line, 0);
-      }
-    }
-  }
-}
-
-void update_sourceview_position_cb(Fl_Tabs*, void*)
-{
-  update_sourceview_position();
-}
-
-static char *sv_source_filename = 0;
-static char *sv_header_filename = 0;
-
-//
-// Generate a header and source file in a temporary directory and
-// load those into the Code Viewer widgets.
-//
-void update_sourceview_cb(Fl_Button*, void*)
-{
-  if (!sourceview_panel || !sourceview_panel->visible())
-    return;
-  // generate space for the source and header file filenames
-  if (!sv_source_filename) {
-    sv_source_filename = (char*)malloc(FL_PATH_MAX);
-    fluid_prefs.getUserdataPath(sv_source_filename, FL_PATH_MAX);
-    strlcat(sv_source_filename, "source_view_tmp.cxx", FL_PATH_MAX);
-  }
-  if (!sv_header_filename) {
-    sv_header_filename = (char*)malloc(FL_PATH_MAX);
-    fluid_prefs.getUserdataPath(sv_header_filename, FL_PATH_MAX);
-    strlcat(sv_header_filename, "source_view_tmp.h", FL_PATH_MAX);
-  }
-
-  strlcpy(i18n_program, fl_filename_name(sv_source_filename), sizeof(i18n_program));
-  fl_filename_setext(i18n_program, sizeof(i18n_program), "");
-  const char *code_file_name_bak = code_file_name;
-  code_file_name = sv_source_filename;
-  const char *header_file_name_bak = header_file_name;
-  header_file_name = sv_header_filename;
-
-  // generate the code and load the files
-  write_sourceview = 1;
-  // generate files
-  if (write_code(sv_source_filename, sv_header_filename))
-  {
-    // load file into source editor
-    int pos = sv_source->top_line();
-    sv_source->buffer()->loadfile(sv_source_filename);
-    sv_source->scroll(pos, 0);
-    // load file into header editor
-    pos = sv_header->top_line();
-    sv_header->buffer()->loadfile(sv_header_filename);
-    sv_header->scroll(pos, 0);
-    // update the source code highlighting
-    update_sourceview_position();
-  }
-  write_sourceview = 0;
-
-  code_file_name = code_file_name_bak;
-  header_file_name = header_file_name_bak;
-}
-
-void update_sourceview_timer(void*)
-{
-  update_sourceview_cb(0,0);
-}
-
-// Set the "modified" flag and update the title of the main window...
-void set_modflag(int mf) {
-  const char	*basename;
-  static char	title[FL_PATH_MAX];
-
-  modflag = mf;
-
-  if (main_window) {
-    if (!filename) basename = "Untitled.fl";
-    else if ((basename = strrchr(filename, '/')) != NULL) basename ++;
-#if defined(WIN32) || defined(__EMX__)
-    else if ((basename = strrchr(filename, '\\')) != NULL) basename ++;
-#endif // WIN32 || __EMX__
-    else basename = filename;
-
-    if (modflag) {
-      snprintf(title, sizeof(title), "%s (modified)", basename);
-      main_window->label(title);
-    } else main_window->label(basename);
-  }
-  // if the UI was modified in any way, update the Source View panel
-  if (sourceview_panel && sourceview_panel->visible() && sv_autorefresh->value())
-  {
-    // we will only update earliest 0.5 seconds after the last change, and only
-    // if no other change was made, so dragging a widget will not generate any
-    // CPU load
-    Fl::remove_timeout(update_sourceview_timer, 0);
-    Fl::add_timeout(0.5, update_sourceview_timer, 0);
-  }
-
-  // Enable/disable the Save menu item...
-  if (modflag) save_item->activate();
-  else save_item->deactivate();
-}
-
-////////////////////////////////////////////////////////////////
-
-static int arg(int argc, char** argv, int& i) {
-  if (argv[i][1] == 'u' && !argv[i][2]) {update_file++; batch_mode++; i++; return 1;}
-  if (argv[i][1] == 'c' && !argv[i][2]) {compile_file++; batch_mode++; i++; return 1;}
-  if (argv[i][1] == 'c' && argv[i][2] == 's' && !argv[i][3]) {compile_file++; compile_strings++; batch_mode++; i++; return 1;}
-  if (argv[i][1] == 'o' && !argv[i][2] && i+1 < argc) {
-    code_file_name = argv[i+1];
-    code_file_set  = 1;
-    i += 2;
-    return 2;
-  }
-  if (argv[i][1] == 'h' && !argv[i][2]) {
-    header_file_name = argv[i+1];
-    header_file_set  = 1;
-    i += 2;
-    return 2;
-  }
-  Fl_Plugin_Manager pm("commandline");
-  int j, n = pm.plugins();
-  for (j=0; j<n; j++) {
-    Fl_Commandline_Plugin *pi = (Fl_Commandline_Plugin*)pm.plugin(j);
-    int r = pi->arg(argc, argv, i);
-    if (r) return r;
-  }
-  return 0;
-}
-
-#if ! (defined(WIN32) && !defined (__CYGWIN__))
-
-int quit_flag = 0;
-#include <signal.h>
-#ifdef _sigargs
-#define SIGARG _sigargs
-#else
-#ifdef __sigargs
-#define SIGARG __sigargs
-#else
-#define SIGARG int // you may need to fix this for older systems
-#endif
-#endif
-
-extern "C" {
-static void sigint(SIGARG) {
-  signal(SIGINT,sigint);
-  quit_flag = 1;
-}
-}
-#endif
-
-int main(int argc,char **argv) {
-  int i = 1;
-  
-  if (!Fl::args(argc,argv,i,arg) || i < argc-1) {
-    static const char *msg = 
-      "usage: %s <switches> name.fl\n"
-      " -u : update .fl file and exit (may be combined with '-c' or '-cs')\n"
-      " -c : write .cxx and .h and exit\n"
-      " -cs : write .cxx and .h and strings and exit\n"
-      " -o <name> : .cxx output filename, or extension if <name> starts with '.'\n"
-      " -h <name> : .h output filename, or extension if <name> starts with '.'\n";
-    int len = (int)(strlen(msg) + strlen(argv[0]) + strlen(Fl::help));
-    Fl_Plugin_Manager pm("commandline");
-    int i, n = pm.plugins();
-    for (i=0; i<n; i++) {
-      Fl_Commandline_Plugin *pi = (Fl_Commandline_Plugin*)pm.plugin(i);
-      if (pi) len += strlen(pi->help());
-    }
-    char *buf = (char*)malloc(len+1);
-    sprintf(buf, msg, argv[0]);
-    for (i=0; i<n; i++) {
-      Fl_Commandline_Plugin *pi = (Fl_Commandline_Plugin*)pm.plugin(i);
-      if (pi) strcat(buf, pi->help());
-    }
-    strcat(buf, Fl::help);
-#ifdef _MSC_VER
-    fl_message("%s\n", buf);
-#else
-    fprintf(stderr, "%s\n", buf);
-#endif
-    free(buf);
-    return 1;
-  }
-  if (exit_early)
-    exit(0);
-  
-  const char *c = argv[i];
-
-  fl_register_images();
-
-  make_main_window();
-
-
-  if (c) set_filename(c);
-  if (!batch_mode) {
-#ifdef __APPLE__
-    fl_open_callback(apple_open_cb);
-#endif // __APPLE__
-    Fl::visual((Fl_Mode)(FL_DOUBLE|FL_INDEX));
-    Fl_File_Icon::load_system_icons();
-    main_window->callback(exit_cb);
-    position_window(main_window,"main_window_pos", 1, 10, 30, WINWIDTH, WINHEIGHT );
-    main_window->show(argc,argv);
-    toggle_widgetbin_cb(0,0);
-    toggle_sourceview_cb(0,0);
-    if (!c && openlast_button->value() && absolute_history[0][0]) {
-      // Open previous file when no file specified...
-      open_history_cb(0, absolute_history[0]);
-    }
-  }
-  undo_suspend();
-  if (c && !read_file(c,0)) {
-    if (batch_mode) {
-      fprintf(stderr,"%s : %s\n", c, strerror(errno));
-      exit(1);
-    }
-    fl_message("Can't read %s: %s", c, strerror(errno));
-  }
-  undo_resume();
-
-  if (update_file) {		// fluid -u
-    write_file(c,0);
-    if (!compile_file)
-      exit(0);
-  }
-
-  if (compile_file) {		// fluid -c[s]
-    if (compile_strings)
-      write_strings_cb(0,0);
-    write_cb(0,0);
-    exit(0);
-  }
-  set_modflag(0);
-  undo_clear();
-#ifndef WIN32
-  signal(SIGINT,sigint);
-#endif
-
-  // Set (but do not start) timer callback for external editor updates
-  ExternalCodeEditor::set_update_timer_callback(external_editor_timer);
-
-  grid_cb(horizontal_input, 0); // Makes sure that windows get snap params...
-
-#ifdef WIN32
-  Fl::run();
-#else
-  while (!quit_flag) Fl::wait();
-
-  if (quit_flag) exit_cb(0,0);
-#endif // WIN32
-
-  undo_clear();
-
-  return (0);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/fluid.desktop
+++ /dev/null
@@ -1,10 +1,0 @@
-[Desktop Entry]
-Name=FLUID
-Comment=FLTK GUI Designer
-TryExec=fluid
-Exec=fluid %F
-Icon=fluid
-Terminal=false
-Type=Application
-MimeType=application/x-fluid;
-Categories=Development;GUIDesigner;
--- a/DoConfig/fltk/fluid/fluid.xml
+++ /dev/null
@@ -1,7 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
-  <mime-type type="application/x-fluid">
-    <comment>FLUID GUI Design</comment>
-    <glob pattern="*.fl"/>
-  </mime-type>
-</mime-info>
--- a/DoConfig/fltk/fluid/function_panel.cxx
+++ /dev/null
@@ -1,1163 +1,0 @@
-//
-// "$Id$"
-//
-// Code dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "function_panel.h"
-#include <FL/Fl_Pixmap.H>
-#include "Fl_Type.h"
-#include "undo.h"
-extern class Fl_Pixmap *pixmap[];
-extern class Fl_Type *Fl_Type_make(const char*);
-extern void select_only(Fl_Type*);
-extern void exit_cb(Fl_Widget*, void*);
-extern void toggle_widgetbin_cb(Fl_Widget*, void*);
-
-/**
- Allow widget navigation on text fields with Tab.
-*/
-static int use_tab_navigation(int, Fl_Text_Editor*) {
-  return 0;
-}
-
-Fl_Double_Window *function_panel=(Fl_Double_Window *)0;
-
-Fl_Choice *f_public_member_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_f_public_member_choice[] = {
- {"private", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"public", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"protected", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *f_public_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_f_public_choice[] = {
- {"local", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"global", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Light_Button *f_c_button=(Fl_Light_Button *)0;
-
-Fl_Input *f_name_input=(Fl_Input *)0;
-
-Fl_Input *f_return_type_input=(Fl_Input *)0;
-
-Fl_Text_Editor *f_comment_input=(Fl_Text_Editor *)0;
-
-Fl_Return_Button *f_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *f_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_function_panel() {
-  { function_panel = new Fl_Double_Window(343, 232, "Function/Method Properties");
-    { Fl_Group* o = new Fl_Group(10, 10, 270, 20);
-      { f_public_member_choice = new Fl_Choice(10, 10, 75, 20);
-        f_public_member_choice->tooltip("Change member access attribute.");
-        f_public_member_choice->down_box(FL_BORDER_BOX);
-        f_public_member_choice->labelsize(11);
-        f_public_member_choice->textsize(11);
-        f_public_member_choice->when(FL_WHEN_CHANGED);
-        f_public_member_choice->menu(menu_f_public_member_choice);
-      } // Fl_Choice* f_public_member_choice
-      { f_public_choice = new Fl_Choice(10, 10, 75, 20);
-        f_public_choice->tooltip("Change widget accessibility.");
-        f_public_choice->down_box(FL_BORDER_BOX);
-        f_public_choice->labelsize(11);
-        f_public_choice->textsize(11);
-        f_public_choice->when(FL_WHEN_CHANGED);
-        f_public_choice->menu(menu_f_public_choice);
-      } // Fl_Choice* f_public_choice
-      { f_c_button = new Fl_Light_Button(95, 10, 120, 20, "C declaration");
-        f_c_button->tooltip("Declare with a C interface instead of C++.");
-        f_c_button->labelsize(11);
-      } // Fl_Light_Button* f_c_button
-      { Fl_Box* o = new Fl_Box(235, 10, 45, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    { f_name_input = new Fl_Input(10, 50, 320, 20, "Name(args): (blank for main())");
-      f_name_input->tooltip("The name of the function or method.");
-      f_name_input->labelfont(1);
-      f_name_input->labelsize(11);
-      f_name_input->textfont(4);
-      f_name_input->textsize(11);
-      f_name_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      f_name_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* f_name_input
-    { f_return_type_input = new Fl_Input(10, 90, 320, 20, "Return Type: (blank to return outermost widget)");
-      f_return_type_input->tooltip("The return type of the function or method.");
-      f_return_type_input->labelfont(1);
-      f_return_type_input->labelsize(11);
-      f_return_type_input->textfont(4);
-      f_return_type_input->textsize(11);
-      f_return_type_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      f_return_type_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* f_return_type_input
-    { f_comment_input = new Fl_Text_Editor(10, 125, 320, 65, "Comment:");
-      f_comment_input->tooltip("Function comment in Doxygen format");
-      f_comment_input->box(FL_DOWN_BOX);
-      f_comment_input->labelfont(1);
-      f_comment_input->labelsize(11);
-      f_comment_input->textfont(4);
-      f_comment_input->textsize(11);
-      f_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      Fl_Group::current()->resizable(f_comment_input);
-      f_comment_input->buffer(new Fl_Text_Buffer());
-      f_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
-    } // Fl_Text_Editor* f_comment_input
-    { Fl_Group* o = new Fl_Group(10, 200, 320, 20);
-      { f_panel_ok = new Fl_Return_Button(220, 200, 50, 20, "OK");
-        f_panel_ok->tooltip("Apply the changes.");
-        f_panel_ok->labelsize(11);
-        f_panel_ok->window()->hotspot(f_panel_ok);
-      } // Fl_Return_Button* f_panel_ok
-      { f_panel_cancel = new Fl_Button(280, 200, 50, 20, "Cancel");
-        f_panel_cancel->tooltip("Cancel the changes.");
-        f_panel_cancel->labelsize(11);
-      } // Fl_Button* f_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 200, 205, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    function_panel->set_modal();
-    function_panel->end();
-  } // Fl_Double_Window* function_panel
-  return function_panel;
-}
-
-Fl_Double_Window *code_panel=(Fl_Double_Window *)0;
-
-static void cb_code_panel(Fl_Double_Window*, void*) {
-  if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) 
-    return; // ignore Escape
-code_panel->hide(); // otherwise hide..;
-}
-
-CodeEditor *code_input=(CodeEditor *)0;
-
-Fl_Return_Button *code_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *code_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_code_panel() {
-  { Fl_Double_Window* o = code_panel = new Fl_Double_Window(540, 180, "Code Properties");
-    code_panel->labelsize(11);
-    code_panel->callback((Fl_Callback*)cb_code_panel);
-    { CodeEditor* o = code_input = new CodeEditor(10, 10, 520, 130);
-      code_input->box(FL_DOWN_BOX);
-      code_input->color(FL_BACKGROUND2_COLOR);
-      code_input->selection_color(FL_SELECTION_COLOR);
-      code_input->labeltype(FL_NORMAL_LABEL);
-      code_input->labelfont(0);
-      code_input->labelsize(11);
-      code_input->labelcolor(FL_FOREGROUND_COLOR);
-      code_input->textfont(4);
-      code_input->textsize(11);
-      code_input->align(Fl_Align(FL_ALIGN_TOP));
-      code_input->when(FL_WHEN_RELEASE);
-      Fl_Group::current()->resizable(code_input);
-      o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);
-    } // CodeEditor* code_input
-    { Fl_Group* o = new Fl_Group(10, 150, 520, 20);
-      o->labelsize(11);
-      { code_panel_ok = new Fl_Return_Button(400, 150, 60, 20, "OK");
-        code_panel_ok->labelsize(11);
-        code_panel_ok->window()->hotspot(code_panel_ok);
-      } // Fl_Return_Button* code_panel_ok
-      { code_panel_cancel = new Fl_Button(470, 150, 60, 20, "Cancel");
-        code_panel_cancel->labelsize(11);
-      } // Fl_Button* code_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 150, 380, 20);
-        o->labelsize(11);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    o->size_range(200, 150);
-    code_panel->set_modal();
-    code_panel->end();
-  } // Fl_Double_Window* code_panel
-  // Enable line numbers
-  code_input->linenumber_width(60);
-  code_input->linenumber_size(code_input->Fl_Text_Display::textsize());
-  return code_panel;
-}
-
-Fl_Double_Window *codeblock_panel=(Fl_Double_Window *)0;
-
-Fl_Input *code_before_input=(Fl_Input *)0;
-
-Fl_Input *code_after_input=(Fl_Input *)0;
-
-Fl_Return_Button *codeblock_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *codeblock_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_codeblock_panel() {
-  { Fl_Double_Window* o = codeblock_panel = new Fl_Double_Window(300, 115, "Code Block Properties");
-    codeblock_panel->labelsize(11);
-    { code_before_input = new Fl_Input(10, 15, 280, 20, "Conditional code block");
-      code_before_input->tooltip("#ifdef or similar conditional code block.");
-      code_before_input->labelsize(11);
-      code_before_input->textfont(4);
-      code_before_input->textsize(11);
-      code_before_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      code_before_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* code_before_input
-    { code_after_input = new Fl_Input(10, 55, 280, 20, "\"{...child code...}\" is inserted here");
-      code_after_input->tooltip("#endif or similar conditional code block.");
-      code_after_input->labelsize(11);
-      code_after_input->textfont(4);
-      code_after_input->textsize(11);
-      code_after_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      code_after_input->when(FL_WHEN_NEVER);
-      Fl_Group::current()->resizable(code_after_input);
-    } // Fl_Input* code_after_input
-    { Fl_Group* o = new Fl_Group(10, 85, 280, 20);
-      { codeblock_panel_ok = new Fl_Return_Button(160, 85, 60, 20, "OK");
-        codeblock_panel_ok->labelsize(11);
-        codeblock_panel_ok->window()->hotspot(codeblock_panel_ok);
-      } // Fl_Return_Button* codeblock_panel_ok
-      { codeblock_panel_cancel = new Fl_Button(230, 85, 60, 20, "Cancel");
-        codeblock_panel_cancel->shortcut(0xff1b);
-        codeblock_panel_cancel->labelsize(11);
-      } // Fl_Button* codeblock_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 85, 140, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    o->size_range(o->w(), o->h(), Fl::w(), o->h());
-    codeblock_panel->set_modal();
-    codeblock_panel->end();
-  } // Fl_Double_Window* codeblock_panel
-  return codeblock_panel;
-}
-
-Fl_Double_Window *declblock_panel=(Fl_Double_Window *)0;
-
-Fl_Choice *declblock_public_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_declblock_public_choice[] = {
- {"in source code only", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"in header and source", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Light_Button *declblock_public_button_x=(Fl_Light_Button *)0;
-
-Fl_Input *decl_before_input=(Fl_Input *)0;
-
-Fl_Input *decl_after_input=(Fl_Input *)0;
-
-Fl_Return_Button *declblock_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *declblock_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_declblock_panel() {
-  { Fl_Double_Window* o = declblock_panel = new Fl_Double_Window(300, 135, "Declaration Block Properties");
-    declblock_panel->labelsize(11);
-    { Fl_Group* o = new Fl_Group(10, 10, 280, 20);
-      { declblock_public_choice = new Fl_Choice(10, 10, 140, 20);
-        declblock_public_choice->tooltip("Change widget accessibility.");
-        declblock_public_choice->down_box(FL_BORDER_BOX);
-        declblock_public_choice->labelsize(11);
-        declblock_public_choice->textsize(11);
-        declblock_public_choice->when(FL_WHEN_NEVER);
-        declblock_public_choice->menu(menu_declblock_public_choice);
-      } // Fl_Choice* declblock_public_choice
-      { declblock_public_button_x = new Fl_Light_Button(10, 10, 60, 20, "public");
-        declblock_public_button_x->tooltip("Make the declaration publicly accessible.");
-        declblock_public_button_x->labelsize(11);
-        declblock_public_button_x->when(FL_WHEN_NEVER);
-        declblock_public_button_x->hide();
-      } // Fl_Light_Button* declblock_public_button_x
-      { Fl_Box* o = new Fl_Box(155, 10, 135, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    { decl_before_input = new Fl_Input(10, 40, 280, 20);
-      decl_before_input->tooltip("#ifdef or similar conditional declaration block.");
-      decl_before_input->labelsize(11);
-      decl_before_input->textfont(4);
-      decl_before_input->textsize(11);
-      decl_before_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      decl_before_input->when(FL_WHEN_NEVER);
-      Fl_Group::current()->resizable(decl_before_input);
-    } // Fl_Input* decl_before_input
-    { decl_after_input = new Fl_Input(10, 75, 280, 20, "\"\\n...child code...\\n\" is inserted here");
-      decl_after_input->tooltip("#endif or similar declaration code block.");
-      decl_after_input->labelsize(11);
-      decl_after_input->textfont(4);
-      decl_after_input->textsize(11);
-      decl_after_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      decl_after_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* decl_after_input
-    { Fl_Group* o = new Fl_Group(10, 105, 280, 20);
-      { declblock_panel_ok = new Fl_Return_Button(160, 105, 60, 20, "OK");
-        declblock_panel_ok->labelsize(11);
-        declblock_panel_ok->window()->hotspot(declblock_panel_ok);
-      } // Fl_Return_Button* declblock_panel_ok
-      { declblock_panel_cancel = new Fl_Button(230, 105, 60, 20, "Cancel");
-        declblock_panel_cancel->shortcut(0xff1b);
-        declblock_panel_cancel->labelsize(11);
-      } // Fl_Button* declblock_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 105, 140, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    o->size_range(o->w(), o->h(), Fl::w(), o->h());
-    declblock_panel->set_modal();
-    declblock_panel->end();
-  } // Fl_Double_Window* declblock_panel
-  return declblock_panel;
-}
-
-Fl_Double_Window *decl_panel=(Fl_Double_Window *)0;
-
-Fl_Choice *decl_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_decl_choice[] = {
- {"in source file only", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"in header file only", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"\"static\" in source file", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"in source and \"extern\" in header", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *decl_class_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_decl_class_choice[] = {
- {"private", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"public", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"protected", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Input *decl_input=(Fl_Input *)0;
-
-Fl_Text_Editor *decl_comment_input=(Fl_Text_Editor *)0;
-
-Fl_Return_Button *decl_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *decl_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_decl_panel() {
-  { decl_panel = new Fl_Double_Window(343, 237, "Declaration Properties");
-    decl_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-    { Fl_Group* o = new Fl_Group(10, 10, 270, 20);
-      { Fl_Box* o = new Fl_Box(200, 10, 80, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      { decl_choice = new Fl_Choice(10, 10, 185, 20);
-        decl_choice->down_box(FL_BORDER_BOX);
-        decl_choice->labelsize(11);
-        decl_choice->textsize(11);
-        decl_choice->menu(menu_decl_choice);
-      } // Fl_Choice* decl_choice
-      { decl_class_choice = new Fl_Choice(10, 10, 75, 20);
-        decl_class_choice->down_box(FL_BORDER_BOX);
-        decl_class_choice->labelsize(11);
-        decl_class_choice->textsize(11);
-        decl_class_choice->menu(menu_decl_class_choice);
-      } // Fl_Choice* decl_class_choice
-      o->end();
-    } // Fl_Group* o
-    { decl_input = new Fl_Input(10, 40, 320, 20, "This can be any declaration, like \"int x;\", an external symbol like \"exter\
-n int foo();\", a #directive like \"#include <foo.h>\", a comment like \"//foo\
-\" or \"/*foo*/\", or typedef like \"typedef char byte;\" or \"using std::list\
-;\".");
-      decl_input->tooltip("Declaration text.");
-      decl_input->labelsize(11);
-      decl_input->textfont(4);
-      decl_input->textsize(11);
-      decl_input->align(Fl_Align(134));
-      decl_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* decl_input
-    { decl_comment_input = new Fl_Text_Editor(10, 130, 320, 65, "Comment:");
-      decl_comment_input->tooltip("Declaration comment in Doxygen format");
-      decl_comment_input->box(FL_DOWN_BOX);
-      decl_comment_input->labelfont(1);
-      decl_comment_input->labelsize(11);
-      decl_comment_input->textfont(4);
-      decl_comment_input->textsize(11);
-      decl_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      Fl_Group::current()->resizable(decl_comment_input);
-      decl_comment_input->buffer(new Fl_Text_Buffer());
-      decl_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
-    } // Fl_Text_Editor* decl_comment_input
-    { Fl_Group* o = new Fl_Group(10, 205, 320, 20);
-      { decl_panel_ok = new Fl_Return_Button(200, 205, 60, 20, "OK");
-        decl_panel_ok->labelsize(11);
-        decl_panel_ok->window()->hotspot(decl_panel_ok);
-      } // Fl_Return_Button* decl_panel_ok
-      { decl_panel_cancel = new Fl_Button(270, 205, 60, 20, "Cancel");
-        decl_panel_cancel->shortcut(0xff1b);
-        decl_panel_cancel->labelsize(11);
-      } // Fl_Button* decl_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 205, 185, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    decl_panel->size_range(343, 237);
-    decl_panel->end();
-  } // Fl_Double_Window* decl_panel
-  return decl_panel;
-}
-
-Fl_Double_Window *data_panel=(Fl_Double_Window *)0;
-
-Fl_Choice *data_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_data_choice[] = {
- {"in source file only", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"in header file only", 0,  0, 0, 16, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"\"static\" in source file", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"in source and \"extern\" in header", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Choice *data_class_choice=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_data_class_choice[] = {
- {"private", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"public", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"protected", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Input *data_input=(Fl_Input *)0;
-
-Fl_Input *data_filename=(Fl_Input *)0;
-
-Fl_Button *data_filebrowser=(Fl_Button *)0;
-
-Fl_Text_Editor *data_comment_input=(Fl_Text_Editor *)0;
-
-Fl_Return_Button *data_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *data_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_data_panel() {
-  { data_panel = new Fl_Double_Window(343, 237, "Binary Data Properties");
-    data_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-    { Fl_Group* o = new Fl_Group(10, 10, 270, 20);
-      { Fl_Box* o = new Fl_Box(200, 10, 80, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      { data_choice = new Fl_Choice(10, 10, 185, 20);
-        data_choice->down_box(FL_BORDER_BOX);
-        data_choice->labelsize(11);
-        data_choice->textsize(11);
-        data_choice->menu(menu_data_choice);
-      } // Fl_Choice* data_choice
-      { data_class_choice = new Fl_Choice(10, 10, 75, 20);
-        data_class_choice->down_box(FL_BORDER_BOX);
-        data_class_choice->labelsize(11);
-        data_class_choice->textsize(11);
-        data_class_choice->menu(menu_data_class_choice);
-      } // Fl_Choice* data_class_choice
-      o->end();
-    } // Fl_Group* o
-    { data_input = new Fl_Input(10, 52, 320, 20, "Variable Name:");
-      data_input->tooltip("Binary Data variables are declared \"const unsigned char []\".");
-      data_input->labelfont(1);
-      data_input->labelsize(11);
-      data_input->textfont(4);
-      data_input->textsize(11);
-      data_input->align(Fl_Align(133));
-      data_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* data_input
-    { data_filename = new Fl_Input(10, 90, 280, 20, "Filename:");
-      data_filename->tooltip("Name and path of binary file that will be included.");
-      data_filename->labelfont(1);
-      data_filename->labelsize(11);
-      data_filename->textfont(4);
-      data_filename->textsize(11);
-      data_filename->align(Fl_Align(133));
-      data_filename->when(FL_WHEN_NEVER);
-    } // Fl_Input* data_filename
-    { data_filebrowser = new Fl_Button(290, 90, 40, 20, "@fileopen");
-      data_filebrowser->labelcolor((Fl_Color)134);
-    } // Fl_Button* data_filebrowser
-    { data_comment_input = new Fl_Text_Editor(10, 130, 320, 65, "Comment:");
-      data_comment_input->tooltip("Declaration comment in Doxygen format");
-      data_comment_input->box(FL_DOWN_BOX);
-      data_comment_input->labelfont(1);
-      data_comment_input->labelsize(11);
-      data_comment_input->textfont(4);
-      data_comment_input->textsize(11);
-      data_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      Fl_Group::current()->resizable(data_comment_input);
-      data_comment_input->buffer(new Fl_Text_Buffer());
-      data_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
-    } // Fl_Text_Editor* data_comment_input
-    { Fl_Group* o = new Fl_Group(10, 205, 320, 20);
-      { data_panel_ok = new Fl_Return_Button(200, 205, 60, 20, "OK");
-        data_panel_ok->labelsize(11);
-        data_panel_ok->window()->hotspot(data_panel_ok);
-      } // Fl_Return_Button* data_panel_ok
-      { data_panel_cancel = new Fl_Button(270, 205, 60, 20, "Cancel");
-        data_panel_cancel->shortcut(0xff1b);
-        data_panel_cancel->labelsize(11);
-      } // Fl_Button* data_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 205, 185, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    data_panel->size_range(343, 237);
-    data_panel->end();
-  } // Fl_Double_Window* data_panel
-  return data_panel;
-}
-
-Fl_Double_Window *class_panel=(Fl_Double_Window *)0;
-
-Fl_Light_Button *c_public_button=(Fl_Light_Button *)0;
-
-Fl_Input *c_name_input=(Fl_Input *)0;
-
-Fl_Input *c_subclass_input=(Fl_Input *)0;
-
-Fl_Text_Editor *c_comment_input=(Fl_Text_Editor *)0;
-
-Fl_Return_Button *c_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *c_panel_cancel=(Fl_Button *)0;
-
-Fl_Double_Window* make_class_panel() {
-  { class_panel = new Fl_Double_Window(342, 196, "Class Properties");
-    class_panel->labelsize(11);
-    { Fl_Group* o = new Fl_Group(10, 10, 280, 20);
-      o->hide();
-      { c_public_button = new Fl_Light_Button(10, 10, 60, 20, "public");
-        c_public_button->tooltip("Make the class publicly accessible.");
-        c_public_button->labelsize(11);
-        c_public_button->when(FL_WHEN_NEVER);
-        c_public_button->hide();
-      } // Fl_Light_Button* c_public_button
-      { Fl_Box* o = new Fl_Box(80, 10, 210, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    { c_name_input = new Fl_Input(10, 20, 320, 20, "Name:");
-      c_name_input->tooltip("Name of class.");
-      c_name_input->labelfont(1);
-      c_name_input->labelsize(11);
-      c_name_input->textfont(4);
-      c_name_input->textsize(11);
-      c_name_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      c_name_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* c_name_input
-    { c_subclass_input = new Fl_Input(10, 55, 320, 20, "Subclass of (text between : and {)");
-      c_subclass_input->tooltip("Name of subclass.");
-      c_subclass_input->labelfont(1);
-      c_subclass_input->labelsize(11);
-      c_subclass_input->textfont(4);
-      c_subclass_input->textsize(11);
-      c_subclass_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      c_subclass_input->when(FL_WHEN_NEVER);
-    } // Fl_Input* c_subclass_input
-    { c_comment_input = new Fl_Text_Editor(10, 90, 320, 65, "Comment:");
-      c_comment_input->tooltip("Class comment in Doxygen format");
-      c_comment_input->box(FL_DOWN_BOX);
-      c_comment_input->labelfont(1);
-      c_comment_input->labelsize(11);
-      c_comment_input->textfont(4);
-      c_comment_input->textsize(11);
-      c_comment_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      Fl_Group::current()->resizable(c_comment_input);
-      c_comment_input->buffer(new Fl_Text_Buffer());
-      c_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);
-    } // Fl_Text_Editor* c_comment_input
-    { Fl_Group* o = new Fl_Group(10, 165, 320, 20);
-      { c_panel_ok = new Fl_Return_Button(200, 165, 60, 20, "OK");
-        c_panel_ok->labelsize(11);
-        c_panel_ok->window()->hotspot(c_panel_ok);
-      } // Fl_Return_Button* c_panel_ok
-      { c_panel_cancel = new Fl_Button(270, 165, 60, 20, "Cancel");
-        c_panel_cancel->shortcut(0xff1b);
-        c_panel_cancel->labelsize(11);
-      } // Fl_Button* c_panel_cancel
-      { Fl_Box* o = new Fl_Box(10, 165, 185, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    class_panel->set_modal();
-    class_panel->size_range(343, 188);
-    class_panel->end();
-  } // Fl_Double_Window* class_panel
-  return class_panel;
-}
-
-Fl_Double_Window *comment_panel=(Fl_Double_Window *)0;
-
-CodeEditor *comment_input=(CodeEditor *)0;
-
-Fl_Return_Button *comment_panel_ok=(Fl_Return_Button *)0;
-
-Fl_Button *comment_panel_cancel=(Fl_Button *)0;
-
-Fl_Light_Button *comment_in_source=(Fl_Light_Button *)0;
-
-Fl_Light_Button *comment_in_header=(Fl_Light_Button *)0;
-
-Fl_Menu_Button *comment_predefined=(Fl_Menu_Button *)0;
-
-Fl_Button *comment_load=(Fl_Button *)0;
-
-Fl_Double_Window* make_comment_panel() {
-  { Fl_Double_Window* o = comment_panel = new Fl_Double_Window(550, 280, "Comment Properties");
-    comment_panel->labelsize(11);
-    { CodeEditor* o = comment_input = new CodeEditor(110, 10, 430, 230);
-      comment_input->box(FL_DOWN_BOX);
-      comment_input->color(FL_BACKGROUND2_COLOR);
-      comment_input->selection_color(FL_SELECTION_COLOR);
-      comment_input->labeltype(FL_NORMAL_LABEL);
-      comment_input->labelfont(0);
-      comment_input->labelsize(11);
-      comment_input->labelcolor(FL_FOREGROUND_COLOR);
-      comment_input->textfont(4);
-      comment_input->textsize(11);
-      comment_input->align(Fl_Align(FL_ALIGN_TOP));
-      comment_input->when(FL_WHEN_RELEASE);
-      Fl_Group::current()->resizable(comment_input);
-      o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);
-    } // CodeEditor* comment_input
-    { Fl_Group* o = new Fl_Group(110, 250, 430, 20);
-      o->labelsize(11);
-      { comment_panel_ok = new Fl_Return_Button(370, 250, 80, 20, "OK");
-        comment_panel_ok->labelsize(11);
-        comment_panel_ok->window()->hotspot(comment_panel_ok);
-      } // Fl_Return_Button* comment_panel_ok
-      { comment_panel_cancel = new Fl_Button(460, 250, 80, 20, "Cancel");
-        comment_panel_cancel->shortcut(0xff1b);
-        comment_panel_cancel->labelsize(11);
-      } // Fl_Button* comment_panel_cancel
-      { Fl_Box* o = new Fl_Box(110, 250, 250, 20);
-        o->labelsize(11);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 10, 90, 243);
-      o->labelsize(11);
-      { comment_in_source = new Fl_Light_Button(10, 10, 90, 20, "In Source");
-        comment_in_source->tooltip("Put the comment into the source (.cxx) file.");
-        comment_in_source->labelsize(11);
-        comment_in_source->when(FL_WHEN_NEVER);
-      } // Fl_Light_Button* comment_in_source
-      { comment_in_header = new Fl_Light_Button(10, 40, 90, 20, "In Header");
-        comment_in_header->tooltip("Put the comment into the header (.h) file.");
-        comment_in_header->labelsize(11);
-        comment_in_header->when(FL_WHEN_NEVER);
-      } // Fl_Light_Button* comment_in_header
-      { comment_predefined = new Fl_Menu_Button(10, 70, 90, 20, "Predefined");
-        comment_predefined->labelsize(11);
-        comment_predefined->textsize(11);
-      } // Fl_Menu_Button* comment_predefined
-      { comment_load = new Fl_Button(10, 100, 90, 20, "Import...");
-        comment_load->labelsize(11);
-      } // Fl_Button* comment_load
-      { Fl_Box* o = new Fl_Box(10, 132, 90, 121);
-        o->labelsize(11);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    o->size_range(320, 180);
-    comment_panel->set_modal();
-    comment_panel->end();
-  } // Fl_Double_Window* comment_panel
-  return comment_panel;
-}
-
-void type_make_cb(Fl_Widget*,void*d) {
-  undo_checkpoint();
-    Fl_Type *t = Fl_Type_make((char*)d);
-    if (t) {
-      select_only(t);
-      set_modflag(1);
-      t->open();
-    } else {
-      undo_current --;
-      undo_last --;
-    }
-}
-
-Fl_Window *widgetbin_panel=(Fl_Window *)0;
-
-static void cb_widgetbin_panel(Fl_Window* o, void* v) {
-  if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
-  exit_cb((Fl_Widget*)o, v);
-else  
-  toggle_widgetbin_cb((Fl_Widget*)o, v);
-}
-
-Fl_Window* make_widgetbin() {
-  { widgetbin_panel = new Fl_Window(574, 85, "Widget Bin");
-    widgetbin_panel->callback((Fl_Callback*)cb_widgetbin_panel);
-    widgetbin_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-    { Fl_Group* o = new Fl_Group(3, 3, 79, 79);
-      { Fl_Button* o = new Fl_Button(5, 5, 24, 24);
-        o->tooltip("Function");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Function"));
-        o->image(pixmap[7]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(30, 5, 24, 24);
-        o->tooltip("Class");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Class"));
-        o->image(pixmap[12]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(55, 5, 24, 24);
-        o->tooltip("Comment");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("comment"));
-        o->image(pixmap[46]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(5, 30, 24, 24);
-        o->tooltip("Code");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Code"));
-        o->image(pixmap[8]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(30, 30, 24, 24);
-        o->tooltip("Code Block");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("CodeBlock"));
-        o->image(pixmap[9]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(55, 30, 24, 24);
-        o->tooltip("Widget Class");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("widget_class"));
-        o->image(pixmap[48]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(5, 55, 24, 24);
-        o->tooltip("Declaration");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("decl"));
-        o->image(pixmap[10]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(30, 55, 24, 24);
-        o->tooltip("Declaration Block");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("declblock"));
-        o->image(pixmap[11]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(55, 55, 24, 24);
-        o->tooltip("Binary Data");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("data"));
-        o->image(pixmap[49]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(87, 3, 79, 79);
-      { Fl_Button* o = new Fl_Button(89, 5, 24, 24);
-        o->tooltip("Window");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Window"));
-        o->image(pixmap[1]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(114, 5, 24, 24);
-        o->tooltip("Group");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Group"));
-        o->image(pixmap[6]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(139, 5, 24, 24);
-        o->tooltip("Pack");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Pack"));
-        o->image(pixmap[22]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(89, 30, 24, 24);
-        o->tooltip("Tabs");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tabs"));
-        o->image(pixmap[13]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(114, 30, 24, 24);
-        o->tooltip("Scroll");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Scroll"));
-        o->image(pixmap[19]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(139, 30, 24, 24);
-        o->tooltip("Table");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Table"));
-        o->image(pixmap[51]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(89, 55, 24, 24);
-        o->tooltip("Tile");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tile"));
-        o->image(pixmap[20]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(114, 55, 24, 24);
-        o->tooltip("Wizard");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Wizard"));
-        o->image(pixmap[21]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(171, 3, 54, 79);
-      { Fl_Button* o = new Fl_Button(173, 5, 24, 24);
-        o->tooltip("Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Button"));
-        o->image(pixmap[2]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(198, 5, 24, 24);
-        o->tooltip("Return Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Return_Button"));
-        o->image(pixmap[23]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(173, 30, 24, 24);
-        o->tooltip("Light Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Light_Button"));
-        o->image(pixmap[24]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(198, 30, 24, 24);
-        o->tooltip("Repeat Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Repeat_Button"));
-        o->image(pixmap[25]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(173, 55, 24, 24);
-        o->tooltip("Check Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Check_Button"));
-        o->image(pixmap[3]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(198, 55, 24, 24);
-        o->tooltip("Round Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Round_Button"));
-        o->image(pixmap[4]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(230, 3, 104, 79);
-      { Fl_Button* o = new Fl_Button(232, 5, 24, 24);
-        o->tooltip("Slider");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Slider"));
-        o->image(pixmap[37]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(257, 5, 24, 24);
-        o->tooltip("Scroll Bar");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Scrollbar"));
-        o->image(pixmap[38]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(282, 5, 24, 24);
-        o->tooltip("Value Slider");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Slider"));
-        o->image(pixmap[39]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(307, 5, 24, 24);
-        o->tooltip("Value Output");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Output"));
-        o->image(pixmap[45]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(232, 30, 24, 24);
-        o->tooltip("Adjuster");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Adjuster"));
-        o->image(pixmap[40]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(257, 30, 24, 24);
-        o->tooltip("Counter");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Counter"));
-        o->image(pixmap[41]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(282, 30, 24, 24);
-        o->tooltip("Dial");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Dial"));
-        o->image(pixmap[42]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(232, 55, 24, 24);
-        o->tooltip("Roller");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Roller"));
-        o->image(pixmap[43]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(257, 55, 24, 24);
-        o->tooltip("Spinner");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Spinner"));
-        o->image(pixmap[47]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(282, 55, 24, 24);
-        o->tooltip("Value Input");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Value_Input"));
-        o->image(pixmap[44]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(339, 3, 54, 79);
-      { Fl_Button* o = new Fl_Button(341, 5, 24, 24);
-        o->tooltip("Input");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Input"));
-        o->image(pixmap[14]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(366, 5, 24, 24);
-        o->tooltip("Output");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Output"));
-        o->image(pixmap[27]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(341, 30, 24, 24);
-        o->tooltip("Text Edit");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Text_Editor"));
-        o->image(pixmap[29]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(366, 30, 24, 24);
-        o->tooltip("Text Display");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Text_Display"));
-        o->image(pixmap[28]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(341, 55, 24, 24);
-        o->tooltip("File Input");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_File_Input"));
-        o->image(pixmap[30]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(398, 3, 54, 79);
-      { Fl_Button* o = new Fl_Button(400, 5, 24, 24);
-        o->tooltip("Menu Bar");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Menu_Bar"));
-        o->image(pixmap[17]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(425, 5, 24, 24);
-        o->tooltip("Input Choice");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Input_Choice"));
-        o->image(pixmap[15]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(400, 30, 24, 24);
-        o->tooltip("Menu Button");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Menu_Button"));
-        o->image(pixmap[26]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(425, 30, 24, 24);
-        o->tooltip("Menu Item");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("menuitem"));
-        o->image(pixmap[16]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(400, 55, 24, 24);
-        o->tooltip("Choice");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Choice"));
-        o->image(pixmap[15]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(425, 55, 24, 24);
-        o->tooltip("Sub Menu");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("submenu"));
-        o->image(pixmap[18]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(457, 3, 54, 79);
-      { Fl_Button* o = new Fl_Button(459, 5, 24, 24);
-        o->tooltip("Browser");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Browser"));
-        o->image(pixmap[31]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(484, 5, 24, 24);
-        o->tooltip("Tree");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Tree"));
-        o->image(pixmap[50]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(459, 30, 24, 24);
-        o->tooltip("Check Browser");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Check_Browser"));
-        o->image(pixmap[32]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(459, 55, 24, 24);
-        o->tooltip("File Browser");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_File_Browser"));
-        o->image(pixmap[33]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(515, 3, 55, 79);
-      { Fl_Button* o = new Fl_Button(517, 5, 24, 24);
-        o->tooltip("Box");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Box"));
-        o->image(pixmap[5]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(542, 5, 24, 24);
-        o->tooltip("Clock");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Clock"));
-        o->image(pixmap[34]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(517, 30, 24, 24);
-        o->tooltip("Help Browser");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Help_View"));
-        o->image(pixmap[35]);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(517, 55, 24, 24);
-        o->tooltip("Progress");
-        o->box(FL_THIN_UP_BOX);
-        o->callback((Fl_Callback*)type_make_cb, (void*)("Fl_Progress"));
-        o->image(pixmap[36]);
-      } // Fl_Button* o
-      o->end();
-    } // Fl_Group* o
-    widgetbin_panel->set_non_modal();
-    widgetbin_panel->end();
-  } // Fl_Window* widgetbin_panel
-  return widgetbin_panel;
-}
-
-Fl_Double_Window *sourceview_panel=(Fl_Double_Window *)0;
-
-Fl_Tabs *sv_tab=(Fl_Tabs *)0;
-
-CodeViewer *sv_source=(CodeViewer *)0;
-
-CodeViewer *sv_header=(CodeViewer *)0;
-
-Fl_Light_Button *sv_autorefresh=(Fl_Light_Button *)0;
-
-Fl_Light_Button *sv_autoposition=(Fl_Light_Button *)0;
-
-Fl_Double_Window* make_sourceview() {
-  { sourceview_panel = new Fl_Double_Window(520, 490, "Code View");
-    sourceview_panel->callback((Fl_Callback*)toggle_sourceview_cb);
-    sourceview_panel->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-    { sv_tab = new Fl_Tabs(10, 10, 500, 440);
-      sv_tab->selection_color((Fl_Color)4);
-      sv_tab->labelcolor(FL_BACKGROUND2_COLOR);
-      sv_tab->callback((Fl_Callback*)update_sourceview_position_cb);
-      { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Source");
-        o->labelsize(13);
-        { CodeViewer* o = sv_source = new CodeViewer(20, 50, 480, 390);
-          sv_source->box(FL_DOWN_FRAME);
-          sv_source->color(FL_BACKGROUND2_COLOR);
-          sv_source->selection_color(FL_SELECTION_COLOR);
-          sv_source->labeltype(FL_NORMAL_LABEL);
-          sv_source->labelfont(0);
-          sv_source->labelsize(14);
-          sv_source->labelcolor(FL_FOREGROUND_COLOR);
-          sv_source->textfont(4);
-          sv_source->textsize(11);
-          sv_source->align(Fl_Align(FL_ALIGN_TOP));
-          sv_source->when(FL_WHEN_RELEASE);
-          Fl_Group::current()->resizable(sv_source);
-          o->linenumber_width(60);
-          o->linenumber_size(o->Fl_Text_Display::textsize());
-        } // CodeViewer* sv_source
-        o->end();
-        Fl_Group::current()->resizable(o);
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(10, 35, 500, 415, "Header");
-        o->labelsize(13);
-        o->hide();
-        { CodeViewer* o = sv_header = new CodeViewer(20, 50, 480, 390);
-          sv_header->box(FL_DOWN_FRAME);
-          sv_header->color(FL_BACKGROUND2_COLOR);
-          sv_header->selection_color(FL_SELECTION_COLOR);
-          sv_header->labeltype(FL_NORMAL_LABEL);
-          sv_header->labelfont(0);
-          sv_header->labelsize(14);
-          sv_header->labelcolor(FL_FOREGROUND_COLOR);
-          sv_header->textfont(4);
-          sv_header->textsize(11);
-          sv_header->align(Fl_Align(FL_ALIGN_TOP));
-          sv_header->when(FL_WHEN_RELEASE);
-          Fl_Group::current()->resizable(sv_header);
-          o->linenumber_width(60);
-          o->linenumber_size(o->Fl_Text_Display::textsize());
-        } // CodeViewer* sv_header
-        o->end();
-      } // Fl_Group* o
-      sv_tab->end();
-      Fl_Group::current()->resizable(sv_tab);
-    } // Fl_Tabs* sv_tab
-    { Fl_Group* o = new Fl_Group(10, 460, 500, 20);
-      { Fl_Button* o = new Fl_Button(10, 460, 61, 20, "Refresh");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)update_sourceview_cb);
-      } // Fl_Button* o
-      { Fl_Light_Button* o = sv_autorefresh = new Fl_Light_Button(76, 460, 91, 20, "Auto-Refresh");
-        sv_autorefresh->labelsize(11);
-        o->callback((Fl_Callback*)update_sourceview_cb);
-      } // Fl_Light_Button* sv_autorefresh
-      { sv_autoposition = new Fl_Light_Button(172, 460, 89, 20, "Auto-Position");
-        sv_autoposition->labelsize(11);
-      } // Fl_Light_Button* sv_autoposition
-      { Fl_Button* o = new Fl_Button(460, 460, 50, 20, "Close");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)toggle_sourceview_b_cb);
-      } // Fl_Button* o
-      { Fl_Box* o = new Fl_Box(265, 460, 190, 20);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    sourceview_panel->size_range(384, 120);
-    sourceview_panel->end();
-  } // Fl_Double_Window* sourceview_panel
-  return sourceview_panel;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/function_panel.fl
+++ /dev/null
@@ -1,959 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// Code dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {\#include <FL/Fl_Pixmap.H>} {private local
-}
-
-decl {\#include "Fl_Type.h"} {private local
-}
-
-decl {\#include "undo.h"} {private local
-}
-
-decl {extern class Fl_Pixmap *pixmap[];} {private local
-}
-
-decl {extern class Fl_Type *Fl_Type_make(const char*);} {private local
-}
-
-decl {extern void select_only(Fl_Type*);} {private local
-}
-
-decl {extern void exit_cb(Fl_Widget*, void*);} {private global
-}
-
-decl {extern void toggle_widgetbin_cb(Fl_Widget*, void*);} {private global
-}
-
-Function {use_tab_navigation(int, Fl_Text_Editor*)} {
-  comment {Allow widget navigation on text fields with Tab.} private return_type int
-} {
-  code {return 0;} {}
-}
-
-Function {make_function_panel()} {} {
-  Fl_Window function_panel {
-    label {Function/Method Properties} open
-    xywh {557 523 343 232} type Double hide resizable modal
-  } {
-    Fl_Group {} {open
-      xywh {10 10 270 20}
-    } {
-      Fl_Choice f_public_member_choice {
-        tooltip {Change member access attribute.} xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
-      } {
-        MenuItem {} {
-          label private
-          user_data 0 user_data_type long
-          xywh {5 5 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label public
-          user_data 1 user_data_type long
-          xywh {5 5 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label protected
-          user_data 2 user_data_type long
-          xywh {5 5 100 20} labelsize 11
-        }
-      }
-      Fl_Choice f_public_choice {
-        tooltip {Change widget accessibility.} xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
-      } {
-        MenuItem {} {
-          label local
-          user_data 0 user_data_type long
-          xywh {15 15 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label global
-          user_data 1 user_data_type long
-          xywh {15 15 100 20} labelsize 11
-        }
-      }
-      Fl_Light_Button f_c_button {
-        label {C declaration}
-        tooltip {Declare with a C interface instead of C++.} xywh {95 10 120 20} labelsize 11
-      }
-      Fl_Box {} {
-        xywh {235 10 45 20} resizable
-      }
-    }
-    Fl_Input f_name_input {
-      label {Name(args): (blank for main())}
-      tooltip {The name of the function or method.} xywh {10 50 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Input f_return_type_input {
-      label {Return Type: (blank to return outermost widget)}
-      tooltip {The return type of the function or method.} xywh {10 90 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Text_Editor f_comment_input {
-      label {Comment:}
-      tooltip {Function comment in Doxygen format} xywh {10 125 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
-      code0 {f_comment_input->buffer(new Fl_Text_Buffer());}
-      code1 {f_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
-    }
-    Fl_Group {} {open
-      xywh {10 200 320 20}
-    } {
-      Fl_Return_Button f_panel_ok {
-        label OK
-        tooltip {Apply the changes.} xywh {220 200 50 20} labelsize 11 hotspot
-      }
-      Fl_Button f_panel_cancel {
-        label Cancel
-        tooltip {Cancel the changes.} xywh {280 200 50 20} labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 200 205 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_code_panel()} {} {
-  Fl_Window code_panel {
-    label {Code Properties}
-    callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape) 
-    return; // ignore Escape
-code_panel->hide(); // otherwise hide..} open
-    xywh {503 450 540 180} type Double labelsize 11 hide resizable
-    code0 {o->size_range(200, 150);} modal
-  } {
-    Fl_Text_Editor code_input {
-      xywh {10 10 520 130} box DOWN_BOX labelsize 11 textfont 4 textsize 11 resizable
-      code0 {o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);}
-      code1 {\#include "CodeEditor.h"}
-      class CodeEditor
-    }
-    Fl_Group {} {open
-      xywh {10 150 520 20} labelsize 11
-    } {
-      Fl_Return_Button code_panel_ok {
-        label OK
-        xywh {400 150 60 20} labelsize 11 hotspot
-      }
-      Fl_Button code_panel_cancel {
-        label Cancel
-        xywh {470 150 60 20} labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 150 380 20} labelsize 11 resizable
-      }
-    }
-  }
-  code {// Enable line numbers
-code_input->linenumber_width(60);
-code_input->linenumber_size(code_input->Fl_Text_Display::textsize());} {}
-}
-
-Function {make_codeblock_panel()} {} {
-  Fl_Window codeblock_panel {
-    label {Code Block Properties} open
-    xywh {468 221 300 115} type Double labelsize 11 hide resizable
-    code0 {o->size_range(o->w(), o->h(), Fl::w(), o->h());} modal
-  } {
-    Fl_Input code_before_input {
-      label {Conditional code block}
-      tooltip {\#ifdef or similar conditional code block.} xywh {10 15 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Input code_after_input {
-      label {"{...child code...}" is inserted here}
-      tooltip {\#endif or similar conditional code block.} xywh {10 55 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11 resizable
-    }
-    Fl_Group {} {open
-      xywh {10 85 280 20}
-    } {
-      Fl_Return_Button codeblock_panel_ok {
-        label OK
-        xywh {160 85 60 20} labelsize 11 hotspot
-      }
-      Fl_Button codeblock_panel_cancel {
-        label Cancel
-        xywh {230 85 60 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 85 140 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_declblock_panel()} {} {
-  Fl_Window declblock_panel {
-    label {Declaration Block Properties} open
-    xywh {428 215 300 135} type Double labelsize 11 hide resizable
-    code0 {o->size_range(o->w(), o->h(), Fl::w(), o->h());} modal
-  } {
-    Fl_Group {} {open
-      xywh {10 10 280 20}
-    } {
-      Fl_Choice declblock_public_choice {open
-        tooltip {Change widget accessibility.} xywh {10 10 140 20} down_box BORDER_BOX labelsize 11 when 0 textsize 11
-      } {
-        MenuItem {} {
-          label {in source code only}
-          user_data 0 user_data_type long
-          xywh {25 25 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {in header and source}
-          user_data 1 user_data_type long
-          xywh {25 25 100 20} labelsize 11
-        }
-      }
-      Fl_Light_Button declblock_public_button_x {
-        label public
-        tooltip {Make the declaration publicly accessible.} xywh {10 10 60 20} labelsize 11 when 0 hide
-      }
-      Fl_Box {} {
-        xywh {155 10 135 20} resizable
-      }
-    }
-    Fl_Input decl_before_input {
-      tooltip {\#ifdef or similar conditional declaration block.} xywh {10 40 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11 resizable
-    }
-    Fl_Input decl_after_input {
-      label {"\\n...child code...\\n" is inserted here}
-      tooltip {\#endif or similar declaration code block.} xywh {10 75 280 20} labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Group {} {open
-      xywh {10 105 280 20}
-    } {
-      Fl_Return_Button declblock_panel_ok {
-        label OK
-        xywh {160 105 60 20} labelsize 11 hotspot
-      }
-      Fl_Button declblock_panel_cancel {
-        label Cancel
-        xywh {230 105 60 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 105 140 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_decl_panel()} {} {
-  Fl_Window decl_panel {
-    label {Declaration Properties} open
-    xywh {480 333 343 237} type Double align 80 hide resizable size_range {343 237 0 0}
-  } {
-    Fl_Group {} {open
-      xywh {10 10 270 20}
-    } {
-      Fl_Box {} {
-        xywh {200 10 80 20} resizable
-      }
-      Fl_Choice decl_choice {
-        xywh {10 10 185 20} down_box BORDER_BOX labelsize 11 textsize 11
-      } {
-        MenuItem {} {
-          label {in source file only}
-          xywh {0 0 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {in header file only}
-          xywh {0 0 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {"static" in source file}
-          xywh {0 0 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {in source and "extern" in header}
-          xywh {0 0 100 20} labelsize 11
-        }
-      }
-      Fl_Choice decl_class_choice {
-        xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 textsize 11
-      } {
-        MenuItem {} {
-          label private
-          xywh {10 10 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label public
-          xywh {10 10 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label protected
-          xywh {10 10 100 20} labelsize 11
-        }
-      }
-    }
-    Fl_Input decl_input {
-      label {This can be any declaration, like "int x;", an external symbol like "extern int foo();", a \#directive like "\#include <foo.h>", a comment like "//foo" or "/*foo*/", or typedef like "typedef char byte;" or "using std::list;".}
-      tooltip {Declaration text.} xywh {10 40 320 20} labelsize 11 align 134 when 0 textfont 4 textsize 11
-    }
-    Fl_Text_Editor decl_comment_input {
-      label {Comment:}
-      tooltip {Declaration comment in Doxygen format} xywh {10 130 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
-      code0 {decl_comment_input->buffer(new Fl_Text_Buffer());}
-      code1 {decl_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
-    }
-    Fl_Group {} {open
-      xywh {10 205 320 20}
-    } {
-      Fl_Return_Button decl_panel_ok {
-        label OK
-        xywh {200 205 60 20} labelsize 11 hotspot
-      }
-      Fl_Button decl_panel_cancel {
-        label Cancel
-        xywh {270 205 60 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 205 185 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_data_panel()} {} {
-  Fl_Window data_panel {
-    label {Binary Data Properties} open
-    xywh {595 352 343 237} type Double align 80 hide resizable size_range {343 237 0 0}
-  } {
-    Fl_Group {} {open
-      xywh {10 10 270 20}
-    } {
-      Fl_Box {} {
-        xywh {200 10 80 20} resizable
-      }
-      Fl_Choice data_choice {open
-        xywh {10 10 185 20} down_box BORDER_BOX labelsize 11 textsize 11
-      } {
-        MenuItem {} {
-          label {in source file only}
-          xywh {0 0 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {in header file only}
-          xywh {0 0 100 20} labelsize 11 hide
-        }
-        MenuItem {} {
-          label {"static" in source file}
-          xywh {0 0 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label {in source and "extern" in header}
-          xywh {0 0 100 20} labelsize 11
-        }
-      }
-      Fl_Choice data_class_choice {open
-        xywh {10 10 75 20} down_box BORDER_BOX labelsize 11 textsize 11
-      } {
-        MenuItem {} {
-          label private
-          xywh {10 10 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label public
-          xywh {10 10 100 20} labelsize 11
-        }
-        MenuItem {} {
-          label protected
-          xywh {10 10 100 20} labelsize 11
-        }
-      }
-    }
-    Fl_Input data_input {
-      label {Variable Name:}
-      tooltip {Binary Data variables are declared "const unsigned char []".} xywh {10 52 320 20} labelfont 1 labelsize 11 align 133 when 0 textfont 4 textsize 11
-    }
-    Fl_Input data_filename {
-      label {Filename:}
-      tooltip {Name and path of binary file that will be included.} xywh {10 90 280 20} labelfont 1 labelsize 11 align 133 when 0 textfont 4 textsize 11
-    }
-    Fl_Button data_filebrowser {
-      label {@fileopen}
-      xywh {290 90 40 20} labelcolor 134
-    }
-    Fl_Text_Editor data_comment_input {
-      label {Comment:}
-      tooltip {Declaration comment in Doxygen format} xywh {10 130 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
-      code0 {data_comment_input->buffer(new Fl_Text_Buffer());}
-      code1 {data_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
-    }
-    Fl_Group {} {open
-      xywh {10 205 320 20}
-    } {
-      Fl_Return_Button data_panel_ok {
-        label OK
-        xywh {200 205 60 20} labelsize 11 hotspot
-      }
-      Fl_Button data_panel_cancel {
-        label Cancel
-        xywh {270 205 60 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 205 185 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_class_panel()} {open
-} {
-  Fl_Window class_panel {
-    label {Class Properties} open
-    xywh {497 585 342 196} type Double labelsize 11 hide resizable modal size_range {343 188 0 0}
-  } {
-    Fl_Group {} {open
-      xywh {10 10 280 20} hide
-    } {
-      Fl_Light_Button c_public_button {
-        label public
-        tooltip {Make the class publicly accessible.} xywh {10 10 60 20} labelsize 11 when 0 hide
-      }
-      Fl_Box {} {
-        xywh {80 10 210 20} resizable
-      }
-    }
-    Fl_Input c_name_input {
-      label {Name:}
-      tooltip {Name of class.} xywh {10 20 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Input c_subclass_input {
-      label {Subclass of (text between : and \{)}
-      tooltip {Name of subclass.} xywh {10 55 320 20} labelfont 1 labelsize 11 align 5 when 0 textfont 4 textsize 11
-    }
-    Fl_Text_Editor c_comment_input {
-      label {Comment:} selected
-      tooltip {Class comment in Doxygen format} xywh {10 90 320 65} box DOWN_BOX labelfont 1 labelsize 11 align 5 textfont 4 textsize 11 resizable
-      code0 {c_comment_input->buffer(new Fl_Text_Buffer());}
-      code1 {c_comment_input->add_key_binding(FL_Tab, 0, use_tab_navigation);}
-    }
-    Fl_Group {} {open
-      xywh {10 165 320 20}
-    } {
-      Fl_Return_Button c_panel_ok {
-        label OK
-        xywh {200 165 60 20} labelsize 11 hotspot
-      }
-      Fl_Button c_panel_cancel {
-        label Cancel
-        xywh {270 165 60 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 165 185 20} resizable
-      }
-    }
-  }
-}
-
-Function {make_comment_panel()} {} {
-  Fl_Window comment_panel {
-    label {Comment Properties} open
-    xywh {780 296 550 280} type Double labelsize 11 hide resizable
-    code0 {o->size_range(320, 180);} modal
-  } {
-    Fl_Text_Editor comment_input {
-      xywh {110 10 430 230} box DOWN_BOX labelsize 11 textfont 4 textsize 11 resizable
-      code0 {o->when(FL_WHEN_ENTER_KEY_CHANGED|FL_WHEN_RELEASE);}
-      class CodeEditor
-    }
-    Fl_Group {} {open
-      xywh {110 250 430 20} labelsize 11
-    } {
-      Fl_Return_Button comment_panel_ok {
-        label OK
-        xywh {370 250 80 20} labelsize 11 hotspot
-      }
-      Fl_Button comment_panel_cancel {
-        label Cancel
-        xywh {460 250 80 20} shortcut 0xff1b labelsize 11
-      }
-      Fl_Box {} {
-        xywh {110 250 250 20} labelsize 11 resizable
-      }
-    }
-    Fl_Group {} {open
-      xywh {10 10 90 243} labelsize 11
-    } {
-      Fl_Light_Button comment_in_source {
-        label {In Source}
-        tooltip {Put the comment into the source (.cxx) file.} xywh {10 10 90 20} labelsize 11 when 0
-      }
-      Fl_Light_Button comment_in_header {
-        label {In Header}
-        tooltip {Put the comment into the header (.h) file.} xywh {10 40 90 20} labelsize 11 when 0
-      }
-      Fl_Menu_Button comment_predefined {
-        label Predefined open
-        xywh {10 70 90 20} labelsize 11 textsize 11
-      } {}
-      Fl_Button comment_load {
-        label {Import...}
-        xywh {10 100 90 20} labelsize 11
-      }
-      Fl_Box {} {
-        xywh {10 132 90 121} labelsize 11 resizable
-      }
-    }
-  }
-}
-
-Function {type_make_cb(Fl_Widget*,void*d)} {return_type void
-} {
-  code {undo_checkpoint();
-  Fl_Type *t = Fl_Type_make((char*)d);
-  if (t) {
-    select_only(t);
-    set_modflag(1);
-    t->open();
-  } else {
-    undo_current --;
-    undo_last --;
-  }} {}
-}
-
-Function {make_widgetbin()} {} {
-  Fl_Window widgetbin_panel {
-    label {Widget Bin}
-    callback {if (Fl::event()==FL_SHORTCUT && Fl::event_key()==FL_Escape)
-  exit_cb((Fl_Widget*)o, v);
-else  
-  toggle_widgetbin_cb((Fl_Widget*)o, v);} open
-    xywh {410 171 574 85} type Single align 80 hide non_modal
-  } {
-    Fl_Group {} {
-      xywh {3 3 79 79}
-    } {
-      Fl_Button {} {
-        user_data {"Function"}
-        callback type_make_cb
-        tooltip Function xywh {5 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[7]);}
-      }
-      Fl_Button {} {
-        user_data {"Class"}
-        callback type_make_cb
-        tooltip Class xywh {30 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[12]);}
-      }
-      Fl_Button {} {
-        user_data {"comment"}
-        callback type_make_cb
-        tooltip Comment xywh {55 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[46]);}
-      }
-      Fl_Button {} {
-        user_data {"Code"}
-        callback type_make_cb
-        tooltip Code xywh {5 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[8]);}
-      }
-      Fl_Button {} {
-        user_data {"CodeBlock"}
-        callback type_make_cb
-        tooltip {Code Block} xywh {30 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[9]);}
-      }
-      Fl_Button {} {
-        user_data {"widget_class"}
-        callback type_make_cb
-        tooltip {Widget Class} xywh {55 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[48]);}
-      }
-      Fl_Button {} {
-        user_data {"decl"}
-        callback type_make_cb
-        tooltip Declaration xywh {5 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[10]);}
-      }
-      Fl_Button {} {
-        user_data {"declblock"}
-        callback type_make_cb
-        tooltip {Declaration Block} xywh {30 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[11]);}
-      }
-      Fl_Button {} {
-        user_data {"data"}
-        callback type_make_cb
-        tooltip {Binary Data} xywh {55 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[49]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {87 3 79 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Window"}
-        callback type_make_cb
-        tooltip Window xywh {89 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[1]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Group"}
-        callback type_make_cb
-        tooltip Group xywh {114 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[6]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Pack"}
-        callback type_make_cb
-        tooltip Pack xywh {139 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[22]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Tabs"}
-        callback type_make_cb
-        tooltip Tabs xywh {89 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[13]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Scroll"}
-        callback type_make_cb
-        tooltip Scroll xywh {114 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[19]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Table"}
-        callback type_make_cb
-        tooltip Table xywh {139 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[51]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Tile"}
-        callback type_make_cb
-        tooltip Tile xywh {89 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[20]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Wizard"}
-        callback type_make_cb
-        tooltip Wizard xywh {114 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[21]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {171 3 54 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Button"}
-        callback type_make_cb
-        tooltip Button xywh {173 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[2]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Return_Button"}
-        callback type_make_cb
-        tooltip {Return Button} xywh {198 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[23]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Light_Button"}
-        callback type_make_cb
-        tooltip {Light Button} xywh {173 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[24]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Repeat_Button"}
-        callback type_make_cb
-        tooltip {Repeat Button} xywh {198 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[25]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Check_Button"}
-        callback type_make_cb
-        tooltip {Check Button} xywh {173 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[3]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Round_Button"}
-        callback type_make_cb
-        tooltip {Round Button} xywh {198 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[4]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {230 3 104 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Slider"}
-        callback type_make_cb
-        tooltip Slider xywh {232 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[37]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Scrollbar"}
-        callback type_make_cb
-        tooltip {Scroll Bar} xywh {257 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[38]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Value_Slider"}
-        callback type_make_cb
-        tooltip {Value Slider} xywh {282 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[39]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Value_Output"}
-        callback type_make_cb
-        tooltip {Value Output} xywh {307 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[45]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Adjuster"}
-        callback type_make_cb
-        tooltip Adjuster xywh {232 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[40]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Counter"}
-        callback type_make_cb
-        tooltip Counter xywh {257 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[41]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Dial"}
-        callback type_make_cb
-        tooltip Dial xywh {282 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[42]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Roller"}
-        callback type_make_cb
-        tooltip Roller xywh {232 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[43]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Spinner"}
-        callback type_make_cb
-        tooltip Spinner xywh {257 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[47]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Value_Input"}
-        callback type_make_cb
-        tooltip {Value Input} xywh {282 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[44]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {339 3 54 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Input"}
-        callback type_make_cb
-        tooltip Input xywh {341 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[14]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Output"}
-        callback type_make_cb
-        tooltip Output xywh {366 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[27]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Text_Editor"}
-        callback type_make_cb
-        tooltip {Text Edit} xywh {341 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[29]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Text_Display"}
-        callback type_make_cb
-        tooltip {Text Display} xywh {366 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[28]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_File_Input"}
-        callback type_make_cb
-        tooltip {File Input} xywh {341 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[30]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {398 3 54 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Menu_Bar"}
-        callback type_make_cb
-        tooltip {Menu Bar} xywh {400 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[17]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Input_Choice"}
-        callback type_make_cb
-        tooltip {Input Choice} xywh {425 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[15]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Menu_Button"}
-        callback type_make_cb
-        tooltip {Menu Button} xywh {400 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[26]);}
-      }
-      Fl_Button {} {
-        user_data {"menuitem"}
-        callback type_make_cb
-        tooltip {Menu Item} xywh {425 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[16]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Choice"}
-        callback type_make_cb
-        tooltip Choice xywh {400 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[15]);}
-      }
-      Fl_Button {} {
-        user_data {"submenu"}
-        callback type_make_cb
-        tooltip {Sub Menu} xywh {425 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[18]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {457 3 54 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Browser"}
-        callback type_make_cb
-        tooltip Browser xywh {459 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[31]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Tree"}
-        callback type_make_cb
-        tooltip Tree xywh {484 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[50]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Check_Browser"}
-        callback type_make_cb
-        tooltip {Check Browser} xywh {459 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[32]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_File_Browser"}
-        callback type_make_cb
-        tooltip {File Browser} xywh {459 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[33]);}
-      }
-    }
-    Fl_Group {} {
-      xywh {515 3 55 79}
-    } {
-      Fl_Button {} {
-        user_data {"Fl_Box"}
-        callback type_make_cb
-        tooltip Box xywh {517 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[5]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Clock"}
-        callback type_make_cb
-        tooltip Clock xywh {542 5 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[34]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Help_View"}
-        callback type_make_cb
-        tooltip {Help Browser} xywh {517 30 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[35]);}
-      }
-      Fl_Button {} {
-        user_data {"Fl_Progress"}
-        callback type_make_cb
-        tooltip Progress xywh {517 55 24 24} box THIN_UP_BOX
-        code0 {o->image(pixmap[36]);}
-      }
-    }
-  }
-}
-
-Function {make_sourceview()} {} {
-  Fl_Window sourceview_panel {
-    label {Code View}
-    callback toggle_sourceview_cb
-    xywh {430 273 520 490} type Double align 80 hide resizable size_range {384 120 0 0}
-  } {
-    Fl_Tabs sv_tab {
-      callback update_sourceview_position_cb
-      xywh {10 10 500 440} selection_color 4 labelcolor 7 resizable
-    } {
-      Fl_Group {} {
-        label Source open
-        xywh {10 35 500 415} labelsize 13 resizable
-      } {
-        Fl_Text_Editor sv_source {
-          xywh {20 50 480 390} textfont 4 textsize 11 resizable
-          code0 {\#include "CodeEditor.h"}
-          code1 {o->linenumber_width(60);}
-          code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
-          class CodeViewer
-        }
-      }
-      Fl_Group {} {
-        label Header open
-        xywh {10 35 500 415} labelsize 13 hide
-      } {
-        Fl_Text_Editor sv_header {
-          xywh {20 50 480 390} textfont 4 textsize 11 resizable
-          code0 {\#include "CodeEditor.h"}
-          code1 {o->linenumber_width(60);}
-          code2 {o->linenumber_size(o->Fl_Text_Display::textsize());}
-          class CodeViewer
-        }
-      }
-    }
-    Fl_Group {} {
-      xywh {10 460 500 20}
-    } {
-      Fl_Button {} {
-        label Refresh
-        callback update_sourceview_cb
-        xywh {10 460 61 20} labelsize 11
-      }
-      Fl_Light_Button sv_autorefresh {
-        label {Auto-Refresh}
-        xywh {76 460 91 20} labelsize 11
-        code0 {o->callback((Fl_Callback*)update_sourceview_cb);}
-      }
-      Fl_Light_Button sv_autoposition {
-        label {Auto-Position}
-        xywh {172 460 89 20} labelsize 11
-      }
-      Fl_Button {} {
-        label Close
-        callback toggle_sourceview_b_cb
-        xywh {460 460 50 20} labelsize 11
-      }
-      Fl_Box {} {
-        xywh {265 460 190 20} resizable
-      }
-    }
-  }
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/function_panel.h
+++ /dev/null
@@ -1,126 +1,0 @@
-//
-// "$Id$"
-//
-// Code dialogs for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef function_panel_h
-#define function_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-extern Fl_Double_Window *function_panel;
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-extern Fl_Choice *f_public_member_choice;
-extern Fl_Choice *f_public_choice;
-#include <FL/Fl_Light_Button.H>
-extern Fl_Light_Button *f_c_button;
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Input.H>
-extern Fl_Input *f_name_input;
-extern Fl_Input *f_return_type_input;
-#include <FL/Fl_Text_Editor.H>
-extern Fl_Text_Editor *f_comment_input;
-#include <FL/Fl_Return_Button.H>
-extern Fl_Return_Button *f_panel_ok;
-#include <FL/Fl_Button.H>
-extern Fl_Button *f_panel_cancel;
-Fl_Double_Window* make_function_panel();
-extern Fl_Menu_Item menu_f_public_member_choice[];
-extern Fl_Menu_Item menu_f_public_choice[];
-extern Fl_Double_Window *code_panel;
-#include "CodeEditor.h"
-extern CodeEditor *code_input;
-extern Fl_Return_Button *code_panel_ok;
-extern Fl_Button *code_panel_cancel;
-Fl_Double_Window* make_code_panel();
-extern Fl_Double_Window *codeblock_panel;
-extern Fl_Input *code_before_input;
-extern Fl_Input *code_after_input;
-extern Fl_Return_Button *codeblock_panel_ok;
-extern Fl_Button *codeblock_panel_cancel;
-Fl_Double_Window* make_codeblock_panel();
-extern Fl_Double_Window *declblock_panel;
-extern Fl_Choice *declblock_public_choice;
-extern Fl_Light_Button *declblock_public_button_x;
-extern Fl_Input *decl_before_input;
-extern Fl_Input *decl_after_input;
-extern Fl_Return_Button *declblock_panel_ok;
-extern Fl_Button *declblock_panel_cancel;
-Fl_Double_Window* make_declblock_panel();
-extern Fl_Menu_Item menu_declblock_public_choice[];
-extern Fl_Double_Window *decl_panel;
-extern Fl_Choice *decl_choice;
-extern Fl_Choice *decl_class_choice;
-extern Fl_Input *decl_input;
-extern Fl_Text_Editor *decl_comment_input;
-extern Fl_Return_Button *decl_panel_ok;
-extern Fl_Button *decl_panel_cancel;
-Fl_Double_Window* make_decl_panel();
-extern Fl_Menu_Item menu_decl_choice[];
-extern Fl_Menu_Item menu_decl_class_choice[];
-extern Fl_Double_Window *data_panel;
-extern Fl_Choice *data_choice;
-extern Fl_Choice *data_class_choice;
-extern Fl_Input *data_input;
-extern Fl_Input *data_filename;
-extern Fl_Button *data_filebrowser;
-extern Fl_Text_Editor *data_comment_input;
-extern Fl_Return_Button *data_panel_ok;
-extern Fl_Button *data_panel_cancel;
-Fl_Double_Window* make_data_panel();
-extern Fl_Menu_Item menu_data_choice[];
-extern Fl_Menu_Item menu_data_class_choice[];
-extern Fl_Double_Window *class_panel;
-extern Fl_Light_Button *c_public_button;
-extern Fl_Input *c_name_input;
-extern Fl_Input *c_subclass_input;
-extern Fl_Text_Editor *c_comment_input;
-extern Fl_Return_Button *c_panel_ok;
-extern Fl_Button *c_panel_cancel;
-Fl_Double_Window* make_class_panel();
-extern Fl_Double_Window *comment_panel;
-extern CodeEditor *comment_input;
-extern Fl_Return_Button *comment_panel_ok;
-extern Fl_Button *comment_panel_cancel;
-extern Fl_Light_Button *comment_in_source;
-extern Fl_Light_Button *comment_in_header;
-#include <FL/Fl_Menu_Button.H>
-extern Fl_Menu_Button *comment_predefined;
-extern Fl_Button *comment_load;
-Fl_Double_Window* make_comment_panel();
-void type_make_cb(Fl_Widget*,void*d);
-#include <FL/Fl_Window.H>
-extern Fl_Window *widgetbin_panel;
-Fl_Window* make_widgetbin();
-extern void toggle_sourceview_cb(Fl_Double_Window*, void*);
-extern Fl_Double_Window *sourceview_panel;
-#include <FL/Fl_Tabs.H>
-extern void update_sourceview_position_cb(Fl_Tabs*, void*);
-extern Fl_Tabs *sv_tab;
-extern CodeViewer *sv_source;
-extern CodeViewer *sv_header;
-extern void update_sourceview_cb(Fl_Button*, void*);
-extern Fl_Light_Button *sv_autorefresh;
-extern Fl_Light_Button *sv_autoposition;
-extern void toggle_sourceview_b_cb(Fl_Button*, void*);
-Fl_Double_Window* make_sourceview();
-#endif
-
-//
-// End of "$Id$".
-//
binary files a/DoConfig/fltk/fluid/icons/fluid-128.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-16.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-16i.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-256.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-32.png /dev/null differ
--- a/DoConfig/fltk/fluid/icons/fluid-32.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static char * fluid_32_xpm[] = {
-"32 32 32 1",
-" 	c None",
-".	c #000200",
-"+	c #01162D",
-"@	c #01356A",
-"#	c #2F312E",
-"$	c #035FB1",
-"%	c #0061C0",
-"&	c #0071E1",
-"*	c #007FFF",
-"=	c #247ABD",
-"-	c #626E6F",
-";	c #777976",
-">	c #2A90E9",
-",	c #3291D2",
-"'	c #2690FC",
-")	c #449EAD",
-"!	c #5A9D87",
-"~	c #70AD78",
-"{	c #7EA3C4",
-"]	c #87B556",
-"^	c #6EB8FF",
-"/	c #A8ABA9",
-"(	c #A2C443",
-"_	c #8BC3F9",
-":	c #BED831",
-"<	c #CDDF1B",
-"[	c #CACDCB",
-"}	c #ACD7FF",
-"|	c #ECF408",
-"1	c #E5E7E4",
-"2	c #DDEDFD",
-"3	c #FCFFFC",
-"                                ",
-"             .......            ",
-"            .-//[//.            ",
-"            ./^^333.            ",
-"            .{''231.            ",
-"            .[^^331.            ",
-"            .[33331.            ",
-"            .[33331.            ",
-"            .[33^'_.            ",
-"            .[33^',.            ",
-"            .[332}2.            ",
-"            .133331.            ",
-"            .133331.            ",
-"           .-333333;.           ",
-"          .#1332_333#.          ",
-"          .[333''^333.          ",
-"         ./3333>'}333/.         ",
-"        .-333333232_}3;.        ",
-"       .#132}23333_'>33#.       ",
-"       .[33^'^33332>^331.       ",
-"      .$'''*'*''''''''''$.      ",
-"     .@*')>{******,***>)&@.     ",
-"    .+&':~(:&*****:)**)|&*+.    ",
-"    .%*!:&~(&,'>'*>**,~(**&.    ",
-"   .$*':]>:!!|&|=~<&]~<!&**$.   ",
-"  .@***:-'|%~()<&]])<%|=****@.  ",
-" .+***'|%):=(!(]>:!(]!:%*****+. ",
-" .&***):&!:=<]((&|!~:]<=*****&. ",
-".$&**)~!**&**&&&*&&*&*&*******$.",
-".%***]~%*****************'****%.",
-".@%%%%%%%%%%%%%%%%%%%%%$%%%$%%@.",
-" .............................. "};
binary files a/DoConfig/fltk/fluid/icons/fluid-32i.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-48.png /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid-64.png /dev/null differ
--- a/DoConfig/fltk/fluid/icons/fluid-96.xpm
+++ /dev/null
@@ -1,131 +1,0 @@
-/* XPM */
-static char * fluid_96_xpm[] = {
-"96 96 32 1",
-" 	c None",
-".	c #000100",
-"+	c #031F3F",
-"@	c #00366C",
-"#	c #2E302D",
-"$	c #0058AC",
-"%	c #0060BF",
-"&	c #4E504D",
-"*	c #14659F",
-"=	c #006DDC",
-"-	c #2C7087",
-";	c #0080FF",
-">	c #407B74",
-",	c #0F85F9",
-"'	c #268CCD",
-")	c #7C7E7B",
-"!	c #2D92EC",
-"~	c #4498A9",
-"{	c #2F94FE",
-"]	c #5BA18C",
-"^	c #6BA674",
-"/	c #7DAD62",
-"(	c #93BD53",
-"_	c #A4A6A2",
-":	c #6CB6FF",
-"<	c #ABCC3F",
-"[	c #C4DA2A",
-"}	c #CACCC9",
-"|	c #DCE913",
-"1	c #BBDEFF",
-"2	c #FDFE00",
-"3	c #FDFFFC",
-"                                                                                                ",
-"                                                                                                ",
-"                                                                                                ",
-"                                           ...........                                          ",
-"                                     ......................                                     ",
-"                                    ........................                                    ",
-"                                    ........#&#&#&#&##......                                    ",
-"                                    ....)__}33333333333}_...                                    ",
-"                                    ...&33333333333333333...                                    ",
-"                                    ...#33311133333333333...                                    ",
-"                                    ...&33!,{,;:333333333...                                    ",
-"                                    ...&3:,{{{{,13333333}...                                    ",
-"                                    ...&3!{{!{{,13333333}...                                    ",
-"                                    ...&3:!{{!{;13333333}...                                    ",
-"                                    ...&3{{{{{{;133333333...                                    ",
-"                                    ...&31,{{{;,33333333}...                                    ",
-"                                    ...&331{{{:133333333}...                                    ",
-"                                    ...&3333333333333333_...                                    ",
-"                                    ...&3333333333333333}...                                    ",
-"                                    ...&3333333333333333_...                                    ",
-"                                    ...&3333333333333333}...                                    ",
-"                                    ...&3333333333333333_...                                    ",
-"                                    ...&3333333333333333}...                                    ",
-"                                    ...&3333333333333333_...                                    ",
-"                                    ...&3333333331!,,;:3}...                                    ",
-"                                    ...&333333333{{{{{;:_...                                    ",
-"                                    ...&333333331,{!{!{{}...                                    ",
-"                                    ...&333333331{{{{{{,_...                                    ",
-"                                    ...)333333331{{!{{{{_...                                    ",
-"                                    ...)333333333{{{!{;:_...                                    ",
-"                                    ...)3333333331{;;;:3_...                                    ",
-"                                    ...)3333333333331333_...                                    ",
-"                                    ...)3333333333333333_...                                    ",
-"                                    ...)3333333333333333_...                                    ",
-"                                    ..._3333333333333333_...                                    ",
-"                                    ..._3333333333333333_...                                    ",
-"                                    ..._3333333333333333_...                                    ",
-"                                    ..._3333333333333333}....                                   ",
-"                                   ...._33333333333333333#...                                   ",
-"                                  ....&333333333333333333_....                                  ",
-"                                 ....&33333333333333333333)....                                 ",
-"                                 ....333333333333333333333}&....                                ",
-"                                ...._33333333333333333333333....                                ",
-"                               ....&333333333331:11333333333_....                               ",
-"                              ....#33333333333:,,,;:333333333&....                              ",
-"                              ....}3333333333:,!{{{;1333333333&....                             ",
-"                             ....}33333333333{{{!{{,!3333333333....                             ",
-"                            ....)333333333333{{{{!{{{3333333333_....                            ",
-"                           ....#3333333333333!{{{{{,:33333333333&....                           ",
-"                           ...._33333333333331{{!{,;1333333333333#....                          ",
-"                          ...._333333333333333:;,;,13333333333333_....                          ",
-"                         ...._333333333333333333113333333333333333_....                         ",
-"                        ....&33333333333333333333333333331::1333333&....                        ",
-"                        ...._333333333333333333333333333{,{{;{133333#...                        ",
-"                       ...._3333333333333333333333333331,{!{{,:33333}....                       ",
-"                      ....&3333333333133333333333333333:{{{{{{:333333)....                      ",
-"                      ...#333333331{,,;:333333333333333:{!{!{{:3333333&....                     ",
-"                     ....}33333333,{{{{;:333333333333331,{!{{;:33333333#...                     ",
-"                    ...._333333331,!{!{{,333333333333333{,{{;{1333333333....                    ",
-"                   ....&3333333331{{{{{{{3333333333333333::::33333333333)....                   ",
-"                  ....+!:::::::::{{{{!{{;::::::::::::::::::::::::::!:::::+....                  ",
-"                  ...+=;;;;;;;;;;;;{{{{;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=....                  ",
-"                 ....%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;%....                 ",
-"                ....@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$....                ",
-"                ...+%;;;;;;!!!;;;;;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;!=;;;+....               ",
-"               ....%;;;;;!([<|^~]^([%;;;;;;;;;;;;;;;;;,(<'=;;;;;;;!^/<[|'=;;=+...               ",
-"              ....$;;;;;'|2>]22<|22[%=;;;;;;;;;;;;;;;;^22[%=;;;;;;!][22|%=;;;$....              ",
-"             ....@;;;;;;[2[%^2|*[22(%=;;;;;;;;;;;;;;;,/22|$=;;;;;;;;<22<%=;;;;$....             ",
-"            ....+=;;;;;~22^$%]~$|22>%=;;;;;;;;;;;;;;;;'||^%=;;;;;;;,[22^$=;;;;;+....            ",
-"            ....%;;;;;,[22-%==='22|*==;;;;;;;;;;;;;;;;;;=%=;;;;;;;;'22|*%=;;;;;=+...            ",
-"           ....$;;;;;;!22|$%;,;^22<$=;;;;;;;;;;;;;;;;;;===;;;;;;;;;^22|$==;;;;;;%....           ",
-"          ....@;;;;;'](22[^]=;;<22^$==!~]/~=;!]]~;;;;{'~]==;;;;~<<]<22($=;;;;;;;;@....          ",
-"         ....@;;;;;;]<|22|[<%;!|22-%'[2222*=;/22(%;~|222(=;;;!<2|^[222>$=;;;;;;;;;+....         ",
-"         ....=;;;;;;;,[22>$===~22|$==,[22[%=;[22]%=,!|22]%=;![2|*%]22|*==;;;;;;;;;%+...         ",
-"        ....@;;;;;;;;!|22*$=;;/22($=;,[22/$='222*%=;!|22-%;;<22>%=]22[$%;;;;;;;;;;;=....        ",
-"       ....@;;;;;;;;;~22[*==;;[22>%=;'22|-%,^22[$=;,~22[$%;]22<$%=(22/$=;;;;;;;;;;;;@....       ",
-"      ....+;;;;;;;;;;^22<$=;;!222*$=;]22[$==[22/$=;;(22/$=![22]$=;|22-%=;;;;;;;;;;;;;+...       ",
-"      ....;;;;;;;;;;;<22^%=;;]22[$=;;(22/$=~222-%=;;[22>%=]22|$%;~22|$==;;;;;;;;;;;;;;....      ",
-"     ....%;;;;;;;;;;;|22-%=;;(22/$=;{|22-%=<22|$%;;'22|*%;<22<$==(22<$=;=;;;;;;;;;;;;;$....     ",
-"    ....+;;;;;;;;;;;!222$==;,|22>%=;~22|$=]|22($=;;]22[$%,|22^%=!|22^$=;;;;;;;;;;;;;;;;@....    ",
-"   ....+=;;;;;;;;;;;~22[$%;;'22|*-/;]22($*[<22^$^=;(22/$(-222>$=(222->~;;;;;;;;;;;;;;;;=+....   ",
-"   ...+;;;;;;;;;;;;;(22/$=;;]22|*<'=(22/*[~[22>(]=;|22>//=|22/$^(|2|-[%=;;;;;;;;;;;;;;;;=....   ",
-"  ....$;;;;;;;;;;;;;<22>%=;;]222|>==(222|^=|22|<%=;|222<%=(222|<-222|-==;;;;;;;;;;;;;;;;;$....  ",
-" ....@;;;;;;;;;;;;;!|2|$=;;;'[2[>%=;'|2[]%=/2|/$==;^2|(*%=!(2|($%<2[-%=;;;;;;;;;;;;;;;;;;;@.... ",
-"....@;;;;;;;;;;;;;;'22($%;;;;=%%==;;;=%%%==;=%%==;;;=%===;;==%%====%%=,;;;;;;;;;;;;;;;;;;;;+... ",
-"...+=;;;;;;;;;;!'=,]22-%=;;;;;;==;=;;;===;=;;===;;;;;===;;;;=;=,;;,=;=;;;;;;;;;;;;;;;;;;;;;=....",
-"...+;;;;;;;;;;;[2^=<2<$==;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;22('2|*%=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;^|<[[-%=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+...",
-"...+;;;;;;;;;;;;*~*%===;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@...",
-"...+;;;;;;;;;;;;;====;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+...",
-"....$=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=$....",
-" .....++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..... ",
-" .............................................................................................  ",
-"  ............................................................................................  ",
-"     ......................................................................................     "};
binary files a/DoConfig/fltk/fluid/icons/fluid.ico /dev/null differ
binary files a/DoConfig/fltk/fluid/icons/fluid.xcf_gz /dev/null differ
--- a/DoConfig/fltk/fluid/makedepend
+++ /dev/null
@@ -1,431 +1,0 @@
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-CodeEditor.o: CodeEditor.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-CodeEditor.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-CodeEditor.o: ../FL/abi-version.h ../FL/Fl_Text_Buffer.H
-CodeEditor.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H ../FL/fl_draw.H
-CodeEditor.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-CodeEditor.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Enumerations.H
-CodeEditor.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-CodeEditor.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-CodeEditor.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Scrollbar.H
-CodeEditor.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
-ExternalCodeEditor_UNIX.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-ExternalCodeEditor_UNIX.o: ../FL/Fl_Export.H ../FL/fl_types.h
-ExternalCodeEditor_UNIX.o: ../FL/Enumerations.H ../FL/abi-version.h
-ExternalCodeEditor_UNIX.o: ../FL/fl_ask.H ExternalCodeEditor_UNIX.h
-Fl_Function_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Function_Type.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Function_Type.o: ../FL/abi-version.h ../FL/Fl_Window.H
-Fl_Function_Type.o: ../FL/Fl_Preferences.H ../FL/Fl_File_Chooser.H
-Fl_Function_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-Fl_Function_Type.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Function_Type.o: ../FL/Fl_Image.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-Fl_Function_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-Fl_Function_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H ../FL/Fl_Tile.H
-Fl_Function_Type.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_Function_Type.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-Fl_Function_Type.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Function_Type.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-Fl_Function_Type.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_Function_Type.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_Function_Type.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Function_Type.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H Fl_Type.h
-Fl_Function_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Plugin.H
-Fl_Function_Type.o: ../FL/Fl_Preferences.H Fluid_Image.h
-Fl_Function_Type.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/x.H
-Fl_Function_Type.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Image.H
-Fl_Function_Type.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Function_Type.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-Fl_Function_Type.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-Fl_Function_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Menu_Bar.H
-Fl_Function_Type.o: ../FL/fl_show_input.H ../FL/fl_ask.H alignment_panel.h
-Fl_Function_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-Fl_Function_Type.o: ../FL/fl_draw.H ../FL/Fl_Text_Buffer.H ../FL/filename.H
-Fl_Function_Type.o: ../FL/Fl_Tooltip.H ../FL/Fl_Int_Input.H ../FL/Fl_Input.H
-Fl_Function_Type.o: ../FL/Fl_Spinner.H ../FL/Fl_Repeat_Button.H
-Fl_Function_Type.o: ../FL/Fl_Round_Button.H ../src/flstring.h ../config.h
-Fl_Function_Type.o: function_panel.h ../FL/Fl_Light_Button.H
-Fl_Function_Type.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
-Fl_Function_Type.o: CodeEditor.h comments.h
-Fl_Group_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Group_Type.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Group_Type.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Table.H
-Fl_Group_Type.o: ../FL/Fl_Scroll.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Group_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Group_Type.o: ../FL/Fl_Box.H ../FL/Fl_Scrollbar.H ../FL/fl_message.H
-Fl_Group_Type.o: ../FL/fl_ask.H Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Widget.H
-Fl_Group_Type.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-Fl_Group_Type.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H Fluid_Image.h
-Fl_Group_Type.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/x.H
-Fl_Group_Type.o: ../FL/Fl_Window.H ../FL/Fl_Bitmap.H ../FL/Enumerations.H
-Fl_Group_Type.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Image.H
-Fl_Group_Type.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Group_Type.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-Fl_Group_Type.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-Fl_Group_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-Fl_Group_Type.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
-Fl_Group_Type.o: ../src/flstring.h ../config.h
-Fl_Menu_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Menu_Type.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Menu_Type.o: ../FL/abi-version.h Fl_Widget_Type.h Fl_Type.h
-Fl_Menu_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
-Fl_Menu_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H ../FL/Fl_Plugin.H
-Fl_Menu_Type.o: ../FL/Fl_Preferences.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-Fl_Menu_Type.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Menu_Type.o: ../FL/Fl_Bitmap.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Menu_Type.o: ../FL/Fl_Device.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Menu_Type.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Menu_Type.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-Fl_Menu_Type.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-Fl_Menu_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
-Fl_Menu_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Menu_Type.o: ../FL/Fl_Menu_Bar.H alignment_panel.h ../FL/Fl_Text_Buffer.H
-Fl_Menu_Type.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Scrollbar.H
-Fl_Menu_Type.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
-Fl_Menu_Type.o: ../FL/filename.H ../FL/Fl_Double_Window.H
-Fl_Menu_Type.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
-Fl_Menu_Type.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_Menu_Type.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_Menu_Type.o: ../FL/Fl_Int_Input.H ../FL/Fl_Input.H ../FL/Fl_Spinner.H
-Fl_Menu_Type.o: ../FL/Fl_Repeat_Button.H ../FL/Fl.H ../FL/Fl_Return_Button.H
-Fl_Menu_Type.o: ../FL/Fl_Round_Button.H ../FL/fl_message.H ../FL/fl_ask.H
-Fl_Menu_Type.o: ../FL/Fl_Value_Input.H ../src/flstring.h ../config.h
-Fl_Menu_Type.o: ../FL/Fl_Output.H Shortcut_Button.h
-Fl_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Type.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Type.o: ../FL/Fl_Browser_.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Type.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-Fl_Type.o: ../FL/Fl_Image.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Type.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Type.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Type.o: ../FL/Fl_RGB_Image.H ../src/flstring.h ../config.h Fl_Type.h
-Fl_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
-Fl_Type.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ExternalCodeEditor_UNIX.h
-Fl_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H
-Fl_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-Fl_Type.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
-Fl_Type.o: ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H undo.h pixmaps/lock.xpm
-Fl_Type.o: pixmaps/protected.xpm pixmaps/flWindow.xpm pixmaps/flButton.xpm
-Fl_Type.o: pixmaps/flCheckButton.xpm pixmaps/flRoundButton.xpm
-Fl_Type.o: pixmaps/flBox.xpm pixmaps/flGroup.xpm pixmaps/flFunction.xpm
-Fl_Type.o: pixmaps/flCode.xpm pixmaps/flCodeBlock.xpm pixmaps/flComment.xpm
-Fl_Type.o: pixmaps/flData.xpm pixmaps/flDeclaration.xpm
-Fl_Type.o: pixmaps/flDeclarationBlock.xpm pixmaps/flClass.xpm
-Fl_Type.o: pixmaps/flTabs.xpm pixmaps/flInput.xpm pixmaps/flChoice.xpm
-Fl_Type.o: pixmaps/flMenuitem.xpm pixmaps/flMenubar.xpm pixmaps/flSubmenu.xpm
-Fl_Type.o: pixmaps/flScroll.xpm pixmaps/flTile.xpm pixmaps/flWizard.xpm
-Fl_Type.o: pixmaps/flPack.xpm pixmaps/flReturnButton.xpm
-Fl_Type.o: pixmaps/flLightButton.xpm pixmaps/flRepeatButton.xpm
-Fl_Type.o: pixmaps/flMenuButton.xpm pixmaps/flOutput.xpm
-Fl_Type.o: pixmaps/flTextDisplay.xpm pixmaps/flTextEdit.xpm
-Fl_Type.o: pixmaps/flFileInput.xpm pixmaps/flBrowser.xpm
-Fl_Type.o: pixmaps/flCheckBrowser.xpm pixmaps/flFileBrowser.xpm
-Fl_Type.o: pixmaps/flClock.xpm pixmaps/flHelp.xpm pixmaps/flProgress.xpm
-Fl_Type.o: pixmaps/flSlider.xpm pixmaps/flScrollBar.xpm
-Fl_Type.o: pixmaps/flValueSlider.xpm pixmaps/flAdjuster.xpm
-Fl_Type.o: pixmaps/flCounter.xpm pixmaps/flDial.xpm pixmaps/flRoller.xpm
-Fl_Type.o: pixmaps/flValueInput.xpm pixmaps/flValueOutput.xpm
-Fl_Type.o: pixmaps/flSpinner.xpm pixmaps/flWidgetClass.xpm pixmaps/flTree.xpm
-Fl_Type.o: pixmaps/flTable.xpm
-Fl_Widget_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Widget_Type.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Widget_Type.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Table.H
-Fl_Widget_Type.o: ../FL/Fl_Scroll.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Widget_Type.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Widget_Type.o: ../FL/Fl_Box.H ../FL/Fl_Scrollbar.H ../FL/Fl_Input.H
-Fl_Widget_Type.o: ../FL/Fl_Input_.H Fl_Widget_Type.h Fl_Type.h
-Fl_Widget_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
-Fl_Widget_Type.o: ../FL/Fl_Image.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Widget_Type.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ../FL/fl_draw.H
-Fl_Widget_Type.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-Fl_Widget_Type.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-Fl_Widget_Type.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Widget_Type.o: ../FL/Fl_RGB_Image.H ExternalCodeEditor_UNIX.h
-Fl_Widget_Type.o: ../FL/Fl_Tabs.H ../FL/Fl_Pack.H ../FL/Fl_Wizard.H
-Fl_Widget_Type.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-Fl_Widget_Type.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-Fl_Widget_Type.o: ../FL/Fl_Menu_Bar.H alignment_panel.h
-Fl_Widget_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-Fl_Widget_Type.o: ../FL/fl_draw.H ../FL/Fl_Text_Buffer.H ../FL/filename.H
-Fl_Widget_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Preferences.H
-Fl_Widget_Type.o: ../FL/Fl_Tooltip.H ../FL/Fl_Button.H
-Fl_Widget_Type.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-Fl_Widget_Type.o: ../FL/Fl_Button.H ../FL/Fl_Int_Input.H ../FL/Fl_Input.H
-Fl_Widget_Type.o: ../FL/Fl_Spinner.H ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-Fl_Widget_Type.o: ../FL/Fl_Return_Button.H ../FL/Fl_Round_Button.H
-Fl_Widget_Type.o: ../FL/fl_message.H ../FL/fl_ask.H ../FL/Fl_Slider.H
-Fl_Widget_Type.o: ../src/flstring.h ../config.h widget_panel.h
-Fl_Widget_Type.o: ../FL/Fl_Value_Input.H ../FL/Fl_Light_Button.H
-Fl_Widget_Type.o: Shortcut_Button.h ../FL/Fl_Tile.H ../FL/Fl_Text_Editor.H
-Fl_Widget_Type.o: ../FL/Fl_Text_Display.H CodeEditor.h
-Fl_Widget_Type.o: ../FL/fl_show_colormap.H
-Fl_Window_Type.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Window_Type.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Window_Type.o: ../FL/abi-version.h ../FL/Fl_Overlay_Window.H
-Fl_Window_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Window_Type.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Window_Type.o: ../FL/fl_message.H ../FL/fl_ask.H ../FL/fl_draw.H ../FL/x.H
-Fl_Window_Type.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-Fl_Window_Type.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Window_Type.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Window_Type.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Round_Button.H
-Fl_Window_Type.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H Fl_Widget_Type.h
-Fl_Window_Type.o: Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
-Fl_Window_Type.o: ../FL/Fl_Menu_Item.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-Fl_Window_Type.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-Fl_Window_Type.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-Fl_Window_Type.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
-Fl_Window_Type.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Window_Type.o: ../FL/Fl_Menu_Bar.H undo.h alignment_panel.h
-Fl_Window_Type.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-Fl_Window_Type.o: ../FL/fl_draw.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Window_Type.o: ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H ../FL/filename.H
-Fl_Window_Type.o: ../FL/Fl_Double_Window.H ../FL/Fl_Preferences.H
-Fl_Window_Type.o: ../FL/Fl_Tooltip.H ../FL/Fl_Button.H ../FL/Fl_Box.H
-Fl_Window_Type.o: ../FL/Fl_Check_Button.H ../FL/Fl_Int_Input.H
-Fl_Window_Type.o: ../FL/Fl_Input.H ../FL/Fl_Spinner.H
-Fl_Window_Type.o: ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-Fl_Window_Type.o: ../FL/Fl_Return_Button.H widget_panel.h
-Fl_Window_Type.o: ../FL/Fl_Value_Input.H ../FL/Fl_Light_Button.H
-Fl_Window_Type.o: Shortcut_Button.h ../FL/Fl_Tile.H ../FL/Fl_Text_Editor.H
-Fl_Window_Type.o: ../FL/Fl_Text_Display.H CodeEditor.h ../src/flstring.h
-Fl_Window_Type.o: ../config.h
-Fluid_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fluid_Image.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fluid_Image.o: ../FL/Fl_Widget.H Fl_Type.h ../FL/Fl_Menu.H
-Fluid_Image.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-Fluid_Image.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H Fluid_Image.h
-Fluid_Image.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/x.H
-Fluid_Image.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fluid_Image.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-Fluid_Image.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fluid_Image.o: ../FL/Fl_RGB_Image.H ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H
-Fluid_Image.o: ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H
-Fluid_Image.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-Fluid_Image.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
-Fluid_Image.o: ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H ../src/flstring.h
-Fluid_Image.o: ../config.h ../FL/filename.H ../FL/Fl_File_Chooser.H
-Fluid_Image.o: ../FL/Fl_Double_Window.H ../FL/Fl_Button.H
-Fluid_Image.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-Fluid_Image.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-Fluid_Image.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H
-Fluid_Image.o: ../FL/Fl.H ../FL/filename.H ../FL/Fl_Box.H
-Fluid_Image.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-Fluid_Image.o: ../FL/Fl_Button.H ../FL/Fl_File_Input.H
-Fluid_Image.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-about_panel.o: about_panel.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-about_panel.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-about_panel.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-about_panel.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-about_panel.o: ../FL/Fl_Image.H ../src/flstring.h ../config.h ../FL/Fl_Box.H
-about_panel.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-about_panel.o: ../FL/Fl_Pixmap.H
-align_widget.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-align_widget.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-align_widget.o: ../FL/abi-version.h ../FL/Fl_Window.H Fl_Widget_Type.h
-align_widget.o: Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
-align_widget.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-align_widget.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H Fluid_Image.h
-align_widget.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/x.H
-align_widget.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-align_widget.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Image.H
-align_widget.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-align_widget.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-align_widget.o: ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-align_widget.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
-align_widget.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-align_widget.o: ../FL/Fl_Menu_Bar.H undo.h
-alignment_panel.o: alignment_panel.h ../FL/Fl.H ../FL/Fl_Export.H
-alignment_panel.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-alignment_panel.o: ../FL/Enumerations.H ../FL/abi-version.h
-alignment_panel.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-alignment_panel.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-alignment_panel.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-alignment_panel.o: ../FL/Fl_Image.H ../FL/Enumerations.H ../FL/Fl_Window.H
-alignment_panel.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-alignment_panel.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-alignment_panel.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Scrollbar.H
-alignment_panel.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-alignment_panel.o: ../FL/Fl_Text_Buffer.H ../FL/filename.H
-alignment_panel.o: ../FL/Fl_Double_Window.H ../FL/Fl_Preferences.H
-alignment_panel.o: ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H ../FL/Fl_Button.H
-alignment_panel.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Box.H
-alignment_panel.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Check_Button.H
-alignment_panel.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-alignment_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-alignment_panel.o: ../FL/Fl_Int_Input.H ../FL/Fl_Input.H ../FL/Fl_Spinner.H
-alignment_panel.o: ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-alignment_panel.o: ../FL/Fl_Return_Button.H ../FL/Fl_Round_Button.H
-alignment_panel.o: ../FL/fl_ask.H
-code.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
-code.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-code.o: ../FL/Enumerations.H ../FL/abi-version.h Fl_Type.h ../FL/Fl_Widget.H
-code.o: ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
-code.o: ../FL/Fl_Image.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-code.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ../FL/x.H
-code.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-code.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-code.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-code.o: ../FL/Fl_RGB_Image.H ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H
-code.o: ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-code.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Choice.H
-code.o: ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-code.o: ../FL/Fl_Menu_Bar.H alignment_panel.h ../FL/Fl_Text_Buffer.H
-code.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Fl_Scrollbar.H
-code.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Text_Buffer.H
-code.o: ../FL/filename.H ../FL/Fl_Double_Window.H ../FL/Fl_Preferences.H
-code.o: ../FL/Fl_Tooltip.H ../FL/Fl_Button.H ../FL/Fl_Box.H
-code.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-code.o: ../FL/Fl_Int_Input.H ../FL/Fl_Input.H ../FL/Fl_Spinner.H
-code.o: ../FL/Fl_Repeat_Button.H ../FL/Fl.H ../FL/Fl_Return_Button.H
-code.o: ../FL/Fl_Round_Button.H
-factory.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-factory.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-factory.o: ../FL/Fl_Group.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
-factory.o: ../FL/Fl_Image.H ../FL/Fl_Pixmap.H ../FL/Fl_Tree.H
-factory.o: ../FL/Fl_Scrollbar.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-factory.o: ../FL/Fl_Group.H ../FL/Fl_Bitmap.H ../FL/Enumerations.H
-factory.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-factory.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-factory.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Tree_Item.H ../FL/Fl_Widget.H
-factory.o: ../FL/Fl_Tree_Item_Array.H ../FL/Fl_Tree_Prefs.H ../src/flstring.h
-factory.o: ../config.h undo.h Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Menu.H
-factory.o: ../FL/Fl_Menu_Item.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-factory.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Tabs.H ../FL/Fl_Pack.H
-factory.o: ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H
-factory.o: ../FL/Fl_Menu_.H ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H
-factory.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H
-factory.o: ../FL/Fl_Box.H ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
-factory.o: ../FL/Fl_Button.H ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-factory.o: ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
-factory.o: ../FL/Fl_Light_Button.H ../FL/Fl_Round_Button.H ../FL/Fl_Browser.H
-factory.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-factory.o: ../FL/Fl_Valuator.H ../FL/Fl_Check_Browser.H
-factory.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H ../FL/Fl_File_Icon.H
-factory.o: ../FL/filename.H ../FL/Fl_Counter.H ../FL/Fl_Spinner.H
-factory.o: ../FL/Fl_File_Input.H ../FL/Fl_Text_Display.H ../FL/fl_draw.H
-factory.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Editor.H
-factory.o: ../FL/Fl_Text_Display.H ../FL/Fl_Clock.H ../FL/Fl_Help_View.H
-factory.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Progress.H ../FL/Fl_Adjuster.H
-factory.o: ../FL/Fl_Dial.H ../FL/Fl_Roller.H ../FL/Fl_Output.H
-factory.o: ../FL/Fl_Input.H ../FL/Fl_Value_Input.H ../FL/Fl_Value_Output.H
-factory.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Multi_Label.H
-file.o: ../src/flstring.h ../FL/Fl_Export.H ../config.h alignment_panel.h
-file.o: ../FL/Fl.H ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-file.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Text_Buffer.H
-file.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-file.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-file.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-file.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-file.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-file.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-file.o: ../FL/Fl_Text_Buffer.H ../FL/filename.H ../FL/Fl_Double_Window.H
-file.o: ../FL/Fl_Preferences.H ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H
-file.o: ../FL/Fl_Button.H ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Box.H
-file.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Check_Button.H
-file.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H ../FL/Fl_Choice.H
-file.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Int_Input.H
-file.o: ../FL/Fl_Input.H ../FL/Fl_Spinner.H ../FL/Fl_Repeat_Button.H
-file.o: ../FL/Fl.H ../FL/Fl_Return_Button.H ../FL/Fl_Round_Button.H
-file.o: Fl_Widget_Type.h Fl_Type.h ../FL/Fl_Menu.H Fluid_Image.h
-file.o: ../FL/Fl_Shared_Image.H ../FL/fl_draw.H ExternalCodeEditor_UNIX.h
-file.o: ../FL/Fl_Pack.H ../FL/Fl_Wizard.H ../FL/Fl_Menu_.H
-file.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Input_Choice.H ../FL/Fl_Menu_Bar.H
-file.o: ../FL/fl_message.H ../FL/fl_ask.H
-fluid.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fluid.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fluid.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fluid.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-fluid.o: ../FL/Fl_Button.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-fluid.o: ../FL/Fl_Help_Dialog.H ../FL/Fl_Group.H ../FL/Fl_Input.H
-fluid.o: ../FL/Fl_Input_.H ../FL/Fl_Help_View.H ../FL/Fl_Scrollbar.H
-fluid.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-fluid.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-fluid.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fluid.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fluid.o: ../FL/Fl_Shared_Image.H ../FL/filename.H ../FL/Fl_Hold_Browser.H
-fluid.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Menu_Bar.H
-fluid.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/fl_ask.H ../FL/fl_draw.H
-fluid.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-fluid.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-fluid.o: ../FL/Fl_File_Icon.H ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-fluid.o: ../FL/Fl_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Return_Button.H
-fluid.o: ../FL/Fl_PNG_Image.H ../FL/fl_message.H ../FL/fl_ask.H
-fluid.o: ../FL/filename.H ../FL/Fl_Native_File_Chooser.H ../FL/Fl_Printer.H
-fluid.o: ../FL/Fl_Paged_Device.H ../FL/Fl_PostScript.H ../src/flstring.h
-fluid.o: ../config.h alignment_panel.h ../FL/Fl_Text_Buffer.H
-fluid.o: ../FL/Fl_Text_Display.H ../FL/Fl_Text_Buffer.H ../FL/Fl_Tooltip.H
-fluid.o: ../FL/Fl_Widget.H ../FL/Fl_Tabs.H ../FL/Fl_Int_Input.H
-fluid.o: ../FL/Fl_Input.H ../FL/Fl_Spinner.H ../FL/Fl_Repeat_Button.H
-fluid.o: ../FL/Fl_Round_Button.H function_panel.h ../FL/Fl_Light_Button.H
-fluid.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H CodeEditor.h
-fluid.o: template_panel.h ../FL/Fl_Browser.H about_panel.h undo.h Fl_Type.h
-fluid.o: ../FL/Fl_Menu.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-fluid.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Pack.H ../FL/Fl_Wizard.H
-fluid.o: ../FL/Fl_Menu_.H ../FL/Fl_Input_Choice.H
-function_panel.o: function_panel.h ../FL/Fl.H ../FL/Fl_Export.H
-function_panel.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-function_panel.o: ../FL/Enumerations.H ../FL/abi-version.h
-function_panel.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-function_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-function_panel.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-function_panel.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Light_Button.H ../FL/Fl_Box.H
-function_panel.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Text_Editor.H
-function_panel.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/x.H
-function_panel.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-function_panel.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-function_panel.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-function_panel.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-function_panel.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Return_Button.H
-function_panel.o: ../FL/Fl_Button.H ../FL/Fl_Button.H CodeEditor.h
-function_panel.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Menu_Button.H
-function_panel.o: ../FL/Fl_Tabs.H Fl_Type.h ../FL/Fl_Widget.H ../FL/Fl_Menu.H
-function_panel.o: Fluid_Image.h ../FL/Fl_Shared_Image.H ../FL/fl_draw.H
-function_panel.o: ExternalCodeEditor_UNIX.h ../FL/Fl_Pack.H ../FL/Fl_Wizard.H
-function_panel.o: ../FL/Fl_Menu_.H ../FL/Fl_Input_Choice.H
-function_panel.o: ../FL/Fl_Menu_Bar.H undo.h
-template_panel.o: template_panel.h ../FL/Fl.H ../FL/Fl_Export.H
-template_panel.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-template_panel.o: ../FL/Enumerations.H ../FL/abi-version.h
-template_panel.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-template_panel.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-template_panel.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-template_panel.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Box.H
-template_panel.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Group.H
-template_panel.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
-template_panel.o: ../FL/Fl_Button.H ../src/flstring.h ../config.h
-template_panel.o: ../FL/filename.H ../FL/fl_ask.H ../FL/Fl_Shared_Image.H
-template_panel.o: ../FL/Fl_Preferences.H
-undo.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-undo.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h Fl_Type.h
-undo.o: ../FL/Fl_Widget.H ../FL/Fl_Menu.H ../FL/Fl_Menu_Item.H
-undo.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H ../FL/Fl_Plugin.H
-undo.o: ../FL/Fl_Preferences.H Fluid_Image.h ../FL/Fl_Shared_Image.H
-undo.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-undo.o: ../FL/Fl_Bitmap.H ../FL/Enumerations.H ../FL/Fl_Window.H
-undo.o: ../FL/Fl_Device.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-undo.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ExternalCodeEditor_UNIX.h
-undo.o: ../FL/Fl_Tabs.H ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/Fl_Wizard.H
-undo.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-undo.o: ../FL/Fl_Choice.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
-undo.o: ../FL/Fl_Input_.H ../FL/Fl_Menu_Bar.H undo.h ../FL/Fl_Preferences.H
-undo.o: ../FL/filename.H ../src/flstring.h ../config.h
-widget_panel.o: widget_panel.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-widget_panel.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-widget_panel.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H
-widget_panel.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-widget_panel.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Tabs.H
-widget_panel.o: ../FL/Fl_Group.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-widget_panel.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-widget_panel.o: ../FL/Fl_Button.H ../FL/Fl_Box.H ../FL/Fl_Value_Input.H
-widget_panel.o: ../FL/Fl_Valuator.H ../FL/Fl_Input.H ../FL/Fl_Light_Button.H
-widget_panel.o: Shortcut_Button.h ../FL/Fl_Tile.H ../FL/Fl_Text_Editor.H
-widget_panel.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/x.H
-widget_panel.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-widget_panel.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-widget_panel.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-widget_panel.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Text_Buffer.H
-widget_panel.o: CodeEditor.h ../FL/Fl_Text_Buffer.H ../FL/Fl_Return_Button.H
-widget_panel.o: ../FL/Fl_Button.H
--- a/DoConfig/fltk/fluid/pixmaps/flAdjuster.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flAdjuster_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"fffffffffffffffc",
-"fdddafdddafdddac",
-"fdddafdddafdddac",
-"fdddafdddafdddac",
-"fdddafdddafdddac",
-"fdddafdddafdddac",
-"fdddafdddafdddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flBox.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flBox_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #909090",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dddddddddddddddc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"deeeeeeeeeeeeedc",
-"dddddddddddddddc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flBrowser.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flBrowser_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #808080",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfeeeeeeeeebbfdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebffdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfddddbdfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flButton.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flCheckBrowser.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flCheckBrowser_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #808080",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfeeeeeeeeebbfdc",
-"dfefffeeeeebdfdc",
-"dfefefeeeeebdfdc",
-"dfefffeeeeebffdc",
-"dfeeeeeeeeebdfdc",
-"dfefffeeeeebdfdc",
-"dfefefeeeeebdfdc",
-"dfefffeeeeebdfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfddddbdfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flCheckButton.xpm
+++ /dev/null
@@ -1,30 +1,0 @@
-/* XPM */
-static const char *flCheckButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 7 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"f c #d0d0d0",
-"' c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccaaaaaaaaaaccc",
-"cccaddddddddfccc",
-"cccadddddd''fccc",
-"cccaddddd''dfccc",
-"cccaddddd''dfccc",
-"ccca''dd''ddfccc",
-"cccad''''dddfccc",
-"cccadd''ddddfccc",
-"cccaddddddddfccc",
-"cccaaaaaaaaaaccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flChoice.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flChoice_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-". c #000000",
-"c c none",
-"d c #b0b0b0",
-"e c #ffffff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"feeeeeafddddddda",
-"feeeeeafddddddda",
-"feeeeeaf.......a",
-"feeeeeafd.....da",
-"feeeeeafdd...dda",
-"feeeeeafddd.ddda",
-"feeeeeafddddddda",
-"feeeeeafddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flClass.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flClass_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-"................",
-"................",
-"...aaaaaaaaaaaaa",
-"..abbbbbbbbbbbc.",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-"abbbbbbbbbbbc...",
-"abbbbbbbbbbbc...",
-"abbbbbbbbbbbc...",
-"abbbbbbbbbbbc...",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-"..cbbbbbbbbbbbc.",
-"...ccccccccccccc",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flClock.xpm
+++ /dev/null
@@ -1,28 +1,0 @@
-/* XPM */
-static const char *flClock_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 5 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0c0c0",
-"c c #000000",
-"' c #202080",
-/* pixels */
-"................",
-"................",
-"....aaaaaaa.....",
-"..aabbbbbbbcc...",
-".abbbbbbbbb'bc..",
-".abb'bbbbb'bbc..",
-"abbbb'bbb'bbbbc.",
-"abbbbb'b'bbbbbc.",
-"abbbbbb'bbbbbbc.",
-"abbbbbbbbbbbbbc.",
-"abbbbbbbbbbbbbc.",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-"..ccbbbbbbbcc...",
-"....ccccccc.....",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flCode.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flCode_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-"................",
-"................",
-"aaaaaaaaaaaaaaaa",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"accccccccccccccc",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flCodeBlock.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flCodeBlock_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-".......aa.......",
-"......abbc......",
-".....abbbbc.....",
-"....abbbbbbc....",
-"...abbbbbbbbc...",
-"..abbbbbbbbbbc..",
-".abbbbbbbbbbbbc.",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-".abbbbbbbbbbbbc.",
-"..abbbbbbbbbbc..",
-"...abbbbbbbbc...",
-"....abbbbbbc....",
-".....abbbbc.....",
-"......abbc......",
-".......ac.......",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flComment.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flComment_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-"................",
-"................",
-".aaaaaaaaaaaaaa.",
-".abbbbbbbbbbbbc.",
-".abbbbbccbbccbc.",
-".abbbbccbbccbbc.",
-".abbbbccbbccbbc.",
-".abbbccbbccbbbc.",
-".abbbccbbccbbbc.",
-".abbccbbccbbbbc.",
-".abbccbbccbbbbc.",
-".abccbbccbbbbbc.",
-".abbbbbbbbbbbbc.",
-".accccccccccccc.",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flCounter.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flCounter_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"' c #000000",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"fffffffffffffffc",
-"fdddaeeeeefdddac",
-"fd'daee'eefd'dac",
-"f''dae''eefd''ac",
-"f''daee'eefd''ac",
-"fd'dae'''efd'dac",
-"fdddaeeeeefdddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flData.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flData_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-"  c #000000",
-"- c #607006",
-/* pixels */
-"................",
-"................",
-"...aaaaaaaaaaaaa",
-"...abbbbbbbbbbbc",
-"...ab b- -b bbbc",
-"..abb b b b bbc.",
-"..abb b- -b bbc.",
-"..abbbbbbbbbbbc.",
-".abbbbbbbbbbbc..",
-".ab b b- -bbbc..",
-".ab b b b bbbc..",
-"abb b b- -bbc...",
-"abbbbbbbbbbbc...",
-"acccccccccccc...",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flDeclaration.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flDeclaration_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-"................",
-"................",
-"...aaaaaaaaaaaaa",
-"...abbbbbbbbbbbc",
-"...abbbbbbbbbbbc",
-"..abbbbbbbbbbbc.",
-"..abbbbbbbbbbbc.",
-"..abbbbbbbbbbbc.",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-"abbbbbbbbbbbc...",
-"abbbbbbbbbbbc...",
-"acccccccccccc...",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flDeclarationBlock.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flDeclarationBlock_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-".......aa.......",
-"......abbc......",
-".....abbbbc.....",
-"....abbbbbbc....",
-"...abbbbbbbbc...",
-"..abbbcbbcbbbc..",
-".abbbccccccbbbc.",
-"abbbbbcbbcbbbbbc",
-"abbbbbcbbcbbbbbc",
-".abbbccccccbbbc.",
-"..abbbcbbcbbbc..",
-"...abbbbbbbbc...",
-"....abbbbbbc....",
-".....abbbbc.....",
-"......abbc......",
-".......ac.......",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flDial.xpm
+++ /dev/null
@@ -1,28 +1,0 @@
-/* XPM */
-static const char *flDial_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 5 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0c0c0",
-"c c #000000",
-"' c #202080",
-/* pixels */
-"................",
-"................",
-"....aaaaaaa.....",
-"..aabbbbbbbcc...",
-".abbbbbbbbbbbc..",
-".ab''bbbbbbbbc..",
-"ab'bb'bbbbbbbbc.",
-"ab'bb'bbbbbbbbc.",
-"abb''bbbbbbbbbc.",
-"abbbbbbbbbbbbbc.",
-"abbbbbbbbbbbbbc.",
-".abbbbbbbbbbbc..",
-".abbbbbbbbbbbc..",
-"..ccbbbbbbbcc...",
-"....ccccccc.....",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flFileBrowser.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flFileBrowser_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #ffff00",
-"b c #808080",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfeeeeeeeeebbfdc",
-"dfeefffeeeebdfdc",
-"dfefaaafffebdfdc",
-"dfefaaaaafebffdc",
-"dfefaaaaafebdfdc",
-"dfefaaaaafebdfdc",
-"dfefffffffebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfddddbdfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flFileInput.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flFileInput_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"faaaaaaaafaaaaaa",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...dd..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.....d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flFunction.xpm
+++ /dev/null
@@ -1,27 +1,0 @@
-/* XPM */
-static const char *flFunction_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 4 1",
-/* colors */
-". c none",
-"a c #000000",
-"b c #c0e0c0",
-"c c #000000",
-/* pixels */
-"................",
-"................",
-"....aaaaaaaa....",
-"..aabbbbbbbbcc..",
-".abbbbbbbbbbbbc.",
-".abbbbbbbbbbbbc.",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-"abbbbbbbbbbbbbbc",
-".abbbbbbbbbbbbc.",
-".abbbbbbbbbbbbc.",
-"..ccbbbbbbbbcc..",
-"....cccccccc....",
-"................",
-"................",
-};
--- a/DoConfig/fltk/fluid/pixmaps/flGroup.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flGroup_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flHelp.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flHelp_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #808080",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfeeeeeeeeebbfdc",
-"dfeeeffeeeebdfdc",
-"dfeeffeeeeebdfdc",
-"dfeffeeeeeebffdc",
-"dfeeffeeeeebdfdc",
-"dfeeeffeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfeeeeeeeeebdfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfddddbdfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flInput.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flInput_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...dd..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.....d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flLightButton.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flLightButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #ffff00",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffac",
-"fdddddddddddddac",
-"fdaaaaddddddddac",
-"fdabbfddddddddac",
-"fdabbfddddddddac",
-"fdafffddddddddac",
-"fdddddddddddddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flMenuButton.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flMenuButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-". c #000000",
-"c c none",
-"d c #b0b0b0",
-"e c #ffffff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fddddddd.......a",
-"fdddddddd.ddd.da",
-"fddddddddd.d.dda",
-"fdddddddddd.ddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flMenubar.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flMenubar_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-". c #2020cf",
-"c c none",
-"d c #b0b0b0",
-"e c #ffffff",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"ffffffffffffffff",
-"dddddddddddddddd",
-"dddddddddddddddd",
-"dddddddddddddddd",
-"dddffffffffffffd",
-"aaafddddddddddaa",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfddddddddddac",
-"cccfaaaaaaaaaaac",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flMenuitem.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flMenuitem_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-". c #000000",
-"c c none",
-"d c #b0b0b0",
-"e c #d0d0d0",
-"f c #c0c0c0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccffffccccccccc",
-"c.fffffffccccf.c",
-"c.ffffffffffff.c",
-"c.eeeeeeeeeeee.c",
-"c.ee.ee.eeeeee.c",
-"c.e.e.e.eee..e.c",
-"c.e...e..e.eee.c",
-"c.e.e.e..e.eee.c",
-"c.e.e.e..ee..e.c",
-"c.eeeeeeeeeeee.c",
-"c.ffffffffffff.c",
-"c.fccccfffffff.c",
-"cccccccccffffccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flOutput.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flOutput_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #d0d0d0",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...ddddddddda",
-"fd.ddd.dddddddda",
-"fd.ddd.dddddddda",
-"fd.....dddddddda",
-"fd.ddd.dddddddda",
-"fd.ddd.dddddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flPack.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flPack_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #f0f0f0",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flProgress.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flProgress_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #f0f000",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"f.........ddddda",
-"f.........ddddda",
-"f.........ddddda",
-"f.........ddddda",
-"f.........ddddda",
-"f.........ddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flRepeatButton.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flRepeatButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"' c #000000",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddddddddddddac",
-"fdddd''d''d''dac",
-"fdddd''d''d''dac",
-"fdddddddddddddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flReturnButton.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flReturnButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"' c #000000",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffac",
-"fdddddddddddddac",
-"fddddddd'dd''dac",
-"fdddddd''dd''dac",
-"fddddd'''''''dac",
-"fdddddd''dddddac",
-"fddddddd'dddddac",
-"aaaaaaaaaaaaaaac",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flRoller.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flRoller_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #e0e0e0",
-"' c #000000",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #606060",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"aaaaaaaaaaaaaaac",
-"a'f'ee'ddd'dd'f'",
-"a'f'ee'ddd'dd'f'",
-"a'f'ee'ddd'dd'f'",
-"a'f'ee'ddd'dd'f'",
-"a'f'ee'ddd'dd'f'",
-"a'f'ee'ddd'dd'f'",
-"''''''''''''''''",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flRoundButton.xpm
+++ /dev/null
@@ -1,30 +1,0 @@
-/* XPM */
-static const char *flRoundButton_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 7 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-". c none",
-"d c #ffffff",
-"e c #8080ff",
-"f c #d0d0d0",
-"# c #000000",
-/* pixels */
-"................",
-"................",
-"......aaa.......",
-"....aadddaa.....",
-"...adddddddf....",
-"...add###ddf....",
-"..add#####ddf...",
-"..add#####ddf...",
-"..add#####ddf...",
-"...add###ddf....",
-"...adddddddf....",
-"....ffdddff.....",
-"......fff.......",
-"................",
-"................",
-"................"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flScroll.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flScroll_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #f0f0f0",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfddddddddbbbfdc",
-"dfddddddddbddfdc",
-"dfddddddddbddfdc",
-"dfddddddddbfffdc",
-"dfddddddddbddfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfdddbddfdc",
-"dfbdddfdddbddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flScrollBar.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flScrollBar_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"aaaaaaaaaaaaaaaa",
-"adddfffffddddddf",
-"ad'dfdddadddd'df",
-"a''dfdddadddd''f",
-"a''dfdddadddd''f",
-"ad'dfdddadddd'df",
-"adddfaaaaddddddf",
-"afffffffffffffff",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flSlider.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flSlider_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"aaaaaaaaaaaaaaaa",
-"afffffdddddddddf",
-"afdddadddddddddf",
-"afdddadddddddddf",
-"afdddadddddddddf",
-"afdddadddddddddf",
-"afaaaadddddddddf",
-"afffffffffffffff",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flSpinner.xpm
+++ /dev/null
@@ -1,25 +1,0 @@
-/* XPM */
-static const char *flSpinner_xpm[]={
-"16 16 6 1",
-". c None",
-"c c #000000",
-"d c #606060",
-"b c #c0c0c0",
-"# c #e0e0e0",
-"a c #ffffff",
-"................",
-"................",
-"................",
-"................",
-"###############.",
-"#aaaaaaaaa#bcbd.",
-"#aaaaaacaa#cccd.",
-"#aaaaaccaaddddd.",
-"#aaaaaacaa####d.",
-"#aaaaaccca#cccd.",
-"#aaaaaaaaa#bcbd.",
-"ddddddddddddddd.",
-"................",
-"................",
-"................",
-"................"};
--- a/DoConfig/fltk/fluid/pixmaps/flSubmenu.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flSubmenu_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-". c #000000",
-"c c none",
-"d c #b0b0b0",
-"e c #d0d0d0",
-"f c #c0c0c0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccffffccccccccc",
-"c.fffffffccccf.c",
-"c.ffffffffffff.c",
-"c.eeeeeeeeeeee.c",
-"c.ee.eeeee.eee.c",
-"c.e.e.eeee..ee.c",
-"c.e...eeee...e.c",
-"c.e.e.eeee..ee.c",
-"c.e.e.eeee.eee.c",
-"c.eeeeeeeee.....",
-"c.fffffffff.ffff",
-"c.fccccffff.ffff",
-"cccccccccff.ffff",
-"ccccccccccc.ffff"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTable.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flTable_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #f0f0f0",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dfddfddfddfddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTabs.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flTabs_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #a0a0a0",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"ddffffdffffddddc",
-"dfddddfaaaafdddc",
-"dfddddfaaaafdddc",
-"dfddddffffffffdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTextDisplay.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flTextDisplay_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #d0d0d0",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...ddddddddda",
-"fd.ddd.dddddddda",
-"fd.ddd.dddddddda",
-"fd.....dddddddda",
-"fd.ddd.dddddddda",
-"fd.ddd.dddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTextEdit.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flTextEdit_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...dd..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.....d..ddddda",
-"fd.ddd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTile.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flTile_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #f0f0f0",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddd",
-"dfffffffffffffbd",
-"dfdddddbfdddddbd",
-"dfdddddbfdddddbd",
-"dfdddddbfdddddbdc",
-"dfbbbbbbfbbbbbbd",
-"dfffffffffffffbd",
-"dfdddddbfdddddbd",
-"dfdddddbfdddddbd",
-"dfdddddbfdddddbd",
-"dfbbbbbbfbbbbbbd",
-"dddddddddddddddd",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flTree.xpm
+++ /dev/null
@@ -1,30 +1,0 @@
-/* XPM */
-static const char *flTree_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 7 1",
-/* colors */
-"a c #606060",
-"b c #808080",
-"c c none",
-"d c #c0c0c0",
-"e c #ffffff",
-"f c #000000",
-"g c #303030",
-/* pixels */
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfegeeeeeeebbfdc",
-"dfeggggeeeebdfdc",
-"dfegeegeeeebdfdc",
-"dfegeeggggebffdc",
-"dfegeegeeeebdfdc",
-"dfegeeggggebdfdc",
-"dfegeegeegebdfdc",
-"dfegeegeegebdfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbdddfddddbdfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flValueInput.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flValueInput_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #ffffff",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...dd..ddddda",
-"fd.dd..d..ddddda",
-"fd.d.d.d..ddddda",
-"fd..dd.d..ddddda",
-"fd.ddd.d..ddddda",
-"fdd...dd..ddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flValueOutput.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flValueOutput_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"f c #606060",
-". c #000000",
-"c c none",
-"d c #d0d0d0",
-"e c #8080ff",
-"a c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"fdddddddddddddda",
-"fdd...ddddddddda",
-"fd.dd..dddddddda",
-"fd.d.d.dddddddda",
-"fd..dd.dddddddda",
-"fd.ddd.dddddddda",
-"fdd...ddddddddda",
-"fdddddddddddddda",
-"aaaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flValueSlider.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flValueSlider_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #c0c0c0",
-"' c #000000",
-"f c #e0e0e0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"aaaaaaaaaaaaaaaa",
-"adddddfffffddddf",
-"add'ddfdddaddddf",
-"ad''ddfdddaddddf",
-"add'ddfdddaddddf",
-"ad'''dfdddaddddf",
-"adddddfaaaaddddf",
-"afffffffffffffff",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flWidgetClass.xpm
+++ /dev/null
@@ -1,31 +1,0 @@
-/* XPM */
-static const char *flWidgetClass_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 8 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-"g c #c0e0c0",
-"h c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"feebbbbbbbeebeea",
-"feebbbbbbbeebeea",
-"fdddhhhhhhhhhhda",
-"fddhgggggggghdda",
-"fdhgggggggghddda",
-"fdhgggggggghddda",
-"fdhgggggggghddda",
-"fdhgggggggghddda",
-"fddhgggggggghdda",
-"fdddhhhhhhhhhhda",
-"faaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flWindow.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flWindow_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #2020ff",
-"c c none",
-"d c #a0a0a0",
-"e c #8080ff",
-"f c #d0d0d0",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"ffffffffffffffff",
-"feebbbbbbbeebeea",
-"feebbbbbbbeebeea",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"fdddddddddddddda",
-"faaaaaaaaaaaaaaa",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/flWizard.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *flWizard_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"a c #606060",
-"b c #f0f0f0",
-"c c none",
-"d c #c0c0c0",
-"e c #8080ff",
-"f c #000000",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"dddddddddddddddc",
-"dfffffffffffffdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfdddddddddddfdc",
-"dfbbbbbbbbbbbfdc",
-"dfbddddfbdbddfdc",
-"dfbddddfbdbddfdc",
-"dfffffffffffffdc",
-"dddddddddddddddc",
-"cccccccccccccccc",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/lock.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *lock_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"` c #000000",
-"a c #c08080",
-"b c #FFc0c0",
-"c c none",
-"d c #FFc0c0",
-"e c #804040",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccc```ccc",
-"ccccccccc`daa`cc",
-"cccccccc`da`bd`c",
-"cccccccc`a`c`d`c",
-"ccccccc`````````",
-"ccccccc`dddaaae`",
-"ccccccc`daa`aae`",
-"ccccccc`da`eaae`",
-"ccccccc`da`daee`",
-"ccccccc`````````",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/pixmaps/print_color.xpm
+++ /dev/null
@@ -1,44 +1,0 @@
-/* XPM */
-static char * print_color_xpm[] = {
-"24 24 17 1",
-" 	c None",
-".	c #FFFF00",
-"+	c #C8FF00",
-"@	c #00FF00",
-"#	c #FFC800",
-"$	c #FF0000",
-"%	c #00FFFF",
-"&	c #000000",
-"*	c #FF00FF",
-"=	c #00FFC8",
-"-	c #FF00C8",
-";	c #00C800",
-">	c #C80000",
-",	c #0000C8",
-"'	c #0000FF",
-")	c #00C8FF",
-"!	c #C800FF",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%''''''''********",
-"%%%%%%%%''''''''********",
-"%%%%%%%%''''''''********",
-" %%%%%%%)''''''!******* ",
-" %%%%%%%%''''''******** ",
-"  %%%%%%%%''''********  ",
-"   %%%%%%%%''********   ",
-"     %%%%%%  ******     "};
--- a/DoConfig/fltk/fluid/pixmaps/print_gray.xpm
+++ /dev/null
@@ -1,44 +1,0 @@
-/* XPM */
-static char * print_gray_xpm[] = {
-"24 24 17 1",
-" 	c None",
-".	c #E3E3E3",
-"+	c #D2D2D2",
-"@	c #969696",
-"#	c #C2C2C2",
-"$	c #4C4C4C",
-"%	c #B2B2B2",
-"&	c #000000",
-"*	c #696969",
-"=	c #ACACAC",
-"-	c #626262",
-";	c #767676",
-">	c #3C3C3C",
-",	c #161616",
-"'	c #1C1C1C",
-")	c #929292",
-"!	c #585858",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%''''''''********",
-"%%%%%%%%''''''''********",
-"%%%%%%%%''''''''********",
-" %%%%%%%)''''''!******* ",
-" %%%%%%%%''''''******** ",
-"  %%%%%%%%''''********  ",
-"   %%%%%%%%''********   ",
-"     %%%%%%  ******     "};
--- a/DoConfig/fltk/fluid/pixmaps/protected.xpm
+++ /dev/null
@@ -1,29 +1,0 @@
-/* XPM */
-static const char *protected_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"16 16 6 1",
-/* colors */
-"` c #000000",
-"a c #80c080",
-"b c #c0ffc0",
-"c c none",
-"d c #c0ffc0",
-"e c #408040",
-/* pixels */
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccccccccc",
-"cccccccccc```ccc",
-"ccccccccc`daa`cc",
-"cccccccc`da`bd`c",
-"cccccccc`a`c`d`c",
-"ccccccc`````````",
-"ccccccc`dddaaae`",
-"ccccccc`daa`aae`",
-"ccccccc`da`eaae`",
-"ccccccc`da`daee`",
-"ccccccc`````````",
-"cccccccccccccccc"
-};
--- a/DoConfig/fltk/fluid/print_panel.cxx
+++ /dev/null
@@ -1,587 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "print_panel.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <FL/Fl_Preferences.H>
-extern Fl_Preferences fluid_prefs;
-
-Fl_Double_Window *print_panel=(Fl_Double_Window *)0;
-
-Fl_Group *print_panel_controls=(Fl_Group *)0;
-
-Fl_Choice *print_choice=(Fl_Choice *)0;
-
-static void cb_print_choice(Fl_Choice*, void*) {
-  print_update_status();
-}
-
-Fl_Button *print_properties=(Fl_Button *)0;
-
-static void cb_print_properties(Fl_Button*, void*) {
-  print_properties_panel->show();
-}
-
-Fl_Box *print_status=(Fl_Box *)0;
-
-Fl_Round_Button *print_all=(Fl_Round_Button *)0;
-
-static void cb_print_all(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-print_to->deactivate();
-}
-
-Fl_Round_Button *print_pages=(Fl_Round_Button *)0;
-
-static void cb_print_pages(Fl_Round_Button*, void*) {
-  print_from->activate();
-print_to->activate();
-}
-
-Fl_Round_Button *print_selection=(Fl_Round_Button *)0;
-
-static void cb_print_selection(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-print_to->deactivate();
-}
-
-Fl_Int_Input *print_from=(Fl_Int_Input *)0;
-
-Fl_Int_Input *print_to=(Fl_Int_Input *)0;
-
-Fl_Spinner *print_copies=(Fl_Spinner *)0;
-
-static void cb_print_copies(Fl_Spinner*, void*) {
-  if (print_copies->value() == 1) {
-  print_collate_button->deactivate();
-  print_collate_group[0]->deactivate();
-  print_collate_group[1]->deactivate();
-} else {
-  print_collate_button->activate();
-  print_collate_group[0]->activate();
-  print_collate_group[1]->activate();
-};
-}
-
-Fl_Check_Button *print_collate_button=(Fl_Check_Button *)0;
-
-static void cb_print_collate_button(Fl_Check_Button*, void*) {
-  int i = print_collate_button->value() != 0;
-print_collate_group[i]->show();
-print_collate_group[1 - i]->hide();
-}
-
-Fl_Group *print_collate_group[2]={(Fl_Group *)0};
-
-static void cb_Cancel(Fl_Button*, void*) {
-  print_panel->hide();
-}
-
-Fl_Progress *print_progress=(Fl_Progress *)0;
-
-Fl_Double_Window *print_properties_panel=(Fl_Double_Window *)0;
-
-static void cb_print_properties_panel(Fl_Double_Window*, void*) {
-  print_properties_panel->hide();
-print_update_status();
-}
-
-Fl_Choice *print_page_size=(Fl_Choice *)0;
-
-Fl_Menu_Item menu_print_page_size[] = {
- {"Letter", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {"A4", 0,  0, 0, 0, (uchar)FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-#include <FL/Fl_Pixmap.H>
-static const char *idata_print_color[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #FFFF00",
-"+\tc #C8FF00",
-"@\tc #00FF00",
-"#\tc #FFC800",
-"$\tc #FF0000",
-"%\tc #00FFFF",
-"&\tc #000000",
-"*\tc #FF00FF",
-"=\tc #00FFC8",
-"-\tc #FF00C8",
-";\tc #00C800",
-">\tc #C80000",
-",\tc #0000C8",
-"\'\tc #0000FF",
-")\tc #00C8FF",
-"!\tc #C800FF",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Image *image_print_color() {
-  static Fl_Image *image = new Fl_Pixmap(idata_print_color);
-  return image;
-}
-
-static const char *idata_print_gray[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #E3E3E3",
-"+\tc #D2D2D2",
-"@\tc #969696",
-"#\tc #C2C2C2",
-"$\tc #4C4C4C",
-"%\tc #B2B2B2",
-"&\tc #000000",
-"*\tc #696969",
-"=\tc #ACACAC",
-"-\tc #626262",
-";\tc #767676",
-">\tc #3C3C3C",
-",\tc #161616",
-"\'\tc #1C1C1C",
-")\tc #929292",
-"!\tc #585858",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Image *image_print_gray() {
-  static Fl_Image *image = new Fl_Pixmap(idata_print_gray);
-  return image;
-}
-
-Fl_Button *print_output_mode[4]={(Fl_Button *)0};
-
-static void cb_Save(Fl_Return_Button*, void*) {
-  print_properties_panel->hide();
-
-char name[1024];
-int val;
-const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-snprintf(name, sizeof(name), "%s/page_size", printer);
-fluid_prefs.set(name, print_page_size->value());
-
-snprintf(name, sizeof(name), "%s/output_mode", printer);
-for (val = 0; val < 4; val ++) {
-  if (print_output_mode[val]->value()) break;
-}
-fluid_prefs.set(name, val);
-}
-
-static void cb_Cancel1(Fl_Button*, void*) {
-  print_properties_panel->hide();
-print_update_status();
-}
-
-static void cb_Use(Fl_Button*, void*) {
-  print_properties_panel->hide();
-}
-
-Fl_Double_Window* make_print_panel() {
-  { print_panel = new Fl_Double_Window(465, 235, "Print");
-    { print_panel_controls = new Fl_Group(10, 10, 447, 216);
-      { print_choice = new Fl_Choice(113, 10, 181, 25, "Printer:");
-        print_choice->down_box(FL_BORDER_BOX);
-        print_choice->labelfont(1);
-        print_choice->callback((Fl_Callback*)cb_print_choice);
-        print_choice->when(FL_WHEN_CHANGED);
-      } // Fl_Choice* print_choice
-      { print_properties = new Fl_Button(294, 10, 105, 25, "Properties...");
-        print_properties->callback((Fl_Callback*)cb_print_properties);
-      } // Fl_Button* print_properties
-      { print_status = new Fl_Box(111, 41, 288, 17, "printer/job status");
-        print_status->align(Fl_Align(68|FL_ALIGN_INSIDE));
-      } // Fl_Box* print_status
-      { Fl_Group* o = new Fl_Group(10, 86, 227, 105, "Print Range");
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_all = new Fl_Round_Button(20, 96, 38, 25, "All");
-          print_all->type(102);
-          print_all->down_box(FL_ROUND_DOWN_BOX);
-          print_all->value(1);
-          print_all->callback((Fl_Callback*)cb_print_all);
-        } // Fl_Round_Button* print_all
-        { print_pages = new Fl_Round_Button(20, 126, 64, 25, "Pages");
-          print_pages->type(102);
-          print_pages->down_box(FL_ROUND_DOWN_BOX);
-          print_pages->callback((Fl_Callback*)cb_print_pages);
-        } // Fl_Round_Button* print_pages
-        { print_selection = new Fl_Round_Button(20, 156, 82, 25, "Selection");
-          print_selection->type(102);
-          print_selection->down_box(FL_ROUND_DOWN_BOX);
-          print_selection->callback((Fl_Callback*)cb_print_selection);
-        } // Fl_Round_Button* print_selection
-        { print_from = new Fl_Int_Input(136, 126, 28, 25, "From:");
-          print_from->type(2);
-          print_from->textfont(4);
-          print_from->deactivate();
-        } // Fl_Int_Input* print_from
-        { print_to = new Fl_Int_Input(199, 126, 28, 25, "To:");
-          print_to->type(2);
-          print_to->textfont(4);
-          print_to->deactivate();
-        } // Fl_Int_Input* print_to
-        o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(247, 86, 210, 105, "Copies");
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_copies = new Fl_Spinner(321, 96, 45, 25, "# Copies:");
-          print_copies->callback((Fl_Callback*)cb_print_copies);
-          print_copies->when(FL_WHEN_CHANGED);
-        } // Fl_Spinner* print_copies
-        { print_collate_button = new Fl_Check_Button(376, 96, 64, 25, "Collate");
-          print_collate_button->down_box(FL_DOWN_BOX);
-          print_collate_button->callback((Fl_Callback*)cb_print_collate_button);
-          print_collate_button->when(FL_WHEN_CHANGED);
-          print_collate_button->deactivate();
-        } // Fl_Check_Button* print_collate_button
-        { print_collate_group[0] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[0]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          print_collate_group[0]->end();
-        } // Fl_Group* print_collate_group[0]
-        { print_collate_group[1] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[1]->hide();
-          print_collate_group[1]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          print_collate_group[1]->end();
-        } // Fl_Group* print_collate_group[1]
-        o->end();
-      } // Fl_Group* o
-      { Fl_Return_Button* o = new Fl_Return_Button(309, 201, 70, 25, "Print");
-        o->callback((Fl_Callback*)print_cb);
-      } // Fl_Return_Button* o
-      { Fl_Button* o = new Fl_Button(389, 201, 68, 25, "Cancel");
-        o->callback((Fl_Callback*)cb_Cancel);
-      } // Fl_Button* o
-      print_panel_controls->end();
-    } // Fl_Group* print_panel_controls
-    { print_progress = new Fl_Progress(10, 203, 289, 21);
-      print_progress->selection_color((Fl_Color)4);
-      print_progress->hide();
-    } // Fl_Progress* print_progress
-    print_panel->set_modal();
-    print_panel->end();
-  } // Fl_Double_Window* print_panel
-  { print_properties_panel = new Fl_Double_Window(290, 130, "Printer Properties");
-    print_properties_panel->callback((Fl_Callback*)cb_print_properties_panel);
-    { print_page_size = new Fl_Choice(110, 10, 80, 25, "Page Size:");
-      print_page_size->down_box(FL_BORDER_BOX);
-      print_page_size->labelfont(1);
-      print_page_size->labelsize(12);
-      print_page_size->menu(menu_print_page_size);
-    } // Fl_Choice* print_page_size
-    { Fl_Group* o = new Fl_Group(110, 45, 170, 40, "Output Mode:");
-      o->labelfont(1);
-      o->labelsize(12);
-      o->align(Fl_Align(FL_ALIGN_LEFT));
-      { print_output_mode[0] = new Fl_Button(110, 45, 30, 40);
-        print_output_mode[0]->type(102);
-        print_output_mode[0]->box(FL_BORDER_BOX);
-        print_output_mode[0]->down_box(FL_BORDER_BOX);
-        print_output_mode[0]->value(1);
-        print_output_mode[0]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[0]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[0]->image( image_print_color() );
-      } // Fl_Button* print_output_mode[0]
-      { print_output_mode[1] = new Fl_Button(150, 50, 40, 30);
-        print_output_mode[1]->type(102);
-        print_output_mode[1]->box(FL_BORDER_BOX);
-        print_output_mode[1]->down_box(FL_BORDER_BOX);
-        print_output_mode[1]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[1]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[1]->image( image_print_color() );
-      } // Fl_Button* print_output_mode[1]
-      { print_output_mode[2] = new Fl_Button(200, 45, 30, 40);
-        print_output_mode[2]->type(102);
-        print_output_mode[2]->box(FL_BORDER_BOX);
-        print_output_mode[2]->down_box(FL_BORDER_BOX);
-        print_output_mode[2]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[2]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[2]->image( image_print_gray() );
-      } // Fl_Button* print_output_mode[2]
-      { print_output_mode[3] = new Fl_Button(240, 50, 40, 30);
-        print_output_mode[3]->type(102);
-        print_output_mode[3]->box(FL_BORDER_BOX);
-        print_output_mode[3]->down_box(FL_BORDER_BOX);
-        print_output_mode[3]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[3]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[3]->image( image_print_gray() );
-      } // Fl_Button* print_output_mode[3]
-      o->end();
-    } // Fl_Group* o
-    { Fl_Return_Button* o = new Fl_Return_Button(123, 95, 79, 25, "Save");
-      o->callback((Fl_Callback*)cb_Save);
-    } // Fl_Return_Button* o
-    { Fl_Button* o = new Fl_Button(212, 95, 68, 25, "Cancel");
-      o->callback((Fl_Callback*)cb_Cancel1);
-    } // Fl_Button* o
-    { Fl_Button* o = new Fl_Button(60, 95, 53, 25, "Use");
-      o->callback((Fl_Callback*)cb_Use);
-    } // Fl_Button* o
-    print_properties_panel->set_modal();
-    print_properties_panel->end();
-  } // Fl_Double_Window* print_properties_panel
-  return print_properties_panel;
-}
-void print_cb(Fl_Return_Button *, void *); 
-
-void print_load() {
-  FILE *lpstat;
-  char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024];
-  int i;
-  
-  if (print_choice->size() > 1) {
-    for (i = 1; print_choice->text(i); i ++) {
-      free(print_choice->menu()[i].user_data());
-    }
-  }
-  
-  print_choice->clear();
-  print_choice->add("Print To File", 0, 0, 0, FL_MENU_DIVIDER);
-  print_choice->value(0);
-  
-  defname[0] = '\0';
-  
-  if ((lpstat = popen("LC_MESSAGES=C LANG=C lpstat -p -d", "r")) != NULL) {
-    while (fgets(line, sizeof(line), lpstat)) {
-      if (!strncmp(line, "printer ", 8) &&
-          sscanf(line + 8, "%s", name) == 1) {
-        for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
-          if (*nptr == '/') *qptr++ = '\\';
-        }
-        *qptr = '\0';
-  
-        print_choice->add(qname, 0, 0, (void *)strdup(name), 0);
-      } else if (!strncmp(line, "system default destination: ", 28)) {
-        if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\0';
-      }
-    }
-    pclose(lpstat);
-  }
-  
-  if (defname[0]) {
-    for (i = 1; print_choice->text(i); i ++) {
-      if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
-        print_choice->value(i);
-        break;
-      }
-    }
-  } else if (print_choice->size() > 2) print_choice->value(1);
-  
-  
-  print_update_status();
-}
-
-void print_update_status() {
-  FILE *lpstat;
-  char command[1024];
-  static char status[1024];
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-  
-  if (print_choice->value()) {
-    snprintf(command, sizeof(command), "lpstat -p '%s'", printer);
-    if ((lpstat = popen(command, "r")) != NULL) {
-      if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
-      pclose(lpstat);
-    } else strcpy(status, "printer status unavailable");
-  } else status[0] = '\0';
-  
-  print_status->label(status);
-  
-  char name[1024];
-  int val;
-  
-  snprintf(name, sizeof(name), "%s/page_size", printer);
-  fluid_prefs.get(name, val, 0);
-  print_page_size->value(val);
-  
-  snprintf(name, sizeof(name), "%s/output_mode", printer);
-  fluid_prefs.get(name, val, 0);
-  print_output_mode[val]->setonly();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/print_panel.fl
+++ /dev/null
@@ -1,366 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// FLUID print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {\#include <stdio.h>} {private local
-}
-
-decl {\#include <stdlib.h>} {private local
-}
-
-decl {\#include "../src/flstring.h"} {private local
-}
-
-decl {\#include <FL/Fl_Preferences.H>} {private local
-}
-
-decl {extern Fl_Preferences fluid_prefs;} {private local
-}
-
-Function {make_print_panel()} {open
-} {
-  Fl_Window print_panel {
-    label Print open
-    xywh {394 209 465 235} type Double hide modal
-  } {
-    Fl_Group print_panel_controls {open
-      xywh {10 10 447 216}
-    } {
-      Fl_Choice print_choice {
-        label {Printer:}
-        callback {print_update_status();} open
-        xywh {113 10 181 25} down_box BORDER_BOX labelfont 1 when 1
-      } {}
-      Fl_Button print_properties {
-        label {Properties...}
-        callback {print_properties_panel->show();} selected
-        xywh {294 10 105 25}
-      }
-      Fl_Box print_status {
-        label {printer/job status}
-        xywh {111 41 288 17} align 84
-      }
-      Fl_Group {} {
-        label {Print Range} open
-        xywh {10 86 227 105} box THIN_DOWN_BOX labelfont 1 align 5
-      } {
-        Fl_Round_Button print_all {
-          label All
-          callback {print_from->deactivate();
-print_to->deactivate();}
-          xywh {20 96 38 25} type Radio down_box ROUND_DOWN_BOX value 1
-        }
-        Fl_Round_Button print_pages {
-          label Pages
-          callback {print_from->activate();
-print_to->activate();}
-          xywh {20 126 64 25} type Radio down_box ROUND_DOWN_BOX
-        }
-        Fl_Round_Button print_selection {
-          label Selection
-          callback {print_from->deactivate();
-print_to->deactivate();}
-          xywh {20 156 82 25} type Radio down_box ROUND_DOWN_BOX
-        }
-        Fl_Input print_from {
-          label {From:}
-          xywh {136 126 28 25} type Int textfont 4 deactivate
-        }
-        Fl_Input print_to {
-          label {To:}
-          xywh {199 126 28 25} type Int textfont 4 deactivate
-        }
-      }
-      Fl_Group {} {
-        label Copies open
-        xywh {247 86 210 105} box THIN_DOWN_BOX labelfont 1 align 5
-      } {
-        Fl_Spinner print_copies {
-          label {\# Copies:}
-          callback {if (print_copies->value() == 1) {
-  print_collate_button->deactivate();
-  print_collate_group[0]->deactivate();
-  print_collate_group[1]->deactivate();
-} else {
-  print_collate_button->activate();
-  print_collate_group[0]->activate();
-  print_collate_group[1]->activate();
-}}
-          xywh {321 96 45 25} when 1
-        }
-        Fl_Check_Button print_collate_button {
-          label Collate
-          callback {int i = print_collate_button->value() != 0;
-print_collate_group[i]->show();
-print_collate_group[1 - i]->hide();}
-          xywh {376 96 64 25} down_box DOWN_BOX when 1 deactivate
-        }
-        Fl_Group {print_collate_group[0]} {
-          xywh {257 131 191 50} deactivate
-        } {
-          Fl_Box {} {
-            label 1
-            xywh {287 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 1
-            xywh {272 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 1
-            xywh {257 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 2
-            xywh {352 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 2
-            xywh {337 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 2
-            xywh {322 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 3
-            xywh {417 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 3
-            xywh {402 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-          Fl_Box {} {
-            label 3
-            xywh {387 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26 deactivate
-          }
-        }
-        Fl_Group {print_collate_group[1]} {
-          xywh {257 131 191 50} hide deactivate
-        } {
-          Fl_Box {} {
-            label 3
-            xywh {287 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 2
-            xywh {272 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 1
-            xywh {257 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 3
-            xywh {352 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 2
-            xywh {337 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 1
-            xywh {322 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 3
-            xywh {417 141 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 2
-            xywh {402 136 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-          Fl_Box {} {
-            label 1
-            xywh {387 131 30 40} box BORDER_BOX color 7 labelsize 11 align 26
-          }
-        }
-      }
-      Fl_Return_Button {} {
-        label Print
-        callback print_cb
-        xywh {309 201 70 25}
-      }
-      Fl_Button {} {
-        label Cancel
-        callback {print_panel->hide();}
-        xywh {389 201 68 25}
-      }
-    }
-    Fl_Progress print_progress {
-      xywh {10 203 289 21} selection_color 4 hide
-    }
-  }
-  Fl_Window print_properties_panel {
-    label {Printer Properties}
-    callback {print_properties_panel->hide();
-print_update_status();} open
-    xywh {400 537 290 130} type Double hide modal
-  } {
-    Fl_Choice print_page_size {
-      label {Page Size:}
-      xywh {110 10 80 25} down_box BORDER_BOX labelfont 1 labelsize 12
-    } {
-      MenuItem {} {
-        label Letter
-        xywh {0 0 35 25}
-      }
-      MenuItem {} {
-        label A4
-        xywh {0 0 35 25}
-      }
-    }
-    Fl_Group {} {
-      label {Output Mode:} open
-      xywh {110 45 170 40} labelfont 1 labelsize 12 align 4
-    } {
-      Fl_Button {print_output_mode[0]} {
-        image {pixmaps/print_color.xpm} xywh {110 45 30 40} type Radio box BORDER_BOX down_box BORDER_BOX value 1 color 7 selection_color 0
-      }
-      Fl_Button {print_output_mode[1]} {
-        image {pixmaps/print_color.xpm} xywh {150 50 40 30} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
-      }
-      Fl_Button {print_output_mode[2]} {
-        image {pixmaps/print_gray.xpm} xywh {200 45 30 40} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
-      }
-      Fl_Button {print_output_mode[3]} {
-        image {pixmaps/print_gray.xpm} xywh {240 50 40 30} type Radio box BORDER_BOX down_box BORDER_BOX color 7 selection_color 0
-      }
-    }
-    Fl_Return_Button {} {
-      label Save
-      callback {print_properties_panel->hide();
-
-char name[1024];
-int val;
-const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-snprintf(name, sizeof(name), "%s/page_size", printer);
-fluid_prefs.set(name, print_page_size->value());
-
-snprintf(name, sizeof(name), "%s/output_mode", printer);
-for (val = 0; val < 4; val ++) {
-  if (print_output_mode[val]->value()) break;
-}
-fluid_prefs.set(name, val);}
-      xywh {123 95 79 25}
-    }
-    Fl_Button {} {
-      label Cancel
-      callback {print_properties_panel->hide();
-print_update_status();}
-      xywh {212 95 68 25}
-    }
-    Fl_Button {} {
-      label Use
-      callback {print_properties_panel->hide();}
-      xywh {60 95 53 25}
-    }
-  }
-}
-
-decl {void print_cb(Fl_Return_Button *, void *);} {public local
-}
-
-Function {print_load()} {open return_type void
-} {
-  code {FILE *lpstat;
-char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024];
-int i;
-
-if (print_choice->size() > 1) {
-  for (i = 1; print_choice->text(i); i ++) {
-    free(print_choice->menu()[i].user_data());
-  }
-}
-
-print_choice->clear();
-print_choice->add("Print To File", 0, 0, 0, FL_MENU_DIVIDER);
-print_choice->value(0);
-
-defname[0] = '\\0';
-
-if ((lpstat = popen("LC_MESSAGES=C LANG=C lpstat -p -d", "r")) != NULL) {
-  while (fgets(line, sizeof(line), lpstat)) {
-    if (!strncmp(line, "printer ", 8) &&
-        sscanf(line + 8, "%s", name) == 1) {
-      for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
-        if (*nptr == '/') *qptr++ = '\\\\';
-      }
-      *qptr = '\\0';
-
-      print_choice->add(qname, 0, 0, (void *)strdup(name), 0);
-    } else if (!strncmp(line, "system default destination: ", 28)) {
-      if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\\0';
-    }
-  }
-  pclose(lpstat);
-}
-
-if (defname[0]) {
-  for (i = 1; print_choice->text(i); i ++) {
-    if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
-      print_choice->value(i);
-      break;
-    }
-  }
-} else if (print_choice->size() > 2) print_choice->value(1);
-
-
-print_update_status();} {}
-}
-
-Function {print_update_status()} {open return_type void
-} {
-  code {FILE *lpstat;
-char command[1024];
-static char status[1024];
-const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-if (print_choice->value()) {
-  snprintf(command, sizeof(command), "lpstat -p '%s'", printer);
-  if ((lpstat = popen(command, "r")) != NULL) {
-    if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
-    pclose(lpstat);
-  } else strcpy(status, "printer status unavailable");
-} else status[0] = '\\0';
-
-print_status->label(status);
-
-char name[1024];
-int val;
-
-snprintf(name, sizeof(name), "%s/page_size", printer);
-fluid_prefs.get(name, val, 0);
-print_page_size->value(val);
-
-snprintf(name, sizeof(name), "%s/output_mode", printer);
-fluid_prefs.get(name, val, 0);
-print_output_mode[val]->setonly();} {}
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/print_panel.h
+++ /dev/null
@@ -1,62 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef print_panel_h
-#define print_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-extern Fl_Double_Window *print_panel;
-#include <FL/Fl_Group.H>
-extern Fl_Group *print_panel_controls;
-#include <FL/Fl_Choice.H>
-extern Fl_Choice *print_choice;
-#include <FL/Fl_Button.H>
-extern Fl_Button *print_properties;
-#include <FL/Fl_Box.H>
-extern Fl_Box *print_status;
-#include <FL/Fl_Round_Button.H>
-extern Fl_Round_Button *print_all;
-extern Fl_Round_Button *print_pages;
-extern Fl_Round_Button *print_selection;
-#include <FL/Fl_Int_Input.H>
-extern Fl_Int_Input *print_from;
-extern Fl_Int_Input *print_to;
-#include <FL/Fl_Spinner.H>
-extern Fl_Spinner *print_copies;
-#include <FL/Fl_Check_Button.H>
-extern Fl_Check_Button *print_collate_button;
-extern Fl_Group *print_collate_group[2];
-#include <FL/Fl_Return_Button.H>
-extern void print_cb(Fl_Return_Button*, void*);
-#include <FL/Fl_Progress.H>
-extern Fl_Progress *print_progress;
-extern Fl_Double_Window *print_properties_panel;
-extern Fl_Choice *print_page_size;
-extern Fl_Button *print_output_mode[4];
-Fl_Double_Window* make_print_panel();
-extern Fl_Menu_Item menu_print_page_size[];
-extern void print_cb(Fl_Return_Button *, void *); 
-void print_load();
-void print_update_status();
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/template_panel.cxx
+++ /dev/null
@@ -1,249 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID template support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "template_panel.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <errno.h>
-#include <FL/filename.H>
-#include <FL/fl_ask.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_Preferences.H>
-#if defined(WIN32) && !defined(__CYGWIN__)
-#include <io.h>
-#else
-#include <unistd.h>
-#endif // WIN32 && !__CYGWIN__
-extern Fl_Preferences fluid_prefs;
-
-Fl_Double_Window *template_panel=(Fl_Double_Window *)0;
-
-static void cb_template_panel(Fl_Double_Window*, void*) {
-  Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_browser->deselect();
-template_name->value("");
-template_instance->value("");
-template_panel->hide();
-}
-
-Fl_Browser *template_browser=(Fl_Browser *)0;
-
-static void cb_template_browser(Fl_Browser*, void*) {
-  if (Fl::event_clicks()) {
-  template_panel->hide();
-  return;
-}
-Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-template_preview->redraw();
-
-int item = template_browser->value();
-
-if (item <= 1) template_instance->deactivate();
-else template_instance->activate();
-
-if (item < 1) {
-  template_submit->deactivate();
-  template_delete->deactivate();
-  return;
-}
-
-template_submit->activate();
-
-const char *flfile = (const char *)template_browser->data(item);
-if (!flfile) {
-  template_delete->deactivate();
-  return;
-}
-
-template_name->value(template_browser->text(item));
-
-template_delete->activate();
-
-char pngfile[1024], *ext;
-
-strlcpy(pngfile, flfile, sizeof(pngfile));
-if ((ext = strrchr(pngfile, '.')) == NULL) return;
-strcpy(ext, ".png");
-
-img = Fl_Shared_Image::get(pngfile);
-
-if (img) {
-  template_preview->image(img);
-  template_preview->redraw();
-};
-}
-
-Fl_Box *template_preview=(Fl_Box *)0;
-
-Fl_Input *template_name=(Fl_Input *)0;
-
-static void cb_template_name(Fl_Input*, void*) {
-  if (strlen(template_name->value())) {
-  template_submit->activate();
-  if (Fl::event_key() == FL_Enter) template_panel->hide();
-} else template_submit->deactivate();
-}
-
-Fl_Input *template_instance=(Fl_Input *)0;
-
-Fl_Button *template_delete=(Fl_Button *)0;
-
-static void cb_Cancel(Fl_Button*, void*) {
-  Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_browser->deselect();
-template_name->value("");
-template_instance->value("");
-template_panel->hide();
-}
-
-Fl_Return_Button *template_submit=(Fl_Return_Button *)0;
-
-static void cb_template_submit(Fl_Return_Button*, void*) {
-  Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_panel->hide();
-}
-
-Fl_Double_Window* make_template_panel() {
-  { template_panel = new Fl_Double_Window(460, 355, "New/Save Template");
-    template_panel->callback((Fl_Callback*)cb_template_panel);
-    { template_browser = new Fl_Browser(10, 28, 180, 250, "Available Templates:");
-      template_browser->type(2);
-      template_browser->labelfont(1);
-      template_browser->callback((Fl_Callback*)cb_template_browser);
-      template_browser->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-      template_browser->when(3);
-    } // Fl_Browser* template_browser
-    { template_preview = new Fl_Box(200, 28, 250, 250);
-      template_preview->box(FL_THIN_DOWN_BOX);
-      template_preview->align(Fl_Align(69|FL_ALIGN_INSIDE));
-      Fl_Group::current()->resizable(template_preview);
-    } // Fl_Box* template_preview
-    { template_name = new Fl_Input(198, 288, 252, 25, "Template Name:");
-      template_name->labelfont(1);
-      template_name->textfont(4);
-      template_name->callback((Fl_Callback*)cb_template_name);
-      template_name->when(3);
-    } // Fl_Input* template_name
-    { template_instance = new Fl_Input(198, 288, 252, 25, "Instance Name:");
-      template_instance->labelfont(1);
-      template_instance->textfont(4);
-      template_instance->hide();
-    } // Fl_Input* template_instance
-    { Fl_Group* o = new Fl_Group(10, 323, 440, 25);
-      { template_delete = new Fl_Button(10, 323, 143, 25, "Delete Template");
-        template_delete->callback((Fl_Callback*)template_delete_cb);
-      } // Fl_Button* template_delete
-      { Fl_Box* o = new Fl_Box(153, 323, 126, 25);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      { Fl_Button* o = new Fl_Button(289, 323, 72, 25, "Cancel");
-        o->callback((Fl_Callback*)cb_Cancel);
-      } // Fl_Button* o
-      { template_submit = new Fl_Return_Button(371, 323, 79, 25, "Save");
-        template_submit->callback((Fl_Callback*)cb_template_submit);
-      } // Fl_Return_Button* template_submit
-      o->end();
-    } // Fl_Group* o
-    template_panel->set_modal();
-    template_panel->end();
-  } // Fl_Double_Window* template_panel
-  return template_panel;
-}
-
-void template_clear() {
-  int i;
-  void *filename;
-  
-  for (i = 1; i <= template_browser->size(); i ++) {
-    if ((filename = template_browser->data(i)) != NULL) free(filename);
-  }
-  
-  template_browser->deselect();
-  template_browser->clear();
-}
-
-void template_delete_cb(Fl_Button *, void *) {
-  int item = template_browser->value();
-  if (item < 1) return;
-  
-  const char *name = template_browser->text(item);
-  const char *flfile = (const char *)template_browser->data(item);
-  if (!flfile) return;
-  
-  if (!fl_choice("Are you sure you want to delete the template \"%s\"?",
-                 "Cancel", "Delete", 0, name)) return;
-  
-  if (unlink(flfile)) {
-    fl_alert("Unable to delete template \"%s\":\n%s", name, strerror(errno));
-    return;
-  }
-  
-  template_browser->remove(item);
-  template_browser->do_callback();
-}
-
-void template_load() {
-  int i;
-  char name[1024], filename[1024], path[1024], *ptr;
-  struct dirent **files;
-  int num_files;
-  
-  fluid_prefs.getUserdataPath(path, sizeof(path));
-  strlcat(path, "templates", sizeof(path));
-  
-  num_files = fl_filename_list(path, &files);
-  
-  for (i = 0; i < num_files; i ++) {
-    if (fl_filename_match(files[i]->d_name, "*.fl")) {
-      // Format the name as the filename with "_" replaced with " "
-      // and without the trailing ".fl"...
-      strlcpy(name, files[i]->d_name, sizeof(name));
-      *strstr(name, ".fl") = '\0';
-  
-      for (ptr = name; *ptr; ptr ++) {
-        if (*ptr == '_') *ptr = ' ';
-      }
-  
-      // Add the template to the browser...
-      snprintf(filename, sizeof(filename), "%s/%s", path, files[i]->d_name);
-      template_browser->add(name, strdup(filename));
-    }
-  
-    free(files[i]);
-  }
-  
-  if (num_files > 0) free(files);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/template_panel.fl
+++ /dev/null
@@ -1,247 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// FLUID template support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {\#include <stdio.h>} {private local
-}
-
-decl {\#include <stdlib.h>} {private local
-}
-
-decl {\#include "../src/flstring.h"} {private local
-}
-
-decl {\#include <errno.h>} {private local
-}
-
-decl {\#include <FL/filename.H>} {private local
-}
-
-decl {\#include <FL/fl_ask.H>} {private local
-}
-
-decl {\#include <FL/Fl_Shared_Image.H>} {private local
-}
-
-decl {\#include <FL/Fl_Preferences.H>} {private local
-}
-
-declblock {\#if defined(WIN32) && !defined(__CYGWIN__)} {after {\#endif // WIN32 && !__CYGWIN__}
-} {
-  decl {\#include <io.h>} {private local
-  }
-  decl {\#else} {private local
-  }
-  decl {\#include <unistd.h>} {private local
-  }
-}
-
-decl {extern Fl_Preferences fluid_prefs;} {private local
-}
-
-Function {make_template_panel()} {open
-} {
-  Fl_Window template_panel {
-    label {New/Save Template}
-    callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_browser->deselect();
-template_name->value("");
-template_instance->value("");
-template_panel->hide();} open
-    xywh {398 200 460 355} type Double hide resizable modal
-  } {
-    Fl_Browser template_browser {
-      label {Available Templates:}
-      callback {if (Fl::event_clicks()) {
-  template_panel->hide();
-  return;
-}
-Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-template_preview->redraw();
-
-int item = template_browser->value();
-
-if (item <= 1) template_instance->deactivate();
-else template_instance->activate();
-
-if (item < 1) {
-  template_submit->deactivate();
-  template_delete->deactivate();
-  return;
-}
-
-template_submit->activate();
-
-const char *flfile = (const char *)template_browser->data(item);
-if (!flfile) {
-  template_delete->deactivate();
-  return;
-}
-
-template_name->value(template_browser->text(item));
-
-template_delete->activate();
-
-char pngfile[1024], *ext;
-
-strlcpy(pngfile, flfile, sizeof(pngfile));
-if ((ext = strrchr(pngfile, '.')) == NULL) return;
-strcpy(ext, ".png");
-
-img = Fl_Shared_Image::get(pngfile);
-
-if (img) {
-  template_preview->image(img);
-  template_preview->redraw();
-}}
-      xywh {10 28 180 250} type Hold labelfont 1 align 5 when 3
-    }
-    Fl_Box template_preview {
-      xywh {200 28 250 250} box THIN_DOWN_BOX align 85 resizable
-    }
-    Fl_Input template_name {
-      label {Template Name:}
-      callback {if (strlen(template_name->value())) {
-  template_submit->activate();
-  if (Fl::event_key() == FL_Enter) template_panel->hide();
-} else template_submit->deactivate();} selected
-      xywh {198 288 252 25} labelfont 1 when 3 textfont 4
-    }
-    Fl_Input template_instance {
-      label {Instance Name:}
-      xywh {198 288 252 25} labelfont 1 textfont 4 hide
-    }
-    Fl_Group {} {
-      xywh {10 323 440 25}
-    } {
-      Fl_Button template_delete {
-        label {Delete Template}
-        callback template_delete_cb
-        xywh {10 323 143 25}
-      }
-      Fl_Box {} {
-        xywh {153 323 126 25} resizable
-      }
-      Fl_Button {} {
-        label Cancel
-        callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_browser->deselect();
-template_name->value("");
-template_instance->value("");
-template_panel->hide();}
-        xywh {289 323 72 25}
-      }
-      Fl_Return_Button template_submit {
-        label Save
-        callback {Fl_Shared_Image *img = (Fl_Shared_Image *)template_preview->image();
-if (img) img->release();
-template_preview->image(0);
-
-template_panel->hide();}
-        xywh {371 323 79 25}
-      }
-    }
-  }
-}
-
-Function {template_clear()} {return_type void
-} {
-  code {int i;
-void *filename;
-
-for (i = 1; i <= template_browser->size(); i ++) {
-  if ((filename = template_browser->data(i)) != NULL) free(filename);
-}
-
-template_browser->deselect();
-template_browser->clear();} {}
-}
-
-Function {template_delete_cb(Fl_Button *, void *)} {return_type void
-} {
-  code {int item = template_browser->value();
-if (item < 1) return;
-
-const char *name = template_browser->text(item);
-const char *flfile = (const char *)template_browser->data(item);
-if (!flfile) return;
-
-if (!fl_choice("Are you sure you want to delete the template \\"%s\\"?",
-               "Cancel", "Delete", 0, name)) return;
-
-if (unlink(flfile)) {
-  fl_alert("Unable to delete template \\"%s\\":\\n%s", name, strerror(errno));
-  return;
-}
-
-template_browser->remove(item);
-template_browser->do_callback();} {}
-}
-
-Function {template_load()} {return_type void
-} {
-  code {int i;
-char name[1024], filename[1024], path[1024], *ptr;
-struct dirent **files;
-int num_files;
-
-fluid_prefs.getUserdataPath(path, sizeof(path));
-strlcat(path, "templates", sizeof(path));
-
-num_files = fl_filename_list(path, &files);
-
-for (i = 0; i < num_files; i ++) {
-  if (fl_filename_match(files[i]->d_name, "*.fl")) {
-    // Format the name as the filename with "_" replaced with " "
-    // and without the trailing ".fl"...
-    strlcpy(name, files[i]->d_name, sizeof(name));
-    *strstr(name, ".fl") = '\\0';
-
-    for (ptr = name; *ptr; ptr ++) {
-      if (*ptr == '_') *ptr = ' ';
-    }
-
-    // Add the template to the browser...
-    snprintf(filename, sizeof(filename), "%s/%s", path, files[i]->d_name);
-    template_browser->add(name, strdup(filename));
-  }
-
-  free(files[i]);
-}
-
-if (num_files > 0) free(files);} {}
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/template_panel.h
+++ /dev/null
@@ -1,46 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID template support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef template_panel_h
-#define template_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-extern Fl_Double_Window *template_panel;
-#include <FL/Fl_Browser.H>
-extern Fl_Browser *template_browser;
-#include <FL/Fl_Box.H>
-extern Fl_Box *template_preview;
-#include <FL/Fl_Input.H>
-extern Fl_Input *template_name;
-extern Fl_Input *template_instance;
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Button.H>
-extern Fl_Button *template_delete;
-#include <FL/Fl_Return_Button.H>
-extern Fl_Return_Button *template_submit;
-Fl_Double_Window* make_template_panel();
-void template_clear();
-void template_delete_cb(Fl_Button *, void *);
-void template_load();
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/undo.cxx
+++ /dev/null
@@ -1,184 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID undo support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include "Fl_Type.h"
-#include "undo.h"
-#include <FL/Fl_Preferences.H>
-#include <FL/filename.H>
-#include "../src/flstring.h"
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <io.h>
-#  include <windows.h>
-#  define getpid (int)GetCurrentProcessId
-#  ifndef __WATCOMC__
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#    define unlink _unlink
-#  endif // !__WATCOMC__
-#else
-#  include <unistd.h>
-#endif // WIN32 && !__CYGWIN__
-
-
-extern Fl_Preferences	fluid_prefs;	// FLUID preferences
-extern Fl_Menu_Item	Main_Menu[];	// Main menu
-
-#define UNDO_ITEM	25		// Undo menu item index
-#define REDO_ITEM	26		// Redo menu item index
-
-
-//
-// This file implements an undo system using temporary files; ideally
-// we'd like to do this in memory, however the current data structures
-// and design aren't well-suited...  Instead, we save and restore
-// checkpoint files.
-//
-
-
-int undo_current = 0;			// Current undo level in buffer
-int undo_last = 0;			// Last undo level in buffer
-int undo_max = 0;			// Maximum undo level used
-int undo_save = -1;			// Last undo level that was saved
-static int undo_paused = 0;		// Undo checkpointing paused?
-
-
-// Return the undo filename
-static char *undo_filename(int level, char *buf, int bufsize) {
-  static char	undo_path[FL_PATH_MAX] = "";	// Undo path
-
-
-  if (!undo_path[0]) fluid_prefs.getUserdataPath(undo_path, sizeof(undo_path));
-
-  snprintf(buf, bufsize, "%sundo_%d_%d.fl", undo_path, getpid(), level);
-  return buf;
-}
-
-
-// Redo menu callback
-void redo_cb(Fl_Widget *, void *) {
-  char	filename[FL_PATH_MAX];			// Undo checkpoint file
-
-  if (undo_current >= undo_last) return;
-
-  undo_suspend();
-  if (!read_file(undo_filename(undo_current + 1, filename, sizeof(filename)), 0)) {
-    // Unable to read checkpoint file, don't redo...
-    undo_resume();
-    return;
-  }
-
-  undo_current ++;
-
-  // Update modified flag...
-  set_modflag(undo_current != undo_save);
-
-  // Update undo/redo menu items...
-  if (undo_current >= undo_last) Main_Menu[REDO_ITEM].deactivate();
-  Main_Menu[UNDO_ITEM].activate();
-}
-
-// Undo menu callback
-void undo_cb(Fl_Widget *, void *) {
-  char	filename[FL_PATH_MAX];			// Undo checkpoint file
-
-  if (undo_current <= 0) return;
-
-  if (undo_current == undo_last) {
-    write_file(undo_filename(undo_current, filename, sizeof(filename)));
-  }
-
-  undo_suspend();
-  if (!read_file(undo_filename(undo_current - 1, filename, sizeof(filename)), 0)) {
-    // Unable to read checkpoint file, don't undo...
-    undo_resume();
-    return;
-  }
-
-  undo_current --;
-
-  // Update modified flag...
-  set_modflag(undo_current != undo_save);
-
-  // Update undo/redo menu items...
-  if (undo_current <= 0) Main_Menu[UNDO_ITEM].deactivate();
-  Main_Menu[REDO_ITEM].activate();
-  undo_resume();
-}
-
-// Save current file to undo buffer
-void undo_checkpoint() {
-  char	filename[FL_PATH_MAX];			// Undo checkpoint filename
-
-//  printf("undo_checkpoint(): undo_current=%d, undo_paused=%d, modflag=%d\n",
-//         undo_current, undo_paused, modflag);
-
-  // Don't checkpoint if undo_suspend() has been called...
-  if (undo_paused) return;
-
-  // Save the current UI to a checkpoint file...
-  if (!write_file(undo_filename(undo_current, filename, sizeof(filename)))) {
-    // Don't attempt to do undo stuff if we can't write a checkpoint file...
-    perror(filename);
-    return;
-  }
-
-  // Update the saved level...
-  if (modflag && undo_current <= undo_save) undo_save = -1;
-  else if (!modflag) undo_save = undo_current;
-
-  // Update the current undo level...
-  undo_current ++;
-  undo_last = undo_current;
-  if (undo_current > undo_max) undo_max = undo_current;
-
-  // Enable the Undo and disable the Redo menu items...
-  Main_Menu[UNDO_ITEM].activate();
-  Main_Menu[REDO_ITEM].deactivate();
-}
-
-// Clear undo buffer
-void undo_clear() {
-  char	filename[FL_PATH_MAX];			// Undo checkpoint filename
-
-
-  // Remove old checkpoint files...
-  for (int i = 0; i <= undo_max; i ++) {
-    unlink(undo_filename(i, filename, sizeof(filename)));
-  }
-
-  // Reset current, last, and save indices...
-  undo_current = undo_last = undo_max = 0;
-  if (modflag) undo_save = -1;
-  else undo_save = 0;
-}
-
-// Resume undo checkpoints
-void undo_resume() {
-  undo_paused = 0;
-}
-
-// Suspend undo checkpoints
-void undo_suspend() {
-  undo_paused = 1;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/undo.h
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// FLUID undo definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef undo_h
-#  define undo_h
-
-extern int undo_current;		// Current undo level in buffer
-extern int undo_last;			// Last undo level in buffer
-extern int undo_save;			// Last undo level that was saved
-
-void redo_cb(Fl_Widget *, void *);	// Redo menu callback
-void undo_cb(Fl_Widget *, void *);	// Undo menu callback
-void undo_checkpoint();			// Save current file to undo buffer
-void undo_clear();			// Clear undo buffer
-void undo_resume();			// Resume undo checkpoints
-void undo_suspend();			// Suspend undo checkpoints
-
-#endif // !undo_h
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/widget_panel.cxx
+++ /dev/null
@@ -1,870 +1,0 @@
-//
-// "$Id$"
-//
-// Widget panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "widget_panel.h"
-extern void comment_cb(Fl_Text_Editor*, void*);
-
-static void cb_(Fl_Tabs* o, void* v) {
-  propagate_load((Fl_Group *)o,v);
-}
-
-Fl_Menu_Item menu_[] = {
- {"   Image Alignment   ", 0,  0, (void*)(0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 11, 0},
- {"image over text", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"text over image", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"text next to image", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"image next to text", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_NEXT_TO_TEXT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"image is backdrop", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_IMAGE_BACKDROP), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Menu_Item menu_1[] = {
- {"   Inside && Outside   ", 0,  0, (void*)(0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 11, 0},
- {"top left", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_TOP_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"top", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"top right", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_TOP_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"left", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"center", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_CENTER), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"right", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"bottom left", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_LEFT), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"bottom", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"bottom right", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT), 128, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"   Outside Alignment   ", 0,  0, (void*)(0xFFFFFFFF), 1, (uchar)FL_NORMAL_LABEL, 2, 11, 0},
- {"left top", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"right top", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT_TOP), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"left bottom", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_LEFT_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"right bottom", 0,  0, (void*)((fl_intptr_t)FL_ALIGN_RIGHT_BOTTOM), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Value_Input *widget_x_input=(Fl_Value_Input *)0;
-
-Fl_Value_Input *widget_y_input=(Fl_Value_Input *)0;
-
-Fl_Value_Input *widget_w_input=(Fl_Value_Input *)0;
-
-Fl_Value_Input *widget_h_input=(Fl_Value_Input *)0;
-
-Fl_Menu_Item menu_2[] = {
- {"private", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"public", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"protected", 0,  0, (void*)(2), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Menu_Item menu_3[] = {
- {"local", 0,  0, (void*)(0), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {"global", 0,  0, (void*)(1), 0, (uchar)FL_NORMAL_LABEL, 0, 11, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-Fl_Input *v_input[4]={(Fl_Input *)0};
-
-static void cb_1(Fl_Tile*, void* v) {
-  wComment->do_callback(wComment, v);
-wCallback->do_callback(wCallback, v);
-}
-
-Fl_Text_Editor *wComment=(Fl_Text_Editor *)0;
-
-CodeEditor *wCallback=(CodeEditor *)0;
-
-Fl_Button *wLiveMode=(Fl_Button *)0;
-
-/**
- Create a panel that can be used with all known widgets
-*/
-Fl_Double_Window* make_widget_panel() {
-  Fl_Double_Window* w;
-  { // Use a Double Window to avoid flickering.
-    Fl_Double_Window* o = new Fl_Double_Window(420, 400);
-    w = o; if (w) {/* empty */}
-    o->labelsize(11);
-    o->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-    o->hotspot(o);
-    { Fl_Tabs* o = new Fl_Tabs(10, 10, 400, 350);
-      o->selection_color((Fl_Color)12);
-      o->labelsize(11);
-      o->labelcolor(FL_BACKGROUND2_COLOR);
-      o->callback((Fl_Callback*)cb_);
-      o->when(FL_WHEN_NEVER);
-      { Fl_Group* o = new Fl_Group(10, 30, 400, 330, "GUI");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)propagate_load);
-        o->when(FL_WHEN_NEVER);
-        { Fl_Group* o = new Fl_Group(95, 40, 309, 20, "Label:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 40, 190, 20);
-            o->tooltip("The label text for the widget.\nUse Ctrl-J for newlines.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)label_cb);
-            o->when(FL_WHEN_CHANGED);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Choice* o = new Fl_Choice(284, 40, 120, 20);
-            o->tooltip("The label style for the widget.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)labeltype_cb);
-            o->menu(labeltypemenu);
-          } // Fl_Choice* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 65, 309, 20, "Image:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 65, 240, 20);
-            o->tooltip("The active image for the widget.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)image_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Button* o = new Fl_Button(334, 65, 70, 20, "Browse...");
-            o->tooltip("Click to choose the active image.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)image_browse_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 90, 309, 20, "Inactive:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 90, 240, 20);
-            o->tooltip("The inactive image for the widget.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)inactive_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Button* o = new Fl_Button(334, 90, 70, 20, "Browse...");
-            o->tooltip("Click to choose the inactive image.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)inactive_browse_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 115, 310, 20, "Alignment:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Button* o = new Fl_Button(95, 115, 30, 20, "Clip");
-            o->tooltip("Clip the label to the inside of the widget.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_CLIP));
-            o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
-          } // Fl_Button* o
-          { Fl_Button* o = new Fl_Button(130, 115, 38, 20, "Wrap");
-            o->tooltip("Wrap the label text.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_WRAP));
-          } // Fl_Button* o
-          { Fl_Button* o = new Fl_Button(278, 115, 20, 20, "@-1<-");
-            o->tooltip("Left-align the label.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->labelcolor(FL_INACTIVE_COLOR);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_LEFT));
-            o->hide();
-          } // Fl_Button* o
-          { Fl_Button* o = new Fl_Button(303, 115, 20, 20, "@-1->");
-            o->tooltip("Right-align the label.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->labelcolor(FL_INACTIVE_COLOR);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_RIGHT));
-            o->hide();
-          } // Fl_Button* o
-          { Fl_Button* o = new Fl_Button(328, 115, 20, 20, "@-18");
-            o->tooltip("Top-align the label.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->labelcolor(FL_INACTIVE_COLOR);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_TOP));
-            o->hide();
-          } // Fl_Button* o
-          { Fl_Button* o = new Fl_Button(353, 115, 20, 20, "@-12");
-            o->tooltip("Bottom-align the label.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->labelcolor(FL_INACTIVE_COLOR);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_BOTTOM));
-            o->hide();
-          } // Fl_Button* o
-          { Fl_Choice* o = new Fl_Choice(172, 115, 110, 20);
-            o->down_box(FL_BORDER_BOX);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)align_text_image_cb);
-            o->menu(menu_);
-          } // Fl_Choice* o
-          { Fl_Choice* o = new Fl_Choice(288, 115, 85, 20);
-            o->down_box(FL_BORDER_BOX);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)align_position_cb);
-            o->menu(menu_1);
-          } // Fl_Choice* o
-          { Fl_Button* o = new Fl_Button(378, 115, 20, 20, "@-3square");
-            o->tooltip("Show the label inside the widget.");
-            o->type(1);
-            o->selection_color(FL_INACTIVE_COLOR);
-            o->labelsize(11);
-            o->labelcolor(FL_INACTIVE_COLOR);
-            o->callback((Fl_Callback*)align_cb, (void*)((fl_intptr_t)FL_ALIGN_INSIDE));
-          } // Fl_Button* o
-          { Fl_Box* o = new Fl_Box(404, 115, 0, 20);
-            o->labelsize(11);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Box* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 150, 314, 20, "Position:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { widget_x_input = new Fl_Value_Input(95, 150, 55, 20, "X:");
-            widget_x_input->tooltip("The X position of the widget.");
-            widget_x_input->labelsize(11);
-            widget_x_input->maximum(2048);
-            widget_x_input->step(1);
-            widget_x_input->textsize(11);
-            widget_x_input->callback((Fl_Callback*)x_cb);
-            widget_x_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* widget_x_input
-          { widget_y_input = new Fl_Value_Input(155, 150, 55, 20, "Y:");
-            widget_y_input->tooltip("The Y position of the widget.");
-            widget_y_input->labelsize(11);
-            widget_y_input->maximum(2048);
-            widget_y_input->step(1);
-            widget_y_input->textsize(11);
-            widget_y_input->callback((Fl_Callback*)y_cb);
-            widget_y_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* widget_y_input
-          { widget_w_input = new Fl_Value_Input(215, 150, 55, 20, "Width:");
-            widget_w_input->tooltip("The width of the widget.");
-            widget_w_input->labelsize(11);
-            widget_w_input->maximum(2048);
-            widget_w_input->step(1);
-            widget_w_input->textsize(11);
-            widget_w_input->callback((Fl_Callback*)w_cb);
-            widget_w_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* widget_w_input
-          { widget_h_input = new Fl_Value_Input(275, 150, 55, 20, "Height:");
-            widget_h_input->tooltip("The height of the widget.");
-            widget_h_input->labelsize(11);
-            widget_h_input->maximum(2048);
-            widget_h_input->step(1);
-            widget_h_input->textsize(11);
-            widget_h_input->callback((Fl_Callback*)h_cb);
-            widget_h_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* widget_h_input
-          { Fl_Light_Button* o = new Fl_Light_Button(335, 150, 65, 20, "Relative");
-            o->tooltip("If set, widgets inside a widget class of type Fl_Group are repositioned relat\
-ive to the origin at construction time");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)wc_relative_cb);
-          } // Fl_Light_Button* o
-          { Fl_Box* o = new Fl_Box(398, 150, 1, 20);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Box* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 185, 300, 20, "Values:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Size:");
-            o->tooltip("The size of the slider.");
-            o->labelsize(11);
-            o->step(0.010101);
-            o->textsize(11);
-            o->callback((Fl_Callback*)slider_size_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20, "Minimum:");
-            o->tooltip("The minimum value of the widget.");
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)min_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(215, 185, 55, 20, "Maximum:");
-            o->tooltip("The maximum value of the widget.");
-            o->labelsize(11);
-            o->value(1);
-            o->textsize(11);
-            o->callback((Fl_Callback*)max_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(275, 185, 55, 20, "Step:");
-            o->tooltip("The resolution of the widget value.");
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)step_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(335, 185, 55, 20, "Value:");
-            o->tooltip("The current widget value.");
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)value_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Box* o = new Fl_Box(395, 185, 0, 20);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Box* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 185, 300, 20, "Size Range:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          o->hide();
-          { Fl_Value_Input* o = new Fl_Value_Input(95, 185, 55, 20, "Minimum Size:");
-            o->tooltip("The size of the slider.");
-            o->labelsize(11);
-            o->maximum(2048);
-            o->step(1);
-            o->textsize(11);
-            o->callback((Fl_Callback*)min_w_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(155, 185, 55, 20);
-            o->tooltip("The minimum value of the widget.");
-            o->labelsize(11);
-            o->maximum(2048);
-            o->step(1);
-            o->textsize(11);
-            o->callback((Fl_Callback*)min_h_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Button* o = new Fl_Button(215, 185, 25, 20, "set");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)set_min_size_cb);
-          } // Fl_Button* o
-          { Fl_Value_Input* o = new Fl_Value_Input(245, 185, 55, 20, "Maximum Size:");
-            o->tooltip("The maximum value of the widget.");
-            o->labelsize(11);
-            o->maximum(2048);
-            o->step(1);
-            o->textsize(11);
-            o->callback((Fl_Callback*)max_w_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Value_Input* o = new Fl_Value_Input(305, 185, 55, 20);
-            o->tooltip("The resolution of the widget value.");
-            o->labelsize(11);
-            o->maximum(2048);
-            o->step(1);
-            o->textsize(11);
-            o->callback((Fl_Callback*)max_h_cb);
-            o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-          } // Fl_Value_Input* o
-          { Fl_Button* o = new Fl_Button(365, 185, 25, 20, "set");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)set_max_size_cb);
-          } // Fl_Button* o
-          { Fl_Box* o = new Fl_Box(395, 185, 0, 20);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Box* o
-          o->end();
-        } // Fl_Group* o
-        { // This is a special button that grabs keystrokes directly
-          Shortcut_Button* o = new Shortcut_Button(95, 210, 310, 20, "Shortcut:");
-          o->tooltip("The shortcut key for the widget.");
-          o->box(FL_DOWN_BOX);
-          o->color(FL_BACKGROUND2_COLOR);
-          o->selection_color(FL_BACKGROUND2_COLOR);
-          o->labeltype(FL_NORMAL_LABEL);
-          o->labelfont(1);
-          o->labelsize(11);
-          o->labelcolor(FL_FOREGROUND_COLOR);
-          o->callback((Fl_Callback*)shortcut_in_cb);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          o->when(FL_WHEN_RELEASE);
-        } // Shortcut_Button* o
-        { Fl_Group* o = new Fl_Group(95, 235, 300, 20, "X Class:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 235, 95, 20, ":");
-            o->tooltip("The X resource class.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)xclass_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Light_Button* o = new Fl_Light_Button(195, 235, 60, 20, "Border");
-            o->tooltip("Add a border around the window.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)border_cb);
-          } // Fl_Light_Button* o
-          { Fl_Light_Button* o = new Fl_Light_Button(260, 235, 55, 20, "Modal");
-            o->tooltip("Make the window modal.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)modal_cb);
-          } // Fl_Light_Button* o
-          { Fl_Light_Button* o = new Fl_Light_Button(320, 235, 75, 20, "Nonmodal");
-            o->tooltip("Make the window non-modal.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)non_modal_cb);
-            o->align(Fl_Align(132|FL_ALIGN_INSIDE));
-          } // Fl_Light_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 260, 305, 20, "Attributes:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Light_Button* o = new Fl_Light_Button(95, 260, 60, 20, "Visible");
-            o->tooltip("Show the widget.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)visible_cb);
-          } // Fl_Light_Button* o
-          { Fl_Light_Button* o = new Fl_Light_Button(160, 260, 60, 20, "Active");
-            o->tooltip("Activate the widget.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)active_cb);
-          } // Fl_Light_Button* o
-          { Fl_Light_Button* o = new Fl_Light_Button(225, 260, 75, 20, "Resizable");
-            o->tooltip("Make the widget resizable.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)resizable_cb);
-            o->when(FL_WHEN_CHANGED);
-          } // Fl_Light_Button* o
-          { Fl_Light_Button* o = new Fl_Light_Button(305, 260, 70, 20, "Hotspot");
-            o->tooltip("Center the window under this widget.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)hotspot_cb);
-            o->when(FL_WHEN_CHANGED);
-          } // Fl_Light_Button* o
-          { Fl_Box* o = new Fl_Box(395, 260, 0, 20);
-            o->labelsize(11);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Box* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Input* o = new Fl_Input(95, 285, 310, 20, "Tooltip:");
-          o->tooltip("The tooltip text for the widget.\nUse Ctrl-J for newlines.");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->textsize(11);
-          o->callback((Fl_Callback*)tooltip_cb);
-        } // Fl_Input* o
-        { Fl_Box* o = new Fl_Box(95, 305, 300, 5);
-          o->labelsize(11);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-        Fl_Group::current()->resizable(o);
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(10, 30, 400, 330, "Style");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)propagate_load);
-        o->when(FL_WHEN_NEVER);
-        o->hide();
-        { Fl_Group* o = new Fl_Group(95, 40, 309, 20, "Label Font:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Choice* o = new Fl_Choice(95, 40, 170, 20);
-            o->tooltip("The style of the label text.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)labelfont_cb);
-            Fl_Group::current()->resizable(o);
-            o->menu(fontmenu);
-          } // Fl_Choice* o
-          { Fl_Value_Input* o = new Fl_Value_Input(264, 40, 50, 20);
-            o->tooltip("The size of the label text.");
-            o->labelsize(11);
-            o->maximum(100);
-            o->step(1);
-            o->value(14);
-            o->textsize(11);
-            o->callback((Fl_Callback*)labelsize_cb);
-          } // Fl_Value_Input* o
-          { Fl_Button* o = new Fl_Button(314, 40, 90, 20, "Label Color");
-            o->tooltip("The color of the label text.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)labelcolor_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 65, 309, 20, "Box:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Choice* o = new Fl_Choice(95, 65, 219, 20);
-            o->tooltip("The \"up\" box of the widget.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)box_cb);
-            Fl_Group::current()->resizable(o);
-            o->menu(boxmenu);
-          } // Fl_Choice* o
-          { Fl_Button* o = new Fl_Button(314, 65, 90, 20, "Color");
-            o->tooltip("The background color of the widget.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)color_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 90, 309, 20, "Down Box:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Choice* o = new Fl_Choice(95, 90, 219, 20);
-            o->tooltip("The \"down\" box of the widget.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)down_box_cb);
-            Fl_Group::current()->resizable(o);
-            o->menu(boxmenu);
-          } // Fl_Choice* o
-          { Fl_Button* o = new Fl_Button(314, 90, 90, 20, "Select Color");
-            o->tooltip("The selection color of the widget.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)color2_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 115, 309, 20, "Text Font:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Choice* o = new Fl_Choice(95, 115, 170, 20);
-            o->tooltip("The value text style.");
-            o->box(FL_DOWN_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)textfont_cb);
-            Fl_Group::current()->resizable(o);
-            o->menu(fontmenu);
-          } // Fl_Choice* o
-          { Fl_Value_Input* o = new Fl_Value_Input(264, 115, 50, 20);
-            o->tooltip("The value text size.");
-            o->labelsize(11);
-            o->maximum(100);
-            o->step(1);
-            o->value(14);
-            o->textsize(11);
-            o->callback((Fl_Callback*)textsize_cb);
-          } // Fl_Value_Input* o
-          { Fl_Button* o = new Fl_Button(314, 115, 90, 20, "Text Color");
-            o->tooltip("The value text color.");
-            o->labelsize(11);
-            o->callback((Fl_Callback*)textcolor_cb);
-          } // Fl_Button* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Box* o = new Fl_Box(95, 140, 300, 40);
-          o->labelsize(11);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(10, 30, 400, 330, "C++");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)propagate_load);
-        o->when(FL_WHEN_NEVER);
-        o->hide();
-        { Fl_Group* o = new Fl_Group(95, 40, 310, 20, "Class:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 40, 172, 20);
-            o->tooltip("The widget subclass.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textfont(4);
-            o->textsize(11);
-            o->callback((Fl_Callback*)subclass_cb, (void*)(4));
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Choice* o = new Fl_Choice(265, 40, 140, 20);
-            o->tooltip("The widget subtype.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)subtype_cb);
-          } // Fl_Choice* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 65, 310, 20, "Name:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 65, 235, 20);
-            o->tooltip("The name of the widget.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)name_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20);
-            o->tooltip("Change member access attribute.");
-            o->down_box(FL_BORDER_BOX);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)name_public_member_cb);
-            o->when(FL_WHEN_CHANGED);
-            o->menu(menu_2);
-          } // Fl_Choice* o
-          { Fl_Choice* o = new Fl_Choice(330, 65, 75, 20);
-            o->tooltip("Change widget accessibility.");
-            o->down_box(FL_BORDER_BOX);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)name_public_cb);
-            o->when(FL_WHEN_CHANGED);
-            o->menu(menu_3);
-          } // Fl_Choice* o
-          o->end();
-        } // Fl_Group* o
-        { v_input[0] = new Fl_Input(95, 90, 310, 20, "Extra Code:");
-          v_input[0]->tooltip("Extra initialization code for the widget.");
-          v_input[0]->labelfont(1);
-          v_input[0]->labelsize(11);
-          v_input[0]->textfont(4);
-          v_input[0]->textsize(11);
-          v_input[0]->callback((Fl_Callback*)v_input_cb, (void*)(0));
-        } // Fl_Input* v_input[0]
-        { v_input[1] = new Fl_Input(95, 110, 310, 20);
-          v_input[1]->tooltip("Extra initialization code for the widget.");
-          v_input[1]->labelsize(11);
-          v_input[1]->textfont(4);
-          v_input[1]->textsize(11);
-          v_input[1]->callback((Fl_Callback*)v_input_cb, (void*)(1));
-        } // Fl_Input* v_input[1]
-        { v_input[2] = new Fl_Input(95, 130, 310, 20);
-          v_input[2]->tooltip("Extra initialization code for the widget.");
-          v_input[2]->labelsize(11);
-          v_input[2]->textfont(4);
-          v_input[2]->textsize(11);
-          v_input[2]->callback((Fl_Callback*)v_input_cb, (void*)(2));
-        } // Fl_Input* v_input[2]
-        { v_input[3] = new Fl_Input(95, 150, 310, 20);
-          v_input[3]->tooltip("Extra initialization code for the widget.");
-          v_input[3]->labelsize(11);
-          v_input[3]->textfont(4);
-          v_input[3]->textsize(11);
-          v_input[3]->callback((Fl_Callback*)v_input_cb, (void*)(3));
-        } // Fl_Input* v_input[3]
-        { Fl_Tile* o = new Fl_Tile(95, 175, 310, 130);
-          o->callback((Fl_Callback*)cb_1);
-          { Fl_Group* o = new Fl_Group(95, 175, 310, 48);
-            o->box(FL_FLAT_BOX);
-            { wComment = new Fl_Text_Editor(95, 175, 310, 45, "Comment:");
-              wComment->tooltip("Write a comment that will appear in the source code and in the widget tree ov\
-erview.");
-              wComment->box(FL_DOWN_BOX);
-              wComment->labelfont(1);
-              wComment->labelsize(11);
-              wComment->textfont(6);
-              wComment->textsize(11);
-              wComment->textcolor((Fl_Color)59);
-              wComment->align(Fl_Align(FL_ALIGN_LEFT));
-              wComment->when(FL_WHEN_CHANGED);
-              Fl_Group::current()->resizable(wComment);
-              wComment->buffer(new Fl_Text_Buffer());
-              wComment->callback((Fl_Callback*)comment_cb);
-            } // Fl_Text_Editor* wComment
-            o->end();
-          } // Fl_Group* o
-          { Fl_Group* o = new Fl_Group(95, 223, 310, 82);
-            o->box(FL_FLAT_BOX);
-            { wCallback = new CodeEditor(95, 225, 310, 80, "Callback:");
-              wCallback->tooltip("The callback function or code for the widget. Use the variable name \'o\' to \
-access the Widget pointer and \'v\' to access the user value.");
-              wCallback->box(FL_DOWN_BOX);
-              wCallback->color(FL_BACKGROUND2_COLOR);
-              wCallback->selection_color(FL_SELECTION_COLOR);
-              wCallback->labeltype(FL_NORMAL_LABEL);
-              wCallback->labelfont(1);
-              wCallback->labelsize(11);
-              wCallback->labelcolor(FL_FOREGROUND_COLOR);
-              wCallback->textfont(4);
-              wCallback->textsize(11);
-              wCallback->callback((Fl_Callback*)callback_cb);
-              wCallback->align(Fl_Align(FL_ALIGN_LEFT));
-              wCallback->when(FL_WHEN_RELEASE);
-              Fl_Group::current()->resizable(wCallback);
-            } // CodeEditor* wCallback
-            o->end();
-          } // Fl_Group* o
-          o->end();
-          Fl_Group::current()->resizable(o);
-        } // Fl_Tile* o
-        { Fl_Group* o = new Fl_Group(95, 310, 310, 20, "User Data:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 310, 158, 20);
-            o->tooltip("The user data to pass into the callback code.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textfont(4);
-            o->textsize(11);
-            o->callback((Fl_Callback*)user_data_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Choice* o = new Fl_Choice(300, 310, 105, 20, "When:");
-            o->tooltip("When to call the callback function.");
-            o->box(FL_THIN_UP_BOX);
-            o->down_box(FL_BORDER_BOX);
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textsize(11);
-            o->callback((Fl_Callback*)when_cb);
-            o->when(FL_WHEN_CHANGED);
-            o->menu(whenmenu);
-          } // Fl_Choice* o
-          o->end();
-        } // Fl_Group* o
-        { Fl_Group* o = new Fl_Group(95, 335, 310, 20, "Type:");
-          o->labelfont(1);
-          o->labelsize(11);
-          o->callback((Fl_Callback*)propagate_load);
-          o->align(Fl_Align(FL_ALIGN_LEFT));
-          { Fl_Input* o = new Fl_Input(95, 335, 158, 20);
-            o->tooltip("The type of the user data.");
-            o->labelfont(1);
-            o->labelsize(11);
-            o->textfont(4);
-            o->textsize(11);
-            o->callback((Fl_Callback*)user_data_type_cb);
-            Fl_Group::current()->resizable(o);
-          } // Fl_Input* o
-          { Fl_Light_Button* o = new Fl_Light_Button(300, 335, 105, 20, "No Change");
-            o->tooltip("Call the callback even if the value has not changed.");
-            o->selection_color((Fl_Color)1);
-            o->labelsize(11);
-            o->callback((Fl_Callback*)when_button_cb);
-          } // Fl_Light_Button* o
-          o->end();
-        } // Fl_Group* o
-        o->end();
-      } // Fl_Group* o
-      o->end();
-      Fl_Group::current()->resizable(o);
-    } // Fl_Tabs* o
-    { Fl_Group* o = new Fl_Group(9, 370, 400, 20);
-      o->labelsize(11);
-      { Fl_Box* o = new Fl_Box(9, 370, 20, 20);
-        o->labelsize(11);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      { Fl_Button* o = new Fl_Button(240, 370, 99, 20, "Hide &Overlays");
-        o->tooltip("Hide the widget overlay box.");
-        o->labelsize(11);
-        o->labelcolor((Fl_Color)1);
-        o->callback((Fl_Callback*)overlay_cb);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(66, 370, 80, 20, "Revert");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)revert_cb);
-        o->hide();
-      } // Fl_Button* o
-      { Fl_Return_Button* o = new Fl_Return_Button(344, 370, 64, 20, "Close");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)ok_cb);
-      } // Fl_Return_Button* o
-      { Fl_Button* o = new Fl_Button(339, 370, 70, 20, "Cancel");
-        o->labelsize(11);
-        o->callback((Fl_Callback*)cancel_cb);
-        o->hide();
-      } // Fl_Button* o
-      { wLiveMode = new Fl_Button(151, 370, 84, 20, "Live &Mode");
-        wLiveMode->tooltip("Create a live duplicate of the selected widgets to test resizing and menu beh\
-avior.");
-        wLiveMode->type(1);
-        wLiveMode->labelsize(11);
-        wLiveMode->callback((Fl_Callback*)live_mode_cb);
-      } // Fl_Button* wLiveMode
-      o->end();
-    } // Fl_Group* o
-    o->size_range(o->w(), o->h());
-    o->size_range(420, 400);
-    o->end();
-  } // Fl_Double_Window* o
-  return w;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/fluid/widget_panel.fl
+++ /dev/null
@@ -1,707 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// Widget panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-} {in_source in_header
-}
-
-decl {extern void comment_cb(Fl_Text_Editor*, void*);} {private global
-}
-
-Function {make_widget_panel()} {
-  comment {Create a panel that can be used with all known widgets} open
-} {
-  Fl_Window {} {
-    comment {Use a Double Window to avoid flickering.} open
-    xywh {468 187 420 400} type Double labelsize 11 align 80 hide resizable hotspot
-    code0 {o->size_range(o->w(), o->h());} size_range {420 400 0 0}
-  } {
-    Fl_Tabs {} {
-      callback {propagate_load((Fl_Group *)o,v);} open
-      xywh {10 10 400 350} selection_color 12 labelsize 11 labelcolor 7 when 0 resizable
-    } {
-      Fl_Group {} {
-        label GUI
-        callback propagate_load open
-        xywh {10 30 400 330} labelsize 11 when 0 resizable
-      } {
-        Fl_Group {} {
-          label {Label:}
-          callback propagate_load open
-          xywh {95 40 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback label_cb
-            tooltip {The label text for the widget.
-Use Ctrl-J for newlines.} xywh {95 40 190 20} labelfont 1 labelsize 11 when 1 textsize 11 resizable
-          }
-          Fl_Choice {} {
-            callback labeltype_cb open
-            tooltip {The label style for the widget.} xywh {284 40 120 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11
-            code0 {extern Fl_Menu_Item labeltypemenu[];}
-            code1 {o->menu(labeltypemenu);}
-          } {}
-        }
-        Fl_Group {} {
-          label {Image:}
-          callback propagate_load
-          xywh {95 65 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback image_cb
-            tooltip {The active image for the widget.} xywh {95 65 240 20} labelfont 1 labelsize 11 textsize 11 resizable
-          }
-          Fl_Button {} {
-            label {Browse...}
-            callback image_browse_cb
-            tooltip {Click to choose the active image.} xywh {334 65 70 20} labelsize 11
-          }
-        }
-        Fl_Group {} {
-          label {Inactive:}
-          callback propagate_load
-          xywh {95 90 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback inactive_cb
-            tooltip {The inactive image for the widget.} xywh {95 90 240 20} labelfont 1 labelsize 11 textsize 11 resizable
-          }
-          Fl_Button {} {
-            label {Browse...}
-            callback inactive_browse_cb
-            tooltip {Click to choose the inactive image.} xywh {334 90 70 20} labelsize 11
-          }
-        }
-        Fl_Group {} {
-          label {Alignment:}
-          callback propagate_load open
-          xywh {95 115 310 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Button {} {
-            label Clip
-            user_data {(fl_intptr_t)FL_ALIGN_CLIP}
-            callback align_cb
-            tooltip {Clip the label to the inside of the widget.} xywh {95 115 30 20} type Toggle selection_color 8 labelsize 11 align 16
-          }
-          Fl_Button {} {
-            label Wrap
-            user_data {(fl_intptr_t)FL_ALIGN_WRAP}
-            callback align_cb
-            tooltip {Wrap the label text.} xywh {130 115 38 20} type Toggle selection_color 8 labelsize 11
-          }
-          Fl_Button {} {
-            label {@-1<-}
-            user_data {(fl_intptr_t)FL_ALIGN_LEFT}
-            callback align_cb
-            tooltip {Left-align the label.} xywh {278 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
-          }
-          Fl_Button {} {
-            label {@-1->}
-            user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
-            callback align_cb
-            tooltip {Right-align the label.} xywh {303 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
-          }
-          Fl_Button {} {
-            label {@-18}
-            user_data {(fl_intptr_t)FL_ALIGN_TOP}
-            callback align_cb
-            tooltip {Top-align the label.} xywh {328 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
-          }
-          Fl_Button {} {
-            label {@-12}
-            user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
-            callback align_cb
-            tooltip {Bottom-align the label.} xywh {353 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8 hide
-          }
-          Fl_Choice {} {
-            callback align_text_image_cb open
-            xywh {172 115 110 20} down_box BORDER_BOX labelsize 11 textsize 11
-          } {
-            MenuItem {} {
-              label {   Image Alignment   }
-              user_data 0xFFFFFFFF
-              xywh {145 145 100 20} labelfont 2 labelsize 11 deactivate
-            }
-            MenuItem {} {
-              label {image over text}
-              user_data {(fl_intptr_t)FL_ALIGN_IMAGE_OVER_TEXT} selected
-              xywh {25 25 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {text over image}
-              user_data {(fl_intptr_t)FL_ALIGN_TEXT_OVER_IMAGE}
-              xywh {15 15 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {text next to image}
-              user_data {(fl_intptr_t)FL_ALIGN_TEXT_NEXT_TO_IMAGE}
-              xywh {35 35 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {image next to text}
-              user_data {(fl_intptr_t)FL_ALIGN_IMAGE_NEXT_TO_TEXT}
-              xywh {45 45 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {image is backdrop}
-              user_data {(fl_intptr_t)FL_ALIGN_IMAGE_BACKDROP}
-              xywh {55 55 100 20} labelsize 11
-            }
-          }
-          Fl_Choice {} {
-            callback align_position_cb open
-            xywh {288 115 85 20} down_box BORDER_BOX labelsize 11 textsize 11
-          } {
-            MenuItem {} {
-              label {   Inside && Outside   }
-              user_data 0xFFFFFFFF
-              xywh {135 135 100 20} labelfont 2 labelsize 11 deactivate
-            }
-            MenuItem {} {
-              label {top left}
-              user_data {(fl_intptr_t)FL_ALIGN_TOP_LEFT}
-              xywh {45 45 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label top
-              user_data {(fl_intptr_t)FL_ALIGN_TOP}
-              xywh {55 55 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {top right}
-              user_data {(fl_intptr_t)FL_ALIGN_TOP_RIGHT}
-              xywh {65 65 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label left
-              user_data {(fl_intptr_t)FL_ALIGN_LEFT}
-              xywh {75 75 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label center
-              user_data {(fl_intptr_t)FL_ALIGN_CENTER}
-              xywh {35 35 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label right
-              user_data {(fl_intptr_t)FL_ALIGN_RIGHT}
-              xywh {85 85 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {bottom left}
-              user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_LEFT}
-              xywh {95 95 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label bottom
-              user_data {(fl_intptr_t)FL_ALIGN_BOTTOM}
-              xywh {105 105 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {bottom right}
-              user_data {(fl_intptr_t)FL_ALIGN_BOTTOM_RIGHT}
-              xywh {115 115 100 20} labelsize 11 divider
-            }
-            MenuItem {} {
-              label {   Outside Alignment   }
-              user_data 0xFFFFFFFF
-              xywh {125 125 100 20} labelfont 2 labelsize 11 deactivate
-            }
-            MenuItem {} {
-              label {left top}
-              user_data {(fl_intptr_t)FL_ALIGN_LEFT_TOP}
-              xywh {135 135 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {right top}
-              user_data {(fl_intptr_t)FL_ALIGN_RIGHT_TOP}
-              xywh {145 145 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {left bottom}
-              user_data {(fl_intptr_t)FL_ALIGN_LEFT_BOTTOM}
-              xywh {155 155 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label {right bottom}
-              user_data {(fl_intptr_t)FL_ALIGN_RIGHT_BOTTOM}
-              xywh {45 45 100 20} labelsize 11
-            }
-          }
-          Fl_Button {} {
-            label {@-3square}
-            user_data {(fl_intptr_t)FL_ALIGN_INSIDE}
-            callback align_cb
-            tooltip {Show the label inside the widget.} xywh {378 115 20 20} type Toggle selection_color 8 labelsize 11 labelcolor 8
-          }
-          Fl_Box {} {
-            xywh {404 115 0 20} labelsize 11 resizable
-          }
-        }
-        Fl_Group {} {
-          label {Position:}
-          callback propagate_load
-          xywh {95 150 314 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Value_Input widget_x_input {
-            label {X:}
-            callback x_cb
-            tooltip {The X position of the widget.} xywh {95 150 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Value_Input widget_y_input {
-            label {Y:}
-            callback y_cb
-            tooltip {The Y position of the widget.} xywh {155 150 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Value_Input widget_w_input {
-            label {Width:}
-            callback w_cb
-            tooltip {The width of the widget.} xywh {215 150 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Value_Input widget_h_input {
-            label {Height:}
-            callback h_cb
-            tooltip {The height of the widget.} xywh {275 150 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Light_Button {} {
-            label Relative
-            callback wc_relative_cb
-            tooltip {If set, widgets inside a widget class of type Fl_Group are repositioned relative to the origin at construction time} xywh {335 150 65 20} labelsize 11
-          }
-          Fl_Box {} {
-            xywh {398 150 1 20} resizable
-          }
-        }
-        Fl_Group {} {
-          label {Values:}
-          callback propagate_load
-          xywh {95 185 300 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Value_Input {} {
-            label {Size:}
-            callback slider_size_cb
-            tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 step 0.010101 textsize 11
-          }
-          Fl_Value_Input {} {
-            label {Minimum:}
-            callback min_cb
-            tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 textsize 11
-          }
-          Fl_Value_Input {} {
-            label {Maximum:}
-            callback max_cb
-            tooltip {The maximum value of the widget.} xywh {215 185 55 20} labelsize 11 align 5 value 1 textsize 11
-          }
-          Fl_Value_Input {} {
-            label {Step:}
-            callback step_cb
-            tooltip {The resolution of the widget value.} xywh {275 185 55 20} labelsize 11 align 5 textsize 11
-          }
-          Fl_Value_Input {} {
-            label {Value:}
-            callback value_cb
-            tooltip {The current widget value.} xywh {335 185 55 20} labelsize 11 align 5 textsize 11
-          }
-          Fl_Box {} {
-            xywh {395 185 0 20} resizable
-          }
-        }
-        Fl_Group {} {
-          label {Size Range:}
-          callback propagate_load
-          xywh {95 185 300 20} labelfont 1 labelsize 11 align 4 hide
-        } {
-          Fl_Value_Input {} {
-            label {Minimum Size:}
-            callback min_w_cb
-            tooltip {The size of the slider.} xywh {95 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Value_Input {} {
-            callback min_h_cb
-            tooltip {The minimum value of the widget.} xywh {155 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Button {} {
-            label set
-            callback set_min_size_cb
-            xywh {215 185 25 20} labelsize 11
-          }
-          Fl_Value_Input {} {
-            label {Maximum Size:}
-            callback max_w_cb
-            tooltip {The maximum value of the widget.} xywh {245 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Value_Input {} {
-            callback max_h_cb
-            tooltip {The resolution of the widget value.} xywh {305 185 55 20} labelsize 11 align 5 maximum 2048 step 1 textsize 11
-          }
-          Fl_Button {} {
-            label set
-            callback set_max_size_cb
-            xywh {365 185 25 20} labelsize 11
-          }
-          Fl_Box {} {
-            xywh {395 185 0 20} resizable
-          }
-        }
-        Fl_Button {} {
-          label {Shortcut:}
-          callback shortcut_in_cb
-          comment {This is a special button that grabs keystrokes directly}
-          tooltip {The shortcut key for the widget.} xywh {95 210 310 20} box DOWN_BOX color 7 selection_color 7 labelfont 1 labelsize 11 align 4
-          code0 {\#include "Shortcut_Button.h"}
-          class Shortcut_Button
-        }
-        Fl_Group {} {
-          label {X Class:}
-          callback propagate_load
-          xywh {95 235 300 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            label {:}
-            callback xclass_cb
-            tooltip {The X resource class.} xywh {95 235 95 20} labelfont 1 labelsize 11 textsize 11 resizable
-          }
-          Fl_Light_Button {} {
-            label Border
-            callback border_cb
-            tooltip {Add a border around the window.} xywh {195 235 60 20} selection_color 1 labelsize 11
-          }
-          Fl_Light_Button {} {
-            label Modal
-            callback modal_cb
-            tooltip {Make the window modal.} xywh {260 235 55 20} selection_color 1 labelsize 11
-          }
-          Fl_Light_Button {} {
-            label Nonmodal
-            callback non_modal_cb
-            tooltip {Make the window non-modal.} xywh {320 235 75 20} selection_color 1 labelsize 11 align 148
-          }
-        }
-        Fl_Group {} {
-          label {Attributes:}
-          callback propagate_load
-          xywh {95 260 305 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Light_Button {} {
-            label Visible
-            callback visible_cb
-            tooltip {Show the widget.} xywh {95 260 60 20} selection_color 1 labelsize 11
-          }
-          Fl_Light_Button {} {
-            label Active
-            callback active_cb
-            tooltip {Activate the widget.} xywh {160 260 60 20} selection_color 1 labelsize 11
-          }
-          Fl_Light_Button {} {
-            label Resizable
-            callback resizable_cb
-            tooltip {Make the widget resizable.} xywh {225 260 75 20} selection_color 1 labelsize 11 when 1
-          }
-          Fl_Light_Button {} {
-            label Hotspot
-            callback hotspot_cb
-            tooltip {Center the window under this widget.} xywh {305 260 70 20} selection_color 1 labelsize 11 when 1
-          }
-          Fl_Box {} {
-            xywh {395 260 0 20} labelsize 11 resizable
-          }
-        }
-        Fl_Input {} {
-          label {Tooltip:}
-          callback tooltip_cb
-          tooltip {The tooltip text for the widget.
-Use Ctrl-J for newlines.} xywh {95 285 310 20} labelfont 1 labelsize 11 textsize 11
-        }
-        Fl_Box {} {
-          xywh {95 305 300 5} labelsize 11 resizable
-        }
-      }
-      Fl_Group {} {
-        label Style
-        callback propagate_load
-        xywh {10 30 400 330} labelsize 11 when 0 hide
-      } {
-        Fl_Group {} {
-          label {Label Font:}
-          callback propagate_load
-          xywh {95 40 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Choice {} {
-            callback labelfont_cb open
-            tooltip {The style of the label text.} xywh {95 40 170 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
-            code0 {extern Fl_Menu_Item fontmenu[];}
-            code1 {o->menu(fontmenu);}
-          } {}
-          Fl_Value_Input {} {
-            callback labelsize_cb
-            tooltip {The size of the label text.} xywh {264 40 50 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
-          }
-          Fl_Button {} {
-            label {Label Color}
-            callback labelcolor_cb
-            tooltip {The color of the label text.} xywh {314 40 90 20} labelsize 11
-          }
-        }
-        Fl_Group {} {
-          label {Box:}
-          callback propagate_load
-          xywh {95 65 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Choice {} {
-            callback box_cb open
-            tooltip {The "up" box of the widget.} xywh {95 65 219 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
-            code0 {extern Fl_Menu_Item boxmenu[];}
-            code1 {o->menu(boxmenu);}
-          } {}
-          Fl_Button {} {
-            label Color
-            callback color_cb
-            tooltip {The background color of the widget.} xywh {314 65 90 20} labelsize 11
-          }
-        }
-        Fl_Group {} {
-          label {Down Box:}
-          callback propagate_load
-          xywh {95 90 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Choice {} {
-            callback down_box_cb open
-            tooltip {The "down" box of the widget.} xywh {95 90 219 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
-            code0 {extern Fl_Menu_Item boxmenu[];}
-            code1 {o->menu(boxmenu);}
-          } {}
-          Fl_Button {} {
-            label {Select Color}
-            callback color2_cb
-            tooltip {The selection color of the widget.} xywh {314 90 90 20} labelsize 11
-          }
-        }
-        Fl_Group {} {
-          label {Text Font:}
-          callback propagate_load
-          xywh {95 115 309 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Choice {} {
-            callback textfont_cb open
-            tooltip {The value text style.} xywh {95 115 170 20} box DOWN_BOX down_box BORDER_BOX labelfont 1 labelsize 11 textsize 11 resizable
-            code0 {extern Fl_Menu_Item fontmenu[];}
-            code1 {o->menu(fontmenu);}
-          } {}
-          Fl_Value_Input {} {
-            callback textsize_cb
-            tooltip {The value text size.} xywh {264 115 50 20} labelsize 11 maximum 100 step 1 value 14 textsize 11
-          }
-          Fl_Button {} {
-            label {Text Color}
-            callback textcolor_cb
-            tooltip {The value text color.} xywh {314 115 90 20} labelsize 11
-          }
-        }
-        Fl_Box {} {
-          xywh {95 140 300 40} labelsize 11 resizable
-        }
-      }
-      Fl_Group {} {
-        label {C++}
-        callback propagate_load open
-        xywh {10 30 400 330} labelsize 11 when 0 hide
-      } {
-        Fl_Group {} {
-          label {Class:}
-          callback propagate_load
-          xywh {95 40 310 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            user_data 4
-            callback subclass_cb
-            tooltip {The widget subclass.} xywh {95 40 172 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
-          }
-          Fl_Choice {} {
-            callback subtype_cb open
-            tooltip {The widget subtype.} xywh {265 40 140 20} box THIN_UP_BOX down_box BORDER_BOX labelsize 11 textsize 11
-          } {}
-        }
-        Fl_Group {} {
-          label {Name:}
-          callback propagate_load open
-          xywh {95 65 310 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback name_cb
-            tooltip {The name of the widget.} xywh {95 65 235 20} labelfont 1 labelsize 11 textsize 11 resizable
-          }
-          Fl_Choice {} {
-            callback name_public_member_cb open
-            tooltip {Change member access attribute.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
-          } {
-            MenuItem {} {
-              label private
-              user_data 0 user_data_type long
-              xywh {0 0 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label public
-              user_data 1 user_data_type long
-              xywh {0 0 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label protected
-              user_data 2 user_data_type long
-              xywh {0 0 100 20} labelsize 11
-            }
-          }
-          Fl_Choice {} {
-            callback name_public_cb open
-            tooltip {Change widget accessibility.} xywh {330 65 75 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11
-          } {
-            MenuItem {} {
-              label local
-              user_data 0 user_data_type long
-              xywh {10 10 100 20} labelsize 11
-            }
-            MenuItem {} {
-              label global
-              user_data 1 user_data_type long
-              xywh {10 10 100 20} labelsize 11
-            }
-          }
-        }
-        Fl_Input {v_input[0]} {
-          label {Extra Code:}
-          user_data 0
-          callback v_input_cb
-          tooltip {Extra initialization code for the widget.} xywh {95 90 310 20} labelfont 1 labelsize 11 textfont 4 textsize 11
-        }
-        Fl_Input {v_input[1]} {
-          user_data 1
-          callback v_input_cb
-          tooltip {Extra initialization code for the widget.} xywh {95 110 310 20} labelsize 11 textfont 4 textsize 11
-        }
-        Fl_Input {v_input[2]} {
-          user_data 2
-          callback v_input_cb
-          tooltip {Extra initialization code for the widget.} xywh {95 130 310 20} labelsize 11 textfont 4 textsize 11
-        }
-        Fl_Input {v_input[3]} {
-          user_data 3
-          callback v_input_cb
-          tooltip {Extra initialization code for the widget.} xywh {95 150 310 20} labelsize 11 textfont 4 textsize 11
-        }
-        Fl_Tile {} {
-          callback {wComment->do_callback(wComment, v);
-wCallback->do_callback(wCallback, v);} open
-          xywh {95 175 310 130} resizable
-        } {
-          Fl_Group {} {open
-            xywh {95 175 310 48} box FLAT_BOX
-          } {
-            Fl_Text_Editor wComment {
-              label {Comment:}
-              tooltip {Write a comment that will appear in the source code and in the widget tree overview.} xywh {95 175 310 45} box DOWN_BOX labelfont 1 labelsize 11 align 4 when 1 textfont 6 textsize 11 textcolor 59 resizable
-              code0 {wComment->buffer(new Fl_Text_Buffer());}
-              code1 {wComment->callback((Fl_Callback*)comment_cb);}
-            }
-          }
-          Fl_Group {} {open
-            xywh {95 223 310 82} box FLAT_BOX
-          } {
-            Fl_Text_Editor wCallback {
-              label {Callback:}
-              callback callback_cb
-              tooltip {The callback function or code for the widget. Use the variable name 'o' to access the Widget pointer and 'v' to access the user value.} xywh {95 225 310 80} box DOWN_BOX labelfont 1 labelsize 11 align 4 textfont 4 textsize 11 resizable
-              code0 {\#include "CodeEditor.h"}
-              class CodeEditor
-            }
-          }
-        }
-        Fl_Group {} {
-          label {User Data:}
-          callback propagate_load open
-          xywh {95 310 310 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback user_data_cb
-            tooltip {The user data to pass into the callback code.} xywh {95 310 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
-          }
-          Fl_Choice {} {
-            label {When:}
-            callback when_cb open
-            tooltip {When to call the callback function.} xywh {300 310 105 20} box THIN_UP_BOX down_box BORDER_BOX labelfont 1 labelsize 11 when 1 textsize 11
-            code0 {extern Fl_Menu_Item whenmenu[];}
-            code1 {o->menu(whenmenu);}
-          } {}
-        }
-        Fl_Group {} {
-          label {Type:}
-          callback propagate_load open
-          xywh {95 335 310 20} labelfont 1 labelsize 11 align 4
-        } {
-          Fl_Input {} {
-            callback user_data_type_cb
-            tooltip {The type of the user data.} xywh {95 335 158 20} labelfont 1 labelsize 11 textfont 4 textsize 11 resizable
-          }
-          Fl_Light_Button {} {
-            label {No Change}
-            callback when_button_cb
-            tooltip {Call the callback even if the value has not changed.} xywh {300 335 105 20} selection_color 1 labelsize 11
-          }
-        }
-      }
-    }
-    Fl_Group {} {open
-      xywh {9 370 400 20} labelsize 11
-    } {
-      Fl_Box {} {
-        xywh {9 370 20 20} labelsize 11 resizable
-      }
-      Fl_Button {} {
-        label {Hide &Overlays}
-        callback overlay_cb
-        tooltip {Hide the widget overlay box.} xywh {240 370 99 20} labelsize 11 labelcolor 1
-      }
-      Fl_Button {} {
-        label Revert
-        callback revert_cb
-        xywh {66 370 80 20} labelsize 11 hide
-      }
-      Fl_Return_Button {} {
-        label Close
-        callback ok_cb
-        xywh {344 370 64 20} labelsize 11
-      }
-      Fl_Button {} {
-        label Cancel
-        callback cancel_cb
-        xywh {339 370 70 20} labelsize 11 hide
-      }
-      Fl_Button wLiveMode {
-        label {Live &Mode}
-        callback live_mode_cb
-        tooltip {Create a live duplicate of the selected widgets to test resizing and menu behavior.} xywh {151 370 84 20} type Toggle labelsize 11
-      }
-    }
-  }
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/fluid/widget_panel.h
+++ /dev/null
@@ -1,121 +1,0 @@
-//
-// "$Id$"
-//
-// Widget panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#ifndef widget_panel_h
-#define widget_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-extern void propagate_load(Fl_Group*, void*);
-#include <FL/Fl_Input.H>
-extern void label_cb(Fl_Input*, void*);
-#include <FL/Fl_Choice.H>
-extern Fl_Menu_Item labeltypemenu[];
-extern void labeltype_cb(Fl_Choice*, void*);
-extern void image_cb(Fl_Input*, void*);
-#include <FL/Fl_Button.H>
-extern void image_browse_cb(Fl_Button*, void*);
-extern void inactive_cb(Fl_Input*, void*);
-extern void inactive_browse_cb(Fl_Button*, void*);
-extern void align_cb(Fl_Button*, void*);
-extern void align_text_image_cb(Fl_Choice*, void*);
-extern void align_position_cb(Fl_Choice*, void*);
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Value_Input.H>
-extern void x_cb(Fl_Value_Input*, void*);
-extern Fl_Value_Input *widget_x_input;
-extern void y_cb(Fl_Value_Input*, void*);
-extern Fl_Value_Input *widget_y_input;
-extern void w_cb(Fl_Value_Input*, void*);
-extern Fl_Value_Input *widget_w_input;
-extern void h_cb(Fl_Value_Input*, void*);
-extern Fl_Value_Input *widget_h_input;
-#include <FL/Fl_Light_Button.H>
-extern void wc_relative_cb(Fl_Light_Button*, void*);
-extern void slider_size_cb(Fl_Value_Input*, void*);
-extern void min_cb(Fl_Value_Input*, void*);
-extern void max_cb(Fl_Value_Input*, void*);
-extern void step_cb(Fl_Value_Input*, void*);
-extern void value_cb(Fl_Value_Input*, void*);
-extern void min_w_cb(Fl_Value_Input*, void*);
-extern void min_h_cb(Fl_Value_Input*, void*);
-extern void set_min_size_cb(Fl_Button*, void*);
-extern void max_w_cb(Fl_Value_Input*, void*);
-extern void max_h_cb(Fl_Value_Input*, void*);
-extern void set_max_size_cb(Fl_Button*, void*);
-#include "Shortcut_Button.h"
-extern void shortcut_in_cb(Shortcut_Button*, void*);
-extern void xclass_cb(Fl_Input*, void*);
-extern void border_cb(Fl_Light_Button*, void*);
-extern void modal_cb(Fl_Light_Button*, void*);
-extern void non_modal_cb(Fl_Light_Button*, void*);
-extern void visible_cb(Fl_Light_Button*, void*);
-extern void active_cb(Fl_Light_Button*, void*);
-extern void resizable_cb(Fl_Light_Button*, void*);
-extern void hotspot_cb(Fl_Light_Button*, void*);
-extern void tooltip_cb(Fl_Input*, void*);
-extern Fl_Menu_Item fontmenu[];
-extern void labelfont_cb(Fl_Choice*, void*);
-extern void labelsize_cb(Fl_Value_Input*, void*);
-extern void labelcolor_cb(Fl_Button*, void*);
-extern Fl_Menu_Item boxmenu[];
-extern void box_cb(Fl_Choice*, void*);
-extern void color_cb(Fl_Button*, void*);
-extern void down_box_cb(Fl_Choice*, void*);
-extern void color2_cb(Fl_Button*, void*);
-extern void textfont_cb(Fl_Choice*, void*);
-extern void textsize_cb(Fl_Value_Input*, void*);
-extern void textcolor_cb(Fl_Button*, void*);
-extern void subclass_cb(Fl_Input*, void*);
-extern void subtype_cb(Fl_Choice*, void*);
-extern void name_cb(Fl_Input*, void*);
-extern void name_public_member_cb(Fl_Choice*, void*);
-extern void name_public_cb(Fl_Choice*, void*);
-extern void v_input_cb(Fl_Input*, void*);
-extern Fl_Input *v_input[4];
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Text_Editor.H>
-extern Fl_Text_Editor *wComment;
-#include "CodeEditor.h"
-extern void callback_cb(CodeEditor*, void*);
-extern CodeEditor *wCallback;
-extern void user_data_cb(Fl_Input*, void*);
-extern Fl_Menu_Item whenmenu[];
-extern void when_cb(Fl_Choice*, void*);
-extern void user_data_type_cb(Fl_Input*, void*);
-extern void when_button_cb(Fl_Light_Button*, void*);
-extern void overlay_cb(Fl_Button*, void*);
-extern void revert_cb(Fl_Button*, void*);
-#include <FL/Fl_Return_Button.H>
-extern void ok_cb(Fl_Return_Button*, void*);
-extern void cancel_cb(Fl_Button*, void*);
-extern void live_mode_cb(Fl_Button*, void*);
-extern Fl_Button *wLiveMode;
-Fl_Double_Window* make_widget_panel();
-extern Fl_Menu_Item menu_[];
-extern Fl_Menu_Item menu_1[];
-extern Fl_Menu_Item menu_2[];
-extern Fl_Menu_Item menu_3[];
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/forms.h
+++ /dev/null
@@ -1,3 +1,0 @@
-// this file allows some forms programs to be compiled with no change.
-// put it in your include path.
-#include <FL/forms.H>
--- a/DoConfig/fltk/html/fltk.css
+++ /dev/null
@@ -1,156 +1,0 @@
-BODY {
-  color: #181818;
-  background-color: #bbbbee;
-  font-family: sans-serif;
-}
-
-P, H1, H2, H3, H4, H5, H6 {
-  font-family: sans-serif;
-}
-
-SUP, SUB {
-  font-size: 50%;
-}
-
-A:link {
-  text-decoration: none;
-  font-weight: bold;
-  color: #cc2020;
-}
-
-A:visited {
-  text-decoration: none;
-  font-weight: bold;
-  color: #991010;
-}
-
-A:link:hover {
-  text-decoration: underline;
-  color: #0000ff;
-  font-weight: bold;
-}
-
-A.sel, TR.sel {
-  background-color: #dddddd;
-}
-
-TR.sel TD {
-  padding: 4;
-}
-
-A.unsel {
-  background-color: #aaaadd;
-  color: #000000;
-}
-
-A.title {
-  color: #990000;
-}
-
-A.title:hover {
-  color: #0000cc;
-}
-
-INPUT[TYPE="TEXT"], TEXTAREA {
-  font-family: monospace;
-}
-
-TR.header, TR.header TH, TH.header {
-  background-color: #cccccc;
-}
-
-TR.page, TD.page {
-  background-color: #ccccff;
-}
-
-TR.data0, TR.data0 TD, TD.data0 {
-  background-color: #aaaadd;
-  padding: 2;
-}
-
-TR.data1, TR.data1 TD, TD.data1 {
-  background-color: #9999cc;
-  padding: 2;
-}
-
-TR.header-red, TR.header-red TH, TH.header-red {
-  background-color: #ddaaaa;
-}
-
-TR.data0-red, TR.data0-red TD, TD.data0-red {
-  background-color: #dd7777;
-  padding: 2;
-}
-
-TR.data1-red, TR.data1-red TD, TD.data1-red {
-  background-color: #dd6666;
-  padding: 2;
-}
-
-DL {
-  margin-left: 2em;
-}
-
-PRE.command {
-  margin-left: 2em;
-}
-
-LI {
-  list-style-image: none;
-}
-
-LI.C {
-  list-style-image: url(images/wiki-category.gif);
-}
-
-LI.F {
-  list-style-image: url(images/wiki-faq.gif);
-}
-
-LI.H {
-  list-style-image: url(images/wiki-howto.gif);
-}
-
-LI.L {
-  list-style-image: url(images/wiki-listing.gif);
-}
-
-LI.N {
-  list-style-image: url(images/wiki-news.gif);
-}
-
-.search {
-  background-color: #996633;
-  color: #ddddaa;
-}
-
-.valid {
-}
-
-.invalid {
-  color: red;
-}
-
-.new {
-  color: #880000;
-}
-
-table.simple-table
-{
-  border:2px solid black;
-  border-collapse:collapse;
-}
-
-table.simple-table th
-{
-  border:2px solid black;
-  padding: 3px;
-}
-
-table.simple-table td 
-{
-  border:2px solid black;
-  padding: 3px;
-}
-
-
binary files a/DoConfig/fltk/html/hdr-top-right.gif /dev/null differ
--- a/DoConfig/fltk/ide/README.IDE
+++ /dev/null
@@ -1,82 +1,0 @@
--------------------------------------------
-   HOW TO USE THE FLTK IDE ENVIRONMENTS
--------------------------------------------
-
-As for today, FLTK 1.3 officially supports
-the following integrated environments (1):
-
-------------------------------------------------------------------------
-distrib subdir 	|   supported products
-------------------------------------------------------------------------
-ide/VisualC6	|   Microsoft Visual C++ 6 and 2005 (2)
-ide/VisualC2008	|   Microsoft Visual C++ 2008
-ide/VisualC2010	|   Microsoft Visual C++ 2010 and later (3)
-ide/Xcode4 	|   Apple Xcode 3.x and up (see ../README.OSX.txt)
-
-Notes :
--------
-(1) For *nix platforms based on the autoconf/configure/make toolchain,
-    simply run autoconf, then the configure script on the root dir.
-    Read the ./README file for more info.
-(2) When first using the project file (ide/VisualC6/fltk.dsw) with
-    VC++ 2005, you will be asked to convert the project to the newer
-    format.
-(3) When first using the project file (ide/VisualC2010/fltk.sln) with
-    a later version of Visual C++ you may be asked to convert the project
-    to the newer format.
-
-
-Further notes about Microsoft IDE project files (Dec. 2010, Nov. 2016):
-------------------------------------------------------------------------
-
-The FLTK team limits support to the last two releases of any major IDE.
-For Visual Studio, this is currently VisualC 2008 and VisualC 2010.
-Earlier versions of Visual Studio can import the VisualC6 Project file
-to generate a working Solution.
-
-VisualC2008 and VisualC2010 Solutions were generated with the free
-Visual Studio Express edition of the corresponding version.
-
-Update (FLTK 1.3.4, Nov. 2016): The VisualC2010 project files are known
-to work well with the free version of Visual C++ 2015 Community.
-
-
-Further notes about Xcode IDE project files (March 2015):
-------------------------------------------------------------------------
-
-The FLTK Xcode project, FLTK.xcodeproj, is usable with versions 3 and
-upward of Xcode (even if it's in a directory called Xcode4 for
-historical reason). The Xcode developer environment is currently
-available at no cost from the App store.
-
-
-Other IDE's and Platforms
-------------------------------------------------------------------------
-
-Code::Blocks supports FLTK project natively. Please compile and install
-FLTK using the Makefile system. Once installed, new FLTK projects
-can be generated using the Code::Blocks IDE.
-
-Other IDE's are not supported by the FLTK team. See below for changes
-in the next release (FLTK 1.4.0) and later versions.
-
-
-Using CMake to generate IDE project files (FLTK 1.3.4 and higher)
-------------------------------------------------------------------------
-
-Other IDE files can likely be created using CMake and the provided
-CMake files. However, as of Nov 2016 (FLTK 1.3.4) this is not yet fully
-supported. The FLTK team can't guarantee the usability of any generated
-IDE files.
-
-
-Future FLTK versions (1.4.0 and later)
-------------------------------------------------------------------------
-
-All bundled IDE project files will be dropped in FLTK 1.4.0 in favor of
-better CMake support.
-
-The FLTK team will officially support generation of selected IDE projects,
-particularly Visual C++ and Xcode. Older version support of these IDE
-projects will be limited to the versions that are supported by and can be
-generated with CMake.
--- a/DoConfig/fltk/ide/VisualC2008/CubeView.vcproj
+++ /dev/null
@@ -1,566 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="CubeView"
-	ProjectGUID="{E30BB28D-DFA0-479C-B670-8CD872224B38}"
-	RootNamespace="CubeView"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\CubeView__0"
-			IntermediateDirectory=".\CubeView__0"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\CubeView__0/CubeView.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\CubeView__0/CubeView.pch"
-				AssemblerListingLocation=".\CubeView__0/"
-				ObjectFile=".\CubeView__0/"
-				ProgramDataBaseFileName=".\CubeView__0/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib"
-				OutputFile="../../test/CubeViewd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\CubeView__0/CubeViewd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\CubeView___"
-			IntermediateDirectory=".\CubeView___"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\CubeView___/CubeView.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\CubeView___/CubeView.pch"
-				AssemblerListingLocation=".\CubeView___/"
-				ObjectFile=".\CubeView___/"
-				ProgramDataBaseFileName=".\CubeView___/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib"
-				OutputFile="../../test/CubeView.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\CubeView___/CubeView.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\CubeView__0/CubeView.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\CubeView__0/CubeView.pch"
-				AssemblerListingLocation=".\CubeView__0/"
-				ObjectFile=".\CubeView__0/"
-				ProgramDataBaseFileName=".\CubeView__0/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/CubeViewd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\CubeView__0/CubeViewd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\CubeView___/CubeView.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\CubeView___/CubeView.pch"
-				AssemblerListingLocation=".\CubeView___/"
-				ObjectFile=".\CubeView___/"
-				ProgramDataBaseFileName=".\CubeView___/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/CubeView.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\CubeView___/CubeView.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\CubeMain.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\CubeView.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\CubeViewUI.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\CubeViewUI.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid -c $(InputName).fl&#x0D;&#x0A;"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/adjuster.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="adjuster"
-	ProjectGUID="{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\adjuster_"
-			IntermediateDirectory=".\adjuster_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\adjuster_/adjuster.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\adjuster_/adjuster.pch"
-				AssemblerListingLocation=".\adjuster_/"
-				ObjectFile=".\adjuster_/"
-				ProgramDataBaseFileName=".\adjuster_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/adjusterd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\adjuster_/adjusterd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/adjuster.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/adjuster.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/adjuster.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/adjuster.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\adjuster_/adjuster.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\adjuster_/adjuster.pch"
-				AssemblerListingLocation=".\adjuster_/"
-				ObjectFile=".\adjuster_/"
-				ProgramDataBaseFileName=".\adjuster_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/adjusterd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\adjuster_/adjusterd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/adjuster.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/adjuster.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/adjuster.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/adjuster.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\adjuster.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/arc.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="arc"
-	ProjectGUID="{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\arc_"
-			IntermediateDirectory=".\arc_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\arc_/arc.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\arc_/arc.pch"
-				AssemblerListingLocation=".\arc_/"
-				ObjectFile=".\arc_/"
-				ProgramDataBaseFileName=".\arc_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/arcd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\arc_/arcd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/arc.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/arc.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/arc.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/arc.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\arc_/arc.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\arc_/arc.pch"
-				AssemblerListingLocation=".\arc_/"
-				ObjectFile=".\arc_/"
-				ProgramDataBaseFileName=".\arc_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/arcd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\arc_/arcd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/arc.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/arc.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/arc.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/arc.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\arc.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/ask.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="ask"
-	ProjectGUID="{DB6BAA16-C589-448F-9AB5-5969016549EB}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\ask_"
-			IntermediateDirectory=".\ask_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\ask_/ask.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\ask_/ask.pch"
-				AssemblerListingLocation=".\ask_/"
-				ObjectFile=".\ask_/"
-				ProgramDataBaseFileName=".\ask_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/askd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\ask_/askd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/ask.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/ask.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/ask.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/ask.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\ask_/ask.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\ask_/ask.pch"
-				AssemblerListingLocation=".\ask_/"
-				ObjectFile=".\ask_/"
-				ProgramDataBaseFileName=".\ask_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/askd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\ask_/askd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/ask.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/ask.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/ask.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/ask.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\ask.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/bitmap.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="bitmap"
-	ProjectGUID="{65B5BB3F-EE54-4604-B49B-7676AED83AAB}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/bitmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/bitmap.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/bitmap.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/bitmap.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\bitmap_"
-			IntermediateDirectory=".\bitmap_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\bitmap_/bitmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\bitmap_/bitmap.pch"
-				AssemblerListingLocation=".\bitmap_/"
-				ObjectFile=".\bitmap_/"
-				ProgramDataBaseFileName=".\bitmap_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/bitmapd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\bitmap_/bitmapd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\bitmap_/bitmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\bitmap_/bitmap.pch"
-				AssemblerListingLocation=".\bitmap_/"
-				ObjectFile=".\bitmap_/"
-				ProgramDataBaseFileName=".\bitmap_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/bitmapd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\bitmap_/bitmapd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/bitmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/bitmap.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/bitmap.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/bitmap.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\bitmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/blocks.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="blocks"
-	ProjectGUID="{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\blocks_"
-			IntermediateDirectory=".\blocks_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\blocks_/blocks.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\blocks_/blocks.pch"
-				AssemblerListingLocation=".\blocks_/"
-				ObjectFile=".\blocks_/"
-				ProgramDataBaseFileName=".\blocks_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/blocksd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\blocks_/blocksd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/blocks.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/blocks.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/blocks.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/blocks.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\blocks_/blocks.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\blocks_/blocks.pch"
-				AssemblerListingLocation=".\blocks_/"
-				ObjectFile=".\blocks_/"
-				ProgramDataBaseFileName=".\blocks_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/blocksd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\blocks_/blocksd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/blocks.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/blocks.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib winmm.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/blocks.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/blocks.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\blocks.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/boxtype.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="boxtype"
-	ProjectGUID="{E212D4B4-63D9-4D8D-84DB-45C8BC191462}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\boxtype_"
-			IntermediateDirectory=".\boxtype_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\boxtype_/boxtype.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\boxtype_/boxtype.pch"
-				AssemblerListingLocation=".\boxtype_/"
-				ObjectFile=".\boxtype_/"
-				ProgramDataBaseFileName=".\boxtype_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/boxtyped.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\boxtype_/boxtyped.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/boxtype.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/boxtype.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/boxtype.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/boxtype.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\boxtype_/boxtype.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\boxtype_/boxtype.pch"
-				AssemblerListingLocation=".\boxtype_/"
-				ObjectFile=".\boxtype_/"
-				ProgramDataBaseFileName=".\boxtype_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/boxtyped.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\boxtype_/boxtyped.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/boxtype.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/boxtype.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/boxtype.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/boxtype.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\boxtype.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/browser.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="browser"
-	ProjectGUID="{2352F92C-8663-4637-B919-D76F0A9EC05E}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/browser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/browser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/browser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\browser_"
-			IntermediateDirectory=".\browser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\browser_/browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\browser_/browser.pch"
-				AssemblerListingLocation=".\browser_/"
-				ObjectFile=".\browser_/"
-				ProgramDataBaseFileName=".\browser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/browserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\browser_/browserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\browser_/browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\browser_/browser.pch"
-				AssemblerListingLocation=".\browser_/"
-				ObjectFile=".\browser_/"
-				ProgramDataBaseFileName=".\browser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/browserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\browser_/browserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/browser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/browser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/browser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\browser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/button.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="button"
-	ProjectGUID="{0363AC35-F325-4C24-9DB9-E83337D55787}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\button_"
-			IntermediateDirectory=".\button_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\button_/button.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\button_/button.pch"
-				AssemblerListingLocation=".\button_/"
-				ObjectFile=".\button_/"
-				ProgramDataBaseFileName=".\button_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/buttond.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\button_/buttond.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/button.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/button.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/button.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/button.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\button_/button.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\button_/button.pch"
-				AssemblerListingLocation=".\button_/"
-				ObjectFile=".\button_/"
-				ProgramDataBaseFileName=".\button_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/buttond.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\button_/buttond.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/button.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/button.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/button.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/button.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/buttons.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="buttons"
-	ProjectGUID="{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/buttons.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/buttons.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/buttons.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/buttons.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\buttons_"
-			IntermediateDirectory=".\buttons_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\buttons_/buttons.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\buttons_/buttons.pch"
-				AssemblerListingLocation=".\buttons_/"
-				ObjectFile=".\buttons_/"
-				ProgramDataBaseFileName=".\buttons_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/buttonsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\buttons_/buttonsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\buttons_/buttons.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\buttons_/buttons.pch"
-				AssemblerListingLocation=".\buttons_/"
-				ObjectFile=".\buttons_/"
-				ProgramDataBaseFileName=".\buttons_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/buttonsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\buttons_/buttonsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/buttons.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/buttons.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/buttons.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/buttons.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\buttons.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/cairo_test.vcproj
+++ /dev/null
@@ -1,439 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="cairo_test"
-	ProjectGUID="{CF98E92E-C789-47E6-A2DA-398EB7991A2B}"
-	RootNamespace="cairo_test"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cairo_test.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				PrecompiledHeaderFile=".\Release/cairo_test.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/cairo_test.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cairo_test.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-				SuppressStartupBanner="true"
-				OutputFile=".\Release/cairo_test.bsc"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\cairo_test_"
-			IntermediateDirectory=".\cairo_test_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cairo_test_/cairo_test.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				MinimalRebuild="true"
-				RuntimeLibrary="3"
-				PrecompiledHeaderFile=".\cairo_test_/cairo_test.pch"
-				AssemblerListingLocation=".\cairo_test_/"
-				ObjectFile=".\cairo_test_/"
-				ProgramDataBaseFileName=".\cairo_test_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/cairo_testd.exe"
-				LinkIncremental="2"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cairo_test_/cairo_testd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-				SuppressStartupBanner="true"
-				OutputFile=".\cairo_test_/cairo_test.bsc"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cairo_test_/cairo_test.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				MinimalRebuild="true"
-				RuntimeLibrary="3"
-				PrecompiledHeaderFile=".\cairo_test_/cairo_test.pch"
-				AssemblerListingLocation=".\cairo_test_/"
-				ObjectFile=".\cairo_test_/"
-				ProgramDataBaseFileName=".\cairo_test_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="4"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/cairo_testd.exe"
-				LinkIncremental="2"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cairo_test_/cairo_testd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-				SuppressStartupBanner="true"
-				OutputFile=".\cairo_test_/cairo_test.bsc"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cairo_test.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				PrecompiledHeaderFile=".\Release/cairo_test.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltk.lib comctl32.lib"
-				OutputFile="../../test/cairo_test.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cairo_test.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-				SuppressStartupBanner="true"
-				OutputFile=".\Release/cairo_test.bsc"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\cairo_test.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/cfluid.cmd
+++ /dev/null
@@ -1,13 +1,0 @@
-@echo off
-echo Compiling fluid files ...
-pushd .
-cd ../../test
-if "%1"=="/D" goto debugmode
-..\fluid\fluid -c "%1"
-goto end
-
-:debugmode:
-..\fluid\fluidd -c "%2"
-
-:end
-popd
--- a/DoConfig/fltk/ide/VisualC2008/checkers.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="checkers"
-	ProjectGUID="{92EEF887-8305-4D00-86B7-D3F98CC7AD87}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\checkers_"
-			IntermediateDirectory=".\checkers_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\checkers_/checkers.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\checkers_/checkers.pch"
-				AssemblerListingLocation=".\checkers_/"
-				ObjectFile=".\checkers_/"
-				ProgramDataBaseFileName=".\checkers_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/checkersd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\checkers_/checkersd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/checkers.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/checkers.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/checkers.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/checkers.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\checkers_/checkers.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\checkers_/checkers.pch"
-				AssemblerListingLocation=".\checkers_/"
-				ObjectFile=".\checkers_/"
-				ProgramDataBaseFileName=".\checkers_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/checkersd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\checkers_/checkersd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/checkers.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/checkers.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/checkers.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/checkers.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\checkers.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/clock.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="clock"
-	ProjectGUID="{122160ED-446E-4B15-8CB4-A2058DC7269A}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\clock_"
-			IntermediateDirectory=".\clock_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\clock_/clock.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\clock_/clock.pch"
-				AssemblerListingLocation=".\clock_/"
-				ObjectFile=".\clock_/"
-				ProgramDataBaseFileName=".\clock_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/clockd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\clock_/clockd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/clock.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/clock.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/clock.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/clock.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\clock_/clock.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\clock_/clock.pch"
-				AssemblerListingLocation=".\clock_/"
-				ObjectFile=".\clock_/"
-				ProgramDataBaseFileName=".\clock_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/clockd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\clock_/clockd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/clock.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/clock.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/clock.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/clock.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\clock.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/colbrowser.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="colbrowser"
-	ProjectGUID="{D0BC7525-99E7-4247-B860-1B3CF2FF8165}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/colbrowser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/colbrowser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/colbrowser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/colbrowser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\colbrowser_"
-			IntermediateDirectory=".\colbrowser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\colbrowser_/colbrowser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\colbrowser_/colbrowser.pch"
-				AssemblerListingLocation=".\colbrowser_/"
-				ObjectFile=".\colbrowser_/"
-				ProgramDataBaseFileName=".\colbrowser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/colbrowserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\colbrowser_/colbrowserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\colbrowser_/colbrowser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\colbrowser_/colbrowser.pch"
-				AssemblerListingLocation=".\colbrowser_/"
-				ObjectFile=".\colbrowser_/"
-				ProgramDataBaseFileName=".\colbrowser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/colbrowserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\colbrowser_/colbrowserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/colbrowser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/colbrowser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/colbrowser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/colbrowser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\colbrowser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/color_chooser.vcproj
+++ /dev/null
@@ -1,434 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="color_chooser"
-	ProjectGUID="{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\color_chooser_"
-			IntermediateDirectory=".\color_chooser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\color_chooser_/color_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\color_chooser_/color_chooser.pch"
-				AssemblerListingLocation=".\color_chooser_/"
-				ObjectFile=".\color_chooser_/"
-				ProgramDataBaseFileName=".\color_chooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/color_chooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\color_chooser_/color_chooserd.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/color_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/color_chooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/color_chooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/color_chooser.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\color_chooser_/color_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\color_chooser_/color_chooser.pch"
-				AssemblerListingLocation=".\color_chooser_/"
-				ObjectFile=".\color_chooser_/"
-				ProgramDataBaseFileName=".\color_chooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/color_chooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\color_chooser_/color_chooserd.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/color_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/color_chooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/color_chooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/color_chooser.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\color_chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/config.h
+++ /dev/null
@@ -1,330 +1,0 @@
-/*
- * "$Id: config.h 4454 2005-07-24 18:41:30Z matt $"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK) for Visual C++.
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Where to find files...
- */
-
-#define FLTK_DATADIR "C:/FLTK"
-#define FLTK_DOCDIR "C:/FLTK/DOC"
-
-/*
- * BORDER_WIDTH:
- *
- * Thickness of FL_UP_BOX and FL_DOWN_BOX.  Current 1,2, and 3 are
- * supported.
- *
- * 3 is the historic FLTK look.
- * 2 is the default and looks like Microsoft Windows, KDE, and Qt.
- * 1 is a plausible future evolution...
- *
- * Note that this may be simulated at runtime by redefining the boxtypes
- * using Fl::set_boxtype().
- */
-
-#define BORDER_WIDTH 2
-
-/*
- * HAVE_GL:
- *
- * Do you have OpenGL? Set this to 0 if you don't have or plan to use
- * OpenGL, and FLTK will be smaller.
- */
-
-#define HAVE_GL 1
-
-/*
- * HAVE_GL_GLU_H:
- *
- * Do you have the OpenGL Utility Library header file?
- * (many broken Mesa RPMs do not...)
- */
-
-#define HAVE_GL_GLU_H 1
-
-/*
- * HAVE_GLXGETPROCADDRESSARB:
- *
- * Do you have the OpenGL glXGetProcAddressARB() function?
- */
-
-/* #undef HAVE_GLXGETPROCADDRESSARB */
-
-/*
- * USE_COLORMAP:
- *
- * Setting this to zero will save a good deal of code (especially for
- * fl_draw_image), but FLTK will only work on TrueColor visuals.
- */
-
-#define USE_COLORMAP 1
-
-/*
- * HAVE_XINERAMA
- *
- * Do we have the Xinerama library to support multi-head displays?
- */
-
-#define HAVE_XINERAMA 0
-
-/*
- * USE_XFT
- *
- * Use the new Xft library to draw anti-aliased text.
- */
-
-#define USE_XFT 0
-
-/*
- * HAVE_XDBE:
- *
- * Do we have the X double-buffer extension?
- */
-
-#define HAVE_XDBE 0
-
-/*
- * USE_XDBE:
- *
- * Actually try to use the double-buffer extension?
- */
-
-#define USE_XDBE HAVE_XDBE
-
-/*
- * HAVE_XFIXES:
- *
- * Do we have the X fixes extension?
- */
-
-#define HAVE_XFIXES 0
-
-/*
- * HAVE_XCURSOR:
- *
- * Do we have the X cursor library?
- */
-
-#define HAVE_XCURSOR 0
-
-/*
- * HAVE_XRENDER:
- *
- * Do we have the X render library?
- */
-
-#define HAVE_XRENDER 0
-
-/*
- * HAVE_X11_XREGION_H:
- *
- * Do we have the X11 Xregion.h header file ?
- */
-
-#define HAVE_X11_XREGION_H 0
-
-/*
- * __APPLE_QUARTZ__:
- *
- * All Apple implementations are now based on Quartz and Cocoa,
- * so this flag should always be on for Mac OS X. This flag has
- * no meaning on operating systems other than Mac OS X.
- */
-
-/* #undef __APPLE_QUARTZ__ */
-
-
-/*
- * USE_X11
- *
- * Should we use X11 for the current platform
- *
- */
-
-/* #undef USE_X11 */
-
-/*
- * HAVE_OVERLAY:
- *
- * Use the X overlay extension?  FLTK will try to use an overlay
- * visual for Fl_Overlay_Window, the Gl_Window overlay, and for the
- * menus.  Setting this to zero will remove a substantial amount of
- * code from FLTK.  Overlays have only been tested on SGI servers!
- */
-
-#define HAVE_OVERLAY 0
-
-/*
- * HAVE_GL_OVERLAY:
- *
- * It is possible your GL has an overlay even if X does not.  If so,
- * set this to 1.
- */
-
-#define HAVE_GL_OVERLAY 1
-
-/*
- * WORDS_BIGENDIAN:
- *
- * Byte order of your machine: 1 = big-endian, 0 = little-endian.
- */
-
-#ifdef __APPLE__
-#include <mac_endianness.h>
-#else
-#define WORDS_BIGENDIAN 0
-#endif
-
-/*
- * U16, U32, U64:
- *
- * Types used by fl_draw_image.  One of U32 or U64 must be defined.
- * U16 is optional but FLTK will work better with it!
- */
-
-#define U16 unsigned short
-#define U32 unsigned
-/* #undef U64 */
-
-/*
- * HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H,
- * HAVE_SCANDIR, HAVE_SCANDIR_POSIX:
- *
- * Where is <dirent.h> (used only by fl_file_chooser and scandir).
- */
-
-/* #undef HAVE_DIRENT_H */
-/* #undef HAVE_SYS_NDIR_H */
-/* #undef HAVE_SYS_DIR_H */
-/* #undef HAVE_NDIR_H */
-/* #undef HAVE_SCANDIR */
-/* #undef HAVE_SCANDIR_POSIX */
-
-/*
- * Possibly missing sprintf-style functions:
- */
-
-/* #undef HAVE_VSNPRINTF */
-/* #undef HAVE_SNPRINTF */
-
-/*
- * String functions and headers...
- */
-
-/* #undef HAVE_STRINGS_H */
-#define HAVE_STRCASECMP 1
-/* #undef HAVE_STRLCAT */
-/* #undef HAVE_STRLCPY */
-
-/*
- * Do we have POSIX locale support?
- */
-
-#define HAVE_LOCALE_H 1
-#define HAVE_LOCALECONV 1
-
-/*
- * HAVE_SYS_SELECT_H:
- *
- * Whether or not select() call has its own header file.
- */
-
-#define HAVE_SYS_SELECT_H 0
-
-/*
- * HAVE_SYS_STDTYPES_H:
- *
- * Whether or not we have the <sys/stdtypes.h> header file.
- */
-
-/* #undef HAVE_SYS_STDTYPES_H */
-
-/*
- * USE_POLL:
- *
- * Use the poll() call provided on Linux and Irix instead of select()
- */
-
-#define USE_POLL 0
-
-/*
- * Do we have various image libraries?
- */
-
-#define HAVE_LIBPNG 1
-#define HAVE_LIBZ 1
-#define HAVE_LIBJPEG 1
-
-/*
- * Do we have Cairo ?
- */
-
-// uncomment the following for using cairo
-// #define FLTK_HAVE_CAIRO 1
-
-/*
- * Which header file do we include for libpng?
- */
-
-#define HAVE_PNG_H 1
-/* #undef HAVE_LIBPNG_PNG_H */
-
-/*
- * Do we have the png_xyz() functions?
- */
-
-#define HAVE_PNG_GET_VALID 1
-#define HAVE_PNG_SET_TRNS_TO_ALPHA 1
-
-/*
- * Do we have POSIX threading?
- */
-
-/* #undef HAVE_PTHREAD */
-/* #undef HAVE_PTHREAD_H */
-
-/*
- * Do we have the ALSA library?
- */
-
-/* #undef HAVE_ALSA_ASOUNDLIB_H */
-
-/*
- * Do we have the long long type?
- */
-
-/* #undef HAVE_LONG_LONG */
-
-#ifdef HAVE_LONG_LONG
-#  define FLTK_LLFMT	"%lld"
-#  define FLTK_LLCAST	(long long)
-#else
-#  define FLTK_LLFMT	"%ld"
-#  define FLTK_LLCAST	(long)
-#endif /* HAVE_LONG_LONG */
-
-/*
- * Do we have the dlsym() function and header?
- */
-
-#define HAVE_DLFCN_H 0
-#define HAVE_DLSYM 0
-
-/*
- * End of "$Id: config.h 4454 2005-07-24 18:41:30Z matt $".
- */
--- a/DoConfig/fltk/ide/VisualC2008/cube.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="cube"
-	ProjectGUID="{0973844B-3E5F-4C38-95FF-E8935243D287}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cube.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/cube.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/cube.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cube.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\cube_"
-			IntermediateDirectory=".\cube_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cube_/cube.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\cube_/cube.pch"
-				AssemblerListingLocation=".\cube_/"
-				ObjectFile=".\cube_/"
-				ProgramDataBaseFileName=".\cube_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/cubed.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cube_/cubed.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cube_/cube.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\cube_/cube.pch"
-				AssemblerListingLocation=".\cube_/"
-				ObjectFile=".\cube_/"
-				ProgramDataBaseFileName=".\cube_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/cubed.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cube_/cubed.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cube.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/cube.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/cube.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cube.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\cube.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/cursor.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="cursor"
-	ProjectGUID="{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\cursor_"
-			IntermediateDirectory=".\cursor_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cursor_/cursor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\cursor_/cursor.pch"
-				AssemblerListingLocation=".\cursor_/"
-				ObjectFile=".\cursor_/"
-				ProgramDataBaseFileName=".\cursor_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/cursord.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cursor_/cursord.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cursor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/cursor.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/cursor.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cursor.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\cursor_/cursor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\cursor_/cursor.pch"
-				AssemblerListingLocation=".\cursor_/"
-				ObjectFile=".\cursor_/"
-				ProgramDataBaseFileName=".\cursor_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib comctl32.lib"
-				OutputFile="../../test/cursord.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\cursor_/cursord.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/cursor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/cursor.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/cursor.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/cursor.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\cursor.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/curve.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="curve"
-	ProjectGUID="{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\curve_"
-			IntermediateDirectory=".\curve_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\curve_/curve.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\curve_/curve.pch"
-				AssemblerListingLocation=".\curve_/"
-				ObjectFile=".\curve_/"
-				ProgramDataBaseFileName=".\curve_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/curved.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\curve_/curved.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/curve.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/curve.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/curve.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/curve.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\curve_/curve.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\curve_/curve.pch"
-				AssemblerListingLocation=".\curve_/"
-				ObjectFile=".\curve_/"
-				ProgramDataBaseFileName=".\curve_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/curved.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\curve_/curved.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/curve.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/curve.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/curve.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/curve.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\curve.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/demo.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="demo"
-	ProjectGUID="{09427220-8C9C-498A-8D50-1638D3FB87E5}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/demo.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/demo.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/demo.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/demo.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\demo_"
-			IntermediateDirectory=".\demo_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\demo_/demo.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\demo_/demo.pch"
-				AssemblerListingLocation=".\demo_/"
-				ObjectFile=".\demo_/"
-				ProgramDataBaseFileName=".\demo_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/demod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\demo_/demod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\demo_/demo.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\demo_/demo.pch"
-				AssemblerListingLocation=".\demo_/"
-				ObjectFile=".\demo_/"
-				ProgramDataBaseFileName=".\demo_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib comctl32.lib"
-				OutputFile="../../test/demod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\demo_/demod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/demo.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/demo.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/demo.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/demo.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\demo.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/device.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="device"
-	ProjectGUID="{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/device.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/device.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/device.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/device.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\device_"
-			IntermediateDirectory=".\device_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\device_/device.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\device_/device.pch"
-				AssemblerListingLocation=".\device_/"
-				ObjectFile=".\device_/"
-				ProgramDataBaseFileName=".\device_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/deviced.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\device_/deviced.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\device_/device.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\device_/device.pch"
-				AssemblerListingLocation=".\device_/"
-				ObjectFile=".\device_/"
-				ProgramDataBaseFileName=".\device_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/deviced.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\device_/deviced.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/device.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/device.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/device.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/device.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\device.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/doublebuffer.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="doublebuffer"
-	ProjectGUID="{EDDBF169-77C1-496E-9EFE-E500107E6E97}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\doublebuffer_"
-			IntermediateDirectory=".\doublebuffer_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\doublebuffer_/doublebuffer.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\doublebuffer_/doublebuffer.pch"
-				AssemblerListingLocation=".\doublebuffer_/"
-				ObjectFile=".\doublebuffer_/"
-				ProgramDataBaseFileName=".\doublebuffer_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/doublebufferd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\doublebuffer_/doublebufferd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/doublebuffer.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/doublebuffer.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/doublebuffer.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/doublebuffer.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\doublebuffer_/doublebuffer.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\doublebuffer_/doublebuffer.pch"
-				AssemblerListingLocation=".\doublebuffer_/"
-				ObjectFile=".\doublebuffer_/"
-				ProgramDataBaseFileName=".\doublebuffer_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/doublebufferd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\doublebuffer_/doublebufferd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/doublebuffer.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/doublebuffer.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/doublebuffer.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/doublebuffer.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\doublebuffer.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/editor.vcproj
+++ /dev/null
@@ -1,442 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="editor"
-	ProjectGUID="{0BDAEBF1-7A8D-434B-A543-4663464E972D}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="..\..\test"
-			IntermediateDirectory=".\Release\editor"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/editor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/editor.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/editor.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/editor.pdb"
-				SubSystem="2"
-				EntryPointSymbol="mainCRTStartup"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="..\..\test"
-			IntermediateDirectory=".\Debug\editor"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\editor_/editor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\editor_/editor.pch"
-				AssemblerListingLocation=".\editor_/"
-				ObjectFile=".\editor_/"
-				ProgramDataBaseFileName=".\editor_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/editord.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\editor_/editord.pdb"
-				SubSystem="2"
-				EntryPointSymbol="mainCRTStartup"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\editor_/editor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\editor_/editor.pch"
-				AssemblerListingLocation=".\editor_/"
-				ObjectFile=".\editor_/"
-				ProgramDataBaseFileName=".\editor_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/editord.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\editor_/editord.pdb"
-				SubSystem="2"
-				EntryPointSymbol="mainCRTStartup"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/editor.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/editor.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltk.lib comctl32.lib"
-				OutputFile="../../test/editor.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/editor.pdb"
-				SubSystem="2"
-				EntryPointSymbol="mainCRTStartup"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\editor.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fast_slow.vcproj
+++ /dev/null
@@ -1,482 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fast_slow"
-	ProjectGUID="{2D29D6C9-B4A6-444C-A311-106A9C8A986F}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\fast_slow_"
-			IntermediateDirectory=".\fast_slow_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fast_slow_/fast_slow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fast_slow_/fast_slow.pch"
-				AssemblerListingLocation=".\fast_slow_/"
-				ObjectFile=".\fast_slow_/"
-				ProgramDataBaseFileName=".\fast_slow_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/fast_slowd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fast_slow_/fast_slowd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fast_slow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fast_slow.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/fast_slow.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fast_slow.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fast_slow_/fast_slow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fast_slow_/fast_slow.pch"
-				AssemblerListingLocation=".\fast_slow_/"
-				ObjectFile=".\fast_slow_/"
-				ProgramDataBaseFileName=".\fast_slow_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/fast_slowd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fast_slow_/fast_slowd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fast_slow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fast_slow.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fast_slow.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fast_slow.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\fast_slow.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\fast_slow.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/file_chooser.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="file_chooser"
-	ProjectGUID="{6927F349-29DF-4D60-BC8F-5A3F5E133735}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\file_chooser_"
-			IntermediateDirectory=".\file_chooser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\file_chooser_/file_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\file_chooser_/file_chooser.pch"
-				AssemblerListingLocation=".\file_chooser_/"
-				ObjectFile=".\file_chooser_/"
-				ProgramDataBaseFileName=".\file_chooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/file_chooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\file_chooser_/file_chooserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/file_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/file_chooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/file_chooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/file_chooser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\file_chooser_/file_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\file_chooser_/file_chooser.pch"
-				AssemblerListingLocation=".\file_chooser_/"
-				ObjectFile=".\file_chooser_/"
-				ProgramDataBaseFileName=".\file_chooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/file_chooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\file_chooser_/file_chooserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/file_chooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/file_chooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib cairo.lib"
-				OutputFile="../../test/file_chooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/file_chooser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\file_chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fltk.lib.vcproj
+++ /dev/null
@@ -1,7210 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fltk"
-	ProjectGUID="{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}"
-	RootNamespace="fltk"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-				CommandLine="copy /Y &quot;$(SolutionDir)..\..\abi-version.ide&quot; &quot;$(SolutionDir)..\..\FL\abi-version.h&quot;"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltk.lib.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-				CommandLine="copy /Y &quot;$(SolutionDir)..\..\abi-version.ide&quot; &quot;$(SolutionDir)..\..\FL\abi-version.h&quot;"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltk.lib.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltk.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-				CommandLine="copy /Y &quot;$(SolutionDir)..\..\abi-version.ide&quot; &quot;$(SolutionDir)..\..\FL\abi-version.h&quot;"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltk.lib.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-				CommandLine="copy /Y &quot;$(SolutionDir)..\..\abi-version.ide&quot; &quot;$(SolutionDir)..\..\FL\abi-version.h&quot;"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltk.lib.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltk.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Headers"
-			Filter="*.h*"
-			>
-			<File
-				RelativePath="..\..\FL\Fl.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Adjuster.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_ask.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Bitmap.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_BMP_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Box.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Browser_.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Chart.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Check_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Check_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Choice.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Clock.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Color_Chooser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Copy_Surface.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Counter.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Device.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Dial.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Double_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_draw.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Export.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_File_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_File_Chooser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_File_Icon.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_File_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Fill_Dial.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Fill_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Float_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_FormsBitmap.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_FormsPixmap.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Free.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_GIF_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Gl_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Group.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Help_Dialog.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Help_View.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Hold_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Hor_Fill_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Hor_Nice_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Hor_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Hor_Value_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Image_Surface.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Input_.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Input_Choice.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Int_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_JPEG_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Light_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Line_Dial.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu_.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu_Bar.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu_Item.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Menu_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_message.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Multi_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Multi_Label.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Multiline_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Multiline_Output.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Nice_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Object.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Output.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Overlay_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Pack.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Paged_Device.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Pixmap.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_PNG_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_PNM_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Positioner.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Preferences.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Progress.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Radio_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Radio_Light_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Radio_Round_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Repeat_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Return_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_RGB_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Roller.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Round_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Round_Clock.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Scroll.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Scrollbar.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Secret_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Select_Browser.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Shared_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_show_colormap.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_show_input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Simple_Counter.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Single_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Spinner.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Sys_Menu_Bar.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Table.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Table_Row.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tabs.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Text_Buffer.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Text_Display.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Text_Editor.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tile.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tiled_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Timer.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Toggle_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Toggle_Light_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Toggle_Round_Button.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tooltip.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tree.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tree_Item.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tree_Item_Array.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Tree_Prefs.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\fl_utf8.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Valuator.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Value_Input.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Value_Output.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Value_Slider.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Widget.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Window.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_Wizard.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_XBM_Image.H"
-				>
-			</File>
-			<File
-				RelativePath="..\..\FL\Fl_XPM_Image.H"
-				>
-			</File>
-		</Filter>
-		<File
-			RelativePath="..\..\src\xutf8\case.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_absolute.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_expand.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_ext.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_isdir.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_list.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_match.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_setext.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_abort.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_add_idle.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Adjuster.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_arc.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_arci.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_arg.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_ask.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Bitmap.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_boxtype.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser_.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser_load.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\cairo\Fl_Cairo.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_call_main.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Chart.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Check_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Check_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Choice.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Clock.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_color.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Color_Chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_compose.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Copy_Surface.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Counter.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_cursor.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_curve.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Device.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Dial.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_diamond_box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_display.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_dnd.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Double_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw_image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw_pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_engraved_label.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Chooser2.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_file_dir.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Icon.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_font.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_get_key.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_get_system_colors.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_gleam.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_grab.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Group.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_gtk.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Help_View.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Image_Surface.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Input_.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_labeltype.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Light_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_line_style.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_lock.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_add.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Bar.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_global.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Multi_Label.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Native_File_Chooser.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_open_uri.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_oval_box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_overlay_visual.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Overlay_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_own_colormap.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Pack.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Paged_Device.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_plastic.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Positioner.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PostScript.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Preferences.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Printer.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Progress.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_read_image.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_rect.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Repeat_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Return_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Roller.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_round_box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Round_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_rounded_box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Scroll.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_scroll_area.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Scrollbar.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_set_font.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_set_fonts.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_shadow_box.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Shared_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_shortcut.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_show_colormap.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Single_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Slider.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_symbols.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Table.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Table_Row.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tabs.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Buffer.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Display.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Editor.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tile.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tiled_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tooltip.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Item.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Item_Array.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Prefs.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_utf.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_utf8.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Valuator.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Output.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Slider.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_vertex.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_visual.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Widget.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_fullscreen.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_hotspot.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_iconize.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_shape.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Wizard.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_x.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_XBM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_XPM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\flstring.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\xutf8\is_right2left.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\xutf8\is_spacing.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\numericsort.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\ps_image.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\scandir.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\screen_xywh.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\vsnprintf.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fltk.sln
+++ /dev/null
@@ -1,1150 +1,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo", "demo.vcproj", "{09427220-8C9C-498A-8D50-1638D3FB87E5}"
-	ProjectSection(ProjectDependencies) = postProject
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A} = {1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}
-		{50651D04-C8F7-4C2B-B412-0848573BDF88} = {50651D04-C8F7-4C2B-B412-0848573BDF88}
-		{8D8D210D-F628-48BB-9127-D8003DF22018} = {8D8D210D-F628-48BB-9127-D8003DF22018}
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF} = {7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}
-		{AE750416-51BA-485C-BD76-EF11B4536EE8} = {AE750416-51BA-485C-BD76-EF11B4536EE8}
-		{DB6BAA16-C589-448F-9AB5-5969016549EB} = {DB6BAA16-C589-448F-9AB5-5969016549EB}
-		{78079B1F-152B-4E83-87CB-364586AB3AAC} = {78079B1F-152B-4E83-87CB-364586AB3AAC}
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9} = {67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165} = {D0BC7525-99E7-4247-B860-1B3CF2FF8165}
-		{2C3FB329-620B-41A0-8845-A063C9EA8807} = {2C3FB329-620B-41A0-8845-A063C9EA8807}
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9} = {ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9} = {ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}
-		{2352F92C-8663-4637-B919-D76F0A9EC05E} = {2352F92C-8663-4637-B919-D76F0A9EC05E}
-		{28D24031-1A17-497A-B926-59CF78076DED} = {28D24031-1A17-497A-B926-59CF78076DED}
-		{37C32832-DCE4-4BAA-9306-826064B30CCB} = {37C32832-DCE4-4BAA-9306-826064B30CCB}
-		{2E03AF33-56A1-4366-B016-184CD96F3B56} = {2E03AF33-56A1-4366-B016-184CD96F3B56}
-		{0363AC35-F325-4C24-9DB9-E83337D55787} = {0363AC35-F325-4C24-9DB9-E83337D55787}
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D} = {DF2A883A-7356-4603-9CB1-E8F1E6B1549D}
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB} = {65B5BB3F-EE54-4604-B49B-7676AED83AAB}
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB} = {46771042-C840-4314-BA3C-C5BC2FBD7CBB}
-		{23F17042-704E-4198-8017-A8584E884CF7} = {23F17042-704E-4198-8017-A8584E884CF7}
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F} = {3B0BF144-5D75-4D4A-BF75-7347186C808F}
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735} = {6927F349-29DF-4D60-BC8F-5A3F5E133735}
-		{0973844B-3E5F-4C38-95FF-E8935243D287} = {0973844B-3E5F-4C38-95FF-E8935243D287}
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE} = {E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F} = {B1749154-F87B-489D-B4B0-ABD5ED20A96F}
-		{45797F58-624B-4FA0-A7A3-5956114D8215} = {45797F58-624B-4FA0-A7A3-5956114D8215}
-		{289C605C-94CC-437F-836B-2FE41528EEEC} = {289C605C-94CC-437F-836B-2FE41528EEEC}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC} = {97541B63-87AA-4ACE-BBF5-175F8D1389EC}
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97} = {EDDBF169-77C1-496E-9EFE-E500107E6E97}
-		{45236F71-7031-40BC-ADCD-0535A64C04B0} = {45236F71-7031-40BC-ADCD-0535A64C04B0}
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1} = {AF932F77-1804-4DA4-A6DC-950795D6AFC1}
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{BFE8CC78-6B58-4305-A096-796A3088BB26} = {BFE8CC78-6B58-4305-A096-796A3088BB26}
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0} = {C3E7B77C-EED2-4046-9A30-9446C6F096A0}
-		{4DFA9F84-0457-4FE4-8008-283270610487} = {4DFA9F84-0457-4FE4-8008-283270610487}
-		{58A83386-65E6-4F22-8712-8B6B7E62913D} = {58A83386-65E6-4F22-8712-8B6B7E62913D}
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87} = {92EEF887-8305-4D00-86B7-D3F98CC7AD87}
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B} = {3322F289-B025-4DB1-A7D1-FBA3840F8A0B}
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1} = {CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8} = {2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}
-		{E30BB28D-DFA0-479C-B670-8CD872224B38} = {E30BB28D-DFA0-479C-B670-8CD872224B38}
-		{3E822491-B134-43B0-A40E-9348FFAB527F} = {3E822491-B134-43B0-A40E-9348FFAB527F}
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE} = {B5271094-DE51-4E60-B4FA-D8F0BDB969FE}
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2} = {1CA77C94-5785-4B38-B91A-1EAFBD885BC2}
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27} = {39ADA7A1-A2C1-4F0B-8B92-04E335570C27}
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15} = {27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B} = {51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462} = {E212D4B4-63D9-4D8D-84DB-45C8BC191462}
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F} = {33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}
-		{F0B8F4BD-955D-43CB-980C-805364D04A25} = {F0B8F4BD-955D-43CB-980C-805364D04A25}
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F} = {2D29D6C9-B4A6-444C-A311-106A9C8A986F}
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3} = {CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}
-		{7A2467D2-B03A-4964-A289-EF233EB39F69} = {7A2467D2-B03A-4964-A289-EF233EB39F69}
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603} = {AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799} = {D04E36D7-1C68-43E6-BE30-A7793CE3C799}
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF} = {9F3F86DA-3CC5-481F-8201-166933B5C8FF}
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE} = {1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D} = {8B25CCE0-0988-4999-AE65-5A5EE31BB44D}
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3} = {F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E} = {AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}
-		{122160ED-446E-4B15-8CB4-A2058DC7269A} = {122160ED-446E-4B15-8CB4-A2058DC7269A}
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6} = {0D1DB0EE-E997-4550-85D4-BDE209B75AD6}
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D} = {0BDAEBF1-7A8D-434B-A543-4663464E972D}
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A} = {E88CCAF5-5DB9-4A46-8C91-97C5697F167A}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75} = {BDACB9FC-6769-4A2D-A636-36CC25E3AC75}
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE} = {2147B9FD-7D65-4854-9770-D7B8767DB9AE}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adjuster", "adjuster.vcproj", "{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arc", "arc.vcproj", "{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ask", "ask.vcproj", "{DB6BAA16-C589-448F-9AB5-5969016549EB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bitmap", "bitmap.vcproj", "{65B5BB3F-EE54-4604-B49B-7676AED83AAB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boxtype", "boxtype.vcproj", "{E212D4B4-63D9-4D8D-84DB-45C8BC191462}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser", "browser.vcproj", "{2352F92C-8663-4637-B919-D76F0A9EC05E}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "button", "button.vcproj", "{0363AC35-F325-4C24-9DB9-E83337D55787}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buttons", "buttons.vcproj", "{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checkers", "checkers.vcproj", "{92EEF887-8305-4D00-86B7-D3F98CC7AD87}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "clock", "clock.vcproj", "{122160ED-446E-4B15-8CB4-A2058DC7269A}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "colbrowser", "colbrowser.vcproj", "{D0BC7525-99E7-4247-B860-1B3CF2FF8165}"
-	ProjectSection(ProjectDependencies) = postProject
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "color_chooser", "color_chooser.vcproj", "{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cube", "cube.vcproj", "{0973844B-3E5F-4C38-95FF-E8935243D287}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CubeView", "CubeView.vcproj", "{E30BB28D-DFA0-479C-B670-8CD872224B38}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cursor", "cursor.vcproj", "{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curve", "curve.vcproj", "{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doublebuffer", "doublebuffer.vcproj", "{EDDBF169-77C1-496E-9EFE-E500107E6E97}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "editor", "editor.vcproj", "{0BDAEBF1-7A8D-434B-A543-4663464E972D}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F0B8F4BD-955D-43CB-980C-805364D04A25} = {F0B8F4BD-955D-43CB-980C-805364D04A25}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fast_slow", "fast_slow.vcproj", "{2D29D6C9-B4A6-444C-A311-106A9C8A986F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file_chooser", "file_chooser.vcproj", "{6927F349-29DF-4D60-BC8F-5A3F5E133735}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltk", "fltk.lib.vcproj", "{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkdll", "fltkdll.vcproj", "{F0B8F4BD-955D-43CB-980C-805364D04A25}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkforms", "fltkforms.vcproj", "{C17BAB42-F00B-4F71-9DF6-A921511C89EE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkgl", "fltkgl.vcproj", "{F7974A9C-C255-4385-96BC-E24EE0816F7C}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkimages", "fltkimages.vcproj", "{6E8E1663-B88D-4454-ADF2-279666A93306}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fluid", "fluid.vcproj", "{8AED3078-8CD8-40C9-A8FF-46080024F1EB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fonts", "fonts.vcproj", "{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "forms", "forms.vcproj", "{B1749154-F87B-489D-B4B0-ABD5ED20A96F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fractals", "fractals.vcproj", "{58A83386-65E6-4F22-8712-8B6B7E62913D}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fullscreen", "fullscreen.vcproj", "{2147B9FD-7D65-4854-9770-D7B8767DB9AE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl_overlay", "gl_overlay.vcproj", "{8D8D210D-F628-48BB-9127-D8003DF22018}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glpuzzle", "glpuzzle.vcproj", "{BFE8CC78-6B58-4305-A096-796A3088BB26}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello.vcproj", "{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "help", "help.vcproj", "{9F3F86DA-3CC5-481F-8201-166933B5C8FF}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iconize", "iconize.vcproj", "{37C32832-DCE4-4BAA-9306-826064B30CCB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "image", "image.vcproj", "{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inactive", "inactive.vcproj", "{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "input", "input.vcproj", "{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyboard", "keyboard.vcproj", "{4DFA9F84-0457-4FE4-8008-283270610487}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "label", "label.vcproj", "{C3E7B77C-EED2-4046-9A30-9446C6F096A0}"
-	ProjectSection(ProjectDependencies) = postProject
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "line_style", "line_style.vcproj", "{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mandelbrot", "mandelbrot.vcproj", "{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "menubar", "menubar.vcproj", "{78079B1F-152B-4E83-87CB-364586AB3AAC}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "message", "message.vcproj", "{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minimum", "minimum.vcproj", "{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "navigation", "navigation.vcproj", "{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "output", "output.vcproj", "{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}"
-	ProjectSection(ProjectDependencies) = postProject
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE} = {C17BAB42-F00B-4F71-9DF6-A921511C89EE}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "overlay", "overlay.vcproj", "{3B0BF144-5D75-4D4A-BF75-7347186C808F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pack", "pack.vcproj", "{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pixmap", "pixmap.vcproj", "{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pixmap_browser", "pixmap_browser.vcproj", "{289C605C-94CC-437F-836B-2FE41528EEEC}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "preferences", "preferences.vcproj", "{D04E36D7-1C68-43E6-BE30-A7793CE3C799}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "radio", "radio.vcproj", "{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resize", "resize.vcproj", "{46771042-C840-4314-BA3C-C5BC2FBD7CBB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resizebox", "resizebox.vcproj", "{2E03AF33-56A1-4366-B016-184CD96F3B56}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scroll", "scroll.vcproj", "{97541B63-87AA-4ACE-BBF5-175F8D1389EC}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shape", "shape.vcproj", "{45797F58-624B-4FA0-A7A3-5956114D8215}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C} = {F7974A9C-C255-4385-96BC-E24EE0816F7C}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "subwindow", "subwindow.vcproj", "{7A2467D2-B03A-4964-A289-EF233EB39F69}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcproj", "{AE750416-51BA-485C-BD76-EF11B4536EE8}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symbols", "symbols.vcproj", "{3E822491-B134-43B0-A40E-9348FFAB527F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tabs", "tabs.vcproj", "{AF932F77-1804-4DA4-A6DC-950795D6AFC1}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threads", "threads.vcproj", "{45236F71-7031-40BC-ADCD-0535A64C04B0}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tile", "tile.vcproj", "{28D24031-1A17-497A-B926-59CF78076DED}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiled_image", "tiled_image.vcproj", "{23F17042-704E-4198-8017-A8584E884CF7}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valuators", "valuators.vcproj", "{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "jpeg.vcproj", "{08B82852-90B3-4767-A5D2-F0A4FCCB2377}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "zlib.vcproj", "{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "libpng.vcproj", "{D640A221-F95A-40FF-AC0E-0E8B615C7681}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "input_choice", "input_choice.vcproj", "{50651D04-C8F7-4C2B-B412-0848573BDF88}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utf8", "utf8.vcproj", "{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cairo_test", "cairo_test.vcproj", "{CF98E92E-C789-47E6-A2DA-398EB7991A2B}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "table", "table.vcproj", "{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree", "tree.vcproj", "{2C3FB329-620B-41A0-8845-A063C9EA8807}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blocks", "blocks.vcproj", "{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}"
-	ProjectSection(ProjectDependencies) = postProject
-		{6E8E1663-B88D-4454-ADF2-279666A93306} = {6E8E1663-B88D-4454-ADF2-279666A93306}
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rotated_text", "rotated_text.vcproj", "{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "device", "device.vcproj", "{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "native-filechooser", "native-filechooser.vcproj", "{314273B6-8478-475E-881D-1F5A294AFED6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unittests", "unittests.vcproj", "{58262A6E-4B0B-4308-93D7-06DC8166428B}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug Cairo|Win32 = Debug Cairo|Win32
-		Debug|Win32 = Debug|Win32
-		Release Cairo|Win32 = Release Cairo|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug|Win32.ActiveCfg = Debug|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug|Win32.Build.0 = Debug|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release|Win32.ActiveCfg = Release|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release|Win32.Build.0 = Release|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug|Win32.Build.0 = Debug|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release|Win32.ActiveCfg = Release|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release|Win32.Build.0 = Release|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug|Win32.ActiveCfg = Debug|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug|Win32.Build.0 = Debug|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release|Win32.ActiveCfg = Release|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release|Win32.Build.0 = Release|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug|Win32.Build.0 = Debug|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release|Win32.ActiveCfg = Release|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release|Win32.Build.0 = Release|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug|Win32.Build.0 = Debug|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release|Win32.ActiveCfg = Release|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release|Win32.Build.0 = Release|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug|Win32.Build.0 = Debug|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release|Win32.ActiveCfg = Release|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release|Win32.Build.0 = Release|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug|Win32.Build.0 = Debug|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release|Win32.ActiveCfg = Release|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release|Win32.Build.0 = Release|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug|Win32.Build.0 = Debug|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release|Win32.ActiveCfg = Release|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release|Win32.Build.0 = Release|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug|Win32.Build.0 = Debug|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release|Win32.ActiveCfg = Release|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release|Win32.Build.0 = Release|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug|Win32.ActiveCfg = Debug|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug|Win32.Build.0 = Debug|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release|Win32.ActiveCfg = Release|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release|Win32.Build.0 = Release|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug|Win32.Build.0 = Debug|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release|Win32.ActiveCfg = Release|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release|Win32.Build.0 = Release|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug|Win32.Build.0 = Debug|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release|Win32.ActiveCfg = Release|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release|Win32.Build.0 = Release|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug|Win32.Build.0 = Debug|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release|Win32.ActiveCfg = Release|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release|Win32.Build.0 = Release|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug|Win32.Build.0 = Debug|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release|Win32.ActiveCfg = Release|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release|Win32.Build.0 = Release|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug|Win32.Build.0 = Debug|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release|Win32.ActiveCfg = Release|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release|Win32.Build.0 = Release|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug|Win32.Build.0 = Debug|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release|Win32.ActiveCfg = Release|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release|Win32.Build.0 = Release|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug|Win32.ActiveCfg = Debug|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug|Win32.Build.0 = Debug|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release|Win32.ActiveCfg = Release|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release|Win32.Build.0 = Release|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug|Win32.ActiveCfg = Debug|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug|Win32.Build.0 = Debug|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release|Win32.ActiveCfg = Release|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release|Win32.Build.0 = Release|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug|Win32.Build.0 = Debug|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release|Win32.ActiveCfg = Release|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release|Win32.Build.0 = Release|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug|Win32.Build.0 = Debug|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release|Win32.ActiveCfg = Release|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release|Win32.Build.0 = Release|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug|Win32.Build.0 = Debug|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release|Win32.ActiveCfg = Release|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release|Win32.Build.0 = Release|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug|Win32.Build.0 = Debug|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release|Win32.ActiveCfg = Release|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release|Win32.Build.0 = Release|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug|Win32.Build.0 = Debug|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release|Win32.ActiveCfg = Release|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release|Win32.Build.0 = Release|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug|Win32.Build.0 = Debug|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release|Win32.ActiveCfg = Release|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release|Win32.Build.0 = Release|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug|Win32.Build.0 = Debug|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release|Win32.ActiveCfg = Release|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release|Win32.Build.0 = Release|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug|Win32.Build.0 = Debug|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release|Win32.ActiveCfg = Release|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release|Win32.Build.0 = Release|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug|Win32.Build.0 = Debug|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release|Win32.ActiveCfg = Release|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release|Win32.Build.0 = Release|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug|Win32.Build.0 = Debug|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release|Win32.ActiveCfg = Release|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release|Win32.Build.0 = Release|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug|Win32.Build.0 = Debug|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release|Win32.ActiveCfg = Release|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release|Win32.Build.0 = Release|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug|Win32.Build.0 = Debug|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release|Win32.ActiveCfg = Release|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release|Win32.Build.0 = Release|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug|Win32.Build.0 = Debug|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release|Win32.ActiveCfg = Release|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release|Win32.Build.0 = Release|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug|Win32.Build.0 = Debug|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release|Win32.ActiveCfg = Release|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release|Win32.Build.0 = Release|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug|Win32.Build.0 = Debug|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release|Win32.ActiveCfg = Release|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release|Win32.Build.0 = Release|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug|Win32.Build.0 = Debug|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release|Win32.ActiveCfg = Release|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release|Win32.Build.0 = Release|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug|Win32.Build.0 = Debug|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release|Win32.ActiveCfg = Release|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release|Win32.Build.0 = Release|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug|Win32.Build.0 = Debug|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release|Win32.ActiveCfg = Release|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release|Win32.Build.0 = Release|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug|Win32.Build.0 = Debug|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release|Win32.ActiveCfg = Release|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release|Win32.Build.0 = Release|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug|Win32.Build.0 = Debug|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release|Win32.ActiveCfg = Release|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release|Win32.Build.0 = Release|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug|Win32.Build.0 = Debug|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release|Win32.ActiveCfg = Release|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release|Win32.Build.0 = Release|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug|Win32.ActiveCfg = Debug|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug|Win32.Build.0 = Debug|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release|Win32.ActiveCfg = Release|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release|Win32.Build.0 = Release|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug|Win32.Build.0 = Debug|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release|Win32.ActiveCfg = Release|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release|Win32.Build.0 = Release|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug|Win32.Build.0 = Debug|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release|Win32.ActiveCfg = Release|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release|Win32.Build.0 = Release|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug|Win32.Build.0 = Debug|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release|Win32.ActiveCfg = Release|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release|Win32.Build.0 = Release|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug|Win32.Build.0 = Debug|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release|Win32.ActiveCfg = Release|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release|Win32.Build.0 = Release|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug|Win32.Build.0 = Debug|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release|Win32.ActiveCfg = Release|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release|Win32.Build.0 = Release|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug|Win32.Build.0 = Debug|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release|Win32.ActiveCfg = Release|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release|Win32.Build.0 = Release|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug|Win32.Build.0 = Debug|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release|Win32.ActiveCfg = Release|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release|Win32.Build.0 = Release|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug|Win32.Build.0 = Debug|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release|Win32.ActiveCfg = Release|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release|Win32.Build.0 = Release|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug|Win32.Build.0 = Debug|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release|Win32.ActiveCfg = Release|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release|Win32.Build.0 = Release|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug|Win32.Build.0 = Debug|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release|Win32.ActiveCfg = Release|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release|Win32.Build.0 = Release|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug|Win32.Build.0 = Debug|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release|Win32.ActiveCfg = Release|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release|Win32.Build.0 = Release|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug|Win32.Build.0 = Debug|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release|Win32.ActiveCfg = Release|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release|Win32.Build.0 = Release|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug|Win32.Build.0 = Debug|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release|Win32.ActiveCfg = Release|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release|Win32.Build.0 = Release|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug|Win32.Build.0 = Debug|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release|Win32.ActiveCfg = Release|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release|Win32.Build.0 = Release|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug|Win32.Build.0 = Debug|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release|Win32.ActiveCfg = Release|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release|Win32.Build.0 = Release|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug|Win32.Build.0 = Debug|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release|Win32.ActiveCfg = Release|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release|Win32.Build.0 = Release|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug|Win32.Build.0 = Debug|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release|Win32.ActiveCfg = Release|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release|Win32.Build.0 = Release|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug|Win32.ActiveCfg = Debug|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug|Win32.Build.0 = Debug|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release|Win32.ActiveCfg = Release|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release|Win32.Build.0 = Release|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug|Win32.Build.0 = Debug|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release|Win32.ActiveCfg = Release|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release|Win32.Build.0 = Release|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug|Win32.Build.0 = Debug|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release|Win32.ActiveCfg = Release|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release|Win32.Build.0 = Release|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug|Win32.Build.0 = Debug|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release|Win32.ActiveCfg = Release|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release|Win32.Build.0 = Release|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug|Win32.Build.0 = Debug|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release|Win32.ActiveCfg = Release|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release|Win32.Build.0 = Release|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug|Win32.Build.0 = Debug|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release|Win32.ActiveCfg = Release|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release|Win32.Build.0 = Release|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug|Win32.ActiveCfg = Debug|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug|Win32.Build.0 = Debug|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release|Win32.ActiveCfg = Release|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release|Win32.Build.0 = Release|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug|Win32.ActiveCfg = Debug|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug|Win32.Build.0 = Debug|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release|Win32.ActiveCfg = Release|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release|Win32.Build.0 = Release|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug|Win32.Build.0 = Debug|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release|Win32.ActiveCfg = Release|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release|Win32.Build.0 = Release|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug|Win32.ActiveCfg = Debug|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug|Win32.Build.0 = Debug|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release|Win32.ActiveCfg = Release|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release|Win32.Build.0 = Release|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug|Win32.Build.0 = Debug|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release|Win32.ActiveCfg = Release|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release|Win32.Build.0 = Release|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug|Win32.Build.0 = Debug|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release|Win32.ActiveCfg = Release|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release|Win32.Build.0 = Release|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug|Win32.ActiveCfg = Debug|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug|Win32.Build.0 = Debug|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release|Win32.ActiveCfg = Release|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release|Win32.Build.0 = Release|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug|Win32.Build.0 = Debug|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release|Win32.ActiveCfg = Release|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release|Win32.Build.0 = Release|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug|Win32.Build.0 = Debug|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release|Win32.ActiveCfg = Release|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release|Win32.Build.0 = Release|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug|Win32.Build.0 = Debug|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release|Win32.ActiveCfg = Release|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release|Win32.Build.0 = Release|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug|Win32.Build.0 = Debug|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release|Win32.ActiveCfg = Release|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release|Win32.Build.0 = Release|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug|Win32.Build.0 = Debug|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release|Win32.ActiveCfg = Release|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release|Win32.Build.0 = Release|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug|Win32.Build.0 = Debug|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release|Win32.ActiveCfg = Release|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release|Win32.Build.0 = Release|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Debug|Win32.Build.0 = Debug|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Release|Win32.ActiveCfg = Release|Win32
-		{2B3BD00C-1A32-4764-AE20-C03B3EDDBD50}.Release|Win32.Build.0 = Release|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Debug|Win32.ActiveCfg = Debug|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Debug|Win32.Build.0 = Debug|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Release|Win32.ActiveCfg = Release|Win32
-		{314273B6-8478-475E-881D-1F5A294AFED6}.Release|Win32.Build.0 = Release|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Debug|Win32.Build.0 = Debug|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Release|Win32.ActiveCfg = Release|Win32
-		{58262A6E-4B0B-4308-93D7-06DC8166428B}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
--- a/DoConfig/fltk/ide/VisualC2008/fltkdll.vcproj
+++ /dev/null
@@ -1,7147 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fltkdll"
-	ProjectGUID="{F0B8F4BD-955D-43CB-980C-805364D04A25}"
-	RootNamespace="fltkdll"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="..\..\test"
-			IntermediateDirectory=".\fltkdll"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName="../../test/fltkdll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,..\..,..\..\zlib,..\..\png,..\..\jpeg"
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fltkdll/fltkdll.pch"
-				AssemblerListingLocation=".\fltkdll/"
-				ObjectFile=".\fltkdll/"
-				ProgramDataBaseFileName=".\fltkdll/"
-				WarningLevel="1"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib"
-				OutputFile="../../test/fltkdll.dll"
-				Version="1.0"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				ProgramDatabaseFile="fltkdll.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="../../test/fltkdll.lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="..\..\test"
-			IntermediateDirectory=".\fltkdlld"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName="../../test/fltkdll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;../..;..\..\zlib,..\..\png,..\..\jpeg"
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fltkdlld/fltkdll.pch"
-				AssemblerListingLocation=".\fltkdlld/"
-				ObjectFile=".\fltkdlld/"
-				ProgramDataBaseFileName=".\fltkdlld/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib"
-				OutputFile="../../test/fltkdlld.dll"
-				Version="1.0"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile="fltkdlld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="../../test/fltkdlld.lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName="../../test/fltkdll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;../..;..\..\zlib,..\..\png,..\..\jpeg"
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fltkdlld/fltkdll.pch"
-				AssemblerListingLocation=".\fltkdlld/"
-				ObjectFile=".\fltkdlld/"
-				ProgramDataBaseFileName=".\fltkdlld/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fltkdlld.dll"
-				Version="1.0"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile="fltkdlld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="../../test/fltkdlld.lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName="../../test/fltkdll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".,..\..,..\..\zlib,..\..\png,..\..\jpeg"
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fltkdll/fltkdll.pch"
-				AssemblerListingLocation=".\fltkdll/"
-				ObjectFile=".\fltkdll/"
-				ProgramDataBaseFileName=".\fltkdll/"
-				WarningLevel="1"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fltkdll.dll"
-				Version="1.0"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				ProgramDatabaseFile="fltkdll.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="../../test/fltkdll.lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\src\xutf8\case.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_absolute.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_expand.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_ext.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_isdir.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_list.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_match.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\filename_setext.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_abort.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_add_idle.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Adjuster.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_arc.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_arci.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_arg.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_ask.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Bitmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_BMP_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_boxtype.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser_.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Browser_load.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\cairo\Fl_Cairo.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					ObjectFile="$(IntDir)\$(InputName)1.obj"
-					XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					ObjectFile="$(IntDir)\$(InputName)1.obj"
-					XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					ObjectFile="$(IntDir)\$(InputName)1.obj"
-					XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					ObjectFile="$(IntDir)\$(InputName)1.obj"
-					XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Chart.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Check_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Check_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Choice.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Clock.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_color.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Color_Chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_compose.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Copy_Surface.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Counter.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_cursor.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_curve.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Device.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Dial.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_diamond_box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_display.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_dnd.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Double_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw_image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_draw_pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_engraved_label.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Browser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Chooser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Chooser2.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_file_dir.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Icon.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Icon2.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_font.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_get_key.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_get_system_colors.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_GIF_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Choice.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Device_Plugin.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_grab.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Group.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_gtk.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_gleam.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Help_Dialog.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Help_View.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Image_Surface.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_images_core.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Input_.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_JPEG_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_labeltype.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Light_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_line_style.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_lock.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_add.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Bar.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_global.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Menu_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Multi_Label.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Native_File_Chooser.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_open_uri.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_oval_box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_overlay_visual.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Overlay_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_own_colormap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Pack.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Paged_Device.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_plastic.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PNG_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PNM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Positioner.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PostScript.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Preferences.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Printer.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Progress.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_read_image.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_rect.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Repeat_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Return_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Roller.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_round_box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Round_Button.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_rounded_box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Scroll.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_scroll_area.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Scrollbar.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_set_font.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_set_fonts.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_shadow_box.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Shared_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_shortcut.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_show_colormap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Single_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Slider.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_symbols.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Table.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Table_Row.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tabs.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Buffer.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Display.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Text_Editor.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tile.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tiled_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tooltip.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Item.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Item_Array.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Tree_Prefs.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_utf.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_utf8.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Valuator.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Input.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Output.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Value_Slider.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_vertex.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_visual.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Widget.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_fullscreen.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_hotspot.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_iconize.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Window_shape.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Wizard.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_x.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_XBM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_XPM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\flstring.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_bitmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_compatability.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_free.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_fselect.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_timer.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_geometry.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_stroke_mono_roman.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_stroke_roman.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_teapot.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\gl_draw.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\gl_start.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\glut_compatability.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\glut_font.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\xutf8\is_right2left.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\xutf8\is_spacing.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\numericsort.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\ps_image.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\scandir.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\screen_xywh.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\vsnprintf.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;$(NoInherit)"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fltkforms.vcproj
+++ /dev/null
@@ -1,585 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fltkforms"
-	ProjectGUID="{C17BAB42-F00B-4F71-9DF6-A921511C89EE}"
-	RootNamespace="fltkforms"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkforms.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkforms.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkforms.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkformsd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkforms.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkformsd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkforms.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkforms.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\src\forms_bitmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_compatability.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_free.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_fselect.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\forms_timer.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fltkgl.vcproj
+++ /dev/null
@@ -1,651 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fltkgl"
-	ProjectGUID="{F7974A9C-C255-4385-96BC-E24EE0816F7C}"
-	RootNamespace="fltkgl"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;..\.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkgl.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkgl.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;..\.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkgl.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkgld.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;..\.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkgl.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkgld.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;..\.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkgl.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkgl.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Choice.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Device_Plugin.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Gl_Window.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_geometry.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_stroke_mono_roman.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_stroke_roman.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\freeglut_teapot.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\src\gl_draw.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\gl_start.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\glut_compatability.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\glut_font.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fltkimages.vcproj
+++ /dev/null
@@ -1,677 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fltkimages"
-	ProjectGUID="{6E8E1663-B88D-4454-ADF2-279666A93306}"
-	RootNamespace="fltkimages"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkimages.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkimagesd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkimages.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkimages.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/fltkimages.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				BrowseInformation="1"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkimagesd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fltkimages.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkimages.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\src\Fl_BMP_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_File_Icon2.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_GIF_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_Help_Dialog.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\fl_images_core.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_JPEG_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PNG_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\src\Fl_PNM_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					BrowseInformation="1"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fluid.vcproj
+++ /dev/null
@@ -1,1237 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fluid"
-	ProjectGUID="{8AED3078-8CD8-40C9-A8FF-46080024F1EB}"
-	RootNamespace="fluid"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\fluid__0"
-			IntermediateDirectory=".\fluid__0"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fluid__0/fluid.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fluid__0/fluid.pch"
-				AssemblerListingLocation=".\fluid__0/"
-				ObjectFile=".\fluid__0/"
-				ProgramDataBaseFileName=".\fluid__0/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../fluid/fluidd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fluid__0/fluidd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\fluid___"
-			IntermediateDirectory=".\fluid___"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fluid___/fluid.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fluid___/fluid.pch"
-				AssemblerListingLocation=".\fluid___/"
-				ObjectFile=".\fluid___/"
-				ProgramDataBaseFileName=".\fluid___/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../fluid/fluid.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\fluid___/fluid.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fluid__0/fluid.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fluid__0/fluid.pch"
-				AssemblerListingLocation=".\fluid__0/"
-				ObjectFile=".\fluid__0/"
-				ProgramDataBaseFileName=".\fluid__0/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib comctl32.lib"
-				OutputFile="../fluid/fluidd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fluid__0/fluidd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fluid___/fluid.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fluid___/fluid.pch"
-				AssemblerListingLocation=".\fluid___/"
-				ObjectFile=".\fluid___/"
-				ProgramDataBaseFileName=".\fluid___/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib cairo.lib"
-				OutputFile="../fluid/fluid.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\fluid___/fluid.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\fluid\about_panel.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\align_widget.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\alignment_panel.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\code.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\CodeEditor.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\factory.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\file.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Function_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Group_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Menu_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Widget_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fl_Window_Type.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\ExternalCodeEditor_WIN32.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\fluid.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\Fluid_Image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\function_panel.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\template_panel.cxx"
-			>
-		</File>
-		<File
-			RelativePath="..\..\fluid\undo.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\fluid\widget_panel.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fonts.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fonts"
-	ProjectGUID="{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\fonts_"
-			IntermediateDirectory=".\fonts_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fonts_/fonts.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fonts_/fonts.pch"
-				AssemblerListingLocation=".\fonts_/"
-				ObjectFile=".\fonts_/"
-				ProgramDataBaseFileName=".\fonts_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/fontsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fonts_/fontsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fonts.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fonts.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/fonts.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fonts.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fonts_/fonts.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fonts_/fonts.pch"
-				AssemblerListingLocation=".\fonts_/"
-				ObjectFile=".\fonts_/"
-				ProgramDataBaseFileName=".\fonts_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/fontsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fonts_/fontsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fonts.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fonts.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fonts.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fonts.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\fonts.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/forms.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="forms"
-	ProjectGUID="{B1749154-F87B-489D-B4B0-ABD5ED20A96F}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\forms_"
-			IntermediateDirectory=".\forms_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\forms_/forms.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\forms_/forms.pch"
-				AssemblerListingLocation=".\forms_/"
-				ObjectFile=".\forms_/"
-				ProgramDataBaseFileName=".\forms_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/formsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\forms_/formsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/forms.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/forms.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/forms.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/forms.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\forms_/forms.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\forms_/forms.pch"
-				AssemblerListingLocation=".\forms_/"
-				ObjectFile=".\forms_/"
-				ProgramDataBaseFileName=".\forms_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/formsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\forms_/formsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/forms.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/forms.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/forms.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/forms.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\forms.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fractals.vcproj
+++ /dev/null
@@ -1,480 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fractals"
-	ProjectGUID="{58A83386-65E6-4F22-8712-8B6B7E62913D}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\fractals_"
-			IntermediateDirectory=".\fractals_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fractals_/fractals.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fractals_/fractals.pch"
-				AssemblerListingLocation=".\fractals_/"
-				ObjectFile=".\fractals_/"
-				ProgramDataBaseFileName=".\fractals_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/fractalsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fractals_/fractalsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fractals.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fractals.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/fractals.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fractals.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fractals_/fractals.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1; _CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fractals_/fractals.pch"
-				AssemblerListingLocation=".\fractals_/"
-				ObjectFile=".\fractals_/"
-				ProgramDataBaseFileName=".\fractals_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/fractalsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fractals_/fractalsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fractals.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fractals.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fractals.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fractals.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\fractals.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\fracviewer.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/fullscreen.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="fullscreen"
-	ProjectGUID="{2147B9FD-7D65-4854-9770-D7B8767DB9AE}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\fullscreen_"
-			IntermediateDirectory=".\fullscreen_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fullscreen_/fullscreen.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fullscreen_/fullscreen.pch"
-				AssemblerListingLocation=".\fullscreen_/"
-				ObjectFile=".\fullscreen_/"
-				ProgramDataBaseFileName=".\fullscreen_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib glu32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/fullscreend.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fullscreen_/fullscreend.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fullscreen.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fullscreen.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib glu32.lib fltk.lib comctl32.lib"
-				OutputFile="../../test/fullscreen.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fullscreen.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\fullscreen_/fullscreen.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\fullscreen_/fullscreen.pch"
-				AssemblerListingLocation=".\fullscreen_/"
-				ObjectFile=".\fullscreen_/"
-				ProgramDataBaseFileName=".\fullscreen_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib opengl32.lib glu32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/fullscreend.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\fullscreen_/fullscreend.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/fullscreen.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/fullscreen.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib glu32.lib fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/fullscreen.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/fullscreen.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\fullscreen.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/gl_overlay.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="gl_overlay"
-	ProjectGUID="{8D8D210D-F628-48BB-9127-D8003DF22018}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/gl_overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/gl_overlay.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/gl_overlay.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/gl_overlay.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\gl_overlay_"
-			IntermediateDirectory=".\gl_overlay_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\gl_overlay_/gl_overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\gl_overlay_/gl_overlay.pch"
-				AssemblerListingLocation=".\gl_overlay_/"
-				ObjectFile=".\gl_overlay_/"
-				ProgramDataBaseFileName=".\gl_overlay_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/gl_overlayd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\gl_overlay_/gl_overlayd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\gl_overlay_/gl_overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\gl_overlay_/gl_overlay.pch"
-				AssemblerListingLocation=".\gl_overlay_/"
-				ObjectFile=".\gl_overlay_/"
-				ProgramDataBaseFileName=".\gl_overlay_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/gl_overlayd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\gl_overlay_/gl_overlayd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/gl_overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/gl_overlay.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/gl_overlay.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/gl_overlay.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\gl_overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/glpuzzle.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="glpuzzle"
-	ProjectGUID="{BFE8CC78-6B58-4305-A096-796A3088BB26}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\glpuzzle_"
-			IntermediateDirectory=".\glpuzzle_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\glpuzzle_/glpuzzle.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\glpuzzle_/glpuzzle.pch"
-				AssemblerListingLocation=".\glpuzzle_/"
-				ObjectFile=".\glpuzzle_/"
-				ProgramDataBaseFileName=".\glpuzzle_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/glpuzzled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\glpuzzle_/glpuzzled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/glpuzzle.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/glpuzzle.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/glpuzzle.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/glpuzzle.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\glpuzzle_/glpuzzle.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\glpuzzle_/glpuzzle.pch"
-				AssemblerListingLocation=".\glpuzzle_/"
-				ObjectFile=".\glpuzzle_/"
-				ProgramDataBaseFileName=".\glpuzzle_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib glu32.lib opengl32.lib comctl32.lib"
-				OutputFile="../../test/glpuzzled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\glpuzzle_/glpuzzled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/glpuzzle.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/glpuzzle.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/glpuzzle.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/glpuzzle.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\glpuzzle.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/hello.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="hello"
-	ProjectGUID="{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\hello_"
-			IntermediateDirectory=".\hello_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\hello_/hello.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\hello_/hello.pch"
-				AssemblerListingLocation=".\hello_/"
-				ObjectFile=".\hello_/"
-				ProgramDataBaseFileName=".\hello_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/hellod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\hello_/hellod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/hello.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/hello.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/hello.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/hello.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\hello_/hello.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\hello_/hello.pch"
-				AssemblerListingLocation=".\hello_/"
-				ObjectFile=".\hello_/"
-				ProgramDataBaseFileName=".\hello_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/hellod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\hello_/hellod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/hello.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/hello.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/hello.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/hello.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\hello.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/help.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="help"
-	ProjectGUID="{9F3F86DA-3CC5-481F-8201-166933B5C8FF}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/help.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/help.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/help.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/help.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\help_"
-			IntermediateDirectory=".\help_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\help_/help.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\help_/help.pch"
-				AssemblerListingLocation=".\help_/"
-				ObjectFile=".\help_/"
-				ProgramDataBaseFileName=".\help_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/helpd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\help_/helpd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\help_/help.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\help_/help.pch"
-				AssemblerListingLocation=".\help_/"
-				ObjectFile=".\help_/"
-				ProgramDataBaseFileName=".\help_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib comctl32.lib"
-				OutputFile="../../test/helpd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\help_/helpd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/help.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/help.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib cairo.lib"
-				OutputFile="../../test/help.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/help.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\help.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/iconize.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="iconize"
-	ProjectGUID="{37C32832-DCE4-4BAA-9306-826064B30CCB}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\iconize_"
-			IntermediateDirectory=".\iconize_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\iconize_/iconize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\iconize_/iconize.pch"
-				AssemblerListingLocation=".\iconize_/"
-				ObjectFile=".\iconize_/"
-				ProgramDataBaseFileName=".\iconize_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/iconized.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\iconize_/iconized.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/iconize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/iconize.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/iconize.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/iconize.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\iconize_/iconize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\iconize_/iconize.pch"
-				AssemblerListingLocation=".\iconize_/"
-				ObjectFile=".\iconize_/"
-				ProgramDataBaseFileName=".\iconize_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/iconized.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\iconize_/iconized.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/iconize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/iconize.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/iconize.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/iconize.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\iconize.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/image.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="image"
-	ProjectGUID="{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/image.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/image.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/image.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\image_"
-			IntermediateDirectory=".\image_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\image_/image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\image_/image.pch"
-				AssemblerListingLocation=".\image_/"
-				ObjectFile=".\image_/"
-				ProgramDataBaseFileName=".\image_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/imaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\image_/imaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\image_/image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1; _CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\image_/image.pch"
-				AssemblerListingLocation=".\image_/"
-				ObjectFile=".\image_/"
-				ProgramDataBaseFileName=".\image_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/imaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\image_/imaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/image.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/image.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/image.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\image.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/inactive.vcproj
+++ /dev/null
@@ -1,481 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="inactive"
-	ProjectGUID="{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\inactive_"
-			IntermediateDirectory=".\inactive_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\inactive_/inactive.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\inactive_/inactive.pch"
-				AssemblerListingLocation=".\inactive_/"
-				ObjectFile=".\inactive_/"
-				ProgramDataBaseFileName=".\inactive_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/inactived.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\inactive_/inactived.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/inactive.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/inactive.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/inactive.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/inactive.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\inactive_/inactive.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\inactive_/inactive.pch"
-				AssemblerListingLocation=".\inactive_/"
-				ObjectFile=".\inactive_/"
-				ProgramDataBaseFileName=".\inactive_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/inactived.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\inactive_/inactived.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/inactive.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/inactive.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/inactive.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/inactive.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\inactive.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\inactive.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid  $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid -c $(InputName).fl&#x0D;&#x0A;"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/input.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="input"
-	ProjectGUID="{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/input.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/input.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/input.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/input.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\input_"
-			IntermediateDirectory=".\input_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\input_/input.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\input_/input.pch"
-				AssemblerListingLocation=".\input_/"
-				ObjectFile=".\input_/"
-				ProgramDataBaseFileName=".\input_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/inputd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\input_/inputd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\input_/input.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\input_/input.pch"
-				AssemblerListingLocation=".\input_/"
-				ObjectFile=".\input_/"
-				ProgramDataBaseFileName=".\input_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/inputd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\input_/inputd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/input.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/input.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/input.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/input.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\input.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/input_choice.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="input_choice"
-	ProjectGUID="{50651D04-C8F7-4C2B-B412-0848573BDF88}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\input_choice_"
-			IntermediateDirectory=".\input_choice_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\input_choice_/input_choice.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\input_choice_/input_choice.pch"
-				AssemblerListingLocation=".\input_choice_/"
-				ObjectFile=".\input_choice_/"
-				ProgramDataBaseFileName=".\input_choice_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/input_choiced.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\input_choice_/input_choiced.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/input_choice.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/input_choice.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/input_choice.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/input_choice.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\input_choice_/input_choice.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\input_choice_/input_choice.pch"
-				AssemblerListingLocation=".\input_choice_/"
-				ObjectFile=".\input_choice_/"
-				ProgramDataBaseFileName=".\input_choice_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/input_choiced.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\input_choice_/input_choiced.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/input_choice.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/input_choice.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/input_choice.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/input_choice.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\input_choice.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/jpeg.vcproj
+++ /dev/null
@@ -1,2336 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="jpeg"
-	ProjectGUID="{08B82852-90B3-4767-A5D2-F0A4FCCB2377}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/jpeg.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkjpegd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/jpeg.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkjpeg.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/jpeg.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkjpegd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/jpeg.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkjpeg.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\jpeg\jcapimin.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcapistd.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jccoefct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jccolor.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcdctmgr.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jchuff.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcinit.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcmainct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcmarker.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcmaster.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcomapi.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcparam.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jaricom.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcarith.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdarith.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcprepct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jcsample.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jctrans.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdapimin.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdapistd.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdatadst.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdatasrc.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdcoefct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdcolor.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jddctmgr.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdhuff.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdinput.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdmainct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdmarker.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdmaster.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdmerge.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdpostct.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdsample.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jdtrans.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jerror.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jfdctflt.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jfdctfst.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jfdctint.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jidctflt.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jidctfst.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jidctint.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jmemmgr.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jmemnobs.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					RuntimeLibrary="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					RuntimeLibrary="2"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					RuntimeLibrary="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-					RuntimeLibrary="2"
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jquant1.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jquant2.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\jpeg\jutils.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/keyboard.vcproj
+++ /dev/null
@@ -1,524 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="keyboard"
-	ProjectGUID="{4DFA9F84-0457-4FE4-8008-283270610487}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/keyboard.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/keyboard.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/keyboard.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/keyboard.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\keyboard_"
-			IntermediateDirectory=".\keyboard_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\keyboard_/keyboard.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\keyboard_/keyboard.pch"
-				AssemblerListingLocation=".\keyboard_/"
-				ObjectFile=".\keyboard_/"
-				ProgramDataBaseFileName=".\keyboard_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/keyboardd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\keyboard_/keyboardd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\keyboard_/keyboard.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\keyboard_/keyboard.pch"
-				AssemblerListingLocation=".\keyboard_/"
-				ObjectFile=".\keyboard_/"
-				ProgramDataBaseFileName=".\keyboard_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/keyboardd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\keyboard_/keyboardd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/keyboard.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/keyboard.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/keyboard.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/keyboard.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\keyboard.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\keyboard_ui.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\keyboard_ui.fl"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/label.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="label"
-	ProjectGUID="{C3E7B77C-EED2-4046-9A30-9446C6F096A0}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\label_"
-			IntermediateDirectory=".\label_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\label_/label.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\label_/label.pch"
-				AssemblerListingLocation=".\label_/"
-				ObjectFile=".\label_/"
-				ProgramDataBaseFileName=".\label_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/labeld.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\label_/labeld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/label.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/label.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/label.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/label.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\label_/label.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\label_/label.pch"
-				AssemblerListingLocation=".\label_/"
-				ObjectFile=".\label_/"
-				ProgramDataBaseFileName=".\label_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/labeld.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\label_/labeld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/label.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/label.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/label.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/label.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\label.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/libpng.vcproj
+++ /dev/null
@@ -1,968 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="libpng"
-	ProjectGUID="{D640A221-F95A-40FF-AC0E-0E8B615C7681}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/libpng.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkpng.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/libpng.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkpngd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/libpng.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkpngd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/libpng.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkpng.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\png\png.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngerror.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngget.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngmem.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngpread.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngread.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngrio.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngrtran.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngrutil.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngset.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngtrans.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngwio.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngwrite.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngwtran.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\png\pngwutil.c"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/line_style.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="line_style"
-	ProjectGUID="{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/line_style.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/line_style.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/line_style.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/line_style.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\line_style_"
-			IntermediateDirectory=".\line_style_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\line_style_/line_style.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\line_style_/line_style.pch"
-				AssemblerListingLocation=".\line_style_/"
-				ObjectFile=".\line_style_/"
-				ProgramDataBaseFileName=".\line_style_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/line_styled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\line_style_/line_styled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\line_style_/line_style.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\line_style_/line_style.pch"
-				AssemblerListingLocation=".\line_style_/"
-				ObjectFile=".\line_style_/"
-				ProgramDataBaseFileName=".\line_style_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/line_styled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\line_style_/line_styled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/line_style.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/line_style.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/line_style.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/line_style.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\line_style.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/mandelbrot.vcproj
+++ /dev/null
@@ -1,524 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="mandelbrot"
-	ProjectGUID="{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\mandelbrot_"
-			IntermediateDirectory=".\mandelbrot_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\mandelbrot_/mandelbrot.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\mandelbrot_/mandelbrot.pch"
-				AssemblerListingLocation=".\mandelbrot_/"
-				ObjectFile=".\mandelbrot_/"
-				ProgramDataBaseFileName=".\mandelbrot_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/mandelbrotd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\mandelbrot_/mandelbrotd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/mandelbrot.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/mandelbrot.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib fltk.lib comctl32.lib"
-				OutputFile="../../test/mandelbrot.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/mandelbrot.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\mandelbrot_/mandelbrot.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\mandelbrot_/mandelbrot.pch"
-				AssemblerListingLocation=".\mandelbrot_/"
-				ObjectFile=".\mandelbrot_/"
-				ProgramDataBaseFileName=".\mandelbrot_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib glu32.lib opengl32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/mandelbrotd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\mandelbrot_/mandelbrotd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/mandelbrot.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/mandelbrot.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="glu32.lib opengl32.lib fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/mandelbrot.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/mandelbrot.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\mandelbrot.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\mandelbrot_ui.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\mandelbrot_ui.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/menubar.vcproj
+++ /dev/null
@@ -1,434 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="menubar"
-	ProjectGUID="{78079B1F-152B-4E83-87CB-364586AB3AAC}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\menubar_"
-			IntermediateDirectory=".\menubar_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\menubar_/menubar.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\menubar_/menubar.pch"
-				AssemblerListingLocation=".\menubar_/"
-				ObjectFile=".\menubar_/"
-				ProgramDataBaseFileName=".\menubar_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/menubard.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\menubar_/menubard.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/menubar.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/menubar.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/menubar.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/menubar.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\menubar_/menubar.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\menubar_/menubar.pch"
-				AssemblerListingLocation=".\menubar_/"
-				ObjectFile=".\menubar_/"
-				ProgramDataBaseFileName=".\menubar_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/menubard.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\menubar_/menubard.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/menubar.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/menubar.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/menubar.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/menubar.pdb"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\menubar.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/message.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="message"
-	ProjectGUID="{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\message_"
-			IntermediateDirectory=".\message_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\message_/message.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\message_/message.pch"
-				AssemblerListingLocation=".\message_/"
-				ObjectFile=".\message_/"
-				ProgramDataBaseFileName=".\message_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/messaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\message_/messaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/message.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/message.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/message.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/message.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\message_/message.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\message_/message.pch"
-				AssemblerListingLocation=".\message_/"
-				ObjectFile=".\message_/"
-				ProgramDataBaseFileName=".\message_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/messaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\message_/messaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/message.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/message.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/message.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/message.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\message.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/minimum.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="minimum"
-	ProjectGUID="{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/minimum.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/minimum.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/minimum.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/minimum.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\minimum_"
-			IntermediateDirectory=".\minimum_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\minimum_/minimum.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\minimum_/minimum.pch"
-				AssemblerListingLocation=".\minimum_/"
-				ObjectFile=".\minimum_/"
-				ProgramDataBaseFileName=".\minimum_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/minimumd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\minimum_/minimumd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\minimum_/minimum.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\minimum_/minimum.pch"
-				AssemblerListingLocation=".\minimum_/"
-				ObjectFile=".\minimum_/"
-				ProgramDataBaseFileName=".\minimum_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/minimumd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\minimum_/minimumd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/minimum.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/minimum.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/minimum.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/minimum.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\minimum.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/native-filechooser.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="native-filechooser"
-	ProjectGUID="{314273B6-8478-475E-881D-1F5A294AFED6}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/native-filechooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/native-filechooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/native-filechooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/native-filechooser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\native-filechooser_"
-			IntermediateDirectory=".\native-filechooser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\native-filechooser_/native-filechooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\native-filechooser_/native-filechooser.pch"
-				AssemblerListingLocation=".\native-filechooser_/"
-				ObjectFile=".\native-filechooser_/"
-				ProgramDataBaseFileName=".\native-filechooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/native-filechooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\native-filechooser_/native-filechooserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\native-filechooser_/native-filechooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\native-filechooser_/native-filechooser.pch"
-				AssemblerListingLocation=".\native-filechooser_/"
-				ObjectFile=".\native-filechooser_/"
-				ProgramDataBaseFileName=".\native-filechooser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/native-filechooserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\native-filechooser_/native-filechooserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/native-filechooser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/native-filechooser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/native-filechooser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/native-filechooser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\native-filechooser.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/navigation.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="navigation"
-	ProjectGUID="{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/navigation.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/navigation.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/navigation.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/navigation.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\navigation_"
-			IntermediateDirectory=".\navigation_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\navigation_/navigation.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\navigation_/navigation.pch"
-				AssemblerListingLocation=".\navigation_/"
-				ObjectFile=".\navigation_/"
-				ProgramDataBaseFileName=".\navigation_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/navigationd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\navigation_/navigationd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\navigation_/navigation.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\navigation_/navigation.pch"
-				AssemblerListingLocation=".\navigation_/"
-				ObjectFile=".\navigation_/"
-				ProgramDataBaseFileName=".\navigation_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/navigationd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\navigation_/navigationd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/navigation.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/navigation.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/navigation.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/navigation.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\navigation.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/output.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="output"
-	ProjectGUID="{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/output.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/output.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/output.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/output.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\output_"
-			IntermediateDirectory=".\output_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\output_/output.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\output_/output.pch"
-				AssemblerListingLocation=".\output_/"
-				ObjectFile=".\output_/"
-				ProgramDataBaseFileName=".\output_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/outputd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\output_/outputd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\output_/output.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\output_/output.pch"
-				AssemblerListingLocation=".\output_/"
-				ObjectFile=".\output_/"
-				ProgramDataBaseFileName=".\output_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/outputd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\output_/outputd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/output.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/output.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/output.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/output.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\output.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/overlay.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="overlay"
-	ProjectGUID="{3B0BF144-5D75-4D4A-BF75-7347186C808F}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\overlay_"
-			IntermediateDirectory=".\overlay_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\overlay_/overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\overlay_/overlay.pch"
-				AssemblerListingLocation=".\overlay_/"
-				ObjectFile=".\overlay_/"
-				ProgramDataBaseFileName=".\overlay_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/overlayd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\overlay_/overlayd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/overlay.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/overlay.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/overlay.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\overlay_/overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\overlay_/overlay.pch"
-				AssemblerListingLocation=".\overlay_/"
-				ObjectFile=".\overlay_/"
-				ProgramDataBaseFileName=".\overlay_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/overlayd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\overlay_/overlayd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/overlay.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/overlay.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/overlay.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/overlay.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\overlay.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/pack.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="pack"
-	ProjectGUID="{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\pack_"
-			IntermediateDirectory=".\pack_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pack_/pack.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pack_/pack.pch"
-				AssemblerListingLocation=".\pack_/"
-				ObjectFile=".\pack_/"
-				ProgramDataBaseFileName=".\pack_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/packd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pack_/packd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pack.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pack.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/pack.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/pack.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pack_/pack.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pack_/pack.pch"
-				AssemblerListingLocation=".\pack_/"
-				ObjectFile=".\pack_/"
-				ProgramDataBaseFileName=".\pack_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/packd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pack_/packd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pack.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pack.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/pack.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/pack.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\pack.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/pixmap.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="pixmap"
-	ProjectGUID="{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pixmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pixmap.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/pixmap.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/pixmap.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\pixmap_"
-			IntermediateDirectory=".\pixmap_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pixmap_/pixmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pixmap_/pixmap.pch"
-				AssemblerListingLocation=".\pixmap_/"
-				ObjectFile=".\pixmap_/"
-				ProgramDataBaseFileName=".\pixmap_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/pixmapd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pixmap_/pixmapd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pixmap_/pixmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pixmap_/pixmap.pch"
-				AssemblerListingLocation=".\pixmap_/"
-				ObjectFile=".\pixmap_/"
-				ProgramDataBaseFileName=".\pixmap_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/pixmapd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pixmap_/pixmapd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pixmap.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pixmap.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/pixmap.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/pixmap.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\pixmap.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/pixmap_browser.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="pixmap_browser"
-	ProjectGUID="{289C605C-94CC-437F-836B-2FE41528EEEC}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\pixmap_browser_"
-			IntermediateDirectory=".\pixmap_browser_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pixmap_browser_/pixmap_browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pixmap_browser_/pixmap_browser.pch"
-				AssemblerListingLocation=".\pixmap_browser_/"
-				ObjectFile=".\pixmap_browser_/"
-				ProgramDataBaseFileName=".\pixmap_browser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/pixmap_browserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pixmap_browser_/pixmap_browserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pixmap_browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pixmap_browser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib"
-				OutputFile="../../test/pixmap_browser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/pixmap_browser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\pixmap_browser_/pixmap_browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\pixmap_browser_/pixmap_browser.pch"
-				AssemblerListingLocation=".\pixmap_browser_/"
-				ObjectFile=".\pixmap_browser_/"
-				ProgramDataBaseFileName=".\pixmap_browser_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib comctl32.lib"
-				OutputFile="../../test/pixmap_browserd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmtd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\pixmap_browser_/pixmap_browserd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/pixmap_browser.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/pixmap_browser.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="comctl32.lib cairo.lib"
-				OutputFile="../../test/pixmap_browser.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcmt"
-				ProgramDatabaseFile=".\Release/pixmap_browser.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\pixmap_browser.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/preferences.vcproj
+++ /dev/null
@@ -1,482 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="preferences"
-	ProjectGUID="{D04E36D7-1C68-43E6-BE30-A7793CE3C799}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\preferences_"
-			IntermediateDirectory=".\preferences_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\preferences_/preferences.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\preferences_/preferences.pch"
-				AssemblerListingLocation=".\preferences_/"
-				ObjectFile=".\preferences_/"
-				ProgramDataBaseFileName=".\preferences_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/preferencesd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\preferences_/preferencesd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/preferences.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/preferences.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/preferences.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/preferences.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\preferences_/preferences.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\preferences_/preferences.pch"
-				AssemblerListingLocation=".\preferences_/"
-				ObjectFile=".\preferences_/"
-				ProgramDataBaseFileName=".\preferences_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/preferencesd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\preferences_/preferencesd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/preferences.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/preferences.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/preferences.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/preferences.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\preferences.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\preferences.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="..\..\test\$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/radio.vcproj
+++ /dev/null
@@ -1,482 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="radio"
-	ProjectGUID="{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/radio.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/radio.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/radio.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/radio.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\radio_"
-			IntermediateDirectory=".\radio_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\radio_/radio.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\radio_/radio.pch"
-				AssemblerListingLocation=".\radio_/"
-				ObjectFile=".\radio_/"
-				ProgramDataBaseFileName=".\radio_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/radiod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\radio_/radiod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\radio_/radio.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\radio_/radio.pch"
-				AssemblerListingLocation=".\radio_/"
-				ObjectFile=".\radio_/"
-				ProgramDataBaseFileName=".\radio_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/radiod.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\radio_/radiod.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/radio.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/radio.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/radio.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/radio.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\radio.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\radio.fl"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/resize.vcproj
+++ /dev/null
@@ -1,482 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="resize"
-	ProjectGUID="{46771042-C840-4314-BA3C-C5BC2FBD7CBB}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\resize_"
-			IntermediateDirectory=".\resize_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\resize_/resize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\resize_/resize.pch"
-				AssemblerListingLocation=".\resize_/"
-				ObjectFile=".\resize_/"
-				ProgramDataBaseFileName=".\resize_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/resized.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\resize_/resized.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/resize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/resize.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/resize.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/resize.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\resize_/resize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\resize_/resize.pch"
-				AssemblerListingLocation=".\resize_/"
-				ObjectFile=".\resize_/"
-				ProgramDataBaseFileName=".\resize_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/resized.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\resize_/resized.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/resize.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/resize.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/resize.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/resize.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\resize.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\resize.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/resizebox.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="resizebox"
-	ProjectGUID="{2E03AF33-56A1-4366-B016-184CD96F3B56}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\resizebox_"
-			IntermediateDirectory=".\resizebox_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\resizebox_/resizebox.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\resizebox_/resizebox.pch"
-				AssemblerListingLocation=".\resizebox_/"
-				ObjectFile=".\resizebox_/"
-				ProgramDataBaseFileName=".\resizebox_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/resizeboxd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\resizebox_/resizeboxd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/resizebox.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/resizebox.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/resizebox.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/resizebox.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\resizebox_/resizebox.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\resizebox_/resizebox.pch"
-				AssemblerListingLocation=".\resizebox_/"
-				ObjectFile=".\resizebox_/"
-				ProgramDataBaseFileName=".\resizebox_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/resizeboxd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\resizebox_/resizeboxd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/resizebox.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/resizebox.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/resizebox.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/resizebox.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\resizebox.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/rotated_text.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="rotated_text"
-	ProjectGUID="{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\rotated_text_"
-			IntermediateDirectory=".\rotated_text_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\rotated_text_/rotated_text.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\rotated_text_/rotated_text.pch"
-				AssemblerListingLocation=".\rotated_text_/"
-				ObjectFile=".\rotated_text_/"
-				ProgramDataBaseFileName=".\rotated_text_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/rotated_textd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\rotated_text_/rotated_textd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/rotated_text.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/rotated_text.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/rotated_text.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/rotated_text.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\rotated_text_/rotated_text.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\rotated_text_/rotated_text.pch"
-				AssemblerListingLocation=".\rotated_text_/"
-				ObjectFile=".\rotated_text_/"
-				ProgramDataBaseFileName=".\rotated_text_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/rotated_textd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\rotated_text_/rotated_textd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/rotated_text.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/rotated_text.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/rotated_text.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/rotated_text.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\rotated_text.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/scroll.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="scroll"
-	ProjectGUID="{97541B63-87AA-4ACE-BBF5-175F8D1389EC}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/scroll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/scroll.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/scroll.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/scroll.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\scroll_"
-			IntermediateDirectory=".\scroll_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\scroll_/scroll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\scroll_/scroll.pch"
-				AssemblerListingLocation=".\scroll_/"
-				ObjectFile=".\scroll_/"
-				ProgramDataBaseFileName=".\scroll_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/scrolld.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\scroll_/scrolld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\scroll_/scroll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\scroll_/scroll.pch"
-				AssemblerListingLocation=".\scroll_/"
-				ObjectFile=".\scroll_/"
-				ProgramDataBaseFileName=".\scroll_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/scrolld.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\scroll_/scrolld.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/scroll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/scroll.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/scroll.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/scroll.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\scroll.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/shape.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="shape"
-	ProjectGUID="{45797F58-624B-4FA0-A7A3-5956114D8215}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/shape.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/shape.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib fltk.lib comctl32.lib"
-				OutputFile="../../test/shape.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/shape.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\shape_"
-			IntermediateDirectory=".\shape_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\shape_/shape.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\shape_/shape.pch"
-				AssemblerListingLocation=".\shape_/"
-				ObjectFile=".\shape_/"
-				ProgramDataBaseFileName=".\shape_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/shaped.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\shape_/shaped.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\shape_/shape.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\shape_/shape.pch"
-				AssemblerListingLocation=".\shape_/"
-				ObjectFile=".\shape_/"
-				ProgramDataBaseFileName=".\shape_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib opengl32.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/shaped.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\shape_/shaped.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/shape.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/shape.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="opengl32.lib fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/shape.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/shape.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\shape.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/subwindow.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="subwindow"
-	ProjectGUID="{7A2467D2-B03A-4964-A289-EF233EB39F69}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/subwindow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/subwindow.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/subwindow.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/subwindow.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\subwindow_"
-			IntermediateDirectory=".\subwindow_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\subwindow_/subwindow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\subwindow_/subwindow.pch"
-				AssemblerListingLocation=".\subwindow_/"
-				ObjectFile=".\subwindow_/"
-				ProgramDataBaseFileName=".\subwindow_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/subwindowd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\subwindow_/subwindowd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\subwindow_/subwindow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\subwindow_/subwindow.pch"
-				AssemblerListingLocation=".\subwindow_/"
-				ObjectFile=".\subwindow_/"
-				ProgramDataBaseFileName=".\subwindow_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/subwindowd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\subwindow_/subwindowd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/subwindow.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/subwindow.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/subwindow.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/subwindow.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\subwindow.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/sudoku.vcproj
+++ /dev/null
@@ -1,446 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="sudoku"
-	ProjectGUID="{AE750416-51BA-485C-BD76-EF11B4536EE8}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\sudoku_"
-			IntermediateDirectory=".\sudoku_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\sudoku_/sudoku.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\sudoku_/sudoku.pch"
-				AssemblerListingLocation=".\sudoku_/"
-				ObjectFile=".\sudoku_/"
-				ProgramDataBaseFileName=".\sudoku_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/sudokud.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\sudoku_/sudokud.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/sudoku.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/sudoku.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/sudoku.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/sudoku.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\sudoku_/sudoku.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\sudoku_/sudoku.pch"
-				AssemblerListingLocation=".\sudoku_/"
-				ObjectFile=".\sudoku_/"
-				ProgramDataBaseFileName=".\sudoku_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib winmm.lib comctl32.lib"
-				OutputFile="../../test/sudokud.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\sudoku_/sudokud.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/sudoku.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/sudoku.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib winmm.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/sudoku.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/sudoku.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\sudoku.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\sudoku.rc"
-			>
-		</File>
-		<File
-			RelativePath="..\..\test\sudokurc.h"
-			>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/symbols.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="symbols"
-	ProjectGUID="{3E822491-B134-43B0-A40E-9348FFAB527F}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\symbols_"
-			IntermediateDirectory=".\symbols_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\symbols_/symbols.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\symbols_/symbols.pch"
-				AssemblerListingLocation=".\symbols_/"
-				ObjectFile=".\symbols_/"
-				ProgramDataBaseFileName=".\symbols_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/symbolsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\symbols_/symbolsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/symbols.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/symbols.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/symbols.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/symbols.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\symbols_/symbols.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\symbols_/symbols.pch"
-				AssemblerListingLocation=".\symbols_/"
-				ObjectFile=".\symbols_/"
-				ProgramDataBaseFileName=".\symbols_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/symbolsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\symbols_/symbolsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/symbols.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/symbols.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/symbols.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/symbols.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\symbols.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/table.vcproj
+++ /dev/null
@@ -1,439 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="table"
-	ProjectGUID="{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}"
-	RootNamespace="table"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\table_"
-			IntermediateDirectory=".\table_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\table_/table.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\table_/table.pch"
-				AssemblerListingLocation=".\table_/"
-				ObjectFile=".\table_/"
-				ProgramDataBaseFileName=".\table_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/tabled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\table_/tabled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/table.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/table.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/table.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/table.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\table_/table.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\table_/table.pch"
-				AssemblerListingLocation=".\table_/"
-				ObjectFile=".\table_/"
-				ProgramDataBaseFileName=".\table_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/tabled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\table_/tabled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/table.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/table.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/table.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/table.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\table.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/tabs.vcproj
+++ /dev/null
@@ -1,483 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="tabs"
-	ProjectGUID="{AF932F77-1804-4DA4-A6DC-950795D6AFC1}"
-	RootNamespace="tabs"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\tabs_"
-			IntermediateDirectory=".\tabs_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tabs_/tabs.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tabs_/tabs.pch"
-				AssemblerListingLocation=".\tabs_/"
-				ObjectFile=".\tabs_/"
-				ProgramDataBaseFileName=".\tabs_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/tabsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tabs_/tabsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tabs.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tabs.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/tabs.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tabs.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tabs_/tabs.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tabs_/tabs.pch"
-				AssemblerListingLocation=".\tabs_/"
-				ObjectFile=".\tabs_/"
-				ProgramDataBaseFileName=".\tabs_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/tabsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tabs_/tabsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tabs.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tabs.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/tabs.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tabs.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\tabs.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\tabs.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create $(InputName).cxx and $(InputName).h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/threads.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="threads"
-	ProjectGUID="{45236F71-7031-40BC-ADCD-0535A64C04B0}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\threads_"
-			IntermediateDirectory=".\threads_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\threads_/threads.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\threads_/threads.pch"
-				AssemblerListingLocation=".\threads_/"
-				ObjectFile=".\threads_/"
-				ProgramDataBaseFileName=".\threads_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/threadsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\threads_/threadsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/threads.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/threads.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/threads.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/threads.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\threads_/threads.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\threads_/threads.pch"
-				AssemblerListingLocation=".\threads_/"
-				ObjectFile=".\threads_/"
-				ProgramDataBaseFileName=".\threads_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/threadsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\threads_/threadsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/threads.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/threads.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/threads.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/threads.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\threads.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/tile.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="tile"
-	ProjectGUID="{28D24031-1A17-497A-B926-59CF78076DED}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tile.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tile.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/tile.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tile.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\tile_"
-			IntermediateDirectory=".\tile_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tile_/tile.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tile_/tile.pch"
-				AssemblerListingLocation=".\tile_/"
-				ObjectFile=".\tile_/"
-				ProgramDataBaseFileName=".\tile_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/tiled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tile_/tiled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tile_/tile.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tile_/tile.pch"
-				AssemblerListingLocation=".\tile_/"
-				ObjectFile=".\tile_/"
-				ProgramDataBaseFileName=".\tile_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/tiled.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tile_/tiled.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tile.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tile.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/tile.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tile.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\tile.cxx"
-			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/tiled_image.vcproj
+++ /dev/null
@@ -1,438 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="tiled_image"
-	ProjectGUID="{23F17042-704E-4198-8017-A8584E884CF7}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\tiled_image_"
-			IntermediateDirectory=".\tiled_image_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tiled_image_/tiled_image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tiled_image_/tiled_image.pch"
-				AssemblerListingLocation=".\tiled_image_/"
-				ObjectFile=".\tiled_image_/"
-				ProgramDataBaseFileName=".\tiled_image_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/tiled_imaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tiled_image_/tiled_imaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tiled_image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tiled_image.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/tiled_image.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tiled_image.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tiled_image_/tiled_image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tiled_image_/tiled_image.pch"
-				AssemblerListingLocation=".\tiled_image_/"
-				ObjectFile=".\tiled_image_/"
-				ProgramDataBaseFileName=".\tiled_image_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/tiled_imaged.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tiled_image_/tiled_imaged.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tiled_image.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tiled_image.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/tiled_image.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tiled_image.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\tiled_image.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/tree.vcproj
+++ /dev/null
@@ -1,463 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="tree"
-	ProjectGUID="{2C3FB329-620B-41A0-8845-A063C9EA8807}"
-	RootNamespace="tree"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\tree_"
-			IntermediateDirectory=".\tree_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tree_/tree.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tree_/tree.pch"
-				AssemblerListingLocation=".\tree_/"
-				ObjectFile=".\tree_/"
-				ProgramDataBaseFileName=".\tree_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/treed.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tree_/treed.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tree.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tree.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/tree.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tree.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\tree_/tree.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\tree_/tree.pch"
-				AssemblerListingLocation=".\tree_/"
-				ObjectFile=".\tree_/"
-				ProgramDataBaseFileName=".\tree_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/treed.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\tree_/treed.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/tree.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/tree.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/tree.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/tree.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\tree.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\tree.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create $(InputName).cxx and $(InputName).h file with fluid"
-					CommandLine="cfluid $(InputName).fl"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/unittests.vcproj
+++ /dev/null
@@ -1,401 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="unittests"
-	ProjectGUID="{58262A6E-4B0B-4308-93D7-06DC8166428B}"
-	RootNamespace="unittest"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\unittest_"
-			IntermediateDirectory=".\unittest_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\unittest_/unittest.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\unittest_/unittest.pch"
-				AssemblerListingLocation=".\unittest_/"
-				ObjectFile=".\unittest_/"
-				ProgramDataBaseFileName=".\unittest_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/unittestsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\unittest_/unittestd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/unittest.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/unittest.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/unittests.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/unittest.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\unittest_/unittest.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\unittest_/unittest.pch"
-				AssemblerListingLocation=".\unittest_/"
-				ObjectFile=".\unittest_/"
-				ProgramDataBaseFileName=".\unittest_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/unittestsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\unittest_/unittestd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/unittest.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/unittest.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib imm32.lib cairo.lib"
-				OutputFile="../../test/unittests.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/unittest.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\unittests.cxx"
-			>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/utf8.vcproj
+++ /dev/null
@@ -1,439 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="utf8"
-	ProjectGUID="{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}"
-	RootNamespace="utf8"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\utf8_"
-			IntermediateDirectory=".\utf8_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\utf8_/utf8.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\utf8_/utf8.pch"
-				AssemblerListingLocation=".\utf8_/"
-				ObjectFile=".\utf8_/"
-				ProgramDataBaseFileName=".\utf8_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/utf8d.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\utf8_/utf8d.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/utf8.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/utf8.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/utf8.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/utf8.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\utf8_/utf8.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\utf8_/utf8.pch"
-				AssemblerListingLocation=".\utf8_/"
-				ObjectFile=".\utf8_/"
-				ProgramDataBaseFileName=".\utf8_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib imm32.lib"
-				OutputFile="../../test/utf8d.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\utf8_/utf8d.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/utf8.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/utf8.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib imm32.lib cairo.lib"
-				OutputFile="../../test/utf8.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/utf8.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\utf8.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/valuators.vcproj
+++ /dev/null
@@ -1,482 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="valuators"
-	ProjectGUID="{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\valuators_"
-			IntermediateDirectory=".\valuators_"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\valuators_/valuators.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\valuators_/valuators.pch"
-				AssemblerListingLocation=".\valuators_/"
-				ObjectFile=".\valuators_/"
-				ProgramDataBaseFileName=".\valuators_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltkd.lib comctl32.lib"
-				OutputFile="../../test/valuatorsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\valuators_/valuatorsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/valuators.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/valuators.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib"
-				OutputFile="../../test/valuators.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/valuators.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\valuators_/valuators.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\valuators_/valuators.pch"
-				AssemblerListingLocation=".\valuators_/"
-				ObjectFile=".\valuators_/"
-				ProgramDataBaseFileName=".\valuators_/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="cairo.lib fltkd.lib comctl32.lib"
-				OutputFile="../../test/valuatorsd.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile=".\valuators_/valuatorsd.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="1"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\Release/valuators.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="2"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1,_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/valuators.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="fltk.lib comctl32.lib cairo.lib"
-				OutputFile="../../test/valuators.exe"
-				LinkIncremental="1"
-				SuppressStartupBanner="true"
-				AdditionalLibraryDirectories="..\..\lib"
-				IgnoreDefaultLibraryNames="libcd"
-				ProgramDatabaseFile=".\Release/valuators.pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\test\valuators.cxx"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\test\valuators.fl"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluidd"
-					CommandLine="cfluid /D $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCustomBuildTool"
-					Description="Create .cxx and .h file with fluid"
-					CommandLine="cfluid $(InputName).fl&#x0D;&#x0A;"
-					Outputs="../../test/$(InputName).cxx"
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2008/zlib.vcproj
+++ /dev/null
@@ -1,766 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9,00"
-	Name="zlib"
-	ProjectGUID="{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory=".\Debug"
-			IntermediateDirectory=".\Debug"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/zlib.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkzd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory=".\Release"
-			IntermediateDirectory=".\Release"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/zlib.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkz.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="FLTK_HAVE_CAIRO=1"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Debug/zlib.pch"
-				AssemblerListingLocation=".\Debug/"
-				ObjectFile=".\Debug/"
-				ProgramDataBaseFileName=".\Debug/"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkzd.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release Cairo|Win32"
-			OutputDirectory="$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="4"
-				InlineFunctionExpansion="2"
-				FavorSizeOrSpeed="0"
-				AdditionalIncludeDirectories=".;..\..\zlib;..\..\png;..\..\jpeg;../.."
-				PreprocessorDefinitions="_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
-				RuntimeLibrary="2"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\Release/zlib.pch"
-				AssemblerListingLocation=".\Release/"
-				ObjectFile=".\Release/"
-				ProgramDataBaseFileName=".\Release/"
-				SuppressStartupBanner="true"
-				CompileAs="0"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\fltkz.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<File
-			RelativePath="..\..\zlib\adler32.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\compress.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\crc32.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\deflate.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\gzclose.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\zlib\gzlib.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\zlib\gzread.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\zlib\gzwrite.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\zlib\infback.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\zlib\inffast.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\inflate.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\inftrees.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\trees.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\uncompr.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-		<File
-			RelativePath="..\..\zlib\zutil.c"
-			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release Cairo|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					FavorSizeOrSpeed="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions=""
-				/>
-			</FileConfiguration>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
--- a/DoConfig/fltk/ide/VisualC2010/CubeView.vcxproj
+++ /dev/null
@@ -1,323 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E30BB28D-DFA0-479C-B670-8CD872224B38}</ProjectGuid>
-    <RootNamespace>CubeView</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\CubeView__0/CubeView.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/CubeViewd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\CubeView___/CubeView.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/CubeView.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\CubeView__0/CubeView.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\CubeView__0/CubeView.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\CubeView__0/</AssemblerListingLocation>
-      <ObjectFileName>.\CubeView__0/</ObjectFileName>
-      <ProgramDataBaseFileName>.\CubeView__0/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/CubeViewd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\CubeView__0/CubeViewd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\CubeView___/CubeView.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\CubeView___/CubeView.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\CubeView___/</AssemblerListingLocation>
-      <ObjectFileName>.\CubeView___/</ObjectFileName>
-      <ProgramDataBaseFileName>.\CubeView___/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/CubeView.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\CubeView___/CubeView.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\CubeMain.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\test\CubeView.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\test\CubeViewUI.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\CubeViewUI.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid -c %(Filename).fl
-</Command>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/adjuster.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\adjuster_/adjuster.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/adjusterd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/adjuster.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/adjuster.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\adjuster_/adjuster.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\adjuster_/adjuster.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\adjuster_/</AssemblerListingLocation>
-      <ObjectFileName>.\adjuster_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\adjuster_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/adjusterd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\adjuster_/adjusterd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/adjuster.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/adjuster.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/adjuster.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/adjuster.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\adjuster.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/arc.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\arc_/arc.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/arcd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/arc.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/arc.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\arc_/arc.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\arc_/arc.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\arc_/</AssemblerListingLocation>
-      <ObjectFileName>.\arc_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\arc_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/arcd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\arc_/arcd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/arc.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/arc.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/arc.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/arc.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\arc.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/ask.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{DB6BAA16-C589-448F-9AB5-5969016549EB}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\ask_/ask.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/askd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/ask.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/ask.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\ask_/ask.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\ask_/ask.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\ask_/</AssemblerListingLocation>
-      <ObjectFileName>.\ask_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\ask_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/askd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\ask_/askd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/ask.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/ask.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/ask.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/ask.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\ask.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/bitmap.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{65B5BB3F-EE54-4604-B49B-7676AED83AAB}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/bitmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/bitmap.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\bitmap_/bitmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/bitmapd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\bitmap_/bitmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\bitmap_/bitmap.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\bitmap_/</AssemblerListingLocation>
-      <ObjectFileName>.\bitmap_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\bitmap_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/bitmapd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\bitmap_/bitmapd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/bitmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/bitmap.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/bitmap.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/bitmap.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\bitmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/blocks.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\blocks_/blocks.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/blocksd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/blocks.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/blocks.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\blocks_/blocks.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\blocks_/blocks.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\blocks_/</AssemblerListingLocation>
-      <ObjectFileName>.\blocks_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\blocks_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/blocksd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\blocks_/blocksd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/blocks.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/blocks.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;winmm.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/blocks.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/blocks.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\blocks.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/boxtype.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E212D4B4-63D9-4D8D-84DB-45C8BC191462}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\boxtype_/boxtype.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/boxtyped.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/boxtype.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/boxtype.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\boxtype_/boxtype.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\boxtype_/boxtype.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\boxtype_/</AssemblerListingLocation>
-      <ObjectFileName>.\boxtype_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\boxtype_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/boxtyped.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\boxtype_/boxtyped.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/boxtype.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/boxtype.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/boxtype.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/boxtype.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\boxtype.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/browser.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2352F92C-8663-4637-B919-D76F0A9EC05E}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/browser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\browser_/browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/browserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\browser_/browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\browser_/browser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\browser_/</AssemblerListingLocation>
-      <ObjectFileName>.\browser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\browser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/browserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\browser_/browserd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/browser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/browser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/browser.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/button.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{0363AC35-F325-4C24-9DB9-E83337D55787}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\button_/button.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttond.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/button.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/button.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\button_/button.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\button_/button.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\button_/</AssemblerListingLocation>
-      <ObjectFileName>.\button_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\button_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttond.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\button_/buttond.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/button.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/button.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/button.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/button.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/buttons.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/buttons.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttons.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\buttons_/buttons.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttonsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\buttons_/buttons.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\buttons_/buttons.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\buttons_/</AssemblerListingLocation>
-      <ObjectFileName>.\buttons_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\buttons_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttonsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\buttons_/buttonsd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/buttons.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/buttons.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/buttons.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/buttons.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\buttons.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/cairo_test.vcxproj
+++ /dev/null
@@ -1,276 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{CF98E92E-C789-47E6-A2DA-398EB7991A2B}</ProjectGuid>
-    <RootNamespace>cairo_test</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cairo_test.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cairo_test.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\Release/cairo_test.bsc</OutputFile>
-    </Bscmake>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cairo_test_/cairo_test.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cairo_testd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\cairo_test_/cairo_test.bsc</OutputFile>
-    </Bscmake>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cairo_test_/cairo_test.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeaderOutputFile>.\cairo_test_/cairo_test.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\cairo_test_/</AssemblerListingLocation>
-      <ObjectFileName>.\cairo_test_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\cairo_test_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cairo_testd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\cairo_test_/cairo_testd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\cairo_test_/cairo_test.bsc</OutputFile>
-    </Bscmake>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cairo_test.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeaderOutputFile>.\Release/cairo_test.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cairo_test.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/cairo_test.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-    <Bscmake>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <OutputFile>.\Release/cairo_test.bsc</OutputFile>
-    </Bscmake>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\cairo_test.cxx">
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/cfluid.cmd
+++ /dev/null
@@ -1,13 +1,0 @@
-@echo off
-echo Compiling fluid files ...
-pushd .
-cd ../../test
-if "%1"=="/D" goto debugmode
-..\fluid\fluid -c "%1"
-goto end
-
-:debugmode:
-..\fluid\fluidd -c "%2"
-
-:end
-popd
--- a/DoConfig/fltk/ide/VisualC2010/checkers.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{92EEF887-8305-4D00-86B7-D3F98CC7AD87}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\checkers_/checkers.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/checkersd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/checkers.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/checkers.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\checkers_/checkers.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\checkers_/checkers.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\checkers_/</AssemblerListingLocation>
-      <ObjectFileName>.\checkers_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\checkers_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/checkersd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\checkers_/checkersd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/checkers.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/checkers.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/checkers.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/checkers.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\checkers.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/clock.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{122160ED-446E-4B15-8CB4-A2058DC7269A}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\clock_/clock.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/clockd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/clock.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/clock.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\clock_/clock.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\clock_/clock.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\clock_/</AssemblerListingLocation>
-      <ObjectFileName>.\clock_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\clock_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/clockd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\clock_/clockd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/clock.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/clock.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/clock.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/clock.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\clock.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/colbrowser.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{D0BC7525-99E7-4247-B860-1B3CF2FF8165}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/colbrowser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/colbrowser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\colbrowser_/colbrowser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/colbrowserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\colbrowser_/colbrowser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\colbrowser_/colbrowser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\colbrowser_/</AssemblerListingLocation>
-      <ObjectFileName>.\colbrowser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\colbrowser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/colbrowserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\colbrowser_/colbrowserd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/colbrowser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/colbrowser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/colbrowser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/colbrowser.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\colbrowser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/color_chooser.vcxproj
+++ /dev/null
@@ -1,267 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\color_chooser_/color_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/color_chooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/color_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/color_chooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\color_chooser_/color_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\color_chooser_/color_chooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\color_chooser_/</AssemblerListingLocation>
-      <ObjectFileName>.\color_chooser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\color_chooser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/color_chooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\color_chooser_/color_chooserd.pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/color_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/color_chooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/color_chooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/color_chooser.pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\color_chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/config.h
+++ /dev/null
@@ -1,330 +1,0 @@
-/*
- * "$Id: config.h 4454 2005-07-24 18:41:30Z matt $"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK) for Visual C++.
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Where to find files...
- */
-
-#define FLTK_DATADIR "C:/FLTK"
-#define FLTK_DOCDIR "C:/FLTK/DOC"
-
-/*
- * BORDER_WIDTH:
- *
- * Thickness of FL_UP_BOX and FL_DOWN_BOX.  Current 1,2, and 3 are
- * supported.
- *
- * 3 is the historic FLTK look.
- * 2 is the default and looks like Microsoft Windows, KDE, and Qt.
- * 1 is a plausible future evolution...
- *
- * Note that this may be simulated at runtime by redefining the boxtypes
- * using Fl::set_boxtype().
- */
-
-#define BORDER_WIDTH 2
-
-/*
- * HAVE_GL:
- *
- * Do you have OpenGL? Set this to 0 if you don't have or plan to use
- * OpenGL, and FLTK will be smaller.
- */
-
-#define HAVE_GL 1
-
-/*
- * HAVE_GL_GLU_H:
- *
- * Do you have the OpenGL Utility Library header file?
- * (many broken Mesa RPMs do not...)
- */
-
-#define HAVE_GL_GLU_H 1
-
-/*
- * HAVE_GLXGETPROCADDRESSARB:
- *
- * Do you have the OpenGL glXGetProcAddressARB() function?
- */
-
-/* #undef HAVE_GLXGETPROCADDRESSARB */
-
-/*
- * USE_COLORMAP:
- *
- * Setting this to zero will save a good deal of code (especially for
- * fl_draw_image), but FLTK will only work on TrueColor visuals.
- */
-
-#define USE_COLORMAP 1
-
-/*
- * HAVE_XINERAMA
- *
- * Do we have the Xinerama library to support multi-head displays?
- */
-
-#define HAVE_XINERAMA 0
-
-/*
- * USE_XFT
- *
- * Use the new Xft library to draw anti-aliased text.
- */
-
-#define USE_XFT 0
-
-/*
- * HAVE_XDBE:
- *
- * Do we have the X double-buffer extension?
- */
-
-#define HAVE_XDBE 0
-
-/*
- * USE_XDBE:
- *
- * Actually try to use the double-buffer extension?
- */
-
-#define USE_XDBE HAVE_XDBE
-
-/*
- * HAVE_XFIXES:
- *
- * Do we have the X fixes extension?
- */
-
-#define HAVE_XFIXES 0
-
-/*
- * HAVE_XCURSOR:
- *
- * Do we have the X cursor library?
- */
-
-#define HAVE_XCURSOR 0
-
-/*
- * HAVE_XRENDER:
- *
- * Do we have the X render library?
- */
-
-#define HAVE_XRENDER 0
-
-/*
- * HAVE_X11_XREGION_H:
- *
- * Do we have the X11 Xregion.h header file ?
- */
-
-#define HAVE_X11_XREGION_H 0
-
-/*
- * __APPLE_QUARTZ__:
- *
- * All Apple implementations are now based on Quartz and Cocoa,
- * so this flag should always be on for Mac OS X. This flag has
- * no meaning on operating systems other than Mac OS X.
- */
-
-/* #undef __APPLE_QUARTZ__ */
-
-
-/*
- * USE_X11
- *
- * Should we use X11 for the current platform
- *
- */
-
-/* #undef USE_X11 */
-
-/*
- * HAVE_OVERLAY:
- *
- * Use the X overlay extension?  FLTK will try to use an overlay
- * visual for Fl_Overlay_Window, the Gl_Window overlay, and for the
- * menus.  Setting this to zero will remove a substantial amount of
- * code from FLTK.  Overlays have only been tested on SGI servers!
- */
-
-#define HAVE_OVERLAY 0
-
-/*
- * HAVE_GL_OVERLAY:
- *
- * It is possible your GL has an overlay even if X does not.  If so,
- * set this to 1.
- */
-
-#define HAVE_GL_OVERLAY 1
-
-/*
- * WORDS_BIGENDIAN:
- *
- * Byte order of your machine: 1 = big-endian, 0 = little-endian.
- */
-
-#ifdef __APPLE__
-#include <mac_endianness.h>
-#else
-#define WORDS_BIGENDIAN 0
-#endif
-
-/*
- * U16, U32, U64:
- *
- * Types used by fl_draw_image.  One of U32 or U64 must be defined.
- * U16 is optional but FLTK will work better with it!
- */
-
-#define U16 unsigned short
-#define U32 unsigned
-/* #undef U64 */
-
-/*
- * HAVE_DIRENT_H, HAVE_SYS_NDIR_H, HAVE_SYS_DIR_H, HAVE_NDIR_H,
- * HAVE_SCANDIR, HAVE_SCANDIR_POSIX:
- *
- * Where is <dirent.h> (used only by fl_file_chooser and scandir).
- */
-
-/* #undef HAVE_DIRENT_H */
-/* #undef HAVE_SYS_NDIR_H */
-/* #undef HAVE_SYS_DIR_H */
-/* #undef HAVE_NDIR_H */
-/* #undef HAVE_SCANDIR */
-/* #undef HAVE_SCANDIR_POSIX */
-
-/*
- * Possibly missing sprintf-style functions:
- */
-
-/* #undef HAVE_VSNPRINTF */
-/* #undef HAVE_SNPRINTF */
-
-/*
- * String functions and headers...
- */
-
-/* #undef HAVE_STRINGS_H */
-#define HAVE_STRCASECMP 1
-/* #undef HAVE_STRLCAT */
-/* #undef HAVE_STRLCPY */
-
-/*
- * Do we have POSIX locale support?
- */
-
-#define HAVE_LOCALE_H 1
-#define HAVE_LOCALECONV 1
-
-/*
- * HAVE_SYS_SELECT_H:
- *
- * Whether or not select() call has its own header file.
- */
-
-#define HAVE_SYS_SELECT_H 0
-
-/*
- * HAVE_SYS_STDTYPES_H:
- *
- * Whether or not we have the <sys/stdtypes.h> header file.
- */
-
-/* #undef HAVE_SYS_STDTYPES_H */
-
-/*
- * USE_POLL:
- *
- * Use the poll() call provided on Linux and Irix instead of select()
- */
-
-#define USE_POLL 0
-
-/*
- * Do we have various image libraries?
- */
-
-#define HAVE_LIBPNG 1
-#define HAVE_LIBZ 1
-#define HAVE_LIBJPEG 1
-
-/*
- * Do we have Cairo ?
- */
-
-// uncomment the following for using cairo
-// #define FLTK_HAVE_CAIRO 1
-
-/*
- * Which header file do we include for libpng?
- */
-
-#define HAVE_PNG_H 1
-/* #undef HAVE_LIBPNG_PNG_H */
-
-/*
- * Do we have the png_xyz() functions?
- */
-
-#define HAVE_PNG_GET_VALID 1
-#define HAVE_PNG_SET_TRNS_TO_ALPHA 1
-
-/*
- * Do we have POSIX threading?
- */
-
-/* #undef HAVE_PTHREAD */
-/* #undef HAVE_PTHREAD_H */
-
-/*
- * Do we have the ALSA library?
- */
-
-/* #undef HAVE_ALSA_ASOUNDLIB_H */
-
-/*
- * Do we have the long long type?
- */
-
-/* #undef HAVE_LONG_LONG */
-
-#ifdef HAVE_LONG_LONG
-#  define FLTK_LLFMT	"%lld"
-#  define FLTK_LLCAST	(long long)
-#else
-#  define FLTK_LLFMT	"%ld"
-#  define FLTK_LLCAST	(long)
-#endif /* HAVE_LONG_LONG */
-
-/*
- * Do we have the dlsym() function and header?
- */
-
-#define HAVE_DLFCN_H 0
-#define HAVE_DLSYM 0
-
-/*
- * End of "$Id: config.h 4454 2005-07-24 18:41:30Z matt $".
- */
--- a/DoConfig/fltk/ide/VisualC2010/cube.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{0973844B-3E5F-4C38-95FF-E8935243D287}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cube.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cube.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cube_/cube.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cubed.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cube_/cube.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\cube_/cube.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\cube_/</AssemblerListingLocation>
-      <ObjectFileName>.\cube_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\cube_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cubed.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\cube_/cubed.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cube.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/cube.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cube.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/cube.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\cube.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/cursor.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cursor_/cursor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cursord.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cursor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cursor.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\cursor_/cursor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\cursor_/cursor.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\cursor_/</AssemblerListingLocation>
-      <ObjectFileName>.\cursor_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\cursor_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cursord.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\cursor_/cursord.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/cursor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/cursor.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/cursor.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/cursor.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\cursor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/curve.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\curve_/curve.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/curved.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/curve.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/curve.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\curve_/curve.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\curve_/curve.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\curve_/</AssemblerListingLocation>
-      <ObjectFileName>.\curve_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\curve_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/curved.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\curve_/curved.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/curve.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/curve.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/curve.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/curve.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\curve.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/demo.vcxproj
+++ /dev/null
@@ -1,563 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{09427220-8C9C-498A-8D50-1638D3FB87E5}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/demo.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/demo.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\demo_/demo.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/demod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\demo_/demo.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\demo_/demo.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\demo_/</AssemblerListingLocation>
-      <ObjectFileName>.\demo_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\demo_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/demod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\demo_/demod.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/demo.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/demo.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/demo.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/demo.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\demo.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="adjuster.vcxproj">
-      <Project>{51f6cda8-3af3-4ddc-b412-8e5e92f3393b}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="arc.vcxproj">
-      <Project>{39ada7a1-a2c1-4f0b-8b92-04e335570c27}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="ask.vcxproj">
-      <Project>{db6baa16-c589-448f-9ab5-5969016549eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="bitmap.vcxproj">
-      <Project>{65b5bb3f-ee54-4604-b49b-7676aed83aab}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="blocks.vcxproj">
-      <Project>{2d92c98b-f186-4bf0-a9d4-51d42c93f6e8}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="boxtype.vcxproj">
-      <Project>{e212d4b4-63d9-4d8d-84db-45c8bc191462}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="browser.vcxproj">
-      <Project>{2352f92c-8663-4637-b919-d76f0a9ec05e}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="button.vcxproj">
-      <Project>{0363ac35-f325-4c24-9db9-e83337d55787}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="buttons.vcxproj">
-      <Project>{67ce1c24-b0c0-4cd6-8d0f-68513c2398b9}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="checkers.vcxproj">
-      <Project>{92eef887-8305-4d00-86b7-d3f98cc7ad87}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="clock.vcxproj">
-      <Project>{122160ed-446e-4b15-8cb4-a2058dc7269a}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="colbrowser.vcxproj">
-      <Project>{d0bc7525-99e7-4247-b860-1b3cf2ff8165}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="color_chooser.vcxproj">
-      <Project>{bdacb9fc-6769-4a2d-a636-36cc25e3ac75}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="cube.vcxproj">
-      <Project>{0973844b-3e5f-4c38-95ff-e8935243d287}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="CubeView.vcxproj">
-      <Project>{e30bb28d-dfa0-479c-b670-8cd872224b38}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="cursor.vcxproj">
-      <Project>{0d1db0ee-e997-4550-85d4-bde209b75ad6}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="curve.vcxproj">
-      <Project>{27d45ba6-a403-4a71-b6d6-57dc0cedce15}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="doublebuffer.vcxproj">
-      <Project>{eddbf169-77c1-496e-9efe-e500107e6e97}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="editor.vcxproj">
-      <Project>{0bdaebf1-7a8d-434b-a543-4663464e972d}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fast_slow.vcxproj">
-      <Project>{2d29d6c9-b4a6-444c-a311-106a9c8a986f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="file_chooser.vcxproj">
-      <Project>{6927f349-29df-4d60-bc8f-5a3f5e133735}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkdll.vcxproj">
-      <Project>{f0b8f4bd-955d-43cb-980c-805364d04a25}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fonts.vcxproj">
-      <Project>{df2a883a-7356-4603-9cb1-e8f1e6b1549d}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="forms.vcxproj">
-      <Project>{b1749154-f87b-489d-b4b0-abd5ed20a96f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fractals.vcxproj">
-      <Project>{58a83386-65e6-4f22-8712-8b6b7e62913d}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fullscreen.vcxproj">
-      <Project>{2147b9fd-7d65-4854-9770-d7b8767db9ae}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="glpuzzle.vcxproj">
-      <Project>{bfe8cc78-6b58-4305-a096-796a3088bb26}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="gl_overlay.vcxproj">
-      <Project>{8d8d210d-f628-48bb-9127-d8003df22018}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="hello.vcxproj">
-      <Project>{ada2462a-3656-41d2-b8a8-8d942aa0f8e9}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="help.vcxproj">
-      <Project>{9f3f86da-3cc5-481f-8201-166933b5c8ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="iconize.vcxproj">
-      <Project>{37c32832-dce4-4baa-9306-826064b30ccb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="image.vcxproj">
-      <Project>{3322f289-b025-4db1-a7d1-fba3840f8a0b}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="inactive.vcxproj">
-      <Project>{b5271094-de51-4e60-b4fa-d8f0bdb969fe}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="input.vcxproj">
-      <Project>{1c1b5a00-5f5d-4290-a07b-8a5a4a78570a}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="input_choice.vcxproj">
-      <Project>{50651d04-c8f7-4c2b-b412-0848573bdf88}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="keyboard.vcxproj">
-      <Project>{4dfa9f84-0457-4fe4-8008-283270610487}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="label.vcxproj">
-      <Project>{c3e7b77c-eed2-4046-9a30-9446c6f096a0}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="line_style.vcxproj">
-      <Project>{8b25cce0-0988-4999-ae65-5a5ee31bb44d}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="mandelbrot.vcxproj">
-      <Project>{7bbecc0f-9381-4bf2-87ca-3fd1da93deaf}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="menubar.vcxproj">
-      <Project>{78079b1f-152b-4e83-87cb-364586ab3aac}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="message.vcxproj">
-      <Project>{e1a8934e-cb8d-4f74-b78a-ec7952bc4cbe}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="minimum.vcxproj">
-      <Project>{f658abe4-7fe1-4404-9b7c-55e0d660f1b3}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="navigation.vcxproj">
-      <Project>{aa0ed6ea-2da3-4486-afbd-76cc9d206a1e}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="output.vcxproj">
-      <Project>{1ca77c94-5785-4b38-b91a-1eafbd885bc2}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="overlay.vcxproj">
-      <Project>{3b0bf144-5d75-4d4a-bf75-7347186c808f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="pack.vcxproj">
-      <Project>{ceb7b88b-3aa5-4dd6-818f-cf19e12bf1e1}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="pixmap.vcxproj">
-      <Project>{1cd667dd-e7ae-4f36-a1f7-f41fb59786be}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="pixmap_browser.vcxproj">
-      <Project>{289c605c-94cc-437f-836b-2fe41528eeec}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="preferences.vcxproj">
-      <Project>{d04e36d7-1c68-43e6-be30-a7793ce3c799}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="radio.vcxproj">
-      <Project>{ad5aced4-f6ee-4ac0-b502-23cfd10ef603}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="resize.vcxproj">
-      <Project>{46771042-c840-4314-ba3c-c5bc2fbd7cbb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="resizebox.vcxproj">
-      <Project>{2e03af33-56a1-4366-b016-184cd96f3b56}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="rotated_text.vcxproj">
-      <Project>{e88ccaf5-5db9-4a46-8c91-97c5697f167a}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="scroll.vcxproj">
-      <Project>{97541b63-87aa-4ace-bbf5-175f8d1389ec}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="shape.vcxproj">
-      <Project>{45797f58-624b-4fa0-a7a3-5956114d8215}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="subwindow.vcxproj">
-      <Project>{7a2467d2-b03a-4964-a289-ef233eb39f69}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="sudoku.vcxproj">
-      <Project>{ae750416-51ba-485c-bd76-ef11b4536ee8}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="symbols.vcxproj">
-      <Project>{3e822491-b134-43b0-a40e-9348ffab527f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="table.vcxproj">
-      <Project>{33331fb8-2af9-4d15-bee3-5f69658a6f1f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="tabs.vcxproj">
-      <Project>{af932f77-1804-4da4-a6dc-950795d6afc1}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="threads.vcxproj">
-      <Project>{45236f71-7031-40bc-adcd-0535a64c04b0}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="tile.vcxproj">
-      <Project>{28d24031-1a17-497a-b926-59cf78076ded}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="tiled_image.vcxproj">
-      <Project>{23f17042-704e-4198-8017-a8584e884cf7}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="tree.vcxproj">
-      <Project>{2c3fb329-620b-41a0-8845-a063c9ea8807}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="utf8.vcxproj">
-      <Project>{ada2462a-3656-41d2-b7a8-8d942aa0f8f9}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="valuators.vcxproj">
-      <Project>{cee12acb-20e4-45e4-ad5e-d15d7cff68c3}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/device.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/device.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/device.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\device_/device.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/deviced.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\device_/device.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\device_/device.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\device_/</AssemblerListingLocation>
-      <ObjectFileName>.\device_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\device_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/deviced.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/device.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/device.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/device.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\device.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/doublebuffer.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{EDDBF169-77C1-496E-9EFE-E500107E6E97}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\doublebuffer_/doublebuffer.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/doublebufferd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/doublebuffer.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/doublebuffer.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\doublebuffer_/doublebuffer.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\doublebuffer_/doublebuffer.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\doublebuffer_/</AssemblerListingLocation>
-      <ObjectFileName>.\doublebuffer_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\doublebuffer_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/doublebufferd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\doublebuffer_/doublebufferd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/doublebuffer.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/doublebuffer.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/doublebuffer.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/doublebuffer.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\doublebuffer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/editor.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{0BDAEBF1-7A8D-434B-A543-4663464E972D}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/editor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/editor.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\editor_/editor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/editord.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\editor_/editor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\editor_/editor.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\editor_/</AssemblerListingLocation>
-      <ObjectFileName>.\editor_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\editor_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/editord.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\editor_/editord.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/editor.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/editor.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/editor.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/editor.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\editor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltkdll.vcxproj">
-      <Project>{f0b8f4bd-955d-43cb-980c-805364d04a25}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fast_slow.vcxproj
+++ /dev/null
@@ -1,295 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2D29D6C9-B4A6-444C-A311-106A9C8A986F}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fast_slow_/fast_slow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fast_slowd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fast_slow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fast_slow.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fast_slow_/fast_slow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fast_slow_/fast_slow.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fast_slow_/</AssemblerListingLocation>
-      <ObjectFileName>.\fast_slow_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fast_slow_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fast_slowd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\fast_slow_/fast_slowd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fast_slow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fast_slow.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fast_slow.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/fast_slow.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\fast_slow.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\fast_slow.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/file_chooser.vcxproj
+++ /dev/null
@@ -1,287 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{6927F349-29DF-4D60-BC8F-5A3F5E133735}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\file_chooser_/file_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/file_chooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/file_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/file_chooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\file_chooser_/file_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\file_chooser_/file_chooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\file_chooser_/</AssemblerListingLocation>
-      <ObjectFileName>.\file_chooser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\file_chooser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/file_chooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\file_chooser_/file_chooserd.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/file_chooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/file_chooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/file_chooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>.\Release/file_chooser.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\file_chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fltk.lib.vcxproj
+++ /dev/null
@@ -1,2534 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>fltk</ProjectName>
-    <ProjectGuid>{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}</ProjectGuid>
-    <RootNamespace>fltk</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-    <PreBuildEvent>
-      <Command>copy /Y "$(SolutionDir)..\..\abi-version.ide" "$(SolutionDir)..\..\FL\abi-version.h"</Command>
-    </PreBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-    <PreBuildEvent>
-      <Command>copy /Y "$(SolutionDir)..\..\abi-version.ide" "$(SolutionDir)..\..\FL\abi-version.h"</Command>
-    </PreBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/fltk.lib.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkd.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-    <PreBuildEvent>
-      <Command>copy /Y "$(SolutionDir)..\..\abi-version.ide" "$(SolutionDir)..\..\FL\abi-version.h"</Command>
-    </PreBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1; _CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fltk.lib.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltk.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-    <PreBuildEvent>
-      <Command>copy /Y "$(SolutionDir)..\..\abi-version.ide" "$(SolutionDir)..\..\FL\abi-version.h"</Command>
-    </PreBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\FL\Fl.H" />
-    <ClInclude Include="..\..\FL\Fl_Adjuster.H" />
-    <ClInclude Include="..\..\FL\fl_ask.H" />
-    <ClInclude Include="..\..\FL\Fl_Bitmap.H" />
-    <ClInclude Include="..\..\FL\Fl_BMP_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Box.H" />
-    <ClInclude Include="..\..\FL\Fl_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_Browser_.H" />
-    <ClInclude Include="..\..\FL\Fl_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Chart.H" />
-    <ClInclude Include="..\..\FL\Fl_Check_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_Check_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Choice.H" />
-    <ClInclude Include="..\..\FL\Fl_Clock.H" />
-    <ClInclude Include="..\..\FL\Fl_Color_Chooser.H" />
-    <ClInclude Include="..\..\FL\Fl_Copy_Surface.H" />
-    <ClInclude Include="..\..\FL\Fl_Counter.H" />
-    <ClInclude Include="..\..\FL\Fl_Device.H" />
-    <ClInclude Include="..\..\FL\Fl_Dial.H" />
-    <ClInclude Include="..\..\FL\Fl_Double_Window.H" />
-    <ClInclude Include="..\..\FL\fl_draw.H" />
-    <ClInclude Include="..\..\FL\Fl_Export.H" />
-    <ClInclude Include="..\..\FL\Fl_File_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_File_Chooser.H" />
-    <ClInclude Include="..\..\FL\Fl_File_Icon.H" />
-    <ClInclude Include="..\..\FL\Fl_File_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_Fill_Dial.H" />
-    <ClInclude Include="..\..\FL\Fl_Fill_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Float_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_FormsBitmap.H" />
-    <ClInclude Include="..\..\FL\Fl_FormsPixmap.H" />
-    <ClInclude Include="..\..\FL\Fl_Free.H" />
-    <ClInclude Include="..\..\FL\Fl_GIF_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Gl_Window.H" />
-    <ClInclude Include="..\..\FL\Fl_Group.H" />
-    <ClInclude Include="..\..\FL\Fl_Help_Dialog.H" />
-    <ClInclude Include="..\..\FL\Fl_Help_View.H" />
-    <ClInclude Include="..\..\FL\Fl_Hold_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_Hor_Fill_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Hor_Nice_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Hor_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Hor_Value_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Image_Surface.H" />
-    <ClInclude Include="..\..\FL\Fl_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_Input_.H" />
-    <ClInclude Include="..\..\FL\Fl_Input_Choice.H" />
-    <ClInclude Include="..\..\FL\Fl_Int_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_JPEG_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Light_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Line_Dial.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu_.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu_Bar.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu_Item.H" />
-    <ClInclude Include="..\..\FL\Fl_Menu_Window.H" />
-    <ClInclude Include="..\..\FL\fl_message.H" />
-    <ClInclude Include="..\..\FL\Fl_Multi_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_Multi_Label.H" />
-    <ClInclude Include="..\..\FL\Fl_Multiline_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_Multiline_Output.H" />
-    <ClInclude Include="..\..\FL\Fl_Nice_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Object.H" />
-    <ClInclude Include="..\..\FL\Fl_Output.H" />
-    <ClInclude Include="..\..\FL\Fl_Overlay_Window.H" />
-    <ClInclude Include="..\..\FL\Fl_Pack.H" />
-    <ClInclude Include="..\..\FL\Fl_Paged_Device.H" />
-    <ClInclude Include="..\..\FL\Fl_Pixmap.H" />
-    <ClInclude Include="..\..\FL\Fl_PNG_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_PNM_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Positioner.H" />
-    <ClInclude Include="..\..\FL\Fl_Preferences.H" />
-    <ClInclude Include="..\..\FL\Fl_Progress.H" />
-    <ClInclude Include="..\..\FL\Fl_Radio_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Radio_Light_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Radio_Round_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Repeat_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Return_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_RGB_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Roller.H" />
-    <ClInclude Include="..\..\FL\Fl_Round_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Round_Clock.H" />
-    <ClInclude Include="..\..\FL\Fl_Scroll.H" />
-    <ClInclude Include="..\..\FL\Fl_Scrollbar.H" />
-    <ClInclude Include="..\..\FL\Fl_Secret_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_Select_Browser.H" />
-    <ClInclude Include="..\..\FL\Fl_Shared_Image.H" />
-    <ClInclude Include="..\..\FL\fl_show_colormap.H" />
-    <ClInclude Include="..\..\FL\fl_show_input.H" />
-    <ClInclude Include="..\..\FL\Fl_Simple_Counter.H" />
-    <ClInclude Include="..\..\FL\Fl_Single_Window.H" />
-    <ClInclude Include="..\..\FL\Fl_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Spinner.H" />
-    <ClInclude Include="..\..\FL\Fl_Sys_Menu_Bar.H" />
-    <ClInclude Include="..\..\FL\Fl_Table.H" />
-    <ClInclude Include="..\..\FL\Fl_Table_Row.H" />
-    <ClInclude Include="..\..\FL\Fl_Tabs.H" />
-    <ClInclude Include="..\..\FL\Fl_Text_Buffer.H" />
-    <ClInclude Include="..\..\FL\Fl_Text_Display.H" />
-    <ClInclude Include="..\..\FL\Fl_Text_Editor.H" />
-    <ClInclude Include="..\..\FL\Fl_Tile.H" />
-    <ClInclude Include="..\..\FL\Fl_Tiled_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_Timer.H" />
-    <ClInclude Include="..\..\FL\Fl_Toggle_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Toggle_Light_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Toggle_Round_Button.H" />
-    <ClInclude Include="..\..\FL\Fl_Tooltip.H" />
-    <ClInclude Include="..\..\FL\Fl_Tree.H" />
-    <ClInclude Include="..\..\FL\Fl_Tree_Item.H" />
-    <ClInclude Include="..\..\FL\Fl_Tree_Item_Array.H" />
-    <ClInclude Include="..\..\FL\Fl_Tree_Prefs.H" />
-    <ClInclude Include="..\..\FL\fl_utf8.H" />
-    <ClInclude Include="..\..\FL\Fl_Valuator.H" />
-    <ClInclude Include="..\..\FL\Fl_Value_Input.H" />
-    <ClInclude Include="..\..\FL\Fl_Value_Output.H" />
-    <ClInclude Include="..\..\FL\Fl_Value_Slider.H" />
-    <ClInclude Include="..\..\FL\Fl_Widget.H" />
-    <ClInclude Include="..\..\FL\Fl_Window.H" />
-    <ClInclude Include="..\..\FL\Fl_Wizard.H" />
-    <ClInclude Include="..\..\FL\Fl_XBM_Image.H" />
-    <ClInclude Include="..\..\FL\Fl_XPM_Image.H" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\xutf8\case.c" />
-    <ClCompile Include="..\..\src\filename_absolute.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_expand.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_ext.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_isdir.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_list.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_match.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_setext.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_abort.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_add_idle.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Adjuster.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_arc.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_arci.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_arg.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_ask.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Bitmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_boxtype.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser_load.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\cairo\Fl_Cairo.cxx" />
-    <ClCompile Include="..\..\src\fl_call_main.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Chart.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Check_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Check_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Choice.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Clock.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_color.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Color_Chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_compose.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Copy_Surface.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Counter.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_cursor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_curve.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Device.cxx" />
-    <ClCompile Include="..\..\src\Fl_Dial.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_diamond_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_display.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_dnd.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Double_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw_image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw_pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_engraved_label.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Chooser2.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_file_dir.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Icon.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_get_key.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_get_system_colors.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_grab.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Group.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_gtk.cxx" />
-    <ClCompile Include="..\..\src\fl_gleam.cxx" />
-    <ClCompile Include="..\..\src\Fl_Help_View.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Image_Surface.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Input_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_labeltype.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Light_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_line_style.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_lock.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_add.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Bar.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_global.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Multi_Label.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Native_File_Chooser.cxx" />
-    <ClCompile Include="..\..\src\fl_open_uri.cxx" />
-    <ClCompile Include="..\..\src\fl_oval_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_overlay_visual.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Overlay_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_own_colormap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Pack.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Paged_Device.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_plastic.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Positioner.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PostScript.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Preferences.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Printer.cxx" />
-    <ClCompile Include="..\..\src\Fl_Progress.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_read_image.cxx" />
-    <ClCompile Include="..\..\src\fl_rect.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Repeat_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Return_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Roller.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_round_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Round_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_rounded_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Scroll.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_scroll_area.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Scrollbar.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_set_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_set_fonts.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_shadow_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Shared_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_shortcut.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_show_colormap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Single_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Slider.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_symbols.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Table.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Table_Row.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tabs.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Buffer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Display.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Editor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tile.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tiled_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tooltip.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Item.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Item_Array.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Prefs.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_utf.c" />
-    <ClCompile Include="..\..\src\fl_utf8.cxx" />
-    <ClCompile Include="..\..\src\Fl_Valuator.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Output.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Slider.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_vertex.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_visual.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Widget.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_fullscreen.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_hotspot.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_iconize.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_shape.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Wizard.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_x.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_XBM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_XPM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\flstring.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\xutf8\is_right2left.c" />
-    <ClCompile Include="..\..\src\xutf8\is_spacing.c" />
-    <ClCompile Include="..\..\src\numericsort.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\ps_image.cxx" />
-    <ClCompile Include="..\..\src\scandir.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\screen_xywh.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\vsnprintf.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fltk.lib.vcxproj.filters
+++ /dev/null
@@ -1,531 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Headers">
-      <UniqueIdentifier>{5034cc57-c7ba-44dc-856a-937165898868}</UniqueIdentifier>
-      <Extensions>*.h*</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\FL\Fl.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Adjuster.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_ask.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Bitmap.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_BMP_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Box.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Browser_.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Chart.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Check_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Check_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Choice.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Clock.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Color_Chooser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Copy_Surface.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Counter.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Device.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Dial.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Double_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_draw.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Export.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_File_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_File_Chooser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_File_Icon.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_File_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Fill_Dial.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Fill_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Float_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_FormsBitmap.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_FormsPixmap.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Free.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_GIF_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Gl_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Group.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Help_Dialog.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Help_View.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Hold_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Hor_Fill_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Hor_Nice_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Hor_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Hor_Value_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Image_Surface.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Input_.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Input_Choice.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Int_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_JPEG_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Light_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Line_Dial.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu_.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu_Bar.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu_Item.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Menu_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_message.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Multi_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Multi_Label.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Multiline_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Multiline_Output.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Nice_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Object.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Output.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Overlay_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Pack.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Paged_Device.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Pixmap.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_PNG_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_PNM_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Positioner.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Preferences.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Progress.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Radio_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Radio_Light_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Radio_Round_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Repeat_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Return_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_RGB_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Roller.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Round_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Round_Clock.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Scroll.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Scrollbar.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Secret_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Select_Browser.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Shared_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_show_colormap.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_show_input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Simple_Counter.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Single_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Spinner.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Sys_Menu_Bar.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Table.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Table_Row.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tabs.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Text_Buffer.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Text_Display.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Text_Editor.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tile.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tiled_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Timer.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Toggle_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Toggle_Light_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Toggle_Round_Button.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tooltip.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tree.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tree_Item.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tree_Item_Array.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Tree_Prefs.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\fl_utf8.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Valuator.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Value_Input.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Value_Output.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Value_Slider.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Widget.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Window.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_Wizard.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_XBM_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\FL\Fl_XPM_Image.H">
-      <Filter>Headers</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\xutf8\case.c" />
-    <ClCompile Include="..\..\src\filename_absolute.cxx" />
-    <ClCompile Include="..\..\src\filename_expand.cxx" />
-    <ClCompile Include="..\..\src\filename_ext.cxx" />
-    <ClCompile Include="..\..\src\filename_isdir.cxx" />
-    <ClCompile Include="..\..\src\filename_list.cxx" />
-    <ClCompile Include="..\..\src\filename_match.cxx" />
-    <ClCompile Include="..\..\src\filename_setext.cxx" />
-    <ClCompile Include="..\..\src\Fl.cxx" />
-    <ClCompile Include="..\..\src\Fl_abort.cxx" />
-    <ClCompile Include="..\..\src\Fl_add_idle.cxx" />
-    <ClCompile Include="..\..\src\Fl_Adjuster.cxx" />
-    <ClCompile Include="..\..\src\fl_arc.cxx" />
-    <ClCompile Include="..\..\src\fl_arci.cxx" />
-    <ClCompile Include="..\..\src\Fl_arg.cxx" />
-    <ClCompile Include="..\..\src\fl_ask.cxx" />
-    <ClCompile Include="..\..\src\Fl_Bitmap.cxx" />
-    <ClCompile Include="..\..\src\Fl_Box.cxx" />
-    <ClCompile Include="..\..\src\fl_boxtype.cxx" />
-    <ClCompile Include="..\..\src\Fl_Browser.cxx" />
-    <ClCompile Include="..\..\src\Fl_Browser_.cxx" />
-    <ClCompile Include="..\..\src\Fl_Browser_load.cxx" />
-    <ClCompile Include="..\..\src\Fl_Button.cxx" />
-    <ClCompile Include="..\..\cairo\Fl_Cairo.cxx" />
-    <ClCompile Include="..\..\src\fl_call_main.c" />
-    <ClCompile Include="..\..\src\Fl_Chart.cxx" />
-    <ClCompile Include="..\..\src\Fl_Check_Browser.cxx" />
-    <ClCompile Include="..\..\src\Fl_Check_Button.cxx" />
-    <ClCompile Include="..\..\src\Fl_Choice.cxx" />
-    <ClCompile Include="..\..\src\Fl_Clock.cxx" />
-    <ClCompile Include="..\..\src\fl_color.cxx" />
-    <ClCompile Include="..\..\src\Fl_Color_Chooser.cxx" />
-    <ClCompile Include="..\..\src\Fl_compose.cxx" />
-    <ClCompile Include="..\..\src\Fl_Copy_Surface.cxx" />
-    <ClCompile Include="..\..\src\Fl_Counter.cxx" />
-    <ClCompile Include="..\..\src\fl_cursor.cxx" />
-    <ClCompile Include="..\..\src\fl_curve.cxx" />
-    <ClCompile Include="..\..\src\Fl_Device.cxx" />
-    <ClCompile Include="..\..\src\Fl_Dial.cxx" />
-    <ClCompile Include="..\..\src\fl_diamond_box.cxx" />
-    <ClCompile Include="..\..\src\Fl_display.cxx" />
-    <ClCompile Include="..\..\src\fl_dnd.cxx" />
-    <ClCompile Include="..\..\src\Fl_Double_Window.cxx" />
-    <ClCompile Include="..\..\src\fl_draw.cxx" />
-    <ClCompile Include="..\..\src\fl_draw_image.cxx" />
-    <ClCompile Include="..\..\src\fl_draw_pixmap.cxx" />
-    <ClCompile Include="..\..\src\fl_engraved_label.cxx" />
-    <ClCompile Include="..\..\src\Fl_File_Browser.cxx" />
-    <ClCompile Include="..\..\src\Fl_File_Chooser.cxx" />
-    <ClCompile Include="..\..\src\Fl_File_Chooser2.cxx" />
-    <ClCompile Include="..\..\src\fl_file_dir.cxx" />
-    <ClCompile Include="..\..\src\Fl_File_Icon.cxx" />
-    <ClCompile Include="..\..\src\Fl_File_Input.cxx" />
-    <ClCompile Include="..\..\src\fl_font.cxx" />
-    <ClCompile Include="..\..\src\Fl_get_key.cxx" />
-    <ClCompile Include="..\..\src\Fl_get_system_colors.cxx" />
-    <ClCompile Include="..\..\src\Fl_grab.cxx" />
-    <ClCompile Include="..\..\src\Fl_Group.cxx" />
-    <ClCompile Include="..\..\src\fl_gtk.cxx" />
-    <ClCompile Include="..\..\src\fl_gleam.cxx" />
-    <ClCompile Include="..\..\src\Fl_Help_View.cxx" />
-    <ClCompile Include="..\..\src\Fl_Image.cxx" />
-    <ClCompile Include="..\..\src\Fl_Image_Surface.cxx" />
-    <ClCompile Include="..\..\src\Fl_Input.cxx" />
-    <ClCompile Include="..\..\src\Fl_Input_.cxx" />
-    <ClCompile Include="..\..\src\fl_labeltype.cxx" />
-    <ClCompile Include="..\..\src\Fl_Light_Button.cxx" />
-    <ClCompile Include="..\..\src\fl_line_style.cxx" />
-    <ClCompile Include="..\..\src\Fl_lock.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_add.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_Bar.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_Button.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_global.cxx" />
-    <ClCompile Include="..\..\src\Fl_Menu_Window.cxx" />
-    <ClCompile Include="..\..\src\Fl_Multi_Label.cxx" />
-    <ClCompile Include="..\..\src\Fl_Native_File_Chooser.cxx" />
-    <ClCompile Include="..\..\src\fl_open_uri.cxx" />
-    <ClCompile Include="..\..\src\fl_oval_box.cxx" />
-    <ClCompile Include="..\..\src\fl_overlay.cxx" />
-    <ClCompile Include="..\..\src\fl_overlay_visual.cxx" />
-    <ClCompile Include="..\..\src\Fl_Overlay_Window.cxx" />
-    <ClCompile Include="..\..\src\Fl_own_colormap.cxx" />
-    <ClCompile Include="..\..\src\Fl_Pack.cxx" />
-    <ClCompile Include="..\..\src\Fl_Paged_Device.cxx" />
-    <ClCompile Include="..\..\src\Fl_Pixmap.cxx" />
-    <ClCompile Include="..\..\src\fl_plastic.cxx" />
-    <ClCompile Include="..\..\src\Fl_Positioner.cxx" />
-    <ClCompile Include="..\..\src\Fl_PostScript.cxx" />
-    <ClCompile Include="..\..\src\Fl_Preferences.cxx" />
-    <ClCompile Include="..\..\src\Fl_Printer.cxx" />
-    <ClCompile Include="..\..\src\Fl_Progress.cxx" />
-    <ClCompile Include="..\..\src\fl_read_image.cxx" />
-    <ClCompile Include="..\..\src\fl_rect.cxx" />
-    <ClCompile Include="..\..\src\Fl_Repeat_Button.cxx" />
-    <ClCompile Include="..\..\src\Fl_Return_Button.cxx" />
-    <ClCompile Include="..\..\src\Fl_Roller.cxx" />
-    <ClCompile Include="..\..\src\fl_round_box.cxx" />
-    <ClCompile Include="..\..\src\Fl_Round_Button.cxx" />
-    <ClCompile Include="..\..\src\fl_rounded_box.cxx" />
-    <ClCompile Include="..\..\src\Fl_Scroll.cxx" />
-    <ClCompile Include="..\..\src\fl_scroll_area.cxx" />
-    <ClCompile Include="..\..\src\Fl_Scrollbar.cxx" />
-    <ClCompile Include="..\..\src\fl_set_font.cxx" />
-    <ClCompile Include="..\..\src\fl_set_fonts.cxx" />
-    <ClCompile Include="..\..\src\fl_shadow_box.cxx" />
-    <ClCompile Include="..\..\src\Fl_Shared_Image.cxx" />
-    <ClCompile Include="..\..\src\fl_shortcut.cxx" />
-    <ClCompile Include="..\..\src\fl_show_colormap.cxx" />
-    <ClCompile Include="..\..\src\Fl_Single_Window.cxx" />
-    <ClCompile Include="..\..\src\Fl_Slider.cxx" />
-    <ClCompile Include="..\..\src\fl_symbols.cxx" />
-    <ClCompile Include="..\..\src\Fl_Table.cxx" />
-    <ClCompile Include="..\..\src\Fl_Table_Row.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tabs.cxx" />
-    <ClCompile Include="..\..\src\Fl_Text_Buffer.cxx" />
-    <ClCompile Include="..\..\src\Fl_Text_Display.cxx" />
-    <ClCompile Include="..\..\src\Fl_Text_Editor.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tile.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tiled_Image.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tooltip.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tree.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tree_Item.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tree_Item_Array.cxx" />
-    <ClCompile Include="..\..\src\Fl_Tree_Prefs.cxx" />
-    <ClCompile Include="..\..\src\fl_utf.c" />
-    <ClCompile Include="..\..\src\fl_utf8.cxx" />
-    <ClCompile Include="..\..\src\Fl_Valuator.cxx" />
-    <ClCompile Include="..\..\src\Fl_Value_Input.cxx" />
-    <ClCompile Include="..\..\src\Fl_Value_Output.cxx" />
-    <ClCompile Include="..\..\src\Fl_Value_Slider.cxx" />
-    <ClCompile Include="..\..\src\fl_vertex.cxx" />
-    <ClCompile Include="..\..\src\Fl_visual.cxx" />
-    <ClCompile Include="..\..\src\Fl_Widget.cxx" />
-    <ClCompile Include="..\..\src\Fl_Window.cxx" />
-    <ClCompile Include="..\..\src\Fl_Window_fullscreen.cxx" />
-    <ClCompile Include="..\..\src\Fl_Window_hotspot.cxx" />
-    <ClCompile Include="..\..\src\Fl_Window_iconize.cxx" />
-    <ClCompile Include="..\..\src\Fl_Window_shape.cxx" />
-    <ClCompile Include="..\..\src\Fl_Wizard.cxx" />
-    <ClCompile Include="..\..\src\Fl_x.cxx" />
-    <ClCompile Include="..\..\src\Fl_XBM_Image.cxx" />
-    <ClCompile Include="..\..\src\Fl_XPM_Image.cxx" />
-    <ClCompile Include="..\..\src\flstring.c" />
-    <ClCompile Include="..\..\src\xutf8\is_right2left.c" />
-    <ClCompile Include="..\..\src\xutf8\is_spacing.c" />
-    <ClCompile Include="..\..\src\numericsort.c" />
-    <ClCompile Include="..\..\src\ps_image.cxx" />
-    <ClCompile Include="..\..\src\scandir.c" />
-    <ClCompile Include="..\..\src\screen_xywh.cxx" />
-    <ClCompile Include="..\..\src\vsnprintf.c" />
-  </ItemGroup>
-</Project>
--- a/DoConfig/fltk/ide/VisualC2010/fltk.sln
+++ /dev/null
@@ -1,837 +1,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C++ Express 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "demo", "demo.vcxproj", "{09427220-8C9C-498A-8D50-1638D3FB87E5}"
-	ProjectSection(ProjectDependencies) = postProject
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A} = {BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE} = {9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adjuster", "adjuster.vcxproj", "{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arc", "arc.vcxproj", "{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ask", "ask.vcxproj", "{DB6BAA16-C589-448F-9AB5-5969016549EB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bitmap", "bitmap.vcxproj", "{65B5BB3F-EE54-4604-B49B-7676AED83AAB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "boxtype", "boxtype.vcxproj", "{E212D4B4-63D9-4D8D-84DB-45C8BC191462}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "browser", "browser.vcxproj", "{2352F92C-8663-4637-B919-D76F0A9EC05E}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "button", "button.vcxproj", "{0363AC35-F325-4C24-9DB9-E83337D55787}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buttons", "buttons.vcxproj", "{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checkers", "checkers.vcxproj", "{92EEF887-8305-4D00-86B7-D3F98CC7AD87}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "clock", "clock.vcxproj", "{122160ED-446E-4B15-8CB4-A2058DC7269A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "colbrowser", "colbrowser.vcxproj", "{D0BC7525-99E7-4247-B860-1B3CF2FF8165}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "color_chooser", "color_chooser.vcxproj", "{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cube", "cube.vcxproj", "{0973844B-3E5F-4C38-95FF-E8935243D287}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CubeView", "CubeView.vcxproj", "{E30BB28D-DFA0-479C-B670-8CD872224B38}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cursor", "cursor.vcxproj", "{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curve", "curve.vcxproj", "{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "doublebuffer", "doublebuffer.vcxproj", "{EDDBF169-77C1-496E-9EFE-E500107E6E97}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "editor", "editor.vcxproj", "{0BDAEBF1-7A8D-434B-A543-4663464E972D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fast_slow", "fast_slow.vcxproj", "{2D29D6C9-B4A6-444C-A311-106A9C8A986F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "file_chooser", "file_chooser.vcxproj", "{6927F349-29DF-4D60-BC8F-5A3F5E133735}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltk", "fltk.lib.vcxproj", "{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}"
-	ProjectSection(ProjectDependencies) = postProject
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681} = {D640A221-F95A-40FF-AC0E-0E8B615C7681}
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377} = {08B82852-90B3-4767-A5D2-F0A4FCCB2377}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkdll", "fltkdll.vcxproj", "{F0B8F4BD-955D-43CB-980C-805364D04A25}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkforms", "fltkforms.vcxproj", "{C17BAB42-F00B-4F71-9DF6-A921511C89EE}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkgl", "fltkgl.vcxproj", "{F7974A9C-C255-4385-96BC-E24EE0816F7C}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkimages", "fltkimages.vcxproj", "{6E8E1663-B88D-4454-ADF2-279666A93306}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fluid", "fluid.vcxproj", "{8AED3078-8CD8-40C9-A8FF-46080024F1EB}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F0B8F4BD-955D-43CB-980C-805364D04A25} = {F0B8F4BD-955D-43CB-980C-805364D04A25}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fonts", "fonts.vcxproj", "{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "forms", "forms.vcxproj", "{B1749154-F87B-489D-B4B0-ABD5ED20A96F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fractals", "fractals.vcxproj", "{58A83386-65E6-4F22-8712-8B6B7E62913D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fullscreen", "fullscreen.vcxproj", "{2147B9FD-7D65-4854-9770-D7B8767DB9AE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gl_overlay", "gl_overlay.vcxproj", "{8D8D210D-F628-48BB-9127-D8003DF22018}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glpuzzle", "glpuzzle.vcxproj", "{BFE8CC78-6B58-4305-A096-796A3088BB26}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hello", "hello.vcxproj", "{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "help", "help.vcxproj", "{9F3F86DA-3CC5-481F-8201-166933B5C8FF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iconize", "iconize.vcxproj", "{37C32832-DCE4-4BAA-9306-826064B30CCB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "image", "image.vcxproj", "{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inactive", "inactive.vcxproj", "{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "input", "input.vcxproj", "{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyboard", "keyboard.vcxproj", "{4DFA9F84-0457-4FE4-8008-283270610487}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "label", "label.vcxproj", "{C3E7B77C-EED2-4046-9A30-9446C6F096A0}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "line_style", "line_style.vcxproj", "{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mandelbrot", "mandelbrot.vcxproj", "{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "menubar", "menubar.vcxproj", "{78079B1F-152B-4E83-87CB-364586AB3AAC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "message", "message.vcxproj", "{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minimum", "minimum.vcxproj", "{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "navigation", "navigation.vcxproj", "{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "output", "output.vcxproj", "{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "overlay", "overlay.vcxproj", "{3B0BF144-5D75-4D4A-BF75-7347186C808F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pack", "pack.vcxproj", "{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pixmap", "pixmap.vcxproj", "{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pixmap_browser", "pixmap_browser.vcxproj", "{289C605C-94CC-437F-836B-2FE41528EEEC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "preferences", "preferences.vcxproj", "{D04E36D7-1C68-43E6-BE30-A7793CE3C799}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "radio", "radio.vcxproj", "{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resize", "resize.vcxproj", "{46771042-C840-4314-BA3C-C5BC2FBD7CBB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resizebox", "resizebox.vcxproj", "{2E03AF33-56A1-4366-B016-184CD96F3B56}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "scroll", "scroll.vcxproj", "{97541B63-87AA-4ACE-BBF5-175F8D1389EC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shape", "shape.vcxproj", "{45797F58-624B-4FA0-A7A3-5956114D8215}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "subwindow", "subwindow.vcxproj", "{7A2467D2-B03A-4964-A289-EF233EB39F69}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sudoku", "sudoku.vcxproj", "{AE750416-51BA-485C-BD76-EF11B4536EE8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "symbols", "symbols.vcxproj", "{3E822491-B134-43B0-A40E-9348FFAB527F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tabs", "tabs.vcxproj", "{AF932F77-1804-4DA4-A6DC-950795D6AFC1}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "threads", "threads.vcxproj", "{45236F71-7031-40BC-ADCD-0535A64C04B0}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tile", "tile.vcxproj", "{28D24031-1A17-497A-B926-59CF78076DED}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tiled_image", "tiled_image.vcxproj", "{23F17042-704E-4198-8017-A8584E884CF7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valuators", "valuators.vcxproj", "{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkjpeg", "jpeg.vcxproj", "{08B82852-90B3-4767-A5D2-F0A4FCCB2377}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkzlib", "zlib.vcxproj", "{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fltkpng", "libpng.vcxproj", "{D640A221-F95A-40FF-AC0E-0E8B615C7681}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF} = {E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "input_choice", "input_choice.vcxproj", "{50651D04-C8F7-4C2B-B412-0848573BDF88}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utf8", "utf8.vcxproj", "{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cairo_test", "cairo_test.vcxproj", "{CF98E92E-C789-47E6-A2DA-398EB7991A2B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "table", "table.vcxproj", "{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tree", "tree.vcxproj", "{2C3FB329-620B-41A0-8845-A063C9EA8807}"
-	ProjectSection(ProjectDependencies) = postProject
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB} = {8AED3078-8CD8-40C9-A8FF-46080024F1EB}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blocks", "blocks.vcxproj", "{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rotated_text", "rotated_text.vcxproj", "{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}"
-	ProjectSection(ProjectDependencies) = postProject
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F} = {E070AAFC-9D03-41A3-BC7D-30887EA0D50F}
-	EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "device", "device.vcxproj", "{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "native-filechooser", "native-filechooser.vcxproj", "{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unittests", "unittests.vcxproj", "{86C52ED6-C710-40E6-86A2-61F757B20CF7}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug Cairo|Win32 = Debug Cairo|Win32
-		Debug|Win32 = Debug|Win32
-		Release Cairo|Win32 = Release Cairo|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug|Win32.ActiveCfg = Debug|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Debug|Win32.Build.0 = Debug|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release|Win32.ActiveCfg = Release|Win32
-		{09427220-8C9C-498A-8D50-1638D3FB87E5}.Release|Win32.Build.0 = Release|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Debug|Win32.Build.0 = Debug|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release|Win32.ActiveCfg = Release|Win32
-		{51F6CDA8-3AF3-4DDC-B412-8E5E92F3393B}.Release|Win32.Build.0 = Release|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug|Win32.ActiveCfg = Debug|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Debug|Win32.Build.0 = Debug|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release|Win32.ActiveCfg = Release|Win32
-		{39ADA7A1-A2C1-4F0B-8B92-04E335570C27}.Release|Win32.Build.0 = Release|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Debug|Win32.Build.0 = Debug|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release|Win32.ActiveCfg = Release|Win32
-		{DB6BAA16-C589-448F-9AB5-5969016549EB}.Release|Win32.Build.0 = Release|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Debug|Win32.Build.0 = Debug|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release|Win32.ActiveCfg = Release|Win32
-		{65B5BB3F-EE54-4604-B49B-7676AED83AAB}.Release|Win32.Build.0 = Release|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Debug|Win32.Build.0 = Debug|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release|Win32.ActiveCfg = Release|Win32
-		{E212D4B4-63D9-4D8D-84DB-45C8BC191462}.Release|Win32.Build.0 = Release|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Debug|Win32.Build.0 = Debug|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release|Win32.ActiveCfg = Release|Win32
-		{2352F92C-8663-4637-B919-D76F0A9EC05E}.Release|Win32.Build.0 = Release|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Debug|Win32.Build.0 = Debug|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release|Win32.ActiveCfg = Release|Win32
-		{0363AC35-F325-4C24-9DB9-E83337D55787}.Release|Win32.Build.0 = Release|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Debug|Win32.Build.0 = Debug|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release|Win32.ActiveCfg = Release|Win32
-		{67CE1C24-B0C0-4CD6-8D0F-68513C2398B9}.Release|Win32.Build.0 = Release|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug|Win32.ActiveCfg = Debug|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Debug|Win32.Build.0 = Debug|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release|Win32.ActiveCfg = Release|Win32
-		{92EEF887-8305-4D00-86B7-D3F98CC7AD87}.Release|Win32.Build.0 = Release|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Debug|Win32.Build.0 = Debug|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release|Win32.ActiveCfg = Release|Win32
-		{122160ED-446E-4B15-8CB4-A2058DC7269A}.Release|Win32.Build.0 = Release|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Debug|Win32.Build.0 = Debug|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release|Win32.ActiveCfg = Release|Win32
-		{D0BC7525-99E7-4247-B860-1B3CF2FF8165}.Release|Win32.Build.0 = Release|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Debug|Win32.Build.0 = Debug|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release|Win32.ActiveCfg = Release|Win32
-		{BDACB9FC-6769-4A2D-A636-36CC25E3AC75}.Release|Win32.Build.0 = Release|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Debug|Win32.Build.0 = Debug|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release|Win32.ActiveCfg = Release|Win32
-		{0973844B-3E5F-4C38-95FF-E8935243D287}.Release|Win32.Build.0 = Release|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Debug|Win32.Build.0 = Debug|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release|Win32.ActiveCfg = Release|Win32
-		{E30BB28D-DFA0-479C-B670-8CD872224B38}.Release|Win32.Build.0 = Release|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Debug|Win32.Build.0 = Debug|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release|Win32.ActiveCfg = Release|Win32
-		{0D1DB0EE-E997-4550-85D4-BDE209B75AD6}.Release|Win32.Build.0 = Release|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug|Win32.ActiveCfg = Debug|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Debug|Win32.Build.0 = Debug|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release|Win32.ActiveCfg = Release|Win32
-		{27D45BA6-A403-4A71-B6D6-57DC0CEDCE15}.Release|Win32.Build.0 = Release|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug|Win32.ActiveCfg = Debug|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Debug|Win32.Build.0 = Debug|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release|Win32.ActiveCfg = Release|Win32
-		{EDDBF169-77C1-496E-9EFE-E500107E6E97}.Release|Win32.Build.0 = Release|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Debug|Win32.Build.0 = Debug|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release|Win32.ActiveCfg = Release|Win32
-		{0BDAEBF1-7A8D-434B-A543-4663464E972D}.Release|Win32.Build.0 = Release|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Debug|Win32.Build.0 = Debug|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release|Win32.ActiveCfg = Release|Win32
-		{2D29D6C9-B4A6-444C-A311-106A9C8A986F}.Release|Win32.Build.0 = Release|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Debug|Win32.Build.0 = Debug|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release|Win32.ActiveCfg = Release|Win32
-		{6927F349-29DF-4D60-BC8F-5A3F5E133735}.Release|Win32.Build.0 = Release|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Debug|Win32.Build.0 = Debug|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release|Win32.ActiveCfg = Release|Win32
-		{E070AAFC-9D03-41A3-BC7D-30887EA0D50F}.Release|Win32.Build.0 = Release|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Debug|Win32.Build.0 = Debug|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release|Win32.ActiveCfg = Release|Win32
-		{F0B8F4BD-955D-43CB-980C-805364D04A25}.Release|Win32.Build.0 = Release|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Debug|Win32.Build.0 = Debug|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release|Win32.ActiveCfg = Release|Win32
-		{C17BAB42-F00B-4F71-9DF6-A921511C89EE}.Release|Win32.Build.0 = Release|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Debug|Win32.Build.0 = Debug|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release|Win32.ActiveCfg = Release|Win32
-		{F7974A9C-C255-4385-96BC-E24EE0816F7C}.Release|Win32.Build.0 = Release|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug|Win32.ActiveCfg = Debug|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Debug|Win32.Build.0 = Debug|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release|Win32.ActiveCfg = Release|Win32
-		{6E8E1663-B88D-4454-ADF2-279666A93306}.Release|Win32.Build.0 = Release|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Debug|Win32.Build.0 = Debug|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release|Win32.ActiveCfg = Release|Win32
-		{8AED3078-8CD8-40C9-A8FF-46080024F1EB}.Release|Win32.Build.0 = Release|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Debug|Win32.Build.0 = Debug|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release|Win32.ActiveCfg = Release|Win32
-		{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}.Release|Win32.Build.0 = Release|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Debug|Win32.Build.0 = Debug|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release|Win32.ActiveCfg = Release|Win32
-		{B1749154-F87B-489D-B4B0-ABD5ED20A96F}.Release|Win32.Build.0 = Release|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Debug|Win32.Build.0 = Debug|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release|Win32.ActiveCfg = Release|Win32
-		{58A83386-65E6-4F22-8712-8B6B7E62913D}.Release|Win32.Build.0 = Release|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Debug|Win32.Build.0 = Debug|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release|Win32.ActiveCfg = Release|Win32
-		{2147B9FD-7D65-4854-9770-D7B8767DB9AE}.Release|Win32.Build.0 = Release|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Debug|Win32.Build.0 = Debug|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release|Win32.ActiveCfg = Release|Win32
-		{8D8D210D-F628-48BB-9127-D8003DF22018}.Release|Win32.Build.0 = Release|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Debug|Win32.Build.0 = Debug|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release|Win32.ActiveCfg = Release|Win32
-		{BFE8CC78-6B58-4305-A096-796A3088BB26}.Release|Win32.Build.0 = Release|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Debug|Win32.Build.0 = Debug|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release|Win32.ActiveCfg = Release|Win32
-		{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}.Release|Win32.Build.0 = Release|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Debug|Win32.Build.0 = Debug|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release|Win32.ActiveCfg = Release|Win32
-		{9F3F86DA-3CC5-481F-8201-166933B5C8FF}.Release|Win32.Build.0 = Release|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Debug|Win32.Build.0 = Debug|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release|Win32.ActiveCfg = Release|Win32
-		{37C32832-DCE4-4BAA-9306-826064B30CCB}.Release|Win32.Build.0 = Release|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Debug|Win32.Build.0 = Debug|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release|Win32.ActiveCfg = Release|Win32
-		{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}.Release|Win32.Build.0 = Release|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Debug|Win32.Build.0 = Debug|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release|Win32.ActiveCfg = Release|Win32
-		{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}.Release|Win32.Build.0 = Release|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Debug|Win32.Build.0 = Debug|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release|Win32.ActiveCfg = Release|Win32
-		{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}.Release|Win32.Build.0 = Release|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug|Win32.ActiveCfg = Debug|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Debug|Win32.Build.0 = Debug|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release|Win32.ActiveCfg = Release|Win32
-		{4DFA9F84-0457-4FE4-8008-283270610487}.Release|Win32.Build.0 = Release|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Debug|Win32.Build.0 = Debug|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release|Win32.ActiveCfg = Release|Win32
-		{C3E7B77C-EED2-4046-9A30-9446C6F096A0}.Release|Win32.Build.0 = Release|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug|Win32.ActiveCfg = Debug|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Debug|Win32.Build.0 = Debug|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release|Win32.ActiveCfg = Release|Win32
-		{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}.Release|Win32.Build.0 = Release|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Debug|Win32.Build.0 = Debug|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release|Win32.ActiveCfg = Release|Win32
-		{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}.Release|Win32.Build.0 = Release|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Debug|Win32.Build.0 = Debug|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release|Win32.ActiveCfg = Release|Win32
-		{78079B1F-152B-4E83-87CB-364586AB3AAC}.Release|Win32.Build.0 = Release|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Debug|Win32.Build.0 = Debug|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release|Win32.ActiveCfg = Release|Win32
-		{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}.Release|Win32.Build.0 = Release|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Debug|Win32.Build.0 = Debug|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release|Win32.ActiveCfg = Release|Win32
-		{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}.Release|Win32.Build.0 = Release|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Debug|Win32.Build.0 = Debug|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release|Win32.ActiveCfg = Release|Win32
-		{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}.Release|Win32.Build.0 = Release|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Debug|Win32.Build.0 = Debug|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release|Win32.ActiveCfg = Release|Win32
-		{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}.Release|Win32.Build.0 = Release|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Debug|Win32.Build.0 = Debug|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release|Win32.ActiveCfg = Release|Win32
-		{3B0BF144-5D75-4D4A-BF75-7347186C808F}.Release|Win32.Build.0 = Release|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Debug|Win32.Build.0 = Debug|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release|Win32.ActiveCfg = Release|Win32
-		{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}.Release|Win32.Build.0 = Release|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Debug|Win32.Build.0 = Debug|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release|Win32.ActiveCfg = Release|Win32
-		{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}.Release|Win32.Build.0 = Release|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Debug|Win32.Build.0 = Debug|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release|Win32.ActiveCfg = Release|Win32
-		{289C605C-94CC-437F-836B-2FE41528EEEC}.Release|Win32.Build.0 = Release|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Debug|Win32.Build.0 = Debug|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release|Win32.ActiveCfg = Release|Win32
-		{D04E36D7-1C68-43E6-BE30-A7793CE3C799}.Release|Win32.Build.0 = Release|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Debug|Win32.Build.0 = Debug|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release|Win32.ActiveCfg = Release|Win32
-		{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}.Release|Win32.Build.0 = Release|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug|Win32.ActiveCfg = Debug|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Debug|Win32.Build.0 = Debug|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release|Win32.ActiveCfg = Release|Win32
-		{46771042-C840-4314-BA3C-C5BC2FBD7CBB}.Release|Win32.Build.0 = Release|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Debug|Win32.Build.0 = Debug|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release|Win32.ActiveCfg = Release|Win32
-		{2E03AF33-56A1-4366-B016-184CD96F3B56}.Release|Win32.Build.0 = Release|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug|Win32.ActiveCfg = Debug|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Debug|Win32.Build.0 = Debug|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release|Win32.ActiveCfg = Release|Win32
-		{97541B63-87AA-4ACE-BBF5-175F8D1389EC}.Release|Win32.Build.0 = Release|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug|Win32.ActiveCfg = Debug|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Debug|Win32.Build.0 = Debug|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release|Win32.ActiveCfg = Release|Win32
-		{45797F58-624B-4FA0-A7A3-5956114D8215}.Release|Win32.Build.0 = Release|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug|Win32.ActiveCfg = Debug|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Debug|Win32.Build.0 = Debug|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release|Win32.ActiveCfg = Release|Win32
-		{7A2467D2-B03A-4964-A289-EF233EB39F69}.Release|Win32.Build.0 = Release|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Debug|Win32.Build.0 = Debug|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release|Win32.ActiveCfg = Release|Win32
-		{AE750416-51BA-485C-BD76-EF11B4536EE8}.Release|Win32.Build.0 = Release|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Debug|Win32.Build.0 = Debug|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release|Win32.ActiveCfg = Release|Win32
-		{3E822491-B134-43B0-A40E-9348FFAB527F}.Release|Win32.Build.0 = Release|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Debug|Win32.Build.0 = Debug|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release|Win32.ActiveCfg = Release|Win32
-		{AF932F77-1804-4DA4-A6DC-950795D6AFC1}.Release|Win32.Build.0 = Release|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug|Win32.ActiveCfg = Debug|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Debug|Win32.Build.0 = Debug|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release|Win32.ActiveCfg = Release|Win32
-		{45236F71-7031-40BC-ADCD-0535A64C04B0}.Release|Win32.Build.0 = Release|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug|Win32.ActiveCfg = Debug|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Debug|Win32.Build.0 = Debug|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release|Win32.ActiveCfg = Release|Win32
-		{28D24031-1A17-497A-B926-59CF78076DED}.Release|Win32.Build.0 = Release|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug|Win32.ActiveCfg = Debug|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Debug|Win32.Build.0 = Debug|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release|Win32.ActiveCfg = Release|Win32
-		{23F17042-704E-4198-8017-A8584E884CF7}.Release|Win32.Build.0 = Release|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Debug|Win32.Build.0 = Debug|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release|Win32.ActiveCfg = Release|Win32
-		{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}.Release|Win32.Build.0 = Release|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug|Win32.ActiveCfg = Debug|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Debug|Win32.Build.0 = Debug|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release|Win32.ActiveCfg = Release|Win32
-		{08B82852-90B3-4767-A5D2-F0A4FCCB2377}.Release|Win32.Build.0 = Release|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Debug|Win32.Build.0 = Debug|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release|Win32.ActiveCfg = Release|Win32
-		{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}.Release|Win32.Build.0 = Release|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug|Win32.ActiveCfg = Debug|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Debug|Win32.Build.0 = Debug|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release|Win32.ActiveCfg = Release|Win32
-		{D640A221-F95A-40FF-AC0E-0E8B615C7681}.Release|Win32.Build.0 = Release|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug|Win32.ActiveCfg = Debug|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Debug|Win32.Build.0 = Debug|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release|Win32.ActiveCfg = Release|Win32
-		{50651D04-C8F7-4C2B-B412-0848573BDF88}.Release|Win32.Build.0 = Release|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug|Win32.ActiveCfg = Debug|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Debug|Win32.Build.0 = Debug|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release|Win32.ActiveCfg = Release|Win32
-		{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}.Release|Win32.Build.0 = Release|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Debug|Win32.Build.0 = Debug|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release|Win32.ActiveCfg = Release|Win32
-		{CF98E92E-C789-47E6-A2DA-398EB7991A2B}.Release|Win32.Build.0 = Release|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Debug|Win32.Build.0 = Debug|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release|Win32.ActiveCfg = Release|Win32
-		{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}.Release|Win32.Build.0 = Release|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Debug|Win32.Build.0 = Debug|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release|Win32.ActiveCfg = Release|Win32
-		{2C3FB329-620B-41A0-8845-A063C9EA8807}.Release|Win32.Build.0 = Release|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug|Win32.ActiveCfg = Debug|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Debug|Win32.Build.0 = Debug|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release|Win32.ActiveCfg = Release|Win32
-		{2D92C98B-F186-4BF0-A9D4-51D42C93F6E8}.Release|Win32.Build.0 = Release|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Debug|Win32.Build.0 = Debug|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release|Win32.ActiveCfg = Release|Win32
-		{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}.Release|Win32.Build.0 = Release|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Debug|Win32.ActiveCfg = Debug|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Debug|Win32.Build.0 = Debug|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Release|Win32.ActiveCfg = Release|Win32
-		{BA275A4C-FD92-4AC2-8996-1A32E9BC4E3A}.Release|Win32.Build.0 = Release|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Debug|Win32.ActiveCfg = Debug|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Debug|Win32.Build.0 = Debug|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Release|Win32.ActiveCfg = Release|Win32
-		{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}.Release|Win32.Build.0 = Release|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Debug Cairo|Win32.ActiveCfg = Debug Cairo|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Debug Cairo|Win32.Build.0 = Debug Cairo|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Debug|Win32.ActiveCfg = Debug|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Debug|Win32.Build.0 = Debug|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Release Cairo|Win32.ActiveCfg = Release Cairo|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Release Cairo|Win32.Build.0 = Release Cairo|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Release|Win32.ActiveCfg = Release|Win32
-		{86C52ED6-C710-40E6-86A2-61F757B20CF7}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
--- a/DoConfig/fltk/ide/VisualC2010/fltkdll.vcxproj
+++ /dev/null
@@ -1,2198 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F0B8F4BD-955D-43CB-980C-805364D04A25}</ProjectGuid>
-    <RootNamespace>fltkdll</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>../../test/fltkdll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..;..\..\zlib;..\..\png;..\..\jpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level1</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fltkdll.dll</OutputFile>
-      <Version>1.0</Version>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <ProgramDatabaseFile>fltkdll.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>../../test/fltkdll.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>../../test/fltkdll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;..\..\zlib;..\..\png;..\..\jpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fltkdlld.dll</OutputFile>
-      <Version>1.0</Version>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>fltkdlld.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>../../test/fltkdlld.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>../../test/fltkdll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;../..;..\..\zlib;..\..\png;..\..\jpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fltkdlld/fltkdll.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fltkdlld/</AssemblerListingLocation>
-      <ObjectFileName>.\fltkdlld/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fltkdlld/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fltkdlld.dll</OutputFile>
-      <Version>1.0</Version>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>fltkdlld.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>../../test/fltkdlld.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>../../test/fltkdll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..;..\..\zlib;..\..\png;..\..\jpeg;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fltkdll/fltkdll.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fltkdll/</AssemblerListingLocation>
-      <ObjectFileName>.\fltkdll/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fltkdll/</ProgramDataBaseFileName>
-      <WarningLevel>Level1</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fltkdll.dll</OutputFile>
-      <Version>1.0</Version>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <ProgramDatabaseFile>fltkdll.pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>../../test/fltkdll.lib</ImportLibrary>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\xutf8\case.c" />
-    <ClCompile Include="..\..\src\filename_absolute.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_expand.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_ext.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_isdir.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_list.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_match.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\filename_setext.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_abort.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_add_idle.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Adjuster.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_arc.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_arci.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_arg.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_ask.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Bitmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_BMP_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_boxtype.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Browser_load.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\cairo\Fl_Cairo.cxx">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Chart.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Check_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Check_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Choice.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Clock.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_color.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Color_Chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_compose.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Copy_Surface.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-   </ClCompile>
-   <ClCompile Include="..\..\src\Fl_Counter.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_cursor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_curve.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Device.cxx" />
-    <ClCompile Include="..\..\src\Fl_Dial.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_diamond_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_display.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_dnd.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Double_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw_image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_draw_pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_engraved_label.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Chooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Chooser2.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_file_dir.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Icon.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Icon2.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_get_key.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_get_system_colors.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_GIF_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Gl_Choice.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Gl_Device_Plugin.cxx" />
-    <ClCompile Include="..\..\src\Fl_Gl_Overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Gl_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_grab.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Group.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_gtk.cxx" />
-    <ClCompile Include="..\..\src\fl_gleam.cxx" />
-    <ClCompile Include="..\..\src\Fl_Help_Dialog.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Help_View.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Image_Surface.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_images_core.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Input_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_JPEG_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_labeltype.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Light_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_line_style.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_lock.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_add.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Bar.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_global.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Menu_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Multi_Label.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Native_File_Chooser.cxx" />
-    <ClCompile Include="..\..\src\fl_open_uri.cxx" />
-    <ClCompile Include="..\..\src\fl_oval_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_overlay_visual.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Overlay_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_own_colormap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Pack.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Paged_Device.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_plastic.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PNG_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PNM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Positioner.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PostScript.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Preferences.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Printer.cxx" />
-    <ClCompile Include="..\..\src\Fl_Progress.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_read_image.cxx" />
-    <ClCompile Include="..\..\src\fl_rect.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Repeat_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Return_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Roller.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_round_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Round_Button.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_rounded_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Scroll.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_scroll_area.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Scrollbar.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_set_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_set_fonts.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_shadow_box.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Shared_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_shortcut.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_show_colormap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Single_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Slider.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_symbols.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Table.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Table_Row.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tabs.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Buffer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Display.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Text_Editor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tile.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tiled_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tooltip.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Item.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Item_Array.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Tree_Prefs.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_utf.c" />
-    <ClCompile Include="..\..\src\fl_utf8.cxx" />
-    <ClCompile Include="..\..\src\Fl_Valuator.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Output.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Value_Slider.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_vertex.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_visual.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Widget.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_fullscreen.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_hotspot.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_iconize.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Window_shape.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Wizard.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_x.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_XBM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_XPM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\flstring.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_bitmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_compatability.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_free.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_fselect.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_timer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\freeglut_geometry.cxx" />
-    <ClCompile Include="..\..\src\freeglut_stroke_mono_roman.cxx" />
-    <ClCompile Include="..\..\src\freeglut_stroke_roman.cxx" />
-    <ClCompile Include="..\..\src\freeglut_teapot.cxx" />
-    <ClCompile Include="..\..\src\gl_draw.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\gl_start.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\glut_compatability.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\glut_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\xutf8\is_right2left.c" />
-    <ClCompile Include="..\..\src\xutf8\is_spacing.c" />
-    <ClCompile Include="..\..\src\numericsort.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\ps_image.cxx" />
-    <ClCompile Include="..\..\src\scandir.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\screen_xywh.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\vsnprintf.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_DEPRECATE;FL_DLL;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="pixmap_browser.vcxproj">
-      <Project>{289c605c-94cc-437f-836b-2fe41528eeec}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
--- a/DoConfig/fltk/ide/VisualC2010/fltkforms.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{C17BAB42-F00B-4F71-9DF6-A921511C89EE}</ProjectGuid>
-    <RootNamespace>fltkforms</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/fltkforms.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkformsd.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fltkforms.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkforms.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\forms_bitmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_compatability.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_free.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_fselect.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\forms_timer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fltkgl.vcxproj
+++ /dev/null
@@ -1,292 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F7974A9C-C255-4385-96BC-E24EE0816F7C}</ProjectGuid>
-    <RootNamespace>fltkgl</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/fltkgl.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkgld.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fltkgl.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkgl.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\Fl_Gl_Choice.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Gl_Device_Plugin.cxx" />
-    <ClCompile Include="..\..\src\Fl_Gl_Overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Gl_Window.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\freeglut_geometry.cxx" />
-    <ClCompile Include="..\..\src\freeglut_stroke_mono_roman.cxx" />
-    <ClCompile Include="..\..\src\freeglut_stroke_roman.cxx" />
-    <ClCompile Include="..\..\src\freeglut_teapot.cxx" />
-    <ClCompile Include="..\..\src\gl_draw.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\gl_start.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\glut_compatability.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\glut_font.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fltkimages.vcxproj
+++ /dev/null
@@ -1,303 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{6E8E1663-B88D-4454-ADF2-279666A93306}</ProjectGuid>
-    <RootNamespace>fltkimages</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/fltkimages.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkimagesd.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;FL_LIBRARY;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fltkimages.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkimages.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\src\Fl_BMP_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_File_Icon2.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_GIF_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_Help_Dialog.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\fl_images_core.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_JPEG_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PNG_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\src\Fl_PNM_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">true</BrowseInformation>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fluid.vcxproj
+++ /dev/null
@@ -1,534 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{8AED3078-8CD8-40C9-A8FF-46080024F1EB}</ProjectGuid>
-    <RootNamespace>fluid</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\fluid\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\fluid\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\fluid\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\fluid\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fluid__0/fluid.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../fluid/fluidd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fluid___/fluid.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../fluid/fluid.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fluid__0/fluid.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fluid__0/fluid.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fluid__0/</AssemblerListingLocation>
-      <ObjectFileName>.\fluid__0/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fluid__0/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../fluid/fluidd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fluid___/fluid.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fluid___/fluid.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fluid___/</AssemblerListingLocation>
-      <ObjectFileName>.\fluid___/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fluid___/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../fluid/fluid.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\fluid\about_panel.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\align_widget.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\alignment_panel.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\code.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\CodeEditor.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\ExternalCodeEditor_WIN32.cxx" />
-    <ClCompile Include="..\..\fluid\factory.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\file.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Function_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Group_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Menu_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Widget_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fl_Window_Type.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\fluid.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\Fluid_Image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\function_panel.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\template_panel.cxx" />
-    <ClCompile Include="..\..\fluid\undo.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\fluid\widget_panel.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
--- a/DoConfig/fltk/ide/VisualC2010/fonts.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{DF2A883A-7356-4603-9CB1-E8F1E6B1549D}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fonts_/fonts.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fontsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fonts.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fonts.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fonts_/fonts.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fonts_/fonts.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fonts_/</AssemblerListingLocation>
-      <ObjectFileName>.\fonts_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fonts_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fontsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fonts.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fonts.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fonts.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\fonts.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/forms.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{B1749154-F87B-489D-B4B0-ABD5ED20A96F}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\forms_/forms.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/formsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/forms.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/forms.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\forms_/forms.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\forms_/forms.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\forms_/</AssemblerListingLocation>
-      <ObjectFileName>.\forms_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\forms_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/formsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/forms.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/forms.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/forms.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\forms.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fractals.vcxproj
+++ /dev/null
@@ -1,287 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{58A83386-65E6-4F22-8712-8B6B7E62913D}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fractals_/fractals.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fractalsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fractals.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fractals.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fractals_/fractals.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1; _CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fractals_/fractals.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fractals_/</AssemblerListingLocation>
-      <ObjectFileName>.\fractals_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fractals_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fractalsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fractals.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fractals.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fractals.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\fractals.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\test\fracviewer.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/fullscreen.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2147B9FD-7D65-4854-9770-D7B8767DB9AE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fullscreen_/fullscreen.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fullscreend.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fullscreen.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fullscreen.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\fullscreen_/fullscreen.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\fullscreen_/fullscreen.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\fullscreen_/</AssemblerListingLocation>
-      <ObjectFileName>.\fullscreen_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\fullscreen_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;opengl32.lib;glu32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fullscreend.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/fullscreen.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/fullscreen.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;glu32.lib;fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/fullscreen.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\fullscreen.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/gl_overlay.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{8D8D210D-F628-48BB-9127-D8003DF22018}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/gl_overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/gl_overlay.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\gl_overlay_/gl_overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/gl_overlayd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\gl_overlay_/gl_overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\gl_overlay_/gl_overlay.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\gl_overlay_/</AssemblerListingLocation>
-      <ObjectFileName>.\gl_overlay_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\gl_overlay_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/gl_overlayd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/gl_overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/gl_overlay.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/gl_overlay.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\gl_overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/glpuzzle.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{BFE8CC78-6B58-4305-A096-796A3088BB26}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\glpuzzle_/glpuzzle.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/glpuzzled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/glpuzzle.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/glpuzzle.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\glpuzzle_/glpuzzle.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\glpuzzle_/glpuzzle.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\glpuzzle_/</AssemblerListingLocation>
-      <ObjectFileName>.\glpuzzle_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\glpuzzle_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;glu32.lib;opengl32.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/glpuzzled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/glpuzzle.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/glpuzzle.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/glpuzzle.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\glpuzzle.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/hello.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{ADA2462A-3656-41D2-B8A8-8D942AA0F8E9}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\hello_/hello.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/hellod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/hello.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/hello.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\hello_/hello.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\hello_/hello.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\hello_/</AssemblerListingLocation>
-      <ObjectFileName>.\hello_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\hello_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/hellod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/hello.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/hello.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/hello.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\hello.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/help.vcxproj
+++ /dev/null
@@ -1,287 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{9F3F86DA-3CC5-481F-8201-166933B5C8FF}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/help.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/help.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\help_/help.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/helpd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\help_/help.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\help_/help.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\help_/</AssemblerListingLocation>
-      <ObjectFileName>.\help_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\help_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/helpd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/help.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/help.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/help.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\help.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/iconize.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{37C32832-DCE4-4BAA-9306-826064B30CCB}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\iconize_/iconize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/iconized.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/iconize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/iconize.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\iconize_/iconize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\iconize_/iconize.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\iconize_/</AssemblerListingLocation>
-      <ObjectFileName>.\iconize_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\iconize_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/iconized.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/iconize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/iconize.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/iconize.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\iconize.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/image.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{3322F289-B025-4DB1-A7D1-FBA3840F8A0B}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/image.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\image_/image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/imaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\image_/image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1; _CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\image_/image.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\image_/</AssemblerListingLocation>
-      <ObjectFileName>.\image_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\image_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/imaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/image.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/image.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/inactive.vcxproj
+++ /dev/null
@@ -1,294 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{B5271094-DE51-4E60-B4FA-D8F0BDB969FE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\inactive_/inactive.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inactived.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/inactive.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inactive.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\inactive_/inactive.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\inactive_/inactive.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\inactive_/</AssemblerListingLocation>
-      <ObjectFileName>.\inactive_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\inactive_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inactived.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/inactive.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/inactive.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inactive.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\inactive.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\inactive.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid -c %(Filename).fl
-</Command>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid  %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/input.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{1C1B5A00-5F5D-4290-A07B-8A5A4A78570A}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/input.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\input_/input.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inputd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\input_/input.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\input_/input.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\input_/</AssemblerListingLocation>
-      <ObjectFileName>.\input_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\input_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/inputd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/input.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/input.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\input.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/input_choice.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{50651D04-C8F7-4C2B-B412-0848573BDF88}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\input_choice_/input_choice.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input_choiced.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/input_choice.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input_choice.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\input_choice_/input_choice.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\input_choice_/input_choice.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\input_choice_/</AssemblerListingLocation>
-      <ObjectFileName>.\input_choice_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\input_choice_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input_choiced.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/input_choice.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/input_choice.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/input_choice.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\input_choice.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/jpeg.vcxproj
+++ /dev/null
@@ -1,823 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{08B82852-90B3-4767-A5D2-F0A4FCCB2377}</ProjectGuid>
-    <ProjectName>fltkjpeg</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/jpeg.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkjpegd.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/jpeg.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkjpeg.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\jpeg\jcapimin.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcapistd.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jccoefct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jccolor.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcdctmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jchuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcinit.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcmainct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcmarker.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcmaster.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcomapi.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcparam.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jaricom.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcarith.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdarith.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcprepct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jcsample.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jctrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdapimin.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdapistd.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdatadst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdatasrc.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdcoefct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdcolor.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jddctmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdhuff.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdinput.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdmainct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdmarker.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdmaster.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdmerge.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdpostct.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdsample.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jdtrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jerror.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jfdctflt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jfdctfst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jfdctint.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jidctflt.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jidctfst.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jidctint.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jmemmgr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jmemnobs.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebugDLL</RuntimeLibrary>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">MultiThreadedDLL</RuntimeLibrary>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jquant1.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jquant2.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\jpeg\jutils.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/keyboard.vcxproj
+++ /dev/null
@@ -1,307 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{4DFA9F84-0457-4FE4-8008-283270610487}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/keyboard.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/keyboard.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\keyboard_/keyboard.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/keyboardd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\keyboard_/keyboard.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\keyboard_/keyboard.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\keyboard_/</AssemblerListingLocation>
-      <ObjectFileName>.\keyboard_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\keyboard_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/keyboardd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/keyboard.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/keyboard.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/keyboard.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\keyboard.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\test\keyboard_ui.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\keyboard_ui.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/label.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{C3E7B77C-EED2-4046-9A30-9446C6F096A0}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\label_/label.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/labeld.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/label.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/label.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\label_/label.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\label_/label.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\label_/</AssemblerListingLocation>
-      <ObjectFileName>.\label_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\label_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/labeld.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/label.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/label.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/label.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\label.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/libpng.vcxproj
+++ /dev/null
@@ -1,385 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{D640A221-F95A-40FF-AC0E-0E8B615C7681}</ProjectGuid>
-    <ProjectName>fltkpng</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/libpng.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkpngd.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/libpng.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\fltkpng.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\png\png.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngerror.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngget.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngmem.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngpread.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngread.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngrio.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngrtran.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngrutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngset.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngtrans.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngwio.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngwrite.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngwtran.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\png\pngwutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/line_style.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{8B25CCE0-0988-4999-AE65-5A5EE31BB44D}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/line_style.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/line_style.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\line_style_/line_style.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/line_styled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\line_style_/line_style.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\line_style_/line_style.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\line_style_/</AssemblerListingLocation>
-      <ObjectFileName>.\line_style_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\line_style_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/line_styled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/line_style.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/line_style.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/line_style.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\line_style.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/mandelbrot.vcxproj
+++ /dev/null
@@ -1,307 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{7BBECC0F-9381-4BF2-87CA-3FD1DA93DEAF}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\mandelbrot_/mandelbrot.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/mandelbrotd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/mandelbrot.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/mandelbrot.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\mandelbrot_/mandelbrot.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\mandelbrot_/mandelbrot.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\mandelbrot_/</AssemblerListingLocation>
-      <ObjectFileName>.\mandelbrot_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\mandelbrot_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;glu32.lib;opengl32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/mandelbrotd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/mandelbrot.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/mandelbrot.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>glu32.lib;opengl32.lib;fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/mandelbrot.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\mandelbrot.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\test\mandelbrot_ui.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\mandelbrot_ui.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/menubar.vcxproj
+++ /dev/null
@@ -1,267 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{78079B1F-152B-4E83-87CB-364586AB3AAC}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\menubar_/menubar.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/menubard.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/menubar.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/menubar.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\menubar_/menubar.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\menubar_/menubar.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\menubar_/</AssemblerListingLocation>
-      <ObjectFileName>.\menubar_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\menubar_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/menubard.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/menubar.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/menubar.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/menubar.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\menubar.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/message.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E1A8934E-CB8D-4F74-B78A-EC7952BC4CBE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\message_/message.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/messaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/message.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/message.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\message_/message.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\message_/message.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\message_/</AssemblerListingLocation>
-      <ObjectFileName>.\message_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\message_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/messaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/message.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/message.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/message.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\message.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/minimum.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{F658ABE4-7FE1-4404-9B7C-55E0D660F1B3}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/minimum.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/minimum.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\minimum_/minimum.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/minimumd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\minimum_/minimum.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\minimum_/minimum.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\minimum_/</AssemblerListingLocation>
-      <ObjectFileName>.\minimum_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\minimum_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/minimumd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/minimum.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/minimum.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/minimum.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\minimum.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/native-filechooser.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{9CF889F1-AEFE-43BA-BA18-B2B09EF8ADEE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/native-filechooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/native-filechooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\native-filechooser_/native-filechooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/native-filechooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\native-filechooser_/native-filechooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\native-filechooser_/native-filechooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\native-filechooser_/</AssemblerListingLocation>
-      <ObjectFileName>.\native-filechooser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\native-filechooser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/native-filechooserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/native-filechooser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/native-filechooser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/native-filechooser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\native-filechooser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/navigation.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{AA0ED6EA-2DA3-4486-AFBD-76CC9D206A1E}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/navigation.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/navigation.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\navigation_/navigation.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/navigationd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\navigation_/navigation.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\navigation_/navigation.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\navigation_/</AssemblerListingLocation>
-      <ObjectFileName>.\navigation_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\navigation_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/navigationd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/navigation.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/navigation.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/navigation.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\navigation.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/output.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{1CA77C94-5785-4B38-B91A-1EAFBD885BC2}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/output.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/output.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\output_/output.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/outputd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\output_/output.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\output_/output.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\output_/</AssemblerListingLocation>
-      <ObjectFileName>.\output_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\output_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/outputd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/output.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/output.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/output.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\output.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkforms.vcxproj">
-      <Project>{c17bab42-f00b-4f71-9df6-a921511c89ee}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/overlay.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{3B0BF144-5D75-4D4A-BF75-7347186C808F}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\overlay_/overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/overlayd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/overlay.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\overlay_/overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\overlay_/overlay.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\overlay_/</AssemblerListingLocation>
-      <ObjectFileName>.\overlay_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\overlay_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/overlayd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/overlay.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/overlay.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/overlay.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\overlay.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/pack.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{CEB7B88B-3AA5-4DD6-818F-CF19E12BF1E1}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pack_/pack.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/packd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pack.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pack.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pack_/pack.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\pack_/pack.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\pack_/</AssemblerListingLocation>
-      <ObjectFileName>.\pack_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\pack_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/packd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pack.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/pack.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pack.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\pack.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/pixmap.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{1CD667DD-E7AE-4F36-A1F7-F41FB59786BE}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pixmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pixmap_/pixmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmapd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pixmap_/pixmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\pixmap_/pixmap.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\pixmap_/</AssemblerListingLocation>
-      <ObjectFileName>.\pixmap_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\pixmap_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmapd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pixmap.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/pixmap.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\pixmap.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/pixmap_browser.vcxproj
+++ /dev/null
@@ -1,287 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{289C605C-94CC-437F-836B-2FE41528EEEC}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pixmap_browser_/pixmap_browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap_browserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pixmap_browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap_browser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\pixmap_browser_/pixmap_browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\pixmap_browser_/pixmap_browser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\pixmap_browser_/</AssemblerListingLocation>
-      <ObjectFileName>.\pixmap_browser_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\pixmap_browser_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap_browserd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmtd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/pixmap_browser.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/pixmap_browser.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/pixmap_browser.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcmt;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\pixmap_browser.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/preferences.vcxproj
+++ /dev/null
@@ -1,295 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{D04E36D7-1C68-43E6-BE30-A7793CE3C799}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\preferences_/preferences.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/preferencesd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/preferences.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/preferences.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\preferences_/preferences.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\preferences_/preferences.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\preferences_/</AssemblerListingLocation>
-      <ObjectFileName>.\preferences_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\preferences_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/preferencesd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/preferences.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/preferences.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/preferences.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\preferences.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\preferences.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/radio.vcxproj
+++ /dev/null
@@ -1,295 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{AD5ACED4-F6EE-4AC0-B502-23CFD10EF603}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/radio.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/radio.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\radio_/radio.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/radiod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\radio_/radio.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\radio_/radio.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\radio_/</AssemblerListingLocation>
-      <ObjectFileName>.\radio_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\radio_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/radiod.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/radio.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/radio.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/radio.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\radio.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\radio.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/resize.vcxproj
+++ /dev/null
@@ -1,295 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{46771042-C840-4314-BA3C-C5BC2FBD7CBB}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\resize_/resize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resized.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/resize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resize.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\resize_/resize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\resize_/resize.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\resize_/</AssemblerListingLocation>
-      <ObjectFileName>.\resize_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\resize_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resized.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/resize.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/resize.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resize.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\resize.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\resize.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/resizebox.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2E03AF33-56A1-4366-B016-184CD96F3B56}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\resizebox_/resizebox.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resizeboxd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/resizebox.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resizebox.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\resizebox_/resizebox.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\resizebox_/resizebox.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\resizebox_/</AssemblerListingLocation>
-      <ObjectFileName>.\resizebox_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\resizebox_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resizeboxd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/resizebox.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/resizebox.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/resizebox.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\resizebox.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/rotated_text.vcxproj
+++ /dev/null
@@ -1,265 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E88CCAF5-5DB9-4A46-8C91-97C5697F167A}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\rotated_text_/rotated_text.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/rotated_textd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/rotated_text.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/rotated_text.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\rotated_text_/rotated_text.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\rotated_text_/rotated_text.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\rotated_text_/</AssemblerListingLocation>
-      <ObjectFileName>.\rotated_text_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\rotated_text_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/rotated_textd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/rotated_text.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/rotated_text.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/rotated_text.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\rotated_text.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/scroll.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{97541B63-87AA-4ACE-BBF5-175F8D1389EC}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/scroll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/scroll.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\scroll_/scroll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/scrolld.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\scroll_/scroll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\scroll_/scroll.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\scroll_/</AssemblerListingLocation>
-      <ObjectFileName>.\scroll_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\scroll_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/scrolld.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/scroll.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/scroll.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/scroll.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\scroll.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/shape.vcxproj
+++ /dev/null
@@ -1,275 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{45797F58-624B-4FA0-A7A3-5956114D8215}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/shape.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/shape.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\shape_/shape.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/shaped.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\shape_/shape.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\shape_/shape.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\shape_/</AssemblerListingLocation>
-      <ObjectFileName>.\shape_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\shape_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;opengl32.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/shaped.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/shape.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/shape.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>opengl32.lib;fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/shape.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\shape.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkgl.vcxproj">
-      <Project>{f7974a9c-c255-4385-96bc-e24ee0816f7c}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/subwindow.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{7A2467D2-B03A-4964-A289-EF233EB39F69}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/subwindow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/subwindow.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\subwindow_/subwindow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/subwindowd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\subwindow_/subwindow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\subwindow_/subwindow.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\subwindow_/</AssemblerListingLocation>
-      <ObjectFileName>.\subwindow_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\subwindow_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/subwindowd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/subwindow.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/subwindow.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/subwindow.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\subwindow.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/sudoku.vcxproj
+++ /dev/null
@@ -1,293 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{AE750416-51BA-485C-BD76-EF11B4536EE8}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\sudoku_/sudoku.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/sudokud.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/sudoku.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/sudoku.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\sudoku_/sudoku.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\sudoku_/sudoku.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\sudoku_/</AssemblerListingLocation>
-      <ObjectFileName>.\sudoku_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\sudoku_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/sudokud.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/sudoku.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/sudoku.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;winmm.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/sudoku.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\sudoku.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\..\test\sudoku.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\test\sudokurc.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fltkimages.vcxproj">
-      <Project>{6e8e1663-b88d-4454-adf2-279666a93306}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="jpeg.vcxproj">
-      <Project>{08b82852-90b3-4767-a5d2-f0a4fccb2377}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="libpng.vcxproj">
-      <Project>{d640a221-f95a-40ff-ac0e-0e8b615c7681}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="zlib.vcxproj">
-      <Project>{e1d9ce3f-400d-40e8-ad0d-61c29b1847ff}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/symbols.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{3E822491-B134-43B0-A40E-9348FFAB527F}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\symbols_/symbols.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/symbolsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/symbols.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/symbols.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\symbols_/symbols.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\symbols_/symbols.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\symbols_/</AssemblerListingLocation>
-      <ObjectFileName>.\symbols_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\symbols_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/symbolsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/symbols.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/symbols.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/symbols.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\symbols.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/table.vcxproj
+++ /dev/null
@@ -1,272 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{33331FB8-2AF9-4D15-BEE3-5F69658A6F1F}</ProjectGuid>
-    <RootNamespace>table</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\table_/table.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/table.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/table.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\table_/table.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\table_/table.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\table_/</AssemblerListingLocation>
-      <ObjectFileName>.\table_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\table_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/table.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/table.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/table.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\table.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/tabs.vcxproj
+++ /dev/null
@@ -1,296 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{AF932F77-1804-4DA4-A6DC-950795D6AFC1}</ProjectGuid>
-    <RootNamespace>tabs</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tabs_/tabs.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tabs.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tabs_/tabs.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\tabs_/tabs.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\tabs_/</AssemblerListingLocation>
-      <ObjectFileName>.\tabs_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\tabs_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tabs.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/tabs.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tabs.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\tabs.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\tabs.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create %(Filename).cxx and %(Filename).h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/threads.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{45236F71-7031-40BC-ADCD-0535A64C04B0}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\threads_/threads.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/threadsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/threads.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/threads.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\threads_/threads.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\threads_/threads.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\threads_/</AssemblerListingLocation>
-      <ObjectFileName>.\threads_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\threads_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/threadsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/threads.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/threads.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/threads.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\threads.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/tile.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{28D24031-1A17-497A-B926-59CF78076DED}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tile.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tile.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tile_/tile.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tile_/tile.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\tile_/tile.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\tile_/</AssemblerListingLocation>
-      <ObjectFileName>.\tile_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\tile_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tile.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/tile.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tile.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\tile.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/tiled_image.vcxproj
+++ /dev/null
@@ -1,271 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{23F17042-704E-4198-8017-A8584E884CF7}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tiled_image_/tiled_image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled_imaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tiled_image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled_image.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tiled_image_/tiled_image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\tiled_image_/tiled_image.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\tiled_image_/</AssemblerListingLocation>
-      <ObjectFileName>.\tiled_image_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\tiled_image_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled_imaged.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tiled_image.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/tiled_image.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tiled_image.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\tiled_image.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/tree.vcxproj
+++ /dev/null
@@ -1,289 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2C3FB329-620B-41A0-8845-A063C9EA8807}</ProjectGuid>
-    <RootNamespace>tree</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tree_/tree.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/treed.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tree.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tree.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\tree_/tree.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\tree_/tree.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\tree_/</AssemblerListingLocation>
-      <ObjectFileName>.\tree_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\tree_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/treed.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/tree.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/tree.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/tree.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\tree.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\tree.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create %(Filename).cxx and %(Filename).h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create %(Filename).cxx and %(Filename).h file with fluid</Message>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl</Command>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid /D %(Filename).fl</Command>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create %(Filename).cxx and %(Filename).h file with fluid</Message>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create %(Filename).cxx and %(Filename).h file with fluid</Message>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/unittests.vcxproj
+++ /dev/null
@@ -1,272 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{86C52ED6-C710-40E6-86A2-61F757B20CF7}</ProjectGuid>
-    <RootNamespace>unittests</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\unittests_/unittests.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/unittestsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/unittests.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/unittests.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\unittests_/unittests.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\unittests_/unittests.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\unittests_/</AssemblerListingLocation>
-      <ObjectFileName>.\unittests_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\unittests_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/unittestsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/unittests.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/unittests.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;imm32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/unittests.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\unittests.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/utf8.vcxproj
+++ /dev/null
@@ -1,272 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{ADA2462A-3656-41D2-B7A8-8D942AA0F8F9}</ProjectGuid>
-    <RootNamespace>utf8</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\utf8_/utf8.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/utf8d.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/utf8.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/utf8.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\utf8_/utf8.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\utf8_/utf8.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\utf8_/</AssemblerListingLocation>
-      <ObjectFileName>.\utf8_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\utf8_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/utf8d.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/utf8.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/utf8.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;imm32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/utf8.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\utf8.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/valuators.vcxproj
+++ /dev/null
@@ -1,294 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{CEE12ACB-20E4-45E4-AD5E-D15D7CFF68C3}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\test\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(Configuration)\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">false</LinkIncremental>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\valuators_/valuators.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/valuatorsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/valuators.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/valuators.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\valuators_/valuators.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\valuators_/valuators.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\valuators_/</AssemblerListingLocation>
-      <ObjectFileName>.\valuators_/</ObjectFileName>
-      <ProgramDataBaseFileName>.\valuators_/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>cairo.lib;fltkd.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/valuatorsd.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\Release/valuators.tlb</TypeLibraryName>
-      <HeaderFileName>
-      </HeaderFileName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/valuators.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Link>
-      <AdditionalDependencies>fltk.lib;comctl32.lib;cairo.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <OutputFile>../../test/valuators.exe</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <AdditionalLibraryDirectories>..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>libcd;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
-      <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
-      <SubSystem>Windows</SubSystem>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\test\valuators.cxx">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="..\..\test\valuators.fl">
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">cfluid /D %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create .cxx and .h file with fluidd</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cfluid /D %(Filename).fl</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create .cxx and .h file with fluid</Message>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cfluid %(Filename).fl
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../test/%(Filename).cxx;%(Outputs)</Outputs>
-    </CustomBuild>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="fltk.lib.vcxproj">
-      <Project>{e070aafc-9d03-41a3-bc7d-30887ea0d50f}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-    <ProjectReference Include="fluid.vcxproj">
-      <Project>{8aed3078-8cd8-40c9-a8ff-46080024f1eb}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC2010/zlib.vcxproj
+++ /dev/null
@@ -1,320 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug Cairo|Win32">
-      <Configuration>Debug Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release Cairo|Win32">
-      <Configuration>Release Cairo</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{E1D9CE3F-400D-40E8-AD0D-61C29B1847FF}</ProjectGuid>
-    <ProjectName>fltkzlib</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\$(ProjectName)_release\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">.\$(ProjectName)_debug\</IntDir>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">.\$(ProjectName)_release\</IntDir>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName)d</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName)</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">$(ProjectName)</TargetName>
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">$(ProjectName)d</TargetName>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
-      <ObjectFileName>$(IntDir)</ObjectFileName>
-      <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>FLTK_HAVE_CAIRO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Debug/zlib.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName)d.lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories>.;..\..\zlib;..\..\png;..\..\jpeg;../..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <PrecompiledHeaderOutputFile>.\Release/zlib.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <Culture>0x0409</Culture>
-    </ResourceCompile>
-    <Lib>
-      <OutputFile>..\..\lib\$(ProjectName).lib</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\zlib\adler32.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\compress.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\crc32.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\deflate.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\gzclose.c" />
-    <ClCompile Include="..\..\zlib\gzlib.c" />
-    <ClCompile Include="..\..\zlib\gzread.c" />
-    <ClCompile Include="..\..\zlib\gzwrite.c" />
-    <ClCompile Include="..\..\zlib\infback.c" />
-    <ClCompile Include="..\..\zlib\inffast.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\inflate.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\inftrees.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\trees.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\uncompr.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <ClCompile Include="..\..\zlib\zutil.c">
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Cairo|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Neither</FavorSizeOrSpeed>
-      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
--- a/DoConfig/fltk/ide/VisualC6/CubeView.dsp
+++ /dev/null
@@ -1,136 +1,0 @@
-# Microsoft Developer Studio Project File - Name="CubeView" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=CubeView - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "CubeView.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "CubeView.mak" CFG="CubeView - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "CubeView - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "CubeView - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "CubeView - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/CubeView"
-# PROP BASE Intermediate_Dir "Release/CubeView"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/CubeView"
-# PROP Intermediate_Dir "Release/CubeView"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/CubeView.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "CubeView - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/CubeView"
-# PROP BASE Intermediate_Dir "Debug/CubeView"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/CubeView"
-# PROP Intermediate_Dir "Debug/CubeView"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/CubeViewd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "CubeView - Win32 Release"
-# Name "CubeView - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\CubeView.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\CubeMain.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\CubeViewUI.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\CubeViewUI.fl
-
-!IF  "$(CFG)" == "CubeView - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\CubeViewUI.fl
-
-"..\..\test\CubeViewUI.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c CubeViewUI.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "CubeView - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\CubeViewUI.fl
-
-"..\..\test\CubeViewUI.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c CubeViewUI.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/Demo.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="Demo" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=Demo - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "Demo.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "Demo.mak" CFG="Demo - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "Demo - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "Demo - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "Demo - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/Demo"
-# PROP BASE Intermediate_Dir "Release/Demo"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/Demo"
-# PROP Intermediate_Dir "Release/Demo"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/Demo.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "Demo - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/Demo"
-# PROP BASE Intermediate_Dir "Debug/Demo"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/Demo"
-# PROP Intermediate_Dir "Debug/Demo"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/Demod.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "Demo - Win32 Release"
-# Name "Demo - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\demo.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/Fluid.dsp
+++ /dev/null
@@ -1,173 +1,0 @@
-# Microsoft Developer Studio Project File - Name="Fluid" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=Fluid - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "Fluid.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "Fluid.mak" CFG="Fluid - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "Fluid - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "Fluid - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "Fluid - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/Fluid"
-# PROP BASE Intermediate_Dir "Release/Fluid"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/Fluid"
-# PROP Intermediate_Dir "Release/Fluid"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_forms.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../Fluid/Fluid.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "Fluid - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/Fluid"
-# PROP BASE Intermediate_Dir "Debug/Fluid"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/Fluid"
-# PROP Intermediate_Dir "Debug/Fluid"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_formsd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../Fluid/Fluidd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "Fluid - Win32 Release"
-# Name "Fluid - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\fluid\CodeEditor.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Function_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Group_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Menu_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Widget_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fl_Window_Type.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\Fluid_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\about_panel.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\align_widget.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\alignment_panel.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\code.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\factory.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\file.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\ExternalCodeEditor_WIN32.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\fluid.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\function_panel.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\template_panel.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\undo.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\fluid\widget_panel.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/adjuster.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="adjuster" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=adjuster - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "adjuster.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "adjuster.mak" CFG="adjuster - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "adjuster - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "adjuster - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "adjuster - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/adjuster"
-# PROP BASE Intermediate_Dir "Release/adjuster"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/adjuster"
-# PROP Intermediate_Dir "Release/adjuster"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/adjuster.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "adjuster - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/adjuster"
-# PROP BASE Intermediate_Dir "Debug/adjuster"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/adjuster"
-# PROP Intermediate_Dir "Debug/adjuster"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/adjusterd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "adjuster - Win32 Release"
-# Name "adjuster - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\adjuster.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/arc.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="arc" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=arc - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "arc.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "arc.mak" CFG="arc - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "arc - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "arc - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "arc - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/arc"
-# PROP BASE Intermediate_Dir "Release/arc"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/arc"
-# PROP Intermediate_Dir "Release/arc"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/arc.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "arc - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/arc"
-# PROP BASE Intermediate_Dir "Debug/arc"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/arc"
-# PROP Intermediate_Dir "Debug/arc"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/arcd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "arc - Win32 Release"
-# Name "arc - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\arc.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/ask.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="ask" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=ask - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "ask.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "ask.mak" CFG="ask - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "ask - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "ask - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "ask - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/ask"
-# PROP BASE Intermediate_Dir "Release/ask"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/ask"
-# PROP Intermediate_Dir "Release/ask"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/ask.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "ask - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/ask"
-# PROP BASE Intermediate_Dir "Debug/ask"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/ask"
-# PROP Intermediate_Dir "Debug/ask"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/askd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "ask - Win32 Release"
-# Name "ask - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\ask.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/bitmap.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="bitmap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=bitmap - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "bitmap.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "bitmap.mak" CFG="bitmap - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "bitmap - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "bitmap - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "bitmap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/bitmap"
-# PROP BASE Intermediate_Dir "Release/bitmap"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/bitmap"
-# PROP Intermediate_Dir "Release/bitmap"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/bitmap.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "bitmap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/bitmap"
-# PROP BASE Intermediate_Dir "Debug/bitmap"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/bitmap"
-# PROP Intermediate_Dir "Debug/bitmap"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/bitmapd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "bitmap - Win32 Release"
-# Name "bitmap - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\bitmap.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/blocks.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="blocks" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=blocks - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "blocks.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "blocks.mak" CFG="blocks - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "blocks - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "blocks - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "blocks - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/blocks"
-# PROP BASE Intermediate_Dir "Release/blocks"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/blocks"
-# PROP Intermediate_Dir "Release/blocks"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/blocks.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "blocks - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/blocks"
-# PROP BASE Intermediate_Dir "Debug/blocks"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/blocks"
-# PROP Intermediate_Dir "Debug/blocks"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/blocksd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "blocks - Win32 Release"
-# Name "blocks - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\blocks.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/boxtype.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="boxtype" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=boxtype - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "boxtype.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "boxtype.mak" CFG="boxtype - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "boxtype - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "boxtype - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "boxtype - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/boxtype"
-# PROP BASE Intermediate_Dir "Release/boxtype"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/boxtype"
-# PROP Intermediate_Dir "Release/boxtype"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/boxtype.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "boxtype - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/boxtype"
-# PROP BASE Intermediate_Dir "Debug/boxtype"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/boxtype"
-# PROP Intermediate_Dir "Debug/boxtype"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/boxtyped.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "boxtype - Win32 Release"
-# Name "boxtype - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\boxtype.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/browser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="browser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=browser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "browser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "browser.mak" CFG="browser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "browser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "browser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "browser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/browser"
-# PROP BASE Intermediate_Dir "Release/browser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/browser"
-# PROP Intermediate_Dir "Release/browser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/browser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "browser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/browser"
-# PROP BASE Intermediate_Dir "Debug/browser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/browser"
-# PROP Intermediate_Dir "Debug/browser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/browserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "browser - Win32 Release"
-# Name "browser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\browser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/button.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="button" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=button - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "button.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "button.mak" CFG="button - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "button - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "button - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "button - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/button"
-# PROP BASE Intermediate_Dir "Release/button"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/button"
-# PROP Intermediate_Dir "Release/button"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/button.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "button - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/button"
-# PROP BASE Intermediate_Dir "Debug/button"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/button"
-# PROP Intermediate_Dir "Debug/button"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/buttond.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "button - Win32 Release"
-# Name "button - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\button.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/buttons.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="buttons" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=buttons - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "buttons.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "buttons.mak" CFG="buttons - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "buttons - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "buttons - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "buttons - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/buttons"
-# PROP BASE Intermediate_Dir "Release/buttons"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/buttons"
-# PROP Intermediate_Dir "Release/buttons"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/buttons.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "buttons - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/buttons"
-# PROP BASE Intermediate_Dir "Debug/buttons"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/buttons"
-# PROP Intermediate_Dir "Debug/buttons"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/buttonsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "buttons - Win32 Release"
-# Name "buttons - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\buttons.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/checkers.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="checkers" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=checkers - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "checkers.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "checkers.mak" CFG="checkers - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "checkers - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "checkers - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "checkers - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/checkers"
-# PROP BASE Intermediate_Dir "Release/checkers"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/checkers"
-# PROP Intermediate_Dir "Release/checkers"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/checkers.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "checkers - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/checkers"
-# PROP BASE Intermediate_Dir "Debug/checkers"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/checkers"
-# PROP Intermediate_Dir "Debug/checkers"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/checkersd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "checkers - Win32 Release"
-# Name "checkers - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\checkers.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/clock.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="clock" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=clock - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "clock.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "clock.mak" CFG="clock - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "clock - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "clock - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "clock - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/clock"
-# PROP BASE Intermediate_Dir "Release/clock"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/clock"
-# PROP Intermediate_Dir "Release/clock"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/clock.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "clock - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/clock"
-# PROP BASE Intermediate_Dir "Debug/clock"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/clock"
-# PROP Intermediate_Dir "Debug/clock"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/clockd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "clock - Win32 Release"
-# Name "clock - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\clock.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/colbrowser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="colbrowser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=colbrowser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "colbrowser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "colbrowser.mak" CFG="colbrowser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "colbrowser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "colbrowser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "colbrowser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/colbrowser"
-# PROP BASE Intermediate_Dir "Release/colbrowser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/colbrowser"
-# PROP Intermediate_Dir "Release/colbrowser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_forms.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/colbrowser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "colbrowser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/colbrowser"
-# PROP BASE Intermediate_Dir "Debug/colbrowser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/colbrowser"
-# PROP Intermediate_Dir "Debug/colbrowser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_formsd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/colbrowserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "colbrowser - Win32 Release"
-# Name "colbrowser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\colbrowser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/color_chooser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="color_chooser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=color_chooser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "color_chooser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "color_chooser.mak" CFG="color_chooser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "color_chooser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "color_chooser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "color_chooser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/color_chooser"
-# PROP BASE Intermediate_Dir "Release/color_chooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/color_chooser"
-# PROP Intermediate_Dir "Release/color_chooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/color_chooser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "color_chooser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/color_chooser"
-# PROP BASE Intermediate_Dir "Debug/color_chooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/color_chooser"
-# PROP Intermediate_Dir "Debug/color_chooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/color_chooserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "color_chooser - Win32 Release"
-# Name "color_chooser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\color_chooser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/config.h
+++ /dev/null
@@ -1,33 +1,0 @@
-/*
- * "$Id: ide_visualc.cxx 7586 2010-05-03 20:10:13Z ianmacarthur $"
- */
-#define FLTK_DATADIR "C:/FLTK"
-#define FLTK_DOCDIR "C:/FLTK/DOC"
-#define BORDER_WIDTH 2
-#define HAVE_GL 1
-#define HAVE_GL_GLU_H 1
-#define USE_COLORMAP 1
-#define HAVE_XDBE 0
-#define USE_XDBE HAVE_XDBE
-#define HAVE_OVERLAY 0
-#define HAVE_GL_OVERLAY 1
-#define WORDS_BIGENDIAN 0
-#define U16 unsigned short
-#define U32 unsigned
-#undef U64
-#undef HAVE_VSNPRINTF
-#undef HAVE_SNPRINTF
-#define HAVE_STRCASECMP 1
-#define HAVE_LOCALE_H 1
-#define HAVE_LOCALECONV 1
-#define HAVE_POLL 0
-#define HAVE_LIBPNG
-#define HAVE_LIBZ
-#define HAVE_LIBJPEG
-#define HAVE_PNG_H
-#undef HAVE_LIBPNG_PNG_H
-#define HAVE_PNG_GET_VALID
-#define HAVE_PNG_SET_TRNS_TO_ALPHA
-/*
- * End of "$Id: ide_visualc.cxx 7586 2010-05-03 20:10:13Z ianmacarthur $".
- */
--- a/DoConfig/fltk/ide/VisualC6/cube.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="cube" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=cube - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "cube.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "cube.mak" CFG="cube - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "cube - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "cube - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "cube - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/cube"
-# PROP BASE Intermediate_Dir "Release/cube"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/cube"
-# PROP Intermediate_Dir "Release/cube"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/cube.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "cube - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/cube"
-# PROP BASE Intermediate_Dir "Debug/cube"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/cube"
-# PROP Intermediate_Dir "Debug/cube"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/cubed.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "cube - Win32 Release"
-# Name "cube - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\cube.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/cursor.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="cursor" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=cursor - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "cursor.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "cursor.mak" CFG="cursor - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "cursor - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "cursor - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "cursor - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/cursor"
-# PROP BASE Intermediate_Dir "Release/cursor"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/cursor"
-# PROP Intermediate_Dir "Release/cursor"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/cursor.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "cursor - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/cursor"
-# PROP BASE Intermediate_Dir "Debug/cursor"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/cursor"
-# PROP Intermediate_Dir "Debug/cursor"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/cursord.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "cursor - Win32 Release"
-# Name "cursor - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\cursor.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/curve.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="curve" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=curve - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "curve.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "curve.mak" CFG="curve - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "curve - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "curve - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "curve - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/curve"
-# PROP BASE Intermediate_Dir "Release/curve"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/curve"
-# PROP Intermediate_Dir "Release/curve"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/curve.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "curve - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/curve"
-# PROP BASE Intermediate_Dir "Debug/curve"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/curve"
-# PROP Intermediate_Dir "Debug/curve"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/curved.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "curve - Win32 Release"
-# Name "curve - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\curve.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/device.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="device" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=device - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "device.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "device.mak" CFG="device - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "device - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "device - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "device - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/device"
-# PROP BASE Intermediate_Dir "Release/device"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/device"
-# PROP Intermediate_Dir "Release/device"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/device.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "device - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/device"
-# PROP BASE Intermediate_Dir "Debug/device"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/device"
-# PROP Intermediate_Dir "Debug/device"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/deviced.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "device - Win32 Release"
-# Name "device - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\device.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/doublebuffer.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="doublebuffer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=doublebuffer - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "doublebuffer.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "doublebuffer.mak" CFG="doublebuffer - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "doublebuffer - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "doublebuffer - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "doublebuffer - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/doublebuffer"
-# PROP BASE Intermediate_Dir "Release/doublebuffer"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/doublebuffer"
-# PROP Intermediate_Dir "Release/doublebuffer"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/doublebuffer.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "doublebuffer - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/doublebuffer"
-# PROP BASE Intermediate_Dir "Debug/doublebuffer"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/doublebuffer"
-# PROP Intermediate_Dir "Debug/doublebuffer"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/doublebufferd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "doublebuffer - Win32 Release"
-# Name "doublebuffer - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\doublebuffer.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/editor.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="editor" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=editor - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "editor.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "editor.mak" CFG="editor - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "editor - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "editor - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "editor - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/editor"
-# PROP BASE Intermediate_Dir "Release/editor"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/editor"
-# PROP Intermediate_Dir "Release/editor"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/editor.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "editor - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/editor"
-# PROP BASE Intermediate_Dir "Debug/editor"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/editor"
-# PROP Intermediate_Dir "Debug/editor"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/editord.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "editor - Win32 Release"
-# Name "editor - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\editor.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fast_slow.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fast_slow" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=fast_slow - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fast_slow.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fast_slow.mak" CFG="fast_slow - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fast_slow - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "fast_slow - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fast_slow - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fast_slow"
-# PROP BASE Intermediate_Dir "Release/fast_slow"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fast_slow"
-# PROP Intermediate_Dir "Release/fast_slow"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fast_slow.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "fast_slow - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fast_slow"
-# PROP BASE Intermediate_Dir "Debug/fast_slow"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fast_slow"
-# PROP Intermediate_Dir "Debug/fast_slow"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fast_slowd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fast_slow - Win32 Release"
-# Name "fast_slow - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\fast_slow.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\fast_slow.fl
-
-!IF  "$(CFG)" == "fast_slow - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\fast_slow.fl
-
-"..\..\test\fast_slow.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c fast_slow.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "fast_slow - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\fast_slow.fl
-
-"..\..\test\fast_slow.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c fast_slow.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/file_chooser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="file_chooser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=file_chooser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "file_chooser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "file_chooser.mak" CFG="file_chooser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "file_chooser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "file_chooser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "file_chooser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/file_chooser"
-# PROP BASE Intermediate_Dir "Release/file_chooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/file_chooser"
-# PROP Intermediate_Dir "Release/file_chooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/file_chooser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "file_chooser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/file_chooser"
-# PROP BASE Intermediate_Dir "Debug/file_chooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/file_chooser"
-# PROP Intermediate_Dir "Debug/file_chooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/file_chooserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "file_chooser - Win32 Release"
-# Name "file_chooser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\file_chooser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk.dsp
+++ /dev/null
@@ -1,730 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk.mak" CFG="fltk - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk"
-# PROP BASE Intermediate_Dir "Release/fltk"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk"
-# PROP Intermediate_Dir "Release/fltk"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk.lib"
-
-!ELSEIF  "$(CFG)" == "fltk - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk"
-# PROP BASE Intermediate_Dir "Debug/fltk"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk"
-# PROP Intermediate_Dir "Debug/fltk"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltkd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk - Win32 Release"
-# Name "fltk - Win32 Debug"
-# Begin Source File
-
-SOURCE="..\..\FL\abi-version.h"
-
-!IF  "$(CFG)" == "fltk - Win32 Release"
-
-USERDEP__ABI_V="..\..\abi-version.ide"	
-# Begin Custom Build - Creating FL\abi-version.h from abi-version.ide
-InputPath=..\..\FL\abi-version.h
-
-"..\..\FL\abi-version.h" : "..\..\abi-version.ide"
-	copy /Y ..\..\abi-version.ide ..\..\FL\abi-version.h
-
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "fltk - Win32 Debug"
-
-USERDEP__ABI_V="..\..\abi-version.ide"	
-# Begin Custom Build - Creating FL\abi-version.h from abi-version.ide
-InputPath=..\..\FL\abi-version.h
-
-"..\..\FL\abi-version.h" : "..\..\abi-version.ide"
-	copy /Y ..\..\abi-version.ide ..\..\FL\abi-version.h
-
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\case.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\cmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_absolute.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_expand.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_ext.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_isdir.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_list.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_match.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_setext.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_abort.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_add_idle.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Adjuster.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_arc.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_arci.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_arg.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_ask.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Bitmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_boxtype.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser_load.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_call_main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Chart.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Check_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Check_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Choice.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Clock.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_color.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Color_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Copy_Surface.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_compose.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Counter.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_cursor.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_curve.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Device.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Dial.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_diamond_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_display.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_dnd.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Double_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw_pixmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_encoding_latin1.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_encoding_mac_roman.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_engraved_label.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Chooser2.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_file_dir.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Icon.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_font.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_get_key.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_get_system_colors.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_grab.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Group.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_gtk.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_gleam.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Help_View.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Image_Surface.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Input_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_labeltype.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Light_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_line_style.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_lock.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_add.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Bar.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_global.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Multi_Label.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Native_File_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_open_uri.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_oval_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_overlay.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_overlay_visual.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Overlay_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_own_colormap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Pack.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Paged_Device.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Pixmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_plastic.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Positioner.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PostScript.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Preferences.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Printer.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Progress.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_read_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_rect.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Repeat_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Return_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Roller.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_round_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Round_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_rounded_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Scroll.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_scroll_area.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Scrollbar.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_set_font.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_set_fonts.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_shadow_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Shared_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_shortcut.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_show_colormap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Single_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Slider.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_symbols.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Table.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Table_Row.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tabs.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Buffer.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Display.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Editor.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tile.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tiled_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tooltip.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Item.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Item_Array.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Prefs.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_utf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_utf8.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Valuator.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Output.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Slider.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_vertex.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_visual.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Widget.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_fullscreen.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_hotspot.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_iconize.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_shape.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Wizard.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_x.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_XBM_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_XPM_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\flstring.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\is_right2left.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\is_spacing.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\numericsort.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\ps_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\scandir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\screen_xywh.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\vsnprintf.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk.dsw
+++ /dev/null
@@ -1,1634 +1,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "CubeView"=".\CubeView.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "Demo"=".\Demo.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name adjuster
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name arc
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name ask
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name bitmap
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name blocks
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name boxtype
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name browser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name button
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name buttons
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name checkers
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name clock
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name colbrowser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name color_chooser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name cube
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name CubeView
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name cursor
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name curve
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name device
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name doublebuffer
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name editor
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fast_slow
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name file_chooser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fonts
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name forms
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fractals
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fullscreen
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name gl_overlay
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name glpuzzle
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name hello
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name help
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name iconize
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name image
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name inactive
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name input
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name input_choice
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name keyboard
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name label
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name line_style
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name list_visuals
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name mandelbrot
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name menubar
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name message
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name minimum
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name navigation
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name native-filechooser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name output
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name overlay
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name pack
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name pixmap_browser
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name pixmap
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name preferences
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name radio
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name resizebox
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name resize
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name scroll
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name shape
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name subwindow
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name sudoku
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name symbols
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name table
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name tabs
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name threads
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name tile
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name tiled_image
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name tree
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name utf8
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name valuators
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name rotated_text
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "Fluid"=".\Fluid.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "adjuster"=".\adjuster.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "arc"=".\arc.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ask"=".\ask.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "bitmap"=".\bitmap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "blocks"=".\blocks.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "boxtype"=".\boxtype.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "browser"=".\browser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "button"=".\button.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "buttons"=".\buttons.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "checkers"=".\checkers.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "clock"=".\clock.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "colbrowser"=".\colbrowser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "color_chooser"=".\color_chooser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "cube"=".\cube.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "cursor"=".\cursor.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "curve"=".\curve.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "device"=".\device.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "doublebuffer"=".\doublebuffer.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "editor"=".\editor.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fast_slow"=".\fast_slow.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "file_chooser"=".\file_chooser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk"=".\fltk.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_forms"=".\fltk_forms.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_formsdll"=".\fltk_formsdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_gl"=".\fltk_gl.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_gldll"=".\fltk_gldll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_images"=".\fltk_images.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_imagesdll"=".\fltk_imagesdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_jpeg"=".\fltk_jpeg.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fltk_jpegdll"=".\fltk_jpegdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fltk_png"=".\fltk_png.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_pngdll"=".\fltk_pngdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fltk_zlib"=".\fltk_zlib.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fltk_zlibdll"=".\fltk_zlibdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fltkdll"=".\fltkdll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "fonts"=".\fonts.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "forms"=".\forms.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fractals"=".\fractals.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "fullscreen"=".\fullscreen.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "gl_overlay"=".\gl_overlay.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "glpuzzle"=".\glpuzzle.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "hello"=".\hello.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "help"=".\help.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "iconize"=".\iconize.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "image"=".\image.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "inactive"=".\inactive.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "input"=".\input.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "input_choice"=".\input_choice.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "keyboard"=".\keyboard.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "label"=".\label.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "line_style"=".\line_style.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "list_visuals"=".\list_visuals.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "mandelbrot"=".\mandelbrot.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "menubar"=".\menubar.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "message"=".\message.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "minimum"=".\minimum.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "native-filechooser"=".\native-filechooser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "navigation"=".\navigation.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "output"=".\output.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_forms
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "overlay"=".\overlay.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pack"=".\pack.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pixmap"=".\pixmap.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "pixmap_browser"=".\pixmap_browser.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "preferences"=".\preferences.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "radio"=".\radio.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "resize"=".\resize.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "resizebox"=".\resizebox.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "rotated_text"=".\rotated_text.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "scroll"=".\scroll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "shape"=".\shape.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_gl
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "subwindow"=".\subwindow.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "sudoku"=".\sudoku.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "symbols"=".\symbols.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "table"=".\table.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "tabs"=".\tabs.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "threads"=".\threads.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "tile"=".\tile.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "tiled_image"=".\tiled_image.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_images
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_jpeg
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_png
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name fltk_zlib
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "tree"=".\tree.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "utf8"=".\utf8.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "valuators"=".\valuators.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-    Begin Project Dependency
-    Project_Dep_Name fltk
-    End Project Dependency
-    Begin Project Dependency
-    Project_Dep_Name Fluid
-    End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
--- a/DoConfig/fltk/ide/VisualC6/fltk_forms.dsp
+++ /dev/null
@@ -1,109 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_forms" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_forms - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_forms.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_forms.mak" CFG="fltk_forms - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_forms - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_forms - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_forms - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_forms"
-# PROP BASE Intermediate_Dir "Release/fltk_forms"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_forms"
-# PROP Intermediate_Dir "Release/fltk_forms"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_forms.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_forms - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_forms"
-# PROP BASE Intermediate_Dir "Debug/fltk_forms"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_forms"
-# PROP Intermediate_Dir "Debug/fltk_forms"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_formsd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_forms - Win32 Release"
-# Name "fltk_forms - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\forms_bitmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_compatability.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_free.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_fselect.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_pixmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_timer.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_formsdll.dsp
+++ /dev/null
@@ -1,407 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_formsdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_formsdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_formsdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_formsdll.mak" CFG="fltk_formsdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_formsdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_formsdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_formsdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_formsdll"
-# PROP BASE Intermediate_Dir "Release/fltk_formsdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_formsdll"
-# PROP Intermediate_Dir "Release/fltk_formsdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_formsdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_formsdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_formsdll"
-# PROP BASE Intermediate_Dir "Debug/fltk_formsdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_formsdll"
-# PROP Intermediate_Dir "Debug/fltk_formsdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_formsdlld.pdb" /debug /machine:I386 /out:"Debug/fltk_formsdll/fltk_formsdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_formsdll - Win32 Release"
-# Name "fltk_formsdll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\forms_bitmap.cxx
-DEP_CPP_FORMS=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_ask.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\fl\fl_box.h"\
-	"..\..\fl\fl_browser.h"\
-	"..\..\fl\fl_browser_.h"\
-	"..\..\fl\fl_button.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_chart.h"\
-	"..\..\fl\fl_check_button.h"\
-	"..\..\fl\fl_choice.h"\
-	"..\..\fl\fl_clock.h"\
-	"..\..\fl\fl_counter.h"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_dial.h"\
-	"..\..\fl\fl_double_window.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_file_browser.h"\
-	"..\..\fl\fl_file_chooser.h"\
-	"..\..\fl\fl_file_icon.h"\
-	"..\..\fl\fl_file_input.h"\
-	"..\..\fl\fl_formsbitmap.h"\
-	"..\..\fl\fl_formspixmap.h"\
-	"..\..\fl\fl_free.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_input.h"\
-	"..\..\fl\fl_input_.h"\
-	"..\..\fl\fl_light_button.h"\
-	"..\..\fl\fl_menu_.h"\
-	"..\..\fl\fl_menu_button.h"\
-	"..\..\fl\fl_menu_item.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_positioner.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_return_button.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_round_button.h"\
-	"..\..\fl\fl_scrollbar.h"\
-	"..\..\fl\fl_show_colormap.h"\
-	"..\..\fl\fl_slider.h"\
-	"..\..\fl\fl_tile.h"\
-	"..\..\fl\fl_timer.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_valuator.h"\
-	"..\..\fl\fl_value_slider.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\forms.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	
-NODEP_CPP_FORMS=\
-	"..\..\..\..\usr\include\dirent.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_compatability.cxx
-DEP_CPP_FORMS_=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_ask.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\fl\fl_box.h"\
-	"..\..\fl\fl_browser.h"\
-	"..\..\fl\fl_browser_.h"\
-	"..\..\fl\fl_button.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_chart.h"\
-	"..\..\fl\fl_check_button.h"\
-	"..\..\fl\fl_choice.h"\
-	"..\..\fl\fl_clock.h"\
-	"..\..\fl\fl_counter.h"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_dial.h"\
-	"..\..\fl\fl_double_window.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_file_browser.h"\
-	"..\..\fl\fl_file_chooser.h"\
-	"..\..\fl\fl_file_icon.h"\
-	"..\..\fl\fl_file_input.h"\
-	"..\..\fl\fl_formsbitmap.h"\
-	"..\..\fl\fl_formspixmap.h"\
-	"..\..\fl\fl_free.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_input.h"\
-	"..\..\fl\fl_input_.h"\
-	"..\..\fl\fl_light_button.h"\
-	"..\..\fl\fl_menu_.h"\
-	"..\..\fl\fl_menu_button.h"\
-	"..\..\fl\fl_menu_item.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_positioner.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_repeat_button.h"\
-	"..\..\fl\fl_return_button.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_round_button.h"\
-	"..\..\fl\fl_scrollbar.h"\
-	"..\..\fl\fl_show_colormap.h"\
-	"..\..\fl\fl_slider.h"\
-	"..\..\fl\fl_tile.h"\
-	"..\..\fl\fl_timer.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_valuator.h"\
-	"..\..\fl\fl_value_slider.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\forms.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	
-NODEP_CPP_FORMS_=\
-	"..\..\..\..\usr\include\dirent.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_free.cxx
-DEP_CPP_FORMS_F=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_free.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\Xutf8.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_fselect.cxx
-DEP_CPP_FORMS_FS=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_ask.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\fl\fl_box.h"\
-	"..\..\fl\fl_browser.h"\
-	"..\..\fl\fl_browser_.h"\
-	"..\..\fl\fl_button.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_chart.h"\
-	"..\..\fl\fl_check_button.h"\
-	"..\..\fl\fl_choice.h"\
-	"..\..\fl\fl_clock.h"\
-	"..\..\fl\fl_counter.h"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_dial.h"\
-	"..\..\fl\fl_double_window.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_file_browser.h"\
-	"..\..\fl\fl_file_chooser.h"\
-	"..\..\fl\fl_file_icon.h"\
-	"..\..\fl\fl_file_input.h"\
-	"..\..\fl\fl_formsbitmap.h"\
-	"..\..\fl\fl_formspixmap.h"\
-	"..\..\fl\fl_free.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_input.h"\
-	"..\..\fl\fl_input_.h"\
-	"..\..\fl\fl_light_button.h"\
-	"..\..\fl\fl_menu_.h"\
-	"..\..\fl\fl_menu_button.h"\
-	"..\..\fl\fl_menu_item.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_positioner.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_return_button.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_round_button.h"\
-	"..\..\fl\fl_scrollbar.h"\
-	"..\..\fl\fl_show_colormap.h"\
-	"..\..\fl\fl_slider.h"\
-	"..\..\fl\fl_tile.h"\
-	"..\..\fl\fl_timer.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_valuator.h"\
-	"..\..\fl\fl_value_slider.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\forms.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-NODEP_CPP_FORMS_FS=\
-	"..\..\..\..\usr\include\dirent.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_pixmap.cxx
-DEP_CPP_FORMS_P=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_ask.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\fl\fl_box.h"\
-	"..\..\fl\fl_browser.h"\
-	"..\..\fl\fl_browser_.h"\
-	"..\..\fl\fl_button.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_chart.h"\
-	"..\..\fl\fl_check_button.h"\
-	"..\..\fl\fl_choice.h"\
-	"..\..\fl\fl_clock.h"\
-	"..\..\fl\fl_counter.h"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_dial.h"\
-	"..\..\fl\fl_double_window.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_file_browser.h"\
-	"..\..\fl\fl_file_chooser.h"\
-	"..\..\fl\fl_file_icon.h"\
-	"..\..\fl\fl_file_input.h"\
-	"..\..\fl\fl_formsbitmap.h"\
-	"..\..\fl\fl_formspixmap.h"\
-	"..\..\fl\fl_free.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_input.h"\
-	"..\..\fl\fl_input_.h"\
-	"..\..\fl\fl_light_button.h"\
-	"..\..\fl\fl_menu_.h"\
-	"..\..\fl\fl_menu_button.h"\
-	"..\..\fl\fl_menu_item.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_positioner.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_return_button.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_round_button.h"\
-	"..\..\fl\fl_scrollbar.h"\
-	"..\..\fl\fl_show_colormap.h"\
-	"..\..\fl\fl_slider.h"\
-	"..\..\fl\fl_tile.h"\
-	"..\..\fl\fl_timer.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_valuator.h"\
-	"..\..\fl\fl_value_slider.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\forms.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	
-NODEP_CPP_FORMS_P=\
-	"..\..\..\..\usr\include\dirent.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\forms_timer.cxx
-DEP_CPP_FORMS_T=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_timer.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_gl.dsp
+++ /dev/null
@@ -1,129 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_gl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_gl - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_gl.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_gl.mak" CFG="fltk_gl - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_gl - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_gl - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_gl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_gl"
-# PROP BASE Intermediate_Dir "Release/fltk_gl"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_gl"
-# PROP Intermediate_Dir "Release/fltk_gl"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_gl.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_gl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_gl"
-# PROP BASE Intermediate_Dir "Debug/fltk_gl"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_gl"
-# PROP Intermediate_Dir "Debug/fltk_gl"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_gld.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_gl - Win32 Release"
-# Name "fltk_gl - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Choice.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Device_Plugin.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Overlay.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_geometry.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_stroke_mono_roman.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_stroke_roman.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_teapot.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\gl_draw.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\glut_compatability.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\glut_font.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_gldll.dsp
+++ /dev/null
@@ -1,349 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_gldll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_gldll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_gldll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_gldll.mak" CFG="fltk_gldll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_gldll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_gldll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_gldll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_gldll"
-# PROP BASE Intermediate_Dir "Release/fltk_gldll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_gldll"
-# PROP Intermediate_Dir "Release/fltk_gldll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_gldll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_gldll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_gldll"
-# PROP BASE Intermediate_Dir "Debug/fltk_gldll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_gldll"
-# PROP Intermediate_Dir "Debug/fltk_gldll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_gldlld.pdb" /debug /machine:I386 /out:"Debug/fltk_gldll/fltk_gldlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_gldll - Win32 Release"
-# Name "fltk_gldll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Choice.cxx
-DEP_CPP_FL_GL=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\FL\gl.h"\
-	"..\..\fl\gl_draw.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\fl_gl_choice.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Device_Plugin.cxx
-DEP_CPP_FL_GL_=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_paged_device.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_postscript.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_printer.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\FL\gl.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\fl_gl_choice.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Overlay.cxx
-DEP_CPP_FL_GL_O=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\FL\gl.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\fl_gl_choice.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Gl_Window.cxx
-DEP_CPP_FL_GL_W=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\FL\gl.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\fl_gl_choice.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_geometry.cxx
-DEP_CPP_FREEG=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\FL\math.h"\
-	"..\..\fl\Xutf8.h"\
-	
-NODEP_CPP_FREEG=\
-	"..\..\..\..\usr\include\math.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_stroke_mono_roman.cxx
-DEP_CPP_FREEGL=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\fl\Xutf8.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_stroke_roman.cxx
-DEP_CPP_FREEGLU=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\fl\Xutf8.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\freeglut_teapot.cxx
-DEP_CPP_FREEGLUT=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\freeglut_teapot_data.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\gl_draw.cxx
-DEP_CPP_GL_DR=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\FL\gl.h"\
-	"..\..\FL\glu.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\fl_font.h"\
-	"..\..\src\fl_gl_choice.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\glut_compatability.cxx
-DEP_CPP_GLUT_=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_menu_item.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\glut_font.cxx
-DEP_CPP_GLUT_F=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gl_window.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\glut.h"\
-	"..\..\fl\Xutf8.h"\
-	".\config.h"\
-	
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_images.dsp
+++ /dev/null
@@ -1,117 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_images" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_images - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_images.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_images.mak" CFG="fltk_images - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_images - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_images - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_images - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_images"
-# PROP BASE Intermediate_Dir "Release/fltk_images"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_images"
-# PROP Intermediate_Dir "Release/fltk_images"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_images.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_images - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_images"
-# PROP BASE Intermediate_Dir "Debug/fltk_images"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_images"
-# PROP Intermediate_Dir "Debug/fltk_images"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "FL_LIBRARY" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_imagesd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_images - Win32 Release"
-# Name "fltk_images - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\Fl_BMP_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Icon2.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_GIF_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Help_Dialog.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_images_core.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_JPEG_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PNG_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PNM_Image.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_imagesdll.dsp
+++ /dev/null
@@ -1,285 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_imagesdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_imagesdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_imagesdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_imagesdll.mak" CFG="fltk_imagesdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_imagesdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_imagesdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_imagesdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_imagesdll"
-# PROP BASE Intermediate_Dir "Release/fltk_imagesdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_imagesdll"
-# PROP Intermediate_Dir "Release/fltk_imagesdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_imagesdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_imagesdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_imagesdll"
-# PROP BASE Intermediate_Dir "Debug/fltk_imagesdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_imagesdll"
-# PROP Intermediate_Dir "Debug/fltk_imagesdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_imagesdlld.pdb" /debug /machine:I386 /out:"Debug/fltk_imagesdll/fltk_imagesdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_imagesdll - Win32 Release"
-# Name "fltk_imagesdll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\Fl_BMP_Image.cxx
-DEP_CPP_FL_BM=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl_bmp_image.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\Xutf8.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Icon2.cxx
-DEP_CPP_FL_FI=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_file_icon.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_shared_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\mac.H"\
-	"..\..\FL\math.h"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-NODEP_CPP_FL_FI=\
-	"..\..\..\..\usr\include\dirent.h"\
-	"..\..\..\..\usr\include\math.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_GIF_Image.cxx
-DEP_CPP_FL_GI=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gif_image.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Help_Dialog.cxx
-DEP_CPP_FL_HE=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\filename.h"\
-	"..\..\fl\fl.h"\
-	"..\..\fl\fl_ask.h"\
-	"..\..\fl\fl_bitmap.h"\
-	"..\..\fl\fl_box.h"\
-	"..\..\fl\fl_button.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_device.h"\
-	"..\..\fl\fl_double_window.h"\
-	"..\..\fl\fl_draw.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_group.h"\
-	"..\..\fl\fl_help_dialog.h"\
-	"..\..\fl\fl_help_view.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_input.h"\
-	"..\..\fl\fl_input_.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_plugin.h"\
-	"..\..\fl\fl_preferences.h"\
-	"..\..\fl\fl_rgb_image.h"\
-	"..\..\fl\fl_scrollbar.h"\
-	"..\..\fl\fl_shared_image.h"\
-	"..\..\fl\fl_slider.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\fl_valuator.h"\
-	"..\..\fl\fl_widget.h"\
-	"..\..\fl\fl_window.h"\
-	"..\..\fl\mac.H"\
-	"..\..\fl\win32.h"\
-	"..\..\fl\x.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-NODEP_CPP_FL_HE=\
-	"..\..\..\..\usr\include\dirent.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_images_core.cxx
-DEP_CPP_FL_IM=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl_bmp_image.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_gif_image.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_jpeg_image.h"\
-	"..\..\fl\fl_pixmap.h"\
-	"..\..\fl\fl_png_image.h"\
-	"..\..\fl\fl_pnm_image.h"\
-	"..\..\fl\fl_shared_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_JPEG_Image.cxx
-DEP_CPP_FL_JP=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_jpeg_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	".\config.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PNG_Image.cxx
-DEP_CPP_FL_PN=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_png_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_FL_PN=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PNM_Image.cxx
-DEP_CPP_FL_PNM=\
-	"..\..\fl\enumerations.h"\
-	"..\..\fl\fl.h"\
-	"..\..\FL\Fl_Cairo.H"\
-	"..\..\fl\fl_export.h"\
-	"..\..\fl\fl_image.h"\
-	"..\..\fl\fl_pnm_image.h"\
-	"..\..\fl\fl_types.h"\
-	"..\..\fl\fl_utf8.h"\
-	"..\..\fl\Xutf8.h"\
-	"..\..\src\flstring.h"\
-	".\config.h"\
-	
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_jpeg.dsp
+++ /dev/null
@@ -1,269 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_jpeg" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_jpeg - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_jpeg.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_jpeg.mak" CFG="fltk_jpeg - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_jpeg - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_jpeg - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_jpeg - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_jpeg"
-# PROP BASE Intermediate_Dir "Release/fltk_jpeg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_jpeg"
-# PROP Intermediate_Dir "Release/fltk_jpeg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_jpeg.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_jpeg - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_jpeg"
-# PROP BASE Intermediate_Dir "Debug/fltk_jpeg"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_jpeg"
-# PROP Intermediate_Dir "Debug/fltk_jpeg"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_jpegd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_jpeg - Win32 Release"
-# Name "fltk_jpeg - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcapimin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcapistd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jaricom.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcarith.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jccoefct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jccolor.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcdctmgr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jchuff.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcinit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmainct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmarker.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmaster.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcomapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcparam.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcprepct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcsample.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jctrans.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdapimin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdapistd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdarith.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdatadst.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdatasrc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdcoefct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdcolor.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jddctmgr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdhuff.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdinput.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmainct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmarker.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmaster.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdpostct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdsample.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdtrans.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctflt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctfst.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctflt.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctfst.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jmemmgr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jmemnobs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jquant1.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jquant2.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jutils.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_jpegdll.dsp
+++ /dev/null
@@ -1,658 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_jpegdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_jpegdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_jpegdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_jpegdll.mak" CFG="fltk_jpegdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_jpegdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_jpegdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_jpegdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_jpegdll"
-# PROP BASE Intermediate_Dir "Release/fltk_jpegdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_jpegdll"
-# PROP Intermediate_Dir "Release/fltk_jpegdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_jpegdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_jpegdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_jpegdll"
-# PROP BASE Intermediate_Dir "Debug/fltk_jpegdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_jpegdll"
-# PROP Intermediate_Dir "Debug/fltk_jpegdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_jpegdlld.pdb" /debug /machine:I386 /out:"Debug/fltk_jpegdll/fltk_jpegdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_jpegdll - Win32 Release"
-# Name "fltk_jpegdll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\jpeg\jaricom.c
-DEP_CPP_JCPHU=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcapimin.c
-DEP_CPP_JCAPI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcapistd.c
-DEP_CPP_JCAPIS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcarith.c
-DEP_CPP_JCPHU=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jccoefct.c
-DEP_CPP_JCCOE=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jccolor.c
-DEP_CPP_JCCOL=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcdctmgr.c
-DEP_CPP_JCDCT=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jchuff.c
-DEP_CPP_JCHUF=\
-	"..\..\jpeg\jchuff.h"\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcinit.c
-DEP_CPP_JCINI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmainct.c
-DEP_CPP_JCMAI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmarker.c
-DEP_CPP_JCMAR=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcmaster.c
-DEP_CPP_JCMAS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcomapi.c
-DEP_CPP_JCOMA=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcparam.c
-DEP_CPP_JCPAR=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcprepct.c
-DEP_CPP_JCPRE=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jcsample.c
-DEP_CPP_JCSAM=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jctrans.c
-DEP_CPP_JCTRA=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdapimin.c
-DEP_CPP_JDAPI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdapistd.c
-DEP_CPP_JDAPIS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdarith.c
-DEP_CPP_JCPHU=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdatadst.c
-DEP_CPP_JDATA=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdatasrc.c
-DEP_CPP_JDATAS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdcoefct.c
-DEP_CPP_JDCOE=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdcolor.c
-DEP_CPP_JDCOL=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jddctmgr.c
-DEP_CPP_JDDCT=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdhuff.c
-DEP_CPP_JDHUF=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdhuff.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdinput.c
-DEP_CPP_JDINP=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmainct.c
-DEP_CPP_JDMAI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmarker.c
-DEP_CPP_JDMAR=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmaster.c
-DEP_CPP_JDMAS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdmerge.c
-DEP_CPP_JDMER=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdpostct.c
-DEP_CPP_JDPOS=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdsample.c
-DEP_CPP_JDSAM=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jdtrans.c
-DEP_CPP_JDTRA=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jerror.c
-DEP_CPP_JERRO=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	"..\..\jpeg\jversion.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctflt.c
-DEP_CPP_JFDCT=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctfst.c
-DEP_CPP_JFDCTF=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jfdctint.c
-DEP_CPP_JFDCTI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctflt.c
-DEP_CPP_JIDCT=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctfst.c
-DEP_CPP_JIDCTF=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jidctint.c
-DEP_CPP_JIDCTI=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jdct.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jmemmgr.c
-DEP_CPP_JMEMM=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmemsys.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jmemnobs.c
-DEP_CPP_JMEMN=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmemsys.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jquant1.c
-DEP_CPP_JQUAN=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jquant2.c
-DEP_CPP_JQUANT=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\jpeg\jutils.c
-DEP_CPP_JUTIL=\
-	"..\..\jpeg\jconfig.h"\
-	"..\..\jpeg\jerror.h"\
-	"..\..\jpeg\jinclude.h"\
-	"..\..\jpeg\jmorecfg.h"\
-	"..\..\jpeg\jpegint.h"\
-	"..\..\jpeg\jpeglib.h"\
-	
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_png.dsp
+++ /dev/null
@@ -1,145 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_png" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_png - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_png.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_png.mak" CFG="fltk_png - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_png - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_png - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_png - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_png"
-# PROP BASE Intermediate_Dir "Release/fltk_png"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_png"
-# PROP Intermediate_Dir "Release/fltk_png"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_png.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_png - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_png"
-# PROP BASE Intermediate_Dir "Debug/fltk_png"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_png"
-# PROP Intermediate_Dir "Debug/fltk_png"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_pngd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_png - Win32 Release"
-# Name "fltk_png - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\png\png.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngerror.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngget.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngmem.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngpread.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngread.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrtran.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngset.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngtrans.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwtran.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwutil.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_pngdll.dsp
+++ /dev/null
@@ -1,303 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_pngdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_pngdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_pngdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_pngdll.mak" CFG="fltk_pngdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_pngdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_pngdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_pngdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_pngdll"
-# PROP BASE Intermediate_Dir "Release/fltk_pngdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_pngdll"
-# PROP Intermediate_Dir "Release/fltk_pngdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_pngdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_pngdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_pngdll"
-# PROP BASE Intermediate_Dir "Debug/fltk_pngdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_pngdll"
-# PROP Intermediate_Dir "Debug/fltk_pngdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_pngdlld.pdb" /debug /machine:I386 /out:"Debug/fltk_pngdll/fltk_pngdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_pngdll - Win32 Release"
-# Name "fltk_pngdll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\png\png.c
-DEP_CPP_PNG_C=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNG_C=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngerror.c
-DEP_CPP_PNGER=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGER=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngget.c
-DEP_CPP_PNGGE=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGGE=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngmem.c
-DEP_CPP_PNGME=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGME=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngpread.c
-DEP_CPP_PNGPR=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGPR=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngread.c
-DEP_CPP_PNGRE=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGRE=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrio.c
-DEP_CPP_PNGRI=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGRI=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrtran.c
-DEP_CPP_PNGRT=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGRT=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngrutil.c
-DEP_CPP_PNGRU=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGRU=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngset.c
-DEP_CPP_PNGSE=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGSE=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngtrans.c
-DEP_CPP_PNGTR=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGTR=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwio.c
-DEP_CPP_PNGWI=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGWI=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwrite.c
-DEP_CPP_PNGWR=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGWR=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwtran.c
-DEP_CPP_PNGWT=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGWT=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\png\pngwutil.c
-DEP_CPP_PNGWU=\
-	"..\..\png\png.h"\
-	"..\..\png\pngconf.h"\
-	"..\..\zlib\zconf.h"\
-	"..\..\zlib\zlib.h"\
-	".\config.h"\
-	
-NODEP_CPP_PNGWU=\
-	"..\..\png\pngusr.h"\
-	
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_zlib.dsp
+++ /dev/null
@@ -1,130 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_zlib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=fltk_zlib - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_zlib.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_zlib.mak" CFG="fltk_zlib - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_zlib - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "fltk_zlib - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_zlib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_zlib"
-# PROP BASE Intermediate_Dir "Release/fltk_zlib"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_zlib"
-# PROP Intermediate_Dir "Release/fltk_zlib"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Ot /Op /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# SUBTRACT CPP /Os
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_zlib.lib"
-
-!ELSEIF  "$(CFG)" == "fltk_zlib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_zlib"
-# PROP BASE Intermediate_Dir "Debug/fltk_zlib"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_zlib"
-# PROP Intermediate_Dir "Debug/fltk_zlib"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /Z7 /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\fltk_zlibd.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_zlib - Win32 Release"
-# Name "fltk_zlib - Win32 Debug"
-# Begin Source File
-SOURCE=..\..\zlib\adler32.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\compress.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\crc32.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\deflate.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzclose.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzlib.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzread.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzwrite.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\infback.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inffast.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inflate.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inftrees.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\trees.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\uncompr.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\zutil.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltk_zlibdll.dsp
+++ /dev/null
@@ -1,138 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltk_zlibdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltk_zlibdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_zlibdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltk_zlibdll.mak" CFG="fltk_zlibdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltk_zlibdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltk_zlibdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltk_zlibdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltk_zlibdll"
-# PROP BASE Intermediate_Dir "Release/fltk_zlibdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltk_zlibdll"
-# PROP Intermediate_Dir "Release/fltk_zlibdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /Os /Ob2 /I "../../zlib" /I "../../png" /I "../../jpeg" /I "." /I "../.." /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_zlibdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF  "$(CFG)" == "fltk_zlibdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltk_zlibdll"
-# PROP BASE Intermediate_Dir "Debug/fltk_zlibdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltk_zlibdll"
-# PROP Intermediate_Dir "Debug/fltk_zlibdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltk_zlibdlld.pdb" /debug /machine:I386 /out:"Debug/fltk_zlibdll/fltk_zlibdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltk_zlibdll - Win32 Release"
-# Name "fltk_zlibdll - Win32 Debug"
-# Begin Source File
-SOURCE=..\..\zlib\adler32.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\compress.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\crc32.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\deflate.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzclose.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzlib.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzread.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\gzwrite.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\infback.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inffast.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inflate.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\inftrees.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\trees.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\uncompr.c
-# End Source File
-# Begin Source File
-SOURCE=..\..\zlib\zutil.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fltkdll.dsp
+++ /dev/null
@@ -1,719 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fltkdll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=fltkdll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fltkdll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fltkdll.mak" CFG="fltkdll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fltkdll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "fltkdll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fltkdll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fltkdll"
-# PROP BASE Intermediate_Dir "Release/fltkdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fltkdll"
-# PROP Intermediate_Dir "Release/fltkdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "..\.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltkdll.pdb" /machine:I386
-# SUBTRACT LINK32 /pdb:none /nodefaultlib
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copy FLTKDLL to test directory
-PostBuild_Cmds=copy Release\fltkdll\fltkdll.dll ..\..\test
-# End Special Build Tool
-
-!ELSEIF  "$(CFG)" == "fltkdll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fltkdll"
-# PROP BASE Intermediate_Dir "Debug/fltkdll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fltkdll"
-# PROP Intermediate_Dir "Debug/fltkdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /GX /ZI /Od /I "." /I "../.." /I "..\..\zlib" /I "..\..\png" /I "..\..\jpeg" /D "FL_DLL" /D "FL_LIBRARY" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /version:1.0 /subsystem:windows /dll /pdb:"fltkdlld.pdb" /debug /machine:I386 /out:"Debug/fltkdll/fltkdlld.dll" /pdbtype:sept
-# SUBTRACT LINK32 /pdb:none /incremental:no /map
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copy FLTKDLLD to test directory
-PostBuild_Cmds=copy Debug\fltkdll\fltkdlld.dll ..\..\test
-# End Special Build Tool
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fltkdll - Win32 Release"
-# Name "fltkdll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\case.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\cmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_absolute.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_expand.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_ext.cxx	
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_isdir.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_list.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_match.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\filename_setext.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_abort.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_add_idle.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Adjuster.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_arc.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_arci.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_arg.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_ask.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Bitmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_boxtype.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Browser_load.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_call_main.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Chart.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Check_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Check_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Choice.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Clock.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_color.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Color_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_compose.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Copy_Surface.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Counter.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_cursor.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_curve.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Device.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Dial.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_diamond_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_display.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_dnd.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Double_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_draw_pixmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_encoding_latin1.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_encoding_mac_roman.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_engraved_label.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Browser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Chooser2.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_file_dir.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Icon.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_File_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_font.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_get_key.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_get_system_colors.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_grab.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Group.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_gtk.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_gleam.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Help_View.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Image_Surface.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Input_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_labeltype.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Light_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_line_style.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_lock.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_add.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Bar.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_global.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Menu_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Multi_Label.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Native_File_Chooser.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_open_uri.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_oval_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_overlay.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_overlay_visual.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Overlay_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_own_colormap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Pack.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Paged_Device.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Pixmap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_plastic.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Positioner.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_PostScript.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Preferences.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Printer.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Progress.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_read_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_rect.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Repeat_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Return_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Roller.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_round_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Round_Button.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_rounded_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Scroll.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_scroll_area.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Scrollbar.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_set_font.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_set_fonts.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_shadow_box.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Shared_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_shortcut.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_show_colormap.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Single_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Slider.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_symbols.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Table.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Table_Row.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tabs.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Buffer.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Display.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Text_Editor.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tile.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tiled_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tooltip.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Item.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Item_Array.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Tree_Prefs.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_utf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_utf8.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Valuator.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Input.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Output.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Value_Slider.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\fl_vertex.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_visual.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Widget.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_fullscreen.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_hotspot.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_iconize.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Window_shape.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_Wizard.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_x.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_XBM_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\Fl_XPM_Image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\flstring.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\is_right2left.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\xutf8\is_spacing.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\numericsort.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\ps_image.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\scandir.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\screen_xywh.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\vsnprintf.c
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fonts.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fonts" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=fonts - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fonts.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fonts.mak" CFG="fonts - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fonts - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "fonts - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fonts - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fonts"
-# PROP BASE Intermediate_Dir "Release/fonts"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fonts"
-# PROP Intermediate_Dir "Release/fonts"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fonts.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "fonts - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fonts"
-# PROP BASE Intermediate_Dir "Debug/fonts"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fonts"
-# PROP Intermediate_Dir "Debug/fonts"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fontsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fonts - Win32 Release"
-# Name "fonts - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\fonts.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/forms.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="forms" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=forms - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "forms.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "forms.mak" CFG="forms - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "forms - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "forms - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "forms - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/forms"
-# PROP BASE Intermediate_Dir "Release/forms"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/forms"
-# PROP Intermediate_Dir "Release/forms"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_forms.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/forms.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "forms - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/forms"
-# PROP BASE Intermediate_Dir "Debug/forms"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/forms"
-# PROP Intermediate_Dir "Debug/forms"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_formsd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/formsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "forms - Win32 Release"
-# Name "forms - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\forms.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fractals.dsp
+++ /dev/null
@@ -1,101 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fractals" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=fractals - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fractals.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fractals.mak" CFG="fractals - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fractals - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "fractals - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fractals - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fractals"
-# PROP BASE Intermediate_Dir "Release/fractals"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fractals"
-# PROP Intermediate_Dir "Release/fractals"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib fltk_forms.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fractals.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "fractals - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fractals"
-# PROP BASE Intermediate_Dir "Debug/fractals"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fractals"
-# PROP Intermediate_Dir "Debug/fractals"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib fltk_formsd.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fractalsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fractals - Win32 Release"
-# Name "fractals - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\fractals.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\fracviewer.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/fullscreen.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="fullscreen" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=fullscreen - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "fullscreen.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "fullscreen.mak" CFG="fullscreen - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "fullscreen - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "fullscreen - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "fullscreen - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/fullscreen"
-# PROP BASE Intermediate_Dir "Release/fullscreen"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/fullscreen"
-# PROP Intermediate_Dir "Release/fullscreen"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fullscreen.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "fullscreen - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/fullscreen"
-# PROP BASE Intermediate_Dir "Debug/fullscreen"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/fullscreen"
-# PROP Intermediate_Dir "Debug/fullscreen"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/fullscreend.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "fullscreen - Win32 Release"
-# Name "fullscreen - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\fullscreen.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/gl_overlay.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="gl_overlay" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=gl_overlay - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "gl_overlay.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "gl_overlay.mak" CFG="gl_overlay - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "gl_overlay - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "gl_overlay - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "gl_overlay - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/gl_overlay"
-# PROP BASE Intermediate_Dir "Release/gl_overlay"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/gl_overlay"
-# PROP Intermediate_Dir "Release/gl_overlay"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/gl_overlay.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "gl_overlay - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/gl_overlay"
-# PROP BASE Intermediate_Dir "Debug/gl_overlay"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/gl_overlay"
-# PROP Intermediate_Dir "Debug/gl_overlay"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/gl_overlayd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "gl_overlay - Win32 Release"
-# Name "gl_overlay - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\gl_overlay.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/glpuzzle.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="glpuzzle" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=glpuzzle - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "glpuzzle.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "glpuzzle.mak" CFG="glpuzzle - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "glpuzzle - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "glpuzzle - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "glpuzzle - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/glpuzzle"
-# PROP BASE Intermediate_Dir "Release/glpuzzle"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/glpuzzle"
-# PROP Intermediate_Dir "Release/glpuzzle"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/glpuzzle.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "glpuzzle - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/glpuzzle"
-# PROP BASE Intermediate_Dir "Debug/glpuzzle"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/glpuzzle"
-# PROP Intermediate_Dir "Debug/glpuzzle"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/glpuzzled.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "glpuzzle - Win32 Release"
-# Name "glpuzzle - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\glpuzzle.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/hello.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="hello" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=hello - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "hello.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "hello.mak" CFG="hello - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "hello - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "hello - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "hello - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/hello"
-# PROP BASE Intermediate_Dir "Release/hello"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/hello"
-# PROP Intermediate_Dir "Release/hello"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/hello.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "hello - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/hello"
-# PROP BASE Intermediate_Dir "Debug/hello"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/hello"
-# PROP Intermediate_Dir "Debug/hello"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/hellod.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "hello - Win32 Release"
-# Name "hello - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\hello.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/help.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="help" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=help - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "help.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "help.mak" CFG="help - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "help - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "help - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "help - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/help"
-# PROP BASE Intermediate_Dir "Release/help"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/help"
-# PROP Intermediate_Dir "Release/help"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/help.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "help - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/help"
-# PROP BASE Intermediate_Dir "Debug/help"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/help"
-# PROP Intermediate_Dir "Debug/help"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/helpd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "help - Win32 Release"
-# Name "help - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\help.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/iconize.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="iconize" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=iconize - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "iconize.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "iconize.mak" CFG="iconize - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "iconize - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "iconize - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "iconize - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/iconize"
-# PROP BASE Intermediate_Dir "Release/iconize"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/iconize"
-# PROP Intermediate_Dir "Release/iconize"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/iconize.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "iconize - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/iconize"
-# PROP BASE Intermediate_Dir "Debug/iconize"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/iconize"
-# PROP Intermediate_Dir "Debug/iconize"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/iconized.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "iconize - Win32 Release"
-# Name "iconize - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\iconize.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/image.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="image" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=image - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "image.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "image.mak" CFG="image - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "image - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "image - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "image - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/image"
-# PROP BASE Intermediate_Dir "Release/image"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/image"
-# PROP Intermediate_Dir "Release/image"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/image.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "image - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/image"
-# PROP BASE Intermediate_Dir "Debug/image"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/image"
-# PROP Intermediate_Dir "Debug/image"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/imaged.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "image - Win32 Release"
-# Name "image - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\image.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/inactive.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="inactive" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=inactive - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "inactive.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "inactive.mak" CFG="inactive - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "inactive - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "inactive - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "inactive - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/inactive"
-# PROP BASE Intermediate_Dir "Release/inactive"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/inactive"
-# PROP Intermediate_Dir "Release/inactive"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/inactive.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "inactive - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/inactive"
-# PROP BASE Intermediate_Dir "Debug/inactive"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/inactive"
-# PROP Intermediate_Dir "Debug/inactive"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/inactived.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "inactive - Win32 Release"
-# Name "inactive - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\inactive.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\inactive.fl
-
-!IF  "$(CFG)" == "inactive - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\inactive.fl
-
-"..\..\test\inactive.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c inactive.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "inactive - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\inactive.fl
-
-"..\..\test\inactive.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c inactive.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/input.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="input" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=input - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "input.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "input.mak" CFG="input - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "input - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "input - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "input - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/input"
-# PROP BASE Intermediate_Dir "Release/input"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/input"
-# PROP Intermediate_Dir "Release/input"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/input.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "input - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/input"
-# PROP BASE Intermediate_Dir "Debug/input"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/input"
-# PROP Intermediate_Dir "Debug/input"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/inputd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "input - Win32 Release"
-# Name "input - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\input.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/input_choice.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="input_choice" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=input_choice - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "input_choice.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "input_choice.mak" CFG="input_choice - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "input_choice - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "input_choice - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "input_choice - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/input_choice"
-# PROP BASE Intermediate_Dir "Release/input_choice"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/input_choice"
-# PROP Intermediate_Dir "Release/input_choice"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/input_choice.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "input_choice - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/input_choice"
-# PROP BASE Intermediate_Dir "Debug/input_choice"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/input_choice"
-# PROP Intermediate_Dir "Debug/input_choice"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/input_choiced.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "input_choice - Win32 Release"
-# Name "input_choice - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\input_choice.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/keyboard.dsp
+++ /dev/null
@@ -1,132 +1,0 @@
-# Microsoft Developer Studio Project File - Name="keyboard" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=keyboard - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "keyboard.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "keyboard.mak" CFG="keyboard - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "keyboard - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "keyboard - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "keyboard - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/keyboard"
-# PROP BASE Intermediate_Dir "Release/keyboard"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/keyboard"
-# PROP Intermediate_Dir "Release/keyboard"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/keyboard.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "keyboard - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/keyboard"
-# PROP BASE Intermediate_Dir "Debug/keyboard"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/keyboard"
-# PROP Intermediate_Dir "Debug/keyboard"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/keyboardd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "keyboard - Win32 Release"
-# Name "keyboard - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\keyboard.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\keyboard_ui.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\keyboard_ui.fl
-
-!IF  "$(CFG)" == "keyboard - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\keyboard_ui.fl
-
-"..\..\test\keyboard_ui.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c keyboard_ui.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "keyboard - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\keyboard_ui.fl
-
-"..\..\test\keyboard_ui.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c keyboard_ui.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/label.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="label" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=label - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "label.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "label.mak" CFG="label - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "label - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "label - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "label - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/label"
-# PROP BASE Intermediate_Dir "Release/label"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/label"
-# PROP Intermediate_Dir "Release/label"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_forms.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/label.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "label - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/label"
-# PROP BASE Intermediate_Dir "Debug/label"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/label"
-# PROP Intermediate_Dir "Debug/label"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_formsd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/labeld.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "label - Win32 Release"
-# Name "label - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\label.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/line_style.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="line_style" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=line_style - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "line_style.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "line_style.mak" CFG="line_style - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "line_style - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "line_style - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "line_style - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/line_style"
-# PROP BASE Intermediate_Dir "Release/line_style"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/line_style"
-# PROP Intermediate_Dir "Release/line_style"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/line_style.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "line_style - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/line_style"
-# PROP BASE Intermediate_Dir "Debug/line_style"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/line_style"
-# PROP Intermediate_Dir "Debug/line_style"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/line_styled.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "line_style - Win32 Release"
-# Name "line_style - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\line_style.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/list_visuals.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="list_visuals" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=list_visuals - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "list_visuals.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "list_visuals.mak" CFG="list_visuals - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "list_visuals - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "list_visuals - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "list_visuals - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/list_visuals"
-# PROP BASE Intermediate_Dir "Release/list_visuals"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/list_visuals"
-# PROP Intermediate_Dir "Release/list_visuals"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/list_visuals.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "list_visuals - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/list_visuals"
-# PROP BASE Intermediate_Dir "Debug/list_visuals"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/list_visuals"
-# PROP Intermediate_Dir "Debug/list_visuals"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/list_visualsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "list_visuals - Win32 Release"
-# Name "list_visuals - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\list_visuals.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/mandelbrot.dsp
+++ /dev/null
@@ -1,132 +1,0 @@
-# Microsoft Developer Studio Project File - Name="mandelbrot" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=mandelbrot - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "mandelbrot.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "mandelbrot.mak" CFG="mandelbrot - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "mandelbrot - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "mandelbrot - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "mandelbrot - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/mandelbrot"
-# PROP BASE Intermediate_Dir "Release/mandelbrot"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/mandelbrot"
-# PROP Intermediate_Dir "Release/mandelbrot"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/mandelbrot.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "mandelbrot - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/mandelbrot"
-# PROP BASE Intermediate_Dir "Debug/mandelbrot"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/mandelbrot"
-# PROP Intermediate_Dir "Debug/mandelbrot"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/mandelbrotd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "mandelbrot - Win32 Release"
-# Name "mandelbrot - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\mandelbrot.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\mandelbrot_ui.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\mandelbrot_ui.fl
-
-!IF  "$(CFG)" == "mandelbrot - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\mandelbrot_ui.fl
-
-"..\..\test\mandelbrot_ui.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c mandelbrot_ui.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "mandelbrot - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\mandelbrot_ui.fl
-
-"..\..\test\mandelbrot_ui.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c mandelbrot_ui.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/menubar.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="menubar" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=menubar - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "menubar.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "menubar.mak" CFG="menubar - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "menubar - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "menubar - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "menubar - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/menubar"
-# PROP BASE Intermediate_Dir "Release/menubar"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/menubar"
-# PROP Intermediate_Dir "Release/menubar"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/menubar.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "menubar - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/menubar"
-# PROP BASE Intermediate_Dir "Debug/menubar"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/menubar"
-# PROP Intermediate_Dir "Debug/menubar"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/menubard.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "menubar - Win32 Release"
-# Name "menubar - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\menubar.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/message.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="message" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=message - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "message.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "message.mak" CFG="message - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "message - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "message - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "message - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/message"
-# PROP BASE Intermediate_Dir "Release/message"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/message"
-# PROP Intermediate_Dir "Release/message"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/message.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "message - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/message"
-# PROP BASE Intermediate_Dir "Debug/message"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/message"
-# PROP Intermediate_Dir "Debug/message"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/messaged.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "message - Win32 Release"
-# Name "message - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\message.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/minimum.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="minimum" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=minimum - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "minimum.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "minimum.mak" CFG="minimum - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "minimum - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "minimum - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "minimum - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/minimum"
-# PROP BASE Intermediate_Dir "Release/minimum"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/minimum"
-# PROP Intermediate_Dir "Release/minimum"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/minimum.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "minimum - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/minimum"
-# PROP BASE Intermediate_Dir "Debug/minimum"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/minimum"
-# PROP Intermediate_Dir "Debug/minimum"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/minimumd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "minimum - Win32 Release"
-# Name "minimum - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\minimum.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/native-filechooser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="native-filechooser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=native-filechooser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "native-filechooser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "native-filechooser.mak" CFG="native-filechooser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "native-filechooser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "native-filechooser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "native-filechooser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/native-filechooser"
-# PROP BASE Intermediate_Dir "Release/native-filechooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/native-filechooser"
-# PROP Intermediate_Dir "Release/native-filechooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/native-filechooser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "native-filechooser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/native-filechooser"
-# PROP BASE Intermediate_Dir "Debug/native-filechooser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/native-filechooser"
-# PROP Intermediate_Dir "Debug/native-filechooser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/native-filechooserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "native-filechooser - Win32 Release"
-# Name "native-filechooser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\native-filechooser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/navigation.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="navigation" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=navigation - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "navigation.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "navigation.mak" CFG="navigation - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "navigation - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "navigation - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "navigation - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/navigation"
-# PROP BASE Intermediate_Dir "Release/navigation"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/navigation"
-# PROP Intermediate_Dir "Release/navigation"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/navigation.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "navigation - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/navigation"
-# PROP BASE Intermediate_Dir "Debug/navigation"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/navigation"
-# PROP Intermediate_Dir "Debug/navigation"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/navigationd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "navigation - Win32 Release"
-# Name "navigation - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\navigation.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/output.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="output" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=output - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "output.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "output.mak" CFG="output - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "output - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "output - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "output - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/output"
-# PROP BASE Intermediate_Dir "Release/output"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/output"
-# PROP Intermediate_Dir "Release/output"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_forms.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/output.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "output - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/output"
-# PROP BASE Intermediate_Dir "Debug/output"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/output"
-# PROP Intermediate_Dir "Debug/output"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_formsd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/outputd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "output - Win32 Release"
-# Name "output - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\output.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/overlay.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="overlay" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=overlay - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "overlay.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "overlay.mak" CFG="overlay - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "overlay - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "overlay - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "overlay - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/overlay"
-# PROP BASE Intermediate_Dir "Release/overlay"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/overlay"
-# PROP Intermediate_Dir "Release/overlay"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/overlay.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "overlay - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/overlay"
-# PROP BASE Intermediate_Dir "Debug/overlay"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/overlay"
-# PROP Intermediate_Dir "Debug/overlay"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/overlayd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "overlay - Win32 Release"
-# Name "overlay - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\overlay.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/pack.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="pack" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=pack - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pack.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pack.mak" CFG="pack - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pack - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "pack - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pack - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/pack"
-# PROP BASE Intermediate_Dir "Release/pack"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/pack"
-# PROP Intermediate_Dir "Release/pack"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/pack.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "pack - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/pack"
-# PROP BASE Intermediate_Dir "Debug/pack"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/pack"
-# PROP Intermediate_Dir "Debug/pack"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/packd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pack - Win32 Release"
-# Name "pack - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\pack.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/pixmap.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="pixmap" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=pixmap - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pixmap.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pixmap.mak" CFG="pixmap - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pixmap - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "pixmap - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pixmap - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/pixmap"
-# PROP BASE Intermediate_Dir "Release/pixmap"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/pixmap"
-# PROP Intermediate_Dir "Release/pixmap"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/pixmap.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "pixmap - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/pixmap"
-# PROP BASE Intermediate_Dir "Debug/pixmap"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/pixmap"
-# PROP Intermediate_Dir "Debug/pixmap"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/pixmapd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pixmap - Win32 Release"
-# Name "pixmap - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\pixmap.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/pixmap_browser.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="pixmap_browser" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=pixmap_browser - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pixmap_browser.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pixmap_browser.mak" CFG="pixmap_browser - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pixmap_browser - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "pixmap_browser - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pixmap_browser - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/pixmap_browser"
-# PROP BASE Intermediate_Dir "Release/pixmap_browser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/pixmap_browser"
-# PROP Intermediate_Dir "Release/pixmap_browser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/pixmap_browser.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "pixmap_browser - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/pixmap_browser"
-# PROP BASE Intermediate_Dir "Debug/pixmap_browser"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/pixmap_browser"
-# PROP Intermediate_Dir "Debug/pixmap_browser"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/pixmap_browserd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pixmap_browser - Win32 Release"
-# Name "pixmap_browser - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\pixmap_browser.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/preferences.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="preferences" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=preferences - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "preferences.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "preferences.mak" CFG="preferences - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "preferences - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "preferences - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "preferences - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/preferences"
-# PROP BASE Intermediate_Dir "Release/preferences"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/preferences"
-# PROP Intermediate_Dir "Release/preferences"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/preferences.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "preferences - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/preferences"
-# PROP BASE Intermediate_Dir "Debug/preferences"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/preferences"
-# PROP Intermediate_Dir "Debug/preferences"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/preferencesd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "preferences - Win32 Release"
-# Name "preferences - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\preferences.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\preferences.fl
-
-!IF  "$(CFG)" == "preferences - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\preferences.fl
-
-"..\..\test\preferences.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c preferences.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "preferences - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\preferences.fl
-
-"..\..\test\preferences.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c preferences.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/radio.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="radio" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=radio - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "radio.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "radio.mak" CFG="radio - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "radio - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "radio - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "radio - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/radio"
-# PROP BASE Intermediate_Dir "Release/radio"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/radio"
-# PROP Intermediate_Dir "Release/radio"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/radio.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "radio - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/radio"
-# PROP BASE Intermediate_Dir "Debug/radio"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/radio"
-# PROP Intermediate_Dir "Debug/radio"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/radiod.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "radio - Win32 Release"
-# Name "radio - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\radio.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\radio.fl
-
-!IF  "$(CFG)" == "radio - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\radio.fl
-
-"..\..\test\radio.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c radio.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "radio - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\radio.fl
-
-"..\..\test\radio.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c radio.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/resize.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="resize" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=resize - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "resize.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "resize.mak" CFG="resize - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "resize - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "resize - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "resize - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/resize"
-# PROP BASE Intermediate_Dir "Release/resize"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/resize"
-# PROP Intermediate_Dir "Release/resize"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/resize.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "resize - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/resize"
-# PROP BASE Intermediate_Dir "Debug/resize"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/resize"
-# PROP Intermediate_Dir "Debug/resize"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/resized.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "resize - Win32 Release"
-# Name "resize - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\resize.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\resize.fl
-
-!IF  "$(CFG)" == "resize - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\resize.fl
-
-"..\..\test\resize.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c resize.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "resize - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\resize.fl
-
-"..\..\test\resize.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c resize.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/resizebox.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="resizebox" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=resizebox - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "resizebox.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "resizebox.mak" CFG="resizebox - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "resizebox - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "resizebox - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "resizebox - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/resizebox"
-# PROP BASE Intermediate_Dir "Release/resizebox"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/resizebox"
-# PROP Intermediate_Dir "Release/resizebox"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/resizebox.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "resizebox - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/resizebox"
-# PROP BASE Intermediate_Dir "Debug/resizebox"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/resizebox"
-# PROP Intermediate_Dir "Debug/resizebox"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/resizeboxd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "resizebox - Win32 Release"
-# Name "resizebox - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\resizebox.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/rotated_text.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="rotated_text" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=rotated_text - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "rotated_text.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "rotated_text.mak" CFG="rotated_text - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "rotated_text - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "rotated_text - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "rotated_text - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/rotated_text"
-# PROP BASE Intermediate_Dir "Release/rotated_text"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/rotated_text"
-# PROP Intermediate_Dir "Release/rotated_text"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/rotated_text.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "rotated_text - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/rotated_text"
-# PROP BASE Intermediate_Dir "Debug/rotated_text"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/rotated_text"
-# PROP Intermediate_Dir "Debug/rotated_text"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/rotated_textd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "rotated_text - Win32 Release"
-# Name "rotated_text - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\rotated_text.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/scroll.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="scroll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=scroll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "scroll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "scroll.mak" CFG="scroll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "scroll - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "scroll - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "scroll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/scroll"
-# PROP BASE Intermediate_Dir "Release/scroll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/scroll"
-# PROP Intermediate_Dir "Release/scroll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/scroll.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "scroll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/scroll"
-# PROP BASE Intermediate_Dir "Debug/scroll"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/scroll"
-# PROP Intermediate_Dir "Debug/scroll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/scrolld.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "scroll - Win32 Release"
-# Name "scroll - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\scroll.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/shape.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="shape" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=shape - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "shape.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "shape.mak" CFG="shape - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "shape - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "shape - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "shape - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/shape"
-# PROP BASE Intermediate_Dir "Release/shape"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/shape"
-# PROP Intermediate_Dir "Release/shape"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_gl.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/shape.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "shape - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/shape"
-# PROP BASE Intermediate_Dir "Debug/shape"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/shape"
-# PROP Intermediate_Dir "Debug/shape"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_gld.lib glu32.lib opengl32.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/shaped.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "shape - Win32 Release"
-# Name "shape - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\shape.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/subwindow.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="subwindow" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=subwindow - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "subwindow.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "subwindow.mak" CFG="subwindow - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "subwindow - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "subwindow - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "subwindow - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/subwindow"
-# PROP BASE Intermediate_Dir "Release/subwindow"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/subwindow"
-# PROP Intermediate_Dir "Release/subwindow"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/subwindow.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "subwindow - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/subwindow"
-# PROP BASE Intermediate_Dir "Debug/subwindow"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/subwindow"
-# PROP Intermediate_Dir "Debug/subwindow"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/subwindowd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "subwindow - Win32 Release"
-# Name "subwindow - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\subwindow.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/sudoku.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="sudoku" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=sudoku - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "sudoku.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "sudoku.mak" CFG="sudoku - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "sudoku - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "sudoku - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "sudoku - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/sudoku"
-# PROP BASE Intermediate_Dir "Release/sudoku"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/sudoku"
-# PROP Intermediate_Dir "Release/sudoku"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/sudoku.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "sudoku - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/sudoku"
-# PROP BASE Intermediate_Dir "Debug/sudoku"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/sudoku"
-# PROP Intermediate_Dir "Debug/sudoku"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib winmm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/sudokud.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "sudoku - Win32 Release"
-# Name "sudoku - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\sudoku.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/symbols.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="symbols" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=symbols - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "symbols.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "symbols.mak" CFG="symbols - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "symbols - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "symbols - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "symbols - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/symbols"
-# PROP BASE Intermediate_Dir "Release/symbols"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/symbols"
-# PROP Intermediate_Dir "Release/symbols"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/symbols.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "symbols - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/symbols"
-# PROP BASE Intermediate_Dir "Debug/symbols"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/symbols"
-# PROP Intermediate_Dir "Debug/symbols"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/symbolsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "symbols - Win32 Release"
-# Name "symbols - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\symbols.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/table.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="table" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=table - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "table.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "table.mak" CFG="table - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "table - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "table - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "table - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/table"
-# PROP BASE Intermediate_Dir "Release/table"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/table"
-# PROP Intermediate_Dir "Release/table"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/table.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "table - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/table"
-# PROP BASE Intermediate_Dir "Debug/table"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/table"
-# PROP Intermediate_Dir "Debug/table"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tabled.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "table - Win32 Release"
-# Name "table - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\table.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/tabs.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="tabs" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=tabs - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "tabs.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "tabs.mak" CFG="tabs - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "tabs - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "tabs - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "tabs - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/tabs"
-# PROP BASE Intermediate_Dir "Release/tabs"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/tabs"
-# PROP Intermediate_Dir "Release/tabs"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tabs.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "tabs - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/tabs"
-# PROP BASE Intermediate_Dir "Debug/tabs"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/tabs"
-# PROP Intermediate_Dir "Debug/tabs"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tabsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "tabs - Win32 Release"
-# Name "tabs - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\tabs.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\tabs.fl
-
-!IF  "$(CFG)" == "tabs - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\tabs.fl
-
-"..\..\test\tabs.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c tabs.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "tabs - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\tabs.fl
-
-"..\..\test\tabs.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c tabs.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/threads.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="threads" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=threads - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "threads.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "threads.mak" CFG="threads - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "threads - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "threads - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "threads - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/threads"
-# PROP BASE Intermediate_Dir "Release/threads"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/threads"
-# PROP Intermediate_Dir "Release/threads"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/threads.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "threads - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/threads"
-# PROP BASE Intermediate_Dir "Debug/threads"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/threads"
-# PROP Intermediate_Dir "Debug/threads"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/threadsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "threads - Win32 Release"
-# Name "threads - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\threads.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/tile.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="tile" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=tile - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "tile.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "tile.mak" CFG="tile - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "tile - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "tile - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "tile - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/tile"
-# PROP BASE Intermediate_Dir "Release/tile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/tile"
-# PROP Intermediate_Dir "Release/tile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tile.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "tile - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/tile"
-# PROP BASE Intermediate_Dir "Debug/tile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/tile"
-# PROP Intermediate_Dir "Debug/tile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tiled.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "tile - Win32 Release"
-# Name "tile - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\tile.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/tiled_image.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="tiled_image" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=tiled_image - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "tiled_image.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "tiled_image.mak" CFG="tiled_image - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "tiled_image - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "tiled_image - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "tiled_image - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/tiled_image"
-# PROP BASE Intermediate_Dir "Release/tiled_image"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/tiled_image"
-# PROP Intermediate_Dir "Release/tiled_image"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib fltk_images.lib fltk_jpeg.lib fltk_png.lib fltk_zlib.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tiled_image.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "tiled_image - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/tiled_image"
-# PROP BASE Intermediate_Dir "Debug/tiled_image"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/tiled_image"
-# PROP Intermediate_Dir "Debug/tiled_image"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib fltk_imagesd.lib fltk_jpegd.lib fltk_pngd.lib fltk_zlibd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tiled_imaged.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "tiled_image - Win32 Release"
-# Name "tiled_image - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\tiled_image.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/tree.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="tree" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=tree - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "tree.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "tree.mak" CFG="tree - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "tree - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "tree - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "tree - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/tree"
-# PROP BASE Intermediate_Dir "Release/tree"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/tree"
-# PROP Intermediate_Dir "Release/tree"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/tree.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "tree - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/tree"
-# PROP BASE Intermediate_Dir "Debug/tree"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/tree"
-# PROP Intermediate_Dir "Debug/tree"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/treed.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "tree - Win32 Release"
-# Name "tree - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\tree.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\tree.fl
-
-!IF  "$(CFG)" == "tree - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\tree.fl
-
-"..\..\test\tree.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c tree.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "tree - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\tree.fl
-
-"..\..\test\tree.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c tree.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/utf8.dsp
+++ /dev/null
@@ -1,97 +1,0 @@
-# Microsoft Developer Studio Project File - Name="utf8" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=utf8 - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "utf8.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "utf8.mak" CFG="utf8 - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "utf8 - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "utf8 - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "utf8 - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/utf8"
-# PROP BASE Intermediate_Dir "Release/utf8"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/utf8"
-# PROP Intermediate_Dir "Release/utf8"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/utf8.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "utf8 - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/utf8"
-# PROP BASE Intermediate_Dir "Debug/utf8"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/utf8"
-# PROP Intermediate_Dir "Debug/utf8"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/utf8d.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "utf8 - Win32 Release"
-# Name "utf8 - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\utf8.cxx
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/VisualC6/valuators.dsp
+++ /dev/null
@@ -1,128 +1,0 @@
-# Microsoft Developer Studio Project File - Name="valuators" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=valuators - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "valuators.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "valuators.mak" CFG="valuators - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "valuators - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "valuators - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "valuators - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release/valuators"
-# PROP BASE Intermediate_Dir "Release/valuators"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release/valuators"
-# PROP Intermediate_Dir "Release/valuators"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MD /GX /Os /Ob2 /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 fltk.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/valuators.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:yes
-
-!ELSEIF  "$(CFG)" == "valuators - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug/valuators"
-# PROP BASE Intermediate_Dir "Debug/valuators"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug/valuators"
-# PROP Intermediate_Dir "Debug/valuators"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "." /I "../.." /I "../../zlib" /I "../../png" /I "../../jpeg" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "WIN32_EXTRA_LEAN" /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 fltkd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcd" /out:"../../test/valuatorsd.exe" /pdbtype:sept /libpath:"..\..\lib"
-# SUBTRACT LINK32 /pdb:none /incremental:no
-
-!ENDIF 
-
-# Begin Target
-
-# Name "valuators - Win32 Release"
-# Name "valuators - Win32 Debug"
-# Begin Source File
-
-SOURCE=..\..\test\valuators.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\valuators.fl
-
-!IF  "$(CFG)" == "valuators - Win32 Release"
-
-# Begin Custom Build - Create .cxx and .h file with fluid
-InputPath=..\..\test\valuators.fl
-
-"..\..\test\valuators.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluid -c valuators.fl
-	popd 
-	
-# End Custom Build
-
-!ELSEIF  "$(CFG)" == "valuators - Win32 Debug"
-
-# Begin Custom Build - Create .cxx and .h file with fluidd
-InputPath=..\..\test\valuators.fl
-
-"..\..\test\valuators.cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
-	pushd ..\..\test\ 
-	..\fluid\fluidd -c valuators.fl 
-	popd 
-	
-# End Custom Build
-
-!ENDIF 
-
-# End Source File
-# End Target
-# End Project
--- a/DoConfig/fltk/ide/Xcode4/FLTK.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,17476 +1,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		00BD4FD0209BFB1A6446B9A5 /* freeglut_teapot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 95604163D1E6CBE33AAD66CD /* freeglut_teapot.cxx */; };
-		023D5B2431F40114C118A5DB /* Fl_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BF1FE1C69D048AA23CF27B1E /* Fl_Window.cxx */; };
-		0262498E858406B6E51BD4E4 /* fl_symbols.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C8D88FDB0A0A32E59465025 /* fl_symbols.cxx */; };
-		036C655FFDAEEE93046F08A6 /* checkers.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 67989D22AB6482C5B577D395 /* checkers.cxx */; };
-		03CA5B8FDBAAC653038BFA06 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		03DB7A962738A76C4D5BAD67 /* Fl_abort.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E93CF8BB106A2249F0FC58B8 /* Fl_abort.cxx */; };
-		0476C2ACE5C995D19992D48F /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		04C166D5213DD80648BE1F4D /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		04DF45396E2902B78B3000E7 /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		05348A8D31686005E7ED112E /* keyboard.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 37F324F95525339860AEED24 /* keyboard.cxx */; };
-		054B849D18F5EBFB3B723E08 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		06167461BCECCD5F6CC0DF75 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		071128E11B275CCD34C503C9 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		075D902AD577A148FB33ACAE /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		079434B72A838E83BD225CA8 /* demo.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8D4E2F8A10BA06E332B7EB03 /* demo.cxx */; };
-		085A816C1A35B2F4A7A278F3 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		08B49F60E1211DE3569D73E2 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		09FD0BA86D2E85CF21F7C870 /* fl_read_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9CA94171ECE3444BB9D65BAE /* fl_read_image.cxx */; };
-		0A1B92FA87D5464E4C1AC4EF /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		0A206149DF20CCCACC90E642 /* Fl_Window_iconize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9E22773911BDBADEA86730D4 /* Fl_Window_iconize.cxx */; };
-		0A6E94501652FA0708E594FE /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		0B79061CA79B3045A5B81ACD /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		0B9E0AD21733CBA782692B60 /* jcmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C2979BC9629FABDCC0271BB /* jcmainct.c */; };
-		0BD1B4FF53C27EDA7B9F2C66 /* Fl_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 63CB19652C470F1E58DCF01E /* Fl_Input.cxx */; };
-		0C1C8E024CC1739ECC147412 /* Fl_Gl_Overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E81EE378D475F9CFDE296C9 /* Fl_Gl_Overlay.cxx */; };
-		0C21574DDEF4360995F5AC1C /* table.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AB3FA145ED96A9DA69465E9F /* table.cxx */; };
-		0C356220FCB74315D62FF06C /* Fl_Menu_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 199EA4C60DD488096817D322 /* Fl_Menu_Button.cxx */; };
-		0DA8A2B44F66D4014AF79700 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		0DCEA2FED492160FBCEAECC7 /* forms_free.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4036292D2024DE5622EA0D11 /* forms_free.cxx */; };
-		0DD4779E58571642E735F936 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		0E33CB7A389B20931404C97C /* freeglut_geometry.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 98E423BB92A1B4F201F6B042 /* freeglut_geometry.cxx */; };
-		0EEF4C6DD5294217DB42BB88 /* gl_draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AFB1FA7E614E064C55880F21 /* gl_draw.cxx */; };
-		0F15FD350AAEC543A5A9E462 /* jidctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = 377C68AADE10A3244413CFF6 /* jidctflt.c */; };
-		0F61FB70E4BBAE3919346A0E /* fl_set_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FBB2C3FCFF8322A237DDBE23 /* fl_set_font.cxx */; };
-		0FBA0DE689FCB1A3B674BAC4 /* fl_plastic.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E4A2A361D4B13B70464C6A26 /* fl_plastic.cxx */; };
-		10727EB1E80609438488AC42 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		11AAF790D7EBFBC6565962F3 /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = 28AFF174A53E38CCB7475C19 /* jdmaster.c */; };
-		12593F9F94BE42F4E595B444 /* Fl_Widget_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BF27A6A9F541DE61B19AB234 /* Fl_Widget_Type.cxx */; };
-		12E4293A141DD684369D6B8F /* fl_boxtype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9B54C6B8D801E899981FC5E6 /* fl_boxtype.cxx */; };
-		12EDA8498FE1A47E32A9428E /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 5575DA9A654EB53C515F917A /* png.c */; };
-		13DE96EAB36238A478381098 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		1490AC534F76E26EF9280C6D /* Fl_add_idle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274CBEBF1D1BFD5C91605CBE /* Fl_add_idle.cxx */; };
-		1565219A0166F42F299C2C9E /* Fl_Browser_load.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E46A3C4F955A94AE095FF726 /* Fl_Browser_load.cxx */; };
-		159B26C946095CB8019A2601 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		16C76FAEEC543074798FF0CB /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		16CA21C97F278A00B2558C3C /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = C4CF7DDC2EC8792157A3F43B /* pngread.c */; };
-		16F26F7D137CC7F7B57ECAC0 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		16FC08C22B1B693EB00C15F5 /* tree.fl in Sources */ = {isa = PBXBuildFile; fileRef = D10B1EA053B5C8F02A636D93 /* tree.fl */; };
-		17875FB347705D46D333E6EC /* fractals.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 598DD70F89D7731D61BBD8EF /* fractals.cxx */; };
-		185933E619D6C024C4B53D3B /* Fl_Value_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 34CB383C3A4360C14B58562E /* Fl_Value_Input.cxx */; };
-		1871DE13AAABA8DAC4D72C1B /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		1886A0D16F1C4CBC01549AF6 /* jdinput.c in Sources */ = {isa = PBXBuildFile; fileRef = EB9D2470FCD53D54DDB5CA10 /* jdinput.c */; };
-		1950AEA5C2CDBA7309A1C106 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		1A14C4DE9E6CF0B95B0FB8AD /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		1A4648F50FDEC75D91ADB1F8 /* boxtype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6C64353A3129BCCFAA667D86 /* boxtype.cxx */; };
-		1B467A9025A86C4F5E8A7768 /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		1BCCDEA57BF0DF6092597A65 /* jfdctfst.c in Sources */ = {isa = PBXBuildFile; fileRef = A4456FF8D730E5BE234723F8 /* jfdctfst.c */; };
-		1BD5FB7C1332668EC666F663 /* preferences.fl in Sources */ = {isa = PBXBuildFile; fileRef = 1D152F81B7390EEECF3BB670 /* preferences.fl */; };
-		1CB6D844334D5BAE34D67CFB /* code.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 052F1F0502DC2E28EA0D2405 /* code.cxx */; };
-		1CD7ED77B7B8FE0D99290351 /* fl_ask.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D8332361B912AFCE6DDF4B11 /* fl_ask.cxx */; };
-		1DDBA7A48EFE494F2494CDC1 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		1E30BECEFBF8C39CC563B19C /* Fl_GIF_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 877ED586A536CA9D898220D3 /* Fl_GIF_Image.cxx */; };
-		1E4A65E8426821F418E34775 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		1EFE9785743470A72FDB740A /* jerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 86685DA60EFE7C0F07DC5C3B /* jerror.c */; };
-		1F2CAC311F8A067E39FEE564 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		1F8D0FF2FEEA810F9264E92F /* Fl_compose.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 00B08A2C8EA901C350696F8D /* Fl_compose.cxx */; };
-		1FDC97CC5C45D5861E3F43EA /* alignment_panel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 91E088F22E63779E9E9FA651 /* alignment_panel.cxx */; };
-		2029258BA996D13B50EAFCA9 /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		2114F98DF24A76F0C3C8039E /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		214EBBAA64EC8BD80F10FE5E /* native-filechooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 922182C23B114BA60D9CF160 /* native-filechooser.cxx */; };
-		2169C2174D9331F7AE319055 /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		2171433E47522A24B4D70E26 /* jfdctint.c in Sources */ = {isa = PBXBuildFile; fileRef = EB3B78BA6DFC3CD491D13E83 /* jfdctint.c */; };
-		21B72C5246147C90863C53DA /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		233BF3B026584A65E890CC9D /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		23A3A004166BB92BE68B3B1D /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		23E0D56EF70C297EE1E49BEA /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		2418351D87E14186F8F1E3FE /* Fl_Tree.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FF610230DB4932346044FC7 /* Fl_Tree.cxx */; };
-		242570F8A9539222DEAC6CAF /* filename_isdir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2BECA86D733575C07B9982DF /* filename_isdir.cxx */; };
-		25BD82F1B2EC9988A25447F0 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		2642F76001144A05102CC191 /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B4931D88DEFF9253DD2B260 /* inffast.c */; };
-		273EA93D130ACF91000D6870 /* jaricom.c in Sources */ = {isa = PBXBuildFile; fileRef = 273EA935130ACF91000D6870 /* jaricom.c */; };
-		273EA93E130ACF91000D6870 /* jcarith.c in Sources */ = {isa = PBXBuildFile; fileRef = 273EA936130ACF91000D6870 /* jcarith.c */; };
-		273EA93F130ACF91000D6870 /* jdarith.c in Sources */ = {isa = PBXBuildFile; fileRef = 273EA937130ACF91000D6870 /* jdarith.c */; };
-		273EA940130ACF91000D6870 /* jdct.h in Headers */ = {isa = PBXBuildFile; fileRef = 273EA938130ACF91000D6870 /* jdct.h */; };
-		273EA941130ACF91000D6870 /* jinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = 273EA939130ACF91000D6870 /* jinclude.h */; };
-		273EA942130ACF91000D6870 /* jmemsys.h in Headers */ = {isa = PBXBuildFile; fileRef = 273EA93A130ACF91000D6870 /* jmemsys.h */; };
-		273EA943130ACF91000D6870 /* jpegint.h in Headers */ = {isa = PBXBuildFile; fileRef = 273EA93B130ACF91000D6870 /* jpegint.h */; };
-		273EA944130ACF91000D6870 /* jversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 273EA93C130ACF91000D6870 /* jversion.h */; };
-		274F92CF30A586E0F8E21530 /* Fl_Bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3F000DD5F091F66BC42822E3 /* Fl_Bitmap.cxx */; };
-		2773DE9597485DA8088C87BF /* hello.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4C2EEE3E17025A63A0AEEF5F /* hello.cxx */; };
-		27995ECF594A0572EAF3C346 /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		27B4C89E8CBF260313ACA42E /* undo.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D754515384F42D9E502F4A98 /* undo.cxx */; };
-		27B72DED3A7DC854571BD656 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		27C588BBFC1BE5D0F8202036 /* fluid.icns in Resources */ = {isa = PBXBuildFile; fileRef = 80CD4956321634F723D3C40B /* fluid.icns */; };
-		2800B0509A5D20FABE8F02DC /* fl_show_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EB15CE98189A4C0A7A8A480F /* fl_show_colormap.cxx */; };
-		2832E97111DB41A4B13A4EFE /* keyboard_ui.fl in Sources */ = {isa = PBXBuildFile; fileRef = 7B084447C58E292798B27283 /* keyboard_ui.fl */; };
-		285B384349B0FC5FCE9C9FCE /* fl_open_uri.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FAD24127A06F3F9F0EEB843A /* fl_open_uri.cxx */; };
-		291FA24A9E91A2036BC718A2 /* Fl_Overlay_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D1C792936D427CC48581BFAE /* Fl_Overlay_Window.cxx */; };
-		292AEA641D3592410000763E /* ExternalCodeEditor_UNIX.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 294EA3171D358DAD00052964 /* ExternalCodeEditor_UNIX.cxx */; };
-		29303C4480E0BBEB9E29EE7B /* vsnprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC0D2C965EDD6503B0CF519 /* vsnprintf.c */; };
-		299CB8A2848CB844BCEC7829 /* Fl_Paged_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6C1C9A4F054C48CDD6A2DE44 /* Fl_Paged_Device.cxx */; };
-		29A99477531233BE9391CE66 /* Fl_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5AF5119D08DFC92EA1032671 /* Fl_Slider.cxx */; };
-		29B01C1F3FF6C5B007DEEF45 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		29ED282EF51CBBB0CDEE76D6 /* Fl_Color_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 058BCBC36ADE724A418F1C43 /* Fl_Color_Chooser.cxx */; };
-		2A2F82B3FE0E053BB79FB38E /* device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DF2662F7275F8873F9BA6C64 /* device.cxx */; };
-		2BE1A3AC07CE39EEAC5E2B98 /* filename_list.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD0C572F3E0A8040E9C52E0F /* filename_list.cxx */; };
-		2C0BDF55B026879D401DF915 /* Fl_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1AC9AD74C0E0B27EA2A99DF7 /* Fl_File_Chooser.cxx */; };
-		2C18D3602DCF12F99C2ADDEC /* arc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 982C59D5682A91A5959BA02F /* arc.cxx */; };
-		2C4DB237B4B8ACD2FB305BD5 /* Fl_Shared_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 57639C1D5415FB55436556A2 /* Fl_Shared_Image.cxx */; };
-		2C8EFE6F2A1297FB4B263B2A /* fl_cursor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4343E645136756B9FEEE6902 /* fl_cursor.cxx */; };
-		2CFBED9BA0BE01679B285434 /* Fl_Input_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D531F77A15AACC9E297B4490 /* Fl_Input_.cxx */; };
-		2DA38DE505392D37C15EBBF1 /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		2DBFA5F7068A355456FC0E61 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		2E43C0679E5714486D7D535F /* Fl_Pack.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 813C830680D031C1B2FCF9B6 /* Fl_Pack.cxx */; };
-		2EF733AF9B79AB93D9E1F999 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		2F1EEE1E773AE6F2DCC92118 /* fl_set_fonts.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A68E1C76E8C3DC37B869BE48 /* fl_set_fonts.cxx */; };
-		2F757A7D91462691787751A3 /* fl_rect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BAF6DCFBAFBE016247558B82 /* fl_rect.cxx */; };
-		302D959F1FBBC3D44D27BA3F /* Fl_Group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 806103D71A8CD0075BF8E1DA /* Fl_Group.cxx */; };
-		303B7071960E2FB0337C3250 /* jdmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 428497C5DD96FDB07B2A8BC5 /* jdmainct.c */; };
-		3103F435B7C3508B6BF051D3 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3145F6B8C1A7EEC88A2881E0 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3171A6E41650360C5CEA1404 /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		319E158B9FA80488D676A040 /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		31F6473A9B5FD4FFB078BA78 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3222D7D927BF1220D08F1DF8 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		33175A3FB04A133479A558BA /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 11A4DF1725F38E4341C5C663 /* pngwrite.c */; };
-		339D0DFC256DE06A10F214B3 /* Fl_Wizard.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9951B49F640C2C15321EED9C /* Fl_Wizard.cxx */; };
-		33FCC793A92F544711E09A1E /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		3451831A2E9F171627CCA8C5 /* button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D06E371A971A3BC1B399AD78 /* button.cxx */; };
-		34870EA10DBD90DB3DD49DA0 /* fl_call_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1501BD6AB688B2DB8120E852 /* fl_call_main.c */; };
-		36332A81E6A6E7E3D5D26531 /* radio.fl in Sources */ = {isa = PBXBuildFile; fileRef = 58166AA7A85D9E037993FC38 /* radio.fl */; };
-		363CA6BAC2E1C6F51F3C4F91 /* tiled_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 94D15578CD49CC75FE6617E4 /* tiled_image.cxx */; };
-		365C8ABAB40CA4E4F4DE497B /* jcmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = D77F126A951A15185214FF2E /* jcmaster.c */; };
-		3680B81A8A377F872BA42B8C /* jidctfst.c in Sources */ = {isa = PBXBuildFile; fileRef = 2B5CC86924C64E849EBE0179 /* jidctfst.c */; };
-		36C0899CCC21C71B9CFF601B /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		36C503992BE0600DBDB7699B /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		36C7638C1D7425F3F9433974 /* Fl_XBM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 800E34DEF9E503C5EC6C4FA5 /* Fl_XBM_Image.cxx */; };
-		36F84F47A06F428D67FDBC3D /* Fl_Valuator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4194C917D667C0E2FCEF0A39 /* Fl_Valuator.cxx */; };
-		382C61DCD714A86859AA21CC /* Fl_Window_hotspot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CC2482EC04B752BF38D4DBE2 /* Fl_Window_hotspot.cxx */; };
-		384166BA6D314002CC87AB28 /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		387225B73ACF720C07465CC1 /* jctrans.c in Sources */ = {isa = PBXBuildFile; fileRef = E4337D2D7CEEDCAD78B068E5 /* jctrans.c */; };
-		38A9E11837924FB462FDAF0D /* scroll.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D5D41747D7B904747C2DFBB2 /* scroll.cxx */; };
-		38FF583076FEFAE950EEBD6E /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		390AA30E68FA34A4A6F57F9C /* Fl_Clock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F5CAE7DC565B8398F02ED7BA /* Fl_Clock.cxx */; };
-		3954B0A5D14C94760C0FE875 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		39755B7CD55E28BE048D5743 /* jcprepct.c in Sources */ = {isa = PBXBuildFile; fileRef = 14AA766D5DA5A8BCFF60B626 /* jcprepct.c */; };
-		39C3350334171A972F7E074D /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		3A12846E0559EA8896E0108E /* colbrowser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EC5862E1FC79542DC55D8462 /* colbrowser.cxx */; };
-		3A83BE134FEB6C0E893FC0AA /* forms_bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 34A2B3EFA6146F599E7CA80A /* forms_bitmap.cxx */; };
-		3AE331C8B0FBF5C668831552 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3B39A4D9B92163A3DC42B79D /* jdapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = AB3E00F5BBC9AB1C51B0EEDC /* jdapistd.c */; };
-		3B627DDF4E12177AED294C76 /* jdapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = D3FB35B309F2E1E59D1618C8 /* jdapimin.c */; };
-		3B93665C37B124E7072A0C29 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3BB6C389D42EA62871E9F4B4 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3BD005D954ABCB5983F540AB /* fl_utf.c in Sources */ = {isa = PBXBuildFile; fileRef = 42660BA0E346168608D0FADB /* fl_utf.c */; };
-		3C0CA0BFF07538026590AE21 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3C2E57EF6298BB0FC9412871 /* Fl_own_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AAE8D31DC4F024028C66743C /* Fl_own_colormap.cxx */; };
-		3D0A39265F7745FB60BD740F /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		3D8DD918B1AEA7E5E49C0EFE /* input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 97BB0EFFDBDEA3B11ED79A73 /* input.cxx */; };
-		3E1DA192DE89A61DB5162D12 /* fl_images_core.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 67715F3670D58DDDB47DB256 /* fl_images_core.cxx */; };
-		3EE305FE7D62A9AB707573F2 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		3F330B8758EB5AFF7C6CB8DE /* Fl_Repeat_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B03607BD43BB0D703411 /* Fl_Repeat_Button.cxx */; };
-		3FD5B1D9C066066CCA52724A /* filename_setext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 83733760D651C218178EAEB3 /* filename_setext.cxx */; };
-		40600399F05AB31ED7AFF144 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		40E66CBA06083998669F80CE /* Fl_Box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C3F048573FAEABD2D27401D4 /* Fl_Box.cxx */; };
-		40ED2C03EA658A1A020BF7C8 /* help.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D72D2F219FB1BBA586A03EAC /* help.cxx */; };
-		42B3433FEAA6AFB50DE4B73F /* fl_overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 577F8362F7016862051E2AC3 /* fl_overlay.cxx */; };
-		43440CEB6D01238C27CFEE6A /* Fl_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4E2BE7807B57162E18C7E63F /* Fl_Browser.cxx */; };
-		438CCCA43724B2E59680EF6B /* template_panel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9CBDD66D771449423070F912 /* template_panel.cxx */; };
-		43ACC9B8BA3A1A325A568C44 /* fl_overlay_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5CE4CB9AEF9070A32A27696D /* fl_overlay_visual.cxx */; };
-		447C7E45BD97CAF001C928CF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		449DC0C1FDA01F16CB184F66 /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 65E5BAE2A9732DA6B4A53098 /* deflate.c */; };
-		44EF64739BF54210820845FC /* fl_line_style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0B5987E1A293E67A6290612A /* fl_line_style.cxx */; };
-		4516B8BD99F86A028BF540F5 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		4536387C357FBA58B3C5258B /* Fl_Text_Display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A0C1440AC6EE3239EEC7D81B /* Fl_Text_Display.cxx */; };
-		454B5789047F9D7F2AF0EC04 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		459365165767B5C89B86DB0A /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		467B078A474152E261F77B96 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		48E16D81DEAAD2BD2F01C0A2 /* jdpostct.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D4D056FC1F1EFEC7585CA17 /* jdpostct.c */; };
-		48EE66A7F585223B21924B63 /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		491C33E5D1C00D489356B62E /* forms_compatability.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 07CDB54753C46D7CB01A3C8C /* forms_compatability.cxx */; };
-		495C752B9742C0729399A646 /* Fl_Round_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 13BCF00369D5254F0CE49599 /* Fl_Round_Button.cxx */; };
-		49C992F8293C1F88E2509C9E /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		49D34CB404F15A055EAF8C74 /* Fl_Tiled_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76726B622EF72DCDAD1C0D23 /* Fl_Tiled_Image.cxx */; };
-		4A5FC9B5C736E92E69D38B12 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		4ABD061A3FE58C7C3DEADD7B /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		4C07E1FB6BF75ACD25CB627E /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		4CA85FBAAB7E8F8801ECB742 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 6BCDA929CD8600DE9AC516DD /* compress.c */; };
-		4CE404B23BB3CB7291A0E2BC /* Fl_Counter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E9893274B0B6C5F24730235F /* Fl_Counter.cxx */; };
-		4CFC30BF43199CEEA406E563 /* inactive.fl in Sources */ = {isa = PBXBuildFile; fileRef = FE29497A25C52BC2F7D5A9D4 /* inactive.fl */; };
-		4D62E8773744771BD8FDF478 /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		4D94E62EB4D5FDF72A7C311E /* Fl_Tooltip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0DBD503036293A8AEFAC6725 /* Fl_Tooltip.cxx */; };
-		4D96D0670427CCD638845C05 /* Fl_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9A7DCBAFF41CBC3DCB67C6F /* Fl_Device.cxx */; };
-		4E06D7BE862A99B65C7E73FD /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = ADC532751F27C32E46DEFF6F /* pngtrans.c */; };
-		4E24CDCFCB51227673CFCB78 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		4E3DD3A261BD3A7DE91162ED /* fl_shadow_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F6A596316AE6F65117FF7196 /* fl_shadow_box.cxx */; };
-		4F038DFA7E6C3AD4C7F1AA3F /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		4FD74129390D07ED56265A84 /* jutils.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CD5A5D2975A2CCB77EBAD43 /* jutils.c */; };
-		501B41BD7C164588BBC06854 /* Fl_Menu_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D50A8FFC111398E34136B192 /* Fl_Menu_.cxx */; };
-		5058E348B88025656FFA027F /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		50D00B23D302F5A6221E1501 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		51A81D32CDB7920F88ED4FF2 /* fl_oval_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 340E5CD1F39C1484B1BCE8F3 /* fl_oval_box.cxx */; };
-		51FC4E43CA74B5CB3FD91147 /* flstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 530B066D0F3AC2972D9FEC30 /* flstring.c */; };
-		5287FBDD56000190BE0850A2 /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 577CE0F473400471A5F96A52 /* pngwutil.c */; };
-		54FB15769E7A1426DAE66471 /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		550652B276CA98DED26285DE /* CubeMain.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2A3CEBA07E8AE9BF4C002531 /* CubeMain.cxx */; };
-		5532B5F13E75B01A47BF52E4 /* line_style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DA6D2097C089DE9936A0B112 /* line_style.cxx */; };
-		5555352E4C682E105F2B220B /* editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 368BC008DC3AE26333DF0321 /* editor.cxx */; };
-		55FDB9355B4B2E99384B59F1 /* fullscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EDE6CE6B09D31AC0AAC9FF56 /* fullscreen.cxx */; };
-		578EC0C763C2179582923456 /* CubeView.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 323779B8DE42371A98337337 /* CubeView.cxx */; };
-		57CBCDDBCD73332F9CF12C0A /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		5849E21F505FC39533995DCA /* scandir.c in Sources */ = {isa = PBXBuildFile; fileRef = BF30A6F91EA43AB094476FFC /* scandir.c */; };
-		58B9DC2FA44EF62193BCB145 /* pixmap_browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 78EE1A0803C3AAA7BFAF79B8 /* pixmap_browser.cxx */; };
-		58D9DA0C0F0A11E97EAAB61B /* freeglut_stroke_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6CCA5064754A8314839CB37A /* freeglut_stroke_roman.cxx */; };
-		59826A4FF117DE06A6F70ABD /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2DE25DB4CE986C1857B5ECF7 /* Fl_Native_File_Chooser.cxx */; };
-		5B3DACE9AD337A089D2A2BDA /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5B4CB32F2F0797A635568B3A /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		5BF4C749E28B3792559C9107 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5BFD4A9B3EAC4767672C021C /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5C908E926420B21866AA191B /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		5CD956623969853397A89165 /* align_widget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 09FC37C8231478832FDD1F9E /* align_widget.cxx */; };
-		5D04FDD42A39B6B7F5D27432 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5D09807715B94D045C7CA7D0 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		5D1D08BF3F79DC7C29D6FCF4 /* Fl_Light_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BA7B1E9C7AA7316E98D369C2 /* Fl_Light_Button.cxx */; };
-		5DE12673768A18EB41C6186E /* Fl_Window_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4A588F0AA73E5324BEE111A7 /* Fl_Window_Type.cxx */; };
-		5DE5BC3242C44595E62FA505 /* fl_curve.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3306C66283D192B1B1739E25 /* fl_curve.cxx */; };
-		5DF86EA5A868928C5D7D01F3 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5E5B8FF11E1E1903F91F1884 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		5E71CF75BEA893FEABC5D71B /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		5EDF60DDCDC6919CF0165574 /* jdsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 5538B949B47F04D03589F2CE /* jdsample.c */; };
-		5FE596C22B71AF1F7235ECAE /* Fl_Window_fullscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F42EEFA08A75F71B33094D50 /* Fl_Window_fullscreen.cxx */; };
-		609595520CEFF3C9F945D4B7 /* mandelbrot_ui.fl in Sources */ = {isa = PBXBuildFile; fileRef = 8222D901BB4DAF097B81C1FE /* mandelbrot_ui.fl */; };
-		609B6AA9A11886AD120078E5 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		61407877A424C4E1A74036C0 /* Fl_File_Chooser2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 17D7629A8FC1C1A1DABEDAC0 /* Fl_File_Chooser2.cxx */; };
-		617249DCB00CDAFCEFF47507 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		63AEC4D1ECF904942EB3F9F6 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		63C6A53E427D883D50AFF203 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6405302969D2F33411D220BA /* jcparam.c in Sources */ = {isa = PBXBuildFile; fileRef = 7DF4AD3769671959EA813845 /* jcparam.c */; };
-		642541867ABE531C662490CD /* pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E8D790E9361D2B311B6839B1 /* pixmap.cxx */; };
-		644FEEF43A0CCBD89E2CE6FC /* Fl_Table_Row.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 351BFCA4747AF494F84FFE36 /* Fl_Table_Row.cxx */; };
-		64917A6B67AF2060534DB5D9 /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		6524CA4C83E0EFF0D8DFC432 /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		6527520C50FC90A0EDE72F87 /* Fl_Tree_Item.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6170B3704ED34EBCF80E43C1 /* Fl_Tree_Item.cxx */; };
-		65ED74375F61EB54BF8C7341 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		66562A26749676E7CD2BEBB2 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		66F171E715C700BAE6C97C61 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		671D5E8AC4CDE34D468FDFE9 /* freeglut_stroke_mono_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 73374F6E214D9DC3E2264866 /* freeglut_stroke_mono_roman.cxx */; };
-		67908E394E6408CC8AACFE92 /* about_panel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 43D9A7CD936B1382F5EA23E1 /* about_panel.cxx */; };
-		67B71A4FFE562E1F62DE8C7A /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		688240CE098D27582ADC82F3 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		68D18B8291BECB504DDAE1A9 /* file.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2333DEC98DFFAA27F3D85449 /* file.cxx */; };
-		692AE7202326E78B7334933D /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		6A001220236C38EDB3772A2A /* Fl_Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4D55C9FE101986BC47029A16 /* Fl_Choice.cxx */; };
-		6A19D50B01471987066FCBA0 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6A2D8756389F45F77825486A /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		6C121DB655DF72455AD07862 /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		6C917160D346EAC358A90BA7 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6CAAD4E5368B815F53C63CE8 /* jcinit.c in Sources */ = {isa = PBXBuildFile; fileRef = 819B540345E59C29EE9DF3DA /* jcinit.c */; };
-		6CB0DF5E285910A70179BEA7 /* cursor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8C53A414ED45A9276B8B4C40 /* cursor.cxx */; };
-		6CDB4D7AC9F02809E45F15A3 /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 9795165015E763BF705783DC /* pngerror.c */; };
-		6CEC490DCC06F6DDE8320100 /* jccoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = 2483CB305CCA0A319EF35BCF /* jccoefct.c */; };
-		6CF374ADD093E8B2F8D5CB1F /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		6D0C34F0837A30162A7B3759 /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = D816F0ECD89EEA82EC711076 /* trees.c */; };
-		6D1D23AC12075C7023D6272E /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		6D3127372B7CF208B3FFC3BB /* fonts.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C17C98660CE64B98C8E2DFB /* fonts.cxx */; };
-		6D607F654C1C216920498A3F /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6D84DDCA780B4B8B5C10849E /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6D8F8E2E6F8039FE4B127D31 /* jquant1.c in Sources */ = {isa = PBXBuildFile; fileRef = DD96B70D85E60B641F061D51 /* jquant1.c */; };
-		6DA839CF781EBC87AD3CF6B4 /* Fl_File_Icon.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5D36F806A2C72F1894F0878E /* Fl_File_Icon.cxx */; };
-		6E26DC5021010B8A2EB6C29E /* jddctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FB7B9BDAA5F88A0223A5EA9 /* jddctmgr.c */; };
-		6EB2B457956E33EEE724D16A /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		6EDC00A2A72FBC2364315591 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		6F54BCE9C265659518C91270 /* output.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 42C83618F3462133634D3CF9 /* output.cxx */; };
-		6F8B4EC22CC54B6B06F9D5C7 /* Fl_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6DCFF326B588B1B27618F28C /* Fl_Image.cxx */; };
-		6FD47E04046FAD55F12B263D /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		708B512D2D2F2FE8B26D329C /* curve.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 09A55ED62CD9010F1E512122 /* curve.cxx */; };
-		717B3CDBF11CAE5C04D035F8 /* Fl_Progress.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 570D0C7510FE3A3FB7A1BD5D /* Fl_Progress.cxx */; };
-		71967BE27E13E5EA2F6627D0 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		71A1293362845D379D9FE9D1 /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		72E4CB2E5E835C6DFB5C032B /* fracviewer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 431856A376572B057493295D /* fracviewer.cxx */; };
-		7359A414B4FEE003CFCA6351 /* threads.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6DFD0BF5428959EE73D260D8 /* threads.cxx */; };
-		743107FF599BD4B46CF82FB8 /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		745C2AF79ABD813E3AE9CD70 /* Fl_File_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC4C39F3567A5571CABF1038 /* Fl_File_Browser.cxx */; };
-		74724A686235657769236719 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		74C9584969DCD849A6A1247F /* color_chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 45B993D3FA0EED6037499D3A /* color_chooser.cxx */; };
-		74D195DEE3A33FA0C8C7A5BE /* Fl_Help_View.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 790419B5A0AD64D66F9B19E1 /* Fl_Help_View.cxx */; };
-		753A6417598E2D35C308632A /* valuators.fl in Sources */ = {isa = PBXBuildFile; fileRef = 590C56F672356072A5C86BC3 /* valuators.fl */; };
-		761829645FD3BCA7EE9DE369 /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		762325B25679668EB687A028 /* gl_overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1F6E4CE3C0DF58D8F7B3A94A /* gl_overlay.cxx */; };
-		7780DFF77FE8A2E3918D76EE /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		78A86E05D9AE49D54C6503EB /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		794879F3090773543095027D /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7963240B96561256B383C35B /* buttons.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0A9C06C70D7733C29D99F901 /* buttons.cxx */; };
-		79760C35C8AC881A18FBB8B8 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7A166EFA4FE98B4E7D74341B /* doublebuffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D3761C93D5C7A48D4B80225A /* doublebuffer.cxx */; };
-		7B95C9D17987D8A4E6951C8E /* jcsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 65E1ABE72414529CBD1F937C /* jcsample.c */; };
-		7C8F2CC22CFE9E97BBE4AC8A /* resizebox.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1D02929D32167C37921C842E /* resizebox.cxx */; };
-		7C9D61E23D197391AA580170 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7CA436768F01BC9E36510732 /* Fluid_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C1848E31F46192797A1EEC5E /* Fluid_Image.cxx */; };
-		7D2F2709B54D7A2A87630351 /* Fl_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5A7532B3CDA46030885D1D14 /* Fl_Button.cxx */; };
-		7DED430847690C00C5E94FDA /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7DED43FFEE9A23B55D42073B /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		7E36EE20479A763B89039D88 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 24E8C158A0FFA9C8900E98D8 /* pngwtran.c */; };
-		7E8E2DC7A53A62D0F1EB860E /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7EA88708B9A088FCEB7CAA27 /* file_chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 39CD231E22E0B53E92CABDC9 /* file_chooser.cxx */; };
-		7EC3AD9A56535A54430B8DCD /* Fl_Browser_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AAD25B747F4122A2C5224708 /* Fl_Browser_.cxx */; };
-		7F12FCC718E1EEB900AB6A11 /* fl_gleam.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F12FCC618E1EEB900AB6A11 /* fl_gleam.cxx */; };
-		7F3421EC1CE8ADB7005FA821 /* help-test.html in Resources */ = {isa = PBXBuildFile; fileRef = 7F3421EB1CE8ADB7005FA821 /* help-test.html */; };
-		7F3421EF1CE8AE00005FA821 /* help-test.html in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7F3421EB1CE8ADB7005FA821 /* help-test.html */; };
-		7F419DFC1D92857E0098B602 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7F419DFE1D92857E0098B602 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7F419E071D9285D90098B602 /* offscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F419E061D9285D90098B602 /* offscreen.cxx */; };
-		7F4762EE12D22C470073A4F9 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F4762ED12D22C470073A4F9 /* ApplicationServices.framework */; };
-		7F54C8A8130FAC4F00E736F3 /* gzclose.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F54C8A3130FAC4F00E736F3 /* gzclose.c */; };
-		7F54C8A9130FAC4F00E736F3 /* gzlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F54C8A4130FAC4F00E736F3 /* gzlib.c */; };
-		7F54C8AA130FAC4F00E736F3 /* gzread.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F54C8A5130FAC4F00E736F3 /* gzread.c */; };
-		7F54C8AB130FAC4F00E736F3 /* gzwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F54C8A6130FAC4F00E736F3 /* gzwrite.c */; };
-		7F54C8AC130FAC4F00E736F3 /* infback.c in Sources */ = {isa = PBXBuildFile; fileRef = 7F54C8A7130FAC4F00E736F3 /* infback.c */; };
-		7F66B1D912BB924C00C67B59 /* Fl_cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D612BB924C00C67B59 /* Fl_cocoa.mm */; };
-		7F66B1DA12BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D712BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm */; };
-		7F66B1DB12BB924C00C67B59 /* Fl_Quartz_Printer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D812BB924C00C67B59 /* Fl_Quartz_Printer.mm */; };
-		7F6F526419CF0FED0075F408 /* Fl_Window_shape.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F6F526319CF0FED0075F408 /* Fl_Window_shape.cxx */; };
-		7F7CF8191AB97DA600E12B22 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		7F7CF81F1AB9836C00E12B22 /* animated.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F7CF81E1AB9836C00E12B22 /* animated.cxx */; };
-		7F8E7E391C0DA8D200B806A0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92032516B1A90A000FC50F /* Localizable.strings */; };
-		7F8E7E3A1C0DA8F000B806A0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031C16B1A909000FC50F /* Localizable.strings */; };
-		7F8E7E3B1C0DA8F700B806A0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031F16B1A909000FC50F /* Localizable.strings */; };
-		7F8E7E3C1C0DA8FB00B806A0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92032216B1A909000FC50F /* Localizable.strings */; };
-		7F8E7E3D1C0DA90100B806A0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031916B1A909000FC50F /* Localizable.strings */; };
-		7FA5C2BE192FAEBB00519823 /* Fl_Copy_Surface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FA5C2BD192FAEBB00519823 /* Fl_Copy_Surface.cxx */; };
-		7FA5C2C0192FAECA00519823 /* Fl_Image_Surface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FA5C2BF192FAECA00519823 /* Fl_Image_Surface.cxx */; };
-		7FB1BE051B5D20CF00055291 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-		7FBCECDF1B1D8B2100AB970D /* Fl_cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D612BB924C00C67B59 /* Fl_cocoa.mm */; };
-		7FBCECE01B1D8B2100AB970D /* Fl_Native_File_Chooser_MAC.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D712BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm */; };
-		7FBCECE11B1D8B2100AB970D /* Fl_Quartz_Printer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7F66B1D812BB924C00C67B59 /* Fl_Quartz_Printer.mm */; };
-		7FBCECE21B1D8B2100AB970D /* Fl_Sys_Menu_Bar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDE551171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm */; };
-		7FBCECE31B1D8B2100AB970D /* Fl.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F4EFF27D730BED51EF0EAA8D /* Fl.cxx */; };
-		7FBCECE41B1D8B2100AB970D /* Fl_Adjuster.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 19C5DB6F3DD5011DAE6F79AB /* Fl_Adjuster.cxx */; };
-		7FBCECE51B1D8B2100AB970D /* Fl_Bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3F000DD5F091F66BC42822E3 /* Fl_Bitmap.cxx */; };
-		7FBCECE61B1D8B2100AB970D /* Fl_Box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C3F048573FAEABD2D27401D4 /* Fl_Box.cxx */; };
-		7FBCECE71B1D8B2100AB970D /* Fl_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4E2BE7807B57162E18C7E63F /* Fl_Browser.cxx */; };
-		7FBCECE81B1D8B2100AB970D /* Fl_Browser_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AAD25B747F4122A2C5224708 /* Fl_Browser_.cxx */; };
-		7FBCECE91B1D8B2100AB970D /* Fl_Browser_load.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E46A3C4F955A94AE095FF726 /* Fl_Browser_load.cxx */; };
-		7FBCECEA1B1D8B2100AB970D /* Fl_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5A7532B3CDA46030885D1D14 /* Fl_Button.cxx */; };
-		7FBCECEB1B1D8B2100AB970D /* Fl_Chart.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F397A185D11C3DED903CB99F /* Fl_Chart.cxx */; };
-		7FBCECEC1B1D8B2100AB970D /* Fl_Check_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F5B04FDCF453C6444285D186 /* Fl_Check_Browser.cxx */; };
-		7FBCECED1B1D8B2100AB970D /* Fl_Check_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A2CF2FD35911638AD607092F /* Fl_Check_Button.cxx */; };
-		7FBCECEE1B1D8B2100AB970D /* Fl_Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4D55C9FE101986BC47029A16 /* Fl_Choice.cxx */; };
-		7FBCECEF1B1D8B2100AB970D /* Fl_Clock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F5CAE7DC565B8398F02ED7BA /* Fl_Clock.cxx */; };
-		7FBCECF01B1D8B2100AB970D /* Fl_Color_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 058BCBC36ADE724A418F1C43 /* Fl_Color_Chooser.cxx */; };
-		7FBCECF11B1D8B2100AB970D /* Fl_Copy_Surface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FA5C2BD192FAEBB00519823 /* Fl_Copy_Surface.cxx */; };
-		7FBCECF21B1D8B2100AB970D /* Fl_Counter.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E9893274B0B6C5F24730235F /* Fl_Counter.cxx */; };
-		7FBCECF31B1D8B2100AB970D /* Fl_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9A7DCBAFF41CBC3DCB67C6F /* Fl_Device.cxx */; };
-		7FBCECF41B1D8B2100AB970D /* Fl_Dial.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3AFC31503AB99F6D00BAC647 /* Fl_Dial.cxx */; };
-		7FBCECF51B1D8B2100AB970D /* Fl_Double_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 33AF346DF043165E0A62ABB5 /* Fl_Double_Window.cxx */; };
-		7FBCECF61B1D8B2100AB970D /* Fl_File_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC4C39F3567A5571CABF1038 /* Fl_File_Browser.cxx */; };
-		7FBCECF71B1D8B2100AB970D /* Fl_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1AC9AD74C0E0B27EA2A99DF7 /* Fl_File_Chooser.cxx */; };
-		7FBCECF81B1D8B2100AB970D /* Fl_File_Chooser2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 17D7629A8FC1C1A1DABEDAC0 /* Fl_File_Chooser2.cxx */; };
-		7FBCECF91B1D8B2100AB970D /* Fl_File_Icon.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5D36F806A2C72F1894F0878E /* Fl_File_Icon.cxx */; };
-		7FBCECFA1B1D8B2100AB970D /* Fl_File_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A66819BE170F44B94F2E1981 /* Fl_File_Input.cxx */; };
-		7FBCECFB1B1D8B2100AB970D /* Fl_Group.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 806103D71A8CD0075BF8E1DA /* Fl_Group.cxx */; };
-		7FBCECFC1B1D8B2100AB970D /* Fl_Help_View.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 790419B5A0AD64D66F9B19E1 /* Fl_Help_View.cxx */; };
-		7FBCECFD1B1D8B2100AB970D /* Fl_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6DCFF326B588B1B27618F28C /* Fl_Image.cxx */; };
-		7FBCECFE1B1D8B2100AB970D /* Fl_Image_Surface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FA5C2BF192FAECA00519823 /* Fl_Image_Surface.cxx */; };
-		7FBCECFF1B1D8B2100AB970D /* Fl_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 63CB19652C470F1E58DCF01E /* Fl_Input.cxx */; };
-		7FBCED001B1D8B2100AB970D /* Fl_Input_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D531F77A15AACC9E297B4490 /* Fl_Input_.cxx */; };
-		7FBCED011B1D8B2100AB970D /* Fl_Light_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BA7B1E9C7AA7316E98D369C2 /* Fl_Light_Button.cxx */; };
-		7FBCED021B1D8B2100AB970D /* Fl_Menu.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7E05602BE68211B11E493E18 /* Fl_Menu.cxx */; };
-		7FBCED031B1D8B2100AB970D /* Fl_Menu_.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D50A8FFC111398E34136B192 /* Fl_Menu_.cxx */; };
-		7FBCED041B1D8B2100AB970D /* Fl_Menu_Bar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F4B8ADD01CB2F8BFE43ACBA /* Fl_Menu_Bar.cxx */; };
-		7FBCED051B1D8B2100AB970D /* Fl_Menu_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 199EA4C60DD488096817D322 /* Fl_Menu_Button.cxx */; };
-		7FBCED061B1D8B2100AB970D /* Fl_Menu_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FB757CD5BD887D355358D2E /* Fl_Menu_Window.cxx */; };
-		7FBCED071B1D8B2100AB970D /* Fl_Menu_add.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 382F938CFABC25BC02C13939 /* Fl_Menu_add.cxx */; };
-		7FBCED081B1D8B2100AB970D /* Fl_Menu_global.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D7E1955B57E8EF19FD90CF61 /* Fl_Menu_global.cxx */; };
-		7FBCED091B1D8B2100AB970D /* Fl_Multi_Label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D02CF2893ECCE831CD5D3176 /* Fl_Multi_Label.cxx */; };
-		7FBCED0A1B1D8B2100AB970D /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2DE25DB4CE986C1857B5ECF7 /* Fl_Native_File_Chooser.cxx */; };
-		7FBCED0B1B1D8B2100AB970D /* Fl_Overlay_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D1C792936D427CC48581BFAE /* Fl_Overlay_Window.cxx */; };
-		7FBCED0C1B1D8B2100AB970D /* Fl_Pack.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 813C830680D031C1B2FCF9B6 /* Fl_Pack.cxx */; };
-		7FBCED0D1B1D8B2100AB970D /* Fl_Paged_Device.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6C1C9A4F054C48CDD6A2DE44 /* Fl_Paged_Device.cxx */; };
-		7FBCED0E1B1D8B2100AB970D /* Fl_Pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D79D3910F834D4B78FED92F3 /* Fl_Pixmap.cxx */; };
-		7FBCED0F1B1D8B2100AB970D /* Fl_Positioner.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 05BBBFE4BED0452E5D6A81F7 /* Fl_Positioner.cxx */; };
-		7FBCED101B1D8B2100AB970D /* Fl_PostScript.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDD15B19BE08A800779AD1 /* Fl_PostScript.cxx */; };
-		7FBCED111B1D8B2100AB970D /* Fl_Printer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B4CAFA162560925C4591997A /* Fl_Printer.cxx */; };
-		7FBCED121B1D8B2100AB970D /* Fl_Preferences.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3789CACF6C845E9C0DE0C58F /* Fl_Preferences.cxx */; };
-		7FBCED131B1D8B2100AB970D /* Fl_Progress.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 570D0C7510FE3A3FB7A1BD5D /* Fl_Progress.cxx */; };
-		7FBCED141B1D8B2100AB970D /* Fl_Repeat_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B03607BD43BB0D703411 /* Fl_Repeat_Button.cxx */; };
-		7FBCED151B1D8B2100AB970D /* Fl_Return_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9A3D4184FF1C89B7CEE9FBD6 /* Fl_Return_Button.cxx */; };
-		7FBCED161B1D8B2100AB970D /* Fl_Roller.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D0E376E93B4F22BE701D29E0 /* Fl_Roller.cxx */; };
-		7FBCED171B1D8B2100AB970D /* Fl_Round_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 13BCF00369D5254F0CE49599 /* Fl_Round_Button.cxx */; };
-		7FBCED181B1D8B2100AB970D /* Fl_Scroll.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3F60A41762817C834FF38947 /* Fl_Scroll.cxx */; };
-		7FBCED191B1D8B2100AB970D /* Fl_Scrollbar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5B9A5CE605BB8A57F66A2E6 /* Fl_Scrollbar.cxx */; };
-		7FBCED1A1B1D8B2100AB970D /* Fl_Shared_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 57639C1D5415FB55436556A2 /* Fl_Shared_Image.cxx */; };
-		7FBCED1B1B1D8B2100AB970D /* Fl_Single_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9D942824B8FC886F6FCD853D /* Fl_Single_Window.cxx */; };
-		7FBCED1C1B1D8B2100AB970D /* Fl_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5AF5119D08DFC92EA1032671 /* Fl_Slider.cxx */; };
-		7FBCED1D1B1D8B2100AB970D /* Fl_Table.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 116F849BE68830F05CA66B9A /* Fl_Table.cxx */; };
-		7FBCED1E1B1D8B2100AB970D /* Fl_Table_Row.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 351BFCA4747AF494F84FFE36 /* Fl_Table_Row.cxx */; };
-		7FBCED1F1B1D8B2100AB970D /* Fl_Tabs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D5F75B6C9483B2BB47965789 /* Fl_Tabs.cxx */; };
-		7FBCED201B1D8B2100AB970D /* Fl_Text_Buffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D390A37D428892B9A8AD63AD /* Fl_Text_Buffer.cxx */; };
-		7FBCED211B1D8B2100AB970D /* Fl_Text_Display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A0C1440AC6EE3239EEC7D81B /* Fl_Text_Display.cxx */; };
-		7FBCED221B1D8B2100AB970D /* Fl_Text_Editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9FC21A432D9F4C118B2B1D4 /* Fl_Text_Editor.cxx */; };
-		7FBCED231B1D8B2100AB970D /* Fl_Tile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E82932DF2A0C624C6EDC9207 /* Fl_Tile.cxx */; };
-		7FBCED241B1D8B2100AB970D /* Fl_Tiled_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 76726B622EF72DCDAD1C0D23 /* Fl_Tiled_Image.cxx */; };
-		7FBCED251B1D8B2100AB970D /* Fl_Tooltip.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0DBD503036293A8AEFAC6725 /* Fl_Tooltip.cxx */; };
-		7FBCED261B1D8B2100AB970D /* Fl_Tree.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FF610230DB4932346044FC7 /* Fl_Tree.cxx */; };
-		7FBCED271B1D8B2100AB970D /* Fl_Tree_Item.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6170B3704ED34EBCF80E43C1 /* Fl_Tree_Item.cxx */; };
-		7FBCED281B1D8B2100AB970D /* Fl_Tree_Item_Array.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 00E3864092375950FE42449E /* Fl_Tree_Item_Array.cxx */; };
-		7FBCED291B1D8B2100AB970D /* Fl_Tree_Prefs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 197D446B1F4FEB565793FC67 /* Fl_Tree_Prefs.cxx */; };
-		7FBCED2A1B1D8B2100AB970D /* Fl_Valuator.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4194C917D667C0E2FCEF0A39 /* Fl_Valuator.cxx */; };
-		7FBCED2B1B1D8B2100AB970D /* Fl_Value_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 34CB383C3A4360C14B58562E /* Fl_Value_Input.cxx */; };
-		7FBCED2C1B1D8B2100AB970D /* Fl_Value_Output.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F1C4032FB66042A96955A62E /* Fl_Value_Output.cxx */; };
-		7FBCED2D1B1D8B2100AB970D /* Fl_Value_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D80607C7E1AAA63C8B8F1978 /* Fl_Value_Slider.cxx */; };
-		7FBCED2E1B1D8B2100AB970D /* Fl_Widget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0B9D4355B2E878715DD43AD3 /* Fl_Widget.cxx */; };
-		7FBCED2F1B1D8B2100AB970D /* Fl_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BF1FE1C69D048AA23CF27B1E /* Fl_Window.cxx */; };
-		7FBCED301B1D8B2100AB970D /* Fl_Window_fullscreen.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F42EEFA08A75F71B33094D50 /* Fl_Window_fullscreen.cxx */; };
-		7FBCED311B1D8B2100AB970D /* Fl_Window_hotspot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CC2482EC04B752BF38D4DBE2 /* Fl_Window_hotspot.cxx */; };
-		7FBCED321B1D8B2100AB970D /* Fl_Window_iconize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9E22773911BDBADEA86730D4 /* Fl_Window_iconize.cxx */; };
-		7FBCED331B1D8B2100AB970D /* Fl_Window_shape.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F6F526319CF0FED0075F408 /* Fl_Window_shape.cxx */; };
-		7FBCED341B1D8B2100AB970D /* Fl_Wizard.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9951B49F640C2C15321EED9C /* Fl_Wizard.cxx */; };
-		7FBCED351B1D8B2100AB970D /* Fl_XBM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 800E34DEF9E503C5EC6C4FA5 /* Fl_XBM_Image.cxx */; };
-		7FBCED361B1D8B2100AB970D /* Fl_XPM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0CBC6DC7942212D47B70681B /* Fl_XPM_Image.cxx */; };
-		7FBCED371B1D8B2100AB970D /* Fl_abort.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E93CF8BB106A2249F0FC58B8 /* Fl_abort.cxx */; };
-		7FBCED381B1D8B2100AB970D /* Fl_add_idle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 274CBEBF1D1BFD5C91605CBE /* Fl_add_idle.cxx */; };
-		7FBCED391B1D8B2100AB970D /* Fl_arg.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9F484B5F88CDE466AC0D0592 /* Fl_arg.cxx */; };
-		7FBCED3A1B1D8B2100AB970D /* Fl_compose.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 00B08A2C8EA901C350696F8D /* Fl_compose.cxx */; };
-		7FBCED3B1B1D8B2100AB970D /* Fl_display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0E259033BF45B73C21409C8F /* Fl_display.cxx */; };
-		7FBCED3C1B1D8B2100AB970D /* Fl_get_key.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5B566F3BAD7101C63D5494E3 /* Fl_get_key.cxx */; };
-		7FBCED3D1B1D8B2100AB970D /* Fl_get_system_colors.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EB5B18A1B9B1E41F2AB56A97 /* Fl_get_system_colors.cxx */; };
-		7FBCED3E1B1D8B2100AB970D /* Fl_grab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28E8F2802DEA5334F914BE98 /* Fl_grab.cxx */; };
-		7FBCED3F1B1D8B2100AB970D /* Fl_lock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D004B2D87C53E063F848C539 /* Fl_lock.cxx */; };
-		7FBCED401B1D8B2100AB970D /* Fl_own_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AAE8D31DC4F024028C66743C /* Fl_own_colormap.cxx */; };
-		7FBCED411B1D8B2100AB970D /* Fl_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5B2B6ED6A3649923BAAFFDF1 /* Fl_visual.cxx */; };
-		7FBCED421B1D8B2100AB970D /* Fl_x.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 09A359CA8F522F64BAF6CEAF /* Fl_x.cxx */; };
-		7FBCED431B1D8B2100AB970D /* cmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AC0F7C69B25854F609BD1A0C /* cmap.cxx */; };
-		7FBCED441B1D8B2100AB970D /* filename_absolute.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D60CC89D1A70BE6AA3929604 /* filename_absolute.cxx */; };
-		7FBCED451B1D8B2100AB970D /* filename_expand.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E49427F44D81B0A6192BC7CB /* filename_expand.cxx */; };
-		7FBCED461B1D8B2100AB970D /* filename_ext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B140C9F8CF34FDAC94E15FE1 /* filename_ext.cxx */; };
-		7FBCED471B1D8B2100AB970D /* filename_isdir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2BECA86D733575C07B9982DF /* filename_isdir.cxx */; };
-		7FBCED481B1D8B2100AB970D /* filename_list.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD0C572F3E0A8040E9C52E0F /* filename_list.cxx */; };
-		7FBCED491B1D8B2100AB970D /* filename_match.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 81CBEA61461E59652A309159 /* filename_match.cxx */; };
-		7FBCED4A1B1D8B2100AB970D /* filename_setext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 83733760D651C218178EAEB3 /* filename_setext.cxx */; };
-		7FBCED4B1B1D8B2100AB970D /* fl_arc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 39E501DBC41F2617B69BEE95 /* fl_arc.cxx */; };
-		7FBCED4C1B1D8B2100AB970D /* fl_arci.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4E2468990092988E147B08B3 /* fl_arci.cxx */; };
-		7FBCED4D1B1D8B2100AB970D /* fl_ask.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D8332361B912AFCE6DDF4B11 /* fl_ask.cxx */; };
-		7FBCED4E1B1D8B2100AB970D /* fl_boxtype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9B54C6B8D801E899981FC5E6 /* fl_boxtype.cxx */; };
-		7FBCED4F1B1D8B2100AB970D /* fl_call_main.c in Sources */ = {isa = PBXBuildFile; fileRef = 1501BD6AB688B2DB8120E852 /* fl_call_main.c */; };
-		7FBCED501B1D8B2100AB970D /* fl_color.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0EB55F59B3D0D0BD1A8BFE5E /* fl_color.cxx */; };
-		7FBCED511B1D8B2100AB970D /* fl_cursor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4343E645136756B9FEEE6902 /* fl_cursor.cxx */; };
-		7FBCED521B1D8B2100AB970D /* fl_curve.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3306C66283D192B1B1739E25 /* fl_curve.cxx */; };
-		7FBCED531B1D8B2100AB970D /* fl_diamond_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 077BDEA1F0364BDA61518702 /* fl_diamond_box.cxx */; };
-		7FBCED541B1D8B2100AB970D /* fl_dnd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2DD93178E8AFA850DAC293FC /* fl_dnd.cxx */; };
-		7FBCED551B1D8B2100AB970D /* fl_draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FFFC4EDB5F397E3575B3A310 /* fl_draw.cxx */; };
-		7FBCED561B1D8B2100AB970D /* fl_draw_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6F065A63833D5944E820C951 /* fl_draw_image.cxx */; };
-		7FBCED571B1D8B2100AB970D /* fl_draw_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B25F1323447C32308AA017DE /* fl_draw_pixmap.cxx */; };
-		7FBCED581B1D8B2100AB970D /* fl_encoding_latin1.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4D124BD72F4E63D99837CE0C /* fl_encoding_latin1.cxx */; };
-		7FBCED591B1D8B2100AB970D /* fl_encoding_mac_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0A447B8708FA755BB960A134 /* fl_encoding_mac_roman.cxx */; };
-		7FBCED5A1B1D8B2100AB970D /* fl_engraved_label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3D85A740C2D5F1D6C6A9420D /* fl_engraved_label.cxx */; };
-		7FBCED5B1B1D8B2100AB970D /* fl_file_dir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FA2F70BA8FF4E7F4B7B36971 /* fl_file_dir.cxx */; };
-		7FBCED5C1B1D8B2100AB970D /* fl_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9E8F7BCC0292044D887D423B /* fl_font.cxx */; };
-		7FBCED5D1B1D8B2100AB970D /* fl_gleam.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F12FCC618E1EEB900AB6A11 /* fl_gleam.cxx */; };
-		7FBCED5E1B1D8B2100AB970D /* fl_gtk.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7A2CE7959780A1C6E60103E8 /* fl_gtk.cxx */; };
-		7FBCED5F1B1D8B2100AB970D /* fl_labeltype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EF6D2F48B12359DE60E499C2 /* fl_labeltype.cxx */; };
-		7FBCED601B1D8B2100AB970D /* fl_line_style.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0B5987E1A293E67A6290612A /* fl_line_style.cxx */; };
-		7FBCED611B1D8B2100AB970D /* fl_open_uri.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FAD24127A06F3F9F0EEB843A /* fl_open_uri.cxx */; };
-		7FBCED621B1D8B2100AB970D /* fl_oval_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 340E5CD1F39C1484B1BCE8F3 /* fl_oval_box.cxx */; };
-		7FBCED631B1D8B2100AB970D /* fl_overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 577F8362F7016862051E2AC3 /* fl_overlay.cxx */; };
-		7FBCED641B1D8B2100AB970D /* fl_overlay_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5CE4CB9AEF9070A32A27696D /* fl_overlay_visual.cxx */; };
-		7FBCED651B1D8B2100AB970D /* fl_plastic.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E4A2A361D4B13B70464C6A26 /* fl_plastic.cxx */; };
-		7FBCED661B1D8B2100AB970D /* fl_read_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9CA94171ECE3444BB9D65BAE /* fl_read_image.cxx */; };
-		7FBCED671B1D8B2100AB970D /* fl_rect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BAF6DCFBAFBE016247558B82 /* fl_rect.cxx */; };
-		7FBCED681B1D8B2100AB970D /* fl_round_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6E69780F02E318A2154C338D /* fl_round_box.cxx */; };
-		7FBCED691B1D8B2100AB970D /* fl_rounded_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5876E03E2818B598FAA5C307 /* fl_rounded_box.cxx */; };
-		7FBCED6A1B1D8B2100AB970D /* fl_scroll_area.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C67E3A1368F9AC0A03A7BD6 /* fl_scroll_area.cxx */; };
-		7FBCED6B1B1D8B2100AB970D /* fl_set_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FBB2C3FCFF8322A237DDBE23 /* fl_set_font.cxx */; };
-		7FBCED6C1B1D8B2100AB970D /* fl_set_fonts.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A68E1C76E8C3DC37B869BE48 /* fl_set_fonts.cxx */; };
-		7FBCED6D1B1D8B2100AB970D /* fl_shadow_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F6A596316AE6F65117FF7196 /* fl_shadow_box.cxx */; };
-		7FBCED6E1B1D8B2100AB970D /* fl_shortcut.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C57535613D421F393DD662F /* fl_shortcut.cxx */; };
-		7FBCED6F1B1D8B2100AB970D /* fl_show_colormap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EB15CE98189A4C0A7A8A480F /* fl_show_colormap.cxx */; };
-		7FBCED701B1D8B2100AB970D /* fl_symbols.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C8D88FDB0A0A32E59465025 /* fl_symbols.cxx */; };
-		7FBCED711B1D8B2100AB970D /* fl_utf.c in Sources */ = {isa = PBXBuildFile; fileRef = 42660BA0E346168608D0FADB /* fl_utf.c */; };
-		7FBCED721B1D8B2100AB970D /* fl_utf8.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DEF20F6B91F7FB0EBCBD2411 /* fl_utf8.cxx */; };
-		7FBCED731B1D8B2100AB970D /* fl_vertex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 67A896B990EDB45C5BC93F01 /* fl_vertex.cxx */; };
-		7FBCED741B1D8B2100AB970D /* flstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 530B066D0F3AC2972D9FEC30 /* flstring.c */; };
-		7FBCED751B1D8B2100AB970D /* numericsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 977642DF53013F6E6F98A12C /* numericsort.c */; };
-		7FBCED761B1D8B2100AB970D /* ps_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C75365D167645656C3A6752 /* ps_image.cxx */; };
-		7FBCED771B1D8B2100AB970D /* scandir.c in Sources */ = {isa = PBXBuildFile; fileRef = BF30A6F91EA43AB094476FFC /* scandir.c */; };
-		7FBCED781B1D8B2100AB970D /* screen_xywh.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BD87D324A97F12C5C38A1432 /* screen_xywh.cxx */; };
-		7FBCED791B1D8B2100AB970D /* vsnprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC0D2C965EDD6503B0CF519 /* vsnprintf.c */; };
-		7FBCED7A1B1D8B2100AB970D /* case.c in Sources */ = {isa = PBXBuildFile; fileRef = FB7A9EFB3C7CDAE324E9544F /* case.c */; };
-		7FBCED7B1B1D8B2100AB970D /* is_right2left.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B30F6EA5CA69E305D2B82EE /* is_right2left.c */; };
-		7FBCED7C1B1D8B2100AB970D /* is_spacing.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AE1F936F1C186E18C1B9C28 /* is_spacing.c */; };
-		7FBCED7D1B1D8B3B00AB970D /* Fl_Gl_Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 27C65F509527076EB26E9C0F /* Fl_Gl_Choice.cxx */; };
-		7FBCED7E1B1D8B3B00AB970D /* Fl_Gl_Device_Plugin.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A7A692EB67C5CBE35D4A4B5C /* Fl_Gl_Device_Plugin.cxx */; };
-		7FBCED7F1B1D8B3B00AB970D /* Fl_Gl_Overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8E81EE378D475F9CFDE296C9 /* Fl_Gl_Overlay.cxx */; };
-		7FBCED801B1D8B3B00AB970D /* Fl_Gl_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EC57889382FB898FD3EF2580 /* Fl_Gl_Window.cxx */; };
-		7FBCED811B1D8B3B00AB970D /* freeglut_geometry.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 98E423BB92A1B4F201F6B042 /* freeglut_geometry.cxx */; };
-		7FBCED821B1D8B3B00AB970D /* freeglut_stroke_mono_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 73374F6E214D9DC3E2264866 /* freeglut_stroke_mono_roman.cxx */; };
-		7FBCED831B1D8B3B00AB970D /* freeglut_stroke_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6CCA5064754A8314839CB37A /* freeglut_stroke_roman.cxx */; };
-		7FBCED841B1D8B3B00AB970D /* freeglut_teapot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 95604163D1E6CBE33AAD66CD /* freeglut_teapot.cxx */; };
-		7FBCED851B1D8B3B00AB970D /* gl_draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AFB1FA7E614E064C55880F21 /* gl_draw.cxx */; };
-		7FBCED861B1D8B3B00AB970D /* glut_compatability.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DD77F09FACBBCDC3C5276B93 /* glut_compatability.cxx */; };
-		7FBCED871B1D8B3B00AB970D /* glut_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 29E61287C1F4A1123829C900 /* glut_font.cxx */; };
-		7FBCED881B1D8B4E00AB970D /* Fl_BMP_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3EB2D50857F16B94D2C516E9 /* Fl_BMP_Image.cxx */; };
-		7FBCED891B1D8B4E00AB970D /* Fl_File_Icon2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0330777F0ECC3BA2B055C80E /* Fl_File_Icon2.cxx */; };
-		7FBCED8A1B1D8B4E00AB970D /* Fl_GIF_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 877ED586A536CA9D898220D3 /* Fl_GIF_Image.cxx */; };
-		7FBCED8B1B1D8B4E00AB970D /* Fl_Help_Dialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 393BD835A7EBE8F1F43AC188 /* Fl_Help_Dialog.cxx */; };
-		7FBCED8C1B1D8B4E00AB970D /* Fl_JPEG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 96F45BDA96C23534006C5538 /* Fl_JPEG_Image.cxx */; };
-		7FBCED8D1B1D8B4E00AB970D /* Fl_PNG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CE1157541DFCB8DC69A00345 /* Fl_PNG_Image.cxx */; };
-		7FBCED8E1B1D8B4E00AB970D /* Fl_PNM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECFF712363202EC351A51E53 /* Fl_PNM_Image.cxx */; };
-		7FBCED8F1B1D8B4E00AB970D /* fl_images_core.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 67715F3670D58DDDB47DB256 /* fl_images_core.cxx */; };
-		7FBCED901B1D8B5C00AB970D /* forms_bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 34A2B3EFA6146F599E7CA80A /* forms_bitmap.cxx */; };
-		7FBCED911B1D8B5C00AB970D /* forms_compatability.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 07CDB54753C46D7CB01A3C8C /* forms_compatability.cxx */; };
-		7FBCED921B1D8B5C00AB970D /* forms_free.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4036292D2024DE5622EA0D11 /* forms_free.cxx */; };
-		7FBCED931B1D8B5C00AB970D /* forms_fselect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 62777DA2221D60EC8F03C905 /* forms_fselect.cxx */; };
-		7FBCED941B1D8B5C00AB970D /* forms_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E954F5F2730C01DC9FD2866D /* forms_pixmap.cxx */; };
-		7FBCED951B1D8B5C00AB970D /* forms_timer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EF7E3948AA6D39FF92C88E06 /* forms_timer.cxx */; };
-		7FDBB8F416B2D1EA00AE76EF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92032516B1A90A000FC50F /* Localizable.strings */; };
-		7FDBB8F516B2D1EE00AE76EF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92032216B1A909000FC50F /* Localizable.strings */; };
-		7FDBB8F616B2D1FA00AE76EF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031F16B1A909000FC50F /* Localizable.strings */; };
-		7FDBB8F716B2D1FF00AE76EF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031C16B1A909000FC50F /* Localizable.strings */; };
-		7FDBB8F816B2D20A00AE76EF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7F92031916B1A909000FC50F /* Localizable.strings */; };
-		7FED8F171AD699C700276ED9 /* blocks.icns in Resources */ = {isa = PBXBuildFile; fileRef = 7FED8F161AD699C700276ED9 /* blocks.icns */; };
-		7FED8F1A1AD69B4200276ED9 /* checkers.icns in Resources */ = {isa = PBXBuildFile; fileRef = 7FED8F191AD69B4200276ED9 /* checkers.icns */; };
-		7FED8F1C1AD69B5B00276ED9 /* sudoku.icns in Resources */ = {isa = PBXBuildFile; fileRef = 7FED8F1B1AD69B5B00276ED9 /* sudoku.icns */; };
-		7FFDD15C19BE08A800779AD1 /* Fl_PostScript.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDD15B19BE08A800779AD1 /* Fl_PostScript.cxx */; };
-		7FFDE552171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm in Sources */ = {isa = PBXBuildFile; fileRef = 7FFDE551171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm */; };
-		812129561A1981D6DEFBCBFB /* Fl_Positioner.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 05BBBFE4BED0452E5D6A81F7 /* Fl_Positioner.cxx */; };
-		812761E94039F13357F56EE6 /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		813BAC8244B19F51594C89C4 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = D33C668435685F7CCB359EE2 /* pngrio.c */; };
-		81BF2B665315DE651C49F1CF /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = B95D0F0F7652C2937824E87D /* crc32.c */; };
-		82B47645C04F2CC476A4D175 /* browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6D999C03407EAEE9C4D3477A /* browser.cxx */; };
-		83351BED9380E4C82A55E123 /* Fl_Menu_Bar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F4B8ADD01CB2F8BFE43ACBA /* Fl_Menu_Bar.cxx */; };
-		8392A5E218FC136D60CD87EC /* minimum.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FAF643D7C2CFA5A83F4B356 /* minimum.cxx */; };
-		83EDAF59D2EF849FA3EE8539 /* fl_round_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6E69780F02E318A2154C338D /* fl_round_box.cxx */; };
-		84044FF4959DEB4FC39F70DA /* navigation.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 98AAEBFD9218D1E1F24D81D8 /* navigation.cxx */; };
-		841E578BD65E09035B1FEE9D /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		847632FAB43A248BDBD402E7 /* forms_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E954F5F2730C01DC9FD2866D /* forms_pixmap.cxx */; };
-		854002A1B71DBAE327B8C4E8 /* fl_color.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0EB55F59B3D0D0BD1A8BFE5E /* fl_color.cxx */; };
-		8553B0DECCDD2CEA9D1EE7EA /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = 49F26943DBCFA9878A9C3F55 /* adler32.c */; };
-		85A12BCCCC1FD77BEE6BE54A /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		861CDD4F77287878ACB5BE7E /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = 8AA117275273E1E3B906DA35 /* pngget.c */; };
-		864A7D2E295FB8125D768AC6 /* fl_shortcut.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C57535613D421F393DD662F /* fl_shortcut.cxx */; };
-		86C566B54637B5F773257067 /* Fl_Value_Output.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F1C4032FB66042A96955A62E /* Fl_Value_Output.cxx */; };
-		878478F960A354C2DF2DC7E6 /* Fl_Scroll.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3F60A41762817C834FF38947 /* Fl_Scroll.cxx */; };
-		87C8FA7D36117797390DBFC2 /* Fl_BMP_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3EB2D50857F16B94D2C516E9 /* Fl_BMP_Image.cxx */; };
-		87EC8234AC754EFFDA39907E /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		880B2140496D2B6744225CEF /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F328DFEE7B768CF141C8E9E /* zutil.c */; };
-		889D728BF930F9FCA772ACA9 /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		88C021DD6A74CF51B3C5F8D5 /* jdtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 4577F046D6D5D93D2553BFBC /* jdtrans.c */; };
-		88E3AAF4EEE5C45BE693C493 /* fl_arci.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4E2468990092988E147B08B3 /* fl_arci.cxx */; };
-		892A313EA8B5B882F22CDF77 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		89D802529418A7DFA1426457 /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		89EFAED2C8654D609ED97DD4 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		8A3AEEE3EEDBB52D79AF606A /* jidctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 33F18D02CA150D5654D48366 /* jidctint.c */; };
-		8A80E9D910324212101C3E76 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		8AB3C564389AED897174FFF2 /* Fl_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0B800D01D215C41573FFE4DA /* Fl_Type.cxx */; };
-		8AC8FF5C9534F6E0664A352B /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		8BA3F05B96804E0FD9491049 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		8CC2898FB12015F247784420 /* jdcoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = A715D265EAD3C5DA5628485C /* jdcoefct.c */; };
-		8CCF18F146F2012A0C1DC330 /* Fl_Return_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9A3D4184FF1C89B7CEE9FBD6 /* Fl_Return_Button.cxx */; };
-		8D44A3C7B5AF71AEAE185B34 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		8E652C61D0A4E2CBDCC794F5 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		8F77031B8CCFF315D4CB151E /* Fl_Text_Editor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D9FC21A432D9F4C118B2B1D4 /* Fl_Text_Editor.cxx */; };
-		902B7D9D5C27F6AF1727D275 /* fl_draw_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6F065A63833D5944E820C951 /* fl_draw_image.cxx */; };
-		91D17317EFB32F4E9E022744 /* Fl_Menu_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 88F715478C4F84C8E55B0820 /* Fl_Menu_Type.cxx */; };
-		928D03671DF168D88B96D178 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		929E238322B78D6EE544D8A3 /* fl_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9E8F7BCC0292044D887D423B /* fl_font.cxx */; };
-		93473D40BFD87C1C855E3E2B /* Fl_Gl_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EC57889382FB898FD3EF2580 /* Fl_Gl_Window.cxx */; };
-		936CD95E2DFE52FEF2A6BCE1 /* screen_xywh.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BD87D324A97F12C5C38A1432 /* screen_xywh.cxx */; };
-		93E6F83B3B6E8F6473DE0FFC /* fl_draw.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FFFC4EDB5F397E3575B3A310 /* fl_draw.cxx */; };
-		9472CE1B5CCC90702F8E3E9C /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		95AFA1B1A6FA7902372E96A6 /* fl_arc.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 39E501DBC41F2617B69BEE95 /* fl_arc.cxx */; };
-		95B623EF2BF8E0A8CF6BD399 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		9642156FA4A17DE4872E0A6E /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = 65B20106A8A21FCCA56538F8 /* inftrees.c */; };
-		97372ED3025526E23473FF1B /* jcapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 37EC93410A76CE3EB094F162 /* jcapimin.c */; };
-		9882EB27AC413540E37E0671 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		989492D3BB47A9B7EA4F56B0 /* jdatasrc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5722EFFA9B8A529E03233053 /* jdatasrc.c */; };
-		98A96758FF9D01852DFBECFE /* function_panel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FEE2F6E62FECD745952CB51D /* function_panel.cxx */; };
-		992B8D52C2B8D4153B0B826E /* Fl_File_Icon2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0330777F0ECC3BA2B055C80E /* Fl_File_Icon2.cxx */; };
-		99D36A82E25FA21388F02CF6 /* menubar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 44277061B27BFBE1FB22B79B /* menubar.cxx */; };
-		9A5E7CD9FB838B39C3D8E75C /* Fl_lock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D004B2D87C53E063F848C539 /* Fl_lock.cxx */; };
-		9B1EDE4CD694BD6EECFDD3D9 /* Fl_x.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 09A359CA8F522F64BAF6CEAF /* Fl_x.cxx */; };
-		9B7DAE2C8EF1066FAF1FA9BD /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		9C5407631126EB6528352833 /* fl_encoding_latin1.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4D124BD72F4E63D99837CE0C /* fl_encoding_latin1.cxx */; };
-		9CDA0BCAFA4F3CED606C4263 /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		9D9D80346287098BF39EFA5D /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		9DD7A2B6D63D30C07781F446 /* is_spacing.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AE1F936F1C186E18C1B9C28 /* is_spacing.c */; };
-		9DFFD353B45F553EA8D7A505 /* Fl_File_Input.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A66819BE170F44B94F2E1981 /* Fl_File_Input.cxx */; };
-		9EF754F80D24595D4AA26D46 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		9F14A436271D44C0065C6B8E /* iconize.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 54C40351BD50C2FC094055E5 /* iconize.cxx */; };
-		9F2F716C73DB7126154E2C2B /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		9FBEB3AC22BC51940B350AF5 /* Fl_Menu_global.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D7E1955B57E8EF19FD90CF61 /* Fl_Menu_global.cxx */; };
-		9FD0445EBA827CC658078A14 /* fl_scroll_area.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7C67E3A1368F9AC0A03A7BD6 /* fl_scroll_area.cxx */; };
-		9FE3C5CF12652F6327EAAA17 /* jcmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = 6F23DFF159ADA2C05E62C263 /* jcmarker.c */; };
-		9FFCB0771E5D6DF80D301B9C /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A27DFDC840E6272806097454 /* resize.fl in Sources */ = {isa = PBXBuildFile; fileRef = E840F8E478F4C8C6038E235B /* resize.fl */; };
-		A2BE7794E4B78E8545BD833D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		A2D8A191A0B0E9998A0D30CD /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		A2F796291ADDEAF1E00F934B /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		A30ED031459BFFD0BDBAD530 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A333D396875BF662FB62DCD4 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A353346626877C39793017E3 /* input_choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 15405AF3DA5E1FF9D702C263 /* input_choice.cxx */; };
-		A355A5A2EEF58A53CD2CF081 /* filename_match.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 81CBEA61461E59652A309159 /* filename_match.cxx */; };
-		A40F3E633565708E8113728D /* Fl_Value_Slider.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D80607C7E1AAA63C8B8F1978 /* Fl_Value_Slider.cxx */; };
-		A56EAE3921EE735A8C43F68C /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 2A5CB08352A0DBD0980FC770 /* pngpread.c */; };
-		A6A468553E05F8F39B0C6548 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A6B1FD18EA5D81C86C8910F1 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A6ED3327A24E5445BC27F29C /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A749C4ADD4C26B198214260A /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		A76B5A74F4082F02C1A917F6 /* Fl_Tree_Prefs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 197D446B1F4FEB565793FC67 /* Fl_Tree_Prefs.cxx */; };
-		A8C6B33E92B95C8BFC2474AA /* clock.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5EF025FDE53B2276B6931CD5 /* clock.cxx */; };
-		A8CCCF7D542DA0B5FED00393 /* Fl_Tree_Item_Array.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 00E3864092375950FE42449E /* Fl_Tree_Item_Array.cxx */; };
-		A98C734F750F2119D508FB8A /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		AA97A72D630589375BE291D2 /* fast_slow.fl in Sources */ = {isa = PBXBuildFile; fileRef = A136058B2D308F81E748921C /* fast_slow.fl */; };
-		AAC60FD565D09DE2684D8216 /* shape.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FC940D10359580615C166335 /* shape.cxx */; };
-		AB7FF03265A1060DDAC5E71B /* Fl_Multi_Label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D02CF2893ECCE831CD5D3176 /* Fl_Multi_Label.cxx */; };
-		ABCA59EA2E3A953879FD2A8F /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		AC85BE9A50BEE739620E7080 /* Fl_visual.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5B2B6ED6A3649923BAAFFDF1 /* Fl_visual.cxx */; };
-		AC8A33DBEE25AF4174D30CBB /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		ACFA7111F7264C24A5C86250 /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		AD0F285A651FEF5CB6FC7012 /* Fl_Printer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B4CAFA162560925C4591997A /* Fl_Printer.cxx */; };
-		AD29B4FC0DB13DB2BE1616A0 /* Fl_Menu_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5FB757CD5BD887D355358D2E /* Fl_Menu_Window.cxx */; };
-		ADEA3027A360B72B9B45F7A7 /* Fl_Chart.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F397A185D11C3DED903CB99F /* Fl_Chart.cxx */; };
-		AEC9E288AC9E09B99855D15C /* fl_utf8.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DEF20F6B91F7FB0EBCBD2411 /* fl_utf8.cxx */; };
-		AF5B4BF9164B5121B1D9D3F8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46DBACE210E8AEF57FFB5693 /* CoreAudio.framework */; };
-		AF7AB6EF4772DF7005A3A86B /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		AF9F3D486CCB9B87E4C2736B /* uncompr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D546B243A6858F60A678FF1 /* uncompr.c */; };
-		AFA33B6FF7209CC7EE2B1D5D /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = C64D06EA8317E22EE4B2376D /* inflate.c */; };
-		AFAA76012BF32B3C39F9638E /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B054ACC849A1BEDD69CB70C5 /* jmemnobs.c in Sources */ = {isa = PBXBuildFile; fileRef = D3E25408466639AACEF4D2A6 /* jmemnobs.c */; };
-		B082626A90693D0C12904CB7 /* Fl_Pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D79D3910F834D4B78FED92F3 /* Fl_Pixmap.cxx */; };
-		B0A7D39BA00A2517C9AF5516 /* fl_gtk.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7A2CE7959780A1C6E60103E8 /* fl_gtk.cxx */; };
-		B1844D597DF5DA29D5F0D0EA /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B1F3B977689E723FFE6B55CE /* list_visuals.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 31FF037FBCA8B6C0CACB0A37 /* list_visuals.cxx */; };
-		B23B202A8879E9E8DCA4C283 /* Fl_grab.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 28E8F2802DEA5334F914BE98 /* Fl_grab.cxx */; };
-		B2906BF409036924F7884036 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B2923141C43518172C90D20D /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B29518D26E24DA48CB98E311 /* fl_file_dir.cxx in Sources */ = {isa = PBXBuildFile; fileRef = FA2F70BA8FF4E7F4B7B36971 /* fl_file_dir.cxx */; };
-		B371C5FF1106E69056784D6C /* Fl_Adjuster.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 19C5DB6F3DD5011DAE6F79AB /* Fl_Adjuster.cxx */; };
-		B38D72ABADACBE30A32EEDE2 /* tile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0DFF833B9E81E11FA3E3A85A /* tile.cxx */; };
-		B3A220D71CE32208C089B2BA /* fl_labeltype.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EF6D2F48B12359DE60E499C2 /* fl_labeltype.cxx */; };
-		B4967545FF5EBB072DF98FBA /* Fl_PNM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = ECFF712363202EC351A51E53 /* Fl_PNM_Image.cxx */; };
-		B4BC9DB7D7B4E290A81FB8E8 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		B552268F52748B13E526FF43 /* Fl_Check_Button.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A2CF2FD35911638AD607092F /* Fl_Check_Button.cxx */; };
-		B682066D50CAAF8CCFB3113F /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		B6940E83F5A18CE1DC9D0BB2 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B6C14DE5A02509D99FFB2A91 /* jcdctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = CF8C02ED9EB60F55A5713F10 /* jcdctmgr.c */; };
-		B7CE0C040B4901954F4DE4D0 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		B7D0770AC83AA04E8E12B76E /* widget_panel.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 102D0B1D203936477107B2D8 /* widget_panel.cxx */; };
-		B7E877DDAB1EAFB470DE347B /* fl_draw_pixmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B25F1323447C32308AA017DE /* fl_draw_pixmap.cxx */; };
-		B80C160AB2349B548369580F /* symbols.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E73F55075EA0F5C4BC6C0D03 /* symbols.cxx */; };
-		B8AE9B8421BBF978AA286070 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		B8F934B039A82EE316DB3D1A /* jcapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = 0C4D02EC5E80D2BF56CFB48B /* jcapistd.c */; };
-		B92CA63703C4EA3E6502EAF8 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 037E92E807DF3B8C0B19FF85 /* pngrtran.c */; };
-		B9B2EDBADB95D97D474797A0 /* jmemmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = E618B793B357747DC837667E /* jmemmgr.c */; };
-		BAC366BB428AE8165AEA1FB8 /* factory.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 6A61D51F0EAB5E5B09020EB5 /* factory.cxx */; };
-		BB689C447F00F62C3C54CB83 /* jdhuff.c in Sources */ = {isa = PBXBuildFile; fileRef = AB46BE0BB9C13E4684CB6D76 /* jdhuff.c */; };
-		BB6A1C570A202678C7BCB4D5 /* Fl_Function_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C9F1464F0E6A4DCD77AF72B8 /* Fl_Function_Type.cxx */; };
-		BBB06F4A4502A286E53B1649 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		BC8942F1FEEC9A2691F4F9DB /* forms_fselect.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 62777DA2221D60EC8F03C905 /* forms_fselect.cxx */; };
-		BCC7C58D1C0093B509A27A67 /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		BD48B8B0B3DE04E72A17F60D /* jdmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = BB37899B104B362F32F0F417 /* jdmarker.c */; };
-		BDB3A4C9B2AC519DC6A95D84 /* fl_dnd.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2DD93178E8AFA850DAC293FC /* fl_dnd.cxx */; };
-		BF212FE1FA8676E379DE4BC1 /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		BF3BDB0B4DA065027B4771CA /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		BF860BE265E4D9D4A6CC7B4E /* subwindow.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D6DF746AE1F6A3B0D633D9D4 /* subwindow.cxx */; };
-		BF9ADADABD6C333A67A3E2AA /* forms_timer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EF7E3948AA6D39FF92C88E06 /* forms_timer.cxx */; };
-		BFC69F29CCDCFD4AD8333CB0 /* overlay.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AAA7458AD5CC6DCD9BA25E7F /* overlay.cxx */; };
-		C122271A7E552D9F8BC221E1 /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		C128558FCAE9FD45D3F7563F /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		C15F39A34F7287D9D15F0F32 /* fl_engraved_label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3D85A740C2D5F1D6C6A9420D /* fl_engraved_label.cxx */; };
-		C1632846A9601F14575802FB /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C1C1ABBEB3778451ACBB51BA /* fltk_forms.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		C1ED8D862E76530E4581C7AC /* mandelbrot.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F579CD495EB4DC75B2FD8E52 /* mandelbrot.cxx */; };
-		C1F612D336AA4900809E07AA /* blocks.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3E19864FD168E465A1DAFA6A /* blocks.cxx */; };
-		C1F79E69373133CD1924AC17 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46DBACE210E8AEF57FFB5693 /* CoreAudio.framework */; };
-		C228B2DA444B36D2F9C3E168 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C3102E1346D95D5578CB3259 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		C3362094052FF19A8B2ABA4C /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		C45087B77CDF09378D50E87A /* glpuzzle.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C7C5A11DD7448F61DFC69398 /* glpuzzle.cxx */; };
-		C616A9C9EDD193DF4BADDA5A /* Fl_Preferences.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3789CACF6C845E9C0DE0C58F /* Fl_Preferences.cxx */; };
-		C635DF0A06D278F09C3A6359 /* Fl_Gl_Choice.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 27C65F509527076EB26E9C0F /* Fl_Gl_Choice.cxx */; };
-		C6CD79ED524C59053F917F45 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C6FD8DF60A263859C9AFA67B /* fltk_gl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		C708B82937FCB5B77AB90AAD /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 754E11ECF7EB2B3E7E1E3C68 /* pngset.c */; };
-		C734B46832FFC64A9397F6AE /* Fl_PNG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CE1157541DFCB8DC69A00345 /* Fl_PNG_Image.cxx */; };
-		C814931FE2E8127B4DD729FD /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C8D2445DE4DB272D6140EB4D /* ps_image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1C75365D167645656C3A6752 /* ps_image.cxx */; };
-		C9165EA81291A304003FF4F0 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C9165EAA1291A304003FF4F0 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C9165ED41291A376003FF4F0 /* unittests.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C9165ED31291A376003FF4F0 /* unittests.cxx */; };
-		C96290C21274D0CF007D3CFE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9628FFD1274D0B3007D3CFE /* Cocoa.framework */; };
-		C96290E61274D100007D3CFE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C96290E51274D100007D3CFE /* OpenGL.framework */; };
-		C96291151274D1FD007D3CFE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9628FFD1274D0B3007D3CFE /* Cocoa.framework */; };
-		C984AFA812D02A1800D66DAD /* demo.menu in Resources */ = {isa = PBXBuildFile; fileRef = C984AFA712D02A1800D66DAD /* demo.menu */; };
-		C99FD8E212D2A2AD002FC776 /* browser.cxx in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6D999C03407EAEE9C4D3477A /* browser.cxx */; };
-		C9A374AB3AD29E141C659819 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		C9C4C91FDA73557BB6B69F3D /* jchuff.c in Sources */ = {isa = PBXBuildFile; fileRef = D9DB580DCA05DE487FACA272 /* jchuff.c */; };
-		C9D72F10B7A22DD0349ABC68 /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */; };
-		C9EDD4441274B93000ADB21C /* Enumerations.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 84CE79448708855561FEE498 /* Enumerations.H */; };
-		C9EDD4451274B93000ADB21C /* Fl.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = C359E5D5187606DD69C7938B /* Fl.H */; };
-		C9EDD4461274B93000ADB21C /* Fl_Adjuster.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5CDA214AEABC15E3EF1BB172 /* Fl_Adjuster.H */; };
-		C9EDD4471274B93000ADB21C /* Fl_Bitmap.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = FE90AA3BB40510FA45E0C27B /* Fl_Bitmap.H */; };
-		C9EDD4481274B93000ADB21C /* Fl_Box.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 390863A4D5D1B4C7C9B58679 /* Fl_Box.H */; };
-		C9EDD4491274B93000ADB21C /* Fl_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = D90A34CD50A6825298459CCE /* Fl_Browser.H */; };
-		C9EDD44A1274B93000ADB21C /* Fl_Browser_.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 149DEBE486F3554738429684 /* Fl_Browser_.H */; };
-		C9EDD44B1274B93000ADB21C /* Fl_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = E21339D33557BB5501B08AB1 /* Fl_Button.H */; };
-		C9EDD44C1274B93000ADB21C /* Fl_Cairo.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 87F89271469726AE756E4D93 /* Fl_Cairo.H */; };
-		C9EDD44D1274B93000ADB21C /* Fl_Cairo_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B02E11D61E46AD79DE7EFE7 /* Fl_Cairo_Window.H */; };
-		C9EDD44E1274B93000ADB21C /* Fl_Chart.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0CAFE7CA950A492FE35F2163 /* Fl_Chart.H */; };
-		C9EDD44F1274B93000ADB21C /* Fl_Check_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A2B930ADD957B492869191EB /* Fl_Check_Browser.H */; };
-		C9EDD4501274B93000ADB21C /* Fl_Check_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B1195741A8CCE772D17856C /* Fl_Check_Button.H */; };
-		C9EDD4511274B93000ADB21C /* Fl_Choice.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = C8AE10A8DDF53B8B27E3215A /* Fl_Choice.H */; };
-		C9EDD4521274B93000ADB21C /* Fl_Clock.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9BCF393F94482AE7C7421397 /* Fl_Clock.H */; };
-		C9EDD4531274B93000ADB21C /* Fl_Color_Chooser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2CD1EF8B4BFD0820E9A42641 /* Fl_Color_Chooser.H */; };
-		C9EDD4541274B93000ADB21C /* Fl_Counter.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE97D58B5B0F1A2A7DB2A3FF /* Fl_Counter.H */; };
-		C9EDD4551274B93000ADB21C /* Fl_Device.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 82863AEFE086C3469C386C22 /* Fl_Device.H */; };
-		C9EDD4561274B93000ADB21C /* Fl_Dial.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 02C21BB31E7DDFE9E76F4997 /* Fl_Dial.H */; };
-		C9EDD4571274B93000ADB21C /* Fl_Double_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 80D32CF90973629228CAA7F0 /* Fl_Double_Window.H */; };
-		C9EDD4581274B93000ADB21C /* Fl_Export.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 53930BEE4CBAAF4C82825F9B /* Fl_Export.H */; };
-		C9EDD4591274B93000ADB21C /* Fl_File_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE2F47C61B9083A6E7811620 /* Fl_File_Browser.H */; };
-		C9EDD45A1274B93000ADB21C /* Fl_File_Chooser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 729751A4A3DAAAF169C80ACC /* Fl_File_Chooser.H */; };
-		C9EDD45B1274B93000ADB21C /* Fl_File_Icon.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 18A8E88697605A73C46C0DDF /* Fl_File_Icon.H */; };
-		C9EDD45C1274B93000ADB21C /* Fl_File_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0512326568039B9A0C5BD3DB /* Fl_File_Input.H */; };
-		C9EDD45D1274B93000ADB21C /* Fl_Fill_Dial.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = CEC9BC26680806AD2B47C07F /* Fl_Fill_Dial.H */; };
-		C9EDD45E1274B93000ADB21C /* Fl_Fill_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = BDEA9C0CFFA25A943140F7FC /* Fl_Fill_Slider.H */; };
-		C9EDD45F1274B93000ADB21C /* Fl_Float_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00CAAA52DC3193E1133AE26C /* Fl_Float_Input.H */; };
-		C9EDD4601274B93000ADB21C /* Fl_FormsBitmap.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = E82DD2B5676CF315E945AF23 /* Fl_FormsBitmap.H */; };
-		C9EDD4611274B93000ADB21C /* Fl_FormsPixmap.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B145D961F04ADDCF78EFDFD1 /* Fl_FormsPixmap.H */; };
-		C9EDD4621274B93000ADB21C /* Fl_Free.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D938B561E268ECE660B88D2 /* Fl_Free.H */; };
-		C9EDD4631274B93000ADB21C /* Fl_Group.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = BF88B604F8342EF96DFF5AEA /* Fl_Group.H */; };
-		C9EDD4641274B93000ADB21C /* Fl_Hold_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A36535CFF8B14BA8B087A880 /* Fl_Hold_Browser.H */; };
-		C9EDD4651274B93000ADB21C /* Fl_Hor_Fill_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = EE6507EFCDDA13ACF9373E3E /* Fl_Hor_Fill_Slider.H */; };
-		C9EDD4661274B93000ADB21C /* Fl_Hor_Nice_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 21094B942E7FBFBCF1679259 /* Fl_Hor_Nice_Slider.H */; };
-		C9EDD4671274B93000ADB21C /* Fl_Hor_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = AE1717E43F50EBA343960B1E /* Fl_Hor_Slider.H */; };
-		C9EDD4681274B93000ADB21C /* Fl_Hor_Value_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5B8BFBDF9C48A998F0781C9E /* Fl_Hor_Value_Slider.H */; };
-		C9EDD4691274B93000ADB21C /* Fl_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 332598626430923370C48554 /* Fl_Image.H */; };
-		C9EDD46A1274B93000ADB21C /* Fl_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = EFEEE679374D7E4191873447 /* Fl_Input.H */; };
-		C9EDD46B1274B93000ADB21C /* Fl_Input_.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A5166C3C9311628F6E450095 /* Fl_Input_.H */; };
-		C9EDD46C1274B93000ADB21C /* Fl_Input_Choice.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 648E9C3B61328280244FCCA5 /* Fl_Input_Choice.H */; };
-		C9EDD46D1274B93000ADB21C /* Fl_Int_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1CFFC165E8EE6C1AD9CFD33C /* Fl_Int_Input.H */; };
-		C9EDD46E1274B93000ADB21C /* Fl_Light_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B6A59F303E6D6C2EE4481D78 /* Fl_Light_Button.H */; };
-		C9EDD46F1274B93000ADB21C /* Fl_Line_Dial.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 790078FB2B75406B2E250E59 /* Fl_Line_Dial.H */; };
-		C9EDD4701274B93000ADB21C /* Fl_Menu.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 75DEA03FA1E1CA10E4AF212A /* Fl_Menu.H */; };
-		C9EDD4711274B93000ADB21C /* Fl_Menu_.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8985E851BEC6BB2BC613E5AD /* Fl_Menu_.H */; };
-		C9EDD4721274B93000ADB21C /* Fl_Menu_Bar.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1DBDBB6B583C028BD8D1D2F4 /* Fl_Menu_Bar.H */; };
-		C9EDD4731274B93000ADB21C /* Fl_Menu_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 97A233FBA4B73A1CA45A1388 /* Fl_Menu_Button.H */; };
-		C9EDD4741274B93000ADB21C /* Fl_Menu_Item.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A0224B94F206123F3583F2A3 /* Fl_Menu_Item.H */; };
-		C9EDD4751274B93000ADB21C /* Fl_Menu_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8DFB9E7E8DB3AEC762613348 /* Fl_Menu_Window.H */; };
-		C9EDD4761274B93000ADB21C /* Fl_Multi_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B707DB501C8702446FA24146 /* Fl_Multi_Browser.H */; };
-		C9EDD4771274B93000ADB21C /* Fl_Multi_Label.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = D513CAE8AAED897D6B3B72F7 /* Fl_Multi_Label.H */; };
-		C9EDD4781274B93000ADB21C /* Fl_Multiline_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8A322CF28E7EAA76A260345A /* Fl_Multiline_Input.H */; };
-		C9EDD4791274B93000ADB21C /* Fl_Multiline_Output.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = AC5B933E5C802F33BC495FF8 /* Fl_Multiline_Output.H */; };
-		C9EDD47A1274B93000ADB21C /* Fl_Native_File_Chooser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = F91DEF40DC3592BE52CAB001 /* Fl_Native_File_Chooser.H */; };
-		C9EDD47B1274B93000ADB21C /* Fl_Nice_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8990CDEFF54C483BD6BF716 /* Fl_Nice_Slider.H */; };
-		C9EDD47C1274B93000ADB21C /* Fl_Object.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = EE2FB1F7B99BE408E1B4DFB7 /* Fl_Object.H */; };
-		C9EDD47D1274B93000ADB21C /* Fl_Output.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = D585CB55BDA143D343033352 /* Fl_Output.H */; };
-		C9EDD47E1274B93000ADB21C /* Fl_Overlay_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1FCDDD4E00F7CAA8193CAE04 /* Fl_Overlay_Window.H */; };
-		C9EDD47F1274B93000ADB21C /* Fl_Pack.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 52C3B1D0A473BDC01D497917 /* Fl_Pack.H */; };
-		C9EDD4801274B93000ADB21C /* Fl_Pixmap.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B8455C1BD96FF6FB3C197C34 /* Fl_Pixmap.H */; };
-		C9EDD4811274B93000ADB21C /* Fl_Plugin.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A8F89055CABBCFECCC4CC940 /* Fl_Plugin.H */; };
-		C9EDD4821274B93000ADB21C /* Fl_Positioner.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 20A898FCF6349F72BABDC497 /* Fl_Positioner.H */; };
-		C9EDD4831274B93000ADB21C /* Fl_Preferences.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 91173358E60D137409651286 /* Fl_Preferences.H */; };
-		C9EDD4841274B93000ADB21C /* Fl_Printer.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A694A1F3298E15E532C3F784 /* Fl_Printer.H */; };
-		C9EDD4851274B93000ADB21C /* Fl_Progress.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CD4094D8712818EACF5C7C5 /* Fl_Progress.H */; };
-		C9EDD4861274B93000ADB21C /* Fl_RGB_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1072C2A463FBCF2C5E278649 /* Fl_RGB_Image.H */; };
-		C9EDD4871274B93000ADB21C /* Fl_Radio_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 59EAC37D26FEC2AB49D79C08 /* Fl_Radio_Button.H */; };
-		C9EDD4881274B93000ADB21C /* Fl_Radio_Light_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 03D5B076E8097600496915F7 /* Fl_Radio_Light_Button.H */; };
-		C9EDD4891274B93000ADB21C /* Fl_Radio_Round_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = FD1BB104911A6726B02EEE37 /* Fl_Radio_Round_Button.H */; };
-		C9EDD48A1274B93000ADB21C /* Fl_Repeat_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4F64CD29833871B09CCB278E /* Fl_Repeat_Button.H */; };
-		C9EDD48B1274B93000ADB21C /* Fl_Return_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = CFE13249EA12A63C478888A8 /* Fl_Return_Button.H */; };
-		C9EDD48C1274B93000ADB21C /* Fl_Roller.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9961D74307F5B7D0FE016FC7 /* Fl_Roller.H */; };
-		C9EDD48D1274B93000ADB21C /* Fl_Round_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 270962DA6A7684128875ADDE /* Fl_Round_Button.H */; };
-		C9EDD48E1274B93000ADB21C /* Fl_Round_Clock.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 461BBD068DF8C58F4FFB131B /* Fl_Round_Clock.H */; };
-		C9EDD48F1274B93000ADB21C /* Fl_Scroll.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = EC2BAEE540612218DC9EEC75 /* Fl_Scroll.H */; };
-		C9EDD4901274B93000ADB21C /* Fl_Scrollbar.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 28F3E4EBB6E5F8420624A5DA /* Fl_Scrollbar.H */; };
-		C9EDD4911274B93000ADB21C /* Fl_Secret_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 42FEA3A2967D04217C27FA61 /* Fl_Secret_Input.H */; };
-		C9EDD4921274B93000ADB21C /* Fl_Select_Browser.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9DA766AE10DC532F3D0401A2 /* Fl_Select_Browser.H */; };
-		C9EDD4931274B93000ADB21C /* Fl_Shared_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A46A39199806D09CE0ABEE59 /* Fl_Shared_Image.H */; };
-		C9EDD4941274B93000ADB21C /* Fl_Simple_Counter.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B57B581401BD8575BFAF2F1 /* Fl_Simple_Counter.H */; };
-		C9EDD4951274B93000ADB21C /* Fl_Single_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0EC11A5CAD4E3607A72BEF84 /* Fl_Single_Window.H */; };
-		C9EDD4961274B93000ADB21C /* Fl_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = F2E5612A81A6E8D53ED91CAE /* Fl_Slider.H */; };
-		C9EDD4971274B93000ADB21C /* Fl_Spinner.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 76DD2676B757CB7F19B6EF94 /* Fl_Spinner.H */; };
-		C9EDD4981274B93000ADB21C /* Fl_Sys_Menu_Bar.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A71FBABB9EC90A680225B485 /* Fl_Sys_Menu_Bar.H */; };
-		C9EDD4991274B93000ADB21C /* Fl_Table.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 70CEC1A84E24275F0861403F /* Fl_Table.H */; };
-		C9EDD49A1274B93000ADB21C /* Fl_Table_Row.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0CFB24E7079EC601366BCECF /* Fl_Table_Row.H */; };
-		C9EDD49B1274B93000ADB21C /* Fl_Tabs.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B8166E088FC996C9A89D2D37 /* Fl_Tabs.H */; };
-		C9EDD49C1274B93000ADB21C /* Fl_Text_Buffer.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 50E8E04A4389A8A2DAB7C53B /* Fl_Text_Buffer.H */; };
-		C9EDD49D1274B93000ADB21C /* Fl_Text_Display.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 64C9C1F20285A471398A7818 /* Fl_Text_Display.H */; };
-		C9EDD49E1274B93000ADB21C /* Fl_Text_Editor.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3E092095198BF5104BE09D78 /* Fl_Text_Editor.H */; };
-		C9EDD49F1274B93000ADB21C /* Fl_Tile.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = FAA6BA6E4DC1AF28F5FC8466 /* Fl_Tile.H */; };
-		C9EDD4A01274B93000ADB21C /* Fl_Tiled_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 72C56BE76B2ECF1908249803 /* Fl_Tiled_Image.H */; };
-		C9EDD4A11274B93000ADB21C /* Fl_Timer.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = DCEE2710A7119519AEF640AD /* Fl_Timer.H */; };
-		C9EDD4A21274B93000ADB21C /* Fl_Toggle_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B7E85200DC5E9EBB605EE1CB /* Fl_Toggle_Button.H */; };
-		C9EDD4A31274B93000ADB21C /* Fl_Toggle_Light_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 79EE61E7DCB96EF56E71DD19 /* Fl_Toggle_Light_Button.H */; };
-		C9EDD4A41274B93000ADB21C /* Fl_Toggle_Round_Button.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A2C688326DDAF4AA29EA9120 /* Fl_Toggle_Round_Button.H */; };
-		C9EDD4A51274B93000ADB21C /* Fl_Tooltip.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8C5CB5680264401FDA1C693C /* Fl_Tooltip.H */; };
-		C9EDD4A61274B93000ADB21C /* Fl_Tree.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5E0EC227A972D2E4F34A2CEB /* Fl_Tree.H */; };
-		C9EDD4A71274B93000ADB21C /* Fl_Tree_Item.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0BD550D5F4A9E53E93B19234 /* Fl_Tree_Item.H */; };
-		C9EDD4A81274B93000ADB21C /* Fl_Tree_Item_Array.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = CCDF80CC7D27689DDC83FBA1 /* Fl_Tree_Item_Array.H */; };
-		C9EDD4A91274B93000ADB21C /* Fl_Tree_Prefs.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7E51DAB7D0F93ACFB736EE9A /* Fl_Tree_Prefs.H */; };
-		C9EDD4AA1274B93000ADB21C /* Fl_Valuator.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8BAA8B283D4CF4D904B6486 /* Fl_Valuator.H */; };
-		C9EDD4AB1274B93000ADB21C /* Fl_Value_Input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = FF88A1DACCAFA2D143A7F234 /* Fl_Value_Input.H */; };
-		C9EDD4AC1274B93000ADB21C /* Fl_Value_Output.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 71034AFDF079B24D53146252 /* Fl_Value_Output.H */; };
-		C9EDD4AD1274B93000ADB21C /* Fl_Value_Slider.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 80D58C2358E8BBA86A8ADB7C /* Fl_Value_Slider.H */; };
-		C9EDD4AE1274B93000ADB21C /* Fl_Widget.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5426FC8371108CE8BCAB85B2 /* Fl_Widget.H */; };
-		C9EDD4AF1274B93000ADB21C /* Fl_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = F98FE04C081FB5B1161C546C /* Fl_Window.H */; };
-		C9EDD4B01274B93000ADB21C /* Fl_Wizard.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A57A8421086F1F0F9906B692 /* Fl_Wizard.H */; };
-		C9EDD4B11274B93000ADB21C /* Fl_XBM_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = D2DE1079C826533A91053A9C /* Fl_XBM_Image.H */; };
-		C9EDD4B21274B93000ADB21C /* Fl_XPM_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1433F1B8C4085D5D5E1BA0E1 /* Fl_XPM_Image.H */; };
-		C9EDD4B41274B93000ADB21C /* dirent.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E448719A354B3D80FD2E1992 /* dirent.h */; };
-		C9EDD4B51274B93000ADB21C /* filename.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = AF65626F49A71525D24ED1B0 /* filename.H */; };
-		C9EDD4B61274B93000ADB21C /* fl_ask.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 87259ACF8723616344D9AEB2 /* fl_ask.H */; };
-		C9EDD4B71274B93000ADB21C /* fl_draw.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2621527FD926C67B778C41F3 /* fl_draw.H */; };
-		C9EDD4B81274B93000ADB21C /* fl_message.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A8B7D1DA9AAC707EBD991D57 /* fl_message.H */; };
-		C9EDD4B91274B93000ADB21C /* fl_show_colormap.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7574410DEB61AC3D68A6C137 /* fl_show_colormap.H */; };
-		C9EDD4BA1274B93000ADB21C /* fl_show_input.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = EFAE92A1C7CA90BC56E5A70A /* fl_show_input.H */; };
-		C9EDD4BB1274B93000ADB21C /* fl_types.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = B719FC0289E54CA915BC0B94 /* fl_types.h */; };
-		C9EDD4BC1274B93000ADB21C /* fl_utf8.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4F46F93E8F77640543107453 /* fl_utf8.h */; };
-		C9EDD4BD1274B93000ADB21C /* mac.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = AC13C8877FA6231BEBF524FD /* mac.H */; };
-		C9EDD4BE1274B93000ADB21C /* math.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1D499CE6ECA4995EEA46EAD7 /* math.h */; };
-		C9EDD4BF1274B93000ADB21C /* names.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = D5CE28437ABB8513BE08AC77 /* names.h */; };
-		C9EDD4C01274B93000ADB21C /* win32.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 62281FC096BA407C4F1E6824 /* win32.H */; };
-		C9EDD4C11274B93000ADB21C /* x.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 83CED42A779FA76E98D37CA8 /* x.H */; };
-		C9EDD4C21274B93000ADB21C /* Fl_Paged_Device.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4CABCBB89F9DD5CF57BB9779 /* Fl_Paged_Device.H */; };
-		C9EDD4C31274B94D00ADB21C /* Fl_Gl_Window.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = E7C720E51DAC292F13358811 /* Fl_Gl_Window.H */; };
-		C9EDD4C41274B94D00ADB21C /* gl.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8C1CBF782BBD9CCBFC0B451B /* gl.h */; };
-		C9EDD4C51274B94D00ADB21C /* gl2opengl.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C9AF6F2C1B78A67FFD177F9 /* gl2opengl.h */; };
-		C9EDD4C61274B94D00ADB21C /* gl_draw.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 88C72DFE480F42D0547F786B /* gl_draw.H */; };
-		C9EDD4C71274B94D00ADB21C /* glu.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = E159325B70E8DAA4D9DE0C1B /* glu.h */; };
-		C9EDD4C81274B94D00ADB21C /* glut.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 451D01896EFDD83277515630 /* glut.H */; };
-		C9EDD4C91274B95700ADB21C /* Fl_BMP_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = B20D11CF3F871C99011F632E /* Fl_BMP_Image.H */; };
-		C9EDD4CA1274B95700ADB21C /* Fl_GIF_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = BA939493F873CF0518DB0A1B /* Fl_GIF_Image.H */; };
-		C9EDD4CB1274B95700ADB21C /* Fl_Help_Dialog.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = A2E97BA0812AEC32965573B8 /* Fl_Help_Dialog.H */; };
-		C9EDD4CC1274B95700ADB21C /* Fl_Help_View.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 31D736821E68F01A1A11FC9F /* Fl_Help_View.H */; };
-		C9EDD4CD1274B95700ADB21C /* Fl_JPEG_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 15B635124165659EFD5640FF /* Fl_JPEG_Image.H */; };
-		C9EDD4CE1274B95700ADB21C /* Fl_PNG_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 87F83C8E6003FAE14C4E8249 /* Fl_PNG_Image.H */; };
-		C9EDD4CF1274B95700ADB21C /* Fl_PNM_Image.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = 330837DFFF31CE2EB245C7EC /* Fl_PNM_Image.H */; };
-		C9EDD4E01274BB7000ADB21C /* png.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4DE1274BB6600ADB21C /* png.h */; };
-		C9EDD4E11274BB7000ADB21C /* pngconf.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4DF1274BB6600ADB21C /* pngconf.h */; };
-		C9EDD4E91274BBC000ADB21C /* jconfig.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4E31274BBB600ADB21C /* jconfig.h */; };
-		C9EDD4EA1274BBC000ADB21C /* jerror.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4E41274BBB600ADB21C /* jerror.h */; };
-		C9EDD4EB1274BBC000ADB21C /* jmorecfg.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4E51274BBB600ADB21C /* jmorecfg.h */; };
-		C9EDD4EC1274BBC000ADB21C /* jpeglib.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD4E61274BBB600ADB21C /* jpeglib.h */; };
-		C9EDD4ED1274BBCD00ADB21C /* forms.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = E0132688B22159A85307F264 /* forms.H */; };
-		C9EDD5531274C04500ADB21C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		C9EDD5B31274C51600ADB21C /* Fl_PostScript.H in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9EDD5B11274C4FA00ADB21C /* Fl_PostScript.H */; };
-		C9F9C0DE12CFCDAC0067ADCC /* rgb.txt in Resources */ = {isa = PBXBuildFile; fileRef = C9F9C0DD12CFCDAC0067ADCC /* rgb.txt */; };
-		CA035B0265710EFABD6E632D /* Fl_Dial.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 3AFC31503AB99F6D00BAC647 /* Fl_Dial.cxx */; };
-		CAA4C60E679571629681FAC8 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		CAF6CE97B3EBEFFA65AAEEAD /* Fl_Widget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0B9D4355B2E878715DD43AD3 /* Fl_Widget.cxx */; };
-		CC54A24FCE15AB4AF1A78C78 /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		CC6F9270C3F21B944D4AEAD0 /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		CCB4DFE284A60FA696F7C10C /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = BD535A20C799334E639DDD81 /* pngmem.c */; };
-		CCBA42B41DC49950A9E74BF1 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		CD2C6C2797C19E76EA67D308 /* fl_diamond_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 077BDEA1F0364BDA61518702 /* fl_diamond_box.cxx */; };
-		CDCB453B3493D8E96E80DFF7 /* Fl_Tabs.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D5F75B6C9483B2BB47965789 /* Fl_Tabs.cxx */; };
-		CE0624CE07095E662528C2A5 /* pack.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D61E50ED41D81EACABE589BD /* pack.cxx */; };
-		CE14EC6653D4EF4779992758 /* is_right2left.c in Sources */ = {isa = PBXBuildFile; fileRef = 6B30F6EA5CA69E305D2B82EE /* is_right2left.c */; };
-		CE5AC8A1A69F5467AC1F2334 /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		CE62A14F1AD1FAE2240FE567 /* fl_rounded_box.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5876E03E2818B598FAA5C307 /* fl_rounded_box.cxx */; };
-		CEE453263236AABE10DD1EC4 /* label.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 8277A82AB4C46B991D48F852 /* label.cxx */; };
-		CF3F256FD9E7676E994E48ED /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		CF5A76042FD86936E94CF561 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		D0558977436E06E35352EC86 /* cube.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2148BFD8D4CD2F1527B71C3C /* cube.cxx */; };
-		D0CF9C806A93CFB18B0DAA6F /* Fl_Roller.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D0E376E93B4F22BE701D29E0 /* Fl_Roller.cxx */; };
-		D236C2998846B3EAFA5A5BE5 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D2649C006A1AF19ADB38855E /* fl_vertex.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 67A896B990EDB45C5BC93F01 /* fl_vertex.cxx */; };
-		D290942090DAC527A34C64CA /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D2A2528E9AF246F20E96A7FB /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		D2D9B4E60375AC92A87B594E /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		D3462ED8E09994945B80D322 /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		D3A592F3B14EB92424D016CA /* forms.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7F784151AF1B748D0F3DB1C0 /* forms.cxx */; };
-		D400876E21DFE46F52E0B4A6 /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		D49C72834787A96D62E0DC96 /* Fl_Scrollbar.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A5B9A5CE605BB8A57F66A2E6 /* Fl_Scrollbar.cxx */; };
-		D4DFB9268948E993B89517D7 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D51E4FB4D81343AB4C22D77A /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		D54C56B571372240BF7EA1DC /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D5BBC609BD2F3A442651774C /* fltk_images.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		D6455053A0353F27F994556F /* Fl_display.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0E259033BF45B73C21409C8F /* Fl_display.cxx */; };
-		D6A037657DBB387B5A419548 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D7400B2909AB44235D04AAAE /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D7C1EDE212D9E84D085257BF /* glut_compatability.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DD77F09FACBBCDC3C5276B93 /* glut_compatability.cxx */; };
-		D7E6146CFE9389C35447F23B /* filename_expand.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E49427F44D81B0A6192BC7CB /* filename_expand.cxx */; };
-		D9144FCEF6D19F6F9EF0A8B2 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		D98529E8EBA39A388937F437 /* Fl_Group_Type.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 80E4ACCB50A295390EC9C1AB /* Fl_Group_Type.cxx */; };
-		DB29DA4D89702B490E69B569 /* Fl_Table.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 116F849BE68830F05CA66B9A /* Fl_Table.cxx */; };
-		DB5B9D4C2AE7D9CDB7E7090F /* utf8.cxx in Sources */ = {isa = PBXBuildFile; fileRef = AB154476769DB7F2247ADEF9 /* utf8.cxx */; };
-		DBF8DE40C1F29F86DC793EBA /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		DC2FCAF31C3052861233E1F7 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		DC4BEF50B12F14C694F1C9DE /* numericsort.c in Sources */ = {isa = PBXBuildFile; fileRef = 977642DF53013F6E6F98A12C /* numericsort.c */; };
-		DCB5F32CFF3DCFF6F2DA89E2 /* CodeEditor.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CC0C80DA4DD31B6B2DB91096 /* CodeEditor.cxx */; };
-		DD8D5486C8A675DB0CB75731 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		DDC5CCCCC885EDFCC410A343 /* rotated_text.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 48A8DC166D69EDC6F24AE678 /* rotated_text.cxx */; };
-		DE182BDA21A14B247CCD92D3 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		DF808F46E13A49F6E1D5A25A /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		E04B6EEBEA1C209F4FF7C4AD /* Fl_Menu_add.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 382F938CFABC25BC02C13939 /* Fl_Menu_add.cxx */; };
-		E1563C24BF6A67B0894A9C62 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		E1B04810E72BD9557356CAAE /* fluid.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E887B4AE75EC9D885D592636 /* fluid.cxx */; };
-		E21880F92CD1B5E315C3F4DF /* Fl_Tile.cxx in Sources */ = {isa = PBXBuildFile; fileRef = E82932DF2A0C624C6EDC9207 /* Fl_Tile.cxx */; };
-		E2423A959545399CB91ECDFB /* Fl_Help_Dialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 393BD835A7EBE8F1F43AC188 /* Fl_Help_Dialog.cxx */; };
-		E27075BC1282FFAD1956BC3B /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		E2DBDFE780EE146951CEAC72 /* jdatadst.c in Sources */ = {isa = PBXBuildFile; fileRef = 90D9C06A2DCECD5B99C4A90A /* jdatadst.c */; };
-		E3C29EE9B0D666B794852902 /* Fl_Menu.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7E05602BE68211B11E493E18 /* Fl_Menu.cxx */; };
-		E45D1979569F988094710C9C /* jdcolor.c in Sources */ = {isa = PBXBuildFile; fileRef = F123133D8A3AD430ED07DF17 /* jdcolor.c */; };
-		E5405658EF89EAAA2FEF7C65 /* fltk_jpeg.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */; };
-		E5B4AF727E38F946F3FC7AB0 /* Fl_arg.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9F484B5F88CDE466AC0D0592 /* Fl_arg.cxx */; };
-		E659DF579A3CC1BEDFA740CA /* Fl_JPEG_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 96F45BDA96C23534006C5538 /* Fl_JPEG_Image.cxx */; };
-		E7DF7C2E7A8B9A04C8F327A8 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		E8208C502E55C231E1D67D9F /* jccolor.c in Sources */ = {isa = PBXBuildFile; fileRef = FE466F26BF6C316E5A1770E6 /* jccolor.c */; };
-		E82CB9AEE7FDCC2533CC402B /* bitmap.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 7FAC914955D699539F73B996 /* bitmap.cxx */; };
-		EA66F478D3FC94BAF04B0BB5 /* message.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 2E774D7FE17DC45AFDF985FE /* message.cxx */; };
-		EA7F9D421C6E3CDB704CC37A /* adjuster.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 1BCEDC8AA971784435AC3119 /* adjuster.cxx */; };
-		EB2679AAEC7E71561B42EEC4 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		EBC76AA6B5E8DFAFE0758014 /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */; };
-		ECEE8B8231D50277C09E21B8 /* Fl_get_key.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 5B566F3BAD7101C63D5494E3 /* Fl_get_key.cxx */; };
-		ECF6318C21BBD0ACB27F4E32 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05376DC900B2C885B847EA36 /* OpenGL.framework */; };
-		ED169E1E1FC93C1F97D21AC4 /* Fl_Single_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 9D942824B8FC886F6FCD853D /* Fl_Single_Window.cxx */; };
-		ED83B85BA678C8C9B5E91535 /* Fl.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F4EFF27D730BED51EF0EAA8D /* Fl.cxx */; };
-		EDB4BB04710CA83033FEBE51 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		EE1DAA8B2CB944B2D5426CB6 /* Fl_Double_Window.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 33AF346DF043165E0A62ABB5 /* Fl_Double_Window.cxx */; };
-		EF0B77D0D7EF375C1CBDC390 /* case.c in Sources */ = {isa = PBXBuildFile; fileRef = FB7A9EFB3C7CDAE324E9544F /* case.c */; };
-		F0BC0BF84BB72AA0DD104B0E /* fl_encoding_mac_roman.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0A447B8708FA755BB960A134 /* fl_encoding_mac_roman.cxx */; };
-		F0C366896B5A9CFED45E1DF1 /* fltk_png.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		F0CADB27D4B0259803F4057C /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F0EF820CDDEDCCBA9DF9AD84 /* glut_font.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 29E61287C1F4A1123829C900 /* glut_font.cxx */; };
-		F13E156B3E3367FB3F03BF4D /* fltk_zlib.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		F1C6FA1ABFEFA9DD53A7B8E8 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F2169D8ACFDBBA7D26FCCBD8 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F302A7BD2FFE891C6E201B40 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F347242B6E015B11A49E28D6 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F3C9D2F6806B82F1D5E7B33B /* jfdctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = D5CDFA360799E961187294DC /* jfdctflt.c */; };
-		F3D8E77F68D28955A4231077 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = B7DE70E246F6A05A42991CC1 /* pngwio.c */; };
-		F4769A68D050A61218AC5B42 /* Fl_XPM_Image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 0CBC6DC7942212D47B70681B /* Fl_XPM_Image.cxx */; };
-		F485B877C27D5431338DB400 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F48AA8D3A3B18C6FBC8D69E6 /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917C15E28EE293416A38C5E /* fltk_images.framework */; };
-		F56E295E6736DABDA07693C1 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		F61DCEF69E70439429A6C865 /* Fl_get_system_colors.cxx in Sources */ = {isa = PBXBuildFile; fileRef = EB5B18A1B9B1E41F2AB56A97 /* Fl_get_system_colors.cxx */; };
-		F6307C90D252F006E432B184 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		F77512958607662BAA15DA70 /* jdmerge.c in Sources */ = {isa = PBXBuildFile; fileRef = C84F99F5AC8C6517F45055B0 /* jdmerge.c */; };
-		F7888AFE5E6F6CE9BB785D69 /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */; };
-		F8816EDD9D3E75B3971CC981 /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = BBD2663C0F428CC57126F4E2 /* pngrutil.c */; };
-		F8C4B882B6A9C15C2105AAA8 /* filename_absolute.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D60CC89D1A70BE6AA3929604 /* filename_absolute.cxx */; };
-		F9C96700B8B44B5E3F736E66 /* jquant2.c in Sources */ = {isa = PBXBuildFile; fileRef = 51A1DE1F52564E84C104F074 /* jquant2.c */; };
-		FB64FC6F7054A5B50F2C3344 /* jcomapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 5CD5D087391E39030838C823 /* jcomapi.c */; };
-		FB93EB94C997FC6F8C5D389D /* Fl_Text_Buffer.cxx in Sources */ = {isa = PBXBuildFile; fileRef = D390A37D428892B9A8AD63AD /* Fl_Text_Buffer.cxx */; };
-		FBAEA5F4CE75FCFCE1B7521A /* Fl_Gl_Device_Plugin.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A7A692EB67C5CBE35D4A4B5C /* Fl_Gl_Device_Plugin.cxx */; };
-		FC414CA961FF368EE440F852 /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */; };
-		FC48CB206BF7D8B4322C4ACE /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		FC4B9EABD9209DFA30BC282E /* ask.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F319551D961725F0949D0235 /* ask.cxx */; };
-		FC7AF958B1284E43B8EA419A /* CubeViewUI.fl in Sources */ = {isa = PBXBuildFile; fileRef = ADA5BC653C9EFBEAA8C0AD29 /* CubeViewUI.fl */; };
-		FCC598DC853F3753AFCD269C /* Fl_Check_Browser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = F5B04FDCF453C6444285D186 /* Fl_Check_Browser.cxx */; };
-		FD872A3C0217DEF3E1042A02 /* filename_ext.cxx in Sources */ = {isa = PBXBuildFile; fileRef = B140C9F8CF34FDAC94E15FE1 /* filename_ext.cxx */; };
-		FD94C73927DDB5ADF142B250 /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		FDCD049B676867FAB704694A /* fltk.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FEB0F8FE6383384180570D94 /* fltk.framework */; };
-		FDCE22DD1D7C2DD6D001F3F7 /* sudoku.cxx in Sources */ = {isa = PBXBuildFile; fileRef = A59208EAD1D0282D4FCD5839 /* sudoku.cxx */; };
-		FE4DBBE6653EF8D85096E098 /* tabs.fl in Sources */ = {isa = PBXBuildFile; fileRef = 0C9E126B5F827C426EC22043 /* tabs.fl */; };
-		FE82A6E34B6A3F1B030E8AB3 /* image.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 4120FB2B23E168C4377E78E2 /* image.cxx */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXBuildRule section */
-		002070688FF46BE22B8B9017 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		059FA3D1C1D3C73F20D0B283 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		0E24314051741168928705E7 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		1996ABDE5CEFFDD61C5FCF32 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		1F42D5CB6D0F6DC50A74E876 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		28DBEEA25FA7FE0EC411DB93 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		2DDCE940376FADC512A8157B /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		301017A593039062A0300327 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		30D4C9DD3FAD01B15E41C1C6 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		3891F9F4F50DF109D3949E8F /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		3B0E63A186CEDF7D1345E7FD /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		3C09847AE46EF8CCEFD1F7A0 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		3EEA1DF0AC217D17846B7C36 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		3F55D22CA402FACB395177C0 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		405511E8AFF477DB8ACD4DB0 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		4A80EFD6E65564718862AF83 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		4E93FEB807F829F6142913E5 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		504535356A0F15B71795781D /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		53DC29E68E2D3D0E3C92A656 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		5478C5425B68BF34DFF443E2 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		548C09CAA724A9BDFAE7F711 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		577C85A68BB0FF02C829670A /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		57D7CC1ABEE0B3D17D5C6598 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		59A7B47B6A381F25F22D5E83 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		5E63DB3035D943458794E699 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		5F0FB3C683E9A03326A3A895 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		6380C4F77F4C5B86D46BFDDB /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		64775012DC5A16A4F05F748D /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		652992AA1B44CEFF67624A6C /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		65E3A0E21746785762F84E3E /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		6D1DD8869E361DBE10664098 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		6DCBEC3DBEE234B30743E462 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		6FB4527CC732A53EE7D25E30 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		74461A300DF11483520AD600 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		761E8D6D2C68CDD078F3185D /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		78B7868F42A75D43E10C274B /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		7CCDBCD4740B2B64A0E831B8 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		7DC98686048519016A24090E /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		7F419DFF1D92857E0098B602 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		83111E6E5D2E8BB741C8B141 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		8D19F5C0FFDCC32896A09C23 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		8D4B04281B4168536936E2C4 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		8E7AE12FD65EDD3896233D45 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		960DC46967BA8A6B378D6F1A /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		982E85D9644C6688DAA59FCA /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		98A36C3099CC3D924FFCD23A /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		99AED6D72200D1484509EDC1 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		9DC4E535094AC1A40E736434 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		9DC64D90FF7DF59E3A11CF0D /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		A013DC2CF3856CB94268AE70 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		A066D663148241E4C695936E /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		A77FA03E59536F0D6FE03205 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		ABF5C70741CF19DEE1D8CC17 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		AD22FA469B15095D66214B28 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		ADA694FD70FEC5E6BD16C419 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		B1E6CC83FB833E1F51A122FB /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		B3E0B9A961017B0A1800BFDD /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		BFF2FB5ADE21855F8BE7F314 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		C1904C28B5CE35B07158E988 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		C7AD5A2EA43D3ED3CB9D65A3 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		C9165EAB1291A304003FF4F0 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		CD536C27425E520D78677840 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		CEB41048C80E70F94752F4BA /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		CF4751DEBDE3C22D982B8429 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		D056BE42E7C99FA4C475B4B9 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		D083976BDA11FB140D92C9D8 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		D18EC3D39810A767612292A1 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		D77393DC0EA45FF4D2EE7CB7 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		D86D6226DD40681D9B54350C /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		DF372616E200690F5DC9FCE0 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		E00FAD7BD9F3ABD603DCA7B7 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		E0E852B24FAD27295E179AAE /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		E1C07CC4186CD56115EBB4A4 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		E4EEF3D56A65EAD331B1F44E /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		EFFAAB905A54B0BFE13CB56C /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		F01E4C121774DE7867D5702A /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		F624C06922D8B43EBCD6C2F1 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		FCBC6C10182884FE8074805D /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-		FD1A4483F5D5031BBD4AFAF1 /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "export DYLD_FRAMEWORK_PATH=${TARGET_BUILD_DIR} && cd ${INPUT_FILE_DIR} && ${TARGET_BUILD_DIR}/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-/* End PBXBuildRule section */
-
-/* Begin PBXContainerItemProxy section */
-		00AC602308D30F648011263A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 234377F13A1D2CBBCF9E5043;
-			remoteInfo = gl_overlay;
-		};
-		02A677752D704FC1308C2C01 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		039DC2875D16C52BA2F5D4F6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		03EC98D08B04120E77522D44 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		0551F3CB7F11FE97299DB5BB /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		06789A4B035DCDC7C02257D7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		0A58D2D8A0B0CE0E2149A3AF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D14DC4F3D302856B84343ED5;
-			remoteInfo = resize;
-		};
-		0A941DE40DF12D8F007791E1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		0AD2D2DA750332DEFCEB0FC7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 68590AB4E7667EB94AC7533D;
-			remoteInfo = file_chooser;
-		};
-		0AD450B4C0576B1878E6A0B2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 2A6B003A80FBAF126EC8F448;
-			remoteInfo = browser;
-		};
-		0CBBCB4189E32948E7D88391 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		0F1C34BDF49FB8E0C8C76BD3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		110D8CDB0253AC10C831D68F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		116FB5121A27CD96ABA992DF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 4D6391C0735EF1A5A8588826;
-			remoteInfo = inactive;
-		};
-		11E5A45C720AEE5E08B05915 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BEB651546D79EDC169128FD5;
-			remoteInfo = resizebox;
-		};
-		136B84B7037F79E59B3E4AC2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		14AFCE90907C6F3225151910 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		16BBABAD50B4194D5D76302F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		18130D6F922D45B5F8257958 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 4F654080B01E856B05662A65;
-			remoteInfo = list_visuals;
-		};
-		1C175A9EB7F8B8D54DB930E3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		1C2F0ED10414A1F708C1773C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		1C38DEF41BDA09D2C33850F3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		1CA6B9D3845ADFB03E7D1AFC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		1EED0125985AA39E7D774A34 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		1F497907D19732E39645C0CD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		1FBAA5D76F89925074C2D46A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		20A1CEF70DC260C1C2C2812E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		2206E5C4EFD1650EB0437A0F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 98B39383C1F47726C5C0793B;
-			remoteInfo = color_chooser;
-		};
-		22C33DC89FCD8B22C389DF84 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		23B0511D52EC736B3DE55E29 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		24BCC68A33AFDB9630857992 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		24D00241BE8C72BD28D52715 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		2B6CFEDA4D3B1B5934FE4FAD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		2BFE804C6C014B2CADBE63A0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		2C4299999C39C163C9B849F4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		2E20E980EE192E0D98A92F67 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		2E539AECD909773E935C638D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		2F59EFF5D668BD2E6C841824 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		327EFBC26B16D707A7572792 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		343F011E70B1E352607D966B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		347E2D3BD1C0A5E5C2754891 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		3A22385FF3A24E18BF14BA45 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		3B38ABA4483E58B2891D08CB /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5C2FE9F5E71E04EA903248FA;
-			remoteInfo = input;
-		};
-		3C29CBA11EC9AA530B70295E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		3DF0A586BFC00F4616C64B12 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = CA05747C492074A51F2F35BC;
-			remoteInfo = iconize;
-		};
-		3E70DE22A5023A631FA7C543 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		3F69AAA920A5593C256A802F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 2BFE084E4D6FAB77DCAF0A83;
-			remoteInfo = utf8;
-		};
-		3F6FBC42AC1063A310B6C012 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		3F7E47DDC2AAE835C9084D87 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		415076DDEE48C873B9AD0737 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		44F3A61481B1F2D21D3EBF27 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		464DCC729B9EFE5E37A3D088 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 134239549D6BFAC3F8EFC363;
-			remoteInfo = colbrowser;
-		};
-		4653AB89EF6857071BB45F00 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 287CEC5F63A8B5FCDA246BEC;
-			remoteInfo = checkers;
-		};
-		4667258284C31599AAB8D07C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		478AA233260257CFF0058BDC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		48698FC1F27A41A47DCF94DB /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 7483E011046F1E2FC84A989B;
-			remoteInfo = hello;
-		};
-		4AEE7CE5279CFAC5B81F12CE /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		4C039FDB0CF72042F116ECD1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C4B346660A74B9FCF04EFB2C;
-			remoteInfo = cursor;
-		};
-		4EDD7EB7BFA5F88F6ECCA922 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		4EE36D681FE03ACBDBAFC1A3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AFFC1E48270AB19243D7B668;
-			remoteInfo = fullscreen;
-		};
-		519E40D80387DE372683F1CF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		51A9974246953F700DE291F3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0F789352A34B2A230259EEC7;
-			remoteInfo = keyboard;
-		};
-		52C8401CBF8DD951A9F0B369 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		5968CFCE5A6FF4AC9E038F90 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		59E6A511B58E3465A9770AD1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C6AD358F2FC5419FDA04243;
-			remoteInfo = fractals;
-		};
-		59EEF874518591864372841D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		5C0B6F99505A0E4260AD3C4E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = E8BE99F75E5F3C8725834B33;
-			remoteInfo = adjuster;
-		};
-		5DB5CA4C1AE9D60DC2D66B52 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D7D4B168DE66A92F9F8747C0;
-			remoteInfo = glpuzzle;
-		};
-		5DB7048A0261F00775C5C4F5 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		64AF0A3C4349A73ED2627F49 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		65846F4FDB5D962DCC12B225 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B807BFE7F9E6FCE88C0A4E9C;
-			remoteInfo = fonts;
-		};
-		66F15BCC9748FF38336F668B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		683CAB7BE83F9BC1D87B1A0C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		6869CF29ABB4AFF63AFDD028 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 82C0BD76C77A518B0A1499B5;
-			remoteInfo = line_style;
-		};
-		6ADFB27358931150C17B2022 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		6AF2057413B17C0A888CC376 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		6BDF38F435EE53E46816CB92 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		6C94988A522A2E1BA58629C8 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 26B873E37B315C0F7BABC202;
-			remoteInfo = message;
-		};
-		6CBF49508DE6AA1B83637FAC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 35F2A3666BFB337E150860D9;
-			remoteInfo = pack;
-		};
-		6D3FBA481CC2BFFE95B662E1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		6F1DF68D2214A64F85843187 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = EE40189E3B7BB6337ABA74C7;
-			remoteInfo = "native-filechooser";
-		};
-		71A21778FAE433CF3DFC6296 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		71C6D66833C4C5B7CA367509 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		748488216C249915C5812F7F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		755CCBACE448590226BD4036 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A0731BABBE8E29CE96AC61A7;
-			remoteInfo = blocks;
-		};
-		76C83D6B0263B7DB035ED5CC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		78BC90B4A0CEFEDA7DA80A71 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		78C58883AC75F5B5F54770B9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B5DAF3DCC189A02ADD9DF320;
-			remoteInfo = tiled_image;
-		};
-		7A0C7B7A7F2AA45B7E076378 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		7AE3C5BE09990E2E88E4EA52 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 2D69D33A1EBE0D85982EDCC1;
-			remoteInfo = device;
-		};
-		7D75A813F0391BC44322D521 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		7E8CCAEB3141BF8E536FDBAC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D217C1AD7BE42CB2138F2993;
-			remoteInfo = radio;
-		};
-		7F019C36FA63F0A198CE0FCB /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		7F419DF71D92857E0098B602 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		7F419E081D9287A50098B602 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 7F419DF51D92857E0098B602;
-			remoteInfo = offscreen;
-		};
-		7F7CF8171AB97D8F00E12B22 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		7F7CF81A1AB97F5500E12B22 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 7F7CF7F41AB97CEF00E12B22;
-			remoteInfo = animated;
-		};
-		7F7CF81C1AB97F5500E12B22 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C9165EA11291A304003FF4F0;
-			remoteInfo = unittests;
-		};
-		84093881736DAE476B31E5AD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = DC14E2CC213CC0028EF9BD8B;
-			remoteInfo = buttons;
-		};
-		84DBD8160E76237A20056ADD /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		84F99E3365723AD5E892416E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9A8F59CD813587E2E463DF07;
-			remoteInfo = arc;
-		};
-		880895FBEEDBE9C299D4AD18 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		885D7EE500C268F0F4B00193 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 1B8EEEC5C9C85BA44EF759EB;
-			remoteInfo = preferences;
-		};
-		8BAF9392290E6F63F69DC376 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		8C4852AE7D2F60AC9A4A64D2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		8C4A9E19F6447C62178F73FE /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 28919176E960D4209BAB8420;
-			remoteInfo = ask;
-		};
-		8CE9C1520C41EC2819C53DCF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		8E3960073C5E2FFF3E7BAB21 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5FF6CC4785D964CE080FB494;
-			remoteInfo = minimum;
-		};
-		8E7D8233AF79A6DB5CE68674 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9472188EEB541EF3EA60AB03;
-			remoteInfo = sudoku;
-		};
-		91FC3B67E5E2C9CDF2AD93FE /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		94CF332E8528409E8F608B0A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		94E11178AE51F099DE2EC7C7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = D1A43D1D85A87A20B2F7FB09;
-			remoteInfo = boxtype;
-		};
-		97A089419DEA54E60BAE37B6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 36F787DB6844466ACF848593;
-			remoteInfo = image;
-		};
-		9AAE76B605C89463D532A923 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		9AC87DA5ABF368BDF02D6FB2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B37F5F8EB169ABA76EA02FB9;
-			remoteInfo = help;
-		};
-		9C26E733452A0A92BB2E9FD4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		9C67D439800E92B978E9DF3F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		9DF7F1484DB409B7020A4690 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		A248EE9EA08566BE8A811C46 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 658EF1017CAE2D453B68A345;
-			remoteInfo = tabs;
-		};
-		A33050B460D93126AF6B3770 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		A4F9501EBE8FA6D9850595E1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		A655F2C541CCF402C73DE23C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		A7727AF927F7416C62B4FE4A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		A7785E9FB1F42E9637DE20A9 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 6C72ECB2743615E24D873456;
-			remoteInfo = forms;
-		};
-		A8BA119501338968096D978B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = FA19DC0D800A66EC69E9560E;
-			remoteInfo = label;
-		};
-		A8E3162AB1E86C87AB21A822 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		AA74A9E613C7148B206370F4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 623691BDB3A292582380383B;
-			remoteInfo = clock;
-		};
-		AA75ABA62A67772EE87E0672 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		AA950AE416C83B076438137C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		AC5FE90BDB8A08090B143724 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 78DE657148EC00153D1103A8;
-			remoteInfo = output;
-		};
-		AFBCF1FDAB64A04896DF3BD1 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		B0C89E9C54661305D813020D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		B1D6D9884277EFCE681CAD2F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 93AABBAC7C288CC95BFC5707;
-			remoteInfo = table;
-		};
-		B3742E2B1ECA6522FB9B56F8 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = F39A907E68C3C55EACDF4D3C;
-			remoteInfo = mandelbrot;
-		};
-		B3C43284FE86051B4A316D02 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		B427FFC513902C1118B1FA0E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		B4CD187937DDC4944876BB8A /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 43080284D40D3965685C7975;
-			remoteInfo = bitmap;
-		};
-		B54D9F1191F36B8EE72F3369 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		B5801E3AE0BCEBF85AEB9B7E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		B5CF2B780F878B6D3D71F21D /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		B66EFA8EE3567F241D81B0D7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = F0647F049CED2B54A017A6A0;
-			remoteInfo = editor;
-		};
-		B73978AED6EF847530CC1AF2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		B957B60CB058E32777E89339 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		B9C46EEF5D1BAB30033BFE9B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 86BF0C207C6D13ED2B83B63A;
-			remoteInfo = doublebuffer;
-		};
-		BDBF4D071649C5E4BBDE6937 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		BF4221C0BEE1936F68CD3E0C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C03067C1FA131EAA8761687B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C07537D6B636368E3F2A0434 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C1164EA82991B1FC42DBEB70 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 57D7735B02F5215416BA2856;
-			remoteInfo = button;
-		};
-		C1A6391CFDC19DEA50CD2FA0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C1E9FEDB2D5FF9BB9D284321 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		C312FF409911626441B9E67F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C544C269D8399AE8A28C2A3E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C6D3D802B9F25B1204E80358 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		C85A08BEC18D3EA25AA04261 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		C8D8B50C6525C19E90662B05 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 9EA6FF727BC736133B0B85A1;
-			remoteInfo = pixmap;
-		};
-		C9165EA31291A304003FF4F0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		CA3CA540809B8723BA17A4D4 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		CC09C8B81BC66FFD59FDCD5E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = E167C0E81B125EBADAC8ED73;
-			remoteInfo = valuators;
-		};
-		CC517370521F17799ADE65E7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 89DAC07651B4C516C173A1C1;
-			remoteInfo = overlay;
-		};
-		CFC2839AD6B5DEC5F9105C97 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 17B95BDCBCADC140B2AB54A7;
-			remoteInfo = curve;
-		};
-		D1111B9DA93ED13203A164EC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 10F40C4AE712B17C78435935;
-			remoteInfo = cube;
-		};
-		D1A0853389EF5F6908EEBF5C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		D1EC8795E355C7729D36E3EC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		D294BF3D2B6BA1434CEE7C7C /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		D42996B1BAC83937A70CB0E3 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 32FF2A1069F117986FB927DD;
-			remoteInfo = CubeView;
-		};
-		D6C1AB34CA74231804BC8325 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 7C787E8918BC5CF86B17E1EB;
-			remoteInfo = threads;
-		};
-		D7B4F91AAB70071DE48B2435 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		DB6DF7BA57A64008DF698777 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = FDE67811CD6F028754008B48;
-			remoteInfo = tree;
-		};
-		DE2D07DA5BA651DDC4411901 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		DF79926C295B91D4CC0F69C2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		E0628F2F93819F1F757D5EB2 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C8EFCE83A8BC9CA56922D024;
-			remoteInfo = rotated_text;
-		};
-		E08E0967CAEDEF5772583418 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E0EF3100EF52408FCD9703F6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E127CA138134477DA4C12088 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E13E233F94A7AD1A2404D564 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		E1415B7C253B993B4A3BBE20 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E2178ED0D5E6613234E5E218 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		E243DFACCE7A653F30C860F6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E78E17FB27E468507B90BDDE /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = F781BF6B6F74841F05AAA4BE;
-			remoteInfo = input_choice;
-		};
-		E7A5FC2B97B5B1BCB94E2AE0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AF9D43D9317D81CEF5290A74;
-			remoteInfo = scroll;
-		};
-		E815B04FEBE5E16EBC1829AC /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		E86146406E0C24792025B71F /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 752ADA98861AB73DFEECD267;
-			remoteInfo = pixmap_browser;
-		};
-		E8B9B687280EF6DFB63D12B8 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = B4A214CBEE4FE0EB1FEF8982;
-			remoteInfo = subwindow;
-		};
-		E8F9797C2E3809923BC2B247 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = C13484C4A9262C58D8FA7242;
-			remoteInfo = fltk_gl;
-		};
-		E90E8DFEC523B3E2914EB5C6 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		E986529B0E7FC10BCA326407 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A58BB416AAFDCFF08D7C7E41;
-			remoteInfo = fltk_png;
-		};
-		E9BE9B4F1B6C7F791F629546 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		EAF0C33670B2F5F242AE3D87 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 22F83D75D3AC309504978002;
-			remoteInfo = symbols;
-		};
-		EB72EB59A1B88996A9395F09 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 3C13C653905795060D6D4F0A;
-			remoteInfo = fltk_forms;
-		};
-		EC7CB0494F74A79084C861FA /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 82436F720F585ECD3B0A56CE;
-			remoteInfo = tile;
-		};
-		EEE1D93B274E8722C7BE72EB /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		F3400834292723A0AFBE4978 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		F4B731FB1EE6D0F219971E34 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 5E088B3BCE2A52C627EC5A53;
-			remoteInfo = menubar;
-		};
-		F4E23192BC62A2E364C6FB8E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AA5932F4EEB6D1D7E5D1A314;
-			remoteInfo = fltk_zlib;
-		};
-		F5A28484CF63EF567E376162 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = BB76D328D5B89A1273946784;
-			remoteInfo = fltk_images;
-		};
-		F8F61904C2B9FB800D2C87C0 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		FA43DDB8855B80FFC0780619 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A2AA5A5F9FF0A53A3382DD6C;
-			remoteInfo = fast_slow;
-		};
-		FB18B0028E0D8319045D638E /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		FC814E10BB49023C0C38640B /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = AE6BC0AEB24EBBBDBA4071E0;
-			remoteInfo = Fluid;
-		};
-		FD5507A4E19B2DE1022AD859 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0392A304CDC05B94337B7C04;
-			remoteInfo = fltk_jpeg;
-		};
-		FE63916DB68241B7605C63B7 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = A57FDE871C99A52BEEDEE68C;
-			remoteInfo = fltk;
-		};
-		FF552B90BD433303054DF898 /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 0C8980D2E4E0E914FE651FDB;
-			remoteInfo = shape;
-		};
-		FFC25EB3CA943F2CB2194FEF /* PBXContainerItemProxy */ = {
-			isa = PBXContainerItemProxy;
-			containerPortal = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-			proxyType = 1;
-			remoteGlobalIDString = 51EB382683C25DBDD02CBF33;
-			remoteInfo = navigation;
-		};
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXCopyFilesBuildPhase section */
-		0076EE9F69217E04A9895FD8 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				1F2CAC311F8A067E39FEE564 /* fltk.framework in CopyFiles */,
-				761829645FD3BCA7EE9DE369 /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0459792A31430255E92E06B0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6D607F654C1C216920498A3F /* fltk.framework in CopyFiles */,
-				39C3350334171A972F7E074D /* fltk_forms.framework in CopyFiles */,
-				2029258BA996D13B50EAFCA9 /* fltk_images.framework in CopyFiles */,
-				CC54A24FCE15AB4AF1A78C78 /* fltk_jpeg.framework in CopyFiles */,
-				6D1D23AC12075C7023D6272E /* fltk_png.framework in CopyFiles */,
-				48EE66A7F585223B21924B63 /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		04B23EAB9E98EAB32D837A33 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				63C6A53E427D883D50AFF203 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0829584030C9C26BEFB229A7 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				78A86E05D9AE49D54C6503EB /* fltk.framework in CopyFiles */,
-				3D0A39265F7745FB60BD740F /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		14A08E6CA7240FE82E333C23 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				50D00B23D302F5A6221E1501 /* fltk.framework in CopyFiles */,
-				BF212FE1FA8676E379DE4BC1 /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1ABBC52FB651077E2CDC1703 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				3B93665C37B124E7072A0C29 /* fltk.framework in CopyFiles */,
-				2169C2174D9331F7AE319055 /* fltk_forms.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1C5279FDAE2119294AC099F4 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				C9A374AB3AD29E141C659819 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		219C00E2752B1FFDDB65EF50 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				21B72C5246147C90863C53DA /* fltk.framework in CopyFiles */,
-				C1C1ABBEB3778451ACBB51BA /* fltk_forms.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2E869EC7F7F037BCEEF364C0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				459365165767B5C89B86DB0A /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		306E9117A2B61C335FFD6E00 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				609B6AA9A11886AD120078E5 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		371773C8CC1E1C48D0F37E46 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				7780DFF77FE8A2E3918D76EE /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4057014FB3ED183E35AC2A9F /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				A30ED031459BFFD0BDBAD530 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		40D98E2789C1C1DCE87703E9 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				63AEC4D1ECF904942EB3F9F6 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		442C73B7DB6D824816242D5D /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				CAA4C60E679571629681FAC8 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		44749E7B96F457043556F4ED /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				0DD4779E58571642E735F936 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		497C5710C4267BC9B5EE600D /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				DD8D5486C8A675DB0CB75731 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4BE6D5F8C329F05C4C3EC8CF /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				9B7DAE2C8EF1066FAF1FA9BD /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4C00F1A541DB0309E475CCD3 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				D6A037657DBB387B5A419548 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4D9E076267C3DC4609607456 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				054B849D18F5EBFB3B723E08 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4DA6FB6930E09E022DC859E0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				DC2FCAF31C3052861233E1F7 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		501EEF6F6EE53AC62D5C2D1A /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				E27075BC1282FFAD1956BC3B /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		50566A2A34BD03E36A3865D7 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				8D44A3C7B5AF71AEAE185B34 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		51707CB30925230AD314321F /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				23E0D56EF70C297EE1E49BEA /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5225A2163C55ABD829B1992C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				617249DCB00CDAFCEFF47507 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		53325A1037834D58F4A81281 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				65ED74375F61EB54BF8C7341 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		56C252F318076B470047BFC0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				FDCD049B676867FAB704694A /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		59C7FD4EEABA624F41865158 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				B1844D597DF5DA29D5F0D0EA /* fltk.framework in CopyFiles */,
-				9472CE1B5CCC90702F8E3E9C /* fltk_images.framework in CopyFiles */,
-				E5405658EF89EAAA2FEF7C65 /* fltk_jpeg.framework in CopyFiles */,
-				0A6E94501652FA0708E594FE /* fltk_png.framework in CopyFiles */,
-				6CF374ADD093E8B2F8D5CB1F /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6A8C020314852B71FAC02D75 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6FD47E04046FAD55F12B263D /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6D480DB39435A257ABBD7ECF /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				10727EB1E80609438488AC42 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7E4AA34087EC5D05E668DA08 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				9F2F716C73DB7126154E2C2B /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F3421EE1CE8ADF1005FA821 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 7;
-			files = (
-				7F3421EF1CE8AE00005FA821 /* help-test.html in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F419DFD1D92857E0098B602 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				7F419DFE1D92857E0098B602 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F785E28BCEA44FDC7C10F65 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				74724A686235657769236719 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7FB1BE041B5D20C100055291 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				7FB1BE051B5D20CF00055291 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8867D980D3F5085D34A6DF7B /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				C6CD79ED524C59053F917F45 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		89B4A3C45EFC0B03783C90A8 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				4E24CDCFCB51227673CFCB78 /* fltk.framework in CopyFiles */,
-				C6FD8DF60A263859C9AFA67B /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		89E1ACE119E189BA4809B823 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6C917160D346EAC358A90BA7 /* fltk.framework in CopyFiles */,
-				A2F796291ADDEAF1E00F934B /* fltk_images.framework in CopyFiles */,
-				CE5AC8A1A69F5467AC1F2334 /* fltk_jpeg.framework in CopyFiles */,
-				812761E94039F13357F56EE6 /* fltk_png.framework in CopyFiles */,
-				BCC7C58D1C0093B509A27A67 /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		91EC7035DE2DC762CBE1FC29 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				D7400B2909AB44235D04AAAE /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		95245DC43D9B4E1FAC8AB3AB /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				06167461BCECCD5F6CC0DF75 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9554B769334DB4985F944FF8 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				36C0899CCC21C71B9CFF601B /* fltk.framework in CopyFiles */,
-				7DED43FFEE9A23B55D42073B /* fltk_images.framework in CopyFiles */,
-				ACFA7111F7264C24A5C86250 /* fltk_jpeg.framework in CopyFiles */,
-				889D728BF930F9FCA772ACA9 /* fltk_png.framework in CopyFiles */,
-				3171A6E41650360C5CEA1404 /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		96651E0FF4A5684EF37DD2F9 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				AF7AB6EF4772DF7005A3A86B /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		98218889F7138DA8FF05A3A8 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				B6940E83F5A18CE1DC9D0BB2 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9CB82796EC8649C3AC621805 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				F1C6FA1ABFEFA9DD53A7B8E8 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA203DFDF8502DF46F176190 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				0B79061CA79B3045A5B81ACD /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AA5B19C0922A68B64E2EA35A /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				F2169D8ACFDBBA7D26FCCBD8 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AC00EF2D1E13D99AE18A1362 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				66562A26749676E7CD2BEBB2 /* fltk.framework in CopyFiles */,
-				5E71CF75BEA893FEABC5D71B /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AC36F687FDBF8CCF542C6369 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				CCBA42B41DC49950A9E74BF1 /* fltk.framework in CopyFiles */,
-				6C121DB655DF72455AD07862 /* fltk_forms.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		ADB965405855BB547786982C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				075D902AD577A148FB33ACAE /* fltk.framework in CopyFiles */,
-				1A14C4DE9E6CF0B95B0FB8AD /* fltk_forms.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AE6382154736E22FC10B2BF0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				66F171E715C700BAE6C97C61 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B1608C348129813E176E8357 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				9D9D80346287098BF39EFA5D /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B77EF555DF7D2283999BB0F2 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6D84DDCA780B4B8B5C10849E /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BAA16D4B3709554A4558AF91 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6EDC00A2A72FBC2364315591 /* fltk.framework in CopyFiles */,
-				D5BBC609BD2F3A442651774C /* fltk_images.framework in CopyFiles */,
-				D2A2528E9AF246F20E96A7FB /* fltk_jpeg.framework in CopyFiles */,
-				F0C366896B5A9CFED45E1DF1 /* fltk_png.framework in CopyFiles */,
-				F13E156B3E3367FB3F03BF4D /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BED4EECA87D03F546D268B16 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				928D03671DF168D88B96D178 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C53FE249ADCCCD36B1EC326E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				794879F3090773543095027D /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C828F73FC372E787EE66D21A /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				8A80E9D910324212101C3E76 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9165EA91291A304003FF4F0 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				C9165EAA1291A304003FF4F0 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C99FD8E112D2A295002FC776 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 7;
-			files = (
-				C99FD8E212D2A2AD002FC776 /* browser.cxx in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9EDD42D1274B84100ADB21C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			comments = "Copy all FLTK headers into a custom position within the Framework. FLTK requires a slightly different syntax compared to regular Apple frameworks.\n\nApple (this does not work!):\n  #include <fltk/fltk.h>\n\nFLTK:\n  #include <FL/Fl.H>\n\nFor the second format to work, the following path must be added to the project:\n  /Library/Framework/fltk.framework/Headers/\n\n";
-			dstPath = ../Headers/FL;
-			dstSubfolderSpec = 7;
-			files = (
-				C9EDD4ED1274BBCD00ADB21C /* forms.H in CopyFiles */,
-				C9EDD4C91274B95700ADB21C /* Fl_BMP_Image.H in CopyFiles */,
-				C9EDD4CA1274B95700ADB21C /* Fl_GIF_Image.H in CopyFiles */,
-				C9EDD4CB1274B95700ADB21C /* Fl_Help_Dialog.H in CopyFiles */,
-				C9EDD4CC1274B95700ADB21C /* Fl_Help_View.H in CopyFiles */,
-				C9EDD4CD1274B95700ADB21C /* Fl_JPEG_Image.H in CopyFiles */,
-				C9EDD4CE1274B95700ADB21C /* Fl_PNG_Image.H in CopyFiles */,
-				C9EDD4CF1274B95700ADB21C /* Fl_PNM_Image.H in CopyFiles */,
-				C9EDD4C31274B94D00ADB21C /* Fl_Gl_Window.H in CopyFiles */,
-				C9EDD4C41274B94D00ADB21C /* gl.h in CopyFiles */,
-				C9EDD4C51274B94D00ADB21C /* gl2opengl.h in CopyFiles */,
-				C9EDD4C61274B94D00ADB21C /* gl_draw.H in CopyFiles */,
-				C9EDD4C71274B94D00ADB21C /* glu.h in CopyFiles */,
-				C9EDD4C81274B94D00ADB21C /* glut.H in CopyFiles */,
-				C9EDD4441274B93000ADB21C /* Enumerations.H in CopyFiles */,
-				C9EDD4451274B93000ADB21C /* Fl.H in CopyFiles */,
-				C9EDD4461274B93000ADB21C /* Fl_Adjuster.H in CopyFiles */,
-				C9EDD4471274B93000ADB21C /* Fl_Bitmap.H in CopyFiles */,
-				C9EDD4481274B93000ADB21C /* Fl_Box.H in CopyFiles */,
-				C9EDD4491274B93000ADB21C /* Fl_Browser.H in CopyFiles */,
-				C9EDD44A1274B93000ADB21C /* Fl_Browser_.H in CopyFiles */,
-				C9EDD44B1274B93000ADB21C /* Fl_Button.H in CopyFiles */,
-				C9EDD44C1274B93000ADB21C /* Fl_Cairo.H in CopyFiles */,
-				C9EDD44D1274B93000ADB21C /* Fl_Cairo_Window.H in CopyFiles */,
-				C9EDD44E1274B93000ADB21C /* Fl_Chart.H in CopyFiles */,
-				C9EDD44F1274B93000ADB21C /* Fl_Check_Browser.H in CopyFiles */,
-				C9EDD4501274B93000ADB21C /* Fl_Check_Button.H in CopyFiles */,
-				C9EDD4511274B93000ADB21C /* Fl_Choice.H in CopyFiles */,
-				C9EDD4521274B93000ADB21C /* Fl_Clock.H in CopyFiles */,
-				C9EDD4531274B93000ADB21C /* Fl_Color_Chooser.H in CopyFiles */,
-				C9EDD4541274B93000ADB21C /* Fl_Counter.H in CopyFiles */,
-				C9EDD4551274B93000ADB21C /* Fl_Device.H in CopyFiles */,
-				C9EDD4561274B93000ADB21C /* Fl_Dial.H in CopyFiles */,
-				C9EDD4571274B93000ADB21C /* Fl_Double_Window.H in CopyFiles */,
-				C9EDD4581274B93000ADB21C /* Fl_Export.H in CopyFiles */,
-				C9EDD4591274B93000ADB21C /* Fl_File_Browser.H in CopyFiles */,
-				C9EDD45A1274B93000ADB21C /* Fl_File_Chooser.H in CopyFiles */,
-				C9EDD45B1274B93000ADB21C /* Fl_File_Icon.H in CopyFiles */,
-				C9EDD45C1274B93000ADB21C /* Fl_File_Input.H in CopyFiles */,
-				C9EDD45D1274B93000ADB21C /* Fl_Fill_Dial.H in CopyFiles */,
-				C9EDD45E1274B93000ADB21C /* Fl_Fill_Slider.H in CopyFiles */,
-				C9EDD45F1274B93000ADB21C /* Fl_Float_Input.H in CopyFiles */,
-				C9EDD4601274B93000ADB21C /* Fl_FormsBitmap.H in CopyFiles */,
-				C9EDD4611274B93000ADB21C /* Fl_FormsPixmap.H in CopyFiles */,
-				C9EDD4621274B93000ADB21C /* Fl_Free.H in CopyFiles */,
-				C9EDD4631274B93000ADB21C /* Fl_Group.H in CopyFiles */,
-				C9EDD4641274B93000ADB21C /* Fl_Hold_Browser.H in CopyFiles */,
-				C9EDD4651274B93000ADB21C /* Fl_Hor_Fill_Slider.H in CopyFiles */,
-				C9EDD4661274B93000ADB21C /* Fl_Hor_Nice_Slider.H in CopyFiles */,
-				C9EDD4671274B93000ADB21C /* Fl_Hor_Slider.H in CopyFiles */,
-				C9EDD4681274B93000ADB21C /* Fl_Hor_Value_Slider.H in CopyFiles */,
-				C9EDD4691274B93000ADB21C /* Fl_Image.H in CopyFiles */,
-				C9EDD46A1274B93000ADB21C /* Fl_Input.H in CopyFiles */,
-				C9EDD46B1274B93000ADB21C /* Fl_Input_.H in CopyFiles */,
-				C9EDD46C1274B93000ADB21C /* Fl_Input_Choice.H in CopyFiles */,
-				C9EDD46D1274B93000ADB21C /* Fl_Int_Input.H in CopyFiles */,
-				C9EDD46E1274B93000ADB21C /* Fl_Light_Button.H in CopyFiles */,
-				C9EDD46F1274B93000ADB21C /* Fl_Line_Dial.H in CopyFiles */,
-				C9EDD4701274B93000ADB21C /* Fl_Menu.H in CopyFiles */,
-				C9EDD4711274B93000ADB21C /* Fl_Menu_.H in CopyFiles */,
-				C9EDD4721274B93000ADB21C /* Fl_Menu_Bar.H in CopyFiles */,
-				C9EDD4731274B93000ADB21C /* Fl_Menu_Button.H in CopyFiles */,
-				C9EDD4741274B93000ADB21C /* Fl_Menu_Item.H in CopyFiles */,
-				C9EDD4751274B93000ADB21C /* Fl_Menu_Window.H in CopyFiles */,
-				C9EDD4761274B93000ADB21C /* Fl_Multi_Browser.H in CopyFiles */,
-				C9EDD4771274B93000ADB21C /* Fl_Multi_Label.H in CopyFiles */,
-				C9EDD4781274B93000ADB21C /* Fl_Multiline_Input.H in CopyFiles */,
-				C9EDD4791274B93000ADB21C /* Fl_Multiline_Output.H in CopyFiles */,
-				C9EDD47A1274B93000ADB21C /* Fl_Native_File_Chooser.H in CopyFiles */,
-				C9EDD47B1274B93000ADB21C /* Fl_Nice_Slider.H in CopyFiles */,
-				C9EDD47C1274B93000ADB21C /* Fl_Object.H in CopyFiles */,
-				C9EDD47D1274B93000ADB21C /* Fl_Output.H in CopyFiles */,
-				C9EDD47E1274B93000ADB21C /* Fl_Overlay_Window.H in CopyFiles */,
-				C9EDD47F1274B93000ADB21C /* Fl_Pack.H in CopyFiles */,
-				C9EDD4801274B93000ADB21C /* Fl_Pixmap.H in CopyFiles */,
-				C9EDD4811274B93000ADB21C /* Fl_Plugin.H in CopyFiles */,
-				C9EDD4821274B93000ADB21C /* Fl_Positioner.H in CopyFiles */,
-				C9EDD5B31274C51600ADB21C /* Fl_PostScript.H in CopyFiles */,
-				C9EDD4831274B93000ADB21C /* Fl_Preferences.H in CopyFiles */,
-				C9EDD4841274B93000ADB21C /* Fl_Printer.H in CopyFiles */,
-				C9EDD4851274B93000ADB21C /* Fl_Progress.H in CopyFiles */,
-				C9EDD4861274B93000ADB21C /* Fl_RGB_Image.H in CopyFiles */,
-				C9EDD4871274B93000ADB21C /* Fl_Radio_Button.H in CopyFiles */,
-				C9EDD4881274B93000ADB21C /* Fl_Radio_Light_Button.H in CopyFiles */,
-				C9EDD4891274B93000ADB21C /* Fl_Radio_Round_Button.H in CopyFiles */,
-				C9EDD48A1274B93000ADB21C /* Fl_Repeat_Button.H in CopyFiles */,
-				C9EDD48B1274B93000ADB21C /* Fl_Return_Button.H in CopyFiles */,
-				C9EDD48C1274B93000ADB21C /* Fl_Roller.H in CopyFiles */,
-				C9EDD48D1274B93000ADB21C /* Fl_Round_Button.H in CopyFiles */,
-				C9EDD48E1274B93000ADB21C /* Fl_Round_Clock.H in CopyFiles */,
-				C9EDD48F1274B93000ADB21C /* Fl_Scroll.H in CopyFiles */,
-				C9EDD4901274B93000ADB21C /* Fl_Scrollbar.H in CopyFiles */,
-				C9EDD4911274B93000ADB21C /* Fl_Secret_Input.H in CopyFiles */,
-				C9EDD4921274B93000ADB21C /* Fl_Select_Browser.H in CopyFiles */,
-				C9EDD4931274B93000ADB21C /* Fl_Shared_Image.H in CopyFiles */,
-				C9EDD4941274B93000ADB21C /* Fl_Simple_Counter.H in CopyFiles */,
-				C9EDD4951274B93000ADB21C /* Fl_Single_Window.H in CopyFiles */,
-				C9EDD4961274B93000ADB21C /* Fl_Slider.H in CopyFiles */,
-				C9EDD4971274B93000ADB21C /* Fl_Spinner.H in CopyFiles */,
-				C9EDD4981274B93000ADB21C /* Fl_Sys_Menu_Bar.H in CopyFiles */,
-				C9EDD4991274B93000ADB21C /* Fl_Table.H in CopyFiles */,
-				C9EDD49A1274B93000ADB21C /* Fl_Table_Row.H in CopyFiles */,
-				C9EDD49B1274B93000ADB21C /* Fl_Tabs.H in CopyFiles */,
-				C9EDD49C1274B93000ADB21C /* Fl_Text_Buffer.H in CopyFiles */,
-				C9EDD49D1274B93000ADB21C /* Fl_Text_Display.H in CopyFiles */,
-				C9EDD49E1274B93000ADB21C /* Fl_Text_Editor.H in CopyFiles */,
-				C9EDD49F1274B93000ADB21C /* Fl_Tile.H in CopyFiles */,
-				C9EDD4A01274B93000ADB21C /* Fl_Tiled_Image.H in CopyFiles */,
-				C9EDD4A11274B93000ADB21C /* Fl_Timer.H in CopyFiles */,
-				C9EDD4A21274B93000ADB21C /* Fl_Toggle_Button.H in CopyFiles */,
-				C9EDD4A31274B93000ADB21C /* Fl_Toggle_Light_Button.H in CopyFiles */,
-				C9EDD4A41274B93000ADB21C /* Fl_Toggle_Round_Button.H in CopyFiles */,
-				C9EDD4A51274B93000ADB21C /* Fl_Tooltip.H in CopyFiles */,
-				C9EDD4A61274B93000ADB21C /* Fl_Tree.H in CopyFiles */,
-				C9EDD4A71274B93000ADB21C /* Fl_Tree_Item.H in CopyFiles */,
-				C9EDD4A81274B93000ADB21C /* Fl_Tree_Item_Array.H in CopyFiles */,
-				C9EDD4A91274B93000ADB21C /* Fl_Tree_Prefs.H in CopyFiles */,
-				C9EDD4AA1274B93000ADB21C /* Fl_Valuator.H in CopyFiles */,
-				C9EDD4AB1274B93000ADB21C /* Fl_Value_Input.H in CopyFiles */,
-				C9EDD4AC1274B93000ADB21C /* Fl_Value_Output.H in CopyFiles */,
-				C9EDD4AD1274B93000ADB21C /* Fl_Value_Slider.H in CopyFiles */,
-				C9EDD4AE1274B93000ADB21C /* Fl_Widget.H in CopyFiles */,
-				C9EDD4AF1274B93000ADB21C /* Fl_Window.H in CopyFiles */,
-				C9EDD4B01274B93000ADB21C /* Fl_Wizard.H in CopyFiles */,
-				C9EDD4B11274B93000ADB21C /* Fl_XBM_Image.H in CopyFiles */,
-				C9EDD4B21274B93000ADB21C /* Fl_XPM_Image.H in CopyFiles */,
-				C9EDD4B41274B93000ADB21C /* dirent.h in CopyFiles */,
-				C9EDD4B51274B93000ADB21C /* filename.H in CopyFiles */,
-				C9EDD4B61274B93000ADB21C /* fl_ask.H in CopyFiles */,
-				C9EDD4B71274B93000ADB21C /* fl_draw.H in CopyFiles */,
-				C9EDD4B81274B93000ADB21C /* fl_message.H in CopyFiles */,
-				C9EDD4B91274B93000ADB21C /* fl_show_colormap.H in CopyFiles */,
-				C9EDD4BA1274B93000ADB21C /* fl_show_input.H in CopyFiles */,
-				C9EDD4BB1274B93000ADB21C /* fl_types.h in CopyFiles */,
-				C9EDD4BC1274B93000ADB21C /* fl_utf8.h in CopyFiles */,
-				C9EDD4BD1274B93000ADB21C /* mac.H in CopyFiles */,
-				C9EDD4BE1274B93000ADB21C /* math.h in CopyFiles */,
-				C9EDD4BF1274B93000ADB21C /* names.h in CopyFiles */,
-				C9EDD4C01274B93000ADB21C /* win32.H in CopyFiles */,
-				C9EDD4C11274B93000ADB21C /* x.H in CopyFiles */,
-				C9EDD4C21274B93000ADB21C /* Fl_Paged_Device.H in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9EDD4DD1274BB4100ADB21C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			comments = "Copy some selected image headers. FLTK requires a slightly different syntax compared to regular Apple frameworks.\n\nApple (this does not work!):\n  #include <fltk/fltk.h>\n\nFLTK:\n  #include <FL/Fl.H>\n\nFor the second format to work, the following path must be added to the project:\n  /Library/Framework/fltk.framework/Headers/\n\n";
-			dstPath = ../Headers/FL/images;
-			dstSubfolderSpec = 7;
-			files = (
-				C9EDD4E91274BBC000ADB21C /* jconfig.h in CopyFiles */,
-				C9EDD4EA1274BBC000ADB21C /* jerror.h in CopyFiles */,
-				C9EDD4EB1274BBC000ADB21C /* jmorecfg.h in CopyFiles */,
-				C9EDD4EC1274BBC000ADB21C /* jpeglib.h in CopyFiles */,
-				C9EDD4E01274BB7000ADB21C /* png.h in CopyFiles */,
-				C9EDD4E11274BB7000ADB21C /* pngconf.h in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		CAC749CC825FEBDDCDF3BB42 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				7E8E2DC7A53A62D0F1EB860E /* fltk.framework in CopyFiles */,
-				04DF45396E2902B78B3000E7 /* fltk_gl.framework in CopyFiles */,
-				4F038DFA7E6C3AD4C7F1AA3F /* fltk_forms.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		CCBEDDCC81FD47532FFBEEC3 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				D290942090DAC527A34C64CA /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D37688A219F4F19D999D40FF /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				841E578BD65E09035B1FEE9D /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D40E5F4F48C9ECADF37F9015 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				159B26C946095CB8019A2601 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D68C5E7DBB5DD6F7FA6C3121 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				E1563C24BF6A67B0894A9C62 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E28156A3CBFEC9AE06D4786E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				CF3F256FD9E7676E994E48ED /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E2F7CD46720ADD8FCBFAD66C /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				A6A468553E05F8F39B0C6548 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E3175F32C5E537F31CCC7405 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				27B72DED3A7DC854571BD656 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E358008622B4B9915BA5BA0A /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				B2906BF409036924F7884036 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E64C511B77AB8F35A910B0A9 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				6A19D50B01471987066FCBA0 /* fltk.framework in CopyFiles */,
-				27995ECF594A0572EAF3C346 /* fltk_gl.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E77D972F65E2ABE29A94026B /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				D4DFB9268948E993B89517D7 /* fltk.framework in CopyFiles */,
-				89D802529418A7DFA1426457 /* fltk_images.framework in CopyFiles */,
-				C3362094052FF19A8B2ABA4C /* fltk_jpeg.framework in CopyFiles */,
-				71A1293362845D379D9FE9D1 /* fltk_png.framework in CopyFiles */,
-				6524CA4C83E0EFF0D8DFC432 /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EB69EF8BBB5C5E7FC00CC490 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				3222D7D927BF1220D08F1DF8 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EC951A14BC9C727DEF319FAD /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				FD94C73927DDB5ADF142B250 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F37DD7CB8A1C3B8BE19DC766 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				9EF754F80D24595D4AA26D46 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F60480C83F372B1B229B0489 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				EDB4BB04710CA83033FEBE51 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F70F38AB9D113DA6356470D5 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				38FF583076FEFAE950EEBD6E /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F8CBF5771DF5F8C04AC4A4A9 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				95B623EF2BF8E0A8CF6BD399 /* fltk.framework in CopyFiles */,
-				5C908E926420B21866AA191B /* fltk_images.framework in CopyFiles */,
-				743107FF599BD4B46CF82FB8 /* fltk_jpeg.framework in CopyFiles */,
-				D3462ED8E09994945B80D322 /* fltk_png.framework in CopyFiles */,
-				233BF3B026584A65E890CC9D /* fltk_zlib.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FD23C57E5A2080DE56907411 /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 2147483647;
-			dstPath = "";
-			dstSubfolderSpec = 10;
-			files = (
-				B8AE9B8421BBF978AA286070 /* fltk.framework in CopyFiles */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
-/* Begin PBXFileReference section */
-		00B08A2C8EA901C350696F8D /* Fl_compose.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_compose.cxx; path = ../../src/Fl_compose.cxx; sourceTree = SOURCE_ROOT; };
-		00CAAA52DC3193E1133AE26C /* Fl_Float_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Float_Input.H; path = ../../FL/Fl_Float_Input.H; sourceTree = SOURCE_ROOT; };
-		00E3864092375950FE42449E /* Fl_Tree_Item_Array.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Item_Array.cxx; path = ../../src/Fl_Tree_Item_Array.cxx; sourceTree = SOURCE_ROOT; };
-		020FFBC4E06A072BF8D098FB /* resize.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = resize.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		02C21BB31E7DDFE9E76F4997 /* Fl_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Dial.H; path = ../../FL/Fl_Dial.H; sourceTree = SOURCE_ROOT; };
-		02EE866C628E67B0928F7E6C /* output.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = output.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		031DE3DC995A7F7219A471E9 /* resizebox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = resizebox.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		0330777F0ECC3BA2B055C80E /* Fl_File_Icon2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Icon2.cxx; path = ../../src/Fl_File_Icon2.cxx; sourceTree = SOURCE_ROOT; };
-		037E92E807DF3B8C0B19FF85 /* pngrtran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngrtran.c; path = ../../png/pngrtran.c; sourceTree = SOURCE_ROOT; };
-		03B092065D7DE42B7F633A41 /* message.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = message.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		03D5B076E8097600496915F7 /* Fl_Radio_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Light_Button.H; path = ../../FL/Fl_Radio_Light_Button.H; sourceTree = SOURCE_ROOT; };
-		0512326568039B9A0C5BD3DB /* Fl_File_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Input.H; path = ../../FL/Fl_File_Input.H; sourceTree = SOURCE_ROOT; };
-		052F1F0502DC2E28EA0D2405 /* code.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = code.cxx; path = ../../fluid/code.cxx; sourceTree = SOURCE_ROOT; };
-		05376DC900B2C885B847EA36 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		058BCBC36ADE724A418F1C43 /* Fl_Color_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Color_Chooser.cxx; path = ../../src/Fl_Color_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		05BBBFE4BED0452E5D6A81F7 /* Fl_Positioner.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Positioner.cxx; path = ../../src/Fl_Positioner.cxx; sourceTree = SOURCE_ROOT; };
-		05ECF96A7262C1F1111ABCC7 /* native-filechooser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "native-filechooser.app"; sourceTree = BUILT_PRODUCTS_DIR; };
-		077BDEA1F0364BDA61518702 /* fl_diamond_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_diamond_box.cxx; path = ../../src/fl_diamond_box.cxx; sourceTree = SOURCE_ROOT; };
-		07CDB54753C46D7CB01A3C8C /* forms_compatability.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_compatability.cxx; path = ../../src/forms_compatability.cxx; sourceTree = SOURCE_ROOT; };
-		097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_forms.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		09A359CA8F522F64BAF6CEAF /* Fl_x.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_x.cxx; path = ../../src/Fl_x.cxx; sourceTree = SOURCE_ROOT; };
-		09A55ED62CD9010F1E512122 /* curve.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = curve.cxx; path = ../../test/curve.cxx; sourceTree = SOURCE_ROOT; };
-		09FC37C8231478832FDD1F9E /* align_widget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = align_widget.cxx; path = ../../fluid/align_widget.cxx; sourceTree = SOURCE_ROOT; };
-		0A447B8708FA755BB960A134 /* fl_encoding_mac_roman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_encoding_mac_roman.cxx; path = ../../src/fl_encoding_mac_roman.cxx; sourceTree = SOURCE_ROOT; };
-		0A9C06C70D7733C29D99F901 /* buttons.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = buttons.cxx; path = ../../test/buttons.cxx; sourceTree = SOURCE_ROOT; };
-		0B5987E1A293E67A6290612A /* fl_line_style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_line_style.cxx; path = ../../src/fl_line_style.cxx; sourceTree = SOURCE_ROOT; };
-		0B800D01D215C41573FFE4DA /* Fl_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Type.cxx; path = ../../fluid/Fl_Type.cxx; sourceTree = SOURCE_ROOT; };
-		0B9D4355B2E878715DD43AD3 /* Fl_Widget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Widget.cxx; path = ../../src/Fl_Widget.cxx; sourceTree = SOURCE_ROOT; };
-		0BD550D5F4A9E53E93B19234 /* Fl_Tree_Item.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tree_Item.H; path = ../../FL/Fl_Tree_Item.H; sourceTree = SOURCE_ROOT; };
-		0C4D02EC5E80D2BF56CFB48B /* jcapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = ../../jpeg/jcapistd.c; sourceTree = SOURCE_ROOT; };
-		0C9E126B5F827C426EC22043 /* tabs.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tabs.fl; path = ../../test/tabs.fl; sourceTree = SOURCE_ROOT; };
-		0CAFE7CA950A492FE35F2163 /* Fl_Chart.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Chart.H; path = ../../FL/Fl_Chart.H; sourceTree = SOURCE_ROOT; };
-		0CBC6DC7942212D47B70681B /* Fl_XPM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_XPM_Image.cxx; path = ../../src/Fl_XPM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		0CFB24E7079EC601366BCECF /* Fl_Table_Row.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Table_Row.H; path = ../../FL/Fl_Table_Row.H; sourceTree = SOURCE_ROOT; };
-		0DBD503036293A8AEFAC6725 /* Fl_Tooltip.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tooltip.cxx; path = ../../src/Fl_Tooltip.cxx; sourceTree = SOURCE_ROOT; };
-		0DFF833B9E81E11FA3E3A85A /* tile.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tile.cxx; path = ../../test/tile.cxx; sourceTree = SOURCE_ROOT; };
-		0E259033BF45B73C21409C8F /* Fl_display.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_display.cxx; path = ../../src/Fl_display.cxx; sourceTree = SOURCE_ROOT; };
-		0EB55F59B3D0D0BD1A8BFE5E /* fl_color.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_color.cxx; path = ../../src/fl_color.cxx; sourceTree = SOURCE_ROOT; };
-		0EC11A5CAD4E3607A72BEF84 /* Fl_Single_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Single_Window.H; path = ../../FL/Fl_Single_Window.H; sourceTree = SOURCE_ROOT; };
-		102A2F111D6E3FEE95E5B473 /* tabs.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tabs.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		102D0B1D203936477107B2D8 /* widget_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = widget_panel.cxx; path = ../../fluid/widget_panel.cxx; sourceTree = SOURCE_ROOT; };
-		1072C2A463FBCF2C5E278649 /* Fl_RGB_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_RGB_Image.H; path = ../../FL/Fl_RGB_Image.H; sourceTree = SOURCE_ROOT; };
-		116F849BE68830F05CA66B9A /* Fl_Table.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Table.cxx; path = ../../src/Fl_Table.cxx; sourceTree = SOURCE_ROOT; };
-		11A4DF1725F38E4341C5C663 /* pngwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngwrite.c; path = ../../png/pngwrite.c; sourceTree = SOURCE_ROOT; };
-		13BCF00369D5254F0CE49599 /* Fl_Round_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Round_Button.cxx; path = ../../src/Fl_Round_Button.cxx; sourceTree = SOURCE_ROOT; };
-		1433F1B8C4085D5D5E1BA0E1 /* Fl_XPM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_XPM_Image.H; path = ../../FL/Fl_XPM_Image.H; sourceTree = SOURCE_ROOT; };
-		147BE92B6E470D0A80BD203D /* doublebuffer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = doublebuffer.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		149DEBE486F3554738429684 /* Fl_Browser_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Browser_.H; path = ../../FL/Fl_Browser_.H; sourceTree = SOURCE_ROOT; };
-		14AA766D5DA5A8BCFF60B626 /* jcprepct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcprepct.c; path = ../../jpeg/jcprepct.c; sourceTree = SOURCE_ROOT; };
-		1501BD6AB688B2DB8120E852 /* fl_call_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fl_call_main.c; path = ../../src/fl_call_main.c; sourceTree = SOURCE_ROOT; };
-		15405AF3DA5E1FF9D702C263 /* input_choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = input_choice.cxx; path = ../../test/input_choice.cxx; sourceTree = SOURCE_ROOT; };
-		15B635124165659EFD5640FF /* Fl_JPEG_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_JPEG_Image.H; path = ../../FL/Fl_JPEG_Image.H; sourceTree = SOURCE_ROOT; };
-		1649775917C34003C78C7576 /* cube.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cube.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		16A1B66BA02AC26B38AD52A1 /* color_chooser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = color_chooser.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		176A3053D562D80CD4D3A400 /* print_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = print_panel.h; path = ../../fluid/print_panel.h; sourceTree = SOURCE_ROOT; };
-		17D45DE262939B64E8894DBB /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
-		17D7629A8FC1C1A1DABEDAC0 /* Fl_File_Chooser2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Chooser2.cxx; path = ../../src/Fl_File_Chooser2.cxx; sourceTree = SOURCE_ROOT; };
-		18A8E88697605A73C46C0DDF /* Fl_File_Icon.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Icon.H; path = ../../FL/Fl_File_Icon.H; sourceTree = SOURCE_ROOT; };
-		197D446B1F4FEB565793FC67 /* Fl_Tree_Prefs.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Prefs.cxx; path = ../../src/Fl_Tree_Prefs.cxx; sourceTree = SOURCE_ROOT; };
-		199EA4C60DD488096817D322 /* Fl_Menu_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Button.cxx; path = ../../src/Fl_Menu_Button.cxx; sourceTree = SOURCE_ROOT; };
-		19C5DB6F3DD5011DAE6F79AB /* Fl_Adjuster.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Adjuster.cxx; path = ../../src/Fl_Adjuster.cxx; sourceTree = SOURCE_ROOT; };
-		1AC9AD74C0E0B27EA2A99DF7 /* Fl_File_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Chooser.cxx; path = ../../src/Fl_File_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		1BCEDC8AA971784435AC3119 /* adjuster.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = adjuster.cxx; path = ../../test/adjuster.cxx; sourceTree = SOURCE_ROOT; };
-		1C17C98660CE64B98C8E2DFB /* fonts.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fonts.cxx; path = ../../test/fonts.cxx; sourceTree = SOURCE_ROOT; };
-		1C75365D167645656C3A6752 /* ps_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ps_image.cxx; path = ../../src/ps_image.cxx; sourceTree = SOURCE_ROOT; };
-		1CFFC165E8EE6C1AD9CFD33C /* Fl_Int_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Int_Input.H; path = ../../FL/Fl_Int_Input.H; sourceTree = SOURCE_ROOT; };
-		1D02929D32167C37921C842E /* resizebox.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = resizebox.cxx; path = ../../test/resizebox.cxx; sourceTree = SOURCE_ROOT; };
-		1D152F81B7390EEECF3BB670 /* preferences.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = preferences.fl; path = ../../test/preferences.fl; sourceTree = SOURCE_ROOT; };
-		1D499CE6ECA4995EEA46EAD7 /* math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = math.h; path = ../../FL/math.h; sourceTree = SOURCE_ROOT; };
-		1DBDBB6B583C028BD8D1D2F4 /* Fl_Menu_Bar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Bar.H; path = ../../FL/Fl_Menu_Bar.H; sourceTree = SOURCE_ROOT; };
-		1E431497B296C454015D42C2 /* pixmap_browser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pixmap_browser.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		1F4662A0BC6D0B396E78A8B5 /* symbols.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = symbols.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		1F6E4CE3C0DF58D8F7B3A94A /* gl_overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gl_overlay.cxx; path = ../../test/gl_overlay.cxx; sourceTree = SOURCE_ROOT; };
-		1FB7B9BDAA5F88A0223A5EA9 /* jddctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = ../../jpeg/jddctmgr.c; sourceTree = SOURCE_ROOT; };
-		1FCDDD4E00F7CAA8193CAE04 /* Fl_Overlay_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Overlay_Window.H; path = ../../FL/Fl_Overlay_Window.H; sourceTree = SOURCE_ROOT; };
-		20A898FCF6349F72BABDC497 /* Fl_Positioner.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Positioner.H; path = ../../FL/Fl_Positioner.H; sourceTree = SOURCE_ROOT; };
-		21094B942E7FBFBCF1679259 /* Fl_Hor_Nice_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Nice_Slider.H; path = ../../FL/Fl_Hor_Nice_Slider.H; sourceTree = SOURCE_ROOT; };
-		2148BFD8D4CD2F1527B71C3C /* cube.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cube.cxx; path = ../../test/cube.cxx; sourceTree = SOURCE_ROOT; };
-		231CFE382C2134110A029AD0 /* adjuster.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = adjuster.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		2333DEC98DFFAA27F3D85449 /* file.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file.cxx; path = ../../fluid/file.cxx; sourceTree = SOURCE_ROOT; };
-		2483CB305CCA0A319EF35BCF /* jccoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jccoefct.c; path = ../../jpeg/jccoefct.c; sourceTree = SOURCE_ROOT; };
-		24E8C158A0FFA9C8900E98D8 /* pngwtran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngwtran.c; path = ../../png/pngwtran.c; sourceTree = SOURCE_ROOT; };
-		25F7E879F4C04CF85422D2B7 /* keyboard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = keyboard.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		2621527FD926C67B778C41F3 /* fl_draw.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_draw.H; path = ../../FL/fl_draw.H; sourceTree = SOURCE_ROOT; };
-		270962DA6A7684128875ADDE /* Fl_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Round_Button.H; path = ../../FL/Fl_Round_Button.H; sourceTree = SOURCE_ROOT; };
-		273EA935130ACF91000D6870 /* jaricom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jaricom.c; path = ../../jpeg/jaricom.c; sourceTree = SOURCE_ROOT; };
-		273EA936130ACF91000D6870 /* jcarith.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcarith.c; path = ../../jpeg/jcarith.c; sourceTree = SOURCE_ROOT; };
-		273EA937130ACF91000D6870 /* jdarith.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdarith.c; path = ../../jpeg/jdarith.c; sourceTree = SOURCE_ROOT; };
-		273EA938130ACF91000D6870 /* jdct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = ../../jpeg/jdct.h; sourceTree = SOURCE_ROOT; };
-		273EA939130ACF91000D6870 /* jinclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jinclude.h; path = ../../jpeg/jinclude.h; sourceTree = SOURCE_ROOT; };
-		273EA93A130ACF91000D6870 /* jmemsys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jmemsys.h; path = ../../jpeg/jmemsys.h; sourceTree = SOURCE_ROOT; };
-		273EA93B130ACF91000D6870 /* jpegint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpegint.h; path = ../../jpeg/jpegint.h; sourceTree = SOURCE_ROOT; };
-		273EA93C130ACF91000D6870 /* jversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jversion.h; path = ../../jpeg/jversion.h; sourceTree = SOURCE_ROOT; };
-		274CBEBF1D1BFD5C91605CBE /* Fl_add_idle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_add_idle.cxx; path = ../../src/Fl_add_idle.cxx; sourceTree = SOURCE_ROOT; };
-		27C65F509527076EB26E9C0F /* Fl_Gl_Choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Gl_Choice.cxx; path = ../../src/Fl_Gl_Choice.cxx; sourceTree = SOURCE_ROOT; };
-		28AFF174A53E38CCB7475C19 /* jdmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmaster.c; path = ../../jpeg/jdmaster.c; sourceTree = SOURCE_ROOT; };
-		28E8F2802DEA5334F914BE98 /* Fl_grab.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_grab.cxx; path = ../../src/Fl_grab.cxx; sourceTree = SOURCE_ROOT; };
-		28F3E4EBB6E5F8420624A5DA /* Fl_Scrollbar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Scrollbar.H; path = ../../FL/Fl_Scrollbar.H; sourceTree = SOURCE_ROOT; };
-		292AEA661D3592D20000763E /* ExternalCodeEditor_UNIX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExternalCodeEditor_UNIX.h; path = ../../fluid/ExternalCodeEditor_UNIX.h; sourceTree = SOURCE_ROOT; };
-		294EA3171D358DAD00052964 /* ExternalCodeEditor_UNIX.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ExternalCodeEditor_UNIX.cxx; path = ../../fluid/ExternalCodeEditor_UNIX.cxx; sourceTree = SOURCE_ROOT; };
-		29E61287C1F4A1123829C900 /* glut_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glut_font.cxx; path = ../../src/glut_font.cxx; sourceTree = SOURCE_ROOT; };
-		2A3CEBA07E8AE9BF4C002531 /* CubeMain.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CubeMain.cxx; path = ../../test/CubeMain.cxx; sourceTree = SOURCE_ROOT; };
-		2A5CB08352A0DBD0980FC770 /* pngpread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngpread.c; path = ../../png/pngpread.c; sourceTree = SOURCE_ROOT; };
-		2B5CC86924C64E849EBE0179 /* jidctfst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctfst.c; path = ../../jpeg/jidctfst.c; sourceTree = SOURCE_ROOT; };
-		2BECA86D733575C07B9982DF /* filename_isdir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_isdir.cxx; path = ../../src/filename_isdir.cxx; sourceTree = SOURCE_ROOT; };
-		2CD1EF8B4BFD0820E9A42641 /* Fl_Color_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Color_Chooser.H; path = ../../FL/Fl_Color_Chooser.H; sourceTree = SOURCE_ROOT; };
-		2D8189C8293D1D51B5409B28 /* CodeEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CodeEditor.h; path = ../../fluid/CodeEditor.h; sourceTree = SOURCE_ROOT; };
-		2DD93178E8AFA850DAC293FC /* fl_dnd.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_dnd.cxx; path = ../../src/fl_dnd.cxx; sourceTree = SOURCE_ROOT; };
-		2DE25DB4CE986C1857B5ECF7 /* Fl_Native_File_Chooser.cxx */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = Fl_Native_File_Chooser.cxx; path = ../../src/Fl_Native_File_Chooser.cxx; sourceTree = SOURCE_ROOT; };
-		2E774D7FE17DC45AFDF985FE /* message.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message.cxx; path = ../../test/message.cxx; sourceTree = SOURCE_ROOT; };
-		31D736821E68F01A1A11FC9F /* Fl_Help_View.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Help_View.H; path = ../../FL/Fl_Help_View.H; sourceTree = SOURCE_ROOT; };
-		31FF037FBCA8B6C0CACB0A37 /* list_visuals.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = list_visuals.cxx; path = ../../test/list_visuals.cxx; sourceTree = SOURCE_ROOT; };
-		323779B8DE42371A98337337 /* CubeView.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CubeView.cxx; path = ../../test/CubeView.cxx; sourceTree = SOURCE_ROOT; };
-		3306C66283D192B1B1739E25 /* fl_curve.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_curve.cxx; path = ../../src/fl_curve.cxx; sourceTree = SOURCE_ROOT; };
-		330837DFFF31CE2EB245C7EC /* Fl_PNM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_PNM_Image.H; path = ../../FL/Fl_PNM_Image.H; sourceTree = SOURCE_ROOT; };
-		332598626430923370C48554 /* Fl_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Image.H; path = ../../FL/Fl_Image.H; sourceTree = SOURCE_ROOT; };
-		33AF346DF043165E0A62ABB5 /* Fl_Double_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Double_Window.cxx; path = ../../src/Fl_Double_Window.cxx; sourceTree = SOURCE_ROOT; };
-		33F18D02CA150D5654D48366 /* jidctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = ../../jpeg/jidctint.c; sourceTree = SOURCE_ROOT; };
-		340E5CD1F39C1484B1BCE8F3 /* fl_oval_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_oval_box.cxx; path = ../../src/fl_oval_box.cxx; sourceTree = SOURCE_ROOT; };
-		34A2B3EFA6146F599E7CA80A /* forms_bitmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_bitmap.cxx; path = ../../src/forms_bitmap.cxx; sourceTree = SOURCE_ROOT; };
-		34CB383C3A4360C14B58562E /* Fl_Value_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Input.cxx; path = ../../src/Fl_Value_Input.cxx; sourceTree = SOURCE_ROOT; };
-		351BFCA4747AF494F84FFE36 /* Fl_Table_Row.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Table_Row.cxx; path = ../../src/Fl_Table_Row.cxx; sourceTree = SOURCE_ROOT; };
-		368BC008DC3AE26333DF0321 /* editor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = editor.cxx; path = ../../test/editor.cxx; sourceTree = SOURCE_ROOT; };
-		376B0C1D3D0947B5EDCDE8E5 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		377C68AADE10A3244413CFF6 /* jidctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = ../../jpeg/jidctflt.c; sourceTree = SOURCE_ROOT; };
-		3789CACF6C845E9C0DE0C58F /* Fl_Preferences.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Preferences.cxx; path = ../../src/Fl_Preferences.cxx; sourceTree = SOURCE_ROOT; };
-		37EC93410A76CE3EB094F162 /* jcapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = ../../jpeg/jcapimin.c; sourceTree = SOURCE_ROOT; };
-		37F324F95525339860AEED24 /* keyboard.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = keyboard.cxx; path = ../../test/keyboard.cxx; sourceTree = SOURCE_ROOT; };
-		382F938CFABC25BC02C13939 /* Fl_Menu_add.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_add.cxx; path = ../../src/Fl_Menu_add.cxx; sourceTree = SOURCE_ROOT; };
-		390863A4D5D1B4C7C9B58679 /* Fl_Box.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Box.H; path = ../../FL/Fl_Box.H; sourceTree = SOURCE_ROOT; };
-		393BD835A7EBE8F1F43AC188 /* Fl_Help_Dialog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Help_Dialog.cxx; path = ../../src/Fl_Help_Dialog.cxx; sourceTree = SOURCE_ROOT; };
-		39CD231E22E0B53E92CABDC9 /* file_chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_chooser.cxx; path = ../../test/file_chooser.cxx; sourceTree = SOURCE_ROOT; };
-		39E501DBC41F2617B69BEE95 /* fl_arc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_arc.cxx; path = ../../src/fl_arc.cxx; sourceTree = SOURCE_ROOT; };
-		3AFC31503AB99F6D00BAC647 /* Fl_Dial.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Dial.cxx; path = ../../src/Fl_Dial.cxx; sourceTree = SOURCE_ROOT; };
-		3D85A740C2D5F1D6C6A9420D /* fl_engraved_label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_engraved_label.cxx; path = ../../src/fl_engraved_label.cxx; sourceTree = SOURCE_ROOT; };
-		3DAF0F1BE5742F8D8D130AF1 /* table.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = table.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		3E092095198BF5104BE09D78 /* Fl_Text_Editor.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Editor.H; path = ../../FL/Fl_Text_Editor.H; sourceTree = SOURCE_ROOT; };
-		3E19864FD168E465A1DAFA6A /* blocks.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = blocks.cxx; path = ../../test/blocks.cxx; sourceTree = SOURCE_ROOT; };
-		3EB2D50857F16B94D2C516E9 /* Fl_BMP_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_BMP_Image.cxx; path = ../../src/Fl_BMP_Image.cxx; sourceTree = SOURCE_ROOT; };
-		3F000DD5F091F66BC42822E3 /* Fl_Bitmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Bitmap.cxx; path = ../../src/Fl_Bitmap.cxx; sourceTree = SOURCE_ROOT; };
-		3F0F366F151B9E0E2FAD0948 /* editor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = editor.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		3F60A41762817C834FF38947 /* Fl_Scroll.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Scroll.cxx; path = ../../src/Fl_Scroll.cxx; sourceTree = SOURCE_ROOT; };
-		4036292D2024DE5622EA0D11 /* forms_free.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_free.cxx; path = ../../src/forms_free.cxx; sourceTree = SOURCE_ROOT; };
-		40E462179ABB6A6D0FBD72FE /* Fl_Type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fl_Type.h; path = ../../fluid/Fl_Type.h; sourceTree = SOURCE_ROOT; };
-		4120FB2B23E168C4377E78E2 /* image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = image.cxx; path = ../../test/image.cxx; sourceTree = SOURCE_ROOT; };
-		4194C917D667C0E2FCEF0A39 /* Fl_Valuator.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Valuator.cxx; path = ../../src/Fl_Valuator.cxx; sourceTree = SOURCE_ROOT; };
-		41D6B03607BD43BB0D703411 /* Fl_Repeat_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Repeat_Button.cxx; path = ../../src/Fl_Repeat_Button.cxx; sourceTree = SOURCE_ROOT; };
-		42660BA0E346168608D0FADB /* fl_utf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fl_utf.c; path = ../../src/fl_utf.c; sourceTree = SOURCE_ROOT; };
-		428497C5DD96FDB07B2A8BC5 /* jdmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmainct.c; path = ../../jpeg/jdmainct.c; sourceTree = SOURCE_ROOT; };
-		42C67E2C7BDA83D7AACF300C /* CubeView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CubeView.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		42C83618F3462133634D3CF9 /* output.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = output.cxx; path = ../../test/output.cxx; sourceTree = SOURCE_ROOT; };
-		42FEA3A2967D04217C27FA61 /* Fl_Secret_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Secret_Input.H; path = ../../FL/Fl_Secret_Input.H; sourceTree = SOURCE_ROOT; };
-		431856A376572B057493295D /* fracviewer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fracviewer.cxx; path = ../../test/fracviewer.cxx; sourceTree = SOURCE_ROOT; };
-		4343E645136756B9FEEE6902 /* fl_cursor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_cursor.cxx; path = ../../src/fl_cursor.cxx; sourceTree = SOURCE_ROOT; };
-		43D9A7CD936B1382F5EA23E1 /* about_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = about_panel.cxx; path = ../../fluid/about_panel.cxx; sourceTree = SOURCE_ROOT; };
-		44277061B27BFBE1FB22B79B /* menubar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = menubar.cxx; path = ../../test/menubar.cxx; sourceTree = SOURCE_ROOT; };
-		451D01896EFDD83277515630 /* glut.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = glut.H; path = ../../FL/glut.H; sourceTree = SOURCE_ROOT; };
-		4577F046D6D5D93D2553BFBC /* jdtrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdtrans.c; path = ../../jpeg/jdtrans.c; sourceTree = SOURCE_ROOT; };
-		45B993D3FA0EED6037499D3A /* color_chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = color_chooser.cxx; path = ../../test/color_chooser.cxx; sourceTree = SOURCE_ROOT; };
-		461BBD068DF8C58F4FFB131B /* Fl_Round_Clock.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Round_Clock.H; path = ../../FL/Fl_Round_Clock.H; sourceTree = SOURCE_ROOT; };
-		46DBACE210E8AEF57FFB5693 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
-		48A8DC166D69EDC6F24AE678 /* rotated_text.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rotated_text.cxx; path = ../../test/rotated_text.cxx; sourceTree = SOURCE_ROOT; };
-		49F26943DBCFA9878A9C3F55 /* adler32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = ../../zlib/adler32.c; sourceTree = SOURCE_ROOT; };
-		4A588F0AA73E5324BEE111A7 /* Fl_Window_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_Type.cxx; path = ../../fluid/Fl_Window_Type.cxx; sourceTree = SOURCE_ROOT; };
-		4A6DFBFA4FDD6D0B8F65009E /* template_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = template_panel.h; path = ../../fluid/template_panel.h; sourceTree = SOURCE_ROOT; };
-		4B1195741A8CCE772D17856C /* Fl_Check_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Check_Button.H; path = ../../FL/Fl_Check_Button.H; sourceTree = SOURCE_ROOT; };
-		4B15B198B23709B54F5D52AD /* device.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = device.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		4B4931D88DEFF9253DD2B260 /* inffast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inffast.c; path = ../../zlib/inffast.c; sourceTree = SOURCE_ROOT; };
-		4BDB9923B5247EC384C1E74D /* pixmap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pixmap.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		4C2979BC9629FABDCC0271BB /* jcmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmainct.c; path = ../../jpeg/jcmainct.c; sourceTree = SOURCE_ROOT; };
-		4C2EEE3E17025A63A0AEEF5F /* hello.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = hello.cxx; path = ../../test/hello.cxx; sourceTree = SOURCE_ROOT; };
-		4C9AF6F2C1B78A67FFD177F9 /* gl2opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl2opengl.h; path = ../../FL/gl2opengl.h; sourceTree = SOURCE_ROOT; };
-		4CABCBB89F9DD5CF57BB9779 /* Fl_Paged_Device.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Paged_Device.H; path = ../../FL/Fl_Paged_Device.H; sourceTree = SOURCE_ROOT; };
-		4CD4094D8712818EACF5C7C5 /* Fl_Progress.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Progress.H; path = ../../FL/Fl_Progress.H; sourceTree = SOURCE_ROOT; };
-		4CD5A5D2975A2CCB77EBAD43 /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = ../../jpeg/jutils.c; sourceTree = SOURCE_ROOT; };
-		4D124BD72F4E63D99837CE0C /* fl_encoding_latin1.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_encoding_latin1.cxx; path = ../../src/fl_encoding_latin1.cxx; sourceTree = SOURCE_ROOT; };
-		4D4D056FC1F1EFEC7585CA17 /* jdpostct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = ../../jpeg/jdpostct.c; sourceTree = SOURCE_ROOT; };
-		4D55C9FE101986BC47029A16 /* Fl_Choice.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Choice.cxx; path = ../../src/Fl_Choice.cxx; sourceTree = SOURCE_ROOT; };
-		4E2468990092988E147B08B3 /* fl_arci.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_arci.cxx; path = ../../src/fl_arci.cxx; sourceTree = SOURCE_ROOT; };
-		4E2BE7807B57162E18C7E63F /* Fl_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser.cxx; path = ../../src/Fl_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		4F46F93E8F77640543107453 /* fl_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fl_utf8.h; path = ../../FL/fl_utf8.h; sourceTree = SOURCE_ROOT; };
-		4F64CD29833871B09CCB278E /* Fl_Repeat_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Repeat_Button.H; path = ../../FL/Fl_Repeat_Button.H; sourceTree = SOURCE_ROOT; };
-		50E8E04A4389A8A2DAB7C53B /* Fl_Text_Buffer.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Buffer.H; path = ../../FL/Fl_Text_Buffer.H; sourceTree = SOURCE_ROOT; };
-		5191489A6263E11B65A57B4D /* valuators.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = valuators.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		51A1DE1F52564E84C104F074 /* jquant2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = ../../jpeg/jquant2.c; sourceTree = SOURCE_ROOT; };
-		52C3B1D0A473BDC01D497917 /* Fl_Pack.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Pack.H; path = ../../FL/Fl_Pack.H; sourceTree = SOURCE_ROOT; };
-		530B066D0F3AC2972D9FEC30 /* flstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = flstring.c; path = ../../src/flstring.c; sourceTree = SOURCE_ROOT; };
-		53930BEE4CBAAF4C82825F9B /* Fl_Export.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Export.H; path = ../../FL/Fl_Export.H; sourceTree = SOURCE_ROOT; };
-		5426FC8371108CE8BCAB85B2 /* Fl_Widget.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Widget.H; path = ../../FL/Fl_Widget.H; sourceTree = SOURCE_ROOT; };
-		54C40351BD50C2FC094055E5 /* iconize.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = iconize.cxx; path = ../../test/iconize.cxx; sourceTree = SOURCE_ROOT; };
-		5538B949B47F04D03589F2CE /* jdsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdsample.c; path = ../../jpeg/jdsample.c; sourceTree = SOURCE_ROOT; };
-		5575DA9A654EB53C515F917A /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = png.c; path = ../../png/png.c; sourceTree = SOURCE_ROOT; };
-		570D0C7510FE3A3FB7A1BD5D /* Fl_Progress.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Progress.cxx; path = ../../src/Fl_Progress.cxx; sourceTree = SOURCE_ROOT; };
-		5722EFFA9B8A529E03233053 /* jdatasrc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = ../../jpeg/jdatasrc.c; sourceTree = SOURCE_ROOT; };
-		57639C1D5415FB55436556A2 /* Fl_Shared_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Shared_Image.cxx; path = ../../src/Fl_Shared_Image.cxx; sourceTree = SOURCE_ROOT; };
-		577CE0F473400471A5F96A52 /* pngwutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngwutil.c; path = ../../png/pngwutil.c; sourceTree = SOURCE_ROOT; };
-		577F8362F7016862051E2AC3 /* fl_overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_overlay.cxx; path = ../../src/fl_overlay.cxx; sourceTree = SOURCE_ROOT; };
-		58166AA7A85D9E037993FC38 /* radio.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = radio.fl; path = ../../test/radio.fl; sourceTree = SOURCE_ROOT; };
-		5876E03E2818B598FAA5C307 /* fl_rounded_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_rounded_box.cxx; path = ../../src/fl_rounded_box.cxx; sourceTree = SOURCE_ROOT; };
-		590C56F672356072A5C86BC3 /* valuators.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = valuators.fl; path = ../../test/valuators.fl; sourceTree = SOURCE_ROOT; };
-		598DD70F89D7731D61BBD8EF /* fractals.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fractals.cxx; path = ../../test/fractals.cxx; sourceTree = SOURCE_ROOT; };
-		59EAC37D26FEC2AB49D79C08 /* Fl_Radio_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Button.H; path = ../../FL/Fl_Radio_Button.H; sourceTree = SOURCE_ROOT; };
-		5A7532B3CDA46030885D1D14 /* Fl_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Button.cxx; path = ../../src/Fl_Button.cxx; sourceTree = SOURCE_ROOT; tabWidth = 8; };
-		5AE1F936F1C186E18C1B9C28 /* is_spacing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_spacing.c; path = ../../src/xutf8/is_spacing.c; sourceTree = SOURCE_ROOT; };
-		5AF5119D08DFC92EA1032671 /* Fl_Slider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Slider.cxx; path = ../../src/Fl_Slider.cxx; sourceTree = SOURCE_ROOT; };
-		5B2B6ED6A3649923BAAFFDF1 /* Fl_visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_visual.cxx; path = ../../src/Fl_visual.cxx; sourceTree = SOURCE_ROOT; };
-		5B566F3BAD7101C63D5494E3 /* Fl_get_key.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_get_key.cxx; path = ../../src/Fl_get_key.cxx; sourceTree = SOURCE_ROOT; };
-		5B8BFBDF9C48A998F0781C9E /* Fl_Hor_Value_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Value_Slider.H; path = ../../FL/Fl_Hor_Value_Slider.H; sourceTree = SOURCE_ROOT; };
-		5CD5D087391E39030838C823 /* jcomapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = ../../jpeg/jcomapi.c; sourceTree = SOURCE_ROOT; };
-		5CDA214AEABC15E3EF1BB172 /* Fl_Adjuster.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Adjuster.H; path = ../../FL/Fl_Adjuster.H; sourceTree = SOURCE_ROOT; };
-		5CE4CB9AEF9070A32A27696D /* fl_overlay_visual.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_overlay_visual.cxx; path = ../../src/fl_overlay_visual.cxx; sourceTree = SOURCE_ROOT; };
-		5D36F806A2C72F1894F0878E /* Fl_File_Icon.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Icon.cxx; path = ../../src/Fl_File_Icon.cxx; sourceTree = SOURCE_ROOT; };
-		5E0EC227A972D2E4F34A2CEB /* Fl_Tree.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tree.H; path = ../../FL/Fl_Tree.H; sourceTree = SOURCE_ROOT; };
-		5EF025FDE53B2276B6931CD5 /* clock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = clock.cxx; path = ../../test/clock.cxx; sourceTree = SOURCE_ROOT; };
-		5F328DFEE7B768CF141C8E9E /* zutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = ../../zlib/zutil.c; sourceTree = SOURCE_ROOT; };
-		5F4C18EEE3A4065D69073EDA /* tiled_image.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tiled_image.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		5FAF643D7C2CFA5A83F4B356 /* minimum.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minimum.cxx; path = ../../test/minimum.cxx; sourceTree = SOURCE_ROOT; };
-		5FB757CD5BD887D355358D2E /* Fl_Menu_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Window.cxx; path = ../../src/Fl_Menu_Window.cxx; sourceTree = SOURCE_ROOT; };
-		5FF610230DB4932346044FC7 /* Fl_Tree.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree.cxx; path = ../../src/Fl_Tree.cxx; sourceTree = SOURCE_ROOT; };
-		60E0CF9ED49BBC25F1AABD5B /* button.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = button.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		6101F771F14EE7AEB2C917A4 /* tree.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tree.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		6170B3704ED34EBCF80E43C1 /* Fl_Tree_Item.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tree_Item.cxx; path = ../../src/Fl_Tree_Item.cxx; sourceTree = SOURCE_ROOT; };
-		61D90C98A833DD410C9D5BED /* checkers.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = checkers.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		622198DBFF6479ED2A8B6283 /* glpuzzle.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = glpuzzle.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		62281FC096BA407C4F1E6824 /* win32.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = win32.H; path = ../../FL/win32.H; sourceTree = SOURCE_ROOT; };
-		62777DA2221D60EC8F03C905 /* forms_fselect.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_fselect.cxx; path = ../../src/forms_fselect.cxx; sourceTree = SOURCE_ROOT; };
-		63CB19652C470F1E58DCF01E /* Fl_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Input.cxx; path = ../../src/Fl_Input.cxx; sourceTree = SOURCE_ROOT; };
-		648E9C3B61328280244FCCA5 /* Fl_Input_Choice.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input_Choice.H; path = ../../FL/Fl_Input_Choice.H; sourceTree = SOURCE_ROOT; };
-		64C9C1F20285A471398A7818 /* Fl_Text_Display.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Text_Display.H; path = ../../FL/Fl_Text_Display.H; sourceTree = SOURCE_ROOT; };
-		65B20106A8A21FCCA56538F8 /* inftrees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inftrees.c; path = ../../zlib/inftrees.c; sourceTree = SOURCE_ROOT; };
-		65E1ABE72414529CBD1F937C /* jcsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = ../../jpeg/jcsample.c; sourceTree = SOURCE_ROOT; };
-		65E5BAE2A9732DA6B4A53098 /* deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = ../../zlib/deflate.c; sourceTree = SOURCE_ROOT; };
-		67715F3670D58DDDB47DB256 /* fl_images_core.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_images_core.cxx; path = ../../src/fl_images_core.cxx; sourceTree = SOURCE_ROOT; };
-		67989D22AB6482C5B577D395 /* checkers.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = checkers.cxx; path = ../../test/checkers.cxx; sourceTree = SOURCE_ROOT; };
-		67A896B990EDB45C5BC93F01 /* fl_vertex.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_vertex.cxx; path = ../../src/fl_vertex.cxx; sourceTree = SOURCE_ROOT; };
-		6A61D51F0EAB5E5B09020EB5 /* factory.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = factory.cxx; path = ../../fluid/factory.cxx; sourceTree = SOURCE_ROOT; };
-		6B30F6EA5CA69E305D2B82EE /* is_right2left.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = is_right2left.c; path = ../../src/xutf8/is_right2left.c; sourceTree = SOURCE_ROOT; };
-		6BCDA929CD8600DE9AC516DD /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = compress.c; path = ../../zlib/compress.c; sourceTree = SOURCE_ROOT; };
-		6BDBE905BDAC3374782D6E81 /* input.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = input.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		6C1C9A4F054C48CDD6A2DE44 /* Fl_Paged_Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Paged_Device.cxx; path = ../../src/Fl_Paged_Device.cxx; sourceTree = SOURCE_ROOT; };
-		6C64353A3129BCCFAA667D86 /* boxtype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = boxtype.cxx; path = ../../test/boxtype.cxx; sourceTree = SOURCE_ROOT; };
-		6CCA5064754A8314839CB37A /* freeglut_stroke_roman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = freeglut_stroke_roman.cxx; path = ../../src/freeglut_stroke_roman.cxx; sourceTree = SOURCE_ROOT; };
-		6D999C03407EAEE9C4D3477A /* browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = browser.cxx; path = ../../test/browser.cxx; sourceTree = SOURCE_ROOT; };
-		6DCFF326B588B1B27618F28C /* Fl_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Image.cxx; path = ../../src/Fl_Image.cxx; sourceTree = SOURCE_ROOT; };
-		6DFD0BF5428959EE73D260D8 /* threads.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = threads.cxx; path = ../../test/threads.cxx; sourceTree = SOURCE_ROOT; };
-		6E69780F02E318A2154C338D /* fl_round_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_round_box.cxx; path = ../../src/fl_round_box.cxx; sourceTree = SOURCE_ROOT; };
-		6F065A63833D5944E820C951 /* fl_draw_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw_image.cxx; path = ../../src/fl_draw_image.cxx; sourceTree = SOURCE_ROOT; };
-		6F23DFF159ADA2C05E62C263 /* jcmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmarker.c; path = ../../jpeg/jcmarker.c; sourceTree = SOURCE_ROOT; };
-		6F994D2DFFEA5301950F21B3 /* rotated_text.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = rotated_text.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		70CEC1A84E24275F0861403F /* Fl_Table.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Table.H; path = ../../FL/Fl_Table.H; sourceTree = SOURCE_ROOT; };
-		71034AFDF079B24D53146252 /* Fl_Value_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Output.H; path = ../../FL/Fl_Value_Output.H; sourceTree = SOURCE_ROOT; };
-		71A50EE5EECC69DC5DD8BE13 /* list_visuals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = list_visuals.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		729751A4A3DAAAF169C80ACC /* Fl_File_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Chooser.H; path = ../../FL/Fl_File_Chooser.H; sourceTree = SOURCE_ROOT; };
-		72C56BE76B2ECF1908249803 /* Fl_Tiled_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tiled_Image.H; path = ../../FL/Fl_Tiled_Image.H; sourceTree = SOURCE_ROOT; };
-		73374F6E214D9DC3E2264866 /* freeglut_stroke_mono_roman.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = freeglut_stroke_mono_roman.cxx; path = ../../src/freeglut_stroke_mono_roman.cxx; sourceTree = SOURCE_ROOT; };
-		754E11ECF7EB2B3E7E1E3C68 /* pngset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngset.c; path = ../../png/pngset.c; sourceTree = SOURCE_ROOT; };
-		7574410DEB61AC3D68A6C137 /* fl_show_colormap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_show_colormap.H; path = ../../FL/fl_show_colormap.H; sourceTree = SOURCE_ROOT; };
-		75DEA03FA1E1CA10E4AF212A /* Fl_Menu.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu.H; path = ../../FL/Fl_Menu.H; sourceTree = SOURCE_ROOT; };
-		76726B622EF72DCDAD1C0D23 /* Fl_Tiled_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tiled_Image.cxx; path = ../../src/Fl_Tiled_Image.cxx; sourceTree = SOURCE_ROOT; };
-		76DD2676B757CB7F19B6EF94 /* Fl_Spinner.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Spinner.H; path = ../../FL/Fl_Spinner.H; sourceTree = SOURCE_ROOT; };
-		78EE1A0803C3AAA7BFAF79B8 /* pixmap_browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pixmap_browser.cxx; path = ../../test/pixmap_browser.cxx; sourceTree = SOURCE_ROOT; };
-		790078FB2B75406B2E250E59 /* Fl_Line_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Line_Dial.H; path = ../../FL/Fl_Line_Dial.H; sourceTree = SOURCE_ROOT; };
-		790419B5A0AD64D66F9B19E1 /* Fl_Help_View.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Help_View.cxx; path = ../../src/Fl_Help_View.cxx; sourceTree = SOURCE_ROOT; };
-		79EE61E7DCB96EF56E71DD19 /* Fl_Toggle_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Light_Button.H; path = ../../FL/Fl_Toggle_Light_Button.H; sourceTree = SOURCE_ROOT; };
-		7A2CE7959780A1C6E60103E8 /* fl_gtk.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_gtk.cxx; path = ../../src/fl_gtk.cxx; sourceTree = SOURCE_ROOT; };
-		7AC3212E8EECF086DCDEEC46 /* fractals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fractals.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		7B084447C58E292798B27283 /* keyboard_ui.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = keyboard_ui.fl; path = ../../test/keyboard_ui.fl; sourceTree = SOURCE_ROOT; };
-		7C57535613D421F393DD662F /* fl_shortcut.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_shortcut.cxx; path = ../../src/fl_shortcut.cxx; sourceTree = SOURCE_ROOT; };
-		7C67E3A1368F9AC0A03A7BD6 /* fl_scroll_area.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_scroll_area.cxx; path = ../../src/fl_scroll_area.cxx; sourceTree = SOURCE_ROOT; };
-		7C8D88FDB0A0A32E59465025 /* fl_symbols.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_symbols.cxx; path = ../../src/fl_symbols.cxx; sourceTree = SOURCE_ROOT; };
-		7D546B243A6858F60A678FF1 /* uncompr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = uncompr.c; path = ../../zlib/uncompr.c; sourceTree = SOURCE_ROOT; };
-		7DF4AD3769671959EA813845 /* jcparam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = ../../jpeg/jcparam.c; sourceTree = SOURCE_ROOT; };
-		7E05602BE68211B11E493E18 /* Fl_Menu.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu.cxx; path = ../../src/Fl_Menu.cxx; sourceTree = SOURCE_ROOT; };
-		7E51DAB7D0F93ACFB736EE9A /* Fl_Tree_Prefs.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tree_Prefs.H; path = ../../FL/Fl_Tree_Prefs.H; sourceTree = SOURCE_ROOT; };
-		7F12FCC618E1EEB900AB6A11 /* fl_gleam.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_gleam.cxx; path = ../../src/fl_gleam.cxx; sourceTree = "<group>"; };
-		7F2A29041338C6B80033C0A6 /* pnglibconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pnglibconf.h; path = ../../png/pnglibconf.h; sourceTree = SOURCE_ROOT; };
-		7F2A29051338C6D40033C0A6 /* pngpriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngpriv.h; path = ../../png/pngpriv.h; sourceTree = SOURCE_ROOT; };
-		7F2A29071338C7450033C0A6 /* pngstruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = ../../png/pngstruct.h; sourceTree = SOURCE_ROOT; };
-		7F2A29081338C7520033C0A6 /* pnginfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = ../../png/pnginfo.h; sourceTree = SOURCE_ROOT; };
-		7F2A29091338C7650033C0A6 /* pngdebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngdebug.h; path = ../../png/pngdebug.h; sourceTree = SOURCE_ROOT; };
-		7F3421EB1CE8ADB7005FA821 /* help-test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = "help-test.html"; path = "../../test/help-test.html"; sourceTree = "<group>"; };
-		7F419E031D92857E0098B602 /* offscreen.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = offscreen.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		7F419E061D9285D90098B602 /* offscreen.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = offscreen.cxx; path = ../../test/offscreen.cxx; sourceTree = "<group>"; };
-		7F4762ED12D22C470073A4F9 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = System/Library/Frameworks/ApplicationServices.framework; sourceTree = SDKROOT; };
-		7F4B8ADD01CB2F8BFE43ACBA /* Fl_Menu_Bar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Bar.cxx; path = ../../src/Fl_Menu_Bar.cxx; sourceTree = SOURCE_ROOT; };
-		7F54C8A3130FAC4F00E736F3 /* gzclose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzclose.c; path = ../../zlib/gzclose.c; sourceTree = SOURCE_ROOT; };
-		7F54C8A4130FAC4F00E736F3 /* gzlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzlib.c; path = ../../zlib/gzlib.c; sourceTree = SOURCE_ROOT; };
-		7F54C8A5130FAC4F00E736F3 /* gzread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzread.c; path = ../../zlib/gzread.c; sourceTree = SOURCE_ROOT; };
-		7F54C8A6130FAC4F00E736F3 /* gzwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzwrite.c; path = ../../zlib/gzwrite.c; sourceTree = SOURCE_ROOT; };
-		7F54C8A7130FAC4F00E736F3 /* infback.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = infback.c; path = ../../zlib/infback.c; sourceTree = SOURCE_ROOT; };
-		7F66B1D612BB924C00C67B59 /* Fl_cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_cocoa.mm; path = ../../src/Fl_cocoa.mm; sourceTree = SOURCE_ROOT; };
-		7F66B1D712BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_Native_File_Chooser_MAC.mm; path = ../../src/Fl_Native_File_Chooser_MAC.mm; sourceTree = SOURCE_ROOT; };
-		7F66B1D812BB924C00C67B59 /* Fl_Quartz_Printer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_Quartz_Printer.mm; path = ../../src/Fl_Quartz_Printer.mm; sourceTree = SOURCE_ROOT; };
-		7F6F526319CF0FED0075F408 /* Fl_Window_shape.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_shape.cxx; path = ../../src/Fl_Window_shape.cxx; sourceTree = "<group>"; };
-		7F784151AF1B748D0F3DB1C0 /* forms.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms.cxx; path = ../../test/forms.cxx; sourceTree = SOURCE_ROOT; };
-		7F7CF7F51AB97CEF00E12B22 /* animated.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = animated.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		7F7CF81E1AB9836C00E12B22 /* animated.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = animated.cxx; path = ../../test/animated.cxx; sourceTree = SOURCE_ROOT; };
-		7F92031A16B1A909000FC50F /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = Localizable.strings; sourceTree = "<group>"; };
-		7F92031D16B1A909000FC50F /* French */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = French; path = Localizable.strings; sourceTree = "<group>"; };
-		7F92032016B1A909000FC50F /* German */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = German; path = Localizable.strings; sourceTree = "<group>"; };
-		7F92032316B1A90A000FC50F /* Italian */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Italian; path = Localizable.strings; sourceTree = "<group>"; };
-		7F92032616B1A90A000FC50F /* Spanish */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Spanish; path = Localizable.strings; sourceTree = "<group>"; };
-		7FA08BBF1C4EA7A0001CBE06 /* abi-version.ide */ = {isa = PBXFileReference; lastKnownFileType = text; name = "abi-version.ide"; path = "../../abi-version.ide"; sourceTree = "<group>"; };
-		7FA5C2BD192FAEBB00519823 /* Fl_Copy_Surface.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Copy_Surface.cxx; path = ../../src/Fl_Copy_Surface.cxx; sourceTree = SOURCE_ROOT; };
-		7FA5C2BF192FAECA00519823 /* Fl_Image_Surface.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Image_Surface.cxx; path = ../../src/Fl_Image_Surface.cxx; sourceTree = SOURCE_ROOT; };
-		7FA5C2C1192FAEE300519823 /* Fl_Image_Surface.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Image_Surface.H; path = ../../FL/Fl_Image_Surface.H; sourceTree = SOURCE_ROOT; };
-		7FA5C2C2192FAEF200519823 /* Fl_Copy_Surface.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Copy_Surface.H; path = ../../FL/Fl_Copy_Surface.H; sourceTree = SOURCE_ROOT; };
-		7FAC914955D699539F73B996 /* bitmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bitmap.cxx; path = ../../test/bitmap.cxx; sourceTree = SOURCE_ROOT; };
-		7FBCECC81B1D8AA500AB970D /* libfltk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfltk.a; sourceTree = BUILT_PRODUCTS_DIR; };
-		7FC91721DA7888C8A1FD762E /* input_choice.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = input_choice.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		7FED8F161AD699C700276ED9 /* blocks.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = blocks.icns; path = ../../test/blocks.app/Contents/Resources/blocks.icns; sourceTree = "<group>"; };
-		7FED8F191AD69B4200276ED9 /* checkers.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = checkers.icns; path = ../../test/checkers.app/Contents/Resources/checkers.icns; sourceTree = "<group>"; };
-		7FED8F1B1AD69B5B00276ED9 /* sudoku.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = sudoku.icns; path = ../../test/sudoku.app/Contents/Resources/sudoku.icns; sourceTree = "<group>"; };
-		7FFDD15B19BE08A800779AD1 /* Fl_PostScript.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_PostScript.cxx; path = ../../src/Fl_PostScript.cxx; sourceTree = "<group>"; };
-		7FFDE551171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Fl_Sys_Menu_Bar.mm; path = ../../src/Fl_Sys_Menu_Bar.mm; sourceTree = SOURCE_ROOT; };
-		800E34DEF9E503C5EC6C4FA5 /* Fl_XBM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_XBM_Image.cxx; path = ../../src/Fl_XBM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		806103D71A8CD0075BF8E1DA /* Fl_Group.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Group.cxx; path = ../../src/Fl_Group.cxx; sourceTree = SOURCE_ROOT; };
-		80CD4956321634F723D3C40B /* fluid.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = fluid.icns; path = icons/fluid.icns; sourceTree = "<group>"; };
-		80D32CF90973629228CAA7F0 /* Fl_Double_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Double_Window.H; path = ../../FL/Fl_Double_Window.H; sourceTree = SOURCE_ROOT; };
-		80D58C2358E8BBA86A8ADB7C /* Fl_Value_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Slider.H; path = ../../FL/Fl_Value_Slider.H; sourceTree = SOURCE_ROOT; };
-		80E4ACCB50A295390EC9C1AB /* Fl_Group_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Group_Type.cxx; path = ../../fluid/Fl_Group_Type.cxx; sourceTree = SOURCE_ROOT; };
-		813C830680D031C1B2FCF9B6 /* Fl_Pack.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Pack.cxx; path = ../../src/Fl_Pack.cxx; sourceTree = SOURCE_ROOT; };
-		819B540345E59C29EE9DF3DA /* jcinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcinit.c; path = ../../jpeg/jcinit.c; sourceTree = SOURCE_ROOT; };
-		81CBEA61461E59652A309159 /* filename_match.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_match.cxx; path = ../../src/filename_match.cxx; sourceTree = SOURCE_ROOT; };
-		8222D901BB4DAF097B81C1FE /* mandelbrot_ui.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = mandelbrot_ui.fl; path = ../../test/mandelbrot_ui.fl; sourceTree = SOURCE_ROOT; };
-		8277A82AB4C46B991D48F852 /* label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = label.cxx; path = ../../test/label.cxx; sourceTree = SOURCE_ROOT; };
-		82863AEFE086C3469C386C22 /* Fl_Device.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Device.H; path = ../../FL/Fl_Device.H; sourceTree = SOURCE_ROOT; };
-		834EF24528E256603D6F39FF /* menubar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = menubar.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		83733760D651C218178EAEB3 /* filename_setext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_setext.cxx; path = ../../src/filename_setext.cxx; sourceTree = SOURCE_ROOT; };
-		83CED42A779FA76E98D37CA8 /* x.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = x.H; path = ../../FL/x.H; sourceTree = SOURCE_ROOT; };
-		84CE79448708855561FEE498 /* Enumerations.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Enumerations.H; path = ../../FL/Enumerations.H; sourceTree = SOURCE_ROOT; };
-		86685DA60EFE7C0F07DC5C3B /* jerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jerror.c; path = ../../jpeg/jerror.c; sourceTree = SOURCE_ROOT; };
-		87259ACF8723616344D9AEB2 /* fl_ask.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_ask.H; path = ../../FL/fl_ask.H; sourceTree = SOURCE_ROOT; };
-		877ED586A536CA9D898220D3 /* Fl_GIF_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_GIF_Image.cxx; path = ../../src/Fl_GIF_Image.cxx; sourceTree = SOURCE_ROOT; };
-		87F83C8E6003FAE14C4E8249 /* Fl_PNG_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_PNG_Image.H; path = ../../FL/Fl_PNG_Image.H; sourceTree = SOURCE_ROOT; };
-		87F89271469726AE756E4D93 /* Fl_Cairo.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Cairo.H; path = ../../FL/Fl_Cairo.H; sourceTree = SOURCE_ROOT; };
-		88C72DFE480F42D0547F786B /* gl_draw.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = gl_draw.H; path = ../../FL/gl_draw.H; sourceTree = SOURCE_ROOT; };
-		88F715478C4F84C8E55B0820 /* Fl_Menu_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_Type.cxx; path = ../../fluid/Fl_Menu_Type.cxx; sourceTree = SOURCE_ROOT; };
-		8985E851BEC6BB2BC613E5AD /* Fl_Menu_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_.H; path = ../../FL/Fl_Menu_.H; sourceTree = SOURCE_ROOT; };
-		8A322CF28E7EAA76A260345A /* Fl_Multiline_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multiline_Input.H; path = ../../FL/Fl_Multiline_Input.H; sourceTree = SOURCE_ROOT; };
-		8A748CC814B1697A7E2F9D1A /* blocks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = blocks.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		8AA117275273E1E3B906DA35 /* pngget.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = ../../png/pngget.c; sourceTree = SOURCE_ROOT; };
-		8B02E11D61E46AD79DE7EFE7 /* Fl_Cairo_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Cairo_Window.H; path = ../../FL/Fl_Cairo_Window.H; sourceTree = SOURCE_ROOT; };
-		8C1CBF782BBD9CCBFC0B451B /* gl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gl.h; path = ../../FL/gl.h; sourceTree = SOURCE_ROOT; };
-		8C53A414ED45A9276B8B4C40 /* cursor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cursor.cxx; path = ../../test/cursor.cxx; sourceTree = SOURCE_ROOT; };
-		8C5CB5680264401FDA1C693C /* Fl_Tooltip.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tooltip.H; path = ../../FL/Fl_Tooltip.H; sourceTree = SOURCE_ROOT; };
-		8D4E2F8A10BA06E332B7EB03 /* demo.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = demo.cxx; path = ../../test/demo.cxx; sourceTree = SOURCE_ROOT; };
-		8DFB9E7E8DB3AEC762613348 /* Fl_Menu_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Window.H; path = ../../FL/Fl_Menu_Window.H; sourceTree = SOURCE_ROOT; };
-		8E81EE378D475F9CFDE296C9 /* Fl_Gl_Overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Gl_Overlay.cxx; path = ../../src/Fl_Gl_Overlay.cxx; sourceTree = SOURCE_ROOT; };
-		8F311718B3CD16844535EEE6 /* comments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = comments.h; path = ../../fluid/comments.h; sourceTree = SOURCE_ROOT; };
-		8F40BFA65740DDA6E9240F30 /* overlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = overlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		90D9C06A2DCECD5B99C4A90A /* jdatadst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdatadst.c; path = ../../jpeg/jdatadst.c; sourceTree = SOURCE_ROOT; };
-		91173358E60D137409651286 /* Fl_Preferences.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Preferences.H; path = ../../FL/Fl_Preferences.H; sourceTree = SOURCE_ROOT; };
-		91726A70C25E6155A2FAF315 /* undo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = undo.h; path = ../../fluid/undo.h; sourceTree = SOURCE_ROOT; };
-		91E088F22E63779E9E9FA651 /* alignment_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = alignment_panel.cxx; path = ../../fluid/alignment_panel.cxx; sourceTree = SOURCE_ROOT; };
-		922182C23B114BA60D9CF160 /* native-filechooser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "native-filechooser.cxx"; path = "../../test/native-filechooser.cxx"; sourceTree = SOURCE_ROOT; };
-		9305831B5D584A1C9652C308 /* scroll.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = scroll.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		94D15578CD49CC75FE6617E4 /* tiled_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tiled_image.cxx; path = ../../test/tiled_image.cxx; sourceTree = SOURCE_ROOT; };
-		95604163D1E6CBE33AAD66CD /* freeglut_teapot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = freeglut_teapot.cxx; path = ../../src/freeglut_teapot.cxx; sourceTree = SOURCE_ROOT; };
-		96F45BDA96C23534006C5538 /* Fl_JPEG_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_JPEG_Image.cxx; path = ../../src/Fl_JPEG_Image.cxx; sourceTree = SOURCE_ROOT; };
-		9749479CF630E3B409C932A9 /* preferences.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = preferences.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		977642DF53013F6E6F98A12C /* numericsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = numericsort.c; path = ../../src/numericsort.c; sourceTree = SOURCE_ROOT; };
-		9795165015E763BF705783DC /* pngerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngerror.c; path = ../../png/pngerror.c; sourceTree = SOURCE_ROOT; };
-		97A233FBA4B73A1CA45A1388 /* Fl_Menu_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Button.H; path = ../../FL/Fl_Menu_Button.H; sourceTree = SOURCE_ROOT; };
-		97BB0EFFDBDEA3B11ED79A73 /* input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = input.cxx; path = ../../test/input.cxx; sourceTree = SOURCE_ROOT; };
-		982C59D5682A91A5959BA02F /* arc.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arc.cxx; path = ../../test/arc.cxx; sourceTree = SOURCE_ROOT; };
-		98A16A4EC098BA7DB21E13DC /* fltk_png.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_png.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		98AAEBFD9218D1E1F24D81D8 /* navigation.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = navigation.cxx; path = ../../test/navigation.cxx; sourceTree = SOURCE_ROOT; };
-		98E423BB92A1B4F201F6B042 /* freeglut_geometry.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = freeglut_geometry.cxx; path = ../../src/freeglut_geometry.cxx; sourceTree = SOURCE_ROOT; };
-		9951B49F640C2C15321EED9C /* Fl_Wizard.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Wizard.cxx; path = ../../src/Fl_Wizard.cxx; sourceTree = SOURCE_ROOT; };
-		9961D74307F5B7D0FE016FC7 /* Fl_Roller.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Roller.H; path = ../../FL/Fl_Roller.H; sourceTree = SOURCE_ROOT; };
-		9A3D4184FF1C89B7CEE9FBD6 /* Fl_Return_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Return_Button.cxx; path = ../../src/Fl_Return_Button.cxx; sourceTree = SOURCE_ROOT; };
-		9A9DEF157A356A54D1E9B6AE /* curve.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = curve.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9B54C6B8D801E899981FC5E6 /* fl_boxtype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_boxtype.cxx; path = ../../src/fl_boxtype.cxx; sourceTree = SOURCE_ROOT; };
-		9B57B581401BD8575BFAF2F1 /* Fl_Simple_Counter.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Simple_Counter.H; path = ../../FL/Fl_Simple_Counter.H; sourceTree = SOURCE_ROOT; };
-		9BCF393F94482AE7C7421397 /* Fl_Clock.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Clock.H; path = ../../FL/Fl_Clock.H; sourceTree = SOURCE_ROOT; };
-		9C87CC8FC8B566C55594BA36 /* sudoku.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sudoku.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9CA94171ECE3444BB9D65BAE /* fl_read_image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_read_image.cxx; path = ../../src/fl_read_image.cxx; sourceTree = SOURCE_ROOT; };
-		9CBDD66D771449423070F912 /* template_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = template_panel.cxx; path = ../../fluid/template_panel.cxx; sourceTree = SOURCE_ROOT; };
-		9CDFA6BC0C4F869C864E2EE0 /* gl_overlay.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = gl_overlay.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9D49D6711A470C8334826252 /* iconize.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iconize.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9D938B561E268ECE660B88D2 /* Fl_Free.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Free.H; path = ../../FL/Fl_Free.H; sourceTree = SOURCE_ROOT; };
-		9D942824B8FC886F6FCD853D /* Fl_Single_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Single_Window.cxx; path = ../../src/Fl_Single_Window.cxx; sourceTree = SOURCE_ROOT; };
-		9DA766AE10DC532F3D0401A2 /* Fl_Select_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Select_Browser.H; path = ../../FL/Fl_Select_Browser.H; sourceTree = SOURCE_ROOT; };
-		9E22773911BDBADEA86730D4 /* Fl_Window_iconize.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_iconize.cxx; path = ../../src/Fl_Window_iconize.cxx; sourceTree = SOURCE_ROOT; };
-		9E227FFE277CB6E4EDF05454 /* arc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = arc.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		9E4DE1CE4D10CA89D0D13AC7 /* Fl_Widget_Type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fl_Widget_Type.h; path = ../../fluid/Fl_Widget_Type.h; sourceTree = SOURCE_ROOT; };
-		9E8F7BCC0292044D887D423B /* fl_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_font.cxx; path = ../../src/fl_font.cxx; sourceTree = SOURCE_ROOT; };
-		9F484B5F88CDE466AC0D0592 /* Fl_arg.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_arg.cxx; path = ../../src/Fl_arg.cxx; sourceTree = SOURCE_ROOT; };
-		A0224B94F206123F3583F2A3 /* Fl_Menu_Item.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Menu_Item.H; path = ../../FL/Fl_Menu_Item.H; sourceTree = SOURCE_ROOT; };
-		A095F27EE603A15FD695F31C /* about_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = about_panel.h; path = ../../fluid/about_panel.h; sourceTree = SOURCE_ROOT; };
-		A0B57FF2A1D358159C950F7F /* boxtype.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = boxtype.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A0C1440AC6EE3239EEC7D81B /* Fl_Text_Display.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Display.cxx; path = ../../src/Fl_Text_Display.cxx; sourceTree = SOURCE_ROOT; };
-		A0E4F14B0B1B1BCD1307E3CC /* fullscreen.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fullscreen.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A136058B2D308F81E748921C /* fast_slow.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = fast_slow.fl; path = ../../test/fast_slow.fl; sourceTree = SOURCE_ROOT; };
-		A2B930ADD957B492869191EB /* Fl_Check_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Check_Browser.H; path = ../../FL/Fl_Check_Browser.H; sourceTree = SOURCE_ROOT; };
-		A2C688326DDAF4AA29EA9120 /* Fl_Toggle_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Round_Button.H; path = ../../FL/Fl_Toggle_Round_Button.H; sourceTree = SOURCE_ROOT; };
-		A2CF2FD35911638AD607092F /* Fl_Check_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Check_Button.cxx; path = ../../src/Fl_Check_Button.cxx; sourceTree = SOURCE_ROOT; };
-		A2E97BA0812AEC32965573B8 /* Fl_Help_Dialog.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Help_Dialog.H; path = ../../FL/Fl_Help_Dialog.H; sourceTree = SOURCE_ROOT; };
-		A36535CFF8B14BA8B087A880 /* Fl_Hold_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hold_Browser.H; path = ../../FL/Fl_Hold_Browser.H; sourceTree = SOURCE_ROOT; };
-		A36EE3451F6FA70481742D83 /* browser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = browser.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A4456FF8D730E5BE234723F8 /* jfdctfst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jfdctfst.c; path = ../../jpeg/jfdctfst.c; sourceTree = SOURCE_ROOT; };
-		A46A39199806D09CE0ABEE59 /* Fl_Shared_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Shared_Image.H; path = ../../FL/Fl_Shared_Image.H; sourceTree = SOURCE_ROOT; };
-		A5166C3C9311628F6E450095 /* Fl_Input_.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input_.H; path = ../../FL/Fl_Input_.H; sourceTree = SOURCE_ROOT; };
-		A57A8421086F1F0F9906B692 /* Fl_Wizard.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Wizard.H; path = ../../FL/Fl_Wizard.H; sourceTree = SOURCE_ROOT; };
-		A59208EAD1D0282D4FCD5839 /* sudoku.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sudoku.cxx; path = ../../test/sudoku.cxx; sourceTree = SOURCE_ROOT; };
-		A5B9A5CE605BB8A57F66A2E6 /* Fl_Scrollbar.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Scrollbar.cxx; path = ../../src/Fl_Scrollbar.cxx; sourceTree = SOURCE_ROOT; };
-		A66819BE170F44B94F2E1981 /* Fl_File_Input.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Input.cxx; path = ../../src/Fl_File_Input.cxx; sourceTree = SOURCE_ROOT; };
-		A68E1C76E8C3DC37B869BE48 /* fl_set_fonts.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_set_fonts.cxx; path = ../../src/fl_set_fonts.cxx; sourceTree = SOURCE_ROOT; };
-		A694A1F3298E15E532C3F784 /* Fl_Printer.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Printer.H; path = ../../FL/Fl_Printer.H; sourceTree = SOURCE_ROOT; };
-		A715D265EAD3C5DA5628485C /* jdcoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdcoefct.c; path = ../../jpeg/jdcoefct.c; sourceTree = SOURCE_ROOT; };
-		A71FBABB9EC90A680225B485 /* Fl_Sys_Menu_Bar.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Sys_Menu_Bar.H; path = ../../FL/Fl_Sys_Menu_Bar.H; sourceTree = SOURCE_ROOT; };
-		A723C22010FFFCA978570AC5 /* navigation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = navigation.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		A7A692EB67C5CBE35D4A4B5C /* Fl_Gl_Device_Plugin.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Gl_Device_Plugin.cxx; path = ../../src/Fl_Gl_Device_Plugin.cxx; sourceTree = SOURCE_ROOT; };
-		A8B7D1DA9AAC707EBD991D57 /* fl_message.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_message.H; path = ../../FL/fl_message.H; sourceTree = SOURCE_ROOT; };
-		A8F89055CABBCFECCC4CC940 /* Fl_Plugin.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Plugin.H; path = ../../FL/Fl_Plugin.H; sourceTree = SOURCE_ROOT; };
-		AA630D4D7FC09AEEA0D0424F /* colbrowser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = colbrowser.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		AAA7458AD5CC6DCD9BA25E7F /* overlay.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = overlay.cxx; path = ../../test/overlay.cxx; sourceTree = SOURCE_ROOT; };
-		AAD25B747F4122A2C5224708 /* Fl_Browser_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser_.cxx; path = ../../src/Fl_Browser_.cxx; sourceTree = SOURCE_ROOT; };
-		AAE8D31DC4F024028C66743C /* Fl_own_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_own_colormap.cxx; path = ../../src/Fl_own_colormap.cxx; sourceTree = SOURCE_ROOT; };
-		AB154476769DB7F2247ADEF9 /* utf8.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = utf8.cxx; path = ../../test/utf8.cxx; sourceTree = SOURCE_ROOT; };
-		AB3E00F5BBC9AB1C51B0EEDC /* jdapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = ../../jpeg/jdapistd.c; sourceTree = SOURCE_ROOT; };
-		AB3FA145ED96A9DA69465E9F /* table.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = table.cxx; path = ../../test/table.cxx; sourceTree = SOURCE_ROOT; };
-		AB46BE0BB9C13E4684CB6D76 /* jdhuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = ../../jpeg/jdhuff.c; sourceTree = SOURCE_ROOT; };
-		AC0F7C69B25854F609BD1A0C /* cmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cmap.cxx; path = ../../src/cmap.cxx; sourceTree = SOURCE_ROOT; };
-		AC13C8877FA6231BEBF524FD /* mac.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = mac.H; path = ../../FL/mac.H; sourceTree = SOURCE_ROOT; };
-		AC14DA2BFF3CBEE249FC2E89 /* line_style.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = line_style.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		AC5B933E5C802F33BC495FF8 /* Fl_Multiline_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multiline_Output.H; path = ../../FL/Fl_Multiline_Output.H; sourceTree = SOURCE_ROOT; };
-		AD6E04F6F1B72EB797867D80 /* tile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tile.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		ADA5BC653C9EFBEAA8C0AD29 /* CubeViewUI.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = CubeViewUI.fl; path = ../../test/CubeViewUI.fl; sourceTree = SOURCE_ROOT; };
-		ADC532751F27C32E46DEFF6F /* pngtrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = ../../png/pngtrans.c; sourceTree = SOURCE_ROOT; };
-		AE1717E43F50EBA343960B1E /* Fl_Hor_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Slider.H; path = ../../FL/Fl_Hor_Slider.H; sourceTree = SOURCE_ROOT; };
-		AF65626F49A71525D24ED1B0 /* filename.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = filename.H; path = ../../FL/filename.H; sourceTree = SOURCE_ROOT; };
-		AFB1FA7E614E064C55880F21 /* gl_draw.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gl_draw.cxx; path = ../../src/gl_draw.cxx; sourceTree = SOURCE_ROOT; };
-		B140C9F8CF34FDAC94E15FE1 /* filename_ext.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_ext.cxx; path = ../../src/filename_ext.cxx; sourceTree = SOURCE_ROOT; };
-		B145D961F04ADDCF78EFDFD1 /* Fl_FormsPixmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_FormsPixmap.H; path = ../../FL/Fl_FormsPixmap.H; sourceTree = SOURCE_ROOT; };
-		B1D1B6018D7240C1300914CD /* radio.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = radio.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B20D11CF3F871C99011F632E /* Fl_BMP_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_BMP_Image.H; path = ../../FL/Fl_BMP_Image.H; sourceTree = SOURCE_ROOT; };
-		B25F1323447C32308AA017DE /* fl_draw_pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw_pixmap.cxx; path = ../../src/fl_draw_pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		B2F3E15BD31ADBA58ECD50C4 /* Fluid.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fluid.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B3022A0763D379E8707EC5D2 /* widget_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = widget_panel.h; path = ../../fluid/widget_panel.h; sourceTree = SOURCE_ROOT; };
-		B356E82C48240901A8F7C688 /* bitmap.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = bitmap.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B4CAFA162560925C4591997A /* Fl_Printer.cxx */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = Fl_Printer.cxx; path = ../../src/Fl_Printer.cxx; sourceTree = SOURCE_ROOT; };
-		B5AF439E5879211072C80F19 /* shape.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = shape.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B60604913A508E327AA6C475 /* mandelbrot.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mandelbrot.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B6A59F303E6D6C2EE4481D78 /* Fl_Light_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Light_Button.H; path = ../../FL/Fl_Light_Button.H; sourceTree = SOURCE_ROOT; };
-		B707DB501C8702446FA24146 /* Fl_Multi_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multi_Browser.H; path = ../../FL/Fl_Multi_Browser.H; sourceTree = SOURCE_ROOT; };
-		B719FC0289E54CA915BC0B94 /* fl_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fl_types.h; path = ../../FL/fl_types.h; sourceTree = SOURCE_ROOT; };
-		B77901D4A0022EBCA148E65F /* fonts.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fonts.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B7DE70E246F6A05A42991CC1 /* pngwio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = ../../png/pngwio.c; sourceTree = SOURCE_ROOT; };
-		B7E85200DC5E9EBB605EE1CB /* Fl_Toggle_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Toggle_Button.H; path = ../../FL/Fl_Toggle_Button.H; sourceTree = SOURCE_ROOT; };
-		B8166E088FC996C9A89D2D37 /* Fl_Tabs.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tabs.H; path = ../../FL/Fl_Tabs.H; sourceTree = SOURCE_ROOT; };
-		B8455C1BD96FF6FB3C197C34 /* Fl_Pixmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Pixmap.H; path = ../../FL/Fl_Pixmap.H; sourceTree = SOURCE_ROOT; };
-		B91617AF27FEB2D15FA4DE42 /* hello.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = hello.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		B95D0F0F7652C2937824E87D /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crc32.c; path = ../../zlib/crc32.c; sourceTree = SOURCE_ROOT; };
-		BA7B1E9C7AA7316E98D369C2 /* Fl_Light_Button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Light_Button.cxx; path = ../../src/Fl_Light_Button.cxx; sourceTree = SOURCE_ROOT; };
-		BA939493F873CF0518DB0A1B /* Fl_GIF_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_GIF_Image.H; path = ../../FL/Fl_GIF_Image.H; sourceTree = SOURCE_ROOT; };
-		BAF6DCFBAFBE016247558B82 /* fl_rect.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_rect.cxx; path = ../../src/fl_rect.cxx; sourceTree = SOURCE_ROOT; };
-		BB37899B104B362F32F0F417 /* jdmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmarker.c; path = ../../jpeg/jdmarker.c; sourceTree = SOURCE_ROOT; };
-		BBD2663C0F428CC57126F4E2 /* pngrutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = ../../png/pngrutil.c; sourceTree = SOURCE_ROOT; };
-		BD209D4716895D1365B6BA73 /* alignment_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = alignment_panel.h; path = ../../fluid/alignment_panel.h; sourceTree = SOURCE_ROOT; };
-		BD535A20C799334E639DDD81 /* pngmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngmem.c; path = ../../png/pngmem.c; sourceTree = SOURCE_ROOT; };
-		BD87D324A97F12C5C38A1432 /* screen_xywh.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = screen_xywh.cxx; path = ../../src/screen_xywh.cxx; sourceTree = SOURCE_ROOT; };
-		BDEA9C0CFFA25A943140F7FC /* Fl_Fill_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Fill_Slider.H; path = ../../FL/Fl_Fill_Slider.H; sourceTree = SOURCE_ROOT; };
-		BF1FE1C69D048AA23CF27B1E /* Fl_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window.cxx; path = ../../src/Fl_Window.cxx; sourceTree = SOURCE_ROOT; };
-		BF27A6A9F541DE61B19AB234 /* Fl_Widget_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Widget_Type.cxx; path = ../../fluid/Fl_Widget_Type.cxx; sourceTree = SOURCE_ROOT; };
-		BF30A6F91EA43AB094476FFC /* scandir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = scandir.c; path = ../../src/scandir.c; sourceTree = SOURCE_ROOT; };
-		BF88B604F8342EF96DFF5AEA /* Fl_Group.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Group.H; path = ../../FL/Fl_Group.H; sourceTree = SOURCE_ROOT; };
-		BFEF05C334B87B518BFFEC1F /* threads.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = threads.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		C05E4BE052F69E6F1FD92730 /* utf8.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = utf8.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		C14982C1579C0303D84E569E /* subwindow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = subwindow.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		C1848E31F46192797A1EEC5E /* Fluid_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fluid_Image.cxx; path = ../../fluid/Fluid_Image.cxx; sourceTree = SOURCE_ROOT; };
-		C359E5D5187606DD69C7938B /* Fl.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl.H; path = ../../FL/Fl.H; sourceTree = SOURCE_ROOT; };
-		C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_jpeg.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		C3F048573FAEABD2D27401D4 /* Fl_Box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Box.cxx; path = ../../src/Fl_Box.cxx; sourceTree = SOURCE_ROOT; };
-		C4CF7DDC2EC8792157A3F43B /* pngread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = ../../png/pngread.c; sourceTree = SOURCE_ROOT; };
-		C64D06EA8317E22EE4B2376D /* inflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inflate.c; path = ../../zlib/inflate.c; sourceTree = SOURCE_ROOT; };
-		C7C5A11DD7448F61DFC69398 /* glpuzzle.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glpuzzle.cxx; path = ../../test/glpuzzle.cxx; sourceTree = SOURCE_ROOT; };
-		C84F99F5AC8C6517F45055B0 /* jdmerge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmerge.c; path = ../../jpeg/jdmerge.c; sourceTree = SOURCE_ROOT; };
-		C8AE10A8DDF53B8B27E3215A /* Fl_Choice.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Choice.H; path = ../../FL/Fl_Choice.H; sourceTree = SOURCE_ROOT; };
-		C9165EAF1291A304003FF4F0 /* unittests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = unittests.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		C9165ED31291A376003FF4F0 /* unittests.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unittests.cxx; path = ../../test/unittests.cxx; sourceTree = SOURCE_ROOT; };
-		C9628FFD1274D0B3007D3CFE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
-		C96290E51274D100007D3CFE /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
-		C984AFA712D02A1800D66DAD /* demo.menu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = demo.menu; path = ../../test/demo.menu; sourceTree = SOURCE_ROOT; };
-		C9EDD143127338F600ADB21C /* README.OSX.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.OSX.txt; path = ../../README.OSX.txt; sourceTree = SOURCE_ROOT; };
-		C9EDD4DE1274BB6600ADB21C /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = png.h; path = ../../png/png.h; sourceTree = SOURCE_ROOT; };
-		C9EDD4DF1274BB6600ADB21C /* pngconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = ../../png/pngconf.h; sourceTree = SOURCE_ROOT; };
-		C9EDD4E31274BBB600ADB21C /* jconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jconfig.h; path = ../../jpeg/jconfig.h; sourceTree = SOURCE_ROOT; };
-		C9EDD4E41274BBB600ADB21C /* jerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jerror.h; path = ../../jpeg/jerror.h; sourceTree = SOURCE_ROOT; };
-		C9EDD4E51274BBB600ADB21C /* jmorecfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jmorecfg.h; path = ../../jpeg/jmorecfg.h; sourceTree = SOURCE_ROOT; };
-		C9EDD4E61274BBB600ADB21C /* jpeglib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeglib.h; path = ../../jpeg/jpeglib.h; sourceTree = SOURCE_ROOT; };
-		C9EDD5B11274C4FA00ADB21C /* Fl_PostScript.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_PostScript.H; path = ../../FL/Fl_PostScript.H; sourceTree = SOURCE_ROOT; };
-		C9F1464F0E6A4DCD77AF72B8 /* Fl_Function_Type.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Function_Type.cxx; path = ../../fluid/Fl_Function_Type.cxx; sourceTree = SOURCE_ROOT; };
-		C9F9C0DD12CFCDAC0067ADCC /* rgb.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rgb.txt; path = ../../test/rgb.txt; sourceTree = SOURCE_ROOT; };
-		CAEC632CEFC2CA7592EF9D74 /* image.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = image.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		CB23A4CE90D5A89FA2640A78 /* label.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = label.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		CC0C80DA4DD31B6B2DB91096 /* CodeEditor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CodeEditor.cxx; path = ../../fluid/CodeEditor.cxx; sourceTree = SOURCE_ROOT; };
-		CC2482EC04B752BF38D4DBE2 /* Fl_Window_hotspot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_hotspot.cxx; path = ../../src/Fl_Window_hotspot.cxx; sourceTree = SOURCE_ROOT; };
-		CCDF80CC7D27689DDC83FBA1 /* Fl_Tree_Item_Array.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tree_Item_Array.H; path = ../../FL/Fl_Tree_Item_Array.H; sourceTree = SOURCE_ROOT; };
-		CD0C572F3E0A8040E9C52E0F /* filename_list.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_list.cxx; path = ../../src/filename_list.cxx; sourceTree = SOURCE_ROOT; };
-		CE1157541DFCB8DC69A00345 /* Fl_PNG_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_PNG_Image.cxx; path = ../../src/Fl_PNG_Image.cxx; sourceTree = SOURCE_ROOT; };
-		CE97D58B5B0F1A2A7DB2A3FF /* Fl_Counter.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Counter.H; path = ../../FL/Fl_Counter.H; sourceTree = SOURCE_ROOT; };
-		CEC9BC26680806AD2B47C07F /* Fl_Fill_Dial.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Fill_Dial.H; path = ../../FL/Fl_Fill_Dial.H; sourceTree = SOURCE_ROOT; };
-		CF8C02ED9EB60F55A5713F10 /* jcdctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcdctmgr.c; path = ../../jpeg/jcdctmgr.c; sourceTree = SOURCE_ROOT; };
-		CFE13249EA12A63C478888A8 /* Fl_Return_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Return_Button.H; path = ../../FL/Fl_Return_Button.H; sourceTree = SOURCE_ROOT; };
-		D004B2D87C53E063F848C539 /* Fl_lock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_lock.cxx; path = ../../src/Fl_lock.cxx; sourceTree = SOURCE_ROOT; };
-		D02CF2893ECCE831CD5D3176 /* Fl_Multi_Label.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Multi_Label.cxx; path = ../../src/Fl_Multi_Label.cxx; sourceTree = SOURCE_ROOT; };
-		D06E371A971A3BC1B399AD78 /* button.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = button.cxx; path = ../../test/button.cxx; sourceTree = SOURCE_ROOT; };
-		D0E376E93B4F22BE701D29E0 /* Fl_Roller.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Roller.cxx; path = ../../src/Fl_Roller.cxx; sourceTree = SOURCE_ROOT; };
-		D10B1EA053B5C8F02A636D93 /* tree.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tree.fl; path = ../../test/tree.fl; sourceTree = SOURCE_ROOT; };
-		D1C792936D427CC48581BFAE /* Fl_Overlay_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Overlay_Window.cxx; path = ../../src/Fl_Overlay_Window.cxx; sourceTree = SOURCE_ROOT; };
-		D2DE1079C826533A91053A9C /* Fl_XBM_Image.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_XBM_Image.H; path = ../../FL/Fl_XBM_Image.H; sourceTree = SOURCE_ROOT; };
-		D33C668435685F7CCB359EE2 /* pngrio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pngrio.c; path = ../../png/pngrio.c; sourceTree = SOURCE_ROOT; };
-		D3761C93D5C7A48D4B80225A /* doublebuffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = doublebuffer.cxx; path = ../../test/doublebuffer.cxx; sourceTree = SOURCE_ROOT; };
-		D390A37D428892B9A8AD63AD /* Fl_Text_Buffer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Buffer.cxx; path = ../../src/Fl_Text_Buffer.cxx; sourceTree = SOURCE_ROOT; };
-		D3E25408466639AACEF4D2A6 /* jmemnobs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jmemnobs.c; path = ../../jpeg/jmemnobs.c; sourceTree = SOURCE_ROOT; };
-		D3FB35B309F2E1E59D1618C8 /* jdapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = ../../jpeg/jdapimin.c; sourceTree = SOURCE_ROOT; };
-		D4E11692C02E48A71A18527C /* function_panel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = function_panel.h; path = ../../fluid/function_panel.h; sourceTree = SOURCE_ROOT; };
-		D4FA9A41956E4654256AEB09 /* inactive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = inactive.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		D50A8FFC111398E34136B192 /* Fl_Menu_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_.cxx; path = ../../src/Fl_Menu_.cxx; sourceTree = SOURCE_ROOT; };
-		D513CAE8AAED897D6B3B72F7 /* Fl_Multi_Label.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Multi_Label.H; path = ../../FL/Fl_Multi_Label.H; sourceTree = SOURCE_ROOT; };
-		D531F77A15AACC9E297B4490 /* Fl_Input_.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Input_.cxx; path = ../../src/Fl_Input_.cxx; sourceTree = SOURCE_ROOT; };
-		D585CB55BDA143D343033352 /* Fl_Output.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Output.H; path = ../../FL/Fl_Output.H; sourceTree = SOURCE_ROOT; };
-		D5CDFA360799E961187294DC /* jfdctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jfdctflt.c; path = ../../jpeg/jfdctflt.c; sourceTree = SOURCE_ROOT; };
-		D5CE28437ABB8513BE08AC77 /* names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = names.h; path = ../../FL/names.h; sourceTree = SOURCE_ROOT; };
-		D5D41747D7B904747C2DFBB2 /* scroll.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = scroll.cxx; path = ../../test/scroll.cxx; sourceTree = SOURCE_ROOT; };
-		D5F75B6C9483B2BB47965789 /* Fl_Tabs.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tabs.cxx; path = ../../src/Fl_Tabs.cxx; sourceTree = SOURCE_ROOT; };
-		D60CC89D1A70BE6AA3929604 /* filename_absolute.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_absolute.cxx; path = ../../src/filename_absolute.cxx; sourceTree = SOURCE_ROOT; };
-		D61E50ED41D81EACABE589BD /* pack.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pack.cxx; path = ../../test/pack.cxx; sourceTree = SOURCE_ROOT; };
-		D638C69E37B67C905C806560 /* Fluid_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fluid_Image.h; path = ../../fluid/Fluid_Image.h; sourceTree = SOURCE_ROOT; };
-		D6DF746AE1F6A3B0D633D9D4 /* subwindow.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = subwindow.cxx; path = ../../test/subwindow.cxx; sourceTree = SOURCE_ROOT; };
-		D72D2F219FB1BBA586A03EAC /* help.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = help.cxx; path = ../../test/help.cxx; sourceTree = SOURCE_ROOT; };
-		D754515384F42D9E502F4A98 /* undo.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = undo.cxx; path = ../../fluid/undo.cxx; sourceTree = SOURCE_ROOT; };
-		D77F126A951A15185214FF2E /* jcmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmaster.c; path = ../../jpeg/jcmaster.c; sourceTree = SOURCE_ROOT; };
-		D792770555866A025D314D2B /* clock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = clock.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		D79D3910F834D4B78FED92F3 /* Fl_Pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Pixmap.cxx; path = ../../src/Fl_Pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		D7E1955B57E8EF19FD90CF61 /* Fl_Menu_global.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Menu_global.cxx; path = ../../src/Fl_Menu_global.cxx; sourceTree = SOURCE_ROOT; };
-		D80607C7E1AAA63C8B8F1978 /* Fl_Value_Slider.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Slider.cxx; path = ../../src/Fl_Value_Slider.cxx; sourceTree = SOURCE_ROOT; };
-		D816F0ECD89EEA82EC711076 /* trees.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = trees.c; path = ../../zlib/trees.c; sourceTree = SOURCE_ROOT; };
-		D82A25EBC21394EDE9AC33C4 /* minimum.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = minimum.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		D8332361B912AFCE6DDF4B11 /* fl_ask.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_ask.cxx; path = ../../src/fl_ask.cxx; sourceTree = SOURCE_ROOT; };
-		D90A34CD50A6825298459CCE /* Fl_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Browser.H; path = ../../FL/Fl_Browser.H; sourceTree = SOURCE_ROOT; };
-		D9A7DCBAFF41CBC3DCB67C6F /* Fl_Device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Device.cxx; path = ../../src/Fl_Device.cxx; sourceTree = SOURCE_ROOT; };
-		D9DB580DCA05DE487FACA272 /* jchuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jchuff.c; path = ../../jpeg/jchuff.c; sourceTree = SOURCE_ROOT; };
-		D9FC21A432D9F4C118B2B1D4 /* Fl_Text_Editor.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Text_Editor.cxx; path = ../../src/Fl_Text_Editor.cxx; sourceTree = SOURCE_ROOT; };
-		DA6D2097C089DE9936A0B112 /* line_style.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = line_style.cxx; path = ../../test/line_style.cxx; sourceTree = SOURCE_ROOT; };
-		DA8A450882FEFFAC70EE12ED /* ask.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ask.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		DAC97F0DCE974BD65C620792 /* help.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = help.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		DC4C39F3567A5571CABF1038 /* Fl_File_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_File_Browser.cxx; path = ../../src/Fl_File_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		DC655A6341A86C1A28FF878B /* buttons.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = buttons.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		DCEE2710A7119519AEF640AD /* Fl_Timer.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Timer.H; path = ../../FL/Fl_Timer.H; sourceTree = SOURCE_ROOT; };
-		DD77F09FACBBCDC3C5276B93 /* glut_compatability.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glut_compatability.cxx; path = ../../src/glut_compatability.cxx; sourceTree = SOURCE_ROOT; };
-		DD96B70D85E60B641F061D51 /* jquant1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jquant1.c; path = ../../jpeg/jquant1.c; sourceTree = SOURCE_ROOT; };
-		DE2F47C61B9083A6E7811620 /* Fl_File_Browser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_File_Browser.H; path = ../../FL/Fl_File_Browser.H; sourceTree = SOURCE_ROOT; };
-		DECAFE2642928028BDF791B7 /* Shortcut_Button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Shortcut_Button.h; path = ../../fluid/Shortcut_Button.h; sourceTree = SOURCE_ROOT; };
-		DEF20F6B91F7FB0EBCBD2411 /* fl_utf8.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_utf8.cxx; path = ../../src/fl_utf8.cxx; sourceTree = SOURCE_ROOT; };
-		DF2662F7275F8873F9BA6C64 /* device.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = device.cxx; path = ../../test/device.cxx; sourceTree = SOURCE_ROOT; };
-		E0132688B22159A85307F264 /* forms.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = forms.H; path = ../../FL/forms.H; sourceTree = SOURCE_ROOT; };
-		E159325B70E8DAA4D9DE0C1B /* glu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glu.h; path = ../../FL/glu.h; sourceTree = SOURCE_ROOT; };
-		E1BF46F43DB886EB2301F83A /* fast_slow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fast_slow.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		E21339D33557BB5501B08AB1 /* Fl_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Button.H; path = ../../FL/Fl_Button.H; sourceTree = SOURCE_ROOT; };
-		E4337D2D7CEEDCAD78B068E5 /* jctrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jctrans.c; path = ../../jpeg/jctrans.c; sourceTree = SOURCE_ROOT; };
-		E448719A354B3D80FD2E1992 /* dirent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dirent.h; path = ../../FL/dirent.h; sourceTree = SOURCE_ROOT; };
-		E46A3C4F955A94AE095FF726 /* Fl_Browser_load.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Browser_load.cxx; path = ../../src/Fl_Browser_load.cxx; sourceTree = SOURCE_ROOT; };
-		E49427F44D81B0A6192BC7CB /* filename_expand.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = filename_expand.cxx; path = ../../src/filename_expand.cxx; sourceTree = SOURCE_ROOT; };
-		E4A2A361D4B13B70464C6A26 /* fl_plastic.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_plastic.cxx; path = ../../src/fl_plastic.cxx; sourceTree = SOURCE_ROOT; };
-		E618B793B357747DC837667E /* jmemmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jmemmgr.c; path = ../../jpeg/jmemmgr.c; sourceTree = SOURCE_ROOT; };
-		E73F55075EA0F5C4BC6C0D03 /* symbols.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = symbols.cxx; path = ../../test/symbols.cxx; sourceTree = SOURCE_ROOT; };
-		E7C720E51DAC292F13358811 /* Fl_Gl_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Gl_Window.H; path = ../../FL/Fl_Gl_Window.H; sourceTree = SOURCE_ROOT; };
-		E82932DF2A0C624C6EDC9207 /* Fl_Tile.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Tile.cxx; path = ../../src/Fl_Tile.cxx; sourceTree = SOURCE_ROOT; };
-		E82DD2B5676CF315E945AF23 /* Fl_FormsBitmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_FormsBitmap.H; path = ../../FL/Fl_FormsBitmap.H; sourceTree = SOURCE_ROOT; };
-		E840F8E478F4C8C6038E235B /* resize.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = resize.fl; path = ../../test/resize.fl; sourceTree = SOURCE_ROOT; };
-		E887B4AE75EC9D885D592636 /* fluid.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fluid.cxx; path = ../../fluid/fluid.cxx; sourceTree = SOURCE_ROOT; };
-		E8D790E9361D2B311B6839B1 /* pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pixmap.cxx; path = ../../test/pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		E917C15E28EE293416A38C5E /* fltk_images.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_images.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		E93CF8BB106A2249F0FC58B8 /* Fl_abort.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_abort.cxx; path = ../../src/Fl_abort.cxx; sourceTree = SOURCE_ROOT; };
-		E954F5F2730C01DC9FD2866D /* forms_pixmap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_pixmap.cxx; path = ../../src/forms_pixmap.cxx; sourceTree = SOURCE_ROOT; };
-		E9893274B0B6C5F24730235F /* Fl_Counter.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Counter.cxx; path = ../../src/Fl_Counter.cxx; sourceTree = SOURCE_ROOT; };
-		EA8E6EC230301E597B9D9AED /* fltk_gl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_gl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		EB15CE98189A4C0A7A8A480F /* fl_show_colormap.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_show_colormap.cxx; path = ../../src/fl_show_colormap.cxx; sourceTree = SOURCE_ROOT; };
-		EB3B78BA6DFC3CD491D13E83 /* jfdctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jfdctint.c; path = ../../jpeg/jfdctint.c; sourceTree = SOURCE_ROOT; };
-		EB5B18A1B9B1E41F2AB56A97 /* Fl_get_system_colors.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_get_system_colors.cxx; path = ../../src/Fl_get_system_colors.cxx; sourceTree = SOURCE_ROOT; };
-		EB9D2470FCD53D54DDB5CA10 /* jdinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdinput.c; path = ../../jpeg/jdinput.c; sourceTree = SOURCE_ROOT; };
-		EBC0D2C965EDD6503B0CF519 /* vsnprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vsnprintf.c; path = ../../src/vsnprintf.c; sourceTree = SOURCE_ROOT; };
-		EC2BAEE540612218DC9EEC75 /* Fl_Scroll.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Scroll.H; path = ../../FL/Fl_Scroll.H; sourceTree = SOURCE_ROOT; };
-		EC57889382FB898FD3EF2580 /* Fl_Gl_Window.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Gl_Window.cxx; path = ../../src/Fl_Gl_Window.cxx; sourceTree = SOURCE_ROOT; };
-		EC5862E1FC79542DC55D8462 /* colbrowser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = colbrowser.cxx; path = ../../test/colbrowser.cxx; sourceTree = SOURCE_ROOT; };
-		ECFF712363202EC351A51E53 /* Fl_PNM_Image.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_PNM_Image.cxx; path = ../../src/Fl_PNM_Image.cxx; sourceTree = SOURCE_ROOT; };
-		EDE6CE6B09D31AC0AAC9FF56 /* fullscreen.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fullscreen.cxx; path = ../../test/fullscreen.cxx; sourceTree = SOURCE_ROOT; };
-		EE2FB1F7B99BE408E1B4DFB7 /* Fl_Object.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Object.H; path = ../../FL/Fl_Object.H; sourceTree = SOURCE_ROOT; };
-		EE6507EFCDDA13ACF9373E3E /* Fl_Hor_Fill_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Hor_Fill_Slider.H; path = ../../FL/Fl_Hor_Fill_Slider.H; sourceTree = SOURCE_ROOT; };
-		EF6D2F48B12359DE60E499C2 /* fl_labeltype.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_labeltype.cxx; path = ../../src/fl_labeltype.cxx; sourceTree = SOURCE_ROOT; };
-		EF7E3948AA6D39FF92C88E06 /* forms_timer.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = forms_timer.cxx; path = ../../src/forms_timer.cxx; sourceTree = SOURCE_ROOT; };
-		EFAE92A1C7CA90BC56E5A70A /* fl_show_input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = fl_show_input.H; path = ../../FL/fl_show_input.H; sourceTree = SOURCE_ROOT; };
-		EFEEE679374D7E4191873447 /* Fl_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Input.H; path = ../../FL/Fl_Input.H; sourceTree = SOURCE_ROOT; };
-		F0F281028A82F2E8C2070B26 /* cursor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = cursor.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		F123133D8A3AD430ED07DF17 /* jdcolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdcolor.c; path = ../../jpeg/jdcolor.c; sourceTree = SOURCE_ROOT; };
-		F1C4032FB66042A96955A62E /* Fl_Value_Output.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Value_Output.cxx; path = ../../src/Fl_Value_Output.cxx; sourceTree = SOURCE_ROOT; };
-		F2E5612A81A6E8D53ED91CAE /* Fl_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Slider.H; path = ../../FL/Fl_Slider.H; sourceTree = SOURCE_ROOT; };
-		F319551D961725F0949D0235 /* ask.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ask.cxx; path = ../../test/ask.cxx; sourceTree = SOURCE_ROOT; };
-		F397A185D11C3DED903CB99F /* Fl_Chart.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Chart.cxx; path = ../../src/Fl_Chart.cxx; sourceTree = SOURCE_ROOT; };
-		F42EEFA08A75F71B33094D50 /* Fl_Window_fullscreen.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Window_fullscreen.cxx; path = ../../src/Fl_Window_fullscreen.cxx; sourceTree = SOURCE_ROOT; };
-		F486DDB2C35BC54259F51B12 /* pack.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pack.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		F4EFF27D730BED51EF0EAA8D /* Fl.cxx */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = Fl.cxx; path = ../../src/Fl.cxx; sourceTree = SOURCE_ROOT; };
-		F579CD495EB4DC75B2FD8E52 /* mandelbrot.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mandelbrot.cxx; path = ../../test/mandelbrot.cxx; sourceTree = SOURCE_ROOT; };
-		F5B04FDCF453C6444285D186 /* Fl_Check_Browser.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Check_Browser.cxx; path = ../../src/Fl_Check_Browser.cxx; sourceTree = SOURCE_ROOT; };
-		F5CAE7DC565B8398F02ED7BA /* Fl_Clock.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Fl_Clock.cxx; path = ../../src/Fl_Clock.cxx; sourceTree = SOURCE_ROOT; };
-		F6A596316AE6F65117FF7196 /* fl_shadow_box.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_shadow_box.cxx; path = ../../src/fl_shadow_box.cxx; sourceTree = SOURCE_ROOT; };
-		F7F5C1D22A1B4CB89BAAD201 /* file_chooser.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = file_chooser.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk_zlib.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		F8990CDEFF54C483BD6BF716 /* Fl_Nice_Slider.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Nice_Slider.H; path = ../../FL/Fl_Nice_Slider.H; sourceTree = SOURCE_ROOT; };
-		F8BAA8B283D4CF4D904B6486 /* Fl_Valuator.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Valuator.H; path = ../../FL/Fl_Valuator.H; sourceTree = SOURCE_ROOT; };
-		F91DEF40DC3592BE52CAB001 /* Fl_Native_File_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Native_File_Chooser.H; path = ../../FL/Fl_Native_File_Chooser.H; sourceTree = SOURCE_ROOT; };
-		F98FE04C081FB5B1161C546C /* Fl_Window.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Window.H; path = ../../FL/Fl_Window.H; sourceTree = SOURCE_ROOT; };
-		FA2F70BA8FF4E7F4B7B36971 /* fl_file_dir.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_file_dir.cxx; path = ../../src/fl_file_dir.cxx; sourceTree = SOURCE_ROOT; };
-		FAA6BA6E4DC1AF28F5FC8466 /* Fl_Tile.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Tile.H; path = ../../FL/Fl_Tile.H; sourceTree = SOURCE_ROOT; };
-		FAD24127A06F3F9F0EEB843A /* fl_open_uri.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_open_uri.cxx; path = ../../src/fl_open_uri.cxx; sourceTree = SOURCE_ROOT; };
-		FB2A2DF5FA72AD6362BEC9E1 /* forms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = forms.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		FB7A9EFB3C7CDAE324E9544F /* case.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = case.c; path = ../../src/xutf8/case.c; sourceTree = SOURCE_ROOT; };
-		FBB2C3FCFF8322A237DDBE23 /* fl_set_font.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_set_font.cxx; path = ../../src/fl_set_font.cxx; sourceTree = SOURCE_ROOT; };
-		FC940D10359580615C166335 /* shape.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = shape.cxx; path = ../../test/shape.cxx; sourceTree = SOURCE_ROOT; };
-		FD1BB104911A6726B02EEE37 /* Fl_Radio_Round_Button.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Radio_Round_Button.H; path = ../../FL/Fl_Radio_Round_Button.H; sourceTree = SOURCE_ROOT; };
-		FE29497A25C52BC2F7D5A9D4 /* inactive.fl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = inactive.fl; path = ../../test/inactive.fl; sourceTree = SOURCE_ROOT; };
-		FE466F26BF6C316E5A1770E6 /* jccolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = ../../jpeg/jccolor.c; sourceTree = SOURCE_ROOT; };
-		FE90AA3BB40510FA45E0C27B /* Fl_Bitmap.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Bitmap.H; path = ../../FL/Fl_Bitmap.H; sourceTree = SOURCE_ROOT; };
-		FEB0F8FE6383384180570D94 /* fltk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = fltk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		FEE2F6E62FECD745952CB51D /* function_panel.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = function_panel.cxx; path = ../../fluid/function_panel.cxx; sourceTree = SOURCE_ROOT; };
-		FF88A1DACCAFA2D143A7F234 /* Fl_Value_Input.H */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Fl_Value_Input.H; path = ../../FL/Fl_Value_Input.H; sourceTree = SOURCE_ROOT; };
-		FFFC4EDB5F397E3575B3A310 /* fl_draw.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fl_draw.cxx; path = ../../src/fl_draw.cxx; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		01C1E609F6C4528B93E32388 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C814931FE2E8127B4DD729FD /* fltk.framework in Frameworks */,
-				C1F79E69373133CD1924AC17 /* CoreAudio.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		02FA7389A064545471C990E9 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				4ABD061A3FE58C7C3DEADD7B /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		04D426A707A40738234F4ED6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				31F6473A9B5FD4FFB078BA78 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		115877C8118395BEFBD4B2B7 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				79760C35C8AC881A18FBB8B8 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		11CD77CE1FA5AE4F1D14D90B /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				40600399F05AB31ED7AFF144 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		13530762CDBDDB5F7449DA03 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3BB6C389D42EA62871E9F4B4 /* fltk.framework in Frameworks */,
-				64917A6B67AF2060534DB5D9 /* fltk_gl.framework in Frameworks */,
-				ECF6318C21BBD0ACB27F4E32 /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		169DE11CE7B3F4B6117A4DC0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8AC8FF5C9534F6E0664A352B /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		18EAA5F2A56ED2A22B88AB3A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				29B01C1F3FF6C5B007DEEF45 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1AF8A842F0688228AE949397 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1E4A65E8426821F418E34775 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1F21FE9DA1341F0A3E229EA6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A98C734F750F2119D508FB8A /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		23861E5380A11BE627598F2D /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F0CADB27D4B0259803F4057C /* fltk.framework in Frameworks */,
-				692AE7202326E78B7334933D /* fltk_gl.framework in Frameworks */,
-				1871DE13AAABA8DAC4D72C1B /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2919D94965B25D79F2E93F47 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C228B2DA444B36D2F9C3E168 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2F7C132F675A343668269C51 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				13DE96EAB36238A478381098 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		303C1CE4669DAD2C9F8F0C63 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7C9D61E23D197391AA580170 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		39603B9C1B9366483F74BB6A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				16C76FAEEC543074798FF0CB /* fltk.framework in Frameworks */,
-				5B4CB32F2F0797A635568B3A /* fltk_gl.framework in Frameworks */,
-				CF5A76042FD86936E94CF561 /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		397A942BDACFB7D2933E8EC7 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				87EC8234AC754EFFDA39907E /* fltk.framework in Frameworks */,
-				C9D72F10B7A22DD0349ABC68 /* fltk_forms.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		3E3E217EB3045089288C0E64 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5DF86EA5A868928C5D7D01F3 /* fltk.framework in Frameworks */,
-				57CBCDDBCD73332F9CF12C0A /* fltk_images.framework in Frameworks */,
-				319E158B9FA80488D676A040 /* fltk_jpeg.framework in Frameworks */,
-				2DBFA5F7068A355456FC0E61 /* fltk_png.framework in Frameworks */,
-				A2D8A191A0B0E9998A0D30CD /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4730E43F2C4BE2D67D6044A2 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3AE331C8B0FBF5C668831552 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		48936A0BAF73A797A4E583C6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9FFCB0771E5D6DF80D301B9C /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4A9F8D40B7CE73863445B40C /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9882EB27AC413540E37E0671 /* fltk.framework in Frameworks */,
-				2DA38DE505392D37C15EBBF1 /* fltk_images.framework in Frameworks */,
-				23A3A004166BB92BE68B3B1D /* fltk_jpeg.framework in Frameworks */,
-				3954B0A5D14C94760C0FE875 /* fltk_png.framework in Frameworks */,
-				16F26F7D137CC7F7B57ECAC0 /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4CEE36EB201A729CA4F8308A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				08B49F60E1211DE3569D73E2 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5019B6D11435AFE05418E253 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A6ED3327A24E5445BC27F29C /* fltk.framework in Frameworks */,
-				54FB15769E7A1426DAE66471 /* fltk_images.framework in Frameworks */,
-				4D62E8773744771BD8FDF478 /* fltk_jpeg.framework in Frameworks */,
-				F7888AFE5E6F6CE9BB785D69 /* fltk_png.framework in Frameworks */,
-				4A5FC9B5C736E92E69D38B12 /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		52A3FF792DA3389A6CC53209 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0A1B92FA87D5464E4C1AC4EF /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		53B84C2A0E8BD84ADF4C6A70 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				BBB06F4A4502A286E53B1649 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5629C4658F961F63F8722841 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AC8A33DBEE25AF4174D30CBB /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5849DDD4770AC012F0B95F32 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A6B1FD18EA5D81C86C8910F1 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		58AFA0B7B90CE0ACF0A1B2E9 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D236C2998846B3EAFA5A5BE5 /* fltk.framework in Frameworks */,
-				6EB2B457956E33EEE724D16A /* fltk_gl.framework in Frameworks */,
-				DF808F46E13A49F6E1D5A25A /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5B5E44816B8DFA57B6363369 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				03CA5B8FDBAAC653038BFA06 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5BE25DC98DFA463724C75983 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				4C07E1FB6BF75ACD25CB627E /* fltk.framework in Frameworks */,
-				4516B8BD99F86A028BF540F5 /* fltk_forms.framework in Frameworks */,
-				384166BA6D314002CC87AB28 /* fltk_images.framework in Frameworks */,
-				0476C2ACE5C995D19992D48F /* fltk_jpeg.framework in Frameworks */,
-				B7CE0C040B4901954F4DE4D0 /* fltk_png.framework in Frameworks */,
-				F56E295E6736DABDA07693C1 /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5CEB6CB961822D1167C891C6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5D04FDD42A39B6B7F5D27432 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5CF430C0CC7B5B18E46A53BE /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		629F530EF01F9248D91B409F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EB2679AAEC7E71561B42EEC4 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		655B11B2B02C045A8B5028F3 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D9144FCEF6D19F6F9EF0A8B2 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6A92C755D57B613EAFABAB94 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F485B877C27D5431338DB400 /* fltk.framework in Frameworks */,
-				B682066D50CAAF8CCFB3113F /* fltk_images.framework in Frameworks */,
-				CC6F9270C3F21B944D4AEAD0 /* fltk_jpeg.framework in Frameworks */,
-				892A313EA8B5B882F22CDF77 /* fltk_png.framework in Frameworks */,
-				454B5789047F9D7F2AF0EC04 /* fltk_zlib.framework in Frameworks */,
-				AF5B4BF9164B5121B1D9D3F8 /* CoreAudio.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6B8A10F761E85ADEEB1ACF54 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3103F435B7C3508B6BF051D3 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		73EA891C8BB8044C72140879 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5BF4C749E28B3792559C9107 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		754E0075C0FCCF4310791FF6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				ABCA59EA2E3A953879FD2A8F /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7C204C4C1035EB82F0251A83 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5058E348B88025656FFA027F /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7DC246FF0009EB8FB8593BAC /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				49C992F8293C1F88E2509C9E /* fltk.framework in Frameworks */,
-				9CDA0BCAFA4F3CED606C4263 /* fltk_images.framework in Frameworks */,
-				1B467A9025A86C4F5E8A7768 /* fltk_jpeg.framework in Frameworks */,
-				33FCC793A92F544711E09A1E /* fltk_png.framework in Frameworks */,
-				C3102E1346D95D5578CB3259 /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F419DFB1D92857E0098B602 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F419DFC1D92857E0098B602 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F7CF7F21AB97CEF00E12B22 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F7CF8191AB97DA600E12B22 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7FBCECC51B1D8AA500AB970D /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		84287AB87AC48E0110823FB1 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				085A816C1A35B2F4A7A278F3 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		87ADC49A3C172468203465E3 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DE182BDA21A14B247CCD92D3 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8A19E9A28BE527A5F6E39CC1 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				E7DF7C2E7A8B9A04C8F327A8 /* fltk.framework in Frameworks */,
-				5D09807715B94D045C7CA7D0 /* fltk_forms.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8E6E955E030F7186C7A72772 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AFAA76012BF32B3C39F9638E /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9030F08B63879C80A3526EA6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A333D396875BF662FB62DCD4 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		94197F306510CE8725621C3B /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D54C56B571372240BF7EA1DC /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		94982D6875FE027B56667AFE /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8E652C61D0A4E2CBDCC794F5 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9C7CA6D4037898CD7804CB21 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				467B078A474152E261F77B96 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9CE300BB0263BD4A4C40C670 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DBF8DE40C1F29F86DC793EBA /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B0A4EC6B481653C20502CE77 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5B3DACE9AD337A089D2A2BDA /* fltk.framework in Frameworks */,
-				C128558FCAE9FD45D3F7563F /* fltk_gl.framework in Frameworks */,
-				89EFAED2C8654D609ED97DD4 /* fltk_forms.framework in Frameworks */,
-				A2BE7794E4B78E8545BD833D /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B1A0582764DD0D00E2CF06D6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F6307C90D252F006E432B184 /* fltk.framework in Frameworks */,
-				C122271A7E552D9F8BC221E1 /* fltk_gl.framework in Frameworks */,
-				C9EDD5531274C04500ADB21C /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B4D140AF84B8DE662A503CF7 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				36C503992BE0600DBDB7699B /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B6F3107B7FE73A3FEC52224A /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0DA8A2B44F66D4014AF79700 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B6F452ABF43F365C4EE68C29 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2EF733AF9B79AB93D9E1F999 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B8D19A7EE1C32D60D61545F6 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FC48CB206BF7D8B4322C4ACE /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BC7C7DBC822503572AF5110F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2114F98DF24A76F0C3C8039E /* fltk.framework in Frameworks */,
-				F48AA8D3A3B18C6FBC8D69E6 /* fltk_images.framework in Frameworks */,
-				6A2D8756389F45F77825486A /* fltk_jpeg.framework in Frameworks */,
-				D51E4FB4D81343AB4C22D77A /* fltk_png.framework in Frameworks */,
-				FC414CA961FF368EE440F852 /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BCC0790321A715F6319EA985 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				04C166D5213DD80648BE1F4D /* fltk.framework in Frameworks */,
-				C96290E61274D100007D3CFE /* OpenGL.framework in Frameworks */,
-				7F4762EE12D22C470073A4F9 /* ApplicationServices.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BF4BCD66FF92558ECBB90264 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				67B71A4FFE562E1F62DE8C7A /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BF84F6678FEEED6293B48BB0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C1632846A9601F14575802FB /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BFCE3CEC6979D59AE7FA9219 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1DDBA7A48EFE494F2494CDC1 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C2D1F983EB1287416C2E90DC /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C96291151274D1FD007D3CFE /* Cocoa.framework in Frameworks */,
-				3EE305FE7D62A9AB707573F2 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C6EB2070445B615839F89673 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3145F6B8C1A7EEC88A2881E0 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C73979BDC5300D24FA5AC658 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A749C4ADD4C26B198214260A /* fltk.framework in Frameworks */,
-				B4BC9DB7D7B4E290A81FB8E8 /* fltk_png.framework in Frameworks */,
-				D400876E21DFE46F52E0B4A6 /* fltk_jpeg.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9165EA71291A304003FF4F0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C9165EA81291A304003FF4F0 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		CFFFB4C330636C95339A8F4F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				71967BE27E13E5EA2F6627D0 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D2A1AD2D93B0EED43F624520 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C96290C21274D0CF007D3CFE /* Cocoa.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D4E10D13391A30A63EF89A57 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				BF3BDB0B4DA065027B4771CA /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DB4C8357BEECBE10BF9D0FD1 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B2923141C43518172C90D20D /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DDB37BA0CD8277076D274ED1 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5BFD4A9B3EAC4767672C021C /* fltk.framework in Frameworks */,
-				EBC76AA6B5E8DFAFE0758014 /* fltk_gl.framework in Frameworks */,
-				447C7E45BD97CAF001C928CF /* OpenGL.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DF2E072017D78D49A2CB8DF9 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5E5B8FF11E1E1903F91F1884 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E1C1D313C76D06366093B7D0 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8BA3F05B96804E0FD9491049 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E4D14F08336AFBA60DD45CA5 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1950AEA5C2CDBA7309A1C106 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EE45CD6FFDF096FFC6F619A2 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F347242B6E015B11A49E28D6 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EF68016EAAEAC9E766CB414B /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3C0CA0BFF07538026590AE21 /* fltk.framework in Frameworks */,
-				071128E11B275CCD34C503C9 /* fltk_forms.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F29187F63041F20DD7E1DB1E /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D2D9B4E60375AC92A87B594E /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F948041DB74E78B7C5C4E844 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				85A12BCCCC1FD77BEE6BE54A /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F97F40E8EFCECE5112944E56 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				25BD82F1B2EC9988A25447F0 /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FA903B512952DE9AEDA2DF5F /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				F302A7BD2FFE891C6E201B40 /* fltk.framework in Frameworks */,
-				688240CE098D27582ADC82F3 /* fltk_forms.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FD9F5AFF648D8F9E6C6C7636 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7DED430847690C00C5E94FDA /* fltk.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		00A184CFEE690C4BD856C12B /* adjuster */ = {
-			isa = PBXGroup;
-			children = (
-				1BCEDC8AA971784435AC3119 /* adjuster.cxx */,
-			);
-			name = adjuster;
-			sourceTree = "<group>";
-		};
-		015D2BD894993395B263D6C0 /* Tests */ = {
-			isa = PBXGroup;
-			children = (
-				1745FD7A82A025A97E1FFD22 /* Demo */,
-				00A184CFEE690C4BD856C12B /* adjuster */,
-				7F7CF7F61AB97CEF00E12B22 /* animated */,
-				D4A58B6D0BEEB58E9CB0E31F /* arc */,
-				3565869B79F481C90BE5CDFF /* ask */,
-				9A7992A3C037B0F0C5CA8652 /* bitmap */,
-				6EE882E6C86888D785E1F43A /* blocks */,
-				15CAEC3D8C14E6D046FC5389 /* boxtype */,
-				F38AA910F089168E1F117114 /* browser */,
-				848F81CFD125BD49A9DAEC03 /* button */,
-				100D6008DF3843FA3901A33B /* buttons */,
-				C820F3AA4A638E480E8671B0 /* checkers */,
-				DEEFF0DAB1B1C84940CB1666 /* clock */,
-				FA4A55DF9ADAC4379B066CD0 /* colbrowser */,
-				BAE42AF0AC6E0EC34FB8750B /* color_chooser */,
-				8AA1D312429D402E45DD053D /* cube */,
-				8BA040EF387191E381E929BE /* CubeView */,
-				91105687E467F4C03DFD0C0F /* cursor */,
-				898164774E0172504A437300 /* curve */,
-				89AC3F1E64A0C63F95160401 /* device */,
-				3450DD122B6ABE569077164A /* doublebuffer */,
-				552503DEAA35CC9495F04FF0 /* editor */,
-				1DA404CE0391E3961D4AC8F1 /* fast_slow */,
-				7F8E4196B47A3E1099092789 /* file_chooser */,
-				9294558F6BFAEFB6C85F1BA5 /* fonts */,
-				FB469752BE558EDFA4DFDB0D /* forms */,
-				6A76BBC0277EC1E14ED0F6D4 /* fractals */,
-				FA238AC5C1832FED54AEDBB9 /* fullscreen */,
-				E374BDC1953587C600A7C1ED /* gl_overlay */,
-				3872D0B6B9928C78C72FCEC6 /* glpuzzle */,
-				A53B742C06C9D16BB091C6FB /* hello */,
-				DA36D6F398810454D33230DD /* help */,
-				269CE230435F178C04DB7881 /* iconize */,
-				86BF6452DDE9C375AF92D52F /* image */,
-				9036E33CD336ADD4A53C020D /* inactive */,
-				8CD5613A2818F5AE8FC86601 /* input */,
-				278B37E002BC20B94CAB88F5 /* input_choice */,
-				BEE79D5F81FCFD58913D4DDB /* keyboard */,
-				658CAFF66AFD6B9198CD04E5 /* label */,
-				66BEDA6A236EE6021FEAB694 /* line_style */,
-				43472F78BB42E506982E85C9 /* list_visuals */,
-				5319AB5C179F0D470225D625 /* mandelbrot */,
-				F63D39673BEC6DF512C0855A /* menubar */,
-				9ECD428FDF16913B8FE20E22 /* message */,
-				4CFC33FF0912AD90F925070C /* minimum */,
-				5F80128158C61B4A1774BBC0 /* navigation */,
-				2E4F8B7048EB2BA0C1B7FB20 /* native-filechooser */,
-				7F419E051D9285AC0098B602 /* offscreen */,
-				473F52C6337C2FCD8856CF7D /* output */,
-				4B0B665042B427F6FCF5B050 /* overlay */,
-				B41ED46FB39CBC4D7E97E288 /* pack */,
-				5ECDACBEC05120E7845884AF /* pixmap_browser */,
-				47A1BE12C9365F10843A5DA3 /* pixmap */,
-				69D60C9274B7812F42D67599 /* preferences */,
-				79E292B5AB464859300B267B /* radio */,
-				142723F0225745ED35521104 /* resizebox */,
-				D2331A75FD2049BA77D86D61 /* resize */,
-				C5C0B10B46A8037DE3AA3CCC /* rotated_text */,
-				CBCA45CC75C8819F4660B0E0 /* scroll */,
-				E8362290A4CE5611E8AE1EE3 /* shape */,
-				FAB08B8D96235676F3D4167A /* subwindow */,
-				650AC51CA4A7A8274053E3D7 /* sudoku */,
-				1180197EB5E8012D4FE3153D /* symbols */,
-				CB03657E7FFCB38655AB52F0 /* table */,
-				DA57FBC3C13128843A1A55DA /* tabs */,
-				63F59E67CA5F78F20E5F1466 /* threads */,
-				A6F1A20CDA7ED34627346BB1 /* tile */,
-				A4F75D08254DDE6A5C5A01F8 /* tiled_image */,
-				2DD062AF5E08E6EEAE97E188 /* tree */,
-				C9165ED21291A327003FF4F0 /* unittests */,
-				B645183C458896585A17BF6A /* utf8 */,
-				49D35BD1622976E3A3BEAAF4 /* valuators */,
-			);
-			name = Tests;
-			sourceTree = "<group>";
-		};
-		07A2E7B74BC0E97DC2AF181A /* fltk */ = {
-			isa = PBXGroup;
-			children = (
-				B04F6E032ADAF0A16A860A2E /* Headers */,
-				7F66B1D612BB924C00C67B59 /* Fl_cocoa.mm */,
-				7F66B1D712BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm */,
-				7F66B1D812BB924C00C67B59 /* Fl_Quartz_Printer.mm */,
-				7FFDE551171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm */,
-				F4EFF27D730BED51EF0EAA8D /* Fl.cxx */,
-				19C5DB6F3DD5011DAE6F79AB /* Fl_Adjuster.cxx */,
-				3F000DD5F091F66BC42822E3 /* Fl_Bitmap.cxx */,
-				C3F048573FAEABD2D27401D4 /* Fl_Box.cxx */,
-				4E2BE7807B57162E18C7E63F /* Fl_Browser.cxx */,
-				AAD25B747F4122A2C5224708 /* Fl_Browser_.cxx */,
-				E46A3C4F955A94AE095FF726 /* Fl_Browser_load.cxx */,
-				5A7532B3CDA46030885D1D14 /* Fl_Button.cxx */,
-				F397A185D11C3DED903CB99F /* Fl_Chart.cxx */,
-				F5B04FDCF453C6444285D186 /* Fl_Check_Browser.cxx */,
-				A2CF2FD35911638AD607092F /* Fl_Check_Button.cxx */,
-				4D55C9FE101986BC47029A16 /* Fl_Choice.cxx */,
-				F5CAE7DC565B8398F02ED7BA /* Fl_Clock.cxx */,
-				058BCBC36ADE724A418F1C43 /* Fl_Color_Chooser.cxx */,
-				7FA5C2BD192FAEBB00519823 /* Fl_Copy_Surface.cxx */,
-				E9893274B0B6C5F24730235F /* Fl_Counter.cxx */,
-				D9A7DCBAFF41CBC3DCB67C6F /* Fl_Device.cxx */,
-				3AFC31503AB99F6D00BAC647 /* Fl_Dial.cxx */,
-				33AF346DF043165E0A62ABB5 /* Fl_Double_Window.cxx */,
-				DC4C39F3567A5571CABF1038 /* Fl_File_Browser.cxx */,
-				1AC9AD74C0E0B27EA2A99DF7 /* Fl_File_Chooser.cxx */,
-				17D7629A8FC1C1A1DABEDAC0 /* Fl_File_Chooser2.cxx */,
-				5D36F806A2C72F1894F0878E /* Fl_File_Icon.cxx */,
-				A66819BE170F44B94F2E1981 /* Fl_File_Input.cxx */,
-				806103D71A8CD0075BF8E1DA /* Fl_Group.cxx */,
-				790419B5A0AD64D66F9B19E1 /* Fl_Help_View.cxx */,
-				6DCFF326B588B1B27618F28C /* Fl_Image.cxx */,
-				7FA5C2BF192FAECA00519823 /* Fl_Image_Surface.cxx */,
-				63CB19652C470F1E58DCF01E /* Fl_Input.cxx */,
-				D531F77A15AACC9E297B4490 /* Fl_Input_.cxx */,
-				BA7B1E9C7AA7316E98D369C2 /* Fl_Light_Button.cxx */,
-				7E05602BE68211B11E493E18 /* Fl_Menu.cxx */,
-				D50A8FFC111398E34136B192 /* Fl_Menu_.cxx */,
-				7F4B8ADD01CB2F8BFE43ACBA /* Fl_Menu_Bar.cxx */,
-				199EA4C60DD488096817D322 /* Fl_Menu_Button.cxx */,
-				5FB757CD5BD887D355358D2E /* Fl_Menu_Window.cxx */,
-				382F938CFABC25BC02C13939 /* Fl_Menu_add.cxx */,
-				D7E1955B57E8EF19FD90CF61 /* Fl_Menu_global.cxx */,
-				D02CF2893ECCE831CD5D3176 /* Fl_Multi_Label.cxx */,
-				2DE25DB4CE986C1857B5ECF7 /* Fl_Native_File_Chooser.cxx */,
-				D1C792936D427CC48581BFAE /* Fl_Overlay_Window.cxx */,
-				813C830680D031C1B2FCF9B6 /* Fl_Pack.cxx */,
-				6C1C9A4F054C48CDD6A2DE44 /* Fl_Paged_Device.cxx */,
-				D79D3910F834D4B78FED92F3 /* Fl_Pixmap.cxx */,
-				05BBBFE4BED0452E5D6A81F7 /* Fl_Positioner.cxx */,
-				7FFDD15B19BE08A800779AD1 /* Fl_PostScript.cxx */,
-				B4CAFA162560925C4591997A /* Fl_Printer.cxx */,
-				3789CACF6C845E9C0DE0C58F /* Fl_Preferences.cxx */,
-				570D0C7510FE3A3FB7A1BD5D /* Fl_Progress.cxx */,
-				41D6B03607BD43BB0D703411 /* Fl_Repeat_Button.cxx */,
-				9A3D4184FF1C89B7CEE9FBD6 /* Fl_Return_Button.cxx */,
-				D0E376E93B4F22BE701D29E0 /* Fl_Roller.cxx */,
-				13BCF00369D5254F0CE49599 /* Fl_Round_Button.cxx */,
-				3F60A41762817C834FF38947 /* Fl_Scroll.cxx */,
-				A5B9A5CE605BB8A57F66A2E6 /* Fl_Scrollbar.cxx */,
-				57639C1D5415FB55436556A2 /* Fl_Shared_Image.cxx */,
-				9D942824B8FC886F6FCD853D /* Fl_Single_Window.cxx */,
-				5AF5119D08DFC92EA1032671 /* Fl_Slider.cxx */,
-				116F849BE68830F05CA66B9A /* Fl_Table.cxx */,
-				351BFCA4747AF494F84FFE36 /* Fl_Table_Row.cxx */,
-				D5F75B6C9483B2BB47965789 /* Fl_Tabs.cxx */,
-				D390A37D428892B9A8AD63AD /* Fl_Text_Buffer.cxx */,
-				A0C1440AC6EE3239EEC7D81B /* Fl_Text_Display.cxx */,
-				D9FC21A432D9F4C118B2B1D4 /* Fl_Text_Editor.cxx */,
-				E82932DF2A0C624C6EDC9207 /* Fl_Tile.cxx */,
-				76726B622EF72DCDAD1C0D23 /* Fl_Tiled_Image.cxx */,
-				0DBD503036293A8AEFAC6725 /* Fl_Tooltip.cxx */,
-				5FF610230DB4932346044FC7 /* Fl_Tree.cxx */,
-				6170B3704ED34EBCF80E43C1 /* Fl_Tree_Item.cxx */,
-				00E3864092375950FE42449E /* Fl_Tree_Item_Array.cxx */,
-				197D446B1F4FEB565793FC67 /* Fl_Tree_Prefs.cxx */,
-				4194C917D667C0E2FCEF0A39 /* Fl_Valuator.cxx */,
-				34CB383C3A4360C14B58562E /* Fl_Value_Input.cxx */,
-				F1C4032FB66042A96955A62E /* Fl_Value_Output.cxx */,
-				D80607C7E1AAA63C8B8F1978 /* Fl_Value_Slider.cxx */,
-				0B9D4355B2E878715DD43AD3 /* Fl_Widget.cxx */,
-				BF1FE1C69D048AA23CF27B1E /* Fl_Window.cxx */,
-				F42EEFA08A75F71B33094D50 /* Fl_Window_fullscreen.cxx */,
-				CC2482EC04B752BF38D4DBE2 /* Fl_Window_hotspot.cxx */,
-				9E22773911BDBADEA86730D4 /* Fl_Window_iconize.cxx */,
-				7F6F526319CF0FED0075F408 /* Fl_Window_shape.cxx */,
-				9951B49F640C2C15321EED9C /* Fl_Wizard.cxx */,
-				800E34DEF9E503C5EC6C4FA5 /* Fl_XBM_Image.cxx */,
-				0CBC6DC7942212D47B70681B /* Fl_XPM_Image.cxx */,
-				E93CF8BB106A2249F0FC58B8 /* Fl_abort.cxx */,
-				274CBEBF1D1BFD5C91605CBE /* Fl_add_idle.cxx */,
-				9F484B5F88CDE466AC0D0592 /* Fl_arg.cxx */,
-				00B08A2C8EA901C350696F8D /* Fl_compose.cxx */,
-				0E259033BF45B73C21409C8F /* Fl_display.cxx */,
-				5B566F3BAD7101C63D5494E3 /* Fl_get_key.cxx */,
-				EB5B18A1B9B1E41F2AB56A97 /* Fl_get_system_colors.cxx */,
-				28E8F2802DEA5334F914BE98 /* Fl_grab.cxx */,
-				D004B2D87C53E063F848C539 /* Fl_lock.cxx */,
-				AAE8D31DC4F024028C66743C /* Fl_own_colormap.cxx */,
-				5B2B6ED6A3649923BAAFFDF1 /* Fl_visual.cxx */,
-				09A359CA8F522F64BAF6CEAF /* Fl_x.cxx */,
-				AC0F7C69B25854F609BD1A0C /* cmap.cxx */,
-				D60CC89D1A70BE6AA3929604 /* filename_absolute.cxx */,
-				E49427F44D81B0A6192BC7CB /* filename_expand.cxx */,
-				B140C9F8CF34FDAC94E15FE1 /* filename_ext.cxx */,
-				2BECA86D733575C07B9982DF /* filename_isdir.cxx */,
-				CD0C572F3E0A8040E9C52E0F /* filename_list.cxx */,
-				81CBEA61461E59652A309159 /* filename_match.cxx */,
-				83733760D651C218178EAEB3 /* filename_setext.cxx */,
-				39E501DBC41F2617B69BEE95 /* fl_arc.cxx */,
-				4E2468990092988E147B08B3 /* fl_arci.cxx */,
-				D8332361B912AFCE6DDF4B11 /* fl_ask.cxx */,
-				9B54C6B8D801E899981FC5E6 /* fl_boxtype.cxx */,
-				1501BD6AB688B2DB8120E852 /* fl_call_main.c */,
-				0EB55F59B3D0D0BD1A8BFE5E /* fl_color.cxx */,
-				4343E645136756B9FEEE6902 /* fl_cursor.cxx */,
-				3306C66283D192B1B1739E25 /* fl_curve.cxx */,
-				077BDEA1F0364BDA61518702 /* fl_diamond_box.cxx */,
-				2DD93178E8AFA850DAC293FC /* fl_dnd.cxx */,
-				FFFC4EDB5F397E3575B3A310 /* fl_draw.cxx */,
-				6F065A63833D5944E820C951 /* fl_draw_image.cxx */,
-				B25F1323447C32308AA017DE /* fl_draw_pixmap.cxx */,
-				4D124BD72F4E63D99837CE0C /* fl_encoding_latin1.cxx */,
-				0A447B8708FA755BB960A134 /* fl_encoding_mac_roman.cxx */,
-				3D85A740C2D5F1D6C6A9420D /* fl_engraved_label.cxx */,
-				FA2F70BA8FF4E7F4B7B36971 /* fl_file_dir.cxx */,
-				9E8F7BCC0292044D887D423B /* fl_font.cxx */,
-				7F12FCC618E1EEB900AB6A11 /* fl_gleam.cxx */,
-				7A2CE7959780A1C6E60103E8 /* fl_gtk.cxx */,
-				EF6D2F48B12359DE60E499C2 /* fl_labeltype.cxx */,
-				0B5987E1A293E67A6290612A /* fl_line_style.cxx */,
-				FAD24127A06F3F9F0EEB843A /* fl_open_uri.cxx */,
-				340E5CD1F39C1484B1BCE8F3 /* fl_oval_box.cxx */,
-				577F8362F7016862051E2AC3 /* fl_overlay.cxx */,
-				5CE4CB9AEF9070A32A27696D /* fl_overlay_visual.cxx */,
-				E4A2A361D4B13B70464C6A26 /* fl_plastic.cxx */,
-				9CA94171ECE3444BB9D65BAE /* fl_read_image.cxx */,
-				BAF6DCFBAFBE016247558B82 /* fl_rect.cxx */,
-				6E69780F02E318A2154C338D /* fl_round_box.cxx */,
-				5876E03E2818B598FAA5C307 /* fl_rounded_box.cxx */,
-				7C67E3A1368F9AC0A03A7BD6 /* fl_scroll_area.cxx */,
-				FBB2C3FCFF8322A237DDBE23 /* fl_set_font.cxx */,
-				A68E1C76E8C3DC37B869BE48 /* fl_set_fonts.cxx */,
-				F6A596316AE6F65117FF7196 /* fl_shadow_box.cxx */,
-				7C57535613D421F393DD662F /* fl_shortcut.cxx */,
-				EB15CE98189A4C0A7A8A480F /* fl_show_colormap.cxx */,
-				7C8D88FDB0A0A32E59465025 /* fl_symbols.cxx */,
-				42660BA0E346168608D0FADB /* fl_utf.c */,
-				DEF20F6B91F7FB0EBCBD2411 /* fl_utf8.cxx */,
-				67A896B990EDB45C5BC93F01 /* fl_vertex.cxx */,
-				530B066D0F3AC2972D9FEC30 /* flstring.c */,
-				977642DF53013F6E6F98A12C /* numericsort.c */,
-				1C75365D167645656C3A6752 /* ps_image.cxx */,
-				BF30A6F91EA43AB094476FFC /* scandir.c */,
-				BD87D324A97F12C5C38A1432 /* screen_xywh.cxx */,
-				EBC0D2C965EDD6503B0CF519 /* vsnprintf.c */,
-				FB7A9EFB3C7CDAE324E9544F /* case.c */,
-				6B30F6EA5CA69E305D2B82EE /* is_right2left.c */,
-				5AE1F936F1C186E18C1B9C28 /* is_spacing.c */,
-			);
-			name = fltk;
-			sourceTree = "<group>";
-		};
-		100D6008DF3843FA3901A33B /* buttons */ = {
-			isa = PBXGroup;
-			children = (
-				0A9C06C70D7733C29D99F901 /* buttons.cxx */,
-			);
-			name = buttons;
-			sourceTree = "<group>";
-		};
-		1180197EB5E8012D4FE3153D /* symbols */ = {
-			isa = PBXGroup;
-			children = (
-				E73F55075EA0F5C4BC6C0D03 /* symbols.cxx */,
-			);
-			name = symbols;
-			sourceTree = "<group>";
-		};
-		142723F0225745ED35521104 /* resizebox */ = {
-			isa = PBXGroup;
-			children = (
-				1D02929D32167C37921C842E /* resizebox.cxx */,
-			);
-			name = resizebox;
-			sourceTree = "<group>";
-		};
-		15CAEC3D8C14E6D046FC5389 /* boxtype */ = {
-			isa = PBXGroup;
-			children = (
-				6C64353A3129BCCFAA667D86 /* boxtype.cxx */,
-			);
-			name = boxtype;
-			sourceTree = "<group>";
-		};
-		1745FD7A82A025A97E1FFD22 /* Demo */ = {
-			isa = PBXGroup;
-			children = (
-				8D4E2F8A10BA06E332B7EB03 /* demo.cxx */,
-				C984AFA712D02A1800D66DAD /* demo.menu */,
-			);
-			name = Demo;
-			sourceTree = "<group>";
-		};
-		188555DBC553F66588792C6B /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				07A2E7B74BC0E97DC2AF181A /* fltk */,
-				7D01507BB2E71FC0C390ABEA /* fltk_gl */,
-				AE877F45887AC9F2667D4880 /* fltk_images */,
-				700E2C8CE84DC32967A9578A /* fltk_png */,
-				A07416CF2BF150F093A0F9AD /* fltk_jpeg */,
-				CBA24C637614007F99A61807 /* fltk_forms */,
-				DA28C614BBA1C4ED5CF6CAED /* fltk_zlib */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		1C04F9887FB96BE57051A4CE /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				2D8189C8293D1D51B5409B28 /* CodeEditor.h */,
-				292AEA661D3592D20000763E /* ExternalCodeEditor_UNIX.h */,
-				40E462179ABB6A6D0FBD72FE /* Fl_Type.h */,
-				9E4DE1CE4D10CA89D0D13AC7 /* Fl_Widget_Type.h */,
-				D638C69E37B67C905C806560 /* Fluid_Image.h */,
-				DECAFE2642928028BDF791B7 /* Shortcut_Button.h */,
-				A095F27EE603A15FD695F31C /* about_panel.h */,
-				BD209D4716895D1365B6BA73 /* alignment_panel.h */,
-				8F311718B3CD16844535EEE6 /* comments.h */,
-				D4E11692C02E48A71A18527C /* function_panel.h */,
-				176A3053D562D80CD4D3A400 /* print_panel.h */,
-				4A6DFBFA4FDD6D0B8F65009E /* template_panel.h */,
-				91726A70C25E6155A2FAF315 /* undo.h */,
-				B3022A0763D379E8707EC5D2 /* widget_panel.h */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		1DA404CE0391E3961D4AC8F1 /* fast_slow */ = {
-			isa = PBXGroup;
-			children = (
-				A136058B2D308F81E748921C /* fast_slow.fl */,
-			);
-			name = fast_slow;
-			sourceTree = "<group>";
-		};
-		2000E0C1AD91ACA63811D339 = {
-			isa = PBXGroup;
-			children = (
-				C9EDD143127338F600ADB21C /* README.OSX.txt */,
-				7FA08BBF1C4EA7A0001CBE06 /* abi-version.ide */,
-				5D444464FCF5714805936107 /* Applications */,
-				188555DBC553F66588792C6B /* Frameworks */,
-				015D2BD894993395B263D6C0 /* Tests */,
-				DCB546B00EC62A9F8CC4181A /* Products */,
-				C9628FFA1274D0A1007D3CFE /* Resources */,
-			);
-			sourceTree = "<group>";
-		};
-		269CE230435F178C04DB7881 /* iconize */ = {
-			isa = PBXGroup;
-			children = (
-				54C40351BD50C2FC094055E5 /* iconize.cxx */,
-			);
-			name = iconize;
-			sourceTree = "<group>";
-		};
-		278B37E002BC20B94CAB88F5 /* input_choice */ = {
-			isa = PBXGroup;
-			children = (
-				15405AF3DA5E1FF9D702C263 /* input_choice.cxx */,
-			);
-			name = input_choice;
-			sourceTree = "<group>";
-		};
-		2DD062AF5E08E6EEAE97E188 /* tree */ = {
-			isa = PBXGroup;
-			children = (
-				D10B1EA053B5C8F02A636D93 /* tree.fl */,
-			);
-			name = tree;
-			sourceTree = "<group>";
-		};
-		2E4F8B7048EB2BA0C1B7FB20 /* native-filechooser */ = {
-			isa = PBXGroup;
-			children = (
-				922182C23B114BA60D9CF160 /* native-filechooser.cxx */,
-			);
-			name = "native-filechooser";
-			sourceTree = "<group>";
-		};
-		3450DD122B6ABE569077164A /* doublebuffer */ = {
-			isa = PBXGroup;
-			children = (
-				D3761C93D5C7A48D4B80225A /* doublebuffer.cxx */,
-			);
-			name = doublebuffer;
-			sourceTree = "<group>";
-		};
-		3561F7EB989A4BBA606E380F /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				E0132688B22159A85307F264 /* forms.H */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		3565869B79F481C90BE5CDFF /* ask */ = {
-			isa = PBXGroup;
-			children = (
-				F319551D961725F0949D0235 /* ask.cxx */,
-			);
-			name = ask;
-			sourceTree = "<group>";
-		};
-		3872D0B6B9928C78C72FCEC6 /* glpuzzle */ = {
-			isa = PBXGroup;
-			children = (
-				C7C5A11DD7448F61DFC69398 /* glpuzzle.cxx */,
-			);
-			name = glpuzzle;
-			sourceTree = "<group>";
-		};
-		43472F78BB42E506982E85C9 /* list_visuals */ = {
-			isa = PBXGroup;
-			children = (
-				31FF037FBCA8B6C0CACB0A37 /* list_visuals.cxx */,
-			);
-			name = list_visuals;
-			sourceTree = "<group>";
-		};
-		473F52C6337C2FCD8856CF7D /* output */ = {
-			isa = PBXGroup;
-			children = (
-				42C83618F3462133634D3CF9 /* output.cxx */,
-			);
-			name = output;
-			sourceTree = "<group>";
-		};
-		47A1BE12C9365F10843A5DA3 /* pixmap */ = {
-			isa = PBXGroup;
-			children = (
-				E8D790E9361D2B311B6839B1 /* pixmap.cxx */,
-			);
-			name = pixmap;
-			sourceTree = "<group>";
-		};
-		49D35BD1622976E3A3BEAAF4 /* valuators */ = {
-			isa = PBXGroup;
-			children = (
-				590C56F672356072A5C86BC3 /* valuators.fl */,
-			);
-			name = valuators;
-			sourceTree = "<group>";
-		};
-		4B0B665042B427F6FCF5B050 /* overlay */ = {
-			isa = PBXGroup;
-			children = (
-				AAA7458AD5CC6DCD9BA25E7F /* overlay.cxx */,
-			);
-			name = overlay;
-			sourceTree = "<group>";
-		};
-		4CFC33FF0912AD90F925070C /* minimum */ = {
-			isa = PBXGroup;
-			children = (
-				5FAF643D7C2CFA5A83F4B356 /* minimum.cxx */,
-			);
-			name = minimum;
-			sourceTree = "<group>";
-		};
-		5319AB5C179F0D470225D625 /* mandelbrot */ = {
-			isa = PBXGroup;
-			children = (
-				F579CD495EB4DC75B2FD8E52 /* mandelbrot.cxx */,
-				8222D901BB4DAF097B81C1FE /* mandelbrot_ui.fl */,
-			);
-			name = mandelbrot;
-			sourceTree = "<group>";
-		};
-		54B6A2D8180AD6FCA26FB387 /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				B20D11CF3F871C99011F632E /* Fl_BMP_Image.H */,
-				BA939493F873CF0518DB0A1B /* Fl_GIF_Image.H */,
-				A2E97BA0812AEC32965573B8 /* Fl_Help_Dialog.H */,
-				31D736821E68F01A1A11FC9F /* Fl_Help_View.H */,
-				15B635124165659EFD5640FF /* Fl_JPEG_Image.H */,
-				87F83C8E6003FAE14C4E8249 /* Fl_PNG_Image.H */,
-				330837DFFF31CE2EB245C7EC /* Fl_PNM_Image.H */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		552503DEAA35CC9495F04FF0 /* editor */ = {
-			isa = PBXGroup;
-			children = (
-				368BC008DC3AE26333DF0321 /* editor.cxx */,
-			);
-			name = editor;
-			sourceTree = "<group>";
-		};
-		5D444464FCF5714805936107 /* Applications */ = {
-			isa = PBXGroup;
-			children = (
-				CDCF4AA8885523EF295D2D27 /* Fluid */,
-			);
-			name = Applications;
-			sourceTree = "<group>";
-		};
-		5ECDACBEC05120E7845884AF /* pixmap_browser */ = {
-			isa = PBXGroup;
-			children = (
-				78EE1A0803C3AAA7BFAF79B8 /* pixmap_browser.cxx */,
-			);
-			name = pixmap_browser;
-			sourceTree = "<group>";
-		};
-		5F80128158C61B4A1774BBC0 /* navigation */ = {
-			isa = PBXGroup;
-			children = (
-				98AAEBFD9218D1E1F24D81D8 /* navigation.cxx */,
-			);
-			name = navigation;
-			sourceTree = "<group>";
-		};
-		63F59E67CA5F78F20E5F1466 /* threads */ = {
-			isa = PBXGroup;
-			children = (
-				6DFD0BF5428959EE73D260D8 /* threads.cxx */,
-			);
-			name = threads;
-			sourceTree = "<group>";
-		};
-		650AC51CA4A7A8274053E3D7 /* sudoku */ = {
-			isa = PBXGroup;
-			children = (
-				A59208EAD1D0282D4FCD5839 /* sudoku.cxx */,
-				46DBACE210E8AEF57FFB5693 /* CoreAudio.framework */,
-			);
-			name = sudoku;
-			sourceTree = "<group>";
-		};
-		658CAFF66AFD6B9198CD04E5 /* label */ = {
-			isa = PBXGroup;
-			children = (
-				8277A82AB4C46B991D48F852 /* label.cxx */,
-			);
-			name = label;
-			sourceTree = "<group>";
-		};
-		66BEDA6A236EE6021FEAB694 /* line_style */ = {
-			isa = PBXGroup;
-			children = (
-				DA6D2097C089DE9936A0B112 /* line_style.cxx */,
-			);
-			name = line_style;
-			sourceTree = "<group>";
-		};
-		69D60C9274B7812F42D67599 /* preferences */ = {
-			isa = PBXGroup;
-			children = (
-				1D152F81B7390EEECF3BB670 /* preferences.fl */,
-			);
-			name = preferences;
-			sourceTree = "<group>";
-		};
-		6A76BBC0277EC1E14ED0F6D4 /* fractals */ = {
-			isa = PBXGroup;
-			children = (
-				598DD70F89D7731D61BBD8EF /* fractals.cxx */,
-				431856A376572B057493295D /* fracviewer.cxx */,
-			);
-			name = fractals;
-			sourceTree = "<group>";
-		};
-		6EE882E6C86888D785E1F43A /* blocks */ = {
-			isa = PBXGroup;
-			children = (
-				3E19864FD168E465A1DAFA6A /* blocks.cxx */,
-			);
-			name = blocks;
-			sourceTree = "<group>";
-		};
-		700E2C8CE84DC32967A9578A /* fltk_png */ = {
-			isa = PBXGroup;
-			children = (
-				C9EDD4DC1274BB4100ADB21C /* Headers */,
-				5575DA9A654EB53C515F917A /* png.c */,
-				9795165015E763BF705783DC /* pngerror.c */,
-				8AA117275273E1E3B906DA35 /* pngget.c */,
-				BD535A20C799334E639DDD81 /* pngmem.c */,
-				2A5CB08352A0DBD0980FC770 /* pngpread.c */,
-				C4CF7DDC2EC8792157A3F43B /* pngread.c */,
-				D33C668435685F7CCB359EE2 /* pngrio.c */,
-				037E92E807DF3B8C0B19FF85 /* pngrtran.c */,
-				BBD2663C0F428CC57126F4E2 /* pngrutil.c */,
-				754E11ECF7EB2B3E7E1E3C68 /* pngset.c */,
-				ADC532751F27C32E46DEFF6F /* pngtrans.c */,
-				B7DE70E246F6A05A42991CC1 /* pngwio.c */,
-				11A4DF1725F38E4341C5C663 /* pngwrite.c */,
-				24E8C158A0FFA9C8900E98D8 /* pngwtran.c */,
-				577CE0F473400471A5F96A52 /* pngwutil.c */,
-				17D45DE262939B64E8894DBB /* libz.dylib */,
-			);
-			name = fltk_png;
-			sourceTree = "<group>";
-		};
-		79E292B5AB464859300B267B /* radio */ = {
-			isa = PBXGroup;
-			children = (
-				58166AA7A85D9E037993FC38 /* radio.fl */,
-			);
-			name = radio;
-			sourceTree = "<group>";
-		};
-		7D01507BB2E71FC0C390ABEA /* fltk_gl */ = {
-			isa = PBXGroup;
-			children = (
-				7E097C61B5952D56DFB93ECF /* Headers */,
-				27C65F509527076EB26E9C0F /* Fl_Gl_Choice.cxx */,
-				A7A692EB67C5CBE35D4A4B5C /* Fl_Gl_Device_Plugin.cxx */,
-				8E81EE378D475F9CFDE296C9 /* Fl_Gl_Overlay.cxx */,
-				EC57889382FB898FD3EF2580 /* Fl_Gl_Window.cxx */,
-				98E423BB92A1B4F201F6B042 /* freeglut_geometry.cxx */,
-				73374F6E214D9DC3E2264866 /* freeglut_stroke_mono_roman.cxx */,
-				6CCA5064754A8314839CB37A /* freeglut_stroke_roman.cxx */,
-				95604163D1E6CBE33AAD66CD /* freeglut_teapot.cxx */,
-				AFB1FA7E614E064C55880F21 /* gl_draw.cxx */,
-				DD77F09FACBBCDC3C5276B93 /* glut_compatability.cxx */,
-				29E61287C1F4A1123829C900 /* glut_font.cxx */,
-			);
-			name = fltk_gl;
-			sourceTree = "<group>";
-		};
-		7E097C61B5952D56DFB93ECF /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				E7C720E51DAC292F13358811 /* Fl_Gl_Window.H */,
-				8C1CBF782BBD9CCBFC0B451B /* gl.h */,
-				4C9AF6F2C1B78A67FFD177F9 /* gl2opengl.h */,
-				88C72DFE480F42D0547F786B /* gl_draw.H */,
-				E159325B70E8DAA4D9DE0C1B /* glu.h */,
-				451D01896EFDD83277515630 /* glut.H */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		7F419E051D9285AC0098B602 /* offscreen */ = {
-			isa = PBXGroup;
-			children = (
-				7F419E061D9285D90098B602 /* offscreen.cxx */,
-			);
-			name = offscreen;
-			sourceTree = "<group>";
-		};
-		7F7CF7F61AB97CEF00E12B22 /* animated */ = {
-			isa = PBXGroup;
-			children = (
-				7F7CF81E1AB9836C00E12B22 /* animated.cxx */,
-			);
-			path = animated;
-			sourceTree = "<group>";
-		};
-		7F8E4196B47A3E1099092789 /* file_chooser */ = {
-			isa = PBXGroup;
-			children = (
-				39CD231E22E0B53E92CABDC9 /* file_chooser.cxx */,
-			);
-			name = file_chooser;
-			sourceTree = "<group>";
-		};
-		7F92031816B1A909000FC50F /* English.lproj */ = {
-			isa = PBXGroup;
-			children = (
-				7F92031916B1A909000FC50F /* Localizable.strings */,
-			);
-			name = English.lproj;
-			path = Resources/English.lproj;
-			sourceTree = "<group>";
-		};
-		7F92031B16B1A909000FC50F /* French.lproj */ = {
-			isa = PBXGroup;
-			children = (
-				7F92031C16B1A909000FC50F /* Localizable.strings */,
-			);
-			name = French.lproj;
-			path = Resources/French.lproj;
-			sourceTree = "<group>";
-		};
-		7F92031E16B1A909000FC50F /* German.lproj */ = {
-			isa = PBXGroup;
-			children = (
-				7F92031F16B1A909000FC50F /* Localizable.strings */,
-			);
-			name = German.lproj;
-			path = Resources/German.lproj;
-			sourceTree = "<group>";
-		};
-		7F92032116B1A909000FC50F /* Italian.lproj */ = {
-			isa = PBXGroup;
-			children = (
-				7F92032216B1A909000FC50F /* Localizable.strings */,
-			);
-			name = Italian.lproj;
-			path = Resources/Italian.lproj;
-			sourceTree = "<group>";
-		};
-		7F92032416B1A90A000FC50F /* Spanish.lproj */ = {
-			isa = PBXGroup;
-			children = (
-				7F92032516B1A90A000FC50F /* Localizable.strings */,
-			);
-			name = Spanish.lproj;
-			path = Resources/Spanish.lproj;
-			sourceTree = "<group>";
-		};
-		848F81CFD125BD49A9DAEC03 /* button */ = {
-			isa = PBXGroup;
-			children = (
-				D06E371A971A3BC1B399AD78 /* button.cxx */,
-			);
-			name = button;
-			sourceTree = "<group>";
-		};
-		86BF6452DDE9C375AF92D52F /* image */ = {
-			isa = PBXGroup;
-			children = (
-				4120FB2B23E168C4377E78E2 /* image.cxx */,
-			);
-			name = image;
-			sourceTree = "<group>";
-		};
-		898164774E0172504A437300 /* curve */ = {
-			isa = PBXGroup;
-			children = (
-				09A55ED62CD9010F1E512122 /* curve.cxx */,
-			);
-			name = curve;
-			sourceTree = "<group>";
-		};
-		89AC3F1E64A0C63F95160401 /* device */ = {
-			isa = PBXGroup;
-			children = (
-				DF2662F7275F8873F9BA6C64 /* device.cxx */,
-			);
-			name = device;
-			sourceTree = "<group>";
-		};
-		8AA1D312429D402E45DD053D /* cube */ = {
-			isa = PBXGroup;
-			children = (
-				2148BFD8D4CD2F1527B71C3C /* cube.cxx */,
-			);
-			name = cube;
-			sourceTree = "<group>";
-		};
-		8BA040EF387191E381E929BE /* CubeView */ = {
-			isa = PBXGroup;
-			children = (
-				323779B8DE42371A98337337 /* CubeView.cxx */,
-				2A3CEBA07E8AE9BF4C002531 /* CubeMain.cxx */,
-				ADA5BC653C9EFBEAA8C0AD29 /* CubeViewUI.fl */,
-			);
-			name = CubeView;
-			sourceTree = "<group>";
-		};
-		8CD5613A2818F5AE8FC86601 /* input */ = {
-			isa = PBXGroup;
-			children = (
-				97BB0EFFDBDEA3B11ED79A73 /* input.cxx */,
-			);
-			name = input;
-			sourceTree = "<group>";
-		};
-		9036E33CD336ADD4A53C020D /* inactive */ = {
-			isa = PBXGroup;
-			children = (
-				FE29497A25C52BC2F7D5A9D4 /* inactive.fl */,
-			);
-			name = inactive;
-			sourceTree = "<group>";
-		};
-		91105687E467F4C03DFD0C0F /* cursor */ = {
-			isa = PBXGroup;
-			children = (
-				8C53A414ED45A9276B8B4C40 /* cursor.cxx */,
-			);
-			name = cursor;
-			sourceTree = "<group>";
-		};
-		9294558F6BFAEFB6C85F1BA5 /* fonts */ = {
-			isa = PBXGroup;
-			children = (
-				1C17C98660CE64B98C8E2DFB /* fonts.cxx */,
-			);
-			name = fonts;
-			sourceTree = "<group>";
-		};
-		9A7992A3C037B0F0C5CA8652 /* bitmap */ = {
-			isa = PBXGroup;
-			children = (
-				7FAC914955D699539F73B996 /* bitmap.cxx */,
-			);
-			name = bitmap;
-			sourceTree = "<group>";
-		};
-		9ECD428FDF16913B8FE20E22 /* message */ = {
-			isa = PBXGroup;
-			children = (
-				2E774D7FE17DC45AFDF985FE /* message.cxx */,
-			);
-			name = message;
-			sourceTree = "<group>";
-		};
-		A07416CF2BF150F093A0F9AD /* fltk_jpeg */ = {
-			isa = PBXGroup;
-			children = (
-				273EA935130ACF91000D6870 /* jaricom.c */,
-				273EA936130ACF91000D6870 /* jcarith.c */,
-				273EA937130ACF91000D6870 /* jdarith.c */,
-				273EA938130ACF91000D6870 /* jdct.h */,
-				273EA939130ACF91000D6870 /* jinclude.h */,
-				273EA93A130ACF91000D6870 /* jmemsys.h */,
-				273EA93B130ACF91000D6870 /* jpegint.h */,
-				273EA93C130ACF91000D6870 /* jversion.h */,
-				C9EDD4E21274BB7C00ADB21C /* Headers */,
-				37EC93410A76CE3EB094F162 /* jcapimin.c */,
-				0C4D02EC5E80D2BF56CFB48B /* jcapistd.c */,
-				2483CB305CCA0A319EF35BCF /* jccoefct.c */,
-				FE466F26BF6C316E5A1770E6 /* jccolor.c */,
-				CF8C02ED9EB60F55A5713F10 /* jcdctmgr.c */,
-				D9DB580DCA05DE487FACA272 /* jchuff.c */,
-				819B540345E59C29EE9DF3DA /* jcinit.c */,
-				4C2979BC9629FABDCC0271BB /* jcmainct.c */,
-				6F23DFF159ADA2C05E62C263 /* jcmarker.c */,
-				D77F126A951A15185214FF2E /* jcmaster.c */,
-				5CD5D087391E39030838C823 /* jcomapi.c */,
-				7DF4AD3769671959EA813845 /* jcparam.c */,
-				14AA766D5DA5A8BCFF60B626 /* jcprepct.c */,
-				65E1ABE72414529CBD1F937C /* jcsample.c */,
-				E4337D2D7CEEDCAD78B068E5 /* jctrans.c */,
-				D3FB35B309F2E1E59D1618C8 /* jdapimin.c */,
-				AB3E00F5BBC9AB1C51B0EEDC /* jdapistd.c */,
-				90D9C06A2DCECD5B99C4A90A /* jdatadst.c */,
-				5722EFFA9B8A529E03233053 /* jdatasrc.c */,
-				A715D265EAD3C5DA5628485C /* jdcoefct.c */,
-				F123133D8A3AD430ED07DF17 /* jdcolor.c */,
-				1FB7B9BDAA5F88A0223A5EA9 /* jddctmgr.c */,
-				AB46BE0BB9C13E4684CB6D76 /* jdhuff.c */,
-				EB9D2470FCD53D54DDB5CA10 /* jdinput.c */,
-				428497C5DD96FDB07B2A8BC5 /* jdmainct.c */,
-				BB37899B104B362F32F0F417 /* jdmarker.c */,
-				28AFF174A53E38CCB7475C19 /* jdmaster.c */,
-				C84F99F5AC8C6517F45055B0 /* jdmerge.c */,
-				4D4D056FC1F1EFEC7585CA17 /* jdpostct.c */,
-				5538B949B47F04D03589F2CE /* jdsample.c */,
-				4577F046D6D5D93D2553BFBC /* jdtrans.c */,
-				86685DA60EFE7C0F07DC5C3B /* jerror.c */,
-				D5CDFA360799E961187294DC /* jfdctflt.c */,
-				A4456FF8D730E5BE234723F8 /* jfdctfst.c */,
-				EB3B78BA6DFC3CD491D13E83 /* jfdctint.c */,
-				377C68AADE10A3244413CFF6 /* jidctflt.c */,
-				2B5CC86924C64E849EBE0179 /* jidctfst.c */,
-				33F18D02CA150D5654D48366 /* jidctint.c */,
-				E618B793B357747DC837667E /* jmemmgr.c */,
-				D3E25408466639AACEF4D2A6 /* jmemnobs.c */,
-				DD96B70D85E60B641F061D51 /* jquant1.c */,
-				51A1DE1F52564E84C104F074 /* jquant2.c */,
-				4CD5A5D2975A2CCB77EBAD43 /* jutils.c */,
-			);
-			name = fltk_jpeg;
-			sourceTree = "<group>";
-		};
-		A4F75D08254DDE6A5C5A01F8 /* tiled_image */ = {
-			isa = PBXGroup;
-			children = (
-				94D15578CD49CC75FE6617E4 /* tiled_image.cxx */,
-			);
-			name = tiled_image;
-			sourceTree = "<group>";
-		};
-		A53B742C06C9D16BB091C6FB /* hello */ = {
-			isa = PBXGroup;
-			children = (
-				4C2EEE3E17025A63A0AEEF5F /* hello.cxx */,
-			);
-			name = hello;
-			sourceTree = "<group>";
-		};
-		A6F1A20CDA7ED34627346BB1 /* tile */ = {
-			isa = PBXGroup;
-			children = (
-				0DFF833B9E81E11FA3E3A85A /* tile.cxx */,
-			);
-			name = tile;
-			sourceTree = "<group>";
-		};
-		AE877F45887AC9F2667D4880 /* fltk_images */ = {
-			isa = PBXGroup;
-			children = (
-				54B6A2D8180AD6FCA26FB387 /* Headers */,
-				3EB2D50857F16B94D2C516E9 /* Fl_BMP_Image.cxx */,
-				0330777F0ECC3BA2B055C80E /* Fl_File_Icon2.cxx */,
-				877ED586A536CA9D898220D3 /* Fl_GIF_Image.cxx */,
-				393BD835A7EBE8F1F43AC188 /* Fl_Help_Dialog.cxx */,
-				96F45BDA96C23534006C5538 /* Fl_JPEG_Image.cxx */,
-				CE1157541DFCB8DC69A00345 /* Fl_PNG_Image.cxx */,
-				ECFF712363202EC351A51E53 /* Fl_PNM_Image.cxx */,
-				67715F3670D58DDDB47DB256 /* fl_images_core.cxx */,
-			);
-			name = fltk_images;
-			sourceTree = "<group>";
-		};
-		B04F6E032ADAF0A16A860A2E /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				84CE79448708855561FEE498 /* Enumerations.H */,
-				C359E5D5187606DD69C7938B /* Fl.H */,
-				5CDA214AEABC15E3EF1BB172 /* Fl_Adjuster.H */,
-				FE90AA3BB40510FA45E0C27B /* Fl_Bitmap.H */,
-				390863A4D5D1B4C7C9B58679 /* Fl_Box.H */,
-				D90A34CD50A6825298459CCE /* Fl_Browser.H */,
-				149DEBE486F3554738429684 /* Fl_Browser_.H */,
-				E21339D33557BB5501B08AB1 /* Fl_Button.H */,
-				87F89271469726AE756E4D93 /* Fl_Cairo.H */,
-				8B02E11D61E46AD79DE7EFE7 /* Fl_Cairo_Window.H */,
-				0CAFE7CA950A492FE35F2163 /* Fl_Chart.H */,
-				A2B930ADD957B492869191EB /* Fl_Check_Browser.H */,
-				4B1195741A8CCE772D17856C /* Fl_Check_Button.H */,
-				C8AE10A8DDF53B8B27E3215A /* Fl_Choice.H */,
-				9BCF393F94482AE7C7421397 /* Fl_Clock.H */,
-				2CD1EF8B4BFD0820E9A42641 /* Fl_Color_Chooser.H */,
-				7FA5C2C2192FAEF200519823 /* Fl_Copy_Surface.H */,
-				CE97D58B5B0F1A2A7DB2A3FF /* Fl_Counter.H */,
-				82863AEFE086C3469C386C22 /* Fl_Device.H */,
-				02C21BB31E7DDFE9E76F4997 /* Fl_Dial.H */,
-				80D32CF90973629228CAA7F0 /* Fl_Double_Window.H */,
-				53930BEE4CBAAF4C82825F9B /* Fl_Export.H */,
-				DE2F47C61B9083A6E7811620 /* Fl_File_Browser.H */,
-				729751A4A3DAAAF169C80ACC /* Fl_File_Chooser.H */,
-				18A8E88697605A73C46C0DDF /* Fl_File_Icon.H */,
-				0512326568039B9A0C5BD3DB /* Fl_File_Input.H */,
-				CEC9BC26680806AD2B47C07F /* Fl_Fill_Dial.H */,
-				BDEA9C0CFFA25A943140F7FC /* Fl_Fill_Slider.H */,
-				00CAAA52DC3193E1133AE26C /* Fl_Float_Input.H */,
-				E82DD2B5676CF315E945AF23 /* Fl_FormsBitmap.H */,
-				B145D961F04ADDCF78EFDFD1 /* Fl_FormsPixmap.H */,
-				9D938B561E268ECE660B88D2 /* Fl_Free.H */,
-				BF88B604F8342EF96DFF5AEA /* Fl_Group.H */,
-				A36535CFF8B14BA8B087A880 /* Fl_Hold_Browser.H */,
-				EE6507EFCDDA13ACF9373E3E /* Fl_Hor_Fill_Slider.H */,
-				21094B942E7FBFBCF1679259 /* Fl_Hor_Nice_Slider.H */,
-				AE1717E43F50EBA343960B1E /* Fl_Hor_Slider.H */,
-				5B8BFBDF9C48A998F0781C9E /* Fl_Hor_Value_Slider.H */,
-				332598626430923370C48554 /* Fl_Image.H */,
-				7FA5C2C1192FAEE300519823 /* Fl_Image_Surface.H */,
-				EFEEE679374D7E4191873447 /* Fl_Input.H */,
-				A5166C3C9311628F6E450095 /* Fl_Input_.H */,
-				648E9C3B61328280244FCCA5 /* Fl_Input_Choice.H */,
-				1CFFC165E8EE6C1AD9CFD33C /* Fl_Int_Input.H */,
-				B6A59F303E6D6C2EE4481D78 /* Fl_Light_Button.H */,
-				790078FB2B75406B2E250E59 /* Fl_Line_Dial.H */,
-				75DEA03FA1E1CA10E4AF212A /* Fl_Menu.H */,
-				8985E851BEC6BB2BC613E5AD /* Fl_Menu_.H */,
-				1DBDBB6B583C028BD8D1D2F4 /* Fl_Menu_Bar.H */,
-				97A233FBA4B73A1CA45A1388 /* Fl_Menu_Button.H */,
-				A0224B94F206123F3583F2A3 /* Fl_Menu_Item.H */,
-				8DFB9E7E8DB3AEC762613348 /* Fl_Menu_Window.H */,
-				B707DB501C8702446FA24146 /* Fl_Multi_Browser.H */,
-				D513CAE8AAED897D6B3B72F7 /* Fl_Multi_Label.H */,
-				8A322CF28E7EAA76A260345A /* Fl_Multiline_Input.H */,
-				AC5B933E5C802F33BC495FF8 /* Fl_Multiline_Output.H */,
-				F91DEF40DC3592BE52CAB001 /* Fl_Native_File_Chooser.H */,
-				F8990CDEFF54C483BD6BF716 /* Fl_Nice_Slider.H */,
-				EE2FB1F7B99BE408E1B4DFB7 /* Fl_Object.H */,
-				D585CB55BDA143D343033352 /* Fl_Output.H */,
-				1FCDDD4E00F7CAA8193CAE04 /* Fl_Overlay_Window.H */,
-				52C3B1D0A473BDC01D497917 /* Fl_Pack.H */,
-				B8455C1BD96FF6FB3C197C34 /* Fl_Pixmap.H */,
-				A8F89055CABBCFECCC4CC940 /* Fl_Plugin.H */,
-				20A898FCF6349F72BABDC497 /* Fl_Positioner.H */,
-				C9EDD5B11274C4FA00ADB21C /* Fl_PostScript.H */,
-				91173358E60D137409651286 /* Fl_Preferences.H */,
-				A694A1F3298E15E532C3F784 /* Fl_Printer.H */,
-				4CD4094D8712818EACF5C7C5 /* Fl_Progress.H */,
-				1072C2A463FBCF2C5E278649 /* Fl_RGB_Image.H */,
-				59EAC37D26FEC2AB49D79C08 /* Fl_Radio_Button.H */,
-				03D5B076E8097600496915F7 /* Fl_Radio_Light_Button.H */,
-				FD1BB104911A6726B02EEE37 /* Fl_Radio_Round_Button.H */,
-				4F64CD29833871B09CCB278E /* Fl_Repeat_Button.H */,
-				CFE13249EA12A63C478888A8 /* Fl_Return_Button.H */,
-				9961D74307F5B7D0FE016FC7 /* Fl_Roller.H */,
-				270962DA6A7684128875ADDE /* Fl_Round_Button.H */,
-				461BBD068DF8C58F4FFB131B /* Fl_Round_Clock.H */,
-				EC2BAEE540612218DC9EEC75 /* Fl_Scroll.H */,
-				28F3E4EBB6E5F8420624A5DA /* Fl_Scrollbar.H */,
-				42FEA3A2967D04217C27FA61 /* Fl_Secret_Input.H */,
-				9DA766AE10DC532F3D0401A2 /* Fl_Select_Browser.H */,
-				A46A39199806D09CE0ABEE59 /* Fl_Shared_Image.H */,
-				9B57B581401BD8575BFAF2F1 /* Fl_Simple_Counter.H */,
-				0EC11A5CAD4E3607A72BEF84 /* Fl_Single_Window.H */,
-				F2E5612A81A6E8D53ED91CAE /* Fl_Slider.H */,
-				76DD2676B757CB7F19B6EF94 /* Fl_Spinner.H */,
-				A71FBABB9EC90A680225B485 /* Fl_Sys_Menu_Bar.H */,
-				70CEC1A84E24275F0861403F /* Fl_Table.H */,
-				0CFB24E7079EC601366BCECF /* Fl_Table_Row.H */,
-				B8166E088FC996C9A89D2D37 /* Fl_Tabs.H */,
-				50E8E04A4389A8A2DAB7C53B /* Fl_Text_Buffer.H */,
-				64C9C1F20285A471398A7818 /* Fl_Text_Display.H */,
-				3E092095198BF5104BE09D78 /* Fl_Text_Editor.H */,
-				FAA6BA6E4DC1AF28F5FC8466 /* Fl_Tile.H */,
-				72C56BE76B2ECF1908249803 /* Fl_Tiled_Image.H */,
-				DCEE2710A7119519AEF640AD /* Fl_Timer.H */,
-				B7E85200DC5E9EBB605EE1CB /* Fl_Toggle_Button.H */,
-				79EE61E7DCB96EF56E71DD19 /* Fl_Toggle_Light_Button.H */,
-				A2C688326DDAF4AA29EA9120 /* Fl_Toggle_Round_Button.H */,
-				8C5CB5680264401FDA1C693C /* Fl_Tooltip.H */,
-				5E0EC227A972D2E4F34A2CEB /* Fl_Tree.H */,
-				0BD550D5F4A9E53E93B19234 /* Fl_Tree_Item.H */,
-				CCDF80CC7D27689DDC83FBA1 /* Fl_Tree_Item_Array.H */,
-				7E51DAB7D0F93ACFB736EE9A /* Fl_Tree_Prefs.H */,
-				F8BAA8B283D4CF4D904B6486 /* Fl_Valuator.H */,
-				FF88A1DACCAFA2D143A7F234 /* Fl_Value_Input.H */,
-				71034AFDF079B24D53146252 /* Fl_Value_Output.H */,
-				80D58C2358E8BBA86A8ADB7C /* Fl_Value_Slider.H */,
-				5426FC8371108CE8BCAB85B2 /* Fl_Widget.H */,
-				F98FE04C081FB5B1161C546C /* Fl_Window.H */,
-				A57A8421086F1F0F9906B692 /* Fl_Wizard.H */,
-				D2DE1079C826533A91053A9C /* Fl_XBM_Image.H */,
-				1433F1B8C4085D5D5E1BA0E1 /* Fl_XPM_Image.H */,
-				E448719A354B3D80FD2E1992 /* dirent.h */,
-				AF65626F49A71525D24ED1B0 /* filename.H */,
-				87259ACF8723616344D9AEB2 /* fl_ask.H */,
-				2621527FD926C67B778C41F3 /* fl_draw.H */,
-				A8B7D1DA9AAC707EBD991D57 /* fl_message.H */,
-				7574410DEB61AC3D68A6C137 /* fl_show_colormap.H */,
-				EFAE92A1C7CA90BC56E5A70A /* fl_show_input.H */,
-				B719FC0289E54CA915BC0B94 /* fl_types.h */,
-				4F46F93E8F77640543107453 /* fl_utf8.h */,
-				AC13C8877FA6231BEBF524FD /* mac.H */,
-				1D499CE6ECA4995EEA46EAD7 /* math.h */,
-				D5CE28437ABB8513BE08AC77 /* names.h */,
-				62281FC096BA407C4F1E6824 /* win32.H */,
-				83CED42A779FA76E98D37CA8 /* x.H */,
-				4CABCBB89F9DD5CF57BB9779 /* Fl_Paged_Device.H */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		B41ED46FB39CBC4D7E97E288 /* pack */ = {
-			isa = PBXGroup;
-			children = (
-				D61E50ED41D81EACABE589BD /* pack.cxx */,
-			);
-			name = pack;
-			sourceTree = "<group>";
-		};
-		B645183C458896585A17BF6A /* utf8 */ = {
-			isa = PBXGroup;
-			children = (
-				AB154476769DB7F2247ADEF9 /* utf8.cxx */,
-			);
-			name = utf8;
-			sourceTree = "<group>";
-		};
-		BAE42AF0AC6E0EC34FB8750B /* color_chooser */ = {
-			isa = PBXGroup;
-			children = (
-				45B993D3FA0EED6037499D3A /* color_chooser.cxx */,
-			);
-			name = color_chooser;
-			sourceTree = "<group>";
-		};
-		BEE79D5F81FCFD58913D4DDB /* keyboard */ = {
-			isa = PBXGroup;
-			children = (
-				37F324F95525339860AEED24 /* keyboard.cxx */,
-				7B084447C58E292798B27283 /* keyboard_ui.fl */,
-			);
-			name = keyboard;
-			sourceTree = "<group>";
-		};
-		C5C0B10B46A8037DE3AA3CCC /* rotated_text */ = {
-			isa = PBXGroup;
-			children = (
-				48A8DC166D69EDC6F24AE678 /* rotated_text.cxx */,
-			);
-			name = rotated_text;
-			sourceTree = "<group>";
-		};
-		C820F3AA4A638E480E8671B0 /* checkers */ = {
-			isa = PBXGroup;
-			children = (
-				67989D22AB6482C5B577D395 /* checkers.cxx */,
-			);
-			name = checkers;
-			sourceTree = "<group>";
-		};
-		C9165ED21291A327003FF4F0 /* unittests */ = {
-			isa = PBXGroup;
-			children = (
-				C9165ED31291A376003FF4F0 /* unittests.cxx */,
-			);
-			name = unittests;
-			sourceTree = "<group>";
-		};
-		C9628FFA1274D0A1007D3CFE /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				7FED8F161AD699C700276ED9 /* blocks.icns */,
-				7FED8F191AD69B4200276ED9 /* checkers.icns */,
-				7FED8F1B1AD69B5B00276ED9 /* sudoku.icns */,
-				7F92031816B1A909000FC50F /* English.lproj */,
-				7F92031B16B1A909000FC50F /* French.lproj */,
-				7F92031E16B1A909000FC50F /* German.lproj */,
-				7F92032116B1A909000FC50F /* Italian.lproj */,
-				7F92032416B1A90A000FC50F /* Spanish.lproj */,
-				7F4762ED12D22C470073A4F9 /* ApplicationServices.framework */,
-				C9628FFD1274D0B3007D3CFE /* Cocoa.framework */,
-				C96290E51274D100007D3CFE /* OpenGL.framework */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		C9EDD4DC1274BB4100ADB21C /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				C9EDD4DE1274BB6600ADB21C /* png.h */,
-				C9EDD4DF1274BB6600ADB21C /* pngconf.h */,
-				7F2A29091338C7650033C0A6 /* pngdebug.h */,
-				7F2A29081338C7520033C0A6 /* pnginfo.h */,
-				7F2A29041338C6B80033C0A6 /* pnglibconf.h */,
-				7F2A29051338C6D40033C0A6 /* pngpriv.h */,
-				7F2A29071338C7450033C0A6 /* pngstruct.h */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		C9EDD4E21274BB7C00ADB21C /* Headers */ = {
-			isa = PBXGroup;
-			children = (
-				C9EDD4E31274BBB600ADB21C /* jconfig.h */,
-				C9EDD4E41274BBB600ADB21C /* jerror.h */,
-				C9EDD4E51274BBB600ADB21C /* jmorecfg.h */,
-				C9EDD4E61274BBB600ADB21C /* jpeglib.h */,
-			);
-			name = Headers;
-			sourceTree = "<group>";
-		};
-		CB03657E7FFCB38655AB52F0 /* table */ = {
-			isa = PBXGroup;
-			children = (
-				AB3FA145ED96A9DA69465E9F /* table.cxx */,
-			);
-			name = table;
-			sourceTree = "<group>";
-		};
-		CBA24C637614007F99A61807 /* fltk_forms */ = {
-			isa = PBXGroup;
-			children = (
-				3561F7EB989A4BBA606E380F /* Headers */,
-				34A2B3EFA6146F599E7CA80A /* forms_bitmap.cxx */,
-				07CDB54753C46D7CB01A3C8C /* forms_compatability.cxx */,
-				4036292D2024DE5622EA0D11 /* forms_free.cxx */,
-				62777DA2221D60EC8F03C905 /* forms_fselect.cxx */,
-				E954F5F2730C01DC9FD2866D /* forms_pixmap.cxx */,
-				EF7E3948AA6D39FF92C88E06 /* forms_timer.cxx */,
-			);
-			name = fltk_forms;
-			sourceTree = "<group>";
-		};
-		CBCA45CC75C8819F4660B0E0 /* scroll */ = {
-			isa = PBXGroup;
-			children = (
-				D5D41747D7B904747C2DFBB2 /* scroll.cxx */,
-			);
-			name = scroll;
-			sourceTree = "<group>";
-		};
-		CDCF4AA8885523EF295D2D27 /* Fluid */ = {
-			isa = PBXGroup;
-			children = (
-				1C04F9887FB96BE57051A4CE /* Headers */,
-				CC0C80DA4DD31B6B2DB91096 /* CodeEditor.cxx */,
-				294EA3171D358DAD00052964 /* ExternalCodeEditor_UNIX.cxx */,
-				C9F1464F0E6A4DCD77AF72B8 /* Fl_Function_Type.cxx */,
-				80E4ACCB50A295390EC9C1AB /* Fl_Group_Type.cxx */,
-				88F715478C4F84C8E55B0820 /* Fl_Menu_Type.cxx */,
-				0B800D01D215C41573FFE4DA /* Fl_Type.cxx */,
-				BF27A6A9F541DE61B19AB234 /* Fl_Widget_Type.cxx */,
-				4A588F0AA73E5324BEE111A7 /* Fl_Window_Type.cxx */,
-				C1848E31F46192797A1EEC5E /* Fluid_Image.cxx */,
-				43D9A7CD936B1382F5EA23E1 /* about_panel.cxx */,
-				09FC37C8231478832FDD1F9E /* align_widget.cxx */,
-				91E088F22E63779E9E9FA651 /* alignment_panel.cxx */,
-				052F1F0502DC2E28EA0D2405 /* code.cxx */,
-				6A61D51F0EAB5E5B09020EB5 /* factory.cxx */,
-				2333DEC98DFFAA27F3D85449 /* file.cxx */,
-				E887B4AE75EC9D885D592636 /* fluid.cxx */,
-				FEE2F6E62FECD745952CB51D /* function_panel.cxx */,
-				9CBDD66D771449423070F912 /* template_panel.cxx */,
-				D754515384F42D9E502F4A98 /* undo.cxx */,
-				102D0B1D203936477107B2D8 /* widget_panel.cxx */,
-				80CD4956321634F723D3C40B /* fluid.icns */,
-			);
-			name = Fluid;
-			sourceTree = "<group>";
-		};
-		D2331A75FD2049BA77D86D61 /* resize */ = {
-			isa = PBXGroup;
-			children = (
-				E840F8E478F4C8C6038E235B /* resize.fl */,
-			);
-			name = resize;
-			sourceTree = "<group>";
-		};
-		D4A58B6D0BEEB58E9CB0E31F /* arc */ = {
-			isa = PBXGroup;
-			children = (
-				982C59D5682A91A5959BA02F /* arc.cxx */,
-			);
-			name = arc;
-			sourceTree = "<group>";
-		};
-		DA28C614BBA1C4ED5CF6CAED /* fltk_zlib */ = {
-			isa = PBXGroup;
-			children = (
-				49F26943DBCFA9878A9C3F55 /* adler32.c */,
-				6BCDA929CD8600DE9AC516DD /* compress.c */,
-				B95D0F0F7652C2937824E87D /* crc32.c */,
-				65E5BAE2A9732DA6B4A53098 /* deflate.c */,
-				7F54C8A3130FAC4F00E736F3 /* gzclose.c */,
-				7F54C8A4130FAC4F00E736F3 /* gzlib.c */,
-				7F54C8A5130FAC4F00E736F3 /* gzread.c */,
-				7F54C8A6130FAC4F00E736F3 /* gzwrite.c */,
-				7F54C8A7130FAC4F00E736F3 /* infback.c */,
-				4B4931D88DEFF9253DD2B260 /* inffast.c */,
-				C64D06EA8317E22EE4B2376D /* inflate.c */,
-				65B20106A8A21FCCA56538F8 /* inftrees.c */,
-				D816F0ECD89EEA82EC711076 /* trees.c */,
-				7D546B243A6858F60A678FF1 /* uncompr.c */,
-				5F328DFEE7B768CF141C8E9E /* zutil.c */,
-			);
-			name = fltk_zlib;
-			sourceTree = "<group>";
-		};
-		DA36D6F398810454D33230DD /* help */ = {
-			isa = PBXGroup;
-			children = (
-				D72D2F219FB1BBA586A03EAC /* help.cxx */,
-				7F3421EB1CE8ADB7005FA821 /* help-test.html */,
-			);
-			name = help;
-			sourceTree = "<group>";
-		};
-		DA57FBC3C13128843A1A55DA /* tabs */ = {
-			isa = PBXGroup;
-			children = (
-				0C9E126B5F827C426EC22043 /* tabs.fl */,
-			);
-			name = tabs;
-			sourceTree = "<group>";
-		};
-		DCB546B00EC62A9F8CC4181A /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				B2F3E15BD31ADBA58ECD50C4 /* Fluid.app */,
-				FEB0F8FE6383384180570D94 /* fltk.framework */,
-				EA8E6EC230301E597B9D9AED /* fltk_gl.framework */,
-				E917C15E28EE293416A38C5E /* fltk_images.framework */,
-				98A16A4EC098BA7DB21E13DC /* fltk_png.framework */,
-				C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */,
-				097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */,
-				F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */,
-				376B0C1D3D0947B5EDCDE8E5 /* Demo.app */,
-				231CFE382C2134110A029AD0 /* adjuster.app */,
-				9E227FFE277CB6E4EDF05454 /* arc.app */,
-				DA8A450882FEFFAC70EE12ED /* ask.app */,
-				B356E82C48240901A8F7C688 /* bitmap.app */,
-				8A748CC814B1697A7E2F9D1A /* blocks.app */,
-				A0B57FF2A1D358159C950F7F /* boxtype.app */,
-				A36EE3451F6FA70481742D83 /* browser.app */,
-				60E0CF9ED49BBC25F1AABD5B /* button.app */,
-				DC655A6341A86C1A28FF878B /* buttons.app */,
-				61D90C98A833DD410C9D5BED /* checkers.app */,
-				D792770555866A025D314D2B /* clock.app */,
-				AA630D4D7FC09AEEA0D0424F /* colbrowser.app */,
-				16A1B66BA02AC26B38AD52A1 /* color_chooser.app */,
-				1649775917C34003C78C7576 /* cube.app */,
-				42C67E2C7BDA83D7AACF300C /* CubeView.app */,
-				F0F281028A82F2E8C2070B26 /* cursor.app */,
-				9A9DEF157A356A54D1E9B6AE /* curve.app */,
-				4B15B198B23709B54F5D52AD /* device.app */,
-				147BE92B6E470D0A80BD203D /* doublebuffer.app */,
-				3F0F366F151B9E0E2FAD0948 /* editor.app */,
-				E1BF46F43DB886EB2301F83A /* fast_slow.app */,
-				F7F5C1D22A1B4CB89BAAD201 /* file_chooser.app */,
-				B77901D4A0022EBCA148E65F /* fonts.app */,
-				FB2A2DF5FA72AD6362BEC9E1 /* forms.app */,
-				7AC3212E8EECF086DCDEEC46 /* fractals.app */,
-				A0E4F14B0B1B1BCD1307E3CC /* fullscreen.app */,
-				9CDFA6BC0C4F869C864E2EE0 /* gl_overlay.app */,
-				622198DBFF6479ED2A8B6283 /* glpuzzle.app */,
-				B91617AF27FEB2D15FA4DE42 /* hello.app */,
-				DAC97F0DCE974BD65C620792 /* help.app */,
-				9D49D6711A470C8334826252 /* iconize.app */,
-				CAEC632CEFC2CA7592EF9D74 /* image.app */,
-				D4FA9A41956E4654256AEB09 /* inactive.app */,
-				6BDBE905BDAC3374782D6E81 /* input.app */,
-				7FC91721DA7888C8A1FD762E /* input_choice.app */,
-				25F7E879F4C04CF85422D2B7 /* keyboard.app */,
-				CB23A4CE90D5A89FA2640A78 /* label.app */,
-				AC14DA2BFF3CBEE249FC2E89 /* line_style.app */,
-				71A50EE5EECC69DC5DD8BE13 /* list_visuals.app */,
-				B60604913A508E327AA6C475 /* mandelbrot.app */,
-				834EF24528E256603D6F39FF /* menubar.app */,
-				03B092065D7DE42B7F633A41 /* message.app */,
-				D82A25EBC21394EDE9AC33C4 /* minimum.app */,
-				A723C22010FFFCA978570AC5 /* navigation.app */,
-				05ECF96A7262C1F1111ABCC7 /* native-filechooser.app */,
-				02EE866C628E67B0928F7E6C /* output.app */,
-				8F40BFA65740DDA6E9240F30 /* overlay.app */,
-				F486DDB2C35BC54259F51B12 /* pack.app */,
-				1E431497B296C454015D42C2 /* pixmap_browser.app */,
-				4BDB9923B5247EC384C1E74D /* pixmap.app */,
-				9749479CF630E3B409C932A9 /* preferences.app */,
-				B1D1B6018D7240C1300914CD /* radio.app */,
-				031DE3DC995A7F7219A471E9 /* resizebox.app */,
-				020FFBC4E06A072BF8D098FB /* resize.app */,
-				6F994D2DFFEA5301950F21B3 /* rotated_text.app */,
-				9305831B5D584A1C9652C308 /* scroll.app */,
-				B5AF439E5879211072C80F19 /* shape.app */,
-				C14982C1579C0303D84E569E /* subwindow.app */,
-				9C87CC8FC8B566C55594BA36 /* sudoku.app */,
-				1F4662A0BC6D0B396E78A8B5 /* symbols.app */,
-				3DAF0F1BE5742F8D8D130AF1 /* table.app */,
-				102A2F111D6E3FEE95E5B473 /* tabs.app */,
-				BFEF05C334B87B518BFFEC1F /* threads.app */,
-				AD6E04F6F1B72EB797867D80 /* tile.app */,
-				5F4C18EEE3A4065D69073EDA /* tiled_image.app */,
-				6101F771F14EE7AEB2C917A4 /* tree.app */,
-				C05E4BE052F69E6F1FD92730 /* utf8.app */,
-				5191489A6263E11B65A57B4D /* valuators.app */,
-				C9165EAF1291A304003FF4F0 /* unittests.app */,
-				7F7CF7F51AB97CEF00E12B22 /* animated.app */,
-				7FBCECC81B1D8AA500AB970D /* libfltk.a */,
-				7F419E031D92857E0098B602 /* offscreen.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		DEEFF0DAB1B1C84940CB1666 /* clock */ = {
-			isa = PBXGroup;
-			children = (
-				5EF025FDE53B2276B6931CD5 /* clock.cxx */,
-			);
-			name = clock;
-			sourceTree = "<group>";
-		};
-		E374BDC1953587C600A7C1ED /* gl_overlay */ = {
-			isa = PBXGroup;
-			children = (
-				1F6E4CE3C0DF58D8F7B3A94A /* gl_overlay.cxx */,
-			);
-			name = gl_overlay;
-			sourceTree = "<group>";
-		};
-		E8362290A4CE5611E8AE1EE3 /* shape */ = {
-			isa = PBXGroup;
-			children = (
-				FC940D10359580615C166335 /* shape.cxx */,
-				05376DC900B2C885B847EA36 /* OpenGL.framework */,
-			);
-			name = shape;
-			sourceTree = "<group>";
-		};
-		F38AA910F089168E1F117114 /* browser */ = {
-			isa = PBXGroup;
-			children = (
-				6D999C03407EAEE9C4D3477A /* browser.cxx */,
-			);
-			name = browser;
-			sourceTree = "<group>";
-		};
-		F63D39673BEC6DF512C0855A /* menubar */ = {
-			isa = PBXGroup;
-			children = (
-				44277061B27BFBE1FB22B79B /* menubar.cxx */,
-			);
-			name = menubar;
-			sourceTree = "<group>";
-		};
-		FA238AC5C1832FED54AEDBB9 /* fullscreen */ = {
-			isa = PBXGroup;
-			children = (
-				EDE6CE6B09D31AC0AAC9FF56 /* fullscreen.cxx */,
-			);
-			name = fullscreen;
-			sourceTree = "<group>";
-		};
-		FA4A55DF9ADAC4379B066CD0 /* colbrowser */ = {
-			isa = PBXGroup;
-			children = (
-				EC5862E1FC79542DC55D8462 /* colbrowser.cxx */,
-				C9F9C0DD12CFCDAC0067ADCC /* rgb.txt */,
-			);
-			name = colbrowser;
-			sourceTree = "<group>";
-		};
-		FAB08B8D96235676F3D4167A /* subwindow */ = {
-			isa = PBXGroup;
-			children = (
-				D6DF746AE1F6A3B0D633D9D4 /* subwindow.cxx */,
-			);
-			name = subwindow;
-			sourceTree = "<group>";
-		};
-		FB469752BE558EDFA4DFDB0D /* forms */ = {
-			isa = PBXGroup;
-			children = (
-				7F784151AF1B748D0F3DB1C0 /* forms.cxx */,
-			);
-			name = forms;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
-		7A0DD0617839B6CF397E2894 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7FBCECC61B1D8AA500AB970D /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C959617F1274CE71009C0594 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C95961801274CE71009C0594 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C95961811274CE71009C0594 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				273EA940130ACF91000D6870 /* jdct.h in Headers */,
-				273EA941130ACF91000D6870 /* jinclude.h in Headers */,
-				273EA942130ACF91000D6870 /* jmemsys.h in Headers */,
-				273EA943130ACF91000D6870 /* jpegint.h in Headers */,
-				273EA944130ACF91000D6870 /* jversion.h in Headers */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C95961821274CE71009C0594 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C95961831274CE71009C0594 /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9EDD5C81274C6BA00ADB21C /* Headers */ = {
-			isa = PBXHeadersBuildPhase;
-			buildActionMask = 2147483647;
-			comments = "Copy just any file here so that the Headers link will be generated correctly.";
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXNativeTarget section */
-		0392A304CDC05B94337B7C04 /* fltk_jpeg */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 4DFF17B1DEEAE7769BD9DB6E /* Build configuration list for PBXNativeTarget "fltk_jpeg" */;
-			buildPhases = (
-				C95961811274CE71009C0594 /* Headers */,
-				962146FC5CDEC4BE6D271008 /* Resources */,
-				BBCFC69D52F84735A65BCDD5 /* Sources */,
-				BFCE3CEC6979D59AE7FA9219 /* Frameworks */,
-			);
-			buildRules = (
-				FCBC6C10182884FE8074805D /* PBXBuildRule */,
-			);
-			dependencies = (
-				64CE93723117BAD714740E8E /* PBXTargetDependency */,
-			);
-			name = fltk_jpeg;
-			productName = fltk_jpeg;
-			productReference = C39FA04F3B7CD8E53876D0F4 /* fltk_jpeg.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		0C8980D2E4E0E914FE651FDB /* shape */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = B64F4D8E43BE2B695A6AA440 /* Build configuration list for PBXNativeTarget "shape" */;
-			buildPhases = (
-				24B09083AB102172E2E1F627 /* Resources */,
-				18F09DA86ADDE918514D17A6 /* Sources */,
-				13530762CDBDDB5F7449DA03 /* Frameworks */,
-				14A08E6CA7240FE82E333C23 /* CopyFiles */,
-			);
-			buildRules = (
-				CF4751DEBDE3C22D982B8429 /* PBXBuildRule */,
-			);
-			dependencies = (
-				4F13E94456DB0964E9840BF5 /* PBXTargetDependency */,
-				AC5D3D581EBB10175A439164 /* PBXTargetDependency */,
-			);
-			name = shape;
-			productName = shape;
-			productReference = B5AF439E5879211072C80F19 /* shape.app */;
-			productType = "com.apple.product-type.application";
-		};
-		0F789352A34B2A230259EEC7 /* keyboard */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C49C9AEC4E153FF1F438EEC9 /* Build configuration list for PBXNativeTarget "keyboard" */;
-			buildPhases = (
-				47783618090233D5416F2DEF /* Resources */,
-				A9F3B962D05C4127BE8E2467 /* Sources */,
-				5629C4658F961F63F8722841 /* Frameworks */,
-				7E4AA34087EC5D05E668DA08 /* CopyFiles */,
-			);
-			buildRules = (
-				301017A593039062A0300327 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C9194CA7B68C9A7ADE662A15 /* PBXTargetDependency */,
-				40F85CC5FC583F5EC51A89EE /* PBXTargetDependency */,
-			);
-			name = keyboard;
-			productName = keyboard;
-			productReference = 25F7E879F4C04CF85422D2B7 /* keyboard.app */;
-			productType = "com.apple.product-type.application";
-		};
-		10F40C4AE712B17C78435935 /* cube */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 5F820F5FBA3ED8ABDE57AAE1 /* Build configuration list for PBXNativeTarget "cube" */;
-			buildPhases = (
-				C46B78D74FA9483926E73794 /* Resources */,
-				44D64FC34C530A55BD691A3D /* Sources */,
-				23861E5380A11BE627598F2D /* Frameworks */,
-				AC00EF2D1E13D99AE18A1362 /* CopyFiles */,
-			);
-			buildRules = (
-				652992AA1B44CEFF67624A6C /* PBXBuildRule */,
-			);
-			dependencies = (
-				6BFA4628FD9A6604E6911D41 /* PBXTargetDependency */,
-				BF9303986B2A6CE21BF6D58A /* PBXTargetDependency */,
-			);
-			name = cube;
-			productName = cube;
-			productReference = 1649775917C34003C78C7576 /* cube.app */;
-			productType = "com.apple.product-type.application";
-		};
-		134239549D6BFAC3F8EFC363 /* colbrowser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 63C3E22864C6E764E4AA33F4 /* Build configuration list for PBXNativeTarget "colbrowser" */;
-			buildPhases = (
-				0C15FF58F09823C404F6D72D /* Resources */,
-				8E1D2CE3E0A37D2A4BE6549C /* Sources */,
-				397A942BDACFB7D2933E8EC7 /* Frameworks */,
-				AC36F687FDBF8CCF542C6369 /* CopyFiles */,
-			);
-			buildRules = (
-				1F42D5CB6D0F6DC50A74E876 /* PBXBuildRule */,
-			);
-			dependencies = (
-				D3670191A18D37C113A0FC04 /* PBXTargetDependency */,
-				23DC21EA3C7C8E8AD302CAC2 /* PBXTargetDependency */,
-			);
-			name = colbrowser;
-			productName = colbrowser;
-			productReference = AA630D4D7FC09AEEA0D0424F /* colbrowser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		17B95BDCBCADC140B2AB54A7 /* curve */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 0AB8F12E20FB744E948579D8 /* Build configuration list for PBXNativeTarget "curve" */;
-			buildPhases = (
-				C82F55B77BDFE26B6897FE76 /* Resources */,
-				B3C7593F2CD0B2D3A45A6B7B /* Sources */,
-				53B84C2A0E8BD84ADF4C6A70 /* Frameworks */,
-				F60480C83F372B1B229B0489 /* CopyFiles */,
-			);
-			buildRules = (
-				65E3A0E21746785762F84E3E /* PBXBuildRule */,
-			);
-			dependencies = (
-				A930588839D7D95C5A94D166 /* PBXTargetDependency */,
-			);
-			name = curve;
-			productName = curve;
-			productReference = 9A9DEF157A356A54D1E9B6AE /* curve.app */;
-			productType = "com.apple.product-type.application";
-		};
-		1B8EEEC5C9C85BA44EF759EB /* preferences */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 7EB07B3968A20B4E608A072F /* Build configuration list for PBXNativeTarget "preferences" */;
-			buildPhases = (
-				909C7B633C6937F4878B24B8 /* Resources */,
-				9FE426FAA5E5F10006D2500D /* Sources */,
-				754E0075C0FCCF4310791FF6 /* Frameworks */,
-				AA5B19C0922A68B64E2EA35A /* CopyFiles */,
-			);
-			buildRules = (
-				3891F9F4F50DF109D3949E8F /* PBXBuildRule */,
-			);
-			dependencies = (
-				989096964BDCB4782739734F /* PBXTargetDependency */,
-				458F29EA6AF2259C8FE26501 /* PBXTargetDependency */,
-			);
-			name = preferences;
-			productName = preferences;
-			productReference = 9749479CF630E3B409C932A9 /* preferences.app */;
-			productType = "com.apple.product-type.application";
-		};
-		22F83D75D3AC309504978002 /* symbols */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = F418709849B5B9E10E73DC7B /* Build configuration list for PBXNativeTarget "symbols" */;
-			buildPhases = (
-				BE10458E3BD00A1A721471A1 /* Resources */,
-				C303B0FD8B83D6016B4CE2EB /* Sources */,
-				F97F40E8EFCECE5112944E56 /* Frameworks */,
-				4DA6FB6930E09E022DC859E0 /* CopyFiles */,
-			);
-			buildRules = (
-				B3E0B9A961017B0A1800BFDD /* PBXBuildRule */,
-			);
-			dependencies = (
-				E99D1402227FFD90FC8A2C1D /* PBXTargetDependency */,
-			);
-			name = symbols;
-			productName = symbols;
-			productReference = 1F4662A0BC6D0B396E78A8B5 /* symbols.app */;
-			productType = "com.apple.product-type.application";
-		};
-		234377F13A1D2CBBCF9E5043 /* gl_overlay */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 60536F86E7CBDCD693F71324 /* Build configuration list for PBXNativeTarget "gl_overlay" */;
-			buildPhases = (
-				5E63597A6F22F3C5EAE6C3F2 /* Resources */,
-				1249EDBFF7D5FD2128B9D60E /* Sources */,
-				DDB37BA0CD8277076D274ED1 /* Frameworks */,
-				0829584030C9C26BEFB229A7 /* CopyFiles */,
-			);
-			buildRules = (
-				2DDCE940376FADC512A8157B /* PBXBuildRule */,
-			);
-			dependencies = (
-				5E4D4B6AC7748B1319BBEC57 /* PBXTargetDependency */,
-				21B7AD6C21467F0669BA0F66 /* PBXTargetDependency */,
-			);
-			name = gl_overlay;
-			productName = gl_overlay;
-			productReference = 9CDFA6BC0C4F869C864E2EE0 /* gl_overlay.app */;
-			productType = "com.apple.product-type.application";
-		};
-		26B873E37B315C0F7BABC202 /* message */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 849D88C39AA4E730673CA22B /* Build configuration list for PBXNativeTarget "message" */;
-			buildPhases = (
-				2DDE7E43CDF1C00459675F35 /* Resources */,
-				388F82757706F801E753A331 /* Sources */,
-				9C7CA6D4037898CD7804CB21 /* Frameworks */,
-				51707CB30925230AD314321F /* CopyFiles */,
-			);
-			buildRules = (
-				28DBEEA25FA7FE0EC411DB93 /* PBXBuildRule */,
-			);
-			dependencies = (
-				3C1DA919DDED1732B8939051 /* PBXTargetDependency */,
-			);
-			name = message;
-			productName = message;
-			productReference = 03B092065D7DE42B7F633A41 /* message.app */;
-			productType = "com.apple.product-type.application";
-		};
-		287CEC5F63A8B5FCDA246BEC /* checkers */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 30AD0627958F0B172EBFD4E0 /* Build configuration list for PBXNativeTarget "checkers" */;
-			buildPhases = (
-				6E029D85A424DB0449238C6D /* Resources */,
-				E24ECE8AB4045DE6374E0837 /* Sources */,
-				1F21FE9DA1341F0A3E229EA6 /* Frameworks */,
-				6A8C020314852B71FAC02D75 /* CopyFiles */,
-			);
-			buildRules = (
-				0E24314051741168928705E7 /* PBXBuildRule */,
-			);
-			dependencies = (
-				24016FD996EF689BD7E5BF30 /* PBXTargetDependency */,
-			);
-			name = checkers;
-			productName = checkers;
-			productReference = 61D90C98A833DD410C9D5BED /* checkers.app */;
-			productType = "com.apple.product-type.application";
-		};
-		28919176E960D4209BAB8420 /* ask */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 578FD06BD28D0AAEDD28C122 /* Build configuration list for PBXNativeTarget "ask" */;
-			buildPhases = (
-				1D39966685B7BBFD995AA3A9 /* Resources */,
-				AB7685177F94CB7B42B5CAB1 /* Sources */,
-				94982D6875FE027B56667AFE /* Frameworks */,
-				501EEF6F6EE53AC62D5C2D1A /* CopyFiles */,
-			);
-			buildRules = (
-				D083976BDA11FB140D92C9D8 /* PBXBuildRule */,
-			);
-			dependencies = (
-				BCE99B468058A739E9B61BA6 /* PBXTargetDependency */,
-			);
-			name = ask;
-			productName = ask;
-			productReference = DA8A450882FEFFAC70EE12ED /* ask.app */;
-			productType = "com.apple.product-type.application";
-		};
-		2A6B003A80FBAF126EC8F448 /* browser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 09DE2CF8947C6D4CA4D879E4 /* Build configuration list for PBXNativeTarget "browser" */;
-			buildPhases = (
-				025AF787C2B449CCA5E2DB88 /* Resources */,
-				FD1A7D2F7532522CCF2B0FFB /* Sources */,
-				5CEB6CB961822D1167C891C6 /* Frameworks */,
-				B1608C348129813E176E8357 /* CopyFiles */,
-				C99FD8E112D2A295002FC776 /* CopyFiles */,
-			);
-			buildRules = (
-				982E85D9644C6688DAA59FCA /* PBXBuildRule */,
-			);
-			dependencies = (
-				985D5E9B1C796A47558B65A2 /* PBXTargetDependency */,
-			);
-			name = browser;
-			productName = browser;
-			productReference = A36EE3451F6FA70481742D83 /* browser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		2BFE084E4D6FAB77DCAF0A83 /* utf8 */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A4652FECF78110792F659563 /* Build configuration list for PBXNativeTarget "utf8" */;
-			buildPhases = (
-				41EB235F15F87678F80C27D5 /* Resources */,
-				089522EE9936A885D43F4780 /* Sources */,
-				48936A0BAF73A797A4E583C6 /* Frameworks */,
-				AE6382154736E22FC10B2BF0 /* CopyFiles */,
-			);
-			buildRules = (
-				FD1A4483F5D5031BBD4AFAF1 /* PBXBuildRule */,
-			);
-			dependencies = (
-				DEE249A5C3995E37C311ACC5 /* PBXTargetDependency */,
-			);
-			name = utf8;
-			productName = utf8;
-			productReference = C05E4BE052F69E6F1FD92730 /* utf8.app */;
-			productType = "com.apple.product-type.application";
-		};
-		2D69D33A1EBE0D85982EDCC1 /* device */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 8FE512A926E636412F9718E9 /* Build configuration list for PBXNativeTarget "device" */;
-			buildPhases = (
-				E0451824DAF0D20812D766A5 /* Resources */,
-				8DF30D1FB799A4839AD06D9C /* Sources */,
-				5019B6D11435AFE05418E253 /* Frameworks */,
-				E77D972F65E2ABE29A94026B /* CopyFiles */,
-			);
-			buildRules = (
-				761E8D6D2C68CDD078F3185D /* PBXBuildRule */,
-			);
-			dependencies = (
-				451B9D05BCC7D1AF1251072C /* PBXTargetDependency */,
-				CCA3ACABF38B2112B510DAFD /* PBXTargetDependency */,
-				DEB97684C5BB8ADF31FAF9E1 /* PBXTargetDependency */,
-				1959744778B13AD2D41E15F0 /* PBXTargetDependency */,
-				A0D5953930963267152D4CDB /* PBXTargetDependency */,
-			);
-			name = device;
-			productName = device;
-			productReference = 4B15B198B23709B54F5D52AD /* device.app */;
-			productType = "com.apple.product-type.application";
-		};
-		32FF2A1069F117986FB927DD /* CubeView */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 10E8C646A26F3D15F7CE2445 /* Build configuration list for PBXNativeTarget "CubeView" */;
-			buildPhases = (
-				453EA7CD7A8F555E59EEB31E /* Resources */,
-				AE72E157EDEC719D65C86CBA /* Sources */,
-				B1A0582764DD0D00E2CF06D6 /* Frameworks */,
-				0076EE9F69217E04A9895FD8 /* CopyFiles */,
-			);
-			buildRules = (
-				CD536C27425E520D78677840 /* PBXBuildRule */,
-			);
-			dependencies = (
-				9C6257397491DB42B84052A8 /* PBXTargetDependency */,
-				108DA4F7F3564841688F504F /* PBXTargetDependency */,
-				AB079DD83076897253B672E1 /* PBXTargetDependency */,
-			);
-			name = CubeView;
-			productName = CubeView;
-			productReference = 42C67E2C7BDA83D7AACF300C /* CubeView.app */;
-			productType = "com.apple.product-type.application";
-		};
-		35F2A3666BFB337E150860D9 /* pack */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = E1CADB24DFF6C42C5ED02370 /* Build configuration list for PBXNativeTarget "pack" */;
-			buildPhases = (
-				FD29247E410EF80C9A411BF2 /* Resources */,
-				C44E397D98E5790C6B078D92 /* Sources */,
-				B6F3107B7FE73A3FEC52224A /* Frameworks */,
-				7F785E28BCEA44FDC7C10F65 /* CopyFiles */,
-			);
-			buildRules = (
-				8D4B04281B4168536936E2C4 /* PBXBuildRule */,
-			);
-			dependencies = (
-				7F9611BCAC5D5A43DF75FE3B /* PBXTargetDependency */,
-			);
-			name = pack;
-			productName = pack;
-			productReference = F486DDB2C35BC54259F51B12 /* pack.app */;
-			productType = "com.apple.product-type.application";
-		};
-		36F787DB6844466ACF848593 /* image */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 45BDA5E071E42FD9FFB3C6E0 /* Build configuration list for PBXNativeTarget "image" */;
-			buildPhases = (
-				BD1A94F2F267D5669C20C1F8 /* Resources */,
-				25A0A1371179487A2E32B9B1 /* Sources */,
-				9030F08B63879C80A3526EA6 /* Frameworks */,
-				8867D980D3F5085D34A6DF7B /* CopyFiles */,
-			);
-			buildRules = (
-				ABF5C70741CF19DEE1D8CC17 /* PBXBuildRule */,
-			);
-			dependencies = (
-				E6DC2B9D7282D7184A543B86 /* PBXTargetDependency */,
-			);
-			name = image;
-			productName = image;
-			productReference = CAEC632CEFC2CA7592EF9D74 /* image.app */;
-			productType = "com.apple.product-type.application";
-		};
-		3C13C653905795060D6D4F0A /* fltk_forms */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = EC317A6F79ABF37DA0CB2C7D /* Build configuration list for PBXNativeTarget "fltk_forms" */;
-			buildPhases = (
-				C959617F1274CE71009C0594 /* Headers */,
-				D974AB8D7C7B0B0E64AE7431 /* Resources */,
-				2C8CFF851D7C7DC1D9609D17 /* Sources */,
-				2F7C132F675A343668269C51 /* Frameworks */,
-			);
-			buildRules = (
-				548C09CAA724A9BDFAE7F711 /* PBXBuildRule */,
-			);
-			dependencies = (
-				B2295006135485171CE465A0 /* PBXTargetDependency */,
-			);
-			name = fltk_forms;
-			productName = fltk_forms;
-			productReference = 097D0B476E396B9AAC6FA1E0 /* fltk_forms.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		3C6AD358F2FC5419FDA04243 /* fractals */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A886EF55A1943DA05FFEB475 /* Build configuration list for PBXNativeTarget "fractals" */;
-			buildPhases = (
-				A50661091E02301A7A8E927C /* Resources */,
-				FE06963F6457A6A7B3BB6CC3 /* Sources */,
-				B0A4EC6B481653C20502CE77 /* Frameworks */,
-				CAC749CC825FEBDDCDF3BB42 /* CopyFiles */,
-			);
-			buildRules = (
-				A013DC2CF3856CB94268AE70 /* PBXBuildRule */,
-			);
-			dependencies = (
-				CD79361F0DFBF22FA651B064 /* PBXTargetDependency */,
-				C65D41CD33252E71A18F9E40 /* PBXTargetDependency */,
-				508B7D2FCF4F327C445AF30E /* PBXTargetDependency */,
-			);
-			name = fractals;
-			productName = fractals;
-			productReference = 7AC3212E8EECF086DCDEEC46 /* fractals.app */;
-			productType = "com.apple.product-type.application";
-		};
-		43080284D40D3965685C7975 /* bitmap */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = F026FBF218BBE6275FABB07D /* Build configuration list for PBXNativeTarget "bitmap" */;
-			buildPhases = (
-				49A1C42C8800EB4734DB7148 /* Resources */,
-				CA99DB1AAB6C9D1F7D21B324 /* Sources */,
-				C6EB2070445B615839F89673 /* Frameworks */,
-				4057014FB3ED183E35AC2A9F /* CopyFiles */,
-			);
-			buildRules = (
-				E1C07CC4186CD56115EBB4A4 /* PBXBuildRule */,
-			);
-			dependencies = (
-				ECB22B820DE64A50DC95950B /* PBXTargetDependency */,
-			);
-			name = bitmap;
-			productName = bitmap;
-			productReference = B356E82C48240901A8F7C688 /* bitmap.app */;
-			productType = "com.apple.product-type.application";
-		};
-		4D6391C0735EF1A5A8588826 /* inactive */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 4DF452C4C84D66DAE967E8D8 /* Build configuration list for PBXNativeTarget "inactive" */;
-			buildPhases = (
-				9ECB20D6CCF567B51F39E9B8 /* Resources */,
-				C7CE88E302A5A06FA961EE03 /* Sources */,
-				94197F306510CE8725621C3B /* Frameworks */,
-				306E9117A2B61C335FFD6E00 /* CopyFiles */,
-			);
-			buildRules = (
-				57D7CC1ABEE0B3D17D5C6598 /* PBXBuildRule */,
-			);
-			dependencies = (
-				951CA1D37E7F30B53E37B095 /* PBXTargetDependency */,
-				A4998C89B3F97B12351CECCD /* PBXTargetDependency */,
-			);
-			name = inactive;
-			productName = inactive;
-			productReference = D4FA9A41956E4654256AEB09 /* inactive.app */;
-			productType = "com.apple.product-type.application";
-		};
-		4F654080B01E856B05662A65 /* list_visuals */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 40ABC9F9C1893101D51EC8A9 /* Build configuration list for PBXNativeTarget "list_visuals" */;
-			buildPhases = (
-				EF8251CF9948AB8AC2403411 /* Resources */,
-				214690E38E9696C46A3A3BA2 /* Sources */,
-				DB4C8357BEECBE10BF9D0FD1 /* Frameworks */,
-				F70F38AB9D113DA6356470D5 /* CopyFiles */,
-			);
-			buildRules = (
-				C1904C28B5CE35B07158E988 /* PBXBuildRule */,
-			);
-			dependencies = (
-				10141CAE15AA2FEDF30B868E /* PBXTargetDependency */,
-			);
-			name = list_visuals;
-			productName = list_visuals;
-			productReference = 71A50EE5EECC69DC5DD8BE13 /* list_visuals.app */;
-			productType = "com.apple.product-type.application";
-		};
-		51EB382683C25DBDD02CBF33 /* navigation */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 86C4D9AB7C491973FBD6A7C7 /* Build configuration list for PBXNativeTarget "navigation" */;
-			buildPhases = (
-				0EAD40FA79F67B287A4151C4 /* Resources */,
-				6D73F5D2BE42E5D25C1A55E6 /* Sources */,
-				18EAA5F2A56ED2A22B88AB3A /* Frameworks */,
-				371773C8CC1E1C48D0F37E46 /* CopyFiles */,
-			);
-			buildRules = (
-				8E7AE12FD65EDD3896233D45 /* PBXBuildRule */,
-			);
-			dependencies = (
-				2A15651B16984E0B7289E23A /* PBXTargetDependency */,
-			);
-			name = navigation;
-			productName = navigation;
-			productReference = A723C22010FFFCA978570AC5 /* navigation.app */;
-			productType = "com.apple.product-type.application";
-		};
-		57D7735B02F5215416BA2856 /* button */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = FA507A3C0FD8498C57328CB7 /* Build configuration list for PBXNativeTarget "button" */;
-			buildPhases = (
-				244AADC40042B9AE67B44E1E /* Resources */,
-				F0FC15CF7E2C645298AA880D /* Sources */,
-				303C1CE4669DAD2C9F8F0C63 /* Frameworks */,
-				4BE6D5F8C329F05C4C3EC8CF /* CopyFiles */,
-			);
-			buildRules = (
-				D86D6226DD40681D9B54350C /* PBXBuildRule */,
-			);
-			dependencies = (
-				B33485D7E60A40F772A693BD /* PBXTargetDependency */,
-			);
-			name = button;
-			productName = button;
-			productReference = 60E0CF9ED49BBC25F1AABD5B /* button.app */;
-			productType = "com.apple.product-type.application";
-		};
-		5C2FE9F5E71E04EA903248FA /* input */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = D9330C3D2D7044DC219B4892 /* Build configuration list for PBXNativeTarget "input" */;
-			buildPhases = (
-				54D5AC0D48D4411B05695216 /* Resources */,
-				EAC8B423D0029678B9FAFB6E /* Sources */,
-				E4D14F08336AFBA60DD45CA5 /* Frameworks */,
-				4C00F1A541DB0309E475CCD3 /* CopyFiles */,
-			);
-			buildRules = (
-				6D1DD8869E361DBE10664098 /* PBXBuildRule */,
-			);
-			dependencies = (
-				82E0DFF50110278E50948124 /* PBXTargetDependency */,
-			);
-			name = input;
-			productName = input;
-			productReference = 6BDBE905BDAC3374782D6E81 /* input.app */;
-			productType = "com.apple.product-type.application";
-		};
-		5E088B3BCE2A52C627EC5A53 /* menubar */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = EF70972986AA16D10B93D7F9 /* Build configuration list for PBXNativeTarget "menubar" */;
-			buildPhases = (
-				36BFACF5FF774BDDC57C7347 /* Resources */,
-				09905312FF08B2C58A02A353 /* Sources */,
-				BF4BCD66FF92558ECBB90264 /* Frameworks */,
-				4D9E076267C3DC4609607456 /* CopyFiles */,
-			);
-			buildRules = (
-				3EEA1DF0AC217D17846B7C36 /* PBXBuildRule */,
-			);
-			dependencies = (
-				8EF8C44C93BBBD0B92E8819D /* PBXTargetDependency */,
-			);
-			name = menubar;
-			productName = menubar;
-			productReference = 834EF24528E256603D6F39FF /* menubar.app */;
-			productType = "com.apple.product-type.application";
-		};
-		5FF6CC4785D964CE080FB494 /* minimum */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 13825A9A9EAAB8D06916F544 /* Build configuration list for PBXNativeTarget "minimum" */;
-			buildPhases = (
-				0B490364219A1412F38C7304 /* Resources */,
-				68D98A2534544E1210E8A095 /* Sources */,
-				02FA7389A064545471C990E9 /* Frameworks */,
-				EB69EF8BBB5C5E7FC00CC490 /* CopyFiles */,
-			);
-			buildRules = (
-				4A80EFD6E65564718862AF83 /* PBXBuildRule */,
-			);
-			dependencies = (
-				F3CCF87201B614B0B3F39D9B /* PBXTargetDependency */,
-			);
-			name = minimum;
-			productName = minimum;
-			productReference = D82A25EBC21394EDE9AC33C4 /* minimum.app */;
-			productType = "com.apple.product-type.application";
-		};
-		623691BDB3A292582380383B /* clock */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 4B3D493FF7A60ED3D1FDDCE5 /* Build configuration list for PBXNativeTarget "clock" */;
-			buildPhases = (
-				1D6F019214F0C661CF5C1657 /* Resources */,
-				06DCEBFB206D700198008C01 /* Sources */,
-				629F530EF01F9248D91B409F /* Frameworks */,
-				FD23C57E5A2080DE56907411 /* CopyFiles */,
-			);
-			buildRules = (
-				3F55D22CA402FACB395177C0 /* PBXBuildRule */,
-			);
-			dependencies = (
-				FB240A00E8243538E32995F6 /* PBXTargetDependency */,
-			);
-			name = clock;
-			productName = clock;
-			productReference = D792770555866A025D314D2B /* clock.app */;
-			productType = "com.apple.product-type.application";
-		};
-		658EF1017CAE2D453B68A345 /* tabs */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 48418DF5C775AB3E6F6FB7E8 /* Build configuration list for PBXNativeTarget "tabs" */;
-			buildPhases = (
-				7E2F13E3024D0010203CE197 /* Resources */,
-				7EAC77CA2592224F5EC588DA /* Sources */,
-				4CEE36EB201A729CA4F8308A /* Frameworks */,
-				04B23EAB9E98EAB32D837A33 /* CopyFiles */,
-			);
-			buildRules = (
-				BFF2FB5ADE21855F8BE7F314 /* PBXBuildRule */,
-			);
-			dependencies = (
-				96045D9FFE3C054C1CB49A0A /* PBXTargetDependency */,
-				518005569327766901CAF7F7 /* PBXTargetDependency */,
-			);
-			name = tabs;
-			productName = tabs;
-			productReference = 102A2F111D6E3FEE95E5B473 /* tabs.app */;
-			productType = "com.apple.product-type.application";
-		};
-		68590AB4E7667EB94AC7533D /* file_chooser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = DC2647DB205921C128D59F3E /* Build configuration list for PBXNativeTarget "file_chooser" */;
-			buildPhases = (
-				66CA511D5A56D954BBBF42C5 /* Resources */,
-				B3EBB5C49EAE2A1EF59D75C2 /* Sources */,
-				3E3E217EB3045089288C0E64 /* Frameworks */,
-				9554B769334DB4985F944FF8 /* CopyFiles */,
-			);
-			buildRules = (
-				7CCDBCD4740B2B64A0E831B8 /* PBXBuildRule */,
-			);
-			dependencies = (
-				DF26DB6DB935FA651FC11D5A /* PBXTargetDependency */,
-				83D37E9B1C9475533DC07B07 /* PBXTargetDependency */,
-				50B361083BA2DE59262D6ECB /* PBXTargetDependency */,
-				AFD748766ACD657B1DB73EBE /* PBXTargetDependency */,
-				2E97F1406812F8BB5410C453 /* PBXTargetDependency */,
-			);
-			name = file_chooser;
-			productName = file_chooser;
-			productReference = F7F5C1D22A1B4CB89BAAD201 /* file_chooser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		6C72ECB2743615E24D873456 /* forms */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 95C5DCEFD644E8878B36D9BD /* Build configuration list for PBXNativeTarget "forms" */;
-			buildPhases = (
-				5FA2A41FABCDB9B62D65C36A /* Resources */,
-				8C060427D83A33235AB5FF84 /* Sources */,
-				8A19E9A28BE527A5F6E39CC1 /* Frameworks */,
-				219C00E2752B1FFDDB65EF50 /* CopyFiles */,
-			);
-			buildRules = (
-				E4EEF3D56A65EAD331B1F44E /* PBXBuildRule */,
-			);
-			dependencies = (
-				19FD6919E21417A233AA4028 /* PBXTargetDependency */,
-				8F3832C79C96E1FECB555158 /* PBXTargetDependency */,
-			);
-			name = forms;
-			productName = forms;
-			productReference = FB2A2DF5FA72AD6362BEC9E1 /* forms.app */;
-			productType = "com.apple.product-type.application";
-		};
-		7483E011046F1E2FC84A989B /* hello */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 8464D21CD1F613E38BAE5897 /* Build configuration list for PBXNativeTarget "hello" */;
-			buildPhases = (
-				660536C10D4E56DF6EB48879 /* Resources */,
-				AB0B75A16E609B4FFAD6DD23 /* Sources */,
-				87ADC49A3C172468203465E3 /* Frameworks */,
-				D68C5E7DBB5DD6F7FA6C3121 /* CopyFiles */,
-			);
-			buildRules = (
-				64775012DC5A16A4F05F748D /* PBXBuildRule */,
-			);
-			dependencies = (
-				CB5F037BD3DC9B4748DF5E51 /* PBXTargetDependency */,
-			);
-			name = hello;
-			productName = hello;
-			productReference = B91617AF27FEB2D15FA4DE42 /* hello.app */;
-			productType = "com.apple.product-type.application";
-		};
-		752ADA98861AB73DFEECD267 /* pixmap_browser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 248D7BEB615672F552710642 /* Build configuration list for PBXNativeTarget "pixmap_browser" */;
-			buildPhases = (
-				D5AB2E01EE1DBEB40D62B39C /* Resources */,
-				9E5C43FABE8693F6ECAE1DEF /* Sources */,
-				BC7C7DBC822503572AF5110F /* Frameworks */,
-				89E1ACE119E189BA4809B823 /* CopyFiles */,
-			);
-			buildRules = (
-				5478C5425B68BF34DFF443E2 /* PBXBuildRule */,
-			);
-			dependencies = (
-				6B2136C50413BA8C19DF72D5 /* PBXTargetDependency */,
-				804E85795C9EF63CC2CF6EEC /* PBXTargetDependency */,
-				39A16333C0303456D225EA97 /* PBXTargetDependency */,
-				2DB3BD57B2A2CC7BB107DE20 /* PBXTargetDependency */,
-				6C71F3FD9E0584E83DE581DF /* PBXTargetDependency */,
-			);
-			name = pixmap_browser;
-			productName = pixmap_browser;
-			productReference = 1E431497B296C454015D42C2 /* pixmap_browser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		78DE657148EC00153D1103A8 /* output */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = B50177A3B96B7A5E7E829C83 /* Build configuration list for PBXNativeTarget "output" */;
-			buildPhases = (
-				882A2E3BF32AE727EC05BFE2 /* Resources */,
-				3CEBD96B1A8A5379FADF1440 /* Sources */,
-				EF68016EAAEAC9E766CB414B /* Frameworks */,
-				1ABBC52FB651077E2CDC1703 /* CopyFiles */,
-			);
-			buildRules = (
-				960DC46967BA8A6B378D6F1A /* PBXBuildRule */,
-			);
-			dependencies = (
-				18EBAE4E755ABC5749877991 /* PBXTargetDependency */,
-				17BD393152AF74CFFC598F77 /* PBXTargetDependency */,
-			);
-			name = output;
-			productName = output;
-			productReference = 02EE866C628E67B0928F7E6C /* output.app */;
-			productType = "com.apple.product-type.application";
-		};
-		79BD42AF87FBA9AE10BD7C58 /* Demo */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = DBAAAE4D6C15723505E03480 /* Build configuration list for PBXNativeTarget "Demo" */;
-			buildPhases = (
-				EB79EB024BF350D4AEDA1BB8 /* Resources */,
-				07771C512125B321FE1A0EEA /* Sources */,
-				C2D1F983EB1287416C2E90DC /* Frameworks */,
-				C53FE249ADCCCD36B1EC326E /* CopyFiles */,
-			);
-			buildRules = (
-				99AED6D72200D1484509EDC1 /* PBXBuildRule */,
-			);
-			dependencies = (
-				9B9A2BB92B3E2F87BB97AFA0 /* PBXTargetDependency */,
-				54C82BE82E5941634B1E012C /* PBXTargetDependency */,
-				68DE1373AD62783E0EFEF8C7 /* PBXTargetDependency */,
-				7F7CF81B1AB97F5500E12B22 /* PBXTargetDependency */,
-				5FE1F1CC79D7F93FA6EB27F8 /* PBXTargetDependency */,
-				3E8F1C9A8FD91D1ECC32B32D /* PBXTargetDependency */,
-				203B4731A5BF35E250C4D234 /* PBXTargetDependency */,
-				01819C5C7C8174F91321722A /* PBXTargetDependency */,
-				016B46B491638DECE2916B51 /* PBXTargetDependency */,
-				64D861FD87AD56D1E61351C8 /* PBXTargetDependency */,
-				AB9734930DE57334B332ADF8 /* PBXTargetDependency */,
-				98800C4F9A0CE67CC23DA137 /* PBXTargetDependency */,
-				9C0C1B50CA540A8E58220A96 /* PBXTargetDependency */,
-				529A7BF7EF73DB8DA3EDFF8F /* PBXTargetDependency */,
-				D712961222F7CBC57F8D3D73 /* PBXTargetDependency */,
-				D301A70CC4ED653ECB516688 /* PBXTargetDependency */,
-				1506813E11B9C2CC3278C062 /* PBXTargetDependency */,
-				B35300B9C1C6D46249784CF4 /* PBXTargetDependency */,
-				C73649FBE328BCD2A77AA213 /* PBXTargetDependency */,
-				85452340288CCA52FFEF4801 /* PBXTargetDependency */,
-				FC0F9585C6E2F79188BCFD72 /* PBXTargetDependency */,
-				BF6A28D5E05EDF453C41524B /* PBXTargetDependency */,
-				ECA8A9C06A7AF6A44702AF89 /* PBXTargetDependency */,
-				99A0D1178A498AD99872A3C5 /* PBXTargetDependency */,
-				BCB93D264244A97C51567AAC /* PBXTargetDependency */,
-				337D63E7041605E7AECE15CE /* PBXTargetDependency */,
-				C596A1799C8F84A7C492BA53 /* PBXTargetDependency */,
-				539CE3AF58115E5FD71A38E8 /* PBXTargetDependency */,
-				4BB1210B818C536393C2DC46 /* PBXTargetDependency */,
-				7DA59C2D0D537AAEEBEB1A4A /* PBXTargetDependency */,
-				DDF39F6D68263831F09456F6 /* PBXTargetDependency */,
-				0EF589FEA42F1C4A91A9D0E8 /* PBXTargetDependency */,
-				E8273A5F7251A0F065F18FF9 /* PBXTargetDependency */,
-				9B6A01494FF12683502E9FBE /* PBXTargetDependency */,
-				1CE42CDDEC5DFBE050518BD3 /* PBXTargetDependency */,
-				55CA95A32456C45FF091FCEC /* PBXTargetDependency */,
-				9459F3D0B739C7F2E916D774 /* PBXTargetDependency */,
-				085061F94743A0467C6D8E9C /* PBXTargetDependency */,
-				EB032B08EC7A81AFD876B0CB /* PBXTargetDependency */,
-				E43675452A3E2DDB5F3F8ECE /* PBXTargetDependency */,
-				EE231CD6E42A09773814DD09 /* PBXTargetDependency */,
-				5C75749925DEACC35EBE75DD /* PBXTargetDependency */,
-				C572155363F901FA707B6AB5 /* PBXTargetDependency */,
-				52F9899140C76E8484611E6C /* PBXTargetDependency */,
-				DD91E257DD15E61435BF24EF /* PBXTargetDependency */,
-				648522D67008E57EE761EBE6 /* PBXTargetDependency */,
-				A837FE62FDBE075199EC03EB /* PBXTargetDependency */,
-				E88689D66B4DD81CCB47FEBD /* PBXTargetDependency */,
-				7F419E091D9287A50098B602 /* PBXTargetDependency */,
-				A38B12D81DECB90550BD8749 /* PBXTargetDependency */,
-				5785D96AD8898E14CCB5641F /* PBXTargetDependency */,
-				407AF98C503EBF9FC84FC85D /* PBXTargetDependency */,
-				8DC4AA2AE4FF5D829724E1DA /* PBXTargetDependency */,
-				F72D26AAD8ADA8A4F60167BA /* PBXTargetDependency */,
-				98F18B066FBD3168F8DF8D63 /* PBXTargetDependency */,
-				D935E83C336302B382D9C5E7 /* PBXTargetDependency */,
-				3AB170D03BCA254D2CF0B45D /* PBXTargetDependency */,
-				D2F0364CF3AEA88A0D2C44A3 /* PBXTargetDependency */,
-				436A4CC79091883CE3F58547 /* PBXTargetDependency */,
-				22F66AA06214063787F83EDD /* PBXTargetDependency */,
-				2615DA509AA27BA3E80CA8C6 /* PBXTargetDependency */,
-				D58A0AFC4CD07FCAE4A0C15C /* PBXTargetDependency */,
-				E863B14C78B1BDC25D84F0CE /* PBXTargetDependency */,
-				9228405567795798F08AA857 /* PBXTargetDependency */,
-				9634FD922CB3CEC6819B2B6C /* PBXTargetDependency */,
-				9C29A457D0094B2934B62BAE /* PBXTargetDependency */,
-				9FA2FD9BB48036CB2A78230E /* PBXTargetDependency */,
-				F89D09FA9B104B390A19EB4D /* PBXTargetDependency */,
-				EC5F74DECF6370DDEBEED562 /* PBXTargetDependency */,
-				4DA0C774EE4A826993923200 /* PBXTargetDependency */,
-				7F7CF81D1AB97F5500E12B22 /* PBXTargetDependency */,
-				032F55B6903F81C55E6FF55A /* PBXTargetDependency */,
-				BBA5BFA4C8A09C8BA8D75F41 /* PBXTargetDependency */,
-			);
-			name = Demo;
-			productName = Demo;
-			productReference = 376B0C1D3D0947B5EDCDE8E5 /* Demo.app */;
-			productType = "com.apple.product-type.application";
-		};
-		7C787E8918BC5CF86B17E1EB /* threads */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 9D10213E04D086E3DAA257DF /* Build configuration list for PBXNativeTarget "threads" */;
-			buildPhases = (
-				56917850BC21D3657A470E65 /* Resources */,
-				5452B46AE20C9A675AF377AC /* Sources */,
-				E1C1D313C76D06366093B7D0 /* Frameworks */,
-				53325A1037834D58F4A81281 /* CopyFiles */,
-			);
-			buildRules = (
-				E00FAD7BD9F3ABD603DCA7B7 /* PBXBuildRule */,
-			);
-			dependencies = (
-				8815D8EEA8D51CDD88EAD4AA /* PBXTargetDependency */,
-			);
-			name = threads;
-			productName = threads;
-			productReference = BFEF05C334B87B518BFFEC1F /* threads.app */;
-			productType = "com.apple.product-type.application";
-		};
-		7F419DF51D92857E0098B602 /* offscreen */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 7F419E001D92857E0098B602 /* Build configuration list for PBXNativeTarget "offscreen" */;
-			buildPhases = (
-				7F419DF81D92857E0098B602 /* Resources */,
-				7F419DF91D92857E0098B602 /* Sources */,
-				7F419DFB1D92857E0098B602 /* Frameworks */,
-				7F419DFD1D92857E0098B602 /* CopyFiles */,
-			);
-			buildRules = (
-				7F419DFF1D92857E0098B602 /* PBXBuildRule */,
-			);
-			dependencies = (
-				7F419DF61D92857E0098B602 /* PBXTargetDependency */,
-			);
-			name = offscreen;
-			productName = "native-filechooser";
-			productReference = 7F419E031D92857E0098B602 /* offscreen.app */;
-			productType = "com.apple.product-type.application";
-		};
-		7F7CF7F41AB97CEF00E12B22 /* animated */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 7F7CF8131AB97CF000E12B22 /* Build configuration list for PBXNativeTarget "animated" */;
-			buildPhases = (
-				7F7CF7F11AB97CEF00E12B22 /* Sources */,
-				7F7CF7F21AB97CEF00E12B22 /* Frameworks */,
-				7F7CF7F31AB97CEF00E12B22 /* Resources */,
-				7FB1BE041B5D20C100055291 /* CopyFiles */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-				7F7CF8181AB97D8F00E12B22 /* PBXTargetDependency */,
-			);
-			name = animated;
-			productName = animated;
-			productReference = 7F7CF7F51AB97CEF00E12B22 /* animated.app */;
-			productType = "com.apple.product-type.application";
-		};
-		7FBCECC71B1D8AA500AB970D /* libfltk */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 7FBCECDD1B1D8AA600AB970D /* Build configuration list for PBXNativeTarget "libfltk" */;
-			buildPhases = (
-				7FBCECC41B1D8AA500AB970D /* Sources */,
-				7FBCECC51B1D8AA500AB970D /* Frameworks */,
-				7FBCECC61B1D8AA500AB970D /* Headers */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = libfltk;
-			productName = libfltk;
-			productReference = 7FBCECC81B1D8AA500AB970D /* libfltk.a */;
-			productType = "com.apple.product-type.library.static";
-		};
-		82436F720F585ECD3B0A56CE /* tile */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 7902C3FA238DC834D728294F /* Build configuration list for PBXNativeTarget "tile" */;
-			buildPhases = (
-				9A5B458C7F1ACC75DBA26DD4 /* Resources */,
-				DE533B31CDDCD37E1CE285DF /* Sources */,
-				655B11B2B02C045A8B5028F3 /* Frameworks */,
-				44749E7B96F457043556F4ED /* CopyFiles */,
-			);
-			buildRules = (
-				30D4C9DD3FAD01B15E41C1C6 /* PBXBuildRule */,
-			);
-			dependencies = (
-				B6889203ECA066BD86020D66 /* PBXTargetDependency */,
-			);
-			name = tile;
-			productName = tile;
-			productReference = AD6E04F6F1B72EB797867D80 /* tile.app */;
-			productType = "com.apple.product-type.application";
-		};
-		82C0BD76C77A518B0A1499B5 /* line_style */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = CE4B70CFB915731934579321 /* Build configuration list for PBXNativeTarget "line_style" */;
-			buildPhases = (
-				8E805BABF05E76A58110D918 /* Resources */,
-				704DAC3A75053027E8E80B21 /* Sources */,
-				FD9F5AFF648D8F9E6C6C7636 /* Frameworks */,
-				E3175F32C5E537F31CCC7405 /* CopyFiles */,
-			);
-			buildRules = (
-				6FB4527CC732A53EE7D25E30 /* PBXBuildRule */,
-			);
-			dependencies = (
-				EF14CCCD0DC10EFE3FE33343 /* PBXTargetDependency */,
-			);
-			name = line_style;
-			productName = line_style;
-			productReference = AC14DA2BFF3CBEE249FC2E89 /* line_style.app */;
-			productType = "com.apple.product-type.application";
-		};
-		86BF0C207C6D13ED2B83B63A /* doublebuffer */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 51AC54C46D650C2D3F325093 /* Build configuration list for PBXNativeTarget "doublebuffer" */;
-			buildPhases = (
-				5F75C7F48A3C5358A71D46F2 /* Resources */,
-				5A1A7446A600F238DBF01ECD /* Sources */,
-				11CD77CE1FA5AE4F1D14D90B /* Frameworks */,
-				CCBEDDCC81FD47532FFBEEC3 /* CopyFiles */,
-			);
-			buildRules = (
-				8D19F5C0FFDCC32896A09C23 /* PBXBuildRule */,
-			);
-			dependencies = (
-				E1CB23265EB62E17BC08AD26 /* PBXTargetDependency */,
-			);
-			name = doublebuffer;
-			productName = doublebuffer;
-			productReference = 147BE92B6E470D0A80BD203D /* doublebuffer.app */;
-			productType = "com.apple.product-type.application";
-		};
-		89DAC07651B4C516C173A1C1 /* overlay */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = E47C3205187D57A0AC715323 /* Build configuration list for PBXNativeTarget "overlay" */;
-			buildPhases = (
-				A5C94CCC9C50822A6F406C48 /* Resources */,
-				32341C37AE8EF4901FF8422C /* Sources */,
-				115877C8118395BEFBD4B2B7 /* Frameworks */,
-				442C73B7DB6D824816242D5D /* CopyFiles */,
-			);
-			buildRules = (
-				83111E6E5D2E8BB741C8B141 /* PBXBuildRule */,
-			);
-			dependencies = (
-				441AA8B68A45804824ADC326 /* PBXTargetDependency */,
-			);
-			name = overlay;
-			productName = overlay;
-			productReference = 8F40BFA65740DDA6E9240F30 /* overlay.app */;
-			productType = "com.apple.product-type.application";
-		};
-		93AABBAC7C288CC95BFC5707 /* table */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = F022E6E1DAF3F5F7A72D8FA1 /* Build configuration list for PBXNativeTarget "table" */;
-			buildPhases = (
-				5C228FF2BC54AD72B82DB199 /* Resources */,
-				71F9CE4E872DB73038D0EC84 /* Sources */,
-				04D426A707A40738234F4ED6 /* Frameworks */,
-				E2F7CD46720ADD8FCBFAD66C /* CopyFiles */,
-			);
-			buildRules = (
-				504535356A0F15B71795781D /* PBXBuildRule */,
-			);
-			dependencies = (
-				799ABB4ACD657F1A245FBDC7 /* PBXTargetDependency */,
-			);
-			name = table;
-			productName = table;
-			productReference = 3DAF0F1BE5742F8D8D130AF1 /* table.app */;
-			productType = "com.apple.product-type.application";
-		};
-		9472188EEB541EF3EA60AB03 /* sudoku */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 0C94DB7B62523827F6CA3991 /* Build configuration list for PBXNativeTarget "sudoku" */;
-			buildPhases = (
-				8E4C221D09DDD8636DFF20F8 /* Resources */,
-				04BAC99AEC68BBEE577DFB01 /* Sources */,
-				6A92C755D57B613EAFABAB94 /* Frameworks */,
-				59C7FD4EEABA624F41865158 /* CopyFiles */,
-			);
-			buildRules = (
-				78B7868F42A75D43E10C274B /* PBXBuildRule */,
-			);
-			dependencies = (
-				D389E092A5D4D964D0BB3838 /* PBXTargetDependency */,
-				96F8ABE7409BC5A31749E727 /* PBXTargetDependency */,
-				F7AD43D0104E6799F6F2D5C6 /* PBXTargetDependency */,
-				350F154D90E8EAECC9D1CF17 /* PBXTargetDependency */,
-				5564A2E200F170BF4FC022B5 /* PBXTargetDependency */,
-			);
-			name = sudoku;
-			productName = sudoku;
-			productReference = 9C87CC8FC8B566C55594BA36 /* sudoku.app */;
-			productType = "com.apple.product-type.application";
-		};
-		98B39383C1F47726C5C0793B /* color_chooser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 69F44FF2FE83F31DE5D9E594 /* Build configuration list for PBXNativeTarget "color_chooser" */;
-			buildPhases = (
-				A5CF311CDAFD7365826752CA /* Resources */,
-				7A3B83CEF285671CB7B96E68 /* Sources */,
-				5849DDD4770AC012F0B95F32 /* Frameworks */,
-				E358008622B4B9915BA5BA0A /* CopyFiles */,
-			);
-			buildRules = (
-				DF372616E200690F5DC9FCE0 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C042E3E422CFBE9C779D254D /* PBXTargetDependency */,
-			);
-			name = color_chooser;
-			productName = color_chooser;
-			productReference = 16A1B66BA02AC26B38AD52A1 /* color_chooser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		9A8F59CD813587E2E463DF07 /* arc */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3D5D2D23D2C59411880AB2D2 /* Build configuration list for PBXNativeTarget "arc" */;
-			buildPhases = (
-				5C139D9D4E65751359F9B075 /* Resources */,
-				9858976F81CEAC1A40F1AEB2 /* Sources */,
-				7C204C4C1035EB82F0251A83 /* Frameworks */,
-				95245DC43D9B4E1FAC8AB3AB /* CopyFiles */,
-			);
-			buildRules = (
-				577C85A68BB0FF02C829670A /* PBXBuildRule */,
-			);
-			dependencies = (
-				14570B6D35796D92ED95C457 /* PBXTargetDependency */,
-			);
-			name = arc;
-			productName = arc;
-			productReference = 9E227FFE277CB6E4EDF05454 /* arc.app */;
-			productType = "com.apple.product-type.application";
-		};
-		9EA6FF727BC736133B0B85A1 /* pixmap */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 9239785CB2AB452B31DBD695 /* Build configuration list for PBXNativeTarget "pixmap" */;
-			buildPhases = (
-				13BD0757F479A5F3462FCC54 /* Resources */,
-				18F1FCD84C6F9AE80AECB726 /* Sources */,
-				CFFFB4C330636C95339A8F4F /* Frameworks */,
-				C828F73FC372E787EE66D21A /* CopyFiles */,
-			);
-			buildRules = (
-				6380C4F77F4C5B86D46BFDDB /* PBXBuildRule */,
-			);
-			dependencies = (
-				7E7825EDB482F765FD020804 /* PBXTargetDependency */,
-			);
-			name = pixmap;
-			productName = pixmap;
-			productReference = 4BDB9923B5247EC384C1E74D /* pixmap.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A0731BABBE8E29CE96AC61A7 /* blocks */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 756F44E55A1F0C76932E6238 /* Build configuration list for PBXNativeTarget "blocks" */;
-			buildPhases = (
-				3A07A85250EDE4038FDD51C9 /* Resources */,
-				9500D02617365F91106C5380 /* Sources */,
-				01C1E609F6C4528B93E32388 /* Frameworks */,
-				50566A2A34BD03E36A3865D7 /* CopyFiles */,
-			);
-			buildRules = (
-				C7AD5A2EA43D3ED3CB9D65A3 /* PBXBuildRule */,
-			);
-			dependencies = (
-				4808C21E1C68AEC753E3008D /* PBXTargetDependency */,
-			);
-			name = blocks;
-			productName = blocks;
-			productReference = 8A748CC814B1697A7E2F9D1A /* blocks.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A2AA5A5F9FF0A53A3382DD6C /* fast_slow */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C479D6EC433F3C0BD5B15D0E /* Build configuration list for PBXNativeTarget "fast_slow" */;
-			buildPhases = (
-				F7059AF9D5F709CCAB5FF15A /* Resources */,
-				2383CCCA8BAF88211E55A665 /* Sources */,
-				EE45CD6FFDF096FFC6F619A2 /* Frameworks */,
-				2E869EC7F7F037BCEEF364C0 /* CopyFiles */,
-			);
-			buildRules = (
-				98A36C3099CC3D924FFCD23A /* PBXBuildRule */,
-			);
-			dependencies = (
-				6DF50B437D31EF71F78E4ED5 /* PBXTargetDependency */,
-				A739CE0E2A5B484346922948 /* PBXTargetDependency */,
-			);
-			name = fast_slow;
-			productName = fast_slow;
-			productReference = E1BF46F43DB886EB2301F83A /* fast_slow.app */;
-			productType = "com.apple.product-type.application";
-		};
-		A57FDE871C99A52BEEDEE68C /* fltk */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3BD5FFB6FCC8F21A23C23DF4 /* Build configuration list for PBXNativeTarget "fltk" */;
-			buildPhases = (
-				6715D162BEFF87372B2A31E0 /* Resources */,
-				C9EDD5C81274C6BA00ADB21C /* Headers */,
-				C9EDD42D1274B84100ADB21C /* CopyFiles */,
-				C9EDD4DD1274BB4100ADB21C /* CopyFiles */,
-				7FA08BC11C4EA964001CBE06 /* ShellScript */,
-				4DA82C38AA0403E56A1E3545 /* Sources */,
-				D2A1AD2D93B0EED43F624520 /* Frameworks */,
-			);
-			buildRules = (
-				EFFAAB905A54B0BFE13CB56C /* PBXBuildRule */,
-			);
-			dependencies = (
-			);
-			name = fltk;
-			productName = fltk;
-			productReference = FEB0F8FE6383384180570D94 /* fltk.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		A58BB416AAFDCFF08D7C7E41 /* fltk_png */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 840081F8C4055EEEDA44ED91 /* Build configuration list for PBXNativeTarget "fltk_png" */;
-			buildPhases = (
-				C95961801274CE71009C0594 /* Headers */,
-				38181B0ECAFDECC7FE921D9C /* Resources */,
-				E40A8FB9D908635D6604FDE8 /* Sources */,
-				F29187F63041F20DD7E1DB1E /* Frameworks */,
-			);
-			buildRules = (
-				D77393DC0EA45FF4D2EE7CB7 /* PBXBuildRule */,
-			);
-			dependencies = (
-				057D06378AFAB64C55C61976 /* PBXTargetDependency */,
-			);
-			name = fltk_png;
-			productName = fltk_png;
-			productReference = 98A16A4EC098BA7DB21E13DC /* fltk_png.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3EEAE9A300430106FF4AFF4A /* Build configuration list for PBXNativeTarget "fltk_zlib" */;
-			buildPhases = (
-				7A0DD0617839B6CF397E2894 /* Headers */,
-				8F88598886366825DB086B55 /* Resources */,
-				B09B7AD728A44911188459E8 /* Sources */,
-				5CF430C0CC7B5B18E46A53BE /* Frameworks */,
-			);
-			buildRules = (
-				74461A300DF11483520AD600 /* PBXBuildRule */,
-			);
-			dependencies = (
-			);
-			name = fltk_zlib;
-			productName = fltk_zlib;
-			productReference = F8880CD3FEF32388A24C1B94 /* fltk_zlib.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		AE6BC0AEB24EBBBDBA4071E0 /* Fluid */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 8AD66A1FFD97F7DE6754A1F7 /* Build configuration list for PBXNativeTarget "Fluid" */;
-			buildPhases = (
-				ACF24AC7D859B7880B0D58D4 /* Resources */,
-				C8BA1F7B27BA10A7E54082E5 /* Sources */,
-				5BE25DC98DFA463724C75983 /* Frameworks */,
-				0459792A31430255E92E06B0 /* CopyFiles */,
-			);
-			buildRules = (
-				002070688FF46BE22B8B9017 /* PBXBuildRule */,
-			);
-			dependencies = (
-				A8AB7DEC3970D5A693D2BC84 /* PBXTargetDependency */,
-				F2F53F78D25C64C4C4371E5D /* PBXTargetDependency */,
-				56D1F098C3EE3EECC13BD041 /* PBXTargetDependency */,
-				EE07C78293DC38C5356D12D7 /* PBXTargetDependency */,
-				902D8C989F1AE5B7C56992B0 /* PBXTargetDependency */,
-				DABEEED764EBB1285F3DB913 /* PBXTargetDependency */,
-			);
-			name = Fluid;
-			productName = Fluid;
-			productReference = B2F3E15BD31ADBA58ECD50C4 /* Fluid.app */;
-			productType = "com.apple.product-type.application";
-		};
-		AF9D43D9317D81CEF5290A74 /* scroll */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A6CD6AC5589128B81F5465CA /* Build configuration list for PBXNativeTarget "scroll" */;
-			buildPhases = (
-				8DA98B1BE5564648BCA2C26A /* Resources */,
-				ADB52A2EF9DFBB587A5B2A9B /* Sources */,
-				52A3FF792DA3389A6CC53209 /* Frameworks */,
-				B77EF555DF7D2283999BB0F2 /* CopyFiles */,
-			);
-			buildRules = (
-				E0E852B24FAD27295E179AAE /* PBXBuildRule */,
-			);
-			dependencies = (
-				88AE375448A3D75DCDE46CD5 /* PBXTargetDependency */,
-			);
-			name = scroll;
-			productName = scroll;
-			productReference = 9305831B5D584A1C9652C308 /* scroll.app */;
-			productType = "com.apple.product-type.application";
-		};
-		AFFC1E48270AB19243D7B668 /* fullscreen */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = CC535F451DEEEC6CB8B8BE9D /* Build configuration list for PBXNativeTarget "fullscreen" */;
-			buildPhases = (
-				84E8096200DDFEC5FF39EF2A /* Resources */,
-				FB70262A7CDDD24B3F4BED62 /* Sources */,
-				58AFA0B7B90CE0ACF0A1B2E9 /* Frameworks */,
-				89B4A3C45EFC0B03783C90A8 /* CopyFiles */,
-			);
-			buildRules = (
-				7DC98686048519016A24090E /* PBXBuildRule */,
-			);
-			dependencies = (
-				49E45321CAB89C1B3C919148 /* PBXTargetDependency */,
-				B372B1092C9CCAE863720078 /* PBXTargetDependency */,
-			);
-			name = fullscreen;
-			productName = fullscreen;
-			productReference = A0E4F14B0B1B1BCD1307E3CC /* fullscreen.app */;
-			productType = "com.apple.product-type.application";
-		};
-		B37F5F8EB169ABA76EA02FB9 /* help */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = DD0953717B88186226B18281 /* Build configuration list for PBXNativeTarget "help" */;
-			buildPhases = (
-				6A37D389FD2F3165D4CE73C2 /* Resources */,
-				6340124B1D917C09718D7D97 /* Sources */,
-				7DC246FF0009EB8FB8593BAC /* Frameworks */,
-				BAA16D4B3709554A4558AF91 /* CopyFiles */,
-				7F3421EE1CE8ADF1005FA821 /* CopyFiles */,
-			);
-			buildRules = (
-				CEB41048C80E70F94752F4BA /* PBXBuildRule */,
-			);
-			dependencies = (
-				0FBA458582E26256916112D4 /* PBXTargetDependency */,
-				5C566828ED18CC57B65EFF0E /* PBXTargetDependency */,
-				7D774DEF2F0427B222084BA0 /* PBXTargetDependency */,
-				D18305E56863CB5DFEB97963 /* PBXTargetDependency */,
-				112378DABBDFF656B0652AD8 /* PBXTargetDependency */,
-			);
-			name = help;
-			productName = help;
-			productReference = DAC97F0DCE974BD65C620792 /* help.app */;
-			productType = "com.apple.product-type.application";
-		};
-		B4A214CBEE4FE0EB1FEF8982 /* subwindow */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 433709CE97606F96249EBAB9 /* Build configuration list for PBXNativeTarget "subwindow" */;
-			buildPhases = (
-				B8C9B63E5D2B0E2CE7A5EAA0 /* Resources */,
-				F40F7367F697C58D5E721ACD /* Sources */,
-				B8D19A7EE1C32D60D61545F6 /* Frameworks */,
-				AA203DFDF8502DF46F176190 /* CopyFiles */,
-			);
-			buildRules = (
-				5E63DB3035D943458794E699 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C5469720CBB9D2B88D10BD2D /* PBXTargetDependency */,
-			);
-			name = subwindow;
-			productName = subwindow;
-			productReference = C14982C1579C0303D84E569E /* subwindow.app */;
-			productType = "com.apple.product-type.application";
-		};
-		B5DAF3DCC189A02ADD9DF320 /* tiled_image */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 56664D0C77E70269E747DE00 /* Build configuration list for PBXNativeTarget "tiled_image" */;
-			buildPhases = (
-				8D1966E6143C3919C4C6A4E7 /* Resources */,
-				25910CDF4BCB7F440E5B74E7 /* Sources */,
-				4A9F8D40B7CE73863445B40C /* Frameworks */,
-				F8CBF5771DF5F8C04AC4A4A9 /* CopyFiles */,
-			);
-			buildRules = (
-				59A7B47B6A381F25F22D5E83 /* PBXBuildRule */,
-			);
-			dependencies = (
-				2E5C3887A7735AF0F079EDB6 /* PBXTargetDependency */,
-				9FD5BEA23723890F5BF7E574 /* PBXTargetDependency */,
-				0F79328CEC227618A3B3D2DF /* PBXTargetDependency */,
-				03F0369FF852D26852CD6A07 /* PBXTargetDependency */,
-				A5C6B0BDF09C897E0F1C1354 /* PBXTargetDependency */,
-			);
-			name = tiled_image;
-			productName = tiled_image;
-			productReference = 5F4C18EEE3A4065D69073EDA /* tiled_image.app */;
-			productType = "com.apple.product-type.application";
-		};
-		B807BFE7F9E6FCE88C0A4E9C /* fonts */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 931B6696041FE07BC4118715 /* Build configuration list for PBXNativeTarget "fonts" */;
-			buildPhases = (
-				48166A90E958A4B60BA78F96 /* Resources */,
-				3F01A8A8FBC9B6B924965748 /* Sources */,
-				1AF8A842F0688228AE949397 /* Frameworks */,
-				56C252F318076B470047BFC0 /* CopyFiles */,
-			);
-			buildRules = (
-				1996ABDE5CEFFDD61C5FCF32 /* PBXBuildRule */,
-			);
-			dependencies = (
-				22BC6ECC6181AE01482BCB46 /* PBXTargetDependency */,
-			);
-			name = fonts;
-			productName = fonts;
-			productReference = B77901D4A0022EBCA148E65F /* fonts.app */;
-			productType = "com.apple.product-type.application";
-		};
-		BB76D328D5B89A1273946784 /* fltk_images */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 3B099D694EBD3EACA6FCDA94 /* Build configuration list for PBXNativeTarget "fltk_images" */;
-			buildPhases = (
-				C95961821274CE71009C0594 /* Headers */,
-				7FF98EDFDA8EC3359F40E824 /* Resources */,
-				23FEA5765483F0D5EB7B112E /* Sources */,
-				C73979BDC5300D24FA5AC658 /* Frameworks */,
-			);
-			buildRules = (
-				D056BE42E7C99FA4C475B4B9 /* PBXBuildRule */,
-			);
-			dependencies = (
-				90E6F89862669BA3F1A3C7B8 /* PBXTargetDependency */,
-				685D9263D848132A2134EDB5 /* PBXTargetDependency */,
-				A02D494049C1881F4ED5D62F /* PBXTargetDependency */,
-			);
-			name = fltk_images;
-			productName = fltk_images;
-			productReference = E917C15E28EE293416A38C5E /* fltk_images.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		BEB651546D79EDC169128FD5 /* resizebox */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AF326B98BA09AF38683E526F /* Build configuration list for PBXNativeTarget "resizebox" */;
-			buildPhases = (
-				D99E3A92B1CB6E759008B848 /* Resources */,
-				241181BBBC141ACFEF36D6A6 /* Sources */,
-				9CE300BB0263BD4A4C40C670 /* Frameworks */,
-				D40E5F4F48C9ECADF37F9015 /* CopyFiles */,
-			);
-			buildRules = (
-				F01E4C121774DE7867D5702A /* PBXBuildRule */,
-			);
-			dependencies = (
-				4C28EFB9BB6DFB61738D7A8A /* PBXTargetDependency */,
-			);
-			name = resizebox;
-			productName = resizebox;
-			productReference = 031DE3DC995A7F7219A471E9 /* resizebox.app */;
-			productType = "com.apple.product-type.application";
-		};
-		C13484C4A9262C58D8FA7242 /* fltk_gl */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = B83DB33D147DB23CC7FEB7A3 /* Build configuration list for PBXNativeTarget "fltk_gl" */;
-			buildPhases = (
-				C95961831274CE71009C0594 /* Headers */,
-				DDEB33A67B19E529CD5A9DE9 /* Resources */,
-				D82DFF5A81D91805A3AF1C0B /* Sources */,
-				BCC0790321A715F6319EA985 /* Frameworks */,
-			);
-			buildRules = (
-				53DC29E68E2D3D0E3C92A656 /* PBXBuildRule */,
-			);
-			dependencies = (
-				42FC7DC69971035246E3BAAA /* PBXTargetDependency */,
-			);
-			name = fltk_gl;
-			productName = fltk_gl;
-			productReference = EA8E6EC230301E597B9D9AED /* fltk_gl.framework */;
-			productType = "com.apple.product-type.framework";
-		};
-		C4B346660A74B9FCF04EFB2C /* cursor */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 133DA311246EB8116364C59E /* Build configuration list for PBXNativeTarget "cursor" */;
-			buildPhases = (
-				418ACF0B3E1F4ABA8A604D21 /* Resources */,
-				F53DC38825D3EF858050B2D1 /* Sources */,
-				84287AB87AC48E0110823FB1 /* Frameworks */,
-				1C5279FDAE2119294AC099F4 /* CopyFiles */,
-			);
-			buildRules = (
-				6DCBEC3DBEE234B30743E462 /* PBXBuildRule */,
-			);
-			dependencies = (
-				4643FC50D06D89829CC846D8 /* PBXTargetDependency */,
-			);
-			name = cursor;
-			productName = cursor;
-			productReference = F0F281028A82F2E8C2070B26 /* cursor.app */;
-			productType = "com.apple.product-type.application";
-		};
-		C8EFCE83A8BC9CA56922D024 /* rotated_text */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 91566347F4A36AB6DC73AFDB /* Build configuration list for PBXNativeTarget "rotated_text" */;
-			buildPhases = (
-				B7BAF95F07F127AF3CD96681 /* Resources */,
-				4DAA5BB519E04EF5DA60207E /* Sources */,
-				169DE11CE7B3F4B6117A4DC0 /* Frameworks */,
-				D37688A219F4F19D999D40FF /* CopyFiles */,
-			);
-			buildRules = (
-				9DC64D90FF7DF59E3A11CF0D /* PBXBuildRule */,
-			);
-			dependencies = (
-				52401805054D7AF0A5CA8307 /* PBXTargetDependency */,
-			);
-			name = rotated_text;
-			productName = rotated_text;
-			productReference = 6F994D2DFFEA5301950F21B3 /* rotated_text.app */;
-			productType = "com.apple.product-type.application";
-		};
-		C9165EA11291A304003FF4F0 /* unittests */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C9165EAC1291A304003FF4F0 /* Build configuration list for PBXNativeTarget "unittests" */;
-			buildPhases = (
-				C9165EA41291A304003FF4F0 /* Resources */,
-				C9165EA51291A304003FF4F0 /* Sources */,
-				C9165EA71291A304003FF4F0 /* Frameworks */,
-				C9165EA91291A304003FF4F0 /* CopyFiles */,
-			);
-			buildRules = (
-				C9165EAB1291A304003FF4F0 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C9165EA21291A304003FF4F0 /* PBXTargetDependency */,
-			);
-			name = unittests;
-			productName = utf8;
-			productReference = C9165EAF1291A304003FF4F0 /* unittests.app */;
-			productType = "com.apple.product-type.application";
-		};
-		CA05747C492074A51F2F35BC /* iconize */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A28344FBEB8BBC1EB0B0B397 /* Build configuration list for PBXNativeTarget "iconize" */;
-			buildPhases = (
-				B3E63D707BAD0C1B97C19557 /* Resources */,
-				18A195225FBC2909509015CD /* Sources */,
-				D4E10D13391A30A63EF89A57 /* Frameworks */,
-				EC951A14BC9C727DEF319FAD /* CopyFiles */,
-			);
-			buildRules = (
-				3B0E63A186CEDF7D1345E7FD /* PBXBuildRule */,
-			);
-			dependencies = (
-				F682FD9A6733681D1E227CF0 /* PBXTargetDependency */,
-			);
-			name = iconize;
-			productName = iconize;
-			productReference = 9D49D6711A470C8334826252 /* iconize.app */;
-			productType = "com.apple.product-type.application";
-		};
-		D14DC4F3D302856B84343ED5 /* resize */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 16B97D750AE49403BB5039C0 /* Build configuration list for PBXNativeTarget "resize" */;
-			buildPhases = (
-				BB446BDCD98D92BF8F4F474E /* Resources */,
-				919F4EBBA3F8CD6DCFC9F1F4 /* Sources */,
-				4730E43F2C4BE2D67D6044A2 /* Frameworks */,
-				5225A2163C55ABD829B1992C /* CopyFiles */,
-			);
-			buildRules = (
-				059FA3D1C1D3C73F20D0B283 /* PBXBuildRule */,
-			);
-			dependencies = (
-				D3330A4EAF513581AF51C0AD /* PBXTargetDependency */,
-				54AE518E123126A23E49FF4D /* PBXTargetDependency */,
-			);
-			name = resize;
-			productName = resize;
-			productReference = 020FFBC4E06A072BF8D098FB /* resize.app */;
-			productType = "com.apple.product-type.application";
-		};
-		D1A43D1D85A87A20B2F7FB09 /* boxtype */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = F05438F9279AF36D8FC3C207 /* Build configuration list for PBXNativeTarget "boxtype" */;
-			buildPhases = (
-				491856FD432ADEC2668039CF /* Resources */,
-				C3EDADC876662292EBA9992E /* Sources */,
-				2919D94965B25D79F2E93F47 /* Frameworks */,
-				40D98E2789C1C1DCE87703E9 /* CopyFiles */,
-			);
-			buildRules = (
-				ADA694FD70FEC5E6BD16C419 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C500558605B2403584788BEF /* PBXTargetDependency */,
-			);
-			name = boxtype;
-			productName = boxtype;
-			productReference = A0B57FF2A1D358159C950F7F /* boxtype.app */;
-			productType = "com.apple.product-type.application";
-		};
-		D217C1AD7BE42CB2138F2993 /* radio */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 1C89D53894EEE27329B1F4CC /* Build configuration list for PBXNativeTarget "radio" */;
-			buildPhases = (
-				B726E61023969BF4554BD695 /* Resources */,
-				03952EF9A011C37E408094AD /* Sources */,
-				B4D140AF84B8DE662A503CF7 /* Frameworks */,
-				96651E0FF4A5684EF37DD2F9 /* CopyFiles */,
-			);
-			buildRules = (
-				3C09847AE46EF8CCEFD1F7A0 /* PBXBuildRule */,
-			);
-			dependencies = (
-				ACB61E677D40B60BC431709E /* PBXTargetDependency */,
-				32F39412979EF182CC9A2987 /* PBXTargetDependency */,
-			);
-			name = radio;
-			productName = radio;
-			productReference = B1D1B6018D7240C1300914CD /* radio.app */;
-			productType = "com.apple.product-type.application";
-		};
-		D7D4B168DE66A92F9F8747C0 /* glpuzzle */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = FE5CC6B6FA8DA453D5611961 /* Build configuration list for PBXNativeTarget "glpuzzle" */;
-			buildPhases = (
-				7861C4D41283D0C4250D584C /* Resources */,
-				6ABADE980903C2EF8A723E4D /* Sources */,
-				39603B9C1B9366483F74BB6A /* Frameworks */,
-				E64C511B77AB8F35A910B0A9 /* CopyFiles */,
-			);
-			buildRules = (
-				B1E6CC83FB833E1F51A122FB /* PBXBuildRule */,
-			);
-			dependencies = (
-				BF7DB6F287E1A675F33E0C0F /* PBXTargetDependency */,
-				C84EB5797741DD14E7DB1149 /* PBXTargetDependency */,
-			);
-			name = glpuzzle;
-			productName = glpuzzle;
-			productReference = 622198DBFF6479ED2A8B6283 /* glpuzzle.app */;
-			productType = "com.apple.product-type.application";
-		};
-		DC14E2CC213CC0028EF9BD8B /* buttons */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 470FAB5A41BA8BE365964DCF /* Build configuration list for PBXNativeTarget "buttons" */;
-			buildPhases = (
-				EA582656BF4C5C12E9AE4C86 /* Resources */,
-				467796583E5586A73ED4AA49 /* Sources */,
-				73EA891C8BB8044C72140879 /* Frameworks */,
-				91EC7035DE2DC762CBE1FC29 /* CopyFiles */,
-			);
-			buildRules = (
-				AD22FA469B15095D66214B28 /* PBXBuildRule */,
-			);
-			dependencies = (
-				85A316B5408732FB9FF7AA6D /* PBXTargetDependency */,
-			);
-			name = buttons;
-			productName = buttons;
-			productReference = DC655A6341A86C1A28FF878B /* buttons.app */;
-			productType = "com.apple.product-type.application";
-		};
-		E167C0E81B125EBADAC8ED73 /* valuators */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AF7E2D84EC2DCAF6153B9261 /* Build configuration list for PBXNativeTarget "valuators" */;
-			buildPhases = (
-				DD6DFBB539A30EBC538753B4 /* Resources */,
-				83DDF1D2B6653BBC8AC8473A /* Sources */,
-				6B8A10F761E85ADEEB1ACF54 /* Frameworks */,
-				E28156A3CBFEC9AE06D4786E /* CopyFiles */,
-			);
-			buildRules = (
-				9DC4E535094AC1A40E736434 /* PBXBuildRule */,
-			);
-			dependencies = (
-				B27AA1A3887B738C0B96DAD9 /* PBXTargetDependency */,
-				01609DFCC3D1B2BB31009EFB /* PBXTargetDependency */,
-			);
-			name = valuators;
-			productName = valuators;
-			productReference = 5191489A6263E11B65A57B4D /* valuators.app */;
-			productType = "com.apple.product-type.application";
-		};
-		E8BE99F75E5F3C8725834B33 /* adjuster */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 35EF0E558BEAB37B9A39BD63 /* Build configuration list for PBXNativeTarget "adjuster" */;
-			buildPhases = (
-				3E48ED081373780C4EDB3D4B /* Resources */,
-				1D4D9E8B784735A2E0CD03A0 /* Sources */,
-				BF84F6678FEEED6293B48BB0 /* Frameworks */,
-				497C5710C4267BC9B5EE600D /* CopyFiles */,
-			);
-			buildRules = (
-				4E93FEB807F829F6142913E5 /* PBXBuildRule */,
-			);
-			dependencies = (
-				C97AC7320761F9B9C60C0B57 /* PBXTargetDependency */,
-			);
-			name = adjuster;
-			productName = adjuster;
-			productReference = 231CFE382C2134110A029AD0 /* adjuster.app */;
-			productType = "com.apple.product-type.application";
-		};
-		EE40189E3B7BB6337ABA74C7 /* native-filechooser */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = 38FE9CCE8C2F3F75B314E1B7 /* Build configuration list for PBXNativeTarget "native-filechooser" */;
-			buildPhases = (
-				4D3DC8094FE89B2038F2D3A0 /* Resources */,
-				0728F2A5E33C2403F7077DEC /* Sources */,
-				8E6E955E030F7186C7A72772 /* Frameworks */,
-				F37DD7CB8A1C3B8BE19DC766 /* CopyFiles */,
-			);
-			buildRules = (
-				A77FA03E59536F0D6FE03205 /* PBXBuildRule */,
-			);
-			dependencies = (
-				8F4FFA7EC5BF4259DE1BD0CE /* PBXTargetDependency */,
-			);
-			name = "native-filechooser";
-			productName = "native-filechooser";
-			productReference = 05ECF96A7262C1F1111ABCC7 /* native-filechooser.app */;
-			productType = "com.apple.product-type.application";
-		};
-		F0647F049CED2B54A017A6A0 /* editor */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C1069764F482EBCBD6C96F49 /* Build configuration list for PBXNativeTarget "editor" */;
-			buildPhases = (
-				618F2BF11B0642C7B9AE6B3E /* Resources */,
-				B22430BBD6CF45241092FF68 /* Sources */,
-				5B5E44816B8DFA57B6363369 /* Frameworks */,
-				98218889F7138DA8FF05A3A8 /* CopyFiles */,
-			);
-			buildRules = (
-				A066D663148241E4C695936E /* PBXBuildRule */,
-			);
-			dependencies = (
-				071CA70C19A5BEA3EBDBAA98 /* PBXTargetDependency */,
-			);
-			name = editor;
-			productName = editor;
-			productReference = 3F0F366F151B9E0E2FAD0948 /* editor.app */;
-			productType = "com.apple.product-type.application";
-		};
-		F39A907E68C3C55EACDF4D3C /* mandelbrot */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = FB36B488F1B5DB9880F04A14 /* Build configuration list for PBXNativeTarget "mandelbrot" */;
-			buildPhases = (
-				E9699503AACADD52B6031973 /* Resources */,
-				494DC1E0F6E594216C318710 /* Sources */,
-				F948041DB74E78B7C5C4E844 /* Frameworks */,
-				6D480DB39435A257ABBD7ECF /* CopyFiles */,
-			);
-			buildRules = (
-				F624C06922D8B43EBCD6C2F1 /* PBXBuildRule */,
-			);
-			dependencies = (
-				E71AE4375EB0E17F432F876D /* PBXTargetDependency */,
-				0B4BFCC2C839AF5621EBC3D8 /* PBXTargetDependency */,
-			);
-			name = mandelbrot;
-			productName = mandelbrot;
-			productReference = B60604913A508E327AA6C475 /* mandelbrot.app */;
-			productType = "com.apple.product-type.application";
-		};
-		F781BF6B6F74841F05AAA4BE /* input_choice */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = D02EA04AB53B945F92F3079D /* Build configuration list for PBXNativeTarget "input_choice" */;
-			buildPhases = (
-				0B616FD0D2D26B2C3FFC8930 /* Resources */,
-				12613C0CC16AB08E523385AE /* Sources */,
-				B6F452ABF43F365C4EE68C29 /* Frameworks */,
-				BED4EECA87D03F546D268B16 /* CopyFiles */,
-			);
-			buildRules = (
-				5F0FB3C683E9A03326A3A895 /* PBXBuildRule */,
-			);
-			dependencies = (
-				40AA5031F1A4CB38CC442BAD /* PBXTargetDependency */,
-			);
-			name = input_choice;
-			productName = input_choice;
-			productReference = 7FC91721DA7888C8A1FD762E /* input_choice.app */;
-			productType = "com.apple.product-type.application";
-		};
-		FA19DC0D800A66EC69E9560E /* label */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = B053007E32B2368F6ED7E3A6 /* Build configuration list for PBXNativeTarget "label" */;
-			buildPhases = (
-				C8258DEE0DC0BF57A0412C37 /* Resources */,
-				75EF108523E2405BE39FD030 /* Sources */,
-				FA903B512952DE9AEDA2DF5F /* Frameworks */,
-				ADB965405855BB547786982C /* CopyFiles */,
-			);
-			buildRules = (
-				405511E8AFF477DB8ACD4DB0 /* PBXBuildRule */,
-			);
-			dependencies = (
-				E34E2CE87D94E142AF4792B8 /* PBXTargetDependency */,
-				1C66CFDDA0D5EAF4F5CBA2B1 /* PBXTargetDependency */,
-			);
-			name = label;
-			productName = label;
-			productReference = CB23A4CE90D5A89FA2640A78 /* label.app */;
-			productType = "com.apple.product-type.application";
-		};
-		FDE67811CD6F028754008B48 /* tree */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = A66331810196CE80746EC56A /* Build configuration list for PBXNativeTarget "tree" */;
-			buildPhases = (
-				852F82C6C8F42587788BBC8B /* Resources */,
-				240215B524AB7E0A55D46972 /* Sources */,
-				DF2E072017D78D49A2CB8DF9 /* Frameworks */,
-				9CB82796EC8649C3AC621805 /* CopyFiles */,
-			);
-			buildRules = (
-				D18EC3D39810A767612292A1 /* PBXBuildRule */,
-			);
-			dependencies = (
-				89EEA83A9CD9747F05B1E6AA /* PBXTargetDependency */,
-				9519279882836E4B8EDEBE60 /* PBXTargetDependency */,
-			);
-			name = tree;
-			productName = tree;
-			productReference = 6101F771F14EE7AEB2C917A4 /* tree.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		4BF1A7FFEACF5F31B4127482 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0430;
-				TargetAttributes = {
-					7F7CF7F41AB97CEF00E12B22 = {
-						CreatedOnToolsVersion = 6.2;
-					};
-					7FBCECC71B1D8AA500AB970D = {
-						CreatedOnToolsVersion = 6.3;
-					};
-				};
-			};
-			buildConfigurationList = 615453DB5B8EBEE070930DA7 /* Build configuration list for PBXProject "FLTK" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				English,
-				Japanese,
-				French,
-				German,
-				Italian,
-				Spanish,
-			);
-			mainGroup = 2000E0C1AD91ACA63811D339;
-			productRefGroup = DCB546B00EC62A9F8CC4181A /* Products */;
-			projectDirPath = "";
-			projectRoot = ../..;
-			targets = (
-				AE6BC0AEB24EBBBDBA4071E0 /* Fluid */,
-				A57FDE871C99A52BEEDEE68C /* fltk */,
-				C13484C4A9262C58D8FA7242 /* fltk_gl */,
-				BB76D328D5B89A1273946784 /* fltk_images */,
-				A58BB416AAFDCFF08D7C7E41 /* fltk_png */,
-				0392A304CDC05B94337B7C04 /* fltk_jpeg */,
-				3C13C653905795060D6D4F0A /* fltk_forms */,
-				AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */,
-				79BD42AF87FBA9AE10BD7C58 /* Demo */,
-				7FBCECC71B1D8AA500AB970D /* libfltk */,
-				E8BE99F75E5F3C8725834B33 /* adjuster */,
-				7F7CF7F41AB97CEF00E12B22 /* animated */,
-				9A8F59CD813587E2E463DF07 /* arc */,
-				28919176E960D4209BAB8420 /* ask */,
-				43080284D40D3965685C7975 /* bitmap */,
-				A0731BABBE8E29CE96AC61A7 /* blocks */,
-				D1A43D1D85A87A20B2F7FB09 /* boxtype */,
-				2A6B003A80FBAF126EC8F448 /* browser */,
-				57D7735B02F5215416BA2856 /* button */,
-				DC14E2CC213CC0028EF9BD8B /* buttons */,
-				287CEC5F63A8B5FCDA246BEC /* checkers */,
-				623691BDB3A292582380383B /* clock */,
-				134239549D6BFAC3F8EFC363 /* colbrowser */,
-				98B39383C1F47726C5C0793B /* color_chooser */,
-				10F40C4AE712B17C78435935 /* cube */,
-				32FF2A1069F117986FB927DD /* CubeView */,
-				C4B346660A74B9FCF04EFB2C /* cursor */,
-				17B95BDCBCADC140B2AB54A7 /* curve */,
-				2D69D33A1EBE0D85982EDCC1 /* device */,
-				86BF0C207C6D13ED2B83B63A /* doublebuffer */,
-				F0647F049CED2B54A017A6A0 /* editor */,
-				A2AA5A5F9FF0A53A3382DD6C /* fast_slow */,
-				68590AB4E7667EB94AC7533D /* file_chooser */,
-				B807BFE7F9E6FCE88C0A4E9C /* fonts */,
-				6C72ECB2743615E24D873456 /* forms */,
-				3C6AD358F2FC5419FDA04243 /* fractals */,
-				AFFC1E48270AB19243D7B668 /* fullscreen */,
-				234377F13A1D2CBBCF9E5043 /* gl_overlay */,
-				D7D4B168DE66A92F9F8747C0 /* glpuzzle */,
-				7483E011046F1E2FC84A989B /* hello */,
-				B37F5F8EB169ABA76EA02FB9 /* help */,
-				CA05747C492074A51F2F35BC /* iconize */,
-				36F787DB6844466ACF848593 /* image */,
-				4D6391C0735EF1A5A8588826 /* inactive */,
-				5C2FE9F5E71E04EA903248FA /* input */,
-				F781BF6B6F74841F05AAA4BE /* input_choice */,
-				0F789352A34B2A230259EEC7 /* keyboard */,
-				FA19DC0D800A66EC69E9560E /* label */,
-				82C0BD76C77A518B0A1499B5 /* line_style */,
-				4F654080B01E856B05662A65 /* list_visuals */,
-				F39A907E68C3C55EACDF4D3C /* mandelbrot */,
-				5E088B3BCE2A52C627EC5A53 /* menubar */,
-				26B873E37B315C0F7BABC202 /* message */,
-				5FF6CC4785D964CE080FB494 /* minimum */,
-				51EB382683C25DBDD02CBF33 /* navigation */,
-				EE40189E3B7BB6337ABA74C7 /* native-filechooser */,
-				7F419DF51D92857E0098B602 /* offscreen */,
-				78DE657148EC00153D1103A8 /* output */,
-				89DAC07651B4C516C173A1C1 /* overlay */,
-				35F2A3666BFB337E150860D9 /* pack */,
-				752ADA98861AB73DFEECD267 /* pixmap_browser */,
-				9EA6FF727BC736133B0B85A1 /* pixmap */,
-				1B8EEEC5C9C85BA44EF759EB /* preferences */,
-				D217C1AD7BE42CB2138F2993 /* radio */,
-				BEB651546D79EDC169128FD5 /* resizebox */,
-				D14DC4F3D302856B84343ED5 /* resize */,
-				C8EFCE83A8BC9CA56922D024 /* rotated_text */,
-				AF9D43D9317D81CEF5290A74 /* scroll */,
-				0C8980D2E4E0E914FE651FDB /* shape */,
-				B4A214CBEE4FE0EB1FEF8982 /* subwindow */,
-				9472188EEB541EF3EA60AB03 /* sudoku */,
-				22F83D75D3AC309504978002 /* symbols */,
-				93AABBAC7C288CC95BFC5707 /* table */,
-				658EF1017CAE2D453B68A345 /* tabs */,
-				7C787E8918BC5CF86B17E1EB /* threads */,
-				82436F720F585ECD3B0A56CE /* tile */,
-				B5DAF3DCC189A02ADD9DF320 /* tiled_image */,
-				FDE67811CD6F028754008B48 /* tree */,
-				C9165EA11291A304003FF4F0 /* unittests */,
-				2BFE084E4D6FAB77DCAF0A83 /* utf8 */,
-				E167C0E81B125EBADAC8ED73 /* valuators */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		025AF787C2B449CCA5E2DB88 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0B490364219A1412F38C7304 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0B616FD0D2D26B2C3FFC8930 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0C15FF58F09823C404F6D72D /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C9F9C0DE12CFCDAC0067ADCC /* rgb.txt in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0EAD40FA79F67B287A4151C4 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		13BD0757F479A5F3462FCC54 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1D39966685B7BBFD995AA3A9 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1D6F019214F0C661CF5C1657 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		244AADC40042B9AE67B44E1E /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		24B09083AB102172E2E1F627 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2DDE7E43CDF1C00459675F35 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		36BFACF5FF774BDDC57C7347 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F8E7E3D1C0DA90100B806A0 /* Localizable.strings in Resources */,
-				7F8E7E391C0DA8D200B806A0 /* Localizable.strings in Resources */,
-				7F8E7E3C1C0DA8FB00B806A0 /* Localizable.strings in Resources */,
-				7F8E7E3B1C0DA8F700B806A0 /* Localizable.strings in Resources */,
-				7F8E7E3A1C0DA8F000B806A0 /* Localizable.strings in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		38181B0ECAFDECC7FE921D9C /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		3A07A85250EDE4038FDD51C9 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7FED8F171AD699C700276ED9 /* blocks.icns in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		3E48ED081373780C4EDB3D4B /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		418ACF0B3E1F4ABA8A604D21 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		41EB235F15F87678F80C27D5 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		453EA7CD7A8F555E59EEB31E /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		47783618090233D5416F2DEF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		48166A90E958A4B60BA78F96 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		491856FD432ADEC2668039CF /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		49A1C42C8800EB4734DB7148 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4D3DC8094FE89B2038F2D3A0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		54D5AC0D48D4411B05695216 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		56917850BC21D3657A470E65 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5C139D9D4E65751359F9B075 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5C228FF2BC54AD72B82DB199 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5E63597A6F22F3C5EAE6C3F2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5F75C7F48A3C5358A71D46F2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5FA2A41FABCDB9B62D65C36A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		618F2BF11B0642C7B9AE6B3E /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		660536C10D4E56DF6EB48879 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		66CA511D5A56D954BBBF42C5 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6715D162BEFF87372B2A31E0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6A37D389FD2F3165D4CE73C2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F3421EC1CE8ADB7005FA821 /* help-test.html in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6E029D85A424DB0449238C6D /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7FED8F1A1AD69B4200276ED9 /* checkers.icns in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7861C4D41283D0C4250D584C /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7E2F13E3024D0010203CE197 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F419DF81D92857E0098B602 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F7CF7F31AB97CEF00E12B22 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7FF98EDFDA8EC3359F40E824 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		84E8096200DDFEC5FF39EF2A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		852F82C6C8F42587788BBC8B /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		882A2E3BF32AE727EC05BFE2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8D1966E6143C3919C4C6A4E7 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8DA98B1BE5564648BCA2C26A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8E4C221D09DDD8636DFF20F8 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7FED8F1C1AD69B5B00276ED9 /* sudoku.icns in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8E805BABF05E76A58110D918 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8F88598886366825DB086B55 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		909C7B633C6937F4878B24B8 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		962146FC5CDEC4BE6D271008 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9A5B458C7F1ACC75DBA26DD4 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9ECB20D6CCF567B51F39E9B8 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A50661091E02301A7A8E927C /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A5C94CCC9C50822A6F406C48 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A5CF311CDAFD7365826752CA /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		ACF24AC7D859B7880B0D58D4 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				27C588BBFC1BE5D0F8202036 /* fluid.icns in Resources */,
-				7FDBB8F416B2D1EA00AE76EF /* Localizable.strings in Resources */,
-				7FDBB8F516B2D1EE00AE76EF /* Localizable.strings in Resources */,
-				7FDBB8F616B2D1FA00AE76EF /* Localizable.strings in Resources */,
-				7FDBB8F716B2D1FF00AE76EF /* Localizable.strings in Resources */,
-				7FDBB8F816B2D20A00AE76EF /* Localizable.strings in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B3E63D707BAD0C1B97C19557 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B726E61023969BF4554BD695 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B7BAF95F07F127AF3CD96681 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B8C9B63E5D2B0E2CE7A5EAA0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BB446BDCD98D92BF8F4F474E /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BD1A94F2F267D5669C20C1F8 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BE10458E3BD00A1A721471A1 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C46B78D74FA9483926E73794 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C8258DEE0DC0BF57A0412C37 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C82F55B77BDFE26B6897FE76 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9165EA41291A304003FF4F0 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D5AB2E01EE1DBEB40D62B39C /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D974AB8D7C7B0B0E64AE7431 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D99E3A92B1CB6E759008B848 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DD6DFBB539A30EBC538753B4 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DDEB33A67B19E529CD5A9DE9 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E0451824DAF0D20812D766A5 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E9699503AACADD52B6031973 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EA582656BF4C5C12E9AE4C86 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EB79EB024BF350D4AEDA1BB8 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C984AFA812D02A1800D66DAD /* demo.menu in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EF8251CF9948AB8AC2403411 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F7059AF9D5F709CCAB5FF15A /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FD29247E410EF80C9A411BF2 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		7FA08BC11C4EA964001CBE06 /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "cp -p -f ../../abi-version.ide ../../FL/abi-version.h";
-		};
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		03952EF9A011C37E408094AD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				36332A81E6A6E7E3D5D26531 /* radio.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		04BAC99AEC68BBEE577DFB01 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FDCE22DD1D7C2DD6D001F3F7 /* sudoku.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		06DCEBFB206D700198008C01 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A8C6B33E92B95C8BFC2474AA /* clock.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		0728F2A5E33C2403F7077DEC /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				214EBBAA64EC8BD80F10FE5E /* native-filechooser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		07771C512125B321FE1A0EEA /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				079434B72A838E83BD225CA8 /* demo.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		089522EE9936A885D43F4780 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DB5B9D4C2AE7D9CDB7E7090F /* utf8.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		09905312FF08B2C58A02A353 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				99D36A82E25FA21388F02CF6 /* menubar.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1249EDBFF7D5FD2128B9D60E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				762325B25679668EB687A028 /* gl_overlay.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		12613C0CC16AB08E523385AE /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A353346626877C39793017E3 /* input_choice.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		18A195225FBC2909509015CD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				9F14A436271D44C0065C6B8E /* iconize.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		18F09DA86ADDE918514D17A6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AAC60FD565D09DE2684D8216 /* shape.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		18F1FCD84C6F9AE80AECB726 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				642541867ABE531C662490CD /* pixmap.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		1D4D9E8B784735A2E0CD03A0 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EA7F9D421C6E3CDB704CC37A /* adjuster.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		214690E38E9696C46A3A3BA2 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B1F3B977689E723FFE6B55CE /* list_visuals.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2383CCCA8BAF88211E55A665 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AA97A72D630589375BE291D2 /* fast_slow.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		23FEA5765483F0D5EB7B112E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				87C8FA7D36117797390DBFC2 /* Fl_BMP_Image.cxx in Sources */,
-				992B8D52C2B8D4153B0B826E /* Fl_File_Icon2.cxx in Sources */,
-				1E30BECEFBF8C39CC563B19C /* Fl_GIF_Image.cxx in Sources */,
-				E2423A959545399CB91ECDFB /* Fl_Help_Dialog.cxx in Sources */,
-				E659DF579A3CC1BEDFA740CA /* Fl_JPEG_Image.cxx in Sources */,
-				C734B46832FFC64A9397F6AE /* Fl_PNG_Image.cxx in Sources */,
-				B4967545FF5EBB072DF98FBA /* Fl_PNM_Image.cxx in Sources */,
-				3E1DA192DE89A61DB5162D12 /* fl_images_core.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		240215B524AB7E0A55D46972 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				16FC08C22B1B693EB00C15F5 /* tree.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		241181BBBC141ACFEF36D6A6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7C8F2CC22CFE9E97BBE4AC8A /* resizebox.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		25910CDF4BCB7F440E5B74E7 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				363CA6BAC2E1C6F51F3C4F91 /* tiled_image.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		25A0A1371179487A2E32B9B1 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FE82A6E34B6A3F1B030E8AB3 /* image.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		2C8CFF851D7C7DC1D9609D17 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3A83BE134FEB6C0E893FC0AA /* forms_bitmap.cxx in Sources */,
-				491C33E5D1C00D489356B62E /* forms_compatability.cxx in Sources */,
-				0DCEA2FED492160FBCEAECC7 /* forms_free.cxx in Sources */,
-				BC8942F1FEEC9A2691F4F9DB /* forms_fselect.cxx in Sources */,
-				847632FAB43A248BDBD402E7 /* forms_pixmap.cxx in Sources */,
-				BF9ADADABD6C333A67A3E2AA /* forms_timer.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		32341C37AE8EF4901FF8422C /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				BFC69F29CCDCFD4AD8333CB0 /* overlay.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		388F82757706F801E753A331 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				EA66F478D3FC94BAF04B0BB5 /* message.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		3CEBD96B1A8A5379FADF1440 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				6F54BCE9C265659518C91270 /* output.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		3F01A8A8FBC9B6B924965748 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				6D3127372B7CF208B3FFC3BB /* fonts.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		44D64FC34C530A55BD691A3D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D0558977436E06E35352EC86 /* cube.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		467796583E5586A73ED4AA49 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7963240B96561256B383C35B /* buttons.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		494DC1E0F6E594216C318710 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C1ED8D862E76530E4581C7AC /* mandelbrot.cxx in Sources */,
-				609595520CEFF3C9F945D4B7 /* mandelbrot_ui.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4DA82C38AA0403E56A1E3545 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F66B1D912BB924C00C67B59 /* Fl_cocoa.mm in Sources */,
-				7F66B1DA12BB924C00C67B59 /* Fl_Native_File_Chooser_MAC.mm in Sources */,
-				7F66B1DB12BB924C00C67B59 /* Fl_Quartz_Printer.mm in Sources */,
-				7FFDE552171D8D0D008753A3 /* Fl_Sys_Menu_Bar.mm in Sources */,
-				ED83B85BA678C8C9B5E91535 /* Fl.cxx in Sources */,
-				B371C5FF1106E69056784D6C /* Fl_Adjuster.cxx in Sources */,
-				274F92CF30A586E0F8E21530 /* Fl_Bitmap.cxx in Sources */,
-				40E66CBA06083998669F80CE /* Fl_Box.cxx in Sources */,
-				43440CEB6D01238C27CFEE6A /* Fl_Browser.cxx in Sources */,
-				7EC3AD9A56535A54430B8DCD /* Fl_Browser_.cxx in Sources */,
-				1565219A0166F42F299C2C9E /* Fl_Browser_load.cxx in Sources */,
-				7D2F2709B54D7A2A87630351 /* Fl_Button.cxx in Sources */,
-				ADEA3027A360B72B9B45F7A7 /* Fl_Chart.cxx in Sources */,
-				FCC598DC853F3753AFCD269C /* Fl_Check_Browser.cxx in Sources */,
-				B552268F52748B13E526FF43 /* Fl_Check_Button.cxx in Sources */,
-				6A001220236C38EDB3772A2A /* Fl_Choice.cxx in Sources */,
-				390AA30E68FA34A4A6F57F9C /* Fl_Clock.cxx in Sources */,
-				29ED282EF51CBBB0CDEE76D6 /* Fl_Color_Chooser.cxx in Sources */,
-				4CE404B23BB3CB7291A0E2BC /* Fl_Counter.cxx in Sources */,
-				4D96D0670427CCD638845C05 /* Fl_Device.cxx in Sources */,
-				CA035B0265710EFABD6E632D /* Fl_Dial.cxx in Sources */,
-				EE1DAA8B2CB944B2D5426CB6 /* Fl_Double_Window.cxx in Sources */,
-				745C2AF79ABD813E3AE9CD70 /* Fl_File_Browser.cxx in Sources */,
-				2C0BDF55B026879D401DF915 /* Fl_File_Chooser.cxx in Sources */,
-				61407877A424C4E1A74036C0 /* Fl_File_Chooser2.cxx in Sources */,
-				6DA839CF781EBC87AD3CF6B4 /* Fl_File_Icon.cxx in Sources */,
-				9DFFD353B45F553EA8D7A505 /* Fl_File_Input.cxx in Sources */,
-				302D959F1FBBC3D44D27BA3F /* Fl_Group.cxx in Sources */,
-				74D195DEE3A33FA0C8C7A5BE /* Fl_Help_View.cxx in Sources */,
-				6F8B4EC22CC54B6B06F9D5C7 /* Fl_Image.cxx in Sources */,
-				0BD1B4FF53C27EDA7B9F2C66 /* Fl_Input.cxx in Sources */,
-				2CFBED9BA0BE01679B285434 /* Fl_Input_.cxx in Sources */,
-				5D1D08BF3F79DC7C29D6FCF4 /* Fl_Light_Button.cxx in Sources */,
-				E3C29EE9B0D666B794852902 /* Fl_Menu.cxx in Sources */,
-				501B41BD7C164588BBC06854 /* Fl_Menu_.cxx in Sources */,
-				83351BED9380E4C82A55E123 /* Fl_Menu_Bar.cxx in Sources */,
-				0C356220FCB74315D62FF06C /* Fl_Menu_Button.cxx in Sources */,
-				AD29B4FC0DB13DB2BE1616A0 /* Fl_Menu_Window.cxx in Sources */,
-				E04B6EEBEA1C209F4FF7C4AD /* Fl_Menu_add.cxx in Sources */,
-				9FBEB3AC22BC51940B350AF5 /* Fl_Menu_global.cxx in Sources */,
-				AB7FF03265A1060DDAC5E71B /* Fl_Multi_Label.cxx in Sources */,
-				59826A4FF117DE06A6F70ABD /* Fl_Native_File_Chooser.cxx in Sources */,
-				291FA24A9E91A2036BC718A2 /* Fl_Overlay_Window.cxx in Sources */,
-				2E43C0679E5714486D7D535F /* Fl_Pack.cxx in Sources */,
-				B082626A90693D0C12904CB7 /* Fl_Pixmap.cxx in Sources */,
-				812129561A1981D6DEFBCBFB /* Fl_Positioner.cxx in Sources */,
-				AD0F285A651FEF5CB6FC7012 /* Fl_Printer.cxx in Sources */,
-				C616A9C9EDD193DF4BADDA5A /* Fl_Preferences.cxx in Sources */,
-				717B3CDBF11CAE5C04D035F8 /* Fl_Progress.cxx in Sources */,
-				3F330B8758EB5AFF7C6CB8DE /* Fl_Repeat_Button.cxx in Sources */,
-				8CCF18F146F2012A0C1DC330 /* Fl_Return_Button.cxx in Sources */,
-				D0CF9C806A93CFB18B0DAA6F /* Fl_Roller.cxx in Sources */,
-				495C752B9742C0729399A646 /* Fl_Round_Button.cxx in Sources */,
-				878478F960A354C2DF2DC7E6 /* Fl_Scroll.cxx in Sources */,
-				D49C72834787A96D62E0DC96 /* Fl_Scrollbar.cxx in Sources */,
-				2C4DB237B4B8ACD2FB305BD5 /* Fl_Shared_Image.cxx in Sources */,
-				ED169E1E1FC93C1F97D21AC4 /* Fl_Single_Window.cxx in Sources */,
-				29A99477531233BE9391CE66 /* Fl_Slider.cxx in Sources */,
-				DB29DA4D89702B490E69B569 /* Fl_Table.cxx in Sources */,
-				644FEEF43A0CCBD89E2CE6FC /* Fl_Table_Row.cxx in Sources */,
-				CDCB453B3493D8E96E80DFF7 /* Fl_Tabs.cxx in Sources */,
-				FB93EB94C997FC6F8C5D389D /* Fl_Text_Buffer.cxx in Sources */,
-				4536387C357FBA58B3C5258B /* Fl_Text_Display.cxx in Sources */,
-				8F77031B8CCFF315D4CB151E /* Fl_Text_Editor.cxx in Sources */,
-				E21880F92CD1B5E315C3F4DF /* Fl_Tile.cxx in Sources */,
-				49D34CB404F15A055EAF8C74 /* Fl_Tiled_Image.cxx in Sources */,
-				4D94E62EB4D5FDF72A7C311E /* Fl_Tooltip.cxx in Sources */,
-				2418351D87E14186F8F1E3FE /* Fl_Tree.cxx in Sources */,
-				6527520C50FC90A0EDE72F87 /* Fl_Tree_Item.cxx in Sources */,
-				A8CCCF7D542DA0B5FED00393 /* Fl_Tree_Item_Array.cxx in Sources */,
-				A76B5A74F4082F02C1A917F6 /* Fl_Tree_Prefs.cxx in Sources */,
-				36F84F47A06F428D67FDBC3D /* Fl_Valuator.cxx in Sources */,
-				185933E619D6C024C4B53D3B /* Fl_Value_Input.cxx in Sources */,
-				86C566B54637B5F773257067 /* Fl_Value_Output.cxx in Sources */,
-				A40F3E633565708E8113728D /* Fl_Value_Slider.cxx in Sources */,
-				CAF6CE97B3EBEFFA65AAEEAD /* Fl_Widget.cxx in Sources */,
-				7F12FCC718E1EEB900AB6A11 /* fl_gleam.cxx in Sources */,
-				023D5B2431F40114C118A5DB /* Fl_Window.cxx in Sources */,
-				5FE596C22B71AF1F7235ECAE /* Fl_Window_fullscreen.cxx in Sources */,
-				382C61DCD714A86859AA21CC /* Fl_Window_hotspot.cxx in Sources */,
-				0A206149DF20CCCACC90E642 /* Fl_Window_iconize.cxx in Sources */,
-				339D0DFC256DE06A10F214B3 /* Fl_Wizard.cxx in Sources */,
-				36C7638C1D7425F3F9433974 /* Fl_XBM_Image.cxx in Sources */,
-				F4769A68D050A61218AC5B42 /* Fl_XPM_Image.cxx in Sources */,
-				03DB7A962738A76C4D5BAD67 /* Fl_abort.cxx in Sources */,
-				1490AC534F76E26EF9280C6D /* Fl_add_idle.cxx in Sources */,
-				E5B4AF727E38F946F3FC7AB0 /* Fl_arg.cxx in Sources */,
-				1F8D0FF2FEEA810F9264E92F /* Fl_compose.cxx in Sources */,
-				D6455053A0353F27F994556F /* Fl_display.cxx in Sources */,
-				ECEE8B8231D50277C09E21B8 /* Fl_get_key.cxx in Sources */,
-				F61DCEF69E70439429A6C865 /* Fl_get_system_colors.cxx in Sources */,
-				B23B202A8879E9E8DCA4C283 /* Fl_grab.cxx in Sources */,
-				9A5E7CD9FB838B39C3D8E75C /* Fl_lock.cxx in Sources */,
-				3C2E57EF6298BB0FC9412871 /* Fl_own_colormap.cxx in Sources */,
-				AC85BE9A50BEE739620E7080 /* Fl_visual.cxx in Sources */,
-				9B1EDE4CD694BD6EECFDD3D9 /* Fl_x.cxx in Sources */,
-				F8C4B882B6A9C15C2105AAA8 /* filename_absolute.cxx in Sources */,
-				D7E6146CFE9389C35447F23B /* filename_expand.cxx in Sources */,
-				FD872A3C0217DEF3E1042A02 /* filename_ext.cxx in Sources */,
-				242570F8A9539222DEAC6CAF /* filename_isdir.cxx in Sources */,
-				2BE1A3AC07CE39EEAC5E2B98 /* filename_list.cxx in Sources */,
-				A355A5A2EEF58A53CD2CF081 /* filename_match.cxx in Sources */,
-				3FD5B1D9C066066CCA52724A /* filename_setext.cxx in Sources */,
-				95AFA1B1A6FA7902372E96A6 /* fl_arc.cxx in Sources */,
-				88E3AAF4EEE5C45BE693C493 /* fl_arci.cxx in Sources */,
-				1CD7ED77B7B8FE0D99290351 /* fl_ask.cxx in Sources */,
-				12E4293A141DD684369D6B8F /* fl_boxtype.cxx in Sources */,
-				34870EA10DBD90DB3DD49DA0 /* fl_call_main.c in Sources */,
-				854002A1B71DBAE327B8C4E8 /* fl_color.cxx in Sources */,
-				7FFDD15C19BE08A800779AD1 /* Fl_PostScript.cxx in Sources */,
-				2C8EFE6F2A1297FB4B263B2A /* fl_cursor.cxx in Sources */,
-				5DE5BC3242C44595E62FA505 /* fl_curve.cxx in Sources */,
-				7F6F526419CF0FED0075F408 /* Fl_Window_shape.cxx in Sources */,
-				CD2C6C2797C19E76EA67D308 /* fl_diamond_box.cxx in Sources */,
-				BDB3A4C9B2AC519DC6A95D84 /* fl_dnd.cxx in Sources */,
-				93E6F83B3B6E8F6473DE0FFC /* fl_draw.cxx in Sources */,
-				902B7D9D5C27F6AF1727D275 /* fl_draw_image.cxx in Sources */,
-				B7E877DDAB1EAFB470DE347B /* fl_draw_pixmap.cxx in Sources */,
-				9C5407631126EB6528352833 /* fl_encoding_latin1.cxx in Sources */,
-				F0BC0BF84BB72AA0DD104B0E /* fl_encoding_mac_roman.cxx in Sources */,
-				C15F39A34F7287D9D15F0F32 /* fl_engraved_label.cxx in Sources */,
-				B29518D26E24DA48CB98E311 /* fl_file_dir.cxx in Sources */,
-				929E238322B78D6EE544D8A3 /* fl_font.cxx in Sources */,
-				B0A7D39BA00A2517C9AF5516 /* fl_gtk.cxx in Sources */,
-				B3A220D71CE32208C089B2BA /* fl_labeltype.cxx in Sources */,
-				44EF64739BF54210820845FC /* fl_line_style.cxx in Sources */,
-				285B384349B0FC5FCE9C9FCE /* fl_open_uri.cxx in Sources */,
-				51A81D32CDB7920F88ED4FF2 /* fl_oval_box.cxx in Sources */,
-				42B3433FEAA6AFB50DE4B73F /* fl_overlay.cxx in Sources */,
-				43ACC9B8BA3A1A325A568C44 /* fl_overlay_visual.cxx in Sources */,
-				0FBA0DE689FCB1A3B674BAC4 /* fl_plastic.cxx in Sources */,
-				09FD0BA86D2E85CF21F7C870 /* fl_read_image.cxx in Sources */,
-				2F757A7D91462691787751A3 /* fl_rect.cxx in Sources */,
-				83EDAF59D2EF849FA3EE8539 /* fl_round_box.cxx in Sources */,
-				CE62A14F1AD1FAE2240FE567 /* fl_rounded_box.cxx in Sources */,
-				9FD0445EBA827CC658078A14 /* fl_scroll_area.cxx in Sources */,
-				0F61FB70E4BBAE3919346A0E /* fl_set_font.cxx in Sources */,
-				2F1EEE1E773AE6F2DCC92118 /* fl_set_fonts.cxx in Sources */,
-				4E3DD3A261BD3A7DE91162ED /* fl_shadow_box.cxx in Sources */,
-				864A7D2E295FB8125D768AC6 /* fl_shortcut.cxx in Sources */,
-				2800B0509A5D20FABE8F02DC /* fl_show_colormap.cxx in Sources */,
-				0262498E858406B6E51BD4E4 /* fl_symbols.cxx in Sources */,
-				3BD005D954ABCB5983F540AB /* fl_utf.c in Sources */,
-				AEC9E288AC9E09B99855D15C /* fl_utf8.cxx in Sources */,
-				D2649C006A1AF19ADB38855E /* fl_vertex.cxx in Sources */,
-				51FC4E43CA74B5CB3FD91147 /* flstring.c in Sources */,
-				DC4BEF50B12F14C694F1C9DE /* numericsort.c in Sources */,
-				C8D2445DE4DB272D6140EB4D /* ps_image.cxx in Sources */,
-				5849E21F505FC39533995DCA /* scandir.c in Sources */,
-				936CD95E2DFE52FEF2A6BCE1 /* screen_xywh.cxx in Sources */,
-				29303C4480E0BBEB9E29EE7B /* vsnprintf.c in Sources */,
-				EF0B77D0D7EF375C1CBDC390 /* case.c in Sources */,
-				CE14EC6653D4EF4779992758 /* is_right2left.c in Sources */,
-				9DD7A2B6D63D30C07781F446 /* is_spacing.c in Sources */,
-				299CB8A2848CB844BCEC7829 /* Fl_Paged_Device.cxx in Sources */,
-				7FA5C2BE192FAEBB00519823 /* Fl_Copy_Surface.cxx in Sources */,
-				7FA5C2C0192FAECA00519823 /* Fl_Image_Surface.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		4DAA5BB519E04EF5DA60207E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DDC5CCCCC885EDFCC410A343 /* rotated_text.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5452B46AE20C9A675AF377AC /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7359A414B4FEE003CFCA6351 /* threads.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		5A1A7446A600F238DBF01ECD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7A166EFA4FE98B4E7D74341B /* doublebuffer.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6340124B1D917C09718D7D97 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				40ED2C03EA658A1A020BF7C8 /* help.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		68D98A2534544E1210E8A095 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8392A5E218FC136D60CD87EC /* minimum.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6ABADE980903C2EF8A723E4D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C45087B77CDF09378D50E87A /* glpuzzle.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		6D73F5D2BE42E5D25C1A55E6 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				84044FF4959DEB4FC39F70DA /* navigation.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		704DAC3A75053027E8E80B21 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5532B5F13E75B01A47BF52E4 /* line_style.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		71F9CE4E872DB73038D0EC84 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				0C21574DDEF4360995F5AC1C /* table.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		75EF108523E2405BE39FD030 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				CEE453263236AABE10DD1EC4 /* label.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7A3B83CEF285671CB7B96E68 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				74C9584969DCD849A6A1247F /* color_chooser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7EAC77CA2592224F5EC588DA /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FE4DBBE6653EF8D85096E098 /* tabs.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F419DF91D92857E0098B602 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F419E071D9285D90098B602 /* offscreen.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7F7CF7F11AB97CEF00E12B22 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7F7CF81F1AB9836C00E12B22 /* animated.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		7FBCECC41B1D8AA500AB970D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7FBCED011B1D8B2100AB970D /* Fl_Light_Button.cxx in Sources */,
-				7FBCED361B1D8B2100AB970D /* Fl_XPM_Image.cxx in Sources */,
-				7FBCED5E1B1D8B2100AB970D /* fl_gtk.cxx in Sources */,
-				7FBCED421B1D8B2100AB970D /* Fl_x.cxx in Sources */,
-				7FBCECE31B1D8B2100AB970D /* Fl.cxx in Sources */,
-				7FBCED391B1D8B2100AB970D /* Fl_arg.cxx in Sources */,
-				7FBCED041B1D8B2100AB970D /* Fl_Menu_Bar.cxx in Sources */,
-				7FBCED081B1D8B2100AB970D /* Fl_Menu_global.cxx in Sources */,
-				7FBCED211B1D8B2100AB970D /* Fl_Text_Display.cxx in Sources */,
-				7FBCED4B1B1D8B2100AB970D /* fl_arc.cxx in Sources */,
-				7FBCECE51B1D8B2100AB970D /* Fl_Bitmap.cxx in Sources */,
-				7FBCED381B1D8B2100AB970D /* Fl_add_idle.cxx in Sources */,
-				7FBCED861B1D8B3B00AB970D /* glut_compatability.cxx in Sources */,
-				7FBCED4E1B1D8B2100AB970D /* fl_boxtype.cxx in Sources */,
-				7FBCECFA1B1D8B2100AB970D /* Fl_File_Input.cxx in Sources */,
-				7FBCED3A1B1D8B2100AB970D /* Fl_compose.cxx in Sources */,
-				7FBCED551B1D8B2100AB970D /* fl_draw.cxx in Sources */,
-				7FBCECE81B1D8B2100AB970D /* Fl_Browser_.cxx in Sources */,
-				7FBCED1B1B1D8B2100AB970D /* Fl_Single_Window.cxx in Sources */,
-				7FBCED2B1B1D8B2100AB970D /* Fl_Value_Input.cxx in Sources */,
-				7FBCED941B1D8B5C00AB970D /* forms_pixmap.cxx in Sources */,
-				7FBCED771B1D8B2100AB970D /* scandir.c in Sources */,
-				7FBCED621B1D8B2100AB970D /* fl_oval_box.cxx in Sources */,
-				7FBCED531B1D8B2100AB970D /* fl_diamond_box.cxx in Sources */,
-				7FBCED411B1D8B2100AB970D /* Fl_visual.cxx in Sources */,
-				7FBCED931B1D8B5C00AB970D /* forms_fselect.cxx in Sources */,
-				7FBCED831B1D8B3B00AB970D /* freeglut_stroke_roman.cxx in Sources */,
-				7FBCED251B1D8B2100AB970D /* Fl_Tooltip.cxx in Sources */,
-				7FBCECE01B1D8B2100AB970D /* Fl_Native_File_Chooser_MAC.mm in Sources */,
-				7FBCED141B1D8B2100AB970D /* Fl_Repeat_Button.cxx in Sources */,
-				7FBCED691B1D8B2100AB970D /* fl_rounded_box.cxx in Sources */,
-				7FBCED0D1B1D8B2100AB970D /* Fl_Paged_Device.cxx in Sources */,
-				7FBCECDF1B1D8B2100AB970D /* Fl_cocoa.mm in Sources */,
-				7FBCED121B1D8B2100AB970D /* Fl_Preferences.cxx in Sources */,
-				7FBCED2C1B1D8B2100AB970D /* Fl_Value_Output.cxx in Sources */,
-				7FBCED151B1D8B2100AB970D /* Fl_Return_Button.cxx in Sources */,
-				7FBCED331B1D8B2100AB970D /* Fl_Window_shape.cxx in Sources */,
-				7FBCED511B1D8B2100AB970D /* fl_cursor.cxx in Sources */,
-				7FBCED051B1D8B2100AB970D /* Fl_Menu_Button.cxx in Sources */,
-				7FBCED8C1B1D8B4E00AB970D /* Fl_JPEG_Image.cxx in Sources */,
-				7FBCED761B1D8B2100AB970D /* ps_image.cxx in Sources */,
-				7FBCECFB1B1D8B2100AB970D /* Fl_Group.cxx in Sources */,
-				7FBCED701B1D8B2100AB970D /* fl_symbols.cxx in Sources */,
-				7FBCECE21B1D8B2100AB970D /* Fl_Sys_Menu_Bar.mm in Sources */,
-				7FBCED851B1D8B3B00AB970D /* gl_draw.cxx in Sources */,
-				7FBCED291B1D8B2100AB970D /* Fl_Tree_Prefs.cxx in Sources */,
-				7FBCED501B1D8B2100AB970D /* fl_color.cxx in Sources */,
-				7FBCECE61B1D8B2100AB970D /* Fl_Box.cxx in Sources */,
-				7FBCECF01B1D8B2100AB970D /* Fl_Color_Chooser.cxx in Sources */,
-				7FBCED921B1D8B5C00AB970D /* forms_free.cxx in Sources */,
-				7FBCED271B1D8B2100AB970D /* Fl_Tree_Item.cxx in Sources */,
-				7FBCED3C1B1D8B2100AB970D /* Fl_get_key.cxx in Sources */,
-				7FBCECF91B1D8B2100AB970D /* Fl_File_Icon.cxx in Sources */,
-				7FBCED191B1D8B2100AB970D /* Fl_Scrollbar.cxx in Sources */,
-				7FBCED471B1D8B2100AB970D /* filename_isdir.cxx in Sources */,
-				7FBCED951B1D8B5C00AB970D /* forms_timer.cxx in Sources */,
-				7FBCED6E1B1D8B2100AB970D /* fl_shortcut.cxx in Sources */,
-				7FBCED751B1D8B2100AB970D /* numericsort.c in Sources */,
-				7FBCECF61B1D8B2100AB970D /* Fl_File_Browser.cxx in Sources */,
-				7FBCED561B1D8B2100AB970D /* fl_draw_image.cxx in Sources */,
-				7FBCED7B1B1D8B2100AB970D /* is_right2left.c in Sources */,
-				7FBCED0A1B1D8B2100AB970D /* Fl_Native_File_Chooser.cxx in Sources */,
-				7FBCED1A1B1D8B2100AB970D /* Fl_Shared_Image.cxx in Sources */,
-				7FBCED301B1D8B2100AB970D /* Fl_Window_fullscreen.cxx in Sources */,
-				7FBCED581B1D8B2100AB970D /* fl_encoding_latin1.cxx in Sources */,
-				7FBCED5D1B1D8B2100AB970D /* fl_gleam.cxx in Sources */,
-				7FBCED911B1D8B5C00AB970D /* forms_compatability.cxx in Sources */,
-				7FBCECF21B1D8B2100AB970D /* Fl_Counter.cxx in Sources */,
-				7FBCED841B1D8B3B00AB970D /* freeglut_teapot.cxx in Sources */,
-				7FBCED611B1D8B2100AB970D /* fl_open_uri.cxx in Sources */,
-				7FBCED801B1D8B3B00AB970D /* Fl_Gl_Window.cxx in Sources */,
-				7FBCED091B1D8B2100AB970D /* Fl_Multi_Label.cxx in Sources */,
-				7FBCED111B1D8B2100AB970D /* Fl_Printer.cxx in Sources */,
-				7FBCED261B1D8B2100AB970D /* Fl_Tree.cxx in Sources */,
-				7FBCED821B1D8B3B00AB970D /* freeglut_stroke_mono_roman.cxx in Sources */,
-				7FBCED061B1D8B2100AB970D /* Fl_Menu_Window.cxx in Sources */,
-				7FBCED2E1B1D8B2100AB970D /* Fl_Widget.cxx in Sources */,
-				7FBCED711B1D8B2100AB970D /* fl_utf.c in Sources */,
-				7FBCED1D1B1D8B2100AB970D /* Fl_Table.cxx in Sources */,
-				7FBCED6B1B1D8B2100AB970D /* fl_set_font.cxx in Sources */,
-				7FBCED8A1B1D8B4E00AB970D /* Fl_GIF_Image.cxx in Sources */,
-				7FBCECEC1B1D8B2100AB970D /* Fl_Check_Browser.cxx in Sources */,
-				7FBCED351B1D8B2100AB970D /* Fl_XBM_Image.cxx in Sources */,
-				7FBCED101B1D8B2100AB970D /* Fl_PostScript.cxx in Sources */,
-				7FBCED871B1D8B3B00AB970D /* glut_font.cxx in Sources */,
-				7FBCED371B1D8B2100AB970D /* Fl_abort.cxx in Sources */,
-				7FBCECF51B1D8B2100AB970D /* Fl_Double_Window.cxx in Sources */,
-				7FBCED341B1D8B2100AB970D /* Fl_Wizard.cxx in Sources */,
-				7FBCED7F1B1D8B3B00AB970D /* Fl_Gl_Overlay.cxx in Sources */,
-				7FBCED891B1D8B4E00AB970D /* Fl_File_Icon2.cxx in Sources */,
-				7FBCECFD1B1D8B2100AB970D /* Fl_Image.cxx in Sources */,
-				7FBCED881B1D8B4E00AB970D /* Fl_BMP_Image.cxx in Sources */,
-				7FBCED591B1D8B2100AB970D /* fl_encoding_mac_roman.cxx in Sources */,
-				7FBCED2D1B1D8B2100AB970D /* Fl_Value_Slider.cxx in Sources */,
-				7FBCED2F1B1D8B2100AB970D /* Fl_Window.cxx in Sources */,
-				7FBCED1E1B1D8B2100AB970D /* Fl_Table_Row.cxx in Sources */,
-				7FBCED5F1B1D8B2100AB970D /* fl_labeltype.cxx in Sources */,
-				7FBCED8D1B1D8B4E00AB970D /* Fl_PNG_Image.cxx in Sources */,
-				7FBCED4D1B1D8B2100AB970D /* fl_ask.cxx in Sources */,
-				7FBCED431B1D8B2100AB970D /* cmap.cxx in Sources */,
-				7FBCED8E1B1D8B4E00AB970D /* Fl_PNM_Image.cxx in Sources */,
-				7FBCED781B1D8B2100AB970D /* screen_xywh.cxx in Sources */,
-				7FBCECE71B1D8B2100AB970D /* Fl_Browser.cxx in Sources */,
-				7FBCED3D1B1D8B2100AB970D /* Fl_get_system_colors.cxx in Sources */,
-				7FBCED031B1D8B2100AB970D /* Fl_Menu_.cxx in Sources */,
-				7FBCED021B1D8B2100AB970D /* Fl_Menu.cxx in Sources */,
-				7FBCED3F1B1D8B2100AB970D /* Fl_lock.cxx in Sources */,
-				7FBCED4F1B1D8B2100AB970D /* fl_call_main.c in Sources */,
-				7FBCED7E1B1D8B3B00AB970D /* Fl_Gl_Device_Plugin.cxx in Sources */,
-				7FBCECFE1B1D8B2100AB970D /* Fl_Image_Surface.cxx in Sources */,
-				7FBCED441B1D8B2100AB970D /* filename_absolute.cxx in Sources */,
-				7FBCECE11B1D8B2100AB970D /* Fl_Quartz_Printer.mm in Sources */,
-				7FBCECEE1B1D8B2100AB970D /* Fl_Choice.cxx in Sources */,
-				7FBCED541B1D8B2100AB970D /* fl_dnd.cxx in Sources */,
-				7FBCED8F1B1D8B4E00AB970D /* fl_images_core.cxx in Sources */,
-				7FBCED811B1D8B3B00AB970D /* freeglut_geometry.cxx in Sources */,
-				7FBCED201B1D8B2100AB970D /* Fl_Text_Buffer.cxx in Sources */,
-				7FBCED171B1D8B2100AB970D /* Fl_Round_Button.cxx in Sources */,
-				7FBCED0E1B1D8B2100AB970D /* Fl_Pixmap.cxx in Sources */,
-				7FBCED231B1D8B2100AB970D /* Fl_Tile.cxx in Sources */,
-				7FBCED7D1B1D8B3B00AB970D /* Fl_Gl_Choice.cxx in Sources */,
-				7FBCED131B1D8B2100AB970D /* Fl_Progress.cxx in Sources */,
-				7FBCECF71B1D8B2100AB970D /* Fl_File_Chooser.cxx in Sources */,
-				7FBCED4C1B1D8B2100AB970D /* fl_arci.cxx in Sources */,
-				7FBCED601B1D8B2100AB970D /* fl_line_style.cxx in Sources */,
-				7FBCED2A1B1D8B2100AB970D /* Fl_Valuator.cxx in Sources */,
-				7FBCED671B1D8B2100AB970D /* fl_rect.cxx in Sources */,
-				7FBCED0C1B1D8B2100AB970D /* Fl_Pack.cxx in Sources */,
-				7FBCED731B1D8B2100AB970D /* fl_vertex.cxx in Sources */,
-				7FBCED461B1D8B2100AB970D /* filename_ext.cxx in Sources */,
-				7FBCED321B1D8B2100AB970D /* Fl_Window_iconize.cxx in Sources */,
-				7FBCED161B1D8B2100AB970D /* Fl_Roller.cxx in Sources */,
-				7FBCECE41B1D8B2100AB970D /* Fl_Adjuster.cxx in Sources */,
-				7FBCED651B1D8B2100AB970D /* fl_plastic.cxx in Sources */,
-				7FBCECE91B1D8B2100AB970D /* Fl_Browser_load.cxx in Sources */,
-				7FBCED5B1B1D8B2100AB970D /* fl_file_dir.cxx in Sources */,
-				7FBCED681B1D8B2100AB970D /* fl_round_box.cxx in Sources */,
-				7FBCECF41B1D8B2100AB970D /* Fl_Dial.cxx in Sources */,
-				7FBCED571B1D8B2100AB970D /* fl_draw_pixmap.cxx in Sources */,
-				7FBCED401B1D8B2100AB970D /* Fl_own_colormap.cxx in Sources */,
-				7FBCED741B1D8B2100AB970D /* flstring.c in Sources */,
-				7FBCECEF1B1D8B2100AB970D /* Fl_Clock.cxx in Sources */,
-				7FBCED071B1D8B2100AB970D /* Fl_Menu_add.cxx in Sources */,
-				7FBCED631B1D8B2100AB970D /* fl_overlay.cxx in Sources */,
-				7FBCECF81B1D8B2100AB970D /* Fl_File_Chooser2.cxx in Sources */,
-				7FBCED0B1B1D8B2100AB970D /* Fl_Overlay_Window.cxx in Sources */,
-				7FBCED001B1D8B2100AB970D /* Fl_Input_.cxx in Sources */,
-				7FBCED901B1D8B5C00AB970D /* forms_bitmap.cxx in Sources */,
-				7FBCECEA1B1D8B2100AB970D /* Fl_Button.cxx in Sources */,
-				7FBCED6F1B1D8B2100AB970D /* fl_show_colormap.cxx in Sources */,
-				7FBCECEB1B1D8B2100AB970D /* Fl_Chart.cxx in Sources */,
-				7FBCED791B1D8B2100AB970D /* vsnprintf.c in Sources */,
-				7FBCED1F1B1D8B2100AB970D /* Fl_Tabs.cxx in Sources */,
-				7FBCED661B1D8B2100AB970D /* fl_read_image.cxx in Sources */,
-				7FBCECF31B1D8B2100AB970D /* Fl_Device.cxx in Sources */,
-				7FBCED451B1D8B2100AB970D /* filename_expand.cxx in Sources */,
-				7FBCED6A1B1D8B2100AB970D /* fl_scroll_area.cxx in Sources */,
-				7FBCED5A1B1D8B2100AB970D /* fl_engraved_label.cxx in Sources */,
-				7FBCED311B1D8B2100AB970D /* Fl_Window_hotspot.cxx in Sources */,
-				7FBCED641B1D8B2100AB970D /* fl_overlay_visual.cxx in Sources */,
-				7FBCED8B1B1D8B4E00AB970D /* Fl_Help_Dialog.cxx in Sources */,
-				7FBCED3B1B1D8B2100AB970D /* Fl_display.cxx in Sources */,
-				7FBCED7C1B1D8B2100AB970D /* is_spacing.c in Sources */,
-				7FBCECFC1B1D8B2100AB970D /* Fl_Help_View.cxx in Sources */,
-				7FBCED241B1D8B2100AB970D /* Fl_Tiled_Image.cxx in Sources */,
-				7FBCECFF1B1D8B2100AB970D /* Fl_Input.cxx in Sources */,
-				7FBCED6D1B1D8B2100AB970D /* fl_shadow_box.cxx in Sources */,
-				7FBCED181B1D8B2100AB970D /* Fl_Scroll.cxx in Sources */,
-				7FBCED5C1B1D8B2100AB970D /* fl_font.cxx in Sources */,
-				7FBCED3E1B1D8B2100AB970D /* Fl_grab.cxx in Sources */,
-				7FBCED7A1B1D8B2100AB970D /* case.c in Sources */,
-				7FBCECF11B1D8B2100AB970D /* Fl_Copy_Surface.cxx in Sources */,
-				7FBCECED1B1D8B2100AB970D /* Fl_Check_Button.cxx in Sources */,
-				7FBCED1C1B1D8B2100AB970D /* Fl_Slider.cxx in Sources */,
-				7FBCED491B1D8B2100AB970D /* filename_match.cxx in Sources */,
-				7FBCED0F1B1D8B2100AB970D /* Fl_Positioner.cxx in Sources */,
-				7FBCED521B1D8B2100AB970D /* fl_curve.cxx in Sources */,
-				7FBCED281B1D8B2100AB970D /* Fl_Tree_Item_Array.cxx in Sources */,
-				7FBCED4A1B1D8B2100AB970D /* filename_setext.cxx in Sources */,
-				7FBCED721B1D8B2100AB970D /* fl_utf8.cxx in Sources */,
-				7FBCED481B1D8B2100AB970D /* filename_list.cxx in Sources */,
-				7FBCED221B1D8B2100AB970D /* Fl_Text_Editor.cxx in Sources */,
-				7FBCED6C1B1D8B2100AB970D /* fl_set_fonts.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		83DDF1D2B6653BBC8AC8473A /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				753A6417598E2D35C308632A /* valuators.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8C060427D83A33235AB5FF84 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				D3A592F3B14EB92424D016CA /* forms.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8DF30D1FB799A4839AD06D9C /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2A2F82B3FE0E053BB79FB38E /* device.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		8E1D2CE3E0A37D2A4BE6549C /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3A12846E0559EA8896E0108E /* colbrowser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		919F4EBBA3F8CD6DCFC9F1F4 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				A27DFDC840E6272806097454 /* resize.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9500D02617365F91106C5380 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C1F612D336AA4900809E07AA /* blocks.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9858976F81CEAC1A40F1AEB2 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2C18D3602DCF12F99C2ADDEC /* arc.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9E5C43FABE8693F6ECAE1DEF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				58B9DC2FA44EF62193BCB145 /* pixmap_browser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		9FE426FAA5E5F10006D2500D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1BD5FB7C1332668EC666F663 /* preferences.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		A9F3B962D05C4127BE8E2467 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				05348A8D31686005E7ED112E /* keyboard.cxx in Sources */,
-				2832E97111DB41A4B13A4EFE /* keyboard_ui.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AB0B75A16E609B4FFAD6DD23 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				2773DE9597485DA8088C87BF /* hello.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AB7685177F94CB7B42B5CAB1 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				FC4B9EABD9209DFA30BC282E /* ask.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		ADB52A2EF9DFBB587A5B2A9B /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				38A9E11837924FB462FDAF0D /* scroll.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		AE72E157EDEC719D65C86CBA /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				578EC0C763C2179582923456 /* CubeView.cxx in Sources */,
-				550652B276CA98DED26285DE /* CubeMain.cxx in Sources */,
-				FC7AF958B1284E43B8EA419A /* CubeViewUI.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B09B7AD728A44911188459E8 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8553B0DECCDD2CEA9D1EE7EA /* adler32.c in Sources */,
-				4CA85FBAAB7E8F8801ECB742 /* compress.c in Sources */,
-				81BF2B665315DE651C49F1CF /* crc32.c in Sources */,
-				449DC0C1FDA01F16CB184F66 /* deflate.c in Sources */,
-				2642F76001144A05102CC191 /* inffast.c in Sources */,
-				AFA33B6FF7209CC7EE2B1D5D /* inflate.c in Sources */,
-				9642156FA4A17DE4872E0A6E /* inftrees.c in Sources */,
-				6D0C34F0837A30162A7B3759 /* trees.c in Sources */,
-				AF9F3D486CCB9B87E4C2736B /* uncompr.c in Sources */,
-				880B2140496D2B6744225CEF /* zutil.c in Sources */,
-				7F54C8A8130FAC4F00E736F3 /* gzclose.c in Sources */,
-				7F54C8A9130FAC4F00E736F3 /* gzlib.c in Sources */,
-				7F54C8AA130FAC4F00E736F3 /* gzread.c in Sources */,
-				7F54C8AB130FAC4F00E736F3 /* gzwrite.c in Sources */,
-				7F54C8AC130FAC4F00E736F3 /* infback.c in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B22430BBD6CF45241092FF68 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				5555352E4C682E105F2B220B /* editor.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B3C7593F2CD0B2D3A45A6B7B /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				708B512D2D2F2FE8B26D329C /* curve.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		B3EBB5C49EAE2A1EF59D75C2 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				7EA88708B9A088FCEB7CAA27 /* file_chooser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		BBCFC69D52F84735A65BCDD5 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				97372ED3025526E23473FF1B /* jcapimin.c in Sources */,
-				B8F934B039A82EE316DB3D1A /* jcapistd.c in Sources */,
-				6CEC490DCC06F6DDE8320100 /* jccoefct.c in Sources */,
-				E8208C502E55C231E1D67D9F /* jccolor.c in Sources */,
-				B6C14DE5A02509D99FFB2A91 /* jcdctmgr.c in Sources */,
-				C9C4C91FDA73557BB6B69F3D /* jchuff.c in Sources */,
-				6CAAD4E5368B815F53C63CE8 /* jcinit.c in Sources */,
-				0B9E0AD21733CBA782692B60 /* jcmainct.c in Sources */,
-				9FE3C5CF12652F6327EAAA17 /* jcmarker.c in Sources */,
-				365C8ABAB40CA4E4F4DE497B /* jcmaster.c in Sources */,
-				FB64FC6F7054A5B50F2C3344 /* jcomapi.c in Sources */,
-				6405302969D2F33411D220BA /* jcparam.c in Sources */,
-				39755B7CD55E28BE048D5743 /* jcprepct.c in Sources */,
-				7B95C9D17987D8A4E6951C8E /* jcsample.c in Sources */,
-				387225B73ACF720C07465CC1 /* jctrans.c in Sources */,
-				3B627DDF4E12177AED294C76 /* jdapimin.c in Sources */,
-				3B39A4D9B92163A3DC42B79D /* jdapistd.c in Sources */,
-				E2DBDFE780EE146951CEAC72 /* jdatadst.c in Sources */,
-				989492D3BB47A9B7EA4F56B0 /* jdatasrc.c in Sources */,
-				8CC2898FB12015F247784420 /* jdcoefct.c in Sources */,
-				E45D1979569F988094710C9C /* jdcolor.c in Sources */,
-				6E26DC5021010B8A2EB6C29E /* jddctmgr.c in Sources */,
-				BB689C447F00F62C3C54CB83 /* jdhuff.c in Sources */,
-				1886A0D16F1C4CBC01549AF6 /* jdinput.c in Sources */,
-				303B7071960E2FB0337C3250 /* jdmainct.c in Sources */,
-				BD48B8B0B3DE04E72A17F60D /* jdmarker.c in Sources */,
-				11AAF790D7EBFBC6565962F3 /* jdmaster.c in Sources */,
-				F77512958607662BAA15DA70 /* jdmerge.c in Sources */,
-				48E16D81DEAAD2BD2F01C0A2 /* jdpostct.c in Sources */,
-				5EDF60DDCDC6919CF0165574 /* jdsample.c in Sources */,
-				88C021DD6A74CF51B3C5F8D5 /* jdtrans.c in Sources */,
-				1EFE9785743470A72FDB740A /* jerror.c in Sources */,
-				F3C9D2F6806B82F1D5E7B33B /* jfdctflt.c in Sources */,
-				1BCCDEA57BF0DF6092597A65 /* jfdctfst.c in Sources */,
-				2171433E47522A24B4D70E26 /* jfdctint.c in Sources */,
-				0F15FD350AAEC543A5A9E462 /* jidctflt.c in Sources */,
-				3680B81A8A377F872BA42B8C /* jidctfst.c in Sources */,
-				8A3AEEE3EEDBB52D79AF606A /* jidctint.c in Sources */,
-				B9B2EDBADB95D97D474797A0 /* jmemmgr.c in Sources */,
-				B054ACC849A1BEDD69CB70C5 /* jmemnobs.c in Sources */,
-				6D8F8E2E6F8039FE4B127D31 /* jquant1.c in Sources */,
-				F9C96700B8B44B5E3F736E66 /* jquant2.c in Sources */,
-				4FD74129390D07ED56265A84 /* jutils.c in Sources */,
-				273EA93D130ACF91000D6870 /* jaricom.c in Sources */,
-				273EA93E130ACF91000D6870 /* jcarith.c in Sources */,
-				273EA93F130ACF91000D6870 /* jdarith.c in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C303B0FD8B83D6016B4CE2EB /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B80C160AB2349B548369580F /* symbols.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C3EDADC876662292EBA9992E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				1A4648F50FDEC75D91ADB1F8 /* boxtype.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C44E397D98E5790C6B078D92 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				CE0624CE07095E662528C2A5 /* pack.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C7CE88E302A5A06FA961EE03 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				4CFC30BF43199CEEA406E563 /* inactive.fl in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C8BA1F7B27BA10A7E54082E5 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				DCB5F32CFF3DCFF6F2DA89E2 /* CodeEditor.cxx in Sources */,
-				BB6A1C570A202678C7BCB4D5 /* Fl_Function_Type.cxx in Sources */,
-				D98529E8EBA39A388937F437 /* Fl_Group_Type.cxx in Sources */,
-				91D17317EFB32F4E9E022744 /* Fl_Menu_Type.cxx in Sources */,
-				292AEA641D3592410000763E /* ExternalCodeEditor_UNIX.cxx in Sources */,
-				8AB3C564389AED897174FFF2 /* Fl_Type.cxx in Sources */,
-				12593F9F94BE42F4E595B444 /* Fl_Widget_Type.cxx in Sources */,
-				5DE12673768A18EB41C6186E /* Fl_Window_Type.cxx in Sources */,
-				7CA436768F01BC9E36510732 /* Fluid_Image.cxx in Sources */,
-				67908E394E6408CC8AACFE92 /* about_panel.cxx in Sources */,
-				5CD956623969853397A89165 /* align_widget.cxx in Sources */,
-				1FDC97CC5C45D5861E3F43EA /* alignment_panel.cxx in Sources */,
-				1CB6D844334D5BAE34D67CFB /* code.cxx in Sources */,
-				BAC366BB428AE8165AEA1FB8 /* factory.cxx in Sources */,
-				68D18B8291BECB504DDAE1A9 /* file.cxx in Sources */,
-				E1B04810E72BD9557356CAAE /* fluid.cxx in Sources */,
-				98A96758FF9D01852DFBECFE /* function_panel.cxx in Sources */,
-				438CCCA43724B2E59680EF6B /* template_panel.cxx in Sources */,
-				27B4C89E8CBF260313ACA42E /* undo.cxx in Sources */,
-				B7D0770AC83AA04E8E12B76E /* widget_panel.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		C9165EA51291A304003FF4F0 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C9165ED41291A376003FF4F0 /* unittests.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		CA99DB1AAB6C9D1F7D21B324 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				E82CB9AEE7FDCC2533CC402B /* bitmap.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		D82DFF5A81D91805A3AF1C0B /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C635DF0A06D278F09C3A6359 /* Fl_Gl_Choice.cxx in Sources */,
-				FBAEA5F4CE75FCFCE1B7521A /* Fl_Gl_Device_Plugin.cxx in Sources */,
-				0C1C8E024CC1739ECC147412 /* Fl_Gl_Overlay.cxx in Sources */,
-				93473D40BFD87C1C855E3E2B /* Fl_Gl_Window.cxx in Sources */,
-				0E33CB7A389B20931404C97C /* freeglut_geometry.cxx in Sources */,
-				671D5E8AC4CDE34D468FDFE9 /* freeglut_stroke_mono_roman.cxx in Sources */,
-				58D9DA0C0F0A11E97EAAB61B /* freeglut_stroke_roman.cxx in Sources */,
-				00BD4FD0209BFB1A6446B9A5 /* freeglut_teapot.cxx in Sources */,
-				0EEF4C6DD5294217DB42BB88 /* gl_draw.cxx in Sources */,
-				D7C1EDE212D9E84D085257BF /* glut_compatability.cxx in Sources */,
-				F0EF820CDDEDCCBA9DF9AD84 /* glut_font.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		DE533B31CDDCD37E1CE285DF /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				B38D72ABADACBE30A32EEDE2 /* tile.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E24ECE8AB4045DE6374E0837 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				036C655FFDAEEE93046F08A6 /* checkers.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E40A8FB9D908635D6604FDE8 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				12EDA8498FE1A47E32A9428E /* png.c in Sources */,
-				6CDB4D7AC9F02809E45F15A3 /* pngerror.c in Sources */,
-				861CDD4F77287878ACB5BE7E /* pngget.c in Sources */,
-				CCB4DFE284A60FA696F7C10C /* pngmem.c in Sources */,
-				A56EAE3921EE735A8C43F68C /* pngpread.c in Sources */,
-				16CA21C97F278A00B2558C3C /* pngread.c in Sources */,
-				813BAC8244B19F51594C89C4 /* pngrio.c in Sources */,
-				B92CA63703C4EA3E6502EAF8 /* pngrtran.c in Sources */,
-				F8816EDD9D3E75B3971CC981 /* pngrutil.c in Sources */,
-				C708B82937FCB5B77AB90AAD /* pngset.c in Sources */,
-				4E06D7BE862A99B65C7E73FD /* pngtrans.c in Sources */,
-				F3D8E77F68D28955A4231077 /* pngwio.c in Sources */,
-				33175A3FB04A133479A558BA /* pngwrite.c in Sources */,
-				7E36EE20479A763B89039D88 /* pngwtran.c in Sources */,
-				5287FBDD56000190BE0850A2 /* pngwutil.c in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		EAC8B423D0029678B9FAFB6E /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3D8DD918B1AEA7E5E49C0EFE /* input.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F0FC15CF7E2C645298AA880D /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				3451831A2E9F171627CCA8C5 /* button.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F40F7367F697C58D5E721ACD /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				BF860BE265E4D9D4A6CC7B4E /* subwindow.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		F53DC38825D3EF858050B2D1 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				6CB0DF5E285910A70179BEA7 /* cursor.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FB70262A7CDDD24B3F4BED62 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				55FDB9355B4B2E99384B59F1 /* fullscreen.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FD1A7D2F7532522CCF2B0FFB /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				82B47645C04F2CC476A4D175 /* browser.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		FE06963F6457A6A7B3BB6CC3 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				17875FB347705D46D333E6EC /* fractals.cxx in Sources */,
-				72E4CB2E5E835C6DFB5C032B /* fracviewer.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
-		01609DFCC3D1B2BB31009EFB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 2F59EFF5D668BD2E6C841824 /* PBXContainerItemProxy */;
-		};
-		016B46B491638DECE2916B51 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = D1A43D1D85A87A20B2F7FB09 /* boxtype */;
-			targetProxy = 94E11178AE51F099DE2EC7C7 /* PBXContainerItemProxy */;
-		};
-		01819C5C7C8174F91321722A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A0731BABBE8E29CE96AC61A7 /* blocks */;
-			targetProxy = 755CCBACE448590226BD4036 /* PBXContainerItemProxy */;
-		};
-		032F55B6903F81C55E6FF55A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 2BFE084E4D6FAB77DCAF0A83 /* utf8 */;
-			targetProxy = 3F69AAA920A5593C256A802F /* PBXContainerItemProxy */;
-		};
-		03F0369FF852D26852CD6A07 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 3E70DE22A5023A631FA7C543 /* PBXContainerItemProxy */;
-		};
-		057D06378AFAB64C55C61976 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = D294BF3D2B6BA1434CEE7C7C /* PBXContainerItemProxy */;
-		};
-		071CA70C19A5BEA3EBDBAA98 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 44F3A61481B1F2D21D3EBF27 /* PBXContainerItemProxy */;
-		};
-		085061F94743A0467C6D8E9C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = F781BF6B6F74841F05AAA4BE /* input_choice */;
-			targetProxy = E78E17FB27E468507B90BDDE /* PBXContainerItemProxy */;
-		};
-		0B4BFCC2C839AF5621EBC3D8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 2E20E980EE192E0D98A92F67 /* PBXContainerItemProxy */;
-		};
-		0EF589FEA42F1C4A91A9D0E8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 7483E011046F1E2FC84A989B /* hello */;
-			targetProxy = 48698FC1F27A41A47DCF94DB /* PBXContainerItemProxy */;
-		};
-		0F79328CEC227618A3B3D2DF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = FD5507A4E19B2DE1022AD859 /* PBXContainerItemProxy */;
-		};
-		0FBA458582E26256916112D4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 3F7E47DDC2AAE835C9084D87 /* PBXContainerItemProxy */;
-		};
-		10141CAE15AA2FEDF30B868E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 347E2D3BD1C0A5E5C2754891 /* PBXContainerItemProxy */;
-		};
-		108DA4F7F3564841688F504F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = 9DF7F1484DB409B7020A4690 /* PBXContainerItemProxy */;
-		};
-		112378DABBDFF656B0652AD8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = 0A941DE40DF12D8F007791E1 /* PBXContainerItemProxy */;
-		};
-		14570B6D35796D92ED95C457 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C07537D6B636368E3F2A0434 /* PBXContainerItemProxy */;
-		};
-		1506813E11B9C2CC3278C062 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 10F40C4AE712B17C78435935 /* cube */;
-			targetProxy = D1111B9DA93ED13203A164EC /* PBXContainerItemProxy */;
-		};
-		17BD393152AF74CFFC598F77 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = 03EC98D08B04120E77522D44 /* PBXContainerItemProxy */;
-		};
-		18EBAE4E755ABC5749877991 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = B0C89E9C54661305D813020D /* PBXContainerItemProxy */;
-		};
-		1959744778B13AD2D41E15F0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 6D3FBA481CC2BFFE95B662E1 /* PBXContainerItemProxy */;
-		};
-		19FD6919E21417A233AA4028 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = B3C43284FE86051B4A316D02 /* PBXContainerItemProxy */;
-		};
-		1C66CFDDA0D5EAF4F5CBA2B1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = EB72EB59A1B88996A9395F09 /* PBXContainerItemProxy */;
-		};
-		1CE42CDDEC5DFBE050518BD3 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 36F787DB6844466ACF848593 /* image */;
-			targetProxy = 97A089419DEA54E60BAE37B6 /* PBXContainerItemProxy */;
-		};
-		203B4731A5BF35E250C4D234 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 43080284D40D3965685C7975 /* bitmap */;
-			targetProxy = B4CD187937DDC4944876BB8A /* PBXContainerItemProxy */;
-		};
-		21B7AD6C21467F0669BA0F66 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = 84DBD8160E76237A20056ADD /* PBXContainerItemProxy */;
-		};
-		22BC6ECC6181AE01482BCB46 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 94CF332E8528409E8F608B0A /* PBXContainerItemProxy */;
-		};
-		22F66AA06214063787F83EDD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AF9D43D9317D81CEF5290A74 /* scroll */;
-			targetProxy = E7A5FC2B97B5B1BCB94E2AE0 /* PBXContainerItemProxy */;
-		};
-		23DC21EA3C7C8E8AD302CAC2 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = 6ADFB27358931150C17B2022 /* PBXContainerItemProxy */;
-		};
-		24016FD996EF689BD7E5BF30 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 4EDD7EB7BFA5F88F6ECCA922 /* PBXContainerItemProxy */;
-		};
-		2615DA509AA27BA3E80CA8C6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0C8980D2E4E0E914FE651FDB /* shape */;
-			targetProxy = FF552B90BD433303054DF898 /* PBXContainerItemProxy */;
-		};
-		2A15651B16984E0B7289E23A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 8C4852AE7D2F60AC9A4A64D2 /* PBXContainerItemProxy */;
-		};
-		2DB3BD57B2A2CC7BB107DE20 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = C1E9FEDB2D5FF9BB9D284321 /* PBXContainerItemProxy */;
-		};
-		2E5C3887A7735AF0F079EDB6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = FE63916DB68241B7605C63B7 /* PBXContainerItemProxy */;
-		};
-		2E97F1406812F8BB5410C453 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = 478AA233260257CFF0058BDC /* PBXContainerItemProxy */;
-		};
-		32F39412979EF182CC9A2987 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 22C33DC89FCD8B22C389DF84 /* PBXContainerItemProxy */;
-		};
-		337D63E7041605E7AECE15CE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = B807BFE7F9E6FCE88C0A4E9C /* fonts */;
-			targetProxy = 65846F4FDB5D962DCC12B225 /* PBXContainerItemProxy */;
-		};
-		350F154D90E8EAECC9D1CF17 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 1C38DEF41BDA09D2C33850F3 /* PBXContainerItemProxy */;
-		};
-		39A16333C0303456D225EA97 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = DF79926C295B91D4CC0F69C2 /* PBXContainerItemProxy */;
-		};
-		3AB170D03BCA254D2CF0B45D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BEB651546D79EDC169128FD5 /* resizebox */;
-			targetProxy = 11E5A45C720AEE5E08B05915 /* PBXContainerItemProxy */;
-		};
-		3C1DA919DDED1732B8939051 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 327EFBC26B16D707A7572792 /* PBXContainerItemProxy */;
-		};
-		3E8F1C9A8FD91D1ECC32B32D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 28919176E960D4209BAB8420 /* ask */;
-			targetProxy = 8C4A9E19F6447C62178F73FE /* PBXContainerItemProxy */;
-		};
-		407AF98C503EBF9FC84FC85D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 35F2A3666BFB337E150860D9 /* pack */;
-			targetProxy = 6CBF49508DE6AA1B83637FAC /* PBXContainerItemProxy */;
-		};
-		40AA5031F1A4CB38CC442BAD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C03067C1FA131EAA8761687B /* PBXContainerItemProxy */;
-		};
-		40F85CC5FC583F5EC51A89EE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = B5801E3AE0BCEBF85AEB9B7E /* PBXContainerItemProxy */;
-		};
-		42FC7DC69971035246E3BAAA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 20A1CEF70DC260C1C2C2812E /* PBXContainerItemProxy */;
-		};
-		436A4CC79091883CE3F58547 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C8EFCE83A8BC9CA56922D024 /* rotated_text */;
-			targetProxy = E0628F2F93819F1F757D5EB2 /* PBXContainerItemProxy */;
-		};
-		441AA8B68A45804824ADC326 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 5968CFCE5A6FF4AC9E038F90 /* PBXContainerItemProxy */;
-		};
-		451B9D05BCC7D1AF1251072C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 519E40D80387DE372683F1CF /* PBXContainerItemProxy */;
-		};
-		458F29EA6AF2259C8FE26501 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 880895FBEEDBE9C299D4AD18 /* PBXContainerItemProxy */;
-		};
-		4643FC50D06D89829CC846D8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 23B0511D52EC736B3DE55E29 /* PBXContainerItemProxy */;
-		};
-		4808C21E1C68AEC753E3008D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = BF4221C0BEE1936F68CD3E0C /* PBXContainerItemProxy */;
-		};
-		49E45321CAB89C1B3C919148 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = B427FFC513902C1118B1FA0E /* PBXContainerItemProxy */;
-		};
-		4BB1210B818C536393C2DC46 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AFFC1E48270AB19243D7B668 /* fullscreen */;
-			targetProxy = 4EE36D681FE03ACBDBAFC1A3 /* PBXContainerItemProxy */;
-		};
-		4C28EFB9BB6DFB61738D7A8A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 24D00241BE8C72BD28D52715 /* PBXContainerItemProxy */;
-		};
-		4DA0C774EE4A826993923200 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = FDE67811CD6F028754008B48 /* tree */;
-			targetProxy = DB6DF7BA57A64008DF698777 /* PBXContainerItemProxy */;
-		};
-		4F13E94456DB0964E9840BF5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 1FBAA5D76F89925074C2D46A /* PBXContainerItemProxy */;
-		};
-		508B7D2FCF4F327C445AF30E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = D1A0853389EF5F6908EEBF5C /* PBXContainerItemProxy */;
-		};
-		50B361083BA2DE59262D6ECB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = 7D75A813F0391BC44322D521 /* PBXContainerItemProxy */;
-		};
-		518005569327766901CAF7F7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 683CAB7BE83F9BC1D87B1A0C /* PBXContainerItemProxy */;
-		};
-		52401805054D7AF0A5CA8307 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 1CA6B9D3845ADFB03E7D1AFC /* PBXContainerItemProxy */;
-		};
-		529A7BF7EF73DB8DA3EDFF8F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 623691BDB3A292582380383B /* clock */;
-			targetProxy = AA74A9E613C7148B206370F4 /* PBXContainerItemProxy */;
-		};
-		52F9899140C76E8484611E6C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 5E088B3BCE2A52C627EC5A53 /* menubar */;
-			targetProxy = F4B731FB1EE6D0F219971E34 /* PBXContainerItemProxy */;
-		};
-		539CE3AF58115E5FD71A38E8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C6AD358F2FC5419FDA04243 /* fractals */;
-			targetProxy = 59E6A511B58E3465A9770AD1 /* PBXContainerItemProxy */;
-		};
-		54AE518E123126A23E49FF4D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = FC814E10BB49023C0C38640B /* PBXContainerItemProxy */;
-		};
-		54C82BE82E5941634B1E012C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 343F011E70B1E352607D966B /* PBXContainerItemProxy */;
-		};
-		5564A2E200F170BF4FC022B5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = B5CF2B780F878B6D3D71F21D /* PBXContainerItemProxy */;
-		};
-		55CA95A32456C45FF091FCEC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 4D6391C0735EF1A5A8588826 /* inactive */;
-			targetProxy = 116FB5121A27CD96ABA992DF /* PBXContainerItemProxy */;
-		};
-		56D1F098C3EE3EECC13BD041 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = 039DC2875D16C52BA2F5D4F6 /* PBXContainerItemProxy */;
-		};
-		5785D96AD8898E14CCB5641F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 89DAC07651B4C516C173A1C1 /* overlay */;
-			targetProxy = CC517370521F17799ADE65E7 /* PBXContainerItemProxy */;
-		};
-		5C566828ED18CC57B65EFF0E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = D1EC8795E355C7729D36E3EC /* PBXContainerItemProxy */;
-		};
-		5C75749925DEACC35EBE75DD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 4F654080B01E856B05662A65 /* list_visuals */;
-			targetProxy = 18130D6F922D45B5F8257958 /* PBXContainerItemProxy */;
-		};
-		5E4D4B6AC7748B1319BBEC57 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 2C4299999C39C163C9B849F4 /* PBXContainerItemProxy */;
-		};
-		5FE1F1CC79D7F93FA6EB27F8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 9A8F59CD813587E2E463DF07 /* arc */;
-			targetProxy = 84F99E3365723AD5E892416E /* PBXContainerItemProxy */;
-		};
-		648522D67008E57EE761EBE6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 5FF6CC4785D964CE080FB494 /* minimum */;
-			targetProxy = 8E3960073C5E2FFF3E7BAB21 /* PBXContainerItemProxy */;
-		};
-		64CE93723117BAD714740E8E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C544C269D8399AE8A28C2A3E /* PBXContainerItemProxy */;
-		};
-		64D861FD87AD56D1E61351C8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 2A6B003A80FBAF126EC8F448 /* browser */;
-			targetProxy = 0AD450B4C0576B1878E6A0B2 /* PBXContainerItemProxy */;
-		};
-		685D9263D848132A2134EDB5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = E986529B0E7FC10BCA326407 /* PBXContainerItemProxy */;
-		};
-		68DE1373AD62783E0EFEF8C7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = E8BE99F75E5F3C8725834B33 /* adjuster */;
-			targetProxy = 5C0B6F99505A0E4260AD3C4E /* PBXContainerItemProxy */;
-		};
-		6B2136C50413BA8C19DF72D5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 78BC90B4A0CEFEDA7DA80A71 /* PBXContainerItemProxy */;
-		};
-		6BFA4628FD9A6604E6911D41 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 110D8CDB0253AC10C831D68F /* PBXContainerItemProxy */;
-		};
-		6C71F3FD9E0584E83DE581DF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = 16BBABAD50B4194D5D76302F /* PBXContainerItemProxy */;
-		};
-		6DF50B437D31EF71F78E4ED5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 0CBBCB4189E32948E7D88391 /* PBXContainerItemProxy */;
-		};
-		799ABB4ACD657F1A245FBDC7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 71C6D66833C4C5B7CA367509 /* PBXContainerItemProxy */;
-		};
-		7D774DEF2F0427B222084BA0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = E13E233F94A7AD1A2404D564 /* PBXContainerItemProxy */;
-		};
-		7DA59C2D0D537AAEEBEB1A4A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 234377F13A1D2CBBCF9E5043 /* gl_overlay */;
-			targetProxy = 00AC602308D30F648011263A /* PBXContainerItemProxy */;
-		};
-		7E7825EDB482F765FD020804 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E243DFACCE7A653F30C860F6 /* PBXContainerItemProxy */;
-		};
-		7F419DF61D92857E0098B602 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 7F419DF71D92857E0098B602 /* PBXContainerItemProxy */;
-		};
-		7F419E091D9287A50098B602 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 7F419DF51D92857E0098B602 /* offscreen */;
-			targetProxy = 7F419E081D9287A50098B602 /* PBXContainerItemProxy */;
-		};
-		7F7CF8181AB97D8F00E12B22 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 7F7CF8171AB97D8F00E12B22 /* PBXContainerItemProxy */;
-		};
-		7F7CF81B1AB97F5500E12B22 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 7F7CF7F41AB97CEF00E12B22 /* animated */;
-			targetProxy = 7F7CF81A1AB97F5500E12B22 /* PBXContainerItemProxy */;
-		};
-		7F7CF81D1AB97F5500E12B22 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C9165EA11291A304003FF4F0 /* unittests */;
-			targetProxy = 7F7CF81C1AB97F5500E12B22 /* PBXContainerItemProxy */;
-		};
-		7F9611BCAC5D5A43DF75FE3B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C312FF409911626441B9E67F /* PBXContainerItemProxy */;
-		};
-		804E85795C9EF63CC2CF6EEC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = 76C83D6B0263B7DB035ED5CC /* PBXContainerItemProxy */;
-		};
-		82E0DFF50110278E50948124 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E1415B7C253B993B4A3BBE20 /* PBXContainerItemProxy */;
-		};
-		83D37E9B1C9475533DC07B07 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = F5A28484CF63EF567E376162 /* PBXContainerItemProxy */;
-		};
-		85452340288CCA52FFEF4801 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 17B95BDCBCADC140B2AB54A7 /* curve */;
-			targetProxy = CFC2839AD6B5DEC5F9105C97 /* PBXContainerItemProxy */;
-		};
-		85A316B5408732FB9FF7AA6D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 2E539AECD909773E935C638D /* PBXContainerItemProxy */;
-		};
-		8815D8EEA8D51CDD88EAD4AA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 66F15BCC9748FF38336F668B /* PBXContainerItemProxy */;
-		};
-		88AE375448A3D75DCDE46CD5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 1EED0125985AA39E7D774A34 /* PBXContainerItemProxy */;
-		};
-		89EEA83A9CD9747F05B1E6AA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 02A677752D704FC1308C2C01 /* PBXContainerItemProxy */;
-		};
-		8DC4AA2AE4FF5D829724E1DA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 752ADA98861AB73DFEECD267 /* pixmap_browser */;
-			targetProxy = E86146406E0C24792025B71F /* PBXContainerItemProxy */;
-		};
-		8EF8C44C93BBBD0B92E8819D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C85A08BEC18D3EA25AA04261 /* PBXContainerItemProxy */;
-		};
-		8F3832C79C96E1FECB555158 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = 415076DDEE48C873B9AD0737 /* PBXContainerItemProxy */;
-		};
-		8F4FFA7EC5BF4259DE1BD0CE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 9C67D439800E92B978E9DF3F /* PBXContainerItemProxy */;
-		};
-		902D8C989F1AE5B7C56992B0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 7F019C36FA63F0A198CE0FCB /* PBXContainerItemProxy */;
-		};
-		90E6F89862669BA3F1A3C7B8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = A33050B460D93126AF6B3770 /* PBXContainerItemProxy */;
-		};
-		9228405567795798F08AA857 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 22F83D75D3AC309504978002 /* symbols */;
-			targetProxy = EAF0C33670B2F5F242AE3D87 /* PBXContainerItemProxy */;
-		};
-		9459F3D0B739C7F2E916D774 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 5C2FE9F5E71E04EA903248FA /* input */;
-			targetProxy = 3B38ABA4483E58B2891D08CB /* PBXContainerItemProxy */;
-		};
-		9519279882836E4B8EDEBE60 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = 14AFCE90907C6F3225151910 /* PBXContainerItemProxy */;
-		};
-		951CA1D37E7F30B53E37B095 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 0551F3CB7F11FE97299DB5BB /* PBXContainerItemProxy */;
-		};
-		96045D9FFE3C054C1CB49A0A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 136B84B7037F79E59B3E4AC2 /* PBXContainerItemProxy */;
-		};
-		9634FD922CB3CEC6819B2B6C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 93AABBAC7C288CC95BFC5707 /* table */;
-			targetProxy = B1D6D9884277EFCE681CAD2F /* PBXContainerItemProxy */;
-		};
-		96F8ABE7409BC5A31749E727 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = A655F2C541CCF402C73DE23C /* PBXContainerItemProxy */;
-		};
-		985D5E9B1C796A47558B65A2 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 1C175A9EB7F8B8D54DB930E3 /* PBXContainerItemProxy */;
-		};
-		98800C4F9A0CE67CC23DA137 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = DC14E2CC213CC0028EF9BD8B /* buttons */;
-			targetProxy = 84093881736DAE476B31E5AD /* PBXContainerItemProxy */;
-		};
-		989096964BDCB4782739734F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 3F6FBC42AC1063A310B6C012 /* PBXContainerItemProxy */;
-		};
-		98F18B066FBD3168F8DF8D63 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 1B8EEEC5C9C85BA44EF759EB /* preferences */;
-			targetProxy = 885D7EE500C268F0F4B00193 /* PBXContainerItemProxy */;
-		};
-		99A0D1178A498AD99872A3C5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A2AA5A5F9FF0A53A3382DD6C /* fast_slow */;
-			targetProxy = FA43DDB8855B80FFC0780619 /* PBXContainerItemProxy */;
-		};
-		9B6A01494FF12683502E9FBE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = CA05747C492074A51F2F35BC /* iconize */;
-			targetProxy = 3DF0A586BFC00F4616C64B12 /* PBXContainerItemProxy */;
-		};
-		9B9A2BB92B3E2F87BB97AFA0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 6BDF38F435EE53E46816CB92 /* PBXContainerItemProxy */;
-		};
-		9C0C1B50CA540A8E58220A96 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 287CEC5F63A8B5FCDA246BEC /* checkers */;
-			targetProxy = 4653AB89EF6857071BB45F00 /* PBXContainerItemProxy */;
-		};
-		9C29A457D0094B2934B62BAE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 658EF1017CAE2D453B68A345 /* tabs */;
-			targetProxy = A248EE9EA08566BE8A811C46 /* PBXContainerItemProxy */;
-		};
-		9C6257397491DB42B84052A8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 64AF0A3C4349A73ED2627F49 /* PBXContainerItemProxy */;
-		};
-		9FA2FD9BB48036CB2A78230E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 7C787E8918BC5CF86B17E1EB /* threads */;
-			targetProxy = D6C1AB34CA74231804BC8325 /* PBXContainerItemProxy */;
-		};
-		9FD5BEA23723890F5BF7E574 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = 2B6CFEDA4D3B1B5934FE4FAD /* PBXContainerItemProxy */;
-		};
-		A02D494049C1881F4ED5D62F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = 0F1C34BDF49FB8E0C8C76BD3 /* PBXContainerItemProxy */;
-		};
-		A0D5953930963267152D4CDB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = F4E23192BC62A2E364C6FB8E /* PBXContainerItemProxy */;
-		};
-		A38B12D81DECB90550BD8749 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 78DE657148EC00153D1103A8 /* output */;
-			targetProxy = AC5FE90BDB8A08090B143724 /* PBXContainerItemProxy */;
-		};
-		A4998C89B3F97B12351CECCD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = E2178ED0D5E6613234E5E218 /* PBXContainerItemProxy */;
-		};
-		A5C6B0BDF09C897E0F1C1354 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = 8BAF9392290E6F63F69DC376 /* PBXContainerItemProxy */;
-		};
-		A739CE0E2A5B484346922948 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = F8F61904C2B9FB800D2C87C0 /* PBXContainerItemProxy */;
-		};
-		A837FE62FDBE075199EC03EB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 51EB382683C25DBDD02CBF33 /* navigation */;
-			targetProxy = FFC25EB3CA943F2CB2194FEF /* PBXContainerItemProxy */;
-		};
-		A8AB7DEC3970D5A693D2BC84 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 3A22385FF3A24E18BF14BA45 /* PBXContainerItemProxy */;
-		};
-		A930588839D7D95C5A94D166 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = A8E3162AB1E86C87AB21A822 /* PBXContainerItemProxy */;
-		};
-		AB079DD83076897253B672E1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AE6BC0AEB24EBBBDBA4071E0 /* Fluid */;
-			targetProxy = C6D3D802B9F25B1204E80358 /* PBXContainerItemProxy */;
-		};
-		AB9734930DE57334B332ADF8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 57D7735B02F5215416BA2856 /* button */;
-			targetProxy = C1164EA82991B1FC42DBEB70 /* PBXContainerItemProxy */;
-		};
-		AC5D3D581EBB10175A439164 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = B957B60CB058E32777E89339 /* PBXContainerItemProxy */;
-		};
-		ACB61E677D40B60BC431709E /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = FB18B0028E0D8319045D638E /* PBXContainerItemProxy */;
-		};
-		AFD748766ACD657B1DB73EBE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 1C2F0ED10414A1F708C1773C /* PBXContainerItemProxy */;
-		};
-		B2295006135485171CE465A0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E9BE9B4F1B6C7F791F629546 /* PBXContainerItemProxy */;
-		};
-		B27AA1A3887B738C0B96DAD9 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 06789A4B035DCDC7C02257D7 /* PBXContainerItemProxy */;
-		};
-		B33485D7E60A40F772A693BD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 6AF2057413B17C0A888CC376 /* PBXContainerItemProxy */;
-		};
-		B35300B9C1C6D46249784CF4 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 32FF2A1069F117986FB927DD /* CubeView */;
-			targetProxy = D42996B1BAC83937A70CB0E3 /* PBXContainerItemProxy */;
-		};
-		B372B1092C9CCAE863720078 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = E8F9797C2E3809923BC2B247 /* PBXContainerItemProxy */;
-		};
-		B6889203ECA066BD86020D66 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = EEE1D93B274E8722C7BE72EB /* PBXContainerItemProxy */;
-		};
-		BBA5BFA4C8A09C8BA8D75F41 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = E167C0E81B125EBADAC8ED73 /* valuators */;
-			targetProxy = CC09C8B81BC66FFD59FDCD5E /* PBXContainerItemProxy */;
-		};
-		BCB93D264244A97C51567AAC /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 68590AB4E7667EB94AC7533D /* file_chooser */;
-			targetProxy = 0AD2D2DA750332DEFCEB0FC7 /* PBXContainerItemProxy */;
-		};
-		BCE99B468058A739E9B61BA6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = AA950AE416C83B076438137C /* PBXContainerItemProxy */;
-		};
-		BF6A28D5E05EDF453C41524B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 86BF0C207C6D13ED2B83B63A /* doublebuffer */;
-			targetProxy = B9C46EEF5D1BAB30033BFE9B /* PBXContainerItemProxy */;
-		};
-		BF7DB6F287E1A675F33E0C0F /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = CA3CA540809B8723BA17A4D4 /* PBXContainerItemProxy */;
-		};
-		BF9303986B2A6CE21BF6D58A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = BDBF4D071649C5E4BBDE6937 /* PBXContainerItemProxy */;
-		};
-		C042E3E422CFBE9C779D254D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 9C26E733452A0A92BB2E9FD4 /* PBXContainerItemProxy */;
-		};
-		C500558605B2403584788BEF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 59EEF874518591864372841D /* PBXContainerItemProxy */;
-		};
-		C5469720CBB9D2B88D10BD2D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = D7B4F91AAB70071DE48B2435 /* PBXContainerItemProxy */;
-		};
-		C572155363F901FA707B6AB5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = F39A907E68C3C55EACDF4D3C /* mandelbrot */;
-			targetProxy = B3742E2B1ECA6522FB9B56F8 /* PBXContainerItemProxy */;
-		};
-		C596A1799C8F84A7C492BA53 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 6C72ECB2743615E24D873456 /* forms */;
-			targetProxy = A7785E9FB1F42E9637DE20A9 /* PBXContainerItemProxy */;
-		};
-		C65D41CD33252E71A18F9E40 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = B73978AED6EF847530CC1AF2 /* PBXContainerItemProxy */;
-		};
-		C73649FBE328BCD2A77AA213 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C4B346660A74B9FCF04EFB2C /* cursor */;
-			targetProxy = 4C039FDB0CF72042F116ECD1 /* PBXContainerItemProxy */;
-		};
-		C84EB5797741DD14E7DB1149 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = C13484C4A9262C58D8FA7242 /* fltk_gl */;
-			targetProxy = E815B04FEBE5E16EBC1829AC /* PBXContainerItemProxy */;
-		};
-		C9165EA21291A304003FF4F0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C9165EA31291A304003FF4F0 /* PBXContainerItemProxy */;
-		};
-		C9194CA7B68C9A7ADE662A15 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 748488216C249915C5812F7F /* PBXContainerItemProxy */;
-		};
-		C97AC7320761F9B9C60C0B57 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = B54D9F1191F36B8EE72F3369 /* PBXContainerItemProxy */;
-		};
-		CB5F037BD3DC9B4748DF5E51 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 91FC3B67E5E2C9CDF2AD93FE /* PBXContainerItemProxy */;
-		};
-		CCA3ACABF38B2112B510DAFD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = BB76D328D5B89A1273946784 /* fltk_images */;
-			targetProxy = AFBCF1FDAB64A04896DF3BD1 /* PBXContainerItemProxy */;
-		};
-		CD79361F0DFBF22FA651B064 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E127CA138134477DA4C12088 /* PBXContainerItemProxy */;
-		};
-		D18305E56863CB5DFEB97963 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A58BB416AAFDCFF08D7C7E41 /* fltk_png */;
-			targetProxy = 4AEE7CE5279CFAC5B81F12CE /* PBXContainerItemProxy */;
-		};
-		D2F0364CF3AEA88A0D2C44A3 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = D14DC4F3D302856B84343ED5 /* resize */;
-			targetProxy = 0A58D2D8A0B0CE0E2149A3AF /* PBXContainerItemProxy */;
-		};
-		D301A70CC4ED653ECB516688 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 98B39383C1F47726C5C0793B /* color_chooser */;
-			targetProxy = 2206E5C4EFD1650EB0437A0F /* PBXContainerItemProxy */;
-		};
-		D3330A4EAF513581AF51C0AD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = A7727AF927F7416C62B4FE4A /* PBXContainerItemProxy */;
-		};
-		D3670191A18D37C113A0FC04 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 7A0C7B7A7F2AA45B7E076378 /* PBXContainerItemProxy */;
-		};
-		D389E092A5D4D964D0BB3838 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E0EF3100EF52408FCD9703F6 /* PBXContainerItemProxy */;
-		};
-		D58A0AFC4CD07FCAE4A0C15C /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = B4A214CBEE4FE0EB1FEF8982 /* subwindow */;
-			targetProxy = E8B9B687280EF6DFB63D12B8 /* PBXContainerItemProxy */;
-		};
-		D712961222F7CBC57F8D3D73 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 134239549D6BFAC3F8EFC363 /* colbrowser */;
-			targetProxy = 464DCC729B9EFE5E37A3D088 /* PBXContainerItemProxy */;
-		};
-		D935E83C336302B382D9C5E7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = D217C1AD7BE42CB2138F2993 /* radio */;
-			targetProxy = 7E8CCAEB3141BF8E536FDBAC /* PBXContainerItemProxy */;
-		};
-		DABEEED764EBB1285F3DB913 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = AA5932F4EEB6D1D7E5D1A314 /* fltk_zlib */;
-			targetProxy = 5DB7048A0261F00775C5C4F5 /* PBXContainerItemProxy */;
-		};
-		DD91E257DD15E61435BF24EF /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 26B873E37B315C0F7BABC202 /* message */;
-			targetProxy = 6C94988A522A2E1BA58629C8 /* PBXContainerItemProxy */;
-		};
-		DDF39F6D68263831F09456F6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = D7D4B168DE66A92F9F8747C0 /* glpuzzle */;
-			targetProxy = 5DB5CA4C1AE9D60DC2D66B52 /* PBXContainerItemProxy */;
-		};
-		DEB97684C5BB8ADF31FAF9E1 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = 71A21778FAE433CF3DFC6296 /* PBXContainerItemProxy */;
-		};
-		DEE249A5C3995E37C311ACC5 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 3C29CBA11EC9AA530B70295E /* PBXContainerItemProxy */;
-		};
-		DF26DB6DB935FA651FC11D5A /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 9AAE76B605C89463D532A923 /* PBXContainerItemProxy */;
-		};
-		E1CB23265EB62E17BC08AD26 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = A4F9501EBE8FA6D9850595E1 /* PBXContainerItemProxy */;
-		};
-		E34E2CE87D94E142AF4792B8 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = F3400834292723A0AFBE4978 /* PBXContainerItemProxy */;
-		};
-		E43675452A3E2DDB5F3F8ECE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = FA19DC0D800A66EC69E9560E /* label */;
-			targetProxy = A8BA119501338968096D978B /* PBXContainerItemProxy */;
-		};
-		E6DC2B9D7282D7184A543B86 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = AA75ABA62A67772EE87E0672 /* PBXContainerItemProxy */;
-		};
-		E71AE4375EB0E17F432F876D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 24BCC68A33AFDB9630857992 /* PBXContainerItemProxy */;
-		};
-		E8273A5F7251A0F065F18FF9 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = B37F5F8EB169ABA76EA02FB9 /* help */;
-			targetProxy = 9AC87DA5ABF368BDF02D6FB2 /* PBXContainerItemProxy */;
-		};
-		E863B14C78B1BDC25D84F0CE /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 9472188EEB541EF3EA60AB03 /* sudoku */;
-			targetProxy = 8E7D8233AF79A6DB5CE68674 /* PBXContainerItemProxy */;
-		};
-		E88689D66B4DD81CCB47FEBD /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = EE40189E3B7BB6337ABA74C7 /* native-filechooser */;
-			targetProxy = 6F1DF68D2214A64F85843187 /* PBXContainerItemProxy */;
-		};
-		E99D1402227FFD90FC8A2C1D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E90E8DFEC523B3E2914EB5C6 /* PBXContainerItemProxy */;
-		};
-		EB032B08EC7A81AFD876B0CB /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0F789352A34B2A230259EEC7 /* keyboard */;
-			targetProxy = 51A9974246953F700DE291F3 /* PBXContainerItemProxy */;
-		};
-		EC5F74DECF6370DDEBEED562 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = B5DAF3DCC189A02ADD9DF320 /* tiled_image */;
-			targetProxy = 78C58883AC75F5B5F54770B9 /* PBXContainerItemProxy */;
-		};
-		ECA8A9C06A7AF6A44702AF89 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = F0647F049CED2B54A017A6A0 /* editor */;
-			targetProxy = B66EFA8EE3567F241D81B0D7 /* PBXContainerItemProxy */;
-		};
-		ECB22B820DE64A50DC95950B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = E08E0967CAEDEF5772583418 /* PBXContainerItemProxy */;
-		};
-		EE07C78293DC38C5356D12D7 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = 2BFE804C6C014B2CADBE63A0 /* PBXContainerItemProxy */;
-		};
-		EE231CD6E42A09773814DD09 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 82C0BD76C77A518B0A1499B5 /* line_style */;
-			targetProxy = 6869CF29ABB4AFF63AFDD028 /* PBXContainerItemProxy */;
-		};
-		EF14CCCD0DC10EFE3FE33343 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 8CE9C1520C41EC2819C53DCF /* PBXContainerItemProxy */;
-		};
-		F2F53F78D25C64C4C4371E5D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 3C13C653905795060D6D4F0A /* fltk_forms */;
-			targetProxy = 4667258284C31599AAB8D07C /* PBXContainerItemProxy */;
-		};
-		F3CCF87201B614B0B3F39D9B /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = 1F497907D19732E39645C0CD /* PBXContainerItemProxy */;
-		};
-		F682FD9A6733681D1E227CF0 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = DE2D07DA5BA651DDC4411901 /* PBXContainerItemProxy */;
-		};
-		F72D26AAD8ADA8A4F60167BA /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 9EA6FF727BC736133B0B85A1 /* pixmap */;
-			targetProxy = C8D8B50C6525C19E90662B05 /* PBXContainerItemProxy */;
-		};
-		F7AD43D0104E6799F6F2D5C6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 0392A304CDC05B94337B7C04 /* fltk_jpeg */;
-			targetProxy = 52C8401CBF8DD951A9F0B369 /* PBXContainerItemProxy */;
-		};
-		F89D09FA9B104B390A19EB4D /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 82436F720F585ECD3B0A56CE /* tile */;
-			targetProxy = EC7CB0494F74A79084C861FA /* PBXContainerItemProxy */;
-		};
-		FB240A00E8243538E32995F6 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = A57FDE871C99A52BEEDEE68C /* fltk */;
-			targetProxy = C1A6391CFDC19DEA50CD2FA0 /* PBXContainerItemProxy */;
-		};
-		FC0F9585C6E2F79188BCFD72 /* PBXTargetDependency */ = {
-			isa = PBXTargetDependency;
-			target = 2D69D33A1EBE0D85982EDCC1 /* device */;
-			targetProxy = 7AE3C5BE09990E2E88E4EA52 /* PBXContainerItemProxy */;
-		};
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
-		7F92031916B1A909000FC50F /* Localizable.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				7F92031A16B1A909000FC50F /* English */,
-			);
-			name = Localizable.strings;
-			sourceTree = "<group>";
-		};
-		7F92031C16B1A909000FC50F /* Localizable.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				7F92031D16B1A909000FC50F /* French */,
-			);
-			name = Localizable.strings;
-			sourceTree = "<group>";
-		};
-		7F92031F16B1A909000FC50F /* Localizable.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				7F92032016B1A909000FC50F /* German */,
-			);
-			name = Localizable.strings;
-			sourceTree = "<group>";
-		};
-		7F92032216B1A909000FC50F /* Localizable.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				7F92032316B1A90A000FC50F /* Italian */,
-			);
-			name = Localizable.strings;
-			sourceTree = "<group>";
-		};
-		7F92032516B1A90A000FC50F /* Localizable.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				7F92032616B1A90A000FC50F /* Spanish */,
-			);
-			name = Localizable.strings;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		019F39A6C006F4478D926097 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/line_style-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = line_style;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		02F9B07CD19BBECE29EDFBF9 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_images-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_images;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		04DBFC7AFD61BE53EFC0E154 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/ask-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = ask;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		05075D43C4BEEEB1580AFEE4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tile-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tile;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		0701C86702DDACB01EFF0AC8 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/mandelbrot-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = mandelbrot;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		0713E70C0BEEE3754404600D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/hello-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = hello;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		0D252BB362636566C82BF1DA /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/list_visuals-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = list_visuals;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		11AABF721060F218C0B69DFE /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/image-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = image;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		1373D54F13CA9B830F63E0A6 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/keyboard-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = keyboard;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		1464B1F0838A6DA3EC798EA7 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tiled_image-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tiled_image;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		15D5821FBE681CD2A89E7A38 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/utf8-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = utf8;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		1AD7AEBCAC0442BEE5CB5FA0 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/checkers-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = checkers;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		1BEB504FB0DB591E82D2FA14 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/doublebuffer-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = doublebuffer;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		1CF52BBB9479F206668BB8E0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/overlay-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = overlay;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		1F4F972288CCA64A4555E63E /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/checkers-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = checkers;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		243920BD550FCEDE5BA5A779 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/radio-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = radio;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		247B992EAF5A731F8C3B58BB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/navigation-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = navigation;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		24E5F1439BA757E8FC7E1147 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tile-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tile;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		24FD1462C4538C60D268A0DC /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/utf8-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = utf8;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		26FBF07F4121C4EFBE179A87 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/output-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = output;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		27F88492D562DE3C8E970E96 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/CubeView-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = CubeView;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		2B5D11814BD06DEEA705390B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/editor-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = editor;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		2E334FB7E0D1351E49C0C77A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tree-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tree;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		30C13099F4A9C7466143EFD8 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tabs-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tabs;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		32B9D66D13C49BBD4D77AA66 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/image-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = image;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		334982C6B350959CD6E594CA /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/help-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = help;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		3370D6DB5D90BD4B2455415F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/bitmap-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = bitmap;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		34BB463ADD6E4D874DE30D30 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/list_visuals-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = list_visuals;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		3528975A423C5111E606E2C5 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/arc-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = arc;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		36B297FD2A929E30630C1F9E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/resizebox-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = resizebox;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		375370C0D20D6A6F82EEB9C2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/sudoku-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = sudoku;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		3BA23B245C0BD5E9DCB1E1D0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/boxtype-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = boxtype;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		3C879E1AD7613144F77605F2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/label-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = label;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		3D1BD96635942AE61D48D0EF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/gl_overlay-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = gl_overlay;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		3D4E2019302AF9F74C19A741 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/adjuster-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = adjuster;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		3D653831AD56241252F41B20 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/browser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = browser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		40FE9E3652D2B37E78C26A11 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/cursor-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = cursor;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		4188D6D3666A0E73F8D02D42 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/blocks-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = blocks;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		41B2F8F4A24318120192B5B7 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/colbrowser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = colbrowser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		42211DE36671515EAAA821D4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/glpuzzle-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = glpuzzle;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		433E80E7413C7582E4C85EAD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/clock-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = clock;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		44EEE45C194680BAEFF596A4 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/inactive-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = inactive;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		45EE227981CA4C9B1BEEDABE /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/help-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = help;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		479BA07865F0CD028604BEBF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/valuators-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = valuators;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		4CD1DDFD052E7F1721E4C0F7 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fast_slow-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fast_slow;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		5016891F4DB5E69839EFEACE /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/navigation-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = navigation;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		51B8A6D3ED49EF00BEEBA164 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/resize-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = resize;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		5B037436C6B2A895E8F937CE /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pack-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pack;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		5B75ECDCBCD3C1B67719E2CA /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/symbols-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = symbols;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		5C8C2B9456B305820A634B29 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_png-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_png;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		5DF7AE6113030149FA6BB334 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_gl-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_gl;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		5FE189BC2AA33929DFFC88B2 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/message-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = message;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		612CBEE5FE9DFAA54DAB938C /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_jpeg-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_jpeg;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		62B4B984526D11422999BC21 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/cube-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = cube;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		63C70B5F5BF35EE7981A297A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fonts-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fonts;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		648E01F6745F683B2166FD72 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/CubeView-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = CubeView;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		64FCBC2974753656640066A4 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/shape-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = shape;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		67984B4FBCB8B1420997F31D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/iconize-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = iconize;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		6875D5538BF77563116928EF /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/native-filechooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = "native-filechooser";
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		69B354FE242F9D24EBAC591B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/menubar-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = menubar;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		6E21DBE1B9B0E3252071E875 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fractals-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fractals;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		72F0D03FFDCE01580CF97987 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/valuators-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = valuators;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		77BCED964F2A5AC467068EF2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/arc-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = arc;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		7806B37FE6D8BF01BDE0EB8E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/device-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = device;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		78446623B2E9921ED6B05986 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DEPLOYMENT_LOCATION = NO;
-				DEPLOYMENT_POSTPROCESSING = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		7852BC9638DB86312B634FCC /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/minimum-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = minimum;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		78928FFF42FF78C4C53CB507 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_png-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_png;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		793DEFB743639835433A664B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				SDKROOT = "";
-			};
-			name = Release;
-		};
-		79DA5405BA200E3E9833CBB1 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/rotated_text-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = rotated_text;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		7E70FC5ECEC9431A496BA352 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/iconize-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = iconize;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		7ED9CEAE4AD09B69AE943F9E /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/sudoku-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = sudoku;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		7F419E011D92857E0098B602 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/offscreen-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = org.fltk.offscreen;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		7F419E021D92857E0098B602 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/offscreen-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_BUNDLE_IDENTIFIER = org.fltk.offscreen;
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		7F7CF80F1AB97CF000E12B22 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				HEADER_SEARCH_PATHS = (
-					.,
-					../../,
-				);
-				INFOPLIST_FILE = "plists/animated-Info.plist";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SDKROOT = macosx;
-			};
-			name = Debug;
-		};
-		7F7CF8101AB97CF000E12B22 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COMBINE_HIDPI_IMAGES = YES;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				HEADER_SEARCH_PATHS = (
-					.,
-					../../,
-				);
-				INFOPLIST_FILE = "plists/animated-Info.plist";
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				SDKROOT = macosx;
-			};
-			name = Release;
-		};
-		7FBCECD91B1D8AA500AB970D /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				HEADER_SEARCH_PATHS = (
-					.,
-					../..,
-					../../jpeg,
-					../../png,
-				);
-				PRODUCT_NAME = fltk;
-				SDKROOT = macosx;
-			};
-			name = Debug;
-		};
-		7FBCECDA1B1D8AA500AB970D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				ENABLE_NS_ASSERTIONS = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 3;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				HEADER_SEARCH_PATHS = (
-					.,
-					../..,
-					../../jpeg,
-					../../png,
-				);
-				PRODUCT_NAME = fltk;
-				SDKROOT = macosx;
-			};
-			name = Release;
-		};
-		7FD9FF3CBC717FD201EA3584 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pixmap_browser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pixmap_browser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		7FEBA7A2E6CBD42A2CB9EC6E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/preferences-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = preferences;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		80001F31B6D368C36B63C3E9 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/forms-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = forms;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		8251F5D32F144C4A3B38611A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/preferences-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = preferences;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		825F18B17AC33F1155A2B608 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/label-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = label;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		82D905CBB4FCCAE6C582738A /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/buttons-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = buttons;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		83E98D44904C6A42D21874F0 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_jpeg-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_jpeg;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		8451FD2CBEABDCA9AC6F59A2 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/Demo-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = Demo;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		8668DECCE9A9E818F356FBE1 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/glpuzzle-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = glpuzzle;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		87B1FB9E67505B0B75D62FA1 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/button-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = button;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		87CAE5100B359D3C3832F33C /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fast_slow-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fast_slow;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		88E5A0B2B6C2407D340F0C7F /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/message-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = message;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		898FFBE5373C2D3547374CDD /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/editor-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = editor;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		89BE64C430BB503298C2500B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/bitmap-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = bitmap;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		8BBCC6BD08C0E96BE2B1A684 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/inactive-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = inactive;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		8BC488AC673C13D7E89DFA34 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/clock-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = clock;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		8D55560F097DFD9641DF7E01 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/file_chooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = file_chooser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		8FEBC021F75D81924EB1CDB1 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/Fluid-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = Fluid;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		91132B0785B8CC9E390E61CB /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/curve-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = curve;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		926766958563E7D8423EB15E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fullscreen-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fullscreen;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		9A9B15912014E2ABD942B645 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/colbrowser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = colbrowser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		9B494A6EFDE88E0D058D2D21 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/Fluid-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = Fluid;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		9CF48826C810B70600513B2E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/browser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = browser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		9E23AA974E99E89DC5E46D9F /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tree-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tree;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		9EFAAA661CFB857E6CAF5E32 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/scroll-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = scroll;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		9F60F9D62CC019C87D22E8FA /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/hello-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = hello;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		A0013AAFB7BC8A0C615E59F0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_images-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_images;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		A1494A1B6ECC80B739BE2980 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pack-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pack;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		A2A63369CE0AC1B0E8FA6A8F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/device-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = device;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		A66E0927C815BB672926790F /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/subwindow-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = subwindow;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		A87E1C840E7981349B9CA3FF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/doublebuffer-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = doublebuffer;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		A91AFC712A102E043246207E /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/mandelbrot-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = mandelbrot;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		ABAC7E7BFD2873E04874BCD7 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/resizebox-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = resizebox;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		AC3226B9FE17327A0476ACA0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(NATIVE_ARCH_ACTUAL)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = "";
-			};
-			name = Debug;
-		};
-		ADE4C4ABB8D7F6FD30F85AFE /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pixmap_browser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pixmap_browser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		AE2897230D7DA81EB38040EC /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/color_chooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = color_chooser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		AEABCDA62910BE3E87453B58 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_forms-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_forms;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		B036252403AE29059A0E5704 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/buttons-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = buttons;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		B1311537D63E2CCB0E68816C /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/minimum-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = minimum;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		B21202B891284E7AC4A2E603 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/input-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = input;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		B2AFEAFCA244E8CD41A50430 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/file_chooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = file_chooser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		B4B2BB7A9CB513501897280E /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fonts-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fonts;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		B71F26D6471573CD392AC07C /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tabs-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tabs;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		BB009929CDEA32006D6977CA /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_forms-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_forms;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		BC51E88C8D0EA3224DAFFC12 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/input_choice-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = input_choice;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		BC600252A4D09B60D0F85504 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/keyboard-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = keyboard;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		BD5914FD7FF6B4FF8BA80F80 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/scroll-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = scroll;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		BFE97E7F9156385044A3D359 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/curve-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = curve;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		BFEB622BA8B40E851AF0E91F /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DEPLOYMENT_LOCATION = NO;
-				DEPLOYMENT_POSTPROCESSING = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		BFF26783A7FAE12B0EA16C83 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = YES;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_MODEL_TUNING = G5;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_zlib-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_zlib;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-				ZERO_LINK = NO;
-			};
-			name = Release;
-		};
-		BFFF0C392B0239E7A4F10B2D /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/menubar-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = menubar;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		C584A993534E8BE70EAF6421 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/table-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = table;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		C6A43B2C6592F62C23C4DEF8 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/rotated_text-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = rotated_text;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C76328465C8E0EC80A457DA1 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/input_choice-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = input_choice;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C831B12400EF7E395D1EA3B9 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/output-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = output;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C85AC56F7A41F08368B36A33 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/boxtype-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = boxtype;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		C8715DCA8FD17E7BEC74B0FD /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/table-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = table;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C8A96B43051D9CBFDB7E1796 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/threads-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = threads;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C9165EAD1291A304003FF4F0 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/utf8-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = unittests;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		C9165EAE1291A304003FF4F0 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/utf8-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = unittests;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		CB5DC25E5DACEFD0C087A26C /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/button-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = button;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		CF7C08AD3F30B87B6E633987 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/gl_overlay-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = gl_overlay;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		D039F107824EF6C74CE6245A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/tiled_image-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = tiled_image;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		D12B67A14081276A1AE89AF5 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pixmap-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pixmap;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		D98863F5356D8F73933FDB57 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/radio-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = radio;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		DA3A5101259E26473D400E74 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/pixmap-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = pixmap;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E07D1932EBAEB9D52ED93659 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/line_style-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = line_style;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E0D0D34EEA780294D6BC88F4 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/shape-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = shape;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E1C66D432335A60103867873 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/subwindow-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = subwindow;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E1DDC3E738A3C26785B7B581 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/overlay-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = overlay;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E200A34731B04C0376625655 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/ask-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = ask;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		E2BC045A39DF81586C658ECC /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/input-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = input;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E48ACA9D2C04C7C00FBF1734 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/forms-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = forms;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		E518F634D98AF2BFAC99AE04 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/cube-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = cube;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E535E9981FCBD9470662A4D9 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/blocks-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = blocks;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E69554187F683E8C2B3B1629 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/adjuster-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = adjuster;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E7FA682BA3BA96316C1FB8BF /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/cursor-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = cursor;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		E98EE3C047C30FD322050A54 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/native-filechooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = "native-filechooser";
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		EB412CB0B524D911880D8B93 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/color_chooser-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = color_chooser;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		EB743535DBDA6DB81FD6A985 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = FL_LIBRARY;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_gl-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_gl;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		F0C24E12D241BA7F488439AA /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/symbols-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = symbols;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		F7B36FA91703B69D1D6F39FA /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/resize-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = resize;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-		FBE26A2299D609C6DF2A6C3A /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/Demo-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = Demo;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		FBF5AE5EAC993367D605BB84 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fractals-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fractals;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		FCA03F7ECFA64A392FF5897B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				DYLIB_COMPATIBILITY_VERSION = 1;
-				DYLIB_CURRENT_VERSION = 1;
-				FRAMEWORK_VERSION = A;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fltk_zlib-Info.plist";
-				INSTALL_PATH = "@executable_path/../Frameworks";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = fltk_zlib;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		FF3DD4A93C9E5DD651E000B8 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/fullscreen-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = fullscreen;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Debug;
-		};
-		FFAC306F2AAD6A1D91A9991F /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = fltk.pch;
-				GCC_PREPROCESSOR_DEFINITIONS = "USING_XCODE=1";
-				HEADER_SEARCH_PATHS = (
-					../../ide/Xcode4/,
-					../../,
-					../../png,
-					../../jpeg,
-				);
-				INFOPLIST_FILE = "plists/threads-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				OTHER_LDFLAGS = (
-					"-framework",
-					Cocoa,
-				);
-				PRODUCT_NAME = threads;
-				SDKROOT = "";
-				WARNING_CFLAGS = (
-					"-Wno-format-security",
-					"-Wall",
-				);
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		09DE2CF8947C6D4CA4D879E4 /* Build configuration list for PBXNativeTarget "browser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3D653831AD56241252F41B20 /* Debug */,
-				9CF48826C810B70600513B2E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		0AB8F12E20FB744E948579D8 /* Build configuration list for PBXNativeTarget "curve" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				BFE97E7F9156385044A3D359 /* Debug */,
-				91132B0785B8CC9E390E61CB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		0C94DB7B62523827F6CA3991 /* Build configuration list for PBXNativeTarget "sudoku" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7ED9CEAE4AD09B69AE943F9E /* Debug */,
-				375370C0D20D6A6F82EEB9C2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		10E8C646A26F3D15F7CE2445 /* Build configuration list for PBXNativeTarget "CubeView" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				27F88492D562DE3C8E970E96 /* Debug */,
-				648E01F6745F683B2166FD72 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		133DA311246EB8116364C59E /* Build configuration list for PBXNativeTarget "cursor" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				40FE9E3652D2B37E78C26A11 /* Debug */,
-				E7FA682BA3BA96316C1FB8BF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		13825A9A9EAAB8D06916F544 /* Build configuration list for PBXNativeTarget "minimum" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B1311537D63E2CCB0E68816C /* Debug */,
-				7852BC9638DB86312B634FCC /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		16B97D750AE49403BB5039C0 /* Build configuration list for PBXNativeTarget "resize" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				51B8A6D3ED49EF00BEEBA164 /* Debug */,
-				F7B36FA91703B69D1D6F39FA /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		1C89D53894EEE27329B1F4CC /* Build configuration list for PBXNativeTarget "radio" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				D98863F5356D8F73933FDB57 /* Debug */,
-				243920BD550FCEDE5BA5A779 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		248D7BEB615672F552710642 /* Build configuration list for PBXNativeTarget "pixmap_browser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7FD9FF3CBC717FD201EA3584 /* Debug */,
-				ADE4C4ABB8D7F6FD30F85AFE /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		30AD0627958F0B172EBFD4E0 /* Build configuration list for PBXNativeTarget "checkers" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1F4F972288CCA64A4555E63E /* Debug */,
-				1AD7AEBCAC0442BEE5CB5FA0 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		35EF0E558BEAB37B9A39BD63 /* Build configuration list for PBXNativeTarget "adjuster" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3D4E2019302AF9F74C19A741 /* Debug */,
-				E69554187F683E8C2B3B1629 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		38FE9CCE8C2F3F75B314E1B7 /* Build configuration list for PBXNativeTarget "native-filechooser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				6875D5538BF77563116928EF /* Debug */,
-				E98EE3C047C30FD322050A54 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		3B099D694EBD3EACA6FCDA94 /* Build configuration list for PBXNativeTarget "fltk_images" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A0013AAFB7BC8A0C615E59F0 /* Debug */,
-				02F9B07CD19BBECE29EDFBF9 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		3BD5FFB6FCC8F21A23C23DF4 /* Build configuration list for PBXNativeTarget "fltk" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				78446623B2E9921ED6B05986 /* Debug */,
-				BFEB622BA8B40E851AF0E91F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		3D5D2D23D2C59411880AB2D2 /* Build configuration list for PBXNativeTarget "arc" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3528975A423C5111E606E2C5 /* Debug */,
-				77BCED964F2A5AC467068EF2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		3EEAE9A300430106FF4AFF4A /* Build configuration list for PBXNativeTarget "fltk_zlib" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FCA03F7ECFA64A392FF5897B /* Debug */,
-				BFF26783A7FAE12B0EA16C83 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		40ABC9F9C1893101D51EC8A9 /* Build configuration list for PBXNativeTarget "list_visuals" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				34BB463ADD6E4D874DE30D30 /* Debug */,
-				0D252BB362636566C82BF1DA /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		433709CE97606F96249EBAB9 /* Build configuration list for PBXNativeTarget "subwindow" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A66E0927C815BB672926790F /* Debug */,
-				E1C66D432335A60103867873 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		45BDA5E071E42FD9FFB3C6E0 /* Build configuration list for PBXNativeTarget "image" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				32B9D66D13C49BBD4D77AA66 /* Debug */,
-				11AABF721060F218C0B69DFE /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		470FAB5A41BA8BE365964DCF /* Build configuration list for PBXNativeTarget "buttons" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B036252403AE29059A0E5704 /* Debug */,
-				82D905CBB4FCCAE6C582738A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		48418DF5C775AB3E6F6FB7E8 /* Build configuration list for PBXNativeTarget "tabs" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				30C13099F4A9C7466143EFD8 /* Debug */,
-				B71F26D6471573CD392AC07C /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		4B3D493FF7A60ED3D1FDDCE5 /* Build configuration list for PBXNativeTarget "clock" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				8BC488AC673C13D7E89DFA34 /* Debug */,
-				433E80E7413C7582E4C85EAD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		4DF452C4C84D66DAE967E8D8 /* Build configuration list for PBXNativeTarget "inactive" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				8BBCC6BD08C0E96BE2B1A684 /* Debug */,
-				44EEE45C194680BAEFF596A4 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		4DFF17B1DEEAE7769BD9DB6E /* Build configuration list for PBXNativeTarget "fltk_jpeg" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				612CBEE5FE9DFAA54DAB938C /* Debug */,
-				83E98D44904C6A42D21874F0 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		51AC54C46D650C2D3F325093 /* Build configuration list for PBXNativeTarget "doublebuffer" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1BEB504FB0DB591E82D2FA14 /* Debug */,
-				A87E1C840E7981349B9CA3FF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		56664D0C77E70269E747DE00 /* Build configuration list for PBXNativeTarget "tiled_image" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				D039F107824EF6C74CE6245A /* Debug */,
-				1464B1F0838A6DA3EC798EA7 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		578FD06BD28D0AAEDD28C122 /* Build configuration list for PBXNativeTarget "ask" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				E200A34731B04C0376625655 /* Debug */,
-				04DBFC7AFD61BE53EFC0E154 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		5F820F5FBA3ED8ABDE57AAE1 /* Build configuration list for PBXNativeTarget "cube" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				62B4B984526D11422999BC21 /* Debug */,
-				E518F634D98AF2BFAC99AE04 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		60536F86E7CBDCD693F71324 /* Build configuration list for PBXNativeTarget "gl_overlay" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				CF7C08AD3F30B87B6E633987 /* Debug */,
-				3D1BD96635942AE61D48D0EF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		615453DB5B8EBEE070930DA7 /* Build configuration list for PBXProject "FLTK" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AC3226B9FE17327A0476ACA0 /* Debug */,
-				793DEFB743639835433A664B /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		63C3E22864C6E764E4AA33F4 /* Build configuration list for PBXNativeTarget "colbrowser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				41B2F8F4A24318120192B5B7 /* Debug */,
-				9A9B15912014E2ABD942B645 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		69F44FF2FE83F31DE5D9E594 /* Build configuration list for PBXNativeTarget "color_chooser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EB412CB0B524D911880D8B93 /* Debug */,
-				AE2897230D7DA81EB38040EC /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		756F44E55A1F0C76932E6238 /* Build configuration list for PBXNativeTarget "blocks" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				4188D6D3666A0E73F8D02D42 /* Debug */,
-				E535E9981FCBD9470662A4D9 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		7902C3FA238DC834D728294F /* Build configuration list for PBXNativeTarget "tile" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				05075D43C4BEEEB1580AFEE4 /* Debug */,
-				24E5F1439BA757E8FC7E1147 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		7EB07B3968A20B4E608A072F /* Build configuration list for PBXNativeTarget "preferences" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				8251F5D32F144C4A3B38611A /* Debug */,
-				7FEBA7A2E6CBD42A2CB9EC6E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		7F419E001D92857E0098B602 /* Build configuration list for PBXNativeTarget "offscreen" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7F419E011D92857E0098B602 /* Debug */,
-				7F419E021D92857E0098B602 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		7F7CF8131AB97CF000E12B22 /* Build configuration list for PBXNativeTarget "animated" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7F7CF80F1AB97CF000E12B22 /* Debug */,
-				7F7CF8101AB97CF000E12B22 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		7FBCECDD1B1D8AA600AB970D /* Build configuration list for PBXNativeTarget "libfltk" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7FBCECD91B1D8AA500AB970D /* Debug */,
-				7FBCECDA1B1D8AA500AB970D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		840081F8C4055EEEDA44ED91 /* Build configuration list for PBXNativeTarget "fltk_png" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5C8C2B9456B305820A634B29 /* Debug */,
-				78928FFF42FF78C4C53CB507 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		8464D21CD1F613E38BAE5897 /* Build configuration list for PBXNativeTarget "hello" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				0713E70C0BEEE3754404600D /* Debug */,
-				9F60F9D62CC019C87D22E8FA /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		849D88C39AA4E730673CA22B /* Build configuration list for PBXNativeTarget "message" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5FE189BC2AA33929DFFC88B2 /* Debug */,
-				88E5A0B2B6C2407D340F0C7F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		86C4D9AB7C491973FBD6A7C7 /* Build configuration list for PBXNativeTarget "navigation" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5016891F4DB5E69839EFEACE /* Debug */,
-				247B992EAF5A731F8C3B58BB /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		8AD66A1FFD97F7DE6754A1F7 /* Build configuration list for PBXNativeTarget "Fluid" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				9B494A6EFDE88E0D058D2D21 /* Debug */,
-				8FEBC021F75D81924EB1CDB1 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		8FE512A926E636412F9718E9 /* Build configuration list for PBXNativeTarget "device" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				A2A63369CE0AC1B0E8FA6A8F /* Debug */,
-				7806B37FE6D8BF01BDE0EB8E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		91566347F4A36AB6DC73AFDB /* Build configuration list for PBXNativeTarget "rotated_text" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C6A43B2C6592F62C23C4DEF8 /* Debug */,
-				79DA5405BA200E3E9833CBB1 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		9239785CB2AB452B31DBD695 /* Build configuration list for PBXNativeTarget "pixmap" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				D12B67A14081276A1AE89AF5 /* Debug */,
-				DA3A5101259E26473D400E74 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		931B6696041FE07BC4118715 /* Build configuration list for PBXNativeTarget "fonts" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B4B2BB7A9CB513501897280E /* Debug */,
-				63C70B5F5BF35EE7981A297A /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		95C5DCEFD644E8878B36D9BD /* Build configuration list for PBXNativeTarget "forms" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				E48ACA9D2C04C7C00FBF1734 /* Debug */,
-				80001F31B6D368C36B63C3E9 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		9D10213E04D086E3DAA257DF /* Build configuration list for PBXNativeTarget "threads" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C8A96B43051D9CBFDB7E1796 /* Debug */,
-				FFAC306F2AAD6A1D91A9991F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		A28344FBEB8BBC1EB0B0B397 /* Build configuration list for PBXNativeTarget "iconize" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				7E70FC5ECEC9431A496BA352 /* Debug */,
-				67984B4FBCB8B1420997F31D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		A4652FECF78110792F659563 /* Build configuration list for PBXNativeTarget "utf8" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				15D5821FBE681CD2A89E7A38 /* Debug */,
-				24FD1462C4538C60D268A0DC /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		A66331810196CE80746EC56A /* Build configuration list for PBXNativeTarget "tree" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				2E334FB7E0D1351E49C0C77A /* Debug */,
-				9E23AA974E99E89DC5E46D9F /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		A6CD6AC5589128B81F5465CA /* Build configuration list for PBXNativeTarget "scroll" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				9EFAAA661CFB857E6CAF5E32 /* Debug */,
-				BD5914FD7FF6B4FF8BA80F80 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		A886EF55A1943DA05FFEB475 /* Build configuration list for PBXNativeTarget "fractals" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FBF5AE5EAC993367D605BB84 /* Debug */,
-				6E21DBE1B9B0E3252071E875 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		AF326B98BA09AF38683E526F /* Build configuration list for PBXNativeTarget "resizebox" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				ABAC7E7BFD2873E04874BCD7 /* Debug */,
-				36B297FD2A929E30630C1F9E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		AF7E2D84EC2DCAF6153B9261 /* Build configuration list for PBXNativeTarget "valuators" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				72F0D03FFDCE01580CF97987 /* Debug */,
-				479BA07865F0CD028604BEBF /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		B053007E32B2368F6ED7E3A6 /* Build configuration list for PBXNativeTarget "label" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				825F18B17AC33F1155A2B608 /* Debug */,
-				3C879E1AD7613144F77605F2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		B50177A3B96B7A5E7E829C83 /* Build configuration list for PBXNativeTarget "output" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C831B12400EF7E395D1EA3B9 /* Debug */,
-				26FBF07F4121C4EFBE179A87 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		B64F4D8E43BE2B695A6AA440 /* Build configuration list for PBXNativeTarget "shape" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				64FCBC2974753656640066A4 /* Debug */,
-				E0D0D34EEA780294D6BC88F4 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		B83DB33D147DB23CC7FEB7A3 /* Build configuration list for PBXNativeTarget "fltk_gl" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				EB743535DBDA6DB81FD6A985 /* Debug */,
-				5DF7AE6113030149FA6BB334 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		C1069764F482EBCBD6C96F49 /* Build configuration list for PBXNativeTarget "editor" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				2B5D11814BD06DEEA705390B /* Debug */,
-				898FFBE5373C2D3547374CDD /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		C479D6EC433F3C0BD5B15D0E /* Build configuration list for PBXNativeTarget "fast_slow" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				87CAE5100B359D3C3832F33C /* Debug */,
-				4CD1DDFD052E7F1721E4C0F7 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		C49C9AEC4E153FF1F438EEC9 /* Build configuration list for PBXNativeTarget "keyboard" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1373D54F13CA9B830F63E0A6 /* Debug */,
-				BC600252A4D09B60D0F85504 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		C9165EAC1291A304003FF4F0 /* Build configuration list for PBXNativeTarget "unittests" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C9165EAD1291A304003FF4F0 /* Debug */,
-				C9165EAE1291A304003FF4F0 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		CC535F451DEEEC6CB8B8BE9D /* Build configuration list for PBXNativeTarget "fullscreen" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FF3DD4A93C9E5DD651E000B8 /* Debug */,
-				926766958563E7D8423EB15E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		CE4B70CFB915731934579321 /* Build configuration list for PBXNativeTarget "line_style" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				019F39A6C006F4478D926097 /* Debug */,
-				E07D1932EBAEB9D52ED93659 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		D02EA04AB53B945F92F3079D /* Build configuration list for PBXNativeTarget "input_choice" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C76328465C8E0EC80A457DA1 /* Debug */,
-				BC51E88C8D0EA3224DAFFC12 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		D9330C3D2D7044DC219B4892 /* Build configuration list for PBXNativeTarget "input" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B21202B891284E7AC4A2E603 /* Debug */,
-				E2BC045A39DF81586C658ECC /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		DBAAAE4D6C15723505E03480 /* Build configuration list for PBXNativeTarget "Demo" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				FBE26A2299D609C6DF2A6C3A /* Debug */,
-				8451FD2CBEABDCA9AC6F59A2 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		DC2647DB205921C128D59F3E /* Build configuration list for PBXNativeTarget "file_chooser" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				B2AFEAFCA244E8CD41A50430 /* Debug */,
-				8D55560F097DFD9641DF7E01 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		DD0953717B88186226B18281 /* Build configuration list for PBXNativeTarget "help" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				45EE227981CA4C9B1BEEDABE /* Debug */,
-				334982C6B350959CD6E594CA /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		E1CADB24DFF6C42C5ED02370 /* Build configuration list for PBXNativeTarget "pack" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5B037436C6B2A895E8F937CE /* Debug */,
-				A1494A1B6ECC80B739BE2980 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		E47C3205187D57A0AC715323 /* Build configuration list for PBXNativeTarget "overlay" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				1CF52BBB9479F206668BB8E0 /* Debug */,
-				E1DDC3E738A3C26785B7B581 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		EC317A6F79ABF37DA0CB2C7D /* Build configuration list for PBXNativeTarget "fltk_forms" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				BB009929CDEA32006D6977CA /* Debug */,
-				AEABCDA62910BE3E87453B58 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		EF70972986AA16D10B93D7F9 /* Build configuration list for PBXNativeTarget "menubar" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				69B354FE242F9D24EBAC591B /* Debug */,
-				BFFF0C392B0239E7A4F10B2D /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		F022E6E1DAF3F5F7A72D8FA1 /* Build configuration list for PBXNativeTarget "table" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C8715DCA8FD17E7BEC74B0FD /* Debug */,
-				C584A993534E8BE70EAF6421 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		F026FBF218BBE6275FABB07D /* Build configuration list for PBXNativeTarget "bitmap" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3370D6DB5D90BD4B2455415F /* Debug */,
-				89BE64C430BB503298C2500B /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		F05438F9279AF36D8FC3C207 /* Build configuration list for PBXNativeTarget "boxtype" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				3BA23B245C0BD5E9DCB1E1D0 /* Debug */,
-				C85AC56F7A41F08368B36A33 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		F418709849B5B9E10E73DC7B /* Build configuration list for PBXNativeTarget "symbols" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				5B75ECDCBCD3C1B67719E2CA /* Debug */,
-				F0C24E12D241BA7F488439AA /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		FA507A3C0FD8498C57328CB7 /* Build configuration list for PBXNativeTarget "button" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				87B1FB9E67505B0B75D62FA1 /* Debug */,
-				CB5DC25E5DACEFD0C087A26C /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		FB36B488F1B5DB9880F04A14 /* Build configuration list for PBXNativeTarget "mandelbrot" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				0701C86702DDACB01EFF0AC8 /* Debug */,
-				A91AFC712A102E043246207E /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-		FE5CC6B6FA8DA453D5611961 /* Build configuration list for PBXNativeTarget "glpuzzle" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				42211DE36671515EAAA821D4 /* Debug */,
-				8668DECCE9A9E818F356FBE1 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Debug;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 4BF1A7FFEACF5F31B4127482 /* Project object */;
-}
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +1,0 @@
-/* Localized versions of Info.plist keys */
-
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/___PROJECTNAMEASIDENTIFIER___-Info.plist
+++ /dev/null
@@ -1,30 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/___PROJECTNAME___.xcodeproj/TemplateInfo.plist
+++ /dev/null
@@ -1,4 +1,0 @@
-{
-        Description = "This project builds an FLTK based Cocoa application written in C++ with support for the Fluid UI designer, image reading, and OpenGL.";
-}
-
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/___PROJECTNAME___.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,355 +1,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 45;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
-		C95960BE1274CD8A009C0594 /* fltk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C95960BD1274CD8A009C0594 /* fltk.framework */; };
-		C9601E9910B1FAED0018BADE /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9601E9810B1FAED0018BADE /* main.cpp */; };
-		C9601EE410B2020B0018BADE /* ui.fl in Resources */ = {isa = PBXBuildFile; fileRef = C9601EE310B2020B0018BADE /* ui.fl */; };
-		C9601EEC10B202440018BADE /* ui.cxx in Sources */ = {isa = PBXBuildFile; fileRef = C9601EEA10B202440018BADE /* ui.cxx */; };
-		C96291231274D238007D3CFE /* fltk_forms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C96291221274D238007D3CFE /* fltk_forms.framework */; };
-		C96291251274D238007D3CFE /* fltk_gl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C96291241274D238007D3CFE /* fltk_gl.framework */; };
-		C96291271274D238007D3CFE /* fltk_images.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C96291261274D238007D3CFE /* fltk_images.framework */; };
-		C96291291274D238007D3CFE /* fltk_jpeg.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C96291281274D238007D3CFE /* fltk_jpeg.framework */; };
-		C962912B1274D238007D3CFE /* fltk_png.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C962912A1274D238007D3CFE /* fltk_png.framework */; };
-		C962912D1274D238007D3CFE /* fltk_zlib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C962912C1274D238007D3CFE /* fltk_zlib.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXBuildRule section */
-		C9601C4B10B1F9B60018BADE /* PBXBuildRule */ = {
-			isa = PBXBuildRule;
-			compilerSpec = com.apple.compilers.proxy.script;
-			filePatterns = "*.fl";
-			fileType = pattern.proxy;
-			isEditable = 1;
-			outputFiles = (
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.cxx",
-				"${INPUT_FILE_DIR}/${INPUT_FILE_BASE}.h",
-			);
-			script = "/Developer/Applications/Utilities/FLTK/Fluid.app/Contents/MacOS/Fluid -c ${INPUT_FILE_NAME}";
-		};
-/* End PBXBuildRule section */
-
-/* Begin PBXFileReference section */
-		089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
-		8D1107310486CEB800E47090 /* ___PROJECTNAMEASIDENTIFIER___-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "___PROJECTNAMEASIDENTIFIER___-Info.plist"; sourceTree = "<group>"; };
-		8D1107320486CEB800E47090 /* ___PROJECTNAME___.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ___PROJECTNAME___.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		C95960BD1274CD8A009C0594 /* fltk.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk.framework; path = /Library/Frameworks/fltk.framework; sourceTree = "<absolute>"; };
-		C9601DCB10B1FA890018BADE /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
-		C9601E9710B1FAED0018BADE /* main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = "<group>"; };
-		C9601E9810B1FAED0018BADE /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
-		C9601EE310B2020B0018BADE /* ui.fl */ = {isa = PBXFileReference; explicitFileType = sourcecode.fluid; fileEncoding = 4; path = ui.fl; sourceTree = "<group>"; };
-		C9601EEA10B202440018BADE /* ui.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui.cxx; sourceTree = "<group>"; };
-		C9601EEB10B202440018BADE /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = "<group>"; };
-		C96291221274D238007D3CFE /* fltk_forms.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_forms.framework; path = /Library/Frameworks/fltk_forms.framework; sourceTree = "<absolute>"; };
-		C96291241274D238007D3CFE /* fltk_gl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_gl.framework; path = /Library/Frameworks/fltk_gl.framework; sourceTree = "<absolute>"; };
-		C96291261274D238007D3CFE /* fltk_images.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_images.framework; path = /Library/Frameworks/fltk_images.framework; sourceTree = "<absolute>"; };
-		C96291281274D238007D3CFE /* fltk_jpeg.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_jpeg.framework; path = /Library/Frameworks/fltk_jpeg.framework; sourceTree = "<absolute>"; };
-		C962912A1274D238007D3CFE /* fltk_png.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_png.framework; path = /Library/Frameworks/fltk_png.framework; sourceTree = "<absolute>"; };
-		C962912C1274D238007D3CFE /* fltk_zlib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = fltk_zlib.framework; path = /Library/Frameworks/fltk_zlib.framework; sourceTree = "<absolute>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		8D11072E0486CEB800E47090 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C95960BE1274CD8A009C0594 /* fltk.framework in Frameworks */,
-				C96291231274D238007D3CFE /* fltk_forms.framework in Frameworks */,
-				C96291251274D238007D3CFE /* fltk_gl.framework in Frameworks */,
-				C96291271274D238007D3CFE /* fltk_images.framework in Frameworks */,
-				C96291291274D238007D3CFE /* fltk_jpeg.framework in Frameworks */,
-				C962912B1274D238007D3CFE /* fltk_png.framework in Frameworks */,
-				C962912D1274D238007D3CFE /* fltk_zlib.framework in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		1058C7A0FEA54F0111CA2CBB /* OS X Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				C9601DCB10B1FA890018BADE /* OpenGL.framework */,
-			);
-			name = "OS X Frameworks";
-			sourceTree = "<group>";
-		};
-		19C28FACFE9D520D11CA2CBB /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				8D1107320486CEB800E47090 /* ___PROJECTNAME___.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		29B97314FDCFA39411CA2CEA /* ___PROJECTNAMEASXML___ */ = {
-			isa = PBXGroup;
-			children = (
-				C9601E9410B1FADC0018BADE /* Sources */,
-				C9601EED10B2024C0018BADE /* FLUID Sources */,
-				C9601EE910B2022E0018BADE /* Generated Sources */,
-				29B97317FDCFA39411CA2CEA /* Resources */,
-				29B97323FDCFA39411CA2CEA /* Frameworks */,
-				19C28FACFE9D520D11CA2CBB /* Products */,
-			);
-			name = ___PROJECTNAMEASXML___;
-			sourceTree = "<group>";
-		};
-		29B97317FDCFA39411CA2CEA /* Resources */ = {
-			isa = PBXGroup;
-			children = (
-				8D1107310486CEB800E47090 /* ___PROJECTNAMEASIDENTIFIER___-Info.plist */,
-				089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
-			);
-			name = Resources;
-			sourceTree = "<group>";
-		};
-		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				C9EDD6C71274CC1D00ADB21C /* FLTK Frameworks */,
-				1058C7A0FEA54F0111CA2CBB /* OS X Frameworks */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		C9601E9410B1FADC0018BADE /* Sources */ = {
-			isa = PBXGroup;
-			children = (
-				C9601E9710B1FAED0018BADE /* main.h */,
-				C9601E9810B1FAED0018BADE /* main.cpp */,
-			);
-			name = Sources;
-			sourceTree = "<group>";
-		};
-		C9601EE910B2022E0018BADE /* Generated Sources */ = {
-			isa = PBXGroup;
-			children = (
-				C9601EEA10B202440018BADE /* ui.cxx */,
-				C9601EEB10B202440018BADE /* ui.h */,
-			);
-			name = "Generated Sources";
-			sourceTree = "<group>";
-		};
-		C9601EED10B2024C0018BADE /* FLUID Sources */ = {
-			isa = PBXGroup;
-			children = (
-				C9601EE310B2020B0018BADE /* ui.fl */,
-			);
-			name = "FLUID Sources";
-			sourceTree = "<group>";
-		};
-		C9EDD6C71274CC1D00ADB21C /* FLTK Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				C95960BD1274CD8A009C0594 /* fltk.framework */,
-				C96291221274D238007D3CFE /* fltk_forms.framework */,
-				C96291241274D238007D3CFE /* fltk_gl.framework */,
-				C96291261274D238007D3CFE /* fltk_images.framework */,
-				C96291281274D238007D3CFE /* fltk_jpeg.framework */,
-				C962912A1274D238007D3CFE /* fltk_png.framework */,
-				C962912C1274D238007D3CFE /* fltk_zlib.framework */,
-			);
-			name = "FLTK Frameworks";
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		8D1107260486CEB800E47090 /* ___PROJECTNAME___ */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "___PROJECTNAME___" */;
-			buildPhases = (
-				8D1107290486CEB800E47090 /* Resources */,
-				8D11072C0486CEB800E47090 /* Sources */,
-				8D11072E0486CEB800E47090 /* Frameworks */,
-			);
-			buildRules = (
-				C9601C4B10B1F9B60018BADE /* PBXBuildRule */,
-			);
-			dependencies = (
-			);
-			name = "___PROJECTNAME___";
-			productInstallPath = "$(HOME)/Applications";
-			productName = "___PROJECTNAME___";
-			productReference = 8D1107320486CEB800E47090 /* ___PROJECTNAME___.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		29B97313FDCFA39411CA2CEA /* Project object */ = {
-			isa = PBXProject;
-			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "___PROJECTNAME___" */;
-			compatibilityVersion = "Xcode 3.1";
-			developmentRegion = English;
-			hasScannedForEncodings = 1;
-			knownRegions = (
-				English,
-				Japanese,
-				French,
-				German,
-			);
-			mainGroup = 29B97314FDCFA39411CA2CEA /* ___PROJECTNAMEASXML___ */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				8D1107260486CEB800E47090 /* ___PROJECTNAME___ */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		8D1107290486CEB800E47090 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
-				C9601EE410B2020B0018BADE /* ui.fl in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		8D11072C0486CEB800E47090 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				C9601E9910B1FAED0018BADE /* main.cpp in Sources */,
-				C9601EEC10B202440018BADE /* ui.cxx in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXVariantGroup section */
-		089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
-			isa = PBXVariantGroup;
-			children = (
-				089C165DFE840E0CC02AAC07 /* English */,
-			);
-			name = InfoPlist.strings;
-			sourceTree = "<group>";
-		};
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
-		C01FCF4B08A954540054247B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				COPY_PHASE_STRIP = NO;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_ENABLE_FIX_AND_CONTINUE = YES;
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = (
-					/Library/Frameworks/fltk.framework/Headers/,
-					/Library/Framework/fltk.frameworks/Headers/FL/images,
-				);
-				INFOPLIST_FILE = "___PROJECTNAMEASIDENTIFIER___-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				ONLY_ACTIVE_ARCH = YES;
-				OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = "___PROJECTNAME___";
-				SDKROOT = macosx10.5;
-				STRINGS_FILE_OUTPUT_ENCODING = "UTF-8";
-				VALID_ARCHS = "i386 ppc ppc64 ppc7400 ppc970 x86_64";
-			};
-			name = Debug;
-		};
-		C01FCF4C08A954540054247B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = YES;
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
-				GCC_MODEL_TUNING = G5;
-				GCC_PRECOMPILE_PREFIX_HEADER = YES;
-				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h";
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
-				GCC_WARN_UNUSED_VARIABLE = NO;
-				HEADER_SEARCH_PATHS = (
-					/Library/Frameworks/fltk.framework/Headers/,
-					/Library/Framework/fltk.frameworks/Headers/FL/images,
-				);
-				INFOPLIST_FILE = "___PROJECTNAMEASIDENTIFIER___-Info.plist";
-				INSTALL_PATH = "$(HOME)/Applications";
-				ONLY_ACTIVE_ARCH = NO;
-				OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)";
-				OTHER_LDFLAGS = "";
-				PRODUCT_NAME = "___PROJECTNAME___";
-				SDKROOT = macosx10.5;
-				STRINGS_FILE_OUTPUT_ENCODING = "UTF-8";
-				VALID_ARCHS = "i386 ppc ppc64 ppc7400 ppc970 x86_64";
-			};
-			name = Release;
-		};
-		C01FCF4F08A954540054247B /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				PREBINDING = NO;
-				SDKROOT = macosx10.6;
-			};
-			name = Debug;
-		};
-		C01FCF5008A954540054247B /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				PREBINDING = NO;
-				SDKROOT = macosx10.6;
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "___PROJECTNAME___" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C01FCF4B08A954540054247B /* Debug */,
-				C01FCF4C08A954540054247B /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "___PROJECTNAME___" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				C01FCF4F08A954540054247B /* Debug */,
-				C01FCF5008A954540054247B /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
-}
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/main.cpp
+++ /dev/null
@@ -1,12 +1,0 @@
-
-#include "main.h"
-#include "ui.h"
-
-#include <FL/FL.h>
-
-int main(int argc, char **argv)
-{
-  Fl_Window *win = make_window();
-  win->show(argc, argv);
-  return Fl::run();
-}
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/main.h
+++ /dev/null
@@ -1,6 +1,0 @@
-
-#ifndef MAIN_H
-#define MAIN_H
-
-#endif
-
--- a/DoConfig/fltk/ide/Xcode4/Project Templates/FLTK Application/FLTK 1.3/ui.fl
+++ /dev/null
@@ -1,15 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {make_window()} {open
-} {
-  Fl_Window {} {open selected
-    xywh {550 77 300 160} type Double hide
-  } {
-    Fl_Box {} {
-      label {Welcome to FLTK!}
-      xywh {50 25 200 100} box GTK_ROUND_UP_BOX color 50 labelsize 20
-    }
-  }
-}
--- a/DoConfig/fltk/ide/Xcode4/Resources/English.lproj/Localizable.strings
+++ /dev/null
@@ -1,9 +1,0 @@
-"About %@" = "About %@";
-"Print Front Window"="Print Front Window";
-"Services" = "Services";
-"Hide %@"="Hide %@";
-"Hide Others"="Hide Others";
-"Show All"="Show All";
-"Quit %@"="Quit %@";
-"Preferences…" = "Preferences…";
-"File" = "File";
--- a/DoConfig/fltk/ide/Xcode4/Resources/French.lproj/Localizable.strings
+++ /dev/null
@@ -1,9 +1,0 @@
-"About %@" = "A propos de %@";
-"Print Front Window"="Imprimer la fenêtre";
-"Services" = "Services";
-"Hide %@"="Masquer %@";
-"Hide Others"="Masquer les autres";
-"Show All"="Tout afficher";
-"Quit %@"="Quitter %@";
-"Preferences…" = "Préférences…";
-"File" = "Fichier";
--- a/DoConfig/fltk/ide/Xcode4/Resources/German.lproj/Localizable.strings
+++ /dev/null
@@ -1,9 +1,0 @@
-"About %@" = "Über %@";
-"Print Front Window"="Vordergrundfenster drucken";
-"Services" = "Dienste";
-"Hide %@"="%@ ausblenden";
-"Hide Others"="Andere ausblenden";
-"Show All"="Alle einblenden";
-"Quit %@"="%@ beenden";
-"Preferences…" = "Einstellungen…";
-"File" = "Ablage";
--- a/DoConfig/fltk/ide/Xcode4/Resources/Italian.lproj/Localizable.strings
+++ /dev/null
@@ -1,9 +1,0 @@
-"About %@" = "Informazioni su %@";
-"Print Front Window"="Stampa la finestra";
-"Services" = "Servizi";
-"Hide %@"="Nascondi %@";
-"Hide Others"="Nascondi altre";
-"Show All"="Mostra tutte";
-"Quit %@"="Esci da %@";
-"Preferences…" = "Preferenze…";
-"File" = "File";
--- a/DoConfig/fltk/ide/Xcode4/Resources/Spanish.lproj/Localizable.strings
+++ /dev/null
@@ -1,9 +1,0 @@
-"About %@" = "Acerca de %@";
-"Print Front Window"="Imprimir la ventana";
-"Services" = "Servicios";
-"Hide %@"="Ocultar %@";
-"Hide Others"="Ocultar otros";
-"Show All"="Mostrar todo";
-"Quit %@"="Salir de %@";
-"Preferences…" = "Preferencias…";
-"File" = "Archivo";
--- a/DoConfig/fltk/ide/Xcode4/config.h
+++ /dev/null
@@ -1,58 +1,0 @@
-/*
- * "$Id$"
- *
- * Configuration file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2011 by Bill Spitzak and others.
- */
-
-#define FLTK_DATADIR "/usr/local/share/fltk"
-#define FLTK_DOCDIR "/usr/local/share/doc/fltk"
-#define BORDER_WIDTH 2
-#define HAVE_GL 1
-#define HAVE_GL_GLU_H 1
-#define USE_COLORMAP 1
-#define HAVE_XINERAMA 0
-#define USE_XFT 0
-#define HAVE_XDBE 0
-#define USE_XDBE HAVE_XDBE
-#define __APPLE_QUARTZ__ 1
-#define HAVE_OVERLAY 0
-#define HAVE_GL_OVERLAY HAVE_OVERLAY
-#if defined(__BIG_ENDIAN__)
-#define WORDS_BIGENDIAN 1
-#else
-#define WORDS_BIGENDIAN 0
-#endif
-#define U16 unsigned short
-#define U32 unsigned
-#define HAVE_DIRENT_H 1
-#define HAVE_SCANDIR 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_SNPRINTF 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRLCAT 1
-#define HAVE_STRLCPY 1
-#define HAVE_LOCALE_H 1
-#define HAVE_LOCALECONV 1
-#define HAVE_SYS_SELECT_H 1
-#define USE_POLL 0
-#define HAVE_LIBPNG 1
-#define HAVE_LIBZ 1
-#define HAVE_LIBJPEG 1
-#define HAVE_PNG_H 1
-#define HAVE_PNG_GET_VALID 1
-#define HAVE_PNG_SET_TRNS_TO_ALPHA 1
-#define HAVE_PTHREAD 1
-#define HAVE_PTHREAD_H 1
-#define HAVE_LONG_LONG 1
-#define FLTK_LLFMT "%lld"
-#define FLTK_LLCAST (long long)
-#define HAVE_STRTOLL 1
-#define HAVE_DLFCN_H 1
-#define HAVE_DLSYM 1
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/ide/Xcode4/fltk.pch
+++ /dev/null
@@ -1,11 +1,0 @@
-//
-// Prefix header for all source files
-//
-
-#ifdef __OBJC__
-#import <Cocoa/Cocoa.h>
-#endif
-
-#ifdef FL_LIBRARY
-#include <ApplicationServices/ApplicationServices.h>
-#endif
--- a/DoConfig/fltk/ide/Xcode4/fluid.pbfilespec
+++ /dev/null
@@ -1,8 +1,0 @@
-{
-	Identifier = sourcecode.fluid;
-	BasedOn = sourcecode;
-	Name = "FLTK Fluid GUI description";
-	Extensions = (fl);
-	AppliesToBuildRules = yes;
-	CanSetIncludeInIndex = YES;
-}
binary files a/DoConfig/fltk/ide/Xcode4/icons/fluid.icns /dev/null differ
--- a/DoConfig/fltk/ide/Xcode4/plists/CubeView-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.CubeView</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/Demo-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.Demo</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/Fluid-Info.plist
+++ /dev/null
@@ -1,51 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDocumentTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleTypeExtensions</key>
-			<array>
-				<string>fl</string>
-			</array>
-			<key>CFBundleTypeIconFile</key>
-			<string>fluid_doc</string>
-			<key>CFBundleTypeName</key>
-			<string>Fluid Documents</string>
-			<key>CFBundleTypeOSTypes</key>
-			<array>
-				<string>flid</string>
-			</array>
-			<key>CFBundleTypeRole</key>
-			<string>Editor</string>
-			<key>LSTypeIsPackage</key>
-			<false/>
-			<key>NSPersistentStoreTypeKey</key>
-			<string>Binary</string>
-		</dict>
-	</array>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string>fluid</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.Fluid</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.3.5</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2017 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/adjuster-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.adjuster</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/animated-Info.plist
+++ /dev/null
@@ -1,34 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.$(PRODUCT_NAME)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2015 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/arc-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.arc</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/ask-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.ask</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/bitmap-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.bitmap</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/blocks-Info.plist
+++ /dev/null
@@ -1,28 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIconFile</key>
-	<string>blocks.icns</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.blocks</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/boxtype-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.boxtype</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/browser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.browser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/button-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.button</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/buttons-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.buttons</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/checkers-Info.plist
+++ /dev/null
@@ -1,28 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIconFile</key>
-	<string>checkers.icns</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.checkers</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/clock-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.clock</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/colbrowser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.colbrowser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/color_chooser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.color-chooser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/cube-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.cube</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/cursor-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.cursor</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/curve-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.curve</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/device-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.device</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/doublebuffer-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.doublebuffer</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/editor-Info.plist
+++ /dev/null
@@ -1,43 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDocumentTypes</key>
-	<array>
-		<dict>
-			<key>CFBundleTypeExtensions</key>
-			<array>
-				<string>*</string>
-			</array>
-			<key>CFBundleTypeName</key>
-			<string>AllFiles</string>
-			<key>CFBundleTypeRole</key>
-			<string>Editor</string>
-			<key>LSTypeIsPackage</key>
-			<false/>
-			<key>NSPersistentStoreTypeKey</key>
-			<string>XML</string>
-		</dict>
-	</array>
-	<key>CFBundleExecutable</key>
-	<string>editor</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.editor</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fast_slow-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fast-slow</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/file_chooser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.file-chooser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_forms-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-forms</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_gl-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-gl</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_images-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-images</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_jpeg-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-jpeg</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_png-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-png</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fltk_zlib-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fltk-zlib</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fonts-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fonts</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/forms-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.forms</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fractals-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fractals</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/fullscreen-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.fullscreen</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/gl_overlay-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.gl-overlay</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/glpuzzle-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.glpuzzle</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/hello-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.hello</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/help-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.help</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/iconize-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.iconize</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/image-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.image</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/inactive-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.inactive</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/input-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.input</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/input_choice-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.input-choice</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/keyboard-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.keyboard</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/label-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.label</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/line_style-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.line-style</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/list_visuals-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.list-visuals</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/mandelbrot-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.mandelbrot</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/menubar-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.menubar</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/message-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.message</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/minimum-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.minimum</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/native-filechooser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.native-filechooser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/navigation-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.navigation</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/offscreen-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIdentifier</key>
-	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2016 by Bill Spitzak and others.</string>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/output-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.output</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/overlay-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.overlay</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/pack-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.pack</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/pixmap-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.pixmap</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/pixmap_browser-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.pixmap-browser</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/preferences-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.preferences</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/radio-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.radio</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/resize-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.resize</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/resizebox-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.resizebox</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/rotated_text-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.rotated-text</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/scroll-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.scroll</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/shape-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.shape</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/subwindow-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.subwindow</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/sudoku-Info.plist
+++ /dev/null
@@ -1,28 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIconFile</key>
-	<string>sudoku.icns</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.sudoku</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/symbols-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.symbols</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/table-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.table</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/tabs-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.tabs</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/threads-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.threads</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/tile-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.tile</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/tiled_image-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.tiled-image</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/tree-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.tree</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/utf8-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.utf8</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/valuators-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.valuators</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/ide/Xcode4/plists/zlib-Info.plist
+++ /dev/null
@@ -1,26 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.zlib</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>FMWK</string>
-	<key>CFBundleSignature</key>
-	<string>FLTK</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1998-2010 by Bill Spitzak and others.</string>
-	<key>CFBundleGetInfoString</key>
-	<string>Part of the FLTK library. Please visit www.fltk.org.</string>
-	<key>NSHighResolutionCapable</key>
-	<true/>
-</dict>
-</plist>
--- a/DoConfig/fltk/install-sh
+++ /dev/null
@@ -1,238 +1,0 @@
-#!/bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-#
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-tranformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
-    case $1 in
-	-c) instcmd="$cpprog"
-	    shift
-	    continue;;
-
-	-d) dir_arg=true
-	    shift
-	    continue;;
-
-	-m) chmodcmd="$chmodprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-o) chowncmd="$chownprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-g) chgrpcmd="$chgrpprog $2"
-	    shift
-	    shift
-	    continue;;
-
-	-s) stripcmd="$stripprog"
-	    shift
-	    continue;;
-
-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
-	    shift
-	    continue;;
-
-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
-	    shift
-	    continue;;
-
-	*)  if [ x"$src" = x ]
-	    then
-		src=$1
-	    else
-		# this colon is to work around a 386BSD /bin/sh bug
-		:
-		dst=$1
-	    fi
-	    shift
-	    continue;;
-    esac
-done
-
-if [ x"$src" = x ]
-then
-	echo "install:	no input file specified"
-	exit 1
-else
-	true
-fi
-
-if [ x"$dir_arg" != x ]; then
-	dst=$src
-	src=""
-	
-	if [ -d $dst ]; then
-		instcmd=:
-	else
-		instcmd=mkdir
-	fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
-# if $src (and thus $dsttmp) contains '*'.
-
-	if [ -f $src -o -d $src ]
-	then
-		true
-	else
-		echo "install:  $src does not exist"
-		exit 1
-	fi
-	
-	if [ x"$dst" = x ]
-	then
-		echo "install:	no destination specified"
-		exit 1
-	else
-		true
-	fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-	if [ -d $dst ]
-	then
-		dst="$dst"/`basename $src`
-	else
-		true
-	fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-#  this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
-	shift
-
-	if [ ! -d "${pathcomp}" ] ;
-        then
-		$mkdirprog "${pathcomp}"
-	else
-		true
-	fi
-
-	pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
-	$doit $instcmd $dst &&
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
-	if [ x"$transformarg" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		dstfile=`basename $dst $transformbasename | 
-			sed $transformarg`$transformbasename
-	fi
-
-# don't allow the sed command to completely eliminate the filename
-
-	if [ x"$dstfile" = x ] 
-	then
-		dstfile=`basename $dst`
-	else
-		true
-	fi
-
-# Make a temp file name in the proper directory.
-
-	dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-	$doit $instcmd $src $dsttmp &&
-
-	trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing.  If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
-
-fi &&
-
-
-exit 0
--- a/DoConfig/fltk/jpeg/CMakeLists.txt
+++ /dev/null
@@ -1,44 +1,0 @@
-
-# memmgr back ends: compile only one of these into a working library
-# (For now, let's use the mode that requires the image fit into memory.
-# This is the recommended mode for Win32 anyway.)
-set(systemdependent_SRCS jmemnobs.c)
-
-# library object files common to compression and decompression
-set(common_SRCS
-   jaricom.c jcomapi.c jutils.c jerror.c jmemmgr.c
-)
-
-# compression library object files
-set(compression_SRCS
-   jcapimin.c jcapistd.c jcarith.c jctrans.c jcparam.c jdatadst.c jcinit.c
-   jcmaster.c jcmarker.c jcmainct.c jcprepct.c jccoefct.c jccolor.c
-   jcsample.c jchuff.c jcdctmgr.c jfdctfst.c jfdctflt.c
-   jfdctint.c
-)
-
-# decompression library object files
-set(decompression_SRCS
-   jdapimin.c jdapistd.c jdarith.c jdtrans.c jdatasrc.c jdmaster.c
-   jdinput.c jdmarker.c jdhuff.c jdmainct.c jdcoefct.c
-   jdpostct.c jddctmgr.c jidctfst.c jidctflt.c jidctint.c
-   jdsample.c jdcolor.c jquant1.c jquant2.c jdmerge.c
-)
-
-list(APPEND BUILD_SRCS "${systemdependent_SRCS};${common_SRCS}")
-list(APPEND BUILD_SRCS "${compression_SRCS};${decompression_SRCS}")
-#######################################################################
-FL_ADD_LIBRARY(fltk_jpeg STATIC "${BUILD_SRCS}")
-# install the jpeg headers
-install(FILES jconfig.h;jerror.h;jmorecfg.h;jpeglib.h
-    DESTINATION ${FLTK_INCLUDEDIR}/FL/images
-)
-
-#######################################################################
-if(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
-FL_ADD_LIBRARY(fltk_jpeg SHARED "${BUILD_SRCS}")
-
-#######################################################################
-endif(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
--- a/DoConfig/fltk/jpeg/Makefile
+++ /dev/null
@@ -1,151 +1,0 @@
-# *************************************************************************
-#  FLTK - DO NOT CHANGE when upgrading the JPEG library, unless required. *
-# *************************************************************************
-#
-# "$Id$"
-#
-# JPEG library makefile for the Fast Light Toolkit (FLTK).
-#
-# Copyright 1997-2011 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-
-#
-# Object files...
-#
-
-OBJS	=	\
-		jaricom.o \
-		jcapimin.o \
-		jcapistd.o \
-		jcarith.o \
-		jccoefct.o \
-		jccolor.o \
-		jcdctmgr.o \
-		jchuff.o \
-		jcinit.o \
-		jcmainct.o \
-		jcmarker.o \
-		jcmaster.o \
-		jcomapi.o \
-		jcparam.o \
-		jcprepct.o \
-		jcsample.o \
-		jctrans.o \
-		jdapimin.o \
-		jdapistd.o \
-		jdarith.o \
-		jdatadst.o \
-		jdatasrc.o \
-		jdcoefct.o \
-		jdcolor.o \
-		jddctmgr.o \
-		jdhuff.o \
-		jdinput.o \
-		jdmainct.o \
-		jdmarker.o \
-		jdmaster.o \
-		jdmerge.o \
-		jdpostct.o \
-		jdsample.o \
-		jdtrans.o \
-		jerror.o \
-		jfdctflt.o \
-		jfdctfst.o \
-		jfdctint.o \
-		jidctflt.o \
-		jidctfst.o \
-		jidctint.o \
-		jmemmgr.o \
-		jmemnobs.o \
-		jquant1.o \
-		jquant2.o \
-		jutils.o
-
-LIBJPEG	=	../lib/libfltk_jpeg$(LIBEXT)
-
-
-#
-# Make all targets...
-#
-
-all:	$(LIBJPEG)
-
-
-#
-# Clean all targets and object files...
-#
-
-clean:
-	$(RM) $(OBJS)
-	$(RM) $(LIBJPEG)
-
-
-#
-# Install everything...
-#
-
-install:	$(LIBJPEG)
-	echo "Installing $(LIBJPEG) in $(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(LIBJPEG) $(DESTDIR)$(libdir)
-	$(RANLIB) $(DESTDIR)$(libdir)/libfltk_jpeg$(LIBEXT)
-	echo "Installing jpeg headers in $(includedir)/FL/images..."
-	-$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) jconfig.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) jerror.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) jmorecfg.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) jpeglib.h $(DESTDIR)$(includedir)/FL/images
-
-
-#
-# Uninstall everything...
-#
-
-uninstall:
-	echo "Uninstalling libfltk_jpeg$(LIBEXT) in $(libdir)..."
-	$(RM) $(libdir)/libfltk_jpeg$(LIBEXT)
-	echo "Uninstalling jpeg headers in $(includedir)/FL/images..."
-	$(RM) $(includedir)/FL/images/jconfig.h
-	$(RM) $(includedir)/FL/images/jerror.h
-	$(RM) $(includedir)/FL/images/jmorecfg.h
-	$(RM) $(includedir)/FL/images/jpeglib.h
-
-
-#
-# libfltk_jpeg.a
-#
-
-$(LIBJPEG):	$(OBJS)
-	echo Archiving $@...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(OBJS)
-	$(RANLIB) $@
-
-
-#
-# Make dependencies...
-#
-
-depend:	$(OBJS:.o=.c)
-	makedepend -Y -I.. -f makedepend $(OBJS:.o=.c)
-
-include makedepend
-
-$(OBJS):	../makeinclude
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/jpeg/README
+++ /dev/null
@@ -1,381 +1,0 @@
-The Independent JPEG Group's JPEG software
-==========================================
-
-README for release 9a of 19-Jan-2014
-====================================
-
-This distribution contains the ninth public release of the Independent JPEG
-Group's free JPEG software.  You are welcome to redistribute this software and
-to use it for any purpose, subject to the conditions under LEGAL ISSUES, below.
-
-This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,
-Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,
-Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,
-and other members of the Independent JPEG Group.
-
-IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee
-(previously known as JPEG, together with ITU-T SG16).
-
-
-DOCUMENTATION ROADMAP
-=====================
-
-This file contains the following sections:
-
-OVERVIEW            General description of JPEG and the IJG software.
-LEGAL ISSUES        Copyright, lack of warranty, terms of distribution.
-REFERENCES          Where to learn more about JPEG.
-ARCHIVE LOCATIONS   Where to find newer versions of this software.
-ACKNOWLEDGMENTS     Special thanks.
-FILE FORMAT WARS    Software *not* to get.
-TO DO               Plans for future IJG releases.
-
-Other documentation files in the distribution are:
-
-User documentation:
-  install.txt       How to configure and install the IJG software.
-  usage.txt         Usage instructions for cjpeg, djpeg, jpegtran,
-                    rdjpgcom, and wrjpgcom.
-  *.1               Unix-style man pages for programs (same info as usage.txt).
-  wizard.txt        Advanced usage instructions for JPEG wizards only.
-  change.log        Version-to-version change highlights.
-Programmer and internal documentation:
-  libjpeg.txt       How to use the JPEG library in your own programs.
-  example.c         Sample code for calling the JPEG library.
-  structure.txt     Overview of the JPEG library's internal structure.
-  filelist.txt      Road map of IJG files.
-  coderules.txt     Coding style rules --- please read if you contribute code.
-
-Please read at least the files install.txt and usage.txt.  Some information
-can also be found in the JPEG FAQ (Frequently Asked Questions) article.  See
-ARCHIVE LOCATIONS below to find out where to obtain the FAQ article.
-
-If you want to understand how the JPEG code works, we suggest reading one or
-more of the REFERENCES, then looking at the documentation files (in roughly
-the order listed) before diving into the code.
-
-
-OVERVIEW
-========
-
-This package contains C software to implement JPEG image encoding, decoding,
-and transcoding.  JPEG (pronounced "jay-peg") is a standardized compression
-method for full-color and gray-scale images.
-
-This software implements JPEG baseline, extended-sequential, and progressive
-compression processes.  Provision is made for supporting all variants of these
-processes, although some uncommon parameter settings aren't implemented yet.
-We have made no provision for supporting the hierarchical or lossless
-processes defined in the standard.
-
-We provide a set of library routines for reading and writing JPEG image files,
-plus two sample applications "cjpeg" and "djpeg", which use the library to
-perform conversion between JPEG and some other popular image file formats.
-The library is intended to be reused in other applications.
-
-In order to support file conversion and viewing software, we have included
-considerable functionality beyond the bare JPEG coding/decoding capability;
-for example, the color quantization modules are not strictly part of JPEG
-decoding, but they are essential for output to colormapped file formats or
-colormapped displays.  These extra functions can be compiled out of the
-library if not required for a particular application.
-
-We have also included "jpegtran", a utility for lossless transcoding between
-different JPEG processes, and "rdjpgcom" and "wrjpgcom", two simple
-applications for inserting and extracting textual comments in JFIF files.
-
-The emphasis in designing this software has been on achieving portability and
-flexibility, while also making it fast enough to be useful.  In particular,
-the software is not intended to be read as a tutorial on JPEG.  (See the
-REFERENCES section for introductory material.)  Rather, it is intended to
-be reliable, portable, industrial-strength code.  We do not claim to have
-achieved that goal in every aspect of the software, but we strive for it.
-
-We welcome the use of this software as a component of commercial products.
-No royalty is required, but we do ask for an acknowledgement in product
-documentation, as described under LEGAL ISSUES.
-
-
-LEGAL ISSUES
-============
-
-In plain English:
-
-1. We don't promise that this software works.  (But if you find any bugs,
-   please let us know!)
-2. You can use this software for whatever you want.  You don't have to pay us.
-3. You may not pretend that you wrote this software.  If you use it in a
-   program, you must acknowledge somewhere in your documentation that
-   you've used the IJG code.
-
-In legalese:
-
-The authors make NO WARRANTY or representation, either express or implied,
-with respect to this software, its quality, accuracy, merchantability, or
-fitness for a particular purpose.  This software is provided "AS IS", and you,
-its user, assume the entire risk as to its quality and accuracy.
-
-This software is copyright (C) 1991-2014, Thomas G. Lane, Guido Vollbeding.
-All Rights Reserved except as specified below.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-software (or portions thereof) for any purpose, without fee, subject to these
-conditions:
-(1) If any part of the source code for this software is distributed, then this
-README file must be included, with this copyright and no-warranty notice
-unaltered; and any additions, deletions, or changes to the original files
-must be clearly indicated in accompanying documentation.
-(2) If only executable code is distributed, then the accompanying
-documentation must state that "this software is based in part on the work of
-the Independent JPEG Group".
-(3) Permission for use of this software is granted only if the user accepts
-full responsibility for any undesirable consequences; the authors accept
-NO LIABILITY for damages of any kind.
-
-These conditions apply to any software derived from or based on the IJG code,
-not just to the unmodified library.  If you use our work, you ought to
-acknowledge us.
-
-Permission is NOT granted for the use of any IJG author's name or company name
-in advertising or publicity relating to this software or products derived from
-it.  This software may be referred to only as "the Independent JPEG Group's
-software".
-
-We specifically permit and encourage the use of this software as the basis of
-commercial products, provided that all warranty or liability claims are
-assumed by the product vendor.
-
-
-The Unix configuration script "configure" was produced with GNU Autoconf.
-It is copyright by the Free Software Foundation but is freely distributable.
-The same holds for its supporting scripts (config.guess, config.sub,
-ltmain.sh).  Another support script, install-sh, is copyright by X Consortium
-but is also freely distributable.
-
-The IJG distribution formerly included code to read and write GIF files.
-To avoid entanglement with the Unisys LZW patent (now expired), GIF reading
-support has been removed altogether, and the GIF writer has been simplified
-to produce "uncompressed GIFs".  This technique does not use the LZW
-algorithm; the resulting GIF files are larger than usual, but are readable
-by all standard GIF decoders.
-
-We are required to state that
-    "The Graphics Interchange Format(c) is the Copyright property of
-    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
-    CompuServe Incorporated."
-
-
-REFERENCES
-==========
-
-We recommend reading one or more of these references before trying to
-understand the innards of the JPEG software.
-
-The best short technical introduction to the JPEG compression algorithm is
-	Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
-	Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
-(Adjacent articles in that issue discuss MPEG motion picture compression,
-applications of JPEG, and related topics.)  If you don't have the CACM issue
-handy, a PostScript file containing a revised version of Wallace's article is
-available at http://www.ijg.org/files/wallace.ps.gz.  The file (actually
-a preprint for an article that appeared in IEEE Trans. Consumer Electronics)
-omits the sample images that appeared in CACM, but it includes corrections
-and some added material.  Note: the Wallace article is copyright ACM and IEEE,
-and it may not be used for commercial purposes.
-
-A somewhat less technical, more leisurely introduction to JPEG can be found in
-"The Data Compression Book" by Mark Nelson and Jean-loup Gailly, published by
-M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1.  This book provides
-good explanations and example C code for a multitude of compression methods
-including JPEG.  It is an excellent source if you are comfortable reading C
-code but don't know much about data compression in general.  The book's JPEG
-sample code is far from industrial-strength, but when you are ready to look
-at a full implementation, you've got one here...
-
-The best currently available description of JPEG is the textbook "JPEG Still
-Image Data Compression Standard" by William B. Pennebaker and Joan L.
-Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.
-Price US$59.95, 638 pp.  The book includes the complete text of the ISO JPEG
-standards (DIS 10918-1 and draft DIS 10918-2).
-Although this is by far the most detailed and comprehensive exposition of
-JPEG publicly available, we point out that it is still missing an explanation
-of the most essential properties and algorithms of the underlying DCT
-technology.
-If you think that you know about DCT-based JPEG after reading this book,
-then you are in delusion.  The real fundamentals and corresponding potential
-of DCT-based JPEG are not publicly known so far, and that is the reason for
-all the mistaken developments taking place in the image coding domain.
-
-The original JPEG standard is divided into two parts, Part 1 being the actual
-specification, while Part 2 covers compliance testing methods.  Part 1 is
-titled "Digital Compression and Coding of Continuous-tone Still Images,
-Part 1: Requirements and guidelines" and has document numbers ISO/IEC IS
-10918-1, ITU-T T.81.  Part 2 is titled "Digital Compression and Coding of
-Continuous-tone Still Images, Part 2: Compliance testing" and has document
-numbers ISO/IEC IS 10918-2, ITU-T T.83.
-IJG JPEG 8 introduced an implementation of the JPEG SmartScale extension
-which is specified in two documents:  A contributed document at ITU and ISO
-with title "ITU-T JPEG-Plus Proposal for Extending ITU-T T.81 for Advanced
-Image Coding", April 2006, Geneva, Switzerland.  The latest version of this
-document is Revision 3.  And a contributed document ISO/IEC JTC1/SC29/WG1 N
-5799 with title "Evolution of JPEG", June/July 2011, Berlin, Germany.
-IJG JPEG 9 introduces a reversible color transform for improved lossless
-compression which is described in a contributed document ISO/IEC JTC1/SC29/
-WG1 N 6080 with title "JPEG 9 Lossless Coding", June/July 2012, Paris,
-France.
-
-The JPEG standard does not specify all details of an interchangeable file
-format.  For the omitted details we follow the "JFIF" conventions, revision
-1.02.  JFIF 1.02 has been adopted as an Ecma International Technical Report
-and thus received a formal publication status.  It is available as a free
-download in PDF format from
-http://www.ecma-international.org/publications/techreports/E-TR-098.htm.
-A PostScript version of the JFIF document is available at
-http://www.ijg.org/files/jfif.ps.gz.  There is also a plain text version at
-http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.
-
-The TIFF 6.0 file format specification can be obtained by FTP from
-ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz.  The JPEG incorporation scheme
-found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.
-IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).
-Instead, we recommend the JPEG design proposed by TIFF Technical Note #2
-(Compression tag 7).  Copies of this Note can be obtained from
-http://www.ijg.org/files/.  It is expected that the next revision
-of the TIFF spec will replace the 6.0 JPEG design with the Note's design.
-Although IJG's own code does not support TIFF/JPEG, the free libtiff library
-uses our library to implement TIFF/JPEG per the Note.
-
-
-ARCHIVE LOCATIONS
-=================
-
-The "official" archive site for this software is www.ijg.org.
-The most recent released version can always be found there in
-directory "files".  This particular version will be archived as
-http://www.ijg.org/files/jpegsrc.v9a.tar.gz, and in Windows-compatible
-"zip" archive format as http://www.ijg.org/files/jpegsr9a.zip.
-
-The JPEG FAQ (Frequently Asked Questions) article is a source of some
-general information about JPEG.
-It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/
-and other news.answers archive sites, including the official news.answers
-archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.
-If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu
-with body
-	send usenet/news.answers/jpeg-faq/part1
-	send usenet/news.answers/jpeg-faq/part2
-
-
-ACKNOWLEDGMENTS
-===============
-
-Thank to Juergen Bruder for providing me with a copy of the common DCT
-algorithm article, only to find out that I had come to the same result
-in a more direct and comprehensible way with a more generative approach.
-
-Thank to Istvan Sebestyen and Joan L. Mitchell for inviting me to the
-ITU JPEG (Study Group 16) meeting in Geneva, Switzerland.
-
-Thank to Thomas Wiegand and Gary Sullivan for inviting me to the
-Joint Video Team (MPEG & ITU) meeting in Geneva, Switzerland.
-
-Thank to Thomas Richter and Daniel Lee for inviting me to the
-ISO/IEC JTC1/SC29/WG1 (previously known as JPEG, together with ITU-T SG16)
-meeting in Berlin, Germany.
-
-Thank to John Korejwa and Massimo Ballerini for inviting me to
-fruitful consultations in Boston, MA and Milan, Italy.
-
-Thank to Hendrik Elstner, Roland Fassauer, Simone Zuck, Guenther
-Maier-Gerber, Walter Stoeber, Fred Schmitz, and Norbert Braunagel
-for corresponding business development.
-
-Thank to Nico Zschach and Dirk Stelling of the technical support team
-at the Digital Images company in Halle for providing me with extra
-equipment for configuration tests.
-
-Thank to Richard F. Lyon (then of Foveon Inc.) for fruitful
-communication about JPEG configuration in Sigma Photo Pro software.
-
-Thank to Andrew Finkenstadt for hosting the ijg.org site.
-
-Last but not least special thank to Thomas G. Lane for the original
-design and development of this singular software package.
-
-
-FILE FORMAT WARS
-================
-
-The ISO/IEC JTC1/SC29/WG1 standards committee (previously known as JPEG,
-together with ITU-T SG16) currently promotes different formats containing
-the name "JPEG" which is misleading because these formats are incompatible
-with original DCT-based JPEG and are based on faulty technologies.
-IJG therefore does not and will not support such momentary mistakes
-(see REFERENCES).
-There exist also distributions under the name "OpenJPEG" promoting such
-kind of formats which is misleading because they don't support original
-JPEG images.
-We have no sympathy for the promotion of inferior formats.  Indeed, one of
-the original reasons for developing this free software was to help force
-convergence on common, interoperable format standards for JPEG files.
-Don't use an incompatible file format!
-(In any case, our decoder will remain capable of reading existing JPEG
-image files indefinitely.)
-
-The ISO committee pretends to be "responsible for the popular JPEG" in their
-public reports which is not true because they don't respond to actual
-requirements for the maintenance of the original JPEG specification.
-Furthermore, the ISO committee pretends to "ensure interoperability" with
-their standards which is not true because their "standards" support only
-application-specific and proprietary use cases and contain mathematically
-incorrect code.
-
-There are currently different distributions in circulation containing the
-name "libjpeg" which is misleading because they don't have the features and
-are incompatible with formats supported by actual IJG libjpeg distributions.
-One of those fakes is released by members of the ISO committee and just uses
-the name of libjpeg for misdirection of people, similar to the abuse of the
-name JPEG as described above, while having nothing in common with actual IJG
-libjpeg distributions and containing mathematically incorrect code.
-The other one claims to be a "derivative" or "fork" of the original libjpeg,
-but violates the license conditions as described under LEGAL ISSUES above
-and violates basic C programming properties.
-We have no sympathy for the release of misleading, incorrect and illegal
-distributions derived from obsolete code bases.
-Don't use an obsolete code base!
-
-According to the UCC (Uniform Commercial Code) law, IJG has the lawful and
-legal right to foreclose on certain standardization bodies and other
-institutions or corporations that knowingly perform substantial and
-systematic deceptive acts and practices, fraud, theft, and damaging of the
-value of the people of this planet without their knowing, willing and
-intentional consent.
-The titles, ownership, and rights of these institutions and all their assets
-are now duly secured and held in trust for the free people of this planet.
-People of the planet, on every country, may have a financial interest in
-the assets of these former principals, agents, and beneficiaries of the
-foreclosed institutions and corporations.
-IJG asserts what is: that each man, woman, and child has unalienable value
-and rights granted and deposited in them by the Creator and not any one of
-the people is subordinate to any artificial principality, corporate fiction
-or the special interest of another without their appropriate knowing,
-willing and intentional consent made by contract or accommodation agreement.
-IJG expresses that which already was.
-The people have already determined and demanded that public administration
-entities, national governments, and their supporting judicial systems must
-be fully transparent, accountable, and liable.
-IJG has secured the value for all concerned free people of the planet.
-
-A partial list of foreclosed institutions and corporations ("Hall of Shame")
-is currently prepared and will be published later.
-
-
-TO DO
-=====
-
-Version 9 is the second release of a new generation JPEG standard
-to overcome the limitations of the original JPEG specification,
-and is the first true source reference JPEG codec.
-More features are being prepared for coming releases...
-
-Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.
--- a/DoConfig/fltk/jpeg/change.log
+++ /dev/null
@@ -1,409 +1,0 @@
-CHANGE LOG for Independent JPEG Group's JPEG software
-
-
-Version 9a  19-Jan-2014
------------------------
-
-Add support for wide gamut color spaces (JFIF version 2).
-Improve clarity and accuracy in color conversion modules.
-Note: Requires rebuild of test images.
-
-Extend the bit depth support to all values from 8 to 12
-(BITS_IN_JSAMPLE configuration option in jmorecfg.h).
-jpegtran now supports N bits sample data precision with all N from 8 to 12
-in a single instance.  Thank to Roland Fassauer for inspiration.
-
-Try to resolve issues with new boolean type definition.
-Thank also to v4hn for suggestion.
-
-Enable option to use default Huffman tables for lossless compression
-(for hardware solution), and in this case improve lossless RGB compression
-with reversible color transform.  Thank to Benny Alexandar for hint.
-
-Extend the entropy decoding structure, so that extraneous bytes between
-compressed scan data and following marker can be reported correctly.
-Thank to Nigel Tao for hint.
-
-Add jpegtran -wipe option and extension for -crop.
-Thank to Andrew Senior, David Clunie, and Josef Schmid for suggestion.
-
-
-Version 9  13-Jan-2013
-----------------------
-
-Add cjpeg -rgb1 option to create an RGB JPEG file, and insert
-a simple reversible color transform into the processing which
-significantly improves the compression.
-The recommended command for lossless coding of RGB images is now
-cjpeg -rgb1 -block 1 -arithmetic.
-As said, this option improves the compression significantly, but
-the files are not compatible with JPEG decoders prior to IJG v9
-due to the included color transform.
-The used color transform and marker signaling is compatible with
-other JPEG standards (e.g., JPEG-LS part 2).
-
-Remove the automatic de-ANSI-fication support (Automake 1.12).
-Thank also to Nitin A Kamble for suggestion.
-
-Add remark for jpeg_mem_dest() in jdatadst.c.
-Thank to Elie-Gregoire Khoury for the hint.
-
-Support files with invalid component identifiers (created
-by Adobe PDF).  Thank to Robin Watts for the suggestion.
-
-Adapt full buffer case in jcmainct.c for use with scaled DCT.
-Thank to Sergii Biloshytskyi for the suggestion.
-
-Add type identifier for declaration of noreturn functions.
-Thank to Brett L. Moore for the suggestion.
-
-Correct argument type in format string, avoid compiler warnings.
-Thank to Vincent Torri for hint.
-
-Add missing #include directives in configuration checks, avoid
-configuration errors.  Thank to John Spencer for the hint.
-
-
-Version 8d  15-Jan-2012
------------------------
-
-Add cjpeg -rgb option to create RGB JPEG files.
-Using this switch suppresses the conversion from RGB
-colorspace input to the default YCbCr JPEG colorspace.
-This feature allows true lossless JPEG coding of RGB color images.
-The recommended command for this purpose is currently
-cjpeg -rgb -block 1 -arithmetic.
-SmartScale capable decoder (introduced with IJG JPEG 8) required.
-Thank to Michael Koch for the initial suggestion.
-
-Add option to disable the region adjustment in the transupp crop code.
-Thank to Jeffrey Friedl for the suggestion.
-
-Thank to Richard Jones and Edd Dawson for various minor corrections.
-
-Thank to Akim Demaille for configure.ac cleanup.
-
-
-Version 8c  16-Jan-2011
------------------------
-
-Add option to compression library and cjpeg (-block N) to use
-different DCT block size.
-All N from 1 to 16 are possible.  Default is 8 (baseline format).
-Larger values produce higher compression,
-smaller values produce higher quality.
-SmartScale capable decoder (introduced with IJG JPEG 8) required.
-
-
-Version 8b  16-May-2010
------------------------
-
-Repair problem in new memory source manager with corrupt JPEG data.
-Thank to Ted Campbell and Samuel Chun for the report.
-
-Repair problem in Makefile.am test target.
-Thank to anonymous user for the report.
-
-Support MinGW installation with automatic configure.
-Thank to Volker Grabsch for the suggestion.
-
-
-Version 8a  28-Feb-2010
------------------------
-
-Writing tables-only datastreams via jpeg_write_tables works again.
-
-Support 32-bit BMPs (RGB image with Alpha channel) for read in cjpeg.
-Thank to Brett Blackham for the suggestion.
-
-Improve accuracy in floating point IDCT calculation.
-Thank to Robert Hooke for the hint.
-
-
-Version 8  10-Jan-2010
-----------------------
-
-jpegtran now supports the same -scale option as djpeg for "lossless" resize.
-An implementation of the JPEG SmartScale extension is required for this
-feature.  A (draft) specification of the JPEG SmartScale extension is
-available as a contributed document at ITU and ISO.  Revision 2 or later
-of the document is required (latest document version is Revision 3).
-The SmartScale extension will enable more features beside lossless resize
-in future implementations, as described in the document (new compression
-options).
-
-Add sanity check in BMP reader module to avoid cjpeg crash for empty input
-image (thank to Isaev Ildar of ISP RAS, Moscow, RU for reporting this error).
-
-Add data source and destination managers for read from and write to
-memory buffers.  New API functions jpeg_mem_src and jpeg_mem_dest.
-Thank to Roberto Boni from Italy for the suggestion.
-
-
-Version 7  27-Jun-2009
-----------------------
-
-New scaled DCTs implemented.
-djpeg now supports scalings N/8 with all N from 1 to 16.
-cjpeg now supports scalings 8/N with all N from 1 to 16.
-Scaled DCTs with size larger than 8 are now also used for resolving the
-common 2x2 chroma subsampling case without additional spatial resampling.
-Separate spatial resampling for those kind of files is now only necessary
-for N>8 scaling cases.
-Furthermore, separate scaled DCT functions are provided for direct resolving
-of the common asymmetric subsampling cases (2x1 and 1x2) without additional
-spatial resampling.
-
-cjpeg -quality option has been extended for support of separate quality
-settings for luminance and chrominance (or in general, for every provided
-quantization table slot).
-New API function jpeg_default_qtables() and q_scale_factor array in library.
-
-Added -nosmooth option to cjpeg, complementary to djpeg.
-New variable "do_fancy_downsampling" in library, complement to fancy
-upsampling.  Fancy upsampling now uses direct DCT scaling with sizes
-larger than 8.  The old method is not reversible and has been removed.
-
-Support arithmetic entropy encoding and decoding.
-Added files jaricom.c, jcarith.c, jdarith.c.
-
-Straighten the file structure:
-Removed files jidctred.c, jcphuff.c, jchuff.h, jdphuff.c, jdhuff.h.
-
-jpegtran has a new "lossless" cropping feature.
-
-Implement -perfect option in jpegtran, new API function
-jtransform_perfect_transform() in transupp. (DP 204_perfect.dpatch)
-
-Better error messages for jpegtran fopen failure.
-(DP 203_jpegtran_errmsg.dpatch)
-
-Fix byte order issue with 16bit PPM/PGM files in rdppm.c/wrppm.c:
-according to Netpbm, the de facto standard implementation of the PNM formats,
-the most significant byte is first. (DP 203_rdppm.dpatch)
-
-Add -raw option to rdjpgcom not to mangle the output.
-(DP 205_rdjpgcom_raw.dpatch)
-
-Make rdjpgcom locale aware. (DP 201_rdjpgcom_locale.dpatch)
-
-Add extern "C" to jpeglib.h.
-This avoids the need to put extern "C" { ... } around #include "jpeglib.h"
-in your C++ application.  Defining the symbol DONT_USE_EXTERN_C in the
-configuration prevents this. (DP 202_jpeglib.h_c++.dpatch)
-
-
-Version 6b  27-Mar-1998
------------------------
-
-jpegtran has new features for lossless image transformations (rotation
-and flipping) as well as "lossless" reduction to grayscale.
-
-jpegtran now copies comments by default; it has a -copy switch to enable
-copying all APPn blocks as well, or to suppress comments.  (Formerly it
-always suppressed comments and APPn blocks.)  jpegtran now also preserves
-JFIF version and resolution information.
-
-New decompressor library feature: COM and APPn markers found in the input
-file can be saved in memory for later use by the application.  (Before,
-you had to code this up yourself with a custom marker processor.)
-
-There is an unused field "void * client_data" now in compress and decompress
-parameter structs; this may be useful in some applications.
-
-JFIF version number information is now saved by the decoder and accepted by
-the encoder.  jpegtran uses this to copy the source file's version number,
-to ensure "jpegtran -copy all" won't create bogus files that contain JFXX
-extensions but claim to be version 1.01.  Applications that generate their
-own JFXX extension markers also (finally) have a supported way to cause the
-encoder to emit JFIF version number 1.02.
-
-djpeg's trace mode reports JFIF 1.02 thumbnail images as such, rather
-than as unknown APP0 markers.
-
-In -verbose mode, djpeg and rdjpgcom will try to print the contents of
-APP12 markers as text.  Some digital cameras store useful text information
-in APP12 markers.
-
-Handling of truncated data streams is more robust: blocks beyond the one in
-which the error occurs will be output as uniform gray, or left unchanged
-if decoding a progressive JPEG.  The appearance no longer depends on the
-Huffman tables being used.
-
-Huffman tables are checked for validity much more carefully than before.
-
-To avoid the Unisys LZW patent, djpeg's GIF output capability has been
-changed to produce "uncompressed GIFs", and cjpeg's GIF input capability
-has been removed altogether.  We're not happy about it either, but there
-seems to be no good alternative.
-
-The configure script now supports building libjpeg as a shared library
-on many flavors of Unix (all the ones that GNU libtool knows how to
-build shared libraries for).  Use "./configure --enable-shared" to
-try this out.
-
-New jconfig file and makefiles for Microsoft Visual C++ and Developer Studio.
-Also, a jconfig file and a build script for Metrowerks CodeWarrior
-on Apple Macintosh.  makefile.dj has been updated for DJGPP v2, and there
-are miscellaneous other minor improvements in the makefiles.
-
-jmemmac.c now knows how to create temporary files following Mac System 7
-conventions.
-
-djpeg's -map switch is now able to read raw-format PPM files reliably.
-
-cjpeg -progressive -restart no longer generates any unnecessary DRI markers.
-
-Multiple calls to jpeg_simple_progression for a single JPEG object
-no longer leak memory.
-
-
-Version 6a  7-Feb-96
---------------------
-
-Library initialization sequence modified to detect version mismatches
-and struct field packing mismatches between library and calling application.
-This change requires applications to be recompiled, but does not require
-any application source code change.
-
-All routine declarations changed to the style "GLOBAL(type) name ...",
-that is, GLOBAL, LOCAL, METHODDEF, EXTERN are now macros taking the
-routine's return type as an argument.  This makes it possible to add
-Microsoft-style linkage keywords to all the routines by changing just
-these macros.  Note that any application code that was using these macros
-will have to be changed.
-
-DCT coefficient quantization tables are now stored in normal array order
-rather than zigzag order.  Application code that calls jpeg_add_quant_table,
-or otherwise manipulates quantization tables directly, will need to be
-changed.  If you need to make such code work with either older or newer
-versions of the library, a test like "#if JPEG_LIB_VERSION >= 61" is
-recommended.
-
-djpeg's trace capability now dumps DQT tables in natural order, not zigzag
-order.  This allows the trace output to be made into a "-qtables" file
-more easily.
-
-New system-dependent memory manager module for use on Apple Macintosh.
-
-Fix bug in cjpeg's -smooth option: last one or two scanlines would be
-duplicates of the prior line unless the image height mod 16 was 1 or 2.
-
-Repair minor problems in VMS, BCC, MC6 makefiles.
-
-New configure script based on latest GNU Autoconf.
-
-Correct the list of include files needed by MetroWerks C for ccommand().
-
-Numerous small documentation updates.
-
-
-Version 6  2-Aug-95
--------------------
-
-Progressive JPEG support: library can read and write full progressive JPEG
-files.  A "buffered image" mode supports incremental decoding for on-the-fly
-display of progressive images.  Simply recompiling an existing IJG-v5-based
-decoder with v6 should allow it to read progressive files, though of course
-without any special progressive display.
-
-New "jpegtran" application performs lossless transcoding between different
-JPEG formats; primarily, it can be used to convert baseline to progressive
-JPEG and vice versa.  In support of jpegtran, the library now allows lossless
-reading and writing of JPEG files as DCT coefficient arrays.  This ability
-may be of use in other applications.
-
-Notes for programmers:
-* We changed jpeg_start_decompress() to be able to suspend; this makes all
-decoding modes available to suspending-input applications.  However,
-existing applications that use suspending input will need to be changed
-to check the return value from jpeg_start_decompress().  You don't need to
-do anything if you don't use a suspending data source.
-* We changed the interface to the virtual array routines: access_virt_array
-routines now take a count of the number of rows to access this time.  The
-last parameter to request_virt_array routines is now interpreted as the
-maximum number of rows that may be accessed at once, but not necessarily
-the height of every access.
-
-
-Version 5b  15-Mar-95
----------------------
-
-Correct bugs with grayscale images having v_samp_factor > 1.
-
-jpeg_write_raw_data() now supports output suspension.
-
-Correct bugs in "configure" script for case of compiling in
-a directory other than the one containing the source files.
-
-Repair bug in jquant1.c: sometimes didn't use as many colors as it could.
-
-Borland C makefile and jconfig file work under either MS-DOS or OS/2.
-
-Miscellaneous improvements to documentation.
-
-
-Version 5a  7-Dec-94
---------------------
-
-Changed color conversion roundoff behavior so that grayscale values are
-represented exactly.  (This causes test image files to change.)
-
-Make ordered dither use 16x16 instead of 4x4 pattern for a small quality
-improvement.
-
-New configure script based on latest GNU Autoconf.
-Fix configure script to handle CFLAGS correctly.
-Rename *.auto files to *.cfg, so that configure script still works if
-file names have been truncated for DOS.
-
-Fix bug in rdbmp.c: didn't allow for extra data between header and image.
-
-Modify rdppm.c/wrppm.c to handle 2-byte raw PPM/PGM formats for 12-bit data.
-
-Fix several bugs in rdrle.c.
-
-NEED_SHORT_EXTERNAL_NAMES option was broken.
-
-Revise jerror.h/jerror.c for more flexibility in message table.
-
-Repair oversight in jmemname.c NO_MKTEMP case: file could be there
-but unreadable.
-
-
-Version 5  24-Sep-94
---------------------
-
-Version 5 represents a nearly complete redesign and rewrite of the IJG
-software.  Major user-visible changes include:
-  * Automatic configuration simplifies installation for most Unix systems.
-  * A range of speed vs. image quality tradeoffs are supported.
-    This includes resizing of an image during decompression: scaling down
-    by a factor of 1/2, 1/4, or 1/8 is handled very efficiently.
-  * New programs rdjpgcom and wrjpgcom allow insertion and extraction
-    of text comments in a JPEG file.
-
-The application programmer's interface to the library has changed completely.
-Notable improvements include:
-  * We have eliminated the use of callback routines for handling the
-    uncompressed image data.  The application now sees the library as a
-    set of routines that it calls to read or write image data on a
-    scanline-by-scanline basis.
-  * The application image data is represented in a conventional interleaved-
-    pixel format, rather than as a separate array for each color channel.
-    This can save a copying step in many programs.
-  * The handling of compressed data has been cleaned up: the application can
-    supply routines to source or sink the compressed data.  It is possible to
-    suspend processing on source/sink buffer overrun, although this is not
-    supported in all operating modes.
-  * All static state has been eliminated from the library, so that multiple
-    instances of compression or decompression can be active concurrently.
-  * JPEG abbreviated datastream formats are supported, ie, quantization and
-    Huffman tables can be stored separately from the image data.
-  * And not only that, but the documentation of the library has improved
-    considerably!
-
-
-The last widely used release before the version 5 rewrite was version 4A of
-18-Feb-93.  Change logs before that point have been discarded, since they
-are not of much interest after the rewrite.
--- a/DoConfig/fltk/jpeg/coderules.txt
+++ /dev/null
@@ -1,118 +1,0 @@
-IJG JPEG LIBRARY:  CODING RULES
-
-Copyright (C) 1991-1996, Thomas G. Lane.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-Since numerous people will be contributing code and bug fixes, it's important
-to establish a common coding style.  The goal of using similar coding styles
-is much more important than the details of just what that style is.
-
-In general we follow the recommendations of "Recommended C Style and Coding
-Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and
-Brader).  This document is available in the IJG FTP archive (see
-jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl).
-
-Block comments should be laid out thusly:
-
-/*
- *  Block comments in this style.
- */
-
-We indent statements in K&R style, e.g.,
-	if (test) {
-	  then-part;
-	} else {
-	  else-part;
-	}
-with two spaces per indentation level.  (This indentation convention is
-handled automatically by GNU Emacs and many other text editors.)
-
-Multi-word names should be written in lower case with underscores, e.g.,
-multi_word_name (not multiWordName).  Preprocessor symbols and enum constants
-are similar but upper case (MULTI_WORD_NAME).  Names should be unique within
-the first fifteen characters.  (On some older systems, global names must be
-unique within six characters.  We accommodate this without cluttering the
-source code by using macros to substitute shorter names.)
-
-We use function prototypes everywhere; we rely on automatic source code
-transformation to feed prototype-less C compilers.  Transformation is done
-by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript).
-ansi2knr is not very bright, so it imposes a format requirement on function
-declarations: the function name MUST BEGIN IN COLUMN 1.  Thus all functions
-should be written in the following style:
-
-LOCAL(int *)
-function_name (int a, char *b)
-{
-    code...
-}
-
-Note that each function definition must begin with GLOBAL(type), LOCAL(type),
-or METHODDEF(type).  These macros expand to "static type" or just "type" as
-appropriate.  They provide a readable indication of the routine's usage and
-can readily be changed for special needs.  (For instance, special linkage
-keywords can be inserted for use in Windows DLLs.)
-
-ansi2knr does not transform method declarations (function pointers in
-structs).  We handle these with a macro JMETHOD, defined as
-	#ifdef HAVE_PROTOTYPES
-	#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
-	#else
-	#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
-	#endif
-which is used like this:
-	struct function_pointers {
-	  JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp));
-	  JMETHOD(void, term_entropy_encoder, (void));
-	};
-Note the set of parentheses surrounding the parameter list.
-
-A similar solution is used for forward and external function declarations
-(see the EXTERN and JPP macros).
-
-If the code is to work on non-ANSI compilers, we cannot rely on a prototype
-declaration to coerce actual parameters into the right types.  Therefore, use
-explicit casts on actual parameters whenever the actual parameter type is not
-identical to the formal parameter.  Beware of implicit conversions to "int".
-
-It seems there are some non-ANSI compilers in which the sizeof() operator
-is defined to return int, yet size_t is defined as long.  Needless to say,
-this is brain-damaged.  Always use the SIZEOF() macro in place of sizeof(),
-so that the result is guaranteed to be of type size_t.
-
-
-The JPEG library is intended to be used within larger programs.  Furthermore,
-we want it to be reentrant so that it can be used by applications that process
-multiple images concurrently.  The following rules support these requirements:
-
-1. Avoid direct use of file I/O, "malloc", error report printouts, etc;
-pass these through the common routines provided.
-
-2. Minimize global namespace pollution.  Functions should be declared static
-wherever possible.  (Note that our method-based calling conventions help this
-a lot: in many modules only the initialization function will ever need to be
-called directly, so only that function need be externally visible.)  All
-global function names should begin with "jpeg_", and should have an
-abbreviated name (unique in the first six characters) substituted by macro
-when NEED_SHORT_EXTERNAL_NAMES is set.
-
-3. Don't use global variables; anything that must be used in another module
-should be in the common data structures.
-
-4. Don't use static variables except for read-only constant tables.  Variables
-that should be private to a module can be placed into private structures (see
-the system architecture document, structure.txt).
-
-5. Source file names should begin with "j" for files that are part of the
-library proper; source files that are not part of the library, such as cjpeg.c
-and djpeg.c, do not begin with "j".  Keep source file names to eight
-characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers.  Keep
-compression and decompression code in separate source files --- some
-applications may want only one half of the library.
-
-Note: these rules (particularly #4) are not followed religiously in the
-modules that are used in cjpeg/djpeg but are not part of the JPEG library
-proper.  Those modules are not really intended to be used in other
-applications.
--- a/DoConfig/fltk/jpeg/filelist.txt
+++ /dev/null
@@ -1,215 +1,0 @@
-IJG JPEG LIBRARY:  FILE LIST
-
-Copyright (C) 1994-2013, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-Here is a road map to the files in the IJG JPEG distribution.  The
-distribution includes the JPEG library proper, plus two application
-programs ("cjpeg" and "djpeg") which use the library to convert JPEG
-files to and from some other popular image formats.  A third application
-"jpegtran" uses the library to do lossless conversion between different
-variants of JPEG.  There are also two stand-alone applications,
-"rdjpgcom" and "wrjpgcom".
-
-
-THE JPEG LIBRARY
-================
-
-Include files:
-
-jpeglib.h	JPEG library's exported data and function declarations.
-jconfig.h	Configuration declarations.  Note: this file is not present
-		in the distribution; it is generated during installation.
-jmorecfg.h	Additional configuration declarations; need not be changed
-		for a standard installation.
-jerror.h	Declares JPEG library's error and trace message codes.
-jinclude.h	Central include file used by all IJG .c files to reference
-		system include files.
-jpegint.h	JPEG library's internal data structures.
-jdct.h		Private declarations for forward & reverse DCT subsystems.
-jmemsys.h	Private declarations for memory management subsystem.
-jversion.h	Version information.
-
-Applications using the library should include jpeglib.h (which in turn
-includes jconfig.h and jmorecfg.h).  Optionally, jerror.h may be included
-if the application needs to reference individual JPEG error codes.  The
-other include files are intended for internal use and would not normally
-be included by an application program.  (cjpeg/djpeg/etc do use jinclude.h,
-since its function is to improve portability of the whole IJG distribution.
-Most other applications will directly include the system include files they
-want, and hence won't need jinclude.h.)
-
-
-C source code files:
-
-These files contain most of the functions intended to be called directly by
-an application program:
-
-jcapimin.c	Application program interface: core routines for compression.
-jcapistd.c	Application program interface: standard compression.
-jdapimin.c	Application program interface: core routines for decompression.
-jdapistd.c	Application program interface: standard decompression.
-jcomapi.c	Application program interface routines common to compression
-		and decompression.
-jcparam.c	Compression parameter setting helper routines.
-jctrans.c	API and library routines for transcoding compression.
-jdtrans.c	API and library routines for transcoding decompression.
-
-Compression side of the library:
-
-jcinit.c	Initialization: determines which other modules to use.
-jcmaster.c	Master control: setup and inter-pass sequencing logic.
-jcmainct.c	Main buffer controller (preprocessor => JPEG compressor).
-jcprepct.c	Preprocessor buffer controller.
-jccoefct.c	Buffer controller for DCT coefficient buffer.
-jccolor.c	Color space conversion.
-jcsample.c	Downsampling.
-jcdctmgr.c	DCT manager (DCT implementation selection & control).
-jfdctint.c	Forward DCT using slow-but-accurate integer method.
-jfdctfst.c	Forward DCT using faster, less accurate integer method.
-jfdctflt.c	Forward DCT using floating-point arithmetic.
-jchuff.c	Huffman entropy coding.
-jcarith.c	Arithmetic entropy coding.
-jcmarker.c	JPEG marker writing.
-jdatadst.c	Data destination managers for memory and stdio output.
-
-Decompression side of the library:
-
-jdmaster.c	Master control: determines which other modules to use.
-jdinput.c	Input controller: controls input processing modules.
-jdmainct.c	Main buffer controller (JPEG decompressor => postprocessor).
-jdcoefct.c	Buffer controller for DCT coefficient buffer.
-jdpostct.c	Postprocessor buffer controller.
-jdmarker.c	JPEG marker reading.
-jdhuff.c	Huffman entropy decoding.
-jdarith.c	Arithmetic entropy decoding.
-jddctmgr.c	IDCT manager (IDCT implementation selection & control).
-jidctint.c	Inverse DCT using slow-but-accurate integer method.
-jidctfst.c	Inverse DCT using faster, less accurate integer method.
-jidctflt.c	Inverse DCT using floating-point arithmetic.
-jdsample.c	Upsampling.
-jdcolor.c	Color space conversion.
-jdmerge.c	Merged upsampling/color conversion (faster, lower quality).
-jquant1.c	One-pass color quantization using a fixed-spacing colormap.
-jquant2.c	Two-pass color quantization using a custom-generated colormap.
-		Also handles one-pass quantization to an externally given map.
-jdatasrc.c	Data source managers for memory and stdio input.
-
-Support files for both compression and decompression:
-
-jaricom.c	Tables for common use in arithmetic entropy encoding and
-		decoding routines.
-jerror.c	Standard error handling routines (application replaceable).
-jmemmgr.c	System-independent (more or less) memory management code.
-jutils.c	Miscellaneous utility routines.
-
-jmemmgr.c relies on a system-dependent memory management module.  The IJG
-distribution includes the following implementations of the system-dependent
-module:
-
-jmemnobs.c	"No backing store": assumes adequate virtual memory exists.
-jmemansi.c	Makes temporary files with ANSI-standard routine tmpfile().
-jmemname.c	Makes temporary files with program-generated file names.
-jmemdos.c	Custom implementation for MS-DOS (16-bit environment only):
-		can use extended and expanded memory as well as temp files.
-jmemmac.c	Custom implementation for Apple Macintosh.
-
-Exactly one of the system-dependent modules should be configured into an
-installed JPEG library (see install.txt for hints about which one to use).
-On unusual systems you may find it worthwhile to make a special
-system-dependent memory manager.
-
-
-Non-C source code files:
-
-jmemdosa.asm	80x86 assembly code support for jmemdos.c; used only in
-		MS-DOS-specific configurations of the JPEG library.
-
-
-CJPEG/DJPEG/JPEGTRAN
-====================
-
-Include files:
-
-cdjpeg.h	Declarations shared by cjpeg/djpeg/jpegtran modules.
-cderror.h	Additional error and trace message codes for cjpeg et al.
-transupp.h	Declarations for jpegtran support routines in transupp.c.
-
-C source code files:
-
-cjpeg.c		Main program for cjpeg.
-djpeg.c		Main program for djpeg.
-jpegtran.c	Main program for jpegtran.
-cdjpeg.c	Utility routines used by all three programs.
-rdcolmap.c	Code to read a colormap file for djpeg's "-map" switch.
-rdswitch.c	Code to process some of cjpeg's more complex switches.
-		Also used by jpegtran.
-transupp.c	Support code for jpegtran: lossless image manipulations.
-
-Image file reader modules for cjpeg:
-
-rdbmp.c		BMP file input.
-rdgif.c		GIF file input (now just a stub).
-rdppm.c		PPM/PGM file input.
-rdrle.c		Utah RLE file input.
-rdtarga.c	Targa file input.
-
-Image file writer modules for djpeg:
-
-wrbmp.c		BMP file output.
-wrgif.c		GIF file output (a mere shadow of its former self).
-wrppm.c		PPM/PGM file output.
-wrrle.c		Utah RLE file output.
-wrtarga.c	Targa file output.
-
-
-RDJPGCOM/WRJPGCOM
-=================
-
-C source code files:
-
-rdjpgcom.c	Stand-alone rdjpgcom application.
-wrjpgcom.c	Stand-alone wrjpgcom application.
-
-These programs do not depend on the IJG library.  They do use
-jconfig.h and jinclude.h, only to improve portability.
-
-
-ADDITIONAL FILES
-================
-
-Documentation (see README for a guide to the documentation files):
-
-README		Master documentation file.
-*.txt		Other documentation files.
-*.1		Documentation in Unix man page format.
-change.log	Version-to-version change highlights.
-example.c	Sample code for calling JPEG library.
-
-Configuration/installation files and programs (see install.txt for more info):
-
-configure	Unix shell script to perform automatic configuration.
-configure.ac	Source file for use with Autoconf to generate configure.
-ltmain.sh	Support scripts for configure (from GNU libtool).
-config.guess
-config.sub
-depcomp
-missing
-ar-lib
-compile
-install-sh	Install shell script for those Unix systems lacking one.
-Makefile.in	Makefile input for configure.
-Makefile.am	Source file for use with Automake to generate Makefile.in.
-ckconfig.c	Program to generate jconfig.h on non-Unix systems.
-jconfig.txt	Template for making jconfig.h by hand.
-mak*.*		Sample makefiles for particular systems.
-jconfig.*	Sample jconfig.h for particular systems.
-libjpeg.map	Script to generate shared library with versioned symbols.
-aclocal.m4	M4 macro definitions for use with Autoconf.
-
-Test files (see install.txt for test procedure):
-
-test*.*		Source and comparison files for confidence test.
-		These are binary image files, NOT text files.
--- a/DoConfig/fltk/jpeg/install.txt
+++ /dev/null
@@ -1,1106 +1,0 @@
-INSTALLATION INSTRUCTIONS for the Independent JPEG Group's JPEG software
-
-Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-This file explains how to configure and install the IJG software.  We have
-tried to make this software extremely portable and flexible, so that it can be
-adapted to almost any environment.  The downside of this decision is that the
-installation process is complicated.  We have provided shortcuts to simplify
-the task on common systems.  But in any case, you will need at least a little
-familiarity with C programming and program build procedures for your system.
-
-If you are only using this software as part of a larger program, the larger
-program's installation procedure may take care of configuring the IJG code.
-For example, Ghostscript's installation script will configure the IJG code.
-You don't need to read this file if you just want to compile Ghostscript.
-
-If you are on a Unix machine, you may not need to read this file at all.
-Try doing
-	./configure
-	make
-	make test
-If that doesn't complain, do
-	make install
-(better do "make -n install" first to see if the makefile will put the files
-where you want them).  Read further if you run into snags or want to customize
-the code for your system.
-
-
-TABLE OF CONTENTS
------------------
-
-Before you start
-Configuring the software:
-	using the automatic "configure" script
-	using one of the supplied jconfig and makefile files
-	by hand
-Building the software
-Testing the software
-Installing the software
-Optional stuff
-Optimization
-Hints for specific systems
-
-
-BEFORE YOU START
-================
-
-Before installing the software you must unpack the distributed source code.
-Since you are reading this file, you have probably already succeeded in this
-task.  However, there is a potential for error if you needed to convert the
-files to the local standard text file format (for example, if you are on
-MS-DOS you may have converted LF end-of-line to CR/LF).  You must apply
-such conversion to all the files EXCEPT those whose names begin with "test".
-The test files contain binary data; if you change them in any way then the
-self-test will give bad results.
-
-Please check the last section of this file to see if there are hints for the
-specific machine or compiler you are using.
-
-
-CONFIGURING THE SOFTWARE
-========================
-
-To configure the IJG code for your system, you need to create two files:
-  * jconfig.h: contains values for system-dependent #define symbols.
-  * Makefile: controls the compilation process.
-(On a non-Unix machine, you may create "project files" or some other
-substitute for a Makefile.  jconfig.h is needed in any environment.)
-
-We provide three different ways to generate these files:
-  * On a Unix system, you can just run the "configure" script.
-  * We provide sample jconfig files and makefiles for popular machines;
-    if your machine matches one of the samples, just copy the right sample
-    files to jconfig.h and Makefile.
-  * If all else fails, read the instructions below and make your own files.
-
-
-Configuring the software using the automatic "configure" script
----------------------------------------------------------------
-
-If you are on a Unix machine, you can just type
-	./configure
-and let the configure script construct appropriate configuration files.
-If you're using "csh" on an old version of System V, you might need to type
-	sh configure
-instead to prevent csh from trying to execute configure itself.
-Expect configure to run for a few minutes, particularly on slower machines;
-it works by compiling a series of test programs.
-
-Configure was created with GNU Autoconf and it follows the usual conventions
-for GNU configure scripts.  It makes a few assumptions that you may want to
-override.  You can do this by providing optional switches to configure:
-
-* Configure will build both static and shared libraries, if possible.
-If you want to build libjpeg only as a static library, say
-	./configure --disable-shared
-If you want to build libjpeg only as a shared library, say
-	./configure --disable-static
-Configure uses GNU libtool to take care of system-dependent shared library
-building methods.
-
-* Configure will use gcc (GNU C compiler) if it's available, otherwise cc.
-To force a particular compiler to be selected, use the CC option, for example
-	./configure CC='cc'
-The same method can be used to include any unusual compiler switches.
-For example, on HP-UX you probably want to say
-	./configure CC='cc -Aa'
-to get HP's compiler to run in ANSI mode.
-
-* The default CFLAGS setting is "-g" for non-gcc compilers, "-g -O2" for gcc.
-You can override this by saying, for example,
-	./configure CFLAGS='-O2'
-if you want to compile without debugging support.
-
-* Configure will set up the makefile so that "make install" will install files
-into /usr/local/bin, /usr/local/man, etc.  You can specify an installation
-prefix other than "/usr/local" by giving configure the option "--prefix=PATH".
-
-* If you don't have a lot of swap space, you may need to enable the IJG
-software's internal virtual memory mechanism.  To do this, give the option
-"--enable-maxmem=N" where N is the default maxmemory limit in megabytes.
-This is discussed in more detail under "Selecting a memory manager", below.
-You probably don't need to worry about this on reasonably-sized Unix machines,
-unless you plan to process very large images.
-
-Configure has some other features that are useful if you are cross-compiling
-or working in a network of multiple machine types; but if you need those
-features, you probably already know how to use them.
-
-
-Configuring the software using one of the supplied jconfig and makefile files
------------------------------------------------------------------------------
-
-If you have one of these systems, you can just use the provided configuration
-files:
-
-Makefile	jconfig file	System and/or compiler
-
-makefile.manx	jconfig.manx	Amiga, Manx Aztec C
-makefile.sas	jconfig.sas	Amiga, SAS C
-makeproj.mac	jconfig.mac	Apple Macintosh, Metrowerks CodeWarrior
-mak*jpeg.st	jconfig.st	Atari ST/STE/TT, Pure C or Turbo C
-makefile.bcc	jconfig.bcc	MS-DOS or OS/2, Borland C
-makefile.dj	jconfig.dj	MS-DOS, DJGPP (Delorie's port of GNU C)
-makefile.mc6	jconfig.mc6	MS-DOS, Microsoft C (16-bit only)
-makefile.wat	jconfig.wat	MS-DOS, OS/2, or Windows NT, Watcom C
-makefile.vc	jconfig.vc	Windows NT/95, MS Visual C++
-make*.vc6	jconfig.vc	Windows NT/95, MS Visual C++ 6
-make*.v10	jconfig.vc	Windows NT/95, MS Visual C++ 2010 (v10)
-makefile.mms	jconfig.vms	Digital VMS, with MMS software
-makefile.vms	jconfig.vms	Digital VMS, without MMS software
-
-Copy the proper jconfig file to jconfig.h and the makefile to Makefile (or
-whatever your system uses as the standard makefile name).  For more info see
-the appropriate system-specific hints section near the end of this file.
-
-
-Configuring the software by hand
---------------------------------
-
-First, generate a jconfig.h file.  If you are moderately familiar with C,
-the comments in jconfig.txt should be enough information to do this; just
-copy jconfig.txt to jconfig.h and edit it appropriately.  Otherwise, you may
-prefer to use the ckconfig.c program.  You will need to compile and execute
-ckconfig.c by hand --- we hope you know at least enough to do that.
-ckconfig.c may not compile the first try (in fact, the whole idea is for it
-to fail if anything is going to).  If you get compile errors, fix them by
-editing ckconfig.c according to the directions given in ckconfig.c.  Once
-you get it to run, it will write a suitable jconfig.h file, and will also
-print out some advice about which makefile to use.
-
-You may also want to look at the canned jconfig files, if there is one for a
-system similar to yours.
-
-Second, select a makefile and copy it to Makefile (or whatever your system
-uses as the standard makefile name).  The most generic makefiles we provide
-are
-	makefile.ansi:	if your C compiler supports function prototypes
-	makefile.unix:	if not.
-(You have function prototypes if ckconfig.c put "#define HAVE_PROTOTYPES"
-in jconfig.h.)  You may want to start from one of the other makefiles if
-there is one for a system similar to yours.
-
-Look over the selected Makefile and adjust options as needed.  In particular
-you may want to change the CC and CFLAGS definitions.  For instance, if you
-are using GCC, set CC=gcc.  If you had to use any compiler switches to get
-ckconfig.c to work, make sure the same switches are in CFLAGS.
-
-If you are on a system that doesn't use makefiles, you'll need to set up
-project files (or whatever you do use) to compile all the source files and
-link them into executable files cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom.
-See the file lists in any of the makefiles to find out which files go into
-each program.  Note that the provided makefiles all make a "library" file
-libjpeg first, but you don't have to do that if you don't want to; the file
-lists identify which source files are actually needed for compression,
-decompression, or both.  As a last resort, you can make a batch script that
-just compiles everything and links it all together; makefile.vms is an example
-of this (it's for VMS systems that have no make-like utility).
-
-Here are comments about some specific configuration decisions you'll
-need to make:
-
-Command line style
-------------------
-
-These programs can use a Unix-like command line style which supports
-redirection and piping, like this:
-	cjpeg inputfile >outputfile
-	cjpeg <inputfile >outputfile
-	source program | cjpeg >outputfile
-The simpler "two file" command line style is just
-	cjpeg inputfile outputfile
-You may prefer the two-file style, particularly if you don't have pipes.
-
-You MUST use two-file style on any system that doesn't cope well with binary
-data fed through stdin/stdout; this is true for some MS-DOS compilers, for
-example.  If you're not on a Unix system, it's safest to assume you need
-two-file style.  (But if your compiler provides either the Posix-standard
-fdopen() library routine or a Microsoft-compatible setmode() routine, you
-can safely use the Unix command line style, by defining USE_FDOPEN or
-USE_SETMODE respectively.)
-
-To use the two-file style, make jconfig.h say "#define TWO_FILE_COMMANDLINE".
-
-Selecting a memory manager
---------------------------
-
-The IJG code is capable of working on images that are too big to fit in main
-memory; data is swapped out to temporary files as necessary.  However, the
-code to do this is rather system-dependent.  We provide five different
-memory managers:
-
-* jmemansi.c	This version uses the ANSI-standard library routine tmpfile(),
-		which not all non-ANSI systems have.  On some systems
-		tmpfile() may put the temporary file in a non-optimal
-		location; if you don't like what it does, use jmemname.c.
-
-* jmemname.c	This version creates named temporary files.  For anything
-		except a Unix machine, you'll need to configure the
-		select_file_name() routine appropriately; see the comments
-		near the head of jmemname.c.  If you use this version, define
-		NEED_SIGNAL_CATCHER in jconfig.h to make sure the temp files
-		are removed if the program is aborted.
-
-* jmemnobs.c	(That stands for No Backing Store :-).)  This will compile on
-		almost any system, but it assumes you have enough main memory
-		or virtual memory to hold the biggest images you work with.
-
-* jmemdos.c	This should be used with most 16-bit MS-DOS compilers.
-		See the system-specific notes about MS-DOS for more info.
-		IMPORTANT: if you use this, define USE_MSDOS_MEMMGR in
-		jconfig.h, and include the assembly file jmemdosa.asm in the
-		programs.  The supplied makefiles and jconfig files for
-		16-bit MS-DOS compilers already do both.
-
-* jmemmac.c	Custom version for Apple Macintosh; see the system-specific
-		notes for Macintosh for more info.
-
-To use a particular memory manager, change the SYSDEPMEM variable in your
-makefile to equal the corresponding object file name (for example, jmemansi.o
-or jmemansi.obj for jmemansi.c).
-
-If you have plenty of (real or virtual) main memory, just use jmemnobs.c.
-"Plenty" means about ten bytes for every pixel in the largest images
-you plan to process, so a lot of systems don't meet this criterion.
-If yours doesn't, try jmemansi.c first.  If that doesn't compile, you'll have
-to use jmemname.c; be sure to adjust select_file_name() for local conditions.
-You may also need to change unlink() to remove() in close_backing_store().
-
-Except with jmemnobs.c or jmemmac.c, you need to adjust the DEFAULT_MAX_MEM
-setting to a reasonable value for your system (either by adding a #define for
-DEFAULT_MAX_MEM to jconfig.h, or by adding a -D switch to the Makefile).
-This value limits the amount of data space the program will attempt to
-allocate.  Code and static data space isn't counted, so the actual memory
-needs for cjpeg or djpeg are typically 100 to 150Kb more than the max-memory
-setting.  Larger max-memory settings reduce the amount of I/O needed to
-process a large image, but too large a value can result in "insufficient
-memory" failures.  On most Unix machines (and other systems with virtual
-memory), just set DEFAULT_MAX_MEM to several million and forget it.  At the
-other end of the spectrum, for MS-DOS machines you probably can't go much
-above 300K to 400K.  (On MS-DOS the value refers to conventional memory only.
-Extended/expanded memory is handled separately by jmemdos.c.)
-
-
-BUILDING THE SOFTWARE
-=====================
-
-Now you should be able to compile the software.  Just say "make" (or
-whatever's necessary to start the compilation).  Have a cup of coffee.
-
-Here are some things that could go wrong:
-
-If your compiler complains about undefined structures, you should be able to
-shut it up by putting "#define INCOMPLETE_TYPES_BROKEN" in jconfig.h.
-
-If you have trouble with missing system include files or inclusion of the
-wrong ones, read jinclude.h.  This shouldn't happen if you used configure
-or ckconfig.c to set up jconfig.h.
-
-There are a fair number of routines that do not use all of their parameters;
-some compilers will issue warnings about this, which you can ignore.  There
-are also a few configuration checks that may give "unreachable code" warnings.
-Any other warning deserves investigation.
-
-If you don't have a getenv() library routine, define NO_GETENV.
-
-Also see the system-specific hints, below.
-
-
-TESTING THE SOFTWARE
-====================
-
-As a quick test of functionality we've included a small sample image in
-several forms:
-	testorig.jpg	Starting point for the djpeg tests.
-	testimg.ppm	The output of djpeg testorig.jpg
-	testimg.bmp	The output of djpeg -bmp -colors 256 testorig.jpg
-	testimg.jpg	The output of cjpeg testimg.ppm
-	testprog.jpg	Progressive-mode equivalent of testorig.jpg.
-	testimgp.jpg	The output of cjpeg -progressive -optimize testimg.ppm
-(The first- and second-generation .jpg files aren't identical since the
-default compression parameters are lossy.)  If you can generate duplicates
-of the testimg* files then you probably have working programs.
-
-With most of the makefiles, "make test" will perform the necessary
-comparisons.
-
-If you're using a makefile that doesn't provide the test option, run djpeg
-and cjpeg by hand and compare the output files to testimg* with whatever
-binary file comparison tool you have.  The files should be bit-for-bit
-identical.
-
-If the programs complain "MAX_ALLOC_CHUNK is wrong, please fix", then you
-need to reduce MAX_ALLOC_CHUNK to a value that fits in type size_t.
-Try adding "#define MAX_ALLOC_CHUNK 65520L" to jconfig.h.  A less likely
-configuration error is "ALIGN_TYPE is wrong, please fix": defining ALIGN_TYPE
-as long should take care of that one.
-
-If the cjpeg test run fails with "Missing Huffman code table entry", it's a
-good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED.  Go back to the
-configuration step and run ckconfig.c.  (This is a good plan for any other
-test failure, too.)
-
-If you are using Unix (one-file) command line style on a non-Unix system,
-it's a good idea to check that binary I/O through stdin/stdout actually
-works.  You should get the same results from "djpeg <testorig.jpg >out.ppm"
-as from "djpeg -outfile out.ppm testorig.jpg".  Note that the makefiles all
-use the latter style and therefore do not exercise stdin/stdout!  If this
-check fails, try recompiling with USE_SETMODE or USE_FDOPEN defined.
-If it still doesn't work, better use two-file style.
-
-If you chose a memory manager other than jmemnobs.c, you should test that
-temporary-file usage works.  Try "djpeg -bmp -colors 256 -max 0 testorig.jpg"
-and make sure its output matches testimg.bmp.  If you have any really large
-images handy, try compressing them with -optimize and/or decompressing with
--colors 256 to make sure your DEFAULT_MAX_MEM setting is not too large.
-
-NOTE: this is far from an exhaustive test of the JPEG software; some modules,
-such as 1-pass color quantization, are not exercised at all.  It's just a
-quick test to give you some confidence that you haven't missed something
-major.
-
-
-INSTALLING THE SOFTWARE
-=======================
-
-Once you're done with the above steps, you can install the software by
-copying the executable files (cjpeg, djpeg, jpegtran, rdjpgcom, and wrjpgcom)
-to wherever you normally install programs.  On Unix systems, you'll also want
-to put the man pages (cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1)
-in the man-page directory.  The pre-fab makefiles don't support this step
-since there's such a wide variety of installation procedures on different
-systems.
-
-If you generated a Makefile with the "configure" script, you can just say
-	make install
-to install the programs and their man pages into the standard places.
-(You'll probably need to be root to do this.)  We recommend first saying
-	make -n install
-to see where configure thought the files should go.  You may need to edit
-the Makefile, particularly if your system's conventions for man page
-filenames don't match what configure expects.
-
-If you want to install the IJG library itself, for use in compiling other
-programs besides ours, then you need to put the four include files
-	jpeglib.h jerror.h jconfig.h jmorecfg.h
-into your include-file directory, and put the library file libjpeg.a
-(extension may vary depending on system) wherever library files go.
-If you generated a Makefile with "configure", it will do what it thinks
-is the right thing if you say
-	make install-lib
-
-
-OPTIONAL STUFF
-==============
-
-Progress monitor:
-
-If you like, you can #define PROGRESS_REPORT (in jconfig.h) to enable display
-of percent-done progress reports.  The routine provided in cdjpeg.c merely
-prints percentages to stderr, but you can customize it to do something
-fancier.
-
-Utah RLE file format support:
-
-We distribute the software with support for RLE image files (Utah Raster
-Toolkit format) disabled, because the RLE support won't compile without the
-Utah library.  If you have URT version 3.1 or later, you can enable RLE
-support as follows:
-	1.  #define RLE_SUPPORTED in jconfig.h.
-	2.  Add a -I option to CFLAGS in the Makefile for the directory
-	    containing the URT .h files (typically the "include"
-	    subdirectory of the URT distribution).
-	3.  Add -L... -lrle to LDLIBS in the Makefile, where ... specifies
-	    the directory containing the URT "librle.a" file (typically the
-	    "lib" subdirectory of the URT distribution).
-
-Support for 9-bit to 12-bit deep pixel data:
-
-The IJG code currently allows 8, 9, 10, 11, or 12 bits sample data precision.
-(For color, this means 8 to 12 bits per channel, of course.)  If you need to
-work with deeper than 8-bit data, you can compile the IJG code for 9-bit to
-12-bit operation.
-To do so:
-  1. In jmorecfg.h, define BITS_IN_JSAMPLE as 9, 10, 11, or 12 rather than 8.
-  2. In jconfig.h, undefine BMP_SUPPORTED, RLE_SUPPORTED, and TARGA_SUPPORTED,
-     because the code for those formats doesn't handle deeper than 8-bit data
-     and won't even compile.  (The PPM code does work, as explained below.
-     The GIF code works too; it scales 8-bit GIF data to and from 12-bit
-     depth automatically.)
-  3. Compile.  Don't expect "make test" to pass, since the supplied test
-     files are for 8-bit data.
-
-Currently, 9-bit to 12-bit support does not work on 16-bit-int machines.
-
-Run-time selection and conversion of data precision are currently not
-supported and may be added later.
-Exception:  The transcoding part (jpegtran) supports all settings in a
-single instance, since it operates on the level of DCT coefficients and
-not sample values.
-
-The PPM reader (rdppm.c) can read deeper than 8-bit data from either
-text-format or binary-format PPM and PGM files.  Binary-format PPM/PGM files
-which have a maxval greater than 255 are assumed to use 2 bytes per sample,
-MSB first (big-endian order).  As of early 1995, 2-byte binary format is not
-officially supported by the PBMPLUS library, but it is expected that a
-future release of PBMPLUS will support it.  Note that the PPM reader will
-read files of any maxval regardless of the BITS_IN_JSAMPLE setting; incoming
-data is automatically rescaled to maxval=MAXJSAMPLE as appropriate for the
-cjpeg bit depth.
-
-The PPM writer (wrppm.c) will normally write 2-byte binary PPM or PGM
-format, maxval=MAXJSAMPLE, when compiled with BITS_IN_JSAMPLE>8.  Since this
-format is not yet widely supported, you can disable it by compiling wrppm.c
-with PPM_NORAWWORD defined; then the data is scaled down to 8 bits to make a
-standard 1-byte/sample PPM or PGM file.  (Yes, this means still another copy
-of djpeg to keep around.  But hopefully you won't need it for very long.
-Poskanzer's supposed to get that new PBMPLUS release out Real Soon Now.)
-
-Of course, if you are working with 9-bit to 12-bit data, you probably have
-it stored in some other, nonstandard format.  In that case you'll probably
-want to write your own I/O modules to read and write your format.
-
-Note:
-The standard Huffman tables are only valid for 8-bit data precision.  If
-you selected more than 8-bit data precision, cjpeg uses arithmetic coding
-by default.  The Huffman encoder normally uses entropy optimization to
-compute usable tables for higher precision.  Otherwise, you'll have to
-supply different default Huffman tables.
-
-Removing code:
-
-If you need to make a smaller version of the JPEG software, some optional
-functions can be removed at compile time.  See the xxx_SUPPORTED #defines in
-jconfig.h and jmorecfg.h.  If at all possible, we recommend that you leave in
-decoder support for all valid JPEG files, to ensure that you can read anyone's
-output.  Taking out support for image file formats that you don't use is the
-most painless way to make the programs smaller.  Another possibility is to
-remove some of the DCT methods: in particular, the "IFAST" method may not be
-enough faster than the others to be worth keeping on your machine.  (If you
-do remove ISLOW or IFAST, be sure to redefine JDCT_DEFAULT or JDCT_FASTEST
-to a supported method, by adding a #define in jconfig.h.)
-
-
-OPTIMIZATION
-============
-
-Unless you own a Cray, you'll probably be interested in making the JPEG
-software go as fast as possible.  This section covers some machine-dependent
-optimizations you may want to try.  We suggest that before trying any of
-this, you first get the basic installation to pass the self-test step.
-Repeat the self-test after any optimization to make sure that you haven't
-broken anything.
-
-The integer DCT routines perform a lot of multiplications.  These
-multiplications must yield 32-bit results, but none of their input values
-are more than 16 bits wide.  On many machines, notably the 680x0 and 80x86
-CPUs, a 16x16=>32 bit multiply instruction is faster than a full 32x32=>32
-bit multiply.  Unfortunately there is no portable way to specify such a
-multiplication in C, but some compilers can generate one when you use the
-right combination of casts.  See the MULTIPLYxxx macro definitions in
-jdct.h.  If your compiler makes "int" be 32 bits and "short" be 16 bits,
-defining SHORTxSHORT_32 is fairly likely to work.  When experimenting with
-alternate definitions, be sure to test not only whether the code still works
-(use the self-test), but also whether it is actually faster --- on some
-compilers, alternate definitions may compute the right answer, yet be slower
-than the default.  Timing cjpeg on a large PGM (grayscale) input file is the
-best way to check this, as the DCT will be the largest fraction of the runtime
-in that mode.  (Note: some of the distributed compiler-specific jconfig files
-already contain #define switches to select appropriate MULTIPLYxxx
-definitions.)
-
-If your machine has sufficiently fast floating point hardware, you may find
-that the float DCT method is faster than the integer DCT methods, even
-after tweaking the integer multiply macros.  In that case you may want to
-make the float DCT be the default method.  (The only objection to this is
-that float DCT results may vary slightly across machines.)  To do that, add
-"#define JDCT_DEFAULT JDCT_FLOAT" to jconfig.h.  Even if you don't change
-the default, you should redefine JDCT_FASTEST, which is the method selected
-by djpeg's -fast switch.  Don't forget to update the documentation files
-(usage.txt and/or cjpeg.1, djpeg.1) to agree with what you've done.
-
-If access to "short" arrays is slow on your machine, it may be a win to
-define type JCOEF as int rather than short.  This will cost a good deal of
-memory though, particularly in some multi-pass modes, so don't do it unless
-you have memory to burn and short is REALLY slow.
-
-If your compiler can compile function calls in-line, make sure the INLINE
-macro in jmorecfg.h is defined as the keyword that marks a function
-inline-able.  Some compilers have a switch that tells the compiler to inline
-any function it thinks is profitable (e.g., -finline-functions for gcc).
-Enabling such a switch is likely to make the compiled code bigger but faster.
-
-In general, it's worth trying the maximum optimization level of your compiler,
-and experimenting with any optional optimizations such as loop unrolling.
-(Unfortunately, far too many compilers have optimizer bugs ... be prepared to
-back off if the code fails self-test.)  If you do any experimentation along
-these lines, please report the optimal settings to jpeg-info@jpegclub.org so
-we can mention them in future releases.  Be sure to specify your machine and
-compiler version.
-
-
-HINTS FOR SPECIFIC SYSTEMS
-==========================
-
-We welcome reports on changes needed for systems not mentioned here.  Submit
-'em to jpeg-info@jpegclub.org.  Also, if configure or ckconfig.c is wrong
-about how to configure the JPEG software for your system, please let us know.
-
-
-Acorn RISC OS:
-
-(Thanks to Simon Middleton for these hints on compiling with Desktop C.)
-After renaming the files according to Acorn conventions, take a copy of
-makefile.ansi, change all occurrences of 'libjpeg.a' to 'libjpeg.o' and
-change these definitions as indicated:
-
-CFLAGS= -throwback -IC: -Wn
-LDLIBS=C:o.Stubs
-SYSDEPMEM=jmemansi.o
-LN=Link
-AR=LibFile -c -o
-
-Also add a new line '.c.o:; $(cc) $< $(cflags) -c -o $@'.  Remove the
-lines '$(RM) libjpeg.o' and '$(AR2) libjpeg.o' and the 'jconfig.h'
-dependency section.
-
-Copy jconfig.txt to jconfig.h.  Edit jconfig.h to define TWO_FILE_COMMANDLINE
-and CHAR_IS_UNSIGNED.
-
-Run the makefile using !AMU not !Make.  If you want to use the 'clean' and
-'test' makefile entries then you will have to fiddle with the syntax a bit
-and rename the test files.
-
-
-Amiga:
-
-SAS C 6.50 reportedly is too buggy to compile the IJG code properly.
-A patch to update to 6.51 is available from SAS or AmiNet FTP sites.
-
-The supplied config files are set up to use jmemname.c as the memory
-manager, with temporary files being created on the device named by
-"JPEGTMP:".
-
-
-Atari ST/STE/TT:
-
-Copy the project files makcjpeg.st, makdjpeg.st, maktjpeg.st, and makljpeg.st
-to cjpeg.prj, djpeg.prj, jpegtran.prj, and libjpeg.prj respectively.  The
-project files should work as-is with Pure C.  For Turbo C, change library
-filenames "pc..." to "tc..." in each project file.  Note that libjpeg.prj
-selects jmemansi.c as the recommended memory manager.  You'll probably want to
-adjust the DEFAULT_MAX_MEM setting --- you want it to be a couple hundred K
-less than your normal free memory.  Put "#define DEFAULT_MAX_MEM nnnn" into
-jconfig.h to do this.
-
-To use the 68881/68882 coprocessor for the floating point DCT, add the
-compiler option "-8" to the project files and replace pcfltlib.lib with
-pc881lib.lib in cjpeg.prj and djpeg.prj.  Or if you don't have a
-coprocessor, you may prefer to remove the float DCT code by undefining
-DCT_FLOAT_SUPPORTED in jmorecfg.h (since without a coprocessor, the float
-code will be too slow to be useful).  In that case, you can delete
-pcfltlib.lib from the project files.
-
-Note that you must make libjpeg.lib before making cjpeg.ttp, djpeg.ttp,
-or jpegtran.ttp.  You'll have to perform the self-test by hand.
-
-We haven't bothered to include project files for rdjpgcom and wrjpgcom.
-Those source files should just be compiled by themselves; they don't
-depend on the JPEG library.  You can use the default.prj project file
-of the Pure C distribution to make the programs.
-
-There is a bug in some older versions of the Turbo C library which causes the
-space used by temporary files created with "tmpfile()" not to be freed after
-an abnormal program exit.  If you check your disk afterwards, you will find
-cluster chains that are allocated but not used by a file.  This should not
-happen in cjpeg/djpeg/jpegtran, since we enable a signal catcher to explicitly
-close temp files before exiting.  But if you use the JPEG library with your
-own code, be sure to supply a signal catcher, or else use a different
-system-dependent memory manager.
-
-
-Cray:
-
-Should you be so fortunate as to be running JPEG on a Cray YMP, there is a
-compiler bug in old versions of Cray's Standard C (prior to 3.1).  If you
-still have an old compiler, you'll need to insert a line reading
-"#pragma novector" just before the loop	
-    for (i = 1; i <= (int) htbl->bits[l]; i++)
-      huffsize[p++] = (char) l;
-in fix_huff_tbl (in V5beta1, line 204 of jchuff.c and line 176 of jdhuff.c).
-[This bug may or may not still occur with the current IJG code, but it's
-probably a dead issue anyway...]
-
-
-HP-UX:
-
-If you have HP-UX 7.05 or later with the "software development" C compiler,
-you should run the compiler in ANSI mode.  If using the configure script,
-say
-	./configure CC='cc -Aa'
-(or -Ae if you prefer).  If configuring by hand, use makefile.ansi and add
-"-Aa" to the CFLAGS line in the makefile.
-
-If you have a pre-7.05 system, or if you are using the non-ANSI C compiler
-delivered with a minimum HP-UX system, then you must use makefile.unix
-(and do NOT add -Aa); or just run configure without the CC option.
-
-On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior
-to A.08.07.  If you get complaints about "not a typedef name", you'll have to
-use makefile.unix, or run configure without the CC option.
-
-
-Macintosh, generic comments:
-
-The supplied user-interface files (cjpeg.c, djpeg.c, etc) are set up to
-provide a Unix-style command line interface.  You can use this interface on
-the Mac by means of the ccommand() library routine provided by Metrowerks
-CodeWarrior or Think C.  This is only appropriate for testing the library,
-however; to make a user-friendly equivalent of cjpeg/djpeg you'd really want
-to develop a Mac-style user interface.  There isn't a complete example
-available at the moment, but there are some helpful starting points:
-1. Sam Bushell's free "To JPEG" applet provides drag-and-drop conversion to
-JPEG under System 7 and later.  This only illustrates how to use the
-compression half of the library, but it does a very nice job of that part.
-The CodeWarrior source code is available from http://www.pobox.com/~jsam.
-2. Jim Brunner prepared a Mac-style user interface for both compression and
-decompression.  Unfortunately, it hasn't been updated since IJG v4, and
-the library's API has changed considerably since then.  Still it may be of
-some help, particularly as a guide to compiling the IJG code under Think C.
-Jim's code is available from the Info-Mac archives, at sumex-aim.stanford.edu
-or mirrors thereof; see file /info-mac/dev/src/jpeg-convert-c.hqx.
-
-jmemmac.c is the recommended memory manager back end for Macintosh.  It uses
-NewPtr/DisposePtr instead of malloc/free, and has a Mac-specific
-implementation of jpeg_mem_available().  It also creates temporary files that
-follow Mac conventions.  (That part of the code relies on System-7-or-later OS
-functions.  See the comments in jmemmac.c if you need to run it on System 6.)
-NOTE that USE_MAC_MEMMGR must be defined in jconfig.h to use jmemmac.c.
-
-You can also use jmemnobs.c, if you don't care about handling images larger
-than available memory.  If you use any memory manager back end other than
-jmemmac.c, we recommend replacing "malloc" and "free" by "NewPtr" and
-"DisposePtr", because Mac C libraries often have peculiar implementations of
-malloc/free.  (For instance, free() may not return the freed space to the
-Mac Memory Manager.  This is undesirable for the IJG code because jmemmgr.c
-already clumps space requests.)
-
-
-Macintosh, Metrowerks CodeWarrior:
-
-The Unix-command-line-style interface can be used by defining USE_CCOMMAND.
-You'll also need to define TWO_FILE_COMMANDLINE to avoid stdin/stdout.
-This means that when using the cjpeg/djpeg programs, you'll have to type the
-input and output file names in the "Arguments" text-edit box, rather than
-using the file radio buttons.  (Perhaps USE_FDOPEN or USE_SETMODE would
-eliminate the problem, but I haven't heard from anyone who's tried it.)
-
-On 680x0 Macs, Metrowerks defines type "double" as a 10-byte IEEE extended
-float.  jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power
-of 2.  Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint.
-
-The supplied configuration file jconfig.mac can be used for your jconfig.h;
-it includes all the recommended symbol definitions.  If you have AppleScript
-installed, you can run the supplied script makeproj.mac to create CodeWarrior
-project files for the library and the testbed applications, then build the
-library and applications.  (Thanks to Dan Sears and Don Agro for this nifty
-hack, which saves us from trying to maintain CodeWarrior project files as part
-of the IJG distribution...)
-
-
-Macintosh, Think C:
-
-The documentation in Jim Brunner's "JPEG Convert" source code (see above)
-includes detailed build instructions for Think C; it's probably somewhat
-out of date for the current release, but may be helpful.
-
-If you want to build the minimal command line version, proceed as follows.
-You'll have to prepare project files for the programs; we don't include any
-in the distribution since they are not text files.  Use the file lists in
-any of the supplied makefiles as a guide.  Also add the ANSI and Unix C
-libraries in a separate segment.  You may need to divide the JPEG files into
-more than one segment; we recommend dividing compression and decompression
-modules.  Define USE_CCOMMAND in jconfig.h so that the ccommand() routine is
-called.  You must also define TWO_FILE_COMMANDLINE because stdin/stdout
-don't handle binary data correctly.
-
-On 680x0 Macs, Think C defines type "double" as a 12-byte IEEE extended float.
-jmemmgr.c won't like this: it wants sizeof(ALIGN_TYPE) to be a power of 2.
-Add "#define ALIGN_TYPE long" to jconfig.h to eliminate the complaint.
-
-jconfig.mac should work as a jconfig.h configuration file for Think C,
-but the makeproj.mac AppleScript script is specific to CodeWarrior.  Sorry.
-
-
-MIPS R3000:
-
-MIPS's cc version 1.31 has a rather nasty optimization bug.  Don't use -O
-if you have that compiler version.  (Use "cc -V" to check the version.)
-Note that the R3000 chip is found in workstations from DEC and others.
-
-
-MS-DOS, generic comments for 16-bit compilers:
-
-The IJG code is designed to work well in 80x86 "small" or "medium" memory
-models (i.e., data pointers are 16 bits unless explicitly declared "far";
-code pointers can be either size).  You may be able to use small model to
-compile cjpeg or djpeg by itself, but you will probably have to use medium
-model for any larger application.  This won't make much difference in
-performance.  You *will* take a noticeable performance hit if you use a
-large-data memory model, and you should avoid "huge" model if at all
-possible.  Be sure that NEED_FAR_POINTERS is defined in jconfig.h if you use
-a small-data memory model; be sure it is NOT defined if you use a large-data
-model.  (The supplied makefiles and jconfig files for Borland and Microsoft C
-compile in medium model and define NEED_FAR_POINTERS.)
-
-The DOS-specific memory manager, jmemdos.c, should be used if possible.
-It needs some assembly-code routines which are in jmemdosa.asm; make sure
-your makefile assembles that file and includes it in the library.  If you
-don't have a suitable assembler, you can get pre-assembled object files for
-jmemdosa by FTP from ftp.uu.net:/graphics/jpeg/jdosaobj.zip.  (DOS-oriented
-distributions of the IJG source code often include these object files.)
-
-When using jmemdos.c, jconfig.h must define USE_MSDOS_MEMMGR and must set
-MAX_ALLOC_CHUNK to less than 64K (65520L is a typical value).  If your
-C library's far-heap malloc() can't allocate blocks that large, reduce
-MAX_ALLOC_CHUNK to whatever it can handle.
-
-If you can't use jmemdos.c for some reason --- for example, because you
-don't have an assembler to assemble jmemdosa.asm --- you'll have to fall
-back to jmemansi.c or jmemname.c.  You'll probably still need to set
-MAX_ALLOC_CHUNK in jconfig.h, because most DOS C libraries won't malloc()
-more than 64K at a time.  IMPORTANT: if you use jmemansi.c or jmemname.c,
-you will have to compile in a large-data memory model in order to get the
-right stdio library.  Too bad.
-
-wrjpgcom needs to be compiled in large model, because it malloc()s a 64KB
-work area to hold the comment text.  If your C library's malloc can't
-handle that, reduce MAX_COM_LENGTH as necessary in wrjpgcom.c.
-
-Most MS-DOS compilers treat stdin/stdout as text files, so you must use
-two-file command line style.  But if your compiler has either fdopen() or
-setmode(), you can use one-file style if you like.  To do this, define
-USE_SETMODE or USE_FDOPEN so that stdin/stdout will be set to binary mode.
-(USE_SETMODE seems to work with more DOS compilers than USE_FDOPEN.)  You
-should test that I/O through stdin/stdout produces the same results as I/O
-to explicitly named files... the "make test" procedures in the supplied
-makefiles do NOT use stdin/stdout.
-
-
-MS-DOS, generic comments for 32-bit compilers:
-
-None of the above comments about memory models apply if you are using a
-32-bit flat-memory-space environment, such as DJGPP or Watcom C.  (And you
-should use one if you have it, as performance will be much better than
-8086-compatible code!)  For flat-memory-space compilers, do NOT define
-NEED_FAR_POINTERS, and do NOT use jmemdos.c.  Use jmemnobs.c if the
-environment supplies adequate virtual memory, otherwise use jmemansi.c or
-jmemname.c.
-
-You'll still need to be careful about binary I/O through stdin/stdout.
-See the last paragraph of the previous section.
-
-
-MS-DOS, Borland C:
-
-Be sure to convert all the source files to DOS text format (CR/LF newlines).
-Although Borland C will often work OK with unmodified Unix (LF newlines)
-source files, sometimes it will give bogus compile errors.
-"Illegal character '#'" is the most common such error.  (This is true with
-Borland C 3.1, but perhaps is fixed in newer releases.)
-
-If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE.
-jconfig.bcc already includes #define USE_SETMODE to make this work.
-(fdopen does not work correctly.)
-
-
-MS-DOS, Microsoft C:
-
-makefile.mc6 works with Microsoft C, DOS Visual C++, etc.  It should only
-be used if you want to build a 16-bit (small or medium memory model) program.
-
-If you want one-file command line style, just undefine TWO_FILE_COMMANDLINE.
-jconfig.mc6 already includes #define USE_SETMODE to make this work.
-(fdopen does not work correctly.)
-
-Note that this makefile assumes that the working copy of itself is called
-"makefile".  If you want to call it something else, say "makefile.mak",
-be sure to adjust the dependency line that reads "$(RFILE) : makefile".
-Otherwise the make will fail because it doesn't know how to create "makefile".
-Worse, some releases of Microsoft's make utilities give an incorrect error
-message in this situation.
-
-Old versions of MS C fail with an "out of macro expansion space" error
-because they can't cope with the macro TRACEMS8 (defined in jerror.h).
-If this happens to you, the easiest solution is to change TRACEMS8 to
-expand to nothing.  You'll lose the ability to dump out JPEG coefficient
-tables with djpeg -debug -debug, but at least you can compile.
-
-Original MS C 6.0 is very buggy; it compiles incorrect code unless you turn
-off optimization entirely (remove -O from CFLAGS).  6.00A is better, but it
-still generates bad code if you enable loop optimizations (-Ol or -Ox).
-
-MS C 8.0 crashes when compiling jquant1.c with optimization switch /Oo ...
-which is on by default.  To work around this bug, compile that one file
-with /Oo-.
-
-
-Microsoft Windows (all versions), generic comments:
-
-Some Windows system include files define typedef boolean as "unsigned char".
-The IJG code also defines typedef boolean, but we make it an "enum" by default.
-This doesn't affect the IJG programs because we don't import those Windows
-include files.  But if you use the JPEG library in your own program, and some
-of your program's files import one definition of boolean while some import the
-other, you can get all sorts of mysterious problems.  A good preventive step
-is to make the IJG library use "unsigned char" for boolean.  To do that,
-add something like this to your jconfig.h file:
-	/* Define "boolean" as unsigned char, not enum, per Windows custom */
-	#ifndef __RPCNDR_H__	/* don't conflict if rpcndr.h already read */
-	typedef unsigned char boolean;
-	#endif
-	#ifndef FALSE		/* in case these macros already exist */
-	#define FALSE	0	/* values of boolean */
-	#endif
-	#ifndef TRUE
-	#define TRUE	1
-	#endif
-	#define HAVE_BOOLEAN	/* prevent jmorecfg.h from redefining it */
-(This is already in jconfig.vc, by the way.)
-
-windef.h contains the declarations
-	#define far
-	#define FAR far
-Since jmorecfg.h tries to define FAR as empty, you may get a compiler
-warning if you include both jpeglib.h and windef.h (which windows.h
-includes).  To suppress the warning, you can put "#ifndef FAR"/"#endif"
-around the line "#define FAR" in jmorecfg.h.
-(Something like this is already in jmorecfg.h, by the way.)
-
-When using the library in a Windows application, you will almost certainly
-want to modify or replace the error handler module jerror.c, since our
-default error handler does a couple of inappropriate things:
-  1. it tries to write error and warning messages on stderr;
-  2. in event of a fatal error, it exits by calling exit().
-
-A simple stopgap solution for problem 1 is to replace the line
-	fprintf(stderr, "%s\n", buffer);
-(in output_message in jerror.c) with
-	MessageBox(GetActiveWindow(),buffer,"JPEG Error",MB_OK|MB_ICONERROR);
-It's highly recommended that you at least do that much, since otherwise
-error messages will disappear into nowhere.  (Beginning with IJG v6b, this
-code is already present in jerror.c; just define USE_WINDOWS_MESSAGEBOX in
-jconfig.h to enable it.)
-
-The proper solution for problem 2 is to return control to your calling
-application after a library error.  This can be done with the setjmp/longjmp
-technique discussed in libjpeg.txt and illustrated in example.c.  (NOTE:
-some older Windows C compilers provide versions of setjmp/longjmp that
-don't actually work under Windows.  You may need to use the Windows system
-functions Catch and Throw instead.)
-
-The recommended memory manager under Windows is jmemnobs.c; in other words,
-let Windows do any virtual memory management needed.  You should NOT use
-jmemdos.c nor jmemdosa.asm under Windows.
-
-For Windows 3.1, we recommend compiling in medium or large memory model;
-for newer Windows versions, use a 32-bit flat memory model.  (See the MS-DOS
-sections above for more info about memory models.)  In the 16-bit memory
-models only, you'll need to put
-	#define MAX_ALLOC_CHUNK 65520L	/* Maximum request to malloc() */
-into jconfig.h to limit allocation chunks to 64Kb.  (Without that, you'd
-have to use huge memory model, which slows things down unnecessarily.)
-jmemnobs.c works without modification in large or flat memory models, but to
-use medium model, you need to modify its jpeg_get_large and jpeg_free_large
-routines to allocate far memory.  In any case, you might like to replace
-its calls to malloc and free with direct calls on Windows memory allocation
-functions.
-
-You may also want to modify jdatasrc.c and jdatadst.c to use Windows file
-operations rather than fread/fwrite.  This is only necessary if your C
-compiler doesn't provide a competent implementation of C stdio functions.
-
-You might want to tweak the RGB_xxx macros in jmorecfg.h so that the library
-will accept or deliver color pixels in BGR sample order, not RGB; BGR order
-is usually more convenient under Windows.  Note that this change will break
-the sample applications cjpeg/djpeg, but the library itself works fine.
-
-
-Many people want to convert the IJG library into a DLL.  This is reasonably
-straightforward, but watch out for the following:
-
-  1. Don't try to compile as a DLL in small or medium memory model; use
-large model, or even better, 32-bit flat model.  Many places in the IJG code
-assume the address of a local variable is an ordinary (not FAR) pointer;
-that isn't true in a medium-model DLL.
-
-  2. Microsoft C cannot pass file pointers between applications and DLLs.
-(See Microsoft Knowledge Base, PSS ID Number Q50336.)  So jdatasrc.c and
-jdatadst.c don't work if you open a file in your application and then pass
-the pointer to the DLL.  One workaround is to make jdatasrc.c/jdatadst.c
-part of your main application rather than part of the DLL.
-
-  3. You'll probably need to modify the macros GLOBAL() and EXTERN() to
-attach suitable linkage keywords to the exported routine names.  Similarly,
-you'll want to modify METHODDEF() and JMETHOD() to ensure function pointers
-are declared in a way that lets application routines be called back through
-the function pointers.  These macros are in jmorecfg.h.  Typical definitions
-for a 16-bit DLL are:
-	#define GLOBAL(type)		type _far _pascal _loadds _export
-	#define EXTERN(type)		extern type _far _pascal _loadds
-	#define METHODDEF(type)		static type _far _pascal
-	#define JMETHOD(type,methodname,arglist)  \
-		type (_far _pascal *methodname) arglist
-For a 32-bit DLL you may want something like
-	#define GLOBAL(type)		__declspec(dllexport) type
-	#define EXTERN(type)		extern __declspec(dllexport) type
-Although not all the GLOBAL routines are actually intended to be called by
-the application, the performance cost of making them all DLL entry points is
-negligible.
-
-The unmodified IJG library presents a very C-specific application interface,
-so the resulting DLL is only usable from C or C++ applications.  There has
-been some talk of writing wrapper code that would present a simpler interface
-usable from other languages, such as Visual Basic.  This is on our to-do list
-but hasn't been very high priority --- any volunteers out there?
-
-
-Microsoft Windows, Borland C:
-
-The provided jconfig.bcc should work OK in a 32-bit Windows environment,
-but you'll need to tweak it in a 16-bit environment (you'd need to define
-NEED_FAR_POINTERS and MAX_ALLOC_CHUNK).  Beware that makefile.bcc will need
-alteration if you want to use it for Windows --- in particular, you should
-use jmemnobs.c not jmemdos.c under Windows.
-
-Borland C++ 4.5 fails with an internal compiler error when trying to compile
-jdmerge.c in 32-bit mode.  If enough people complain, perhaps Borland will fix
-it.  In the meantime, the simplest known workaround is to add a redundant
-definition of the variable range_limit in h2v1_merged_upsample(), at the head
-of the block that handles odd image width (about line 268 in v6 jdmerge.c):
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    register JSAMPLE * range_limit = cinfo->sample_range_limit; /* ADD THIS */
-    cb = GETJSAMPLE(*inptr1);
-Pretty bizarre, especially since the very similar routine h2v2_merged_upsample
-doesn't trigger the bug.
-Recent reports suggest that this bug does not occur with "bcc32a" (the
-Pentium-optimized version of the compiler).
-
-Another report from a user of Borland C 4.5 was that incorrect code (leading
-to a color shift in processed images) was produced if any of the following
-optimization switch combinations were used: 
-	-Ot -Og
-	-Ot -Op
-	-Ot -Om
-So try backing off on optimization if you see such a problem.  (Are there
-several different releases all numbered "4.5"??)
-
-
-Microsoft Windows, Microsoft Visual C++:
-
-jconfig.vc should work OK with any Microsoft compiler for a 32-bit memory
-model.  makefile.vc is intended for command-line use.  (If you are using
-the Developer Studio environment, you may prefer the DevStudio project
-files; see below.)
-
-IJG JPEG 7 adds extern "C" to jpeglib.h.  This avoids the need to put
-extern "C" { ... } around #include "jpeglib.h" in your C++ application.
-You can also force VC++ to treat the library as C++ code by renaming
-all the *.c files to *.cpp (and adjusting the makefile to match).
-In this case you also need to define the symbol DONT_USE_EXTERN_C in
-the configuration to prevent jpeglib.h from using extern "C".
-
-
-Microsoft Windows, Microsoft Visual C++ 6 Developer Studio:
-
-We include makefiles that should work as project files in DevStudio 6.0 or
-later.  There is a library makefile that builds the IJG library as a static
-Win32 library, and application makefiles that build the sample applications
-as Win32 console applications.  (Even if you only want the library, we
-recommend building the applications so that you can run the self-test.)
-
-To use:
-1. Open the command prompt, change to the main directory and execute the
-   command line
-	NMAKE /f makefile.vc  setup-vc6
-   This will move jconfig.vc to jconfig.h and makefiles to project files.
-   (Note that the renaming is critical!)
-2. Open the workspace file jpeg.dsw, build the library project.
-   (If you are using DevStudio more recent than 6.0, you'll probably
-   get a message saying that the project files are being updated.)
-3. Open the workspace file apps.dsw, build the application projects.
-4. To perform the self-test, execute the command line
-	NMAKE /f makefile.vc  test-build
-5. Move the application .exe files from `app`\Release to an
-   appropriate location on your path.
-
-
-Microsoft Windows, Microsoft Visual C++ 2010 Developer Studio (v10):
-
-We include makefiles that should work as project files in Visual Studio
-2010 or later.  There is a library makefile that builds the IJG library
-as a static Win32 library, and application makefiles that build the sample
-applications as Win32 console applications.  (Even if you only want the
-library, we recommend building the applications so that you can run the
-self-test.)
-
-To use:
-1. Open the command prompt, change to the main directory and execute the
-   command line
-	NMAKE /f makefile.vc  setup-v10
-   This will move jconfig.vc to jconfig.h and makefiles to project files.
-   (Note that the renaming is critical!)
-2. Open the solution file jpeg.sln, build the library project.
-   (If you are using Visual Studio more recent than 2010 (v10), you'll
-   probably get a message saying that the project files are being updated.)
-3. Open the solution file apps.sln, build the application projects.
-4. To perform the self-test, execute the command line
-	NMAKE /f makefile.vc  test-build
-5. Move the application .exe files from `app`\Release to an
-   appropriate location on your path.
-
-Note:
-There seems to be an optimization bug in the compiler which causes the
-self-test to fail with the color quantization option.
-We have disabled optimization for the file jquant2.c in the library
-project file which causes the self-test to pass properly.
-
-
-OS/2, Borland C++:
-
-Watch out for optimization bugs in older Borland compilers; you may need
-to back off the optimization switch settings.  See the comments in
-makefile.bcc.
-
-
-SGI:
-
-On some SGI systems, you may need to set "AR2= ar -ts" in the Makefile.
-If you are using configure, you can do this by saying
-	./configure RANLIB='ar -ts'
-This change is not needed on all SGIs.  Use it only if the make fails at the
-stage of linking the completed programs.
-
-On the MIPS R4000 architecture (Indy, etc.), the compiler option "-mips2"
-reportedly speeds up the float DCT method substantially, enough to make it
-faster than the default int method (but still slower than the fast int
-method).  If you use -mips2, you may want to alter the default DCT method to
-be float.  To do this, put "#define JDCT_DEFAULT JDCT_FLOAT" in jconfig.h.
-
-
-VMS:
-
-On an Alpha/VMS system with MMS, be sure to use the "/Marco=Alpha=1"
-qualifier with MMS when building the JPEG package.
-
-VAX/VMS v5.5-1 may have problems with the test step of the build procedure
-reporting differences when it compares the original and test images.  If the
-error points to the last block of the files, it is most likely bogus and may
-be safely ignored.  It seems to be because the files are Stream_LF and
-Backup/Compare has difficulty with the (presumably) null padded files.
-This problem was not observed on VAX/VMS v6.1 or AXP/VMS v6.1.
--- a/DoConfig/fltk/jpeg/jaricom.c
+++ /dev/null
@@ -1,153 +1,0 @@
-/*
- * jaricom.c
- *
- * Developed 1997-2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains probability estimation tables for common use in
- * arithmetic entropy encoding and decoding routines.
- *
- * This data represents Table D.3 in the JPEG spec (D.2 in the draft),
- * ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81, and Table 24
- * in the JBIG spec, ISO/IEC IS 11544 and CCITT Recommendation ITU-T T.82.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-/* The following #define specifies the packing of the four components
- * into the compact INT32 representation.
- * Note that this formula must match the actual arithmetic encoder
- * and decoder implementation.  The implementation has to be changed
- * if this formula is changed.
- * The current organization is leaned on Markus Kuhn's JBIG
- * implementation (jbig_tab.c).
- */
-
-#define V(i,a,b,c,d) (((INT32)a << 16) | ((INT32)c << 8) | ((INT32)d << 7) | b)
-
-const INT32 jpeg_aritab[113+1] = {
-/*
- * Index, Qe_Value, Next_Index_LPS, Next_Index_MPS, Switch_MPS
- */
-  V(   0, 0x5a1d,   1,   1, 1 ),
-  V(   1, 0x2586,  14,   2, 0 ),
-  V(   2, 0x1114,  16,   3, 0 ),
-  V(   3, 0x080b,  18,   4, 0 ),
-  V(   4, 0x03d8,  20,   5, 0 ),
-  V(   5, 0x01da,  23,   6, 0 ),
-  V(   6, 0x00e5,  25,   7, 0 ),
-  V(   7, 0x006f,  28,   8, 0 ),
-  V(   8, 0x0036,  30,   9, 0 ),
-  V(   9, 0x001a,  33,  10, 0 ),
-  V(  10, 0x000d,  35,  11, 0 ),
-  V(  11, 0x0006,   9,  12, 0 ),
-  V(  12, 0x0003,  10,  13, 0 ),
-  V(  13, 0x0001,  12,  13, 0 ),
-  V(  14, 0x5a7f,  15,  15, 1 ),
-  V(  15, 0x3f25,  36,  16, 0 ),
-  V(  16, 0x2cf2,  38,  17, 0 ),
-  V(  17, 0x207c,  39,  18, 0 ),
-  V(  18, 0x17b9,  40,  19, 0 ),
-  V(  19, 0x1182,  42,  20, 0 ),
-  V(  20, 0x0cef,  43,  21, 0 ),
-  V(  21, 0x09a1,  45,  22, 0 ),
-  V(  22, 0x072f,  46,  23, 0 ),
-  V(  23, 0x055c,  48,  24, 0 ),
-  V(  24, 0x0406,  49,  25, 0 ),
-  V(  25, 0x0303,  51,  26, 0 ),
-  V(  26, 0x0240,  52,  27, 0 ),
-  V(  27, 0x01b1,  54,  28, 0 ),
-  V(  28, 0x0144,  56,  29, 0 ),
-  V(  29, 0x00f5,  57,  30, 0 ),
-  V(  30, 0x00b7,  59,  31, 0 ),
-  V(  31, 0x008a,  60,  32, 0 ),
-  V(  32, 0x0068,  62,  33, 0 ),
-  V(  33, 0x004e,  63,  34, 0 ),
-  V(  34, 0x003b,  32,  35, 0 ),
-  V(  35, 0x002c,  33,   9, 0 ),
-  V(  36, 0x5ae1,  37,  37, 1 ),
-  V(  37, 0x484c,  64,  38, 0 ),
-  V(  38, 0x3a0d,  65,  39, 0 ),
-  V(  39, 0x2ef1,  67,  40, 0 ),
-  V(  40, 0x261f,  68,  41, 0 ),
-  V(  41, 0x1f33,  69,  42, 0 ),
-  V(  42, 0x19a8,  70,  43, 0 ),
-  V(  43, 0x1518,  72,  44, 0 ),
-  V(  44, 0x1177,  73,  45, 0 ),
-  V(  45, 0x0e74,  74,  46, 0 ),
-  V(  46, 0x0bfb,  75,  47, 0 ),
-  V(  47, 0x09f8,  77,  48, 0 ),
-  V(  48, 0x0861,  78,  49, 0 ),
-  V(  49, 0x0706,  79,  50, 0 ),
-  V(  50, 0x05cd,  48,  51, 0 ),
-  V(  51, 0x04de,  50,  52, 0 ),
-  V(  52, 0x040f,  50,  53, 0 ),
-  V(  53, 0x0363,  51,  54, 0 ),
-  V(  54, 0x02d4,  52,  55, 0 ),
-  V(  55, 0x025c,  53,  56, 0 ),
-  V(  56, 0x01f8,  54,  57, 0 ),
-  V(  57, 0x01a4,  55,  58, 0 ),
-  V(  58, 0x0160,  56,  59, 0 ),
-  V(  59, 0x0125,  57,  60, 0 ),
-  V(  60, 0x00f6,  58,  61, 0 ),
-  V(  61, 0x00cb,  59,  62, 0 ),
-  V(  62, 0x00ab,  61,  63, 0 ),
-  V(  63, 0x008f,  61,  32, 0 ),
-  V(  64, 0x5b12,  65,  65, 1 ),
-  V(  65, 0x4d04,  80,  66, 0 ),
-  V(  66, 0x412c,  81,  67, 0 ),
-  V(  67, 0x37d8,  82,  68, 0 ),
-  V(  68, 0x2fe8,  83,  69, 0 ),
-  V(  69, 0x293c,  84,  70, 0 ),
-  V(  70, 0x2379,  86,  71, 0 ),
-  V(  71, 0x1edf,  87,  72, 0 ),
-  V(  72, 0x1aa9,  87,  73, 0 ),
-  V(  73, 0x174e,  72,  74, 0 ),
-  V(  74, 0x1424,  72,  75, 0 ),
-  V(  75, 0x119c,  74,  76, 0 ),
-  V(  76, 0x0f6b,  74,  77, 0 ),
-  V(  77, 0x0d51,  75,  78, 0 ),
-  V(  78, 0x0bb6,  77,  79, 0 ),
-  V(  79, 0x0a40,  77,  48, 0 ),
-  V(  80, 0x5832,  80,  81, 1 ),
-  V(  81, 0x4d1c,  88,  82, 0 ),
-  V(  82, 0x438e,  89,  83, 0 ),
-  V(  83, 0x3bdd,  90,  84, 0 ),
-  V(  84, 0x34ee,  91,  85, 0 ),
-  V(  85, 0x2eae,  92,  86, 0 ),
-  V(  86, 0x299a,  93,  87, 0 ),
-  V(  87, 0x2516,  86,  71, 0 ),
-  V(  88, 0x5570,  88,  89, 1 ),
-  V(  89, 0x4ca9,  95,  90, 0 ),
-  V(  90, 0x44d9,  96,  91, 0 ),
-  V(  91, 0x3e22,  97,  92, 0 ),
-  V(  92, 0x3824,  99,  93, 0 ),
-  V(  93, 0x32b4,  99,  94, 0 ),
-  V(  94, 0x2e17,  93,  86, 0 ),
-  V(  95, 0x56a8,  95,  96, 1 ),
-  V(  96, 0x4f46, 101,  97, 0 ),
-  V(  97, 0x47e5, 102,  98, 0 ),
-  V(  98, 0x41cf, 103,  99, 0 ),
-  V(  99, 0x3c3d, 104, 100, 0 ),
-  V( 100, 0x375e,  99,  93, 0 ),
-  V( 101, 0x5231, 105, 102, 0 ),
-  V( 102, 0x4c0f, 106, 103, 0 ),
-  V( 103, 0x4639, 107, 104, 0 ),
-  V( 104, 0x415e, 103,  99, 0 ),
-  V( 105, 0x5627, 105, 106, 1 ),
-  V( 106, 0x50e7, 108, 107, 0 ),
-  V( 107, 0x4b85, 109, 103, 0 ),
-  V( 108, 0x5597, 110, 109, 0 ),
-  V( 109, 0x504f, 111, 107, 0 ),
-  V( 110, 0x5a10, 110, 111, 1 ),
-  V( 111, 0x5522, 112, 109, 0 ),
-  V( 112, 0x59eb, 112, 111, 1 ),
-/*
- * This last entry is used for fixed probability estimate of 0.5
- * as suggested in Section 10.3 Table 5 of ITU-T Rec. T.851.
- */
-  V( 113, 0x5a1d, 113, 113, 0 )
-};
--- a/DoConfig/fltk/jpeg/jcapimin.c
+++ /dev/null
@@ -1,288 +1,0 @@
-/*
- * jcapimin.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * Modified 2003-2010 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the compression half
- * of the JPEG library.  These are the "minimum" API routines that may be
- * needed in either the normal full-compression case or the transcoding-only
- * case.
- *
- * Most of the routines intended to be called directly by an application
- * are in this file or in jcapistd.c.  But also see jcparam.c for
- * parameter-setup helper routines, jcomapi.c for routines shared by
- * compression and decompression, and jctrans.c for the transcoding case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Initialization of a JPEG compression object.
- * The error manager must already be set up (in case memory manager fails).
- */
-
-GLOBAL(void)
-jpeg_CreateCompress (j_compress_ptr cinfo, int version, size_t structsize)
-{
-  int i;
-
-  /* Guard against version mismatches between library and caller. */
-  cinfo->mem = NULL;		/* so jpeg_destroy knows mem mgr not called */
-  if (version != JPEG_LIB_VERSION)
-    ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
-  if (structsize != SIZEOF(struct jpeg_compress_struct))
-    ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, 
-	     (int) SIZEOF(struct jpeg_compress_struct), (int) structsize);
-
-  /* For debugging purposes, we zero the whole master structure.
-   * But the application has already set the err pointer, and may have set
-   * client_data, so we have to save and restore those fields.
-   * Note: if application hasn't set client_data, tools like Purify may
-   * complain here.
-   */
-  {
-    struct jpeg_error_mgr * err = cinfo->err;
-    void * client_data = cinfo->client_data; /* ignore Purify complaint here */
-    MEMZERO(cinfo, SIZEOF(struct jpeg_compress_struct));
-    cinfo->err = err;
-    cinfo->client_data = client_data;
-  }
-  cinfo->is_decompressor = FALSE;
-
-  /* Initialize a memory manager instance for this object */
-  jinit_memory_mgr((j_common_ptr) cinfo);
-
-  /* Zero out pointers to permanent structures. */
-  cinfo->progress = NULL;
-  cinfo->dest = NULL;
-
-  cinfo->comp_info = NULL;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    cinfo->quant_tbl_ptrs[i] = NULL;
-    cinfo->q_scale_factor[i] = 100;
-  }
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    cinfo->dc_huff_tbl_ptrs[i] = NULL;
-    cinfo->ac_huff_tbl_ptrs[i] = NULL;
-  }
-
-  /* Must do it here for emit_dqt in case jpeg_write_tables is used */
-  cinfo->block_size = DCTSIZE;
-  cinfo->natural_order = jpeg_natural_order;
-  cinfo->lim_Se = DCTSIZE2-1;
-
-  cinfo->script_space = NULL;
-
-  cinfo->input_gamma = 1.0;	/* in case application forgets */
-
-  /* OK, I'm ready */
-  cinfo->global_state = CSTATE_START;
-}
-
-
-/*
- * Destruction of a JPEG compression object
- */
-
-GLOBAL(void)
-jpeg_destroy_compress (j_compress_ptr cinfo)
-{
-  jpeg_destroy((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Abort processing of a JPEG compression operation,
- * but don't destroy the object itself.
- */
-
-GLOBAL(void)
-jpeg_abort_compress (j_compress_ptr cinfo)
-{
-  jpeg_abort((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Forcibly suppress or un-suppress all quantization and Huffman tables.
- * Marks all currently defined tables as already written (if suppress)
- * or not written (if !suppress).  This will control whether they get emitted
- * by a subsequent jpeg_start_compress call.
- *
- * This routine is exported for use by applications that want to produce
- * abbreviated JPEG datastreams.  It logically belongs in jcparam.c, but
- * since it is called by jpeg_start_compress, we put it here --- otherwise
- * jcparam.o would be linked whether the application used it or not.
- */
-
-GLOBAL(void)
-jpeg_suppress_tables (j_compress_ptr cinfo, boolean suppress)
-{
-  int i;
-  JQUANT_TBL * qtbl;
-  JHUFF_TBL * htbl;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    if ((qtbl = cinfo->quant_tbl_ptrs[i]) != NULL)
-      qtbl->sent_table = suppress;
-  }
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    if ((htbl = cinfo->dc_huff_tbl_ptrs[i]) != NULL)
-      htbl->sent_table = suppress;
-    if ((htbl = cinfo->ac_huff_tbl_ptrs[i]) != NULL)
-      htbl->sent_table = suppress;
-  }
-}
-
-
-/*
- * Finish JPEG compression.
- *
- * If a multipass operating mode was selected, this may do a great deal of
- * work including most of the actual output.
- */
-
-GLOBAL(void)
-jpeg_finish_compress (j_compress_ptr cinfo)
-{
-  JDIMENSION iMCU_row;
-
-  if (cinfo->global_state == CSTATE_SCANNING ||
-      cinfo->global_state == CSTATE_RAW_OK) {
-    /* Terminate first pass */
-    if (cinfo->next_scanline < cinfo->image_height)
-      ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
-    (*cinfo->master->finish_pass) (cinfo);
-  } else if (cinfo->global_state != CSTATE_WRCOEFS)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Perform any remaining passes */
-  while (! cinfo->master->is_last_pass) {
-    (*cinfo->master->prepare_for_pass) (cinfo);
-    for (iMCU_row = 0; iMCU_row < cinfo->total_iMCU_rows; iMCU_row++) {
-      if (cinfo->progress != NULL) {
-	cinfo->progress->pass_counter = (long) iMCU_row;
-	cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows;
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      }
-      /* We bypass the main controller and invoke coef controller directly;
-       * all work is being done from the coefficient buffer.
-       */
-      if (! (*cinfo->coef->compress_data) (cinfo, (JSAMPIMAGE) NULL))
-	ERREXIT(cinfo, JERR_CANT_SUSPEND);
-    }
-    (*cinfo->master->finish_pass) (cinfo);
-  }
-  /* Write EOI, do final cleanup */
-  (*cinfo->marker->write_file_trailer) (cinfo);
-  (*cinfo->dest->term_destination) (cinfo);
-  /* We can use jpeg_abort to release memory and reset global_state */
-  jpeg_abort((j_common_ptr) cinfo);
-}
-
-
-/*
- * Write a special marker.
- * This is only recommended for writing COM or APPn markers.
- * Must be called after jpeg_start_compress() and before
- * first call to jpeg_write_scanlines() or jpeg_write_raw_data().
- */
-
-GLOBAL(void)
-jpeg_write_marker (j_compress_ptr cinfo, int marker,
-		   const JOCTET *dataptr, unsigned int datalen)
-{
-  JMETHOD(void, write_marker_byte, (j_compress_ptr info, int val));
-
-  if (cinfo->next_scanline != 0 ||
-      (cinfo->global_state != CSTATE_SCANNING &&
-       cinfo->global_state != CSTATE_RAW_OK &&
-       cinfo->global_state != CSTATE_WRCOEFS))
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  (*cinfo->marker->write_marker_header) (cinfo, marker, datalen);
-  write_marker_byte = cinfo->marker->write_marker_byte;	/* copy for speed */
-  while (datalen--) {
-    (*write_marker_byte) (cinfo, *dataptr);
-    dataptr++;
-  }
-}
-
-/* Same, but piecemeal. */
-
-GLOBAL(void)
-jpeg_write_m_header (j_compress_ptr cinfo, int marker, unsigned int datalen)
-{
-  if (cinfo->next_scanline != 0 ||
-      (cinfo->global_state != CSTATE_SCANNING &&
-       cinfo->global_state != CSTATE_RAW_OK &&
-       cinfo->global_state != CSTATE_WRCOEFS))
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  (*cinfo->marker->write_marker_header) (cinfo, marker, datalen);
-}
-
-GLOBAL(void)
-jpeg_write_m_byte (j_compress_ptr cinfo, int val)
-{
-  (*cinfo->marker->write_marker_byte) (cinfo, val);
-}
-
-
-/*
- * Alternate compression function: just write an abbreviated table file.
- * Before calling this, all parameters and a data destination must be set up.
- *
- * To produce a pair of files containing abbreviated tables and abbreviated
- * image data, one would proceed as follows:
- *
- *		initialize JPEG object
- *		set JPEG parameters
- *		set destination to table file
- *		jpeg_write_tables(cinfo);
- *		set destination to image file
- *		jpeg_start_compress(cinfo, FALSE);
- *		write data...
- *		jpeg_finish_compress(cinfo);
- *
- * jpeg_write_tables has the side effect of marking all tables written
- * (same as jpeg_suppress_tables(..., TRUE)).  Thus a subsequent start_compress
- * will not re-emit the tables unless it is passed write_all_tables=TRUE.
- */
-
-GLOBAL(void)
-jpeg_write_tables (j_compress_ptr cinfo)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Initialize the marker writer ... bit of a crock to do it here. */
-  jinit_marker_writer(cinfo);
-  /* Write them tables! */
-  (*cinfo->marker->write_tables_only) (cinfo);
-  /* And clean up. */
-  (*cinfo->dest->term_destination) (cinfo);
-  /*
-   * In library releases up through v6a, we called jpeg_abort() here to free
-   * any working memory allocated by the destination manager and marker
-   * writer.  Some applications had a problem with that: they allocated space
-   * of their own from the library memory manager, and didn't want it to go
-   * away during write_tables.  So now we do nothing.  This will cause a
-   * memory leak if an app calls write_tables repeatedly without doing a full
-   * compression cycle or otherwise resetting the JPEG object.  However, that
-   * seems less bad than unexpectedly freeing memory in the normal case.
-   * An app that prefers the old behavior can call jpeg_abort for itself after
-   * each call to jpeg_write_tables().
-   */
-}
--- a/DoConfig/fltk/jpeg/jcapistd.c
+++ /dev/null
@@ -1,162 +1,0 @@
-/*
- * jcapistd.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the compression half
- * of the JPEG library.  These are the "standard" API routines that are
- * used in the normal full-compression case.  They are not used by a
- * transcoding-only application.  Note that if an application links in
- * jpeg_start_compress, it will end up linking in the entire compressor.
- * We thus must separate this file from jcapimin.c to avoid linking the
- * whole compression library into a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Compression initialization.
- * Before calling this, all parameters and a data destination must be set up.
- *
- * We require a write_all_tables parameter as a failsafe check when writing
- * multiple datastreams from the same compression object.  Since prior runs
- * will have left all the tables marked sent_table=TRUE, a subsequent run
- * would emit an abbreviated stream (no tables) by default.  This may be what
- * is wanted, but for safety's sake it should not be the default behavior:
- * programmers should have to make a deliberate choice to emit abbreviated
- * images.  Therefore the documentation and examples should encourage people
- * to pass write_all_tables=TRUE; then it will take active thought to do the
- * wrong thing.
- */
-
-GLOBAL(void)
-jpeg_start_compress (j_compress_ptr cinfo, boolean write_all_tables)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (write_all_tables)
-    jpeg_suppress_tables(cinfo, FALSE);	/* mark all tables to be written */
-
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Perform master selection of active modules */
-  jinit_compress_master(cinfo);
-  /* Set up for the first pass */
-  (*cinfo->master->prepare_for_pass) (cinfo);
-  /* Ready for application to drive first pass through jpeg_write_scanlines
-   * or jpeg_write_raw_data.
-   */
-  cinfo->next_scanline = 0;
-  cinfo->global_state = (cinfo->raw_data_in ? CSTATE_RAW_OK : CSTATE_SCANNING);
-}
-
-
-/*
- * Write some scanlines of data to the JPEG compressor.
- *
- * The return value will be the number of lines actually written.
- * This should be less than the supplied num_lines only in case that
- * the data destination module has requested suspension of the compressor,
- * or if more than image_height scanlines are passed in.
- *
- * Note: we warn about excess calls to jpeg_write_scanlines() since
- * this likely signals an application programmer error.  However,
- * excess scanlines passed in the last valid call are *silently* ignored,
- * so that the application need not adjust num_lines for end-of-image
- * when using a multiple-scanline buffer.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_write_scanlines (j_compress_ptr cinfo, JSAMPARRAY scanlines,
-		      JDIMENSION num_lines)
-{
-  JDIMENSION row_ctr, rows_left;
-
-  if (cinfo->global_state != CSTATE_SCANNING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->next_scanline >= cinfo->image_height)
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->next_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->image_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Give master control module another chance if this is first call to
-   * jpeg_write_scanlines.  This lets output of the frame/scan headers be
-   * delayed so that application can write COM, etc, markers between
-   * jpeg_start_compress and jpeg_write_scanlines.
-   */
-  if (cinfo->master->call_pass_startup)
-    (*cinfo->master->pass_startup) (cinfo);
-
-  /* Ignore any extra scanlines at bottom of image. */
-  rows_left = cinfo->image_height - cinfo->next_scanline;
-  if (num_lines > rows_left)
-    num_lines = rows_left;
-
-  row_ctr = 0;
-  (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, num_lines);
-  cinfo->next_scanline += row_ctr;
-  return row_ctr;
-}
-
-
-/*
- * Alternate entry point to write raw data.
- * Processes exactly one iMCU row per call, unless suspended.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_write_raw_data (j_compress_ptr cinfo, JSAMPIMAGE data,
-		     JDIMENSION num_lines)
-{
-  JDIMENSION lines_per_iMCU_row;
-
-  if (cinfo->global_state != CSTATE_RAW_OK)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->next_scanline >= cinfo->image_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->next_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->image_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Give master control module another chance if this is first call to
-   * jpeg_write_raw_data.  This lets output of the frame/scan headers be
-   * delayed so that application can write COM, etc, markers between
-   * jpeg_start_compress and jpeg_write_raw_data.
-   */
-  if (cinfo->master->call_pass_startup)
-    (*cinfo->master->pass_startup) (cinfo);
-
-  /* Verify that at least one iMCU row has been passed. */
-  lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size;
-  if (num_lines < lines_per_iMCU_row)
-    ERREXIT(cinfo, JERR_BUFFER_SIZE);
-
-  /* Directly compress the row. */
-  if (! (*cinfo->coef->compress_data) (cinfo, data)) {
-    /* If compressor did not consume the whole row, suspend processing. */
-    return 0;
-  }
-
-  /* OK, we processed one iMCU row. */
-  cinfo->next_scanline += lines_per_iMCU_row;
-  return lines_per_iMCU_row;
-}
--- a/DoConfig/fltk/jpeg/jcarith.c
+++ /dev/null
@@ -1,944 +1,0 @@
-/*
- * jcarith.c
- *
- * Developed 1997-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains portable arithmetic entropy encoding routines for JPEG
- * (implementing the ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81).
- *
- * Both sequential and progressive modes are supported in this single module.
- *
- * Suspension is not currently supported in this module.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Expanded entropy encoder object for arithmetic encoding. */
-
-typedef struct {
-  struct jpeg_entropy_encoder pub; /* public fields */
-
-  INT32 c; /* C register, base of coding interval, layout as in sec. D.1.3 */
-  INT32 a;               /* A register, normalized size of coding interval */
-  INT32 sc;        /* counter for stacked 0xFF values which might overflow */
-  INT32 zc;          /* counter for pending 0x00 output values which might *
-                          * be discarded at the end ("Pacman" termination) */
-  int ct;  /* bit shift counter, determines when next byte will be written */
-  int buffer;                /* buffer for most recent output byte != 0xFF */
-
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-  int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */
-
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-  int next_restart_num;		/* next restart number to write (0-7) */
-
-  /* Pointers to statistics areas (these workspaces have image lifespan) */
-  unsigned char * dc_stats[NUM_ARITH_TBLS];
-  unsigned char * ac_stats[NUM_ARITH_TBLS];
-
-  /* Statistics bin for coding with fixed probability 0.5 */
-  unsigned char fixed_bin[4];
-} arith_entropy_encoder;
-
-typedef arith_entropy_encoder * arith_entropy_ptr;
-
-/* The following two definitions specify the allocation chunk size
- * for the statistics area.
- * According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least
- * 49 statistics bins for DC, and 245 statistics bins for AC coding.
- *
- * We use a compact representation with 1 byte per statistics bin,
- * thus the numbers directly represent byte sizes.
- * This 1 byte per statistics bin contains the meaning of the MPS
- * (more probable symbol) in the highest bit (mask 0x80), and the
- * index into the probability estimation state machine table
- * in the lower bits (mask 0x7F).
- */
-
-#define DC_STAT_BINS 64
-#define AC_STAT_BINS 256
-
-/* NOTE: Uncomment the following #define if you want to use the
- * given formula for calculating the AC conditioning parameter Kx
- * for spectral selection progressive coding in section G.1.3.2
- * of the spec (Kx = Kmin + SRL (8 + Se - Kmin) 4).
- * Although the spec and P&M authors claim that this "has proven
- * to give good results for 8 bit precision samples", I'm not
- * convinced yet that this is really beneficial.
- * Early tests gave only very marginal compression enhancements
- * (a few - around 5 or so - bytes even for very large files),
- * which would turn out rather negative if we'd suppress the
- * DAC (Define Arithmetic Conditioning) marker segments for
- * the default parameters in the future.
- * Note that currently the marker writing module emits 12-byte
- * DAC segments for a full-component scan in a color image.
- * This is not worth worrying about IMHO. However, since the
- * spec defines the default values to be used if the tables
- * are omitted (unlike Huffman tables, which are required
- * anyway), one might optimize this behaviour in the future,
- * and then it would be disadvantageous to use custom tables if
- * they don't provide sufficient gain to exceed the DAC size.
- *
- * On the other hand, I'd consider it as a reasonable result
- * that the conditioning has no significant influence on the
- * compression performance. This means that the basic
- * statistical model is already rather stable.
- *
- * Thus, at the moment, we use the default conditioning values
- * anyway, and do not use the custom formula.
- *
-#define CALCULATE_SPECTRAL_CONDITIONING
- */
-
-/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32.
- * We assume that int right shift is unsigned if INT32 right shift is,
- * which should be safe.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define ISHIFT_TEMPS	int ishift_temp;
-#define IRIGHT_SHIFT(x,shft)  \
-	((ishift_temp = (x)) < 0 ? \
-	 (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \
-	 (ishift_temp >> (shft)))
-#else
-#define ISHIFT_TEMPS
-#define IRIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-
-LOCAL(void)
-emit_byte (int val, j_compress_ptr cinfo)
-/* Write next output byte; we do not support suspension in this module. */
-{
-  struct jpeg_destination_mgr * dest = cinfo->dest;
-
-  *dest->next_output_byte++ = (JOCTET) val;
-  if (--dest->free_in_buffer == 0)
-    if (! (*dest->empty_output_buffer) (cinfo))
-      ERREXIT(cinfo, JERR_CANT_SUSPEND);
-}
-
-
-/*
- * Finish up at the end of an arithmetic-compressed scan.
- */
-
-METHODDEF(void)
-finish_pass (j_compress_ptr cinfo)
-{
-  arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
-  INT32 temp;
-
-  /* Section D.1.8: Termination of encoding */
-
-  /* Find the e->c in the coding interval with the largest
-   * number of trailing zero bits */
-  if ((temp = (e->a - 1 + e->c) & 0xFFFF0000L) < e->c)
-    e->c = temp + 0x8000L;
-  else
-    e->c = temp;
-  /* Send remaining bytes to output */
-  e->c <<= e->ct;
-  if (e->c & 0xF8000000L) {
-    /* One final overflow has to be handled */
-    if (e->buffer >= 0) {
-      if (e->zc)
-	do emit_byte(0x00, cinfo);
-	while (--e->zc);
-      emit_byte(e->buffer + 1, cinfo);
-      if (e->buffer + 1 == 0xFF)
-	emit_byte(0x00, cinfo);
-    }
-    e->zc += e->sc;  /* carry-over converts stacked 0xFF bytes to 0x00 */
-    e->sc = 0;
-  } else {
-    if (e->buffer == 0)
-      ++e->zc;
-    else if (e->buffer >= 0) {
-      if (e->zc)
-	do emit_byte(0x00, cinfo);
-	while (--e->zc);
-      emit_byte(e->buffer, cinfo);
-    }
-    if (e->sc) {
-      if (e->zc)
-	do emit_byte(0x00, cinfo);
-	while (--e->zc);
-      do {
-	emit_byte(0xFF, cinfo);
-	emit_byte(0x00, cinfo);
-      } while (--e->sc);
-    }
-  }
-  /* Output final bytes only if they are not 0x00 */
-  if (e->c & 0x7FFF800L) {
-    if (e->zc)  /* output final pending zero bytes */
-      do emit_byte(0x00, cinfo);
-      while (--e->zc);
-    emit_byte((e->c >> 19) & 0xFF, cinfo);
-    if (((e->c >> 19) & 0xFF) == 0xFF)
-      emit_byte(0x00, cinfo);
-    if (e->c & 0x7F800L) {
-      emit_byte((e->c >> 11) & 0xFF, cinfo);
-      if (((e->c >> 11) & 0xFF) == 0xFF)
-	emit_byte(0x00, cinfo);
-    }
-  }
-}
-
-
-/*
- * The core arithmetic encoding routine (common in JPEG and JBIG).
- * This needs to go as fast as possible.
- * Machine-dependent optimization facilities
- * are not utilized in this portable implementation.
- * However, this code should be fairly efficient and
- * may be a good base for further optimizations anyway.
- *
- * Parameter 'val' to be encoded may be 0 or 1 (binary decision).
- *
- * Note: I've added full "Pacman" termination support to the
- * byte output routines, which is equivalent to the optional
- * Discard_final_zeros procedure (Figure D.15) in the spec.
- * Thus, we always produce the shortest possible output
- * stream compliant to the spec (no trailing zero bytes,
- * except for FF stuffing).
- *
- * I've also introduced a new scheme for accessing
- * the probability estimation state machine table,
- * derived from Markus Kuhn's JBIG implementation.
- */
-
-LOCAL(void)
-arith_encode (j_compress_ptr cinfo, unsigned char *st, int val) 
-{
-  register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
-  register unsigned char nl, nm;
-  register INT32 qe, temp;
-  register int sv;
-
-  /* Fetch values from our compact representation of Table D.3(D.2):
-   * Qe values and probability estimation state machine
-   */
-  sv = *st;
-  qe = jpeg_aritab[sv & 0x7F];	/* => Qe_Value */
-  nl = qe & 0xFF; qe >>= 8;	/* Next_Index_LPS + Switch_MPS */
-  nm = qe & 0xFF; qe >>= 8;	/* Next_Index_MPS */
-
-  /* Encode & estimation procedures per sections D.1.4 & D.1.5 */
-  e->a -= qe;
-  if (val != (sv >> 7)) {
-    /* Encode the less probable symbol */
-    if (e->a >= qe) {
-      /* If the interval size (qe) for the less probable symbol (LPS)
-       * is larger than the interval size for the MPS, then exchange
-       * the two symbols for coding efficiency, otherwise code the LPS
-       * as usual: */
-      e->c += e->a;
-      e->a = qe;
-    }
-    *st = (sv & 0x80) ^ nl;	/* Estimate_after_LPS */
-  } else {
-    /* Encode the more probable symbol */
-    if (e->a >= 0x8000L)
-      return;  /* A >= 0x8000 -> ready, no renormalization required */
-    if (e->a < qe) {
-      /* If the interval size (qe) for the less probable symbol (LPS)
-       * is larger than the interval size for the MPS, then exchange
-       * the two symbols for coding efficiency: */
-      e->c += e->a;
-      e->a = qe;
-    }
-    *st = (sv & 0x80) ^ nm;	/* Estimate_after_MPS */
-  }
-
-  /* Renormalization & data output per section D.1.6 */
-  do {
-    e->a <<= 1;
-    e->c <<= 1;
-    if (--e->ct == 0) {
-      /* Another byte is ready for output */
-      temp = e->c >> 19;
-      if (temp > 0xFF) {
-	/* Handle overflow over all stacked 0xFF bytes */
-	if (e->buffer >= 0) {
-	  if (e->zc)
-	    do emit_byte(0x00, cinfo);
-	    while (--e->zc);
-	  emit_byte(e->buffer + 1, cinfo);
-	  if (e->buffer + 1 == 0xFF)
-	    emit_byte(0x00, cinfo);
-	}
-	e->zc += e->sc;  /* carry-over converts stacked 0xFF bytes to 0x00 */
-	e->sc = 0;
-	/* Note: The 3 spacer bits in the C register guarantee
-	 * that the new buffer byte can't be 0xFF here
-	 * (see page 160 in the P&M JPEG book). */
-	e->buffer = temp & 0xFF;  /* new output byte, might overflow later */
-      } else if (temp == 0xFF) {
-	++e->sc;  /* stack 0xFF byte (which might overflow later) */
-      } else {
-	/* Output all stacked 0xFF bytes, they will not overflow any more */
-	if (e->buffer == 0)
-	  ++e->zc;
-	else if (e->buffer >= 0) {
-	  if (e->zc)
-	    do emit_byte(0x00, cinfo);
-	    while (--e->zc);
-	  emit_byte(e->buffer, cinfo);
-	}
-	if (e->sc) {
-	  if (e->zc)
-	    do emit_byte(0x00, cinfo);
-	    while (--e->zc);
-	  do {
-	    emit_byte(0xFF, cinfo);
-	    emit_byte(0x00, cinfo);
-	  } while (--e->sc);
-	}
-	e->buffer = temp & 0xFF;  /* new output byte (can still overflow) */
-      }
-      e->c &= 0x7FFFFL;
-      e->ct += 8;
-    }
-  } while (e->a < 0x8000L);
-}
-
-
-/*
- * Emit a restart marker & resynchronize predictions.
- */
-
-LOCAL(void)
-emit_restart (j_compress_ptr cinfo, int restart_num)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  int ci;
-  jpeg_component_info * compptr;
-
-  finish_pass(cinfo);
-
-  emit_byte(0xFF, cinfo);
-  emit_byte(JPEG_RST0 + restart_num, cinfo);
-
-  /* Re-initialize statistics areas */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* DC needs no table for refinement scan */
-    if (cinfo->Ss == 0 && cinfo->Ah == 0) {
-      MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS);
-      /* Reset DC predictions to 0 */
-      entropy->last_dc_val[ci] = 0;
-      entropy->dc_context[ci] = 0;
-    }
-    /* AC needs no table when not present */
-    if (cinfo->Se) {
-      MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS);
-    }
-  }
-
-  /* Reset arithmetic encoding variables */
-  entropy->c = 0;
-  entropy->a = 0x10000L;
-  entropy->sc = 0;
-  entropy->zc = 0;
-  entropy->ct = 11;
-  entropy->buffer = -1;  /* empty */
-}
-
-
-/*
- * MCU encoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  unsigned char *st;
-  int blkn, ci, tbl;
-  int v, v2, m;
-  ISHIFT_TEMPS
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      emit_restart(cinfo, entropy->next_restart_num);
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    tbl = cinfo->cur_comp_info[ci]->dc_tbl_no;
-
-    /* Compute the DC value after the required point transform by Al.
-     * This is simply an arithmetic right shift.
-     */
-    m = IRIGHT_SHIFT((int) (MCU_data[blkn][0][0]), cinfo->Al);
-
-    /* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */
-
-    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
-    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
-
-    /* Figure F.4: Encode_DC_DIFF */
-    if ((v = m - entropy->last_dc_val[ci]) == 0) {
-      arith_encode(cinfo, st, 0);
-      entropy->dc_context[ci] = 0;	/* zero diff category */
-    } else {
-      entropy->last_dc_val[ci] = m;
-      arith_encode(cinfo, st, 1);
-      /* Figure F.6: Encoding nonzero value v */
-      /* Figure F.7: Encoding the sign of v */
-      if (v > 0) {
-	arith_encode(cinfo, st + 1, 0);	/* Table F.4: SS = S0 + 1 */
-	st += 2;			/* Table F.4: SP = S0 + 2 */
-	entropy->dc_context[ci] = 4;	/* small positive diff category */
-      } else {
-	v = -v;
-	arith_encode(cinfo, st + 1, 1);	/* Table F.4: SS = S0 + 1 */
-	st += 3;			/* Table F.4: SN = S0 + 3 */
-	entropy->dc_context[ci] = 8;	/* small negative diff category */
-      }
-      /* Figure F.8: Encoding the magnitude category of v */
-      m = 0;
-      if (v -= 1) {
-	arith_encode(cinfo, st, 1);
-	m = 1;
-	v2 = v;
-	st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */
-	while (v2 >>= 1) {
-	  arith_encode(cinfo, st, 1);
-	  m <<= 1;
-	  st += 1;
-	}
-      }
-      arith_encode(cinfo, st, 0);
-      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
-      if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1))
-	entropy->dc_context[ci] = 0;	/* zero diff category */
-      else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1))
-	entropy->dc_context[ci] += 8;	/* large diff category */
-      /* Figure F.9: Encoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	arith_encode(cinfo, st, (m & v) ? 1 : 0);
-    }
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  JBLOCKROW block;
-  unsigned char *st;
-  int tbl, k, ke;
-  int v, v2, m;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      emit_restart(cinfo, entropy->next_restart_num);
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  natural_order = cinfo->natural_order;
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
-
-  /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */
-
-  /* Establish EOB (end-of-block) index */
-  ke = cinfo->Se;
-  do {
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value.
-     */
-    if ((v = (*block)[natural_order[ke]]) >= 0) {
-      if (v >>= cinfo->Al) break;
-    } else {
-      v = -v;
-      if (v >>= cinfo->Al) break;
-    }
-  } while (--ke);
-
-  /* Figure F.5: Encode_AC_Coefficients */
-  for (k = cinfo->Ss - 1; k < ke;) {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    arith_encode(cinfo, st, 0);		/* EOB decision */
-    for (;;) {
-      if ((v = (*block)[natural_order[++k]]) >= 0) {
-	if (v >>= cinfo->Al) {
-	  arith_encode(cinfo, st + 1, 1);
-	  arith_encode(cinfo, entropy->fixed_bin, 0);
-	  break;
-	}
-      } else {
-	v = -v;
-	if (v >>= cinfo->Al) {
-	  arith_encode(cinfo, st + 1, 1);
-	  arith_encode(cinfo, entropy->fixed_bin, 1);
-	  break;
-	}
-      }
-      arith_encode(cinfo, st + 1, 0);
-      st += 3;
-    }
-    st += 2;
-    /* Figure F.8: Encoding the magnitude category of v */
-    m = 0;
-    if (v -= 1) {
-      arith_encode(cinfo, st, 1);
-      m = 1;
-      v2 = v;
-      if (v2 >>= 1) {
-	arith_encode(cinfo, st, 1);
-	m <<= 1;
-	st = entropy->ac_stats[tbl] +
-	     (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
-	while (v2 >>= 1) {
-	  arith_encode(cinfo, st, 1);
-	  m <<= 1;
-	  st += 1;
-	}
-      }
-    }
-    arith_encode(cinfo, st, 0);
-    /* Figure F.9: Encoding the magnitude bit pattern of v */
-    st += 14;
-    while (m >>= 1)
-      arith_encode(cinfo, st, (m & v) ? 1 : 0);
-  }
-  /* Encode EOB decision only if k < cinfo->Se */
-  if (k < cinfo->Se) {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    arith_encode(cinfo, st, 1);
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component,
- * although the spec is not very clear on the point.
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  unsigned char *st;
-  int Al, blkn;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      emit_restart(cinfo, entropy->next_restart_num);
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  st = entropy->fixed_bin;	/* use fixed probability estimation */
-  Al = cinfo->Al;
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    /* We simply emit the Al'th bit of the DC coefficient value. */
-    arith_encode(cinfo, st, (MCU_data[blkn][0][0] >> Al) & 1);
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  JBLOCKROW block;
-  unsigned char *st;
-  int tbl, k, ke, kex;
-  int v;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      emit_restart(cinfo, entropy->next_restart_num);
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  natural_order = cinfo->natural_order;
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
-
-  /* Section G.1.3.3: Encoding of AC coefficients */
-
-  /* Establish EOB (end-of-block) index */
-  ke = cinfo->Se;
-  do {
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value.
-     */
-    if ((v = (*block)[natural_order[ke]]) >= 0) {
-      if (v >>= cinfo->Al) break;
-    } else {
-      v = -v;
-      if (v >>= cinfo->Al) break;
-    }
-  } while (--ke);
-
-  /* Establish EOBx (previous stage end-of-block) index */
-  for (kex = ke; kex > 0; kex--)
-    if ((v = (*block)[natural_order[kex]]) >= 0) {
-      if (v >>= cinfo->Ah) break;
-    } else {
-      v = -v;
-      if (v >>= cinfo->Ah) break;
-    }
-
-  /* Figure G.10: Encode_AC_Coefficients_SA */
-  for (k = cinfo->Ss - 1; k < ke;) {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    if (k >= kex)
-      arith_encode(cinfo, st, 0);	/* EOB decision */
-    for (;;) {
-      if ((v = (*block)[natural_order[++k]]) >= 0) {
-	if (v >>= cinfo->Al) {
-	  if (v >> 1)			/* previously nonzero coef */
-	    arith_encode(cinfo, st + 2, (v & 1));
-	  else {			/* newly nonzero coef */
-	    arith_encode(cinfo, st + 1, 1);
-	    arith_encode(cinfo, entropy->fixed_bin, 0);
-	  }
-	  break;
-	}
-      } else {
-	v = -v;
-	if (v >>= cinfo->Al) {
-	  if (v >> 1)			/* previously nonzero coef */
-	    arith_encode(cinfo, st + 2, (v & 1));
-	  else {			/* newly nonzero coef */
-	    arith_encode(cinfo, st + 1, 1);
-	    arith_encode(cinfo, entropy->fixed_bin, 1);
-	  }
-	  break;
-	}
-      }
-      arith_encode(cinfo, st + 1, 0);
-      st += 3;
-    }
-  }
-  /* Encode EOB decision only if k < cinfo->Se */
-  if (k < cinfo->Se) {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    arith_encode(cinfo, st, 1);
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Encode and output one MCU's worth of arithmetic-compressed coefficients.
- */
-
-METHODDEF(boolean)
-encode_mcu (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  JBLOCKROW block;
-  unsigned char *st;
-  int tbl, k, ke;
-  int v, v2, m;
-  int blkn, ci;
-  jpeg_component_info * compptr;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      emit_restart(cinfo, entropy->next_restart_num);
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  natural_order = cinfo->natural_order;
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-
-    /* Sections F.1.4.1 & F.1.4.4.1: Encoding of DC coefficients */
-
-    tbl = compptr->dc_tbl_no;
-
-    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
-    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
-
-    /* Figure F.4: Encode_DC_DIFF */
-    if ((v = (*block)[0] - entropy->last_dc_val[ci]) == 0) {
-      arith_encode(cinfo, st, 0);
-      entropy->dc_context[ci] = 0;	/* zero diff category */
-    } else {
-      entropy->last_dc_val[ci] = (*block)[0];
-      arith_encode(cinfo, st, 1);
-      /* Figure F.6: Encoding nonzero value v */
-      /* Figure F.7: Encoding the sign of v */
-      if (v > 0) {
-	arith_encode(cinfo, st + 1, 0);	/* Table F.4: SS = S0 + 1 */
-	st += 2;			/* Table F.4: SP = S0 + 2 */
-	entropy->dc_context[ci] = 4;	/* small positive diff category */
-      } else {
-	v = -v;
-	arith_encode(cinfo, st + 1, 1);	/* Table F.4: SS = S0 + 1 */
-	st += 3;			/* Table F.4: SN = S0 + 3 */
-	entropy->dc_context[ci] = 8;	/* small negative diff category */
-      }
-      /* Figure F.8: Encoding the magnitude category of v */
-      m = 0;
-      if (v -= 1) {
-	arith_encode(cinfo, st, 1);
-	m = 1;
-	v2 = v;
-	st = entropy->dc_stats[tbl] + 20; /* Table F.4: X1 = 20 */
-	while (v2 >>= 1) {
-	  arith_encode(cinfo, st, 1);
-	  m <<= 1;
-	  st += 1;
-	}
-      }
-      arith_encode(cinfo, st, 0);
-      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
-      if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1))
-	entropy->dc_context[ci] = 0;	/* zero diff category */
-      else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1))
-	entropy->dc_context[ci] += 8;	/* large diff category */
-      /* Figure F.9: Encoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	arith_encode(cinfo, st, (m & v) ? 1 : 0);
-    }
-
-    /* Sections F.1.4.2 & F.1.4.4.2: Encoding of AC coefficients */
-
-    if ((ke = cinfo->lim_Se) == 0) continue;
-    tbl = compptr->ac_tbl_no;
-
-    /* Establish EOB (end-of-block) index */
-    do {
-      if ((*block)[natural_order[ke]]) break;
-    } while (--ke);
-
-    /* Figure F.5: Encode_AC_Coefficients */
-    for (k = 0; k < ke;) {
-      st = entropy->ac_stats[tbl] + 3 * k;
-      arith_encode(cinfo, st, 0);	/* EOB decision */
-      while ((v = (*block)[natural_order[++k]]) == 0) {
-	arith_encode(cinfo, st + 1, 0);
-	st += 3;
-      }
-      arith_encode(cinfo, st + 1, 1);
-      /* Figure F.6: Encoding nonzero value v */
-      /* Figure F.7: Encoding the sign of v */
-      if (v > 0) {
-	arith_encode(cinfo, entropy->fixed_bin, 0);
-      } else {
-	v = -v;
-	arith_encode(cinfo, entropy->fixed_bin, 1);
-      }
-      st += 2;
-      /* Figure F.8: Encoding the magnitude category of v */
-      m = 0;
-      if (v -= 1) {
-	arith_encode(cinfo, st, 1);
-	m = 1;
-	v2 = v;
-	if (v2 >>= 1) {
-	  arith_encode(cinfo, st, 1);
-	  m <<= 1;
-	  st = entropy->ac_stats[tbl] +
-	       (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
-	  while (v2 >>= 1) {
-	    arith_encode(cinfo, st, 1);
-	    m <<= 1;
-	    st += 1;
-	  }
-	}
-      }
-      arith_encode(cinfo, st, 0);
-      /* Figure F.9: Encoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	arith_encode(cinfo, st, (m & v) ? 1 : 0);
-    }
-    /* Encode EOB decision only if k < cinfo->lim_Se */
-    if (k < cinfo->lim_Se) {
-      st = entropy->ac_stats[tbl] + 3 * k;
-      arith_encode(cinfo, st, 1);
-    }
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Initialize for an arithmetic-compressed scan.
- */
-
-METHODDEF(void)
-start_pass (j_compress_ptr cinfo, boolean gather_statistics)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-
-  if (gather_statistics)
-    /* Make sure to avoid that in the master control logic!
-     * We are fully adaptive here and need no extra
-     * statistics gathering pass!
-     */
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-
-  /* We assume jcmaster.c already validated the progressive scan parameters. */
-
-  /* Select execution routines */
-  if (cinfo->progressive_mode) {
-    if (cinfo->Ah == 0) {
-      if (cinfo->Ss == 0)
-	entropy->pub.encode_mcu = encode_mcu_DC_first;
-      else
-	entropy->pub.encode_mcu = encode_mcu_AC_first;
-    } else {
-      if (cinfo->Ss == 0)
-	entropy->pub.encode_mcu = encode_mcu_DC_refine;
-      else
-	entropy->pub.encode_mcu = encode_mcu_AC_refine;
-    }
-  } else
-    entropy->pub.encode_mcu = encode_mcu;
-
-  /* Allocate & initialize requested statistics areas */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* DC needs no table for refinement scan */
-    if (cinfo->Ss == 0 && cinfo->Ah == 0) {
-      tbl = compptr->dc_tbl_no;
-      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
-	ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
-      if (entropy->dc_stats[tbl] == NULL)
-	entropy->dc_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, DC_STAT_BINS);
-      MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS);
-      /* Initialize DC predictions to 0 */
-      entropy->last_dc_val[ci] = 0;
-      entropy->dc_context[ci] = 0;
-    }
-    /* AC needs no table when not present */
-    if (cinfo->Se) {
-      tbl = compptr->ac_tbl_no;
-      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
-	ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
-      if (entropy->ac_stats[tbl] == NULL)
-	entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, AC_STAT_BINS);
-      MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS);
-#ifdef CALCULATE_SPECTRAL_CONDITIONING
-      if (cinfo->progressive_mode)
-	/* Section G.1.3.2: Set appropriate arithmetic conditioning value Kx */
-	cinfo->arith_ac_K[tbl] = cinfo->Ss + ((8 + cinfo->Se - cinfo->Ss) >> 4);
-#endif
-    }
-  }
-
-  /* Initialize arithmetic encoding variables */
-  entropy->c = 0;
-  entropy->a = 0x10000L;
-  entropy->sc = 0;
-  entropy->zc = 0;
-  entropy->ct = 11;
-  entropy->buffer = -1;  /* empty */
-
-  /* Initialize restart stuff */
-  entropy->restarts_to_go = cinfo->restart_interval;
-  entropy->next_restart_num = 0;
-}
-
-
-/*
- * Module initialization routine for arithmetic entropy encoding.
- */
-
-GLOBAL(void)
-jinit_arith_encoder (j_compress_ptr cinfo)
-{
-  arith_entropy_ptr entropy;
-  int i;
-
-  entropy = (arith_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(arith_entropy_encoder));
-  cinfo->entropy = &entropy->pub;
-  entropy->pub.start_pass = start_pass;
-  entropy->pub.finish_pass = finish_pass;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    entropy->dc_stats[i] = NULL;
-    entropy->ac_stats[i] = NULL;
-  }
-
-  /* Initialize index for fixed probability estimation */
-  entropy->fixed_bin[0] = 113;
-}
--- a/DoConfig/fltk/jpeg/jccoefct.c
+++ /dev/null
@@ -1,454 +1,0 @@
-/*
- * jccoefct.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * Modified 2003-2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the coefficient buffer controller for compression.
- * This controller is the top level of the JPEG compressor proper.
- * The coefficient buffer lies between forward-DCT and entropy encoding steps.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* We use a full-image coefficient buffer when doing Huffman optimization,
- * and also for writing multiple-scan JPEG files.  In all cases, the DCT
- * step is run during the first pass, and subsequent passes need only read
- * the buffered coefficients.
- */
-#ifdef ENTROPY_OPT_SUPPORTED
-#define FULL_COEF_BUFFER_SUPPORTED
-#else
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-#define FULL_COEF_BUFFER_SUPPORTED
-#endif
-#endif
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_coef_controller pub; /* public fields */
-
-  JDIMENSION iMCU_row_num;	/* iMCU row # within image */
-  JDIMENSION mcu_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* For single-pass compression, it's sufficient to buffer just one MCU
-   * (although this may prove a bit slow in practice).  We allocate a
-   * workspace of C_MAX_BLOCKS_IN_MCU coefficient blocks, and reuse it for each
-   * MCU constructed and sent.  (On 80x86, the workspace is FAR even though
-   * it's not really very big; this is to keep the module interfaces unchanged
-   * when a large coefficient buffer is necessary.)
-   * In multi-pass modes, this array points to the current MCU's blocks
-   * within the virtual arrays.
-   */
-  JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU];
-
-  /* In multi-pass modes, we need a virtual block array for each component. */
-  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
-} my_coef_controller;
-
-typedef my_coef_controller * my_coef_ptr;
-
-
-/* Forward declarations */
-METHODDEF(boolean) compress_data
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-METHODDEF(boolean) compress_first_pass
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-METHODDEF(boolean) compress_output
-    JPP((j_compress_ptr cinfo, JSAMPIMAGE input_buf));
-#endif
-
-
-LOCAL(void)
-start_iMCU_row (j_compress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row */
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->mcu_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  coef->iMCU_row_num = 0;
-  start_iMCU_row(cinfo);
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (coef->whole_image[0] != NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_data;
-    break;
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-  case JBUF_SAVE_AND_PASS:
-    if (coef->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_first_pass;
-    break;
-  case JBUF_CRANK_DEST:
-    if (coef->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    coef->pub.compress_data = compress_output;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data in the single-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the image.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf contains a plane for each component in image,
- * which we index according to the component's SOF position.
- */
-
-METHODDEF(boolean)
-compress_data (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, bi, ci, yindex, yoffset, blockcnt;
-  JDIMENSION ypos, xpos;
-  jpeg_component_info *compptr;
-  forward_DCT_ptr forward_DCT;
-
-  /* Loop to write as much as one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num <= last_MCU_col;
-	 MCU_col_num++) {
-      /* Determine where data comes from in input_buf and do the DCT thing.
-       * Each call on forward_DCT processes a horizontal row of DCT blocks
-       * as wide as an MCU; we rely on having allocated the MCU_buffer[] blocks
-       * sequentially.  Dummy blocks at the right or bottom edge are filled in
-       * specially.  The data in them does not matter for image reconstruction,
-       * so we fill them with values that will encode to the smallest amount of
-       * data, viz: all zeroes in the AC entries, DC entries equal to previous
-       * block's DC value.  (Thanks to Thomas Kinsman for this idea.)
-       */
-      blkn = 0;
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	forward_DCT = cinfo->fdct->forward_DCT[compptr->component_index];
-	blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						: compptr->last_col_width;
-	xpos = MCU_col_num * compptr->MCU_sample_width;
-	ypos = yoffset * compptr->DCT_v_scaled_size;
-	/* ypos == (yoffset+yindex) * DCTSIZE */
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (coef->iMCU_row_num < last_iMCU_row ||
-	      yoffset+yindex < compptr->last_row_height) {
-	    (*forward_DCT) (cinfo, compptr,
-			    input_buf[compptr->component_index],
-			    coef->MCU_buffer[blkn],
-			    ypos, xpos, (JDIMENSION) blockcnt);
-	    if (blockcnt < compptr->MCU_width) {
-	      /* Create some dummy blocks at the right edge of the image. */
-	      FMEMZERO((void FAR *) coef->MCU_buffer[blkn + blockcnt],
-		       (compptr->MCU_width - blockcnt) * SIZEOF(JBLOCK));
-	      for (bi = blockcnt; bi < compptr->MCU_width; bi++) {
-		coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn+bi-1][0][0];
-	      }
-	    }
-	  } else {
-	    /* Create a row of dummy blocks at the bottom of the image. */
-	    FMEMZERO((void FAR *) coef->MCU_buffer[blkn],
-		     compptr->MCU_width * SIZEOF(JBLOCK));
-	    for (bi = 0; bi < compptr->MCU_width; bi++) {
-	      coef->MCU_buffer[blkn+bi][0][0] = coef->MCU_buffer[blkn-1][0][0];
-	    }
-	  }
-	  blkn += compptr->MCU_width;
-	  ypos += compptr->DCT_v_scaled_size;
-	}
-      }
-      /* Try to write the MCU.  In event of a suspension failure, we will
-       * re-DCT the MCU on restart (a bit inefficient, could be fixed...)
-       */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row(cinfo);
-  return TRUE;
-}
-
-
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-
-/*
- * Process some data in the first pass of a multi-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the image.
- * This amount of data is read from the source buffer, DCT'd and quantized,
- * and saved into the virtual arrays.  We also generate suitable dummy blocks
- * as needed at the right and lower edges.  (The dummy blocks are constructed
- * in the virtual arrays, which have been padded appropriately.)  This makes
- * it possible for subsequent passes not to worry about real vs. dummy blocks.
- *
- * We must also emit the data to the entropy encoder.  This is conveniently
- * done by calling compress_output() after we've loaded the current strip
- * of the virtual arrays.
- *
- * NB: input_buf contains a plane for each component in image.  All
- * components are DCT'd and loaded into the virtual arrays in this pass.
- * However, it may be that only a subset of the components are emitted to
- * the entropy encoder during this first pass; be careful about looking
- * at the scan-dependent variables (MCU dimensions, etc).
- */
-
-METHODDEF(boolean)
-compress_first_pass (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION blocks_across, MCUs_across, MCUindex;
-  int bi, ci, h_samp_factor, block_row, block_rows, ndummy;
-  JCOEF lastDC;
-  jpeg_component_info *compptr;
-  JBLOCKARRAY buffer;
-  JBLOCKROW thisblockrow, lastblockrow;
-  forward_DCT_ptr forward_DCT;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Align the virtual buffer for this component. */
-    buffer = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[ci],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, TRUE);
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (coef->iMCU_row_num < last_iMCU_row)
-      block_rows = compptr->v_samp_factor;
-    else {
-      /* NB: can't use last_row_height here, since may not be set! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-    }
-    blocks_across = compptr->width_in_blocks;
-    h_samp_factor = compptr->h_samp_factor;
-    /* Count number of dummy blocks to be added at the right margin. */
-    ndummy = (int) (blocks_across % h_samp_factor);
-    if (ndummy > 0)
-      ndummy = h_samp_factor - ndummy;
-    forward_DCT = cinfo->fdct->forward_DCT[ci];
-    /* Perform DCT for all non-dummy blocks in this iMCU row.  Each call
-     * on forward_DCT processes a complete horizontal row of DCT blocks.
-     */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      thisblockrow = buffer[block_row];
-      (*forward_DCT) (cinfo, compptr, input_buf[ci], thisblockrow,
-		      (JDIMENSION) (block_row * compptr->DCT_v_scaled_size),
-		      (JDIMENSION) 0, blocks_across);
-      if (ndummy > 0) {
-	/* Create dummy blocks at the right edge of the image. */
-	thisblockrow += blocks_across; /* => first dummy block */
-	FMEMZERO((void FAR *) thisblockrow, ndummy * SIZEOF(JBLOCK));
-	lastDC = thisblockrow[-1][0];
-	for (bi = 0; bi < ndummy; bi++) {
-	  thisblockrow[bi][0] = lastDC;
-	}
-      }
-    }
-    /* If at end of image, create dummy block rows as needed.
-     * The tricky part here is that within each MCU, we want the DC values
-     * of the dummy blocks to match the last real block's DC value.
-     * This squeezes a few more bytes out of the resulting file...
-     */
-    if (coef->iMCU_row_num == last_iMCU_row) {
-      blocks_across += ndummy;	/* include lower right corner */
-      MCUs_across = blocks_across / h_samp_factor;
-      for (block_row = block_rows; block_row < compptr->v_samp_factor;
-	   block_row++) {
-	thisblockrow = buffer[block_row];
-	lastblockrow = buffer[block_row-1];
-	FMEMZERO((void FAR *) thisblockrow,
-		 (size_t) (blocks_across * SIZEOF(JBLOCK)));
-	for (MCUindex = 0; MCUindex < MCUs_across; MCUindex++) {
-	  lastDC = lastblockrow[h_samp_factor-1][0];
-	  for (bi = 0; bi < h_samp_factor; bi++) {
-	    thisblockrow[bi][0] = lastDC;
-	  }
-	  thisblockrow += h_samp_factor; /* advance to next MCU in row */
-	  lastblockrow += h_samp_factor;
-	}
-      }
-    }
-  }
-  /* NB: compress_output will increment iMCU_row_num if successful.
-   * A suspension return will result in redoing all the work above next time.
-   */
-
-  /* Emit data to the entropy encoder, sharing code with subsequent passes */
-  return compress_output(cinfo, input_buf);
-}
-
-
-/*
- * Process some data in subsequent passes of a multi-pass case.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the scan.
- * The data is obtained from the virtual arrays and fed to the entropy coder.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf is ignored; it is likely to be a NULL pointer.
- */
-
-METHODDEF(boolean)
-compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  int blkn, ci, xindex, yindex, yoffset;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan.
-   * NB: during first pass, this is safe only because the buffers will
-   * already be aligned properly, so jmemmgr.c won't need to do any I/O.
-   */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	  for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
-	    coef->MCU_buffer[blkn++] = buffer_ptr++;
-	  }
-	}
-      }
-      /* Try to write the MCU. */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row(cinfo);
-  return TRUE;
-}
-
-#endif /* FULL_COEF_BUFFER_SUPPORTED */
-
-
-/*
- * Initialize coefficient buffer controller.
- */
-
-GLOBAL(void)
-jinit_c_coef_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_coef_ptr coef;
-
-  coef = (my_coef_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller));
-  cinfo->coef = (struct jpeg_c_coef_controller *) coef;
-  coef->pub.start_pass = start_pass_coef;
-
-  /* Create the coefficient buffer. */
-  if (need_full_buffer) {
-#ifdef FULL_COEF_BUFFER_SUPPORTED
-    /* Allocate a full-image virtual array for each component, */
-    /* padded to a multiple of samp_factor DCT blocks in each direction. */
-    int ci;
-    jpeg_component_info *compptr;
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) compptr->v_samp_factor);
-    }
-#else
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-  } else {
-    /* We only need a single-MCU buffer. */
-    JBLOCKROW buffer;
-    int i;
-
-    buffer = (JBLOCKROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-    for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) {
-      coef->MCU_buffer[i] = buffer + i;
-    }
-    coef->whole_image[0] = NULL; /* flag for no virtual arrays */
-  }
-}
--- a/DoConfig/fltk/jpeg/jccolor.c
+++ /dev/null
@@ -1,604 +1,0 @@
-/*
- * jccolor.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modified 2011-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains input colorspace conversion routines.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_converter pub; /* public fields */
-
-  /* Private state for RGB->YCC conversion */
-  INT32 * rgb_ycc_tab;		/* => table for RGB to YCbCr conversion */
-} my_color_converter;
-
-typedef my_color_converter * my_cconvert_ptr;
-
-
-/**************** RGB -> YCbCr conversion: most common case **************/
-
-/*
- * YCbCr is defined per Recommendation ITU-R BT.601-7 (03/2011),
- * previously known as Recommendation CCIR 601-1, except that Cb and Cr
- * are normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
- * sRGB (standard RGB color space) is defined per IEC 61966-2-1:1999.
- * sYCC (standard luma-chroma-chroma color space with extended gamut)
- * is defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex F.
- * bg-sRGB and bg-sYCC (big gamut standard color spaces)
- * are defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex G.
- * Note that the derived conversion coefficients given in some of these
- * documents are imprecise.  The general conversion equations are
- *	Y  = Kr * R + (1 - Kr - Kb) * G + Kb * B
- *	Cb = 0.5 * (B - Y) / (1 - Kb)
- *	Cr = 0.5 * (R - Y) / (1 - Kr)
- * With Kr = 0.299 and Kb = 0.114 (derived according to SMPTE RP 177-1993
- * from the 1953 FCC NTSC primaries and CIE Illuminant C),
- * the conversion equations to be implemented are therefore
- *	Y  =  0.299 * R + 0.587 * G + 0.114 * B
- *	Cb = -0.168735892 * R - 0.331264108 * G + 0.5 * B + CENTERJSAMPLE
- *	Cr =  0.5 * R - 0.418687589 * G - 0.081312411 * B + CENTERJSAMPLE
- * Note: older versions of the IJG code used a zero offset of MAXJSAMPLE/2,
- * rather than CENTERJSAMPLE, for Cb and Cr.  This gave equal positive and
- * negative swings for Cb/Cr, but meant that grayscale values (Cb=Cr=0)
- * were not represented exactly.  Now we sacrifice exact representation of
- * maximum red and maximum blue in order to get exact grayscales.
- *
- * To avoid floating-point arithmetic, we represent the fractional constants
- * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
- * the products by 2^16, with appropriate rounding, to get the correct answer.
- *
- * For even more speed, we avoid doing any multiplications in the inner loop
- * by precalculating the constants times R,G,B for all possible values.
- * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
- * for 9-bit to 12-bit samples it is still acceptable.  It's not very
- * reasonable for 16-bit samples, but if you want lossless storage you
- * shouldn't be changing colorspace anyway.
- * The CENTERJSAMPLE offsets and the rounding fudge-factor of 0.5 are included
- * in the tables to save adding them separately in the inner loop.
- */
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define CBCR_OFFSET	((INT32) CENTERJSAMPLE << SCALEBITS)
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-/* We allocate one big table and divide it up into eight parts, instead of
- * doing eight alloc_small requests.  This lets us use a single table base
- * address, which can be held in a register in the inner loops on many
- * machines (more than can hold all eight addresses, anyway).
- */
-
-#define R_Y_OFF		0			/* offset to R => Y section */
-#define G_Y_OFF		(1*(MAXJSAMPLE+1))	/* offset to G => Y section */
-#define B_Y_OFF		(2*(MAXJSAMPLE+1))	/* etc. */
-#define R_CB_OFF	(3*(MAXJSAMPLE+1))
-#define G_CB_OFF	(4*(MAXJSAMPLE+1))
-#define B_CB_OFF	(5*(MAXJSAMPLE+1))
-#define R_CR_OFF	B_CB_OFF		/* B=>Cb, R=>Cr are the same */
-#define G_CR_OFF	(6*(MAXJSAMPLE+1))
-#define B_CR_OFF	(7*(MAXJSAMPLE+1))
-#define TABLE_SIZE	(8*(MAXJSAMPLE+1))
-
-
-/*
- * Initialize for RGB->YCC colorspace conversion.
- */
-
-METHODDEF(void)
-rgb_ycc_start (j_compress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  INT32 * rgb_ycc_tab;
-  INT32 i;
-
-  /* Allocate and fill in the conversion tables. */
-  cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(TABLE_SIZE * SIZEOF(INT32)));
-
-  for (i = 0; i <= MAXJSAMPLE; i++) {
-    rgb_ycc_tab[i+R_Y_OFF] = FIX(0.299) * i;
-    rgb_ycc_tab[i+G_Y_OFF] = FIX(0.587) * i;
-    rgb_ycc_tab[i+B_Y_OFF] = FIX(0.114) * i   + ONE_HALF;
-    rgb_ycc_tab[i+R_CB_OFF] = (-FIX(0.168735892)) * i;
-    rgb_ycc_tab[i+G_CB_OFF] = (-FIX(0.331264108)) * i;
-    /* We use a rounding fudge-factor of 0.5-epsilon for Cb and Cr.
-     * This ensures that the maximum output will round to MAXJSAMPLE
-     * not MAXJSAMPLE+1, and thus that we don't have to range-limit.
-     */
-    rgb_ycc_tab[i+B_CB_OFF] = FIX(0.5) * i    + CBCR_OFFSET + ONE_HALF-1;
-/*  B=>Cb and R=>Cr tables are the same
-    rgb_ycc_tab[i+R_CR_OFF] = FIX(0.5) * i    + CBCR_OFFSET + ONE_HALF-1;
-*/
-    rgb_ycc_tab[i+G_CR_OFF] = (-FIX(0.418687589)) * i;
-    rgb_ycc_tab[i+B_CR_OFF] = (-FIX(0.081312411)) * i;
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- *
- * Note that we change from the application's interleaved-pixel format
- * to our internal noninterleaved, one-plane-per-component format.
- * The input buffer is therefore three times as wide as the output buffer.
- *
- * A starting row offset is provided only for the output buffer.  The caller
- * can easily adjust the passed input_buf value to accommodate any row
- * offset required on that side.
- */
-
-METHODDEF(void)
-rgb_ycc_convert (j_compress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		 JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register int r, g, b;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr[RGB_RED]);
-      g = GETJSAMPLE(inptr[RGB_GREEN]);
-      b = GETJSAMPLE(inptr[RGB_BLUE]);
-      /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
-       * must be too; we do not need an explicit range-limiting operation.
-       * Hence the value being shifted is never negative, and we don't
-       * need the general RIGHT_SHIFT macro.
-       */
-      /* Y */
-      outptr0[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-      /* Cb */
-      outptr1[col] = (JSAMPLE)
-		((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
-		 >> SCALEBITS);
-      /* Cr */
-      outptr2[col] = (JSAMPLE)
-		((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
-		 >> SCALEBITS);
-      inptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/**************** Cases other than RGB -> YCbCr **************/
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles RGB->grayscale conversion, which is the same
- * as the RGB->Y portion of RGB->YCbCr.
- * We assume rgb_ycc_start has been called (we only use the Y tables).
- */
-
-METHODDEF(void)
-rgb_gray_convert (j_compress_ptr cinfo,
-		  JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		  JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register int r, g, b;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr = output_buf[0][output_row++];
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr[RGB_RED]);
-      g = GETJSAMPLE(inptr[RGB_GREEN]);
-      b = GETJSAMPLE(inptr[RGB_BLUE]);
-      /* Y */
-      outptr[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-      inptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles Adobe-style CMYK->YCCK conversion,
- * where we convert R=1-C, G=1-M, and B=1-Y to YCbCr using the same
- * conversion as above, while passing K (black) unchanged.
- * We assume rgb_ycc_start has been called.
- */
-
-METHODDEF(void)
-cmyk_ycck_convert (j_compress_ptr cinfo,
-		   JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		   JDIMENSION output_row, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register INT32 * ctab = cconvert->rgb_ycc_tab;
-  register int r, g, b;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2, outptr3;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    outptr3 = output_buf[3][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = MAXJSAMPLE - GETJSAMPLE(inptr[0]);
-      g = MAXJSAMPLE - GETJSAMPLE(inptr[1]);
-      b = MAXJSAMPLE - GETJSAMPLE(inptr[2]);
-      /* K passes through as-is */
-      outptr3[col] = inptr[3];	/* don't need GETJSAMPLE here */
-      /* If the inputs are 0..MAXJSAMPLE, the outputs of these equations
-       * must be too; we do not need an explicit range-limiting operation.
-       * Hence the value being shifted is never negative, and we don't
-       * need the general RIGHT_SHIFT macro.
-       */
-      /* Y */
-      outptr0[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-      /* Cb */
-      outptr1[col] = (JSAMPLE)
-		((ctab[r+R_CB_OFF] + ctab[g+G_CB_OFF] + ctab[b+B_CB_OFF])
-		 >> SCALEBITS);
-      /* Cr */
-      outptr2[col] = (JSAMPLE)
-		((ctab[r+R_CR_OFF] + ctab[g+G_CR_OFF] + ctab[b+B_CR_OFF])
-		 >> SCALEBITS);
-      inptr += 4;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * [R,G,B] to [R-G,G,B-G] conversion with modulo calculation
- * (forward reversible color transform).
- * This can be seen as an adaption of the general RGB->YCbCr
- * conversion equation with Kr = Kb = 0, while replacing the
- * normalization by modulo calculation.
- */
-
-METHODDEF(void)
-rgb_rgb1_convert (j_compress_ptr cinfo,
-		  JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		  JDIMENSION output_row, int num_rows)
-{
-  register int r, g, b;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr[RGB_RED]);
-      g = GETJSAMPLE(inptr[RGB_GREEN]);
-      b = GETJSAMPLE(inptr[RGB_BLUE]);
-      /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
-       * (modulo) operator is equivalent to the bitmask operator AND.
-       */
-      outptr0[col] = (JSAMPLE) ((r - g + CENTERJSAMPLE) & MAXJSAMPLE);
-      outptr1[col] = (JSAMPLE) g;
-      outptr2[col] = (JSAMPLE) ((b - g + CENTERJSAMPLE) & MAXJSAMPLE);
-      inptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles grayscale output with no conversion.
- * The source can be either plain grayscale or YCC (since Y == gray).
- */
-
-METHODDEF(void)
-grayscale_convert (j_compress_ptr cinfo,
-		   JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-		   JDIMENSION output_row, int num_rows)
-{
-  int instride = cinfo->input_components;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr = output_buf[0][output_row++];
-    for (col = 0; col < num_cols; col++) {
-      outptr[col] = inptr[0];	/* don't need GETJSAMPLE() here */
-      inptr += instride;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * No colorspace conversion, but change from interleaved
- * to separate-planes representation.
- */
-
-METHODDEF(void)
-rgb_convert (j_compress_ptr cinfo,
-	     JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-	     JDIMENSION output_row, int num_rows)
-{
-  register JSAMPROW inptr;
-  register JSAMPROW outptr0, outptr1, outptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    inptr = *input_buf++;
-    outptr0 = output_buf[0][output_row];
-    outptr1 = output_buf[1][output_row];
-    outptr2 = output_buf[2][output_row];
-    output_row++;
-    for (col = 0; col < num_cols; col++) {
-      /* We can dispense with GETJSAMPLE() here */
-      outptr0[col] = inptr[RGB_RED];
-      outptr1[col] = inptr[RGB_GREEN];
-      outptr2[col] = inptr[RGB_BLUE];
-      inptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Convert some rows of samples to the JPEG colorspace.
- * This version handles multi-component colorspaces without conversion.
- * We assume input_components == num_components.
- */
-
-METHODDEF(void)
-null_convert (j_compress_ptr cinfo,
-	      JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-	      JDIMENSION output_row, int num_rows)
-{
-  int ci;
-  register int nc = cinfo->num_components;
-  register JSAMPROW inptr;
-  register JSAMPROW outptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->image_width;
-
-  while (--num_rows >= 0) {
-    /* It seems fastest to make a separate pass for each component. */
-    for (ci = 0; ci < nc; ci++) {
-      inptr = input_buf[0] + ci;
-      outptr = output_buf[ci][output_row];
-      for (col = 0; col < num_cols; col++) {
-	*outptr++ = *inptr;	/* don't need GETJSAMPLE() here */
-	inptr += nc;
-      }
-    }
-    input_buf++;
-    output_row++;
-  }
-}
-
-
-/*
- * Empty method for start_pass.
- */
-
-METHODDEF(void)
-null_method (j_compress_ptr cinfo)
-{
-  /* no work needed */
-}
-
-
-/*
- * Module initialization routine for input colorspace conversion.
- */
-
-GLOBAL(void)
-jinit_color_converter (j_compress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert;
-
-  cconvert = (my_cconvert_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_color_converter));
-  cinfo->cconvert = &cconvert->pub;
-  /* set start_pass to null method until we find out differently */
-  cconvert->pub.start_pass = null_method;
-
-  /* Make sure input_components agrees with in_color_space */
-  switch (cinfo->in_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->input_components != 1)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  case JCS_RGB:
-  case JCS_BG_RGB:
-    if (cinfo->input_components != RGB_PIXELSIZE)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  case JCS_YCbCr:
-  case JCS_BG_YCC:
-    if (cinfo->input_components != 3)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  case JCS_CMYK:
-  case JCS_YCCK:
-    if (cinfo->input_components != 4)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-
-  default:			/* JCS_UNKNOWN can be anything */
-    if (cinfo->input_components < 1)
-      ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-    break;
-  }
-
-  /* Support color transform only for RGB colorspaces */
-  if (cinfo->color_transform &&
-      cinfo->jpeg_color_space != JCS_RGB &&
-      cinfo->jpeg_color_space != JCS_BG_RGB)
-    ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-
-  /* Check num_components, set conversion method based on requested space */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->num_components != 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    switch (cinfo->in_color_space) {
-    case JCS_GRAYSCALE:
-    case JCS_YCbCr:
-    case JCS_BG_YCC:
-      cconvert->pub.color_convert = grayscale_convert;
-      break;
-    case JCS_RGB:
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = rgb_gray_convert;
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  case JCS_RGB:
-  case JCS_BG_RGB:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == cinfo->jpeg_color_space) {
-      switch (cinfo->color_transform) {
-      case JCT_NONE:
-	cconvert->pub.color_convert = rgb_convert;
-	break;
-      case JCT_SUBTRACT_GREEN:
-	cconvert->pub.color_convert = rgb_rgb1_convert;
-	break;
-      default:
-	ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-      }
-    } else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_YCbCr:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    switch (cinfo->in_color_space) {
-    case JCS_RGB:
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = rgb_ycc_convert;
-      break;
-    case JCS_YCbCr:
-      cconvert->pub.color_convert = null_convert;
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  case JCS_BG_YCC:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    switch (cinfo->in_color_space) {
-    case JCS_RGB:
-      /* For conversion from normal RGB input to BG_YCC representation,
-       * the Cb/Cr values are first computed as usual, and then
-       * quantized further after DCT processing by a factor of
-       * 2 in reference to the nominal quantization factor.
-       */
-      /* need quantization scale by factor of 2 after DCT */
-      cinfo->comp_info[1].component_needed = TRUE;
-      cinfo->comp_info[2].component_needed = TRUE;
-      /* compute normal YCC first */
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = rgb_ycc_convert;
-      break;
-    case JCS_YCbCr:
-      /* need quantization scale by factor of 2 after DCT */
-      cinfo->comp_info[1].component_needed = TRUE;
-      cinfo->comp_info[2].component_needed = TRUE;
-      /*FALLTHROUGH*/
-    case JCS_BG_YCC:
-      /* Pass through for BG_YCC input */
-      cconvert->pub.color_convert = null_convert;
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  case JCS_CMYK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    if (cinfo->in_color_space == JCS_CMYK)
-      cconvert->pub.color_convert = null_convert;
-    else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_YCCK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    switch (cinfo->in_color_space) {
-    case JCS_CMYK:
-      cconvert->pub.start_pass = rgb_ycc_start;
-      cconvert->pub.color_convert = cmyk_ycck_convert;
-      break;
-    case JCS_YCCK:
-      cconvert->pub.color_convert = null_convert;
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  default:			/* allow null conversion of JCS_UNKNOWN */
-    if (cinfo->jpeg_color_space != cinfo->in_color_space ||
-	cinfo->num_components != cinfo->input_components)
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    cconvert->pub.color_convert = null_convert;
-    break;
-  }
-}
--- a/DoConfig/fltk/jpeg/jcdctmgr.c
+++ /dev/null
@@ -1,477 +1,0 @@
-/*
- * jcdctmgr.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the forward-DCT management logic.
- * This code selects a particular DCT implementation to be used,
- * and it performs related housekeeping chores including coefficient
- * quantization.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-
-/* Private subobject for this module */
-
-typedef struct {
-  struct jpeg_forward_dct pub;	/* public fields */
-
-  /* Pointer to the DCT routine actually in use */
-  forward_DCT_method_ptr do_dct[MAX_COMPONENTS];
-
-#ifdef DCT_FLOAT_SUPPORTED
-  /* Same as above for the floating-point case. */
-  float_DCT_method_ptr do_float_dct[MAX_COMPONENTS];
-#endif
-} my_fdct_controller;
-
-typedef my_fdct_controller * my_fdct_ptr;
-
-
-/* The allocated post-DCT divisor tables -- big enough for any
- * supported variant and not identical to the quant table entries,
- * because of scaling (especially for an unnormalized DCT) --
- * are pointed to by dct_table in the per-component comp_info
- * structures.  Each table is given in normal array order.
- */
-
-typedef union {
-  DCTELEM int_array[DCTSIZE2];
-#ifdef DCT_FLOAT_SUPPORTED
-  FAST_FLOAT float_array[DCTSIZE2];
-#endif
-} divisor_table;
-
-
-/* The current scaled-DCT routines require ISLOW-style divisor tables,
- * so be sure to compile that code if either ISLOW or SCALING is requested.
- */
-#ifdef DCT_ISLOW_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#else
-#ifdef DCT_SCALING_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#endif
-#endif
-
-
-/*
- * Perform forward DCT on one or more blocks of a component.
- *
- * The input samples are taken from the sample_data[] array starting at
- * position start_row/start_col, and moving to the right for any additional
- * blocks. The quantized coefficients are returned in coef_blocks[].
- */
-
-METHODDEF(void)
-forward_DCT (j_compress_ptr cinfo, jpeg_component_info * compptr,
-	     JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-	     JDIMENSION start_row, JDIMENSION start_col,
-	     JDIMENSION num_blocks)
-/* This version is used for integer DCT implementations. */
-{
-  /* This routine is heavily used, so it's worth coding it tightly. */
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  forward_DCT_method_ptr do_dct = fdct->do_dct[compptr->component_index];
-  DCTELEM * divisors = (DCTELEM *) compptr->dct_table;
-  DCTELEM workspace[DCTSIZE2];	/* work area for FDCT subroutine */
-  JDIMENSION bi;
-
-  sample_data += start_row;	/* fold in the vertical offset once */
-
-  for (bi = 0; bi < num_blocks; bi++, start_col += compptr->DCT_h_scaled_size) {
-    /* Perform the DCT */
-    (*do_dct) (workspace, sample_data, start_col);
-
-    /* Quantize/descale the coefficients, and store into coef_blocks[] */
-    { register DCTELEM temp, qval;
-      register int i;
-      register JCOEFPTR output_ptr = coef_blocks[bi];
-
-      for (i = 0; i < DCTSIZE2; i++) {
-	qval = divisors[i];
-	temp = workspace[i];
-	/* Divide the coefficient value by qval, ensuring proper rounding.
-	 * Since C does not specify the direction of rounding for negative
-	 * quotients, we have to force the dividend positive for portability.
-	 *
-	 * In most files, at least half of the output values will be zero
-	 * (at default quantization settings, more like three-quarters...)
-	 * so we should ensure that this case is fast.  On many machines,
-	 * a comparison is enough cheaper than a divide to make a special test
-	 * a win.  Since both inputs will be nonnegative, we need only test
-	 * for a < b to discover whether a/b is 0.
-	 * If your machine's division is fast enough, define FAST_DIVIDE.
-	 */
-#ifdef FAST_DIVIDE
-#define DIVIDE_BY(a,b)	a /= b
-#else
-#define DIVIDE_BY(a,b)	if (a >= b) a /= b; else a = 0
-#endif
-	if (temp < 0) {
-	  temp = -temp;
-	  temp += qval>>1;	/* for rounding */
-	  DIVIDE_BY(temp, qval);
-	  temp = -temp;
-	} else {
-	  temp += qval>>1;	/* for rounding */
-	  DIVIDE_BY(temp, qval);
-	}
-	output_ptr[i] = (JCOEF) temp;
-      }
-    }
-  }
-}
-
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-METHODDEF(void)
-forward_DCT_float (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		   JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-		   JDIMENSION start_row, JDIMENSION start_col,
-		   JDIMENSION num_blocks)
-/* This version is used for floating-point DCT implementations. */
-{
-  /* This routine is heavily used, so it's worth coding it tightly. */
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  float_DCT_method_ptr do_dct = fdct->do_float_dct[compptr->component_index];
-  FAST_FLOAT * divisors = (FAST_FLOAT *) compptr->dct_table;
-  FAST_FLOAT workspace[DCTSIZE2]; /* work area for FDCT subroutine */
-  JDIMENSION bi;
-
-  sample_data += start_row;	/* fold in the vertical offset once */
-
-  for (bi = 0; bi < num_blocks; bi++, start_col += compptr->DCT_h_scaled_size) {
-    /* Perform the DCT */
-    (*do_dct) (workspace, sample_data, start_col);
-
-    /* Quantize/descale the coefficients, and store into coef_blocks[] */
-    { register FAST_FLOAT temp;
-      register int i;
-      register JCOEFPTR output_ptr = coef_blocks[bi];
-
-      for (i = 0; i < DCTSIZE2; i++) {
-	/* Apply the quantization and scaling factor */
-	temp = workspace[i] * divisors[i];
-	/* Round to nearest integer.
-	 * Since C does not specify the direction of rounding for negative
-	 * quotients, we have to force the dividend positive for portability.
-	 * The maximum coefficient size is +-16K (for 12-bit data), so this
-	 * code should work for either 16-bit or 32-bit ints.
-	 */
-	output_ptr[i] = (JCOEF) ((int) (temp + (FAST_FLOAT) 16384.5) - 16384);
-      }
-    }
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
-
-
-/*
- * Initialize for a processing pass.
- * Verify that all referenced Q-tables are present, and set up
- * the divisor table for each one.
- * In the current implementation, DCT of all components is done during
- * the first pass, even if only some components will be output in the
- * first scan.  Hence all components should be examined here.
- */
-
-METHODDEF(void)
-start_pass_fdctmgr (j_compress_ptr cinfo)
-{
-  my_fdct_ptr fdct = (my_fdct_ptr) cinfo->fdct;
-  int ci, qtblno, i;
-  jpeg_component_info *compptr;
-  int method = 0;
-  JQUANT_TBL * qtbl;
-  DCTELEM * dtbl;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Select the proper DCT routine for this component's scaling */
-    switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) {
-#ifdef DCT_SCALING_SUPPORTED
-    case ((1 << 8) + 1):
-      fdct->do_dct[ci] = jpeg_fdct_1x1;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((2 << 8) + 2):
-      fdct->do_dct[ci] = jpeg_fdct_2x2;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((3 << 8) + 3):
-      fdct->do_dct[ci] = jpeg_fdct_3x3;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((4 << 8) + 4):
-      fdct->do_dct[ci] = jpeg_fdct_4x4;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((5 << 8) + 5):
-      fdct->do_dct[ci] = jpeg_fdct_5x5;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((6 << 8) + 6):
-      fdct->do_dct[ci] = jpeg_fdct_6x6;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((7 << 8) + 7):
-      fdct->do_dct[ci] = jpeg_fdct_7x7;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((9 << 8) + 9):
-      fdct->do_dct[ci] = jpeg_fdct_9x9;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((10 << 8) + 10):
-      fdct->do_dct[ci] = jpeg_fdct_10x10;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((11 << 8) + 11):
-      fdct->do_dct[ci] = jpeg_fdct_11x11;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((12 << 8) + 12):
-      fdct->do_dct[ci] = jpeg_fdct_12x12;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((13 << 8) + 13):
-      fdct->do_dct[ci] = jpeg_fdct_13x13;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((14 << 8) + 14):
-      fdct->do_dct[ci] = jpeg_fdct_14x14;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((15 << 8) + 15):
-      fdct->do_dct[ci] = jpeg_fdct_15x15;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((16 << 8) + 16):
-      fdct->do_dct[ci] = jpeg_fdct_16x16;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((16 << 8) + 8):
-      fdct->do_dct[ci] = jpeg_fdct_16x8;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((14 << 8) + 7):
-      fdct->do_dct[ci] = jpeg_fdct_14x7;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((12 << 8) + 6):
-      fdct->do_dct[ci] = jpeg_fdct_12x6;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((10 << 8) + 5):
-      fdct->do_dct[ci] = jpeg_fdct_10x5;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((8 << 8) + 4):
-      fdct->do_dct[ci] = jpeg_fdct_8x4;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((6 << 8) + 3):
-      fdct->do_dct[ci] = jpeg_fdct_6x3;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((4 << 8) + 2):
-      fdct->do_dct[ci] = jpeg_fdct_4x2;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((2 << 8) + 1):
-      fdct->do_dct[ci] = jpeg_fdct_2x1;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((8 << 8) + 16):
-      fdct->do_dct[ci] = jpeg_fdct_8x16;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((7 << 8) + 14):
-      fdct->do_dct[ci] = jpeg_fdct_7x14;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((6 << 8) + 12):
-      fdct->do_dct[ci] = jpeg_fdct_6x12;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((5 << 8) + 10):
-      fdct->do_dct[ci] = jpeg_fdct_5x10;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((4 << 8) + 8):
-      fdct->do_dct[ci] = jpeg_fdct_4x8;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((3 << 8) + 6):
-      fdct->do_dct[ci] = jpeg_fdct_3x6;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((2 << 8) + 4):
-      fdct->do_dct[ci] = jpeg_fdct_2x4;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-    case ((1 << 8) + 2):
-      fdct->do_dct[ci] = jpeg_fdct_1x2;
-      method = JDCT_ISLOW;	/* jfdctint uses islow-style table */
-      break;
-#endif
-    case ((DCTSIZE << 8) + DCTSIZE):
-      switch (cinfo->dct_method) {
-#ifdef DCT_ISLOW_SUPPORTED
-      case JDCT_ISLOW:
-	fdct->do_dct[ci] = jpeg_fdct_islow;
-	method = JDCT_ISLOW;
-	break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-      case JDCT_IFAST:
-	fdct->do_dct[ci] = jpeg_fdct_ifast;
-	method = JDCT_IFAST;
-	break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-      case JDCT_FLOAT:
-	fdct->do_float_dct[ci] = jpeg_fdct_float;
-	method = JDCT_FLOAT;
-	break;
-#endif
-      default:
-	ERREXIT(cinfo, JERR_NOT_COMPILED);
-	break;
-      }
-      break;
-    default:
-      ERREXIT2(cinfo, JERR_BAD_DCTSIZE,
-	       compptr->DCT_h_scaled_size, compptr->DCT_v_scaled_size);
-      break;
-    }
-    qtblno = compptr->quant_tbl_no;
-    /* Make sure specified quantization table is present */
-    if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS ||
-	cinfo->quant_tbl_ptrs[qtblno] == NULL)
-      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
-    qtbl = cinfo->quant_tbl_ptrs[qtblno];
-    /* Create divisor table from quant table */
-    switch (method) {
-#ifdef PROVIDE_ISLOW_TABLES
-    case JDCT_ISLOW:
-      /* For LL&M IDCT method, divisors are equal to raw quantization
-       * coefficients multiplied by 8 (to counteract scaling).
-       */
-      dtbl = (DCTELEM *) compptr->dct_table;
-      for (i = 0; i < DCTSIZE2; i++) {
-	dtbl[i] =
-	  ((DCTELEM) qtbl->quantval[i]) << (compptr->component_needed ? 4 : 3);
-      }
-      fdct->pub.forward_DCT[ci] = forward_DCT;
-      break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-    case JDCT_IFAST:
-      {
-	/* For AA&N IDCT method, divisors are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * We apply a further scale factor of 8.
-	 */
-#define CONST_BITS 14
-	static const INT16 aanscales[DCTSIZE2] = {
-	  /* precomputed values scaled up by 14 bits */
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-	  21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-	  19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-	   8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-	   4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-	};
-	SHIFT_TEMPS
-
-	dtbl = (DCTELEM *) compptr->dct_table;
-	for (i = 0; i < DCTSIZE2; i++) {
-	  dtbl[i] = (DCTELEM)
-	    DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
-				  (INT32) aanscales[i]),
-		    compptr->component_needed ? CONST_BITS-4 : CONST_BITS-3);
-	}
-      }
-      fdct->pub.forward_DCT[ci] = forward_DCT;
-      break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-    case JDCT_FLOAT:
-      {
-	/* For float AA&N IDCT method, divisors are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * We apply a further scale factor of 8.
-	 * What's actually stored is 1/divisor so that the inner loop can
-	 * use a multiplication rather than a division.
-	 */
-	FAST_FLOAT * fdtbl = (FAST_FLOAT *) compptr->dct_table;
-	int row, col;
-	static const double aanscalefactor[DCTSIZE] = {
-	  1.0, 1.387039845, 1.306562965, 1.175875602,
-	  1.0, 0.785694958, 0.541196100, 0.275899379
-	};
-
-	i = 0;
-	for (row = 0; row < DCTSIZE; row++) {
-	  for (col = 0; col < DCTSIZE; col++) {
-	    fdtbl[i] = (FAST_FLOAT)
-	      (1.0 / ((double) qtbl->quantval[i] *
-		      aanscalefactor[row] * aanscalefactor[col] *
-		      (compptr->component_needed ? 16.0 : 8.0)));
-	    i++;
-	  }
-	}
-      }
-      fdct->pub.forward_DCT[ci] = forward_DCT_float;
-      break;
-#endif
-    default:
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-      break;
-    }
-  }
-}
-
-
-/*
- * Initialize FDCT manager.
- */
-
-GLOBAL(void)
-jinit_forward_dct (j_compress_ptr cinfo)
-{
-  my_fdct_ptr fdct;
-  int ci;
-  jpeg_component_info *compptr;
-
-  fdct = (my_fdct_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_fdct_controller));
-  cinfo->fdct = &fdct->pub;
-  fdct->pub.start_pass = start_pass_fdctmgr;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Allocate a divisor table for each component */
-    compptr->dct_table =
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(divisor_table));
-  }
-}
--- a/DoConfig/fltk/jpeg/jchuff.c
+++ /dev/null
@@ -1,1573 +1,0 @@
-/*
- * jchuff.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2006-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy encoding routines.
- * Both sequential and progressive modes are supported in this single module.
- *
- * Much of the complexity here has to do with supporting output suspension.
- * If the data destination module demands suspension, we want to be able to
- * back up to the start of the current MCU.  To do this, we copy state
- * variables into local working storage, and update them back to the
- * permanent JPEG objects only upon successful completion of an MCU.
- *
- * We do not support output suspension for the progressive JPEG mode, since
- * the library currently does not allow multiple-scan files to be written
- * with output suspension.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* The legal range of a DCT coefficient is
- *  -1024 .. +1023  for 8-bit data;
- * -16384 .. +16383 for 12-bit data.
- * Hence the magnitude should always fit in 10 or 14 bits respectively.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MAX_COEF_BITS 10
-#else
-#define MAX_COEF_BITS 14
-#endif
-
-/* Derived data constructed for each Huffman table */
-
-typedef struct {
-  unsigned int ehufco[256];	/* code for each symbol */
-  char ehufsi[256];		/* length of code for each symbol */
-  /* If no code has been allocated for a symbol S, ehufsi[S] contains 0 */
-} c_derived_tbl;
-
-
-/* Expanded entropy encoder object for Huffman encoding.
- *
- * The savable_state subrecord contains fields that change within an MCU,
- * but must not be updated permanently until we complete the MCU.
- */
-
-typedef struct {
-  INT32 put_buffer;		/* current bit-accumulation buffer */
-  int put_bits;			/* # of bits now in it */
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-} savable_state;
-
-/* This macro is to work around compilers with missing or broken
- * structure assignment.  You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest,src)  ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest,src)  \
-	((dest).put_buffer = (src).put_buffer, \
-	 (dest).put_bits = (src).put_bits, \
-	 (dest).last_dc_val[0] = (src).last_dc_val[0], \
-	 (dest).last_dc_val[1] = (src).last_dc_val[1], \
-	 (dest).last_dc_val[2] = (src).last_dc_val[2], \
-	 (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
-typedef struct {
-  struct jpeg_entropy_encoder pub; /* public fields */
-
-  savable_state saved;		/* Bit buffer & DC state at start of MCU */
-
-  /* These fields are NOT loaded into local working state. */
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-  int next_restart_num;		/* next restart number to write (0-7) */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  c_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS];
-  c_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS];
-
-  /* Statistics tables for optimization */
-  long * dc_count_ptrs[NUM_HUFF_TBLS];
-  long * ac_count_ptrs[NUM_HUFF_TBLS];
-
-  /* Following fields used only in progressive mode */
-
-  /* Mode flag: TRUE for optimization, FALSE for actual data output */
-  boolean gather_statistics;
-
-  /* next_output_byte/free_in_buffer are local copies of cinfo->dest fields.
-   */
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-  j_compress_ptr cinfo;		/* link to cinfo (needed for dump_buffer) */
-
-  /* Coding status for AC components */
-  int ac_tbl_no;		/* the table number of the single component */
-  unsigned int EOBRUN;		/* run length of EOBs */
-  unsigned int BE;		/* # of buffered correction bits before MCU */
-  char * bit_buffer;		/* buffer for correction bits (1 per char) */
-  /* packing correction bits tightly would save some space but cost time... */
-} huff_entropy_encoder;
-
-typedef huff_entropy_encoder * huff_entropy_ptr;
-
-/* Working state while writing an MCU (sequential mode).
- * This struct contains all the fields that are needed by subroutines.
- */
-
-typedef struct {
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-  savable_state cur;		/* Current bit buffer & DC state */
-  j_compress_ptr cinfo;		/* dump_buffer needs access to this */
-} working_state;
-
-/* MAX_CORR_BITS is the number of bits the AC refinement correction-bit
- * buffer can hold.  Larger sizes may slightly improve compression, but
- * 1000 is already well into the realm of overkill.
- * The minimum safe size is 64 bits.
- */
-
-#define MAX_CORR_BITS  1000	/* Max # of correction bits I can buffer */
-
-/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32.
- * We assume that int right shift is unsigned if INT32 right shift is,
- * which should be safe.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define ISHIFT_TEMPS	int ishift_temp;
-#define IRIGHT_SHIFT(x,shft)  \
-	((ishift_temp = (x)) < 0 ? \
-	 (ishift_temp >> (shft)) | ((~0) << (16-(shft))) : \
-	 (ishift_temp >> (shft)))
-#else
-#define ISHIFT_TEMPS
-#define IRIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-
-/*
- * Compute the derived values for a Huffman table.
- * This routine also performs some validation checks on the table.
- */
-
-LOCAL(void)
-jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno,
-			 c_derived_tbl ** pdtbl)
-{
-  JHUFF_TBL *htbl;
-  c_derived_tbl *dtbl;
-  int p, i, l, lastp, si, maxsymbol;
-  char huffsize[257];
-  unsigned int huffcode[257];
-  unsigned int code;
-
-  /* Note that huffsize[] and huffcode[] are filled in code-length order,
-   * paralleling the order of the symbols themselves in htbl->huffval[].
-   */
-
-  /* Find the input Huffman table */
-  if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-  htbl =
-    isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno];
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-
-  /* Allocate a workspace if we haven't already done so. */
-  if (*pdtbl == NULL)
-    *pdtbl = (c_derived_tbl *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(c_derived_tbl));
-  dtbl = *pdtbl;
-  
-  /* Figure C.1: make table of Huffman code length for each symbol */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    i = (int) htbl->bits[l];
-    if (i < 0 || p + i > 256)	/* protect against table overrun */
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    while (i--)
-      huffsize[p++] = (char) l;
-  }
-  huffsize[p] = 0;
-  lastp = p;
-  
-  /* Figure C.2: generate the codes themselves */
-  /* We also validate that the counts represent a legal Huffman code tree. */
-
-  code = 0;
-  si = huffsize[0];
-  p = 0;
-  while (huffsize[p]) {
-    while (((int) huffsize[p]) == si) {
-      huffcode[p++] = code;
-      code++;
-    }
-    /* code is now 1 more than the last code used for codelength si; but
-     * it must still fit in si bits, since no code is allowed to be all ones.
-     */
-    if (((INT32) code) >= (((INT32) 1) << si))
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    code <<= 1;
-    si++;
-  }
-  
-  /* Figure C.3: generate encoding tables */
-  /* These are code and size indexed by symbol value */
-
-  /* Set all codeless symbols to have code length 0;
-   * this lets us detect duplicate VAL entries here, and later
-   * allows emit_bits to detect any attempt to emit such symbols.
-   */
-  MEMZERO(dtbl->ehufsi, SIZEOF(dtbl->ehufsi));
-
-  /* This is also a convenient place to check for out-of-range
-   * and duplicated VAL entries.  We allow 0..255 for AC symbols
-   * but only 0..15 for DC.  (We could constrain them further
-   * based on data depth and mode, but this seems enough.)
-   */
-  maxsymbol = isDC ? 15 : 255;
-
-  for (p = 0; p < lastp; p++) {
-    i = htbl->huffval[p];
-    if (i < 0 || i > maxsymbol || dtbl->ehufsi[i])
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    dtbl->ehufco[i] = huffcode[p];
-    dtbl->ehufsi[i] = huffsize[p];
-  }
-}
-
-
-/* Outputting bytes to the file.
- * NB: these must be called only when actually outputting,
- * that is, entropy->gather_statistics == FALSE.
- */
-
-/* Emit a byte, taking 'action' if must suspend. */
-#define emit_byte_s(state,val,action)  \
-	{ *(state)->next_output_byte++ = (JOCTET) (val);  \
-	  if (--(state)->free_in_buffer == 0)  \
-	    if (! dump_buffer_s(state))  \
-	      { action; } }
-
-/* Emit a byte */
-#define emit_byte_e(entropy,val)  \
-	{ *(entropy)->next_output_byte++ = (JOCTET) (val);  \
-	  if (--(entropy)->free_in_buffer == 0)  \
-	    dump_buffer_e(entropy); }
-
-
-LOCAL(boolean)
-dump_buffer_s (working_state * state)
-/* Empty the output buffer; return TRUE if successful, FALSE if must suspend */
-{
-  struct jpeg_destination_mgr * dest = state->cinfo->dest;
-
-  if (! (*dest->empty_output_buffer) (state->cinfo))
-    return FALSE;
-  /* After a successful buffer dump, must reset buffer pointers */
-  state->next_output_byte = dest->next_output_byte;
-  state->free_in_buffer = dest->free_in_buffer;
-  return TRUE;
-}
-
-
-LOCAL(void)
-dump_buffer_e (huff_entropy_ptr entropy)
-/* Empty the output buffer; we do not support suspension in this case. */
-{
-  struct jpeg_destination_mgr * dest = entropy->cinfo->dest;
-
-  if (! (*dest->empty_output_buffer) (entropy->cinfo))
-    ERREXIT(entropy->cinfo, JERR_CANT_SUSPEND);
-  /* After a successful buffer dump, must reset buffer pointers */
-  entropy->next_output_byte = dest->next_output_byte;
-  entropy->free_in_buffer = dest->free_in_buffer;
-}
-
-
-/* Outputting bits to the file */
-
-/* Only the right 24 bits of put_buffer are used; the valid bits are
- * left-justified in this part.  At most 16 bits can be passed to emit_bits
- * in one call, and we never retain more than 7 bits in put_buffer
- * between calls, so 24 bits are sufficient.
- */
-
-INLINE
-LOCAL(boolean)
-emit_bits_s (working_state * state, unsigned int code, int size)
-/* Emit some bits; return TRUE if successful, FALSE if must suspend */
-{
-  /* This routine is heavily used, so it's worth coding tightly. */
-  register INT32 put_buffer;
-  register int put_bits;
-
-  /* if size is 0, caller used an invalid Huffman table entry */
-  if (size == 0)
-    ERREXIT(state->cinfo, JERR_HUFF_MISSING_CODE);
-
-  /* mask off any extra bits in code */
-  put_buffer = ((INT32) code) & ((((INT32) 1) << size) - 1);
-
-  /* new number of bits in buffer */
-  put_bits = size + state->cur.put_bits;
-
-  put_buffer <<= 24 - put_bits; /* align incoming bits */
-
-  /* and merge with old buffer contents */
-  put_buffer |= state->cur.put_buffer;
-
-  while (put_bits >= 8) {
-    int c = (int) ((put_buffer >> 16) & 0xFF);
-
-    emit_byte_s(state, c, return FALSE);
-    if (c == 0xFF) {		/* need to stuff a zero byte? */
-      emit_byte_s(state, 0, return FALSE);
-    }
-    put_buffer <<= 8;
-    put_bits -= 8;
-  }
-
-  state->cur.put_buffer = put_buffer; /* update state variables */
-  state->cur.put_bits = put_bits;
-
-  return TRUE;
-}
-
-
-INLINE
-LOCAL(void)
-emit_bits_e (huff_entropy_ptr entropy, unsigned int code, int size)
-/* Emit some bits, unless we are in gather mode */
-{
-  /* This routine is heavily used, so it's worth coding tightly. */
-  register INT32 put_buffer;
-  register int put_bits;
-
-  /* if size is 0, caller used an invalid Huffman table entry */
-  if (size == 0)
-    ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE);
-
-  if (entropy->gather_statistics)
-    return;			/* do nothing if we're only getting stats */
-
-  /* mask off any extra bits in code */
-  put_buffer = ((INT32) code) & ((((INT32) 1) << size) - 1);
-
-  /* new number of bits in buffer */
-  put_bits = size + entropy->saved.put_bits;
-
-  put_buffer <<= 24 - put_bits; /* align incoming bits */
-
-  /* and merge with old buffer contents */
-  put_buffer |= entropy->saved.put_buffer;
-
-  while (put_bits >= 8) {
-    int c = (int) ((put_buffer >> 16) & 0xFF);
-
-    emit_byte_e(entropy, c);
-    if (c == 0xFF) {		/* need to stuff a zero byte? */
-      emit_byte_e(entropy, 0);
-    }
-    put_buffer <<= 8;
-    put_bits -= 8;
-  }
-
-  entropy->saved.put_buffer = put_buffer; /* update variables */
-  entropy->saved.put_bits = put_bits;
-}
-
-
-LOCAL(boolean)
-flush_bits_s (working_state * state)
-{
-  if (! emit_bits_s(state, 0x7F, 7)) /* fill any partial byte with ones */
-    return FALSE;
-  state->cur.put_buffer = 0;	     /* and reset bit-buffer to empty */
-  state->cur.put_bits = 0;
-  return TRUE;
-}
-
-
-LOCAL(void)
-flush_bits_e (huff_entropy_ptr entropy)
-{
-  emit_bits_e(entropy, 0x7F, 7); /* fill any partial byte with ones */
-  entropy->saved.put_buffer = 0; /* and reset bit-buffer to empty */
-  entropy->saved.put_bits = 0;
-}
-
-
-/*
- * Emit (or just count) a Huffman symbol.
- */
-
-INLINE
-LOCAL(void)
-emit_dc_symbol (huff_entropy_ptr entropy, int tbl_no, int symbol)
-{
-  if (entropy->gather_statistics)
-    entropy->dc_count_ptrs[tbl_no][symbol]++;
-  else {
-    c_derived_tbl * tbl = entropy->dc_derived_tbls[tbl_no];
-    emit_bits_e(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]);
-  }
-}
-
-
-INLINE
-LOCAL(void)
-emit_ac_symbol (huff_entropy_ptr entropy, int tbl_no, int symbol)
-{
-  if (entropy->gather_statistics)
-    entropy->ac_count_ptrs[tbl_no][symbol]++;
-  else {
-    c_derived_tbl * tbl = entropy->ac_derived_tbls[tbl_no];
-    emit_bits_e(entropy, tbl->ehufco[symbol], tbl->ehufsi[symbol]);
-  }
-}
-
-
-/*
- * Emit bits from a correction bit buffer.
- */
-
-LOCAL(void)
-emit_buffered_bits (huff_entropy_ptr entropy, char * bufstart,
-		    unsigned int nbits)
-{
-  if (entropy->gather_statistics)
-    return;			/* no real work */
-
-  while (nbits > 0) {
-    emit_bits_e(entropy, (unsigned int) (*bufstart), 1);
-    bufstart++;
-    nbits--;
-  }
-}
-
-
-/*
- * Emit any pending EOBRUN symbol.
- */
-
-LOCAL(void)
-emit_eobrun (huff_entropy_ptr entropy)
-{
-  register int temp, nbits;
-
-  if (entropy->EOBRUN > 0) {	/* if there is any pending EOBRUN */
-    temp = entropy->EOBRUN;
-    nbits = 0;
-    while ((temp >>= 1))
-      nbits++;
-    /* safety check: shouldn't happen given limited correction-bit buffer */
-    if (nbits > 14)
-      ERREXIT(entropy->cinfo, JERR_HUFF_MISSING_CODE);
-
-    emit_ac_symbol(entropy, entropy->ac_tbl_no, nbits << 4);
-    if (nbits)
-      emit_bits_e(entropy, entropy->EOBRUN, nbits);
-
-    entropy->EOBRUN = 0;
-
-    /* Emit any buffered correction bits */
-    emit_buffered_bits(entropy, entropy->bit_buffer, entropy->BE);
-    entropy->BE = 0;
-  }
-}
-
-
-/*
- * Emit a restart marker & resynchronize predictions.
- */
-
-LOCAL(boolean)
-emit_restart_s (working_state * state, int restart_num)
-{
-  int ci;
-
-  if (! flush_bits_s(state))
-    return FALSE;
-
-  emit_byte_s(state, 0xFF, return FALSE);
-  emit_byte_s(state, JPEG_RST0 + restart_num, return FALSE);
-
-  /* Re-initialize DC predictions to 0 */
-  for (ci = 0; ci < state->cinfo->comps_in_scan; ci++)
-    state->cur.last_dc_val[ci] = 0;
-
-  /* The restart counter is not updated until we successfully write the MCU. */
-
-  return TRUE;
-}
-
-
-LOCAL(void)
-emit_restart_e (huff_entropy_ptr entropy, int restart_num)
-{
-  int ci;
-
-  emit_eobrun(entropy);
-
-  if (! entropy->gather_statistics) {
-    flush_bits_e(entropy);
-    emit_byte_e(entropy, 0xFF);
-    emit_byte_e(entropy, JPEG_RST0 + restart_num);
-  }
-
-  if (entropy->cinfo->Ss == 0) {
-    /* Re-initialize DC predictions to 0 */
-    for (ci = 0; ci < entropy->cinfo->comps_in_scan; ci++)
-      entropy->saved.last_dc_val[ci] = 0;
-  } else {
-    /* Re-initialize all AC-related fields to 0 */
-    entropy->EOBRUN = 0;
-    entropy->BE = 0;
-  }
-}
-
-
-/*
- * MCU encoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  register int temp, temp2;
-  register int nbits;
-  int blkn, ci, tbl;
-  ISHIFT_TEMPS
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_e(entropy, entropy->next_restart_num);
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    tbl = cinfo->cur_comp_info[ci]->dc_tbl_no;
-
-    /* Compute the DC value after the required point transform by Al.
-     * This is simply an arithmetic right shift.
-     */
-    temp = IRIGHT_SHIFT((int) (MCU_data[blkn][0][0]), cinfo->Al);
-
-    /* DC differences are figured on the point-transformed values. */
-    temp2 = temp - entropy->saved.last_dc_val[ci];
-    entropy->saved.last_dc_val[ci] = temp;
-
-    /* Encode the DC coefficient difference per section G.1.2.1 */
-    temp = temp2;
-    if (temp < 0) {
-      temp = -temp;		/* temp is abs value of input */
-      /* For a negative input, want temp2 = bitwise complement of abs(input) */
-      /* This code assumes we are on a two's complement machine */
-      temp2--;
-    }
-
-    /* Find the number of bits needed for the magnitude of the coefficient */
-    nbits = 0;
-    while (temp) {
-      nbits++;
-      temp >>= 1;
-    }
-    /* Check for out-of-range coefficient values.
-     * Since we're encoding a difference, the range limit is twice as much.
-     */
-    if (nbits > MAX_COEF_BITS+1)
-      ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-    /* Count/emit the Huffman-coded symbol for the number of bits */
-    emit_dc_symbol(entropy, tbl, nbits);
-
-    /* Emit that number of bits of the value, if positive, */
-    /* or the complement of its magnitude, if negative. */
-    if (nbits)			/* emit_bits rejects calls with size 0 */
-      emit_bits_e(entropy, (unsigned int) temp2, nbits);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_first (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  JBLOCKROW block;
-  register int temp, temp2;
-  register int nbits;
-  register int r, k;
-  int Se, Al;
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_e(entropy, entropy->next_restart_num);
-
-  Se = cinfo->Se;
-  Al = cinfo->Al;
-  natural_order = cinfo->natural_order;
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-
-  /* Encode the AC coefficients per section G.1.2.2, fig. G.3 */
-  
-  r = 0;			/* r = run length of zeros */
-   
-  for (k = cinfo->Ss; k <= Se; k++) {
-    if ((temp = (*block)[natural_order[k]]) == 0) {
-      r++;
-      continue;
-    }
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value; so the code is
-     * interwoven with finding the abs value (temp) and output bits (temp2).
-     */
-    if (temp < 0) {
-      temp = -temp;		/* temp is abs value of input */
-      temp >>= Al;		/* apply the point transform */
-      /* For a negative coef, want temp2 = bitwise complement of abs(coef) */
-      temp2 = ~temp;
-    } else {
-      temp >>= Al;		/* apply the point transform */
-      temp2 = temp;
-    }
-    /* Watch out for case that nonzero coef is zero after point transform */
-    if (temp == 0) {
-      r++;
-      continue;
-    }
-
-    /* Emit any pending EOBRUN */
-    if (entropy->EOBRUN > 0)
-      emit_eobrun(entropy);
-    /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-    while (r > 15) {
-      emit_ac_symbol(entropy, entropy->ac_tbl_no, 0xF0);
-      r -= 16;
-    }
-
-    /* Find the number of bits needed for the magnitude of the coefficient */
-    nbits = 1;			/* there must be at least one 1 bit */
-    while ((temp >>= 1))
-      nbits++;
-    /* Check for out-of-range coefficient values */
-    if (nbits > MAX_COEF_BITS)
-      ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-    /* Count/emit Huffman symbol for run length / number of bits */
-    emit_ac_symbol(entropy, entropy->ac_tbl_no, (r << 4) + nbits);
-
-    /* Emit that number of bits of the value, if positive, */
-    /* or the complement of its magnitude, if negative. */
-    emit_bits_e(entropy, (unsigned int) temp2, nbits);
-
-    r = 0;			/* reset zero run length */
-  }
-
-  if (r > 0) {			/* If there are trailing zeroes, */
-    entropy->EOBRUN++;		/* count an EOB */
-    if (entropy->EOBRUN == 0x7FFF)
-      emit_eobrun(entropy);	/* force it out to avoid overflow */
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component,
- * although the spec is not very clear on the point.
- */
-
-METHODDEF(boolean)
-encode_mcu_DC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int Al, blkn;
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_e(entropy, entropy->next_restart_num);
-
-  Al = cinfo->Al;
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    /* We simply emit the Al'th bit of the DC coefficient value. */
-    emit_bits_e(entropy, (unsigned int) (MCU_data[blkn][0][0] >> Al), 1);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU encoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-encode_mcu_AC_refine (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  JBLOCKROW block;
-  register int temp;
-  register int r, k;
-  int Se, Al;
-  int EOB;
-  char *BR_buffer;
-  unsigned int BR;
-  int absvalues[DCTSIZE2];
-
-  entropy->next_output_byte = cinfo->dest->next_output_byte;
-  entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval)
-    if (entropy->restarts_to_go == 0)
-      emit_restart_e(entropy, entropy->next_restart_num);
-
-  Se = cinfo->Se;
-  Al = cinfo->Al;
-  natural_order = cinfo->natural_order;
-
-  /* Encode the MCU data block */
-  block = MCU_data[0];
-
-  /* It is convenient to make a pre-pass to determine the transformed
-   * coefficients' absolute values and the EOB position.
-   */
-  EOB = 0;
-  for (k = cinfo->Ss; k <= Se; k++) {
-    temp = (*block)[natural_order[k]];
-    /* We must apply the point transform by Al.  For AC coefficients this
-     * is an integer division with rounding towards 0.  To do this portably
-     * in C, we shift after obtaining the absolute value.
-     */
-    if (temp < 0)
-      temp = -temp;		/* temp is abs value of input */
-    temp >>= Al;		/* apply the point transform */
-    absvalues[k] = temp;	/* save abs value for main pass */
-    if (temp == 1)
-      EOB = k;			/* EOB = index of last newly-nonzero coef */
-  }
-
-  /* Encode the AC coefficients per section G.1.2.3, fig. G.7 */
-  
-  r = 0;			/* r = run length of zeros */
-  BR = 0;			/* BR = count of buffered bits added now */
-  BR_buffer = entropy->bit_buffer + entropy->BE; /* Append bits to buffer */
-
-  for (k = cinfo->Ss; k <= Se; k++) {
-    if ((temp = absvalues[k]) == 0) {
-      r++;
-      continue;
-    }
-
-    /* Emit any required ZRLs, but not if they can be folded into EOB */
-    while (r > 15 && k <= EOB) {
-      /* emit any pending EOBRUN and the BE correction bits */
-      emit_eobrun(entropy);
-      /* Emit ZRL */
-      emit_ac_symbol(entropy, entropy->ac_tbl_no, 0xF0);
-      r -= 16;
-      /* Emit buffered correction bits that must be associated with ZRL */
-      emit_buffered_bits(entropy, BR_buffer, BR);
-      BR_buffer = entropy->bit_buffer; /* BE bits are gone now */
-      BR = 0;
-    }
-
-    /* If the coef was previously nonzero, it only needs a correction bit.
-     * NOTE: a straight translation of the spec's figure G.7 would suggest
-     * that we also need to test r > 15.  But if r > 15, we can only get here
-     * if k > EOB, which implies that this coefficient is not 1.
-     */
-    if (temp > 1) {
-      /* The correction bit is the next bit of the absolute value. */
-      BR_buffer[BR++] = (char) (temp & 1);
-      continue;
-    }
-
-    /* Emit any pending EOBRUN and the BE correction bits */
-    emit_eobrun(entropy);
-
-    /* Count/emit Huffman symbol for run length / number of bits */
-    emit_ac_symbol(entropy, entropy->ac_tbl_no, (r << 4) + 1);
-
-    /* Emit output bit for newly-nonzero coef */
-    temp = ((*block)[natural_order[k]] < 0) ? 0 : 1;
-    emit_bits_e(entropy, (unsigned int) temp, 1);
-
-    /* Emit buffered correction bits that must be associated with this code */
-    emit_buffered_bits(entropy, BR_buffer, BR);
-    BR_buffer = entropy->bit_buffer; /* BE bits are gone now */
-    BR = 0;
-    r = 0;			/* reset zero run length */
-  }
-
-  if (r > 0 || BR > 0) {	/* If there are trailing zeroes, */
-    entropy->EOBRUN++;		/* count an EOB */
-    entropy->BE += BR;		/* concat my correction bits to older ones */
-    /* We force out the EOB if we risk either:
-     * 1. overflow of the EOB counter;
-     * 2. overflow of the correction bit buffer during the next MCU.
-     */
-    if (entropy->EOBRUN == 0x7FFF || entropy->BE > (MAX_CORR_BITS-DCTSIZE2+1))
-      emit_eobrun(entropy);
-  }
-
-  cinfo->dest->next_output_byte = entropy->next_output_byte;
-  cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/* Encode a single block's worth of coefficients */
-
-LOCAL(boolean)
-encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
-		  c_derived_tbl *dctbl, c_derived_tbl *actbl)
-{
-  register int temp, temp2;
-  register int nbits;
-  register int r, k;
-  int Se = state->cinfo->lim_Se;
-  const int * natural_order = state->cinfo->natural_order;
-
-  /* Encode the DC coefficient difference per section F.1.2.1 */
-
-  temp = temp2 = block[0] - last_dc_val;
-
-  if (temp < 0) {
-    temp = -temp;		/* temp is abs value of input */
-    /* For a negative input, want temp2 = bitwise complement of abs(input) */
-    /* This code assumes we are on a two's complement machine */
-    temp2--;
-  }
-
-  /* Find the number of bits needed for the magnitude of the coefficient */
-  nbits = 0;
-  while (temp) {
-    nbits++;
-    temp >>= 1;
-  }
-  /* Check for out-of-range coefficient values.
-   * Since we're encoding a difference, the range limit is twice as much.
-   */
-  if (nbits > MAX_COEF_BITS+1)
-    ERREXIT(state->cinfo, JERR_BAD_DCT_COEF);
-
-  /* Emit the Huffman-coded symbol for the number of bits */
-  if (! emit_bits_s(state, dctbl->ehufco[nbits], dctbl->ehufsi[nbits]))
-    return FALSE;
-
-  /* Emit that number of bits of the value, if positive, */
-  /* or the complement of its magnitude, if negative. */
-  if (nbits)			/* emit_bits rejects calls with size 0 */
-    if (! emit_bits_s(state, (unsigned int) temp2, nbits))
-      return FALSE;
-
-  /* Encode the AC coefficients per section F.1.2.2 */
-
-  r = 0;			/* r = run length of zeros */
-
-  for (k = 1; k <= Se; k++) {
-    if ((temp2 = block[natural_order[k]]) == 0) {
-      r++;
-    } else {
-      /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-      while (r > 15) {
-	if (! emit_bits_s(state, actbl->ehufco[0xF0], actbl->ehufsi[0xF0]))
-	  return FALSE;
-	r -= 16;
-      }
-
-      temp = temp2;
-      if (temp < 0) {
-	temp = -temp;		/* temp is abs value of input */
-	/* This code assumes we are on a two's complement machine */
-	temp2--;
-      }
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      nbits = 1;		/* there must be at least one 1 bit */
-      while ((temp >>= 1))
-	nbits++;
-      /* Check for out-of-range coefficient values */
-      if (nbits > MAX_COEF_BITS)
-	ERREXIT(state->cinfo, JERR_BAD_DCT_COEF);
-
-      /* Emit Huffman symbol for run length / number of bits */
-      temp = (r << 4) + nbits;
-      if (! emit_bits_s(state, actbl->ehufco[temp], actbl->ehufsi[temp]))
-	return FALSE;
-
-      /* Emit that number of bits of the value, if positive, */
-      /* or the complement of its magnitude, if negative. */
-      if (! emit_bits_s(state, (unsigned int) temp2, nbits))
-	return FALSE;
-
-      r = 0;
-    }
-  }
-
-  /* If the last coef(s) were zero, emit an end-of-block code */
-  if (r > 0)
-    if (! emit_bits_s(state, actbl->ehufco[0], actbl->ehufsi[0]))
-      return FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Encode and output one MCU's worth of Huffman-compressed coefficients.
- */
-
-METHODDEF(boolean)
-encode_mcu_huff (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  working_state state;
-  int blkn, ci;
-  jpeg_component_info * compptr;
-
-  /* Load up working state */
-  state.next_output_byte = cinfo->dest->next_output_byte;
-  state.free_in_buffer = cinfo->dest->free_in_buffer;
-  ASSIGN_STATE(state.cur, entropy->saved);
-  state.cinfo = cinfo;
-
-  /* Emit restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! emit_restart_s(&state, entropy->next_restart_num))
-	return FALSE;
-  }
-
-  /* Encode the MCU data blocks */
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-    if (! encode_one_block(&state,
-			   MCU_data[blkn][0], state.cur.last_dc_val[ci],
-			   entropy->dc_derived_tbls[compptr->dc_tbl_no],
-			   entropy->ac_derived_tbls[compptr->ac_tbl_no]))
-      return FALSE;
-    /* Update last_dc_val */
-    state.cur.last_dc_val[ci] = MCU_data[blkn][0][0];
-  }
-
-  /* Completed MCU, so update state */
-  cinfo->dest->next_output_byte = state.next_output_byte;
-  cinfo->dest->free_in_buffer = state.free_in_buffer;
-  ASSIGN_STATE(entropy->saved, state.cur);
-
-  /* Update restart-interval state too */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      entropy->restarts_to_go = cinfo->restart_interval;
-      entropy->next_restart_num++;
-      entropy->next_restart_num &= 7;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Finish up at the end of a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-finish_pass_huff (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  working_state state;
-
-  if (cinfo->progressive_mode) {
-    entropy->next_output_byte = cinfo->dest->next_output_byte;
-    entropy->free_in_buffer = cinfo->dest->free_in_buffer;
-
-    /* Flush out any buffered data */
-    emit_eobrun(entropy);
-    flush_bits_e(entropy);
-
-    cinfo->dest->next_output_byte = entropy->next_output_byte;
-    cinfo->dest->free_in_buffer = entropy->free_in_buffer;
-  } else {
-    /* Load up working state ... flush_bits needs it */
-    state.next_output_byte = cinfo->dest->next_output_byte;
-    state.free_in_buffer = cinfo->dest->free_in_buffer;
-    ASSIGN_STATE(state.cur, entropy->saved);
-    state.cinfo = cinfo;
-
-    /* Flush out the last data */
-    if (! flush_bits_s(&state))
-      ERREXIT(cinfo, JERR_CANT_SUSPEND);
-
-    /* Update state */
-    cinfo->dest->next_output_byte = state.next_output_byte;
-    cinfo->dest->free_in_buffer = state.free_in_buffer;
-    ASSIGN_STATE(entropy->saved, state.cur);
-  }
-}
-
-
-/*
- * Huffman coding optimization.
- *
- * We first scan the supplied data and count the number of uses of each symbol
- * that is to be Huffman-coded. (This process MUST agree with the code above.)
- * Then we build a Huffman coding tree for the observed counts.
- * Symbols which are not needed at all for the particular image are not
- * assigned any code, which saves space in the DHT marker as well as in
- * the compressed data.
- */
-
-
-/* Process a single block's worth of coefficients */
-
-LOCAL(void)
-htest_one_block (j_compress_ptr cinfo, JCOEFPTR block, int last_dc_val,
-		 long dc_counts[], long ac_counts[])
-{
-  register int temp;
-  register int nbits;
-  register int r, k;
-  int Se = cinfo->lim_Se;
-  const int * natural_order = cinfo->natural_order;
-
-  /* Encode the DC coefficient difference per section F.1.2.1 */
-
-  temp = block[0] - last_dc_val;
-  if (temp < 0)
-    temp = -temp;
-
-  /* Find the number of bits needed for the magnitude of the coefficient */
-  nbits = 0;
-  while (temp) {
-    nbits++;
-    temp >>= 1;
-  }
-  /* Check for out-of-range coefficient values.
-   * Since we're encoding a difference, the range limit is twice as much.
-   */
-  if (nbits > MAX_COEF_BITS+1)
-    ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-  /* Count the Huffman symbol for the number of bits */
-  dc_counts[nbits]++;
-
-  /* Encode the AC coefficients per section F.1.2.2 */
-
-  r = 0;			/* r = run length of zeros */
-
-  for (k = 1; k <= Se; k++) {
-    if ((temp = block[natural_order[k]]) == 0) {
-      r++;
-    } else {
-      /* if run length > 15, must emit special run-length-16 codes (0xF0) */
-      while (r > 15) {
-	ac_counts[0xF0]++;
-	r -= 16;
-      }
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      if (temp < 0)
-	temp = -temp;
-
-      /* Find the number of bits needed for the magnitude of the coefficient */
-      nbits = 1;		/* there must be at least one 1 bit */
-      while ((temp >>= 1))
-	nbits++;
-      /* Check for out-of-range coefficient values */
-      if (nbits > MAX_COEF_BITS)
-	ERREXIT(cinfo, JERR_BAD_DCT_COEF);
-
-      /* Count Huffman symbol for run length / number of bits */
-      ac_counts[(r << 4) + nbits]++;
-
-      r = 0;
-    }
-  }
-
-  /* If the last coef(s) were zero, emit an end-of-block code */
-  if (r > 0)
-    ac_counts[0]++;
-}
-
-
-/*
- * Trial-encode one MCU's worth of Huffman-compressed coefficients.
- * No data is actually output, so no suspension return is possible.
- */
-
-METHODDEF(boolean)
-encode_mcu_gather (j_compress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int blkn, ci;
-  jpeg_component_info * compptr;
-
-  /* Take care of restart intervals if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0) {
-      /* Re-initialize DC predictions to 0 */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++)
-	entropy->saved.last_dc_val[ci] = 0;
-      /* Update restart state */
-      entropy->restarts_to_go = cinfo->restart_interval;
-    }
-    entropy->restarts_to_go--;
-  }
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-    htest_one_block(cinfo, MCU_data[blkn][0], entropy->saved.last_dc_val[ci],
-		    entropy->dc_count_ptrs[compptr->dc_tbl_no],
-		    entropy->ac_count_ptrs[compptr->ac_tbl_no]);
-    entropy->saved.last_dc_val[ci] = MCU_data[blkn][0][0];
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Generate the best Huffman code table for the given counts, fill htbl.
- *
- * The JPEG standard requires that no symbol be assigned a codeword of all
- * one bits (so that padding bits added at the end of a compressed segment
- * can't look like a valid code).  Because of the canonical ordering of
- * codewords, this just means that there must be an unused slot in the
- * longest codeword length category.  Section K.2 of the JPEG spec suggests
- * reserving such a slot by pretending that symbol 256 is a valid symbol
- * with count 1.  In theory that's not optimal; giving it count zero but
- * including it in the symbol set anyway should give a better Huffman code.
- * But the theoretically better code actually seems to come out worse in
- * practice, because it produces more all-ones bytes (which incur stuffed
- * zero bytes in the final file).  In any case the difference is tiny.
- *
- * The JPEG standard requires Huffman codes to be no more than 16 bits long.
- * If some symbols have a very small but nonzero probability, the Huffman tree
- * must be adjusted to meet the code length restriction.  We currently use
- * the adjustment method suggested in JPEG section K.2.  This method is *not*
- * optimal; it may not choose the best possible limited-length code.  But
- * typically only very-low-frequency symbols will be given less-than-optimal
- * lengths, so the code is almost optimal.  Experimental comparisons against
- * an optimal limited-length-code algorithm indicate that the difference is
- * microscopic --- usually less than a hundredth of a percent of total size.
- * So the extra complexity of an optimal algorithm doesn't seem worthwhile.
- */
-
-LOCAL(void)
-jpeg_gen_optimal_table (j_compress_ptr cinfo, JHUFF_TBL * htbl, long freq[])
-{
-#define MAX_CLEN 32		/* assumed maximum initial code length */
-  UINT8 bits[MAX_CLEN+1];	/* bits[k] = # of symbols with code length k */
-  int codesize[257];		/* codesize[k] = code length of symbol k */
-  int others[257];		/* next symbol in current branch of tree */
-  int c1, c2;
-  int p, i, j;
-  long v;
-
-  /* This algorithm is explained in section K.2 of the JPEG standard */
-
-  MEMZERO(bits, SIZEOF(bits));
-  MEMZERO(codesize, SIZEOF(codesize));
-  for (i = 0; i < 257; i++)
-    others[i] = -1;		/* init links to empty */
-  
-  freq[256] = 1;		/* make sure 256 has a nonzero count */
-  /* Including the pseudo-symbol 256 in the Huffman procedure guarantees
-   * that no real symbol is given code-value of all ones, because 256
-   * will be placed last in the largest codeword category.
-   */
-
-  /* Huffman's basic algorithm to assign optimal code lengths to symbols */
-
-  for (;;) {
-    /* Find the smallest nonzero frequency, set c1 = its symbol */
-    /* In case of ties, take the larger symbol number */
-    c1 = -1;
-    v = 1000000000L;
-    for (i = 0; i <= 256; i++) {
-      if (freq[i] && freq[i] <= v) {
-	v = freq[i];
-	c1 = i;
-      }
-    }
-
-    /* Find the next smallest nonzero frequency, set c2 = its symbol */
-    /* In case of ties, take the larger symbol number */
-    c2 = -1;
-    v = 1000000000L;
-    for (i = 0; i <= 256; i++) {
-      if (freq[i] && freq[i] <= v && i != c1) {
-	v = freq[i];
-	c2 = i;
-      }
-    }
-
-    /* Done if we've merged everything into one frequency */
-    if (c2 < 0)
-      break;
-    
-    /* Else merge the two counts/trees */
-    freq[c1] += freq[c2];
-    freq[c2] = 0;
-
-    /* Increment the codesize of everything in c1's tree branch */
-    codesize[c1]++;
-    while (others[c1] >= 0) {
-      c1 = others[c1];
-      codesize[c1]++;
-    }
-    
-    others[c1] = c2;		/* chain c2 onto c1's tree branch */
-    
-    /* Increment the codesize of everything in c2's tree branch */
-    codesize[c2]++;
-    while (others[c2] >= 0) {
-      c2 = others[c2];
-      codesize[c2]++;
-    }
-  }
-
-  /* Now count the number of symbols of each code length */
-  for (i = 0; i <= 256; i++) {
-    if (codesize[i]) {
-      /* The JPEG standard seems to think that this can't happen, */
-      /* but I'm paranoid... */
-      if (codesize[i] > MAX_CLEN)
-	ERREXIT(cinfo, JERR_HUFF_CLEN_OVERFLOW);
-
-      bits[codesize[i]]++;
-    }
-  }
-
-  /* JPEG doesn't allow symbols with code lengths over 16 bits, so if the pure
-   * Huffman procedure assigned any such lengths, we must adjust the coding.
-   * Here is what the JPEG spec says about how this next bit works:
-   * Since symbols are paired for the longest Huffman code, the symbols are
-   * removed from this length category two at a time.  The prefix for the pair
-   * (which is one bit shorter) is allocated to one of the pair; then,
-   * skipping the BITS entry for that prefix length, a code word from the next
-   * shortest nonzero BITS entry is converted into a prefix for two code words
-   * one bit longer.
-   */
-  
-  for (i = MAX_CLEN; i > 16; i--) {
-    while (bits[i] > 0) {
-      j = i - 2;		/* find length of new prefix to be used */
-      while (bits[j] == 0)
-	j--;
-      
-      bits[i] -= 2;		/* remove two symbols */
-      bits[i-1]++;		/* one goes in this length */
-      bits[j+1] += 2;		/* two new symbols in this length */
-      bits[j]--;		/* symbol of this length is now a prefix */
-    }
-  }
-
-  /* Remove the count for the pseudo-symbol 256 from the largest codelength */
-  while (bits[i] == 0)		/* find largest codelength still in use */
-    i--;
-  bits[i]--;
-  
-  /* Return final symbol counts (only for lengths 0..16) */
-  MEMCOPY(htbl->bits, bits, SIZEOF(htbl->bits));
-  
-  /* Return a list of the symbols sorted by code length */
-  /* It's not real clear to me why we don't need to consider the codelength
-   * changes made above, but the JPEG spec seems to think this works.
-   */
-  p = 0;
-  for (i = 1; i <= MAX_CLEN; i++) {
-    for (j = 0; j <= 255; j++) {
-      if (codesize[j] == i) {
-	htbl->huffval[p] = (UINT8) j;
-	p++;
-      }
-    }
-  }
-
-  /* Set sent_table FALSE so updated table will be written to JPEG file. */
-  htbl->sent_table = FALSE;
-}
-
-
-/*
- * Finish up a statistics-gathering pass and create the new Huffman tables.
- */
-
-METHODDEF(void)
-finish_pass_gather (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-  JHUFF_TBL **htblptr;
-  boolean did_dc[NUM_HUFF_TBLS];
-  boolean did_ac[NUM_HUFF_TBLS];
-
-  /* It's important not to apply jpeg_gen_optimal_table more than once
-   * per table, because it clobbers the input frequency counts!
-   */
-  if (cinfo->progressive_mode)
-    /* Flush out buffered data (all we care about is counting the EOB symbol) */
-    emit_eobrun(entropy);
-
-  MEMZERO(did_dc, SIZEOF(did_dc));
-  MEMZERO(did_ac, SIZEOF(did_ac));
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* DC needs no table for refinement scan */
-    if (cinfo->Ss == 0 && cinfo->Ah == 0) {
-      tbl = compptr->dc_tbl_no;
-      if (! did_dc[tbl]) {
-	htblptr = & cinfo->dc_huff_tbl_ptrs[tbl];
-	if (*htblptr == NULL)
-	  *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-	jpeg_gen_optimal_table(cinfo, *htblptr, entropy->dc_count_ptrs[tbl]);
-	did_dc[tbl] = TRUE;
-      }
-    }
-    /* AC needs no table when not present */
-    if (cinfo->Se) {
-      tbl = compptr->ac_tbl_no;
-      if (! did_ac[tbl]) {
-	htblptr = & cinfo->ac_huff_tbl_ptrs[tbl];
-	if (*htblptr == NULL)
-	  *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-	jpeg_gen_optimal_table(cinfo, *htblptr, entropy->ac_count_ptrs[tbl]);
-	did_ac[tbl] = TRUE;
-      }
-    }
-  }
-}
-
-
-/*
- * Initialize for a Huffman-compressed scan.
- * If gather_statistics is TRUE, we do not output anything during the scan,
- * just count the Huffman symbols used and generate Huffman code tables.
- */
-
-METHODDEF(void)
-start_pass_huff (j_compress_ptr cinfo, boolean gather_statistics)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-
-  if (gather_statistics)
-    entropy->pub.finish_pass = finish_pass_gather;
-  else
-    entropy->pub.finish_pass = finish_pass_huff;
-
-  if (cinfo->progressive_mode) {
-    entropy->cinfo = cinfo;
-    entropy->gather_statistics = gather_statistics;
-
-    /* We assume jcmaster.c already validated the scan parameters. */
-
-    /* Select execution routine */
-    if (cinfo->Ah == 0) {
-      if (cinfo->Ss == 0)
-	entropy->pub.encode_mcu = encode_mcu_DC_first;
-      else
-	entropy->pub.encode_mcu = encode_mcu_AC_first;
-    } else {
-      if (cinfo->Ss == 0)
-	entropy->pub.encode_mcu = encode_mcu_DC_refine;
-      else {
-	entropy->pub.encode_mcu = encode_mcu_AC_refine;
-	/* AC refinement needs a correction bit buffer */
-	if (entropy->bit_buffer == NULL)
-	  entropy->bit_buffer = (char *)
-	    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-					MAX_CORR_BITS * SIZEOF(char));
-      }
-    }
-
-    /* Initialize AC stuff */
-    entropy->ac_tbl_no = cinfo->cur_comp_info[0]->ac_tbl_no;
-    entropy->EOBRUN = 0;
-    entropy->BE = 0;
-  } else {
-    if (gather_statistics)
-      entropy->pub.encode_mcu = encode_mcu_gather;
-    else
-      entropy->pub.encode_mcu = encode_mcu_huff;
-  }
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* DC needs no table for refinement scan */
-    if (cinfo->Ss == 0 && cinfo->Ah == 0) {
-      tbl = compptr->dc_tbl_no;
-      if (gather_statistics) {
-	/* Check for invalid table index */
-	/* (make_c_derived_tbl does this in the other path) */
-	if (tbl < 0 || tbl >= NUM_HUFF_TBLS)
-	  ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl);
-	/* Allocate and zero the statistics tables */
-	/* Note that jpeg_gen_optimal_table expects 257 entries in each table! */
-	if (entropy->dc_count_ptrs[tbl] == NULL)
-	  entropy->dc_count_ptrs[tbl] = (long *)
-	    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-					257 * SIZEOF(long));
-	MEMZERO(entropy->dc_count_ptrs[tbl], 257 * SIZEOF(long));
-      } else {
-	/* Compute derived values for Huffman tables */
-	/* We may do this more than once for a table, but it's not expensive */
-	jpeg_make_c_derived_tbl(cinfo, TRUE, tbl,
-				& entropy->dc_derived_tbls[tbl]);
-      }
-      /* Initialize DC predictions to 0 */
-      entropy->saved.last_dc_val[ci] = 0;
-    }
-    /* AC needs no table when not present */
-    if (cinfo->Se) {
-      tbl = compptr->ac_tbl_no;
-      if (gather_statistics) {
-	if (tbl < 0 || tbl >= NUM_HUFF_TBLS)
-	  ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tbl);
-	if (entropy->ac_count_ptrs[tbl] == NULL)
-	  entropy->ac_count_ptrs[tbl] = (long *)
-	    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-					257 * SIZEOF(long));
-	MEMZERO(entropy->ac_count_ptrs[tbl], 257 * SIZEOF(long));
-      } else {
-	jpeg_make_c_derived_tbl(cinfo, FALSE, tbl,
-				& entropy->ac_derived_tbls[tbl]);
-      }
-    }
-  }
-
-  /* Initialize bit buffer to empty */
-  entropy->saved.put_buffer = 0;
-  entropy->saved.put_bits = 0;
-
-  /* Initialize restart stuff */
-  entropy->restarts_to_go = cinfo->restart_interval;
-  entropy->next_restart_num = 0;
-}
-
-
-/*
- * Module initialization routine for Huffman entropy encoding.
- */
-
-GLOBAL(void)
-jinit_huff_encoder (j_compress_ptr cinfo)
-{
-  huff_entropy_ptr entropy;
-  int i;
-
-  entropy = (huff_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(huff_entropy_encoder));
-  cinfo->entropy = &entropy->pub;
-  entropy->pub.start_pass = start_pass_huff;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
-    entropy->dc_count_ptrs[i] = entropy->ac_count_ptrs[i] = NULL;
-  }
-
-  if (cinfo->progressive_mode)
-    entropy->bit_buffer = NULL;	/* needed only in AC refinement scan */
-}
--- a/DoConfig/fltk/jpeg/jcinit.c
+++ /dev/null
@@ -1,84 +1,0 @@
-/*
- * jcinit.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains initialization logic for the JPEG compressor.
- * This routine is in charge of selecting the modules to be executed and
- * making an initialization call to each one.
- *
- * Logically, this code belongs in jcmaster.c.  It's split out because
- * linking this routine implies linking the entire compression library.
- * For a transcoding-only application, we want to be able to use jcmaster.c
- * without linking in the whole library.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Master selection of compression modules.
- * This is done once at the start of processing an image.  We determine
- * which modules will be used and give them appropriate initialization calls.
- */
-
-GLOBAL(void)
-jinit_compress_master (j_compress_ptr cinfo)
-{
-  long samplesperrow;
-  JDIMENSION jd_samplesperrow;
-
-  /* For now, precision must match compiled-in value... */
-  if (cinfo->data_precision != BITS_IN_JSAMPLE)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Sanity check on image dimensions */
-  if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
-      cinfo->input_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  /* Width of an input scanline must be representable as JDIMENSION. */
-  samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components;
-  jd_samplesperrow = (JDIMENSION) samplesperrow;
-  if ((long) jd_samplesperrow != samplesperrow)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-
-  /* Initialize master control (includes parameter checking/processing) */
-  jinit_c_master_control(cinfo, FALSE /* full compression */);
-
-  /* Preprocessing */
-  if (! cinfo->raw_data_in) {
-    jinit_color_converter(cinfo);
-    jinit_downsampler(cinfo);
-    jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
-  }
-  /* Forward DCT */
-  jinit_forward_dct(cinfo);
-  /* Entropy encoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code)
-    jinit_arith_encoder(cinfo);
-  else {
-    jinit_huff_encoder(cinfo);
-  }
-
-  /* Need a full-image coefficient buffer in any multi-pass mode. */
-  jinit_c_coef_controller(cinfo,
-		(boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding));
-  jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */);
-
-  jinit_marker_writer(cinfo);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Write the datastream header (SOI) immediately.
-   * Frame and scan headers are postponed till later.
-   * This lets application insert special markers after the SOI.
-   */
-  (*cinfo->marker->write_file_header) (cinfo);
-}
--- a/DoConfig/fltk/jpeg/jcmainct.c
+++ /dev/null
@@ -1,297 +1,0 @@
-/*
- * jcmainct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2003-2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the main buffer controller for compression.
- * The main buffer lies between the pre-processor and the JPEG
- * compressor proper; it holds downsampled data in the JPEG colorspace.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Note: currently, there is no operating mode in which a full-image buffer
- * is needed at this step.  If there were, that mode could not be used with
- * "raw data" input, since this module is bypassed in that case.  However,
- * we've left the code here for possible use in special applications.
- */
-#undef FULL_MAIN_BUFFER_SUPPORTED
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_main_controller pub; /* public fields */
-
-  JDIMENSION cur_iMCU_row;	/* number of current iMCU row */
-  JDIMENSION rowgroup_ctr;	/* counts row groups received in iMCU row */
-  boolean suspended;		/* remember if we suspended output */
-  J_BUF_MODE pass_mode;		/* current operating mode */
-
-  /* If using just a strip buffer, this points to the entire set of buffers
-   * (we allocate one for each component).  In the full-image case, this
-   * points to the currently accessible strips of the virtual arrays.
-   */
-  JSAMPARRAY buffer[MAX_COMPONENTS];
-
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-  /* If using full-image storage, this array holds pointers to virtual-array
-   * control blocks for each component.  Unused if not full-image storage.
-   */
-  jvirt_sarray_ptr whole_image[MAX_COMPONENTS];
-#endif
-} my_main_controller;
-
-typedef my_main_controller * my_main_ptr;
-
-
-/* Forward declarations */
-METHODDEF(void) process_data_simple_main
-	JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf,
-	     JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail));
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-METHODDEF(void) process_data_buffer_main
-	JPP((j_compress_ptr cinfo, JSAMPARRAY input_buf,
-	     JDIMENSION *in_row_ctr, JDIMENSION in_rows_avail));
-#endif
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_main (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-
-  /* Do nothing in raw-data mode. */
-  if (cinfo->raw_data_in)
-    return;
-
-  mainp->cur_iMCU_row = 0;	/* initialize counters */
-  mainp->rowgroup_ctr = 0;
-  mainp->suspended = FALSE;
-  mainp->pass_mode = pass_mode;	/* save mode for use by process_data */
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    if (mainp->whole_image[0] != NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-    mainp->pub.process_data = process_data_simple_main;
-    break;
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-  case JBUF_SAVE_SOURCE:
-  case JBUF_CRANK_DEST:
-  case JBUF_SAVE_AND_PASS:
-    if (mainp->whole_image[0] == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    mainp->pub.process_data = process_data_buffer_main;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data.
- * This routine handles the simple pass-through mode,
- * where we have only a strip buffer.
- */
-
-METHODDEF(void)
-process_data_simple_main (j_compress_ptr cinfo,
-			  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			  JDIMENSION in_rows_avail)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-
-  while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) {
-    /* Read input data if we haven't filled the main buffer yet */
-    if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size)
-      (*cinfo->prep->pre_process_data) (cinfo,
-					input_buf, in_row_ctr, in_rows_avail,
-					mainp->buffer, &mainp->rowgroup_ctr,
-					(JDIMENSION) cinfo->min_DCT_v_scaled_size);
-
-    /* If we don't have a full iMCU row buffered, return to application for
-     * more data.  Note that preprocessor will always pad to fill the iMCU row
-     * at the bottom of the image.
-     */
-    if (mainp->rowgroup_ctr != (JDIMENSION) cinfo->min_DCT_v_scaled_size)
-      return;
-
-    /* Send the completed row to the compressor */
-    if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) {
-      /* If compressor did not consume the whole row, then we must need to
-       * suspend processing and return to the application.  In this situation
-       * we pretend we didn't yet consume the last input row; otherwise, if
-       * it happened to be the last row of the image, the application would
-       * think we were done.
-       */
-      if (! mainp->suspended) {
-	(*in_row_ctr)--;
-	mainp->suspended = TRUE;
-      }
-      return;
-    }
-    /* We did finish the row.  Undo our little suspension hack if a previous
-     * call suspended; then mark the main buffer empty.
-     */
-    if (mainp->suspended) {
-      (*in_row_ctr)++;
-      mainp->suspended = FALSE;
-    }
-    mainp->rowgroup_ctr = 0;
-    mainp->cur_iMCU_row++;
-  }
-}
-
-
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-
-/*
- * Process some data.
- * This routine handles all of the modes that use a full-size buffer.
- */
-
-METHODDEF(void)
-process_data_buffer_main (j_compress_ptr cinfo,
-			  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			  JDIMENSION in_rows_avail)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  int ci;
-  jpeg_component_info *compptr;
-  boolean writing = (mainp->pass_mode != JBUF_CRANK_DEST);
-
-  while (mainp->cur_iMCU_row < cinfo->total_iMCU_rows) {
-    /* Realign the virtual buffers if at the start of an iMCU row. */
-    if (mainp->rowgroup_ctr == 0) {
-      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	   ci++, compptr++) {
-	mainp->buffer[ci] = (*cinfo->mem->access_virt_sarray)
-	  ((j_common_ptr) cinfo, mainp->whole_image[ci], mainp->cur_iMCU_row *
-	   ((JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size)),
-	   (JDIMENSION) (compptr->v_samp_factor * cinfo->min_DCT_v_scaled_size),
-	   writing);
-      }
-      /* In a read pass, pretend we just read some source data. */
-      if (! writing) {
-	*in_row_ctr += (JDIMENSION)
-	  (cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size);
-	mainp->rowgroup_ctr = (JDIMENSION) cinfo->min_DCT_v_scaled_size;
-      }
-    }
-
-    /* If a write pass, read input data until the current iMCU row is full. */
-    /* Note: preprocessor will pad if necessary to fill the last iMCU row. */
-    if (writing) {
-      (*cinfo->prep->pre_process_data) (cinfo,
-					input_buf, in_row_ctr, in_rows_avail,
-					mainp->buffer, &mainp->rowgroup_ctr,
-					(JDIMENSION) cinfo->min_DCT_v_scaled_size);
-      /* Return to application if we need more data to fill the iMCU row. */
-      if (mainp->rowgroup_ctr < (JDIMENSION) cinfo->min_DCT_v_scaled_size)
-	return;
-    }
-
-    /* Emit data, unless this is a sink-only pass. */
-    if (mainp->pass_mode != JBUF_SAVE_SOURCE) {
-      if (! (*cinfo->coef->compress_data) (cinfo, mainp->buffer)) {
-	/* If compressor did not consume the whole row, then we must need to
-	 * suspend processing and return to the application.  In this situation
-	 * we pretend we didn't yet consume the last input row; otherwise, if
-	 * it happened to be the last row of the image, the application would
-	 * think we were done.
-	 */
-	if (! mainp->suspended) {
-	  (*in_row_ctr)--;
-	  mainp->suspended = TRUE;
-	}
-	return;
-      }
-      /* We did finish the row.  Undo our little suspension hack if a previous
-       * call suspended; then mark the main buffer empty.
-       */
-      if (mainp->suspended) {
-	(*in_row_ctr)++;
-	mainp->suspended = FALSE;
-      }
-    }
-
-    /* If get here, we are done with this iMCU row.  Mark buffer empty. */
-    mainp->rowgroup_ctr = 0;
-    mainp->cur_iMCU_row++;
-  }
-}
-
-#endif /* FULL_MAIN_BUFFER_SUPPORTED */
-
-
-/*
- * Initialize main buffer controller.
- */
-
-GLOBAL(void)
-jinit_c_main_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_main_ptr mainp;
-  int ci;
-  jpeg_component_info *compptr;
-
-  mainp = (my_main_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_main_controller));
-  cinfo->main = &mainp->pub;
-  mainp->pub.start_pass = start_pass_main;
-
-  /* We don't need to create a buffer in raw-data mode. */
-  if (cinfo->raw_data_in)
-    return;
-
-  /* Create the buffer.  It holds downsampled data, so each component
-   * may be of a different size.
-   */
-  if (need_full_buffer) {
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    /* Allocate a full-image virtual array for each component */
-    /* Note we pad the bottom to a multiple of the iMCU height */
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      mainp->whole_image[ci] = (*cinfo->mem->request_virt_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size),
-	 ((JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				 (long) compptr->v_samp_factor)) *
-	 ((JDIMENSION) cinfo->min_DCT_v_scaled_size),
-	 (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size));
-    }
-#else
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif
-  } else {
-#ifdef FULL_MAIN_BUFFER_SUPPORTED
-    mainp->whole_image[0] = NULL; /* flag for no virtual arrays */
-#endif
-    /* Allocate a strip buffer for each component */
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      mainp->buffer[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size),
-	 (JDIMENSION) (compptr->v_samp_factor * compptr->DCT_v_scaled_size));
-    }
-  }
-}
--- a/DoConfig/fltk/jpeg/jcmarker.c
+++ /dev/null
@@ -1,719 +1,0 @@
-/*
- * jcmarker.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains routines to write JPEG datastream markers.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-typedef enum {			/* JPEG marker codes */
-  M_SOF0  = 0xc0,
-  M_SOF1  = 0xc1,
-  M_SOF2  = 0xc2,
-  M_SOF3  = 0xc3,
-
-  M_SOF5  = 0xc5,
-  M_SOF6  = 0xc6,
-  M_SOF7  = 0xc7,
-
-  M_JPG   = 0xc8,
-  M_SOF9  = 0xc9,
-  M_SOF10 = 0xca,
-  M_SOF11 = 0xcb,
-
-  M_SOF13 = 0xcd,
-  M_SOF14 = 0xce,
-  M_SOF15 = 0xcf,
-
-  M_DHT   = 0xc4,
-
-  M_DAC   = 0xcc,
-
-  M_RST0  = 0xd0,
-  M_RST1  = 0xd1,
-  M_RST2  = 0xd2,
-  M_RST3  = 0xd3,
-  M_RST4  = 0xd4,
-  M_RST5  = 0xd5,
-  M_RST6  = 0xd6,
-  M_RST7  = 0xd7,
-
-  M_SOI   = 0xd8,
-  M_EOI   = 0xd9,
-  M_SOS   = 0xda,
-  M_DQT   = 0xdb,
-  M_DNL   = 0xdc,
-  M_DRI   = 0xdd,
-  M_DHP   = 0xde,
-  M_EXP   = 0xdf,
-
-  M_APP0  = 0xe0,
-  M_APP1  = 0xe1,
-  M_APP2  = 0xe2,
-  M_APP3  = 0xe3,
-  M_APP4  = 0xe4,
-  M_APP5  = 0xe5,
-  M_APP6  = 0xe6,
-  M_APP7  = 0xe7,
-  M_APP8  = 0xe8,
-  M_APP9  = 0xe9,
-  M_APP10 = 0xea,
-  M_APP11 = 0xeb,
-  M_APP12 = 0xec,
-  M_APP13 = 0xed,
-  M_APP14 = 0xee,
-  M_APP15 = 0xef,
-
-  M_JPG0  = 0xf0,
-  M_JPG8  = 0xf8,
-  M_JPG13 = 0xfd,
-  M_COM   = 0xfe,
-
-  M_TEM   = 0x01,
-
-  M_ERROR = 0x100
-} JPEG_MARKER;
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_marker_writer pub; /* public fields */
-
-  unsigned int last_restart_interval; /* last DRI value emitted; 0 after SOI */
-} my_marker_writer;
-
-typedef my_marker_writer * my_marker_ptr;
-
-
-/*
- * Basic output routines.
- *
- * Note that we do not support suspension while writing a marker.
- * Therefore, an application using suspension must ensure that there is
- * enough buffer space for the initial markers (typ. 600-700 bytes) before
- * calling jpeg_start_compress, and enough space to write the trailing EOI
- * (a few bytes) before calling jpeg_finish_compress.  Multipass compression
- * modes are not supported at all with suspension, so those two are the only
- * points where markers will be written.
- */
-
-LOCAL(void)
-emit_byte (j_compress_ptr cinfo, int val)
-/* Emit a byte */
-{
-  struct jpeg_destination_mgr * dest = cinfo->dest;
-
-  *(dest->next_output_byte)++ = (JOCTET) val;
-  if (--dest->free_in_buffer == 0) {
-    if (! (*dest->empty_output_buffer) (cinfo))
-      ERREXIT(cinfo, JERR_CANT_SUSPEND);
-  }
-}
-
-
-LOCAL(void)
-emit_marker (j_compress_ptr cinfo, JPEG_MARKER mark)
-/* Emit a marker code */
-{
-  emit_byte(cinfo, 0xFF);
-  emit_byte(cinfo, (int) mark);
-}
-
-
-LOCAL(void)
-emit_2bytes (j_compress_ptr cinfo, int value)
-/* Emit a 2-byte integer; these are always MSB first in JPEG files */
-{
-  emit_byte(cinfo, (value >> 8) & 0xFF);
-  emit_byte(cinfo, value & 0xFF);
-}
-
-
-/*
- * Routines to write specific marker types.
- */
-
-LOCAL(int)
-emit_dqt (j_compress_ptr cinfo, int index)
-/* Emit a DQT marker */
-/* Returns the precision used (0 = 8bits, 1 = 16bits) for baseline checking */
-{
-  JQUANT_TBL * qtbl = cinfo->quant_tbl_ptrs[index];
-  int prec;
-  int i;
-
-  if (qtbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index);
-
-  prec = 0;
-  for (i = 0; i <= cinfo->lim_Se; i++) {
-    if (qtbl->quantval[cinfo->natural_order[i]] > 255)
-      prec = 1;
-  }
-
-  if (! qtbl->sent_table) {
-    emit_marker(cinfo, M_DQT);
-
-    emit_2bytes(cinfo,
-      prec ? cinfo->lim_Se * 2 + 2 + 1 + 2 : cinfo->lim_Se + 1 + 1 + 2);
-
-    emit_byte(cinfo, index + (prec<<4));
-
-    for (i = 0; i <= cinfo->lim_Se; i++) {
-      /* The table entries must be emitted in zigzag order. */
-      unsigned int qval = qtbl->quantval[cinfo->natural_order[i]];
-      if (prec)
-	emit_byte(cinfo, (int) (qval >> 8));
-      emit_byte(cinfo, (int) (qval & 0xFF));
-    }
-
-    qtbl->sent_table = TRUE;
-  }
-
-  return prec;
-}
-
-
-LOCAL(void)
-emit_dht (j_compress_ptr cinfo, int index, boolean is_ac)
-/* Emit a DHT marker */
-{
-  JHUFF_TBL * htbl;
-  int length, i;
-  
-  if (is_ac) {
-    htbl = cinfo->ac_huff_tbl_ptrs[index];
-    index += 0x10;		/* output index has AC bit set */
-  } else {
-    htbl = cinfo->dc_huff_tbl_ptrs[index];
-  }
-
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, index);
-  
-  if (! htbl->sent_table) {
-    emit_marker(cinfo, M_DHT);
-    
-    length = 0;
-    for (i = 1; i <= 16; i++)
-      length += htbl->bits[i];
-    
-    emit_2bytes(cinfo, length + 2 + 1 + 16);
-    emit_byte(cinfo, index);
-    
-    for (i = 1; i <= 16; i++)
-      emit_byte(cinfo, htbl->bits[i]);
-    
-    for (i = 0; i < length; i++)
-      emit_byte(cinfo, htbl->huffval[i]);
-    
-    htbl->sent_table = TRUE;
-  }
-}
-
-
-LOCAL(void)
-emit_dac (j_compress_ptr cinfo)
-/* Emit a DAC marker */
-/* Since the useful info is so small, we want to emit all the tables in */
-/* one DAC marker.  Therefore this routine does its own scan of the table. */
-{
-#ifdef C_ARITH_CODING_SUPPORTED
-  char dc_in_use[NUM_ARITH_TBLS];
-  char ac_in_use[NUM_ARITH_TBLS];
-  int length, i;
-  jpeg_component_info *compptr;
-
-  for (i = 0; i < NUM_ARITH_TBLS; i++)
-    dc_in_use[i] = ac_in_use[i] = 0;
-
-  for (i = 0; i < cinfo->comps_in_scan; i++) {
-    compptr = cinfo->cur_comp_info[i];
-    /* DC needs no table for refinement scan */
-    if (cinfo->Ss == 0 && cinfo->Ah == 0)
-      dc_in_use[compptr->dc_tbl_no] = 1;
-    /* AC needs no table when not present */
-    if (cinfo->Se)
-      ac_in_use[compptr->ac_tbl_no] = 1;
-  }
-
-  length = 0;
-  for (i = 0; i < NUM_ARITH_TBLS; i++)
-    length += dc_in_use[i] + ac_in_use[i];
-
-  if (length) {
-    emit_marker(cinfo, M_DAC);
-
-    emit_2bytes(cinfo, length*2 + 2);
-
-    for (i = 0; i < NUM_ARITH_TBLS; i++) {
-      if (dc_in_use[i]) {
-	emit_byte(cinfo, i);
-	emit_byte(cinfo, cinfo->arith_dc_L[i] + (cinfo->arith_dc_U[i]<<4));
-      }
-      if (ac_in_use[i]) {
-	emit_byte(cinfo, i + 0x10);
-	emit_byte(cinfo, cinfo->arith_ac_K[i]);
-      }
-    }
-  }
-#endif /* C_ARITH_CODING_SUPPORTED */
-}
-
-
-LOCAL(void)
-emit_dri (j_compress_ptr cinfo)
-/* Emit a DRI marker */
-{
-  emit_marker(cinfo, M_DRI);
-  
-  emit_2bytes(cinfo, 4);	/* fixed length */
-
-  emit_2bytes(cinfo, (int) cinfo->restart_interval);
-}
-
-
-LOCAL(void)
-emit_lse_ict (j_compress_ptr cinfo)
-/* Emit an LSE inverse color transform specification marker */
-{
-  /* Support only 1 transform */
-  if (cinfo->color_transform != JCT_SUBTRACT_GREEN ||
-      cinfo->num_components < 3)
-    ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-
-  emit_marker(cinfo, M_JPG8);
-  
-  emit_2bytes(cinfo, 24);	/* fixed length */
-
-  emit_byte(cinfo, 0x0D);	/* ID inverse transform specification */
-  emit_2bytes(cinfo, MAXJSAMPLE);	/* MAXTRANS */
-  emit_byte(cinfo, 3);		/* Nt=3 */
-  emit_byte(cinfo, cinfo->comp_info[1].component_id);
-  emit_byte(cinfo, cinfo->comp_info[0].component_id);
-  emit_byte(cinfo, cinfo->comp_info[2].component_id);
-  emit_byte(cinfo, 0x80);	/* F1: CENTER1=1, NORM1=0 */
-  emit_2bytes(cinfo, 0);	/* A(1,1)=0 */
-  emit_2bytes(cinfo, 0);	/* A(1,2)=0 */
-  emit_byte(cinfo, 0);		/* F2: CENTER2=0, NORM2=0 */
-  emit_2bytes(cinfo, 1);	/* A(2,1)=1 */
-  emit_2bytes(cinfo, 0);	/* A(2,2)=0 */
-  emit_byte(cinfo, 0);		/* F3: CENTER3=0, NORM3=0 */
-  emit_2bytes(cinfo, 1);	/* A(3,1)=1 */
-  emit_2bytes(cinfo, 0);	/* A(3,2)=0 */
-}
-
-
-LOCAL(void)
-emit_sof (j_compress_ptr cinfo, JPEG_MARKER code)
-/* Emit a SOF marker */
-{
-  int ci;
-  jpeg_component_info *compptr;
-  
-  emit_marker(cinfo, code);
-  
-  emit_2bytes(cinfo, 3 * cinfo->num_components + 2 + 5 + 1); /* length */
-
-  /* Make sure image isn't bigger than SOF field can handle */
-  if ((long) cinfo->jpeg_height > 65535L ||
-      (long) cinfo->jpeg_width > 65535L)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) 65535);
-
-  emit_byte(cinfo, cinfo->data_precision);
-  emit_2bytes(cinfo, (int) cinfo->jpeg_height);
-  emit_2bytes(cinfo, (int) cinfo->jpeg_width);
-
-  emit_byte(cinfo, cinfo->num_components);
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    emit_byte(cinfo, compptr->component_id);
-    emit_byte(cinfo, (compptr->h_samp_factor << 4) + compptr->v_samp_factor);
-    emit_byte(cinfo, compptr->quant_tbl_no);
-  }
-}
-
-
-LOCAL(void)
-emit_sos (j_compress_ptr cinfo)
-/* Emit a SOS marker */
-{
-  int i, td, ta;
-  jpeg_component_info *compptr;
-  
-  emit_marker(cinfo, M_SOS);
-  
-  emit_2bytes(cinfo, 2 * cinfo->comps_in_scan + 2 + 1 + 3); /* length */
-  
-  emit_byte(cinfo, cinfo->comps_in_scan);
-  
-  for (i = 0; i < cinfo->comps_in_scan; i++) {
-    compptr = cinfo->cur_comp_info[i];
-    emit_byte(cinfo, compptr->component_id);
-
-    /* We emit 0 for unused field(s); this is recommended by the P&M text
-     * but does not seem to be specified in the standard.
-     */
-
-    /* DC needs no table for refinement scan */
-    td = cinfo->Ss == 0 && cinfo->Ah == 0 ? compptr->dc_tbl_no : 0;
-    /* AC needs no table when not present */
-    ta = cinfo->Se ? compptr->ac_tbl_no : 0;
-
-    emit_byte(cinfo, (td << 4) + ta);
-  }
-
-  emit_byte(cinfo, cinfo->Ss);
-  emit_byte(cinfo, cinfo->Se);
-  emit_byte(cinfo, (cinfo->Ah << 4) + cinfo->Al);
-}
-
-
-LOCAL(void)
-emit_pseudo_sos (j_compress_ptr cinfo)
-/* Emit a pseudo SOS marker */
-{
-  emit_marker(cinfo, M_SOS);
-  
-  emit_2bytes(cinfo, 2 + 1 + 3); /* length */
-  
-  emit_byte(cinfo, 0); /* Ns */
-
-  emit_byte(cinfo, 0); /* Ss */
-  emit_byte(cinfo, cinfo->block_size * cinfo->block_size - 1); /* Se */
-  emit_byte(cinfo, 0); /* Ah/Al */
-}
-
-
-LOCAL(void)
-emit_jfif_app0 (j_compress_ptr cinfo)
-/* Emit a JFIF-compliant APP0 marker */
-{
-  /*
-   * Length of APP0 block	(2 bytes)
-   * Block ID			(4 bytes - ASCII "JFIF")
-   * Zero byte			(1 byte to terminate the ID string)
-   * Version Major, Minor	(2 bytes - major first)
-   * Units			(1 byte - 0x00 = none, 0x01 = inch, 0x02 = cm)
-   * Xdpu			(2 bytes - dots per unit horizontal)
-   * Ydpu			(2 bytes - dots per unit vertical)
-   * Thumbnail X size		(1 byte)
-   * Thumbnail Y size		(1 byte)
-   */
-  
-  emit_marker(cinfo, M_APP0);
-  
-  emit_2bytes(cinfo, 2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1); /* length */
-
-  emit_byte(cinfo, 0x4A);	/* Identifier: ASCII "JFIF" */
-  emit_byte(cinfo, 0x46);
-  emit_byte(cinfo, 0x49);
-  emit_byte(cinfo, 0x46);
-  emit_byte(cinfo, 0);
-  emit_byte(cinfo, cinfo->JFIF_major_version); /* Version fields */
-  emit_byte(cinfo, cinfo->JFIF_minor_version);
-  emit_byte(cinfo, cinfo->density_unit); /* Pixel size information */
-  emit_2bytes(cinfo, (int) cinfo->X_density);
-  emit_2bytes(cinfo, (int) cinfo->Y_density);
-  emit_byte(cinfo, 0);		/* No thumbnail image */
-  emit_byte(cinfo, 0);
-}
-
-
-LOCAL(void)
-emit_adobe_app14 (j_compress_ptr cinfo)
-/* Emit an Adobe APP14 marker */
-{
-  /*
-   * Length of APP14 block	(2 bytes)
-   * Block ID			(5 bytes - ASCII "Adobe")
-   * Version Number		(2 bytes - currently 100)
-   * Flags0			(2 bytes - currently 0)
-   * Flags1			(2 bytes - currently 0)
-   * Color transform		(1 byte)
-   *
-   * Although Adobe TN 5116 mentions Version = 101, all the Adobe files
-   * now in circulation seem to use Version = 100, so that's what we write.
-   *
-   * We write the color transform byte as 1 if the JPEG color space is
-   * YCbCr, 2 if it's YCCK, 0 otherwise.  Adobe's definition has to do with
-   * whether the encoder performed a transformation, which is pretty useless.
-   */
-  
-  emit_marker(cinfo, M_APP14);
-  
-  emit_2bytes(cinfo, 2 + 5 + 2 + 2 + 2 + 1); /* length */
-
-  emit_byte(cinfo, 0x41);	/* Identifier: ASCII "Adobe" */
-  emit_byte(cinfo, 0x64);
-  emit_byte(cinfo, 0x6F);
-  emit_byte(cinfo, 0x62);
-  emit_byte(cinfo, 0x65);
-  emit_2bytes(cinfo, 100);	/* Version */
-  emit_2bytes(cinfo, 0);	/* Flags0 */
-  emit_2bytes(cinfo, 0);	/* Flags1 */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_YCbCr:
-    emit_byte(cinfo, 1);	/* Color transform = 1 */
-    break;
-  case JCS_YCCK:
-    emit_byte(cinfo, 2);	/* Color transform = 2 */
-    break;
-  default:
-    emit_byte(cinfo, 0);	/* Color transform = 0 */
-    break;
-  }
-}
-
-
-/*
- * These routines allow writing an arbitrary marker with parameters.
- * The only intended use is to emit COM or APPn markers after calling
- * write_file_header and before calling write_frame_header.
- * Other uses are not guaranteed to produce desirable results.
- * Counting the parameter bytes properly is the caller's responsibility.
- */
-
-METHODDEF(void)
-write_marker_header (j_compress_ptr cinfo, int marker, unsigned int datalen)
-/* Emit an arbitrary marker header */
-{
-  if (datalen > (unsigned int) 65533)		/* safety check */
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  emit_marker(cinfo, (JPEG_MARKER) marker);
-
-  emit_2bytes(cinfo, (int) (datalen + 2));	/* total length */
-}
-
-METHODDEF(void)
-write_marker_byte (j_compress_ptr cinfo, int val)
-/* Emit one byte of marker parameters following write_marker_header */
-{
-  emit_byte(cinfo, val);
-}
-
-
-/*
- * Write datastream header.
- * This consists of an SOI and optional APPn markers.
- * We recommend use of the JFIF marker, but not the Adobe marker,
- * when using YCbCr or grayscale data.  The JFIF marker is also used
- * for other standard JPEG colorspaces.  The Adobe marker is helpful
- * to distinguish RGB, CMYK, and YCCK colorspaces.
- * Note that an application can write additional header markers after
- * jpeg_start_compress returns.
- */
-
-METHODDEF(void)
-write_file_header (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-
-  emit_marker(cinfo, M_SOI);	/* first the SOI */
-
-  /* SOI is defined to reset restart interval to 0 */
-  marker->last_restart_interval = 0;
-
-  if (cinfo->write_JFIF_header)	/* next an optional JFIF APP0 */
-    emit_jfif_app0(cinfo);
-  if (cinfo->write_Adobe_marker) /* next an optional Adobe APP14 */
-    emit_adobe_app14(cinfo);
-}
-
-
-/*
- * Write frame header.
- * This consists of DQT and SOFn markers,
- * a conditional LSE marker and a conditional pseudo SOS marker.
- * Note that we do not emit the SOF until we have emitted the DQT(s).
- * This avoids compatibility problems with incorrect implementations that
- * try to error-check the quant table numbers as soon as they see the SOF.
- */
-
-METHODDEF(void)
-write_frame_header (j_compress_ptr cinfo)
-{
-  int ci, prec;
-  boolean is_baseline;
-  jpeg_component_info *compptr;
-  
-  /* Emit DQT for each quantization table.
-   * Note that emit_dqt() suppresses any duplicate tables.
-   */
-  prec = 0;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    prec += emit_dqt(cinfo, compptr->quant_tbl_no);
-  }
-  /* now prec is nonzero iff there are any 16-bit quant tables. */
-
-  /* Check for a non-baseline specification.
-   * Note we assume that Huffman table numbers won't be changed later.
-   */
-  if (cinfo->arith_code || cinfo->progressive_mode ||
-      cinfo->data_precision != 8 || cinfo->block_size != DCTSIZE) {
-    is_baseline = FALSE;
-  } else {
-    is_baseline = TRUE;
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      if (compptr->dc_tbl_no > 1 || compptr->ac_tbl_no > 1)
-	is_baseline = FALSE;
-    }
-    if (prec && is_baseline) {
-      is_baseline = FALSE;
-      /* If it's baseline except for quantizer size, warn the user */
-      TRACEMS(cinfo, 0, JTRC_16BIT_TABLES);
-    }
-  }
-
-  /* Emit the proper SOF marker */
-  if (cinfo->arith_code) {
-    if (cinfo->progressive_mode)
-      emit_sof(cinfo, M_SOF10); /* SOF code for progressive arithmetic */
-    else
-      emit_sof(cinfo, M_SOF9);  /* SOF code for sequential arithmetic */
-  } else {
-    if (cinfo->progressive_mode)
-      emit_sof(cinfo, M_SOF2);	/* SOF code for progressive Huffman */
-    else if (is_baseline)
-      emit_sof(cinfo, M_SOF0);	/* SOF code for baseline implementation */
-    else
-      emit_sof(cinfo, M_SOF1);	/* SOF code for non-baseline Huffman file */
-  }
-
-  /* Check to emit LSE inverse color transform specification marker */
-  if (cinfo->color_transform)
-    emit_lse_ict(cinfo);
-
-  /* Check to emit pseudo SOS marker */
-  if (cinfo->progressive_mode && cinfo->block_size != DCTSIZE)
-    emit_pseudo_sos(cinfo);
-}
-
-
-/*
- * Write scan header.
- * This consists of DHT or DAC markers, optional DRI, and SOS.
- * Compressed data will be written following the SOS.
- */
-
-METHODDEF(void)
-write_scan_header (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-  int i;
-  jpeg_component_info *compptr;
-
-  if (cinfo->arith_code) {
-    /* Emit arith conditioning info.  We may have some duplication
-     * if the file has multiple scans, but it's so small it's hardly
-     * worth worrying about.
-     */
-    emit_dac(cinfo);
-  } else {
-    /* Emit Huffman tables.
-     * Note that emit_dht() suppresses any duplicate tables.
-     */
-    for (i = 0; i < cinfo->comps_in_scan; i++) {
-      compptr = cinfo->cur_comp_info[i];
-      /* DC needs no table for refinement scan */
-      if (cinfo->Ss == 0 && cinfo->Ah == 0)
-	emit_dht(cinfo, compptr->dc_tbl_no, FALSE);
-      /* AC needs no table when not present */
-      if (cinfo->Se)
-	emit_dht(cinfo, compptr->ac_tbl_no, TRUE);
-    }
-  }
-
-  /* Emit DRI if required --- note that DRI value could change for each scan.
-   * We avoid wasting space with unnecessary DRIs, however.
-   */
-  if (cinfo->restart_interval != marker->last_restart_interval) {
-    emit_dri(cinfo);
-    marker->last_restart_interval = cinfo->restart_interval;
-  }
-
-  emit_sos(cinfo);
-}
-
-
-/*
- * Write datastream trailer.
- */
-
-METHODDEF(void)
-write_file_trailer (j_compress_ptr cinfo)
-{
-  emit_marker(cinfo, M_EOI);
-}
-
-
-/*
- * Write an abbreviated table-specification datastream.
- * This consists of SOI, DQT and DHT tables, and EOI.
- * Any table that is defined and not marked sent_table = TRUE will be
- * emitted.  Note that all tables will be marked sent_table = TRUE at exit.
- */
-
-METHODDEF(void)
-write_tables_only (j_compress_ptr cinfo)
-{
-  int i;
-
-  emit_marker(cinfo, M_SOI);
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++) {
-    if (cinfo->quant_tbl_ptrs[i] != NULL)
-      (void) emit_dqt(cinfo, i);
-  }
-
-  if (! cinfo->arith_code) {
-    for (i = 0; i < NUM_HUFF_TBLS; i++) {
-      if (cinfo->dc_huff_tbl_ptrs[i] != NULL)
-	emit_dht(cinfo, i, FALSE);
-      if (cinfo->ac_huff_tbl_ptrs[i] != NULL)
-	emit_dht(cinfo, i, TRUE);
-    }
-  }
-
-  emit_marker(cinfo, M_EOI);
-}
-
-
-/*
- * Initialize the marker writer module.
- */
-
-GLOBAL(void)
-jinit_marker_writer (j_compress_ptr cinfo)
-{
-  my_marker_ptr marker;
-
-  /* Create the subobject */
-  marker = (my_marker_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_marker_writer));
-  cinfo->marker = &marker->pub;
-  /* Initialize method pointers */
-  marker->pub.write_file_header = write_file_header;
-  marker->pub.write_frame_header = write_frame_header;
-  marker->pub.write_scan_header = write_scan_header;
-  marker->pub.write_file_trailer = write_file_trailer;
-  marker->pub.write_tables_only = write_tables_only;
-  marker->pub.write_marker_header = write_marker_header;
-  marker->pub.write_marker_byte = write_marker_byte;
-  /* Initialize private state */
-  marker->last_restart_interval = 0;
-}
--- a/DoConfig/fltk/jpeg/jcmaster.c
+++ /dev/null
@@ -1,856 +1,0 @@
-/*
- * jcmaster.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains master control logic for the JPEG compressor.
- * These routines are concerned with parameter validation, initial setup,
- * and inter-pass control (determining the number of passes and the work 
- * to be done in each pass).
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef enum {
-	main_pass,		/* input data, also do first output step */
-	huff_opt_pass,		/* Huffman code optimization pass */
-	output_pass		/* data output pass */
-} c_pass_type;
-
-typedef struct {
-  struct jpeg_comp_master pub;	/* public fields */
-
-  c_pass_type pass_type;	/* the type of the current pass */
-
-  int pass_number;		/* # of passes completed */
-  int total_passes;		/* total # of passes needed */
-
-  int scan_number;		/* current index in scan_info[] */
-} my_comp_master;
-
-typedef my_comp_master * my_master_ptr;
-
-
-/*
- * Support routines that do various essential calculations.
- */
-
-/*
- * Compute JPEG image dimensions and related values.
- * NOTE: this is exported for possible use by application.
- * Hence it mustn't do anything that can't be done twice.
- */
-
-GLOBAL(void)
-jpeg_calc_jpeg_dimensions (j_compress_ptr cinfo)
-/* Do computations that are needed before master selection phase */
-{
-#ifdef DCT_SCALING_SUPPORTED
-
-  /* Sanity check on input image dimensions to prevent overflow in
-   * following calculation.
-   * We do check jpeg_width and jpeg_height in initial_setup below,
-   * but image_width and image_height can come from arbitrary data,
-   * and we need some space for multiplication by block_size.
-   */
-  if (((long) cinfo->image_width >> 24) || ((long) cinfo->image_height >> 24))
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
-
-  /* Compute actual JPEG image dimensions and DCT scaling choices. */
-  if (cinfo->scale_num >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/1 scaling */
-    cinfo->jpeg_width = cinfo->image_width * cinfo->block_size;
-    cinfo->jpeg_height = cinfo->image_height * cinfo->block_size;
-    cinfo->min_DCT_h_scaled_size = 1;
-    cinfo->min_DCT_v_scaled_size = 1;
-  } else if (cinfo->scale_num * 2 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/2 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 2L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 2L);
-    cinfo->min_DCT_h_scaled_size = 2;
-    cinfo->min_DCT_v_scaled_size = 2;
-  } else if (cinfo->scale_num * 3 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/3 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 3L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 3L);
-    cinfo->min_DCT_h_scaled_size = 3;
-    cinfo->min_DCT_v_scaled_size = 3;
-  } else if (cinfo->scale_num * 4 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/4 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 4L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 4L);
-    cinfo->min_DCT_h_scaled_size = 4;
-    cinfo->min_DCT_v_scaled_size = 4;
-  } else if (cinfo->scale_num * 5 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/5 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 5L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 5L);
-    cinfo->min_DCT_h_scaled_size = 5;
-    cinfo->min_DCT_v_scaled_size = 5;
-  } else if (cinfo->scale_num * 6 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/6 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 6L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 6L);
-    cinfo->min_DCT_h_scaled_size = 6;
-    cinfo->min_DCT_v_scaled_size = 6;
-  } else if (cinfo->scale_num * 7 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/7 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 7L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 7L);
-    cinfo->min_DCT_h_scaled_size = 7;
-    cinfo->min_DCT_v_scaled_size = 7;
-  } else if (cinfo->scale_num * 8 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/8 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 8L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 8L);
-    cinfo->min_DCT_h_scaled_size = 8;
-    cinfo->min_DCT_v_scaled_size = 8;
-  } else if (cinfo->scale_num * 9 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/9 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 9L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 9L);
-    cinfo->min_DCT_h_scaled_size = 9;
-    cinfo->min_DCT_v_scaled_size = 9;
-  } else if (cinfo->scale_num * 10 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/10 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 10L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 10L);
-    cinfo->min_DCT_h_scaled_size = 10;
-    cinfo->min_DCT_v_scaled_size = 10;
-  } else if (cinfo->scale_num * 11 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/11 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 11L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 11L);
-    cinfo->min_DCT_h_scaled_size = 11;
-    cinfo->min_DCT_v_scaled_size = 11;
-  } else if (cinfo->scale_num * 12 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/12 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 12L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 12L);
-    cinfo->min_DCT_h_scaled_size = 12;
-    cinfo->min_DCT_v_scaled_size = 12;
-  } else if (cinfo->scale_num * 13 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/13 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 13L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 13L);
-    cinfo->min_DCT_h_scaled_size = 13;
-    cinfo->min_DCT_v_scaled_size = 13;
-  } else if (cinfo->scale_num * 14 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/14 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 14L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 14L);
-    cinfo->min_DCT_h_scaled_size = 14;
-    cinfo->min_DCT_v_scaled_size = 14;
-  } else if (cinfo->scale_num * 15 >= cinfo->scale_denom * cinfo->block_size) {
-    /* Provide block_size/15 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 15L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 15L);
-    cinfo->min_DCT_h_scaled_size = 15;
-    cinfo->min_DCT_v_scaled_size = 15;
-  } else {
-    /* Provide block_size/16 scaling */
-    cinfo->jpeg_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 16L);
-    cinfo->jpeg_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 16L);
-    cinfo->min_DCT_h_scaled_size = 16;
-    cinfo->min_DCT_v_scaled_size = 16;
-  }
-
-#else /* !DCT_SCALING_SUPPORTED */
-
-  /* Hardwire it to "no scaling" */
-  cinfo->jpeg_width = cinfo->image_width;
-  cinfo->jpeg_height = cinfo->image_height;
-  cinfo->min_DCT_h_scaled_size = DCTSIZE;
-  cinfo->min_DCT_v_scaled_size = DCTSIZE;
-
-#endif /* DCT_SCALING_SUPPORTED */
-}
-
-
-LOCAL(void)
-jpeg_calc_trans_dimensions (j_compress_ptr cinfo)
-{
-  if (cinfo->min_DCT_h_scaled_size != cinfo->min_DCT_v_scaled_size)
-    ERREXIT2(cinfo, JERR_BAD_DCTSIZE,
-	     cinfo->min_DCT_h_scaled_size, cinfo->min_DCT_v_scaled_size);
-
-  cinfo->block_size = cinfo->min_DCT_h_scaled_size;
-}
-
-
-LOCAL(void)
-initial_setup (j_compress_ptr cinfo, boolean transcode_only)
-/* Do computations that are needed before master selection phase */
-{
-  int ci, ssize;
-  jpeg_component_info *compptr;
-
-  if (transcode_only)
-    jpeg_calc_trans_dimensions(cinfo);
-  else
-    jpeg_calc_jpeg_dimensions(cinfo);
-
-  /* Sanity check on block_size */
-  if (cinfo->block_size < 1 || cinfo->block_size > 16)
-    ERREXIT2(cinfo, JERR_BAD_DCTSIZE, cinfo->block_size, cinfo->block_size);
-
-  /* Derive natural_order from block_size */
-  switch (cinfo->block_size) {
-  case 2: cinfo->natural_order = jpeg_natural_order2; break;
-  case 3: cinfo->natural_order = jpeg_natural_order3; break;
-  case 4: cinfo->natural_order = jpeg_natural_order4; break;
-  case 5: cinfo->natural_order = jpeg_natural_order5; break;
-  case 6: cinfo->natural_order = jpeg_natural_order6; break;
-  case 7: cinfo->natural_order = jpeg_natural_order7; break;
-  default: cinfo->natural_order = jpeg_natural_order; break;
-  }
-
-  /* Derive lim_Se from block_size */
-  cinfo->lim_Se = cinfo->block_size < DCTSIZE ?
-    cinfo->block_size * cinfo->block_size - 1 : DCTSIZE2-1;
-
-  /* Sanity check on image dimensions */
-  if (cinfo->jpeg_height <= 0 || cinfo->jpeg_width <= 0 ||
-      cinfo->num_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  /* Make sure image isn't bigger than I can handle */
-  if ((long) cinfo->jpeg_height > (long) JPEG_MAX_DIMENSION ||
-      (long) cinfo->jpeg_width > (long) JPEG_MAX_DIMENSION)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
-
-  /* Only 8 to 12 bits data precision are supported for DCT based JPEG */
-  if (cinfo->data_precision < 8 || cinfo->data_precision > 12)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Check that number of components won't exceed internal array sizes */
-  if (cinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	     MAX_COMPONENTS);
-
-  /* Compute maximum sampling factors; check factor validity */
-  cinfo->max_h_samp_factor = 1;
-  cinfo->max_v_samp_factor = 1;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR ||
-	compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR)
-      ERREXIT(cinfo, JERR_BAD_SAMPLING);
-    cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor,
-				   compptr->h_samp_factor);
-    cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor,
-				   compptr->v_samp_factor);
-  }
-
-  /* Compute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Fill in the correct component_index value; don't rely on application */
-    compptr->component_index = ci;
-    /* In selecting the actual DCT scaling for each component, we try to
-     * scale down the chroma components via DCT scaling rather than downsampling.
-     * This saves time if the downsampler gets to use 1:1 scaling.
-     * Note this code adapts subsampling ratios which are powers of 2.
-     */
-    ssize = 1;
-#ifdef DCT_SCALING_SUPPORTED
-    while (cinfo->min_DCT_h_scaled_size * ssize <=
-	   (cinfo->do_fancy_downsampling ? DCTSIZE : DCTSIZE / 2) &&
-	   (cinfo->max_h_samp_factor % (compptr->h_samp_factor * ssize * 2)) == 0) {
-      ssize = ssize * 2;
-    }
-#endif
-    compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size * ssize;
-    ssize = 1;
-#ifdef DCT_SCALING_SUPPORTED
-    while (cinfo->min_DCT_v_scaled_size * ssize <=
-	   (cinfo->do_fancy_downsampling ? DCTSIZE : DCTSIZE / 2) &&
-	   (cinfo->max_v_samp_factor % (compptr->v_samp_factor * ssize * 2)) == 0) {
-      ssize = ssize * 2;
-    }
-#endif
-    compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size * ssize;
-
-    /* We don't support DCT ratios larger than 2. */
-    if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2)
-	compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size * 2;
-    else if (compptr->DCT_v_scaled_size > compptr->DCT_h_scaled_size * 2)
-	compptr->DCT_v_scaled_size = compptr->DCT_h_scaled_size * 2;
-
-    /* Size in DCT blocks */
-    compptr->width_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_width * (long) compptr->h_samp_factor,
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    compptr->height_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_height * (long) compptr->v_samp_factor,
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-    /* Size in samples */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_width *
-		    (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size),
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_height *
-		    (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size),
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-    /* Don't need quantization scale after DCT,
-     * until color conversion says otherwise.
-     */
-    compptr->component_needed = FALSE;
-  }
-
-  /* Compute number of fully interleaved MCU rows (number of times that
-   * main controller will call coefficient controller).
-   */
-  cinfo->total_iMCU_rows = (JDIMENSION)
-    jdiv_round_up((long) cinfo->jpeg_height,
-		  (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-}
-
-
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-
-LOCAL(void)
-validate_script (j_compress_ptr cinfo)
-/* Verify that the scan script in cinfo->scan_info[] is valid; also
- * determine whether it uses progressive JPEG, and set cinfo->progressive_mode.
- */
-{
-  const jpeg_scan_info * scanptr;
-  int scanno, ncomps, ci, coefi, thisi;
-  int Ss, Se, Ah, Al;
-  boolean component_sent[MAX_COMPONENTS];
-#ifdef C_PROGRESSIVE_SUPPORTED
-  int * last_bitpos_ptr;
-  int last_bitpos[MAX_COMPONENTS][DCTSIZE2];
-  /* -1 until that coefficient has been seen; then last Al for it */
-#endif
-
-  if (cinfo->num_scans <= 0)
-    ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, 0);
-
-  /* For sequential JPEG, all scans must have Ss=0, Se=DCTSIZE2-1;
-   * for progressive JPEG, no scan can have this.
-   */
-  scanptr = cinfo->scan_info;
-  if (scanptr->Ss != 0 || scanptr->Se != DCTSIZE2-1) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-    cinfo->progressive_mode = TRUE;
-    last_bitpos_ptr = & last_bitpos[0][0];
-    for (ci = 0; ci < cinfo->num_components; ci++) 
-      for (coefi = 0; coefi < DCTSIZE2; coefi++)
-	*last_bitpos_ptr++ = -1;
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    cinfo->progressive_mode = FALSE;
-    for (ci = 0; ci < cinfo->num_components; ci++) 
-      component_sent[ci] = FALSE;
-  }
-
-  for (scanno = 1; scanno <= cinfo->num_scans; scanptr++, scanno++) {
-    /* Validate component indexes */
-    ncomps = scanptr->comps_in_scan;
-    if (ncomps <= 0 || ncomps > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, ncomps, MAX_COMPS_IN_SCAN);
-    for (ci = 0; ci < ncomps; ci++) {
-      thisi = scanptr->component_index[ci];
-      if (thisi < 0 || thisi >= cinfo->num_components)
-	ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-      /* Components must appear in SOF order within each scan */
-      if (ci > 0 && thisi <= scanptr->component_index[ci-1])
-	ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-    }
-    /* Validate progression parameters */
-    Ss = scanptr->Ss;
-    Se = scanptr->Se;
-    Ah = scanptr->Ah;
-    Al = scanptr->Al;
-    if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-      /* The JPEG spec simply gives the ranges 0..13 for Ah and Al, but that
-       * seems wrong: the upper bound ought to depend on data precision.
-       * Perhaps they really meant 0..N+1 for N-bit precision.
-       * Here we allow 0..10 for 8-bit data; Al larger than 10 results in
-       * out-of-range reconstructed DC values during the first DC scan,
-       * which might cause problems for some decoders.
-       */
-#if BITS_IN_JSAMPLE == 8
-#define MAX_AH_AL 10
-#else
-#define MAX_AH_AL 13
-#endif
-      if (Ss < 0 || Ss >= DCTSIZE2 || Se < Ss || Se >= DCTSIZE2 ||
-	  Ah < 0 || Ah > MAX_AH_AL || Al < 0 || Al > MAX_AH_AL)
-	ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      if (Ss == 0) {
-	if (Se != 0)		/* DC and AC together not OK */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      } else {
-	if (ncomps != 1)	/* AC scans must be for only one component */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      }
-      for (ci = 0; ci < ncomps; ci++) {
-	last_bitpos_ptr = & last_bitpos[scanptr->component_index[ci]][0];
-	if (Ss != 0 && last_bitpos_ptr[0] < 0) /* AC without prior DC scan */
-	  ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	for (coefi = Ss; coefi <= Se; coefi++) {
-	  if (last_bitpos_ptr[coefi] < 0) {
-	    /* first scan of this coefficient */
-	    if (Ah != 0)
-	      ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	  } else {
-	    /* not first scan */
-	    if (Ah != last_bitpos_ptr[coefi] || Al != Ah-1)
-	      ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-	  }
-	  last_bitpos_ptr[coefi] = Al;
-	}
-      }
-#endif
-    } else {
-      /* For sequential JPEG, all progression parameters must be these: */
-      if (Ss != 0 || Se != DCTSIZE2-1 || Ah != 0 || Al != 0)
-	ERREXIT1(cinfo, JERR_BAD_PROG_SCRIPT, scanno);
-      /* Make sure components are not sent twice */
-      for (ci = 0; ci < ncomps; ci++) {
-	thisi = scanptr->component_index[ci];
-	if (component_sent[thisi])
-	  ERREXIT1(cinfo, JERR_BAD_SCAN_SCRIPT, scanno);
-	component_sent[thisi] = TRUE;
-      }
-    }
-  }
-
-  /* Now verify that everything got sent. */
-  if (cinfo->progressive_mode) {
-#ifdef C_PROGRESSIVE_SUPPORTED
-    /* For progressive mode, we only check that at least some DC data
-     * got sent for each component; the spec does not require that all bits
-     * of all coefficients be transmitted.  Would it be wiser to enforce
-     * transmission of all coefficient bits??
-     */
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      if (last_bitpos[ci][0] < 0)
-	ERREXIT(cinfo, JERR_MISSING_DATA);
-    }
-#endif
-  } else {
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      if (! component_sent[ci])
-	ERREXIT(cinfo, JERR_MISSING_DATA);
-    }
-  }
-}
-
-
-LOCAL(void)
-reduce_script (j_compress_ptr cinfo)
-/* Adapt scan script for use with reduced block size;
- * assume that script has been validated before.
- */
-{
-  jpeg_scan_info * scanptr;
-  int idxout, idxin;
-
-  /* Circumvent const declaration for this function */
-  scanptr = (jpeg_scan_info *) cinfo->scan_info;
-  idxout = 0;
-
-  for (idxin = 0; idxin < cinfo->num_scans; idxin++) {
-    /* After skipping, idxout becomes smaller than idxin */
-    if (idxin != idxout)
-      /* Copy rest of data;
-       * note we stay in given chunk of allocated memory.
-       */
-      scanptr[idxout] = scanptr[idxin];
-    if (scanptr[idxout].Ss > cinfo->lim_Se)
-      /* Entire scan out of range - skip this entry */
-      continue;
-    if (scanptr[idxout].Se > cinfo->lim_Se)
-      /* Limit scan to end of block */
-      scanptr[idxout].Se = cinfo->lim_Se;
-    idxout++;
-  }
-
-  cinfo->num_scans = idxout;
-}
-
-#endif /* C_MULTISCAN_FILES_SUPPORTED */
-
-
-LOCAL(void)
-select_scan_parameters (j_compress_ptr cinfo)
-/* Set up the scan parameters for the current scan */
-{
-  int ci;
-
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-  if (cinfo->scan_info != NULL) {
-    /* Prepare for current scan --- the script is already validated */
-    my_master_ptr master = (my_master_ptr) cinfo->master;
-    const jpeg_scan_info * scanptr = cinfo->scan_info + master->scan_number;
-
-    cinfo->comps_in_scan = scanptr->comps_in_scan;
-    for (ci = 0; ci < scanptr->comps_in_scan; ci++) {
-      cinfo->cur_comp_info[ci] =
-	&cinfo->comp_info[scanptr->component_index[ci]];
-    }
-    if (cinfo->progressive_mode) {
-      cinfo->Ss = scanptr->Ss;
-      cinfo->Se = scanptr->Se;
-      cinfo->Ah = scanptr->Ah;
-      cinfo->Al = scanptr->Al;
-      return;
-    }
-  }
-  else
-#endif
-  {
-    /* Prepare for single sequential-JPEG scan containing all components */
-    if (cinfo->num_components > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	       MAX_COMPS_IN_SCAN);
-    cinfo->comps_in_scan = cinfo->num_components;
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      cinfo->cur_comp_info[ci] = &cinfo->comp_info[ci];
-    }
-  }
-  cinfo->Ss = 0;
-  cinfo->Se = cinfo->block_size * cinfo->block_size - 1;
-  cinfo->Ah = 0;
-  cinfo->Al = 0;
-}
-
-
-LOCAL(void)
-per_scan_setup (j_compress_ptr cinfo)
-/* Do computations that are needed before processing a JPEG scan */
-/* cinfo->comps_in_scan and cinfo->cur_comp_info[] are already set */
-{
-  int ci, mcublks, tmp;
-  jpeg_component_info *compptr;
-  
-  if (cinfo->comps_in_scan == 1) {
-    
-    /* Noninterleaved (single-component) scan */
-    compptr = cinfo->cur_comp_info[0];
-    
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = compptr->width_in_blocks;
-    cinfo->MCU_rows_in_scan = compptr->height_in_blocks;
-    
-    /* For noninterleaved scan, always one block per MCU */
-    compptr->MCU_width = 1;
-    compptr->MCU_height = 1;
-    compptr->MCU_blocks = 1;
-    compptr->MCU_sample_width = compptr->DCT_h_scaled_size;
-    compptr->last_col_width = 1;
-    /* For noninterleaved scans, it is convenient to define last_row_height
-     * as the number of block rows present in the last iMCU row.
-     */
-    tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-    if (tmp == 0) tmp = compptr->v_samp_factor;
-    compptr->last_row_height = tmp;
-    
-    /* Prepare array describing MCU composition */
-    cinfo->blocks_in_MCU = 1;
-    cinfo->MCU_membership[0] = 0;
-    
-  } else {
-    
-    /* Interleaved (multi-component) scan */
-    if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan,
-	       MAX_COMPS_IN_SCAN);
-    
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_width,
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    cinfo->MCU_rows_in_scan = (JDIMENSION)
-      jdiv_round_up((long) cinfo->jpeg_height,
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-    
-    cinfo->blocks_in_MCU = 0;
-    
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Sampling factors give # of blocks of component in each MCU */
-      compptr->MCU_width = compptr->h_samp_factor;
-      compptr->MCU_height = compptr->v_samp_factor;
-      compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
-      compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size;
-      /* Figure number of non-dummy blocks in last MCU column & row */
-      tmp = (int) (compptr->width_in_blocks % compptr->MCU_width);
-      if (tmp == 0) tmp = compptr->MCU_width;
-      compptr->last_col_width = tmp;
-      tmp = (int) (compptr->height_in_blocks % compptr->MCU_height);
-      if (tmp == 0) tmp = compptr->MCU_height;
-      compptr->last_row_height = tmp;
-      /* Prepare array describing MCU composition */
-      mcublks = compptr->MCU_blocks;
-      if (cinfo->blocks_in_MCU + mcublks > C_MAX_BLOCKS_IN_MCU)
-	ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
-      while (mcublks-- > 0) {
-	cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;
-      }
-    }
-    
-  }
-
-  /* Convert restart specified in rows to actual MCU count. */
-  /* Note that count must fit in 16 bits, so we provide limiting. */
-  if (cinfo->restart_in_rows > 0) {
-    long nominal = (long) cinfo->restart_in_rows * (long) cinfo->MCUs_per_row;
-    cinfo->restart_interval = (unsigned int) MIN(nominal, 65535L);
-  }
-}
-
-
-/*
- * Per-pass setup.
- * This is called at the beginning of each pass.  We determine which modules
- * will be active during this pass and give them appropriate start_pass calls.
- * We also set is_last_pass to indicate whether any more passes will be
- * required.
- */
-
-METHODDEF(void)
-prepare_for_pass (j_compress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  switch (master->pass_type) {
-  case main_pass:
-    /* Initial pass: will collect input data, and do either Huffman
-     * optimization or data output for the first scan.
-     */
-    select_scan_parameters(cinfo);
-    per_scan_setup(cinfo);
-    if (! cinfo->raw_data_in) {
-      (*cinfo->cconvert->start_pass) (cinfo);
-      (*cinfo->downsample->start_pass) (cinfo);
-      (*cinfo->prep->start_pass) (cinfo, JBUF_PASS_THRU);
-    }
-    (*cinfo->fdct->start_pass) (cinfo);
-    (*cinfo->entropy->start_pass) (cinfo, cinfo->optimize_coding);
-    (*cinfo->coef->start_pass) (cinfo,
-				(master->total_passes > 1 ?
-				 JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
-    (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
-    if (cinfo->optimize_coding) {
-      /* No immediate data output; postpone writing frame/scan headers */
-      master->pub.call_pass_startup = FALSE;
-    } else {
-      /* Will write frame/scan headers at first jpeg_write_scanlines call */
-      master->pub.call_pass_startup = TRUE;
-    }
-    break;
-#ifdef ENTROPY_OPT_SUPPORTED
-  case huff_opt_pass:
-    /* Do Huffman optimization for a scan after the first one. */
-    select_scan_parameters(cinfo);
-    per_scan_setup(cinfo);
-    if (cinfo->Ss != 0 || cinfo->Ah == 0) {
-      (*cinfo->entropy->start_pass) (cinfo, TRUE);
-      (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST);
-      master->pub.call_pass_startup = FALSE;
-      break;
-    }
-    /* Special case: Huffman DC refinement scans need no Huffman table
-     * and therefore we can skip the optimization pass for them.
-     */
-    master->pass_type = output_pass;
-    master->pass_number++;
-    /*FALLTHROUGH*/
-#endif
-  case output_pass:
-    /* Do a data-output pass. */
-    /* We need not repeat per-scan setup if prior optimization pass did it. */
-    if (! cinfo->optimize_coding) {
-      select_scan_parameters(cinfo);
-      per_scan_setup(cinfo);
-    }
-    (*cinfo->entropy->start_pass) (cinfo, FALSE);
-    (*cinfo->coef->start_pass) (cinfo, JBUF_CRANK_DEST);
-    /* We emit frame/scan headers now */
-    if (master->scan_number == 0)
-      (*cinfo->marker->write_frame_header) (cinfo);
-    (*cinfo->marker->write_scan_header) (cinfo);
-    master->pub.call_pass_startup = FALSE;
-    break;
-  default:
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-  }
-
-  master->pub.is_last_pass = (master->pass_number == master->total_passes-1);
-
-  /* Set up progress monitor's pass info if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->completed_passes = master->pass_number;
-    cinfo->progress->total_passes = master->total_passes;
-  }
-}
-
-
-/*
- * Special start-of-pass hook.
- * This is called by jpeg_write_scanlines if call_pass_startup is TRUE.
- * In single-pass processing, we need this hook because we don't want to
- * write frame/scan headers during jpeg_start_compress; we want to let the
- * application write COM markers etc. between jpeg_start_compress and the
- * jpeg_write_scanlines loop.
- * In multi-pass processing, this routine is not used.
- */
-
-METHODDEF(void)
-pass_startup (j_compress_ptr cinfo)
-{
-  cinfo->master->call_pass_startup = FALSE; /* reset flag so call only once */
-
-  (*cinfo->marker->write_frame_header) (cinfo);
-  (*cinfo->marker->write_scan_header) (cinfo);
-}
-
-
-/*
- * Finish up at end of pass.
- */
-
-METHODDEF(void)
-finish_pass_master (j_compress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  /* The entropy coder always needs an end-of-pass call,
-   * either to analyze statistics or to flush its output buffer.
-   */
-  (*cinfo->entropy->finish_pass) (cinfo);
-
-  /* Update state for next pass */
-  switch (master->pass_type) {
-  case main_pass:
-    /* next pass is either output of scan 0 (after optimization)
-     * or output of scan 1 (if no optimization).
-     */
-    master->pass_type = output_pass;
-    if (! cinfo->optimize_coding)
-      master->scan_number++;
-    break;
-  case huff_opt_pass:
-    /* next pass is always output of current scan */
-    master->pass_type = output_pass;
-    break;
-  case output_pass:
-    /* next pass is either optimization or output of next scan */
-    if (cinfo->optimize_coding)
-      master->pass_type = huff_opt_pass;
-    master->scan_number++;
-    break;
-  }
-
-  master->pass_number++;
-}
-
-
-/*
- * Initialize master compression control.
- */
-
-GLOBAL(void)
-jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only)
-{
-  my_master_ptr master;
-
-  master = (my_master_ptr)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(my_comp_master));
-  cinfo->master = &master->pub;
-  master->pub.prepare_for_pass = prepare_for_pass;
-  master->pub.pass_startup = pass_startup;
-  master->pub.finish_pass = finish_pass_master;
-  master->pub.is_last_pass = FALSE;
-
-  /* Validate parameters, determine derived values */
-  initial_setup(cinfo, transcode_only);
-
-  if (cinfo->scan_info != NULL) {
-#ifdef C_MULTISCAN_FILES_SUPPORTED
-    validate_script(cinfo);
-    if (cinfo->block_size < DCTSIZE)
-      reduce_script(cinfo);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    cinfo->progressive_mode = FALSE;
-    cinfo->num_scans = 1;
-  }
-
-  if (cinfo->optimize_coding)
-    cinfo->arith_code = FALSE; /* disable arithmetic coding */
-  else if (! cinfo->arith_code &&
-	   (cinfo->progressive_mode ||
-	    (cinfo->block_size > 1 && cinfo->block_size < DCTSIZE)))
-    /* TEMPORARY HACK ??? */
-    /* assume default tables no good for progressive or reduced AC mode */
-    cinfo->optimize_coding = TRUE; /* force Huffman optimization */
-
-  /* Initialize my private state */
-  if (transcode_only) {
-    /* no main pass in transcoding */
-    if (cinfo->optimize_coding)
-      master->pass_type = huff_opt_pass;
-    else
-      master->pass_type = output_pass;
-  } else {
-    /* for normal compression, first pass is always this type: */
-    master->pass_type = main_pass;
-  }
-  master->scan_number = 0;
-  master->pass_number = 0;
-  if (cinfo->optimize_coding)
-    master->total_passes = cinfo->num_scans * 2;
-  else
-    master->total_passes = cinfo->num_scans;
-}
--- a/DoConfig/fltk/jpeg/jcomapi.c
+++ /dev/null
@@ -1,106 +1,0 @@
-/*
- * jcomapi.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface routines that are used for both
- * compression and decompression.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Abort processing of a JPEG compression or decompression operation,
- * but don't destroy the object itself.
- *
- * For this, we merely clean up all the nonpermanent memory pools.
- * Note that temp files (virtual arrays) are not allowed to belong to
- * the permanent pool, so we will be able to close all temp files here.
- * Closing a data source or destination, if necessary, is the application's
- * responsibility.
- */
-
-GLOBAL(void)
-jpeg_abort (j_common_ptr cinfo)
-{
-  int pool;
-
-  /* Do nothing if called on a not-initialized or destroyed JPEG object. */
-  if (cinfo->mem == NULL)
-    return;
-
-  /* Releasing pools in reverse order might help avoid fragmentation
-   * with some (brain-damaged) malloc libraries.
-   */
-  for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) {
-    (*cinfo->mem->free_pool) (cinfo, pool);
-  }
-
-  /* Reset overall state for possible reuse of object */
-  if (cinfo->is_decompressor) {
-    cinfo->global_state = DSTATE_START;
-    /* Try to keep application from accessing now-deleted marker list.
-     * A bit kludgy to do it here, but this is the most central place.
-     */
-    ((j_decompress_ptr) cinfo)->marker_list = NULL;
-  } else {
-    cinfo->global_state = CSTATE_START;
-  }
-}
-
-
-/*
- * Destruction of a JPEG object.
- *
- * Everything gets deallocated except the master jpeg_compress_struct itself
- * and the error manager struct.  Both of these are supplied by the application
- * and must be freed, if necessary, by the application.  (Often they are on
- * the stack and so don't need to be freed anyway.)
- * Closing a data source or destination, if necessary, is the application's
- * responsibility.
- */
-
-GLOBAL(void)
-jpeg_destroy (j_common_ptr cinfo)
-{
-  /* We need only tell the memory manager to release everything. */
-  /* NB: mem pointer is NULL if memory mgr failed to initialize. */
-  if (cinfo->mem != NULL)
-    (*cinfo->mem->self_destruct) (cinfo);
-  cinfo->mem = NULL;		/* be safe if jpeg_destroy is called twice */
-  cinfo->global_state = 0;	/* mark it destroyed */
-}
-
-
-/*
- * Convenience routines for allocating quantization and Huffman tables.
- * (Would jutils.c be a more reasonable place to put these?)
- */
-
-GLOBAL(JQUANT_TBL *)
-jpeg_alloc_quant_table (j_common_ptr cinfo)
-{
-  JQUANT_TBL *tbl;
-
-  tbl = (JQUANT_TBL *)
-    (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL));
-  tbl->sent_table = FALSE;	/* make sure this is false in any new table */
-  return tbl;
-}
-
-
-GLOBAL(JHUFF_TBL *)
-jpeg_alloc_huff_table (j_common_ptr cinfo)
-{
-  JHUFF_TBL *tbl;
-
-  tbl = (JHUFF_TBL *)
-    (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL));
-  tbl->sent_table = FALSE;	/* make sure this is false in any new table */
-  return tbl;
-}
--- a/DoConfig/fltk/jpeg/jconfig.h
+++ /dev/null
@@ -1,73 +1,0 @@
-/* FLTK *************************************************************** */
-/* FLTK   Comments marked with FLTK show modifications for FLTK which	*/
-/* FLTK   should probably be preserved when the JPEG lib is upgraded.	*/
-/* FLTK *************************************************************** */
-
-/* jconfig.h.  Generated from jconfig.cfg by configure.  */
-/* jconfig.cfg --- source file edited by configure script */
-/* see jconfig.txt for explanations */
-
-#define HAVE_PROTOTYPES 1
-#define HAVE_UNSIGNED_CHAR 1
-#define HAVE_UNSIGNED_SHORT 1
-/* #undef void */
-/* #undef const */
-/* #undef CHAR_IS_UNSIGNED */
-/* #define HAVE_STDDEF_H 1 */		/* FLTK */
-#define HAVE_STDLIB_H 1
-/* #define HAVE_LOCALE_H 1 */		/* FLTK */
-/* #undef NEED_BSD_STRINGS */
-/* #undef NEED_SYS_TYPES_H */
-/* #undef NEED_FAR_POINTERS */
-/* #undef NEED_SHORT_EXTERNAL_NAMES */
-/* Define this if you get warnings about undefined structures. */
-/* #undef INCOMPLETE_TYPES_BROKEN */
-
-/* Define "boolean" as unsigned char, not enum, on Windows systems. */
-#ifdef _WIN32
-#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
-typedef unsigned char boolean;
-#endif
-#ifndef FALSE			/* in case these macros already exist */
-#define FALSE	0		/* values of boolean */
-#endif
-#ifndef TRUE
-#define TRUE	1
-#endif
-#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
-#endif
-
-#ifdef JPEG_INTERNALS
-
-/* #undef RIGHT_SHIFT_IS_UNSIGNED */
-/* #define INLINE __inline__ */		/* FLTK */
-/* These are for configuring the JPEG memory manager. */
-/* #undef DEFAULT_MAX_MEM */
-/* #undef NO_MKTEMP */
-
-#endif /* JPEG_INTERNALS */
-
-#ifdef JPEG_CJPEG_DJPEG
-
-#define BMP_SUPPORTED		/* BMP image file format */
-#define GIF_SUPPORTED		/* GIF image file format */
-#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
-/* #undef RLE_SUPPORTED */
-#define TARGA_SUPPORTED		/* Targa image file format */
-
-/* #undef TWO_FILE_COMMANDLINE */
-/* #undef NEED_SIGNAL_CATCHER */
-/* #undef DONT_USE_B_MODE */
-
-#if 0					/* FLTK 1.3.3 (disabled in FLTK 1.3.4) */
-
-#if defined(WIN32) || defined(__EMX__)
-#  define USE_SETMODE
-#endif /* WIN32 || __EMX__ */
-
-#endif					/* FLTK 1.3.3 (disabled in FLTK 1.3.4) */
-
-/* Define this if you want percent-done progress reports from cjpeg/djpeg. */
-/* #undef PROGRESS_REPORT */
-
-#endif /* JPEG_CJPEG_DJPEG */
--- a/DoConfig/fltk/jpeg/jconfig.txt
+++ /dev/null
@@ -1,171 +1,0 @@
-/*
- * jconfig.txt
- *
- * Copyright (C) 1991-1994, Thomas G. Lane.
- * Modified 2009-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file documents the configuration options that are required to
- * customize the JPEG software for a particular system.
- *
- * The actual configuration options for a particular installation are stored
- * in jconfig.h.  On many machines, jconfig.h can be generated automatically
- * or copied from one of the "canned" jconfig files that we supply.  But if
- * you need to generate a jconfig.h file by hand, this file tells you how.
- *
- * DO NOT EDIT THIS FILE --- IT WON'T ACCOMPLISH ANYTHING.
- * EDIT A COPY NAMED JCONFIG.H.
- */
-
-
-/*
- * These symbols indicate the properties of your machine or compiler.
- * #define the symbol if yes, #undef it if no.
- */
-
-/* Does your compiler support function prototypes?
- * (If not, you also need to use ansi2knr, see install.txt)
- */
-#define HAVE_PROTOTYPES
-
-/* Does your compiler support the declaration "unsigned char" ?
- * How about "unsigned short" ?
- */
-#define HAVE_UNSIGNED_CHAR
-#define HAVE_UNSIGNED_SHORT
-
-/* Define "void" as "char" if your compiler doesn't know about type void.
- * NOTE: be sure to define void such that "void *" represents the most general
- * pointer type, e.g., that returned by malloc().
- */
-/* #define void char */
-
-/* Define "const" as empty if your compiler doesn't know the "const" keyword.
- */
-/* #define const */
-
-/* Define this if an ordinary "char" type is unsigned.
- * If you're not sure, leaving it undefined will work at some cost in speed.
- * If you defined HAVE_UNSIGNED_CHAR then the speed difference is minimal.
- */
-#undef CHAR_IS_UNSIGNED
-
-/* Define this if your system has an ANSI-conforming <stddef.h> file.
- */
-#define HAVE_STDDEF_H
-
-/* Define this if your system has an ANSI-conforming <stdlib.h> file.
- */
-#define HAVE_STDLIB_H
-
-/* Define this if your system does not have an ANSI/SysV <string.h>,
- * but does have a BSD-style <strings.h>.
- */
-#undef NEED_BSD_STRINGS
-
-/* Define this if your system does not provide typedef size_t in any of the
- * ANSI-standard places (stddef.h, stdlib.h, or stdio.h), but places it in
- * <sys/types.h> instead.
- */
-#undef NEED_SYS_TYPES_H
-
-/* For 80x86 machines, you need to define NEED_FAR_POINTERS,
- * unless you are using a large-data memory model or 80386 flat-memory mode.
- * On less brain-damaged CPUs this symbol must not be defined.
- * (Defining this symbol causes large data structures to be referenced through
- * "far" pointers and to be allocated with a special version of malloc.)
- */
-#undef NEED_FAR_POINTERS
-
-/* Define this if your linker needs global names to be unique in less
- * than the first 15 characters.
- */
-#undef NEED_SHORT_EXTERNAL_NAMES
-
-/* Although a real ANSI C compiler can deal perfectly well with pointers to
- * unspecified structures (see "incomplete types" in the spec), a few pre-ANSI
- * and pseudo-ANSI compilers get confused.  To keep one of these bozos happy,
- * define INCOMPLETE_TYPES_BROKEN.  This is not recommended unless you
- * actually get "missing structure definition" warnings or errors while
- * compiling the JPEG code.
- */
-#undef INCOMPLETE_TYPES_BROKEN
-
-/* Define "boolean" as unsigned char, not enum, on Windows systems.
- */
-#ifdef _WIN32
-#ifndef __RPCNDR_H__		/* don't conflict if rpcndr.h already read */
-typedef unsigned char boolean;
-#endif
-#ifndef FALSE			/* in case these macros already exist */
-#define FALSE	0		/* values of boolean */
-#endif
-#ifndef TRUE
-#define TRUE	1
-#endif
-#define HAVE_BOOLEAN		/* prevent jmorecfg.h from redefining it */
-#endif
-
-
-/*
- * The following options affect code selection within the JPEG library,
- * but they don't need to be visible to applications using the library.
- * To minimize application namespace pollution, the symbols won't be
- * defined unless JPEG_INTERNALS has been defined.
- */
-
-#ifdef JPEG_INTERNALS
-
-/* Define this if your compiler implements ">>" on signed values as a logical
- * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift,
- * which is the normal and rational definition.
- */
-#undef RIGHT_SHIFT_IS_UNSIGNED
-
-
-#endif /* JPEG_INTERNALS */
-
-
-/*
- * The remaining options do not affect the JPEG library proper,
- * but only the sample applications cjpeg/djpeg (see cjpeg.c, djpeg.c).
- * Other applications can ignore these.
- */
-
-#ifdef JPEG_CJPEG_DJPEG
-
-/* These defines indicate which image (non-JPEG) file formats are allowed. */
-
-#define BMP_SUPPORTED		/* BMP image file format */
-#define GIF_SUPPORTED		/* GIF image file format */
-#define PPM_SUPPORTED		/* PBMPLUS PPM/PGM image file format */
-#undef RLE_SUPPORTED		/* Utah RLE image file format */
-#define TARGA_SUPPORTED		/* Targa image file format */
-
-/* Define this if you want to name both input and output files on the command
- * line, rather than using stdout and optionally stdin.  You MUST do this if
- * your system can't cope with binary I/O to stdin/stdout.  See comments at
- * head of cjpeg.c or djpeg.c.
- */
-#undef TWO_FILE_COMMANDLINE
-
-/* Define this if your system needs explicit cleanup of temporary files.
- * This is crucial under MS-DOS, where the temporary "files" may be areas
- * of extended memory; on most other systems it's not as important.
- */
-#undef NEED_SIGNAL_CATCHER
-
-/* By default, we open image files with fopen(...,"rb") or fopen(...,"wb").
- * This is necessary on systems that distinguish text files from binary files,
- * and is harmless on most systems that don't.  If you have one of the rare
- * systems that complains about the "b" spec, define this symbol.
- */
-#undef DONT_USE_B_MODE
-
-/* Define this if you want percent-done progress reports from cjpeg/djpeg.
- */
-#undef PROGRESS_REPORT
-
-
-#endif /* JPEG_CJPEG_DJPEG */
--- a/DoConfig/fltk/jpeg/jcparam.c
+++ /dev/null
@@ -1,675 +1,0 @@
-/*
- * jcparam.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains optional default-setting code for the JPEG compressor.
- * Applications do not have to use this file, but those that don't use it
- * must know a lot more about the innards of the JPEG code.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Quantization table setup routines
- */
-
-GLOBAL(void)
-jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl,
-		      const unsigned int *basic_table,
-		      int scale_factor, boolean force_baseline)
-/* Define a quantization table equal to the basic_table times
- * a scale factor (given as a percentage).
- * If force_baseline is TRUE, the computed quantization table entries
- * are limited to 1..255 for JPEG baseline compatibility.
- */
-{
-  JQUANT_TBL ** qtblptr;
-  int i;
-  long temp;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (which_tbl < 0 || which_tbl >= NUM_QUANT_TBLS)
-    ERREXIT1(cinfo, JERR_DQT_INDEX, which_tbl);
-
-  qtblptr = & cinfo->quant_tbl_ptrs[which_tbl];
-
-  if (*qtblptr == NULL)
-    *qtblptr = jpeg_alloc_quant_table((j_common_ptr) cinfo);
-
-  for (i = 0; i < DCTSIZE2; i++) {
-    temp = ((long) basic_table[i] * scale_factor + 50L) / 100L;
-    /* limit the values to the valid range */
-    if (temp <= 0L) temp = 1L;
-    if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */
-    if (force_baseline && temp > 255L)
-      temp = 255L;		/* limit to baseline range if requested */
-    (*qtblptr)->quantval[i] = (UINT16) temp;
-  }
-
-  /* Initialize sent_table FALSE so table will be written to JPEG file. */
-  (*qtblptr)->sent_table = FALSE;
-}
-
-
-/* These are the sample quantization tables given in JPEG spec section K.1.
- * The spec says that the values given produce "good" quality, and
- * when divided by 2, "very good" quality.
- */
-static const unsigned int std_luminance_quant_tbl[DCTSIZE2] = {
-  16,  11,  10,  16,  24,  40,  51,  61,
-  12,  12,  14,  19,  26,  58,  60,  55,
-  14,  13,  16,  24,  40,  57,  69,  56,
-  14,  17,  22,  29,  51,  87,  80,  62,
-  18,  22,  37,  56,  68, 109, 103,  77,
-  24,  35,  55,  64,  81, 104, 113,  92,
-  49,  64,  78,  87, 103, 121, 120, 101,
-  72,  92,  95,  98, 112, 100, 103,  99
-};
-static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] = {
-  17,  18,  24,  47,  99,  99,  99,  99,
-  18,  21,  26,  66,  99,  99,  99,  99,
-  24,  26,  56,  99,  99,  99,  99,  99,
-  47,  66,  99,  99,  99,  99,  99,  99,
-  99,  99,  99,  99,  99,  99,  99,  99,
-  99,  99,  99,  99,  99,  99,  99,  99,
-  99,  99,  99,  99,  99,  99,  99,  99,
-  99,  99,  99,  99,  99,  99,  99,  99
-};
-
-
-GLOBAL(void)
-jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline)
-/* Set or change the 'quality' (quantization) setting, using default tables
- * and straight percentage-scaling quality scales.
- * This entry point allows different scalings for luminance and chrominance.
- */
-{
-  /* Set up two quantization tables using the specified scaling */
-  jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
-		       cinfo->q_scale_factor[0], force_baseline);
-  jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
-		       cinfo->q_scale_factor[1], force_baseline);
-}
-
-
-GLOBAL(void)
-jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor,
-			 boolean force_baseline)
-/* Set or change the 'quality' (quantization) setting, using default tables
- * and a straight percentage-scaling quality scale.  In most cases it's better
- * to use jpeg_set_quality (below); this entry point is provided for
- * applications that insist on a linear percentage scaling.
- */
-{
-  /* Set up two quantization tables using the specified scaling */
-  jpeg_add_quant_table(cinfo, 0, std_luminance_quant_tbl,
-		       scale_factor, force_baseline);
-  jpeg_add_quant_table(cinfo, 1, std_chrominance_quant_tbl,
-		       scale_factor, force_baseline);
-}
-
-
-GLOBAL(int)
-jpeg_quality_scaling (int quality)
-/* Convert a user-specified quality rating to a percentage scaling factor
- * for an underlying quantization table, using our recommended scaling curve.
- * The input 'quality' factor should be 0 (terrible) to 100 (very good).
- */
-{
-  /* Safety limit on quality factor.  Convert 0 to 1 to avoid zero divide. */
-  if (quality <= 0) quality = 1;
-  if (quality > 100) quality = 100;
-
-  /* The basic table is used as-is (scaling 100) for a quality of 50.
-   * Qualities 50..100 are converted to scaling percentage 200 - 2*Q;
-   * note that at Q=100 the scaling is 0, which will cause jpeg_add_quant_table
-   * to make all the table entries 1 (hence, minimum quantization loss).
-   * Qualities 1..50 are converted to scaling percentage 5000/Q.
-   */
-  if (quality < 50)
-    quality = 5000 / quality;
-  else
-    quality = 200 - quality*2;
-
-  return quality;
-}
-
-
-GLOBAL(void)
-jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline)
-/* Set or change the 'quality' (quantization) setting, using default tables.
- * This is the standard quality-adjusting entry point for typical user
- * interfaces; only those who want detailed control over quantization tables
- * would use the preceding routines directly.
- */
-{
-  /* Convert user 0-100 rating to percentage scaling */
-  quality = jpeg_quality_scaling(quality);
-
-  /* Set up standard quality tables */
-  jpeg_set_linear_quality(cinfo, quality, force_baseline);
-}
-
-
-/*
- * Huffman table setup routines
- */
-
-LOCAL(void)
-add_huff_table (j_compress_ptr cinfo,
-		JHUFF_TBL **htblptr, const UINT8 *bits, const UINT8 *val)
-/* Define a Huffman table */
-{
-  int nsymbols, len;
-
-  if (*htblptr == NULL)
-    *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-
-  /* Copy the number-of-symbols-of-each-code-length counts */
-  MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
-
-  /* Validate the counts.  We do this here mainly so we can copy the right
-   * number of symbols from the val[] array, without risking marching off
-   * the end of memory.  jchuff.c will do a more thorough test later.
-   */
-  nsymbols = 0;
-  for (len = 1; len <= 16; len++)
-    nsymbols += bits[len];
-  if (nsymbols < 1 || nsymbols > 256)
-    ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-
-  MEMCOPY((*htblptr)->huffval, val, nsymbols * SIZEOF(UINT8));
-
-  /* Initialize sent_table FALSE so table will be written to JPEG file. */
-  (*htblptr)->sent_table = FALSE;
-}
-
-
-LOCAL(void)
-std_huff_tables (j_compress_ptr cinfo)
-/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
-/* IMPORTANT: these are only valid for 8-bit data precision! */
-{
-  static const UINT8 bits_dc_luminance[17] =
-    { /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
-  static const UINT8 val_dc_luminance[] =
-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-  
-  static const UINT8 bits_dc_chrominance[17] =
-    { /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
-  static const UINT8 val_dc_chrominance[] =
-    { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-  
-  static const UINT8 bits_ac_luminance[17] =
-    { /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
-  static const UINT8 val_ac_luminance[] =
-    { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
-      0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
-      0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
-      0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
-      0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
-      0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
-      0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
-      0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
-      0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-      0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-      0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-      0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
-      0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-      0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
-      0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
-      0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
-      0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
-      0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
-      0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
-      0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa };
-  
-  static const UINT8 bits_ac_chrominance[17] =
-    { /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
-  static const UINT8 val_ac_chrominance[] =
-    { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-      0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-      0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-      0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
-      0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
-      0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
-      0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
-      0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-      0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-      0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-      0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-      0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-      0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
-      0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
-      0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
-      0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
-      0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
-      0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
-      0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
-      0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa };
-  
-  add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[0],
-		 bits_dc_luminance, val_dc_luminance);
-  add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[0],
-		 bits_ac_luminance, val_ac_luminance);
-  add_huff_table(cinfo, &cinfo->dc_huff_tbl_ptrs[1],
-		 bits_dc_chrominance, val_dc_chrominance);
-  add_huff_table(cinfo, &cinfo->ac_huff_tbl_ptrs[1],
-		 bits_ac_chrominance, val_ac_chrominance);
-}
-
-
-/*
- * Default parameter setup for compression.
- *
- * Applications that don't choose to use this routine must do their
- * own setup of all these parameters.  Alternately, you can call this
- * to establish defaults and then alter parameters selectively.  This
- * is the recommended approach since, if we add any new parameters,
- * your code will still work (they'll be set to reasonable defaults).
- */
-
-GLOBAL(void)
-jpeg_set_defaults (j_compress_ptr cinfo)
-{
-  int i;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* Allocate comp_info array large enough for maximum component count.
-   * Array is made permanent in case application wants to compress
-   * multiple images at same param settings.
-   */
-  if (cinfo->comp_info == NULL)
-    cinfo->comp_info = (jpeg_component_info *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  MAX_COMPONENTS * SIZEOF(jpeg_component_info));
-
-  /* Initialize everything not dependent on the color space */
-
-  cinfo->scale_num = 1;		/* 1:1 scaling */
-  cinfo->scale_denom = 1;
-  cinfo->data_precision = BITS_IN_JSAMPLE;
-  /* Set up two quantization tables using default quality of 75 */
-  jpeg_set_quality(cinfo, 75, TRUE);
-  /* Set up two Huffman tables */
-  std_huff_tables(cinfo);
-
-  /* Initialize default arithmetic coding conditioning */
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    cinfo->arith_dc_L[i] = 0;
-    cinfo->arith_dc_U[i] = 1;
-    cinfo->arith_ac_K[i] = 5;
-  }
-
-  /* Default is no multiple-scan output */
-  cinfo->scan_info = NULL;
-  cinfo->num_scans = 0;
-
-  /* Expect normal source image, not raw downsampled data */
-  cinfo->raw_data_in = FALSE;
-
-  /* The standard Huffman tables are only valid for 8-bit data precision.
-   * If the precision is higher, use arithmetic coding.
-   * (Alternatively, using Huffman coding would be possible with forcing
-   * optimization on so that usable tables will be computed, or by
-   * supplying default tables that are valid for the desired precision.)
-   * Otherwise, use Huffman coding by default.
-   */
-  cinfo->arith_code = cinfo->data_precision > 8 ? TRUE : FALSE;
-
-  /* By default, don't do extra passes to optimize entropy coding */
-  cinfo->optimize_coding = FALSE;
-
-  /* By default, use the simpler non-cosited sampling alignment */
-  cinfo->CCIR601_sampling = FALSE;
-
-  /* By default, apply fancy downsampling */
-  cinfo->do_fancy_downsampling = TRUE;
-
-  /* No input smoothing */
-  cinfo->smoothing_factor = 0;
-
-  /* DCT algorithm preference */
-  cinfo->dct_method = JDCT_DEFAULT;
-
-  /* No restart markers */
-  cinfo->restart_interval = 0;
-  cinfo->restart_in_rows = 0;
-
-  /* Fill in default JFIF marker parameters.  Note that whether the marker
-   * will actually be written is determined by jpeg_set_colorspace.
-   *
-   * By default, the library emits JFIF version code 1.01.
-   * An application that wants to emit JFIF 1.02 extension markers should set
-   * JFIF_minor_version to 2.  We could probably get away with just defaulting
-   * to 1.02, but there may still be some decoders in use that will complain
-   * about that; saying 1.01 should minimize compatibility problems.
-   *
-   * For wide gamut colorspaces (BG_RGB and BG_YCC), the major version will be
-   * overridden by jpeg_set_colorspace and set to 2.
-   */
-  cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */
-  cinfo->JFIF_minor_version = 1;
-  cinfo->density_unit = 0;	/* Pixel size is unknown by default */
-  cinfo->X_density = 1;		/* Pixel aspect ratio is square by default */
-  cinfo->Y_density = 1;
-
-  /* No color transform */
-  cinfo->color_transform = JCT_NONE;
-
-  /* Choose JPEG colorspace based on input space, set defaults accordingly */
-
-  jpeg_default_colorspace(cinfo);
-}
-
-
-/*
- * Select an appropriate JPEG colorspace for in_color_space.
- */
-
-GLOBAL(void)
-jpeg_default_colorspace (j_compress_ptr cinfo)
-{
-  switch (cinfo->in_color_space) {
-  case JCS_UNKNOWN:
-    jpeg_set_colorspace(cinfo, JCS_UNKNOWN);
-    break;
-  case JCS_GRAYSCALE:
-    jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);
-    break;
-  case JCS_RGB:
-    jpeg_set_colorspace(cinfo, JCS_YCbCr);
-    break;
-  case JCS_YCbCr:
-    jpeg_set_colorspace(cinfo, JCS_YCbCr);
-    break;
-  case JCS_CMYK:
-    jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */
-    break;
-  case JCS_YCCK:
-    jpeg_set_colorspace(cinfo, JCS_YCCK);
-    break;
-  case JCS_BG_RGB:
-    /* No translation for now -- conversion to BG_YCC not yet supportet */
-    jpeg_set_colorspace(cinfo, JCS_BG_RGB);
-    break;
-  case JCS_BG_YCC:
-    jpeg_set_colorspace(cinfo, JCS_BG_YCC);
-    break;
-  default:
-    ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);
-  }
-}
-
-
-/*
- * Set the JPEG colorspace, and choose colorspace-dependent default values.
- */
-
-GLOBAL(void)
-jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
-{
-  jpeg_component_info * compptr;
-  int ci;
-
-#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl)  \
-  (compptr = &cinfo->comp_info[index], \
-   compptr->component_id = (id), \
-   compptr->h_samp_factor = (hsamp), \
-   compptr->v_samp_factor = (vsamp), \
-   compptr->quant_tbl_no = (quant), \
-   compptr->dc_tbl_no = (dctbl), \
-   compptr->ac_tbl_no = (actbl) )
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* For all colorspaces, we use Q and Huff tables 0 for luminance components,
-   * tables 1 for chrominance components.
-   */
-
-  cinfo->jpeg_color_space = colorspace;
-
-  cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */
-  cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */
-
-  switch (colorspace) {
-  case JCS_UNKNOWN:
-    cinfo->num_components = cinfo->input_components;
-    if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	       MAX_COMPONENTS);
-    for (ci = 0; ci < cinfo->num_components; ci++) {
-      SET_COMP(ci, ci, 1,1, 0, 0,0);
-    }
-    break;
-  case JCS_GRAYSCALE:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->num_components = 1;
-    /* JFIF specifies component ID 1 */
-    SET_COMP(0, 0x01, 1,1, 0, 0,0);
-    break;
-  case JCS_RGB:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */
-    cinfo->num_components = 3;
-    SET_COMP(0, 0x52 /* 'R' */, 1,1, 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0);
-    SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0);
-    SET_COMP(2, 0x42 /* 'B' */, 1,1, 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0);
-    break;
-  case JCS_YCbCr:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->num_components = 3;
-    /* JFIF specifies component IDs 1,2,3 */
-    /* We default to 2x2 subsamples of chrominance */
-    SET_COMP(0, 0x01, 2,2, 0, 0,0);
-    SET_COMP(1, 0x02, 1,1, 1, 1,1);
-    SET_COMP(2, 0x03, 1,1, 1, 1,1);
-    break;
-  case JCS_CMYK:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */
-    cinfo->num_components = 4;
-    SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0);
-    SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0);
-    SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0);
-    SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0);
-    break;
-  case JCS_YCCK:
-    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */
-    cinfo->num_components = 4;
-    SET_COMP(0, 0x01, 2,2, 0, 0,0);
-    SET_COMP(1, 0x02, 1,1, 1, 1,1);
-    SET_COMP(2, 0x03, 1,1, 1, 1,1);
-    SET_COMP(3, 0x04, 2,2, 0, 0,0);
-    break;
-  case JCS_BG_RGB:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->JFIF_major_version = 2;   /* Set JFIF major version = 2 */
-    cinfo->num_components = 3;
-    /* Add offset 0x20 to the normal R/G/B component IDs */
-    SET_COMP(0, 0x72 /* 'r' */, 1,1, 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0);
-    SET_COMP(1, 0x67 /* 'g' */, 1,1, 0, 0,0);
-    SET_COMP(2, 0x62 /* 'b' */, 1,1, 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0,
-		cinfo->color_transform == JCT_SUBTRACT_GREEN ? 1 : 0);
-    break;
-  case JCS_BG_YCC:
-    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */
-    cinfo->JFIF_major_version = 2;   /* Set JFIF major version = 2 */
-    cinfo->num_components = 3;
-    /* Add offset 0x20 to the normal Cb/Cr component IDs */
-    /* We default to 2x2 subsamples of chrominance */
-    SET_COMP(0, 0x01, 2,2, 0, 0,0);
-    SET_COMP(1, 0x22, 1,1, 1, 1,1);
-    SET_COMP(2, 0x23, 1,1, 1, 1,1);
-    break;
-  default:
-    ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-  }
-}
-
-
-#ifdef C_PROGRESSIVE_SUPPORTED
-
-LOCAL(jpeg_scan_info *)
-fill_a_scan (jpeg_scan_info * scanptr, int ci,
-	     int Ss, int Se, int Ah, int Al)
-/* Support routine: generate one scan for specified component */
-{
-  scanptr->comps_in_scan = 1;
-  scanptr->component_index[0] = ci;
-  scanptr->Ss = Ss;
-  scanptr->Se = Se;
-  scanptr->Ah = Ah;
-  scanptr->Al = Al;
-  scanptr++;
-  return scanptr;
-}
-
-LOCAL(jpeg_scan_info *)
-fill_scans (jpeg_scan_info * scanptr, int ncomps,
-	    int Ss, int Se, int Ah, int Al)
-/* Support routine: generate one scan for each component */
-{
-  int ci;
-
-  for (ci = 0; ci < ncomps; ci++) {
-    scanptr->comps_in_scan = 1;
-    scanptr->component_index[0] = ci;
-    scanptr->Ss = Ss;
-    scanptr->Se = Se;
-    scanptr->Ah = Ah;
-    scanptr->Al = Al;
-    scanptr++;
-  }
-  return scanptr;
-}
-
-LOCAL(jpeg_scan_info *)
-fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al)
-/* Support routine: generate interleaved DC scan if possible, else N scans */
-{
-  int ci;
-
-  if (ncomps <= MAX_COMPS_IN_SCAN) {
-    /* Single interleaved DC scan */
-    scanptr->comps_in_scan = ncomps;
-    for (ci = 0; ci < ncomps; ci++)
-      scanptr->component_index[ci] = ci;
-    scanptr->Ss = scanptr->Se = 0;
-    scanptr->Ah = Ah;
-    scanptr->Al = Al;
-    scanptr++;
-  } else {
-    /* Noninterleaved DC scan for each component */
-    scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al);
-  }
-  return scanptr;
-}
-
-
-/*
- * Create a recommended progressive-JPEG script.
- * cinfo->num_components and cinfo->jpeg_color_space must be correct.
- */
-
-GLOBAL(void)
-jpeg_simple_progression (j_compress_ptr cinfo)
-{
-  int ncomps = cinfo->num_components;
-  int nscans;
-  jpeg_scan_info * scanptr;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* Figure space needed for script.  Calculation must match code below! */
-  if (ncomps == 3 &&
-      (cinfo->jpeg_color_space == JCS_YCbCr ||
-       cinfo->jpeg_color_space == JCS_BG_YCC)) {
-    /* Custom script for YCC color images. */
-    nscans = 10;
-  } else {
-    /* All-purpose script for other color spaces. */
-    if (ncomps > MAX_COMPS_IN_SCAN)
-      nscans = 6 * ncomps;	/* 2 DC + 4 AC scans per component */
-    else
-      nscans = 2 + 4 * ncomps;	/* 2 DC scans; 4 AC scans per component */
-  }
-
-  /* Allocate space for script.
-   * We need to put it in the permanent pool in case the application performs
-   * multiple compressions without changing the settings.  To avoid a memory
-   * leak if jpeg_simple_progression is called repeatedly for the same JPEG
-   * object, we try to re-use previously allocated space, and we allocate
-   * enough space to handle YCC even if initially asked for grayscale.
-   */
-  if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {
-    cinfo->script_space_size = MAX(nscans, 10);
-    cinfo->script_space = (jpeg_scan_info *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-			cinfo->script_space_size * SIZEOF(jpeg_scan_info));
-  }
-  scanptr = cinfo->script_space;
-  cinfo->scan_info = scanptr;
-  cinfo->num_scans = nscans;
-
-  if (ncomps == 3 &&
-      (cinfo->jpeg_color_space == JCS_YCbCr ||
-       cinfo->jpeg_color_space == JCS_BG_YCC)) {
-    /* Custom script for YCC color images. */
-    /* Initial DC scan */
-    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
-    /* Initial AC scan: get some luma data out in a hurry */
-    scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2);
-    /* Chroma data is too small to be worth expending many scans on */
-    scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1);
-    scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1);
-    /* Complete spectral selection for luma AC */
-    scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2);
-    /* Refine next bit of luma AC */
-    scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1);
-    /* Finish DC successive approximation */
-    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
-    /* Finish AC successive approximation */
-    scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0);
-    scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0);
-    /* Luma bottom bit comes last since it's usually largest scan */
-    scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0);
-  } else {
-    /* All-purpose script for other color spaces. */
-    /* Successive approximation first pass */
-    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);
-    scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2);
-    scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2);
-    /* Successive approximation second pass */
-    scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1);
-    /* Successive approximation final pass */
-    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);
-    scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0);
-  }
-}
-
-#endif /* C_PROGRESSIVE_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jcprepct.c
+++ /dev/null
@@ -1,358 +1,0 @@
-/*
- * jcprepct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the compression preprocessing controller.
- * This controller manages the color conversion, downsampling,
- * and edge expansion steps.
- *
- * Most of the complexity here is associated with buffering input rows
- * as required by the downsampler.  See the comments at the head of
- * jcsample.c for the downsampler's needs.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* At present, jcsample.c can request context rows only for smoothing.
- * In the future, we might also need context rows for CCIR601 sampling
- * or other more-complex downsampling procedures.  The code to support
- * context rows should be compiled only if needed.
- */
-#ifdef INPUT_SMOOTHING_SUPPORTED
-#define CONTEXT_ROWS_SUPPORTED
-#endif
-
-
-/*
- * For the simple (no-context-row) case, we just need to buffer one
- * row group's worth of pixels for the downsampling step.  At the bottom of
- * the image, we pad to a full row group by replicating the last pixel row.
- * The downsampler's last output row is then replicated if needed to pad
- * out to a full iMCU row.
- *
- * When providing context rows, we must buffer three row groups' worth of
- * pixels.  Three row groups are physically allocated, but the row pointer
- * arrays are made five row groups high, with the extra pointers above and
- * below "wrapping around" to point to the last and first real row groups.
- * This allows the downsampler to access the proper context rows.
- * At the top and bottom of the image, we create dummy context rows by
- * copying the first or last real pixel row.  This copying could be avoided
- * by pointer hacking as is done in jdmainct.c, but it doesn't seem worth the
- * trouble on the compression side.
- */
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_prep_controller pub; /* public fields */
-
-  /* Downsampling input buffer.  This buffer holds color-converted data
-   * until we have enough to do a downsample step.
-   */
-  JSAMPARRAY color_buf[MAX_COMPONENTS];
-
-  JDIMENSION rows_to_go;	/* counts rows remaining in source image */
-  int next_buf_row;		/* index of next row to store in color_buf */
-
-#ifdef CONTEXT_ROWS_SUPPORTED	/* only needed for context case */
-  int this_row_group;		/* starting row index of group to process */
-  int next_buf_stop;		/* downsample when we reach this index */
-#endif
-} my_prep_controller;
-
-typedef my_prep_controller * my_prep_ptr;
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_prep (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-
-  if (pass_mode != JBUF_PASS_THRU)
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  /* Initialize total-height counter for detecting bottom of image */
-  prep->rows_to_go = cinfo->image_height;
-  /* Mark the conversion buffer empty */
-  prep->next_buf_row = 0;
-#ifdef CONTEXT_ROWS_SUPPORTED
-  /* Preset additional state variables for context mode.
-   * These aren't used in non-context mode, so we needn't test which mode.
-   */
-  prep->this_row_group = 0;
-  /* Set next_buf_stop to stop after two row groups have been read in. */
-  prep->next_buf_stop = 2 * cinfo->max_v_samp_factor;
-#endif
-}
-
-
-/*
- * Expand an image vertically from height input_rows to height output_rows,
- * by duplicating the bottom row.
- */
-
-LOCAL(void)
-expand_bottom_edge (JSAMPARRAY image_data, JDIMENSION num_cols,
-		    int input_rows, int output_rows)
-{
-  register int row;
-
-  for (row = input_rows; row < output_rows; row++) {
-    jcopy_sample_rows(image_data, input_rows-1, image_data, row,
-		      1, num_cols);
-  }
-}
-
-
-/*
- * Process some data in the simple no-context case.
- *
- * Preprocessor output data is counted in "row groups".  A row group
- * is defined to be v_samp_factor sample rows of each component.
- * Downsampling will produce this much data from each max_v_samp_factor
- * input rows.
- */
-
-METHODDEF(void)
-pre_process_data (j_compress_ptr cinfo,
-		  JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-		  JDIMENSION in_rows_avail,
-		  JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
-		  JDIMENSION out_row_groups_avail)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int numrows, ci;
-  JDIMENSION inrows;
-  jpeg_component_info * compptr;
-
-  while (*in_row_ctr < in_rows_avail &&
-	 *out_row_group_ctr < out_row_groups_avail) {
-    /* Do color conversion to fill the conversion buffer. */
-    inrows = in_rows_avail - *in_row_ctr;
-    numrows = cinfo->max_v_samp_factor - prep->next_buf_row;
-    numrows = (int) MIN((JDIMENSION) numrows, inrows);
-    (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
-				       prep->color_buf,
-				       (JDIMENSION) prep->next_buf_row,
-				       numrows);
-    *in_row_ctr += numrows;
-    prep->next_buf_row += numrows;
-    prep->rows_to_go -= numrows;
-    /* If at bottom of image, pad to fill the conversion buffer. */
-    if (prep->rows_to_go == 0 &&
-	prep->next_buf_row < cinfo->max_v_samp_factor) {
-      for (ci = 0; ci < cinfo->num_components; ci++) {
-	expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
-			   prep->next_buf_row, cinfo->max_v_samp_factor);
-      }
-      prep->next_buf_row = cinfo->max_v_samp_factor;
-    }
-    /* If we've filled the conversion buffer, empty it. */
-    if (prep->next_buf_row == cinfo->max_v_samp_factor) {
-      (*cinfo->downsample->downsample) (cinfo,
-					prep->color_buf, (JDIMENSION) 0,
-					output_buf, *out_row_group_ctr);
-      prep->next_buf_row = 0;
-      (*out_row_group_ctr)++;
-    }
-    /* If at bottom of image, pad the output to a full iMCU height.
-     * Note we assume the caller is providing a one-iMCU-height output buffer!
-     */
-    if (prep->rows_to_go == 0 &&
-	*out_row_group_ctr < out_row_groups_avail) {
-      for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	   ci++, compptr++) {
-	numrows = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-		  cinfo->min_DCT_v_scaled_size;
-	expand_bottom_edge(output_buf[ci],
-			   compptr->width_in_blocks * compptr->DCT_h_scaled_size,
-			   (int) (*out_row_group_ctr * numrows),
-			   (int) (out_row_groups_avail * numrows));
-      }
-      *out_row_group_ctr = out_row_groups_avail;
-      break;			/* can exit outer loop without test */
-    }
-  }
-}
-
-
-#ifdef CONTEXT_ROWS_SUPPORTED
-
-/*
- * Process some data in the context case.
- */
-
-METHODDEF(void)
-pre_process_context (j_compress_ptr cinfo,
-		     JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-		     JDIMENSION in_rows_avail,
-		     JSAMPIMAGE output_buf, JDIMENSION *out_row_group_ctr,
-		     JDIMENSION out_row_groups_avail)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int numrows, ci;
-  int buf_height = cinfo->max_v_samp_factor * 3;
-  JDIMENSION inrows;
-
-  while (*out_row_group_ctr < out_row_groups_avail) {
-    if (*in_row_ctr < in_rows_avail) {
-      /* Do color conversion to fill the conversion buffer. */
-      inrows = in_rows_avail - *in_row_ctr;
-      numrows = prep->next_buf_stop - prep->next_buf_row;
-      numrows = (int) MIN((JDIMENSION) numrows, inrows);
-      (*cinfo->cconvert->color_convert) (cinfo, input_buf + *in_row_ctr,
-					 prep->color_buf,
-					 (JDIMENSION) prep->next_buf_row,
-					 numrows);
-      /* Pad at top of image, if first time through */
-      if (prep->rows_to_go == cinfo->image_height) {
-	for (ci = 0; ci < cinfo->num_components; ci++) {
-	  int row;
-	  for (row = 1; row <= cinfo->max_v_samp_factor; row++) {
-	    jcopy_sample_rows(prep->color_buf[ci], 0,
-			      prep->color_buf[ci], -row,
-			      1, cinfo->image_width);
-	  }
-	}
-      }
-      *in_row_ctr += numrows;
-      prep->next_buf_row += numrows;
-      prep->rows_to_go -= numrows;
-    } else {
-      /* Return for more data, unless we are at the bottom of the image. */
-      if (prep->rows_to_go != 0)
-	break;
-      /* When at bottom of image, pad to fill the conversion buffer. */
-      if (prep->next_buf_row < prep->next_buf_stop) {
-	for (ci = 0; ci < cinfo->num_components; ci++) {
-	  expand_bottom_edge(prep->color_buf[ci], cinfo->image_width,
-			     prep->next_buf_row, prep->next_buf_stop);
-	}
-	prep->next_buf_row = prep->next_buf_stop;
-      }
-    }
-    /* If we've gotten enough data, downsample a row group. */
-    if (prep->next_buf_row == prep->next_buf_stop) {
-      (*cinfo->downsample->downsample) (cinfo,
-					prep->color_buf,
-					(JDIMENSION) prep->this_row_group,
-					output_buf, *out_row_group_ctr);
-      (*out_row_group_ctr)++;
-      /* Advance pointers with wraparound as necessary. */
-      prep->this_row_group += cinfo->max_v_samp_factor;
-      if (prep->this_row_group >= buf_height)
-	prep->this_row_group = 0;
-      if (prep->next_buf_row >= buf_height)
-	prep->next_buf_row = 0;
-      prep->next_buf_stop = prep->next_buf_row + cinfo->max_v_samp_factor;
-    }
-  }
-}
-
-
-/*
- * Create the wrapped-around downsampling input buffer needed for context mode.
- */
-
-LOCAL(void)
-create_context_buffer (j_compress_ptr cinfo)
-{
-  my_prep_ptr prep = (my_prep_ptr) cinfo->prep;
-  int rgroup_height = cinfo->max_v_samp_factor;
-  int ci, i;
-  jpeg_component_info * compptr;
-  JSAMPARRAY true_buffer, fake_buffer;
-
-  /* Grab enough space for fake row pointers for all the components;
-   * we need five row groups' worth of pointers for each component.
-   */
-  fake_buffer = (JSAMPARRAY)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(cinfo->num_components * 5 * rgroup_height) *
-				SIZEOF(JSAMPROW));
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Allocate the actual buffer space (3 row groups) for this component.
-     * We make the buffer wide enough to allow the downsampler to edge-expand
-     * horizontally within the buffer, if it so chooses.
-     */
-    true_buffer = (*cinfo->mem->alloc_sarray)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       (JDIMENSION) (((long) compptr->width_in_blocks *
-		      cinfo->min_DCT_h_scaled_size *
-		      cinfo->max_h_samp_factor) / compptr->h_samp_factor),
-       (JDIMENSION) (3 * rgroup_height));
-    /* Copy true buffer row pointers into the middle of the fake row array */
-    MEMCOPY(fake_buffer + rgroup_height, true_buffer,
-	    3 * rgroup_height * SIZEOF(JSAMPROW));
-    /* Fill in the above and below wraparound pointers */
-    for (i = 0; i < rgroup_height; i++) {
-      fake_buffer[i] = true_buffer[2 * rgroup_height + i];
-      fake_buffer[4 * rgroup_height + i] = true_buffer[i];
-    }
-    prep->color_buf[ci] = fake_buffer + rgroup_height;
-    fake_buffer += 5 * rgroup_height; /* point to space for next component */
-  }
-}
-
-#endif /* CONTEXT_ROWS_SUPPORTED */
-
-
-/*
- * Initialize preprocessing controller.
- */
-
-GLOBAL(void)
-jinit_c_prep_controller (j_compress_ptr cinfo, boolean need_full_buffer)
-{
-  my_prep_ptr prep;
-  int ci;
-  jpeg_component_info * compptr;
-
-  if (need_full_buffer)		/* safety check */
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  prep = (my_prep_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_prep_controller));
-  cinfo->prep = (struct jpeg_c_prep_controller *) prep;
-  prep->pub.start_pass = start_pass_prep;
-
-  /* Allocate the color conversion buffer.
-   * We make the buffer wide enough to allow the downsampler to edge-expand
-   * horizontally within the buffer, if it so chooses.
-   */
-  if (cinfo->downsample->need_context_rows) {
-    /* Set up to provide context rows */
-#ifdef CONTEXT_ROWS_SUPPORTED
-    prep->pub.pre_process_data = pre_process_context;
-    create_context_buffer(cinfo);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    /* No context, just make it tall enough for one row group */
-    prep->pub.pre_process_data = pre_process_data;
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      prep->color_buf[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 (JDIMENSION) (((long) compptr->width_in_blocks *
-			cinfo->min_DCT_h_scaled_size *
-			cinfo->max_h_samp_factor) / compptr->h_samp_factor),
-	 (JDIMENSION) cinfo->max_v_samp_factor);
-    }
-  }
-}
--- a/DoConfig/fltk/jpeg/jcsample.c
+++ /dev/null
@@ -1,545 +1,0 @@
-/*
- * jcsample.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains downsampling routines.
- *
- * Downsampling input data is counted in "row groups".  A row group
- * is defined to be max_v_samp_factor pixel rows of each component,
- * from which the downsampler produces v_samp_factor sample rows.
- * A single row group is processed in each call to the downsampler module.
- *
- * The downsampler is responsible for edge-expansion of its output data
- * to fill an integral number of DCT blocks horizontally.  The source buffer
- * may be modified if it is helpful for this purpose (the source buffer is
- * allocated wide enough to correspond to the desired output width).
- * The caller (the prep controller) is responsible for vertical padding.
- *
- * The downsampler may request "context rows" by setting need_context_rows
- * during startup.  In this case, the input arrays will contain at least
- * one row group's worth of pixels above and below the passed-in data;
- * the caller will create dummy rows at image top and bottom by replicating
- * the first or last real pixel row.
- *
- * An excellent reference for image resampling is
- *   Digital Image Warping, George Wolberg, 1990.
- *   Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7.
- *
- * The downsampling algorithm used here is a simple average of the source
- * pixels covered by the output pixel.  The hi-falutin sampling literature
- * refers to this as a "box filter".  In general the characteristics of a box
- * filter are not very good, but for the specific cases we normally use (1:1
- * and 2:1 ratios) the box is equivalent to a "triangle filter" which is not
- * nearly so bad.  If you intend to use other sampling ratios, you'd be well
- * advised to improve this code.
- *
- * A simple input-smoothing capability is provided.  This is mainly intended
- * for cleaning up color-dithered GIF input files (if you find it inadequate,
- * we suggest using an external filtering program such as pnmconvol).  When
- * enabled, each input pixel P is replaced by a weighted sum of itself and its
- * eight neighbors.  P's weight is 1-8*SF and each neighbor's weight is SF,
- * where SF = (smoothing_factor / 1024).
- * Currently, smoothing is only supported for 2h2v sampling factors.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Pointer to routine to downsample a single component */
-typedef JMETHOD(void, downsample1_ptr,
-		(j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data));
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_downsampler pub;	/* public fields */
-
-  /* Downsampling method pointers, one per component */
-  downsample1_ptr methods[MAX_COMPONENTS];
-
-  /* Height of an output row group for each component. */
-  int rowgroup_height[MAX_COMPONENTS];
-
-  /* These arrays save pixel expansion factors so that int_downsample need not
-   * recompute them each time.  They are unused for other downsampling methods.
-   */
-  UINT8 h_expand[MAX_COMPONENTS];
-  UINT8 v_expand[MAX_COMPONENTS];
-} my_downsampler;
-
-typedef my_downsampler * my_downsample_ptr;
-
-
-/*
- * Initialize for a downsampling pass.
- */
-
-METHODDEF(void)
-start_pass_downsample (j_compress_ptr cinfo)
-{
-  /* no work for now */
-}
-
-
-/*
- * Expand a component horizontally from width input_cols to width output_cols,
- * by duplicating the rightmost samples.
- */
-
-LOCAL(void)
-expand_right_edge (JSAMPARRAY image_data, int num_rows,
-		   JDIMENSION input_cols, JDIMENSION output_cols)
-{
-  register JSAMPROW ptr;
-  register JSAMPLE pixval;
-  register int count;
-  int row;
-  int numcols = (int) (output_cols - input_cols);
-
-  if (numcols > 0) {
-    for (row = 0; row < num_rows; row++) {
-      ptr = image_data[row] + input_cols;
-      pixval = ptr[-1];		/* don't need GETJSAMPLE() here */
-      for (count = numcols; count > 0; count--)
-	*ptr++ = pixval;
-    }
-  }
-}
-
-
-/*
- * Do downsampling for a whole row group (all components).
- *
- * In this version we simply downsample each component independently.
- */
-
-METHODDEF(void)
-sep_downsample (j_compress_ptr cinfo,
-		JSAMPIMAGE input_buf, JDIMENSION in_row_index,
-		JSAMPIMAGE output_buf, JDIMENSION out_row_group_index)
-{
-  my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample;
-  int ci;
-  jpeg_component_info * compptr;
-  JSAMPARRAY in_ptr, out_ptr;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    in_ptr = input_buf[ci] + in_row_index;
-    out_ptr = output_buf[ci] +
-	      (out_row_group_index * downsample->rowgroup_height[ci]);
-    (*downsample->methods[ci]) (cinfo, compptr, in_ptr, out_ptr);
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * One row group is processed per call.
- * This version handles arbitrary integral sampling ratios, without smoothing.
- * Note that this version is not actually used for customary sampling ratios.
- */
-
-METHODDEF(void)
-int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  my_downsample_ptr downsample = (my_downsample_ptr) cinfo->downsample;
-  int inrow, outrow, h_expand, v_expand, numpix, numpix2, h, v;
-  JDIMENSION outcol, outcol_h;	/* outcol_h == outcol*h_expand */
-  JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size;
-  JSAMPROW inptr, outptr;
-  INT32 outvalue;
-
-  h_expand = downsample->h_expand[compptr->component_index];
-  v_expand = downsample->v_expand[compptr->component_index];
-  numpix = h_expand * v_expand;
-  numpix2 = numpix/2;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * h_expand);
-
-  inrow = outrow = 0;
-  while (inrow < cinfo->max_v_samp_factor) {
-    outptr = output_data[outrow];
-    for (outcol = 0, outcol_h = 0; outcol < output_cols;
-	 outcol++, outcol_h += h_expand) {
-      outvalue = 0;
-      for (v = 0; v < v_expand; v++) {
-	inptr = input_data[inrow+v] + outcol_h;
-	for (h = 0; h < h_expand; h++) {
-	  outvalue += (INT32) GETJSAMPLE(*inptr++);
-	}
-      }
-      *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix);
-    }
-    inrow += v_expand;
-    outrow++;
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the special case of a full-size component,
- * without smoothing.
- */
-
-METHODDEF(void)
-fullsize_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		     JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  /* Copy the data */
-  jcopy_sample_rows(input_data, 0, output_data, 0,
-		    cinfo->max_v_samp_factor, cinfo->image_width);
-  /* Edge-expand */
-  expand_right_edge(output_data, cinfo->max_v_samp_factor, cinfo->image_width,
-		    compptr->width_in_blocks * compptr->DCT_h_scaled_size);
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the common case of 2:1 horizontal and 1:1 vertical,
- * without smoothing.
- *
- * A note about the "bias" calculations: when rounding fractional values to
- * integer, we do not want to always round 0.5 up to the next integer.
- * If we did that, we'd introduce a noticeable bias towards larger values.
- * Instead, this code is arranged so that 0.5 will be rounded up or down at
- * alternate pixel locations (a simple ordered dither pattern).
- */
-
-METHODDEF(void)
-h2v1_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow;
-  JDIMENSION outcol;
-  JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size;
-  register JSAMPROW inptr, outptr;
-  register int bias;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * 2);
-
-  for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) {
-    outptr = output_data[inrow];
-    inptr = input_data[inrow];
-    bias = 0;			/* bias = 0,1,0,1,... for successive samples */
-    for (outcol = 0; outcol < output_cols; outcol++) {
-      *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr) + GETJSAMPLE(inptr[1])
-			      + bias) >> 1);
-      bias ^= 1;		/* 0=>1, 1=>0 */
-      inptr += 2;
-    }
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the standard case of 2:1 horizontal and 2:1 vertical,
- * without smoothing.
- */
-
-METHODDEF(void)
-h2v2_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow, outrow;
-  JDIMENSION outcol;
-  JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size;
-  register JSAMPROW inptr0, inptr1, outptr;
-  register int bias;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data, cinfo->max_v_samp_factor,
-		    cinfo->image_width, output_cols * 2);
-
-  inrow = outrow = 0;
-  while (inrow < cinfo->max_v_samp_factor) {
-    outptr = output_data[outrow];
-    inptr0 = input_data[inrow];
-    inptr1 = input_data[inrow+1];
-    bias = 1;			/* bias = 1,2,1,2,... for successive samples */
-    for (outcol = 0; outcol < output_cols; outcol++) {
-      *outptr++ = (JSAMPLE) ((GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-			      GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1])
-			      + bias) >> 2);
-      bias ^= 3;		/* 1=>2, 2=>1 */
-      inptr0 += 2; inptr1 += 2;
-    }
-    inrow += 2;
-    outrow++;
-  }
-}
-
-
-#ifdef INPUT_SMOOTHING_SUPPORTED
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the standard case of 2:1 horizontal and 2:1 vertical,
- * with smoothing.  One row of context is required.
- */
-
-METHODDEF(void)
-h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
-			JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow, outrow;
-  JDIMENSION colctr;
-  JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size;
-  register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr;
-  INT32 membersum, neighsum, memberscale, neighscale;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2,
-		    cinfo->image_width, output_cols * 2);
-
-  /* We don't bother to form the individual "smoothed" input pixel values;
-   * we can directly compute the output which is the average of the four
-   * smoothed values.  Each of the four member pixels contributes a fraction
-   * (1-8*SF) to its own smoothed image and a fraction SF to each of the three
-   * other smoothed pixels, therefore a total fraction (1-5*SF)/4 to the final
-   * output.  The four corner-adjacent neighbor pixels contribute a fraction
-   * SF to just one smoothed pixel, or SF/4 to the final output; while the
-   * eight edge-adjacent neighbors contribute SF to each of two smoothed
-   * pixels, or SF/2 overall.  In order to use integer arithmetic, these
-   * factors are scaled by 2^16 = 65536.
-   * Also recall that SF = smoothing_factor / 1024.
-   */
-
-  memberscale = 16384 - cinfo->smoothing_factor * 80; /* scaled (1-5*SF)/4 */
-  neighscale = cinfo->smoothing_factor * 16; /* scaled SF/4 */
-
-  inrow = outrow = 0;
-  while (inrow < cinfo->max_v_samp_factor) {
-    outptr = output_data[outrow];
-    inptr0 = input_data[inrow];
-    inptr1 = input_data[inrow+1];
-    above_ptr = input_data[inrow-1];
-    below_ptr = input_data[inrow+2];
-
-    /* Special case for first column: pretend column -1 is same as column 0 */
-    membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-    neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-	       GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-	       GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[2]) +
-	       GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[2]);
-    neighsum += neighsum;
-    neighsum += GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[2]) +
-		GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[2]);
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-    inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2;
-
-    for (colctr = output_cols - 2; colctr > 0; colctr--) {
-      /* sum of pixels directly mapped to this output element */
-      membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		  GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-      /* sum of edge-neighbor pixels */
-      neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-		 GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-		 GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[2]) +
-		 GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[2]);
-      /* The edge-neighbors count twice as much as corner-neighbors */
-      neighsum += neighsum;
-      /* Add in the corner-neighbors */
-      neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[2]) +
-		  GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[2]);
-      /* form final output scaled up by 2^16 */
-      membersum = membersum * memberscale + neighsum * neighscale;
-      /* round, descale and output it */
-      *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-      inptr0 += 2; inptr1 += 2; above_ptr += 2; below_ptr += 2;
-    }
-
-    /* Special case for last column */
-    membersum = GETJSAMPLE(*inptr0) + GETJSAMPLE(inptr0[1]) +
-		GETJSAMPLE(*inptr1) + GETJSAMPLE(inptr1[1]);
-    neighsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(above_ptr[1]) +
-	       GETJSAMPLE(*below_ptr) + GETJSAMPLE(below_ptr[1]) +
-	       GETJSAMPLE(inptr0[-1]) + GETJSAMPLE(inptr0[1]) +
-	       GETJSAMPLE(inptr1[-1]) + GETJSAMPLE(inptr1[1]);
-    neighsum += neighsum;
-    neighsum += GETJSAMPLE(above_ptr[-1]) + GETJSAMPLE(above_ptr[1]) +
-		GETJSAMPLE(below_ptr[-1]) + GETJSAMPLE(below_ptr[1]);
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr = (JSAMPLE) ((membersum + 32768) >> 16);
-
-    inrow += 2;
-    outrow++;
-  }
-}
-
-
-/*
- * Downsample pixel values of a single component.
- * This version handles the special case of a full-size component,
- * with smoothing.  One row of context is required.
- */
-
-METHODDEF(void)
-fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
-			    JSAMPARRAY input_data, JSAMPARRAY output_data)
-{
-  int inrow;
-  JDIMENSION colctr;
-  JDIMENSION output_cols = compptr->width_in_blocks * compptr->DCT_h_scaled_size;
-  register JSAMPROW inptr, above_ptr, below_ptr, outptr;
-  INT32 membersum, neighsum, memberscale, neighscale;
-  int colsum, lastcolsum, nextcolsum;
-
-  /* Expand input data enough to let all the output samples be generated
-   * by the standard loop.  Special-casing padded output would be more
-   * efficient.
-   */
-  expand_right_edge(input_data - 1, cinfo->max_v_samp_factor + 2,
-		    cinfo->image_width, output_cols);
-
-  /* Each of the eight neighbor pixels contributes a fraction SF to the
-   * smoothed pixel, while the main pixel contributes (1-8*SF).  In order
-   * to use integer arithmetic, these factors are multiplied by 2^16 = 65536.
-   * Also recall that SF = smoothing_factor / 1024.
-   */
-
-  memberscale = 65536L - cinfo->smoothing_factor * 512L; /* scaled 1-8*SF */
-  neighscale = cinfo->smoothing_factor * 64; /* scaled SF */
-
-  for (inrow = 0; inrow < cinfo->max_v_samp_factor; inrow++) {
-    outptr = output_data[inrow];
-    inptr = input_data[inrow];
-    above_ptr = input_data[inrow-1];
-    below_ptr = input_data[inrow+1];
-
-    /* Special case for first column */
-    colsum = GETJSAMPLE(*above_ptr++) + GETJSAMPLE(*below_ptr++) +
-	     GETJSAMPLE(*inptr);
-    membersum = GETJSAMPLE(*inptr++);
-    nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
-		 GETJSAMPLE(*inptr);
-    neighsum = colsum + (colsum - membersum) + nextcolsum;
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-    lastcolsum = colsum; colsum = nextcolsum;
-
-    for (colctr = output_cols - 2; colctr > 0; colctr--) {
-      membersum = GETJSAMPLE(*inptr++);
-      above_ptr++; below_ptr++;
-      nextcolsum = GETJSAMPLE(*above_ptr) + GETJSAMPLE(*below_ptr) +
-		   GETJSAMPLE(*inptr);
-      neighsum = lastcolsum + (colsum - membersum) + nextcolsum;
-      membersum = membersum * memberscale + neighsum * neighscale;
-      *outptr++ = (JSAMPLE) ((membersum + 32768) >> 16);
-      lastcolsum = colsum; colsum = nextcolsum;
-    }
-
-    /* Special case for last column */
-    membersum = GETJSAMPLE(*inptr);
-    neighsum = lastcolsum + (colsum - membersum) + colsum;
-    membersum = membersum * memberscale + neighsum * neighscale;
-    *outptr = (JSAMPLE) ((membersum + 32768) >> 16);
-
-  }
-}
-
-#endif /* INPUT_SMOOTHING_SUPPORTED */
-
-
-/*
- * Module initialization routine for downsampling.
- * Note that we must select a routine for each component.
- */
-
-GLOBAL(void)
-jinit_downsampler (j_compress_ptr cinfo)
-{
-  my_downsample_ptr downsample;
-  int ci;
-  jpeg_component_info * compptr;
-  boolean smoothok = TRUE;
-  int h_in_group, v_in_group, h_out_group, v_out_group;
-
-  downsample = (my_downsample_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_downsampler));
-  cinfo->downsample = (struct jpeg_downsampler *) downsample;
-  downsample->pub.start_pass = start_pass_downsample;
-  downsample->pub.downsample = sep_downsample;
-  downsample->pub.need_context_rows = FALSE;
-
-  if (cinfo->CCIR601_sampling)
-    ERREXIT(cinfo, JERR_CCIR601_NOTIMPL);
-
-  /* Verify we can handle the sampling factors, and set up method pointers */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Compute size of an "output group" for DCT scaling.  This many samples
-     * are to be converted from max_h_samp_factor * max_v_samp_factor pixels.
-     */
-    h_out_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) /
-		  cinfo->min_DCT_h_scaled_size;
-    v_out_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-		  cinfo->min_DCT_v_scaled_size;
-    h_in_group = cinfo->max_h_samp_factor;
-    v_in_group = cinfo->max_v_samp_factor;
-    downsample->rowgroup_height[ci] = v_out_group; /* save for use later */
-    if (h_in_group == h_out_group && v_in_group == v_out_group) {
-#ifdef INPUT_SMOOTHING_SUPPORTED
-      if (cinfo->smoothing_factor) {
-	downsample->methods[ci] = fullsize_smooth_downsample;
-	downsample->pub.need_context_rows = TRUE;
-      } else
-#endif
-	downsample->methods[ci] = fullsize_downsample;
-    } else if (h_in_group == h_out_group * 2 &&
-	       v_in_group == v_out_group) {
-      smoothok = FALSE;
-      downsample->methods[ci] = h2v1_downsample;
-    } else if (h_in_group == h_out_group * 2 &&
-	       v_in_group == v_out_group * 2) {
-#ifdef INPUT_SMOOTHING_SUPPORTED
-      if (cinfo->smoothing_factor) {
-	downsample->methods[ci] = h2v2_smooth_downsample;
-	downsample->pub.need_context_rows = TRUE;
-      } else
-#endif
-	downsample->methods[ci] = h2v2_downsample;
-    } else if ((h_in_group % h_out_group) == 0 &&
-	       (v_in_group % v_out_group) == 0) {
-      smoothok = FALSE;
-      downsample->methods[ci] = int_downsample;
-      downsample->h_expand[ci] = (UINT8) (h_in_group / h_out_group);
-      downsample->v_expand[ci] = (UINT8) (v_in_group / v_out_group);
-    } else
-      ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
-  }
-
-#ifdef INPUT_SMOOTHING_SUPPORTED
-  if (cinfo->smoothing_factor && !smoothok)
-    TRACEMS(cinfo, 0, JTRC_SMOOTH_NOTIMPL);
-#endif
-}
--- a/DoConfig/fltk/jpeg/jctrans.c
+++ /dev/null
@@ -1,385 +1,0 @@
-/*
- * jctrans.c
- *
- * Copyright (C) 1995-1998, Thomas G. Lane.
- * Modified 2000-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains library routines for transcoding compression,
- * that is, writing raw DCT coefficient arrays to an output JPEG file.
- * The routines in jcapimin.c will also be needed by a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(void) transencode_master_selection
-	JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays));
-LOCAL(void) transencode_coef_controller
-	JPP((j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays));
-
-
-/*
- * Compression initialization for writing raw-coefficient data.
- * Before calling this, all parameters and a data destination must be set up.
- * Call jpeg_finish_compress() to actually write the data.
- *
- * The number of passed virtual arrays must match cinfo->num_components.
- * Note that the virtual arrays need not be filled or even realized at
- * the time write_coefficients is called; indeed, if the virtual arrays
- * were requested from this compression object's memory manager, they
- * typically will be realized during this routine and filled afterwards.
- */
-
-GLOBAL(void)
-jpeg_write_coefficients (j_compress_ptr cinfo, jvirt_barray_ptr * coef_arrays)
-{
-  if (cinfo->global_state != CSTATE_START)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Mark all tables to be written */
-  jpeg_suppress_tables(cinfo, FALSE);
-  /* (Re)initialize error mgr and destination modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->dest->init_destination) (cinfo);
-  /* Perform master selection of active modules */
-  transencode_master_selection(cinfo, coef_arrays);
-  /* Wait for jpeg_finish_compress() call */
-  cinfo->next_scanline = 0;	/* so jpeg_write_marker works */
-  cinfo->global_state = CSTATE_WRCOEFS;
-}
-
-
-/*
- * Initialize the compression object with default parameters,
- * then copy from the source object all parameters needed for lossless
- * transcoding.  Parameters that can be varied without loss (such as
- * scan script and Huffman optimization) are left in their default states.
- */
-
-GLOBAL(void)
-jpeg_copy_critical_parameters (j_decompress_ptr srcinfo,
-			       j_compress_ptr dstinfo)
-{
-  JQUANT_TBL ** qtblptr;
-  jpeg_component_info *incomp, *outcomp;
-  JQUANT_TBL *c_quant, *slot_quant;
-  int tblno, ci, coefi;
-
-  /* Safety check to ensure start_compress not called yet. */
-  if (dstinfo->global_state != CSTATE_START)
-    ERREXIT1(dstinfo, JERR_BAD_STATE, dstinfo->global_state);
-  /* Copy fundamental image dimensions */
-  dstinfo->image_width = srcinfo->image_width;
-  dstinfo->image_height = srcinfo->image_height;
-  dstinfo->input_components = srcinfo->num_components;
-  dstinfo->in_color_space = srcinfo->jpeg_color_space;
-  dstinfo->jpeg_width = srcinfo->output_width;
-  dstinfo->jpeg_height = srcinfo->output_height;
-  dstinfo->min_DCT_h_scaled_size = srcinfo->min_DCT_h_scaled_size;
-  dstinfo->min_DCT_v_scaled_size = srcinfo->min_DCT_v_scaled_size;
-  /* Initialize all parameters to default values */
-  jpeg_set_defaults(dstinfo);
-  /* jpeg_set_defaults may choose wrong colorspace, eg YCbCr if input is RGB.
-   * Fix it to get the right header markers for the image colorspace.
-   * Note: Entropy table assignment in jpeg_set_colorspace depends
-   * on color_transform.
-   */
-  dstinfo->color_transform = srcinfo->color_transform;
-  jpeg_set_colorspace(dstinfo, srcinfo->jpeg_color_space);
-  dstinfo->data_precision = srcinfo->data_precision;
-  dstinfo->CCIR601_sampling = srcinfo->CCIR601_sampling;
-  /* Copy the source's quantization tables. */
-  for (tblno = 0; tblno < NUM_QUANT_TBLS; tblno++) {
-    if (srcinfo->quant_tbl_ptrs[tblno] != NULL) {
-      qtblptr = & dstinfo->quant_tbl_ptrs[tblno];
-      if (*qtblptr == NULL)
-	*qtblptr = jpeg_alloc_quant_table((j_common_ptr) dstinfo);
-      MEMCOPY((*qtblptr)->quantval,
-	      srcinfo->quant_tbl_ptrs[tblno]->quantval,
-	      SIZEOF((*qtblptr)->quantval));
-      (*qtblptr)->sent_table = FALSE;
-    }
-  }
-  /* Copy the source's per-component info.
-   * Note we assume jpeg_set_defaults has allocated the dest comp_info array.
-   */
-  dstinfo->num_components = srcinfo->num_components;
-  if (dstinfo->num_components < 1 || dstinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(dstinfo, JERR_COMPONENT_COUNT, dstinfo->num_components,
-	     MAX_COMPONENTS);
-  for (ci = 0, incomp = srcinfo->comp_info, outcomp = dstinfo->comp_info;
-       ci < dstinfo->num_components; ci++, incomp++, outcomp++) {
-    outcomp->component_id = incomp->component_id;
-    outcomp->h_samp_factor = incomp->h_samp_factor;
-    outcomp->v_samp_factor = incomp->v_samp_factor;
-    outcomp->quant_tbl_no = incomp->quant_tbl_no;
-    /* Make sure saved quantization table for component matches the qtable
-     * slot.  If not, the input file re-used this qtable slot.
-     * IJG encoder currently cannot duplicate this.
-     */
-    tblno = outcomp->quant_tbl_no;
-    if (tblno < 0 || tblno >= NUM_QUANT_TBLS ||
-	srcinfo->quant_tbl_ptrs[tblno] == NULL)
-      ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno);
-    slot_quant = srcinfo->quant_tbl_ptrs[tblno];
-    c_quant = incomp->quant_table;
-    if (c_quant != NULL) {
-      for (coefi = 0; coefi < DCTSIZE2; coefi++) {
-	if (c_quant->quantval[coefi] != slot_quant->quantval[coefi])
-	  ERREXIT1(dstinfo, JERR_MISMATCHED_QUANT_TABLE, tblno);
-      }
-    }
-    /* Note: we do not copy the source's entropy table assignments;
-     * instead we rely on jpeg_set_colorspace to have made a suitable choice.
-     */
-  }
-  /* Also copy JFIF version and resolution information, if available.
-   * Strictly speaking this isn't "critical" info, but it's nearly
-   * always appropriate to copy it if available.  In particular,
-   * if the application chooses to copy JFIF 1.02 extension markers from
-   * the source file, we need to copy the version to make sure we don't
-   * emit a file that has 1.02 extensions but a claimed version of 1.01.
-   */
-  if (srcinfo->saw_JFIF_marker) {
-    if (srcinfo->JFIF_major_version == 1 ||
-	srcinfo->JFIF_major_version == 2) {
-      dstinfo->JFIF_major_version = srcinfo->JFIF_major_version;
-      dstinfo->JFIF_minor_version = srcinfo->JFIF_minor_version;
-    }
-    dstinfo->density_unit = srcinfo->density_unit;
-    dstinfo->X_density = srcinfo->X_density;
-    dstinfo->Y_density = srcinfo->Y_density;
-  }
-}
-
-
-/*
- * Master selection of compression modules for transcoding.
- * This substitutes for jcinit.c's initialization of the full compressor.
- */
-
-LOCAL(void)
-transencode_master_selection (j_compress_ptr cinfo,
-			      jvirt_barray_ptr * coef_arrays)
-{
-  /* Initialize master control (includes parameter checking/processing) */
-  jinit_c_master_control(cinfo, TRUE /* transcode only */);
-
-  /* Entropy encoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code)
-    jinit_arith_encoder(cinfo);
-  else {
-    jinit_huff_encoder(cinfo);
-  }
-
-  /* We need a special coefficient buffer controller. */
-  transencode_coef_controller(cinfo, coef_arrays);
-
-  jinit_marker_writer(cinfo);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Write the datastream header (SOI, JFIF) immediately.
-   * Frame and scan headers are postponed till later.
-   * This lets application insert special markers after the SOI.
-   */
-  (*cinfo->marker->write_file_header) (cinfo);
-}
-
-
-/*
- * The rest of this file is a special implementation of the coefficient
- * buffer controller.  This is similar to jccoefct.c, but it handles only
- * output from presupplied virtual arrays.  Furthermore, we generate any
- * dummy padding blocks on-the-fly rather than expecting them to be present
- * in the arrays.
- */
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_c_coef_controller pub; /* public fields */
-
-  JDIMENSION iMCU_row_num;	/* iMCU row # within image */
-  JDIMENSION mcu_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* Virtual block array for each component. */
-  jvirt_barray_ptr * whole_image;
-
-  /* Workspace for constructing dummy blocks at right/bottom edges. */
-  JBLOCKROW dummy_buffer[C_MAX_BLOCKS_IN_MCU];
-} my_coef_controller;
-
-typedef my_coef_controller * my_coef_ptr;
-
-
-LOCAL(void)
-start_iMCU_row (j_compress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row */
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (coef->iMCU_row_num < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->mcu_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_coef (j_compress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  if (pass_mode != JBUF_CRANK_DEST)
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  coef->iMCU_row_num = 0;
-  start_iMCU_row(cinfo);
-}
-
-
-/*
- * Process some data.
- * We process the equivalent of one fully interleaved MCU row ("iMCU" row)
- * per call, ie, v_samp_factor block rows for each component in the scan.
- * The data is obtained from the virtual arrays and fed to the entropy coder.
- * Returns TRUE if the iMCU row is completed, FALSE if suspended.
- *
- * NB: input_buf is ignored; it is likely to be a NULL pointer.
- */
-
-METHODDEF(boolean)
-compress_output (j_compress_ptr cinfo, JSAMPIMAGE input_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, ci, xindex, yindex, yoffset, blockcnt;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW MCU_buffer[C_MAX_BLOCKS_IN_MCU];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan. */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       coef->iMCU_row_num * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->mcu_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	blockcnt = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						: compptr->last_col_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (coef->iMCU_row_num < last_iMCU_row ||
-	      yindex+yoffset < compptr->last_row_height) {
-	    /* Fill in pointers to real blocks in this row */
-	    buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	    for (xindex = 0; xindex < blockcnt; xindex++)
-	      MCU_buffer[blkn++] = buffer_ptr++;
-	  } else {
-	    /* At bottom of image, need a whole row of dummy blocks */
-	    xindex = 0;
-	  }
-	  /* Fill in any dummy blocks needed in this row.
-	   * Dummy blocks are filled in the same way as in jccoefct.c:
-	   * all zeroes in the AC entries, DC entries equal to previous
-	   * block's DC value.  The init routine has already zeroed the
-	   * AC entries, so we need only set the DC entries correctly.
-	   */
-	  for (; xindex < compptr->MCU_width; xindex++) {
-	    MCU_buffer[blkn] = coef->dummy_buffer[blkn];
-	    MCU_buffer[blkn][0][0] = MCU_buffer[blkn-1][0][0];
-	    blkn++;
-	  }
-	}
-      }
-      /* Try to write the MCU. */
-      if (! (*cinfo->entropy->encode_mcu) (cinfo, MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->mcu_ctr = MCU_col_num;
-	return FALSE;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->mcu_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  coef->iMCU_row_num++;
-  start_iMCU_row(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Initialize coefficient buffer controller.
- *
- * Each passed coefficient array must be the right size for that
- * coefficient: width_in_blocks wide and height_in_blocks high,
- * with unitheight at least v_samp_factor.
- */
-
-LOCAL(void)
-transencode_coef_controller (j_compress_ptr cinfo,
-			     jvirt_barray_ptr * coef_arrays)
-{
-  my_coef_ptr coef;
-  JBLOCKROW buffer;
-  int i;
-
-  coef = (my_coef_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller));
-  cinfo->coef = &coef->pub;
-  coef->pub.start_pass = start_pass_coef;
-  coef->pub.compress_data = compress_output;
-
-  /* Save pointer to virtual arrays */
-  coef->whole_image = coef_arrays;
-
-  /* Allocate and pre-zero space for dummy DCT blocks. */
-  buffer = (JBLOCKROW)
-    (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-  FMEMZERO((void FAR *) buffer, C_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-  for (i = 0; i < C_MAX_BLOCKS_IN_MCU; i++) {
-    coef->dummy_buffer[i] = buffer + i;
-  }
-}
--- a/DoConfig/fltk/jpeg/jdapimin.c
+++ /dev/null
@@ -1,399 +1,0 @@
-/*
- * jdapimin.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * Modified 2009-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the decompression half
- * of the JPEG library.  These are the "minimum" API routines that may be
- * needed in either the normal full-decompression case or the
- * transcoding-only case.
- *
- * Most of the routines intended to be called directly by an application
- * are in this file or in jdapistd.c.  But also see jcomapi.c for routines
- * shared by compression and decompression, and jdtrans.c for the transcoding
- * case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * Initialization of a JPEG decompression object.
- * The error manager must already be set up (in case memory manager fails).
- */
-
-GLOBAL(void)
-jpeg_CreateDecompress (j_decompress_ptr cinfo, int version, size_t structsize)
-{
-  int i;
-
-  /* Guard against version mismatches between library and caller. */
-  cinfo->mem = NULL;		/* so jpeg_destroy knows mem mgr not called */
-  if (version != JPEG_LIB_VERSION)
-    ERREXIT2(cinfo, JERR_BAD_LIB_VERSION, JPEG_LIB_VERSION, version);
-  if (structsize != SIZEOF(struct jpeg_decompress_struct))
-    ERREXIT2(cinfo, JERR_BAD_STRUCT_SIZE, 
-	     (int) SIZEOF(struct jpeg_decompress_struct), (int) structsize);
-
-  /* For debugging purposes, we zero the whole master structure.
-   * But the application has already set the err pointer, and may have set
-   * client_data, so we have to save and restore those fields.
-   * Note: if application hasn't set client_data, tools like Purify may
-   * complain here.
-   */
-  {
-    struct jpeg_error_mgr * err = cinfo->err;
-    void * client_data = cinfo->client_data; /* ignore Purify complaint here */
-    MEMZERO(cinfo, SIZEOF(struct jpeg_decompress_struct));
-    cinfo->err = err;
-    cinfo->client_data = client_data;
-  }
-  cinfo->is_decompressor = TRUE;
-
-  /* Initialize a memory manager instance for this object */
-  jinit_memory_mgr((j_common_ptr) cinfo);
-
-  /* Zero out pointers to permanent structures. */
-  cinfo->progress = NULL;
-  cinfo->src = NULL;
-
-  for (i = 0; i < NUM_QUANT_TBLS; i++)
-    cinfo->quant_tbl_ptrs[i] = NULL;
-
-  for (i = 0; i < NUM_HUFF_TBLS; i++) {
-    cinfo->dc_huff_tbl_ptrs[i] = NULL;
-    cinfo->ac_huff_tbl_ptrs[i] = NULL;
-  }
-
-  /* Initialize marker processor so application can override methods
-   * for COM, APPn markers before calling jpeg_read_header.
-   */
-  cinfo->marker_list = NULL;
-  jinit_marker_reader(cinfo);
-
-  /* And initialize the overall input controller. */
-  jinit_input_controller(cinfo);
-
-  /* OK, I'm ready */
-  cinfo->global_state = DSTATE_START;
-}
-
-
-/*
- * Destruction of a JPEG decompression object
- */
-
-GLOBAL(void)
-jpeg_destroy_decompress (j_decompress_ptr cinfo)
-{
-  jpeg_destroy((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Abort processing of a JPEG decompression operation,
- * but don't destroy the object itself.
- */
-
-GLOBAL(void)
-jpeg_abort_decompress (j_decompress_ptr cinfo)
-{
-  jpeg_abort((j_common_ptr) cinfo); /* use common routine */
-}
-
-
-/*
- * Set default decompression parameters.
- */
-
-LOCAL(void)
-default_decompress_parms (j_decompress_ptr cinfo)
-{
-  int cid0, cid1, cid2;
-
-  /* Guess the input colorspace, and set output colorspace accordingly. */
-  /* Note application may override our guesses. */
-  switch (cinfo->num_components) {
-  case 1:
-    cinfo->jpeg_color_space = JCS_GRAYSCALE;
-    cinfo->out_color_space = JCS_GRAYSCALE;
-    break;
-    
-  case 3:
-    cid0 = cinfo->comp_info[0].component_id;
-    cid1 = cinfo->comp_info[1].component_id;
-    cid2 = cinfo->comp_info[2].component_id;
-
-    /* First try to guess from the component IDs */
-    if      (cid0 == 0x01 && cid1 == 0x02 && cid2 == 0x03)
-      cinfo->jpeg_color_space = JCS_YCbCr;
-    else if (cid0 == 0x01 && cid1 == 0x22 && cid2 == 0x23)
-      cinfo->jpeg_color_space = JCS_BG_YCC;
-    else if (cid0 == 0x52 && cid1 == 0x47 && cid2 == 0x42)
-      cinfo->jpeg_color_space = JCS_RGB;	/* ASCII 'R', 'G', 'B' */
-    else if (cid0 == 0x72 && cid1 == 0x67 && cid2 == 0x62)
-      cinfo->jpeg_color_space = JCS_BG_RGB;	/* ASCII 'r', 'g', 'b' */
-    else if (cinfo->saw_JFIF_marker)
-      cinfo->jpeg_color_space = JCS_YCbCr;	/* assume it's YCbCr */
-    else if (cinfo->saw_Adobe_marker) {
-      switch (cinfo->Adobe_transform) {
-      case 0:
-	cinfo->jpeg_color_space = JCS_RGB;
-	break;
-      case 1:
-	cinfo->jpeg_color_space = JCS_YCbCr;
-	break;
-      default:
-	WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
-	cinfo->jpeg_color_space = JCS_YCbCr;	/* assume it's YCbCr */
-	break;
-      }
-    } else {
-      TRACEMS3(cinfo, 1, JTRC_UNKNOWN_IDS, cid0, cid1, cid2);
-      cinfo->jpeg_color_space = JCS_YCbCr;	/* assume it's YCbCr */
-    }
-    /* Always guess RGB is proper output colorspace. */
-    cinfo->out_color_space = JCS_RGB;
-    break;
-    
-  case 4:
-    if (cinfo->saw_Adobe_marker) {
-      switch (cinfo->Adobe_transform) {
-      case 0:
-	cinfo->jpeg_color_space = JCS_CMYK;
-	break;
-      case 2:
-	cinfo->jpeg_color_space = JCS_YCCK;
-	break;
-      default:
-	WARNMS1(cinfo, JWRN_ADOBE_XFORM, cinfo->Adobe_transform);
-	cinfo->jpeg_color_space = JCS_YCCK;	/* assume it's YCCK */
-	break;
-      }
-    } else {
-      /* No special markers, assume straight CMYK. */
-      cinfo->jpeg_color_space = JCS_CMYK;
-    }
-    cinfo->out_color_space = JCS_CMYK;
-    break;
-    
-  default:
-    cinfo->jpeg_color_space = JCS_UNKNOWN;
-    cinfo->out_color_space = JCS_UNKNOWN;
-    break;
-  }
-
-  /* Set defaults for other decompression parameters. */
-  cinfo->scale_num = cinfo->block_size;		/* 1:1 scaling */
-  cinfo->scale_denom = cinfo->block_size;
-  cinfo->output_gamma = 1.0;
-  cinfo->buffered_image = FALSE;
-  cinfo->raw_data_out = FALSE;
-  cinfo->dct_method = JDCT_DEFAULT;
-  cinfo->do_fancy_upsampling = TRUE;
-  cinfo->do_block_smoothing = TRUE;
-  cinfo->quantize_colors = FALSE;
-  /* We set these in case application only sets quantize_colors. */
-  cinfo->dither_mode = JDITHER_FS;
-#ifdef QUANT_2PASS_SUPPORTED
-  cinfo->two_pass_quantize = TRUE;
-#else
-  cinfo->two_pass_quantize = FALSE;
-#endif
-  cinfo->desired_number_of_colors = 256;
-  cinfo->colormap = NULL;
-  /* Initialize for no mode change in buffered-image mode. */
-  cinfo->enable_1pass_quant = FALSE;
-  cinfo->enable_external_quant = FALSE;
-  cinfo->enable_2pass_quant = FALSE;
-}
-
-
-/*
- * Decompression startup: read start of JPEG datastream to see what's there.
- * Need only initialize JPEG object and supply a data source before calling.
- *
- * This routine will read as far as the first SOS marker (ie, actual start of
- * compressed data), and will save all tables and parameters in the JPEG
- * object.  It will also initialize the decompression parameters to default
- * values, and finally return JPEG_HEADER_OK.  On return, the application may
- * adjust the decompression parameters and then call jpeg_start_decompress.
- * (Or, if the application only wanted to determine the image parameters,
- * the data need not be decompressed.  In that case, call jpeg_abort or
- * jpeg_destroy to release any temporary space.)
- * If an abbreviated (tables only) datastream is presented, the routine will
- * return JPEG_HEADER_TABLES_ONLY upon reaching EOI.  The application may then
- * re-use the JPEG object to read the abbreviated image datastream(s).
- * It is unnecessary (but OK) to call jpeg_abort in this case.
- * The JPEG_SUSPENDED return code only occurs if the data source module
- * requests suspension of the decompressor.  In this case the application
- * should load more source data and then re-call jpeg_read_header to resume
- * processing.
- * If a non-suspending data source is used and require_image is TRUE, then the
- * return code need not be inspected since only JPEG_HEADER_OK is possible.
- *
- * This routine is now just a front end to jpeg_consume_input, with some
- * extra error checking.
- */
-
-GLOBAL(int)
-jpeg_read_header (j_decompress_ptr cinfo, boolean require_image)
-{
-  int retcode;
-
-  if (cinfo->global_state != DSTATE_START &&
-      cinfo->global_state != DSTATE_INHEADER)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  retcode = jpeg_consume_input(cinfo);
-
-  switch (retcode) {
-  case JPEG_REACHED_SOS:
-    retcode = JPEG_HEADER_OK;
-    break;
-  case JPEG_REACHED_EOI:
-    if (require_image)		/* Complain if application wanted an image */
-      ERREXIT(cinfo, JERR_NO_IMAGE);
-    /* Reset to start state; it would be safer to require the application to
-     * call jpeg_abort, but we can't change it now for compatibility reasons.
-     * A side effect is to free any temporary memory (there shouldn't be any).
-     */
-    jpeg_abort((j_common_ptr) cinfo); /* sets state = DSTATE_START */
-    retcode = JPEG_HEADER_TABLES_ONLY;
-    break;
-  case JPEG_SUSPENDED:
-    /* no work */
-    break;
-  }
-
-  return retcode;
-}
-
-
-/*
- * Consume data in advance of what the decompressor requires.
- * This can be called at any time once the decompressor object has
- * been created and a data source has been set up.
- *
- * This routine is essentially a state machine that handles a couple
- * of critical state-transition actions, namely initial setup and
- * transition from header scanning to ready-for-start_decompress.
- * All the actual input is done via the input controller's consume_input
- * method.
- */
-
-GLOBAL(int)
-jpeg_consume_input (j_decompress_ptr cinfo)
-{
-  int retcode = JPEG_SUSPENDED;
-
-  /* NB: every possible DSTATE value should be listed in this switch */
-  switch (cinfo->global_state) {
-  case DSTATE_START:
-    /* Start-of-datastream actions: reset appropriate modules */
-    (*cinfo->inputctl->reset_input_controller) (cinfo);
-    /* Initialize application's data source module */
-    (*cinfo->src->init_source) (cinfo);
-    cinfo->global_state = DSTATE_INHEADER;
-    /*FALLTHROUGH*/
-  case DSTATE_INHEADER:
-    retcode = (*cinfo->inputctl->consume_input) (cinfo);
-    if (retcode == JPEG_REACHED_SOS) { /* Found SOS, prepare to decompress */
-      /* Set up default parameters based on header data */
-      default_decompress_parms(cinfo);
-      /* Set global state: ready for start_decompress */
-      cinfo->global_state = DSTATE_READY;
-    }
-    break;
-  case DSTATE_READY:
-    /* Can't advance past first SOS until start_decompress is called */
-    retcode = JPEG_REACHED_SOS;
-    break;
-  case DSTATE_PRELOAD:
-  case DSTATE_PRESCAN:
-  case DSTATE_SCANNING:
-  case DSTATE_RAW_OK:
-  case DSTATE_BUFIMAGE:
-  case DSTATE_BUFPOST:
-  case DSTATE_STOPPING:
-    retcode = (*cinfo->inputctl->consume_input) (cinfo);
-    break;
-  default:
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  return retcode;
-}
-
-
-/*
- * Have we finished reading the input file?
- */
-
-GLOBAL(boolean)
-jpeg_input_complete (j_decompress_ptr cinfo)
-{
-  /* Check for valid jpeg object */
-  if (cinfo->global_state < DSTATE_START ||
-      cinfo->global_state > DSTATE_STOPPING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return cinfo->inputctl->eoi_reached;
-}
-
-
-/*
- * Is there more than one scan?
- */
-
-GLOBAL(boolean)
-jpeg_has_multiple_scans (j_decompress_ptr cinfo)
-{
-  /* Only valid after jpeg_read_header completes */
-  if (cinfo->global_state < DSTATE_READY ||
-      cinfo->global_state > DSTATE_STOPPING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return cinfo->inputctl->has_multiple_scans;
-}
-
-
-/*
- * Finish JPEG decompression.
- *
- * This will normally just verify the file trailer and release temp storage.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_finish_decompress (j_decompress_ptr cinfo)
-{
-  if ((cinfo->global_state == DSTATE_SCANNING ||
-       cinfo->global_state == DSTATE_RAW_OK) && ! cinfo->buffered_image) {
-    /* Terminate final pass of non-buffered mode */
-    if (cinfo->output_scanline < cinfo->output_height)
-      ERREXIT(cinfo, JERR_TOO_LITTLE_DATA);
-    (*cinfo->master->finish_output_pass) (cinfo);
-    cinfo->global_state = DSTATE_STOPPING;
-  } else if (cinfo->global_state == DSTATE_BUFIMAGE) {
-    /* Finishing after a buffered-image operation */
-    cinfo->global_state = DSTATE_STOPPING;
-  } else if (cinfo->global_state != DSTATE_STOPPING) {
-    /* STOPPING = repeat call after a suspension, anything else is error */
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  /* Read until EOI */
-  while (! cinfo->inputctl->eoi_reached) {
-    if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED)
-      return FALSE;		/* Suspend, come back later */
-  }
-  /* Do final cleanup */
-  (*cinfo->src->term_source) (cinfo);
-  /* We can use jpeg_abort to release memory and reset global_state */
-  jpeg_abort((j_common_ptr) cinfo);
-  return TRUE;
-}
--- a/DoConfig/fltk/jpeg/jdapistd.c
+++ /dev/null
@@ -1,276 +1,0 @@
-/*
- * jdapistd.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains application interface code for the decompression half
- * of the JPEG library.  These are the "standard" API routines that are
- * used in the normal full-decompression case.  They are not used by a
- * transcoding-only application.  Note that if an application links in
- * jpeg_start_decompress, it will end up linking in the entire decompressor.
- * We thus must separate this file from jdapimin.c to avoid linking the
- * whole decompression library into a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(boolean) output_pass_setup JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Decompression initialization.
- * jpeg_read_header must be completed before calling this.
- *
- * If a multipass operating mode was selected, this will do all but the
- * last pass, and thus may take a great deal of time.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_start_decompress (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state == DSTATE_READY) {
-    /* First call: initialize master control, select active modules */
-    jinit_master_decompress(cinfo);
-    if (cinfo->buffered_image) {
-      /* No more work here; expecting jpeg_start_output next */
-      cinfo->global_state = DSTATE_BUFIMAGE;
-      return TRUE;
-    }
-    cinfo->global_state = DSTATE_PRELOAD;
-  }
-  if (cinfo->global_state == DSTATE_PRELOAD) {
-    /* If file has multiple scans, absorb them all into the coef buffer */
-    if (cinfo->inputctl->has_multiple_scans) {
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-      for (;;) {
-	int retcode;
-	/* Call progress monitor hook if present */
-	if (cinfo->progress != NULL)
-	  (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-	/* Absorb some more input */
-	retcode = (*cinfo->inputctl->consume_input) (cinfo);
-	if (retcode == JPEG_SUSPENDED)
-	  return FALSE;
-	if (retcode == JPEG_REACHED_EOI)
-	  break;
-	/* Advance progress counter if appropriate */
-	if (cinfo->progress != NULL &&
-	    (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
-	  if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
-	    /* jdmaster underestimated number of scans; ratchet up one scan */
-	    cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
-	  }
-	}
-      }
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-    }
-    cinfo->output_scan_number = cinfo->input_scan_number;
-  } else if (cinfo->global_state != DSTATE_PRESCAN)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Perform any dummy output passes, and set up for the final pass */
-  return output_pass_setup(cinfo);
-}
-
-
-/*
- * Set up for an output pass, and perform any dummy pass(es) needed.
- * Common subroutine for jpeg_start_decompress and jpeg_start_output.
- * Entry: global_state = DSTATE_PRESCAN only if previously suspended.
- * Exit: If done, returns TRUE and sets global_state for proper output mode.
- *       If suspended, returns FALSE and sets global_state = DSTATE_PRESCAN.
- */
-
-LOCAL(boolean)
-output_pass_setup (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state != DSTATE_PRESCAN) {
-    /* First call: do pass setup */
-    (*cinfo->master->prepare_for_output_pass) (cinfo);
-    cinfo->output_scanline = 0;
-    cinfo->global_state = DSTATE_PRESCAN;
-  }
-  /* Loop over any required dummy passes */
-  while (cinfo->master->is_dummy_pass) {
-#ifdef QUANT_2PASS_SUPPORTED
-    /* Crank through the dummy pass */
-    while (cinfo->output_scanline < cinfo->output_height) {
-      JDIMENSION last_scanline;
-      /* Call progress monitor hook if present */
-      if (cinfo->progress != NULL) {
-	cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-	cinfo->progress->pass_limit = (long) cinfo->output_height;
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      }
-      /* Process some data */
-      last_scanline = cinfo->output_scanline;
-      (*cinfo->main->process_data) (cinfo, (JSAMPARRAY) NULL,
-				    &cinfo->output_scanline, (JDIMENSION) 0);
-      if (cinfo->output_scanline == last_scanline)
-	return FALSE;		/* No progress made, must suspend */
-    }
-    /* Finish up dummy pass, and set up for another one */
-    (*cinfo->master->finish_output_pass) (cinfo);
-    (*cinfo->master->prepare_for_output_pass) (cinfo);
-    cinfo->output_scanline = 0;
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* QUANT_2PASS_SUPPORTED */
-  }
-  /* Ready for application to drive output pass through
-   * jpeg_read_scanlines or jpeg_read_raw_data.
-   */
-  cinfo->global_state = cinfo->raw_data_out ? DSTATE_RAW_OK : DSTATE_SCANNING;
-  return TRUE;
-}
-
-
-/*
- * Read some scanlines of data from the JPEG decompressor.
- *
- * The return value will be the number of lines actually read.
- * This may be less than the number requested in several cases,
- * including bottom of image, data source suspension, and operating
- * modes that emit multiple scanlines at a time.
- *
- * Note: we warn about excess calls to jpeg_read_scanlines() since
- * this likely signals an application programmer error.  However,
- * an oversize buffer (max_lines > scanlines remaining) is not an error.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_read_scanlines (j_decompress_ptr cinfo, JSAMPARRAY scanlines,
-		     JDIMENSION max_lines)
-{
-  JDIMENSION row_ctr;
-
-  if (cinfo->global_state != DSTATE_SCANNING)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->output_scanline >= cinfo->output_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->output_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Process some data */
-  row_ctr = 0;
-  (*cinfo->main->process_data) (cinfo, scanlines, &row_ctr, max_lines);
-  cinfo->output_scanline += row_ctr;
-  return row_ctr;
-}
-
-
-/*
- * Alternate entry point to read raw data.
- * Processes exactly one iMCU row per call, unless suspended.
- */
-
-GLOBAL(JDIMENSION)
-jpeg_read_raw_data (j_decompress_ptr cinfo, JSAMPIMAGE data,
-		    JDIMENSION max_lines)
-{
-  JDIMENSION lines_per_iMCU_row;
-
-  if (cinfo->global_state != DSTATE_RAW_OK)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  if (cinfo->output_scanline >= cinfo->output_height) {
-    WARNMS(cinfo, JWRN_TOO_MUCH_DATA);
-    return 0;
-  }
-
-  /* Call progress monitor hook if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->pass_counter = (long) cinfo->output_scanline;
-    cinfo->progress->pass_limit = (long) cinfo->output_height;
-    (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-  }
-
-  /* Verify that at least one iMCU row can be returned. */
-  lines_per_iMCU_row = cinfo->max_v_samp_factor * cinfo->min_DCT_v_scaled_size;
-  if (max_lines < lines_per_iMCU_row)
-    ERREXIT(cinfo, JERR_BUFFER_SIZE);
-
-  /* Decompress directly into user's buffer. */
-  if (! (*cinfo->coef->decompress_data) (cinfo, data))
-    return 0;			/* suspension forced, can do nothing more */
-
-  /* OK, we processed one iMCU row. */
-  cinfo->output_scanline += lines_per_iMCU_row;
-  return lines_per_iMCU_row;
-}
-
-
-/* Additional entry points for buffered-image mode. */
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Initialize for an output pass in buffered-image mode.
- */
-
-GLOBAL(boolean)
-jpeg_start_output (j_decompress_ptr cinfo, int scan_number)
-{
-  if (cinfo->global_state != DSTATE_BUFIMAGE &&
-      cinfo->global_state != DSTATE_PRESCAN)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  /* Limit scan number to valid range */
-  if (scan_number <= 0)
-    scan_number = 1;
-  if (cinfo->inputctl->eoi_reached &&
-      scan_number > cinfo->input_scan_number)
-    scan_number = cinfo->input_scan_number;
-  cinfo->output_scan_number = scan_number;
-  /* Perform any dummy output passes, and set up for the real pass */
-  return output_pass_setup(cinfo);
-}
-
-
-/*
- * Finish up after an output pass in buffered-image mode.
- *
- * Returns FALSE if suspended.  The return value need be inspected only if
- * a suspending data source is used.
- */
-
-GLOBAL(boolean)
-jpeg_finish_output (j_decompress_ptr cinfo)
-{
-  if ((cinfo->global_state == DSTATE_SCANNING ||
-       cinfo->global_state == DSTATE_RAW_OK) && cinfo->buffered_image) {
-    /* Terminate this pass. */
-    /* We do not require the whole pass to have been completed. */
-    (*cinfo->master->finish_output_pass) (cinfo);
-    cinfo->global_state = DSTATE_BUFPOST;
-  } else if (cinfo->global_state != DSTATE_BUFPOST) {
-    /* BUFPOST = repeat call after a suspension, anything else is error */
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  }
-  /* Read markers looking for SOS or EOI */
-  while (cinfo->input_scan_number <= cinfo->output_scan_number &&
-	 ! cinfo->inputctl->eoi_reached) {
-    if ((*cinfo->inputctl->consume_input) (cinfo) == JPEG_SUSPENDED)
-      return FALSE;		/* Suspend, come back later */
-  }
-  cinfo->global_state = DSTATE_BUFIMAGE;
-  return TRUE;
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jdarith.c
+++ /dev/null
@@ -1,796 +1,0 @@
-/*
- * jdarith.c
- *
- * Developed 1997-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains portable arithmetic entropy decoding routines for JPEG
- * (implementing the ISO/IEC IS 10918-1 and CCITT Recommendation ITU-T T.81).
- *
- * Both sequential and progressive modes are supported in this single module.
- *
- * Suspension is not currently supported in this module.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Expanded entropy decoder object for arithmetic decoding. */
-
-typedef struct {
-  struct jpeg_entropy_decoder pub; /* public fields */
-
-  INT32 c;       /* C register, base of coding interval + input bit buffer */
-  INT32 a;               /* A register, normalized size of coding interval */
-  int ct;     /* bit shift counter, # of bits left in bit buffer part of C */
-                                                         /* init: ct = -16 */
-                                                         /* run: ct = 0..7 */
-                                                         /* error: ct = -1 */
-  int last_dc_val[MAX_COMPS_IN_SCAN]; /* last DC coef for each component */
-  int dc_context[MAX_COMPS_IN_SCAN]; /* context index for DC conditioning */
-
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-
-  /* Pointers to statistics areas (these workspaces have image lifespan) */
-  unsigned char * dc_stats[NUM_ARITH_TBLS];
-  unsigned char * ac_stats[NUM_ARITH_TBLS];
-
-  /* Statistics bin for coding with fixed probability 0.5 */
-  unsigned char fixed_bin[4];
-} arith_entropy_decoder;
-
-typedef arith_entropy_decoder * arith_entropy_ptr;
-
-/* The following two definitions specify the allocation chunk size
- * for the statistics area.
- * According to sections F.1.4.4.1.3 and F.1.4.4.2, we need at least
- * 49 statistics bins for DC, and 245 statistics bins for AC coding.
- *
- * We use a compact representation with 1 byte per statistics bin,
- * thus the numbers directly represent byte sizes.
- * This 1 byte per statistics bin contains the meaning of the MPS
- * (more probable symbol) in the highest bit (mask 0x80), and the
- * index into the probability estimation state machine table
- * in the lower bits (mask 0x7F).
- */
-
-#define DC_STAT_BINS 64
-#define AC_STAT_BINS 256
-
-
-LOCAL(int)
-get_byte (j_decompress_ptr cinfo)
-/* Read next input byte; we do not support suspension in this module. */
-{
-  struct jpeg_source_mgr * src = cinfo->src;
-
-  if (src->bytes_in_buffer == 0)
-    if (! (*src->fill_input_buffer) (cinfo))
-      ERREXIT(cinfo, JERR_CANT_SUSPEND);
-  src->bytes_in_buffer--;
-  return GETJOCTET(*src->next_input_byte++);
-}
-
-
-/*
- * The core arithmetic decoding routine (common in JPEG and JBIG).
- * This needs to go as fast as possible.
- * Machine-dependent optimization facilities
- * are not utilized in this portable implementation.
- * However, this code should be fairly efficient and
- * may be a good base for further optimizations anyway.
- *
- * Return value is 0 or 1 (binary decision).
- *
- * Note: I've changed the handling of the code base & bit
- * buffer register C compared to other implementations
- * based on the standards layout & procedures.
- * While it also contains both the actual base of the
- * coding interval (16 bits) and the next-bits buffer,
- * the cut-point between these two parts is floating
- * (instead of fixed) with the bit shift counter CT.
- * Thus, we also need only one (variable instead of
- * fixed size) shift for the LPS/MPS decision, and
- * we can get away with any renormalization update
- * of C (except for new data insertion, of course).
- *
- * I've also introduced a new scheme for accessing
- * the probability estimation state machine table,
- * derived from Markus Kuhn's JBIG implementation.
- */
-
-LOCAL(int)
-arith_decode (j_decompress_ptr cinfo, unsigned char *st)
-{
-  register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
-  register unsigned char nl, nm;
-  register INT32 qe, temp;
-  register int sv, data;
-
-  /* Renormalization & data input per section D.2.6 */
-  while (e->a < 0x8000L) {
-    if (--e->ct < 0) {
-      /* Need to fetch next data byte */
-      if (cinfo->unread_marker)
-	data = 0;		/* stuff zero data */
-      else {
-	data = get_byte(cinfo);	/* read next input byte */
-	if (data == 0xFF) {	/* zero stuff or marker code */
-	  do data = get_byte(cinfo);
-	  while (data == 0xFF);	/* swallow extra 0xFF bytes */
-	  if (data == 0)
-	    data = 0xFF;	/* discard stuffed zero byte */
-	  else {
-	    /* Note: Different from the Huffman decoder, hitting
-	     * a marker while processing the compressed data
-	     * segment is legal in arithmetic coding.
-	     * The convention is to supply zero data
-	     * then until decoding is complete.
-	     */
-	    cinfo->unread_marker = data;
-	    data = 0;
-	  }
-	}
-      }
-      e->c = (e->c << 8) | data; /* insert data into C register */
-      if ((e->ct += 8) < 0)	 /* update bit shift counter */
-	/* Need more initial bytes */
-	if (++e->ct == 0)
-	  /* Got 2 initial bytes -> re-init A and exit loop */
-	  e->a = 0x8000L; /* => e->a = 0x10000L after loop exit */
-    }
-    e->a <<= 1;
-  }
-
-  /* Fetch values from our compact representation of Table D.3(D.2):
-   * Qe values and probability estimation state machine
-   */
-  sv = *st;
-  qe = jpeg_aritab[sv & 0x7F];	/* => Qe_Value */
-  nl = qe & 0xFF; qe >>= 8;	/* Next_Index_LPS + Switch_MPS */
-  nm = qe & 0xFF; qe >>= 8;	/* Next_Index_MPS */
-
-  /* Decode & estimation procedures per sections D.2.4 & D.2.5 */
-  temp = e->a - qe;
-  e->a = temp;
-  temp <<= e->ct;
-  if (e->c >= temp) {
-    e->c -= temp;
-    /* Conditional LPS (less probable symbol) exchange */
-    if (e->a < qe) {
-      e->a = qe;
-      *st = (sv & 0x80) ^ nm;	/* Estimate_after_MPS */
-    } else {
-      e->a = qe;
-      *st = (sv & 0x80) ^ nl;	/* Estimate_after_LPS */
-      sv ^= 0x80;		/* Exchange LPS/MPS */
-    }
-  } else if (e->a < 0x8000L) {
-    /* Conditional MPS (more probable symbol) exchange */
-    if (e->a < qe) {
-      *st = (sv & 0x80) ^ nl;	/* Estimate_after_LPS */
-      sv ^= 0x80;		/* Exchange LPS/MPS */
-    } else {
-      *st = (sv & 0x80) ^ nm;	/* Estimate_after_MPS */
-    }
-  }
-
-  return sv >> 7;
-}
-
-
-/*
- * Check for a restart marker & resynchronize decoder.
- */
-
-LOCAL(void)
-process_restart (j_decompress_ptr cinfo)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  int ci;
-  jpeg_component_info * compptr;
-
-  /* Advance past the RSTn marker */
-  if (! (*cinfo->marker->read_restart_marker) (cinfo))
-    ERREXIT(cinfo, JERR_CANT_SUSPEND);
-
-  /* Re-initialize statistics areas */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
-      MEMZERO(entropy->dc_stats[compptr->dc_tbl_no], DC_STAT_BINS);
-      /* Reset DC predictions to 0 */
-      entropy->last_dc_val[ci] = 0;
-      entropy->dc_context[ci] = 0;
-    }
-    if ((! cinfo->progressive_mode && cinfo->lim_Se) ||
-	(cinfo->progressive_mode && cinfo->Ss)) {
-      MEMZERO(entropy->ac_stats[compptr->ac_tbl_no], AC_STAT_BINS);
-    }
-  }
-
-  /* Reset arithmetic decoding variables */
-  entropy->c = 0;
-  entropy->a = 0;
-  entropy->ct = -16;	/* force reading 2 initial bytes to fill C */
-
-  /* Reset restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-}
-
-
-/*
- * Arithmetic MCU decoding.
- * Each of these routines decodes and returns one MCU's worth of
- * arithmetic-compressed coefficients.
- * The coefficients are reordered from zigzag order into natural array order,
- * but are not dequantized.
- *
- * The i'th block of the MCU is stored into the block pointed to by
- * MCU_data[i].  WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER.
- */
-
-/*
- * MCU decoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  JBLOCKROW block;
-  unsigned char *st;
-  int blkn, ci, tbl, sign;
-  int v, m;
-
-  /* Process restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      process_restart(cinfo);
-    entropy->restarts_to_go--;
-  }
-
-  if (entropy->ct == -1) return TRUE;	/* if error do nothing */
-
-  /* Outer loop handles each block in the MCU */
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-    ci = cinfo->MCU_membership[blkn];
-    tbl = cinfo->cur_comp_info[ci]->dc_tbl_no;
-
-    /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */
-
-    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
-    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
-
-    /* Figure F.19: Decode_DC_DIFF */
-    if (arith_decode(cinfo, st) == 0)
-      entropy->dc_context[ci] = 0;
-    else {
-      /* Figure F.21: Decoding nonzero value v */
-      /* Figure F.22: Decoding the sign of v */
-      sign = arith_decode(cinfo, st + 1);
-      st += 2; st += sign;
-      /* Figure F.23: Decoding the magnitude category of v */
-      if ((m = arith_decode(cinfo, st)) != 0) {
-	st = entropy->dc_stats[tbl] + 20;	/* Table F.4: X1 = 20 */
-	while (arith_decode(cinfo, st)) {
-	  if ((m <<= 1) == 0x8000) {
-	    WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	    entropy->ct = -1;			/* magnitude overflow */
-	    return TRUE;
-	  }
-	  st += 1;
-	}
-      }
-      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
-      if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1))
-	entropy->dc_context[ci] = 0;		   /* zero diff category */
-      else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1))
-	entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */
-      else
-	entropy->dc_context[ci] = 4 + (sign * 4);  /* small diff category */
-      v = m;
-      /* Figure F.24: Decoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	if (arith_decode(cinfo, st)) v |= m;
-      v += 1; if (sign) v = -v;
-      entropy->last_dc_val[ci] += v;
-    }
-
-    /* Scale and output the DC coefficient (assumes jpeg_natural_order[0]=0) */
-    (*block)[0] = (JCOEF) (entropy->last_dc_val[ci] << cinfo->Al);
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  JBLOCKROW block;
-  unsigned char *st;
-  int tbl, sign, k;
-  int v, m;
-  const int * natural_order;
-
-  /* Process restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      process_restart(cinfo);
-    entropy->restarts_to_go--;
-  }
-
-  if (entropy->ct == -1) return TRUE;	/* if error do nothing */
-
-  natural_order = cinfo->natural_order;
-
-  /* There is always only one block per MCU */
-  block = MCU_data[0];
-  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
-
-  /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */
-
-  /* Figure F.20: Decode_AC_coefficients */
-  k = cinfo->Ss - 1;
-  do {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    if (arith_decode(cinfo, st)) break;		/* EOB flag */
-    for (;;) {
-      k++;
-      if (arith_decode(cinfo, st + 1)) break;
-      st += 3;
-      if (k >= cinfo->Se) {
-	WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	entropy->ct = -1;			/* spectral overflow */
-	return TRUE;
-      }
-    }
-    /* Figure F.21: Decoding nonzero value v */
-    /* Figure F.22: Decoding the sign of v */
-    sign = arith_decode(cinfo, entropy->fixed_bin);
-    st += 2;
-    /* Figure F.23: Decoding the magnitude category of v */
-    if ((m = arith_decode(cinfo, st)) != 0) {
-      if (arith_decode(cinfo, st)) {
-	m <<= 1;
-	st = entropy->ac_stats[tbl] +
-	     (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
-	while (arith_decode(cinfo, st)) {
-	  if ((m <<= 1) == 0x8000) {
-	    WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	    entropy->ct = -1;			/* magnitude overflow */
-	    return TRUE;
-	  }
-	  st += 1;
-	}
-      }
-    }
-    v = m;
-    /* Figure F.24: Decoding the magnitude bit pattern of v */
-    st += 14;
-    while (m >>= 1)
-      if (arith_decode(cinfo, st)) v |= m;
-    v += 1; if (sign) v = -v;
-    /* Scale and output coefficient in natural (dezigzagged) order */
-    (*block)[natural_order[k]] = (JCOEF) (v << cinfo->Al);
-  } while (k < cinfo->Se);
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component,
- * although the spec is not very clear on the point.
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  unsigned char *st;
-  int p1, blkn;
-
-  /* Process restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      process_restart(cinfo);
-    entropy->restarts_to_go--;
-  }
-
-  st = entropy->fixed_bin;	/* use fixed probability estimation */
-  p1 = 1 << cinfo->Al;		/* 1 in the bit position being coded */
-
-  /* Outer loop handles each block in the MCU */
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    /* Encoded data is simply the next bit of the two's-complement DC value */
-    if (arith_decode(cinfo, st))
-      MCU_data[blkn][0][0] |= p1;
-  }
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  JBLOCKROW block;
-  JCOEFPTR thiscoef;
-  unsigned char *st;
-  int tbl, k, kex;
-  int p1, m1;
-  const int * natural_order;
-
-  /* Process restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      process_restart(cinfo);
-    entropy->restarts_to_go--;
-  }
-
-  if (entropy->ct == -1) return TRUE;	/* if error do nothing */
-
-  natural_order = cinfo->natural_order;
-
-  /* There is always only one block per MCU */
-  block = MCU_data[0];
-  tbl = cinfo->cur_comp_info[0]->ac_tbl_no;
-
-  p1 = 1 << cinfo->Al;		/* 1 in the bit position being coded */
-  m1 = (-1) << cinfo->Al;	/* -1 in the bit position being coded */
-
-  /* Establish EOBx (previous stage end-of-block) index */
-  kex = cinfo->Se;
-  do {
-    if ((*block)[natural_order[kex]]) break;
-  } while (--kex);
-
-  k = cinfo->Ss - 1;
-  do {
-    st = entropy->ac_stats[tbl] + 3 * k;
-    if (k >= kex)
-      if (arith_decode(cinfo, st)) break;	/* EOB flag */
-    for (;;) {
-      thiscoef = *block + natural_order[++k];
-      if (*thiscoef) {				/* previously nonzero coef */
-	if (arith_decode(cinfo, st + 2)) {
-	  if (*thiscoef < 0)
-	    *thiscoef += m1;
-	  else
-	    *thiscoef += p1;
-	}
-	break;
-      }
-      if (arith_decode(cinfo, st + 1)) {	/* newly nonzero coef */
-	if (arith_decode(cinfo, entropy->fixed_bin))
-	  *thiscoef = m1;
-	else
-	  *thiscoef = p1;
-	break;
-      }
-      st += 3;
-      if (k >= cinfo->Se) {
-	WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	entropy->ct = -1;			/* spectral overflow */
-	return TRUE;
-      }
-    }
-  } while (k < cinfo->Se);
-
-  return TRUE;
-}
-
-
-/*
- * Decode one MCU's worth of arithmetic-compressed coefficients.
- */
-
-METHODDEF(boolean)
-decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  jpeg_component_info * compptr;
-  JBLOCKROW block;
-  unsigned char *st;
-  int blkn, ci, tbl, sign, k;
-  int v, m;
-  const int * natural_order;
-
-  /* Process restart marker if needed */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      process_restart(cinfo);
-    entropy->restarts_to_go--;
-  }
-
-  if (entropy->ct == -1) return TRUE;	/* if error do nothing */
-
-  natural_order = cinfo->natural_order;
-
-  /* Outer loop handles each block in the MCU */
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    block = MCU_data[blkn];
-    ci = cinfo->MCU_membership[blkn];
-    compptr = cinfo->cur_comp_info[ci];
-
-    /* Sections F.2.4.1 & F.1.4.4.1: Decoding of DC coefficients */
-
-    tbl = compptr->dc_tbl_no;
-
-    /* Table F.4: Point to statistics bin S0 for DC coefficient coding */
-    st = entropy->dc_stats[tbl] + entropy->dc_context[ci];
-
-    /* Figure F.19: Decode_DC_DIFF */
-    if (arith_decode(cinfo, st) == 0)
-      entropy->dc_context[ci] = 0;
-    else {
-      /* Figure F.21: Decoding nonzero value v */
-      /* Figure F.22: Decoding the sign of v */
-      sign = arith_decode(cinfo, st + 1);
-      st += 2; st += sign;
-      /* Figure F.23: Decoding the magnitude category of v */
-      if ((m = arith_decode(cinfo, st)) != 0) {
-	st = entropy->dc_stats[tbl] + 20;	/* Table F.4: X1 = 20 */
-	while (arith_decode(cinfo, st)) {
-	  if ((m <<= 1) == 0x8000) {
-	    WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	    entropy->ct = -1;			/* magnitude overflow */
-	    return TRUE;
-	  }
-	  st += 1;
-	}
-      }
-      /* Section F.1.4.4.1.2: Establish dc_context conditioning category */
-      if (m < (int) ((1L << cinfo->arith_dc_L[tbl]) >> 1))
-	entropy->dc_context[ci] = 0;		   /* zero diff category */
-      else if (m > (int) ((1L << cinfo->arith_dc_U[tbl]) >> 1))
-	entropy->dc_context[ci] = 12 + (sign * 4); /* large diff category */
-      else
-	entropy->dc_context[ci] = 4 + (sign * 4);  /* small diff category */
-      v = m;
-      /* Figure F.24: Decoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	if (arith_decode(cinfo, st)) v |= m;
-      v += 1; if (sign) v = -v;
-      entropy->last_dc_val[ci] += v;
-    }
-
-    (*block)[0] = (JCOEF) entropy->last_dc_val[ci];
-
-    /* Sections F.2.4.2 & F.1.4.4.2: Decoding of AC coefficients */
-
-    if (cinfo->lim_Se == 0) continue;
-    tbl = compptr->ac_tbl_no;
-    k = 0;
-
-    /* Figure F.20: Decode_AC_coefficients */
-    do {
-      st = entropy->ac_stats[tbl] + 3 * k;
-      if (arith_decode(cinfo, st)) break;	/* EOB flag */
-      for (;;) {
-	k++;
-	if (arith_decode(cinfo, st + 1)) break;
-	st += 3;
-	if (k >= cinfo->lim_Se) {
-	  WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	  entropy->ct = -1;			/* spectral overflow */
-	  return TRUE;
-	}
-      }
-      /* Figure F.21: Decoding nonzero value v */
-      /* Figure F.22: Decoding the sign of v */
-      sign = arith_decode(cinfo, entropy->fixed_bin);
-      st += 2;
-      /* Figure F.23: Decoding the magnitude category of v */
-      if ((m = arith_decode(cinfo, st)) != 0) {
-	if (arith_decode(cinfo, st)) {
-	  m <<= 1;
-	  st = entropy->ac_stats[tbl] +
-	       (k <= cinfo->arith_ac_K[tbl] ? 189 : 217);
-	  while (arith_decode(cinfo, st)) {
-	    if ((m <<= 1) == 0x8000) {
-	      WARNMS(cinfo, JWRN_ARITH_BAD_CODE);
-	      entropy->ct = -1;			/* magnitude overflow */
-	      return TRUE;
-	    }
-	    st += 1;
-	  }
-	}
-      }
-      v = m;
-      /* Figure F.24: Decoding the magnitude bit pattern of v */
-      st += 14;
-      while (m >>= 1)
-	if (arith_decode(cinfo, st)) v |= m;
-      v += 1; if (sign) v = -v;
-      (*block)[natural_order[k]] = (JCOEF) v;
-    } while (k < cinfo->lim_Se);
-  }
-
-  return TRUE;
-}
-
-
-/*
- * Initialize for an arithmetic-compressed scan.
- */
-
-METHODDEF(void)
-start_pass (j_decompress_ptr cinfo)
-{
-  arith_entropy_ptr entropy = (arith_entropy_ptr) cinfo->entropy;
-  int ci, tbl;
-  jpeg_component_info * compptr;
-
-  if (cinfo->progressive_mode) {
-    /* Validate progressive scan parameters */
-    if (cinfo->Ss == 0) {
-      if (cinfo->Se != 0)
-	goto bad;
-    } else {
-      /* need not check Ss/Se < 0 since they came from unsigned bytes */
-      if (cinfo->Se < cinfo->Ss || cinfo->Se > cinfo->lim_Se)
-	goto bad;
-      /* AC scans may have only one component */
-      if (cinfo->comps_in_scan != 1)
-	goto bad;
-    }
-    if (cinfo->Ah != 0) {
-      /* Successive approximation refinement scan: must have Al = Ah-1. */
-      if (cinfo->Ah-1 != cinfo->Al)
-	goto bad;
-    }
-    if (cinfo->Al > 13) {	/* need not check for < 0 */
-      bad:
-      ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
-	       cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
-    }
-    /* Update progression status, and verify that scan order is legal.
-     * Note that inter-scan inconsistencies are treated as warnings
-     * not fatal errors ... not clear if this is right way to behave.
-     */
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      int coefi, cindex = cinfo->cur_comp_info[ci]->component_index;
-      int *coef_bit_ptr = & cinfo->coef_bits[cindex][0];
-      if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
-	WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
-      for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
-	int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
-	if (cinfo->Ah != expected)
-	  WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
-	coef_bit_ptr[coefi] = cinfo->Al;
-      }
-    }
-    /* Select MCU decoding routine */
-    if (cinfo->Ah == 0) {
-      if (cinfo->Ss == 0)
-	entropy->pub.decode_mcu = decode_mcu_DC_first;
-      else
-	entropy->pub.decode_mcu = decode_mcu_AC_first;
-    } else {
-      if (cinfo->Ss == 0)
-	entropy->pub.decode_mcu = decode_mcu_DC_refine;
-      else
-	entropy->pub.decode_mcu = decode_mcu_AC_refine;
-    }
-  } else {
-    /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
-     * This ought to be an error condition, but we make it a warning.
-     */
-    if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 ||
-	(cinfo->Se < DCTSIZE2 && cinfo->Se != cinfo->lim_Se))
-      WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
-    /* Select MCU decoding routine */
-    entropy->pub.decode_mcu = decode_mcu;
-  }
-
-  /* Allocate & initialize requested statistics areas */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    if (! cinfo->progressive_mode || (cinfo->Ss == 0 && cinfo->Ah == 0)) {
-      tbl = compptr->dc_tbl_no;
-      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
-	ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
-      if (entropy->dc_stats[tbl] == NULL)
-	entropy->dc_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, DC_STAT_BINS);
-      MEMZERO(entropy->dc_stats[tbl], DC_STAT_BINS);
-      /* Initialize DC predictions to 0 */
-      entropy->last_dc_val[ci] = 0;
-      entropy->dc_context[ci] = 0;
-    }
-    if ((! cinfo->progressive_mode && cinfo->lim_Se) ||
-	(cinfo->progressive_mode && cinfo->Ss)) {
-      tbl = compptr->ac_tbl_no;
-      if (tbl < 0 || tbl >= NUM_ARITH_TBLS)
-	ERREXIT1(cinfo, JERR_NO_ARITH_TABLE, tbl);
-      if (entropy->ac_stats[tbl] == NULL)
-	entropy->ac_stats[tbl] = (unsigned char *) (*cinfo->mem->alloc_small)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, AC_STAT_BINS);
-      MEMZERO(entropy->ac_stats[tbl], AC_STAT_BINS);
-    }
-  }
-
-  /* Initialize arithmetic decoding variables */
-  entropy->c = 0;
-  entropy->a = 0;
-  entropy->ct = -16;	/* force reading 2 initial bytes to fill C */
-
-  /* Initialize restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-}
-
-
-/*
- * Finish up at the end of an arithmetic-compressed scan.
- */
-
-METHODDEF(void)
-finish_pass (j_decompress_ptr cinfo)
-{
-  /* no work necessary here */
-}
-
-
-/*
- * Module initialization routine for arithmetic entropy decoding.
- */
-
-GLOBAL(void)
-jinit_arith_decoder (j_decompress_ptr cinfo)
-{
-  arith_entropy_ptr entropy;
-  int i;
-
-  entropy = (arith_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(arith_entropy_decoder));
-  cinfo->entropy = &entropy->pub;
-  entropy->pub.start_pass = start_pass;
-  entropy->pub.finish_pass = finish_pass;
-
-  /* Mark tables unallocated */
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    entropy->dc_stats[i] = NULL;
-    entropy->ac_stats[i] = NULL;
-  }
-
-  /* Initialize index for fixed probability estimation */
-  entropy->fixed_bin[0] = 113;
-
-  if (cinfo->progressive_mode) {
-    /* Create progression status table */
-    int *coef_bit_ptr, ci;
-    cinfo->coef_bits = (int (*)[DCTSIZE2])
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  cinfo->num_components*DCTSIZE2*SIZEOF(int));
-    coef_bit_ptr = & cinfo->coef_bits[0][0];
-    for (ci = 0; ci < cinfo->num_components; ci++) 
-      for (i = 0; i < DCTSIZE2; i++)
-	*coef_bit_ptr++ = -1;
-  }
-}
--- a/DoConfig/fltk/jpeg/jdatadst.c
+++ /dev/null
@@ -1,270 +1,0 @@
-/*
- * jdatadst.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009-2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains compression data destination routines for the case of
- * emitting JPEG data to memory or to a file (or any stdio stream).
- * While these routines are sufficient for most applications,
- * some will want to use a different destination manager.
- * IMPORTANT: we assume that fwrite() will correctly transcribe an array of
- * JOCTETs into 8-bit-wide elements on external storage.  If char is wider
- * than 8 bits on your machine, you may need to do some tweaking.
- */
-
-/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jerror.h"
-
-#ifndef HAVE_STDLIB_H		/* <stdlib.h> should declare malloc(),free() */
-extern void * malloc JPP((size_t size));
-extern void free JPP((void *ptr));
-#endif
-
-
-/* Expanded data destination object for stdio output */
-
-typedef struct {
-  struct jpeg_destination_mgr pub; /* public fields */
-
-  FILE * outfile;		/* target stream */
-  JOCTET * buffer;		/* start of buffer */
-} my_destination_mgr;
-
-typedef my_destination_mgr * my_dest_ptr;
-
-#define OUTPUT_BUF_SIZE  4096	/* choose an efficiently fwrite'able size */
-
-
-/* Expanded data destination object for memory output */
-
-typedef struct {
-  struct jpeg_destination_mgr pub; /* public fields */
-
-  unsigned char ** outbuffer;	/* target buffer */
-  unsigned long * outsize;
-  unsigned char * newbuffer;	/* newly allocated buffer */
-  JOCTET * buffer;		/* start of buffer */
-  size_t bufsize;
-} my_mem_destination_mgr;
-
-typedef my_mem_destination_mgr * my_mem_dest_ptr;
-
-
-/*
- * Initialize destination --- called by jpeg_start_compress
- * before any data is actually written.
- */
-
-METHODDEF(void)
-init_destination (j_compress_ptr cinfo)
-{
-  my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
-  /* Allocate the output buffer --- it will be released when done with image */
-  dest->buffer = (JOCTET *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  OUTPUT_BUF_SIZE * SIZEOF(JOCTET));
-
-  dest->pub.next_output_byte = dest->buffer;
-  dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-}
-
-METHODDEF(void)
-init_mem_destination (j_compress_ptr cinfo)
-{
-  /* no work necessary here */
-}
-
-
-/*
- * Empty the output buffer --- called whenever buffer fills up.
- *
- * In typical applications, this should write the entire output buffer
- * (ignoring the current state of next_output_byte & free_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been dumped.
- *
- * In applications that need to be able to suspend compression due to output
- * overrun, a FALSE return indicates that the buffer cannot be emptied now.
- * In this situation, the compressor will return to its caller (possibly with
- * an indication that it has not accepted all the supplied scanlines).  The
- * application should resume compression after it has made more room in the
- * output buffer.  Note that there are substantial restrictions on the use of
- * suspension --- see the documentation.
- *
- * When suspending, the compressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_output_byte & free_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point will be regenerated after resumption, so do not
- * write it out when emptying the buffer externally.
- */
-
-METHODDEF(boolean)
-empty_output_buffer (j_compress_ptr cinfo)
-{
-  my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-
-  if (JFWRITE(dest->outfile, dest->buffer, OUTPUT_BUF_SIZE) !=
-      (size_t) OUTPUT_BUF_SIZE)
-    ERREXIT(cinfo, JERR_FILE_WRITE);
-
-  dest->pub.next_output_byte = dest->buffer;
-  dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-
-  return TRUE;
-}
-
-METHODDEF(boolean)
-empty_mem_output_buffer (j_compress_ptr cinfo)
-{
-  size_t nextsize;
-  JOCTET * nextbuffer;
-  my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
-
-  /* Try to allocate new buffer with double size */
-  nextsize = dest->bufsize * 2;
-  nextbuffer = (JOCTET *) malloc(nextsize);
-
-  if (nextbuffer == NULL)
-    ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
-
-  MEMCOPY(nextbuffer, dest->buffer, dest->bufsize);
-
-  if (dest->newbuffer != NULL)
-    free(dest->newbuffer);
-
-  dest->newbuffer = nextbuffer;
-
-  dest->pub.next_output_byte = nextbuffer + dest->bufsize;
-  dest->pub.free_in_buffer = dest->bufsize;
-
-  dest->buffer = nextbuffer;
-  dest->bufsize = nextsize;
-
-  return TRUE;
-}
-
-
-/*
- * Terminate destination --- called by jpeg_finish_compress
- * after all data has been written.  Usually needs to flush buffer.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-METHODDEF(void)
-term_destination (j_compress_ptr cinfo)
-{
-  my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
-  size_t datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
-
-  /* Write any data remaining in the buffer */
-  if (datacount > 0) {
-    if (JFWRITE(dest->outfile, dest->buffer, datacount) != datacount)
-      ERREXIT(cinfo, JERR_FILE_WRITE);
-  }
-  fflush(dest->outfile);
-  /* Make sure we wrote the output file OK */
-  if (ferror(dest->outfile))
-    ERREXIT(cinfo, JERR_FILE_WRITE);
-}
-
-METHODDEF(void)
-term_mem_destination (j_compress_ptr cinfo)
-{
-  my_mem_dest_ptr dest = (my_mem_dest_ptr) cinfo->dest;
-
-  *dest->outbuffer = dest->buffer;
-  *dest->outsize = dest->bufsize - dest->pub.free_in_buffer;
-}
-
-
-/*
- * Prepare for output to a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing compression.
- */
-
-GLOBAL(void)
-jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile)
-{
-  my_dest_ptr dest;
-
-  /* The destination object is made permanent so that multiple JPEG images
-   * can be written to the same file without re-executing jpeg_stdio_dest.
-   * This makes it dangerous to use this manager and a different destination
-   * manager serially with the same JPEG object, because their private object
-   * sizes may be different.  Caveat programmer.
-   */
-  if (cinfo->dest == NULL) {	/* first time for this JPEG object? */
-    cinfo->dest = (struct jpeg_destination_mgr *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  SIZEOF(my_destination_mgr));
-  }
-
-  dest = (my_dest_ptr) cinfo->dest;
-  dest->pub.init_destination = init_destination;
-  dest->pub.empty_output_buffer = empty_output_buffer;
-  dest->pub.term_destination = term_destination;
-  dest->outfile = outfile;
-}
-
-
-/*
- * Prepare for output to a memory buffer.
- * The caller may supply an own initial buffer with appropriate size.
- * Otherwise, or when the actual data output exceeds the given size,
- * the library adapts the buffer size as necessary.
- * The standard library functions malloc/free are used for allocating
- * larger memory, so the buffer is available to the application after
- * finishing compression, and then the application is responsible for
- * freeing the requested memory.
- * Note:  An initial buffer supplied by the caller is expected to be
- * managed by the application.  The library does not free such buffer
- * when allocating a larger buffer.
- */
-
-GLOBAL(void)
-jpeg_mem_dest (j_compress_ptr cinfo,
-	       unsigned char ** outbuffer, unsigned long * outsize)
-{
-  my_mem_dest_ptr dest;
-
-  if (outbuffer == NULL || outsize == NULL)	/* sanity check */
-    ERREXIT(cinfo, JERR_BUFFER_SIZE);
-
-  /* The destination object is made permanent so that multiple JPEG images
-   * can be written to the same buffer without re-executing jpeg_mem_dest.
-   */
-  if (cinfo->dest == NULL) {	/* first time for this JPEG object? */
-    cinfo->dest = (struct jpeg_destination_mgr *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  SIZEOF(my_mem_destination_mgr));
-  }
-
-  dest = (my_mem_dest_ptr) cinfo->dest;
-  dest->pub.init_destination = init_mem_destination;
-  dest->pub.empty_output_buffer = empty_mem_output_buffer;
-  dest->pub.term_destination = term_mem_destination;
-  dest->outbuffer = outbuffer;
-  dest->outsize = outsize;
-  dest->newbuffer = NULL;
-
-  if (*outbuffer == NULL || *outsize == 0) {
-    /* Allocate initial buffer */
-    dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
-    if (dest->newbuffer == NULL)
-      ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
-    *outsize = OUTPUT_BUF_SIZE;
-  }
-
-  dest->pub.next_output_byte = dest->buffer = *outbuffer;
-  dest->pub.free_in_buffer = dest->bufsize = *outsize;
-}
--- a/DoConfig/fltk/jpeg/jdatasrc.c
+++ /dev/null
@@ -1,275 +1,0 @@
-/*
- * jdatasrc.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2009-2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains decompression data source routines for the case of
- * reading JPEG data from memory or from a file (or any stdio stream).
- * While these routines are sufficient for most applications,
- * some will want to use a different source manager.
- * IMPORTANT: we assume that fread() will correctly transcribe an array of
- * JOCTETs from 8-bit-wide elements on external storage.  If char is wider
- * than 8 bits on your machine, you may need to do some tweaking.
- */
-
-/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jerror.h"
-
-
-/* Expanded data source object for stdio input */
-
-typedef struct {
-  struct jpeg_source_mgr pub;	/* public fields */
-
-  FILE * infile;		/* source stream */
-  JOCTET * buffer;		/* start of buffer */
-  boolean start_of_file;	/* have we gotten any data yet? */
-} my_source_mgr;
-
-typedef my_source_mgr * my_src_ptr;
-
-#define INPUT_BUF_SIZE  4096	/* choose an efficiently fread'able size */
-
-
-/*
- * Initialize source --- called by jpeg_read_header
- * before any data is actually read.
- */
-
-METHODDEF(void)
-init_source (j_decompress_ptr cinfo)
-{
-  my_src_ptr src = (my_src_ptr) cinfo->src;
-
-  /* We reset the empty-input-file flag for each image,
-   * but we don't clear the input buffer.
-   * This is correct behavior for reading a series of images from one source.
-   */
-  src->start_of_file = TRUE;
-}
-
-METHODDEF(void)
-init_mem_source (j_decompress_ptr cinfo)
-{
-  /* no work necessary here */
-}
-
-
-/*
- * Fill the input buffer --- called whenever buffer is emptied.
- *
- * In typical applications, this should read fresh data into the buffer
- * (ignoring the current state of next_input_byte & bytes_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been reloaded.  It is not necessary to
- * fill the buffer entirely, only to obtain at least one more byte.
- *
- * There is no such thing as an EOF return.  If the end of the file has been
- * reached, the routine has a choice of ERREXIT() or inserting fake data into
- * the buffer.  In most cases, generating a warning message and inserting a
- * fake EOI marker is the best course of action --- this will allow the
- * decompressor to output however much of the image is there.  However,
- * the resulting error message is misleading if the real problem is an empty
- * input file, so we handle that case specially.
- *
- * In applications that need to be able to suspend compression due to input
- * not being available yet, a FALSE return indicates that no more data can be
- * obtained right now, but more may be forthcoming later.  In this situation,
- * the decompressor will return to its caller (with an indication of the
- * number of scanlines it has read, if any).  The application should resume
- * decompression after it has loaded more data into the input buffer.  Note
- * that there are substantial restrictions on the use of suspension --- see
- * the documentation.
- *
- * When suspending, the decompressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_input_byte & bytes_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point must be rescanned after resumption, so move it to
- * the front of the buffer rather than discarding it.
- */
-
-METHODDEF(boolean)
-fill_input_buffer (j_decompress_ptr cinfo)
-{
-  my_src_ptr src = (my_src_ptr) cinfo->src;
-  size_t nbytes;
-
-  nbytes = JFREAD(src->infile, src->buffer, INPUT_BUF_SIZE);
-
-  if (nbytes <= 0) {
-    if (src->start_of_file)	/* Treat empty input file as fatal error */
-      ERREXIT(cinfo, JERR_INPUT_EMPTY);
-    WARNMS(cinfo, JWRN_JPEG_EOF);
-    /* Insert a fake EOI marker */
-    src->buffer[0] = (JOCTET) 0xFF;
-    src->buffer[1] = (JOCTET) JPEG_EOI;
-    nbytes = 2;
-  }
-
-  src->pub.next_input_byte = src->buffer;
-  src->pub.bytes_in_buffer = nbytes;
-  src->start_of_file = FALSE;
-
-  return TRUE;
-}
-
-METHODDEF(boolean)
-fill_mem_input_buffer (j_decompress_ptr cinfo)
-{
-  static const JOCTET mybuffer[4] = {
-    (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
-  };
-
-  /* The whole JPEG data is expected to reside in the supplied memory
-   * buffer, so any request for more data beyond the given buffer size
-   * is treated as an error.
-   */
-  WARNMS(cinfo, JWRN_JPEG_EOF);
-
-  /* Insert a fake EOI marker */
-
-  cinfo->src->next_input_byte = mybuffer;
-  cinfo->src->bytes_in_buffer = 2;
-
-  return TRUE;
-}
-
-
-/*
- * Skip data --- used to skip over a potentially large amount of
- * uninteresting data (such as an APPn marker).
- *
- * Writers of suspendable-input applications must note that skip_input_data
- * is not granted the right to give a suspension return.  If the skip extends
- * beyond the data currently in the buffer, the buffer can be marked empty so
- * that the next read will cause a fill_input_buffer call that can suspend.
- * Arranging for additional bytes to be discarded before reloading the input
- * buffer is the application writer's problem.
- */
-
-METHODDEF(void)
-skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-{
-  struct jpeg_source_mgr * src = cinfo->src;
-
-  /* Just a dumb implementation for now.  Could use fseek() except
-   * it doesn't work on pipes.  Not clear that being smart is worth
-   * any trouble anyway --- large skips are infrequent.
-   */
-  if (num_bytes > 0) {
-    while (num_bytes > (long) src->bytes_in_buffer) {
-      num_bytes -= (long) src->bytes_in_buffer;
-      (void) (*src->fill_input_buffer) (cinfo);
-      /* note we assume that fill_input_buffer will never return FALSE,
-       * so suspension need not be handled.
-       */
-    }
-    src->next_input_byte += (size_t) num_bytes;
-    src->bytes_in_buffer -= (size_t) num_bytes;
-  }
-}
-
-
-/*
- * An additional method that can be provided by data source modules is the
- * resync_to_restart method for error recovery in the presence of RST markers.
- * For the moment, this source module just uses the default resync method
- * provided by the JPEG library.  That method assumes that no backtracking
- * is possible.
- */
-
-
-/*
- * Terminate source --- called by jpeg_finish_decompress
- * after all data has been read.  Often a no-op.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-METHODDEF(void)
-term_source (j_decompress_ptr cinfo)
-{
-  /* no work necessary here */
-}
-
-
-/*
- * Prepare for input from a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing decompression.
- */
-
-GLOBAL(void)
-jpeg_stdio_src (j_decompress_ptr cinfo, FILE * infile)
-{
-  my_src_ptr src;
-
-  /* The source object and input buffer are made permanent so that a series
-   * of JPEG images can be read from the same file by calling jpeg_stdio_src
-   * only before the first one.  (If we discarded the buffer at the end of
-   * one image, we'd likely lose the start of the next one.)
-   * This makes it unsafe to use this manager and a different source
-   * manager serially with the same JPEG object.  Caveat programmer.
-   */
-  if (cinfo->src == NULL) {	/* first time for this JPEG object? */
-    cinfo->src = (struct jpeg_source_mgr *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  SIZEOF(my_source_mgr));
-    src = (my_src_ptr) cinfo->src;
-    src->buffer = (JOCTET *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  INPUT_BUF_SIZE * SIZEOF(JOCTET));
-  }
-
-  src = (my_src_ptr) cinfo->src;
-  src->pub.init_source = init_source;
-  src->pub.fill_input_buffer = fill_input_buffer;
-  src->pub.skip_input_data = skip_input_data;
-  src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
-  src->pub.term_source = term_source;
-  src->infile = infile;
-  src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
-  src->pub.next_input_byte = NULL; /* until buffer loaded */
-}
-
-
-/*
- * Prepare for input from a supplied memory buffer.
- * The buffer must contain the whole JPEG data.
- */
-
-GLOBAL(void)
-jpeg_mem_src (j_decompress_ptr cinfo,
-	      unsigned char * inbuffer, unsigned long insize)
-{
-  struct jpeg_source_mgr * src;
-
-  if (inbuffer == NULL || insize == 0)	/* Treat empty input as fatal error */
-    ERREXIT(cinfo, JERR_INPUT_EMPTY);
-
-  /* The source object is made permanent so that a series of JPEG images
-   * can be read from the same buffer by calling jpeg_mem_src only before
-   * the first one.
-   */
-  if (cinfo->src == NULL) {	/* first time for this JPEG object? */
-    cinfo->src = (struct jpeg_source_mgr *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				  SIZEOF(struct jpeg_source_mgr));
-  }
-
-  src = cinfo->src;
-  src->init_source = init_mem_source;
-  src->fill_input_buffer = fill_mem_input_buffer;
-  src->skip_input_data = skip_input_data;
-  src->resync_to_restart = jpeg_resync_to_restart; /* use default method */
-  src->term_source = term_source;
-  src->bytes_in_buffer = (size_t) insize;
-  src->next_input_byte = (JOCTET *) inbuffer;
-}
--- a/DoConfig/fltk/jpeg/jdcoefct.c
+++ /dev/null
@@ -1,741 +1,0 @@
-/*
- * jdcoefct.c
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * Modified 2002-2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the coefficient buffer controller for decompression.
- * This controller is the top level of the JPEG decompressor proper.
- * The coefficient buffer lies between entropy decoding and inverse-DCT steps.
- *
- * In buffered-image mode, this controller is the interface between
- * input-oriented processing and output-oriented processing.
- * Also, the input side (only) is used when reading a file for transcoding.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-/* Block smoothing is only applicable for progressive JPEG, so: */
-#ifndef D_PROGRESSIVE_SUPPORTED
-#undef BLOCK_SMOOTHING_SUPPORTED
-#endif
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_coef_controller pub; /* public fields */
-
-  /* These variables keep track of the current location of the input side. */
-  /* cinfo->input_iMCU_row is also used for this. */
-  JDIMENSION MCU_ctr;		/* counts MCUs processed in current row */
-  int MCU_vert_offset;		/* counts MCU rows within iMCU row */
-  int MCU_rows_per_iMCU_row;	/* number of such rows needed */
-
-  /* The output side's location is represented by cinfo->output_iMCU_row. */
-
-  /* In single-pass modes, it's sufficient to buffer just one MCU.
-   * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks,
-   * and let the entropy decoder write into that workspace each time.
-   * (On 80x86, the workspace is FAR even though it's not really very big;
-   * this is to keep the module interfaces unchanged when a large coefficient
-   * buffer is necessary.)
-   * In multi-pass modes, this array points to the current MCU's blocks
-   * within the virtual arrays; it is used only by the input side.
-   */
-  JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU];
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-  /* In multi-pass modes, we need a virtual block array for each component. */
-  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
-#endif
-
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  /* When doing block smoothing, we latch coefficient Al values here */
-  int * coef_bits_latch;
-#define SAVED_COEFS  6		/* we save coef_bits[0..5] */
-#endif
-} my_coef_controller;
-
-typedef my_coef_controller * my_coef_ptr;
-
-/* Forward declarations */
-METHODDEF(int) decompress_onepass
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-METHODDEF(int) decompress_data
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#endif
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-LOCAL(boolean) smoothing_ok JPP((j_decompress_ptr cinfo));
-METHODDEF(int) decompress_smooth_data
-	JPP((j_decompress_ptr cinfo, JSAMPIMAGE output_buf));
-#endif
-
-
-LOCAL(void)
-start_iMCU_row (j_decompress_ptr cinfo)
-/* Reset within-iMCU-row counters for a new row (input side) */
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  /* In an interleaved scan, an MCU row is the same as an iMCU row.
-   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
-   * But at the bottom of the image, process only what's left.
-   */
-  if (cinfo->comps_in_scan > 1) {
-    coef->MCU_rows_per_iMCU_row = 1;
-  } else {
-    if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows-1))
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
-    else
-      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
-  }
-
-  coef->MCU_ctr = 0;
-  coef->MCU_vert_offset = 0;
-}
-
-
-/*
- * Initialize for an input processing pass.
- */
-
-METHODDEF(void)
-start_input_pass (j_decompress_ptr cinfo)
-{
-  cinfo->input_iMCU_row = 0;
-  start_iMCU_row(cinfo);
-}
-
-
-/*
- * Initialize for an output processing pass.
- */
-
-METHODDEF(void)
-start_output_pass (j_decompress_ptr cinfo)
-{
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-
-  /* If multipass, check to see whether to use block smoothing on this pass */
-  if (coef->pub.coef_arrays != NULL) {
-    if (cinfo->do_block_smoothing && smoothing_ok(cinfo))
-      coef->pub.decompress_data = decompress_smooth_data;
-    else
-      coef->pub.decompress_data = decompress_data;
-  }
-#endif
-  cinfo->output_iMCU_row = 0;
-}
-
-
-/*
- * Decompress and return some data in the single-pass case.
- * Always attempts to emit one fully interleaved MCU row ("iMCU" row).
- * Input and output must run in lockstep since we have only a one-MCU buffer.
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- *
- * NB: output_buf contains a plane for each component in image,
- * which we index according to the component's SOF position.
- */
-
-METHODDEF(int)
-decompress_onepass (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  JDIMENSION last_MCU_col = cinfo->MCUs_per_row - 1;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  int blkn, ci, xindex, yindex, yoffset, useful_width;
-  JSAMPARRAY output_ptr;
-  JDIMENSION start_col, output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-
-  /* Loop to process as much as one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->MCU_ctr; MCU_col_num <= last_MCU_col;
-	 MCU_col_num++) {
-      /* Try to fetch an MCU.  Entropy decoder expects buffer to be zeroed. */
-      if (cinfo->lim_Se)	/* can bypass in DC only case */
-	FMEMZERO((void FAR *) coef->MCU_buffer[0],
-		 (size_t) (cinfo->blocks_in_MCU * SIZEOF(JBLOCK)));
-      if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->MCU_ctr = MCU_col_num;
-	return JPEG_SUSPENDED;
-      }
-      /* Determine where data should go in output_buf and do the IDCT thing.
-       * We skip dummy blocks at the right and bottom edges (but blkn gets
-       * incremented past them!).  Note the inner loop relies on having
-       * allocated the MCU_buffer[] blocks sequentially.
-       */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	/* Don't bother to IDCT an uninteresting component. */
-	if (! compptr->component_needed) {
-	  blkn += compptr->MCU_blocks;
-	  continue;
-	}
-	inverse_DCT = cinfo->idct->inverse_DCT[compptr->component_index];
-	useful_width = (MCU_col_num < last_MCU_col) ? compptr->MCU_width
-						    : compptr->last_col_width;
-	output_ptr = output_buf[compptr->component_index] +
-	  yoffset * compptr->DCT_v_scaled_size;
-	start_col = MCU_col_num * compptr->MCU_sample_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  if (cinfo->input_iMCU_row < last_iMCU_row ||
-	      yoffset+yindex < compptr->last_row_height) {
-	    output_col = start_col;
-	    for (xindex = 0; xindex < useful_width; xindex++) {
-	      (*inverse_DCT) (cinfo, compptr,
-			      (JCOEFPTR) coef->MCU_buffer[blkn+xindex],
-			      output_ptr, output_col);
-	      output_col += compptr->DCT_h_scaled_size;
-	    }
-	  }
-	  blkn += compptr->MCU_width;
-	  output_ptr += compptr->DCT_v_scaled_size;
-	}
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->MCU_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  cinfo->output_iMCU_row++;
-  if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
-    start_iMCU_row(cinfo);
-    return JPEG_ROW_COMPLETED;
-  }
-  /* Completed the scan */
-  (*cinfo->inputctl->finish_input_pass) (cinfo);
-  return JPEG_SCAN_COMPLETED;
-}
-
-
-/*
- * Dummy consume-input routine for single-pass operation.
- */
-
-METHODDEF(int)
-dummy_consume_data (j_decompress_ptr cinfo)
-{
-  return JPEG_SUSPENDED;	/* Always indicate nothing was done */
-}
-
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Consume input data and store it in the full-image coefficient buffer.
- * We read as much as one fully interleaved MCU row ("iMCU" row) per call,
- * ie, v_samp_factor block rows for each component in the scan.
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- */
-
-METHODDEF(int)
-consume_data (j_decompress_ptr cinfo)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION MCU_col_num;	/* index of current MCU within row */
-  int blkn, ci, xindex, yindex, yoffset;
-  JDIMENSION start_col;
-  JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
-  JBLOCKROW buffer_ptr;
-  jpeg_component_info *compptr;
-
-  /* Align the virtual buffers for the components used in this scan. */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    buffer[ci] = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
-       cinfo->input_iMCU_row * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, TRUE);
-    /* Note: entropy decoder expects buffer to be zeroed,
-     * but this is handled automatically by the memory manager
-     * because we requested a pre-zeroed array.
-     */
-  }
-
-  /* Loop to process one whole iMCU row */
-  for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
-       yoffset++) {
-    for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row;
-	 MCU_col_num++) {
-      /* Construct list of pointers to DCT blocks belonging to this MCU */
-      blkn = 0;			/* index of current DCT block within MCU */
-      for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-	compptr = cinfo->cur_comp_info[ci];
-	start_col = MCU_col_num * compptr->MCU_width;
-	for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
-	  buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
-	  for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
-	    coef->MCU_buffer[blkn++] = buffer_ptr++;
-	  }
-	}
-      }
-      /* Try to fetch the MCU. */
-      if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
-	/* Suspension forced; update state counters and exit */
-	coef->MCU_vert_offset = yoffset;
-	coef->MCU_ctr = MCU_col_num;
-	return JPEG_SUSPENDED;
-      }
-    }
-    /* Completed an MCU row, but perhaps not an iMCU row */
-    coef->MCU_ctr = 0;
-  }
-  /* Completed the iMCU row, advance counters for next one */
-  if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
-    start_iMCU_row(cinfo);
-    return JPEG_ROW_COMPLETED;
-  }
-  /* Completed the scan */
-  (*cinfo->inputctl->finish_input_pass) (cinfo);
-  return JPEG_SCAN_COMPLETED;
-}
-
-
-/*
- * Decompress and return some data in the multi-pass case.
- * Always attempts to emit one fully interleaved MCU row ("iMCU" row).
- * Return value is JPEG_ROW_COMPLETED, JPEG_SCAN_COMPLETED, or JPEG_SUSPENDED.
- *
- * NB: output_buf contains a plane for each component in image.
- */
-
-METHODDEF(int)
-decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION block_num;
-  int ci, block_row, block_rows;
-  JBLOCKARRAY buffer;
-  JBLOCKROW buffer_ptr;
-  JSAMPARRAY output_ptr;
-  JDIMENSION output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-
-  /* Force some input to be done if we are getting ahead of the input. */
-  while (cinfo->input_scan_number < cinfo->output_scan_number ||
-	 (cinfo->input_scan_number == cinfo->output_scan_number &&
-	  cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) {
-    if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
-      return JPEG_SUSPENDED;
-  }
-
-  /* OK, output from the virtual arrays. */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Don't bother to IDCT an uninteresting component. */
-    if (! compptr->component_needed)
-      continue;
-    /* Align the virtual buffer for this component. */
-    buffer = (*cinfo->mem->access_virt_barray)
-      ((j_common_ptr) cinfo, coef->whole_image[ci],
-       cinfo->output_iMCU_row * compptr->v_samp_factor,
-       (JDIMENSION) compptr->v_samp_factor, FALSE);
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (cinfo->output_iMCU_row < last_iMCU_row)
-      block_rows = compptr->v_samp_factor;
-    else {
-      /* NB: can't use last_row_height here; it is input-side-dependent! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-    }
-    inverse_DCT = cinfo->idct->inverse_DCT[ci];
-    output_ptr = output_buf[ci];
-    /* Loop over all DCT blocks to be processed. */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      buffer_ptr = buffer[block_row];
-      output_col = 0;
-      for (block_num = 0; block_num < compptr->width_in_blocks; block_num++) {
-	(*inverse_DCT) (cinfo, compptr, (JCOEFPTR) buffer_ptr,
-			output_ptr, output_col);
-	buffer_ptr++;
-	output_col += compptr->DCT_h_scaled_size;
-      }
-      output_ptr += compptr->DCT_v_scaled_size;
-    }
-  }
-
-  if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows)
-    return JPEG_ROW_COMPLETED;
-  return JPEG_SCAN_COMPLETED;
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-
-
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-
-/*
- * This code applies interblock smoothing as described by section K.8
- * of the JPEG standard: the first 5 AC coefficients are estimated from
- * the DC values of a DCT block and its 8 neighboring blocks.
- * We apply smoothing only for progressive JPEG decoding, and only if
- * the coefficients it can estimate are not yet known to full precision.
- */
-
-/* Natural-order array positions of the first 5 zigzag-order coefficients */
-#define Q01_POS  1
-#define Q10_POS  8
-#define Q20_POS  16
-#define Q11_POS  9
-#define Q02_POS  2
-
-/*
- * Determine whether block smoothing is applicable and safe.
- * We also latch the current states of the coef_bits[] entries for the
- * AC coefficients; otherwise, if the input side of the decompressor
- * advances into a new scan, we might think the coefficients are known
- * more accurately than they really are.
- */
-
-LOCAL(boolean)
-smoothing_ok (j_decompress_ptr cinfo)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  boolean smoothing_useful = FALSE;
-  int ci, coefi;
-  jpeg_component_info *compptr;
-  JQUANT_TBL * qtable;
-  int * coef_bits;
-  int * coef_bits_latch;
-
-  if (! cinfo->progressive_mode || cinfo->coef_bits == NULL)
-    return FALSE;
-
-  /* Allocate latch area if not already done */
-  if (coef->coef_bits_latch == NULL)
-    coef->coef_bits_latch = (int *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  cinfo->num_components *
-				  (SAVED_COEFS * SIZEOF(int)));
-  coef_bits_latch = coef->coef_bits_latch;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* All components' quantization values must already be latched. */
-    if ((qtable = compptr->quant_table) == NULL)
-      return FALSE;
-    /* Verify DC & first 5 AC quantizers are nonzero to avoid zero-divide. */
-    if (qtable->quantval[0] == 0 ||
-	qtable->quantval[Q01_POS] == 0 ||
-	qtable->quantval[Q10_POS] == 0 ||
-	qtable->quantval[Q20_POS] == 0 ||
-	qtable->quantval[Q11_POS] == 0 ||
-	qtable->quantval[Q02_POS] == 0)
-      return FALSE;
-    /* DC values must be at least partly known for all components. */
-    coef_bits = cinfo->coef_bits[ci];
-    if (coef_bits[0] < 0)
-      return FALSE;
-    /* Block smoothing is helpful if some AC coefficients remain inaccurate. */
-    for (coefi = 1; coefi <= 5; coefi++) {
-      coef_bits_latch[coefi] = coef_bits[coefi];
-      if (coef_bits[coefi] != 0)
-	smoothing_useful = TRUE;
-    }
-    coef_bits_latch += SAVED_COEFS;
-  }
-
-  return smoothing_useful;
-}
-
-
-/*
- * Variant of decompress_data for use when doing block smoothing.
- */
-
-METHODDEF(int)
-decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
-{
-  my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
-  JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
-  JDIMENSION block_num, last_block_column;
-  int ci, block_row, block_rows, access_rows;
-  JBLOCKARRAY buffer;
-  JBLOCKROW buffer_ptr, prev_block_row, next_block_row;
-  JSAMPARRAY output_ptr;
-  JDIMENSION output_col;
-  jpeg_component_info *compptr;
-  inverse_DCT_method_ptr inverse_DCT;
-  boolean first_row, last_row;
-  JBLOCK workspace;
-  int *coef_bits;
-  JQUANT_TBL *quanttbl;
-  INT32 Q00,Q01,Q02,Q10,Q11,Q20, num;
-  int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9;
-  int Al, pred;
-
-  /* Force some input to be done if we are getting ahead of the input. */
-  while (cinfo->input_scan_number <= cinfo->output_scan_number &&
-	 ! cinfo->inputctl->eoi_reached) {
-    if (cinfo->input_scan_number == cinfo->output_scan_number) {
-      /* If input is working on current scan, we ordinarily want it to
-       * have completed the current row.  But if input scan is DC,
-       * we want it to keep one row ahead so that next block row's DC
-       * values are up to date.
-       */
-      JDIMENSION delta = (cinfo->Ss == 0) ? 1 : 0;
-      if (cinfo->input_iMCU_row > cinfo->output_iMCU_row+delta)
-	break;
-    }
-    if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
-      return JPEG_SUSPENDED;
-  }
-
-  /* OK, output from the virtual arrays. */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Don't bother to IDCT an uninteresting component. */
-    if (! compptr->component_needed)
-      continue;
-    /* Count non-dummy DCT block rows in this iMCU row. */
-    if (cinfo->output_iMCU_row < last_iMCU_row) {
-      block_rows = compptr->v_samp_factor;
-      access_rows = block_rows * 2; /* this and next iMCU row */
-      last_row = FALSE;
-    } else {
-      /* NB: can't use last_row_height here; it is input-side-dependent! */
-      block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-      if (block_rows == 0) block_rows = compptr->v_samp_factor;
-      access_rows = block_rows; /* this iMCU row only */
-      last_row = TRUE;
-    }
-    /* Align the virtual buffer for this component. */
-    if (cinfo->output_iMCU_row > 0) {
-      access_rows += compptr->v_samp_factor; /* prior iMCU row too */
-      buffer = (*cinfo->mem->access_virt_barray)
-	((j_common_ptr) cinfo, coef->whole_image[ci],
-	 (cinfo->output_iMCU_row - 1) * compptr->v_samp_factor,
-	 (JDIMENSION) access_rows, FALSE);
-      buffer += compptr->v_samp_factor;	/* point to current iMCU row */
-      first_row = FALSE;
-    } else {
-      buffer = (*cinfo->mem->access_virt_barray)
-	((j_common_ptr) cinfo, coef->whole_image[ci],
-	 (JDIMENSION) 0, (JDIMENSION) access_rows, FALSE);
-      first_row = TRUE;
-    }
-    /* Fetch component-dependent info */
-    coef_bits = coef->coef_bits_latch + (ci * SAVED_COEFS);
-    quanttbl = compptr->quant_table;
-    Q00 = quanttbl->quantval[0];
-    Q01 = quanttbl->quantval[Q01_POS];
-    Q10 = quanttbl->quantval[Q10_POS];
-    Q20 = quanttbl->quantval[Q20_POS];
-    Q11 = quanttbl->quantval[Q11_POS];
-    Q02 = quanttbl->quantval[Q02_POS];
-    inverse_DCT = cinfo->idct->inverse_DCT[ci];
-    output_ptr = output_buf[ci];
-    /* Loop over all DCT blocks to be processed. */
-    for (block_row = 0; block_row < block_rows; block_row++) {
-      buffer_ptr = buffer[block_row];
-      if (first_row && block_row == 0)
-	prev_block_row = buffer_ptr;
-      else
-	prev_block_row = buffer[block_row-1];
-      if (last_row && block_row == block_rows-1)
-	next_block_row = buffer_ptr;
-      else
-	next_block_row = buffer[block_row+1];
-      /* We fetch the surrounding DC values using a sliding-register approach.
-       * Initialize all nine here so as to do the right thing on narrow pics.
-       */
-      DC1 = DC2 = DC3 = (int) prev_block_row[0][0];
-      DC4 = DC5 = DC6 = (int) buffer_ptr[0][0];
-      DC7 = DC8 = DC9 = (int) next_block_row[0][0];
-      output_col = 0;
-      last_block_column = compptr->width_in_blocks - 1;
-      for (block_num = 0; block_num <= last_block_column; block_num++) {
-	/* Fetch current DCT block into workspace so we can modify it. */
-	jcopy_block_row(buffer_ptr, (JBLOCKROW) workspace, (JDIMENSION) 1);
-	/* Update DC values */
-	if (block_num < last_block_column) {
-	  DC3 = (int) prev_block_row[1][0];
-	  DC6 = (int) buffer_ptr[1][0];
-	  DC9 = (int) next_block_row[1][0];
-	}
-	/* Compute coefficient estimates per K.8.
-	 * An estimate is applied only if coefficient is still zero,
-	 * and is not known to be fully accurate.
-	 */
-	/* AC01 */
-	if ((Al=coef_bits[1]) != 0 && workspace[1] == 0) {
-	  num = 36 * Q00 * (DC4 - DC6);
-	  if (num >= 0) {
-	    pred = (int) (((Q01<<7) + num) / (Q01<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q01<<7) - num) / (Q01<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[1] = (JCOEF) pred;
-	}
-	/* AC10 */
-	if ((Al=coef_bits[2]) != 0 && workspace[8] == 0) {
-	  num = 36 * Q00 * (DC2 - DC8);
-	  if (num >= 0) {
-	    pred = (int) (((Q10<<7) + num) / (Q10<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q10<<7) - num) / (Q10<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[8] = (JCOEF) pred;
-	}
-	/* AC20 */
-	if ((Al=coef_bits[3]) != 0 && workspace[16] == 0) {
-	  num = 9 * Q00 * (DC2 + DC8 - 2*DC5);
-	  if (num >= 0) {
-	    pred = (int) (((Q20<<7) + num) / (Q20<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q20<<7) - num) / (Q20<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[16] = (JCOEF) pred;
-	}
-	/* AC11 */
-	if ((Al=coef_bits[4]) != 0 && workspace[9] == 0) {
-	  num = 5 * Q00 * (DC1 - DC3 - DC7 + DC9);
-	  if (num >= 0) {
-	    pred = (int) (((Q11<<7) + num) / (Q11<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q11<<7) - num) / (Q11<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[9] = (JCOEF) pred;
-	}
-	/* AC02 */
-	if ((Al=coef_bits[5]) != 0 && workspace[2] == 0) {
-	  num = 9 * Q00 * (DC4 + DC6 - 2*DC5);
-	  if (num >= 0) {
-	    pred = (int) (((Q02<<7) + num) / (Q02<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	  } else {
-	    pred = (int) (((Q02<<7) - num) / (Q02<<8));
-	    if (Al > 0 && pred >= (1<<Al))
-	      pred = (1<<Al)-1;
-	    pred = -pred;
-	  }
-	  workspace[2] = (JCOEF) pred;
-	}
-	/* OK, do the IDCT */
-	(*inverse_DCT) (cinfo, compptr, (JCOEFPTR) workspace,
-			output_ptr, output_col);
-	/* Advance for next column */
-	DC1 = DC2; DC2 = DC3;
-	DC4 = DC5; DC5 = DC6;
-	DC7 = DC8; DC8 = DC9;
-	buffer_ptr++, prev_block_row++, next_block_row++;
-	output_col += compptr->DCT_h_scaled_size;
-      }
-      output_ptr += compptr->DCT_v_scaled_size;
-    }
-  }
-
-  if (++(cinfo->output_iMCU_row) < cinfo->total_iMCU_rows)
-    return JPEG_ROW_COMPLETED;
-  return JPEG_SCAN_COMPLETED;
-}
-
-#endif /* BLOCK_SMOOTHING_SUPPORTED */
-
-
-/*
- * Initialize coefficient buffer controller.
- */
-
-GLOBAL(void)
-jinit_d_coef_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_coef_ptr coef;
-
-  coef = (my_coef_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_coef_controller));
-  cinfo->coef = (struct jpeg_d_coef_controller *) coef;
-  coef->pub.start_input_pass = start_input_pass;
-  coef->pub.start_output_pass = start_output_pass;
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-  coef->coef_bits_latch = NULL;
-#endif
-
-  /* Create the coefficient buffer. */
-  if (need_full_buffer) {
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-    /* Allocate a full-image virtual array for each component, */
-    /* padded to a multiple of samp_factor DCT blocks in each direction. */
-    /* Note we ask for a pre-zeroed array. */
-    int ci, access_rows;
-    jpeg_component_info *compptr;
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      access_rows = compptr->v_samp_factor;
-#ifdef BLOCK_SMOOTHING_SUPPORTED
-      /* If block smoothing could be used, need a bigger window */
-      if (cinfo->progressive_mode)
-	access_rows *= 3;
-#endif
-      coef->whole_image[ci] = (*cinfo->mem->request_virt_barray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, TRUE,
-	 (JDIMENSION) jround_up((long) compptr->width_in_blocks,
-				(long) compptr->h_samp_factor),
-	 (JDIMENSION) jround_up((long) compptr->height_in_blocks,
-				(long) compptr->v_samp_factor),
-	 (JDIMENSION) access_rows);
-    }
-    coef->pub.consume_data = consume_data;
-    coef->pub.decompress_data = decompress_data;
-    coef->pub.coef_arrays = coef->whole_image; /* link to virtual arrays */
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-  } else {
-    /* We only need a single-MCU buffer. */
-    JBLOCKROW buffer;
-    int i;
-
-    buffer = (JBLOCKROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK));
-    for (i = 0; i < D_MAX_BLOCKS_IN_MCU; i++) {
-      coef->MCU_buffer[i] = buffer + i;
-    }
-    if (cinfo->lim_Se == 0)	/* DC only case: want to bypass later */
-      FMEMZERO((void FAR *) buffer,
-	       (size_t) (D_MAX_BLOCKS_IN_MCU * SIZEOF(JBLOCK)));
-    coef->pub.consume_data = dummy_consume_data;
-    coef->pub.decompress_data = decompress_onepass;
-    coef->pub.coef_arrays = NULL; /* flag for no virtual arrays */
-  }
-}
--- a/DoConfig/fltk/jpeg/jdcolor.c
+++ /dev/null
@@ -1,748 +1,0 @@
-/*
- * jdcolor.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2011-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains output colorspace conversion routines.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_deconverter pub; /* public fields */
-
-  /* Private state for YCbCr->RGB and BG_YCC->RGB conversion */
-  int * Cr_r_tab;		/* => table for Cr to R conversion */
-  int * Cb_b_tab;		/* => table for Cb to B conversion */
-  INT32 * Cr_g_tab;		/* => table for Cr to G conversion */
-  INT32 * Cb_g_tab;		/* => table for Cb to G conversion */
-
-  JSAMPLE * range_limit; /* pointer to normal sample range limit table, */
-		     /* or extended sample range limit table for BG_YCC */
-
-  /* Private state for RGB->Y conversion */
-  INT32 * rgb_y_tab;		/* => table for RGB to Y conversion */
-} my_color_deconverter;
-
-typedef my_color_deconverter * my_cconvert_ptr;
-
-
-/***************  YCbCr -> RGB conversion: most common case **************/
-/*************** BG_YCC -> RGB conversion: less common case **************/
-/***************    RGB -> Y   conversion: less common case **************/
-
-/*
- * YCbCr is defined per Recommendation ITU-R BT.601-7 (03/2011),
- * previously known as Recommendation CCIR 601-1, except that Cb and Cr
- * are normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
- * sRGB (standard RGB color space) is defined per IEC 61966-2-1:1999.
- * sYCC (standard luma-chroma-chroma color space with extended gamut)
- * is defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex F.
- * bg-sRGB and bg-sYCC (big gamut standard color spaces)
- * are defined per IEC 61966-2-1:1999 Amendment A1:2003 Annex G.
- * Note that the derived conversion coefficients given in some of these
- * documents are imprecise.  The general conversion equations are
- *
- *	R = Y + K * (1 - Kr) * Cr
- *	G = Y - K * (Kb * (1 - Kb) * Cb + Kr * (1 - Kr) * Cr) / (1 - Kr - Kb)
- *	B = Y + K * (1 - Kb) * Cb
- *
- *	Y = Kr * R + (1 - Kr - Kb) * G + Kb * B
- *
- * With Kr = 0.299 and Kb = 0.114 (derived according to SMPTE RP 177-1993
- * from the 1953 FCC NTSC primaries and CIE Illuminant C), K = 2 for sYCC,
- * the conversion equations to be implemented are therefore
- *
- *	R = Y + 1.402 * Cr
- *	G = Y - 0.344136286 * Cb - 0.714136286 * Cr
- *	B = Y + 1.772 * Cb
- *
- *	Y = 0.299 * R + 0.587 * G + 0.114 * B
- *
- * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
- * For bg-sYCC, with K = 4, the equations are
- *
- *	R = Y + 2.804 * Cr
- *	G = Y - 0.688272572 * Cb - 1.428272572 * Cr
- *	B = Y + 3.544 * Cb
- *
- * To avoid floating-point arithmetic, we represent the fractional constants
- * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
- * the products by 2^16, with appropriate rounding, to get the correct answer.
- * Notice that Y, being an integral input, does not contribute any fraction
- * so it need not participate in the rounding.
- *
- * For even more speed, we avoid doing any multiplications in the inner loop
- * by precalculating the constants times Cb and Cr for all possible values.
- * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
- * for 9-bit to 12-bit samples it is still acceptable.  It's not very
- * reasonable for 16-bit samples, but if you want lossless storage you
- * shouldn't be changing colorspace anyway.
- * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
- * values for the G calculation are left scaled up, since we must add them
- * together before rounding.
- */
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-/* We allocate one big table for RGB->Y conversion and divide it up into
- * three parts, instead of doing three alloc_small requests.  This lets us
- * use a single table base address, which can be held in a register in the
- * inner loops on many machines (more than can hold all three addresses,
- * anyway).
- */
-
-#define R_Y_OFF		0			/* offset to R => Y section */
-#define G_Y_OFF		(1*(MAXJSAMPLE+1))	/* offset to G => Y section */
-#define B_Y_OFF		(2*(MAXJSAMPLE+1))	/* etc. */
-#define TABLE_SIZE	(3*(MAXJSAMPLE+1))
-
-
-/*
- * Initialize tables for YCbCr->RGB and BG_YCC->RGB colorspace conversion.
- */
-
-LOCAL(void)
-build_ycc_rgb_table (j_decompress_ptr cinfo)
-/* Normal case, sYCC */
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  int i;
-  INT32 x;
-  SHIFT_TEMPS
-
-  cconvert->Cr_r_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cb_b_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cr_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-  cconvert->Cb_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-
-  cconvert->range_limit = cinfo->sample_range_limit;
-
-  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
-    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
-    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
-    /* Cr=>R value is nearest int to 1.402 * x */
-    cconvert->Cr_r_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.402) * x + ONE_HALF, SCALEBITS);
-    /* Cb=>B value is nearest int to 1.772 * x */
-    cconvert->Cb_b_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.772) * x + ONE_HALF, SCALEBITS);
-    /* Cr=>G value is scaled-up -0.714136286 * x */
-    cconvert->Cr_g_tab[i] = (- FIX(0.714136286)) * x;
-    /* Cb=>G value is scaled-up -0.344136286 * x */
-    /* We also add in ONE_HALF so that need not do it in inner loop */
-    cconvert->Cb_g_tab[i] = (- FIX(0.344136286)) * x + ONE_HALF;
-  }
-}
-
-
-LOCAL(void)
-build_bg_ycc_rgb_table (j_decompress_ptr cinfo)
-/* Wide gamut case, bg-sYCC */
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  int i;
-  INT32 x;
-  SHIFT_TEMPS
-
-  cconvert->Cr_r_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cb_b_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  cconvert->Cr_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-  cconvert->Cb_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-
-  cconvert->range_limit = (JSAMPLE *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				5 * (MAXJSAMPLE+1) * SIZEOF(JSAMPLE));
-
-  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
-    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
-    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
-    /* Cr=>R value is nearest int to 2.804 * x */
-    cconvert->Cr_r_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(2.804) * x + ONE_HALF, SCALEBITS);
-    /* Cb=>B value is nearest int to 3.544 * x */
-    cconvert->Cb_b_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(3.544) * x + ONE_HALF, SCALEBITS);
-    /* Cr=>G value is scaled-up -1.428272572 * x */
-    cconvert->Cr_g_tab[i] = (- FIX(1.428272572)) * x;
-    /* Cb=>G value is scaled-up -0.688272572 * x */
-    /* We also add in ONE_HALF so that need not do it in inner loop */
-    cconvert->Cb_g_tab[i] = (- FIX(0.688272572)) * x + ONE_HALF;
-  }
-
-  /* Cb and Cr portions can extend to double range in wide gamut case,
-   * so we prepare an appropriate extended range limit table.
-   */
-
-  /* First segment of range limit table: limit[x] = 0 for x < 0 */
-  MEMZERO(cconvert->range_limit, 2 * (MAXJSAMPLE+1) * SIZEOF(JSAMPLE));
-  cconvert->range_limit += 2 * (MAXJSAMPLE+1);
-  /* Main part of range limit table: limit[x] = x */
-  for (i = 0; i <= MAXJSAMPLE; i++)
-    cconvert->range_limit[i] = (JSAMPLE) i;
-  /* End of range limit table: limit[x] = MAXJSAMPLE for x > MAXJSAMPLE */
-  for (; i < 3 * (MAXJSAMPLE+1); i++)
-    cconvert->range_limit[i] = MAXJSAMPLE;
-}
-
-
-/*
- * Convert some rows of samples to the output colorspace.
- *
- * Note that we change from noninterleaved, one-plane-per-component format
- * to interleaved-pixel format.  The output buffer is therefore three times
- * as wide as the input buffer.
- * A starting row offset is provided only for the input buffer.  The caller
- * can easily adjust the passed output_buf value to accommodate any row
- * offset required on that side.
- */
-
-METHODDEF(void)
-ycc_rgb_convert (j_decompress_ptr cinfo,
-		 JSAMPIMAGE input_buf, JDIMENSION input_row,
-		 JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register int y, cb, cr;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cconvert->range_limit;
-  register int * Crrtab = cconvert->Cr_r_tab;
-  register int * Cbbtab = cconvert->Cb_b_tab;
-  register INT32 * Crgtab = cconvert->Cr_g_tab;
-  register INT32 * Cbgtab = cconvert->Cb_g_tab;
-  SHIFT_TEMPS
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      y  = GETJSAMPLE(inptr0[col]);
-      cb = GETJSAMPLE(inptr1[col]);
-      cr = GETJSAMPLE(inptr2[col]);
-      /* Range-limiting is essential due to noise introduced by DCT losses,
-       * for extended gamut (sYCC) and wide gamut (bg-sYCC) encodings.
-       */
-      outptr[RGB_RED]   = range_limit[y + Crrtab[cr]];
-      outptr[RGB_GREEN] = range_limit[y +
-			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
-						 SCALEBITS))];
-      outptr[RGB_BLUE]  = range_limit[y + Cbbtab[cb]];
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/**************** Cases other than YCC -> RGB ****************/
-
-
-/*
- * Initialize for RGB->grayscale colorspace conversion.
- */
-
-LOCAL(void)
-build_rgb_y_table (j_decompress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  INT32 * rgb_y_tab;
-  INT32 i;
-
-  /* Allocate and fill in the conversion tables. */
-  cconvert->rgb_y_tab = rgb_y_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(TABLE_SIZE * SIZEOF(INT32)));
-
-  for (i = 0; i <= MAXJSAMPLE; i++) {
-    rgb_y_tab[i+R_Y_OFF] = FIX(0.299) * i;
-    rgb_y_tab[i+G_Y_OFF] = FIX(0.587) * i;
-    rgb_y_tab[i+B_Y_OFF] = FIX(0.114) * i + ONE_HALF;
-  }
-}
-
-
-/*
- * Convert RGB to grayscale.
- */
-
-METHODDEF(void)
-rgb_gray_convert (j_decompress_ptr cinfo,
-		  JSAMPIMAGE input_buf, JDIMENSION input_row,
-		  JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register INT32 * ctab = cconvert->rgb_y_tab;
-  register int r, g, b;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr0[col]);
-      g = GETJSAMPLE(inptr1[col]);
-      b = GETJSAMPLE(inptr2[col]);
-      /* Y */
-      outptr[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-    }
-  }
-}
-
-
-/*
- * [R-G,G,B-G] to [R,G,B] conversion with modulo calculation
- * (inverse color transform).
- * This can be seen as an adaption of the general YCbCr->RGB
- * conversion equation with Kr = Kb = 0, while replacing the
- * normalization by modulo calculation.
- */
-
-METHODDEF(void)
-rgb1_rgb_convert (j_decompress_ptr cinfo,
-		  JSAMPIMAGE input_buf, JDIMENSION input_row,
-		  JSAMPARRAY output_buf, int num_rows)
-{
-  register int r, g, b;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr0[col]);
-      g = GETJSAMPLE(inptr1[col]);
-      b = GETJSAMPLE(inptr2[col]);
-      /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
-       * (modulo) operator is equivalent to the bitmask operator AND.
-       */
-      outptr[RGB_RED]   = (JSAMPLE) ((r + g - CENTERJSAMPLE) & MAXJSAMPLE);
-      outptr[RGB_GREEN] = (JSAMPLE) g;
-      outptr[RGB_BLUE]  = (JSAMPLE) ((b + g - CENTERJSAMPLE) & MAXJSAMPLE);
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * [R-G,G,B-G] to grayscale conversion with modulo calculation
- * (inverse color transform).
- */
-
-METHODDEF(void)
-rgb1_gray_convert (j_decompress_ptr cinfo,
-		   JSAMPIMAGE input_buf, JDIMENSION input_row,
-		   JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register INT32 * ctab = cconvert->rgb_y_tab;
-  register int r, g, b;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      r = GETJSAMPLE(inptr0[col]);
-      g = GETJSAMPLE(inptr1[col]);
-      b = GETJSAMPLE(inptr2[col]);
-      /* Assume that MAXJSAMPLE+1 is a power of 2, so that the MOD
-       * (modulo) operator is equivalent to the bitmask operator AND.
-       */
-      r = (r + g - CENTERJSAMPLE) & MAXJSAMPLE;
-      b = (b + g - CENTERJSAMPLE) & MAXJSAMPLE;
-      /* Y */
-      outptr[col] = (JSAMPLE)
-		((ctab[r+R_Y_OFF] + ctab[g+G_Y_OFF] + ctab[b+B_Y_OFF])
-		 >> SCALEBITS);
-    }
-  }
-}
-
-
-/*
- * No colorspace change, but conversion from separate-planes
- * to interleaved representation.
- */
-
-METHODDEF(void)
-rgb_convert (j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION input_row,
-	     JSAMPARRAY output_buf, int num_rows)
-{
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      /* We can dispense with GETJSAMPLE() here */
-      outptr[RGB_RED]   = inptr0[col];
-      outptr[RGB_GREEN] = inptr1[col];
-      outptr[RGB_BLUE]  = inptr2[col];
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Color conversion for no colorspace change: just copy the data,
- * converting from separate-planes to interleaved representation.
- */
-
-METHODDEF(void)
-null_convert (j_decompress_ptr cinfo,
-	      JSAMPIMAGE input_buf, JDIMENSION input_row,
-	      JSAMPARRAY output_buf, int num_rows)
-{
-  int ci;
-  register int nc = cinfo->num_components;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    for (ci = 0; ci < nc; ci++) {
-      inptr = input_buf[ci][input_row];
-      outptr = output_buf[0] + ci;
-      for (col = 0; col < num_cols; col++) {
-	*outptr = *inptr++;	/* needn't bother with GETJSAMPLE() here */
-	outptr += nc;
-      }
-    }
-    input_row++;
-    output_buf++;
-  }
-}
-
-
-/*
- * Color conversion for grayscale: just copy the data.
- * This also works for YCC -> grayscale conversion, in which
- * we just copy the Y (luminance) component and ignore chrominance.
- */
-
-METHODDEF(void)
-grayscale_convert (j_decompress_ptr cinfo,
-		   JSAMPIMAGE input_buf, JDIMENSION input_row,
-		   JSAMPARRAY output_buf, int num_rows)
-{
-  jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0,
-		    num_rows, cinfo->output_width);
-}
-
-
-/*
- * Convert grayscale to RGB: just duplicate the graylevel three times.
- * This is provided to support applications that don't want to cope
- * with grayscale as a separate case.
- */
-
-METHODDEF(void)
-gray_rgb_convert (j_decompress_ptr cinfo,
-		  JSAMPIMAGE input_buf, JDIMENSION input_row,
-		  JSAMPARRAY output_buf, int num_rows)
-{
-  register JSAMPROW outptr;
-  register JSAMPROW inptr;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-
-  while (--num_rows >= 0) {
-    inptr = input_buf[0][input_row++];
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      /* We can dispense with GETJSAMPLE() here */
-      outptr[RGB_RED] = outptr[RGB_GREEN] = outptr[RGB_BLUE] = inptr[col];
-      outptr += RGB_PIXELSIZE;
-    }
-  }
-}
-
-
-/*
- * Adobe-style YCCK->CMYK conversion.
- * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
- * conversion as above, while passing K (black) unchanged.
- * We assume build_ycc_rgb_table has been called.
- */
-
-METHODDEF(void)
-ycck_cmyk_convert (j_decompress_ptr cinfo,
-		   JSAMPIMAGE input_buf, JDIMENSION input_row,
-		   JSAMPARRAY output_buf, int num_rows)
-{
-  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
-  register int y, cb, cr;
-  register JSAMPROW outptr;
-  register JSAMPROW inptr0, inptr1, inptr2, inptr3;
-  register JDIMENSION col;
-  JDIMENSION num_cols = cinfo->output_width;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  register int * Crrtab = cconvert->Cr_r_tab;
-  register int * Cbbtab = cconvert->Cb_b_tab;
-  register INT32 * Crgtab = cconvert->Cr_g_tab;
-  register INT32 * Cbgtab = cconvert->Cb_g_tab;
-  SHIFT_TEMPS
-
-  while (--num_rows >= 0) {
-    inptr0 = input_buf[0][input_row];
-    inptr1 = input_buf[1][input_row];
-    inptr2 = input_buf[2][input_row];
-    inptr3 = input_buf[3][input_row];
-    input_row++;
-    outptr = *output_buf++;
-    for (col = 0; col < num_cols; col++) {
-      y  = GETJSAMPLE(inptr0[col]);
-      cb = GETJSAMPLE(inptr1[col]);
-      cr = GETJSAMPLE(inptr2[col]);
-      /* Range-limiting is essential due to noise introduced by DCT losses,
-       * and for extended gamut encodings (sYCC).
-       */
-      outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])];	/* red */
-      outptr[1] = range_limit[MAXJSAMPLE - (y +			/* green */
-			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
-						 SCALEBITS)))];
-      outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])];	/* blue */
-      /* K passes through unchanged */
-      outptr[3] = inptr3[col];	/* don't need GETJSAMPLE here */
-      outptr += 4;
-    }
-  }
-}
-
-
-/*
- * Empty method for start_pass.
- */
-
-METHODDEF(void)
-start_pass_dcolor (j_decompress_ptr cinfo)
-{
-  /* no work needed */
-}
-
-
-/*
- * Module initialization routine for output colorspace conversion.
- */
-
-GLOBAL(void)
-jinit_color_deconverter (j_decompress_ptr cinfo)
-{
-  my_cconvert_ptr cconvert;
-  int ci;
-
-  cconvert = (my_cconvert_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_color_deconverter));
-  cinfo->cconvert = &cconvert->pub;
-  cconvert->pub.start_pass = start_pass_dcolor;
-
-  /* Make sure num_components agrees with jpeg_color_space */
-  switch (cinfo->jpeg_color_space) {
-  case JCS_GRAYSCALE:
-    if (cinfo->num_components != 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  case JCS_RGB:
-  case JCS_YCbCr:
-  case JCS_BG_RGB:
-  case JCS_BG_YCC:
-    if (cinfo->num_components != 3)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  case JCS_CMYK:
-  case JCS_YCCK:
-    if (cinfo->num_components != 4)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-
-  default:			/* JCS_UNKNOWN can be anything */
-    if (cinfo->num_components < 1)
-      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
-    break;
-  }
-
-  /* Support color transform only for RGB colorspaces */
-  if (cinfo->color_transform &&
-      cinfo->jpeg_color_space != JCS_RGB &&
-      cinfo->jpeg_color_space != JCS_BG_RGB)
-    ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-
-  /* Set out_color_components and conversion method based on requested space.
-   * Also clear the component_needed flags for any unused components,
-   * so that earlier pipeline stages can avoid useless computation.
-   */
-
-  switch (cinfo->out_color_space) {
-  case JCS_GRAYSCALE:
-    cinfo->out_color_components = 1;
-    switch (cinfo->jpeg_color_space) {
-    case JCS_GRAYSCALE:
-    case JCS_YCbCr:
-    case JCS_BG_YCC:
-      cconvert->pub.color_convert = grayscale_convert;
-      /* For color->grayscale conversion, only the Y (0) component is needed */
-      for (ci = 1; ci < cinfo->num_components; ci++)
-	cinfo->comp_info[ci].component_needed = FALSE;
-      break;
-    case JCS_RGB:
-      switch (cinfo->color_transform) {
-      case JCT_NONE:
-	cconvert->pub.color_convert = rgb_gray_convert;
-	break;
-      case JCT_SUBTRACT_GREEN:
-	cconvert->pub.color_convert = rgb1_gray_convert;
-	break;
-      default:
-	ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-      }
-      build_rgb_y_table(cinfo);
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  case JCS_RGB:
-    cinfo->out_color_components = RGB_PIXELSIZE;
-    switch (cinfo->jpeg_color_space) {
-    case JCS_GRAYSCALE:
-      cconvert->pub.color_convert = gray_rgb_convert;
-      break;
-    case JCS_YCbCr:
-      cconvert->pub.color_convert = ycc_rgb_convert;
-      build_ycc_rgb_table(cinfo);
-      break;
-    case JCS_BG_YCC:
-      cconvert->pub.color_convert = ycc_rgb_convert;
-      build_bg_ycc_rgb_table(cinfo);
-      break;
-    case JCS_RGB:
-      switch (cinfo->color_transform) {
-      case JCT_NONE:
-	cconvert->pub.color_convert = rgb_convert;
-	break;
-      case JCT_SUBTRACT_GREEN:
-	cconvert->pub.color_convert = rgb1_rgb_convert;
-	break;
-      default:
-	ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-      }
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  case JCS_BG_RGB:
-    cinfo->out_color_components = RGB_PIXELSIZE;
-    if (cinfo->jpeg_color_space == JCS_BG_RGB) {
-      switch (cinfo->color_transform) {
-      case JCT_NONE:
-	cconvert->pub.color_convert = rgb_convert;
-	break;
-      case JCT_SUBTRACT_GREEN:
-	cconvert->pub.color_convert = rgb1_rgb_convert;
-	break;
-      default:
-	ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-      }
-    } else
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-
-  case JCS_CMYK:
-    cinfo->out_color_components = 4;
-    switch (cinfo->jpeg_color_space) {
-    case JCS_YCCK:
-      cconvert->pub.color_convert = ycck_cmyk_convert;
-      build_ycc_rgb_table(cinfo);
-      break;
-    case JCS_CMYK:
-      cconvert->pub.color_convert = null_convert;
-      break;
-    default:
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    }
-    break;
-
-  default:
-    /* Permit null conversion to same output space */
-    if (cinfo->out_color_space == cinfo->jpeg_color_space) {
-      cinfo->out_color_components = cinfo->num_components;
-      cconvert->pub.color_convert = null_convert;
-    } else			/* unsupported non-null conversion */
-      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-    break;
-  }
-
-  if (cinfo->quantize_colors)
-    cinfo->output_components = 1; /* single colormapped output component */
-  else
-    cinfo->output_components = cinfo->out_color_components;
-}
--- a/DoConfig/fltk/jpeg/jdct.h
+++ /dev/null
@@ -1,393 +1,0 @@
-/*
- * jdct.h
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file contains common declarations for the forward and
- * inverse DCT modules.  These declarations are private to the DCT managers
- * (jcdctmgr.c, jddctmgr.c) and the individual DCT algorithms.
- * The individual DCT algorithms are kept in separate files to ease 
- * machine-dependent tuning (e.g., assembly coding).
- */
-
-
-/*
- * A forward DCT routine is given a pointer to an input sample array and
- * a pointer to a work area of type DCTELEM[]; the DCT is to be performed
- * in-place in that buffer.  Type DCTELEM is int for 8-bit samples, INT32
- * for 12-bit samples.  (NOTE: Floating-point DCT implementations use an
- * array of type FAST_FLOAT, instead.)
- * The input data is to be fetched from the sample array starting at a
- * specified column.  (Any row offset needed will be applied to the array
- * pointer before it is passed to the FDCT code.)
- * Note that the number of samples fetched by the FDCT routine is
- * DCT_h_scaled_size * DCT_v_scaled_size.
- * The DCT outputs are returned scaled up by a factor of 8; they therefore
- * have a range of +-8K for 8-bit data, +-128K for 12-bit data.  This
- * convention improves accuracy in integer implementations and saves some
- * work in floating-point ones.
- * Quantization of the output coefficients is done by jcdctmgr.c.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef int DCTELEM;		/* 16 or 32 bits is fine */
-#else
-typedef INT32 DCTELEM;		/* must have 32 bits */
-#endif
-
-typedef JMETHOD(void, forward_DCT_method_ptr, (DCTELEM * data,
-					       JSAMPARRAY sample_data,
-					       JDIMENSION start_col));
-typedef JMETHOD(void, float_DCT_method_ptr, (FAST_FLOAT * data,
-					     JSAMPARRAY sample_data,
-					     JDIMENSION start_col));
-
-
-/*
- * An inverse DCT routine is given a pointer to the input JBLOCK and a pointer
- * to an output sample array.  The routine must dequantize the input data as
- * well as perform the IDCT; for dequantization, it uses the multiplier table
- * pointed to by compptr->dct_table.  The output data is to be placed into the
- * sample array starting at a specified column.  (Any row offset needed will
- * be applied to the array pointer before it is passed to the IDCT code.)
- * Note that the number of samples emitted by the IDCT routine is
- * DCT_h_scaled_size * DCT_v_scaled_size.
- */
-
-/* typedef inverse_DCT_method_ptr is declared in jpegint.h */
-
-/*
- * Each IDCT routine has its own ideas about the best dct_table element type.
- */
-
-typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
-#if BITS_IN_JSAMPLE == 8
-typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
-#define IFAST_SCALE_BITS  2	/* fractional bits in scale factors */
-#else
-typedef INT32 IFAST_MULT_TYPE;	/* need 32 bits for scaled quantizers */
-#define IFAST_SCALE_BITS  13	/* fractional bits in scale factors */
-#endif
-typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
-
-
-/*
- * Each IDCT routine is responsible for range-limiting its results and
- * converting them to unsigned form (0..MAXJSAMPLE).  The raw outputs could
- * be quite far out of range if the input data is corrupt, so a bulletproof
- * range-limiting step is required.  We use a mask-and-table-lookup method
- * to do the combined operations quickly.  See the comments with
- * prepare_range_limit_table (in jdmaster.c) for more info.
- */
-
-#define IDCT_range_limit(cinfo)  ((cinfo)->sample_range_limit + CENTERJSAMPLE)
-
-#define RANGE_MASK  (MAXJSAMPLE * 4 + 3) /* 2 bits wider than legal samples */
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_fdct_islow		jFDislow
-#define jpeg_fdct_ifast		jFDifast
-#define jpeg_fdct_float		jFDfloat
-#define jpeg_fdct_7x7		jFD7x7
-#define jpeg_fdct_6x6		jFD6x6
-#define jpeg_fdct_5x5		jFD5x5
-#define jpeg_fdct_4x4		jFD4x4
-#define jpeg_fdct_3x3		jFD3x3
-#define jpeg_fdct_2x2		jFD2x2
-#define jpeg_fdct_1x1		jFD1x1
-#define jpeg_fdct_9x9		jFD9x9
-#define jpeg_fdct_10x10		jFD10x10
-#define jpeg_fdct_11x11		jFD11x11
-#define jpeg_fdct_12x12		jFD12x12
-#define jpeg_fdct_13x13		jFD13x13
-#define jpeg_fdct_14x14		jFD14x14
-#define jpeg_fdct_15x15		jFD15x15
-#define jpeg_fdct_16x16		jFD16x16
-#define jpeg_fdct_16x8		jFD16x8
-#define jpeg_fdct_14x7		jFD14x7
-#define jpeg_fdct_12x6		jFD12x6
-#define jpeg_fdct_10x5		jFD10x5
-#define jpeg_fdct_8x4		jFD8x4
-#define jpeg_fdct_6x3		jFD6x3
-#define jpeg_fdct_4x2		jFD4x2
-#define jpeg_fdct_2x1		jFD2x1
-#define jpeg_fdct_8x16		jFD8x16
-#define jpeg_fdct_7x14		jFD7x14
-#define jpeg_fdct_6x12		jFD6x12
-#define jpeg_fdct_5x10		jFD5x10
-#define jpeg_fdct_4x8		jFD4x8
-#define jpeg_fdct_3x6		jFD3x6
-#define jpeg_fdct_2x4		jFD2x4
-#define jpeg_fdct_1x2		jFD1x2
-#define jpeg_idct_islow		jRDislow
-#define jpeg_idct_ifast		jRDifast
-#define jpeg_idct_float		jRDfloat
-#define jpeg_idct_7x7		jRD7x7
-#define jpeg_idct_6x6		jRD6x6
-#define jpeg_idct_5x5		jRD5x5
-#define jpeg_idct_4x4		jRD4x4
-#define jpeg_idct_3x3		jRD3x3
-#define jpeg_idct_2x2		jRD2x2
-#define jpeg_idct_1x1		jRD1x1
-#define jpeg_idct_9x9		jRD9x9
-#define jpeg_idct_10x10		jRD10x10
-#define jpeg_idct_11x11		jRD11x11
-#define jpeg_idct_12x12		jRD12x12
-#define jpeg_idct_13x13		jRD13x13
-#define jpeg_idct_14x14		jRD14x14
-#define jpeg_idct_15x15		jRD15x15
-#define jpeg_idct_16x16		jRD16x16
-#define jpeg_idct_16x8		jRD16x8
-#define jpeg_idct_14x7		jRD14x7
-#define jpeg_idct_12x6		jRD12x6
-#define jpeg_idct_10x5		jRD10x5
-#define jpeg_idct_8x4		jRD8x4
-#define jpeg_idct_6x3		jRD6x3
-#define jpeg_idct_4x2		jRD4x2
-#define jpeg_idct_2x1		jRD2x1
-#define jpeg_idct_8x16		jRD8x16
-#define jpeg_idct_7x14		jRD7x14
-#define jpeg_idct_6x12		jRD6x12
-#define jpeg_idct_5x10		jRD5x10
-#define jpeg_idct_4x8		jRD4x8
-#define jpeg_idct_3x6		jRD3x8
-#define jpeg_idct_2x4		jRD2x4
-#define jpeg_idct_1x2		jRD1x2
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-/* Extern declarations for the forward and inverse DCT routines. */
-
-EXTERN(void) jpeg_fdct_islow
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_ifast
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_float
-    JPP((FAST_FLOAT * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_7x7
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_6x6
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_5x5
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_4x4
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_3x3
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_2x2
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_1x1
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_9x9
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_10x10
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_11x11
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_12x12
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_13x13
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_14x14
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_15x15
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_16x16
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_16x8
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_14x7
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_12x6
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_10x5
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_8x4
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_6x3
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_4x2
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_2x1
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_8x16
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_7x14
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_6x12
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_5x10
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_4x8
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_3x6
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_2x4
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-EXTERN(void) jpeg_fdct_1x2
-    JPP((DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col));
-
-EXTERN(void) jpeg_idct_islow
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_ifast
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_float
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_7x7
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_6x6
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_5x5
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_4x4
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_3x3
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_2x2
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_1x1
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_9x9
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_10x10
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_11x11
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_12x12
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_13x13
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_14x14
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_15x15
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_16x16
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_16x8
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_14x7
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_12x6
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_10x5
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_8x4
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_6x3
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_4x2
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_2x1
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_8x16
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_7x14
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_6x12
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_5x10
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_4x8
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_3x6
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_2x4
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-EXTERN(void) jpeg_idct_1x2
-    JPP((j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	 JCOEFPTR coef_block, JSAMPARRAY output_buf, JDIMENSION output_col));
-
-
-/*
- * Macros for handling fixed-point arithmetic; these are used by many
- * but not all of the DCT/IDCT modules.
- *
- * All values are expected to be of type INT32.
- * Fractional constants are scaled left by CONST_BITS bits.
- * CONST_BITS is defined within each module using these macros,
- * and may differ from one module to the next.
- */
-
-#define ONE	((INT32) 1)
-#define CONST_SCALE (ONE << CONST_BITS)
-
-/* Convert a positive real constant to an integer scaled by CONST_SCALE.
- * Caution: some C compilers fail to reduce "FIX(constant)" at compile time,
- * thus causing a lot of useless floating-point operations at run time.
- */
-
-#define FIX(x)	((INT32) ((x) * CONST_SCALE + 0.5))
-
-/* Descale and correctly round an INT32 value that's scaled by N bits.
- * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
- * the fudge factor is correct for either sign of X.
- */
-
-#define DESCALE(x,n)  RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * This macro is used only when the two inputs will actually be no more than
- * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
- * full 32x32 multiply.  This provides a useful speedup on many machines.
- * Unfortunately there is no way to specify a 16x16->32 multiply portably
- * in C, but some C compilers will do the right thing if you provide the
- * correct combination of casts.
- */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT16) (const)))
-#endif
-#ifdef SHORTxLCONST_32		/* known to work with Microsoft C 6.0 */
-#define MULTIPLY16C16(var,const)  (((INT16) (var)) * ((INT32) (const)))
-#endif
-
-#ifndef MULTIPLY16C16		/* default definition */
-#define MULTIPLY16C16(var,const)  ((var) * (const))
-#endif
-
-/* Same except both inputs are variables. */
-
-#ifdef SHORTxSHORT_32		/* may work if 'int' is 32 bits */
-#define MULTIPLY16V16(var1,var2)  (((INT16) (var1)) * ((INT16) (var2)))
-#endif
-
-#ifndef MULTIPLY16V16		/* default definition */
-#define MULTIPLY16V16(var1,var2)  ((var1) * (var2))
-#endif
--- a/DoConfig/fltk/jpeg/jddctmgr.c
+++ /dev/null
@@ -1,384 +1,0 @@
-/*
- * jddctmgr.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the inverse-DCT management logic.
- * This code selects a particular IDCT implementation to be used,
- * and it performs related housekeeping chores.  No code in this file
- * is executed per IDCT step, only during output pass setup.
- *
- * Note that the IDCT routines are responsible for performing coefficient
- * dequantization as well as the IDCT proper.  This module sets up the
- * dequantization multiplier table needed by the IDCT routine.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-
-/*
- * The decompressor input side (jdinput.c) saves away the appropriate
- * quantization table for each component at the start of the first scan
- * involving that component.  (This is necessary in order to correctly
- * decode files that reuse Q-table slots.)
- * When we are ready to make an output pass, the saved Q-table is converted
- * to a multiplier table that will actually be used by the IDCT routine.
- * The multiplier table contents are IDCT-method-dependent.  To support
- * application changes in IDCT method between scans, we can remake the
- * multiplier tables if necessary.
- * In buffered-image mode, the first output pass may occur before any data
- * has been seen for some components, and thus before their Q-tables have
- * been saved away.  To handle this case, multiplier tables are preset
- * to zeroes; the result of the IDCT will be a neutral gray level.
- */
-
-
-/* Private subobject for this module */
-
-typedef struct {
-  struct jpeg_inverse_dct pub;	/* public fields */
-
-  /* This array contains the IDCT method code that each multiplier table
-   * is currently set up for, or -1 if it's not yet set up.
-   * The actual multiplier tables are pointed to by dct_table in the
-   * per-component comp_info structures.
-   */
-  int cur_method[MAX_COMPONENTS];
-} my_idct_controller;
-
-typedef my_idct_controller * my_idct_ptr;
-
-
-/* Allocated multiplier tables: big enough for any supported variant */
-
-typedef union {
-  ISLOW_MULT_TYPE islow_array[DCTSIZE2];
-#ifdef DCT_IFAST_SUPPORTED
-  IFAST_MULT_TYPE ifast_array[DCTSIZE2];
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-  FLOAT_MULT_TYPE float_array[DCTSIZE2];
-#endif
-} multiplier_table;
-
-
-/* The current scaled-IDCT routines require ISLOW-style multiplier tables,
- * so be sure to compile that code if either ISLOW or SCALING is requested.
- */
-#ifdef DCT_ISLOW_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#else
-#ifdef IDCT_SCALING_SUPPORTED
-#define PROVIDE_ISLOW_TABLES
-#endif
-#endif
-
-
-/*
- * Prepare for an output pass.
- * Here we select the proper IDCT routine for each component and build
- * a matching multiplier table.
- */
-
-METHODDEF(void)
-start_pass (j_decompress_ptr cinfo)
-{
-  my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
-  int ci, i;
-  jpeg_component_info *compptr;
-  int method = 0;
-  inverse_DCT_method_ptr method_ptr = NULL;
-  JQUANT_TBL * qtbl;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Select the proper IDCT routine for this component's scaling */
-    switch ((compptr->DCT_h_scaled_size << 8) + compptr->DCT_v_scaled_size) {
-#ifdef IDCT_SCALING_SUPPORTED
-    case ((1 << 8) + 1):
-      method_ptr = jpeg_idct_1x1;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((2 << 8) + 2):
-      method_ptr = jpeg_idct_2x2;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((3 << 8) + 3):
-      method_ptr = jpeg_idct_3x3;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((4 << 8) + 4):
-      method_ptr = jpeg_idct_4x4;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((5 << 8) + 5):
-      method_ptr = jpeg_idct_5x5;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((6 << 8) + 6):
-      method_ptr = jpeg_idct_6x6;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((7 << 8) + 7):
-      method_ptr = jpeg_idct_7x7;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((9 << 8) + 9):
-      method_ptr = jpeg_idct_9x9;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((10 << 8) + 10):
-      method_ptr = jpeg_idct_10x10;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((11 << 8) + 11):
-      method_ptr = jpeg_idct_11x11;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((12 << 8) + 12):
-      method_ptr = jpeg_idct_12x12;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((13 << 8) + 13):
-      method_ptr = jpeg_idct_13x13;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((14 << 8) + 14):
-      method_ptr = jpeg_idct_14x14;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((15 << 8) + 15):
-      method_ptr = jpeg_idct_15x15;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((16 << 8) + 16):
-      method_ptr = jpeg_idct_16x16;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((16 << 8) + 8):
-      method_ptr = jpeg_idct_16x8;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((14 << 8) + 7):
-      method_ptr = jpeg_idct_14x7;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((12 << 8) + 6):
-      method_ptr = jpeg_idct_12x6;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((10 << 8) + 5):
-      method_ptr = jpeg_idct_10x5;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((8 << 8) + 4):
-      method_ptr = jpeg_idct_8x4;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((6 << 8) + 3):
-      method_ptr = jpeg_idct_6x3;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((4 << 8) + 2):
-      method_ptr = jpeg_idct_4x2;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((2 << 8) + 1):
-      method_ptr = jpeg_idct_2x1;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((8 << 8) + 16):
-      method_ptr = jpeg_idct_8x16;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((7 << 8) + 14):
-      method_ptr = jpeg_idct_7x14;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((6 << 8) + 12):
-      method_ptr = jpeg_idct_6x12;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((5 << 8) + 10):
-      method_ptr = jpeg_idct_5x10;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((4 << 8) + 8):
-      method_ptr = jpeg_idct_4x8;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((3 << 8) + 6):
-      method_ptr = jpeg_idct_3x6;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((2 << 8) + 4):
-      method_ptr = jpeg_idct_2x4;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-    case ((1 << 8) + 2):
-      method_ptr = jpeg_idct_1x2;
-      method = JDCT_ISLOW;	/* jidctint uses islow-style table */
-      break;
-#endif
-    case ((DCTSIZE << 8) + DCTSIZE):
-      switch (cinfo->dct_method) {
-#ifdef DCT_ISLOW_SUPPORTED
-      case JDCT_ISLOW:
-	method_ptr = jpeg_idct_islow;
-	method = JDCT_ISLOW;
-	break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-      case JDCT_IFAST:
-	method_ptr = jpeg_idct_ifast;
-	method = JDCT_IFAST;
-	break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-      case JDCT_FLOAT:
-	method_ptr = jpeg_idct_float;
-	method = JDCT_FLOAT;
-	break;
-#endif
-      default:
-	ERREXIT(cinfo, JERR_NOT_COMPILED);
-	break;
-      }
-      break;
-    default:
-      ERREXIT2(cinfo, JERR_BAD_DCTSIZE,
-	       compptr->DCT_h_scaled_size, compptr->DCT_v_scaled_size);
-      break;
-    }
-    idct->pub.inverse_DCT[ci] = method_ptr;
-    /* Create multiplier table from quant table.
-     * However, we can skip this if the component is uninteresting
-     * or if we already built the table.  Also, if no quant table
-     * has yet been saved for the component, we leave the
-     * multiplier table all-zero; we'll be reading zeroes from the
-     * coefficient controller's buffer anyway.
-     */
-    if (! compptr->component_needed || idct->cur_method[ci] == method)
-      continue;
-    qtbl = compptr->quant_table;
-    if (qtbl == NULL)		/* happens if no data yet for component */
-      continue;
-    idct->cur_method[ci] = method;
-    switch (method) {
-#ifdef PROVIDE_ISLOW_TABLES
-    case JDCT_ISLOW:
-      {
-	/* For LL&M IDCT method, multipliers are equal to raw quantization
-	 * coefficients, but are stored as ints to ensure access efficiency.
-	 */
-	ISLOW_MULT_TYPE * ismtbl = (ISLOW_MULT_TYPE *) compptr->dct_table;
-	for (i = 0; i < DCTSIZE2; i++) {
-	  ismtbl[i] = (ISLOW_MULT_TYPE) qtbl->quantval[i];
-	}
-      }
-      break;
-#endif
-#ifdef DCT_IFAST_SUPPORTED
-    case JDCT_IFAST:
-      {
-	/* For AA&N IDCT method, multipliers are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * For integer operation, the multiplier table is to be scaled by
-	 * IFAST_SCALE_BITS.
-	 */
-	IFAST_MULT_TYPE * ifmtbl = (IFAST_MULT_TYPE *) compptr->dct_table;
-#define CONST_BITS 14
-	static const INT16 aanscales[DCTSIZE2] = {
-	  /* precomputed values scaled up by 14 bits */
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-	  21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-	  19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-	  16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-	  12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-	   8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-	   4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-	};
-	SHIFT_TEMPS
-
-	for (i = 0; i < DCTSIZE2; i++) {
-	  ifmtbl[i] = (IFAST_MULT_TYPE)
-	    DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
-				  (INT32) aanscales[i]),
-		    CONST_BITS-IFAST_SCALE_BITS);
-	}
-      }
-      break;
-#endif
-#ifdef DCT_FLOAT_SUPPORTED
-    case JDCT_FLOAT:
-      {
-	/* For float AA&N IDCT method, multipliers are equal to quantization
-	 * coefficients scaled by scalefactor[row]*scalefactor[col], where
-	 *   scalefactor[0] = 1
-	 *   scalefactor[k] = cos(k*PI/16) * sqrt(2)    for k=1..7
-	 * We apply a further scale factor of 1/8.
-	 */
-	FLOAT_MULT_TYPE * fmtbl = (FLOAT_MULT_TYPE *) compptr->dct_table;
-	int row, col;
-	static const double aanscalefactor[DCTSIZE] = {
-	  1.0, 1.387039845, 1.306562965, 1.175875602,
-	  1.0, 0.785694958, 0.541196100, 0.275899379
-	};
-
-	i = 0;
-	for (row = 0; row < DCTSIZE; row++) {
-	  for (col = 0; col < DCTSIZE; col++) {
-	    fmtbl[i] = (FLOAT_MULT_TYPE)
-	      ((double) qtbl->quantval[i] *
-	       aanscalefactor[row] * aanscalefactor[col] * 0.125);
-	    i++;
-	  }
-	}
-      }
-      break;
-#endif
-    default:
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-      break;
-    }
-  }
-}
-
-
-/*
- * Initialize IDCT manager.
- */
-
-GLOBAL(void)
-jinit_inverse_dct (j_decompress_ptr cinfo)
-{
-  my_idct_ptr idct;
-  int ci;
-  jpeg_component_info *compptr;
-
-  idct = (my_idct_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_idct_controller));
-  cinfo->idct = &idct->pub;
-  idct->pub.start_pass = start_pass;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Allocate and pre-zero a multiplier table for each component */
-    compptr->dct_table =
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(multiplier_table));
-    MEMZERO(compptr->dct_table, SIZEOF(multiplier_table));
-    /* Mark multiplier table not yet set up for any method */
-    idct->cur_method[ci] = -1;
-  }
-}
--- a/DoConfig/fltk/jpeg/jdhuff.c
+++ /dev/null
@@ -1,1554 +1,0 @@
-/*
- * jdhuff.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2006-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains Huffman entropy decoding routines.
- * Both sequential and progressive modes are supported in this single module.
- *
- * Much of the complexity here has to do with supporting input suspension.
- * If the data source module demands suspension, we want to be able to back
- * up to the start of the current MCU.  To do this, we copy state variables
- * into local working storage, and update them back to the permanent
- * storage only upon successful completion of an MCU.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Derived data constructed for each Huffman table */
-
-#define HUFF_LOOKAHEAD	8	/* # of bits of lookahead */
-
-typedef struct {
-  /* Basic tables: (element [0] of each array is unused) */
-  INT32 maxcode[18];		/* largest code of length k (-1 if none) */
-  /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
-  INT32 valoffset[17];		/* huffval[] offset for codes of length k */
-  /* valoffset[k] = huffval[] index of 1st symbol of code length k, less
-   * the smallest code of length k; so given a code of length k, the
-   * corresponding symbol is huffval[code + valoffset[k]]
-   */
-
-  /* Link to public Huffman table (needed only in jpeg_huff_decode) */
-  JHUFF_TBL *pub;
-
-  /* Lookahead tables: indexed by the next HUFF_LOOKAHEAD bits of
-   * the input data stream.  If the next Huffman code is no more
-   * than HUFF_LOOKAHEAD bits long, we can obtain its length and
-   * the corresponding symbol directly from these tables.
-   */
-  int look_nbits[1<<HUFF_LOOKAHEAD]; /* # bits, or 0 if too long */
-  UINT8 look_sym[1<<HUFF_LOOKAHEAD]; /* symbol, or unused */
-} d_derived_tbl;
-
-
-/*
- * Fetching the next N bits from the input stream is a time-critical operation
- * for the Huffman decoders.  We implement it with a combination of inline
- * macros and out-of-line subroutines.  Note that N (the number of bits
- * demanded at one time) never exceeds 15 for JPEG use.
- *
- * We read source bytes into get_buffer and dole out bits as needed.
- * If get_buffer already contains enough bits, they are fetched in-line
- * by the macros CHECK_BIT_BUFFER and GET_BITS.  When there aren't enough
- * bits, jpeg_fill_bit_buffer is called; it will attempt to fill get_buffer
- * as full as possible (not just to the number of bits needed; this
- * prefetching reduces the overhead cost of calling jpeg_fill_bit_buffer).
- * Note that jpeg_fill_bit_buffer may return FALSE to indicate suspension.
- * On TRUE return, jpeg_fill_bit_buffer guarantees that get_buffer contains
- * at least the requested number of bits --- dummy zeroes are inserted if
- * necessary.
- */
-
-typedef INT32 bit_buf_type;	/* type of bit-extraction buffer */
-#define BIT_BUF_SIZE  32	/* size of buffer in bits */
-
-/* If long is > 32 bits on your machine, and shifting/masking longs is
- * reasonably fast, making bit_buf_type be long and setting BIT_BUF_SIZE
- * appropriately should be a win.  Unfortunately we can't define the size
- * with something like  #define BIT_BUF_SIZE (sizeof(bit_buf_type)*8)
- * because not all machines measure sizeof in 8-bit bytes.
- */
-
-typedef struct {		/* Bitreading state saved across MCUs */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-} bitread_perm_state;
-
-typedef struct {		/* Bitreading working state within an MCU */
-  /* Current data source location */
-  /* We need a copy, rather than munging the original, in case of suspension */
-  const JOCTET * next_input_byte; /* => next byte to read from source */
-  size_t bytes_in_buffer;	/* # of bytes remaining in source buffer */
-  /* Bit input buffer --- note these values are kept in register variables,
-   * not in this struct, inside the inner loops.
-   */
-  bit_buf_type get_buffer;	/* current bit-extraction buffer */
-  int bits_left;		/* # of unused bits in it */
-  /* Pointer needed by jpeg_fill_bit_buffer. */
-  j_decompress_ptr cinfo;	/* back link to decompress master record */
-} bitread_working_state;
-
-/* Macros to declare and load/save bitread local variables. */
-#define BITREAD_STATE_VARS  \
-	register bit_buf_type get_buffer;  \
-	register int bits_left;  \
-	bitread_working_state br_state
-
-#define BITREAD_LOAD_STATE(cinfop,permstate)  \
-	br_state.cinfo = cinfop; \
-	br_state.next_input_byte = cinfop->src->next_input_byte; \
-	br_state.bytes_in_buffer = cinfop->src->bytes_in_buffer; \
-	get_buffer = permstate.get_buffer; \
-	bits_left = permstate.bits_left;
-
-#define BITREAD_SAVE_STATE(cinfop,permstate)  \
-	cinfop->src->next_input_byte = br_state.next_input_byte; \
-	cinfop->src->bytes_in_buffer = br_state.bytes_in_buffer; \
-	permstate.get_buffer = get_buffer; \
-	permstate.bits_left = bits_left
-
-/*
- * These macros provide the in-line portion of bit fetching.
- * Use CHECK_BIT_BUFFER to ensure there are N bits in get_buffer
- * before using GET_BITS, PEEK_BITS, or DROP_BITS.
- * The variables get_buffer and bits_left are assumed to be locals,
- * but the state struct might not be (jpeg_huff_decode needs this).
- *	CHECK_BIT_BUFFER(state,n,action);
- *		Ensure there are N bits in get_buffer; if suspend, take action.
- *      val = GET_BITS(n);
- *		Fetch next N bits.
- *      val = PEEK_BITS(n);
- *		Fetch next N bits without removing them from the buffer.
- *	DROP_BITS(n);
- *		Discard next N bits.
- * The value N should be a simple variable, not an expression, because it
- * is evaluated multiple times.
- */
-
-#define CHECK_BIT_BUFFER(state,nbits,action) \
-	{ if (bits_left < (nbits)) {  \
-	    if (! jpeg_fill_bit_buffer(&(state),get_buffer,bits_left,nbits))  \
-	      { action; }  \
-	    get_buffer = (state).get_buffer; bits_left = (state).bits_left; } }
-
-#define GET_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -= (nbits)))) & BIT_MASK(nbits))
-
-#define PEEK_BITS(nbits) \
-	(((int) (get_buffer >> (bits_left -  (nbits)))) & BIT_MASK(nbits))
-
-#define DROP_BITS(nbits) \
-	(bits_left -= (nbits))
-
-
-/*
- * Code for extracting next Huffman-coded symbol from input bit stream.
- * Again, this is time-critical and we make the main paths be macros.
- *
- * We use a lookahead table to process codes of up to HUFF_LOOKAHEAD bits
- * without looping.  Usually, more than 95% of the Huffman codes will be 8
- * or fewer bits long.  The few overlength codes are handled with a loop,
- * which need not be inline code.
- *
- * Notes about the HUFF_DECODE macro:
- * 1. Near the end of the data segment, we may fail to get enough bits
- *    for a lookahead.  In that case, we do it the hard way.
- * 2. If the lookahead table contains no entry, the next code must be
- *    more than HUFF_LOOKAHEAD bits long.
- * 3. jpeg_huff_decode returns -1 if forced to suspend.
- */
-
-#define HUFF_DECODE(result,state,htbl,failaction,slowlabel) \
-{ register int nb, look; \
-  if (bits_left < HUFF_LOOKAHEAD) { \
-    if (! jpeg_fill_bit_buffer(&state,get_buffer,bits_left, 0)) {failaction;} \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-    if (bits_left < HUFF_LOOKAHEAD) { \
-      nb = 1; goto slowlabel; \
-    } \
-  } \
-  look = PEEK_BITS(HUFF_LOOKAHEAD); \
-  if ((nb = htbl->look_nbits[look]) != 0) { \
-    DROP_BITS(nb); \
-    result = htbl->look_sym[look]; \
-  } else { \
-    nb = HUFF_LOOKAHEAD+1; \
-slowlabel: \
-    if ((result=jpeg_huff_decode(&state,get_buffer,bits_left,htbl,nb)) < 0) \
-	{ failaction; } \
-    get_buffer = state.get_buffer; bits_left = state.bits_left; \
-  } \
-}
-
-
-/*
- * Expanded entropy decoder object for Huffman decoding.
- *
- * The savable_state subrecord contains fields that change within an MCU,
- * but must not be updated permanently until we complete the MCU.
- */
-
-typedef struct {
-  unsigned int EOBRUN;			/* remaining EOBs in EOBRUN */
-  int last_dc_val[MAX_COMPS_IN_SCAN];	/* last DC coef for each component */
-} savable_state;
-
-/* This macro is to work around compilers with missing or broken
- * structure assignment.  You'll need to fix this code if you have
- * such a compiler and you change MAX_COMPS_IN_SCAN.
- */
-
-#ifndef NO_STRUCT_ASSIGN
-#define ASSIGN_STATE(dest,src)  ((dest) = (src))
-#else
-#if MAX_COMPS_IN_SCAN == 4
-#define ASSIGN_STATE(dest,src)  \
-	((dest).EOBRUN = (src).EOBRUN, \
-	 (dest).last_dc_val[0] = (src).last_dc_val[0], \
-	 (dest).last_dc_val[1] = (src).last_dc_val[1], \
-	 (dest).last_dc_val[2] = (src).last_dc_val[2], \
-	 (dest).last_dc_val[3] = (src).last_dc_val[3])
-#endif
-#endif
-
-
-typedef struct {
-  struct jpeg_entropy_decoder pub; /* public fields */
-
-  /* These fields are loaded into local variables at start of each MCU.
-   * In case of suspension, we exit WITHOUT updating them.
-   */
-  bitread_perm_state bitstate;	/* Bit buffer at start of MCU */
-  savable_state saved;		/* Other state at start of MCU */
-
-  /* These fields are NOT loaded into local working state. */
-  boolean insufficient_data;	/* set TRUE after emitting warning */
-  unsigned int restarts_to_go;	/* MCUs left in this restart interval */
-
-  /* Following two fields used only in progressive mode */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  d_derived_tbl * derived_tbls[NUM_HUFF_TBLS];
-
-  d_derived_tbl * ac_derived_tbl; /* active table during an AC scan */
-
-  /* Following fields used only in sequential mode */
-
-  /* Pointers to derived tables (these workspaces have image lifespan) */
-  d_derived_tbl * dc_derived_tbls[NUM_HUFF_TBLS];
-  d_derived_tbl * ac_derived_tbls[NUM_HUFF_TBLS];
-
-  /* Precalculated info set up by start_pass for use in decode_mcu: */
-
-  /* Pointers to derived tables to be used for each block within an MCU */
-  d_derived_tbl * dc_cur_tbls[D_MAX_BLOCKS_IN_MCU];
-  d_derived_tbl * ac_cur_tbls[D_MAX_BLOCKS_IN_MCU];
-  /* Whether we care about the DC and AC coefficient values for each block */
-  int coef_limit[D_MAX_BLOCKS_IN_MCU];
-} huff_entropy_decoder;
-
-typedef huff_entropy_decoder * huff_entropy_ptr;
-
-
-static const int jpeg_zigzag_order[8][8] = {
-  {  0,  1,  5,  6, 14, 15, 27, 28 },
-  {  2,  4,  7, 13, 16, 26, 29, 42 },
-  {  3,  8, 12, 17, 25, 30, 41, 43 },
-  {  9, 11, 18, 24, 31, 40, 44, 53 },
-  { 10, 19, 23, 32, 39, 45, 52, 54 },
-  { 20, 22, 33, 38, 46, 51, 55, 60 },
-  { 21, 34, 37, 47, 50, 56, 59, 61 },
-  { 35, 36, 48, 49, 57, 58, 62, 63 }
-};
-
-static const int jpeg_zigzag_order7[7][7] = {
-  {  0,  1,  5,  6, 14, 15, 27 },
-  {  2,  4,  7, 13, 16, 26, 28 },
-  {  3,  8, 12, 17, 25, 29, 38 },
-  {  9, 11, 18, 24, 30, 37, 39 },
-  { 10, 19, 23, 31, 36, 40, 45 },
-  { 20, 22, 32, 35, 41, 44, 46 },
-  { 21, 33, 34, 42, 43, 47, 48 }
-};
-
-static const int jpeg_zigzag_order6[6][6] = {
-  {  0,  1,  5,  6, 14, 15 },
-  {  2,  4,  7, 13, 16, 25 },
-  {  3,  8, 12, 17, 24, 26 },
-  {  9, 11, 18, 23, 27, 32 },
-  { 10, 19, 22, 28, 31, 33 },
-  { 20, 21, 29, 30, 34, 35 }
-};
-
-static const int jpeg_zigzag_order5[5][5] = {
-  {  0,  1,  5,  6, 14 },
-  {  2,  4,  7, 13, 15 },
-  {  3,  8, 12, 16, 21 },
-  {  9, 11, 17, 20, 22 },
-  { 10, 18, 19, 23, 24 }
-};
-
-static const int jpeg_zigzag_order4[4][4] = {
-  { 0,  1,  5,  6 },
-  { 2,  4,  7, 12 },
-  { 3,  8, 11, 13 },
-  { 9, 10, 14, 15 }
-};
-
-static const int jpeg_zigzag_order3[3][3] = {
-  { 0, 1, 5 },
-  { 2, 4, 6 },
-  { 3, 7, 8 }
-};
-
-static const int jpeg_zigzag_order2[2][2] = {
-  { 0, 1 },
-  { 2, 3 }
-};
-
-
-/*
- * Compute the derived values for a Huffman table.
- * This routine also performs some validation checks on the table.
- */
-
-LOCAL(void)
-jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno,
-			 d_derived_tbl ** pdtbl)
-{
-  JHUFF_TBL *htbl;
-  d_derived_tbl *dtbl;
-  int p, i, l, si, numsymbols;
-  int lookbits, ctr;
-  char huffsize[257];
-  unsigned int huffcode[257];
-  unsigned int code;
-
-  /* Note that huffsize[] and huffcode[] are filled in code-length order,
-   * paralleling the order of the symbols themselves in htbl->huffval[].
-   */
-
-  /* Find the input Huffman table */
-  if (tblno < 0 || tblno >= NUM_HUFF_TBLS)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-  htbl =
-    isDC ? cinfo->dc_huff_tbl_ptrs[tblno] : cinfo->ac_huff_tbl_ptrs[tblno];
-  if (htbl == NULL)
-    ERREXIT1(cinfo, JERR_NO_HUFF_TABLE, tblno);
-
-  /* Allocate a workspace if we haven't already done so. */
-  if (*pdtbl == NULL)
-    *pdtbl = (d_derived_tbl *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(d_derived_tbl));
-  dtbl = *pdtbl;
-  dtbl->pub = htbl;		/* fill in back link */
-  
-  /* Figure C.1: make table of Huffman code length for each symbol */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    i = (int) htbl->bits[l];
-    if (i < 0 || p + i > 256)	/* protect against table overrun */
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    while (i--)
-      huffsize[p++] = (char) l;
-  }
-  huffsize[p] = 0;
-  numsymbols = p;
-  
-  /* Figure C.2: generate the codes themselves */
-  /* We also validate that the counts represent a legal Huffman code tree. */
-  
-  code = 0;
-  si = huffsize[0];
-  p = 0;
-  while (huffsize[p]) {
-    while (((int) huffsize[p]) == si) {
-      huffcode[p++] = code;
-      code++;
-    }
-    /* code is now 1 more than the last code used for codelength si; but
-     * it must still fit in si bits, since no code is allowed to be all ones.
-     */
-    if (((INT32) code) >= (((INT32) 1) << si))
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    code <<= 1;
-    si++;
-  }
-
-  /* Figure F.15: generate decoding tables for bit-sequential decoding */
-
-  p = 0;
-  for (l = 1; l <= 16; l++) {
-    if (htbl->bits[l]) {
-      /* valoffset[l] = huffval[] index of 1st symbol of code length l,
-       * minus the minimum code of length l
-       */
-      dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p];
-      p += htbl->bits[l];
-      dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
-    } else {
-      dtbl->maxcode[l] = -1;	/* -1 if no codes of this length */
-    }
-  }
-  dtbl->maxcode[17] = 0xFFFFFL; /* ensures jpeg_huff_decode terminates */
-
-  /* Compute lookahead tables to speed up decoding.
-   * First we set all the table entries to 0, indicating "too long";
-   * then we iterate through the Huffman codes that are short enough and
-   * fill in all the entries that correspond to bit sequences starting
-   * with that code.
-   */
-
-  MEMZERO(dtbl->look_nbits, SIZEOF(dtbl->look_nbits));
-
-  p = 0;
-  for (l = 1; l <= HUFF_LOOKAHEAD; l++) {
-    for (i = 1; i <= (int) htbl->bits[l]; i++, p++) {
-      /* l = current code's length, p = its index in huffcode[] & huffval[]. */
-      /* Generate left-justified code followed by all possible bit sequences */
-      lookbits = huffcode[p] << (HUFF_LOOKAHEAD-l);
-      for (ctr = 1 << (HUFF_LOOKAHEAD-l); ctr > 0; ctr--) {
-	dtbl->look_nbits[lookbits] = l;
-	dtbl->look_sym[lookbits] = htbl->huffval[p];
-	lookbits++;
-      }
-    }
-  }
-
-  /* Validate symbols as being reasonable.
-   * For AC tables, we make no check, but accept all byte values 0..255.
-   * For DC tables, we require the symbols to be in range 0..15.
-   * (Tighter bounds could be applied depending on the data depth and mode,
-   * but this is sufficient to ensure safe decoding.)
-   */
-  if (isDC) {
-    for (i = 0; i < numsymbols; i++) {
-      int sym = htbl->huffval[i];
-      if (sym < 0 || sym > 15)
-	ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-    }
-  }
-}
-
-
-/*
- * Out-of-line code for bit fetching.
- * Note: current values of get_buffer and bits_left are passed as parameters,
- * but are returned in the corresponding fields of the state struct.
- *
- * On most machines MIN_GET_BITS should be 25 to allow the full 32-bit width
- * of get_buffer to be used.  (On machines with wider words, an even larger
- * buffer could be used.)  However, on some machines 32-bit shifts are
- * quite slow and take time proportional to the number of places shifted.
- * (This is true with most PC compilers, for instance.)  In this case it may
- * be a win to set MIN_GET_BITS to the minimum value of 15.  This reduces the
- * average shift distance at the cost of more calls to jpeg_fill_bit_buffer.
- */
-
-#ifdef SLOW_SHIFT_32
-#define MIN_GET_BITS  15	/* minimum allowable value */
-#else
-#define MIN_GET_BITS  (BIT_BUF_SIZE-7)
-#endif
-
-
-LOCAL(boolean)
-jpeg_fill_bit_buffer (bitread_working_state * state,
-		      register bit_buf_type get_buffer, register int bits_left,
-		      int nbits)
-/* Load up the bit buffer to a depth of at least nbits */
-{
-  /* Copy heavily used state fields into locals (hopefully registers) */
-  register const JOCTET * next_input_byte = state->next_input_byte;
-  register size_t bytes_in_buffer = state->bytes_in_buffer;
-  j_decompress_ptr cinfo = state->cinfo;
-
-  /* Attempt to load at least MIN_GET_BITS bits into get_buffer. */
-  /* (It is assumed that no request will be for more than that many bits.) */
-  /* We fail to do so only if we hit a marker or are forced to suspend. */
-
-  if (cinfo->unread_marker == 0) {	/* cannot advance past a marker */
-    while (bits_left < MIN_GET_BITS) {
-      register int c;
-
-      /* Attempt to read a byte */
-      if (bytes_in_buffer == 0) {
-	if (! (*cinfo->src->fill_input_buffer) (cinfo))
-	  return FALSE;
-	next_input_byte = cinfo->src->next_input_byte;
-	bytes_in_buffer = cinfo->src->bytes_in_buffer;
-      }
-      bytes_in_buffer--;
-      c = GETJOCTET(*next_input_byte++);
-
-      /* If it's 0xFF, check and discard stuffed zero byte */
-      if (c == 0xFF) {
-	/* Loop here to discard any padding FF's on terminating marker,
-	 * so that we can save a valid unread_marker value.  NOTE: we will
-	 * accept multiple FF's followed by a 0 as meaning a single FF data
-	 * byte.  This data pattern is not valid according to the standard.
-	 */
-	do {
-	  if (bytes_in_buffer == 0) {
-	    if (! (*cinfo->src->fill_input_buffer) (cinfo))
-	      return FALSE;
-	    next_input_byte = cinfo->src->next_input_byte;
-	    bytes_in_buffer = cinfo->src->bytes_in_buffer;
-	  }
-	  bytes_in_buffer--;
-	  c = GETJOCTET(*next_input_byte++);
-	} while (c == 0xFF);
-
-	if (c == 0) {
-	  /* Found FF/00, which represents an FF data byte */
-	  c = 0xFF;
-	} else {
-	  /* Oops, it's actually a marker indicating end of compressed data.
-	   * Save the marker code for later use.
-	   * Fine point: it might appear that we should save the marker into
-	   * bitread working state, not straight into permanent state.  But
-	   * once we have hit a marker, we cannot need to suspend within the
-	   * current MCU, because we will read no more bytes from the data
-	   * source.  So it is OK to update permanent state right away.
-	   */
-	  cinfo->unread_marker = c;
-	  /* See if we need to insert some fake zero bits. */
-	  goto no_more_bytes;
-	}
-      }
-
-      /* OK, load c into get_buffer */
-      get_buffer = (get_buffer << 8) | c;
-      bits_left += 8;
-    } /* end while */
-  } else {
-  no_more_bytes:
-    /* We get here if we've read the marker that terminates the compressed
-     * data segment.  There should be enough bits in the buffer register
-     * to satisfy the request; if so, no problem.
-     */
-    if (nbits > bits_left) {
-      /* Uh-oh.  Report corrupted data to user and stuff zeroes into
-       * the data stream, so that we can produce some kind of image.
-       * We use a nonvolatile flag to ensure that only one warning message
-       * appears per data segment.
-       */
-      if (! ((huff_entropy_ptr) cinfo->entropy)->insufficient_data) {
-	WARNMS(cinfo, JWRN_HIT_MARKER);
-	((huff_entropy_ptr) cinfo->entropy)->insufficient_data = TRUE;
-      }
-      /* Fill the buffer with zero bits */
-      get_buffer <<= MIN_GET_BITS - bits_left;
-      bits_left = MIN_GET_BITS;
-    }
-  }
-
-  /* Unload the local registers */
-  state->next_input_byte = next_input_byte;
-  state->bytes_in_buffer = bytes_in_buffer;
-  state->get_buffer = get_buffer;
-  state->bits_left = bits_left;
-
-  return TRUE;
-}
-
-
-/*
- * Figure F.12: extend sign bit.
- * On some machines, a shift and sub will be faster than a table lookup.
- */
-
-#ifdef AVOID_TABLES
-
-#define BIT_MASK(nbits)   ((1<<(nbits))-1)
-#define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) - ((1<<(s))-1) : (x))
-
-#else
-
-#define BIT_MASK(nbits)   bmask[nbits]
-#define HUFF_EXTEND(x,s)  ((x) <= bmask[(s) - 1] ? (x) - bmask[s] : (x))
-
-static const int bmask[16] =	/* bmask[n] is mask for n rightmost bits */
-  { 0, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,
-    0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF };
-
-#endif /* AVOID_TABLES */
-
-
-/*
- * Out-of-line code for Huffman code decoding.
- */
-
-LOCAL(int)
-jpeg_huff_decode (bitread_working_state * state,
-		  register bit_buf_type get_buffer, register int bits_left,
-		  d_derived_tbl * htbl, int min_bits)
-{
-  register int l = min_bits;
-  register INT32 code;
-
-  /* HUFF_DECODE has determined that the code is at least min_bits */
-  /* bits long, so fetch that many bits in one swoop. */
-
-  CHECK_BIT_BUFFER(*state, l, return -1);
-  code = GET_BITS(l);
-
-  /* Collect the rest of the Huffman code one bit at a time. */
-  /* This is per Figure F.16 in the JPEG spec. */
-
-  while (code > htbl->maxcode[l]) {
-    code <<= 1;
-    CHECK_BIT_BUFFER(*state, 1, return -1);
-    code |= GET_BITS(1);
-    l++;
-  }
-
-  /* Unload the local registers */
-  state->get_buffer = get_buffer;
-  state->bits_left = bits_left;
-
-  /* With garbage input we may reach the sentinel value l = 17. */
-
-  if (l > 16) {
-    WARNMS(state->cinfo, JWRN_HUFF_BAD_CODE);
-    return 0;			/* fake a zero as the safest result */
-  }
-
-  return htbl->pub->huffval[ (int) (code + htbl->valoffset[l]) ];
-}
-
-
-/*
- * Finish up at the end of a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-finish_pass_huff (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-
-  /* Throw away any unused bits remaining in bit buffer; */
-  /* include any full bytes in next_marker's count of discarded bytes */
-  cinfo->marker->discarded_bytes += entropy->bitstate.bits_left / 8;
-  entropy->bitstate.bits_left = 0;
-}
-
-
-/*
- * Check for a restart marker & resynchronize decoder.
- * Returns FALSE if must suspend.
- */
-
-LOCAL(boolean)
-process_restart (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci;
-
-  finish_pass_huff(cinfo);
-
-  /* Advance past the RSTn marker */
-  if (! (*cinfo->marker->read_restart_marker) (cinfo))
-    return FALSE;
-
-  /* Re-initialize DC predictions to 0 */
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++)
-    entropy->saved.last_dc_val[ci] = 0;
-  /* Re-init EOB run count, too */
-  entropy->saved.EOBRUN = 0;
-
-  /* Reset restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-
-  /* Reset out-of-data flag, unless read_restart_marker left us smack up
-   * against a marker.  In that case we will end up treating the next data
-   * segment as empty, and we can avoid producing bogus output pixels by
-   * leaving the flag set.
-   */
-  if (cinfo->unread_marker == 0)
-    entropy->insufficient_data = FALSE;
-
-  return TRUE;
-}
-
-
-/*
- * Huffman MCU decoding.
- * Each of these routines decodes and returns one MCU's worth of
- * Huffman-compressed coefficients. 
- * The coefficients are reordered from zigzag order into natural array order,
- * but are not dequantized.
- *
- * The i'th block of the MCU is stored into the block pointed to by
- * MCU_data[i].  WE ASSUME THIS AREA IS INITIALLY ZEROED BY THE CALLER.
- * (Wholesale zeroing is usually a little faster than retail...)
- *
- * We return FALSE if data source requested suspension.  In that case no
- * changes have been made to permanent state.  (Exception: some output
- * coefficients may already have been assigned.  This is harmless for
- * spectral selection, since we'll just re-assign them on the next call.
- * Successive approximation AC refinement has to be more careful, however.)
- */
-
-/*
- * MCU decoding for DC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{   
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int Al = cinfo->Al;
-  register int s, r;
-  int blkn, ci;
-  JBLOCKROW block;
-  BITREAD_STATE_VARS;
-  savable_state state;
-  d_derived_tbl * tbl;
-  jpeg_component_info * compptr;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->insufficient_data) {
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(state, entropy->saved);
-
-    /* Outer loop handles each block in the MCU */
-
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      block = MCU_data[blkn];
-      ci = cinfo->MCU_membership[blkn];
-      compptr = cinfo->cur_comp_info[ci];
-      tbl = entropy->derived_tbls[compptr->dc_tbl_no];
-
-      /* Decode a single block's worth of coefficients */
-
-      /* Section F.2.2.1: decode the DC coefficient difference */
-      HUFF_DECODE(s, br_state, tbl, return FALSE, label1);
-      if (s) {
-	CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	r = GET_BITS(s);
-	s = HUFF_EXTEND(r, s);
-      }
-
-      /* Convert DC difference to actual value, update last_dc_val */
-      s += state.last_dc_val[ci];
-      state.last_dc_val[ci] = s;
-      /* Scale and output the coefficient (assumes jpeg_natural_order[0]=0) */
-      (*block)[0] = (JCOEF) (s << Al);
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(entropy->saved, state);
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC initial scan (either spectral selection,
- * or first pass of successive approximation).
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_first (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{   
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  register int s, k, r;
-  unsigned int EOBRUN;
-  int Se, Al;
-  const int * natural_order;
-  JBLOCKROW block;
-  BITREAD_STATE_VARS;
-  d_derived_tbl * tbl;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->insufficient_data) {
-
-    Se = cinfo->Se;
-    Al = cinfo->Al;
-    natural_order = cinfo->natural_order;
-
-    /* Load up working state.
-     * We can avoid loading/saving bitread state if in an EOB run.
-     */
-    EOBRUN = entropy->saved.EOBRUN;	/* only part of saved state we need */
-
-    /* There is always only one block per MCU */
-
-    if (EOBRUN)			/* if it's a band of zeroes... */
-      EOBRUN--;			/* ...process it now (we do nothing) */
-    else {
-      BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-      block = MCU_data[0];
-      tbl = entropy->ac_derived_tbl;
-
-      for (k = cinfo->Ss; k <= Se; k++) {
-	HUFF_DECODE(s, br_state, tbl, return FALSE, label2);
-	r = s >> 4;
-	s &= 15;
-	if (s) {
-	  k += r;
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  r = GET_BITS(s);
-	  s = HUFF_EXTEND(r, s);
-	  /* Scale and output coefficient in natural (dezigzagged) order */
-	  (*block)[natural_order[k]] = (JCOEF) (s << Al);
-	} else {
-	  if (r != 15) {	/* EOBr, run length is 2^r + appended bits */
-	    if (r) {		/* EOBr, r > 0 */
-	      EOBRUN = 1 << r;
-	      CHECK_BIT_BUFFER(br_state, r, return FALSE);
-	      r = GET_BITS(r);
-	      EOBRUN += r;
-	      EOBRUN--;		/* this band is processed at this moment */
-	    }
-	    break;		/* force end-of-band */
-	  }
-	  k += 15;		/* ZRL: skip 15 zeroes in band */
-	}
-      }
-
-      BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    }
-
-    /* Completed MCU, so update state */
-    entropy->saved.EOBRUN = EOBRUN;	/* only part of saved state we need */
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for DC successive approximation refinement scan.
- * Note: we assume such scans can be multi-component,
- * although the spec is not very clear on the point.
- */
-
-METHODDEF(boolean)
-decode_mcu_DC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{   
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int p1, blkn;
-  BITREAD_STATE_VARS;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* Not worth the cycles to check insufficient_data here,
-   * since we will not change the data anyway if we read zeroes.
-   */
-
-  /* Load up working state */
-  BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-
-  p1 = 1 << cinfo->Al;		/* 1 in the bit position being coded */
-
-  /* Outer loop handles each block in the MCU */
-
-  for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-    /* Encoded data is simply the next bit of the two's-complement DC value */
-    CHECK_BIT_BUFFER(br_state, 1, return FALSE);
-    if (GET_BITS(1))
-      MCU_data[blkn][0][0] |= p1;
-    /* Note: since we use |=, repeating the assignment later is safe */
-  }
-
-  /* Completed MCU, so update state */
-  BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * MCU decoding for AC successive approximation refinement scan.
- */
-
-METHODDEF(boolean)
-decode_mcu_AC_refine (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{   
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  register int s, k, r;
-  unsigned int EOBRUN;
-  int Se, p1, m1;
-  const int * natural_order;
-  JBLOCKROW block;
-  JCOEFPTR thiscoef;
-  BITREAD_STATE_VARS;
-  d_derived_tbl * tbl;
-  int num_newnz;
-  int newnz_pos[DCTSIZE2];
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, don't modify the MCU.
-   */
-  if (! entropy->insufficient_data) {
-
-    Se = cinfo->Se;
-    p1 = 1 << cinfo->Al;	/* 1 in the bit position being coded */
-    m1 = (-1) << cinfo->Al;	/* -1 in the bit position being coded */
-    natural_order = cinfo->natural_order;
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    EOBRUN = entropy->saved.EOBRUN; /* only part of saved state we need */
-
-    /* There is always only one block per MCU */
-    block = MCU_data[0];
-    tbl = entropy->ac_derived_tbl;
-
-    /* If we are forced to suspend, we must undo the assignments to any newly
-     * nonzero coefficients in the block, because otherwise we'd get confused
-     * next time about which coefficients were already nonzero.
-     * But we need not undo addition of bits to already-nonzero coefficients;
-     * instead, we can test the current bit to see if we already did it.
-     */
-    num_newnz = 0;
-
-    /* initialize coefficient loop counter to start of band */
-    k = cinfo->Ss;
-
-    if (EOBRUN == 0) {
-      do {
-	HUFF_DECODE(s, br_state, tbl, goto undoit, label3);
-	r = s >> 4;
-	s &= 15;
-	if (s) {
-	  if (s != 1)		/* size of new coef should always be 1 */
-	    WARNMS(cinfo, JWRN_HUFF_BAD_CODE);
-	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	  if (GET_BITS(1))
-	    s = p1;		/* newly nonzero coef is positive */
-	  else
-	    s = m1;		/* newly nonzero coef is negative */
-	} else {
-	  if (r != 15) {
-	    EOBRUN = 1 << r;	/* EOBr, run length is 2^r + appended bits */
-	    if (r) {
-	      CHECK_BIT_BUFFER(br_state, r, goto undoit);
-	      r = GET_BITS(r);
-	      EOBRUN += r;
-	    }
-	    break;		/* rest of block is handled by EOB logic */
-	  }
-	  /* note s = 0 for processing ZRL */
-	}
-	/* Advance over already-nonzero coefs and r still-zero coefs,
-	 * appending correction bits to the nonzeroes.  A correction bit is 1
-	 * if the absolute value of the coefficient must be increased.
-	 */
-	do {
-	  thiscoef = *block + natural_order[k];
-	  if (*thiscoef) {
-	    CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	    if (GET_BITS(1)) {
-	      if ((*thiscoef & p1) == 0) { /* do nothing if already set it */
-		if (*thiscoef >= 0)
-		  *thiscoef += p1;
-		else
-		  *thiscoef += m1;
-	      }
-	    }
-	  } else {
-	    if (--r < 0)
-	      break;		/* reached target zero coefficient */
-	  }
-	  k++;
-	} while (k <= Se);
-	if (s) {
-	  int pos = natural_order[k];
-	  /* Output newly nonzero coefficient */
-	  (*block)[pos] = (JCOEF) s;
-	  /* Remember its position in case we have to suspend */
-	  newnz_pos[num_newnz++] = pos;
-	}
-	k++;
-      } while (k <= Se);
-    }
-
-    if (EOBRUN) {
-      /* Scan any remaining coefficient positions after the end-of-band
-       * (the last newly nonzero coefficient, if any).  Append a correction
-       * bit to each already-nonzero coefficient.  A correction bit is 1
-       * if the absolute value of the coefficient must be increased.
-       */
-      do {
-	thiscoef = *block + natural_order[k];
-	if (*thiscoef) {
-	  CHECK_BIT_BUFFER(br_state, 1, goto undoit);
-	  if (GET_BITS(1)) {
-	    if ((*thiscoef & p1) == 0) { /* do nothing if already changed it */
-	      if (*thiscoef >= 0)
-		*thiscoef += p1;
-	      else
-		*thiscoef += m1;
-	    }
-	  }
-	}
-	k++;
-      } while (k <= Se);
-      /* Count one block completed in EOB run */
-      EOBRUN--;
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    entropy->saved.EOBRUN = EOBRUN; /* only part of saved state we need */
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-
-undoit:
-  /* Re-zero any output coefficients that we made newly nonzero */
-  while (num_newnz)
-    (*block)[newnz_pos[--num_newnz]] = 0;
-
-  return FALSE;
-}
-
-
-/*
- * Decode one MCU's worth of Huffman-compressed coefficients,
- * partial blocks.
- */
-
-METHODDEF(boolean)
-decode_mcu_sub (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  const int * natural_order;
-  int Se, blkn;
-  BITREAD_STATE_VARS;
-  savable_state state;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->insufficient_data) {
-
-    natural_order = cinfo->natural_order;
-    Se = cinfo->lim_Se;
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(state, entropy->saved);
-
-    /* Outer loop handles each block in the MCU */
-
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      JBLOCKROW block = MCU_data[blkn];
-      d_derived_tbl * htbl;
-      register int s, k, r;
-      int coef_limit, ci;
-
-      /* Decode a single block's worth of coefficients */
-
-      /* Section F.2.2.1: decode the DC coefficient difference */
-      htbl = entropy->dc_cur_tbls[blkn];
-      HUFF_DECODE(s, br_state, htbl, return FALSE, label1);
-
-      htbl = entropy->ac_cur_tbls[blkn];
-      k = 1;
-      coef_limit = entropy->coef_limit[blkn];
-      if (coef_limit) {
-	/* Convert DC difference to actual value, update last_dc_val */
-	if (s) {
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  r = GET_BITS(s);
-	  s = HUFF_EXTEND(r, s);
-	}
-	ci = cinfo->MCU_membership[blkn];
-	s += state.last_dc_val[ci];
-	state.last_dc_val[ci] = s;
-	/* Output the DC coefficient */
-	(*block)[0] = (JCOEF) s;
-
-	/* Section F.2.2.2: decode the AC coefficients */
-	/* Since zeroes are skipped, output area must be cleared beforehand */
-	for (; k < coef_limit; k++) {
-	  HUFF_DECODE(s, br_state, htbl, return FALSE, label2);
-
-	  r = s >> 4;
-	  s &= 15;
-
-	  if (s) {
-	    k += r;
-	    CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	    r = GET_BITS(s);
-	    s = HUFF_EXTEND(r, s);
-	    /* Output coefficient in natural (dezigzagged) order.
-	     * Note: the extra entries in natural_order[] will save us
-	     * if k > Se, which could happen if the data is corrupted.
-	     */
-	    (*block)[natural_order[k]] = (JCOEF) s;
-	  } else {
-	    if (r != 15)
-	      goto EndOfBlock;
-	    k += 15;
-	  }
-	}
-      } else {
-	if (s) {
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  DROP_BITS(s);
-	}
-      }
-
-      /* Section F.2.2.2: decode the AC coefficients */
-      /* In this path we just discard the values */
-      for (; k <= Se; k++) {
-	HUFF_DECODE(s, br_state, htbl, return FALSE, label3);
-
-	r = s >> 4;
-	s &= 15;
-
-	if (s) {
-	  k += r;
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  DROP_BITS(s);
-	} else {
-	  if (r != 15)
-	    break;
-	  k += 15;
-	}
-      }
-
-      EndOfBlock: ;
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(entropy->saved, state);
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * Decode one MCU's worth of Huffman-compressed coefficients,
- * full-size blocks.
- */
-
-METHODDEF(boolean)
-decode_mcu (j_decompress_ptr cinfo, JBLOCKROW *MCU_data)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int blkn;
-  BITREAD_STATE_VARS;
-  savable_state state;
-
-  /* Process restart marker if needed; may have to suspend */
-  if (cinfo->restart_interval) {
-    if (entropy->restarts_to_go == 0)
-      if (! process_restart(cinfo))
-	return FALSE;
-  }
-
-  /* If we've run out of data, just leave the MCU set to zeroes.
-   * This way, we return uniform gray for the remainder of the segment.
-   */
-  if (! entropy->insufficient_data) {
-
-    /* Load up working state */
-    BITREAD_LOAD_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(state, entropy->saved);
-
-    /* Outer loop handles each block in the MCU */
-
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      JBLOCKROW block = MCU_data[blkn];
-      d_derived_tbl * htbl;
-      register int s, k, r;
-      int coef_limit, ci;
-
-      /* Decode a single block's worth of coefficients */
-
-      /* Section F.2.2.1: decode the DC coefficient difference */
-      htbl = entropy->dc_cur_tbls[blkn];
-      HUFF_DECODE(s, br_state, htbl, return FALSE, label1);
-
-      htbl = entropy->ac_cur_tbls[blkn];
-      k = 1;
-      coef_limit = entropy->coef_limit[blkn];
-      if (coef_limit) {
-	/* Convert DC difference to actual value, update last_dc_val */
-	if (s) {
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  r = GET_BITS(s);
-	  s = HUFF_EXTEND(r, s);
-	}
-	ci = cinfo->MCU_membership[blkn];
-	s += state.last_dc_val[ci];
-	state.last_dc_val[ci] = s;
-	/* Output the DC coefficient */
-	(*block)[0] = (JCOEF) s;
-
-	/* Section F.2.2.2: decode the AC coefficients */
-	/* Since zeroes are skipped, output area must be cleared beforehand */
-	for (; k < coef_limit; k++) {
-	  HUFF_DECODE(s, br_state, htbl, return FALSE, label2);
-
-	  r = s >> 4;
-	  s &= 15;
-
-	  if (s) {
-	    k += r;
-	    CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	    r = GET_BITS(s);
-	    s = HUFF_EXTEND(r, s);
-	    /* Output coefficient in natural (dezigzagged) order.
-	     * Note: the extra entries in jpeg_natural_order[] will save us
-	     * if k >= DCTSIZE2, which could happen if the data is corrupted.
-	     */
-	    (*block)[jpeg_natural_order[k]] = (JCOEF) s;
-	  } else {
-	    if (r != 15)
-	      goto EndOfBlock;
-	    k += 15;
-	  }
-	}
-      } else {
-	if (s) {
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  DROP_BITS(s);
-	}
-      }
-
-      /* Section F.2.2.2: decode the AC coefficients */
-      /* In this path we just discard the values */
-      for (; k < DCTSIZE2; k++) {
-	HUFF_DECODE(s, br_state, htbl, return FALSE, label3);
-
-	r = s >> 4;
-	s &= 15;
-
-	if (s) {
-	  k += r;
-	  CHECK_BIT_BUFFER(br_state, s, return FALSE);
-	  DROP_BITS(s);
-	} else {
-	  if (r != 15)
-	    break;
-	  k += 15;
-	}
-      }
-
-      EndOfBlock: ;
-    }
-
-    /* Completed MCU, so update state */
-    BITREAD_SAVE_STATE(cinfo,entropy->bitstate);
-    ASSIGN_STATE(entropy->saved, state);
-  }
-
-  /* Account for restart interval (no-op if not using restarts) */
-  entropy->restarts_to_go--;
-
-  return TRUE;
-}
-
-
-/*
- * Initialize for a Huffman-compressed scan.
- */
-
-METHODDEF(void)
-start_pass_huff_decoder (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr entropy = (huff_entropy_ptr) cinfo->entropy;
-  int ci, blkn, tbl, i;
-  jpeg_component_info * compptr;
-
-  if (cinfo->progressive_mode) {
-    /* Validate progressive scan parameters */
-    if (cinfo->Ss == 0) {
-      if (cinfo->Se != 0)
-	goto bad;
-    } else {
-      /* need not check Ss/Se < 0 since they came from unsigned bytes */
-      if (cinfo->Se < cinfo->Ss || cinfo->Se > cinfo->lim_Se)
-	goto bad;
-      /* AC scans may have only one component */
-      if (cinfo->comps_in_scan != 1)
-	goto bad;
-    }
-    if (cinfo->Ah != 0) {
-      /* Successive approximation refinement scan: must have Al = Ah-1. */
-      if (cinfo->Ah-1 != cinfo->Al)
-	goto bad;
-    }
-    if (cinfo->Al > 13) {	/* need not check for < 0 */
-      /* Arguably the maximum Al value should be less than 13 for 8-bit precision,
-       * but the spec doesn't say so, and we try to be liberal about what we
-       * accept.  Note: large Al values could result in out-of-range DC
-       * coefficients during early scans, leading to bizarre displays due to
-       * overflows in the IDCT math.  But we won't crash.
-       */
-      bad:
-      ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
-	       cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
-    }
-    /* Update progression status, and verify that scan order is legal.
-     * Note that inter-scan inconsistencies are treated as warnings
-     * not fatal errors ... not clear if this is right way to behave.
-     */
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      int coefi, cindex = cinfo->cur_comp_info[ci]->component_index;
-      int *coef_bit_ptr = & cinfo->coef_bits[cindex][0];
-      if (cinfo->Ss && coef_bit_ptr[0] < 0) /* AC without prior DC scan */
-	WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, 0);
-      for (coefi = cinfo->Ss; coefi <= cinfo->Se; coefi++) {
-	int expected = (coef_bit_ptr[coefi] < 0) ? 0 : coef_bit_ptr[coefi];
-	if (cinfo->Ah != expected)
-	  WARNMS2(cinfo, JWRN_BOGUS_PROGRESSION, cindex, coefi);
-	coef_bit_ptr[coefi] = cinfo->Al;
-      }
-    }
-
-    /* Select MCU decoding routine */
-    if (cinfo->Ah == 0) {
-      if (cinfo->Ss == 0)
-	entropy->pub.decode_mcu = decode_mcu_DC_first;
-      else
-	entropy->pub.decode_mcu = decode_mcu_AC_first;
-    } else {
-      if (cinfo->Ss == 0)
-	entropy->pub.decode_mcu = decode_mcu_DC_refine;
-      else
-	entropy->pub.decode_mcu = decode_mcu_AC_refine;
-    }
-
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Make sure requested tables are present, and compute derived tables.
-       * We may build same derived table more than once, but it's not expensive.
-       */
-      if (cinfo->Ss == 0) {
-	if (cinfo->Ah == 0) {	/* DC refinement needs no table */
-	  tbl = compptr->dc_tbl_no;
-	  jpeg_make_d_derived_tbl(cinfo, TRUE, tbl,
-				  & entropy->derived_tbls[tbl]);
-	}
-      } else {
-	tbl = compptr->ac_tbl_no;
-	jpeg_make_d_derived_tbl(cinfo, FALSE, tbl,
-				& entropy->derived_tbls[tbl]);
-	/* remember the single active table */
-	entropy->ac_derived_tbl = entropy->derived_tbls[tbl];
-      }
-      /* Initialize DC predictions to 0 */
-      entropy->saved.last_dc_val[ci] = 0;
-    }
-
-    /* Initialize private state variables */
-    entropy->saved.EOBRUN = 0;
-  } else {
-    /* Check that the scan parameters Ss, Se, Ah/Al are OK for sequential JPEG.
-     * This ought to be an error condition, but we make it a warning because
-     * there are some baseline files out there with all zeroes in these bytes.
-     */
-    if (cinfo->Ss != 0 || cinfo->Ah != 0 || cinfo->Al != 0 ||
-	((cinfo->is_baseline || cinfo->Se < DCTSIZE2) &&
-	cinfo->Se != cinfo->lim_Se))
-      WARNMS(cinfo, JWRN_NOT_SEQUENTIAL);
-
-    /* Select MCU decoding routine */
-    /* We retain the hard-coded case for full-size blocks.
-     * This is not necessary, but it appears that this version is slightly
-     * more performant in the given implementation.
-     * With an improved implementation we would prefer a single optimized
-     * function.
-     */
-    if (cinfo->lim_Se != DCTSIZE2-1)
-      entropy->pub.decode_mcu = decode_mcu_sub;
-    else
-      entropy->pub.decode_mcu = decode_mcu;
-
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Compute derived values for Huffman tables */
-      /* We may do this more than once for a table, but it's not expensive */
-      tbl = compptr->dc_tbl_no;
-      jpeg_make_d_derived_tbl(cinfo, TRUE, tbl,
-			      & entropy->dc_derived_tbls[tbl]);
-      if (cinfo->lim_Se) {	/* AC needs no table when not present */
-	tbl = compptr->ac_tbl_no;
-	jpeg_make_d_derived_tbl(cinfo, FALSE, tbl,
-				& entropy->ac_derived_tbls[tbl]);
-      }
-      /* Initialize DC predictions to 0 */
-      entropy->saved.last_dc_val[ci] = 0;
-    }
-
-    /* Precalculate decoding info for each block in an MCU of this scan */
-    for (blkn = 0; blkn < cinfo->blocks_in_MCU; blkn++) {
-      ci = cinfo->MCU_membership[blkn];
-      compptr = cinfo->cur_comp_info[ci];
-      /* Precalculate which table to use for each block */
-      entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no];
-      entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no];
-      /* Decide whether we really care about the coefficient values */
-      if (compptr->component_needed) {
-	ci = compptr->DCT_v_scaled_size;
-	i = compptr->DCT_h_scaled_size;
-	switch (cinfo->lim_Se) {
-	case (1*1-1):
-	  entropy->coef_limit[blkn] = 1;
-	  break;
-	case (2*2-1):
-	  if (ci <= 0 || ci > 2) ci = 2;
-	  if (i <= 0 || i > 2) i = 2;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order2[ci - 1][i - 1];
-	  break;
-	case (3*3-1):
-	  if (ci <= 0 || ci > 3) ci = 3;
-	  if (i <= 0 || i > 3) i = 3;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order3[ci - 1][i - 1];
-	  break;
-	case (4*4-1):
-	  if (ci <= 0 || ci > 4) ci = 4;
-	  if (i <= 0 || i > 4) i = 4;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order4[ci - 1][i - 1];
-	  break;
-	case (5*5-1):
-	  if (ci <= 0 || ci > 5) ci = 5;
-	  if (i <= 0 || i > 5) i = 5;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order5[ci - 1][i - 1];
-	  break;
-	case (6*6-1):
-	  if (ci <= 0 || ci > 6) ci = 6;
-	  if (i <= 0 || i > 6) i = 6;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order6[ci - 1][i - 1];
-	  break;
-	case (7*7-1):
-	  if (ci <= 0 || ci > 7) ci = 7;
-	  if (i <= 0 || i > 7) i = 7;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order7[ci - 1][i - 1];
-	  break;
-	default:
-	  if (ci <= 0 || ci > 8) ci = 8;
-	  if (i <= 0 || i > 8) i = 8;
-	  entropy->coef_limit[blkn] = 1 + jpeg_zigzag_order[ci - 1][i - 1];
-	  break;
-	}
-      } else {
-	entropy->coef_limit[blkn] = 0;
-      }
-    }
-  }
-
-  /* Initialize bitread state variables */
-  entropy->bitstate.bits_left = 0;
-  entropy->bitstate.get_buffer = 0; /* unnecessary, but keeps Purify quiet */
-  entropy->insufficient_data = FALSE;
-
-  /* Initialize restart counter */
-  entropy->restarts_to_go = cinfo->restart_interval;
-}
-
-
-/*
- * Module initialization routine for Huffman entropy decoding.
- */
-
-GLOBAL(void)
-jinit_huff_decoder (j_decompress_ptr cinfo)
-{
-  huff_entropy_ptr entropy;
-  int i;
-
-  entropy = (huff_entropy_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(huff_entropy_decoder));
-  cinfo->entropy = &entropy->pub;
-  entropy->pub.start_pass = start_pass_huff_decoder;
-  entropy->pub.finish_pass = finish_pass_huff;
-
-  if (cinfo->progressive_mode) {
-    /* Create progression status table */
-    int *coef_bit_ptr, ci;
-    cinfo->coef_bits = (int (*)[DCTSIZE2])
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  cinfo->num_components*DCTSIZE2*SIZEOF(int));
-    coef_bit_ptr = & cinfo->coef_bits[0][0];
-    for (ci = 0; ci < cinfo->num_components; ci++)
-      for (i = 0; i < DCTSIZE2; i++)
-	*coef_bit_ptr++ = -1;
-
-    /* Mark derived tables unallocated */
-    for (i = 0; i < NUM_HUFF_TBLS; i++) {
-      entropy->derived_tbls[i] = NULL;
-    }
-  } else {
-    /* Mark tables unallocated */
-    for (i = 0; i < NUM_HUFF_TBLS; i++) {
-      entropy->dc_derived_tbls[i] = entropy->ac_derived_tbls[i] = NULL;
-    }
-  }
-}
--- a/DoConfig/fltk/jpeg/jdinput.c
+++ /dev/null
@@ -1,662 +1,0 @@
-/*
- * jdinput.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains input control logic for the JPEG decompressor.
- * These routines are concerned with controlling the decompressor's input
- * processing (marker reading and coefficient decoding).  The actual input
- * reading is done in jdmarker.c, jdhuff.c, and jdarith.c.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_input_controller pub; /* public fields */
-
-  int inheaders;		/* Nonzero until first SOS is reached */
-} my_input_controller;
-
-typedef my_input_controller * my_inputctl_ptr;
-
-
-/* Forward declarations */
-METHODDEF(int) consume_markers JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Routines to calculate various quantities related to the size of the image.
- */
-
-
-/*
- * Compute output image dimensions and related values.
- * NOTE: this is exported for possible use by application.
- * Hence it mustn't do anything that can't be done twice.
- */
-
-GLOBAL(void)
-jpeg_core_output_dimensions (j_decompress_ptr cinfo)
-/* Do computations that are needed before master selection phase.
- * This function is used for transcoding and full decompression.
- */
-{
-#ifdef IDCT_SCALING_SUPPORTED
-  int ci;
-  jpeg_component_info *compptr;
-
-  /* Compute actual output image dimensions and DCT scaling choices. */
-  if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom) {
-    /* Provide 1/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 1;
-    cinfo->min_DCT_v_scaled_size = 1;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 2) {
-    /* Provide 2/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 2L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 2L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 2;
-    cinfo->min_DCT_v_scaled_size = 2;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 3) {
-    /* Provide 3/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 3L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 3L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 3;
-    cinfo->min_DCT_v_scaled_size = 3;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 4) {
-    /* Provide 4/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 4L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 4L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 4;
-    cinfo->min_DCT_v_scaled_size = 4;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 5) {
-    /* Provide 5/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 5L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 5L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 5;
-    cinfo->min_DCT_v_scaled_size = 5;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 6) {
-    /* Provide 6/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 6L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 6L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 6;
-    cinfo->min_DCT_v_scaled_size = 6;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 7) {
-    /* Provide 7/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 7L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 7L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 7;
-    cinfo->min_DCT_v_scaled_size = 7;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 8) {
-    /* Provide 8/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 8L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 8L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 8;
-    cinfo->min_DCT_v_scaled_size = 8;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 9) {
-    /* Provide 9/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 9L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 9L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 9;
-    cinfo->min_DCT_v_scaled_size = 9;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 10) {
-    /* Provide 10/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 10L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 10L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 10;
-    cinfo->min_DCT_v_scaled_size = 10;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 11) {
-    /* Provide 11/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 11L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 11L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 11;
-    cinfo->min_DCT_v_scaled_size = 11;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 12) {
-    /* Provide 12/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 12L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 12L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 12;
-    cinfo->min_DCT_v_scaled_size = 12;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 13) {
-    /* Provide 13/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 13L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 13L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 13;
-    cinfo->min_DCT_v_scaled_size = 13;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 14) {
-    /* Provide 14/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 14L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 14L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 14;
-    cinfo->min_DCT_v_scaled_size = 14;
-  } else if (cinfo->scale_num * cinfo->block_size <= cinfo->scale_denom * 15) {
-    /* Provide 15/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 15L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 15L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 15;
-    cinfo->min_DCT_v_scaled_size = 15;
-  } else {
-    /* Provide 16/block_size scaling */
-    cinfo->output_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * 16L, (long) cinfo->block_size);
-    cinfo->output_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * 16L, (long) cinfo->block_size);
-    cinfo->min_DCT_h_scaled_size = 16;
-    cinfo->min_DCT_v_scaled_size = 16;
-  }
-
-  /* Recompute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size;
-    compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size;
-  }
-
-#else /* !IDCT_SCALING_SUPPORTED */
-
-  /* Hardwire it to "no scaling" */
-  cinfo->output_width = cinfo->image_width;
-  cinfo->output_height = cinfo->image_height;
-  /* initial_setup has already initialized DCT_scaled_size,
-   * and has computed unscaled downsampled_width and downsampled_height.
-   */
-
-#endif /* IDCT_SCALING_SUPPORTED */
-}
-
-
-LOCAL(void)
-initial_setup (j_decompress_ptr cinfo)
-/* Called once, when first SOS marker is reached */
-{
-  int ci;
-  jpeg_component_info *compptr;
-
-  /* Make sure image isn't bigger than I can handle */
-  if ((long) cinfo->image_height > (long) JPEG_MAX_DIMENSION ||
-      (long) cinfo->image_width > (long) JPEG_MAX_DIMENSION)
-    ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
-
-  /* Only 8 to 12 bits data precision are supported for DCT based JPEG */
-  if (cinfo->data_precision < 8 || cinfo->data_precision > 12)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Check that number of components won't exceed internal array sizes */
-  if (cinfo->num_components > MAX_COMPONENTS)
-    ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,
-	     MAX_COMPONENTS);
-
-  /* Compute maximum sampling factors; check factor validity */
-  cinfo->max_h_samp_factor = 1;
-  cinfo->max_v_samp_factor = 1;
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    if (compptr->h_samp_factor<=0 || compptr->h_samp_factor>MAX_SAMP_FACTOR ||
-	compptr->v_samp_factor<=0 || compptr->v_samp_factor>MAX_SAMP_FACTOR)
-      ERREXIT(cinfo, JERR_BAD_SAMPLING);
-    cinfo->max_h_samp_factor = MAX(cinfo->max_h_samp_factor,
-				   compptr->h_samp_factor);
-    cinfo->max_v_samp_factor = MAX(cinfo->max_v_samp_factor,
-				   compptr->v_samp_factor);
-  }
-
-  /* Derive block_size, natural_order, and lim_Se */
-  if (cinfo->is_baseline || (cinfo->progressive_mode &&
-      cinfo->comps_in_scan)) { /* no pseudo SOS marker */
-    cinfo->block_size = DCTSIZE;
-    cinfo->natural_order = jpeg_natural_order;
-    cinfo->lim_Se = DCTSIZE2-1;
-  } else
-    switch (cinfo->Se) {
-    case (1*1-1):
-      cinfo->block_size = 1;
-      cinfo->natural_order = jpeg_natural_order; /* not needed */
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (2*2-1):
-      cinfo->block_size = 2;
-      cinfo->natural_order = jpeg_natural_order2;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (3*3-1):
-      cinfo->block_size = 3;
-      cinfo->natural_order = jpeg_natural_order3;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (4*4-1):
-      cinfo->block_size = 4;
-      cinfo->natural_order = jpeg_natural_order4;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (5*5-1):
-      cinfo->block_size = 5;
-      cinfo->natural_order = jpeg_natural_order5;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (6*6-1):
-      cinfo->block_size = 6;
-      cinfo->natural_order = jpeg_natural_order6;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (7*7-1):
-      cinfo->block_size = 7;
-      cinfo->natural_order = jpeg_natural_order7;
-      cinfo->lim_Se = cinfo->Se;
-      break;
-    case (8*8-1):
-      cinfo->block_size = 8;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (9*9-1):
-      cinfo->block_size = 9;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (10*10-1):
-      cinfo->block_size = 10;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (11*11-1):
-      cinfo->block_size = 11;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (12*12-1):
-      cinfo->block_size = 12;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (13*13-1):
-      cinfo->block_size = 13;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (14*14-1):
-      cinfo->block_size = 14;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (15*15-1):
-      cinfo->block_size = 15;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    case (16*16-1):
-      cinfo->block_size = 16;
-      cinfo->natural_order = jpeg_natural_order;
-      cinfo->lim_Se = DCTSIZE2-1;
-      break;
-    default:
-      ERREXIT4(cinfo, JERR_BAD_PROGRESSION,
-	       cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al);
-      break;
-    }
-
-  /* We initialize DCT_scaled_size and min_DCT_scaled_size to block_size.
-   * In the full decompressor,
-   * this will be overridden by jpeg_calc_output_dimensions in jdmaster.c;
-   * but in the transcoder,
-   * jpeg_calc_output_dimensions is not used, so we must do it here.
-   */
-  cinfo->min_DCT_h_scaled_size = cinfo->block_size;
-  cinfo->min_DCT_v_scaled_size = cinfo->block_size;
-
-  /* Compute dimensions of components */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    compptr->DCT_h_scaled_size = cinfo->block_size;
-    compptr->DCT_v_scaled_size = cinfo->block_size;
-    /* Size in DCT blocks */
-    compptr->width_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    compptr->height_in_blocks = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-    /* downsampled_width and downsampled_height will also be overridden by
-     * jdmaster.c if we are doing full decompression.  The transcoder library
-     * doesn't use these values, but the calling application might.
-     */
-    /* Size in samples */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width * (long) compptr->h_samp_factor,
-		    (long) cinfo->max_h_samp_factor);
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height * (long) compptr->v_samp_factor,
-		    (long) cinfo->max_v_samp_factor);
-    /* Mark component needed, until color conversion says otherwise */
-    compptr->component_needed = TRUE;
-    /* Mark no quantization table yet saved for component */
-    compptr->quant_table = NULL;
-  }
-
-  /* Compute number of fully interleaved MCU rows. */
-  cinfo->total_iMCU_rows = (JDIMENSION)
-    jdiv_round_up((long) cinfo->image_height,
-	          (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-
-  /* Decide whether file contains multiple scans */
-  if (cinfo->comps_in_scan < cinfo->num_components || cinfo->progressive_mode)
-    cinfo->inputctl->has_multiple_scans = TRUE;
-  else
-    cinfo->inputctl->has_multiple_scans = FALSE;
-}
-
-
-LOCAL(void)
-per_scan_setup (j_decompress_ptr cinfo)
-/* Do computations that are needed before processing a JPEG scan */
-/* cinfo->comps_in_scan and cinfo->cur_comp_info[] were set from SOS marker */
-{
-  int ci, mcublks, tmp;
-  jpeg_component_info *compptr;
-  
-  if (cinfo->comps_in_scan == 1) {
-    
-    /* Noninterleaved (single-component) scan */
-    compptr = cinfo->cur_comp_info[0];
-    
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = compptr->width_in_blocks;
-    cinfo->MCU_rows_in_scan = compptr->height_in_blocks;
-    
-    /* For noninterleaved scan, always one block per MCU */
-    compptr->MCU_width = 1;
-    compptr->MCU_height = 1;
-    compptr->MCU_blocks = 1;
-    compptr->MCU_sample_width = compptr->DCT_h_scaled_size;
-    compptr->last_col_width = 1;
-    /* For noninterleaved scans, it is convenient to define last_row_height
-     * as the number of block rows present in the last iMCU row.
-     */
-    tmp = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
-    if (tmp == 0) tmp = compptr->v_samp_factor;
-    compptr->last_row_height = tmp;
-    
-    /* Prepare array describing MCU composition */
-    cinfo->blocks_in_MCU = 1;
-    cinfo->MCU_membership[0] = 0;
-    
-  } else {
-    
-    /* Interleaved (multi-component) scan */
-    if (cinfo->comps_in_scan <= 0 || cinfo->comps_in_scan > MAX_COMPS_IN_SCAN)
-      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->comps_in_scan,
-	       MAX_COMPS_IN_SCAN);
-    
-    /* Overall image size in MCUs */
-    cinfo->MCUs_per_row = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width,
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    cinfo->MCU_rows_in_scan = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height,
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-    
-    cinfo->blocks_in_MCU = 0;
-    
-    for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-      compptr = cinfo->cur_comp_info[ci];
-      /* Sampling factors give # of blocks of component in each MCU */
-      compptr->MCU_width = compptr->h_samp_factor;
-      compptr->MCU_height = compptr->v_samp_factor;
-      compptr->MCU_blocks = compptr->MCU_width * compptr->MCU_height;
-      compptr->MCU_sample_width = compptr->MCU_width * compptr->DCT_h_scaled_size;
-      /* Figure number of non-dummy blocks in last MCU column & row */
-      tmp = (int) (compptr->width_in_blocks % compptr->MCU_width);
-      if (tmp == 0) tmp = compptr->MCU_width;
-      compptr->last_col_width = tmp;
-      tmp = (int) (compptr->height_in_blocks % compptr->MCU_height);
-      if (tmp == 0) tmp = compptr->MCU_height;
-      compptr->last_row_height = tmp;
-      /* Prepare array describing MCU composition */
-      mcublks = compptr->MCU_blocks;
-      if (cinfo->blocks_in_MCU + mcublks > D_MAX_BLOCKS_IN_MCU)
-	ERREXIT(cinfo, JERR_BAD_MCU_SIZE);
-      while (mcublks-- > 0) {
-	cinfo->MCU_membership[cinfo->blocks_in_MCU++] = ci;
-      }
-    }
-    
-  }
-}
-
-
-/*
- * Save away a copy of the Q-table referenced by each component present
- * in the current scan, unless already saved during a prior scan.
- *
- * In a multiple-scan JPEG file, the encoder could assign different components
- * the same Q-table slot number, but change table definitions between scans
- * so that each component uses a different Q-table.  (The IJG encoder is not
- * currently capable of doing this, but other encoders might.)  Since we want
- * to be able to dequantize all the components at the end of the file, this
- * means that we have to save away the table actually used for each component.
- * We do this by copying the table at the start of the first scan containing
- * the component.
- * The JPEG spec prohibits the encoder from changing the contents of a Q-table
- * slot between scans of a component using that slot.  If the encoder does so
- * anyway, this decoder will simply use the Q-table values that were current
- * at the start of the first scan for the component.
- *
- * The decompressor output side looks only at the saved quant tables,
- * not at the current Q-table slots.
- */
-
-LOCAL(void)
-latch_quant_tables (j_decompress_ptr cinfo)
-{
-  int ci, qtblno;
-  jpeg_component_info *compptr;
-  JQUANT_TBL * qtbl;
-
-  for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
-    compptr = cinfo->cur_comp_info[ci];
-    /* No work if we already saved Q-table for this component */
-    if (compptr->quant_table != NULL)
-      continue;
-    /* Make sure specified quantization table is present */
-    qtblno = compptr->quant_tbl_no;
-    if (qtblno < 0 || qtblno >= NUM_QUANT_TBLS ||
-	cinfo->quant_tbl_ptrs[qtblno] == NULL)
-      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
-    /* OK, save away the quantization table */
-    qtbl = (JQUANT_TBL *)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(JQUANT_TBL));
-    MEMCOPY(qtbl, cinfo->quant_tbl_ptrs[qtblno], SIZEOF(JQUANT_TBL));
-    compptr->quant_table = qtbl;
-  }
-}
-
-
-/*
- * Initialize the input modules to read a scan of compressed data.
- * The first call to this is done by jdmaster.c after initializing
- * the entire decompressor (during jpeg_start_decompress).
- * Subsequent calls come from consume_markers, below.
- */
-
-METHODDEF(void)
-start_input_pass (j_decompress_ptr cinfo)
-{
-  per_scan_setup(cinfo);
-  latch_quant_tables(cinfo);
-  (*cinfo->entropy->start_pass) (cinfo);
-  (*cinfo->coef->start_input_pass) (cinfo);
-  cinfo->inputctl->consume_input = cinfo->coef->consume_data;
-}
-
-
-/*
- * Finish up after inputting a compressed-data scan.
- * This is called by the coefficient controller after it's read all
- * the expected data of the scan.
- */
-
-METHODDEF(void)
-finish_input_pass (j_decompress_ptr cinfo)
-{
-  (*cinfo->entropy->finish_pass) (cinfo);
-  cinfo->inputctl->consume_input = consume_markers;
-}
-
-
-/*
- * Read JPEG markers before, between, or after compressed-data scans.
- * Change state as necessary when a new scan is reached.
- * Return value is JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
- *
- * The consume_input method pointer points either here or to the
- * coefficient controller's consume_data routine, depending on whether
- * we are reading a compressed data segment or inter-segment markers.
- *
- * Note: This function should NOT return a pseudo SOS marker (with zero
- * component number) to the caller.  A pseudo marker received by
- * read_markers is processed and then skipped for other markers.
- */
-
-METHODDEF(int)
-consume_markers (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl;
-  int val;
-
-  if (inputctl->pub.eoi_reached) /* After hitting EOI, read no further */
-    return JPEG_REACHED_EOI;
-
-  for (;;) {			/* Loop to pass pseudo SOS marker */
-    val = (*cinfo->marker->read_markers) (cinfo);
-
-    switch (val) {
-    case JPEG_REACHED_SOS:	/* Found SOS */
-      if (inputctl->inheaders) { /* 1st SOS */
-	if (inputctl->inheaders == 1)
-	  initial_setup(cinfo);
-	if (cinfo->comps_in_scan == 0) { /* pseudo SOS marker */
-	  inputctl->inheaders = 2;
-	  break;
-	}
-	inputctl->inheaders = 0;
-	/* Note: start_input_pass must be called by jdmaster.c
-	 * before any more input can be consumed.  jdapimin.c is
-	 * responsible for enforcing this sequencing.
-	 */
-      } else {			/* 2nd or later SOS marker */
-	if (! inputctl->pub.has_multiple_scans)
-	  ERREXIT(cinfo, JERR_EOI_EXPECTED); /* Oops, I wasn't expecting this! */
-	if (cinfo->comps_in_scan == 0) /* unexpected pseudo SOS marker */
-	  break;
-	start_input_pass(cinfo);
-      }
-      return val;
-    case JPEG_REACHED_EOI:	/* Found EOI */
-      inputctl->pub.eoi_reached = TRUE;
-      if (inputctl->inheaders) { /* Tables-only datastream, apparently */
-	if (cinfo->marker->saw_SOF)
-	  ERREXIT(cinfo, JERR_SOF_NO_SOS);
-      } else {
-	/* Prevent infinite loop in coef ctlr's decompress_data routine
-	 * if user set output_scan_number larger than number of scans.
-	 */
-	if (cinfo->output_scan_number > cinfo->input_scan_number)
-	  cinfo->output_scan_number = cinfo->input_scan_number;
-      }
-      return val;
-    case JPEG_SUSPENDED:
-      return val;
-    default:
-      return val;
-    }
-  }
-}
-
-
-/*
- * Reset state to begin a fresh datastream.
- */
-
-METHODDEF(void)
-reset_input_controller (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl = (my_inputctl_ptr) cinfo->inputctl;
-
-  inputctl->pub.consume_input = consume_markers;
-  inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */
-  inputctl->pub.eoi_reached = FALSE;
-  inputctl->inheaders = 1;
-  /* Reset other modules */
-  (*cinfo->err->reset_error_mgr) ((j_common_ptr) cinfo);
-  (*cinfo->marker->reset_marker_reader) (cinfo);
-  /* Reset progression state -- would be cleaner if entropy decoder did this */
-  cinfo->coef_bits = NULL;
-}
-
-
-/*
- * Initialize the input controller module.
- * This is called only once, when the decompression object is created.
- */
-
-GLOBAL(void)
-jinit_input_controller (j_decompress_ptr cinfo)
-{
-  my_inputctl_ptr inputctl;
-
-  /* Create subobject in permanent pool */
-  inputctl = (my_inputctl_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				SIZEOF(my_input_controller));
-  cinfo->inputctl = &inputctl->pub;
-  /* Initialize method pointers */
-  inputctl->pub.consume_input = consume_markers;
-  inputctl->pub.reset_input_controller = reset_input_controller;
-  inputctl->pub.start_input_pass = start_input_pass;
-  inputctl->pub.finish_input_pass = finish_input_pass;
-  /* Initialize state: can't use reset_input_controller since we don't
-   * want to try to reset other modules yet.
-   */
-  inputctl->pub.has_multiple_scans = FALSE; /* "unknown" would be better */
-  inputctl->pub.eoi_reached = FALSE;
-  inputctl->inheaders = 1;
-}
--- a/DoConfig/fltk/jpeg/jdmainct.c
+++ /dev/null
@@ -1,513 +1,0 @@
-/*
- * jdmainct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2002-2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the main buffer controller for decompression.
- * The main buffer lies between the JPEG decompressor proper and the
- * post-processor; it holds downsampled data in the JPEG colorspace.
- *
- * Note that this code is bypassed in raw-data mode, since the application
- * supplies the equivalent of the main buffer in that case.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * In the current system design, the main buffer need never be a full-image
- * buffer; any full-height buffers will be found inside the coefficient or
- * postprocessing controllers.  Nonetheless, the main controller is not
- * trivial.  Its responsibility is to provide context rows for upsampling/
- * rescaling, and doing this in an efficient fashion is a bit tricky.
- *
- * Postprocessor input data is counted in "row groups".  A row group
- * is defined to be (v_samp_factor * DCT_scaled_size / min_DCT_scaled_size)
- * sample rows of each component.  (We require DCT_scaled_size values to be
- * chosen such that these numbers are integers.  In practice DCT_scaled_size
- * values will likely be powers of two, so we actually have the stronger
- * condition that DCT_scaled_size / min_DCT_scaled_size is an integer.)
- * Upsampling will typically produce max_v_samp_factor pixel rows from each
- * row group (times any additional scale factor that the upsampler is
- * applying).
- *
- * The coefficient controller will deliver data to us one iMCU row at a time;
- * each iMCU row contains v_samp_factor * DCT_scaled_size sample rows, or
- * exactly min_DCT_scaled_size row groups.  (This amount of data corresponds
- * to one row of MCUs when the image is fully interleaved.)  Note that the
- * number of sample rows varies across components, but the number of row
- * groups does not.  Some garbage sample rows may be included in the last iMCU
- * row at the bottom of the image.
- *
- * Depending on the vertical scaling algorithm used, the upsampler may need
- * access to the sample row(s) above and below its current input row group.
- * The upsampler is required to set need_context_rows TRUE at global selection
- * time if so.  When need_context_rows is FALSE, this controller can simply
- * obtain one iMCU row at a time from the coefficient controller and dole it
- * out as row groups to the postprocessor.
- *
- * When need_context_rows is TRUE, this controller guarantees that the buffer
- * passed to postprocessing contains at least one row group's worth of samples
- * above and below the row group(s) being processed.  Note that the context
- * rows "above" the first passed row group appear at negative row offsets in
- * the passed buffer.  At the top and bottom of the image, the required
- * context rows are manufactured by duplicating the first or last real sample
- * row; this avoids having special cases in the upsampling inner loops.
- *
- * The amount of context is fixed at one row group just because that's a
- * convenient number for this controller to work with.  The existing
- * upsamplers really only need one sample row of context.  An upsampler
- * supporting arbitrary output rescaling might wish for more than one row
- * group of context when shrinking the image; tough, we don't handle that.
- * (This is justified by the assumption that downsizing will be handled mostly
- * by adjusting the DCT_scaled_size values, so that the actual scale factor at
- * the upsample step needn't be much less than one.)
- *
- * To provide the desired context, we have to retain the last two row groups
- * of one iMCU row while reading in the next iMCU row.  (The last row group
- * can't be processed until we have another row group for its below-context,
- * and so we have to save the next-to-last group too for its above-context.)
- * We could do this most simply by copying data around in our buffer, but
- * that'd be very slow.  We can avoid copying any data by creating a rather
- * strange pointer structure.  Here's how it works.  We allocate a workspace
- * consisting of M+2 row groups (where M = min_DCT_scaled_size is the number
- * of row groups per iMCU row).  We create two sets of redundant pointers to
- * the workspace.  Labeling the physical row groups 0 to M+1, the synthesized
- * pointer lists look like this:
- *                   M+1                          M-1
- * master pointer --> 0         master pointer --> 0
- *                    1                            1
- *                   ...                          ...
- *                   M-3                          M-3
- *                   M-2                           M
- *                   M-1                          M+1
- *                    M                           M-2
- *                   M+1                          M-1
- *                    0                            0
- * We read alternate iMCU rows using each master pointer; thus the last two
- * row groups of the previous iMCU row remain un-overwritten in the workspace.
- * The pointer lists are set up so that the required context rows appear to
- * be adjacent to the proper places when we pass the pointer lists to the
- * upsampler.
- *
- * The above pictures describe the normal state of the pointer lists.
- * At top and bottom of the image, we diddle the pointer lists to duplicate
- * the first or last sample row as necessary (this is cheaper than copying
- * sample rows around).
- *
- * This scheme breaks down if M < 2, ie, min_DCT_scaled_size is 1.  In that
- * situation each iMCU row provides only one row group so the buffering logic
- * must be different (eg, we must read two iMCU rows before we can emit the
- * first row group).  For now, we simply do not support providing context
- * rows when min_DCT_scaled_size is 1.  That combination seems unlikely to
- * be worth providing --- if someone wants a 1/8th-size preview, they probably
- * want it quick and dirty, so a context-free upsampler is sufficient.
- */
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_main_controller pub; /* public fields */
-
-  /* Pointer to allocated workspace (M or M+2 row groups). */
-  JSAMPARRAY buffer[MAX_COMPONENTS];
-
-  boolean buffer_full;		/* Have we gotten an iMCU row from decoder? */
-  JDIMENSION rowgroup_ctr;	/* counts row groups output to postprocessor */
-
-  /* Remaining fields are only used in the context case. */
-
-  /* These are the master pointers to the funny-order pointer lists. */
-  JSAMPIMAGE xbuffer[2];	/* pointers to weird pointer lists */
-
-  int whichptr;			/* indicates which pointer set is now in use */
-  int context_state;		/* process_data state machine status */
-  JDIMENSION rowgroups_avail;	/* row groups available to postprocessor */
-  JDIMENSION iMCU_row_ctr;	/* counts iMCU rows to detect image top/bot */
-} my_main_controller;
-
-typedef my_main_controller * my_main_ptr;
-
-/* context_state values: */
-#define CTX_PREPARE_FOR_IMCU	0	/* need to prepare for MCU row */
-#define CTX_PROCESS_IMCU	1	/* feeding iMCU to postprocessor */
-#define CTX_POSTPONED_ROW	2	/* feeding postponed row group */
-
-
-/* Forward declarations */
-METHODDEF(void) process_data_simple_main
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-METHODDEF(void) process_data_context_main
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-#ifdef QUANT_2PASS_SUPPORTED
-METHODDEF(void) process_data_crank_post
-	JPP((j_decompress_ptr cinfo, JSAMPARRAY output_buf,
-	     JDIMENSION *out_row_ctr, JDIMENSION out_rows_avail));
-#endif
-
-
-LOCAL(void)
-alloc_funny_pointers (j_decompress_ptr cinfo)
-/* Allocate space for the funny pointer lists.
- * This is done only once, not once per pass.
- */
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  int ci, rgroup;
-  int M = cinfo->min_DCT_v_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf;
-
-  /* Get top-level space for component array pointers.
-   * We alloc both arrays with one call to save a few cycles.
-   */
-  mainp->xbuffer[0] = (JSAMPIMAGE)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				cinfo->num_components * 2 * SIZEOF(JSAMPARRAY));
-  mainp->xbuffer[1] = mainp->xbuffer[0] + cinfo->num_components;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-      cinfo->min_DCT_v_scaled_size; /* height of a row group of component */
-    /* Get space for pointer lists --- M+4 row groups in each list.
-     * We alloc both pointer lists with one call to save a few cycles.
-     */
-    xbuf = (JSAMPARRAY)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  2 * (rgroup * (M + 4)) * SIZEOF(JSAMPROW));
-    xbuf += rgroup;		/* want one row group at negative offsets */
-    mainp->xbuffer[0][ci] = xbuf;
-    xbuf += rgroup * (M + 4);
-    mainp->xbuffer[1][ci] = xbuf;
-  }
-}
-
-
-LOCAL(void)
-make_funny_pointers (j_decompress_ptr cinfo)
-/* Create the funny pointer lists discussed in the comments above.
- * The actual workspace is already allocated (in main->buffer),
- * and the space for the pointer lists is allocated too.
- * This routine just fills in the curiously ordered lists.
- * This will be repeated at the beginning of each pass.
- */
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  int ci, i, rgroup;
-  int M = cinfo->min_DCT_v_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY buf, xbuf0, xbuf1;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-      cinfo->min_DCT_v_scaled_size; /* height of a row group of component */
-    xbuf0 = mainp->xbuffer[0][ci];
-    xbuf1 = mainp->xbuffer[1][ci];
-    /* First copy the workspace pointers as-is */
-    buf = mainp->buffer[ci];
-    for (i = 0; i < rgroup * (M + 2); i++) {
-      xbuf0[i] = xbuf1[i] = buf[i];
-    }
-    /* In the second list, put the last four row groups in swapped order */
-    for (i = 0; i < rgroup * 2; i++) {
-      xbuf1[rgroup*(M-2) + i] = buf[rgroup*M + i];
-      xbuf1[rgroup*M + i] = buf[rgroup*(M-2) + i];
-    }
-    /* The wraparound pointers at top and bottom will be filled later
-     * (see set_wraparound_pointers, below).  Initially we want the "above"
-     * pointers to duplicate the first actual data line.  This only needs
-     * to happen in xbuffer[0].
-     */
-    for (i = 0; i < rgroup; i++) {
-      xbuf0[i - rgroup] = xbuf0[0];
-    }
-  }
-}
-
-
-LOCAL(void)
-set_wraparound_pointers (j_decompress_ptr cinfo)
-/* Set up the "wraparound" pointers at top and bottom of the pointer lists.
- * This changes the pointer list state from top-of-image to the normal state.
- */
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  int ci, i, rgroup;
-  int M = cinfo->min_DCT_v_scaled_size;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf0, xbuf1;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-      cinfo->min_DCT_v_scaled_size; /* height of a row group of component */
-    xbuf0 = mainp->xbuffer[0][ci];
-    xbuf1 = mainp->xbuffer[1][ci];
-    for (i = 0; i < rgroup; i++) {
-      xbuf0[i - rgroup] = xbuf0[rgroup*(M+1) + i];
-      xbuf1[i - rgroup] = xbuf1[rgroup*(M+1) + i];
-      xbuf0[rgroup*(M+2) + i] = xbuf0[i];
-      xbuf1[rgroup*(M+2) + i] = xbuf1[i];
-    }
-  }
-}
-
-
-LOCAL(void)
-set_bottom_pointers (j_decompress_ptr cinfo)
-/* Change the pointer lists to duplicate the last sample row at the bottom
- * of the image.  whichptr indicates which xbuffer holds the final iMCU row.
- * Also sets rowgroups_avail to indicate number of nondummy row groups in row.
- */
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  int ci, i, rgroup, iMCUheight, rows_left;
-  jpeg_component_info *compptr;
-  JSAMPARRAY xbuf;
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Count sample rows in one iMCU row and in one row group */
-    iMCUheight = compptr->v_samp_factor * compptr->DCT_v_scaled_size;
-    rgroup = iMCUheight / cinfo->min_DCT_v_scaled_size;
-    /* Count nondummy sample rows remaining for this component */
-    rows_left = (int) (compptr->downsampled_height % (JDIMENSION) iMCUheight);
-    if (rows_left == 0) rows_left = iMCUheight;
-    /* Count nondummy row groups.  Should get same answer for each component,
-     * so we need only do it once.
-     */
-    if (ci == 0) {
-      mainp->rowgroups_avail = (JDIMENSION) ((rows_left-1) / rgroup + 1);
-    }
-    /* Duplicate the last real sample row rgroup*2 times; this pads out the
-     * last partial rowgroup and ensures at least one full rowgroup of context.
-     */
-    xbuf = mainp->xbuffer[mainp->whichptr][ci];
-    for (i = 0; i < rgroup * 2; i++) {
-      xbuf[rows_left + i] = xbuf[rows_left-1];
-    }
-  }
-}
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_main (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (cinfo->upsample->need_context_rows) {
-      mainp->pub.process_data = process_data_context_main;
-      make_funny_pointers(cinfo); /* Create the xbuffer[] lists */
-      mainp->whichptr = 0;	/* Read first iMCU row into xbuffer[0] */
-      mainp->context_state = CTX_PREPARE_FOR_IMCU;
-      mainp->iMCU_row_ctr = 0;
-    } else {
-      /* Simple case with no context needed */
-      mainp->pub.process_data = process_data_simple_main;
-    }
-    mainp->buffer_full = FALSE;	/* Mark buffer empty */
-    mainp->rowgroup_ctr = 0;
-    break;
-#ifdef QUANT_2PASS_SUPPORTED
-  case JBUF_CRANK_DEST:
-    /* For last pass of 2-pass quantization, just crank the postprocessor */
-    mainp->pub.process_data = process_data_crank_post;
-    break;
-#endif
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-}
-
-
-/*
- * Process some data.
- * This handles the simple case where no context is required.
- */
-
-METHODDEF(void)
-process_data_simple_main (j_decompress_ptr cinfo,
-			  JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			  JDIMENSION out_rows_avail)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-  JDIMENSION rowgroups_avail;
-
-  /* Read input data if we haven't filled the main buffer yet */
-  if (! mainp->buffer_full) {
-    if (! (*cinfo->coef->decompress_data) (cinfo, mainp->buffer))
-      return;			/* suspension forced, can do nothing more */
-    mainp->buffer_full = TRUE;	/* OK, we have an iMCU row to work with */
-  }
-
-  /* There are always min_DCT_scaled_size row groups in an iMCU row. */
-  rowgroups_avail = (JDIMENSION) cinfo->min_DCT_v_scaled_size;
-  /* Note: at the bottom of the image, we may pass extra garbage row groups
-   * to the postprocessor.  The postprocessor has to check for bottom
-   * of image anyway (at row resolution), so no point in us doing it too.
-   */
-
-  /* Feed the postprocessor */
-  (*cinfo->post->post_process_data) (cinfo, mainp->buffer,
-				     &mainp->rowgroup_ctr, rowgroups_avail,
-				     output_buf, out_row_ctr, out_rows_avail);
-
-  /* Has postprocessor consumed all the data yet? If so, mark buffer empty */
-  if (mainp->rowgroup_ctr >= rowgroups_avail) {
-    mainp->buffer_full = FALSE;
-    mainp->rowgroup_ctr = 0;
-  }
-}
-
-
-/*
- * Process some data.
- * This handles the case where context rows must be provided.
- */
-
-METHODDEF(void)
-process_data_context_main (j_decompress_ptr cinfo,
-			   JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			   JDIMENSION out_rows_avail)
-{
-  my_main_ptr mainp = (my_main_ptr) cinfo->main;
-
-  /* Read input data if we haven't filled the main buffer yet */
-  if (! mainp->buffer_full) {
-    if (! (*cinfo->coef->decompress_data) (cinfo,
-					   mainp->xbuffer[mainp->whichptr]))
-      return;			/* suspension forced, can do nothing more */
-    mainp->buffer_full = TRUE;	/* OK, we have an iMCU row to work with */
-    mainp->iMCU_row_ctr++;	/* count rows received */
-  }
-
-  /* Postprocessor typically will not swallow all the input data it is handed
-   * in one call (due to filling the output buffer first).  Must be prepared
-   * to exit and restart.  This switch lets us keep track of how far we got.
-   * Note that each case falls through to the next on successful completion.
-   */
-  switch (mainp->context_state) {
-  case CTX_POSTPONED_ROW:
-    /* Call postprocessor using previously set pointers for postponed row */
-    (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr],
-			&mainp->rowgroup_ctr, mainp->rowgroups_avail,
-			output_buf, out_row_ctr, out_rows_avail);
-    if (mainp->rowgroup_ctr < mainp->rowgroups_avail)
-      return;			/* Need to suspend */
-    mainp->context_state = CTX_PREPARE_FOR_IMCU;
-    if (*out_row_ctr >= out_rows_avail)
-      return;			/* Postprocessor exactly filled output buf */
-    /*FALLTHROUGH*/
-  case CTX_PREPARE_FOR_IMCU:
-    /* Prepare to process first M-1 row groups of this iMCU row */
-    mainp->rowgroup_ctr = 0;
-    mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size - 1);
-    /* Check for bottom of image: if so, tweak pointers to "duplicate"
-     * the last sample row, and adjust rowgroups_avail to ignore padding rows.
-     */
-    if (mainp->iMCU_row_ctr == cinfo->total_iMCU_rows)
-      set_bottom_pointers(cinfo);
-    mainp->context_state = CTX_PROCESS_IMCU;
-    /*FALLTHROUGH*/
-  case CTX_PROCESS_IMCU:
-    /* Call postprocessor using previously set pointers */
-    (*cinfo->post->post_process_data) (cinfo, mainp->xbuffer[mainp->whichptr],
-			&mainp->rowgroup_ctr, mainp->rowgroups_avail,
-			output_buf, out_row_ctr, out_rows_avail);
-    if (mainp->rowgroup_ctr < mainp->rowgroups_avail)
-      return;			/* Need to suspend */
-    /* After the first iMCU, change wraparound pointers to normal state */
-    if (mainp->iMCU_row_ctr == 1)
-      set_wraparound_pointers(cinfo);
-    /* Prepare to load new iMCU row using other xbuffer list */
-    mainp->whichptr ^= 1;	/* 0=>1 or 1=>0 */
-    mainp->buffer_full = FALSE;
-    /* Still need to process last row group of this iMCU row, */
-    /* which is saved at index M+1 of the other xbuffer */
-    mainp->rowgroup_ctr = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 1);
-    mainp->rowgroups_avail = (JDIMENSION) (cinfo->min_DCT_v_scaled_size + 2);
-    mainp->context_state = CTX_POSTPONED_ROW;
-  }
-}
-
-
-/*
- * Process some data.
- * Final pass of two-pass quantization: just call the postprocessor.
- * Source data will be the postprocessor controller's internal buffer.
- */
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-METHODDEF(void)
-process_data_crank_post (j_decompress_ptr cinfo,
-			 JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			 JDIMENSION out_rows_avail)
-{
-  (*cinfo->post->post_process_data) (cinfo, (JSAMPIMAGE) NULL,
-				     (JDIMENSION *) NULL, (JDIMENSION) 0,
-				     output_buf, out_row_ctr, out_rows_avail);
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
-
-
-/*
- * Initialize main buffer controller.
- */
-
-GLOBAL(void)
-jinit_d_main_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_main_ptr mainp;
-  int ci, rgroup, ngroups;
-  jpeg_component_info *compptr;
-
-  mainp = (my_main_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_main_controller));
-  cinfo->main = &mainp->pub;
-  mainp->pub.start_pass = start_pass_main;
-
-  if (need_full_buffer)		/* shouldn't happen */
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-
-  /* Allocate the workspace.
-   * ngroups is the number of row groups we need.
-   */
-  if (cinfo->upsample->need_context_rows) {
-    if (cinfo->min_DCT_v_scaled_size < 2) /* unsupported, see comments above */
-      ERREXIT(cinfo, JERR_NOTIMPL);
-    alloc_funny_pointers(cinfo); /* Alloc space for xbuffer[] lists */
-    ngroups = cinfo->min_DCT_v_scaled_size + 2;
-  } else {
-    ngroups = cinfo->min_DCT_v_scaled_size;
-  }
-
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    rgroup = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-      cinfo->min_DCT_v_scaled_size; /* height of a row group of component */
-    mainp->buffer[ci] = (*cinfo->mem->alloc_sarray)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       compptr->width_in_blocks * ((JDIMENSION) compptr->DCT_h_scaled_size),
-       (JDIMENSION) (rgroup * ngroups));
-  }
-}
--- a/DoConfig/fltk/jpeg/jdmarker.c
+++ /dev/null
@@ -1,1511 +1,0 @@
-/*
- * jdmarker.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2009-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains routines to decode JPEG datastream markers.
- * Most of the complexity arises from our desire to support input
- * suspension: if not all of the data for a marker is available,
- * we must exit back to the application.  On resumption, we reprocess
- * the marker.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-typedef enum {			/* JPEG marker codes */
-  M_SOF0  = 0xc0,
-  M_SOF1  = 0xc1,
-  M_SOF2  = 0xc2,
-  M_SOF3  = 0xc3,
-
-  M_SOF5  = 0xc5,
-  M_SOF6  = 0xc6,
-  M_SOF7  = 0xc7,
-
-  M_JPG   = 0xc8,
-  M_SOF9  = 0xc9,
-  M_SOF10 = 0xca,
-  M_SOF11 = 0xcb,
-
-  M_SOF13 = 0xcd,
-  M_SOF14 = 0xce,
-  M_SOF15 = 0xcf,
-
-  M_DHT   = 0xc4,
-
-  M_DAC   = 0xcc,
-
-  M_RST0  = 0xd0,
-  M_RST1  = 0xd1,
-  M_RST2  = 0xd2,
-  M_RST3  = 0xd3,
-  M_RST4  = 0xd4,
-  M_RST5  = 0xd5,
-  M_RST6  = 0xd6,
-  M_RST7  = 0xd7,
-
-  M_SOI   = 0xd8,
-  M_EOI   = 0xd9,
-  M_SOS   = 0xda,
-  M_DQT   = 0xdb,
-  M_DNL   = 0xdc,
-  M_DRI   = 0xdd,
-  M_DHP   = 0xde,
-  M_EXP   = 0xdf,
-
-  M_APP0  = 0xe0,
-  M_APP1  = 0xe1,
-  M_APP2  = 0xe2,
-  M_APP3  = 0xe3,
-  M_APP4  = 0xe4,
-  M_APP5  = 0xe5,
-  M_APP6  = 0xe6,
-  M_APP7  = 0xe7,
-  M_APP8  = 0xe8,
-  M_APP9  = 0xe9,
-  M_APP10 = 0xea,
-  M_APP11 = 0xeb,
-  M_APP12 = 0xec,
-  M_APP13 = 0xed,
-  M_APP14 = 0xee,
-  M_APP15 = 0xef,
-
-  M_JPG0  = 0xf0,
-  M_JPG8  = 0xf8,
-  M_JPG13 = 0xfd,
-  M_COM   = 0xfe,
-
-  M_TEM   = 0x01,
-
-  M_ERROR = 0x100
-} JPEG_MARKER;
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_marker_reader pub; /* public fields */
-
-  /* Application-overridable marker processing methods */
-  jpeg_marker_parser_method process_COM;
-  jpeg_marker_parser_method process_APPn[16];
-
-  /* Limit on marker data length to save for each marker type */
-  unsigned int length_limit_COM;
-  unsigned int length_limit_APPn[16];
-
-  /* Status of COM/APPn marker saving */
-  jpeg_saved_marker_ptr cur_marker;	/* NULL if not processing a marker */
-  unsigned int bytes_read;		/* data bytes read so far in marker */
-  /* Note: cur_marker is not linked into marker_list until it's all read. */
-} my_marker_reader;
-
-typedef my_marker_reader * my_marker_ptr;
-
-
-/*
- * Macros for fetching data from the data source module.
- *
- * At all times, cinfo->src->next_input_byte and ->bytes_in_buffer reflect
- * the current restart point; we update them only when we have reached a
- * suitable place to restart if a suspension occurs.
- */
-
-/* Declare and initialize local copies of input pointer/count */
-#define INPUT_VARS(cinfo)  \
-	struct jpeg_source_mgr * datasrc = (cinfo)->src;  \
-	const JOCTET * next_input_byte = datasrc->next_input_byte;  \
-	size_t bytes_in_buffer = datasrc->bytes_in_buffer
-
-/* Unload the local copies --- do this only at a restart boundary */
-#define INPUT_SYNC(cinfo)  \
-	( datasrc->next_input_byte = next_input_byte,  \
-	  datasrc->bytes_in_buffer = bytes_in_buffer )
-
-/* Reload the local copies --- used only in MAKE_BYTE_AVAIL */
-#define INPUT_RELOAD(cinfo)  \
-	( next_input_byte = datasrc->next_input_byte,  \
-	  bytes_in_buffer = datasrc->bytes_in_buffer )
-
-/* Internal macro for INPUT_BYTE and INPUT_2BYTES: make a byte available.
- * Note we do *not* do INPUT_SYNC before calling fill_input_buffer,
- * but we must reload the local copies after a successful fill.
- */
-#define MAKE_BYTE_AVAIL(cinfo,action)  \
-	if (bytes_in_buffer == 0) {  \
-	  if (! (*datasrc->fill_input_buffer) (cinfo))  \
-	    { action; }  \
-	  INPUT_RELOAD(cinfo);  \
-	}
-
-/* Read a byte into variable V.
- * If must suspend, take the specified action (typically "return FALSE").
- */
-#define INPUT_BYTE(cinfo,V,action)  \
-	MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V = GETJOCTET(*next_input_byte++); )
-
-/* As above, but read two bytes interpreted as an unsigned 16-bit integer.
- * V should be declared unsigned int or perhaps INT32.
- */
-#define INPUT_2BYTES(cinfo,V,action)  \
-	MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V = ((unsigned int) GETJOCTET(*next_input_byte++)) << 8; \
-		  MAKE_BYTE_AVAIL(cinfo,action); \
-		  bytes_in_buffer--; \
-		  V += GETJOCTET(*next_input_byte++); )
-
-
-/*
- * Routines to process JPEG markers.
- *
- * Entry condition: JPEG marker itself has been read and its code saved
- *   in cinfo->unread_marker; input restart point is just after the marker.
- *
- * Exit: if return TRUE, have read and processed any parameters, and have
- *   updated the restart point to point after the parameters.
- *   If return FALSE, was forced to suspend before reaching end of
- *   marker parameters; restart point has not been moved.  Same routine
- *   will be called again after application supplies more input data.
- *
- * This approach to suspension assumes that all of a marker's parameters
- * can fit into a single input bufferload.  This should hold for "normal"
- * markers.  Some COM/APPn markers might have large parameter segments
- * that might not fit.  If we are simply dropping such a marker, we use
- * skip_input_data to get past it, and thereby put the problem on the
- * source manager's shoulders.  If we are saving the marker's contents
- * into memory, we use a slightly different convention: when forced to
- * suspend, the marker processor updates the restart point to the end of
- * what it's consumed (ie, the end of the buffer) before returning FALSE.
- * On resumption, cinfo->unread_marker still contains the marker code,
- * but the data source will point to the next chunk of marker data.
- * The marker processor must retain internal state to deal with this.
- *
- * Note that we don't bother to avoid duplicate trace messages if a
- * suspension occurs within marker parameters.  Other side effects
- * require more care.
- */
-
-
-LOCAL(boolean)
-get_soi (j_decompress_ptr cinfo)
-/* Process an SOI marker */
-{
-  int i;
-  
-  TRACEMS(cinfo, 1, JTRC_SOI);
-
-  if (cinfo->marker->saw_SOI)
-    ERREXIT(cinfo, JERR_SOI_DUPLICATE);
-
-  /* Reset all parameters that are defined to be reset by SOI */
-
-  for (i = 0; i < NUM_ARITH_TBLS; i++) {
-    cinfo->arith_dc_L[i] = 0;
-    cinfo->arith_dc_U[i] = 1;
-    cinfo->arith_ac_K[i] = 5;
-  }
-  cinfo->restart_interval = 0;
-
-  /* Set initial assumptions for colorspace etc */
-
-  cinfo->jpeg_color_space = JCS_UNKNOWN;
-  cinfo->color_transform = JCT_NONE;
-  cinfo->CCIR601_sampling = FALSE; /* Assume non-CCIR sampling??? */
-
-  cinfo->saw_JFIF_marker = FALSE;
-  cinfo->JFIF_major_version = 1; /* set default JFIF APP0 values */
-  cinfo->JFIF_minor_version = 1;
-  cinfo->density_unit = 0;
-  cinfo->X_density = 1;
-  cinfo->Y_density = 1;
-  cinfo->saw_Adobe_marker = FALSE;
-  cinfo->Adobe_transform = 0;
-
-  cinfo->marker->saw_SOI = TRUE;
-
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog,
-	 boolean is_arith)
-/* Process a SOFn marker */
-{
-  INT32 length;
-  int c, ci, i;
-  jpeg_component_info * compptr;
-  INPUT_VARS(cinfo);
-
-  cinfo->is_baseline = is_baseline;
-  cinfo->progressive_mode = is_prog;
-  cinfo->arith_code = is_arith;
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  INPUT_BYTE(cinfo, cinfo->data_precision, return FALSE);
-  INPUT_2BYTES(cinfo, cinfo->image_height, return FALSE);
-  INPUT_2BYTES(cinfo, cinfo->image_width, return FALSE);
-  INPUT_BYTE(cinfo, cinfo->num_components, return FALSE);
-
-  length -= 8;
-
-  TRACEMS4(cinfo, 1, JTRC_SOF, cinfo->unread_marker,
-	   (int) cinfo->image_width, (int) cinfo->image_height,
-	   cinfo->num_components);
-
-  if (cinfo->marker->saw_SOF)
-    ERREXIT(cinfo, JERR_SOF_DUPLICATE);
-
-  /* We don't support files in which the image height is initially specified */
-  /* as 0 and is later redefined by DNL.  As long as we have to check that,  */
-  /* might as well have a general sanity check. */
-  if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
-      cinfo->num_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  if (length != (cinfo->num_components * 3))
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  if (cinfo->comp_info == NULL)	/* do only once, even if suspend */
-    cinfo->comp_info = (jpeg_component_info *) (*cinfo->mem->alloc_small)
-			((j_common_ptr) cinfo, JPOOL_IMAGE,
-			 cinfo->num_components * SIZEOF(jpeg_component_info));
-
-  for (ci = 0; ci < cinfo->num_components; ci++) {
-    INPUT_BYTE(cinfo, c, return FALSE);
-    /* Check to see whether component id has already been seen   */
-    /* (in violation of the spec, but unfortunately seen in some */
-    /* files).  If so, create "fake" component id equal to the   */
-    /* max id seen so far + 1. */
-    for (i = 0, compptr = cinfo->comp_info; i < ci; i++, compptr++) {
-      if (c == compptr->component_id) {
-	compptr = cinfo->comp_info;
-	c = compptr->component_id;
-	compptr++;
-	for (i = 1; i < ci; i++, compptr++) {
-	  if (compptr->component_id > c) c = compptr->component_id;
-	}
-	c++;
-	break;
-      }
-    }
-    compptr->component_id = c;
-    compptr->component_index = ci;
-    INPUT_BYTE(cinfo, c, return FALSE);
-    compptr->h_samp_factor = (c >> 4) & 15;
-    compptr->v_samp_factor = (c     ) & 15;
-    INPUT_BYTE(cinfo, compptr->quant_tbl_no, return FALSE);
-
-    TRACEMS4(cinfo, 1, JTRC_SOF_COMPONENT,
-	     compptr->component_id, compptr->h_samp_factor,
-	     compptr->v_samp_factor, compptr->quant_tbl_no);
-  }
-
-  cinfo->marker->saw_SOF = TRUE;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_sos (j_decompress_ptr cinfo)
-/* Process a SOS marker */
-{
-  INT32 length;
-  int c, ci, i, n;
-  jpeg_component_info * compptr;
-  INPUT_VARS(cinfo);
-
-  if (! cinfo->marker->saw_SOF)
-    ERREXITS(cinfo, JERR_SOF_BEFORE, "SOS");
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  INPUT_BYTE(cinfo, n, return FALSE); /* Number of components */
-
-  TRACEMS1(cinfo, 1, JTRC_SOS, n);
-
-  if (length != (n * 2 + 6) || n > MAX_COMPS_IN_SCAN ||
-      (n == 0 && !cinfo->progressive_mode))
-      /* pseudo SOS marker only allowed in progressive mode */
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  cinfo->comps_in_scan = n;
-
-  /* Collect the component-spec parameters */
-
-  for (i = 0; i < n; i++) {
-    INPUT_BYTE(cinfo, c, return FALSE);
-
-    /* Detect the case where component id's are not unique, and, if so, */
-    /* create a fake component id using the same logic as in get_sof.   */
-    /* Note:  This also ensures that all of the SOF components are      */
-    /* referenced in the single scan case, which prevents access to     */
-    /* uninitialized memory in later decoding stages. */
-    for (ci = 0; ci < i; ci++) {
-      if (c == cinfo->cur_comp_info[ci]->component_id) {
-	c = cinfo->cur_comp_info[0]->component_id;
-	for (ci = 1; ci < i; ci++) {
-	  compptr = cinfo->cur_comp_info[ci];
-	  if (compptr->component_id > c) c = compptr->component_id;
-	}
-	c++;
-	break;
-      }
-    }
-
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      if (c == compptr->component_id)
-	goto id_found;
-    }
-
-    ERREXIT1(cinfo, JERR_BAD_COMPONENT_ID, c);
-
-  id_found:
-
-    cinfo->cur_comp_info[i] = compptr;
-    INPUT_BYTE(cinfo, c, return FALSE);
-    compptr->dc_tbl_no = (c >> 4) & 15;
-    compptr->ac_tbl_no = (c     ) & 15;
-
-    TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, compptr->component_id,
-	     compptr->dc_tbl_no, compptr->ac_tbl_no);
-  }
-
-  /* Collect the additional scan parameters Ss, Se, Ah/Al. */
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Ss = c;
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Se = c;
-  INPUT_BYTE(cinfo, c, return FALSE);
-  cinfo->Ah = (c >> 4) & 15;
-  cinfo->Al = (c     ) & 15;
-
-  TRACEMS4(cinfo, 1, JTRC_SOS_PARAMS, cinfo->Ss, cinfo->Se,
-	   cinfo->Ah, cinfo->Al);
-
-  /* Prepare to scan data & restart markers */
-  cinfo->marker->next_restart_num = 0;
-
-  /* Count another (non-pseudo) SOS marker */
-  if (n) cinfo->input_scan_number++;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-#ifdef D_ARITH_CODING_SUPPORTED
-
-LOCAL(boolean)
-get_dac (j_decompress_ptr cinfo)
-/* Process a DAC marker */
-{
-  INT32 length;
-  int index, val;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-  
-  while (length > 0) {
-    INPUT_BYTE(cinfo, index, return FALSE);
-    INPUT_BYTE(cinfo, val, return FALSE);
-
-    length -= 2;
-
-    TRACEMS2(cinfo, 1, JTRC_DAC, index, val);
-
-    if (index < 0 || index >= (2*NUM_ARITH_TBLS))
-      ERREXIT1(cinfo, JERR_DAC_INDEX, index);
-
-    if (index >= NUM_ARITH_TBLS) { /* define AC table */
-      cinfo->arith_ac_K[index-NUM_ARITH_TBLS] = (UINT8) val;
-    } else {			/* define DC table */
-      cinfo->arith_dc_L[index] = (UINT8) (val & 0x0F);
-      cinfo->arith_dc_U[index] = (UINT8) (val >> 4);
-      if (cinfo->arith_dc_L[index] > cinfo->arith_dc_U[index])
-	ERREXIT1(cinfo, JERR_DAC_VALUE, val);
-    }
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-#else /* ! D_ARITH_CODING_SUPPORTED */
-
-#define get_dac(cinfo)  skip_variable(cinfo)
-
-#endif /* D_ARITH_CODING_SUPPORTED */
-
-
-LOCAL(boolean)
-get_dht (j_decompress_ptr cinfo)
-/* Process a DHT marker */
-{
-  INT32 length;
-  UINT8 bits[17];
-  UINT8 huffval[256];
-  int i, index, count;
-  JHUFF_TBL **htblptr;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-  
-  while (length > 16) {
-    INPUT_BYTE(cinfo, index, return FALSE);
-
-    TRACEMS1(cinfo, 1, JTRC_DHT, index);
-      
-    bits[0] = 0;
-    count = 0;
-    for (i = 1; i <= 16; i++) {
-      INPUT_BYTE(cinfo, bits[i], return FALSE);
-      count += bits[i];
-    }
-
-    length -= 1 + 16;
-
-    TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
-	     bits[1], bits[2], bits[3], bits[4],
-	     bits[5], bits[6], bits[7], bits[8]);
-    TRACEMS8(cinfo, 2, JTRC_HUFFBITS,
-	     bits[9], bits[10], bits[11], bits[12],
-	     bits[13], bits[14], bits[15], bits[16]);
-
-    /* Here we just do minimal validation of the counts to avoid walking
-     * off the end of our table space.  jdhuff.c will check more carefully.
-     */
-    if (count > 256 || ((INT32) count) > length)
-      ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
-
-    MEMZERO(huffval, SIZEOF(huffval)); /* pre-zero array for later copy */
-
-    for (i = 0; i < count; i++)
-      INPUT_BYTE(cinfo, huffval[i], return FALSE);
-
-    length -= count;
-
-    if (index & 0x10) {		/* AC table definition */
-      index -= 0x10;
-      htblptr = &cinfo->ac_huff_tbl_ptrs[index];
-    } else {			/* DC table definition */
-      htblptr = &cinfo->dc_huff_tbl_ptrs[index];
-    }
-
-    if (index < 0 || index >= NUM_HUFF_TBLS)
-      ERREXIT1(cinfo, JERR_DHT_INDEX, index);
-
-    if (*htblptr == NULL)
-      *htblptr = jpeg_alloc_huff_table((j_common_ptr) cinfo);
-  
-    MEMCOPY((*htblptr)->bits, bits, SIZEOF((*htblptr)->bits));
-    MEMCOPY((*htblptr)->huffval, huffval, SIZEOF((*htblptr)->huffval));
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_dqt (j_decompress_ptr cinfo)
-/* Process a DQT marker */
-{
-  INT32 length, count, i;
-  int n, prec;
-  unsigned int tmp;
-  JQUANT_TBL *quant_ptr;
-  const int *natural_order;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  while (length > 0) {
-    length--;
-    INPUT_BYTE(cinfo, n, return FALSE);
-    prec = n >> 4;
-    n &= 0x0F;
-
-    TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);
-
-    if (n >= NUM_QUANT_TBLS)
-      ERREXIT1(cinfo, JERR_DQT_INDEX, n);
-      
-    if (cinfo->quant_tbl_ptrs[n] == NULL)
-      cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo);
-    quant_ptr = cinfo->quant_tbl_ptrs[n];
-
-    if (prec) {
-      if (length < DCTSIZE2 * 2) {
-	/* Initialize full table for safety. */
-	for (i = 0; i < DCTSIZE2; i++) {
-	  quant_ptr->quantval[i] = 1;
-	}
-	count = length >> 1;
-      } else
-	count = DCTSIZE2;
-    } else {
-      if (length < DCTSIZE2) {
-	/* Initialize full table for safety. */
-	for (i = 0; i < DCTSIZE2; i++) {
-	  quant_ptr->quantval[i] = 1;
-	}
-	count = length;
-      } else
-	count = DCTSIZE2;
-    }
-
-    switch (count) {
-    case (2*2): natural_order = jpeg_natural_order2; break;
-    case (3*3): natural_order = jpeg_natural_order3; break;
-    case (4*4): natural_order = jpeg_natural_order4; break;
-    case (5*5): natural_order = jpeg_natural_order5; break;
-    case (6*6): natural_order = jpeg_natural_order6; break;
-    case (7*7): natural_order = jpeg_natural_order7; break;
-    default:    natural_order = jpeg_natural_order;  break;
-    }
-
-    for (i = 0; i < count; i++) {
-      if (prec)
-	INPUT_2BYTES(cinfo, tmp, return FALSE);
-      else
-	INPUT_BYTE(cinfo, tmp, return FALSE);
-      /* We convert the zigzag-order table to natural array order. */
-      quant_ptr->quantval[natural_order[i]] = (UINT16) tmp;
-    }
-
-    if (cinfo->err->trace_level >= 2) {
-      for (i = 0; i < DCTSIZE2; i += 8) {
-	TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
-		 quant_ptr->quantval[i],   quant_ptr->quantval[i+1],
-		 quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
-		 quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
-		 quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
-      }
-    }
-
-    length -= count;
-    if (prec) length -= count;
-  }
-
-  if (length != 0)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_dri (j_decompress_ptr cinfo)
-/* Process a DRI marker */
-{
-  INT32 length;
-  unsigned int tmp;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  
-  if (length != 4)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-
-  TRACEMS1(cinfo, 1, JTRC_DRI, tmp);
-
-  cinfo->restart_interval = tmp;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-get_lse (j_decompress_ptr cinfo)
-/* Process an LSE marker */
-{
-  INT32 length;
-  unsigned int tmp;
-  int cid;
-  INPUT_VARS(cinfo);
-
-  if (! cinfo->marker->saw_SOF)
-    ERREXITS(cinfo, JERR_SOF_BEFORE, "LSE");
-
-  if (cinfo->num_components < 3) goto bad;
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-
-  if (length != 24)
-    ERREXIT(cinfo, JERR_BAD_LENGTH);
-
-  INPUT_BYTE(cinfo, tmp, return FALSE);
-  if (tmp != 0x0D)	/* ID inverse transform specification */
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != MAXJSAMPLE) goto bad;		/* MAXTRANS */
-  INPUT_BYTE(cinfo, tmp, return FALSE);
-  if (tmp != 3) goto bad;			/* Nt=3 */
-  INPUT_BYTE(cinfo, cid, return FALSE);
-  if (cid != cinfo->comp_info[1].component_id) goto bad;
-  INPUT_BYTE(cinfo, cid, return FALSE);
-  if (cid != cinfo->comp_info[0].component_id) goto bad;
-  INPUT_BYTE(cinfo, cid, return FALSE);
-  if (cid != cinfo->comp_info[2].component_id) goto bad;
-  INPUT_BYTE(cinfo, tmp, return FALSE);
-  if (tmp != 0x80) goto bad;		/* F1: CENTER1=1, NORM1=0 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 0) goto bad;			/* A(1,1)=0 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 0) goto bad;			/* A(1,2)=0 */
-  INPUT_BYTE(cinfo, tmp, return FALSE);
-  if (tmp != 0) goto bad;		/* F2: CENTER2=0, NORM2=0 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 1) goto bad;			/* A(2,1)=1 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 0) goto bad;			/* A(2,2)=0 */
-  INPUT_BYTE(cinfo, tmp, return FALSE);
-  if (tmp != 0) goto bad;		/* F3: CENTER3=0, NORM3=0 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 1) goto bad;			/* A(3,1)=1 */
-  INPUT_2BYTES(cinfo, tmp, return FALSE);
-  if (tmp != 0) {				/* A(3,2)=0 */
-    bad:
-    ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
-  }
-
-  /* OK, valid transform that we can handle. */
-  cinfo->color_transform = JCT_SUBTRACT_GREEN;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Routines for processing APPn and COM markers.
- * These are either saved in memory or discarded, per application request.
- * APP0 and APP14 are specially checked to see if they are
- * JFIF and Adobe markers, respectively.
- */
-
-#define APP0_DATA_LEN	14	/* Length of interesting data in APP0 */
-#define APP14_DATA_LEN	12	/* Length of interesting data in APP14 */
-#define APPN_DATA_LEN	14	/* Must be the largest of the above!! */
-
-
-LOCAL(void)
-examine_app0 (j_decompress_ptr cinfo, JOCTET FAR * data,
-	      unsigned int datalen, INT32 remaining)
-/* Examine first few bytes from an APP0.
- * Take appropriate action if it is a JFIF marker.
- * datalen is # of bytes at data[], remaining is length of rest of marker data.
- */
-{
-  INT32 totallen = (INT32) datalen + remaining;
-
-  if (datalen >= APP0_DATA_LEN &&
-      GETJOCTET(data[0]) == 0x4A &&
-      GETJOCTET(data[1]) == 0x46 &&
-      GETJOCTET(data[2]) == 0x49 &&
-      GETJOCTET(data[3]) == 0x46 &&
-      GETJOCTET(data[4]) == 0) {
-    /* Found JFIF APP0 marker: save info */
-    cinfo->saw_JFIF_marker = TRUE;
-    cinfo->JFIF_major_version = GETJOCTET(data[5]);
-    cinfo->JFIF_minor_version = GETJOCTET(data[6]);
-    cinfo->density_unit = GETJOCTET(data[7]);
-    cinfo->X_density = (GETJOCTET(data[8]) << 8) + GETJOCTET(data[9]);
-    cinfo->Y_density = (GETJOCTET(data[10]) << 8) + GETJOCTET(data[11]);
-    /* Check version.
-     * Major version must be 1 or 2, anything else signals an incompatible
-     * change.
-     * (We used to treat this as an error, but now it's a nonfatal warning,
-     * because some bozo at Hijaak couldn't read the spec.)
-     * Minor version should be 0..2, but process anyway if newer.
-     */
-    if (cinfo->JFIF_major_version != 1 && cinfo->JFIF_major_version != 2)
-      WARNMS2(cinfo, JWRN_JFIF_MAJOR,
-	      cinfo->JFIF_major_version, cinfo->JFIF_minor_version);
-    /* Generate trace messages */
-    TRACEMS5(cinfo, 1, JTRC_JFIF,
-	     cinfo->JFIF_major_version, cinfo->JFIF_minor_version,
-	     cinfo->X_density, cinfo->Y_density, cinfo->density_unit);
-    /* Validate thumbnail dimensions and issue appropriate messages */
-    if (GETJOCTET(data[12]) | GETJOCTET(data[13]))
-      TRACEMS2(cinfo, 1, JTRC_JFIF_THUMBNAIL,
-	       GETJOCTET(data[12]), GETJOCTET(data[13]));
-    totallen -= APP0_DATA_LEN;
-    if (totallen !=
-	((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3))
-      TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
-  } else if (datalen >= 6 &&
-      GETJOCTET(data[0]) == 0x4A &&
-      GETJOCTET(data[1]) == 0x46 &&
-      GETJOCTET(data[2]) == 0x58 &&
-      GETJOCTET(data[3]) == 0x58 &&
-      GETJOCTET(data[4]) == 0) {
-    /* Found JFIF "JFXX" extension APP0 marker */
-    /* The library doesn't actually do anything with these,
-     * but we try to produce a helpful trace message.
-     */
-    switch (GETJOCTET(data[5])) {
-    case 0x10:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_JPEG, (int) totallen);
-      break;
-    case 0x11:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_PALETTE, (int) totallen);
-      break;
-    case 0x13:
-      TRACEMS1(cinfo, 1, JTRC_THUMB_RGB, (int) totallen);
-      break;
-    default:
-      TRACEMS2(cinfo, 1, JTRC_JFIF_EXTENSION,
-	       GETJOCTET(data[5]), (int) totallen);
-      break;
-    }
-  } else {
-    /* Start of APP0 does not match "JFIF" or "JFXX", or too short */
-    TRACEMS1(cinfo, 1, JTRC_APP0, (int) totallen);
-  }
-}
-
-
-LOCAL(void)
-examine_app14 (j_decompress_ptr cinfo, JOCTET FAR * data,
-	       unsigned int datalen, INT32 remaining)
-/* Examine first few bytes from an APP14.
- * Take appropriate action if it is an Adobe marker.
- * datalen is # of bytes at data[], remaining is length of rest of marker data.
- */
-{
-  unsigned int version, flags0, flags1, transform;
-
-  if (datalen >= APP14_DATA_LEN &&
-      GETJOCTET(data[0]) == 0x41 &&
-      GETJOCTET(data[1]) == 0x64 &&
-      GETJOCTET(data[2]) == 0x6F &&
-      GETJOCTET(data[3]) == 0x62 &&
-      GETJOCTET(data[4]) == 0x65) {
-    /* Found Adobe APP14 marker */
-    version = (GETJOCTET(data[5]) << 8) + GETJOCTET(data[6]);
-    flags0 = (GETJOCTET(data[7]) << 8) + GETJOCTET(data[8]);
-    flags1 = (GETJOCTET(data[9]) << 8) + GETJOCTET(data[10]);
-    transform = GETJOCTET(data[11]);
-    TRACEMS4(cinfo, 1, JTRC_ADOBE, version, flags0, flags1, transform);
-    cinfo->saw_Adobe_marker = TRUE;
-    cinfo->Adobe_transform = (UINT8) transform;
-  } else {
-    /* Start of APP14 does not match "Adobe", or too short */
-    TRACEMS1(cinfo, 1, JTRC_APP14, (int) (datalen + remaining));
-  }
-}
-
-
-METHODDEF(boolean)
-get_interesting_appn (j_decompress_ptr cinfo)
-/* Process an APP0 or APP14 marker without saving it */
-{
-  INT32 length;
-  JOCTET b[APPN_DATA_LEN];
-  unsigned int i, numtoread;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-
-  /* get the interesting part of the marker data */
-  if (length >= APPN_DATA_LEN)
-    numtoread = APPN_DATA_LEN;
-  else if (length > 0)
-    numtoread = (unsigned int) length;
-  else
-    numtoread = 0;
-  for (i = 0; i < numtoread; i++)
-    INPUT_BYTE(cinfo, b[i], return FALSE);
-  length -= numtoread;
-
-  /* process it */
-  switch (cinfo->unread_marker) {
-  case M_APP0:
-    examine_app0(cinfo, (JOCTET FAR *) b, numtoread, length);
-    break;
-  case M_APP14:
-    examine_app14(cinfo, (JOCTET FAR *) b, numtoread, length);
-    break;
-  default:
-    /* can't get here unless jpeg_save_markers chooses wrong processor */
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
-    break;
-  }
-
-  /* skip any remaining data -- could be lots */
-  INPUT_SYNC(cinfo);
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-
-#ifdef SAVE_MARKERS_SUPPORTED
-
-METHODDEF(boolean)
-save_marker (j_decompress_ptr cinfo)
-/* Save an APPn or COM marker into the marker list */
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-  jpeg_saved_marker_ptr cur_marker = marker->cur_marker;
-  unsigned int bytes_read, data_length;
-  JOCTET FAR * data;
-  INT32 length = 0;
-  INPUT_VARS(cinfo);
-
-  if (cur_marker == NULL) {
-    /* begin reading a marker */
-    INPUT_2BYTES(cinfo, length, return FALSE);
-    length -= 2;
-    if (length >= 0) {		/* watch out for bogus length word */
-      /* figure out how much we want to save */
-      unsigned int limit;
-      if (cinfo->unread_marker == (int) M_COM)
-	limit = marker->length_limit_COM;
-      else
-	limit = marker->length_limit_APPn[cinfo->unread_marker - (int) M_APP0];
-      if ((unsigned int) length < limit)
-	limit = (unsigned int) length;
-      /* allocate and initialize the marker item */
-      cur_marker = (jpeg_saved_marker_ptr)
-	(*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				    SIZEOF(struct jpeg_marker_struct) + limit);
-      cur_marker->next = NULL;
-      cur_marker->marker = (UINT8) cinfo->unread_marker;
-      cur_marker->original_length = (unsigned int) length;
-      cur_marker->data_length = limit;
-      /* data area is just beyond the jpeg_marker_struct */
-      data = cur_marker->data = (JOCTET FAR *) (cur_marker + 1);
-      marker->cur_marker = cur_marker;
-      marker->bytes_read = 0;
-      bytes_read = 0;
-      data_length = limit;
-    } else {
-      /* deal with bogus length word */
-      bytes_read = data_length = 0;
-      data = NULL;
-    }
-  } else {
-    /* resume reading a marker */
-    bytes_read = marker->bytes_read;
-    data_length = cur_marker->data_length;
-    data = cur_marker->data + bytes_read;
-  }
-
-  while (bytes_read < data_length) {
-    INPUT_SYNC(cinfo);		/* move the restart point to here */
-    marker->bytes_read = bytes_read;
-    /* If there's not at least one byte in buffer, suspend */
-    MAKE_BYTE_AVAIL(cinfo, return FALSE);
-    /* Copy bytes with reasonable rapidity */
-    while (bytes_read < data_length && bytes_in_buffer > 0) {
-      *data++ = *next_input_byte++;
-      bytes_in_buffer--;
-      bytes_read++;
-    }
-  }
-
-  /* Done reading what we want to read */
-  if (cur_marker != NULL) {	/* will be NULL if bogus length word */
-    /* Add new marker to end of list */
-    if (cinfo->marker_list == NULL) {
-      cinfo->marker_list = cur_marker;
-    } else {
-      jpeg_saved_marker_ptr prev = cinfo->marker_list;
-      while (prev->next != NULL)
-	prev = prev->next;
-      prev->next = cur_marker;
-    }
-    /* Reset pointer & calc remaining data length */
-    data = cur_marker->data;
-    length = cur_marker->original_length - data_length;
-  }
-  /* Reset to initial state for next marker */
-  marker->cur_marker = NULL;
-
-  /* Process the marker if interesting; else just make a generic trace msg */
-  switch (cinfo->unread_marker) {
-  case M_APP0:
-    examine_app0(cinfo, data, data_length, length);
-    break;
-  case M_APP14:
-    examine_app14(cinfo, data, data_length, length);
-    break;
-  default:
-    TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker,
-	     (int) (data_length + length));
-    break;
-  }
-
-  /* skip any remaining data -- could be lots */
-  INPUT_SYNC(cinfo);		/* do before skip_input_data */
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-#endif /* SAVE_MARKERS_SUPPORTED */
-
-
-METHODDEF(boolean)
-skip_variable (j_decompress_ptr cinfo)
-/* Skip over an unknown or uninteresting variable-length marker */
-{
-  INT32 length;
-  INPUT_VARS(cinfo);
-
-  INPUT_2BYTES(cinfo, length, return FALSE);
-  length -= 2;
-  
-  TRACEMS2(cinfo, 1, JTRC_MISC_MARKER, cinfo->unread_marker, (int) length);
-
-  INPUT_SYNC(cinfo);		/* do before skip_input_data */
-  if (length > 0)
-    (*cinfo->src->skip_input_data) (cinfo, (long) length);
-
-  return TRUE;
-}
-
-
-/*
- * Find the next JPEG marker, save it in cinfo->unread_marker.
- * Returns FALSE if had to suspend before reaching a marker;
- * in that case cinfo->unread_marker is unchanged.
- *
- * Note that the result might not be a valid marker code,
- * but it will never be 0 or FF.
- */
-
-LOCAL(boolean)
-next_marker (j_decompress_ptr cinfo)
-{
-  int c;
-  INPUT_VARS(cinfo);
-
-  for (;;) {
-    INPUT_BYTE(cinfo, c, return FALSE);
-    /* Skip any non-FF bytes.
-     * This may look a bit inefficient, but it will not occur in a valid file.
-     * We sync after each discarded byte so that a suspending data source
-     * can discard the byte from its buffer.
-     */
-    while (c != 0xFF) {
-      cinfo->marker->discarded_bytes++;
-      INPUT_SYNC(cinfo);
-      INPUT_BYTE(cinfo, c, return FALSE);
-    }
-    /* This loop swallows any duplicate FF bytes.  Extra FFs are legal as
-     * pad bytes, so don't count them in discarded_bytes.  We assume there
-     * will not be so many consecutive FF bytes as to overflow a suspending
-     * data source's input buffer.
-     */
-    do {
-      INPUT_BYTE(cinfo, c, return FALSE);
-    } while (c == 0xFF);
-    if (c != 0)
-      break;			/* found a valid marker, exit loop */
-    /* Reach here if we found a stuffed-zero data sequence (FF/00).
-     * Discard it and loop back to try again.
-     */
-    cinfo->marker->discarded_bytes += 2;
-    INPUT_SYNC(cinfo);
-  }
-
-  if (cinfo->marker->discarded_bytes != 0) {
-    WARNMS2(cinfo, JWRN_EXTRANEOUS_DATA, cinfo->marker->discarded_bytes, c);
-    cinfo->marker->discarded_bytes = 0;
-  }
-
-  cinfo->unread_marker = c;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-LOCAL(boolean)
-first_marker (j_decompress_ptr cinfo)
-/* Like next_marker, but used to obtain the initial SOI marker. */
-/* For this marker, we do not allow preceding garbage or fill; otherwise,
- * we might well scan an entire input file before realizing it ain't JPEG.
- * If an application wants to process non-JFIF files, it must seek to the
- * SOI before calling the JPEG library.
- */
-{
-  int c, c2;
-  INPUT_VARS(cinfo);
-
-  INPUT_BYTE(cinfo, c, return FALSE);
-  INPUT_BYTE(cinfo, c2, return FALSE);
-  if (c != 0xFF || c2 != (int) M_SOI)
-    ERREXIT2(cinfo, JERR_NO_SOI, c, c2);
-
-  cinfo->unread_marker = c2;
-
-  INPUT_SYNC(cinfo);
-  return TRUE;
-}
-
-
-/*
- * Read markers until SOS or EOI.
- *
- * Returns same codes as are defined for jpeg_consume_input:
- * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
- *
- * Note: This function may return a pseudo SOS marker (with zero
- * component number) for treat by input controller's consume_input.
- * consume_input itself should filter out (skip) the pseudo marker
- * after processing for the caller.
- */
-
-METHODDEF(int)
-read_markers (j_decompress_ptr cinfo)
-{
-  /* Outer loop repeats once for each marker. */
-  for (;;) {
-    /* Collect the marker proper, unless we already did. */
-    /* NB: first_marker() enforces the requirement that SOI appear first. */
-    if (cinfo->unread_marker == 0) {
-      if (! cinfo->marker->saw_SOI) {
-	if (! first_marker(cinfo))
-	  return JPEG_SUSPENDED;
-      } else {
-	if (! next_marker(cinfo))
-	  return JPEG_SUSPENDED;
-      }
-    }
-    /* At this point cinfo->unread_marker contains the marker code and the
-     * input point is just past the marker proper, but before any parameters.
-     * A suspension will cause us to return with this state still true.
-     */
-    switch (cinfo->unread_marker) {
-    case M_SOI:
-      if (! get_soi(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF0:		/* Baseline */
-      if (! get_sof(cinfo, TRUE, FALSE, FALSE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF1:		/* Extended sequential, Huffman */
-      if (! get_sof(cinfo, FALSE, FALSE, FALSE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF2:		/* Progressive, Huffman */
-      if (! get_sof(cinfo, FALSE, TRUE, FALSE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF9:		/* Extended sequential, arithmetic */
-      if (! get_sof(cinfo, FALSE, FALSE, TRUE))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_SOF10:		/* Progressive, arithmetic */
-      if (! get_sof(cinfo, FALSE, TRUE, TRUE))
-	return JPEG_SUSPENDED;
-      break;
-
-    /* Currently unsupported SOFn types */
-    case M_SOF3:		/* Lossless, Huffman */
-    case M_SOF5:		/* Differential sequential, Huffman */
-    case M_SOF6:		/* Differential progressive, Huffman */
-    case M_SOF7:		/* Differential lossless, Huffman */
-    case M_JPG:			/* Reserved for JPEG extensions */
-    case M_SOF11:		/* Lossless, arithmetic */
-    case M_SOF13:		/* Differential sequential, arithmetic */
-    case M_SOF14:		/* Differential progressive, arithmetic */
-    case M_SOF15:		/* Differential lossless, arithmetic */
-      ERREXIT1(cinfo, JERR_SOF_UNSUPPORTED, cinfo->unread_marker);
-      break;
-
-    case M_SOS:
-      if (! get_sos(cinfo))
-	return JPEG_SUSPENDED;
-      cinfo->unread_marker = 0;	/* processed the marker */
-      return JPEG_REACHED_SOS;
-
-    case M_EOI:
-      TRACEMS(cinfo, 1, JTRC_EOI);
-      cinfo->unread_marker = 0;	/* processed the marker */
-      return JPEG_REACHED_EOI;
-
-    case M_DAC:
-      if (! get_dac(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DHT:
-      if (! get_dht(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DQT:
-      if (! get_dqt(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_DRI:
-      if (! get_dri(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_JPG8:
-      if (! get_lse(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_APP0:
-    case M_APP1:
-    case M_APP2:
-    case M_APP3:
-    case M_APP4:
-    case M_APP5:
-    case M_APP6:
-    case M_APP7:
-    case M_APP8:
-    case M_APP9:
-    case M_APP10:
-    case M_APP11:
-    case M_APP12:
-    case M_APP13:
-    case M_APP14:
-    case M_APP15:
-      if (! (*((my_marker_ptr) cinfo->marker)->process_APPn[
-		cinfo->unread_marker - (int) M_APP0]) (cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_COM:
-      if (! (*((my_marker_ptr) cinfo->marker)->process_COM) (cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    case M_RST0:		/* these are all parameterless */
-    case M_RST1:
-    case M_RST2:
-    case M_RST3:
-    case M_RST4:
-    case M_RST5:
-    case M_RST6:
-    case M_RST7:
-    case M_TEM:
-      TRACEMS1(cinfo, 1, JTRC_PARMLESS_MARKER, cinfo->unread_marker);
-      break;
-
-    case M_DNL:			/* Ignore DNL ... perhaps the wrong thing */
-      if (! skip_variable(cinfo))
-	return JPEG_SUSPENDED;
-      break;
-
-    default:			/* must be DHP, EXP, JPGn, or RESn */
-      /* For now, we treat the reserved markers as fatal errors since they are
-       * likely to be used to signal incompatible JPEG Part 3 extensions.
-       * Once the JPEG 3 version-number marker is well defined, this code
-       * ought to change!
-       */
-      ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, cinfo->unread_marker);
-      break;
-    }
-    /* Successfully processed marker, so reset state variable */
-    cinfo->unread_marker = 0;
-  } /* end loop */
-}
-
-
-/*
- * Read a restart marker, which is expected to appear next in the datastream;
- * if the marker is not there, take appropriate recovery action.
- * Returns FALSE if suspension is required.
- *
- * This is called by the entropy decoder after it has read an appropriate
- * number of MCUs.  cinfo->unread_marker may be nonzero if the entropy decoder
- * has already read a marker from the data source.  Under normal conditions
- * cinfo->unread_marker will be reset to 0 before returning; if not reset,
- * it holds a marker which the decoder will be unable to read past.
- */
-
-METHODDEF(boolean)
-read_restart_marker (j_decompress_ptr cinfo)
-{
-  /* Obtain a marker unless we already did. */
-  /* Note that next_marker will complain if it skips any data. */
-  if (cinfo->unread_marker == 0) {
-    if (! next_marker(cinfo))
-      return FALSE;
-  }
-
-  if (cinfo->unread_marker ==
-      ((int) M_RST0 + cinfo->marker->next_restart_num)) {
-    /* Normal case --- swallow the marker and let entropy decoder continue */
-    TRACEMS1(cinfo, 3, JTRC_RST, cinfo->marker->next_restart_num);
-    cinfo->unread_marker = 0;
-  } else {
-    /* Uh-oh, the restart markers have been messed up. */
-    /* Let the data source manager determine how to resync. */
-    if (! (*cinfo->src->resync_to_restart) (cinfo,
-					    cinfo->marker->next_restart_num))
-      return FALSE;
-  }
-
-  /* Update next-restart state */
-  cinfo->marker->next_restart_num = (cinfo->marker->next_restart_num + 1) & 7;
-
-  return TRUE;
-}
-
-
-/*
- * This is the default resync_to_restart method for data source managers
- * to use if they don't have any better approach.  Some data source managers
- * may be able to back up, or may have additional knowledge about the data
- * which permits a more intelligent recovery strategy; such managers would
- * presumably supply their own resync method.
- *
- * read_restart_marker calls resync_to_restart if it finds a marker other than
- * the restart marker it was expecting.  (This code is *not* used unless
- * a nonzero restart interval has been declared.)  cinfo->unread_marker is
- * the marker code actually found (might be anything, except 0 or FF).
- * The desired restart marker number (0..7) is passed as a parameter.
- * This routine is supposed to apply whatever error recovery strategy seems
- * appropriate in order to position the input stream to the next data segment.
- * Note that cinfo->unread_marker is treated as a marker appearing before
- * the current data-source input point; usually it should be reset to zero
- * before returning.
- * Returns FALSE if suspension is required.
- *
- * This implementation is substantially constrained by wanting to treat the
- * input as a data stream; this means we can't back up.  Therefore, we have
- * only the following actions to work with:
- *   1. Simply discard the marker and let the entropy decoder resume at next
- *      byte of file.
- *   2. Read forward until we find another marker, discarding intervening
- *      data.  (In theory we could look ahead within the current bufferload,
- *      without having to discard data if we don't find the desired marker.
- *      This idea is not implemented here, in part because it makes behavior
- *      dependent on buffer size and chance buffer-boundary positions.)
- *   3. Leave the marker unread (by failing to zero cinfo->unread_marker).
- *      This will cause the entropy decoder to process an empty data segment,
- *      inserting dummy zeroes, and then we will reprocess the marker.
- *
- * #2 is appropriate if we think the desired marker lies ahead, while #3 is
- * appropriate if the found marker is a future restart marker (indicating
- * that we have missed the desired restart marker, probably because it got
- * corrupted).
- * We apply #2 or #3 if the found marker is a restart marker no more than
- * two counts behind or ahead of the expected one.  We also apply #2 if the
- * found marker is not a legal JPEG marker code (it's certainly bogus data).
- * If the found marker is a restart marker more than 2 counts away, we do #1
- * (too much risk that the marker is erroneous; with luck we will be able to
- * resync at some future point).
- * For any valid non-restart JPEG marker, we apply #3.  This keeps us from
- * overrunning the end of a scan.  An implementation limited to single-scan
- * files might find it better to apply #2 for markers other than EOI, since
- * any other marker would have to be bogus data in that case.
- */
-
-GLOBAL(boolean)
-jpeg_resync_to_restart (j_decompress_ptr cinfo, int desired)
-{
-  int marker = cinfo->unread_marker;
-  int action = 1;
-  
-  /* Always put up a warning. */
-  WARNMS2(cinfo, JWRN_MUST_RESYNC, marker, desired);
-  
-  /* Outer loop handles repeated decision after scanning forward. */
-  for (;;) {
-    if (marker < (int) M_SOF0)
-      action = 2;		/* invalid marker */
-    else if (marker < (int) M_RST0 || marker > (int) M_RST7)
-      action = 3;		/* valid non-restart marker */
-    else {
-      if (marker == ((int) M_RST0 + ((desired+1) & 7)) ||
-	  marker == ((int) M_RST0 + ((desired+2) & 7)))
-	action = 3;		/* one of the next two expected restarts */
-      else if (marker == ((int) M_RST0 + ((desired-1) & 7)) ||
-	       marker == ((int) M_RST0 + ((desired-2) & 7)))
-	action = 2;		/* a prior restart, so advance */
-      else
-	action = 1;		/* desired restart or too far away */
-    }
-    TRACEMS2(cinfo, 4, JTRC_RECOVERY_ACTION, marker, action);
-    switch (action) {
-    case 1:
-      /* Discard marker and let entropy decoder resume processing. */
-      cinfo->unread_marker = 0;
-      return TRUE;
-    case 2:
-      /* Scan to the next marker, and repeat the decision loop. */
-      if (! next_marker(cinfo))
-	return FALSE;
-      marker = cinfo->unread_marker;
-      break;
-    case 3:
-      /* Return without advancing past this marker. */
-      /* Entropy decoder will be forced to process an empty segment. */
-      return TRUE;
-    }
-  } /* end loop */
-}
-
-
-/*
- * Reset marker processing state to begin a fresh datastream.
- */
-
-METHODDEF(void)
-reset_marker_reader (j_decompress_ptr cinfo)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-
-  cinfo->comp_info = NULL;		/* until allocated by get_sof */
-  cinfo->input_scan_number = 0;		/* no SOS seen yet */
-  cinfo->unread_marker = 0;		/* no pending marker */
-  marker->pub.saw_SOI = FALSE;		/* set internal state too */
-  marker->pub.saw_SOF = FALSE;
-  marker->pub.discarded_bytes = 0;
-  marker->cur_marker = NULL;
-}
-
-
-/*
- * Initialize the marker reader module.
- * This is called only once, when the decompression object is created.
- */
-
-GLOBAL(void)
-jinit_marker_reader (j_decompress_ptr cinfo)
-{
-  my_marker_ptr marker;
-  int i;
-
-  /* Create subobject in permanent pool */
-  marker = (my_marker_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
-				SIZEOF(my_marker_reader));
-  cinfo->marker = &marker->pub;
-  /* Initialize public method pointers */
-  marker->pub.reset_marker_reader = reset_marker_reader;
-  marker->pub.read_markers = read_markers;
-  marker->pub.read_restart_marker = read_restart_marker;
-  /* Initialize COM/APPn processing.
-   * By default, we examine and then discard APP0 and APP14,
-   * but simply discard COM and all other APPn.
-   */
-  marker->process_COM = skip_variable;
-  marker->length_limit_COM = 0;
-  for (i = 0; i < 16; i++) {
-    marker->process_APPn[i] = skip_variable;
-    marker->length_limit_APPn[i] = 0;
-  }
-  marker->process_APPn[0] = get_interesting_appn;
-  marker->process_APPn[14] = get_interesting_appn;
-  /* Reset marker processing state */
-  reset_marker_reader(cinfo);
-}
-
-
-/*
- * Control saving of COM and APPn markers into marker_list.
- */
-
-#ifdef SAVE_MARKERS_SUPPORTED
-
-GLOBAL(void)
-jpeg_save_markers (j_decompress_ptr cinfo, int marker_code,
-		   unsigned int length_limit)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-  long maxlength;
-  jpeg_marker_parser_method processor;
-
-  /* Length limit mustn't be larger than what we can allocate
-   * (should only be a concern in a 16-bit environment).
-   */
-  maxlength = cinfo->mem->max_alloc_chunk - SIZEOF(struct jpeg_marker_struct);
-  if (((long) length_limit) > maxlength)
-    length_limit = (unsigned int) maxlength;
-
-  /* Choose processor routine to use.
-   * APP0/APP14 have special requirements.
-   */
-  if (length_limit) {
-    processor = save_marker;
-    /* If saving APP0/APP14, save at least enough for our internal use. */
-    if (marker_code == (int) M_APP0 && length_limit < APP0_DATA_LEN)
-      length_limit = APP0_DATA_LEN;
-    else if (marker_code == (int) M_APP14 && length_limit < APP14_DATA_LEN)
-      length_limit = APP14_DATA_LEN;
-  } else {
-    processor = skip_variable;
-    /* If discarding APP0/APP14, use our regular on-the-fly processor. */
-    if (marker_code == (int) M_APP0 || marker_code == (int) M_APP14)
-      processor = get_interesting_appn;
-  }
-
-  if (marker_code == (int) M_COM) {
-    marker->process_COM = processor;
-    marker->length_limit_COM = length_limit;
-  } else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15) {
-    marker->process_APPn[marker_code - (int) M_APP0] = processor;
-    marker->length_limit_APPn[marker_code - (int) M_APP0] = length_limit;
-  } else
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
-}
-
-#endif /* SAVE_MARKERS_SUPPORTED */
-
-
-/*
- * Install a special processing method for COM or APPn markers.
- */
-
-GLOBAL(void)
-jpeg_set_marker_processor (j_decompress_ptr cinfo, int marker_code,
-			   jpeg_marker_parser_method routine)
-{
-  my_marker_ptr marker = (my_marker_ptr) cinfo->marker;
-
-  if (marker_code == (int) M_COM)
-    marker->process_COM = routine;
-  else if (marker_code >= (int) M_APP0 && marker_code <= (int) M_APP15)
-    marker->process_APPn[marker_code - (int) M_APP0] = routine;
-  else
-    ERREXIT1(cinfo, JERR_UNKNOWN_MARKER, marker_code);
-}
--- a/DoConfig/fltk/jpeg/jdmaster.c
+++ /dev/null
@@ -1,543 +1,0 @@
-/*
- * jdmaster.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains master control logic for the JPEG decompressor.
- * These routines are concerned with selecting the modules to be executed
- * and with determining the number of passes and the work to be done in each
- * pass.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private state */
-
-typedef struct {
-  struct jpeg_decomp_master pub; /* public fields */
-
-  int pass_number;		/* # of passes completed */
-
-  boolean using_merged_upsample; /* TRUE if using merged upsample/cconvert */
-
-  /* Saved references to initialized quantizer modules,
-   * in case we need to switch modes.
-   */
-  struct jpeg_color_quantizer * quantizer_1pass;
-  struct jpeg_color_quantizer * quantizer_2pass;
-} my_decomp_master;
-
-typedef my_decomp_master * my_master_ptr;
-
-
-/*
- * Determine whether merged upsample/color conversion should be used.
- * CRUCIAL: this must match the actual capabilities of jdmerge.c!
- */
-
-LOCAL(boolean)
-use_merged_upsample (j_decompress_ptr cinfo)
-{
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-  /* Merging is the equivalent of plain box-filter upsampling */
-  if (cinfo->do_fancy_upsampling || cinfo->CCIR601_sampling)
-    return FALSE;
-  /* jdmerge.c only supports YCC=>RGB color conversion */
-  if (cinfo->jpeg_color_space != JCS_YCbCr || cinfo->num_components != 3 ||
-      cinfo->out_color_space != JCS_RGB ||
-      cinfo->out_color_components != RGB_PIXELSIZE ||
-      cinfo->color_transform)
-    return FALSE;
-  /* and it only handles 2h1v or 2h2v sampling ratios */
-  if (cinfo->comp_info[0].h_samp_factor != 2 ||
-      cinfo->comp_info[1].h_samp_factor != 1 ||
-      cinfo->comp_info[2].h_samp_factor != 1 ||
-      cinfo->comp_info[0].v_samp_factor >  2 ||
-      cinfo->comp_info[1].v_samp_factor != 1 ||
-      cinfo->comp_info[2].v_samp_factor != 1)
-    return FALSE;
-  /* furthermore, it doesn't work if we've scaled the IDCTs differently */
-  if (cinfo->comp_info[0].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size ||
-      cinfo->comp_info[1].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size ||
-      cinfo->comp_info[2].DCT_h_scaled_size != cinfo->min_DCT_h_scaled_size ||
-      cinfo->comp_info[0].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size ||
-      cinfo->comp_info[1].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size ||
-      cinfo->comp_info[2].DCT_v_scaled_size != cinfo->min_DCT_v_scaled_size)
-    return FALSE;
-  /* ??? also need to test for upsample-time rescaling, when & if supported */
-  return TRUE;			/* by golly, it'll work... */
-#else
-  return FALSE;
-#endif
-}
-
-
-/*
- * Compute output image dimensions and related values.
- * NOTE: this is exported for possible use by application.
- * Hence it mustn't do anything that can't be done twice.
- * Also note that it may be called before the master module is initialized!
- */
-
-GLOBAL(void)
-jpeg_calc_output_dimensions (j_decompress_ptr cinfo)
-/* Do computations that are needed before master selection phase.
- * This function is used for full decompression.
- */
-{
-#ifdef IDCT_SCALING_SUPPORTED
-  int ci;
-  jpeg_component_info *compptr;
-#endif
-
-  /* Prevent application from calling me at wrong times */
-  if (cinfo->global_state != DSTATE_READY)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  /* Compute core output image dimensions and DCT scaling choices. */
-  jpeg_core_output_dimensions(cinfo);
-
-#ifdef IDCT_SCALING_SUPPORTED
-
-  /* In selecting the actual DCT scaling for each component, we try to
-   * scale up the chroma components via IDCT scaling rather than upsampling.
-   * This saves time if the upsampler gets to use 1:1 scaling.
-   * Note this code adapts subsampling ratios which are powers of 2.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    int ssize = 1;
-    while (cinfo->min_DCT_h_scaled_size * ssize <=
-	   (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) &&
-	   (cinfo->max_h_samp_factor % (compptr->h_samp_factor * ssize * 2)) == 0) {
-      ssize = ssize * 2;
-    }
-    compptr->DCT_h_scaled_size = cinfo->min_DCT_h_scaled_size * ssize;
-    ssize = 1;
-    while (cinfo->min_DCT_v_scaled_size * ssize <=
-	   (cinfo->do_fancy_upsampling ? DCTSIZE : DCTSIZE / 2) &&
-	   (cinfo->max_v_samp_factor % (compptr->v_samp_factor * ssize * 2)) == 0) {
-      ssize = ssize * 2;
-    }
-    compptr->DCT_v_scaled_size = cinfo->min_DCT_v_scaled_size * ssize;
-
-    /* We don't support IDCT ratios larger than 2. */
-    if (compptr->DCT_h_scaled_size > compptr->DCT_v_scaled_size * 2)
-	compptr->DCT_h_scaled_size = compptr->DCT_v_scaled_size * 2;
-    else if (compptr->DCT_v_scaled_size > compptr->DCT_h_scaled_size * 2)
-	compptr->DCT_v_scaled_size = compptr->DCT_h_scaled_size * 2;
-  }
-
-  /* Recompute downsampled dimensions of components;
-   * application needs to know these if using raw downsampled data.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Size in samples, after IDCT scaling */
-    compptr->downsampled_width = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_width *
-		    (long) (compptr->h_samp_factor * compptr->DCT_h_scaled_size),
-		    (long) (cinfo->max_h_samp_factor * cinfo->block_size));
-    compptr->downsampled_height = (JDIMENSION)
-      jdiv_round_up((long) cinfo->image_height *
-		    (long) (compptr->v_samp_factor * compptr->DCT_v_scaled_size),
-		    (long) (cinfo->max_v_samp_factor * cinfo->block_size));
-  }
-
-#endif /* IDCT_SCALING_SUPPORTED */
-
-  /* Report number of components in selected colorspace. */
-  /* Probably this should be in the color conversion module... */
-  switch (cinfo->out_color_space) {
-  case JCS_GRAYSCALE:
-    cinfo->out_color_components = 1;
-    break;
-  case JCS_RGB:
-  case JCS_BG_RGB:
-    cinfo->out_color_components = RGB_PIXELSIZE;
-    break;
-  case JCS_YCbCr:
-  case JCS_BG_YCC:
-    cinfo->out_color_components = 3;
-    break;
-  case JCS_CMYK:
-  case JCS_YCCK:
-    cinfo->out_color_components = 4;
-    break;
-  default:			/* else must be same colorspace as in file */
-    cinfo->out_color_components = cinfo->num_components;
-    break;
-  }
-  cinfo->output_components = (cinfo->quantize_colors ? 1 :
-			      cinfo->out_color_components);
-
-  /* See if upsampler will want to emit more than one row at a time */
-  if (use_merged_upsample(cinfo))
-    cinfo->rec_outbuf_height = cinfo->max_v_samp_factor;
-  else
-    cinfo->rec_outbuf_height = 1;
-}
-
-
-/*
- * Several decompression processes need to range-limit values to the range
- * 0..MAXJSAMPLE; the input value may fall somewhat outside this range
- * due to noise introduced by quantization, roundoff error, etc.  These
- * processes are inner loops and need to be as fast as possible.  On most
- * machines, particularly CPUs with pipelines or instruction prefetch,
- * a (subscript-check-less) C table lookup
- *		x = sample_range_limit[x];
- * is faster than explicit tests
- *		if (x < 0)  x = 0;
- *		else if (x > MAXJSAMPLE)  x = MAXJSAMPLE;
- * These processes all use a common table prepared by the routine below.
- *
- * For most steps we can mathematically guarantee that the initial value
- * of x is within MAXJSAMPLE+1 of the legal range, so a table running from
- * -(MAXJSAMPLE+1) to 2*MAXJSAMPLE+1 is sufficient.  But for the initial
- * limiting step (just after the IDCT), a wildly out-of-range value is 
- * possible if the input data is corrupt.  To avoid any chance of indexing
- * off the end of memory and getting a bad-pointer trap, we perform the
- * post-IDCT limiting thus:
- *		x = range_limit[x & MASK];
- * where MASK is 2 bits wider than legal sample data, ie 10 bits for 8-bit
- * samples.  Under normal circumstances this is more than enough range and
- * a correct output will be generated; with bogus input data the mask will
- * cause wraparound, and we will safely generate a bogus-but-in-range output.
- * For the post-IDCT step, we want to convert the data from signed to unsigned
- * representation by adding CENTERJSAMPLE at the same time that we limit it.
- * So the post-IDCT limiting table ends up looking like this:
- *   CENTERJSAMPLE,CENTERJSAMPLE+1,...,MAXJSAMPLE,
- *   MAXJSAMPLE (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
- *   0          (repeat 2*(MAXJSAMPLE+1)-CENTERJSAMPLE times),
- *   0,1,...,CENTERJSAMPLE-1
- * Negative inputs select values from the upper half of the table after
- * masking.
- *
- * We can save some space by overlapping the start of the post-IDCT table
- * with the simpler range limiting table.  The post-IDCT table begins at
- * sample_range_limit + CENTERJSAMPLE.
- *
- * Note that the table is allocated in near data space on PCs; it's small
- * enough and used often enough to justify this.
- */
-
-LOCAL(void)
-prepare_range_limit_table (j_decompress_ptr cinfo)
-/* Allocate and fill in the sample_range_limit table */
-{
-  JSAMPLE * table;
-  int i;
-
-  table = (JSAMPLE *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-		(5 * (MAXJSAMPLE+1) + CENTERJSAMPLE) * SIZEOF(JSAMPLE));
-  table += (MAXJSAMPLE+1);	/* allow negative subscripts of simple table */
-  cinfo->sample_range_limit = table;
-  /* First segment of "simple" table: limit[x] = 0 for x < 0 */
-  MEMZERO(table - (MAXJSAMPLE+1), (MAXJSAMPLE+1) * SIZEOF(JSAMPLE));
-  /* Main part of "simple" table: limit[x] = x */
-  for (i = 0; i <= MAXJSAMPLE; i++)
-    table[i] = (JSAMPLE) i;
-  table += CENTERJSAMPLE;	/* Point to where post-IDCT table starts */
-  /* End of simple table, rest of first half of post-IDCT table */
-  for (i = CENTERJSAMPLE; i < 2*(MAXJSAMPLE+1); i++)
-    table[i] = MAXJSAMPLE;
-  /* Second half of post-IDCT table */
-  MEMZERO(table + (2 * (MAXJSAMPLE+1)),
-	  (2 * (MAXJSAMPLE+1) - CENTERJSAMPLE) * SIZEOF(JSAMPLE));
-  MEMCOPY(table + (4 * (MAXJSAMPLE+1) - CENTERJSAMPLE),
-	  cinfo->sample_range_limit, CENTERJSAMPLE * SIZEOF(JSAMPLE));
-}
-
-
-/*
- * Master selection of decompression modules.
- * This is done once at jpeg_start_decompress time.  We determine
- * which modules will be used and give them appropriate initialization calls.
- * We also initialize the decompressor input side to begin consuming data.
- *
- * Since jpeg_read_header has finished, we know what is in the SOF
- * and (first) SOS markers.  We also have all the application parameter
- * settings.
- */
-
-LOCAL(void)
-master_selection (j_decompress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-  boolean use_c_buffer;
-  long samplesperrow;
-  JDIMENSION jd_samplesperrow;
-
-  /* For now, precision must match compiled-in value... */
-  if (cinfo->data_precision != BITS_IN_JSAMPLE)
-    ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
-
-  /* Initialize dimensions and other stuff */
-  jpeg_calc_output_dimensions(cinfo);
-  prepare_range_limit_table(cinfo);
-
-  /* Sanity check on image dimensions */
-  if (cinfo->output_height <= 0 || cinfo->output_width <= 0 ||
-      cinfo->out_color_components <= 0)
-    ERREXIT(cinfo, JERR_EMPTY_IMAGE);
-
-  /* Width of an output scanline must be representable as JDIMENSION. */
-  samplesperrow = (long) cinfo->output_width * (long) cinfo->out_color_components;
-  jd_samplesperrow = (JDIMENSION) samplesperrow;
-  if ((long) jd_samplesperrow != samplesperrow)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-
-  /* Initialize my private state */
-  master->pass_number = 0;
-  master->using_merged_upsample = use_merged_upsample(cinfo);
-
-  /* Color quantizer selection */
-  master->quantizer_1pass = NULL;
-  master->quantizer_2pass = NULL;
-  /* No mode changes if not using buffered-image mode. */
-  if (! cinfo->quantize_colors || ! cinfo->buffered_image) {
-    cinfo->enable_1pass_quant = FALSE;
-    cinfo->enable_external_quant = FALSE;
-    cinfo->enable_2pass_quant = FALSE;
-  }
-  if (cinfo->quantize_colors) {
-    if (cinfo->raw_data_out)
-      ERREXIT(cinfo, JERR_NOTIMPL);
-    /* 2-pass quantizer only works in 3-component color space. */
-    if (cinfo->out_color_components != 3) {
-      cinfo->enable_1pass_quant = TRUE;
-      cinfo->enable_external_quant = FALSE;
-      cinfo->enable_2pass_quant = FALSE;
-      cinfo->colormap = NULL;
-    } else if (cinfo->colormap != NULL) {
-      cinfo->enable_external_quant = TRUE;
-    } else if (cinfo->two_pass_quantize) {
-      cinfo->enable_2pass_quant = TRUE;
-    } else {
-      cinfo->enable_1pass_quant = TRUE;
-    }
-
-    if (cinfo->enable_1pass_quant) {
-#ifdef QUANT_1PASS_SUPPORTED
-      jinit_1pass_quantizer(cinfo);
-      master->quantizer_1pass = cinfo->cquantize;
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    }
-
-    /* We use the 2-pass code to map to external colormaps. */
-    if (cinfo->enable_2pass_quant || cinfo->enable_external_quant) {
-#ifdef QUANT_2PASS_SUPPORTED
-      jinit_2pass_quantizer(cinfo);
-      master->quantizer_2pass = cinfo->cquantize;
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    }
-    /* If both quantizers are initialized, the 2-pass one is left active;
-     * this is necessary for starting with quantization to an external map.
-     */
-  }
-
-  /* Post-processing: in particular, color conversion first */
-  if (! cinfo->raw_data_out) {
-    if (master->using_merged_upsample) {
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-      jinit_merged_upsampler(cinfo); /* does color conversion too */
-#else
-      ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif
-    } else {
-      jinit_color_deconverter(cinfo);
-      jinit_upsampler(cinfo);
-    }
-    jinit_d_post_controller(cinfo, cinfo->enable_2pass_quant);
-  }
-  /* Inverse DCT */
-  jinit_inverse_dct(cinfo);
-  /* Entropy decoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code)
-    jinit_arith_decoder(cinfo);
-  else {
-    jinit_huff_decoder(cinfo);
-  }
-
-  /* Initialize principal buffer controllers. */
-  use_c_buffer = cinfo->inputctl->has_multiple_scans || cinfo->buffered_image;
-  jinit_d_coef_controller(cinfo, use_c_buffer);
-
-  if (! cinfo->raw_data_out)
-    jinit_d_main_controller(cinfo, FALSE /* never need full buffer here */);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Initialize input side of decompressor to consume first scan. */
-  (*cinfo->inputctl->start_input_pass) (cinfo);
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-  /* If jpeg_start_decompress will read the whole file, initialize
-   * progress monitoring appropriately.  The input step is counted
-   * as one pass.
-   */
-  if (cinfo->progress != NULL && ! cinfo->buffered_image &&
-      cinfo->inputctl->has_multiple_scans) {
-    int nscans;
-    /* Estimate number of scans to set pass_limit. */
-    if (cinfo->progressive_mode) {
-      /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
-      nscans = 2 + 3 * cinfo->num_components;
-    } else {
-      /* For a nonprogressive multiscan file, estimate 1 scan per component. */
-      nscans = cinfo->num_components;
-    }
-    cinfo->progress->pass_counter = 0L;
-    cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
-    cinfo->progress->completed_passes = 0;
-    cinfo->progress->total_passes = (cinfo->enable_2pass_quant ? 3 : 2);
-    /* Count the input pass as done */
-    master->pass_number++;
-  }
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-}
-
-
-/*
- * Per-pass setup.
- * This is called at the beginning of each output pass.  We determine which
- * modules will be active during this pass and give them appropriate
- * start_pass calls.  We also set is_dummy_pass to indicate whether this
- * is a "real" output pass or a dummy pass for color quantization.
- * (In the latter case, jdapistd.c will crank the pass to completion.)
- */
-
-METHODDEF(void)
-prepare_for_output_pass (j_decompress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  if (master->pub.is_dummy_pass) {
-#ifdef QUANT_2PASS_SUPPORTED
-    /* Final pass of 2-pass quantization */
-    master->pub.is_dummy_pass = FALSE;
-    (*cinfo->cquantize->start_pass) (cinfo, FALSE);
-    (*cinfo->post->start_pass) (cinfo, JBUF_CRANK_DEST);
-    (*cinfo->main->start_pass) (cinfo, JBUF_CRANK_DEST);
-#else
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-#endif /* QUANT_2PASS_SUPPORTED */
-  } else {
-    if (cinfo->quantize_colors && cinfo->colormap == NULL) {
-      /* Select new quantization method */
-      if (cinfo->two_pass_quantize && cinfo->enable_2pass_quant) {
-	cinfo->cquantize = master->quantizer_2pass;
-	master->pub.is_dummy_pass = TRUE;
-      } else if (cinfo->enable_1pass_quant) {
-	cinfo->cquantize = master->quantizer_1pass;
-      } else {
-	ERREXIT(cinfo, JERR_MODE_CHANGE);
-      }
-    }
-    (*cinfo->idct->start_pass) (cinfo);
-    (*cinfo->coef->start_output_pass) (cinfo);
-    if (! cinfo->raw_data_out) {
-      if (! master->using_merged_upsample)
-	(*cinfo->cconvert->start_pass) (cinfo);
-      (*cinfo->upsample->start_pass) (cinfo);
-      if (cinfo->quantize_colors)
-	(*cinfo->cquantize->start_pass) (cinfo, master->pub.is_dummy_pass);
-      (*cinfo->post->start_pass) (cinfo,
-	    (master->pub.is_dummy_pass ? JBUF_SAVE_AND_PASS : JBUF_PASS_THRU));
-      (*cinfo->main->start_pass) (cinfo, JBUF_PASS_THRU);
-    }
-  }
-
-  /* Set up progress monitor's pass info if present */
-  if (cinfo->progress != NULL) {
-    cinfo->progress->completed_passes = master->pass_number;
-    cinfo->progress->total_passes = master->pass_number +
-				    (master->pub.is_dummy_pass ? 2 : 1);
-    /* In buffered-image mode, we assume one more output pass if EOI not
-     * yet reached, but no more passes if EOI has been reached.
-     */
-    if (cinfo->buffered_image && ! cinfo->inputctl->eoi_reached) {
-      cinfo->progress->total_passes += (cinfo->enable_2pass_quant ? 2 : 1);
-    }
-  }
-}
-
-
-/*
- * Finish up at end of an output pass.
- */
-
-METHODDEF(void)
-finish_output_pass (j_decompress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  if (cinfo->quantize_colors)
-    (*cinfo->cquantize->finish_pass) (cinfo);
-  master->pass_number++;
-}
-
-
-#ifdef D_MULTISCAN_FILES_SUPPORTED
-
-/*
- * Switch to a new external colormap between output passes.
- */
-
-GLOBAL(void)
-jpeg_new_colormap (j_decompress_ptr cinfo)
-{
-  my_master_ptr master = (my_master_ptr) cinfo->master;
-
-  /* Prevent application from calling me at wrong times */
-  if (cinfo->global_state != DSTATE_BUFIMAGE)
-    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-
-  if (cinfo->quantize_colors && cinfo->enable_external_quant &&
-      cinfo->colormap != NULL) {
-    /* Select 2-pass quantizer for external colormap use */
-    cinfo->cquantize = master->quantizer_2pass;
-    /* Notify quantizer of colormap change */
-    (*cinfo->cquantize->new_color_map) (cinfo);
-    master->pub.is_dummy_pass = FALSE; /* just in case */
-  } else
-    ERREXIT(cinfo, JERR_MODE_CHANGE);
-}
-
-#endif /* D_MULTISCAN_FILES_SUPPORTED */
-
-
-/*
- * Initialize master decompression control and select active modules.
- * This is performed at the start of jpeg_start_decompress.
- */
-
-GLOBAL(void)
-jinit_master_decompress (j_decompress_ptr cinfo)
-{
-  my_master_ptr master;
-
-  master = (my_master_ptr)
-      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				  SIZEOF(my_decomp_master));
-  cinfo->master = &master->pub;
-  master->pub.prepare_for_output_pass = prepare_for_output_pass;
-  master->pub.finish_output_pass = finish_output_pass;
-
-  master->pub.is_dummy_pass = FALSE;
-
-  master_selection(cinfo);
-}
--- a/DoConfig/fltk/jpeg/jdmerge.c
+++ /dev/null
@@ -1,401 +1,0 @@
-/*
- * jdmerge.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains code for merged upsampling/color conversion.
- *
- * This file combines functions from jdsample.c and jdcolor.c;
- * read those files first to understand what's going on.
- *
- * When the chroma components are to be upsampled by simple replication
- * (ie, box filtering), we can save some work in color conversion by
- * calculating all the output pixels corresponding to a pair of chroma
- * samples at one time.  In the conversion equations
- *	R = Y           + K1 * Cr
- *	G = Y + K2 * Cb + K3 * Cr
- *	B = Y + K4 * Cb
- * only the Y term varies among the group of pixels corresponding to a pair
- * of chroma samples, so the rest of the terms can be calculated just once.
- * At typical sampling ratios, this eliminates half or three-quarters of the
- * multiplications needed for color conversion.
- *
- * This file currently provides implementations for the following cases:
- *	YCbCr => RGB color conversion only.
- *	Sampling ratios of 2h1v or 2h2v.
- *	No scaling needed at upsample time.
- *	Corner-aligned (non-CCIR601) sampling alignment.
- * Other special cases could be added, but in most applications these are
- * the only common cases.  (For uncommon cases we fall back on the more
- * general code in jdsample.c and jdcolor.c.)
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef UPSAMPLE_MERGING_SUPPORTED
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_upsampler pub;	/* public fields */
-
-  /* Pointer to routine to do actual upsampling/conversion of one row group */
-  JMETHOD(void, upmethod, (j_decompress_ptr cinfo,
-			   JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-			   JSAMPARRAY output_buf));
-
-  /* Private state for YCC->RGB conversion */
-  int * Cr_r_tab;		/* => table for Cr to R conversion */
-  int * Cb_b_tab;		/* => table for Cb to B conversion */
-  INT32 * Cr_g_tab;		/* => table for Cr to G conversion */
-  INT32 * Cb_g_tab;		/* => table for Cb to G conversion */
-
-  /* For 2:1 vertical sampling, we produce two output rows at a time.
-   * We need a "spare" row buffer to hold the second output row if the
-   * application provides just a one-row buffer; we also use the spare
-   * to discard the dummy last row if the image height is odd.
-   */
-  JSAMPROW spare_row;
-  boolean spare_full;		/* T if spare buffer is occupied */
-
-  JDIMENSION out_row_width;	/* samples per output row */
-  JDIMENSION rows_to_go;	/* counts rows remaining in image */
-} my_upsampler;
-
-typedef my_upsampler * my_upsample_ptr;
-
-#define SCALEBITS	16	/* speediest right-shift on some machines */
-#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
-#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))
-
-
-/*
- * Initialize tables for YCC->RGB colorspace conversion.
- * This is taken directly from jdcolor.c; see that file for more info.
- */
-
-LOCAL(void)
-build_ycc_rgb_table (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  int i;
-  INT32 x;
-  SHIFT_TEMPS
-
-  upsample->Cr_r_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  upsample->Cb_b_tab = (int *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(int));
-  upsample->Cr_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-  upsample->Cb_g_tab = (INT32 *)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				(MAXJSAMPLE+1) * SIZEOF(INT32));
-
-  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
-    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
-    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
-    /* Cr=>R value is nearest int to 1.402 * x */
-    upsample->Cr_r_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.402) * x + ONE_HALF, SCALEBITS);
-    /* Cb=>B value is nearest int to 1.772 * x */
-    upsample->Cb_b_tab[i] = (int)
-		    RIGHT_SHIFT(FIX(1.772) * x + ONE_HALF, SCALEBITS);
-    /* Cr=>G value is scaled-up -0.714136286 * x */
-    upsample->Cr_g_tab[i] = (- FIX(0.714136286)) * x;
-    /* Cb=>G value is scaled-up -0.344136286 * x */
-    /* We also add in ONE_HALF so that need not do it in inner loop */
-    upsample->Cb_g_tab[i] = (- FIX(0.344136286)) * x + ONE_HALF;
-  }
-}
-
-
-/*
- * Initialize for an upsampling pass.
- */
-
-METHODDEF(void)
-start_pass_merged_upsample (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-
-  /* Mark the spare buffer empty */
-  upsample->spare_full = FALSE;
-  /* Initialize total-height counter for detecting bottom of image */
-  upsample->rows_to_go = cinfo->output_height;
-}
-
-
-/*
- * Control routine to do upsampling (and color conversion).
- *
- * The control routine just handles the row buffering considerations.
- */
-
-METHODDEF(void)
-merged_2v_upsample (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION in_row_groups_avail,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-/* 2:1 vertical sampling case: may need a spare row. */
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  JSAMPROW work_ptrs[2];
-  JDIMENSION num_rows;		/* number of rows returned to caller */
-
-  if (upsample->spare_full) {
-    /* If we have a spare row saved from a previous cycle, just return it. */
-    jcopy_sample_rows(& upsample->spare_row, 0, output_buf + *out_row_ctr, 0,
-		      1, upsample->out_row_width);
-    num_rows = 1;
-    upsample->spare_full = FALSE;
-  } else {
-    /* Figure number of rows to return to caller. */
-    num_rows = 2;
-    /* Not more than the distance to the end of the image. */
-    if (num_rows > upsample->rows_to_go)
-      num_rows = upsample->rows_to_go;
-    /* And not more than what the client can accept: */
-    out_rows_avail -= *out_row_ctr;
-    if (num_rows > out_rows_avail)
-      num_rows = out_rows_avail;
-    /* Create output pointer array for upsampler. */
-    work_ptrs[0] = output_buf[*out_row_ctr];
-    if (num_rows > 1) {
-      work_ptrs[1] = output_buf[*out_row_ctr + 1];
-    } else {
-      work_ptrs[1] = upsample->spare_row;
-      upsample->spare_full = TRUE;
-    }
-    /* Now do the upsampling. */
-    (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr, work_ptrs);
-  }
-
-  /* Adjust counts */
-  *out_row_ctr += num_rows;
-  upsample->rows_to_go -= num_rows;
-  /* When the buffer is emptied, declare this input row group consumed */
-  if (! upsample->spare_full)
-    (*in_row_group_ctr)++;
-}
-
-
-METHODDEF(void)
-merged_1v_upsample (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION in_row_groups_avail,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-/* 1:1 vertical sampling case: much easier, never need a spare row. */
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-
-  /* Just do the upsampling. */
-  (*upsample->upmethod) (cinfo, input_buf, *in_row_group_ctr,
-			 output_buf + *out_row_ctr);
-  /* Adjust counts */
-  (*out_row_ctr)++;
-  (*in_row_group_ctr)++;
-}
-
-
-/*
- * These are the routines invoked by the control routines to do
- * the actual upsampling/conversion.  One row group is processed per call.
- *
- * Note: since we may be writing directly into application-supplied buffers,
- * we have to be honest about the output width; we can't assume the buffer
- * has been rounded up to an even width.
- */
-
-
-/*
- * Upsample and color convert for the case of 2:1 horizontal and 1:1 vertical.
- */
-
-METHODDEF(void)
-h2v1_merged_upsample (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-		      JSAMPARRAY output_buf)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  register int y, cred, cgreen, cblue;
-  int cb, cr;
-  register JSAMPROW outptr;
-  JSAMPROW inptr0, inptr1, inptr2;
-  JDIMENSION col;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  int * Crrtab = upsample->Cr_r_tab;
-  int * Cbbtab = upsample->Cb_b_tab;
-  INT32 * Crgtab = upsample->Cr_g_tab;
-  INT32 * Cbgtab = upsample->Cb_g_tab;
-  SHIFT_TEMPS
-
-  inptr0 = input_buf[0][in_row_group_ctr];
-  inptr1 = input_buf[1][in_row_group_ctr];
-  inptr2 = input_buf[2][in_row_group_ctr];
-  outptr = output_buf[0];
-  /* Loop for each pair of output pixels */
-  for (col = cinfo->output_width >> 1; col > 0; col--) {
-    /* Do the chroma part of the calculation */
-    cb = GETJSAMPLE(*inptr1++);
-    cr = GETJSAMPLE(*inptr2++);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    /* Fetch 2 Y values and emit 2 pixels */
-    y  = GETJSAMPLE(*inptr0++);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-    outptr += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr0++);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-    outptr += RGB_PIXELSIZE;
-  }
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    cb = GETJSAMPLE(*inptr1);
-    cr = GETJSAMPLE(*inptr2);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    y  = GETJSAMPLE(*inptr0);
-    outptr[RGB_RED] =   range_limit[y + cred];
-    outptr[RGB_GREEN] = range_limit[y + cgreen];
-    outptr[RGB_BLUE] =  range_limit[y + cblue];
-  }
-}
-
-
-/*
- * Upsample and color convert for the case of 2:1 horizontal and 2:1 vertical.
- */
-
-METHODDEF(void)
-h2v2_merged_upsample (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION in_row_group_ctr,
-		      JSAMPARRAY output_buf)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  register int y, cred, cgreen, cblue;
-  int cb, cr;
-  register JSAMPROW outptr0, outptr1;
-  JSAMPROW inptr00, inptr01, inptr1, inptr2;
-  JDIMENSION col;
-  /* copy these pointers into registers if possible */
-  register JSAMPLE * range_limit = cinfo->sample_range_limit;
-  int * Crrtab = upsample->Cr_r_tab;
-  int * Cbbtab = upsample->Cb_b_tab;
-  INT32 * Crgtab = upsample->Cr_g_tab;
-  INT32 * Cbgtab = upsample->Cb_g_tab;
-  SHIFT_TEMPS
-
-  inptr00 = input_buf[0][in_row_group_ctr*2];
-  inptr01 = input_buf[0][in_row_group_ctr*2 + 1];
-  inptr1 = input_buf[1][in_row_group_ctr];
-  inptr2 = input_buf[2][in_row_group_ctr];
-  outptr0 = output_buf[0];
-  outptr1 = output_buf[1];
-  /* Loop for each group of output pixels */
-  for (col = cinfo->output_width >> 1; col > 0; col--) {
-    /* Do the chroma part of the calculation */
-    cb = GETJSAMPLE(*inptr1++);
-    cr = GETJSAMPLE(*inptr2++);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    /* Fetch 4 Y values and emit 4 pixels */
-    y  = GETJSAMPLE(*inptr00++);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    outptr0 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr00++);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    outptr0 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr01++);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-    outptr1 += RGB_PIXELSIZE;
-    y  = GETJSAMPLE(*inptr01++);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-    outptr1 += RGB_PIXELSIZE;
-  }
-  /* If image width is odd, do the last output column separately */
-  if (cinfo->output_width & 1) {
-    cb = GETJSAMPLE(*inptr1);
-    cr = GETJSAMPLE(*inptr2);
-    cred = Crrtab[cr];
-    cgreen = (int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr], SCALEBITS);
-    cblue = Cbbtab[cb];
-    y  = GETJSAMPLE(*inptr00);
-    outptr0[RGB_RED] =   range_limit[y + cred];
-    outptr0[RGB_GREEN] = range_limit[y + cgreen];
-    outptr0[RGB_BLUE] =  range_limit[y + cblue];
-    y  = GETJSAMPLE(*inptr01);
-    outptr1[RGB_RED] =   range_limit[y + cred];
-    outptr1[RGB_GREEN] = range_limit[y + cgreen];
-    outptr1[RGB_BLUE] =  range_limit[y + cblue];
-  }
-}
-
-
-/*
- * Module initialization routine for merged upsampling/color conversion.
- *
- * NB: this is called under the conditions determined by use_merged_upsample()
- * in jdmaster.c.  That routine MUST correspond to the actual capabilities
- * of this module; no safety checks are made here.
- */
-
-GLOBAL(void)
-jinit_merged_upsampler (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample;
-
-  upsample = (my_upsample_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_upsampler));
-  cinfo->upsample = (struct jpeg_upsampler *) upsample;
-  upsample->pub.start_pass = start_pass_merged_upsample;
-  upsample->pub.need_context_rows = FALSE;
-
-  upsample->out_row_width = cinfo->output_width * cinfo->out_color_components;
-
-  if (cinfo->max_v_samp_factor == 2) {
-    upsample->pub.upsample = merged_2v_upsample;
-    upsample->upmethod = h2v2_merged_upsample;
-    /* Allocate a spare row buffer */
-    upsample->spare_row = (JSAMPROW)
-      (*cinfo->mem->alloc_large) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-		(size_t) (upsample->out_row_width * SIZEOF(JSAMPLE)));
-  } else {
-    upsample->pub.upsample = merged_1v_upsample;
-    upsample->upmethod = h2v1_merged_upsample;
-    /* No spare row needed */
-    upsample->spare_row = NULL;
-  }
-
-  build_ycc_rgb_table(cinfo);
-}
-
-#endif /* UPSAMPLE_MERGING_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jdpostct.c
+++ /dev/null
@@ -1,290 +1,0 @@
-/*
- * jdpostct.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the decompression postprocessing controller.
- * This controller manages the upsampling, color conversion, and color
- * quantization/reduction steps; specifically, it controls the buffering
- * between upsample/color conversion and color quantization/reduction.
- *
- * If no color quantization/reduction is required, then this module has no
- * work to do, and it just hands off to the upsample/color conversion code.
- * An integrated upsample/convert/quantize process would replace this module
- * entirely.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Private buffer controller object */
-
-typedef struct {
-  struct jpeg_d_post_controller pub; /* public fields */
-
-  /* Color quantization source buffer: this holds output data from
-   * the upsample/color conversion step to be passed to the quantizer.
-   * For two-pass color quantization, we need a full-image buffer;
-   * for one-pass operation, a strip buffer is sufficient.
-   */
-  jvirt_sarray_ptr whole_image;	/* virtual array, or NULL if one-pass */
-  JSAMPARRAY buffer;		/* strip buffer, or current strip of virtual */
-  JDIMENSION strip_height;	/* buffer size in rows */
-  /* for two-pass mode only: */
-  JDIMENSION starting_row;	/* row # of first row in current strip */
-  JDIMENSION next_row;		/* index of next row to fill/empty in strip */
-} my_post_controller;
-
-typedef my_post_controller * my_post_ptr;
-
-
-/* Forward declarations */
-METHODDEF(void) post_process_1pass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-#ifdef QUANT_2PASS_SUPPORTED
-METHODDEF(void) post_process_prepass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-METHODDEF(void) post_process_2pass
-	JPP((j_decompress_ptr cinfo,
-	     JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	     JDIMENSION in_row_groups_avail,
-	     JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	     JDIMENSION out_rows_avail));
-#endif
-
-
-/*
- * Initialize for a processing pass.
- */
-
-METHODDEF(void)
-start_pass_dpost (j_decompress_ptr cinfo, J_BUF_MODE pass_mode)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-
-  switch (pass_mode) {
-  case JBUF_PASS_THRU:
-    if (cinfo->quantize_colors) {
-      /* Single-pass processing with color quantization. */
-      post->pub.post_process_data = post_process_1pass;
-      /* We could be doing buffered-image output before starting a 2-pass
-       * color quantization; in that case, jinit_d_post_controller did not
-       * allocate a strip buffer.  Use the virtual-array buffer as workspace.
-       */
-      if (post->buffer == NULL) {
-	post->buffer = (*cinfo->mem->access_virt_sarray)
-	  ((j_common_ptr) cinfo, post->whole_image,
-	   (JDIMENSION) 0, post->strip_height, TRUE);
-      }
-    } else {
-      /* For single-pass processing without color quantization,
-       * I have no work to do; just call the upsampler directly.
-       */
-      post->pub.post_process_data = cinfo->upsample->upsample;
-    }
-    break;
-#ifdef QUANT_2PASS_SUPPORTED
-  case JBUF_SAVE_AND_PASS:
-    /* First pass of 2-pass quantization */
-    if (post->whole_image == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    post->pub.post_process_data = post_process_prepass;
-    break;
-  case JBUF_CRANK_DEST:
-    /* Second pass of 2-pass quantization */
-    if (post->whole_image == NULL)
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    post->pub.post_process_data = post_process_2pass;
-    break;
-#endif /* QUANT_2PASS_SUPPORTED */
-  default:
-    ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-    break;
-  }
-  post->starting_row = post->next_row = 0;
-}
-
-
-/*
- * Process some data in the one-pass (strip buffer) case.
- * This is used for color precision reduction as well as one-pass quantization.
- */
-
-METHODDEF(void)
-post_process_1pass (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION in_row_groups_avail,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION num_rows, max_rows;
-
-  /* Fill the buffer, but not more than what we can dump out in one go. */
-  /* Note we rely on the upsampler to detect bottom of image. */
-  max_rows = out_rows_avail - *out_row_ctr;
-  if (max_rows > post->strip_height)
-    max_rows = post->strip_height;
-  num_rows = 0;
-  (*cinfo->upsample->upsample) (cinfo,
-		input_buf, in_row_group_ctr, in_row_groups_avail,
-		post->buffer, &num_rows, max_rows);
-  /* Quantize and emit data. */
-  (*cinfo->cquantize->color_quantize) (cinfo,
-		post->buffer, output_buf + *out_row_ctr, (int) num_rows);
-  *out_row_ctr += num_rows;
-}
-
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-/*
- * Process some data in the first pass of 2-pass quantization.
- */
-
-METHODDEF(void)
-post_process_prepass (j_decompress_ptr cinfo,
-		      JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		      JDIMENSION in_row_groups_avail,
-		      JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		      JDIMENSION out_rows_avail)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION old_next_row, num_rows;
-
-  /* Reposition virtual buffer if at start of strip. */
-  if (post->next_row == 0) {
-    post->buffer = (*cinfo->mem->access_virt_sarray)
-	((j_common_ptr) cinfo, post->whole_image,
-	 post->starting_row, post->strip_height, TRUE);
-  }
-
-  /* Upsample some data (up to a strip height's worth). */
-  old_next_row = post->next_row;
-  (*cinfo->upsample->upsample) (cinfo,
-		input_buf, in_row_group_ctr, in_row_groups_avail,
-		post->buffer, &post->next_row, post->strip_height);
-
-  /* Allow quantizer to scan new data.  No data is emitted, */
-  /* but we advance out_row_ctr so outer loop can tell when we're done. */
-  if (post->next_row > old_next_row) {
-    num_rows = post->next_row - old_next_row;
-    (*cinfo->cquantize->color_quantize) (cinfo, post->buffer + old_next_row,
-					 (JSAMPARRAY) NULL, (int) num_rows);
-    *out_row_ctr += num_rows;
-  }
-
-  /* Advance if we filled the strip. */
-  if (post->next_row >= post->strip_height) {
-    post->starting_row += post->strip_height;
-    post->next_row = 0;
-  }
-}
-
-
-/*
- * Process some data in the second pass of 2-pass quantization.
- */
-
-METHODDEF(void)
-post_process_2pass (j_decompress_ptr cinfo,
-		    JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-		    JDIMENSION in_row_groups_avail,
-		    JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-		    JDIMENSION out_rows_avail)
-{
-  my_post_ptr post = (my_post_ptr) cinfo->post;
-  JDIMENSION num_rows, max_rows;
-
-  /* Reposition virtual buffer if at start of strip. */
-  if (post->next_row == 0) {
-    post->buffer = (*cinfo->mem->access_virt_sarray)
-	((j_common_ptr) cinfo, post->whole_image,
-	 post->starting_row, post->strip_height, FALSE);
-  }
-
-  /* Determine number of rows to emit. */
-  num_rows = post->strip_height - post->next_row; /* available in strip */
-  max_rows = out_rows_avail - *out_row_ctr; /* available in output area */
-  if (num_rows > max_rows)
-    num_rows = max_rows;
-  /* We have to check bottom of image here, can't depend on upsampler. */
-  max_rows = cinfo->output_height - post->starting_row;
-  if (num_rows > max_rows)
-    num_rows = max_rows;
-
-  /* Quantize and emit data. */
-  (*cinfo->cquantize->color_quantize) (cinfo,
-		post->buffer + post->next_row, output_buf + *out_row_ctr,
-		(int) num_rows);
-  *out_row_ctr += num_rows;
-
-  /* Advance if we filled the strip. */
-  post->next_row += num_rows;
-  if (post->next_row >= post->strip_height) {
-    post->starting_row += post->strip_height;
-    post->next_row = 0;
-  }
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
-
-
-/*
- * Initialize postprocessing controller.
- */
-
-GLOBAL(void)
-jinit_d_post_controller (j_decompress_ptr cinfo, boolean need_full_buffer)
-{
-  my_post_ptr post;
-
-  post = (my_post_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_post_controller));
-  cinfo->post = (struct jpeg_d_post_controller *) post;
-  post->pub.start_pass = start_pass_dpost;
-  post->whole_image = NULL;	/* flag for no virtual arrays */
-  post->buffer = NULL;		/* flag for no strip buffer */
-
-  /* Create the quantization buffer, if needed */
-  if (cinfo->quantize_colors) {
-    /* The buffer strip height is max_v_samp_factor, which is typically
-     * an efficient number of rows for upsampling to return.
-     * (In the presence of output rescaling, we might want to be smarter?)
-     */
-    post->strip_height = (JDIMENSION) cinfo->max_v_samp_factor;
-    if (need_full_buffer) {
-      /* Two-pass color quantization: need full-image storage. */
-      /* We round up the number of rows to a multiple of the strip height. */
-#ifdef QUANT_2PASS_SUPPORTED
-      post->whole_image = (*cinfo->mem->request_virt_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
-	 cinfo->output_width * cinfo->out_color_components,
-	 (JDIMENSION) jround_up((long) cinfo->output_height,
-				(long) post->strip_height),
-	 post->strip_height);
-#else
-      ERREXIT(cinfo, JERR_BAD_BUFFER_MODE);
-#endif /* QUANT_2PASS_SUPPORTED */
-    } else {
-      /* One-pass color quantization: just make a strip buffer. */
-      post->buffer = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 cinfo->output_width * cinfo->out_color_components,
-	 post->strip_height);
-    }
-  }
-}
--- a/DoConfig/fltk/jpeg/jdsample.c
+++ /dev/null
@@ -1,361 +1,0 @@
-/*
- * jdsample.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modified 2002-2008 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains upsampling routines.
- *
- * Upsampling input data is counted in "row groups".  A row group
- * is defined to be (v_samp_factor * DCT_v_scaled_size / min_DCT_v_scaled_size)
- * sample rows of each component.  Upsampling will normally produce
- * max_v_samp_factor pixel rows from each row group (but this could vary
- * if the upsampler is applying a scale factor of its own).
- *
- * An excellent reference for image resampling is
- *   Digital Image Warping, George Wolberg, 1990.
- *   Pub. by IEEE Computer Society Press, Los Alamitos, CA. ISBN 0-8186-8944-7.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Pointer to routine to upsample a single component */
-typedef JMETHOD(void, upsample1_ptr,
-		(j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr));
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_upsampler pub;	/* public fields */
-
-  /* Color conversion buffer.  When using separate upsampling and color
-   * conversion steps, this buffer holds one upsampled row group until it
-   * has been color converted and output.
-   * Note: we do not allocate any storage for component(s) which are full-size,
-   * ie do not need rescaling.  The corresponding entry of color_buf[] is
-   * simply set to point to the input data array, thereby avoiding copying.
-   */
-  JSAMPARRAY color_buf[MAX_COMPONENTS];
-
-  /* Per-component upsampling method pointers */
-  upsample1_ptr methods[MAX_COMPONENTS];
-
-  int next_row_out;		/* counts rows emitted from color_buf */
-  JDIMENSION rows_to_go;	/* counts rows remaining in image */
-
-  /* Height of an input row group for each component. */
-  int rowgroup_height[MAX_COMPONENTS];
-
-  /* These arrays save pixel expansion factors so that int_expand need not
-   * recompute them each time.  They are unused for other upsampling methods.
-   */
-  UINT8 h_expand[MAX_COMPONENTS];
-  UINT8 v_expand[MAX_COMPONENTS];
-} my_upsampler;
-
-typedef my_upsampler * my_upsample_ptr;
-
-
-/*
- * Initialize for an upsampling pass.
- */
-
-METHODDEF(void)
-start_pass_upsample (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-
-  /* Mark the conversion buffer empty */
-  upsample->next_row_out = cinfo->max_v_samp_factor;
-  /* Initialize total-height counter for detecting bottom of image */
-  upsample->rows_to_go = cinfo->output_height;
-}
-
-
-/*
- * Control routine to do upsampling (and color conversion).
- *
- * In this version we upsample each component independently.
- * We upsample one row group into the conversion buffer, then apply
- * color conversion a row at a time.
- */
-
-METHODDEF(void)
-sep_upsample (j_decompress_ptr cinfo,
-	      JSAMPIMAGE input_buf, JDIMENSION *in_row_group_ctr,
-	      JDIMENSION in_row_groups_avail,
-	      JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-	      JDIMENSION out_rows_avail)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  int ci;
-  jpeg_component_info * compptr;
-  JDIMENSION num_rows;
-
-  /* Fill the conversion buffer, if it's empty */
-  if (upsample->next_row_out >= cinfo->max_v_samp_factor) {
-    for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-	 ci++, compptr++) {
-      /* Invoke per-component upsample method.  Notice we pass a POINTER
-       * to color_buf[ci], so that fullsize_upsample can change it.
-       */
-      (*upsample->methods[ci]) (cinfo, compptr,
-	input_buf[ci] + (*in_row_group_ctr * upsample->rowgroup_height[ci]),
-	upsample->color_buf + ci);
-    }
-    upsample->next_row_out = 0;
-  }
-
-  /* Color-convert and emit rows */
-
-  /* How many we have in the buffer: */
-  num_rows = (JDIMENSION) (cinfo->max_v_samp_factor - upsample->next_row_out);
-  /* Not more than the distance to the end of the image.  Need this test
-   * in case the image height is not a multiple of max_v_samp_factor:
-   */
-  if (num_rows > upsample->rows_to_go) 
-    num_rows = upsample->rows_to_go;
-  /* And not more than what the client can accept: */
-  out_rows_avail -= *out_row_ctr;
-  if (num_rows > out_rows_avail)
-    num_rows = out_rows_avail;
-
-  (*cinfo->cconvert->color_convert) (cinfo, upsample->color_buf,
-				     (JDIMENSION) upsample->next_row_out,
-				     output_buf + *out_row_ctr,
-				     (int) num_rows);
-
-  /* Adjust counts */
-  *out_row_ctr += num_rows;
-  upsample->rows_to_go -= num_rows;
-  upsample->next_row_out += num_rows;
-  /* When the buffer is emptied, declare this input row group consumed */
-  if (upsample->next_row_out >= cinfo->max_v_samp_factor)
-    (*in_row_group_ctr)++;
-}
-
-
-/*
- * These are the routines invoked by sep_upsample to upsample pixel values
- * of a single component.  One row group is processed per call.
- */
-
-
-/*
- * For full-size components, we just make color_buf[ci] point at the
- * input buffer, and thus avoid copying any data.  Note that this is
- * safe only because sep_upsample doesn't declare the input row group
- * "consumed" until we are done color converting and emitting it.
- */
-
-METHODDEF(void)
-fullsize_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		   JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  *output_data_ptr = input_data;
-}
-
-
-/*
- * This is a no-op version used for "uninteresting" components.
- * These components will not be referenced by color conversion.
- */
-
-METHODDEF(void)
-noop_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  *output_data_ptr = NULL;	/* safety check */
-}
-
-
-/*
- * This version handles any integral sampling ratios.
- * This is not used for typical JPEG files, so it need not be fast.
- * Nor, for that matter, is it particularly accurate: the algorithm is
- * simple replication of the input pixel onto the corresponding output
- * pixels.  The hi-falutin sampling literature refers to this as a
- * "box filter".  A box filter tends to introduce visible artifacts,
- * so if you are actually going to use 3:1 or 4:1 sampling ratios
- * you would be well advised to improve this code.
- */
-
-METHODDEF(void)
-int_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	      JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  register int h;
-  JSAMPROW outend;
-  int h_expand, v_expand;
-  int inrow, outrow;
-
-  h_expand = upsample->h_expand[compptr->component_index];
-  v_expand = upsample->v_expand[compptr->component_index];
-
-  inrow = outrow = 0;
-  while (outrow < cinfo->max_v_samp_factor) {
-    /* Generate one output row with proper horizontal expansion */
-    inptr = input_data[inrow];
-    outptr = output_data[outrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      for (h = h_expand; h > 0; h--) {
-	*outptr++ = invalue;
-      }
-    }
-    /* Generate any additional output rows by duplicating the first one */
-    if (v_expand > 1) {
-      jcopy_sample_rows(output_data, outrow, output_data, outrow+1,
-			v_expand-1, cinfo->output_width);
-    }
-    inrow++;
-    outrow += v_expand;
-  }
-}
-
-
-/*
- * Fast processing for the common case of 2:1 horizontal and 1:1 vertical.
- * It's still a box filter.
- */
-
-METHODDEF(void)
-h2v1_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  JSAMPROW outend;
-  int outrow;
-
-  for (outrow = 0; outrow < cinfo->max_v_samp_factor; outrow++) {
-    inptr = input_data[outrow];
-    outptr = output_data[outrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      *outptr++ = invalue;
-      *outptr++ = invalue;
-    }
-  }
-}
-
-
-/*
- * Fast processing for the common case of 2:1 horizontal and 2:1 vertical.
- * It's still a box filter.
- */
-
-METHODDEF(void)
-h2v2_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JSAMPARRAY input_data, JSAMPARRAY * output_data_ptr)
-{
-  JSAMPARRAY output_data = *output_data_ptr;
-  register JSAMPROW inptr, outptr;
-  register JSAMPLE invalue;
-  JSAMPROW outend;
-  int inrow, outrow;
-
-  inrow = outrow = 0;
-  while (outrow < cinfo->max_v_samp_factor) {
-    inptr = input_data[inrow];
-    outptr = output_data[outrow];
-    outend = outptr + cinfo->output_width;
-    while (outptr < outend) {
-      invalue = *inptr++;	/* don't need GETJSAMPLE() here */
-      *outptr++ = invalue;
-      *outptr++ = invalue;
-    }
-    jcopy_sample_rows(output_data, outrow, output_data, outrow+1,
-		      1, cinfo->output_width);
-    inrow++;
-    outrow += 2;
-  }
-}
-
-
-/*
- * Module initialization routine for upsampling.
- */
-
-GLOBAL(void)
-jinit_upsampler (j_decompress_ptr cinfo)
-{
-  my_upsample_ptr upsample;
-  int ci;
-  jpeg_component_info * compptr;
-  boolean need_buffer;
-  int h_in_group, v_in_group, h_out_group, v_out_group;
-
-  upsample = (my_upsample_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_upsampler));
-  cinfo->upsample = (struct jpeg_upsampler *) upsample;
-  upsample->pub.start_pass = start_pass_upsample;
-  upsample->pub.upsample = sep_upsample;
-  upsample->pub.need_context_rows = FALSE; /* until we find out differently */
-
-  if (cinfo->CCIR601_sampling)	/* this isn't supported */
-    ERREXIT(cinfo, JERR_CCIR601_NOTIMPL);
-
-  /* Verify we can handle the sampling factors, select per-component methods,
-   * and create storage as needed.
-   */
-  for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
-       ci++, compptr++) {
-    /* Compute size of an "input group" after IDCT scaling.  This many samples
-     * are to be converted to max_h_samp_factor * max_v_samp_factor pixels.
-     */
-    h_in_group = (compptr->h_samp_factor * compptr->DCT_h_scaled_size) /
-		 cinfo->min_DCT_h_scaled_size;
-    v_in_group = (compptr->v_samp_factor * compptr->DCT_v_scaled_size) /
-		 cinfo->min_DCT_v_scaled_size;
-    h_out_group = cinfo->max_h_samp_factor;
-    v_out_group = cinfo->max_v_samp_factor;
-    upsample->rowgroup_height[ci] = v_in_group; /* save for use later */
-    need_buffer = TRUE;
-    if (! compptr->component_needed) {
-      /* Don't bother to upsample an uninteresting component. */
-      upsample->methods[ci] = noop_upsample;
-      need_buffer = FALSE;
-    } else if (h_in_group == h_out_group && v_in_group == v_out_group) {
-      /* Fullsize components can be processed without any work. */
-      upsample->methods[ci] = fullsize_upsample;
-      need_buffer = FALSE;
-    } else if (h_in_group * 2 == h_out_group &&
-	       v_in_group == v_out_group) {
-      /* Special case for 2h1v upsampling */
-      upsample->methods[ci] = h2v1_upsample;
-    } else if (h_in_group * 2 == h_out_group &&
-	       v_in_group * 2 == v_out_group) {
-      /* Special case for 2h2v upsampling */
-      upsample->methods[ci] = h2v2_upsample;
-    } else if ((h_out_group % h_in_group) == 0 &&
-	       (v_out_group % v_in_group) == 0) {
-      /* Generic integral-factors upsampling method */
-      upsample->methods[ci] = int_upsample;
-      upsample->h_expand[ci] = (UINT8) (h_out_group / h_in_group);
-      upsample->v_expand[ci] = (UINT8) (v_out_group / v_in_group);
-    } else
-      ERREXIT(cinfo, JERR_FRACT_SAMPLE_NOTIMPL);
-    if (need_buffer) {
-      upsample->color_buf[ci] = (*cinfo->mem->alloc_sarray)
-	((j_common_ptr) cinfo, JPOOL_IMAGE,
-	 (JDIMENSION) jround_up((long) cinfo->output_width,
-				(long) cinfo->max_h_samp_factor),
-	 (JDIMENSION) cinfo->max_v_samp_factor);
-    }
-  }
-}
--- a/DoConfig/fltk/jpeg/jdtrans.c
+++ /dev/null
@@ -1,140 +1,0 @@
-/*
- * jdtrans.c
- *
- * Copyright (C) 1995-1997, Thomas G. Lane.
- * Modified 2000-2009 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains library routines for transcoding decompression,
- * that is, reading raw DCT coefficient arrays from an input JPEG file.
- * The routines in jdapimin.c will also be needed by a transcoder.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/* Forward declarations */
-LOCAL(void) transdecode_master_selection JPP((j_decompress_ptr cinfo));
-
-
-/*
- * Read the coefficient arrays from a JPEG file.
- * jpeg_read_header must be completed before calling this.
- *
- * The entire image is read into a set of virtual coefficient-block arrays,
- * one per component.  The return value is a pointer to the array of
- * virtual-array descriptors.  These can be manipulated directly via the
- * JPEG memory manager, or handed off to jpeg_write_coefficients().
- * To release the memory occupied by the virtual arrays, call
- * jpeg_finish_decompress() when done with the data.
- *
- * An alternative usage is to simply obtain access to the coefficient arrays
- * during a buffered-image-mode decompression operation.  This is allowed
- * after any jpeg_finish_output() call.  The arrays can be accessed until
- * jpeg_finish_decompress() is called.  (Note that any call to the library
- * may reposition the arrays, so don't rely on access_virt_barray() results
- * to stay valid across library calls.)
- *
- * Returns NULL if suspended.  This case need be checked only if
- * a suspending data source is used.
- */
-
-GLOBAL(jvirt_barray_ptr *)
-jpeg_read_coefficients (j_decompress_ptr cinfo)
-{
-  if (cinfo->global_state == DSTATE_READY) {
-    /* First call: initialize active modules */
-    transdecode_master_selection(cinfo);
-    cinfo->global_state = DSTATE_RDCOEFS;
-  }
-  if (cinfo->global_state == DSTATE_RDCOEFS) {
-    /* Absorb whole file into the coef buffer */
-    for (;;) {
-      int retcode;
-      /* Call progress monitor hook if present */
-      if (cinfo->progress != NULL)
-	(*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
-      /* Absorb some more input */
-      retcode = (*cinfo->inputctl->consume_input) (cinfo);
-      if (retcode == JPEG_SUSPENDED)
-	return NULL;
-      if (retcode == JPEG_REACHED_EOI)
-	break;
-      /* Advance progress counter if appropriate */
-      if (cinfo->progress != NULL &&
-	  (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
-	if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
-	  /* startup underestimated number of scans; ratchet up one scan */
-	  cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
-	}
-      }
-    }
-    /* Set state so that jpeg_finish_decompress does the right thing */
-    cinfo->global_state = DSTATE_STOPPING;
-  }
-  /* At this point we should be in state DSTATE_STOPPING if being used
-   * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access
-   * to the coefficients during a full buffered-image-mode decompression.
-   */
-  if ((cinfo->global_state == DSTATE_STOPPING ||
-       cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) {
-    return cinfo->coef->coef_arrays;
-  }
-  /* Oops, improper usage */
-  ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
-  return NULL;			/* keep compiler happy */
-}
-
-
-/*
- * Master selection of decompression modules for transcoding.
- * This substitutes for jdmaster.c's initialization of the full decompressor.
- */
-
-LOCAL(void)
-transdecode_master_selection (j_decompress_ptr cinfo)
-{
-  /* This is effectively a buffered-image operation. */
-  cinfo->buffered_image = TRUE;
-
-  /* Compute output image dimensions and related values. */
-  jpeg_core_output_dimensions(cinfo);
-
-  /* Entropy decoding: either Huffman or arithmetic coding. */
-  if (cinfo->arith_code)
-    jinit_arith_decoder(cinfo);
-  else {
-    jinit_huff_decoder(cinfo);
-  }
-
-  /* Always get a full-image coefficient buffer. */
-  jinit_d_coef_controller(cinfo, TRUE);
-
-  /* We can now tell the memory manager to allocate virtual arrays. */
-  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
-
-  /* Initialize input side of decompressor to consume first scan. */
-  (*cinfo->inputctl->start_input_pass) (cinfo);
-
-  /* Initialize progress monitoring. */
-  if (cinfo->progress != NULL) {
-    int nscans;
-    /* Estimate number of scans to set pass_limit. */
-    if (cinfo->progressive_mode) {
-      /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
-      nscans = 2 + 3 * cinfo->num_components;
-    } else if (cinfo->inputctl->has_multiple_scans) {
-      /* For a nonprogressive multiscan file, estimate 1 scan per component. */
-      nscans = cinfo->num_components;
-    } else {
-      nscans = 1;
-    }
-    cinfo->progress->pass_counter = 0L;
-    cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
-    cinfo->progress->completed_passes = 0;
-    cinfo->progress->total_passes = 1;
-  }
-}
--- a/DoConfig/fltk/jpeg/jerror.c
+++ /dev/null
@@ -1,253 +1,0 @@
-/*
- * jerror.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains simple error-reporting and trace-message routines.
- * These are suitable for Unix-like systems and others where writing to
- * stderr is the right thing to do.  Many applications will want to replace
- * some or all of these routines.
- *
- * If you define USE_WINDOWS_MESSAGEBOX in jconfig.h or in the makefile,
- * you get a Windows-specific hack to display error messages in a dialog box.
- * It ain't much, but it beats dropping error messages into the bit bucket,
- * which is what happens to output to stderr under most Windows C compilers.
- *
- * These routines are used by both the compression and decompression code.
- */
-
-/* this is not a core library module, so it doesn't define JPEG_INTERNALS */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jversion.h"
-#include "jerror.h"
-
-#ifdef USE_WINDOWS_MESSAGEBOX
-#include <windows.h>
-#endif
-
-#ifndef EXIT_FAILURE		/* define exit() codes if not provided */
-#define EXIT_FAILURE  1
-#endif
-
-
-/*
- * Create the message string table.
- * We do this from the master message list in jerror.h by re-reading
- * jerror.h with a suitable definition for macro JMESSAGE.
- * The message table is made an external symbol just in case any applications
- * want to refer to it directly.
- */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_std_message_table	jMsgTable
-#endif
-
-#define JMESSAGE(code,string)	string ,
-
-const char * const jpeg_std_message_table[] = {
-#include "jerror.h"
-  NULL
-};
-
-
-/*
- * Error exit handler: must not return to caller.
- *
- * Applications may override this if they want to get control back after
- * an error.  Typically one would longjmp somewhere instead of exiting.
- * The setjmp buffer can be made a private field within an expanded error
- * handler object.  Note that the info needed to generate an error message
- * is stored in the error object, so you can generate the message now or
- * later, at your convenience.
- * You should make sure that the JPEG object is cleaned up (with jpeg_abort
- * or jpeg_destroy) at some point.
- */
-
-METHODDEF(noreturn_t)
-error_exit (j_common_ptr cinfo)
-{
-  /* Always display the message */
-  (*cinfo->err->output_message) (cinfo);
-
-  /* Let the memory manager delete any temp files before we die */
-  jpeg_destroy(cinfo);
-
-  exit(EXIT_FAILURE);
-}
-
-
-/*
- * Actual output of an error or trace message.
- * Applications may override this method to send JPEG messages somewhere
- * other than stderr.
- *
- * On Windows, printing to stderr is generally completely useless,
- * so we provide optional code to produce an error-dialog popup.
- * Most Windows applications will still prefer to override this routine,
- * but if they don't, it'll do something at least marginally useful.
- *
- * NOTE: to use the library in an environment that doesn't support the
- * C stdio library, you may have to delete the call to fprintf() entirely,
- * not just not use this routine.
- */
-
-METHODDEF(void)
-output_message (j_common_ptr cinfo)
-{
-  char buffer[JMSG_LENGTH_MAX];
-
-  /* Create the message */
-  (*cinfo->err->format_message) (cinfo, buffer);
-
-#ifdef USE_WINDOWS_MESSAGEBOX
-  /* Display it in a message dialog box */
-  MessageBox(GetActiveWindow(), buffer, "JPEG Library Error",
-	     MB_OK | MB_ICONERROR);
-#else
-  /* Send it to stderr, adding a newline */
-  fprintf(stderr, "%s\n", buffer);
-#endif
-}
-
-
-/*
- * Decide whether to emit a trace or warning message.
- * msg_level is one of:
- *   -1: recoverable corrupt-data warning, may want to abort.
- *    0: important advisory messages (always display to user).
- *    1: first level of tracing detail.
- *    2,3,...: successively more detailed tracing messages.
- * An application might override this method if it wanted to abort on warnings
- * or change the policy about which messages to display.
- */
-
-METHODDEF(void)
-emit_message (j_common_ptr cinfo, int msg_level)
-{
-  struct jpeg_error_mgr * err = cinfo->err;
-
-  if (msg_level < 0) {
-    /* It's a warning message.  Since corrupt files may generate many warnings,
-     * the policy implemented here is to show only the first warning,
-     * unless trace_level >= 3.
-     */
-    if (err->num_warnings == 0 || err->trace_level >= 3)
-      (*err->output_message) (cinfo);
-    /* Always count warnings in num_warnings. */
-    err->num_warnings++;
-  } else {
-    /* It's a trace message.  Show it if trace_level >= msg_level. */
-    if (err->trace_level >= msg_level)
-      (*err->output_message) (cinfo);
-  }
-}
-
-
-/*
- * Format a message string for the most recent JPEG error or message.
- * The message is stored into buffer, which should be at least JMSG_LENGTH_MAX
- * characters.  Note that no '\n' character is added to the string.
- * Few applications should need to override this method.
- */
-
-METHODDEF(void)
-format_message (j_common_ptr cinfo, char * buffer)
-{
-  struct jpeg_error_mgr * err = cinfo->err;
-  int msg_code = err->msg_code;
-  const char * msgtext = NULL;
-  const char * msgptr;
-  char ch;
-  boolean isstring;
-
-  /* Look up message string in proper table */
-  if (msg_code > 0 && msg_code <= err->last_jpeg_message) {
-    msgtext = err->jpeg_message_table[msg_code];
-  } else if (err->addon_message_table != NULL &&
-	     msg_code >= err->first_addon_message &&
-	     msg_code <= err->last_addon_message) {
-    msgtext = err->addon_message_table[msg_code - err->first_addon_message];
-  }
-
-  /* Defend against bogus message number */
-  if (msgtext == NULL) {
-    err->msg_parm.i[0] = msg_code;
-    msgtext = err->jpeg_message_table[0];
-  }
-
-  /* Check for string parameter, as indicated by %s in the message text */
-  isstring = FALSE;
-  msgptr = msgtext;
-  while ((ch = *msgptr++) != '\0') {
-    if (ch == '%') {
-      if (*msgptr == 's') isstring = TRUE;
-      break;
-    }
-  }
-
-  /* Format the message into the passed buffer */
-  if (isstring)
-    sprintf(buffer, msgtext, err->msg_parm.s);
-  else
-    sprintf(buffer, msgtext,
-	    err->msg_parm.i[0], err->msg_parm.i[1],
-	    err->msg_parm.i[2], err->msg_parm.i[3],
-	    err->msg_parm.i[4], err->msg_parm.i[5],
-	    err->msg_parm.i[6], err->msg_parm.i[7]);
-}
-
-
-/*
- * Reset error state variables at start of a new image.
- * This is called during compression startup to reset trace/error
- * processing to default state, without losing any application-specific
- * method pointers.  An application might possibly want to override
- * this method if it has additional error processing state.
- */
-
-METHODDEF(void)
-reset_error_mgr (j_common_ptr cinfo)
-{
-  cinfo->err->num_warnings = 0;
-  /* trace_level is not reset since it is an application-supplied parameter */
-  cinfo->err->msg_code = 0;	/* may be useful as a flag for "no error" */
-}
-
-
-/*
- * Fill in the standard error-handling methods in a jpeg_error_mgr object.
- * Typical call is:
- *	struct jpeg_compress_struct cinfo;
- *	struct jpeg_error_mgr err;
- *
- *	cinfo.err = jpeg_std_error(&err);
- * after which the application may override some of the methods.
- */
-
-GLOBAL(struct jpeg_error_mgr *)
-jpeg_std_error (struct jpeg_error_mgr * err)
-{
-  err->error_exit = error_exit;
-  err->emit_message = emit_message;
-  err->output_message = output_message;
-  err->format_message = format_message;
-  err->reset_error_mgr = reset_error_mgr;
-
-  err->trace_level = 0;		/* default = no tracing */
-  err->num_warnings = 0;	/* no warnings emitted yet */
-  err->msg_code = 0;		/* may be useful as a flag for "no error" */
-
-  /* Initialize message table pointers */
-  err->jpeg_message_table = jpeg_std_message_table;
-  err->last_jpeg_message = (int) JMSG_LASTMSGCODE - 1;
-
-  err->addon_message_table = NULL;
-  err->first_addon_message = 0;	/* for safety */
-  err->last_addon_message = 0;
-
-  return err;
-}
--- a/DoConfig/fltk/jpeg/jerror.h
+++ /dev/null
@@ -1,304 +1,0 @@
-/*
- * jerror.h
- *
- * Copyright (C) 1994-1997, Thomas G. Lane.
- * Modified 1997-2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the error and message codes for the JPEG library.
- * Edit this file to add new codes, or to translate the message strings to
- * some other language.
- * A set of error-reporting macros are defined too.  Some applications using
- * the JPEG library may wish to include this file to get the error codes
- * and/or the macros.
- */
-
-/*
- * To define the enum list of message codes, include this file without
- * defining macro JMESSAGE.  To create a message string table, include it
- * again with a suitable JMESSAGE definition (see jerror.c for an example).
- */
-#ifndef JMESSAGE
-#ifndef JERROR_H
-/* First time through, define the enum list */
-#define JMAKE_ENUM_LIST
-#else
-/* Repeated inclusions of this file are no-ops unless JMESSAGE is defined */
-#define JMESSAGE(code,string)
-#endif /* JERROR_H */
-#endif /* JMESSAGE */
-
-#ifdef JMAKE_ENUM_LIST
-
-typedef enum {
-
-#define JMESSAGE(code,string)	code ,
-
-#endif /* JMAKE_ENUM_LIST */
-
-JMESSAGE(JMSG_NOMESSAGE, "Bogus message code %d") /* Must be first entry! */
-
-/* For maintenance convenience, list is alphabetical by message code name */
-JMESSAGE(JERR_BAD_ALIGN_TYPE, "ALIGN_TYPE is wrong, please fix")
-JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
-JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
-JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
-JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request")
-JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
-JMESSAGE(JERR_BAD_DCTSIZE, "DCT scaled block size %dx%d not supported")
-JMESSAGE(JERR_BAD_DROP_SAMPLING,
-	 "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
-JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
-JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
-JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
-JMESSAGE(JERR_BAD_LENGTH, "Bogus marker length")
-JMESSAGE(JERR_BAD_LIB_VERSION,
-	 "Wrong JPEG library version: library is %d, caller expects %d")
-JMESSAGE(JERR_BAD_MCU_SIZE, "Sampling factors too large for interleaved scan")
-JMESSAGE(JERR_BAD_POOL_ID, "Invalid memory pool code %d")
-JMESSAGE(JERR_BAD_PRECISION, "Unsupported JPEG data precision %d")
-JMESSAGE(JERR_BAD_PROGRESSION,
-	 "Invalid progressive parameters Ss=%d Se=%d Ah=%d Al=%d")
-JMESSAGE(JERR_BAD_PROG_SCRIPT,
-	 "Invalid progressive parameters at scan script entry %d")
-JMESSAGE(JERR_BAD_SAMPLING, "Bogus sampling factors")
-JMESSAGE(JERR_BAD_SCAN_SCRIPT, "Invalid scan script at entry %d")
-JMESSAGE(JERR_BAD_STATE, "Improper call to JPEG library in state %d")
-JMESSAGE(JERR_BAD_STRUCT_SIZE,
-	 "JPEG parameter struct mismatch: library thinks size is %u, caller expects %u")
-JMESSAGE(JERR_BAD_VIRTUAL_ACCESS, "Bogus virtual array access")
-JMESSAGE(JERR_BUFFER_SIZE, "Buffer passed to JPEG library is too small")
-JMESSAGE(JERR_CANT_SUSPEND, "Suspension not allowed here")
-JMESSAGE(JERR_CCIR601_NOTIMPL, "CCIR601 sampling not implemented yet")
-JMESSAGE(JERR_COMPONENT_COUNT, "Too many color components: %d, max %d")
-JMESSAGE(JERR_CONVERSION_NOTIMPL, "Unsupported color conversion request")
-JMESSAGE(JERR_DAC_INDEX, "Bogus DAC index %d")
-JMESSAGE(JERR_DAC_VALUE, "Bogus DAC value 0x%x")
-JMESSAGE(JERR_DHT_INDEX, "Bogus DHT index %d")
-JMESSAGE(JERR_DQT_INDEX, "Bogus DQT index %d")
-JMESSAGE(JERR_EMPTY_IMAGE, "Empty JPEG image (DNL not supported)")
-JMESSAGE(JERR_EMS_READ, "Read from EMS failed")
-JMESSAGE(JERR_EMS_WRITE, "Write to EMS failed")
-JMESSAGE(JERR_EOI_EXPECTED, "Didn't expect more than one scan")
-JMESSAGE(JERR_FILE_READ, "Input file read error")
-JMESSAGE(JERR_FILE_WRITE, "Output file write error --- out of disk space?")
-JMESSAGE(JERR_FRACT_SAMPLE_NOTIMPL, "Fractional sampling not implemented yet")
-JMESSAGE(JERR_HUFF_CLEN_OVERFLOW, "Huffman code size table overflow")
-JMESSAGE(JERR_HUFF_MISSING_CODE, "Missing Huffman code table entry")
-JMESSAGE(JERR_IMAGE_TOO_BIG, "Maximum supported image dimension is %u pixels")
-JMESSAGE(JERR_INPUT_EMPTY, "Empty input file")
-JMESSAGE(JERR_INPUT_EOF, "Premature end of input file")
-JMESSAGE(JERR_MISMATCHED_QUANT_TABLE,
-	 "Cannot transcode due to multiple use of quantization table %d")
-JMESSAGE(JERR_MISSING_DATA, "Scan script does not transmit all data")
-JMESSAGE(JERR_MODE_CHANGE, "Invalid color quantization mode change")
-JMESSAGE(JERR_NOTIMPL, "Not implemented yet")
-JMESSAGE(JERR_NOT_COMPILED, "Requested feature was omitted at compile time")
-JMESSAGE(JERR_NO_ARITH_TABLE, "Arithmetic table 0x%02x was not defined")
-JMESSAGE(JERR_NO_BACKING_STORE, "Backing store not supported")
-JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
-JMESSAGE(JERR_NO_IMAGE, "JPEG datastream contains no image")
-JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
-JMESSAGE(JERR_NO_SOI, "Not a JPEG file: starts with 0x%02x 0x%02x")
-JMESSAGE(JERR_OUT_OF_MEMORY, "Insufficient memory (case %d)")
-JMESSAGE(JERR_QUANT_COMPONENTS,
-	 "Cannot quantize more than %d color components")
-JMESSAGE(JERR_QUANT_FEW_COLORS, "Cannot quantize to fewer than %d colors")
-JMESSAGE(JERR_QUANT_MANY_COLORS, "Cannot quantize to more than %d colors")
-JMESSAGE(JERR_SOF_BEFORE, "Invalid JPEG file structure: %s before SOF")
-JMESSAGE(JERR_SOF_DUPLICATE, "Invalid JPEG file structure: two SOF markers")
-JMESSAGE(JERR_SOF_NO_SOS, "Invalid JPEG file structure: missing SOS marker")
-JMESSAGE(JERR_SOF_UNSUPPORTED, "Unsupported JPEG process: SOF type 0x%02x")
-JMESSAGE(JERR_SOI_DUPLICATE, "Invalid JPEG file structure: two SOI markers")
-JMESSAGE(JERR_TFILE_CREATE, "Failed to create temporary file %s")
-JMESSAGE(JERR_TFILE_READ, "Read failed on temporary file")
-JMESSAGE(JERR_TFILE_SEEK, "Seek failed on temporary file")
-JMESSAGE(JERR_TFILE_WRITE,
-	 "Write failed on temporary file --- out of disk space?")
-JMESSAGE(JERR_TOO_LITTLE_DATA, "Application transferred too few scanlines")
-JMESSAGE(JERR_UNKNOWN_MARKER, "Unsupported marker type 0x%02x")
-JMESSAGE(JERR_VIRTUAL_BUG, "Virtual array controller messed up")
-JMESSAGE(JERR_WIDTH_OVERFLOW, "Image too wide for this implementation")
-JMESSAGE(JERR_XMS_READ, "Read from XMS failed")
-JMESSAGE(JERR_XMS_WRITE, "Write to XMS failed")
-JMESSAGE(JMSG_COPYRIGHT, JCOPYRIGHT)
-JMESSAGE(JMSG_VERSION, JVERSION)
-JMESSAGE(JTRC_16BIT_TABLES,
-	 "Caution: quantization tables are too coarse for baseline JPEG")
-JMESSAGE(JTRC_ADOBE,
-	 "Adobe APP14 marker: version %d, flags 0x%04x 0x%04x, transform %d")
-JMESSAGE(JTRC_APP0, "Unknown APP0 marker (not JFIF), length %u")
-JMESSAGE(JTRC_APP14, "Unknown APP14 marker (not Adobe), length %u")
-JMESSAGE(JTRC_DAC, "Define Arithmetic Table 0x%02x: 0x%02x")
-JMESSAGE(JTRC_DHT, "Define Huffman Table 0x%02x")
-JMESSAGE(JTRC_DQT, "Define Quantization Table %d  precision %d")
-JMESSAGE(JTRC_DRI, "Define Restart Interval %u")
-JMESSAGE(JTRC_EMS_CLOSE, "Freed EMS handle %u")
-JMESSAGE(JTRC_EMS_OPEN, "Obtained EMS handle %u")
-JMESSAGE(JTRC_EOI, "End Of Image")
-JMESSAGE(JTRC_HUFFBITS, "        %3d %3d %3d %3d %3d %3d %3d %3d")
-JMESSAGE(JTRC_JFIF, "JFIF APP0 marker: version %d.%02d, density %dx%d  %d")
-JMESSAGE(JTRC_JFIF_BADTHUMBNAILSIZE,
-	 "Warning: thumbnail image size does not match data length %u")
-JMESSAGE(JTRC_JFIF_EXTENSION,
-	 "JFIF extension marker: type 0x%02x, length %u")
-JMESSAGE(JTRC_JFIF_THUMBNAIL, "    with %d x %d thumbnail image")
-JMESSAGE(JTRC_MISC_MARKER, "Miscellaneous marker 0x%02x, length %u")
-JMESSAGE(JTRC_PARMLESS_MARKER, "Unexpected marker 0x%02x")
-JMESSAGE(JTRC_QUANTVALS, "        %4u %4u %4u %4u %4u %4u %4u %4u")
-JMESSAGE(JTRC_QUANT_3_NCOLORS, "Quantizing to %d = %d*%d*%d colors")
-JMESSAGE(JTRC_QUANT_NCOLORS, "Quantizing to %d colors")
-JMESSAGE(JTRC_QUANT_SELECTED, "Selected %d colors for quantization")
-JMESSAGE(JTRC_RECOVERY_ACTION, "At marker 0x%02x, recovery action %d")
-JMESSAGE(JTRC_RST, "RST%d")
-JMESSAGE(JTRC_SMOOTH_NOTIMPL,
-	 "Smoothing not supported with nonstandard sampling ratios")
-JMESSAGE(JTRC_SOF, "Start Of Frame 0x%02x: width=%u, height=%u, components=%d")
-JMESSAGE(JTRC_SOF_COMPONENT, "    Component %d: %dhx%dv q=%d")
-JMESSAGE(JTRC_SOI, "Start of Image")
-JMESSAGE(JTRC_SOS, "Start Of Scan: %d components")
-JMESSAGE(JTRC_SOS_COMPONENT, "    Component %d: dc=%d ac=%d")
-JMESSAGE(JTRC_SOS_PARAMS, "  Ss=%d, Se=%d, Ah=%d, Al=%d")
-JMESSAGE(JTRC_TFILE_CLOSE, "Closed temporary file %s")
-JMESSAGE(JTRC_TFILE_OPEN, "Opened temporary file %s")
-JMESSAGE(JTRC_THUMB_JPEG,
-	 "JFIF extension marker: JPEG-compressed thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_PALETTE,
-	 "JFIF extension marker: palette thumbnail image, length %u")
-JMESSAGE(JTRC_THUMB_RGB,
-	 "JFIF extension marker: RGB thumbnail image, length %u")
-JMESSAGE(JTRC_UNKNOWN_IDS,
-	 "Unrecognized component IDs %d %d %d, assuming YCbCr")
-JMESSAGE(JTRC_XMS_CLOSE, "Freed XMS handle %u")
-JMESSAGE(JTRC_XMS_OPEN, "Obtained XMS handle %u")
-JMESSAGE(JWRN_ADOBE_XFORM, "Unknown Adobe color transform code %d")
-JMESSAGE(JWRN_ARITH_BAD_CODE, "Corrupt JPEG data: bad arithmetic code")
-JMESSAGE(JWRN_BOGUS_PROGRESSION,
-	 "Inconsistent progression sequence for component %d coefficient %d")
-JMESSAGE(JWRN_EXTRANEOUS_DATA,
-	 "Corrupt JPEG data: %u extraneous bytes before marker 0x%02x")
-JMESSAGE(JWRN_HIT_MARKER, "Corrupt JPEG data: premature end of data segment")
-JMESSAGE(JWRN_HUFF_BAD_CODE, "Corrupt JPEG data: bad Huffman code")
-JMESSAGE(JWRN_JFIF_MAJOR, "Warning: unknown JFIF revision number %d.%02d")
-JMESSAGE(JWRN_JPEG_EOF, "Premature end of JPEG file")
-JMESSAGE(JWRN_MUST_RESYNC,
-	 "Corrupt JPEG data: found marker 0x%02x instead of RST%d")
-JMESSAGE(JWRN_NOT_SEQUENTIAL, "Invalid SOS parameters for sequential JPEG")
-JMESSAGE(JWRN_TOO_MUCH_DATA, "Application transferred too many scanlines")
-
-#ifdef JMAKE_ENUM_LIST
-
-  JMSG_LASTMSGCODE
-} J_MESSAGE_CODE;
-
-#undef JMAKE_ENUM_LIST
-#endif /* JMAKE_ENUM_LIST */
-
-/* Zap JMESSAGE macro so that future re-inclusions do nothing by default */
-#undef JMESSAGE
-
-
-#ifndef JERROR_H
-#define JERROR_H
-
-/* Macros to simplify using the error and trace message stuff */
-/* The first parameter is either type of cinfo pointer */
-
-/* Fatal errors (print message and exit) */
-#define ERREXIT(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT3(cinfo,code,p1,p2,p3)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT4(cinfo,code,p1,p2,p3,p4)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (cinfo)->err->msg_parm.i[3] = (p4), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXIT6(cinfo,code,p1,p2,p3,p4,p5,p6)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (cinfo)->err->msg_parm.i[2] = (p3), \
-   (cinfo)->err->msg_parm.i[3] = (p4), \
-   (cinfo)->err->msg_parm.i[4] = (p5), \
-   (cinfo)->err->msg_parm.i[5] = (p6), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-#define ERREXITS(cinfo,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
-
-#define MAKESTMT(stuff)		do { stuff } while (0)
-
-/* Nonfatal errors (we can keep going, but the data is probably corrupt) */
-#define WARNMS(cinfo,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS1(cinfo,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-#define WARNMS2(cinfo,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), -1))
-
-/* Informational/debugging messages */
-#define TRACEMS(cinfo,lvl,code)  \
-  ((cinfo)->err->msg_code = (code), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS1(cinfo,lvl,code,p1)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS2(cinfo,lvl,code,p1,p2)  \
-  ((cinfo)->err->msg_code = (code), \
-   (cinfo)->err->msg_parm.i[0] = (p1), \
-   (cinfo)->err->msg_parm.i[1] = (p2), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-#define TRACEMS3(cinfo,lvl,code,p1,p2,p3)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS4(cinfo,lvl,code,p1,p2,p3,p4)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS5(cinfo,lvl,code,p1,p2,p3,p4,p5)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMS8(cinfo,lvl,code,p1,p2,p3,p4,p5,p6,p7,p8)  \
-  MAKESTMT(int * _mp = (cinfo)->err->msg_parm.i; \
-	   _mp[0] = (p1); _mp[1] = (p2); _mp[2] = (p3); _mp[3] = (p4); \
-	   _mp[4] = (p5); _mp[5] = (p6); _mp[6] = (p7); _mp[7] = (p8); \
-	   (cinfo)->err->msg_code = (code); \
-	   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)); )
-#define TRACEMSS(cinfo,lvl,code,str)  \
-  ((cinfo)->err->msg_code = (code), \
-   strncpy((cinfo)->err->msg_parm.s, (str), JMSG_STR_PARM_MAX), \
-   (*(cinfo)->err->emit_message) ((j_common_ptr) (cinfo), (lvl)))
-
-#endif /* JERROR_H */
--- a/DoConfig/fltk/jpeg/jfdctflt.c
+++ /dev/null
@@ -1,174 +1,0 @@
-/*
- * jfdctflt.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2003-2009 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a floating-point implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * This implementation should be more accurate than either of the integer
- * DCT implementations.  However, it may not give the same results on all
- * machines because of differences in roundoff behavior.  Speed will depend
- * on the hardware's floating point capacity.
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with a fixed-point
- * implementation, accuracy is lost due to imprecise representation of the
- * scaled quantization values.  However, that problem does not arise if
- * we use floating point arithmetic.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_float (FAST_FLOAT * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
-  FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
-  FAST_FLOAT *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-
-  /* Pass 1: process rows. */
-
-  dataptr = data;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Load data into workspace */
-    tmp0 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]));
-    tmp7 = (FAST_FLOAT) (GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]));
-    tmp1 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]));
-    tmp6 = (FAST_FLOAT) (GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]));
-    tmp2 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]));
-    tmp5 = (FAST_FLOAT) (GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]));
-    tmp3 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]));
-    tmp4 = (FAST_FLOAT) (GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]));
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = tmp10 + tmp11 - 8 * CENTERJSAMPLE; /* phase 3 */
-    dataptr[4] = tmp10 - tmp11;
-
-    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
-    dataptr[2] = tmp13 + z1;	/* phase 5 */
-    dataptr[6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
-    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
-    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
-    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[5] = z13 + z2;	/* phase 6 */
-    dataptr[3] = z13 - z2;
-    dataptr[1] = z11 + z4;
-    dataptr[7] = z11 - z4;
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[DCTSIZE*4] = tmp10 - tmp11;
-
-    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
-    dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
-    dataptr[DCTSIZE*6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = (tmp10 - tmp12) * ((FAST_FLOAT) 0.382683433); /* c6 */
-    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
-    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
-    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
-    dataptr[DCTSIZE*3] = z13 - z2;
-    dataptr[DCTSIZE*1] = z11 + z4;
-    dataptr[DCTSIZE*7] = z11 - z4;
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jfdctfst.c
+++ /dev/null
@@ -1,230 +1,0 @@
-/*
- * jfdctfst.c
- *
- * Copyright (C) 1994-1996, Thomas G. Lane.
- * Modified 2003-2009 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a fast, not so accurate integer implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with fixed-point math,
- * accuracy is lost due to imprecise representation of the scaled
- * quantization values.  The smaller the quantization table entry, the less
- * precise the scaled value, so this implementation does worse with high-
- * quality-setting files than with low-quality ones.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_IFAST_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Scaling decisions are generally the same as in the LL&M algorithm;
- * see jfdctint.c for more details.  However, we choose to descale
- * (right shift) multiplication products as soon as they are formed,
- * rather than carrying additional fractional bits into subsequent additions.
- * This compromises accuracy slightly, but it lets us save a few shifts.
- * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples)
- * everywhere except in the multiplications proper; this saves a good deal
- * of work on 16-bit-int machines.
- *
- * Again to save a few shifts, the intermediate results between pass 1 and
- * pass 2 are not upscaled, but are represented only to integral precision.
- *
- * A final compromise is to represent the multiplicative constants to only
- * 8 fractional bits, rather than 13.  This saves some shifting work on some
- * machines, and may also reduce the cost of multiplication (since there
- * are fewer one-bits in the constants).
- */
-
-#define CONST_BITS  8
-
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 8
-#define FIX_0_382683433  ((INT32)   98)		/* FIX(0.382683433) */
-#define FIX_0_541196100  ((INT32)  139)		/* FIX(0.541196100) */
-#define FIX_0_707106781  ((INT32)  181)		/* FIX(0.707106781) */
-#define FIX_1_306562965  ((INT32)  334)		/* FIX(1.306562965) */
-#else
-#define FIX_0_382683433  FIX(0.382683433)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_707106781  FIX(0.707106781)
-#define FIX_1_306562965  FIX(1.306562965)
-#endif
-
-
-/* We can gain a little more speed, with a further compromise in accuracy,
- * by omitting the addition in a descaling shift.  This yields an incorrectly
- * rounded result half the time...
- */
-
-#ifndef USE_ACCURATE_ROUNDING
-#undef DESCALE
-#define DESCALE(x,n)  RIGHT_SHIFT(x, n)
-#endif
-
-
-/* Multiply a DCTELEM variable by an INT32 constant, and immediately
- * descale to yield a DCTELEM result.
- */
-
-#define MULTIPLY(var,const)  ((DCTELEM) DESCALE((var) * (const), CONST_BITS))
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_ifast (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  DCTELEM tmp10, tmp11, tmp12, tmp13;
-  DCTELEM z1, z2, z3, z4, z5, z11, z13;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows. */
-
-  dataptr = data;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Load data into workspace */
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]);
-    tmp7 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]);
-    tmp6 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]);
-    tmp5 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]);
-    tmp4 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]);
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = tmp10 + tmp11 - 8 * CENTERJSAMPLE; /* phase 3 */
-    dataptr[4] = tmp10 - tmp11;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
-    dataptr[2] = tmp13 + z1;	/* phase 5 */
-    dataptr[6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
-    z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
-    z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
-    z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[5] = z13 + z2;	/* phase 6 */
-    dataptr[3] = z13 - z2;
-    dataptr[1] = z11 + z4;
-    dataptr[7] = z11 - z4;
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns. */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    /* Even part */
-
-    tmp10 = tmp0 + tmp3;	/* phase 2 */
-    tmp13 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp12 = tmp1 - tmp2;
-
-    dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
-    dataptr[DCTSIZE*4] = tmp10 - tmp11;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
-    dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
-    dataptr[DCTSIZE*6] = tmp13 - z1;
-
-    /* Odd part */
-
-    tmp10 = tmp4 + tmp5;	/* phase 2 */
-    tmp11 = tmp5 + tmp6;
-    tmp12 = tmp6 + tmp7;
-
-    /* The rotator is modified from fig 4-8 to avoid extra negations. */
-    z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
-    z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
-    z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
-    z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
-
-    z11 = tmp7 + z3;		/* phase 5 */
-    z13 = tmp7 - z3;
-
-    dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
-    dataptr[DCTSIZE*3] = z13 - z2;
-    dataptr[DCTSIZE*1] = z11 + z4;
-    dataptr[DCTSIZE*7] = z11 - z4;
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#endif /* DCT_IFAST_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jfdctint.c
+++ /dev/null
@@ -1,4406 +1,0 @@
-/*
- * jfdctint.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modification developed 2003-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a slow-but-accurate integer implementation of the
- * forward DCT (Discrete Cosine Transform).
- *
- * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
- * on each column.  Direct algorithms are also available, but they are
- * much more complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on an algorithm described in
- *   C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
- *   Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
- *   Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
- * The primary algorithm described there uses 11 multiplies and 29 adds.
- * We use their alternate method with 12 multiplies and 32 adds.
- * The advantage of this method is that no data path contains more than one
- * multiplication; this allows a very simple and accurate implementation in
- * scaled fixed-point arithmetic, with a minimal number of shifts.
- *
- * We also provide FDCT routines with various input sample block sizes for
- * direct resolution reduction or enlargement and for direct resolving the
- * common 2x1 and 1x2 subsampling cases without additional resampling: NxN
- * (N=1...16), 2NxN, and Nx2N (N=1...8) pixels for one 8x8 output DCT block.
- *
- * For N<8 we fill the remaining block coefficients with zero.
- * For N>8 we apply a partial N-point FDCT on the input samples, computing
- * just the lower 8 frequency coefficients and discarding the rest.
- *
- * We must scale the output coefficients of the N-point FDCT appropriately
- * to the standard 8-point FDCT level by 8/N per 1-D pass.  This scaling
- * is folded into the constant multipliers (pass 2) and/or final/initial
- * shifting.
- *
- * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases
- * since there would be too many additional constants to pre-calculate.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_ISLOW_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */
-#endif
-
-
-/*
- * The poop on this scaling stuff is as follows:
- *
- * Each 1-D DCT step produces outputs which are a factor of sqrt(N)
- * larger than the true DCT outputs.  The final outputs are therefore
- * a factor of N larger than desired; since N=8 this can be cured by
- * a simple right shift at the end of the algorithm.  The advantage of
- * this arrangement is that we save two multiplications per 1-D DCT,
- * because the y0 and y4 outputs need not be divided by sqrt(N).
- * In the IJG code, this factor of 8 is removed by the quantization step
- * (in jcdctmgr.c), NOT in this module.
- *
- * We have to do addition and subtraction of the integer inputs, which
- * is no problem, and multiplication by fractional constants, which is
- * a problem to do in integer arithmetic.  We multiply all the constants
- * by CONST_SCALE and convert them to integer constants (thus retaining
- * CONST_BITS bits of precision in the constants).  After doing a
- * multiplication we have to divide the product by CONST_SCALE, with proper
- * rounding, to produce the correct output.  This division can be done
- * cheaply as a right shift of CONST_BITS bits.  We postpone shifting
- * as long as possible so that partial sums can be added together with
- * full fractional precision.
- *
- * The outputs of the first pass are scaled up by PASS1_BITS bits so that
- * they are represented to better-than-integral precision.  These outputs
- * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
- * with the recommended scaling.  (For 12-bit sample data, the intermediate
- * array is INT32 anyway.)
- *
- * To avoid overflow of the 32-bit intermediate results in pass 2, we must
- * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
- * shows that the values given below are the most effective.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  13
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  13
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 13
-#define FIX_0_298631336  ((INT32)  2446)	/* FIX(0.298631336) */
-#define FIX_0_390180644  ((INT32)  3196)	/* FIX(0.390180644) */
-#define FIX_0_541196100  ((INT32)  4433)	/* FIX(0.541196100) */
-#define FIX_0_765366865  ((INT32)  6270)	/* FIX(0.765366865) */
-#define FIX_0_899976223  ((INT32)  7373)	/* FIX(0.899976223) */
-#define FIX_1_175875602  ((INT32)  9633)	/* FIX(1.175875602) */
-#define FIX_1_501321110  ((INT32)  12299)	/* FIX(1.501321110) */
-#define FIX_1_847759065  ((INT32)  15137)	/* FIX(1.847759065) */
-#define FIX_1_961570560  ((INT32)  16069)	/* FIX(1.961570560) */
-#define FIX_2_053119869  ((INT32)  16819)	/* FIX(2.053119869) */
-#define FIX_2_562915447  ((INT32)  20995)	/* FIX(2.562915447) */
-#define FIX_3_072711026  ((INT32)  25172)	/* FIX(3.072711026) */
-#else
-#define FIX_0_298631336  FIX(0.298631336)
-#define FIX_0_390180644  FIX(0.390180644)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_765366865  FIX(0.765366865)
-#define FIX_0_899976223  FIX(0.899976223)
-#define FIX_1_175875602  FIX(1.175875602)
-#define FIX_1_501321110  FIX(1.501321110)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_1_961570560  FIX(1.961570560)
-#define FIX_2_053119869  FIX(2.053119869)
-#define FIX_2_562915447  FIX(2.562915447)
-#define FIX_3_072711026  FIX(3.072711026)
-#endif
-
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
- * For 12-bit samples, a full 32-bit multiplication will be needed.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
-#else
-#define MULTIPLY(var,const)  ((var) * (const))
-#endif
-
-
-/*
- * Perform the forward DCT on one block of samples.
- */
-
-GLOBAL(void)
-jpeg_fdct_islow (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]);
-
-    tmp10 = tmp0 + tmp3;
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    dataptr[2] = (DCTELEM)
-      RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS-PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);       /*  c3 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);          /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);          /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);       /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);              /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);              /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);       /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);              /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);              /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-
-    /* Add fudge factor here for final descale. */
-    tmp10 = tmp0 + tmp3 + (ONE << (PASS1_BITS-1));
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS+PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);       /*  c3 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);          /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);          /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);       /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);              /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);              /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);       /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);              /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);              /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-#ifdef DCT_SCALING_SUPPORTED
-
-
-/*
- * Perform the forward DCT on a 7x7 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_7x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12;
-  INT32 z1, z2, z3;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * cK represents sqrt(2) * cos(K*pi/14).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 7; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[6]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[5]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[4]);
-    tmp3 = GETJSAMPLE(elemptr[3]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[6]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[5]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[4]);
-
-    z1 = tmp0 + tmp2;
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((z1 + tmp1 + tmp3 - 7 * CENTERJSAMPLE) << PASS1_BITS);
-    tmp3 += tmp3;
-    z1 -= tmp3;
-    z1 -= tmp3;
-    z1 = MULTIPLY(z1, FIX(0.353553391));                /* (c2+c6-c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp2, FIX(0.920609002));       /* (c2+c4-c6)/2 */
-    z3 = MULTIPLY(tmp1 - tmp2, FIX(0.314692123));       /* c6 */
-    dataptr[2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS-PASS1_BITS);
-    z1 -= z2;
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.881747734));       /* c4 */
-    dataptr[4] = (DCTELEM)
-      DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.707106781)), /* c2+c6-c4 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(0.935414347));   /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.170262339));   /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.378756276)); /* -c1 */
-    tmp1 += tmp2;
-    tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.613604268));   /* c5 */
-    tmp0 += tmp3;
-    tmp2 += tmp3 + MULTIPLY(tmp12, FIX(1.870828693));   /* c3+c1-c5 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/7)**2 = 64/49, which we fold
-   * into the constant multipliers:
-   * cK now represents sqrt(2) * cos(K*pi/14) * 64/49.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 7; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*6];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*5];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*4];
-    tmp3 = dataptr[DCTSIZE*3];
-
-    tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*6];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*5];
-    tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*4];
-
-    z1 = tmp0 + tmp2;
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 + tmp1 + tmp3, FIX(1.306122449)), /* 64/49 */
-	      CONST_BITS+PASS1_BITS);
-    tmp3 += tmp3;
-    z1 -= tmp3;
-    z1 -= tmp3;
-    z1 = MULTIPLY(z1, FIX(0.461784020));                /* (c2+c6-c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp2, FIX(1.202428084));       /* (c2+c4-c6)/2 */
-    z3 = MULTIPLY(tmp1 - tmp2, FIX(0.411026446));       /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS+PASS1_BITS);
-    z1 -= z2;
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(1.151670509));       /* c4 */
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.923568041)), /* c2+c6-c4 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.221765677));   /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.222383464));   /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.800824523)); /* -c1 */
-    tmp1 += tmp2;
-    tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.801442310));   /* c5 */
-    tmp0 += tmp3;
-    tmp2 += tmp3 + MULTIPLY(tmp12, FIX(2.443531355));   /* c3+c1-c5 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 6x6 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_6x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2;
-  INT32 tmp10, tmp11, tmp12;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 6; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]);
-    tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]);
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(1.224744871)),                 /* c2 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)),     /* c5 */
-		    CONST_BITS-PASS1_BITS);
-
-    dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << PASS1_BITS));
-    dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << PASS1_BITS);
-    dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << PASS1_BITS));
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/6)**2 = 16/9, which we fold
-   * into the constant multipliers:
-   * cK now represents sqrt(2) * cos(K*pi/12) * 16/9.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 6; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5];
-    tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3];
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)),         /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(2.177324216)),                 /* c2 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829));             /* c5 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)),    /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 5x5 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_5x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2;
-  INT32 tmp10, tmp11;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * cK represents sqrt(2) * cos(K*pi/10).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 5; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[4]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[3]);
-    tmp2 = GETJSAMPLE(elemptr[2]);
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[4]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[3]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp2 - 5 * CENTERJSAMPLE) << (PASS1_BITS+1));
-    tmp11 = MULTIPLY(tmp11, FIX(0.790569415));          /* (c2+c4)/2 */
-    tmp10 -= tmp2 << 2;
-    tmp10 = MULTIPLY(tmp10, FIX(0.353553391));          /* (c2-c4)/2 */
-    dataptr[2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS-PASS1_BITS-1);
-    dataptr[4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS-PASS1_BITS-1);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp1, FIX(0.831253876));    /* c3 */
-
-    dataptr[1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.513743148)), /* c1-c3 */
-	      CONST_BITS-PASS1_BITS-1);
-    dataptr[3] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.176250899)), /* c1+c3 */
-	      CONST_BITS-PASS1_BITS-1);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/5)**2 = 64/25, which we partially
-   * fold into the constant multipliers (other part was done in pass 1):
-   * cK now represents sqrt(2) * cos(K*pi/10) * 32/25.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 5; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*4];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*3];
-    tmp2 = dataptr[DCTSIZE*2];
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*4];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*3];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp2, FIX(1.28)),        /* 32/25 */
-	      CONST_BITS+PASS1_BITS);
-    tmp11 = MULTIPLY(tmp11, FIX(1.011928851));          /* (c2+c4)/2 */
-    tmp10 -= tmp2 << 2;
-    tmp10 = MULTIPLY(tmp10, FIX(0.452548340));          /* (c2-c4)/2 */
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp1, FIX(1.064004961));    /* c3 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.657591230)), /* c1-c3 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.785601151)), /* c1+c3 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 4x4 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_4x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1;
-  INT32 tmp10, tmp11;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We must also scale the output by (8/4)**2 = 2**2, which we add here.
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+2));
-    dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+2));
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-3);
-
-    dataptr[1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS-PASS1_BITS-2);
-    dataptr[3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS-PASS1_BITS-2);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3] + (ONE << (PASS1_BITS-1));
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2];
-
-    tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS);
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 3x3 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_3x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We scale the results further by 2**2 as part of output adaption
-   * scaling for different DCT size.
-   * cK represents sqrt(2) * cos(K*pi/6).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 3; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[2]);
-    tmp1 = GETJSAMPLE(elemptr[1]);
-
-    tmp2 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[2]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 - 3 * CENTERJSAMPLE) << (PASS1_BITS+2));
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(0.707106781)), /* c2 */
-	      CONST_BITS-PASS1_BITS-2);
-
-    /* Odd part */
-
-    dataptr[1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2, FIX(1.224744871)),               /* c1 */
-	      CONST_BITS-PASS1_BITS-2);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/3)**2 = 64/9, which we partially
-   * fold into the constant multipliers (other part was done in pass 1):
-   * cK now represents sqrt(2) * cos(K*pi/6) * 16/9.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 3; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*2];
-    tmp1 = dataptr[DCTSIZE*1];
-
-    tmp2 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*2];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 + tmp1, FIX(1.777777778)),        /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(1.257078722)), /* c2 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2, FIX(2.177324216)),               /* c1 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 2x2 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_2x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  JSAMPROW elemptr;
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   */
-
-  /* Row 0 */
-  elemptr = sample_data[0] + start_col;
-
-  tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[1]);
-  tmp1 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[1]);
-
-  /* Row 1 */
-  elemptr = sample_data[1] + start_col;
-
-  tmp2 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[1]);
-  tmp3 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[1]);
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/2)**2 = 2**4.
-   */
-
-  /* Column 0 */
-  /* Apply unsigned->signed conversion */
-  data[DCTSIZE*0] = (DCTELEM) ((tmp0 + tmp2 - 4 * CENTERJSAMPLE) << 4);
-  data[DCTSIZE*1] = (DCTELEM) ((tmp0 - tmp2) << 4);
-
-  /* Column 1 */
-  data[DCTSIZE*0+1] = (DCTELEM) ((tmp1 + tmp3) << 4);
-  data[DCTSIZE*1+1] = (DCTELEM) ((tmp1 - tmp3) << 4);
-}
-
-
-/*
- * Perform the forward DCT on a 1x1 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_1x1 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* We leave the result scaled up by an overall factor of 8. */
-  /* We must also scale the output by (8/1)**2 = 2**6. */
-  /* Apply unsigned->signed conversion */
-  data[0] = (DCTELEM)
-    ((GETJSAMPLE(sample_data[0][start_col]) - CENTERJSAMPLE) << 6);
-}
-
-
-/*
- * Perform the forward DCT on a 9x9 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_9x9 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2;
-  DCTELEM workspace[8];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * we scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * cK represents sqrt(2) * cos(K*pi/18).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[8]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[7]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[6]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[5]);
-    tmp4 = GETJSAMPLE(elemptr[4]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[8]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[7]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[6]);
-    tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[5]);
-
-    z1 = tmp0 + tmp2 + tmp3;
-    z2 = tmp1 + tmp4;
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) ((z1 + z2 - 9 * CENTERJSAMPLE) << 1);
-    dataptr[6] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 - z2 - z2, FIX(0.707106781)),  /* c6 */
-	      CONST_BITS-1);
-    z1 = MULTIPLY(tmp0 - tmp2, FIX(1.328926049));        /* c2 */
-    z2 = MULTIPLY(tmp1 - tmp4 - tmp4, FIX(0.707106781)); /* c6 */
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2 - tmp3, FIX(1.083350441))    /* c4 */
-	      + z1 + z2, CONST_BITS-1);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp3 - tmp0, FIX(0.245575608))    /* c8 */
-	      + z1 - z2, CONST_BITS-1);
-
-    /* Odd part */
-
-    dataptr[3] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12 - tmp13, FIX(1.224744871)), /* c3 */
-	      CONST_BITS-1);
-
-    tmp11 = MULTIPLY(tmp11, FIX(1.224744871));        /* c3 */
-    tmp0 = MULTIPLY(tmp10 + tmp12, FIX(0.909038955)); /* c5 */
-    tmp1 = MULTIPLY(tmp10 + tmp13, FIX(0.483689525)); /* c7 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp11 + tmp0 + tmp1, CONST_BITS-1);
-
-    tmp2 = MULTIPLY(tmp12 - tmp13, FIX(1.392728481)); /* c1 */
-
-    dataptr[5] = (DCTELEM) DESCALE(tmp0 - tmp11 - tmp2, CONST_BITS-1);
-    dataptr[7] = (DCTELEM) DESCALE(tmp1 - tmp11 + tmp2, CONST_BITS-1);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 9)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/9)**2 = 64/81, which we partially
-   * fold into the constant multipliers and final/initial shifting:
-   * cK now represents sqrt(2) * cos(K*pi/18) * 128/81.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*0];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*7];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*6];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*5];
-    tmp4 = dataptr[DCTSIZE*4];
-
-    tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*0];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*7];
-    tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*6];
-    tmp13 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*5];
-
-    z1 = tmp0 + tmp2 + tmp3;
-    z2 = tmp1 + tmp4;
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 + z2, FIX(1.580246914)),       /* 128/81 */
-	      CONST_BITS+2);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 - z2 - z2, FIX(1.117403309)),  /* c6 */
-	      CONST_BITS+2);
-    z1 = MULTIPLY(tmp0 - tmp2, FIX(2.100031287));        /* c2 */
-    z2 = MULTIPLY(tmp1 - tmp4 - tmp4, FIX(1.117403309)); /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2 - tmp3, FIX(1.711961190))    /* c4 */
-	      + z1 + z2, CONST_BITS+2);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp3 - tmp0, FIX(0.388070096))    /* c8 */
-	      + z1 - z2, CONST_BITS+2);
-
-    /* Odd part */
-
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12 - tmp13, FIX(1.935399303)), /* c3 */
-	      CONST_BITS+2);
-
-    tmp11 = MULTIPLY(tmp11, FIX(1.935399303));        /* c3 */
-    tmp0 = MULTIPLY(tmp10 + tmp12, FIX(1.436506004)); /* c5 */
-    tmp1 = MULTIPLY(tmp10 + tmp13, FIX(0.764348879)); /* c7 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp11 + tmp0 + tmp1, CONST_BITS+2);
-
-    tmp2 = MULTIPLY(tmp12 - tmp13, FIX(2.200854883)); /* c1 */
-
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp0 - tmp11 - tmp2, CONST_BITS+2);
-    dataptr[DCTSIZE*7] = (DCTELEM)
-      DESCALE(tmp1 - tmp11 + tmp2, CONST_BITS+2);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 10x10 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_10x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  DCTELEM workspace[8*2];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * we scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * cK represents sqrt(2) * cos(K*pi/20).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[9]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[8]);
-    tmp12 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[7]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[6]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[5]);
-
-    tmp10 = tmp0 + tmp4;
-    tmp13 = tmp0 - tmp4;
-    tmp11 = tmp1 + tmp3;
-    tmp14 = tmp1 - tmp3;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[9]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[8]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[7]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[6]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[5]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 - 10 * CENTERJSAMPLE) << 1);
-    tmp12 += tmp12;
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.144122806)) - /* c4 */
-	      MULTIPLY(tmp11 - tmp12, FIX(0.437016024)),  /* c8 */
-	      CONST_BITS-1);
-    tmp10 = MULTIPLY(tmp13 + tmp14, FIX(0.831253876));    /* c6 */
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.513743148)),  /* c2-c6 */
-	      CONST_BITS-1);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.176250899)),  /* c2+c6 */
-	      CONST_BITS-1);
-
-    /* Odd part */
-
-    tmp10 = tmp0 + tmp4;
-    tmp11 = tmp1 - tmp3;
-    dataptr[5] = (DCTELEM) ((tmp10 - tmp11 - tmp2) << 1);
-    tmp2 <<= CONST_BITS;
-    dataptr[1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.396802247)) +          /* c1 */
-	      MULTIPLY(tmp1, FIX(1.260073511)) + tmp2 +   /* c3 */
-	      MULTIPLY(tmp3, FIX(0.642039522)) +          /* c7 */
-	      MULTIPLY(tmp4, FIX(0.221231742)),           /* c9 */
-	      CONST_BITS-1);
-    tmp12 = MULTIPLY(tmp0 - tmp4, FIX(0.951056516)) -     /* (c3+c7)/2 */
-	    MULTIPLY(tmp1 + tmp3, FIX(0.587785252));      /* (c1-c9)/2 */
-    tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.309016994)) +   /* (c3-c7)/2 */
-	    (tmp11 << (CONST_BITS - 1)) - tmp2;
-    dataptr[3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS-1);
-    dataptr[7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS-1);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 10)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/10)**2 = 16/25, which we partially
-   * fold into the constant multipliers and final/initial shifting:
-   * cK now represents sqrt(2) * cos(K*pi/20) * 32/25.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*1];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*0];
-    tmp12 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*7];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*6];
-    tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*5];
-
-    tmp10 = tmp0 + tmp4;
-    tmp13 = tmp0 - tmp4;
-    tmp11 = tmp1 + tmp3;
-    tmp14 = tmp1 - tmp3;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*1];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*0];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*7];
-    tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*6];
-    tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*5];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(1.28)), /* 32/25 */
-	      CONST_BITS+2);
-    tmp12 += tmp12;
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.464477191)) - /* c4 */
-	      MULTIPLY(tmp11 - tmp12, FIX(0.559380511)),  /* c8 */
-	      CONST_BITS+2);
-    tmp10 = MULTIPLY(tmp13 + tmp14, FIX(1.064004961));    /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.657591230)),  /* c2-c6 */
-	      CONST_BITS+2);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.785601151)),  /* c2+c6 */
-	      CONST_BITS+2);
-
-    /* Odd part */
-
-    tmp10 = tmp0 + tmp4;
-    tmp11 = tmp1 - tmp3;
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp2, FIX(1.28)),  /* 32/25 */
-	      CONST_BITS+2);
-    tmp2 = MULTIPLY(tmp2, FIX(1.28));                     /* 32/25 */
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.787906876)) +          /* c1 */
-	      MULTIPLY(tmp1, FIX(1.612894094)) + tmp2 +   /* c3 */
-	      MULTIPLY(tmp3, FIX(0.821810588)) +          /* c7 */
-	      MULTIPLY(tmp4, FIX(0.283176630)),           /* c9 */
-	      CONST_BITS+2);
-    tmp12 = MULTIPLY(tmp0 - tmp4, FIX(1.217352341)) -     /* (c3+c7)/2 */
-	    MULTIPLY(tmp1 + tmp3, FIX(0.752365123));      /* (c1-c9)/2 */
-    tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.395541753)) +   /* (c3-c7)/2 */
-	    MULTIPLY(tmp11, FIX(0.64)) - tmp2;            /* 16/25 */
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS+2);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS+2);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on an 11x11 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_11x11 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 z1, z2, z3;
-  DCTELEM workspace[8*3];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * we scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * cK represents sqrt(2) * cos(K*pi/22).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[10]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[9]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[8]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[7]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[6]);
-    tmp5 = GETJSAMPLE(elemptr[5]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[10]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[9]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[8]);
-    tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[7]);
-    tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[6]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 - 11 * CENTERJSAMPLE) << 1);
-    tmp5 += tmp5;
-    tmp0 -= tmp5;
-    tmp1 -= tmp5;
-    tmp2 -= tmp5;
-    tmp3 -= tmp5;
-    tmp4 -= tmp5;
-    z1 = MULTIPLY(tmp0 + tmp3, FIX(1.356927976)) +       /* c2 */
-	 MULTIPLY(tmp2 + tmp4, FIX(0.201263574));        /* c10 */
-    z2 = MULTIPLY(tmp1 - tmp3, FIX(0.926112931));        /* c6 */
-    z3 = MULTIPLY(tmp0 - tmp1, FIX(1.189712156));        /* c4 */
-    dataptr[2] = (DCTELEM)
-      DESCALE(z1 + z2 - MULTIPLY(tmp3, FIX(1.018300590)) /* c2+c8-c6 */
-	      - MULTIPLY(tmp4, FIX(1.390975730)),        /* c4+c10 */
-	      CONST_BITS-1);
-    dataptr[4] = (DCTELEM)
-      DESCALE(z2 + z3 + MULTIPLY(tmp1, FIX(0.062335650)) /* c4-c6-c10 */
-	      - MULTIPLY(tmp2, FIX(1.356927976))         /* c2 */
-	      + MULTIPLY(tmp4, FIX(0.587485545)),        /* c8 */
-	      CONST_BITS-1);
-    dataptr[6] = (DCTELEM)
-      DESCALE(z1 + z3 - MULTIPLY(tmp0, FIX(1.620527200)) /* c2+c4-c6 */
-	      - MULTIPLY(tmp2, FIX(0.788749120)),        /* c8+c10 */
-	      CONST_BITS-1);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.286413905));    /* c3 */
-    tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.068791298));    /* c5 */
-    tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.764581576));    /* c7 */
-    tmp0 = tmp1 + tmp2 + tmp3 - MULTIPLY(tmp10, FIX(1.719967871)) /* c7+c5+c3-c1 */
-	   + MULTIPLY(tmp14, FIX(0.398430003));          /* c9 */
-    tmp4 = MULTIPLY(tmp11 + tmp12, - FIX(0.764581576));  /* -c7 */
-    tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.399818907));  /* -c1 */
-    tmp1 += tmp4 + tmp5 + MULTIPLY(tmp11, FIX(1.276416582)) /* c9+c7+c1-c3 */
-	    - MULTIPLY(tmp14, FIX(1.068791298));         /* c5 */
-    tmp10 = MULTIPLY(tmp12 + tmp13, FIX(0.398430003));   /* c9 */
-    tmp2 += tmp4 + tmp10 - MULTIPLY(tmp12, FIX(1.989053629)) /* c9+c5+c3-c7 */
-	    + MULTIPLY(tmp14, FIX(1.399818907));         /* c1 */
-    tmp3 += tmp5 + tmp10 + MULTIPLY(tmp13, FIX(1.305598626)) /* c1+c5-c9-c7 */
-	    - MULTIPLY(tmp14, FIX(1.286413905));         /* c3 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-1);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-1);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-1);
-    dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS-1);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 11)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/11)**2 = 64/121, which we partially
-   * fold into the constant multipliers and final/initial shifting:
-   * cK now represents sqrt(2) * cos(K*pi/22) * 128/121.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*2];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*1];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*0];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*7];
-    tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*6];
-    tmp5 = dataptr[DCTSIZE*5];
-
-    tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*2];
-    tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*1];
-    tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*0];
-    tmp13 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*7];
-    tmp14 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*6];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5,
-		       FIX(1.057851240)),                /* 128/121 */
-	      CONST_BITS+2);
-    tmp5 += tmp5;
-    tmp0 -= tmp5;
-    tmp1 -= tmp5;
-    tmp2 -= tmp5;
-    tmp3 -= tmp5;
-    tmp4 -= tmp5;
-    z1 = MULTIPLY(tmp0 + tmp3, FIX(1.435427942)) +       /* c2 */
-	 MULTIPLY(tmp2 + tmp4, FIX(0.212906922));        /* c10 */
-    z2 = MULTIPLY(tmp1 - tmp3, FIX(0.979689713));        /* c6 */
-    z3 = MULTIPLY(tmp0 - tmp1, FIX(1.258538479));        /* c4 */
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(z1 + z2 - MULTIPLY(tmp3, FIX(1.077210542)) /* c2+c8-c6 */
-	      - MULTIPLY(tmp4, FIX(1.471445400)),        /* c4+c10 */
-	      CONST_BITS+2);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(z2 + z3 + MULTIPLY(tmp1, FIX(0.065941844)) /* c4-c6-c10 */
-	      - MULTIPLY(tmp2, FIX(1.435427942))         /* c2 */
-	      + MULTIPLY(tmp4, FIX(0.621472312)),        /* c8 */
-	      CONST_BITS+2);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(z1 + z3 - MULTIPLY(tmp0, FIX(1.714276708)) /* c2+c4-c6 */
-	      - MULTIPLY(tmp2, FIX(0.834379234)),        /* c8+c10 */
-	      CONST_BITS+2);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.360834544));    /* c3 */
-    tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.130622199));    /* c5 */
-    tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.808813568));    /* c7 */
-    tmp0 = tmp1 + tmp2 + tmp3 - MULTIPLY(tmp10, FIX(1.819470145)) /* c7+c5+c3-c1 */
-	   + MULTIPLY(tmp14, FIX(0.421479672));          /* c9 */
-    tmp4 = MULTIPLY(tmp11 + tmp12, - FIX(0.808813568));  /* -c7 */
-    tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.480800167));  /* -c1 */
-    tmp1 += tmp4 + tmp5 + MULTIPLY(tmp11, FIX(1.350258864)) /* c9+c7+c1-c3 */
-	    - MULTIPLY(tmp14, FIX(1.130622199));         /* c5 */
-    tmp10 = MULTIPLY(tmp12 + tmp13, FIX(0.421479672));   /* c9 */
-    tmp2 += tmp4 + tmp10 - MULTIPLY(tmp12, FIX(2.104122847)) /* c9+c5+c3-c7 */
-	    + MULTIPLY(tmp14, FIX(1.480800167));         /* c1 */
-    tmp3 += tmp5 + tmp10 + MULTIPLY(tmp13, FIX(1.381129125)) /* c1+c5-c9-c7 */
-	    - MULTIPLY(tmp14, FIX(1.360834544));         /* c3 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+2);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+2);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+2);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+2);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 12x12 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_12x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  DCTELEM workspace[8*4];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   * cK represents sqrt(2) * cos(K*pi/24).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[11]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[10]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[9]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[8]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[7]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[6]);
-
-    tmp10 = tmp0 + tmp5;
-    tmp13 = tmp0 - tmp5;
-    tmp11 = tmp1 + tmp4;
-    tmp14 = tmp1 - tmp4;
-    tmp12 = tmp2 + tmp3;
-    tmp15 = tmp2 - tmp3;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[11]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[10]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[9]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[8]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[7]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[6]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) (tmp10 + tmp11 + tmp12 - 12 * CENTERJSAMPLE);
-    dataptr[6] = (DCTELEM) (tmp13 - tmp14 - tmp15);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.224744871)), /* c4 */
-	      CONST_BITS);
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp14 - tmp15 + MULTIPLY(tmp13 + tmp15, FIX(1.366025404)), /* c2 */
-	      CONST_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp1 + tmp4, FIX_0_541196100);    /* c9 */
-    tmp14 = tmp10 + MULTIPLY(tmp1, FIX_0_765366865);   /* c3-c9 */
-    tmp15 = tmp10 - MULTIPLY(tmp4, FIX_1_847759065);   /* c3+c9 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.121971054));   /* c5 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.860918669));   /* c7 */
-    tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.580774953)) /* c5+c7-c1 */
-	    + MULTIPLY(tmp5, FIX(0.184591911));        /* c11 */
-    tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.184591911)); /* -c11 */
-    tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.339493912)) /* c1+c5-c11 */
-	    + MULTIPLY(tmp5, FIX(0.860918669));        /* c7 */
-    tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.725788011)) /* c1+c11-c7 */
-	    - MULTIPLY(tmp5, FIX(1.121971054));        /* c5 */
-    tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.306562965)) /* c3 */
-	    - MULTIPLY(tmp2 + tmp5, FIX_0_541196100);  /* c9 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 12)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/12)**2 = 4/9, which we partially
-   * fold into the constant multipliers and final shifting:
-   * cK now represents sqrt(2) * cos(K*pi/24) * 8/9.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*3];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*2];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*1];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*0];
-    tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*7];
-    tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*6];
-
-    tmp10 = tmp0 + tmp5;
-    tmp13 = tmp0 - tmp5;
-    tmp11 = tmp1 + tmp4;
-    tmp14 = tmp1 - tmp4;
-    tmp12 = tmp2 + tmp3;
-    tmp15 = tmp2 - tmp3;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*3];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*2];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*1];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*0];
-    tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*7];
-    tmp5 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*6];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(0.888888889)), /* 8/9 */
-	      CONST_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp13 - tmp14 - tmp15, FIX(0.888888889)), /* 8/9 */
-	      CONST_BITS+1);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.088662108)),         /* c4 */
-	      CONST_BITS+1);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp14 - tmp15, FIX(0.888888889)) +        /* 8/9 */
-	      MULTIPLY(tmp13 + tmp15, FIX(1.214244803)),         /* c2 */
-	      CONST_BITS+1);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp1 + tmp4, FIX(0.481063200));   /* c9 */
-    tmp14 = tmp10 + MULTIPLY(tmp1, FIX(0.680326102));  /* c3-c9 */
-    tmp15 = tmp10 - MULTIPLY(tmp4, FIX(1.642452502));  /* c3+c9 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(0.997307603));   /* c5 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.765261039));   /* c7 */
-    tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.516244403)) /* c5+c7-c1 */
-	    + MULTIPLY(tmp5, FIX(0.164081699));        /* c11 */
-    tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.164081699)); /* -c11 */
-    tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.079550144)) /* c1+c5-c11 */
-	    + MULTIPLY(tmp5, FIX(0.765261039));        /* c7 */
-    tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.645144899)) /* c1+c11-c7 */
-	    - MULTIPLY(tmp5, FIX(0.997307603));        /* c5 */
-    tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.161389302)) /* c3 */
-	    - MULTIPLY(tmp2 + tmp5, FIX(0.481063200)); /* c9 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+1);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 13x13 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_13x13 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  INT32 z1, z2;
-  DCTELEM workspace[8*5];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   * cK represents sqrt(2) * cos(K*pi/26).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[12]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[11]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[10]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[9]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[8]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[7]);
-    tmp6 = GETJSAMPLE(elemptr[6]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[12]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[11]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[10]);
-    tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[9]);
-    tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[8]);
-    tmp15 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[7]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      (tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6 - 13 * CENTERJSAMPLE);
-    tmp6 += tmp6;
-    tmp0 -= tmp6;
-    tmp1 -= tmp6;
-    tmp2 -= tmp6;
-    tmp3 -= tmp6;
-    tmp4 -= tmp6;
-    tmp5 -= tmp6;
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.373119086)) +   /* c2 */
-	      MULTIPLY(tmp1, FIX(1.058554052)) +   /* c6 */
-	      MULTIPLY(tmp2, FIX(0.501487041)) -   /* c10 */
-	      MULTIPLY(tmp3, FIX(0.170464608)) -   /* c12 */
-	      MULTIPLY(tmp4, FIX(0.803364869)) -   /* c8 */
-	      MULTIPLY(tmp5, FIX(1.252223920)),    /* c4 */
-	      CONST_BITS);
-    z1 = MULTIPLY(tmp0 - tmp2, FIX(1.155388986)) - /* (c4+c6)/2 */
-	 MULTIPLY(tmp3 - tmp4, FIX(0.435816023)) - /* (c2-c10)/2 */
-	 MULTIPLY(tmp1 - tmp5, FIX(0.316450131));  /* (c8-c12)/2 */
-    z2 = MULTIPLY(tmp0 + tmp2, FIX(0.096834934)) - /* (c4-c6)/2 */
-	 MULTIPLY(tmp3 + tmp4, FIX(0.937303064)) + /* (c2+c10)/2 */
-	 MULTIPLY(tmp1 + tmp5, FIX(0.486914739));  /* (c8+c12)/2 */
-
-    dataptr[4] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS);
-    dataptr[6] = (DCTELEM) DESCALE(z1 - z2, CONST_BITS);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.322312651));   /* c3 */
-    tmp2 = MULTIPLY(tmp10 + tmp12, FIX(1.163874945));   /* c5 */
-    tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.937797057)) +  /* c7 */
-	   MULTIPLY(tmp14 + tmp15, FIX(0.338443458));   /* c11 */
-    tmp0 = tmp1 + tmp2 + tmp3 -
-	   MULTIPLY(tmp10, FIX(2.020082300)) +          /* c3+c5+c7-c1 */
-	   MULTIPLY(tmp14, FIX(0.318774355));           /* c9-c11 */
-    tmp4 = MULTIPLY(tmp14 - tmp15, FIX(0.937797057)) -  /* c7 */
-	   MULTIPLY(tmp11 + tmp12, FIX(0.338443458));   /* c11 */
-    tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(1.163874945)); /* -c5 */
-    tmp1 += tmp4 + tmp5 +
-	    MULTIPLY(tmp11, FIX(0.837223564)) -         /* c5+c9+c11-c3 */
-	    MULTIPLY(tmp14, FIX(2.341699410));          /* c1+c7 */
-    tmp6 = MULTIPLY(tmp12 + tmp13, - FIX(0.657217813)); /* -c9 */
-    tmp2 += tmp4 + tmp6 -
-	    MULTIPLY(tmp12, FIX(1.572116027)) +         /* c1+c5-c9-c11 */
-	    MULTIPLY(tmp15, FIX(2.260109708));          /* c3+c7 */
-    tmp3 += tmp5 + tmp6 +
-	    MULTIPLY(tmp13, FIX(2.205608352)) -         /* c3+c5+c9-c7 */
-	    MULTIPLY(tmp15, FIX(1.742345811));          /* c1+c11 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 13)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/13)**2 = 64/169, which we partially
-   * fold into the constant multipliers and final shifting:
-   * cK now represents sqrt(2) * cos(K*pi/26) * 128/169.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*4];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*3];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*2];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*1];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*0];
-    tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*7];
-    tmp6 = dataptr[DCTSIZE*6];
-
-    tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*4];
-    tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*3];
-    tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*2];
-    tmp13 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*1];
-    tmp14 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*0];
-    tmp15 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*7];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 + tmp1 + tmp2 + tmp3 + tmp4 + tmp5 + tmp6,
-		       FIX(0.757396450)),          /* 128/169 */
-	      CONST_BITS+1);
-    tmp6 += tmp6;
-    tmp0 -= tmp6;
-    tmp1 -= tmp6;
-    tmp2 -= tmp6;
-    tmp3 -= tmp6;
-    tmp4 -= tmp6;
-    tmp5 -= tmp6;
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.039995521)) +   /* c2 */
-	      MULTIPLY(tmp1, FIX(0.801745081)) +   /* c6 */
-	      MULTIPLY(tmp2, FIX(0.379824504)) -   /* c10 */
-	      MULTIPLY(tmp3, FIX(0.129109289)) -   /* c12 */
-	      MULTIPLY(tmp4, FIX(0.608465700)) -   /* c8 */
-	      MULTIPLY(tmp5, FIX(0.948429952)),    /* c4 */
-	      CONST_BITS+1);
-    z1 = MULTIPLY(tmp0 - tmp2, FIX(0.875087516)) - /* (c4+c6)/2 */
-	 MULTIPLY(tmp3 - tmp4, FIX(0.330085509)) - /* (c2-c10)/2 */
-	 MULTIPLY(tmp1 - tmp5, FIX(0.239678205));  /* (c8-c12)/2 */
-    z2 = MULTIPLY(tmp0 + tmp2, FIX(0.073342435)) - /* (c4-c6)/2 */
-	 MULTIPLY(tmp3 + tmp4, FIX(0.709910013)) + /* (c2+c10)/2 */
-	 MULTIPLY(tmp1 + tmp5, FIX(0.368787494));  /* (c8+c12)/2 */
-
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 - z2, CONST_BITS+1);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.001514908));   /* c3 */
-    tmp2 = MULTIPLY(tmp10 + tmp12, FIX(0.881514751));   /* c5 */
-    tmp3 = MULTIPLY(tmp10 + tmp13, FIX(0.710284161)) +  /* c7 */
-	   MULTIPLY(tmp14 + tmp15, FIX(0.256335874));   /* c11 */
-    tmp0 = tmp1 + tmp2 + tmp3 -
-	   MULTIPLY(tmp10, FIX(1.530003162)) +          /* c3+c5+c7-c1 */
-	   MULTIPLY(tmp14, FIX(0.241438564));           /* c9-c11 */
-    tmp4 = MULTIPLY(tmp14 - tmp15, FIX(0.710284161)) -  /* c7 */
-	   MULTIPLY(tmp11 + tmp12, FIX(0.256335874));   /* c11 */
-    tmp5 = MULTIPLY(tmp11 + tmp13, - FIX(0.881514751)); /* -c5 */
-    tmp1 += tmp4 + tmp5 +
-	    MULTIPLY(tmp11, FIX(0.634110155)) -         /* c5+c9+c11-c3 */
-	    MULTIPLY(tmp14, FIX(1.773594819));          /* c1+c7 */
-    tmp6 = MULTIPLY(tmp12 + tmp13, - FIX(0.497774438)); /* -c9 */
-    tmp2 += tmp4 + tmp6 -
-	    MULTIPLY(tmp12, FIX(1.190715098)) +         /* c1+c5-c9-c11 */
-	    MULTIPLY(tmp15, FIX(1.711799069));          /* c3+c7 */
-    tmp3 += tmp5 + tmp6 +
-	    MULTIPLY(tmp13, FIX(1.670519935)) -         /* c3+c5+c9-c7 */
-	    MULTIPLY(tmp15, FIX(1.319646532));          /* c1+c11 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+1);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 14x14 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_14x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  DCTELEM workspace[8*6];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   * cK represents sqrt(2) * cos(K*pi/28).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[13]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[12]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[11]);
-    tmp13 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[10]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[9]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[8]);
-    tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[7]);
-
-    tmp10 = tmp0 + tmp6;
-    tmp14 = tmp0 - tmp6;
-    tmp11 = tmp1 + tmp5;
-    tmp15 = tmp1 - tmp5;
-    tmp12 = tmp2 + tmp4;
-    tmp16 = tmp2 - tmp4;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[13]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[12]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[11]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[10]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[9]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[8]);
-    tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[7]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      (tmp10 + tmp11 + tmp12 + tmp13 - 14 * CENTERJSAMPLE);
-    tmp13 += tmp13;
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.274162392)) + /* c4 */
-	      MULTIPLY(tmp11 - tmp13, FIX(0.314692123)) - /* c12 */
-	      MULTIPLY(tmp12 - tmp13, FIX(0.881747734)),  /* c8 */
-	      CONST_BITS);
-
-    tmp10 = MULTIPLY(tmp14 + tmp15, FIX(1.105676686));    /* c6 */
-
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.273079590))   /* c2-c6 */
-	      + MULTIPLY(tmp16, FIX(0.613604268)),        /* c10 */
-	      CONST_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.719280954))   /* c6+c10 */
-	      - MULTIPLY(tmp16, FIX(1.378756276)),        /* c2 */
-	      CONST_BITS);
-
-    /* Odd part */
-
-    tmp10 = tmp1 + tmp2;
-    tmp11 = tmp5 - tmp4;
-    dataptr[7] = (DCTELEM) (tmp0 - tmp10 + tmp3 - tmp11 - tmp6);
-    tmp3 <<= CONST_BITS;
-    tmp10 = MULTIPLY(tmp10, - FIX(0.158341681));          /* -c13 */
-    tmp11 = MULTIPLY(tmp11, FIX(1.405321284));            /* c1 */
-    tmp10 += tmp11 - tmp3;
-    tmp11 = MULTIPLY(tmp0 + tmp2, FIX(1.197448846)) +     /* c5 */
-	    MULTIPLY(tmp4 + tmp6, FIX(0.752406978));      /* c9 */
-    dataptr[5] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(2.373959773)) /* c3+c5-c13 */
-	      + MULTIPLY(tmp4, FIX(1.119999435)),         /* c1+c11-c9 */
-	      CONST_BITS);
-    tmp12 = MULTIPLY(tmp0 + tmp1, FIX(1.334852607)) +     /* c3 */
-	    MULTIPLY(tmp5 - tmp6, FIX(0.467085129));      /* c11 */
-    dataptr[3] = (DCTELEM)
-      DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.424103948)) /* c3-c9-c13 */
-	      - MULTIPLY(tmp5, FIX(3.069855259)),         /* c1+c5+c11 */
-	      CONST_BITS);
-    dataptr[1] = (DCTELEM)
-      DESCALE(tmp11 + tmp12 + tmp3 + tmp6 -
-	      MULTIPLY(tmp0 + tmp6, FIX(1.126980169)),    /* c3+c5-c1 */
-	      CONST_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 14)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/14)**2 = 16/49, which we partially
-   * fold into the constant multipliers and final shifting:
-   * cK now represents sqrt(2) * cos(K*pi/28) * 32/49.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*3];
-    tmp13 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*2];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*1];
-    tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*0];
-    tmp6 = dataptr[DCTSIZE*6] + dataptr[DCTSIZE*7];
-
-    tmp10 = tmp0 + tmp6;
-    tmp14 = tmp0 - tmp6;
-    tmp11 = tmp1 + tmp5;
-    tmp15 = tmp1 - tmp5;
-    tmp12 = tmp2 + tmp4;
-    tmp16 = tmp2 - tmp4;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*3];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*2];
-    tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*1];
-    tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*0];
-    tmp6 = dataptr[DCTSIZE*6] - dataptr[DCTSIZE*7];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12 + tmp13,
-		       FIX(0.653061224)),                 /* 32/49 */
-	      CONST_BITS+1);
-    tmp13 += tmp13;
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(0.832106052)) + /* c4 */
-	      MULTIPLY(tmp11 - tmp13, FIX(0.205513223)) - /* c12 */
-	      MULTIPLY(tmp12 - tmp13, FIX(0.575835255)),  /* c8 */
-	      CONST_BITS+1);
-
-    tmp10 = MULTIPLY(tmp14 + tmp15, FIX(0.722074570));    /* c6 */
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.178337691))   /* c2-c6 */
-	      + MULTIPLY(tmp16, FIX(0.400721155)),        /* c10 */
-	      CONST_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.122795725))   /* c6+c10 */
-	      - MULTIPLY(tmp16, FIX(0.900412262)),        /* c2 */
-	      CONST_BITS+1);
-
-    /* Odd part */
-
-    tmp10 = tmp1 + tmp2;
-    tmp11 = tmp5 - tmp4;
-    dataptr[DCTSIZE*7] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp10 + tmp3 - tmp11 - tmp6,
-		       FIX(0.653061224)),                 /* 32/49 */
-	      CONST_BITS+1);
-    tmp3  = MULTIPLY(tmp3 , FIX(0.653061224));            /* 32/49 */
-    tmp10 = MULTIPLY(tmp10, - FIX(0.103406812));          /* -c13 */
-    tmp11 = MULTIPLY(tmp11, FIX(0.917760839));            /* c1 */
-    tmp10 += tmp11 - tmp3;
-    tmp11 = MULTIPLY(tmp0 + tmp2, FIX(0.782007410)) +     /* c5 */
-	    MULTIPLY(tmp4 + tmp6, FIX(0.491367823));      /* c9 */
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(1.550341076)) /* c3+c5-c13 */
-	      + MULTIPLY(tmp4, FIX(0.731428202)),         /* c1+c11-c9 */
-	      CONST_BITS+1);
-    tmp12 = MULTIPLY(tmp0 + tmp1, FIX(0.871740478)) +     /* c3 */
-	    MULTIPLY(tmp5 - tmp6, FIX(0.305035186));      /* c11 */
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.276965844)) /* c3-c9-c13 */
-	      - MULTIPLY(tmp5, FIX(2.004803435)),         /* c1+c5+c11 */
-	      CONST_BITS+1);
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp11 + tmp12 + tmp3
-	      - MULTIPLY(tmp0, FIX(0.735987049))          /* c3+c5-c1 */
-	      - MULTIPLY(tmp6, FIX(0.082925825)),         /* c9-c11-c13 */
-	      CONST_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 15x15 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_15x15 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 z1, z2, z3;
-  DCTELEM workspace[8*7];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   * cK represents sqrt(2) * cos(K*pi/30).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[14]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[13]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[12]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[11]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[10]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[9]);
-    tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[8]);
-    tmp7 = GETJSAMPLE(elemptr[7]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[14]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[13]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[12]);
-    tmp13 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[11]);
-    tmp14 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[10]);
-    tmp15 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[9]);
-    tmp16 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[8]);
-
-    z1 = tmp0 + tmp4 + tmp5;
-    z2 = tmp1 + tmp3 + tmp6;
-    z3 = tmp2 + tmp7;
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) (z1 + z2 + z3 - 15 * CENTERJSAMPLE);
-    z3 += z3;
-    dataptr[6] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 - z3, FIX(1.144122806)) - /* c6 */
-	      MULTIPLY(z2 - z3, FIX(0.437016024)),  /* c12 */
-	      CONST_BITS);
-    tmp2 += ((tmp1 + tmp4) >> 1) - tmp7 - tmp7;
-    z1 = MULTIPLY(tmp3 - tmp2, FIX(1.531135173)) -  /* c2+c14 */
-         MULTIPLY(tmp6 - tmp2, FIX(2.238241955));   /* c4+c8 */
-    z2 = MULTIPLY(tmp5 - tmp2, FIX(0.798468008)) -  /* c8-c14 */
-	 MULTIPLY(tmp0 - tmp2, FIX(0.091361227));   /* c2-c4 */
-    z3 = MULTIPLY(tmp0 - tmp3, FIX(1.383309603)) +  /* c2 */
-	 MULTIPLY(tmp6 - tmp5, FIX(0.946293579)) +  /* c8 */
-	 MULTIPLY(tmp1 - tmp4, FIX(0.790569415));   /* (c6+c12)/2 */
-
-    dataptr[2] = (DCTELEM) DESCALE(z1 + z3, CONST_BITS);
-    dataptr[4] = (DCTELEM) DESCALE(z2 + z3, CONST_BITS);
-
-    /* Odd part */
-
-    tmp2 = MULTIPLY(tmp10 - tmp12 - tmp13 + tmp15 + tmp16,
-		    FIX(1.224744871));                         /* c5 */
-    tmp1 = MULTIPLY(tmp10 - tmp14 - tmp15, FIX(1.344997024)) + /* c3 */
-	   MULTIPLY(tmp11 - tmp13 - tmp16, FIX(0.831253876));  /* c9 */
-    tmp12 = MULTIPLY(tmp12, FIX(1.224744871));                 /* c5 */
-    tmp4 = MULTIPLY(tmp10 - tmp16, FIX(1.406466353)) +         /* c1 */
-	   MULTIPLY(tmp11 + tmp14, FIX(1.344997024)) +         /* c3 */
-	   MULTIPLY(tmp13 + tmp15, FIX(0.575212477));          /* c11 */
-    tmp0 = MULTIPLY(tmp13, FIX(0.475753014)) -                 /* c7-c11 */
-	   MULTIPLY(tmp14, FIX(0.513743148)) +                 /* c3-c9 */
-	   MULTIPLY(tmp16, FIX(1.700497885)) + tmp4 + tmp12;   /* c1+c13 */
-    tmp3 = MULTIPLY(tmp10, - FIX(0.355500862)) -               /* -(c1-c7) */
-	   MULTIPLY(tmp11, FIX(2.176250899)) -                 /* c3+c9 */
-	   MULTIPLY(tmp15, FIX(0.869244010)) + tmp4 - tmp12;   /* c11+c13 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 15)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/15)**2 = 64/225, which we partially
-   * fold into the constant multipliers and final shifting:
-   * cK now represents sqrt(2) * cos(K*pi/30) * 256/225.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*6];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*5];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*4];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*3];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*2];
-    tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*1];
-    tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*0];
-    tmp7 = dataptr[DCTSIZE*7];
-
-    tmp10 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*6];
-    tmp11 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*5];
-    tmp12 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*4];
-    tmp13 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*3];
-    tmp14 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*2];
-    tmp15 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*1];
-    tmp16 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*0];
-
-    z1 = tmp0 + tmp4 + tmp5;
-    z2 = tmp1 + tmp3 + tmp6;
-    z3 = tmp2 + tmp7;
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 + z2 + z3, FIX(1.137777778)), /* 256/225 */
-	      CONST_BITS+2);
-    z3 += z3;
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 - z3, FIX(1.301757503)) - /* c6 */
-	      MULTIPLY(z2 - z3, FIX(0.497227121)),  /* c12 */
-	      CONST_BITS+2);
-    tmp2 += ((tmp1 + tmp4) >> 1) - tmp7 - tmp7;
-    z1 = MULTIPLY(tmp3 - tmp2, FIX(1.742091575)) -  /* c2+c14 */
-         MULTIPLY(tmp6 - tmp2, FIX(2.546621957));   /* c4+c8 */
-    z2 = MULTIPLY(tmp5 - tmp2, FIX(0.908479156)) -  /* c8-c14 */
-	 MULTIPLY(tmp0 - tmp2, FIX(0.103948774));   /* c2-c4 */
-    z3 = MULTIPLY(tmp0 - tmp3, FIX(1.573898926)) +  /* c2 */
-	 MULTIPLY(tmp6 - tmp5, FIX(1.076671805)) +  /* c8 */
-	 MULTIPLY(tmp1 - tmp4, FIX(0.899492312));   /* (c6+c12)/2 */
-
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z3, CONST_BITS+2);
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(z2 + z3, CONST_BITS+2);
-
-    /* Odd part */
-
-    tmp2 = MULTIPLY(tmp10 - tmp12 - tmp13 + tmp15 + tmp16,
-		    FIX(1.393487498));                         /* c5 */
-    tmp1 = MULTIPLY(tmp10 - tmp14 - tmp15, FIX(1.530307725)) + /* c3 */
-	   MULTIPLY(tmp11 - tmp13 - tmp16, FIX(0.945782187));  /* c9 */
-    tmp12 = MULTIPLY(tmp12, FIX(1.393487498));                 /* c5 */
-    tmp4 = MULTIPLY(tmp10 - tmp16, FIX(1.600246161)) +         /* c1 */
-	   MULTIPLY(tmp11 + tmp14, FIX(1.530307725)) +         /* c3 */
-	   MULTIPLY(tmp13 + tmp15, FIX(0.654463974));          /* c11 */
-    tmp0 = MULTIPLY(tmp13, FIX(0.541301207)) -                 /* c7-c11 */
-	   MULTIPLY(tmp14, FIX(0.584525538)) +                 /* c3-c9 */
-	   MULTIPLY(tmp16, FIX(1.934788705)) + tmp4 + tmp12;   /* c1+c13 */
-    tmp3 = MULTIPLY(tmp10, - FIX(0.404480980)) -               /* -(c1-c7) */
-	   MULTIPLY(tmp11, FIX(2.476089912)) -                 /* c3+c9 */
-	   MULTIPLY(tmp15, FIX(0.989006518)) + tmp4 - tmp12;   /* c11+c13 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+2);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+2);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+2);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+2);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 16x16 sample block.
- */
-
-GLOBAL(void)
-jpeg_fdct_16x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17;
-  DCTELEM workspace[DCTSIZE2];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[15]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[14]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[13]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[12]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[11]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[10]);
-    tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[9]);
-    tmp7 = GETJSAMPLE(elemptr[7]) + GETJSAMPLE(elemptr[8]);
-
-    tmp10 = tmp0 + tmp7;
-    tmp14 = tmp0 - tmp7;
-    tmp11 = tmp1 + tmp6;
-    tmp15 = tmp1 - tmp6;
-    tmp12 = tmp2 + tmp5;
-    tmp16 = tmp2 - tmp5;
-    tmp13 = tmp3 + tmp4;
-    tmp17 = tmp3 - tmp4;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[15]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[14]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[13]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[12]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[11]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[10]);
-    tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[9]);
-    tmp7 = GETJSAMPLE(elemptr[7]) - GETJSAMPLE(elemptr[8]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 + tmp13 - 16 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */
-	      MULTIPLY(tmp11 - tmp12, FIX_0_541196100),   /* c12[16] = c6[8] */
-	      CONST_BITS-PASS1_BITS);
-
-    tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) +   /* c14[16] = c7[8] */
-	    MULTIPLY(tmp14 - tmp16, FIX(1.387039845));    /* c2[16] = c1[8] */
-
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982))   /* c6+c14 */
-	      + MULTIPLY(tmp16, FIX(2.172734804)),        /* c2+c10 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243))   /* c2-c6 */
-	      - MULTIPLY(tmp17, FIX(1.061594338)),        /* c10+c14 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) +         /* c3 */
-	    MULTIPLY(tmp6 - tmp7, FIX(0.410524528));          /* c13 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) +         /* c5 */
-	    MULTIPLY(tmp5 + tmp7, FIX(0.666655658));          /* c11 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) +         /* c7 */
-	    MULTIPLY(tmp4 - tmp7, FIX(0.897167586));          /* c9 */
-    tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) +         /* c15 */
-	    MULTIPLY(tmp6 - tmp5, FIX(1.407403738));          /* c1 */
-    tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) +       /* -c11 */
-	    MULTIPLY(tmp4 + tmp6, - FIX(1.247225013));        /* -c5 */
-    tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) +       /* -c3 */
-	    MULTIPLY(tmp5 - tmp4, FIX(0.410524528));          /* c13 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(tmp0, FIX(2.286341144)) +                /* c7+c5+c3-c1 */
-	    MULTIPLY(tmp7, FIX(0.779653625));                 /* c15+c13-c11+c9 */
-    tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */
-	     - MULTIPLY(tmp6, FIX(1.663905119));              /* c7+c13+c1-c5 */
-    tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */
-	     + MULTIPLY(tmp5, FIX(1.227391138));              /* c9-c11+c1-c13 */
-    tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */
-	     + MULTIPLY(tmp4, FIX(2.167985692));              /* c1+c13+c5-c9 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == DCTSIZE * 2)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/16)**2 = 1/2**2.
-   * cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*3];
-    tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*2];
-    tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*1];
-    tmp7 = dataptr[DCTSIZE*7] + wsptr[DCTSIZE*0];
-
-    tmp10 = tmp0 + tmp7;
-    tmp14 = tmp0 - tmp7;
-    tmp11 = tmp1 + tmp6;
-    tmp15 = tmp1 - tmp6;
-    tmp12 = tmp2 + tmp5;
-    tmp16 = tmp2 - tmp5;
-    tmp13 = tmp3 + tmp4;
-    tmp17 = tmp3 - tmp4;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*3];
-    tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*2];
-    tmp6 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*1];
-    tmp7 = dataptr[DCTSIZE*7] - wsptr[DCTSIZE*0];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 + tmp12 + tmp13, PASS1_BITS+2);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */
-	      MULTIPLY(tmp11 - tmp12, FIX_0_541196100),   /* c12[16] = c6[8] */
-	      CONST_BITS+PASS1_BITS+2);
-
-    tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) +   /* c14[16] = c7[8] */
-	    MULTIPLY(tmp14 - tmp16, FIX(1.387039845));    /* c2[16] = c1[8] */
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982))   /* c6+c14 */
-	      + MULTIPLY(tmp16, FIX(2.172734804)),        /* c2+10 */
-	      CONST_BITS+PASS1_BITS+2);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243))   /* c2-c6 */
-	      - MULTIPLY(tmp17, FIX(1.061594338)),        /* c10+c14 */
-	      CONST_BITS+PASS1_BITS+2);
-
-    /* Odd part */
-
-    tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) +         /* c3 */
-	    MULTIPLY(tmp6 - tmp7, FIX(0.410524528));          /* c13 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) +         /* c5 */
-	    MULTIPLY(tmp5 + tmp7, FIX(0.666655658));          /* c11 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) +         /* c7 */
-	    MULTIPLY(tmp4 - tmp7, FIX(0.897167586));          /* c9 */
-    tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) +         /* c15 */
-	    MULTIPLY(tmp6 - tmp5, FIX(1.407403738));          /* c1 */
-    tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) +       /* -c11 */
-	    MULTIPLY(tmp4 + tmp6, - FIX(1.247225013));        /* -c5 */
-    tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) +       /* -c3 */
-	    MULTIPLY(tmp5 - tmp4, FIX(0.410524528));          /* c13 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(tmp0, FIX(2.286341144)) +                /* c7+c5+c3-c1 */
-	    MULTIPLY(tmp7, FIX(0.779653625));                 /* c15+c13-c11+c9 */
-    tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */
-	     - MULTIPLY(tmp6, FIX(1.663905119));              /* c7+c13+c1-c5 */
-    tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */
-	     + MULTIPLY(tmp5, FIX(1.227391138));              /* c9-c11+c1-c13 */
-    tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */
-	     + MULTIPLY(tmp4, FIX(2.167985692));              /* c1+c13+c5-c9 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS+2);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS+2);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS+2);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS+2);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 16x8 sample block.
- *
- * 16-point FDCT in pass 1 (rows), 8-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_16x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17;
-  INT32 z1;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[15]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[14]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[13]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[12]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[11]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[10]);
-    tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[9]);
-    tmp7 = GETJSAMPLE(elemptr[7]) + GETJSAMPLE(elemptr[8]);
-
-    tmp10 = tmp0 + tmp7;
-    tmp14 = tmp0 - tmp7;
-    tmp11 = tmp1 + tmp6;
-    tmp15 = tmp1 - tmp6;
-    tmp12 = tmp2 + tmp5;
-    tmp16 = tmp2 - tmp5;
-    tmp13 = tmp3 + tmp4;
-    tmp17 = tmp3 - tmp4;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[15]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[14]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[13]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[12]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[11]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[10]);
-    tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[9]);
-    tmp7 = GETJSAMPLE(elemptr[7]) - GETJSAMPLE(elemptr[8]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 + tmp13 - 16 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */
-	      MULTIPLY(tmp11 - tmp12, FIX_0_541196100),   /* c12[16] = c6[8] */
-	      CONST_BITS-PASS1_BITS);
-
-    tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) +   /* c14[16] = c7[8] */
-	    MULTIPLY(tmp14 - tmp16, FIX(1.387039845));    /* c2[16] = c1[8] */
-
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982))   /* c6+c14 */
-	      + MULTIPLY(tmp16, FIX(2.172734804)),        /* c2+c10 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243))   /* c2-c6 */
-	      - MULTIPLY(tmp17, FIX(1.061594338)),        /* c10+c14 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) +         /* c3 */
-	    MULTIPLY(tmp6 - tmp7, FIX(0.410524528));          /* c13 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) +         /* c5 */
-	    MULTIPLY(tmp5 + tmp7, FIX(0.666655658));          /* c11 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) +         /* c7 */
-	    MULTIPLY(tmp4 - tmp7, FIX(0.897167586));          /* c9 */
-    tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) +         /* c15 */
-	    MULTIPLY(tmp6 - tmp5, FIX(1.407403738));          /* c1 */
-    tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) +       /* -c11 */
-	    MULTIPLY(tmp4 + tmp6, - FIX(1.247225013));        /* -c5 */
-    tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) +       /* -c3 */
-	    MULTIPLY(tmp5 - tmp4, FIX(0.410524528));          /* c13 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(tmp0, FIX(2.286341144)) +                /* c7+c5+c3-c1 */
-	    MULTIPLY(tmp7, FIX(0.779653625));                 /* c15+c13-c11+c9 */
-    tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */
-	     - MULTIPLY(tmp6, FIX(1.663905119));              /* c7+c13+c1-c5 */
-    tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */
-	     + MULTIPLY(tmp5, FIX(1.227391138));              /* c9-c11+c1-c13 */
-    tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */
-	     + MULTIPLY(tmp4, FIX(2.167985692));              /* c1+c13+c5-c9 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by 8/16 = 1/2.
-   * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-
-    tmp10 = tmp0 + tmp3;
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS+1);
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS+1);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);   /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-	      CONST_BITS+PASS1_BITS+1);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);   /*  c3 */
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);      /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);      /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);   /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);          /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);          /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);   /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);          /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);          /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp3, CONST_BITS+PASS1_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 14x7 sample block.
- *
- * 14-point FDCT in pass 1 (rows), 7-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_14x7 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 z1, z2, z3;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Zero bottom row of output coefficient block. */
-  MEMZERO(&data[DCTSIZE*7], SIZEOF(DCTELEM) * DCTSIZE);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 7; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[13]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[12]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[11]);
-    tmp13 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[10]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[9]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[8]);
-    tmp6 = GETJSAMPLE(elemptr[6]) + GETJSAMPLE(elemptr[7]);
-
-    tmp10 = tmp0 + tmp6;
-    tmp14 = tmp0 - tmp6;
-    tmp11 = tmp1 + tmp5;
-    tmp15 = tmp1 - tmp5;
-    tmp12 = tmp2 + tmp4;
-    tmp16 = tmp2 - tmp4;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[13]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[12]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[11]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[10]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[9]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[8]);
-    tmp6 = GETJSAMPLE(elemptr[6]) - GETJSAMPLE(elemptr[7]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 + tmp13 - 14 * CENTERJSAMPLE) << PASS1_BITS);
-    tmp13 += tmp13;
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.274162392)) + /* c4 */
-	      MULTIPLY(tmp11 - tmp13, FIX(0.314692123)) - /* c12 */
-	      MULTIPLY(tmp12 - tmp13, FIX(0.881747734)),  /* c8 */
-	      CONST_BITS-PASS1_BITS);
-
-    tmp10 = MULTIPLY(tmp14 + tmp15, FIX(1.105676686));    /* c6 */
-
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.273079590))   /* c2-c6 */
-	      + MULTIPLY(tmp16, FIX(0.613604268)),        /* c10 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.719280954))   /* c6+c10 */
-	      - MULTIPLY(tmp16, FIX(1.378756276)),        /* c2 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = tmp1 + tmp2;
-    tmp11 = tmp5 - tmp4;
-    dataptr[7] = (DCTELEM) ((tmp0 - tmp10 + tmp3 - tmp11 - tmp6) << PASS1_BITS);
-    tmp3 <<= CONST_BITS;
-    tmp10 = MULTIPLY(tmp10, - FIX(0.158341681));          /* -c13 */
-    tmp11 = MULTIPLY(tmp11, FIX(1.405321284));            /* c1 */
-    tmp10 += tmp11 - tmp3;
-    tmp11 = MULTIPLY(tmp0 + tmp2, FIX(1.197448846)) +     /* c5 */
-	    MULTIPLY(tmp4 + tmp6, FIX(0.752406978));      /* c9 */
-    dataptr[5] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(2.373959773)) /* c3+c5-c13 */
-	      + MULTIPLY(tmp4, FIX(1.119999435)),         /* c1+c11-c9 */
-	      CONST_BITS-PASS1_BITS);
-    tmp12 = MULTIPLY(tmp0 + tmp1, FIX(1.334852607)) +     /* c3 */
-	    MULTIPLY(tmp5 - tmp6, FIX(0.467085129));      /* c11 */
-    dataptr[3] = (DCTELEM)
-      DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.424103948)) /* c3-c9-c13 */
-	      - MULTIPLY(tmp5, FIX(3.069855259)),         /* c1+c5+c11 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[1] = (DCTELEM)
-      DESCALE(tmp11 + tmp12 + tmp3 + tmp6 -
-	      MULTIPLY(tmp0 + tmp6, FIX(1.126980169)),    /* c3+c5-c1 */
-	      CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/14)*(8/7) = 32/49, which we
-   * partially fold into the constant multipliers and final shifting:
-   * 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14) * 64/49.
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*6];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*5];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*4];
-    tmp3 = dataptr[DCTSIZE*3];
-
-    tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*6];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*5];
-    tmp12 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*4];
-
-    z1 = tmp0 + tmp2;
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(z1 + tmp1 + tmp3, FIX(1.306122449)), /* 64/49 */
-	      CONST_BITS+PASS1_BITS+1);
-    tmp3 += tmp3;
-    z1 -= tmp3;
-    z1 -= tmp3;
-    z1 = MULTIPLY(z1, FIX(0.461784020));                /* (c2+c6-c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp2, FIX(1.202428084));       /* (c2+c4-c6)/2 */
-    z3 = MULTIPLY(tmp1 - tmp2, FIX(0.411026446));       /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS+PASS1_BITS+1);
-    z1 -= z2;
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(1.151670509));       /* c4 */
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.923568041)), /* c2+c6-c4 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS+PASS1_BITS+1);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(1.221765677));   /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.222383464));   /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.800824523)); /* -c1 */
-    tmp1 += tmp2;
-    tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.801442310));   /* c5 */
-    tmp0 += tmp3;
-    tmp2 += tmp3 + MULTIPLY(tmp12, FIX(2.443531355));   /* c3+c1-c5 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp0, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp1, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp2, CONST_BITS+PASS1_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 12x6 sample block.
- *
- * 12-point FDCT in pass 1 (rows), 6-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_12x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Zero 2 bottom rows of output coefficient block. */
-  MEMZERO(&data[DCTSIZE*6], SIZEOF(DCTELEM) * DCTSIZE * 2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 6; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[11]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[10]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[9]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[8]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[7]);
-    tmp5 = GETJSAMPLE(elemptr[5]) + GETJSAMPLE(elemptr[6]);
-
-    tmp10 = tmp0 + tmp5;
-    tmp13 = tmp0 - tmp5;
-    tmp11 = tmp1 + tmp4;
-    tmp14 = tmp1 - tmp4;
-    tmp12 = tmp2 + tmp3;
-    tmp15 = tmp2 - tmp3;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[11]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[10]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[9]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[8]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[7]);
-    tmp5 = GETJSAMPLE(elemptr[5]) - GETJSAMPLE(elemptr[6]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 - 12 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[6] = (DCTELEM) ((tmp13 - tmp14 - tmp15) << PASS1_BITS);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.224744871)), /* c4 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp14 - tmp15 + MULTIPLY(tmp13 + tmp15, FIX(1.366025404)), /* c2 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp1 + tmp4, FIX_0_541196100);    /* c9 */
-    tmp14 = tmp10 + MULTIPLY(tmp1, FIX_0_765366865);   /* c3-c9 */
-    tmp15 = tmp10 - MULTIPLY(tmp4, FIX_1_847759065);   /* c3+c9 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.121971054));   /* c5 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.860918669));   /* c7 */
-    tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.580774953)) /* c5+c7-c1 */
-	    + MULTIPLY(tmp5, FIX(0.184591911));        /* c11 */
-    tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.184591911)); /* -c11 */
-    tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.339493912)) /* c1+c5-c11 */
-	    + MULTIPLY(tmp5, FIX(0.860918669));        /* c7 */
-    tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.725788011)) /* c1+c11-c7 */
-	    - MULTIPLY(tmp5, FIX(1.121971054));        /* c5 */
-    tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.306562965)) /* c3 */
-	    - MULTIPLY(tmp2 + tmp5, FIX_0_541196100);  /* c9 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/12)*(8/6) = 8/9, which we
-   * partially fold into the constant multipliers and final shifting:
-   * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12) * 16/9.
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5];
-    tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3];
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)),         /* 16/9 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(2.177324216)),                 /* c2 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */
-	      CONST_BITS+PASS1_BITS+1);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829));             /* c5 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)),    /* 16/9 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 10x5 sample block.
- *
- * 10-point FDCT in pass 1 (rows), 5-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_10x5 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Zero 3 bottom rows of output coefficient block. */
-  MEMZERO(&data[DCTSIZE*5], SIZEOF(DCTELEM) * DCTSIZE * 3);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 5; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[9]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[8]);
-    tmp12 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[7]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[6]);
-    tmp4 = GETJSAMPLE(elemptr[4]) + GETJSAMPLE(elemptr[5]);
-
-    tmp10 = tmp0 + tmp4;
-    tmp13 = tmp0 - tmp4;
-    tmp11 = tmp1 + tmp3;
-    tmp14 = tmp1 - tmp3;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[9]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[8]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[7]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[6]);
-    tmp4 = GETJSAMPLE(elemptr[4]) - GETJSAMPLE(elemptr[5]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 + tmp12 - 10 * CENTERJSAMPLE) << PASS1_BITS);
-    tmp12 += tmp12;
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.144122806)) - /* c4 */
-	      MULTIPLY(tmp11 - tmp12, FIX(0.437016024)),  /* c8 */
-	      CONST_BITS-PASS1_BITS);
-    tmp10 = MULTIPLY(tmp13 + tmp14, FIX(0.831253876));    /* c6 */
-    dataptr[2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.513743148)),  /* c2-c6 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.176250899)),  /* c2+c6 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = tmp0 + tmp4;
-    tmp11 = tmp1 - tmp3;
-    dataptr[5] = (DCTELEM) ((tmp10 - tmp11 - tmp2) << PASS1_BITS);
-    tmp2 <<= CONST_BITS;
-    dataptr[1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.396802247)) +          /* c1 */
-	      MULTIPLY(tmp1, FIX(1.260073511)) + tmp2 +   /* c3 */
-	      MULTIPLY(tmp3, FIX(0.642039522)) +          /* c7 */
-	      MULTIPLY(tmp4, FIX(0.221231742)),           /* c9 */
-	      CONST_BITS-PASS1_BITS);
-    tmp12 = MULTIPLY(tmp0 - tmp4, FIX(0.951056516)) -     /* (c3+c7)/2 */
-	    MULTIPLY(tmp1 + tmp3, FIX(0.587785252));      /* (c1-c9)/2 */
-    tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.309016994)) +   /* (c3-c7)/2 */
-	    (tmp11 << (CONST_BITS - 1)) - tmp2;
-    dataptr[3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS-PASS1_BITS);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/10)*(8/5) = 32/25, which we
-   * fold into the constant multipliers:
-   * 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10) * 32/25.
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*4];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*3];
-    tmp2 = dataptr[DCTSIZE*2];
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*4];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*3];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp2, FIX(1.28)),        /* 32/25 */
-	      CONST_BITS+PASS1_BITS);
-    tmp11 = MULTIPLY(tmp11, FIX(1.011928851));          /* (c2+c4)/2 */
-    tmp10 -= tmp2 << 2;
-    tmp10 = MULTIPLY(tmp10, FIX(0.452548340));          /* (c2-c4)/2 */
-    dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp1, FIX(1.064004961));    /* c3 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.657591230)), /* c1-c3 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.785601151)), /* c1+c3 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on an 8x4 sample block.
- *
- * 8-point FDCT in pass 1 (rows), 4-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_8x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Zero 4 bottom rows of output coefficient block. */
-  MEMZERO(&data[DCTSIZE*4], SIZEOF(DCTELEM) * DCTSIZE * 4);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We must also scale the output by 8/4 = 2, which we add here.
-   * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]);
-
-    tmp10 = tmp0 + tmp3;
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << (PASS1_BITS+1));
-    dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << (PASS1_BITS+1));
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-2);
-
-    dataptr[2] = (DCTELEM)
-      RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS-PASS1_BITS-1);
-    dataptr[6] = (DCTELEM)
-      RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS-PASS1_BITS-1);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);       /*  c3 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-2);
-
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);          /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);          /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);       /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);              /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);              /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);       /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);              /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);              /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS-PASS1_BITS-1);
-    dataptr[3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS-PASS1_BITS-1);
-    dataptr[5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS-1);
-    dataptr[7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS-PASS1_BITS-1);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * 4-point FDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3] + (ONE << (PASS1_BITS-1));
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2];
-
-    tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS);
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 6x3 sample block.
- *
- * 6-point FDCT in pass 1 (rows), 3-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_6x3 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2;
-  INT32 tmp10, tmp11, tmp12;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 3; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]);
-    tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]);
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << (PASS1_BITS+1));
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(1.224744871)),                 /* c2 */
-	      CONST_BITS-PASS1_BITS-1);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */
-	      CONST_BITS-PASS1_BITS-1);
-
-    /* Odd part */
-
-    tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)),     /* c5 */
-		    CONST_BITS-PASS1_BITS-1);
-
-    dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << (PASS1_BITS+1)));
-    dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << (PASS1_BITS+1));
-    dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << (PASS1_BITS+1)));
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/6)*(8/3) = 32/9, which we partially
-   * fold into the constant multipliers (other part was done in pass 1):
-   * 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6) * 16/9.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 6; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*2];
-    tmp1 = dataptr[DCTSIZE*1];
-
-    tmp2 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*2];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 + tmp1, FIX(1.777777778)),        /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(1.257078722)), /* c2 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2, FIX(2.177324216)),               /* c1 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 4x2 sample block.
- *
- * 4-point FDCT in pass 1 (rows), 2-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_4x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1;
-  INT32 tmp10, tmp11;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We must also scale the output by (8/4)*(8/2) = 2**3, which we add here.
-   * 4-point FDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 2; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+3));
-    dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+3));
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-4);
-
-    dataptr[1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS-PASS1_BITS-3);
-    dataptr[3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS-PASS1_BITS-3);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = dataptr[DCTSIZE*0] + (ONE << (PASS1_BITS-1));
-    tmp1 = dataptr[DCTSIZE*1];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp0 + tmp1, PASS1_BITS);
-
-    /* Odd part */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0 - tmp1, PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 2x1 sample block.
- *
- * 2-point FDCT in pass 1 (rows), 1-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_2x1 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1;
-  JSAMPROW elemptr;
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  elemptr = sample_data[0] + start_col;
-
-  tmp0 = GETJSAMPLE(elemptr[0]);
-  tmp1 = GETJSAMPLE(elemptr[1]);
-
-  /* We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/2)*(8/1) = 2**5.
-   */
-
-  /* Even part */
-
-  /* Apply unsigned->signed conversion */
-  data[0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5);
-
-  /* Odd part */
-
-  data[1] = (DCTELEM) ((tmp0 - tmp1) << 5);
-}
-
-
-/*
- * Perform the forward DCT on an 8x16 sample block.
- *
- * 8-point FDCT in pass 1 (rows), 16-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_8x16 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17;
-  INT32 z1;
-  DCTELEM workspace[DCTSIZE2];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) + GETJSAMPLE(elemptr[4]);
-
-    tmp10 = tmp0 + tmp3;
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[7]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[6]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[5]);
-    tmp3 = GETJSAMPLE(elemptr[3]) - GETJSAMPLE(elemptr[4]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) ((tmp10 + tmp11 - 8 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);   /* c6 */
-    dataptr[2] = (DCTELEM)
-      DESCALE(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM)
-      DESCALE(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);   /*  c3 */
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);      /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);      /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);   /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);          /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);          /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);   /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);          /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);          /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS);
-    dataptr[7] = (DCTELEM) DESCALE(tmp3, CONST_BITS-PASS1_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == DCTSIZE * 2)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by 8/16 = 1/2.
-   * 16-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*3];
-    tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*2];
-    tmp6 = dataptr[DCTSIZE*6] + wsptr[DCTSIZE*1];
-    tmp7 = dataptr[DCTSIZE*7] + wsptr[DCTSIZE*0];
-
-    tmp10 = tmp0 + tmp7;
-    tmp14 = tmp0 - tmp7;
-    tmp11 = tmp1 + tmp6;
-    tmp15 = tmp1 - tmp6;
-    tmp12 = tmp2 + tmp5;
-    tmp16 = tmp2 - tmp5;
-    tmp13 = tmp3 + tmp4;
-    tmp17 = tmp3 - tmp4;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*4];
-    tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*3];
-    tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*2];
-    tmp6 = dataptr[DCTSIZE*6] - wsptr[DCTSIZE*1];
-    tmp7 = dataptr[DCTSIZE*7] - wsptr[DCTSIZE*0];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 + tmp12 + tmp13, PASS1_BITS+1);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(1.306562965)) + /* c4[16] = c2[8] */
-	      MULTIPLY(tmp11 - tmp12, FIX_0_541196100),   /* c12[16] = c6[8] */
-	      CONST_BITS+PASS1_BITS+1);
-
-    tmp10 = MULTIPLY(tmp17 - tmp15, FIX(0.275899379)) +   /* c14[16] = c7[8] */
-	    MULTIPLY(tmp14 - tmp16, FIX(1.387039845));    /* c2[16] = c1[8] */
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp15, FIX(1.451774982))   /* c6+c14 */
-	      + MULTIPLY(tmp16, FIX(2.172734804)),        /* c2+c10 */
-	      CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(0.211164243))   /* c2-c6 */
-	      - MULTIPLY(tmp17, FIX(1.061594338)),        /* c10+c14 */
-	      CONST_BITS+PASS1_BITS+1);
-
-    /* Odd part */
-
-    tmp11 = MULTIPLY(tmp0 + tmp1, FIX(1.353318001)) +         /* c3 */
-	    MULTIPLY(tmp6 - tmp7, FIX(0.410524528));          /* c13 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(1.247225013)) +         /* c5 */
-	    MULTIPLY(tmp5 + tmp7, FIX(0.666655658));          /* c11 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(1.093201867)) +         /* c7 */
-	    MULTIPLY(tmp4 - tmp7, FIX(0.897167586));          /* c9 */
-    tmp14 = MULTIPLY(tmp1 + tmp2, FIX(0.138617169)) +         /* c15 */
-	    MULTIPLY(tmp6 - tmp5, FIX(1.407403738));          /* c1 */
-    tmp15 = MULTIPLY(tmp1 + tmp3, - FIX(0.666655658)) +       /* -c11 */
-	    MULTIPLY(tmp4 + tmp6, - FIX(1.247225013));        /* -c5 */
-    tmp16 = MULTIPLY(tmp2 + tmp3, - FIX(1.353318001)) +       /* -c3 */
-	    MULTIPLY(tmp5 - tmp4, FIX(0.410524528));          /* c13 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(tmp0, FIX(2.286341144)) +                /* c7+c5+c3-c1 */
-	    MULTIPLY(tmp7, FIX(0.779653625));                 /* c15+c13-c11+c9 */
-    tmp11 += tmp14 + tmp15 + MULTIPLY(tmp1, FIX(0.071888074)) /* c9-c3-c15+c11 */
-	     - MULTIPLY(tmp6, FIX(1.663905119));              /* c7+c13+c1-c5 */
-    tmp12 += tmp14 + tmp16 - MULTIPLY(tmp2, FIX(1.125726048)) /* c7+c5+c15-c3 */
-	     + MULTIPLY(tmp5, FIX(1.227391138));              /* c9-c11+c1-c13 */
-    tmp13 += tmp15 + tmp16 + MULTIPLY(tmp3, FIX(1.065388962)) /* c15+c3+c11-c7 */
-	     + MULTIPLY(tmp4, FIX(2.167985692));              /* c1+c13+c5-c9 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS+1);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS+1);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 7x14 sample block.
- *
- * 7-point FDCT in pass 1 (rows), 14-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_7x14 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 z1, z2, z3;
-  DCTELEM workspace[8*6];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 7-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/14).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[6]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[5]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[4]);
-    tmp3 = GETJSAMPLE(elemptr[3]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[6]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[5]);
-    tmp12 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[4]);
-
-    z1 = tmp0 + tmp2;
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((z1 + tmp1 + tmp3 - 7 * CENTERJSAMPLE) << PASS1_BITS);
-    tmp3 += tmp3;
-    z1 -= tmp3;
-    z1 -= tmp3;
-    z1 = MULTIPLY(z1, FIX(0.353553391));                /* (c2+c6-c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp2, FIX(0.920609002));       /* (c2+c4-c6)/2 */
-    z3 = MULTIPLY(tmp1 - tmp2, FIX(0.314692123));       /* c6 */
-    dataptr[2] = (DCTELEM) DESCALE(z1 + z2 + z3, CONST_BITS-PASS1_BITS);
-    z1 -= z2;
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.881747734));       /* c4 */
-    dataptr[4] = (DCTELEM)
-      DESCALE(z2 + z3 - MULTIPLY(tmp1 - tmp3, FIX(0.707106781)), /* c2+c6-c4 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[6] = (DCTELEM) DESCALE(z1 + z2, CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp1 = MULTIPLY(tmp10 + tmp11, FIX(0.935414347));   /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(tmp10 - tmp11, FIX(0.170262339));   /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(tmp11 + tmp12, - FIX(1.378756276)); /* -c1 */
-    tmp1 += tmp2;
-    tmp3 = MULTIPLY(tmp10 + tmp12, FIX(0.613604268));   /* c5 */
-    tmp0 += tmp3;
-    tmp2 += tmp3 + MULTIPLY(tmp12, FIX(1.870828693));   /* c3+c1-c5 */
-
-    dataptr[1] = (DCTELEM) DESCALE(tmp0, CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM) DESCALE(tmp1, CONST_BITS-PASS1_BITS);
-    dataptr[5] = (DCTELEM) DESCALE(tmp2, CONST_BITS-PASS1_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 14)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/7)*(8/14) = 32/49, which we
-   * fold into the constant multipliers:
-   * 14-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/28) * 32/49.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 7; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*3];
-    tmp13 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*2];
-    tmp4 = dataptr[DCTSIZE*4] + wsptr[DCTSIZE*1];
-    tmp5 = dataptr[DCTSIZE*5] + wsptr[DCTSIZE*0];
-    tmp6 = dataptr[DCTSIZE*6] + dataptr[DCTSIZE*7];
-
-    tmp10 = tmp0 + tmp6;
-    tmp14 = tmp0 - tmp6;
-    tmp11 = tmp1 + tmp5;
-    tmp15 = tmp1 - tmp5;
-    tmp12 = tmp2 + tmp4;
-    tmp16 = tmp2 - tmp4;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*3];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*2];
-    tmp4 = dataptr[DCTSIZE*4] - wsptr[DCTSIZE*1];
-    tmp5 = dataptr[DCTSIZE*5] - wsptr[DCTSIZE*0];
-    tmp6 = dataptr[DCTSIZE*6] - dataptr[DCTSIZE*7];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12 + tmp13,
-		       FIX(0.653061224)),                 /* 32/49 */
-	      CONST_BITS+PASS1_BITS);
-    tmp13 += tmp13;
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp13, FIX(0.832106052)) + /* c4 */
-	      MULTIPLY(tmp11 - tmp13, FIX(0.205513223)) - /* c12 */
-	      MULTIPLY(tmp12 - tmp13, FIX(0.575835255)),  /* c8 */
-	      CONST_BITS+PASS1_BITS);
-
-    tmp10 = MULTIPLY(tmp14 + tmp15, FIX(0.722074570));    /* c6 */
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp14, FIX(0.178337691))   /* c2-c6 */
-	      + MULTIPLY(tmp16, FIX(0.400721155)),        /* c10 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp15, FIX(1.122795725))   /* c6+c10 */
-	      - MULTIPLY(tmp16, FIX(0.900412262)),        /* c2 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = tmp1 + tmp2;
-    tmp11 = tmp5 - tmp4;
-    dataptr[DCTSIZE*7] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp10 + tmp3 - tmp11 - tmp6,
-		       FIX(0.653061224)),                 /* 32/49 */
-	      CONST_BITS+PASS1_BITS);
-    tmp3  = MULTIPLY(tmp3 , FIX(0.653061224));            /* 32/49 */
-    tmp10 = MULTIPLY(tmp10, - FIX(0.103406812));          /* -c13 */
-    tmp11 = MULTIPLY(tmp11, FIX(0.917760839));            /* c1 */
-    tmp10 += tmp11 - tmp3;
-    tmp11 = MULTIPLY(tmp0 + tmp2, FIX(0.782007410)) +     /* c5 */
-	    MULTIPLY(tmp4 + tmp6, FIX(0.491367823));      /* c9 */
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp10 + tmp11 - MULTIPLY(tmp2, FIX(1.550341076)) /* c3+c5-c13 */
-	      + MULTIPLY(tmp4, FIX(0.731428202)),         /* c1+c11-c9 */
-	      CONST_BITS+PASS1_BITS);
-    tmp12 = MULTIPLY(tmp0 + tmp1, FIX(0.871740478)) +     /* c3 */
-	    MULTIPLY(tmp5 - tmp6, FIX(0.305035186));      /* c11 */
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(tmp10 + tmp12 - MULTIPLY(tmp1, FIX(0.276965844)) /* c3-c9-c13 */
-	      - MULTIPLY(tmp5, FIX(2.004803435)),         /* c1+c5+c11 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp11 + tmp12 + tmp3
-	      - MULTIPLY(tmp0, FIX(0.735987049))          /* c3+c5-c1 */
-	      - MULTIPLY(tmp6, FIX(0.082925825)),         /* c9-c11-c13 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 6x12 sample block.
- *
- * 6-point FDCT in pass 1 (rows), 12-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_6x12 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  DCTELEM workspace[8*4];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[5]);
-    tmp11 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) + GETJSAMPLE(elemptr[3]);
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[5]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[4]);
-    tmp2 = GETJSAMPLE(elemptr[2]) - GETJSAMPLE(elemptr[3]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp11 - 6 * CENTERJSAMPLE) << PASS1_BITS);
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(1.224744871)),                 /* c2 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(0.707106781)), /* c4 */
-	      CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = DESCALE(MULTIPLY(tmp0 + tmp2, FIX(0.366025404)),     /* c5 */
-		    CONST_BITS-PASS1_BITS);
-
-    dataptr[1] = (DCTELEM) (tmp10 + ((tmp0 + tmp1) << PASS1_BITS));
-    dataptr[3] = (DCTELEM) ((tmp0 - tmp1 - tmp2) << PASS1_BITS);
-    dataptr[5] = (DCTELEM) (tmp10 + ((tmp2 - tmp1) << PASS1_BITS));
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 12)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/6)*(8/12) = 8/9, which we
-   * fold into the constant multipliers:
-   * 12-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/24) * 8/9.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*3];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*2];
-    tmp2 = dataptr[DCTSIZE*2] + wsptr[DCTSIZE*1];
-    tmp3 = dataptr[DCTSIZE*3] + wsptr[DCTSIZE*0];
-    tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*7];
-    tmp5 = dataptr[DCTSIZE*5] + dataptr[DCTSIZE*6];
-
-    tmp10 = tmp0 + tmp5;
-    tmp13 = tmp0 - tmp5;
-    tmp11 = tmp1 + tmp4;
-    tmp14 = tmp1 - tmp4;
-    tmp12 = tmp2 + tmp3;
-    tmp15 = tmp2 - tmp3;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*3];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*2];
-    tmp2 = dataptr[DCTSIZE*2] - wsptr[DCTSIZE*1];
-    tmp3 = dataptr[DCTSIZE*3] - wsptr[DCTSIZE*0];
-    tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*7];
-    tmp5 = dataptr[DCTSIZE*5] - dataptr[DCTSIZE*6];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(0.888888889)), /* 8/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp13 - tmp14 - tmp15, FIX(0.888888889)), /* 8/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.088662108)),         /* c4 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp14 - tmp15, FIX(0.888888889)) +        /* 8/9 */
-	      MULTIPLY(tmp13 + tmp15, FIX(1.214244803)),         /* c2 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp1 + tmp4, FIX(0.481063200));   /* c9 */
-    tmp14 = tmp10 + MULTIPLY(tmp1, FIX(0.680326102));  /* c3-c9 */
-    tmp15 = tmp10 - MULTIPLY(tmp4, FIX(1.642452502));  /* c3+c9 */
-    tmp12 = MULTIPLY(tmp0 + tmp2, FIX(0.997307603));   /* c5 */
-    tmp13 = MULTIPLY(tmp0 + tmp3, FIX(0.765261039));   /* c7 */
-    tmp10 = tmp12 + tmp13 + tmp14 - MULTIPLY(tmp0, FIX(0.516244403)) /* c5+c7-c1 */
-	    + MULTIPLY(tmp5, FIX(0.164081699));        /* c11 */
-    tmp11 = MULTIPLY(tmp2 + tmp3, - FIX(0.164081699)); /* -c11 */
-    tmp12 += tmp11 - tmp15 - MULTIPLY(tmp2, FIX(2.079550144)) /* c1+c5-c11 */
-	    + MULTIPLY(tmp5, FIX(0.765261039));        /* c7 */
-    tmp13 += tmp11 - tmp14 + MULTIPLY(tmp3, FIX(0.645144899)) /* c1+c11-c7 */
-	    - MULTIPLY(tmp5, FIX(0.997307603));        /* c5 */
-    tmp11 = tmp15 + MULTIPLY(tmp0 - tmp3, FIX(1.161389302)) /* c3 */
-	    - MULTIPLY(tmp2 + tmp5, FIX(0.481063200)); /* c9 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp10, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp11, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp12, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp13, CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 5x10 sample block.
- *
- * 5-point FDCT in pass 1 (rows), 10-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_5x10 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4;
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  DCTELEM workspace[8*2];
-  DCTELEM *dataptr;
-  DCTELEM *wsptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 5-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/10).
-   */
-
-  dataptr = data;
-  ctr = 0;
-  for (;;) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[4]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[3]);
-    tmp2 = GETJSAMPLE(elemptr[2]);
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-
-    tmp0 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[4]);
-    tmp1 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[3]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp10 + tmp2 - 5 * CENTERJSAMPLE) << PASS1_BITS);
-    tmp11 = MULTIPLY(tmp11, FIX(0.790569415));          /* (c2+c4)/2 */
-    tmp10 -= tmp2 << 2;
-    tmp10 = MULTIPLY(tmp10, FIX(0.353553391));          /* (c2-c4)/2 */
-    dataptr[2] = (DCTELEM) DESCALE(tmp11 + tmp10, CONST_BITS-PASS1_BITS);
-    dataptr[4] = (DCTELEM) DESCALE(tmp11 - tmp10, CONST_BITS-PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp1, FIX(0.831253876));    /* c3 */
-
-    dataptr[1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0, FIX(0.513743148)), /* c1-c3 */
-	      CONST_BITS-PASS1_BITS);
-    dataptr[3] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp1, FIX(2.176250899)), /* c1+c3 */
-	      CONST_BITS-PASS1_BITS);
-
-    ctr++;
-
-    if (ctr != DCTSIZE) {
-      if (ctr == 10)
-	break;			/* Done. */
-      dataptr += DCTSIZE;	/* advance pointer to next row */
-    } else
-      dataptr = workspace;	/* switch pointer to extended workspace */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/5)*(8/10) = 32/25, which we
-   * fold into the constant multipliers:
-   * 10-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/20) * 32/25.
-   */
-
-  dataptr = data;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 5; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + wsptr[DCTSIZE*1];
-    tmp1 = dataptr[DCTSIZE*1] + wsptr[DCTSIZE*0];
-    tmp12 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*7];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*6];
-    tmp4 = dataptr[DCTSIZE*4] + dataptr[DCTSIZE*5];
-
-    tmp10 = tmp0 + tmp4;
-    tmp13 = tmp0 - tmp4;
-    tmp11 = tmp1 + tmp3;
-    tmp14 = tmp1 - tmp3;
-
-    tmp0 = dataptr[DCTSIZE*0] - wsptr[DCTSIZE*1];
-    tmp1 = dataptr[DCTSIZE*1] - wsptr[DCTSIZE*0];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*7];
-    tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*6];
-    tmp4 = dataptr[DCTSIZE*4] - dataptr[DCTSIZE*5];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11 + tmp12, FIX(1.28)), /* 32/25 */
-	      CONST_BITS+PASS1_BITS);
-    tmp12 += tmp12;
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp12, FIX(1.464477191)) - /* c4 */
-	      MULTIPLY(tmp11 - tmp12, FIX(0.559380511)),  /* c8 */
-	      CONST_BITS+PASS1_BITS);
-    tmp10 = MULTIPLY(tmp13 + tmp14, FIX(1.064004961));    /* c6 */
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp13, FIX(0.657591230)),  /* c2-c6 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      DESCALE(tmp10 - MULTIPLY(tmp14, FIX(2.785601151)),  /* c2+c6 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = tmp0 + tmp4;
-    tmp11 = tmp1 - tmp3;
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp2, FIX(1.28)),  /* 32/25 */
-	      CONST_BITS+PASS1_BITS);
-    tmp2 = MULTIPLY(tmp2, FIX(1.28));                     /* 32/25 */
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0, FIX(1.787906876)) +          /* c1 */
-	      MULTIPLY(tmp1, FIX(1.612894094)) + tmp2 +   /* c3 */
-	      MULTIPLY(tmp3, FIX(0.821810588)) +          /* c7 */
-	      MULTIPLY(tmp4, FIX(0.283176630)),           /* c9 */
-	      CONST_BITS+PASS1_BITS);
-    tmp12 = MULTIPLY(tmp0 - tmp4, FIX(1.217352341)) -     /* (c3+c7)/2 */
-	    MULTIPLY(tmp1 + tmp3, FIX(0.752365123));      /* (c1-c9)/2 */
-    tmp13 = MULTIPLY(tmp10 + tmp11, FIX(0.395541753)) +   /* (c3-c7)/2 */
-	    MULTIPLY(tmp11, FIX(0.64)) - tmp2;            /* 16/25 */
-    dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp12 + tmp13, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp12 - tmp13, CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-    wsptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 4x8 sample block.
- *
- * 4-point FDCT in pass 1 (rows), 8-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_4x8 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We must also scale the output by 8/4 = 2, which we add here.
-   * 4-point FDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[3]);
-    tmp1 = GETJSAMPLE(elemptr[1]) + GETJSAMPLE(elemptr[2]);
-
-    tmp10 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[3]);
-    tmp11 = GETJSAMPLE(elemptr[1]) - GETJSAMPLE(elemptr[2]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 - 4 * CENTERJSAMPLE) << (PASS1_BITS+1));
-    dataptr[2] = (DCTELEM) ((tmp0 - tmp1) << (PASS1_BITS+1));
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-2);
-
-    dataptr[1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS-PASS1_BITS-1);
-    dataptr[3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS-PASS1_BITS-1);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * 8-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    /* Even part per LL&M figure 1 --- note that published figure is faulty;
-     * rotator "c1" should be "c6".
-     */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
-
-    /* Add fudge factor here for final descale. */
-    tmp10 = tmp0 + tmp3 + (ONE << (PASS1_BITS-1));
-    tmp12 = tmp0 - tmp3;
-    tmp11 = tmp1 + tmp2;
-    tmp13 = tmp1 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
-    tmp3 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) RIGHT_SHIFT(tmp10 + tmp11, PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM) RIGHT_SHIFT(tmp10 - tmp11, PASS1_BITS);
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      RIGHT_SHIFT(z1 + MULTIPLY(tmp12, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*6] = (DCTELEM)
-      RIGHT_SHIFT(z1 - MULTIPLY(tmp13, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS+PASS1_BITS);
-
-    /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
-     * i0..i3 in the paper are tmp0..tmp3 here.
-     */
-
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(tmp12 + tmp13, FIX_1_175875602);       /*  c3 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS+PASS1_BITS-1);
-
-    tmp12 = MULTIPLY(tmp12, - FIX_0_390180644);          /* -c3+c5 */
-    tmp13 = MULTIPLY(tmp13, - FIX_1_961570560);          /* -c3-c5 */
-    tmp12 += z1;
-    tmp13 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223);       /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_1_501321110);              /*  c1+c3-c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_0_298631336);              /* -c1+c3+c5-c7 */
-    tmp0 += z1 + tmp12;
-    tmp3 += z1 + tmp13;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447);       /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_3_072711026);              /*  c1+c3+c5-c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_2_053119869);              /*  c1+c3-c5+c7 */
-    tmp1 += z1 + tmp13;
-    tmp2 += z1 + tmp12;
-
-    dataptr[DCTSIZE*1] = (DCTELEM) RIGHT_SHIFT(tmp0, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM) RIGHT_SHIFT(tmp1, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM) RIGHT_SHIFT(tmp2, CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*7] = (DCTELEM) RIGHT_SHIFT(tmp3, CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 3x6 sample block.
- *
- * 3-point FDCT in pass 1 (rows), 6-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_3x6 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1, tmp2;
-  INT32 tmp10, tmp11, tmp12;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * We scale the results further by 2 as part of output adaption
-   * scaling for different DCT size.
-   * 3-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/6).
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 6; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]) + GETJSAMPLE(elemptr[2]);
-    tmp1 = GETJSAMPLE(elemptr[1]);
-
-    tmp2 = GETJSAMPLE(elemptr[0]) - GETJSAMPLE(elemptr[2]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM)
-      ((tmp0 + tmp1 - 3 * CENTERJSAMPLE) << (PASS1_BITS+1));
-    dataptr[2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp1, FIX(0.707106781)), /* c2 */
-	      CONST_BITS-PASS1_BITS-1);
-
-    /* Odd part */
-
-    dataptr[1] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp2, FIX(1.224744871)),               /* c1 */
-	      CONST_BITS-PASS1_BITS-1);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We remove the PASS1_BITS scaling, but leave the results scaled up
-   * by an overall factor of 8.
-   * We must also scale the output by (8/6)*(8/3) = 32/9, which we partially
-   * fold into the constant multipliers (other part was done in pass 1):
-   * 6-point FDCT kernel, cK represents sqrt(2) * cos(K*pi/12) * 16/9.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 3; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*5];
-    tmp11 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*3];
-
-    tmp10 = tmp0 + tmp2;
-    tmp12 = tmp0 - tmp2;
-
-    tmp0 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*5];
-    tmp1 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*4];
-    tmp2 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*3];
-
-    dataptr[DCTSIZE*0] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 + tmp11, FIX(1.777777778)),         /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*2] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp12, FIX(2.177324216)),                 /* c2 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*4] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp10 - tmp11 - tmp11, FIX(1.257078722)), /* c4 */
-	      CONST_BITS+PASS1_BITS);
-
-    /* Odd part */
-
-    tmp10 = MULTIPLY(tmp0 + tmp2, FIX(0.650711829));             /* c5 */
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp0 + tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      DESCALE(MULTIPLY(tmp0 - tmp1 - tmp2, FIX(1.777777778)),    /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-    dataptr[DCTSIZE*5] = (DCTELEM)
-      DESCALE(tmp10 + MULTIPLY(tmp2 - tmp1, FIX(1.777777778)),   /* 16/9 */
-	      CONST_BITS+PASS1_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 2x4 sample block.
- *
- * 2-point FDCT in pass 1 (rows), 4-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_2x4 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1;
-  INT32 tmp10, tmp11;
-  DCTELEM *dataptr;
-  JSAMPROW elemptr;
-  int ctr;
-  SHIFT_TEMPS
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: process rows.
-   * Note results are scaled up by sqrt(8) compared to a true DCT.
-   * We must also scale the output by (8/2)*(8/4) = 2**3, which we add here.
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 4; ctr++) {
-    elemptr = sample_data[ctr] + start_col;
-
-    /* Even part */
-
-    tmp0 = GETJSAMPLE(elemptr[0]);
-    tmp1 = GETJSAMPLE(elemptr[1]);
-
-    /* Apply unsigned->signed conversion */
-    dataptr[0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 3);
-
-    /* Odd part */
-
-    dataptr[1] = (DCTELEM) ((tmp0 - tmp1) << 3);
-
-    dataptr += DCTSIZE;		/* advance pointer to next row */
-  }
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * 4-point FDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point FDCT].
-   */
-
-  dataptr = data;
-  for (ctr = 0; ctr < 2; ctr++) {
-    /* Even part */
-
-    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*3];
-    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*2];
-
-    tmp10 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*3];
-    tmp11 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*2];
-
-    dataptr[DCTSIZE*0] = (DCTELEM) (tmp0 + tmp1);
-    dataptr[DCTSIZE*2] = (DCTELEM) (tmp0 - tmp1);
-
-    /* Odd part */
-
-    tmp0 = MULTIPLY(tmp10 + tmp11, FIX_0_541196100);       /* c6 */
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-1);
-
-    dataptr[DCTSIZE*1] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 + MULTIPLY(tmp10, FIX_0_765366865), /* c2-c6 */
-		  CONST_BITS);
-    dataptr[DCTSIZE*3] = (DCTELEM)
-      RIGHT_SHIFT(tmp0 - MULTIPLY(tmp11, FIX_1_847759065), /* c2+c6 */
-		  CONST_BITS);
-
-    dataptr++;			/* advance pointer to next column */
-  }
-}
-
-
-/*
- * Perform the forward DCT on a 1x2 sample block.
- *
- * 1-point FDCT in pass 1 (rows), 2-point in pass 2 (columns).
- */
-
-GLOBAL(void)
-jpeg_fdct_1x2 (DCTELEM * data, JSAMPARRAY sample_data, JDIMENSION start_col)
-{
-  INT32 tmp0, tmp1;
-
-  /* Pre-zero output coefficient block. */
-  MEMZERO(data, SIZEOF(DCTELEM) * DCTSIZE2);
-
-  /* Pass 1: empty. */
-
-  /* Pass 2: process columns.
-   * We leave the results scaled up by an overall factor of 8.
-   * We must also scale the output by (8/1)*(8/2) = 2**5.
-   */
-
-  /* Even part */
-
-  tmp0 = GETJSAMPLE(sample_data[0][start_col]);
-  tmp1 = GETJSAMPLE(sample_data[1][start_col]);
-
-  /* Apply unsigned->signed conversion */
-  data[DCTSIZE*0] = (DCTELEM) ((tmp0 + tmp1 - 2 * CENTERJSAMPLE) << 5);
-
-  /* Odd part */
-
-  data[DCTSIZE*1] = (DCTELEM) ((tmp0 - tmp1) << 5);
-}
-
-#endif /* DCT_SCALING_SUPPORTED */
-#endif /* DCT_ISLOW_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jidctflt.c
+++ /dev/null
@@ -1,235 +1,0 @@
-/*
- * jidctflt.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * Modified 2010 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a floating-point implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * This implementation should be more accurate than either of the integer
- * IDCT implementations.  However, it may not give the same results on all
- * machines because of differences in roundoff behavior.  Speed will depend
- * on the hardware's floating point capacity.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with a fixed-point
- * implementation, accuracy is lost due to imprecise representation of the
- * scaled quantization values.  However, that problem does not arise if
- * we use floating point arithmetic.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_FLOAT_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce a float result.
- */
-
-#define DEQUANTIZE(coef,quantval)  (((FAST_FLOAT) (coef)) * (quantval))
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- */
-
-GLOBAL(void)
-jpeg_idct_float (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
-  FAST_FLOAT z5, z10, z11, z12, z13;
-  JCOEFPTR inptr;
-  FLOAT_MULT_TYPE * quantptr;
-  FAST_FLOAT * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = cinfo->sample_range_limit;
-  int ctr;
-  FAST_FLOAT workspace[DCTSIZE2]; /* buffers data between passes */
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (FLOAT_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-    
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      FAST_FLOAT dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-      
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-      
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-    
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = tmp0 + tmp2;	/* phase 3 */
-    tmp11 = tmp0 - tmp2;
-
-    tmp13 = tmp1 + tmp3;	/* phases 5-3 */
-    tmp12 = (tmp1 - tmp3) * ((FAST_FLOAT) 1.414213562) - tmp13; /* 2*c4 */
-
-    tmp0 = tmp10 + tmp13;	/* phase 2 */
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-    
-    /* Odd part */
-
-    tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    z13 = tmp6 + tmp5;		/* phase 6 */
-    z10 = tmp6 - tmp5;
-    z11 = tmp4 + tmp7;
-    z12 = tmp4 - tmp7;
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562); /* 2*c4 */
-
-    z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
-    tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */
-    tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 - tmp5;
-
-    wsptr[DCTSIZE*0] = tmp0 + tmp7;
-    wsptr[DCTSIZE*7] = tmp0 - tmp7;
-    wsptr[DCTSIZE*1] = tmp1 + tmp6;
-    wsptr[DCTSIZE*6] = tmp1 - tmp6;
-    wsptr[DCTSIZE*2] = tmp2 + tmp5;
-    wsptr[DCTSIZE*5] = tmp2 - tmp5;
-    wsptr[DCTSIZE*3] = tmp3 + tmp4;
-    wsptr[DCTSIZE*4] = tmp3 - tmp4;
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-  
-  /* Pass 2: process rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * And testing floats for zero is relatively expensive, so we don't bother.
-     */
-    
-    /* Even part */
-
-    /* Apply signed->unsigned and prepare float->int conversion */
-    z5 = wsptr[0] + ((FAST_FLOAT) CENTERJSAMPLE + (FAST_FLOAT) 0.5);
-    tmp10 = z5 + wsptr[4];
-    tmp11 = z5 - wsptr[4];
-
-    tmp13 = wsptr[2] + wsptr[6];
-    tmp12 = (wsptr[2] - wsptr[6]) * ((FAST_FLOAT) 1.414213562) - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z13 = wsptr[5] + wsptr[3];
-    z10 = wsptr[5] - wsptr[3];
-    z11 = wsptr[1] + wsptr[7];
-    z12 = wsptr[1] - wsptr[7];
-
-    tmp7 = z11 + z13;
-    tmp11 = (z11 - z13) * ((FAST_FLOAT) 1.414213562);
-
-    z5 = (z10 + z12) * ((FAST_FLOAT) 1.847759065); /* 2*c2 */
-    tmp10 = z5 - z12 * ((FAST_FLOAT) 1.082392200); /* 2*(c2-c6) */
-    tmp12 = z5 - z10 * ((FAST_FLOAT) 2.613125930); /* 2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 - tmp5;
-
-    /* Final output stage: float->int conversion and range-limit */
-
-    outptr[0] = range_limit[((int) (tmp0 + tmp7)) & RANGE_MASK];
-    outptr[7] = range_limit[((int) (tmp0 - tmp7)) & RANGE_MASK];
-    outptr[1] = range_limit[((int) (tmp1 + tmp6)) & RANGE_MASK];
-    outptr[6] = range_limit[((int) (tmp1 - tmp6)) & RANGE_MASK];
-    outptr[2] = range_limit[((int) (tmp2 + tmp5)) & RANGE_MASK];
-    outptr[5] = range_limit[((int) (tmp2 - tmp5)) & RANGE_MASK];
-    outptr[3] = range_limit[((int) (tmp3 + tmp4)) & RANGE_MASK];
-    outptr[4] = range_limit[((int) (tmp3 - tmp4)) & RANGE_MASK];
-    
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#endif /* DCT_FLOAT_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jidctfst.c
+++ /dev/null
@@ -1,368 +1,0 @@
-/*
- * jidctfst.c
- *
- * Copyright (C) 1994-1998, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a fast, not so accurate integer implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on Arai, Agui, and Nakajima's algorithm for
- * scaled DCT.  Their original paper (Trans. IEICE E-71(11):1095) is in
- * Japanese, but the algorithm is described in the Pennebaker & Mitchell
- * JPEG textbook (see REFERENCES section in file README).  The following code
- * is based directly on figure 4-8 in P&M.
- * While an 8-point DCT cannot be done in less than 11 multiplies, it is
- * possible to arrange the computation so that many of the multiplies are
- * simple scalings of the final outputs.  These multiplies can then be
- * folded into the multiplications or divisions by the JPEG quantization
- * table entries.  The AA&N method leaves only 5 multiplies and 29 adds
- * to be done in the DCT itself.
- * The primary disadvantage of this method is that with fixed-point math,
- * accuracy is lost due to imprecise representation of the scaled
- * quantization values.  The smaller the quantization table entry, the less
- * precise the scaled value, so this implementation does worse with high-
- * quality-setting files than with low-quality ones.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_IFAST_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCTs. /* deliberate syntax err */
-#endif
-
-
-/* Scaling decisions are generally the same as in the LL&M algorithm;
- * see jidctint.c for more details.  However, we choose to descale
- * (right shift) multiplication products as soon as they are formed,
- * rather than carrying additional fractional bits into subsequent additions.
- * This compromises accuracy slightly, but it lets us save a few shifts.
- * More importantly, 16-bit arithmetic is then adequate (for 8-bit samples)
- * everywhere except in the multiplications proper; this saves a good deal
- * of work on 16-bit-int machines.
- *
- * The dequantized coefficients are not integers because the AA&N scaling
- * factors have been incorporated.  We represent them scaled up by PASS1_BITS,
- * so that the first and second IDCT rounds have the same input scaling.
- * For 8-bit JSAMPLEs, we choose IFAST_SCALE_BITS = PASS1_BITS so as to
- * avoid a descaling shift; this compromises accuracy rather drastically
- * for small quantization table entries, but it saves a lot of shifts.
- * For 12-bit JSAMPLEs, there's no hope of using 16x16 multiplies anyway,
- * so we use a much larger scaling factor to preserve accuracy.
- *
- * A final compromise is to represent the multiplicative constants to only
- * 8 fractional bits, rather than 13.  This saves some shifting work on some
- * machines, and may also reduce the cost of multiplication (since there
- * are fewer one-bits in the constants).
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  8
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  8
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 8
-#define FIX_1_082392200  ((INT32)  277)		/* FIX(1.082392200) */
-#define FIX_1_414213562  ((INT32)  362)		/* FIX(1.414213562) */
-#define FIX_1_847759065  ((INT32)  473)		/* FIX(1.847759065) */
-#define FIX_2_613125930  ((INT32)  669)		/* FIX(2.613125930) */
-#else
-#define FIX_1_082392200  FIX(1.082392200)
-#define FIX_1_414213562  FIX(1.414213562)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_2_613125930  FIX(2.613125930)
-#endif
-
-
-/* We can gain a little more speed, with a further compromise in accuracy,
- * by omitting the addition in a descaling shift.  This yields an incorrectly
- * rounded result half the time...
- */
-
-#ifndef USE_ACCURATE_ROUNDING
-#undef DESCALE
-#define DESCALE(x,n)  RIGHT_SHIFT(x, n)
-#endif
-
-
-/* Multiply a DCTELEM variable by an INT32 constant, and immediately
- * descale to yield a DCTELEM result.
- */
-
-#define MULTIPLY(var,const)  ((DCTELEM) DESCALE((var) * (const), CONST_BITS))
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce a DCTELEM result.  For 8-bit data a 16x16->16
- * multiplication will do.  For 12-bit data, the multiplier table is
- * declared INT32, so a 32-bit multiply will be used.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define DEQUANTIZE(coef,quantval)  (((IFAST_MULT_TYPE) (coef)) * (quantval))
-#else
-#define DEQUANTIZE(coef,quantval)  \
-	DESCALE((coef)*(quantval), IFAST_SCALE_BITS-PASS1_BITS)
-#endif
-
-
-/* Like DESCALE, but applies to a DCTELEM and produces an int.
- * We assume that int right shift is unsigned if INT32 right shift is.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define ISHIFT_TEMPS	DCTELEM ishift_temp;
-#if BITS_IN_JSAMPLE == 8
-#define DCTELEMBITS  16		/* DCTELEM may be 16 or 32 bits */
-#else
-#define DCTELEMBITS  32		/* DCTELEM must be 32 bits */
-#endif
-#define IRIGHT_SHIFT(x,shft)  \
-    ((ishift_temp = (x)) < 0 ? \
-     (ishift_temp >> (shft)) | ((~((DCTELEM) 0)) << (DCTELEMBITS-(shft))) : \
-     (ishift_temp >> (shft)))
-#else
-#define ISHIFT_TEMPS
-#define IRIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-#ifdef USE_ACCURATE_ROUNDING
-#define IDESCALE(x,n)  ((int) IRIGHT_SHIFT((x) + (1 << ((n)-1)), n))
-#else
-#define IDESCALE(x,n)  ((int) IRIGHT_SHIFT(x, n))
-#endif
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- */
-
-GLOBAL(void)
-jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-  DCTELEM tmp10, tmp11, tmp12, tmp13;
-  DCTELEM z5, z10, z11, z12, z13;
-  JCOEFPTR inptr;
-  IFAST_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE2];	/* buffers data between passes */
-  SHIFT_TEMPS			/* for DESCALE */
-  ISHIFT_TEMPS			/* for IDESCALE */
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (IFAST_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-    
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-      
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-    
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = tmp0 + tmp2;	/* phase 3 */
-    tmp11 = tmp0 - tmp2;
-
-    tmp13 = tmp1 + tmp3;	/* phases 5-3 */
-    tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
-
-    tmp0 = tmp10 + tmp13;	/* phase 2 */
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-    
-    /* Odd part */
-
-    tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    z13 = tmp6 + tmp5;		/* phase 6 */
-    z10 = tmp6 - tmp5;
-    z11 = tmp4 + tmp7;
-    z12 = tmp4 - tmp7;
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
-
-    z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
-    tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
-    tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
-    wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
-    wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
-    wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
-    wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5);
-    wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
-    wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
-    wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-  
-  /* Pass 2: process rows from work array, store into output array. */
-  /* Note that we must descale the results by a factor of 8 == 2**3, */
-  /* and also undo the PASS1_BITS scaling. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * On machines with very fast multiplication, it's possible that the
-     * test takes more time than it's worth.  In that case this section
-     * may be commented out.
-     */
-    
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
-	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[IDESCALE(wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-      
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-      outptr[2] = dcval;
-      outptr[3] = dcval;
-      outptr[4] = dcval;
-      outptr[5] = dcval;
-      outptr[6] = dcval;
-      outptr[7] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-    
-    /* Even part */
-
-    tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
-    tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
-
-    tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
-    tmp12 = MULTIPLY((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6], FIX_1_414213562)
-	    - tmp13;
-
-    tmp0 = tmp10 + tmp13;
-    tmp3 = tmp10 - tmp13;
-    tmp1 = tmp11 + tmp12;
-    tmp2 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
-    z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
-    z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
-    z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
-
-    tmp7 = z11 + z13;		/* phase 5 */
-    tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
-
-    z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
-    tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
-    tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
-
-    tmp6 = tmp12 - tmp7;	/* phase 2 */
-    tmp5 = tmp11 - tmp6;
-    tmp4 = tmp10 + tmp5;
-
-    /* Final output stage: scale down by a factor of 8 and range-limit */
-
-    outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#endif /* DCT_IFAST_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jidctint.c
+++ /dev/null
@@ -1,5179 +1,0 @@
-/*
- * jidctint.c
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modification developed 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains a slow-but-accurate integer implementation of the
- * inverse DCT (Discrete Cosine Transform).  In the IJG code, this routine
- * must also perform dequantization of the input coefficients.
- *
- * A 2-D IDCT can be done by 1-D IDCT on each column followed by 1-D IDCT
- * on each row (or vice versa, but it's more convenient to emit a row at
- * a time).  Direct algorithms are also available, but they are much more
- * complex and seem not to be any faster when reduced to code.
- *
- * This implementation is based on an algorithm described in
- *   C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
- *   Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
- *   Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
- * The primary algorithm described there uses 11 multiplies and 29 adds.
- * We use their alternate method with 12 multiplies and 32 adds.
- * The advantage of this method is that no data path contains more than one
- * multiplication; this allows a very simple and accurate implementation in
- * scaled fixed-point arithmetic, with a minimal number of shifts.
- *
- * We also provide IDCT routines with various output sample block sizes for
- * direct resolution reduction or enlargement and for direct resolving the
- * common 2x1 and 1x2 subsampling cases without additional resampling: NxN
- * (N=1...16), 2NxN, and Nx2N (N=1...8) pixels for one 8x8 input DCT block.
- *
- * For N<8 we simply take the corresponding low-frequency coefficients of
- * the 8x8 input DCT block and apply an NxN point IDCT on the sub-block
- * to yield the downscaled outputs.
- * This can be seen as direct low-pass downsampling from the DCT domain
- * point of view rather than the usual spatial domain point of view,
- * yielding significant computational savings and results at least
- * as good as common bilinear (averaging) spatial downsampling.
- *
- * For N>8 we apply a partial NxN IDCT on the 8 input coefficients as
- * lower frequencies and higher frequencies assumed to be zero.
- * It turns out that the computational effort is similar to the 8x8 IDCT
- * regarding the output size.
- * Furthermore, the scaling and descaling is the same for all IDCT sizes.
- *
- * CAUTION: We rely on the FIX() macro except for the N=1,2,4,8 cases
- * since there would be too many additional constants to pre-calculate.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jdct.h"		/* Private declarations for DCT subsystem */
-
-#ifdef DCT_ISLOW_SUPPORTED
-
-
-/*
- * This module is specialized to the case DCTSIZE = 8.
- */
-
-#if DCTSIZE != 8
-  Sorry, this code only copes with 8x8 DCT blocks. /* deliberate syntax err */
-#endif
-
-
-/*
- * The poop on this scaling stuff is as follows:
- *
- * Each 1-D IDCT step produces outputs which are a factor of sqrt(N)
- * larger than the true IDCT outputs.  The final outputs are therefore
- * a factor of N larger than desired; since N=8 this can be cured by
- * a simple right shift at the end of the algorithm.  The advantage of
- * this arrangement is that we save two multiplications per 1-D IDCT,
- * because the y0 and y4 inputs need not be divided by sqrt(N).
- *
- * We have to do addition and subtraction of the integer inputs, which
- * is no problem, and multiplication by fractional constants, which is
- * a problem to do in integer arithmetic.  We multiply all the constants
- * by CONST_SCALE and convert them to integer constants (thus retaining
- * CONST_BITS bits of precision in the constants).  After doing a
- * multiplication we have to divide the product by CONST_SCALE, with proper
- * rounding, to produce the correct output.  This division can be done
- * cheaply as a right shift of CONST_BITS bits.  We postpone shifting
- * as long as possible so that partial sums can be added together with
- * full fractional precision.
- *
- * The outputs of the first pass are scaled up by PASS1_BITS bits so that
- * they are represented to better-than-integral precision.  These outputs
- * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
- * with the recommended scaling.  (To scale up 12-bit sample data further, an
- * intermediate INT32 array would be needed.)
- *
- * To avoid overflow of the 32-bit intermediate results in pass 2, we must
- * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26.  Error analysis
- * shows that the values given below are the most effective.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define CONST_BITS  13
-#define PASS1_BITS  2
-#else
-#define CONST_BITS  13
-#define PASS1_BITS  1		/* lose a little precision to avoid overflow */
-#endif
-
-/* Some C compilers fail to reduce "FIX(constant)" at compile time, thus
- * causing a lot of useless floating-point operations at run time.
- * To get around this we use the following pre-calculated constants.
- * If you change CONST_BITS you may want to add appropriate values.
- * (With a reasonable C compiler, you can just rely on the FIX() macro...)
- */
-
-#if CONST_BITS == 13
-#define FIX_0_298631336  ((INT32)  2446)	/* FIX(0.298631336) */
-#define FIX_0_390180644  ((INT32)  3196)	/* FIX(0.390180644) */
-#define FIX_0_541196100  ((INT32)  4433)	/* FIX(0.541196100) */
-#define FIX_0_765366865  ((INT32)  6270)	/* FIX(0.765366865) */
-#define FIX_0_899976223  ((INT32)  7373)	/* FIX(0.899976223) */
-#define FIX_1_175875602  ((INT32)  9633)	/* FIX(1.175875602) */
-#define FIX_1_501321110  ((INT32)  12299)	/* FIX(1.501321110) */
-#define FIX_1_847759065  ((INT32)  15137)	/* FIX(1.847759065) */
-#define FIX_1_961570560  ((INT32)  16069)	/* FIX(1.961570560) */
-#define FIX_2_053119869  ((INT32)  16819)	/* FIX(2.053119869) */
-#define FIX_2_562915447  ((INT32)  20995)	/* FIX(2.562915447) */
-#define FIX_3_072711026  ((INT32)  25172)	/* FIX(3.072711026) */
-#else
-#define FIX_0_298631336  FIX(0.298631336)
-#define FIX_0_390180644  FIX(0.390180644)
-#define FIX_0_541196100  FIX(0.541196100)
-#define FIX_0_765366865  FIX(0.765366865)
-#define FIX_0_899976223  FIX(0.899976223)
-#define FIX_1_175875602  FIX(1.175875602)
-#define FIX_1_501321110  FIX(1.501321110)
-#define FIX_1_847759065  FIX(1.847759065)
-#define FIX_1_961570560  FIX(1.961570560)
-#define FIX_2_053119869  FIX(2.053119869)
-#define FIX_2_562915447  FIX(2.562915447)
-#define FIX_3_072711026  FIX(3.072711026)
-#endif
-
-
-/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result.
- * For 8-bit samples with the recommended scaling, all the variable
- * and constant values involved are no more than 16 bits wide, so a
- * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
- * For 12-bit samples, a full 32-bit multiplication will be needed.
- */
-
-#if BITS_IN_JSAMPLE == 8
-#define MULTIPLY(var,const)  MULTIPLY16C16(var,const)
-#else
-#define MULTIPLY(var,const)  ((var) * (const))
-#endif
-
-
-/* Dequantize a coefficient by multiplying it by the multiplier-table
- * entry; produce an int result.  In this module, both inputs and result
- * are 16 bits or less, so either int or short multiply will work.
- */
-
-#define DEQUANTIZE(coef,quantval)  (((ISLOW_MULT_TYPE) (coef)) * (quantval))
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients.
- *
- * cK represents sqrt(2) * cos(K*pi/16).
- */
-
-GLOBAL(void)
-jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[DCTSIZE2];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * Note results are scaled up by sqrt(8) compared to a true IDCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z2 <<= CONST_BITS;
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z2 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    tmp0 = z2 + z3;
-    tmp1 = z2 - z3;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process rows from work array, store into output array.
-   * Note that we must descale the results by a factor of 8 == 2**3,
-   * and also undo the PASS1_BITS scaling.
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < DCTSIZE; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-    /* Rows of zeroes can be exploited in the same way as we did with columns.
-     * However, the column calculation has created many nonzero AC terms, so
-     * the simplification applies less often (typically 5% to 10% of the time).
-     * On machines with very fast multiplication, it's possible that the
-     * test takes more time than it's worth.  In that case this section
-     * may be commented out.
-     */
-
-#ifndef NO_ZERO_ROW_TEST
-    if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
-	wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
-      /* AC terms all zero */
-      JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3)
-				  & RANGE_MASK];
-
-      outptr[0] = dcval;
-      outptr[1] = dcval;
-      outptr[2] = dcval;
-      outptr[3] = dcval;
-      outptr[4] = dcval;
-      outptr[5] = dcval;
-      outptr[6] = dcval;
-      outptr[7] = dcval;
-
-      wsptr += DCTSIZE;		/* advance pointer to next row */
-      continue;
-    }
-#endif
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    /* Add fudge factor here for final descale. */
-    z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 = (INT32) wsptr[4];
-
-    tmp0 = (z2 + z3) << CONST_BITS;
-    tmp1 = (z2 - z3) << CONST_BITS;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = (INT32) wsptr[7];
-    tmp1 = (INT32) wsptr[5];
-    tmp2 = (INT32) wsptr[3];
-    tmp3 = (INT32) wsptr[1];
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-#ifdef IDCT_SCALING_SUPPORTED
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 7x7 output block.
- *
- * Optimized algorithm with 12 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/14).
- */
-
-GLOBAL(void)
-jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[7*7];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp13 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp13 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp13 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734));     /* c4 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123));     /* c6 */
-    tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
-    tmp0 = z1 + z3;
-    z2 -= tmp0;
-    tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */
-    tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536));  /* c2-c4-c6 */
-    tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249));  /* c2+c4+c6 */
-    tmp13 += MULTIPLY(z2, FIX(1.414213562));         /* c0 */
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-
-    tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347));      /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339));      /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276));    /* -c1 */
-    tmp1 += tmp2;
-    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));        /* c5 */
-    tmp0 += z2;
-    tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693));     /* c3+c1-c5 */
-
-    /* Final output stage */
-
-    wsptr[7*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[7*6] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[7*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[7*5] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[7*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[7*4] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[7*3] = (int) RIGHT_SHIFT(tmp13, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 7 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 7; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp13 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[4];
-    z3 = (INT32) wsptr[6];
-
-    tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734));     /* c4 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123));     /* c6 */
-    tmp11 = tmp10 + tmp12 + tmp13 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
-    tmp0 = z1 + z3;
-    z2 -= tmp0;
-    tmp0 = MULTIPLY(tmp0, FIX(1.274162392)) + tmp13; /* c2 */
-    tmp10 += tmp0 - MULTIPLY(z3, FIX(0.077722536));  /* c2-c4-c6 */
-    tmp12 += tmp0 - MULTIPLY(z1, FIX(2.470602249));  /* c2+c4+c6 */
-    tmp13 += MULTIPLY(z2, FIX(1.414213562));         /* c0 */
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-
-    tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347));      /* (c3+c1-c5)/2 */
-    tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339));      /* (c3+c5-c1)/2 */
-    tmp0 = tmp1 - tmp2;
-    tmp1 += tmp2;
-    tmp2 = MULTIPLY(z2 + z3, - FIX(1.378756276));    /* -c1 */
-    tmp1 += tmp2;
-    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));        /* c5 */
-    tmp0 += z2;
-    tmp2 += z2 + MULTIPLY(z3, FIX(1.870828693));     /* c3+c1-c5 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 7;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 6x6 output block.
- *
- * Optimized algorithm with 3 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/12).
- */
-
-GLOBAL(void)
-jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[6*6];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
-    tmp1 = tmp0 + tmp10;
-    tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS);
-    tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
-    tmp10 = tmp1 + tmp0;
-    tmp12 = tmp1 - tmp0;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
-    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
-    tmp1 = (z1 - z2 - z3) << PASS1_BITS;
-
-    /* Final output stage */
-
-    wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[6*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[6*1] = (int) (tmp11 + tmp1);
-    wsptr[6*4] = (int) (tmp11 - tmp1);
-    wsptr[6*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[6*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 6 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-    tmp2 = (INT32) wsptr[4];
-    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
-    tmp1 = tmp0 + tmp10;
-    tmp11 = tmp0 - tmp10 - tmp10;
-    tmp10 = (INT32) wsptr[2];
-    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
-    tmp10 = tmp1 + tmp0;
-    tmp12 = tmp1 - tmp0;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
-    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
-    tmp1 = (z1 - z2 - z3) << CONST_BITS;
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 6;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 5x5 output block.
- *
- * Optimized algorithm with 5 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/10).
- */
-
-GLOBAL(void)
-jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp10, tmp11, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[5*5];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp12 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp12 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */
-    z3 = tmp12 + z2;
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z1;
-    tmp12 -= z2 << 2;
-
-    /* Odd part */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));     /* c3 */
-    tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148));   /* c1-c3 */
-    tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899));   /* c1+c3 */
-
-    /* Final output stage */
-
-    wsptr[5*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[5*4] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[5*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[5*3] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[5*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 5 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 5; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp12 <<= CONST_BITS;
-    tmp0 = (INT32) wsptr[2];
-    tmp1 = (INT32) wsptr[4];
-    z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */
-    z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */
-    z3 = tmp12 + z2;
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z1;
-    tmp12 -= z2 << 2;
-
-    /* Odd part */
-
-    z2 = (INT32) wsptr[1];
-    z3 = (INT32) wsptr[3];
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));     /* c3 */
-    tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148));   /* c1-c3 */
-    tmp1 = z1 - MULTIPLY(z3, FIX(2.176250899));   /* c1+c3 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 5;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 4x4 output block.
- *
- * Optimized algorithm with 3 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT].
- */
-
-GLOBAL(void)
-jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp2, tmp10, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[4*4];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    
-    tmp10 = (tmp0 + tmp2) << PASS1_BITS;
-    tmp12 = (tmp0 - tmp2) << PASS1_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);               /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */
-		       CONST_BITS-PASS1_BITS);
-    tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */
-		       CONST_BITS-PASS1_BITS);
-
-    /* Final output stage */
-
-    wsptr[4*0] = (int) (tmp10 + tmp0);
-    wsptr[4*3] = (int) (tmp10 - tmp0);
-    wsptr[4*1] = (int) (tmp12 + tmp2);
-    wsptr[4*2] = (int) (tmp12 - tmp2);
-  }
-
-  /* Pass 2: process 4 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp2 = (INT32) wsptr[2];
-
-    tmp10 = (tmp0 + tmp2) << CONST_BITS;
-    tmp12 = (tmp0 - tmp2) << CONST_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = (INT32) wsptr[1];
-    z3 = (INT32) wsptr[3];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);   /* c6 */
-    tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */
-    tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 4;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 3x3 output block.
- *
- * Optimized algorithm with 2 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/6).
- */
-
-GLOBAL(void)
-jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp2, tmp10, tmp12;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[3*3];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
-    tmp10 = tmp0 + tmp12;
-    tmp2 = tmp0 - tmp12 - tmp12;
-
-    /* Odd part */
-
-    tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
-
-    /* Final output stage */
-
-    wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[3*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[3*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 3 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 3; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-    tmp2 = (INT32) wsptr[2];
-    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
-    tmp10 = tmp0 + tmp12;
-    tmp2 = tmp0 - tmp12 - tmp12;
-
-    /* Odd part */
-
-    tmp12 = (INT32) wsptr[1];
-    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 3;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 2x2 output block.
- *
- * Multiplication-less algorithm.
- */
-
-GLOBAL(void)
-jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5;
-  ISLOW_MULT_TYPE * quantptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input. */
-
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-
-  /* Column 0 */
-  tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]);
-  tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]);
-  /* Add fudge factor here for final descale. */
-  tmp4 += ONE << 2;
-
-  tmp0 = tmp4 + tmp5;
-  tmp2 = tmp4 - tmp5;
-
-  /* Column 1 */
-  tmp4 = DEQUANTIZE(coef_block[DCTSIZE*0+1], quantptr[DCTSIZE*0+1]);
-  tmp5 = DEQUANTIZE(coef_block[DCTSIZE*1+1], quantptr[DCTSIZE*1+1]);
-
-  tmp1 = tmp4 + tmp5;
-  tmp3 = tmp4 - tmp5;
-
-  /* Pass 2: process 2 rows, store into output array. */
-
-  /* Row 0 */
-  outptr = output_buf[0] + output_col;
-
-  outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK];
-  outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK];
-
-  /* Row 1 */
-  outptr = output_buf[1] + output_col;
-
-  outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp2 + tmp3, 3) & RANGE_MASK];
-  outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2 - tmp3, 3) & RANGE_MASK];
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 1x1 output block.
- *
- * We hardly need an inverse DCT routine for this: just take the
- * average pixel value, which is one-eighth of the DC coefficient.
- */
-
-GLOBAL(void)
-jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  int dcval;
-  ISLOW_MULT_TYPE * quantptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  SHIFT_TEMPS
-
-  /* 1x1 is trivial: just take the DC coefficient divided by 8. */
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  dcval = DEQUANTIZE(coef_block[0], quantptr[0]);
-  dcval = (int) DESCALE((INT32) dcval, 3);
-
-  output_buf[0][output_col] = range_limit[dcval & RANGE_MASK];
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 9x9 output block.
- *
- * Optimized algorithm with 10 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/18).
- */
-
-GLOBAL(void)
-jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*9];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp3 = MULTIPLY(z3, FIX(0.707106781));      /* c6 */
-    tmp1 = tmp0 + tmp3;
-    tmp2 = tmp0 - tmp3 - tmp3;
-
-    tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */
-    tmp11 = tmp2 + tmp0;
-    tmp14 = tmp2 - tmp0 - tmp0;
-
-    tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */
-    tmp2 = MULTIPLY(z1, FIX(1.083350441));      /* c4 */
-    tmp3 = MULTIPLY(z2, FIX(0.245575608));      /* c8 */
-
-    tmp10 = tmp1 + tmp0 - tmp3;
-    tmp12 = tmp1 - tmp0 + tmp2;
-    tmp13 = tmp1 - tmp2 + tmp3;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    z2 = MULTIPLY(z2, - FIX(1.224744871));           /* -c3 */
-
-    tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955));      /* c5 */
-    tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525));      /* c7 */
-    tmp0 = tmp2 + tmp3 - z2;
-    tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481));      /* c1 */
-    tmp2 += z2 - tmp1;
-    tmp3 += z2 + tmp1;
-    tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[8*8] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[8*7] = (int) RIGHT_SHIFT(tmp11 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[8*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[8*6] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[8*3] = (int) RIGHT_SHIFT(tmp13 + tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[8*5] = (int) RIGHT_SHIFT(tmp13 - tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[8*4] = (int) RIGHT_SHIFT(tmp14, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 9 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 9; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[4];
-    z3 = (INT32) wsptr[6];
-
-    tmp3 = MULTIPLY(z3, FIX(0.707106781));      /* c6 */
-    tmp1 = tmp0 + tmp3;
-    tmp2 = tmp0 - tmp3 - tmp3;
-
-    tmp0 = MULTIPLY(z1 - z2, FIX(0.707106781)); /* c6 */
-    tmp11 = tmp2 + tmp0;
-    tmp14 = tmp2 - tmp0 - tmp0;
-
-    tmp0 = MULTIPLY(z1 + z2, FIX(1.328926049)); /* c2 */
-    tmp2 = MULTIPLY(z1, FIX(1.083350441));      /* c4 */
-    tmp3 = MULTIPLY(z2, FIX(0.245575608));      /* c8 */
-
-    tmp10 = tmp1 + tmp0 - tmp3;
-    tmp12 = tmp1 - tmp0 + tmp2;
-    tmp13 = tmp1 - tmp2 + tmp3;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    z2 = MULTIPLY(z2, - FIX(1.224744871));           /* -c3 */
-
-    tmp2 = MULTIPLY(z1 + z3, FIX(0.909038955));      /* c5 */
-    tmp3 = MULTIPLY(z1 + z4, FIX(0.483689525));      /* c7 */
-    tmp0 = tmp2 + tmp3 - z2;
-    tmp1 = MULTIPLY(z3 - z4, FIX(1.392728481));      /* c1 */
-    tmp2 += z2 - tmp1;
-    tmp3 += z2 + tmp1;
-    tmp1 = MULTIPLY(z1 - z3 - z4, FIX(1.224744871)); /* c3 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 10x10 output block.
- *
- * Optimized algorithm with 12 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/20).
- */
-
-GLOBAL(void)
-jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24;
-  INT32 z1, z2, z3, z4, z5;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*10];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
-    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z2;
-
-    tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1),   /* c0 = (c4-c8)*2 */
-			CONST_BITS-PASS1_BITS);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
-    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
-    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
-
-    tmp20 = tmp10 + tmp12;
-    tmp24 = tmp10 - tmp12;
-    tmp21 = tmp11 + tmp13;
-    tmp23 = tmp11 - tmp13;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = z2 + z4;
-    tmp13 = z2 - z4;
-
-    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
-    z5 = z3 << CONST_BITS;
-
-    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
-    z4 = z5 + tmp12;
-
-    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
-    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
-    z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1));
-
-    tmp12 = (z1 - tmp13 - z3) << PASS1_BITS;
-
-    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
-    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2] = (int) (tmp22 + tmp12);
-    wsptr[8*7] = (int) (tmp22 - tmp12);
-    wsptr[8*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 10 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 10; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 <<= CONST_BITS;
-    z4 = (INT32) wsptr[4];
-    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
-    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z2;
-
-    tmp22 = z3 - ((z1 - z2) << 1);               /* c0 = (c4-c8)*2 */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
-    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
-    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
-
-    tmp20 = tmp10 + tmp12;
-    tmp24 = tmp10 - tmp12;
-    tmp21 = tmp11 + tmp13;
-    tmp23 = tmp11 - tmp13;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z3 <<= CONST_BITS;
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = z2 + z4;
-    tmp13 = z2 - z4;
-
-    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
-    z4 = z3 + tmp12;
-
-    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
-    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
-    z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1));
-
-    tmp12 = ((z1 - tmp13) << CONST_BITS) - z3;
-
-    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
-    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 11x11 output block.
- *
- * Optimized algorithm with 24 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/22).
- */
-
-GLOBAL(void)
-jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*11];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp10 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp10 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132));     /* c2+c4 */
-    tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045));     /* c2-c6 */
-    z4 = z1 + z3;
-    tmp24 = MULTIPLY(z4, - FIX(1.155664402));        /* -(c2-c10) */
-    z4 -= z2;
-    tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976));  /* c2 */
-    tmp21 = tmp20 + tmp23 + tmp25 -
-	    MULTIPLY(z2, FIX(1.821790775));          /* c2+c4+c10-c6 */
-    tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */
-    tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */
-    tmp24 += tmp25;
-    tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120));  /* c8+c10 */
-    tmp24 += MULTIPLY(z2, FIX(1.944413522)) -        /* c2+c8 */
-	     MULTIPLY(z1, FIX(1.390975730));         /* c4+c10 */
-    tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562));  /* c0 */
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = z1 + z2;
-    tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */
-    tmp11 = MULTIPLY(tmp11, FIX(0.887983902));           /* c3-c9 */
-    tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295));         /* c5-c9 */
-    tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(z1, FIX(0.923107866));              /* c7+c5+c3-c1-2*c9 */
-    z1    = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */
-    tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588));        /* c1+c7+3*c9-c3 */
-    tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623));        /* c3+c5-c7-c9 */
-    z1    = MULTIPLY(z2 + z4, - FIX(1.798248910));       /* -(c1+c9) */
-    tmp11 += z1;
-    tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632));        /* c1+c5+c9-c7 */
-    tmp14 += MULTIPLY(z2, - FIX(1.467221301)) +          /* -(c5+c9) */
-	     MULTIPLY(z3, FIX(1.001388905)) -            /* c1-c9 */
-	     MULTIPLY(z4, FIX(1.684843907));             /* c3+c9 */
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 11 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 11; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp10 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[4];
-    z3 = (INT32) wsptr[6];
-
-    tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132));     /* c2+c4 */
-    tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045));     /* c2-c6 */
-    z4 = z1 + z3;
-    tmp24 = MULTIPLY(z4, - FIX(1.155664402));        /* -(c2-c10) */
-    z4 -= z2;
-    tmp25 = tmp10 + MULTIPLY(z4, FIX(1.356927976));  /* c2 */
-    tmp21 = tmp20 + tmp23 + tmp25 -
-	    MULTIPLY(z2, FIX(1.821790775));          /* c2+c4+c10-c6 */
-    tmp20 += tmp25 + MULTIPLY(z3, FIX(2.115825087)); /* c4+c6 */
-    tmp23 += tmp25 - MULTIPLY(z1, FIX(1.513598477)); /* c6+c8 */
-    tmp24 += tmp25;
-    tmp22 = tmp24 - MULTIPLY(z3, FIX(0.788749120));  /* c8+c10 */
-    tmp24 += MULTIPLY(z2, FIX(1.944413522)) -        /* c2+c8 */
-	     MULTIPLY(z1, FIX(1.390975730));         /* c4+c10 */
-    tmp25 = tmp10 - MULTIPLY(z4, FIX(1.414213562));  /* c0 */
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = z1 + z2;
-    tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */
-    tmp11 = MULTIPLY(tmp11, FIX(0.887983902));           /* c3-c9 */
-    tmp12 = MULTIPLY(z1 + z3, FIX(0.670361295));         /* c5-c9 */
-    tmp13 = tmp14 + MULTIPLY(z1 + z4, FIX(0.366151574)); /* c7-c9 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(z1, FIX(0.923107866));              /* c7+c5+c3-c1-2*c9 */
-    z1    = tmp14 - MULTIPLY(z2 + z3, FIX(1.163011579)); /* c7+c9 */
-    tmp11 += z1 + MULTIPLY(z2, FIX(2.073276588));        /* c1+c7+3*c9-c3 */
-    tmp12 += z1 - MULTIPLY(z3, FIX(1.192193623));        /* c3+c5-c7-c9 */
-    z1    = MULTIPLY(z2 + z4, - FIX(1.798248910));       /* -(c1+c9) */
-    tmp11 += z1;
-    tmp13 += z1 + MULTIPLY(z4, FIX(2.102458632));        /* c1+c5+c9-c7 */
-    tmp14 += MULTIPLY(z2, - FIX(1.467221301)) +          /* -(c5+c9) */
-	     MULTIPLY(z3, FIX(1.001388905)) -            /* c1-c9 */
-	     MULTIPLY(z4, FIX(1.684843907));             /* c3+c9 */
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 12x12 output block.
- *
- * Optimized algorithm with 15 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/24).
- */
-
-GLOBAL(void)
-jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*12];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
-    z1 <<= CONST_BITS;
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-    z2 <<= CONST_BITS;
-
-    tmp12 = z1 - z2;
-
-    tmp21 = z3 + tmp12;
-    tmp24 = z3 - tmp12;
-
-    tmp12 = z4 + z2;
-
-    tmp20 = tmp10 + tmp12;
-    tmp25 = tmp10 - tmp12;
-
-    tmp12 = z4 - z1 - z2;
-
-    tmp22 = tmp11 + tmp12;
-    tmp23 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
-    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
-
-    tmp10 = z1 + z3;
-    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
-    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
-    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
-    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
-    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
-    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
-    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
-	     MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
-
-    z1 -= z4;
-    z2 -= z3;
-    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
-    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
-    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 12 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 12; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 <<= CONST_BITS;
-
-    z4 = (INT32) wsptr[4];
-    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    z1 = (INT32) wsptr[2];
-    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
-    z1 <<= CONST_BITS;
-    z2 = (INT32) wsptr[6];
-    z2 <<= CONST_BITS;
-
-    tmp12 = z1 - z2;
-
-    tmp21 = z3 + tmp12;
-    tmp24 = z3 - tmp12;
-
-    tmp12 = z4 + z2;
-
-    tmp20 = tmp10 + tmp12;
-    tmp25 = tmp10 - tmp12;
-
-    tmp12 = z4 - z1 - z2;
-
-    tmp22 = tmp11 + tmp12;
-    tmp23 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
-    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
-
-    tmp10 = z1 + z3;
-    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
-    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
-    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
-    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
-    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
-    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
-    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
-	     MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
-
-    z1 -= z4;
-    z2 -= z3;
-    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
-    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
-    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 13x13 output block.
- *
- * Optimized algorithm with 29 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/26).
- */
-
-GLOBAL(void)
-jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*13];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z1 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    tmp12 = MULTIPLY(tmp10, FIX(1.155388986));                /* (c4+c6)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1;           /* (c4-c6)/2 */
-
-    tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13;   /* c2 */
-    tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13;   /* c10 */
-
-    tmp12 = MULTIPLY(tmp10, FIX(0.316450131));                /* (c8-c12)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1;           /* (c8+c12)/2 */
-
-    tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13;   /* c6 */
-    tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */
-
-    tmp12 = MULTIPLY(tmp10, FIX(0.435816023));                /* (c2-c10)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1;           /* (c2+c10)/2 */
-
-    tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */
-    tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */
-
-    tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1;      /* c0 */
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651));     /* c3 */
-    tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945));     /* c5 */
-    tmp15 = z1 + z4;
-    tmp13 = MULTIPLY(tmp15, FIX(0.937797057));       /* c7 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(z1, FIX(2.020082300));          /* c7+c5+c3-c1 */
-    tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458));   /* -c11 */
-    tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */
-    tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */
-    tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945));   /* -c5 */
-    tmp11 += tmp14;
-    tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */
-    tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813));   /* -c9 */
-    tmp12 += tmp14;
-    tmp13 += tmp14;
-    tmp15 = MULTIPLY(tmp15, FIX(0.338443458));       /* c11 */
-    tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */
-	    MULTIPLY(z2, FIX(0.466105296));          /* c1-c7 */
-    z1    = MULTIPLY(z3 - z2, FIX(0.937797057));     /* c7 */
-    tmp14 += z1;
-    tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) -   /* c3-c7 */
-	     MULTIPLY(z4, FIX(1.742345811));         /* c1+c11 */
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*12] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 13 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 13; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z1 <<= CONST_BITS;
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[4];
-    z4 = (INT32) wsptr[6];
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    tmp12 = MULTIPLY(tmp10, FIX(1.155388986));                /* (c4+c6)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.096834934)) + z1;           /* (c4-c6)/2 */
-
-    tmp20 = MULTIPLY(z2, FIX(1.373119086)) + tmp12 + tmp13;   /* c2 */
-    tmp22 = MULTIPLY(z2, FIX(0.501487041)) - tmp12 + tmp13;   /* c10 */
-
-    tmp12 = MULTIPLY(tmp10, FIX(0.316450131));                /* (c8-c12)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.486914739)) + z1;           /* (c8+c12)/2 */
-
-    tmp21 = MULTIPLY(z2, FIX(1.058554052)) - tmp12 + tmp13;   /* c6 */
-    tmp25 = MULTIPLY(z2, - FIX(1.252223920)) + tmp12 + tmp13; /* c4 */
-
-    tmp12 = MULTIPLY(tmp10, FIX(0.435816023));                /* (c2-c10)/2 */
-    tmp13 = MULTIPLY(tmp11, FIX(0.937303064)) - z1;           /* (c2+c10)/2 */
-
-    tmp23 = MULTIPLY(z2, - FIX(0.170464608)) - tmp12 - tmp13; /* c12 */
-    tmp24 = MULTIPLY(z2, - FIX(0.803364869)) + tmp12 - tmp13; /* c8 */
-
-    tmp26 = MULTIPLY(tmp11 - z2, FIX(1.414213562)) + z1;      /* c0 */
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651));     /* c3 */
-    tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945));     /* c5 */
-    tmp15 = z1 + z4;
-    tmp13 = MULTIPLY(tmp15, FIX(0.937797057));       /* c7 */
-    tmp10 = tmp11 + tmp12 + tmp13 -
-	    MULTIPLY(z1, FIX(2.020082300));          /* c7+c5+c3-c1 */
-    tmp14 = MULTIPLY(z2 + z3, - FIX(0.338443458));   /* -c11 */
-    tmp11 += tmp14 + MULTIPLY(z2, FIX(0.837223564)); /* c5+c9+c11-c3 */
-    tmp12 += tmp14 - MULTIPLY(z3, FIX(1.572116027)); /* c1+c5-c9-c11 */
-    tmp14 = MULTIPLY(z2 + z4, - FIX(1.163874945));   /* -c5 */
-    tmp11 += tmp14;
-    tmp13 += tmp14 + MULTIPLY(z4, FIX(2.205608352)); /* c3+c5+c9-c7 */
-    tmp14 = MULTIPLY(z3 + z4, - FIX(0.657217813));   /* -c9 */
-    tmp12 += tmp14;
-    tmp13 += tmp14;
-    tmp15 = MULTIPLY(tmp15, FIX(0.338443458));       /* c11 */
-    tmp14 = tmp15 + MULTIPLY(z1, FIX(0.318774355)) - /* c9-c11 */
-	    MULTIPLY(z2, FIX(0.466105296));          /* c1-c7 */
-    z1    = MULTIPLY(z3 - z2, FIX(0.937797057));     /* c7 */
-    tmp14 += z1;
-    tmp15 += z1 + MULTIPLY(z3, FIX(0.384515595)) -   /* c3-c7 */
-	     MULTIPLY(z4, FIX(1.742345811));         /* c1+c11 */
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 14x14 output block.
- *
- * Optimized algorithm with 20 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/28).
- */
-
-GLOBAL(void)
-jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*14];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z1 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
-    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
-    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
-
-    tmp10 = z1 + z2;
-    tmp11 = z1 + z3;
-    tmp12 = z1 - z4;
-
-    tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */
-			CONST_BITS-PASS1_BITS);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
-
-    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
-    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
-    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
-	    MULTIPLY(z2, FIX(1.378756276));      /* c2 */
-
-    tmp20 = tmp10 + tmp13;
-    tmp26 = tmp10 - tmp13;
-    tmp21 = tmp11 + tmp14;
-    tmp25 = tmp11 - tmp14;
-    tmp22 = tmp12 + tmp15;
-    tmp24 = tmp12 - tmp15;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp13 = z4 << CONST_BITS;
-
-    tmp14 = z1 + z3;
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
-    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
-    tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
-    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
-    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
-    z1    -= z2;
-    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13;        /* c11 */
-    tmp16 += tmp15;
-    z1    += z4;
-    z4    = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */
-    tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948));          /* c3-c9-c13 */
-    tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773));          /* c3+c5-c13 */
-    z4    = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
-    tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
-    tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567));          /* c1+c11-c5 */
-
-    tmp13 = (z1 - z3) << PASS1_BITS;
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) (tmp23 + tmp13);
-    wsptr[8*10] = (int) (tmp23 - tmp13);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 14 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 14; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z1 <<= CONST_BITS;
-    z4 = (INT32) wsptr[4];
-    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
-    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
-    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
-
-    tmp10 = z1 + z2;
-    tmp11 = z1 + z3;
-    tmp12 = z1 - z4;
-
-    tmp23 = z1 - ((z2 + z3 - z4) << 1);          /* c0 = (c4+c12-c8)*2 */
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[6];
-
-    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
-
-    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
-    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
-    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
-	    MULTIPLY(z2, FIX(1.378756276));      /* c2 */
-
-    tmp20 = tmp10 + tmp13;
-    tmp26 = tmp10 - tmp13;
-    tmp21 = tmp11 + tmp14;
-    tmp25 = tmp11 - tmp14;
-    tmp22 = tmp12 + tmp15;
-    tmp24 = tmp12 - tmp15;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-    z4 <<= CONST_BITS;
-
-    tmp14 = z1 + z3;
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
-    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
-    tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
-    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
-    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
-    z1    -= z2;
-    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4;           /* c11 */
-    tmp16 += tmp15;
-    tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4;    /* -c13 */
-    tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948));       /* c3-c9-c13 */
-    tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773));       /* c3+c5-c13 */
-    tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
-    tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
-    tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567));       /* c1+c11-c5 */
-
-    tmp13 = ((z1 - z3) << CONST_BITS) + z4;
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 15x15 output block.
- *
- * Optimized algorithm with 22 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/30).
- */
-
-GLOBAL(void)
-jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*15];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z1 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */
-    tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */
-
-    tmp12 = z1 - tmp10;
-    tmp13 = z1 + tmp11;
-    z1 -= (tmp11 - tmp10) << 1;             /* c0 = (c6-c12)*2 */
-
-    z4 = z2 - z3;
-    z3 += z2;
-    tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */
-    z2 = MULTIPLY(z2, FIX(1.439773946));    /* c4+c14 */
-
-    tmp20 = tmp13 + tmp10 + tmp11;
-    tmp23 = tmp12 - tmp10 + tmp11 + z2;
-
-    tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */
-
-    tmp25 = tmp13 - tmp10 - tmp11;
-    tmp26 = tmp12 + tmp10 - tmp11 - z2;
-
-    tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */
-
-    tmp21 = tmp12 + tmp10 + tmp11;
-    tmp24 = tmp13 - tmp10 + tmp11;
-    tmp11 += tmp11;
-    tmp22 = z1 + tmp11;                     /* c10 = c6-c12 */
-    tmp27 = z1 - tmp11 - tmp11;             /* c0 = (c6-c12)*2 */
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z3 = MULTIPLY(z4, FIX(1.224744871));                    /* c5 */
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp13 = z2 - z4;
-    tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876));         /* c9 */
-    tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148));         /* c3-c9 */
-    tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899));      /* c3+c9 */
-
-    tmp13 = MULTIPLY(z2, - FIX(0.831253876));               /* -c9 */
-    tmp15 = MULTIPLY(z2, - FIX(1.344997024));               /* -c3 */
-    z2 = z1 - z4;
-    tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353));            /* c1 */
-
-    tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */
-    tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */
-    tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3;            /* c5 */
-    z2 = MULTIPLY(z1 + z4, FIX(0.575212477));               /* c11 */
-    tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3;      /* c7-c11 */
-    tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3;      /* c11+c13 */
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*14] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*13] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*12] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp27, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 15 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 15; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z1 <<= CONST_BITS;
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[4];
-    z4 = (INT32) wsptr[6];
-
-    tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */
-    tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */
-
-    tmp12 = z1 - tmp10;
-    tmp13 = z1 + tmp11;
-    z1 -= (tmp11 - tmp10) << 1;             /* c0 = (c6-c12)*2 */
-
-    z4 = z2 - z3;
-    z3 += z2;
-    tmp10 = MULTIPLY(z3, FIX(1.337628990)); /* (c2+c4)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.045680613)); /* (c2-c4)/2 */
-    z2 = MULTIPLY(z2, FIX(1.439773946));    /* c4+c14 */
-
-    tmp20 = tmp13 + tmp10 + tmp11;
-    tmp23 = tmp12 - tmp10 + tmp11 + z2;
-
-    tmp10 = MULTIPLY(z3, FIX(0.547059574)); /* (c8+c14)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.399234004)); /* (c8-c14)/2 */
-
-    tmp25 = tmp13 - tmp10 - tmp11;
-    tmp26 = tmp12 + tmp10 - tmp11 - z2;
-
-    tmp10 = MULTIPLY(z3, FIX(0.790569415)); /* (c6+c12)/2 */
-    tmp11 = MULTIPLY(z4, FIX(0.353553391)); /* (c6-c12)/2 */
-
-    tmp21 = tmp12 + tmp10 + tmp11;
-    tmp24 = tmp13 - tmp10 + tmp11;
-    tmp11 += tmp11;
-    tmp22 = z1 + tmp11;                     /* c10 = c6-c12 */
-    tmp27 = z1 - tmp11 - tmp11;             /* c0 = (c6-c12)*2 */
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z4 = (INT32) wsptr[5];
-    z3 = MULTIPLY(z4, FIX(1.224744871));                    /* c5 */
-    z4 = (INT32) wsptr[7];
-
-    tmp13 = z2 - z4;
-    tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876));         /* c9 */
-    tmp11 = tmp15 + MULTIPLY(z1, FIX(0.513743148));         /* c3-c9 */
-    tmp14 = tmp15 - MULTIPLY(tmp13, FIX(2.176250899));      /* c3+c9 */
-
-    tmp13 = MULTIPLY(z2, - FIX(0.831253876));               /* -c9 */
-    tmp15 = MULTIPLY(z2, - FIX(1.344997024));               /* -c3 */
-    z2 = z1 - z4;
-    tmp12 = z3 + MULTIPLY(z2, FIX(1.406466353));            /* c1 */
-
-    tmp10 = tmp12 + MULTIPLY(z4, FIX(2.457431844)) - tmp15; /* c1+c7 */
-    tmp16 = tmp12 - MULTIPLY(z1, FIX(1.112434820)) + tmp13; /* c1-c13 */
-    tmp12 = MULTIPLY(z2, FIX(1.224744871)) - z3;            /* c5 */
-    z2 = MULTIPLY(z1 + z4, FIX(0.575212477));               /* c11 */
-    tmp13 += z2 + MULTIPLY(z1, FIX(0.475753014)) - z3;      /* c7-c11 */
-    tmp15 += z2 - MULTIPLY(z4, FIX(0.869244010)) + z3;      /* c11+c13 */
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp27,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 16x16 output block.
- *
- * Optimized algorithm with 28 multiplications in the 1-D kernel.
- * cK represents sqrt(2) * cos(K*pi/32).
- */
-
-GLOBAL(void)
-jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*16];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += 1 << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
-    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-    z3 = z1 - z2;
-    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
-    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
-
-    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
-    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
-    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
-    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
-
-    tmp20 = tmp10 + tmp0;
-    tmp27 = tmp10 - tmp0;
-    tmp21 = tmp12 + tmp1;
-    tmp26 = tmp12 - tmp1;
-    tmp22 = tmp13 + tmp2;
-    tmp25 = tmp13 - tmp2;
-    tmp23 = tmp11 + tmp3;
-    tmp24 = tmp11 - tmp3;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = z1 + z3;
-
-    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
-    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
-    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
-    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
-    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
-    tmp0  = tmp1 + tmp2 + tmp3 -
-	    MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
-    tmp13 = tmp10 + tmp11 + tmp12 -
-	    MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
-    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
-    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
-    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
-    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
-    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
-    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
-    z2    += z4;
-    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
-    tmp1  += z1;
-    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
-    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
-    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
-    tmp12 += z2;
-    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
-    tmp2  += z2;
-    tmp3  += z2;
-    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
-    tmp10 += z2;
-    tmp11 += z2;
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp0,  CONST_BITS-PASS1_BITS);
-    wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0,  CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp1,  CONST_BITS-PASS1_BITS);
-    wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1,  CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp2,  CONST_BITS-PASS1_BITS);
-    wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2,  CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp3,  CONST_BITS-PASS1_BITS);
-    wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3,  CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 16 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 16; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[4];
-    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
-    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[6];
-    z3 = z1 - z2;
-    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
-    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
-
-    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
-    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
-    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
-    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
-
-    tmp20 = tmp10 + tmp0;
-    tmp27 = tmp10 - tmp0;
-    tmp21 = tmp12 + tmp1;
-    tmp26 = tmp12 - tmp1;
-    tmp22 = tmp13 + tmp2;
-    tmp25 = tmp13 - tmp2;
-    tmp23 = tmp11 + tmp3;
-    tmp24 = tmp11 - tmp3;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = z1 + z3;
-
-    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
-    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
-    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
-    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
-    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
-    tmp0  = tmp1 + tmp2 + tmp3 -
-	    MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
-    tmp13 = tmp10 + tmp11 + tmp12 -
-	    MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
-    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
-    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
-    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
-    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
-    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
-    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
-    z2    += z4;
-    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
-    tmp1  += z1;
-    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
-    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
-    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
-    tmp12 += z2;
-    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
-    tmp2  += z2;
-    tmp3  += z2;
-    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
-    tmp10 += z2;
-    tmp11 += z2;
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 16x8 output block.
- *
- * 8-point IDCT in pass 1 (columns), 16-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_16x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*8];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * Note results are scaled up by sqrt(8) compared to a true IDCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = DCTSIZE; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[DCTSIZE*0] = dcval;
-      wsptr[DCTSIZE*1] = dcval;
-      wsptr[DCTSIZE*2] = dcval;
-      wsptr[DCTSIZE*3] = dcval;
-      wsptr[DCTSIZE*4] = dcval;
-      wsptr[DCTSIZE*5] = dcval;
-      wsptr[DCTSIZE*6] = dcval;
-      wsptr[DCTSIZE*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z2 <<= CONST_BITS;
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z2 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    tmp0 = z2 + z3;
-    tmp1 = z2 - z3;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    wsptr[DCTSIZE*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[DCTSIZE*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process 8 rows from work array, store into output array.
-   * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[4];
-    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
-    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[6];
-    z3 = z1 - z2;
-    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
-    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
-
-    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
-    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
-    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
-    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
-
-    tmp20 = tmp10 + tmp0;
-    tmp27 = tmp10 - tmp0;
-    tmp21 = tmp12 + tmp1;
-    tmp26 = tmp12 - tmp1;
-    tmp22 = tmp13 + tmp2;
-    tmp25 = tmp13 - tmp2;
-    tmp23 = tmp11 + tmp3;
-    tmp24 = tmp11 - tmp3;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = z1 + z3;
-
-    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
-    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
-    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
-    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
-    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
-    tmp0  = tmp1 + tmp2 + tmp3 -
-	    MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
-    tmp13 = tmp10 + tmp11 + tmp12 -
-	    MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
-    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
-    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
-    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
-    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
-    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
-    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
-    z2    += z4;
-    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
-    tmp1  += z1;
-    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
-    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
-    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
-    tmp12 += z2;
-    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
-    tmp2  += z2;
-    tmp3  += z2;
-    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
-    tmp10 += z2;
-    tmp11 += z2;
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp0,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[15] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp0,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp1,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[14] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp1,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp2,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp2,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp3,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp3,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp27 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp27 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 14x7 output block.
- *
- * 7-point IDCT in pass 1 (columns), 14-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_14x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*7];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp23 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp23 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp23 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734));       /* c4 */
-    tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123));       /* c6 */
-    tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
-    tmp10 = z1 + z3;
-    z2 -= tmp10;
-    tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */
-    tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536));   /* c2-c4-c6 */
-    tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249));   /* c2+c4+c6 */
-    tmp23 += MULTIPLY(z2, FIX(1.414213562));           /* c0 */
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-
-    tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347));       /* (c3+c1-c5)/2 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339));       /* (c3+c5-c1)/2 */
-    tmp10 = tmp11 - tmp12;
-    tmp11 += tmp12;
-    tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276));     /* -c1 */
-    tmp11 += tmp12;
-    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));          /* c5 */
-    tmp10 += z2;
-    tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693));      /* c3+c1-c5 */
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*6] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*5] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*4] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3] = (int) RIGHT_SHIFT(tmp23, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 7 rows from work array, store into output array.
-   * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 7; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z1 <<= CONST_BITS;
-    z4 = (INT32) wsptr[4];
-    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
-    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
-    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
-
-    tmp10 = z1 + z2;
-    tmp11 = z1 + z3;
-    tmp12 = z1 - z4;
-
-    tmp23 = z1 - ((z2 + z3 - z4) << 1);          /* c0 = (c4+c12-c8)*2 */
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[6];
-
-    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
-
-    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
-    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
-    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
-	    MULTIPLY(z2, FIX(1.378756276));      /* c2 */
-
-    tmp20 = tmp10 + tmp13;
-    tmp26 = tmp10 - tmp13;
-    tmp21 = tmp11 + tmp14;
-    tmp25 = tmp11 - tmp14;
-    tmp22 = tmp12 + tmp15;
-    tmp24 = tmp12 - tmp15;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-    z4 <<= CONST_BITS;
-
-    tmp14 = z1 + z3;
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
-    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
-    tmp10 = tmp11 + tmp12 + z4 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
-    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
-    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
-    z1    -= z2;
-    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - z4;           /* c11 */
-    tmp16 += tmp15;
-    tmp13 = MULTIPLY(z2 + z3, - FIX(0.158341681)) - z4;    /* -c13 */
-    tmp11 += tmp13 - MULTIPLY(z2, FIX(0.424103948));       /* c3-c9-c13 */
-    tmp12 += tmp13 - MULTIPLY(z3, FIX(2.373959773));       /* c3+c5-c13 */
-    tmp13 = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
-    tmp14 += tmp13 + z4 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
-    tmp15 += tmp13 + MULTIPLY(z2, FIX(0.674957567));       /* c1+c11-c5 */
-
-    tmp13 = ((z1 - z3) << CONST_BITS) + z4;
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[13] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[12] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp26 + tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp26 - tmp16,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 12x6 output block.
- *
- * 6-point IDCT in pass 1 (columns), 12-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_12x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*6];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp10 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp10 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp12 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp20 = MULTIPLY(tmp12, FIX(0.707106781));   /* c4 */
-    tmp11 = tmp10 + tmp20;
-    tmp21 = RIGHT_SHIFT(tmp10 - tmp20 - tmp20, CONST_BITS-PASS1_BITS);
-    tmp20 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp10 = MULTIPLY(tmp20, FIX(1.224744871));   /* c2 */
-    tmp20 = tmp11 + tmp10;
-    tmp22 = tmp11 - tmp10;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp10 = tmp11 + ((z1 + z2) << CONST_BITS);
-    tmp12 = tmp11 + ((z3 - z2) << CONST_BITS);
-    tmp11 = (z1 - z2 - z3) << PASS1_BITS;
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*5] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*1] = (int) (tmp21 + tmp11);
-    wsptr[8*4] = (int) (tmp21 - tmp11);
-    wsptr[8*2] = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*3] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 6 rows from work array, store into output array.
-   * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 <<= CONST_BITS;
-
-    z4 = (INT32) wsptr[4];
-    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    z1 = (INT32) wsptr[2];
-    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
-    z1 <<= CONST_BITS;
-    z2 = (INT32) wsptr[6];
-    z2 <<= CONST_BITS;
-
-    tmp12 = z1 - z2;
-
-    tmp21 = z3 + tmp12;
-    tmp24 = z3 - tmp12;
-
-    tmp12 = z4 + z2;
-
-    tmp20 = tmp10 + tmp12;
-    tmp25 = tmp10 - tmp12;
-
-    tmp12 = z4 - z1 - z2;
-
-    tmp22 = tmp11 + tmp12;
-    tmp23 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
-    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
-
-    tmp10 = z1 + z3;
-    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
-    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
-    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
-    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
-    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
-    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
-    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
-	     MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
-
-    z1 -= z4;
-    z2 -= z3;
-    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
-    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
-    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
-
-    /* Final output stage */
-
-    outptr[0]  = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[11] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[1]  = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[10] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[2]  = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[9]  = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[3]  = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[8]  = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[4]  = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[7]  = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[5]  = range_limit[(int) RIGHT_SHIFT(tmp25 + tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-    outptr[6]  = range_limit[(int) RIGHT_SHIFT(tmp25 - tmp15,
-					       CONST_BITS+PASS1_BITS+3)
-			     & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 10x5 output block.
- *
- * 5-point IDCT in pass 1 (columns), 10-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_10x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*5];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp12 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp12 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp12 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp13 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp14 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */
-    z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */
-    z3 = tmp12 + z2;
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z1;
-    tmp12 -= z2 << 2;
-
-    /* Odd part */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));       /* c3 */
-    tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148));    /* c1-c3 */
-    tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899));    /* c1+c3 */
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) RIGHT_SHIFT(tmp10 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*4] = (int) RIGHT_SHIFT(tmp10 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*1] = (int) RIGHT_SHIFT(tmp11 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*3] = (int) RIGHT_SHIFT(tmp11 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[8*2] = (int) RIGHT_SHIFT(tmp12, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 5 rows from work array, store into output array.
-   * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 5; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 <<= CONST_BITS;
-    z4 = (INT32) wsptr[4];
-    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
-    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z2;
-
-    tmp22 = z3 - ((z1 - z2) << 1);               /* c0 = (c4-c8)*2 */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
-    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
-    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
-
-    tmp20 = tmp10 + tmp12;
-    tmp24 = tmp10 - tmp12;
-    tmp21 = tmp11 + tmp13;
-    tmp23 = tmp11 - tmp13;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    z3 <<= CONST_BITS;
-    z4 = (INT32) wsptr[7];
-
-    tmp11 = z2 + z4;
-    tmp13 = z2 - z4;
-
-    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
-    z4 = z3 + tmp12;
-
-    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
-    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
-    z4 = z3 - tmp12 - (tmp13 << (CONST_BITS - 1));
-
-    tmp12 = ((z1 - tmp13) << CONST_BITS) - z3;
-
-    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
-    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[9] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[8] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23 + tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp23 - tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp24 + tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp24 - tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 8;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 8x4 output block.
- *
- * 4-point IDCT in pass 1 (columns), 8-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_8x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*4];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 4-point IDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT].
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-
-    tmp10 = (tmp0 + tmp2) << PASS1_BITS;
-    tmp12 = (tmp0 - tmp2) << PASS1_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);               /* c6 */
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp0 = RIGHT_SHIFT(z1 + MULTIPLY(z2, FIX_0_765366865), /* c2-c6 */
-		       CONST_BITS-PASS1_BITS);
-    tmp2 = RIGHT_SHIFT(z1 - MULTIPLY(z3, FIX_1_847759065), /* c2+c6 */
-		       CONST_BITS-PASS1_BITS);
-
-    /* Final output stage */
-
-    wsptr[8*0] = (int) (tmp10 + tmp0);
-    wsptr[8*3] = (int) (tmp10 - tmp0);
-    wsptr[8*1] = (int) (tmp12 + tmp2);
-    wsptr[8*2] = (int) (tmp12 - tmp2);
-  }
-
-  /* Pass 2: process rows from work array, store into output array.
-   * Note that we must descale the results by a factor of 8 == 2**3,
-   * and also undo the PASS1_BITS scaling.
-   * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    /* Add fudge factor here for final descale. */
-    z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 = (INT32) wsptr[4];
-
-    tmp0 = (z2 + z3) << CONST_BITS;
-    tmp1 = (z2 - z3) << CONST_BITS;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = (INT32) wsptr[7];
-    tmp1 = (INT32) wsptr[5];
-    tmp2 = (INT32) wsptr[3];
-    tmp3 = (INT32) wsptr[1];
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 6x3 output block.
- *
- * 3-point IDCT in pass 1 (columns), 6-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_6x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[6*3];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
-    tmp10 = tmp0 + tmp12;
-    tmp2 = tmp0 - tmp12 - tmp12;
-
-    /* Odd part */
-
-    tmp12 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
-
-    /* Final output stage */
-
-    wsptr[6*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[6*2] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[6*1] = (int) RIGHT_SHIFT(tmp2, CONST_BITS-PASS1_BITS);
-  }
-  
-  /* Pass 2: process 3 rows from work array, store into output array.
-   * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 3; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-    tmp2 = (INT32) wsptr[4];
-    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
-    tmp1 = tmp0 + tmp10;
-    tmp11 = tmp0 - tmp10 - tmp10;
-    tmp10 = (INT32) wsptr[2];
-    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
-    tmp10 = tmp1 + tmp0;
-    tmp12 = tmp1 - tmp0;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
-    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
-    tmp1 = (z1 - z2 - z3) << CONST_BITS;
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 6;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 4x2 output block.
- *
- * 2-point IDCT in pass 1 (columns), 4-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_4x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp2, tmp10, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  INT32 * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  INT32 workspace[4*2];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array. */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp10 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-
-    /* Odd part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    /* Final output stage */
-
-    wsptr[4*0] = tmp10 + tmp0;
-    wsptr[4*1] = tmp10 - tmp0;
-  }
-
-  /* Pass 2: process 2 rows from work array, store into output array.
-   * 4-point IDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT].
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 2; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = wsptr[0] + (ONE << 2);
-    tmp2 = wsptr[2];
-
-    tmp10 = (tmp0 + tmp2) << CONST_BITS;
-    tmp12 = (tmp0 - tmp2) << CONST_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = wsptr[1];
-    z3 = wsptr[3];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);   /* c6 */
-    tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */
-    tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 4;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 2x1 output block.
- *
- * 1-point IDCT in pass 1 (columns), 2-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_2x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1;
-  ISLOW_MULT_TYPE * quantptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  SHIFT_TEMPS
-
-  /* Pass 1: empty. */
-
-  /* Pass 2: process 1 row from input, store into output array. */
-
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  outptr = output_buf[0] + output_col;
-
-  /* Even part */
-
-  tmp0 = DEQUANTIZE(coef_block[0], quantptr[0]);
-  /* Add fudge factor here for final descale. */
-  tmp0 += ONE << 2;
-
-  /* Odd part */
-
-  tmp1 = DEQUANTIZE(coef_block[1], quantptr[1]);
-
-  /* Final output stage */
-
-  outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3) & RANGE_MASK];
-  outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3) & RANGE_MASK];
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 8x16 output block.
- *
- * 16-point IDCT in pass 1 (columns), 8-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_8x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[8*16];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 16-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/32).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp1 = MULTIPLY(z1, FIX(1.306562965));      /* c4[16] = c2[8] */
-    tmp2 = MULTIPLY(z1, FIX_0_541196100);       /* c12[16] = c6[8] */
-
-    tmp10 = tmp0 + tmp1;
-    tmp11 = tmp0 - tmp1;
-    tmp12 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-    z3 = z1 - z2;
-    z4 = MULTIPLY(z3, FIX(0.275899379));        /* c14[16] = c7[8] */
-    z3 = MULTIPLY(z3, FIX(1.387039845));        /* c2[16] = c1[8] */
-
-    tmp0 = z3 + MULTIPLY(z2, FIX_2_562915447);  /* (c6+c2)[16] = (c3+c1)[8] */
-    tmp1 = z4 + MULTIPLY(z1, FIX_0_899976223);  /* (c6-c14)[16] = (c3-c7)[8] */
-    tmp2 = z3 - MULTIPLY(z1, FIX(0.601344887)); /* (c2-c10)[16] = (c1-c5)[8] */
-    tmp3 = z4 - MULTIPLY(z2, FIX(0.509795579)); /* (c10-c14)[16] = (c5-c7)[8] */
-
-    tmp20 = tmp10 + tmp0;
-    tmp27 = tmp10 - tmp0;
-    tmp21 = tmp12 + tmp1;
-    tmp26 = tmp12 - tmp1;
-    tmp22 = tmp13 + tmp2;
-    tmp25 = tmp13 - tmp2;
-    tmp23 = tmp11 + tmp3;
-    tmp24 = tmp11 - tmp3;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = z1 + z3;
-
-    tmp1  = MULTIPLY(z1 + z2, FIX(1.353318001));   /* c3 */
-    tmp2  = MULTIPLY(tmp11,   FIX(1.247225013));   /* c5 */
-    tmp3  = MULTIPLY(z1 + z4, FIX(1.093201867));   /* c7 */
-    tmp10 = MULTIPLY(z1 - z4, FIX(0.897167586));   /* c9 */
-    tmp11 = MULTIPLY(tmp11,   FIX(0.666655658));   /* c11 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.410524528));   /* c13 */
-    tmp0  = tmp1 + tmp2 + tmp3 -
-	    MULTIPLY(z1, FIX(2.286341144));        /* c7+c5+c3-c1 */
-    tmp13 = tmp10 + tmp11 + tmp12 -
-	    MULTIPLY(z1, FIX(1.835730603));        /* c9+c11+c13-c15 */
-    z1    = MULTIPLY(z2 + z3, FIX(0.138617169));   /* c15 */
-    tmp1  += z1 + MULTIPLY(z2, FIX(0.071888074));  /* c9+c11-c3-c15 */
-    tmp2  += z1 - MULTIPLY(z3, FIX(1.125726048));  /* c5+c7+c15-c3 */
-    z1    = MULTIPLY(z3 - z2, FIX(1.407403738));   /* c1 */
-    tmp11 += z1 - MULTIPLY(z3, FIX(0.766367282));  /* c1+c11-c9-c13 */
-    tmp12 += z1 + MULTIPLY(z2, FIX(1.971951411));  /* c1+c5+c13-c7 */
-    z2    += z4;
-    z1    = MULTIPLY(z2, - FIX(0.666655658));      /* -c11 */
-    tmp1  += z1;
-    tmp3  += z1 + MULTIPLY(z4, FIX(1.065388962));  /* c3+c11+c15-c7 */
-    z2    = MULTIPLY(z2, - FIX(1.247225013));      /* -c5 */
-    tmp10 += z2 + MULTIPLY(z4, FIX(3.141271809));  /* c1+c5+c9-c13 */
-    tmp12 += z2;
-    z2    = MULTIPLY(z3 + z4, - FIX(1.353318001)); /* -c3 */
-    tmp2  += z2;
-    tmp3  += z2;
-    z2    = MULTIPLY(z4 - z3, FIX(0.410524528));   /* c13 */
-    tmp10 += z2;
-    tmp11 += z2;
-
-    /* Final output stage */
-
-    wsptr[8*0]  = (int) RIGHT_SHIFT(tmp20 + tmp0,  CONST_BITS-PASS1_BITS);
-    wsptr[8*15] = (int) RIGHT_SHIFT(tmp20 - tmp0,  CONST_BITS-PASS1_BITS);
-    wsptr[8*1]  = (int) RIGHT_SHIFT(tmp21 + tmp1,  CONST_BITS-PASS1_BITS);
-    wsptr[8*14] = (int) RIGHT_SHIFT(tmp21 - tmp1,  CONST_BITS-PASS1_BITS);
-    wsptr[8*2]  = (int) RIGHT_SHIFT(tmp22 + tmp2,  CONST_BITS-PASS1_BITS);
-    wsptr[8*13] = (int) RIGHT_SHIFT(tmp22 - tmp2,  CONST_BITS-PASS1_BITS);
-    wsptr[8*3]  = (int) RIGHT_SHIFT(tmp23 + tmp3,  CONST_BITS-PASS1_BITS);
-    wsptr[8*12] = (int) RIGHT_SHIFT(tmp23 - tmp3,  CONST_BITS-PASS1_BITS);
-    wsptr[8*4]  = (int) RIGHT_SHIFT(tmp24 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*11] = (int) RIGHT_SHIFT(tmp24 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[8*5]  = (int) RIGHT_SHIFT(tmp25 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*10] = (int) RIGHT_SHIFT(tmp25 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[8*6]  = (int) RIGHT_SHIFT(tmp26 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*9]  = (int) RIGHT_SHIFT(tmp26 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[8*7]  = (int) RIGHT_SHIFT(tmp27 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[8*8]  = (int) RIGHT_SHIFT(tmp27 - tmp13, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process rows from work array, store into output array.
-   * Note that we must descale the results by a factor of 8 == 2**3,
-   * and also undo the PASS1_BITS scaling.
-   * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 16; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = (INT32) wsptr[2];
-    z3 = (INT32) wsptr[6];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    /* Add fudge factor here for final descale. */
-    z2 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    z3 = (INT32) wsptr[4];
-
-    tmp0 = (z2 + z3) << CONST_BITS;
-    tmp1 = (z2 - z3) << CONST_BITS;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = (INT32) wsptr[7];
-    tmp1 = (INT32) wsptr[5];
-    tmp2 = (INT32) wsptr[3];
-    tmp3 = (INT32) wsptr[1];
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[7] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp3,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp1,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp13 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp13 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += DCTSIZE;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 7x14 output block.
- *
- * 14-point IDCT in pass 1 (columns), 7-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_7x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[7*14];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 14-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/28).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 7; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z1 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z1 += ONE << (CONST_BITS-PASS1_BITS-1);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z2 = MULTIPLY(z4, FIX(1.274162392));         /* c4 */
-    z3 = MULTIPLY(z4, FIX(0.314692123));         /* c12 */
-    z4 = MULTIPLY(z4, FIX(0.881747734));         /* c8 */
-
-    tmp10 = z1 + z2;
-    tmp11 = z1 + z3;
-    tmp12 = z1 - z4;
-
-    tmp23 = RIGHT_SHIFT(z1 - ((z2 + z3 - z4) << 1), /* c0 = (c4+c12-c8)*2 */
-			CONST_BITS-PASS1_BITS);
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z3 = MULTIPLY(z1 + z2, FIX(1.105676686));    /* c6 */
-
-    tmp13 = z3 + MULTIPLY(z1, FIX(0.273079590)); /* c2-c6 */
-    tmp14 = z3 - MULTIPLY(z2, FIX(1.719280954)); /* c6+c10 */
-    tmp15 = MULTIPLY(z1, FIX(0.613604268)) -     /* c10 */
-	    MULTIPLY(z2, FIX(1.378756276));      /* c2 */
-
-    tmp20 = tmp10 + tmp13;
-    tmp26 = tmp10 - tmp13;
-    tmp21 = tmp11 + tmp14;
-    tmp25 = tmp11 - tmp14;
-    tmp22 = tmp12 + tmp15;
-    tmp24 = tmp12 - tmp15;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp13 = z4 << CONST_BITS;
-
-    tmp14 = z1 + z3;
-    tmp11 = MULTIPLY(z1 + z2, FIX(1.334852607));           /* c3 */
-    tmp12 = MULTIPLY(tmp14, FIX(1.197448846));             /* c5 */
-    tmp10 = tmp11 + tmp12 + tmp13 - MULTIPLY(z1, FIX(1.126980169)); /* c3+c5-c1 */
-    tmp14 = MULTIPLY(tmp14, FIX(0.752406978));             /* c9 */
-    tmp16 = tmp14 - MULTIPLY(z1, FIX(1.061150426));        /* c9+c11-c13 */
-    z1    -= z2;
-    tmp15 = MULTIPLY(z1, FIX(0.467085129)) - tmp13;        /* c11 */
-    tmp16 += tmp15;
-    z1    += z4;
-    z4    = MULTIPLY(z2 + z3, - FIX(0.158341681)) - tmp13; /* -c13 */
-    tmp11 += z4 - MULTIPLY(z2, FIX(0.424103948));          /* c3-c9-c13 */
-    tmp12 += z4 - MULTIPLY(z3, FIX(2.373959773));          /* c3+c5-c13 */
-    z4    = MULTIPLY(z3 - z2, FIX(1.405321284));           /* c1 */
-    tmp14 += z4 + tmp13 - MULTIPLY(z3, FIX(1.6906431334)); /* c1+c9-c11 */
-    tmp15 += z4 + MULTIPLY(z2, FIX(0.674957567));          /* c1+c11-c5 */
-
-    tmp13 = (z1 - z3) << PASS1_BITS;
-
-    /* Final output stage */
-
-    wsptr[7*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[7*13] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[7*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[7*12] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[7*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[7*11] = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[7*3]  = (int) (tmp23 + tmp13);
-    wsptr[7*10] = (int) (tmp23 - tmp13);
-    wsptr[7*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[7*9]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[7*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[7*8]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[7*6]  = (int) RIGHT_SHIFT(tmp26 + tmp16, CONST_BITS-PASS1_BITS);
-    wsptr[7*7]  = (int) RIGHT_SHIFT(tmp26 - tmp16, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 14 rows from work array, store into output array.
-   * 7-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/14).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 14; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp23 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp23 <<= CONST_BITS;
-
-    z1 = (INT32) wsptr[2];
-    z2 = (INT32) wsptr[4];
-    z3 = (INT32) wsptr[6];
-
-    tmp20 = MULTIPLY(z2 - z3, FIX(0.881747734));       /* c4 */
-    tmp22 = MULTIPLY(z1 - z2, FIX(0.314692123));       /* c6 */
-    tmp21 = tmp20 + tmp22 + tmp23 - MULTIPLY(z2, FIX(1.841218003)); /* c2+c4-c6 */
-    tmp10 = z1 + z3;
-    z2 -= tmp10;
-    tmp10 = MULTIPLY(tmp10, FIX(1.274162392)) + tmp23; /* c2 */
-    tmp20 += tmp10 - MULTIPLY(z3, FIX(0.077722536));   /* c2-c4-c6 */
-    tmp22 += tmp10 - MULTIPLY(z1, FIX(2.470602249));   /* c2+c4+c6 */
-    tmp23 += MULTIPLY(z2, FIX(1.414213562));           /* c0 */
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-
-    tmp11 = MULTIPLY(z1 + z2, FIX(0.935414347));       /* (c3+c1-c5)/2 */
-    tmp12 = MULTIPLY(z1 - z2, FIX(0.170262339));       /* (c3+c5-c1)/2 */
-    tmp10 = tmp11 - tmp12;
-    tmp11 += tmp12;
-    tmp12 = MULTIPLY(z2 + z3, - FIX(1.378756276));     /* -c1 */
-    tmp11 += tmp12;
-    z2 = MULTIPLY(z1 + z3, FIX(0.613604268));          /* c5 */
-    tmp10 += z2;
-    tmp12 += z2 + MULTIPLY(z3, FIX(1.870828693));      /* c3+c1-c5 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[6] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp23,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 7;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 6x12 output block.
- *
- * 12-point IDCT in pass 1 (columns), 6-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_6x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
-  INT32 z1, z2, z3, z4;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[6*12];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 12-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/24).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
-
-    tmp10 = z3 + z4;
-    tmp11 = z3 - z4;
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
-    z1 <<= CONST_BITS;
-    z2 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-    z2 <<= CONST_BITS;
-
-    tmp12 = z1 - z2;
-
-    tmp21 = z3 + tmp12;
-    tmp24 = z3 - tmp12;
-
-    tmp12 = z4 + z2;
-
-    tmp20 = tmp10 + tmp12;
-    tmp25 = tmp10 - tmp12;
-
-    tmp12 = z4 - z1 - z2;
-
-    tmp22 = tmp11 + tmp12;
-    tmp23 = tmp11 - tmp12;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = MULTIPLY(z2, FIX(1.306562965));                  /* c3 */
-    tmp14 = MULTIPLY(z2, - FIX_0_541196100);                 /* -c9 */
-
-    tmp10 = z1 + z3;
-    tmp15 = MULTIPLY(tmp10 + z4, FIX(0.860918669));          /* c7 */
-    tmp12 = tmp15 + MULTIPLY(tmp10, FIX(0.261052384));       /* c5-c7 */
-    tmp10 = tmp12 + tmp11 + MULTIPLY(z1, FIX(0.280143716));  /* c1-c5 */
-    tmp13 = MULTIPLY(z3 + z4, - FIX(1.045510580));           /* -(c7+c11) */
-    tmp12 += tmp13 + tmp14 - MULTIPLY(z3, FIX(1.478575242)); /* c1+c5-c7-c11 */
-    tmp13 += tmp15 - tmp11 + MULTIPLY(z4, FIX(1.586706681)); /* c1+c11 */
-    tmp15 += tmp14 - MULTIPLY(z1, FIX(0.676326758)) -        /* c7-c11 */
-	     MULTIPLY(z4, FIX(1.982889723));                 /* c5+c7 */
-
-    z1 -= z4;
-    z2 -= z3;
-    z3 = MULTIPLY(z1 + z2, FIX_0_541196100);                 /* c9 */
-    tmp11 = z3 + MULTIPLY(z1, FIX_0_765366865);              /* c3-c9 */
-    tmp14 = z3 - MULTIPLY(z2, FIX_1_847759065);              /* c3+c9 */
-
-    /* Final output stage */
-
-    wsptr[6*0]  = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[6*11] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[6*1]  = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[6*10] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[6*2]  = (int) RIGHT_SHIFT(tmp22 + tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[6*9]  = (int) RIGHT_SHIFT(tmp22 - tmp12, CONST_BITS-PASS1_BITS);
-    wsptr[6*3]  = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[6*8]  = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[6*4]  = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[6*7]  = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[6*5]  = (int) RIGHT_SHIFT(tmp25 + tmp15, CONST_BITS-PASS1_BITS);
-    wsptr[6*6]  = (int) RIGHT_SHIFT(tmp25 - tmp15, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 12 rows from work array, store into output array.
-   * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 12; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp10 <<= CONST_BITS;
-    tmp12 = (INT32) wsptr[4];
-    tmp20 = MULTIPLY(tmp12, FIX(0.707106781));   /* c4 */
-    tmp11 = tmp10 + tmp20;
-    tmp21 = tmp10 - tmp20 - tmp20;
-    tmp20 = (INT32) wsptr[2];
-    tmp10 = MULTIPLY(tmp20, FIX(1.224744871));   /* c2 */
-    tmp20 = tmp11 + tmp10;
-    tmp22 = tmp11 - tmp10;
-
-    /* Odd part */
-
-    z1 = (INT32) wsptr[1];
-    z2 = (INT32) wsptr[3];
-    z3 = (INT32) wsptr[5];
-    tmp11 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp10 = tmp11 + ((z1 + z2) << CONST_BITS);
-    tmp12 = tmp11 + ((z3 - z2) << CONST_BITS);
-    tmp11 = (z1 - z2 - z3) << CONST_BITS;
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp20 + tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[5] = range_limit[(int) RIGHT_SHIFT(tmp20 - tmp10,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp21 + tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp21 - tmp11,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp22 + tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp22 - tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 6;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 5x10 output block.
- *
- * 10-point IDCT in pass 1 (columns), 5-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_5x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		JCOEFPTR coef_block,
-		JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp10, tmp11, tmp12, tmp13, tmp14;
-  INT32 tmp20, tmp21, tmp22, tmp23, tmp24;
-  INT32 z1, z2, z3, z4, z5;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[5*10];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 10-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/20).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 5; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    z3 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z3 += ONE << (CONST_BITS-PASS1_BITS-1);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z1 = MULTIPLY(z4, FIX(1.144122806));         /* c4 */
-    z2 = MULTIPLY(z4, FIX(0.437016024));         /* c8 */
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z2;
-
-    tmp22 = RIGHT_SHIFT(z3 - ((z1 - z2) << 1),   /* c0 = (c4-c8)*2 */
-			CONST_BITS-PASS1_BITS);
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));    /* c6 */
-    tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
-    tmp13 = z1 - MULTIPLY(z3, FIX(2.176250899)); /* c2+c6 */
-
-    tmp20 = tmp10 + tmp12;
-    tmp24 = tmp10 - tmp12;
-    tmp21 = tmp11 + tmp13;
-    tmp23 = tmp11 - tmp13;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    z4 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-
-    tmp11 = z2 + z4;
-    tmp13 = z2 - z4;
-
-    tmp12 = MULTIPLY(tmp13, FIX(0.309016994));        /* (c3-c7)/2 */
-    z5 = z3 << CONST_BITS;
-
-    z2 = MULTIPLY(tmp11, FIX(0.951056516));           /* (c3+c7)/2 */
-    z4 = z5 + tmp12;
-
-    tmp10 = MULTIPLY(z1, FIX(1.396802247)) + z2 + z4; /* c1 */
-    tmp14 = MULTIPLY(z1, FIX(0.221231742)) - z2 + z4; /* c9 */
-
-    z2 = MULTIPLY(tmp11, FIX(0.587785252));           /* (c1-c9)/2 */
-    z4 = z5 - tmp12 - (tmp13 << (CONST_BITS - 1));
-
-    tmp12 = (z1 - tmp13 - z3) << PASS1_BITS;
-
-    tmp11 = MULTIPLY(z1, FIX(1.260073511)) - z2 - z4; /* c3 */
-    tmp13 = MULTIPLY(z1, FIX(0.642039522)) - z2 + z4; /* c7 */
-
-    /* Final output stage */
-
-    wsptr[5*0] = (int) RIGHT_SHIFT(tmp20 + tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[5*9] = (int) RIGHT_SHIFT(tmp20 - tmp10, CONST_BITS-PASS1_BITS);
-    wsptr[5*1] = (int) RIGHT_SHIFT(tmp21 + tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[5*8] = (int) RIGHT_SHIFT(tmp21 - tmp11, CONST_BITS-PASS1_BITS);
-    wsptr[5*2] = (int) (tmp22 + tmp12);
-    wsptr[5*7] = (int) (tmp22 - tmp12);
-    wsptr[5*3] = (int) RIGHT_SHIFT(tmp23 + tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[5*6] = (int) RIGHT_SHIFT(tmp23 - tmp13, CONST_BITS-PASS1_BITS);
-    wsptr[5*4] = (int) RIGHT_SHIFT(tmp24 + tmp14, CONST_BITS-PASS1_BITS);
-    wsptr[5*5] = (int) RIGHT_SHIFT(tmp24 - tmp14, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 10 rows from work array, store into output array.
-   * 5-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/10).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 10; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp12 <<= CONST_BITS;
-    tmp13 = (INT32) wsptr[2];
-    tmp14 = (INT32) wsptr[4];
-    z1 = MULTIPLY(tmp13 + tmp14, FIX(0.790569415)); /* (c2+c4)/2 */
-    z2 = MULTIPLY(tmp13 - tmp14, FIX(0.353553391)); /* (c2-c4)/2 */
-    z3 = tmp12 + z2;
-    tmp10 = z3 + z1;
-    tmp11 = z3 - z1;
-    tmp12 -= z2 << 2;
-
-    /* Odd part */
-
-    z2 = (INT32) wsptr[1];
-    z3 = (INT32) wsptr[3];
-
-    z1 = MULTIPLY(z2 + z3, FIX(0.831253876));       /* c3 */
-    tmp13 = z1 + MULTIPLY(z2, FIX(0.513743148));    /* c1-c3 */
-    tmp14 = z1 - MULTIPLY(z3, FIX(2.176250899));    /* c1+c3 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[4] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp13,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp11 + tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp11 - tmp14,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 5;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 4x8 output block.
- *
- * 8-point IDCT in pass 1 (columns), 4-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_4x8 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp3;
-  INT32 tmp10, tmp11, tmp12, tmp13;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[4*8];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * Note results are scaled up by sqrt(8) compared to a true IDCT;
-   * furthermore, we scale the results by 2**PASS1_BITS.
-   * 8-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/16).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 4; ctr > 0; ctr--) {
-    /* Due to quantization, we will usually find that many of the input
-     * coefficients are zero, especially the AC terms.  We can exploit this
-     * by short-circuiting the IDCT calculation for any column in which all
-     * the AC terms are zero.  In that case each output is equal to the
-     * DC coefficient (with scale factor as needed).
-     * With typical images and quantization tables, half or more of the
-     * column DCT calculations can be simplified this way.
-     */
-
-    if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
-	inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
-	inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
-	inptr[DCTSIZE*7] == 0) {
-      /* AC terms all zero */
-      int dcval = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]) << PASS1_BITS;
-
-      wsptr[4*0] = dcval;
-      wsptr[4*1] = dcval;
-      wsptr[4*2] = dcval;
-      wsptr[4*3] = dcval;
-      wsptr[4*4] = dcval;
-      wsptr[4*5] = dcval;
-      wsptr[4*6] = dcval;
-      wsptr[4*7] = dcval;
-
-      inptr++;			/* advance pointers to next column */
-      quantptr++;
-      wsptr++;
-      continue;
-    }
-
-    /* Even part: reverse the even part of the forward DCT.
-     * The rotator is c(-6).
-     */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);       /* c6 */
-    tmp2 = z1 + MULTIPLY(z2, FIX_0_765366865);     /* c2-c6 */
-    tmp3 = z1 - MULTIPLY(z3, FIX_1_847759065);     /* c2+c6 */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    z2 <<= CONST_BITS;
-    z3 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    z2 += ONE << (CONST_BITS-PASS1_BITS-1);
-
-    tmp0 = z2 + z3;
-    tmp1 = z2 - z3;
-
-    tmp10 = tmp0 + tmp2;
-    tmp13 = tmp0 - tmp2;
-    tmp11 = tmp1 + tmp3;
-    tmp12 = tmp1 - tmp3;
-
-    /* Odd part per figure 8; the matrix is unitary and hence its
-     * transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively.
-     */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
-    tmp1 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    tmp3 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-    z2 = tmp0 + tmp2;
-    z3 = tmp1 + tmp3;
-
-    z1 = MULTIPLY(z2 + z3, FIX_1_175875602);       /*  c3 */
-    z2 = MULTIPLY(z2, - FIX_1_961570560);          /* -c3-c5 */
-    z3 = MULTIPLY(z3, - FIX_0_390180644);          /* -c3+c5 */
-    z2 += z1;
-    z3 += z1;
-
-    z1 = MULTIPLY(tmp0 + tmp3, - FIX_0_899976223); /* -c3+c7 */
-    tmp0 = MULTIPLY(tmp0, FIX_0_298631336);        /* -c1+c3+c5-c7 */
-    tmp3 = MULTIPLY(tmp3, FIX_1_501321110);        /*  c1+c3-c5-c7 */
-    tmp0 += z1 + z2;
-    tmp3 += z1 + z3;
-
-    z1 = MULTIPLY(tmp1 + tmp2, - FIX_2_562915447); /* -c1-c3 */
-    tmp1 = MULTIPLY(tmp1, FIX_2_053119869);        /*  c1+c3-c5+c7 */
-    tmp2 = MULTIPLY(tmp2, FIX_3_072711026);        /*  c1+c3+c5-c7 */
-    tmp1 += z1 + z3;
-    tmp2 += z1 + z2;
-
-    /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */
-
-    wsptr[4*0] = (int) RIGHT_SHIFT(tmp10 + tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[4*7] = (int) RIGHT_SHIFT(tmp10 - tmp3, CONST_BITS-PASS1_BITS);
-    wsptr[4*1] = (int) RIGHT_SHIFT(tmp11 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[4*6] = (int) RIGHT_SHIFT(tmp11 - tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[4*2] = (int) RIGHT_SHIFT(tmp12 + tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[4*5] = (int) RIGHT_SHIFT(tmp12 - tmp1, CONST_BITS-PASS1_BITS);
-    wsptr[4*3] = (int) RIGHT_SHIFT(tmp13 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[4*4] = (int) RIGHT_SHIFT(tmp13 - tmp0, CONST_BITS-PASS1_BITS);
-
-    inptr++;			/* advance pointers to next column */
-    quantptr++;
-    wsptr++;
-  }
-
-  /* Pass 2: process 8 rows from work array, store into output array.
-   * 4-point IDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT].
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 8; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp2 = (INT32) wsptr[2];
-
-    tmp10 = (tmp0 + tmp2) << CONST_BITS;
-    tmp12 = (tmp0 - tmp2) << CONST_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = (INT32) wsptr[1];
-    z3 = (INT32) wsptr[3];
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);   /* c6 */
-    tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */
-    tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[3] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp12 + tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp12 - tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 4;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a reduced-size 3x6 output block.
- *
- * 6-point IDCT in pass 1 (columns), 3-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_3x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  int * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  int workspace[3*6];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 6-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/12).
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 3; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp0 <<= CONST_BITS;
-    /* Add fudge factor here for final descale. */
-    tmp0 += ONE << (CONST_BITS-PASS1_BITS-1);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
-    tmp10 = MULTIPLY(tmp2, FIX(0.707106781));   /* c4 */
-    tmp1 = tmp0 + tmp10;
-    tmp11 = RIGHT_SHIFT(tmp0 - tmp10 - tmp10, CONST_BITS-PASS1_BITS);
-    tmp10 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-    tmp0 = MULTIPLY(tmp10, FIX(1.224744871));   /* c2 */
-    tmp10 = tmp1 + tmp0;
-    tmp12 = tmp1 - tmp0;
-
-    /* Odd part */
-
-    z1 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z2 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
-    tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
-    tmp0 = tmp1 + ((z1 + z2) << CONST_BITS);
-    tmp2 = tmp1 + ((z3 - z2) << CONST_BITS);
-    tmp1 = (z1 - z2 - z3) << PASS1_BITS;
-
-    /* Final output stage */
-
-    wsptr[3*0] = (int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[3*5] = (int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS-PASS1_BITS);
-    wsptr[3*1] = (int) (tmp11 + tmp1);
-    wsptr[3*4] = (int) (tmp11 - tmp1);
-    wsptr[3*2] = (int) RIGHT_SHIFT(tmp12 + tmp2, CONST_BITS-PASS1_BITS);
-    wsptr[3*3] = (int) RIGHT_SHIFT(tmp12 - tmp2, CONST_BITS-PASS1_BITS);
-  }
-
-  /* Pass 2: process 6 rows from work array, store into output array.
-   * 3-point IDCT kernel, cK represents sqrt(2) * cos(K*pi/6).
-   */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 6; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2));
-    tmp0 <<= CONST_BITS;
-    tmp2 = (INT32) wsptr[2];
-    tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
-    tmp10 = tmp0 + tmp12;
-    tmp2 = tmp0 - tmp12 - tmp12;
-
-    /* Odd part */
-
-    tmp12 = (INT32) wsptr[1];
-    tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[2] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp2,
-					      CONST_BITS+PASS1_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 3;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 2x4 output block.
- *
- * 4-point IDCT in pass 1 (columns), 2-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_2x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp2, tmp10, tmp12;
-  INT32 z1, z2, z3;
-  JCOEFPTR inptr;
-  ISLOW_MULT_TYPE * quantptr;
-  INT32 * wsptr;
-  JSAMPROW outptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  int ctr;
-  INT32 workspace[2*4];	/* buffers data between passes */
-  SHIFT_TEMPS
-
-  /* Pass 1: process columns from input, store into work array.
-   * 4-point IDCT kernel,
-   * cK represents sqrt(2) * cos(K*pi/16) [refers to 8-point IDCT].
-   */
-
-  inptr = coef_block;
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-  wsptr = workspace;
-  for (ctr = 0; ctr < 2; ctr++, inptr++, quantptr++, wsptr++) {
-    /* Even part */
-
-    tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
-    tmp2 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
-
-    tmp10 = (tmp0 + tmp2) << CONST_BITS;
-    tmp12 = (tmp0 - tmp2) << CONST_BITS;
-
-    /* Odd part */
-    /* Same rotation as in the even part of the 8x8 LL&M IDCT */
-
-    z2 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
-    z3 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
-
-    z1 = MULTIPLY(z2 + z3, FIX_0_541196100);   /* c6 */
-    tmp0 = z1 + MULTIPLY(z2, FIX_0_765366865); /* c2-c6 */
-    tmp2 = z1 - MULTIPLY(z3, FIX_1_847759065); /* c2+c6 */
-
-    /* Final output stage */
-
-    wsptr[2*0] = tmp10 + tmp0;
-    wsptr[2*3] = tmp10 - tmp0;
-    wsptr[2*1] = tmp12 + tmp2;
-    wsptr[2*2] = tmp12 - tmp2;
-  }
-
-  /* Pass 2: process 4 rows from work array, store into output array. */
-
-  wsptr = workspace;
-  for (ctr = 0; ctr < 4; ctr++) {
-    outptr = output_buf[ctr] + output_col;
-
-    /* Even part */
-
-    /* Add fudge factor here for final descale. */
-    tmp10 = wsptr[0] + (ONE << (CONST_BITS+2));
-
-    /* Odd part */
-
-    tmp0 = wsptr[1];
-
-    /* Final output stage */
-
-    outptr[0] = range_limit[(int) RIGHT_SHIFT(tmp10 + tmp0, CONST_BITS+3)
-			    & RANGE_MASK];
-    outptr[1] = range_limit[(int) RIGHT_SHIFT(tmp10 - tmp0, CONST_BITS+3)
-			    & RANGE_MASK];
-
-    wsptr += 2;		/* advance pointer to next row */
-  }
-}
-
-
-/*
- * Perform dequantization and inverse DCT on one block of coefficients,
- * producing a 1x2 output block.
- *
- * 2-point IDCT in pass 1 (columns), 1-point in pass 2 (rows).
- */
-
-GLOBAL(void)
-jpeg_idct_1x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
-	       JCOEFPTR coef_block,
-	       JSAMPARRAY output_buf, JDIMENSION output_col)
-{
-  INT32 tmp0, tmp1;
-  ISLOW_MULT_TYPE * quantptr;
-  JSAMPLE *range_limit = IDCT_range_limit(cinfo);
-  SHIFT_TEMPS
-
-  /* Process 1 column from input, store into output array. */
-
-  quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
-
-  /* Even part */
-    
-  tmp0 = DEQUANTIZE(coef_block[DCTSIZE*0], quantptr[DCTSIZE*0]);
-  /* Add fudge factor here for final descale. */
-  tmp0 += ONE << 2;
-
-  /* Odd part */
-
-  tmp1 = DEQUANTIZE(coef_block[DCTSIZE*1], quantptr[DCTSIZE*1]);
-
-  /* Final output stage */
-
-  output_buf[0][output_col] = range_limit[(int) RIGHT_SHIFT(tmp0 + tmp1, 3)
-					  & RANGE_MASK];
-  output_buf[1][output_col] = range_limit[(int) RIGHT_SHIFT(tmp0 - tmp1, 3)
-					  & RANGE_MASK];
-}
-
-#endif /* IDCT_SCALING_SUPPORTED */
-#endif /* DCT_ISLOW_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jinclude.h
+++ /dev/null
@@ -1,91 +1,0 @@
-/*
- * jinclude.h
- *
- * Copyright (C) 1991-1994, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file exists to provide a single place to fix any problems with
- * including the wrong system include files.  (Common problems are taken
- * care of by the standard jconfig symbols, but on really weird systems
- * you may have to edit this file.)
- *
- * NOTE: this file is NOT intended to be included by applications using the
- * JPEG library.  Most applications need only include jpeglib.h.
- */
-
-
-/* Include auto-config file to find out which system include files we need. */
-
-#include "jconfig.h"		/* auto configuration options */
-#define JCONFIG_INCLUDED	/* so that jpeglib.h doesn't do it again */
-
-/*
- * We need the NULL macro and size_t typedef.
- * On an ANSI-conforming system it is sufficient to include <stddef.h>.
- * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to
- * pull in <sys/types.h> as well.
- * Note that the core JPEG library does not require <stdio.h>;
- * only the default error handler and data source/destination modules do.
- * But we must pull it in because of the references to FILE in jpeglib.h.
- * You can remove those references if you want to compile without <stdio.h>.
- */
-
-#ifdef HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef NEED_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#include <stdio.h>
-
-/*
- * We need memory copying and zeroing functions, plus strncpy().
- * ANSI and System V implementations declare these in <string.h>.
- * BSD doesn't have the mem() functions, but it does have bcopy()/bzero().
- * Some systems may declare memset and memcpy in <memory.h>.
- *
- * NOTE: we assume the size parameters to these functions are of type size_t.
- * Change the casts in these macros if not!
- */
-
-#ifdef NEED_BSD_STRINGS
-
-#include <strings.h>
-#define MEMZERO(target,size)	bzero((void *)(target), (size_t)(size))
-#define MEMCOPY(dest,src,size)	bcopy((const void *)(src), (void *)(dest), (size_t)(size))
-
-#else /* not BSD, assume ANSI/SysV string lib */
-
-#include <string.h>
-#define MEMZERO(target,size)	memset((void *)(target), 0, (size_t)(size))
-#define MEMCOPY(dest,src,size)	memcpy((void *)(dest), (const void *)(src), (size_t)(size))
-
-#endif
-
-/*
- * In ANSI C, and indeed any rational implementation, size_t is also the
- * type returned by sizeof().  However, it seems there are some irrational
- * implementations out there, in which sizeof() returns an int even though
- * size_t is defined as long or unsigned long.  To ensure consistent results
- * we always use this SIZEOF() macro in place of using sizeof() directly.
- */
-
-#define SIZEOF(object)	((size_t) sizeof(object))
-
-/*
- * The modules that use fread() and fwrite() always invoke them through
- * these macros.  On some systems you may need to twiddle the argument casts.
- * CAUTION: argument order is different from underlying functions!
- */
-
-#define JFREAD(file,buf,sizeofbuf)  \
-  ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
-#define JFWRITE(file,buf,sizeofbuf)  \
-  ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
--- a/DoConfig/fltk/jpeg/jmemmgr.c
+++ /dev/null
@@ -1,1119 +1,0 @@
-/*
- * jmemmgr.c
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 2011-2012 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains the JPEG system-independent memory management
- * routines.  This code is usable across a wide variety of machines; most
- * of the system dependencies have been isolated in a separate file.
- * The major functions provided here are:
- *   * pool-based allocation and freeing of memory;
- *   * policy decisions about how to divide available memory among the
- *     virtual arrays;
- *   * control logic for swapping virtual arrays between main memory and
- *     backing storage.
- * The separate system-dependent file provides the actual backing-storage
- * access code, and it contains the policy decision about how much total
- * main memory to use.
- * This file is system-dependent in the sense that some of its functions
- * are unnecessary in some systems.  For example, if there is enough virtual
- * memory so that backing storage will never be used, much of the virtual
- * array control logic could be removed.  (Of course, if you have that much
- * memory then you shouldn't care about a little bit of unused code...)
- */
-
-#define JPEG_INTERNALS
-#define AM_MEMORY_MANAGER	/* we define jvirt_Xarray_control structs */
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jmemsys.h"		/* import the system-dependent declarations */
-
-#ifndef NO_GETENV
-#ifndef HAVE_STDLIB_H		/* <stdlib.h> should declare getenv() */
-extern char * getenv JPP((const char * name));
-#endif
-#endif
-
-
-/*
- * Some important notes:
- *   The allocation routines provided here must never return NULL.
- *   They should exit to error_exit if unsuccessful.
- *
- *   It's not a good idea to try to merge the sarray and barray routines,
- *   even though they are textually almost the same, because samples are
- *   usually stored as bytes while coefficients are shorts or ints.  Thus,
- *   in machines where byte pointers have a different representation from
- *   word pointers, the resulting machine code could not be the same.
- */
-
-
-/*
- * Many machines require storage alignment: longs must start on 4-byte
- * boundaries, doubles on 8-byte boundaries, etc.  On such machines, malloc()
- * always returns pointers that are multiples of the worst-case alignment
- * requirement, and we had better do so too.
- * There isn't any really portable way to determine the worst-case alignment
- * requirement.  This module assumes that the alignment requirement is
- * multiples of sizeof(ALIGN_TYPE).
- * By default, we define ALIGN_TYPE as double.  This is necessary on some
- * workstations (where doubles really do need 8-byte alignment) and will work
- * fine on nearly everything.  If your machine has lesser alignment needs,
- * you can save a few bytes by making ALIGN_TYPE smaller.
- * The only place I know of where this will NOT work is certain Macintosh
- * 680x0 compilers that define double as a 10-byte IEEE extended float.
- * Doing 10-byte alignment is counterproductive because longwords won't be
- * aligned well.  Put "#define ALIGN_TYPE long" in jconfig.h if you have
- * such a compiler.
- */
-
-#ifndef ALIGN_TYPE		/* so can override from jconfig.h */
-#define ALIGN_TYPE  double
-#endif
-
-
-/*
- * We allocate objects from "pools", where each pool is gotten with a single
- * request to jpeg_get_small() or jpeg_get_large().  There is no per-object
- * overhead within a pool, except for alignment padding.  Each pool has a
- * header with a link to the next pool of the same class.
- * Small and large pool headers are identical except that the latter's
- * link pointer must be FAR on 80x86 machines.
- * Notice that the "real" header fields are union'ed with a dummy ALIGN_TYPE
- * field.  This forces the compiler to make SIZEOF(small_pool_hdr) a multiple
- * of the alignment requirement of ALIGN_TYPE.
- */
-
-typedef union small_pool_struct * small_pool_ptr;
-
-typedef union small_pool_struct {
-  struct {
-    small_pool_ptr next;	/* next in list of pools */
-    size_t bytes_used;		/* how many bytes already used within pool */
-    size_t bytes_left;		/* bytes still available in this pool */
-  } hdr;
-  ALIGN_TYPE dummy;		/* included in union to ensure alignment */
-} small_pool_hdr;
-
-typedef union large_pool_struct FAR * large_pool_ptr;
-
-typedef union large_pool_struct {
-  struct {
-    large_pool_ptr next;	/* next in list of pools */
-    size_t bytes_used;		/* how many bytes already used within pool */
-    size_t bytes_left;		/* bytes still available in this pool */
-  } hdr;
-  ALIGN_TYPE dummy;		/* included in union to ensure alignment */
-} large_pool_hdr;
-
-
-/*
- * Here is the full definition of a memory manager object.
- */
-
-typedef struct {
-  struct jpeg_memory_mgr pub;	/* public fields */
-
-  /* Each pool identifier (lifetime class) names a linked list of pools. */
-  small_pool_ptr small_list[JPOOL_NUMPOOLS];
-  large_pool_ptr large_list[JPOOL_NUMPOOLS];
-
-  /* Since we only have one lifetime class of virtual arrays, only one
-   * linked list is necessary (for each datatype).  Note that the virtual
-   * array control blocks being linked together are actually stored somewhere
-   * in the small-pool list.
-   */
-  jvirt_sarray_ptr virt_sarray_list;
-  jvirt_barray_ptr virt_barray_list;
-
-  /* This counts total space obtained from jpeg_get_small/large */
-  long total_space_allocated;
-
-  /* alloc_sarray and alloc_barray set this value for use by virtual
-   * array routines.
-   */
-  JDIMENSION last_rowsperchunk;	/* from most recent alloc_sarray/barray */
-} my_memory_mgr;
-
-typedef my_memory_mgr * my_mem_ptr;
-
-
-/*
- * The control blocks for virtual arrays.
- * Note that these blocks are allocated in the "small" pool area.
- * System-dependent info for the associated backing store (if any) is hidden
- * inside the backing_store_info struct.
- */
-
-struct jvirt_sarray_control {
-  JSAMPARRAY mem_buffer;	/* => the in-memory buffer */
-  JDIMENSION rows_in_array;	/* total virtual array height */
-  JDIMENSION samplesperrow;	/* width of array (and of memory buffer) */
-  JDIMENSION maxaccess;		/* max rows accessed by access_virt_sarray */
-  JDIMENSION rows_in_mem;	/* height of memory buffer */
-  JDIMENSION rowsperchunk;	/* allocation chunk size in mem_buffer */
-  JDIMENSION cur_start_row;	/* first logical row # in the buffer */
-  JDIMENSION first_undef_row;	/* row # of first uninitialized row */
-  boolean pre_zero;		/* pre-zero mode requested? */
-  boolean dirty;		/* do current buffer contents need written? */
-  boolean b_s_open;		/* is backing-store data valid? */
-  jvirt_sarray_ptr next;	/* link to next virtual sarray control block */
-  backing_store_info b_s_info;	/* System-dependent control info */
-};
-
-struct jvirt_barray_control {
-  JBLOCKARRAY mem_buffer;	/* => the in-memory buffer */
-  JDIMENSION rows_in_array;	/* total virtual array height */
-  JDIMENSION blocksperrow;	/* width of array (and of memory buffer) */
-  JDIMENSION maxaccess;		/* max rows accessed by access_virt_barray */
-  JDIMENSION rows_in_mem;	/* height of memory buffer */
-  JDIMENSION rowsperchunk;	/* allocation chunk size in mem_buffer */
-  JDIMENSION cur_start_row;	/* first logical row # in the buffer */
-  JDIMENSION first_undef_row;	/* row # of first uninitialized row */
-  boolean pre_zero;		/* pre-zero mode requested? */
-  boolean dirty;		/* do current buffer contents need written? */
-  boolean b_s_open;		/* is backing-store data valid? */
-  jvirt_barray_ptr next;	/* link to next virtual barray control block */
-  backing_store_info b_s_info;	/* System-dependent control info */
-};
-
-
-#ifdef MEM_STATS		/* optional extra stuff for statistics */
-
-LOCAL(void)
-print_mem_stats (j_common_ptr cinfo, int pool_id)
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr shdr_ptr;
-  large_pool_ptr lhdr_ptr;
-
-  /* Since this is only a debugging stub, we can cheat a little by using
-   * fprintf directly rather than going through the trace message code.
-   * This is helpful because message parm array can't handle longs.
-   */
-  fprintf(stderr, "Freeing pool %d, total space = %ld\n",
-	  pool_id, mem->total_space_allocated);
-
-  for (lhdr_ptr = mem->large_list[pool_id]; lhdr_ptr != NULL;
-       lhdr_ptr = lhdr_ptr->hdr.next) {
-    fprintf(stderr, "  Large chunk used %ld\n",
-	    (long) lhdr_ptr->hdr.bytes_used);
-  }
-
-  for (shdr_ptr = mem->small_list[pool_id]; shdr_ptr != NULL;
-       shdr_ptr = shdr_ptr->hdr.next) {
-    fprintf(stderr, "  Small chunk used %ld free %ld\n",
-	    (long) shdr_ptr->hdr.bytes_used,
-	    (long) shdr_ptr->hdr.bytes_left);
-  }
-}
-
-#endif /* MEM_STATS */
-
-
-LOCAL(noreturn_t)
-out_of_memory (j_common_ptr cinfo, int which)
-/* Report an out-of-memory error and stop execution */
-/* If we compiled MEM_STATS support, report alloc requests before dying */
-{
-#ifdef MEM_STATS
-  cinfo->err->trace_level = 2;	/* force self_destruct to report stats */
-#endif
-  ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, which);
-}
-
-
-/*
- * Allocation of "small" objects.
- *
- * For these, we use pooled storage.  When a new pool must be created,
- * we try to get enough space for the current request plus a "slop" factor,
- * where the slop will be the amount of leftover space in the new pool.
- * The speed vs. space tradeoff is largely determined by the slop values.
- * A different slop value is provided for each pool class (lifetime),
- * and we also distinguish the first pool of a class from later ones.
- * NOTE: the values given work fairly well on both 16- and 32-bit-int
- * machines, but may be too small if longs are 64 bits or more.
- */
-
-static const size_t first_pool_slop[JPOOL_NUMPOOLS] = 
-{
-	1600,			/* first PERMANENT pool */
-	16000			/* first IMAGE pool */
-};
-
-static const size_t extra_pool_slop[JPOOL_NUMPOOLS] = 
-{
-	0,			/* additional PERMANENT pools */
-	5000			/* additional IMAGE pools */
-};
-
-#define MIN_SLOP  50		/* greater than 0 to avoid futile looping */
-
-
-METHODDEF(void *)
-alloc_small (j_common_ptr cinfo, int pool_id, size_t sizeofobject)
-/* Allocate a "small" object */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr hdr_ptr, prev_hdr_ptr;
-  char * data_ptr;
-  size_t odd_bytes, min_request, slop;
-
-  /* Check for unsatisfiable request (do now to ensure no overflow below) */
-  if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(small_pool_hdr)))
-    out_of_memory(cinfo, 1);	/* request exceeds malloc's ability */
-
-  /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */
-  odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE);
-  if (odd_bytes > 0)
-    sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes;
-
-  /* See if space is available in any existing pool */
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-  prev_hdr_ptr = NULL;
-  hdr_ptr = mem->small_list[pool_id];
-  while (hdr_ptr != NULL) {
-    if (hdr_ptr->hdr.bytes_left >= sizeofobject)
-      break;			/* found pool with enough space */
-    prev_hdr_ptr = hdr_ptr;
-    hdr_ptr = hdr_ptr->hdr.next;
-  }
-
-  /* Time to make a new pool? */
-  if (hdr_ptr == NULL) {
-    /* min_request is what we need now, slop is what will be leftover */
-    min_request = sizeofobject + SIZEOF(small_pool_hdr);
-    if (prev_hdr_ptr == NULL)	/* first pool in class? */
-      slop = first_pool_slop[pool_id];
-    else
-      slop = extra_pool_slop[pool_id];
-    /* Don't ask for more than MAX_ALLOC_CHUNK */
-    if (slop > (size_t) (MAX_ALLOC_CHUNK-min_request))
-      slop = (size_t) (MAX_ALLOC_CHUNK-min_request);
-    /* Try to get space, if fail reduce slop and try again */
-    for (;;) {
-      hdr_ptr = (small_pool_ptr) jpeg_get_small(cinfo, min_request + slop);
-      if (hdr_ptr != NULL)
-	break;
-      slop /= 2;
-      if (slop < MIN_SLOP)	/* give up when it gets real small */
-	out_of_memory(cinfo, 2); /* jpeg_get_small failed */
-    }
-    mem->total_space_allocated += min_request + slop;
-    /* Success, initialize the new pool header and add to end of list */
-    hdr_ptr->hdr.next = NULL;
-    hdr_ptr->hdr.bytes_used = 0;
-    hdr_ptr->hdr.bytes_left = sizeofobject + slop;
-    if (prev_hdr_ptr == NULL)	/* first pool in class? */
-      mem->small_list[pool_id] = hdr_ptr;
-    else
-      prev_hdr_ptr->hdr.next = hdr_ptr;
-  }
-
-  /* OK, allocate the object from the current pool */
-  data_ptr = (char *) (hdr_ptr + 1); /* point to first data byte in pool */
-  data_ptr += hdr_ptr->hdr.bytes_used; /* point to place for object */
-  hdr_ptr->hdr.bytes_used += sizeofobject;
-  hdr_ptr->hdr.bytes_left -= sizeofobject;
-
-  return (void *) data_ptr;
-}
-
-
-/*
- * Allocation of "large" objects.
- *
- * The external semantics of these are the same as "small" objects,
- * except that FAR pointers are used on 80x86.  However the pool
- * management heuristics are quite different.  We assume that each
- * request is large enough that it may as well be passed directly to
- * jpeg_get_large; the pool management just links everything together
- * so that we can free it all on demand.
- * Note: the major use of "large" objects is in JSAMPARRAY and JBLOCKARRAY
- * structures.  The routines that create these structures (see below)
- * deliberately bunch rows together to ensure a large request size.
- */
-
-METHODDEF(void FAR *)
-alloc_large (j_common_ptr cinfo, int pool_id, size_t sizeofobject)
-/* Allocate a "large" object */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  large_pool_ptr hdr_ptr;
-  size_t odd_bytes;
-
-  /* Check for unsatisfiable request (do now to ensure no overflow below) */
-  if (sizeofobject > (size_t) (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)))
-    out_of_memory(cinfo, 3);	/* request exceeds malloc's ability */
-
-  /* Round up the requested size to a multiple of SIZEOF(ALIGN_TYPE) */
-  odd_bytes = sizeofobject % SIZEOF(ALIGN_TYPE);
-  if (odd_bytes > 0)
-    sizeofobject += SIZEOF(ALIGN_TYPE) - odd_bytes;
-
-  /* Always make a new pool */
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  hdr_ptr = (large_pool_ptr) jpeg_get_large(cinfo, sizeofobject +
-					    SIZEOF(large_pool_hdr));
-  if (hdr_ptr == NULL)
-    out_of_memory(cinfo, 4);	/* jpeg_get_large failed */
-  mem->total_space_allocated += sizeofobject + SIZEOF(large_pool_hdr);
-
-  /* Success, initialize the new pool header and add to list */
-  hdr_ptr->hdr.next = mem->large_list[pool_id];
-  /* We maintain space counts in each pool header for statistical purposes,
-   * even though they are not needed for allocation.
-   */
-  hdr_ptr->hdr.bytes_used = sizeofobject;
-  hdr_ptr->hdr.bytes_left = 0;
-  mem->large_list[pool_id] = hdr_ptr;
-
-  return (void FAR *) (hdr_ptr + 1); /* point to first data byte in pool */
-}
-
-
-/*
- * Creation of 2-D sample arrays.
- * The pointers are in near heap, the samples themselves in FAR heap.
- *
- * To minimize allocation overhead and to allow I/O of large contiguous
- * blocks, we allocate the sample rows in groups of as many rows as possible
- * without exceeding MAX_ALLOC_CHUNK total bytes per allocation request.
- * NB: the virtual array control routines, later in this file, know about
- * this chunking of rows.  The rowsperchunk value is left in the mem manager
- * object so that it can be saved away if this sarray is the workspace for
- * a virtual array.
- */
-
-METHODDEF(JSAMPARRAY)
-alloc_sarray (j_common_ptr cinfo, int pool_id,
-	      JDIMENSION samplesperrow, JDIMENSION numrows)
-/* Allocate a 2-D sample array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  JSAMPARRAY result;
-  JSAMPROW workspace;
-  JDIMENSION rowsperchunk, currow, i;
-  long ltemp;
-
-  /* Calculate max # of rows allowed in one allocation chunk */
-  ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) /
-	  ((long) samplesperrow * SIZEOF(JSAMPLE));
-  if (ltemp <= 0)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-  if (ltemp < (long) numrows)
-    rowsperchunk = (JDIMENSION) ltemp;
-  else
-    rowsperchunk = numrows;
-  mem->last_rowsperchunk = rowsperchunk;
-
-  /* Get space for row pointers (small object) */
-  result = (JSAMPARRAY) alloc_small(cinfo, pool_id,
-				    (size_t) (numrows * SIZEOF(JSAMPROW)));
-
-  /* Get the rows themselves (large objects) */
-  currow = 0;
-  while (currow < numrows) {
-    rowsperchunk = MIN(rowsperchunk, numrows - currow);
-    workspace = (JSAMPROW) alloc_large(cinfo, pool_id,
-	(size_t) ((size_t) rowsperchunk * (size_t) samplesperrow
-		  * SIZEOF(JSAMPLE)));
-    for (i = rowsperchunk; i > 0; i--) {
-      result[currow++] = workspace;
-      workspace += samplesperrow;
-    }
-  }
-
-  return result;
-}
-
-
-/*
- * Creation of 2-D coefficient-block arrays.
- * This is essentially the same as the code for sample arrays, above.
- */
-
-METHODDEF(JBLOCKARRAY)
-alloc_barray (j_common_ptr cinfo, int pool_id,
-	      JDIMENSION blocksperrow, JDIMENSION numrows)
-/* Allocate a 2-D coefficient-block array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  JBLOCKARRAY result;
-  JBLOCKROW workspace;
-  JDIMENSION rowsperchunk, currow, i;
-  long ltemp;
-
-  /* Calculate max # of rows allowed in one allocation chunk */
-  ltemp = (MAX_ALLOC_CHUNK-SIZEOF(large_pool_hdr)) /
-	  ((long) blocksperrow * SIZEOF(JBLOCK));
-  if (ltemp <= 0)
-    ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
-  if (ltemp < (long) numrows)
-    rowsperchunk = (JDIMENSION) ltemp;
-  else
-    rowsperchunk = numrows;
-  mem->last_rowsperchunk = rowsperchunk;
-
-  /* Get space for row pointers (small object) */
-  result = (JBLOCKARRAY) alloc_small(cinfo, pool_id,
-				     (size_t) (numrows * SIZEOF(JBLOCKROW)));
-
-  /* Get the rows themselves (large objects) */
-  currow = 0;
-  while (currow < numrows) {
-    rowsperchunk = MIN(rowsperchunk, numrows - currow);
-    workspace = (JBLOCKROW) alloc_large(cinfo, pool_id,
-	(size_t) ((size_t) rowsperchunk * (size_t) blocksperrow
-		  * SIZEOF(JBLOCK)));
-    for (i = rowsperchunk; i > 0; i--) {
-      result[currow++] = workspace;
-      workspace += blocksperrow;
-    }
-  }
-
-  return result;
-}
-
-
-/*
- * About virtual array management:
- *
- * The above "normal" array routines are only used to allocate strip buffers
- * (as wide as the image, but just a few rows high).  Full-image-sized buffers
- * are handled as "virtual" arrays.  The array is still accessed a strip at a
- * time, but the memory manager must save the whole array for repeated
- * accesses.  The intended implementation is that there is a strip buffer in
- * memory (as high as is possible given the desired memory limit), plus a
- * backing file that holds the rest of the array.
- *
- * The request_virt_array routines are told the total size of the image and
- * the maximum number of rows that will be accessed at once.  The in-memory
- * buffer must be at least as large as the maxaccess value.
- *
- * The request routines create control blocks but not the in-memory buffers.
- * That is postponed until realize_virt_arrays is called.  At that time the
- * total amount of space needed is known (approximately, anyway), so free
- * memory can be divided up fairly.
- *
- * The access_virt_array routines are responsible for making a specific strip
- * area accessible (after reading or writing the backing file, if necessary).
- * Note that the access routines are told whether the caller intends to modify
- * the accessed strip; during a read-only pass this saves having to rewrite
- * data to disk.  The access routines are also responsible for pre-zeroing
- * any newly accessed rows, if pre-zeroing was requested.
- *
- * In current usage, the access requests are usually for nonoverlapping
- * strips; that is, successive access start_row numbers differ by exactly
- * num_rows = maxaccess.  This means we can get good performance with simple
- * buffer dump/reload logic, by making the in-memory buffer be a multiple
- * of the access height; then there will never be accesses across bufferload
- * boundaries.  The code will still work with overlapping access requests,
- * but it doesn't handle bufferload overlaps very efficiently.
- */
-
-
-METHODDEF(jvirt_sarray_ptr)
-request_virt_sarray (j_common_ptr cinfo, int pool_id, boolean pre_zero,
-		     JDIMENSION samplesperrow, JDIMENSION numrows,
-		     JDIMENSION maxaccess)
-/* Request a virtual 2-D sample array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  jvirt_sarray_ptr result;
-
-  /* Only IMAGE-lifetime virtual arrays are currently supported */
-  if (pool_id != JPOOL_IMAGE)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  /* get control block */
-  result = (jvirt_sarray_ptr) alloc_small(cinfo, pool_id,
-					  SIZEOF(struct jvirt_sarray_control));
-
-  result->mem_buffer = NULL;	/* marks array not yet realized */
-  result->rows_in_array = numrows;
-  result->samplesperrow = samplesperrow;
-  result->maxaccess = maxaccess;
-  result->pre_zero = pre_zero;
-  result->b_s_open = FALSE;	/* no associated backing-store object */
-  result->next = mem->virt_sarray_list; /* add to list of virtual arrays */
-  mem->virt_sarray_list = result;
-
-  return result;
-}
-
-
-METHODDEF(jvirt_barray_ptr)
-request_virt_barray (j_common_ptr cinfo, int pool_id, boolean pre_zero,
-		     JDIMENSION blocksperrow, JDIMENSION numrows,
-		     JDIMENSION maxaccess)
-/* Request a virtual 2-D coefficient-block array */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  jvirt_barray_ptr result;
-
-  /* Only IMAGE-lifetime virtual arrays are currently supported */
-  if (pool_id != JPOOL_IMAGE)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-  /* get control block */
-  result = (jvirt_barray_ptr) alloc_small(cinfo, pool_id,
-					  SIZEOF(struct jvirt_barray_control));
-
-  result->mem_buffer = NULL;	/* marks array not yet realized */
-  result->rows_in_array = numrows;
-  result->blocksperrow = blocksperrow;
-  result->maxaccess = maxaccess;
-  result->pre_zero = pre_zero;
-  result->b_s_open = FALSE;	/* no associated backing-store object */
-  result->next = mem->virt_barray_list; /* add to list of virtual arrays */
-  mem->virt_barray_list = result;
-
-  return result;
-}
-
-
-METHODDEF(void)
-realize_virt_arrays (j_common_ptr cinfo)
-/* Allocate the in-memory buffers for any unrealized virtual arrays */
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  long space_per_minheight, maximum_space, avail_mem;
-  long minheights, max_minheights;
-  jvirt_sarray_ptr sptr;
-  jvirt_barray_ptr bptr;
-
-  /* Compute the minimum space needed (maxaccess rows in each buffer)
-   * and the maximum space needed (full image height in each buffer).
-   * These may be of use to the system-dependent jpeg_mem_available routine.
-   */
-  space_per_minheight = 0;
-  maximum_space = 0;
-  for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-    if (sptr->mem_buffer == NULL) { /* if not realized yet */
-      space_per_minheight += (long) sptr->maxaccess *
-			     (long) sptr->samplesperrow * SIZEOF(JSAMPLE);
-      maximum_space += (long) sptr->rows_in_array *
-		       (long) sptr->samplesperrow * SIZEOF(JSAMPLE);
-    }
-  }
-  for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-    if (bptr->mem_buffer == NULL) { /* if not realized yet */
-      space_per_minheight += (long) bptr->maxaccess *
-			     (long) bptr->blocksperrow * SIZEOF(JBLOCK);
-      maximum_space += (long) bptr->rows_in_array *
-		       (long) bptr->blocksperrow * SIZEOF(JBLOCK);
-    }
-  }
-
-  if (space_per_minheight <= 0)
-    return;			/* no unrealized arrays, no work */
-
-  /* Determine amount of memory to actually use; this is system-dependent. */
-  avail_mem = jpeg_mem_available(cinfo, space_per_minheight, maximum_space,
-				 mem->total_space_allocated);
-
-  /* If the maximum space needed is available, make all the buffers full
-   * height; otherwise parcel it out with the same number of minheights
-   * in each buffer.
-   */
-  if (avail_mem >= maximum_space)
-    max_minheights = 1000000000L;
-  else {
-    max_minheights = avail_mem / space_per_minheight;
-    /* If there doesn't seem to be enough space, try to get the minimum
-     * anyway.  This allows a "stub" implementation of jpeg_mem_available().
-     */
-    if (max_minheights <= 0)
-      max_minheights = 1;
-  }
-
-  /* Allocate the in-memory buffers and initialize backing store as needed. */
-
-  for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-    if (sptr->mem_buffer == NULL) { /* if not realized yet */
-      minheights = ((long) sptr->rows_in_array - 1L) / sptr->maxaccess + 1L;
-      if (minheights <= max_minheights) {
-	/* This buffer fits in memory */
-	sptr->rows_in_mem = sptr->rows_in_array;
-      } else {
-	/* It doesn't fit in memory, create backing store. */
-	sptr->rows_in_mem = (JDIMENSION) (max_minheights * sptr->maxaccess);
-	jpeg_open_backing_store(cinfo, & sptr->b_s_info,
-				(long) sptr->rows_in_array *
-				(long) sptr->samplesperrow *
-				(long) SIZEOF(JSAMPLE));
-	sptr->b_s_open = TRUE;
-      }
-      sptr->mem_buffer = alloc_sarray(cinfo, JPOOL_IMAGE,
-				      sptr->samplesperrow, sptr->rows_in_mem);
-      sptr->rowsperchunk = mem->last_rowsperchunk;
-      sptr->cur_start_row = 0;
-      sptr->first_undef_row = 0;
-      sptr->dirty = FALSE;
-    }
-  }
-
-  for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-    if (bptr->mem_buffer == NULL) { /* if not realized yet */
-      minheights = ((long) bptr->rows_in_array - 1L) / bptr->maxaccess + 1L;
-      if (minheights <= max_minheights) {
-	/* This buffer fits in memory */
-	bptr->rows_in_mem = bptr->rows_in_array;
-      } else {
-	/* It doesn't fit in memory, create backing store. */
-	bptr->rows_in_mem = (JDIMENSION) (max_minheights * bptr->maxaccess);
-	jpeg_open_backing_store(cinfo, & bptr->b_s_info,
-				(long) bptr->rows_in_array *
-				(long) bptr->blocksperrow *
-				(long) SIZEOF(JBLOCK));
-	bptr->b_s_open = TRUE;
-      }
-      bptr->mem_buffer = alloc_barray(cinfo, JPOOL_IMAGE,
-				      bptr->blocksperrow, bptr->rows_in_mem);
-      bptr->rowsperchunk = mem->last_rowsperchunk;
-      bptr->cur_start_row = 0;
-      bptr->first_undef_row = 0;
-      bptr->dirty = FALSE;
-    }
-  }
-}
-
-
-LOCAL(void)
-do_sarray_io (j_common_ptr cinfo, jvirt_sarray_ptr ptr, boolean writing)
-/* Do backing store read or write of a virtual sample array */
-{
-  long bytesperrow, file_offset, byte_count, rows, thisrow, i;
-
-  bytesperrow = (long) ptr->samplesperrow * SIZEOF(JSAMPLE);
-  file_offset = ptr->cur_start_row * bytesperrow;
-  /* Loop to read or write each allocation chunk in mem_buffer */
-  for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
-    /* One chunk, but check for short chunk at end of buffer */
-    rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
-    /* Transfer no more than is currently defined */
-    thisrow = (long) ptr->cur_start_row + i;
-    rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
-    /* Transfer no more than fits in file */
-    rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
-    if (rows <= 0)		/* this chunk might be past end of file! */
-      break;
-    byte_count = rows * bytesperrow;
-    if (writing)
-      (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
-					    (void FAR *) ptr->mem_buffer[i],
-					    file_offset, byte_count);
-    else
-      (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
-					   (void FAR *) ptr->mem_buffer[i],
-					   file_offset, byte_count);
-    file_offset += byte_count;
-  }
-}
-
-
-LOCAL(void)
-do_barray_io (j_common_ptr cinfo, jvirt_barray_ptr ptr, boolean writing)
-/* Do backing store read or write of a virtual coefficient-block array */
-{
-  long bytesperrow, file_offset, byte_count, rows, thisrow, i;
-
-  bytesperrow = (long) ptr->blocksperrow * SIZEOF(JBLOCK);
-  file_offset = ptr->cur_start_row * bytesperrow;
-  /* Loop to read or write each allocation chunk in mem_buffer */
-  for (i = 0; i < (long) ptr->rows_in_mem; i += ptr->rowsperchunk) {
-    /* One chunk, but check for short chunk at end of buffer */
-    rows = MIN((long) ptr->rowsperchunk, (long) ptr->rows_in_mem - i);
-    /* Transfer no more than is currently defined */
-    thisrow = (long) ptr->cur_start_row + i;
-    rows = MIN(rows, (long) ptr->first_undef_row - thisrow);
-    /* Transfer no more than fits in file */
-    rows = MIN(rows, (long) ptr->rows_in_array - thisrow);
-    if (rows <= 0)		/* this chunk might be past end of file! */
-      break;
-    byte_count = rows * bytesperrow;
-    if (writing)
-      (*ptr->b_s_info.write_backing_store) (cinfo, & ptr->b_s_info,
-					    (void FAR *) ptr->mem_buffer[i],
-					    file_offset, byte_count);
-    else
-      (*ptr->b_s_info.read_backing_store) (cinfo, & ptr->b_s_info,
-					   (void FAR *) ptr->mem_buffer[i],
-					   file_offset, byte_count);
-    file_offset += byte_count;
-  }
-}
-
-
-METHODDEF(JSAMPARRAY)
-access_virt_sarray (j_common_ptr cinfo, jvirt_sarray_ptr ptr,
-		    JDIMENSION start_row, JDIMENSION num_rows,
-		    boolean writable)
-/* Access the part of a virtual sample array starting at start_row */
-/* and extending for num_rows rows.  writable is true if  */
-/* caller intends to modify the accessed area. */
-{
-  JDIMENSION end_row = start_row + num_rows;
-  JDIMENSION undef_row;
-
-  /* debugging check */
-  if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess ||
-      ptr->mem_buffer == NULL)
-    ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-
-  /* Make the desired part of the virtual array accessible */
-  if (start_row < ptr->cur_start_row ||
-      end_row > ptr->cur_start_row+ptr->rows_in_mem) {
-    if (! ptr->b_s_open)
-      ERREXIT(cinfo, JERR_VIRTUAL_BUG);
-    /* Flush old buffer contents if necessary */
-    if (ptr->dirty) {
-      do_sarray_io(cinfo, ptr, TRUE);
-      ptr->dirty = FALSE;
-    }
-    /* Decide what part of virtual array to access.
-     * Algorithm: if target address > current window, assume forward scan,
-     * load starting at target address.  If target address < current window,
-     * assume backward scan, load so that target area is top of window.
-     * Note that when switching from forward write to forward read, will have
-     * start_row = 0, so the limiting case applies and we load from 0 anyway.
-     */
-    if (start_row > ptr->cur_start_row) {
-      ptr->cur_start_row = start_row;
-    } else {
-      /* use long arithmetic here to avoid overflow & unsigned problems */
-      long ltemp;
-
-      ltemp = (long) end_row - (long) ptr->rows_in_mem;
-      if (ltemp < 0)
-	ltemp = 0;		/* don't fall off front end of file */
-      ptr->cur_start_row = (JDIMENSION) ltemp;
-    }
-    /* Read in the selected part of the array.
-     * During the initial write pass, we will do no actual read
-     * because the selected part is all undefined.
-     */
-    do_sarray_io(cinfo, ptr, FALSE);
-  }
-  /* Ensure the accessed part of the array is defined; prezero if needed.
-   * To improve locality of access, we only prezero the part of the array
-   * that the caller is about to access, not the entire in-memory array.
-   */
-  if (ptr->first_undef_row < end_row) {
-    if (ptr->first_undef_row < start_row) {
-      if (writable)		/* writer skipped over a section of array */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-      undef_row = start_row;	/* but reader is allowed to read ahead */
-    } else {
-      undef_row = ptr->first_undef_row;
-    }
-    if (writable)
-      ptr->first_undef_row = end_row;
-    if (ptr->pre_zero) {
-      size_t bytesperrow = (size_t) ptr->samplesperrow * SIZEOF(JSAMPLE);
-      undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */
-      end_row -= ptr->cur_start_row;
-      while (undef_row < end_row) {
-	FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow);
-	undef_row++;
-      }
-    } else {
-      if (! writable)		/* reader looking at undefined data */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-    }
-  }
-  /* Flag the buffer dirty if caller will write in it */
-  if (writable)
-    ptr->dirty = TRUE;
-  /* Return address of proper part of the buffer */
-  return ptr->mem_buffer + (start_row - ptr->cur_start_row);
-}
-
-
-METHODDEF(JBLOCKARRAY)
-access_virt_barray (j_common_ptr cinfo, jvirt_barray_ptr ptr,
-		    JDIMENSION start_row, JDIMENSION num_rows,
-		    boolean writable)
-/* Access the part of a virtual block array starting at start_row */
-/* and extending for num_rows rows.  writable is true if  */
-/* caller intends to modify the accessed area. */
-{
-  JDIMENSION end_row = start_row + num_rows;
-  JDIMENSION undef_row;
-
-  /* debugging check */
-  if (end_row > ptr->rows_in_array || num_rows > ptr->maxaccess ||
-      ptr->mem_buffer == NULL)
-    ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-
-  /* Make the desired part of the virtual array accessible */
-  if (start_row < ptr->cur_start_row ||
-      end_row > ptr->cur_start_row+ptr->rows_in_mem) {
-    if (! ptr->b_s_open)
-      ERREXIT(cinfo, JERR_VIRTUAL_BUG);
-    /* Flush old buffer contents if necessary */
-    if (ptr->dirty) {
-      do_barray_io(cinfo, ptr, TRUE);
-      ptr->dirty = FALSE;
-    }
-    /* Decide what part of virtual array to access.
-     * Algorithm: if target address > current window, assume forward scan,
-     * load starting at target address.  If target address < current window,
-     * assume backward scan, load so that target area is top of window.
-     * Note that when switching from forward write to forward read, will have
-     * start_row = 0, so the limiting case applies and we load from 0 anyway.
-     */
-    if (start_row > ptr->cur_start_row) {
-      ptr->cur_start_row = start_row;
-    } else {
-      /* use long arithmetic here to avoid overflow & unsigned problems */
-      long ltemp;
-
-      ltemp = (long) end_row - (long) ptr->rows_in_mem;
-      if (ltemp < 0)
-	ltemp = 0;		/* don't fall off front end of file */
-      ptr->cur_start_row = (JDIMENSION) ltemp;
-    }
-    /* Read in the selected part of the array.
-     * During the initial write pass, we will do no actual read
-     * because the selected part is all undefined.
-     */
-    do_barray_io(cinfo, ptr, FALSE);
-  }
-  /* Ensure the accessed part of the array is defined; prezero if needed.
-   * To improve locality of access, we only prezero the part of the array
-   * that the caller is about to access, not the entire in-memory array.
-   */
-  if (ptr->first_undef_row < end_row) {
-    if (ptr->first_undef_row < start_row) {
-      if (writable)		/* writer skipped over a section of array */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-      undef_row = start_row;	/* but reader is allowed to read ahead */
-    } else {
-      undef_row = ptr->first_undef_row;
-    }
-    if (writable)
-      ptr->first_undef_row = end_row;
-    if (ptr->pre_zero) {
-      size_t bytesperrow = (size_t) ptr->blocksperrow * SIZEOF(JBLOCK);
-      undef_row -= ptr->cur_start_row; /* make indexes relative to buffer */
-      end_row -= ptr->cur_start_row;
-      while (undef_row < end_row) {
-	FMEMZERO((void FAR *) ptr->mem_buffer[undef_row], bytesperrow);
-	undef_row++;
-      }
-    } else {
-      if (! writable)		/* reader looking at undefined data */
-	ERREXIT(cinfo, JERR_BAD_VIRTUAL_ACCESS);
-    }
-  }
-  /* Flag the buffer dirty if caller will write in it */
-  if (writable)
-    ptr->dirty = TRUE;
-  /* Return address of proper part of the buffer */
-  return ptr->mem_buffer + (start_row - ptr->cur_start_row);
-}
-
-
-/*
- * Release all objects belonging to a specified pool.
- */
-
-METHODDEF(void)
-free_pool (j_common_ptr cinfo, int pool_id)
-{
-  my_mem_ptr mem = (my_mem_ptr) cinfo->mem;
-  small_pool_ptr shdr_ptr;
-  large_pool_ptr lhdr_ptr;
-  size_t space_freed;
-
-  if (pool_id < 0 || pool_id >= JPOOL_NUMPOOLS)
-    ERREXIT1(cinfo, JERR_BAD_POOL_ID, pool_id);	/* safety check */
-
-#ifdef MEM_STATS
-  if (cinfo->err->trace_level > 1)
-    print_mem_stats(cinfo, pool_id); /* print pool's memory usage statistics */
-#endif
-
-  /* If freeing IMAGE pool, close any virtual arrays first */
-  if (pool_id == JPOOL_IMAGE) {
-    jvirt_sarray_ptr sptr;
-    jvirt_barray_ptr bptr;
-
-    for (sptr = mem->virt_sarray_list; sptr != NULL; sptr = sptr->next) {
-      if (sptr->b_s_open) {	/* there may be no backing store */
-	sptr->b_s_open = FALSE;	/* prevent recursive close if error */
-	(*sptr->b_s_info.close_backing_store) (cinfo, & sptr->b_s_info);
-      }
-    }
-    mem->virt_sarray_list = NULL;
-    for (bptr = mem->virt_barray_list; bptr != NULL; bptr = bptr->next) {
-      if (bptr->b_s_open) {	/* there may be no backing store */
-	bptr->b_s_open = FALSE;	/* prevent recursive close if error */
-	(*bptr->b_s_info.close_backing_store) (cinfo, & bptr->b_s_info);
-      }
-    }
-    mem->virt_barray_list = NULL;
-  }
-
-  /* Release large objects */
-  lhdr_ptr = mem->large_list[pool_id];
-  mem->large_list[pool_id] = NULL;
-
-  while (lhdr_ptr != NULL) {
-    large_pool_ptr next_lhdr_ptr = lhdr_ptr->hdr.next;
-    space_freed = lhdr_ptr->hdr.bytes_used +
-		  lhdr_ptr->hdr.bytes_left +
-		  SIZEOF(large_pool_hdr);
-    jpeg_free_large(cinfo, (void FAR *) lhdr_ptr, space_freed);
-    mem->total_space_allocated -= space_freed;
-    lhdr_ptr = next_lhdr_ptr;
-  }
-
-  /* Release small objects */
-  shdr_ptr = mem->small_list[pool_id];
-  mem->small_list[pool_id] = NULL;
-
-  while (shdr_ptr != NULL) {
-    small_pool_ptr next_shdr_ptr = shdr_ptr->hdr.next;
-    space_freed = shdr_ptr->hdr.bytes_used +
-		  shdr_ptr->hdr.bytes_left +
-		  SIZEOF(small_pool_hdr);
-    jpeg_free_small(cinfo, (void *) shdr_ptr, space_freed);
-    mem->total_space_allocated -= space_freed;
-    shdr_ptr = next_shdr_ptr;
-  }
-}
-
-
-/*
- * Close up shop entirely.
- * Note that this cannot be called unless cinfo->mem is non-NULL.
- */
-
-METHODDEF(void)
-self_destruct (j_common_ptr cinfo)
-{
-  int pool;
-
-  /* Close all backing store, release all memory.
-   * Releasing pools in reverse order might help avoid fragmentation
-   * with some (brain-damaged) malloc libraries.
-   */
-  for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) {
-    free_pool(cinfo, pool);
-  }
-
-  /* Release the memory manager control block too. */
-  jpeg_free_small(cinfo, (void *) cinfo->mem, SIZEOF(my_memory_mgr));
-  cinfo->mem = NULL;		/* ensures I will be called only once */
-
-  jpeg_mem_term(cinfo);		/* system-dependent cleanup */
-}
-
-
-/*
- * Memory manager initialization.
- * When this is called, only the error manager pointer is valid in cinfo!
- */
-
-GLOBAL(void)
-jinit_memory_mgr (j_common_ptr cinfo)
-{
-  my_mem_ptr mem;
-  long max_to_use;
-  int pool;
-  size_t test_mac;
-
-  cinfo->mem = NULL;		/* for safety if init fails */
-
-  /* Check for configuration errors.
-   * SIZEOF(ALIGN_TYPE) should be a power of 2; otherwise, it probably
-   * doesn't reflect any real hardware alignment requirement.
-   * The test is a little tricky: for X>0, X and X-1 have no one-bits
-   * in common if and only if X is a power of 2, ie has only one one-bit.
-   * Some compilers may give an "unreachable code" warning here; ignore it.
-   */
-  if ((SIZEOF(ALIGN_TYPE) & (SIZEOF(ALIGN_TYPE)-1)) != 0)
-    ERREXIT(cinfo, JERR_BAD_ALIGN_TYPE);
-  /* MAX_ALLOC_CHUNK must be representable as type size_t, and must be
-   * a multiple of SIZEOF(ALIGN_TYPE).
-   * Again, an "unreachable code" warning may be ignored here.
-   * But a "constant too large" warning means you need to fix MAX_ALLOC_CHUNK.
-   */
-  test_mac = (size_t) MAX_ALLOC_CHUNK;
-  if ((long) test_mac != MAX_ALLOC_CHUNK ||
-      (MAX_ALLOC_CHUNK % SIZEOF(ALIGN_TYPE)) != 0)
-    ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK);
-
-  max_to_use = jpeg_mem_init(cinfo); /* system-dependent initialization */
-
-  /* Attempt to allocate memory manager's control block */
-  mem = (my_mem_ptr) jpeg_get_small(cinfo, SIZEOF(my_memory_mgr));
-
-  if (mem == NULL) {
-    jpeg_mem_term(cinfo);	/* system-dependent cleanup */
-    ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 0);
-  }
-
-  /* OK, fill in the method pointers */
-  mem->pub.alloc_small = alloc_small;
-  mem->pub.alloc_large = alloc_large;
-  mem->pub.alloc_sarray = alloc_sarray;
-  mem->pub.alloc_barray = alloc_barray;
-  mem->pub.request_virt_sarray = request_virt_sarray;
-  mem->pub.request_virt_barray = request_virt_barray;
-  mem->pub.realize_virt_arrays = realize_virt_arrays;
-  mem->pub.access_virt_sarray = access_virt_sarray;
-  mem->pub.access_virt_barray = access_virt_barray;
-  mem->pub.free_pool = free_pool;
-  mem->pub.self_destruct = self_destruct;
-
-  /* Make MAX_ALLOC_CHUNK accessible to other modules */
-  mem->pub.max_alloc_chunk = MAX_ALLOC_CHUNK;
-
-  /* Initialize working state */
-  mem->pub.max_memory_to_use = max_to_use;
-
-  for (pool = JPOOL_NUMPOOLS-1; pool >= JPOOL_PERMANENT; pool--) {
-    mem->small_list[pool] = NULL;
-    mem->large_list[pool] = NULL;
-  }
-  mem->virt_sarray_list = NULL;
-  mem->virt_barray_list = NULL;
-
-  mem->total_space_allocated = SIZEOF(my_memory_mgr);
-
-  /* Declare ourselves open for business */
-  cinfo->mem = & mem->pub;
-
-  /* Check for an environment variable JPEGMEM; if found, override the
-   * default max_memory setting from jpeg_mem_init.  Note that the
-   * surrounding application may again override this value.
-   * If your system doesn't support getenv(), define NO_GETENV to disable
-   * this feature.
-   */
-#ifndef NO_GETENV
-  { char * memenv;
-
-    if ((memenv = getenv("JPEGMEM")) != NULL) {
-      char ch = 'x';
-
-      if (sscanf(memenv, "%ld%c", &max_to_use, &ch) > 0) {
-	if (ch == 'm' || ch == 'M')
-	  max_to_use *= 1000L;
-	mem->pub.max_memory_to_use = max_to_use * 1000L;
-      }
-    }
-  }
-#endif
-
-}
--- a/DoConfig/fltk/jpeg/jmemnobs.c
+++ /dev/null
@@ -1,109 +1,0 @@
-/*
- * jmemnobs.c
- *
- * Copyright (C) 1992-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file provides a really simple implementation of the system-
- * dependent portion of the JPEG memory manager.  This implementation
- * assumes that no backing-store files are needed: all required space
- * can be obtained from malloc().
- * This is very portable in the sense that it'll compile on almost anything,
- * but you'd better have lots of main memory (or virtual memory) if you want
- * to process big images.
- * Note that the max_memory_to_use option is ignored by this implementation.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-#include "jmemsys.h"		/* import the system-dependent declarations */
-
-#ifndef HAVE_STDLIB_H		/* <stdlib.h> should declare malloc(),free() */
-extern void * malloc JPP((size_t size));
-extern void free JPP((void *ptr));
-#endif
-
-
-/*
- * Memory allocation and freeing are controlled by the regular library
- * routines malloc() and free().
- */
-
-GLOBAL(void *)
-jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject)
-{
-  return (void *) malloc(sizeofobject);
-}
-
-GLOBAL(void)
-jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject)
-{
-  free(object);
-}
-
-
-/*
- * "Large" objects are treated the same as "small" ones.
- * NB: although we include FAR keywords in the routine declarations,
- * this file won't actually work in 80x86 small/medium model; at least,
- * you probably won't be able to process useful-size images in only 64KB.
- */
-
-GLOBAL(void FAR *)
-jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject)
-{
-  return (void FAR *) malloc(sizeofobject);
-}
-
-GLOBAL(void)
-jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject)
-{
-  free(object);
-}
-
-
-/*
- * This routine computes the total memory space available for allocation.
- * Here we always say, "we got all you want bud!"
- */
-
-GLOBAL(long)
-jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed,
-		    long max_bytes_needed, long already_allocated)
-{
-  return max_bytes_needed;
-}
-
-
-/*
- * Backing store (temporary file) management.
- * Since jpeg_mem_available always promised the moon,
- * this should never be called and we can just error out.
- */
-
-GLOBAL(void)
-jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info,
-			 long total_bytes_needed)
-{
-  ERREXIT(cinfo, JERR_NO_BACKING_STORE);
-}
-
-
-/*
- * These routines take care of any system-dependent initialization and
- * cleanup required.  Here, there isn't any.
- */
-
-GLOBAL(long)
-jpeg_mem_init (j_common_ptr cinfo)
-{
-  return 0;			/* just set max_memory_to_use to 0 */
-}
-
-GLOBAL(void)
-jpeg_mem_term (j_common_ptr cinfo)
-{
-  /* no work */
-}
--- a/DoConfig/fltk/jpeg/jmemsys.h
+++ /dev/null
@@ -1,198 +1,0 @@
-/*
- * jmemsys.h
- *
- * Copyright (C) 1992-1997, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This include file defines the interface between the system-independent
- * and system-dependent portions of the JPEG memory manager.  No other
- * modules need include it.  (The system-independent portion is jmemmgr.c;
- * there are several different versions of the system-dependent portion.)
- *
- * This file works as-is for the system-dependent memory managers supplied
- * in the IJG distribution.  You may need to modify it if you write a
- * custom memory manager.  If system-dependent changes are needed in
- * this file, the best method is to #ifdef them based on a configuration
- * symbol supplied in jconfig.h, as we have done with USE_MSDOS_MEMMGR
- * and USE_MAC_MEMMGR.
- */
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_get_small		jGetSmall
-#define jpeg_free_small		jFreeSmall
-#define jpeg_get_large		jGetLarge
-#define jpeg_free_large		jFreeLarge
-#define jpeg_mem_available	jMemAvail
-#define jpeg_open_backing_store	jOpenBackStore
-#define jpeg_mem_init		jMemInit
-#define jpeg_mem_term		jMemTerm
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/*
- * These two functions are used to allocate and release small chunks of
- * memory.  (Typically the total amount requested through jpeg_get_small is
- * no more than 20K or so; this will be requested in chunks of a few K each.)
- * Behavior should be the same as for the standard library functions malloc
- * and free; in particular, jpeg_get_small must return NULL on failure.
- * On most systems, these ARE malloc and free.  jpeg_free_small is passed the
- * size of the object being freed, just in case it's needed.
- * On an 80x86 machine using small-data memory model, these manage near heap.
- */
-
-EXTERN(void *) jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject));
-EXTERN(void) jpeg_free_small JPP((j_common_ptr cinfo, void * object,
-				  size_t sizeofobject));
-
-/*
- * These two functions are used to allocate and release large chunks of
- * memory (up to the total free space designated by jpeg_mem_available).
- * The interface is the same as above, except that on an 80x86 machine,
- * far pointers are used.  On most other machines these are identical to
- * the jpeg_get/free_small routines; but we keep them separate anyway,
- * in case a different allocation strategy is desirable for large chunks.
- */
-
-EXTERN(void FAR *) jpeg_get_large JPP((j_common_ptr cinfo,
-				       size_t sizeofobject));
-EXTERN(void) jpeg_free_large JPP((j_common_ptr cinfo, void FAR * object,
-				  size_t sizeofobject));
-
-/*
- * The macro MAX_ALLOC_CHUNK designates the maximum number of bytes that may
- * be requested in a single call to jpeg_get_large (and jpeg_get_small for that
- * matter, but that case should never come into play).  This macro is needed
- * to model the 64Kb-segment-size limit of far addressing on 80x86 machines.
- * On those machines, we expect that jconfig.h will provide a proper value.
- * On machines with 32-bit flat address spaces, any large constant may be used.
- *
- * NB: jmemmgr.c expects that MAX_ALLOC_CHUNK will be representable as type
- * size_t and will be a multiple of sizeof(align_type).
- */
-
-#ifndef MAX_ALLOC_CHUNK		/* may be overridden in jconfig.h */
-#define MAX_ALLOC_CHUNK  1000000000L
-#endif
-
-/*
- * This routine computes the total space still available for allocation by
- * jpeg_get_large.  If more space than this is needed, backing store will be
- * used.  NOTE: any memory already allocated must not be counted.
- *
- * There is a minimum space requirement, corresponding to the minimum
- * feasible buffer sizes; jmemmgr.c will request that much space even if
- * jpeg_mem_available returns zero.  The maximum space needed, enough to hold
- * all working storage in memory, is also passed in case it is useful.
- * Finally, the total space already allocated is passed.  If no better
- * method is available, cinfo->mem->max_memory_to_use - already_allocated
- * is often a suitable calculation.
- *
- * It is OK for jpeg_mem_available to underestimate the space available
- * (that'll just lead to more backing-store access than is really necessary).
- * However, an overestimate will lead to failure.  Hence it's wise to subtract
- * a slop factor from the true available space.  5% should be enough.
- *
- * On machines with lots of virtual memory, any large constant may be returned.
- * Conversely, zero may be returned to always use the minimum amount of memory.
- */
-
-EXTERN(long) jpeg_mem_available JPP((j_common_ptr cinfo,
-				     long min_bytes_needed,
-				     long max_bytes_needed,
-				     long already_allocated));
-
-
-/*
- * This structure holds whatever state is needed to access a single
- * backing-store object.  The read/write/close method pointers are called
- * by jmemmgr.c to manipulate the backing-store object; all other fields
- * are private to the system-dependent backing store routines.
- */
-
-#define TEMP_NAME_LENGTH   64	/* max length of a temporary file's name */
-
-
-#ifdef USE_MSDOS_MEMMGR		/* DOS-specific junk */
-
-typedef unsigned short XMSH;	/* type of extended-memory handles */
-typedef unsigned short EMSH;	/* type of expanded-memory handles */
-
-typedef union {
-  short file_handle;		/* DOS file handle if it's a temp file */
-  XMSH xms_handle;		/* handle if it's a chunk of XMS */
-  EMSH ems_handle;		/* handle if it's a chunk of EMS */
-} handle_union;
-
-#endif /* USE_MSDOS_MEMMGR */
-
-#ifdef USE_MAC_MEMMGR		/* Mac-specific junk */
-#include <Files.h>
-#endif /* USE_MAC_MEMMGR */
-
-
-typedef struct backing_store_struct * backing_store_ptr;
-
-typedef struct backing_store_struct {
-  /* Methods for reading/writing/closing this backing-store object */
-  JMETHOD(void, read_backing_store, (j_common_ptr cinfo,
-				     backing_store_ptr info,
-				     void FAR * buffer_address,
-				     long file_offset, long byte_count));
-  JMETHOD(void, write_backing_store, (j_common_ptr cinfo,
-				      backing_store_ptr info,
-				      void FAR * buffer_address,
-				      long file_offset, long byte_count));
-  JMETHOD(void, close_backing_store, (j_common_ptr cinfo,
-				      backing_store_ptr info));
-
-  /* Private fields for system-dependent backing-store management */
-#ifdef USE_MSDOS_MEMMGR
-  /* For the MS-DOS manager (jmemdos.c), we need: */
-  handle_union handle;		/* reference to backing-store storage object */
-  char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
-#else
-#ifdef USE_MAC_MEMMGR
-  /* For the Mac manager (jmemmac.c), we need: */
-  short temp_file;		/* file reference number to temp file */
-  FSSpec tempSpec;		/* the FSSpec for the temp file */
-  char temp_name[TEMP_NAME_LENGTH]; /* name if it's a file */
-#else
-  /* For a typical implementation with temp files, we need: */
-  FILE * temp_file;		/* stdio reference to temp file */
-  char temp_name[TEMP_NAME_LENGTH]; /* name of temp file */
-#endif
-#endif
-} backing_store_info;
-
-
-/*
- * Initial opening of a backing-store object.  This must fill in the
- * read/write/close pointers in the object.  The read/write routines
- * may take an error exit if the specified maximum file size is exceeded.
- * (If jpeg_mem_available always returns a large value, this routine can
- * just take an error exit.)
- */
-
-EXTERN(void) jpeg_open_backing_store JPP((j_common_ptr cinfo,
-					  backing_store_ptr info,
-					  long total_bytes_needed));
-
-
-/*
- * These routines take care of any system-dependent initialization and
- * cleanup required.  jpeg_mem_init will be called before anything is
- * allocated (and, therefore, nothing in cinfo is of use except the error
- * manager pointer).  It should return a suitable default value for
- * max_memory_to_use; this may subsequently be overridden by the surrounding
- * application.  (Note that max_memory_to_use is only important if
- * jpeg_mem_available chooses to consult it ... no one else will.)
- * jpeg_mem_term may assume that all requested memory has been freed and that
- * all opened backing-store objects have been closed.
- */
-
-EXTERN(long) jpeg_mem_init JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_mem_term JPP((j_common_ptr cinfo));
--- a/DoConfig/fltk/jpeg/jmorecfg.h
+++ /dev/null
@@ -1,446 +1,0 @@
-/*
- * jmorecfg.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 1997-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains additional configuration options that customize the
- * JPEG software for special applications or support machine-dependent
- * optimizations.  Most users will not need to touch this file.
- */
-
-
-/*
- * Define BITS_IN_JSAMPLE as either
- *   8   for 8-bit sample values (the usual setting)
- *   9   for 9-bit sample values
- *   10  for 10-bit sample values
- *   11  for 11-bit sample values
- *   12  for 12-bit sample values
- * Only 8, 9, 10, 11, and 12 bits sample data precision are supported for
- * full-feature DCT processing.  Further depths up to 16-bit may be added
- * later for the lossless modes of operation.
- * Run-time selection and conversion of data precision will be added later
- * and are currently not supported, sorry.
- * Exception:  The transcoding part (jpegtran) supports all settings in a
- * single instance, since it operates on the level of DCT coefficients and
- * not sample values.  The DCT coefficients are of the same type (16 bits)
- * in all cases (see below).
- */
-
-#define BITS_IN_JSAMPLE  8	/* use 8, 9, 10, 11, or 12 */
-
-
-/*
- * Maximum number of components (color channels) allowed in JPEG image.
- * To meet the letter of the JPEG spec, set this to 255.  However, darn
- * few applications need more than 4 channels (maybe 5 for CMYK + alpha
- * mask).  We recommend 10 as a reasonable compromise; use 4 if you are
- * really short on memory.  (Each allowed component costs a hundred or so
- * bytes of storage, whether actually used in an image or not.)
- */
-
-#define MAX_COMPONENTS  10	/* maximum number of image components */
-
-
-/*
- * Basic data types.
- * You may need to change these if you have a machine with unusual data
- * type sizes; for example, "char" not 8 bits, "short" not 16 bits,
- * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
- * but it had better be at least 16.
- */
-
-/* Representation of a single sample (pixel element value).
- * We frequently allocate large arrays of these, so it's important to keep
- * them small.  But if you have memory to burn and access to char or short
- * arrays is very slow on your hardware, you might want to change these.
- */
-
-#if BITS_IN_JSAMPLE == 8
-/* JSAMPLE should be the smallest type that will hold the values 0..255.
- * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JSAMPLE;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJSAMPLE(value)  ((int) (value))
-#else
-#define GETJSAMPLE(value)  ((int) (value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-#define MAXJSAMPLE	255
-#define CENTERJSAMPLE	128
-
-#endif /* BITS_IN_JSAMPLE == 8 */
-
-
-#if BITS_IN_JSAMPLE == 9
-/* JSAMPLE should be the smallest type that will hold the values 0..511.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	511
-#define CENTERJSAMPLE	256
-
-#endif /* BITS_IN_JSAMPLE == 9 */
-
-
-#if BITS_IN_JSAMPLE == 10
-/* JSAMPLE should be the smallest type that will hold the values 0..1023.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	1023
-#define CENTERJSAMPLE	512
-
-#endif /* BITS_IN_JSAMPLE == 10 */
-
-
-#if BITS_IN_JSAMPLE == 11
-/* JSAMPLE should be the smallest type that will hold the values 0..2047.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	2047
-#define CENTERJSAMPLE	1024
-
-#endif /* BITS_IN_JSAMPLE == 11 */
-
-
-#if BITS_IN_JSAMPLE == 12
-/* JSAMPLE should be the smallest type that will hold the values 0..4095.
- * On nearly all machines "short" will do nicely.
- */
-
-typedef short JSAMPLE;
-#define GETJSAMPLE(value)  ((int) (value))
-
-#define MAXJSAMPLE	4095
-#define CENTERJSAMPLE	2048
-
-#endif /* BITS_IN_JSAMPLE == 12 */
-
-
-/* Representation of a DCT frequency coefficient.
- * This should be a signed value of at least 16 bits; "short" is usually OK.
- * Again, we allocate large arrays of these, but you can change to int
- * if you have memory to burn and "short" is really slow.
- */
-
-typedef short JCOEF;
-
-
-/* Compressed datastreams are represented as arrays of JOCTET.
- * These must be EXACTLY 8 bits wide, at least once they are written to
- * external storage.  Note that when using the stdio data source/destination
- * managers, this is also the data type passed to fread/fwrite.
- */
-
-#ifdef HAVE_UNSIGNED_CHAR
-
-typedef unsigned char JOCTET;
-#define GETJOCTET(value)  (value)
-
-#else /* not HAVE_UNSIGNED_CHAR */
-
-typedef char JOCTET;
-#ifdef CHAR_IS_UNSIGNED
-#define GETJOCTET(value)  (value)
-#else
-#define GETJOCTET(value)  ((value) & 0xFF)
-#endif /* CHAR_IS_UNSIGNED */
-
-#endif /* HAVE_UNSIGNED_CHAR */
-
-
-/* These typedefs are used for various table entries and so forth.
- * They must be at least as wide as specified; but making them too big
- * won't cost a huge amount of memory, so we don't provide special
- * extraction code like we did for JSAMPLE.  (In other words, these
- * typedefs live at a different point on the speed/space tradeoff curve.)
- */
-
-/* UINT8 must hold at least the values 0..255. */
-
-#ifdef HAVE_UNSIGNED_CHAR
-typedef unsigned char UINT8;
-#else /* not HAVE_UNSIGNED_CHAR */
-#ifdef CHAR_IS_UNSIGNED
-typedef char UINT8;
-#else /* not CHAR_IS_UNSIGNED */
-typedef short UINT8;
-#endif /* CHAR_IS_UNSIGNED */
-#endif /* HAVE_UNSIGNED_CHAR */
-
-/* UINT16 must hold at least the values 0..65535. */
-
-#ifdef HAVE_UNSIGNED_SHORT
-typedef unsigned short UINT16;
-#else /* not HAVE_UNSIGNED_SHORT */
-typedef unsigned int UINT16;
-#endif /* HAVE_UNSIGNED_SHORT */
-
-/* INT16 must hold at least the values -32768..32767. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
-typedef short INT16;
-#endif
-
-/* INT32 must hold at least signed 32-bit values. */
-
-#ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
-#ifndef _BASETSD_H_		/* Microsoft defines it in basetsd.h */
-#ifndef _BASETSD_H		/* MinGW is slightly different */
-#ifndef QGLOBAL_H		/* Qt defines it in qglobal.h */
-typedef long INT32;
-#endif
-#endif
-#endif
-#endif
-
-/* Datatype used for image dimensions.  The JPEG standard only supports
- * images up to 64K*64K due to 16-bit fields in SOF markers.  Therefore
- * "unsigned int" is sufficient on all machines.  However, if you need to
- * handle larger images and you don't mind deviating from the spec, you
- * can change this datatype.
- */
-
-typedef unsigned int JDIMENSION;
-
-#define JPEG_MAX_DIMENSION  65500L  /* a tad under 64K to prevent overflows */
-
-
-/* These macros are used in all function definitions and extern declarations.
- * You could modify them if you need to change function linkage conventions;
- * in particular, you'll need to do that to make the library a Windows DLL.
- * Another application is to make all functions global for use with debuggers
- * or code profilers that require it.
- */
-
-/* a function called through method pointers: */
-#define METHODDEF(type)		static type
-/* a function used only in its module: */
-#define LOCAL(type)		static type
-/* a function referenced thru EXTERNs: */
-#define GLOBAL(type)		type
-/* a reference to a GLOBAL function: */
-#define EXTERN(type)		extern type
-
-
-/* This macro is used to declare a "method", that is, a function pointer.
- * We want to supply prototype parameters if the compiler can cope.
- * Note that the arglist parameter must be parenthesized!
- * Again, you can customize this if you need special linkage keywords.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JMETHOD(type,methodname,arglist)  type (*methodname) arglist
-#else
-#define JMETHOD(type,methodname,arglist)  type (*methodname) ()
-#endif
-
-
-/* The noreturn type identifier is used to declare functions
- * which cannot return.
- * Compilers can thus create more optimized code and perform
- * better checks for warnings and errors.
- * Static analyzer tools can make improved inferences about
- * execution paths and are prevented from giving false alerts.
- *
- * Unfortunately, the proposed specifications of corresponding
- * extensions in the Dec 2011 ISO C standard revision (C11),
- * GCC, MSVC, etc. are not viable.
- * Thus we introduce a user defined type to declare noreturn
- * functions at least for clarity.  A proper compiler would
- * have a suitable noreturn type to match in place of void.
- */
-
-#ifndef HAVE_NORETURN_T
-typedef void noreturn_t;
-#endif
-
-
-/* Here is the pseudo-keyword for declaring pointers that must be "far"
- * on 80x86 machines.  Most of the specialized coding for 80x86 is handled
- * by just saying "FAR *" where such a pointer is needed.  In a few places
- * explicit coding is needed; see uses of the NEED_FAR_POINTERS symbol.
- */
-
-#ifndef FAR
-#ifdef NEED_FAR_POINTERS
-#define FAR  far
-#else
-#define FAR
-#endif
-#endif
-
-
-/*
- * On a few systems, type boolean and/or its values FALSE, TRUE may appear
- * in standard header files.  Or you may have conflicts with application-
- * specific header files that you want to include together with these files.
- * Defining HAVE_BOOLEAN before including jpeglib.h should make it work.
- */
-
-#ifndef HAVE_BOOLEAN
-#if defined FALSE || defined TRUE || defined QGLOBAL_H
-/* Qt3 defines FALSE and TRUE as "const" variables in qglobal.h */
-typedef int boolean;
-#ifndef FALSE			/* in case these macros already exist */
-#define FALSE	0		/* values of boolean */
-#endif
-#ifndef TRUE
-#define TRUE	1
-#endif
-#else
-typedef enum { FALSE = 0, TRUE = 1 } boolean;
-#endif
-#endif
-
-
-/*
- * The remaining options affect code selection within the JPEG library,
- * but they don't need to be visible to most applications using the library.
- * To minimize application namespace pollution, the symbols won't be
- * defined unless JPEG_INTERNALS or JPEG_INTERNAL_OPTIONS has been defined.
- */
-
-#ifdef JPEG_INTERNALS
-#define JPEG_INTERNAL_OPTIONS
-#endif
-
-#ifdef JPEG_INTERNAL_OPTIONS
-
-
-/*
- * These defines indicate whether to include various optional functions.
- * Undefining some of these symbols will produce a smaller but less capable
- * library.  Note that you can leave certain source files out of the
- * compilation/linking process if you've #undef'd the corresponding symbols.
- * (You may HAVE to do that if your compiler doesn't like null source files.)
- */
-
-/* Capability options common to encoder and decoder: */
-
-#define DCT_ISLOW_SUPPORTED	/* slow but accurate integer algorithm */
-#define DCT_IFAST_SUPPORTED	/* faster, less accurate integer method */
-#define DCT_FLOAT_SUPPORTED	/* floating-point: accurate, fast on fast HW */
-
-/* Encoder capability options: */
-
-#define C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define C_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define DCT_SCALING_SUPPORTED	    /* Input rescaling via DCT? (Requires DCT_ISLOW)*/
-#define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
-/* Note: if you selected more than 8-bit data precision, it is dangerous to
- * turn off ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only
- * good for 8-bit precision, so arithmetic coding is recommended for higher
- * precision.  The Huffman encoder normally uses entropy optimization to
- * compute usable tables for higher precision.  Otherwise, you'll have to
- * supply different default Huffman tables.
- * The exact same statements apply for progressive JPEG: the default tables
- * don't work for progressive mode.  (This may get fixed, however.)
- */
-#define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
-
-/* Decoder capability options: */
-
-#define D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
-#define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
-#define D_PROGRESSIVE_SUPPORTED	    /* Progressive JPEG? (Requires MULTISCAN)*/
-#define IDCT_SCALING_SUPPORTED	    /* Output rescaling via IDCT? (Requires DCT_ISLOW)*/
-#define SAVE_MARKERS_SUPPORTED	    /* jpeg_save_markers() needed? */
-#define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing? (Progressive only) */
-#undef  UPSAMPLE_SCALING_SUPPORTED  /* Output rescaling at upsample stage? */
-#define UPSAMPLE_MERGING_SUPPORTED  /* Fast path for sloppy upsampling? */
-#define QUANT_1PASS_SUPPORTED	    /* 1-pass color quantization? */
-#define QUANT_2PASS_SUPPORTED	    /* 2-pass color quantization? */
-
-/* more capability options later, no doubt */
-
-
-/*
- * Ordering of RGB data in scanlines passed to or from the application.
- * If your application wants to deal with data in the order B,G,R, just
- * change these macros.  You can also deal with formats such as R,G,B,X
- * (one extra byte per pixel) by changing RGB_PIXELSIZE.  Note that changing
- * the offsets will also change the order in which colormap data is organized.
- * RESTRICTIONS:
- * 1. The sample applications cjpeg,djpeg do NOT support modified RGB formats.
- * 2. The color quantizer modules will not behave desirably if RGB_PIXELSIZE
- *    is not 3 (they don't understand about dummy color components!).  So you
- *    can't use color quantization if you change that value.
- */
-
-#define RGB_RED		0	/* Offset of Red in an RGB scanline element */
-#define RGB_GREEN	1	/* Offset of Green */
-#define RGB_BLUE	2	/* Offset of Blue */
-#define RGB_PIXELSIZE	3	/* JSAMPLEs per RGB scanline element */
-
-
-/* Definitions for speed-related optimizations. */
-
-
-/* If your compiler supports inline functions, define INLINE
- * as the inline keyword; otherwise define it as empty.
- */
-
-#ifndef INLINE
-#ifdef __GNUC__			/* for instance, GNU C knows about inline */
-#define INLINE __inline__
-#endif
-#ifndef INLINE
-#define INLINE			/* default is to define it as empty */
-#endif
-#endif
-
-
-/* On some machines (notably 68000 series) "int" is 32 bits, but multiplying
- * two 16-bit shorts is faster than multiplying two ints.  Define MULTIPLIER
- * as short on such a machine.  MULTIPLIER must be at least 16 bits wide.
- */
-
-#ifndef MULTIPLIER
-#define MULTIPLIER  int		/* type for fastest integer multiply */
-#endif
-
-
-/* FAST_FLOAT should be either float or double, whichever is done faster
- * by your compiler.  (Note that this type is only used in the floating point
- * DCT routines, so it only matters if you've defined DCT_FLOAT_SUPPORTED.)
- * Typically, float is faster in ANSI C compilers, while double is faster in
- * pre-ANSI compilers (because they insist on converting to double anyway).
- * The code below therefore chooses float if we have ANSI-style prototypes.
- */
-
-#ifndef FAST_FLOAT
-#ifdef HAVE_PROTOTYPES
-#define FAST_FLOAT  float
-#else
-#define FAST_FLOAT  double
-#endif
-#endif
-
-#endif /* JPEG_INTERNAL_OPTIONS */
--- a/DoConfig/fltk/jpeg/jpegint.h
+++ /dev/null
@@ -1,426 +1,0 @@
-/*
- * jpegint.h
- *
- * Copyright (C) 1991-1997, Thomas G. Lane.
- * Modified 1997-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file provides common declarations for the various JPEG modules.
- * These declarations are considered internal to the JPEG library; most
- * applications using the library shouldn't need to include this file.
- */
-
-
-/* Declarations for both compression & decompression */
-
-typedef enum {			/* Operating modes for buffer controllers */
-	JBUF_PASS_THRU,		/* Plain stripwise operation */
-	/* Remaining modes require a full-image buffer to have been created */
-	JBUF_SAVE_SOURCE,	/* Run source subobject only, save output */
-	JBUF_CRANK_DEST,	/* Run dest subobject only, using saved data */
-	JBUF_SAVE_AND_PASS	/* Run both subobjects, save output */
-} J_BUF_MODE;
-
-/* Values of global_state field (jdapi.c has some dependencies on ordering!) */
-#define CSTATE_START	100	/* after create_compress */
-#define CSTATE_SCANNING	101	/* start_compress done, write_scanlines OK */
-#define CSTATE_RAW_OK	102	/* start_compress done, write_raw_data OK */
-#define CSTATE_WRCOEFS	103	/* jpeg_write_coefficients done */
-#define DSTATE_START	200	/* after create_decompress */
-#define DSTATE_INHEADER	201	/* reading header markers, no SOS yet */
-#define DSTATE_READY	202	/* found SOS, ready for start_decompress */
-#define DSTATE_PRELOAD	203	/* reading multiscan file in start_decompress*/
-#define DSTATE_PRESCAN	204	/* performing dummy pass for 2-pass quant */
-#define DSTATE_SCANNING	205	/* start_decompress done, read_scanlines OK */
-#define DSTATE_RAW_OK	206	/* start_decompress done, read_raw_data OK */
-#define DSTATE_BUFIMAGE	207	/* expecting jpeg_start_output */
-#define DSTATE_BUFPOST	208	/* looking for SOS/EOI in jpeg_finish_output */
-#define DSTATE_RDCOEFS	209	/* reading file in jpeg_read_coefficients */
-#define DSTATE_STOPPING	210	/* looking for EOI in jpeg_finish_decompress */
-
-
-/* Declarations for compression modules */
-
-/* Master control module */
-struct jpeg_comp_master {
-  JMETHOD(void, prepare_for_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, pass_startup, (j_compress_ptr cinfo));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean call_pass_startup;	/* True if pass_startup must be called */
-  boolean is_last_pass;		/* True during last pass */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_c_main_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_compress_ptr cinfo,
-			       JSAMPARRAY input_buf, JDIMENSION *in_row_ctr,
-			       JDIMENSION in_rows_avail));
-};
-
-/* Compression preprocessing (downsampling input buffer control) */
-struct jpeg_c_prep_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, pre_process_data, (j_compress_ptr cinfo,
-				   JSAMPARRAY input_buf,
-				   JDIMENSION *in_row_ctr,
-				   JDIMENSION in_rows_avail,
-				   JSAMPIMAGE output_buf,
-				   JDIMENSION *out_row_group_ctr,
-				   JDIMENSION out_row_groups_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_c_coef_controller {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(boolean, compress_data, (j_compress_ptr cinfo,
-				   JSAMPIMAGE input_buf));
-};
-
-/* Colorspace conversion */
-struct jpeg_color_converter {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_compress_ptr cinfo,
-				JSAMPARRAY input_buf, JSAMPIMAGE output_buf,
-				JDIMENSION output_row, int num_rows));
-};
-
-/* Downsampling */
-struct jpeg_downsampler {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  JMETHOD(void, downsample, (j_compress_ptr cinfo,
-			     JSAMPIMAGE input_buf, JDIMENSION in_row_index,
-			     JSAMPIMAGE output_buf,
-			     JDIMENSION out_row_group_index));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Forward DCT (also controls coefficient quantization) */
-typedef JMETHOD(void, forward_DCT_ptr,
-		(j_compress_ptr cinfo, jpeg_component_info * compptr,
-		 JSAMPARRAY sample_data, JBLOCKROW coef_blocks,
-		 JDIMENSION start_row, JDIMENSION start_col,
-		 JDIMENSION num_blocks));
-
-struct jpeg_forward_dct {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo));
-  /* It is useful to allow each component to have a separate FDCT method. */
-  forward_DCT_ptr forward_DCT[MAX_COMPONENTS];
-};
-
-/* Entropy encoding */
-struct jpeg_entropy_encoder {
-  JMETHOD(void, start_pass, (j_compress_ptr cinfo, boolean gather_statistics));
-  JMETHOD(boolean, encode_mcu, (j_compress_ptr cinfo, JBLOCKROW *MCU_data));
-  JMETHOD(void, finish_pass, (j_compress_ptr cinfo));
-};
-
-/* Marker writing */
-struct jpeg_marker_writer {
-  JMETHOD(void, write_file_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_frame_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_scan_header, (j_compress_ptr cinfo));
-  JMETHOD(void, write_file_trailer, (j_compress_ptr cinfo));
-  JMETHOD(void, write_tables_only, (j_compress_ptr cinfo));
-  /* These routines are exported to allow insertion of extra markers */
-  /* Probably only COM and APPn markers should be written this way */
-  JMETHOD(void, write_marker_header, (j_compress_ptr cinfo, int marker,
-				      unsigned int datalen));
-  JMETHOD(void, write_marker_byte, (j_compress_ptr cinfo, int val));
-};
-
-
-/* Declarations for decompression modules */
-
-/* Master control module */
-struct jpeg_decomp_master {
-  JMETHOD(void, prepare_for_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_output_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean is_dummy_pass;	/* True during 1st pass for 2-pass quant */
-};
-
-/* Input control module */
-struct jpeg_input_controller {
-  JMETHOD(int, consume_input, (j_decompress_ptr cinfo));
-  JMETHOD(void, reset_input_controller, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, finish_input_pass, (j_decompress_ptr cinfo));
-
-  /* State variables made visible to other modules */
-  boolean has_multiple_scans;	/* True if file has multiple scans */
-  boolean eoi_reached;		/* True when EOI has been consumed */
-};
-
-/* Main buffer control (downsampled-data buffer) */
-struct jpeg_d_main_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, process_data, (j_decompress_ptr cinfo,
-			       JSAMPARRAY output_buf, JDIMENSION *out_row_ctr,
-			       JDIMENSION out_rows_avail));
-};
-
-/* Coefficient buffer control */
-struct jpeg_d_coef_controller {
-  JMETHOD(void, start_input_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, consume_data, (j_decompress_ptr cinfo));
-  JMETHOD(void, start_output_pass, (j_decompress_ptr cinfo));
-  JMETHOD(int, decompress_data, (j_decompress_ptr cinfo,
-				 JSAMPIMAGE output_buf));
-  /* Pointer to array of coefficient virtual arrays, or NULL if none */
-  jvirt_barray_ptr *coef_arrays;
-};
-
-/* Decompression postprocessing (color quantization buffer control) */
-struct jpeg_d_post_controller {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, J_BUF_MODE pass_mode));
-  JMETHOD(void, post_process_data, (j_decompress_ptr cinfo,
-				    JSAMPIMAGE input_buf,
-				    JDIMENSION *in_row_group_ctr,
-				    JDIMENSION in_row_groups_avail,
-				    JSAMPARRAY output_buf,
-				    JDIMENSION *out_row_ctr,
-				    JDIMENSION out_rows_avail));
-};
-
-/* Marker reading & parsing */
-struct jpeg_marker_reader {
-  JMETHOD(void, reset_marker_reader, (j_decompress_ptr cinfo));
-  /* Read markers until SOS or EOI.
-   * Returns same codes as are defined for jpeg_consume_input:
-   * JPEG_SUSPENDED, JPEG_REACHED_SOS, or JPEG_REACHED_EOI.
-   */
-  JMETHOD(int, read_markers, (j_decompress_ptr cinfo));
-  /* Read a restart marker --- exported for use by entropy decoder only */
-  jpeg_marker_parser_method read_restart_marker;
-
-  /* State of marker reader --- nominally internal, but applications
-   * supplying COM or APPn handlers might like to know the state.
-   */
-  boolean saw_SOI;		/* found SOI? */
-  boolean saw_SOF;		/* found SOF? */
-  int next_restart_num;		/* next restart number expected (0-7) */
-  unsigned int discarded_bytes;	/* # of bytes skipped looking for a marker */
-};
-
-/* Entropy decoding */
-struct jpeg_entropy_decoder {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, decode_mcu, (j_decompress_ptr cinfo, JBLOCKROW *MCU_data));
-  JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
-};
-
-/* Inverse DCT (also performs dequantization) */
-typedef JMETHOD(void, inverse_DCT_method_ptr,
-		(j_decompress_ptr cinfo, jpeg_component_info * compptr,
-		 JCOEFPTR coef_block,
-		 JSAMPARRAY output_buf, JDIMENSION output_col));
-
-struct jpeg_inverse_dct {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  /* It is useful to allow each component to have a separate IDCT method. */
-  inverse_DCT_method_ptr inverse_DCT[MAX_COMPONENTS];
-};
-
-/* Upsampling (note that upsampler must also call color converter) */
-struct jpeg_upsampler {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, upsample, (j_decompress_ptr cinfo,
-			   JSAMPIMAGE input_buf,
-			   JDIMENSION *in_row_group_ctr,
-			   JDIMENSION in_row_groups_avail,
-			   JSAMPARRAY output_buf,
-			   JDIMENSION *out_row_ctr,
-			   JDIMENSION out_rows_avail));
-
-  boolean need_context_rows;	/* TRUE if need rows above & below */
-};
-
-/* Colorspace conversion */
-struct jpeg_color_deconverter {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
-				JSAMPIMAGE input_buf, JDIMENSION input_row,
-				JSAMPARRAY output_buf, int num_rows));
-};
-
-/* Color quantization or color precision reduction */
-struct jpeg_color_quantizer {
-  JMETHOD(void, start_pass, (j_decompress_ptr cinfo, boolean is_pre_scan));
-  JMETHOD(void, color_quantize, (j_decompress_ptr cinfo,
-				 JSAMPARRAY input_buf, JSAMPARRAY output_buf,
-				 int num_rows));
-  JMETHOD(void, finish_pass, (j_decompress_ptr cinfo));
-  JMETHOD(void, new_color_map, (j_decompress_ptr cinfo));
-};
-
-
-/* Miscellaneous useful macros */
-
-#undef MAX
-#define MAX(a,b)	((a) > (b) ? (a) : (b))
-#undef MIN
-#define MIN(a,b)	((a) < (b) ? (a) : (b))
-
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity.  This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit.  But some
- * C compilers implement >> with an unsigned shift.  For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts.  SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS	INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft)  \
-	((shift_temp = (x)) < 0 ? \
-	 (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
-	 (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft)	((x) >> (shft))
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jinit_compress_master	jICompress
-#define jinit_c_master_control	jICMaster
-#define jinit_c_main_controller	jICMainC
-#define jinit_c_prep_controller	jICPrepC
-#define jinit_c_coef_controller	jICCoefC
-#define jinit_color_converter	jICColor
-#define jinit_downsampler	jIDownsampler
-#define jinit_forward_dct	jIFDCT
-#define jinit_huff_encoder	jIHEncoder
-#define jinit_arith_encoder	jIAEncoder
-#define jinit_marker_writer	jIMWriter
-#define jinit_master_decompress	jIDMaster
-#define jinit_d_main_controller	jIDMainC
-#define jinit_d_coef_controller	jIDCoefC
-#define jinit_d_post_controller	jIDPostC
-#define jinit_input_controller	jIInCtlr
-#define jinit_marker_reader	jIMReader
-#define jinit_huff_decoder	jIHDecoder
-#define jinit_arith_decoder	jIADecoder
-#define jinit_inverse_dct	jIIDCT
-#define jinit_upsampler		jIUpsampler
-#define jinit_color_deconverter	jIDColor
-#define jinit_1pass_quantizer	jI1Quant
-#define jinit_2pass_quantizer	jI2Quant
-#define jinit_merged_upsampler	jIMUpsampler
-#define jinit_memory_mgr	jIMemMgr
-#define jdiv_round_up		jDivRound
-#define jround_up		jRound
-#define jzero_far		jZeroFar
-#define jcopy_sample_rows	jCopySamples
-#define jcopy_block_row		jCopyBlocks
-#define jpeg_zigzag_order	jZIGTable
-#define jpeg_natural_order	jZAGTable
-#define jpeg_natural_order7	jZAG7Table
-#define jpeg_natural_order6	jZAG6Table
-#define jpeg_natural_order5	jZAG5Table
-#define jpeg_natural_order4	jZAG4Table
-#define jpeg_natural_order3	jZAG3Table
-#define jpeg_natural_order2	jZAG2Table
-#define jpeg_aritab		jAriTab
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays
- * and coefficient-block arrays.  This won't work on 80x86 because the arrays
- * are FAR and we're assuming a small-pointer memory model.  However, some
- * DOS compilers provide far-pointer versions of memcpy() and memset() even
- * in the small-model libraries.  These will be used if USE_FMEM is defined.
- * Otherwise, the routines in jutils.c do it the hard way.
- */
-
-#ifndef NEED_FAR_POINTERS	/* normal case, same as regular macro */
-#define FMEMZERO(target,size)	MEMZERO(target,size)
-#else				/* 80x86 case */
-#ifdef USE_FMEM
-#define FMEMZERO(target,size)	_fmemset((void FAR *)(target), 0, (size_t)(size))
-#else
-EXTERN(void) jzero_far JPP((void FAR * target, size_t bytestozero));
-#define FMEMZERO(target,size)	jzero_far(target, size)
-#endif
-#endif
-
-
-/* Compression module initialization routines */
-EXTERN(void) jinit_compress_master JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_c_master_control JPP((j_compress_ptr cinfo,
-					 boolean transcode_only));
-EXTERN(void) jinit_c_main_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_prep_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_c_coef_controller JPP((j_compress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_color_converter JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_downsampler JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_forward_dct JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_huff_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_arith_encoder JPP((j_compress_ptr cinfo));
-EXTERN(void) jinit_marker_writer JPP((j_compress_ptr cinfo));
-/* Decompression module initialization routines */
-EXTERN(void) jinit_master_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_d_main_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_coef_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_d_post_controller JPP((j_decompress_ptr cinfo,
-					  boolean need_full_buffer));
-EXTERN(void) jinit_input_controller JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_marker_reader JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_huff_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_arith_decoder JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_inverse_dct JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_upsampler JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_color_deconverter JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_1pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_2pass_quantizer JPP((j_decompress_ptr cinfo));
-EXTERN(void) jinit_merged_upsampler JPP((j_decompress_ptr cinfo));
-/* Memory manager initialization */
-EXTERN(void) jinit_memory_mgr JPP((j_common_ptr cinfo));
-
-/* Utility routines in jutils.c */
-EXTERN(long) jdiv_round_up JPP((long a, long b));
-EXTERN(long) jround_up JPP((long a, long b));
-EXTERN(void) jcopy_sample_rows JPP((JSAMPARRAY input_array, int source_row,
-				    JSAMPARRAY output_array, int dest_row,
-				    int num_rows, JDIMENSION num_cols));
-EXTERN(void) jcopy_block_row JPP((JBLOCKROW input_row, JBLOCKROW output_row,
-				  JDIMENSION num_blocks));
-/* Constant tables in jutils.c */
-#if 0				/* This table is not actually needed in v6a */
-extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
-#endif
-extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
-extern const int jpeg_natural_order7[]; /* zz to natural order for 7x7 block */
-extern const int jpeg_natural_order6[]; /* zz to natural order for 6x6 block */
-extern const int jpeg_natural_order5[]; /* zz to natural order for 5x5 block */
-extern const int jpeg_natural_order4[]; /* zz to natural order for 4x4 block */
-extern const int jpeg_natural_order3[]; /* zz to natural order for 3x3 block */
-extern const int jpeg_natural_order2[]; /* zz to natural order for 2x2 block */
-
-/* Arithmetic coding probability estimation tables in jaricom.c */
-extern const INT32 jpeg_aritab[];
-
-/* Suppress undefined-structure complaints if necessary. */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef AM_MEMORY_MANAGER	/* only jmemmgr.c defines these */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-#endif
-#endif /* INCOMPLETE_TYPES_BROKEN */
--- a/DoConfig/fltk/jpeg/jpeglib.h
+++ /dev/null
@@ -1,1180 +1,0 @@
-/*
- * jpeglib.h
- *
- * Copyright (C) 1991-1998, Thomas G. Lane.
- * Modified 2002-2013 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file defines the application interface for the JPEG library.
- * Most applications using the library need only include this file,
- * and perhaps jerror.h if they want to know the exact error codes.
- */
-
-#ifndef JPEGLIB_H
-#define JPEGLIB_H
-
-/*
- * First we include the configuration files that record how this
- * installation of the JPEG library is set up.  jconfig.h can be
- * generated automatically for many systems.  jmorecfg.h contains
- * manual configuration options that most people need not worry about.
- */
-
-#ifndef JCONFIG_INCLUDED	/* in case jinclude.h already did */
-#include "jconfig.h"		/* widely used configuration options */
-#endif
-#include "jmorecfg.h"		/* seldom changed options */
-
-
-#ifdef __cplusplus
-#ifndef DONT_USE_EXTERN_C
-extern "C" {
-#endif
-#endif
-
-/* Version IDs for the JPEG library.
- * Might be useful for tests like "#if JPEG_LIB_VERSION >= 90".
- */
-
-#define JPEG_LIB_VERSION        90	/* Compatibility version 9.0 */
-#define JPEG_LIB_VERSION_MAJOR  9
-#define JPEG_LIB_VERSION_MINOR  1
-
-
-/* Various constants determining the sizes of things.
- * All of these are specified by the JPEG standard,
- * so don't change them if you want to be compatible.
- */
-
-#define DCTSIZE		    8	/* The basic DCT block is 8x8 coefficients */
-#define DCTSIZE2	    64	/* DCTSIZE squared; # of elements in a block */
-#define NUM_QUANT_TBLS      4	/* Quantization tables are numbered 0..3 */
-#define NUM_HUFF_TBLS       4	/* Huffman tables are numbered 0..3 */
-#define NUM_ARITH_TBLS      16	/* Arith-coding tables are numbered 0..15 */
-#define MAX_COMPS_IN_SCAN   4	/* JPEG limit on # of components in one scan */
-#define MAX_SAMP_FACTOR     4	/* JPEG limit on sampling factors */
-/* Unfortunately, some bozo at Adobe saw no reason to be bound by the standard;
- * the PostScript DCT filter can emit files with many more than 10 blocks/MCU.
- * If you happen to run across such a file, you can up D_MAX_BLOCKS_IN_MCU
- * to handle it.  We even let you do this from the jconfig.h file.  However,
- * we strongly discourage changing C_MAX_BLOCKS_IN_MCU; just because Adobe
- * sometimes emits noncompliant files doesn't mean you should too.
- */
-#define C_MAX_BLOCKS_IN_MCU   10 /* compressor's limit on blocks per MCU */
-#ifndef D_MAX_BLOCKS_IN_MCU
-#define D_MAX_BLOCKS_IN_MCU   10 /* decompressor's limit on blocks per MCU */
-#endif
-
-
-/* Data structures for images (arrays of samples and of DCT coefficients).
- * On 80x86 machines, the image arrays are too big for near pointers,
- * but the pointer arrays can fit in near memory.
- */
-
-typedef JSAMPLE FAR *JSAMPROW;	/* ptr to one image row of pixel samples. */
-typedef JSAMPROW *JSAMPARRAY;	/* ptr to some rows (a 2-D sample array) */
-typedef JSAMPARRAY *JSAMPIMAGE;	/* a 3-D sample array: top index is color */
-
-typedef JCOEF JBLOCK[DCTSIZE2];	/* one block of coefficients */
-typedef JBLOCK FAR *JBLOCKROW;	/* pointer to one row of coefficient blocks */
-typedef JBLOCKROW *JBLOCKARRAY;		/* a 2-D array of coefficient blocks */
-typedef JBLOCKARRAY *JBLOCKIMAGE;	/* a 3-D array of coefficient blocks */
-
-typedef JCOEF FAR *JCOEFPTR;	/* useful in a couple of places */
-
-
-/* Types for JPEG compression parameters and working tables. */
-
-
-/* DCT coefficient quantization tables. */
-
-typedef struct {
-  /* This array gives the coefficient quantizers in natural array order
-   * (not the zigzag order in which they are stored in a JPEG DQT marker).
-   * CAUTION: IJG versions prior to v6a kept this array in zigzag order.
-   */
-  UINT16 quantval[DCTSIZE2];	/* quantization step for each coefficient */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JQUANT_TBL;
-
-
-/* Huffman coding tables. */
-
-typedef struct {
-  /* These two fields directly represent the contents of a JPEG DHT marker */
-  UINT8 bits[17];		/* bits[k] = # of symbols with codes of */
-				/* length k bits; bits[0] is unused */
-  UINT8 huffval[256];		/* The symbols, in order of incr code length */
-  /* This field is used only during compression.  It's initialized FALSE when
-   * the table is created, and set TRUE when it's been output to the file.
-   * You could suppress output of a table by setting this to TRUE.
-   * (See jpeg_suppress_tables for an example.)
-   */
-  boolean sent_table;		/* TRUE when table has been output */
-} JHUFF_TBL;
-
-
-/* Basic info about one component (color channel). */
-
-typedef struct {
-  /* These values are fixed over the whole image. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOF marker. */
-  int component_id;		/* identifier for this component (0..255) */
-  int component_index;		/* its index in SOF or cinfo->comp_info[] */
-  int h_samp_factor;		/* horizontal sampling factor (1..4) */
-  int v_samp_factor;		/* vertical sampling factor (1..4) */
-  int quant_tbl_no;		/* quantization table selector (0..3) */
-  /* These values may vary between scans. */
-  /* For compression, they must be supplied by parameter setup; */
-  /* for decompression, they are read from the SOS marker. */
-  /* The decompressor output side may not use these variables. */
-  int dc_tbl_no;		/* DC entropy table selector (0..3) */
-  int ac_tbl_no;		/* AC entropy table selector (0..3) */
-  
-  /* Remaining fields should be treated as private by applications. */
-  
-  /* These values are computed during compression or decompression startup: */
-  /* Component's size in DCT blocks.
-   * Any dummy blocks added to complete an MCU are not counted; therefore
-   * these values do not depend on whether a scan is interleaved or not.
-   */
-  JDIMENSION width_in_blocks;
-  JDIMENSION height_in_blocks;
-  /* Size of a DCT block in samples,
-   * reflecting any scaling we choose to apply during the DCT step.
-   * Values from 1 to 16 are supported.
-   * Note that different components may receive different DCT scalings.
-   */
-  int DCT_h_scaled_size;
-  int DCT_v_scaled_size;
-  /* The downsampled dimensions are the component's actual, unpadded number
-   * of samples at the main buffer (preprocessing/compression interface);
-   * DCT scaling is included, so
-   * downsampled_width =
-   *   ceil(image_width * Hi/Hmax * DCT_h_scaled_size/block_size)
-   * and similarly for height.
-   */
-  JDIMENSION downsampled_width;	 /* actual width in samples */
-  JDIMENSION downsampled_height; /* actual height in samples */
-  /* For decompression, in cases where some of the components will be
-   * ignored (eg grayscale output from YCbCr image), we can skip most
-   * computations for the unused components.
-   * For compression, some of the components will need further quantization
-   * scale by factor of 2 after DCT (eg BG_YCC output from normal RGB input).
-   * The field is first set TRUE for decompression, FALSE for compression
-   * in initial_setup, and then adapted in color conversion setup.
-   */
-  boolean component_needed;
-
-  /* These values are computed before starting a scan of the component. */
-  /* The decompressor output side may not use these variables. */
-  int MCU_width;		/* number of blocks per MCU, horizontally */
-  int MCU_height;		/* number of blocks per MCU, vertically */
-  int MCU_blocks;		/* MCU_width * MCU_height */
-  int MCU_sample_width;	/* MCU width in samples: MCU_width * DCT_h_scaled_size */
-  int last_col_width;		/* # of non-dummy blocks across in last MCU */
-  int last_row_height;		/* # of non-dummy blocks down in last MCU */
-
-  /* Saved quantization table for component; NULL if none yet saved.
-   * See jdinput.c comments about the need for this information.
-   * This field is currently used only for decompression.
-   */
-  JQUANT_TBL * quant_table;
-
-  /* Private per-component storage for DCT or IDCT subsystem. */
-  void * dct_table;
-} jpeg_component_info;
-
-
-/* The script for encoding a multiple-scan file is an array of these: */
-
-typedef struct {
-  int comps_in_scan;		/* number of components encoded in this scan */
-  int component_index[MAX_COMPS_IN_SCAN]; /* their SOF/comp_info[] indexes */
-  int Ss, Se;			/* progressive JPEG spectral selection parms */
-  int Ah, Al;			/* progressive JPEG successive approx. parms */
-} jpeg_scan_info;
-
-/* The decompressor can save APPn and COM markers in a list of these: */
-
-typedef struct jpeg_marker_struct FAR * jpeg_saved_marker_ptr;
-
-struct jpeg_marker_struct {
-  jpeg_saved_marker_ptr next;	/* next in list, or NULL */
-  UINT8 marker;			/* marker code: JPEG_COM, or JPEG_APP0+n */
-  unsigned int original_length;	/* # bytes of data in the file */
-  unsigned int data_length;	/* # bytes of data saved at data[] */
-  JOCTET FAR * data;		/* the data contained in the marker */
-  /* the marker length word is not counted in data_length or original_length */
-};
-
-/* Known color spaces. */
-
-typedef enum {
-	JCS_UNKNOWN,		/* error/unspecified */
-	JCS_GRAYSCALE,		/* monochrome */
-	JCS_RGB,		/* red/green/blue, standard RGB (sRGB) */
-	JCS_YCbCr,		/* Y/Cb/Cr (also known as YUV), standard YCC */
-	JCS_CMYK,		/* C/M/Y/K */
-	JCS_YCCK,		/* Y/Cb/Cr/K */
-	JCS_BG_RGB,		/* big gamut red/green/blue, bg-sRGB */
-	JCS_BG_YCC		/* big gamut Y/Cb/Cr, bg-sYCC */
-} J_COLOR_SPACE;
-
-/* Supported color transforms. */
-
-typedef enum {
-	JCT_NONE           = 0,
-	JCT_SUBTRACT_GREEN = 1
-} J_COLOR_TRANSFORM;
-
-/* DCT/IDCT algorithm options. */
-
-typedef enum {
-	JDCT_ISLOW,		/* slow but accurate integer algorithm */
-	JDCT_IFAST,		/* faster, less accurate integer method */
-	JDCT_FLOAT		/* floating-point: accurate, fast on fast HW */
-} J_DCT_METHOD;
-
-#ifndef JDCT_DEFAULT		/* may be overridden in jconfig.h */
-#define JDCT_DEFAULT  JDCT_ISLOW
-#endif
-#ifndef JDCT_FASTEST		/* may be overridden in jconfig.h */
-#define JDCT_FASTEST  JDCT_IFAST
-#endif
-
-/* Dithering options for decompression. */
-
-typedef enum {
-	JDITHER_NONE,		/* no dithering */
-	JDITHER_ORDERED,	/* simple ordered dither */
-	JDITHER_FS		/* Floyd-Steinberg error diffusion dither */
-} J_DITHER_MODE;
-
-
-/* Common fields between JPEG compression and decompression master structs. */
-
-#define jpeg_common_fields \
-  struct jpeg_error_mgr * err;	/* Error handler module */\
-  struct jpeg_memory_mgr * mem;	/* Memory manager module */\
-  struct jpeg_progress_mgr * progress; /* Progress monitor, or NULL if none */\
-  void * client_data;		/* Available for use by application */\
-  boolean is_decompressor;	/* So common code can tell which is which */\
-  int global_state		/* For checking call sequence validity */
-
-/* Routines that are to be used by both halves of the library are declared
- * to receive a pointer to this structure.  There are no actual instances of
- * jpeg_common_struct, only of jpeg_compress_struct and jpeg_decompress_struct.
- */
-struct jpeg_common_struct {
-  jpeg_common_fields;		/* Fields common to both master struct types */
-  /* Additional fields follow in an actual jpeg_compress_struct or
-   * jpeg_decompress_struct.  All three structs must agree on these
-   * initial fields!  (This would be a lot cleaner in C++.)
-   */
-};
-
-typedef struct jpeg_common_struct * j_common_ptr;
-typedef struct jpeg_compress_struct * j_compress_ptr;
-typedef struct jpeg_decompress_struct * j_decompress_ptr;
-
-
-/* Master record for a compression instance */
-
-struct jpeg_compress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_decompress_struct */
-
-  /* Destination for compressed data */
-  struct jpeg_destination_mgr * dest;
-
-  /* Description of source image --- these fields must be filled in by
-   * outer application before starting compression.  in_color_space must
-   * be correct before you can even call jpeg_set_defaults().
-   */
-
-  JDIMENSION image_width;	/* input image width */
-  JDIMENSION image_height;	/* input image height */
-  int input_components;		/* # of color components in input image */
-  J_COLOR_SPACE in_color_space;	/* colorspace of input image */
-
-  double input_gamma;		/* image gamma of input image */
-
-  /* Compression parameters --- these fields must be set before calling
-   * jpeg_start_compress().  We recommend calling jpeg_set_defaults() to
-   * initialize everything to reasonable defaults, then changing anything
-   * the application specifically wants to change.  That way you won't get
-   * burnt when new parameters are added.  Also note that there are several
-   * helper routines to simplify changing parameters.
-   */
-
-  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
-
-  JDIMENSION jpeg_width;	/* scaled JPEG image width */
-  JDIMENSION jpeg_height;	/* scaled JPEG image height */
-  /* Dimensions of actual JPEG image that will be written to file,
-   * derived from input dimensions by scaling factors above.
-   * These fields are computed by jpeg_start_compress().
-   * You can also use jpeg_calc_jpeg_dimensions() to determine these values
-   * in advance of calling jpeg_start_compress().
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  int q_scale_factor[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined,
-   * and corresponding scale factors (percentage, initialized 100).
-   */
-
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  int num_scans;		/* # of entries in scan_info array */
-  const jpeg_scan_info * scan_info; /* script for multi-scan file, or NULL */
-  /* The default value of scan_info is NULL, which causes a single-scan
-   * sequential JPEG file to be emitted.  To create a multi-scan file,
-   * set num_scans and scan_info to point to an array of scan definitions.
-   */
-
-  boolean raw_data_in;		/* TRUE=caller supplies downsampled data */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-  boolean optimize_coding;	/* TRUE=optimize entropy encoding parms */
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-  boolean do_fancy_downsampling; /* TRUE=apply fancy downsampling */
-  int smoothing_factor;		/* 1..100, or 0 for no input smoothing */
-  J_DCT_METHOD dct_method;	/* DCT algorithm selector */
-
-  /* The restart interval can be specified in absolute MCUs by setting
-   * restart_interval, or in MCU rows by setting restart_in_rows
-   * (in which case the correct restart_interval will be figured
-   * for each scan).
-   */
-  unsigned int restart_interval; /* MCUs per restart, or 0 for no restart */
-  int restart_in_rows;		/* if > 0, MCU rows per restart interval */
-
-  /* Parameters controlling emission of special markers. */
-
-  boolean write_JFIF_header;	/* should a JFIF marker be written? */
-  UINT8 JFIF_major_version;	/* What to write for the JFIF version number */
-  UINT8 JFIF_minor_version;
-  /* These three values are not used by the JPEG code, merely copied */
-  /* into the JFIF APP0 marker.  density_unit can be 0 for unknown, */
-  /* 1 for dots/inch, or 2 for dots/cm.  Note that the pixel aspect */
-  /* ratio is defined by X_density/Y_density even when density_unit=0. */
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean write_Adobe_marker;	/* should an Adobe marker be written? */
-
-  J_COLOR_TRANSFORM color_transform;
-  /* Color transform identifier, writes LSE marker if nonzero */
-
-  /* State variable: index of next scanline to be written to
-   * jpeg_write_scanlines().  Application may use this to control its
-   * processing loop, e.g., "while (next_scanline < image_height)".
-   */
-
-  JDIMENSION next_scanline;	/* 0 .. image_height-1  */
-
-  /* Remaining fields are known throughout compressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during compression startup
-   */
-  boolean progressive_mode;	/* TRUE if scan script uses progressive mode */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  int min_DCT_h_scaled_size;	/* smallest DCT_h_scaled_size of any component */
-  int min_DCT_v_scaled_size;	/* smallest DCT_v_scaled_size of any component */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows to be input to coef ctlr */
-  /* The coefficient controller receives data in units of MCU rows as defined
-   * for fully interleaved scans (whether the JPEG file is interleaved or not).
-   * There are v_samp_factor * DCTSIZE sample rows of each component in an
-   * "iMCU" (interleaved MCU) row.
-   */
-  
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-  
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-  
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[C_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  int block_size;		/* the basic DCT block size: 1..16 */
-  const int * natural_order;	/* natural-order position array */
-  int lim_Se;			/* min( Se, DCTSIZE2-1 ) */
-
-  /*
-   * Links to compression subobjects (methods and private variables of modules)
-   */
-  struct jpeg_comp_master * master;
-  struct jpeg_c_main_controller * main;
-  struct jpeg_c_prep_controller * prep;
-  struct jpeg_c_coef_controller * coef;
-  struct jpeg_marker_writer * marker;
-  struct jpeg_color_converter * cconvert;
-  struct jpeg_downsampler * downsample;
-  struct jpeg_forward_dct * fdct;
-  struct jpeg_entropy_encoder * entropy;
-  jpeg_scan_info * script_space; /* workspace for jpeg_simple_progression */
-  int script_space_size;
-};
-
-
-/* Master record for a decompression instance */
-
-struct jpeg_decompress_struct {
-  jpeg_common_fields;		/* Fields shared with jpeg_compress_struct */
-
-  /* Source of compressed data */
-  struct jpeg_source_mgr * src;
-
-  /* Basic description of image --- filled in by jpeg_read_header(). */
-  /* Application may inspect these values to decide how to process image. */
-
-  JDIMENSION image_width;	/* nominal image width (from SOF marker) */
-  JDIMENSION image_height;	/* nominal image height */
-  int num_components;		/* # of color components in JPEG image */
-  J_COLOR_SPACE jpeg_color_space; /* colorspace of JPEG image */
-
-  /* Decompression processing parameters --- these fields must be set before
-   * calling jpeg_start_decompress().  Note that jpeg_read_header() initializes
-   * them to default values.
-   */
-
-  J_COLOR_SPACE out_color_space; /* colorspace for output */
-
-  unsigned int scale_num, scale_denom; /* fraction by which to scale image */
-
-  double output_gamma;		/* image gamma wanted in output */
-
-  boolean buffered_image;	/* TRUE=multiple output passes */
-  boolean raw_data_out;		/* TRUE=downsampled data wanted */
-
-  J_DCT_METHOD dct_method;	/* IDCT algorithm selector */
-  boolean do_fancy_upsampling;	/* TRUE=apply fancy upsampling */
-  boolean do_block_smoothing;	/* TRUE=apply interblock smoothing */
-
-  boolean quantize_colors;	/* TRUE=colormapped output wanted */
-  /* the following are ignored if not quantize_colors: */
-  J_DITHER_MODE dither_mode;	/* type of color dithering to use */
-  boolean two_pass_quantize;	/* TRUE=use two-pass color quantization */
-  int desired_number_of_colors;	/* max # colors to use in created colormap */
-  /* these are significant only in buffered-image mode: */
-  boolean enable_1pass_quant;	/* enable future use of 1-pass quantizer */
-  boolean enable_external_quant;/* enable future use of external colormap */
-  boolean enable_2pass_quant;	/* enable future use of 2-pass quantizer */
-
-  /* Description of actual output image that will be returned to application.
-   * These fields are computed by jpeg_start_decompress().
-   * You can also use jpeg_calc_output_dimensions() to determine these values
-   * in advance of calling jpeg_start_decompress().
-   */
-
-  JDIMENSION output_width;	/* scaled image width */
-  JDIMENSION output_height;	/* scaled image height */
-  int out_color_components;	/* # of color components in out_color_space */
-  int output_components;	/* # of color components returned */
-  /* output_components is 1 (a colormap index) when quantizing colors;
-   * otherwise it equals out_color_components.
-   */
-  int rec_outbuf_height;	/* min recommended height of scanline buffer */
-  /* If the buffer passed to jpeg_read_scanlines() is less than this many rows
-   * high, space and time will be wasted due to unnecessary data copying.
-   * Usually rec_outbuf_height will be 1 or 2, at most 4.
-   */
-
-  /* When quantizing colors, the output colormap is described by these fields.
-   * The application can supply a colormap by setting colormap non-NULL before
-   * calling jpeg_start_decompress; otherwise a colormap is created during
-   * jpeg_start_decompress or jpeg_start_output.
-   * The map has out_color_components rows and actual_number_of_colors columns.
-   */
-  int actual_number_of_colors;	/* number of entries in use */
-  JSAMPARRAY colormap;		/* The color map as a 2-D pixel array */
-
-  /* State variables: these variables indicate the progress of decompression.
-   * The application may examine these but must not modify them.
-   */
-
-  /* Row index of next scanline to be read from jpeg_read_scanlines().
-   * Application may use this to control its processing loop, e.g.,
-   * "while (output_scanline < output_height)".
-   */
-  JDIMENSION output_scanline;	/* 0 .. output_height-1  */
-
-  /* Current input scan number and number of iMCU rows completed in scan.
-   * These indicate the progress of the decompressor input side.
-   */
-  int input_scan_number;	/* Number of SOS markers seen so far */
-  JDIMENSION input_iMCU_row;	/* Number of iMCU rows completed */
-
-  /* The "output scan number" is the notional scan being displayed by the
-   * output side.  The decompressor will not allow output scan/row number
-   * to get ahead of input scan/row, but it can fall arbitrarily far behind.
-   */
-  int output_scan_number;	/* Nominal scan number being displayed */
-  JDIMENSION output_iMCU_row;	/* Number of iMCU rows read */
-
-  /* Current progression status.  coef_bits[c][i] indicates the precision
-   * with which component c's DCT coefficient i (in zigzag order) is known.
-   * It is -1 when no data has yet been received, otherwise it is the point
-   * transform (shift) value for the most recent scan of the coefficient
-   * (thus, 0 at completion of the progression).
-   * This pointer is NULL when reading a non-progressive file.
-   */
-  int (*coef_bits)[DCTSIZE2];	/* -1 or current Al value for each coef */
-
-  /* Internal JPEG parameters --- the application usually need not look at
-   * these fields.  Note that the decompressor output side may not use
-   * any parameters that can change between scans.
-   */
-
-  /* Quantization and Huffman tables are carried forward across input
-   * datastreams when processing abbreviated JPEG datastreams.
-   */
-
-  JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS];
-  /* ptrs to coefficient quantization tables, or NULL if not defined */
-
-  JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS];
-  /* ptrs to Huffman coding tables, or NULL if not defined */
-
-  /* These parameters are never carried across datastreams, since they
-   * are given in SOF/SOS markers or defined to be reset by SOI.
-   */
-
-  int data_precision;		/* bits of precision in image data */
-
-  jpeg_component_info * comp_info;
-  /* comp_info[i] describes component that appears i'th in SOF */
-
-  boolean is_baseline;		/* TRUE if Baseline SOF0 encountered */
-  boolean progressive_mode;	/* TRUE if SOFn specifies progressive mode */
-  boolean arith_code;		/* TRUE=arithmetic coding, FALSE=Huffman */
-
-  UINT8 arith_dc_L[NUM_ARITH_TBLS]; /* L values for DC arith-coding tables */
-  UINT8 arith_dc_U[NUM_ARITH_TBLS]; /* U values for DC arith-coding tables */
-  UINT8 arith_ac_K[NUM_ARITH_TBLS]; /* Kx values for AC arith-coding tables */
-
-  unsigned int restart_interval; /* MCUs per restart interval, or 0 for no restart */
-
-  /* These fields record data obtained from optional markers recognized by
-   * the JPEG library.
-   */
-  boolean saw_JFIF_marker;	/* TRUE iff a JFIF APP0 marker was found */
-  /* Data copied from JFIF marker; only valid if saw_JFIF_marker is TRUE: */
-  UINT8 JFIF_major_version;	/* JFIF version number */
-  UINT8 JFIF_minor_version;
-  UINT8 density_unit;		/* JFIF code for pixel size units */
-  UINT16 X_density;		/* Horizontal pixel density */
-  UINT16 Y_density;		/* Vertical pixel density */
-  boolean saw_Adobe_marker;	/* TRUE iff an Adobe APP14 marker was found */
-  UINT8 Adobe_transform;	/* Color transform code from Adobe marker */
-
-  J_COLOR_TRANSFORM color_transform;
-  /* Color transform identifier derived from LSE marker, otherwise zero */
-
-  boolean CCIR601_sampling;	/* TRUE=first samples are cosited */
-
-  /* Aside from the specific data retained from APPn markers known to the
-   * library, the uninterpreted contents of any or all APPn and COM markers
-   * can be saved in a list for examination by the application.
-   */
-  jpeg_saved_marker_ptr marker_list; /* Head of list of saved markers */
-
-  /* Remaining fields are known throughout decompressor, but generally
-   * should not be touched by a surrounding application.
-   */
-
-  /*
-   * These fields are computed during decompression startup
-   */
-  int max_h_samp_factor;	/* largest h_samp_factor */
-  int max_v_samp_factor;	/* largest v_samp_factor */
-
-  int min_DCT_h_scaled_size;	/* smallest DCT_h_scaled_size of any component */
-  int min_DCT_v_scaled_size;	/* smallest DCT_v_scaled_size of any component */
-
-  JDIMENSION total_iMCU_rows;	/* # of iMCU rows in image */
-  /* The coefficient controller's input and output progress is measured in
-   * units of "iMCU" (interleaved MCU) rows.  These are the same as MCU rows
-   * in fully interleaved JPEG scans, but are used whether the scan is
-   * interleaved or not.  We define an iMCU row as v_samp_factor DCT block
-   * rows of each component.  Therefore, the IDCT output contains
-   * v_samp_factor*DCT_v_scaled_size sample rows of a component per iMCU row.
-   */
-
-  JSAMPLE * sample_range_limit; /* table for fast range-limiting */
-
-  /*
-   * These fields are valid during any one scan.
-   * They describe the components and MCUs actually appearing in the scan.
-   * Note that the decompressor output side must not use these fields.
-   */
-  int comps_in_scan;		/* # of JPEG components in this scan */
-  jpeg_component_info * cur_comp_info[MAX_COMPS_IN_SCAN];
-  /* *cur_comp_info[i] describes component that appears i'th in SOS */
-
-  JDIMENSION MCUs_per_row;	/* # of MCUs across the image */
-  JDIMENSION MCU_rows_in_scan;	/* # of MCU rows in the image */
-
-  int blocks_in_MCU;		/* # of DCT blocks per MCU */
-  int MCU_membership[D_MAX_BLOCKS_IN_MCU];
-  /* MCU_membership[i] is index in cur_comp_info of component owning */
-  /* i'th block in an MCU */
-
-  int Ss, Se, Ah, Al;		/* progressive JPEG parameters for scan */
-
-  /* These fields are derived from Se of first SOS marker.
-   */
-  int block_size;		/* the basic DCT block size: 1..16 */
-  const int * natural_order; /* natural-order position array for entropy decode */
-  int lim_Se;			/* min( Se, DCTSIZE2-1 ) for entropy decode */
-
-  /* This field is shared between entropy decoder and marker parser.
-   * It is either zero or the code of a JPEG marker that has been
-   * read from the data source, but has not yet been processed.
-   */
-  int unread_marker;
-
-  /*
-   * Links to decompression subobjects (methods, private variables of modules)
-   */
-  struct jpeg_decomp_master * master;
-  struct jpeg_d_main_controller * main;
-  struct jpeg_d_coef_controller * coef;
-  struct jpeg_d_post_controller * post;
-  struct jpeg_input_controller * inputctl;
-  struct jpeg_marker_reader * marker;
-  struct jpeg_entropy_decoder * entropy;
-  struct jpeg_inverse_dct * idct;
-  struct jpeg_upsampler * upsample;
-  struct jpeg_color_deconverter * cconvert;
-  struct jpeg_color_quantizer * cquantize;
-};
-
-
-/* "Object" declarations for JPEG modules that may be supplied or called
- * directly by the surrounding application.
- * As with all objects in the JPEG library, these structs only define the
- * publicly visible methods and state variables of a module.  Additional
- * private fields may exist after the public ones.
- */
-
-
-/* Error handler object */
-
-struct jpeg_error_mgr {
-  /* Error exit handler: does not return to caller */
-  JMETHOD(noreturn_t, error_exit, (j_common_ptr cinfo));
-  /* Conditionally emit a trace or warning message */
-  JMETHOD(void, emit_message, (j_common_ptr cinfo, int msg_level));
-  /* Routine that actually outputs a trace or error message */
-  JMETHOD(void, output_message, (j_common_ptr cinfo));
-  /* Format a message string for the most recent JPEG error or message */
-  JMETHOD(void, format_message, (j_common_ptr cinfo, char * buffer));
-#define JMSG_LENGTH_MAX  200	/* recommended size of format_message buffer */
-  /* Reset error state variables at start of a new image */
-  JMETHOD(void, reset_error_mgr, (j_common_ptr cinfo));
-  
-  /* The message ID code and any parameters are saved here.
-   * A message can have one string parameter or up to 8 int parameters.
-   */
-  int msg_code;
-#define JMSG_STR_PARM_MAX  80
-  union {
-    int i[8];
-    char s[JMSG_STR_PARM_MAX];
-  } msg_parm;
-  
-  /* Standard state variables for error facility */
-  
-  int trace_level;		/* max msg_level that will be displayed */
-  
-  /* For recoverable corrupt-data errors, we emit a warning message,
-   * but keep going unless emit_message chooses to abort.  emit_message
-   * should count warnings in num_warnings.  The surrounding application
-   * can check for bad data by seeing if num_warnings is nonzero at the
-   * end of processing.
-   */
-  long num_warnings;		/* number of corrupt-data warnings */
-
-  /* These fields point to the table(s) of error message strings.
-   * An application can change the table pointer to switch to a different
-   * message list (typically, to change the language in which errors are
-   * reported).  Some applications may wish to add additional error codes
-   * that will be handled by the JPEG library error mechanism; the second
-   * table pointer is used for this purpose.
-   *
-   * First table includes all errors generated by JPEG library itself.
-   * Error code 0 is reserved for a "no such error string" message.
-   */
-  const char * const * jpeg_message_table; /* Library errors */
-  int last_jpeg_message;    /* Table contains strings 0..last_jpeg_message */
-  /* Second table can be added by application (see cjpeg/djpeg for example).
-   * It contains strings numbered first_addon_message..last_addon_message.
-   */
-  const char * const * addon_message_table; /* Non-library errors */
-  int first_addon_message;	/* code for first string in addon table */
-  int last_addon_message;	/* code for last string in addon table */
-};
-
-
-/* Progress monitor object */
-
-struct jpeg_progress_mgr {
-  JMETHOD(void, progress_monitor, (j_common_ptr cinfo));
-
-  long pass_counter;		/* work units completed in this pass */
-  long pass_limit;		/* total number of work units in this pass */
-  int completed_passes;		/* passes completed so far */
-  int total_passes;		/* total number of passes expected */
-};
-
-
-/* Data destination object for compression */
-
-struct jpeg_destination_mgr {
-  JOCTET * next_output_byte;	/* => next byte to write in buffer */
-  size_t free_in_buffer;	/* # of byte spaces remaining in buffer */
-
-  JMETHOD(void, init_destination, (j_compress_ptr cinfo));
-  JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
-  JMETHOD(void, term_destination, (j_compress_ptr cinfo));
-};
-
-
-/* Data source object for decompression */
-
-struct jpeg_source_mgr {
-  const JOCTET * next_input_byte; /* => next byte to read from buffer */
-  size_t bytes_in_buffer;	/* # of bytes remaining in buffer */
-
-  JMETHOD(void, init_source, (j_decompress_ptr cinfo));
-  JMETHOD(boolean, fill_input_buffer, (j_decompress_ptr cinfo));
-  JMETHOD(void, skip_input_data, (j_decompress_ptr cinfo, long num_bytes));
-  JMETHOD(boolean, resync_to_restart, (j_decompress_ptr cinfo, int desired));
-  JMETHOD(void, term_source, (j_decompress_ptr cinfo));
-};
-
-
-/* Memory manager object.
- * Allocates "small" objects (a few K total), "large" objects (tens of K),
- * and "really big" objects (virtual arrays with backing store if needed).
- * The memory manager does not allow individual objects to be freed; rather,
- * each created object is assigned to a pool, and whole pools can be freed
- * at once.  This is faster and more convenient than remembering exactly what
- * to free, especially where malloc()/free() are not too speedy.
- * NB: alloc routines never return NULL.  They exit to error_exit if not
- * successful.
- */
-
-#define JPOOL_PERMANENT	0	/* lasts until master record is destroyed */
-#define JPOOL_IMAGE	1	/* lasts until done with image/datastream */
-#define JPOOL_NUMPOOLS	2
-
-typedef struct jvirt_sarray_control * jvirt_sarray_ptr;
-typedef struct jvirt_barray_control * jvirt_barray_ptr;
-
-
-struct jpeg_memory_mgr {
-  /* Method pointers */
-  JMETHOD(void *, alloc_small, (j_common_ptr cinfo, int pool_id,
-				size_t sizeofobject));
-  JMETHOD(void FAR *, alloc_large, (j_common_ptr cinfo, int pool_id,
-				     size_t sizeofobject));
-  JMETHOD(JSAMPARRAY, alloc_sarray, (j_common_ptr cinfo, int pool_id,
-				     JDIMENSION samplesperrow,
-				     JDIMENSION numrows));
-  JMETHOD(JBLOCKARRAY, alloc_barray, (j_common_ptr cinfo, int pool_id,
-				      JDIMENSION blocksperrow,
-				      JDIMENSION numrows));
-  JMETHOD(jvirt_sarray_ptr, request_virt_sarray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION samplesperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(jvirt_barray_ptr, request_virt_barray, (j_common_ptr cinfo,
-						  int pool_id,
-						  boolean pre_zero,
-						  JDIMENSION blocksperrow,
-						  JDIMENSION numrows,
-						  JDIMENSION maxaccess));
-  JMETHOD(void, realize_virt_arrays, (j_common_ptr cinfo));
-  JMETHOD(JSAMPARRAY, access_virt_sarray, (j_common_ptr cinfo,
-					   jvirt_sarray_ptr ptr,
-					   JDIMENSION start_row,
-					   JDIMENSION num_rows,
-					   boolean writable));
-  JMETHOD(JBLOCKARRAY, access_virt_barray, (j_common_ptr cinfo,
-					    jvirt_barray_ptr ptr,
-					    JDIMENSION start_row,
-					    JDIMENSION num_rows,
-					    boolean writable));
-  JMETHOD(void, free_pool, (j_common_ptr cinfo, int pool_id));
-  JMETHOD(void, self_destruct, (j_common_ptr cinfo));
-
-  /* Limit on memory allocation for this JPEG object.  (Note that this is
-   * merely advisory, not a guaranteed maximum; it only affects the space
-   * used for virtual-array buffers.)  May be changed by outer application
-   * after creating the JPEG object.
-   */
-  long max_memory_to_use;
-
-  /* Maximum allocation request accepted by alloc_large. */
-  long max_alloc_chunk;
-};
-
-
-/* Routine signature for application-supplied marker processing methods.
- * Need not pass marker code since it is stored in cinfo->unread_marker.
- */
-typedef JMETHOD(boolean, jpeg_marker_parser_method, (j_decompress_ptr cinfo));
-
-
-/* Declarations for routines called by application.
- * The JPP macro hides prototype parameters from compilers that can't cope.
- * Note JPP requires double parentheses.
- */
-
-#ifdef HAVE_PROTOTYPES
-#define JPP(arglist)	arglist
-#else
-#define JPP(arglist)	()
-#endif
-
-
-/* Short forms of external names for systems with brain-damaged linkers.
- * We shorten external names to be unique in the first six letters, which
- * is good enough for all known systems.
- * (If your compiler itself needs names to be unique in less than 15 
- * characters, you are out of luck.  Get a better compiler.)
- */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jpeg_std_error		jStdError
-#define jpeg_CreateCompress	jCreaCompress
-#define jpeg_CreateDecompress	jCreaDecompress
-#define jpeg_destroy_compress	jDestCompress
-#define jpeg_destroy_decompress	jDestDecompress
-#define jpeg_stdio_dest		jStdDest
-#define jpeg_stdio_src		jStdSrc
-#define jpeg_mem_dest		jMemDest
-#define jpeg_mem_src		jMemSrc
-#define jpeg_set_defaults	jSetDefaults
-#define jpeg_set_colorspace	jSetColorspace
-#define jpeg_default_colorspace	jDefColorspace
-#define jpeg_set_quality	jSetQuality
-#define jpeg_set_linear_quality	jSetLQuality
-#define jpeg_default_qtables	jDefQTables
-#define jpeg_add_quant_table	jAddQuantTable
-#define jpeg_quality_scaling	jQualityScaling
-#define jpeg_simple_progression	jSimProgress
-#define jpeg_suppress_tables	jSuppressTables
-#define jpeg_alloc_quant_table	jAlcQTable
-#define jpeg_alloc_huff_table	jAlcHTable
-#define jpeg_start_compress	jStrtCompress
-#define jpeg_write_scanlines	jWrtScanlines
-#define jpeg_finish_compress	jFinCompress
-#define jpeg_calc_jpeg_dimensions	jCjpegDimensions
-#define jpeg_write_raw_data	jWrtRawData
-#define jpeg_write_marker	jWrtMarker
-#define jpeg_write_m_header	jWrtMHeader
-#define jpeg_write_m_byte	jWrtMByte
-#define jpeg_write_tables	jWrtTables
-#define jpeg_read_header	jReadHeader
-#define jpeg_start_decompress	jStrtDecompress
-#define jpeg_read_scanlines	jReadScanlines
-#define jpeg_finish_decompress	jFinDecompress
-#define jpeg_read_raw_data	jReadRawData
-#define jpeg_has_multiple_scans	jHasMultScn
-#define jpeg_start_output	jStrtOutput
-#define jpeg_finish_output	jFinOutput
-#define jpeg_input_complete	jInComplete
-#define jpeg_new_colormap	jNewCMap
-#define jpeg_consume_input	jConsumeInput
-#define jpeg_core_output_dimensions	jCoreDimensions
-#define jpeg_calc_output_dimensions	jCalcDimensions
-#define jpeg_save_markers	jSaveMarkers
-#define jpeg_set_marker_processor	jSetMarker
-#define jpeg_read_coefficients	jReadCoefs
-#define jpeg_write_coefficients	jWrtCoefs
-#define jpeg_copy_critical_parameters	jCopyCrit
-#define jpeg_abort_compress	jAbrtCompress
-#define jpeg_abort_decompress	jAbrtDecompress
-#define jpeg_abort		jAbort
-#define jpeg_destroy		jDestroy
-#define jpeg_resync_to_restart	jResyncRestart
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/* Default error-management setup */
-EXTERN(struct jpeg_error_mgr *) jpeg_std_error
-	JPP((struct jpeg_error_mgr * err));
-
-/* Initialization of JPEG compression objects.
- * jpeg_create_compress() and jpeg_create_decompress() are the exported
- * names that applications should call.  These expand to calls on
- * jpeg_CreateCompress and jpeg_CreateDecompress with additional information
- * passed for version mismatch checking.
- * NB: you must set up the error-manager BEFORE calling jpeg_create_xxx.
- */
-#define jpeg_create_compress(cinfo) \
-    jpeg_CreateCompress((cinfo), JPEG_LIB_VERSION, \
-			(size_t) sizeof(struct jpeg_compress_struct))
-#define jpeg_create_decompress(cinfo) \
-    jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
-			  (size_t) sizeof(struct jpeg_decompress_struct))
-EXTERN(void) jpeg_CreateCompress JPP((j_compress_ptr cinfo,
-				      int version, size_t structsize));
-EXTERN(void) jpeg_CreateDecompress JPP((j_decompress_ptr cinfo,
-					int version, size_t structsize));
-/* Destruction of JPEG compression objects */
-EXTERN(void) jpeg_destroy_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_destroy_decompress JPP((j_decompress_ptr cinfo));
-
-/* Standard data source and destination managers: stdio streams. */
-/* Caller is responsible for opening the file before and closing after. */
-EXTERN(void) jpeg_stdio_dest JPP((j_compress_ptr cinfo, FILE * outfile));
-EXTERN(void) jpeg_stdio_src JPP((j_decompress_ptr cinfo, FILE * infile));
-
-/* Data source and destination managers: memory buffers. */
-EXTERN(void) jpeg_mem_dest JPP((j_compress_ptr cinfo,
-			       unsigned char ** outbuffer,
-			       unsigned long * outsize));
-EXTERN(void) jpeg_mem_src JPP((j_decompress_ptr cinfo,
-			      unsigned char * inbuffer,
-			      unsigned long insize));
-
-/* Default parameter setup for compression */
-EXTERN(void) jpeg_set_defaults JPP((j_compress_ptr cinfo));
-/* Compression parameter setup aids */
-EXTERN(void) jpeg_set_colorspace JPP((j_compress_ptr cinfo,
-				      J_COLOR_SPACE colorspace));
-EXTERN(void) jpeg_default_colorspace JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_set_quality JPP((j_compress_ptr cinfo, int quality,
-				   boolean force_baseline));
-EXTERN(void) jpeg_set_linear_quality JPP((j_compress_ptr cinfo,
-					  int scale_factor,
-					  boolean force_baseline));
-EXTERN(void) jpeg_default_qtables JPP((j_compress_ptr cinfo,
-				       boolean force_baseline));
-EXTERN(void) jpeg_add_quant_table JPP((j_compress_ptr cinfo, int which_tbl,
-				       const unsigned int *basic_table,
-				       int scale_factor,
-				       boolean force_baseline));
-EXTERN(int) jpeg_quality_scaling JPP((int quality));
-EXTERN(void) jpeg_simple_progression JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_suppress_tables JPP((j_compress_ptr cinfo,
-				       boolean suppress));
-EXTERN(JQUANT_TBL *) jpeg_alloc_quant_table JPP((j_common_ptr cinfo));
-EXTERN(JHUFF_TBL *) jpeg_alloc_huff_table JPP((j_common_ptr cinfo));
-
-/* Main entry points for compression */
-EXTERN(void) jpeg_start_compress JPP((j_compress_ptr cinfo,
-				      boolean write_all_tables));
-EXTERN(JDIMENSION) jpeg_write_scanlines JPP((j_compress_ptr cinfo,
-					     JSAMPARRAY scanlines,
-					     JDIMENSION num_lines));
-EXTERN(void) jpeg_finish_compress JPP((j_compress_ptr cinfo));
-
-/* Precalculate JPEG dimensions for current compression parameters. */
-EXTERN(void) jpeg_calc_jpeg_dimensions JPP((j_compress_ptr cinfo));
-
-/* Replaces jpeg_write_scanlines when writing raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_write_raw_data JPP((j_compress_ptr cinfo,
-					    JSAMPIMAGE data,
-					    JDIMENSION num_lines));
-
-/* Write a special marker.  See libjpeg.txt concerning safe usage. */
-EXTERN(void) jpeg_write_marker
-	JPP((j_compress_ptr cinfo, int marker,
-	     const JOCTET * dataptr, unsigned int datalen));
-/* Same, but piecemeal. */
-EXTERN(void) jpeg_write_m_header
-	JPP((j_compress_ptr cinfo, int marker, unsigned int datalen));
-EXTERN(void) jpeg_write_m_byte
-	JPP((j_compress_ptr cinfo, int val));
-
-/* Alternate compression function: just write an abbreviated table file */
-EXTERN(void) jpeg_write_tables JPP((j_compress_ptr cinfo));
-
-/* Decompression startup: read start of JPEG datastream to see what's there */
-EXTERN(int) jpeg_read_header JPP((j_decompress_ptr cinfo,
-				  boolean require_image));
-/* Return value is one of: */
-#define JPEG_SUSPENDED		0 /* Suspended due to lack of input data */
-#define JPEG_HEADER_OK		1 /* Found valid image datastream */
-#define JPEG_HEADER_TABLES_ONLY	2 /* Found valid table-specs-only datastream */
-/* If you pass require_image = TRUE (normal case), you need not check for
- * a TABLES_ONLY return code; an abbreviated file will cause an error exit.
- * JPEG_SUSPENDED is only possible if you use a data source module that can
- * give a suspension return (the stdio source module doesn't).
- */
-
-/* Main entry points for decompression */
-EXTERN(boolean) jpeg_start_decompress JPP((j_decompress_ptr cinfo));
-EXTERN(JDIMENSION) jpeg_read_scanlines JPP((j_decompress_ptr cinfo,
-					    JSAMPARRAY scanlines,
-					    JDIMENSION max_lines));
-EXTERN(boolean) jpeg_finish_decompress JPP((j_decompress_ptr cinfo));
-
-/* Replaces jpeg_read_scanlines when reading raw downsampled data. */
-EXTERN(JDIMENSION) jpeg_read_raw_data JPP((j_decompress_ptr cinfo,
-					   JSAMPIMAGE data,
-					   JDIMENSION max_lines));
-
-/* Additional entry points for buffered-image mode. */
-EXTERN(boolean) jpeg_has_multiple_scans JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_start_output JPP((j_decompress_ptr cinfo,
-				       int scan_number));
-EXTERN(boolean) jpeg_finish_output JPP((j_decompress_ptr cinfo));
-EXTERN(boolean) jpeg_input_complete JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_new_colormap JPP((j_decompress_ptr cinfo));
-EXTERN(int) jpeg_consume_input JPP((j_decompress_ptr cinfo));
-/* Return value is one of: */
-/* #define JPEG_SUSPENDED	0    Suspended due to lack of input data */
-#define JPEG_REACHED_SOS	1 /* Reached start of new scan */
-#define JPEG_REACHED_EOI	2 /* Reached end of image */
-#define JPEG_ROW_COMPLETED	3 /* Completed one iMCU row */
-#define JPEG_SCAN_COMPLETED	4 /* Completed last iMCU row of a scan */
-
-/* Precalculate output dimensions for current decompression parameters. */
-EXTERN(void) jpeg_core_output_dimensions JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_calc_output_dimensions JPP((j_decompress_ptr cinfo));
-
-/* Control saving of COM and APPn markers into marker_list. */
-EXTERN(void) jpeg_save_markers
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     unsigned int length_limit));
-
-/* Install a special processing method for COM or APPn markers. */
-EXTERN(void) jpeg_set_marker_processor
-	JPP((j_decompress_ptr cinfo, int marker_code,
-	     jpeg_marker_parser_method routine));
-
-/* Read or write raw DCT coefficients --- useful for lossless transcoding. */
-EXTERN(jvirt_barray_ptr *) jpeg_read_coefficients JPP((j_decompress_ptr cinfo));
-EXTERN(void) jpeg_write_coefficients JPP((j_compress_ptr cinfo,
-					  jvirt_barray_ptr * coef_arrays));
-EXTERN(void) jpeg_copy_critical_parameters JPP((j_decompress_ptr srcinfo,
-						j_compress_ptr dstinfo));
-
-/* If you choose to abort compression or decompression before completing
- * jpeg_finish_(de)compress, then you need to clean up to release memory,
- * temporary files, etc.  You can just call jpeg_destroy_(de)compress
- * if you're done with the JPEG object, but if you want to clean it up and
- * reuse it, call this:
- */
-EXTERN(void) jpeg_abort_compress JPP((j_compress_ptr cinfo));
-EXTERN(void) jpeg_abort_decompress JPP((j_decompress_ptr cinfo));
-
-/* Generic versions of jpeg_abort and jpeg_destroy that work on either
- * flavor of JPEG object.  These may be more convenient in some places.
- */
-EXTERN(void) jpeg_abort JPP((j_common_ptr cinfo));
-EXTERN(void) jpeg_destroy JPP((j_common_ptr cinfo));
-
-/* Default restart-marker-resync procedure for use by data source modules */
-EXTERN(boolean) jpeg_resync_to_restart JPP((j_decompress_ptr cinfo,
-					    int desired));
-
-
-/* These marker codes are exported since applications and data source modules
- * are likely to want to use them.
- */
-
-#define JPEG_RST0	0xD0	/* RST0 marker code */
-#define JPEG_EOI	0xD9	/* EOI marker code */
-#define JPEG_APP0	0xE0	/* APP0 marker code */
-#define JPEG_COM	0xFE	/* COM marker code */
-
-
-/* If we have a brain-damaged compiler that emits warnings (or worse, errors)
- * for structure definitions that are never filled in, keep it quiet by
- * supplying dummy definitions for the various substructures.
- */
-
-#ifdef INCOMPLETE_TYPES_BROKEN
-#ifndef JPEG_INTERNALS		/* will be defined in jpegint.h */
-struct jvirt_sarray_control { long dummy; };
-struct jvirt_barray_control { long dummy; };
-struct jpeg_comp_master { long dummy; };
-struct jpeg_c_main_controller { long dummy; };
-struct jpeg_c_prep_controller { long dummy; };
-struct jpeg_c_coef_controller { long dummy; };
-struct jpeg_marker_writer { long dummy; };
-struct jpeg_color_converter { long dummy; };
-struct jpeg_downsampler { long dummy; };
-struct jpeg_forward_dct { long dummy; };
-struct jpeg_entropy_encoder { long dummy; };
-struct jpeg_decomp_master { long dummy; };
-struct jpeg_d_main_controller { long dummy; };
-struct jpeg_d_coef_controller { long dummy; };
-struct jpeg_d_post_controller { long dummy; };
-struct jpeg_input_controller { long dummy; };
-struct jpeg_marker_reader { long dummy; };
-struct jpeg_entropy_decoder { long dummy; };
-struct jpeg_inverse_dct { long dummy; };
-struct jpeg_upsampler { long dummy; };
-struct jpeg_color_deconverter { long dummy; };
-struct jpeg_color_quantizer { long dummy; };
-#endif /* JPEG_INTERNALS */
-#endif /* INCOMPLETE_TYPES_BROKEN */
-
-
-/*
- * The JPEG library modules define JPEG_INTERNALS before including this file.
- * The internal structure declarations are read only when that is true.
- * Applications using the library should not include jpegint.h, but may wish
- * to include jerror.h.
- */
-
-#ifdef JPEG_INTERNALS
-#include "jpegint.h"		/* fetch private declarations */
-#include "jerror.h"		/* fetch error codes too */
-#endif
-
-#ifdef __cplusplus
-#ifndef DONT_USE_EXTERN_C
-}
-#endif
-#endif
-
-#endif /* JPEGLIB_H */
--- a/DoConfig/fltk/jpeg/jquant1.c
+++ /dev/null
@@ -1,857 +1,0 @@
-/*
- * jquant1.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modified 2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 1-pass color quantization (color mapping) routines.
- * These routines provide mapping to a fixed color map using equally spaced
- * color values.  Optional Floyd-Steinberg or ordered dithering is available.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef QUANT_1PASS_SUPPORTED
-
-
-/*
- * The main purpose of 1-pass quantization is to provide a fast, if not very
- * high quality, colormapped output capability.  A 2-pass quantizer usually
- * gives better visual quality; however, for quantized grayscale output this
- * quantizer is perfectly adequate.  Dithering is highly recommended with this
- * quantizer, though you can turn it off if you really want to.
- *
- * In 1-pass quantization the colormap must be chosen in advance of seeing the
- * image.  We use a map consisting of all combinations of Ncolors[i] color
- * values for the i'th component.  The Ncolors[] values are chosen so that
- * their product, the total number of colors, is no more than that requested.
- * (In most cases, the product will be somewhat less.)
- *
- * Since the colormap is orthogonal, the representative value for each color
- * component can be determined without considering the other components;
- * then these indexes can be combined into a colormap index by a standard
- * N-dimensional-array-subscript calculation.  Most of the arithmetic involved
- * can be precalculated and stored in the lookup table colorindex[].
- * colorindex[i][j] maps pixel value j in component i to the nearest
- * representative value (grid plane) for that component; this index is
- * multiplied by the array stride for component i, so that the
- * index of the colormap entry closest to a given pixel value is just
- *    sum( colorindex[component-number][pixel-component-value] )
- * Aside from being fast, this scheme allows for variable spacing between
- * representative values with no additional lookup cost.
- *
- * If gamma correction has been applied in color conversion, it might be wise
- * to adjust the color grid spacing so that the representative colors are
- * equidistant in linear space.  At this writing, gamma correction is not
- * implemented by jdcolor, so nothing is done here.
- */
-
-
-/* Declarations for ordered dithering.
- *
- * We use a standard 16x16 ordered dither array.  The basic concept of ordered
- * dithering is described in many references, for instance Dale Schumacher's
- * chapter II.2 of Graphics Gems II (James Arvo, ed. Academic Press, 1991).
- * In place of Schumacher's comparisons against a "threshold" value, we add a
- * "dither" value to the input pixel and then round the result to the nearest
- * output value.  The dither value is equivalent to (0.5 - threshold) times
- * the distance between output values.  For ordered dithering, we assume that
- * the output colors are equally spaced; if not, results will probably be
- * worse, since the dither may be too much or too little at a given point.
- *
- * The normal calculation would be to form pixel value + dither, range-limit
- * this to 0..MAXJSAMPLE, and then index into the colorindex table as usual.
- * We can skip the separate range-limiting step by extending the colorindex
- * table in both directions.
- */
-
-#define ODITHER_SIZE  16	/* dimension of dither matrix */
-/* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */
-#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE)	/* # cells in matrix */
-#define ODITHER_MASK  (ODITHER_SIZE-1) /* mask for wrapping around counters */
-
-typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE];
-typedef int (*ODITHER_MATRIX_PTR)[ODITHER_SIZE];
-
-static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
-  /* Bayer's order-4 dither array.  Generated by the code given in
-   * Stephen Hawley's article "Ordered Dithering" in Graphics Gems I.
-   * The values in this array must range from 0 to ODITHER_CELLS-1.
-   */
-  {   0,192, 48,240, 12,204, 60,252,  3,195, 51,243, 15,207, 63,255 },
-  { 128, 64,176,112,140, 76,188,124,131, 67,179,115,143, 79,191,127 },
-  {  32,224, 16,208, 44,236, 28,220, 35,227, 19,211, 47,239, 31,223 },
-  { 160, 96,144, 80,172,108,156, 92,163, 99,147, 83,175,111,159, 95 },
-  {   8,200, 56,248,  4,196, 52,244, 11,203, 59,251,  7,199, 55,247 },
-  { 136, 72,184,120,132, 68,180,116,139, 75,187,123,135, 71,183,119 },
-  {  40,232, 24,216, 36,228, 20,212, 43,235, 27,219, 39,231, 23,215 },
-  { 168,104,152, 88,164,100,148, 84,171,107,155, 91,167,103,151, 87 },
-  {   2,194, 50,242, 14,206, 62,254,  1,193, 49,241, 13,205, 61,253 },
-  { 130, 66,178,114,142, 78,190,126,129, 65,177,113,141, 77,189,125 },
-  {  34,226, 18,210, 46,238, 30,222, 33,225, 17,209, 45,237, 29,221 },
-  { 162, 98,146, 82,174,110,158, 94,161, 97,145, 81,173,109,157, 93 },
-  {  10,202, 58,250,  6,198, 54,246,  9,201, 57,249,  5,197, 53,245 },
-  { 138, 74,186,122,134, 70,182,118,137, 73,185,121,133, 69,181,117 },
-  {  42,234, 26,218, 38,230, 22,214, 41,233, 25,217, 37,229, 21,213 },
-  { 170,106,154, 90,166,102,150, 86,169,105,153, 89,165,101,149, 85 }
-};
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count.  The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- *		...	(here)	7/16
- *		3/16	5/16	1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed.  We
- * need only a few extra variables to hold the errors immediately around the
- * current column.  (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array is indexed [component#][position].
- * We provide (#columns + 2) entries per component; the extra entry at each
- * end saves us from special-casing the first and last pixels.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR;		/* 16 bits should be enough */
-typedef int LOCFSERROR;		/* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR;		/* may need more than 16 bits */
-typedef INT32 LOCFSERROR;	/* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR;	/* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-#define MAX_Q_COMPS 4		/* max components I can handle */
-
-typedef struct {
-  struct jpeg_color_quantizer pub; /* public fields */
-
-  /* Initially allocated colormap is saved here */
-  JSAMPARRAY sv_colormap;	/* The color map as a 2-D pixel array */
-  int sv_actual;		/* number of entries in use */
-
-  JSAMPARRAY colorindex;	/* Precomputed mapping for speed */
-  /* colorindex[i][j] = index of color closest to pixel value j in component i,
-   * premultiplied as described above.  Since colormap indexes must fit into
-   * JSAMPLEs, the entries of this array will too.
-   */
-  boolean is_padded;		/* is the colorindex padded for odither? */
-
-  int Ncolors[MAX_Q_COMPS];	/* # of values alloced to each component */
-
-  /* Variables for ordered dithering */
-  int row_index;		/* cur row's vertical index in dither matrix */
-  ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
-
-  /* Variables for Floyd-Steinberg dithering */
-  FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
-  boolean on_odd_row;		/* flag to remember which row we are on */
-} my_cquantizer;
-
-typedef my_cquantizer * my_cquantize_ptr;
-
-
-/*
- * Policy-making subroutines for create_colormap and create_colorindex.
- * These routines determine the colormap to be used.  The rest of the module
- * only assumes that the colormap is orthogonal.
- *
- *  * select_ncolors decides how to divvy up the available colors
- *    among the components.
- *  * output_value defines the set of representative values for a component.
- *  * largest_input_value defines the mapping from input values to
- *    representative values for a component.
- * Note that the latter two routines may impose different policies for
- * different components, though this is not currently done.
- */
-
-
-LOCAL(int)
-select_ncolors (j_decompress_ptr cinfo, int Ncolors[])
-/* Determine allocation of desired colors to components, */
-/* and fill in Ncolors[] array to indicate choice. */
-/* Return value is total number of colors (product of Ncolors[] values). */
-{
-  int nc = cinfo->out_color_components; /* number of color components */
-  int max_colors = cinfo->desired_number_of_colors;
-  int total_colors, iroot, i, j;
-  boolean changed;
-  long temp;
-  static const int RGB_order[3] = { RGB_GREEN, RGB_RED, RGB_BLUE };
-
-  /* We can allocate at least the nc'th root of max_colors per component. */
-  /* Compute floor(nc'th root of max_colors). */
-  iroot = 1;
-  do {
-    iroot++;
-    temp = iroot;		/* set temp = iroot ** nc */
-    for (i = 1; i < nc; i++)
-      temp *= iroot;
-  } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */
-  iroot--;			/* now iroot = floor(root) */
-
-  /* Must have at least 2 color values per component */
-  if (iroot < 2)
-    ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, (int) temp);
-
-  /* Initialize to iroot color values for each component */
-  total_colors = 1;
-  for (i = 0; i < nc; i++) {
-    Ncolors[i] = iroot;
-    total_colors *= iroot;
-  }
-  /* We may be able to increment the count for one or more components without
-   * exceeding max_colors, though we know not all can be incremented.
-   * Sometimes, the first component can be incremented more than once!
-   * (Example: for 16 colors, we start at 2*2*2, go to 3*2*2, then 4*2*2.)
-   * In RGB colorspace, try to increment G first, then R, then B.
-   */
-  do {
-    changed = FALSE;
-    for (i = 0; i < nc; i++) {
-      j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i);
-      /* calculate new total_colors if Ncolors[j] is incremented */
-      temp = total_colors / Ncolors[j];
-      temp *= Ncolors[j]+1;	/* done in long arith to avoid oflo */
-      if (temp > (long) max_colors)
-	break;			/* won't fit, done with this pass */
-      Ncolors[j]++;		/* OK, apply the increment */
-      total_colors = (int) temp;
-      changed = TRUE;
-    }
-  } while (changed);
-
-  return total_colors;
-}
-
-
-LOCAL(int)
-output_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
-/* Return j'th output value, where j will range from 0 to maxj */
-/* The output values must fall in 0..MAXJSAMPLE in increasing order */
-{
-  /* We always provide values 0 and MAXJSAMPLE for each component;
-   * any additional values are equally spaced between these limits.
-   * (Forcing the upper and lower values to the limits ensures that
-   * dithering can't produce a color outside the selected gamut.)
-   */
-  return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj);
-}
-
-
-LOCAL(int)
-largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
-/* Return largest input value that should map to j'th output value */
-/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */
-{
-  /* Breakpoints are halfway between values returned by output_value */
-  return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj));
-}
-
-
-/*
- * Create the colormap.
- */
-
-LOCAL(void)
-create_colormap (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPARRAY colormap;		/* Created colormap */
-  int total_colors;		/* Number of distinct output colors */
-  int i,j,k, nci, blksize, blkdist, ptr, val;
-
-  /* Select number of colors for each component */
-  total_colors = select_ncolors(cinfo, cquantize->Ncolors);
-
-  /* Report selected color counts */
-  if (cinfo->out_color_components == 3)
-    TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS,
-	     total_colors, cquantize->Ncolors[0],
-	     cquantize->Ncolors[1], cquantize->Ncolors[2]);
-  else
-    TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors);
-
-  /* Allocate and fill in the colormap. */
-  /* The colors are ordered in the map in standard row-major order, */
-  /* i.e. rightmost (highest-indexed) color changes most rapidly. */
-
-  colormap = (*cinfo->mem->alloc_sarray)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE,
-     (JDIMENSION) total_colors, (JDIMENSION) cinfo->out_color_components);
-
-  /* blksize is number of adjacent repeated entries for a component */
-  /* blkdist is distance between groups of identical entries for a component */
-  blkdist = total_colors;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    /* fill in colormap entries for i'th color component */
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    blksize = blkdist / nci;
-    for (j = 0; j < nci; j++) {
-      /* Compute j'th output value (out of nci) for component */
-      val = output_value(cinfo, i, j, nci-1);
-      /* Fill in all colormap entries that have this value of this component */
-      for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) {
-	/* fill in blksize entries beginning at ptr */
-	for (k = 0; k < blksize; k++)
-	  colormap[i][ptr+k] = (JSAMPLE) val;
-      }
-    }
-    blkdist = blksize;		/* blksize of this color is blkdist of next */
-  }
-
-  /* Save the colormap in private storage,
-   * where it will survive color quantization mode changes.
-   */
-  cquantize->sv_colormap = colormap;
-  cquantize->sv_actual = total_colors;
-}
-
-
-/*
- * Create the color index table.
- */
-
-LOCAL(void)
-create_colorindex (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPROW indexptr;
-  int i,j,k, nci, blksize, val, pad;
-
-  /* For ordered dither, we pad the color index tables by MAXJSAMPLE in
-   * each direction (input index values can be -MAXJSAMPLE .. 2*MAXJSAMPLE).
-   * This is not necessary in the other dithering modes.  However, we
-   * flag whether it was done in case user changes dithering mode.
-   */
-  if (cinfo->dither_mode == JDITHER_ORDERED) {
-    pad = MAXJSAMPLE*2;
-    cquantize->is_padded = TRUE;
-  } else {
-    pad = 0;
-    cquantize->is_padded = FALSE;
-  }
-
-  cquantize->colorindex = (*cinfo->mem->alloc_sarray)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE,
-     (JDIMENSION) (MAXJSAMPLE+1 + pad),
-     (JDIMENSION) cinfo->out_color_components);
-
-  /* blksize is number of adjacent repeated entries for a component */
-  blksize = cquantize->sv_actual;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    /* fill in colorindex entries for i'th color component */
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    blksize = blksize / nci;
-
-    /* adjust colorindex pointers to provide padding at negative indexes. */
-    if (pad)
-      cquantize->colorindex[i] += MAXJSAMPLE;
-
-    /* in loop, val = index of current output value, */
-    /* and k = largest j that maps to current val */
-    indexptr = cquantize->colorindex[i];
-    val = 0;
-    k = largest_input_value(cinfo, i, 0, nci-1);
-    for (j = 0; j <= MAXJSAMPLE; j++) {
-      while (j > k)		/* advance val if past boundary */
-	k = largest_input_value(cinfo, i, ++val, nci-1);
-      /* premultiply so that no multiplication needed in main processing */
-      indexptr[j] = (JSAMPLE) (val * blksize);
-    }
-    /* Pad at both ends if necessary */
-    if (pad)
-      for (j = 1; j <= MAXJSAMPLE; j++) {
-	indexptr[-j] = indexptr[0];
-	indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE];
-      }
-  }
-}
-
-
-/*
- * Create an ordered-dither array for a component having ncolors
- * distinct output values.
- */
-
-LOCAL(ODITHER_MATRIX_PTR)
-make_odither_array (j_decompress_ptr cinfo, int ncolors)
-{
-  ODITHER_MATRIX_PTR odither;
-  int j,k;
-  INT32 num,den;
-
-  odither = (ODITHER_MATRIX_PTR)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(ODITHER_MATRIX));
-  /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1).
-   * Hence the dither value for the matrix cell with fill order f
-   * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1).
-   * On 16-bit-int machine, be careful to avoid overflow.
-   */
-  den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1));
-  for (j = 0; j < ODITHER_SIZE; j++) {
-    for (k = 0; k < ODITHER_SIZE; k++) {
-      num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k])))
-	    * MAXJSAMPLE;
-      /* Ensure round towards zero despite C's lack of consistency
-       * about rounding negative values in integer division...
-       */
-      odither[j][k] = (int) (num<0 ? -((-num)/den) : num/den);
-    }
-  }
-  return odither;
-}
-
-
-/*
- * Create the ordered-dither tables.
- * Components having the same number of representative colors may 
- * share a dither table.
- */
-
-LOCAL(void)
-create_odither_tables (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  ODITHER_MATRIX_PTR odither;
-  int i, j, nci;
-
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    odither = NULL;		/* search for matching prior component */
-    for (j = 0; j < i; j++) {
-      if (nci == cquantize->Ncolors[j]) {
-	odither = cquantize->odither[j];
-	break;
-      }
-    }
-    if (odither == NULL)	/* need a new table? */
-      odither = make_odither_array(cinfo, nci);
-    cquantize->odither[i] = odither;
-  }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF(void)
-color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		JSAMPARRAY output_buf, int num_rows)
-/* General case, no dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPARRAY colorindex = cquantize->colorindex;
-  register int pixcode, ci;
-  register JSAMPROW ptrin, ptrout;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  register int nc = cinfo->out_color_components;
-
-  for (row = 0; row < num_rows; row++) {
-    ptrin = input_buf[row];
-    ptrout = output_buf[row];
-    for (col = width; col > 0; col--) {
-      pixcode = 0;
-      for (ci = 0; ci < nc; ci++) {
-	pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
-      }
-      *ptrout++ = (JSAMPLE) pixcode;
-    }
-  }
-}
-
-
-METHODDEF(void)
-color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		 JSAMPARRAY output_buf, int num_rows)
-/* Fast path for out_color_components==3, no dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register int pixcode;
-  register JSAMPROW ptrin, ptrout;
-  JSAMPROW colorindex0 = cquantize->colorindex[0];
-  JSAMPROW colorindex1 = cquantize->colorindex[1];
-  JSAMPROW colorindex2 = cquantize->colorindex[2];
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    ptrin = input_buf[row];
-    ptrout = output_buf[row];
-    for (col = width; col > 0; col--) {
-      pixcode  = GETJSAMPLE(colorindex0[GETJSAMPLE(*ptrin++)]);
-      pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*ptrin++)]);
-      pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*ptrin++)]);
-      *ptrout++ = (JSAMPLE) pixcode;
-    }
-  }
-}
-
-
-METHODDEF(void)
-quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		     JSAMPARRAY output_buf, int num_rows)
-/* General case, with ordered dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex_ci;
-  int * dither;			/* points to active row of dither matrix */
-  int row_index, col_index;	/* current indexes into dither matrix */
-  int nc = cinfo->out_color_components;
-  int ci;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    /* Initialize output values to 0 so can process components separately */
-    FMEMZERO((void FAR *) output_buf[row],
-	     (size_t) (width * SIZEOF(JSAMPLE)));
-    row_index = cquantize->row_index;
-    for (ci = 0; ci < nc; ci++) {
-      input_ptr = input_buf[row] + ci;
-      output_ptr = output_buf[row];
-      colorindex_ci = cquantize->colorindex[ci];
-      dither = cquantize->odither[ci][row_index];
-      col_index = 0;
-
-      for (col = width; col > 0; col--) {
-	/* Form pixel value + dither, range-limit to 0..MAXJSAMPLE,
-	 * select output value, accumulate into output code for this pixel.
-	 * Range-limiting need not be done explicitly, as we have extended
-	 * the colorindex table to produce the right answers for out-of-range
-	 * inputs.  The maximum dither is +- MAXJSAMPLE; this sets the
-	 * required amount of padding.
-	 */
-	*output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]];
-	input_ptr += nc;
-	output_ptr++;
-	col_index = (col_index + 1) & ODITHER_MASK;
-      }
-    }
-    /* Advance row index for next row */
-    row_index = (row_index + 1) & ODITHER_MASK;
-    cquantize->row_index = row_index;
-  }
-}
-
-
-METHODDEF(void)
-quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		      JSAMPARRAY output_buf, int num_rows)
-/* Fast path for out_color_components==3, with ordered dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register int pixcode;
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex0 = cquantize->colorindex[0];
-  JSAMPROW colorindex1 = cquantize->colorindex[1];
-  JSAMPROW colorindex2 = cquantize->colorindex[2];
-  int * dither0;		/* points to active row of dither matrix */
-  int * dither1;
-  int * dither2;
-  int row_index, col_index;	/* current indexes into dither matrix */
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    row_index = cquantize->row_index;
-    input_ptr = input_buf[row];
-    output_ptr = output_buf[row];
-    dither0 = cquantize->odither[0][row_index];
-    dither1 = cquantize->odither[1][row_index];
-    dither2 = cquantize->odither[2][row_index];
-    col_index = 0;
-
-    for (col = width; col > 0; col--) {
-      pixcode  = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) +
-					dither0[col_index]]);
-      pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) +
-					dither1[col_index]]);
-      pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) +
-					dither2[col_index]]);
-      *output_ptr++ = (JSAMPLE) pixcode;
-      col_index = (col_index + 1) & ODITHER_MASK;
-    }
-    row_index = (row_index + 1) & ODITHER_MASK;
-    cquantize->row_index = row_index;
-  }
-}
-
-
-METHODDEF(void)
-quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		    JSAMPARRAY output_buf, int num_rows)
-/* General case, with Floyd-Steinberg dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register LOCFSERROR cur;	/* current error or pixel value */
-  LOCFSERROR belowerr;		/* error for pixel below cur */
-  LOCFSERROR bpreverr;		/* error for below/prev col */
-  LOCFSERROR bnexterr;		/* error for below/next col */
-  LOCFSERROR delta;
-  register FSERRPTR errorptr;	/* => fserrors[] at column before current */
-  register JSAMPROW input_ptr;
-  register JSAMPROW output_ptr;
-  JSAMPROW colorindex_ci;
-  JSAMPROW colormap_ci;
-  int pixcode;
-  int nc = cinfo->out_color_components;
-  int dir;			/* 1 for left-to-right, -1 for right-to-left */
-  int dirnc;			/* dir * nc */
-  int ci;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  JSAMPLE *range_limit = cinfo->sample_range_limit;
-  SHIFT_TEMPS
-
-  for (row = 0; row < num_rows; row++) {
-    /* Initialize output values to 0 so can process components separately */
-    FMEMZERO((void FAR *) output_buf[row],
-	     (size_t) (width * SIZEOF(JSAMPLE)));
-    for (ci = 0; ci < nc; ci++) {
-      input_ptr = input_buf[row] + ci;
-      output_ptr = output_buf[row];
-      if (cquantize->on_odd_row) {
-	/* work right to left in this row */
-	input_ptr += (width-1) * nc; /* so point to rightmost pixel */
-	output_ptr += width-1;
-	dir = -1;
-	dirnc = -nc;
-	errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */
-      } else {
-	/* work left to right in this row */
-	dir = 1;
-	dirnc = nc;
-	errorptr = cquantize->fserrors[ci]; /* => entry before first column */
-      }
-      colorindex_ci = cquantize->colorindex[ci];
-      colormap_ci = cquantize->sv_colormap[ci];
-      /* Preset error values: no error propagated to first pixel from left */
-      cur = 0;
-      /* and no error propagated to row below yet */
-      belowerr = bpreverr = 0;
-
-      for (col = width; col > 0; col--) {
-	/* cur holds the error propagated from the previous pixel on the
-	 * current line.  Add the error propagated from the previous line
-	 * to form the complete error correction term for this pixel, and
-	 * round the error term (which is expressed * 16) to an integer.
-	 * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
-	 * for either sign of the error value.
-	 * Note: errorptr points to *previous* column's array entry.
-	 */
-	cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4);
-	/* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
-	 * The maximum error is +- MAXJSAMPLE; this sets the required size
-	 * of the range_limit array.
-	 */
-	cur += GETJSAMPLE(*input_ptr);
-	cur = GETJSAMPLE(range_limit[cur]);
-	/* Select output value, accumulate into output code for this pixel */
-	pixcode = GETJSAMPLE(colorindex_ci[cur]);
-	*output_ptr += (JSAMPLE) pixcode;
-	/* Compute actual representation error at this pixel */
-	/* Note: we can do this even though we don't have the final */
-	/* pixel code, because the colormap is orthogonal. */
-	cur -= GETJSAMPLE(colormap_ci[pixcode]);
-	/* Compute error fractions to be propagated to adjacent pixels.
-	 * Add these into the running sums, and simultaneously shift the
-	 * next-line error sums left by 1 column.
-	 */
-	bnexterr = cur;
-	delta = cur * 2;
-	cur += delta;		/* form error * 3 */
-	errorptr[0] = (FSERROR) (bpreverr + cur);
-	cur += delta;		/* form error * 5 */
-	bpreverr = belowerr + cur;
-	belowerr = bnexterr;
-	cur += delta;		/* form error * 7 */
-	/* At this point cur contains the 7/16 error value to be propagated
-	 * to the next pixel on the current line, and all the errors for the
-	 * next line have been shifted over. We are therefore ready to move on.
-	 */
-	input_ptr += dirnc;	/* advance input ptr to next column */
-	output_ptr += dir;	/* advance output ptr to next column */
-	errorptr += dir;	/* advance errorptr to current column */
-      }
-      /* Post-loop cleanup: we must unload the final error value into the
-       * final fserrors[] entry.  Note we need not unload belowerr because
-       * it is for the dummy column before or after the actual array.
-       */
-      errorptr[0] = (FSERROR) bpreverr; /* unload prev err into array */
-    }
-    cquantize->on_odd_row = (cquantize->on_odd_row ? FALSE : TRUE);
-  }
-}
-
-
-/*
- * Allocate workspace for Floyd-Steinberg errors.
- */
-
-LOCAL(void)
-alloc_fs_workspace (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  size_t arraysize;
-  int i;
-
-  arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR));
-  for (i = 0; i < cinfo->out_color_components; i++) {
-    cquantize->fserrors[i] = (FSERRPTR)
-      (*cinfo->mem->alloc_large)((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize);
-  }
-}
-
-
-/*
- * Initialize for one-pass color quantization.
- */
-
-METHODDEF(void)
-start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  size_t arraysize;
-  int i;
-
-  /* Install my colormap. */
-  cinfo->colormap = cquantize->sv_colormap;
-  cinfo->actual_number_of_colors = cquantize->sv_actual;
-
-  /* Initialize for desired dithering mode. */
-  switch (cinfo->dither_mode) {
-  case JDITHER_NONE:
-    if (cinfo->out_color_components == 3)
-      cquantize->pub.color_quantize = color_quantize3;
-    else
-      cquantize->pub.color_quantize = color_quantize;
-    break;
-  case JDITHER_ORDERED:
-    if (cinfo->out_color_components == 3)
-      cquantize->pub.color_quantize = quantize3_ord_dither;
-    else
-      cquantize->pub.color_quantize = quantize_ord_dither;
-    cquantize->row_index = 0;	/* initialize state for ordered dither */
-    /* If user changed to ordered dither from another mode,
-     * we must recreate the color index table with padding.
-     * This will cost extra space, but probably isn't very likely.
-     */
-    if (! cquantize->is_padded)
-      create_colorindex(cinfo);
-    /* Create ordered-dither tables if we didn't already. */
-    if (cquantize->odither[0] == NULL)
-      create_odither_tables(cinfo);
-    break;
-  case JDITHER_FS:
-    cquantize->pub.color_quantize = quantize_fs_dither;
-    cquantize->on_odd_row = FALSE; /* initialize state for F-S dither */
-    /* Allocate Floyd-Steinberg workspace if didn't already. */
-    if (cquantize->fserrors[0] == NULL)
-      alloc_fs_workspace(cinfo);
-    /* Initialize the propagated errors to zero. */
-    arraysize = (size_t) ((cinfo->output_width + 2) * SIZEOF(FSERROR));
-    for (i = 0; i < cinfo->out_color_components; i++)
-      FMEMZERO((void FAR *) cquantize->fserrors[i], arraysize);
-    break;
-  default:
-    ERREXIT(cinfo, JERR_NOT_COMPILED);
-    break;
-  }
-}
-
-
-/*
- * Finish up at the end of the pass.
- */
-
-METHODDEF(void)
-finish_pass_1_quant (j_decompress_ptr cinfo)
-{
-  /* no work in 1-pass case */
-}
-
-
-/*
- * Switch to a new external colormap between output passes.
- * Shouldn't get to this module!
- */
-
-METHODDEF(void)
-new_color_map_1_quant (j_decompress_ptr cinfo)
-{
-  ERREXIT(cinfo, JERR_MODE_CHANGE);
-}
-
-
-/*
- * Module initialization routine for 1-pass color quantization.
- */
-
-GLOBAL(void)
-jinit_1pass_quantizer (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize;
-
-  cquantize = (my_cquantize_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_cquantizer));
-  cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
-  cquantize->pub.start_pass = start_pass_1_quant;
-  cquantize->pub.finish_pass = finish_pass_1_quant;
-  cquantize->pub.new_color_map = new_color_map_1_quant;
-  cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */
-  cquantize->odither[0] = NULL;	/* Also flag odither arrays not allocated */
-
-  /* Make sure my internal arrays won't overflow */
-  if (cinfo->out_color_components > MAX_Q_COMPS)
-    ERREXIT1(cinfo, JERR_QUANT_COMPONENTS, MAX_Q_COMPS);
-  /* Make sure colormap indexes can be represented by JSAMPLEs */
-  if (cinfo->desired_number_of_colors > (MAXJSAMPLE+1))
-    ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXJSAMPLE+1);
-
-  /* Create the colormap and color index table. */
-  create_colormap(cinfo);
-  create_colorindex(cinfo);
-
-  /* Allocate Floyd-Steinberg workspace now if requested.
-   * We do this now since it is FAR storage and may affect the memory
-   * manager's space calculations.  If the user changes to FS dither
-   * mode in a later pass, we will allocate the space then, and will
-   * possibly overrun the max_memory_to_use setting.
-   */
-  if (cinfo->dither_mode == JDITHER_FS)
-    alloc_fs_workspace(cinfo);
-}
-
-#endif /* QUANT_1PASS_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jquant2.c
+++ /dev/null
@@ -1,1311 +1,0 @@
-/*
- * jquant2.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modified 2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 2-pass color quantization (color mapping) routines.
- * These routines provide selection of a custom color map for an image,
- * followed by mapping of the image to that color map, with optional
- * Floyd-Steinberg dithering.
- * It is also possible to use just the second pass to map to an arbitrary
- * externally-given color map.
- *
- * Note: ordered dithering is not supported, since there isn't any fast
- * way to compute intercolor distances; it's unclear that ordered dither's
- * fundamental assumptions even hold with an irregularly spaced color map.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-
-/*
- * This module implements the well-known Heckbert paradigm for color
- * quantization.  Most of the ideas used here can be traced back to
- * Heckbert's seminal paper
- *   Heckbert, Paul.  "Color Image Quantization for Frame Buffer Display",
- *   Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304.
- *
- * In the first pass over the image, we accumulate a histogram showing the
- * usage count of each possible color.  To keep the histogram to a reasonable
- * size, we reduce the precision of the input; typical practice is to retain
- * 5 or 6 bits per color, so that 8 or 4 different input values are counted
- * in the same histogram cell.
- *
- * Next, the color-selection step begins with a box representing the whole
- * color space, and repeatedly splits the "largest" remaining box until we
- * have as many boxes as desired colors.  Then the mean color in each
- * remaining box becomes one of the possible output colors.
- * 
- * The second pass over the image maps each input pixel to the closest output
- * color (optionally after applying a Floyd-Steinberg dithering correction).
- * This mapping is logically trivial, but making it go fast enough requires
- * considerable care.
- *
- * Heckbert-style quantizers vary a good deal in their policies for choosing
- * the "largest" box and deciding where to cut it.  The particular policies
- * used here have proved out well in experimental comparisons, but better ones
- * may yet be found.
- *
- * In earlier versions of the IJG code, this module quantized in YCbCr color
- * space, processing the raw upsampled data without a color conversion step.
- * This allowed the color conversion math to be done only once per colormap
- * entry, not once per pixel.  However, that optimization precluded other
- * useful optimizations (such as merging color conversion with upsampling)
- * and it also interfered with desired capabilities such as quantizing to an
- * externally-supplied colormap.  We have therefore abandoned that approach.
- * The present code works in the post-conversion color space, typically RGB.
- *
- * To improve the visual quality of the results, we actually work in scaled
- * RGB space, giving G distances more weight than R, and R in turn more than
- * B.  To do everything in integer math, we must use integer scale factors.
- * The 2/3/1 scale factors used here correspond loosely to the relative
- * weights of the colors in the NTSC grayscale equation.
- * If you want to use this code to quantize a non-RGB color space, you'll
- * probably need to change these scale factors.
- */
-
-#define R_SCALE 2		/* scale R distances by this much */
-#define G_SCALE 3		/* scale G distances by this much */
-#define B_SCALE 1		/* and B by this much */
-
-/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined
- * in jmorecfg.h.  As the code stands, it will do the right thing for R,G,B
- * and B,G,R orders.  If you define some other weird order in jmorecfg.h,
- * you'll get compile errors until you extend this logic.  In that case
- * you'll probably want to tweak the histogram sizes too.
- */
-
-#if RGB_RED == 0
-#define C0_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 0
-#define C0_SCALE B_SCALE
-#endif
-#if RGB_GREEN == 1
-#define C1_SCALE G_SCALE
-#endif
-#if RGB_RED == 2
-#define C2_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 2
-#define C2_SCALE B_SCALE
-#endif
-
-
-/*
- * First we have the histogram data structure and routines for creating it.
- *
- * The number of bits of precision can be adjusted by changing these symbols.
- * We recommend keeping 6 bits for G and 5 each for R and B.
- * If you have plenty of memory and cycles, 6 bits all around gives marginally
- * better results; if you are short of memory, 5 bits all around will save
- * some space but degrade the results.
- * To maintain a fully accurate histogram, we'd need to allocate a "long"
- * (preferably unsigned long) for each cell.  In practice this is overkill;
- * we can get by with 16 bits per cell.  Few of the cell counts will overflow,
- * and clamping those that do overflow to the maximum value will give close-
- * enough results.  This reduces the recommended histogram size from 256Kb
- * to 128Kb, which is a useful savings on PC-class machines.
- * (In the second pass the histogram space is re-used for pixel mapping data;
- * in that capacity, each cell must be able to store zero to the number of
- * desired colors.  16 bits/cell is plenty for that too.)
- * Since the JPEG code is intended to run in small memory model on 80x86
- * machines, we can't just allocate the histogram in one chunk.  Instead
- * of a true 3-D array, we use a row of pointers to 2-D arrays.  Each
- * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and
- * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries.  Note that
- * on 80x86 machines, the pointer row is in near memory but the actual
- * arrays are in far memory (same arrangement as we use for image arrays).
- */
-
-#define MAXNUMCOLORS  (MAXJSAMPLE+1) /* maximum size of colormap */
-
-/* These will do the right thing for either R,G,B or B,G,R color order,
- * but you may not like the results for other color orders.
- */
-#define HIST_C0_BITS  5		/* bits of precision in R/B histogram */
-#define HIST_C1_BITS  6		/* bits of precision in G histogram */
-#define HIST_C2_BITS  5		/* bits of precision in B/R histogram */
-
-/* Number of elements along histogram axes. */
-#define HIST_C0_ELEMS  (1<<HIST_C0_BITS)
-#define HIST_C1_ELEMS  (1<<HIST_C1_BITS)
-#define HIST_C2_ELEMS  (1<<HIST_C2_BITS)
-
-/* These are the amounts to shift an input value to get a histogram index. */
-#define C0_SHIFT  (BITS_IN_JSAMPLE-HIST_C0_BITS)
-#define C1_SHIFT  (BITS_IN_JSAMPLE-HIST_C1_BITS)
-#define C2_SHIFT  (BITS_IN_JSAMPLE-HIST_C2_BITS)
-
-
-typedef UINT16 histcell;	/* histogram cell; prefer an unsigned type */
-
-typedef histcell FAR * histptr;	/* for pointers to histogram cells */
-
-typedef histcell hist1d[HIST_C2_ELEMS]; /* typedefs for the array */
-typedef hist1d FAR * hist2d;	/* type for the 2nd-level pointers */
-typedef hist2d * hist3d;	/* type for top-level pointer */
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count.  The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- *		...	(here)	7/16
- *		3/16	5/16	1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed.  We
- * need only a few extra variables to hold the errors immediately around the
- * current column.  (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array has (#columns + 2) entries; the extra entry at
- * each end saves us from special-casing the first and last pixels.
- * Each entry is three values long, one value for each color component.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR;		/* 16 bits should be enough */
-typedef int LOCFSERROR;		/* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR;		/* may need more than 16 bits */
-typedef INT32 LOCFSERROR;	/* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR;	/* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-typedef struct {
-  struct jpeg_color_quantizer pub; /* public fields */
-
-  /* Space for the eventually created colormap is stashed here */
-  JSAMPARRAY sv_colormap;	/* colormap allocated at init time */
-  int desired;			/* desired # of colors = size of colormap */
-
-  /* Variables for accumulating image statistics */
-  hist3d histogram;		/* pointer to the histogram */
-
-  boolean needs_zeroed;		/* TRUE if next pass must zero histogram */
-
-  /* Variables for Floyd-Steinberg dithering */
-  FSERRPTR fserrors;		/* accumulated errors */
-  boolean on_odd_row;		/* flag to remember which row we are on */
-  int * error_limiter;		/* table for clamping the applied error */
-} my_cquantizer;
-
-typedef my_cquantizer * my_cquantize_ptr;
-
-
-/*
- * Prescan some rows of pixels.
- * In this module the prescan simply updates the histogram, which has been
- * initialized to zeroes by start_pass.
- * An output_buf parameter is required by the method signature, but no data
- * is actually output (in fact the buffer controller is probably passing a
- * NULL pointer).
- */
-
-METHODDEF(void)
-prescan_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-		  JSAMPARRAY output_buf, int num_rows)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register JSAMPROW ptr;
-  register histptr histp;
-  register hist3d histogram = cquantize->histogram;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    ptr = input_buf[row];
-    for (col = width; col > 0; col--) {
-      /* get pixel value and index into the histogram */
-      histp = & histogram[GETJSAMPLE(ptr[0]) >> C0_SHIFT]
-			 [GETJSAMPLE(ptr[1]) >> C1_SHIFT]
-			 [GETJSAMPLE(ptr[2]) >> C2_SHIFT];
-      /* increment, check for overflow and undo increment if so. */
-      if (++(*histp) <= 0)
-	(*histp)--;
-      ptr += 3;
-    }
-  }
-}
-
-
-/*
- * Next we have the really interesting routines: selection of a colormap
- * given the completed histogram.
- * These routines work with a list of "boxes", each representing a rectangular
- * subset of the input color space (to histogram precision).
- */
-
-typedef struct {
-  /* The bounds of the box (inclusive); expressed as histogram indexes */
-  int c0min, c0max;
-  int c1min, c1max;
-  int c2min, c2max;
-  /* The volume (actually 2-norm) of the box */
-  INT32 volume;
-  /* The number of nonzero histogram cells within this box */
-  long colorcount;
-} box;
-
-typedef box * boxptr;
-
-
-LOCAL(boxptr)
-find_biggest_color_pop (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest color population */
-/* Returns NULL if no splittable boxes remain */
-{
-  register boxptr boxp;
-  register int i;
-  register long maxc = 0;
-  boxptr which = NULL;
-  
-  for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
-    if (boxp->colorcount > maxc && boxp->volume > 0) {
-      which = boxp;
-      maxc = boxp->colorcount;
-    }
-  }
-  return which;
-}
-
-
-LOCAL(boxptr)
-find_biggest_volume (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest (scaled) volume */
-/* Returns NULL if no splittable boxes remain */
-{
-  register boxptr boxp;
-  register int i;
-  register INT32 maxv = 0;
-  boxptr which = NULL;
-  
-  for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
-    if (boxp->volume > maxv) {
-      which = boxp;
-      maxv = boxp->volume;
-    }
-  }
-  return which;
-}
-
-
-LOCAL(void)
-update_box (j_decompress_ptr cinfo, boxptr boxp)
-/* Shrink the min/max bounds of a box to enclose only nonzero elements, */
-/* and recompute its volume and population */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  histptr histp;
-  int c0,c1,c2;
-  int c0min,c0max,c1min,c1max,c2min,c2max;
-  INT32 dist0,dist1,dist2;
-  long ccount;
-  
-  c0min = boxp->c0min;  c0max = boxp->c0max;
-  c1min = boxp->c1min;  c1max = boxp->c1max;
-  c2min = boxp->c2min;  c2max = boxp->c2max;
-  
-  if (c0max > c0min)
-    for (c0 = c0min; c0 <= c0max; c0++)
-      for (c1 = c1min; c1 <= c1max; c1++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c0min = c0min = c0;
-	    goto have_c0min;
-	  }
-      }
- have_c0min:
-  if (c0max > c0min)
-    for (c0 = c0max; c0 >= c0min; c0--)
-      for (c1 = c1min; c1 <= c1max; c1++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c0max = c0max = c0;
-	    goto have_c0max;
-	  }
-      }
- have_c0max:
-  if (c1max > c1min)
-    for (c1 = c1min; c1 <= c1max; c1++)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c1min = c1min = c1;
-	    goto have_c1min;
-	  }
-      }
- have_c1min:
-  if (c1max > c1min)
-    for (c1 = c1max; c1 >= c1min; c1--)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1][c2min];
-	for (c2 = c2min; c2 <= c2max; c2++)
-	  if (*histp++ != 0) {
-	    boxp->c1max = c1max = c1;
-	    goto have_c1max;
-	  }
-      }
- have_c1max:
-  if (c2max > c2min)
-    for (c2 = c2min; c2 <= c2max; c2++)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1min][c2];
-	for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
-	  if (*histp != 0) {
-	    boxp->c2min = c2min = c2;
-	    goto have_c2min;
-	  }
-      }
- have_c2min:
-  if (c2max > c2min)
-    for (c2 = c2max; c2 >= c2min; c2--)
-      for (c0 = c0min; c0 <= c0max; c0++) {
-	histp = & histogram[c0][c1min][c2];
-	for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
-	  if (*histp != 0) {
-	    boxp->c2max = c2max = c2;
-	    goto have_c2max;
-	  }
-      }
- have_c2max:
-
-  /* Update box volume.
-   * We use 2-norm rather than real volume here; this biases the method
-   * against making long narrow boxes, and it has the side benefit that
-   * a box is splittable iff norm > 0.
-   * Since the differences are expressed in histogram-cell units,
-   * we have to shift back to JSAMPLE units to get consistent distances;
-   * after which, we scale according to the selected distance scale factors.
-   */
-  dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE;
-  dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE;
-  dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE;
-  boxp->volume = dist0*dist0 + dist1*dist1 + dist2*dist2;
-  
-  /* Now scan remaining volume of box and compute population */
-  ccount = 0;
-  for (c0 = c0min; c0 <= c0max; c0++)
-    for (c1 = c1min; c1 <= c1max; c1++) {
-      histp = & histogram[c0][c1][c2min];
-      for (c2 = c2min; c2 <= c2max; c2++, histp++)
-	if (*histp != 0) {
-	  ccount++;
-	}
-    }
-  boxp->colorcount = ccount;
-}
-
-
-LOCAL(int)
-median_cut (j_decompress_ptr cinfo, boxptr boxlist, int numboxes,
-	    int desired_colors)
-/* Repeatedly select and split the largest box until we have enough boxes */
-{
-  int n,lb;
-  int c0,c1,c2,cmax;
-  register boxptr b1,b2;
-
-  while (numboxes < desired_colors) {
-    /* Select box to split.
-     * Current algorithm: by population for first half, then by volume.
-     */
-    if (numboxes*2 <= desired_colors) {
-      b1 = find_biggest_color_pop(boxlist, numboxes);
-    } else {
-      b1 = find_biggest_volume(boxlist, numboxes);
-    }
-    if (b1 == NULL)		/* no splittable boxes left! */
-      break;
-    b2 = &boxlist[numboxes];	/* where new box will go */
-    /* Copy the color bounds to the new box. */
-    b2->c0max = b1->c0max; b2->c1max = b1->c1max; b2->c2max = b1->c2max;
-    b2->c0min = b1->c0min; b2->c1min = b1->c1min; b2->c2min = b1->c2min;
-    /* Choose which axis to split the box on.
-     * Current algorithm: longest scaled axis.
-     * See notes in update_box about scaling distances.
-     */
-    c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE;
-    c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE;
-    c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE;
-    /* We want to break any ties in favor of green, then red, blue last.
-     * This code does the right thing for R,G,B or B,G,R color orders only.
-     */
-#if RGB_RED == 0
-    cmax = c1; n = 1;
-    if (c0 > cmax) { cmax = c0; n = 0; }
-    if (c2 > cmax) { n = 2; }
-#else
-    cmax = c1; n = 1;
-    if (c2 > cmax) { cmax = c2; n = 2; }
-    if (c0 > cmax) { n = 0; }
-#endif
-    /* Choose split point along selected axis, and update box bounds.
-     * Current algorithm: split at halfway point.
-     * (Since the box has been shrunk to minimum volume,
-     * any split will produce two nonempty subboxes.)
-     * Note that lb value is max for lower box, so must be < old max.
-     */
-    switch (n) {
-    case 0:
-      lb = (b1->c0max + b1->c0min) / 2;
-      b1->c0max = lb;
-      b2->c0min = lb+1;
-      break;
-    case 1:
-      lb = (b1->c1max + b1->c1min) / 2;
-      b1->c1max = lb;
-      b2->c1min = lb+1;
-      break;
-    case 2:
-      lb = (b1->c2max + b1->c2min) / 2;
-      b1->c2max = lb;
-      b2->c2min = lb+1;
-      break;
-    }
-    /* Update stats for boxes */
-    update_box(cinfo, b1);
-    update_box(cinfo, b2);
-    numboxes++;
-  }
-  return numboxes;
-}
-
-
-LOCAL(void)
-compute_color (j_decompress_ptr cinfo, boxptr boxp, int icolor)
-/* Compute representative color for a box, put it in colormap[icolor] */
-{
-  /* Current algorithm: mean weighted by pixels (not colors) */
-  /* Note it is important to get the rounding correct! */
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  histptr histp;
-  int c0,c1,c2;
-  int c0min,c0max,c1min,c1max,c2min,c2max;
-  long count;
-  long total = 0;
-  long c0total = 0;
-  long c1total = 0;
-  long c2total = 0;
-  
-  c0min = boxp->c0min;  c0max = boxp->c0max;
-  c1min = boxp->c1min;  c1max = boxp->c1max;
-  c2min = boxp->c2min;  c2max = boxp->c2max;
-  
-  for (c0 = c0min; c0 <= c0max; c0++)
-    for (c1 = c1min; c1 <= c1max; c1++) {
-      histp = & histogram[c0][c1][c2min];
-      for (c2 = c2min; c2 <= c2max; c2++) {
-	if ((count = *histp++) != 0) {
-	  total += count;
-	  c0total += ((c0 << C0_SHIFT) + ((1<<C0_SHIFT)>>1)) * count;
-	  c1total += ((c1 << C1_SHIFT) + ((1<<C1_SHIFT)>>1)) * count;
-	  c2total += ((c2 << C2_SHIFT) + ((1<<C2_SHIFT)>>1)) * count;
-	}
-      }
-    }
-  
-  cinfo->colormap[0][icolor] = (JSAMPLE) ((c0total + (total>>1)) / total);
-  cinfo->colormap[1][icolor] = (JSAMPLE) ((c1total + (total>>1)) / total);
-  cinfo->colormap[2][icolor] = (JSAMPLE) ((c2total + (total>>1)) / total);
-}
-
-
-LOCAL(void)
-select_colors (j_decompress_ptr cinfo, int desired_colors)
-/* Master routine for color selection */
-{
-  boxptr boxlist;
-  int numboxes;
-  int i;
-
-  /* Allocate workspace for box list */
-  boxlist = (boxptr) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, desired_colors * SIZEOF(box));
-  /* Initialize one box containing whole space */
-  numboxes = 1;
-  boxlist[0].c0min = 0;
-  boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT;
-  boxlist[0].c1min = 0;
-  boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT;
-  boxlist[0].c2min = 0;
-  boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT;
-  /* Shrink it to actually-used volume and set its statistics */
-  update_box(cinfo, & boxlist[0]);
-  /* Perform median-cut to produce final box list */
-  numboxes = median_cut(cinfo, boxlist, numboxes, desired_colors);
-  /* Compute the representative color for each box, fill colormap */
-  for (i = 0; i < numboxes; i++)
-    compute_color(cinfo, & boxlist[i], i);
-  cinfo->actual_number_of_colors = numboxes;
-  TRACEMS1(cinfo, 1, JTRC_QUANT_SELECTED, numboxes);
-}
-
-
-/*
- * These routines are concerned with the time-critical task of mapping input
- * colors to the nearest color in the selected colormap.
- *
- * We re-use the histogram space as an "inverse color map", essentially a
- * cache for the results of nearest-color searches.  All colors within a
- * histogram cell will be mapped to the same colormap entry, namely the one
- * closest to the cell's center.  This may not be quite the closest entry to
- * the actual input color, but it's almost as good.  A zero in the cache
- * indicates we haven't found the nearest color for that cell yet; the array
- * is cleared to zeroes before starting the mapping pass.  When we find the
- * nearest color for a cell, its colormap index plus one is recorded in the
- * cache for future use.  The pass2 scanning routines call fill_inverse_cmap
- * when they need to use an unfilled entry in the cache.
- *
- * Our method of efficiently finding nearest colors is based on the "locally
- * sorted search" idea described by Heckbert and on the incremental distance
- * calculation described by Spencer W. Thomas in chapter III.1 of Graphics
- * Gems II (James Arvo, ed.  Academic Press, 1991).  Thomas points out that
- * the distances from a given colormap entry to each cell of the histogram can
- * be computed quickly using an incremental method: the differences between
- * distances to adjacent cells themselves differ by a constant.  This allows a
- * fairly fast implementation of the "brute force" approach of computing the
- * distance from every colormap entry to every histogram cell.  Unfortunately,
- * it needs a work array to hold the best-distance-so-far for each histogram
- * cell (because the inner loop has to be over cells, not colormap entries).
- * The work array elements have to be INT32s, so the work array would need
- * 256Kb at our recommended precision.  This is not feasible in DOS machines.
- *
- * To get around these problems, we apply Thomas' method to compute the
- * nearest colors for only the cells within a small subbox of the histogram.
- * The work array need be only as big as the subbox, so the memory usage
- * problem is solved.  Furthermore, we need not fill subboxes that are never
- * referenced in pass2; many images use only part of the color gamut, so a
- * fair amount of work is saved.  An additional advantage of this
- * approach is that we can apply Heckbert's locality criterion to quickly
- * eliminate colormap entries that are far away from the subbox; typically
- * three-fourths of the colormap entries are rejected by Heckbert's criterion,
- * and we need not compute their distances to individual cells in the subbox.
- * The speed of this approach is heavily influenced by the subbox size: too
- * small means too much overhead, too big loses because Heckbert's criterion
- * can't eliminate as many colormap entries.  Empirically the best subbox
- * size seems to be about 1/512th of the histogram (1/8th in each direction).
- *
- * Thomas' article also describes a refined method which is asymptotically
- * faster than the brute-force method, but it is also far more complex and
- * cannot efficiently be applied to small subboxes.  It is therefore not
- * useful for programs intended to be portable to DOS machines.  On machines
- * with plenty of memory, filling the whole histogram in one shot with Thomas'
- * refined method might be faster than the present code --- but then again,
- * it might not be any faster, and it's certainly more complicated.
- */
-
-
-/* log2(histogram cells in update box) for each axis; this can be adjusted */
-#define BOX_C0_LOG  (HIST_C0_BITS-3)
-#define BOX_C1_LOG  (HIST_C1_BITS-3)
-#define BOX_C2_LOG  (HIST_C2_BITS-3)
-
-#define BOX_C0_ELEMS  (1<<BOX_C0_LOG) /* # of hist cells in update box */
-#define BOX_C1_ELEMS  (1<<BOX_C1_LOG)
-#define BOX_C2_ELEMS  (1<<BOX_C2_LOG)
-
-#define BOX_C0_SHIFT  (C0_SHIFT + BOX_C0_LOG)
-#define BOX_C1_SHIFT  (C1_SHIFT + BOX_C1_LOG)
-#define BOX_C2_SHIFT  (C2_SHIFT + BOX_C2_LOG)
-
-
-/*
- * The next three routines implement inverse colormap filling.  They could
- * all be folded into one big routine, but splitting them up this way saves
- * some stack space (the mindist[] and bestdist[] arrays need not coexist)
- * and may allow some compilers to produce better code by registerizing more
- * inner-loop variables.
- */
-
-LOCAL(int)
-find_nearby_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
-		    JSAMPLE colorlist[])
-/* Locate the colormap entries close enough to an update box to be candidates
- * for the nearest entry to some cell(s) in the update box.  The update box
- * is specified by the center coordinates of its first cell.  The number of
- * candidate colormap entries is returned, and their colormap indexes are
- * placed in colorlist[].
- * This routine uses Heckbert's "locally sorted search" criterion to select
- * the colors that need further consideration.
- */
-{
-  int numcolors = cinfo->actual_number_of_colors;
-  int maxc0, maxc1, maxc2;
-  int centerc0, centerc1, centerc2;
-  int i, x, ncolors;
-  INT32 minmaxdist, min_dist, max_dist, tdist;
-  INT32 mindist[MAXNUMCOLORS];	/* min distance to colormap entry i */
-
-  /* Compute true coordinates of update box's upper corner and center.
-   * Actually we compute the coordinates of the center of the upper-corner
-   * histogram cell, which are the upper bounds of the volume we care about.
-   * Note that since ">>" rounds down, the "center" values may be closer to
-   * min than to max; hence comparisons to them must be "<=", not "<".
-   */
-  maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT));
-  centerc0 = (minc0 + maxc0) >> 1;
-  maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT));
-  centerc1 = (minc1 + maxc1) >> 1;
-  maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT));
-  centerc2 = (minc2 + maxc2) >> 1;
-
-  /* For each color in colormap, find:
-   *  1. its minimum squared-distance to any point in the update box
-   *     (zero if color is within update box);
-   *  2. its maximum squared-distance to any point in the update box.
-   * Both of these can be found by considering only the corners of the box.
-   * We save the minimum distance for each color in mindist[];
-   * only the smallest maximum distance is of interest.
-   */
-  minmaxdist = 0x7FFFFFFFL;
-
-  for (i = 0; i < numcolors; i++) {
-    /* We compute the squared-c0-distance term, then add in the other two. */
-    x = GETJSAMPLE(cinfo->colormap[0][i]);
-    if (x < minc0) {
-      tdist = (x - minc0) * C0_SCALE;
-      min_dist = tdist*tdist;
-      tdist = (x - maxc0) * C0_SCALE;
-      max_dist = tdist*tdist;
-    } else if (x > maxc0) {
-      tdist = (x - maxc0) * C0_SCALE;
-      min_dist = tdist*tdist;
-      tdist = (x - minc0) * C0_SCALE;
-      max_dist = tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      min_dist = 0;
-      if (x <= centerc0) {
-	tdist = (x - maxc0) * C0_SCALE;
-	max_dist = tdist*tdist;
-      } else {
-	tdist = (x - minc0) * C0_SCALE;
-	max_dist = tdist*tdist;
-      }
-    }
-
-    x = GETJSAMPLE(cinfo->colormap[1][i]);
-    if (x < minc1) {
-      tdist = (x - minc1) * C1_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - maxc1) * C1_SCALE;
-      max_dist += tdist*tdist;
-    } else if (x > maxc1) {
-      tdist = (x - maxc1) * C1_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - minc1) * C1_SCALE;
-      max_dist += tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      if (x <= centerc1) {
-	tdist = (x - maxc1) * C1_SCALE;
-	max_dist += tdist*tdist;
-      } else {
-	tdist = (x - minc1) * C1_SCALE;
-	max_dist += tdist*tdist;
-      }
-    }
-
-    x = GETJSAMPLE(cinfo->colormap[2][i]);
-    if (x < minc2) {
-      tdist = (x - minc2) * C2_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - maxc2) * C2_SCALE;
-      max_dist += tdist*tdist;
-    } else if (x > maxc2) {
-      tdist = (x - maxc2) * C2_SCALE;
-      min_dist += tdist*tdist;
-      tdist = (x - minc2) * C2_SCALE;
-      max_dist += tdist*tdist;
-    } else {
-      /* within cell range so no contribution to min_dist */
-      if (x <= centerc2) {
-	tdist = (x - maxc2) * C2_SCALE;
-	max_dist += tdist*tdist;
-      } else {
-	tdist = (x - minc2) * C2_SCALE;
-	max_dist += tdist*tdist;
-      }
-    }
-
-    mindist[i] = min_dist;	/* save away the results */
-    if (max_dist < minmaxdist)
-      minmaxdist = max_dist;
-  }
-
-  /* Now we know that no cell in the update box is more than minmaxdist
-   * away from some colormap entry.  Therefore, only colors that are
-   * within minmaxdist of some part of the box need be considered.
-   */
-  ncolors = 0;
-  for (i = 0; i < numcolors; i++) {
-    if (mindist[i] <= minmaxdist)
-      colorlist[ncolors++] = (JSAMPLE) i;
-  }
-  return ncolors;
-}
-
-
-LOCAL(void)
-find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
-		  int numcolors, JSAMPLE colorlist[], JSAMPLE bestcolor[])
-/* Find the closest colormap entry for each cell in the update box,
- * given the list of candidate colors prepared by find_nearby_colors.
- * Return the indexes of the closest entries in the bestcolor[] array.
- * This routine uses Thomas' incremental distance calculation method to
- * find the distance from a colormap entry to successive cells in the box.
- */
-{
-  int ic0, ic1, ic2;
-  int i, icolor;
-  register INT32 * bptr;	/* pointer into bestdist[] array */
-  JSAMPLE * cptr;		/* pointer into bestcolor[] array */
-  INT32 dist0, dist1;		/* initial distance values */
-  register INT32 dist2;		/* current distance in inner loop */
-  INT32 xx0, xx1;		/* distance increments */
-  register INT32 xx2;
-  INT32 inc0, inc1, inc2;	/* initial values for increments */
-  /* This array holds the distance to the nearest-so-far color for each cell */
-  INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
-  /* Initialize best-distance for each cell of the update box */
-  bptr = bestdist;
-  for (i = BOX_C0_ELEMS*BOX_C1_ELEMS*BOX_C2_ELEMS-1; i >= 0; i--)
-    *bptr++ = 0x7FFFFFFFL;
-  
-  /* For each color selected by find_nearby_colors,
-   * compute its distance to the center of each cell in the box.
-   * If that's less than best-so-far, update best distance and color number.
-   */
-  
-  /* Nominal steps between cell centers ("x" in Thomas article) */
-#define STEP_C0  ((1 << C0_SHIFT) * C0_SCALE)
-#define STEP_C1  ((1 << C1_SHIFT) * C1_SCALE)
-#define STEP_C2  ((1 << C2_SHIFT) * C2_SCALE)
-  
-  for (i = 0; i < numcolors; i++) {
-    icolor = GETJSAMPLE(colorlist[i]);
-    /* Compute (square of) distance from minc0/c1/c2 to this color */
-    inc0 = (minc0 - GETJSAMPLE(cinfo->colormap[0][icolor])) * C0_SCALE;
-    dist0 = inc0*inc0;
-    inc1 = (minc1 - GETJSAMPLE(cinfo->colormap[1][icolor])) * C1_SCALE;
-    dist0 += inc1*inc1;
-    inc2 = (minc2 - GETJSAMPLE(cinfo->colormap[2][icolor])) * C2_SCALE;
-    dist0 += inc2*inc2;
-    /* Form the initial difference increments */
-    inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
-    inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1;
-    inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2;
-    /* Now loop over all cells in box, updating distance per Thomas method */
-    bptr = bestdist;
-    cptr = bestcolor;
-    xx0 = inc0;
-    for (ic0 = BOX_C0_ELEMS-1; ic0 >= 0; ic0--) {
-      dist1 = dist0;
-      xx1 = inc1;
-      for (ic1 = BOX_C1_ELEMS-1; ic1 >= 0; ic1--) {
-	dist2 = dist1;
-	xx2 = inc2;
-	for (ic2 = BOX_C2_ELEMS-1; ic2 >= 0; ic2--) {
-	  if (dist2 < *bptr) {
-	    *bptr = dist2;
-	    *cptr = (JSAMPLE) icolor;
-	  }
-	  dist2 += xx2;
-	  xx2 += 2 * STEP_C2 * STEP_C2;
-	  bptr++;
-	  cptr++;
-	}
-	dist1 += xx1;
-	xx1 += 2 * STEP_C1 * STEP_C1;
-      }
-      dist0 += xx0;
-      xx0 += 2 * STEP_C0 * STEP_C0;
-    }
-  }
-}
-
-
-LOCAL(void)
-fill_inverse_cmap (j_decompress_ptr cinfo, int c0, int c1, int c2)
-/* Fill the inverse-colormap entries in the update box that contains */
-/* histogram cell c0/c1/c2.  (Only that one cell MUST be filled, but */
-/* we can fill as many others as we wish.) */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  int minc0, minc1, minc2;	/* lower left corner of update box */
-  int ic0, ic1, ic2;
-  register JSAMPLE * cptr;	/* pointer into bestcolor[] array */
-  register histptr cachep;	/* pointer into main cache array */
-  /* This array lists the candidate colormap indexes. */
-  JSAMPLE colorlist[MAXNUMCOLORS];
-  int numcolors;		/* number of candidate colors */
-  /* This array holds the actually closest colormap index for each cell. */
-  JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
-  /* Convert cell coordinates to update box ID */
-  c0 >>= BOX_C0_LOG;
-  c1 >>= BOX_C1_LOG;
-  c2 >>= BOX_C2_LOG;
-
-  /* Compute true coordinates of update box's origin corner.
-   * Actually we compute the coordinates of the center of the corner
-   * histogram cell, which are the lower bounds of the volume we care about.
-   */
-  minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1);
-  minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1);
-  minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1);
-  
-  /* Determine which colormap entries are close enough to be candidates
-   * for the nearest entry to some cell in the update box.
-   */
-  numcolors = find_nearby_colors(cinfo, minc0, minc1, minc2, colorlist);
-
-  /* Determine the actually nearest colors. */
-  find_best_colors(cinfo, minc0, minc1, minc2, numcolors, colorlist,
-		   bestcolor);
-
-  /* Save the best color numbers (plus 1) in the main cache array */
-  c0 <<= BOX_C0_LOG;		/* convert ID back to base cell indexes */
-  c1 <<= BOX_C1_LOG;
-  c2 <<= BOX_C2_LOG;
-  cptr = bestcolor;
-  for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) {
-    for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) {
-      cachep = & histogram[c0+ic0][c1+ic1][c2];
-      for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) {
-	*cachep++ = (histcell) (GETJSAMPLE(*cptr++) + 1);
-      }
-    }
-  }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF(void)
-pass2_no_dither (j_decompress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs no dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  register JSAMPROW inptr, outptr;
-  register histptr cachep;
-  register int c0, c1, c2;
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-
-  for (row = 0; row < num_rows; row++) {
-    inptr = input_buf[row];
-    outptr = output_buf[row];
-    for (col = width; col > 0; col--) {
-      /* get pixel value and index into the cache */
-      c0 = GETJSAMPLE(*inptr++) >> C0_SHIFT;
-      c1 = GETJSAMPLE(*inptr++) >> C1_SHIFT;
-      c2 = GETJSAMPLE(*inptr++) >> C2_SHIFT;
-      cachep = & histogram[c0][c1][c2];
-      /* If we have not seen this color before, find nearest colormap entry */
-      /* and update the cache */
-      if (*cachep == 0)
-	fill_inverse_cmap(cinfo, c0,c1,c2);
-      /* Now emit the colormap index for this cell */
-      *outptr++ = (JSAMPLE) (*cachep - 1);
-    }
-  }
-}
-
-
-METHODDEF(void)
-pass2_fs_dither (j_decompress_ptr cinfo,
-		 JSAMPARRAY input_buf, JSAMPARRAY output_buf, int num_rows)
-/* This version performs Floyd-Steinberg dithering */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  register LOCFSERROR cur0, cur1, cur2;	/* current error or pixel value */
-  LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */
-  LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */
-  register FSERRPTR errorptr;	/* => fserrors[] at column before current */
-  JSAMPROW inptr;		/* => current input pixel */
-  JSAMPROW outptr;		/* => current output pixel */
-  histptr cachep;
-  int dir;			/* +1 or -1 depending on direction */
-  int dir3;			/* 3*dir, for advancing inptr & errorptr */
-  int row;
-  JDIMENSION col;
-  JDIMENSION width = cinfo->output_width;
-  JSAMPLE *range_limit = cinfo->sample_range_limit;
-  int *error_limit = cquantize->error_limiter;
-  JSAMPROW colormap0 = cinfo->colormap[0];
-  JSAMPROW colormap1 = cinfo->colormap[1];
-  JSAMPROW colormap2 = cinfo->colormap[2];
-  SHIFT_TEMPS
-
-  for (row = 0; row < num_rows; row++) {
-    inptr = input_buf[row];
-    outptr = output_buf[row];
-    if (cquantize->on_odd_row) {
-      /* work right to left in this row */
-      inptr += (width-1) * 3;	/* so point to rightmost pixel */
-      outptr += width-1;
-      dir = -1;
-      dir3 = -3;
-      errorptr = cquantize->fserrors + (width+1)*3; /* => entry after last column */
-      cquantize->on_odd_row = FALSE; /* flip for next time */
-    } else {
-      /* work left to right in this row */
-      dir = 1;
-      dir3 = 3;
-      errorptr = cquantize->fserrors; /* => entry before first real column */
-      cquantize->on_odd_row = TRUE; /* flip for next time */
-    }
-    /* Preset error values: no error propagated to first pixel from left */
-    cur0 = cur1 = cur2 = 0;
-    /* and no error propagated to row below yet */
-    belowerr0 = belowerr1 = belowerr2 = 0;
-    bpreverr0 = bpreverr1 = bpreverr2 = 0;
-
-    for (col = width; col > 0; col--) {
-      /* curN holds the error propagated from the previous pixel on the
-       * current line.  Add the error propagated from the previous line
-       * to form the complete error correction term for this pixel, and
-       * round the error term (which is expressed * 16) to an integer.
-       * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
-       * for either sign of the error value.
-       * Note: errorptr points to *previous* column's array entry.
-       */
-      cur0 = RIGHT_SHIFT(cur0 + errorptr[dir3+0] + 8, 4);
-      cur1 = RIGHT_SHIFT(cur1 + errorptr[dir3+1] + 8, 4);
-      cur2 = RIGHT_SHIFT(cur2 + errorptr[dir3+2] + 8, 4);
-      /* Limit the error using transfer function set by init_error_limit.
-       * See comments with init_error_limit for rationale.
-       */
-      cur0 = error_limit[cur0];
-      cur1 = error_limit[cur1];
-      cur2 = error_limit[cur2];
-      /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
-       * The maximum error is +- MAXJSAMPLE (or less with error limiting);
-       * this sets the required size of the range_limit array.
-       */
-      cur0 += GETJSAMPLE(inptr[0]);
-      cur1 += GETJSAMPLE(inptr[1]);
-      cur2 += GETJSAMPLE(inptr[2]);
-      cur0 = GETJSAMPLE(range_limit[cur0]);
-      cur1 = GETJSAMPLE(range_limit[cur1]);
-      cur2 = GETJSAMPLE(range_limit[cur2]);
-      /* Index into the cache with adjusted pixel value */
-      cachep = & histogram[cur0>>C0_SHIFT][cur1>>C1_SHIFT][cur2>>C2_SHIFT];
-      /* If we have not seen this color before, find nearest colormap */
-      /* entry and update the cache */
-      if (*cachep == 0)
-	fill_inverse_cmap(cinfo, cur0>>C0_SHIFT,cur1>>C1_SHIFT,cur2>>C2_SHIFT);
-      /* Now emit the colormap index for this cell */
-      { register int pixcode = *cachep - 1;
-	*outptr = (JSAMPLE) pixcode;
-	/* Compute representation error for this pixel */
-	cur0 -= GETJSAMPLE(colormap0[pixcode]);
-	cur1 -= GETJSAMPLE(colormap1[pixcode]);
-	cur2 -= GETJSAMPLE(colormap2[pixcode]);
-      }
-      /* Compute error fractions to be propagated to adjacent pixels.
-       * Add these into the running sums, and simultaneously shift the
-       * next-line error sums left by 1 column.
-       */
-      { register LOCFSERROR bnexterr, delta;
-
-	bnexterr = cur0;	/* Process component 0 */
-	delta = cur0 * 2;
-	cur0 += delta;		/* form error * 3 */
-	errorptr[0] = (FSERROR) (bpreverr0 + cur0);
-	cur0 += delta;		/* form error * 5 */
-	bpreverr0 = belowerr0 + cur0;
-	belowerr0 = bnexterr;
-	cur0 += delta;		/* form error * 7 */
-	bnexterr = cur1;	/* Process component 1 */
-	delta = cur1 * 2;
-	cur1 += delta;		/* form error * 3 */
-	errorptr[1] = (FSERROR) (bpreverr1 + cur1);
-	cur1 += delta;		/* form error * 5 */
-	bpreverr1 = belowerr1 + cur1;
-	belowerr1 = bnexterr;
-	cur1 += delta;		/* form error * 7 */
-	bnexterr = cur2;	/* Process component 2 */
-	delta = cur2 * 2;
-	cur2 += delta;		/* form error * 3 */
-	errorptr[2] = (FSERROR) (bpreverr2 + cur2);
-	cur2 += delta;		/* form error * 5 */
-	bpreverr2 = belowerr2 + cur2;
-	belowerr2 = bnexterr;
-	cur2 += delta;		/* form error * 7 */
-      }
-      /* At this point curN contains the 7/16 error value to be propagated
-       * to the next pixel on the current line, and all the errors for the
-       * next line have been shifted over.  We are therefore ready to move on.
-       */
-      inptr += dir3;		/* Advance pixel pointers to next column */
-      outptr += dir;
-      errorptr += dir3;		/* advance errorptr to current column */
-    }
-    /* Post-loop cleanup: we must unload the final error values into the
-     * final fserrors[] entry.  Note we need not unload belowerrN because
-     * it is for the dummy column before or after the actual array.
-     */
-    errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */
-    errorptr[1] = (FSERROR) bpreverr1;
-    errorptr[2] = (FSERROR) bpreverr2;
-  }
-}
-
-
-/*
- * Initialize the error-limiting transfer function (lookup table).
- * The raw F-S error computation can potentially compute error values of up to
- * +- MAXJSAMPLE.  But we want the maximum correction applied to a pixel to be
- * much less, otherwise obviously wrong pixels will be created.  (Typical
- * effects include weird fringes at color-area boundaries, isolated bright
- * pixels in a dark area, etc.)  The standard advice for avoiding this problem
- * is to ensure that the "corners" of the color cube are allocated as output
- * colors; then repeated errors in the same direction cannot cause cascading
- * error buildup.  However, that only prevents the error from getting
- * completely out of hand; Aaron Giles reports that error limiting improves
- * the results even with corner colors allocated.
- * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty
- * well, but the smoother transfer function used below is even better.  Thanks
- * to Aaron Giles for this idea.
- */
-
-LOCAL(void)
-init_error_limit (j_decompress_ptr cinfo)
-/* Allocate and fill in the error_limiter table */
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  int * table;
-  int in, out;
-
-  table = (int *) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, (MAXJSAMPLE*2+1) * SIZEOF(int));
-  table += MAXJSAMPLE;		/* so can index -MAXJSAMPLE .. +MAXJSAMPLE */
-  cquantize->error_limiter = table;
-
-#define STEPSIZE ((MAXJSAMPLE+1)/16)
-  /* Map errors 1:1 up to +- MAXJSAMPLE/16 */
-  out = 0;
-  for (in = 0; in < STEPSIZE; in++, out++) {
-    table[in] = out; table[-in] = -out;
-  }
-  /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */
-  for (; in < STEPSIZE*3; in++, out += (in&1) ? 0 : 1) {
-    table[in] = out; table[-in] = -out;
-  }
-  /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */
-  for (; in <= MAXJSAMPLE; in++) {
-    table[in] = out; table[-in] = -out;
-  }
-#undef STEPSIZE
-}
-
-
-/*
- * Finish up at the end of each pass.
- */
-
-METHODDEF(void)
-finish_pass1 (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-
-  /* Select the representative colors and fill in cinfo->colormap */
-  cinfo->colormap = cquantize->sv_colormap;
-  select_colors(cinfo, cquantize->desired);
-  /* Force next pass to zero the color index table */
-  cquantize->needs_zeroed = TRUE;
-}
-
-
-METHODDEF(void)
-finish_pass2 (j_decompress_ptr cinfo)
-{
-  /* no work */
-}
-
-
-/*
- * Initialize for each processing pass.
- */
-
-METHODDEF(void)
-start_pass_2_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  hist3d histogram = cquantize->histogram;
-  int i;
-
-  /* Only F-S dithering or no dithering is supported. */
-  /* If user asks for ordered dither, give him F-S. */
-  if (cinfo->dither_mode != JDITHER_NONE)
-    cinfo->dither_mode = JDITHER_FS;
-
-  if (is_pre_scan) {
-    /* Set up method pointers */
-    cquantize->pub.color_quantize = prescan_quantize;
-    cquantize->pub.finish_pass = finish_pass1;
-    cquantize->needs_zeroed = TRUE; /* Always zero histogram */
-  } else {
-    /* Set up method pointers */
-    if (cinfo->dither_mode == JDITHER_FS)
-      cquantize->pub.color_quantize = pass2_fs_dither;
-    else
-      cquantize->pub.color_quantize = pass2_no_dither;
-    cquantize->pub.finish_pass = finish_pass2;
-
-    /* Make sure color count is acceptable */
-    i = cinfo->actual_number_of_colors;
-    if (i < 1)
-      ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 1);
-    if (i > MAXNUMCOLORS)
-      ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
-
-    if (cinfo->dither_mode == JDITHER_FS) {
-      size_t arraysize = (size_t) ((cinfo->output_width + 2) *
-				   (3 * SIZEOF(FSERROR)));
-      /* Allocate Floyd-Steinberg workspace if we didn't already. */
-      if (cquantize->fserrors == NULL)
-	cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
-	  ((j_common_ptr) cinfo, JPOOL_IMAGE, arraysize);
-      /* Initialize the propagated errors to zero. */
-      FMEMZERO((void FAR *) cquantize->fserrors, arraysize);
-      /* Make the error-limit table if we didn't already. */
-      if (cquantize->error_limiter == NULL)
-	init_error_limit(cinfo);
-      cquantize->on_odd_row = FALSE;
-    }
-
-  }
-  /* Zero the histogram or inverse color map, if necessary */
-  if (cquantize->needs_zeroed) {
-    for (i = 0; i < HIST_C0_ELEMS; i++) {
-      FMEMZERO((void FAR *) histogram[i],
-	       HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell));
-    }
-    cquantize->needs_zeroed = FALSE;
-  }
-}
-
-
-/*
- * Switch to a new external colormap between output passes.
- */
-
-METHODDEF(void)
-new_color_map_2_quant (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-
-  /* Reset the inverse color map */
-  cquantize->needs_zeroed = TRUE;
-}
-
-
-/*
- * Module initialization routine for 2-pass color quantization.
- */
-
-GLOBAL(void)
-jinit_2pass_quantizer (j_decompress_ptr cinfo)
-{
-  my_cquantize_ptr cquantize;
-  int i;
-
-  cquantize = (my_cquantize_ptr)
-    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-				SIZEOF(my_cquantizer));
-  cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
-  cquantize->pub.start_pass = start_pass_2_quant;
-  cquantize->pub.new_color_map = new_color_map_2_quant;
-  cquantize->fserrors = NULL;	/* flag optional arrays not allocated */
-  cquantize->error_limiter = NULL;
-
-  /* Make sure jdmaster didn't give me a case I can't handle */
-  if (cinfo->out_color_components != 3)
-    ERREXIT(cinfo, JERR_NOTIMPL);
-
-  /* Allocate the histogram/inverse colormap storage */
-  cquantize->histogram = (hist3d) (*cinfo->mem->alloc_small)
-    ((j_common_ptr) cinfo, JPOOL_IMAGE, HIST_C0_ELEMS * SIZEOF(hist2d));
-  for (i = 0; i < HIST_C0_ELEMS; i++) {
-    cquantize->histogram[i] = (hist2d) (*cinfo->mem->alloc_large)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       HIST_C1_ELEMS*HIST_C2_ELEMS * SIZEOF(histcell));
-  }
-  cquantize->needs_zeroed = TRUE; /* histogram is garbage now */
-
-  /* Allocate storage for the completed colormap, if required.
-   * We do this now since it is FAR storage and may affect
-   * the memory manager's space calculations.
-   */
-  if (cinfo->enable_2pass_quant) {
-    /* Make sure color count is acceptable */
-    int desired = cinfo->desired_number_of_colors;
-    /* Lower bound on # of colors ... somewhat arbitrary as long as > 0 */
-    if (desired < 8)
-      ERREXIT1(cinfo, JERR_QUANT_FEW_COLORS, 8);
-    /* Make sure colormap indexes can be represented by JSAMPLEs */
-    if (desired > MAXNUMCOLORS)
-      ERREXIT1(cinfo, JERR_QUANT_MANY_COLORS, MAXNUMCOLORS);
-    cquantize->sv_colormap = (*cinfo->mem->alloc_sarray)
-      ((j_common_ptr) cinfo,JPOOL_IMAGE, (JDIMENSION) desired, (JDIMENSION) 3);
-    cquantize->desired = desired;
-  } else
-    cquantize->sv_colormap = NULL;
-
-  /* Only F-S dithering or no dithering is supported. */
-  /* If user asks for ordered dither, give him F-S. */
-  if (cinfo->dither_mode != JDITHER_NONE)
-    cinfo->dither_mode = JDITHER_FS;
-
-  /* Allocate Floyd-Steinberg workspace if necessary.
-   * This isn't really needed until pass 2, but again it is FAR storage.
-   * Although we will cope with a later change in dither_mode,
-   * we do not promise to honor max_memory_to_use if dither_mode changes.
-   */
-  if (cinfo->dither_mode == JDITHER_FS) {
-    cquantize->fserrors = (FSERRPTR) (*cinfo->mem->alloc_large)
-      ((j_common_ptr) cinfo, JPOOL_IMAGE,
-       (size_t) ((cinfo->output_width + 2) * (3 * SIZEOF(FSERROR))));
-    /* Might as well create the error-limiting table too. */
-    init_error_limit(cinfo);
-  }
-}
-
-#endif /* QUANT_2PASS_SUPPORTED */
--- a/DoConfig/fltk/jpeg/jutils.c
+++ /dev/null
@@ -1,227 +1,0 @@
-/*
- * jutils.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * Modified 2009-2011 by Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains tables and miscellaneous utility routines needed
- * for both compression and decompression.
- * Note we prefix all global names with "j" to minimize conflicts with
- * a surrounding application.
- */
-
-#define JPEG_INTERNALS
-#include "jinclude.h"
-#include "jpeglib.h"
-
-
-/*
- * jpeg_zigzag_order[i] is the zigzag-order position of the i'th element
- * of a DCT block read in natural order (left to right, top to bottom).
- */
-
-#if 0				/* This table is not actually needed in v6a */
-
-const int jpeg_zigzag_order[DCTSIZE2] = {
-   0,  1,  5,  6, 14, 15, 27, 28,
-   2,  4,  7, 13, 16, 26, 29, 42,
-   3,  8, 12, 17, 25, 30, 41, 43,
-   9, 11, 18, 24, 31, 40, 44, 53,
-  10, 19, 23, 32, 39, 45, 52, 54,
-  20, 22, 33, 38, 46, 51, 55, 60,
-  21, 34, 37, 47, 50, 56, 59, 61,
-  35, 36, 48, 49, 57, 58, 62, 63
-};
-
-#endif
-
-/*
- * jpeg_natural_order[i] is the natural-order position of the i'th element
- * of zigzag order.
- *
- * When reading corrupted data, the Huffman decoders could attempt
- * to reference an entry beyond the end of this array (if the decoded
- * zero run length reaches past the end of the block).  To prevent
- * wild stores without adding an inner-loop test, we put some extra
- * "63"s after the real entries.  This will cause the extra coefficient
- * to be stored in location 63 of the block, not somewhere random.
- * The worst case would be a run-length of 15, which means we need 16
- * fake entries.
- */
-
-const int jpeg_natural_order[DCTSIZE2+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 32, 25, 18, 11,  4,  5,
- 12, 19, 26, 33, 40, 48, 41, 34,
- 27, 20, 13,  6,  7, 14, 21, 28,
- 35, 42, 49, 56, 57, 50, 43, 36,
- 29, 22, 15, 23, 30, 37, 44, 51,
- 58, 59, 52, 45, 38, 31, 39, 46,
- 53, 60, 61, 54, 47, 55, 62, 63,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order7[7*7+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 32, 25, 18, 11,  4,  5,
- 12, 19, 26, 33, 40, 48, 41, 34,
- 27, 20, 13,  6, 14, 21, 28, 35,
- 42, 49, 50, 43, 36, 29, 22, 30,
- 37, 44, 51, 52, 45, 38, 46, 53,
- 54,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order6[6*6+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 32, 25, 18, 11,  4,  5,
- 12, 19, 26, 33, 40, 41, 34, 27,
- 20, 13, 21, 28, 35, 42, 43, 36,
- 29, 37, 44, 45,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order5[5*5+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 32, 25, 18, 11,  4, 12,
- 19, 26, 33, 34, 27, 20, 28, 35,
- 36,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order4[4*4+16] = {
-  0,  1,  8, 16,  9,  2,  3, 10,
- 17, 24, 25, 18, 11, 19, 26, 27,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order3[3*3+16] = {
-  0,  1,  8, 16,  9,  2, 10, 17,
- 18,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-const int jpeg_natural_order2[2*2+16] = {
-  0,  1,  8,  9,
- 63, 63, 63, 63, 63, 63, 63, 63, /* extra entries for safety in decoder */
- 63, 63, 63, 63, 63, 63, 63, 63
-};
-
-
-/*
- * Arithmetic utilities
- */
-
-GLOBAL(long)
-jdiv_round_up (long a, long b)
-/* Compute a/b rounded up to next integer, ie, ceil(a/b) */
-/* Assumes a >= 0, b > 0 */
-{
-  return (a + b - 1L) / b;
-}
-
-
-GLOBAL(long)
-jround_up (long a, long b)
-/* Compute a rounded up to next multiple of b, ie, ceil(a/b)*b */
-/* Assumes a >= 0, b > 0 */
-{
-  a += b - 1L;
-  return a - (a % b);
-}
-
-
-/* On normal machines we can apply MEMCOPY() and MEMZERO() to sample arrays
- * and coefficient-block arrays.  This won't work on 80x86 because the arrays
- * are FAR and we're assuming a small-pointer memory model.  However, some
- * DOS compilers provide far-pointer versions of memcpy() and memset() even
- * in the small-model libraries.  These will be used if USE_FMEM is defined.
- * Otherwise, the routines below do it the hard way.  (The performance cost
- * is not all that great, because these routines aren't very heavily used.)
- */
-
-#ifndef NEED_FAR_POINTERS	/* normal case, same as regular macro */
-#define FMEMCOPY(dest,src,size)	MEMCOPY(dest,src,size)
-#else				/* 80x86 case, define if we can */
-#ifdef USE_FMEM
-#define FMEMCOPY(dest,src,size)	_fmemcpy((void FAR *)(dest), (const void FAR *)(src), (size_t)(size))
-#else
-/* This function is for use by the FMEMZERO macro defined in jpegint.h.
- * Do not call this function directly, use the FMEMZERO macro instead.
- */
-GLOBAL(void)
-jzero_far (void FAR * target, size_t bytestozero)
-/* Zero out a chunk of FAR memory. */
-/* This might be sample-array data, block-array data, or alloc_large data. */
-{
-  register char FAR * ptr = (char FAR *) target;
-  register size_t count;
-
-  for (count = bytestozero; count > 0; count--) {
-    *ptr++ = 0;
-  }
-}
-#endif
-#endif
-
-
-GLOBAL(void)
-jcopy_sample_rows (JSAMPARRAY input_array, int source_row,
-		   JSAMPARRAY output_array, int dest_row,
-		   int num_rows, JDIMENSION num_cols)
-/* Copy some rows of samples from one place to another.
- * num_rows rows are copied from input_array[source_row++]
- * to output_array[dest_row++]; these areas may overlap for duplication.
- * The source and destination arrays must be at least as wide as num_cols.
- */
-{
-  register JSAMPROW inptr, outptr;
-#ifdef FMEMCOPY
-  register size_t count = (size_t) (num_cols * SIZEOF(JSAMPLE));
-#else
-  register JDIMENSION count;
-#endif
-  register int row;
-
-  input_array += source_row;
-  output_array += dest_row;
-
-  for (row = num_rows; row > 0; row--) {
-    inptr = *input_array++;
-    outptr = *output_array++;
-#ifdef FMEMCOPY
-    FMEMCOPY(outptr, inptr, count);
-#else
-    for (count = num_cols; count > 0; count--)
-      *outptr++ = *inptr++;	/* needn't bother with GETJSAMPLE() here */
-#endif
-  }
-}
-
-
-GLOBAL(void)
-jcopy_block_row (JBLOCKROW input_row, JBLOCKROW output_row,
-		 JDIMENSION num_blocks)
-/* Copy a row of coefficient blocks from one place to another. */
-{
-#ifdef FMEMCOPY
-  FMEMCOPY(output_row, input_row, num_blocks * (DCTSIZE2 * SIZEOF(JCOEF)));
-#else
-  register JCOEFPTR inptr, outptr;
-  register long count;
-
-  inptr = (JCOEFPTR) input_row;
-  outptr = (JCOEFPTR) output_row;
-  for (count = (long) num_blocks * DCTSIZE2; count > 0; count--) {
-    *outptr++ = *inptr++;
-  }
-#endif
-}
--- a/DoConfig/fltk/jpeg/jversion.h
+++ /dev/null
@@ -1,14 +1,0 @@
-/*
- * jversion.h
- *
- * Copyright (C) 1991-2014, Thomas G. Lane, Guido Vollbeding.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains software version identification.
- */
-
-
-#define JVERSION	"9a  19-Jan-2014"
-
-#define JCOPYRIGHT	"Copyright (C) 2014, Thomas G. Lane, Guido Vollbeding"
--- a/DoConfig/fltk/jpeg/libjpeg.txt
+++ /dev/null
@@ -1,3111 +1,0 @@
-USING THE IJG JPEG LIBRARY
-
-Copyright (C) 1994-2013, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-This file describes how to use the IJG JPEG library within an application
-program.  Read it if you want to write a program that uses the library.
-
-The file example.c provides heavily commented skeleton code for calling the
-JPEG library.  Also see jpeglib.h (the include file to be used by application
-programs) for full details about data structures and function parameter lists.
-The library source code, of course, is the ultimate reference.
-
-Note that there have been *major* changes from the application interface
-presented by IJG version 4 and earlier versions.  The old design had several
-inherent limitations, and it had accumulated a lot of cruft as we added
-features while trying to minimize application-interface changes.  We have
-sacrificed backward compatibility in the version 5 rewrite, but we think the
-improvements justify this.
-
-
-TABLE OF CONTENTS
------------------
-
-Overview:
-	Functions provided by the library
-	Outline of typical usage
-Basic library usage:
-	Data formats
-	Compression details
-	Decompression details
-	Mechanics of usage: include files, linking, etc
-Advanced features:
-	Compression parameter selection
-	Decompression parameter selection
-	Special color spaces
-	Error handling
-	Compressed data handling (source and destination managers)
-	I/O suspension
-	Progressive JPEG support
-	Buffered-image mode
-	Abbreviated datastreams and multiple images
-	Special markers
-	Raw (downsampled) image data
-	Really raw data: DCT coefficients
-	Progress monitoring
-	Memory management
-	Memory usage
-	Library compile-time options
-	Portability considerations
-	Notes for MS-DOS implementors
-
-You should read at least the overview and basic usage sections before trying
-to program with the library.  The sections on advanced features can be read
-if and when you need them.
-
-
-OVERVIEW
-========
-
-Functions provided by the library
----------------------------------
-
-The IJG JPEG library provides C code to read and write JPEG-compressed image
-files.  The surrounding application program receives or supplies image data a
-scanline at a time, using a straightforward uncompressed image format.  All
-details of color conversion and other preprocessing/postprocessing can be
-handled by the library.
-
-The library includes a substantial amount of code that is not covered by the
-JPEG standard but is necessary for typical applications of JPEG.  These
-functions preprocess the image before JPEG compression or postprocess it after
-decompression.  They include colorspace conversion, downsampling/upsampling,
-and color quantization.  The application indirectly selects use of this code
-by specifying the format in which it wishes to supply or receive image data.
-For example, if colormapped output is requested, then the decompression
-library automatically invokes color quantization.
-
-A wide range of quality vs. speed tradeoffs are possible in JPEG processing,
-and even more so in decompression postprocessing.  The decompression library
-provides multiple implementations that cover most of the useful tradeoffs,
-ranging from very-high-quality down to fast-preview operation.  On the
-compression side we have generally not provided low-quality choices, since
-compression is normally less time-critical.  It should be understood that the
-low-quality modes may not meet the JPEG standard's accuracy requirements;
-nonetheless, they are useful for viewers.
-
-A word about functions *not* provided by the library.  We handle a subset of
-the ISO JPEG standard; most baseline, extended-sequential, and progressive
-JPEG processes are supported.  (Our subset includes all features now in common
-use.)  Unsupported ISO options include:
-	* Hierarchical storage
-	* Lossless JPEG
-	* DNL marker
-	* Nonintegral subsampling ratios
-We support 8-bit to 12-bit data precision, but this is a compile-time choice
-rather than a run-time choice; hence it is difficult to use different
-precisions in a single application.
-
-By itself, the library handles only interchange JPEG datastreams --- in
-particular the widely used JFIF file format.  The library can be used by
-surrounding code to process interchange or abbreviated JPEG datastreams that
-are embedded in more complex file formats.  (For example, this library is
-used by the free LIBTIFF library to support JPEG compression in TIFF.)
-
-
-Outline of typical usage
-------------------------
-
-The rough outline of a JPEG compression operation is:
-
-	Allocate and initialize a JPEG compression object
-	Specify the destination for the compressed data (eg, a file)
-	Set parameters for compression, including image size & colorspace
-	jpeg_start_compress(...);
-	while (scan lines remain to be written)
-		jpeg_write_scanlines(...);
-	jpeg_finish_compress(...);
-	Release the JPEG compression object
-
-A JPEG compression object holds parameters and working state for the JPEG
-library.  We make creation/destruction of the object separate from starting
-or finishing compression of an image; the same object can be re-used for a
-series of image compression operations.  This makes it easy to re-use the
-same parameter settings for a sequence of images.  Re-use of a JPEG object
-also has important implications for processing abbreviated JPEG datastreams,
-as discussed later.
-
-The image data to be compressed is supplied to jpeg_write_scanlines() from
-in-memory buffers.  If the application is doing file-to-file compression,
-reading image data from the source file is the application's responsibility.
-The library emits compressed data by calling a "data destination manager",
-which typically will write the data into a file; but the application can
-provide its own destination manager to do something else.
-
-Similarly, the rough outline of a JPEG decompression operation is:
-
-	Allocate and initialize a JPEG decompression object
-	Specify the source of the compressed data (eg, a file)
-	Call jpeg_read_header() to obtain image info
-	Set parameters for decompression
-	jpeg_start_decompress(...);
-	while (scan lines remain to be read)
-		jpeg_read_scanlines(...);
-	jpeg_finish_decompress(...);
-	Release the JPEG decompression object
-
-This is comparable to the compression outline except that reading the
-datastream header is a separate step.  This is helpful because information
-about the image's size, colorspace, etc is available when the application
-selects decompression parameters.  For example, the application can choose an
-output scaling ratio that will fit the image into the available screen size.
-
-The decompression library obtains compressed data by calling a data source
-manager, which typically will read the data from a file; but other behaviors
-can be obtained with a custom source manager.  Decompressed data is delivered
-into in-memory buffers passed to jpeg_read_scanlines().
-
-It is possible to abort an incomplete compression or decompression operation
-by calling jpeg_abort(); or, if you do not need to retain the JPEG object,
-simply release it by calling jpeg_destroy().
-
-JPEG compression and decompression objects are two separate struct types.
-However, they share some common fields, and certain routines such as
-jpeg_destroy() can work on either type of object.
-
-The JPEG library has no static variables: all state is in the compression
-or decompression object.  Therefore it is possible to process multiple
-compression and decompression operations concurrently, using multiple JPEG
-objects.
-
-Both compression and decompression can be done in an incremental memory-to-
-memory fashion, if suitable source/destination managers are used.  See the
-section on "I/O suspension" for more details.
-
-
-BASIC LIBRARY USAGE
-===================
-
-Data formats
-------------
-
-Before diving into procedural details, it is helpful to understand the
-image data format that the JPEG library expects or returns.
-
-The standard input image format is a rectangular array of pixels, with each
-pixel having the same number of "component" or "sample" values (color
-channels).  You must specify how many components there are and the colorspace
-interpretation of the components.  Most applications will use RGB data
-(three components per pixel) or grayscale data (one component per pixel).
-PLEASE NOTE THAT RGB DATA IS THREE SAMPLES PER PIXEL, GRAYSCALE ONLY ONE.
-A remarkable number of people manage to miss this, only to find that their
-programs don't work with grayscale JPEG files.
-
-There is no provision for colormapped input.  JPEG files are always full-color
-or full grayscale (or sometimes another colorspace such as CMYK).  You can
-feed in a colormapped image by expanding it to full-color format.  However
-JPEG often doesn't work very well with source data that has been colormapped,
-because of dithering noise.  This is discussed in more detail in the JPEG FAQ
-and the other references mentioned in the README file.
-
-Pixels are stored by scanlines, with each scanline running from left to
-right.  The component values for each pixel are adjacent in the row; for
-example, R,G,B,R,G,B,R,G,B,... for 24-bit RGB color.  Each scanline is an
-array of data type JSAMPLE --- which is typically "unsigned char", unless
-you've changed jmorecfg.h.  (You can also change the RGB pixel layout, say
-to B,G,R order, by modifying jmorecfg.h.  But see the restrictions listed in
-that file before doing so.)
-
-A 2-D array of pixels is formed by making a list of pointers to the starts of
-scanlines; so the scanlines need not be physically adjacent in memory.  Even
-if you process just one scanline at a time, you must make a one-element
-pointer array to conform to this structure.  Pointers to JSAMPLE rows are of
-type JSAMPROW, and the pointer to the pointer array is of type JSAMPARRAY.
-
-The library accepts or supplies one or more complete scanlines per call.
-It is not possible to process part of a row at a time.  Scanlines are always
-processed top-to-bottom.  You can process an entire image in one call if you
-have it all in memory, but usually it's simplest to process one scanline at
-a time.
-
-For best results, source data values should have the precision specified by
-BITS_IN_JSAMPLE (normally 8 bits).  For instance, if you choose to compress
-data that's only 6 bits/channel, you should left-justify each value in a
-byte before passing it to the compressor.  If you need to compress data
-that has more than 8 bits/channel, compile with BITS_IN_JSAMPLE = 9 to 12.
-(See "Library compile-time options", later.)
-
-
-The data format returned by the decompressor is the same in all details,
-except that colormapped output is supported.  (Again, a JPEG file is never
-colormapped.  But you can ask the decompressor to perform on-the-fly color
-quantization to deliver colormapped output.)  If you request colormapped
-output then the returned data array contains a single JSAMPLE per pixel;
-its value is an index into a color map.  The color map is represented as
-a 2-D JSAMPARRAY in which each row holds the values of one color component,
-that is, colormap[i][j] is the value of the i'th color component for pixel
-value (map index) j.  Note that since the colormap indexes are stored in
-JSAMPLEs, the maximum number of colors is limited by the size of JSAMPLE
-(ie, at most 256 colors for an 8-bit JPEG library).
-
-
-Compression details
--------------------
-
-Here we revisit the JPEG compression outline given in the overview.
-
-1. Allocate and initialize a JPEG compression object.
-
-A JPEG compression object is a "struct jpeg_compress_struct".  (It also has
-a bunch of subsidiary structures which are allocated via malloc(), but the
-application doesn't control those directly.)  This struct can be just a local
-variable in the calling routine, if a single routine is going to execute the
-whole JPEG compression sequence.  Otherwise it can be static or allocated
-from malloc().
-
-You will also need a structure representing a JPEG error handler.  The part
-of this that the library cares about is a "struct jpeg_error_mgr".  If you
-are providing your own error handler, you'll typically want to embed the
-jpeg_error_mgr struct in a larger structure; this is discussed later under
-"Error handling".  For now we'll assume you are just using the default error
-handler.  The default error handler will print JPEG error/warning messages
-on stderr, and it will call exit() if a fatal error occurs.
-
-You must initialize the error handler structure, store a pointer to it into
-the JPEG object's "err" field, and then call jpeg_create_compress() to
-initialize the rest of the JPEG object.
-
-Typical code for this step, if you are using the default error handler, is
-
-	struct jpeg_compress_struct cinfo;
-	struct jpeg_error_mgr jerr;
-	...
-	cinfo.err = jpeg_std_error(&jerr);
-	jpeg_create_compress(&cinfo);
-
-jpeg_create_compress allocates a small amount of memory, so it could fail
-if you are out of memory.  In that case it will exit via the error handler;
-that's why the error handler must be initialized first.
-
-
-2. Specify the destination for the compressed data (eg, a file).
-
-As previously mentioned, the JPEG library delivers compressed data to a
-"data destination" module.  The library includes one data destination
-module which knows how to write to a stdio stream.  You can use your own
-destination module if you want to do something else, as discussed later.
-
-If you use the standard destination module, you must open the target stdio
-stream beforehand.  Typical code for this step looks like:
-
-	FILE * outfile;
-	...
-	if ((outfile = fopen(filename, "wb")) == NULL) {
-	    fprintf(stderr, "can't open %s\n", filename);
-	    exit(1);
-	}
-	jpeg_stdio_dest(&cinfo, outfile);
-
-where the last line invokes the standard destination module.
-
-WARNING: it is critical that the binary compressed data be delivered to the
-output file unchanged.  On non-Unix systems the stdio library may perform
-newline translation or otherwise corrupt binary data.  To suppress this
-behavior, you may need to use a "b" option to fopen (as shown above), or use
-setmode() or another routine to put the stdio stream in binary mode.  See
-cjpeg.c and djpeg.c for code that has been found to work on many systems.
-
-You can select the data destination after setting other parameters (step 3),
-if that's more convenient.  You may not change the destination between
-calling jpeg_start_compress() and jpeg_finish_compress().
-
-
-3. Set parameters for compression, including image size & colorspace.
-
-You must supply information about the source image by setting the following
-fields in the JPEG object (cinfo structure):
-
-	image_width		Width of image, in pixels
-	image_height		Height of image, in pixels
-	input_components	Number of color channels (samples per pixel)
-	in_color_space		Color space of source image
-
-The image dimensions are, hopefully, obvious.  JPEG supports image dimensions
-of 1 to 64K pixels in either direction.  The input color space is typically
-RGB or grayscale, and input_components is 3 or 1 accordingly.  (See "Special
-color spaces", later, for more info.)  The in_color_space field must be
-assigned one of the J_COLOR_SPACE enum constants, typically JCS_RGB or
-JCS_GRAYSCALE.
-
-JPEG has a large number of compression parameters that determine how the
-image is encoded.  Most applications don't need or want to know about all
-these parameters.  You can set all the parameters to reasonable defaults by
-calling jpeg_set_defaults(); then, if there are particular values you want
-to change, you can do so after that.  The "Compression parameter selection"
-section tells about all the parameters.
-
-You must set in_color_space correctly before calling jpeg_set_defaults(),
-because the defaults depend on the source image colorspace.  However the
-other three source image parameters need not be valid until you call
-jpeg_start_compress().  There's no harm in calling jpeg_set_defaults() more
-than once, if that happens to be convenient.
-
-Typical code for a 24-bit RGB source image is
-
-	cinfo.image_width = Width; 	/* image width and height, in pixels */
-	cinfo.image_height = Height;
-	cinfo.input_components = 3;	/* # of color components per pixel */
-	cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
-
-	jpeg_set_defaults(&cinfo);
-	/* Make optional parameter settings here */
-
-
-4. jpeg_start_compress(...);
-
-After you have established the data destination and set all the necessary
-source image info and other parameters, call jpeg_start_compress() to begin
-a compression cycle.  This will initialize internal state, allocate working
-storage, and emit the first few bytes of the JPEG datastream header.
-
-Typical code:
-
-	jpeg_start_compress(&cinfo, TRUE);
-
-The "TRUE" parameter ensures that a complete JPEG interchange datastream
-will be written.  This is appropriate in most cases.  If you think you might
-want to use an abbreviated datastream, read the section on abbreviated
-datastreams, below.
-
-Once you have called jpeg_start_compress(), you may not alter any JPEG
-parameters or other fields of the JPEG object until you have completed
-the compression cycle.
-
-
-5. while (scan lines remain to be written)
-	jpeg_write_scanlines(...);
-
-Now write all the required image data by calling jpeg_write_scanlines()
-one or more times.  You can pass one or more scanlines in each call, up
-to the total image height.  In most applications it is convenient to pass
-just one or a few scanlines at a time.  The expected format for the passed
-data is discussed under "Data formats", above.
-
-Image data should be written in top-to-bottom scanline order.  The JPEG spec
-contains some weasel wording about how top and bottom are application-defined
-terms (a curious interpretation of the English language...) but if you want
-your files to be compatible with everyone else's, you WILL use top-to-bottom
-order.  If the source data must be read in bottom-to-top order, you can use
-the JPEG library's virtual array mechanism to invert the data efficiently.
-Examples of this can be found in the sample application cjpeg.
-
-The library maintains a count of the number of scanlines written so far
-in the next_scanline field of the JPEG object.  Usually you can just use
-this variable as the loop counter, so that the loop test looks like
-"while (cinfo.next_scanline < cinfo.image_height)".
-
-Code for this step depends heavily on the way that you store the source data.
-example.c shows the following code for the case of a full-size 2-D source
-array containing 3-byte RGB pixels:
-
-	JSAMPROW row_pointer[1];	/* pointer to a single row */
-	int row_stride;			/* physical row width in buffer */
-
-	row_stride = image_width * 3;	/* JSAMPLEs per row in image_buffer */
-
-	while (cinfo.next_scanline < cinfo.image_height) {
-	    row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
-	    jpeg_write_scanlines(&cinfo, row_pointer, 1);
-	}
-
-jpeg_write_scanlines() returns the number of scanlines actually written.
-This will normally be equal to the number passed in, so you can usually
-ignore the return value.  It is different in just two cases:
-  * If you try to write more scanlines than the declared image height,
-    the additional scanlines are ignored.
-  * If you use a suspending data destination manager, output buffer overrun
-    will cause the compressor to return before accepting all the passed lines.
-    This feature is discussed under "I/O suspension", below.  The normal
-    stdio destination manager will NOT cause this to happen.
-In any case, the return value is the same as the change in the value of
-next_scanline.
-
-
-6. jpeg_finish_compress(...);
-
-After all the image data has been written, call jpeg_finish_compress() to
-complete the compression cycle.  This step is ESSENTIAL to ensure that the
-last bufferload of data is written to the data destination.
-jpeg_finish_compress() also releases working memory associated with the JPEG
-object.
-
-Typical code:
-
-	jpeg_finish_compress(&cinfo);
-
-If using the stdio destination manager, don't forget to close the output
-stdio stream (if necessary) afterwards.
-
-If you have requested a multi-pass operating mode, such as Huffman code
-optimization, jpeg_finish_compress() will perform the additional passes using
-data buffered by the first pass.  In this case jpeg_finish_compress() may take
-quite a while to complete.  With the default compression parameters, this will
-not happen.
-
-It is an error to call jpeg_finish_compress() before writing the necessary
-total number of scanlines.  If you wish to abort compression, call
-jpeg_abort() as discussed below.
-
-After completing a compression cycle, you may dispose of the JPEG object
-as discussed next, or you may use it to compress another image.  In that case
-return to step 2, 3, or 4 as appropriate.  If you do not change the
-destination manager, the new datastream will be written to the same target.
-If you do not change any JPEG parameters, the new datastream will be written
-with the same parameters as before.  Note that you can change the input image
-dimensions freely between cycles, but if you change the input colorspace, you
-should call jpeg_set_defaults() to adjust for the new colorspace; and then
-you'll need to repeat all of step 3.
-
-
-7. Release the JPEG compression object.
-
-When you are done with a JPEG compression object, destroy it by calling
-jpeg_destroy_compress().  This will free all subsidiary memory (regardless of
-the previous state of the object).  Or you can call jpeg_destroy(), which
-works for either compression or decompression objects --- this may be more
-convenient if you are sharing code between compression and decompression
-cases.  (Actually, these routines are equivalent except for the declared type
-of the passed pointer.  To avoid gripes from ANSI C compilers, jpeg_destroy()
-should be passed a j_common_ptr.)
-
-If you allocated the jpeg_compress_struct structure from malloc(), freeing
-it is your responsibility --- jpeg_destroy() won't.  Ditto for the error
-handler structure.
-
-Typical code:
-
-	jpeg_destroy_compress(&cinfo);
-
-
-8. Aborting.
-
-If you decide to abort a compression cycle before finishing, you can clean up
-in either of two ways:
-
-* If you don't need the JPEG object any more, just call
-  jpeg_destroy_compress() or jpeg_destroy() to release memory.  This is
-  legitimate at any point after calling jpeg_create_compress() --- in fact,
-  it's safe even if jpeg_create_compress() fails.
-
-* If you want to re-use the JPEG object, call jpeg_abort_compress(), or call
-  jpeg_abort() which works on both compression and decompression objects.
-  This will return the object to an idle state, releasing any working memory.
-  jpeg_abort() is allowed at any time after successful object creation.
-
-Note that cleaning up the data destination, if required, is your
-responsibility; neither of these routines will call term_destination().
-(See "Compressed data handling", below, for more about that.)
-
-jpeg_destroy() and jpeg_abort() are the only safe calls to make on a JPEG
-object that has reported an error by calling error_exit (see "Error handling"
-for more info).  The internal state of such an object is likely to be out of
-whack.  Either of these two routines will return the object to a known state.
-
-
-Decompression details
----------------------
-
-Here we revisit the JPEG decompression outline given in the overview.
-
-1. Allocate and initialize a JPEG decompression object.
-
-This is just like initialization for compression, as discussed above,
-except that the object is a "struct jpeg_decompress_struct" and you
-call jpeg_create_decompress().  Error handling is exactly the same.
-
-Typical code:
-
-	struct jpeg_decompress_struct cinfo;
-	struct jpeg_error_mgr jerr;
-	...
-	cinfo.err = jpeg_std_error(&jerr);
-	jpeg_create_decompress(&cinfo);
-
-(Both here and in the IJG code, we usually use variable name "cinfo" for
-both compression and decompression objects.)
-
-
-2. Specify the source of the compressed data (eg, a file).
-
-As previously mentioned, the JPEG library reads compressed data from a "data
-source" module.  The library includes one data source module which knows how
-to read from a stdio stream.  You can use your own source module if you want
-to do something else, as discussed later.
-
-If you use the standard source module, you must open the source stdio stream
-beforehand.  Typical code for this step looks like:
-
-	FILE * infile;
-	...
-	if ((infile = fopen(filename, "rb")) == NULL) {
-	    fprintf(stderr, "can't open %s\n", filename);
-	    exit(1);
-	}
-	jpeg_stdio_src(&cinfo, infile);
-
-where the last line invokes the standard source module.
-
-WARNING: it is critical that the binary compressed data be read unchanged.
-On non-Unix systems the stdio library may perform newline translation or
-otherwise corrupt binary data.  To suppress this behavior, you may need to use
-a "b" option to fopen (as shown above), or use setmode() or another routine to
-put the stdio stream in binary mode.  See cjpeg.c and djpeg.c for code that
-has been found to work on many systems.
-
-You may not change the data source between calling jpeg_read_header() and
-jpeg_finish_decompress().  If you wish to read a series of JPEG images from
-a single source file, you should repeat the jpeg_read_header() to
-jpeg_finish_decompress() sequence without reinitializing either the JPEG
-object or the data source module; this prevents buffered input data from
-being discarded.
-
-
-3. Call jpeg_read_header() to obtain image info.
-
-Typical code for this step is just
-
-	jpeg_read_header(&cinfo, TRUE);
-
-This will read the source datastream header markers, up to the beginning
-of the compressed data proper.  On return, the image dimensions and other
-info have been stored in the JPEG object.  The application may wish to
-consult this information before selecting decompression parameters.
-
-More complex code is necessary if
-  * A suspending data source is used --- in that case jpeg_read_header()
-    may return before it has read all the header data.  See "I/O suspension",
-    below.  The normal stdio source manager will NOT cause this to happen.
-  * Abbreviated JPEG files are to be processed --- see the section on
-    abbreviated datastreams.  Standard applications that deal only in
-    interchange JPEG files need not be concerned with this case either.
-
-It is permissible to stop at this point if you just wanted to find out the
-image dimensions and other header info for a JPEG file.  In that case,
-call jpeg_destroy() when you are done with the JPEG object, or call
-jpeg_abort() to return it to an idle state before selecting a new data
-source and reading another header.
-
-
-4. Set parameters for decompression.
-
-jpeg_read_header() sets appropriate default decompression parameters based on
-the properties of the image (in particular, its colorspace).  However, you
-may well want to alter these defaults before beginning the decompression.
-For example, the default is to produce full color output from a color file.
-If you want colormapped output you must ask for it.  Other options allow the
-returned image to be scaled and allow various speed/quality tradeoffs to be
-selected.  "Decompression parameter selection", below, gives details.
-
-If the defaults are appropriate, nothing need be done at this step.
-
-Note that all default values are set by each call to jpeg_read_header().
-If you reuse a decompression object, you cannot expect your parameter
-settings to be preserved across cycles, as you can for compression.
-You must set desired parameter values each time.
-
-
-5. jpeg_start_decompress(...);
-
-Once the parameter values are satisfactory, call jpeg_start_decompress() to
-begin decompression.  This will initialize internal state, allocate working
-memory, and prepare for returning data.
-
-Typical code is just
-
-	jpeg_start_decompress(&cinfo);
-
-If you have requested a multi-pass operating mode, such as 2-pass color
-quantization, jpeg_start_decompress() will do everything needed before data
-output can begin.  In this case jpeg_start_decompress() may take quite a while
-to complete.  With a single-scan (non progressive) JPEG file and default
-decompression parameters, this will not happen; jpeg_start_decompress() will
-return quickly.
-
-After this call, the final output image dimensions, including any requested
-scaling, are available in the JPEG object; so is the selected colormap, if
-colormapped output has been requested.  Useful fields include
-
-	output_width		image width and height, as scaled
-	output_height
-	out_color_components	# of color components in out_color_space
-	output_components	# of color components returned per pixel
-	colormap		the selected colormap, if any
-	actual_number_of_colors		number of entries in colormap
-
-output_components is 1 (a colormap index) when quantizing colors; otherwise it
-equals out_color_components.  It is the number of JSAMPLE values that will be
-emitted per pixel in the output arrays.
-
-Typically you will need to allocate data buffers to hold the incoming image.
-You will need output_width * output_components JSAMPLEs per scanline in your
-output buffer, and a total of output_height scanlines will be returned.
-
-Note: if you are using the JPEG library's internal memory manager to allocate
-data buffers (as djpeg does), then the manager's protocol requires that you
-request large buffers *before* calling jpeg_start_decompress().  This is a
-little tricky since the output_XXX fields are not normally valid then.  You
-can make them valid by calling jpeg_calc_output_dimensions() after setting the
-relevant parameters (scaling, output color space, and quantization flag).
-
-
-6. while (scan lines remain to be read)
-	jpeg_read_scanlines(...);
-
-Now you can read the decompressed image data by calling jpeg_read_scanlines()
-one or more times.  At each call, you pass in the maximum number of scanlines
-to be read (ie, the height of your working buffer); jpeg_read_scanlines()
-will return up to that many lines.  The return value is the number of lines
-actually read.  The format of the returned data is discussed under "Data
-formats", above.  Don't forget that grayscale and color JPEGs will return
-different data formats!
-
-Image data is returned in top-to-bottom scanline order.  If you must write
-out the image in bottom-to-top order, you can use the JPEG library's virtual
-array mechanism to invert the data efficiently.  Examples of this can be
-found in the sample application djpeg.
-
-The library maintains a count of the number of scanlines returned so far
-in the output_scanline field of the JPEG object.  Usually you can just use
-this variable as the loop counter, so that the loop test looks like
-"while (cinfo.output_scanline < cinfo.output_height)".  (Note that the test
-should NOT be against image_height, unless you never use scaling.  The
-image_height field is the height of the original unscaled image.)
-The return value always equals the change in the value of output_scanline.
-
-If you don't use a suspending data source, it is safe to assume that
-jpeg_read_scanlines() reads at least one scanline per call, until the
-bottom of the image has been reached.
-
-If you use a buffer larger than one scanline, it is NOT safe to assume that
-jpeg_read_scanlines() fills it.  (The current implementation returns only a
-few scanlines per call, no matter how large a buffer you pass.)  So you must
-always provide a loop that calls jpeg_read_scanlines() repeatedly until the
-whole image has been read.
-
-
-7. jpeg_finish_decompress(...);
-
-After all the image data has been read, call jpeg_finish_decompress() to
-complete the decompression cycle.  This causes working memory associated
-with the JPEG object to be released.
-
-Typical code:
-
-	jpeg_finish_decompress(&cinfo);
-
-If using the stdio source manager, don't forget to close the source stdio
-stream if necessary.
-
-It is an error to call jpeg_finish_decompress() before reading the correct
-total number of scanlines.  If you wish to abort decompression, call
-jpeg_abort() as discussed below.
-
-After completing a decompression cycle, you may dispose of the JPEG object as
-discussed next, or you may use it to decompress another image.  In that case
-return to step 2 or 3 as appropriate.  If you do not change the source
-manager, the next image will be read from the same source.
-
-
-8. Release the JPEG decompression object.
-
-When you are done with a JPEG decompression object, destroy it by calling
-jpeg_destroy_decompress() or jpeg_destroy().  The previous discussion of
-destroying compression objects applies here too.
-
-Typical code:
-
-	jpeg_destroy_decompress(&cinfo);
-
-
-9. Aborting.
-
-You can abort a decompression cycle by calling jpeg_destroy_decompress() or
-jpeg_destroy() if you don't need the JPEG object any more, or
-jpeg_abort_decompress() or jpeg_abort() if you want to reuse the object.
-The previous discussion of aborting compression cycles applies here too.
-
-
-Mechanics of usage: include files, linking, etc
------------------------------------------------
-
-Applications using the JPEG library should include the header file jpeglib.h
-to obtain declarations of data types and routines.  Before including
-jpeglib.h, include system headers that define at least the typedefs FILE and
-size_t.  On ANSI-conforming systems, including <stdio.h> is sufficient; on
-older Unix systems, you may need <sys/types.h> to define size_t.
-
-If the application needs to refer to individual JPEG library error codes, also
-include jerror.h to define those symbols.
-
-jpeglib.h indirectly includes the files jconfig.h and jmorecfg.h.  If you are
-installing the JPEG header files in a system directory, you will want to
-install all four files: jpeglib.h, jerror.h, jconfig.h, jmorecfg.h.
-
-The most convenient way to include the JPEG code into your executable program
-is to prepare a library file ("libjpeg.a", or a corresponding name on non-Unix
-machines) and reference it at your link step.  If you use only half of the
-library (only compression or only decompression), only that much code will be
-included from the library, unless your linker is hopelessly brain-damaged.
-The supplied makefiles build libjpeg.a automatically (see install.txt).
-
-While you can build the JPEG library as a shared library if the whim strikes
-you, we don't really recommend it.  The trouble with shared libraries is that
-at some point you'll probably try to substitute a new version of the library
-without recompiling the calling applications.  That generally doesn't work
-because the parameter struct declarations usually change with each new
-version.  In other words, the library's API is *not* guaranteed binary
-compatible across versions; we only try to ensure source-code compatibility.
-(In hindsight, it might have been smarter to hide the parameter structs from
-applications and introduce a ton of access functions instead.  Too late now,
-however.)
-
-On some systems your application may need to set up a signal handler to ensure
-that temporary files are deleted if the program is interrupted.  This is most
-critical if you are on MS-DOS and use the jmemdos.c memory manager back end;
-it will try to grab extended memory for temp files, and that space will NOT be
-freed automatically.  See cjpeg.c or djpeg.c for an example signal handler.
-
-It may be worth pointing out that the core JPEG library does not actually
-require the stdio library: only the default source/destination managers and
-error handler need it.  You can use the library in a stdio-less environment
-if you replace those modules and use jmemnobs.c (or another memory manager of
-your own devising).  More info about the minimum system library requirements
-may be found in jinclude.h.
-
-
-ADVANCED FEATURES
-=================
-
-Compression parameter selection
--------------------------------
-
-This section describes all the optional parameters you can set for JPEG
-compression, as well as the "helper" routines provided to assist in this
-task.  Proper setting of some parameters requires detailed understanding
-of the JPEG standard; if you don't know what a parameter is for, it's best
-not to mess with it!  See REFERENCES in the README file for pointers to
-more info about JPEG.
-
-It's a good idea to call jpeg_set_defaults() first, even if you plan to set
-all the parameters; that way your code is more likely to work with future JPEG
-libraries that have additional parameters.  For the same reason, we recommend
-you use a helper routine where one is provided, in preference to twiddling
-cinfo fields directly.
-
-The helper routines are:
-
-jpeg_set_defaults (j_compress_ptr cinfo)
-	This routine sets all JPEG parameters to reasonable defaults, using
-	only the input image's color space (field in_color_space, which must
-	already be set in cinfo).  Many applications will only need to use
-	this routine and perhaps jpeg_set_quality().
-
-jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace)
-	Sets the JPEG file's colorspace (field jpeg_color_space) as specified,
-	and sets other color-space-dependent parameters appropriately.  See
-	"Special color spaces", below, before using this.  A large number of
-	parameters, including all per-component parameters, are set by this
-	routine; if you want to twiddle individual parameters you should call
-	jpeg_set_colorspace() before rather than after.
-
-jpeg_default_colorspace (j_compress_ptr cinfo)
-	Selects an appropriate JPEG colorspace based on cinfo->in_color_space,
-	and calls jpeg_set_colorspace().  This is actually a subroutine of
-	jpeg_set_defaults().  It's broken out in case you want to change
-	just the colorspace-dependent JPEG parameters.
-
-jpeg_set_quality (j_compress_ptr cinfo, int quality, boolean force_baseline)
-	Constructs JPEG quantization tables appropriate for the indicated
-	quality setting.  The quality value is expressed on the 0..100 scale
-	recommended by IJG (cjpeg's "-quality" switch uses this routine).
-	Note that the exact mapping from quality values to tables may change
-	in future IJG releases as more is learned about DCT quantization.
-	If the force_baseline parameter is TRUE, then the quantization table
-	entries are constrained to the range 1..255 for full JPEG baseline
-	compatibility.  In the current implementation, this only makes a
-	difference for quality settings below 25, and it effectively prevents
-	very small/low quality files from being generated.  The IJG decoder
-	is capable of reading the non-baseline files generated at low quality
-	settings when force_baseline is FALSE, but other decoders may not be.
-
-jpeg_set_linear_quality (j_compress_ptr cinfo, int scale_factor,
-			 boolean force_baseline)
-	Same as jpeg_set_quality() except that the generated tables are the
-	sample tables given in the JPEC spec section K.1, multiplied by the
-	specified scale factor (which is expressed as a percentage; thus
-	scale_factor = 100 reproduces the spec's tables).  Note that larger
-	scale factors give lower quality.  This entry point is useful for
-	conforming to the Adobe PostScript DCT conventions, but we do not
-	recommend linear scaling as a user-visible quality scale otherwise.
-	force_baseline again constrains the computed table entries to 1..255.
-
-int jpeg_quality_scaling (int quality)
-	Converts a value on the IJG-recommended quality scale to a linear
-	scaling percentage.  Note that this routine may change or go away
-	in future releases --- IJG may choose to adopt a scaling method that
-	can't be expressed as a simple scalar multiplier, in which case the
-	premise of this routine collapses.  Caveat user.
-
-jpeg_default_qtables (j_compress_ptr cinfo, boolean force_baseline)
-	Set default quantization tables with linear q_scale_factor[] values
-	(see below).
-
-jpeg_add_quant_table (j_compress_ptr cinfo, int which_tbl,
-		      const unsigned int *basic_table,
-		      int scale_factor, boolean force_baseline)
-	Allows an arbitrary quantization table to be created.  which_tbl
-	indicates which table slot to fill.  basic_table points to an array
-	of 64 unsigned ints given in normal array order.  These values are
-	multiplied by scale_factor/100 and then clamped to the range 1..65535
-	(or to 1..255 if force_baseline is TRUE).
-	CAUTION: prior to library version 6a, jpeg_add_quant_table expected
-	the basic table to be given in JPEG zigzag order.  If you need to
-	write code that works with either older or newer versions of this
-	routine, you must check the library version number.  Something like
-	"#if JPEG_LIB_VERSION >= 61" is the right test.
-
-jpeg_simple_progression (j_compress_ptr cinfo)
-	Generates a default scan script for writing a progressive-JPEG file.
-	This is the recommended method of creating a progressive file,
-	unless you want to make a custom scan sequence.  You must ensure that
-	the JPEG color space is set correctly before calling this routine.
-
-
-Compression parameters (cinfo fields) include:
-
-boolean arith_code
-	If TRUE, use arithmetic coding.
-	If FALSE, use Huffman coding.
-
-int block_size
-	Set DCT block size.  All N from 1 to 16 are possible.
-	Default is 8 (baseline format).
-	Larger values produce higher compression,
-	smaller values produce higher quality.
-	An exact DCT stage is possible with 1 or 2.
-	With the default quality of 75 and default Luminance qtable
-	the DCT+Quantization stage is lossless for value 1.
-	Note that values other than 8 require a SmartScale capable decoder,
-	introduced with IJG JPEG 8.  Setting the block_size parameter for
-	compression works with version 8c and later.
-
-J_DCT_METHOD dct_method
-	Selects the algorithm used for the DCT step.  Choices are:
-		JDCT_ISLOW: slow but accurate integer algorithm
-		JDCT_IFAST: faster, less accurate integer method
-		JDCT_FLOAT: floating-point method
-		JDCT_DEFAULT: default method (normally JDCT_ISLOW)
-		JDCT_FASTEST: fastest method (normally JDCT_IFAST)
-	The FLOAT method is very slightly more accurate than the ISLOW method,
-	but may give different results on different machines due to varying
-	roundoff behavior.  The integer methods should give the same results
-	on all machines.  On machines with sufficiently fast FP hardware, the
-	floating-point method may also be the fastest.  The IFAST method is
-	considerably less accurate than the other two; its use is not
-	recommended if high quality is a concern.  JDCT_DEFAULT and
-	JDCT_FASTEST are macros configurable by each installation.
-
-unsigned int scale_num, scale_denom
-	Scale the image by the fraction scale_num/scale_denom.  Default is
-	1/1, or no scaling.  Currently, the supported scaling ratios are
-	M/N with all N from 1 to 16, where M is the destination DCT size,
-	which is 8 by default (see block_size parameter above).
-	(The library design allows for arbitrary scaling ratios but this
-	is not likely to be implemented any time soon.)
-
-J_COLOR_SPACE jpeg_color_space
-int num_components
-	The JPEG color space and corresponding number of components; see
-	"Special color spaces", below, for more info.  We recommend using
-	jpeg_set_colorspace() if you want to change these.
-
-J_COLOR_TRANSFORM color_transform
-	Internal color transform identifier, writes LSE marker if nonzero
-	(requires decoder with inverse color transform support, introduced
-	with IJG JPEG 9).
-	Two values are currently possible: JCT_NONE and JCT_SUBTRACT_GREEN.
-	Set this value for lossless RGB application *before* calling
-	jpeg_set_colorspace(), because entropy table assignment in
-	jpeg_set_colorspace() depends on color_transform.
-
-boolean optimize_coding
-	TRUE causes the compressor to compute optimal Huffman coding tables
-	for the image.  This requires an extra pass over the data and
-	therefore costs a good deal of space and time.  The default is
-	FALSE, which tells the compressor to use the supplied or default
-	Huffman tables.  In most cases optimal tables save only a few percent
-	of file size compared to the default tables.  Note that when this is
-	TRUE, you need not supply Huffman tables at all, and any you do
-	supply will be overwritten.
-
-unsigned int restart_interval
-int restart_in_rows
-	To emit restart markers in the JPEG file, set one of these nonzero.
-	Set restart_interval to specify the exact interval in MCU blocks.
-	Set restart_in_rows to specify the interval in MCU rows.  (If
-	restart_in_rows is not 0, then restart_interval is set after the
-	image width in MCUs is computed.)  Defaults are zero (no restarts).
-	One restart marker per MCU row is often a good choice.
-	NOTE: the overhead of restart markers is higher in grayscale JPEG
-	files than in color files, and MUCH higher in progressive JPEGs.
-	If you use restarts, you may want to use larger intervals in those
-	cases.
-
-const jpeg_scan_info * scan_info
-int num_scans
-	By default, scan_info is NULL; this causes the compressor to write a
-	single-scan sequential JPEG file.  If not NULL, scan_info points to
-	an array of scan definition records of length num_scans.  The
-	compressor will then write a JPEG file having one scan for each scan
-	definition record.  This is used to generate noninterleaved or
-	progressive JPEG files.  The library checks that the scan array
-	defines a valid JPEG scan sequence.  (jpeg_simple_progression creates
-	a suitable scan definition array for progressive JPEG.)  This is
-	discussed further under "Progressive JPEG support".
-
-boolean do_fancy_downsampling
-	If TRUE, use direct DCT scaling with DCT size > 8 for downsampling
-	of chroma components.
-	If FALSE, use only DCT size <= 8 and simple separate downsampling.
-	Default is TRUE.
-	For better image stability in multiple generation compression cycles
-	it is preferable that this value matches the corresponding
-	do_fancy_upsampling value in decompression.
-
-int smoothing_factor
-	If non-zero, the input image is smoothed; the value should be 1 for
-	minimal smoothing to 100 for maximum smoothing.  Consult jcsample.c
-	for details of the smoothing algorithm.  The default is zero.
-
-boolean write_JFIF_header
-	If TRUE, a JFIF APP0 marker is emitted.  jpeg_set_defaults() and
-	jpeg_set_colorspace() set this TRUE if a JFIF-legal JPEG color space
-	(ie, YCbCr or grayscale) is selected, otherwise FALSE.
-
-UINT8 JFIF_major_version
-UINT8 JFIF_minor_version
-	The version number to be written into the JFIF marker.
-	jpeg_set_defaults() initializes the version to 1.01 (major=minor=1).
-	You should set it to 1.02 (major=1, minor=2) if you plan to write
-	any JFIF 1.02 extension markers.
-
-UINT8 density_unit
-UINT16 X_density
-UINT16 Y_density
-	The resolution information to be written into the JFIF marker;
-	not used otherwise.  density_unit may be 0 for unknown,
-	1 for dots/inch, or 2 for dots/cm.  The default values are 0,1,1
-	indicating square pixels of unknown size.
-
-boolean write_Adobe_marker
-	If TRUE, an Adobe APP14 marker is emitted.  jpeg_set_defaults() and
-	jpeg_set_colorspace() set this TRUE if JPEG color space RGB, CMYK,
-	or YCCK is selected, otherwise FALSE.  It is generally a bad idea
-	to set both write_JFIF_header and write_Adobe_marker.  In fact,
-	you probably shouldn't change the default settings at all --- the
-	default behavior ensures that the JPEG file's color space can be
-	recognized by the decoder.
-
-JQUANT_TBL * quant_tbl_ptrs[NUM_QUANT_TBLS]
-	Pointers to coefficient quantization tables, one per table slot,
-	or NULL if no table is defined for a slot.  Usually these should
-	be set via one of the above helper routines; jpeg_add_quant_table()
-	is general enough to define any quantization table.  The other
-	routines will set up table slot 0 for luminance quality and table
-	slot 1 for chrominance.
-
-int q_scale_factor[NUM_QUANT_TBLS]
-	Linear quantization scaling factors (percentage, initialized 100)
-	for use with jpeg_default_qtables().
-	See rdswitch.c and cjpeg.c for an example of usage.
-	Note that the q_scale_factor[] fields are the "linear" scales, so you
-	have to convert from user-defined ratings via jpeg_quality_scaling().
-	Here is an example code which corresponds to cjpeg -quality 90,70:
-
-		jpeg_set_defaults(cinfo);
-
-		/* Set luminance quality 90. */
-		cinfo->q_scale_factor[0] = jpeg_quality_scaling(90);
-		/* Set chrominance quality 70. */
-		cinfo->q_scale_factor[1] = jpeg_quality_scaling(70);
-
-		jpeg_default_qtables(cinfo, force_baseline);
-
-	CAUTION: You must also set 1x1 subsampling for efficient separate
-	color quality selection, since the default value used by library
-	is 2x2:
-
-		cinfo->comp_info[0].v_samp_factor = 1;
-		cinfo->comp_info[0].h_samp_factor = 1;
-
-JHUFF_TBL * dc_huff_tbl_ptrs[NUM_HUFF_TBLS]
-JHUFF_TBL * ac_huff_tbl_ptrs[NUM_HUFF_TBLS]
-	Pointers to Huffman coding tables, one per table slot, or NULL if
-	no table is defined for a slot.  Slots 0 and 1 are filled with the
-	JPEG sample tables by jpeg_set_defaults().  If you need to allocate
-	more table structures, jpeg_alloc_huff_table() may be used.
-	Note that optimal Huffman tables can be computed for an image
-	by setting optimize_coding, as discussed above; there's seldom
-	any need to mess with providing your own Huffman tables.
-
-
-The actual dimensions of the JPEG image that will be written to the file are
-given by the following fields.  These are computed from the input image
-dimensions and the compression parameters by jpeg_start_compress().  You can
-also call jpeg_calc_jpeg_dimensions() to obtain the values that will result
-from the current parameter settings.  This can be useful if you are trying
-to pick a scaling ratio that will get close to a desired target size.
-
-JDIMENSION jpeg_width		Actual dimensions of output image.
-JDIMENSION jpeg_height
-
-
-Per-component parameters are stored in the struct cinfo.comp_info[i] for
-component number i.  Note that components here refer to components of the
-JPEG color space, *not* the source image color space.  A suitably large
-comp_info[] array is allocated by jpeg_set_defaults(); if you choose not
-to use that routine, it's up to you to allocate the array.
-
-int component_id
-	The one-byte identifier code to be recorded in the JPEG file for
-	this component.  For the standard color spaces, we recommend you
-	leave the default values alone.
-
-int h_samp_factor
-int v_samp_factor
-	Horizontal and vertical sampling factors for the component; must
-	be 1..4 according to the JPEG standard.  Note that larger sampling
-	factors indicate a higher-resolution component; many people find
-	this behavior quite unintuitive.  The default values are 2,2 for
-	luminance components and 1,1 for chrominance components, except
-	for grayscale where 1,1 is used.
-
-int quant_tbl_no
-	Quantization table number for component.  The default value is
-	0 for luminance components and 1 for chrominance components.
-
-int dc_tbl_no
-int ac_tbl_no
-	DC and AC entropy coding table numbers.  The default values are
-	0 for luminance components and 1 for chrominance components.
-
-int component_index
-	Must equal the component's index in comp_info[].  (Beginning in
-	release v6, the compressor library will fill this in automatically;
-	you don't have to.)
-
-
-Decompression parameter selection
----------------------------------
-
-Decompression parameter selection is somewhat simpler than compression
-parameter selection, since all of the JPEG internal parameters are
-recorded in the source file and need not be supplied by the application.
-(Unless you are working with abbreviated files, in which case see
-"Abbreviated datastreams", below.)  Decompression parameters control
-the postprocessing done on the image to deliver it in a format suitable
-for the application's use.  Many of the parameters control speed/quality
-tradeoffs, in which faster decompression may be obtained at the price of
-a poorer-quality image.  The defaults select the highest quality (slowest)
-processing.
-
-The following fields in the JPEG object are set by jpeg_read_header() and
-may be useful to the application in choosing decompression parameters:
-
-JDIMENSION image_width			Width and height of image
-JDIMENSION image_height
-int num_components			Number of color components
-J_COLOR_SPACE jpeg_color_space		Colorspace of image
-boolean saw_JFIF_marker			TRUE if a JFIF APP0 marker was seen
-  UINT8 JFIF_major_version		Version information from JFIF marker
-  UINT8 JFIF_minor_version
-  UINT8 density_unit			Resolution data from JFIF marker
-  UINT16 X_density
-  UINT16 Y_density
-boolean saw_Adobe_marker		TRUE if an Adobe APP14 marker was seen
-  UINT8 Adobe_transform			Color transform code from Adobe marker
-
-The JPEG color space, unfortunately, is something of a guess since the JPEG
-standard proper does not provide a way to record it.  In practice most files
-adhere to the JFIF or Adobe conventions, and the decoder will recognize these
-correctly.  See "Special color spaces", below, for more info.
-
-
-The decompression parameters that determine the basic properties of the
-returned image are:
-
-J_COLOR_SPACE out_color_space
-	Output color space.  jpeg_read_header() sets an appropriate default
-	based on jpeg_color_space; typically it will be RGB or grayscale.
-	The application can change this field to request output in a different
-	colorspace.  For example, set it to JCS_GRAYSCALE to get grayscale
-	output from a color file.  (This is useful for previewing: grayscale
-	output is faster than full color since the color components need not
-	be processed.)  Note that not all possible color space transforms are
-	currently implemented; you may need to extend jdcolor.c if you want an
-	unusual conversion.
-
-unsigned int scale_num, scale_denom
-	Scale the image by the fraction scale_num/scale_denom.  Currently,
-	the supported scaling ratios are M/N with all M from 1 to 16, where
-	N is the source DCT size, which is 8 for baseline JPEG.  (The library
-	design allows for arbitrary scaling ratios but this is not likely
-	to be implemented any time soon.)  The values are initialized by
-	jpeg_read_header() with the source DCT size.  For baseline JPEG
-	this is 8/8.  If you change only the scale_num value while leaving
-	the other unchanged, then this specifies the DCT scaled size to be
-	applied on the given input.  For baseline JPEG this is equivalent
-	to M/8 scaling, since the source DCT size for baseline JPEG is 8.
-	Smaller scaling ratios permit significantly faster decoding since
-	fewer pixels need be processed and a simpler IDCT method can be used.
-
-boolean quantize_colors
-	If set TRUE, colormapped output will be delivered.  Default is FALSE,
-	meaning that full-color output will be delivered.
-
-The next three parameters are relevant only if quantize_colors is TRUE.
-
-int desired_number_of_colors
-	Maximum number of colors to use in generating a library-supplied color
-	map (the actual number of colors is returned in a different field).
-	Default 256.  Ignored when the application supplies its own color map.
-
-boolean two_pass_quantize
-	If TRUE, an extra pass over the image is made to select a custom color
-	map for the image.  This usually looks a lot better than the one-size-
-	fits-all colormap that is used otherwise.  Default is TRUE.  Ignored
-	when the application supplies its own color map.
-
-J_DITHER_MODE dither_mode
-	Selects color dithering method.  Supported values are:
-		JDITHER_NONE	no dithering: fast, very low quality
-		JDITHER_ORDERED	ordered dither: moderate speed and quality
-		JDITHER_FS	Floyd-Steinberg dither: slow, high quality
-	Default is JDITHER_FS.  (At present, ordered dither is implemented
-	only in the single-pass, standard-colormap case.  If you ask for
-	ordered dither when two_pass_quantize is TRUE or when you supply
-	an external color map, you'll get F-S dithering.)
-
-When quantize_colors is TRUE, the target color map is described by the next
-two fields.  colormap is set to NULL by jpeg_read_header().  The application
-can supply a color map by setting colormap non-NULL and setting
-actual_number_of_colors to the map size.  Otherwise, jpeg_start_decompress()
-selects a suitable color map and sets these two fields itself.
-[Implementation restriction: at present, an externally supplied colormap is
-only accepted for 3-component output color spaces.]
-
-JSAMPARRAY colormap
-	The color map, represented as a 2-D pixel array of out_color_components
-	rows and actual_number_of_colors columns.  Ignored if not quantizing.
-	CAUTION: if the JPEG library creates its own colormap, the storage
-	pointed to by this field is released by jpeg_finish_decompress().
-	Copy the colormap somewhere else first, if you want to save it.
-
-int actual_number_of_colors
-	The number of colors in the color map.
-
-Additional decompression parameters that the application may set include:
-
-J_DCT_METHOD dct_method
-	Selects the algorithm used for the DCT step.  Choices are the same
-	as described above for compression.
-
-boolean do_fancy_upsampling
-	If TRUE, use direct DCT scaling with DCT size > 8 for upsampling
-	of chroma components.
-	If FALSE, use only DCT size <= 8 and simple separate upsampling.
-	Default is TRUE.
-	For better image stability in multiple generation compression cycles
-	it is preferable that this value matches the corresponding
-	do_fancy_downsampling value in compression.
-
-boolean do_block_smoothing
-	If TRUE, interblock smoothing is applied in early stages of decoding
-	progressive JPEG files; if FALSE, not.  Default is TRUE.  Early
-	progression stages look "fuzzy" with smoothing, "blocky" without.
-	In any case, block smoothing ceases to be applied after the first few
-	AC coefficients are known to full accuracy, so it is relevant only
-	when using buffered-image mode for progressive images.
-
-boolean enable_1pass_quant
-boolean enable_external_quant
-boolean enable_2pass_quant
-	These are significant only in buffered-image mode, which is
-	described in its own section below.
-
-
-The output image dimensions are given by the following fields.  These are
-computed from the source image dimensions and the decompression parameters
-by jpeg_start_decompress().  You can also call jpeg_calc_output_dimensions()
-to obtain the values that will result from the current parameter settings.
-This can be useful if you are trying to pick a scaling ratio that will get
-close to a desired target size.  It's also important if you are using the
-JPEG library's memory manager to allocate output buffer space, because you
-are supposed to request such buffers *before* jpeg_start_decompress().
-
-JDIMENSION output_width		Actual dimensions of output image.
-JDIMENSION output_height
-int out_color_components	Number of color components in out_color_space.
-int output_components		Number of color components returned.
-int rec_outbuf_height		Recommended height of scanline buffer.
-
-When quantizing colors, output_components is 1, indicating a single color map
-index per pixel.  Otherwise it equals out_color_components.  The output arrays
-are required to be output_width * output_components JSAMPLEs wide.
-
-rec_outbuf_height is the recommended minimum height (in scanlines) of the
-buffer passed to jpeg_read_scanlines().  If the buffer is smaller, the
-library will still work, but time will be wasted due to unnecessary data
-copying.  In high-quality modes, rec_outbuf_height is always 1, but some
-faster, lower-quality modes set it to larger values (typically 2 to 4).
-If you are going to ask for a high-speed processing mode, you may as well
-go to the trouble of honoring rec_outbuf_height so as to avoid data copying.
-(An output buffer larger than rec_outbuf_height lines is OK, but won't
-provide any material speed improvement over that height.)
-
-
-Special color spaces
---------------------
-
-The JPEG standard itself is "color blind" and doesn't specify any particular
-color space.  It is customary to convert color data to a luminance/chrominance
-color space before compressing, since this permits greater compression.  The
-existing JPEG file interchange format standards specify YCbCr or GRAYSCALE
-data (JFIF version 1), GRAYSCALE, RGB, YCbCr, CMYK, or YCCK (Adobe), or BG_RGB
-or BG_YCC (big gamut color spaces, JFIF version 2).  For special applications
-such as multispectral images, other color spaces can be used,
-but it must be understood that such files will be unportable.
-
-The JPEG library can handle the most common colorspace conversions (namely
-RGB <=> YCbCr and CMYK <=> YCCK).  It can also deal with data of an unknown
-color space, passing it through without conversion.  If you deal extensively
-with an unusual color space, you can easily extend the library to understand
-additional color spaces and perform appropriate conversions.
-
-For compression, the source data's color space is specified by field
-in_color_space.  This is transformed to the JPEG file's color space given
-by jpeg_color_space.  jpeg_set_defaults() chooses a reasonable JPEG color
-space depending on in_color_space, but you can override this by calling
-jpeg_set_colorspace().  Of course you must select a supported transformation.
-jccolor.c currently supports the following transformations:
-	RGB => YCbCr
-	RGB => GRAYSCALE
-	RGB => BG_YCC
-	YCbCr => GRAYSCALE
-	YCbCr => BG_YCC
-	CMYK => YCCK
-plus the null transforms: GRAYSCALE => GRAYSCALE, RGB => RGB,
-BG_RGB => BG_RGB, YCbCr => YCbCr, BG_YCC => BG_YCC, CMYK => CMYK,
-YCCK => YCCK, and UNKNOWN => UNKNOWN.
-
-The file interchange format standards (JFIF and Adobe) specify APPn markers
-that indicate the color space of the JPEG file.  It is important to ensure
-that these are written correctly, or omitted if the JPEG file's color space
-is not one of the ones supported by the interchange standards.
-jpeg_set_colorspace() will set the compression parameters to include or omit
-the APPn markers properly, so long as it is told the truth about the JPEG
-color space.  For example, if you are writing some random 3-component color
-space without conversion, don't try to fake out the library by setting
-in_color_space and jpeg_color_space to JCS_YCbCr; use JCS_UNKNOWN.
-You may want to write an APPn marker of your own devising to identify
-the colorspace --- see "Special markers", below.
-
-When told that the color space is UNKNOWN, the library will default to using
-luminance-quality compression parameters for all color components.  You may
-well want to change these parameters.  See the source code for
-jpeg_set_colorspace(), in jcparam.c, for details.
-
-For decompression, the JPEG file's color space is given in jpeg_color_space,
-and this is transformed to the output color space out_color_space.
-jpeg_read_header's setting of jpeg_color_space can be relied on if the file
-conforms to JFIF or Adobe conventions, but otherwise it is no better than a
-guess.  If you know the JPEG file's color space for certain, you can override
-jpeg_read_header's guess by setting jpeg_color_space.  jpeg_read_header also
-selects a default output color space based on (its guess of) jpeg_color_space;
-set out_color_space to override this.  Again, you must select a supported
-transformation.  jdcolor.c currently supports
-	YCbCr => RGB
-	YCbCr => GRAYSCALE
-	BG_YCC => RGB
-	BG_YCC => GRAYSCALE
-	RGB => GRAYSCALE
-	GRAYSCALE => RGB
-	YCCK => CMYK
-as well as the null transforms.  (Since GRAYSCALE=>RGB is provided, an
-application can force grayscale JPEGs to look like color JPEGs if it only
-wants to handle one case.)
-
-The two-pass color quantizer, jquant2.c, is specialized to handle RGB data
-(it weights distances appropriately for RGB colors).  You'll need to modify
-the code if you want to use it for non-RGB output color spaces.  Note that
-jquant2.c is used to map to an application-supplied colormap as well as for
-the normal two-pass colormap selection process.
-
-CAUTION: it appears that Adobe Photoshop writes inverted data in CMYK JPEG
-files: 0 represents 100% ink coverage, rather than 0% ink as you'd expect.
-This is arguably a bug in Photoshop, but if you need to work with Photoshop
-CMYK files, you will have to deal with it in your application.  We cannot
-"fix" this in the library by inverting the data during the CMYK<=>YCCK
-transform, because that would break other applications, notably Ghostscript.
-Photoshop versions prior to 3.0 write EPS files containing JPEG-encoded CMYK
-data in the same inverted-YCCK representation used in bare JPEG files, but
-the surrounding PostScript code performs an inversion using the PS image
-operator.  I am told that Photoshop 3.0 will write uninverted YCCK in
-EPS/JPEG files, and will omit the PS-level inversion.  (But the data
-polarity used in bare JPEG files will not change in 3.0.)  In either case,
-the JPEG library must not invert the data itself, or else Ghostscript would
-read these EPS files incorrectly.
-
-
-Error handling
---------------
-
-When the default error handler is used, any error detected inside the JPEG
-routines will cause a message to be printed on stderr, followed by exit().
-You can supply your own error handling routines to override this behavior
-and to control the treatment of nonfatal warnings and trace/debug messages.
-The file example.c illustrates the most common case, which is to have the
-application regain control after an error rather than exiting.
-
-The JPEG library never writes any message directly; it always goes through
-the error handling routines.  Three classes of messages are recognized:
-  * Fatal errors: the library cannot continue.
-  * Warnings: the library can continue, but the data is corrupt, and a
-    damaged output image is likely to result.
-  * Trace/informational messages.  These come with a trace level indicating
-    the importance of the message; you can control the verbosity of the
-    program by adjusting the maximum trace level that will be displayed.
-
-You may, if you wish, simply replace the entire JPEG error handling module
-(jerror.c) with your own code.  However, you can avoid code duplication by
-only replacing some of the routines depending on the behavior you need.
-This is accomplished by calling jpeg_std_error() as usual, but then overriding
-some of the method pointers in the jpeg_error_mgr struct, as illustrated by
-example.c.
-
-All of the error handling routines will receive a pointer to the JPEG object
-(a j_common_ptr which points to either a jpeg_compress_struct or a
-jpeg_decompress_struct; if you need to tell which, test the is_decompressor
-field).  This struct includes a pointer to the error manager struct in its
-"err" field.  Frequently, custom error handler routines will need to access
-additional data which is not known to the JPEG library or the standard error
-handler.  The most convenient way to do this is to embed either the JPEG
-object or the jpeg_error_mgr struct in a larger structure that contains
-additional fields; then casting the passed pointer provides access to the
-additional fields.  Again, see example.c for one way to do it.  (Beginning
-with IJG version 6b, there is also a void pointer "client_data" in each
-JPEG object, which the application can also use to find related data.
-The library does not touch client_data at all.)
-
-The individual methods that you might wish to override are:
-
-error_exit (j_common_ptr cinfo)
-	Receives control for a fatal error.  Information sufficient to
-	generate the error message has been stored in cinfo->err; call
-	output_message to display it.  Control must NOT return to the caller;
-	generally this routine will exit() or longjmp() somewhere.
-	Typically you would override this routine to get rid of the exit()
-	default behavior.  Note that if you continue processing, you should
-	clean up the JPEG object with jpeg_abort() or jpeg_destroy().
-
-output_message (j_common_ptr cinfo)
-	Actual output of any JPEG message.  Override this to send messages
-	somewhere other than stderr.  Note that this method does not know
-	how to generate a message, only where to send it.
-
-format_message (j_common_ptr cinfo, char * buffer)
-	Constructs a readable error message string based on the error info
-	stored in cinfo->err.  This method is called by output_message.  Few
-	applications should need to override this method.  One possible
-	reason for doing so is to implement dynamic switching of error message
-	language.
-
-emit_message (j_common_ptr cinfo, int msg_level)
-	Decide whether or not to emit a warning or trace message; if so,
-	calls output_message.  The main reason for overriding this method
-	would be to abort on warnings.  msg_level is -1 for warnings,
-	0 and up for trace messages.
-
-Only error_exit() and emit_message() are called from the rest of the JPEG
-library; the other two are internal to the error handler.
-
-The actual message texts are stored in an array of strings which is pointed to
-by the field err->jpeg_message_table.  The messages are numbered from 0 to
-err->last_jpeg_message, and it is these code numbers that are used in the
-JPEG library code.  You could replace the message texts (for instance, with
-messages in French or German) by changing the message table pointer.  See
-jerror.h for the default texts.  CAUTION: this table will almost certainly
-change or grow from one library version to the next.
-
-It may be useful for an application to add its own message texts that are
-handled by the same mechanism.  The error handler supports a second "add-on"
-message table for this purpose.  To define an addon table, set the pointer
-err->addon_message_table and the message numbers err->first_addon_message and
-err->last_addon_message.  If you number the addon messages beginning at 1000
-or so, you won't have to worry about conflicts with the library's built-in
-messages.  See the sample applications cjpeg/djpeg for an example of using
-addon messages (the addon messages are defined in cderror.h).
-
-Actual invocation of the error handler is done via macros defined in jerror.h:
-	ERREXITn(...)	for fatal errors
-	WARNMSn(...)	for corrupt-data warnings
-	TRACEMSn(...)	for trace and informational messages.
-These macros store the message code and any additional parameters into the
-error handler struct, then invoke the error_exit() or emit_message() method.
-The variants of each macro are for varying numbers of additional parameters.
-The additional parameters are inserted into the generated message using
-standard printf() format codes.
-
-See jerror.h and jerror.c for further details.
-
-
-Compressed data handling (source and destination managers)
-----------------------------------------------------------
-
-The JPEG compression library sends its compressed data to a "destination
-manager" module.  The default destination manager just writes the data to a
-memory buffer or to a stdio stream, but you can provide your own manager to
-do something else.  Similarly, the decompression library calls a "source
-manager" to obtain the compressed data; you can provide your own source
-manager if you want the data to come from somewhere other than a memory
-buffer or a stdio stream.
-
-In both cases, compressed data is processed a bufferload at a time: the
-destination or source manager provides a work buffer, and the library invokes
-the manager only when the buffer is filled or emptied.  (You could define a
-one-character buffer to force the manager to be invoked for each byte, but
-that would be rather inefficient.)  The buffer's size and location are
-controlled by the manager, not by the library.  For example, the memory
-source manager just makes the buffer pointer and length point to the original
-data in memory.  In this case the buffer-reload procedure will be invoked
-only if the decompressor ran off the end of the datastream, which would
-indicate an erroneous datastream.
-
-The work buffer is defined as an array of datatype JOCTET, which is generally
-"char" or "unsigned char".  On a machine where char is not exactly 8 bits
-wide, you must define JOCTET as a wider data type and then modify the data
-source and destination modules to transcribe the work arrays into 8-bit units
-on external storage.
-
-A data destination manager struct contains a pointer and count defining the
-next byte to write in the work buffer and the remaining free space:
-
-	JOCTET * next_output_byte;  /* => next byte to write in buffer */
-	size_t free_in_buffer;      /* # of byte spaces remaining in buffer */
-
-The library increments the pointer and decrements the count until the buffer
-is filled.  The manager's empty_output_buffer method must reset the pointer
-and count.  The manager is expected to remember the buffer's starting address
-and total size in private fields not visible to the library.
-
-A data destination manager provides three methods:
-
-init_destination (j_compress_ptr cinfo)
-	Initialize destination.  This is called by jpeg_start_compress()
-	before any data is actually written.  It must initialize
-	next_output_byte and free_in_buffer.  free_in_buffer must be
-	initialized to a positive value.
-
-empty_output_buffer (j_compress_ptr cinfo)
-	This is called whenever the buffer has filled (free_in_buffer
-	reaches zero).  In typical applications, it should write out the
-	*entire* buffer (use the saved start address and buffer length;
-	ignore the current state of next_output_byte and free_in_buffer).
-	Then reset the pointer & count to the start of the buffer, and
-	return TRUE indicating that the buffer has been dumped.
-	free_in_buffer must be set to a positive value when TRUE is
-	returned.  A FALSE return should only be used when I/O suspension is
-	desired (this operating mode is discussed in the next section).
-
-term_destination (j_compress_ptr cinfo)
-	Terminate destination --- called by jpeg_finish_compress() after all
-	data has been written.  In most applications, this must flush any
-	data remaining in the buffer.  Use either next_output_byte or
-	free_in_buffer to determine how much data is in the buffer.
-
-term_destination() is NOT called by jpeg_abort() or jpeg_destroy().  If you
-want the destination manager to be cleaned up during an abort, you must do it
-yourself.
-
-You will also need code to create a jpeg_destination_mgr struct, fill in its
-method pointers, and insert a pointer to the struct into the "dest" field of
-the JPEG compression object.  This can be done in-line in your setup code if
-you like, but it's probably cleaner to provide a separate routine similar to
-the jpeg_stdio_dest() or jpeg_mem_dest() routines of the supplied destination
-managers.
-
-Decompression source managers follow a parallel design, but with some
-additional frammishes.  The source manager struct contains a pointer and count
-defining the next byte to read from the work buffer and the number of bytes
-remaining:
-
-	const JOCTET * next_input_byte; /* => next byte to read from buffer */
-	size_t bytes_in_buffer;         /* # of bytes remaining in buffer */
-
-The library increments the pointer and decrements the count until the buffer
-is emptied.  The manager's fill_input_buffer method must reset the pointer and
-count.  In most applications, the manager must remember the buffer's starting
-address and total size in private fields not visible to the library.
-
-A data source manager provides five methods:
-
-init_source (j_decompress_ptr cinfo)
-	Initialize source.  This is called by jpeg_read_header() before any
-	data is actually read.  Unlike init_destination(), it may leave
-	bytes_in_buffer set to 0 (in which case a fill_input_buffer() call
-	will occur immediately).
-
-fill_input_buffer (j_decompress_ptr cinfo)
-	This is called whenever bytes_in_buffer has reached zero and more
-	data is wanted.  In typical applications, it should read fresh data
-	into the buffer (ignoring the current state of next_input_byte and
-	bytes_in_buffer), reset the pointer & count to the start of the
-	buffer, and return TRUE indicating that the buffer has been reloaded.
-	It is not necessary to fill the buffer entirely, only to obtain at
-	least one more byte.  bytes_in_buffer MUST be set to a positive value
-	if TRUE is returned.  A FALSE return should only be used when I/O
-	suspension is desired (this mode is discussed in the next section).
-
-skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-	Skip num_bytes worth of data.  The buffer pointer and count should
-	be advanced over num_bytes input bytes, refilling the buffer as
-	needed.  This is used to skip over a potentially large amount of
-	uninteresting data (such as an APPn marker).  In some applications
-	it may be possible to optimize away the reading of the skipped data,
-	but it's not clear that being smart is worth much trouble; large
-	skips are uncommon.  bytes_in_buffer may be zero on return.
-	A zero or negative skip count should be treated as a no-op.
-
-resync_to_restart (j_decompress_ptr cinfo, int desired)
-	This routine is called only when the decompressor has failed to find
-	a restart (RSTn) marker where one is expected.  Its mission is to
-	find a suitable point for resuming decompression.  For most
-	applications, we recommend that you just use the default resync
-	procedure, jpeg_resync_to_restart().  However, if you are able to back
-	up in the input data stream, or if you have a-priori knowledge about
-	the likely location of restart markers, you may be able to do better.
-	Read the read_restart_marker() and jpeg_resync_to_restart() routines
-	in jdmarker.c if you think you'd like to implement your own resync
-	procedure.
-
-term_source (j_decompress_ptr cinfo)
-	Terminate source --- called by jpeg_finish_decompress() after all
-	data has been read.  Often a no-op.
-
-For both fill_input_buffer() and skip_input_data(), there is no such thing
-as an EOF return.  If the end of the file has been reached, the routine has
-a choice of exiting via ERREXIT() or inserting fake data into the buffer.
-In most cases, generating a warning message and inserting a fake EOI marker
-is the best course of action --- this will allow the decompressor to output
-however much of the image is there.  In pathological cases, the decompressor
-may swallow the EOI and again demand data ... just keep feeding it fake EOIs.
-jdatasrc.c illustrates the recommended error recovery behavior.
-
-term_source() is NOT called by jpeg_abort() or jpeg_destroy().  If you want
-the source manager to be cleaned up during an abort, you must do it yourself.
-
-You will also need code to create a jpeg_source_mgr struct, fill in its method
-pointers, and insert a pointer to the struct into the "src" field of the JPEG
-decompression object.  This can be done in-line in your setup code if you
-like, but it's probably cleaner to provide a separate routine similar to the
-jpeg_stdio_src() or jpeg_mem_src() routines of the supplied source managers.
-
-For more information, consult the memory and stdio source and destination
-managers in jdatasrc.c and jdatadst.c.
-
-
-I/O suspension
---------------
-
-Some applications need to use the JPEG library as an incremental memory-to-
-memory filter: when the compressed data buffer is filled or emptied, they want
-control to return to the outer loop, rather than expecting that the buffer can
-be emptied or reloaded within the data source/destination manager subroutine.
-The library supports this need by providing an "I/O suspension" mode, which we
-describe in this section.
-
-The I/O suspension mode is not a panacea: nothing is guaranteed about the
-maximum amount of time spent in any one call to the library, so it will not
-eliminate response-time problems in single-threaded applications.  If you
-need guaranteed response time, we suggest you "bite the bullet" and implement
-a real multi-tasking capability.
-
-To use I/O suspension, cooperation is needed between the calling application
-and the data source or destination manager; you will always need a custom
-source/destination manager.  (Please read the previous section if you haven't
-already.)  The basic idea is that the empty_output_buffer() or
-fill_input_buffer() routine is a no-op, merely returning FALSE to indicate
-that it has done nothing.  Upon seeing this, the JPEG library suspends
-operation and returns to its caller.  The surrounding application is
-responsible for emptying or refilling the work buffer before calling the
-JPEG library again.
-
-Compression suspension:
-
-For compression suspension, use an empty_output_buffer() routine that returns
-FALSE; typically it will not do anything else.  This will cause the
-compressor to return to the caller of jpeg_write_scanlines(), with the return
-value indicating that not all the supplied scanlines have been accepted.
-The application must make more room in the output buffer, adjust the output
-buffer pointer/count appropriately, and then call jpeg_write_scanlines()
-again, pointing to the first unconsumed scanline.
-
-When forced to suspend, the compressor will backtrack to a convenient stopping
-point (usually the start of the current MCU); it will regenerate some output
-data when restarted.  Therefore, although empty_output_buffer() is only
-called when the buffer is filled, you should NOT write out the entire buffer
-after a suspension.  Write only the data up to the current position of
-next_output_byte/free_in_buffer.  The data beyond that point will be
-regenerated after resumption.
-
-Because of the backtracking behavior, a good-size output buffer is essential
-for efficiency; you don't want the compressor to suspend often.  (In fact, an
-overly small buffer could lead to infinite looping, if a single MCU required
-more data than would fit in the buffer.)  We recommend a buffer of at least
-several Kbytes.  You may want to insert explicit code to ensure that you don't
-call jpeg_write_scanlines() unless there is a reasonable amount of space in
-the output buffer; in other words, flush the buffer before trying to compress
-more data.
-
-The compressor does not allow suspension while it is trying to write JPEG
-markers at the beginning and end of the file.  This means that:
-  * At the beginning of a compression operation, there must be enough free
-    space in the output buffer to hold the header markers (typically 600 or
-    so bytes).  The recommended buffer size is bigger than this anyway, so
-    this is not a problem as long as you start with an empty buffer.  However,
-    this restriction might catch you if you insert large special markers, such
-    as a JFIF thumbnail image, without flushing the buffer afterwards.
-  * When you call jpeg_finish_compress(), there must be enough space in the
-    output buffer to emit any buffered data and the final EOI marker.  In the
-    current implementation, half a dozen bytes should suffice for this, but
-    for safety's sake we recommend ensuring that at least 100 bytes are free
-    before calling jpeg_finish_compress().
-
-A more significant restriction is that jpeg_finish_compress() cannot suspend.
-This means you cannot use suspension with multi-pass operating modes, namely
-Huffman code optimization and multiple-scan output.  Those modes write the
-whole file during jpeg_finish_compress(), which will certainly result in
-buffer overrun.  (Note that this restriction applies only to compression,
-not decompression.  The decompressor supports input suspension in all of its
-operating modes.)
-
-Decompression suspension:
-
-For decompression suspension, use a fill_input_buffer() routine that simply
-returns FALSE (except perhaps during error recovery, as discussed below).
-This will cause the decompressor to return to its caller with an indication
-that suspension has occurred.  This can happen at four places:
-  * jpeg_read_header(): will return JPEG_SUSPENDED.
-  * jpeg_start_decompress(): will return FALSE, rather than its usual TRUE.
-  * jpeg_read_scanlines(): will return the number of scanlines already
-	completed (possibly 0).
-  * jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE.
-The surrounding application must recognize these cases, load more data into
-the input buffer, and repeat the call.  In the case of jpeg_read_scanlines(),
-increment the passed pointers past any scanlines successfully read.
-
-Just as with compression, the decompressor will typically backtrack to a
-convenient restart point before suspending.  When fill_input_buffer() is
-called, next_input_byte/bytes_in_buffer point to the current restart point,
-which is where the decompressor will backtrack to if FALSE is returned.
-The data beyond that position must NOT be discarded if you suspend; it needs
-to be re-read upon resumption.  In most implementations, you'll need to shift
-this data down to the start of your work buffer and then load more data after
-it.  Again, this behavior means that a several-Kbyte work buffer is essential
-for decent performance; furthermore, you should load a reasonable amount of
-new data before resuming decompression.  (If you loaded, say, only one new
-byte each time around, you could waste a LOT of cycles.)
-
-The skip_input_data() source manager routine requires special care in a
-suspension scenario.  This routine is NOT granted the ability to suspend the
-decompressor; it can decrement bytes_in_buffer to zero, but no more.  If the
-requested skip distance exceeds the amount of data currently in the input
-buffer, then skip_input_data() must set bytes_in_buffer to zero and record the
-additional skip distance somewhere else.  The decompressor will immediately
-call fill_input_buffer(), which should return FALSE, which will cause a
-suspension return.  The surrounding application must then arrange to discard
-the recorded number of bytes before it resumes loading the input buffer.
-(Yes, this design is rather baroque, but it avoids complexity in the far more
-common case where a non-suspending source manager is used.)
-
-If the input data has been exhausted, we recommend that you emit a warning
-and insert dummy EOI markers just as a non-suspending data source manager
-would do.  This can be handled either in the surrounding application logic or
-within fill_input_buffer(); the latter is probably more efficient.  If
-fill_input_buffer() knows that no more data is available, it can set the
-pointer/count to point to a dummy EOI marker and then return TRUE just as
-though it had read more data in a non-suspending situation.
-
-The decompressor does not attempt to suspend within standard JPEG markers;
-instead it will backtrack to the start of the marker and reprocess the whole
-marker next time.  Hence the input buffer must be large enough to hold the
-longest standard marker in the file.  Standard JPEG markers should normally
-not exceed a few hundred bytes each (DHT tables are typically the longest).
-We recommend at least a 2K buffer for performance reasons, which is much
-larger than any correct marker is likely to be.  For robustness against
-damaged marker length counts, you may wish to insert a test in your
-application for the case that the input buffer is completely full and yet
-the decoder has suspended without consuming any data --- otherwise, if this
-situation did occur, it would lead to an endless loop.  (The library can't
-provide this test since it has no idea whether "the buffer is full", or
-even whether there is a fixed-size input buffer.)
-
-The input buffer would need to be 64K to allow for arbitrary COM or APPn
-markers, but these are handled specially: they are either saved into allocated
-memory, or skipped over by calling skip_input_data().  In the former case,
-suspension is handled correctly, and in the latter case, the problem of
-buffer overrun is placed on skip_input_data's shoulders, as explained above.
-Note that if you provide your own marker handling routine for large markers,
-you should consider how to deal with buffer overflow.
-
-Multiple-buffer management:
-
-In some applications it is desirable to store the compressed data in a linked
-list of buffer areas, so as to avoid data copying.  This can be handled by
-having empty_output_buffer() or fill_input_buffer() set the pointer and count
-to reference the next available buffer; FALSE is returned only if no more
-buffers are available.  Although seemingly straightforward, there is a
-pitfall in this approach: the backtrack that occurs when FALSE is returned
-could back up into an earlier buffer.  For example, when fill_input_buffer()
-is called, the current pointer & count indicate the backtrack restart point.
-Since fill_input_buffer() will set the pointer and count to refer to a new
-buffer, the restart position must be saved somewhere else.  Suppose a second
-call to fill_input_buffer() occurs in the same library call, and no
-additional input data is available, so fill_input_buffer must return FALSE.
-If the JPEG library has not moved the pointer/count forward in the current
-buffer, then *the correct restart point is the saved position in the prior
-buffer*.  Prior buffers may be discarded only after the library establishes
-a restart point within a later buffer.  Similar remarks apply for output into
-a chain of buffers.
-
-The library will never attempt to backtrack over a skip_input_data() call,
-so any skipped data can be permanently discarded.  You still have to deal
-with the case of skipping not-yet-received data, however.
-
-It's much simpler to use only a single buffer; when fill_input_buffer() is
-called, move any unconsumed data (beyond the current pointer/count) down to
-the beginning of this buffer and then load new data into the remaining buffer
-space.  This approach requires a little more data copying but is far easier
-to get right.
-
-
-Progressive JPEG support
-------------------------
-
-Progressive JPEG rearranges the stored data into a series of scans of
-increasing quality.  In situations where a JPEG file is transmitted across a
-slow communications link, a decoder can generate a low-quality image very
-quickly from the first scan, then gradually improve the displayed quality as
-more scans are received.  The final image after all scans are complete is
-identical to that of a regular (sequential) JPEG file of the same quality
-setting.  Progressive JPEG files are often slightly smaller than equivalent
-sequential JPEG files, but the possibility of incremental display is the main
-reason for using progressive JPEG.
-
-The IJG encoder library generates progressive JPEG files when given a
-suitable "scan script" defining how to divide the data into scans.
-Creation of progressive JPEG files is otherwise transparent to the encoder.
-Progressive JPEG files can also be read transparently by the decoder library.
-If the decoding application simply uses the library as defined above, it
-will receive a final decoded image without any indication that the file was
-progressive.  Of course, this approach does not allow incremental display.
-To perform incremental display, an application needs to use the decoder
-library's "buffered-image" mode, in which it receives a decoded image
-multiple times.
-
-Each displayed scan requires about as much work to decode as a full JPEG
-image of the same size, so the decoder must be fairly fast in relation to the
-data transmission rate in order to make incremental display useful.  However,
-it is possible to skip displaying the image and simply add the incoming bits
-to the decoder's coefficient buffer.  This is fast because only Huffman
-decoding need be done, not IDCT, upsampling, colorspace conversion, etc.
-The IJG decoder library allows the application to switch dynamically between
-displaying the image and simply absorbing the incoming bits.  A properly
-coded application can automatically adapt the number of display passes to
-suit the time available as the image is received.  Also, a final
-higher-quality display cycle can be performed from the buffered data after
-the end of the file is reached.
-
-Progressive compression:
-
-To create a progressive JPEG file (or a multiple-scan sequential JPEG file),
-set the scan_info cinfo field to point to an array of scan descriptors, and
-perform compression as usual.  Instead of constructing your own scan list,
-you can call the jpeg_simple_progression() helper routine to create a
-recommended progression sequence; this method should be used by all
-applications that don't want to get involved in the nitty-gritty of
-progressive scan sequence design.  (If you want to provide user control of
-scan sequences, you may wish to borrow the scan script reading code found
-in rdswitch.c, so that you can read scan script files just like cjpeg's.)
-When scan_info is not NULL, the compression library will store DCT'd data
-into a buffer array as jpeg_write_scanlines() is called, and will emit all
-the requested scans during jpeg_finish_compress().  This implies that
-multiple-scan output cannot be created with a suspending data destination
-manager, since jpeg_finish_compress() does not support suspension.  We
-should also note that the compressor currently forces Huffman optimization
-mode when creating a progressive JPEG file, because the default Huffman
-tables are unsuitable for progressive files.
-
-Progressive decompression:
-
-When buffered-image mode is not used, the decoder library will read all of
-a multi-scan file during jpeg_start_decompress(), so that it can provide a
-final decoded image.  (Here "multi-scan" means either progressive or
-multi-scan sequential.)  This makes multi-scan files transparent to the
-decoding application.  However, existing applications that used suspending
-input with version 5 of the IJG library will need to be modified to check
-for a suspension return from jpeg_start_decompress().
-
-To perform incremental display, an application must use the library's
-buffered-image mode.  This is described in the next section.
-
-
-Buffered-image mode
--------------------
-
-In buffered-image mode, the library stores the partially decoded image in a
-coefficient buffer, from which it can be read out as many times as desired.
-This mode is typically used for incremental display of progressive JPEG files,
-but it can be used with any JPEG file.  Each scan of a progressive JPEG file
-adds more data (more detail) to the buffered image.  The application can
-display in lockstep with the source file (one display pass per input scan),
-or it can allow input processing to outrun display processing.  By making
-input and display processing run independently, it is possible for the
-application to adapt progressive display to a wide range of data transmission
-rates.
-
-The basic control flow for buffered-image decoding is
-
-	jpeg_create_decompress()
-	set data source
-	jpeg_read_header()
-	set overall decompression parameters
-	cinfo.buffered_image = TRUE;	/* select buffered-image mode */
-	jpeg_start_decompress()
-	for (each output pass) {
-	    adjust output decompression parameters if required
-	    jpeg_start_output()		/* start a new output pass */
-	    for (all scanlines in image) {
-	        jpeg_read_scanlines()
-	        display scanlines
-	    }
-	    jpeg_finish_output()	/* terminate output pass */
-	}
-	jpeg_finish_decompress()
-	jpeg_destroy_decompress()
-
-This differs from ordinary unbuffered decoding in that there is an additional
-level of looping.  The application can choose how many output passes to make
-and how to display each pass.
-
-The simplest approach to displaying progressive images is to do one display
-pass for each scan appearing in the input file.  In this case the outer loop
-condition is typically
-	while (! jpeg_input_complete(&cinfo))
-and the start-output call should read
-	jpeg_start_output(&cinfo, cinfo.input_scan_number);
-The second parameter to jpeg_start_output() indicates which scan of the input
-file is to be displayed; the scans are numbered starting at 1 for this
-purpose.  (You can use a loop counter starting at 1 if you like, but using
-the library's input scan counter is easier.)  The library automatically reads
-data as necessary to complete each requested scan, and jpeg_finish_output()
-advances to the next scan or end-of-image marker (hence input_scan_number
-will be incremented by the time control arrives back at jpeg_start_output()).
-With this technique, data is read from the input file only as needed, and
-input and output processing run in lockstep.
-
-After reading the final scan and reaching the end of the input file, the
-buffered image remains available; it can be read additional times by
-repeating the jpeg_start_output()/jpeg_read_scanlines()/jpeg_finish_output()
-sequence.  For example, a useful technique is to use fast one-pass color
-quantization for display passes made while the image is arriving, followed by
-a final display pass using two-pass quantization for highest quality.  This
-is done by changing the library parameters before the final output pass.
-Changing parameters between passes is discussed in detail below.
-
-In general the last scan of a progressive file cannot be recognized as such
-until after it is read, so a post-input display pass is the best approach if
-you want special processing in the final pass.
-
-When done with the image, be sure to call jpeg_finish_decompress() to release
-the buffered image (or just use jpeg_destroy_decompress()).
-
-If input data arrives faster than it can be displayed, the application can
-cause the library to decode input data in advance of what's needed to produce
-output.  This is done by calling the routine jpeg_consume_input().
-The return value is one of the following:
-	JPEG_REACHED_SOS:    reached an SOS marker (the start of a new scan)
-	JPEG_REACHED_EOI:    reached the EOI marker (end of image)
-	JPEG_ROW_COMPLETED:  completed reading one MCU row of compressed data
-	JPEG_SCAN_COMPLETED: completed reading last MCU row of current scan
-	JPEG_SUSPENDED:      suspended before completing any of the above
-(JPEG_SUSPENDED can occur only if a suspending data source is used.)  This
-routine can be called at any time after initializing the JPEG object.  It
-reads some additional data and returns when one of the indicated significant
-events occurs.  (If called after the EOI marker is reached, it will
-immediately return JPEG_REACHED_EOI without attempting to read more data.)
-
-The library's output processing will automatically call jpeg_consume_input()
-whenever the output processing overtakes the input; thus, simple lockstep
-display requires no direct calls to jpeg_consume_input().  But by adding
-calls to jpeg_consume_input(), you can absorb data in advance of what is
-being displayed.  This has two benefits:
-  * You can limit buildup of unprocessed data in your input buffer.
-  * You can eliminate extra display passes by paying attention to the
-    state of the library's input processing.
-
-The first of these benefits only requires interspersing calls to
-jpeg_consume_input() with your display operations and any other processing
-you may be doing.  To avoid wasting cycles due to backtracking, it's best to
-call jpeg_consume_input() only after a hundred or so new bytes have arrived.
-This is discussed further under "I/O suspension", above.  (Note: the JPEG
-library currently is not thread-safe.  You must not call jpeg_consume_input()
-from one thread of control if a different library routine is working on the
-same JPEG object in another thread.)
-
-When input arrives fast enough that more than one new scan is available
-before you start a new output pass, you may as well skip the output pass
-corresponding to the completed scan.  This occurs for free if you pass
-cinfo.input_scan_number as the target scan number to jpeg_start_output().
-The input_scan_number field is simply the index of the scan currently being
-consumed by the input processor.  You can ensure that this is up-to-date by
-emptying the input buffer just before calling jpeg_start_output(): call
-jpeg_consume_input() repeatedly until it returns JPEG_SUSPENDED or
-JPEG_REACHED_EOI.
-
-The target scan number passed to jpeg_start_output() is saved in the
-cinfo.output_scan_number field.  The library's output processing calls
-jpeg_consume_input() whenever the current input scan number and row within
-that scan is less than or equal to the current output scan number and row.
-Thus, input processing can "get ahead" of the output processing but is not
-allowed to "fall behind".  You can achieve several different effects by
-manipulating this interlock rule.  For example, if you pass a target scan
-number greater than the current input scan number, the output processor will
-wait until that scan starts to arrive before producing any output.  (To avoid
-an infinite loop, the target scan number is automatically reset to the last
-scan number when the end of image is reached.  Thus, if you specify a large
-target scan number, the library will just absorb the entire input file and
-then perform an output pass.  This is effectively the same as what
-jpeg_start_decompress() does when you don't select buffered-image mode.)
-When you pass a target scan number equal to the current input scan number,
-the image is displayed no faster than the current input scan arrives.  The
-final possibility is to pass a target scan number less than the current input
-scan number; this disables the input/output interlock and causes the output
-processor to simply display whatever it finds in the image buffer, without
-waiting for input.  (However, the library will not accept a target scan
-number less than one, so you can't avoid waiting for the first scan.)
-
-When data is arriving faster than the output display processing can advance
-through the image, jpeg_consume_input() will store data into the buffered
-image beyond the point at which the output processing is reading data out
-again.  If the input arrives fast enough, it may "wrap around" the buffer to
-the point where the input is more than one whole scan ahead of the output.
-If the output processing simply proceeds through its display pass without
-paying attention to the input, the effect seen on-screen is that the lower
-part of the image is one or more scans better in quality than the upper part.
-Then, when the next output scan is started, you have a choice of what target
-scan number to use.  The recommended choice is to use the current input scan
-number at that time, which implies that you've skipped the output scans
-corresponding to the input scans that were completed while you processed the
-previous output scan.  In this way, the decoder automatically adapts its
-speed to the arriving data, by skipping output scans as necessary to keep up
-with the arriving data.
-
-When using this strategy, you'll want to be sure that you perform a final
-output pass after receiving all the data; otherwise your last display may not
-be full quality across the whole screen.  So the right outer loop logic is
-something like this:
-	do {
-	    absorb any waiting input by calling jpeg_consume_input()
-	    final_pass = jpeg_input_complete(&cinfo);
-	    adjust output decompression parameters if required
-	    jpeg_start_output(&cinfo, cinfo.input_scan_number);
-	    ...
-	    jpeg_finish_output()
-	} while (! final_pass);
-rather than quitting as soon as jpeg_input_complete() returns TRUE.  This
-arrangement makes it simple to use higher-quality decoding parameters
-for the final pass.  But if you don't want to use special parameters for
-the final pass, the right loop logic is like this:
-	for (;;) {
-	    absorb any waiting input by calling jpeg_consume_input()
-	    jpeg_start_output(&cinfo, cinfo.input_scan_number);
-	    ...
-	    jpeg_finish_output()
-	    if (jpeg_input_complete(&cinfo) &&
-	        cinfo.input_scan_number == cinfo.output_scan_number)
-	      break;
-	}
-In this case you don't need to know in advance whether an output pass is to
-be the last one, so it's not necessary to have reached EOF before starting
-the final output pass; rather, what you want to test is whether the output
-pass was performed in sync with the final input scan.  This form of the loop
-will avoid an extra output pass whenever the decoder is able (or nearly able)
-to keep up with the incoming data.
-
-When the data transmission speed is high, you might begin a display pass,
-then find that much or all of the file has arrived before you can complete
-the pass.  (You can detect this by noting the JPEG_REACHED_EOI return code
-from jpeg_consume_input(), or equivalently by testing jpeg_input_complete().)
-In this situation you may wish to abort the current display pass and start a
-new one using the newly arrived information.  To do so, just call
-jpeg_finish_output() and then start a new pass with jpeg_start_output().
-
-A variant strategy is to abort and restart display if more than one complete
-scan arrives during an output pass; this can be detected by noting
-JPEG_REACHED_SOS returns and/or examining cinfo.input_scan_number.  This
-idea should be employed with caution, however, since the display process
-might never get to the bottom of the image before being aborted, resulting
-in the lower part of the screen being several passes worse than the upper.
-In most cases it's probably best to abort an output pass only if the whole
-file has arrived and you want to begin the final output pass immediately.
-
-When receiving data across a communication link, we recommend always using
-the current input scan number for the output target scan number; if a
-higher-quality final pass is to be done, it should be started (aborting any
-incomplete output pass) as soon as the end of file is received.  However,
-many other strategies are possible.  For example, the application can examine
-the parameters of the current input scan and decide whether to display it or
-not.  If the scan contains only chroma data, one might choose not to use it
-as the target scan, expecting that the scan will be small and will arrive
-quickly.  To skip to the next scan, call jpeg_consume_input() until it
-returns JPEG_REACHED_SOS or JPEG_REACHED_EOI.  Or just use the next higher
-number as the target scan for jpeg_start_output(); but that method doesn't
-let you inspect the next scan's parameters before deciding to display it.
-
-
-In buffered-image mode, jpeg_start_decompress() never performs input and
-thus never suspends.  An application that uses input suspension with
-buffered-image mode must be prepared for suspension returns from these
-routines:
-* jpeg_start_output() performs input only if you request 2-pass quantization
-  and the target scan isn't fully read yet.  (This is discussed below.)
-* jpeg_read_scanlines(), as always, returns the number of scanlines that it
-  was able to produce before suspending.
-* jpeg_finish_output() will read any markers following the target scan,
-  up to the end of the file or the SOS marker that begins another scan.
-  (But it reads no input if jpeg_consume_input() has already reached the
-  end of the file or a SOS marker beyond the target output scan.)
-* jpeg_finish_decompress() will read until the end of file, and thus can
-  suspend if the end hasn't already been reached (as can be tested by
-  calling jpeg_input_complete()).
-jpeg_start_output(), jpeg_finish_output(), and jpeg_finish_decompress()
-all return TRUE if they completed their tasks, FALSE if they had to suspend.
-In the event of a FALSE return, the application must load more input data
-and repeat the call.  Applications that use non-suspending data sources need
-not check the return values of these three routines.
-
-
-It is possible to change decoding parameters between output passes in the
-buffered-image mode.  The decoder library currently supports only very
-limited changes of parameters.  ONLY THE FOLLOWING parameter changes are
-allowed after jpeg_start_decompress() is called:
-* dct_method can be changed before each call to jpeg_start_output().
-  For example, one could use a fast DCT method for early scans, changing
-  to a higher quality method for the final scan.
-* dither_mode can be changed before each call to jpeg_start_output();
-  of course this has no impact if not using color quantization.  Typically
-  one would use ordered dither for initial passes, then switch to
-  Floyd-Steinberg dither for the final pass.  Caution: changing dither mode
-  can cause more memory to be allocated by the library.  Although the amount
-  of memory involved is not large (a scanline or so), it may cause the
-  initial max_memory_to_use specification to be exceeded, which in the worst
-  case would result in an out-of-memory failure.
-* do_block_smoothing can be changed before each call to jpeg_start_output().
-  This setting is relevant only when decoding a progressive JPEG image.
-  During the first DC-only scan, block smoothing provides a very "fuzzy" look
-  instead of the very "blocky" look seen without it; which is better seems a
-  matter of personal taste.  But block smoothing is nearly always a win
-  during later stages, especially when decoding a successive-approximation
-  image: smoothing helps to hide the slight blockiness that otherwise shows
-  up on smooth gradients until the lowest coefficient bits are sent.
-* Color quantization mode can be changed under the rules described below.
-  You *cannot* change between full-color and quantized output (because that
-  would alter the required I/O buffer sizes), but you can change which
-  quantization method is used.
-
-When generating color-quantized output, changing quantization method is a
-very useful way of switching between high-speed and high-quality display.
-The library allows you to change among its three quantization methods:
-1. Single-pass quantization to a fixed color cube.
-   Selected by cinfo.two_pass_quantize = FALSE and cinfo.colormap = NULL.
-2. Single-pass quantization to an application-supplied colormap.
-   Selected by setting cinfo.colormap to point to the colormap (the value of
-   two_pass_quantize is ignored); also set cinfo.actual_number_of_colors.
-3. Two-pass quantization to a colormap chosen specifically for the image.
-   Selected by cinfo.two_pass_quantize = TRUE and cinfo.colormap = NULL.
-   (This is the default setting selected by jpeg_read_header, but it is
-   probably NOT what you want for the first pass of progressive display!)
-These methods offer successively better quality and lesser speed.  However,
-only the first method is available for quantizing in non-RGB color spaces.
-
-IMPORTANT: because the different quantizer methods have very different
-working-storage requirements, the library requires you to indicate which
-one(s) you intend to use before you call jpeg_start_decompress().  (If we did
-not require this, the max_memory_to_use setting would be a complete fiction.)
-You do this by setting one or more of these three cinfo fields to TRUE:
-	enable_1pass_quant		Fixed color cube colormap
-	enable_external_quant		Externally-supplied colormap
-	enable_2pass_quant		Two-pass custom colormap
-All three are initialized FALSE by jpeg_read_header().  But
-jpeg_start_decompress() automatically sets TRUE the one selected by the
-current two_pass_quantize and colormap settings, so you only need to set the
-enable flags for any other quantization methods you plan to change to later.
-
-After setting the enable flags correctly at jpeg_start_decompress() time, you
-can change to any enabled quantization method by setting two_pass_quantize
-and colormap properly just before calling jpeg_start_output().  The following
-special rules apply:
-1. You must explicitly set cinfo.colormap to NULL when switching to 1-pass
-   or 2-pass mode from a different mode, or when you want the 2-pass
-   quantizer to be re-run to generate a new colormap.
-2. To switch to an external colormap, or to change to a different external
-   colormap than was used on the prior pass, you must call
-   jpeg_new_colormap() after setting cinfo.colormap.
-NOTE: if you want to use the same colormap as was used in the prior pass,
-you should not do either of these things.  This will save some nontrivial
-switchover costs.
-(These requirements exist because cinfo.colormap will always be non-NULL
-after completing a prior output pass, since both the 1-pass and 2-pass
-quantizers set it to point to their output colormaps.  Thus you have to
-do one of these two things to notify the library that something has changed.
-Yup, it's a bit klugy, but it's necessary to do it this way for backwards
-compatibility.)
-
-Note that in buffered-image mode, the library generates any requested colormap
-during jpeg_start_output(), not during jpeg_start_decompress().
-
-When using two-pass quantization, jpeg_start_output() makes a pass over the
-buffered image to determine the optimum color map; it therefore may take a
-significant amount of time, whereas ordinarily it does little work.  The
-progress monitor hook is called during this pass, if defined.  It is also
-important to realize that if the specified target scan number is greater than
-or equal to the current input scan number, jpeg_start_output() will attempt
-to consume input as it makes this pass.  If you use a suspending data source,
-you need to check for a FALSE return from jpeg_start_output() under these
-conditions.  The combination of 2-pass quantization and a not-yet-fully-read
-target scan is the only case in which jpeg_start_output() will consume input.
-
-
-Application authors who support buffered-image mode may be tempted to use it
-for all JPEG images, even single-scan ones.  This will work, but it is
-inefficient: there is no need to create an image-sized coefficient buffer for
-single-scan images.  Requesting buffered-image mode for such an image wastes
-memory.  Worse, it can cost time on large images, since the buffered data has
-to be swapped out or written to a temporary file.  If you are concerned about
-maximum performance on baseline JPEG files, you should use buffered-image
-mode only when the incoming file actually has multiple scans.  This can be
-tested by calling jpeg_has_multiple_scans(), which will return a correct
-result at any time after jpeg_read_header() completes.
-
-It is also worth noting that when you use jpeg_consume_input() to let input
-processing get ahead of output processing, the resulting pattern of access to
-the coefficient buffer is quite nonsequential.  It's best to use the memory
-manager jmemnobs.c if you can (ie, if you have enough real or virtual main
-memory).  If not, at least make sure that max_memory_to_use is set as high as
-possible.  If the JPEG memory manager has to use a temporary file, you will
-probably see a lot of disk traffic and poor performance.  (This could be
-improved with additional work on the memory manager, but we haven't gotten
-around to it yet.)
-
-In some applications it may be convenient to use jpeg_consume_input() for all
-input processing, including reading the initial markers; that is, you may
-wish to call jpeg_consume_input() instead of jpeg_read_header() during
-startup.  This works, but note that you must check for JPEG_REACHED_SOS and
-JPEG_REACHED_EOI return codes as the equivalent of jpeg_read_header's codes.
-Once the first SOS marker has been reached, you must call
-jpeg_start_decompress() before jpeg_consume_input() will consume more input;
-it'll just keep returning JPEG_REACHED_SOS until you do.  If you read a
-tables-only file this way, jpeg_consume_input() will return JPEG_REACHED_EOI
-without ever returning JPEG_REACHED_SOS; be sure to check for this case.
-If this happens, the decompressor will not read any more input until you call
-jpeg_abort() to reset it.  It is OK to call jpeg_consume_input() even when not
-using buffered-image mode, but in that case it's basically a no-op after the
-initial markers have been read: it will just return JPEG_SUSPENDED.
-
-
-Abbreviated datastreams and multiple images
--------------------------------------------
-
-A JPEG compression or decompression object can be reused to process multiple
-images.  This saves a small amount of time per image by eliminating the
-"create" and "destroy" operations, but that isn't the real purpose of the
-feature.  Rather, reuse of an object provides support for abbreviated JPEG
-datastreams.  Object reuse can also simplify processing a series of images in
-a single input or output file.  This section explains these features.
-
-A JPEG file normally contains several hundred bytes worth of quantization
-and Huffman tables.  In a situation where many images will be stored or
-transmitted with identical tables, this may represent an annoying overhead.
-The JPEG standard therefore permits tables to be omitted.  The standard
-defines three classes of JPEG datastreams:
-  * "Interchange" datastreams contain an image and all tables needed to decode
-     the image.  These are the usual kind of JPEG file.
-  * "Abbreviated image" datastreams contain an image, but are missing some or
-    all of the tables needed to decode that image.
-  * "Abbreviated table specification" (henceforth "tables-only") datastreams
-    contain only table specifications.
-To decode an abbreviated image, it is necessary to load the missing table(s)
-into the decoder beforehand.  This can be accomplished by reading a separate
-tables-only file.  A variant scheme uses a series of images in which the first
-image is an interchange (complete) datastream, while subsequent ones are
-abbreviated and rely on the tables loaded by the first image.  It is assumed
-that once the decoder has read a table, it will remember that table until a
-new definition for the same table number is encountered.
-
-It is the application designer's responsibility to figure out how to associate
-the correct tables with an abbreviated image.  While abbreviated datastreams
-can be useful in a closed environment, their use is strongly discouraged in
-any situation where data exchange with other applications might be needed.
-Caveat designer.
-
-The JPEG library provides support for reading and writing any combination of
-tables-only datastreams and abbreviated images.  In both compression and
-decompression objects, a quantization or Huffman table will be retained for
-the lifetime of the object, unless it is overwritten by a new table definition.
-
-
-To create abbreviated image datastreams, it is only necessary to tell the
-compressor not to emit some or all of the tables it is using.  Each
-quantization and Huffman table struct contains a boolean field "sent_table",
-which normally is initialized to FALSE.  For each table used by the image, the
-header-writing process emits the table and sets sent_table = TRUE unless it is
-already TRUE.  (In normal usage, this prevents outputting the same table
-definition multiple times, as would otherwise occur because the chroma
-components typically share tables.)  Thus, setting this field to TRUE before
-calling jpeg_start_compress() will prevent the table from being written at
-all.
-
-If you want to create a "pure" abbreviated image file containing no tables,
-just call "jpeg_suppress_tables(&cinfo, TRUE)" after constructing all the
-tables.  If you want to emit some but not all tables, you'll need to set the
-individual sent_table fields directly.
-
-To create an abbreviated image, you must also call jpeg_start_compress()
-with a second parameter of FALSE, not TRUE.  Otherwise jpeg_start_compress()
-will force all the sent_table fields to FALSE.  (This is a safety feature to
-prevent abbreviated images from being created accidentally.)
-
-To create a tables-only file, perform the same parameter setup that you
-normally would, but instead of calling jpeg_start_compress() and so on, call
-jpeg_write_tables(&cinfo).  This will write an abbreviated datastream
-containing only SOI, DQT and/or DHT markers, and EOI.  All the quantization
-and Huffman tables that are currently defined in the compression object will
-be emitted unless their sent_tables flag is already TRUE, and then all the
-sent_tables flags will be set TRUE.
-
-A sure-fire way to create matching tables-only and abbreviated image files
-is to proceed as follows:
-
-	create JPEG compression object
-	set JPEG parameters
-	set destination to tables-only file
-	jpeg_write_tables(&cinfo);
-	set destination to image file
-	jpeg_start_compress(&cinfo, FALSE);
-	write data...
-	jpeg_finish_compress(&cinfo);
-
-Since the JPEG parameters are not altered between writing the table file and
-the abbreviated image file, the same tables are sure to be used.  Of course,
-you can repeat the jpeg_start_compress() ... jpeg_finish_compress() sequence
-many times to produce many abbreviated image files matching the table file.
-
-You cannot suppress output of the computed Huffman tables when Huffman
-optimization is selected.  (If you could, there'd be no way to decode the
-image...)  Generally, you don't want to set optimize_coding = TRUE when
-you are trying to produce abbreviated files.
-
-In some cases you might want to compress an image using tables which are
-not stored in the application, but are defined in an interchange or
-tables-only file readable by the application.  This can be done by setting up
-a JPEG decompression object to read the specification file, then copying the
-tables into your compression object.  See jpeg_copy_critical_parameters()
-for an example of copying quantization tables.
-
-
-To read abbreviated image files, you simply need to load the proper tables
-into the decompression object before trying to read the abbreviated image.
-If the proper tables are stored in the application program, you can just
-allocate the table structs and fill in their contents directly.  For example,
-to load a fixed quantization table into table slot "n":
-
-    if (cinfo.quant_tbl_ptrs[n] == NULL)
-      cinfo.quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) &cinfo);
-    quant_ptr = cinfo.quant_tbl_ptrs[n];	/* quant_ptr is JQUANT_TBL* */
-    for (i = 0; i < 64; i++) {
-      /* Qtable[] is desired quantization table, in natural array order */
-      quant_ptr->quantval[i] = Qtable[i];
-    }
-
-Code to load a fixed Huffman table is typically (for AC table "n"):
-
-    if (cinfo.ac_huff_tbl_ptrs[n] == NULL)
-      cinfo.ac_huff_tbl_ptrs[n] = jpeg_alloc_huff_table((j_common_ptr) &cinfo);
-    huff_ptr = cinfo.ac_huff_tbl_ptrs[n];	/* huff_ptr is JHUFF_TBL* */
-    for (i = 1; i <= 16; i++) {
-      /* counts[i] is number of Huffman codes of length i bits, i=1..16 */
-      huff_ptr->bits[i] = counts[i];
-    }
-    for (i = 0; i < 256; i++) {
-      /* symbols[] is the list of Huffman symbols, in code-length order */
-      huff_ptr->huffval[i] = symbols[i];
-    }
-
-(Note that trying to set cinfo.quant_tbl_ptrs[n] to point directly at a
-constant JQUANT_TBL object is not safe.  If the incoming file happened to
-contain a quantization table definition, your master table would get
-overwritten!  Instead allocate a working table copy and copy the master table
-into it, as illustrated above.  Ditto for Huffman tables, of course.)
-
-You might want to read the tables from a tables-only file, rather than
-hard-wiring them into your application.  The jpeg_read_header() call is
-sufficient to read a tables-only file.  You must pass a second parameter of
-FALSE to indicate that you do not require an image to be present.  Thus, the
-typical scenario is
-
-	create JPEG decompression object
-	set source to tables-only file
-	jpeg_read_header(&cinfo, FALSE);
-	set source to abbreviated image file
-	jpeg_read_header(&cinfo, TRUE);
-	set decompression parameters
-	jpeg_start_decompress(&cinfo);
-	read data...
-	jpeg_finish_decompress(&cinfo);
-
-In some cases, you may want to read a file without knowing whether it contains
-an image or just tables.  In that case, pass FALSE and check the return value
-from jpeg_read_header(): it will be JPEG_HEADER_OK if an image was found,
-JPEG_HEADER_TABLES_ONLY if only tables were found.  (A third return value,
-JPEG_SUSPENDED, is possible when using a suspending data source manager.)
-Note that jpeg_read_header() will not complain if you read an abbreviated
-image for which you haven't loaded the missing tables; the missing-table check
-occurs later, in jpeg_start_decompress().
-
-
-It is possible to read a series of images from a single source file by
-repeating the jpeg_read_header() ... jpeg_finish_decompress() sequence,
-without releasing/recreating the JPEG object or the data source module.
-(If you did reinitialize, any partial bufferload left in the data source
-buffer at the end of one image would be discarded, causing you to lose the
-start of the next image.)  When you use this method, stored tables are
-automatically carried forward, so some of the images can be abbreviated images
-that depend on tables from earlier images.
-
-If you intend to write a series of images into a single destination file,
-you might want to make a specialized data destination module that doesn't
-flush the output buffer at term_destination() time.  This would speed things
-up by some trifling amount.  Of course, you'd need to remember to flush the
-buffer after the last image.  You can make the later images be abbreviated
-ones by passing FALSE to jpeg_start_compress().
-
-
-Special markers
----------------
-
-Some applications may need to insert or extract special data in the JPEG
-datastream.  The JPEG standard provides marker types "COM" (comment) and
-"APP0" through "APP15" (application) to hold application-specific data.
-Unfortunately, the use of these markers is not specified by the standard.
-COM markers are fairly widely used to hold user-supplied text.  The JFIF file
-format spec uses APP0 markers with specified initial strings to hold certain
-data.  Adobe applications use APP14 markers beginning with the string "Adobe"
-for miscellaneous data.  Other APPn markers are rarely seen, but might
-contain almost anything.
-
-If you wish to store user-supplied text, we recommend you use COM markers
-and place readable 7-bit ASCII text in them.  Newline conventions are not
-standardized --- expect to find LF (Unix style), CR/LF (DOS style), or CR
-(Mac style).  A robust COM reader should be able to cope with random binary
-garbage, including nulls, since some applications generate COM markers
-containing non-ASCII junk.  (But yours should not be one of them.)
-
-For program-supplied data, use an APPn marker, and be sure to begin it with an
-identifying string so that you can tell whether the marker is actually yours.
-It's probably best to avoid using APP0 or APP14 for any private markers.
-(NOTE: the upcoming SPIFF standard will use APP8 markers; we recommend you
-not use APP8 markers for any private purposes, either.)
-
-Keep in mind that at most 65533 bytes can be put into one marker, but you
-can have as many markers as you like.
-
-By default, the IJG compression library will write a JFIF APP0 marker if the
-selected JPEG colorspace is grayscale or YCbCr, or an Adobe APP14 marker if
-the selected colorspace is RGB, CMYK, or YCCK.  You can disable this, but
-we don't recommend it.  The decompression library will recognize JFIF and
-Adobe markers and will set the JPEG colorspace properly when one is found.
-
-
-You can write special markers immediately following the datastream header by
-calling jpeg_write_marker() after jpeg_start_compress() and before the first
-call to jpeg_write_scanlines().  When you do this, the markers appear after
-the SOI and the JFIF APP0 and Adobe APP14 markers (if written), but before
-all else.  Specify the marker type parameter as "JPEG_COM" for COM or
-"JPEG_APP0 + n" for APPn.  (Actually, jpeg_write_marker will let you write
-any marker type, but we don't recommend writing any other kinds of marker.)
-For example, to write a user comment string pointed to by comment_text:
-	jpeg_write_marker(cinfo, JPEG_COM, comment_text, strlen(comment_text));
-
-If it's not convenient to store all the marker data in memory at once,
-you can instead call jpeg_write_m_header() followed by multiple calls to
-jpeg_write_m_byte().  If you do it this way, it's your responsibility to
-call jpeg_write_m_byte() exactly the number of times given in the length
-parameter to jpeg_write_m_header().  (This method lets you empty the
-output buffer partway through a marker, which might be important when
-using a suspending data destination module.  In any case, if you are using
-a suspending destination, you should flush its buffer after inserting
-any special markers.  See "I/O suspension".)
-
-Or, if you prefer to synthesize the marker byte sequence yourself,
-you can just cram it straight into the data destination module.
-
-If you are writing JFIF 1.02 extension markers (thumbnail images), don't
-forget to set cinfo.JFIF_minor_version = 2 so that the encoder will write the
-correct JFIF version number in the JFIF header marker.  The library's default
-is to write version 1.01, but that's wrong if you insert any 1.02 extension
-markers.  (We could probably get away with just defaulting to 1.02, but there
-used to be broken decoders that would complain about unknown minor version
-numbers.  To reduce compatibility risks it's safest not to write 1.02 unless
-you are actually using 1.02 extensions.)
-
-
-When reading, two methods of handling special markers are available:
-1. You can ask the library to save the contents of COM and/or APPn markers
-into memory, and then examine them at your leisure afterwards.
-2. You can supply your own routine to process COM and/or APPn markers
-on-the-fly as they are read.
-The first method is simpler to use, especially if you are using a suspending
-data source; writing a marker processor that copes with input suspension is
-not easy (consider what happens if the marker is longer than your available
-input buffer).  However, the second method conserves memory since the marker
-data need not be kept around after it's been processed.
-
-For either method, you'd normally set up marker handling after creating a
-decompression object and before calling jpeg_read_header(), because the
-markers of interest will typically be near the head of the file and so will
-be scanned by jpeg_read_header.  Once you've established a marker handling
-method, it will be used for the life of that decompression object
-(potentially many datastreams), unless you change it.  Marker handling is
-determined separately for COM markers and for each APPn marker code.
-
-
-To save the contents of special markers in memory, call
-	jpeg_save_markers(cinfo, marker_code, length_limit)
-where marker_code is the marker type to save, JPEG_COM or JPEG_APP0+n.
-(To arrange to save all the special marker types, you need to call this
-routine 17 times, for COM and APP0-APP15.)  If the incoming marker is longer
-than length_limit data bytes, only length_limit bytes will be saved; this
-parameter allows you to avoid chewing up memory when you only need to see the
-first few bytes of a potentially large marker.  If you want to save all the
-data, set length_limit to 0xFFFF; that is enough since marker lengths are only
-16 bits.  As a special case, setting length_limit to 0 prevents that marker
-type from being saved at all.  (That is the default behavior, in fact.)
-
-After jpeg_read_header() completes, you can examine the special markers by
-following the cinfo->marker_list pointer chain.  All the special markers in
-the file appear in this list, in order of their occurrence in the file (but
-omitting any markers of types you didn't ask for).  Both the original data
-length and the saved data length are recorded for each list entry; the latter
-will not exceed length_limit for the particular marker type.  Note that these
-lengths exclude the marker length word, whereas the stored representation
-within the JPEG file includes it.  (Hence the maximum data length is really
-only 65533.)
-
-It is possible that additional special markers appear in the file beyond the
-SOS marker at which jpeg_read_header stops; if so, the marker list will be
-extended during reading of the rest of the file.  This is not expected to be
-common, however.  If you are short on memory you may want to reset the length
-limit to zero for all marker types after finishing jpeg_read_header, to
-ensure that the max_memory_to_use setting cannot be exceeded due to addition
-of later markers.
-
-The marker list remains stored until you call jpeg_finish_decompress or
-jpeg_abort, at which point the memory is freed and the list is set to empty.
-(jpeg_destroy also releases the storage, of course.)
-
-Note that the library is internally interested in APP0 and APP14 markers;
-if you try to set a small nonzero length limit on these types, the library
-will silently force the length up to the minimum it wants.  (But you can set
-a zero length limit to prevent them from being saved at all.)  Also, in a
-16-bit environment, the maximum length limit may be constrained to less than
-65533 by malloc() limitations.  It is therefore best not to assume that the
-effective length limit is exactly what you set it to be.
-
-
-If you want to supply your own marker-reading routine, you do it by calling
-jpeg_set_marker_processor().  A marker processor routine must have the
-signature
-	boolean jpeg_marker_parser_method (j_decompress_ptr cinfo)
-Although the marker code is not explicitly passed, the routine can find it
-in cinfo->unread_marker.  At the time of call, the marker proper has been
-read from the data source module.  The processor routine is responsible for
-reading the marker length word and the remaining parameter bytes, if any.
-Return TRUE to indicate success.  (FALSE should be returned only if you are
-using a suspending data source and it tells you to suspend.  See the standard
-marker processors in jdmarker.c for appropriate coding methods if you need to
-use a suspending data source.)
-
-If you override the default APP0 or APP14 processors, it is up to you to
-recognize JFIF and Adobe markers if you want colorspace recognition to occur
-properly.  We recommend copying and extending the default processors if you
-want to do that.  (A better idea is to save these marker types for later
-examination by calling jpeg_save_markers(); that method doesn't interfere
-with the library's own processing of these markers.)
-
-jpeg_set_marker_processor() and jpeg_save_markers() are mutually exclusive
---- if you call one it overrides any previous call to the other, for the
-particular marker type specified.
-
-A simple example of an external COM processor can be found in djpeg.c.
-Also, see jpegtran.c for an example of using jpeg_save_markers.
-
-
-Raw (downsampled) image data
-----------------------------
-
-Some applications need to supply already-downsampled image data to the JPEG
-compressor, or to receive raw downsampled data from the decompressor.  The
-library supports this requirement by allowing the application to write or
-read raw data, bypassing the normal preprocessing or postprocessing steps.
-The interface is different from the standard one and is somewhat harder to
-use.  If your interest is merely in bypassing color conversion, we recommend
-that you use the standard interface and simply set jpeg_color_space =
-in_color_space (or jpeg_color_space = out_color_space for decompression).
-The mechanism described in this section is necessary only to supply or
-receive downsampled image data, in which not all components have the same
-dimensions.
-
-
-To compress raw data, you must supply the data in the colorspace to be used
-in the JPEG file (please read the earlier section on Special color spaces)
-and downsampled to the sampling factors specified in the JPEG parameters.
-You must supply the data in the format used internally by the JPEG library,
-namely a JSAMPIMAGE array.  This is an array of pointers to two-dimensional
-arrays, each of type JSAMPARRAY.  Each 2-D array holds the values for one
-color component.  This structure is necessary since the components are of
-different sizes.  If the image dimensions are not a multiple of the MCU size,
-you must also pad the data correctly (usually, this is done by replicating
-the last column and/or row).  The data must be padded to a multiple of a DCT
-block in each component: that is, each downsampled row must contain a
-multiple of block_size valid samples, and there must be a multiple of
-block_size sample rows for each component.  (For applications such as
-conversion of digital TV images, the standard image size is usually a
-multiple of the DCT block size, so that no padding need actually be done.)
-
-The procedure for compression of raw data is basically the same as normal
-compression, except that you call jpeg_write_raw_data() in place of
-jpeg_write_scanlines().  Before calling jpeg_start_compress(), you must do
-the following:
-  * Set cinfo->raw_data_in to TRUE.  (It is set FALSE by jpeg_set_defaults().)
-    This notifies the library that you will be supplying raw data.
-    Furthermore, set cinfo->do_fancy_downsampling to FALSE if you want to use
-    real downsampled data.  (It is set TRUE by jpeg_set_defaults().)
-  * Ensure jpeg_color_space is correct --- an explicit jpeg_set_colorspace()
-    call is a good idea.  Note that since color conversion is bypassed,
-    in_color_space is ignored, except that jpeg_set_defaults() uses it to
-    choose the default jpeg_color_space setting.
-  * Ensure the sampling factors, cinfo->comp_info[i].h_samp_factor and
-    cinfo->comp_info[i].v_samp_factor, are correct.  Since these indicate the
-    dimensions of the data you are supplying, it's wise to set them
-    explicitly, rather than assuming the library's defaults are what you want.
-
-To pass raw data to the library, call jpeg_write_raw_data() in place of
-jpeg_write_scanlines().  The two routines work similarly except that
-jpeg_write_raw_data takes a JSAMPIMAGE data array rather than JSAMPARRAY.
-The scanlines count passed to and returned from jpeg_write_raw_data is
-measured in terms of the component with the largest v_samp_factor.
-
-jpeg_write_raw_data() processes one MCU row per call, which is to say
-v_samp_factor*block_size sample rows of each component.  The passed num_lines
-value must be at least max_v_samp_factor*block_size, and the return value
-will be exactly that amount (or possibly some multiple of that amount, in
-future library versions).  This is true even on the last call at the bottom
-of the image; don't forget to pad your data as necessary.
-
-The required dimensions of the supplied data can be computed for each
-component as
-	cinfo->comp_info[i].width_in_blocks*block_size  samples per row
-	cinfo->comp_info[i].height_in_blocks*block_size rows in image
-after jpeg_start_compress() has initialized those fields.  If the valid data
-is smaller than this, it must be padded appropriately.  For some sampling
-factors and image sizes, additional dummy DCT blocks are inserted to make
-the image a multiple of the MCU dimensions.  The library creates such dummy
-blocks itself; it does not read them from your supplied data.  Therefore you
-need never pad by more than block_size samples.  An example may help here.
-Assume 2h2v downsampling of YCbCr data, that is
-	cinfo->comp_info[0].h_samp_factor = 2		for Y
-	cinfo->comp_info[0].v_samp_factor = 2
-	cinfo->comp_info[1].h_samp_factor = 1		for Cb
-	cinfo->comp_info[1].v_samp_factor = 1
-	cinfo->comp_info[2].h_samp_factor = 1		for Cr
-	cinfo->comp_info[2].v_samp_factor = 1
-and suppose that the nominal image dimensions (cinfo->image_width and
-cinfo->image_height) are 101x101 pixels.  Then jpeg_start_compress() will
-compute downsampled_width = 101 and width_in_blocks = 13 for Y,
-downsampled_width = 51 and width_in_blocks = 7 for Cb and Cr (and the same
-for the height fields).  You must pad the Y data to at least 13*8 = 104
-columns and rows, the Cb/Cr data to at least 7*8 = 56 columns and rows.  The
-MCU height is max_v_samp_factor = 2 DCT rows so you must pass at least 16
-scanlines on each call to jpeg_write_raw_data(), which is to say 16 actual
-sample rows of Y and 8 each of Cb and Cr.  A total of 7 MCU rows are needed,
-so you must pass a total of 7*16 = 112 "scanlines".  The last DCT block row
-of Y data is dummy, so it doesn't matter what you pass for it in the data
-arrays, but the scanlines count must total up to 112 so that all of the Cb
-and Cr data gets passed.
-
-Output suspension is supported with raw-data compression: if the data
-destination module suspends, jpeg_write_raw_data() will return 0.
-In this case the same data rows must be passed again on the next call.
-
-
-Decompression with raw data output implies bypassing all postprocessing.
-You must deal with the color space and sampling factors present in the
-incoming file.  If your application only handles, say, 2h1v YCbCr data,
-you must check for and fail on other color spaces or other sampling factors.
-The library will not convert to a different color space for you.
-
-To obtain raw data output, set cinfo->raw_data_out = TRUE before
-jpeg_start_decompress() (it is set FALSE by jpeg_read_header()).  Be sure to
-verify that the color space and sampling factors are ones you can handle.
-Furthermore, set cinfo->do_fancy_upsampling = FALSE if you want to get real
-downsampled data (it is set TRUE by jpeg_read_header()).
-Then call jpeg_read_raw_data() in place of jpeg_read_scanlines().  The
-decompression process is otherwise the same as usual.
-
-jpeg_read_raw_data() returns one MCU row per call, and thus you must pass a
-buffer of at least max_v_samp_factor*block_size scanlines (scanline counting
-is the same as for raw-data compression).  The buffer you pass must be large
-enough to hold the actual data plus padding to DCT-block boundaries.  As with
-compression, any entirely dummy DCT blocks are not processed so you need not
-allocate space for them, but the total scanline count includes them.  The
-above example of computing buffer dimensions for raw-data compression is
-equally valid for decompression.
-
-Input suspension is supported with raw-data decompression: if the data source
-module suspends, jpeg_read_raw_data() will return 0.  You can also use
-buffered-image mode to read raw data in multiple passes.
-
-
-Really raw data: DCT coefficients
----------------------------------
-
-It is possible to read or write the contents of a JPEG file as raw DCT
-coefficients.  This facility is mainly intended for use in lossless
-transcoding between different JPEG file formats.  Other possible applications
-include lossless cropping of a JPEG image, lossless reassembly of a
-multi-strip or multi-tile TIFF/JPEG file into a single JPEG datastream, etc.
-
-To read the contents of a JPEG file as DCT coefficients, open the file and do
-jpeg_read_header() as usual.  But instead of calling jpeg_start_decompress()
-and jpeg_read_scanlines(), call jpeg_read_coefficients().  This will read the
-entire image into a set of virtual coefficient-block arrays, one array per
-component.  The return value is a pointer to an array of virtual-array
-descriptors.  Each virtual array can be accessed directly using the JPEG
-memory manager's access_virt_barray method (see Memory management, below,
-and also read structure.txt's discussion of virtual array handling).  Or,
-for simple transcoding to a different JPEG file format, the array list can
-just be handed directly to jpeg_write_coefficients().
-
-Each block in the block arrays contains quantized coefficient values in
-normal array order (not JPEG zigzag order).  The block arrays contain only
-DCT blocks containing real data; any entirely-dummy blocks added to fill out
-interleaved MCUs at the right or bottom edges of the image are discarded
-during reading and are not stored in the block arrays.  (The size of each
-block array can be determined from the width_in_blocks and height_in_blocks
-fields of the component's comp_info entry.)  This is also the data format
-expected by jpeg_write_coefficients().
-
-When you are done using the virtual arrays, call jpeg_finish_decompress()
-to release the array storage and return the decompression object to an idle
-state; or just call jpeg_destroy() if you don't need to reuse the object.
-
-If you use a suspending data source, jpeg_read_coefficients() will return
-NULL if it is forced to suspend; a non-NULL return value indicates successful
-completion.  You need not test for a NULL return value when using a
-non-suspending data source.
-
-It is also possible to call jpeg_read_coefficients() to obtain access to the
-decoder's coefficient arrays during a normal decode cycle in buffered-image
-mode.  This frammish might be useful for progressively displaying an incoming
-image and then re-encoding it without loss.  To do this, decode in buffered-
-image mode as discussed previously, then call jpeg_read_coefficients() after
-the last jpeg_finish_output() call.  The arrays will be available for your use
-until you call jpeg_finish_decompress().
-
-
-To write the contents of a JPEG file as DCT coefficients, you must provide
-the DCT coefficients stored in virtual block arrays.  You can either pass
-block arrays read from an input JPEG file by jpeg_read_coefficients(), or
-allocate virtual arrays from the JPEG compression object and fill them
-yourself.  In either case, jpeg_write_coefficients() is substituted for
-jpeg_start_compress() and jpeg_write_scanlines().  Thus the sequence is
-  * Create compression object
-  * Set all compression parameters as necessary
-  * Request virtual arrays if needed
-  * jpeg_write_coefficients()
-  * jpeg_finish_compress()
-  * Destroy or re-use compression object
-jpeg_write_coefficients() is passed a pointer to an array of virtual block
-array descriptors; the number of arrays is equal to cinfo.num_components.
-
-The virtual arrays need only have been requested, not realized, before
-jpeg_write_coefficients() is called.  A side-effect of
-jpeg_write_coefficients() is to realize any virtual arrays that have been
-requested from the compression object's memory manager.  Thus, when obtaining
-the virtual arrays from the compression object, you should fill the arrays
-after calling jpeg_write_coefficients().  The data is actually written out
-when you call jpeg_finish_compress(); jpeg_write_coefficients() only writes
-the file header.
-
-When writing raw DCT coefficients, it is crucial that the JPEG quantization
-tables and sampling factors match the way the data was encoded, or the
-resulting file will be invalid.  For transcoding from an existing JPEG file,
-we recommend using jpeg_copy_critical_parameters().  This routine initializes
-all the compression parameters to default values (like jpeg_set_defaults()),
-then copies the critical information from a source decompression object.
-The decompression object should have just been used to read the entire
-JPEG input file --- that is, it should be awaiting jpeg_finish_decompress().
-
-jpeg_write_coefficients() marks all tables stored in the compression object
-as needing to be written to the output file (thus, it acts like
-jpeg_start_compress(cinfo, TRUE)).  This is for safety's sake, to avoid
-emitting abbreviated JPEG files by accident.  If you really want to emit an
-abbreviated JPEG file, call jpeg_suppress_tables(), or set the tables'
-individual sent_table flags, between calling jpeg_write_coefficients() and
-jpeg_finish_compress().
-
-
-Progress monitoring
--------------------
-
-Some applications may need to regain control from the JPEG library every so
-often.  The typical use of this feature is to produce a percent-done bar or
-other progress display.  (For a simple example, see cjpeg.c or djpeg.c.)
-Although you do get control back frequently during the data-transferring pass
-(the jpeg_read_scanlines or jpeg_write_scanlines loop), any additional passes
-will occur inside jpeg_finish_compress or jpeg_start_decompress; those
-routines may take a long time to execute, and you don't get control back
-until they are done.
-
-You can define a progress-monitor routine which will be called periodically
-by the library.  No guarantees are made about how often this call will occur,
-so we don't recommend you use it for mouse tracking or anything like that.
-At present, a call will occur once per MCU row, scanline, or sample row
-group, whichever unit is convenient for the current processing mode; so the
-wider the image, the longer the time between calls.  During the data
-transferring pass, only one call occurs per call of jpeg_read_scanlines or
-jpeg_write_scanlines, so don't pass a large number of scanlines at once if
-you want fine resolution in the progress count.  (If you really need to use
-the callback mechanism for time-critical tasks like mouse tracking, you could
-insert additional calls inside some of the library's inner loops.)
-
-To establish a progress-monitor callback, create a struct jpeg_progress_mgr,
-fill in its progress_monitor field with a pointer to your callback routine,
-and set cinfo->progress to point to the struct.  The callback will be called
-whenever cinfo->progress is non-NULL.  (This pointer is set to NULL by
-jpeg_create_compress or jpeg_create_decompress; the library will not change
-it thereafter.  So if you allocate dynamic storage for the progress struct,
-make sure it will live as long as the JPEG object does.  Allocating from the
-JPEG memory manager with lifetime JPOOL_PERMANENT will work nicely.)  You
-can use the same callback routine for both compression and decompression.
-
-The jpeg_progress_mgr struct contains four fields which are set by the library:
-	long pass_counter;	/* work units completed in this pass */
-	long pass_limit;	/* total number of work units in this pass */
-	int completed_passes;	/* passes completed so far */
-	int total_passes;	/* total number of passes expected */
-During any one pass, pass_counter increases from 0 up to (not including)
-pass_limit; the step size is usually but not necessarily 1.  The pass_limit
-value may change from one pass to another.  The expected total number of
-passes is in total_passes, and the number of passes already completed is in
-completed_passes.  Thus the fraction of work completed may be estimated as
-		completed_passes + (pass_counter/pass_limit)
-		--------------------------------------------
-				total_passes
-ignoring the fact that the passes may not be equal amounts of work.
-
-When decompressing, pass_limit can even change within a pass, because it
-depends on the number of scans in the JPEG file, which isn't always known in
-advance.  The computed fraction-of-work-done may jump suddenly (if the library
-discovers it has overestimated the number of scans) or even decrease (in the
-opposite case).  It is not wise to put great faith in the work estimate.
-
-When using the decompressor's buffered-image mode, the progress monitor work
-estimate is likely to be completely unhelpful, because the library has no way
-to know how many output passes will be demanded of it.  Currently, the library
-sets total_passes based on the assumption that there will be one more output
-pass if the input file end hasn't yet been read (jpeg_input_complete() isn't
-TRUE), but no more output passes if the file end has been reached when the
-output pass is started.  This means that total_passes will rise as additional
-output passes are requested.  If you have a way of determining the input file
-size, estimating progress based on the fraction of the file that's been read
-will probably be more useful than using the library's value.
-
-
-Memory management
------------------
-
-This section covers some key facts about the JPEG library's built-in memory
-manager.  For more info, please read structure.txt's section about the memory
-manager, and consult the source code if necessary.
-
-All memory and temporary file allocation within the library is done via the
-memory manager.  If necessary, you can replace the "back end" of the memory
-manager to control allocation yourself (for example, if you don't want the
-library to use malloc() and free() for some reason).
-
-Some data is allocated "permanently" and will not be freed until the JPEG
-object is destroyed.  Most data is allocated "per image" and is freed by
-jpeg_finish_compress, jpeg_finish_decompress, or jpeg_abort.  You can call the
-memory manager yourself to allocate structures that will automatically be
-freed at these times.  Typical code for this is
-  ptr = (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, size);
-Use JPOOL_PERMANENT to get storage that lasts as long as the JPEG object.
-Use alloc_large instead of alloc_small for anything bigger than a few Kbytes.
-There are also alloc_sarray and alloc_barray routines that automatically
-build 2-D sample or block arrays.
-
-The library's minimum space requirements to process an image depend on the
-image's width, but not on its height, because the library ordinarily works
-with "strip" buffers that are as wide as the image but just a few rows high.
-Some operating modes (eg, two-pass color quantization) require full-image
-buffers.  Such buffers are treated as "virtual arrays": only the current strip
-need be in memory, and the rest can be swapped out to a temporary file.
-
-If you use the simplest memory manager back end (jmemnobs.c), then no
-temporary files are used; virtual arrays are simply malloc()'d.  Images bigger
-than memory can be processed only if your system supports virtual memory.
-The other memory manager back ends support temporary files of various flavors
-and thus work in machines without virtual memory.  They may also be useful on
-Unix machines if you need to process images that exceed available swap space.
-
-When using temporary files, the library will make the in-memory buffers for
-its virtual arrays just big enough to stay within a "maximum memory" setting.
-Your application can set this limit by setting cinfo->mem->max_memory_to_use
-after creating the JPEG object.  (Of course, there is still a minimum size for
-the buffers, so the max-memory setting is effective only if it is bigger than
-the minimum space needed.)  If you allocate any large structures yourself, you
-must allocate them before jpeg_start_compress() or jpeg_start_decompress() in
-order to have them counted against the max memory limit.  Also keep in mind
-that space allocated with alloc_small() is ignored, on the assumption that
-it's too small to be worth worrying about; so a reasonable safety margin
-should be left when setting max_memory_to_use.
-
-If you use the jmemname.c or jmemdos.c memory manager back end, it is
-important to clean up the JPEG object properly to ensure that the temporary
-files get deleted.  (This is especially crucial with jmemdos.c, where the
-"temporary files" may be extended-memory segments; if they are not freed,
-DOS will require a reboot to recover the memory.)  Thus, with these memory
-managers, it's a good idea to provide a signal handler that will trap any
-early exit from your program.  The handler should call either jpeg_abort()
-or jpeg_destroy() for any active JPEG objects.  A handler is not needed with
-jmemnobs.c, and shouldn't be necessary with jmemansi.c or jmemmac.c either,
-since the C library is supposed to take care of deleting files made with
-tmpfile().
-
-
-Memory usage
-------------
-
-Working memory requirements while performing compression or decompression
-depend on image dimensions, image characteristics (such as colorspace and
-JPEG process), and operating mode (application-selected options).
-
-As of v6b, the decompressor requires:
- 1. About 24K in more-or-less-fixed-size data.  This varies a bit depending
-    on operating mode and image characteristics (particularly color vs.
-    grayscale), but it doesn't depend on image dimensions.
- 2. Strip buffers (of size proportional to the image width) for IDCT and
-    upsampling results.  The worst case for commonly used sampling factors
-    is about 34 bytes * width in pixels for a color image.  A grayscale image
-    only needs about 8 bytes per pixel column.
- 3. A full-image DCT coefficient buffer is needed to decode a multi-scan JPEG
-    file (including progressive JPEGs), or whenever you select buffered-image
-    mode.  This takes 2 bytes/coefficient.  At typical 2x2 sampling, that's
-    3 bytes per pixel for a color image.  Worst case (1x1 sampling) requires
-    6 bytes/pixel.  For grayscale, figure 2 bytes/pixel.
- 4. To perform 2-pass color quantization, the decompressor also needs a
-    128K color lookup table and a full-image pixel buffer (3 bytes/pixel).
-This does not count any memory allocated by the application, such as a
-buffer to hold the final output image.
-
-The above figures are valid for 8-bit JPEG data precision and a machine with
-32-bit ints.  For 9-bit to 12-bit JPEG data, double the size of the strip
-buffers and quantization pixel buffer.  The "fixed-size" data will be
-somewhat smaller with 16-bit ints, larger with 64-bit ints.  Also, CMYK
-or other unusual color spaces will require different amounts of space.
-
-The full-image coefficient and pixel buffers, if needed at all, do not
-have to be fully RAM resident; you can have the library use temporary
-files instead when the total memory usage would exceed a limit you set.
-(But if your OS supports virtual memory, it's probably better to just use
-jmemnobs and let the OS do the swapping.)
-
-The compressor's memory requirements are similar, except that it has no need
-for color quantization.  Also, it needs a full-image DCT coefficient buffer
-if Huffman-table optimization is asked for, even if progressive mode is not
-requested.
-
-If you need more detailed information about memory usage in a particular
-situation, you can enable the MEM_STATS code in jmemmgr.c.
-
-
-Library compile-time options
-----------------------------
-
-A number of compile-time options are available by modifying jmorecfg.h.
-
-The IJG code currently supports 8-bit to 12-bit sample data precision by
-defining BITS_IN_JSAMPLE as 8, 9, 10, 11, or 12.
-Note that a value larger than 8 causes JSAMPLE to be larger than a char,
-so it affects the surrounding application's image data.
-The sample applications cjpeg and djpeg can support deeper than 8-bit data
-only for PPM and GIF file formats; you must disable the other file formats
-to compile a 9-bit to 12-bit cjpeg or djpeg.  (install.txt has more
-information about that.)
-Run-time selection and conversion of data precision are currently not
-supported and may be added later.
-Exception:  The transcoding part (jpegtran) supports all settings in a
-single instance, since it operates on the level of DCT coefficients and
-not sample values.
-(If you need to include an 8-bit library and a 9-bit to 12-bit library for
-compression or decompression in a single application, you could probably do
-it by defining NEED_SHORT_EXTERNAL_NAMES for just one of the copies.  You'd
-have to access the 8-bit and the 9-bit to 12-bit copies from separate
-application source files.  This is untested ... if you try it, we'd like to
-hear whether it works!)
-
-Note that the standard Huffman tables are only valid for 8-bit data precision.
-If you selected more than 8-bit data precision, cjpeg uses arithmetic coding
-by default.  The Huffman encoder normally uses entropy optimization to
-compute usable tables for higher precision.  Otherwise, you'll have to
-supply different default Huffman tables.  You may also want to supply your
-own DCT quantization tables; the existing quality-scaling code has been
-developed for 8-bit use, and probably doesn't generate especially good tables
-for 9-bit to 12-bit.
-
-The maximum number of components (color channels) in the image is determined
-by MAX_COMPONENTS.  The JPEG standard allows up to 255 components, but we
-expect that few applications will need more than four or so.
-
-On machines with unusual data type sizes, you may be able to improve
-performance or reduce memory space by tweaking the various typedefs in
-jmorecfg.h.  In particular, on some RISC CPUs, access to arrays of "short"s
-is quite slow; consider trading memory for speed by making JCOEF, INT16, and
-UINT16 be "int" or "unsigned int".  UINT8 is also a candidate to become int.
-You probably don't want to make JSAMPLE be int unless you have lots of memory
-to burn.
-
-You can reduce the size of the library by compiling out various optional
-functions.  To do this, undefine xxx_SUPPORTED symbols as necessary.
-
-You can also save a few K by not having text error messages in the library;
-the standard error message table occupies about 5Kb.  This is particularly
-reasonable for embedded applications where there's no good way to display 
-a message anyway.  To do this, remove the creation of the message table
-(jpeg_std_message_table[]) from jerror.c, and alter format_message to do
-something reasonable without it.  You could output the numeric value of the
-message code number, for example.  If you do this, you can also save a couple
-more K by modifying the TRACEMSn() macros in jerror.h to expand to nothing;
-you don't need trace capability anyway, right?
-
-
-Portability considerations
---------------------------
-
-The JPEG library has been written to be extremely portable; the sample
-applications cjpeg and djpeg are slightly less so.  This section summarizes
-the design goals in this area.  (If you encounter any bugs that cause the
-library to be less portable than is claimed here, we'd appreciate hearing
-about them.)
-
-The code works fine on ANSI C, C++, and pre-ANSI C compilers, using any of
-the popular system include file setups, and some not-so-popular ones too.
-See install.txt for configuration procedures.
-
-The code is not dependent on the exact sizes of the C data types.  As
-distributed, we make the assumptions that
-	char	is at least 8 bits wide
-	short	is at least 16 bits wide
-	int	is at least 16 bits wide
-	long	is at least 32 bits wide
-(These are the minimum requirements of the ANSI C standard.)  Wider types will
-work fine, although memory may be used inefficiently if char is much larger
-than 8 bits or short is much bigger than 16 bits.  The code should work
-equally well with 16- or 32-bit ints.
-
-In a system where these assumptions are not met, you may be able to make the
-code work by modifying the typedefs in jmorecfg.h.  However, you will probably
-have difficulty if int is less than 16 bits wide, since references to plain
-int abound in the code.
-
-char can be either signed or unsigned, although the code runs faster if an
-unsigned char type is available.  If char is wider than 8 bits, you will need
-to redefine JOCTET and/or provide custom data source/destination managers so
-that JOCTET represents exactly 8 bits of data on external storage.
-
-The JPEG library proper does not assume ASCII representation of characters.
-But some of the image file I/O modules in cjpeg/djpeg do have ASCII
-dependencies in file-header manipulation; so does cjpeg's select_file_type()
-routine.
-
-The JPEG library does not rely heavily on the C library.  In particular, C
-stdio is used only by the data source/destination modules and the error
-handler, all of which are application-replaceable.  (cjpeg/djpeg are more
-heavily dependent on stdio.)  malloc and free are called only from the memory
-manager "back end" module, so you can use a different memory allocator by
-replacing that one file.
-
-The code generally assumes that C names must be unique in the first 15
-characters.  However, global function names can be made unique in the
-first 6 characters by defining NEED_SHORT_EXTERNAL_NAMES.
-
-More info about porting the code may be gleaned by reading jconfig.txt,
-jmorecfg.h, and jinclude.h.
-
-
-Notes for MS-DOS implementors
------------------------------
-
-The IJG code is designed to work efficiently in 80x86 "small" or "medium"
-memory models (i.e., data pointers are 16 bits unless explicitly declared
-"far"; code pointers can be either size).  You may be able to use small
-model to compile cjpeg or djpeg by itself, but you will probably have to use
-medium model for any larger application.  This won't make much difference in
-performance.  You *will* take a noticeable performance hit if you use a
-large-data memory model (perhaps 10%-25%), and you should avoid "huge" model
-if at all possible.
-
-The JPEG library typically needs 2Kb-3Kb of stack space.  It will also
-malloc about 20K-30K of near heap space while executing (and lots of far
-heap, but that doesn't count in this calculation).  This figure will vary
-depending on selected operating mode, and to a lesser extent on image size.
-There is also about 5Kb-6Kb of constant data which will be allocated in the
-near data segment (about 4Kb of this is the error message table).
-Thus you have perhaps 20K available for other modules' static data and near
-heap space before you need to go to a larger memory model.  The C library's
-static data will account for several K of this, but that still leaves a good
-deal for your needs.  (If you are tight on space, you could reduce the sizes
-of the I/O buffers allocated by jdatasrc.c and jdatadst.c, say from 4K to
-1K.  Another possibility is to move the error message table to far memory;
-this should be doable with only localized hacking on jerror.c.)
-
-About 2K of the near heap space is "permanent" memory that will not be
-released until you destroy the JPEG object.  This is only an issue if you
-save a JPEG object between compression or decompression operations.
-
-Far data space may also be a tight resource when you are dealing with large
-images.  The most memory-intensive case is decompression with two-pass color
-quantization, or single-pass quantization to an externally supplied color
-map.  This requires a 128Kb color lookup table plus strip buffers amounting
-to about 40 bytes per column for typical sampling ratios (eg, about 25600
-bytes for a 640-pixel-wide image).  You may not be able to process wide
-images if you have large data structures of your own.
-
-Of course, all of these concerns vanish if you use a 32-bit flat-memory-model
-compiler, such as DJGPP or Watcom C.  We highly recommend flat model if you
-can use it; the JPEG library is significantly faster in flat model.
--- a/DoConfig/fltk/jpeg/makedepend
+++ /dev/null
@@ -1,59 +1,0 @@
-# DO NOT DELETE
-
-jaricom.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcapimin.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcapistd.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcarith.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jccoefct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jccolor.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcdctmgr.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcdctmgr.o: jdct.h
-jchuff.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcinit.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmainct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmarker.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcmaster.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcomapi.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcparam.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcprepct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jcsample.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jctrans.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdapimin.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdapistd.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdarith.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdatadst.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdatasrc.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdcoefct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdcolor.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jddctmgr.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jddctmgr.o: jdct.h
-jdhuff.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdinput.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmainct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmarker.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmaster.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdmerge.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdpostct.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdsample.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jdtrans.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jerror.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jerror.o: jversion.h
-jfdctflt.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jfdctflt.o: jdct.h
-jfdctfst.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jfdctfst.o: jdct.h
-jfdctint.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jfdctint.o: jdct.h
-jidctflt.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jidctflt.o: jdct.h
-jidctfst.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jidctfst.o: jdct.h
-jidctint.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jidctint.o: jdct.h
-jmemmgr.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jmemmgr.o: jmemsys.h
-jmemnobs.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jmemnobs.o: jmemsys.h
-jquant1.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jquant2.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
-jutils.o: jinclude.h jconfig.h jpeglib.h jmorecfg.h jpegint.h jerror.h
--- a/DoConfig/fltk/jpeg/structure.txt
+++ /dev/null
@@ -1,942 +1,0 @@
-IJG JPEG LIBRARY:  SYSTEM ARCHITECTURE
-
-Copyright (C) 1991-2013, Thomas G. Lane, Guido Vollbeding.
-This file is part of the Independent JPEG Group's software.
-For conditions of distribution and use, see the accompanying README file.
-
-
-This file provides an overview of the architecture of the IJG JPEG software;
-that is, the functions of the various modules in the system and the interfaces
-between modules.  For more precise details about any data structure or calling
-convention, see the include files and comments in the source code.
-
-We assume that the reader is already somewhat familiar with the JPEG standard.
-The README file includes references for learning about JPEG.  The file
-libjpeg.txt describes the library from the viewpoint of an application
-programmer using the library; it's best to read that file before this one.
-Also, the file coderules.txt describes the coding style conventions we use.
-
-In this document, JPEG-specific terminology follows the JPEG standard:
-  A "component" means a color channel, e.g., Red or Luminance.
-  A "sample" is a single component value (i.e., one number in the image data).
-  A "coefficient" is a frequency coefficient (a DCT transform output number).
-  A "block" is an array of samples or coefficients.
-  An "MCU" (minimum coded unit) is an interleaved set of blocks of size
-	determined by the sampling factors, or a single block in a
-	noninterleaved scan.
-We do not use the terms "pixel" and "sample" interchangeably.  When we say
-pixel, we mean an element of the full-size image, while a sample is an element
-of the downsampled image.  Thus the number of samples may vary across
-components while the number of pixels does not.  (This terminology is not used
-rigorously throughout the code, but it is used in places where confusion would
-otherwise result.)
-
-
-*** System features ***
-
-The IJG distribution contains two parts:
-  * A subroutine library for JPEG compression and decompression.
-  * cjpeg/djpeg, two sample applications that use the library to transform
-    JFIF JPEG files to and from several other image formats.
-cjpeg/djpeg are of no great intellectual complexity: they merely add a simple
-command-line user interface and I/O routines for several uncompressed image
-formats.  This document concentrates on the library itself.
-
-We desire the library to be capable of supporting all JPEG baseline, extended
-sequential, and progressive DCT processes.  The library does not support the
-hierarchical or lossless processes defined in the standard.
-
-Within these limits, any set of compression parameters allowed by the JPEG
-spec should be readable for decompression.  (We can be more restrictive about
-what formats we can generate.)  Although the system design allows for all
-parameter values, some uncommon settings are not yet implemented and may
-never be; nonintegral sampling ratios are the prime example.  Furthermore,
-we treat 8-bit vs. 12-bit data precision as a compile-time switch, not a
-run-time option, because most machines can store 8-bit pixels much more
-compactly than 12-bit.
-
-By itself, the library handles only interchange JPEG datastreams --- in
-particular the widely used JFIF file format.  The library can be used by
-surrounding code to process interchange or abbreviated JPEG datastreams that
-are embedded in more complex file formats.  (For example, libtiff uses this
-library to implement JPEG compression within the TIFF file format.)
-
-The library includes a substantial amount of code that is not covered by the
-JPEG standard but is necessary for typical applications of JPEG.  These
-functions preprocess the image before JPEG compression or postprocess it after
-decompression.  They include colorspace conversion, downsampling/upsampling,
-and color quantization.  This code can be omitted if not needed.
-
-A wide range of quality vs. speed tradeoffs are possible in JPEG processing,
-and even more so in decompression postprocessing.  The decompression library
-provides multiple implementations that cover most of the useful tradeoffs,
-ranging from very-high-quality down to fast-preview operation.  On the
-compression side we have generally not provided low-quality choices, since
-compression is normally less time-critical.  It should be understood that the
-low-quality modes may not meet the JPEG standard's accuracy requirements;
-nonetheless, they are useful for viewers.
-
-
-*** Portability issues ***
-
-Portability is an essential requirement for the library.  The key portability
-issues that show up at the level of system architecture are:
-
-1.  Memory usage.  We want the code to be able to run on PC-class machines
-with limited memory.  Images should therefore be processed sequentially (in
-strips), to avoid holding the whole image in memory at once.  Where a
-full-image buffer is necessary, we should be able to use either virtual memory
-or temporary files.
-
-2.  Near/far pointer distinction.  To run efficiently on 80x86 machines, the
-code should distinguish "small" objects (kept in near data space) from
-"large" ones (kept in far data space).  This is an annoying restriction, but
-fortunately it does not impact code quality for less brain-damaged machines,
-and the source code clutter turns out to be minimal with sufficient use of
-pointer typedefs.
-
-3. Data precision.  We assume that "char" is at least 8 bits, "short" and
-"int" at least 16, "long" at least 32.  The code will work fine with larger
-data sizes, although memory may be used inefficiently in some cases.  However,
-the JPEG compressed datastream must ultimately appear on external storage as a
-sequence of 8-bit bytes if it is to conform to the standard.  This may pose a
-problem on machines where char is wider than 8 bits.  The library represents
-compressed data as an array of values of typedef JOCTET.  If no data type
-exactly 8 bits wide is available, custom data source and data destination
-modules must be written to unpack and pack the chosen JOCTET datatype into
-8-bit external representation.
-
-
-*** System overview ***
-
-The compressor and decompressor are each divided into two main sections:
-the JPEG compressor or decompressor proper, and the preprocessing or
-postprocessing functions.  The interface between these two sections is the
-image data that the official JPEG spec regards as its input or output: this
-data is in the colorspace to be used for compression, and it is downsampled
-to the sampling factors to be used.  The preprocessing and postprocessing
-steps are responsible for converting a normal image representation to or from
-this form.  (Those few applications that want to deal with YCbCr downsampled
-data can skip the preprocessing or postprocessing step.)
-
-Looking more closely, the compressor library contains the following main
-elements:
-
-  Preprocessing:
-    * Color space conversion (e.g., RGB to YCbCr).
-    * Edge expansion and downsampling.  Optionally, this step can do simple
-      smoothing --- this is often helpful for low-quality source data.
-  JPEG proper:
-    * MCU assembly, DCT, quantization.
-    * Entropy coding (sequential or progressive, Huffman or arithmetic).
-
-In addition to these modules we need overall control, marker generation,
-and support code (memory management & error handling).  There is also a
-module responsible for physically writing the output data --- typically
-this is just an interface to fwrite(), but some applications may need to
-do something else with the data.
-
-The decompressor library contains the following main elements:
-
-  JPEG proper:
-    * Entropy decoding (sequential or progressive, Huffman or arithmetic).
-    * Dequantization, inverse DCT, MCU disassembly.
-  Postprocessing:
-    * Upsampling.  Optionally, this step may be able to do more general
-      rescaling of the image.
-    * Color space conversion (e.g., YCbCr to RGB).  This step may also
-      provide gamma adjustment [ currently it does not ].
-    * Optional color quantization (e.g., reduction to 256 colors).
-    * Optional color precision reduction (e.g., 24-bit to 15-bit color).
-      [This feature is not currently implemented.]
-
-We also need overall control, marker parsing, and a data source module.
-The support code (memory management & error handling) can be shared with
-the compression half of the library.
-
-There may be several implementations of each of these elements, particularly
-in the decompressor, where a wide range of speed/quality tradeoffs is very
-useful.  It must be understood that some of the best speedups involve
-merging adjacent steps in the pipeline.  For example, upsampling, color space
-conversion, and color quantization might all be done at once when using a
-low-quality ordered-dither technique.  The system architecture is designed to
-allow such merging where appropriate.
-
-
-Note: it is convenient to regard edge expansion (padding to block boundaries)
-as a preprocessing/postprocessing function, even though the JPEG spec includes
-it in compression/decompression.  We do this because downsampling/upsampling
-can be simplified a little if they work on padded data: it's not necessary to
-have special cases at the right and bottom edges.  Therefore the interface
-buffer is always an integral number of blocks wide and high, and we expect
-compression preprocessing to pad the source data properly.  Padding will occur
-only to the next block (block_size-sample) boundary.  In an interleaved-scan
-situation, additional dummy blocks may be used to fill out MCUs, but the MCU
-assembly and disassembly logic will create or discard these blocks internally.
-(This is advantageous for speed reasons, since we avoid DCTing the dummy
-blocks.  It also permits a small reduction in file size, because the
-compressor can choose dummy block contents so as to minimize their size
-in compressed form.  Finally, it makes the interface buffer specification
-independent of whether the file is actually interleaved or not.)
-Applications that wish to deal directly with the downsampled data must
-provide similar buffering and padding for odd-sized images.
-
-
-*** Poor man's object-oriented programming ***
-
-It should be clear by now that we have a lot of quasi-independent processing
-steps, many of which have several possible behaviors.  To avoid cluttering the
-code with lots of switch statements, we use a simple form of object-style
-programming to separate out the different possibilities.
-
-For example, two different color quantization algorithms could be implemented
-as two separate modules that present the same external interface; at runtime,
-the calling code will access the proper module indirectly through an "object".
-
-We can get the limited features we need while staying within portable C.
-The basic tool is a function pointer.  An "object" is just a struct
-containing one or more function pointer fields, each of which corresponds to
-a method name in real object-oriented languages.  During initialization we
-fill in the function pointers with references to whichever module we have
-determined we need to use in this run.  Then invocation of the module is done
-by indirecting through a function pointer; on most machines this is no more
-expensive than a switch statement, which would be the only other way of
-making the required run-time choice.  The really significant benefit, of
-course, is keeping the source code clean and well structured.
-
-We can also arrange to have private storage that varies between different
-implementations of the same kind of object.  We do this by making all the
-module-specific object structs be separately allocated entities, which will
-be accessed via pointers in the master compression or decompression struct.
-The "public" fields or methods for a given kind of object are specified by
-a commonly known struct.  But a module's initialization code can allocate
-a larger struct that contains the common struct as its first member, plus
-additional private fields.  With appropriate pointer casting, the module's
-internal functions can access these private fields.  (For a simple example,
-see jdatadst.c, which implements the external interface specified by struct
-jpeg_destination_mgr, but adds extra fields.)
-
-(Of course this would all be a lot easier if we were using C++, but we are
-not yet prepared to assume that everyone has a C++ compiler.)
-
-An important benefit of this scheme is that it is easy to provide multiple
-versions of any method, each tuned to a particular case.  While a lot of
-precalculation might be done to select an optimal implementation of a method,
-the cost per invocation is constant.  For example, the upsampling step might
-have a "generic" method, plus one or more "hardwired" methods for the most
-popular sampling factors; the hardwired methods would be faster because they'd
-use straight-line code instead of for-loops.  The cost to determine which
-method to use is paid only once, at startup, and the selection criteria are
-hidden from the callers of the method.
-
-This plan differs a little bit from usual object-oriented structures, in that
-only one instance of each object class will exist during execution.  The
-reason for having the class structure is that on different runs we may create
-different instances (choose to execute different modules).  You can think of
-the term "method" as denoting the common interface presented by a particular
-set of interchangeable functions, and "object" as denoting a group of related
-methods, or the total shared interface behavior of a group of modules.
-
-
-*** Overall control structure ***
-
-We previously mentioned the need for overall control logic in the compression
-and decompression libraries.  In IJG implementations prior to v5, overall
-control was mostly provided by "pipeline control" modules, which proved to be
-large, unwieldy, and hard to understand.  To improve the situation, the
-control logic has been subdivided into multiple modules.  The control modules
-consist of:
-
-1. Master control for module selection and initialization.  This has two
-responsibilities:
-
-   1A.  Startup initialization at the beginning of image processing.
-        The individual processing modules to be used in this run are selected
-        and given initialization calls.
-
-   1B.  Per-pass control.  This determines how many passes will be performed
-        and calls each active processing module to configure itself
-        appropriately at the beginning of each pass.  End-of-pass processing,
-	where necessary, is also invoked from the master control module.
-
-   Method selection is partially distributed, in that a particular processing
-   module may contain several possible implementations of a particular method,
-   which it will select among when given its initialization call.  The master
-   control code need only be concerned with decisions that affect more than
-   one module.
- 
-2. Data buffering control.  A separate control module exists for each
-   inter-processing-step data buffer.  This module is responsible for
-   invoking the processing steps that write or read that data buffer.
-
-Each buffer controller sees the world as follows:
-
-input data => processing step A => buffer => processing step B => output data
-                      |              |               |
-              ------------------ controller ------------------
-
-The controller knows the dataflow requirements of steps A and B: how much data
-they want to accept in one chunk and how much they output in one chunk.  Its
-function is to manage its buffer and call A and B at the proper times.
-
-A data buffer control module may itself be viewed as a processing step by a
-higher-level control module; thus the control modules form a binary tree with
-elementary processing steps at the leaves of the tree.
-
-The control modules are objects.  A considerable amount of flexibility can
-be had by replacing implementations of a control module.  For example:
-* Merging of adjacent steps in the pipeline is done by replacing a control
-  module and its pair of processing-step modules with a single processing-
-  step module.  (Hence the possible merges are determined by the tree of
-  control modules.)
-* In some processing modes, a given interstep buffer need only be a "strip"
-  buffer large enough to accommodate the desired data chunk sizes.  In other
-  modes, a full-image buffer is needed and several passes are required.
-  The control module determines which kind of buffer is used and manipulates
-  virtual array buffers as needed.  One or both processing steps may be
-  unaware of the multi-pass behavior.
-
-In theory, we might be able to make all of the data buffer controllers
-interchangeable and provide just one set of implementations for all.  In
-practice, each one contains considerable special-case processing for its
-particular job.  The buffer controller concept should be regarded as an
-overall system structuring principle, not as a complete description of the
-task performed by any one controller.
-
-
-*** Compression object structure ***
-
-Here is a sketch of the logical structure of the JPEG compression library:
-
-                                                 |-- Colorspace conversion
-                  |-- Preprocessing controller --|
-                  |                              |-- Downsampling
-Main controller --|
-                  |                            |-- Forward DCT, quantize
-                  |-- Coefficient controller --|
-                                               |-- Entropy encoding
-
-This sketch also describes the flow of control (subroutine calls) during
-typical image data processing.  Each of the components shown in the diagram is
-an "object" which may have several different implementations available.  One
-or more source code files contain the actual implementation(s) of each object.
-
-The objects shown above are:
-
-* Main controller: buffer controller for the subsampled-data buffer, which
-  holds the preprocessed input data.  This controller invokes preprocessing to
-  fill the subsampled-data buffer, and JPEG compression to empty it.  There is
-  usually no need for a full-image buffer here; a strip buffer is adequate.
-
-* Preprocessing controller: buffer controller for the downsampling input data
-  buffer, which lies between colorspace conversion and downsampling.  Note
-  that a unified conversion/downsampling module would probably replace this
-  controller entirely.
-
-* Colorspace conversion: converts application image data into the desired
-  JPEG color space; also changes the data from pixel-interleaved layout to
-  separate component planes.  Processes one pixel row at a time.
-
-* Downsampling: performs reduction of chroma components as required.
-  Optionally may perform pixel-level smoothing as well.  Processes a "row
-  group" at a time, where a row group is defined as Vmax pixel rows of each
-  component before downsampling, and Vk sample rows afterwards (remember Vk
-  differs across components).  Some downsampling or smoothing algorithms may
-  require context rows above and below the current row group; the
-  preprocessing controller is responsible for supplying these rows via proper
-  buffering.  The downsampler is responsible for edge expansion at the right
-  edge (i.e., extending each sample row to a multiple of block_size samples);
-  but the preprocessing controller is responsible for vertical edge expansion
-  (i.e., duplicating the bottom sample row as needed to make a multiple of
-  block_size rows).
-
-* Coefficient controller: buffer controller for the DCT-coefficient data.
-  This controller handles MCU assembly, including insertion of dummy DCT
-  blocks when needed at the right or bottom edge.  When performing
-  Huffman-code optimization or emitting a multiscan JPEG file, this
-  controller is responsible for buffering the full image.  The equivalent of
-  one fully interleaved MCU row of subsampled data is processed per call,
-  even when the JPEG file is noninterleaved.
-
-* Forward DCT and quantization: Perform DCT, quantize, and emit coefficients.
-  Works on one or more DCT blocks at a time.  (Note: the coefficients are now
-  emitted in normal array order, which the entropy encoder is expected to
-  convert to zigzag order as necessary.  Prior versions of the IJG code did
-  the conversion to zigzag order within the quantization step.)
-
-* Entropy encoding: Perform Huffman or arithmetic entropy coding and emit the
-  coded data to the data destination module.  Works on one MCU per call.
-  For progressive JPEG, the same DCT blocks are fed to the entropy coder
-  during each pass, and the coder must emit the appropriate subset of
-  coefficients.
-
-In addition to the above objects, the compression library includes these
-objects:
-
-* Master control: determines the number of passes required, controls overall
-  and per-pass initialization of the other modules.
-
-* Marker writing: generates JPEG markers (except for RSTn, which is emitted
-  by the entropy encoder when needed).
-
-* Data destination manager: writes the output JPEG datastream to its final
-  destination (e.g., a file).  The destination manager supplied with the
-  library knows how to write to a stdio stream or to a memory buffer;
-  for other behaviors, the surrounding application may provide its own
-  destination manager.
-
-* Memory manager: allocates and releases memory, controls virtual arrays
-  (with backing store management, where required).
-
-* Error handler: performs formatting and output of error and trace messages;
-  determines handling of nonfatal errors.  The surrounding application may
-  override some or all of this object's methods to change error handling.
-
-* Progress monitor: supports output of "percent-done" progress reports.
-  This object represents an optional callback to the surrounding application:
-  if wanted, it must be supplied by the application.
-
-The error handler, destination manager, and progress monitor objects are
-defined as separate objects in order to simplify application-specific
-customization of the JPEG library.  A surrounding application may override
-individual methods or supply its own all-new implementation of one of these
-objects.  The object interfaces for these objects are therefore treated as
-part of the application interface of the library, whereas the other objects
-are internal to the library.
-
-The error handler and memory manager are shared by JPEG compression and
-decompression; the progress monitor, if used, may be shared as well.
-
-
-*** Decompression object structure ***
-
-Here is a sketch of the logical structure of the JPEG decompression library:
-
-                                               |-- Entropy decoding
-                  |-- Coefficient controller --|
-                  |                            |-- Dequantize, Inverse DCT
-Main controller --|
-                  |                               |-- Upsampling
-                  |-- Postprocessing controller --|   |-- Colorspace conversion
-                                                  |-- Color quantization
-                                                  |-- Color precision reduction
-
-As before, this diagram also represents typical control flow.  The objects
-shown are:
-
-* Main controller: buffer controller for the subsampled-data buffer, which
-  holds the output of JPEG decompression proper.  This controller's primary
-  task is to feed the postprocessing procedure.  Some upsampling algorithms
-  may require context rows above and below the current row group; when this
-  is true, the main controller is responsible for managing its buffer so as
-  to make context rows available.  In the current design, the main buffer is
-  always a strip buffer; a full-image buffer is never required.
-
-* Coefficient controller: buffer controller for the DCT-coefficient data.
-  This controller handles MCU disassembly, including deletion of any dummy
-  DCT blocks at the right or bottom edge.  When reading a multiscan JPEG
-  file, this controller is responsible for buffering the full image.
-  (Buffering DCT coefficients, rather than samples, is necessary to support
-  progressive JPEG.)  The equivalent of one fully interleaved MCU row of
-  subsampled data is processed per call, even when the source JPEG file is
-  noninterleaved.
-
-* Entropy decoding: Read coded data from the data source module and perform
-  Huffman or arithmetic entropy decoding.  Works on one MCU per call.
-  For progressive JPEG decoding, the coefficient controller supplies the prior
-  coefficients of each MCU (initially all zeroes), which the entropy decoder
-  modifies in each scan.
-
-* Dequantization and inverse DCT: like it says.  Note that the coefficients
-  buffered by the coefficient controller have NOT been dequantized; we
-  merge dequantization and inverse DCT into a single step for speed reasons.
-  When scaled-down output is asked for, simplified DCT algorithms may be used
-  that need fewer coefficients and emit fewer samples per DCT block, not the
-  full 8x8.  Works on one DCT block at a time.
-
-* Postprocessing controller: buffer controller for the color quantization
-  input buffer, when quantization is in use.  (Without quantization, this
-  controller just calls the upsampler.)  For two-pass quantization, this
-  controller is responsible for buffering the full-image data.
-
-* Upsampling: restores chroma components to full size.  (May support more
-  general output rescaling, too.  Note that if undersized DCT outputs have
-  been emitted by the DCT module, this module must adjust so that properly
-  sized outputs are created.)  Works on one row group at a time.  This module
-  also calls the color conversion module, so its top level is effectively a
-  buffer controller for the upsampling->color conversion buffer.  However, in
-  all but the highest-quality operating modes, upsampling and color
-  conversion are likely to be merged into a single step.
-
-* Colorspace conversion: convert from JPEG color space to output color space,
-  and change data layout from separate component planes to pixel-interleaved.
-  Works on one pixel row at a time.
-
-* Color quantization: reduce the data to colormapped form, using either an
-  externally specified colormap or an internally generated one.  This module
-  is not used for full-color output.  Works on one pixel row at a time; may
-  require two passes to generate a color map.  Note that the output will
-  always be a single component representing colormap indexes.  In the current
-  design, the output values are JSAMPLEs, so an 8-bit compilation cannot
-  quantize to more than 256 colors.  This is unlikely to be a problem in
-  practice.
-
-* Color reduction: this module handles color precision reduction, e.g.,
-  generating 15-bit color (5 bits/primary) from JPEG's 24-bit output.
-  Not quite clear yet how this should be handled... should we merge it with
-  colorspace conversion???
-
-Note that some high-speed operating modes might condense the entire
-postprocessing sequence to a single module (upsample, color convert, and
-quantize in one step).
-
-In addition to the above objects, the decompression library includes these
-objects:
-
-* Master control: determines the number of passes required, controls overall
-  and per-pass initialization of the other modules.  This is subdivided into
-  input and output control: jdinput.c controls only input-side processing,
-  while jdmaster.c handles overall initialization and output-side control.
-
-* Marker reading: decodes JPEG markers (except for RSTn).
-
-* Data source manager: supplies the input JPEG datastream.  The source
-  manager supplied with the library knows how to read from a stdio stream
-  or from a memory buffer;  for other behaviors, the surrounding application
-  may provide its own source manager.
-
-* Memory manager: same as for compression library.
-
-* Error handler: same as for compression library.
-
-* Progress monitor: same as for compression library.
-
-As with compression, the data source manager, error handler, and progress
-monitor are candidates for replacement by a surrounding application.
-
-
-*** Decompression input and output separation ***
-
-To support efficient incremental display of progressive JPEG files, the
-decompressor is divided into two sections that can run independently:
-
-1. Data input includes marker parsing, entropy decoding, and input into the
-   coefficient controller's DCT coefficient buffer.  Note that this
-   processing is relatively cheap and fast.
-
-2. Data output reads from the DCT coefficient buffer and performs the IDCT
-   and all postprocessing steps.
-
-For a progressive JPEG file, the data input processing is allowed to get
-arbitrarily far ahead of the data output processing.  (This occurs only
-if the application calls jpeg_consume_input(); otherwise input and output
-run in lockstep, since the input section is called only when the output
-section needs more data.)  In this way the application can avoid making
-extra display passes when data is arriving faster than the display pass
-can run.  Furthermore, it is possible to abort an output pass without
-losing anything, since the coefficient buffer is read-only as far as the
-output section is concerned.  See libjpeg.txt for more detail.
-
-A full-image coefficient array is only created if the JPEG file has multiple
-scans (or if the application specifies buffered-image mode anyway).  When
-reading a single-scan file, the coefficient controller normally creates only
-a one-MCU buffer, so input and output processing must run in lockstep in this
-case.  jpeg_consume_input() is effectively a no-op in this situation.
-
-The main impact of dividing the decompressor in this fashion is that we must
-be very careful with shared variables in the cinfo data structure.  Each
-variable that can change during the course of decompression must be
-classified as belonging to data input or data output, and each section must
-look only at its own variables.  For example, the data output section may not
-depend on any of the variables that describe the current scan in the JPEG
-file, because these may change as the data input section advances into a new
-scan.
-
-The progress monitor is (somewhat arbitrarily) defined to treat input of the
-file as one pass when buffered-image mode is not used, and to ignore data
-input work completely when buffered-image mode is used.  Note that the
-library has no reliable way to predict the number of passes when dealing
-with a progressive JPEG file, nor can it predict the number of output passes
-in buffered-image mode.  So the work estimate is inherently bogus anyway.
-
-No comparable division is currently made in the compression library, because
-there isn't any real need for it.
-
-
-*** Data formats ***
-
-Arrays of pixel sample values use the following data structure:
-
-    typedef something JSAMPLE;		a pixel component value, 0..MAXJSAMPLE
-    typedef JSAMPLE *JSAMPROW;		ptr to a row of samples
-    typedef JSAMPROW *JSAMPARRAY;	ptr to a list of rows
-    typedef JSAMPARRAY *JSAMPIMAGE;	ptr to a list of color-component arrays
-
-The basic element type JSAMPLE will typically be one of unsigned char,
-(signed) char, or short.  Short will be used if samples wider than 8 bits are
-to be supported (this is a compile-time option).  Otherwise, unsigned char is
-used if possible.  If the compiler only supports signed chars, then it is
-necessary to mask off the value when reading.  Thus, all reads of JSAMPLE
-values must be coded as "GETJSAMPLE(value)", where the macro will be defined
-as "((value) & 0xFF)" on signed-char machines and "((int) (value))" elsewhere.
-
-With these conventions, JSAMPLE values can be assumed to be >= 0.  This helps
-simplify correct rounding during downsampling, etc.  The JPEG standard's
-specification that sample values run from -128..127 is accommodated by
-subtracting 128 from the sample value in the DCT step.  Similarly, during
-decompression the output of the IDCT step will be immediately shifted back to
-0..255.  (NB: different values are required when 12-bit samples are in use.
-The code is written in terms of MAXJSAMPLE and CENTERJSAMPLE, which will be
-defined as 255 and 128 respectively in an 8-bit implementation, and as 4095
-and 2048 in a 12-bit implementation.)
-
-We use a pointer per row, rather than a two-dimensional JSAMPLE array.  This
-choice costs only a small amount of memory and has several benefits:
-* Code using the data structure doesn't need to know the allocated width of
-  the rows.  This simplifies edge expansion/compression, since we can work
-  in an array that's wider than the logical picture width.
-* Indexing doesn't require multiplication; this is a performance win on many
-  machines.
-* Arrays with more than 64K total elements can be supported even on machines
-  where malloc() cannot allocate chunks larger than 64K.
-* The rows forming a component array may be allocated at different times
-  without extra copying.  This trick allows some speedups in smoothing steps
-  that need access to the previous and next rows.
-
-Note that each color component is stored in a separate array; we don't use the
-traditional layout in which the components of a pixel are stored together.
-This simplifies coding of modules that work on each component independently,
-because they don't need to know how many components there are.  Furthermore,
-we can read or write each component to a temporary file independently, which
-is helpful when dealing with noninterleaved JPEG files.
-
-In general, a specific sample value is accessed by code such as
-	GETJSAMPLE(image[colorcomponent][row][col])
-where col is measured from the image left edge, but row is measured from the
-first sample row currently in memory.  Either of the first two indexings can
-be precomputed by copying the relevant pointer.
-
-
-Since most image-processing applications prefer to work on images in which
-the components of a pixel are stored together, the data passed to or from the
-surrounding application uses the traditional convention: a single pixel is
-represented by N consecutive JSAMPLE values, and an image row is an array of
-(# of color components)*(image width) JSAMPLEs.  One or more rows of data can
-be represented by a pointer of type JSAMPARRAY in this scheme.  This scheme is
-converted to component-wise storage inside the JPEG library.  (Applications
-that want to skip JPEG preprocessing or postprocessing will have to contend
-with component-wise storage.)
-
-
-Arrays of DCT-coefficient values use the following data structure:
-
-    typedef short JCOEF;		a 16-bit signed integer
-    typedef JCOEF JBLOCK[DCTSIZE2];	an 8x8 block of coefficients
-    typedef JBLOCK *JBLOCKROW;		ptr to one horizontal row of 8x8 blocks
-    typedef JBLOCKROW *JBLOCKARRAY;	ptr to a list of such rows
-    typedef JBLOCKARRAY *JBLOCKIMAGE;	ptr to a list of color component arrays
-
-The underlying type is at least a 16-bit signed integer; while "short" is big
-enough on all machines of interest, on some machines it is preferable to use
-"int" for speed reasons, despite the storage cost.  Coefficients are grouped
-into 8x8 blocks (but we always use #defines DCTSIZE and DCTSIZE2 rather than
-"8" and "64").
-
-The contents of a coefficient block may be in either "natural" or zigzagged
-order, and may be true values or divided by the quantization coefficients,
-depending on where the block is in the processing pipeline.  In the current
-library, coefficient blocks are kept in natural order everywhere; the entropy
-codecs zigzag or dezigzag the data as it is written or read.  The blocks
-contain quantized coefficients everywhere outside the DCT/IDCT subsystems.
-(This latter decision may need to be revisited to support variable
-quantization a la JPEG Part 3.)
-
-Notice that the allocation unit is now a row of 8x8 coefficient blocks,
-corresponding to block_size rows of samples.  Otherwise the structure
-is much the same as for samples, and for the same reasons.
-
-On machines where malloc() can't handle a request bigger than 64Kb, this data
-structure limits us to rows of less than 512 JBLOCKs, or a picture width of
-4000+ pixels.  This seems an acceptable restriction.
-
-
-On 80x86 machines, the bottom-level pointer types (JSAMPROW and JBLOCKROW)
-must be declared as "far" pointers, but the upper levels can be "near"
-(implying that the pointer lists are allocated in the DS segment).
-We use a #define symbol FAR, which expands to the "far" keyword when
-compiling on 80x86 machines and to nothing elsewhere.
-
-
-*** Suspendable processing ***
-
-In some applications it is desirable to use the JPEG library as an
-incremental, memory-to-memory filter.  In this situation the data source or
-destination may be a limited-size buffer, and we can't rely on being able to
-empty or refill the buffer at arbitrary times.  Instead the application would
-like to have control return from the library at buffer overflow/underrun, and
-then resume compression or decompression at a later time.
-
-This scenario is supported for simple cases.  (For anything more complex, we
-recommend that the application "bite the bullet" and develop real multitasking
-capability.)  The libjpeg.txt file goes into more detail about the usage and
-limitations of this capability; here we address the implications for library
-structure.
-
-The essence of the problem is that the entropy codec (coder or decoder) must
-be prepared to stop at arbitrary times.  In turn, the controllers that call
-the entropy codec must be able to stop before having produced or consumed all
-the data that they normally would handle in one call.  That part is reasonably
-straightforward: we make the controller call interfaces include "progress
-counters" which indicate the number of data chunks successfully processed, and
-we require callers to test the counter rather than just assume all of the data
-was processed.
-
-Rather than trying to restart at an arbitrary point, the current Huffman
-codecs are designed to restart at the beginning of the current MCU after a
-suspension due to buffer overflow/underrun.  At the start of each call, the
-codec's internal state is loaded from permanent storage (in the JPEG object
-structures) into local variables.  On successful completion of the MCU, the
-permanent state is updated.  (This copying is not very expensive, and may even
-lead to *improved* performance if the local variables can be registerized.)
-If a suspension occurs, the codec simply returns without updating the state,
-thus effectively reverting to the start of the MCU.  Note that this implies
-leaving some data unprocessed in the source/destination buffer (ie, the
-compressed partial MCU).  The data source/destination module interfaces are
-specified so as to make this possible.  This also implies that the data buffer
-must be large enough to hold a worst-case compressed MCU; a couple thousand
-bytes should be enough.
-
-In a successive-approximation AC refinement scan, the progressive Huffman
-decoder has to be able to undo assignments of newly nonzero coefficients if it
-suspends before the MCU is complete, since decoding requires distinguishing
-previously-zero and previously-nonzero coefficients.  This is a bit tedious
-but probably won't have much effect on performance.  Other variants of Huffman
-decoding need not worry about this, since they will just store the same values
-again if forced to repeat the MCU.
-
-This approach would probably not work for an arithmetic codec, since its
-modifiable state is quite large and couldn't be copied cheaply.  Instead it
-would have to suspend and resume exactly at the point of the buffer end.
-
-The JPEG marker reader is designed to cope with suspension at an arbitrary
-point.  It does so by backing up to the start of the marker parameter segment,
-so the data buffer must be big enough to hold the largest marker of interest.
-Again, a couple KB should be adequate.  (A special "skip" convention is used
-to bypass COM and APPn markers, so these can be larger than the buffer size
-without causing problems; otherwise a 64K buffer would be needed in the worst
-case.)
-
-The JPEG marker writer currently does *not* cope with suspension.
-We feel that this is not necessary; it is much easier simply to require
-the application to ensure there is enough buffer space before starting.  (An
-empty 2K buffer is more than sufficient for the header markers; and ensuring
-there are a dozen or two bytes available before calling jpeg_finish_compress()
-will suffice for the trailer.)  This would not work for writing multi-scan
-JPEG files, but we simply do not intend to support that capability with
-suspension.
-
-
-*** Memory manager services ***
-
-The JPEG library's memory manager controls allocation and deallocation of
-memory, and it manages large "virtual" data arrays on machines where the
-operating system does not provide virtual memory.  Note that the same
-memory manager serves both compression and decompression operations.
-
-In all cases, allocated objects are tied to a particular compression or
-decompression master record, and they will be released when that master
-record is destroyed.
-
-The memory manager does not provide explicit deallocation of objects.
-Instead, objects are created in "pools" of free storage, and a whole pool
-can be freed at once.  This approach helps prevent storage-leak bugs, and
-it speeds up operations whenever malloc/free are slow (as they often are).
-The pools can be regarded as lifetime identifiers for objects.  Two
-pools/lifetimes are defined:
-  * JPOOL_PERMANENT	lasts until master record is destroyed
-  * JPOOL_IMAGE		lasts until done with image (JPEG datastream)
-Permanent lifetime is used for parameters and tables that should be carried
-across from one datastream to another; this includes all application-visible
-parameters.  Image lifetime is used for everything else.  (A third lifetime,
-JPOOL_PASS = one processing pass, was originally planned.  However it was
-dropped as not being worthwhile.  The actual usage patterns are such that the
-peak memory usage would be about the same anyway; and having per-pass storage
-substantially complicates the virtual memory allocation rules --- see below.)
-
-The memory manager deals with three kinds of object:
-1. "Small" objects.  Typically these require no more than 10K-20K total.
-2. "Large" objects.  These may require tens to hundreds of K depending on
-   image size.  Semantically they behave the same as small objects, but we
-   distinguish them for two reasons:
-     * On MS-DOS machines, large objects are referenced by FAR pointers,
-       small objects by NEAR pointers.
-     * Pool allocation heuristics may differ for large and small objects.
-   Note that individual "large" objects cannot exceed the size allowed by
-   type size_t, which may be 64K or less on some machines.
-3. "Virtual" objects.  These are large 2-D arrays of JSAMPLEs or JBLOCKs
-   (typically large enough for the entire image being processed).  The
-   memory manager provides stripwise access to these arrays.  On machines
-   without virtual memory, the rest of the array may be swapped out to a
-   temporary file.
-
-(Note: JSAMPARRAY and JBLOCKARRAY data structures are a combination of large
-objects for the data proper and small objects for the row pointers.  For
-convenience and speed, the memory manager provides single routines to create
-these structures.  Similarly, virtual arrays include a small control block
-and a JSAMPARRAY or JBLOCKARRAY working buffer, all created with one call.)
-
-In the present implementation, virtual arrays are only permitted to have image
-lifespan.  (Permanent lifespan would not be reasonable, and pass lifespan is
-not very useful since a virtual array's raison d'etre is to store data for
-multiple passes through the image.)  We also expect that only "small" objects
-will be given permanent lifespan, though this restriction is not required by
-the memory manager.
-
-In a non-virtual-memory machine, some performance benefit can be gained by
-making the in-memory buffers for virtual arrays be as large as possible.
-(For small images, the buffers might fit entirely in memory, so blind
-swapping would be very wasteful.)  The memory manager will adjust the height
-of the buffers to fit within a prespecified maximum memory usage.  In order
-to do this in a reasonably optimal fashion, the manager needs to allocate all
-of the virtual arrays at once.  Therefore, there isn't a one-step allocation
-routine for virtual arrays; instead, there is a "request" routine that simply
-allocates the control block, and a "realize" routine (called just once) that
-determines space allocation and creates all of the actual buffers.  The
-realize routine must allow for space occupied by non-virtual large objects.
-(We don't bother to factor in the space needed for small objects, on the
-grounds that it isn't worth the trouble.)
-
-To support all this, we establish the following protocol for doing business
-with the memory manager:
-  1. Modules must request virtual arrays (which may have only image lifespan)
-     during the initial setup phase, i.e., in their jinit_xxx routines.
-  2. All "large" objects (including JSAMPARRAYs and JBLOCKARRAYs) must also be
-     allocated during initial setup.
-  3. realize_virt_arrays will be called at the completion of initial setup.
-     The above conventions ensure that sufficient information is available
-     for it to choose a good size for virtual array buffers.
-Small objects of any lifespan may be allocated at any time.  We expect that
-the total space used for small objects will be small enough to be negligible
-in the realize_virt_arrays computation.
-
-In a virtual-memory machine, we simply pretend that the available space is
-infinite, thus causing realize_virt_arrays to decide that it can allocate all
-the virtual arrays as full-size in-memory buffers.  The overhead of the
-virtual-array access protocol is very small when no swapping occurs.
-
-A virtual array can be specified to be "pre-zeroed"; when this flag is set,
-never-yet-written sections of the array are set to zero before being made
-available to the caller.  If this flag is not set, never-written sections
-of the array contain garbage.  (This feature exists primarily because the
-equivalent logic would otherwise be needed in jdcoefct.c for progressive
-JPEG mode; we may as well make it available for possible other uses.)
-
-The first write pass on a virtual array is required to occur in top-to-bottom
-order; read passes, as well as any write passes after the first one, may
-access the array in any order.  This restriction exists partly to simplify
-the virtual array control logic, and partly because some file systems may not
-support seeking beyond the current end-of-file in a temporary file.  The main
-implication of this restriction is that rearrangement of rows (such as
-converting top-to-bottom data order to bottom-to-top) must be handled while
-reading data out of the virtual array, not while putting it in.
-
-
-*** Memory manager internal structure ***
-
-To isolate system dependencies as much as possible, we have broken the
-memory manager into two parts.  There is a reasonably system-independent
-"front end" (jmemmgr.c) and a "back end" that contains only the code
-likely to change across systems.  All of the memory management methods
-outlined above are implemented by the front end.  The back end provides
-the following routines for use by the front end (none of these routines
-are known to the rest of the JPEG code):
-
-jpeg_mem_init, jpeg_mem_term	system-dependent initialization/shutdown
-
-jpeg_get_small, jpeg_free_small	interface to malloc and free library routines
-				(or their equivalents)
-
-jpeg_get_large, jpeg_free_large	interface to FAR malloc/free in MSDOS machines;
-				else usually the same as
-				jpeg_get_small/jpeg_free_small
-
-jpeg_mem_available		estimate available memory
-
-jpeg_open_backing_store		create a backing-store object
-
-read_backing_store,		manipulate a backing-store object
-write_backing_store,
-close_backing_store
-
-On some systems there will be more than one type of backing-store object
-(specifically, in MS-DOS a backing store file might be an area of extended
-memory as well as a disk file).  jpeg_open_backing_store is responsible for
-choosing how to implement a given object.  The read/write/close routines
-are method pointers in the structure that describes a given object; this
-lets them be different for different object types.
-
-It may be necessary to ensure that backing store objects are explicitly
-released upon abnormal program termination.  For example, MS-DOS won't free
-extended memory by itself.  To support this, we will expect the main program
-or surrounding application to arrange to call self_destruct (typically via
-jpeg_destroy) upon abnormal termination.  This may require a SIGINT signal
-handler or equivalent.  We don't want to have the back end module install its
-own signal handler, because that would pre-empt the surrounding application's
-ability to control signal handling.
-
-The IJG distribution includes several memory manager back end implementations.
-Usually the same back end should be suitable for all applications on a given
-system, but it is possible for an application to supply its own back end at
-need.
-
-
-*** Implications of DNL marker ***
-
-Some JPEG files may use a DNL marker to postpone definition of the image
-height (this would be useful for a fax-like scanner's output, for instance).
-In these files the SOF marker claims the image height is 0, and you only
-find out the true image height at the end of the first scan.
-
-We could read these files as follows:
-1. Upon seeing zero image height, replace it by 65535 (the maximum allowed).
-2. When the DNL is found, update the image height in the global image
-   descriptor.
-This implies that control modules must avoid making copies of the image
-height, and must re-test for termination after each MCU row.  This would
-be easy enough to do.
-
-In cases where image-size data structures are allocated, this approach will
-result in very inefficient use of virtual memory or much-larger-than-necessary
-temporary files.  This seems acceptable for something that probably won't be a
-mainstream usage.  People might have to forgo use of memory-hogging options
-(such as two-pass color quantization or noninterleaved JPEG files) if they
-want efficient conversion of such files.  (One could improve efficiency by
-demanding a user-supplied upper bound for the height, less than 65536; in most
-cases it could be much less.)
-
-The standard also permits the SOF marker to overestimate the image height,
-with a DNL to give the true, smaller height at the end of the first scan.
-This would solve the space problems if the overestimate wasn't too great.
-However, it implies that you don't even know whether DNL will be used.
-
-This leads to a couple of very serious objections:
-1. Testing for a DNL marker must occur in the inner loop of the decompressor's
-   Huffman decoder; this implies a speed penalty whether the feature is used
-   or not.
-2. There is no way to hide the last-minute change in image height from an
-   application using the decoder.  Thus *every* application using the IJG
-   library would suffer a complexity penalty whether it cared about DNL or
-   not.
-We currently do not support DNL because of these problems.
-
-A different approach is to insist that DNL-using files be preprocessed by a
-separate program that reads ahead to the DNL, then goes back and fixes the SOF
-marker.  This is a much simpler solution and is probably far more efficient.
-Even if one wants piped input, buffering the first scan of the JPEG file needs
-a lot smaller temp file than is implied by the maximum-height method.  For
-this approach we'd simply treat DNL as a no-op in the decompressor (at most,
-check that it matches the SOF image height).
-
-We will not worry about making the compressor capable of outputting DNL.
-Something similar to the first scheme above could be applied if anyone ever
-wants to make that work.
--- a/DoConfig/fltk/jpeg/usage.txt
+++ /dev/null
@@ -1,677 +1,0 @@
-USAGE instructions for the Independent JPEG Group's JPEG software
-=================================================================
-
-This file describes usage of the JPEG conversion programs cjpeg and djpeg,
-as well as the utility programs jpegtran, rdjpgcom and wrjpgcom.  (See
-the other documentation files if you wish to use the JPEG library within
-your own programs.)
-
-If you are on a Unix machine you may prefer to read the Unix-style manual
-pages in files cjpeg.1, djpeg.1, jpegtran.1, rdjpgcom.1, wrjpgcom.1.
-
-
-INTRODUCTION
-
-These programs implement JPEG image encoding, decoding, and transcoding.
-JPEG (pronounced "jay-peg") is a standardized compression method for
-full-color and gray-scale images.
-
-
-GENERAL USAGE
-
-We provide two programs, cjpeg to compress an image file into JPEG format,
-and djpeg to decompress a JPEG file back into a conventional image format.
-
-On Unix-like systems, you say:
-	cjpeg [switches] [imagefile] >jpegfile
-or
-	djpeg [switches] [jpegfile]  >imagefile
-The programs read the specified input file, or standard input if none is
-named.  They always write to standard output (with trace/error messages to
-standard error).  These conventions are handy for piping images between
-programs.
-
-On most non-Unix systems, you say:
-	cjpeg [switches] imagefile jpegfile
-or
-	djpeg [switches] jpegfile  imagefile
-i.e., both the input and output files are named on the command line.  This
-style is a little more foolproof, and it loses no functionality if you don't
-have pipes.  (You can get this style on Unix too, if you prefer, by defining
-TWO_FILE_COMMANDLINE when you compile the programs; see install.txt.)
-
-You can also say:
-	cjpeg [switches] -outfile jpegfile  imagefile
-or
-	djpeg [switches] -outfile imagefile  jpegfile
-This syntax works on all systems, so it is useful for scripts.
-
-The currently supported image file formats are: PPM (PBMPLUS color format),
-PGM (PBMPLUS gray-scale format), BMP, Targa, and RLE (Utah Raster Toolkit
-format).  (RLE is supported only if the URT library is available.)
-cjpeg recognizes the input image format automatically, with the exception
-of some Targa-format files.  You have to tell djpeg which format to generate.
-
-JPEG files are in the defacto standard JFIF file format.  There are other,
-less widely used JPEG-based file formats, but we don't support them.
-
-All switch names may be abbreviated; for example, -grayscale may be written
--gray or -gr.  Most of the "basic" switches can be abbreviated to as little as
-one letter.  Upper and lower case are equivalent (-BMP is the same as -bmp).
-British spellings are also accepted (e.g., -greyscale), though for brevity
-these are not mentioned below.
-
-
-CJPEG DETAILS
-
-The basic command line switches for cjpeg are:
-
-	-quality N[,...]  Scale quantization tables to adjust image quality.
-			Quality is 0 (worst) to 100 (best); default is 75.
-			(See below for more info.)
-
-	-grayscale	Create monochrome JPEG file from color input.
-			Be sure to use this switch when compressing a grayscale
-			BMP file, because cjpeg isn't bright enough to notice
-			whether a BMP file uses only shades of gray.  By
-			saying -grayscale, you'll get a smaller JPEG file that
-			takes less time to process.
-
-	-rgb		Create RGB JPEG file.
-			Using this switch suppresses the conversion from RGB
-			colorspace input to the default YCbCr JPEG colorspace.
-			You can use this switch in combination with the
-			-block N switch (see below) for lossless JPEG coding.
-			See also the -rgb1 switch below.
-
-	-optimize	Perform optimization of entropy encoding parameters.
-			Without this, default encoding parameters are used.
-			-optimize usually makes the JPEG file a little smaller,
-			but cjpeg runs somewhat slower and needs much more
-			memory.  Image quality and speed of decompression are
-			unaffected by -optimize.
-
-	-progressive	Create progressive JPEG file (see below).
-
-	-scale M/N	Scale the output image by a factor M/N.  Currently
-			supported scale factors are M/N with all N from 1 to
-			16, where M is the destination DCT size, which is 8 by
-			default (see -block N switch below).
-
-	-targa		Input file is Targa format.  Targa files that contain
-			an "identification" field will not be automatically
-			recognized by cjpeg; for such files you must specify
-			-targa to make cjpeg treat the input as Targa format.
-			For most Targa files, you won't need this switch.
-
-The -quality switch lets you trade off compressed file size against quality of
-the reconstructed image: the higher the quality setting, the larger the JPEG
-file, and the closer the output image will be to the original input.  Normally
-you want to use the lowest quality setting (smallest file) that decompresses
-into something visually indistinguishable from the original image.  For this
-purpose the quality setting should be between 50 and 95; the default of 75 is
-often about right.  If you see defects at -quality 75, then go up 5 or 10
-counts at a time until you are happy with the output image.  (The optimal
-setting will vary from one image to another.)
-
--quality 100 will generate a quantization table of all 1's, minimizing loss
-in the quantization step (but there is still information loss in subsampling,
-as well as roundoff error).  This setting is mainly of interest for
-experimental purposes.  Quality values above about 95 are NOT recommended for
-normal use; the compressed file size goes up dramatically for hardly any gain
-in output image quality.
-
-In the other direction, quality values below 50 will produce very small files
-of low image quality.  Settings around 5 to 10 might be useful in preparing an
-index of a large image library, for example.  Try -quality 2 (or so) for some
-amusing Cubist effects.  (Note: quality values below about 25 generate 2-byte
-quantization tables, which are considered optional in the JPEG standard.
-cjpeg emits a warning message when you give such a quality value, because some
-other JPEG programs may be unable to decode the resulting file.  Use -baseline
-if you need to ensure compatibility at low quality values.)
-
-The -quality option has been extended in IJG version 7 for support of separate
-quality settings for luminance and chrominance (or in general, for every
-provided quantization table slot).  This feature is useful for high-quality
-applications which cannot accept the damage of color data by coarse
-subsampling settings.  You can now easily reduce the color data amount more
-smoothly with finer control without separate subsampling.  The resulting file
-is fully compliant with standard JPEG decoders.
-Note that the -quality ratings refer to the quantization table slots, and that
-the last value is replicated if there are more q-table slots than parameters.
-The default q-table slots are 0 for luminance and 1 for chrominance with
-default tables as given in the JPEG standard.  This is compatible with the old
-behaviour in case that only one parameter is given, which is then used for
-both luminance and chrominance (slots 0 and 1).  More or custom quantization
-tables can be set with -qtables and assigned to components with -qslots
-parameter (see the "wizard" switches below).
-CAUTION: You must explicitly add -sample 1x1 for efficient separate color
-quality selection, since the default value used by library is 2x2!
-
-The -progressive switch creates a "progressive JPEG" file.  In this type of
-JPEG file, the data is stored in multiple scans of increasing quality.  If the
-file is being transmitted over a slow communications link, the decoder can use
-the first scan to display a low-quality image very quickly, and can then
-improve the display with each subsequent scan.  The final image is exactly
-equivalent to a standard JPEG file of the same quality setting, and the total
-file size is about the same --- often a little smaller.
-
-Switches for advanced users:
-
-	-arithmetic	Use arithmetic coding.
-			CAUTION: arithmetic coded JPEG is not yet widely
-			implemented, so many decoders will be unable to
-			view an arithmetic coded JPEG file at all.
-
-	-block N	Set DCT block size.  All N from 1 to 16 are possible.
-			Default is 8 (baseline format).
-			Larger values produce higher compression,
-			smaller values produce higher quality
-			(exact DCT stage possible with 1 or 2; with the
-			default quality of 75 and default Luminance qtable
-			the DCT+Quantization stage is lossless for N=1).
-			CAUTION: An implementation of the JPEG SmartScale
-			extension is required for this feature.  SmartScale
-			enabled JPEG is not yet widely implemented, so many
-			decoders will be unable to view a SmartScale extended
-			JPEG file at all.
-
-	-rgb1		Create RGB JPEG file with reversible color transform.
-			Works like the -rgb switch (see above) and inserts a
-			simple reversible color transform into the processing
-			which significantly improves the compression.
-			Use this switch in combination with the -block N
-			switch (see above) for lossless JPEG coding.
-			CAUTION: A decoder with inverse color transform
-			support is required for this feature.  Reversible
-			color transform support is not yet widely implemented,
-			so many decoders will be unable to view a reversible
-			color transformed JPEG file at all.
-
-	-bgycc		Create big gamut YCC JPEG file.
-			In this type of encoding the color difference
-			components are quantized further by a factor of 2
-			compared to the normal Cb/Cr values, thus creating
-			space to allow larger color values with higher
-			saturation than the normal gamut limits to be encoded.
-			In order to compensate for the loss of color fidelity
-			compared to a normal YCC encoded file, the color
-			quantization tables can be adjusted accordingly.
-			For example, cjpeg -bgycc -quality 80,90 will give
-			similar results as cjpeg -quality 80.
-			CAUTION: For correct decompression a decoder with big
-			gamut YCC support (JFIF version 2) is required.
-			An old decoder may or may not display a big gamut YCC
-			encoded JPEG file, depending on JFIF version check
-			and corresponding warning/error configuration.
-			In case of a granted decompression the old decoder
-			will display the image with half saturated colors.
-
-	-dct int	Use integer DCT method (default).
-	-dct fast	Use fast integer DCT (less accurate).
-	-dct float	Use floating-point DCT method.
-			The float method is very slightly more accurate than
-			the int method, but is much slower unless your machine
-			has very fast floating-point hardware.  Also note that
-			results of the floating-point method may vary slightly
-			across machines, while the integer methods should give
-			the same results everywhere.  The fast integer method
-			is much less accurate than the other two.
-
-	-nosmooth	Don't use high-quality downsampling.
-
-	-restart N	Emit a JPEG restart marker every N MCU rows, or every
-			N MCU blocks if "B" is attached to the number.
-			-restart 0 (the default) means no restart markers.
-
-	-smooth N	Smooth the input image to eliminate dithering noise.
-			N, ranging from 1 to 100, indicates the strength of
-			smoothing.  0 (the default) means no smoothing.
-
-	-maxmemory N	Set limit for amount of memory to use in processing
-			large images.  Value is in thousands of bytes, or
-			millions of bytes if "M" is attached to the number.
-			For example, -max 4m selects 4000000 bytes.  If more
-			space is needed, temporary files will be used.
-
-	-verbose	Enable debug printout.  More -v's give more printout.
-	or  -debug	Also, version information is printed at startup.
-
-The -restart option inserts extra markers that allow a JPEG decoder to
-resynchronize after a transmission error.  Without restart markers, any damage
-to a compressed file will usually ruin the image from the point of the error
-to the end of the image; with restart markers, the damage is usually confined
-to the portion of the image up to the next restart marker.  Of course, the
-restart markers occupy extra space.  We recommend -restart 1 for images that
-will be transmitted across unreliable networks such as Usenet.
-
-The -smooth option filters the input to eliminate fine-scale noise.  This is
-often useful when converting dithered images to JPEG: a moderate smoothing
-factor of 10 to 50 gets rid of dithering patterns in the input file, resulting
-in a smaller JPEG file and a better-looking image.  Too large a smoothing
-factor will visibly blur the image, however.
-
-Switches for wizards:
-
-	-baseline	Force baseline-compatible quantization tables to be
-			generated.  This clamps quantization values to 8 bits
-			even at low quality settings.  (This switch is poorly
-			named, since it does not ensure that the output is
-			actually baseline JPEG.  For example, you can use
-			-baseline and -progressive together.)
-
-	-qtables file	Use the quantization tables given in the specified
-			text file.
-
-	-qslots N[,...] Select which quantization table to use for each color
-			component.
-
-	-sample HxV[,...]  Set JPEG sampling factors for each color component.
-
-	-scans file	Use the scan script given in the specified text file.
-
-The "wizard" switches are intended for experimentation with JPEG.  If you
-don't know what you are doing, DON'T USE THEM.  These switches are documented
-further in the file wizard.txt.
-
-
-DJPEG DETAILS
-
-The basic command line switches for djpeg are:
-
-	-colors N	Reduce image to at most N colors.  This reduces the
-	or -quantize N	number of colors used in the output image, so that it
-			can be displayed on a colormapped display or stored in
-			a colormapped file format.  For example, if you have
-			an 8-bit display, you'd need to reduce to 256 or fewer
-			colors.  (-colors is the recommended name, -quantize
-			is provided only for backwards compatibility.)
-
-	-fast		Select recommended processing options for fast, low
-			quality output.  (The default options are chosen for
-			highest quality output.)  Currently, this is equivalent
-			to "-dct fast -nosmooth -onepass -dither ordered".
-
-	-grayscale	Force gray-scale output even if JPEG file is color.
-			Useful for viewing on monochrome displays; also,
-			djpeg runs noticeably faster in this mode.
-
-	-scale M/N	Scale the output image by a factor M/N.  Currently
-			supported scale factors are M/N with all M from 1 to
-			16, where N is the source DCT size, which is 8 for
-			baseline JPEG.  If the /N part is omitted, then M
-			specifies the DCT scaled size to be applied on the
-			given input.  For baseline JPEG this is equivalent to
-			M/8 scaling, since the source DCT size for baseline
-			JPEG is 8.  Scaling is handy if the image is larger
-			than your screen; also, djpeg runs much faster when
-			scaling down the output.
-
-	-bmp		Select BMP output format (Windows flavor).  8-bit
-			colormapped format is emitted if -colors or -grayscale
-			is specified, or if the JPEG file is gray-scale;
-			otherwise, 24-bit full-color format is emitted.
-
-	-gif		Select GIF output format.  Since GIF does not support
-			more than 256 colors, -colors 256 is assumed (unless
-			you specify a smaller number of colors).  If you
-			specify -fast, the default number of colors is 216.
-
-	-os2		Select BMP output format (OS/2 1.x flavor).  8-bit
-			colormapped format is emitted if -colors or -grayscale
-			is specified, or if the JPEG file is gray-scale;
-			otherwise, 24-bit full-color format is emitted.
-
-	-pnm		Select PBMPLUS (PPM/PGM) output format (this is the
-			default format).  PGM is emitted if the JPEG file is
-			gray-scale or if -grayscale is specified; otherwise
-			PPM is emitted.
-
-	-rle		Select RLE output format.  (Requires URT library.)
-
-	-targa		Select Targa output format.  Gray-scale format is
-			emitted if the JPEG file is gray-scale or if
-			-grayscale is specified; otherwise, colormapped format
-			is emitted if -colors is specified; otherwise, 24-bit
-			full-color format is emitted.
-
-Switches for advanced users:
-
-	-dct int	Use integer DCT method (default).
-	-dct fast	Use fast integer DCT (less accurate).
-	-dct float	Use floating-point DCT method.
-			The float method is very slightly more accurate than
-			the int method, but is much slower unless your machine
-			has very fast floating-point hardware.  Also note that
-			results of the floating-point method may vary slightly
-			across machines, while the integer methods should give
-			the same results everywhere.  The fast integer method
-			is much less accurate than the other two.
-
-	-dither fs	Use Floyd-Steinberg dithering in color quantization.
-	-dither ordered	Use ordered dithering in color quantization.
-	-dither none	Do not use dithering in color quantization.
-			By default, Floyd-Steinberg dithering is applied when
-			quantizing colors; this is slow but usually produces
-			the best results.  Ordered dither is a compromise
-			between speed and quality; no dithering is fast but
-			usually looks awful.  Note that these switches have
-			no effect unless color quantization is being done.
-			Ordered dither is only available in -onepass mode.
-
-	-map FILE	Quantize to the colors used in the specified image
-			file.  This is useful for producing multiple files
-			with identical color maps, or for forcing a predefined
-			set of colors to be used.  The FILE must be a GIF
-			or PPM file.  This option overrides -colors and
-			-onepass.
-
-	-nosmooth	Don't use high-quality upsampling.
-
-	-onepass	Use one-pass instead of two-pass color quantization.
-			The one-pass method is faster and needs less memory,
-			but it produces a lower-quality image.  -onepass is
-			ignored unless you also say -colors N.  Also,
-			the one-pass method is always used for gray-scale
-			output (the two-pass method is no improvement then).
-
-	-maxmemory N	Set limit for amount of memory to use in processing
-			large images.  Value is in thousands of bytes, or
-			millions of bytes if "M" is attached to the number.
-			For example, -max 4m selects 4000000 bytes.  If more
-			space is needed, temporary files will be used.
-
-	-verbose	Enable debug printout.  More -v's give more printout.
-	or  -debug	Also, version information is printed at startup.
-
-
-HINTS FOR CJPEG
-
-Color GIF files are not the ideal input for JPEG; JPEG is really intended for
-compressing full-color (24-bit) images.  In particular, don't try to convert
-cartoons, line drawings, and other images that have only a few distinct
-colors.  GIF works great on these, JPEG does not.  If you want to convert a
-GIF to JPEG, you should experiment with cjpeg's -quality and -smooth options
-to get a satisfactory conversion.  -smooth 10 or so is often helpful.
-
-Avoid running an image through a series of JPEG compression/decompression
-cycles.  Image quality loss will accumulate; after ten or so cycles the image
-may be noticeably worse than it was after one cycle.  It's best to use a
-lossless format while manipulating an image, then convert to JPEG format when
-you are ready to file the image away.
-
-The -optimize option to cjpeg is worth using when you are making a "final"
-version for posting or archiving.  It's also a win when you are using low
-quality settings to make very small JPEG files; the percentage improvement
-is often a lot more than it is on larger files.  (At present, -optimize
-mode is always selected when generating progressive JPEG files.)
-
-GIF input files are no longer supported, to avoid the Unisys LZW patent
-(now expired).
-(Conversion of GIF files to JPEG is usually a bad idea anyway.)
-
-
-HINTS FOR DJPEG
-
-To get a quick preview of an image, use the -grayscale and/or -scale switches.
-"-grayscale -scale 1/8" is the fastest case.
-
-Several options are available that trade off image quality to gain speed.
-"-fast" turns on the recommended settings.
-
-"-dct fast" and/or "-nosmooth" gain speed at a small sacrifice in quality.
-When producing a color-quantized image, "-onepass -dither ordered" is fast but
-much lower quality than the default behavior.  "-dither none" may give
-acceptable results in two-pass mode, but is seldom tolerable in one-pass mode.
-
-If you are fortunate enough to have very fast floating point hardware,
-"-dct float" may be even faster than "-dct fast".  But on most machines
-"-dct float" is slower than "-dct int"; in this case it is not worth using,
-because its theoretical accuracy advantage is too small to be significant
-in practice.
-
-Two-pass color quantization requires a good deal of memory; on MS-DOS machines
-it may run out of memory even with -maxmemory 0.  In that case you can still
-decompress, with some loss of image quality, by specifying -onepass for
-one-pass quantization.
-
-To avoid the Unisys LZW patent (now expired), djpeg produces uncompressed GIF
-files.  These are larger than they should be, but are readable by standard GIF
-decoders.
-
-
-HINTS FOR BOTH PROGRAMS
-
-If more space is needed than will fit in the available main memory (as
-determined by -maxmemory), temporary files will be used.  (MS-DOS versions
-will try to get extended or expanded memory first.)  The temporary files are
-often rather large: in typical cases they occupy three bytes per pixel, for
-example 3*800*600 = 1.44Mb for an 800x600 image.  If you don't have enough
-free disk space, leave out -progressive and -optimize (for cjpeg) or specify
--onepass (for djpeg).
-
-On MS-DOS, the temporary files are created in the directory named by the TMP
-or TEMP environment variable, or in the current directory if neither of those
-exist.  Amiga implementations put the temp files in the directory named by
-JPEGTMP:, so be sure to assign JPEGTMP: to a disk partition with adequate free
-space.
-
-The default memory usage limit (-maxmemory) is set when the software is
-compiled.  If you get an "insufficient memory" error, try specifying a smaller
--maxmemory value, even -maxmemory 0 to use the absolute minimum space.  You
-may want to recompile with a smaller default value if this happens often.
-
-On machines that have "environment" variables, you can define the environment
-variable JPEGMEM to set the default memory limit.  The value is specified as
-described for the -maxmemory switch.  JPEGMEM overrides the default value
-specified when the program was compiled, and itself is overridden by an
-explicit -maxmemory switch.
-
-On MS-DOS machines, -maxmemory is the amount of main (conventional) memory to
-use.  (Extended or expanded memory is also used if available.)  Most
-DOS-specific versions of this software do their own memory space estimation
-and do not need you to specify -maxmemory.
-
-
-JPEGTRAN
-
-jpegtran performs various useful transformations of JPEG files.
-It can translate the coded representation from one variant of JPEG to another,
-for example from baseline JPEG to progressive JPEG or vice versa.  It can also
-perform some rearrangements of the image data, for example turning an image
-from landscape to portrait format by rotation.
-
-jpegtran works by rearranging the compressed data (DCT coefficients), without
-ever fully decoding the image.  Therefore, its transformations are lossless:
-there is no image degradation at all, which would not be true if you used
-djpeg followed by cjpeg to accomplish the same conversion.  But by the same
-token, jpegtran cannot perform lossy operations such as changing the image
-quality.
-
-jpegtran uses a command line syntax similar to cjpeg or djpeg.
-On Unix-like systems, you say:
-	jpegtran [switches] [inputfile] >outputfile
-On most non-Unix systems, you say:
-	jpegtran [switches] inputfile outputfile
-where both the input and output files are JPEG files.
-
-To specify the coded JPEG representation used in the output file,
-jpegtran accepts a subset of the switches recognized by cjpeg:
-	-optimize	Perform optimization of entropy encoding parameters.
-	-progressive	Create progressive JPEG file.
-	-arithmetic	Use arithmetic coding.
-	-restart N	Emit a JPEG restart marker every N MCU rows, or every
-			N MCU blocks if "B" is attached to the number.
-	-scans file	Use the scan script given in the specified text file.
-See the previous discussion of cjpeg for more details about these switches.
-If you specify none of these switches, you get a plain baseline-JPEG output
-file.  The quality setting and so forth are determined by the input file.
-
-The image can be losslessly transformed by giving one of these switches:
-	-flip horizontal	Mirror image horizontally (left-right).
-	-flip vertical		Mirror image vertically (top-bottom).
-	-rotate 90		Rotate image 90 degrees clockwise.
-	-rotate 180		Rotate image 180 degrees.
-	-rotate 270		Rotate image 270 degrees clockwise (or 90 ccw).
-	-transpose		Transpose image (across UL-to-LR axis).
-	-transverse		Transverse transpose (across UR-to-LL axis).
-
-The transpose transformation has no restrictions regarding image dimensions.
-The other transformations operate rather oddly if the image dimensions are not
-a multiple of the iMCU size (usually 8 or 16 pixels), because they can only
-transform complete blocks of DCT coefficient data in the desired way.
-
-jpegtran's default behavior when transforming an odd-size image is designed
-to preserve exact reversibility and mathematical consistency of the
-transformation set.  As stated, transpose is able to flip the entire image
-area.  Horizontal mirroring leaves any partial iMCU column at the right edge
-untouched, but is able to flip all rows of the image.  Similarly, vertical
-mirroring leaves any partial iMCU row at the bottom edge untouched, but is
-able to flip all columns.  The other transforms can be built up as sequences
-of transpose and flip operations; for consistency, their actions on edge
-pixels are defined to be the same as the end result of the corresponding
-transpose-and-flip sequence.
-
-For practical use, you may prefer to discard any untransformable edge pixels
-rather than having a strange-looking strip along the right and/or bottom edges
-of a transformed image.  To do this, add the -trim switch:
-	-trim		Drop non-transformable edge blocks.
-Obviously, a transformation with -trim is not reversible, so strictly speaking
-jpegtran with this switch is not lossless.  Also, the expected mathematical
-equivalences between the transformations no longer hold.  For example,
-"-rot 270 -trim" trims only the bottom edge, but "-rot 90 -trim" followed by
-"-rot 180 -trim" trims both edges.
-
-If you are only interested in perfect transformation, add the -perfect switch:
-	-perfect	Fails with an error if the transformation is not
-			perfect.
-For example you may want to do
-  jpegtran -rot 90 -perfect foo.jpg || djpeg foo.jpg | pnmflip -r90 | cjpeg
-to do a perfect rotation if available or an approximated one if not.
-
-We also offer a lossless-crop option, which discards data outside a given
-image region but losslessly preserves what is inside.  Like the rotate and
-flip transforms, lossless crop is restricted by the current JPEG format: the
-upper left corner of the selected region must fall on an iMCU boundary.  If
-this does not hold for the given crop parameters, we silently move the upper
-left corner up and/or left to make it so, simultaneously increasing the
-region dimensions to keep the lower right crop corner unchanged.  (Thus, the
-output image covers at least the requested region, but may cover more.)
-The adjustment of the region dimensions may be optionally disabled.
-
-The image can be losslessly cropped by giving the switch:
-	-crop WxH+X+Y	Crop to a rectangular subarea of width W, height H
-			starting at point X,Y.
-
-A complementary lossless-wipe option is provided to discard (gray out) data
-inside a given image region while losslessly preserving what is outside:
-	-wipe WxH+X+Y	Wipe (gray out) a rectangular subarea of
-			width W, height H starting at point X,Y.
-
-Other not-strictly-lossless transformation switches are:
-
-	-grayscale	Force grayscale output.
-This option discards the chrominance channels if the input image is YCbCr
-(ie, a standard color JPEG), resulting in a grayscale JPEG file.  The
-luminance channel is preserved exactly, so this is a better method of reducing
-to grayscale than decompression, conversion, and recompression.  This switch
-is particularly handy for fixing a monochrome picture that was mistakenly
-encoded as a color JPEG.  (In such a case, the space savings from getting rid
-of the near-empty chroma channels won't be large; but the decoding time for
-a grayscale JPEG is substantially less than that for a color JPEG.)
-
-	-scale M/N	Scale the output image by a factor M/N.
-Currently supported scale factors are M/N with all M from 1 to 16, where N is
-the source DCT size, which is 8 for baseline JPEG.  If the /N part is omitted,
-then M specifies the DCT scaled size to be applied on the given input.  For
-baseline JPEG this is equivalent to M/8 scaling, since the source DCT size
-for baseline JPEG is 8.  CAUTION: An implementation of the JPEG SmartScale
-extension is required for this feature.  SmartScale enabled JPEG is not yet
-widely implemented, so many decoders will be unable to view a SmartScale
-extended JPEG file at all.
-
-jpegtran also recognizes these switches that control what to do with "extra"
-markers, such as comment blocks:
-	-copy none	Copy no extra markers from source file.  This setting
-			suppresses all comments and other excess baggage
-			present in the source file.
-	-copy comments	Copy only comment markers.  This setting copies
-			comments from the source file, but discards
-			any other inessential (for image display) data.
-	-copy all	Copy all extra markers.  This setting preserves
-			miscellaneous markers found in the source file, such
-			as JFIF thumbnails, Exif data, and Photoshop settings.
-			In some files these extra markers can be sizable.
-The default behavior is -copy comments.  (Note: in IJG releases v6 and v6a,
-jpegtran always did the equivalent of -copy none.)
-
-Additional switches recognized by jpegtran are:
-	-outfile filename
-	-maxmemory N
-	-verbose
-	-debug
-These work the same as in cjpeg or djpeg.
-
-
-THE COMMENT UTILITIES
-
-The JPEG standard allows "comment" (COM) blocks to occur within a JPEG file.
-Although the standard doesn't actually define what COM blocks are for, they
-are widely used to hold user-supplied text strings.  This lets you add
-annotations, titles, index terms, etc to your JPEG files, and later retrieve
-them as text.  COM blocks do not interfere with the image stored in the JPEG
-file.  The maximum size of a COM block is 64K, but you can have as many of
-them as you like in one JPEG file.
-
-We provide two utility programs to display COM block contents and add COM
-blocks to a JPEG file.
-
-rdjpgcom searches a JPEG file and prints the contents of any COM blocks on
-standard output.  The command line syntax is
-	rdjpgcom [-raw] [-verbose] [inputfilename]
-The switch "-raw" (or just "-r") causes rdjpgcom to also output non-printable
-characters in comments, which are normally escaped for security reasons.
-The switch "-verbose" (or just "-v") causes rdjpgcom to also display the JPEG
-image dimensions.  If you omit the input file name from the command line,
-the JPEG file is read from standard input.  (This may not work on some
-operating systems, if binary data can't be read from stdin.)
-
-wrjpgcom adds a COM block, containing text you provide, to a JPEG file.
-Ordinarily, the COM block is added after any existing COM blocks, but you
-can delete the old COM blocks if you wish.  wrjpgcom produces a new JPEG
-file; it does not modify the input file.  DO NOT try to overwrite the input
-file by directing wrjpgcom's output back into it; on most systems this will
-just destroy your file.
-
-The command line syntax for wrjpgcom is similar to cjpeg's.  On Unix-like
-systems, it is
-	wrjpgcom [switches] [inputfilename]
-The output file is written to standard output.  The input file comes from
-the named file, or from standard input if no input file is named.
-
-On most non-Unix systems, the syntax is
-	wrjpgcom [switches] inputfilename outputfilename
-where both input and output file names must be given explicitly.
-
-wrjpgcom understands three switches:
-	-replace		 Delete any existing COM blocks from the file.
-	-comment "Comment text"	 Supply new COM text on command line.
-	-cfile name		 Read text for new COM block from named file.
-(Switch names can be abbreviated.)  If you have only one line of comment text
-to add, you can provide it on the command line with -comment.  The comment
-text must be surrounded with quotes so that it is treated as a single
-argument.  Longer comments can be read from a text file.
-
-If you give neither -comment nor -cfile, then wrjpgcom will read the comment
-text from standard input.  (In this case an input image file name MUST be
-supplied, so that the source JPEG file comes from somewhere else.)  You can
-enter multiple lines, up to 64KB worth.  Type an end-of-file indicator
-(usually control-D or control-Z) to terminate the comment text entry.
-
-wrjpgcom will not add a COM block if the provided comment string is empty.
-Therefore -replace -comment "" can be used to delete all COM blocks from a
-file.
-
-These utility programs do not depend on the IJG JPEG library.  In
-particular, the source code for rdjpgcom is intended as an illustration of
-the minimum amount of code required to parse a JPEG file header correctly.
--- a/DoConfig/fltk/jpeg/wizard.txt
+++ /dev/null
@@ -1,211 +1,0 @@
-Advanced usage instructions for the Independent JPEG Group's JPEG software
-==========================================================================
-
-This file describes cjpeg's "switches for wizards".
-
-The "wizard" switches are intended for experimentation with JPEG by persons
-who are reasonably knowledgeable about the JPEG standard.  If you don't know
-what you are doing, DON'T USE THESE SWITCHES.  You'll likely produce files
-with worse image quality and/or poorer compression than you'd get from the
-default settings.  Furthermore, these switches must be used with caution
-when making files intended for general use, because not all JPEG decoders
-will support unusual JPEG parameter settings.
-
-
-Quantization Table Adjustment
------------------------------
-
-Ordinarily, cjpeg starts with a default set of tables (the same ones given
-as examples in the JPEG standard) and scales them up or down according to
-the -quality setting.  The details of the scaling algorithm can be found in
-jcparam.c.  At very low quality settings, some quantization table entries
-can get scaled up to values exceeding 255.  Although 2-byte quantization
-values are supported by the IJG software, this feature is not in baseline
-JPEG and is not supported by all implementations.  If you need to ensure
-wide compatibility of low-quality files, you can constrain the scaled
-quantization values to no more than 255 by giving the -baseline switch.
-Note that use of -baseline will result in poorer quality for the same file
-size, since more bits than necessary are expended on higher AC coefficients.
-
-You can substitute a different set of quantization values by using the
--qtables switch:
-
-	-qtables file	Use the quantization tables given in the named file.
-
-The specified file should be a text file containing decimal quantization
-values.  The file should contain one to four tables, each of 64 elements.
-The tables are implicitly numbered 0,1,etc. in order of appearance.  Table
-entries appear in normal array order (NOT in the zigzag order in which they
-will be stored in the JPEG file).
-
-Quantization table files are free format, in that arbitrary whitespace can
-appear between numbers.  Also, comments can be included: a comment starts
-with '#' and extends to the end of the line.  Here is an example file that
-duplicates the default quantization tables:
-
-	# Quantization tables given in JPEG spec, section K.1
-
-	# This is table 0 (the luminance table):
-	  16  11  10  16  24  40  51  61
-	  12  12  14  19  26  58  60  55
-	  14  13  16  24  40  57  69  56
-	  14  17  22  29  51  87  80  62
-	  18  22  37  56  68 109 103  77
-	  24  35  55  64  81 104 113  92
-	  49  64  78  87 103 121 120 101
-	  72  92  95  98 112 100 103  99
-
-	# This is table 1 (the chrominance table):
-	  17  18  24  47  99  99  99  99
-	  18  21  26  66  99  99  99  99
-	  24  26  56  99  99  99  99  99
-	  47  66  99  99  99  99  99  99
-	  99  99  99  99  99  99  99  99
-	  99  99  99  99  99  99  99  99
-	  99  99  99  99  99  99  99  99
-	  99  99  99  99  99  99  99  99
-
-If the -qtables switch is used without -quality, then the specified tables
-are used exactly as-is.  If both -qtables and -quality are used, then the
-tables taken from the file are scaled in the same fashion that the default
-tables would be scaled for that quality setting.  If -baseline appears, then
-the quantization values are constrained to the range 1-255.
-
-By default, cjpeg will use quantization table 0 for luminance components and
-table 1 for chrominance components.  To override this choice, use the -qslots
-switch:
-
-	-qslots N[,...]		Select which quantization table to use for
-				each color component.
-
-The -qslots switch specifies a quantization table number for each color
-component, in the order in which the components appear in the JPEG SOF marker.
-For example, to create a separate table for each of Y,Cb,Cr, you could
-provide a -qtables file that defines three quantization tables and say
-"-qslots 0,1,2".  If -qslots gives fewer table numbers than there are color
-components, then the last table number is repeated as necessary.
-
-
-Sampling Factor Adjustment
---------------------------
-
-By default, cjpeg uses 2:1 horizontal and vertical downsampling when
-compressing YCbCr data, and no downsampling for all other color spaces.
-You can override this default with the -sample switch:
-
-	-sample HxV[,...]	Set JPEG sampling factors for each color
-				component.
-
-The -sample switch specifies the JPEG sampling factors for each color
-component, in the order in which they appear in the JPEG SOF marker.
-If you specify fewer HxV pairs than there are components, the remaining
-components are set to 1x1 sampling.  For example, the default YCbCr setting
-is equivalent to "-sample 2x2,1x1,1x1", which can be abbreviated to
-"-sample 2x2".
-
-There are still some JPEG decoders in existence that support only 2x1
-sampling (also called 4:2:2 sampling).  Compatibility with such decoders can
-be achieved by specifying "-sample 2x1".  This is not recommended unless
-really necessary, since it increases file size and encoding/decoding time
-with very little quality gain.
-
-
-Multiple Scan / Progression Control
------------------------------------
-
-By default, cjpeg emits a single-scan sequential JPEG file.  The
--progressive switch generates a progressive JPEG file using a default series
-of progression parameters.  You can create multiple-scan sequential JPEG
-files or progressive JPEG files with custom progression parameters by using
-the -scans switch:
-
-	-scans file	Use the scan sequence given in the named file.
-
-The specified file should be a text file containing a "scan script".
-The script specifies the contents and ordering of the scans to be emitted.
-Each entry in the script defines one scan.  A scan definition specifies
-the components to be included in the scan, and for progressive JPEG it also
-specifies the progression parameters Ss,Se,Ah,Al for the scan.  Scan
-definitions are separated by semicolons (';').  A semicolon after the last
-scan definition is optional.
-
-Each scan definition contains one to four component indexes, optionally
-followed by a colon (':') and the four progressive-JPEG parameters.  The
-component indexes denote which color component(s) are to be transmitted in
-the scan.  Components are numbered in the order in which they appear in the
-JPEG SOF marker, with the first component being numbered 0.  (Note that these
-indexes are not the "component ID" codes assigned to the components, just
-positional indexes.)
-
-The progression parameters for each scan are:
-	Ss	Zigzag index of first coefficient included in scan
-	Se	Zigzag index of last coefficient included in scan
-	Ah	Zero for first scan of a coefficient, else Al of prior scan
-	Al	Successive approximation low bit position for scan
-If the progression parameters are omitted, the values 0,63,0,0 are used,
-producing a sequential JPEG file.  cjpeg automatically determines whether
-the script represents a progressive or sequential file, by observing whether
-Ss and Se values other than 0 and 63 appear.  (The -progressive switch is
-not needed to specify this; in fact, it is ignored when -scans appears.)
-The scan script must meet the JPEG restrictions on progression sequences.
-(cjpeg checks that the spec's requirements are obeyed.)
-
-Scan script files are free format, in that arbitrary whitespace can appear
-between numbers and around punctuation.  Also, comments can be included: a
-comment starts with '#' and extends to the end of the line.  For additional
-legibility, commas or dashes can be placed between values.  (Actually, any
-single punctuation character other than ':' or ';' can be inserted.)  For
-example, the following two scan definitions are equivalent:
-	0 1 2: 0 63 0 0;
-	0,1,2 : 0-63, 0,0 ;
-
-Here is an example of a scan script that generates a partially interleaved
-sequential JPEG file:
-
-	0;			# Y only in first scan
-	1 2;			# Cb and Cr in second scan
-
-Here is an example of a progressive scan script using only spectral selection
-(no successive approximation):
-
-	# Interleaved DC scan for Y,Cb,Cr:
-	0,1,2: 0-0,   0, 0 ;
-	# AC scans:
-	0:     1-2,   0, 0 ;	# First two Y AC coefficients
-	0:     3-5,   0, 0 ;	# Three more
-	1:     1-63,  0, 0 ;	# All AC coefficients for Cb
-	2:     1-63,  0, 0 ;	# All AC coefficients for Cr
-	0:     6-9,   0, 0 ;	# More Y coefficients
-	0:     10-63, 0, 0 ;	# Remaining Y coefficients
-
-Here is an example of a successive-approximation script.  This is equivalent
-to the default script used by "cjpeg -progressive" for YCbCr images:
-
-	# Initial DC scan for Y,Cb,Cr (lowest bit not sent)
-	0,1,2: 0-0,   0, 1 ;
-	# First AC scan: send first 5 Y AC coefficients, minus 2 lowest bits:
-	0:     1-5,   0, 2 ;
-	# Send all Cr,Cb AC coefficients, minus lowest bit:
-	# (chroma data is usually too small to be worth subdividing further;
-	#  but note we send Cr first since eye is least sensitive to Cb)
-	2:     1-63,  0, 1 ;
-	1:     1-63,  0, 1 ;
-	# Send remaining Y AC coefficients, minus 2 lowest bits:
-	0:     6-63,  0, 2 ;
-	# Send next-to-lowest bit of all Y AC coefficients:
-	0:     1-63,  2, 1 ;
-	# At this point we've sent all but the lowest bit of all coefficients.
-	# Send lowest bit of DC coefficients
-	0,1,2: 0-0,   1, 0 ;
-	# Send lowest bit of AC coefficients
-	2:     1-63,  1, 0 ;
-	1:     1-63,  1, 0 ;
-	# Y AC lowest bit scan is last; it's usually the largest scan
-	0:     1-63,  1, 0 ;
-
-It may be worth pointing out that this script is tuned for quality settings
-of around 50 to 75.  For lower quality settings, you'd probably want to use
-a script with fewer stages of successive approximation (otherwise the
-initial scans will be really bad).  For higher quality settings, you might
-want to use more stages of successive approximation (so that the initial
-scans are not too large).
--- a/DoConfig/fltk/lib/README
+++ /dev/null
@@ -1,16 +1,0 @@
-README.lib
-----------
-
-This README file is a placeholder for library files on your
-system.
-
-Under Microsoft Windows a successful build of all projects and
-configurations will contain debug and release libraries for you
-to link to - all are built using the multi-threaded DLL
-settings.  The DLL files (fltkdll.dll and fltkdlld.dll) required
-for a complete DLL-based binary distribution are located in the
-"visualc" directory.
-
-Under UNIX a single set of library files will be built, with or
-without debug information depending on the options you provided
-to the configure script.
--- a/DoConfig/fltk/mac_endianness.h
+++ /dev/null
@@ -1,29 +1,0 @@
-/*
- * "$Id$"
- *
- * Mac-specific configuration file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2011 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
- 
-#ifdef __APPLE__
-#  ifdef __BIG_ENDIAN__
-#    define WORDS_BIGENDIAN 1
-#  else
-#    define WORDS_BIGENDIAN 0
-#  endif
-#endif
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/makeinclude.in
+++ /dev/null
@@ -1,183 +1,0 @@
-#
-# "$Id$"
-#
-# Make include file for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2014 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-# FLTK version numbers
-
-FL_MAJOR_VERSION	= @FL_MAJOR_VERSION@
-FL_MINOR_VERSION	= @FL_MINOR_VERSION@
-FL_PATCH_VERSION	= @FL_PATCH_VERSION@
-
-FL_DSO_VERSION		= @FL_DSO_VERSION@
-FL_ABI_VERSION		= @FL_ABI_VERSION@
-FL_VERSION		= @FL_VERSION@
-
-# Standard configure variables
-
-prefix		= @prefix@
-exec_prefix	= @exec_prefix@
-bindir		= @bindir@
-datadir		= @datadir@
-datarootdir	= @datarootdir@
-includedir	= @includedir@
-libdir		= @libdir@
-mandir		= @mandir@
-srcdir		= @srcdir@
-docdir		= $(datadir)/doc/fltk
-VPATH		= @srcdir@
-USEMMFILES	= @USEMMFILES@
-
-# programs we use...
-DOXYDOC		= @DOXYDOC@
-INSTALL		= @INSTALL@
-LN		= ln -s
-NROFF		= @NROFF@
-RM		= rm -f
-RMDIR		= rm -rf
-SHELL		= /bin/sh
-STRIP		= strip
-
-# compiler names:
-CXX		= @CXX@
-CC		= @CC@
-MAKEDEPEND	= @MAKEDEPEND@
-
-# (Windows) resource compiler
-RC		= @RC@
-
-# flags for C++ compiler:
-ARCHFLAGS	= @ARCHFLAGS@
-OPTIM		= @OPTIM@
-CFLAGS		= $(OPTIM) @LARGEFILE@ @PTHREAD_FLAGS@ @CPPFLAGS@ @CFLAGS@
-CXXFLAGS	= $(OPTIM) @LARGEFILE@ @PTHREAD_FLAGS@ @CPPFLAGS@ @CXXFLAGS@ $(FLTKFLAGS)
-
-# program to make the archive:
-LIBNAME		= @LIBNAME@
-FLLIBNAME	= @FLLIBNAME@
-GLLIBNAME	= @GLLIBNAME@
-IMGLIBNAME	= @IMGLIBNAME@
-CAIROLIBNAME	= @CAIROLIBNAME@
-LIBCOMMAND	= @LIBCOMMAND@
-LIBEXT		= @LIBEXT@
-RANLIB		= @RANLIB@
-DSONAME		= @DSONAME@
-FLDSONAME	= @FLDSONAME@
-GLDSONAME	= @GLDSONAME@
-IMGDSONAME	= @IMGDSONAME@
-CAIRODSONAME	= @CAIRODSONAME@
-DSOCOMMAND	= @DSOCOMMAND@
-
-LIBBASENAME	= @LIBBASENAME@
-FLLIBBASENAME	= @FLLIBBASENAME@
-GLLIBBASENAME	= @GLLIBBASENAME@
-IMGLIBBASENAME	= @IMGLIBBASENAME@
-CAIROLIBBASENAME= @CAIROLIBBASENAME@
-
-# libraries to link with:
-AUDIOLIBS	= @AUDIOLIBS@
-CAIROLIBS	= @CAIROLIBS@
-CAIROFLAGS	= @CAIROFLAGS@
-DSOFLAGS	= -L. @DSOFLAGS@
-LDFLAGS		= $(OPTIM) @LDFLAGS@
-LDLIBS		= @LIBS@
-GLDLIBS		= @GLLIB@ @LIBS@
-LINKFLTK	= @LINKFLTK@
-LINKFLTKGL	= @LINKFLTKGL@
-LINKFLTKFORMS	= @LINKFLTKFORMS@ @LINKFLTK@
-LINKFLTKIMG	= @LINKFLTKIMG@ @LINKFLTK@ $(IMAGELIBS)
-LINKFLTKCAIRO	= @LINKFLTKCAIRO@ $(CAIROLIBS)
-FLTKCAIROOPTION = @FLTKCAIROOPTION@
-LINKSHARED	= @DSOLINK@ @LINKSHARED@ $(IMAGELIBS) $(CAIROLIBS)
-IMAGELIBS	= -L../lib @IMAGELIBS@
-
-# image libraries to build...
-IMAGEDIRS	= @JPEG@ @ZLIB@ @PNG@
-CAIRODIR	= @CAIRODIR@
-# The extension to use for executables...
-EXEEXT		= @EXEEXT@
-
-# Do we build the OpenGL demos?
-GLDEMOS		= @GLDEMOS@
-
-# Do we build the threads demo?
-THREADS		= @THREADS@
-
-# Name of FLUID executable we install
-FLUID		= @FLUID@$(EXEEXT)
-
-# Possible steps for OS X build only
-OSX_ONLY	= @OSX_ONLY@
-
-# Man page extensions...
-CAT1EXT		= @CAT1EXT@
-CAT3EXT		= @CAT3EXT@
-CAT6EXT		= @CAT6EXT@
-
-#
-# Installation programs...
-#
-
-INSTALL_BIN	= $(INSTALL) -m 755
-INSTALL_DATA	= $(INSTALL) -m 644
-INSTALL_DIR	= $(INSTALL) -d 
-INSTALL_LIB	= $(INSTALL) -m 755
-INSTALL_MAN	= $(INSTALL) -m 644
-INSTALL_SCRIPT	= $(INSTALL) -m 755
-
-# Additional GUI install/uninstall targets...
-INSTALL_DESKTOP	= @INSTALL_DESKTOP@
-UNINSTALL_DESKTOP = @UNINSTALL_DESKTOP@
-
-# Be quiet when building...
-.SILENT:
-
-# Build commands and filename extensions...
-.SUFFIXES:	.0 .1 .3 .6 .c .cxx .mm .h .fl .man .o .z $(EXEEXT)
-
-.o$(EXEEXT):
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(LDFLAGS) $< $(LINKFLTK) $(LDLIBS) -o $@
-	$(OSX_ONLY) ../fltk-config --post $@
-
-.c.o:
-	echo Compiling $<...
-	$(CC) -I.. $(ARCHFLAGS) @PNGINC@ @JPEGINC@ @ZLIBINC@ $(CFLAGS) -c $< -o $@
-
-.cxx.o:
-	echo Compiling $<...
-	$(CXX) -I.. $(ARCHFLAGS) @PNGINC@ @JPEGINC@ @ZLIBINC@ $(CXXFLAGS) -c $< -o $@
-	
-.mm.o:
-	echo Compiling $<...
-	$(CXX) -I.. $(ARCHFLAGS) $(CXXFLAGS) -x objective-c++ -c $< -o $@
-
-
-.man.0 .man.1 .man.3 .man.6:
-	echo Formatting $<...
-	rm -f $@
-	$(NROFF) -man $< >$@
-
-.man.z:
-	echo Formatting $<...
-	rm -f $@ t.z
-	$(NROFF) -man $< >t
-	pack -f t
-	mv t.z $@
-
-#
-# End of "$Id$".
-#
binary files a/DoConfig/fltk/misc/MacRoman_utf-8.png /dev/null differ
--- a/DoConfig/fltk/misc/MacRoman_utf-8.txt
+++ /dev/null
@@ -1,26 +1,0 @@
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |  Ä  Å  Ç  É  Ñ  Ö  Ü  á  à  â  ä  ã  å  ç  é  è |
-| 220 | 144 | 9 |  ê  ë  í  ì  î  ï  ñ  ó  ò  ô  ö  õ  ú  ù  û  ü |
-| 240 | 160 | A |  †  °  ¢  £  §  •  ¶  ß  ®  ©  ™  ´  ¨  ≠  Æ  Ø |
-| 260 | 176 | B |  ∞  ±  ≤  ≥  ¥  µ  ∂  ∑  ∏  π  ∫  ª  º  Ω  æ  ø |
-| 300 | 192 | C |  ¿  ¡  ¬  √  ƒ  ≈  ∆  «  »  …     À  à  Õ  Œ  œ |
-| 320 | 208 | D |  –  —  “  ”  ‘  ’  ÷  ◊  ÿ  Ÿ  ⁄  €  ‹  ›  fi  fl |
-| 340 | 224 | E |  ‡  ·  ‚  „  ‰  Â  Ê  Á  Ë  È  Í  Î  Ï  Ì  Ó  Ô |
-| 360 | 240 | F |    Ò  Ú  Û  Ù  ı  ˆ  ˜  ¯  ˘  ˙  ˚  ¸  ˝  ˛  ˇ |
-+-----+-----+---+-------------------------------------------------+
-
-File:		MacRoman_utf-8.txt
-Encoding:	UTF-8
-Note:		0xF0 (MacRoman) = U+F8FF (Unicode) = Apple logo
--- a/DoConfig/fltk/misc/README
+++ /dev/null
@@ -1,109 +1,0 @@
-//
-// $Id$
-//
-// Miscellaneous files for developers:
-//
-
-Developer files for testing UTF-8 character sets and functions:
-================================================================================
-
-Open these files in test/editor and compare the contents.
-
-Test scrolling, move the cursor over the "special" characters (> U+007F),
-watch cursor movement, drawing artefacts, etc..
-
-CAUTION: Do not 'cat' these files unless you know what you're doing.
-Especially the cp1252* files can contain control characters that may freeze
-your screen (xterm etc.).
-
-Detailed file description:
-
-The "native" encoded files contain 8-bit characters with binary values that
-can be seen at the top and left borders, resp. (add both). They should look
-like the image file (cp1252.png) on Windows only (if the current codepage is
-"Western, CP 1252", a superset of ISO-8859-1). They will look different with
-other codepages or on Linux, Unix, or Mac OS X. Use these files with FLTK 1.1
-or an editor with the corresponding codepage or locale.
-
-The UTF-8 encoded files should be usable with FLTK 1.3, FLTK 2, or FLTK 3
-(future). They contain UTF-8 encoded characters at the table positions,
-where the corresponding ISO-8859-1, Windows copepage 1252, or Mac OS Roman
-characters would be. They should look identical as the image file (cp1252.png)
-or MacRoman_utf-8.png, resp., on all UTF-8 capable systems.
-
-The files with names iso-8859-1_* contain only the ISO-8859-1 subset, i.e.
-the colums with character codes 0x80 - 0x9F (U+0080 - U+009F) are empty.
-
-Mac OS Roman is the Apple Mac native character set before it became Unicode
-by default (OS X). The corresponding files are ordered as they would appear
-with the native character set / encoding.
-
-The *.html files contain a character encoding meta tag, so that they should
-be viewable with all standard browsers. They can be used for cut'n'paste and
-drag'n'drop tests from a 'native' application (browser) to FLTK, e.g.
-test/editor or test/input.
-
-Special Notes:
-
-  0x22 (U+0022: "quotation mark") is doubled intentionally. This has been
-  done for better results in test/editor, because otherwise the rest of the
-  file would be shown in blue color (as a comment).
-
-  0x98 (U+02DC: "small tilde") may not display correctly on Windows systems.
-  I saw the same effect with other Windows editors as well. The following
-  characters may be displayed "shifted left" by one position. Seems to work
-  correctly on Linux (with UTF-8 encoding).
-  
-  Mac OS Roman: 0xF0 (U+F8FF: "Apple logo") may not be printable, depending
-  on installed fonts on other systems.
-
-  There may currently be drawing artefacts when moving the cursor forwards
-  and/or backwards over some "special" characters.
-
-References:
-
-  http://unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
-  http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT
-  http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT
-  http://en.wikipedia.org/wiki/Mac_OS_Roman
-
-Files:
-
-The first two files are images of how it should look:
-
-  cp1252.png		full Windows Codepage 1252 (Western)
-  MacRoman_utf-8.png	full Mac OS Roman character set (w/o Apple logo)
-
-The following four files contain the full Windows Codepage 1252:
-
-  cp1252.txt		native (Windows) encoding, suitable for FLTK 1.1
-  cp1252_utf-8.txt	UTF-8 encoding, suitable for FLTK 1.3 and greater
-  cp1252.html		native (Windows) encoding, use with any browser
-  cp1252_utf-8.html	UTF-8 encoding, use with any browser
-
-The following two files contain only the ISO-8859-1 subset:
-
-  iso-8859-1.txt	native (Windows) encoding, suitable for FLTK 1.1
-  iso-8859-1_utf-8.txt	UTF-8 encoding, suitable for FLTK 1.3 and greater
-
-The following file contains the full Mac OS Roman character set:
-
-  MacRoman_utf-8.txt	UTF-8 encoding, suitable for FLTK 1.3 and greater
-			(use cp1252.txt with FLTK 1.1 on Mac OS instead)
-
-Other developer support files:
-================================================================================
-
-  doxystar.cxx		Use this to reformat doxygen comments (test only).
-
-	Compile with:	g++ -o doxystar doxystar.cxx
-
-	Usage:		cat file | doxystar
-
-  DO NOT USE this for current code development!
-
-  It is intended for testing of future code reformatting !
-
-//
-// End of $Id$.
-//
--- a/DoConfig/fltk/misc/config.guess
+++ /dev/null
@@ -1,1473 +1,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2017 Free Software Foundation, Inc.
-
-timestamp='2017-05-27'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-#
-# Please send patches to <config-patches@gnu.org>.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2017 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-	for c in cc gcc c89 c99 ; do
-	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-	     CC_FOR_BUILD="$c"; break ;
-	  fi ;
-	done ;
-	if test x"$CC_FOR_BUILD" = x ; then
-	  CC_FOR_BUILD=no_compiler_found ;
-	fi
-	;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-	PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-	# If the system lacks a compiler, then just pick glibc.
-	# We could probably try harder.
-	LIBC=gnu
-
-	eval $set_cc_for_build
-	cat <<-EOF > $dummy.c
-	#include <features.h>
-	#if defined(__UCLIBC__)
-	LIBC=uclibc
-	#elif defined(__dietlibc__)
-	LIBC=dietlibc
-	#else
-	LIBC=gnu
-	#endif
-	EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-	;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-	# switched to ELF, *-*-netbsd* would select the old
-	# object file format.  This provides both forward
-	# compatibility and a consistent mechanism for selecting the
-	# object file format.
-	#
-	# Note: NetBSD doesn't particularly care about the vendor
-	# portion of the name.  We always set it to "unknown".
-	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-	    /sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || \
-	    echo unknown)`
-	case "${UNAME_MACHINE_ARCH}" in
-	    armeb) machine=armeb-unknown ;;
-	    arm*) machine=arm-unknown ;;
-	    sh3el) machine=shl-unknown ;;
-	    sh3eb) machine=sh-unknown ;;
-	    sh5el) machine=sh5le-unknown ;;
-	    earmv*)
-		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
-		machine=${arch}${endian}-unknown
-		;;
-	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-	esac
-	# The Operating System including object format, if it has switched
-	# to ELF recently (or will in the future) and ABI.
-	case "${UNAME_MACHINE_ARCH}" in
-	    earm*)
-		os=netbsdelf
-		;;
-	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-		eval $set_cc_for_build
-		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-			| grep -q __ELF__
-		then
-		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-		    # Return netbsd for either.  FIX?
-		    os=netbsd
-		else
-		    os=netbsdelf
-		fi
-		;;
-	    *)
-		os=netbsd
-		;;
-	esac
-	# Determine ABI tags.
-	case "${UNAME_MACHINE_ARCH}" in
-	    earm*)
-		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
-		;;
-	esac
-	# The OS release
-	# Debian GNU/NetBSD machines have a different userland, and
-	# thus, need a distinct triplet. However, they do not need
-	# kernel version information, so it can be replaced with a
-	# suitable tag, in the style of linux-gnu.
-	case "${UNAME_VERSION}" in
-	    Debian*)
-		release='-gnu'
-		;;
-	    *)
-		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
-		;;
-	esac
-	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-	# contains redundant information, the shorter form:
-	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}${abi}"
-	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-	exit ;;
-    *:OpenBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-	exit ;;
-    *:LibertyBSD:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
-	exit ;;
-    *:ekkoBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit ;;
-    *:SolidBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-	exit ;;
-    macppc:MirBSD:*:*)
-	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:MirBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit ;;
-    *:Sortix:*:*)
-	echo ${UNAME_MACHINE}-unknown-sortix
-	exit ;;
-    alpha:OSF1:*:*)
-	case $UNAME_RELEASE in
-	*4.0)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-		;;
-	*5.*)
-		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-		;;
-	esac
-	# According to Compaq, /usr/sbin/psrinfo has been available on
-	# OSF/1 and Tru64 systems produced since 1995.  I hope that
-	# covers most systems running today.  This code pipes the CPU
-	# types through head -n 1, so we only detect the type of CPU 0.
-	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-	case "$ALPHA_CPU_TYPE" in
-	    "EV4 (21064)")
-		UNAME_MACHINE=alpha ;;
-	    "EV4.5 (21064)")
-		UNAME_MACHINE=alpha ;;
-	    "LCA4 (21066/21068)")
-		UNAME_MACHINE=alpha ;;
-	    "EV5 (21164)")
-		UNAME_MACHINE=alphaev5 ;;
-	    "EV5.6 (21164A)")
-		UNAME_MACHINE=alphaev56 ;;
-	    "EV5.6 (21164PC)")
-		UNAME_MACHINE=alphapca56 ;;
-	    "EV5.7 (21164PC)")
-		UNAME_MACHINE=alphapca57 ;;
-	    "EV6 (21264)")
-		UNAME_MACHINE=alphaev6 ;;
-	    "EV6.7 (21264A)")
-		UNAME_MACHINE=alphaev67 ;;
-	    "EV6.8CB (21264C)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.8AL (21264B)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.8CX (21264D)")
-		UNAME_MACHINE=alphaev68 ;;
-	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE=alphaev69 ;;
-	    "EV7 (21364)")
-		UNAME_MACHINE=alphaev7 ;;
-	    "EV7.9 (21364A)")
-		UNAME_MACHINE=alphaev79 ;;
-	esac
-	# A Pn.n version is a patched version.
-	# A Vn.n version is a released version.
-	# A Tn.n version is a released field test version.
-	# A Xn.n version is an unreleased experimental baselevel.
-	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
-	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-	exitcode=$?
-	trap '' 0
-	exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# Should we change UNAME_MACHINE based on the output of uname instead
-	# of the specific Alpha model?
-	echo alpha-pc-interix
-	exit ;;
-    21064:Windows_NT:50:3)
-	echo alpha-dec-winnt3.5
-	exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-unknown-sysv4
-	exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-	echo ${UNAME_MACHINE}-unknown-morphos
-	exit ;;
-    *:OS/390:*:*)
-	echo i370-ibm-openedition
-	exit ;;
-    *:z/VM:*:*)
-	echo s390-ibm-zvmoe
-	exit ;;
-    *:OS400:*:*)
-	echo powerpc-ibm-os400
-	exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-	echo arm-unknown-riscos
-	exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-	echo hppa1.1-hitachi-hiuxmpp
-	exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-	if test "`(/bin/universe) 2>/dev/null`" = att ; then
-		echo pyramid-pyramid-sysv3
-	else
-		echo pyramid-pyramid-bsd
-	fi
-	exit ;;
-    NILE*:*:*:dcosx)
-	echo pyramid-pyramid-svr4
-	exit ;;
-    DRS?6000:unix:4.0:6*)
-	echo sparc-icl-nx6
-	exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7; exit ;;
-	esac ;;
-    s390x:SunOS:*:*)
-	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4H:SunOS:5.*:*)
-	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-	echo i386-pc-auroraux${UNAME_RELEASE}
-	exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-	eval $set_cc_for_build
-	SUN_ARCH=i386
-	# If there is a compiler, see if it is configured for 64-bit objects.
-	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		grep IS_64BIT_ARCH >/dev/null
-	    then
-		SUN_ARCH=x86_64
-	    fi
-	fi
-	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:6*:*)
-	# According to config.sub, this is the proper way to canonicalize
-	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-	# it's likely to be more like Solaris than SunOS4.
-	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    sun4*:SunOS:*:*)
-	case "`/usr/bin/arch -k`" in
-	    Series*|S4*)
-		UNAME_RELEASE=`uname -v`
-		;;
-	esac
-	# Japanese Language versions have a version number like `4.1.3-JL'.
-	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit ;;
-    sun3*:SunOS:*:*)
-	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit ;;
-    sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
-	case "`/bin/arch`" in
-	    sun3)
-		echo m68k-sun-sunos${UNAME_RELEASE}
-		;;
-	    sun4)
-		echo sparc-sun-sunos${UNAME_RELEASE}
-		;;
-	esac
-	exit ;;
-    aushp:SunOS:*:*)
-	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-	echo m68k-atari-mint${UNAME_RELEASE}
-	exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-	echo m68k-milan-mint${UNAME_RELEASE}
-	exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-	echo m68k-hades-mint${UNAME_RELEASE}
-	exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-	echo m68k-unknown-mint${UNAME_RELEASE}
-	exit ;;
-    m68k:machten:*:*)
-	echo m68k-apple-machten${UNAME_RELEASE}
-	exit ;;
-    powerpc:machten:*:*)
-	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit ;;
-    RISC*:Mach:*:*)
-	echo mips-dec-mach_bsd4.3
-	exit ;;
-    RISC*:ULTRIX:*:*)
-	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    VAX*:ULTRIX*:*:*)
-	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-	#if defined (host_mips) && defined (MIPSEB)
-	#if defined (SYSTYPE_SYSV)
-	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_SVR4)
-	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-	#endif
-	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-	#endif
-	#endif
-	  exit (-1);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c &&
-	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-	  SYSTEM_NAME=`$dummy $dummyarg` &&
-	    { echo "$SYSTEM_NAME"; exit; }
-	echo mips-mips-riscos${UNAME_RELEASE}
-	exit ;;
-    Motorola:PowerMAX_OS:*:*)
-	echo powerpc-motorola-powermax
-	exit ;;
-    Motorola:*:4.3:PL8-*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-	echo powerpc-harris-powermax
-	exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-	echo powerpc-harris-powerunix
-	exit ;;
-    m88k:CX/UX:7*:*)
-	echo m88k-harris-cxux7
-	exit ;;
-    m88k:*:4*:R4*)
-	echo m88k-motorola-sysv4
-	exit ;;
-    m88k:*:3*:R3*)
-	echo m88k-motorola-sysv3
-	exit ;;
-    AViiON:dgux:*:*)
-	# DG/UX returns AViiON for all architectures
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-	then
-	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-	       [ ${TARGET_BINARY_INTERFACE}x = x ]
-	    then
-		echo m88k-dg-dgux${UNAME_RELEASE}
-	    else
-		echo m88k-dg-dguxbcs${UNAME_RELEASE}
-	    fi
-	else
-	    echo i586-dg-dgux${UNAME_RELEASE}
-	fi
-	exit ;;
-    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
-	echo m88k-dolphin-sysv3
-	exit ;;
-    M88*:*:R3*:*)
-	# Delta 88k system running SVR3
-	echo m88k-motorola-sysv3
-	exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-	echo m88k-tektronix-sysv3
-	exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-	echo m68k-tektronix-bsd
-	exit ;;
-    *:IRIX*:*:*)
-	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-	echo i386-ibm-aix
-	exit ;;
-    ia64:AIX:*:*)
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:2:3)
-	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-		eval $set_cc_for_build
-		sed 's/^		//' << EOF >$dummy.c
-		#include <sys/systemcfg.h>
-
-		main()
-			{
-			if (!__power_pc())
-				exit(1);
-			puts("powerpc-ibm-aix3.2.5");
-			exit(0);
-			}
-EOF
-		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-		then
-			echo "$SYSTEM_NAME"
-		else
-			echo rs6000-ibm-aix3.2.5
-		fi
-	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-		echo rs6000-ibm-aix3.2.4
-	else
-		echo rs6000-ibm-aix3.2
-	fi
-	exit ;;
-    *:AIX:*:[4567])
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-		IBM_ARCH=rs6000
-	else
-		IBM_ARCH=powerpc
-	fi
-	if [ -x /usr/bin/lslpp ] ; then
-		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
-			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
-	else
-		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-	fi
-	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit ;;
-    *:AIX:*:*)
-	echo rs6000-ibm-aix
-	exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-	echo romp-ibm-bsd4.4
-	exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-	echo rs6000-bull-bosx
-	exit ;;
-    DPX/2?00:B.O.S.:*:*)
-	echo m68k-bull-sysv3
-	exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-	echo m68k-hp-bsd
-	exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-	echo m68k-hp-bsd4.4
-	exit ;;
-    9000/[34678]??:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	case "${UNAME_MACHINE}" in
-	    9000/31? )            HP_ARCH=m68000 ;;
-	    9000/[34]?? )         HP_ARCH=m68k ;;
-	    9000/[678][0-9][0-9])
-		if [ -x /usr/bin/getconf ]; then
-		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-		    case "${sc_cpu_version}" in
-		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
-		      532)                      # CPU_PA_RISC2_0
-			case "${sc_kernel_bits}" in
-			  32) HP_ARCH=hppa2.0n ;;
-			  64) HP_ARCH=hppa2.0w ;;
-			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
-			esac ;;
-		    esac
-		fi
-		if [ "${HP_ARCH}" = "" ]; then
-		    eval $set_cc_for_build
-		    sed 's/^		//' << EOF >$dummy.c
-
-		#define _HPUX_SOURCE
-		#include <stdlib.h>
-		#include <unistd.h>
-
-		int main ()
-		{
-		#if defined(_SC_KERNEL_BITS)
-		    long bits = sysconf(_SC_KERNEL_BITS);
-		#endif
-		    long cpu  = sysconf (_SC_CPU_VERSION);
-
-		    switch (cpu)
-			{
-			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-			case CPU_PA_RISC2_0:
-		#if defined(_SC_KERNEL_BITS)
-			    switch (bits)
-				{
-				case 64: puts ("hppa2.0w"); break;
-				case 32: puts ("hppa2.0n"); break;
-				default: puts ("hppa2.0"); break;
-				} break;
-		#else  /* !defined(_SC_KERNEL_BITS) */
-			    puts ("hppa2.0"); break;
-		#endif
-			default: puts ("hppa1.0"); break;
-			}
-		    exit (0);
-		}
-EOF
-		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-		    test -z "$HP_ARCH" && HP_ARCH=hppa
-		fi ;;
-	esac
-	if [ ${HP_ARCH} = hppa2.0w ]
-	then
-	    eval $set_cc_for_build
-
-	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-	    # generating 64-bit code.  GNU and HP use different nomenclature:
-	    #
-	    # $ CC_FOR_BUILD=cc ./config.guess
-	    # => hppa2.0w-hp-hpux11.23
-	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-	    # => hppa64-hp-hpux11.23
-
-	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
-		grep -q __LP64__
-	    then
-		HP_ARCH=hppa2.0w
-	    else
-		HP_ARCH=hppa64
-	    fi
-	fi
-	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit ;;
-    ia64:HP-UX:*:*)
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-	echo ia64-hp-hpux${HPUX_REV}
-	exit ;;
-    3050*:HI-UX:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#include <unistd.h>
-	int
-	main ()
-	{
-	  long cpu = sysconf (_SC_CPU_VERSION);
-	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-	     results, however.  */
-	  if (CPU_IS_PA_RISC (cpu))
-	    {
-	      switch (cpu)
-		{
-		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-		  default: puts ("hppa-hitachi-hiuxwe2"); break;
-		}
-	    }
-	  else if (CPU_IS_HP_MC68K (cpu))
-	    puts ("m68k-hitachi-hiuxwe2");
-	  else puts ("unknown-hitachi-hiuxwe2");
-	  exit (0);
-	}
-EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-		{ echo "$SYSTEM_NAME"; exit; }
-	echo unknown-hitachi-hiuxwe2
-	exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-	echo hppa1.1-hp-bsd
-	exit ;;
-    9000/8??:4.3bsd:*:*)
-	echo hppa1.0-hp-bsd
-	exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-	echo hppa1.0-hp-mpeix
-	exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-	echo hppa1.1-hp-osf
-	exit ;;
-    hp8??:OSF1:*:*)
-	echo hppa1.0-hp-osf
-	exit ;;
-    i*86:OSF1:*:*)
-	if [ -x /usr/sbin/sysversion ] ; then
-	    echo ${UNAME_MACHINE}-unknown-osf1mk
-	else
-	    echo ${UNAME_MACHINE}-unknown-osf1
-	fi
-	exit ;;
-    parisc*:Lites*:*:*)
-	echo hppa1.1-hp-lites
-	exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-	echo c1-convex-bsd
-	exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-	echo c34-convex-bsd
-	exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-	echo c38-convex-bsd
-	exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-	echo c4-convex-bsd
-	exit ;;
-    CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*[A-Z]90:*:*:*)
-	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-	      -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*T3E:*:*:*)
-	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    CRAY*SV1:*:*:*)
-	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    *:UNICOS/mp:*:*)
-	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
-	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit ;;
-    sparc*:BSD/OS:*:*)
-	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:BSD/OS:*:*)
-	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit ;;
-    *:FreeBSD:*:*)
-	UNAME_PROCESSOR=`/usr/bin/uname -p`
-	case ${UNAME_PROCESSOR} in
-	    amd64)
-		UNAME_PROCESSOR=x86_64 ;;
-	    i386)
-		UNAME_PROCESSOR=i586 ;;
-	esac
-	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    i*:CYGWIN*:*)
-	echo ${UNAME_MACHINE}-pc-cygwin
-	exit ;;
-    *:MINGW64*:*)
-	echo ${UNAME_MACHINE}-pc-mingw64
-	exit ;;
-    *:MINGW*:*)
-	echo ${UNAME_MACHINE}-pc-mingw32
-	exit ;;
-    *:MSYS*:*)
-	echo ${UNAME_MACHINE}-pc-msys
-	exit ;;
-    i*:windows32*:*)
-	# uname -m includes "-pc" on this system.
-	echo ${UNAME_MACHINE}-mingw32
-	exit ;;
-    i*:PW*:*)
-	echo ${UNAME_MACHINE}-pc-pw32
-	exit ;;
-    *:Interix*:*)
-	case ${UNAME_MACHINE} in
-	    x86)
-		echo i586-pc-interix${UNAME_RELEASE}
-		exit ;;
-	    authenticamd | genuineintel | EM64T)
-		echo x86_64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	    IA64)
-		echo ia64-unknown-interix${UNAME_RELEASE}
-		exit ;;
-	esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-	echo i${UNAME_MACHINE}-pc-mks
-	exit ;;
-    8664:Windows_NT:*)
-	echo x86_64-pc-mks
-	exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-	# How do we know it's Interix rather than the generic POSIX subsystem?
-	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i586-pc-interix
-	exit ;;
-    i*:UWIN*:*)
-	echo ${UNAME_MACHINE}-pc-uwin
-	exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-	echo x86_64-unknown-cygwin
-	exit ;;
-    p*:CYGWIN*:*)
-	echo powerpcle-unknown-cygwin
-	exit ;;
-    prep*:SunOS:5.*:*)
-	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit ;;
-    *:GNU:*:*)
-	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit ;;
-    *:GNU/*:*:*)
-	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-	exit ;;
-    i*86:Minix:*:*)
-	echo ${UNAME_MACHINE}-pc-minix
-	exit ;;
-    aarch64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    aarch64_be:Linux:*:*)
-	UNAME_MACHINE=aarch64_be
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    alpha:Linux:*:*)
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
-	esac
-	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    arm*:Linux:*:*)
-	eval $set_cc_for_build
-	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-	    | grep -q __ARM_EABI__
-	then
-	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	else
-	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-		| grep -q __ARM_PCS_VFP
-	    then
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-	    else
-		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-	    fi
-	fi
-	exit ;;
-    avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    cris:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    crisv32:Linux:*:*)
-	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-	exit ;;
-    e2k:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    frv:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    hexagon:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:Linux:*:*)
-	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-	exit ;;
-    ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    k1om:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#undef CPU
-	#undef ${UNAME_MACHINE}
-	#undef ${UNAME_MACHINE}el
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-	CPU=${UNAME_MACHINE}el
-	#else
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-	CPU=${UNAME_MACHINE}
-	#else
-	CPU=
-	#endif
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-	;;
-    mips64el:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    openrisc*:Linux:*:*)
-	echo or1k-unknown-linux-${LIBC}
-	exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    padre:Linux:*:*)
-	echo sparc-unknown-linux-${LIBC}
-	exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-${LIBC}
-	exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-	# Look for CPU level
-	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-	  *)    echo hppa-unknown-linux-${LIBC} ;;
-	esac
-	exit ;;
-    ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-${LIBC}
-	exit ;;
-    ppc:Linux:*:*)
-	echo powerpc-unknown-linux-${LIBC}
-	exit ;;
-    ppc64le:Linux:*:*)
-	echo powerpc64le-unknown-linux-${LIBC}
-	exit ;;
-    ppcle:Linux:*:*)
-	echo powerpcle-unknown-linux-${LIBC}
-	exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-	exit ;;
-    sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-	exit ;;
-    x86_64:Linux:*:*)
-	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-	exit ;;
-    xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-	exit ;;
-    i*86:DYNIX/ptx:4*:*)
-	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-	# earlier versions are messed up and put the nodename in both
-	# sysname and nodename.
-	echo i386-sequent-sysv4
-	exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-	# Unixware is an offshoot of SVR4, but it has its own version
-	# number series starting with 2...
-	# I am not positive that other SVR4 systems won't match this,
-	# I just have to hope.  -- rms.
-	# Use sysv4.2uw... so that sysv4* matches it.
-	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit ;;
-    i*86:OS/2:*:*)
-	# If we were able to find `uname', then EMX Unix compatibility
-	# is probably installed.
-	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit ;;
-    i*86:XTS-300:*:STOP)
-	echo ${UNAME_MACHINE}-unknown-stop
-	exit ;;
-    i*86:atheos:*:*)
-	echo ${UNAME_MACHINE}-unknown-atheos
-	exit ;;
-    i*86:syllable:*:*)
-	echo ${UNAME_MACHINE}-pc-syllable
-	exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    i*86:*DOS:*:*)
-	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-	else
-		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-	fi
-	exit ;;
-    i*86:*:5:[678]*)
-	# UnixWare 7.x, OpenUNIX and OpenServer 6.
-	case `/bin/uname -X | grep "^Machine"` in
-	    *486*)	     UNAME_MACHINE=i486 ;;
-	    *Pentium)	     UNAME_MACHINE=i586 ;;
-	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-	esac
-	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit ;;
-    i*86:*:3.2:*)
-	if test -f /usr/options/cb.name; then
-		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-			&& UNAME_MACHINE=i586
-		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-			&& UNAME_MACHINE=i686
-		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-	else
-		echo ${UNAME_MACHINE}-pc-sysv32
-	fi
-	exit ;;
-    pc:*:*:*)
-	# Left here for compatibility:
-	# uname -m prints for DJGPP always 'pc', but it prints nothing about
-	# the processor, so we play safe by assuming i586.
-	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configure will decide that
-	# this is a cross-build.
-	echo i586-pc-msdosdjgpp
-	exit ;;
-    Intel:Mach:3*:*)
-	echo i386-pc-mach3
-	exit ;;
-    paragon:*:*:*)
-	echo i860-intel-osf1
-	exit ;;
-    i860:*:4.*:*) # i860-SVR4
-	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-	else # Add other i860-SVR4 vendors below as they are discovered.
-	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-	fi
-	exit ;;
-    mini*:CTIX:SYS*5:*)
-	# "miniframe"
-	echo m68010-convergent-sysv
-	exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-	echo m68k-convergent-sysv
-	exit ;;
-    M680?0:D-NIX:5.3:*)
-	echo m68k-diab-dnix
-	exit ;;
-    M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-	OS_REL=''
-	test -r /etc/.relid \
-	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-	OS_REL='.3'
-	test -r /etc/.relid \
-	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-	echo m68k-atari-sysv4
-	exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    rs6000:LynxOS:2.*:*)
-	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-	echo mips-dde-sysv${UNAME_RELEASE}
-	exit ;;
-    RM*:ReliantUNIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    RM*:SINIX-*:*:*)
-	echo mips-sni-sysv4
-	exit ;;
-    *:SINIX-*:*:*)
-	if uname -p 2>/dev/null >/dev/null ; then
-		UNAME_MACHINE=`(uname -p) 2>/dev/null`
-		echo ${UNAME_MACHINE}-sni-sysv4
-	else
-		echo ns32k-sni-sysv
-	fi
-	exit ;;
-    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-			# says <Richard.M.Bartel@ccMail.Census.GOV>
-	echo i586-unisys-sysv4
-	exit ;;
-    *:UNIX_System_V:4*:FTX*)
-	# From Gerald Hewes <hewes@openmarket.com>.
-	# How about differentiating between stratus architectures? -djm
-	echo hppa1.1-stratus-sysv4
-	exit ;;
-    *:*:*:FTX*)
-	# From seanf@swdc.stratus.com.
-	echo i860-stratus-sysv4
-	exit ;;
-    i*86:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo ${UNAME_MACHINE}-stratus-vos
-	exit ;;
-    *:VOS:*:*)
-	# From Paul.Green@stratus.com.
-	echo hppa1.1-stratus-vos
-	exit ;;
-    mc68*:A/UX:*:*)
-	echo m68k-apple-aux${UNAME_RELEASE}
-	exit ;;
-    news*:NEWS-OS:6*:*)
-	echo mips-sony-newsos6
-	exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-	if [ -d /usr/nec ]; then
-		echo mips-nec-sysv${UNAME_RELEASE}
-	else
-		echo mips-unknown-sysv${UNAME_RELEASE}
-	fi
-	exit ;;
-    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
-	echo powerpc-be-beos
-	exit ;;
-    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
-	echo powerpc-apple-beos
-	exit ;;
-    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
-	echo i586-pc-beos
-	exit ;;
-    BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
-	echo i586-pc-haiku
-	exit ;;
-    x86_64:Haiku:*:*)
-	echo x86_64-unknown-haiku
-	exit ;;
-    SX-4:SUPER-UX:*:*)
-	echo sx4-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-5:SUPER-UX:*:*)
-	echo sx5-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-6:SUPER-UX:*:*)
-	echo sx6-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-7:SUPER-UX:*:*)
-	echo sx7-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8:SUPER-UX:*:*)
-	echo sx8-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-8R:SUPER-UX:*:*)
-	echo sx8r-nec-superux${UNAME_RELEASE}
-	exit ;;
-    SX-ACE:SUPER-UX:*:*)
-	echo sxace-nec-superux${UNAME_RELEASE}
-	exit ;;
-    Power*:Rhapsody:*:*)
-	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Rhapsody:*:*)
-	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit ;;
-    *:Darwin:*:*)
-	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	eval $set_cc_for_build
-	if test "$UNAME_PROCESSOR" = unknown ; then
-	    UNAME_PROCESSOR=powerpc
-	fi
-	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_64BIT_ARCH >/dev/null
-		then
-		    case $UNAME_PROCESSOR in
-			i386) UNAME_PROCESSOR=x86_64 ;;
-			powerpc) UNAME_PROCESSOR=powerpc64 ;;
-		    esac
-		fi
-		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
-		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
-		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-		       grep IS_PPC >/dev/null
-		then
-		    UNAME_PROCESSOR=powerpc
-		fi
-	    fi
-	elif test "$UNAME_PROCESSOR" = i386 ; then
-	    # Avoid executing cc on OS X 10.9, as it ships with a stub
-	    # that puts up a graphical alert prompting to install
-	    # developer tools.  Any system running Mac OS X 10.7 or
-	    # later (Darwin 11 and later) is required to have a 64-bit
-	    # processor. This is not true of the ARM version of Darwin
-	    # that Apple uses in portable devices.
-	    UNAME_PROCESSOR=x86_64
-	fi
-	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = x86; then
-		UNAME_PROCESSOR=i386
-		UNAME_MACHINE=pc
-	fi
-	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit ;;
-    *:QNX:*:4*)
-	echo i386-pc-qnx
-	exit ;;
-    NEO-*:NONSTOP_KERNEL:*:*)
-	echo neo-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSR-*:NONSTOP_KERNEL:*:*)
-	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    NSX-*:NONSTOP_KERNEL:*:*)
-	echo nsx-tandem-nsk${UNAME_RELEASE}
-	exit ;;
-    *:NonStop-UX:*:*)
-	echo mips-compaq-nonstopux
-	exit ;;
-    BS2000:POSIX*:*:*)
-	echo bs2000-siemens-sysv
-	exit ;;
-    DS/*:UNIX_System_V:*:*)
-	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit ;;
-    *:Plan9:*:*)
-	# "uname -m" is not consistent, so use $cputype instead. 386
-	# is converted to i386 for consistency with other x86
-	# operating systems.
-	if test "$cputype" = 386; then
-	    UNAME_MACHINE=i386
-	else
-	    UNAME_MACHINE="$cputype"
-	fi
-	echo ${UNAME_MACHINE}-unknown-plan9
-	exit ;;
-    *:TOPS-10:*:*)
-	echo pdp10-unknown-tops10
-	exit ;;
-    *:TENEX:*:*)
-	echo pdp10-unknown-tenex
-	exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-	echo pdp10-dec-tops20
-	exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-	echo pdp10-xkl-tops20
-	exit ;;
-    *:TOPS-20:*:*)
-	echo pdp10-unknown-tops20
-	exit ;;
-    *:ITS:*:*)
-	echo pdp10-unknown-its
-	exit ;;
-    SEI:*:*:SEIUX)
-	echo mips-sei-seiux${UNAME_RELEASE}
-	exit ;;
-    *:DragonFly:*:*)
-	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit ;;
-    *:*VMS:*:*)
-	UNAME_MACHINE=`(uname -p) 2>/dev/null`
-	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms ; exit ;;
-	    I*) echo ia64-dec-vms ; exit ;;
-	    V*) echo vax-dec-vms ; exit ;;
-	esac ;;
-    *:XENIX:*:SysV)
-	echo i386-pc-xenix
-	exit ;;
-    i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
-	exit ;;
-    i*86:rdos:*:*)
-	echo ${UNAME_MACHINE}-pc-rdos
-	exit ;;
-    i*86:AROS:*:*)
-	echo ${UNAME_MACHINE}-pc-aros
-	exit ;;
-    x86_64:VMkernel:*:*)
-	echo ${UNAME_MACHINE}-unknown-esx
-	exit ;;
-    amd64:Isilon\ OneFS:*:*)
-	echo x86_64-unknown-onefs
-	exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-If $0 has already been updated, send the following data and any
-information you think might be pertinent to config-patches@gnu.org to
-provide the necessary information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
--- a/DoConfig/fltk/misc/config.sub
+++ /dev/null
@@ -1,1836 +1,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2017 Free Software Foundation, Inc.
-
-timestamp='2017-04-02'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches to <config-patches@gnu.org>.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2017 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )	# Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-	-sun*os*)
-		# Prevent following clause from handling this invalid input.
-		;;
-	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze*)
-		os=
-		basic_machine=$1
-		;;
-	-bluegene*)
-		os=-cnk
-		;;
-	-sim | -cisco | -oki | -wec | -winbond)
-		os=
-		basic_machine=$1
-		;;
-	-scout)
-		;;
-	-wrs)
-		os=-vxworks
-		basic_machine=$1
-		;;
-	-chorusos*)
-		os=-chorusos
-		basic_machine=$1
-		;;
-	-chorusrdb)
-		os=-chorusrdb
-		basic_machine=$1
-		;;
-	-hiux*)
-		os=-hiuxwe2
-		;;
-	-sco6)
-		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5)
-		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco4)
-		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2.[4-9]*)
-		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco3.2v[4-9]*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco5v6*)
-		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-sco*)
-		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-isc)
-		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-clix*)
-		basic_machine=clipper-intergraph
-		;;
-	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
-	-lynx*)
-		os=-lynxos
-		;;
-	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
-		;;
-	-psos*)
-		os=-psos
-		;;
-	-mint | -mint[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-	# Recognize the basic CPU types without company name.
-	# Some are omitted here because they have special meanings below.
-	1750a | 580 \
-	| a29k \
-	| aarch64 | aarch64_be \
-	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-	| am33_2.0 \
-	| arc | arceb \
-	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-	| avr | avr32 \
-	| ba \
-	| be32 | be64 \
-	| bfin \
-	| c4x | c8051 | clipper \
-	| d10v | d30v | dlx | dsp16xx \
-	| e2k | epiphany \
-	| fido | fr30 | frv | ft32 \
-	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-	| hexagon \
-	| i370 | i860 | i960 | ia16 | ia64 \
-	| ip2k | iq2000 \
-	| k1om \
-	| le32 | le64 \
-	| lm32 \
-	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-	| mips | mipsbe | mipseb | mipsel | mipsle \
-	| mips16 \
-	| mips64 | mips64el \
-	| mips64octeon | mips64octeonel \
-	| mips64orion | mips64orionel \
-	| mips64r5900 | mips64r5900el \
-	| mips64vr | mips64vrel \
-	| mips64vr4100 | mips64vr4100el \
-	| mips64vr4300 | mips64vr4300el \
-	| mips64vr5000 | mips64vr5000el \
-	| mips64vr5900 | mips64vr5900el \
-	| mipsisa32 | mipsisa32el \
-	| mipsisa32r2 | mipsisa32r2el \
-	| mipsisa32r6 | mipsisa32r6el \
-	| mipsisa64 | mipsisa64el \
-	| mipsisa64r2 | mipsisa64r2el \
-	| mipsisa64r6 | mipsisa64r6el \
-	| mipsisa64sb1 | mipsisa64sb1el \
-	| mipsisa64sr71k | mipsisa64sr71kel \
-	| mipsr5900 | mipsr5900el \
-	| mipstx39 | mipstx39el \
-	| mn10200 | mn10300 \
-	| moxie \
-	| mt \
-	| msp430 \
-	| nds32 | nds32le | nds32be \
-	| nios | nios2 | nios2eb | nios2el \
-	| ns16k | ns32k \
-	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pdp11 | pj | pjl \
-	| powerpc | powerpc64 | powerpc64le | powerpcle \
-	| pru \
-	| pyramid \
-	| riscv32 | riscv64 \
-	| rl78 | rx \
-	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-	| sh64 | sh64le \
-	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-	| spu \
-	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-	| ubicom32 \
-	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-	| visium \
-	| wasm32 \
-	| we32k \
-	| x86 | xc16x | xstormy16 | xtensa \
-	| z8k | z80)
-		basic_machine=$basic_machine-unknown
-		;;
-	c54x)
-		basic_machine=tic54x-unknown
-		;;
-	c55x)
-		basic_machine=tic55x-unknown
-		;;
-	c6x)
-		basic_machine=tic6x-unknown
-		;;
-	leon|leon[3-9])
-		basic_machine=sparc-$basic_machine
-		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-		;;
-	ms1)
-		basic_machine=mt-unknown
-		;;
-
-	strongarm | thumb | xscale)
-		basic_machine=arm-unknown
-		;;
-	xgate)
-		basic_machine=$basic_machine-unknown
-		os=-none
-		;;
-	xscaleeb)
-		basic_machine=armeb-unknown
-		;;
-
-	xscaleel)
-		basic_machine=armel-unknown
-		;;
-
-	# We use `pc' rather than `unknown'
-	# because (1) that's what they normally are, and
-	# (2) the word "unknown" tends to confuse beginning users.
-	i*86 | x86_64)
-	  basic_machine=$basic_machine-pc
-	  ;;
-	# Object if more than one company name word.
-	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-	# Recognize the basic CPU types with company name.
-	580-* \
-	| a29k-* \
-	| aarch64-* | aarch64_be-* \
-	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-	| avr-* | avr32-* \
-	| ba-* \
-	| be32-* | be64-* \
-	| bfin-* | bs2000-* \
-	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| c8051-* | clipper-* | craynv-* | cydra-* \
-	| d10v-* | d30v-* | dlx-* \
-	| e2k-* | elxsi-* \
-	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-	| h8300-* | h8500-* \
-	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
-	| ip2k-* | iq2000-* \
-	| k1om-* \
-	| le32-* | le64-* \
-	| lm32-* \
-	| m32c-* | m32r-* | m32rle-* \
-	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-	| microblaze-* | microblazeel-* \
-	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-	| mips16-* \
-	| mips64-* | mips64el-* \
-	| mips64octeon-* | mips64octeonel-* \
-	| mips64orion-* | mips64orionel-* \
-	| mips64r5900-* | mips64r5900el-* \
-	| mips64vr-* | mips64vrel-* \
-	| mips64vr4100-* | mips64vr4100el-* \
-	| mips64vr4300-* | mips64vr4300el-* \
-	| mips64vr5000-* | mips64vr5000el-* \
-	| mips64vr5900-* | mips64vr5900el-* \
-	| mipsisa32-* | mipsisa32el-* \
-	| mipsisa32r2-* | mipsisa32r2el-* \
-	| mipsisa32r6-* | mipsisa32r6el-* \
-	| mipsisa64-* | mipsisa64el-* \
-	| mipsisa64r2-* | mipsisa64r2el-* \
-	| mipsisa64r6-* | mipsisa64r6el-* \
-	| mipsisa64sb1-* | mipsisa64sb1el-* \
-	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
-	| mipsr5900-* | mipsr5900el-* \
-	| mipstx39-* | mipstx39el-* \
-	| mmix-* \
-	| mt-* \
-	| msp430-* \
-	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* | nios2eb-* | nios2el-* \
-	| none-* | np1-* | ns16k-* | ns32k-* \
-	| open8-* \
-	| or1k*-* \
-	| orion-* \
-	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-	| pru-* \
-	| pyramid-* \
-	| riscv32-* | riscv64-* \
-	| rl78-* | romp-* | rs6000-* | rx-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
-	| tahoe-* \
-	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-	| tile*-* \
-	| tron-* \
-	| ubicom32-* \
-	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-	| vax-* \
-	| visium-* \
-	| wasm32-* \
-	| we32k-* \
-	| x86-* | x86_64-* | xc16x-* | xps100-* \
-	| xstormy16-* | xtensa*-* \
-	| ymp-* \
-	| z8k-* | z80-*)
-		;;
-	# Recognize the basic CPU types without company name, with glob match.
-	xtensa*)
-		basic_machine=$basic_machine-unknown
-		;;
-	# Recognize the various machine names and aliases which stand
-	# for a CPU type and a company and sometimes even an OS.
-	386bsd)
-		basic_machine=i386-unknown
-		os=-bsd
-		;;
-	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-		basic_machine=m68000-att
-		;;
-	3b*)
-		basic_machine=we32k-att
-		;;
-	a29khif)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	abacus)
-		basic_machine=abacus-unknown
-		;;
-	adobe68k)
-		basic_machine=m68010-adobe
-		os=-scout
-		;;
-	alliant | fx80)
-		basic_machine=fx80-alliant
-		;;
-	altos | altos3068)
-		basic_machine=m68k-altos
-		;;
-	am29k)
-		basic_machine=a29k-none
-		os=-bsd
-		;;
-	amd64)
-		basic_machine=x86_64-pc
-		;;
-	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	amdahl)
-		basic_machine=580-amdahl
-		os=-sysv
-		;;
-	amiga | amiga-*)
-		basic_machine=m68k-unknown
-		;;
-	amigaos | amigados)
-		basic_machine=m68k-unknown
-		os=-amigaos
-		;;
-	amigaunix | amix)
-		basic_machine=m68k-unknown
-		os=-sysv4
-		;;
-	apollo68)
-		basic_machine=m68k-apollo
-		os=-sysv
-		;;
-	apollo68bsd)
-		basic_machine=m68k-apollo
-		os=-bsd
-		;;
-	aros)
-		basic_machine=i386-pc
-		os=-aros
-		;;
-	asmjs)
-		basic_machine=asmjs-unknown
-		;;
-	aux)
-		basic_machine=m68k-apple
-		os=-aux
-		;;
-	balance)
-		basic_machine=ns32k-sequent
-		os=-dynix
-		;;
-	blackfin)
-		basic_machine=bfin-unknown
-		os=-linux
-		;;
-	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	bluegene*)
-		basic_machine=powerpc-ibm
-		os=-cnk
-		;;
-	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	c90)
-		basic_machine=c90-cray
-		os=-unicos
-		;;
-	cegcc)
-		basic_machine=arm-unknown
-		os=-cegcc
-		;;
-	convex-c1)
-		basic_machine=c1-convex
-		os=-bsd
-		;;
-	convex-c2)
-		basic_machine=c2-convex
-		os=-bsd
-		;;
-	convex-c32)
-		basic_machine=c32-convex
-		os=-bsd
-		;;
-	convex-c34)
-		basic_machine=c34-convex
-		os=-bsd
-		;;
-	convex-c38)
-		basic_machine=c38-convex
-		os=-bsd
-		;;
-	cray | j90)
-		basic_machine=j90-cray
-		os=-unicos
-		;;
-	craynv)
-		basic_machine=craynv-cray
-		os=-unicosmp
-		;;
-	cr16 | cr16-*)
-		basic_machine=cr16-unknown
-		os=-elf
-		;;
-	crds | unos)
-		basic_machine=m68k-crds
-		;;
-	crisv32 | crisv32-* | etraxfs*)
-		basic_machine=crisv32-axis
-		;;
-	cris | cris-* | etrax*)
-		basic_machine=cris-axis
-		;;
-	crx)
-		basic_machine=crx-unknown
-		os=-elf
-		;;
-	da30 | da30-*)
-		basic_machine=m68k-da30
-		;;
-	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-		basic_machine=mips-dec
-		;;
-	decsystem10* | dec10*)
-		basic_machine=pdp10-dec
-		os=-tops10
-		;;
-	decsystem20* | dec20*)
-		basic_machine=pdp10-dec
-		os=-tops20
-		;;
-	delta | 3300 | motorola-3300 | motorola-delta \
-	      | 3300-motorola | delta-motorola)
-		basic_machine=m68k-motorola
-		;;
-	delta88)
-		basic_machine=m88k-motorola
-		os=-sysv3
-		;;
-	dicos)
-		basic_machine=i686-pc
-		os=-dicos
-		;;
-	djgpp)
-		basic_machine=i586-pc
-		os=-msdosdjgpp
-		;;
-	dpx20 | dpx20-*)
-		basic_machine=rs6000-bull
-		os=-bosx
-		;;
-	dpx2* | dpx2*-bull)
-		basic_machine=m68k-bull
-		os=-sysv3
-		;;
-	e500v[12])
-		basic_machine=powerpc-unknown
-		os=$os"spe"
-		;;
-	e500v[12]-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=$os"spe"
-		;;
-	ebmon29k)
-		basic_machine=a29k-amd
-		os=-ebmon
-		;;
-	elxsi)
-		basic_machine=elxsi-elxsi
-		os=-bsd
-		;;
-	encore | umax | mmax)
-		basic_machine=ns32k-encore
-		;;
-	es1800 | OSE68k | ose68k | ose | OSE)
-		basic_machine=m68k-ericsson
-		os=-ose
-		;;
-	fx2800)
-		basic_machine=i860-alliant
-		;;
-	genix)
-		basic_machine=ns32k-ns
-		;;
-	gmicro)
-		basic_machine=tron-gmicro
-		os=-sysv
-		;;
-	go32)
-		basic_machine=i386-pc
-		os=-go32
-		;;
-	h3050r* | hiux*)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	h8300hms)
-		basic_machine=h8300-hitachi
-		os=-hms
-		;;
-	h8300xray)
-		basic_machine=h8300-hitachi
-		os=-xray
-		;;
-	h8500hms)
-		basic_machine=h8500-hitachi
-		os=-hms
-		;;
-	harris)
-		basic_machine=m88k-harris
-		os=-sysv3
-		;;
-	hp300-*)
-		basic_machine=m68k-hp
-		;;
-	hp300bsd)
-		basic_machine=m68k-hp
-		os=-bsd
-		;;
-	hp300hpux)
-		basic_machine=m68k-hp
-		os=-hpux
-		;;
-	hp3k9[0-9][0-9] | hp9[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k2[0-9][0-9] | hp9k31[0-9])
-		basic_machine=m68000-hp
-		;;
-	hp9k3[2-9][0-9])
-		basic_machine=m68k-hp
-		;;
-	hp9k6[0-9][0-9] | hp6[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hp9k7[0-79][0-9] | hp7[0-79][0-9])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k78[0-9] | hp78[0-9])
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-		# FIXME: really hppa2.0-hp
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][13679] | hp8[0-9][13679])
-		basic_machine=hppa1.1-hp
-		;;
-	hp9k8[0-9][0-9] | hp8[0-9][0-9])
-		basic_machine=hppa1.0-hp
-		;;
-	hppa-next)
-		os=-nextstep3
-		;;
-	hppaosf)
-		basic_machine=hppa1.1-hp
-		os=-osf
-		;;
-	hppro)
-		basic_machine=hppa1.1-hp
-		os=-proelf
-		;;
-	i370-ibm* | ibm*)
-		basic_machine=i370-ibm
-		;;
-	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv32
-		;;
-	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv4
-		;;
-	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-sysv
-		;;
-	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-		os=-solaris2
-		;;
-	i386mach)
-		basic_machine=i386-mach
-		os=-mach
-		;;
-	i386-vsta | vsta)
-		basic_machine=i386-unknown
-		os=-vsta
-		;;
-	iris | iris4d)
-		basic_machine=mips-sgi
-		case $os in
-		    -irix*)
-			;;
-		    *)
-			os=-irix4
-			;;
-		esac
-		;;
-	isi68 | isi)
-		basic_machine=m68k-isi
-		os=-sysv
-		;;
-	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-		;;
-	m68knommu)
-		basic_machine=m68k-unknown
-		os=-linux
-		;;
-	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
-	magnum | m3230)
-		basic_machine=mips-mips
-		os=-sysv
-		;;
-	merlin)
-		basic_machine=ns32k-utek
-		os=-sysv
-		;;
-	microblaze*)
-		basic_machine=microblaze-xilinx
-		;;
-	mingw64)
-		basic_machine=x86_64-pc
-		os=-mingw64
-		;;
-	mingw32)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	mingw32ce)
-		basic_machine=arm-unknown
-		os=-mingw32ce
-		;;
-	miniframe)
-		basic_machine=m68000-convergent
-		;;
-	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-		basic_machine=m68k-atari
-		os=-mint
-		;;
-	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-		;;
-	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-		;;
-	monitor)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	morphos)
-		basic_machine=powerpc-unknown
-		os=-morphos
-		;;
-	moxiebox)
-		basic_machine=moxie-unknown
-		os=-moxiebox
-		;;
-	msdos)
-		basic_machine=i386-pc
-		os=-msdos
-		;;
-	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-		;;
-	msys)
-		basic_machine=i686-pc
-		os=-msys
-		;;
-	mvs)
-		basic_machine=i370-ibm
-		os=-mvs
-		;;
-	nacl)
-		basic_machine=le32-unknown
-		os=-nacl
-		;;
-	ncr3000)
-		basic_machine=i486-ncr
-		os=-sysv4
-		;;
-	netbsd386)
-		basic_machine=i386-unknown
-		os=-netbsd
-		;;
-	netwinder)
-		basic_machine=armv4l-rebel
-		os=-linux
-		;;
-	news | news700 | news800 | news900)
-		basic_machine=m68k-sony
-		os=-newsos
-		;;
-	news1000)
-		basic_machine=m68030-sony
-		os=-newsos
-		;;
-	news-3600 | risc-news)
-		basic_machine=mips-sony
-		os=-newsos
-		;;
-	necv70)
-		basic_machine=v70-nec
-		os=-sysv
-		;;
-	next | m*-next )
-		basic_machine=m68k-next
-		case $os in
-		    -nextstep* )
-			;;
-		    -ns2*)
-		      os=-nextstep2
-			;;
-		    *)
-		      os=-nextstep3
-			;;
-		esac
-		;;
-	nh3000)
-		basic_machine=m68k-harris
-		os=-cxux
-		;;
-	nh[45]000)
-		basic_machine=m88k-harris
-		os=-cxux
-		;;
-	nindy960)
-		basic_machine=i960-intel
-		os=-nindy
-		;;
-	mon960)
-		basic_machine=i960-intel
-		os=-mon960
-		;;
-	nonstopux)
-		basic_machine=mips-compaq
-		os=-nonstopux
-		;;
-	np1)
-		basic_machine=np1-gould
-		;;
-	neo-tandem)
-		basic_machine=neo-tandem
-		;;
-	nse-tandem)
-		basic_machine=nse-tandem
-		;;
-	nsr-tandem)
-		basic_machine=nsr-tandem
-		;;
-	nsx-tandem)
-		basic_machine=nsx-tandem
-		;;
-	op50n-* | op60c-*)
-		basic_machine=hppa1.1-oki
-		os=-proelf
-		;;
-	openrisc | openrisc-*)
-		basic_machine=or32-unknown
-		;;
-	os400)
-		basic_machine=powerpc-ibm
-		os=-os400
-		;;
-	OSE68000 | ose68000)
-		basic_machine=m68000-ericsson
-		os=-ose
-		;;
-	os68k)
-		basic_machine=m68k-none
-		os=-os68k
-		;;
-	pa-hitachi)
-		basic_machine=hppa1.1-hitachi
-		os=-hiuxwe2
-		;;
-	paragon)
-		basic_machine=i860-intel
-		os=-osf
-		;;
-	parisc)
-		basic_machine=hppa-unknown
-		os=-linux
-		;;
-	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-		os=-linux
-		;;
-	pbd)
-		basic_machine=sparc-tti
-		;;
-	pbb)
-		basic_machine=m68k-tti
-		;;
-	pc532 | pc532-*)
-		basic_machine=ns32k-pc532
-		;;
-	pc98)
-		basic_machine=i386-pc
-		;;
-	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium | p5 | k5 | k6 | nexgen | viac3)
-		basic_machine=i586-pc
-		;;
-	pentiumpro | p6 | 6x86 | athlon | athlon_*)
-		basic_machine=i686-pc
-		;;
-	pentiumii | pentium2 | pentiumiii | pentium3)
-		basic_machine=i686-pc
-		;;
-	pentium4)
-		basic_machine=i786-pc
-		;;
-	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	pn)
-		basic_machine=pn-gould
-		;;
-	power)	basic_machine=power-ibm
-		;;
-	ppc | ppcbe)	basic_machine=powerpc-unknown
-		;;
-	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppcle | powerpclittle)
-		basic_machine=powerpcle-unknown
-		;;
-	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64)	basic_machine=powerpc64-unknown
-		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ppc64le | powerpc64little)
-		basic_machine=powerpc64le-unknown
-		;;
-	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	ps2)
-		basic_machine=i386-ibm
-		;;
-	pw32)
-		basic_machine=i586-unknown
-		os=-pw32
-		;;
-	rdos | rdos64)
-		basic_machine=x86_64-pc
-		os=-rdos
-		;;
-	rdos32)
-		basic_machine=i386-pc
-		os=-rdos
-		;;
-	rom68k)
-		basic_machine=m68k-rom68k
-		os=-coff
-		;;
-	rm[46]00)
-		basic_machine=mips-siemens
-		;;
-	rtpc | rtpc-*)
-		basic_machine=romp-ibm
-		;;
-	s390 | s390-*)
-		basic_machine=s390-ibm
-		;;
-	s390x | s390x-*)
-		basic_machine=s390x-ibm
-		;;
-	sa29200)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	sb1)
-		basic_machine=mipsisa64sb1-unknown
-		;;
-	sb1el)
-		basic_machine=mipsisa64sb1el-unknown
-		;;
-	sde)
-		basic_machine=mipsisa32-sde
-		os=-elf
-		;;
-	sei)
-		basic_machine=mips-sei
-		os=-seiux
-		;;
-	sequent)
-		basic_machine=i386-sequent
-		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
-	sh5el)
-		basic_machine=sh5le-unknown
-		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
-		basic_machine=sparclite-wrs
-		os=-vxworks
-		;;
-	sps7)
-		basic_machine=m68k-bull
-		os=-sysv2
-		;;
-	spur)
-		basic_machine=spur-unknown
-		;;
-	st2000)
-		basic_machine=m68k-tandem
-		;;
-	stratus)
-		basic_machine=i860-stratus
-		os=-sysv4
-		;;
-	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-		;;
-	sun2)
-		basic_machine=m68000-sun
-		;;
-	sun2os3)
-		basic_machine=m68000-sun
-		os=-sunos3
-		;;
-	sun2os4)
-		basic_machine=m68000-sun
-		os=-sunos4
-		;;
-	sun3os3)
-		basic_machine=m68k-sun
-		os=-sunos3
-		;;
-	sun3os4)
-		basic_machine=m68k-sun
-		os=-sunos4
-		;;
-	sun4os3)
-		basic_machine=sparc-sun
-		os=-sunos3
-		;;
-	sun4os4)
-		basic_machine=sparc-sun
-		os=-sunos4
-		;;
-	sun4sol2)
-		basic_machine=sparc-sun
-		os=-solaris2
-		;;
-	sun3 | sun3-*)
-		basic_machine=m68k-sun
-		;;
-	sun4)
-		basic_machine=sparc-sun
-		;;
-	sun386 | sun386i | roadrunner)
-		basic_machine=i386-sun
-		;;
-	sv1)
-		basic_machine=sv1-cray
-		os=-unicos
-		;;
-	symmetry)
-		basic_machine=i386-sequent
-		os=-dynix
-		;;
-	t3e)
-		basic_machine=alphaev5-cray
-		os=-unicos
-		;;
-	t90)
-		basic_machine=t90-cray
-		os=-unicos
-		;;
-	tile*)
-		basic_machine=$basic_machine-unknown
-		os=-linux-gnu
-		;;
-	tx39)
-		basic_machine=mipstx39-unknown
-		;;
-	tx39el)
-		basic_machine=mipstx39el-unknown
-		;;
-	toad1)
-		basic_machine=pdp10-xkl
-		os=-tops20
-		;;
-	tower | tower-32)
-		basic_machine=m68k-ncr
-		;;
-	tpf)
-		basic_machine=s390x-ibm
-		os=-tpf
-		;;
-	udi29k)
-		basic_machine=a29k-amd
-		os=-udi
-		;;
-	ultra3)
-		basic_machine=a29k-nyu
-		os=-sym1
-		;;
-	v810 | necv810)
-		basic_machine=v810-nec
-		os=-none
-		;;
-	vaxv)
-		basic_machine=vax-dec
-		os=-sysv
-		;;
-	vms)
-		basic_machine=vax-dec
-		os=-vms
-		;;
-	vpp*|vx|vx-*)
-		basic_machine=f301-fujitsu
-		;;
-	vxworks960)
-		basic_machine=i960-wrs
-		os=-vxworks
-		;;
-	vxworks68)
-		basic_machine=m68k-wrs
-		os=-vxworks
-		;;
-	vxworks29k)
-		basic_machine=a29k-wrs
-		os=-vxworks
-		;;
-	wasm32)
-		basic_machine=wasm32-unknown
-		;;
-	w65*)
-		basic_machine=w65-wdc
-		os=-none
-		;;
-	w89k-*)
-		basic_machine=hppa1.1-winbond
-		os=-proelf
-		;;
-	xbox)
-		basic_machine=i686-pc
-		os=-mingw32
-		;;
-	xps | xps100)
-		basic_machine=xps100-honeywell
-		;;
-	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-		;;
-	ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
-	none)
-		basic_machine=none-none
-		os=-none
-		;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-	w89k)
-		basic_machine=hppa1.1-winbond
-		;;
-	op50n)
-		basic_machine=hppa1.1-oki
-		;;
-	op60c)
-		basic_machine=hppa1.1-oki
-		;;
-	romp)
-		basic_machine=romp-ibm
-		;;
-	mmix)
-		basic_machine=mmix-knuth
-		;;
-	rs6000)
-		basic_machine=rs6000-ibm
-		;;
-	vax)
-		basic_machine=vax-dec
-		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
-	pdp11)
-		basic_machine=pdp11-dec
-		;;
-	we32k)
-		basic_machine=we32k-att
-		;;
-	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-		basic_machine=sh-unknown
-		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
-	cydra)
-		basic_machine=cydra-cydrome
-		;;
-	orion)
-		basic_machine=orion-highlevel
-		;;
-	orion105)
-		basic_machine=clipper-highlevel
-		;;
-	mac | mpw | mac-mpw)
-		basic_machine=m68k-apple
-		;;
-	pmac | pmac-mpw)
-		basic_machine=powerpc-apple
-		;;
-	*-unknown)
-		# Make sure to match an already-canonicalized machine name.
-		;;
-	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-		exit 1
-		;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-		;;
-	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-		;;
-	*)
-		;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
-	# -solaris* is a basic system type, with this one exception.
-	-auroraux)
-		os=-auroraux
-		;;
-	-solaris1 | -solaris1.*)
-		os=`echo $os | sed -e 's|solaris1|sunos4|'`
-		;;
-	-solaris)
-		os=-solaris2
-		;;
-	-svr4*)
-		os=-sysv4
-		;;
-	-unixware*)
-		os=-sysv4.2uw
-		;;
-	-gnu/linux*)
-		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-		;;
-	# First accept the basic system types.
-	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
-	# -sysv* is not here because it comes later, after sysvr4.
-	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* | -plan9* \
-	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* | -cloudabi* | -sortix* \
-	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
-	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
-	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
-	# Remember, each alternative MUST END IN *, to match a version number.
-		;;
-	-qnx*)
-		case $basic_machine in
-		    x86-* | i*86-*)
-			;;
-		    *)
-			os=-nto$os
-			;;
-		esac
-		;;
-	-nto-qnx*)
-		;;
-	-nto*)
-		os=`echo $os | sed -e 's|nto|nto-qnx|'`
-		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-		;;
-	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
-		;;
-	-linux-dietlibc)
-		os=-linux-dietlibc
-		;;
-	-linux*)
-		os=`echo $os | sed -e 's|linux|linux-gnu|'`
-		;;
-	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-		;;
-	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
-		;;
-	-opened*)
-		os=-openedition
-		;;
-	-os400*)
-		os=-os400
-		;;
-	-wince*)
-		os=-wince
-		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
-	-utek*)
-		os=-bsd
-		;;
-	-dynix*)
-		os=-bsd
-		;;
-	-acis*)
-		os=-aos
-		;;
-	-atheos*)
-		os=-atheos
-		;;
-	-syllable*)
-		os=-syllable
-		;;
-	-386bsd)
-		os=-bsd
-		;;
-	-ctix* | -uts*)
-		os=-sysv
-		;;
-	-nova*)
-		os=-rtmk-nova
-		;;
-	-ns2 )
-		os=-nextstep2
-		;;
-	-nsk*)
-		os=-nsk
-		;;
-	# Preserve the version number of sinix5.
-	-sinix5.*)
-		os=`echo $os | sed -e 's|sinix|sysv|'`
-		;;
-	-sinix*)
-		os=-sysv4
-		;;
-	-tpf*)
-		os=-tpf
-		;;
-	-triton*)
-		os=-sysv3
-		;;
-	-oss*)
-		os=-sysv3
-		;;
-	-svr4)
-		os=-sysv4
-		;;
-	-svr3)
-		os=-sysv3
-		;;
-	-sysvr4)
-		os=-sysv4
-		;;
-	# This must come after -sysvr4.
-	-sysv*)
-		;;
-	-ose*)
-		os=-ose
-		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
-	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-		os=-mint
-		;;
-	-aros*)
-		os=-aros
-		;;
-	-zvmoe)
-		os=-zvmoe
-		;;
-	-dicos*)
-		os=-dicos
-		;;
-	-nacl*)
-		;;
-	-ios)
-		;;
-	-none)
-		;;
-	*)
-		# Get rid of the `-' at the beginning of $os.
-		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-		exit 1
-		;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-	score-*)
-		os=-elf
-		;;
-	spu-*)
-		os=-elf
-		;;
-	*-acorn)
-		os=-riscix1.2
-		;;
-	arm*-rebel)
-		os=-linux
-		;;
-	arm*-semi)
-		os=-aout
-		;;
-	c4x-* | tic4x-*)
-		os=-coff
-		;;
-	c8051-*)
-		os=-elf
-		;;
-	hexagon-*)
-		os=-elf
-		;;
-	tic54x-*)
-		os=-coff
-		;;
-	tic55x-*)
-		os=-coff
-		;;
-	tic6x-*)
-		os=-coff
-		;;
-	# This must come before the *-dec entry.
-	pdp10-*)
-		os=-tops20
-		;;
-	pdp11-*)
-		os=-none
-		;;
-	*-dec | vax-*)
-		os=-ultrix4.2
-		;;
-	m68*-apollo)
-		os=-domain
-		;;
-	i386-sun)
-		os=-sunos4.0.2
-		;;
-	m68000-sun)
-		os=-sunos3
-		;;
-	m68*-cisco)
-		os=-aout
-		;;
-	mep-*)
-		os=-elf
-		;;
-	mips*-cisco)
-		os=-elf
-		;;
-	mips*-*)
-		os=-elf
-		;;
-	or32-*)
-		os=-coff
-		;;
-	*-tti)	# must be before sparc entry or we get the wrong os.
-		os=-sysv3
-		;;
-	sparc-* | *-sun)
-		os=-sunos4.1.1
-		;;
-	pru-*)
-		os=-elf
-		;;
-	*-be)
-		os=-beos
-		;;
-	*-haiku)
-		os=-haiku
-		;;
-	*-ibm)
-		os=-aix
-		;;
-	*-knuth)
-		os=-mmixware
-		;;
-	*-wec)
-		os=-proelf
-		;;
-	*-winbond)
-		os=-proelf
-		;;
-	*-oki)
-		os=-proelf
-		;;
-	*-hp)
-		os=-hpux
-		;;
-	*-hitachi)
-		os=-hiux
-		;;
-	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-		os=-sysv
-		;;
-	*-cbm)
-		os=-amigaos
-		;;
-	*-dg)
-		os=-dgux
-		;;
-	*-dolphin)
-		os=-sysv3
-		;;
-	m68k-ccur)
-		os=-rtu
-		;;
-	m88k-omron*)
-		os=-luna
-		;;
-	*-next )
-		os=-nextstep
-		;;
-	*-sequent)
-		os=-ptx
-		;;
-	*-crds)
-		os=-unos
-		;;
-	*-ns)
-		os=-genix
-		;;
-	i370-*)
-		os=-mvs
-		;;
-	*-next)
-		os=-nextstep3
-		;;
-	*-gould)
-		os=-sysv
-		;;
-	*-highlevel)
-		os=-bsd
-		;;
-	*-encore)
-		os=-bsd
-		;;
-	*-sgi)
-		os=-irix
-		;;
-	*-siemens)
-		os=-sysv4
-		;;
-	*-masscomp)
-		os=-rtu
-		;;
-	f30[01]-fujitsu | f700-fujitsu)
-		os=-uxpv
-		;;
-	*-rom68k)
-		os=-coff
-		;;
-	*-*bug)
-		os=-coff
-		;;
-	*-apple)
-		os=-macos
-		;;
-	*-atari*)
-		os=-mint
-		;;
-	*)
-		os=-none
-		;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-	*-unknown)
-		case $os in
-			-riscix*)
-				vendor=acorn
-				;;
-			-sunos*)
-				vendor=sun
-				;;
-			-cnk*|-aix*)
-				vendor=ibm
-				;;
-			-beos*)
-				vendor=be
-				;;
-			-hpux*)
-				vendor=hp
-				;;
-			-mpeix*)
-				vendor=hp
-				;;
-			-hiux*)
-				vendor=hitachi
-				;;
-			-unos*)
-				vendor=crds
-				;;
-			-dgux*)
-				vendor=dg
-				;;
-			-luna*)
-				vendor=omron
-				;;
-			-genix*)
-				vendor=ns
-				;;
-			-mvs* | -opened*)
-				vendor=ibm
-				;;
-			-os400*)
-				vendor=ibm
-				;;
-			-ptx*)
-				vendor=sequent
-				;;
-			-tpf*)
-				vendor=ibm
-				;;
-			-vxsim* | -vxworks* | -windiss*)
-				vendor=wrs
-				;;
-			-aux*)
-				vendor=apple
-				;;
-			-hms*)
-				vendor=hitachi
-				;;
-			-mpw* | -macos*)
-				vendor=apple
-				;;
-			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-				vendor=atari
-				;;
-			-vos*)
-				vendor=stratus
-				;;
-		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-		;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
--- a/DoConfig/fltk/misc/cp1252.html
+++ /dev/null
@@ -1,39 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-  <title>UTF-8 Test File: Windows Code Page 1252 (Western) [windows-1252]</title>
-  <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'/>
-</head>
-<body>
-<h1>Windows Code Page 1252 (aka "Western")</h1>
-<pre>
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |  �     �  �  �  �  �  �  �  �  �  �  �     �    |
-| 220 | 144 | 9 |     �  �  �  �  �  �  �  �  �  �  �  �     �  � |
-| 240 | 160 | A |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 260 | 176 | B |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 300 | 192 | C |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 320 | 208 | D |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 340 | 224 | E |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 360 | 240 | F |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-+-----+-----+---+-------------------------------------------------+
-
-File:		cp1252.html
-Encoding:	windows-1252 = Windows Code Page 1252 ("Western")
-Meta tag:	content='text/html; charset=windows-1252'
-
-</pre>
-</body>
-</html>
binary files a/DoConfig/fltk/misc/cp1252.png /dev/null differ
--- a/DoConfig/fltk/misc/cp1252.txt
+++ /dev/null
@@ -1,25 +1,0 @@
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |  �     �  �  �  �  �  �  �  �  �  �  �     �    |
-| 220 | 144 | 9 |     �  �  �  �  �  �  �  �  �  �  �  �     �  � |
-| 240 | 160 | A |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 260 | 176 | B |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 300 | 192 | C |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 320 | 208 | D |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 340 | 224 | E |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 360 | 240 | F |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-+-----+-----+---+-------------------------------------------------+
-
-File:		cp1252.txt
-Encoding:	Windows CP 1252 (aka "ansi", western, ...)
--- a/DoConfig/fltk/misc/cp1252_utf-8.html
+++ /dev/null
@@ -1,39 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-  <title>UTF-8 Test File: Windows Code Page 1252 (Western) [UTF-8]</title>
-  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
-</head>
-<body>
-<h1>Windows Code Page 1252 (aka "Western")</h1>
-<pre>
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |  €     ‚  ƒ  „  …  †  ‡  ˆ  ‰  Š  ‹  Œ     Ž    |
-| 220 | 144 | 9 |     ‘  ’  “  ”  •  –  —  ˜  ™  š  ›  œ     ž  Ÿ |
-| 240 | 160 | A |     ¡  ¢  £  ¤  ¥  ¦  §  ¨  ©  ª  «  ¬  ­  ®  ¯ |
-| 260 | 176 | B |  °  ±  ²  ³  ´  µ  ¶  ·  ¸  ¹  º  »  ¼  ½  ¾  ¿ |
-| 300 | 192 | C |  À  Á  Â  Ã  Ä  Å  Æ  Ç  È  É  Ê  Ë  Ì  Í  Î  Ï |
-| 320 | 208 | D |  Ð  Ñ  Ò  Ó  Ô  Õ  Ö  ×  Ø  Ù  Ú  Û  Ü  Ý  Þ  ß |
-| 340 | 224 | E |  à  á  â  ã  ä  å  æ  ç  è  é  ê  ë  ì  í  î  ï |
-| 360 | 240 | F |  ð  ñ  ò  ó  ô  õ  ö  ÷  ø  ù  ú  û  ü  ý  þ  ÿ |
-+-----+-----+---+-------------------------------------------------+
-
-File:		cp1252_utf-8.html
-Encoding:	UTF-8
-Meta tag:	content='text/html; charset=UTF-8'
-
-</pre>
-</body>
-</html>
--- a/DoConfig/fltk/misc/cp1252_utf-8.txt
+++ /dev/null
@@ -1,25 +1,0 @@
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |  €     ‚  ƒ  „  …  †  ‡  ˆ  ‰  Š  ‹  Œ     Ž    |
-| 220 | 144 | 9 |     ‘  ’  “  ”  •  –  —  ˜  ™  š  ›  œ     ž  Ÿ |
-| 240 | 160 | A |     ¡  ¢  £  ¤  ¥  ¦  §  ¨  ©  ª  «  ¬  ­  ®  ¯ |
-| 260 | 176 | B |  °  ±  ²  ³  ´  µ  ¶  ·  ¸  ¹  º  »  ¼  ½  ¾  ¿ |
-| 300 | 192 | C |  À  Á  Â  Ã  Ä  Å  Æ  Ç  È  É  Ê  Ë  Ì  Í  Î  Ï |
-| 320 | 208 | D |  Ð  Ñ  Ò  Ó  Ô  Õ  Ö  ×  Ø  Ù  Ú  Û  Ü  Ý  Þ  ß |
-| 340 | 224 | E |  à  á  â  ã  ä  å  æ  ç  è  é  ê  ë  ì  í  î  ï |
-| 360 | 240 | F |  ð  ñ  ò  ó  ô  õ  ö  ÷  ø  ù  ú  û  ü  ý  þ  ÿ |
-+-----+-----+---+-------------------------------------------------+
-
-File:		cp1252_utf-8.txt
-Encoding:	UTF-8
--- a/DoConfig/fltk/misc/doxystar.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-// Doxygen pre-formatting program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 by Matthias Melcher.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <string.h>
-
-char linebuf[1024];
-
-
-
-int main(int argc, char **argv) {
-  if (argc!=1) {
-    puts("Add stars (*) in front of multi-line doxygen comments");
-    puts("to protect comment indentation from code beautifiers.");
-    puts("usage: cat file | doxystar");
-    return 0;
-  }
-
-  int state = 0;
-  char *commentStart;
-  int i, commentCol;
-  for (;;) {
-    if (!fgets(linebuf, 1020, stdin)) break; // EOF or error
-    switch (state) {
-      case 0: // line start is source code
-        commentStart = strstr(linebuf, "/*"); 
-        if (commentStart) {
-          // check if this comment spans multiple lines
-          if (strstr(commentStart, "*/")==0) {
-            if ((commentStart[2]=='*' || commentStart[2]=='!') && commentStart[3]!='*') {
-              state = 2; // Doxygen multiline comment
-              commentCol = commentStart - linebuf;
-            } else {
-              state = 1; // regular multiline comment
-            }
-          } else { 
-            // single line comment, do nothing
-          }
-        }
-        fputs(linebuf, stdout);
-        break;
-      case 1: // line start is inside a regular multiline comment
-        if (strstr(linebuf, "*/")) {
-          state = 0;
-        } else {
-          // still inside comment
-        }
-        fputs(linebuf, stdout);
-        break;
-      case 2: // line start is inside a doxygen  multiline comment
-        for (i=0; i<commentCol; i++) fputc(' ', stdout);
-        fputs(" *", stdout); 
-        if (strstr(linebuf, "*/")) {
-          state = 0;
-        } else {
-          // still inside comment
-        }
-        for (i=0; i<commentCol+1; i++) 
-          if (linebuf[i]!=' ')
-            break;
-        if (linebuf[i]=='*') {
-          if (linebuf[i+1]==' ') {
-            i+=2;
-          } else {
-            i+=1;
-          }
-        }
-        fputs(linebuf+i, stdout);
-        break;
-    }
-  }
-
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/misc/iso-8859-1.txt
+++ /dev/null
@@ -1,25 +1,0 @@
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |                                                 |
-| 220 | 144 | 9 |                                                 |
-| 240 | 160 | A |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 260 | 176 | B |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 300 | 192 | C |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 320 | 208 | D |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 340 | 224 | E |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-| 360 | 240 | F |  �  �  �  �  �  �  �  �  �  �  �  �  �  �  �  � |
-+-----+-----+---+-------------------------------------------------+
-
-File:		iso-8859-1.txt
-Encoding:	Windows CP 1252 (aka "ansi", western, ISO-8859-1)
--- a/DoConfig/fltk/misc/iso-8859-1_utf-8.txt
+++ /dev/null
@@ -1,25 +1,0 @@
-+---------------+-------------------------------------------------+
-| octal   -->   |  0  1  2  3  4  5  6  7 10 11 12 13 14 16 16 17 |
-|  |    dec. -> |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 |
-|  v  |  v  |hex|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |
-+-----+-----+---+-------------------------------------------------+
-|   0 |   0 | 0 |                                                 |
-|  20 |  16 | 1 |                                                 |
-|  40 |  32 | 2 |     ! ""  #  $  %  &  '  (  )  *  +  ,  -  .  / |
-|  60 |  48 | 3 |  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ? |
-| 100 |  64 | 4 |  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O |
-| 120 |  80 | 5 |  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _ |
-| 140 |  96 | 6 |  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o |
-| 160 | 112 | 7 |  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~    |
-| 200 | 128 | 8 |                                                 |
-| 220 | 144 | 9 |                                                 |
-| 240 | 160 | A |     ¡  ¢  £  ¤  ¥  ¦  §  ¨  ©  ª  «  ¬  ­  ®  ¯ |
-| 260 | 176 | B |  °  ±  ²  ³  ´  µ  ¶  ·  ¸  ¹  º  »  ¼  ½  ¾  ¿ |
-| 300 | 192 | C |  À  Á  Â  Ã  Ä  Å  Æ  Ç  È  É  Ê  Ë  Ì  Í  Î  Ï |
-| 320 | 208 | D |  Ð  Ñ  Ò  Ó  Ô  Õ  Ö  ×  Ø  Ù  Ú  Û  Ü  Ý  Þ  ß |
-| 340 | 224 | E |  à  á  â  ã  ä  å  æ  ç  è  é  ê  ë  ì  í  î  ï |
-| 360 | 240 | F |  ð  ñ  ò  ó  ô  õ  ö  ÷  ø  ù  ú  û  ü  ý  þ  ÿ |
-+-----+-----+---+-------------------------------------------------+
-
-File:		iso-8859-1_utf-8.txt
-Encoding:	UTF-8
--- a/DoConfig/fltk/misc/update_config_scripts
+++ /dev/null
@@ -1,54 +1,0 @@
-#!/bin/sh
-#
-# "$Id$"
-#
-# Update the bundled scripts config.guess and config.sub
-# for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2017 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-#
-# Notes to developers:
-#
-# This script uses wget to download the scripts to the current working
-# directory, and it overwrites existing files. You may also use your
-# browser to view and download the files if wget is not installed on
-# your system.
-#
-# After updating the scripts, copy config.guess and config.sub
-# to the FLTK root directory, test, and eventually commit the changes:
-#
-# # cd to FLTK root directory
-#
-# $ make distclean
-# $ rm -f config.guess config.sub configure
-# $ cp misc/config.guess misc/config.sub .
-# $ autoconf -f
-# $ ./configure [options ...]
-# $ make
-# # test
-# $ svn commit
-#
-
-for FILE in config.guess config.sub; do
-  echo ""
-  echo "Downloading $FILE..."
-  echo ""
-  wget -O $FILE \
-    "http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=$FILE"
-done
-
-echo ""
-echo "Download complete, please check for errors, test, and commit changes."
-echo ""
--- a/DoConfig/fltk/png/ANNOUNCE
+++ /dev/null
@@ -1,41 +1,0 @@
-Libpng 1.6.16 - December 22, 2014
-
-This is a public release of libpng, intended for use in production codes.
-
-Files available for download:
-
-Source files with LF line endings (for Unix/Linux) and with a
-"configure" script
-
-   libpng-1.6.16.tar.xz (LZMA-compressed, recommended)
-   libpng-1.6.16.tar.gz
-
-Source files with CRLF line endings (for Windows), without the
-"configure" script
-
-   lpng1616.7z  (LZMA-compressed, recommended)
-   lpng1616.zip
-
-Other information:
-
-   libpng-1.6.16-README.txt
-   libpng-1.6.16-LICENSE.txt
-   libpng-1.6.16-*.asc (armored detached GPG signatures)
-
-Changes since the last public release (1.6.15):
-  Added ".align 2" to arm/filter_neon.S to support old GAS assemblers that
-    don't do alignment correctly.
-  Revised Makefile.am and scripts/*.dfn to work with MinGW/MSYS;
-    renamed scripts/*.dfn to scripts/*.c (Bob Friesenhahn and John Bowler).
-  Quiet a "comparison always true" warning in pngstest.c (John Bowler).
-  Restored a test on width that was removed from png.c at libpng-1.6.9
-    (Bug report by Alex Eubanks).
-  Fixed an overflow in png_combine_row with very wide interlaced images.
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe)
-or to glennrp at users.sourceforge.net
-
-Glenn R-P
--- a/DoConfig/fltk/png/CHANGES
+++ /dev/null
@@ -1,5134 +1,0 @@
-
-CHANGES - changes for libpng
-
-Version 0.2
-  added reader into png.h
-  fixed small problems in stub file
-
-Version 0.3
-  added pull reader
-  split up pngwrite.c to several files
-  added pnglib.txt
-  added example.c
-  cleaned up writer, adding a few new transformations
-  fixed some bugs in writer
-  interfaced with zlib 0.5
-  added K&R support
-  added check for 64 KB blocks for 16-bit machines
-
-Version 0.4
-  cleaned up code and commented code
-  simplified time handling into png_time
-  created png_color_16 and png_color_8 to handle color needs
-  cleaned up color type defines
-  fixed various bugs
-  made various names more consistent
-  interfaced with zlib 0.71
-  cleaned up zTXt reader and writer (using zlib's Reset functions)
-  split transformations into pngrtran.c and pngwtran.c
-
-Version 0.5
-  interfaced with zlib 0.8
-  fixed many reading and writing bugs
-  saved using 3 spaces instead of tabs
-
-Version 0.6
-  added png_large_malloc() and png_large_free()
-  added png_size_t
-  cleaned up some compiler warnings
-  added png_start_read_image()
-
-Version 0.7
-  cleaned up lots of bugs
-  finished dithering and other stuff
-  added test program
-  changed name from pnglib to libpng
-
-Version 0.71 [June, 1995]
-  changed pngtest.png for zlib 0.93
-  fixed error in libpng.txt and example.c
-
-Version 0.8
-  cleaned up some bugs
-  added png_set_filler()
-  split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
-  added #define's to remove unwanted code
-  moved png_info_init() to png.c
-  added old_size into png_realloc()
-  added functions to manually set filtering and compression info
-  changed compression parameters based on image type
-  optimized filter selection code
-  added version info
-  changed external functions passing floats to doubles (k&r problems?)
-  put all the configurable stuff in pngconf.h
-  enabled png_set_shift to work with paletted images on read
-  added png_read_update_info() - updates info structure with transformations
-
-Version 0.81 [August, 1995]
-  incorporated Tim Wegner's medium model code (thanks, Tim)
-
-Version 0.82 [September, 1995]
-  [unspecified changes]
-
-Version 0.85 [December, 1995]
-  added more medium model code (almost everything's a far)
-  added i/o, error, and memory callback functions
-  fixed some bugs (16-bit, 4-bit interlaced, etc.)
-  added first run progressive reader (barely tested)
-
-Version 0.86 [January, 1996]
-  fixed bugs
-  improved documentation
-
-Version 0.87 [January, 1996]
-  fixed medium model bugs
-  fixed other bugs introduced in 0.85 and 0.86
-  added some minor documentation
-
-Version 0.88 [January, 1996]
-  fixed progressive bugs
-  replaced tabs with spaces
-  cleaned up documentation
-  added callbacks for read/write and warning/error functions
-
-Version 0.89 [July, 1996]
-  Added new initialization API to make libpng work better with shared libs
-    we now have png_create_read_struct(), png_create_write_struct(),
-    png_create_info_struct(), png_destroy_read_struct(), and
-    png_destroy_write_struct() instead of the separate calls to
-    malloc and png_read_init(), png_info_init(), and png_write_init()
-  Changed warning/error callback functions to fix bug - this means you
-    should use the new initialization API if you were using the old
-    png_set_message_fn() calls, and that the old API no longer exists
-    so that people are aware that they need to change their code
-  Changed filter selection API to allow selection of multiple filters
-    since it didn't work in previous versions of libpng anyways
-  Optimized filter selection code
-  Fixed png_set_background() to allow using an arbitrary RGB color for
-    paletted images
-  Fixed gamma and background correction for paletted images, so
-    png_correct_palette is not needed unless you are correcting an
-    external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
-    in pngconf.h) - if nobody uses this, it may disappear in the future.
-  Fixed bug with Borland 64K memory allocation (Alexander Lehmann)
-  Fixed bug in interlace handling (Smarasderagd, I think)
-  Added more error checking for writing and image to reduce invalid files
-  Separated read and write functions so that they won't both be linked
-    into a binary when only reading or writing functionality is used
-  New pngtest image also has interlacing and zTXt
-  Updated documentation to reflect new API
-
-Version 0.90 [January, 1997]
-  Made CRC errors/warnings on critical and ancillary chunks configurable
-  libpng will use the zlib CRC routines by (compile-time) default
-  Changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
-  Added external C++ wrapper statements to png.h (Gilles Dauphin)
-  Allow PNG file to be read when some or all of file signature has already
-    been read from the beginning of the stream.  ****This affects the size
-    of info_struct and invalidates all programs that use a shared libpng****
-  Fixed png_filler() declarations
-  Fixed? background color conversions
-  Fixed order of error function pointers to match documentation
-  Current chunk name is now available in png_struct to reduce the number
-    of nearly identical error messages (will simplify multi-lingual
-    support when available)
-  Try to get ready for unknown-chunk callback functions:
-    - previously read critical chunks are flagged, so the chunk handling
-      routines can determine if the chunk is in the right place
-    - all chunk handling routines have the same prototypes, so we will
-      be able to handle all chunks via a callback mechanism
-  Try to fix Linux "setjmp" buffer size problems
-  Removed png_large_malloc, png_large_free, and png_realloc functions.
-
-Version 0.95 [March, 1997]
-  Fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
-  Fixed bug in PNG file signature compares when start != 0
-  Changed parameter type of png_set_filler(...filler...) from png_byte
-    to png_uint_32
-  Added test for MACOS to ensure that both math.h and fp.h are not #included
-  Added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
-  Added "packswap" transformation, which changes the endianness of
-    packed-pixel bytes (Kevin Bracey)
-  Added "strip_alpha" transformation, which removes the alpha channel of
-    input images without using it (not necessarily a good idea)
-  Added "swap_alpha" transformation, which puts the alpha channel in front
-    of the color bytes instead of after
-  Removed all implicit variable tests which assume NULL == 0 (I think)
-  Changed several variables to "png_size_t" to show 16/32-bit limitations
-  Added new pCAL chunk read/write support
-  Added experimental filter selection weighting (Greg Roelofs)
-  Removed old png_set_rgbx() and png_set_xrgb() functions that have been
-     obsolete for about 2 years now (use png_set_filler() instead)
-  Added macros to read 16- and 32-bit ints directly from buffer, to be
-    used only on those systems that support it (namely PowerPC and 680x0)
-    With some testing, this may become the default for MACOS/PPC systems.
-  Only calculate CRC on data if we are going to use it
-  Added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
-  Added macros for simple libpng debugging output selectable at compile time
-  Removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
-  More description of info_struct in libpng.txt and png.h
-  More instructions in example.c
-  More chunk types tested in pngtest.c
-  Renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
-    png_set_<chunk>.  We now have corresponding png_get_<chunk>
-    functions in pngget.c to get information in info_ptr.  This isolates
-    the application from the internal organization of png_info_struct
-    (good for shared library implementations).
-
-Version 0.96 [May, 1997]
-  Fixed serious bug with < 8bpp images introduced in 0.95
-  Fixed 256-color transparency bug (Greg Roelofs)
-  Fixed up documentation (Greg Roelofs, Laszlo Nyul)
-  Fixed "error" in pngconf.h for Linux setjmp() behavior
-  Fixed DOS medium model support (Tim Wegner)
-  Fixed png_check_keyword() for case with error in static string text
-  Added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
-  Added typecasts to quiet compiler errors
-  Added more debugging info
-
-Version 0.97 [January, 1998]
-  Removed PNG_USE_OWN_CRC capability
-  Relocated png_set_crc_action from pngrutil.c to pngrtran.c
-  Fixed typecasts of "new_key", etc. (Andreas Dilger)
-  Added RFC 1152 [sic] date support
-  Fixed bug in gamma handling of 4-bit grayscale
-  Added 2-bit grayscale gamma handling (Glenn R-P)
-  Added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P)
-  Minor corrections in libpng.txt
-  Added simple sRGB support (Glenn R-P)
-  Easier conditional compiling, e.g.,
-    define PNG_READ/WRITE_NOT_FULLY_SUPPORTED;
-    all configurable options can be selected from command-line instead
-    of having to edit pngconf.h (Glenn R-P)
-  Fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P)
-  Added more conditions for png_do_background, to avoid changing
-    black pixels to background when a background is supplied and
-    no pixels are transparent
-  Repaired PNG_NO_STDIO behavior
-  Tested NODIV support and made it default behavior (Greg Roelofs)
-  Added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler)
-  Regularized version numbering scheme and bumped shared-library major
-    version number to 2 to avoid problems with libpng 0.89 apps
-    (Greg Roelofs)
-
-Version 0.98 [January, 1998]
-  Cleaned up some typos in libpng.txt and in code documentation
-  Fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler)
-  Cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c
-  Changed recommendation about file_gamma for PC images to .51 from .45,
-    in example.c and libpng.txt, added comments to distinguish between
-    screen_gamma, viewing_gamma, and display_gamma.
-  Changed all references to RFC1152 to read RFC1123 and changed the
-    PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED
-  Added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent)
-  Changed srgb_intent from png_byte to int to avoid compiler bugs
-
-Version 0.99 [January 30, 1998]
-  Free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler)
-  Fixed a longstanding "packswap" bug in pngtrans.c
-  Fixed some inconsistencies in pngconf.h that prevented compiling with
-    PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined
-  Fixed some typos and made other minor rearrangement of libpng.txt (Andreas)
-  Changed recommendation about file_gamma for PC images to .50 from .51 in
-    example.c and libpng.txt, and changed file_gamma for sRGB images to .45
-  Added a number of functions to access information from the png structure
-    png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit)
-  Added TARGET_MACOS similar to zlib-1.0.8
-  Define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined
-  Added type casting to all png_malloc() function calls
-
-Version 0.99a [January 31, 1998]
-  Added type casts and parentheses to all returns that return a value.(Tim W.)
-
-Version 0.99b [February 4, 1998]
-  Added type cast png_uint_32 on malloc function calls where needed.
-  Changed type of num_hist from png_uint_32 to int (same as num_palette).
-  Added checks for rowbytes overflow, in case png_size_t is less than 32 bits.
-  Renamed makefile.elf to makefile.lnx.
-
-Version 0.99c [February 7, 1998]
-  More type casting.  Removed erroneous overflow test in pngmem.c.
-  Added png_buffered_memcpy() and png_buffered_memset(), apply them to rowbytes.
-  Added UNIX manual pages libpng.3 (incorporating libpng.txt) and  png.5.
-
-Version 0.99d [February 11, 1998]
-  Renamed "far_to_near()" "png_far_to_near()"
-  Revised libpng.3
-  Version 99c "buffered" operations didn't work as intended.  Replaced them
-    with png_memcpy_check() and png_memset_check().
-  Added many "if (png_ptr == NULL) return" to quell compiler warnings about
-    unused png_ptr, mostly in pngget.c and pngset.c.
-  Check for overlength tRNS chunk present when indexed-color PLTE is read.
-  Cleaned up spelling errors in libpng.3/libpng.txt
-  Corrected a problem with png_get_tRNS() which returned undefined trans array
-
-Version 0.99e [February 28, 1998]
-  Corrected png_get_tRNS() again.
-  Add parentheses for easier reading of pngget.c, fixed "||" should be "&&".
-  Touched up example.c to make more of it compileable, although the entire
-    file still can't be compiled (Willem van Schaik)
-  Fixed a bug in png_do_shift() (Bryan Tsai)
-  Added a space in png.h prototype for png_write_chunk_start()
-  Replaced pngtest.png with one created with zlib 1.1.1
-  Changed pngtest to report PASS even when file size is different (Jean-loup G.)
-  Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)
-
-Version 0.99f [March 5, 1998]
-  Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
-  Moved makefiles into a "scripts" directory, and added INSTALL instruction file
-  Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
-  Added pointers to "note on libpng versions" in makefile.lnx and README
-  Added row callback feature when reading and writing nonprogressive rows
-    and added a test of this feature in pngtest.c
-  Added user transform callbacks, with test of the feature in pngtest.c
-
-Version 0.99g [March 6, 1998, morning]
-  Minor changes to pngtest.c to suppress compiler warnings.
-  Removed "beta" language from documentation.
-
-Version 0.99h [March 6, 1998, evening]
-  Minor changes to previous minor changes to pngtest.c
-  Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
-    and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
-  Added user transform capability
-
-Version 1.00 [March 7, 1998]
-  Changed several typedefs in pngrutil.c
-  Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
-  Replaced "while(1)" with "for(;;)"
-  Added PNGARG() to prototypes in pngtest.c and removed some prototypes
-  Updated some of the makefiles (Tom Lane)
-  Changed some typedefs (s_start, etc.) in pngrutil.c
-  Fixed dimensions of "short_months" array in pngwrite.c
-  Replaced ansi2knr.c with the one from jpeg-v6
-
-Version 1.0.0 [March 8, 1998]
-  Changed name from 1.00 to 1.0.0 (Adam Costello)
-  Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)
-
-Version 1.0.0a [March 9, 1998]
-  Fixed three bugs in pngrtran.c to make gamma+background handling consistent
-    (Greg Roelofs)
-  Changed format of the PNG_LIBPNG_VER integer to xyyzz instead of xyz
-    for major, minor, and bugfix releases.  This is 10001. (Adam Costello,
-    Tom Lane)
-  Make months range from 1-12 in png_convert_to_rfc1123
-
-Version 1.0.0b [March 13, 1998]
-  Quieted compiler complaints about two empty "for" loops in pngrutil.c
-  Minor changes to makefile.s2x
-  Removed #ifdef/#endif around a png_free() in pngread.c
-
-Version 1.0.1 [March 14, 1998]
-  Changed makefile.s2x to reduce security risk of using a relative pathname
-  Fixed some typos in the documentation (Greg).
-  Fixed a problem with value of "channels" returned by png_read_update_info()
-
-Version 1.0.1a [April 21, 1998]
-  Optimized Paeth calculations by replacing abs() function calls with intrinsics
-  plus other loop optimizations. Improves avg decoding speed by about 20%.
-  Commented out i386istic "align" compiler flags in makefile.lnx.
-  Reduced the default warning level in some makefiles, to make them consistent.
-  Removed references to IJG and JPEG in the ansi2knr.c copyright statement.
-  Fixed a bug in png_do_strip_filler with XXRRGGBB => RRGGBB transformation.
-  Added grayscale and 16-bit capability to png_do_read_filler().
-  Fixed a bug in pngset.c, introduced in version 0.99c, that sets rowbytes
-    too large when writing an image with bit_depth < 8 (Bob Dellaca).
-  Corrected some bugs in the experimental weighted filtering heuristics.
-  Moved a misplaced pngrutil code block that truncates tRNS if it has more
-    than num_palette entries -- test was done before num_palette was defined.
-  Fixed a png_convert_to_rfc1123() bug that converts day 31 to 0 (Steve Eddins).
-  Changed compiler flags in makefile.wat for better optimization
-    (Pawel Mrochen).
-
-Version 1.0.1b [May 2, 1998]
-  Relocated png_do_gray_to_rgb() within png_do_read_transformations() (Greg).
-  Relocated the png_composite macros from pngrtran.c to png.h (Greg).
-  Added makefile.sco (contributed by Mike Hopkirk).
-  Fixed two bugs (missing definitions of "istop") introduced in libpng-1.0.1a.
-  Fixed a bug in pngrtran.c that would set channels=5 under some circumstances.
-  More work on the Paeth-filtering, achieving imperceptible speedup
-    (A Kleinert).
-  More work on loop optimization which may help when compiled with C++
-    compilers.
-  Added warnings when people try to use transforms they've defined out.
-  Collapsed 4 "i" and "c" loops into single "i" loops in pngrtran and pngwtran.
-  Revised paragraph about png_set_expand() in libpng.txt and libpng.3 (Greg)
-
-Version 1.0.1c [May 11, 1998]
-  Fixed a bug in pngrtran.c (introduced in libpng-1.0.1a) where the masks for
-    filler bytes should have been 0xff instead of 0xf.
-  Added max_pixel_depth=32 in pngrutil.c when using FILLER with palette images.
-  Moved PNG_WRITE_WEIGHTED_FILTER_SUPPORTED and PNG_WRITE_FLUSH_SUPPORTED
-    out of the PNG_WRITE_TRANSFORMS_NOT_SUPPORTED block of pngconf.h
-  Added "PNG_NO_WRITE_TRANSFORMS" etc., as alternatives for *_NOT_SUPPORTED,
-    for consistency, in pngconf.h
-  Added individual "ifndef PNG_NO_[CAPABILITY]" in pngconf.h to make it easier
-    to remove unwanted capabilities via the compile line
-  Made some corrections to grammar (which, it's) in documentation (Greg).
-  Corrected example.c, use of row_pointers in png_write_image().
-
-Version 1.0.1d [May 24, 1998]
-  Corrected several statements that used side effects illegally in pngrutil.c
-    and pngtrans.c, that were introduced in version 1.0.1b
-  Revised png_read_rows() to avoid repeated if-testing for NULL (A Kleinert)
-  More corrections to example.c, use of row_pointers in png_write_image()
-    and png_read_rows().
-  Added pngdll.mak and pngdef.pas to scripts directory, contributed by
-    Bob Dellaca, to make a png32bd.dll with Borland C++ 4.5
-  Fixed error in example.c with png_set_text: num_text is 3, not 2 (Guido V.)
-  Changed several loops from count-down to count-up, for consistency.
-
-Version 1.0.1e [June 6, 1998]
-  Revised libpng.txt and libpng.3 description of png_set_read|write_fn(), and
-    added warnings when people try to set png_read_fn and png_write_fn in
-    the same structure.
-  Added a test such that png_do_gamma will be done when num_trans==0
-    for truecolor images that have defined a background.  This corrects an
-    error that was introduced in libpng-0.90 that can cause gamma processing
-    to be skipped.
-  Added tests in png.h to include "trans" and "trans_values" in structures
-    when PNG_READ_BACKGROUND_SUPPORTED or PNG_READ_EXPAND_SUPPORTED is defined.
-  Add png_free(png_ptr->time_buffer) in png_destroy_read_struct()
-  Moved png_convert_to_rfc_1123() from pngwrite.c to png.c
-  Added capability for user-provided malloc_fn() and free_fn() functions,
-    and revised pngtest.c to demonstrate their use, replacing the
-    PNGTEST_DEBUG_MEM feature.
-  Added makefile.w32, for Microsoft C++ 4.0 and later (Tim Wegner).
-
-Version 1.0.2 [June 14, 1998]
-  Fixed two bugs in makefile.bor .
-
-Version 1.0.2a [December 30, 1998]
-  Replaced and extended code that was removed from png_set_filler() in 1.0.1a.
-  Fixed a bug in png_do_filler() that made it fail to write filler bytes in
-    the left-most pixel of each row (Kevin Bracey).
-  Changed "static pngcharp tIME_string" to "static char tIME_string[30]"
-    in pngtest.c (Duncan Simpson).
-  Fixed a bug in pngtest.c that caused pngtest to try to write a tIME chunk
-    even when no tIME chunk was present in the source file.
-  Fixed a problem in pngrutil.c: gray_to_rgb didn't always work with 16-bit.
-  Fixed a problem in png_read_push_finish_row(), which would not skip some
-    passes that it should skip, for images that are less than 3 pixels high.
-  Interchanged the order of calls to png_do_swap() and png_do_shift()
-    in pngwtran.c (John Cromer).
-  Added #ifdef PNG_DEBUG/#endif surrounding use of PNG_DEBUG in png.h .
-  Changed "bad adaptive filter type" from error to warning in pngrutil.c .
-  Fixed a documentation error about default filtering with 8-bit indexed-color.
-  Separated the PNG_NO_STDIO macro into PNG_NO_STDIO and PNG_NO_CONSOLE_IO
-    (L. Peter Deutsch).
-  Added png_set_rgb_to_gray() and png_get_rgb_to_gray_status() functions.
-  Added png_get_copyright() and png_get_header_version() functions.
-  Revised comments on png_set_progressive_read_fn() in libpng.txt and example.c
-  Added information about debugging in libpng.txt and libpng.3 .
-  Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and
-    makefile.sco.
-  Removed lines after Dynamic Dependencies" in makefile.aco .
-  Revised makefile.dec to make a shared library (Jeremie Petit).
-  Removed trailing blanks from all files.
-
-Version 1.0.2a [January 6, 1999]
-  Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h
-  Added "if" tests to silence complaints about unused png_ptr in png.h and png.c
-  Changed "check_if_png" function in example.c to return true (nonzero) if PNG.
-  Changed libpng.txt to demonstrate png_sig_cmp() instead of png_check_sig()
-    which is obsolete.
-
-Version 1.0.3 [January 14, 1999]
-  Added makefile.hux, for Hewlett Packard HPUX 10.20 and 11.00 (Jim Rice)
-  Added a statement of Y2K compliance in png.h, libpng.3, and Y2KINFO.
-
-Version 1.0.3a [August 12, 1999]
-  Added check for PNG_READ_INTERLACE_SUPPORTED in pngread.c; issue a warning
-     if an attempt is made to read an interlaced image when it's not supported.
-  Added check if png_ptr->trans is defined before freeing it in pngread.c
-  Modified the Y2K statement to include versions back to version 0.71
-  Fixed a bug in the check for valid IHDR bit_depth/color_types in pngrutil.c
-  Modified makefile.wat (added -zp8 flag, ".symbolic", changed some comments)
-  Replaced leading blanks with tab characters in makefile.hux
-  Changed "dworkin.wustl.edu" to "ccrc.wustl.edu" in various documents.
-  Changed (float)red and (float)green to (double)red, (double)green
-     in png_set_rgb_to_gray() to avoid "promotion" problems in AIX.
-  Fixed a bug in pngconf.h that omitted <stdio.h> when PNG_DEBUG==0 (K Bracey).
-  Reformatted libpng.3 and libpngpf.3 with proper fonts (script by J. vanZandt).
-  Updated documentation to refer to the PNG-1.2 specification.
-  Removed ansi2knr.c and left pointers to the latest source for ansi2knr.c
-    in makefile.knr, INSTALL, and README (L. Peter Deutsch)
-  Fixed bugs in calculation of the length of rowbytes when adding alpha
-    channels to 16-bit images, in pngrtran.c (Chris Nokleberg)
-  Added function png_set_user_transform_info() to store user_transform_ptr,
-    user_depth, and user_channels into the png_struct, and a function
-    png_get_user_transform_ptr() to retrieve the pointer (Chris Nokleberg)
-  Added function png_set_empty_plte_permitted() to make libpng useable
-    in MNG applications.
-  Corrected the typedef for png_free_ptr in png.h (Jesse Jones).
-  Correct gamma with srgb is 45455 instead of 45000 in pngrutil.c, to be
-    consistent with PNG-1.2, and allow variance of 500 before complaining.
-  Added assembler code contributed by Intel in file pngvcrd.c and modified
-    makefile.w32 to use it (Nirav Chhatrapati, INTEL Corporation,
-    Gilles Vollant)
-  Changed "ln -s -f" to "ln -f -s" in the makefiles to make Solaris happy.
-  Added some aliases for png_set_expand() in pngrtran.c, namely
-    png_set_expand_PLTE(), png_set_expand_depth(), and png_set_expand_tRNS()
-    (Greg Roelofs, in "PNG: The Definitive Guide").
-  Added makefile.beo for BEOS on X86, contributed by Sander Stok.
-
-Version 1.0.3b [August 26, 1999]
-  Replaced 2147483647L several places with PNG_MAX_UINT macro, defined in png.h
-  Changed leading blanks to tabs in all makefiles.
-  Define PNG_USE_PNGVCRD in makefile.w32, to get MMX assembler code.
-  Made alternate versions of  png_set_expand() in pngrtran.c, namely
-    png_set_gray_1_2_4_to_8, png_set_palette_to_rgb, and png_set_tRNS_to_alpha
-    (Greg Roelofs, in "PNG: The Definitive Guide").  Deleted the 1.0.3a aliases.
-  Relocated start of 'extern "C"' block in png.h so it doesn't include pngconf.h
-  Revised calculation of num_blocks in pngmem.c to avoid a potentially
-    negative shift distance, whose results are undefined in the C language.
-  Added a check in pngset.c to prevent writing multiple tIME chunks.
-  Added a check in pngwrite.c to detect invalid small window_bits sizes.
-
-Version 1.0.3d [September 4, 1999]
-  Fixed type casting of igamma in pngrutil.c
-  Added new png_expand functions to scripts/pngdef.pas and pngos2.def
-  Added a demo read_user_transform_fn that examines the row filters in pngtest.c
-
-Version 1.0.4 [September 24, 1999]
-  Define PNG_ALWAYS_EXTERN in pngconf.h if __STDC__ is defined
-  Delete #define PNG_INTERNAL and include "png.h" from pngasmrd.h
-  Made several minor corrections to pngtest.c
-  Renamed the makefiles with longer but more user friendly extensions.
-  Copied the PNG copyright and license to a separate LICENSE file.
-  Revised documentation, png.h, and example.c to remove reference to
-    "viewing_gamma" which no longer appears in the PNG specification.
-  Revised pngvcrd.c to use MMX code for interlacing only on the final pass.
-  Updated pngvcrd.c to use the faster C filter algorithms from libpng-1.0.1a
-  Split makefile.win32vc into two versions, makefile.vcawin32 (uses MMX
-    assembler code) and makefile.vcwin32 (doesn't).
-  Added a CPU timing report to pngtest.c (enabled by defining PNGTEST_TIMING)
-  Added a copy of pngnow.png to the distribution.
-
-Version 1.0.4a [September 25, 1999]
-  Increase max_pixel_depth in pngrutil.c if a user transform needs it.
-  Changed several division operations to right-shifts in pngvcrd.c
-
-Version 1.0.4b [September 30, 1999]
-  Added parentheses in line 3732 of pngvcrd.c
-  Added a comment in makefile.linux warning about buggy -O3 in pgcc 2.95.1
-
-Version 1.0.4c [October 1, 1999]
-  Added a "png_check_version" function in png.c and pngtest.c that will generate
-    a helpful compiler error if an old png.h is found in the search path.
-  Changed type of png_user_transform_depth|channels from int to png_byte.
-
-Version 1.0.4d [October 6, 1999]
-  Changed 0.45 to 0.45455 in png_set_sRGB()
-  Removed unused PLTE entries from pngnow.png
-  Re-enabled some parts of pngvcrd.c (png_combine_row) that work properly.
-
-Version 1.0.4e [October 10, 1999]
-  Fixed sign error in pngvcrd.c (Greg Roelofs)
-  Replaced some instances of memcpy with simple assignments in pngvcrd (GR-P)
-
-Version 1.0.4f [October 15, 1999]
-  Surrounded example.c code with #if 0 .. #endif to prevent people from
-    inadvertently trying to compile it.
-  Changed png_get_header_version() from a function to a macro in png.h
-  Added type casting mostly in pngrtran.c and pngwtran.c
-  Removed some pointless "ptr = NULL" in pngmem.c
-  Added a "contrib" directory containing the source code from Greg's book.
-
-Version 1.0.5 [October 15, 1999]
-  Minor editing of the INSTALL and README files.
-
-Version 1.0.5a [October 23, 1999]
-  Added contrib/pngsuite and contrib/pngminus (Willem van Schaik)
-  Fixed a typo in the png_set_sRGB() function call in example.c (Jan Nijtmans)
-  Further optimization and bugfix of pngvcrd.c
-  Revised pngset.c so that it does not allocate or free memory in the user's
-    text_ptr structure.  Instead, it makes its own copy.
-  Created separate write_end_info_struct in pngtest.c for a more severe test.
-  Added code in pngwrite.c to free info_ptr->text[i].key to stop a memory leak.
-
-Version 1.0.5b [November 23, 1999]
-  Moved PNG_FLAG_HAVE_CHUNK_HEADER, PNG_FLAG_BACKGROUND_IS_GRAY and
-    PNG_FLAG_WROTE_tIME from flags to mode.
-  Added png_write_info_before_PLTE() function.
-  Fixed some typecasting in contrib/gregbook/*.c
-  Updated scripts/makevms.com and added makevms.com to contrib/gregbook
-    and contrib/pngminus (Martin Zinser)
-
-Version 1.0.5c [November 26, 1999]
-  Moved png_get_header_version from png.h to png.c, to accommodate ansi2knr.
-  Removed all global arrays (according to PNG_NO_GLOBAL_ARRAYS macro), to
-    accommodate making DLL's: Moved usr_png_ver from global variable to function
-    png_get_header_ver() in png.c.  Moved png_sig to png_sig_bytes in png.c and
-    eliminated use of png_sig in pngwutil.c.  Moved the various png_CHNK arrays
-    into pngtypes.h.  Eliminated use of global png_pass arrays.  Declared the
-    png_CHNK and png_pass arrays to be "const".  Made the global arrays
-    available to applications (although none are used in libpng itself) when
-    PNG_NO_GLOBAL_ARRAYS is not defined or when PNG_GLOBAL_ARRAYS is defined.
-  Removed some extraneous "-I" from contrib/pngminus/makefile.std
-  Changed the PNG_sRGB_INTENT macros in png.h to be consistent with PNG-1.2.
-  Change PNG_SRGB_INTENT to PNG_sRGB_INTENT in libpng.txt and libpng.3
-
-Version 1.0.5d [November 29, 1999]
-  Add type cast (png_const_charp) two places in png.c
-  Eliminated pngtypes.h; use macros instead to declare PNG_CHNK arrays.
-  Renamed "PNG_GLOBAL_ARRAYS" to "PNG_USE_GLOBAL_ARRAYS" and made available
-    to applications a macro "PNG_USE_LOCAL_ARRAYS".
-  comment out (with #ifdef) all the new declarations when
-    PNG_USE_GLOBAL_ARRAYS is defined.
-  Added PNG_EXPORT_VAR macro to accommodate making DLL's.
-
-Version 1.0.5e [November 30, 1999]
-  Added iCCP, iTXt, and sPLT support; added "lang" member to the png_text
-    structure; refactored the inflate/deflate support to make adding new chunks
-    with trailing compressed parts easier in the future, and added new functions
-    png_free_iCCP, png_free_pCAL, png_free_sPLT, png_free_text, png_get_iCCP,
-    png_get_spalettes, png_set_iCCP, png_set_spalettes (Eric S. Raymond).
-  NOTE: Applications that write text chunks MUST define png_text->lang
-    before calling png_set_text(). It must be set to NULL if you want to
-    write tEXt or zTXt chunks.  If you want your application to be able to
-    run with older versions of libpng, use
-
-      #ifdef PNG_iTXt_SUPPORTED
-         png_text[i].lang = NULL;
-      #endif
-
-  Changed png_get_oFFs() and png_set_oFFs() to use signed rather than unsigned
-    offsets (Eric S. Raymond).
-  Combined PNG_READ_cHNK_SUPPORTED and PNG_WRITE_cHNK_SUPPORTED macros into
-    PNG_cHNK_SUPPORTED and combined the three types of PNG_text_SUPPORTED
-    macros, leaving the separate macros also available.
-  Removed comments on #endifs at the end of many short, non-nested #if-blocks.
-
-Version 1.0.5f [December 6, 1999]
-  Changed makefile.solaris to issue a warning about potential problems when
-    the ucb "ld" is in the path ahead of the ccs "ld".
-  Removed "- [date]" from the "synopsis" line in libpng.3 and libpngpf.3.
-  Added sCAL chunk support (Eric S. Raymond).
-
-Version 1.0.5g [December 7, 1999]
-  Fixed "png_free_spallettes" typo in png.h
-  Added code to handle new chunks in pngpread.c
-  Moved PNG_CHNK string macro definitions outside of PNG_NO_EXTERN block
-  Added "translated_key" to png_text structure and png_write_iTXt().
-  Added code in pngwrite.c to work around a newly discovered zlib bug.
-
-Version 1.0.5h [December 10, 1999]
-  NOTE: regarding the note for version 1.0.5e, the following must also
-    be included in your code:
-        png_text[i].translated_key = NULL;
-  Unknown chunk handling is now supported.
-  Option to eliminate all floating point support was added.  Some new
-    fixed-point functions such as png_set_gAMA_fixed() were added.
-  Expanded tabs and removed trailing blanks in source files.
-
-Version 1.0.5i [December 13, 1999]
-  Added some type casts to silence compiler warnings.
-  Renamed "png_free_spalette" to "png_free_spalettes" for consistency.
-  Removed leading blanks from a #define in pngvcrd.c
-  Added some parameters to the new png_set_keep_unknown_chunks() function.
-  Added a test for up->location != 0 in the first instance of writing
-    unknown chunks in pngwrite.c
-  Changed "num" to "i" in png_free_spalettes() and png_free_unknowns() to
-    prevent recursion.
-  Added png_free_hIST() function.
-  Various patches to fix bugs in the sCAL and integer cHRM processing,
-    and to add some convenience macros for use with sCAL.
-
-Version 1.0.5j [December 21, 1999]
-  Changed "unit" parameter of png_write_sCAL from png_byte to int, to work
-    around buggy compilers.
-  Added new type "png_fixed_point" for integers that hold float*100000 values
-  Restored backward compatibility of tEXt/zTXt chunk processing:
-    Restored the first four members of png_text to the same order as v.1.0.5d.
-    Added members "lang_key" and "itxt_length" to png_text struct.  Set
-    text_length=0 when "text" contains iTXt data.  Use the "compression"
-    member to distinguish among tEXt/zTXt/iTXt types.  Added
-    PNG_ITXT_COMPRESSION_NONE (1) and PNG_ITXT_COMPRESSION_zTXt(2) macros.
-    The "Note" above, about backward incompatibility of libpng-1.0.5e, no
-    longer applies.
-  Fixed png_read|write_iTXt() to read|write parameters in the right order,
-    and to write the iTXt chunk after IDAT if it appears in the end_ptr.
-  Added pnggccrd.c, version of pngvcrd.c Intel assembler for gcc (Greg Roelofs)
-  Reversed the order of trying to write floating-point and fixed-point gAMA.
-
-Version 1.0.5k [December 27, 1999]
-  Added many parentheses, e.g., "if (a && b & c)" becomes "if (a && (b & c))"
-  Added png_handle_as_unknown() function (Glenn)
-  Added png_free_chunk_list() function and chunk_list and num_chunk_list members
-    of png_ptr.
-  Eliminated erroneous warnings about multiple sPLT chunks and sPLT-after-PLTE.
-  Fixed a libpng-1.0.5h bug in pngrutil.c that was issuing erroneous warnings
-    about ignoring incorrect gAMA with sRGB (gAMA was in fact not ignored)
-  Added png_free_tRNS(); png_set_tRNS() now malloc's its own trans array (ESR).
-  Define png_get_int_32 when oFFs chunk is supported as well as when pCAL is.
-  Changed type of proflen from png_int_32 to png_uint_32 in png_get_iCCP().
-
-Version 1.0.5l [January 1, 2000]
-  Added functions png_set_read_user_chunk_fn() and png_get_user_chunk_ptr()
-    for setting a callback function to handle unknown chunks and for
-    retrieving the associated user pointer (Glenn).
-
-Version 1.0.5m [January 7, 2000]
-  Added high-level functions png_read_png(), png_write_png(), png_free_pixels().
-
-Version 1.0.5n [January 9, 2000]
-  Added png_free_PLTE() function, and modified png_set_PLTE() to malloc its
-    own memory for info_ptr->palette.  This makes it safe for the calling
-    application to free its copy of the palette any time after it calls
-    png_set_PLTE().
-
-Version 1.0.5o [January 20, 2000]
-  Cosmetic changes only (removed some trailing blanks and TABs)
-
-Version 1.0.5p [January 31, 2000]
-  Renamed pngdll.mak to makefile.bd32
-  Cosmetic changes in pngtest.c
-
-Version 1.0.5q [February 5, 2000]
-  Relocated the makefile.solaris warning about PATH problems.
-  Fixed pngvcrd.c bug by pushing/popping registers in mmxsupport (Bruce Oberg)
-  Revised makefile.gcmmx
-  Added PNG_SETJMP_SUPPORTED, PNG_SETJMP_NOT_SUPPORTED, and PNG_ABORT() macros
-
-Version 1.0.5r [February 7, 2000]
-  Removed superfluous prototype for png_get_itxt from png.h
-  Fixed a bug in pngrtran.c that improperly expanded the background color.
-  Return *num_text=0 from png_get_text() when appropriate, and fix documentation
-    of png_get_text() in libpng.txt/libpng.3.
-
-Version 1.0.5s [February 18, 2000]
-  Added "png_jmp_env()" macro to pngconf.h, to help people migrate to the
-    new error handler that's planned for the next libpng release, and changed
-    example.c, pngtest.c, and contrib programs to use this macro.
-  Revised some of the DLL-export macros in pngconf.h (Greg Roelofs)
-  Fixed a bug in png_read_png() that caused it to fail to expand some images
-    that it should have expanded.
-  Fixed some mistakes in the unused and undocumented INCH_CONVERSIONS functions
-    in pngget.c
-  Changed the allocation of palette, history, and trans arrays back to
-    the version 1.0.5 method (linking instead of copying) which restores
-    backward compatibility with version 1.0.5.  Added some remarks about
-    that in example.c.  Added "free_me" member to info_ptr and png_ptr
-    and added png_free_data() function.
-  Updated makefile.linux and makefile.gccmmx to make directories conditionally.
-  Made cosmetic changes to pngasmrd.h
-  Added png_set_rows() and png_get_rows(), for use with png_read|write_png().
-  Modified png_read_png() to allocate info_ptr->row_pointers only if it
-    hasn't already been allocated.
-
-Version 1.0.5t [March 4, 2000]
-  Changed png_jmp_env() migration aiding macro to png_jmpbuf().
-  Fixed "interlace" typo (should be "interlaced") in contrib/gregbook/read2-x.c
-  Fixed bug with use of PNG_BEFORE_IHDR bit in png_ptr->mode, introduced when
-    PNG_FLAG_HAVE_CHUNK_HEADER was moved into png_ptr->mode in version 1.0.5b
-  Files in contrib/gregbook were revised to use png_jmpbuf() and to select
-    a 24-bit visual if one is available, and to allow abbreviated options.
-  Files in contrib/pngminus were revised to use the png_jmpbuf() macro.
-  Removed spaces in makefile.linux and makefile.gcmmx, introduced in 1.0.5s
-
-Version 1.0.5u [March 5, 2000]
-  Simplified the code that detects old png.h in png.c and pngtest.c
-  Renamed png_spalette (_p, _pp) to png_sPLT_t (_tp, _tpp)
-  Increased precision of rgb_to_gray calculations from 8 to 15 bits and
-    added png_set_rgb_to_gray_fixed() function.
-  Added makefile.bc32 (32-bit Borland C++, C mode)
-
-Version 1.0.5v [March 11, 2000]
-  Added some parentheses to the png_jmpbuf macro definition.
-  Updated references to the zlib home page, which has moved to freesoftware.com.
-  Corrected bugs in documentation regarding png_read_row() and png_write_row().
-  Updated documentation of png_rgb_to_gray calculations in libpng.3/libpng.txt.
-  Renamed makefile.borland,turboc3 back to makefile.bor,tc3 as in version 1.0.3,
-    revised borland makefiles; added makefile.ibmvac3 and makefile.gcc (Cosmin)
-
-Version 1.0.6 [March 20, 2000]
-  Minor revisions of makefile.bor, libpng.txt, and gregbook/rpng2-win.c
-  Added makefile.sggcc (SGI IRIX with gcc)
-
-Version 1.0.6d [April 7, 2000]
-  Changed sprintf() to strcpy() in png_write_sCAL_s() to work without STDIO
-  Added data_length parameter to png_decompress_chunk() function
-  Revised documentation to remove reference to abandoned png_free_chnk functions
-  Fixed an error in png_rgb_to_gray_fixed()
-  Revised example.c, usage of png_destroy_write_struct().
-  Renamed makefile.ibmvac3 to makefile.ibmc, added libpng.icc IBM project file
-  Added a check for info_ptr->free_me&PNG_FREE_TEXT when freeing text in png.c
-  Simplify png_sig_bytes() function to remove use of non-ISO-C strdup().
-
-Version 1.0.6e [April 9, 2000]
-  Added png_data_freer() function.
-  In the code that checks for over-length tRNS chunks, added check of
-    info_ptr->num_trans as well as png_ptr->num_trans (Matthias Benckmann)
-  Minor revisions of libpng.txt/libpng.3.
-  Check for existing data and free it if the free_me flag is set, in png_set_*()
-    and png_handle_*().
-  Only define PNG_WEIGHTED_FILTERS_SUPPORTED when PNG_FLOATING_POINT_SUPPORTED
-    is defined.
-  Changed several instances of PNG_NO_CONSOLE_ID to PNG_NO_STDIO in pngrutil.c
-    and mentioned the purposes of the two macros in libpng.txt/libpng.3.
-
-Version 1.0.6f [April 14, 2000]
-  Revised png_set_iCCP() and png_set_rows() to avoid prematurely freeing data.
-  Add checks in png_set_text() for NULL members of the input text structure.
-  Revised libpng.txt/libpng.3.
-  Removed superfluous prototype for png_set_iTXt from png.h
-  Removed "else" from pngread.c, after png_error(), and changed "0" to "length".
-  Changed several png_errors about malformed ancillary chunks to png_warnings.
-
-Version 1.0.6g [April 24, 2000]
-  Added png_pass-* arrays to pnggccrd.c when PNG_USE_LOCAL_ARRAYS is defined.
-  Relocated paragraph about png_set_background() in libpng.3/libpng.txt
-    and other revisions (Matthias Benckmann)
-  Relocated info_ptr->free_me, png_ptr->free_me, and other info_ptr and
-    png_ptr members to restore binary compatibility with libpng-1.0.5
-    (breaks compatibility with libpng-1.0.6).
-
-Version 1.0.6h [April 24, 2000]
-  Changed shared library so-number pattern from 2.x.y.z to xy.z (this builds
-    libpng.so.10 & libpng.so.10.6h instead of libpng.so.2 & libpng.so.2.1.0.6h)
-    This is a temporary change for test purposes.
-
-Version 1.0.6i [May 2, 2000]
-  Rearranged some members at the end of png_info and png_struct, to put
-    unknown_chunks_num and free_me within the original size of the png_structs
-    and free_me, png_read_user_fn, and png_free_fn within the original png_info,
-    because some old applications allocate the structs directly instead of
-    using png_create_*().
-  Added documentation of user memory functions in libpng.txt/libpng.3
-  Modified png_read_png so that it will use user_allocated row_pointers
-    if present, unless free_me directs that it be freed, and added description
-    of the use of png_set_rows() and png_get_rows() in libpng.txt/libpng.3.
-  Added PNG_LEGACY_SUPPORTED macro, and #ifdef out all new (since version
-    1.00) members of png_struct and png_info, to regain binary compatibility
-    when you define this macro.  Capabilities lost in this event
-    are user transforms (new in version 1.0.0),the user transform pointer
-    (new in version 1.0.2), rgb_to_gray (new in 1.0.5), iCCP, sCAL, sPLT,
-    the high-level interface, and unknown chunks support (all new in 1.0.6).
-    This was necessary because of old applications that allocate the structs
-    directly as authors were instructed to do in libpng-0.88 and earlier,
-    instead of using png_create_*().
-  Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which
-    can be used to detect codes that directly allocate the structs, and
-    code to check these modes in png_read_init() and png_write_init() and
-    generate a libpng error if the modes aren't set and PNG_LEGACY_SUPPORTED
-    was not defined.
-  Added makefile.intel and updated makefile.watcom (Pawel Mrochen)
-
-Version 1.0.6j [May 3, 2000]
-  Overloaded png_read_init() and png_write_init() with macros that convert
-    calls to png_read_init_2() or png_write_init_2() that check the version
-    and structure sizes.
-
-Version 1.0.7beta11 [May 7, 2000]
-  Removed the new PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT modes
-    which are no longer used.
-  Eliminated the three new members of png_text when PNG_LEGACY_SUPPORTED is
-    defined or when neither PNG_READ_iTXt_SUPPORTED nor PNG_WRITE_iTXT_SUPPORTED
-    is defined.
-  Made PNG_NO_READ|WRITE_iTXt the default setting, to avoid memory
-    overrun when old applications fill the info_ptr->text structure directly.
-  Added PNGAPI macro, and added it to the definitions of all exported functions.
-  Relocated version macro definitions ahead of the includes of zlib.h and
-    pngconf.h in png.h.
-
-Version 1.0.7beta12 [May 12, 2000]
-  Revised pngset.c to avoid a problem with expanding the png_debug macro.
-  Deleted some extraneous defines from pngconf.h
-  Made PNG_NO_CONSOLE_IO the default condition when PNG_BUILD_DLL is defined.
-  Use MSC _RPTn debugging instead of fprintf if _MSC_VER is defined.
-  Added png_access_version_number() function.
-  Check for mask&PNG_FREE_CHNK (for TEXT, SCAL, PCAL) in png_free_data().
-  Expanded libpng.3/libpng.txt information about png_data_freer().
-
-Version 1.0.7beta14 [May 17, 2000] (beta13 was not published)
-  Changed pnggccrd.c and pngvcrd.c to handle bad adaptive filter types as
-    warnings instead of errors, as pngrutil.c does.
-  Set the PNG_INFO_IDAT valid flag in png_set_rows() so png_write_png()
-    will actually write IDATs.
-  Made the default PNG_USE_LOCAL_ARRAYS depend on PNG_DLL instead of WIN32.
-  Make png_free_data() ignore its final parameter except when freeing data
-    that can have multiple instances (text, sPLT, unknowns).
-  Fixed a new bug in png_set_rows().
-  Removed info_ptr->valid tests from png_free_data(), as in version 1.0.5.
-  Added png_set_invalid() function.
-  Fixed incorrect illustrations of png_destroy_write_struct() in example.c.
-
-Version 1.0.7beta15 [May 30, 2000]
-  Revised the deliberately erroneous Linux setjmp code in pngconf.h to produce
-    fewer error messages.
-  Rearranged checks for Z_OK to check the most likely path first in pngpread.c
-    and pngwutil.c.
-  Added checks in pngtest.c for png_create_*() returning NULL, and mentioned
-    in libpng.txt/libpng.3 the need for applications to check this.
-  Changed names of png_default_*() functions in pngtest to pngtest_*().
-  Changed return type of png_get_x|y_offset_*() from png_uint_32 to png_int_32.
-  Fixed some bugs in the unused PNG_INCH_CONVERSIONS functions in pngget.c
-  Set each pointer to NULL after freeing it in png_free_data().
-  Worked around a problem in pngconf.h; AIX's strings.h defines an "index"
-    macro that conflicts with libpng's png_color_16.index. (Dimitri
-    Papadapoulos)
-  Added "msvc" directory with MSVC++ project files (Simon-Pierre Cadieux).
-
-Version 1.0.7beta16 [June 4, 2000]
-  Revised the workaround of AIX string.h "index" bug.
-  Added a check for overlength PLTE chunk in pngrutil.c.
-  Added PNG_NO_POINTER_INDEXING macro to use array-indexing instead of pointer
-    indexing in pngrutil.c and pngwutil.c to accommodate a buggy compiler.
-  Added a warning in png_decompress_chunk() when it runs out of data, e.g.
-    when it tries to read an erroneous PhotoShop iCCP chunk.
-  Added PNG_USE_DLL macro.
-  Revised the copyright/disclaimer/license notice.
-  Added contrib/msvctest directory
-
-Version 1.0.7rc1 [June 9, 2000]
-  Corrected the definition of PNG_TRANSFORM_INVERT_ALPHA  (0x0400 not 0x0200)
-  Added contrib/visupng directory (Willem van Schaik)
-
-Version 1.0.7beta18 [June 23, 2000]
-  Revised PNGAPI definition, and pngvcrd.c to work with __GCC__
-    and do not redefine PNGAPI if it is passed in via a compiler directive.
-  Revised visupng/PngFile.c to remove returns from within the Try block.
-  Removed leading underscores from "_PNG_H" and "_PNG_SAVE_BSD_SOURCE" macros.
-  Updated contrib/visupng/cexcept.h to version 1.0.0.
-  Fixed bugs in pngwrite.c and pngwutil.c that prevented writing iCCP chunks.
-
-Version 1.0.7rc2 [June 28, 2000]
-  Updated license to include disclaimers required by UCITA.
-  Fixed "DJBPP" typo in pnggccrd.c introduced in beta18.
-
-Version 1.0.7 [July 1, 2000]
-  Revised the definition of "trans_values" in libpng.3/libpng.txt
-
-Version 1.0.8beta1 [July 8, 2000]
-  Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks.
-  Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and
-     pngwutil.c.
-  Changed PNG_EXPORT_VAR to use PNG_IMPEXP, in pngconf.h.
-  Removed unused "#include <assert.h>" from png.c
-  Added WindowsCE support.
-  Revised pnggccrd.c to work with gcc-2.95.2 and in the Cygwin environment.
-
-Version 1.0.8beta2 [July 10, 2000]
-  Added project files to the wince directory and made further revisions
-     of pngtest.c, pngrio.c, and pngwio.c in support of WindowsCE.
-
-Version 1.0.8beta3 [July 11, 2000]
-  Only set the PNG_FLAG_FREE_TRNS or PNG_FREE_TRNS flag in png_handle_tRNS()
-     for indexed-color input files to avoid potential double-freeing trans array
-     under some unusual conditions; problem was introduced in version 1.0.6f.
-  Further revisions to pngtest.c and files in the wince subdirectory.
-
-Version 1.0.8beta4 [July 14, 2000]
-  Added the files pngbar.png and pngbar.jpg to the distribution.
-  Added makefile.cygwin, and cygwin support in pngconf.h
-  Added PNG_NO_ZALLOC_ZERO macro (makes png_zalloc skip zeroing memory)
-
-Version 1.0.8rc1 [July 16, 2000]
-  Revised png_debug() macros and statements to eliminate compiler warnings.
-
-Version 1.0.8 [July 24, 2000]
-  Added png_flush() in pngwrite.c, after png_write_IEND().
-  Updated makefile.hpux to build a shared library.
-
-Version 1.0.9beta1 [November 10, 2000]
-  Fixed typo in scripts/makefile.hpux
-  Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser)
-  Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser)
-  Changed "cdrom.com" in documentation to "libpng.org"
-  Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg).
-  Changed type of "params" from voidp to png_voidp in png_read|write_png().
-  Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
-  Revised the 3 instances of WRITEFILE in pngtest.c.
-  Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory.
-  Updated png.rc in dll/msvc project
-  Revised makefile.dec to define and use LIBPATH and INCPATH
-  Increased size of global png_libpng_ver[] array from 12 to 18 chars.
-  Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
-  Removed duplicate png_crc_finish() from png_handle_bKGD() function.
-  Added a warning when application calls png_read_update_info() multiple times.
-  Revised makefile.cygwin
-  Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
-  Replaced png_set_empty_plte_permitted() with png_permit_mng_features().
-
-Version 1.0.9beta2 [November 19, 2000]
-  Renamed the "dll" subdirectory "projects".
-  Added borland project files to "projects" subdirectory.
-  Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate.
-  Add error message in png_set_compression_buffer_size() when malloc fails.
-
-Version 1.0.9beta3 [November 23, 2000]
-  Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
-  Removed the png_flush() in pngwrite.c that crashes some applications
-    that don't set png_output_flush_fn.
-  Added makefile.macosx and makefile.aix to scripts directory.
-
-Version 1.0.9beta4 [December 1, 2000]
-  Change png_chunk_warning to png_warning in png_check_keyword().
-  Increased the first part of msg buffer from 16 to 18 in png_chunk_error().
-
-Version 1.0.9beta5 [December 15, 2000]
-  Added support for filter method 64 (for PNG datastreams embedded in MNG).
-
-Version 1.0.9beta6 [December 18, 2000]
-  Revised png_set_filter() to accept filter method 64 when appropriate.
-  Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
-    help prevent applications from using MNG features in PNG datastreams.
-  Added png_permit_mng_features() function.
-  Revised libpng.3/libpng.txt.  Changed "filter type" to "filter method".
-
-Version 1.0.9rc1 [December 23, 2000]
-  Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c
-  Fixed error handling of unknown compression type in png_decompress_chunk().
-  In pngconf.h, define __cdecl when _MSC_VER is defined.
-
-Version 1.0.9beta7 [December 28, 2000]
-  Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places.
-  Revised memory management in png_set_hIST and png_handle_hIST in a backward
-    compatible manner.  PLTE and tRNS were revised similarly.
-  Revised the iCCP chunk reader to ignore trailing garbage.
-
-Version 1.0.9beta8 [January 12, 2001]
-  Moved pngasmrd.h into pngconf.h.
-  Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.
-
-Version 1.0.9beta9 [January 15, 2001]
-  Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to
-    wince and msvc project module definition files.
-  Minor revision of makefile.cygwin.
-  Fixed bug with progressive reading of narrow interlaced images in pngpread.c
-
-Version 1.0.9beta10 [January 16, 2001]
-  Do not typedef png_FILE_p in pngconf.h when PNG_NO_STDIO is defined.
-  Fixed "png_mmx_supported" typo in project definition files.
-
-Version 1.0.9beta11 [January 19, 2001]
-  Updated makefile.sgi to make shared library.
-  Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED
-    by default, for the benefit of DLL forward compatibility.  These will
-    be re-enabled in version 1.2.0.
-
-Version 1.0.9rc2 [January 22, 2001]
-  Revised cygwin support.
-
-Version 1.0.9 [January 31, 2001]
-  Added check of cygwin's ALL_STATIC in pngconf.h
-  Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.
-
-Version 1.0.10beta1 [March 14, 2001]
-  Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc.
-  Reformatted libpng.3 to eliminate bad line breaks.
-  Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
-  Added prototype for png_mmx_support() near the top of pnggccrd.c
-  Moved some error checking from png_handle_IHDR to png_set_IHDR.
-  Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
-  Revised png_mmx_support() function in pnggccrd.c
-  Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
-  Fixed memory leak in contrib/visupng/PngFile.c
-  Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
-  Added warnings when retrieving or setting gamma=0.
-  Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().
-
-Version 1.0.10rc1 [March 23, 2001]
-  Changed all instances of memcpy, strcpy, and strlen to png_memcpy, png_strcpy,
-    and png_strlen.
-  Revised png_mmx_supported() function in pnggccrd.c to return proper value.
-  Fixed bug in progressive reading (pngpread.c) with small images (height < 8).
-
-Version 1.0.10 [March 30, 2001]
-  Deleted extraneous space (introduced in 1.0.9) from line 42 of makefile.cygwin
-  Added beos project files (Chris Herborth)
-
-Version 1.0.11beta1 [April 3, 2001]
-  Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
-  Removed a no-longer needed AIX work-around from pngconf.h
-  Changed several "//" single-line comments to C-style in pnggccrd.c
-
-Version 1.0.11beta2 [April 11, 2001]
-  Removed PNGAPI from several functions whose prototypes did not have PNGAPI.
-  Updated scripts/pngos2.def
-
-Version 1.0.11beta3 [April 14, 2001]
-  Added checking the results of many instances of png_malloc() for NULL
-
-Version 1.0.11beta4 [April 20, 2001]
-  Undid the changes from version 1.0.11beta3.  Added a check for NULL return
-    from user's malloc_fn().
-  Removed some useless type casts of the NULL pointer.
-  Added makefile.netbsd
-
-Version 1.0.11 [April 27, 2001]
-  Revised makefile.netbsd
-
-Version 1.0.12beta1 [May 14, 2001]
-  Test for Windows platform in pngconf.h when including malloc.h (Emmanuel Blot)
-  Updated makefile.cygwin and handling of Cygwin's ALL_STATIC in pngconf.h
-  Added some never-to-be-executed code in pnggccrd.c to quiet compiler warnings.
-  Eliminated the png_error about apps using png_read|write_init().  Instead,
-    libpng will reallocate the png_struct and info_struct if they are too small.
-    This retains future binary compatibility for old applications written for
-    libpng-0.88 and earlier.
-
-Version 1.2.0beta1 [May 6, 2001]
-  Bumped DLLNUM to 2.
-  Re-enabled PNG_MNG_FEATURES_SUPPORTED and enabled PNG_ASSEMBLER_CODE_SUPPORTED
-    by default.
-  Added runtime selection of MMX features.
-  Added png_set_strip_error_numbers function and related macros.
-
-Version 1.2.0beta2 [May 7, 2001]
-  Finished merging 1.2.0beta1 with version 1.0.11
-  Added a check for attempts to read or write PLTE in grayscale PNG datastreams.
-
-Version 1.2.0beta3 [May 17, 2001]
-  Enabled user memory function by default.
-  Modified png_create_struct so it passes user mem_ptr to user memory allocator.
-  Increased png_mng_features flag from png_byte to png_uint_32.
-  Bumped shared-library (so-number) and dll-number to 3.
-
-Version 1.2.0beta4 [June 23, 2001]
-  Check for missing profile length field in iCCP chunk and free chunk_data
-     in case of truncated iCCP chunk.
-  Bumped shared-library number to 3 in makefile.sgi and makefile.sggcc
-  Bumped dll-number from 2 to 3 in makefile.cygwin
-  Revised contrib/gregbook/rpng*-x.c to avoid a memory leak and to exit cleanly
-     if user attempts to run it on an 8-bit display.
-  Updated contrib/gregbook
-  Use png_malloc instead of png_zalloc to allocate palette in pngset.c
-  Updated makefile.ibmc
-  Added some typecasts to eliminate gcc 3.0 warnings.  Changed prototypes
-     of png_write_oFFS width and height from png_uint_32 to png_int_32.
-  Updated example.c
-  Revised prototypes for png_debug_malloc and png_debug_free in pngtest.c
-
-Version 1.2.0beta5 [August 8, 2001]
-  Revised contrib/gregbook
-  Revised makefile.gcmmx
-  Revised pnggccrd.c to conditionally compile some thread-unsafe code only
-     when PNG_THREAD_UNSAFE_OK is defined.
-  Added tests to prevent pngwutil.c from writing a bKGD or tRNS chunk with
-     value exceeding 2^bit_depth-1
-  Revised makefile.sgi and makefile.sggcc
-  Replaced calls to fprintf(stderr,...) with png_warning() in pnggccrd.c
-  Removed restriction that do_invert_mono only operate on 1-bit opaque files
-
-Version 1.2.0 [September 1, 2001]
-  Changed a png_warning() to png_debug() in pnggccrd.c
-  Fixed contrib/gregbook/rpng-x.c, rpng2-x.c to avoid crash with XFreeGC().
-
-Version 1.2.1beta1 [October 19, 2001]
-  Revised makefile.std in contrib/pngminus
-  Include background_1 in png_struct regardless of gamma support.
-  Revised makefile.netbsd and makefile.macosx, added makefile.darwin.
-  Revised example.c to provide more details about using row_callback().
-
-Version 1.2.1beta2 [October 25, 2001]
-  Added type cast to each NULL appearing in a function call, except for
-    WINCE functions.
-  Added makefile.so9.
-
-Version 1.2.1beta3 [October 27, 2001]
-  Removed type casts from all NULLs.
-  Simplified png_create_struct_2().
-
-Version 1.2.1beta4 [November 7, 2001]
-  Revised png_create_info_struct() and png_creat_struct_2().
-  Added error message if png_write_info() was omitted.
-  Type cast NULLs appearing in function calls when _NO_PROTO or
-    PNG_TYPECAST_NULL is defined.
-
-Version 1.2.1rc1 [November 24, 2001]
-  Type cast NULLs appearing in function calls except when PNG_NO_TYPECAST_NULL
-    is defined.
-  Changed typecast of "size" argument to png_size_t in pngmem.c calls to
-    the user malloc_fn, to agree with the prototype in png.h
-  Added a pop/push operation to pnggccrd.c, to preserve Eflag (Maxim Sobolev)
-  Updated makefile.sgi to recognize LIBPATH and INCPATH.
-  Updated various makefiles so "make clean" does not remove previous major
-    version of the shared library.
-
-Version 1.2.1rc2 [December 4, 2001]
-  Always allocate 256-entry internal palette, hist, and trans arrays, to
-    avoid out-of-bounds memory reference caused by invalid PNG datastreams.
-  Added a check for prefix_length > data_length in iCCP chunk handler.
-
-Version 1.2.1 [December 7, 2001]
-  None.
-
-Version 1.2.2beta1 [February 22, 2002]
-  Fixed a bug with reading the length of iCCP profiles (Larry Reeves).
-  Revised makefile.linux, makefile.gcmmx, and makefile.sgi to generate
-    libpng.a, libpng12.so (not libpng.so.3), and libpng12/png.h
-  Revised makefile.darwin to remove "-undefined suppress" option.
-  Added checks for gamma and chromaticity values over 21474.83, which exceed
-    the limit for PNG unsigned 32-bit integers when encoded.
-  Revised calls to png_create_read_struct() and png_create_write_struct()
-    for simpler debugging.
-  Revised png_zalloc() so zlib handles errors (uses PNG_FLAG_MALLOC_NULL_MEM_OK)
-
-Version 1.2.2beta2 [February 23, 2002]
-  Check chunk_length and idat_size for invalid (over PNG_MAX_UINT) lengths.
-  Check for invalid image dimensions in png_get_IHDR.
-  Added missing "fi;" in the install target of the SGI makefiles.
-  Added install-static to all makefiles that make shared libraries.
-  Always do gamma compensation when image is partially transparent.
-
-Version 1.2.2beta3 [March 7, 2002]
-  Compute background.gray and background_1.gray even when color_type is RGB
-    in case image gets reduced to gray later.
-  Modified shared-library makefiles to install pkgconfig/libpngNN.pc.
-  Export (with PNGAPI) png_zalloc, png_zfree, and png_handle_as_unknown
-  Removed unused png_write_destroy_info prototype from png.h
-  Eliminated incorrect use of width_mmx from pnggccrd.c in pixel_bytes == 8 case
-  Added install-shared target to all makefiles that make shared libraries.
-  Stopped a double free of palette, hist, and trans when not using free_me.
-  Added makefile.32sunu for Sun Ultra 32 and makefile.64sunu for Sun Ultra 64.
-
-Version 1.2.2beta4 [March 8, 2002]
-  Compute background.gray and background_1.gray even when color_type is RGB
-    in case image gets reduced to gray later (Jason Summers).
-  Relocated a misplaced /bin/rm in the "install-shared" makefile targets
-  Added PNG_1_0_X macro which can be used to build a 1.0.x-compatible library.
-
-Version 1.2.2beta5 [March 26, 2002]
-  Added missing PNGAPI to several function definitions.
-  Check for invalid bit_depth or color_type in png_get_IHDR(), and
-    check for missing PLTE or IHDR in png_push_read_chunk() (Matthias Clasen).
-  Revised iTXt support to accept NULL for lang and lang_key.
-  Compute gamma for color components of background even when color_type is gray.
-  Changed "()" to "{}" in scripts/libpng.pc.in.
-  Revised makefiles to put png.h and pngconf.h only in $prefix/include/libpngNN
-  Revised makefiles to make symlink to libpng.so.NN in addition to libpngNN.so
-
-Version 1.2.2beta6 [March 31, 2002]
-
-Version 1.0.13beta1 [March 31, 2002]
-  Prevent png_zalloc() from trying to memset memory that it failed to acquire.
-  Add typecasts of PNG_MAX_UINT in pngset_cHRM_fixed() (Matt Holgate).
-  Ensure that the right function (user or default) is used to free the
-    png_struct after an error in png_create_read_struct_2().
-
-Version 1.2.2rc1 [April 7, 2002]
-
-Version 1.0.13rc1 [April 7, 2002]
-  Save the ebx register in pnggccrd.c (Sami Farin)
-  Add "mem_ptr = png_ptr->mem_ptr" in png_destroy_write_struct() (Paul Gardner).
-  Updated makefiles to put headers in include/libpng and remove old include/*.h.
-
-Version 1.2.2 [April 15, 2002]
-
-Version 1.0.13 [April 15, 2002]
-  Revised description of png_set_filter() in libpng.3/libpng.txt.
-  Revised makefile.netbsd and added makefile.neNNbsd and makefile.freebsd
-
-Version 1.0.13patch01 [April 17, 2002]
-
-Version 1.2.2patch01 [April 17, 2002]
-  Changed ${PNGMAJ}.${PNGVER} bug to ${PNGVER} in makefile.sgi and
-    makefile.sggcc
-  Fixed VER -> PNGVER typo in makefile.macosx and added install-static to
-    install
-  Added install: target to makefile.32sunu and makefile.64sunu
-
-Version 1.0.13patch03 [April 18, 2002]
-
-Version 1.2.2patch03 [April 18, 2002]
-  Revised 15 makefiles to link libpng.a to libpngNN.a and the include libpng
-  subdirectory to libpngNN subdirectory without the full pathname.
-  Moved generation of libpng.pc from "install" to "all" in 15 makefiles.
-
-Version 1.2.3rc1 [April 28, 2002]
-  Added install-man target to 15 makefiles (Dimitri Papadopolous-Orfanos).
-  Added $(DESTDIR) feature to 24 makefiles (Tim Mooney)
-  Fixed bug with $prefix, should be $(prefix) in makefile.hpux.
-  Updated cygwin-specific portion of pngconf.h and revised makefile.cygwin
-  Added a link from libpngNN.pc to libpng.pc in 15 makefiles.
-  Added links from include/libpngNN/*.h to include/*.h in 24 makefiles.
-  Revised makefile.darwin to make relative links without full pathname.
-  Added setjmp() at the end of png_create_*_struct_2() in case user forgets
-    to put one in their application.
-  Restored png_zalloc() and png_zfree() prototypes to version 1.2.1 and
-    removed them from module definition files.
-
-Version 1.2.3rc2 [May 1, 2002]
-  Fixed bug in reporting number of channels in pngget.c and pngset.c,
-    that was introduced in version 1.2.2beta5.
-  Exported png_zalloc(), png_zfree(), png_default_read(), png_default_write(),
-    png_default_flush(), and png_push_fill_buffer() and included them in
-    module definition files.
-  Added "libpng.pc" dependency to the "install-shared" target in 15 makefiles.
-
-Version 1.2.3rc3 [May 1, 2002]
-  Revised prototype for png_default_flush()
-  Remove old libpng.pc and libpngNN.pc before installing new ones.
-
-Version 1.2.3rc4 [May 2, 2002]
-  Typos in *.def files (png_default_read|write -> png_default_read|write_data)
-  In makefiles, changed rm libpng.NN.pc to rm libpngNN.pc
-  Added libpng-config and libpngNN-config and modified makefiles to install
-    them.
-  Changed $(MANPATH) to $(DESTDIR)$(MANPATH) in makefiles
-  Added "Win32 DLL VB" configuration to projects/msvc/libpng.dsp
-
-Version 1.2.3rc5 [May 11, 2002]
-  Changed "error" and "message" in prototypes to "error_message" and
-    "warning_message" to avoid namespace conflict.
-  Revised 15 makefiles to build libpng-config from libpng-config-*.in
-  Once more restored png_zalloc and png_zfree to regular nonexported form.
-  Restored png_default_read|write_data, png_default_flush, png_read_fill_buffer
-    to nonexported form, but with PNGAPI, and removed them from module def
-    files.
-
-Version 1.2.3rc6 [May 14, 2002]
-  Removed "PNGAPI" from png_zalloc() and png_zfree() in png.c
-  Changed "Gz" to "Gd" in projects/msvc/libpng.dsp and zlib.dsp.
-  Removed leftover libpng-config "sed" script from four makefiles.
-  Revised libpng-config creating script in 16 makefiles.
-
-Version 1.2.3 [May 22, 2002]
-  Revised libpng-config target in makefile.cygwin.
-  Removed description of png_set_mem_fn() from documentation.
-  Revised makefile.freebsd.
-  Minor cosmetic changes to 15 makefiles, e.g., $(DI) = $(DESTDIR)/$(INCDIR).
-  Revised projects/msvc/README.txt
-  Changed -lpng to -lpngNN in LDFLAGS in several makefiles.
-
-Version 1.2.4beta1 [May 24, 2002]
-  Added libpng.pc and libpng-config to "all:" target in 16 makefiles.
-  Fixed bug in 16 makefiles: $(DESTDIR)/$(LIBPATH) to $(DESTDIR)$(LIBPATH)
-  Added missing "\" before closing double quote in makefile.gcmmx.
-  Plugged various memory leaks; added png_malloc_warn() and png_set_text_2()
-    functions.
-
-Version 1.2.4beta2 [June 25, 2002]
-  Plugged memory leak of png_ptr->current_text (Matt Holgate).
-  Check for buffer overflow before reading CRC in pngpread.c (Warwick Allison)
-  Added -soname to the loader flags in makefile.dec, makefile.sgi, and
-    makefile.sggcc.
-  Added "test-installed" target to makefile.linux, makefile.gcmmx,
-    makefile.sgi, and makefile.sggcc.
-
-Version 1.2.4beta3 [June 28, 2002]
-  Plugged memory leak of row_buf in pngtest.c when there is a png_error().
-  Detect buffer overflow in pngpread.c when IDAT is corrupted with extra data.
-  Added "test-installed" target to makefile.32sunu, makefile.64sunu,
-    makefile.beos, makefile.darwin, makefile.dec, makefile.macosx,
-    makefile.solaris, makefile.hpux, makefile.hpgcc, and makefile.so9.
-
-Version 1.2.4rc1 and 1.0.14rc1 [July 2, 2002]
-  Added "test-installed" target to makefile.cygwin and makefile.sco.
-  Revised pnggccrd.c to be able to back out version 1.0.x via PNG_1_0_X macro.
-
-Version 1.2.4 and 1.0.14 [July 8, 2002]
-  Changed png_warning() to png_error() when width is too large to process.
-
-Version 1.2.4patch01 [July 20, 2002]
-  Revised makefile.cygwin to use DLL number 12 instead of 13.
-
-Version 1.2.5beta1 [August 6, 2002]
-  Added code to contrib/gregbook/readpng2.c to ignore unused chunks.
-  Replaced toucan.png in contrib/gregbook (it has been corrupt since 1.0.11)
-  Removed some stray *.o files from contrib/gregbook.
-  Changed png_error() to png_warning() about "Too much data" in pngpread.c
-    and about "Extra compressed data" in pngrutil.c.
-  Prevent png_ptr->pass from exceeding 7 in png_push_finish_row().
-  Updated makefile.hpgcc
-  Updated png.c and pnggccrd.c handling of return from png_mmx_support()
-
-Version 1.2.5beta2 [August 15, 2002]
-  Only issue png_warning() about "Too much data" in pngpread.c when avail_in
-    is nonzero.
-  Updated makefiles to install a separate libpng.so.3 with its own rpath.
-
-Version 1.2.5rc1 and 1.0.15rc1 [August 24, 2002]
-  Revised makefiles to not remove previous minor versions of shared libraries.
-
-Version 1.2.5rc2 and 1.0.15rc2 [September 16, 2002]
-  Revised 13 makefiles to remove "-lz" and "-L$(ZLIBLIB)", etc., from shared
-    library loader directive.
-  Added missing "$OBJSDLL" line to makefile.gcmmx.
-  Added missing "; fi" to makefile.32sunu.
-
-Version 1.2.5rc3 and 1.0.15rc3 [September 18, 2002]
-  Revised libpng-config script.
-
-Version 1.2.5 and 1.0.15 [October 3, 2002]
-  Revised makefile.macosx, makefile.darwin, makefile.hpgcc, and makefile.hpux,
-    and makefile.aix.
-  Relocated two misplaced PNGAPI lines in pngtest.c
-
-Version 1.2.6beta1 [October 22, 2002]
-  Commented out warning about uninitialized mmx_support in pnggccrd.c.
-  Changed "IBMCPP__" flag to "__IBMCPP__" in pngconf.h.
-  Relocated two more misplaced PNGAPI lines in pngtest.c
-  Fixed memory overrun bug in png_do_read_filler() with 16-bit datastreams,
-    introduced in version 1.0.2.
-  Revised makefile.macosx, makefile.dec, makefile.aix, and makefile.32sunu.
-
-Version 1.2.6beta2 [November 1, 2002]
-  Added libpng-config "--ldopts" output.
-  Added "AR=ar" and "ARFLAGS=rc" and changed "ar rc" to "$(AR) $(ARFLAGS)"
-    in makefiles.
-
-Version 1.2.6beta3 [July 18, 2004]
-  Reverted makefile changes from version 1.2.6beta2 and some of the changes
-    from version 1.2.6beta1; these will be postponed until version 1.2.7.
-    Version 1.2.6 is going to be a simple bugfix release.
-  Changed the one instance of "ln -sf" to "ln -f -s" in each Sun makefile.
-  Fixed potential overrun in pngerror.c by using strncpy instead of memcpy.
-  Added "#!/bin/sh" at the top of configure, for recognition of the
-    'x' flag under Cygwin (Cosmin).
-  Optimized vacuous tests that silence compiler warnings, in png.c (Cosmin).
-  Added support for PNG_USER_CONFIG, in pngconf.h (Cosmin).
-  Fixed the special memory handler for Borland C under DOS, in pngmem.c
-    (Cosmin).
-  Removed some spurious assignments in pngrutil.c (Cosmin).
-  Replaced 65536 with 65536L, and 0xffff with 0xffffL, to silence warnings
-    on 16-bit platforms (Cosmin).
-  Enclosed shift op expressions in parentheses, to silence warnings (Cosmin).
-  Used proper type png_fixed_point, to avoid problems on 16-bit platforms,
-    in png_handle_sRGB() (Cosmin).
-  Added compression_type to png_struct, and optimized the window size
-    inside the deflate stream (Cosmin).
-  Fixed definition of isnonalpha(), in pngerror.c and pngrutil.c (Cosmin).
-  Fixed handling of unknown chunks that come after IDAT (Cosmin).
-  Allowed png_error() and png_warning() to work even if png_ptr == NULL
-    (Cosmin).
-  Replaced row_info->rowbytes with row_bytes in png_write_find_filter()
-    (Cosmin).
-  Fixed definition of PNG_LIBPNG_VER_DLLNUM (Simon-Pierre).
-  Used PNG_LIBPNG_VER and PNG_LIBPNG_VER_STRING instead of the hardcoded
-    values in png.c (Simon-Pierre, Cosmin).
-  Initialized png_libpng_ver[] with PNG_LIBPNG_VER_STRING (Simon-Pierre).
-  Replaced PNG_LIBPNG_VER_MAJOR with PNG_LIBPNG_VER_DLLNUM in png.rc
-    (Simon-Pierre).
-  Moved the definition of PNG_HEADER_VERSION_STRING near the definitions
-    of the other PNG_LIBPNG_VER_... symbols in png.h (Cosmin).
-  Relocated #ifndef PNGAPI guards in pngconf.h (Simon-Pierre, Cosmin).
-  Updated scripts/makefile.vc(a)win32 (Cosmin).
-  Updated the MSVC project (Simon-Pierre, Cosmin).
-  Updated the Borland C++ Builder project (Cosmin).
-  Avoided access to asm_flags in pngvcrd.c, if PNG_1_0_X is defined (Cosmin).
-  Commented out warning about uninitialized mmx_support in pngvcrd.c (Cosmin).
-  Removed scripts/makefile.bd32 and scripts/pngdef.pas (Cosmin).
-  Added extra guard around inclusion of Turbo C memory headers, in pngconf.h
-    (Cosmin).
-  Renamed projects/msvc/ to projects/visualc6/, and projects/borland/ to
-    projects/cbuilder5/ (Cosmin).
-  Moved projects/visualc6/png32ms.def to scripts/pngw32.def,
-    and projects/visualc6/png.rc to scripts/pngw32.rc (Cosmin).
-  Added projects/visualc6/pngtest.dsp; removed contrib/msvctest/ (Cosmin).
-  Changed line endings to DOS style in cbuilder5 and visualc6 files, even
-    in the tar.* distributions (Cosmin).
-  Updated contrib/visupng/VisualPng.dsp (Cosmin).
-  Updated contrib/visupng/cexcept.h to version 2.0.0 (Cosmin).
-  Added a separate distribution with "configure" and supporting files (Junichi).
-
-Version 1.2.6beta4 [July 28, 2004]
-  Added user ability to change png_size_t via a PNG_SIZE_T macro.
-  Added png_sizeof() and png_convert_size() functions.
-  Added PNG_SIZE_MAX (maximum value of a png_size_t variable.
-  Added check in png_malloc_default() for (size_t)size != (png_uint_32)size
-    which would indicate an overflow.
-  Changed sPLT failure action from png_error to png_warning and abandon chunk.
-  Changed sCAL and iCCP failures from png_error to png_warning and abandon.
-  Added png_get_uint_31(png_ptr, buf) function.
-  Added PNG_UINT_32_MAX macro.
-  Renamed PNG_MAX_UINT to PNG_UINT_31_MAX.
-  Made png_zalloc() issue a png_warning and return NULL on potential
-    overflow.
-  Turn on PNG_NO_ZALLOC_ZERO by default in version 1.2.x
-  Revised "clobber list" in pnggccrd.c so it will compile under gcc-3.4.
-  Revised Borland portion of png_malloc() to return NULL or issue
-    png_error() according to setting of PNG_FLAG_MALLOC_NULL_MEM_OK.
-  Added PNG_NO_SEQUENTIAL_READ_SUPPORTED macro to conditionally remove
-    sequential read support.
-  Added some "#if PNG_WRITE_SUPPORTED" blocks.
-  Added #ifdef to remove some redundancy in png_malloc_default().
-  Use png_malloc instead of png_zalloc to allocate the pallete.
-
-Version 1.0.16rc1 and 1.2.6rc1 [August 4, 2004]
-  Fixed buffer overflow vulnerability in png_handle_tRNS()
-  Fixed integer arithmetic overflow vulnerability in png_read_png().
-  Fixed some harmless bugs in png_handle_sBIT, etc, that would cause
-    duplicate chunk types to go undetected.
-  Fixed some timestamps in the -config version
-  Rearranged order of processing of color types in png_handle_tRNS().
-  Added ROWBYTES macro to calculate rowbytes without integer overflow.
-  Updated makefile.darwin and removed makefile.macosx from scripts directory.
-  Imposed default one million column, one-million row limits on the image
-    dimensions, and added png_set_user_limits() function to override them.
-  Revised use of PNG_SET_USER_LIMITS_SUPPORTED macro.
-  Fixed wrong cast of returns from png_get_user_width|height_max().
-  Changed some "keep the compiler happy" from empty statements to returns,
-  Revised libpng.txt to remove 1.2.x stuff from the 1.0.x distribution
-
-Version 1.0.16rc2 and 1.2.6rc2 [August 7, 2004]
-  Revised makefile.darwin and makefile.solaris.  Removed makefile.macosx.
-  Revised pngtest's png_debug_malloc() to use png_malloc() instead of
-    png_malloc_default() which is not supposed to be exported.
-  Fixed off-by-one error in one of the conversions to PNG_ROWBYTES() in
-    pngpread.c.  Bug was introduced in 1.2.6rc1.
-  Fixed bug in RGB to RGBX transformation introduced in 1.2.6rc1.
-  Fixed old bug in RGB to Gray transformation.
-  Fixed problem with 64-bit compilers by casting arguments to abs()
-    to png_int_32.
-  Changed "ln -sf" to "ln -f -s" in three makefiles (solaris, sco, so9).
-  Changed "HANDLE_CHUNK_*" to "PNG_HANDLE_CHUNK_*" (Cosmin)
-  Added "-@/bin/rm -f $(DL)/$(LIBNAME).so.$(PNGMAJ)" to 15 *NIX makefiles.
-  Added code to update the row_info->colortype in png_do_read_filler() (MSB).
-
-Version 1.0.16rc3 and 1.2.6rc3 [August 9, 2004]
-  Eliminated use of "abs()" in testing cHRM and gAMA values, to avoid
-    trouble with some 64-bit compilers.  Created PNG_OUT_OF_RANGE() macro.
-  Revised documentation of png_set_keep_unknown_chunks().
-  Check handle_as_unknown status in pngpread.c, as in pngread.c previously.
-  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_INTERNAL section of png.h
-  Added "rim" definitions for CONST4 and CONST6 in pnggccrd.c
-
-Version 1.0.16rc4 and 1.2.6rc4 [August 10, 2004]
-  Fixed mistake in pngtest.c introduced in 1.2.6rc2 (declaration of
-    "pinfo" was out of place).
-
-Version 1.0.16rc5 and 1.2.6rc5 [August 10, 2004]
-  Moved  "PNG_HANDLE_CHUNK_*" macros out of PNG_ASSEMBLER_CODE_SUPPORTED
-     section of png.h where they were inadvertently placed in version rc3.
-
-Version 1.2.6 and 1.0.16 [August 15, 2004]
-  Revised pngtest so memory allocation testing is only done when PNG_DEBUG==1.
-
-Version 1.2.7beta1 [August 26, 2004]
-  Removed unused pngasmrd.h file.
-  Removed references to uu.net for archived files.  Added references to
-    PNG Spec (second edition) and the PNG ISO/IEC Standard.
-  Added "test-dd" target in 15 makefiles, to run pngtest in DESTDIR.
-  Fixed bug with "optimized window size" in the IDAT datastream, that
-    causes libpng to write PNG files with incorrect zlib header bytes.
-
-Version 1.2.7beta2 [August 28, 2004]
-  Fixed bug with sCAL chunk and big-endian machines (David Munro).
-  Undid new code added in 1.2.6rc2 to update the color_type in
-    png_set_filler().
-  Added png_set_add_alpha() that updates color type.
-
-Version 1.0.17rc1 and 1.2.7rc1 [September 4, 2004]
-  Revised png_set_strip_filler() to not remove alpha if color_type has alpha.
-
-Version 1.2.7 and 1.0.17 [September 12, 2004]
-  Added makefile.hp64
-  Changed projects/msvc/png32ms.def to scripts/png32ms.def in makefile.cygwin
-
-Version 1.2.8beta1 [November 1, 2004]
-  Fixed bug in png_text_compress() that would fail to complete a large block.
-  Fixed bug, introduced in libpng-1.2.7, that overruns a buffer during
-    strip alpha operation in png_do_strip_filler().
-  Added PNG_1_2_X definition in pngconf.h
-  Use #ifdef to comment out png_info_init in png.c and png_read_init in
-    pngread.c (as of 1.3.0)
-
-Version 1.2.8beta2 [November 2, 2004]
-  Reduce color_type to a nonalpha type after strip alpha operation in
-    png_do_strip_filler().
-
-Version 1.2.8beta3 [November 3, 2004]
-  Revised definitions of PNG_MAX_UINT_32, PNG_MAX_SIZE, and PNG_MAXSUM
-
-Version 1.2.8beta4 [November 12, 2004]
-  Fixed (again) definition of PNG_LIBPNG_VER_DLLNUM in png.h (Cosmin).
-  Added PNG_LIBPNG_BUILD_PRIVATE in png.h (Cosmin).
-  Set png_ptr->zstream.data_type to Z_BINARY, to avoid unnecessary detection
-    of data type in deflate (Cosmin).
-  Deprecated but continue to support SPECIALBUILD and PRIVATEBUILD in favor of
-    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
-
-Version 1.2.8beta5 [November 20, 2004]
-  Use png_ptr->flags instead of png_ptr->transformations to pass
-    PNG_STRIP_ALPHA info to png_do_strip_filler(), to preserve ABI
-    compatibility.
-  Revised handling of SPECIALBUILD, PRIVATEBUILD,
-    PNG_LIBPNG_BUILD_SPECIAL_STRING and PNG_LIBPNG_BUILD_PRIVATE_STRING.
-
-Version 1.2.8rc1 [November 24, 2004]
-  Moved handling of BUILD macros from pngconf.h to png.h
-  Added definition of PNG_LIBPNG_BASE_TYPE in png.h, inadvertently
-    omitted from beta5.
-  Revised scripts/pngw32.rc
-  Despammed mailing addresses by masking "@" with "at".
-  Inadvertently installed a supposedly faster test version of pngrutil.c
-
-Version 1.2.8rc2 [November 26, 2004]
-  Added two missing "\" in png.h
-  Change tests in pngread.c and pngpread.c to
-    if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
-       png_do_read_transformations(png_ptr);
-
-Version 1.2.8rc3 [November 28, 2004]
-  Reverted pngrutil.c to version libpng-1.2.8beta5.
-  Added scripts/makefile.elf with supporting code in pngconf.h for symbol
-    versioning (John Bowler).
-
-Version 1.2.8rc4 [November 29, 2004]
-  Added projects/visualc7 (Simon-pierre).
-
-Version 1.2.8rc5 [November 29, 2004]
-  Fixed new typo in scripts/pngw32.rc
-
-Version 1.2.8 [December 3, 2004]
-  Removed projects/visualc7, added projects/visualc71.
-
-Version 1.2.9beta1 [February 21, 2006]
-  Initialized some structure members in pngwutil.c to avoid gcc-4.0.0 complaints
-  Revised man page and libpng.txt to make it clear that one should not call
-    png_read_end or png_write_end after png_read_png or png_write_png.
-  Updated references to png-mng-implement mailing list.
-  Fixed an incorrect typecast in pngrutil.c
-  Added PNG_NO_READ_SUPPORTED conditional for making a write-only library.
-  Added PNG_NO_WRITE_INTERLACING_SUPPORTED conditional.
-  Optimized alpha-inversion loops in pngwtran.c
-  Moved test for nonzero gamma outside of png_build_gamma_table() in pngrtran.c
-  Make sure num_trans is <= 256 before copying data in png_set_tRNS().
-  Make sure num_palette is <= 256 before copying data in png_set_PLTE().
-  Interchanged order of write_swap_alpha and write_invert_alpha transforms.
-  Added parentheses in the definition of PNG_LIBPNG_BUILD_TYPE (Cosmin).
-  Optimized zlib window flag (CINFO) in contrib/pngsuite/*.png (Cosmin).
-  Updated scripts/makefile.bc32 for Borland C++ 5.6 (Cosmin).
-  Exported png_get_uint_32, png_save_uint_32, png_get_uint_16, png_save_uint_16,
-    png_get_int_32, png_save_int_32, png_get_uint_31 (Cosmin).
-  Added type cast (png_byte) in png_write_sCAL() (Cosmin).
-  Fixed scripts/makefile.cygwin (Christian Biesinger, Cosmin).
-  Default iTXt support was inadvertently enabled.
-
-Version 1.2.9beta2 [February 21, 2006]
-  Check for png_rgb_to_gray and png_gray_to_rgb read transformations before
-    checking for png_read_dither in pngrtran.c
-  Revised checking of chromaticity limits to accommodate extended RGB
-    colorspace (John Denker).
-  Changed line endings in some of the project files to CRLF, even in the
-    "Unix" tar distributions (Cosmin).
-  Made png_get_int_32 and png_save_int_32 always available (Cosmin).
-  Updated scripts/pngos2.def, scripts/pngw32.def and projects/wince/png32ce.def
-    with the newly exported functions.
-  Eliminated distributions without the "configure" script.
-  Updated INSTALL instructions.
-
-Version 1.2.9beta3 [February 24, 2006]
-  Fixed CRCRLF line endings in contrib/visupng/VisualPng.dsp
-  Made libpng.pc respect EXEC_PREFIX (D. P. Kreil, J. Bowler)
-  Removed reference to pngasmrd.h from Makefile.am
-  Renamed CHANGES to ChangeLog.
-  Renamed LICENSE to COPYING.
-  Renamed ANNOUNCE to NEWS.
-  Created AUTHORS file.
-
-Version 1.2.9beta4 [March 3, 2006]
-  Changed definition of PKGCONFIG from $prefix/lib to $libdir in configure.ac
-  Reverted to filenames LICENSE and ANNOUNCE; removed AUTHORS and COPYING.
-  Removed newline from the end of some error and warning messages.
-  Removed test for sqrt() from configure.ac and configure.
-  Made swap tables in pngtrans.c PNG_CONST (Carlo Bramix).
-  Disabled default iTXt support that was inadvertently enabled in
-    libpng-1.2.9beta1.
-  Added "OS2" to list of systems that don't need underscores, in pnggccrd.c
-  Removed libpng version and date from *.c files.
-
-Version 1.2.9beta5 [March 4, 2006]
-  Removed trailing blanks from source files.
-  Put version and date of latest change in each source file, and changed
-    copyright year accordingly.
-  More cleanup of configure.ac, Makefile.am, and associated scripts.
-  Restored scripts/makefile.elf which was inadvertently deleted.
-
-Version 1.2.9beta6 [March 6, 2006]
-  Fixed typo (RELEASE) in configuration files.
-
-Version 1.2.9beta7 [March 7, 2006]
-  Removed libpng.vers and libpng.sym from libpng12_la_SOURCES in Makefile.am
-  Fixed inconsistent #ifdef's around png_sig_bytes() and png_set_sCAL_s()
-    in png.h.
-  Updated makefile.elf as suggested by debian.
-  Made cosmetic changes to some makefiles, adding LN_SF and other macros.
-  Made some makefiles accept "exec_prefix".
-
-Version 1.2.9beta8 [March 9, 2006]
-  Fixed some "#if defined (..." which should be "#if defined(..."
-    Bug introduced in libpng-1.2.8.
-  Fixed inconsistency in definition of png_default_read_data()
-  Restored blank that was lost from makefile.sggcc "clean" target in beta7.
-  Revised calculation of "current" and "major" for irix in ltmain.sh
-  Changed "mkdir" to "MKDIR_P" in some makefiles.
-  Separated PNG_EXPAND and PNG_EXPAND_tRNS.
-  Added png_set_expand_gray_1_2_4_to_8() and deprecated
-    png_set_gray_1_2_4_to_8() which also expands tRNS to alpha.
-
-Version 1.2.9beta9 [March 10, 2006]
-  Include "config.h" in pngconf.h when available.
-  Added some checks for NULL png_ptr or NULL info_ptr (timeless)
-
-Version 1.2.9beta10 [March 20, 2006]
-  Removed extra CR from contrib/visualpng/VisualPng.dsw (Cosmin)
-  Made pnggccrd.c PIC-compliant (Christian Aichinger).
-  Added makefile.mingw (Wolfgang Glas).
-  Revised pngconf.h MMX checking.
-
-Version 1.2.9beta11 [March 22, 2006]
-  Fixed out-of-order declaration in pngwrite.c that was introduced in beta9
-  Simplified some makefiles by using LIBSO, LIBSOMAJ, and LIBSOVER macros.
-
-Version 1.2.9rc1 [March 31, 2006]
-  Defined PNG_USER_PRIVATEBUILD when including "pngusr.h" (Cosmin).
-  Removed nonsensical assertion check from pngtest.c (Cosmin).
-
-Version 1.2.9 [April 14, 2006]
-  Revised makefile.beos and added "none" selector in ltmain.sh
-
-Version 1.2.10beta1 [April 15, 2006]
-  Renamed "config.h" to "png_conf.h" and revised Makefile.am to add
-    -DPNG_BUILDING_LIBPNG to compile directive, and modified pngconf.h
-    to include png_conf.h only when PNG_BUILDING_LIBPNG is defined.
-
-Version 1.2.10beta2 [April 15, 2006]
-  Manually updated Makefile.in and configure.  Changed png_conf.h.in
-    back to config.h.
-
-Version 1.2.10beta3 [April 15, 2006]
-  Change png_conf.h back to config.h in pngconf.h.
-
-Version 1.2.10beta4 [April 16, 2006]
-  Change PNG_BUILDING_LIBPNG to PNG_CONFIGURE_LIBPNG in config/Makefile*.
-
-Version 1.2.10beta5 [April 16, 2006]
-  Added a configure check for compiling assembler code in pnggccrd.c
-
-Version 1.2.10beta6 [April 17, 2006]
-  Revised the configure check for pnggccrd.c
-  Moved -DPNG_CONFIGURE_LIBPNG into @LIBPNG_DEFINES@
-  Added @LIBPNG_DEFINES@ to arguments when building libpng.sym
-
-Version 1.2.10beta7 [April 18, 2006]
-  Change "exec_prefix=$prefix" to "exec_prefix=$(prefix)" in makefiles.
-
-Version 1.2.10rc1 [April 19, 2006]
-  Ensure pngconf.h doesn't define both PNG_USE_PNGGCCRD and PNG_USE_PNGVCRD
-  Fixed "LN_FS" typo in makefile.sco and makefile.solaris.
-
-Version 1.2.10rc2 [April 20, 2006]
-  Added a backslash between -DPNG_CONFIGURE_LIBPNG and -DPNG_NO_ASSEMBLER_CODE
-   in configure.ac and configure
-  Made the configure warning about versioned symbols less arrogant.
-
-Version 1.2.10rc3 [April 21, 2006]
-  Added a note in libpng.txt that png_set_sig_bytes(8) can be used when
-    writing an embedded PNG without the 8-byte signature.
-  Revised makefiles and configure to avoid making links to libpng.so.*
-
-Version 1.2.10 [April 23, 2006]
-  Reverted configure to "rc2" state.
-
-Version 1.2.11beta1 [May 31, 2006]
-  scripts/libpng.pc.in contained "configure" style version info and would
-    not work with makefiles.
-  The shared-library makefiles were linking to libpng.so.0 instead of
-    libpng.so.3 compatibility as the library.
-
-Version 1.2.11beta2 [June 2, 2006]
-  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
-    buffer overflow.
-  Fixed bug in example.c (png_set_palette_rgb -> png_set_palette_to_rgb)
-
-Version 1.2.11beta3 [June 5, 2006]
-  Prepended "#! /bin/sh" to ltmail.sh and contrib/pngminus/*.sh (Cosmin).
-  Removed the accidental leftover Makefile.in~ (Cosmin).
-  Avoided potential buffer overflow and optimized buffer in
-    png_write_sCAL(), png_write_sCAL_s() (Cosmin).
-  Removed the include directories and libraries from CFLAGS and LDFLAGS
-    in scripts/makefile.gcc (Nelson A. de Oliveira, Cosmin).
-
-Version 1.2.11beta4 [June 6, 2006]
-  Allow zero-length IDAT chunks after the entire zlib datastream, but not
-    after another intervening chunk type.
-
-Version 1.0.19rc1, 1.2.11rc1 [June 13, 2006]
-  Deleted extraneous square brackets from [config.h] in configure.ac
-
-Version 1.0.19rc2, 1.2.11rc2 [June 14, 2006]
-  Added prototypes for PNG_INCH_CONVERSIONS functions to png.h
-  Revised INSTALL and autogen.sh
-  Fixed typo in several makefiles (-W1 should be -Wl)
-  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.
-
-Version 1.0.19rc3, 1.2.11rc3 [June 15, 2006]
-  Removed the new typedefs for 64-bit systems (delay until version 1.4.0)
-  Added one zero element to png_gamma_shift[] array in pngrtran.c to avoid
-    reading out of bounds.
-
-Version 1.0.19rc4, 1.2.11rc4 [June 15, 2006]
-  Really removed the new typedefs for 64-bit systems.
-
-Version 1.0.19rc5, 1.2.11rc5 [June 22, 2006]
-  Removed png_sig_bytes entry from scripts/pngw32.def
-
-Version 1.0.19, 1.2.11 [June 26, 2006]
-  None.
-
-Version 1.0.20, 1.2.12 [June 27, 2006]
-  Really increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
-    buffer overflow.
-
-Version 1.2.13beta1 [October 2, 2006]
-  Removed AC_FUNC_MALLOC from configure.ac
-  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
-  Change "logical" to "bitwise" throughout documentation.
-  Detect and fix attempt to write wrong iCCP profile length (CVE-2006-7244)
-
-Version 1.0.21, 1.2.13 [November 14, 2006]
-  Fix potential buffer overflow in sPLT chunk handler.
-  Fix Makefile.am to not try to link to noexistent files.
-  Check all exported functions for NULL png_ptr.
-
-Version 1.2.14beta1 [November 17, 2006]
-  Relocated three misplaced tests for NULL png_ptr.
-  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
-  Build configure with autoconf-2.60 instead of 2.59
-
-Version 1.2.14beta2 [November 17, 2006]
-  Added some typecasts in png_zalloc().
-
-Version 1.2.14rc1 [November 20, 2006]
-  Changed "strtod" to "png_strtod" in pngrutil.c
-
-Version 1.0.22, 1.2.14    [November 27, 2006]
-  Added missing "$(srcdir)" in Makefile.am and Makefile.in
-
-Version 1.2.15beta1 [December 3, 2006]
-  Generated configure with autoconf-2.61 instead of 2.60
-  Revised configure.ac to update libpng.pc and libpng-config.
-
-Version 1.2.15beta2 [December 3, 2006]
-  Always export MMX asm functions, just stubs if not building pnggccrd.c
-
-Version 1.2.15beta3 [December 4, 2006]
-  Add "png_bytep" typecast to profile while calculating length in pngwutil.c
-
-Version 1.2.15beta4 [December 7, 2006]
-  Added scripts/CMakeLists.txt
-  Changed PNG_NO_ASSEMBLER_CODE to PNG_NO_MMX_CODE in scripts, like 1.4.0beta
-
-Version 1.2.15beta5 [December 7, 2006]
-  Changed some instances of PNG_ASSEMBLER_* to PNG_MMX_* in pnggccrd.c
-  Revised scripts/CMakeLists.txt
-
-Version 1.2.15beta6 [December 13, 2006]
-  Revised scripts/CMakeLists.txt and configure.ac
-
-Version 1.2.15rc1 [December 18, 2006]
-  Revised scripts/CMakeLists.txt
-
-Version 1.2.15rc2 [December 21, 2006]
-  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
-  Added scripts/makefile.nommx
-
-Version 1.2.15rc3 [December 25, 2006]
-  Fixed shared library numbering error that was introduced in 1.2.15beta6.
-
-Version 1.2.15rc4 [December 27, 2006]
-  Fixed handling of rgb_to_gray when png_ptr->color.gray isn't set.
-
-Version 1.2.15rc5 [December 31, 2006]
-  Revised handling of rgb_to_gray.
-
-Version 1.2.15 [January 5, 2007]
-  Added some (unsigned long) typecasts in pngtest.c to avoid printing errors.
-
-Version 1.2.16beta1 [January 6, 2007]
-  Fix bugs in makefile.nommx
-
-Version 1.2.16beta2 [January 16, 2007]
-  Revised scripts/CMakeLists.txt
-
-Version 1.2.16 [January 31, 2007]
-  No changes.
-
-Version 1.2.17beta1 [March 6, 2007]
-  Revised scripts/CMakeLists.txt to install both shared and static libraries.
-  Deleted a redundant line from pngset.c.
-
-Version 1.2.17beta2 [April 26, 2007]
-  Relocated misplaced test for png_ptr == NULL in pngpread.c
-  Change "==" to "&" for testing PNG_RGB_TO_GRAY_ERR & PNG_RGB_TO_GRAY_WARN
-    flags.
-  Changed remaining instances of PNG_ASSEMBLER_* to PNG_MMX_*
-  Added pngerror() when write_IHDR fails in deflateInit2().
-  Added "const" to some array declarations.
-  Mention examples of libpng usage in the libpng*.txt and libpng.3 documents.
-
-Version 1.2.17rc1 [May 4, 2007]
-  No changes.
-
-Version 1.2.17rc2 [May 8, 2007]
-  Moved several PNG_HAVE_* macros out of PNG_INTERNAL because applications
-    calling set_unknown_chunk_location() need them.
-  Changed transformation flag from PNG_EXPAND_tRNS to PNG_EXPAND in
-    png_set_expand_gray_1_2_4_to_8().
-  Added png_ptr->unknown_chunk to hold working unknown chunk data, so it
-    can be free'ed in case of error.  Revised unknown chunk handling in
-    pngrutil.c and pngpread.c to use this structure.
-
-Version 1.2.17rc3 [May 8, 2007]
-  Revised symbol-handling in configure script.
-
-Version 1.2.17rc4 [May 10, 2007]
-  Revised unknown chunk handling to avoid storing unknown critical chunks.
-
-Version 1.0.25 [May 15, 2007]
-Version 1.2.17 [May 15, 2007]
-  Added "png_ptr->num_trans=0" before error return in png_handle_tRNS,
-    to eliminate a vulnerability (CVE-2007-2445, CERT VU#684664)
-
-Version 1.0.26 [May 15, 2007]
-Version 1.2.18 [May 15, 2007]
-  Reverted the libpng-1.2.17rc3 change to symbol-handling in configure script
-
-Version 1.2.19beta1 [May 18, 2007]
-  Changed "const static" to "static PNG_CONST" everywhere, mostly undoing
-    change of libpng-1.2.17beta2.  Changed other "const" to "PNG_CONST"
-  Changed some handling of unused parameters, to avoid compiler warnings.
-    "if (unused == NULL) return;" becomes "unused = unused".
-
-Version 1.2.19beta2 [May 18, 2007]
-  Only use the valid bits of tRNS value in png_do_expand() (Brian Cartier)
-
-Version 1.2.19beta3 [May 19, 2007]
-  Add some "png_byte" typecasts in png_check_keyword() and write new_key
-  instead of key in zTXt chunk (Kevin Ryde).
-
-Version 1.2.19beta4 [May 21, 2007]
-  Add png_snprintf() function and use it in place of sprint() for improved
-    defense against buffer overflows.
-
-Version 1.2.19beta5 [May 21, 2007]
-  Fixed png_handle_tRNS() to only use the valid bits of tRNS value.
-  Changed handling of more unused parameters, to avoid compiler warnings.
-  Removed some PNG_CONST in pngwutil.c to avoid compiler warnings.
-
-Version 1.2.19beta6 [May 22, 2007]
-  Added some #ifdef PNG_MMX_CODE_SUPPORTED where needed in pngvcrd.c
-  Added a special "_MSC_VER" case that defines png_snprintf to _snprintf
-
-Version 1.2.19beta7 [May 22, 2007]
-  Squelched png_squelch_warnings() in pnggccrd.c and added
-    an #ifdef PNG_MMX_CODE_SUPPORTED block around the declarations that caused
-    the warnings that png_squelch_warnings was squelching.
-
-Version 1.2.19beta8 [May 22, 2007]
-  Removed __MMX__ from test in pngconf.h.
-
-Version 1.2.19beta9 [May 23, 2007]
-  Made png_squelch_warnings() available via PNG_SQUELCH_WARNINGS macro.
-  Revised png_squelch_warnings() so it might work.
-  Updated makefile.sgcc and makefile.solaris; added makefile.solaris-x86.
-
-Version 1.2.19beta10 [May 24, 2007]
-  Resquelched png_squelch_warnings(), use "__attribute__((used))" instead.
-
-Version 1.4.0beta1 [April 20, 2006]
-  Enabled iTXt support (changes png_struct, thus requires so-number change).
-  Cleaned up PNG_ASSEMBLER_CODE_SUPPORTED vs PNG_MMX_CODE_SUPPORTED
-  Eliminated PNG_1_0_X and PNG_1_2_X macros.
-  Removed deprecated functions png_read_init, png_write_init, png_info_init,
-    png_permit_empty_plte, png_set_gray_1_2_4_to_8, png_check_sig, and
-    removed the deprecated macro PNG_MAX_UINT.
-  Moved "PNG_INTERNAL" parts of png.h and pngconf.h into pngintrn.h
-  Removed many WIN32_WCE #ifdefs (Cosmin).
-  Reduced dependency on C-runtime library when on Windows (Simon-Pierre)
-  Replaced sprintf() with png_sprintf() (Simon-Pierre)
-
-Version 1.4.0beta2 [April 20, 2006]
-  Revised makefiles and configure to avoid making links to libpng.so.*
-  Moved some leftover MMX-related defines from pngconf.h to pngintrn.h
-  Updated scripts/pngos2.def, pngw32.def, and projects/wince/png32ce.def
-
-Version 1.4.0beta3 [May 10, 2006]
-  Updated scripts/pngw32.def to comment out MMX functions.
-  Added PNG_NO_GET_INT_32 and PNG_NO_SAVE_INT_32 macros.
-  Scripts/libpng.pc.in contained "configure" style version info and would
-    not work with makefiles.
-  Revised pngconf.h and added pngconf.h.in, so makefiles and configure can
-    pass defines to libpng and applications.
-
-Version 1.4.0beta4 [May 11, 2006]
-  Revised configure.ac, Makefile.am, and many of the makefiles to write
-    their defines in pngconf.h.
-
-Version 1.4.0beta5 [May 15, 2006]
-  Added a missing semicolon in Makefile.am and Makefile.in
-  Deleted extraneous square brackets from configure.ac
-
-Version 1.4.0beta6 [June 2, 2006]
-  Increased sprintf buffer from 50 to 52 chars in pngrutil.c to avoid
-    buffer overflow.
-  Changed sonum from 0 to 1.
-  Removed unused prototype for png_check_sig() from png.h
-
-Version 1.4.0beta7 [June 16, 2006]
-  Exported png_write_sig (Cosmin).
-  Optimized buffer in png_handle_cHRM() (Cosmin).
-  Set pHYs = 2835 x 2835 pixels per meter, and added
-    sCAL = 0.352778e-3 x 0.352778e-3 meters, in pngtest.png (Cosmin).
-  Added png_set_benign_errors(), png_benign_error(), png_chunk_benign_error().
-  Added typedef for png_int_32 and png_uint_32 on 64-bit systems.
-  Added "(unsigned long)" typecast on png_uint_32 variables in printf lists.
-
-Version 1.4.0beta8 [June 22, 2006]
-  Added demonstration of user chunk support in pngtest.c, to support the
-    public sTER chunk and a private vpAg chunk.
-
-Version 1.4.0beta9 [July 3, 2006]
-  Removed ordinals from scripts/pngw32.def and removed png_info_int and
-    png_set_gray_1_2_4_to_8 entries.
-  Inline call of png_get_uint_32() in png_get_uint_31().
-  Use png_get_uint_31() to get vpAg width and height in pngtest.c
-  Removed WINCE and Netware projects.
-  Removed standalone Y2KINFO file.
-
-Version 1.4.0beta10 [July 12, 2006]
-  Eliminated automatic copy of pngconf.h to pngconf.h.in from configure and
-    some makefiles, because it was not working reliably.  Instead, distribute
-    pngconf.h.in along with pngconf.h and cause configure and some of the
-    makefiles to update pngconf.h from pngconf.h.in.
-  Added pngconf.h to DEPENDENCIES in Makefile.am
-
-Version 1.4.0beta11 [August 19, 2006]
-  Removed AC_FUNC_MALLOC from configure.ac.
-  Added a warning when writing iCCP profile with mismatched profile length.
-  Patched pnggccrd.c to assemble on x86_64 platforms.
-  Moved chunk header reading into a separate function png_read_chunk_header()
-    in pngrutil.c.  The chunk header (len+sig) is now serialized in a single
-    operation (Cosmin).
-  Implemented support for I/O states. Added png_ptr member io_state, and
-    functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
-    (Cosmin).
-  Added png_get_io_chunk_name and png_get_io_state to scripts/*.def (Cosmin).
-  Renamed scripts/pngw32.* to scripts/pngwin.* (Cosmin).
-  Removed the include directories and libraries from CFLAGS and LDFLAGS
-    in scripts/makefile.gcc (Cosmin).
-  Used png_save_uint_32() to set vpAg width and height in pngtest.c (Cosmin).
-  Cast to proper type when getting/setting vpAg units in pngtest.c (Cosmin).
-  Added pngintrn.h to the Visual C++ projects (Cosmin).
-  Removed scripts/list (Cosmin).
-  Updated copyright year in scripts/pngwin.def (Cosmin).
-  Removed PNG_TYPECAST_NULL and used standard NULL consistently (Cosmin).
-  Disallowed the user to redefine png_size_t, and enforced a consistent use
-    of png_size_t across libpng (Cosmin).
-  Changed the type of png_ptr->rowbytes, PNG_ROWBYTES() and friends
-    to png_size_t (Cosmin).
-  Removed png_convert_size() and replaced png_sizeof with sizeof (Cosmin).
-  Removed some unnecessary type casts (Cosmin).
-  Changed prototype of png_get_compression_buffer_size() and
-    png_set_compression_buffer_size() to work with png_size_t instead of
-    png_uint_32 (Cosmin).
-  Removed png_memcpy_check() and png_memset_check() (Cosmin).
-  Fixed a typo (png_byte --> png_bytep) in libpng.3 and libpng.txt (Cosmin).
-  Clarified that png_zalloc() does not clear the allocated memory,
-    and png_zalloc() and png_zfree() cannot be PNGAPI (Cosmin).
-  Renamed png_mem_size_t to png_alloc_size_t, fixed its definition in
-    pngconf.h, and used it in all memory allocation functions (Cosmin).
-  Renamed pngintrn.h to pngpriv.h, added a comment at the top of the file
-    mentioning that the symbols declared in that file are private, and
-    updated the scripts and the Visual C++ projects accordingly (Cosmin).
-  Removed circular references between pngconf.h and pngconf.h.in in
-    scripts/makefile.vc*win32 (Cosmin).
-  Removing trailing '.' from the warning and error messages (Cosmin).
-  Added pngdefs.h that is built by makefile or configure, instead of
-    pngconf.h.in (Glenn).
-  Detect and fix attempt to write wrong iCCP profile length.
-
-Version 1.4.0beta12 [October 19, 2006]
-  Changed "logical" to "bitwise" in the documentation.
-  Work around Intel-Mac compiler bug by setting PNG_NO_MMX_CODE in pngconf.h
-  Add a typecast to stifle compiler warning in pngrutil.c
-
-Version 1.4.0beta13 [November 10, 2006]
-  Fix potential buffer overflow in sPLT chunk handler.
-  Fix Makefile.am to not try to link to noexistent files.
-
-Version 1.4.0beta14 [November 15, 2006]
-  Check all exported functions for NULL png_ptr.
-
-Version 1.4.0beta15 [November 17, 2006]
-  Relocated two misplaced tests for NULL png_ptr.
-  Built Makefile.in with automake-1.9.6 instead of 1.9.2.
-  Build configure with autoconf-2.60 instead of 2.59
-  Add "install: all" in Makefile.am so "configure; make install" will work.
-
-Version 1.4.0beta16 [November 17, 2006]
-  Added a typecast in png_zalloc().
-
-Version 1.4.0beta17 [December 4, 2006]
-  Changed "new_key[79] = '\0';" to "(*new_key)[79] = '\0';" in pngwutil.c
-  Add "png_bytep" typecast to profile while calculating length in pngwutil.c
-
-Version 1.4.0beta18 [December 7, 2006]
-  Added scripts/CMakeLists.txt
-
-Version 1.4.0beta19 [May 16, 2007]
-  Revised scripts/CMakeLists.txt
-  Rebuilt configure and Makefile.in with newer tools.
-  Added conditional #undef jmpbuf in pngtest.c to undo #define in AIX headers.
-  Added scripts/makefile.nommx
-
-Version 1.4.0beta20 [July 9, 2008]
-  Moved several PNG_HAVE_* macros from pngpriv.h to png.h because applications
-    calling set_unknown_chunk_location() need them.
-  Moved several macro definitions from pngpriv.h to pngconf.h
-  Merge with changes to the 1.2.X branch, as of 1.2.30beta04.
-  Deleted all use of the MMX assembler code and Intel-licensed optimizations.
-  Revised makefile.mingw
-
-Version 1.4.0beta21 [July 21, 2008]
-  Moved local array "chunkdata" from pngrutil.c to the png_struct, so
-    it will be freed by png_read_destroy() in case of a read error (Kurt
-    Christensen).
-
-Version 1.4.0beta22 [July 21, 2008]
-  Change "purpose" and "buffer" to png_ptr->chunkdata to avoid memory leaking.
-
-Version 1.4.0beta23 [July 22, 2008]
-  Change "chunkdata = NULL" to "png_ptr->chunkdata = NULL" several places in
-    png_decompress_chunk().
-
-Version 1.4.0beta24 [July 25, 2008]
-  Change all remaining "chunkdata" to "png_ptr->chunkdata" in
-    png_decompress_chunk(), and remove "chunkdata" from parameter list.
-  Put a call to png_check_chunk_name() in png_read_chunk_header().
-  Revised png_check_chunk_name() to reject a name with a lowercase 3rd byte.
-  Removed two calls to png_check_chunk_name() occuring later in the process.
-  Define PNG_NO_ERROR_NUMBERS by default in pngconf.h
-
-Version 1.4.0beta25 [July 30, 2008]
-  Added a call to png_check_chunk_name() in pngpread.c
-  Reverted png_check_chunk_name() to accept a name with a lowercase 3rd byte.
-  Added png_push_have_buffer() function to pngpread.c
-  Eliminated PNG_BIG_ENDIAN_SUPPORTED and associated png_get_* macros.
-  Made inline expansion of png_get_*() optional with PNG_USE_READ_MACROS.
-  Eliminated all PNG_USELESS_TESTS and PNG_CORRECT_PALETTE_SUPPORTED code.
-  Synced contrib directory and configure files with libpng-1.2.30beta06.
-  Eliminated no-longer-used pngdefs.h (but it's still built in the makefiles)
-  Relocated a misplaced "#endif /* PNG_NO_WRITE_FILTER */" in pngwutil.c
-
-Version 1.4.0beta26 [August 4, 2008]
-  Removed png_push_have_buffer() function in pngpread.c.  It increased the
-    compiled library size slightly.
-  Changed "-Wall" to "-W -Wall" in the CFLAGS in all makefiles (Cosmin Truta)
-  Declared png_ptr "volatile" in pngread.c and pngwrite.c to avoid warnings.
-  Updated contrib/visupng/cexcept.h to version 2.0.1
-  Added PNG_LITERAL_CHARACTER macros for #, [, and ].
-
-Version 1.4.0beta27 [August 5, 2008]
-  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
-  Moved newline character from individual png_debug messages into the
-    png_debug macros.
-  Allow user to #define their own png_debug, png_debug1, and png_debug2.
-
-Version 1.4.0beta28 [August 5, 2008]
-  Revised usage of PNG_LITERAL_SHARP in pngerror.c.
-  Added PNG_STRING_NEWLINE macro
-
-Version 1.4.0beta29 [August 9, 2008]
-  Revised usage of PNG_STRING_NEWLINE to work on non-ISO compilers.
-  Added PNG_STRING_COPYRIGHT macro.
-  Added non-ISO versions of png_debug macros.
-
-Version 1.4.0beta30 [August 14, 2008]
-  Added premultiplied alpha feature (Volker Wiendl).
-
-Version 1.4.0beta31 [August 18, 2008]
-  Moved png_set_premultiply_alpha from pngtrans.c to pngrtran.c
-  Removed extra crc check at the end of png_handle_cHRM().  Bug introduced
-    in libpng-1.4.0beta20.
-
-Version 1.4.0beta32 [August 19, 2008]
-  Added PNG_WRITE_FLUSH_SUPPORTED block around new png_flush() call.
-  Revised PNG_NO_STDIO version of png_write_flush()
-
-Version 1.4.0beta33 [August 20, 2008]
-  Added png_get|set_chunk_cache_max() to limit the total number of sPLT,
-    text, and unknown chunks that can be stored.
-
-Version 1.4.0beta34 [September 6, 2008]
-  Shortened tIME_string to 29 bytes in pngtest.c
-  Fixed off-by-one error introduced in png_push_read_zTXt() function in
-    libpng-1.2.30beta04/pngpread.c (Harald van Dijk)
-
-Version 1.4.0beta35 [October 6, 2008]
-  Changed "trans_values" to "trans_color".
-  Changed so-number from 0 to 14.  Some OS do not like 0.
-  Revised makefile.darwin to fix shared library numbering.
-  Change png_set_gray_1_2_4_to_8() to png_set_expand_gray_1_2_4_to_8()
-    in example.c (debian bug report)
-
-Version 1.4.0beta36 [October 25, 2008]
-  Sync with tEXt vulnerability fix in libpng-1.2.33rc02.
-
-Version 1.4.0beta37 [November 13, 2008]
-  Added png_check_cHRM in png.c and moved checking from pngget.c, pngrutil.c,
-    and pngwrite.c
-
-Version 1.4.0beta38 [November 22, 2008]
-  Added check for zero-area RGB cHRM triangle in png_check_cHRM() and
-    png_check_cHRM_fixed().
-
-Version 1.4.0beta39 [November 23, 2008]
-  Revised png_warning() to write its message on standard output by default
-    when warning_fn is NULL.
-
-Version 1.4.0beta40 [November 24, 2008]
-  Eliminated png_check_cHRM().  Instead, always use png_check_cHRM_fixed().
-  In png_check_cHRM_fixed(), ensure white_y is > 0, and removed redundant
-    check for all-zero coordinates that is detected by the triangle check.
-
-Version 1.4.0beta41 [November 26, 2008]
-  Fixed string vs pointer-to-string error in png_check_keyword().
-  Rearranged test expressions in png_check_cHRM_fixed() to avoid internal
-    overflows.
-  Added PNG_NO_CHECK_cHRM conditional.
-
-Version 1.4.0beta42, 43 [December 1, 2008]
-  Merge png_debug with version 1.2.34beta04.
-
-Version 1.4.0beta44 [December 6, 2008]
-  Removed redundant check for key==NULL before calling png_check_keyword()
-    to ensure that new_key gets initialized and removed extra warning
-    (Merge with version 1.2.34beta05 -- Arvan Pritchard).
-
-Version 1.4.0beta45 [December 9, 2008]
-  In png_write_png(), respect the placement of the filler bytes in an earlier
-    call to png_set_filler() (Jim Barry).
-
-Version 1.4.0beta46 [December 10, 2008]
-  Undid previous change and added PNG_TRANSFORM_STRIP_FILLER_BEFORE and
-    PNG_TRANSFORM_STRIP_FILLER_AFTER conditionals and deprecated
-    PNG_TRANSFORM_STRIP_FILLER (Jim Barry).
-
-Version 1.4.0beta47 [December 15, 2008]
-  Support for dithering was disabled by default, because it has never
-    been well tested and doesn't work very well.  The code has not
-    been removed, however, and can be enabled by building libpng with
-    PNG_READ_DITHER_SUPPORTED defined.
-
-Version 1.4.0beta48 [February 14, 2009]
-  Added new exported function png_calloc().
-  Combined several instances of png_malloc(); png_memset() into png_calloc().
-  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
-    but was never defined.
-
-Version 1.4.0beta49 [February 28, 2009]
-  Added png_fileno() macro to pngconf.h, used in pngwio.c
-  Corrected order of #ifdef's in png_debug definition in png.h
-  Fixed bug introduced in libpng-1.4.0beta48 with the memset arguments
-    for pcal_params.
-  Fixed order of #ifdef directives in the png_debug defines in png.h
-    (bug introduced in libpng-1.2.34/1.4.0beta29).
-  Revised comments in png_set_read_fn() and png_set_write_fn().
-
-Version 1.4.0beta50 [March 18, 2009]
-  Use png_calloc() instead of png_malloc() to allocate big_row_buf when
-    reading an interlaced file, to avoid a possible UMR.
-  Undid revision of PNG_NO_STDIO version of png_write_flush().  Users
-    having trouble with fflush() can build with PNG_NO_WRITE_FLUSH defined
-    or supply their own flush_fn() replacement.
-  Revised libpng*.txt and png.h documentation about use of png_write_flush()
-    and png_set_write_fn().
-  Removed fflush() from pngtest.c.
-  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h
-
-Version 1.4.0beta51 [March 21, 2009]
-  Removed new png_fileno() macro from pngconf.h .
-
-Version 1.4.0beta52 [March 27, 2009]
-  Relocated png_do_chop() ahead of building gamma tables in pngrtran.c
-    This avoids building 16-bit gamma tables unnecessarily.
-  Removed fflush() from pngtest.c.
-  Added "#define PNG_NO_WRITE_FLUSH" to contrib/pngminim/encoder/pngusr.h
-  Added a section on differences between 1.0.x and 1.2.x to libpng.3/libpng.txt
-
-Version 1.4.0beta53 [April 1, 2009]
-  Removed some remaining MMX macros from pngpriv.h
-  Fixed potential memory leak of "new_name" in png_write_iCCP() (Ralph Giles)
-
-Version 1.4.0beta54 [April 13, 2009]
-  Added "ifndef PNG_SKIP_SETJMP_CHECK" block in pngconf.h to allow
-    application code writers to bypass the check for multiple inclusion
-    of setjmp.h when they know that it is safe to ignore the situation.
-  Eliminated internal use of setjmp() in pngread.c and pngwrite.c
-  Reordered ancillary chunks in pngtest.png to be the same as what
-    pngtest now produces, and made some cosmetic changes to pngtest output.
-  Eliminated deprecated png_read_init_3() and png_write_init_3() functions.
-
-Version 1.4.0beta55 [April 15, 2009]
-  Simplified error handling in pngread.c and pngwrite.c by putting
-    the new png_read_cleanup() and png_write_cleanup() functions inline.
-
-Version 1.4.0beta56 [April 25, 2009]
-  Renamed "user_chunk_data" to "my_user_chunk_data" in pngtest.c to suppress
-    "shadowed declaration" warning from gcc-4.3.3.
-  Renamed "gamma" to "png_gamma" in pngset.c to avoid "shadowed declaration"
-    warning about a global "gamma" variable in math.h on some platforms.
-
-Version 1.4.0beta57 [May 2, 2009]
-  Removed prototype for png_freeptr() that was added in libpng-1.4.0beta24
-    but was never defined (again).
-  Rebuilt configure scripts with autoconf-2.63 instead of 2.62
-  Removed pngprefs.h and MMX from makefiles
-
-Version 1.4.0beta58 [May 14, 2009]
-  Changed pngw32.def to pngwin.def in makefile.mingw (typo was introduced
-    in beta57).
-  Clarified usage of sig_bit versus sig_bit_p in example.c (Vincent Torri)
-
-Version 1.4.0beta59 [May 15, 2009]
-  Reformated sources in libpng style (3-space intentation, comment format)
-  Fixed typo in libpng docs (PNG_FILTER_AVE should be PNG_FILTER_AVG)
-  Added sections about the git repository and our coding style to the
-    documentation
-  Relocated misplaced #endif in pngwrite.c, sCAL chunk handler.
-
-Version 1.4.0beta60 [May 19, 2009]
-  Conditionally compile png_read_finish_row() which is not used by
-    progressive readers.
-  Added contrib/pngminim/preader to demonstrate building minimal progressive
-    decoder, based on contrib/gregbook with embedded libpng and zlib.
-
-Version 1.4.0beta61 [May 20, 2009]
-  In contrib/pngminim/*, renamed "makefile.std" to "makefile", since there
-    is only one makefile in those directories, and revised the README files
-    accordingly.
-  More reformatting of comments, mostly to capitalize sentences.
-
-Version 1.4.0beta62 [June 2, 2009]
-  Added "#define PNG_NO_WRITE_SWAP" to contrib/pngminim/encoder/pngusr.h
-    and "define PNG_NO_READ_SWAP" to decoder/pngusr.h and preader/pngusr.h
-  Reformatted several remaining "else statement" into two lines.
-  Added a section to the libpng documentation about using png_get_io_ptr()
-    in configure scripts to detect the presence of libpng.
-
-Version 1.4.0beta63 [June 15, 2009]
-  Revised libpng*.txt and libpng.3 to mention calling png_set_IHDR()
-    multiple times and to specify the sample order in the tRNS chunk,
-    because the ISO PNG specification has a typo in the tRNS table.
-  Changed several PNG_UNKNOWN_CHUNK_SUPPORTED to
-    PNG_HANDLE_AS_UNKNOWN_SUPPORTED, to make the png_set_keep mechanism
-    available for ignoring known chunks even when not saving unknown chunks.
-  Adopted preference for consistent use of "#ifdef" and "#ifndef" versus
-    "#if defined()" and "if !defined()" where possible.
-
-Version 1.4.0beta64 [June 24, 2009]
-  Eliminated PNG_LEGACY_SUPPORTED code.
-  Moved the various unknown chunk macro definitions outside of the
-     PNG_READ|WRITE_ANCILLARY_CHUNK_SUPPORTED blocks.
-
-Version 1.4.0beta65 [June 26, 2009]
-  Added a reference to the libpng license in each file.
-
-Version 1.4.0beta66 [June 27, 2009]
-  Refer to the libpng license instead of the libpng license in each file.
-
-Version 1.4.0beta67 [July 6, 2009]
-  Relocated INVERT_ALPHA within png_read_png() and png_write_png().
-  Added high-level API transform PNG_TRANSFORM_GRAY_TO_RGB.
-  Added an "xcode" project to the projects directory (Alam Arias).
-
-Version 1.4.0beta68 [July 19, 2009]
-  Avoid some tests in filter selection in pngwutil.c
-
-Version 1.4.0beta69 [July 25, 2009]
-  Simplified the new filter-selection test.  This runs faster in the
-    common "PNG_ALL_FILTERS" and PNG_FILTER_NONE cases.
-  Removed extraneous declaration from the new call to png_read_gray_to_rgb()
-    (bug introduced in libpng-1.4.0beta67).
-  Fixed up xcode project (Alam Arias)
-  Added a prototype for png_64bit_product() in png.c
-
-Version 1.4.0beta70 [July 27, 2009]
-  Avoid a possible NULL dereference in debug build, in png_set_text_2().
-    (bug introduced in libpng-0.95, discovered by Evan Rouault)
-
-Version 1.4.0beta71 [July 29, 2009]
-  Rebuilt configure scripts with autoconf-2.64.
-
-Version 1.4.0beta72 [August 1, 2009]
-  Replaced *.tar.lzma with *.tar.xz in distribution.  Get the xz codec
-    from <http://tukaani.org/xz>.
-
-Version 1.4.0beta73 [August 1, 2009]
-  Reject attempt to write iCCP chunk with negative embedded profile length
-    (JD Chen) (CVE-2009-5063).
-
-Version 1.4.0beta74 [August 8, 2009]
-  Changed png_ptr and info_ptr member "trans" to "trans_alpha".
-
-Version 1.4.0beta75 [August 21, 2009]
-  Removed an extra png_debug() recently added to png_write_find_filter().
-  Fixed incorrect #ifdef in pngset.c regarding unknown chunk support.
-
-Version 1.4.0beta76 [August 22, 2009]
-  Moved an incorrectly located test in png_read_row() in pngread.c
-
-Version 1.4.0beta77 [August 27, 2009]
-  Removed lpXYZ.tar.bz2 (with CRLF), KNOWNBUG, libpng-x.y.z-KNOWNBUG.txt,
-    and the "noconfig" files from the distribution.
-  Moved CMakeLists.txt from scripts into the main libpng directory.
-  Various bugfixes and improvements to CMakeLists.txt (Philip Lowman)
-
-Version 1.4.0beta78 [August 31, 2009]
-  Converted all PNG_NO_* tests to PNG_*_SUPPORTED everywhere except pngconf.h
-  Eliminated PNG_NO_FREE_ME and PNG_FREE_ME_SUPPORTED macros.
-  Use png_malloc plus a loop instead of png_calloc() to initialize
-    row_pointers in png_read_png().
-
-Version 1.4.0beta79 [September 1, 2009]
-  Eliminated PNG_GLOBAL_ARRAYS and PNG_LOCAL_ARRAYS; always use local arrays.
-  Eliminated PNG_CALLOC_SUPPORTED macro and always provide png_calloc().
-
-Version 1.4.0beta80 [September 17, 2009]
-  Removed scripts/libpng.icc
-  Changed typecast of filler from png_byte to png_uint_16 in png_set_filler().
-    (Dennis Gustafsson)
-  Fixed typo introduced in beta78 in pngtest.c ("#if def " should be "#ifdef ")
-
-Version 1.4.0beta81 [September 23, 2009]
-  Eliminated unused PNG_FLAG_FREE_* defines from pngpriv.h
-  Expanded TAB characters in pngrtran.c
-  Removed PNG_CONST from all "PNG_CONST PNG_CHNK" declarations to avoid
-    compiler complaints about doubly declaring things "const".
-  Changed all "#if [!]defined(X)" to "if[n]def X" where possible.
-  Eliminated unused png_ptr->row_buf_size
-
-Version 1.4.0beta82 [September 25, 2009]
-  Moved redundant IHDR checking into new png_check_IHDR() in png.c
-    and report all errors found in the IHDR data.
-  Eliminated useless call to png_check_cHRM() from pngset.c
-
-Version 1.4.0beta83 [September 25, 2009]
-  Revised png_check_IHDR() to eliminate bogus complaint about filter_type.
-
-Version 1.4.0beta84 [September 30, 2009]
-  Fixed some inconsistent indentation in pngconf.h
-  Revised png_check_IHDR() to add a test for width variable less than 32-bit.
-
-Version 1.4.0beta85 [October 1, 2009]
-  Revised png_check_IHDR() again, to check info_ptr members instead of
-    the contents of the returned parameters.
-
-Version 1.4.0beta86 [October 9, 2009]
-  Updated the "xcode" project (Alam Arias).
-  Eliminated a shadowed declaration of "pp" in png_handle_sPLT().
-
-Version 1.4.0rc01 [October 19, 2009]
-  Trivial cosmetic changes.
-
-Version 1.4.0beta87 [October 30, 2009]
-  Moved version 1.4.0 back into beta.
-
-Version 1.4.0beta88 [October 30, 2009]
-  Revised libpng*.txt section about differences between 1.2.x and 1.4.0
-    because most of the new features have now been ported back to 1.2.41
-
-Version 1.4.0beta89 [November 1, 2009]
-  More bugfixes and improvements to CMakeLists.txt (Philip Lowman)
-  Removed a harmless extra png_set_invert_alpha() from pngwrite.c
-  Apply png_user_chunk_cache_max within png_decompress_chunk().
-  Merged libpng-1.2.41.txt with libpng-1.4.0.txt where appropriate.
-
-Version 1.4.0beta90 [November 2, 2009]
-  Removed all remaining WIN32_WCE #ifdefs except those involving the
-    time.h "tm" structure
-
-Version 1.4.0beta91 [November 3, 2009]
-  Updated scripts/pngw32.def and projects/wince/png32ce.def
-  Copied projects/wince/png32ce.def to the scripts directory.
-  Added scripts/makefile.wce
-  Patched ltmain.sh for wince support.
-  Added PNG_CONVERT_tIME_SUPPORTED macro.
-
-Version 1.4.0beta92 [November 4, 2009]
-  Make inclusion of time.h in pngconf.h depend on PNG_CONVERT_tIME_SUPPORTED
-  Make #define PNG_CONVERT_tIME_SUPPORTED depend on PNG_WRITE_tIME_SUPPORTED
-  Revised libpng*.txt to describe differences from 1.2.40 to 1.4.0 (instead
-    of differences from 1.2.41 to 1.4.0)
-
-Version 1.4.0beta93 [November 7, 2009]
-  Added PNG_DEPSTRUCT, PNG_DEPRECATED, PNG_USE_RESULT, PNG_NORETURN, and
-    PNG_ALLOCATED macros to detect deprecated direct access to the
-    png_struct or info_struct members and other deprecated usage in
-    applications (John Bowler).
-  Updated scripts/makefile* to add "-DPNG_CONFIGURE_LIBPNG" to CFLAGS,
-    to prevent warnings about direct access to png structs by libpng
-    functions while building libpng.  They need to be tested, especially
-    those using compilers other than gcc.
-  Updated projects/visualc6 and visualc71 with "/d PNG_CONFIGURE_LIBPNG".
-    They should work but still need to be updated to remove
-    references to pnggccrd.c or pngvcrd.c and ASM building.
-  Added README.txt to the beos, cbuilder5, netware, and xcode projects warning
-    that they need to be updated, to remove references to pnggccrd.c and
-    pngvcrd.c and to depend on pngpriv.h
-  Removed three direct references to read_info_ptr members in pngtest.c
-    that were detected by the new PNG_DEPSTRUCT macro.
-  Moved the png_debug macro definitions and the png_read_destroy(),
-    png_write_destroy() and png_far_to_near() prototypes from png.h
-    to pngpriv.h (John Bowler)
-  Moved the synopsis lines for png_read_destroy(), png_write_destroy()
-    png_debug(), png_debug1(), and png_debug2() from libpng.3 to libpngpf.3.
-
-Version 1.4.0beta94 [November 9, 2009]
-  Removed the obsolete, unused pnggccrd.c and pngvcrd.c files.
-  Updated CMakeLists.txt to add "-DPNG_CONFIGURE_LIBPNG" to the definitions.
-  Removed dependency of pngtest.o on pngpriv.h in the makefiles.
-  Only #define PNG_DEPSTRUCT, etc. in pngconf.h if not already defined.
-
-Version 1.4.0beta95 [November 10, 2009]
-  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
-  Added -DPNG_CONFIGURE_LIBPNG to contrib/pngminm/*/makefile
-  Changed png_check_sig() to !png_sig_cmp() in contrib programs.
-  Corrected the png_get_IHDR() call in contrib/gregbook/readpng2.c
-  Changed pngminim/*/gather.sh to stop trying to remove pnggccrd.c and pngvcrd.c
-  Added dependency on pngpriv.h in contrib/pngminim/*/makefile
-
-Version 1.4.0beta96 [November 12, 2009]
-  Renamed scripts/makefile.wce to scripts/makefile.cegcc
-  Revised Makefile.am to use libpng.sys while building libpng.so
-    so that only PNG_EXPORT functions are exported.
-  Removed the deprecated png_check_sig() function/macro.
-  Removed recently removed function names from scripts/*.def
-  Revised pngtest.png to put chunks in the same order written by pngtest
-    (evidently the same change made in libpng-1.0beta54 was lost).
-  Added PNG_PRIVATE macro definition in pngconf.h for possible future use.
-
-Version 1.4.0beta97 [November 13, 2009]
-  Restored pngtest.png to the libpng-1.4.0beta7 version.
-  Removed projects/beos and netware.txt; no one seems to be supporting them.
-  Revised Makefile.in
-
-Version 1.4.0beta98 [November 13, 2009]
-  Added the "xcode" project to zip distributions,
-  Fixed a typo in scripts/pngwin.def introduced in beta97.
-
-Version 1.4.0beta99 [November 14, 2009]
-  Moved libpng-config.in and libpng.pc-configure.in out of the scripts
-    directory, to libpng-config.in and libpng-pc.in, respectively, and
-    modified Makefile.am and configure.ac accordingly.  Now "configure"
-    needs nothing from the "scripts" directory.
-  Avoid redefining PNG_CONST in pngconf.h
-
-Version 1.4.0beta100 [November 14, 2009]
-  Removed ASM builds from projects/visualc6 and projects/visualc71
-  Removed scripts/makefile.nommx and makefile.vcawin32
-  Revised CMakeLists.txt to account for new location of libpng-config.in
-    and libpng-pc.in
-  Updated INSTALL to reflect removal and relocation of files.
-
-Version 1.4.0beta101 [November 14, 2009]
-  Restored the binary files (*.jpg, *.png, some project files) that were
-    accidentally deleted from the zip and 7z distributions when the xcode
-    project was added.
-
-Version 1.4.0beta102 [November 18, 2009]
-  Added libpng-config.in and libpng-pc.in to the zip and 7z distributions.
-  Fixed a typo in projects/visualc6/pngtest.dsp, introduced in beta100.
-  Moved descriptions of makefiles and other scripts out of INSTALL into
-    scripts/README.txt
-  Updated the copyright year in scripts/pngwin.rc from 2006 to 2009.
-
-Version 1.4.0beta103 [November 21, 2009]
-  Removed obsolete comments about ASM from projects/visualc71/README_zlib.txt
-  Align row_buf on 16-byte boundary in memory.
-  Restored the PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED guard around the call
-    to png_flush() after png_write_IEND().  See 1.4.0beta32, 1.4.0beta50
-    changes above and 1.2.30, 1.2.30rc01 and rc03 in 1.2.41 CHANGES.  Someone
-    needs this feature.
-  Make the 'png_jmpbuf' macro expand to a call that records the correct
-    longjmp function as well as returning a pointer to the setjmp
-    jmp_buf buffer, and marked direct access to jmpbuf 'deprecated'.
-    (John Bowler)
-
-Version 1.4.0beta104 [November 22, 2009]
-  Removed png_longjmp_ptr from scripts/*.def and libpng.3
-  Rebuilt configure scripts with autoconf-2.65
-
-Version 1.4.0beta105 [November 25, 2009]
-  Use fast integer PNG_DIVIDE_BY_255() or PNG_DIVIDE_BY_65535()
-    to accomplish alpha premultiplication when
-    PNG_READ_COMPOSITE_NODIV_SUPPORTED is defined.
-  Changed "/255" to "/255.0" in background calculations to make it clear
-    that the 255 is used as a double.
-
-Version 1.4.0beta106 [November 27, 2009]
-  Removed premultiplied alpha feature.
-
-Version 1.4.0beta107 [December 4, 2009]
-  Updated README
-  Added "#define PNG_NO_PEDANTIC_WARNINGS" in the libpng source files.
-  Removed "-DPNG_CONFIGURE_LIBPNG" from the makefiles and projects.
-  Revised scripts/makefile.netbsd, makefile.openbsd, and makefile.sco
-    to put png.h and pngconf.h in $prefix/include, like the other scripts,
-    instead of in $prefix/include/libpng.  Also revised makefile.sco
-    to put them in $prefix/include/libpng15 instead of in
-    $prefix/include/libpng/libpng15.
-
-Version 1.4.0beta108 [December 11, 2009]
-  Removed leftover "-DPNG_CONFIGURE_LIBPNG" from contrib/pngminim/*/makefile
-  Relocated png_do_chop() to its original position in pngrtran.c; the
-    change in version 1.2.41beta08 caused transparency to be handled wrong
-    in some 16-bit datastreams (Yusaku Sugai).
-
-Version 1.4.0beta109 [December 13, 2009]
-  Added "bit_depth" parameter to the private png_build_gamma_table() function.
-  Pass bit_depth=8 to png_build_gamma_table() when bit_depth is 16 but the
-    PNG_16_TO_8 transform has been set, to avoid unnecessary build of 16-bit
-    tables.
-
-Version 1.4.0rc02 [December 20, 2009]
-  Declared png_cleanup_needed "volatile" in pngread.c and pngwrite.c
-
-Version 1.4.0rc03 [December 22, 2009]
-  Renamed libpng-pc.in back to libpng.pc.in and revised CMakeLists.txt
-    (revising the change in 1.4.0beta99)
-
-Version 1.4.0rc04 [December 25, 2009]
-  Swapped PNG_UNKNOWN_CHUNKS_SUPPORTED and PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-    in pngset.c to be consistent with other changes in version 1.2.38.
-
-Version 1.4.0rc05 [December 25, 2009]
-  Changed "libpng-pc.in" to "libpng.pc.in" in configure.ac, configure, and
-    Makefile.in to be consistent with changes in libpng-1.4.0rc03
-
-Version 1.4.0rc06 [December 29, 2009]
-  Reverted the gamma_table changes from libpng-1.4.0beta109.
-  Fixed some indentation errors.
-
-Version 1.4.0rc07 [January 1, 2010]
-  Revised libpng*.txt and libpng.3 about 1.2.x->1.4.x differences.
-  Use png_calloc() instead of png_malloc(); png_memset() in pngrutil.c
-  Update copyright year to 2010.
-
-Version 1.4.0rc08 [January 2, 2010]
-  Avoid deprecated references to png_ptr-io_ptr and png_ptr->error_ptr
-    in pngtest.c
-
-Version 1.4.0 [January 3, 2010]
-  No changes.
-
-Version 1.4.1beta01 [January 8, 2010]
-  Updated CMakeLists.txt for consistent indentation and to avoid an
-    unclosed if-statement warning (Philip Lowman).
-  Revised Makefile.am and Makefile.in to remove references to Y2KINFO,
-    KNOWNBUG, and libpng.la (Robert Schwebel).
-  Revised the makefiles to install the same files and symbolic
-    links as configure, except for libpng.la and libpng14.la.
-  Make png_set|get_compression_buffer_size() available even when
-    PNG_WRITE_SUPPORTED is not enabled.
-  Revised Makefile.am and Makefile.in to simplify their maintenance.
-  Revised scripts/makefile.linux to install a link to libpng14.so.14.1
-
-Version 1.4.1beta02 [January 9, 2010]
-  Revised the rest of the makefiles to install a link to libpng14.so.14.1
-
-Version 1.4.1beta03 [January 10, 2010]
-  Removed png_set_premultiply_alpha() from scripts/*.def
-
-Version 1.4.1rc01 [January 16, 2010]
-  No changes.
-
-Version 1.4.1beta04 [January 23, 2010]
-  Revised png_decompress_chunk() to improve speed and memory usage when
-    decoding large chunks.
-  Added png_set|get_chunk_malloc_max() functions.
-
-Version 1.4.1beta05 [January 26, 2010]
-  Relocated "int k" declaration in pngtest.c to minimize its scope.
-
-Version 1.4.1beta06 [January 28, 2010]
-  Revised png_decompress_chunk() to use a two-pass method suggested by
-    John Bowler.
-
-Version 1.4.1beta07 [February 6, 2010]
-  Folded some long lines in the source files.
-  Added defineable PNG_USER_CHUNK_CACHE_MAX, PNG_USER_CHUNK_MALLOC_MAX,
-    and a PNG_USER_LIMITS_SUPPORTED flag.
-  Eliminated use of png_ptr->irowbytes and reused the slot in png_ptr as
-    png_ptr->png_user_chunk_malloc_max.
-  Revised png_push_save_buffer() to do fewer but larger png_malloc() calls.
-
-Version 1.4.1beta08 [February 6, 2010]
-  Minor cleanup and updating of dates and copyright year.
-
-Version 1.5.0beta01 [February 7, 2010]
-  Moved declaration of png_struct into private pngstruct.h and png_info
-    into pnginfo.h
-
-Version 1.4.1beta09 and 1.5.0beta02 [February 7, 2010]
-  Reverted to original png_push_save_buffer() code.
-
-Version 1.4.1beta10 and 1.5.0beta03 [February 8, 2010]
-  Return allocated "old_buffer" in png_push_save_buffer() before
-    calling png_error(), to avoid a potential memory leak.
-  Updated configure script to use SO number 15.
-
-Version 1.5.0beta04 [February 9, 2010]
-  Removed malformed "incomplete struct declaration" of png_info from png.h
-
-Version 1.5.0beta05 [February 12, 2010]
-  Removed PNG_DEPSTRUCT markup in pngstruct.h and pnginfo.h, and undid the
-    linewrapping that it entailed.
-  Revised comments in pngstruct.h and pnginfo.h and added pointers to
-    the libpng license.
-  Changed PNG_INTERNAL to PNG_EXPOSE_INTERNAL_STRUCTURES
-  Removed the cbuilder5 project, which has not been updated to 1.4.0.
-
-Version 1.4.1beta12 and 1.5.0beta06 [February 14, 2010]
-  Fixed type declaration of png_get_chunk_malloc_max() in pngget.c (Daisuke
-    Nishikawa)
-
-Version 1.5.0beta07 [omitted]
-
-Version 1.5.0beta08 [February 19, 2010]
-  Changed #ifdef PNG_NO_STDIO_SUPPORTED to #ifdef PNG_NO_CONSOLE_IO_SUPPORTED
-    wherever png_snprintf() is used to construct error and warning messages.
-  Noted in scripts/makefile.mingw that it expects to be run under MSYS.
-  Removed obsolete unused MMX-querying support from contrib/gregbook
-  Added exported png_longjmp() function.
-  Removed the AIX redefinition of jmpbuf in png.h
-  Added -D_ALLSOURCE in configure.ac, makefile.aix, and CMakeLists.txt
-    when building on AIX.
-
-Version 1.5.0beta09 [February 19, 2010]
-  Removed -D_ALLSOURCE from configure.ac, makefile.aix, and CMakeLists.txt.
-  Changed the name of png_ptr->jmpbuf to png_ptr->png_jmpbuf in pngstruct.h
-
-Version 1.5.0beta10 [February 25, 2010]
-  Removed unused gzio.c from contrib/pngminim gather and makefile scripts
-  Removed replacement error handlers from contrib/gregbook.  Because of
-    the new png_longjmp() function they are no longer needed.
-
-Version 1.5.0beta11 [March 6, 2010]
-  Removed checking for already-included setjmp.h from pngconf.h
-  Fixed inconsistent indentations and made numerous cosmetic changes.
-  Revised the "SEE ALSO" style of libpng.3, libpngpf.3, and png.5
-
-Version 1.5.0beta12 [March 9, 2010]
-  Moved "#include png.h" inside pngpriv.h and removed "#include png.h" from
-    the source files, along with "#define PNG_EXPOSE_INTERNAL_STRUCTURES"
-    and "#define PNG_NO_PEDANTIC_WARNINGS" (John Bowler).
-  Created new pngdebug.h and moved debug definitions there.
-
-Version 1.5.0beta13 [March 10, 2010]
-  Protect pngstruct.h, pnginfo.h, and pngdebug.h from being included twice.
-  Revise the "#ifdef" blocks in png_inflate() so it will compile when neither
-    PNG_USER_CHUNK_MALLOC_MAX nor PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-    is defined.
-  Removed unused png_measure_compressed_chunk() from pngpriv.h and libpngpf.3
-  Moved the 'config.h' support from pngconf.h to pngpriv.h
-  Removed PNGAPI from the png_longjmp_ptr typedef.
-  Eliminated dependence of pngtest.c on the private pngdebug.h file.
-  Make all png_debug macros into *unterminated* statements or
-    expressions (i.e. a trailing ';' must always be added) and correct
-    the format statements in various png_debug messages.
-
-Version 1.5.0beta14 [March 14, 2010]
-  Removed direct access to png_ptr->io_ptr from the Windows code in pngtest.c
-  Revised Makefile.am to account for recent additions and replacements.
-  Corrected CE and OS/2 DEF files (scripts/png*def) for symbols removed and
-    added ordinal numbers to the Windows DEF file and corrected the duplicated
-    ordinal numbers on CE symbols that are commented out.
-  Added back in export symbols that can be present in the Windows build but
-    are disabled by default.
-  PNG_EXPORT changed to include an 'ordinal' field for DEF file generation.
-    PNG_CALLBACK added to make callback definitions uniform.  PNGAPI split
-    into PNGCAPI (base C form), PNGAPI (exports) and PNGCBAPI (callbacks),
-    and appropriate changes made to all files.  Cygwin builds re-hinged to
-    allow procedure call standard changes and to remove the need for the DEF
-    file (fixes build on Cygwin).
-  Enabled 'attribute' warnings that are relevant to library APIs and callbacks.
-  Changed rules for generation of the various symbol files and added a new
-    rule for a DEF file (which is also added to the distribution).
-  Updated the symbol file generation to stop it adding spurious spaces
-    to EOL (coming from preprocessor macro expansion).  Added a facility
-    to join tokens in the output and rewrite *.dfn to use this.
-  Eliminated scripts/*.def in favor of libpng.def; updated projects/visualc71
-    and removed scripts/makefile.cygwin.
-  Made PNG_BUILD_DLL safe: it can be set whenever a DLL is being built.
-  Removed the include of sys/types.h - apparently unnecessary now on the
-    platforms on which it happened (all but Mac OS and RISC OS).
-  Moved the Mac OS test into pngpriv.h (the only place it is used.)
-
-Version 1.5.0beta15 [March 17, 2010]
-  Added symbols.chk target to Makefile.am to validate the symbols in png.h
-    against the new DEF file scripts/symbols.def.
-  Changed the default DEF file back to pngwin.def.
-  Removed makefile.mingw.
-  Eliminated PNG_NO_EXTERN and PNG_ALL_EXTERN
-
-Version 1.5.0beta16 [April 1, 2010]
-  Make png_text_struct independent of PNG_iTXt_SUPPORTED, so that
-    fields are initialized in all configurations.  The READ/WRITE
-    macros (PNG_(READ|WRITE)_iTXt_SUPPORTED) still function as
-    before to disable code to actually read or write iTXt chunks
-    and iTXt_SUPPORTED can be used to detect presence of either
-    read or write support (but it is probably better to check for
-    the one actually required - read or write.)
-  Combined multiple png_warning() calls for a single error.
-  Restored the macro definition of png_check_sig().
-
-Version 1.5.0beta17 [April 17, 2010]
-  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
-  Documented the fact that png_set_dither() was disabled since libpng-1.4.0.
-  Reenabled png_set_dither() but renamed it to png_set_quantize() to reflect
-    more accurately what it actually does.  At the same time, renamed
-    the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros to
-    PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
-  Added some "(long)" typecasts to printf calls in png_handle_cHRM().
-  Freeze build-time only configuration in the build.
-    In all prior versions of libpng most configuration options
-    controlled by compiler #defines had to be repeated by the
-    application code that used libpng.  This patch changes this
-    so that compilation options that can only be changed at build
-    time are frozen in the build.  Options that are compiler
-    dependent (and those that are system dependent) are evaluated
-    each time - pngconf.h holds these.  Options that can be changed
-    per-file in the application are in png.h.  Frozen options are
-    in the new installed header file pnglibconf.h (John Bowler)
-  Removed the xcode project because it has not been updated to work
-    with libpng-1.5.0.
-  Removed the ability to include optional pngusr.h
-
-Version 1.5.0beta18 [April 17, 2010]
-  Restored the ability to include optional pngusr.h
-  Moved replacements for png_error() and png_warning() from the
-    contrib/pngminim project to pngerror.c, for use when warnings or
-    errors are disabled via PNG_NO_WARN or PNG_NO_ERROR_TEXT, to avoid
-    storing unneeded error/warning text.
-  Updated contrib/pngminim project to work with the new pnglibconf.h
-  Added some PNG_NO_* defines to contrib/pngminim/*/pngusr.h to save space.
-
-Version 1.5.0beta19 [April 24, 2010]
-  Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the functions
-    to read and write ints to be disabled independently of PNG_USE_READ_MACROS,
-    which allows libpng to be built with the functions even though the default
-    is to use the macros - this allows applications to choose at app build
-    time whether or not to use macros (previously impossible because the
-    functions weren't in the default build.)
-  Changed Windows calling convention back to __cdecl for API functions.
-    For Windows/x86 platforms only:
-      __stdcall is no longer needed for Visual Basic, so libpng-1.5.0 uses
-      __cdecl throughout (both API functions and callbacks) on Windows/x86
-      platforms.
-  Replaced visualc6 and visualc71 projects with new vstudio project
-  Relaxed the overly-restrictive permissions of some files.
-
-Version 1.5.0beta20 [April 24, 2010]
-  Relaxed more overly-restrictive permissions of some files.
-
-Version 1.5.0beta21 [April 27, 2010]
-  Removed some unwanted binary bytes and changed CRLF to NEWLINE in the new
-    vstudio project files, and some trivial editing of some files in the
-    scripts directory.
-  Set PNG_NO_READ_BGR, PNG_NO_IO_STATE, and PNG_NO_TIME_RFC1123 in
-    contrib/pngminim/decoder/pngusr.h to make a smaller decoder application.
-
-Version 1.5.0beta22 [April 28, 2010]
-  Fixed dependencies of GET_INT_32 - it does not require READ_INT_FUNCTIONS
-    because it has a macro equivalent.
-  Improved the options.awk script; added an "everything off" option.
-  Revised contrib/pngminim to use the "everything off" option in pngusr.dfa.
-
-Version 1.5.0beta23 [April 29, 2010]
-  Corrected PNG_REMOVED macro to take five arguments.
-    The macro was documented with two arguments (name,ordinal), however
-    the symbol checking .dfn files assumed five arguments.  The five
-    argument form seems more useful so it is changed to that.
-  Corrected PNG_UNKNOWN_CHUNKS_SUPPORTED to PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-    in gregbook/readpng2.c
-  Corrected protection of png_get_user_transform_ptr. The API declaration in
-    png.h is removed if both READ and WRITE USER_TRANSFORM are turned off
-    but was left defined in pngtrans.c
-  Added logunsupported=1 to cause pnglibconf.h to document disabled options.
-    This makes the installed pnglibconf.h more readable but causes no
-    other change.  The intention is that users of libpng will find it
-    easier to understand if an API they need is missing.
-  Include png_reset_zstream() in png.c only when PNG_READ_SUPPORTED is defined.
-  Removed dummy_inflate.c from contrib/pngminim/encoder
-  Removed contrib/pngminim/*/gather.sh; gathering is now done in the makefile.
-
-Version 1.5.0beta24 [May 7, 2010]
-  Use bitwise "&" instead of arithmetic mod in pngrutil.c calculation of the
-    offset of the png_ptr->rowbuf pointer into png_ptr->big_row_buf.
-  Added more blank lines for readability.
-
-Version 1.5.0beta25 [June 18, 2010]
-  In pngpread.c: png_push_have_row() add check for new_row > height
-  Removed the now-redundant check for out-of-bounds new_row from example.c
-
-Version 1.5.0beta26 [June 18, 2010]
-  In pngpread.c: png_push_process_row() add check for too many rows.
-
-Version 1.5.0beta27 [June 18, 2010]
-  Removed the check added in beta25 as it is now redundant.
-
-Version 1.5.0beta28 [June 20, 2010]
-  Rewrote png_process_IDAT_data to consistently treat extra data as warnings
-    and handle end conditions more cleanly.
-  Removed the new (beta26) check in png_push_process_row().
-
-Version 1.5.0beta29 [June 21, 2010]
-  Revised scripts/options.awk to work on Sunos (but still doesn't work)
-  Added comment to options.awk and contrib/pngminim/*/makefile to try nawk.
-
-Version 1.5.0beta30 [June 22, 2010]
-  Stop memory leak when reading a malformed sCAL chunk.
-
-Version 1.5.0beta31 [June 26, 2010]
-  Revised pngpread.c patch of beta28 to avoid an endless loop.
-  Removed some trailing blanks.
-
-Version 1.5.0beta32 [June 26, 2010]
-  Removed leftover scripts/options.patch and scripts/options.rej
-
-Version 1.5.0beta33 [July 6, 3010]
-  Made FIXED and FLOATING options consistent in the APIs they enable and
-    disable.  Corrected scripts/options.awk to handle both command line
-    options and options specified in the .dfa files.
-  Changed char *msg to PNG_CONST char *msg in pngrutil.c
-  Make png_set_sRGB_gAMA_and_cHRM set values using either the fixed or
-    floating point APIs, but not both.
-  Reversed patch to remove error handler when the jmp_buf is stored in the
-    main program structure, not the png_struct.
-    The error handler is needed because the default handler in libpng will
-    always use the jmp_buf in the library control structure; this is never
-    set.  The gregbook code is a useful example because, even though it
-    uses setjmp/longjmp, it shows how error handling can be implemented
-    using control mechanisms not directly supported by libpng.  The
-    technique will work correctly with mechanisms such as Microsoft
-    Structure Exceptions or C++ exceptions (compiler willing - note that gcc
-    does not by default support interworking of C and C++ error handling.)
-  Reverted changes to call png_longjmp in contrib/gregbook where it is not
-    appropriate.  If mainprog->jmpbuf is used by setjmp, then png_longjmp
-    cannot be used.
-  Changed "extern PNG_EXPORT" to "PNG_EXPORT" in png.h (Jan Nijtmans)
-  Changed "extern" to "PNG_EXTERN" in pngpriv.h (except for the 'extern "C" {')
-
-Version 1.5.0beta34 [July 12, 2010]
-  Put #ifndef PNG_EXTERN, #endif around the define PNG_EXTERN in pngpriv.h
-
-Version 1.5.0beta35 [July 24, 2010]
-  Removed some newly-added TAB characters.
-  Added -DNO_PNG_SNPRINTF to CFLAGS in scripts/makefile.dj2
-  Moved the definition of png_snprintf() outside of the enclosing
-    #ifdef blocks in pngconf.h
-
-Version 1.5.0beta36 [July 29, 2010]
-  Patches by John Bowler:
-  Fixed point APIs are now supported throughout (no missing APIs).
-  Internal fixed point arithmetic support exists for all internal floating
-    point operations.
-  sCAL validates the floating point strings it is passed.
-  Safe, albeit rudimentary, Watcom support is provided by PNG_API_RULE==2
-  Two new APIs exist to get the number of passes without turning on the
-    PNG_INTERLACE transform and to get the number of rows in the current
-    pass.
-  A new test program, pngvalid.c, validates the gamma code.
-  Errors in the 16-bit gamma correction (overflows) have been corrected.
-  cHRM chunk testing is done consistently (previously the floating point
-    API bypassed it, because the test really didn't work on FP, now the test
-    is performed on the actual values to be stored in the PNG file so it
-    works in the FP case too.)
-  Most floating point APIs now simply call the fixed point APIs after
-    converting the values to the fixed point form used in the PNG file.
-  The standard headers no longer include zlib.h, which is currently only
-    required for pngstruct.h and can therefore be internal.
-  Revised png_get_int_32 to undo the PNG two's complement representation of
-    negative numbers.
-
-Version 1.5.0beta37 [July 30, 2010]
-  Added a typecast in png_get_int_32() in png.h and pngrutil.h to avoid
-    a compiler warning.
-  Replaced oFFs 0,0 with oFFs -10,20 in pngtest.png
-
-Version 1.5.0beta38 [July 31, 2010]
-  Implemented remaining "_fixed" functions.
-  Corrected a number of recently introduced warnings mostly resulting from
-    safe but uncast assignments to shorter integers.  Also added a zlib
-    VStudio release library project because the latest zlib Official Windows
-    build does not include such a thing.
-  Revised png_get_int_16() to be similar to png_get_int_32().
-  Restored projects/visualc71.
-
-Version 1.5.0beta39 [August 2, 2010]
-  VisualC/GCC warning fixes, VisualC build fixes
-  The changes include support for function attributes in VC in addition to
-    those already present in GCC - necessary because without these some
-    warnings are unavoidable.  Fixes include signed/unsigned fixes in
-    pngvalid and checks with gcc -Wall -Wextra -Wunused.
-  VC requires function attributes on function definitions as well as
-    declarations, PNG_FUNCTION has been added to enable this and the
-    relevant function definitions changed.
-
-Version 1.5.0beta40 [August 6, 2010]
-  Correct use of _WINDOWS_ in pngconf.h
-  Removed png_mem_ #defines; they are no longer used.
-  Added the sRGB chunk to pngtest.png
-
-Version 1.5.0beta41 [August 11, 2010]
-  Added the cHRM chunk to pngtest.png
-  Don't try to use version-script with cygwin/mingw.
-  Revised contrib/gregbook to work under cygwin/mingw.
-
-Version 1.5.0beta42 [August 18, 2010]
-  Add .dll.a to the list of extensions to be symlinked by Makefile.am (Yaakov)
-  Made all API functions that have const arguments and constant string
-    literal pointers declare them (John Bowler).
-
-Version 1.5.0beta43 [August 20, 2010]
-  Removed spurious tabs, shorten long lines (no source change)
-    Also added scripts/chkfmt to validate the format of all the files that can
-    reasonably be validated (it is suggested to run "make distclean" before
-    checking, because some machine generated files have long lines.)
-  Reformatted the CHANGES file to be more consistent throughout.
-  Made changes to address various issues identified by GCC, mostly
-    signed/unsigned and shortening problems on assignment but also a few
-    difficult to optimize (for GCC) loops.
-  Fixed non-GCC fixed point builds.  In png.c a declaration was misplaced
-    in an earlier update.  Fixed to declare the auto variables at the head.
-  Use cexcept.h in pngvalid.c.
-
-Version 1.5.0beta44 [August 24, 2010]
-  Updated CMakeLists.txt to use CMAKE_INSTALL_LIBDIR variable; useful for
-    installing libpng in /usr/lib64 (Funda Wang).
-  Revised CMakeLists.txt to put the man pages in share/man/man* not man/man*
-  Revised CMakeLists.txt to make symlinks instead of copies when installing.
-  Changed PNG_LIB_NAME from pngNN to libpngNN in CMakeLists.txt (Philip Lowman)
-  Implemented memory checks within pngvalid
-  Reformatted/rearranged pngvalid.c to assist use of progressive reader.
-  Check interlaced images in pngvalid
-  Clarified pngusr.h comments in pnglibconf.dfa
-  Simplified the pngvalid error-handling code now that cexcept.h is in place.
-  Implemented progressive reader in pngvalid.c for standard tests
-  Implemented progressive read in pngvalid.c gamma tests
-  Turn on progressive reader in pngvalid.c by default and tidy code.
-
-Version 1.5.0beta45 [August 26, 2010]
-  Added an explicit make step to projects/vstudio for pnglibconf.h
-    Also corrected zlib.vcxproj into which Visual Studio had introduced
-    what it calls an "authoring error".  The change to make pnglibconf.h
-    simply copies the file; in the future it may actually generate the
-    file from scripts/pnglibconf.dfa as the other build systems do.
-  Changed pngvalid to work when floating point APIs are disabled
-  Renamed the prebuilt scripts/pnglibconf.h to scripts/pnglibconf.h.prebuilt
-  Supply default values for PNG_USER_PRIVATEBUILD and PNG_USER_DLLFNAME_POSTFIX
-    in pngpriv.h in case the user neglected to define them in their pngusr.h
-
-Version 1.5.0beta46 [August 28, 2010]
-  Added new private header files to libpng_sources in CMakeLists.txt
-  Added PNG_READ_16BIT, PNG_WRITE_16BIT, and PNG_16BIT options.
-  Added reference to scripts/pnglibconf.h.prebuilt in the visualc71 project.
-
-Version 1.5.0beta47 [September 11, 2010]
-  Fixed a number of problems with 64-bit compilation reported by Visual
-    Studio 2010 (John Bowler).
-
-Version 1.5.0beta48 [October 4, 2010]
-  Updated CMakeLists.txt (Philip Lowman).
-  Revised autogen.sh to recognize and use $AUTOCONF, $AUTOMAKE, $AUTOHEADER,
-    $AUTOPOINT, $ACLOCAL and $LIBTOOLIZE
-  Fixed problem with symbols creation in Makefile.am which was assuming that
-    all versions of ccp write to standard output by default (Martin Banky). The
-    bug was introduced in libpng-1.2.9beta5.
-  Removed unused mkinstalldirs.
-
-Version 1.5.0beta49 [October 8, 2010]
-  Undid Makefile.am revision of 1.5.0beta48.
-
-Version 1.5.0beta50 [October 14, 2010]
-  Revised Makefile.in to account for mkinstalldirs being removed.
-  Added some "(unsigned long)" typecasts in printf statements in pngvalid.c.
-  Suppressed a compiler warning in png_handle_sPLT().
-  Check for out-of-range text compression mode in png_set_text().
-
-Version 1.5.0beta51 [October 15, 2010]
-  Changed embedded dates to "(PENDING RELEASE) in beta releases (and future
-    rc releases) to minimize the difference between releases.
-
-Version 1.5.0beta52 [October 16, 2010]
-  Restored some of the embedded dates (in png.h, png.c, documentation, etc.)
-
-Version 1.5.0beta53 [October 18, 2010]
-  Updated INSTALL to mention using "make maintainer-clean" and to remove
-    obsolete statement about a custom ltmain.sh
-  Disabled "color-tests" by default in Makefile.am so it will work with
-    automake versions earlier than 1.11.1
-  Use document name "libpng-manual.txt" instead of "libpng-<version>.txt"
-    to simplify version differences.
-  Removed obsolete remarks about setjmp handling from INSTALL.
-  Revised and renamed the typedef in png.h and png.c that was designed
-    to catch library and header mismatch.
-
-Version 1.5.0beta54 [November 10, 2010]
-  Require 48 bytes, not 64 bytes, for big_row_buf in overflow checks.
-  Used a consistent structure for the pngget.c functions.
-
-Version 1.5.0beta55 [November 21, 2010]
-  Revised png_get_uint_32, png_get_int_32, png_get_uint_16 (Cosmin)
-  Moved reading of file signature into png_read_sig (Cosmin)
-  Fixed atomicity of chunk header serialization (Cosmin)
-  Added test for io_state in pngtest.c (Cosmin)
-  Added "#!/bin/sh" at the top of contrib/pngminim/*/gather.sh scripts.
-  Changes to remove gcc warnings (John Bowler)
-    Certain optional gcc warning flags resulted in warnings in libpng code.
-    With these changes only -Wconversion and -Wcast-qual cannot be turned on.
-    Changes are trivial rearrangements of code.  -Wconversion is not possible
-    for pngrutil.c (because of the widespread use of += et al on variables
-    smaller than (int) or (unsigned int)) and -Wcast-qual is not possible
-    with pngwio.c and pngwutil.c because the 'write' callback and zlib
-    compression both fail to declare their input buffers with 'const'.
-
-Version 1.5.0beta56 [December 7, 2010]
-  Added the private PNG_UNUSED() macro definition in pngpriv.h.
-  Added some commentary about PNG_EXPORT in png.h and pngconf.h
-  Revised PNG_EXPORT() macro and added PNG_EXPORTA() macro, with the
-    objective of simplifying and improving the cosmetic appearance of png.h.
-  Fixed some incorrect "=" macro names in pnglibconf.dfa
-  Included documentation of changes in 1.5.0 from 1.4.x in libpng-manual.txt
-
-Version 1.5.0beta57 [December 9, 2010]
-  Documented the pngvalid gamma error summary with additional comments and
-    print statements.
-  Improved missing symbol handling in checksym.awk; symbols missing in both
-    the old and new files can now be optionally ignored, treated as errors
-    or warnings.
-  Removed references to pngvcrd.c and pnggccrd.c from the vstudio project.
-  Updated "libpng14" to "libpng15" in the visualc71 project.
-  Enabled the strip16 tests in pngvalid.`
-  Don't display test results (except PASS/FAIL) when running "make test".
-    Instead put them in pngtest-log.txt
-  Added "--with-zprefix=<string>" to configure.ac
-  Updated the prebuilt configuration files to autoconf version 2.68
-
-Version 1.5.0beta58 [December 19, 2010]
-  Fixed interlace image handling and add test cases (John Bowler)
-  Fixed the clean rule in Makefile.am to remove pngtest-log.txt
-  Made minor changes to work around warnings in gcc 3.4
-
-Version 1.5.0rc01 [December 27, 2010]
-  No changes.
-
-Version 1.5.0rc02 [December 27, 2010]
-  Eliminated references to the scripts/*.def files in project/visualc71.
-
-Version 1.5.0rc03 [December 28, 2010]
-  Eliminated scripts/*.def and revised Makefile.am accordingly
-
-Version 1.5.0rc04 [December 29, 2010]
-  Fixed bug in background transformation handling in pngrtran.c (it was
-    looking for the flag in png_ptr->transformations instead of in
-    png_ptr->flags) (David Raymond).
-
-Version 1.5.0rc05 [December 31, 2010]
-  Fixed typo in a comment in CMakeLists.txt (libpng14 => libpng15) (Cosmin)
-
-Version 1.5.0rc06 [January 4, 2011]
-  Changed the new configure option "zprefix=string" to "zlib-prefix=string"
-
-Version 1.5.0rc07 [January 4, 2011]
-  Updated copyright year.
-
-Version 1.5.0 [January 6, 2011]
-  No changes.
-
-version 1.5.1beta01 [January 8, 2011]
-  Added description of png_set_crc_action() to the manual.
-  Added a note in the manual that the type of the iCCP profile was changed
-    from png_charpp to png_bytepp in png_get_iCCP().  This change happened
-    in version 1.5.0beta36 but is not noted in the CHANGES.  Similarly,
-    it was changed from png_charpp to png_const_bytepp in png_set_iCCP().
-  Ensure that png_rgb_to_gray ignores palette mapped images, if libpng
-    internally happens to call it with one, and fixed a failure to handle
-    palette mapped images correctly.  This fixes CVE-2690.
-
-Version 1.5.1beta02 [January 14, 2011]
-  Fixed a bug in handling of interlaced images (bero at arklinux.org).
-  Updated CMakeLists.txt (Clifford Yapp)
-
-Version 1.5.1beta03 [January 14, 2011]
-  Fixed typecasting of some png_debug() statements (Cosmin)
-
-Version 1.5.1beta04 [January 16, 2011]
-  Updated documentation of png_set|get_tRNS() (Thomas Klausner).
-  Mentioned in the documentation that applications must #include "zlib.h"
-    if they need access to anything in zlib.h, and that a number of
-    macros such as png_memset() are no longer accessible by applications.
-  Corrected pngvalid gamma test "sample" function to access all of the color
-    samples of each pixel, instead of sampling the red channel three times.
-  Prefixed variable names index, div, exp, gamma with "png_" to avoid "shadow"
-    warnings, and (mistakenly) changed png_exp() to exp().
-
-Version 1.5.1beta05 [January 16, 2011]
-  Changed variable names png_index, png_div, png_exp, and png_gamma to
-    char_index, divisor, exp_b10, and gamma_val, respectively, and
-    changed exp() back to png_exp().
-
-Version 1.5.1beta06 [January 20, 2011]
-  Prevent png_push_crc_skip() from hanging while reading an unknown chunk
-    or an over-large compressed zTXt chunk with the progressive reader.
-  Eliminated more GCC "shadow" warnings.
-  Revised png_fixed() in png.c to avoid compiler warning about reaching the
-    end without returning anything.
-
-Version 1.5.1beta07 [January 22, 2011]
-  In the manual, describe the png_get_IHDR() arguments in the correct order.
-  Added const_png_structp and const_png_infop types, and used them in
-    prototypes for most png_get_*() functions.
-
-Version 1.5.1beta08 [January 23, 2011]
-  Added png_get_io_chunk_type() and deprecated png_get_io_chunk_name()
-  Added synopses for the IO_STATE functions and other missing synopses
-    to the manual. Removed the synopses from libpngpf.3 because they
-    were out of date and no longer useful.  Better information can be
-    obtained by reading the prototypes and comments in pngpriv.h
-  Attempted to fix cpp on Solaris with S. Studio 12 cc, fix build
-    Added a make macro DFNCPP that is a CPP that will accept the tokens in
-    a .dfn file and adds configure stuff to test for such a CPP.  ./configure
-    should fail if one is not available.
-  Corrected const_png_ in png.h to png_const_ to avoid polluting the namespace.
-  Added png_get_current_row_number and png_get_current_pass_number for the
-    benefit of the user transform callback.
-  Added png_process_data_pause and png_process_data_skip for the benefit of
-    progressive readers that need to stop data processing or want to optimize
-    skipping of unread data (e.g., if the reader marks a chunk to be skipped.)
-
-Version 1.5.1beta09 [January 24, 2011]
-  Enhanced pngvalid, corrected an error in gray_to_rgb, corrected doc error.
-    pngvalid contains tests of transforms, which tests are currently disabled
-    because they are incompletely tested.  gray_to_rgb was failing to expand
-    the bit depth for smaller bit depth images; this seems to be a long
-    standing error and resulted, apparently, in invalid output
-    (CVE-2011-0408, CERT VU#643140).  The documentation did not accurately
-    describe what libpng really does when converting RGB to gray.
-
-Version 1.5.1beta10 [January 27, 2010]
-  Fixed incorrect examples of callback prototypes in the manual, that were
-    introduced in libpng-1.0.0.
-  In addition the order of the png_get_uint macros with respect to the
-    relevant function definitions has been reversed.  This helps the
-    preprocessing of the symbol files be more robust.  Furthermore, the
-    symbol file preprocessing now uses -DPNG_NO_USE_READ_MACROS even when
-    the library may actually be built with PNG_USE_READ_MACROS; this stops
-    the read macros interfering with the symbol file format.
-  Made the manual, synopses, and function prototypes use the function
-    argument names file_gamma, int_file_gamma, and srgb_intent consistently.
-
-Version 1.5.1beta11 [January 28, 2011]
-  Changed PNG_UNUSED from "param=param;" to "{if(param){}}".
-  Corrected local variable type in new API png_process_data_skip()
-    The type was self-evidently incorrect but only causes problems on 64-bit
-    architectures.
-  Added transform tests to pngvalid and simplified the arguments.
-
-Version 1.5.1rc01 [January 29, 2011]
-  No changes.
-
-Version 1.5.1rc02 [January 31, 2011]
-  Added a request in the manual that applications do not use "png_" or
-    "PNG_" to begin any of their own symbols.
-  Changed PNG_UNUSED to "(void)param;" and updated the commentary in pngpriv.h
-
-Version 1.5.1 [February 3, 2011]
-  No changes.
-
-Version 1.5.2beta01 [February 13, 2011]
-  More -Wshadow fixes for older gcc compilers.  Older gcc versions apparently
-    check formal parameters names in function declarations (as well as
-    definitions) to see if they match a name in the global namespace.
-  Revised PNG_EXPORTA macro to not use an empty parameter, to accommodate the
-    old VisualC++ preprocessor.
-  Turned on interlace handling in png_read_png().
-  Fixed gcc pendantic warnings.
-  Handle longjmp in Cygwin.
-  Fixed png_get_current_row_number() in the interlaced case.
-  Cleaned up ALPHA flags and transformations.
-  Implemented expansion to 16 bits.
-
-Version 1.5.2beta02 [February 19, 2011]
-  Fixed mistake in the descriptions of user read_transform and write_transform
-    function prototypes in the manual.  The row_info struct is png_row_infop.
-  Reverted png_get_current_row_number() to previous (1.5.2beta01) behavior.
-  Corrected png_get_current_row_number documentation
-  Fixed the read/write row callback documentation.
-    This documents the current behavior, where the callback is called after
-    every row with information pertaining to the next row.
-
-Version 1.5.2beta03 [March 3, 2011]
-  Fixed scripts/makefile.vcwin32
-  Updated contrib/pngsuite/README to add the word "modify".
-  Define PNG_ALLOCATED to blank when _MSC_VER<1300.
-
-Version 1.5.2rc01 [March 19, 2011]
-  Define remaining attributes to blank when MSC_VER<1300.
-  ifdef out mask arrays in pngread.c when interlacing is not supported.
-
-Version 1.5.2rc02 [March 22, 2011]
-  Added a hint to try CPP=/bin/cpp if "cpp -E" fails in scripts/pnglibconf.mak
-    and in contrib/pngminim/*/makefile, eg., on SunOS 5.10, and removed "strip"
-    from the makefiles.
-  Fixed a bug (present since libpng-1.0.7) that makes png_handle_sPLT() fail
-    to compile when PNG_NO_POINTER_INDEXING is defined (Chubanov Kirill)
-
-Version 1.5.2rc03 [March 24, 2011]
-  Don't include standard header files in png.h while building the symbol table,
-    to avoid cpp failure on SunOS (introduced PNG_BUILDING_SYMBOL_TABLE macro).
-
-Version 1.5.2 [March 31, 2011]
-  No changes.
-
-Version 1.5.3beta01 [April 1, 2011]
-  Re-initialize the zlib compressor before compressing non-IDAT chunks.
-  Added API functions (png_set_text_compression_level() and four others) to
-    set parameters for zlib compression of non-IDAT chunks.
-
-Version 1.5.3beta02 [April 3, 2011]
-  Updated scripts/symbols.def with new API functions.
-  Only compile the new zlib re-initializing code when text or iCCP is
-    supported, using PNG_WRITE_COMPRESSED_TEXT_SUPPORTED macro.
-  Improved the optimization of the zlib CMF byte (see libpng-1.2.6beta03).
-  Optimize the zlib CMF byte in non-IDAT compressed chunks
-
-Version 1.5.3beta03 [April 16, 2011]
-  Fixed gcc -ansi -pedantic compile. A strict ANSI system does not have
-    snprintf, and the "__STRICT_ANSI__" detects that condition more reliably
-    than __STDC__ (John Bowler).
-  Removed the PNG_PTR_NORETURN attribute because it too dangerous. It tells
-    the compiler that a user supplied callback (the error handler) does not
-    return, yet there is no guarantee in practice that the application code
-    will correctly implement the error handler because the compiler only
-    issues a warning if there is a mistake (John Bowler).
-  Removed the no-longer-used PNG_DEPSTRUCT macro.
-  Updated the zlib version to 1.2.5 in the VStudio project.
-  Fixed 64-bit builds where png_uint_32 is smaller than png_size_t in
-    pngwutil.c (John Bowler).
-  Fixed bug with stripping the filler or alpha channel when writing, that
-    was introduced in libpng-1.5.2beta01 (bug report by Andrew Church).
-
-Version 1.5.3beta04 [April 27, 2011]
-  Updated pngtest.png with the new zlib CMF optimization.
-  Cleaned up conditional compilation code and of background/gamma handling
-    Internal changes only except a new option to avoid compiling the
-    png_build_grayscale_palette API (which is not used at all internally.)
-    The main change is to move the transform tests (READ_TRANSFORMS,
-    WRITE_TRANSFORMS) up one level to the caller of the APIs.  This avoids
-    calls to spurious functions if all transforms are disabled and slightly
-    simplifies those functions.  Pngvalid modified to handle this.
-    A minor change is to stop the strip_16 and expand_16 interfaces from
-    disabling each other; this allows the future alpha premultiplication
-    code to use 16-bit intermediate values while still producing 8-bit output.
-    png_do_background and png_do_gamma have been simplified to take a single
-    pointer to the png_struct rather than pointers to every item required
-    from the png_struct. This makes no practical difference to the internal
-    code.
-  A serious bug in the pngvalid internal routine 'standard_display_init' has
-    been fixed - this failed to initialize the red channel and accidentally
-    initialized the alpha channel twice.
-  Changed png_struct jmp_buf member name from png_jmpbuf to tmp_jmpbuf to
-    avoid a possible clash with the png_jmpbuf macro on some platforms.
-
-Version 1.5.3beta05 [May 6, 2011]
-  Added the "_POSIX_SOURCE" feature test macro to ensure libpng sees the
-    correct API. _POSIX_SOURCE is defined in pngpriv.h, pngtest.c and
-    pngvalid.c to ensure that POSIX conformant systems disable non-POSIX APIs.
-  Removed png_snprintf and added formatted warning messages.  This change adds
-    internal APIs to allow png_warning messages to have parameters without
-    requiring the host OS to implement snprintf.  As a side effect the
-    dependency of the tIME-supporting RFC1132 code on stdio is removed and
-    PNG_NO_WARNINGS does actually work now.
-  Pass "" instead of '\0' to png_default_error() in png_err().  This mistake
-    was introduced in libpng-1.2.20beta01.  This fixes CVE-2011-2691.
-  Added PNG_WRITE_OPTIMIZE_CMF_SUPPORTED macro to make the zlib "CMF" byte
-    optimization configureable.
-  IDAT compression failed if preceded by a compressed text chunk (bug
-    introduced in libpng-1.5.3beta01-02).  This was because the attempt to
-    reset the zlib stream in png_write_IDAT happened after the first IDAT
-    chunk had been deflated - much too late.  In this change internal
-    functions were added to claim/release the z_stream and, hopefully, make
-    the code more robust.  Also deflateEnd checking is added - previously
-    libpng would ignore an error at the end of the stream.
-
-Version 1.5.3beta06 [May 8, 2011]
-  Removed the -D_ALL_SOURCE from definitions for AIX in CMakeLists.txt
-  Implemented premultiplied alpha support: png_set_alpha_mode API
-
-Version 1.5.3beta07 [May 11, 2011]
-  Added expand_16 support to the high level interface.
-  Added named value and 'flag' gamma support to png_set_gamma.  Made a minor
-    change from the previous (unreleased) ABI/API to hide the exact value used
-    for Macs - it's not a good idea to embed this in the ABI!
-  Moved macro definitions for PNG_HAVE_IHDR, PNG_HAVE_PLTE, and PNG_AFTER_IDAT
-    from pngpriv.h to png.h because they must be visible to applications
-    that call png_set_unknown_chunks().
-  Check for up->location !PNG_AFTER_IDAT when writing unknown chunks
-    before IDAT.
-
-Version 1.5.3beta08 [May 16, 2011]
-  Improved "pngvalid --speed" to exclude more of pngvalid from the time.
-  Documented png_set_alpha_mode(), other changes in libpng.3/libpng-manual.txt
-  The cHRM chunk now sets the defaults for png_set_rgb_to_gray() (when negative
-    parameters are supplied by the caller), while in the absence of cHRM
-    sRGB/Rec 709 values are still used.  This introduced a divide-by-zero
-    bug in png_handle_cHRM().
-  The bKGD chunk no longer overwrites the background value set by
-    png_set_background(), allowing the latter to be used before the file
-    header is read. It never performed any useful function to override
-    the default anyway.
-  Added memory overwrite and palette image checks to pngvalid.c
-    Previously palette image code was poorly checked. Since the transformation
-    code has a special palette path in most cases this was a severe weakness.
-  Minor cleanup and some extra checking in pngrutil.c and pngrtran.c. When
-    expanding an indexed image, always expand to RGBA if transparency is
-    present.
-
-Version 1.5.3beta09 [May 17, 2011]
-  Reversed earlier 1.5.3 change of transformation order; move png_expand_16
-    back where it was.  The change doesn't work because it requires 16-bit
-    gamma tables when the code only generates 8-bit ones.  This fails
-    silently; the libpng code just doesn't do any gamma correction.  Moving
-    the tests back leaves the old, inaccurate, 8-bit gamma calculations, but
-    these are clearly better than none!
-
-Version 1.5.3beta10 [May 20, 2011]
-
-  png_set_background() and png_expand_16() did not work together correctly.
-    This problem is present in 1.5.2; if png_set_background is called with
-    need_expand false and the matching 16 bit color libpng erroneously just
-    treats it as an 8-bit color because of where png_do_expand_16 is in the
-    transform list.  This simple fix reduces the supplied colour to 8-bits,
-    so it gets smashed, but this is better than the current behavior.
-  Added tests for expand16, more fixes for palette image tests to pngvalid.
-    Corrects the code for palette image tests and disables attempts to
-    validate palette colors.
-
-Version 1.5.3rc01 [June 3, 2011]
-  No changes.
-
-Version 1.5.3rc02 [June 8, 2011]
-  Fixed uninitialized memory read in png_format_buffer() (Bug report by
-    Frank Busse, CVE-2011-2501, related to CVE-2004-0421).
-
-Version 1.5.3beta11 [June 11, 2011]
-  Fixed png_handle_sCAL which is broken in 1.5. This fixes CVE 2011-2692.
-  Added sCAL to pngtest.png
-  Revised documentation about png_set_user_limits() to say that it also affects
-    png writing.
-  Revised handling of png_set_user_limits() so that it can increase the
-    limit beyond the PNG_USER_WIDTH|HEIGHT_MAX; previously it could only
-    reduce it.
-  Make the 16-to-8 scaling accurate. Dividing by 256 with no rounding is
-    wrong (high by one) 25% of the time. Dividing by 257 with rounding is
-    wrong in 128 out of 65536 cases. Getting the right answer all the time
-    without division is easy.
-  Added "_SUPPORTED" to the PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION macro.
-  Added projects/owatcom, an IDE project for OpenWatcom to replace
-    scripts/makefile.watcom.  This project works with OpenWatcom 1.9. The
-    IDE autogenerates appropriate makefiles (libpng.mk) for batch processing.
-    The project is configurable, unlike the Visual Studio project, so long
-    as the developer has an awk.
-  Changed png_set_gAMA to limit the gamma value range so that the inverse
-    of the stored value cannot overflow the fixed point representation,
-    and changed other things OpenWatcom warns about.
-  Revised pngvalid.c to test PNG_ALPHA_MODE_SUPPORTED correctly. This allows
-    pngvalid to build when ALPHA_MODE is not supported, which is required if
-    it is to build on libpng 1.4.
-  Removed string/memory macros that are no longer used and are not
-    necessarily fully supportable, particularly png_strncpy and png_snprintf.
-  Added log option to pngvalid.c and attempted to improve gamma messages.
-
-Version 1.5.3 [omitted]
-  People found the presence of a beta release following an rc release
-    to be confusing; therefore we bump the version to libpng-1.5.4beta01
-    and there will be no libpng-1.5.3 release.
-
-Version 1.5.4beta01 [June 14, 2011]
-  Made it possible to undefine PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-    to get the same (inaccurate) output as libpng-1.5.2 and earlier.
-  Moved definitions of PNG_HAVE_IHDR, PNG_AFTER_IDAT, and PNG_HAVE_PLTE
-    outside of an unknown-chunk block in png.h because they are also
-    needed for other uses.
-
-Version 1.5.4beta02 [June 14, 2011]
-  Fixed and clarified LEGACY 16-to-8 scaling code.
-  Added png_set_chop_16() API, to match inaccurate results from previous
-    libpng versions.
-  Removed the ACCURATE and LEGACY options (they are no longer useable)
-  Use the old scaling method for background if png_set_chop_16() was
-    called.
-  Made png_set_chop_16() API removeable by disabling PNG_CHOP_16_TO_8_SUPPORTED
-
-Version 1.5.4beta03 [June 15, 2011]
-  Fixed a problem in png_do_expand_palette() exposed by optimization in
-    1.5.3beta06
-  Also removed a spurious and confusing "trans" member ("trans") from png_info.
-  The palette expand optimization prevented expansion to an intermediate RGBA
-    form if tRNS was present but alpha was marked to be stripped; this exposed
-    a check for tRNS in png_do_expand_palette() which is inconsistent with the
-    code elsewhere in libpng.
-  Correction to the expand_16 code; removed extra instance of
-    png_set_scale_16_to_8 from pngpriv.h
-
-Version 1.5.4beta04 [June 16, 2011]
-  Added a missing "#ifdef PNG_READ_BACKGROUND_SUPPORTED/#endif" in pngrtran.c
-  Added PNG_TRANSFORM_CHOP_16 to the high-level read transforms.
-  Made PNG_READ_16_TO_8_ACCURATE_SCALE configurable again.  If this is
-    not enabled, png_set_strip_16() and png_do_scale_16_to_8() aren't built.
-  Revised contrib/visupng, gregbook, and pngminim to demonstrate chop_16_to_8
-
-Version 1.5.4beta05 [June 16, 2011]
-  Renamed png_set_strip_16() to png_set_scale_16() and renamed
-    png_set_chop_16() to png_set_strip(16) in an attempt to minimize the
-    behavior changes between libpng14 and libpng15.
-
-Version 1.5.4beta06 [June 18, 2011]
-  Fixed new bug that was causing both strip_16 and scale_16 to be applied.
-
-Version 1.5.4beta07 [June 19, 2011]
-  Fixed pngvalid, simplified macros, added checking for 0 in sCAL.
-    The ACCURATE scale macro is no longer defined in 1.5 - call the
-    png_scale_16_to_8 API.  Made sure that PNG_READ_16_TO_8 is still defined
-    if the png_strip_16_to_8 API is present.  png_check_fp_number now
-    maintains some state so that positive, negative and zero values are
-    identified.  sCAL uses these to be strictly spec conformant.
-
-Version 1.5.4beta08 [June 23, 2011]
-  Fixed pngvalid if ACCURATE_SCALE is defined.
-  Updated scripts/pnglibconf.h.prebuilt.
-
-Version 1.5.4rc01 [June 30, 2011]
-  Define PNG_ALLOCATED to "restrict" only if MSC_VER >= 1400.
-
-Version 1.5.4 [July 7, 2011]
-  No changes.
-
-Version 1.5.5beta01 [July 13, 2011]
-  Fixed some typos and made other minor changes in the manual.
-  Updated contrib/pngminus/makefile.std (Samuli Souminen)
-
-Version 1.5.5beta02 [July 14, 2011]
-  Revised Makefile.am and Makefile.in to look in the right directory for
-    pnglibconf.h.prebuilt
-
-Version 1.5.5beta03 [July 27, 2011]
-  Enabled compilation with g++ compiler.  This compiler does not recognize
-    the file extension, so it always compiles with C++ rules.  Made minor
-    changes to pngrutil.c to cast results where C++ expects it but C does not.
-  Minor editing of libpng.3 and libpng-manual.txt.
-
-Version 1.5.5beta04 [July 29, 2011]
-  Revised CMakeLists.txt (Clifford Yapp)
-  Updated commentary about the png_rgb_to_gray() default coefficients
-    in the manual and in pngrtran.c
-
-Version 1.5.5beta05 [August 17, 2011]
-  Prevent unexpected API exports from non-libpng DLLs on Windows.  The "_DLL"
-    is removed from the test of whether a DLL is being built (this erroneously
-    caused the libpng APIs to be marked as DLL exports in static builds under
-    Microsoft Visual Studio).  Almost all of the libpng building configuration
-    is moved from pngconf.h to pngpriv.h, but PNG_DLL_EXPORT remains in
-    pngconf.h, though, so that it is colocated with the import definition (it
-    is no longer used anywhere in the installed headers).  The VStudio project
-    definitions have been cleaned up: "_USRDLL" has been removed from the
-    static library builds (this was incorrect), and PNG_USE_DLL has been added
-    to pngvalid to test the functionality (pngtest does not supply it,
-    deliberately).  The spurious "_EXPORTS" has been removed from the
-    libpng build (all these errors were a result of copy/paste between project
-    configurations.)
-  Added new types and internal functions for CIE RGB end point handling to
-    pngpriv.h (functions yet to be implemented).
-
-Version 1.5.5beta06 [August 26, 2011]
-  Ensure the CMAKE_LIBRARY_OUTPUT_DIRECTORY is set in CMakeLists.txt
-    (Clifford Yap)
-  Fixes to rgb_to_gray and cHRM XYZ APIs (John Bowler):
-    The rgb_to_gray code had errors when combined with gamma correction.
-    Some pixels were treated as true grey when they weren't and such pixels
-    and true grey ones were not gamma corrected (the original value of the
-    red component was used instead).  APIs to get and set cHRM using color
-    space end points have been added and the rgb_to_gray code that defaults
-    based on cHRM, and the divide-by-zero bug in png_handle_cHRM (CERT
-    VU#477046, CVE-2011-3328, introduced in 1.5.4) have been corrected.
-  A considerable number of tests has been added to pngvalid for the
-    rgb_to_gray transform.
-  Arithmetic errors in rgb_to_gray whereby the calculated gray value was
-    truncated to the bit depth rather than rounded have been fixed except in
-    the 8-bit non-gamma-corrected case (where consistency seems more important
-    than correctness.)  The code still has considerable inaccuracies in the
-    8-bit case because 8-bit linear arithmetic is used.
-
-Version 1.5.5beta07 [September 7, 2011]
-  Added "$(ARCH)" option to makefile.darwin
-  Added SunOS support to configure.ac and Makefile.am
-  Changed png_chunk_benign_error() to png_warning() in png.c, in
-    png_XYZ_from_xy_checked().
-
-Version 1.5.5beta08 [September 10, 2011]
-  Fixed 64-bit compilation errors (gcc). The errors fixed relate
-    to conditions where types that are 32 bits in the GCC 32-bit
-    world (uLong and png_size_t) become 64 bits in the 64-bit
-    world.  This produces potential truncation errors which the
-    compiler correctly flags.
-  Relocated new HAVE_SOLARIS_LD definition in configure.ac
-  Constant changes for 64-bit compatibility (removal of L suffixes). The
-    16-bit cases still use "L" as we don't have a 16-bit test system.
-
-Version 1.5.5rc01 [September 15, 2011]
-  Removed "L" suffixes in pngpriv.h
-
-Version 1.5.5 [September 22, 2011]
-  No changes.
-
-Version 1.5.6beta01 [September 22, 2011]
-  Fixed some 64-bit type conversion warnings in pngrtran.c
-  Moved row_info from png_struct to a local variable.
-  The various interlace mask arrays have been made into arrays of
-    bytes and made PNG_CONST and static (previously some arrays were
-    marked PNG_CONST and some weren't).
-  Additional checks have been added to the transform code to validate the
-    pixel depths after the transforms on both read and write.
-  Removed some redundant code from pngwrite.c, in png_destroy_write_struct().
-  Changed chunk reading/writing code to use png_uint_32 instead of png_byte[4].
-    This removes the need to allocate temporary strings for chunk names on
-    the stack in the read/write code.  Unknown chunk handling still uses the
-    string form because this is exposed in the API.
-
-Version 1.5.6beta02 [September 26, 2011]
-  Added a note in the manual the png_read_update_info() must be called only
-    once with a particular info_ptr.
-  Fixed a typo in the definition of the new PNG_STRING_FROM_CHUNK(s,c) macro.
-
-Version 1.5.6beta03 [September 28, 2011]
-  Revised test-pngtest.sh to report FAIL when pngtest fails.
-  Added "--strict" option to pngtest, to report FAIL when the failure is
-    only because the resulting valid files are different.
-  Revised CMakeLists.txt to work with mingw and removed some material from
-    CMakeLists.txt that is no longer useful in libpng-1.5.
-
-Version 1.5.6beta04 [October 5, 2011]
-  Fixed typo in Makefile.in and Makefile.am ("-M Wl" should be "-M -Wl")."
-
-Version 1.5.6beta05 [October 12, 2011]
-  Speed up png_combine_row() for interlaced images. This reduces the generality
-    of the code, allowing it to be optimized for Adam7 interlace.  The masks
-    passed to png_combine_row() are now generated internally, avoiding
-    some code duplication and localizing the interlace handling somewhat.
-  Align png_struct::row_buf - previously it was always unaligned, caused by
-    a bug in the code that attempted to align it; the code needs to subtract
-    one from the pointer to take account of the filter byte prepended to
-    each row.
-  Optimized png_combine_row() when rows are aligned. This gains a small
-    percentage for 16-bit and 32-bit pixels in the typical case where the
-    output row buffers are appropriately aligned. The optimization was not
-    previously possible because the png_struct buffer was always misaligned.
-  Fixed bug in png_write_chunk_header() debug print, introduced in 1.5.6beta01.
-
-Version 1.5.6beta06 [October 17, 2011]
-  Removed two redundant tests for unitialized row.
-  Fixed a relatively harmless memory overwrite in compressed text writing
-    with a 1 byte zlib buffer.
-  Add ability to call png_read_update_info multiple times to pngvalid.c.
-  Fixes for multiple calls to png_read_update_info. These fixes attend to
-    most of the errors revealed in pngvalid, however doing the gamma work
-    twice results in inaccuracies that can't be easily fixed.  There is now
-    a warning in the code if this is going to happen.
-  Turned on multiple png_read_update_info in pngvalid transform tests.
-  Prevent libpng from overwriting unused bits at the end of the image when
-    it is not byte aligned, while reading. Prior to libpng-1.5.6 libpng would
-    overwrite the partial byte at the end of each row if the row width was not
-    an exact multiple of 8 bits and the image is not interlaced.
-
-Version 1.5.6beta07 [October 21, 2011]
-  Made png_ptr->prev_row an aligned pointer into png_ptr->big_prev_row
-    (Mans Rullgard).
-
-Version 1.5.6rc01 [October 26, 2011]
-  Changed misleading "Missing PLTE before cHRM" warning to "Out of place cHRM"
-
-Version 1.5.6rc02 [October 27, 2011]
-  Added LSR() macro to defend against buggy compilers that evaluate non-taken
-    code branches and complain about out-of-range shifts.
-
-Version 1.5.6rc03 [October 28, 2011]
-  Renamed the LSR() macro to PNG_LSR() and added PNG_LSL() macro.
-  Fixed compiler warnings with Intel and MSYS compilers. The logical shift
-    fix for Microsoft Visual C is required by other compilers, so this
-    enables that fix for all compilers when using compile-time constants.
-    Under MSYS 'byte' is a name declared in a system header file, so we
-    changed the name of a local variable to avoid the warnings that result.
-  Added #define PNG_ALIGN_TYPE PNG_ALIGN_NONE to contrib/pngminim/*/pngusr.h
-
-Version 1.5.6 [November 3, 2011]
-  No changes.
-
-Version 1.5.7beta01 [November 4, 2011]
-  Added support for ARM processor, when decoding all PNG up-filtered rows
-    and any other-filtered rows with 3 or 4 bytes per pixel (Mans Rullgard).
-  Fixed bug in pngvalid on early allocation failure; fixed type cast in
-    pngmem.c; pngvalid would attempt to call png_error() if the allocation
-    of a png_struct or png_info failed. This would probably have led to a
-    crash.  The pngmem.c implementation of png_malloc() included a cast
-    to png_size_t which would fail on large allocations on 16-bit systems.
-  Fix for the preprocessor of the Intel C compiler. The preprocessor
-    splits adjacent @ signs with a space; this changes the concatentation
-    token from @-@-@ to PNG_JOIN; that should work with all compiler
-    preprocessors.
-  Paeth filter speed improvements from work by Siarhei Siamashka. This
-    changes the 'Paeth' reconstruction function to improve the GCC code
-    generation on x86. The changes are only part of the suggested ones;
-    just the changes that definitely improve speed and remain simple.
-    The changes also slightly increase the clarity of the code.
-
-Version 1.5.7beta02 [November 11, 2011]
-  Check compression_type parameter in png_get_iCCP and remove spurious
-    casts. The compression_type parameter is always assigned to, so must
-    be non-NULL. The cast of the profile length potentially truncated the
-    value unnecessarily on a 16-bit int system, so the cast of the (byte)
-    compression type to (int) is specified by ANSI-C anyway.
-  Fixed FP division by zero in pngvalid.c; the 'test_pixel' code left
-    the sBIT fields in the test pixel as 0, which resulted in a floating
-    point division by zero which was irrelevant but causes systems where
-    FP exceptions cause a crash. Added code to pngvalid to turn on FP
-    exceptions if the appropriate glibc support is there to ensure this is
-    tested in the future.
-  Updated scripts/pnglibconf.mak and scripts/makefile.std to handle the
-    new PNG_JOIN macro.
-  Added versioning to pnglibconf.h comments.
-  Simplified read/write API initial version; basic read/write tested on
-    a variety of images, limited documentation (in the header file.)
-  Installed more accurate linear to sRGB conversion tables. The slightly
-    modified tables reduce the number of 16-bit values that
-    convert to an off-by-one 8-bit value.  The "makesRGB.c" code that was used
-    to generate the tables is now in a contrib/sRGBtables sub-directory.
-
-Version 1.5.7beta03 [November 17, 2011]
-  Removed PNG_CONST from the sRGB table declarations in pngpriv.h and png.c
-  Added run-time detection of NEON support.
-  Added contrib/libtests; includes simplified API test and timing test and
-    a color conversion utility for rapid checking of failed 'pngstest' results.
-  Multiple transform bug fixes plus a work-round for double gamma correction.
-    libpng does not support more than one transform that requires linear data
-    at once - if this is tried typically the results is double gamma
-    correction. Since the simplified APIs can need rgb to gray combined with
-    a compose operation it is necessary to do one of these outside the main
-    libpng transform code. This check-in also contains fixes to various bugs
-    in the simplified APIs themselves and to some bugs in compose and rgb to
-    gray (on palette) itself.
-  Fixes for C++ compilation using g++ When libpng source is compiled
-    using g++. The compiler imposes C++ rules on the C source; thus it
-    is desireable to make the source work with either C or C++ rules
-    without throwing away useful error information.  This change adds
-    png_voidcast to allow C semantic (void*) cases or the corresponding
-    C++ static_cast operation, as appropriate.
-  Added --noexecstack to assembler file compilation. GCC does not set
-    this on assembler compilation, even though it does on C compilation.
-    This creates security issues if assembler code is enabled; the
-    work-around is to set it by default in the flags for $(CCAS)
-  Work around compilers that don't support declaration of const data. Some
-    compilers fault 'extern const' data declarations (because the data is
-    not initialized); this turns on const-ness only for compilers where
-    this is known to work.
-
-Version 1.5.7beta04 [November 17, 2011]
-  Since the gcc driver does not recognize the --noexecstack flag, we must
-    use the -Wa prefix to have it passed through to the assembler.
-    Also removed a duplicate setting of this flag.
-  Added files that were omitted from the libpng-1.5.7beta03 zip distribution.
-
-Version 1.5.7beta05 [November 25, 2011]
-  Removed "zTXt" from warning in generic chunk decompression function.
-  Validate time settings passed to pngset() and png_convert_to_rfc1123()
-    (Frank Busse).
-  Added MINGW support to CMakeLists.txt
-  Reject invalid compression flag or method when reading the iTXt chunk.
-  Backed out 'simplified' API changes. The API seems too complex and there
-    is a lack of consensus or enthusiasm for the proposals.  The API also
-    reveals significant bugs inside libpng (double gamma correction and the
-    known bug of being unable to retrieve a corrected palette). It seems
-    better to wait until the bugs, at least, are corrected.
-  Moved pngvalid.c into contrib/libtests
-  Rebuilt Makefile.in, configure, etc., with autoconf-2.68
-
-Version 1.5.7rc01 [December 1, 2011]
-  Replaced an "#if" with "#ifdef" in pngrtran.c
-  Revised #if PNG_DO_BC block in png.c (use #ifdef and add #else)
-
-Version 1.5.7rc02 [December 5, 2011]
-  Revised project files and contrib/pngvalid/pngvalid.c to account for
-    the relocation of pngvalid into contrib/libtests.
-  Revised pngconf.h to use " __declspec(restrict)" only when MSC_VER >= 1400,
-    as in libpng-1.5.4.
-  Put CRLF line endings in the owatcom project files.
-
-Version 1.5.7rc03 [December 7, 2011]
-  Updated CMakeLists.txt to account for the relocation of pngvalid.c
-
-Version 1.5.7 [December 15, 2011]
-  Minor fixes to pngvalid.c for gcc 4.6.2 compatibility to remove warnings
-    reported by earlier versions.
-  Fixed minor memset/sizeof errors in pngvalid.c.
-
-Version 1.6.0beta01 [December 15, 2011]
-  Removed machine-generated configure files from the GIT repository (they will
-    continue to appear in the tarball distributions and in the libpng15 and
-    earlier GIT branches).
-  Restored the new 'simplified' API, which was started in libpng-1.5.7beta02
-    but later deleted from libpng-1.5.7beta05.
-  Added example programs for the new 'simplified' API.
-  Added ANSI-C (C90) headers and require them, and take advantage of the
-    change. Also fixed some of the projects/* and contrib/* files that needed
-    updates for libpng16 and the move of pngvalid.c.
-    With this change the required ANSI-C header files are assumed to exist: the
-    implementation must provide float.h, limits.h, stdarg.h and stddef.h and
-    libpng relies on limits.h and stddef.h existing and behaving as defined
-    (the other two required headers aren't used).  Non-ANSI systems that don't
-    have stddef.h or limits.h will have to provide an appropriate fake
-    containing the relevant types and #defines.
-  The use of FAR/far has been eliminated and the definition of png_alloc_size_t
-    is now controlled by a flag so that 'small size_t' systems can select it
-    if necessary.  Libpng 1.6 may not currently work on such systems -- it
-    seems likely that it will ask 'malloc' for more than 65535 bytes with any
-    image that has a sufficiently large row size (rather than simply failing
-    to read such images).
-  New tools directory containing tools used to generate libpng code.
-  Fixed race conditions in parallel make builds. With higher degrees of
-    parallelism during 'make' the use of the same temporary file names such
-    as 'dfn*' can result in a race where a temporary file from one arm of the
-    build is deleted or overwritten in another arm.  This changes the
-    temporary files for suffix rules to always use $* and ensures that the
-    non-suffix rules use unique file names.
-
-Version 1.6.0beta02 [December 21, 2011]
-  Correct configure builds where build and source directories are separate.
-    The include path of 'config.h' was erroneously made relative in pngvalid.c
-    in libpng 1.5.7.
-
-Version 1.6.0beta03 [December 22, 2011]
-  Start-up code size improvements, error handler flexibility. These changes
-    alter how the tricky allocation of the initial png_struct and png_info
-    structures are handled. png_info is now handled in pretty much the same
-    way as everything else, except that the allocations handle NULL return
-    silently.  png_struct is changed in a similar way on allocation and on
-    deallocation a 'safety' error handler is put in place (which should never
-    be required).  The error handler itself is changed to permit mismatches
-    in the application and libpng error buffer size; however, this means a
-    silent change to the API to return the jmp_buf if the size doesn't match
-    the size from the libpng compilation; libpng now allocates the memory and
-    this may fail.  Overall these changes result in slight code size
-    reductions; however, this is a reduction in code that is always executed
-    so is particularly valuable.  Overall on a 64-bit system the libpng DLL
-    decreases in code size by 1733 bytes.  pngerror.o increases in size by
-    about 465 bytes because of the new functionality.
-  Added png_convert_to_rfc1123_buffer() and deprecated png_convert_to_rfc1123()
-    to avoid including a spurious buffer in the png_struct.
-
-Version 1.6.0beta04 [December 30, 2011]
-  Regenerated configure scripts with automake-1.11.2
-  Eliminated png_info_destroy(). It is now used only in png.c and only calls
-    one other internal function and memset().
-  Enabled png_get_sCAL_fixed() if floating point APIs are enabled. Previously
-    it was disabled whenever internal fixed point arithmetic was selected,
-    which meant it didn't exist even on systems where FP was available but not
-    preferred.
-  Added pngvalid.c compile time checks for const APIs.
-  Implemented 'restrict' for png_info and png_struct. Because of the way
-    libpng works both png_info and png_struct are always accessed via a
-    single pointer.  This means adding C99 'restrict' to the pointer gives
-    the compiler some opportunity to optimize the code.  This change allows
-    that.
-  Moved AC_MSG_CHECKING([if libraries can be versioned]) later to the proper
-    location in configure.ac (Gilles Espinasse).
-  Changed png_memcpy to C assignment where appropriate. Changed all those
-    uses of png_memcpy that were doing a simple assignment to assignments
-    (all those cases where the thing being copied is a non-array C L-value).
-  Added some error checking to png_set_*() routines.
-  Removed the reference to the non-exported function png_memcpy() from
-    example.c.
-  Fixed the Visual C 64-bit build - it requires jmp_buf to be aligned, but
-    it had become misaligned.
-  Revised contrib/pngminus/pnm2png.c to avoid warnings when png_uint_32
-    and unsigned long are of different sizes.
-
-Version 1.6.0beta05 [January 15, 2012]
-  Updated manual with description of the simplified API (copied from png.h)
-  Fix bug in pngerror.c: some long warnings were being improperly truncated
-    (CVE-2011-3464, bug introduced in libpng-1.5.3beta05).
-
-Version 1.6.0beta06 [January 24, 2012]
-  Added palette support to the simplified APIs. This commit
-    changes some of the macro definitions in png.h, app code
-    may need corresponding changes.
-  Increased the formatted warning buffer to 192 bytes.
-  Added color-map support to simplified API. This is an initial version for
-    review; the documentation has not yet been updated.
-  Fixed Min/GW uninstall to remove libpng.dll.a
-
-Version 1.6.0beta07 [January 28, 2012]
-  Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived)
-    compiler issues slightly different warnings from those issued by the
-    current vesions of GCC. This eliminates those warnings by
-    adding/removing casts and small code rewrites.
-  Updated configure.ac from autoupdate: added --enable-werror option.
-    Also some layout regularization and removal of introduced tab characters
-    (replaced with 3-character indentation).  Obsolete macros identified by
-    autoupdate have been removed; the replacements are all in 2.59 so
-    the pre-req hasn't been changed.  --enable-werror checks for support
-    for -Werror (or the given argument) in the compiler.  This mimics the
-    gcc configure option by allowing -Werror to be turned on safely; without
-    the option the tests written in configure itself fail compilation because
-    they cause compiler warnings.
-  Rewrote autogen.sh to run autoreconf instead of running tools one-by-one.
-  Conditionalize the install rules for MINGW and CYGWIN in CMakeLists.txt and
-    set CMAKE_LIBRARY_OUTPUT_DIRECTORY to "lib" on all platforms (C. Yapp).
-  Freeze libtool files in the 'scripts' directory. This version of autogen.sh
-    attempts to dissuade people from running it when it is not, or should not,
-    be necessary.  In fact, autogen.sh does not work when run in a libpng
-    directory extracted from a tar distribution anymore. You must run it in
-    a GIT clone instead.
-  Added two images to contrib/pngsuite (1-bit and 2-bit transparent grayscale),
-    and renamed three whose names were inconsistent with those in
-    pngsuite/README.txt.
-
-Version 1.6.0beta08 [February 1, 2012]
-  Fixed Image::colormap misalignment in pngstest.c
-  Check libtool/libtoolize version number (2.4.2) in configure.ac
-  Divide test-pngstest.sh into separate pngstest runs for basic and
-    transparent images.
-  Moved automake options to AM_INIT_AUTOMAKE in configure.ac
-  Added color-tests, silent-rules (Not yet implemented in Makefile.am) and
-    version checking to configure.ac
-  Improved pngstest speed by not doing redundant tests and add const to
-    the background parameter of png_image_finish_read. The --background
-    option is now done automagically only when required, so that commandline
-    option no longer exists.
-  Cleaned up pngpriv.h to consistently declare all functions and data.
-    Also eliminated PNG_CONST_DATA, which is apparently not needed but we
-    can't be sure until it is gone.
-  Added symbol prefixing that allows all the libpng external symbols
-    to be prefixed (suggested by Reuben Hawkins).
-  Updated "ftbb*.png" list in the owatcom and vstudio projects.
-  Fixed 'prefix' builds on clean systems. The generation of pngprefix.h
-    should not require itself.
-  Updated INSTALL to explain that autogen.sh must be run in a GIT clone,
-    not in a libpng directory extracted from a tar distribution.
-
-Version 1.6.0beta09 [February 1, 2012]
-  Reverted the prebuilt configure files to libpng-1.6.0beta05 condition.
-
-Version 1.6.0beta10 [February 3, 2012]
-  Added Z_SOLO for zlib-1.2.6+ and correct pngstest tests
-  Updated list of test images in CMakeLists.txt
-  Updated the prebuilt configure files to current condition.
-  Revised INSTALL information about autogen.sh; it works in tar distributions.
-
-Version 1.6.0beta11 [February 16, 2012]
-  Fix character count in pngstest command in projects/owatcom/pngstest.tgt
-  Revised test-pngstest.sh to report PASS/FAIL for each image.
-  Updated documentation about the simplified API.
-  Corrected estimate of error in libpng png_set_rgb_to_gray API.  The API is
-    extremely inaccurate for sRGB conversions because it uses an 8-bit
-    intermediate linear value and it does not use the sRGB transform, so it
-    suffers from the known instability in gamma transforms for values close
-    to 0 (see Poynton).  The net result is that the calculation has a maximum
-    error of 14.99/255; 0.5/255^(1/2.2).  pngstest now uses 15 for the
-    permitted 8-bit error. This may still not be enough because of arithmetic
-    error.
-  Removed some unused arrays (with #ifdef) from png_read_push_finish_row().
-  Fixed a memory overwrite bug in simplified read of RGB PNG with
-    non-linear gamma Also bugs in the error checking in pngread.c and changed
-    quite a lot of the checks in pngstest.c to be correct; either correctly
-    written or not over-optimistic.  The pngstest changes are insufficient to
-    allow all possible RGB transforms to be passed; pngstest cmppixel needs
-    to be rewritten to make it clearer which errors it allows and then changed
-    to permit known inaccuracies.
-  Removed tests for no-longer-used *_EMPTY_PLTE_SUPPORTED from pngstruct.h
-  Fixed fixed/float API export conditionals. 1) If FIXED_POINT or
-    FLOATING_POINT options were switched off, png.h ended up with lone ';'
-    characters.  This is not valid ANSI-C outside a function.  The ';'
-    characters have been moved inside the definition of PNG_FP_EXPORT and
-    PNG_FIXED_EXPORT. 2) If either option was switched off, the declaration
-    of the corresponding functions were completely omitted, even though some
-    of them are still used internally.  The result is still valid, but
-    produces warnings from gcc with some warning options (including -Wall). The
-    fix is to cause png.h to declare the functions with PNG_INTERNAL_FUNCTION
-    when png.h is included from pngpriv.h.
-  Check for invalid palette index while reading paletted PNG.  When one is
-    found, issue a warning and increase png_ptr->num_palette accordingly.
-    Apps are responsible for checking to see if that happened.
-
-Version 1.6.0beta12 [February 18, 2012]
-  Do not increase num_palette on invalid_index.
-  Relocated check for invalid palette index to pngrtran.c, after unpacking
-    the sub-8-bit pixels.
-  Fixed CVE-2011-3026 buffer overrun bug.  This bug was introduced when
-    iCCP chunk support was added at libpng-1.0.6. Deal more correctly with the
-    test on iCCP chunk length. Also removed spurious casts that may hide
-    problems on 16-bit systems.
-
-Version 1.6.0beta13 [February 24, 2012]
-  Eliminated redundant png_push_read_tEXt|zTXt|iTXt|unknown code from
-    pngpread.c and use the sequential png_handle_tEXt, etc., in pngrutil.c;
-    now that png_ptr->buffer is inaccessible to applications, the special
-    handling is no longer useful.
-  Added PNG_SAFE_LIMITS feature to pnglibconf.dfa, pngpriv.h, and new
-    pngusr.dfa to reset the user limits to safe ones if PNG_SAFE_LIMITS is
-    defined.  To enable, use "CPPFLAGS=-DPNG_SAFE_LIMITS_SUPPORTED=1" on the
-    configure command or put #define PNG_SAFE_LIMITS_SUPPORTED in
-    pnglibconf.h.prebuilt and pnglibconf.h.
-
-Version 1.6.0beta14 [February 27, 2012]
-  Added information about the new limits in the manual.
-  Updated Makefile.in
-
-Version 1.6.0beta15 [March 2, 2012]
-  Removed unused "current_text" members of png_struct and the png_free()
-    of png_ptr->current_text from pngread.c
-  Rewrote pngstest.c for substantial speed improvement.
-  Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a
-    spurious check in pngwrite.c
-  Added PNG_IMAGE_FLAG_FAST for the benefit of applications that store
-    intermediate files, or intermediate in-memory data, while processing
-    image data with the simplified API.  The option makes the files larger
-    but faster to write and read.  pngstest now uses this by default; this
-    can be disabled with the --slow option.
-  Improved pngstest fine tuning of error numbers, new test file generator.
-    The generator generates images that test the full range of sample values,
-    allow the error numbers in pngstest to be tuned and checked.  makepng
-    also allows generation of images with extra chunks, although this is
-    still work-in-progress.
-  Added check for invalid palette index while reading.
-  Fixed some bugs in ICC profile writing. The code should now accept
-    all potentially valid ICC profiles and reject obviously invalid ones.
-    It now uses png_error() to do so rather than casually writing a PNG
-    without the necessary color data.
-  Removed whitespace from the end of lines in all source files and scripts.
-
-Version 1.6.0beta16 [March 6, 2012]
-  Relocated palette-index checking function from pngrutil.c to pngtrans.c
-  Added palette-index checking while writing.
-  Changed png_inflate() and calling routines to avoid overflow problems.
-    This is an intermediate check-in that solves the immediate problems and
-    introduces one performance improvement (avoiding a copy via png_ptr->zbuf.)
-    Further changes will be made to make ICC profile handling more secure.
-  Fixed build warnings (MSVC, GCC, GCC v3). Cygwin GCC with default options
-    declares 'index' as a global, causing a warning if it is used as a local
-    variable.  GCC 64-bit warns about assigning a (size_t) (unsigned 64-bit)
-    to an (int) (signed 32-bit).  MSVC, however, warns about using the
-    unary '-' operator on an unsigned value (even though it is well defined
-    by ANSI-C to be ~x+1).  The padding calculation was changed to use a
-    different method.  Removed the tests on png_ptr->pass.
-  Added contrib/libtests/tarith.c to test internal arithmetic functions from
-    png.c. This is a libpng maintainer program used to validate changes to the
-    internal arithmetic functions.
-  Made read 'inflate' handling like write 'deflate' handling. The read
-    code now claims and releases png_ptr->zstream, like the write code.
-    The bug whereby the progressive reader failed to release the zstream
-    is now fixed, all initialization is delayed, and the code checks for
-    changed parameters on deflate rather than always calling
-    deflatedEnd/deflateInit.
-  Validate the zTXt strings in pngvalid.
-  Added code to validate the windowBits value passed to deflateInit2().
-    If the call to deflateInit2() is wrong a png_warning will be issued
-    (in fact this is harmless, but the PNG data produced may be sub-optimal).
-
-Version 1.6.0beta17 [March 10, 2012]
-  Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition. 
-  Reject all iCCP chunks after the first, even if the first one is invalid.
-  Deflate/inflate was reworked to move common zlib calls into single
-    functions [rw]util.c.  A new shared keyword check routine was also added
-    and the 'zbuf' is no longer allocated on progressive read.  It is now
-    possible to call png_inflate() incrementally.  A warning is no longer
-    issued if the language tag or translated keyword in the iTXt chunk
-    has zero length.
-  If benign errors are disabled use maximum window on ancilliary inflate.
-    This works round a bug introduced in 1.5.4 where compressed ancillary
-    chunks could end up with a too-small windowBits value in the deflate
-    header.
-
-Version 1.6.0beta18 [March 16, 2012]
-  Issue a png_benign_error() instead of png_warning() about bad palette index.
-  In pngtest, treat benign errors as errors if "-strict" is present.
-  Fixed an off-by-one error in the palette index checking function.
-  Fixed a compiler warning under Cygwin (Windows-7, 32-bit system)
-  Revised example.c to put text strings in a temporary character array
-    instead of directly assigning string constants to png_textp members.
-    This avoids compiler warnings when -Wwrite-strings is enabled.
-  Added output flushing to aid debugging under Visual Studio. Unfortunately
-    this is necessary because the VS2010 output window otherwise simply loses
-    the error messages on error (they weren't flushed to the window before
-    the process exited, apparently!)
-  Added configuration support for benign errors and changed the read
-    default. Also changed some warnings in the iCCP and sRGB handling
-    from to benign errors. Configuration now makes read benign
-    errors warnings and write benign errors to errors by default (thus
-    changing the behavior on read).  The simplified API always forces
-    read benign errors to warnings (regardless of the system default, unless
-    this is disabled in which case the simplified API can't be built.)
-
-Version 1.6.0beta19 [March 18, 2012]
-  Work around for duplicate row start calls; added warning messages.
-    This turns on PNG_FLAG_DETECT_UNINITIALIZED to detect app code that
-    fails to call one of the 'start' routines (not enabled in libpng-1.5
-    because it is technically an API change, since it did normally work
-    before.)  It also makes duplicate calls to png_read_start_row (an
-    internal function called at the start of the image read) benign, as
-    they were before changes to use png_inflate_claim. Somehow webkit is
-    causing this to happen; this is probably a mis-feature in the zlib
-    changes so this commit is only a work-round.
-  Removed erroneous setting of DETECT_UNINITIALIZED and added more
-    checks. The code now does a png_error if an attempt is made to do the
-    row initialization twice; this is an application error and it has
-    serious consequences because the transform data in png_struct is
-    changed by each call.
-  Added application error reporting and added chunk names to read
-    benign errors; also added --strict to pngstest - not enabled
-    yet because a warning is produced.
-  Avoid the double gamma correction warning in the simplified API.
-    This allows the --strict option to pass in the pngstest checks
-
-Version 1.6.0beta20 [March 29, 2012]
-  Changed chunk handler warnings into benign errors, incrementally load iCCP
-  Added checksum-icc.c to contrib/tools
-  Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice.
-  Recognize known sRGB ICC profiles while reading; prefer writing the
-    iCCP profile over writing the sRGB chunk, controlled by the
-    PNG_sRGB_PROFILE_CHECKS option.
-  Revised png_set_text_2() to avoid potential memory corruption (fixes
-    CVE-2011-3048, also known as CVE-2012-3425).
-
-Version 1.6.0beta21 [April 27, 2012]
-  Revised scripts/makefile.darwin: use system zlib; remove quotes around
-    architecture list; add missing ppc architecture; add architecture options
-    to shared library link; don't try to create a shared lib based on missing
-    RELEASE variable.
-  Enable png_set_check_for_invalid_index() for both read and write.
-  Removed #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED in pngpriv.h around
-    declaration of png_handle_unknown().
-  Added -lssp_nonshared in a comment in scripts/makefile.freebsd
-    and changed deprecated NOOBJ and NOPROFILE to NO_OBJ and NO_PROFILE.
-
-Version 1.6.0beta22 [May 23, 2012]
-  Removed need for -Wno-cast-align with clang.  clang correctly warns on
-    alignment increasing pointer casts when -Wcast-align is passed. This
-    fixes the cases that clang warns about either by eliminating the
-    casts from png_bytep to png_uint_16p (pngread.c), or, for pngrutil.c
-    where the cast is previously verified or pngstest.c where it is OK, by
-    introducing new png_aligncast macros to do the cast in a way that clang
-    accepts.
-
-Version 1.6.0beta23 [June 6, 2012]
-  Revised CMakeLists.txt to not attempt to make a symlink under mingw.
-  Made fixes for new optimization warnings from gcc 4.7.0. The compiler
-    performs an optimization which is safe; however it then warns about it.
-    Changing the type of 'palette_number' in pngvalid.c removes the warning.
-  Do not depend upon a GCC feature macro being available for use in generating
-    the linker mapfile symbol prefix.
-  Improved performance of new do_check_palette_indexes() function (only
-    update the value when it actually increases, move test for whether
-    the check is wanted out of the function.
-
-Version 1.6.0beta24 [June 7, 2012]
-  Don't check palette indexes if num_palette is 0 (as it can be in MNG files).
-
-Version 1.6.0beta25 [June 16, 2012]
-  Revised png_set_keep_unknown_chunks() so num_chunks < 0 means ignore all
-    unknown chunks and all known chunks except for IHDR, PLTE, tRNS, IDAT,
-    and IEND.  Previously it only meant ignore all unknown chunks, the
-    same as num_chunks == 0. Revised png_image_skip_unused_chunks() to
-    provide a list of chunks to be processed instead of a list of chunks to
-    ignore.  Revised contrib/gregbook/readpng2.c accordingly.
-
-Version 1.6.0beta26 [July 10, 2012]
-  Removed scripts/makefile.cegcc from the *.zip and *.7z distributions; it
-    depends on configure, which is not included in those archives.
-  Moved scripts/chkfmt to contrib/tools.
-  Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386.
-
-Version 1.6.0beta27 [August 11, 2012]
-  Do not compile PNG_DEPRECATED, PNG_ALLOC and PNG_PRIVATE when __GNUC__ < 3.
-  Do not use __restrict when GNUC is <= 3.1
-  Removed references to png_zalloc() and png_zfree() from the manual.
-  Fixed configurations where floating point is completely disabled.  Because
-    of the changes to support symbol prefixing PNG_INTERNAL_FUNCTION declares
-    floating point APIs during libpng builds even if they are completely
-    disabled. This requires the png floating point types (png_double*) to be
-    declared even though the functions are never actually defined.  This
-    change provides a dummy definition so that the declarations work, yet any
-    implementation will fail to compile because of an incomplete type.
-  Re-eliminated the use of strcpy() in pngtest.c.  An unncessary use of
-    strcpy() was accidentally re-introduced in libpng16; this change replaces
-    it with strncpy().
-  Eliminated use of png_sizeof(); use sizeof() instead.
-  Use a consistent style for (sizeof type) and (sizeof (array))
-  Cleanup of png_set_filler().  This function does very different things on
-    read and write.  In libpng 1.6 the two cases can be distinguished and
-    considerable code cleanup, and extra error checking, is possible.  This
-    makes calls on the write side that have no effect be ignored with a
-    png_app_error(), which can be disabled in the app using
-    png_set_benign_errors(), and removes the spurious use of usr_channels
-    on the read side.
-  Insist on autotools 1.12.1 for git builds because there are security issues
-    with 1.12 and insisting on anything less would allow 1.12 to be used.
-  Removed info_ptr->signature[8] from WRITE-only builds.
-  Add some conditions for compiling png_fixed().  This is a small function
-    but it requires "-lm" on some platforms.
-  Cause pngtest --strict to fail on any warning from libpng (not just errors)
-    and cause it not to fail at the comparison step if libpng lacks support
-    for writing chunks that it reads from the input (currently only implemented
-    for compressed text chunks).
-  Make all three "make check" test programs work without READ or WRITE support.
-    Now "make check" will succeed even if libpng is compiled with -DPNG_NO_READ
-    or -DPNG_NO_WRITE.  The tests performed are reduced, but the basic reading
-    and writing of a PNG file is always tested by one or more of the tests.
-  Consistently use strlen(), memset(), memcpy(), and memcmp() instead of the
-    png_strlen(), png_memset(), png_memcpy(), and png_memcmp() macros.
-  Removed the png_sizeof(), png_strlen(), png_memset(), png_memcpy(), and
-    png_memcmp() macros.
-  Work around gcc 3.x and Microsoft Visual Studio 2010 complaints. Both object
-    to the split initialization of num_chunks.
-
-Version 1.6.0beta28 [August 29, 2012]
-  Unknown handling fixes and clean up. This adds more correct option
-    control of the unknown handling, corrects the pre-existing bug where
-    the per-chunk 'keep' setting is ignored and makes it possible to skip
-    IDAT chunks in the sequential reader (broken in earlier 1.6 versions).
-    There is a new test program, test-unknown.c, which is a work in progress
-    (not currently part of the test suite).  Comments in the header files now
-    explain how the unknown handling works.
-  Allow fine grain control of unknown chunk APIs. This change allows
-    png_set_keep_unknown_chunks() to be turned off if not required and causes
-    both read and write to behave appropriately (on read this is only possible
-    if the user callback is used to handle unknown chunks).  The change
-    also removes the support for storing unknown chunks in the info_struct
-    if the only unknown handling enabled is via the callback, allowing libpng
-    to be configured with callback reading and none of the unnecessary code.
-  Corrected fix for unknown handling in pngtest. This reinstates the
-    libpng handling of unknown chunks other than vpAg and sTER (including
-    unsafe-to-copy chunks which were dropped before) and eliminates the
-    repositioning of vpAg and sTER in pngtest.png by changing pngtest.png
-    (so the chunks are where libpng would put them).
-  Added "tunknown" test and corrected a logic error in png_handle_unknown()
-    when SAVE support is absent.  Moved the shell test scripts for
-    contrib/libtests from the libpng top directory to contrib/libtests.
-    png_handle_unknown() must always read or skip the chunk, if
-    SAVE_UNKNOWN_CHUNKS is turned off *and* the application does not set
-    a user callback an unknown chunk will not be read, leading to a read
-    error, which was revealed by the "tunknown" test.
-  Cleaned up and corrected ICC profile handling.
-    contrib/libtests/makepng: corrected 'rgb' and 'gray' cases.  profile_error
-    messages could be truncated; made a correct buffer size calculation and
-    adjusted pngerror.c appropriately. png_icc_check_* checking improved;
-    changed the functions to receive the correct color type of the PNG on read
-    or write and check that it matches the color space of the profile (despite
-    what the comments said before, there is danger in assuming the app will
-    cope correctly with an RGB profile on a grayscale image and, since it
-    violates the PNG spec, allowing it is certain to produce inconsistent
-    app behavior and might even cause app crashes.) Check that profiles
-    contain the tags needed to process the PNG (tags all required by the ICC
-    spec). Removed unused PNG_STATIC from pngpriv.h.
-
-Version 1.6.0beta29 [September 4, 2012]
-  Fixed the simplified API example programs to add the *colormap parameter
-    to several of he API and improved the error message if the version field
-    is not set.
-  Added contrib/examples/* to the *.zip and *.7z distributions.
-  Updated simplified API synopses and description of the png_image structure
-    in the manual.
-  Made makepng and pngtest produce identical PNGs, add "--relaxed" option
-    to pngtest. The "--relaxed" option turns off the benign errors that are
-    enabled by default in pre-RC builds. makepng can now write ICC profiles
-    where the length has not been extended to a multiple of 4, and pngtest
-    now intercepts all libpng errors, allowing the previously-introduced
-    "--strict test" on no warnings to actually work.
-  Improved ICC profile handling including cHRM chunk generation and fixed
-    Cygwin+MSVC build errors. The ICC profile handling now includes more
-    checking.  Several errors that caused rejection of the profile are now
-    handled with a warning in such a way that the invalid profiles will be
-    read by default in release (but not pre-RC) builds but will not be
-    written by default.  The easy part of handling the cHRM chunk is written,
-    where the ICC profile contains the required data.  The more difficult
-    part plus guessing a gAMA value requires code to pass selected RGB values
-    through the profile.
-
-Version 1.6.0beta30 [October 24, 2012]
-  Changed ICC profile matrix/vector types to not depend on array type rules.
-    By the ANSI-C standard the new types should be identical to the previous
-    versions, and all known versions of gcc tested with the previous versions
-    except for GCC-4.2.1 work with this version.  The change makes the ANSI-C
-    rule that const applied to an array of elements applies instead to the
-    elements in the array moot by explicitly applying const to the base
-    elements of the png_icc_matrix and png_icc_vector types. The accidental
-    (harmless) 'const' previously applied to the parameters of two of the
-    functions have also been removed.
-  Added a work around for GCC 4.2 optimization bug.
-  Marked the broken (bad white point) original HP sRGB profiles correctly and
-    correct comments.
-  Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7
-  Use /MDd for vstudio debug builds. Also added pngunkown to the vstudio
-    builds, fixed build errors and corrected a minor exit code error in
-    pngvalid if the 'touch' file name is invalid.
-  Add updated WARNING file to projects/vstudio from libpng 1.5/vstudio
-  Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in
-    pngrtran.c (Domani Hannes).
-
-Version 1.6.0beta31 [November 1, 2012]
-  Undid the erroneous change to vstudio/pngvalid build in libpng-1.6.0beta30.
-  Made pngvalid so that it will build outside the libpng source tree.
-  Made builds -DPNG_NO_READ_GAMMA compile (the unit tests still fail).
-  Made PNG_NO_READ_GAMMA switch off interfaces that depend on READ_GAMMA.
-    Prior to 1.6.0 switching off READ_GAMMA did unpredictable things to the
-    interfaces that use it (specifically, png_do_background in 1.4 would
-    simply display composite for grayscale images but do composition
-    with the incorrect arithmetic for color ones). In 1.6 the semantic
-    of -DPNG_NO_READ_GAMMA is changed to simply disable any interface that
-    depends on it; this obliges people who set it to consider whether they
-    really want it off if they happen to use any of the interfaces in
-    question (typically most users who disable it won't).
-  Fixed GUIDs in projects/vstudio. Some were duplicated or missing,
-    resulting in VS2010 having to update the files.
-  Removed non-working ICC profile support code that was mostly added to
-    libpng-1.6.0beta29 and beta30. There was too much code for too little
-    gain; implementing full ICC color correction may be desireable but is left
-    up to applications.
-
-Version 1.6.0beta32 [November 25, 2012]
-  Fixed an intermittent SEGV in pngstest due to an uninitialized array element.
-  Added the ability for contrib/libtests/makepng.c to make a PNG with just one
-    color. This is useful for debugging pngstest color inaccuracy reports.
-  Fixed error checking in the simplified write API (Olaf van der Spek)
-  Made png_user_version_check() ok to use with libpng version 1.10.x and later.
-
-Version 1.6.0beta33 [December 15, 2012]
-  Fixed typo in png.c (PNG_SET_CHUNK_MALLOC_MAX should be PNG_CHUNK_MALLOC_MAX)
-    that causes the MALLOC_MAX limit not to work (John Bowler)
-  Change png_warning() to png_app_error() in pngwrite.c and comment the
-    fall-through condition.
-  Change png_warning() to png_app_warning() in png_write_tRNS().
-  Rearranged the ARM-NEON optimizations: Isolated the machine specific code
-    to the hardware subdirectory and added comments to pngrutil.c so that
-    implementors of other optimizations know what to do.
-  Fixed cases of unquoted DESTDIR in Makefile.am
-  Rebuilt Makefile.in, etc., with autoconf-2.69 and automake-1.12.5.
-
-Version 1.6.0beta34 [December 19, 2012]
-  Cleaned up whitespace in the synopsis portion of the manpage "libpng.3"
-  Disassembled the version number in scripts/options.awk (necessary for
-    building on SunOs).
-
-Version 1.6.0beta35 [December 23, 2012]
-  Made default Zlib compression settings be configurable. This adds #defines to
-    pnglibconf.h to control the defaults.
-  Fixed Windows build issues, enabled ARM compilation. Various warnings issued
-    by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old
-    GCCs.) ARM support is enabled by default in zlib.props (unsupported by
-    Microsoft) and ARM compilation is made possible by deleting the check for
-    x86. The test programs cannot be run because they are not signed.
-
-Version 1.6.0beta36 [January 2, 2013]
-  Discontinued distributing libpng-1.x.x.tar.bz2.
-  Discontinued distributing libpng-1.7.0-1.6.0-diff.txt and similar.
-  Rebuilt configure with autoconf-2.69 (inadvertently not done in beta33)
-  Fixed 'make distcheck' on SUN OS - libpng.so was not being removed
-
-Version 1.6.0beta37 [January 10, 2013]
-  Fixed conceivable but difficult to repro overflow. Also added two test
-    programs to generate and test a PNG which should have the problem.
-
-Version 1.6.0beta39 [January 19, 2013]
-  Again corrected attempt at overflow detection in png_set_unknown_chunks()
-  (CVE-2013-7353).  Added overflow detection in png_set_sPLT() and
-  png_set_text_2() (CVE-2013-7354).
-
-Version 1.6.0beta40 [January 20, 2013]
-  Use consistent handling of overflows in text, sPLT and unknown png_set_* APIs
-
-Version 1.6.0rc01 [January 26, 2013]
-  No changes.
-
-Version 1.6.0rc02 [February 4, 2013]
-  Added png_get_palette_max() function.
-
-Version 1.6.0rc03 [February 5, 2013]
-  Fixed the png_get_palette_max API.
-
-Version 1.6.0rc04 [February 7, 2013]
-  Turn serial tests back on (recently turned off by autotools upgrade).
-
-Version 1.6.0rc05 [February 8, 2013]
-  Update manual about png_get_palette_max().
-
-Version 1.6.0rc06 [February 9, 2013]
-  Fixed missing dependency in --prefix builds The intermediate
-    internal 'prefix.h' file can only be generated correctly after
-    pnglibconf.h, however the dependency was not in Makefile.am.  The
-    symptoms are unpredictable depending on the order make chooses to
-    build pngprefix.h and pnglibconf.h, often the error goes unnoticed
-    because there is a system pnglibconf.h to use instead.
-
-Version 1.6.0rc07 [February 10, 2013]
-  Enclosed the new png_get_palette_max in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
-    block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.
-
-Version 1.6.0rc08 [February 10, 2013]
-  Fix typo in png.h #ifdef
-
-Version 1.6.0 [February 14, 2013]
-  No changes.
-
-Version 1.6.1beta01 [February 16, 2013]
-  Made symbol prefixing work with the ARM neon optimizations. Also allow
-    pngpriv.h to be included for preprocessor definitions only, so it can
-    be used in non-C/C++ files. Back ported from libpng 1.7.
-  Made sRGB check numbers consistent.
-  Ported libpng 1.5 options.awk/dfn file handling to 1.6, fixed one bug.
-  Removed cc -E workround, corrected png_get_palette_max API Tested on
-    SUN OS cc 5.9, which demonstrates the tokenization problem previously
-    avoided by using /lib/cpp.  Since all .dfn output is now protected in
-    double quotes unless it is to be macro substituted the fix should
-    work everywhere.
-  Enabled parallel tests - back ported from libpng-1.7.
-  scripts/pnglibconf.dfa formatting improvements back ported from libpng17.
-  Fixed a race condition in the creation of the build 'scripts' directory
-    while building with a parallel make.
-  Use approved/supported Android method to check for NEON, use Linux/POSIX
-    1003.1 API to check /proc/self/auxv avoiding buffer allocation and other
-    library calls (ported from libpng15).
-
-Version 1.6.1beta02 [February 19, 2013]
-  Use parentheses more consistently in "#if defined(MACRO)" tests.
-  Folded long lines.
-  Reenabled code to allow zero length PLTE chunks for MNG.
-
-Version 1.6.1beta03 [February 22, 2013]
-  Fixed ALIGNED_MEMORY support.
-  Allow run-time ARM NEON checking to be disabled. A new configure option:
-    --enable-arm-neon=always will stop the run-time checks. New checks
-    within arm/arm_init.c will cause the code not to be compiled unless
-    __ARM_NEON__ is set. This should make it fail safe (if someone asks
-    for it on then the build will fail if it can't be done.)
-  Updated the INSTALL document.
-
-Version 1.6.1beta04 [February 27, 2013]
-  Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
-  Revised scripts/makefile.freebsd to respect ZLIBLIB and ZLIBINC.
-  Revised scripts/dfn.awk to work with the buggy MSYS awk that has trouble
-    with CRLF line endings.
-
-Version 1.6.1beta05 [March 1, 2013]
-  Avoid a possible memory leak in contrib/gregbook/readpng.c
-
-Version 1.6.1beta06 [March 4, 2013]
-  Better documentation of unknown handling API interactions.
-  Corrected Android builds and corrected libpng.vers with symbol
-    prefixing. This adds an API to set optimization options externally,
-    providing an alternative and general solution for the non-portable
-    run-time tests used by the ARM Neon code.  It also makes those tests
-    compile and link on Android.
-  The order of settings vs options in pnglibconf.h is reversed to allow
-    settings to depend on options and options can now set (or override) the
-    defaults for settings.
-
-Version 1.6.1beta07 [March 7, 2013]
-  Corrected simplified API default gamma for color-mapped output, added
-    a flag to change default. In 1.6.0 when the simplified API was used
-    to produce color-mapped output from an input image with no gamma
-    information the gamma assumed for the input could be different from
-    that assumed for non-color-mapped output.  In particular 16-bit depth
-    input files were assumed to be sRGB encoded, whereas in the 'direct'
-    case they were assumed to have linear data.  This was an error.  The
-    fix makes the simplified API treat all input files the same way and
-    adds a new flag to the png_image::flags member to allow the
-    application/user to specify that 16-bit files contain sRGB data
-    rather than the default linear.
-  Fixed bugs in the pngpixel and makepng test programs.
-
-Version 1.6.1beta08 [March 7, 2013]
-  Fixed CMakelists.txt to allow building a single variant of the library
-    (Claudio Bley):
-  Introduced a PNG_LIB_TARGETS variable that lists all activated library
-    targets.  It is an error if this variable ends up empty, ie. you have
-    to build at least one library variant.
-  Made the *_COPY targets only depend on library targets actually being build.
-  Use PNG_LIB_TARGETS to unify a code path.
-  Changed the CREATE_SYMLINK macro to expect the full path to a file as the
-    first argument. When symlinking the filename component of that path is
-    determined and used as the link target.
-  Use copy_if_different in the CREATE_SYMLINK macro.
-
-Version 1.6.1beta09 [March 13, 2013]
-  Eliminated two warnings from the Intel C compiler. The warnings are
-    technically valid, although a reasonable treatment of division would
-    show it to be incorrect.
-
-Version 1.6.1rc01 [March 21, 2013]
-  No changes.
-
-Version 1.6.1 [March 28, 2013]
-  No changes.
-
-Version 1.6.2beta01 [April 14, 2013]
-  Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk handling.
-  Fixed incorrect warning of excess deflate data. End condition - the
-    warning would be produced if the end of the deflate stream wasn't read
-    in the last row.  The warning is harmless.
-  Corrected the test on user transform changes on read. It was in the
-    png_set of the transform function, but that doesn't matter unless the
-    transform function changes the rowbuf size, and that is only valid if
-    transform_info is called.
-  Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
-    (Flavio Medeiros).
-  Corrected length written to uncompressed iTXt chunks (Samuli Suominen).
-    Bug was introduced in libpng-1.6.0.
-
-Version 1.6.2rc01 [April 18, 2013]
-  Added contrib/tools/fixitxt.c, to repair the erroneous iTXt chunk length
-    written by libpng-1.6.0 and 1.6.1.
-  Disallow storing sRGB information when the sRGB is not supported.
-
-Version 1.6.2rc02 [April 18, 2013]
-  Merge pngtest.c with libpng-1.7.0
-
-Version 1.6.2rc03 [April 22, 2013]
-  Trivial spelling cleanup.
-
-Version 1.6.2rc04 and 1.6.2rc05 [omitted]
-
-Version 1.6.2rc06 [April 24, 2013]
-  Reverted to version 1.6.2rc03.  Recent changes to arm/neon support
-    have been ported to libpng-1.7.0beta09 and will reappear in version
-    1.6.3beta01.
-
-Version 1.6.2 [April 25, 2013]
-  No changes.
-
-Version 1.6.3beta01 [April 25, 2013]
-  Revised stack marking in arm/filter_neon.S and configure.ac.
-  Ensure that NEON filter stuff is completely disabled when switched 'off'.
-    Previously the ARM NEON specific files were still built if the option
-    was switched 'off' as opposed to being explicitly disabled.
-
-Version 1.6.3beta02 [April 26, 2013]
-  Test for 'arm*' not just 'arm' in the host_cpu configure variable.
-  Rebuilt the configure scripts.
-
-Version 1.6.3beta03 [April 30, 2013]
-  Expanded manual paragraph about writing private chunks, particularly
-    the need to call png_set_keep_unknown_chunks() when writing them.
-  Avoid dereferencing NULL pointer possibly returned from
-     png_create_write_struct() (Andrew Church).
-
-Version 1.6.3beta05 [May 9, 2013]
-  Calculate our own zlib windowBits when decoding rather than trusting the
-    CMF bytes in the PNG datastream.
-  Added an option to force maximum window size for inflating, which was
-    the behavior of libpng15 and earlier.
-  Added png-fix-itxt and png-fix-too-far-back to the built programs and
-    removed warnings from the source code and timepng that are revealed as
-    a result.
-  Detect wrong libpng versions linked to png-fix-too-far-back, which currently
-    only works with libpng versions that can be made to reliably fail when
-    the deflate data contains an out-of-window reference.  This means only
-    1.6 and later.
-  Fixed gnu issues: g++ needs a static_cast, gcc 4.4.7 has a broken warning
-    message which it is easier to work round than ignore.
-  Updated contrib/pngminus/pnm2png.c (Paul Stewart):
-    Check for EOF
-    Ignore "#" delimited comments in input file to pnm2png.c.
-    Fixed whitespace handling
-    Added a call to png_set_packing()
-    Initialize dimension values so if sscanf fails at least we have known
-      invalid values.
-  Attempt to detect configuration issues with png-fix-too-far-back, which
-    requires both the correct libpng and the correct zlib to function
-    correctly.
-  Check ZLIB_VERNUM for mismatches, enclose #error in quotes
-  Added information in the documentation about problems with and fixes for
-    the bad CRC and bad iTXt chunk situations.
-
-Version 1.6.3beta06 [May 12, 2013]
-  Allow contrib/pngminus/pnm2png.c to compile without WRITE_INVERT and
-    WRITE_PACK supported (writes error message that it can't read P1 or
-    P4 PBM files).
-  Improved png-fix-too-far-back usage message, added --suffix option.
-  Revised contrib/pngminim/*/makefile to generate pnglibconf.h with the
-    right zlib header files.
-  Separated CPPFLAGS and CFLAGS in contrib/pngminim/*/makefile
-
-Version 1.6.3beta07 [June 8, 2013]
-  Removed a redundant test in png_set_IHDR().
-  Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt (Andrew Hundt)
-  Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt
-  Enclose the prototypes for the simplified write API in
-    #ifdef PNG_STDIO_SUPPORTED/#endif
-  Make ARM NEON support work at compile time (not just configure time).
-    This moves the test on __ARM_NEON__ into pngconf.h to avoid issues when
-    using a compiler that compiles for multiple architectures at one time.
-  Removed PNG_FILTER_OPTIMIZATIONS and PNG_ARM_NEON_SUPPORTED from
-    pnglibconf.h, allowing more of the decisions to be made internally
-    (pngpriv.h) during the compile.  Without this, symbol prefixing is broken
-    under certain circumstances on ARM platforms.  Now only the API parts of
-    the optimizations ('check' vs 'api') are exposed in the public header files
-    except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
-    decision about whether or not to use the optimizations.
-  Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
-    Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
-    on __ARM_NEON__ from configure time to compile time.  This breaks symbol
-    prefixing because the definition of the special png_init_filter_functions
-    call was hidden at configure time if the relevant compiler arguments are
-    passed in CFLAGS as opposed to CC.  This change attempts to avoid all
-    the confusion that would result by declaring the init function even when
-    it is not used, so that it will always get prefixed.
-
-Version 1.6.3beta08 [June 18, 2013]
-  Revised libpng.3 so that "doclifter" can process it.
-
-Version 1.6.3beta09 [June 27, 2013]
-  Revised example.c to illustrate use of PNG_DEFAULT_sRGB and PNG_GAMMA_MAC_18
-    as parameters for png_set_gamma().  These have been available since
-    libpng-1.5.4.
-  Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c and revised it
-    to check all compressed chunks known to libpng.
-
-Version 1.6.3beta10 [July 5, 2013]
-  Updated documentation to show default behavior of benign errors correctly.
-  Only compile ARM code when PNG_READ_SUPPORTED is defined.
-  Fixed undefined behavior in contrib/tools/pngfix.c and added new strip
-    option. pngfix relied on undefined behavior and even a simple change from
-    gcc to g++ caused it to fail.  The new strip option 'unsafe' has been
-    implemented and is the default if --max is given.  Option names have
-    been clarified, with --strip=transform now stripping the bKGD chunk,
-    which was stripped previously with --strip=unused.
-  Added all documented chunk types to pngpriv.h
-  Unified pngfix.c source with libpng17.
-
-Version 1.6.3rc01 [July 11, 2013]
-  No changes.
-
-Version 1.6.3 [July 18, 2013]
-  Revised manual about changes in iTXt chunk handling made in libpng-1.6.0.
-  Added "/* SAFE */" comments in pngrutil.c and pngrtran.c where warnings
-    may be erroneously issued by code-checking applications.
-
-Version 1.6.4beta01 [August 21, 2013]
-  Added information about png_set_options() to the manual.
-  Delay calling png_init_filter_functions() until a row with nonzero filter
-    is found.
-
-Version 1.6.4beta02 [August 30, 2013]
-  Fixed inconsistent conditional compilation of png_chunk_unknown_handling()
-    prototype, definition, and usage.  Made it depend on
-    PNG_HANDLE_AS_UNKNOWN_SUPPORTED everywhere.
-
-Version 1.6.4rc01 [September 5, 2013]
-  No changes.
-
-Version 1.6.4 [September 12, 2013]
-  No changes.
-
-Version 1.6.5 [September 14, 2013]
-  Removed two stray lines of code from arm/arm_init.c.
-
-Version 1.6.6 [September 16, 2013]
-  Removed two stray lines of code from arm/arm_init.c, again.
-
-Version 1.6.7beta01 [September 30, 2013]
-  Revised unknown chunk code to correct several bugs in the NO_SAVE_/NO_WRITE
-    combination
-  Allow HANDLE_AS_UNKNOWN to work when other options are configured off. Also
-    fixed the pngminim makefiles to work when $(MAKEFLAGS) contains stuff
-    which terminates the make options (as by default in recent versions of
-    Gentoo).
-  Avoid up-cast warnings in pngvalid.c. On ARM the alignment requirements of
-    png_modifier are greater than that of png_store and as a consequence
-    compilation of pngvalid.c results in a warning about increased alignment
-    requirements because of the bare cast to (png_modifier*). The code is safe,
-    because the pointer is known to point to a stack allocated png_modifier,
-    but this change avoids the warning.
-  Fixed default behavior of ARM_NEON_API. If the ARM NEON API option was
-    compiled without the CHECK option it defaulted to on, not off.
-  Check user callback behavior in pngunknown.c. Previous versions compiled
-    if SAVE_UNKNOWN was not available but did nothing since the callback
-    was never implemented.
-  Merged pngunknown.c with 1.7 version and back ported 1.7 improvements/fixes
-
-Version 1.6.7beta02 [October 12, 2013]
-  Made changes for compatibility with automake 1.14:
-    1) Added the 'compile' program to the list of programs that must be cleaned
-       in autogen.sh
-    2) Added 'subdir-objects' which causes .c files in sub-directories to be
-       compiled such that the corresponding .o files are also in the
-       sub-directory.  This is because automake 1.14 warns that the
-       current behavior of compiling to the top level directory may be removed
-       in the future.
-    3) Updated dependencies on pnglibconf.h to match the new .o locations and
-       added all the files in contrib/libtests and contrib/tools that depend
-       on pnglibconf.h
-    4) Added 'BUILD_SOURCES = pnglibconf.h'; this is the automake recommended
-       way of handling the dependencies of sources that are machine generated;
-       unfortunately it only works if the user does 'make all' or 'make check',
-       so the dependencies (3) are still required.
-  Cleaned up (char*) casts of zlib messages. The latest version of the Intel C
-    compiler complains about casting a string literal as (char*), so copied the
-    treatment of z_const from the library code into pngfix.c
-  Simplified error message code in pngunknown. The simplification has the
-    useful side effect of avoiding a bogus warning generated by the latest
-    version of the Intel C compiler (it objects to
-    condition ? string-literal : string-literal).
-  Make autogen.sh work with automake 1.13 as well as 1.14. Do this by always
-    removing the 1.14 'compile' script but never checking for it.
-
-Version 1.6.7beta03 [October 19, 2013]
-  Added ARMv8 support (James Yu <james.yu at linaro.org>).  Added file
-    arm/filter_neon_intrinsics.c; enable with -mfpu=neon.
-  Revised pngvalid to generate size images with as many filters as it can
-    manage, limited by the number of rows.
-  Cleaned up ARM NEON compilation handling. The tests are now in pngpriv.h
-    and detect the broken GCC compilers.
-
-Version 1.6.7beta04 [October 26, 2013]
-  Allow clang derived from older GCC versions to use ARM intrinsics. This
-    causes all clang builds that use -mfpu=neon to use the intrinsics code,
-    not the assembler code.  This has only been tested on iOS 7. It may be
-    necessary to exclude some earlier clang versions but this seems unlikely.
-  Changed NEON implementation selection mechanism. This allows assembler
-    or intrinsics to be turned on at compile time during the build by defining
-    PNG_ARM_NEON_IMPLEMENTATION to the correct value (2 or 1).  This macro
-    is undefined by default and the build type is selected in pngpriv.h.
-
-Version 1.6.7rc01 [November 2, 2013]
-  No changes.
-
-Version 1.6.7rc02 [November 7, 2013]
-  Fixed #include in filter_neon_intrinsics.c and ctype macros. The ctype char
-    checking macros take an unsigned char argument, not a signed char.
-
-Version 1.6.7 [November 14, 2013]
-  No changes.
-
-Version 1.6.8beta01 [November 24, 2013]
-  Moved prototype for png_handle_unknown() in pngpriv.h outside of
-    the #ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED/#endif block.
-  Added "-Wall" to CFLAGS in contrib/pngminim/*/makefile
-  Conditionally compile some unused functions reported by -Wall in
-    pngminim.
-  Fixed 'minimal' builds. Various obviously useful minimal configurations
-    don't build because of missing contrib/libtests test programs and
-    overly complex dependencies in scripts/pnglibconf.dfa. This change
-    adds contrib/conftest/*.dfa files that can be used in automatic build
-    scripts to ensure that these configurations continue to build.
-  Enabled WRITE_INVERT and WRITE_PACK in contrib/pngminim/encoder.
-  Fixed pngvalid 'fail' function declaration on the Intel C Compiler.
-    This reverts to the previous 'static' implementation and works round
-    the 'unused static function' warning by using PNG_UNUSED().
-
-Version 1.6.8beta02 [November 30, 2013]
-  Removed or marked PNG_UNUSED some harmless "dead assignments" reported
-    by clang scan-build.
-  Changed tabs to 3 spaces in png_debug macros and changed '"%s"m'
-    to '"%s" m' to improve portability among compilers.
-  Changed png_free_default() to free() in pngtest.c
-
-Version 1.6.8rc01 [December 12, 2013]
-  Tidied up pngfix inits and fixed pngtest no-write builds.
-
-Version 1.6.8rc02 [December 14, 2013]
-  Handle zero-length PLTE chunk or NULL palette with png_error()
-    instead of png_chunk_report(), which by default issues a warning
-    rather than an error, leading to later reading from a NULL pointer
-    (png_ptr->palette) in png_do_expand_palette(). This is CVE-2013-6954
-    and VU#650142.  Libpng-1.6.1 through 1.6.7 are vulnerable.
-    Libpng-1.6.0 and earlier do not have this bug.
-
-Version 1.6.8 [December 19, 2013]
-  No changes.
-
-Version 1.6.9beta01 [December 26, 2013]
-  Bookkeeping: Moved functions around (no changes). Moved transform
-    function definitions before the place where they are called so that
-    they can be made static. Move the intrapixel functions and the
-    grayscale palette builder out of the png?tran.c files. The latter
-    isn't a transform function and is no longer used internally, and the
-    former MNG specific functions are better placed in pngread/pngwrite.c
-  Made transform implementation functions static. This makes the internal
-    functions called by png_do_{read|write}_transformations static. On an
-    x86-64 DLL build (Gentoo Linux) this reduces the size of the text
-    segment of the DLL by 1208 bytes, about 0.6%. It also simplifies
-    maintenance by removing the declarations from pngpriv.h and allowing
-    easier changes to the internal interfaces.
-  Rebuilt configure scripts with automake-1.14.1 and autoconf-2.69
-    in the tar distributions.
-
-Version 1.6.9beta02 [January 1, 2014]
-  Added checks for libpng 1.5 to pngvalid.c.  This supports the use of
-    this version of pngvalid in libpng 1.5
-  Merged with pngvalid.c from libpng-1.7 changes to create a single
-    pngvalid.c
-  Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner).
-  Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c with libpng-1.7.0
-  Merged libpng-1.7.0 changes to make no-interlace configurations work
-    with test programs.
-  Revised pngvalid.c to support libpng 1.5, which does not support the
-    PNG_MAXIMUM_INFLATE_WINDOW option, so #define it out when appropriate in
-    pngvalid.c
-  Allow unversioned links created on install to be disabled in configure.
-    In configure builds 'make install' changes/adds links like png.h
-    and libpng.a to point to the newly installed, versioned, files (e.g.
-    libpng17/png.h and libpng17.a). Three new configure options and some
-    rearrangement of Makefile.am allow creation of these links to be disabled.
-
-Version 1.6.9beta03 [January 10, 2014]
-  Removed potentially misleading warning from png_check_IHDR().
-
-Version 1.6.9beta04 [January 20, 2014]
-  Updated scripts/makefile.* to use CPPFLAGS (Cosmin).
-  Added clang attribute support (Cosmin).
-
-Version 1.6.9rc01 [January 28, 2014]
-  No changes.
-
-Version 1.6.9rc02 [January 30, 2014]
-  Quiet an uninitialized memory warning from VC2013 in png_get_png().
-
-Version 1.6.9 [February 6, 2014]
-
-Version 1.6.10beta01 [February 9, 2014]
-  Backported changes from libpng-1.7.0beta30 and beta31:
-  Fixed a large number of instances where PNGCBAPI was omitted from
-    function definitions.
-  Added pngimage test program for png_read_png() and png_write_png()
-    with two new test scripts.
-  Removed dependence on !PNG_READ_EXPAND_SUPPORTED for calling
-    png_set_packing() in png_read_png().
-  Fixed combination of ~alpha with shift. On read invert alpha, processing
-    occurred after shift processing, which causes the final values to be
-    outside the range that should be produced by the shift. Reversing the
-    order on read makes the two transforms work together correctly and mirrors
-    the order used on write.
-  Do not read invalid sBIT chunks. Previously libpng only checked sBIT
-    values on write, so a malicious PNG writer could therefore cause
-    the read code to return an invalid sBIT chunk, which might lead to
-    application errors or crashes.  Such chunks are now skipped (with
-    chunk_benign_error).
-  Make png_read_png() and png_write_png() prototypes in png.h depend
-    upon PNG_READ_SUPPORTED and PNG_WRITE_SUPPORTED.
-  Support builds with unsupported PNG_TRANSFORM_* values.  All of the
-    PNG_TRANSFORM_* values are always defined in png.h and, because they
-    are used for both read and write in some cases, it is not reliable
-    to #if out ones that are totally unsupported. This change adds error
-    detection in png_read_image() and png_write_image() to do a
-    png_app_error() if the app requests something that cannot be done
-    and it adds corresponding code to pngimage.c to handle such options
-    by not attempting to test them.
-
-Version 1.6.10beta02 [February 23, 2014]
-  Moved redefines of png_error(), png_warning(), png_chunk_error(),
-    and png_chunk_warning() from pngpriv.h to png.h to make them visible
-    to libpng-calling applications.
-  Moved OS dependent code from arm/arm_init.c, to allow the included
-    implementation of the ARM NEON discovery function to be set at
-    build-time and provide sample implementations from the current code in the
-    contrib/arm-neon subdirectory. The __linux__ code has also been changed to
-    compile and link on Android by using /proc/cpuinfo, and the old linux code
-    is in contrib/arm-neon/linux-auxv.c.  The new code avoids POSIX and Linux
-    dependencies apart from opening /proc/cpuinfo and is C90 compliant.
-  Check for info_ptr == NULL early in png_read_end() so we don't need to
-    run all the png_handle_*() and depend on them to return if info_ptr == NULL.
-    This improves the performance of png_read_end(png_ptr, NULL) and makes
-    it more robust against future programming errors.
-  Check for __has_extension before using it in pngconf.h, to
-    support older Clang versions (Jeremy Sequoia).
-  Treat CRC error handling with png_set_crc_action(), instead of with
-    png_set_benign_errors(), which has been the case since libpng-1.6.0beta18.
-  Use a user warning handler in contrib/gregbook/readpng2.c instead of default,
-    so warnings will be put on stderr even if libpng has CONSOLE_IO disabled.
-  Added png_ptr->process_mode = PNG_READ_IDAT_MODE in png_push_read_chunk
-    after recognizing the IDAT chunk, which avoids an infinite loop while
-    reading a datastream whose first IDAT chunk is of zero-length.
-    This fixes CERT VU#684412 and CVE-2014-0333.
-  Don't recognize known sRGB profiles as sRGB if they have been hacked,
-    but don't reject them and don't issue a copyright violation warning.
-
-Version 1.6.10beta03 [February 25, 2014]
-  Moved some documentation from png.h to libpng.3 and libpng-manual.txt
-  Minor editing of contrib/arm-neon/README and contrib/examples/*.c
-
-Version 1.6.10rc01 [February 27, 2014]
-  Fixed typos in the manual and in scripts/pnglibconf.dfa (CFLAGS -> CPPFLAGS
-    and PNG_USR_CONFIG -> PNG_USER_CONFIG).
-
-Version 1.6.10rc02 [February 28, 2014]
-  Removed unreachable return statement after png_chunk_error()
-    in pngrutil.c
-
-Version 1.6.10rc03 [March 4, 2014]
-  Un-deprecated png_data_freer().
-
-Version 1.6.10 [March 6, 2014]
-  No changes.
-
-Version 1.6.11beta01 [March 17, 2014]
-  Use "if (value != 0)" instead of "if (value)" consistently.
-  Changed ZlibSrcDir from 1.2.5 to 1.2.8 in projects/vstudio.
-  Moved configuration information from the manual to the INSTALL file.
-
-Version 1.6.11beta02 [April 6, 2014]
-  Removed #if/#else/#endif from inside two pow() calls in pngvalid.c because
-    they were handled improperly by Portland Group's PGI-14.1 - PGI-14.3
-    when using its "__builtin_pow()" function.
-  Silence 'unused parameter' build warnings (Cosmin Truta).
-  $(CP) is now used alongside $(RM_F).  Also, use 'copy' instead of 'cp'
-    where applicable, and applied other minor makefile changes (Cosmin).
-  Don't warn about invalid dimensions exceeding user limits (Cosmin).
-  Allow an easy replacement of the default pre-built configuration
-    header with a custom header, via the make PNGLIBCONF_H_PREBUILT
-    macro (Cosmin).
-
-Version 1.6.11beta03 [April 6, 2014]
-  Fixed a typo in pngrutil.c, introduced in libpng-1.5.6, that interferes
-    with "blocky" expansion of sub-8-bit interlaced PNG files (Eric Huss).
-  Optionally use  __builtin_bswap16() in png_do_swap().
-
-Version 1.6.11beta04 [April 19, 2014]
-  Made progressive reading of interlaced images consistent with the
-    behavior of the sequential reader and consistent with the manual, by
-    moving some code out of the PNG_READ_INTERLACING_SUPPORTED blocks. The
-    row_callback now receives the proper pass number and unexpanded rows, when
-    png_combine_row() isn't built or used, and png_set_interlace_handling()
-    is not called.
-  Allow PNG_sRGB_PROFILE_CHECKING = (-1) to mean no sRGB profile checking.
-
-Version 1.6.11beta05 [April 26, 2014]
-  Do not reject ICC V2 profiles that lack padding (Kai-Uwe Behrmann).
-  Relocated closing bracket of the sRGB profile test loop to avoid getting
-    "Not recognizing known sRGB profile that has been edited" warning for
-    ICC V2 profiles that lack the MD5 signature in the profile header.
-
-Version 1.6.11beta06 [May 19, 2014]
-  Added PNG_SKIP_sRGB_CHECK_PROFILE choice for png_set_option().
-
-Version 1.6.11rc01 [May 27, 2014]
-  No changes.
-
-Version 1.6.11rc02 [June 3, 2014]
-  Test ZLIB_VERNUM instead of PNG_ZLIB_VERNUM in contrib/tools/pngfix.c
-
-Version 1.6.11 [June 5, 2014]
-  No changes.
-
-Version 1.6.12rc01 [June 6, 2014]
-  Relocated new code from 1.6.11beta06 in png.c to a point after the
-    declarations (Max Stepin).
-
-Version 1.6.12rc02 [June 7, 2014]
-  Changed file permissions of contrib/tools/intgamma.sh,
-    test-driver, and compile from 0644 to 0755 (Cosmin).
-
-Version 1.6.12rc03 [June 8, 2014]
-  Ensure "__has_attribute()" macro exists before trying to use it with
-    old clang compilers (MacPorts Ticket #43939).
-
-Version 1.6.12 [June 12, 2014]
-  No changes.
-
-Version 1.6.13beta01 [July 4, 2014]
-  Quieted -Wsign-compare and -Wclobber compiler warnings in
-    contrib/pngminus/*.c
-  Added "(void) png_ptr;" where needed in contrib/gregbook to quiet
-    compiler complaints about unused pointers.
-  Split a long output string in contrib/gregbook/rpng2-x.c.
-  Added "PNG_SET_OPTION" requirement for sRGB chunk support to pnglibconf.dfa,
-    Needed for write-only support (John Bowler).
-  Changed "if defined(__ARM_NEON__)" to
-    "if (defined(__ARM_NEON__) || defined(__ARM_NEON))" (James Wu).
-  Fixed clang no-warning builds: png_digit was defined but never used.
-    
-Version 1.6.13beta02 [July 21, 2014]
-  Fixed an incorrect separator ("/" should be "\") in scripts/makefile.vcwin32
-    (bug report from Wolfgang S. Kechel).  Bug was introduced in libpng-1.6.11.
-    Also fixed makefile.bc32, makefile.bor, makefile.msc, makefile.intel, and
-    makefile.tc3 similarly.
-
-Version 1.6.13beta03 [August 3, 2014]
-  Removed scripts/makefile.elf. It has not worked since libpng-1.5.0beta14
-    due to elimination of the PNG_FUNCTION_EXPORT and PNG_DATA_EXPORT
-    definitions from pngconf.h.
-  Ensure that CMakeLists.txt makes the target "lib" directory before making
-    symbolic link into it (SourceForge bug report #226 by Rolf Timmermans).
-
-Version 1.6.13beta04 [August 8, 2014]
-  Added opinion that the ECCN (Export Control Classification Number) for
-    libpng is EAR99 to the README file.
-  Eliminated use of "$<" in makefile explicit rules, when copying
-    $PNGLIBCONF_H_PREBUILT.  This does not work on some versions of make;
-    bug introduced in libpng version 1.6.11.
-
-Version 1.6.13rc01 [August 14, 2014]
-  Made "ccopts" agree with "CFLAGS" in scripts/makefile.hp* and makefile.*sunu
-
-Version 1.6.13 [August 21, 2014]
-  No changes.
-
-Version 1.6.14beta01 [September 14, 2014]
-  Guard usage of png_ptr->options with #ifdef PNG_SET_OPTION_SUPPORTED.
-  Do not build contrib/tools/pngfix.c when PNG_SETJMP_NOT_SUPPORTED,
-    to allow "make" to complete without setjmp support (bug report by
-    Claudio Fontana)
-  Add "#include <setjmp.h>" to contrib/tools/pngfix.c (John Bowler)
-
-Version 1.6.14beta02 [September 18, 2014]
-  Use nanosleep() instead of usleep() in contrib/gregbook/rpng2-x.c
-    because usleep() is deprecated.
-  Define usleep() in contrib/gregbook/rpng2-x.c if not already defined
-    in unistd.h and nanosleep() is not available; fixes error introduced
-    in libpng-1.6.13.
-  Disable floating point exception handling in pngvalid.c when
-    PNG_FLOATING_ARITHMETIC is not supported (bug report by "zootus
-    at users.sourceforge.net").
-
-Version 1.6.14beta03 [September 19, 2014]
-  Define FE_DIVBYZERO, FE_INVALID, and FE_OVERFLOW in pngvalid.c if not
-    already defined.  Revert floating point exception handling in pngvalid.c
-    to version 1.6.14beta01 behavior.
-
-Version 1.6.14beta04 [September 27, 2014]
-  Fixed incorrect handling of the iTXt compression flag in pngrutil.c
-    (bug report by Shunsaku Hirata).  Bug was introduced in libpng-1.6.0.
-
-Version 1.6.14beta05 [October 1, 2014]
-  Added "option READ_iCCP enables READ_COMPRESSED_TEXT" to pnglibconf.dfa
-
-Version 1.6.14beta06 [October 5, 2014]
-  Removed unused "text_len" parameter from private function png_write_zTXt().
-  Conditionally compile some code in png_deflate_claim(), when
-    PNG_WARNINGS_SUPPORTED and PNG_ERROR_TEXT_SUPPORTED are disabled.
-  Replaced repeated code in pngpread.c with PNG_PUSH_SAVE_BUFFER_IF_FULL.
-  Added "chunk iTXt enables TEXT" and "chunk zTXt enables TEXT"
-    to pnglibconf.dfa.
-  Removed "option READ_COMPRESSED_TEXT enables READ_TEXT" from pnglibconf.dfa,
-    to make it possible to configure a libpng that supports iCCP but not TEXT.
-
-Version 1.6.14beta07 [October 7, 2014]
-  Removed "option WRITE_COMPRESSED_TEXT enables WRITE_TEXT" from pnglibconf.dfa
-  Only mark text chunks as written after successfully writing them.
-
-Version 1.6.14rc01 [October 15, 2014]
-  Fixed some typos in comments.
-
-Version 1.6.14rc02 [October 17, 2014]
-  Changed png_convert_to_rfc_1123() to png_convert_to_rfc_1123_buffer()
-    in the manual, to reflect the change made in libpng-1.6.0.
-  Updated README file to explain that direct access to the png_struct
-    and info_struct members has not been permitted since libpng-1.5.0.
-
-Version 1.6.14 [October 23, 2014]
-  No changes.
-
-Version 1.6.15beta01 [October 29, 2014]
-  Changed "if (!x)" to "if (x == 0)" and "if (x)" to "if (x != 0)"
-  Simplified png_free_data().
-  Added missing "ptr = NULL" after some instances of png_free().
-
-Version 1.6.15beta02 [November 1, 2014]
-  Changed remaining "if (!x)" to "if (x == 0)" and "if (x)" to "if (x != 0)"
-
-Version 1.6.15beta03 [November 3, 2014]
-  Added PNG_USE_ARM_NEON configuration flag (Marcin Juszkiewicz).
-
-Version 1.6.15beta04 [November 4, 2014]
-  Removed new PNG_USE_ARM_NEON configuration flag and made a one-line
-    revision to configure.ac to support ARM on aarch64 instead (John Bowler).
-
-Version 1.6.15beta05 [November 5, 2014]
-  Use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING in
-    example.c, pngtest.c, and applications in the contrib directory.
-  Avoid out-of-bounds memory access in png_user_version_check().
-  Simplified and future-proofed png_user_version_check().
-  Fixed GCC unsigned int->float warnings. Various versions of GCC
-    seem to generate warnings when an unsigned value is implicitly
-    converted to double. This is probably a GCC bug but this change
-    avoids the issue by explicitly converting to (int) where safe.
-  Free all allocated memory in pngimage. The file buffer cache was left
-    allocated at the end of the program, harmless but it causes memory
-    leak reports from clang.
-  Fixed array size calculations to avoid warnings. At various points
-    in the code the number of elements in an array is calculated using
-    sizeof.  This generates a compile time constant of type (size_t) which
-    is then typically assigned to an (unsigned int) or (int). Some versions
-    of GCC on 64-bit systems warn about the apparent narrowing, even though
-    the same compiler does apparently generate the correct, in-range,
-    numeric constant.  This adds appropriate, safe, casts to make the
-    warnings go away.
-
-Version 1.6.15beta06 [November 6, 2014]
-  Reverted use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING
-    in the manual, example.c, pngtest.c, and applications in the contrib
-    directory.  It was incorrect advice.
-
-Version 1.6.15beta07 [November 7, 2014]
-  Removed #ifdef PNG_16BIT_SUPPORTED/#endif around png_product2(); it is
-    needed by png_reciprocal2().
-  Added #ifdef PNG_16BIT_SUPPORTED/#endif around png_log16bit() and
-    png_do_swap().
-  Changed all "#endif /* PNG_FEATURE_SUPPORTED */" to "#endif /* FEATURE */"
-
-Version 1.6.15beta08 [November 8, 2014]
-  More housecleaning in *.h
-
-Version 1.6.15rc01 [November 13, 2014]
-
-Version 1.6.15rc02 [November 14, 2014]
-  The macros passed in the command line to Borland make were ignored if
-    similarly-named macros were already defined in makefiles. This behavior
-    is different from POSIX make and other make programs.  Surround the
-    macro definitions with ifndef guards (Cosmin).
-
-Version 1.6.15rc03 [November 16, 2014]
-  Added "-D_CRT_SECURE_NO_WARNINGS" to CFLAGS in scripts/makefile.vcwin32.
-  Removed the obsolete $ARCH variable from scripts/makefile.darwin.
-
-Version 1.6.15 [November 20, 2014]
-  No changes.
-
-Version 1.6.16beta01 [December 14, 2014]
-  Added ".align 2" to arm/filter_neon.S to support old GAS assemblers that
-    don't do alignment correctly.
-  Revised Makefile.am and scripts/symbols.dfn to work with MinGW/MSYS
-    (Bob Friesenhahn).
-
-Version 1.6.16beta02 [December 15, 2014]
-  Revised Makefile.am and scripts/*.dfn again to work with MinGW/MSYS;
-    renamed scripts/*.dfn to scripts/*.c (John Bowler).
-
-Version 1.6.16beta03 [December 21, 2014]
-  Quiet a "comparison always true" warning in pngstest.c (John Bowler).
-
-Version 1.6.16rc01 [December 21, 2014]
-  Restored a test on width that was removed from png.c at libpng-1.6.9
-    (Bug report by Alex Eubanks).
-
-Version 1.6.16rc02 [December 21, 2014]
-  Undid the update to pngrutil.c in 1.6.16rc01.
-
-Version 1.6.16rc03 [December 21, 2014]
-  Fixed an overflow in png_combine_row with very wide interlaced images.
-
-Version 1.6.16 [December 22, 2014]
-  No changes.
-
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
-(subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe)
-or to glennrp at users.sourceforge.net
-
-Glenn R-P
--- a/DoConfig/fltk/png/CMakeLists.txt
+++ /dev/null
@@ -1,47 +1,0 @@
-
-# source files for png
-set(PNG_SRCS
-  png.c
-  pngerror.c
-  pngget.c
-  pngmem.c
-  pngpread.c
-  pngread.c
-  pngrio.c
-  pngrtran.c
-  pngrutil.c
-  pngset.c
-  pngtrans.c
-  pngwio.c
-  pngwrite.c
-  pngwtran.c
-  pngwutil.c
-)
-
-#######################################################################
-FL_ADD_LIBRARY(fltk_png STATIC "${PNG_SRCS}")
-# install the png headers
-install(FILES png.h;pngconf.h;pnglibconf.h
-    DESTINATION ${FLTK_INCLUDEDIR}/FL/images
-)
-
-if(OPTION_USE_SYSTEM_ZLIB)
-    target_link_libraries(fltk_png ${FLTK_ZLIB_LIBRARIES})
-else()
-    target_link_libraries(fltk_png fltk_z)
-endif(OPTION_USE_SYSTEM_ZLIB)
-
-#######################################################################
-if(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
-FL_ADD_LIBRARY(fltk_png SHARED "${PNG_SRCS}")
-
-if(OPTION_USE_SYSTEM_ZLIB)
-    target_link_libraries(fltk_png_SHARED ${FLTK_ZLIB_LIBRARIES})
-else()
-    target_link_libraries(fltk_png_SHARED fltk_z_SHARED)
-endif(OPTION_USE_SYSTEM_ZLIB)
-
-#######################################################################
-endif(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
--- a/DoConfig/fltk/png/INSTALL
+++ /dev/null
@@ -1,402 +1,0 @@
-
-Installing libpng
-
-Contents
-
-   I. Simple installation
-  II. Rebuilding the configure scripts
- III. Using scripts/makefile*
-  IV. Using cmake
-   V. Directory structure
-  VI. Building with project files
- VII. Building with makefiles
-VIII. Configuring libpng for 16-bit platforms
-  IX. Configuring for DOS
-   X. Configuring for Medium Model
-  XI. Prepending a prefix to exported symbols
- XII. Configuring for compiler xxx:
-XIII. Removing unwanted object code
- XIV. Changes to the build and configuration of libpng in libpng-1.5.x
-  XV. Configuring libpng for multiprocessing
- XVI. Other sources of information about libpng
-
-I. Simple installation
-
-On Unix/Linux and similar systems, you can simply type
-
-    ./configure [--prefix=/path]
-    make check
-    make install
-
-and ignore the rest of this document.  "/path" is the path to the directory
-where you want to install the libpng "lib", "include", and "bin"
-subdirectories.
-
-If you downloaded a GIT clone, you will need to run ./autogen.sh before
-running ./configure, to create "configure" and "Makefile.in" which are
-not included in the GIT repository.
-
-Note that "configure" is only included in the "*.tar" distributions and not
-in the "*.zip" or "*.7z" distributions. If you downloaded one of those
-distributions, see "Building with project files" or "Building with makefiles",
-below.
-
-II. Rebuilding the configure scripts
-
-If configure does not work on your system, or if you have a need to
-change configure.ac or Makefile.am, and you have a reasonably
-up-to-date set of tools, running ./autogen.sh in a git clone before
-running ./configure may fix the problem.  To be really sure that you
-aren't using any of the included pre-built scripts, you can do this:
-
-    ./configure --enable-maintainer-mode
-    make maintainer-clean
-    ./autogen.sh --maintainer --clean
-    ./autogen.sh --maintainer
-    ./configure [--prefix=/path] [other options]
-    make
-    make install
-    make check
-
-III. Using scripts/makefile*
-
-Instead, you can use one of the custom-built makefiles in the
-"scripts" directory
-
-    cp scripts/pnglibconf.h.prebuilt pnglibconf.h
-    cp scripts/makefile.system makefile
-    make test
-    make install
-
-The files that are presently available in the scripts directory
-are listed and described in scripts/README.txt.
-
-Or you can use one of the "projects" in the "projects" directory.
-
-Before installing libpng, you must first install zlib, if it
-is not already on your system.  zlib can usually be found
-wherever you got libpng; otherwise go to http://zlib.net.  You can place
-zlib in in the same directory as libpng or in another directory.
-
-If your system already has a preinstalled zlib you will still need
-to have access to the zlib.h and zconf.h include files that
-correspond to the version of zlib that's installed.
-
-If you wish to test with a particular zlib that is not first in the
-standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
-and LD_LIBRARY_PATH in your environment before running "make test"
-or "make distcheck":
-
-ZLIBLIB=/path/to/lib export ZLIBLIB
-ZLIBINC=/path/to/include export ZLIBINC
-CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
-LDFLAGS="-L$ZLIBLIB" export LDFLAGS
-LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
-
-If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
-in your environment and type "make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test".
-
-IV. Using cmake
-
-If you want to use "cmake" (see www.cmake.org), type
-
-   cmake . -DCMAKE_INSTALL_PREFIX=/path
-   make
-   make install
-
-As when using the simple configure method described above, "/path" points to
-the installation directory where you want to put the libpng "lib", "include",
-and "bin" subdirectories.
-
-V. Directory structure
-
-You can rename the directories that you downloaded (they
-might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.8"
-or "zlib128") so that you have directories called "zlib" and "libpng".
-
-Your directory structure should look like this:
-
-   ..       (the parent directory)
-      libpng  (this directory)
-          INSTALL (this file)
-          README
-          *.h, *.c  => libpng source files
-          CMakeLists.txt    =>  "cmake" script
-          configuration files:
-             configure.ac, configure, Makefile.am, Makefile.in,
-             autogen.sh, config.guess, ltmain.sh, missing, libpng.pc.in,
-             libpng-config.in, aclocal.m4, config.h.in, config.sub,
-             depcomp, install-sh, mkinstalldirs, test-pngtest.sh
-          contrib
-             arm-neon, conftest, examples, gregbook, libtests, pngminim,
-             pngminus, pngsuite, tools, visupng
-          projects
-             cbuilder5, owatcom, visualc71, vstudio, xcode
-          scripts
-             makefile.*
-             *.def (module definition files)
-             etc.
-          pngtest.png
-          etc.
-      zlib
-          README, *.h, *.c contrib, etc.
-
-If the line endings in the files look funny, you may wish to get the other
-distribution of libpng.  It is available in both tar.gz (UNIX style line
-endings) and zip (DOS style line endings) formats.
-
-VI. Building with project files
-
-If you are building libpng with MSVC, you can enter the
-libpng projects\visualc71 or vstudio directory and follow the instructions
-in README.txt.
-
-Otherwise enter the zlib directory and follow the instructions in zlib/README,
-then come back here and run "configure" or choose the appropriate
-makefile.sys in the scripts directory.
-
-VII. Building with makefiles
-
-Copy the file (or files) that you need from the
-scripts directory into this directory, for example
-
-   MSDOS example: copy scripts\makefile.msc makefile
-                  copy scripts\pnglibconf.h.prebuilt pnglibconf.h
-   UNIX example:  cp scripts/makefile.std makefile
-                  cp scripts/pnglibconf.h.prebuilt pnglibconf.h
-
-Read the makefile to see if you need to change any source or
-target directories to match your preferences.
-
-Then read pnglibconf.dfa to see if you want to make any configuration
-changes.
-
-Then just run "make" which will create the libpng library in
-this directory and "make test" which will run a quick test that reads
-the "pngtest.png" file and writes a "pngout.png" file that should be
-identical to it.  Look for "9782 zero samples" in the output of the
-test.  For more confidence, you can run another test by typing
-"pngtest pngnow.png" and looking for "289 zero samples" in the output.
-Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare
-your output with the result shown in contrib/pngsuite/README.
-
-Most of the makefiles will allow you to run "make install" to
-put the library in its final resting place (if you want to
-do that, run "make install" in the zlib directory first if necessary).
-Some also allow you to run "make test-installed" after you have
-run "make install".
-
-VIII. Configuring libpng for 16-bit platforms
-
-You will want to look into zconf.h to tell zlib (and thus libpng) that
-it cannot allocate more then 64K at a time.  Even if you can, the memory
-won't be accessible.  So limit zlib and libpng to 64K by defining MAXSEG_64K.
-
-IX. Configuring for DOS
-
-For DOS users who only have access to the lower 640K, you will
-have to limit zlib's memory usage via a png_set_compression_mem_level()
-call.  See zlib.h or zconf.h in the zlib library for more information.
-
-X. Configuring for Medium Model
-
-Libpng's support for medium model has been tested on most of the popular
-compilers.  Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
-defined, and FAR gets defined to far in pngconf.h, and you should be
-all set.  Everything in the library (except for zlib's structure) is
-expecting far data.  You must use the typedefs with the p or pp on
-the end for pointers (or at least look at them and be careful).  Make
-note that the rows of data are defined as png_bytepp, which is
-an "unsigned char far * far *".
-
-XI. Prepending a prefix to exported symbols
-
-Starting with libpng-1.6.0, you can configure libpng (when using the
-"configure" script) to prefix all exported symbols by means of the
-configuration option "--with-libpng-prefix=FOO_", where FOO_ can be any
-string beginning with a letter and containing only uppercase
-and lowercase letters, digits, and the underscore (i.e., a C language
-identifier).  This creates a set of macros in pnglibconf.h, so this is
-transparent to applications; their function calls get transformed by
-the macros to use the modified names.
-
-XII. Configuring for compiler xxx:
-
-All includes for libpng are in pngconf.h.  If you need to add, change
-or delete an include, this is the place to do it.
-The includes that are not needed outside libpng are placed in pngpriv.h,
-which is only used by the routines inside libpng itself.
-The files in libpng proper only include pngpriv.h and png.h, which
-in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
-As of libpng-1.5.0, pngpriv.h also includes three other private header
-files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
-that previously appeared in the public headers.
-
-XIII. Removing unwanted object code
-
-There are a bunch of #define's in pngconf.h that control what parts of
-libpng are compiled.  All the defines end in _SUPPORTED.  If you are
-never going to use a capability, you can change the #define to #undef
-before recompiling libpng and save yourself code and data space, or
-you can turn off individual capabilities with defines that begin with
-PNG_NO_.
-
-In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
-
-You can also turn all of the transforms and ancillary chunk capabilities
-off en masse with compiler directives that define
-PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
-or all four, along with directives to turn on any of the capabilities that
-you do want.  The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the
-extra transformations but still leave the library fully capable of reading
-and writing PNG files with all known public chunks. Use of the
-PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
-that is incapable of reading or writing ancillary chunks.  If you are
-not using the progressive reading capability, you can turn that off
-with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
-capability, which you'll still have).
-
-All the reading and writing specific code are in separate files, so the
-linker should only grab the files it needs.  However, if you want to
-make sure, or if you are building a stand alone library, all the
-reading files start with "pngr" and all the writing files start with "pngw".
-The files that don't match either (like png.c, pngtrans.c, etc.)
-are used for both reading and writing, and always need to be included.
-The progressive reader is in pngpread.c
-
-If you are creating or distributing a dynamically linked library (a .so
-or DLL file), you should not remove or disable any parts of the library,
-as this will cause applications linked with different versions of the
-library to fail if they call functions not available in your library.
-The size of the library itself should not be an issue, because only
-those sections that are actually used will be loaded into memory.
-
-XIV. Changes to the build and configuration of libpng in libpng-1.5.x
-
-Details of internal changes to the library code can be found in the CHANGES
-file and in the GIT repository logs.  These will be of no concern to the vast
-majority of library users or builders; however, the few who configure libpng
-to a non-default feature set may need to change how this is done.
-
-There should be no need for library builders to alter build scripts if
-these use the distributed build support - configure or the makefiles -
-however, users of the makefiles may care to update their build scripts
-to build pnglibconf.h where the corresponding makefile does not do so.
-
-Building libpng with a non-default configuration has changed completely.
-The old method using pngusr.h should still work correctly even though the
-way pngusr.h is used in the build has been changed; however, library
-builders will probably want to examine the changes to take advantage of
-new capabilities and to simplify their build system.
-
-A. Specific changes to library configuration capabilities
-
-The exact mechanism used to control attributes of API functions has
-changed.  A single set of operating system independent macro definitions
-is used and operating system specific directives are defined in
-pnglibconf.h
-
-As part of this the mechanism used to choose procedure call standards on
-those systems that allow a choice has been changed.  At present this only
-affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
-running on Intel processors.  As before, PNGAPI is defined where required
-to control the exported API functions; however, two new macros, PNGCBAPI
-and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
-(PNGCAPI) for functions that must match a C library prototype (currently
-only png_longjmp_ptr, which must match the C longjmp function.)  The new
-approach is documented in pngconf.h
-
-Despite these changes, libpng 1.5.0 only supports the native C function
-calling standard on those platforms tested so far (__cdecl on Microsoft
-Windows).  This is because the support requirements for alternative
-calling conventions seem to no longer exist.  Developers who find it
-necessary to set PNG_API_RULE to 1 should advise the mailing list
-(png-mng-implement) of this and library builders who use Openwatcom and
-therefore set PNG_API_RULE to 2 should also contact the mailing list.
-
-B. Changes to the configuration mechanism
-
-Prior to libpng-1.5.0 library builders who needed to configure libpng
-had either to modify the exported pngconf.h header file to add system
-specific configuration or had to write feature selection macros into
-pngusr.h and cause this to be included into pngconf.h by defining
-PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
-application built without PNG_USER_CONFIG defined would see the
-unmodified, default, libpng API and thus would probably fail to link.
-
-These mechanisms still work in the configure build and in any makefile
-build that builds pnglibconf.h, although the feature selection macros
-have changed somewhat as described above.  In 1.5.0, however, pngusr.h is
-processed only once, at the time the exported header file pnglibconf.h is
-built.  pngconf.h no longer includes pngusr.h; therefore, pngusr.h is ignored
-after the build of pnglibconf.h and it is never included in an application
-build.
-
-The formerly used alternative of adding a list of feature macros to the
-CPPFLAGS setting in the build also still works; however, the macros will be
-copied to pnglibconf.h and this may produce macro redefinition warnings
-when the individual C files are compiled.
-
-All configuration now only works if pnglibconf.h is built from
-scripts/pnglibconf.dfa.  This requires the program awk.  Brian Kernighan
-(the original author of awk) maintains C source code of that awk and this
-and all known later implementations (often called by subtly different
-names - nawk and gawk for example) are adequate to build pnglibconf.h.
-The Sun Microsystems (now Oracle) program 'awk' is an earlier version
-and does not work; this may also apply to other systems that have a
-functioning awk called 'nawk'.
-
-Configuration options are now documented in scripts/pnglibconf.dfa.  This
-file also includes dependency information that ensures a configuration is
-consistent; that is, if a feature is switched off, dependent features are
-also switched off.  As a recommended alternative to using feature macros in
-pngusr.h a system builder may also define equivalent options in pngusr.dfa
-(or, indeed, any file) and add that to the configuration by setting
-DFA_XTRA to the file name.  The makefiles in contrib/pngminim illustrate
-how to do this, and also illustrate a case where pngusr.h is still required.
-
-After you have built libpng, the definitions that were recorded in
-pnglibconf.h are available to your application (pnglibconf.h is included
-in png.h and gets installed alongside png.h and pngconf.h in your
-$PREFIX/include directory).  Do not edit pnglibconf.h after you have built
-libpng, because than the settings would not accurately reflect the settings
-that were used to build libpng.
-
-XV. Configuring libpng for multiprocessing
-
-Libpng uses setjmp()/longjmp() for error handling.  Unfortunately setjmp()
-is known to be not thread-safe on some platforms and we don't know of
-any platform where it is guaranteed to be thread-safe.  Therefore, if
-your application is going to be using multiple threads, you should
-configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
--DPNG_NO_SETJMP on your compile line, or with
-
-  #undef PNG_SETJMP_SUPPORTED
-
-in your pnglibconf.h or pngusr.h.
-
-XVI. Other sources of information about libpng:
-
-Further information can be found in the README and libpng-manual.txt
-files, in the individual makefiles, in png.h, and the manual pages
-libpng.3 and png.5.
-
-Using the ./configure script -- 16 December 2002.
-=================================================
-
-The ./configure script should work compatibly with what scripts/makefile.*
-did, however there are some options you might need to add to configure
-explicitly, which previously was done semi-automatically (if you didn't edit
-scripts/makefile.* yourself, that is)
-
-CFLAGS="-Wall -O -funroll-loops \
--malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \
---with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
-
-You can alternatively specify --includedir=/usr/include, /usr/local/include,
-/usr/include/libpng16, or whatever.
-
-If you find that the configure script is out-of-date or is not supporting
-your platform properly, try running autogen.sh to regenerate "configure",
-"Makefile.in", and the other configuration files. Then try configure again.
-
--- a/DoConfig/fltk/png/LICENSE
+++ /dev/null
@@ -1,111 +1,0 @@
-
-This copy of the libpng notices is provided for your convenience.  In case of
-any discrepancy between this copy and the notices in the file png.h that is
-included in the libpng distribution, the latter shall prevail.
-
-COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
-
-If you modify libpng you may insert additional notices immediately following
-this sentence.
-
-This code is released under the libpng license.
-
-libpng versions 1.2.6, August 15, 2004, through 1.6.16, December 22, 2014, are
-Copyright (c) 2004, 2006-2014 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.2.5
-with the following individual added to the list of Contributing Authors
-
-   Cosmin Truta
-
-libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
-Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.0.6
-with the following individuals added to the list of Contributing Authors
-
-   Simon-Pierre Cadieux
-   Eric S. Raymond
-   Gilles Vollant
-
-and with the following additions to the disclaimer:
-
-   There is no warranty against interference with your enjoyment of the
-   library or against infringement.  There is no warranty that our
-   efforts or the library will fulfill any of your particular purposes
-   or needs.  This library is provided with all faults, and the entire
-   risk of satisfactory quality, performance, accuracy, and effort is with
-   the user.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-0.96,
-with the following individuals added to the list of Contributing Authors:
-
-   Tom Lane
-   Glenn Randers-Pehrson
-   Willem van Schaik
-
-libpng versions 0.89, June 1996, through 0.96, May 1997, are
-Copyright (c) 1996, 1997 Andreas Dilger
-Distributed according to the same disclaimer and license as libpng-0.88,
-with the following individuals added to the list of Contributing Authors:
-
-   John Bowler
-   Kevin Bracey
-   Sam Bushell
-   Magnus Holmgren
-   Greg Roelofs
-   Tom Tanner
-
-libpng versions 0.5, May 1995, through 0.88, January 1996, are
-Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-
-For the purposes of this copyright and license, "Contributing Authors"
-is defined as the following set of individuals:
-
-   Andreas Dilger
-   Dave Martindale
-   Guy Eric Schalnat
-   Paul Schmidt
-   Tim Wegner
-
-The PNG Reference Library is supplied "AS IS".  The Contributing Authors
-and Group 42, Inc. disclaim all warranties, expressed or implied,
-including, without limitation, the warranties of merchantability and of
-fitness for any purpose.  The Contributing Authors and Group 42, Inc.
-assume no liability for direct, indirect, incidental, special, exemplary,
-or consequential damages, which may result from the use of the PNG
-Reference Library, even if advised of the possibility of such damage.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-source code, or portions hereof, for any purpose, without fee, subject
-to the following restrictions:
-
-1. The origin of this source code must not be misrepresented.
-
-2. Altered versions must be plainly marked as such and must not
-   be misrepresented as being the original source.
-
-3. This Copyright notice may not be removed or altered from any
-   source or altered source distribution.
-
-The Contributing Authors and Group 42, Inc. specifically permit, without
-fee, and encourage the use of this source code as a component to
-supporting the PNG file format in commercial products.  If you use this
-source code in a product, acknowledgment is not required but would be
-appreciated.
-
-
-A "png_get_copyright" function is available, for convenient use in "about"
-boxes and the like:
-
-   printf("%s",png_get_copyright(NULL));
-
-Also, the PNG logo (in PNG format, of course) is supplied in the
-files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
-
-Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
-certification mark of the Open Source Initiative.
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-December 22, 2014
--- a/DoConfig/fltk/png/Makefile
+++ /dev/null
@@ -1,102 +1,0 @@
-#
-# "$Id$"
-#
-# PNG library makefile for the Fast Light Toolkit (FLTK).
-#
-# Copyright 1997-2011 by Easy Software Products.
-#
-# 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:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-#
-# Object files...
-#
-
-OBJS	=	png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
-		pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
-		pngwtran.o pngmem.o pngerror.o pngpread.o
-
-LIBPNG	=	../lib/libfltk_png$(LIBEXT)
-
-
-#
-# Make all of the targets...
-#
-
-all:	$(LIBPNG)
-
-
-#
-# Clean all of the targets and object files...
-#
-
-clean:
-	$(RM) $(OBJS)
-	$(RM) $(LIBPNG)
-
-
-#
-# Install everything...
-#
-
-install: $(LIBPNG)
-	echo "Installing libfltk_png$(LIBEXT) in $(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(LIBPNG) $(DESTDIR)$(libdir)
-	$(RANLIB) $(DESTDIR)$(libdir)/libfltk_png$(LIBEXT)
-	echo "Installing png headers in $(includedir)/FL/images..."
-	-$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) png.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) pngconf.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) pnglibconf.h $(DESTDIR)$(includedir)/FL/images
-
-
-#
-# Uninstall everything...
-#
-
-uninstall:
-	echo "Uninstalling libfltk_png$(LIBEXT) in $(libdir)..."
-	$(RM) $(DESTDIR)$(libdir)/libfltk_png$(LIBEXT)
-	echo "Uninstalling png headers in $(includedir)/FL/images..."
-	$(RM) $(DESTDIR)$(includedir)/FL/images/png.h
-	$(RM) $(DESTDIR)$(includedir)/FL/images/pngconf.h
-	$(RM) $(DESTDIR)$(includedir)/FL/images/pnglibconf.h
-
-
-#
-# libfltk_png.a
-#
-
-$(LIBPNG):	$(OBJS)
-	echo Archiving $@...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(OBJS)
-	$(RANLIB) $@
-
-
-#
-# Make dependencies...
-#
-
-depend:	$(OBJS:.o=.c)
-	makedepend -Y -I.. -f makedepend $(OBJS:.o=.c)
-
-include makedepend
-
-$(OBJS):	../makeinclude
-
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/png/README
+++ /dev/null
@@ -1,215 +1,0 @@
-README for libpng version 1.6.16 - December 22, 2014 (shared library 16.0)
-See the note about version numbers near the top of png.h
-
-See INSTALL for instructions on how to install libpng.
-
-Libpng comes in several distribution formats.  Get libpng-*.tar.gz or
-libpng-*.tar.xz or if you want UNIX-style line endings in the text files,
-or lpng*.7z or lpng*.zip if you want DOS-style line endings.
-
-Version 0.89 was the first official release of libpng.  Don't let the
-fact that it's the first release fool you.  The libpng library has been in
-extensive use and testing since mid-1995.  By late 1997 it had
-finally gotten to the stage where there hadn't been significant
-changes to the API in some time, and people have a bad feeling about
-libraries with versions < 1.0.  Version 1.0.0 was released in
-March 1998.
-
-****
-Note that some of the changes to the png_info structure render this
-version of the library binary incompatible with libpng-0.89 or
-earlier versions if you are using a shared library.  The type of the
-"filler" parameter for png_set_filler() has changed from png_byte to
-png_uint_32, which will affect shared-library applications that use
-this function.
-
-To avoid problems with changes to the internals of png info_struct,
-new APIs have been made available in 0.95 to avoid direct application
-access to info_ptr.  These functions are the png_set_<chunk> and
-png_get_<chunk> functions.  These functions should be used when
-accessing/storing the info_struct data, rather than manipulating it
-directly, to avoid such problems in the future.
-
-It is important to note that the APIs did not make current programs
-that access the info struct directly incompatible with the new
-library, through libpng-1.2.x.  In libpng-1.4.x, which was meant to
-be a transitional release, members of the png_struct and the
-info_struct can still be accessed, but the compiler will issue a
-warning about deprecated usage.  Since libpng-1.5.0, direct access
-to these structs is not allowed, and the definitions of the structs
-reside in private pngstruct.h and pnginfo.h header files that are not
-accessible to applications.  It is strongly suggested that new
-programs use the new APIs (as shown in example.c and pngtest.c), and
-older programs be converted to the new format, to facilitate upgrades
-in the future.
-****
-
-Additions since 0.90 include the ability to compile libpng as a
-Windows DLL, and new APIs for accessing data in the info struct.
-Experimental functions include the ability to set weighting and cost
-factors for row filter selection, direct reads of integers from buffers
-on big-endian processors that support misaligned data access, faster
-methods of doing alpha composition, and more accurate 16->8 bit color
-conversion.
-
-The additions since 0.89 include the ability to read from a PNG stream
-which has had some (or all) of the signature bytes read by the calling
-application.  This also allows the reading of embedded PNG streams that
-do not have the PNG file signature.  As well, it is now possible to set
-the library action on the detection of chunk CRC errors.  It is possible
-to set different actions based on whether the CRC error occurred in a
-critical or an ancillary chunk.
-
-The changes made to the library, and bugs fixed are based on discussions
-on the PNG-implement mailing list and not on material submitted
-privately to Guy, Andreas, or Glenn.  They will forward any good
-suggestions to the list.
-
-For a detailed description on using libpng, read libpng-manual.txt.  For
-examples of libpng in a program, see example.c and pngtest.c.  For usage
-information and restrictions (what little they are) on libpng, see
-png.h.  For a description on using zlib (the compression library used by
-libpng) and zlib's restrictions, see zlib.h
-
-I have included a general makefile, as well as several machine and
-compiler specific ones, but you may have to modify one for your own needs.
-
-You should use zlib 1.0.4 or later to run this, but it MAY work with
-versions as old as zlib 0.95.  Even so, there are bugs in older zlib
-versions which can cause the output of invalid compression streams for
-some images.  You will definitely need zlib 1.0.4 or later if you are
-taking advantage of the MS-DOS "far" structure allocation for the small
-and medium memory models.  You should also note that zlib is a
-compression library that is useful for more things than just PNG files.
-You can use zlib as a drop-in replacement for fread() and fwrite() if
-you are so inclined.
-
-zlib should be available at the same place that libpng is, or at zlib.net.
-
-You may also want a copy of the PNG specification.  It is available
-as an RFC, a W3C Recommendation, and an ISO/IEC Standard.  You can find
-these at http://www.libpng.org/pub/png/documents/
-
-This code is currently being archived at libpng.sf.net in the
-[DOWNLOAD] area, and at ftp://ftp.simplesystems.org.  If you can't find it
-in any of those places, e-mail me, and I'll help you find it.
-
-I am not a lawyer, but I believe that the Export Control Classification
-Number (ECCN) for libpng is EAR99, which means not subject to export
-controls or International Traffic in Arms Regulations (ITAR) because it
-is open source, publicly available software, that does not contain any
-encryption software.  See the EAR, paragraphs 734.3(b)(3) and 734.7(b).
-
-If you have any code changes, requests, problems, etc., please e-mail
-them to me.  Also, I'd appreciate any make files or project files,
-and any modifications you needed to make to get libpng to compile,
-along with a #define variable to tell what compiler/system you are on.
-If you needed to add transformations to libpng, or wish libpng would
-provide the image in a different way, drop me a note (and code, if
-possible), so I can consider supporting the transformation.
-Finally, if you get any warning messages when compiling libpng
-(note: not zlib), and they are easy to fix, I'd appreciate the
-fix.  Please mention "libpng" somewhere in the subject line.  Thanks.
-
-This release was created and will be supported by myself (of course
-based in a large way on Guy's and Andreas' earlier work), and the PNG
-development group.
-
-Send comments/corrections/commendations to png-mng-implement at
-lists.sourceforge.net (subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe) or to glennrp at users.sourceforge.net
-
-You can't reach Guy, the original libpng author, at the addresses
-given in previous versions of this document.  He and Andreas will
-read mail addressed to the png-implement list, however.
-
-Please do not send general questions about PNG.  Send them to
-png-mng-misc at lists.sf.net (subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-misc to
-subscribe).  If you have a question about something
-in the PNG specification that is related to using libpng, send it
-to me.  Send me any questions that start with "I was using libpng,
-and ...".  If in doubt, send questions to me.  I'll bounce them
-to others, if necessary.
-
-Please do not send suggestions on how to change PNG.  We have
-been discussing PNG for nineteen years now, and it is official and
-finished.  If you have suggestions for libpng, however, I'll
-gladly listen.  Even if your suggestion is not used immediately,
-it may be used later.
-
-Files in this distribution:
-
-      ANNOUNCE      =>  Announcement of this version, with recent changes
-      CHANGES       =>  Description of changes between libpng versions
-      KNOWNBUG      =>  List of known bugs and deficiencies
-      LICENSE       =>  License to use and redistribute libpng
-      README        =>  This file
-      TODO          =>  Things not implemented in the current library
-      Y2KINFO       =>  Statement of Y2K compliance
-      example.c     =>  Example code for using libpng functions
-      libpng.3      =>  manual page for libpng (includes libpng-manual.txt)
-      libpng-manual.txt  =>  Description of libpng and its functions
-      libpngpf.3    =>  manual page for libpng's private functions
-      png.5         =>  manual page for the PNG format
-      png.c         =>  Basic interface functions common to library
-      png.h         =>  Library function and interface declarations (public)
-      pngpriv.h     =>  Library function and interface declarations (private)
-      pngconf.h     =>  System specific library configuration (public)
-      pngstruct.h   =>  png_struct declaration (private)
-      pnginfo.h     =>  png_info struct declaration (private)
-      pngdebug.h    =>  debugging macros (private)
-      pngerror.c    =>  Error/warning message I/O functions
-      pngget.c      =>  Functions for retrieving info from struct
-      pngmem.c      =>  Memory handling functions
-      pngbar.png    =>  PNG logo, 88x31
-      pngnow.png    =>  PNG logo, 98x31
-      pngpread.c    =>  Progressive reading functions
-      pngread.c     =>  Read data/helper high-level functions
-      pngrio.c      =>  Lowest-level data read I/O functions
-      pngrtran.c    =>  Read data transformation functions
-      pngrutil.c    =>  Read data utility functions
-      pngset.c      =>  Functions for storing data into the info_struct
-      pngtest.c     =>  Library test program
-      pngtest.png   =>  Library test sample image
-      pngtrans.c    =>  Common data transformation functions
-      pngwio.c      =>  Lowest-level write I/O functions
-      pngwrite.c    =>  High-level write functions
-      pngwtran.c    =>  Write data transformations
-      pngwutil.c    =>  Write utility functions
-      arm           =>  Contains optimized code for the ARM platform
-      contrib       =>  Contributions
-       examples         =>  Example programs
-       gregbook         =>  source code for PNG reading and writing, from
-                            Greg Roelofs' "PNG: The Definitive Guide",
-                            O'Reilly, 1999
-       libtests         =>  Test programs
-       pngminim         =>  Minimal decoder, encoder, and progressive decoder
-                            programs demonstrating use of pngusr.dfa
-       pngminus         =>  Simple pnm2png and png2pnm programs
-       pngsuite         =>  Test images
-       tools            =>  Various tools
-       visupng          =>  Contains a MSVC workspace for VisualPng
-      projects      =>  Contains project files and workspaces for
-                        building a DLL
-       owatcom          =>  Contains a WATCOM project for building libpng
-       visualc71        =>  Contains a Microsoft Visual C++ (MSVC)
-                            workspace for building libpng and zlib
-       vstudio          =>  Contains a Microsoft Visual C++ (MSVC)
-                            workspace for building libpng and zlib
-      scripts       =>  Directory containing scripts for building libpng:
-                            (see scripts/README.txt for the list of scripts)
-
-Good luck, and happy coding.
-
--Glenn Randers-Pehrson (current maintainer, since 1998)
- Internet: glennrp at users.sourceforge.net
-
--Andreas Eric Dilger (former maintainer, 1996-1997)
- Internet: adilger at enel.ucalgary.ca
- Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
-
--Guy Eric Schalnat (original author and former maintainer, 1995-1996)
- (formerly of Group 42, Inc)
- Internet: gschal at infinet.com
--- a/DoConfig/fltk/png/TODO
+++ /dev/null
@@ -1,29 +1,0 @@
-/*
-TODO - list of things to do for libpng:
-
-Final bug fixes.
-Better C++ wrapper/full C++ implementation?
-Fix problem with C++ and EXTERN "C".
-cHRM transformation.
-Remove setjmp/longjmp usage in favor of returning error codes.
-Palette creation.
-Add "grayscale->palette" transformation and "palette->grayscale" detection.
-Improved dithering.
-Multi-lingual error and warning message support.
-Complete sRGB transformation (presently it simply uses gamma=0.45455).
-Make profile checking optional via a png_set_something() call.
-Man pages for function calls.
-Better documentation.
-Better filter selection
-   (counting huffman bits/precompression?  filter inertia?  filter costs?).
-Histogram creation.
-Text conversion between different code pages (Latin-1 -> Mac and DOS).
-Avoid building gamma tables whenever possible.
-Use greater precision when changing to linear gamma for compositing against
-  background and doing rgb-to-gray transformation.
-Investigate pre-incremented loop counters and other loop constructions.
-Add interpolated method of handling interlacing.
-Switch to the simpler zlib (zlib/libpng) license if legally possible.
-Extend pngvalid.c to validate more of the libpng transformations.
-
-*/
--- a/DoConfig/fltk/png/libpng-manual.txt
+++ /dev/null
@@ -1,5330 +1,0 @@
-libpng-manual.txt - A description on how to use and modify libpng
-
- libpng version 1.6.16 - December 22, 2014
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2014 Glenn Randers-Pehrson
-
- This document is released under the libpng license.
- For conditions of distribution and use, see the disclaimer
- and license in png.h
-
- Based on:
-
- libpng versions 0.97, January 1998, through 1.6.16 - December 22, 2014
- Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2014 Glenn Randers-Pehrson
-
- libpng 1.0 beta 6 - version 0.96 - May 28, 1997
- Updated and distributed by Andreas Dilger
- Copyright (c) 1996, 1997 Andreas Dilger
-
- libpng 1.0 beta 2 - version 0.88 - January 26, 1996
- For conditions of distribution and use, see copyright
- notice in png.h. Copyright (c) 1995, 1996 Guy Eric
- Schalnat, Group 42, Inc.
-
- Updated/rewritten per request in the libpng FAQ
- Copyright (c) 1995, 1996 Frank J. T. Wojcik
- December 18, 1995 & January 20, 1996
-
- TABLE OF CONTENTS
-
-    I. Introduction
-   II. Structures
-  III. Reading
-   IV. Writing
-    V. Simplified API
-   VI. Modifying/Customizing libpng
-  VII. MNG support
- VIII. Changes to Libpng from version 0.88
-   IX. Changes to Libpng from version 1.0.x to 1.2.x
-    X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
-   XI. Changes to Libpng from version 1.4.x to 1.5.x
-  XII. Changes to Libpng from version 1.5.x to 1.6.x
- XIII. Detecting libpng
-  XIV. Source code repository
-   XV. Coding style
-  XVI. Y2K Compliance in libpng
-
-I. Introduction
-
-This file describes how to use and modify the PNG reference library
-(known as libpng) for your own use.  In addition to this
-file, example.c is a good starting point for using the library, as
-it is heavily commented and should include everything most people
-will need.  We assume that libpng is already installed; see the
-INSTALL file for instructions on how to configure and install libpng.
-
-For examples of libpng usage, see the files "example.c", "pngtest.c",
-and the files in the "contrib" directory, all of which are included in
-the libpng distribution.
-
-Libpng was written as a companion to the PNG specification, as a way
-of reducing the amount of time and effort it takes to support the PNG
-file format in application programs.
-
-The PNG specification (second edition), November 2003, is available as
-a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at
-<http://www.w3.org/TR/2003/REC-PNG-20031110/
-The W3C and ISO documents have identical technical content.
-
-The PNG-1.2 specification is available at
-<http://www.libpng.org/pub/png/documents/>.  It is technically equivalent
-to the PNG specification (second edition) but has some additional material.
-
-The PNG-1.0 specification is available
-as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
-W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
-
-Some additional chunks are described in the special-purpose public chunks
-documents at <http://www.libpng.org/pub/png/documents/>.
-
-Other information
-about PNG, and the latest version of libpng, can be found at the PNG home
-page, <http://www.libpng.org/pub/png/>.
-
-Most users will not have to modify the library significantly; advanced
-users may want to modify it more.  All attempts were made to make it as
-complete as possible, while keeping the code easy to understand.
-Currently, this library only supports C.  Support for other languages
-is being considered.
-
-Libpng has been designed to handle multiple sessions at one time,
-to be easily modifiable, to be portable to the vast majority of
-machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
-to use.  The ultimate goal of libpng is to promote the acceptance of
-the PNG file format in whatever way possible.  While there is still
-work to be done (see the TODO file), libpng should cover the
-majority of the needs of its users.
-
-Libpng uses zlib for its compression and decompression of PNG files.
-Further information about zlib, and the latest version of zlib, can
-be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
-The zlib compression utility is a general purpose utility that is
-useful for more than PNG files, and can be used without libpng.
-See the documentation delivered with zlib for more details.
-You can usually find the source files for the zlib utility wherever you
-find the libpng source files.
-
-Libpng is thread safe, provided the threads are using different
-instances of the structures.  Each thread should have its own
-png_struct and png_info instances, and thus its own image.
-Libpng does not protect itself against two threads using the
-same instance of a structure.
-
-II. Structures
-
-There are two main structures that are important to libpng, png_struct
-and png_info.  Both are internal structures that are no longer exposed
-in the libpng interface (as of libpng 1.5.0).
-
-The png_info structure is designed to provide information about the
-PNG file.  At one time, the fields of png_info were intended to be
-directly accessible to the user.  However, this tended to cause problems
-with applications using dynamically loaded libraries, and as a result
-a set of interface functions for png_info (the png_get_*() and png_set_*()
-functions) was developed, and direct access to the png_info fields was
-deprecated..
-
-The png_struct structure is the object used by the library to decode a
-single image.  As of 1.5.0 this structure is also not exposed.
-
-Almost all libpng APIs require a pointer to a png_struct as the first argument.
-Many (in particular the png_set and png_get APIs) also require a pointer
-to png_info as the second argument.  Some application visible macros
-defined in png.h designed for basic data access (reading and writing
-integers in the PNG format) don't take a png_info pointer, but it's almost
-always safe to assume that a (png_struct*) has to be passed to call an API
-function.
-
-You can have more than one png_info structure associated with an image,
-as illustrated in pngtest.c, one for information valid prior to the
-IDAT chunks and another (called "end_info" below) for things after them.
-
-The png.h header file is an invaluable reference for programming with libpng.
-And while I'm on the topic, make sure you include the libpng header file:
-
-#include <png.h>
-
-and also (as of libpng-1.5.0) the zlib header file, if you need it:
-
-#include <zlib.h>
-
-Types
-
-The png.h header file defines a number of integral types used by the
-APIs.  Most of these are fairly obvious; for example types corresponding
-to integers of particular sizes and types for passing color values.
-
-One exception is how non-integral numbers are handled.  For application
-convenience most APIs that take such numbers have C (double) arguments;
-however, internally PNG, and libpng, use 32 bit signed integers and encode
-the value by multiplying by 100,000.  As of libpng 1.5.0 a convenience
-macro PNG_FP_1 is defined in png.h along with a type (png_fixed_point)
-which is simply (png_int_32).
-
-All APIs that take (double) arguments also have a matching API that
-takes the corresponding fixed point integer arguments.  The fixed point
-API has the same name as the floating point one with "_fixed" appended.
-The actual range of values permitted in the APIs is frequently less than
-the full range of (png_fixed_point) (-21474 to +21474).  When APIs require
-a non-negative argument the type is recorded as png_uint_32 above.  Consult
-the header file and the text below for more information.
-
-Special care must be take with sCAL chunk handling because the chunk itself
-uses non-integral values encoded as strings containing decimal floating point
-numbers.  See the comments in the header file.
-
-Configuration
-
-The main header file function declarations are frequently protected by C
-preprocessing directives of the form:
-
-    #ifdef PNG_feature_SUPPORTED
-    declare-function
-    #endif
-    ...
-    #ifdef PNG_feature_SUPPORTED
-    use-function
-    #endif
-
-The library can be built without support for these APIs, although a
-standard build will have all implemented APIs.  Application programs
-should check the feature macros before using an API for maximum
-portability.  From libpng 1.5.0 the feature macros set during the build
-of libpng are recorded in the header file "pnglibconf.h" and this file
-is always included by png.h.
-
-If you don't need to change the library configuration from the default, skip to
-the next section ("Reading").
-
-Notice that some of the makefiles in the 'scripts' directory and (in 1.5.0) all
-of the build project files in the 'projects' directory simply copy
-scripts/pnglibconf.h.prebuilt to pnglibconf.h.  This means that these build
-systems do not permit easy auto-configuration of the library - they only
-support the default configuration.
-
-The easiest way to make minor changes to the libpng configuration when
-auto-configuration is supported is to add definitions to the command line
-using (typically) CPPFLAGS.  For example:
-
-CPPFLAGS=-DPNG_NO_FLOATING_ARITHMETIC
-
-will change the internal libpng math implementation for gamma correction and
-other arithmetic calculations to fixed point, avoiding the need for fast
-floating point support.  The result can be seen in the generated pnglibconf.h -
-make sure it contains the changed feature macro setting.
-
-If you need to make more extensive configuration changes - more than one or two
-feature macro settings - you can either add -DPNG_USER_CONFIG to the build
-command line and put a list of feature macro settings in pngusr.h or you can set
-DFA_XTRA (a makefile variable) to a file containing the same information in the
-form of 'option' settings.
-
-A. Changing pnglibconf.h
-
-A variety of methods exist to build libpng.  Not all of these support
-reconfiguration of pnglibconf.h.  To reconfigure pnglibconf.h it must either be
-rebuilt from scripts/pnglibconf.dfa using awk or it must be edited by hand.
-
-Hand editing is achieved by copying scripts/pnglibconf.h.prebuilt to
-pnglibconf.h and changing the lines defining the supported features, paying
-very close attention to the 'option' information in scripts/pnglibconf.dfa
-that describes those features and their requirements.  This is easy to get
-wrong.
-
-B. Configuration using DFA_XTRA
-
-Rebuilding from pnglibconf.dfa is easy if a functioning 'awk', or a later
-variant such as 'nawk' or 'gawk', is available.  The configure build will
-automatically find an appropriate awk and build pnglibconf.h.
-The scripts/pnglibconf.mak file contains a set of make rules for doing the
-same thing if configure is not used, and many of the makefiles in the scripts
-directory use this approach.
-
-When rebuilding simply write a new file containing changed options and set
-DFA_XTRA to the name of this file.  This causes the build to append the new file
-to the end of scripts/pnglibconf.dfa.  The pngusr.dfa file should contain lines
-of the following forms:
-
-everything = off
-
-This turns all optional features off.  Include it at the start of pngusr.dfa to
-make it easier to build a minimal configuration.  You will need to turn at least
-some features on afterward to enable either reading or writing code, or both.
-
-option feature on
-option feature off
-
-Enable or disable a single feature.  This will automatically enable other
-features required by a feature that is turned on or disable other features that
-require a feature which is turned off.  Conflicting settings will cause an error
-message to be emitted by awk.
-
-setting feature default value
-
-Changes the default value of setting 'feature' to 'value'.  There are a small
-number of settings listed at the top of pnglibconf.h, they are documented in the
-source code.  Most of these values have performance implications for the library
-but most of them have no visible effect on the API.  Some can also be overridden
-from the API.
-
-This method of building a customized pnglibconf.h is illustrated in
-contrib/pngminim/*.  See the "$(PNGCONF):" target in the makefile and
-pngusr.dfa in these directories.
-
-C. Configuration using PNG_USER_CONFIG
-
-If -DPNG_USER_CONFIG is added to the CPPFLAGS when pnglibconf.h is built,
-the file pngusr.h will automatically be included before the options in
-scripts/pnglibconf.dfa are processed.  Your pngusr.h file should contain only
-macro definitions turning features on or off or setting settings.
-
-Apart from the global setting "everything = off" all the options listed above
-can be set using macros in pngusr.h:
-
-#define PNG_feature_SUPPORTED
-
-is equivalent to:
-
-option feature on
-
-#define PNG_NO_feature
-
-is equivalent to:
-
-option feature off
-
-#define PNG_feature value
-
-is equivalent to:
-
-setting feature default value
-
-Notice that in both cases, pngusr.dfa and pngusr.h, the contents of the
-pngusr file you supply override the contents of scripts/pnglibconf.dfa
-
-If confusing or incomprehensible behavior results it is possible to
-examine the intermediate file pnglibconf.dfn to find the full set of
-dependency information for each setting and option.  Simply locate the
-feature in the file and read the C comments that precede it.
-
-This method is also illustrated in the contrib/pngminim/* makefiles and
-pngusr.h.
-
-III. Reading
-
-We'll now walk you through the possible functions to call when reading
-in a PNG file sequentially, briefly explaining the syntax and purpose
-of each one.  See example.c and png.h for more detail.  While
-progressive reading is covered in the next section, you will still
-need some of the functions discussed in this section to read a PNG
-file.
-
-Setup
-
-You will want to do the I/O initialization(*) before you get into libpng,
-so if it doesn't work, you don't have much to undo.  Of course, you
-will also want to insure that you are, in fact, dealing with a PNG
-file.  Libpng provides a simple check to see if a file is a PNG file.
-To use it, pass in the first 1 to 8 bytes of the file to the function
-png_sig_cmp(), and it will return 0 (false) if the bytes match the
-corresponding bytes of the PNG signature, or nonzero (true) otherwise.
-Of course, the more bytes you pass in, the greater the accuracy of the
-prediction.
-
-If you are intending to keep the file pointer open for use in libpng,
-you must ensure you don't read more than 8 bytes from the beginning
-of the file, and you also have to make a call to png_set_sig_bytes_read()
-with the number of bytes you read from the beginning.  Libpng will
-then only check the bytes (if any) that your program didn't read.
-
-(*): If you are not using the standard I/O functions, you will need
-to replace them with custom functions.  See the discussion under
-Customizing libpng.
-
-
-    FILE *fp = fopen(file_name, "rb");
-    if (!fp)
-    {
-       return (ERROR);
-    }
-
-    fread(header, 1, number, fp);
-    is_png = !png_sig_cmp(header, 0, number);
-
-    if (!is_png)
-    {
-       return (NOT_PNG);
-    }
-
-
-Next, png_struct and png_info need to be allocated and initialized.  In
-order to ensure that the size of these structures is correct even with a
-dynamically linked libpng, there are functions to initialize and
-allocate the structures.  We also pass the library version, optional
-pointers to error handling functions, and a pointer to a data struct for
-use by the error functions, if necessary (the pointer and functions can
-be NULL if the default error handlers are to be used).  See the section
-on Changes to Libpng below regarding the old initialization functions.
-The structure allocation functions quietly return NULL if they fail to
-create the structure, so your application should check for that.
-
-    png_structp png_ptr = png_create_read_struct
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-       return (ERROR);
-
-    png_infop info_ptr = png_create_info_struct(png_ptr);
-
-    if (!info_ptr)
-    {
-       png_destroy_read_struct(&png_ptr,
-           (png_infopp)NULL, (png_infopp)NULL);
-       return (ERROR);
-    }
-
-If you want to use your own memory allocation routines,
-use a libpng that was built with PNG_USER_MEM_SUPPORTED defined, and use
-png_create_read_struct_2() instead of png_create_read_struct():
-
-    png_structp png_ptr = png_create_read_struct_2
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn, (png_voidp)
-        user_mem_ptr, user_malloc_fn, user_free_fn);
-
-The error handling routines passed to png_create_read_struct()
-and the memory alloc/free routines passed to png_create_struct_2()
-are only necessary if you are not using the libpng supplied error
-handling and memory alloc/free functions.
-
-When libpng encounters an error, it expects to longjmp back
-to your routine.  Therefore, you will need to call setjmp and pass
-your png_jmpbuf(png_ptr).  If you read the file from different
-routines, you will need to update the longjmp buffer every time you enter
-a new routine that will call a png_*() function.
-
-See your documentation of setjmp/longjmp for your compiler for more
-information on setjmp/longjmp.  See the discussion on libpng error
-handling in the Customizing Libpng section below for more information
-on the libpng error handling.  If an error occurs, and libpng longjmp's
-back to your setjmp, you will want to call png_destroy_read_struct() to
-free any memory.
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           &end_info);
-       fclose(fp);
-       return (ERROR);
-    }
-
-Pass (png_infopp)NULL instead of &end_info if you didn't create
-an end_info structure.
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_NO_SETJMP, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-You can #define PNG_ABORT() to a function that does something
-more useful than abort(), as long as your function does not
-return.
-
-Now you need to set up the input code.  The default for libpng is to
-use the C function fread().  If you use this, you will need to pass a
-valid FILE * in the function png_init_io().  Be sure that the file is
-opened in binary mode.  If you wish to handle reading data in another
-way, you need not call the png_init_io() function, but you must then
-implement the libpng I/O methods discussed in the Customizing Libpng
-section below.
-
-    png_init_io(png_ptr, fp);
-
-If you had previously opened the file and read any of the signature from
-the beginning in order to see if this was a PNG file, you need to let
-libpng know that there are some bytes missing from the start of the file.
-
-    png_set_sig_bytes(png_ptr, number);
-
-You can change the zlib compression buffer size to be used while
-reading compressed data with
-
-    png_set_compression_buffer_size(png_ptr, buffer_size);
-
-where the default size is 8192 bytes.  Note that the buffer size
-is changed immediately and the buffer is reallocated immediately,
-instead of setting a flag to be acted upon later.
-
-If you want CRC errors to be handled in a different manner than
-the default, use
-
-    png_set_crc_action(png_ptr, crit_action, ancil_action);
-
-The values for png_set_crc_action() say how libpng is to handle CRC errors in
-ancillary and critical chunks, and whether to use the data contained
-therein.  Note that it is impossible to "discard" data in a critical
-chunk.
-
-Choices for (int) crit_action are
-   PNG_CRC_DEFAULT      0  error/quit
-   PNG_CRC_ERROR_QUIT   1  error/quit
-   PNG_CRC_WARN_USE     3  warn/use data
-   PNG_CRC_QUIET_USE    4  quiet/use data
-   PNG_CRC_NO_CHANGE    5  use the current value
-
-Choices for (int) ancil_action are
-   PNG_CRC_DEFAULT      0  error/quit
-   PNG_CRC_ERROR_QUIT   1  error/quit
-   PNG_CRC_WARN_DISCARD 2  warn/discard data
-   PNG_CRC_WARN_USE     3  warn/use data
-   PNG_CRC_QUIET_USE    4  quiet/use data
-   PNG_CRC_NO_CHANGE    5  use the current value
-
-Setting up callback code
-
-You can set up a callback function to handle any unknown chunks in the
-input stream. You must supply the function
-
-    read_chunk_callback(png_structp png_ptr,
-         png_unknown_chunkp chunk);
-    {
-       /* The unknown chunk structure contains your
-          chunk data, along with similar data for any other
-          unknown chunks: */
-
-           png_byte name[5];
-           png_byte *data;
-           png_size_t size;
-
-       /* Note that libpng has already taken care of
-          the CRC handling */
-
-       /* put your code here.  Search for your chunk in the
-          unknown chunk structure, process it, and return one
-          of the following: */
-
-       return (-n); /* chunk had an error */
-       return (0); /* did not recognize */
-       return (n); /* success */
-    }
-
-(You can give your function another name that you like instead of
-"read_chunk_callback")
-
-To inform libpng about your function, use
-
-    png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
-        read_chunk_callback);
-
-This names not only the callback function, but also a user pointer that
-you can retrieve with
-
-    png_get_user_chunk_ptr(png_ptr);
-
-If you call the png_set_read_user_chunk_fn() function, then all unknown
-chunks which the callback does not handle will be saved when read.  You can
-cause them to be discarded by returning '1' ("handled") instead of '0'.  This
-behavior will change in libpng 1.7 and the default handling set by the
-png_set_keep_unknown_chunks() function, described below, will be used when the
-callback returns 0.  If you want the existing behavior you should set the global
-default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
-versions of libpng and with 1.7.  Libpng 1.6 issues a warning if you keep the
-default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
-
-At this point, you can set up a callback function that will be
-called after each row has been read, which you can use to control
-a progress meter or the like.  It's demonstrated in pngtest.c.
-You must supply a function
-
-    void read_row_callback(png_structp png_ptr,
-       png_uint_32 row, int pass);
-    {
-      /* put your code here */
-    }
-
-(You can give it another name that you like instead of "read_row_callback")
-
-To inform libpng about your function, use
-
-    png_set_read_status_fn(png_ptr, read_row_callback);
-
-When this function is called the row has already been completely processed and
-the 'row' and 'pass' refer to the next row to be handled.  For the
-non-interlaced case the row that was just handled is simply one less than the
-passed in row number, and pass will always be 0.  For the interlaced case the
-same applies unless the row value is 0, in which case the row just handled was
-the last one from one of the preceding passes.  Because interlacing may skip a
-pass you cannot be sure that the preceding pass is just 'pass-1', if you really
-need to know what the last pass is record (row,pass) from the callback and use
-the last recorded value each time.
-
-As with the user transform you can find the output row using the
-PNG_ROW_FROM_PASS_ROW macro.
-
-Unknown-chunk handling
-
-Now you get to set the way the library processes unknown chunks in the
-input PNG stream. Both known and unknown chunks will be read.  Normal
-behavior is that known chunks will be parsed into information in
-various info_ptr members while unknown chunks will be discarded. This
-behavior can be wasteful if your application will never use some known
-chunk types. To change this, you can call:
-
-    png_set_keep_unknown_chunks(png_ptr, keep,
-        chunk_list, num_chunks);
-
-    keep       - 0: default unknown chunk handling
-                 1: ignore; do not keep
-                 2: keep only if safe-to-copy
-                 3: keep even if unsafe-to-copy
-
-               You can use these definitions:
-                 PNG_HANDLE_CHUNK_AS_DEFAULT   0
-                 PNG_HANDLE_CHUNK_NEVER        1
-                 PNG_HANDLE_CHUNK_IF_SAFE      2
-                 PNG_HANDLE_CHUNK_ALWAYS       3
-
-    chunk_list - list of chunks affected (a byte string,
-                 five bytes per chunk, NULL or '\0' if
-                 num_chunks is positive; ignored if
-                 numchunks <= 0).
-
-    num_chunks - number of chunks affected; if 0, all
-                 unknown chunks are affected.  If positive,
-                 only the chunks in the list are affected,
-                 and if negative all unknown chunks and
-                 all known chunks except for the IHDR,
-                 PLTE, tRNS, IDAT, and IEND chunks are
-                 affected.
-
-Unknown chunks declared in this way will be saved as raw data onto a
-list of png_unknown_chunk structures.  If a chunk that is normally
-known to libpng is named in the list, it will be handled as unknown,
-according to the "keep" directive.  If a chunk is named in successive
-instances of png_set_keep_unknown_chunks(), the final instance will
-take precedence.  The IHDR and IEND chunks should not be named in
-chunk_list; if they are, libpng will process them normally anyway.
-If you know that your application will never make use of some particular
-chunks, use PNG_HANDLE_CHUNK_NEVER (or 1) as demonstrated below.
-
-Here is an example of the usage of png_set_keep_unknown_chunks(),
-where the private "vpAg" chunk will later be processed by a user chunk
-callback function:
-
-    png_byte vpAg[5]={118, 112,  65, 103, (png_byte) '\0'};
-
-    #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-      png_byte unused_chunks[]=
-      {
-        104,  73,  83,  84, (png_byte) '\0',   /* hIST */
-        105,  84,  88, 116, (png_byte) '\0',   /* iTXt */
-        112,  67,  65,  76, (png_byte) '\0',   /* pCAL */
-        115,  67,  65,  76, (png_byte) '\0',   /* sCAL */
-        115,  80,  76,  84, (png_byte) '\0',   /* sPLT */
-        116,  73,  77,  69, (png_byte) '\0',   /* tIME */
-      };
-    #endif
-
-    ...
-
-    #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-      /* ignore all unknown chunks
-       * (use global setting "2" for libpng16 and earlier):
-       */
-      png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
-
-      /* except for vpAg: */
-      png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
-
-      /* also ignore unused known chunks: */
-      png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
-         (int)(sizeof unused_chunks)/5);
-    #endif
-
-User limits
-
-The PNG specification allows the width and height of an image to be as
-large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
-Larger images will be rejected immediately with a png_error() call. If
-you wish to reduce these limits, you can use
-
-   png_set_user_limits(png_ptr, width_max, height_max);
-
-to set your own limits (libpng may reject some very wide images
-anyway because of potential buffer overflow conditions).
-
-You should put this statement after you create the PNG structure and
-before calling png_read_info(), png_read_png(), or png_process_data().
-
-When writing a PNG datastream, put this statement before calling
-png_write_info() or png_write_png().
-
-If you need to retrieve the limits that are being applied, use
-
-   width_max = png_get_user_width_max(png_ptr);
-   height_max = png_get_user_height_max(png_ptr);
-
-The PNG specification sets no limit on the number of ancillary chunks
-allowed in a PNG datastream.  You can impose a limit on the total number
-of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
-
-   png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
-
-where 0x7fffffffL means unlimited.  You can retrieve this limit with
-
-   chunk_cache_max = png_get_chunk_cache_max(png_ptr);
-
-You can also set a limit on the amount of memory that a compressed chunk
-other than IDAT can occupy, with
-
-   png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
-
-and you can retrieve the limit with
-
-   chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);
-
-Any chunks that would cause either of these limits to be exceeded will
-be ignored.
-
-Information about your system
-
-If you intend to display the PNG or to incorporate it in other image data you
-need to tell libpng information about your display or drawing surface so that
-libpng can convert the values in the image to match the display.
-
-From libpng-1.5.4 this information can be set before reading the PNG file
-header.  In earlier versions png_set_gamma() existed but behaved incorrectly if
-called before the PNG file header had been read and png_set_alpha_mode() did not
-exist.
-
-If you need to support versions prior to libpng-1.5.4 test the version number
-as illustrated below using "PNG_LIBPNG_VER >= 10504" and follow the procedures
-described in the appropriate manual page.
-
-You give libpng the encoding expected by your system expressed as a 'gamma'
-value.  You can also specify a default encoding for the PNG file in
-case the required information is missing from the file.  By default libpng
-assumes that the PNG data matches your system, to keep this default call:
-
-   png_set_gamma(png_ptr, screen_gamma, output_gamma);
-
-or you can use the fixed point equivalent:
-
-   png_set_gamma_fixed(png_ptr, PNG_FP_1*screen_gamma,
-      PNG_FP_1*output_gamma);
-
-If you don't know the gamma for your system it is probably 2.2 - a good
-approximation to the IEC standard for display systems (sRGB).  If images are
-too contrasty or washed out you got the value wrong - check your system
-documentation!
-
-Many systems permit the system gamma to be changed via a lookup table in the
-display driver, a few systems, including older Macs, change the response by
-default.  As of 1.5.4 three special values are available to handle common
-situations:
-
-   PNG_DEFAULT_sRGB: Indicates that the system conforms to the
-                     IEC 61966-2-1 standard.  This matches almost
-                     all systems.
-   PNG_GAMMA_MAC_18: Indicates that the system is an older
-                     (pre Mac OS 10.6) Apple Macintosh system with
-                     the default settings.
-   PNG_GAMMA_LINEAR: Just the fixed point value for 1.0 - indicates
-                     that the system expects data with no gamma
-                     encoding.
-
-You would use the linear (unencoded) value if you need to process the pixel
-values further because this avoids the need to decode and re-encode each
-component value whenever arithmetic is performed.  A lot of graphics software
-uses linear values for this reason, often with higher precision component values
-to preserve overall accuracy.
-
-
-The output_gamma value expresses how to decode the output values, not how
-they are encoded.  The values used correspond to the normal numbers used to
-describe the overall gamma of a computer display system; for example 2.2 for
-an sRGB conformant system.  The values are scaled by 100000 in the _fixed
-version of the API (so 220000 for sRGB.)
-
-The inverse of the value is always used to provide a default for the PNG file
-encoding if it has no gAMA chunk and if png_set_gamma() has not been called
-to override the PNG gamma information.
-
-When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode
-opaque pixels however pixels with lower alpha values are not encoded,
-regardless of the output gamma setting.
-
-When the standard Porter Duff handling is requested with mode 1 the output
-encoding is set to be linear and the output_gamma value is only relevant
-as a default for input data that has no gamma information.  The linear output
-encoding will be overridden if png_set_gamma() is called - the results may be
-highly unexpected!
-
-The following numbers are derived from the sRGB standard and the research
-behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of
-0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing
-correction required to take account of any differences in the color
-environment of the original scene and the intended display environment; the
-value expresses how to *decode* the image for display, not how the original
-data was *encoded*.
-
-sRGB provides a peg for the PNG standard by defining a viewing environment.
-sRGB itself, and earlier TV standards, actually use a more complex transform
-(a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is
-limited to simple power laws.)  By saying that an image for direct display on
-an sRGB conformant system should be stored with a gAMA chunk value of 45455
-(11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification
-makes it possible to derive values for other display systems and
-environments.
-
-The Mac value is deduced from the sRGB based on an assumption that the actual
-extra viewing correction used in early Mac display systems was implemented as
-a power 1.45 lookup table.
-
-Any system where a programmable lookup table is used or where the behavior of
-the final display device characteristics can be changed requires system
-specific code to obtain the current characteristic.  However this can be
-difficult and most PNG gamma correction only requires an approximate value.
-
-By default, if png_set_alpha_mode() is not called, libpng assumes that all
-values are unencoded, linear, values and that the output device also has a
-linear characteristic.  This is only very rarely correct - it is invariably
-better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the
-default if you don't know what the right answer is!
-
-The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS
-10.6) which used a correction table to implement a somewhat lower gamma on an
-otherwise sRGB system.
-
-Both these values are reserved (not simple gamma values) in order to allow
-more precise correction internally in the future.
-
-NOTE: the values can be passed to either the fixed or floating
-point APIs, but the floating point API will also accept floating point
-values.
-
-The second thing you may need to tell libpng about is how your system handles
-alpha channel information.  Some, but not all, PNG files contain an alpha
-channel.  To display these files correctly you need to compose the data onto a
-suitable background, as described in the PNG specification.
-
-Libpng only supports composing onto a single color (using png_set_background;
-see below).  Otherwise you must do the composition yourself and, in this case,
-you may need to call png_set_alpha_mode:
-
-   #if PNG_LIBPNG_VER >= 10504
-      png_set_alpha_mode(png_ptr, mode, screen_gamma);
-   #else
-      png_set_gamma(png_ptr, screen_gamma, 1.0/screen_gamma);
-   #endif
-
-The screen_gamma value is the same as the argument to png_set_gamma; however,
-how it affects the output depends on the mode.  png_set_alpha_mode() sets the
-file gamma default to 1/screen_gamma, so normally you don't need to call
-png_set_gamma.  If you need different defaults call png_set_gamma() before
-png_set_alpha_mode() - if you call it after it will override the settings made
-by png_set_alpha_mode().
-
-The mode is as follows:
-
-    PNG_ALPHA_PNG: The data is encoded according to the PNG
-specification.  Red, green and blue, or gray, components are
-gamma encoded color values and are not premultiplied by the
-alpha value.  The alpha value is a linear measure of the
-contribution of the pixel to the corresponding final output pixel.
-
-You should normally use this format if you intend to perform
-color correction on the color values; most, maybe all, color
-correction software has no handling for the alpha channel and,
-anyway, the math to handle pre-multiplied component values is
-unnecessarily complex.
-
-Before you do any arithmetic on the component values you need
-to remove the gamma encoding and multiply out the alpha
-channel.  See the PNG specification for more detail.  It is
-important to note that when an image with an alpha channel is
-scaled, linear encoded, pre-multiplied component values must
-be used!
-
-The remaining modes assume you don't need to do any further color correction or
-that if you do, your color correction software knows all about alpha (it
-probably doesn't!).  They 'associate' the alpha with the color information by
-storing color channel values that have been scaled by the alpha.  The
-advantage is that the color channels can be resampled (the image can be
-scaled) in this form.  The disadvantage is that normal practice is to store
-linear, not (gamma) encoded, values and this requires 16-bit channels for
-still images rather than the 8-bit channels that are just about sufficient if
-gamma encoding is used.  In addition all non-transparent pixel values,
-including completely opaque ones, must be gamma encoded to produce the final
-image.  These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes
-described below (the latter being the two common names for associated alpha
-color channels). Note that PNG files always contain non-associated color
-channels; png_set_alpha_mode() with one of the modes causes the decoder to
-convert the pixels to an associated form before returning them to your
-application. 
-
-Since it is not necessary to perform arithmetic on opaque color values so
-long as they are not to be resampled and are in the final color space it is
-possible to optimize the handling of alpha by storing the opaque pixels in
-the PNG format (adjusted for the output color space) while storing partially
-opaque pixels in the standard, linear, format.  The accuracy required for
-standard alpha composition is relatively low, because the pixels are
-isolated, therefore typically the accuracy loss in storing 8-bit linear
-values is acceptable.  (This is not true if the alpha channel is used to
-simulate transparency over large areas - use 16 bits or the PNG mode in
-this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is
-treated as opaque only if the alpha value is equal to the maximum value.
-
-    PNG_ALPHA_STANDARD:  The data libpng produces is encoded in the
-standard way assumed by most correctly written graphics software.
-The gamma encoding will be removed by libpng and the
-linear component values will be pre-multiplied by the
-alpha channel.
-
-With this format the final image must be re-encoded to
-match the display gamma before the image is displayed.
-If your system doesn't do that, yet still seems to
-perform arithmetic on the pixels without decoding them,
-it is broken - check out the modes below.
-
-With PNG_ALPHA_STANDARD libpng always produces linear
-component values, whatever screen_gamma you supply.  The
-screen_gamma value is, however, used as a default for
-the file gamma if the PNG file has no gamma information.
-
-If you call png_set_gamma() after png_set_alpha_mode() you
-will override the linear encoding.  Instead the
-pre-multiplied pixel values will be gamma encoded but
-the alpha channel will still be linear.  This may
-actually match the requirements of some broken software,
-but it is unlikely.
-
-While linear 8-bit data is often used it has
-insufficient precision for any image with a reasonable
-dynamic range.  To avoid problems, and if your software
-supports it, use png_set_expand_16() to force all
-components to 16 bits.
-
-    PNG_ALPHA_OPTIMIZED: This mode is the same as PNG_ALPHA_STANDARD
-except that completely opaque pixels are gamma encoded according to
-the screen_gamma value.  Pixels with alpha less than 1.0
-will still have linear components.
-
-Use this format if you have control over your
-compositing software and so don't do other arithmetic
-(such as scaling) on the data you get from libpng.  Your
-compositing software can simply copy opaque pixels to
-the output but still has linear values for the
-non-opaque pixels.
-
-In normal compositing, where the alpha channel encodes
-partial pixel coverage (as opposed to broad area
-translucency), the inaccuracies of the 8-bit
-representation of non-opaque pixels are irrelevant.
-
-You can also try this format if your software is broken;
-it might look better.
-
-    PNG_ALPHA_BROKEN: This is PNG_ALPHA_STANDARD; however, all component
-values, including the alpha channel are gamma encoded.  This is
-broken because, in practice, no implementation that uses this choice
-correctly undoes the encoding before handling alpha composition.  Use this
-choice only if other serious errors in the software or hardware you use
-mandate it.  In most cases of broken software or hardware the bug in the
-final display manifests as a subtle halo around composited parts of the
-image.  You may not even perceive this as a halo; the composited part of
-the image may simply appear separate from the background, as though it had
-been cut out of paper and pasted on afterward.
-
-If you don't have to deal with bugs in software or hardware, or if you can fix
-them, there are three recommended ways of using png_set_alpha_mode():
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_PNG,
-       screen_gamma);
-
-You can do color correction on the result (libpng does not currently
-support color correction internally).  When you handle the alpha channel
-you need to undo the gamma encoding and multiply out the alpha.
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_STANDARD,
-       screen_gamma);
-   png_set_expand_16(png_ptr);
-
-If you are using the high level interface, don't call png_set_expand_16();
-instead pass PNG_TRANSFORM_EXPAND_16 to the interface.
-
-With this mode you can't do color correction, but you can do arithmetic,
-including composition and scaling, on the data without further processing.
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_OPTIMIZED,
-       screen_gamma);
-
-You can avoid the expansion to 16-bit components with this mode, but you
-lose the ability to scale the image or perform other linear arithmetic.
-All you can do is compose the result onto a matching output.  Since this
-mode is libpng-specific you also need to write your own composition
-software.
-
-The following are examples of calls to png_set_alpha_mode to achieve the
-required overall gamma correction and, where necessary, alpha
-premultiplication.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
-
-This is the default libpng handling of the alpha channel - it is not
-pre-multiplied into the color components.  In addition the call states
-that the output is for a sRGB system and causes all PNG files without gAMA
-chunks to be assumed to be encoded using sRGB.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
-
-In this case the output is assumed to be something like an sRGB conformant
-display preceeded by a power-law lookup table of power 1.45.  This is how
-early Mac systems behaved.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
-
-This is the classic Jim Blinn approach and will work in academic
-environments where everything is done by the book.  It has the shortcoming
-of assuming that input PNG data with no gamma information is linear - this
-is unlikely to be correct unless the PNG files where generated locally.
-Most of the time the output precision will be so low as to show
-significant banding in dark areas of the image.
-
-    png_set_expand_16(pp);
-    png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
-
-This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
-are assumed to have the sRGB encoding if not marked with a gamma value and
-the output is always 16 bits per component.  This permits accurate scaling
-and processing of the data.  If you know that your input PNG files were
-generated locally you might need to replace PNG_DEFAULT_sRGB with the
-correct value for your system.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
-
-If you just need to composite the PNG image onto an existing background
-and if you control the code that does this you can use the optimization
-setting.  In this case you just copy completely opaque pixels to the
-output.  For pixels that are not completely transparent (you just skip
-those) you do the composition math using png_composite or png_composite_16
-below then encode the resultant 8-bit or 16-bit values to match the output
-encoding.
-
-    Other cases
-
-If neither the PNG nor the standard linear encoding work for you because
-of the software or hardware you use then you have a big problem.  The PNG
-case will probably result in halos around the image.  The linear encoding
-will probably result in a washed out, too bright, image (it's actually too
-contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
-substantially reduce the halos.  Alternatively try:
-
-    png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
-
-This option will also reduce the halos, but there will be slight dark
-halos round the opaque parts of the image where the background is light.
-In the OPTIMIZED mode the halos will be light halos where the background
-is dark.  Take your pick - the halos are unavoidable unless you can get
-your hardware/software fixed!  (The OPTIMIZED approach is slightly
-faster.)
-
-When the default gamma of PNG files doesn't match the output gamma.
-If you have PNG files with no gamma information png_set_alpha_mode allows
-you to provide a default gamma, but it also sets the ouput gamma to the
-matching value.  If you know your PNG files have a gamma that doesn't
-match the output you can take advantage of the fact that
-png_set_alpha_mode always sets the output gamma but only sets the PNG
-default if it is not already set:
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
-
-The first call sets both the default and the output gamma values, the
-second call overrides the output gamma without changing the default.  This
-is easier than achieving the same effect with png_set_gamma.  You must use
-PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
-fire if more than one call to png_set_alpha_mode and png_set_background is
-made in the same read operation, however multiple calls with PNG_ALPHA_PNG
-are ignored.
-
-If you don't need, or can't handle, the alpha channel you can call
-png_set_background() to remove it by compositing against a fixed color.  Don't
-call png_set_strip_alpha() to do this - it will leave spurious pixel values in
-transparent parts of this image.
-
-   png_set_background(png_ptr, &background_color,
-       PNG_BACKGROUND_GAMMA_SCREEN, 0, 1);
-
-The background_color is an RGB or grayscale value according to the data format
-libpng will produce for you.  Because you don't yet know the format of the PNG
-file, if you call png_set_background at this point you must arrange for the
-format produced by libpng to always have 8-bit or 16-bit components and then
-store the color as an 8-bit or 16-bit color as appropriate.  The color contains
-separate gray and RGB component values, so you can let libpng produce gray or
-RGB output according to the input format, but low bit depth grayscale images
-must always be converted to at least 8-bit format.  (Even though low bit depth
-grayscale images can't have an alpha channel they can have a transparent
-color!)
-
-You set the transforms you need later, either as flags to the high level
-interface or libpng API calls for the low level interface.  For reference the
-settings and API calls required are:
-
-8-bit values:
-   PNG_TRANSFORM_SCALE_16 | PNG_EXPAND
-   png_set_expand(png_ptr); png_set_scale_16(png_ptr);
-
-   If you must get exactly the same inaccurate results
-   produced by default in versions prior to libpng-1.5.4,
-   use PNG_TRANSFORM_STRIP_16 and png_set_strip_16(png_ptr)
-   instead.
-
-16-bit values:
-   PNG_TRANSFORM_EXPAND_16
-   png_set_expand_16(png_ptr);
-
-In either case palette image data will be expanded to RGB.  If you just want
-color data you can add PNG_TRANSFORM_GRAY_TO_RGB or png_set_gray_to_rgb(png_ptr)
-to the list.
-
-Calling png_set_background before the PNG file header is read will not work
-prior to libpng-1.5.4.  Because the failure may result in unexpected warnings or
-errors it is therefore much safer to call png_set_background after the head has
-been read.  Unfortunately this means that prior to libpng-1.5.4 it cannot be
-used with the high level interface.
-
-The high-level read interface
-
-At this point there are two ways to proceed; through the high-level
-read interface, or through a sequence of low-level read operations.
-You can use the high-level interface if (a) you are willing to read
-the entire image into memory, and (b) the input transformations
-you want to do are limited to the following set:
-
-    PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_SCALE_16      Strip 16-bit samples to
-                                8-bit accurately
-    PNG_TRANSFORM_STRIP_16      Chop 16-bit samples to
-                                8-bit less accurately
-    PNG_TRANSFORM_STRIP_ALPHA   Discard the alpha channel
-    PNG_TRANSFORM_PACKING       Expand 1, 2 and 4-bit
-                                samples to bytes
-    PNG_TRANSFORM_PACKSWAP      Change order of packed
-                                pixels to LSB first
-    PNG_TRANSFORM_EXPAND        Perform set_expand()
-    PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
-    PNG_TRANSFORM_SHIFT         Normalize pixels to the
-                                sBIT depth
-    PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
-                                to BGRA
-    PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
-                                to AG
-    PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
-                                to transparency
-    PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
-    PNG_TRANSFORM_GRAY_TO_RGB   Expand grayscale samples
-                                to RGB (or GA to RGBA)
-    PNG_TRANSFORM_EXPAND_16     Expand samples to 16 bits
-
-(This excludes setting a background color, doing gamma transformation,
-quantizing, and setting filler.)  If this is the case, simply do this:
-
-    png_read_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some
-set of transformation flags.  This call is equivalent to png_read_info(),
-followed the set of transformations indicated by the transform mask,
-then png_read_image(), and finally png_read_end().
-
-(The final parameter of this call is not yet used.  Someday it might point
-to transformation parameters required by some future input transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_read_png().
-
-After you have called png_read_png(), you can retrieve the image data
-with
-
-   row_pointers = png_get_rows(png_ptr, info_ptr);
-
-where row_pointers is an array of pointers to the pixel data for each row:
-
-   png_bytep row_pointers[height];
-
-If you know your image size and pixel size ahead of time, you can allocate
-row_pointers prior to calling png_read_png() with
-
-   if (height > PNG_UINT_32_MAX/(sizeof (png_byte)))
-      png_error (png_ptr,
-          "Image is too tall to process in memory");
-
-   if (width > PNG_UINT_32_MAX/pixel_size)
-      png_error (png_ptr,
-          "Image is too wide to process in memory");
-
-   row_pointers = png_malloc(png_ptr,
-       height*(sizeof (png_bytep)));
-
-   for (int i=0; i<height, i++)
-      row_pointers[i]=NULL;  /* security precaution */
-
-   for (int i=0; i<height, i++)
-      row_pointers[i]=png_malloc(png_ptr,
-          width*pixel_size);
-
-   png_set_rows(png_ptr, info_ptr, &row_pointers);
-
-Alternatively you could allocate your image in one big block and define
-row_pointers[i] to point into the proper places in your block.
-
-If you use png_set_rows(), the application is responsible for freeing
-row_pointers (and row_pointers[i], if they were separately allocated).
-
-If you don't allocate row_pointers ahead of time, png_read_png() will
-do it, and it'll be free'ed by libpng when you call png_destroy_*().
-
-The low-level read interface
-
-If you are going the low-level route, you are now ready to read all
-the file information up to the actual image data.  You do this with a
-call to png_read_info().
-
-    png_read_info(png_ptr, info_ptr);
-
-This will process all chunks up to but not including the image data.
-
-This also copies some of the data from the PNG file into the decode structure
-for use in later transformations.  Important information copied in is:
-
-1) The PNG file gamma from the gAMA chunk.  This overwrites the default value
-provided by an earlier call to png_set_gamma or png_set_alpha_mode.
-
-2) Prior to libpng-1.5.4 the background color from a bKGd chunk.  This
-damages the information provided by an earlier call to png_set_background
-resulting in unexpected behavior.  Libpng-1.5.4 no longer does this.
-
-3) The number of significant bits in each component value.  Libpng uses this to
-optimize gamma handling by reducing the internal lookup table sizes.
-
-4) The transparent color information from a tRNS chunk.  This can be modified by
-a later call to png_set_tRNS.
-
-Querying the info structure
-
-Functions are used to get the information from the info_ptr once it
-has been read.  Note that these fields may not be completely filled
-in until png_read_end() has read the chunk data following the image.
-
-    png_get_IHDR(png_ptr, info_ptr, &width, &height,
-       &bit_depth, &color_type, &interlace_type,
-       &compression_type, &filter_method);
-
-    width          - holds the width of the image
-                     in pixels (up to 2^31).
-
-    height         - holds the height of the image
-                     in pixels (up to 2^31).
-
-    bit_depth      - holds the bit depth of one of the
-                     image channels.  (valid values are
-                     1, 2, 4, 8, 16 and depend also on
-                     the color_type.  See also
-                     significant bits (sBIT) below).
-
-    color_type     - describes which color/alpha channels
-                         are present.
-                     PNG_COLOR_TYPE_GRAY
-                        (bit depths 1, 2, 4, 8, 16)
-                     PNG_COLOR_TYPE_GRAY_ALPHA
-                        (bit depths 8, 16)
-                     PNG_COLOR_TYPE_PALETTE
-                        (bit depths 1, 2, 4, 8)
-                     PNG_COLOR_TYPE_RGB
-                        (bit_depths 8, 16)
-                     PNG_COLOR_TYPE_RGB_ALPHA
-                        (bit_depths 8, 16)
-
-                     PNG_COLOR_MASK_PALETTE
-                     PNG_COLOR_MASK_COLOR
-                     PNG_COLOR_MASK_ALPHA
-
-    interlace_type - (PNG_INTERLACE_NONE or
-                     PNG_INTERLACE_ADAM7)
-
-    compression_type - (must be PNG_COMPRESSION_TYPE_BASE
-                     for PNG 1.0)
-
-    filter_method  - (must be PNG_FILTER_TYPE_BASE
-                     for PNG 1.0, and can also be
-                     PNG_INTRAPIXEL_DIFFERENCING if
-                     the PNG datastream is embedded in
-                     a MNG-1.0 datastream)
-
-    Any or all of interlace_type, compression_type, or
-    filter_method can be NULL if you are
-    not interested in their values.
-
-    Note that png_get_IHDR() returns 32-bit data into
-    the application's width and height variables.
-    This is an unsafe situation if these are 16-bit
-    variables.  In such situations, the
-    png_get_image_width() and png_get_image_height()
-    functions described below are safer.
-
-    width            = png_get_image_width(png_ptr,
-                         info_ptr);
-
-    height           = png_get_image_height(png_ptr,
-                         info_ptr);
-
-    bit_depth        = png_get_bit_depth(png_ptr,
-                         info_ptr);
-
-    color_type       = png_get_color_type(png_ptr,
-                         info_ptr);
-
-    interlace_type   = png_get_interlace_type(png_ptr,
-                         info_ptr);
-
-    compression_type = png_get_compression_type(png_ptr,
-                         info_ptr);
-
-    filter_method    = png_get_filter_type(png_ptr,
-                         info_ptr);
-
-    channels = png_get_channels(png_ptr, info_ptr);
-
-    channels       - number of channels of info for the
-                     color type (valid values are 1 (GRAY,
-                     PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
-                     4 (RGB_ALPHA or RGB + filler byte))
-
-    rowbytes = png_get_rowbytes(png_ptr, info_ptr);
-
-    rowbytes       - number of bytes needed to hold a row
-
-    signature = png_get_signature(png_ptr, info_ptr);
-
-    signature      - holds the signature read from the
-                     file (if any).  The data is kept in
-                     the same offset it would be if the
-                     whole signature were read (i.e. if an
-                     application had already read in 4
-                     bytes of signature before starting
-                     libpng, the remaining 4 bytes would
-                     be in signature[4] through signature[7]
-                     (see png_set_sig_bytes())).
-
-These are also important, but their validity depends on whether the chunk
-has been read.  The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
-png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
-data has been read, or zero if it is missing.  The parameters to the
-png_get_<chunk> are set directly if they are simple data types, or a
-pointer into the info_ptr is returned for any complex types.
-
-The colorspace data from gAMA, cHRM, sRGB, iCCP, and sBIT chunks
-is simply returned to give the application information about how the
-image was encoded.  Libpng itself only does transformations using the file
-gamma when combining semitransparent pixels with the background color, and,
-since libpng-1.6.0, when converting between 8-bit sRGB and 16-bit linear pixels
-within the simplified API.  Libpng also uses the file gamma when converting
-RGB to gray, beginning with libpng-1.0.5, if the application calls
-png_set_rgb_to_gray()).
-
-    png_get_PLTE(png_ptr, info_ptr, &palette,
-                     &num_palette);
-
-    palette        - the palette for the file
-                     (array of png_color)
-
-    num_palette    - number of entries in the palette
-
-    png_get_gAMA(png_ptr, info_ptr, &file_gamma);
-    png_get_gAMA_fixed(png_ptr, info_ptr, &int_file_gamma);
-
-    file_gamma     - the gamma at which the file is
-                     written (PNG_INFO_gAMA)
-
-    int_file_gamma - 100,000 times the gamma at which the
-                     file is written
-
-    png_get_cHRM(png_ptr, info_ptr,  &white_x, &white_y, &red_x,
-                     &red_y, &green_x, &green_y, &blue_x, &blue_y)
-    png_get_cHRM_XYZ(png_ptr, info_ptr, &red_X, &red_Y, &red_Z,
-                     &green_X, &green_Y, &green_Z, &blue_X, &blue_Y,
-                     &blue_Z)
-    png_get_cHRM_fixed(png_ptr, info_ptr, &int_white_x,
-                     &int_white_y, &int_red_x, &int_red_y,
-                     &int_green_x, &int_green_y, &int_blue_x,
-                     &int_blue_y)
-    png_get_cHRM_XYZ_fixed(png_ptr, info_ptr, &int_red_X, &int_red_Y,
-                     &int_red_Z, &int_green_X, &int_green_Y,
-                     &int_green_Z, &int_blue_X, &int_blue_Y,
-                     &int_blue_Z)
-
-    {white,red,green,blue}_{x,y}
-                     A color space encoding specified using the
-                     chromaticities of the end points and the
-                     white point. (PNG_INFO_cHRM)
-
-    {red,green,blue}_{X,Y,Z}
-                     A color space encoding specified using the
-                     encoding end points - the CIE tristimulus
-                     specification of the intended color of the red,
-                     green and blue channels in the PNG RGB data.
-                     The white point is simply the sum of the three
-                     end points. (PNG_INFO_cHRM)
-
-    png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
-
-    srgb_intent -    the rendering intent (PNG_INFO_sRGB)
-                     The presence of the sRGB chunk
-                     means that the pixel data is in the
-                     sRGB color space.  This chunk also
-                     implies specific values of gAMA and
-                     cHRM.
-
-    png_get_iCCP(png_ptr, info_ptr, &name,
-       &compression_type, &profile, &proflen);
-
-    name             - The profile name.
-
-    compression_type - The compression type; always
-                       PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
-                       You may give NULL to this argument to
-                       ignore it.
-
-    profile          - International Color Consortium color
-                       profile data. May contain NULs.
-
-    proflen          - length of profile data in bytes.
-
-    png_get_sBIT(png_ptr, info_ptr, &sig_bit);
-
-    sig_bit        - the number of significant bits for
-                     (PNG_INFO_sBIT) each of the gray,
-                     red, green, and blue channels,
-                     whichever are appropriate for the
-                     given color type (png_color_16)
-
-    png_get_tRNS(png_ptr, info_ptr, &trans_alpha,
-                     &num_trans, &trans_color);
-
-    trans_alpha    - array of alpha (transparency)
-                     entries for palette (PNG_INFO_tRNS)
-
-    num_trans      - number of transparent entries
-                     (PNG_INFO_tRNS)
-
-    trans_color    - graylevel or color sample values of
-                     the single transparent color for
-                     non-paletted images (PNG_INFO_tRNS)
-
-    png_get_hIST(png_ptr, info_ptr, &hist);
-                     (PNG_INFO_hIST)
-
-    hist           - histogram of palette (array of
-                     png_uint_16)
-
-    png_get_tIME(png_ptr, info_ptr, &mod_time);
-
-    mod_time       - time image was last modified
-                    (PNG_VALID_tIME)
-
-    png_get_bKGD(png_ptr, info_ptr, &background);
-
-    background     - background color (of type
-                     png_color_16p) (PNG_VALID_bKGD)
-                     valid 16-bit red, green and blue
-                     values, regardless of color_type
-
-    num_comments   = png_get_text(png_ptr, info_ptr,
-                     &text_ptr, &num_text);
-
-    num_comments   - number of comments
-
-    text_ptr       - array of png_text holding image
-                     comments
-
-    text_ptr[i].compression - type of compression used
-                 on "text" PNG_TEXT_COMPRESSION_NONE
-                           PNG_TEXT_COMPRESSION_zTXt
-                           PNG_ITXT_COMPRESSION_NONE
-                           PNG_ITXT_COMPRESSION_zTXt
-
-    text_ptr[i].key   - keyword for comment.  Must contain
-                         1-79 characters.
-
-    text_ptr[i].text  - text comments for current
-                         keyword.  Can be empty.
-
-    text_ptr[i].text_length - length of text string,
-                 after decompression, 0 for iTXt
-
-    text_ptr[i].itxt_length - length of itxt string,
-                 after decompression, 0 for tEXt/zTXt
-
-    text_ptr[i].lang  - language of comment (empty
-                         string for unknown).
-
-    text_ptr[i].lang_key  - keyword in UTF-8
-                         (empty string for unknown).
-
-    Note that the itxt_length, lang, and lang_key
-    members of the text_ptr structure only exist when the
-    library is built with iTXt chunk support.  Prior to
-    libpng-1.4.0 the library was built by default without
-    iTXt support. Also note that when iTXt is supported,
-    they contain NULL pointers when the "compression"
-    field contains PNG_TEXT_COMPRESSION_NONE or
-    PNG_TEXT_COMPRESSION_zTXt.
-
-    num_text       - number of comments (same as
-                     num_comments; you can put NULL here
-                     to avoid the duplication)
-
-    Note while png_set_text() will accept text, language,
-    and translated keywords that can be NULL pointers, the
-    structure returned by png_get_text will always contain
-    regular zero-terminated C strings.  They might be
-    empty strings but they will never be NULL pointers.
-
-    num_spalettes = png_get_sPLT(png_ptr, info_ptr,
-       &palette_ptr);
-
-    num_spalettes  - number of sPLT chunks read.
-
-    palette_ptr    - array of palette structures holding
-                     contents of one or more sPLT chunks
-                     read.
-
-    png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
-       &unit_type);
-
-    offset_x       - positive offset from the left edge
-                     of the screen (can be negative)
-
-    offset_y       - positive offset from the top edge
-                     of the screen (can be negative)
-
-    unit_type      - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
-    png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
-       &unit_type);
-
-    res_x          - pixels/unit physical resolution in
-                     x direction
-
-    res_y          - pixels/unit physical resolution in
-                     x direction
-
-    unit_type      - PNG_RESOLUTION_UNKNOWN,
-                     PNG_RESOLUTION_METER
-
-    png_get_sCAL(png_ptr, info_ptr, &unit, &width,
-       &height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-
-    height      - height of a pixel in physical scale units
-                 (width and height are doubles)
-
-    png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
-       &height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-                  (expressed as a string)
-
-    height      - height of a pixel in physical scale units
-                 (width and height are strings like "2.54")
-
-    num_unknown_chunks = png_get_unknown_chunks(png_ptr,
-       info_ptr, &unknowns)
-
-    unknowns          - array of png_unknown_chunk
-                        structures holding unknown chunks
-
-    unknowns[i].name  - name of unknown chunk
-
-    unknowns[i].data  - data of unknown chunk
-
-    unknowns[i].size  - size of unknown chunk's data
-
-    unknowns[i].location - position of chunk in file
-
-    The value of "i" corresponds to the order in which the
-    chunks were read from the PNG file or inserted with the
-    png_set_unknown_chunks() function.
-
-    The value of "location" is a bitwise "or" of
-
-         PNG_HAVE_IHDR  (0x01)
-         PNG_HAVE_PLTE  (0x02)
-         PNG_AFTER_IDAT (0x08)
-
-The data from the pHYs chunk can be retrieved in several convenient
-forms:
-
-    res_x = png_get_x_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_y = png_get_y_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_x_and_y = png_get_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_x = png_get_x_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    res_y = png_get_y_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    res_x_and_y = png_get_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
-       info_ptr)
-
-    Each of these returns 0 [signifying "unknown"] if
-       the data is not present or if res_x is 0;
-       res_x_and_y is 0 if res_x != res_y
-
-    Note that because of the way the resolutions are
-       stored internally, the inch conversions won't
-       come out to exactly even number.  For example,
-       72 dpi is stored as 0.28346 pixels/meter, and
-       when this is retrieved it is 71.9988 dpi, so
-       be sure to round the returned value appropriately
-       if you want to display a reasonable-looking result.
-
-The data from the oFFs chunk can be retrieved in several convenient
-forms:
-
-    x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
-
-    y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
-
-    x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
-
-    y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
-
-    Each of these returns 0 [signifying "unknown" if both
-       x and y are 0] if the data is not present or if the
-       chunk is present but the unit is the pixel.  The
-       remark about inexact inch conversions applies here
-       as well, because a value in inches can't always be
-       converted to microns and back without some loss
-       of precision.
-
-For more information, see the
-PNG specification for chunk contents.  Be careful with trusting
-rowbytes, as some of the transformations could increase the space
-needed to hold a row (expand, filler, gray_to_rgb, etc.).
-See png_read_update_info(), below.
-
-A quick word about text_ptr and num_text.  PNG stores comments in
-keyword/text pairs, one pair per chunk, with no limit on the number
-of text chunks, and a 2^31 byte limit on their size.  While there are
-suggested keywords, there is no requirement to restrict the use to these
-strings.  It is strongly suggested that keywords and text be sensible
-to humans (that's the point), so don't use abbreviations.  Non-printing
-symbols are not allowed.  See the PNG specification for more details.
-There is also no requirement to have text after the keyword.
-
-Keywords should be limited to 79 Latin-1 characters without leading or
-trailing spaces, but non-consecutive spaces are allowed within the
-keyword.  It is possible to have the same keyword any number of times.
-The text_ptr is an array of png_text structures, each holding a
-pointer to a language string, a pointer to a keyword and a pointer to
-a text string.  The text string, language code, and translated
-keyword may be empty or NULL pointers.  The keyword/text
-pairs are put into the array in the order that they are received.
-However, some or all of the text chunks may be after the image, so, to
-make sure you have read all the text chunks, don't mess with these
-until after you read the stuff after the image.  This will be
-mentioned again below in the discussion that goes with png_read_end().
-
-Input transformations
-
-After you've read the header information, you can set up the library
-to handle any special transformations of the image data.  The various
-ways to transform the data will be described in the order that they
-should occur.  This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths.
-
-Transformations you request are ignored if they don't have any meaning for a
-particular input data format.  However some transformations can have an effect
-as a result of a previous transformation.  If you specify a contradictory set of
-transformations, for example both adding and removing the alpha channel, you
-cannot predict the final result.
-
-The color used for the transparency values should be supplied in the same
-format/depth as the current image data.  It is stored in the same format/depth
-as the image data in a tRNS chunk, so this is what libpng expects for this data.
-
-The color used for the background value depends on the need_expand argument as
-described below.
-
-Data will be decoded into the supplied row buffers packed into bytes
-unless the library has been told to transform it into another format.
-For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called.  8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
-is called to insert filler bytes, either before or after each RGB triplet.
-16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_scale_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet.  Similarly, 8-bit or 16-bit grayscale data can
-be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
-or png_set_scale_16().
-
-The following code transforms grayscale images of less than 8 to 8 bits,
-changes paletted images to RGB, and adds a full alpha channel if there is
-transparency information in a tRNS chunk.  This is most useful on
-grayscale images with bit depths of 2 or 4 or if there is a multiple-image
-viewing application that wishes to treat all images in the same way.
-
-    if (color_type == PNG_COLOR_TYPE_PALETTE)
-        png_set_palette_to_rgb(png_ptr);
-
-    if (png_get_valid(png_ptr, info_ptr,
-        PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
-
-    if (color_type == PNG_COLOR_TYPE_GRAY &&
-        bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
-
-The first two functions are actually aliases for png_set_expand(), added
-in libpng version 1.0.4, with the function names expanded to improve code
-readability.  In some future version they may actually do different
-things.
-
-As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
-added.  It expands the sample depth without changing tRNS to alpha.
-
-As of libpng version 1.5.2, png_set_expand_16() was added.  It behaves as
-png_set_expand(); however, the resultant channels have 16 bits rather than 8.
-Use this when the output color or gray channels are made linear to avoid fairly
-severe accuracy loss.
-
-   if (bit_depth < 16)
-      png_set_expand_16(png_ptr);
-
-PNG can have files with 16 bits per channel.  If you only can handle
-8 bits per channel, this will strip the pixels down to 8-bit.
-
-    if (bit_depth == 16)
-#if PNG_LIBPNG_VER >= 10504
-       png_set_scale_16(png_ptr);
-#else
-       png_set_strip_16(png_ptr);
-#endif
-
-(The more accurate "png_set_scale_16()" API became available in libpng version
-1.5.4).
-
-If you need to process the alpha channel on the image separately from the image
-data (for example if you convert it to a bitmap mask) it is possible to have
-libpng strip the channel leaving just RGB or gray data:
-
-    if (color_type & PNG_COLOR_MASK_ALPHA)
-       png_set_strip_alpha(png_ptr);
-
-If you strip the alpha channel you need to find some other way of dealing with
-the information.  If, instead, you want to convert the image to an opaque
-version with no alpha channel use png_set_background; see below.
-
-As of libpng version 1.5.2, almost all useful expansions are supported, the
-major ommissions are conversion of grayscale to indexed images (which can be
-done trivially in the application) and conversion of indexed to grayscale (which
-can be done by a trivial manipulation of the palette.)
-
-In the following table, the 01 means grayscale with depth<8, 31 means
-indexed with depth<8, other numerals represent the color type, "T" means
-the tRNS chunk is present, A means an alpha channel is present, and O
-means tRNS or alpha is present but all pixels in the image are opaque.
-
-  FROM  01  31   0  0T  0O   2  2T  2O   3  3T  3O  4A  4O  6A  6O
-   TO
-   01    -  [G]  -   -   -   -   -   -   -   -   -   -   -   -   -
-   31   [Q]  Q  [Q] [Q] [Q]  Q   Q   Q   Q   Q   Q  [Q] [Q]  Q   Q
-    0    1   G   +   .   .   G   G   G   G   G   G   B   B  GB  GB
-   0T    lt  Gt  t   +   .   Gt  G   G   Gt  G   G   Bt  Bt GBt GBt
-   0O    lt  Gt  t   .   +   Gt  Gt  G   Gt  Gt  G   Bt  Bt GBt GBt
-    2    C   P   C   C   C   +   .   .   C   -   -  CB  CB   B   B
-   2T    Ct  -   Ct  C   C   t   +   t   -   -   -  CBt CBt  Bt  Bt
-   2O    Ct  -   Ct  C   C   t   t   +   -   -   -  CBt CBt  Bt  Bt
-    3   [Q]  p  [Q] [Q] [Q]  Q   Q   Q   +   .   .  [Q] [Q]  Q   Q
-   3T   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   +   t  [Qt][Qt] Qt  Qt
-   3O   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   t   +  [Qt][Qt] Qt  Qt
-   4A    lA  G   A   T   T   GA  GT  GT  GA  GT  GT  +   BA  G  GBA
-   4O    lA GBA  A   T   T   GA  GT  GT  GA  GT  GT  BA  +  GBA  G
-   6A    CA  PA  CA  C   C   A   T  tT   PA  P   P   C  CBA  +   BA
-   6O    CA PBA  CA  C   C   A  tT   T   PA  P   P  CBA  C   BA  +
-
-Within the matrix,
-     "+" identifies entries where 'from' and 'to' are the same.
-     "-" means the transformation is not supported.
-     "." means nothing is necessary (a tRNS chunk can just be ignored).
-     "t" means the transformation is obtained by png_set_tRNS.
-     "A" means the transformation is obtained by png_set_add_alpha().
-     "X" means the transformation is obtained by png_set_expand().
-     "1" means the transformation is obtained by
-         png_set_expand_gray_1_2_4_to_8() (and by png_set_expand()
-         if there is no transparency in the original or the final
-         format).
-     "C" means the transformation is obtained by png_set_gray_to_rgb().
-     "G" means the transformation is obtained by png_set_rgb_to_gray().
-     "P" means the transformation is obtained by
-         png_set_expand_palette_to_rgb().
-     "p" means the transformation is obtained by png_set_packing().
-     "Q" means the transformation is obtained by png_set_quantize().
-     "T" means the transformation is obtained by
-         png_set_tRNS_to_alpha().
-     "B" means the transformation is obtained by
-         png_set_background(), or png_strip_alpha().
-
-When an entry has multiple transforms listed all are required to cause the
-right overall transformation.  When two transforms are separated by a comma
-either will do the job.  When transforms are enclosed in [] the transform should
-do the job but this is currently unimplemented - a different format will result
-if the suggested transformations are used.
-
-In PNG files, the alpha channel in an image
-is the level of opacity.  If you need the alpha channel in an image to
-be the level of transparency instead of opacity, you can invert the
-alpha channel (or the tRNS chunk data) after it's read, so that 0 is
-fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
-images) is fully transparent, with
-
-    png_set_invert_alpha(png_ptr);
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit
-files.  This code expands to 1 pixel per byte without changing the
-values of the pixels:
-
-    if (bit_depth < 8)
-       png_set_packing(png_ptr);
-
-PNG files have possible bit depths of 1, 2, 4, 8, and 16.  All pixels
-stored in a PNG image have been "scaled" or "shifted" up to the next
-higher possible bit depth (e.g. from 5 bits/sample in the range [0,31]
-to 8 bits/sample in the range [0, 255]).  However, it is also possible
-to convert the PNG pixel data back to the original bit depth of the
-image.  This call reduces the pixels back down to the original bit depth:
-
-    png_color_8p sig_bit;
-
-    if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
-       png_set_shift(png_ptr, sig_bit);
-
-PNG files store 3-color pixels in red, green, blue order.  This code
-changes the storage of the pixels to blue, green, red:
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_bgr(png_ptr);
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
-into 4 or 8 bytes for windowing systems that need them in this format:
-
-    if (color_type == PNG_COLOR_TYPE_RGB)
-       png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
-
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
-you want the filler before the RGB or after.  This transformation
-does not affect images that already have full alpha channels.  To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
-will generate RGBA pixels.
-
-Note that png_set_filler() does not change the color type.  If you want
-to do that, you can add a true alpha channel with
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-       color_type == PNG_COLOR_TYPE_GRAY)
-       png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
-
-where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
-
-If you are reading an image with an alpha channel, and you need the
-data as ARGB instead of the normal PNG format RGBA:
-
-    if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_swap_alpha(png_ptr);
-
-For some uses, you may want a grayscale image to be represented as
-RGB.  This code will do that conversion:
-
-    if (color_type == PNG_COLOR_TYPE_GRAY ||
-        color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-       png_set_gray_to_rgb(png_ptr);
-
-Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
-with alpha.
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_rgb_to_gray(png_ptr, error_action,
-          double red_weight, double green_weight);
-
-    error_action = 1: silently do the conversion
-
-    error_action = 2: issue a warning if the original
-                      image has any pixel where
-                      red != green or red != blue
-
-    error_action = 3: issue an error and abort the
-                      conversion if the original
-                      image has any pixel where
-                      red != green or red != blue
-
-    red_weight:       weight of red component
-
-    green_weight:     weight of green component
-                      If either weight is negative, default
-                      weights are used.
-
-In the corresponding fixed point API the red_weight and green_weight values are
-simply scaled by 100,000:
-
-    png_set_rgb_to_gray(png_ptr, error_action,
-       png_fixed_point red_weight,
-       png_fixed_point green_weight);
-
-If you have set error_action = 1 or 2, you can
-later check whether the image really was gray, after processing
-the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
-It will return a png_byte that is zero if the image was gray or
-1 if there were any non-gray pixels.  Background and sBIT data
-will be silently converted to grayscale, using the green channel
-data for sBIT, regardless of the error_action setting.
-
-The default values come from the PNG file cHRM chunk if present; otherwise, the
-defaults correspond to the ITU-R recommendation 709, and also the sRGB color
-space, as recommended in the Charles Poynton's Colour FAQ,
-<http://www.poynton.com/>, in section 9:
-
-   <http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9>
-
-    Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
-
-Previous versions of this document, 1998 through 2002, recommended a slightly
-different formula:
-
-    Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
-
-Libpng uses an integer approximation:
-
-    Y = (6968 * R + 23434 * G + 2366 * B)/32768
-
-The calculation is done in a linear colorspace, if the image gamma
-can be determined.
-
-The png_set_background() function has been described already; it tells libpng to
-composite images with alpha or simple transparency against the supplied
-background color.  For compatibility with versions of libpng earlier than
-libpng-1.5.4 it is recommended that you call the function after reading the file
-header, even if you don't want to use the color in a bKGD chunk, if one exists.
-
-If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
-you may use this color, or supply another color more suitable for
-the current display (e.g., the background color from a web page).  You
-need to tell libpng how the color is represented, both the format of the
-component values in the color (the number of bits) and the gamma encoding of the
-color.  The function takes two arguments, background_gamma_mode and need_expand
-to convey this information; however, only two combinations are likely to be
-useful:
-
-    png_color_16 my_background;
-    png_color_16p image_background;
-
-    if (png_get_bKGD(png_ptr, info_ptr, &image_background))
-       png_set_background(png_ptr, image_background,
-           PNG_BACKGROUND_GAMMA_FILE, 1/*needs to be expanded*/, 1);
-    else
-       png_set_background(png_ptr, &my_background,
-           PNG_BACKGROUND_GAMMA_SCREEN, 0/*do not expand*/, 1);
-
-The second call was described above - my_background is in the format of the
-final, display, output produced by libpng.  Because you now know the format of
-the PNG it is possible to avoid the need to choose either 8-bit or 16-bit
-output and to retain palette images (the palette colors will be modified
-appropriately and the tRNS chunk removed.)  However, if you are doing this,
-take great care not to ask for transformations without checking first that
-they apply!
-
-In the first call the background color has the original bit depth and color type
-of the PNG file.  So, for palette images the color is supplied as a palette
-index and for low bit greyscale images the color is a reduced bit value in
-image_background->gray.
-
-If you didn't call png_set_gamma() before reading the file header, for example
-if you need your code to remain compatible with older versions of libpng prior
-to libpng-1.5.4, this is the place to call it.
-
-Do not call it if you called png_set_alpha_mode(); doing so will damage the
-settings put in place by png_set_alpha_mode().  (If png_set_alpha_mode() is
-supported then you can certainly do png_set_gamma() before reading the PNG
-header.)
-
-This API unconditionally sets the screen and file gamma values, so it will
-override the value in the PNG file unless it is called before the PNG file
-reading starts.  For this reason you must always call it with the PNG file
-value when you call it in this position:
-
-   if (png_get_gAMA(png_ptr, info_ptr, &file_gamma))
-      png_set_gamma(png_ptr, screen_gamma, file_gamma);
-
-   else
-      png_set_gamma(png_ptr, screen_gamma, 0.45455);
-
-If you need to reduce an RGB file to a paletted file, or if a paletted
-file has more entries then will fit on your screen, png_set_quantize()
-will do that.  Note that this is a simple match quantization that merely
-finds the closest color available.  This should work fairly well with
-optimized palettes, but fairly badly with linear color cubes.  If you
-pass a palette that is larger than maximum_colors, the file will
-reduce the number of colors in the palette so it will fit into
-maximum_colors.  If there is a histogram, libpng will use it to make
-more intelligent choices when reducing the palette.  If there is no
-histogram, it may not do as good a job.
-
-   if (color_type & PNG_COLOR_MASK_COLOR)
-   {
-      if (png_get_valid(png_ptr, info_ptr,
-          PNG_INFO_PLTE))
-      {
-         png_uint_16p histogram = NULL;
-
-         png_get_hIST(png_ptr, info_ptr,
-             &histogram);
-         png_set_quantize(png_ptr, palette, num_palette,
-            max_screen_colors, histogram, 1);
-      }
-
-      else
-      {
-         png_color std_color_cube[MAX_SCREEN_COLORS] =
-            { ... colors ... };
-
-         png_set_quantize(png_ptr, std_color_cube,
-            MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
-            NULL,0);
-      }
-   }
-
-PNG files describe monochrome as black being zero and white being one.
-The following code will reverse this (make black be one and white be
-zero):
-
-   if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
-      png_set_invert_mono(png_ptr);
-
-This function can also be used to invert grayscale and gray-alpha images:
-
-   if (color_type == PNG_COLOR_TYPE_GRAY ||
-       color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      png_set_invert_mono(png_ptr);
-
-PNG files store 16-bit pixels in network byte order (big-endian,
-ie. most significant bits first).  This code changes the storage to the
-other way (little-endian, i.e. least significant bits first, the
-way PCs store them):
-
-    if (bit_depth == 16)
-       png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
-    if (bit_depth < 8)
-       png_set_packswap(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs.  This is done by setting a callback
-with
-
-    png_set_read_user_transform_fn(png_ptr,
-        read_transform_fn);
-
-You must supply the function
-
-    void read_transform_fn(png_structp png_ptr, png_row_infop
-        row_info, png_bytep data)
-
-See pngtest.c for a working example.  Your function will be called
-after all of the other transformations have been processed.  Take care with
-interlaced images if you do the interlace yourself - the width of the row is the
-width in 'row_info', not the overall image width.
-
-If supported, libpng provides two information routines that you can use to find
-where you are in processing the image:
-
-   png_get_current_pass_number(png_structp png_ptr);
-   png_get_current_row_number(png_structp png_ptr);
-
-Don't try using these outside a transform callback - firstly they are only
-supported if user transforms are supported, secondly they may well return
-unexpected results unless the row is actually being processed at the moment they
-are called.
-
-With interlaced
-images the value returned is the row in the input sub-image image.  Use
-PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
-find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
-
-The discussion of interlace handling above contains more information on how to
-use these values.
-
-You can also set up a pointer to a user structure for use by your
-callback function, and you can inform libpng that your transform
-function will change the number of channels or bit depth with the
-function
-
-    png_set_user_transform_info(png_ptr, user_ptr,
-        user_depth, user_channels);
-
-The user's application, not libpng, is responsible for allocating and
-freeing any memory required for the user structure.
-
-You can retrieve the pointer via the function
-png_get_user_transform_ptr().  For example:
-
-    voidp read_user_transform_ptr =
-        png_get_user_transform_ptr(png_ptr);
-
-The last thing to handle is interlacing; this is covered in detail below,
-but you must call the function here if you want libpng to handle expansion
-of the interlaced image.
-
-    number_of_passes = png_set_interlace_handling(png_ptr);
-
-After setting the transformations, libpng can update your png_info
-structure to reflect any transformations you've requested with this
-call.
-
-    png_read_update_info(png_ptr, info_ptr);
-
-This is most useful to update the info structure's rowbytes
-field so you can use it to allocate your image memory.  This function
-will also update your palette with the correct screen_gamma and
-background if these have been given with the calls above.  You may
-only call png_read_update_info() once with a particular info_ptr.
-
-After you call png_read_update_info(), you can allocate any
-memory you need to hold the image.  The row data is simply
-raw byte data for all forms of images.  As the actual allocation
-varies among applications, no example will be given.  If you
-are allocating one large chunk, you will need to build an
-array of pointers to each row, as it will be needed for some
-of the functions below.
-
-Remember: Before you call png_read_update_info(), the png_get_*()
-functions return the values corresponding to the original PNG image.
-After you call png_read_update_info the values refer to the image
-that libpng will output.  Consequently you must call all the png_set_
-functions before you call png_read_update_info().  This is particularly
-important for png_set_interlace_handling() - if you are going to call
-png_read_update_info() you must call png_set_interlace_handling() before
-it unless you want to receive interlaced output.
-
-Reading image data
-
-After you've allocated memory, you can read the image data.
-The simplest way to do this is in one function call.  If you are
-allocating enough memory to hold the whole image, you can just
-call png_read_image() and libpng will read in all the image data
-and put it in the memory area supplied.  You will need to pass in
-an array of pointers to each row.
-
-This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() (unless you call
-png_read_update_info()) or call this function multiple times, or any
-of that other stuff necessary with png_read_rows().
-
-   png_read_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
-   png_bytep row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to read in the whole image at once, you can
-use png_read_rows() instead.  If there is no interlacing (check
-interlace_type == PNG_INTERLACE_NONE), this is simple:
-
-    png_read_rows(png_ptr, row_pointers, NULL,
-        number_of_rows);
-
-where row_pointers is the same as in the png_read_image() call.
-
-If you are doing this just one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
-    png_bytep row_pointer = row;
-    png_read_row(png_ptr, row_pointer, NULL);
-
-If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
-get somewhat harder.  The only current (PNG Specification version 1.2)
-interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7);
-a somewhat complicated 2D interlace scheme, known as Adam7, that
-breaks down an image into seven smaller images of varying size, based
-on an 8x8 grid.  This number is defined (from libpng 1.5) as
-PNG_INTERLACE_ADAM7_PASSES in png.h
-
-libpng can fill out those images or it can give them to you "as is".
-It is almost always better to have libpng handle the interlacing for you.
-If you want the images filled out, there are two ways to do that.  The one
-mentioned in the PNG specification is to expand each pixel to cover
-those pixels that have not been read yet (the "rectangle" method).
-This results in a blocky image for the first pass, which gradually
-smooths out as more pixels are read.  The other method is the "sparkle"
-method, where pixels are drawn only in their final locations, with the
-rest of the image remaining whatever colors they were initialized to
-before the start of the read.  The first method usually looks better,
-but tends to be slower, as there are more pixels to put in the rows.
-
-If, as is likely, you want libpng to expand the images, call this before
-calling png_start_read_image() or png_read_update_info():
-
-    if (interlace_type == PNG_INTERLACE_ADAM7)
-       number_of_passes
-           = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed.  Currently, this is seven,
-but may change if another interlace type is added.  This function can be
-called even if the file is not interlaced, where it will return one pass.
-You then need to read the whole image 'number_of_passes' times.  Each time
-will distribute the pixels from the current pass to the correct place in
-the output image, so you need to supply the same rows to png_read_rows in
-each pass.
-
-If you are not going to display the image after each pass, but are
-going to wait until the entire image is read in, use the sparkle
-effect.  This effect is faster and the end result of either method
-is exactly the same.  If you are planning on displaying the image
-after each pass, the "rectangle" effect is generally considered the
-better looking one.
-
-If you only want the "sparkle" effect, just call png_read_rows() as
-normal, with the third parameter NULL.  Make sure you make pass over
-the image number_of_passes times, and you don't change the data in the
-rows between calls.  You can change the locations of the data, just
-not the data.  Each pass only writes the pixels appropriate for that
-pass, and assumes the data from previous passes is still valid.
-
-    png_read_rows(png_ptr, row_pointers, NULL,
-        number_of_rows);
-
-If you only want the first effect (the rectangles), do the same as
-before except pass the row buffer in the third parameter, and leave
-the second parameter NULL.
-
-    png_read_rows(png_ptr, NULL, row_pointers,
-        number_of_rows);
-
-If you don't want libpng to handle the interlacing details, just call
-png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
-Each of the images is a valid image by itself; however, you will almost
-certainly need to distribute the pixels from each sub-image to the
-correct place.  This is where everything gets very tricky.
-
-If you want to retrieve the separate images you must pass the correct
-number of rows to each successive call of png_read_rows().  The calculation
-gets pretty complicated for small images, where some sub-images may
-not even exist because either their width or height ends up zero.
-libpng provides two macros to help you in 1.5 and later versions:
-
-   png_uint_32 width = PNG_PASS_COLS(image_width, pass_number);
-   png_uint_32 height = PNG_PASS_ROWS(image_height, pass_number);
-
-Respectively these tell you the width and height of the sub-image
-corresponding to the numbered pass.  'pass' is in in the range 0 to 6 -
-this can be confusing because the specification refers to the same passes
-as 1 to 7!  Be careful, you must check both the width and height before
-calling png_read_rows() and not call it for that pass if either is zero.
-
-You can, of course, read each sub-image row by row.  If you want to
-produce optimal code to make a pixel-by-pixel transformation of an
-interlaced image this is the best approach; read each row of each pass,
-transform it, and write it out to a new interlaced image.
-
-If you want to de-interlace the image yourself libpng provides further
-macros to help that tell you where to place the pixels in the output image.
-Because the interlacing scheme is rectangular - sub-image pixels are always
-arranged on a rectangular grid - all you need to know for each pass is the
-starting column and row in the output image of the first pixel plus the
-spacing between each pixel.  As of libpng 1.5 there are four macros to
-retrieve this information:
-
-   png_uint_32 x = PNG_PASS_START_COL(pass);
-   png_uint_32 y = PNG_PASS_START_ROW(pass);
-   png_uint_32 xStep = 1U << PNG_PASS_COL_SHIFT(pass);
-   png_uint_32 yStep = 1U << PNG_PASS_ROW_SHIFT(pass);
-
-These allow you to write the obvious loop:
-
-   png_uint_32 input_y = 0;
-   png_uint_32 output_y = PNG_PASS_START_ROW(pass);
-
-   while (output_y < output_image_height)
-   {
-      png_uint_32 input_x = 0;
-      png_uint_32 output_x = PNG_PASS_START_COL(pass);
-
-      while (output_x < output_image_width)
-      {
-         image[output_y][output_x] =
-             subimage[pass][input_y][input_x++];
-
-         output_x += xStep;
-      }
-
-      ++input_y;
-      output_y += yStep;
-   }
-
-Notice that the steps between successive output rows and columns are
-returned as shifts.  This is possible because the pixels in the subimages
-are always a power of 2 apart - 1, 2, 4 or 8 pixels - in the original
-image.  In practice you may need to directly calculate the output coordinate
-given an input coordinate.  libpng provides two further macros for this
-purpose:
-
-   png_uint_32 output_x = PNG_COL_FROM_PASS_COL(input_x, pass);
-   png_uint_32 output_y = PNG_ROW_FROM_PASS_ROW(input_y, pass);
-
-Finally a pair of macros are provided to tell you if a particular image
-row or column appears in a given pass:
-
-   int col_in_pass = PNG_COL_IN_INTERLACE_PASS(output_x, pass);
-   int row_in_pass = PNG_ROW_IN_INTERLACE_PASS(output_y, pass);
-
-Bear in mind that you will probably also need to check the width and height
-of the pass in addition to the above to be sure the pass even exists!
-
-With any luck you are convinced by now that you don't want to do your own
-interlace handling.  In reality normally the only good reason for doing this
-is if you are processing PNG files on a pixel-by-pixel basis and don't want
-to load the whole file into memory when it is interlaced.
-
-libpng includes a test program, pngvalid, that illustrates reading and
-writing of interlaced images.  If you can't get interlacing to work in your
-code and don't want to leave it to libpng (the recommended approach), see
-how pngvalid.c does it.
-
-Finishing a sequential read
-
-After you are finished reading the image through the
-low-level interface, you can finish reading the file.
-
-If you want to use a different crc action for handling CRC errors in
-chunks after the image data, you can call png_set_crc_action()
-again at this point.
-
-If you are interested in comments or time, which may be stored either
-before or after the image data, you should pass the separate png_info
-struct if you want to keep the comments from before and after the image
-separate.
-
-    png_infop end_info = png_create_info_struct(png_ptr);
-
-    if (!end_info)
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-   png_read_end(png_ptr, end_info);
-
-If you are not interested, you should still call png_read_end()
-but you can pass NULL, avoiding the need to create an end_info structure.
-If you do this, libpng will not process any chunks after IDAT other than
-skipping over them and perhaps (depending on whether you have called
-png_set_crc_action) checking their CRCs while looking for the IEND chunk.
-
-   png_read_end(png_ptr, (png_infop)NULL);
-
-If you don't call png_read_end(), then your file pointer will be
-left pointing to the first chunk after the last IDAT, which is probably
-not what you want if you expect to read something beyond the end of
-the PNG datastream.
-
-When you are done, you can free all memory allocated by libpng like this:
-
-   png_destroy_read_struct(&png_ptr, &info_ptr,
-       &end_info);
-
-or, if you didn't create an end_info structure,
-
-   png_destroy_read_struct(&png_ptr, &info_ptr,
-       (png_infopp)NULL);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
-    png_free_data(png_ptr, info_ptr, mask, seq)
-
-    mask - identifies data to be freed, a mask
-           containing the bitwise OR of one or
-           more of
-             PNG_FREE_PLTE, PNG_FREE_TRNS,
-             PNG_FREE_HIST, PNG_FREE_ICCP,
-             PNG_FREE_PCAL, PNG_FREE_ROWS,
-             PNG_FREE_SCAL, PNG_FREE_SPLT,
-             PNG_FREE_TEXT, PNG_FREE_UNKN,
-           or simply PNG_FREE_ALL
-
-    seq  - sequence number of item to be freed
-           (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng,  and will in those cases do nothing.
-The "seq" parameter is ignored if only one item of the selected data
-type, such as PLTE, is allowed.  If "seq" is not -1, and multiple items
-are allowed for the data type identified in the mask, such as text or
-sPLT, only the n'th item in the structure is freed, where n is "seq".
-
-The default behavior is only to free data that was allocated internally
-by libpng.  This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_calloc() and passed in via a png_set_*() function, with
-
-    png_data_freer(png_ptr, info_ptr, freer, mask)
-
-    freer  - one of
-               PNG_DESTROY_WILL_FREE_DATA
-               PNG_SET_WILL_FREE_DATA
-               PNG_USER_WILL_FREE_DATA
-
-    mask   - which data elements are affected
-             same choices as in png_free_data()
-
-This function only affects data that has already been allocated.
-You can call this function after reading the PNG data but before calling
-any png_set_*() functions, to control whether the user or the png_set_*()
-function is responsible for freeing any existing data that might be present,
-and again after the png_set_*() functions to control whether the user
-or png_destroy_*() is supposed to free the data.  When the user assumes
-responsibility for libpng-allocated data, the application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_calloc() to allocate it.
-
-If you allocated your row_pointers in a single block, as suggested above in
-the description of the high level read interface, you must not transfer
-responsibility for freeing it to the png_set_rows or png_read_destroy function,
-because they would also try to free the individual row_pointers[i].
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key.  Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-
-The png_free_data() function will turn off the "valid" flag for anything
-it frees.  If you need to turn the flag off for a chunk that was freed by
-your application instead of by libpng, you can use
-
-    png_set_invalid(png_ptr, info_ptr, mask);
-
-    mask - identifies the chunks to be made invalid,
-           containing the bitwise OR of one or
-           more of
-             PNG_INFO_gAMA, PNG_INFO_sBIT,
-             PNG_INFO_cHRM, PNG_INFO_PLTE,
-             PNG_INFO_tRNS, PNG_INFO_bKGD,
-             PNG_INFO_hIST, PNG_INFO_pHYs,
-             PNG_INFO_oFFs, PNG_INFO_tIME,
-             PNG_INFO_pCAL, PNG_INFO_sRGB,
-             PNG_INFO_iCCP, PNG_INFO_sPLT,
-             PNG_INFO_sCAL, PNG_INFO_IDAT
-
-For a more compact example of reading a PNG image, see the file example.c.
-
-Reading PNG files progressively
-
-The progressive reader is slightly different from the non-progressive
-reader.  Instead of calling png_read_info(), png_read_rows(), and
-png_read_end(), you make one call to png_process_data(), which calls
-callbacks when it has the info, a row, or the end of the image.  You
-set up these callbacks with png_set_progressive_read_fn().  You don't
-have to worry about the input/output functions of libpng, as you are
-giving the library the data directly in png_process_data().  I will
-assume that you have read the section on reading PNG files above,
-so I will only highlight the differences (although I will show
-all of the code).
-
-png_structp png_ptr;
-png_infop info_ptr;
-
- /*  An example code fragment of how you would
-     initialize the progressive reader in your
-     application. */
- int
- initialize_png_reader()
- {
-    png_ptr = png_create_read_struct
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-         user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-        return (ERROR);
-
-    info_ptr = png_create_info_struct(png_ptr);
-
-    if (!info_ptr)
-    {
-       png_destroy_read_struct(&png_ptr,
-          (png_infopp)NULL, (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-          (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    /* This one's new.  You can provide functions
-       to be called when the header info is valid,
-       when each row is completed, and when the image
-       is finished.  If you aren't using all functions,
-       you can specify NULL parameters.  Even when all
-       three functions are NULL, you need to call
-       png_set_progressive_read_fn().  You can use
-       any struct as the user_ptr (cast to a void pointer
-       for the function call), and retrieve the pointer
-       from inside the callbacks using the function
-
-          png_get_progressive_ptr(png_ptr);
-
-       which will return a void pointer, which you have
-       to cast appropriately.
-     */
-    png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
-        info_callback, row_callback, end_callback);
-
-    return 0;
- }
-
- /* A code fragment that you call as you receive blocks
-   of data */
- int
- process_data(png_bytep buffer, png_uint_32 length)
- {
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    /* This one's new also.  Simply give it a chunk
-       of data from the file stream (in order, of
-       course).  On machines with segmented memory
-       models machines, don't give it any more than
-       64K.  The library seems to run fine with sizes
-       of 4K. Although you can give it much less if
-       necessary (I assume you can give it chunks of
-       1 byte, I haven't tried less then 256 bytes
-       yet).  When this function returns, you may
-       want to display any rows that were generated
-       in the row callback if you don't already do
-       so there.
-     */
-    png_process_data(png_ptr, info_ptr, buffer, length);
-
-    /* At this point you can call png_process_data_skip if
-       you want to handle data the library will skip yourself;
-       it simply returns the number of bytes to skip (and stops
-       libpng skipping that number of bytes on the next
-       png_process_data call).
-    return 0;
- }
-
- /* This function is called (as set by
-    png_set_progressive_read_fn() above) when enough data
-    has been supplied so all of the header has been
-    read.
- */
- void
- info_callback(png_structp png_ptr, png_infop info)
- {
-    /* Do any setup here, including setting any of
-       the transformations mentioned in the Reading
-       PNG files section.  For now, you _must_ call
-       either png_start_read_image() or
-       png_read_update_info() after all the
-       transformations are set (even if you don't set
-       any).  You may start getting rows before
-       png_process_data() returns, so this is your
-       last chance to prepare for that.
-
-       This is where you turn on interlace handling,
-       assuming you don't want to do it yourself.
-
-       If you need to you can stop the processing of
-       your original input data at this point by calling
-       png_process_data_pause.  This returns the number
-       of unprocessed bytes from the last png_process_data
-       call - it is up to you to ensure that the next call
-       sees these bytes again.  If you don't want to bother
-       with this you can get libpng to cache the unread
-       bytes by setting the 'save' parameter (see png.h) but
-       then libpng will have to copy the data internally.
-     */
- }
-
- /* This function is called when each row of image
-    data is complete */
- void
- row_callback(png_structp png_ptr, png_bytep new_row,
-    png_uint_32 row_num, int pass)
- {
-    /* If the image is interlaced, and you turned
-       on the interlace handler, this function will
-       be called for every row in every pass.  Some
-       of these rows will not be changed from the
-       previous pass.  When the row is not changed,
-       the new_row variable will be NULL.  The rows
-       and passes are called in order, so you don't
-       really need the row_num and pass, but I'm
-       supplying them because it may make your life
-       easier.
-
-       If you did not turn on interlace handling then
-       the callback is called for each row of each
-       sub-image when the image is interlaced.  In this
-       case 'row_num' is the row in the sub-image, not
-       the row in the output image as it is in all other
-       cases.
-
-       For the non-NULL rows of interlaced images when
-       you have switched on libpng interlace handling,
-       you must call png_progressive_combine_row()
-       passing in the row and the old row.  You can
-       call this function for NULL rows (it will just
-       return) and for non-interlaced images (it just
-       does the memcpy for you) if it will make the
-       code easier.  Thus, you can just do this for
-       all cases if you switch on interlace handling;
-     */
-
-        png_progressive_combine_row(png_ptr, old_row,
-          new_row);
-
-    /* where old_row is what was displayed
-       previously for the row.  Note that the first
-       pass (pass == 0, really) will completely cover
-       the old row, so the rows do not have to be
-       initialized.  After the first pass (and only
-       for interlaced images), you will have to pass
-       the current row, and the function will combine
-       the old row and the new row.
-
-       You can also call png_process_data_pause in this
-       callback - see above.
-    */
- }
-
- void
- end_callback(png_structp png_ptr, png_infop info)
- {
-    /* This function is called after the whole image
-       has been read, including any chunks after the
-       image (up to and including the IEND).  You
-       will usually have the same info chunk as you
-       had in the header, although some data may have
-       been added to the comments and time fields.
-
-       Most people won't do much here, perhaps setting
-       a flag that marks the image as finished.
-     */
- }
-
-
-
-IV. Writing
-
-Much of this is very similar to reading.  However, everything of
-importance is repeated here, so you won't have to constantly look
-back up in the reading section to understand writing.
-
-Setup
-
-You will want to do the I/O initialization before you get into libpng,
-so if it doesn't work, you don't have anything to undo. If you are not
-using the standard I/O functions, you will need to replace them with
-custom writing functions.  See the discussion under Customizing libpng.
-
-    FILE *fp = fopen(file_name, "wb");
-
-    if (!fp)
-       return (ERROR);
-
-Next, png_struct and png_info need to be allocated and initialized.
-As these can be both relatively large, you may not want to store these
-on the stack, unless you have stack space to spare.  Of course, you
-will want to check if they return NULL.  If you are also reading,
-you won't want to name your read structure and your write structure
-both "png_ptr"; you can call them anything you like, such as
-"read_ptr" and "write_ptr".  Look at pngtest.c, for example.
-
-    png_structp png_ptr = png_create_write_struct
-       (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-       return (ERROR);
-
-    png_infop info_ptr = png_create_info_struct(png_ptr);
-    if (!info_ptr)
-    {
-       png_destroy_write_struct(&png_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_write_struct_2() instead of png_create_write_struct():
-
-    png_structp png_ptr = png_create_write_struct_2
-       (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn, (png_voidp)
-        user_mem_ptr, user_malloc_fn, user_free_fn);
-
-After you have these structures, you will need to set up the
-error handling.  When libpng encounters an error, it expects to
-longjmp() back to your routine.  Therefore, you will need to call
-setjmp() and pass the png_jmpbuf(png_ptr).  If you
-write the file from different routines, you will need to update
-the png_jmpbuf(png_ptr) every time you enter a new routine that will
-call a png_*() function.  See your documentation of setjmp/longjmp
-for your compiler for more information on setjmp/longjmp.  See
-the discussion on libpng error handling in the Customizing Libpng
-section below for more information on the libpng error handling.
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-    png_destroy_write_struct(&png_ptr, &info_ptr);
-       fclose(fp);
-       return (ERROR);
-    }
-    ...
-    return;
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_NO_SETJMP, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-You can #define PNG_ABORT() to a function that does something
-more useful than abort(), as long as your function does not
-return.
-
-Checking for invalid palette index on write was added at libpng
-1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
-a benign error.  This is enabled by default because this condition is an
-error according to the PNG specification, Clause 11.3.2, but the error can
-be ignored in each png_ptr with
-
-   png_set_check_for_invalid_index(png_ptr, 0);
-
-If the error is ignored, or if png_benign_error() treats it as a warning,
-any invalid pixels are written as-is by the encoder, resulting in an
-invalid PNG datastream as output.  In this case the application is
-responsible for ensuring that the pixel indexes are in range when it writes
-a PLTE chunk with fewer entries than the bit depth would allow.
-
-Now you need to set up the output code.  The default for libpng is to
-use the C function fwrite().  If you use this, you will need to pass a
-valid FILE * in the function png_init_io().  Be sure that the file is
-opened in binary mode.  Again, if you wish to handle writing data in
-another way, see the discussion on libpng I/O handling in the Customizing
-Libpng section below.
-
-    png_init_io(png_ptr, fp);
-
-If you are embedding your PNG into a datastream such as MNG, and don't
-want libpng to write the 8-byte signature, or if you have already
-written the signature in your application, use
-
-    png_set_sig_bytes(png_ptr, 8);
-
-to inform libpng that it should not write a signature.
-
-Write callbacks
-
-At this point, you can set up a callback function that will be
-called after each row has been written, which you can use to control
-a progress meter or the like.  It's demonstrated in pngtest.c.
-You must supply a function
-
-    void write_row_callback(png_structp png_ptr, png_uint_32 row,
-       int pass);
-    {
-      /* put your code here */
-    }
-
-(You can give it another name that you like instead of "write_row_callback")
-
-To inform libpng about your function, use
-
-    png_set_write_status_fn(png_ptr, write_row_callback);
-
-When this function is called the row has already been completely processed and
-it has also been written out.  The 'row' and 'pass' refer to the next row to be
-handled.  For the
-non-interlaced case the row that was just handled is simply one less than the
-passed in row number, and pass will always be 0.  For the interlaced case the
-same applies unless the row value is 0, in which case the row just handled was
-the last one from one of the preceding passes.  Because interlacing may skip a
-pass you cannot be sure that the preceding pass is just 'pass-1', if you really
-need to know what the last pass is record (row,pass) from the callback and use
-the last recorded value each time.
-
-As with the user transform you can find the output row using the
-PNG_ROW_FROM_PASS_ROW macro.
-
-You now have the option of modifying how the compression library will
-run.  The following functions are mainly for testing, but may be useful
-in some cases, like if you need to write PNG files extremely fast and
-are willing to give up some compression, or if you want to get the
-maximum possible compression at the expense of slower writing.  If you
-have no special needs in this area, let the library do what it wants by
-not calling this function at all, as it has been tuned to deliver a good
-speed/compression ratio. The second parameter to png_set_filter() is
-the filter method, for which the only valid values are 0 (as of the
-July 1999 PNG specification, version 1.2) or 64 (if you are writing
-a PNG datastream that is to be embedded in a MNG datastream).  The third
-parameter is a flag that indicates which filter type(s) are to be tested
-for each scanline.  See the PNG specification for details on the specific
-filter types.
-
-
-    /* turn on or off filtering, and/or choose
-       specific filters.  You can use either a single
-       PNG_FILTER_VALUE_NAME or the bitwise OR of one
-       or more PNG_FILTER_NAME masks.
-     */
-    png_set_filter(png_ptr, 0,
-       PNG_FILTER_NONE  | PNG_FILTER_VALUE_NONE |
-       PNG_FILTER_SUB   | PNG_FILTER_VALUE_SUB  |
-       PNG_FILTER_UP    | PNG_FILTER_VALUE_UP   |
-       PNG_FILTER_AVG   | PNG_FILTER_VALUE_AVG  |
-       PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
-       PNG_ALL_FILTERS);
-
-If an application wants to start and stop using particular filters during
-compression, it should start out with all of the filters (to ensure that
-the previous row of pixels will be stored in case it's needed later),
-and then add and remove them after the start of compression.
-
-If you are writing a PNG datastream that is to be embedded in a MNG
-datastream, the second parameter can be either 0 or 64.
-
-The png_set_compression_*() functions interface to the zlib compression
-library, and should mostly be ignored unless you really know what you are
-doing.  The only generally useful call is png_set_compression_level()
-which changes how much time zlib spends on trying to compress the image
-data.  See the Compression Library (zlib.h and algorithm.txt, distributed
-with zlib) for details on the compression levels.
-
-    #include zlib.h
-
-    /* Set the zlib compression level */
-    png_set_compression_level(png_ptr,
-        Z_BEST_COMPRESSION);
-
-    /* Set other zlib parameters for compressing IDAT */
-    png_set_compression_mem_level(png_ptr, 8);
-    png_set_compression_strategy(png_ptr,
-        Z_DEFAULT_STRATEGY);
-    png_set_compression_window_bits(png_ptr, 15);
-    png_set_compression_method(png_ptr, 8);
-    png_set_compression_buffer_size(png_ptr, 8192)
-
-    /* Set zlib parameters for text compression
-     * If you don't call these, the parameters
-     * fall back on those defined for IDAT chunks
-     */
-    png_set_text_compression_mem_level(png_ptr, 8);
-    png_set_text_compression_strategy(png_ptr,
-        Z_DEFAULT_STRATEGY);
-    png_set_text_compression_window_bits(png_ptr, 15);
-    png_set_text_compression_method(png_ptr, 8);
-
-Setting the contents of info for output
-
-You now need to fill in the png_info structure with all the data you
-wish to write before the actual image.  Note that the only thing you
-are allowed to write after the image is the text chunks and the time
-chunk (as of PNG Specification 1.2, anyway).  See png_write_end() and
-the latest PNG specification for more information on that.  If you
-wish to write them before the image, fill them in now, and flag that
-data as being valid.  If you want to wait until after the data, don't
-fill them until png_write_end().  For all the fields in png_info and
-their data types, see png.h.  For explanations of what the fields
-contain, see the PNG specification.
-
-Some of the more important parts of the png_info are:
-
-    png_set_IHDR(png_ptr, info_ptr, width, height,
-       bit_depth, color_type, interlace_type,
-       compression_type, filter_method)
-
-    width          - holds the width of the image
-                     in pixels (up to 2^31).
-
-    height         - holds the height of the image
-                     in pixels (up to 2^31).
-
-    bit_depth      - holds the bit depth of one of the
-                     image channels.
-                     (valid values are 1, 2, 4, 8, 16
-                     and depend also on the
-                     color_type.  See also significant
-                     bits (sBIT) below).
-
-    color_type     - describes which color/alpha
-                     channels are present.
-                     PNG_COLOR_TYPE_GRAY
-                        (bit depths 1, 2, 4, 8, 16)
-                     PNG_COLOR_TYPE_GRAY_ALPHA
-                        (bit depths 8, 16)
-                     PNG_COLOR_TYPE_PALETTE
-                        (bit depths 1, 2, 4, 8)
-                     PNG_COLOR_TYPE_RGB
-                        (bit_depths 8, 16)
-                     PNG_COLOR_TYPE_RGB_ALPHA
-                        (bit_depths 8, 16)
-
-                     PNG_COLOR_MASK_PALETTE
-                     PNG_COLOR_MASK_COLOR
-                     PNG_COLOR_MASK_ALPHA
-
-    interlace_type - PNG_INTERLACE_NONE or
-                     PNG_INTERLACE_ADAM7
-
-    compression_type - (must be
-                     PNG_COMPRESSION_TYPE_DEFAULT)
-
-    filter_method  - (must be PNG_FILTER_TYPE_DEFAULT
-                     or, if you are writing a PNG to
-                     be embedded in a MNG datastream,
-                     can also be
-                     PNG_INTRAPIXEL_DIFFERENCING)
-
-If you call png_set_IHDR(), the call must appear before any of the
-other png_set_*() functions, because they might require access to some of
-the IHDR settings.  The remaining png_set_*() functions can be called
-in any order.
-
-If you wish, you can reset the compression_type, interlace_type, or
-filter_method later by calling png_set_IHDR() again; if you do this, the
-width, height, bit_depth, and color_type must be the same in each call.
-
-    png_set_PLTE(png_ptr, info_ptr, palette,
-       num_palette);
-
-    palette        - the palette for the file
-                     (array of png_color)
-    num_palette    - number of entries in the palette
-
-    png_set_gAMA(png_ptr, info_ptr, file_gamma);
-    png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
-
-    file_gamma     - the gamma at which the image was
-                     created (PNG_INFO_gAMA)
-
-    int_file_gamma - 100,000 times the gamma at which
-                     the image was created
-
-    png_set_cHRM(png_ptr, info_ptr,  white_x, white_y, red_x, red_y,
-                     green_x, green_y, blue_x, blue_y)
-    png_set_cHRM_XYZ(png_ptr, info_ptr, red_X, red_Y, red_Z, green_X,
-                     green_Y, green_Z, blue_X, blue_Y, blue_Z)
-    png_set_cHRM_fixed(png_ptr, info_ptr, int_white_x, int_white_y,
-                     int_red_x, int_red_y, int_green_x, int_green_y,
-                     int_blue_x, int_blue_y)
-    png_set_cHRM_XYZ_fixed(png_ptr, info_ptr, int_red_X, int_red_Y,
-                     int_red_Z, int_green_X, int_green_Y, int_green_Z,
-                     int_blue_X, int_blue_Y, int_blue_Z)
-
-    {white,red,green,blue}_{x,y}
-                     A color space encoding specified using the chromaticities
-                     of the end points and the white point.
-
-    {red,green,blue}_{X,Y,Z}
-                     A color space encoding specified using the encoding end
-                     points - the CIE tristimulus specification of the intended
-                     color of the red, green and blue channels in the PNG RGB
-                     data.  The white point is simply the sum of the three end
-                     points.
-
-    png_set_sRGB(png_ptr, info_ptr, srgb_intent);
-
-    srgb_intent    - the rendering intent
-                     (PNG_INFO_sRGB) The presence of
-                     the sRGB chunk means that the pixel
-                     data is in the sRGB color space.
-                     This chunk also implies specific
-                     values of gAMA and cHRM.  Rendering
-                     intent is the CSS-1 property that
-                     has been defined by the International
-                     Color Consortium
-                     (http://www.color.org).
-                     It can be one of
-                     PNG_sRGB_INTENT_SATURATION,
-                     PNG_sRGB_INTENT_PERCEPTUAL,
-                     PNG_sRGB_INTENT_ABSOLUTE, or
-                     PNG_sRGB_INTENT_RELATIVE.
-
-
-    png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
-       srgb_intent);
-
-    srgb_intent    - the rendering intent
-                     (PNG_INFO_sRGB) The presence of the
-                     sRGB chunk means that the pixel
-                     data is in the sRGB color space.
-                     This function also causes gAMA and
-                     cHRM chunks with the specific values
-                     that are consistent with sRGB to be
-                     written.
-
-    png_set_iCCP(png_ptr, info_ptr, name, compression_type,
-                       profile, proflen);
-
-    name             - The profile name.
-
-    compression_type - The compression type; always
-                       PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
-                       You may give NULL to this argument to
-                       ignore it.
-
-    profile          - International Color Consortium color
-                       profile data. May contain NULs.
-
-    proflen          - length of profile data in bytes.
-
-    png_set_sBIT(png_ptr, info_ptr, sig_bit);
-
-    sig_bit        - the number of significant bits for
-                     (PNG_INFO_sBIT) each of the gray, red,
-                     green, and blue channels, whichever are
-                     appropriate for the given color type
-                     (png_color_16)
-
-    png_set_tRNS(png_ptr, info_ptr, trans_alpha,
-       num_trans, trans_color);
-
-    trans_alpha    - array of alpha (transparency)
-                     entries for palette (PNG_INFO_tRNS)
-
-    num_trans      - number of transparent entries
-                     (PNG_INFO_tRNS)
-
-    trans_color    - graylevel or color sample values
-                     (in order red, green, blue) of the
-                     single transparent color for
-                     non-paletted images (PNG_INFO_tRNS)
-
-    png_set_hIST(png_ptr, info_ptr, hist);
-
-    hist           - histogram of palette (array of
-                     png_uint_16) (PNG_INFO_hIST)
-
-    png_set_tIME(png_ptr, info_ptr, mod_time);
-
-    mod_time       - time image was last modified
-                     (PNG_VALID_tIME)
-
-    png_set_bKGD(png_ptr, info_ptr, background);
-
-    background     - background color (of type
-                     png_color_16p) (PNG_VALID_bKGD)
-
-    png_set_text(png_ptr, info_ptr, text_ptr, num_text);
-
-    text_ptr       - array of png_text holding image
-                     comments
-
-    text_ptr[i].compression - type of compression used
-                 on "text" PNG_TEXT_COMPRESSION_NONE
-                           PNG_TEXT_COMPRESSION_zTXt
-                           PNG_ITXT_COMPRESSION_NONE
-                           PNG_ITXT_COMPRESSION_zTXt
-    text_ptr[i].key   - keyword for comment.  Must contain
-                 1-79 characters.
-    text_ptr[i].text  - text comments for current
-                         keyword.  Can be NULL or empty.
-    text_ptr[i].text_length - length of text string,
-                 after decompression, 0 for iTXt
-    text_ptr[i].itxt_length - length of itxt string,
-                 after decompression, 0 for tEXt/zTXt
-    text_ptr[i].lang  - language of comment (NULL or
-                         empty for unknown).
-    text_ptr[i].translated_keyword  - keyword in UTF-8 (NULL
-                         or empty for unknown).
-
-    Note that the itxt_length, lang, and lang_key
-    members of the text_ptr structure only exist when the
-    library is built with iTXt chunk support.  Prior to
-    libpng-1.4.0 the library was built by default without
-    iTXt support. Also note that when iTXt is supported,
-    they contain NULL pointers when the "compression"
-    field contains PNG_TEXT_COMPRESSION_NONE or
-    PNG_TEXT_COMPRESSION_zTXt.
-
-    num_text       - number of comments
-
-    png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
-       num_spalettes);
-
-    palette_ptr    - array of png_sPLT_struct structures
-                     to be added to the list of palettes
-                     in the info structure.
-    num_spalettes  - number of palette structures to be
-                     added.
-
-    png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
-        unit_type);
-
-    offset_x  - positive offset from the left
-                     edge of the screen
-
-    offset_y  - positive offset from the top
-                     edge of the screen
-
-    unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
-    png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
-        unit_type);
-
-    res_x       - pixels/unit physical resolution
-                  in x direction
-
-    res_y       - pixels/unit physical resolution
-                  in y direction
-
-    unit_type   - PNG_RESOLUTION_UNKNOWN,
-                  PNG_RESOLUTION_METER
-
-    png_set_sCAL(png_ptr, info_ptr, unit, width, height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-
-    height      - height of a pixel in physical scale units
-                  (width and height are doubles)
-
-    png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-                  expressed as a string
-
-    height      - height of a pixel in physical scale units
-                 (width and height are strings like "2.54")
-
-    png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
-       num_unknowns)
-
-    unknowns          - array of png_unknown_chunk
-                        structures holding unknown chunks
-    unknowns[i].name  - name of unknown chunk
-    unknowns[i].data  - data of unknown chunk
-    unknowns[i].size  - size of unknown chunk's data
-    unknowns[i].location - position to write chunk in file
-                           0: do not write chunk
-                           PNG_HAVE_IHDR: before PLTE
-                           PNG_HAVE_PLTE: before IDAT
-                           PNG_AFTER_IDAT: after IDAT
-
-The "location" member is set automatically according to
-what part of the output file has already been written.
-You can change its value after calling png_set_unknown_chunks()
-as demonstrated in pngtest.c.  Within each of the "locations",
-the chunks are sequenced according to their position in the
-structure (that is, the value of "i", which is the order in which
-the chunk was either read from the input file or defined with
-png_set_unknown_chunks).
-
-A quick word about text and num_text.  text is an array of png_text
-structures.  num_text is the number of valid structures in the array.
-Each png_text structure holds a language code, a keyword, a text value,
-and a compression type.
-
-The compression types have the same valid numbers as the compression
-types of the image data.  Currently, the only valid number is zero.
-However, you can store text either compressed or uncompressed, unlike
-images, which always have to be compressed.  So if you don't want the
-text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
-Because tEXt and zTXt chunks don't have a language field, if you
-specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
-any language code or translated keyword will not be written out.
-
-Until text gets around a few hundred bytes, it is not worth compressing it.
-After the text has been written out to the file, the compression type
-is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
-so that it isn't written out again at the end (in case you are calling
-png_write_end() with the same struct).
-
-The keywords that are given in the PNG Specification are:
-
-    Title            Short (one line) title or
-                     caption for image
-
-    Author           Name of image's creator
-
-    Description      Description of image (possibly long)
-
-    Copyright        Copyright notice
-
-    Creation Time    Time of original image creation
-                     (usually RFC 1123 format, see below)
-
-    Software         Software used to create the image
-
-    Disclaimer       Legal disclaimer
-
-    Warning          Warning of nature of content
-
-    Source           Device used to create the image
-
-    Comment          Miscellaneous comment; conversion
-                     from other image format
-
-The keyword-text pairs work like this.  Keywords should be short
-simple descriptions of what the comment is about.  Some typical
-keywords are found in the PNG specification, as is some recommendations
-on keywords.  You can repeat keywords in a file.  You can even write
-some text before the image and some after.  For example, you may want
-to put a description of the image before the image, but leave the
-disclaimer until after, so viewers working over modem connections
-don't have to wait for the disclaimer to go over the modem before
-they start seeing the image.  Finally, keywords should be full
-words, not abbreviations.  Keywords and text are in the ISO 8859-1
-(Latin-1) character set (a superset of regular ASCII) and can not
-contain NUL characters, and should not contain control or other
-unprintable characters.  To make the comments widely readable, stick
-with basic ASCII, and avoid machine specific character set extensions
-like the IBM-PC character set.  The keyword must be present, but
-you can leave off the text string on non-compressed pairs.
-Compressed pairs must have a text string, as only the text string
-is compressed anyway, so the compression would be meaningless.
-
-PNG supports modification time via the png_time structure.  Two
-conversion routines are provided, png_convert_from_time_t() for
-time_t and png_convert_from_struct_tm() for struct tm.  The
-time_t routine uses gmtime().  You don't have to use either of
-these, but if you wish to fill in the png_time structure directly,
-you should provide the time in universal time (GMT) if possible
-instead of your local time.  Note that the year number is the full
-year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
-that months start with 1.
-
-If you want to store the time of the original image creation, you should
-use a plain tEXt chunk with the "Creation Time" keyword.  This is
-necessary because the "creation time" of a PNG image is somewhat vague,
-depending on whether you mean the PNG file, the time the image was
-created in a non-PNG format, a still photo from which the image was
-scanned, or possibly the subject matter itself.  In order to facilitate
-machine-readable dates, it is recommended that the "Creation Time"
-tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
-although this isn't a requirement.  Unlike the tIME chunk, the
-"Creation Time" tEXt chunk is not expected to be automatically changed
-by the software.  To facilitate the use of RFC 1123 dates, a function
-png_convert_to_rfc1123_buffer(buffer, png_timep) is provided to
-convert from PNG time to an RFC 1123 format string.  The caller must provide
-a writeable buffer of at least 29 bytes.
-
-Writing unknown chunks
-
-You can use the png_set_unknown_chunks function to queue up private chunks
-for writing.  You give it a chunk name, location, raw data, and a size.  You
-also must use png_set_keep_unknown_chunks() to ensure that libpng will
-handle them.  That's all there is to it.  The chunks will be written by the
-next following png_write_info_before_PLTE, png_write_info, or png_write_end
-function, depending upon the specified location.  Any chunks previously
-read into the info structure's unknown-chunk list will also be written out
-in a sequence that satisfies the PNG specification's ordering rules.
-
-Here is an example of writing two private chunks, prVt and miNE:
-
-    #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-    /* Set unknown chunk data */
-    png_unknown_chunk unk_chunk[2];
-    strcpy((char *) unk_chunk[0].name, "prVt";
-    unk_chunk[0].data = (unsigned char *) "PRIVATE DATA";
-    unk_chunk[0].size = strlen(unk_chunk[0].data)+1;
-    unk_chunk[0].location = PNG_HAVE_IHDR;
-    strcpy((char *) unk_chunk[1].name, "miNE";
-    unk_chunk[1].data = (unsigned char *) "MY CHUNK DATA";
-    unk_chunk[1].size = strlen(unk_chunk[0].data)+1;
-    unk_chunk[1].location = PNG_AFTER_IDAT;
-    png_set_unknown_chunks(write_ptr, write_info_ptr,
-        unk_chunk, 2);
-    /* Needed because miNE is not safe-to-copy */
-    png_set_keep_unknown_chunks(png, PNG_HANDLE_CHUNK_ALWAYS,
-       (png_bytep) "miNE", 1);
-    # if PNG_LIBPNG_VER < 10600
-      /* Deal with unknown chunk location bug in 1.5.x and earlier */
-      png_set_unknown_chunk_location(png, info, 0, PNG_HAVE_IHDR);
-      png_set_unknown_chunk_location(png, info, 1, PNG_AFTER_IDAT);
-    # endif
-    # if PNG_LIBPNG_VER < 10500
-      /* PNG_AFTER_IDAT writes two copies of the chunk prior to libpng-1.5.0,
-       * one before IDAT and another after IDAT, so don't use it; only use
-       * PNG_HAVE_IHDR location.  This call resets the location previously
-       * set by assignment and png_set_unknown_chunk_location() for chunk 1.
-       */
-      png_set_unknown_chunk_location(png, info, 1, PNG_HAVE_IHDR);
-    # endif
-    #endif
-
-The high-level write interface
-
-At this point there are two ways to proceed; through the high-level
-write interface, or through a sequence of low-level write operations.
-You can use the high-level interface if your image data is present
-in the info structure.  All defined output
-transformations are permitted, enabled by the following masks.
-
-    PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_PACKING       Pack 1, 2 and 4-bit samples
-    PNG_TRANSFORM_PACKSWAP      Change order of packed
-                                pixels to LSB first
-    PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
-    PNG_TRANSFORM_SHIFT         Normalize pixels to the
-                                sBIT depth
-    PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
-                                to BGRA
-    PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
-                                to AG
-    PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
-                                to transparency
-    PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
-    PNG_TRANSFORM_STRIP_FILLER        Strip out filler
-                                      bytes (deprecated).
-    PNG_TRANSFORM_STRIP_FILLER_BEFORE Strip out leading
-                                      filler bytes
-    PNG_TRANSFORM_STRIP_FILLER_AFTER  Strip out trailing
-                                      filler bytes
-
-If you have valid image data in the info structure (you can use
-png_set_rows() to put image data in the info structure), simply do this:
-
-    png_write_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some set of
-transformation flags.  This call is equivalent to png_write_info(),
-followed the set of transformations indicated by the transform mask,
-then png_write_image(), and finally png_write_end().
-
-(The final parameter of this call is not yet used.  Someday it might point
-to transformation parameters required by some future output transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_write_png().
-
-The low-level write interface
-
-If you are going the low-level route instead, you are now ready to
-write all the file information up to the actual image data.  You do
-this with a call to png_write_info().
-
-    png_write_info(png_ptr, info_ptr);
-
-Note that there is one transformation you may need to do before
-png_write_info().  In PNG files, the alpha channel in an image is the
-level of opacity.  If your data is supplied as a level of transparency,
-you can invert the alpha channel before you write it, so that 0 is
-fully transparent and 255 (in 8-bit or paletted images) or 65535
-(in 16-bit images) is fully opaque, with
-
-    png_set_invert_alpha(png_ptr);
-
-This must appear before png_write_info() instead of later with the
-other transformations because in the case of paletted images the tRNS
-chunk data has to be inverted before the tRNS chunk is written.  If
-your image is not a paletted image, the tRNS data (which in such cases
-represents a single color to be rendered as transparent) won't need to
-be changed, and you can safely do this transformation after your
-png_write_info() call.
-
-If you need to write a private chunk that you want to appear before
-the PLTE chunk when PLTE is present, you can write the PNG info in
-two steps, and insert code to write your own chunk between them:
-
-    png_write_info_before_PLTE(png_ptr, info_ptr);
-    png_set_unknown_chunks(png_ptr, info_ptr, ...);
-    png_write_info(png_ptr, info_ptr);
-
-After you've written the file information, you can set up the library
-to handle any special transformations of the image data.  The various
-ways to transform the data will be described in the order that they
-should occur.  This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths.  Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data.  For example, don't swap red and blue on grayscale data.
-
-PNG files store RGB pixels packed into 3 or 6 bytes.  This code tells
-the library to strip input data that has 4 or 8 bytes per pixel down
-to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
-bytes per pixel).
-
-    png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
-where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
-PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
-is stored XRGB or RGBX.
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit files.
-If the data is supplied at 1 pixel per byte, use this code, which will
-correctly pack the pixels into a single byte:
-
-    png_set_packing(png_ptr);
-
-PNG files reduce possible bit depths to 1, 2, 4, 8, and 16.  If your
-data is of another bit depth, you can write an sBIT chunk into the
-file so that decoders can recover the original data if desired.
-
-    /* Set the true bit depth of the image data */
-    if (color_type & PNG_COLOR_MASK_COLOR)
-    {
-       sig_bit.red = true_bit_depth;
-       sig_bit.green = true_bit_depth;
-       sig_bit.blue = true_bit_depth;
-    }
-
-    else
-    {
-       sig_bit.gray = true_bit_depth;
-    }
-
-    if (color_type & PNG_COLOR_MASK_ALPHA)
-    {
-       sig_bit.alpha = true_bit_depth;
-    }
-
-    png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-
-If the data is stored in the row buffer in a bit depth other than
-one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
-this will scale the values to appear to be the correct bit depth as
-is required by PNG.
-
-    png_set_shift(png_ptr, &sig_bit);
-
-PNG files store 16-bit pixels in network byte order (big-endian,
-ie. most significant bits first).  This code would be used if they are
-supplied the other way (little-endian, i.e. least significant bits
-first, the way PCs store them):
-
-    if (bit_depth > 8)
-       png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
-    if (bit_depth < 8)
-       png_set_packswap(png_ptr);
-
-PNG files store 3 color pixels in red, green, blue order.  This code
-would be used if they are supplied as blue, green, red:
-
-    png_set_bgr(png_ptr);
-
-PNG files describe monochrome as black being zero and white being
-one. This code would be used if the pixels are supplied with this reversed
-(black being one and white being zero):
-
-    png_set_invert_mono(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs.  This is done by setting a callback
-with
-
-    png_set_write_user_transform_fn(png_ptr,
-       write_transform_fn);
-
-You must supply the function
-
-    void write_transform_fn(png_structp png_ptr, png_row_infop
-       row_info, png_bytep data)
-
-See pngtest.c for a working example.  Your function will be called
-before any of the other transformations are processed.  If supported
-libpng also supplies an information routine that may be called from
-your callback:
-
-   png_get_current_row_number(png_ptr);
-   png_get_current_pass_number(png_ptr);
-
-This returns the current row passed to the transform.  With interlaced
-images the value returned is the row in the input sub-image image.  Use
-PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
-find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
-
-The discussion of interlace handling above contains more information on how to
-use these values.
-
-You can also set up a pointer to a user structure for use by your
-callback function.
-
-    png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
-
-The user_channels and user_depth parameters of this function are ignored
-when writing; you can set them to zero as shown.
-
-You can retrieve the pointer via the function png_get_user_transform_ptr().
-For example:
-
-    voidp write_user_transform_ptr =
-       png_get_user_transform_ptr(png_ptr);
-
-It is possible to have libpng flush any pending output, either manually,
-or automatically after a certain number of lines have been written.  To
-flush the output stream a single time call:
-
-    png_write_flush(png_ptr);
-
-and to have libpng flush the output stream periodically after a certain
-number of scanlines have been written, call:
-
-    png_set_flush(png_ptr, nrows);
-
-Note that the distance between rows is from the last time png_write_flush()
-was called, or the first row of the image if it has never been called.
-So if you write 50 lines, and then png_set_flush 25, it will flush the
-output on the next scanline, and every 25 lines thereafter, unless
-png_write_flush() is called before 25 more lines have been written.
-If nrows is too small (less than about 10 lines for a 640 pixel wide
-RGB image) the image compression may decrease noticeably (although this
-may be acceptable for real-time applications).  Infrequent flushing will
-only degrade the compression performance by a few percent over images
-that do not use flushing.
-
-Writing the image data
-
-That's it for the transformations.  Now you can write the image data.
-The simplest way to do this is in one function call.  If you have the
-whole image in memory, you can just call png_write_image() and libpng
-will write the image.  You will need to pass in an array of pointers to
-each row.  This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_write_rows().
-
-    png_write_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
-    png_byte *row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to write the whole image at once, you can
-use png_write_rows() instead.  If the file is not interlaced,
-this is simple:
-
-    png_write_rows(png_ptr, row_pointers,
-       number_of_rows);
-
-row_pointers is the same as in the png_write_image() call.
-
-If you are just writing one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
-    png_bytep row_pointer = row;
-
-    png_write_row(png_ptr, row_pointer);
-
-When the file is interlaced, things can get a good deal more complicated.
-The only currently (as of the PNG Specification version 1.2, dated July
-1999) defined interlacing scheme for PNG files is the "Adam7" interlace
-scheme, that breaks down an image into seven smaller images of varying
-size.  libpng will build these images for you, or you can do them
-yourself.  If you want to build them yourself, see the PNG specification
-for details of which pixels to write when.
-
-If you don't want libpng to handle the interlacing details, just
-use png_set_interlace_handling() and call png_write_rows() the
-correct number of times to write all the sub-images
-(png_set_interlace_handling() returns the number of sub-images.)
-
-If you want libpng to build the sub-images, call this before you start
-writing any rows:
-
-    number_of_passes = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed.  Currently, this is seven,
-but may change if another interlace type is added.
-
-Then write the complete image number_of_passes times.
-
-    png_write_rows(png_ptr, row_pointers, number_of_rows);
-
-Think carefully before you write an interlaced image.  Typically code that
-reads such images reads all the image data into memory, uncompressed, before
-doing any processing.  Only code that can display an image on the fly can
-take advantage of the interlacing and even then the image has to be exactly
-the correct size for the output device, because scaling an image requires
-adjacent pixels and these are not available until all the passes have been
-read.
-
-If you do write an interlaced image you will hardly ever need to handle
-the interlacing yourself.  Call png_set_interlace_handling() and use the
-approach described above.
-
-The only time it is conceivable that you will really need to write an
-interlaced image pass-by-pass is when you have read one pass by pass and
-made some pixel-by-pixel transformation to it, as described in the read
-code above.  In this case use the PNG_PASS_ROWS and PNG_PASS_COLS macros
-to determine the size of each sub-image in turn and simply write the rows
-you obtained from the read code.
-
-Finishing a sequential write
-
-After you are finished writing the image, you should finish writing
-the file.  If you are interested in writing comments or time, you should
-pass an appropriately filled png_info pointer.  If you are not interested,
-you can pass NULL.
-
-    png_write_end(png_ptr, info_ptr);
-
-When you are done, you can free all memory used by libpng like this:
-
-    png_destroy_write_struct(&png_ptr, &info_ptr);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
-    png_free_data(png_ptr, info_ptr, mask, seq)
-
-    mask  - identifies data to be freed, a mask
-            containing the bitwise OR of one or
-            more of
-              PNG_FREE_PLTE, PNG_FREE_TRNS,
-              PNG_FREE_HIST, PNG_FREE_ICCP,
-              PNG_FREE_PCAL, PNG_FREE_ROWS,
-              PNG_FREE_SCAL, PNG_FREE_SPLT,
-              PNG_FREE_TEXT, PNG_FREE_UNKN,
-            or simply PNG_FREE_ALL
-
-    seq   - sequence number of item to be freed
-            (-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user  and not by libpng,  and will in those cases do nothing.
-The "seq" parameter is ignored if only one item of the selected data
-type, such as PLTE, is allowed.  If "seq" is not -1, and multiple items
-are allowed for the data type identified in the mask, such as text or
-sPLT, only the n'th item in the structure is freed, where n is "seq".
-
-If you allocated data such as a palette that you passed in to libpng
-with png_set_*, you must not free it until just before the call to
-png_destroy_write_struct().
-
-The default behavior is only to free data that was allocated internally
-by libpng.  This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_calloc() and passed in via a png_set_*() function, with
-
-    png_data_freer(png_ptr, info_ptr, freer, mask)
-
-    freer  - one of
-               PNG_DESTROY_WILL_FREE_DATA
-               PNG_SET_WILL_FREE_DATA
-               PNG_USER_WILL_FREE_DATA
-
-    mask   - which data elements are affected
-             same choices as in png_free_data()
-
-For example, to transfer responsibility for some data from a read structure
-to a write structure, you could use
-
-    png_data_freer(read_ptr, read_info_ptr,
-       PNG_USER_WILL_FREE_DATA,
-       PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-    png_data_freer(write_ptr, write_info_ptr,
-       PNG_DESTROY_WILL_FREE_DATA,
-       PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-thereby briefly reassigning responsibility for freeing to the user but
-immediately afterwards reassigning it once more to the write_destroy
-function.  Having done this, it would then be safe to destroy the read
-structure and continue to use the PLTE, tRNS, and hIST data in the write
-structure.
-
-This function only affects data that has already been allocated.
-You can call this function before calling after the png_set_*() functions
-to control whether the user or png_destroy_*() is supposed to free the data.
-When the user assumes responsibility for libpng-allocated data, the
-application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_calloc() to allocate it.
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key.  Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-For a more compact example of writing a PNG image, see the file example.c.
-
-V. Simplified API
-
-The simplified API, which became available in libpng-1.6.0, hides the details
-of both libpng and the PNG file format itself.
-It allows PNG files to be read into a very limited number of
-in-memory bitmap formats or to be written from the same formats.  If these
-formats do not accommodate your needs then you can, and should, use the more
-sophisticated APIs above - these support a wide variety of in-memory formats
-and a wide variety of sophisticated transformations to those formats as well
-as a wide variety of APIs to manipulate ancilliary information.
-
-To read a PNG file using the simplified API:
-
-  1) Declare a 'png_image' structure (see below) on the
-     stack and memset() it to all zero.
-
-  2) Call the appropriate png_image_begin_read... function.
-
-  3) Set the png_image 'format' member to the required
-     format and allocate a buffer for the image.
-
-  4) Call png_image_finish_read to read the image into
-     your buffer.
-
-There are no restrictions on the format of the PNG input itself; all valid
-color types, bit depths, and interlace methods are acceptable, and the
-input image is transformed as necessary to the requested in-memory format
-during the png_image_finish_read() step.
-
-To write a PNG file using the simplified API:
-
-  1) Declare a 'png_image' structure on the stack and memset()
-     it to all zero.
-
-  2) Initialize the members of the structure that describe the
-     image, setting the 'format' member to the format of the
-     image in memory.
-
-  3) Call the appropriate png_image_write... function with a
-     pointer to the image to write the PNG data.
-
-png_image is a structure that describes the in-memory format of an image
-when it is being read or define the in-memory format of an image that you
-need to write.  The "png_image" structure contains the following members:
-
-   png_uint_32  version Set to PNG_IMAGE_VERSION
-   png_uint_32  width   Image width in pixels (columns)
-   png_uint_32  height  Image height in pixels (rows)
-   png_uint_32  format  Image format as defined below
-   png_uint_32  flags   A bit mask containing informational flags
-   png_controlp opaque  Initialize to NULL, free with png_image_free
-   png_uint_32  colormap_entries; Number of entries in the color-map
-   png_uint_32  warning_or_error;
-   char         message[64];
-
-In the event of an error or warning the following field warning_or_error
-field will be set to a non-zero value and the 'message' field will contain
-a '\0' terminated string with the libpng error or warning message.  If both
-warnings and an error were encountered, only the error is recorded.  If there
-are multiple warnings, only the first one is recorded.
-
-The upper 30 bits of this value are reserved; the low two bits contain
-a two bit code such that a value more than 1 indicates a failure in the API
-just called:
-
-   0 - no warning or error
-   1 - warning
-   2 - error
-   3 - error preceded by warning
-
-The pixels (samples) of the image have one to four channels whose components
-have original values in the range 0 to 1.0:
-
-  1: A single gray or luminance channel (G).
-  2: A gray/luminance channel and an alpha channel (GA).
-  3: Three red, green, blue color channels (RGB).
-  4: Three color channels and an alpha channel (RGBA).
-
-The channels are encoded in one of two ways:
-
-  a) As a small integer, value 0..255, contained in a single byte.  For the
-alpha channel the original value is simply value/255.  For the color or
-luminance channels the value is encoded according to the sRGB specification
-and matches the 8-bit format expected by typical display devices.
-
-The color/gray channels are not scaled (pre-multiplied) by the alpha
-channel and are suitable for passing to color management software.
-
-  b) As a value in the range 0..65535, contained in a 2-byte integer, in
-the native byte order of the platform on which the application is running.
-All channels can be converted to the original value by dividing by 65535; all
-channels are linear.  Color channels use the RGB encoding (RGB end-points) of
-the sRGB specification.  This encoding is identified by the
-PNG_FORMAT_FLAG_LINEAR flag below.
-
-When an alpha channel is present it is expected to denote pixel coverage
-of the color or luminance channels and is returned as an associated alpha
-channel: the color/gray channels are scaled (pre-multiplied) by the alpha
-value.
-
-When a color-mapped image is used as a result of calling
-png_image_read_colormap or png_image_write_colormap the channels are encoded
-in the color-map and the descriptions above apply to the color-map entries.
-The image data is encoded as small integers, value 0..255, that index the
-entries in the color-map.  One integer (one byte) is stored for each pixel.
-
-PNG_FORMAT_*
-
-The #defines to be used in png_image::format.  Each #define identifies a
-particular layout of channel data and, if present, alpha values.  There are
-separate defines for each of the two channel encodings.
-
-A format is built up using single bit flag values.  Not all combinations are
-valid: use the bit flag values below for testing a format returned by the
-read APIs, but set formats from the derived values.
-
-When reading or writing color-mapped images the format should be set to the
-format of the entries in the color-map then png_image_{read,write}_colormap
-called to read or write the color-map and set the format correctly for the
-image data.  Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
-
-NOTE: libpng can be built with particular features disabled, if you see
-compiler errors because the definition of one of the following flags has been
-compiled out it is because libpng does not have the required support.  It is
-possible, however, for the libpng configuration to enable the format on just
-read or just write; in that case you may see an error at run time.  You can
-guard against this by checking for the definition of:
-
-   PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
-
-   PNG_FORMAT_FLAG_ALPHA    0x01 format with an alpha channel
-   PNG_FORMAT_FLAG_COLOR    0x02 color format: otherwise grayscale
-   PNG_FORMAT_FLAG_LINEAR   0x04 png_uint_16 channels else png_byte
-   PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
-   PNG_FORMAT_FLAG_BGR      0x10 BGR colors, else order is RGB
-   PNG_FORMAT_FLAG_AFIRST   0x20 alpha channel comes first
-
-Supported formats are as follows.  Future versions of libpng may support more
-formats; for compatibility with older versions simply check if the format
-macro is defined using #ifdef.  These defines describe the in-memory layout
-of the components of the pixels of the image.
-
-First the single byte formats:
-
-   PNG_FORMAT_GRAY 0
-   PNG_FORMAT_GA   PNG_FORMAT_FLAG_ALPHA
-   PNG_FORMAT_AG   (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
-   PNG_FORMAT_RGB  PNG_FORMAT_FLAG_COLOR
-   PNG_FORMAT_BGR  (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
-   PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
-   PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
-
-Then the linear 2-byte formats.  When naming these "Y" is used to
-indicate a luminance (gray) channel.  The component order within the pixel
-is always the same - there is no provision for swapping the order of the
-components in the linear format.  The components are 16-bit integers in
-the native byte order for your platform, and there is no provision for
-swapping the bytes to a different endian condition.
-
-   PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
-   PNG_FORMAT_LINEAR_Y_ALPHA
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_LINEAR_RGB
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
-   PNG_FORMAT_LINEAR_RGB_ALPHA
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
-      PNG_FORMAT_FLAG_ALPHA)
-
-Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
-as appropriate after setting png_image::format to the format of the color-map
-to be read or written.  Applications may check the value of
-PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API.  The
-format of the color-map may be extracted using the following macro.
-
-   PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
-
-PNG_IMAGE macros
-
-These are convenience macros to derive information from a png_image
-structure.  The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
-actual image sample values - either the entries in the color-map or the
-pixels in the image.  The PNG_IMAGE_PIXEL_ macros return corresponding values
-for the pixels and will always return 1 after a call to
-png_image_{read,write}_colormap.  The remaining macros return information
-about the rows in the image and the complete image.
-
-NOTE: All the macros that take a png_image::format parameter are compile time
-constants if the format parameter is, itself, a constant.  Therefore these
-macros can be used in array declarations and case labels where required.
-Similarly the macros are also pre-processor constants (sizeof is not used) so
-they can be used in #if tests.
-
-First the information about the samples.
-
-  PNG_IMAGE_SAMPLE_CHANNELS(fmt)
-    Returns the total number of channels in a given format: 1..4
-
-  PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
-    Returns the size in bytes of a single component of a pixel or color-map
-    entry (as appropriate) in the image.
-
-  PNG_IMAGE_SAMPLE_SIZE(fmt)
-    This is the size of the sample data for one sample.  If the image is
-    color-mapped it is the size of one color-map entry (and image pixels are
-    one byte in size), otherwise it is the size of one image pixel.
-
-  PNG_IMAGE_COLORMAP_SIZE(fmt)
-   The size of the color-map required by the format; this is the size of the
-   color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
-   a fixed number determined by the format so can easily be allocated on the
-   stack if necessary.
-
-#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
-   /* The maximum size of the color-map required by the format expressed in a
-    * count of components.  This can be used to compile-time allocate a
-    * color-map:
-    *
-    * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
-    *
-    * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
-    *
-    * Alternatively, use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
-    * information from one of the png_image_begin_read_ APIs and dynamically
-    * allocate the required memory.
-    */
-
-
-Corresponding information about the pixels
-
-  PNG_IMAGE_PIXEL_(test,fmt)
-
-  PNG_IMAGE_PIXEL_CHANNELS(fmt)
-   The number of separate channels (components) in a pixel; 1 for a
-   color-mapped image.
-
-  PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
-   The size, in bytes, of each component in a pixel; 1 for a color-mapped
-   image.
-
-  PNG_IMAGE_PIXEL_SIZE(fmt)
-   The size, in bytes, of a complete pixel; 1 for a color-mapped image.
-
-Information about the whole row, or whole image
-
-  PNG_IMAGE_ROW_STRIDE(image)
-   Returns the total number of components in a single row of the image; this
-   is the minimum 'row stride', the minimum count of components between each
-   row.  For a color-mapped image this is the minimum number of bytes in a
-   row.
-
-   If you need the stride measured in bytes, row_stride_bytes is
-   PNG_IMAGE_ROW_STRIDE(image) * PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)
-   plus any padding bytes that your application might need, for example
-   to start the next row on a 4-byte boundary.
-
-  PNG_IMAGE_BUFFER_SIZE(image, row_stride)
-    Returns the size, in bytes, of an image buffer given a png_image and a row
-    stride - the number of components to leave space for in each row.  This
-    macro takes care of multiplying row_stride by PNG_IMAGE_PIXEL_COMONENT_SIZE
-    when the image has 2-byte components.
-
-  PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
-    This indicates the the RGB values of the in-memory bitmap do not
-    correspond to the red, green and blue end-points defined by sRGB.
-
-  PNG_IMAGE_FLAG_COLORMAP == 0x02
-    The PNG is color-mapped.  If this flag is set png_image_read_colormap
-    can be used without further loss of image information.  If it is not set
-    png_image_read_colormap will cause significant loss if the image has any
-
-READ APIs
-
-   The png_image passed to the read APIs must have been initialized by setting
-   the png_controlp field 'opaque' to NULL (or, better, memset the whole thing.)
-
-   int png_image_begin_read_from_file( png_imagep image,
-     const char *file_name)
-
-     The named file is opened for read and the image header
-     is filled in from the PNG header in the file.
-
-   int png_image_begin_read_from_stdio (png_imagep image,
-     FILE* file)
-
-      The PNG header is read from the stdio FILE object.
-
-   int png_image_begin_read_from_memory(png_imagep image,
-      png_const_voidp memory, png_size_t size)
-
-      The PNG header is read from the given memory buffer.
-
-   int png_image_finish_read(png_imagep image,
-      png_colorp background, void *buffer,
-      png_int_32 row_stride, void *colormap));
-
-      Finish reading the image into the supplied buffer and
-      clean up the png_image structure.
-
-      row_stride is the step, in png_byte or png_uint_16 units
-      as appropriate, between adjacent rows.  A positive stride
-      indicates that the top-most row is first in the buffer -
-      the normal top-down arrangement.  A negative stride
-      indicates that the bottom-most row is first in the buffer.
-
-      background need only be supplied if an alpha channel must
-      be removed from a png_byte format and the removal is to be
-      done by compositing on a solid color; otherwise it may be
-      NULL and any composition will be done directly onto the
-      buffer.  The value is an sRGB color to use for the
-      background, for grayscale output the green channel is used.
-
-      For linear output removing the alpha channel is always done
-      by compositing on black.
-
-   void png_image_free(png_imagep image)
-
-      Free any data allocated by libpng in image->opaque,
-      setting the pointer to NULL.  May be called at any time
-      after the structure is initialized.
-
-When the simplified API needs to convert between sRGB and linear colorspaces,
-the actual sRGB transfer curve defined in the sRGB specification (see the
-article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
-approximation used elsewhere in libpng.
-
-WRITE APIS
-
-For write you must initialize a png_image structure to describe the image to
-be written:
-
-   version: must be set to PNG_IMAGE_VERSION
-   opaque: must be initialized to NULL
-   width: image width in pixels
-   height: image height in rows
-   format: the format of the data you wish to write
-   flags: set to 0 unless one of the defined flags applies; set
-      PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images
-      where the RGB values do not correspond to the colors in sRGB.
-   colormap_entries: set to the number of entries in the color-map (0 to 256)
-
-   int png_image_write_to_file, (png_imagep image,
-      const char *file, int convert_to_8bit, const void *buffer,
-      png_int_32 row_stride, const void *colormap));
-
-      Write the image to the named file.
-
-   int png_image_write_to_stdio(png_imagep image, FILE *file,
-      int convert_to_8_bit, const void *buffer,
-      png_int_32 row_stride, const void *colormap)
-
-      Write the image to the given (FILE*).
-
-With all write APIs if image is in one of the linear formats with
-(png_uint_16) data then setting convert_to_8_bit will cause the output to be
-a (png_byte) PNG gamma encoded according to the sRGB specification, otherwise
-a 16-bit linear encoded PNG file is written.
-
-With all APIs row_stride is handled as in the read APIs - it is the spacing
-from one row to the next in component sized units (float) and if negative
-indicates a bottom-up row layout in the buffer.
-
-Note that the write API does not support interlacing, sub-8-bit pixels,
-and indexed (paletted) images.
-
-VI. Modifying/Customizing libpng
-
-There are two issues here.  The first is changing how libpng does
-standard things like memory allocation, input/output, and error handling.
-The second deals with more complicated things like adding new chunks,
-adding new transformations, and generally changing how libpng works.
-Both of those are compile-time issues; that is, they are generally
-determined at the time the code is written, and there is rarely a need
-to provide the user with a means of changing them.
-
-Memory allocation, input/output, and error handling
-
-All of the memory allocation, input/output, and error handling in libpng
-goes through callbacks that are user-settable.  The default routines are
-in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively.  To change
-these functions, call the appropriate png_set_*_fn() function.
-
-Memory allocation is done through the functions png_malloc(), png_calloc(),
-and png_free().  The png_malloc() and png_free() functions currently just
-call the standard C functions and png_calloc() calls png_malloc() and then
-clears the newly allocated memory to zero; note that png_calloc(png_ptr, size)
-is not the same as the calloc(number, size) function provided by stdlib.h.
-There is limited support for certain systems with segmented memory
-architectures and the types of pointers declared by png.h match this; you
-will have to use appropriate pointers in your application.  If you prefer
-to use a different method of allocating and freeing data, you can use
-png_create_read_struct_2() or png_create_write_struct_2() to register your
-own functions as described above.  These functions also provide a void
-pointer that can be retrieved via
-
-    mem_ptr=png_get_mem_ptr(png_ptr);
-
-Your replacement memory functions must have prototypes as follows:
-
-    png_voidp malloc_fn(png_structp png_ptr,
-       png_alloc_size_t size);
-
-    void free_fn(png_structp png_ptr, png_voidp ptr);
-
-Your malloc_fn() must return NULL in case of failure.  The png_malloc()
-function will normally call png_error() if it receives a NULL from the
-system memory allocator or from your replacement malloc_fn().
-
-Your free_fn() will never be called with a NULL ptr, since libpng's
-png_free() checks for NULL before calling free_fn().
-
-Input/Output in libpng is done through png_read() and png_write(),
-which currently just call fread() and fwrite().  The FILE * is stored in
-png_struct and is initialized via png_init_io().  If you wish to change
-the method of I/O, the library supplies callbacks that you can set
-through the function png_set_read_fn() and png_set_write_fn() at run
-time, instead of calling the png_init_io() function.  These functions
-also provide a void pointer that can be retrieved via the function
-png_get_io_ptr().  For example:
-
-    png_set_read_fn(png_structp read_ptr,
-        voidp read_io_ptr, png_rw_ptr read_data_fn)
-
-    png_set_write_fn(png_structp write_ptr,
-        voidp write_io_ptr, png_rw_ptr write_data_fn,
-        png_flush_ptr output_flush_fn);
-
-    voidp read_io_ptr = png_get_io_ptr(read_ptr);
-    voidp write_io_ptr = png_get_io_ptr(write_ptr);
-
-The replacement I/O functions must have prototypes as follows:
-
-    void user_read_data(png_structp png_ptr,
-        png_bytep data, png_size_t length);
-
-    void user_write_data(png_structp png_ptr,
-        png_bytep data, png_size_t length);
-
-    void user_flush_data(png_structp png_ptr);
-
-The user_read_data() function is responsible for detecting and
-handling end-of-data errors.
-
-Supplying NULL for the read, write, or flush functions sets them back
-to using the default C stream functions, which expect the io_ptr to
-point to a standard *FILE structure.  It is probably a mistake
-to use NULL for one of write_data_fn and output_flush_fn but not both
-of them, unless you have built libpng with PNG_NO_WRITE_FLUSH defined.
-It is an error to read from a write stream, and vice versa.
-
-Error handling in libpng is done through png_error() and png_warning().
-Errors handled through png_error() are fatal, meaning that png_error()
-should never return to its caller.  Currently, this is handled via
-setjmp() and longjmp() (unless you have compiled libpng with
-PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
-but you could change this to do things like exit() if you should wish,
-as long as your function does not return.
-
-On non-fatal errors, png_warning() is called
-to print a warning message, and then control returns to the calling code.
-By default png_error() and png_warning() print a message on stderr via
-fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
-(because you don't want the messages) or PNG_NO_STDIO defined (because
-fprintf() isn't available).  If you wish to change the behavior of the error
-functions, you will need to set up your own message callbacks.  These
-functions are normally supplied at the time that the png_struct is created.
-It is also possible to redirect errors and warnings to your own replacement
-functions after png_create_*_struct() has been called by calling:
-
-    png_set_error_fn(png_structp png_ptr,
-        png_voidp error_ptr, png_error_ptr error_fn,
-        png_error_ptr warning_fn);
-
-    png_voidp error_ptr = png_get_error_ptr(png_ptr);
-
-If NULL is supplied for either error_fn or warning_fn, then the libpng
-default function will be used, calling fprintf() and/or longjmp() if a
-problem is encountered.  The replacement error functions should have
-parameters as follows:
-
-    void user_error_fn(png_structp png_ptr,
-        png_const_charp error_msg);
-
-    void user_warning_fn(png_structp png_ptr,
-        png_const_charp warning_msg);
-
-The motivation behind using setjmp() and longjmp() is the C++ throw and
-catch exception handling methods.  This makes the code much easier to write,
-as there is no need to check every return code of every function call.
-However, there are some uncertainties about the status of local variables
-after a longjmp, so the user may want to be careful about doing anything
-after setjmp returns non-zero besides returning itself.  Consult your
-compiler documentation for more details.  For an alternative approach, you
-may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net),
-which is illustrated in pngvalid.c and in contrib/visupng.
-
-Beginning in libpng-1.4.0, the png_set_benign_errors() API became available.
-You can use this to handle certain errors (normally handled as errors)
-as warnings.
-
-    png_set_benign_errors (png_ptr, int allowed);
-
-    allowed: 0: treat png_benign_error() as an error.
-             1: treat png_benign_error() as a warning.
-
-As of libpng-1.6.0, the default condition is to treat benign errors as
-warnings while reading and as errors while writing.
-
-Custom chunks
-
-If you need to read or write custom chunks, you may need to get deeper
-into the libpng code.  The library now has mechanisms for storing
-and writing chunks of unknown type; you can even declare callbacks
-for custom chunks.  However, this may not be good enough if the
-library code itself needs to know about interactions between your
-chunk and existing `intrinsic' chunks.
-
-If you need to write a new intrinsic chunk, first read the PNG
-specification. Acquire a first level of understanding of how it works.
-Pay particular attention to the sections that describe chunk names,
-and look at how other chunks were designed, so you can do things
-similarly.  Second, check out the sections of libpng that read and
-write chunks.  Try to find a chunk that is similar to yours and use
-it as a template.  More details can be found in the comments inside
-the code.  It is best to handle private or unknown chunks in a generic method,
-via callback functions, instead of by modifying libpng functions. This
-is illustrated in pngtest.c, which uses a callback function to handle a
-private "vpAg" chunk and the new "sTER" chunk, which are both unknown to
-libpng.
-
-If you wish to write your own transformation for the data, look through
-the part of the code that does the transformations, and check out some of
-the simpler ones to get an idea of how they work.  Try to find a similar
-transformation to the one you want to add and copy off of it.  More details
-can be found in the comments inside the code itself.
-
-Configuring for gui/windowing platforms:
-
-You will need to write new error and warning functions that use the GUI
-interface, as described previously, and set them to be the error and
-warning functions at the time that png_create_*_struct() is called,
-in order to have them available during the structure initialization.
-They can be changed later via png_set_error_fn().  On some compilers,
-you may also have to change the memory allocators (png_malloc, etc.).
-
-Configuring zlib:
-
-There are special functions to configure the compression.  Perhaps the
-most useful one changes the compression level, which currently uses
-input compression values in the range 0 - 9.  The library normally
-uses the default compression level (Z_DEFAULT_COMPRESSION = 6).  Tests
-have shown that for a large majority of images, compression values in
-the range 3-6 compress nearly as well as higher levels, and do so much
-faster.  For online applications it may be desirable to have maximum speed
-(Z_BEST_SPEED = 1).  With versions of zlib after v0.99, you can also
-specify no compression (Z_NO_COMPRESSION = 0), but this would create
-files larger than just storing the raw bitmap.  You can specify the
-compression level by calling:
-
-    #include zlib.h
-    png_set_compression_level(png_ptr, level);
-
-Another useful one is to reduce the memory level used by the library.
-The memory level defaults to 8, but it can be lowered if you are
-short on memory (running DOS, for example, where you only have 640K).
-Note that the memory level does have an effect on compression; among
-other things, lower levels will result in sections of incompressible
-data being emitted in smaller stored blocks, with a correspondingly
-larger relative overhead of up to 15% in the worst case.
-
-    #include zlib.h
-    png_set_compression_mem_level(png_ptr, level);
-
-The other functions are for configuring zlib.  They are not recommended
-for normal use and may result in writing an invalid PNG file.  See
-zlib.h for more information on what these mean.
-
-    #include zlib.h
-    png_set_compression_strategy(png_ptr,
-        strategy);
-
-    png_set_compression_window_bits(png_ptr,
-        window_bits);
-
-    png_set_compression_method(png_ptr, method);
-
-This controls the size of the IDAT chunks (default 8192):
-
-    png_set_compression_buffer_size(png_ptr, size);
-
-As of libpng version 1.5.4, additional APIs became
-available to set these separately for non-IDAT
-compressed chunks such as zTXt, iTXt, and iCCP:
-
-    #include zlib.h
-    #if PNG_LIBPNG_VER >= 10504
-    png_set_text_compression_level(png_ptr, level);
-
-    png_set_text_compression_mem_level(png_ptr, level);
-
-    png_set_text_compression_strategy(png_ptr,
-        strategy);
-
-    png_set_text_compression_window_bits(png_ptr,
-        window_bits);
-
-    png_set_text_compression_method(png_ptr, method);
-    #endif
-
-Controlling row filtering
-
-If you want to control whether libpng uses filtering or not, which
-filters are used, and how it goes about picking row filters, you
-can call one of these functions.  The selection and configuration
-of row filters can have a significant impact on the size and
-encoding speed and a somewhat lesser impact on the decoding speed
-of an image.  Filtering is enabled by default for RGB and grayscale
-images (with and without alpha), but not for paletted images nor
-for any images with bit depths less than 8 bits/pixel.
-
-The 'method' parameter sets the main filtering method, which is
-currently only '0' in the PNG 1.2 specification.  The 'filters'
-parameter sets which filter(s), if any, should be used for each
-scanline.  Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
-to turn filtering on and off, respectively.
-
-Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
-PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
-ORed together with '|' to specify one or more filters to use.
-These filters are described in more detail in the PNG specification.
-If you intend to change the filter type during the course of writing
-the image, you should start with flags set for all of the filters
-you intend to use so that libpng can initialize its internal
-structures appropriately for all of the filter types.  (Note that this
-means the first row must always be adaptively filtered, because libpng
-currently does not allocate the filter buffers until png_write_row()
-is called for the first time.)
-
-    filters = PNG_FILTER_NONE | PNG_FILTER_SUB
-              PNG_FILTER_UP | PNG_FILTER_AVG |
-              PNG_FILTER_PAETH | PNG_ALL_FILTERS;
-
-    png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
-       filters);
-              The second parameter can also be
-              PNG_INTRAPIXEL_DIFFERENCING if you are
-              writing a PNG to be embedded in a MNG
-              datastream.  This parameter must be the
-              same as the value of filter_method used
-              in png_set_IHDR().
-
-It is also possible to influence how libpng chooses from among the
-available filters.  This is done in one or both of two ways - by
-telling it how important it is to keep the same filter for successive
-rows, and by telling it the relative computational costs of the filters.
-
-    double weights[3] = {1.5, 1.3, 1.1},
-       costs[PNG_FILTER_VALUE_LAST] =
-       {1.0, 1.3, 1.3, 1.5, 1.7};
-
-    png_set_filter_heuristics(png_ptr,
-       PNG_FILTER_HEURISTIC_WEIGHTED, 3,
-       weights, costs);
-
-The weights are multiplying factors that indicate to libpng that the
-row filter should be the same for successive rows unless another row filter
-is that many times better than the previous filter.  In the above example,
-if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
-"sum of absolute differences" 1.5 x 1.3 times higher than other filters
-and still be chosen, while the NONE filter could have a sum 1.1 times
-higher than other filters and still be chosen.  Unspecified weights are
-taken to be 1.0, and the specified weights should probably be declining
-like those above in order to emphasize recent filters over older filters.
-
-The filter costs specify for each filter type a relative decoding cost
-to be considered when selecting row filters.  This means that filters
-with higher costs are less likely to be chosen over filters with lower
-costs, unless their "sum of absolute differences" is that much smaller.
-The costs do not necessarily reflect the exact computational speeds of
-the various filters, since this would unduly influence the final image
-size.
-
-Note that the numbers above were invented purely for this example and
-are given only to help explain the function usage.  Little testing has
-been done to find optimum values for either the costs or the weights.
-
-Requesting debug printout
-
-The macro definition PNG_DEBUG can be used to request debugging
-printout.  Set it to an integer value in the range 0 to 3.  Higher
-numbers result in increasing amounts of debugging information.  The
-information is printed to the "stderr" file, unless another file
-name is specified in the PNG_DEBUG_FILE macro definition.
-
-When PNG_DEBUG > 0, the following functions (macros) become available:
-
-   png_debug(level, message)
-   png_debug1(level, message, p1)
-   png_debug2(level, message, p1, p2)
-
-in which "level" is compared to PNG_DEBUG to decide whether to print
-the message, "message" is the formatted string to be printed,
-and p1 and p2 are parameters that are to be embedded in the string
-according to printf-style formatting directives.  For example,
-
-   png_debug1(2, "foo=%d", foo);
-
-is expanded to
-
-   if (PNG_DEBUG > 2)
-      fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
-
-When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
-can still use PNG_DEBUG to control your own debugging:
-
-   #ifdef PNG_DEBUG
-       fprintf(stderr, ...
-   #endif
-
-When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
-having level = 0 will be printed.  There aren't any such statements in
-this version of libpng, but if you insert some they will be printed.
-
-VII.  MNG support
-
-The MNG specification (available at http://www.libpng.org/pub/mng) allows
-certain extensions to PNG for PNG images that are embedded in MNG datastreams.
-Libpng can support some of these extensions.  To enable them, use the
-png_permit_mng_features() function:
-
-   feature_set = png_permit_mng_features(png_ptr, mask)
-
-   mask is a png_uint_32 containing the bitwise OR of the
-        features you want to enable.  These include
-        PNG_FLAG_MNG_EMPTY_PLTE
-        PNG_FLAG_MNG_FILTER_64
-        PNG_ALL_MNG_FEATURES
-
-   feature_set is a png_uint_32 that is the bitwise AND of
-      your mask with the set of MNG features that is
-      supported by the version of libpng that you are using.
-
-It is an error to use this function when reading or writing a standalone
-PNG file with the PNG 8-byte signature.  The PNG datastream must be wrapped
-in a MNG datastream.  As a minimum, it must have the MNG 8-byte signature
-and the MHDR and MEND chunks.  Libpng does not provide support for these
-or any other MNG chunks; your application must provide its own support for
-them.  You may wish to consider using libmng (available at
-http://www.libmng.com) instead.
-
-VIII.  Changes to Libpng from version 0.88
-
-It should be noted that versions of libpng later than 0.96 are not
-distributed by the original libpng author, Guy Schalnat, nor by
-Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
-distributed versions 0.89 through 0.96, but rather by another member
-of the original PNG Group, Glenn Randers-Pehrson.  Guy and Andreas are
-still alive and well, but they have moved on to other things.
-
-The old libpng functions png_read_init(), png_write_init(),
-png_info_init(), png_read_destroy(), and png_write_destroy() have been
-moved to PNG_INTERNAL in version 0.95 to discourage their use.  These
-functions will be removed from libpng version 1.4.0.
-
-The preferred method of creating and initializing the libpng structures is
-via the png_create_read_struct(), png_create_write_struct(), and
-png_create_info_struct() because they isolate the size of the structures
-from the application, allow version error checking, and also allow the
-use of custom error handling routines during the initialization, which
-the old functions do not.  The functions png_read_destroy() and
-png_write_destroy() do not actually free the memory that libpng
-allocated for these structs, but just reset the data structures, so they
-can be used instead of png_destroy_read_struct() and
-png_destroy_write_struct() if you feel there is too much system overhead
-allocating and freeing the png_struct for each image read.
-
-Setting the error callbacks via png_set_message_fn() before
-png_read_init() as was suggested in libpng-0.88 is no longer supported
-because this caused applications that do not use custom error functions
-to fail if the png_ptr was not initialized to zero.  It is still possible
-to set the error callbacks AFTER png_read_init(), or to change them with
-png_set_error_fn(), which is essentially the same function, but with a new
-name to force compilation errors with applications that try to use the old
-method.
-
-Support for the sCAL, iCCP, iTXt, and sPLT chunks was added at libpng-1.0.6;
-however, iTXt support was not enabled by default.
-
-Starting with version 1.0.7, you can find out which version of the library
-you are using at run-time:
-
-   png_uint_32 libpng_vn = png_access_version_number();
-
-The number libpng_vn is constructed from the major version, minor
-version with leading zero, and release number with leading zero,
-(e.g., libpng_vn for version 1.0.7 is 10007).
-
-Note that this function does not take a png_ptr, so you can call it
-before you've created one.
-
-You can also check which version of png.h you used when compiling your
-application:
-
-   png_uint_32 application_vn = PNG_LIBPNG_VER;
-
-IX.  Changes to Libpng from version 1.0.x to 1.2.x
-
-Support for user memory management was enabled by default.  To
-accomplish this, the functions png_create_read_struct_2(),
-png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
-png_malloc_default(), and png_free_default() were added.
-
-Support for the iTXt chunk has been enabled by default as of
-version 1.2.41.
-
-Support for certain MNG features was enabled.
-
-Support for numbered error messages was added.  However, we never got
-around to actually numbering the error messages.  The function
-png_set_strip_error_numbers() was added (Note: the prototype for this
-function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
-builds of libpng-1.2.15.  It was restored in libpng-1.2.36).
-
-The png_malloc_warn() function was added at libpng-1.2.3.  This issues
-a png_warning and returns NULL instead of aborting when it fails to
-acquire the requested memory allocation.
-
-Support for setting user limits on image width and height was enabled
-by default.  The functions png_set_user_limits(), png_get_user_width_max(),
-and png_get_user_height_max() were added at libpng-1.2.6.
-
-The png_set_add_alpha() function was added at libpng-1.2.7.
-
-The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
-Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
-tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
-deprecated.
-
-A number of macro definitions in support of runtime selection of
-assembler code features (especially Intel MMX code support) were
-added at libpng-1.2.0:
-
-    PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
-    PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
-    PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
-    PNG_ASM_FLAG_MMX_READ_INTERLACE
-    PNG_ASM_FLAG_MMX_READ_FILTER_SUB
-    PNG_ASM_FLAG_MMX_READ_FILTER_UP
-    PNG_ASM_FLAG_MMX_READ_FILTER_AVG
-    PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
-    PNG_ASM_FLAGS_INITIALIZED
-    PNG_MMX_READ_FLAGS
-    PNG_MMX_FLAGS
-    PNG_MMX_WRITE_FLAGS
-    PNG_MMX_FLAGS
-
-We added the following functions in support of runtime
-selection of assembler code features:
-
-    png_get_mmx_flagmask()
-    png_set_mmx_thresholds()
-    png_get_asm_flags()
-    png_get_mmx_bitdepth_threshold()
-    png_get_mmx_rowbytes_threshold()
-    png_set_asm_flags()
-
-We replaced all of these functions with simple stubs in libpng-1.2.20,
-when the Intel assembler code was removed due to a licensing issue.
-
-These macros are deprecated:
-
-    PNG_READ_TRANSFORMS_NOT_SUPPORTED
-    PNG_PROGRESSIVE_READ_NOT_SUPPORTED
-    PNG_NO_SEQUENTIAL_READ_SUPPORTED
-    PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
-    PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
-    PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
-
-They have been replaced, respectively, by:
-
-    PNG_NO_READ_TRANSFORMS
-    PNG_NO_PROGRESSIVE_READ
-    PNG_NO_SEQUENTIAL_READ
-    PNG_NO_WRITE_TRANSFORMS
-    PNG_NO_READ_ANCILLARY_CHUNKS
-    PNG_NO_WRITE_ANCILLARY_CHUNKS
-
-PNG_MAX_UINT was replaced with PNG_UINT_31_MAX.  It has been
-deprecated since libpng-1.0.16 and libpng-1.2.6.
-
-The function
-    png_check_sig(sig, num)
-was replaced with
-    !png_sig_cmp(sig, 0, num)
-It has been deprecated since libpng-0.90.
-
-The function
-    png_set_gray_1_2_4_to_8()
-which also expands tRNS to alpha was replaced with
-    png_set_expand_gray_1_2_4_to_8()
-which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
-
-X.  Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
-
-Private libpng prototypes and macro definitions were moved from
-png.h and pngconf.h into a new pngpriv.h header file.
-
-Functions png_set_benign_errors(), png_benign_error(), and
-png_chunk_benign_error() were added.
-
-Support for setting the maximum amount of memory that the application
-will allocate for reading chunks was added, as a security measure.
-The functions png_set_chunk_cache_max() and png_get_chunk_cache_max()
-were added to the library.
-
-We implemented support for I/O states by adding png_ptr member io_state
-and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
-
-We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
-input transforms.
-
-Checking for and reporting of errors in the IHDR chunk is more thorough.
-
-Support for global arrays was removed, to improve thread safety.
-
-Some obsolete/deprecated macros and functions have been removed.
-
-Typecasted NULL definitions such as
-   #define png_voidp_NULL            (png_voidp)NULL
-were eliminated.  If you used these in your application, just use
-NULL instead.
-
-The png_struct and info_struct members "trans" and "trans_values" were
-changed to "trans_alpha" and "trans_color", respectively.
-
-The obsolete, unused pnggccrd.c and pngvcrd.c files and related makefiles
-were removed.
-
-The PNG_1_0_X and PNG_1_2_X macros were eliminated.
-
-The PNG_LEGACY_SUPPORTED macro was eliminated.
-
-Many WIN32_WCE #ifdefs were removed.
-
-The functions png_read_init(info_ptr), png_write_init(info_ptr),
-png_info_init(info_ptr), png_read_destroy(), and png_write_destroy()
-have been removed.  They have been deprecated since libpng-0.95.
-
-The png_permit_empty_plte() was removed. It has been deprecated
-since libpng-1.0.9.  Use png_permit_mng_features() instead.
-
-We removed the obsolete stub functions png_get_mmx_flagmask(),
-png_set_mmx_thresholds(), png_get_asm_flags(),
-png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(),
-png_set_asm_flags(), and png_mmx_supported()
-
-We removed the obsolete png_check_sig(), png_memcpy_check(), and
-png_memset_check() functions.  Instead use !png_sig_cmp(), memcpy(),
-and memset(), respectively.
-
-The function png_set_gray_1_2_4_to_8() was removed. It has been
-deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
-png_set_expand_gray_1_2_4_to_8() because the former function also
-expanded any tRNS chunk to an alpha channel.
-
-Macros for png_get_uint_16, png_get_uint_32, and png_get_int_32
-were added and are used by default instead of the corresponding
-functions. Unfortunately,
-from libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-function) incorrectly returned a value of type png_uint_32.
-
-We changed the prototype for png_malloc() from
-    png_malloc(png_structp png_ptr, png_uint_32 size)
-to
-    png_malloc(png_structp png_ptr, png_alloc_size_t size)
-
-This also applies to the prototype for the user replacement malloc_fn().
-
-The png_calloc() function was added and is used in place of
-of "png_malloc(); memset();" except in the case in png_read_png()
-where the array consists of pointers; in this case a "for" loop is used
-after the png_malloc() to set the pointers to NULL, to give robust.
-behavior in case the application runs out of memory part-way through
-the process.
-
-We changed the prototypes of png_get_compression_buffer_size() and
-png_set_compression_buffer_size() to work with png_size_t instead of
-png_uint_32.
-
-Support for numbered error messages was removed by default, since we
-never got around to actually numbering the error messages. The function
-png_set_strip_error_numbers() was removed from the library by default.
-
-The png_zalloc() and png_zfree() functions are no longer exported.
-The png_zalloc() function no longer zeroes out the memory that it
-allocates.  Applications that called png_zalloc(png_ptr, number, size)
-can call png_calloc(png_ptr, number*size) instead, and can call
-png_free() instead of png_zfree().
-
-Support for dithering was disabled by default in libpng-1.4.0, because
-it has not been well tested and doesn't actually "dither".
-The code was not
-removed, however, and could be enabled by building libpng with
-PNG_READ_DITHER_SUPPORTED defined.  In libpng-1.4.2, this support
-was re-enabled, but the function was renamed png_set_quantize() to
-reflect more accurately what it actually does.  At the same time,
-the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros were also renamed to
-PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS, and PNG_READ_DITHER_SUPPORTED
-was renamed to PNG_READ_QUANTIZE_SUPPORTED.
-
-We removed the trailing '.' from the warning and error messages.
-
-XI.  Changes to Libpng from version 1.4.x to 1.5.x
-
-From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-function) incorrectly returned a value of type png_uint_32.
-The incorrect macro was removed from libpng-1.4.5.
-
-Checking for invalid palette index on write was added at libpng
-1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
-a benign error.  This is enabled by default because this condition is an
-error according to the PNG specification, Clause 11.3.2, but the error can
-be ignored in each png_ptr with
-
-   png_set_check_for_invalid_index(png_ptr, allowed);
-
-      allowed  - one of
-                 0: disable benign error (accept the
-                    invalid data without warning).
-                 1: enable benign error (treat the
-                    invalid data as an error or a
-                    warning).
-
-If the error is ignored, or if png_benign_error() treats it as a warning,
-any invalid pixels are decoded as opaque black by the decoder and written
-as-is by the encoder.
-
-Retrieving the maximum palette index found was added at libpng-1.5.15.
-This statement must appear after png_read_png() or png_read_image() while
-reading, and after png_write_png() or png_write_image() while writing.
-
-   int max_palette = png_get_palette_max(png_ptr, info_ptr);
-
-This will return the maximum palette index found in the image, or "-1" if
-the palette was not checked, or "0" if no palette was found.  Note that this
-does not account for any palette index used by ancillary chunks such as the
-bKGD chunk; you must check those separately to determine the maximum
-palette index actually used.
-
-There are no substantial API changes between the non-deprecated parts of
-the 1.4.5 API and the 1.5.0 API; however, the ability to directly access
-members of the main libpng control structures, png_struct and png_info,
-deprecated in earlier versions of libpng, has been completely removed from
-libpng 1.5.
-
-We no longer include zlib.h in png.h.  The include statement has been moved
-to pngstruct.h, where it is not accessible by applications. Applications that
-need access to information in zlib.h will need to add the '#include "zlib.h"'
-directive.  It does not matter whether this is placed prior to or after
-the '"#include png.h"' directive.
-
-The png_sprintf(), png_strcpy(), and png_strncpy() macros are no longer used
-and were removed.
-
-We moved the png_strlen(), png_memcpy(), png_memset(), and png_memcmp()
-macros into a private header file (pngpriv.h) that is not accessible to
-applications.
-
-In png_get_iCCP, the type of "profile" was changed from png_charpp
-to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep.
-
-There are changes of form in png.h, including new and changed macros to
-declare parts of the API.  Some API functions with arguments that are
-pointers to data not modified within the function have been corrected to
-declare these arguments with PNG_CONST.
-
-Much of the internal use of C macros to control the library build has also
-changed and some of this is visible in the exported header files, in
-particular the use of macros to control data and API elements visible
-during application compilation may require significant revision to
-application code.  (It is extremely rare for an application to do this.)
-
-Any program that compiled against libpng 1.4 and did not use deprecated
-features or access internal library structures should compile and work
-against libpng 1.5, except for the change in the prototype for
-png_get_iCCP() and png_set_iCCP() API functions mentioned above.
-
-libpng 1.5.0 adds PNG_ PASS macros to help in the reading and writing of
-interlaced images.  The macros return the number of rows and columns in
-each pass and information that can be used to de-interlace and (if
-absolutely necessary) interlace an image.
-
-libpng 1.5.0 adds an API png_longjmp(png_ptr, value).  This API calls
-the application-provided png_longjmp_ptr on the internal, but application
-initialized, longjmp buffer.  It is provided as a convenience to avoid
-the need to use the png_jmpbuf macro, which had the unnecessary side
-effect of resetting the internal png_longjmp_ptr value.
-
-libpng 1.5.0 includes a complete fixed point API.  By default this is
-present along with the corresponding floating point API.  In general the
-fixed point API is faster and smaller than the floating point one because
-the PNG file format used fixed point, not floating point.  This applies
-even if the library uses floating point in internal calculations.  A new
-macro, PNG_FLOATING_ARITHMETIC_SUPPORTED, reveals whether the library
-uses floating point arithmetic (the default) or fixed point arithmetic
-internally for performance critical calculations such as gamma correction.
-In some cases, the gamma calculations may produce slightly different
-results.  This has changed the results in png_rgb_to_gray and in alpha
-composition (png_set_background for example). This applies even if the
-original image was already linear (gamma == 1.0) and, therefore, it is
-not necessary to linearize the image.  This is because libpng has *not*
-been changed to optimize that case correctly, yet.
-
-Fixed point support for the sCAL chunk comes with an important caveat;
-the sCAL specification uses a decimal encoding of floating point values
-and the accuracy of PNG fixed point values is insufficient for
-representation of these values. Consequently a "string" API
-(png_get_sCAL_s and png_set_sCAL_s) is the only reliable way of reading
-arbitrary sCAL chunks in the absence of either the floating point API or
-internal floating point calculations.  Starting with libpng-1.5.0, both
-of these functions are present when PNG_sCAL_SUPPORTED is defined.  Prior
-to libpng-1.5.0, their presence also depended upon PNG_FIXED_POINT_SUPPORTED
-being defined and PNG_FLOATING_POINT_SUPPORTED not being defined.
-
-Applications no longer need to include the optional distribution header
-file pngusr.h or define the corresponding macros during application
-build in order to see the correct variant of the libpng API.  From 1.5.0
-application code can check for the corresponding _SUPPORTED macro:
-
-#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
-   /* code that uses the inch conversion APIs. */
-#endif
-
-This macro will only be defined if the inch conversion functions have been
-compiled into libpng.  The full set of macros, and whether or not support
-has been compiled in, are available in the header file pnglibconf.h.
-This header file is specific to the libpng build.  Notice that prior to
-1.5.0 the _SUPPORTED macros would always have the default definition unless
-reset by pngusr.h or by explicit settings on the compiler command line.
-These settings may produce compiler warnings or errors in 1.5.0 because
-of macro redefinition.
-
-Applications can now choose whether to use these macros or to call the
-corresponding function by defining PNG_USE_READ_MACROS or
-PNG_NO_USE_READ_MACROS before including png.h.  Notice that this is
-only supported from 1.5.0; defining PNG_NO_USE_READ_MACROS prior to 1.5.0
-will lead to a link failure.
-
-Prior to libpng-1.5.4, the zlib compressor used the same set of parameters
-when compressing the IDAT data and textual data such as zTXt and iCCP.
-In libpng-1.5.4 we reinitialized the zlib stream for each type of data.
-We added five png_set_text_*() functions for setting the parameters to
-use with textual data.
-
-Prior to libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-option was off by default, and slightly inaccurate scaling occurred.
-This option can no longer be turned off, and the choice of accurate
-or inaccurate 16-to-8 scaling is by using the new png_set_scale_16_to_8()
-API for accurate scaling or the old png_set_strip_16_to_8() API for simple
-chopping.  In libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-macro became PNG_READ_SCALE_16_TO_8_SUPPORTED, and the PNG_READ_16_TO_8
-macro became PNG_READ_STRIP_16_TO_8_SUPPORTED, to enable the two
-png_set_*_16_to_8() functions separately.
-
-Prior to libpng-1.5.4, the png_set_user_limits() function could only be
-used to reduce the width and height limits from the value of
-PNG_USER_WIDTH_MAX and PNG_USER_HEIGHT_MAX, although this document said
-that it could be used to override them.  Now this function will reduce or
-increase the limits.
-
-Starting in libpng-1.5.10, the user limits can be set en masse with the
-configuration option PNG_SAFE_LIMITS_SUPPORTED.  If this option is enabled,
-a set of "safe" limits is applied in pngpriv.h.  These can be overridden by
-application calls to png_set_user_limits(), png_set_user_chunk_cache_max(),
-and/or png_set_user_malloc_max() that increase or decrease the limits.  Also,
-in libpng-1.5.10 the default width and height limits were increased
-from 1,000,000 to 0x7ffffff (i.e., made unlimited).  Therefore, the
-limits are now
-                               default      safe
-   png_user_width_max        0x7fffffff    1,000,000
-   png_user_height_max       0x7fffffff    1,000,000
-   png_user_chunk_cache_max  0 (unlimited)   128
-   png_user_chunk_malloc_max 0 (unlimited) 8,000,000
-
-The png_set_option() function (and the "options" member of the png struct) was
-added to libpng-1.5.15.
-
-The library now supports a complete fixed point implementation and can
-thus be used on systems that have no floating point support or very
-limited or slow support.  Previously gamma correction, an essential part
-of complete PNG support, required reasonably fast floating point.
-
-As part of this the choice of internal implementation has been made
-independent of the choice of fixed versus floating point APIs and all the
-missing fixed point APIs have been implemented.
-
-The exact mechanism used to control attributes of API functions has
-changed, as described in the INSTALL file.
-
-A new test program, pngvalid, is provided in addition to pngtest.
-pngvalid validates the arithmetic accuracy of the gamma correction
-calculations and includes a number of validations of the file format.
-A subset of the full range of tests is run when "make check" is done
-(in the 'configure' build.)  pngvalid also allows total allocated memory
-usage to be evaluated and performs additional memory overwrite validation.
-
-Many changes to individual feature macros have been made. The following
-are the changes most likely to be noticed by library builders who
-configure libpng:
-
-1) All feature macros now have consistent naming:
-
-#define PNG_NO_feature turns the feature off
-#define PNG_feature_SUPPORTED turns the feature on
-
-pnglibconf.h contains one line for each feature macro which is either:
-
-#define PNG_feature_SUPPORTED
-
-if the feature is supported or:
-
-/*#undef PNG_feature_SUPPORTED*/
-
-if it is not.  Library code consistently checks for the 'SUPPORTED' macro.
-It does not, and libpng applications should not, check for the 'NO' macro
-which will not normally be defined even if the feature is not supported.
-The 'NO' macros are only used internally for setting or not setting the
-corresponding 'SUPPORTED' macros.
-
-Compatibility with the old names is provided as follows:
-
-PNG_INCH_CONVERSIONS turns on PNG_INCH_CONVERSIONS_SUPPORTED
-
-And the following definitions disable the corresponding feature:
-
-PNG_SETJMP_NOT_SUPPORTED disables SETJMP
-PNG_READ_TRANSFORMS_NOT_SUPPORTED disables READ_TRANSFORMS
-PNG_NO_READ_COMPOSITED_NODIV disables READ_COMPOSITE_NODIV
-PNG_WRITE_TRANSFORMS_NOT_SUPPORTED disables WRITE_TRANSFORMS
-PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED disables READ_ANCILLARY_CHUNKS
-PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED disables WRITE_ANCILLARY_CHUNKS
-
-Library builders should remove use of the above, inconsistent, names.
-
-2) Warning and error message formatting was previously conditional on
-the STDIO feature. The library has been changed to use the
-CONSOLE_IO feature instead. This means that if CONSOLE_IO is disabled
-the library no longer uses the printf(3) functions, even though the
-default read/write implementations use (FILE) style stdio.h functions.
-
-3) Three feature macros now control the fixed/floating point decisions:
-
-PNG_FLOATING_POINT_SUPPORTED enables the floating point APIs
-
-PNG_FIXED_POINT_SUPPORTED enables the fixed point APIs; however, in
-practice these are normally required internally anyway (because the PNG
-file format is fixed point), therefore in most cases PNG_NO_FIXED_POINT
-merely stops the function from being exported.
-
-PNG_FLOATING_ARITHMETIC_SUPPORTED chooses between the internal floating
-point implementation or the fixed point one.  Typically the fixed point
-implementation is larger and slower than the floating point implementation
-on a system that supports floating point; however, it may be faster on a
-system which lacks floating point hardware and therefore uses a software
-emulation.
-
-4) Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the
-functions to read and write ints to be disabled independently of
-PNG_USE_READ_MACROS, which allows libpng to be built with the functions
-even though the default is to use the macros - this allows applications
-to choose at app buildtime whether or not to use macros (previously
-impossible because the functions weren't in the default build.)
-
-XII.  Changes to Libpng from version 1.5.x to 1.6.x
-
-A "simplified API" has been added (see documentation in png.h and a simple
-example in contrib/examples/pngtopng.c).  The new publicly visible API
-includes the following:
-
-   macros:
-     PNG_FORMAT_*
-     PNG_IMAGE_*
-   structures:
-     png_control
-     png_image
-   read functions
-     png_image_begin_read_from_file()
-     png_image_begin_read_from_stdio()
-     png_image_begin_read_from_memory()
-     png_image_finish_read()
-     png_image_free()
-   write functions
-     png_image_write_to_file()
-     png_image_write_to_stdio()
-
-Starting with libpng-1.6.0, you can configure libpng to prefix all exported
-symbols, using the PNG_PREFIX macro.
-
-We no longer include string.h in png.h.  The include statement has been moved
-to pngpriv.h, where it is not accessible by applications.  Applications that
-need access to information in string.h must add an '#include <string.h>'
-directive.  It does not matter whether this is placed prior to or after
-the '#include "png.h"' directive.
-
-The following API are now DEPRECATED:
-   png_info_init_3()
-   png_convert_to_rfc1123() which has been replaced
-     with png_convert_to_rfc1123_buffer()
-   png_malloc_default()
-   png_free_default()
-   png_reset_zstream()
-
-The following have been removed:
-   png_get_io_chunk_name(), which has been replaced
-     with png_get_io_chunk_type().  The new
-     function returns a 32-bit integer instead of
-     a string.
-   The png_sizeof(), png_strlen(), png_memcpy(), png_memcmp(), and
-     png_memset() macros are no longer used in the libpng sources and
-     have been removed.  These had already been made invisible to applications
-     (i.e., defined in the private pngpriv.h header file) since libpng-1.5.0.
-
-The signatures of many exported functions were changed, such that
-   png_structp became png_structrp or png_const_structrp
-   png_infop became png_inforp or png_const_inforp
-where "rp" indicates a "restricted pointer".
-
-Error detection in some chunks has improved; in particular the iCCP chunk
-reader now does pretty complete validation of the basic format.  Some bad
-profiles that were previously accepted are now accepted with a warning or
-rejected, depending upon the png_set_benign_errors() setting, in particular
-the very old broken Microsoft/HP 3144-byte sRGB profile.  Starting with
-libpng-1.6.11, recognizing and checking sRGB profiles can be avoided by
-means of
-
-    #if defined(PNG_SKIP_sRGB_CHECK_PROFILE) && \
-        defined(PNG_SET_OPTION_SUPPORTED)
-       png_set_option(png_ptr, PNG_SKIP_sRGB_CHECK_PROFILE,
-           PNG_OPTION_ON);
-    #endif
-
-It's not a good idea to do this if you are using the new "simplified API",
-which needs to be able to recognize sRGB profiles conveyed via the iCCP
-chunk.
-
-The PNG spec requirement that only grayscale profiles may appear in images
-with color type 0 or 4 and that even if the image only contains gray pixels,
-only RGB profiles may appear in images with color type 2, 3, or 6, is now
-enforced.  The sRGB chunk is allowed to appear in images with any color type
-and is interpreted by libpng to convey a one-tracer-curve gray profile or a
-three-tracer-curve RGB profile as appropriate.
-
-Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
-an empty language field or an empty translated keyword.  Both of these
-are allowed by the PNG specification, so these warnings are no longer issued.
-
-The library now issues an error if the application attempts to set a
-transform after it calls png_read_update_info() or if it attempts to call
-both png_read_update_info() and png_start_read_image() or to call either
-of them more than once.
-
-The default condition for benign_errors is now to treat benign errors as
-warnings while reading and as errors while writing.
-
-The library now issues a warning if both background processing and RGB to
-gray are used when gamma correction happens. As with previous versions of
-the library the results are numerically very incorrect in this case.
-
-There are some minor arithmetic changes in some transforms such as
-png_set_background(), that might be detected by certain regression tests.
-
-Unknown chunk handling has been improved internally, without any API change.
-This adds more correct option control of the unknown handling, corrects
-a pre-existing bug where the per-chunk 'keep' setting is ignored, and makes
-it possible to skip IDAT chunks in the sequential reader.
-
-The machine-generated configure files are no longer included in branches
-libpng16 and later of the GIT repository.  They continue to be included
-in the tarball releases, however.
-
-Libpng-1.6.0 through 1.6.2 used the CMF bytes at the beginning of the IDAT
-stream to set the size of the sliding window for reading instead of using the
-default 32-kbyte sliding window size.  It was discovered that there are
-hundreds of PNG files in the wild that have incorrect CMF bytes that caused
-zlib to issue the "invalid distance too far back" error and reject the file.
-Libpng-1.6.3 and later calculate their own safe CMF from the image dimensions,
-provide a way to revert to the libpng-1.5.x behavior (ignoring the CMF bytes
-and using a 32-kbyte sliding window), by using
-
-    png_set_option(png_ptr, PNG_MAXIMUM_INFLATE_WINDOW,
-        PNG_OPTION_ON);
-
-and provide a tool (contrib/tools/pngfix) for rewriting a PNG file while
-optimizing the CMF bytes in its IDAT chunk correctly.
-
-Libpng-1.6.0 and libpng-1.6.1 wrote uncompressed iTXt chunks with the wrong
-length, which resulted in PNG files that cannot be read beyond the bad iTXt
-chunk.  This error was fixed in libpng-1.6.3, and a tool (called
-contrib/tools/png-fix-itxt) has been added to the libpng distribution.
-
-XIII.  Detecting libpng
-
-The png_get_io_ptr() function has been present since libpng-0.88, has never
-changed, and is unaffected by conditional compilation macros.  It is the
-best choice for use in configure scripts for detecting the presence of any
-libpng version since 0.88.  In an autoconf "configure.in" you could use
-
-    AC_CHECK_LIB(png, png_get_io_ptr, ...
-
-XV. Source code repository
-
-Since about February 2009, version 1.2.34, libpng has been under "git" source
-control.  The git repository was built from old libpng-x.y.z.tar.gz files
-going back to version 0.70.  You can access the git repository (read only)
-at
-
-    git://git.code.sf.net/p/libpng/code
-
-or you can browse it with a web browser by selecting the "code" button at
-
-    https://sourceforge.net/projects/libpng
-
-Patches can be sent to glennrp at users.sourceforge.net or to
-png-mng-implement at lists.sourceforge.net or you can upload them to
-the libpng bug tracker at
-
-    http://libpng.sourceforge.net
-
-We also accept patches built from the tar or zip distributions, and
-simple verbal discriptions of bug fixes, reported either to the
-SourceForge bug tracker, to the png-mng-implement at lists.sf.net
-mailing list, or directly to glennrp.
-
-XV. Coding style
-
-Our coding style is similar to the "Allman" style
-(See http://en.wikipedia.org/wiki/Indent_style#Allman_style), with curly
-braces on separate lines:
-
-    if (condition)
-    {
-       action;
-    }
-
-    else if (another condition)
-    {
-       another action;
-    }
-
-The braces can be omitted from simple one-line actions:
-
-    if (condition)
-       return (0);
-
-We use 3-space indentation, except for continued statements which
-are usually indented the same as the first line of the statement
-plus four more spaces.
-
-For macro definitions we use 2-space indentation, always leaving the "#"
-in the first column.
-
-    #ifndef PNG_NO_FEATURE
-    #  ifndef PNG_FEATURE_SUPPORTED
-    #    define PNG_FEATURE_SUPPORTED
-    #  endif
-    #endif
-
-Comments appear with the leading "/*" at the same indentation as
-the statement that follows the comment:
-
-    /* Single-line comment */
-    statement;
-
-    /* This is a multiple-line
-     * comment.
-     */
-    statement;
-
-Very short comments can be placed after the end of the statement
-to which they pertain:
-
-    statement;    /* comment */
-
-We don't use C++ style ("//") comments. We have, however,
-used them in the past in some now-abandoned MMX assembler
-code.
-
-Functions and their curly braces are not indented, and
-exported functions are marked with PNGAPI:
-
- /* This is a public function that is visible to
-  * application programmers. It does thus-and-so.
-  */
- void PNGAPI
- png_exported_function(png_ptr, png_info, foo)
- {
-    body;
- }
-
-The return type and decorations are placed on a separate line
-ahead of the function name, as illustrated above.
-
-The prototypes for all exported functions appear in png.h,
-above the comment that says
-
-    /* Maintainer: Put new public prototypes here ... */
-
-We mark all non-exported functions with "/* PRIVATE */"":
-
- void /* PRIVATE */
- png_non_exported_function(png_ptr, png_info, foo)
- {
-    body;
- }
-
-The prototypes for non-exported functions (except for those in
-pngtest) appear in pngpriv.h above the comment that says
-
-  /* Maintainer: Put new private prototypes here ^ */
-
-To avoid polluting the global namespace, the names of all exported
-functions and variables begin with "png_", and all publicly visible C
-preprocessor macros begin with "PNG".  We request that applications that
-use libpng *not* begin any of their own symbols with either of these strings.
-
-We put a space after the "sizeof" operator and we omit the
-optional parentheses around its argument when the argument
-is an expression, not a type name, and we always enclose the
-sizeof operator, with its argument, in parentheses:
-
-  (sizeof (png_uint_32))
-  (sizeof array)
-
-Prior to libpng-1.6.0 we used a "png_sizeof()" macro, formatted as
-though it were a function.
-
-Control keywords if, for, while, and switch are always followed by a space
-to distinguish them from function calls, which have no trailing space. 
-
-We put a space after each comma and after each semicolon
-in "for" statements, and we put spaces before and after each
-C binary operator and after "for" or "while", and before
-"?".  We don't put a space between a typecast and the expression
-being cast, nor do we put one between a function name and the
-left parenthesis that follows it:
-
-    for (i = 2; i > 0; --i)
-       y[i] = a(x) + (int)b;
-
-We prefer #ifdef and #ifndef to #if defined() and #if !defined()
-when there is only one macro being tested.  We always use parentheses
-with "defined".
-
-We prefer to express integers that are used as bit masks in hex format,
-with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
-
-We prefer to use underscores in variable names rather than camelCase, except
-for a few type names that we inherit from zlib.h.
-
-We prefer "if (something != 0)" and "if (something == 0)"
-over "if (something)" and if "(!something)", respectively.
-
-We do not use the TAB character for indentation in the C sources.
-
-Lines do not exceed 80 characters.
-
-Other rules can be inferred by inspecting the libpng source.
-
-XVI. Y2K Compliance in libpng
-
-December 22, 2014
-
-Since the PNG Development group is an ad-hoc body, we can't make
-an official declaration.
-
-This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.6.16 are Y2K compliant.  It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has two year fields.  One is a 2-byte unsigned integer
-that will hold years up to 65535.  The other, which is deprecated,
-holds the date in text format, and will hold years up to 9999.
-
-The integer is
-    "png_uint_16 year" in png_time_struct.
-
-The string is
-    "char time_buffer[29]" in png_struct.  This is no longer used
-in libpng-1.6.x and will be removed from libpng-1.7.0.
-
-There are seven time-related functions:
-
-    png_convert_to_rfc_1123_buffer() in png.c
-      (formerly png_convert_to_rfc_1152() in error, and
-      also formerly png_convert_to_rfc_1123())
-    png_convert_from_struct_tm() in pngwrite.c, called
-      in pngwrite.c
-    png_convert_from_time_t() in pngwrite.c
-    png_get_tIME() in pngget.c
-    png_handle_tIME() in pngrutil.c, called in pngread.c
-    png_set_tIME() in pngset.c
-    png_write_tIME() in pngwutil.c, called in pngwrite.c
-
-All appear to handle dates properly in a Y2K environment.  The
-png_convert_from_time_t() function calls gmtime() to convert from system
-clock time, which returns (year - 1900), which we properly convert to
-the full 4-digit year.  There is a possibility that applications using
-libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
-function, or that they are incorrectly passing only a 2-digit year
-instead of "year - 1900" into the png_convert_from_struct_tm() function,
-but this is not under our control.  The libpng documentation has always
-stated that it works with 4-digit years, and the APIs have been
-documented as such.
-
-The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
-integer to hold the year, and can hold years as large as 65535.
-
-zlib, upon which libpng depends, is also Y2K compliant.  It contains
-no date-related code.
-
-
-   Glenn Randers-Pehrson
-   libpng maintainer
-   PNG Development Group
--- a/DoConfig/fltk/png/libpng.3
+++ /dev/null
@@ -1,6220 +1,0 @@
-.TH LIBPNG 3 "December 22, 2014"
-.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.16
-.SH SYNOPSIS
-\fB
-#include <png.h>\fP
-
-\fBpng_uint_32 png_access_version_number \fI(void\fP\fB);\fP
-
-\fBvoid png_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_build_grayscale_palette (int \fP\fIbit_depth\fP\fB, png_colorp \fIpalette\fP\fB);\fP
-
-\fBpng_voidp png_calloc (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
-
-\fBvoid png_chunk_benign_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_chunk_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_chunk_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
-
-\fBvoid png_convert_from_struct_tm (png_timep \fP\fIptime\fP\fB, struct tm FAR * \fIttime\fP\fB);\fP
-
-\fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP
-
-\fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP
-
-\fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_structp png_create_read_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
-
-\fBpng_structp png_create_read_struct_2 (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBpng_structp png_create_write_struct (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarn_fn\fP\fB);\fP
-
-\fBpng_structp png_create_write_struct_2 (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask)\fP\fB);\fP
-
-\fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_destroy_write_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
-
-\fBvoid png_err (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_error (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fIerror\fP\fB);\fP
-
-\fBvoid png_free (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
-
-\fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_free_default (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
-
-\fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP
-
-\fBpng_byte png_get_bit_depth (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_bKGD (png_const_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fI*background\fP\fB);\fP
-
-\fBpng_byte png_get_channels (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*white_x\fP\fB, double \fP\fI*white_y\fP\fB, double \fP\fI*red_x\fP\fB, double \fP\fI*red_y\fP\fB, double \fP\fI*green_x\fP\fB, double \fP\fI*green_y\fP\fB, double \fP\fI*blue_x\fP\fB, double \fI*blue_y\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM_fixed (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*white_x\fP\fB, png_uint_32 \fP\fI*white_y\fP\fB, png_uint_32 \fP\fI*red_x\fP\fB, png_uint_32 \fP\fI*red_y\fP\fB, png_uint_32 \fP\fI*green_x\fP\fB, png_uint_32 \fP\fI*green_y\fP\fB, png_uint_32 \fP\fI*blue_x\fP\fB, png_uint_32 \fI*blue_y\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM_XYZ (png_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, double \fP\fI*red_X\fP\fB, double \fP\fI*red_Y\fP\fB, double \fP\fI*red_Z\fP\fB, double \fP\fI*green_X\fP\fB, double \fP\fI*green_Y\fP\fB, double \fP\fI*green_Z\fP\fB, double \fP\fI*blue_X\fP\fB, double \fP\fI*blue_Y\fP\fB, double \fI*blue_Z\fP\fB);\fP
-
-\fBpng_uint_32 png_get_cHRM_XYZ_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_fixed_point \fP\fI*int_red_X\fP\fB, png_fixed_point \fP\fI*int_red_Y\fP\fB, png_fixed_point \fP\fI*int_red_Z\fP\fB, png_fixed_point \fP\fI*int_green_X\fP\fB, png_fixed_point \fP\fI*int_green_Y\fP\fB, png_fixed_point \fP\fI*int_green_Z\fP\fB, png_fixed_point \fP\fI*int_blue_X\fP\fB, png_fixed_point \fP\fI*int_blue_Y\fP\fB, png_fixed_point \fI*int_blue_Z\fP\fB);\fP
-
-\fBpng_uint_32 png_get_chunk_cache_max (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_alloc_size_t png_get_chunk_malloc_max (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_color_type (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_compression_buffer_size (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_compression_type (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_copyright (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_current_row_number \fI(png_const_structp\fP\fB);\fP
-
-\fBpng_byte png_get_current_pass_number \fI(png_const_structp\fP\fB);\fP
-
-\fBpng_voidp png_get_error_ptr (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_filter_type (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_gAMA (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, double \fI*file_gamma\fP\fB);\fP
-
-\fBpng_uint_32 png_get_gAMA_fixed (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fI*int_file_gamma\fP\fB);\fP
-
-\fBpng_byte png_get_header_ver (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_header_version (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_hIST (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fI*hist\fP\fB);\fP
-
-\fBpng_uint_32 png_get_iCCP (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_charpp \fP\fIname\fP\fB, int \fP\fI*compression_type\fP\fB, png_bytepp \fP\fIprofile\fP\fB, png_uint_32 \fI*proflen\fP\fB);\fP
-
-\fBpng_uint_32 png_get_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*width\fP\fB, png_uint_32 \fP\fI*height\fP\fB, int \fP\fI*bit_depth\fP\fB, int \fP\fI*color_type\fP\fB, int \fP\fI*interlace_type\fP\fB, int \fP\fI*compression_type\fP\fB, int \fI*filter_type\fP\fB);\fP
-
-\fBpng_uint_32 png_get_image_height (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_image_width (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_int_32 (png_bytep \fIbuf\fP\fB);\fP
-
-\fBpng_byte png_get_interlace_type (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_io_chunk_type (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_io_ptr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_io_state (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_byte png_get_libpng_ver (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_mem_ptr (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_oFFs (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*offset_x\fP\fB, png_uint_32 \fP\fI*offset_y\fP\fB, int \fI*unit_type\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pCAL (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fI*purpose\fP\fB, png_int_32 \fP\fI*X0\fP\fB, png_int_32 \fP\fI*X1\fP\fB, int \fP\fI*type\fP\fB, int \fP\fI*nparams\fP\fB, png_charp \fP\fI*units\fP\fB, png_charpp \fI*params\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pHYs (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP
-
-\fBfloat png_get_pixel_aspect_ratio (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pHYs_dpi (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fI*res_x\fP\fB, png_uint_32 \fP\fI*res_y\fP\fB, int \fI*unit_type\fP\fB);\fP
-
-\fBpng_fixed_point png_get_pixel_aspect_ratio_fixed (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pixels_per_inch (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_pixels_per_meter (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_progressive_ptr (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_PLTE (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fI*palette\fP\fB, int \fI*num_palette\fP\fB);\fP
-
-\fBpng_byte png_get_rgb_to_gray_status (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_rowbytes (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_bytepp png_get_rows (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sBIT (png_const_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fI*sig_bit\fP\fB);\fP
-
-\fBvoid png_get_sCAL (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, int* \fP\fIunit\fP\fB, double* \fP\fIwidth\fP\fB, double* \fIheight\fP\fB);\fP
-
-\fBvoid png_get_sCAL_fixed (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, int* \fP\fIunit\fP\fB, png_fixed_pointp \fP\fIwidth\fP\fB, png_fixed_pointp \fIheight\fP\fB);\fP
-
-\fBvoid png_get_sCAL_s (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, int* \fP\fIunit\fP\fB, png_charpp \fP\fIwidth\fP\fB, png_charpp \fIheight\fP\fB);\fP
-
-\fBpng_bytep png_get_signature (png_const_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sPLT (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fI*splt_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_sRGB (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, int \fI*file_srgb_intent\fP\fB);\fP
-
-\fBpng_uint_32 png_get_text (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fI*text_ptr\fP\fB, int \fI*num_text\fP\fB);\fP
-
-\fBpng_uint_32 png_get_tIME (png_const_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fI*mod_time\fP\fB);\fP
-
-\fBpng_uint_32 png_get_tRNS (png_const_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fI*trans_alpha\fP\fB, int \fP\fI*num_trans\fP\fB, png_color_16p \fI*trans_color\fP\fB);\fP
-
-\fB/* This function is really an inline macro. \fI*/
-
-\fBpng_uint_16 png_get_uint_16 (png_bytep \fIbuf\fP\fB);\fP
-
-\fBpng_uint_32 png_get_uint_31 (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIbuf\fP\fB);\fP
-
-\fB/* This function is really an inline macro. \fI*/
-
-\fBpng_uint_32 png_get_uint_32 (png_bytep \fIbuf\fP\fB);\fP
-
-\fBpng_uint_32 png_get_unknown_chunks (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkpp \fIunknowns\fP\fB);\fP
-
-\fBpng_voidp png_get_user_chunk_ptr (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_user_height_max (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_voidp png_get_user_transform_ptr (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_user_width_max (png_const_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_valid (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIflag\fP\fB);\fP
-
-\fBfloat png_get_x_offset_inches (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_fixed_point png_get_x_offset_inches_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_x_offset_microns (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_x_offset_pixels (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_x_pixels_per_inch (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_x_pixels_per_meter (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBfloat png_get_y_offset_inches (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_fixed_point png_get_y_offset_inches_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_y_offset_microns (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_int_32 png_get_y_offset_pixels (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_y_pixels_per_inch (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_get_y_pixels_per_meter (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBint png_handle_as_unknown (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIchunk_name\fP\fB);\fP
-
-\fBint png_image_begin_read_from_file (png_imagep \fP\fIimage\fP\fB, const char \fI*file_name\fP\fB);\fP
-
-\fBint png_image_begin_read_from_stdio (png_imagep \fP\fIimage\fP\fB, FILE* \fIfile\fP\fB);\fP
-
-\fBint, png_image_begin_read_from_memory (png_imagep \fP\fIimage\fP\fB, png_const_voidp \fP\fImemory\fP\fB, png_size_t \fIsize\fP\fB);\fP
-
-\fBint png_image_finish_read (png_imagep \fP\fIimage\fP\fB, png_colorp \fP\fIbackground\fP\fB, void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP
-
-\fBvoid png_image_free (png_imagep \fIimage\fP\fB);\fP
-
-\fBint png_image_write_to_file (png_imagep \fP\fIimage\fP\fB, const char \fP\fI*file\fP\fB, int \fP\fIconvert_to_8bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap\fP\fB);\fP
-
-\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap)\fP\fB);\fP
-
-\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP
-
-\fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
-
-\fBvoid png_longjmp (png_structp \fP\fIpng_ptr\fP\fB, int \fIval\fP\fB);\fP
-
-\fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
-
-\fBpng_voidp png_malloc_default (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
-
-\fBpng_voidp png_malloc_warn (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
-
-\fBpng_uint_32 png_permit_mng_features (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fImng_features_permitted\fP\fB);\fP
-
-\fBvoid png_process_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fIbuffer\fP\fB, png_size_t \fIbuffer_size\fP\fB);\fP
-
-\fBpng_size_t png_process_data_pause \fP\fI(png_structp\fP\fB, int \fIsave\fP\fB);\fP
-
-\fBpng_uint_32 png_process_data_skip \fI(png_structp\fP\fB);\fP
-
-\fBvoid png_progressive_combine_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIold_row\fP\fB, png_bytep \fInew_row\fP\fB);\fP
-
-\fBvoid png_read_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_read_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
-
-\fBvoid png_read_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_read_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
-
-\fBvoid png_read_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIrow\fP\fB, png_bytep \fIdisplay_row\fP\fB);\fP
-
-\fBvoid png_read_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_bytepp \fP\fIdisplay_row\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
-
-\fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBint png_reset_zstream (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_save_int_32 (png_bytep \fP\fIbuf\fP\fB, png_int_32 \fIi\fP\fB);\fP
-
-\fBvoid png_save_uint_16 (png_bytep \fP\fIbuf\fP\fB, unsigned int \fIi\fP\fB);\fP
-
-\fBvoid png_save_uint_32 (png_bytep \fP\fIbuf\fP\fB, png_uint_32 \fIi\fP\fB);\fP
-
-\fBvoid png_set_add_alpha (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
-
-\fBvoid png_set_alpha_mode (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImode\fP\fB, double \fIoutput_gamma\fP\fB);\fP
-
-\fBvoid png_set_alpha_mode_fixed (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImode\fP\fB, png_fixed_point \fIoutput_gamma\fP\fB);\fP
-
-\fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP
-
-\fBvoid png_set_background_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, png_uint_32 \fIbackground_gamma\fP\fB);\fP
-
-\fBvoid png_set_benign_errors (png_structp \fP\fIpng_ptr\fP\fB, int \fIallowed\fP\fB);\fP
-
-\fBvoid png_set_bgr (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_bKGD (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_16p \fIbackground\fP\fB);\fP
-
-\fBvoid png_set_check_for_invalid_index(png_structrp \fP\fIpng_ptr\fP\fB, int \fIallowed\fP\fB);\fP
-
-\fBvoid png_set_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIwhite_x\fP\fB, double \fP\fIwhite_y\fP\fB, double \fP\fIred_x\fP\fB, double \fP\fIred_y\fP\fB, double \fP\fIgreen_x\fP\fB, double \fP\fIgreen_y\fP\fB, double \fP\fIblue_x\fP\fB, double \fIblue_y\fP\fB);\fP
-
-\fBvoid png_set_cHRM_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwhite_x\fP\fB, png_uint_32 \fP\fIwhite_y\fP\fB, png_uint_32 \fP\fIred_x\fP\fB, png_uint_32 \fP\fIred_y\fP\fB, png_uint_32 \fP\fIgreen_x\fP\fB, png_uint_32 \fP\fIgreen_y\fP\fB, png_uint_32 \fP\fIblue_x\fP\fB, png_uint_32 \fIblue_y\fP\fB);\fP
-
-\fBvoid png_set_cHRM_XYZ (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fP\fIred_X\fP\fB, double \fP\fIred_Y\fP\fB, double \fP\fIred_Z\fP\fB, double \fP\fIgreen_X\fP\fB, double \fP\fIgreen_Y\fP\fB, double \fP\fIgreen_Z\fP\fB, double \fP\fIblue_X\fP\fB, double \fP\fIblue_Y\fP\fB, double \fIblue_Z\fP\fB);\fP
-
-\fBvoid png_set_cHRM_XYZ_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_fixed_point \fP\fIint_red_X\fP\fB, png_fixed_point \fP\fIint_red_Y\fP\fB, png_fixed_point \fP\fIint_red_Z\fP\fB, png_fixed_point \fP\fIint_green_X\fP\fB, png_fixed_point \fP\fIint_green_Y\fP\fB, png_fixed_point \fP\fIint_green_Z\fP\fB, png_fixed_point \fP\fIint_blue_X\fP\fB, png_fixed_point \fP\fIint_blue_Y\fP\fB, png_fixed_point \fIint_blue_Z\fP\fB);\fP
-
-\fBvoid png_set_chunk_cache_max (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIuser_chunk_cache_max\fP\fB);\fP
-
-\fBvoid png_set_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP
-
-\fBvoid png_set_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP
-
-\fBvoid png_set_compression_method (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod\fP\fB);\fP
-
-\fBvoid png_set_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP
-
-\fBvoid png_set_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
-
-\fBvoid png_set_crc_action (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIcrit_action\fP\fB, int \fIancil_action\fP\fB);\fP
-
-\fBvoid png_set_error_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fIwarning_fn\fP\fB);\fP
-
-\fBvoid png_set_expand (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_expand_16 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_expand_gray_1_2_4_to_8 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_filler (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIfiller\fP\fB, int \fIflags\fP\fB);\fP
-
-\fBvoid png_set_filter (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fImethod\fP\fB, int \fIfilters\fP\fB);\fP
-
-\fBvoid png_set_filter_heuristics (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_doublep \fP\fIfilter_weights\fP\fB, png_doublep \fIfilter_costs\fP\fB);\fP
-
-\fBvoid png_set_filter_heuristics_fixed (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIheuristic_method\fP\fB, int \fP\fInum_weights\fP\fB, png_fixed_point_p \fP\fIfilter_weights\fP\fB, png_fixed_point_p \fIfilter_costs\fP\fB);\fP
-
-\fBvoid png_set_flush (png_structp \fP\fIpng_ptr\fP\fB, int \fInrows\fP\fB);\fP
-
-\fBvoid png_set_gamma (png_structp \fP\fIpng_ptr\fP\fB, double \fP\fIscreen_gamma\fP\fB, double \fIdefault_file_gamma\fP\fB);\fP
-
-\fBvoid png_set_gamma_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIscreen_gamma\fP\fB, png_uint_32 \fIdefault_file_gamma\fP\fB);\fP
-
-\fBvoid png_set_gAMA (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, double \fIfile_gamma\fP\fB);\fP
-
-\fBvoid png_set_gAMA_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fIfile_gamma\fP\fB);\fP
-
-\fBvoid png_set_gray_1_2_4_to_8 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_gray_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_hIST (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_16p \fIhist\fP\fB);\fP
-
-\fBvoid png_set_iCCP (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_const_charp \fP\fIname\fP\fB, int \fP\fIcompression_type\fP\fB, png_const_bytep \fP\fIprofile\fP\fB, png_uint_32 \fIproflen\fP\fB);\fP
-
-\fBint png_set_interlace_handling (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_invalid (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fImask\fP\fB);\fP
-
-\fBvoid png_set_invert_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_invert_mono (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_IHDR (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIwidth\fP\fB, png_uint_32 \fP\fIheight\fP\fB, int \fP\fIbit_depth\fP\fB, int \fP\fIcolor_type\fP\fB, int \fP\fIinterlace_type\fP\fB, int \fP\fIcompression_type\fP\fB, int \fIfilter_type\fP\fB);\fP
-
-\fBvoid png_set_keep_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIkeep\fP\fB, png_bytep \fP\fIchunk_list\fP\fB, int \fInum_chunks\fP\fB);\fP
-
-\fBjmp_buf* png_set_longjmp_fn (png_structp \fP\fIpng_ptr\fP\fB, png_longjmp_ptr \fP\fIlongjmp_fn\fP\fB, size_t \fIjmp_buf_size\fP\fB);\fP
-
-\fBvoid png_set_chunk_malloc_max (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIuser_chunk_cache_max\fP\fB);\fP
-
-\fBvoid png_set_compression_buffer_size (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIsize\fP\fB);\fP
-
-\fBvoid png_set_mem_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
-
-\fBvoid png_set_oFFs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIoffset_x\fP\fB, png_uint_32 \fP\fIoffset_y\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_set_packing (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_packswap (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_palette_to_rgb (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_pCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_charp \fP\fIpurpose\fP\fB, png_int_32 \fP\fIX0\fP\fB, png_int_32 \fP\fIX1\fP\fB, int \fP\fItype\fP\fB, int \fP\fInparams\fP\fB, png_charp \fP\fIunits\fP\fB, png_charpp \fIparams\fP\fB);\fP
-
-\fBvoid png_set_pHYs (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_uint_32 \fP\fIres_x\fP\fB, png_uint_32 \fP\fIres_y\fP\fB, int \fIunit_type\fP\fB);\fP
-
-\fBvoid png_set_progressive_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIprogressive_ptr\fP\fB, png_progressive_info_ptr \fP\fIinfo_fn\fP\fB, png_progressive_row_ptr \fP\fIrow_fn\fP\fB, png_progressive_end_ptr \fIend_fn\fP\fB);\fP
-
-\fBvoid png_set_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fInum_palette\fP\fB);\fP
-
-\fBvoid png_set_quantize (png_structp \fP\fIpng_ptr\fP\fB, png_colorp \fP\fIpalette\fP\fB, int \fP\fInum_palette\fP\fB, int \fP\fImaximum_colors\fP\fB, png_uint_16p \fP\fIhistogram\fP\fB, int \fIfull_quantize\fP\fB);\fP
-
-\fBvoid png_set_read_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fIread_data_fn\fP\fB);\fP
-
-\fBvoid png_set_read_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_read_status_ptr \fIread_row_fn\fP\fB);\fP
-
-\fBvoid png_set_read_user_chunk_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_chunk_ptr\fP\fB, png_user_chunk_ptr \fIread_user_chunk_fn\fP\fB);\fP
-
-\fBvoid png_set_read_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIread_user_transform_fn\fP\fB);\fP
-
-\fBvoid png_set_rgb_to_gray (png_structp \fP\fIpng_ptr\fP\fB, int \fP\fIerror_action\fP\fB, double \fP\fIred\fP\fB, double \fIgreen\fP\fB);\fP
-
-\fBvoid png_set_rgb_to_gray_fixed (png_structp \fP\fIpng_ptr\fP\fB, int error_action png_uint_32 \fP\fIred\fP\fB, png_uint_32 \fIgreen\fP\fB);\fP
-
-\fBvoid png_set_rows (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytepp \fIrow_pointers\fP\fB);\fP
-
-\fBvoid png_set_sBIT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_color_8p \fIsig_bit\fP\fB);\fP
-
-\fBvoid png_set_sCAL (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIunit\fP\fB, double \fP\fIwidth\fP\fB, double \fIheight\fP\fB);\fP
-
-\fBvoid png_set_sCAL_fixed (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIunit\fP\fB, png_fixed_point \fP\fIwidth\fP\fB, png_fixed_point \fIheight\fP\fB);\fP
-
-\fBvoid png_set_sCAL_s (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIunit\fP\fB, png_charp \fP\fIwidth\fP\fB, png_charp \fIheight\fP\fB);\fP
-
-\fBvoid png_set_scale_16 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_shift (png_structp \fP\fIpng_ptr\fP\fB, png_color_8p \fItrue_bits\fP\fB);\fP
-
-\fBvoid png_set_sig_bytes (png_structp \fP\fIpng_ptr\fP\fB, int \fInum_bytes\fP\fB);\fP
-
-\fBvoid png_set_sPLT (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_spalette_p \fP\fIsplt_ptr\fP\fB, int \fInum_spalettes\fP\fB);\fP
-
-\fBvoid png_set_sRGB (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIsrgb_intent\fP\fB);\fP
-
-\fBvoid png_set_sRGB_gAMA_and_cHRM (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fIsrgb_intent\fP\fB);\fP
-
-\fBvoid png_set_strip_16 (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_strip_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_strip_error_numbers (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIstrip_mode\fP\fB);\fP
-
-\fBvoid png_set_swap (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_swap_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_set_text (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_textp \fP\fItext_ptr\fP\fB, int \fInum_text\fP\fB);\fP
-
-\fBvoid png_set_text_compression_level (png_structp \fP\fIpng_ptr\fP\fB, int \fIlevel\fP\fB);\fP
-
-\fBvoid png_set_text_compression_mem_level (png_structp \fP\fIpng_ptr\fP\fB, int \fImem_level\fP\fB);\fP
-
-\fBvoid png_set_text_compression_strategy (png_structp \fP\fIpng_ptr\fP\fB, int \fIstrategy\fP\fB);\fP
-
-\fBvoid png_set_text_compression_window_bits (png_structp \fP\fIpng_ptr\fP\fB, int \fIwindow_bits\fP\fB);\fP
-
-\fBvoid \fP\fIpng_set_text_compression_method\fP\fB, (png_structp \fP\fIpng_ptr\fP\fB, int \fImethod)\fP\fB);\fP
-
-\fBvoid png_set_tIME (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_timep \fImod_time\fP\fB);\fP
-
-\fBvoid png_set_tRNS (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_bytep \fP\fItrans_alpha\fP\fB, int \fP\fInum_trans\fP\fB, png_color_16p \fItrans_color\fP\fB);\fP
-
-\fBvoid png_set_tRNS_to_alpha (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBpng_uint_32 png_set_unknown_chunks (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, png_unknown_chunkp \fP\fIunknowns\fP\fB, int \fP\fInum\fP\fB, int \fIlocation\fP\fB);\fP
-
-\fBvoid png_set_unknown_chunk_location (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIchunk\fP\fB, int \fIlocation\fP\fB);\fP
-
-\fBvoid png_set_user_limits (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fP\fIuser_width_max\fP\fB, png_uint_32 \fIuser_height_max\fP\fB);\fP
-
-\fBvoid png_set_user_transform_info (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIuser_transform_ptr\fP\fB, int \fP\fIuser_transform_depth\fP\fB, int \fIuser_transform_channels\fP\fB);\fP
-
-\fBvoid png_set_write_fn (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fP\fIio_ptr\fP\fB, png_rw_ptr \fP\fIwrite_data_fn\fP\fB, png_flush_ptr \fIoutput_flush_fn\fP\fB);\fP
-
-\fBvoid png_set_write_status_fn (png_structp \fP\fIpng_ptr\fP\fB, png_write_status_ptr \fIwrite_row_fn\fP\fB);\fP
-
-\fBvoid png_set_write_user_transform_fn (png_structp \fP\fIpng_ptr\fP\fB, png_user_transform_ptr \fIwrite_user_transform_fn\fP\fB);\fP
-
-\fBint png_sig_cmp (png_bytep \fP\fIsig\fP\fB, png_size_t \fP\fIstart\fP\fB, png_size_t \fInum_to_check\fP\fB);\fP
-
-\fBvoid png_start_read_image (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_warning (png_structp \fP\fIpng_ptr\fP\fB, png_const_charp \fImessage\fP\fB);\fP
-
-\fBvoid png_write_chunk (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_chunk_data (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIdata\fP\fB, png_size_t \fIlength\fP\fB);\fP
-
-\fBvoid png_write_chunk_end (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_chunk_start (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fP\fIchunk_name\fP\fB, png_uint_32 \fIlength\fP\fB);\fP
-
-\fBvoid png_write_end (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_flush (png_structp \fIpng_ptr\fP\fB);\fP
-
-\fBvoid png_write_image (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fIimage\fP\fB);\fP
-
-\fBvoid png_write_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_info_before_PLTE (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
-
-\fBvoid png_write_png (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fItransforms\fP\fB, png_voidp \fIparams\fP\fB);\fP
-
-\fBvoid png_write_row (png_structp \fP\fIpng_ptr\fP\fB, png_bytep \fIrow\fP\fB);\fP
-
-\fBvoid png_write_rows (png_structp \fP\fIpng_ptr\fP\fB, png_bytepp \fP\fIrow\fP\fB, png_uint_32 \fInum_rows\fP\fB);\fP
-
-\fBvoid png_write_sig (png_structp \fIpng_ptr\fP\fB);\fP
-
-.SH DESCRIPTION
-The
-.I libpng
-library supports encoding, decoding, and various manipulations of
-the Portable Network Graphics (PNG) format image files.  It uses the
-.IR zlib(3)
-compression library.
-Following is a copy of the libpng-manual.txt file that accompanies libpng.
-.SH LIBPNG.TXT
-libpng-manual.txt - A description on how to use and modify libpng
-
- libpng version 1.6.16 - December 22, 2014
- Updated and distributed by Glenn Randers-Pehrson
- <glennrp at users.sourceforge.net>
- Copyright (c) 1998-2014 Glenn Randers-Pehrson
-
- This document is released under the libpng license.
- For conditions of distribution and use, see the disclaimer
- and license in png.h
-
- Based on:
-
- libpng versions 0.97, January 1998, through 1.6.16 - December 22, 2014
- Updated and distributed by Glenn Randers-Pehrson
- Copyright (c) 1998-2014 Glenn Randers-Pehrson
-
- libpng 1.0 beta 6 - version 0.96 - May 28, 1997
- Updated and distributed by Andreas Dilger
- Copyright (c) 1996, 1997 Andreas Dilger
-
- libpng 1.0 beta 2 - version 0.88 - January 26, 1996
- For conditions of distribution and use, see copyright
- notice in png.h. Copyright (c) 1995, 1996 Guy Eric
- Schalnat, Group 42, Inc.
-
- Updated/rewritten per request in the libpng FAQ
- Copyright (c) 1995, 1996 Frank J. T. Wojcik
- December 18, 1995 & January 20, 1996
-
- TABLE OF CONTENTS
-
-    I. Introduction
-   II. Structures
-  III. Reading
-   IV. Writing
-    V. Simplified API
-   VI. Modifying/Customizing libpng
-  VII. MNG support
- VIII. Changes to Libpng from version 0.88
-   IX. Changes to Libpng from version 1.0.x to 1.2.x
-    X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
-   XI. Changes to Libpng from version 1.4.x to 1.5.x
-  XII. Changes to Libpng from version 1.5.x to 1.6.x
- XIII. Detecting libpng
-  XIV. Source code repository
-   XV. Coding style
-  XVI. Y2K Compliance in libpng
-
-.SH I. Introduction
-
-This file describes how to use and modify the PNG reference library
-(known as libpng) for your own use.  In addition to this
-file, example.c is a good starting point for using the library, as
-it is heavily commented and should include everything most people
-will need.  We assume that libpng is already installed; see the
-INSTALL file for instructions on how to configure and install libpng.
-
-For examples of libpng usage, see the files "example.c", "pngtest.c",
-and the files in the "contrib" directory, all of which are included in
-the libpng distribution.
-
-Libpng was written as a companion to the PNG specification, as a way
-of reducing the amount of time and effort it takes to support the PNG
-file format in application programs.
-
-The PNG specification (second edition), November 2003, is available as
-a W3C Recommendation and as an ISO Standard (ISO/IEC 15948:2004 (E)) at
-<http://www.w3.org/TR/2003/REC-PNG-20031110/
-The W3C and ISO documents have identical technical content.
-
-The PNG-1.2 specification is available at
-<http://www.libpng.org/pub/png/documents/>.  It is technically equivalent
-to the PNG specification (second edition) but has some additional material.
-
-The PNG-1.0 specification is available
-as RFC 2083 <http://www.libpng.org/pub/png/documents/> and as a
-W3C Recommendation <http://www.w3.org/TR/REC.png.html>.
-
-Some additional chunks are described in the special-purpose public chunks
-documents at <http://www.libpng.org/pub/png/documents/>.
-
-Other information
-about PNG, and the latest version of libpng, can be found at the PNG home
-page, <http://www.libpng.org/pub/png/>.
-
-Most users will not have to modify the library significantly; advanced
-users may want to modify it more.  All attempts were made to make it as
-complete as possible, while keeping the code easy to understand.
-Currently, this library only supports C.  Support for other languages
-is being considered.
-
-Libpng has been designed to handle multiple sessions at one time,
-to be easily modifiable, to be portable to the vast majority of
-machines (ANSI, K&R, 16-, 32-, and 64-bit) available, and to be easy
-to use.  The ultimate goal of libpng is to promote the acceptance of
-the PNG file format in whatever way possible.  While there is still
-work to be done (see the TODO file), libpng should cover the
-majority of the needs of its users.
-
-Libpng uses zlib for its compression and decompression of PNG files.
-Further information about zlib, and the latest version of zlib, can
-be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
-The zlib compression utility is a general purpose utility that is
-useful for more than PNG files, and can be used without libpng.
-See the documentation delivered with zlib for more details.
-You can usually find the source files for the zlib utility wherever you
-find the libpng source files.
-
-Libpng is thread safe, provided the threads are using different
-instances of the structures.  Each thread should have its own
-png_struct and png_info instances, and thus its own image.
-Libpng does not protect itself against two threads using the
-same instance of a structure.
-
-.SH II. Structures
-
-There are two main structures that are important to libpng, png_struct
-and png_info.  Both are internal structures that are no longer exposed
-in the libpng interface (as of libpng 1.5.0).
-
-The png_info structure is designed to provide information about the
-PNG file.  At one time, the fields of png_info were intended to be
-directly accessible to the user.  However, this tended to cause problems
-with applications using dynamically loaded libraries, and as a result
-a set of interface functions for png_info (the png_get_*() and png_set_*()
-functions) was developed, and direct access to the png_info fields was
-deprecated..
-
-The png_struct structure is the object used by the library to decode a
-single image.  As of 1.5.0 this structure is also not exposed.
-
-Almost all libpng APIs require a pointer to a png_struct as the first argument.
-Many (in particular the png_set and png_get APIs) also require a pointer
-to png_info as the second argument.  Some application visible macros
-defined in png.h designed for basic data access (reading and writing
-integers in the PNG format) don't take a png_info pointer, but it's almost
-always safe to assume that a (png_struct*) has to be passed to call an API
-function.
-
-You can have more than one png_info structure associated with an image,
-as illustrated in pngtest.c, one for information valid prior to the
-IDAT chunks and another (called "end_info" below) for things after them.
-
-The png.h header file is an invaluable reference for programming with libpng.
-And while I'm on the topic, make sure you include the libpng header file:
-
-#include <png.h>
-
-and also (as of libpng-1.5.0) the zlib header file, if you need it:
-
-#include <zlib.h>
-
-.SS Types
-
-The png.h header file defines a number of integral types used by the
-APIs.  Most of these are fairly obvious; for example types corresponding
-to integers of particular sizes and types for passing color values.
-
-One exception is how non-integral numbers are handled.  For application
-convenience most APIs that take such numbers have C (double) arguments;
-however, internally PNG, and libpng, use 32 bit signed integers and encode
-the value by multiplying by 100,000.  As of libpng 1.5.0 a convenience
-macro PNG_FP_1 is defined in png.h along with a type (png_fixed_point)
-which is simply (png_int_32).
-
-All APIs that take (double) arguments also have a matching API that
-takes the corresponding fixed point integer arguments.  The fixed point
-API has the same name as the floating point one with "_fixed" appended.
-The actual range of values permitted in the APIs is frequently less than
-the full range of (png_fixed_point) (\-21474 to +21474).  When APIs require
-a non-negative argument the type is recorded as png_uint_32 above.  Consult
-the header file and the text below for more information.
-
-Special care must be take with sCAL chunk handling because the chunk itself
-uses non-integral values encoded as strings containing decimal floating point
-numbers.  See the comments in the header file.
-
-.SS Configuration
-
-The main header file function declarations are frequently protected by C
-preprocessing directives of the form:
-
-    #ifdef PNG_feature_SUPPORTED
-    declare-function
-    #endif
-    ...
-    #ifdef PNG_feature_SUPPORTED
-    use-function
-    #endif
-
-The library can be built without support for these APIs, although a
-standard build will have all implemented APIs.  Application programs
-should check the feature macros before using an API for maximum
-portability.  From libpng 1.5.0 the feature macros set during the build
-of libpng are recorded in the header file "pnglibconf.h" and this file
-is always included by png.h.
-
-If you don't need to change the library configuration from the default, skip to
-the next section ("Reading").
-
-Notice that some of the makefiles in the 'scripts' directory and (in 1.5.0) all
-of the build project files in the 'projects' directory simply copy
-scripts/pnglibconf.h.prebuilt to pnglibconf.h.  This means that these build
-systems do not permit easy auto-configuration of the library - they only
-support the default configuration.
-
-The easiest way to make minor changes to the libpng configuration when
-auto-configuration is supported is to add definitions to the command line
-using (typically) CPPFLAGS.  For example:
-
-CPPFLAGS=\-DPNG_NO_FLOATING_ARITHMETIC
-
-will change the internal libpng math implementation for gamma correction and
-other arithmetic calculations to fixed point, avoiding the need for fast
-floating point support.  The result can be seen in the generated pnglibconf.h -
-make sure it contains the changed feature macro setting.
-
-If you need to make more extensive configuration changes - more than one or two
-feature macro settings - you can either add \-DPNG_USER_CONFIG to the build
-command line and put a list of feature macro settings in pngusr.h or you can set
-DFA_XTRA (a makefile variable) to a file containing the same information in the
-form of 'option' settings.
-
-A. Changing pnglibconf.h
-
-A variety of methods exist to build libpng.  Not all of these support
-reconfiguration of pnglibconf.h.  To reconfigure pnglibconf.h it must either be
-rebuilt from scripts/pnglibconf.dfa using awk or it must be edited by hand.
-
-Hand editing is achieved by copying scripts/pnglibconf.h.prebuilt to
-pnglibconf.h and changing the lines defining the supported features, paying
-very close attention to the 'option' information in scripts/pnglibconf.dfa
-that describes those features and their requirements.  This is easy to get
-wrong.
-
-B. Configuration using DFA_XTRA
-
-Rebuilding from pnglibconf.dfa is easy if a functioning 'awk', or a later
-variant such as 'nawk' or 'gawk', is available.  The configure build will
-automatically find an appropriate awk and build pnglibconf.h.
-The scripts/pnglibconf.mak file contains a set of make rules for doing the
-same thing if configure is not used, and many of the makefiles in the scripts
-directory use this approach.
-
-When rebuilding simply write a new file containing changed options and set
-DFA_XTRA to the name of this file.  This causes the build to append the new file
-to the end of scripts/pnglibconf.dfa.  The pngusr.dfa file should contain lines
-of the following forms:
-
-everything = off
-
-This turns all optional features off.  Include it at the start of pngusr.dfa to
-make it easier to build a minimal configuration.  You will need to turn at least
-some features on afterward to enable either reading or writing code, or both.
-
-option feature on
-option feature off
-
-Enable or disable a single feature.  This will automatically enable other
-features required by a feature that is turned on or disable other features that
-require a feature which is turned off.  Conflicting settings will cause an error
-message to be emitted by awk.
-
-setting feature default value
-
-Changes the default value of setting 'feature' to 'value'.  There are a small
-number of settings listed at the top of pnglibconf.h, they are documented in the
-source code.  Most of these values have performance implications for the library
-but most of them have no visible effect on the API.  Some can also be overridden
-from the API.
-
-This method of building a customized pnglibconf.h is illustrated in
-contrib/pngminim/*.  See the "$(PNGCONF):" target in the makefile and
-pngusr.dfa in these directories.
-
-C. Configuration using PNG_USER_CONFIG
-
-If \-DPNG_USER_CONFIG is added to the CPPFLAGS when pnglibconf.h is built,
-the file pngusr.h will automatically be included before the options in
-scripts/pnglibconf.dfa are processed.  Your pngusr.h file should contain only
-macro definitions turning features on or off or setting settings.
-
-Apart from the global setting "everything = off" all the options listed above
-can be set using macros in pngusr.h:
-
-#define PNG_feature_SUPPORTED
-
-is equivalent to:
-
-option feature on
-
-#define PNG_NO_feature
-
-is equivalent to:
-
-option feature off
-
-#define PNG_feature value
-
-is equivalent to:
-
-setting feature default value
-
-Notice that in both cases, pngusr.dfa and pngusr.h, the contents of the
-pngusr file you supply override the contents of scripts/pnglibconf.dfa
-
-If confusing or incomprehensible behavior results it is possible to
-examine the intermediate file pnglibconf.dfn to find the full set of
-dependency information for each setting and option.  Simply locate the
-feature in the file and read the C comments that precede it.
-
-This method is also illustrated in the contrib/pngminim/* makefiles and
-pngusr.h.
-
-.SH III. Reading
-
-We'll now walk you through the possible functions to call when reading
-in a PNG file sequentially, briefly explaining the syntax and purpose
-of each one.  See example.c and png.h for more detail.  While
-progressive reading is covered in the next section, you will still
-need some of the functions discussed in this section to read a PNG
-file.
-
-.SS Setup
-
-You will want to do the I/O initialization(*) before you get into libpng,
-so if it doesn't work, you don't have much to undo.  Of course, you
-will also want to insure that you are, in fact, dealing with a PNG
-file.  Libpng provides a simple check to see if a file is a PNG file.
-To use it, pass in the first 1 to 8 bytes of the file to the function
-png_sig_cmp(), and it will return 0 (false) if the bytes match the
-corresponding bytes of the PNG signature, or nonzero (true) otherwise.
-Of course, the more bytes you pass in, the greater the accuracy of the
-prediction.
-
-If you are intending to keep the file pointer open for use in libpng,
-you must ensure you don't read more than 8 bytes from the beginning
-of the file, and you also have to make a call to png_set_sig_bytes_read()
-with the number of bytes you read from the beginning.  Libpng will
-then only check the bytes (if any) that your program didn't read.
-
-(*): If you are not using the standard I/O functions, you will need
-to replace them with custom functions.  See the discussion under
-Customizing libpng.
-
-
-    FILE *fp = fopen(file_name, "rb");
-    if (!fp)
-    {
-       return (ERROR);
-    }
-
-    fread(header, 1, number, fp);
-    is_png = !png_sig_cmp(header, 0, number);
-
-    if (!is_png)
-    {
-       return (NOT_PNG);
-    }
-
-
-Next, png_struct and png_info need to be allocated and initialized.  In
-order to ensure that the size of these structures is correct even with a
-dynamically linked libpng, there are functions to initialize and
-allocate the structures.  We also pass the library version, optional
-pointers to error handling functions, and a pointer to a data struct for
-use by the error functions, if necessary (the pointer and functions can
-be NULL if the default error handlers are to be used).  See the section
-on Changes to Libpng below regarding the old initialization functions.
-The structure allocation functions quietly return NULL if they fail to
-create the structure, so your application should check for that.
-
-    png_structp png_ptr = png_create_read_struct
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-       return (ERROR);
-
-    png_infop info_ptr = png_create_info_struct(png_ptr);
-
-    if (!info_ptr)
-    {
-       png_destroy_read_struct(&png_ptr,
-           (png_infopp)NULL, (png_infopp)NULL);
-       return (ERROR);
-    }
-
-If you want to use your own memory allocation routines,
-use a libpng that was built with PNG_USER_MEM_SUPPORTED defined, and use
-png_create_read_struct_2() instead of png_create_read_struct():
-
-    png_structp png_ptr = png_create_read_struct_2
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn, (png_voidp)
-        user_mem_ptr, user_malloc_fn, user_free_fn);
-
-The error handling routines passed to png_create_read_struct()
-and the memory alloc/free routines passed to png_create_struct_2()
-are only necessary if you are not using the libpng supplied error
-handling and memory alloc/free functions.
-
-When libpng encounters an error, it expects to longjmp back
-to your routine.  Therefore, you will need to call setjmp and pass
-your png_jmpbuf(png_ptr).  If you read the file from different
-routines, you will need to update the longjmp buffer every time you enter
-a new routine that will call a png_*() function.
-
-See your documentation of setjmp/longjmp for your compiler for more
-information on setjmp/longjmp.  See the discussion on libpng error
-handling in the Customizing Libpng section below for more information
-on the libpng error handling.  If an error occurs, and libpng longjmp's
-back to your setjmp, you will want to call png_destroy_read_struct() to
-free any memory.
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           &end_info);
-       fclose(fp);
-       return (ERROR);
-    }
-
-Pass (png_infopp)NULL instead of &end_info if you didn't create
-an end_info structure.
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_NO_SETJMP, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-You can #define PNG_ABORT() to a function that does something
-more useful than abort(), as long as your function does not
-return.
-
-Now you need to set up the input code.  The default for libpng is to
-use the C function fread().  If you use this, you will need to pass a
-valid FILE * in the function png_init_io().  Be sure that the file is
-opened in binary mode.  If you wish to handle reading data in another
-way, you need not call the png_init_io() function, but you must then
-implement the libpng I/O methods discussed in the Customizing Libpng
-section below.
-
-    png_init_io(png_ptr, fp);
-
-If you had previously opened the file and read any of the signature from
-the beginning in order to see if this was a PNG file, you need to let
-libpng know that there are some bytes missing from the start of the file.
-
-    png_set_sig_bytes(png_ptr, number);
-
-You can change the zlib compression buffer size to be used while
-reading compressed data with
-
-    png_set_compression_buffer_size(png_ptr, buffer_size);
-
-where the default size is 8192 bytes.  Note that the buffer size
-is changed immediately and the buffer is reallocated immediately,
-instead of setting a flag to be acted upon later.
-
-If you want CRC errors to be handled in a different manner than
-the default, use
-
-    png_set_crc_action(png_ptr, crit_action, ancil_action);
-
-The values for png_set_crc_action() say how libpng is to handle CRC errors in
-ancillary and critical chunks, and whether to use the data contained
-therein.  Note that it is impossible to "discard" data in a critical
-chunk.
-
-Choices for (int) crit_action are
-   PNG_CRC_DEFAULT      0  error/quit
-   PNG_CRC_ERROR_QUIT   1  error/quit
-   PNG_CRC_WARN_USE     3  warn/use data
-   PNG_CRC_QUIET_USE    4  quiet/use data
-   PNG_CRC_NO_CHANGE    5  use the current value
-
-Choices for (int) ancil_action are
-   PNG_CRC_DEFAULT      0  error/quit
-   PNG_CRC_ERROR_QUIT   1  error/quit
-   PNG_CRC_WARN_DISCARD 2  warn/discard data
-   PNG_CRC_WARN_USE     3  warn/use data
-   PNG_CRC_QUIET_USE    4  quiet/use data
-   PNG_CRC_NO_CHANGE    5  use the current value
-
-.SS Setting up callback code
-
-You can set up a callback function to handle any unknown chunks in the
-input stream. You must supply the function
-
-    read_chunk_callback(png_structp png_ptr,
-         png_unknown_chunkp chunk);
-    {
-       /* The unknown chunk structure contains your
-          chunk data, along with similar data for any other
-          unknown chunks: */
-
-           png_byte name[5];
-           png_byte *data;
-           png_size_t size;
-
-       /* Note that libpng has already taken care of
-          the CRC handling */
-
-       /* put your code here.  Search for your chunk in the
-          unknown chunk structure, process it, and return one
-          of the following: */
-
-       return (\-n); /* chunk had an error */
-       return (0); /* did not recognize */
-       return (n); /* success */
-    }
-
-(You can give your function another name that you like instead of
-"read_chunk_callback")
-
-To inform libpng about your function, use
-
-    png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr,
-        read_chunk_callback);
-
-This names not only the callback function, but also a user pointer that
-you can retrieve with
-
-    png_get_user_chunk_ptr(png_ptr);
-
-If you call the png_set_read_user_chunk_fn() function, then all unknown
-chunks which the callback does not handle will be saved when read.  You can
-cause them to be discarded by returning '1' ("handled") instead of '0'.  This
-behavior will change in libpng 1.7 and the default handling set by the
-png_set_keep_unknown_chunks() function, described below, will be used when the
-callback returns 0.  If you want the existing behavior you should set the global
-default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
-versions of libpng and with 1.7.  Libpng 1.6 issues a warning if you keep the
-default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
-
-At this point, you can set up a callback function that will be
-called after each row has been read, which you can use to control
-a progress meter or the like.  It's demonstrated in pngtest.c.
-You must supply a function
-
-    void read_row_callback(png_structp png_ptr,
-       png_uint_32 row, int pass);
-    {
-      /* put your code here */
-    }
-
-(You can give it another name that you like instead of "read_row_callback")
-
-To inform libpng about your function, use
-
-    png_set_read_status_fn(png_ptr, read_row_callback);
-
-When this function is called the row has already been completely processed and
-the 'row' and 'pass' refer to the next row to be handled.  For the
-non-interlaced case the row that was just handled is simply one less than the
-passed in row number, and pass will always be 0.  For the interlaced case the
-same applies unless the row value is 0, in which case the row just handled was
-the last one from one of the preceding passes.  Because interlacing may skip a
-pass you cannot be sure that the preceding pass is just 'pass\-1', if you really
-need to know what the last pass is record (row,pass) from the callback and use
-the last recorded value each time.
-
-As with the user transform you can find the output row using the
-PNG_ROW_FROM_PASS_ROW macro.
-
-.SS Unknown-chunk handling
-
-Now you get to set the way the library processes unknown chunks in the
-input PNG stream. Both known and unknown chunks will be read.  Normal
-behavior is that known chunks will be parsed into information in
-various info_ptr members while unknown chunks will be discarded. This
-behavior can be wasteful if your application will never use some known
-chunk types. To change this, you can call:
-
-    png_set_keep_unknown_chunks(png_ptr, keep,
-        chunk_list, num_chunks);
-
-    keep       - 0: default unknown chunk handling
-                 1: ignore; do not keep
-                 2: keep only if safe-to-copy
-                 3: keep even if unsafe-to-copy
-
-               You can use these definitions:
-                 PNG_HANDLE_CHUNK_AS_DEFAULT   0
-                 PNG_HANDLE_CHUNK_NEVER        1
-                 PNG_HANDLE_CHUNK_IF_SAFE      2
-                 PNG_HANDLE_CHUNK_ALWAYS       3
-
-    chunk_list - list of chunks affected (a byte string,
-                 five bytes per chunk, NULL or '\0' if
-                 num_chunks is positive; ignored if
-                 numchunks <= 0).
-
-    num_chunks - number of chunks affected; if 0, all
-                 unknown chunks are affected.  If positive,
-                 only the chunks in the list are affected,
-                 and if negative all unknown chunks and
-                 all known chunks except for the IHDR,
-                 PLTE, tRNS, IDAT, and IEND chunks are
-                 affected.
-
-Unknown chunks declared in this way will be saved as raw data onto a
-list of png_unknown_chunk structures.  If a chunk that is normally
-known to libpng is named in the list, it will be handled as unknown,
-according to the "keep" directive.  If a chunk is named in successive
-instances of png_set_keep_unknown_chunks(), the final instance will
-take precedence.  The IHDR and IEND chunks should not be named in
-chunk_list; if they are, libpng will process them normally anyway.
-If you know that your application will never make use of some particular
-chunks, use PNG_HANDLE_CHUNK_NEVER (or 1) as demonstrated below.
-
-Here is an example of the usage of png_set_keep_unknown_chunks(),
-where the private "vpAg" chunk will later be processed by a user chunk
-callback function:
-
-    png_byte vpAg[5]={118, 112,  65, 103, (png_byte) '\0'};
-
-    #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-      png_byte unused_chunks[]=
-      {
-        104,  73,  83,  84, (png_byte) '\0',   /* hIST */
-        105,  84,  88, 116, (png_byte) '\0',   /* iTXt */
-        112,  67,  65,  76, (png_byte) '\0',   /* pCAL */
-        115,  67,  65,  76, (png_byte) '\0',   /* sCAL */
-        115,  80,  76,  84, (png_byte) '\0',   /* sPLT */
-        116,  73,  77,  69, (png_byte) '\0',   /* tIME */
-      };
-    #endif
-
-    ...
-
-    #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
-      /* ignore all unknown chunks
-       * (use global setting "2" for libpng16 and earlier):
-       */
-      png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
-
-      /* except for vpAg: */
-      png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
-
-      /* also ignore unused known chunks: */
-      png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
-         (int)(sizeof unused_chunks)/5);
-    #endif
-
-.SS User limits
-
-The PNG specification allows the width and height of an image to be as
-large as 2^(31\-1 (0x7fffffff), or about 2.147 billion rows and columns.
-Larger images will be rejected immediately with a png_error() call. If
-you wish to reduce these limits, you can use
-
-   png_set_user_limits(png_ptr, width_max, height_max);
-
-to set your own limits (libpng may reject some very wide images
-anyway because of potential buffer overflow conditions).
-
-You should put this statement after you create the PNG structure and
-before calling png_read_info(), png_read_png(), or png_process_data().
-
-When writing a PNG datastream, put this statement before calling
-png_write_info() or png_write_png().
-
-If you need to retrieve the limits that are being applied, use
-
-   width_max = png_get_user_width_max(png_ptr);
-   height_max = png_get_user_height_max(png_ptr);
-
-The PNG specification sets no limit on the number of ancillary chunks
-allowed in a PNG datastream.  You can impose a limit on the total number
-of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
-
-   png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
-
-where 0x7fffffffL means unlimited.  You can retrieve this limit with
-
-   chunk_cache_max = png_get_chunk_cache_max(png_ptr);
-
-You can also set a limit on the amount of memory that a compressed chunk
-other than IDAT can occupy, with
-
-   png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
-
-and you can retrieve the limit with
-
-   chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);
-
-Any chunks that would cause either of these limits to be exceeded will
-be ignored.
-
-.SS Information about your system
-
-If you intend to display the PNG or to incorporate it in other image data you
-need to tell libpng information about your display or drawing surface so that
-libpng can convert the values in the image to match the display.
-
-From libpng-1.5.4 this information can be set before reading the PNG file
-header.  In earlier versions png_set_gamma() existed but behaved incorrectly if
-called before the PNG file header had been read and png_set_alpha_mode() did not
-exist.
-
-If you need to support versions prior to libpng-1.5.4 test the version number
-as illustrated below using "PNG_LIBPNG_VER >= 10504" and follow the procedures
-described in the appropriate manual page.
-
-You give libpng the encoding expected by your system expressed as a 'gamma'
-value.  You can also specify a default encoding for the PNG file in
-case the required information is missing from the file.  By default libpng
-assumes that the PNG data matches your system, to keep this default call:
-
-   png_set_gamma(png_ptr, screen_gamma, output_gamma);
-
-or you can use the fixed point equivalent:
-
-   png_set_gamma_fixed(png_ptr, PNG_FP_1*screen_gamma,
-      PNG_FP_1*output_gamma);
-
-If you don't know the gamma for your system it is probably 2.2 - a good
-approximation to the IEC standard for display systems (sRGB).  If images are
-too contrasty or washed out you got the value wrong - check your system
-documentation!
-
-Many systems permit the system gamma to be changed via a lookup table in the
-display driver, a few systems, including older Macs, change the response by
-default.  As of 1.5.4 three special values are available to handle common
-situations:
-
-   PNG_DEFAULT_sRGB: Indicates that the system conforms to the
-                     IEC 61966-2-1 standard.  This matches almost
-                     all systems.
-   PNG_GAMMA_MAC_18: Indicates that the system is an older
-                     (pre Mac OS 10.6) Apple Macintosh system with
-                     the default settings.
-   PNG_GAMMA_LINEAR: Just the fixed point value for 1.0 - indicates
-                     that the system expects data with no gamma
-                     encoding.
-
-You would use the linear (unencoded) value if you need to process the pixel
-values further because this avoids the need to decode and re-encode each
-component value whenever arithmetic is performed.  A lot of graphics software
-uses linear values for this reason, often with higher precision component values
-to preserve overall accuracy.
-
-
-The output_gamma value expresses how to decode the output values, not how
-they are encoded.  The values used correspond to the normal numbers used to
-describe the overall gamma of a computer display system; for example 2.2 for
-an sRGB conformant system.  The values are scaled by 100000 in the _fixed
-version of the API (so 220000 for sRGB.)
-
-The inverse of the value is always used to provide a default for the PNG file
-encoding if it has no gAMA chunk and if png_set_gamma() has not been called
-to override the PNG gamma information.
-
-When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode
-opaque pixels however pixels with lower alpha values are not encoded,
-regardless of the output gamma setting.
-
-When the standard Porter Duff handling is requested with mode 1 the output
-encoding is set to be linear and the output_gamma value is only relevant
-as a default for input data that has no gamma information.  The linear output
-encoding will be overridden if png_set_gamma() is called - the results may be
-highly unexpected!
-
-The following numbers are derived from the sRGB standard and the research
-behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of
-0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing
-correction required to take account of any differences in the color
-environment of the original scene and the intended display environment; the
-value expresses how to *decode* the image for display, not how the original
-data was *encoded*.
-
-sRGB provides a peg for the PNG standard by defining a viewing environment.
-sRGB itself, and earlier TV standards, actually use a more complex transform
-(a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is
-limited to simple power laws.)  By saying that an image for direct display on
-an sRGB conformant system should be stored with a gAMA chunk value of 45455
-(11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification
-makes it possible to derive values for other display systems and
-environments.
-
-The Mac value is deduced from the sRGB based on an assumption that the actual
-extra viewing correction used in early Mac display systems was implemented as
-a power 1.45 lookup table.
-
-Any system where a programmable lookup table is used or where the behavior of
-the final display device characteristics can be changed requires system
-specific code to obtain the current characteristic.  However this can be
-difficult and most PNG gamma correction only requires an approximate value.
-
-By default, if png_set_alpha_mode() is not called, libpng assumes that all
-values are unencoded, linear, values and that the output device also has a
-linear characteristic.  This is only very rarely correct - it is invariably
-better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the
-default if you don't know what the right answer is!
-
-The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS
-10.6) which used a correction table to implement a somewhat lower gamma on an
-otherwise sRGB system.
-
-Both these values are reserved (not simple gamma values) in order to allow
-more precise correction internally in the future.
-
-NOTE: the values can be passed to either the fixed or floating
-point APIs, but the floating point API will also accept floating point
-values.
-
-The second thing you may need to tell libpng about is how your system handles
-alpha channel information.  Some, but not all, PNG files contain an alpha
-channel.  To display these files correctly you need to compose the data onto a
-suitable background, as described in the PNG specification.
-
-Libpng only supports composing onto a single color (using png_set_background;
-see below).  Otherwise you must do the composition yourself and, in this case,
-you may need to call png_set_alpha_mode:
-
-   #if PNG_LIBPNG_VER >= 10504
-      png_set_alpha_mode(png_ptr, mode, screen_gamma);
-   #else
-      png_set_gamma(png_ptr, screen_gamma, 1.0/screen_gamma);
-   #endif
-
-The screen_gamma value is the same as the argument to png_set_gamma; however,
-how it affects the output depends on the mode.  png_set_alpha_mode() sets the
-file gamma default to 1/screen_gamma, so normally you don't need to call
-png_set_gamma.  If you need different defaults call png_set_gamma() before
-png_set_alpha_mode() - if you call it after it will override the settings made
-by png_set_alpha_mode().
-
-The mode is as follows:
-
-    PNG_ALPHA_PNG: The data is encoded according to the PNG
-specification.  Red, green and blue, or gray, components are
-gamma encoded color values and are not premultiplied by the
-alpha value.  The alpha value is a linear measure of the
-contribution of the pixel to the corresponding final output pixel.
-
-You should normally use this format if you intend to perform
-color correction on the color values; most, maybe all, color
-correction software has no handling for the alpha channel and,
-anyway, the math to handle pre-multiplied component values is
-unnecessarily complex.
-
-Before you do any arithmetic on the component values you need
-to remove the gamma encoding and multiply out the alpha
-channel.  See the PNG specification for more detail.  It is
-important to note that when an image with an alpha channel is
-scaled, linear encoded, pre-multiplied component values must
-be used!
-
-The remaining modes assume you don't need to do any further color correction or
-that if you do, your color correction software knows all about alpha (it
-probably doesn't!).  They 'associate' the alpha with the color information by
-storing color channel values that have been scaled by the alpha.  The
-advantage is that the color channels can be resampled (the image can be
-scaled) in this form.  The disadvantage is that normal practice is to store
-linear, not (gamma) encoded, values and this requires 16-bit channels for
-still images rather than the 8-bit channels that are just about sufficient if
-gamma encoding is used.  In addition all non-transparent pixel values,
-including completely opaque ones, must be gamma encoded to produce the final
-image.  These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes
-described below (the latter being the two common names for associated alpha
-color channels). Note that PNG files always contain non-associated color
-channels; png_set_alpha_mode() with one of the modes causes the decoder to
-convert the pixels to an associated form before returning them to your
-application. 
-
-Since it is not necessary to perform arithmetic on opaque color values so
-long as they are not to be resampled and are in the final color space it is
-possible to optimize the handling of alpha by storing the opaque pixels in
-the PNG format (adjusted for the output color space) while storing partially
-opaque pixels in the standard, linear, format.  The accuracy required for
-standard alpha composition is relatively low, because the pixels are
-isolated, therefore typically the accuracy loss in storing 8-bit linear
-values is acceptable.  (This is not true if the alpha channel is used to
-simulate transparency over large areas - use 16 bits or the PNG mode in
-this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is
-treated as opaque only if the alpha value is equal to the maximum value.
-
-    PNG_ALPHA_STANDARD:  The data libpng produces is encoded in the
-standard way assumed by most correctly written graphics software.
-The gamma encoding will be removed by libpng and the
-linear component values will be pre-multiplied by the
-alpha channel.
-
-With this format the final image must be re-encoded to
-match the display gamma before the image is displayed.
-If your system doesn't do that, yet still seems to
-perform arithmetic on the pixels without decoding them,
-it is broken - check out the modes below.
-
-With PNG_ALPHA_STANDARD libpng always produces linear
-component values, whatever screen_gamma you supply.  The
-screen_gamma value is, however, used as a default for
-the file gamma if the PNG file has no gamma information.
-
-If you call png_set_gamma() after png_set_alpha_mode() you
-will override the linear encoding.  Instead the
-pre-multiplied pixel values will be gamma encoded but
-the alpha channel will still be linear.  This may
-actually match the requirements of some broken software,
-but it is unlikely.
-
-While linear 8-bit data is often used it has
-insufficient precision for any image with a reasonable
-dynamic range.  To avoid problems, and if your software
-supports it, use png_set_expand_16() to force all
-components to 16 bits.
-
-    PNG_ALPHA_OPTIMIZED: This mode is the same as PNG_ALPHA_STANDARD
-except that completely opaque pixels are gamma encoded according to
-the screen_gamma value.  Pixels with alpha less than 1.0
-will still have linear components.
-
-Use this format if you have control over your
-compositing software and so don't do other arithmetic
-(such as scaling) on the data you get from libpng.  Your
-compositing software can simply copy opaque pixels to
-the output but still has linear values for the
-non-opaque pixels.
-
-In normal compositing, where the alpha channel encodes
-partial pixel coverage (as opposed to broad area
-translucency), the inaccuracies of the 8-bit
-representation of non-opaque pixels are irrelevant.
-
-You can also try this format if your software is broken;
-it might look better.
-
-    PNG_ALPHA_BROKEN: This is PNG_ALPHA_STANDARD; however, all component
-values, including the alpha channel are gamma encoded.  This is
-broken because, in practice, no implementation that uses this choice
-correctly undoes the encoding before handling alpha composition.  Use this
-choice only if other serious errors in the software or hardware you use
-mandate it.  In most cases of broken software or hardware the bug in the
-final display manifests as a subtle halo around composited parts of the
-image.  You may not even perceive this as a halo; the composited part of
-the image may simply appear separate from the background, as though it had
-been cut out of paper and pasted on afterward.
-
-If you don't have to deal with bugs in software or hardware, or if you can fix
-them, there are three recommended ways of using png_set_alpha_mode():
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_PNG,
-       screen_gamma);
-
-You can do color correction on the result (libpng does not currently
-support color correction internally).  When you handle the alpha channel
-you need to undo the gamma encoding and multiply out the alpha.
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_STANDARD,
-       screen_gamma);
-   png_set_expand_16(png_ptr);
-
-If you are using the high level interface, don't call png_set_expand_16();
-instead pass PNG_TRANSFORM_EXPAND_16 to the interface.
-
-With this mode you can't do color correction, but you can do arithmetic,
-including composition and scaling, on the data without further processing.
-
-   png_set_alpha_mode(png_ptr, PNG_ALPHA_OPTIMIZED,
-       screen_gamma);
-
-You can avoid the expansion to 16-bit components with this mode, but you
-lose the ability to scale the image or perform other linear arithmetic.
-All you can do is compose the result onto a matching output.  Since this
-mode is libpng-specific you also need to write your own composition
-software.
-
-The following are examples of calls to png_set_alpha_mode to achieve the
-required overall gamma correction and, where necessary, alpha
-premultiplication.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
-
-This is the default libpng handling of the alpha channel - it is not
-pre-multiplied into the color components.  In addition the call states
-that the output is for a sRGB system and causes all PNG files without gAMA
-chunks to be assumed to be encoded using sRGB.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
-
-In this case the output is assumed to be something like an sRGB conformant
-display preceeded by a power-law lookup table of power 1.45.  This is how
-early Mac systems behaved.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
-
-This is the classic Jim Blinn approach and will work in academic
-environments where everything is done by the book.  It has the shortcoming
-of assuming that input PNG data with no gamma information is linear - this
-is unlikely to be correct unless the PNG files where generated locally.
-Most of the time the output precision will be so low as to show
-significant banding in dark areas of the image.
-
-    png_set_expand_16(pp);
-    png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
-
-This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
-are assumed to have the sRGB encoding if not marked with a gamma value and
-the output is always 16 bits per component.  This permits accurate scaling
-and processing of the data.  If you know that your input PNG files were
-generated locally you might need to replace PNG_DEFAULT_sRGB with the
-correct value for your system.
-
-    png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
-
-If you just need to composite the PNG image onto an existing background
-and if you control the code that does this you can use the optimization
-setting.  In this case you just copy completely opaque pixels to the
-output.  For pixels that are not completely transparent (you just skip
-those) you do the composition math using png_composite or png_composite_16
-below then encode the resultant 8-bit or 16-bit values to match the output
-encoding.
-
-    Other cases
-
-If neither the PNG nor the standard linear encoding work for you because
-of the software or hardware you use then you have a big problem.  The PNG
-case will probably result in halos around the image.  The linear encoding
-will probably result in a washed out, too bright, image (it's actually too
-contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
-substantially reduce the halos.  Alternatively try:
-
-    png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
-
-This option will also reduce the halos, but there will be slight dark
-halos round the opaque parts of the image where the background is light.
-In the OPTIMIZED mode the halos will be light halos where the background
-is dark.  Take your pick - the halos are unavoidable unless you can get
-your hardware/software fixed!  (The OPTIMIZED approach is slightly
-faster.)
-
-When the default gamma of PNG files doesn't match the output gamma.
-If you have PNG files with no gamma information png_set_alpha_mode allows
-you to provide a default gamma, but it also sets the ouput gamma to the
-matching value.  If you know your PNG files have a gamma that doesn't
-match the output you can take advantage of the fact that
-png_set_alpha_mode always sets the output gamma but only sets the PNG
-default if it is not already set:
-
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
-    png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
-
-The first call sets both the default and the output gamma values, the
-second call overrides the output gamma without changing the default.  This
-is easier than achieving the same effect with png_set_gamma.  You must use
-PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
-fire if more than one call to png_set_alpha_mode and png_set_background is
-made in the same read operation, however multiple calls with PNG_ALPHA_PNG
-are ignored.
-
-If you don't need, or can't handle, the alpha channel you can call
-png_set_background() to remove it by compositing against a fixed color.  Don't
-call png_set_strip_alpha() to do this - it will leave spurious pixel values in
-transparent parts of this image.
-
-   png_set_background(png_ptr, &background_color,
-       PNG_BACKGROUND_GAMMA_SCREEN, 0, 1);
-
-The background_color is an RGB or grayscale value according to the data format
-libpng will produce for you.  Because you don't yet know the format of the PNG
-file, if you call png_set_background at this point you must arrange for the
-format produced by libpng to always have 8-bit or 16-bit components and then
-store the color as an 8-bit or 16-bit color as appropriate.  The color contains
-separate gray and RGB component values, so you can let libpng produce gray or
-RGB output according to the input format, but low bit depth grayscale images
-must always be converted to at least 8-bit format.  (Even though low bit depth
-grayscale images can't have an alpha channel they can have a transparent
-color!)
-
-You set the transforms you need later, either as flags to the high level
-interface or libpng API calls for the low level interface.  For reference the
-settings and API calls required are:
-
-8-bit values:
-   PNG_TRANSFORM_SCALE_16 | PNG_EXPAND
-   png_set_expand(png_ptr); png_set_scale_16(png_ptr);
-
-   If you must get exactly the same inaccurate results
-   produced by default in versions prior to libpng-1.5.4,
-   use PNG_TRANSFORM_STRIP_16 and png_set_strip_16(png_ptr)
-   instead.
-
-16-bit values:
-   PNG_TRANSFORM_EXPAND_16
-   png_set_expand_16(png_ptr);
-
-In either case palette image data will be expanded to RGB.  If you just want
-color data you can add PNG_TRANSFORM_GRAY_TO_RGB or png_set_gray_to_rgb(png_ptr)
-to the list.
-
-Calling png_set_background before the PNG file header is read will not work
-prior to libpng-1.5.4.  Because the failure may result in unexpected warnings or
-errors it is therefore much safer to call png_set_background after the head has
-been read.  Unfortunately this means that prior to libpng-1.5.4 it cannot be
-used with the high level interface.
-
-.SS The high-level read interface
-
-At this point there are two ways to proceed; through the high-level
-read interface, or through a sequence of low-level read operations.
-You can use the high-level interface if (a) you are willing to read
-the entire image into memory, and (b) the input transformations
-you want to do are limited to the following set:
-
-    PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_SCALE_16      Strip 16-bit samples to
-                                8-bit accurately
-    PNG_TRANSFORM_STRIP_16      Chop 16-bit samples to
-                                8-bit less accurately
-    PNG_TRANSFORM_STRIP_ALPHA   Discard the alpha channel
-    PNG_TRANSFORM_PACKING       Expand 1, 2 and 4-bit
-                                samples to bytes
-    PNG_TRANSFORM_PACKSWAP      Change order of packed
-                                pixels to LSB first
-    PNG_TRANSFORM_EXPAND        Perform set_expand()
-    PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
-    PNG_TRANSFORM_SHIFT         Normalize pixels to the
-                                sBIT depth
-    PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
-                                to BGRA
-    PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
-                                to AG
-    PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
-                                to transparency
-    PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
-    PNG_TRANSFORM_GRAY_TO_RGB   Expand grayscale samples
-                                to RGB (or GA to RGBA)
-    PNG_TRANSFORM_EXPAND_16     Expand samples to 16 bits
-
-(This excludes setting a background color, doing gamma transformation,
-quantizing, and setting filler.)  If this is the case, simply do this:
-
-    png_read_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some
-set of transformation flags.  This call is equivalent to png_read_info(),
-followed the set of transformations indicated by the transform mask,
-then png_read_image(), and finally png_read_end().
-
-(The final parameter of this call is not yet used.  Someday it might point
-to transformation parameters required by some future input transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_read_png().
-
-After you have called png_read_png(), you can retrieve the image data
-with
-
-   row_pointers = png_get_rows(png_ptr, info_ptr);
-
-where row_pointers is an array of pointers to the pixel data for each row:
-
-   png_bytep row_pointers[height];
-
-If you know your image size and pixel size ahead of time, you can allocate
-row_pointers prior to calling png_read_png() with
-
-   if (height > PNG_UINT_32_MAX/(sizeof (png_byte)))
-      png_error (png_ptr,
-          "Image is too tall to process in memory");
-
-   if (width > PNG_UINT_32_MAX/pixel_size)
-      png_error (png_ptr,
-          "Image is too wide to process in memory");
-
-   row_pointers = png_malloc(png_ptr,
-       height*(sizeof (png_bytep)));
-
-   for (int i=0; i<height, i++)
-      row_pointers[i]=NULL;  /* security precaution */
-
-   for (int i=0; i<height, i++)
-      row_pointers[i]=png_malloc(png_ptr,
-          width*pixel_size);
-
-   png_set_rows(png_ptr, info_ptr, &row_pointers);
-
-Alternatively you could allocate your image in one big block and define
-row_pointers[i] to point into the proper places in your block.
-
-If you use png_set_rows(), the application is responsible for freeing
-row_pointers (and row_pointers[i], if they were separately allocated).
-
-If you don't allocate row_pointers ahead of time, png_read_png() will
-do it, and it'll be free'ed by libpng when you call png_destroy_*().
-
-.SS The low-level read interface
-
-If you are going the low-level route, you are now ready to read all
-the file information up to the actual image data.  You do this with a
-call to png_read_info().
-
-    png_read_info(png_ptr, info_ptr);
-
-This will process all chunks up to but not including the image data.
-
-This also copies some of the data from the PNG file into the decode structure
-for use in later transformations.  Important information copied in is:
-
-1) The PNG file gamma from the gAMA chunk.  This overwrites the default value
-provided by an earlier call to png_set_gamma or png_set_alpha_mode.
-
-2) Prior to libpng-1.5.4 the background color from a bKGd chunk.  This
-damages the information provided by an earlier call to png_set_background
-resulting in unexpected behavior.  Libpng-1.5.4 no longer does this.
-
-3) The number of significant bits in each component value.  Libpng uses this to
-optimize gamma handling by reducing the internal lookup table sizes.
-
-4) The transparent color information from a tRNS chunk.  This can be modified by
-a later call to png_set_tRNS.
-
-.SS Querying the info structure
-
-Functions are used to get the information from the info_ptr once it
-has been read.  Note that these fields may not be completely filled
-in until png_read_end() has read the chunk data following the image.
-
-    png_get_IHDR(png_ptr, info_ptr, &width, &height,
-       &bit_depth, &color_type, &interlace_type,
-       &compression_type, &filter_method);
-
-    width          - holds the width of the image
-                     in pixels (up to 2^31).
-
-    height         - holds the height of the image
-                     in pixels (up to 2^31).
-
-    bit_depth      - holds the bit depth of one of the
-                     image channels.  (valid values are
-                     1, 2, 4, 8, 16 and depend also on
-                     the color_type.  See also
-                     significant bits (sBIT) below).
-
-    color_type     - describes which color/alpha channels
-                         are present.
-                     PNG_COLOR_TYPE_GRAY
-                        (bit depths 1, 2, 4, 8, 16)
-                     PNG_COLOR_TYPE_GRAY_ALPHA
-                        (bit depths 8, 16)
-                     PNG_COLOR_TYPE_PALETTE
-                        (bit depths 1, 2, 4, 8)
-                     PNG_COLOR_TYPE_RGB
-                        (bit_depths 8, 16)
-                     PNG_COLOR_TYPE_RGB_ALPHA
-                        (bit_depths 8, 16)
-
-                     PNG_COLOR_MASK_PALETTE
-                     PNG_COLOR_MASK_COLOR
-                     PNG_COLOR_MASK_ALPHA
-
-    interlace_type - (PNG_INTERLACE_NONE or
-                     PNG_INTERLACE_ADAM7)
-
-    compression_type - (must be PNG_COMPRESSION_TYPE_BASE
-                     for PNG 1.0)
-
-    filter_method  - (must be PNG_FILTER_TYPE_BASE
-                     for PNG 1.0, and can also be
-                     PNG_INTRAPIXEL_DIFFERENCING if
-                     the PNG datastream is embedded in
-                     a MNG-1.0 datastream)
-
-    Any or all of interlace_type, compression_type, or
-    filter_method can be NULL if you are
-    not interested in their values.
-
-    Note that png_get_IHDR() returns 32-bit data into
-    the application's width and height variables.
-    This is an unsafe situation if these are 16-bit
-    variables.  In such situations, the
-    png_get_image_width() and png_get_image_height()
-    functions described below are safer.
-
-    width            = png_get_image_width(png_ptr,
-                         info_ptr);
-
-    height           = png_get_image_height(png_ptr,
-                         info_ptr);
-
-    bit_depth        = png_get_bit_depth(png_ptr,
-                         info_ptr);
-
-    color_type       = png_get_color_type(png_ptr,
-                         info_ptr);
-
-    interlace_type   = png_get_interlace_type(png_ptr,
-                         info_ptr);
-
-    compression_type = png_get_compression_type(png_ptr,
-                         info_ptr);
-
-    filter_method    = png_get_filter_type(png_ptr,
-                         info_ptr);
-
-    channels = png_get_channels(png_ptr, info_ptr);
-
-    channels       - number of channels of info for the
-                     color type (valid values are 1 (GRAY,
-                     PALETTE), 2 (GRAY_ALPHA), 3 (RGB),
-                     4 (RGB_ALPHA or RGB + filler byte))
-
-    rowbytes = png_get_rowbytes(png_ptr, info_ptr);
-
-    rowbytes       - number of bytes needed to hold a row
-
-    signature = png_get_signature(png_ptr, info_ptr);
-
-    signature      - holds the signature read from the
-                     file (if any).  The data is kept in
-                     the same offset it would be if the
-                     whole signature were read (i.e. if an
-                     application had already read in 4
-                     bytes of signature before starting
-                     libpng, the remaining 4 bytes would
-                     be in signature[4] through signature[7]
-                     (see png_set_sig_bytes())).
-
-These are also important, but their validity depends on whether the chunk
-has been read.  The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
-png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
-data has been read, or zero if it is missing.  The parameters to the
-png_get_<chunk> are set directly if they are simple data types, or a
-pointer into the info_ptr is returned for any complex types.
-
-The colorspace data from gAMA, cHRM, sRGB, iCCP, and sBIT chunks
-is simply returned to give the application information about how the
-image was encoded.  Libpng itself only does transformations using the file
-gamma when combining semitransparent pixels with the background color, and,
-since libpng-1.6.0, when converting between 8-bit sRGB and 16-bit linear pixels
-within the simplified API.  Libpng also uses the file gamma when converting
-RGB to gray, beginning with libpng-1.0.5, if the application calls
-png_set_rgb_to_gray()).
-
-    png_get_PLTE(png_ptr, info_ptr, &palette,
-                     &num_palette);
-
-    palette        - the palette for the file
-                     (array of png_color)
-
-    num_palette    - number of entries in the palette
-
-    png_get_gAMA(png_ptr, info_ptr, &file_gamma);
-    png_get_gAMA_fixed(png_ptr, info_ptr, &int_file_gamma);
-
-    file_gamma     - the gamma at which the file is
-                     written (PNG_INFO_gAMA)
-
-    int_file_gamma - 100,000 times the gamma at which the
-                     file is written
-
-    png_get_cHRM(png_ptr, info_ptr,  &white_x, &white_y, &red_x,
-                     &red_y, &green_x, &green_y, &blue_x, &blue_y)
-    png_get_cHRM_XYZ(png_ptr, info_ptr, &red_X, &red_Y, &red_Z,
-                     &green_X, &green_Y, &green_Z, &blue_X, &blue_Y,
-                     &blue_Z)
-    png_get_cHRM_fixed(png_ptr, info_ptr, &int_white_x,
-                     &int_white_y, &int_red_x, &int_red_y,
-                     &int_green_x, &int_green_y, &int_blue_x,
-                     &int_blue_y)
-    png_get_cHRM_XYZ_fixed(png_ptr, info_ptr, &int_red_X, &int_red_Y,
-                     &int_red_Z, &int_green_X, &int_green_Y,
-                     &int_green_Z, &int_blue_X, &int_blue_Y,
-                     &int_blue_Z)
-
-    {white,red,green,blue}_{x,y}
-                     A color space encoding specified using the
-                     chromaticities of the end points and the
-                     white point. (PNG_INFO_cHRM)
-
-    {red,green,blue}_{X,Y,Z}
-                     A color space encoding specified using the
-                     encoding end points - the CIE tristimulus
-                     specification of the intended color of the red,
-                     green and blue channels in the PNG RGB data.
-                     The white point is simply the sum of the three
-                     end points. (PNG_INFO_cHRM)
-
-    png_get_sRGB(png_ptr, info_ptr, &srgb_intent);
-
-    srgb_intent -    the rendering intent (PNG_INFO_sRGB)
-                     The presence of the sRGB chunk
-                     means that the pixel data is in the
-                     sRGB color space.  This chunk also
-                     implies specific values of gAMA and
-                     cHRM.
-
-    png_get_iCCP(png_ptr, info_ptr, &name,
-       &compression_type, &profile, &proflen);
-
-    name             - The profile name.
-
-    compression_type - The compression type; always
-                       PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
-                       You may give NULL to this argument to
-                       ignore it.
-
-    profile          - International Color Consortium color
-                       profile data. May contain NULs.
-
-    proflen          - length of profile data in bytes.
-
-    png_get_sBIT(png_ptr, info_ptr, &sig_bit);
-
-    sig_bit        - the number of significant bits for
-                     (PNG_INFO_sBIT) each of the gray,
-                     red, green, and blue channels,
-                     whichever are appropriate for the
-                     given color type (png_color_16)
-
-    png_get_tRNS(png_ptr, info_ptr, &trans_alpha,
-                     &num_trans, &trans_color);
-
-    trans_alpha    - array of alpha (transparency)
-                     entries for palette (PNG_INFO_tRNS)
-
-    num_trans      - number of transparent entries
-                     (PNG_INFO_tRNS)
-
-    trans_color    - graylevel or color sample values of
-                     the single transparent color for
-                     non-paletted images (PNG_INFO_tRNS)
-
-    png_get_hIST(png_ptr, info_ptr, &hist);
-                     (PNG_INFO_hIST)
-
-    hist           - histogram of palette (array of
-                     png_uint_16)
-
-    png_get_tIME(png_ptr, info_ptr, &mod_time);
-
-    mod_time       - time image was last modified
-                    (PNG_VALID_tIME)
-
-    png_get_bKGD(png_ptr, info_ptr, &background);
-
-    background     - background color (of type
-                     png_color_16p) (PNG_VALID_bKGD)
-                     valid 16-bit red, green and blue
-                     values, regardless of color_type
-
-    num_comments   = png_get_text(png_ptr, info_ptr,
-                     &text_ptr, &num_text);
-
-    num_comments   - number of comments
-
-    text_ptr       - array of png_text holding image
-                     comments
-
-    text_ptr[i].compression - type of compression used
-                 on "text" PNG_TEXT_COMPRESSION_NONE
-                           PNG_TEXT_COMPRESSION_zTXt
-                           PNG_ITXT_COMPRESSION_NONE
-                           PNG_ITXT_COMPRESSION_zTXt
-
-    text_ptr[i].key   - keyword for comment.  Must contain
-                         1-79 characters.
-
-    text_ptr[i].text  - text comments for current
-                         keyword.  Can be empty.
-
-    text_ptr[i].text_length - length of text string,
-                 after decompression, 0 for iTXt
-
-    text_ptr[i].itxt_length - length of itxt string,
-                 after decompression, 0 for tEXt/zTXt
-
-    text_ptr[i].lang  - language of comment (empty
-                         string for unknown).
-
-    text_ptr[i].lang_key  - keyword in UTF-8
-                         (empty string for unknown).
-
-    Note that the itxt_length, lang, and lang_key
-    members of the text_ptr structure only exist when the
-    library is built with iTXt chunk support.  Prior to
-    libpng-1.4.0 the library was built by default without
-    iTXt support. Also note that when iTXt is supported,
-    they contain NULL pointers when the "compression"
-    field contains PNG_TEXT_COMPRESSION_NONE or
-    PNG_TEXT_COMPRESSION_zTXt.
-
-    num_text       - number of comments (same as
-                     num_comments; you can put NULL here
-                     to avoid the duplication)
-
-    Note while png_set_text() will accept text, language,
-    and translated keywords that can be NULL pointers, the
-    structure returned by png_get_text will always contain
-    regular zero-terminated C strings.  They might be
-    empty strings but they will never be NULL pointers.
-
-    num_spalettes = png_get_sPLT(png_ptr, info_ptr,
-       &palette_ptr);
-
-    num_spalettes  - number of sPLT chunks read.
-
-    palette_ptr    - array of palette structures holding
-                     contents of one or more sPLT chunks
-                     read.
-
-    png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
-       &unit_type);
-
-    offset_x       - positive offset from the left edge
-                     of the screen (can be negative)
-
-    offset_y       - positive offset from the top edge
-                     of the screen (can be negative)
-
-    unit_type      - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
-    png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
-       &unit_type);
-
-    res_x          - pixels/unit physical resolution in
-                     x direction
-
-    res_y          - pixels/unit physical resolution in
-                     x direction
-
-    unit_type      - PNG_RESOLUTION_UNKNOWN,
-                     PNG_RESOLUTION_METER
-
-    png_get_sCAL(png_ptr, info_ptr, &unit, &width,
-       &height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-
-    height      - height of a pixel in physical scale units
-                 (width and height are doubles)
-
-    png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
-       &height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-                  (expressed as a string)
-
-    height      - height of a pixel in physical scale units
-                 (width and height are strings like "2.54")
-
-    num_unknown_chunks = png_get_unknown_chunks(png_ptr,
-       info_ptr, &unknowns)
-
-    unknowns          - array of png_unknown_chunk
-                        structures holding unknown chunks
-
-    unknowns[i].name  - name of unknown chunk
-
-    unknowns[i].data  - data of unknown chunk
-
-    unknowns[i].size  - size of unknown chunk's data
-
-    unknowns[i].location - position of chunk in file
-
-    The value of "i" corresponds to the order in which the
-    chunks were read from the PNG file or inserted with the
-    png_set_unknown_chunks() function.
-
-    The value of "location" is a bitwise "or" of
-
-         PNG_HAVE_IHDR  (0x01)
-         PNG_HAVE_PLTE  (0x02)
-         PNG_AFTER_IDAT (0x08)
-
-The data from the pHYs chunk can be retrieved in several convenient
-forms:
-
-    res_x = png_get_x_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_y = png_get_y_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_x_and_y = png_get_pixels_per_meter(png_ptr,
-       info_ptr)
-
-    res_x = png_get_x_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    res_y = png_get_y_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    res_x_and_y = png_get_pixels_per_inch(png_ptr,
-       info_ptr)
-
-    aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
-       info_ptr)
-
-    Each of these returns 0 [signifying "unknown"] if
-       the data is not present or if res_x is 0;
-       res_x_and_y is 0 if res_x != res_y
-
-    Note that because of the way the resolutions are
-       stored internally, the inch conversions won't
-       come out to exactly even number.  For example,
-       72 dpi is stored as 0.28346 pixels/meter, and
-       when this is retrieved it is 71.9988 dpi, so
-       be sure to round the returned value appropriately
-       if you want to display a reasonable-looking result.
-
-The data from the oFFs chunk can be retrieved in several convenient
-forms:
-
-    x_offset = png_get_x_offset_microns(png_ptr, info_ptr);
-
-    y_offset = png_get_y_offset_microns(png_ptr, info_ptr);
-
-    x_offset = png_get_x_offset_inches(png_ptr, info_ptr);
-
-    y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
-
-    Each of these returns 0 [signifying "unknown" if both
-       x and y are 0] if the data is not present or if the
-       chunk is present but the unit is the pixel.  The
-       remark about inexact inch conversions applies here
-       as well, because a value in inches can't always be
-       converted to microns and back without some loss
-       of precision.
-
-For more information, see the
-PNG specification for chunk contents.  Be careful with trusting
-rowbytes, as some of the transformations could increase the space
-needed to hold a row (expand, filler, gray_to_rgb, etc.).
-See png_read_update_info(), below.
-
-A quick word about text_ptr and num_text.  PNG stores comments in
-keyword/text pairs, one pair per chunk, with no limit on the number
-of text chunks, and a 2^31 byte limit on their size.  While there are
-suggested keywords, there is no requirement to restrict the use to these
-strings.  It is strongly suggested that keywords and text be sensible
-to humans (that's the point), so don't use abbreviations.  Non-printing
-symbols are not allowed.  See the PNG specification for more details.
-There is also no requirement to have text after the keyword.
-
-Keywords should be limited to 79 Latin-1 characters without leading or
-trailing spaces, but non-consecutive spaces are allowed within the
-keyword.  It is possible to have the same keyword any number of times.
-The text_ptr is an array of png_text structures, each holding a
-pointer to a language string, a pointer to a keyword and a pointer to
-a text string.  The text string, language code, and translated
-keyword may be empty or NULL pointers.  The keyword/text
-pairs are put into the array in the order that they are received.
-However, some or all of the text chunks may be after the image, so, to
-make sure you have read all the text chunks, don't mess with these
-until after you read the stuff after the image.  This will be
-mentioned again below in the discussion that goes with png_read_end().
-
-.SS Input transformations
-
-After you've read the header information, you can set up the library
-to handle any special transformations of the image data.  The various
-ways to transform the data will be described in the order that they
-should occur.  This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths.
-
-Transformations you request are ignored if they don't have any meaning for a
-particular input data format.  However some transformations can have an effect
-as a result of a previous transformation.  If you specify a contradictory set of
-transformations, for example both adding and removing the alpha channel, you
-cannot predict the final result.
-
-The color used for the transparency values should be supplied in the same
-format/depth as the current image data.  It is stored in the same format/depth
-as the image data in a tRNS chunk, so this is what libpng expects for this data.
-
-The color used for the background value depends on the need_expand argument as
-described below.
-
-Data will be decoded into the supplied row buffers packed into bytes
-unless the library has been told to transform it into another format.
-For example, 4 bit/pixel paletted or grayscale data will be returned
-2 pixels/byte with the leftmost pixel in the high-order bits of the
-byte, unless png_set_packing() is called.  8-bit RGB data will be stored
-in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
-is called to insert filler bytes, either before or after each RGB triplet.
-16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
-byte of the color value first, unless png_set_scale_16() is called to
-transform it to regular RGB RGB triplets, or png_set_filler() or
-png_set_add alpha() is called to insert filler bytes, either before or
-after each RRGGBB triplet.  Similarly, 8-bit or 16-bit grayscale data can
-be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
-or png_set_scale_16().
-
-The following code transforms grayscale images of less than 8 to 8 bits,
-changes paletted images to RGB, and adds a full alpha channel if there is
-transparency information in a tRNS chunk.  This is most useful on
-grayscale images with bit depths of 2 or 4 or if there is a multiple-image
-viewing application that wishes to treat all images in the same way.
-
-    if (color_type == PNG_COLOR_TYPE_PALETTE)
-        png_set_palette_to_rgb(png_ptr);
-
-    if (png_get_valid(png_ptr, info_ptr,
-        PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
-
-    if (color_type == PNG_COLOR_TYPE_GRAY &&
-        bit_depth < 8) png_set_expand_gray_1_2_4_to_8(png_ptr);
-
-The first two functions are actually aliases for png_set_expand(), added
-in libpng version 1.0.4, with the function names expanded to improve code
-readability.  In some future version they may actually do different
-things.
-
-As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
-added.  It expands the sample depth without changing tRNS to alpha.
-
-As of libpng version 1.5.2, png_set_expand_16() was added.  It behaves as
-png_set_expand(); however, the resultant channels have 16 bits rather than 8.
-Use this when the output color or gray channels are made linear to avoid fairly
-severe accuracy loss.
-
-   if (bit_depth < 16)
-      png_set_expand_16(png_ptr);
-
-PNG can have files with 16 bits per channel.  If you only can handle
-8 bits per channel, this will strip the pixels down to 8-bit.
-
-    if (bit_depth == 16)
-#if PNG_LIBPNG_VER >= 10504
-       png_set_scale_16(png_ptr);
-#else
-       png_set_strip_16(png_ptr);
-#endif
-
-(The more accurate "png_set_scale_16()" API became available in libpng version
-1.5.4).
-
-If you need to process the alpha channel on the image separately from the image
-data (for example if you convert it to a bitmap mask) it is possible to have
-libpng strip the channel leaving just RGB or gray data:
-
-    if (color_type & PNG_COLOR_MASK_ALPHA)
-       png_set_strip_alpha(png_ptr);
-
-If you strip the alpha channel you need to find some other way of dealing with
-the information.  If, instead, you want to convert the image to an opaque
-version with no alpha channel use png_set_background; see below.
-
-As of libpng version 1.5.2, almost all useful expansions are supported, the
-major ommissions are conversion of grayscale to indexed images (which can be
-done trivially in the application) and conversion of indexed to grayscale (which
-can be done by a trivial manipulation of the palette.)
-
-In the following table, the 01 means grayscale with depth<8, 31 means
-indexed with depth<8, other numerals represent the color type, "T" means
-the tRNS chunk is present, A means an alpha channel is present, and O
-means tRNS or alpha is present but all pixels in the image are opaque.
-
-  FROM  01  31   0  0T  0O   2  2T  2O   3  3T  3O  4A  4O  6A  6O
-   TO
-   01    -  [G]  -   -   -   -   -   -   -   -   -   -   -   -   -
-   31   [Q]  Q  [Q] [Q] [Q]  Q   Q   Q   Q   Q   Q  [Q] [Q]  Q   Q
-    0    1   G   +   .   .   G   G   G   G   G   G   B   B  GB  GB
-   0T    lt  Gt  t   +   .   Gt  G   G   Gt  G   G   Bt  Bt GBt GBt
-   0O    lt  Gt  t   .   +   Gt  Gt  G   Gt  Gt  G   Bt  Bt GBt GBt
-    2    C   P   C   C   C   +   .   .   C   -   -  CB  CB   B   B
-   2T    Ct  -   Ct  C   C   t   +   t   -   -   -  CBt CBt  Bt  Bt
-   2O    Ct  -   Ct  C   C   t   t   +   -   -   -  CBt CBt  Bt  Bt
-    3   [Q]  p  [Q] [Q] [Q]  Q   Q   Q   +   .   .  [Q] [Q]  Q   Q
-   3T   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   +   t  [Qt][Qt] Qt  Qt
-   3O   [Qt] p  [Qt][Q] [Q]  Qt  Qt  Qt  t   t   +  [Qt][Qt] Qt  Qt
-   4A    lA  G   A   T   T   GA  GT  GT  GA  GT  GT  +   BA  G  GBA
-   4O    lA GBA  A   T   T   GA  GT  GT  GA  GT  GT  BA  +  GBA  G
-   6A    CA  PA  CA  C   C   A   T  tT   PA  P   P   C  CBA  +   BA
-   6O    CA PBA  CA  C   C   A  tT   T   PA  P   P  CBA  C   BA  +
-
-Within the matrix,
-     "+" identifies entries where 'from' and 'to' are the same.
-     "-" means the transformation is not supported.
-     "." means nothing is necessary (a tRNS chunk can just be ignored).
-     "t" means the transformation is obtained by png_set_tRNS.
-     "A" means the transformation is obtained by png_set_add_alpha().
-     "X" means the transformation is obtained by png_set_expand().
-     "1" means the transformation is obtained by
-         png_set_expand_gray_1_2_4_to_8() (and by png_set_expand()
-         if there is no transparency in the original or the final
-         format).
-     "C" means the transformation is obtained by png_set_gray_to_rgb().
-     "G" means the transformation is obtained by png_set_rgb_to_gray().
-     "P" means the transformation is obtained by
-         png_set_expand_palette_to_rgb().
-     "p" means the transformation is obtained by png_set_packing().
-     "Q" means the transformation is obtained by png_set_quantize().
-     "T" means the transformation is obtained by
-         png_set_tRNS_to_alpha().
-     "B" means the transformation is obtained by
-         png_set_background(), or png_strip_alpha().
-
-When an entry has multiple transforms listed all are required to cause the
-right overall transformation.  When two transforms are separated by a comma
-either will do the job.  When transforms are enclosed in [] the transform should
-do the job but this is currently unimplemented - a different format will result
-if the suggested transformations are used.
-
-In PNG files, the alpha channel in an image
-is the level of opacity.  If you need the alpha channel in an image to
-be the level of transparency instead of opacity, you can invert the
-alpha channel (or the tRNS chunk data) after it's read, so that 0 is
-fully opaque and 255 (in 8-bit or paletted images) or 65535 (in 16-bit
-images) is fully transparent, with
-
-    png_set_invert_alpha(png_ptr);
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit
-files.  This code expands to 1 pixel per byte without changing the
-values of the pixels:
-
-    if (bit_depth < 8)
-       png_set_packing(png_ptr);
-
-PNG files have possible bit depths of 1, 2, 4, 8, and 16.  All pixels
-stored in a PNG image have been "scaled" or "shifted" up to the next
-higher possible bit depth (e.g. from 5 bits/sample in the range [0,31]
-to 8 bits/sample in the range [0, 255]).  However, it is also possible
-to convert the PNG pixel data back to the original bit depth of the
-image.  This call reduces the pixels back down to the original bit depth:
-
-    png_color_8p sig_bit;
-
-    if (png_get_sBIT(png_ptr, info_ptr, &sig_bit))
-       png_set_shift(png_ptr, sig_bit);
-
-PNG files store 3-color pixels in red, green, blue order.  This code
-changes the storage of the pixels to blue, green, red:
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_bgr(png_ptr);
-
-PNG files store RGB pixels packed into 3 or 6 bytes. This code expands them
-into 4 or 8 bytes for windowing systems that need them in this format:
-
-    if (color_type == PNG_COLOR_TYPE_RGB)
-       png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
-
-where "filler" is the 8 or 16-bit number to fill with, and the location is
-either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
-you want the filler before the RGB or after.  This transformation
-does not affect images that already have full alpha channels.  To add an
-opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
-will generate RGBA pixels.
-
-Note that png_set_filler() does not change the color type.  If you want
-to do that, you can add a true alpha channel with
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-       color_type == PNG_COLOR_TYPE_GRAY)
-       png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
-
-where "filler" contains the alpha value to assign to each pixel.
-This function was added in libpng-1.2.7.
-
-If you are reading an image with an alpha channel, and you need the
-data as ARGB instead of the normal PNG format RGBA:
-
-    if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_swap_alpha(png_ptr);
-
-For some uses, you may want a grayscale image to be represented as
-RGB.  This code will do that conversion:
-
-    if (color_type == PNG_COLOR_TYPE_GRAY ||
-        color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-       png_set_gray_to_rgb(png_ptr);
-
-Conversely, you can convert an RGB or RGBA image to grayscale or grayscale
-with alpha.
-
-    if (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-       png_set_rgb_to_gray(png_ptr, error_action,
-          double red_weight, double green_weight);
-
-    error_action = 1: silently do the conversion
-
-    error_action = 2: issue a warning if the original
-                      image has any pixel where
-                      red != green or red != blue
-
-    error_action = 3: issue an error and abort the
-                      conversion if the original
-                      image has any pixel where
-                      red != green or red != blue
-
-    red_weight:       weight of red component
-
-    green_weight:     weight of green component
-                      If either weight is negative, default
-                      weights are used.
-
-In the corresponding fixed point API the red_weight and green_weight values are
-simply scaled by 100,000:
-
-    png_set_rgb_to_gray(png_ptr, error_action,
-       png_fixed_point red_weight,
-       png_fixed_point green_weight);
-
-If you have set error_action = 1 or 2, you can
-later check whether the image really was gray, after processing
-the image rows, with the png_get_rgb_to_gray_status(png_ptr) function.
-It will return a png_byte that is zero if the image was gray or
-1 if there were any non-gray pixels.  Background and sBIT data
-will be silently converted to grayscale, using the green channel
-data for sBIT, regardless of the error_action setting.
-
-The default values come from the PNG file cHRM chunk if present; otherwise, the
-defaults correspond to the ITU-R recommendation 709, and also the sRGB color
-space, as recommended in the Charles Poynton's Colour FAQ,
-<http://www.poynton.com/>, in section 9:
-
-   <http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html#RTFToC9>
-
-    Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
-
-Previous versions of this document, 1998 through 2002, recommended a slightly
-different formula:
-
-    Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
-
-Libpng uses an integer approximation:
-
-    Y = (6968 * R + 23434 * G + 2366 * B)/32768
-
-The calculation is done in a linear colorspace, if the image gamma
-can be determined.
-
-The png_set_background() function has been described already; it tells libpng to
-composite images with alpha or simple transparency against the supplied
-background color.  For compatibility with versions of libpng earlier than
-libpng-1.5.4 it is recommended that you call the function after reading the file
-header, even if you don't want to use the color in a bKGD chunk, if one exists.
-
-If the PNG file contains a bKGD chunk (PNG_INFO_bKGD valid),
-you may use this color, or supply another color more suitable for
-the current display (e.g., the background color from a web page).  You
-need to tell libpng how the color is represented, both the format of the
-component values in the color (the number of bits) and the gamma encoding of the
-color.  The function takes two arguments, background_gamma_mode and need_expand
-to convey this information; however, only two combinations are likely to be
-useful:
-
-    png_color_16 my_background;
-    png_color_16p image_background;
-
-    if (png_get_bKGD(png_ptr, info_ptr, &image_background))
-       png_set_background(png_ptr, image_background,
-           PNG_BACKGROUND_GAMMA_FILE, 1/*needs to be expanded*/, 1);
-    else
-       png_set_background(png_ptr, &my_background,
-           PNG_BACKGROUND_GAMMA_SCREEN, 0/*do not expand*/, 1);
-
-The second call was described above - my_background is in the format of the
-final, display, output produced by libpng.  Because you now know the format of
-the PNG it is possible to avoid the need to choose either 8-bit or 16-bit
-output and to retain palette images (the palette colors will be modified
-appropriately and the tRNS chunk removed.)  However, if you are doing this,
-take great care not to ask for transformations without checking first that
-they apply!
-
-In the first call the background color has the original bit depth and color type
-of the PNG file.  So, for palette images the color is supplied as a palette
-index and for low bit greyscale images the color is a reduced bit value in
-image_background->gray.
-
-If you didn't call png_set_gamma() before reading the file header, for example
-if you need your code to remain compatible with older versions of libpng prior
-to libpng-1.5.4, this is the place to call it.
-
-Do not call it if you called png_set_alpha_mode(); doing so will damage the
-settings put in place by png_set_alpha_mode().  (If png_set_alpha_mode() is
-supported then you can certainly do png_set_gamma() before reading the PNG
-header.)
-
-This API unconditionally sets the screen and file gamma values, so it will
-override the value in the PNG file unless it is called before the PNG file
-reading starts.  For this reason you must always call it with the PNG file
-value when you call it in this position:
-
-   if (png_get_gAMA(png_ptr, info_ptr, &file_gamma))
-      png_set_gamma(png_ptr, screen_gamma, file_gamma);
-
-   else
-      png_set_gamma(png_ptr, screen_gamma, 0.45455);
-
-If you need to reduce an RGB file to a paletted file, or if a paletted
-file has more entries then will fit on your screen, png_set_quantize()
-will do that.  Note that this is a simple match quantization that merely
-finds the closest color available.  This should work fairly well with
-optimized palettes, but fairly badly with linear color cubes.  If you
-pass a palette that is larger than maximum_colors, the file will
-reduce the number of colors in the palette so it will fit into
-maximum_colors.  If there is a histogram, libpng will use it to make
-more intelligent choices when reducing the palette.  If there is no
-histogram, it may not do as good a job.
-
-   if (color_type & PNG_COLOR_MASK_COLOR)
-   {
-      if (png_get_valid(png_ptr, info_ptr,
-          PNG_INFO_PLTE))
-      {
-         png_uint_16p histogram = NULL;
-
-         png_get_hIST(png_ptr, info_ptr,
-             &histogram);
-         png_set_quantize(png_ptr, palette, num_palette,
-            max_screen_colors, histogram, 1);
-      }
-
-      else
-      {
-         png_color std_color_cube[MAX_SCREEN_COLORS] =
-            { ... colors ... };
-
-         png_set_quantize(png_ptr, std_color_cube,
-            MAX_SCREEN_COLORS, MAX_SCREEN_COLORS,
-            NULL,0);
-      }
-   }
-
-PNG files describe monochrome as black being zero and white being one.
-The following code will reverse this (make black be one and white be
-zero):
-
-   if (bit_depth == 1 && color_type == PNG_COLOR_TYPE_GRAY)
-      png_set_invert_mono(png_ptr);
-
-This function can also be used to invert grayscale and gray-alpha images:
-
-   if (color_type == PNG_COLOR_TYPE_GRAY ||
-       color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      png_set_invert_mono(png_ptr);
-
-PNG files store 16-bit pixels in network byte order (big-endian,
-ie. most significant bits first).  This code changes the storage to the
-other way (little-endian, i.e. least significant bits first, the
-way PCs store them):
-
-    if (bit_depth == 16)
-       png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
-    if (bit_depth < 8)
-       png_set_packswap(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs.  This is done by setting a callback
-with
-
-    png_set_read_user_transform_fn(png_ptr,
-        read_transform_fn);
-
-You must supply the function
-
-    void read_transform_fn(png_structp png_ptr, png_row_infop
-        row_info, png_bytep data)
-
-See pngtest.c for a working example.  Your function will be called
-after all of the other transformations have been processed.  Take care with
-interlaced images if you do the interlace yourself - the width of the row is the
-width in 'row_info', not the overall image width.
-
-If supported, libpng provides two information routines that you can use to find
-where you are in processing the image:
-
-   png_get_current_pass_number(png_structp png_ptr);
-   png_get_current_row_number(png_structp png_ptr);
-
-Don't try using these outside a transform callback - firstly they are only
-supported if user transforms are supported, secondly they may well return
-unexpected results unless the row is actually being processed at the moment they
-are called.
-
-With interlaced
-images the value returned is the row in the input sub-image image.  Use
-PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
-find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
-
-The discussion of interlace handling above contains more information on how to
-use these values.
-
-You can also set up a pointer to a user structure for use by your
-callback function, and you can inform libpng that your transform
-function will change the number of channels or bit depth with the
-function
-
-    png_set_user_transform_info(png_ptr, user_ptr,
-        user_depth, user_channels);
-
-The user's application, not libpng, is responsible for allocating and
-freeing any memory required for the user structure.
-
-You can retrieve the pointer via the function
-png_get_user_transform_ptr().  For example:
-
-    voidp read_user_transform_ptr =
-        png_get_user_transform_ptr(png_ptr);
-
-The last thing to handle is interlacing; this is covered in detail below,
-but you must call the function here if you want libpng to handle expansion
-of the interlaced image.
-
-    number_of_passes = png_set_interlace_handling(png_ptr);
-
-After setting the transformations, libpng can update your png_info
-structure to reflect any transformations you've requested with this
-call.
-
-    png_read_update_info(png_ptr, info_ptr);
-
-This is most useful to update the info structure's rowbytes
-field so you can use it to allocate your image memory.  This function
-will also update your palette with the correct screen_gamma and
-background if these have been given with the calls above.  You may
-only call png_read_update_info() once with a particular info_ptr.
-
-After you call png_read_update_info(), you can allocate any
-memory you need to hold the image.  The row data is simply
-raw byte data for all forms of images.  As the actual allocation
-varies among applications, no example will be given.  If you
-are allocating one large chunk, you will need to build an
-array of pointers to each row, as it will be needed for some
-of the functions below.
-
-Remember: Before you call png_read_update_info(), the png_get_*()
-functions return the values corresponding to the original PNG image.
-After you call png_read_update_info the values refer to the image
-that libpng will output.  Consequently you must call all the png_set_
-functions before you call png_read_update_info().  This is particularly
-important for png_set_interlace_handling() - if you are going to call
-png_read_update_info() you must call png_set_interlace_handling() before
-it unless you want to receive interlaced output.
-
-.SS Reading image data
-
-After you've allocated memory, you can read the image data.
-The simplest way to do this is in one function call.  If you are
-allocating enough memory to hold the whole image, you can just
-call png_read_image() and libpng will read in all the image data
-and put it in the memory area supplied.  You will need to pass in
-an array of pointers to each row.
-
-This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() (unless you call
-png_read_update_info()) or call this function multiple times, or any
-of that other stuff necessary with png_read_rows().
-
-   png_read_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
-   png_bytep row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to read in the whole image at once, you can
-use png_read_rows() instead.  If there is no interlacing (check
-interlace_type == PNG_INTERLACE_NONE), this is simple:
-
-    png_read_rows(png_ptr, row_pointers, NULL,
-        number_of_rows);
-
-where row_pointers is the same as in the png_read_image() call.
-
-If you are doing this just one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
-    png_bytep row_pointer = row;
-    png_read_row(png_ptr, row_pointer, NULL);
-
-If the file is interlaced (interlace_type != 0 in the IHDR chunk), things
-get somewhat harder.  The only current (PNG Specification version 1.2)
-interlacing type for PNG is (interlace_type == PNG_INTERLACE_ADAM7);
-a somewhat complicated 2D interlace scheme, known as Adam7, that
-breaks down an image into seven smaller images of varying size, based
-on an 8x8 grid.  This number is defined (from libpng 1.5) as
-PNG_INTERLACE_ADAM7_PASSES in png.h
-
-libpng can fill out those images or it can give them to you "as is".
-It is almost always better to have libpng handle the interlacing for you.
-If you want the images filled out, there are two ways to do that.  The one
-mentioned in the PNG specification is to expand each pixel to cover
-those pixels that have not been read yet (the "rectangle" method).
-This results in a blocky image for the first pass, which gradually
-smooths out as more pixels are read.  The other method is the "sparkle"
-method, where pixels are drawn only in their final locations, with the
-rest of the image remaining whatever colors they were initialized to
-before the start of the read.  The first method usually looks better,
-but tends to be slower, as there are more pixels to put in the rows.
-
-If, as is likely, you want libpng to expand the images, call this before
-calling png_start_read_image() or png_read_update_info():
-
-    if (interlace_type == PNG_INTERLACE_ADAM7)
-       number_of_passes
-           = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed.  Currently, this is seven,
-but may change if another interlace type is added.  This function can be
-called even if the file is not interlaced, where it will return one pass.
-You then need to read the whole image 'number_of_passes' times.  Each time
-will distribute the pixels from the current pass to the correct place in
-the output image, so you need to supply the same rows to png_read_rows in
-each pass.
-
-If you are not going to display the image after each pass, but are
-going to wait until the entire image is read in, use the sparkle
-effect.  This effect is faster and the end result of either method
-is exactly the same.  If you are planning on displaying the image
-after each pass, the "rectangle" effect is generally considered the
-better looking one.
-
-If you only want the "sparkle" effect, just call png_read_rows() as
-normal, with the third parameter NULL.  Make sure you make pass over
-the image number_of_passes times, and you don't change the data in the
-rows between calls.  You can change the locations of the data, just
-not the data.  Each pass only writes the pixels appropriate for that
-pass, and assumes the data from previous passes is still valid.
-
-    png_read_rows(png_ptr, row_pointers, NULL,
-        number_of_rows);
-
-If you only want the first effect (the rectangles), do the same as
-before except pass the row buffer in the third parameter, and leave
-the second parameter NULL.
-
-    png_read_rows(png_ptr, NULL, row_pointers,
-        number_of_rows);
-
-If you don't want libpng to handle the interlacing details, just call
-png_read_rows() PNG_INTERLACE_ADAM7_PASSES times to read in all the images.
-Each of the images is a valid image by itself; however, you will almost
-certainly need to distribute the pixels from each sub-image to the
-correct place.  This is where everything gets very tricky.
-
-If you want to retrieve the separate images you must pass the correct
-number of rows to each successive call of png_read_rows().  The calculation
-gets pretty complicated for small images, where some sub-images may
-not even exist because either their width or height ends up zero.
-libpng provides two macros to help you in 1.5 and later versions:
-
-   png_uint_32 width = PNG_PASS_COLS(image_width, pass_number);
-   png_uint_32 height = PNG_PASS_ROWS(image_height, pass_number);
-
-Respectively these tell you the width and height of the sub-image
-corresponding to the numbered pass.  'pass' is in in the range 0 to 6 -
-this can be confusing because the specification refers to the same passes
-as 1 to 7!  Be careful, you must check both the width and height before
-calling png_read_rows() and not call it for that pass if either is zero.
-
-You can, of course, read each sub-image row by row.  If you want to
-produce optimal code to make a pixel-by-pixel transformation of an
-interlaced image this is the best approach; read each row of each pass,
-transform it, and write it out to a new interlaced image.
-
-If you want to de-interlace the image yourself libpng provides further
-macros to help that tell you where to place the pixels in the output image.
-Because the interlacing scheme is rectangular - sub-image pixels are always
-arranged on a rectangular grid - all you need to know for each pass is the
-starting column and row in the output image of the first pixel plus the
-spacing between each pixel.  As of libpng 1.5 there are four macros to
-retrieve this information:
-
-   png_uint_32 x = PNG_PASS_START_COL(pass);
-   png_uint_32 y = PNG_PASS_START_ROW(pass);
-   png_uint_32 xStep = 1U << PNG_PASS_COL_SHIFT(pass);
-   png_uint_32 yStep = 1U << PNG_PASS_ROW_SHIFT(pass);
-
-These allow you to write the obvious loop:
-
-   png_uint_32 input_y = 0;
-   png_uint_32 output_y = PNG_PASS_START_ROW(pass);
-
-   while (output_y < output_image_height)
-   {
-      png_uint_32 input_x = 0;
-      png_uint_32 output_x = PNG_PASS_START_COL(pass);
-
-      while (output_x < output_image_width)
-      {
-         image[output_y][output_x] =
-             subimage[pass][input_y][input_x++];
-
-         output_x += xStep;
-      }
-
-      ++input_y;
-      output_y += yStep;
-   }
-
-Notice that the steps between successive output rows and columns are
-returned as shifts.  This is possible because the pixels in the subimages
-are always a power of 2 apart - 1, 2, 4 or 8 pixels - in the original
-image.  In practice you may need to directly calculate the output coordinate
-given an input coordinate.  libpng provides two further macros for this
-purpose:
-
-   png_uint_32 output_x = PNG_COL_FROM_PASS_COL(input_x, pass);
-   png_uint_32 output_y = PNG_ROW_FROM_PASS_ROW(input_y, pass);
-
-Finally a pair of macros are provided to tell you if a particular image
-row or column appears in a given pass:
-
-   int col_in_pass = PNG_COL_IN_INTERLACE_PASS(output_x, pass);
-   int row_in_pass = PNG_ROW_IN_INTERLACE_PASS(output_y, pass);
-
-Bear in mind that you will probably also need to check the width and height
-of the pass in addition to the above to be sure the pass even exists!
-
-With any luck you are convinced by now that you don't want to do your own
-interlace handling.  In reality normally the only good reason for doing this
-is if you are processing PNG files on a pixel-by-pixel basis and don't want
-to load the whole file into memory when it is interlaced.
-
-libpng includes a test program, pngvalid, that illustrates reading and
-writing of interlaced images.  If you can't get interlacing to work in your
-code and don't want to leave it to libpng (the recommended approach), see
-how pngvalid.c does it.
-
-.SS Finishing a sequential read
-
-After you are finished reading the image through the
-low-level interface, you can finish reading the file.
-
-If you want to use a different crc action for handling CRC errors in
-chunks after the image data, you can call png_set_crc_action()
-again at this point.
-
-If you are interested in comments or time, which may be stored either
-before or after the image data, you should pass the separate png_info
-struct if you want to keep the comments from before and after the image
-separate.
-
-    png_infop end_info = png_create_info_struct(png_ptr);
-
-    if (!end_info)
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-   png_read_end(png_ptr, end_info);
-
-If you are not interested, you should still call png_read_end()
-but you can pass NULL, avoiding the need to create an end_info structure.
-If you do this, libpng will not process any chunks after IDAT other than
-skipping over them and perhaps (depending on whether you have called
-png_set_crc_action) checking their CRCs while looking for the IEND chunk.
-
-   png_read_end(png_ptr, (png_infop)NULL);
-
-If you don't call png_read_end(), then your file pointer will be
-left pointing to the first chunk after the last IDAT, which is probably
-not what you want if you expect to read something beyond the end of
-the PNG datastream.
-
-When you are done, you can free all memory allocated by libpng like this:
-
-   png_destroy_read_struct(&png_ptr, &info_ptr,
-       &end_info);
-
-or, if you didn't create an end_info structure,
-
-   png_destroy_read_struct(&png_ptr, &info_ptr,
-       (png_infopp)NULL);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
-    png_free_data(png_ptr, info_ptr, mask, seq)
-
-    mask - identifies data to be freed, a mask
-           containing the bitwise OR of one or
-           more of
-             PNG_FREE_PLTE, PNG_FREE_TRNS,
-             PNG_FREE_HIST, PNG_FREE_ICCP,
-             PNG_FREE_PCAL, PNG_FREE_ROWS,
-             PNG_FREE_SCAL, PNG_FREE_SPLT,
-             PNG_FREE_TEXT, PNG_FREE_UNKN,
-           or simply PNG_FREE_ALL
-
-    seq  - sequence number of item to be freed
-           (\-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user and not by libpng,  and will in those cases do nothing.
-The "seq" parameter is ignored if only one item of the selected data
-type, such as PLTE, is allowed.  If "seq" is not \-1, and multiple items
-are allowed for the data type identified in the mask, such as text or
-sPLT, only the n'th item in the structure is freed, where n is "seq".
-
-The default behavior is only to free data that was allocated internally
-by libpng.  This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_calloc() and passed in via a png_set_*() function, with
-
-    png_data_freer(png_ptr, info_ptr, freer, mask)
-
-    freer  - one of
-               PNG_DESTROY_WILL_FREE_DATA
-               PNG_SET_WILL_FREE_DATA
-               PNG_USER_WILL_FREE_DATA
-
-    mask   - which data elements are affected
-             same choices as in png_free_data()
-
-This function only affects data that has already been allocated.
-You can call this function after reading the PNG data but before calling
-any png_set_*() functions, to control whether the user or the png_set_*()
-function is responsible for freeing any existing data that might be present,
-and again after the png_set_*() functions to control whether the user
-or png_destroy_*() is supposed to free the data.  When the user assumes
-responsibility for libpng-allocated data, the application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_calloc() to allocate it.
-
-If you allocated your row_pointers in a single block, as suggested above in
-the description of the high level read interface, you must not transfer
-responsibility for freeing it to the png_set_rows or png_read_destroy function,
-because they would also try to free the individual row_pointers[i].
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key.  Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-
-The png_free_data() function will turn off the "valid" flag for anything
-it frees.  If you need to turn the flag off for a chunk that was freed by
-your application instead of by libpng, you can use
-
-    png_set_invalid(png_ptr, info_ptr, mask);
-
-    mask - identifies the chunks to be made invalid,
-           containing the bitwise OR of one or
-           more of
-             PNG_INFO_gAMA, PNG_INFO_sBIT,
-             PNG_INFO_cHRM, PNG_INFO_PLTE,
-             PNG_INFO_tRNS, PNG_INFO_bKGD,
-             PNG_INFO_hIST, PNG_INFO_pHYs,
-             PNG_INFO_oFFs, PNG_INFO_tIME,
-             PNG_INFO_pCAL, PNG_INFO_sRGB,
-             PNG_INFO_iCCP, PNG_INFO_sPLT,
-             PNG_INFO_sCAL, PNG_INFO_IDAT
-
-For a more compact example of reading a PNG image, see the file example.c.
-
-.SS Reading PNG files progressively
-
-The progressive reader is slightly different from the non-progressive
-reader.  Instead of calling png_read_info(), png_read_rows(), and
-png_read_end(), you make one call to png_process_data(), which calls
-callbacks when it has the info, a row, or the end of the image.  You
-set up these callbacks with png_set_progressive_read_fn().  You don't
-have to worry about the input/output functions of libpng, as you are
-giving the library the data directly in png_process_data().  I will
-assume that you have read the section on reading PNG files above,
-so I will only highlight the differences (although I will show
-all of the code).
-
-png_structp png_ptr;
-png_infop info_ptr;
-
- /*  An example code fragment of how you would
-     initialize the progressive reader in your
-     application. */
- int
- initialize_png_reader()
- {
-    png_ptr = png_create_read_struct
-        (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-         user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-        return (ERROR);
-
-    info_ptr = png_create_info_struct(png_ptr);
-
-    if (!info_ptr)
-    {
-       png_destroy_read_struct(&png_ptr,
-          (png_infopp)NULL, (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-          (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    /* This one's new.  You can provide functions
-       to be called when the header info is valid,
-       when each row is completed, and when the image
-       is finished.  If you aren't using all functions,
-       you can specify NULL parameters.  Even when all
-       three functions are NULL, you need to call
-       png_set_progressive_read_fn().  You can use
-       any struct as the user_ptr (cast to a void pointer
-       for the function call), and retrieve the pointer
-       from inside the callbacks using the function
-
-          png_get_progressive_ptr(png_ptr);
-
-       which will return a void pointer, which you have
-       to cast appropriately.
-     */
-    png_set_progressive_read_fn(png_ptr, (void *)user_ptr,
-        info_callback, row_callback, end_callback);
-
-    return 0;
- }
-
- /* A code fragment that you call as you receive blocks
-   of data */
- int
- process_data(png_bytep buffer, png_uint_32 length)
- {
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-       png_destroy_read_struct(&png_ptr, &info_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-    /* This one's new also.  Simply give it a chunk
-       of data from the file stream (in order, of
-       course).  On machines with segmented memory
-       models machines, don't give it any more than
-       64K.  The library seems to run fine with sizes
-       of 4K. Although you can give it much less if
-       necessary (I assume you can give it chunks of
-       1 byte, I haven't tried less then 256 bytes
-       yet).  When this function returns, you may
-       want to display any rows that were generated
-       in the row callback if you don't already do
-       so there.
-     */
-    png_process_data(png_ptr, info_ptr, buffer, length);
-
-    /* At this point you can call png_process_data_skip if
-       you want to handle data the library will skip yourself;
-       it simply returns the number of bytes to skip (and stops
-       libpng skipping that number of bytes on the next
-       png_process_data call).
-    return 0;
- }
-
- /* This function is called (as set by
-    png_set_progressive_read_fn() above) when enough data
-    has been supplied so all of the header has been
-    read.
- */
- void
- info_callback(png_structp png_ptr, png_infop info)
- {
-    /* Do any setup here, including setting any of
-       the transformations mentioned in the Reading
-       PNG files section.  For now, you _must_ call
-       either png_start_read_image() or
-       png_read_update_info() after all the
-       transformations are set (even if you don't set
-       any).  You may start getting rows before
-       png_process_data() returns, so this is your
-       last chance to prepare for that.
-
-       This is where you turn on interlace handling,
-       assuming you don't want to do it yourself.
-
-       If you need to you can stop the processing of
-       your original input data at this point by calling
-       png_process_data_pause.  This returns the number
-       of unprocessed bytes from the last png_process_data
-       call - it is up to you to ensure that the next call
-       sees these bytes again.  If you don't want to bother
-       with this you can get libpng to cache the unread
-       bytes by setting the 'save' parameter (see png.h) but
-       then libpng will have to copy the data internally.
-     */
- }
-
- /* This function is called when each row of image
-    data is complete */
- void
- row_callback(png_structp png_ptr, png_bytep new_row,
-    png_uint_32 row_num, int pass)
- {
-    /* If the image is interlaced, and you turned
-       on the interlace handler, this function will
-       be called for every row in every pass.  Some
-       of these rows will not be changed from the
-       previous pass.  When the row is not changed,
-       the new_row variable will be NULL.  The rows
-       and passes are called in order, so you don't
-       really need the row_num and pass, but I'm
-       supplying them because it may make your life
-       easier.
-
-       If you did not turn on interlace handling then
-       the callback is called for each row of each
-       sub-image when the image is interlaced.  In this
-       case 'row_num' is the row in the sub-image, not
-       the row in the output image as it is in all other
-       cases.
-
-       For the non-NULL rows of interlaced images when
-       you have switched on libpng interlace handling,
-       you must call png_progressive_combine_row()
-       passing in the row and the old row.  You can
-       call this function for NULL rows (it will just
-       return) and for non-interlaced images (it just
-       does the memcpy for you) if it will make the
-       code easier.  Thus, you can just do this for
-       all cases if you switch on interlace handling;
-     */
-
-        png_progressive_combine_row(png_ptr, old_row,
-          new_row);
-
-    /* where old_row is what was displayed
-       previously for the row.  Note that the first
-       pass (pass == 0, really) will completely cover
-       the old row, so the rows do not have to be
-       initialized.  After the first pass (and only
-       for interlaced images), you will have to pass
-       the current row, and the function will combine
-       the old row and the new row.
-
-       You can also call png_process_data_pause in this
-       callback - see above.
-    */
- }
-
- void
- end_callback(png_structp png_ptr, png_infop info)
- {
-    /* This function is called after the whole image
-       has been read, including any chunks after the
-       image (up to and including the IEND).  You
-       will usually have the same info chunk as you
-       had in the header, although some data may have
-       been added to the comments and time fields.
-
-       Most people won't do much here, perhaps setting
-       a flag that marks the image as finished.
-     */
- }
-
-
-
-.SH IV. Writing
-
-Much of this is very similar to reading.  However, everything of
-importance is repeated here, so you won't have to constantly look
-back up in the reading section to understand writing.
-
-.SS Setup
-
-You will want to do the I/O initialization before you get into libpng,
-so if it doesn't work, you don't have anything to undo. If you are not
-using the standard I/O functions, you will need to replace them with
-custom writing functions.  See the discussion under Customizing libpng.
-
-    FILE *fp = fopen(file_name, "wb");
-
-    if (!fp)
-       return (ERROR);
-
-Next, png_struct and png_info need to be allocated and initialized.
-As these can be both relatively large, you may not want to store these
-on the stack, unless you have stack space to spare.  Of course, you
-will want to check if they return NULL.  If you are also reading,
-you won't want to name your read structure and your write structure
-both "png_ptr"; you can call them anything you like, such as
-"read_ptr" and "write_ptr".  Look at pngtest.c, for example.
-
-    png_structp png_ptr = png_create_write_struct
-       (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn);
-
-    if (!png_ptr)
-       return (ERROR);
-
-    png_infop info_ptr = png_create_info_struct(png_ptr);
-    if (!info_ptr)
-    {
-       png_destroy_write_struct(&png_ptr,
-           (png_infopp)NULL);
-       return (ERROR);
-    }
-
-If you want to use your own memory allocation routines,
-define PNG_USER_MEM_SUPPORTED and use
-png_create_write_struct_2() instead of png_create_write_struct():
-
-    png_structp png_ptr = png_create_write_struct_2
-       (PNG_LIBPNG_VER_STRING, (png_voidp)user_error_ptr,
-        user_error_fn, user_warning_fn, (png_voidp)
-        user_mem_ptr, user_malloc_fn, user_free_fn);
-
-After you have these structures, you will need to set up the
-error handling.  When libpng encounters an error, it expects to
-longjmp() back to your routine.  Therefore, you will need to call
-setjmp() and pass the png_jmpbuf(png_ptr).  If you
-write the file from different routines, you will need to update
-the png_jmpbuf(png_ptr) every time you enter a new routine that will
-call a png_*() function.  See your documentation of setjmp/longjmp
-for your compiler for more information on setjmp/longjmp.  See
-the discussion on libpng error handling in the Customizing Libpng
-section below for more information on the libpng error handling.
-
-    if (setjmp(png_jmpbuf(png_ptr)))
-    {
-    png_destroy_write_struct(&png_ptr, &info_ptr);
-       fclose(fp);
-       return (ERROR);
-    }
-    ...
-    return;
-
-If you would rather avoid the complexity of setjmp/longjmp issues,
-you can compile libpng with PNG_NO_SETJMP, in which case
-errors will result in a call to PNG_ABORT() which defaults to abort().
-
-You can #define PNG_ABORT() to a function that does something
-more useful than abort(), as long as your function does not
-return.
-
-Checking for invalid palette index on write was added at libpng
-1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
-a benign error.  This is enabled by default because this condition is an
-error according to the PNG specification, Clause 11.3.2, but the error can
-be ignored in each png_ptr with
-
-   png_set_check_for_invalid_index(png_ptr, 0);
-
-If the error is ignored, or if png_benign_error() treats it as a warning,
-any invalid pixels are written as-is by the encoder, resulting in an
-invalid PNG datastream as output.  In this case the application is
-responsible for ensuring that the pixel indexes are in range when it writes
-a PLTE chunk with fewer entries than the bit depth would allow.
-
-Now you need to set up the output code.  The default for libpng is to
-use the C function fwrite().  If you use this, you will need to pass a
-valid FILE * in the function png_init_io().  Be sure that the file is
-opened in binary mode.  Again, if you wish to handle writing data in
-another way, see the discussion on libpng I/O handling in the Customizing
-Libpng section below.
-
-    png_init_io(png_ptr, fp);
-
-If you are embedding your PNG into a datastream such as MNG, and don't
-want libpng to write the 8-byte signature, or if you have already
-written the signature in your application, use
-
-    png_set_sig_bytes(png_ptr, 8);
-
-to inform libpng that it should not write a signature.
-
-.SS Write callbacks
-
-At this point, you can set up a callback function that will be
-called after each row has been written, which you can use to control
-a progress meter or the like.  It's demonstrated in pngtest.c.
-You must supply a function
-
-    void write_row_callback(png_structp png_ptr, png_uint_32 row,
-       int pass);
-    {
-      /* put your code here */
-    }
-
-(You can give it another name that you like instead of "write_row_callback")
-
-To inform libpng about your function, use
-
-    png_set_write_status_fn(png_ptr, write_row_callback);
-
-When this function is called the row has already been completely processed and
-it has also been written out.  The 'row' and 'pass' refer to the next row to be
-handled.  For the
-non-interlaced case the row that was just handled is simply one less than the
-passed in row number, and pass will always be 0.  For the interlaced case the
-same applies unless the row value is 0, in which case the row just handled was
-the last one from one of the preceding passes.  Because interlacing may skip a
-pass you cannot be sure that the preceding pass is just 'pass\-1', if you really
-need to know what the last pass is record (row,pass) from the callback and use
-the last recorded value each time.
-
-As with the user transform you can find the output row using the
-PNG_ROW_FROM_PASS_ROW macro.
-
-You now have the option of modifying how the compression library will
-run.  The following functions are mainly for testing, but may be useful
-in some cases, like if you need to write PNG files extremely fast and
-are willing to give up some compression, or if you want to get the
-maximum possible compression at the expense of slower writing.  If you
-have no special needs in this area, let the library do what it wants by
-not calling this function at all, as it has been tuned to deliver a good
-speed/compression ratio. The second parameter to png_set_filter() is
-the filter method, for which the only valid values are 0 (as of the
-July 1999 PNG specification, version 1.2) or 64 (if you are writing
-a PNG datastream that is to be embedded in a MNG datastream).  The third
-parameter is a flag that indicates which filter type(s) are to be tested
-for each scanline.  See the PNG specification for details on the specific
-filter types.
-
-
-    /* turn on or off filtering, and/or choose
-       specific filters.  You can use either a single
-       PNG_FILTER_VALUE_NAME or the bitwise OR of one
-       or more PNG_FILTER_NAME masks.
-     */
-    png_set_filter(png_ptr, 0,
-       PNG_FILTER_NONE  | PNG_FILTER_VALUE_NONE |
-       PNG_FILTER_SUB   | PNG_FILTER_VALUE_SUB  |
-       PNG_FILTER_UP    | PNG_FILTER_VALUE_UP   |
-       PNG_FILTER_AVG   | PNG_FILTER_VALUE_AVG  |
-       PNG_FILTER_PAETH | PNG_FILTER_VALUE_PAETH|
-       PNG_ALL_FILTERS);
-
-If an application wants to start and stop using particular filters during
-compression, it should start out with all of the filters (to ensure that
-the previous row of pixels will be stored in case it's needed later),
-and then add and remove them after the start of compression.
-
-If you are writing a PNG datastream that is to be embedded in a MNG
-datastream, the second parameter can be either 0 or 64.
-
-The png_set_compression_*() functions interface to the zlib compression
-library, and should mostly be ignored unless you really know what you are
-doing.  The only generally useful call is png_set_compression_level()
-which changes how much time zlib spends on trying to compress the image
-data.  See the Compression Library (zlib.h and algorithm.txt, distributed
-with zlib) for details on the compression levels.
-
-    #include zlib.h
-
-    /* Set the zlib compression level */
-    png_set_compression_level(png_ptr,
-        Z_BEST_COMPRESSION);
-
-    /* Set other zlib parameters for compressing IDAT */
-    png_set_compression_mem_level(png_ptr, 8);
-    png_set_compression_strategy(png_ptr,
-        Z_DEFAULT_STRATEGY);
-    png_set_compression_window_bits(png_ptr, 15);
-    png_set_compression_method(png_ptr, 8);
-    png_set_compression_buffer_size(png_ptr, 8192)
-
-    /* Set zlib parameters for text compression
-     * If you don't call these, the parameters
-     * fall back on those defined for IDAT chunks
-     */
-    png_set_text_compression_mem_level(png_ptr, 8);
-    png_set_text_compression_strategy(png_ptr,
-        Z_DEFAULT_STRATEGY);
-    png_set_text_compression_window_bits(png_ptr, 15);
-    png_set_text_compression_method(png_ptr, 8);
-
-.SS Setting the contents of info for output
-
-You now need to fill in the png_info structure with all the data you
-wish to write before the actual image.  Note that the only thing you
-are allowed to write after the image is the text chunks and the time
-chunk (as of PNG Specification 1.2, anyway).  See png_write_end() and
-the latest PNG specification for more information on that.  If you
-wish to write them before the image, fill them in now, and flag that
-data as being valid.  If you want to wait until after the data, don't
-fill them until png_write_end().  For all the fields in png_info and
-their data types, see png.h.  For explanations of what the fields
-contain, see the PNG specification.
-
-Some of the more important parts of the png_info are:
-
-    png_set_IHDR(png_ptr, info_ptr, width, height,
-       bit_depth, color_type, interlace_type,
-       compression_type, filter_method)
-
-    width          - holds the width of the image
-                     in pixels (up to 2^31).
-
-    height         - holds the height of the image
-                     in pixels (up to 2^31).
-
-    bit_depth      - holds the bit depth of one of the
-                     image channels.
-                     (valid values are 1, 2, 4, 8, 16
-                     and depend also on the
-                     color_type.  See also significant
-                     bits (sBIT) below).
-
-    color_type     - describes which color/alpha
-                     channels are present.
-                     PNG_COLOR_TYPE_GRAY
-                        (bit depths 1, 2, 4, 8, 16)
-                     PNG_COLOR_TYPE_GRAY_ALPHA
-                        (bit depths 8, 16)
-                     PNG_COLOR_TYPE_PALETTE
-                        (bit depths 1, 2, 4, 8)
-                     PNG_COLOR_TYPE_RGB
-                        (bit_depths 8, 16)
-                     PNG_COLOR_TYPE_RGB_ALPHA
-                        (bit_depths 8, 16)
-
-                     PNG_COLOR_MASK_PALETTE
-                     PNG_COLOR_MASK_COLOR
-                     PNG_COLOR_MASK_ALPHA
-
-    interlace_type - PNG_INTERLACE_NONE or
-                     PNG_INTERLACE_ADAM7
-
-    compression_type - (must be
-                     PNG_COMPRESSION_TYPE_DEFAULT)
-
-    filter_method  - (must be PNG_FILTER_TYPE_DEFAULT
-                     or, if you are writing a PNG to
-                     be embedded in a MNG datastream,
-                     can also be
-                     PNG_INTRAPIXEL_DIFFERENCING)
-
-If you call png_set_IHDR(), the call must appear before any of the
-other png_set_*() functions, because they might require access to some of
-the IHDR settings.  The remaining png_set_*() functions can be called
-in any order.
-
-If you wish, you can reset the compression_type, interlace_type, or
-filter_method later by calling png_set_IHDR() again; if you do this, the
-width, height, bit_depth, and color_type must be the same in each call.
-
-    png_set_PLTE(png_ptr, info_ptr, palette,
-       num_palette);
-
-    palette        - the palette for the file
-                     (array of png_color)
-    num_palette    - number of entries in the palette
-
-    png_set_gAMA(png_ptr, info_ptr, file_gamma);
-    png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
-
-    file_gamma     - the gamma at which the image was
-                     created (PNG_INFO_gAMA)
-
-    int_file_gamma - 100,000 times the gamma at which
-                     the image was created
-
-    png_set_cHRM(png_ptr, info_ptr,  white_x, white_y, red_x, red_y,
-                     green_x, green_y, blue_x, blue_y)
-    png_set_cHRM_XYZ(png_ptr, info_ptr, red_X, red_Y, red_Z, green_X,
-                     green_Y, green_Z, blue_X, blue_Y, blue_Z)
-    png_set_cHRM_fixed(png_ptr, info_ptr, int_white_x, int_white_y,
-                     int_red_x, int_red_y, int_green_x, int_green_y,
-                     int_blue_x, int_blue_y)
-    png_set_cHRM_XYZ_fixed(png_ptr, info_ptr, int_red_X, int_red_Y,
-                     int_red_Z, int_green_X, int_green_Y, int_green_Z,
-                     int_blue_X, int_blue_Y, int_blue_Z)
-
-    {white,red,green,blue}_{x,y}
-                     A color space encoding specified using the chromaticities
-                     of the end points and the white point.
-
-    {red,green,blue}_{X,Y,Z}
-                     A color space encoding specified using the encoding end
-                     points - the CIE tristimulus specification of the intended
-                     color of the red, green and blue channels in the PNG RGB
-                     data.  The white point is simply the sum of the three end
-                     points.
-
-    png_set_sRGB(png_ptr, info_ptr, srgb_intent);
-
-    srgb_intent    - the rendering intent
-                     (PNG_INFO_sRGB) The presence of
-                     the sRGB chunk means that the pixel
-                     data is in the sRGB color space.
-                     This chunk also implies specific
-                     values of gAMA and cHRM.  Rendering
-                     intent is the CSS-1 property that
-                     has been defined by the International
-                     Color Consortium
-                     (http://www.color.org).
-                     It can be one of
-                     PNG_sRGB_INTENT_SATURATION,
-                     PNG_sRGB_INTENT_PERCEPTUAL,
-                     PNG_sRGB_INTENT_ABSOLUTE, or
-                     PNG_sRGB_INTENT_RELATIVE.
-
-
-    png_set_sRGB_gAMA_and_cHRM(png_ptr, info_ptr,
-       srgb_intent);
-
-    srgb_intent    - the rendering intent
-                     (PNG_INFO_sRGB) The presence of the
-                     sRGB chunk means that the pixel
-                     data is in the sRGB color space.
-                     This function also causes gAMA and
-                     cHRM chunks with the specific values
-                     that are consistent with sRGB to be
-                     written.
-
-    png_set_iCCP(png_ptr, info_ptr, name, compression_type,
-                       profile, proflen);
-
-    name             - The profile name.
-
-    compression_type - The compression type; always
-                       PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
-                       You may give NULL to this argument to
-                       ignore it.
-
-    profile          - International Color Consortium color
-                       profile data. May contain NULs.
-
-    proflen          - length of profile data in bytes.
-
-    png_set_sBIT(png_ptr, info_ptr, sig_bit);
-
-    sig_bit        - the number of significant bits for
-                     (PNG_INFO_sBIT) each of the gray, red,
-                     green, and blue channels, whichever are
-                     appropriate for the given color type
-                     (png_color_16)
-
-    png_set_tRNS(png_ptr, info_ptr, trans_alpha,
-       num_trans, trans_color);
-
-    trans_alpha    - array of alpha (transparency)
-                     entries for palette (PNG_INFO_tRNS)
-
-    num_trans      - number of transparent entries
-                     (PNG_INFO_tRNS)
-
-    trans_color    - graylevel or color sample values
-                     (in order red, green, blue) of the
-                     single transparent color for
-                     non-paletted images (PNG_INFO_tRNS)
-
-    png_set_hIST(png_ptr, info_ptr, hist);
-
-    hist           - histogram of palette (array of
-                     png_uint_16) (PNG_INFO_hIST)
-
-    png_set_tIME(png_ptr, info_ptr, mod_time);
-
-    mod_time       - time image was last modified
-                     (PNG_VALID_tIME)
-
-    png_set_bKGD(png_ptr, info_ptr, background);
-
-    background     - background color (of type
-                     png_color_16p) (PNG_VALID_bKGD)
-
-    png_set_text(png_ptr, info_ptr, text_ptr, num_text);
-
-    text_ptr       - array of png_text holding image
-                     comments
-
-    text_ptr[i].compression - type of compression used
-                 on "text" PNG_TEXT_COMPRESSION_NONE
-                           PNG_TEXT_COMPRESSION_zTXt
-                           PNG_ITXT_COMPRESSION_NONE
-                           PNG_ITXT_COMPRESSION_zTXt
-    text_ptr[i].key   - keyword for comment.  Must contain
-                 1-79 characters.
-    text_ptr[i].text  - text comments for current
-                         keyword.  Can be NULL or empty.
-    text_ptr[i].text_length - length of text string,
-                 after decompression, 0 for iTXt
-    text_ptr[i].itxt_length - length of itxt string,
-                 after decompression, 0 for tEXt/zTXt
-    text_ptr[i].lang  - language of comment (NULL or
-                         empty for unknown).
-    text_ptr[i].translated_keyword  - keyword in UTF-8 (NULL
-                         or empty for unknown).
-
-    Note that the itxt_length, lang, and lang_key
-    members of the text_ptr structure only exist when the
-    library is built with iTXt chunk support.  Prior to
-    libpng-1.4.0 the library was built by default without
-    iTXt support. Also note that when iTXt is supported,
-    they contain NULL pointers when the "compression"
-    field contains PNG_TEXT_COMPRESSION_NONE or
-    PNG_TEXT_COMPRESSION_zTXt.
-
-    num_text       - number of comments
-
-    png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
-       num_spalettes);
-
-    palette_ptr    - array of png_sPLT_struct structures
-                     to be added to the list of palettes
-                     in the info structure.
-    num_spalettes  - number of palette structures to be
-                     added.
-
-    png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
-        unit_type);
-
-    offset_x  - positive offset from the left
-                     edge of the screen
-
-    offset_y  - positive offset from the top
-                     edge of the screen
-
-    unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
-
-    png_set_pHYs(png_ptr, info_ptr, res_x, res_y,
-        unit_type);
-
-    res_x       - pixels/unit physical resolution
-                  in x direction
-
-    res_y       - pixels/unit physical resolution
-                  in y direction
-
-    unit_type   - PNG_RESOLUTION_UNKNOWN,
-                  PNG_RESOLUTION_METER
-
-    png_set_sCAL(png_ptr, info_ptr, unit, width, height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-
-    height      - height of a pixel in physical scale units
-                  (width and height are doubles)
-
-    png_set_sCAL_s(png_ptr, info_ptr, unit, width, height)
-
-    unit        - physical scale units (an integer)
-
-    width       - width of a pixel in physical scale units
-                  expressed as a string
-
-    height      - height of a pixel in physical scale units
-                 (width and height are strings like "2.54")
-
-    png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
-       num_unknowns)
-
-    unknowns          - array of png_unknown_chunk
-                        structures holding unknown chunks
-    unknowns[i].name  - name of unknown chunk
-    unknowns[i].data  - data of unknown chunk
-    unknowns[i].size  - size of unknown chunk's data
-    unknowns[i].location - position to write chunk in file
-                           0: do not write chunk
-                           PNG_HAVE_IHDR: before PLTE
-                           PNG_HAVE_PLTE: before IDAT
-                           PNG_AFTER_IDAT: after IDAT
-
-The "location" member is set automatically according to
-what part of the output file has already been written.
-You can change its value after calling png_set_unknown_chunks()
-as demonstrated in pngtest.c.  Within each of the "locations",
-the chunks are sequenced according to their position in the
-structure (that is, the value of "i", which is the order in which
-the chunk was either read from the input file or defined with
-png_set_unknown_chunks).
-
-A quick word about text and num_text.  text is an array of png_text
-structures.  num_text is the number of valid structures in the array.
-Each png_text structure holds a language code, a keyword, a text value,
-and a compression type.
-
-The compression types have the same valid numbers as the compression
-types of the image data.  Currently, the only valid number is zero.
-However, you can store text either compressed or uncompressed, unlike
-images, which always have to be compressed.  So if you don't want the
-text compressed, set the compression type to PNG_TEXT_COMPRESSION_NONE.
-Because tEXt and zTXt chunks don't have a language field, if you
-specify PNG_TEXT_COMPRESSION_NONE or PNG_TEXT_COMPRESSION_zTXt
-any language code or translated keyword will not be written out.
-
-Until text gets around a few hundred bytes, it is not worth compressing it.
-After the text has been written out to the file, the compression type
-is set to PNG_TEXT_COMPRESSION_NONE_WR or PNG_TEXT_COMPRESSION_zTXt_WR,
-so that it isn't written out again at the end (in case you are calling
-png_write_end() with the same struct).
-
-The keywords that are given in the PNG Specification are:
-
-    Title            Short (one line) title or
-                     caption for image
-
-    Author           Name of image's creator
-
-    Description      Description of image (possibly long)
-
-    Copyright        Copyright notice
-
-    Creation Time    Time of original image creation
-                     (usually RFC 1123 format, see below)
-
-    Software         Software used to create the image
-
-    Disclaimer       Legal disclaimer
-
-    Warning          Warning of nature of content
-
-    Source           Device used to create the image
-
-    Comment          Miscellaneous comment; conversion
-                     from other image format
-
-The keyword-text pairs work like this.  Keywords should be short
-simple descriptions of what the comment is about.  Some typical
-keywords are found in the PNG specification, as is some recommendations
-on keywords.  You can repeat keywords in a file.  You can even write
-some text before the image and some after.  For example, you may want
-to put a description of the image before the image, but leave the
-disclaimer until after, so viewers working over modem connections
-don't have to wait for the disclaimer to go over the modem before
-they start seeing the image.  Finally, keywords should be full
-words, not abbreviations.  Keywords and text are in the ISO 8859-1
-(Latin-1) character set (a superset of regular ASCII) and can not
-contain NUL characters, and should not contain control or other
-unprintable characters.  To make the comments widely readable, stick
-with basic ASCII, and avoid machine specific character set extensions
-like the IBM-PC character set.  The keyword must be present, but
-you can leave off the text string on non-compressed pairs.
-Compressed pairs must have a text string, as only the text string
-is compressed anyway, so the compression would be meaningless.
-
-PNG supports modification time via the png_time structure.  Two
-conversion routines are provided, png_convert_from_time_t() for
-time_t and png_convert_from_struct_tm() for struct tm.  The
-time_t routine uses gmtime().  You don't have to use either of
-these, but if you wish to fill in the png_time structure directly,
-you should provide the time in universal time (GMT) if possible
-instead of your local time.  Note that the year number is the full
-year (e.g. 1998, rather than 98 - PNG is year 2000 compliant!), and
-that months start with 1.
-
-If you want to store the time of the original image creation, you should
-use a plain tEXt chunk with the "Creation Time" keyword.  This is
-necessary because the "creation time" of a PNG image is somewhat vague,
-depending on whether you mean the PNG file, the time the image was
-created in a non-PNG format, a still photo from which the image was
-scanned, or possibly the subject matter itself.  In order to facilitate
-machine-readable dates, it is recommended that the "Creation Time"
-tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
-although this isn't a requirement.  Unlike the tIME chunk, the
-"Creation Time" tEXt chunk is not expected to be automatically changed
-by the software.  To facilitate the use of RFC 1123 dates, a function
-png_convert_to_rfc1123_buffer(buffer, png_timep) is provided to
-convert from PNG time to an RFC 1123 format string.  The caller must provide
-a writeable buffer of at least 29 bytes.
-
-.SS Writing unknown chunks
-
-You can use the png_set_unknown_chunks function to queue up private chunks
-for writing.  You give it a chunk name, location, raw data, and a size.  You
-also must use png_set_keep_unknown_chunks() to ensure that libpng will
-handle them.  That's all there is to it.  The chunks will be written by the
-next following png_write_info_before_PLTE, png_write_info, or png_write_end
-function, depending upon the specified location.  Any chunks previously
-read into the info structure's unknown-chunk list will also be written out
-in a sequence that satisfies the PNG specification's ordering rules.
-
-Here is an example of writing two private chunks, prVt and miNE:
-
-    #ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-    /* Set unknown chunk data */
-    png_unknown_chunk unk_chunk[2];
-    strcpy((char *) unk_chunk[0].name, "prVt";
-    unk_chunk[0].data = (unsigned char *) "PRIVATE DATA";
-    unk_chunk[0].size = strlen(unk_chunk[0].data)+1;
-    unk_chunk[0].location = PNG_HAVE_IHDR;
-    strcpy((char *) unk_chunk[1].name, "miNE";
-    unk_chunk[1].data = (unsigned char *) "MY CHUNK DATA";
-    unk_chunk[1].size = strlen(unk_chunk[0].data)+1;
-    unk_chunk[1].location = PNG_AFTER_IDAT;
-    png_set_unknown_chunks(write_ptr, write_info_ptr,
-        unk_chunk, 2);
-    /* Needed because miNE is not safe-to-copy */
-    png_set_keep_unknown_chunks(png, PNG_HANDLE_CHUNK_ALWAYS,
-       (png_bytep) "miNE", 1);
-    # if PNG_LIBPNG_VER < 10600
-      /* Deal with unknown chunk location bug in 1.5.x and earlier */
-      png_set_unknown_chunk_location(png, info, 0, PNG_HAVE_IHDR);
-      png_set_unknown_chunk_location(png, info, 1, PNG_AFTER_IDAT);
-    # endif
-    # if PNG_LIBPNG_VER < 10500
-      /* PNG_AFTER_IDAT writes two copies of the chunk prior to libpng-1.5.0,
-       * one before IDAT and another after IDAT, so don't use it; only use
-       * PNG_HAVE_IHDR location.  This call resets the location previously
-       * set by assignment and png_set_unknown_chunk_location() for chunk 1.
-       */
-      png_set_unknown_chunk_location(png, info, 1, PNG_HAVE_IHDR);
-    # endif
-    #endif
-
-.SS The high-level write interface
-
-At this point there are two ways to proceed; through the high-level
-write interface, or through a sequence of low-level write operations.
-You can use the high-level interface if your image data is present
-in the info structure.  All defined output
-transformations are permitted, enabled by the following masks.
-
-    PNG_TRANSFORM_IDENTITY      No transformation
-    PNG_TRANSFORM_PACKING       Pack 1, 2 and 4-bit samples
-    PNG_TRANSFORM_PACKSWAP      Change order of packed
-                                pixels to LSB first
-    PNG_TRANSFORM_INVERT_MONO   Invert monochrome images
-    PNG_TRANSFORM_SHIFT         Normalize pixels to the
-                                sBIT depth
-    PNG_TRANSFORM_BGR           Flip RGB to BGR, RGBA
-                                to BGRA
-    PNG_TRANSFORM_SWAP_ALPHA    Flip RGBA to ARGB or GA
-                                to AG
-    PNG_TRANSFORM_INVERT_ALPHA  Change alpha from opacity
-                                to transparency
-    PNG_TRANSFORM_SWAP_ENDIAN   Byte-swap 16-bit samples
-    PNG_TRANSFORM_STRIP_FILLER        Strip out filler
-                                      bytes (deprecated).
-    PNG_TRANSFORM_STRIP_FILLER_BEFORE Strip out leading
-                                      filler bytes
-    PNG_TRANSFORM_STRIP_FILLER_AFTER  Strip out trailing
-                                      filler bytes
-
-If you have valid image data in the info structure (you can use
-png_set_rows() to put image data in the info structure), simply do this:
-
-    png_write_png(png_ptr, info_ptr, png_transforms, NULL)
-
-where png_transforms is an integer containing the bitwise OR of some set of
-transformation flags.  This call is equivalent to png_write_info(),
-followed the set of transformations indicated by the transform mask,
-then png_write_image(), and finally png_write_end().
-
-(The final parameter of this call is not yet used.  Someday it might point
-to transformation parameters required by some future output transform.)
-
-You must use png_transforms and not call any png_set_transform() functions
-when you use png_write_png().
-
-.SS The low-level write interface
-
-If you are going the low-level route instead, you are now ready to
-write all the file information up to the actual image data.  You do
-this with a call to png_write_info().
-
-    png_write_info(png_ptr, info_ptr);
-
-Note that there is one transformation you may need to do before
-png_write_info().  In PNG files, the alpha channel in an image is the
-level of opacity.  If your data is supplied as a level of transparency,
-you can invert the alpha channel before you write it, so that 0 is
-fully transparent and 255 (in 8-bit or paletted images) or 65535
-(in 16-bit images) is fully opaque, with
-
-    png_set_invert_alpha(png_ptr);
-
-This must appear before png_write_info() instead of later with the
-other transformations because in the case of paletted images the tRNS
-chunk data has to be inverted before the tRNS chunk is written.  If
-your image is not a paletted image, the tRNS data (which in such cases
-represents a single color to be rendered as transparent) won't need to
-be changed, and you can safely do this transformation after your
-png_write_info() call.
-
-If you need to write a private chunk that you want to appear before
-the PLTE chunk when PLTE is present, you can write the PNG info in
-two steps, and insert code to write your own chunk between them:
-
-    png_write_info_before_PLTE(png_ptr, info_ptr);
-    png_set_unknown_chunks(png_ptr, info_ptr, ...);
-    png_write_info(png_ptr, info_ptr);
-
-After you've written the file information, you can set up the library
-to handle any special transformations of the image data.  The various
-ways to transform the data will be described in the order that they
-should occur.  This is important, as some of these change the color
-type and/or bit depth of the data, and some others only work on
-certain color types and bit depths.  Even though each transformation
-checks to see if it has data that it can do something with, you should
-make sure to only enable a transformation if it will be valid for the
-data.  For example, don't swap red and blue on grayscale data.
-
-PNG files store RGB pixels packed into 3 or 6 bytes.  This code tells
-the library to strip input data that has 4 or 8 bytes per pixel down
-to 3 or 6 bytes (or strip 2 or 4-byte grayscale+filler data to 1 or 2
-bytes per pixel).
-
-    png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-
-where the 0 is unused, and the location is either PNG_FILLER_BEFORE or
-PNG_FILLER_AFTER, depending upon whether the filler byte in the pixel
-is stored XRGB or RGBX.
-
-PNG files pack pixels of bit depths 1, 2, and 4 into bytes as small as
-they can, resulting in, for example, 8 pixels per byte for 1 bit files.
-If the data is supplied at 1 pixel per byte, use this code, which will
-correctly pack the pixels into a single byte:
-
-    png_set_packing(png_ptr);
-
-PNG files reduce possible bit depths to 1, 2, 4, 8, and 16.  If your
-data is of another bit depth, you can write an sBIT chunk into the
-file so that decoders can recover the original data if desired.
-
-    /* Set the true bit depth of the image data */
-    if (color_type & PNG_COLOR_MASK_COLOR)
-    {
-       sig_bit.red = true_bit_depth;
-       sig_bit.green = true_bit_depth;
-       sig_bit.blue = true_bit_depth;
-    }
-
-    else
-    {
-       sig_bit.gray = true_bit_depth;
-    }
-
-    if (color_type & PNG_COLOR_MASK_ALPHA)
-    {
-       sig_bit.alpha = true_bit_depth;
-    }
-
-    png_set_sBIT(png_ptr, info_ptr, &sig_bit);
-
-If the data is stored in the row buffer in a bit depth other than
-one supported by PNG (e.g. 3 bit data in the range 0-7 for a 4-bit PNG),
-this will scale the values to appear to be the correct bit depth as
-is required by PNG.
-
-    png_set_shift(png_ptr, &sig_bit);
-
-PNG files store 16-bit pixels in network byte order (big-endian,
-ie. most significant bits first).  This code would be used if they are
-supplied the other way (little-endian, i.e. least significant bits
-first, the way PCs store them):
-
-    if (bit_depth > 8)
-       png_set_swap(png_ptr);
-
-If you are using packed-pixel images (1, 2, or 4 bits/pixel), and you
-need to change the order the pixels are packed into bytes, you can use:
-
-    if (bit_depth < 8)
-       png_set_packswap(png_ptr);
-
-PNG files store 3 color pixels in red, green, blue order.  This code
-would be used if they are supplied as blue, green, red:
-
-    png_set_bgr(png_ptr);
-
-PNG files describe monochrome as black being zero and white being
-one. This code would be used if the pixels are supplied with this reversed
-(black being one and white being zero):
-
-    png_set_invert_mono(png_ptr);
-
-Finally, you can write your own transformation function if none of
-the existing ones meets your needs.  This is done by setting a callback
-with
-
-    png_set_write_user_transform_fn(png_ptr,
-       write_transform_fn);
-
-You must supply the function
-
-    void write_transform_fn(png_structp png_ptr, png_row_infop
-       row_info, png_bytep data)
-
-See pngtest.c for a working example.  Your function will be called
-before any of the other transformations are processed.  If supported
-libpng also supplies an information routine that may be called from
-your callback:
-
-   png_get_current_row_number(png_ptr);
-   png_get_current_pass_number(png_ptr);
-
-This returns the current row passed to the transform.  With interlaced
-images the value returned is the row in the input sub-image image.  Use
-PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
-find the output pixel (x,y) given an interlaced sub-image pixel (row,col,pass).
-
-The discussion of interlace handling above contains more information on how to
-use these values.
-
-You can also set up a pointer to a user structure for use by your
-callback function.
-
-    png_set_user_transform_info(png_ptr, user_ptr, 0, 0);
-
-The user_channels and user_depth parameters of this function are ignored
-when writing; you can set them to zero as shown.
-
-You can retrieve the pointer via the function png_get_user_transform_ptr().
-For example:
-
-    voidp write_user_transform_ptr =
-       png_get_user_transform_ptr(png_ptr);
-
-It is possible to have libpng flush any pending output, either manually,
-or automatically after a certain number of lines have been written.  To
-flush the output stream a single time call:
-
-    png_write_flush(png_ptr);
-
-and to have libpng flush the output stream periodically after a certain
-number of scanlines have been written, call:
-
-    png_set_flush(png_ptr, nrows);
-
-Note that the distance between rows is from the last time png_write_flush()
-was called, or the first row of the image if it has never been called.
-So if you write 50 lines, and then png_set_flush 25, it will flush the
-output on the next scanline, and every 25 lines thereafter, unless
-png_write_flush() is called before 25 more lines have been written.
-If nrows is too small (less than about 10 lines for a 640 pixel wide
-RGB image) the image compression may decrease noticeably (although this
-may be acceptable for real-time applications).  Infrequent flushing will
-only degrade the compression performance by a few percent over images
-that do not use flushing.
-
-.SS Writing the image data
-
-That's it for the transformations.  Now you can write the image data.
-The simplest way to do this is in one function call.  If you have the
-whole image in memory, you can just call png_write_image() and libpng
-will write the image.  You will need to pass in an array of pointers to
-each row.  This function automatically handles interlacing, so you don't
-need to call png_set_interlace_handling() or call this function multiple
-times, or any of that other stuff necessary with png_write_rows().
-
-    png_write_image(png_ptr, row_pointers);
-
-where row_pointers is:
-
-    png_byte *row_pointers[height];
-
-You can point to void or char or whatever you use for pixels.
-
-If you don't want to write the whole image at once, you can
-use png_write_rows() instead.  If the file is not interlaced,
-this is simple:
-
-    png_write_rows(png_ptr, row_pointers,
-       number_of_rows);
-
-row_pointers is the same as in the png_write_image() call.
-
-If you are just writing one row at a time, you can do this with
-a single row_pointer instead of an array of row_pointers:
-
-    png_bytep row_pointer = row;
-
-    png_write_row(png_ptr, row_pointer);
-
-When the file is interlaced, things can get a good deal more complicated.
-The only currently (as of the PNG Specification version 1.2, dated July
-1999) defined interlacing scheme for PNG files is the "Adam7" interlace
-scheme, that breaks down an image into seven smaller images of varying
-size.  libpng will build these images for you, or you can do them
-yourself.  If you want to build them yourself, see the PNG specification
-for details of which pixels to write when.
-
-If you don't want libpng to handle the interlacing details, just
-use png_set_interlace_handling() and call png_write_rows() the
-correct number of times to write all the sub-images
-(png_set_interlace_handling() returns the number of sub-images.)
-
-If you want libpng to build the sub-images, call this before you start
-writing any rows:
-
-    number_of_passes = png_set_interlace_handling(png_ptr);
-
-This will return the number of passes needed.  Currently, this is seven,
-but may change if another interlace type is added.
-
-Then write the complete image number_of_passes times.
-
-    png_write_rows(png_ptr, row_pointers, number_of_rows);
-
-Think carefully before you write an interlaced image.  Typically code that
-reads such images reads all the image data into memory, uncompressed, before
-doing any processing.  Only code that can display an image on the fly can
-take advantage of the interlacing and even then the image has to be exactly
-the correct size for the output device, because scaling an image requires
-adjacent pixels and these are not available until all the passes have been
-read.
-
-If you do write an interlaced image you will hardly ever need to handle
-the interlacing yourself.  Call png_set_interlace_handling() and use the
-approach described above.
-
-The only time it is conceivable that you will really need to write an
-interlaced image pass-by-pass is when you have read one pass by pass and
-made some pixel-by-pixel transformation to it, as described in the read
-code above.  In this case use the PNG_PASS_ROWS and PNG_PASS_COLS macros
-to determine the size of each sub-image in turn and simply write the rows
-you obtained from the read code.
-
-.SS Finishing a sequential write
-
-After you are finished writing the image, you should finish writing
-the file.  If you are interested in writing comments or time, you should
-pass an appropriately filled png_info pointer.  If you are not interested,
-you can pass NULL.
-
-    png_write_end(png_ptr, info_ptr);
-
-When you are done, you can free all memory used by libpng like this:
-
-    png_destroy_write_struct(&png_ptr, &info_ptr);
-
-It is also possible to individually free the info_ptr members that
-point to libpng-allocated storage with the following function:
-
-    png_free_data(png_ptr, info_ptr, mask, seq)
-
-    mask  - identifies data to be freed, a mask
-            containing the bitwise OR of one or
-            more of
-              PNG_FREE_PLTE, PNG_FREE_TRNS,
-              PNG_FREE_HIST, PNG_FREE_ICCP,
-              PNG_FREE_PCAL, PNG_FREE_ROWS,
-              PNG_FREE_SCAL, PNG_FREE_SPLT,
-              PNG_FREE_TEXT, PNG_FREE_UNKN,
-            or simply PNG_FREE_ALL
-
-    seq   - sequence number of item to be freed
-            (\-1 for all items)
-
-This function may be safely called when the relevant storage has
-already been freed, or has not yet been allocated, or was allocated
-by the user  and not by libpng,  and will in those cases do nothing.
-The "seq" parameter is ignored if only one item of the selected data
-type, such as PLTE, is allowed.  If "seq" is not \-1, and multiple items
-are allowed for the data type identified in the mask, such as text or
-sPLT, only the n'th item in the structure is freed, where n is "seq".
-
-If you allocated data such as a palette that you passed in to libpng
-with png_set_*, you must not free it until just before the call to
-png_destroy_write_struct().
-
-The default behavior is only to free data that was allocated internally
-by libpng.  This can be changed, so that libpng will not free the data,
-or so that it will free data that was allocated by the user with png_malloc()
-or png_calloc() and passed in via a png_set_*() function, with
-
-    png_data_freer(png_ptr, info_ptr, freer, mask)
-
-    freer  - one of
-               PNG_DESTROY_WILL_FREE_DATA
-               PNG_SET_WILL_FREE_DATA
-               PNG_USER_WILL_FREE_DATA
-
-    mask   - which data elements are affected
-             same choices as in png_free_data()
-
-For example, to transfer responsibility for some data from a read structure
-to a write structure, you could use
-
-    png_data_freer(read_ptr, read_info_ptr,
-       PNG_USER_WILL_FREE_DATA,
-       PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-    png_data_freer(write_ptr, write_info_ptr,
-       PNG_DESTROY_WILL_FREE_DATA,
-       PNG_FREE_PLTE|PNG_FREE_tRNS|PNG_FREE_hIST)
-
-thereby briefly reassigning responsibility for freeing to the user but
-immediately afterwards reassigning it once more to the write_destroy
-function.  Having done this, it would then be safe to destroy the read
-structure and continue to use the PLTE, tRNS, and hIST data in the write
-structure.
-
-This function only affects data that has already been allocated.
-You can call this function before calling after the png_set_*() functions
-to control whether the user or png_destroy_*() is supposed to free the data.
-When the user assumes responsibility for libpng-allocated data, the
-application must use
-png_free() to free it, and when the user transfers responsibility to libpng
-for data that the user has allocated, the user must have used png_malloc()
-or png_calloc() to allocate it.
-
-If you allocated text_ptr.text, text_ptr.lang, and text_ptr.translated_keyword
-separately, do not transfer responsibility for freeing text_ptr to libpng,
-because when libpng fills a png_text structure it combines these members with
-the key member, and png_free_data() will free only text_ptr.key.  Similarly,
-if you transfer responsibility for free'ing text_ptr from libpng to your
-application, your application must not separately free those members.
-For a more compact example of writing a PNG image, see the file example.c.
-
-.SH V. Simplified API
-
-The simplified API, which became available in libpng-1.6.0, hides the details
-of both libpng and the PNG file format itself.
-It allows PNG files to be read into a very limited number of
-in-memory bitmap formats or to be written from the same formats.  If these
-formats do not accommodate your needs then you can, and should, use the more
-sophisticated APIs above - these support a wide variety of in-memory formats
-and a wide variety of sophisticated transformations to those formats as well
-as a wide variety of APIs to manipulate ancilliary information.
-
-To read a PNG file using the simplified API:
-
-  1) Declare a 'png_image' structure (see below) on the
-     stack and memset() it to all zero.
-
-  2) Call the appropriate png_image_begin_read... function.
-
-  3) Set the png_image 'format' member to the required
-     format and allocate a buffer for the image.
-
-  4) Call png_image_finish_read to read the image into
-     your buffer.
-
-There are no restrictions on the format of the PNG input itself; all valid
-color types, bit depths, and interlace methods are acceptable, and the
-input image is transformed as necessary to the requested in-memory format
-during the png_image_finish_read() step.
-
-To write a PNG file using the simplified API:
-
-  1) Declare a 'png_image' structure on the stack and memset()
-     it to all zero.
-
-  2) Initialize the members of the structure that describe the
-     image, setting the 'format' member to the format of the
-     image in memory.
-
-  3) Call the appropriate png_image_write... function with a
-     pointer to the image to write the PNG data.
-
-png_image is a structure that describes the in-memory format of an image
-when it is being read or define the in-memory format of an image that you
-need to write.  The "png_image" structure contains the following members:
-
-   png_uint_32  version Set to PNG_IMAGE_VERSION
-   png_uint_32  width   Image width in pixels (columns)
-   png_uint_32  height  Image height in pixels (rows)
-   png_uint_32  format  Image format as defined below
-   png_uint_32  flags   A bit mask containing informational flags
-   png_controlp opaque  Initialize to NULL, free with png_image_free
-   png_uint_32  colormap_entries; Number of entries in the color-map
-   png_uint_32  warning_or_error;
-   char         message[64];
-
-In the event of an error or warning the following field warning_or_error
-field will be set to a non-zero value and the 'message' field will contain
-a '\0' terminated string with the libpng error or warning message.  If both
-warnings and an error were encountered, only the error is recorded.  If there
-are multiple warnings, only the first one is recorded.
-
-The upper 30 bits of this value are reserved; the low two bits contain
-a two bit code such that a value more than 1 indicates a failure in the API
-just called:
-
-   0 - no warning or error
-   1 - warning
-   2 - error
-   3 - error preceded by warning
-
-The pixels (samples) of the image have one to four channels whose components
-have original values in the range 0 to 1.0:
-
-  1: A single gray or luminance channel (G).
-  2: A gray/luminance channel and an alpha channel (GA).
-  3: Three red, green, blue color channels (RGB).
-  4: Three color channels and an alpha channel (RGBA).
-
-The channels are encoded in one of two ways:
-
-  a) As a small integer, value 0..255, contained in a single byte.  For the
-alpha channel the original value is simply value/255.  For the color or
-luminance channels the value is encoded according to the sRGB specification
-and matches the 8-bit format expected by typical display devices.
-
-The color/gray channels are not scaled (pre-multiplied) by the alpha
-channel and are suitable for passing to color management software.
-
-  b) As a value in the range 0..65535, contained in a 2-byte integer, in
-the native byte order of the platform on which the application is running.
-All channels can be converted to the original value by dividing by 65535; all
-channels are linear.  Color channels use the RGB encoding (RGB end-points) of
-the sRGB specification.  This encoding is identified by the
-PNG_FORMAT_FLAG_LINEAR flag below.
-
-When an alpha channel is present it is expected to denote pixel coverage
-of the color or luminance channels and is returned as an associated alpha
-channel: the color/gray channels are scaled (pre-multiplied) by the alpha
-value.
-
-When a color-mapped image is used as a result of calling
-png_image_read_colormap or png_image_write_colormap the channels are encoded
-in the color-map and the descriptions above apply to the color-map entries.
-The image data is encoded as small integers, value 0..255, that index the
-entries in the color-map.  One integer (one byte) is stored for each pixel.
-
-PNG_FORMAT_*
-
-The #defines to be used in png_image::format.  Each #define identifies a
-particular layout of channel data and, if present, alpha values.  There are
-separate defines for each of the two channel encodings.
-
-A format is built up using single bit flag values.  Not all combinations are
-valid: use the bit flag values below for testing a format returned by the
-read APIs, but set formats from the derived values.
-
-When reading or writing color-mapped images the format should be set to the
-format of the entries in the color-map then png_image_{read,write}_colormap
-called to read or write the color-map and set the format correctly for the
-image data.  Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
-
-NOTE: libpng can be built with particular features disabled, if you see
-compiler errors because the definition of one of the following flags has been
-compiled out it is because libpng does not have the required support.  It is
-possible, however, for the libpng configuration to enable the format on just
-read or just write; in that case you may see an error at run time.  You can
-guard against this by checking for the definition of:
-
-   PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
-
-   PNG_FORMAT_FLAG_ALPHA    0x01 format with an alpha channel
-   PNG_FORMAT_FLAG_COLOR    0x02 color format: otherwise grayscale
-   PNG_FORMAT_FLAG_LINEAR   0x04 png_uint_16 channels else png_byte
-   PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
-   PNG_FORMAT_FLAG_BGR      0x10 BGR colors, else order is RGB
-   PNG_FORMAT_FLAG_AFIRST   0x20 alpha channel comes first
-
-Supported formats are as follows.  Future versions of libpng may support more
-formats; for compatibility with older versions simply check if the format
-macro is defined using #ifdef.  These defines describe the in-memory layout
-of the components of the pixels of the image.
-
-First the single byte formats:
-
-   PNG_FORMAT_GRAY 0
-   PNG_FORMAT_GA   PNG_FORMAT_FLAG_ALPHA
-   PNG_FORMAT_AG   (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
-   PNG_FORMAT_RGB  PNG_FORMAT_FLAG_COLOR
-   PNG_FORMAT_BGR  (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
-   PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
-   PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
-
-Then the linear 2-byte formats.  When naming these "Y" is used to
-indicate a luminance (gray) channel.  The component order within the pixel
-is always the same - there is no provision for swapping the order of the
-components in the linear format.  The components are 16-bit integers in
-the native byte order for your platform, and there is no provision for
-swapping the bytes to a different endian condition.
-
-   PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
-   PNG_FORMAT_LINEAR_Y_ALPHA
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
-   PNG_FORMAT_LINEAR_RGB
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
-   PNG_FORMAT_LINEAR_RGB_ALPHA
-      (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
-      PNG_FORMAT_FLAG_ALPHA)
-
-Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
-as appropriate after setting png_image::format to the format of the color-map
-to be read or written.  Applications may check the value of
-PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API.  The
-format of the color-map may be extracted using the following macro.
-
-   PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
-
-PNG_IMAGE macros
-
-These are convenience macros to derive information from a png_image
-structure.  The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
-actual image sample values - either the entries in the color-map or the
-pixels in the image.  The PNG_IMAGE_PIXEL_ macros return corresponding values
-for the pixels and will always return 1 after a call to
-png_image_{read,write}_colormap.  The remaining macros return information
-about the rows in the image and the complete image.
-
-NOTE: All the macros that take a png_image::format parameter are compile time
-constants if the format parameter is, itself, a constant.  Therefore these
-macros can be used in array declarations and case labels where required.
-Similarly the macros are also pre-processor constants (sizeof is not used) so
-they can be used in #if tests.
-
-First the information about the samples.
-
-  PNG_IMAGE_SAMPLE_CHANNELS(fmt)
-    Returns the total number of channels in a given format: 1..4
-
-  PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
-    Returns the size in bytes of a single component of a pixel or color-map
-    entry (as appropriate) in the image.
-
-  PNG_IMAGE_SAMPLE_SIZE(fmt)
-    This is the size of the sample data for one sample.  If the image is
-    color-mapped it is the size of one color-map entry (and image pixels are
-    one byte in size), otherwise it is the size of one image pixel.
-
-  PNG_IMAGE_COLORMAP_SIZE(fmt)
-   The size of the color-map required by the format; this is the size of the
-   color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
-   a fixed number determined by the format so can easily be allocated on the
-   stack if necessary.
-
-#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
-   /* The maximum size of the color-map required by the format expressed in a
-    * count of components.  This can be used to compile-time allocate a
-    * color-map:
-    *
-    * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
-    *
-    * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
-    *
-    * Alternatively, use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
-    * information from one of the png_image_begin_read_ APIs and dynamically
-    * allocate the required memory.
-    */
-
-
-Corresponding information about the pixels
-
-  PNG_IMAGE_PIXEL_(test,fmt)
-
-  PNG_IMAGE_PIXEL_CHANNELS(fmt)
-   The number of separate channels (components) in a pixel; 1 for a
-   color-mapped image.
-
-  PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
-   The size, in bytes, of each component in a pixel; 1 for a color-mapped
-   image.
-
-  PNG_IMAGE_PIXEL_SIZE(fmt)
-   The size, in bytes, of a complete pixel; 1 for a color-mapped image.
-
-Information about the whole row, or whole image
-
-  PNG_IMAGE_ROW_STRIDE(image)
-   Returns the total number of components in a single row of the image; this
-   is the minimum 'row stride', the minimum count of components between each
-   row.  For a color-mapped image this is the minimum number of bytes in a
-   row.
-
-   If you need the stride measured in bytes, row_stride_bytes is
-   PNG_IMAGE_ROW_STRIDE(image) * PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)
-   plus any padding bytes that your application might need, for example
-   to start the next row on a 4-byte boundary.
-
-  PNG_IMAGE_BUFFER_SIZE(image, row_stride)
-    Returns the size, in bytes, of an image buffer given a png_image and a row
-    stride - the number of components to leave space for in each row.  This
-    macro takes care of multiplying row_stride by PNG_IMAGE_PIXEL_COMONENT_SIZE
-    when the image has 2-byte components.
-
-  PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
-    This indicates the the RGB values of the in-memory bitmap do not
-    correspond to the red, green and blue end-points defined by sRGB.
-
-  PNG_IMAGE_FLAG_COLORMAP == 0x02
-    The PNG is color-mapped.  If this flag is set png_image_read_colormap
-    can be used without further loss of image information.  If it is not set
-    png_image_read_colormap will cause significant loss if the image has any
-
-READ APIs
-
-   The png_image passed to the read APIs must have been initialized by setting
-   the png_controlp field 'opaque' to NULL (or, better, memset the whole thing.)
-
-   int png_image_begin_read_from_file( png_imagep image,
-     const char *file_name)
-
-     The named file is opened for read and the image header
-     is filled in from the PNG header in the file.
-
-   int png_image_begin_read_from_stdio (png_imagep image,
-     FILE* file)
-
-      The PNG header is read from the stdio FILE object.
-
-   int png_image_begin_read_from_memory(png_imagep image,
-      png_const_voidp memory, png_size_t size)
-
-      The PNG header is read from the given memory buffer.
-
-   int png_image_finish_read(png_imagep image,
-      png_colorp background, void *buffer,
-      png_int_32 row_stride, void *colormap));
-
-      Finish reading the image into the supplied buffer and
-      clean up the png_image structure.
-
-      row_stride is the step, in png_byte or png_uint_16 units
-      as appropriate, between adjacent rows.  A positive stride
-      indicates that the top-most row is first in the buffer -
-      the normal top-down arrangement.  A negative stride
-      indicates that the bottom-most row is first in the buffer.
-
-      background need only be supplied if an alpha channel must
-      be removed from a png_byte format and the removal is to be
-      done by compositing on a solid color; otherwise it may be
-      NULL and any composition will be done directly onto the
-      buffer.  The value is an sRGB color to use for the
-      background, for grayscale output the green channel is used.
-
-      For linear output removing the alpha channel is always done
-      by compositing on black.
-
-   void png_image_free(png_imagep image)
-
-      Free any data allocated by libpng in image->opaque,
-      setting the pointer to NULL.  May be called at any time
-      after the structure is initialized.
-
-When the simplified API needs to convert between sRGB and linear colorspaces,
-the actual sRGB transfer curve defined in the sRGB specification (see the
-article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
-approximation used elsewhere in libpng.
-
-WRITE APIS
-
-For write you must initialize a png_image structure to describe the image to
-be written:
-
-   version: must be set to PNG_IMAGE_VERSION
-   opaque: must be initialized to NULL
-   width: image width in pixels
-   height: image height in rows
-   format: the format of the data you wish to write
-   flags: set to 0 unless one of the defined flags applies; set
-      PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images
-      where the RGB values do not correspond to the colors in sRGB.
-   colormap_entries: set to the number of entries in the color-map (0 to 256)
-
-   int png_image_write_to_file, (png_imagep image,
-      const char *file, int convert_to_8bit, const void *buffer,
-      png_int_32 row_stride, const void *colormap));
-
-      Write the image to the named file.
-
-   int png_image_write_to_stdio(png_imagep image, FILE *file,
-      int convert_to_8_bit, const void *buffer,
-      png_int_32 row_stride, const void *colormap)
-
-      Write the image to the given (FILE*).
-
-With all write APIs if image is in one of the linear formats with
-(png_uint_16) data then setting convert_to_8_bit will cause the output to be
-a (png_byte) PNG gamma encoded according to the sRGB specification, otherwise
-a 16-bit linear encoded PNG file is written.
-
-With all APIs row_stride is handled as in the read APIs - it is the spacing
-from one row to the next in component sized units (float) and if negative
-indicates a bottom-up row layout in the buffer.
-
-Note that the write API does not support interlacing, sub-8-bit pixels,
-and indexed (paletted) images.
-
-.SH VI. Modifying/Customizing libpng
-
-There are two issues here.  The first is changing how libpng does
-standard things like memory allocation, input/output, and error handling.
-The second deals with more complicated things like adding new chunks,
-adding new transformations, and generally changing how libpng works.
-Both of those are compile-time issues; that is, they are generally
-determined at the time the code is written, and there is rarely a need
-to provide the user with a means of changing them.
-
-Memory allocation, input/output, and error handling
-
-All of the memory allocation, input/output, and error handling in libpng
-goes through callbacks that are user-settable.  The default routines are
-in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively.  To change
-these functions, call the appropriate png_set_*_fn() function.
-
-Memory allocation is done through the functions png_malloc(), png_calloc(),
-and png_free().  The png_malloc() and png_free() functions currently just
-call the standard C functions and png_calloc() calls png_malloc() and then
-clears the newly allocated memory to zero; note that png_calloc(png_ptr, size)
-is not the same as the calloc(number, size) function provided by stdlib.h.
-There is limited support for certain systems with segmented memory
-architectures and the types of pointers declared by png.h match this; you
-will have to use appropriate pointers in your application.  If you prefer
-to use a different method of allocating and freeing data, you can use
-png_create_read_struct_2() or png_create_write_struct_2() to register your
-own functions as described above.  These functions also provide a void
-pointer that can be retrieved via
-
-    mem_ptr=png_get_mem_ptr(png_ptr);
-
-Your replacement memory functions must have prototypes as follows:
-
-    png_voidp malloc_fn(png_structp png_ptr,
-       png_alloc_size_t size);
-
-    void free_fn(png_structp png_ptr, png_voidp ptr);
-
-Your malloc_fn() must return NULL in case of failure.  The png_malloc()
-function will normally call png_error() if it receives a NULL from the
-system memory allocator or from your replacement malloc_fn().
-
-Your free_fn() will never be called with a NULL ptr, since libpng's
-png_free() checks for NULL before calling free_fn().
-
-Input/Output in libpng is done through png_read() and png_write(),
-which currently just call fread() and fwrite().  The FILE * is stored in
-png_struct and is initialized via png_init_io().  If you wish to change
-the method of I/O, the library supplies callbacks that you can set
-through the function png_set_read_fn() and png_set_write_fn() at run
-time, instead of calling the png_init_io() function.  These functions
-also provide a void pointer that can be retrieved via the function
-png_get_io_ptr().  For example:
-
-    png_set_read_fn(png_structp read_ptr,
-        voidp read_io_ptr, png_rw_ptr read_data_fn)
-
-    png_set_write_fn(png_structp write_ptr,
-        voidp write_io_ptr, png_rw_ptr write_data_fn,
-        png_flush_ptr output_flush_fn);
-
-    voidp read_io_ptr = png_get_io_ptr(read_ptr);
-    voidp write_io_ptr = png_get_io_ptr(write_ptr);
-
-The replacement I/O functions must have prototypes as follows:
-
-    void user_read_data(png_structp png_ptr,
-        png_bytep data, png_size_t length);
-
-    void user_write_data(png_structp png_ptr,
-        png_bytep data, png_size_t length);
-
-    void user_flush_data(png_structp png_ptr);
-
-The user_read_data() function is responsible for detecting and
-handling end-of-data errors.
-
-Supplying NULL for the read, write, or flush functions sets them back
-to using the default C stream functions, which expect the io_ptr to
-point to a standard *FILE structure.  It is probably a mistake
-to use NULL for one of write_data_fn and output_flush_fn but not both
-of them, unless you have built libpng with PNG_NO_WRITE_FLUSH defined.
-It is an error to read from a write stream, and vice versa.
-
-Error handling in libpng is done through png_error() and png_warning().
-Errors handled through png_error() are fatal, meaning that png_error()
-should never return to its caller.  Currently, this is handled via
-setjmp() and longjmp() (unless you have compiled libpng with
-PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
-but you could change this to do things like exit() if you should wish,
-as long as your function does not return.
-
-On non-fatal errors, png_warning() is called
-to print a warning message, and then control returns to the calling code.
-By default png_error() and png_warning() print a message on stderr via
-fprintf() unless the library is compiled with PNG_NO_CONSOLE_IO defined
-(because you don't want the messages) or PNG_NO_STDIO defined (because
-fprintf() isn't available).  If you wish to change the behavior of the error
-functions, you will need to set up your own message callbacks.  These
-functions are normally supplied at the time that the png_struct is created.
-It is also possible to redirect errors and warnings to your own replacement
-functions after png_create_*_struct() has been called by calling:
-
-    png_set_error_fn(png_structp png_ptr,
-        png_voidp error_ptr, png_error_ptr error_fn,
-        png_error_ptr warning_fn);
-
-    png_voidp error_ptr = png_get_error_ptr(png_ptr);
-
-If NULL is supplied for either error_fn or warning_fn, then the libpng
-default function will be used, calling fprintf() and/or longjmp() if a
-problem is encountered.  The replacement error functions should have
-parameters as follows:
-
-    void user_error_fn(png_structp png_ptr,
-        png_const_charp error_msg);
-
-    void user_warning_fn(png_structp png_ptr,
-        png_const_charp warning_msg);
-
-The motivation behind using setjmp() and longjmp() is the C++ throw and
-catch exception handling methods.  This makes the code much easier to write,
-as there is no need to check every return code of every function call.
-However, there are some uncertainties about the status of local variables
-after a longjmp, so the user may want to be careful about doing anything
-after setjmp returns non-zero besides returning itself.  Consult your
-compiler documentation for more details.  For an alternative approach, you
-may wish to use the "cexcept" facility (see http://cexcept.sourceforge.net),
-which is illustrated in pngvalid.c and in contrib/visupng.
-
-Beginning in libpng-1.4.0, the png_set_benign_errors() API became available.
-You can use this to handle certain errors (normally handled as errors)
-as warnings.
-
-    png_set_benign_errors (png_ptr, int allowed);
-
-    allowed: 0: treat png_benign_error() as an error.
-             1: treat png_benign_error() as a warning.
-
-As of libpng-1.6.0, the default condition is to treat benign errors as
-warnings while reading and as errors while writing.
-
-.SS Custom chunks
-
-If you need to read or write custom chunks, you may need to get deeper
-into the libpng code.  The library now has mechanisms for storing
-and writing chunks of unknown type; you can even declare callbacks
-for custom chunks.  However, this may not be good enough if the
-library code itself needs to know about interactions between your
-chunk and existing `intrinsic' chunks.
-
-If you need to write a new intrinsic chunk, first read the PNG
-specification. Acquire a first level of understanding of how it works.
-Pay particular attention to the sections that describe chunk names,
-and look at how other chunks were designed, so you can do things
-similarly.  Second, check out the sections of libpng that read and
-write chunks.  Try to find a chunk that is similar to yours and use
-it as a template.  More details can be found in the comments inside
-the code.  It is best to handle private or unknown chunks in a generic method,
-via callback functions, instead of by modifying libpng functions. This
-is illustrated in pngtest.c, which uses a callback function to handle a
-private "vpAg" chunk and the new "sTER" chunk, which are both unknown to
-libpng.
-
-If you wish to write your own transformation for the data, look through
-the part of the code that does the transformations, and check out some of
-the simpler ones to get an idea of how they work.  Try to find a similar
-transformation to the one you want to add and copy off of it.  More details
-can be found in the comments inside the code itself.
-
-.SS Configuring for gui/windowing platforms:
-
-You will need to write new error and warning functions that use the GUI
-interface, as described previously, and set them to be the error and
-warning functions at the time that png_create_*_struct() is called,
-in order to have them available during the structure initialization.
-They can be changed later via png_set_error_fn().  On some compilers,
-you may also have to change the memory allocators (png_malloc, etc.).
-
-.SS Configuring zlib:
-
-There are special functions to configure the compression.  Perhaps the
-most useful one changes the compression level, which currently uses
-input compression values in the range 0 - 9.  The library normally
-uses the default compression level (Z_DEFAULT_COMPRESSION = 6).  Tests
-have shown that for a large majority of images, compression values in
-the range 3-6 compress nearly as well as higher levels, and do so much
-faster.  For online applications it may be desirable to have maximum speed
-(Z_BEST_SPEED = 1).  With versions of zlib after v0.99, you can also
-specify no compression (Z_NO_COMPRESSION = 0), but this would create
-files larger than just storing the raw bitmap.  You can specify the
-compression level by calling:
-
-    #include zlib.h
-    png_set_compression_level(png_ptr, level);
-
-Another useful one is to reduce the memory level used by the library.
-The memory level defaults to 8, but it can be lowered if you are
-short on memory (running DOS, for example, where you only have 640K).
-Note that the memory level does have an effect on compression; among
-other things, lower levels will result in sections of incompressible
-data being emitted in smaller stored blocks, with a correspondingly
-larger relative overhead of up to 15% in the worst case.
-
-    #include zlib.h
-    png_set_compression_mem_level(png_ptr, level);
-
-The other functions are for configuring zlib.  They are not recommended
-for normal use and may result in writing an invalid PNG file.  See
-zlib.h for more information on what these mean.
-
-    #include zlib.h
-    png_set_compression_strategy(png_ptr,
-        strategy);
-
-    png_set_compression_window_bits(png_ptr,
-        window_bits);
-
-    png_set_compression_method(png_ptr, method);
-
-This controls the size of the IDAT chunks (default 8192):
-
-    png_set_compression_buffer_size(png_ptr, size);
-
-As of libpng version 1.5.4, additional APIs became
-available to set these separately for non-IDAT
-compressed chunks such as zTXt, iTXt, and iCCP:
-
-    #include zlib.h
-    #if PNG_LIBPNG_VER >= 10504
-    png_set_text_compression_level(png_ptr, level);
-
-    png_set_text_compression_mem_level(png_ptr, level);
-
-    png_set_text_compression_strategy(png_ptr,
-        strategy);
-
-    png_set_text_compression_window_bits(png_ptr,
-        window_bits);
-
-    png_set_text_compression_method(png_ptr, method);
-    #endif
-
-.SS Controlling row filtering
-
-If you want to control whether libpng uses filtering or not, which
-filters are used, and how it goes about picking row filters, you
-can call one of these functions.  The selection and configuration
-of row filters can have a significant impact on the size and
-encoding speed and a somewhat lesser impact on the decoding speed
-of an image.  Filtering is enabled by default for RGB and grayscale
-images (with and without alpha), but not for paletted images nor
-for any images with bit depths less than 8 bits/pixel.
-
-The 'method' parameter sets the main filtering method, which is
-currently only '0' in the PNG 1.2 specification.  The 'filters'
-parameter sets which filter(s), if any, should be used for each
-scanline.  Possible values are PNG_ALL_FILTERS and PNG_NO_FILTERS
-to turn filtering on and off, respectively.
-
-Individual filter types are PNG_FILTER_NONE, PNG_FILTER_SUB,
-PNG_FILTER_UP, PNG_FILTER_AVG, PNG_FILTER_PAETH, which can be bitwise
-ORed together with '|' to specify one or more filters to use.
-These filters are described in more detail in the PNG specification.
-If you intend to change the filter type during the course of writing
-the image, you should start with flags set for all of the filters
-you intend to use so that libpng can initialize its internal
-structures appropriately for all of the filter types.  (Note that this
-means the first row must always be adaptively filtered, because libpng
-currently does not allocate the filter buffers until png_write_row()
-is called for the first time.)
-
-    filters = PNG_FILTER_NONE | PNG_FILTER_SUB
-              PNG_FILTER_UP | PNG_FILTER_AVG |
-              PNG_FILTER_PAETH | PNG_ALL_FILTERS;
-
-    png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
-       filters);
-              The second parameter can also be
-              PNG_INTRAPIXEL_DIFFERENCING if you are
-              writing a PNG to be embedded in a MNG
-              datastream.  This parameter must be the
-              same as the value of filter_method used
-              in png_set_IHDR().
-
-It is also possible to influence how libpng chooses from among the
-available filters.  This is done in one or both of two ways - by
-telling it how important it is to keep the same filter for successive
-rows, and by telling it the relative computational costs of the filters.
-
-    double weights[3] = {1.5, 1.3, 1.1},
-       costs[PNG_FILTER_VALUE_LAST] =
-       {1.0, 1.3, 1.3, 1.5, 1.7};
-
-    png_set_filter_heuristics(png_ptr,
-       PNG_FILTER_HEURISTIC_WEIGHTED, 3,
-       weights, costs);
-
-The weights are multiplying factors that indicate to libpng that the
-row filter should be the same for successive rows unless another row filter
-is that many times better than the previous filter.  In the above example,
-if the previous 3 filters were SUB, SUB, NONE, the SUB filter could have a
-"sum of absolute differences" 1.5 x 1.3 times higher than other filters
-and still be chosen, while the NONE filter could have a sum 1.1 times
-higher than other filters and still be chosen.  Unspecified weights are
-taken to be 1.0, and the specified weights should probably be declining
-like those above in order to emphasize recent filters over older filters.
-
-The filter costs specify for each filter type a relative decoding cost
-to be considered when selecting row filters.  This means that filters
-with higher costs are less likely to be chosen over filters with lower
-costs, unless their "sum of absolute differences" is that much smaller.
-The costs do not necessarily reflect the exact computational speeds of
-the various filters, since this would unduly influence the final image
-size.
-
-Note that the numbers above were invented purely for this example and
-are given only to help explain the function usage.  Little testing has
-been done to find optimum values for either the costs or the weights.
-
-.SS Requesting debug printout
-
-The macro definition PNG_DEBUG can be used to request debugging
-printout.  Set it to an integer value in the range 0 to 3.  Higher
-numbers result in increasing amounts of debugging information.  The
-information is printed to the "stderr" file, unless another file
-name is specified in the PNG_DEBUG_FILE macro definition.
-
-When PNG_DEBUG > 0, the following functions (macros) become available:
-
-   png_debug(level, message)
-   png_debug1(level, message, p1)
-   png_debug2(level, message, p1, p2)
-
-in which "level" is compared to PNG_DEBUG to decide whether to print
-the message, "message" is the formatted string to be printed,
-and p1 and p2 are parameters that are to be embedded in the string
-according to printf-style formatting directives.  For example,
-
-   png_debug1(2, "foo=%d", foo);
-
-is expanded to
-
-   if (PNG_DEBUG > 2)
-      fprintf(PNG_DEBUG_FILE, "foo=%d\en", foo);
-
-When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
-can still use PNG_DEBUG to control your own debugging:
-
-   #ifdef PNG_DEBUG
-       fprintf(stderr, ...
-   #endif
-
-When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
-having level = 0 will be printed.  There aren't any such statements in
-this version of libpng, but if you insert some they will be printed.
-
-.SH VII.  MNG support
-
-The MNG specification (available at http://www.libpng.org/pub/mng) allows
-certain extensions to PNG for PNG images that are embedded in MNG datastreams.
-Libpng can support some of these extensions.  To enable them, use the
-png_permit_mng_features() function:
-
-   feature_set = png_permit_mng_features(png_ptr, mask)
-
-   mask is a png_uint_32 containing the bitwise OR of the
-        features you want to enable.  These include
-        PNG_FLAG_MNG_EMPTY_PLTE
-        PNG_FLAG_MNG_FILTER_64
-        PNG_ALL_MNG_FEATURES
-
-   feature_set is a png_uint_32 that is the bitwise AND of
-      your mask with the set of MNG features that is
-      supported by the version of libpng that you are using.
-
-It is an error to use this function when reading or writing a standalone
-PNG file with the PNG 8-byte signature.  The PNG datastream must be wrapped
-in a MNG datastream.  As a minimum, it must have the MNG 8-byte signature
-and the MHDR and MEND chunks.  Libpng does not provide support for these
-or any other MNG chunks; your application must provide its own support for
-them.  You may wish to consider using libmng (available at
-http://www.libmng.com) instead.
-
-.SH VIII.  Changes to Libpng from version 0.88
-
-It should be noted that versions of libpng later than 0.96 are not
-distributed by the original libpng author, Guy Schalnat, nor by
-Andreas Dilger, who had taken over from Guy during 1996 and 1997, and
-distributed versions 0.89 through 0.96, but rather by another member
-of the original PNG Group, Glenn Randers-Pehrson.  Guy and Andreas are
-still alive and well, but they have moved on to other things.
-
-The old libpng functions png_read_init(), png_write_init(),
-png_info_init(), png_read_destroy(), and png_write_destroy() have been
-moved to PNG_INTERNAL in version 0.95 to discourage their use.  These
-functions will be removed from libpng version 1.4.0.
-
-The preferred method of creating and initializing the libpng structures is
-via the png_create_read_struct(), png_create_write_struct(), and
-png_create_info_struct() because they isolate the size of the structures
-from the application, allow version error checking, and also allow the
-use of custom error handling routines during the initialization, which
-the old functions do not.  The functions png_read_destroy() and
-png_write_destroy() do not actually free the memory that libpng
-allocated for these structs, but just reset the data structures, so they
-can be used instead of png_destroy_read_struct() and
-png_destroy_write_struct() if you feel there is too much system overhead
-allocating and freeing the png_struct for each image read.
-
-Setting the error callbacks via png_set_message_fn() before
-png_read_init() as was suggested in libpng-0.88 is no longer supported
-because this caused applications that do not use custom error functions
-to fail if the png_ptr was not initialized to zero.  It is still possible
-to set the error callbacks AFTER png_read_init(), or to change them with
-png_set_error_fn(), which is essentially the same function, but with a new
-name to force compilation errors with applications that try to use the old
-method.
-
-Support for the sCAL, iCCP, iTXt, and sPLT chunks was added at libpng-1.0.6;
-however, iTXt support was not enabled by default.
-
-Starting with version 1.0.7, you can find out which version of the library
-you are using at run-time:
-
-   png_uint_32 libpng_vn = png_access_version_number();
-
-The number libpng_vn is constructed from the major version, minor
-version with leading zero, and release number with leading zero,
-(e.g., libpng_vn for version 1.0.7 is 10007).
-
-Note that this function does not take a png_ptr, so you can call it
-before you've created one.
-
-You can also check which version of png.h you used when compiling your
-application:
-
-   png_uint_32 application_vn = PNG_LIBPNG_VER;
-
-.SH IX.  Changes to Libpng from version 1.0.x to 1.2.x
-
-Support for user memory management was enabled by default.  To
-accomplish this, the functions png_create_read_struct_2(),
-png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
-png_malloc_default(), and png_free_default() were added.
-
-Support for the iTXt chunk has been enabled by default as of
-version 1.2.41.
-
-Support for certain MNG features was enabled.
-
-Support for numbered error messages was added.  However, we never got
-around to actually numbering the error messages.  The function
-png_set_strip_error_numbers() was added (Note: the prototype for this
-function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
-builds of libpng-1.2.15.  It was restored in libpng-1.2.36).
-
-The png_malloc_warn() function was added at libpng-1.2.3.  This issues
-a png_warning and returns NULL instead of aborting when it fails to
-acquire the requested memory allocation.
-
-Support for setting user limits on image width and height was enabled
-by default.  The functions png_set_user_limits(), png_get_user_width_max(),
-and png_get_user_height_max() were added at libpng-1.2.6.
-
-The png_set_add_alpha() function was added at libpng-1.2.7.
-
-The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
-Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
-tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
-deprecated.
-
-A number of macro definitions in support of runtime selection of
-assembler code features (especially Intel MMX code support) were
-added at libpng-1.2.0:
-
-    PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
-    PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
-    PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
-    PNG_ASM_FLAG_MMX_READ_INTERLACE
-    PNG_ASM_FLAG_MMX_READ_FILTER_SUB
-    PNG_ASM_FLAG_MMX_READ_FILTER_UP
-    PNG_ASM_FLAG_MMX_READ_FILTER_AVG
-    PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
-    PNG_ASM_FLAGS_INITIALIZED
-    PNG_MMX_READ_FLAGS
-    PNG_MMX_FLAGS
-    PNG_MMX_WRITE_FLAGS
-    PNG_MMX_FLAGS
-
-We added the following functions in support of runtime
-selection of assembler code features:
-
-    png_get_mmx_flagmask()
-    png_set_mmx_thresholds()
-    png_get_asm_flags()
-    png_get_mmx_bitdepth_threshold()
-    png_get_mmx_rowbytes_threshold()
-    png_set_asm_flags()
-
-We replaced all of these functions with simple stubs in libpng-1.2.20,
-when the Intel assembler code was removed due to a licensing issue.
-
-These macros are deprecated:
-
-    PNG_READ_TRANSFORMS_NOT_SUPPORTED
-    PNG_PROGRESSIVE_READ_NOT_SUPPORTED
-    PNG_NO_SEQUENTIAL_READ_SUPPORTED
-    PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
-    PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
-    PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
-
-They have been replaced, respectively, by:
-
-    PNG_NO_READ_TRANSFORMS
-    PNG_NO_PROGRESSIVE_READ
-    PNG_NO_SEQUENTIAL_READ
-    PNG_NO_WRITE_TRANSFORMS
-    PNG_NO_READ_ANCILLARY_CHUNKS
-    PNG_NO_WRITE_ANCILLARY_CHUNKS
-
-PNG_MAX_UINT was replaced with PNG_UINT_31_MAX.  It has been
-deprecated since libpng-1.0.16 and libpng-1.2.6.
-
-The function
-    png_check_sig(sig, num)
-was replaced with
-    !png_sig_cmp(sig, 0, num)
-It has been deprecated since libpng-0.90.
-
-The function
-    png_set_gray_1_2_4_to_8()
-which also expands tRNS to alpha was replaced with
-    png_set_expand_gray_1_2_4_to_8()
-which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
-
-.SH X.  Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
-
-Private libpng prototypes and macro definitions were moved from
-png.h and pngconf.h into a new pngpriv.h header file.
-
-Functions png_set_benign_errors(), png_benign_error(), and
-png_chunk_benign_error() were added.
-
-Support for setting the maximum amount of memory that the application
-will allocate for reading chunks was added, as a security measure.
-The functions png_set_chunk_cache_max() and png_get_chunk_cache_max()
-were added to the library.
-
-We implemented support for I/O states by adding png_ptr member io_state
-and functions png_get_io_chunk_name() and png_get_io_state() in pngget.c
-
-We added PNG_TRANSFORM_GRAY_TO_RGB to the available high-level
-input transforms.
-
-Checking for and reporting of errors in the IHDR chunk is more thorough.
-
-Support for global arrays was removed, to improve thread safety.
-
-Some obsolete/deprecated macros and functions have been removed.
-
-Typecasted NULL definitions such as
-   #define png_voidp_NULL            (png_voidp)NULL
-were eliminated.  If you used these in your application, just use
-NULL instead.
-
-The png_struct and info_struct members "trans" and "trans_values" were
-changed to "trans_alpha" and "trans_color", respectively.
-
-The obsolete, unused pnggccrd.c and pngvcrd.c files and related makefiles
-were removed.
-
-The PNG_1_0_X and PNG_1_2_X macros were eliminated.
-
-The PNG_LEGACY_SUPPORTED macro was eliminated.
-
-Many WIN32_WCE #ifdefs were removed.
-
-The functions png_read_init(info_ptr), png_write_init(info_ptr),
-png_info_init(info_ptr), png_read_destroy(), and png_write_destroy()
-have been removed.  They have been deprecated since libpng-0.95.
-
-The png_permit_empty_plte() was removed. It has been deprecated
-since libpng-1.0.9.  Use png_permit_mng_features() instead.
-
-We removed the obsolete stub functions png_get_mmx_flagmask(),
-png_set_mmx_thresholds(), png_get_asm_flags(),
-png_get_mmx_bitdepth_threshold(), png_get_mmx_rowbytes_threshold(),
-png_set_asm_flags(), and png_mmx_supported()
-
-We removed the obsolete png_check_sig(), png_memcpy_check(), and
-png_memset_check() functions.  Instead use !png_sig_cmp(), memcpy(),
-and memset(), respectively.
-
-The function png_set_gray_1_2_4_to_8() was removed. It has been
-deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
-png_set_expand_gray_1_2_4_to_8() because the former function also
-expanded any tRNS chunk to an alpha channel.
-
-Macros for png_get_uint_16, png_get_uint_32, and png_get_int_32
-were added and are used by default instead of the corresponding
-functions. Unfortunately,
-from libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-function) incorrectly returned a value of type png_uint_32.
-
-We changed the prototype for png_malloc() from
-    png_malloc(png_structp png_ptr, png_uint_32 size)
-to
-    png_malloc(png_structp png_ptr, png_alloc_size_t size)
-
-This also applies to the prototype for the user replacement malloc_fn().
-
-The png_calloc() function was added and is used in place of
-of "png_malloc(); memset();" except in the case in png_read_png()
-where the array consists of pointers; in this case a "for" loop is used
-after the png_malloc() to set the pointers to NULL, to give robust.
-behavior in case the application runs out of memory part-way through
-the process.
-
-We changed the prototypes of png_get_compression_buffer_size() and
-png_set_compression_buffer_size() to work with png_size_t instead of
-png_uint_32.
-
-Support for numbered error messages was removed by default, since we
-never got around to actually numbering the error messages. The function
-png_set_strip_error_numbers() was removed from the library by default.
-
-The png_zalloc() and png_zfree() functions are no longer exported.
-The png_zalloc() function no longer zeroes out the memory that it
-allocates.  Applications that called png_zalloc(png_ptr, number, size)
-can call png_calloc(png_ptr, number*size) instead, and can call
-png_free() instead of png_zfree().
-
-Support for dithering was disabled by default in libpng-1.4.0, because
-it has not been well tested and doesn't actually "dither".
-The code was not
-removed, however, and could be enabled by building libpng with
-PNG_READ_DITHER_SUPPORTED defined.  In libpng-1.4.2, this support
-was re-enabled, but the function was renamed png_set_quantize() to
-reflect more accurately what it actually does.  At the same time,
-the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros were also renamed to
-PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS, and PNG_READ_DITHER_SUPPORTED
-was renamed to PNG_READ_QUANTIZE_SUPPORTED.
-
-We removed the trailing '.' from the warning and error messages.
-
-.SH XI.  Changes to Libpng from version 1.4.x to 1.5.x
-
-From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-function) incorrectly returned a value of type png_uint_32.
-The incorrect macro was removed from libpng-1.4.5.
-
-Checking for invalid palette index on write was added at libpng
-1.5.10.  If a pixel contains an invalid (out-of-range) index libpng issues
-a benign error.  This is enabled by default because this condition is an
-error according to the PNG specification, Clause 11.3.2, but the error can
-be ignored in each png_ptr with
-
-   png_set_check_for_invalid_index(png_ptr, allowed);
-
-      allowed  - one of
-                 0: disable benign error (accept the
-                    invalid data without warning).
-                 1: enable benign error (treat the
-                    invalid data as an error or a
-                    warning).
-
-If the error is ignored, or if png_benign_error() treats it as a warning,
-any invalid pixels are decoded as opaque black by the decoder and written
-as-is by the encoder.
-
-Retrieving the maximum palette index found was added at libpng-1.5.15.
-This statement must appear after png_read_png() or png_read_image() while
-reading, and after png_write_png() or png_write_image() while writing.
-
-   int max_palette = png_get_palette_max(png_ptr, info_ptr);
-
-This will return the maximum palette index found in the image, or "\-1" if
-the palette was not checked, or "0" if no palette was found.  Note that this
-does not account for any palette index used by ancillary chunks such as the
-bKGD chunk; you must check those separately to determine the maximum
-palette index actually used.
-
-There are no substantial API changes between the non-deprecated parts of
-the 1.4.5 API and the 1.5.0 API; however, the ability to directly access
-members of the main libpng control structures, png_struct and png_info,
-deprecated in earlier versions of libpng, has been completely removed from
-libpng 1.5.
-
-We no longer include zlib.h in png.h.  The include statement has been moved
-to pngstruct.h, where it is not accessible by applications. Applications that
-need access to information in zlib.h will need to add the '#include "zlib.h"'
-directive.  It does not matter whether this is placed prior to or after
-the '"#include png.h"' directive.
-
-The png_sprintf(), png_strcpy(), and png_strncpy() macros are no longer used
-and were removed.
-
-We moved the png_strlen(), png_memcpy(), png_memset(), and png_memcmp()
-macros into a private header file (pngpriv.h) that is not accessible to
-applications.
-
-In png_get_iCCP, the type of "profile" was changed from png_charpp
-to png_bytepp, and in png_set_iCCP, from png_charp to png_const_bytep.
-
-There are changes of form in png.h, including new and changed macros to
-declare parts of the API.  Some API functions with arguments that are
-pointers to data not modified within the function have been corrected to
-declare these arguments with PNG_CONST.
-
-Much of the internal use of C macros to control the library build has also
-changed and some of this is visible in the exported header files, in
-particular the use of macros to control data and API elements visible
-during application compilation may require significant revision to
-application code.  (It is extremely rare for an application to do this.)
-
-Any program that compiled against libpng 1.4 and did not use deprecated
-features or access internal library structures should compile and work
-against libpng 1.5, except for the change in the prototype for
-png_get_iCCP() and png_set_iCCP() API functions mentioned above.
-
-libpng 1.5.0 adds PNG_ PASS macros to help in the reading and writing of
-interlaced images.  The macros return the number of rows and columns in
-each pass and information that can be used to de-interlace and (if
-absolutely necessary) interlace an image.
-
-libpng 1.5.0 adds an API png_longjmp(png_ptr, value).  This API calls
-the application-provided png_longjmp_ptr on the internal, but application
-initialized, longjmp buffer.  It is provided as a convenience to avoid
-the need to use the png_jmpbuf macro, which had the unnecessary side
-effect of resetting the internal png_longjmp_ptr value.
-
-libpng 1.5.0 includes a complete fixed point API.  By default this is
-present along with the corresponding floating point API.  In general the
-fixed point API is faster and smaller than the floating point one because
-the PNG file format used fixed point, not floating point.  This applies
-even if the library uses floating point in internal calculations.  A new
-macro, PNG_FLOATING_ARITHMETIC_SUPPORTED, reveals whether the library
-uses floating point arithmetic (the default) or fixed point arithmetic
-internally for performance critical calculations such as gamma correction.
-In some cases, the gamma calculations may produce slightly different
-results.  This has changed the results in png_rgb_to_gray and in alpha
-composition (png_set_background for example). This applies even if the
-original image was already linear (gamma == 1.0) and, therefore, it is
-not necessary to linearize the image.  This is because libpng has *not*
-been changed to optimize that case correctly, yet.
-
-Fixed point support for the sCAL chunk comes with an important caveat;
-the sCAL specification uses a decimal encoding of floating point values
-and the accuracy of PNG fixed point values is insufficient for
-representation of these values. Consequently a "string" API
-(png_get_sCAL_s and png_set_sCAL_s) is the only reliable way of reading
-arbitrary sCAL chunks in the absence of either the floating point API or
-internal floating point calculations.  Starting with libpng-1.5.0, both
-of these functions are present when PNG_sCAL_SUPPORTED is defined.  Prior
-to libpng-1.5.0, their presence also depended upon PNG_FIXED_POINT_SUPPORTED
-being defined and PNG_FLOATING_POINT_SUPPORTED not being defined.
-
-Applications no longer need to include the optional distribution header
-file pngusr.h or define the corresponding macros during application
-build in order to see the correct variant of the libpng API.  From 1.5.0
-application code can check for the corresponding _SUPPORTED macro:
-
-#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
-   /* code that uses the inch conversion APIs. */
-#endif
-
-This macro will only be defined if the inch conversion functions have been
-compiled into libpng.  The full set of macros, and whether or not support
-has been compiled in, are available in the header file pnglibconf.h.
-This header file is specific to the libpng build.  Notice that prior to
-1.5.0 the _SUPPORTED macros would always have the default definition unless
-reset by pngusr.h or by explicit settings on the compiler command line.
-These settings may produce compiler warnings or errors in 1.5.0 because
-of macro redefinition.
-
-Applications can now choose whether to use these macros or to call the
-corresponding function by defining PNG_USE_READ_MACROS or
-PNG_NO_USE_READ_MACROS before including png.h.  Notice that this is
-only supported from 1.5.0; defining PNG_NO_USE_READ_MACROS prior to 1.5.0
-will lead to a link failure.
-
-Prior to libpng-1.5.4, the zlib compressor used the same set of parameters
-when compressing the IDAT data and textual data such as zTXt and iCCP.
-In libpng-1.5.4 we reinitialized the zlib stream for each type of data.
-We added five png_set_text_*() functions for setting the parameters to
-use with textual data.
-
-Prior to libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-option was off by default, and slightly inaccurate scaling occurred.
-This option can no longer be turned off, and the choice of accurate
-or inaccurate 16-to-8 scaling is by using the new png_set_scale_16_to_8()
-API for accurate scaling or the old png_set_strip_16_to_8() API for simple
-chopping.  In libpng-1.5.4, the PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-macro became PNG_READ_SCALE_16_TO_8_SUPPORTED, and the PNG_READ_16_TO_8
-macro became PNG_READ_STRIP_16_TO_8_SUPPORTED, to enable the two
-png_set_*_16_to_8() functions separately.
-
-Prior to libpng-1.5.4, the png_set_user_limits() function could only be
-used to reduce the width and height limits from the value of
-PNG_USER_WIDTH_MAX and PNG_USER_HEIGHT_MAX, although this document said
-that it could be used to override them.  Now this function will reduce or
-increase the limits.
-
-Starting in libpng-1.5.10, the user limits can be set en masse with the
-configuration option PNG_SAFE_LIMITS_SUPPORTED.  If this option is enabled,
-a set of "safe" limits is applied in pngpriv.h.  These can be overridden by
-application calls to png_set_user_limits(), png_set_user_chunk_cache_max(),
-and/or png_set_user_malloc_max() that increase or decrease the limits.  Also,
-in libpng-1.5.10 the default width and height limits were increased
-from 1,000,000 to 0x7ffffff (i.e., made unlimited).  Therefore, the
-limits are now
-                               default      safe
-   png_user_width_max        0x7fffffff    1,000,000
-   png_user_height_max       0x7fffffff    1,000,000
-   png_user_chunk_cache_max  0 (unlimited)   128
-   png_user_chunk_malloc_max 0 (unlimited) 8,000,000
-
-The png_set_option() function (and the "options" member of the png struct) was
-added to libpng-1.5.15.
-
-The library now supports a complete fixed point implementation and can
-thus be used on systems that have no floating point support or very
-limited or slow support.  Previously gamma correction, an essential part
-of complete PNG support, required reasonably fast floating point.
-
-As part of this the choice of internal implementation has been made
-independent of the choice of fixed versus floating point APIs and all the
-missing fixed point APIs have been implemented.
-
-The exact mechanism used to control attributes of API functions has
-changed, as described in the INSTALL file.
-
-A new test program, pngvalid, is provided in addition to pngtest.
-pngvalid validates the arithmetic accuracy of the gamma correction
-calculations and includes a number of validations of the file format.
-A subset of the full range of tests is run when "make check" is done
-(in the 'configure' build.)  pngvalid also allows total allocated memory
-usage to be evaluated and performs additional memory overwrite validation.
-
-Many changes to individual feature macros have been made. The following
-are the changes most likely to be noticed by library builders who
-configure libpng:
-
-1) All feature macros now have consistent naming:
-
-#define PNG_NO_feature turns the feature off
-#define PNG_feature_SUPPORTED turns the feature on
-
-pnglibconf.h contains one line for each feature macro which is either:
-
-#define PNG_feature_SUPPORTED
-
-if the feature is supported or:
-
-/*#undef PNG_feature_SUPPORTED*/
-
-if it is not.  Library code consistently checks for the 'SUPPORTED' macro.
-It does not, and libpng applications should not, check for the 'NO' macro
-which will not normally be defined even if the feature is not supported.
-The 'NO' macros are only used internally for setting or not setting the
-corresponding 'SUPPORTED' macros.
-
-Compatibility with the old names is provided as follows:
-
-PNG_INCH_CONVERSIONS turns on PNG_INCH_CONVERSIONS_SUPPORTED
-
-And the following definitions disable the corresponding feature:
-
-PNG_SETJMP_NOT_SUPPORTED disables SETJMP
-PNG_READ_TRANSFORMS_NOT_SUPPORTED disables READ_TRANSFORMS
-PNG_NO_READ_COMPOSITED_NODIV disables READ_COMPOSITE_NODIV
-PNG_WRITE_TRANSFORMS_NOT_SUPPORTED disables WRITE_TRANSFORMS
-PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED disables READ_ANCILLARY_CHUNKS
-PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED disables WRITE_ANCILLARY_CHUNKS
-
-Library builders should remove use of the above, inconsistent, names.
-
-2) Warning and error message formatting was previously conditional on
-the STDIO feature. The library has been changed to use the
-CONSOLE_IO feature instead. This means that if CONSOLE_IO is disabled
-the library no longer uses the printf(3) functions, even though the
-default read/write implementations use (FILE) style stdio.h functions.
-
-3) Three feature macros now control the fixed/floating point decisions:
-
-PNG_FLOATING_POINT_SUPPORTED enables the floating point APIs
-
-PNG_FIXED_POINT_SUPPORTED enables the fixed point APIs; however, in
-practice these are normally required internally anyway (because the PNG
-file format is fixed point), therefore in most cases PNG_NO_FIXED_POINT
-merely stops the function from being exported.
-
-PNG_FLOATING_ARITHMETIC_SUPPORTED chooses between the internal floating
-point implementation or the fixed point one.  Typically the fixed point
-implementation is larger and slower than the floating point implementation
-on a system that supports floating point; however, it may be faster on a
-system which lacks floating point hardware and therefore uses a software
-emulation.
-
-4) Added PNG_{READ,WRITE}_INT_FUNCTIONS_SUPPORTED.  This allows the
-functions to read and write ints to be disabled independently of
-PNG_USE_READ_MACROS, which allows libpng to be built with the functions
-even though the default is to use the macros - this allows applications
-to choose at app buildtime whether or not to use macros (previously
-impossible because the functions weren't in the default build.)
-
-.SH XII.  Changes to Libpng from version 1.5.x to 1.6.x
-
-A "simplified API" has been added (see documentation in png.h and a simple
-example in contrib/examples/pngtopng.c).  The new publicly visible API
-includes the following:
-
-   macros:
-     PNG_FORMAT_*
-     PNG_IMAGE_*
-   structures:
-     png_control
-     png_image
-   read functions
-     png_image_begin_read_from_file()
-     png_image_begin_read_from_stdio()
-     png_image_begin_read_from_memory()
-     png_image_finish_read()
-     png_image_free()
-   write functions
-     png_image_write_to_file()
-     png_image_write_to_stdio()
-
-Starting with libpng-1.6.0, you can configure libpng to prefix all exported
-symbols, using the PNG_PREFIX macro.
-
-We no longer include string.h in png.h.  The include statement has been moved
-to pngpriv.h, where it is not accessible by applications.  Applications that
-need access to information in string.h must add an '#include <string.h>'
-directive.  It does not matter whether this is placed prior to or after
-the '#include "png.h"' directive.
-
-The following API are now DEPRECATED:
-   png_info_init_3()
-   png_convert_to_rfc1123() which has been replaced
-     with png_convert_to_rfc1123_buffer()
-   png_malloc_default()
-   png_free_default()
-   png_reset_zstream()
-
-The following have been removed:
-   png_get_io_chunk_name(), which has been replaced
-     with png_get_io_chunk_type().  The new
-     function returns a 32-bit integer instead of
-     a string.
-   The png_sizeof(), png_strlen(), png_memcpy(), png_memcmp(), and
-     png_memset() macros are no longer used in the libpng sources and
-     have been removed.  These had already been made invisible to applications
-     (i.e., defined in the private pngpriv.h header file) since libpng-1.5.0.
-
-The signatures of many exported functions were changed, such that
-   png_structp became png_structrp or png_const_structrp
-   png_infop became png_inforp or png_const_inforp
-where "rp" indicates a "restricted pointer".
-
-Error detection in some chunks has improved; in particular the iCCP chunk
-reader now does pretty complete validation of the basic format.  Some bad
-profiles that were previously accepted are now accepted with a warning or
-rejected, depending upon the png_set_benign_errors() setting, in particular
-the very old broken Microsoft/HP 3144-byte sRGB profile.  Starting with
-libpng-1.6.11, recognizing and checking sRGB profiles can be avoided by
-means of
-
-    #if defined(PNG_SKIP_sRGB_CHECK_PROFILE) && \
-        defined(PNG_SET_OPTION_SUPPORTED)
-       png_set_option(png_ptr, PNG_SKIP_sRGB_CHECK_PROFILE,
-           PNG_OPTION_ON);
-    #endif
-
-It's not a good idea to do this if you are using the new "simplified API",
-which needs to be able to recognize sRGB profiles conveyed via the iCCP
-chunk.
-
-The PNG spec requirement that only grayscale profiles may appear in images
-with color type 0 or 4 and that even if the image only contains gray pixels,
-only RGB profiles may appear in images with color type 2, 3, or 6, is now
-enforced.  The sRGB chunk is allowed to appear in images with any color type
-and is interpreted by libpng to convey a one-tracer-curve gray profile or a
-three-tracer-curve RGB profile as appropriate.
-
-Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
-an empty language field or an empty translated keyword.  Both of these
-are allowed by the PNG specification, so these warnings are no longer issued.
-
-The library now issues an error if the application attempts to set a
-transform after it calls png_read_update_info() or if it attempts to call
-both png_read_update_info() and png_start_read_image() or to call either
-of them more than once.
-
-The default condition for benign_errors is now to treat benign errors as
-warnings while reading and as errors while writing.
-
-The library now issues a warning if both background processing and RGB to
-gray are used when gamma correction happens. As with previous versions of
-the library the results are numerically very incorrect in this case.
-
-There are some minor arithmetic changes in some transforms such as
-png_set_background(), that might be detected by certain regression tests.
-
-Unknown chunk handling has been improved internally, without any API change.
-This adds more correct option control of the unknown handling, corrects
-a pre-existing bug where the per-chunk 'keep' setting is ignored, and makes
-it possible to skip IDAT chunks in the sequential reader.
-
-The machine-generated configure files are no longer included in branches
-libpng16 and later of the GIT repository.  They continue to be included
-in the tarball releases, however.
-
-Libpng-1.6.0 through 1.6.2 used the CMF bytes at the beginning of the IDAT
-stream to set the size of the sliding window for reading instead of using the
-default 32-kbyte sliding window size.  It was discovered that there are
-hundreds of PNG files in the wild that have incorrect CMF bytes that caused
-zlib to issue the "invalid distance too far back" error and reject the file.
-Libpng-1.6.3 and later calculate their own safe CMF from the image dimensions,
-provide a way to revert to the libpng-1.5.x behavior (ignoring the CMF bytes
-and using a 32-kbyte sliding window), by using
-
-    png_set_option(png_ptr, PNG_MAXIMUM_INFLATE_WINDOW,
-        PNG_OPTION_ON);
-
-and provide a tool (contrib/tools/pngfix) for rewriting a PNG file while
-optimizing the CMF bytes in its IDAT chunk correctly.
-
-Libpng-1.6.0 and libpng-1.6.1 wrote uncompressed iTXt chunks with the wrong
-length, which resulted in PNG files that cannot be read beyond the bad iTXt
-chunk.  This error was fixed in libpng-1.6.3, and a tool (called
-contrib/tools/png-fix-itxt) has been added to the libpng distribution.
-
-.SH XIII.  Detecting libpng
-
-The png_get_io_ptr() function has been present since libpng-0.88, has never
-changed, and is unaffected by conditional compilation macros.  It is the
-best choice for use in configure scripts for detecting the presence of any
-libpng version since 0.88.  In an autoconf "configure.in" you could use
-
-    AC_CHECK_LIB(png, png_get_io_ptr, ...
-
-.SH XV. Source code repository
-
-Since about February 2009, version 1.2.34, libpng has been under "git" source
-control.  The git repository was built from old libpng-x.y.z.tar.gz files
-going back to version 0.70.  You can access the git repository (read only)
-at
-
-    git://git.code.sf.net/p/libpng/code
-
-or you can browse it with a web browser by selecting the "code" button at
-
-    https://sourceforge.net/projects/libpng
-
-Patches can be sent to glennrp at users.sourceforge.net or to
-png-mng-implement at lists.sourceforge.net or you can upload them to
-the libpng bug tracker at
-
-    http://libpng.sourceforge.net
-
-We also accept patches built from the tar or zip distributions, and
-simple verbal discriptions of bug fixes, reported either to the
-SourceForge bug tracker, to the png-mng-implement at lists.sf.net
-mailing list, or directly to glennrp.
-
-.SH XV. Coding style
-
-Our coding style is similar to the "Allman" style
-(See http://en.wikipedia.org/wiki/Indent_style#Allman_style), with curly
-braces on separate lines:
-
-    if (condition)
-    {
-       action;
-    }
-
-    else if (another condition)
-    {
-       another action;
-    }
-
-The braces can be omitted from simple one-line actions:
-
-    if (condition)
-       return (0);
-
-We use 3-space indentation, except for continued statements which
-are usually indented the same as the first line of the statement
-plus four more spaces.
-
-For macro definitions we use 2-space indentation, always leaving the "#"
-in the first column.
-
-    #ifndef PNG_NO_FEATURE
-    #  ifndef PNG_FEATURE_SUPPORTED
-    #    define PNG_FEATURE_SUPPORTED
-    #  endif
-    #endif
-
-Comments appear with the leading "/*" at the same indentation as
-the statement that follows the comment:
-
-    /* Single-line comment */
-    statement;
-
-    /* This is a multiple-line
-     * comment.
-     */
-    statement;
-
-Very short comments can be placed after the end of the statement
-to which they pertain:
-
-    statement;    /* comment */
-
-We don't use C++ style ("//") comments. We have, however,
-used them in the past in some now-abandoned MMX assembler
-code.
-
-Functions and their curly braces are not indented, and
-exported functions are marked with PNGAPI:
-
- /* This is a public function that is visible to
-  * application programmers. It does thus-and-so.
-  */
- void PNGAPI
- png_exported_function(png_ptr, png_info, foo)
- {
-    body;
- }
-
-The return type and decorations are placed on a separate line
-ahead of the function name, as illustrated above.
-
-The prototypes for all exported functions appear in png.h,
-above the comment that says
-
-    /* Maintainer: Put new public prototypes here ... */
-
-We mark all non-exported functions with "/* PRIVATE */"":
-
- void /* PRIVATE */
- png_non_exported_function(png_ptr, png_info, foo)
- {
-    body;
- }
-
-The prototypes for non-exported functions (except for those in
-pngtest) appear in pngpriv.h above the comment that says
-
-  /* Maintainer: Put new private prototypes here ^ */
-
-To avoid polluting the global namespace, the names of all exported
-functions and variables begin with "png_", and all publicly visible C
-preprocessor macros begin with "PNG".  We request that applications that
-use libpng *not* begin any of their own symbols with either of these strings.
-
-We put a space after the "sizeof" operator and we omit the
-optional parentheses around its argument when the argument
-is an expression, not a type name, and we always enclose the
-sizeof operator, with its argument, in parentheses:
-
-  (sizeof (png_uint_32))
-  (sizeof array)
-
-Prior to libpng-1.6.0 we used a "png_sizeof()" macro, formatted as
-though it were a function.
-
-Control keywords if, for, while, and switch are always followed by a space
-to distinguish them from function calls, which have no trailing space. 
-
-We put a space after each comma and after each semicolon
-in "for" statements, and we put spaces before and after each
-C binary operator and after "for" or "while", and before
-"?".  We don't put a space between a typecast and the expression
-being cast, nor do we put one between a function name and the
-left parenthesis that follows it:
-
-    for (i = 2; i > 0; \-\-i)
-       y[i] = a(x) + (int)b;
-
-We prefer #ifdef and #ifndef to #if defined() and #if !defined()
-when there is only one macro being tested.  We always use parentheses
-with "defined".
-
-We prefer to express integers that are used as bit masks in hex format,
-with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
-
-We prefer to use underscores in variable names rather than camelCase, except
-for a few type names that we inherit from zlib.h.
-
-We prefer "if (something != 0)" and "if (something == 0)"
-over "if (something)" and if "(!something)", respectively.
-
-We do not use the TAB character for indentation in the C sources.
-
-Lines do not exceed 80 characters.
-
-Other rules can be inferred by inspecting the libpng source.
-
-.SH XVI. Y2K Compliance in libpng
-
-December 22, 2014
-
-Since the PNG Development group is an ad-hoc body, we can't make
-an official declaration.
-
-This is your unofficial assurance that libpng from version 0.71 and
-upward through 1.6.16 are Y2K compliant.  It is my belief that earlier
-versions were also Y2K compliant.
-
-Libpng only has two year fields.  One is a 2-byte unsigned integer
-that will hold years up to 65535.  The other, which is deprecated,
-holds the date in text format, and will hold years up to 9999.
-
-The integer is
-    "png_uint_16 year" in png_time_struct.
-
-The string is
-    "char time_buffer[29]" in png_struct.  This is no longer used
-in libpng-1.6.x and will be removed from libpng-1.7.0.
-
-There are seven time-related functions:
-
-    png_convert_to_rfc_1123_buffer() in png.c
-      (formerly png_convert_to_rfc_1152() in error, and
-      also formerly png_convert_to_rfc_1123())
-    png_convert_from_struct_tm() in pngwrite.c, called
-      in pngwrite.c
-    png_convert_from_time_t() in pngwrite.c
-    png_get_tIME() in pngget.c
-    png_handle_tIME() in pngrutil.c, called in pngread.c
-    png_set_tIME() in pngset.c
-    png_write_tIME() in pngwutil.c, called in pngwrite.c
-
-All appear to handle dates properly in a Y2K environment.  The
-png_convert_from_time_t() function calls gmtime() to convert from system
-clock time, which returns (year - 1900), which we properly convert to
-the full 4-digit year.  There is a possibility that applications using
-libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
-function, or that they are incorrectly passing only a 2-digit year
-instead of "year - 1900" into the png_convert_from_struct_tm() function,
-but this is not under our control.  The libpng documentation has always
-stated that it works with 4-digit years, and the APIs have been
-documented as such.
-
-The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
-integer to hold the year, and can hold years as large as 65535.
-
-zlib, upon which libpng depends, is also Y2K compliant.  It contains
-no date-related code.
-
-
-   Glenn Randers-Pehrson
-   libpng maintainer
-   PNG Development Group
-
-.SH NOTE
-
-Note about libpng version numbers:
-
-Due to various miscommunications, unforeseen code incompatibilities
-and occasional factors outside the authors' control, version numbering
-on the library has not always been consistent and straightforward.
-The following table summarizes matters since version 0.89c, which was
-the first widely used release:
-
- source             png.h  png.h  shared-lib
- version            string   int  version
- -------            ------  ----- ----------
- 0.89c ("beta 3")  0.89       89  1.0.89
- 0.90  ("beta 4")  0.90       90  0.90
- 0.95  ("beta 5")  0.95       95  0.95
- 0.96  ("beta 6")  0.96       96  0.96
- 0.97b ("beta 7")  1.00.97    97  1.0.1
- 0.97c             0.97       97  2.0.97
- 0.98              0.98       98  2.0.98
- 0.99              0.99       98  2.0.99
- 0.99a-m           0.99       99  2.0.99
- 1.00              1.00      100  2.1.0
- 1.0.0             1.0.0     100  2.1.0
- 1.0.0   (from here on, the  100  2.1.0
- 1.0.1    png.h string is  10001  2.1.0
- 1.0.1a-e identical to the 10002  from here on, the
- 1.0.2    source version)  10002  shared library is 2.V
- 1.0.2a-b                  10003  where V is the source
- 1.0.1                     10001  code version except as
- 1.0.1a-e                  10002  2.1.0.1a-e   noted.
- 1.0.2                     10002  2.1.0.2
- 1.0.2a-b                  10003  2.1.0.2a-b
- 1.0.3                     10003  2.1.0.3
- 1.0.3a-d                  10004  2.1.0.3a-d
- 1.0.4                     10004  2.1.0.4
- 1.0.4a-f                  10005  2.1.0.4a-f
- 1.0.5 (+ 2 patches)       10005  2.1.0.5
- 1.0.5a-d                  10006  2.1.0.5a-d
- 1.0.5e-r                  10100  2.1.0.5e-r
- 1.0.5s-v                  10006  2.1.0.5s-v
- 1.0.6 (+ 3 patches)       10006  2.1.0.6
- 1.0.6d-g                  10007  2.1.0.6d-g
- 1.0.6h                    10007  10.6h
- 1.0.6i                    10007  10.6i
- 1.0.6j                    10007  2.1.0.6j
- 1.0.7beta11-14    DLLNUM  10007  2.1.0.7beta11-14
- 1.0.7beta15-18       1    10007  2.1.0.7beta15-18
- 1.0.7rc1-2           1    10007  2.1.0.7rc1-2
- 1.0.7                1    10007  2.1.0.7
- 1.0.8beta1-4         1    10008  2.1.0.8beta1-4
- 1.0.8rc1             1    10008  2.1.0.8rc1
- 1.0.8                1    10008  2.1.0.8
- 1.0.9beta1-6         1    10009  2.1.0.9beta1-6
- 1.0.9rc1             1    10009  2.1.0.9rc1
- 1.0.9beta7-10        1    10009  2.1.0.9beta7-10
- 1.0.9rc2             1    10009  2.1.0.9rc2
- 1.0.9                1    10009  2.1.0.9
- 1.0.10beta1          1    10010  2.1.0.10beta1
- 1.0.10rc1            1    10010  2.1.0.10rc1
- 1.0.10               1    10010  2.1.0.10
- 1.0.11beta1-3        1    10011  2.1.0.11beta1-3
- 1.0.11rc1            1    10011  2.1.0.11rc1
- 1.0.11               1    10011  2.1.0.11
- 1.0.12beta1-2        2    10012  2.1.0.12beta1-2
- 1.0.12rc1            2    10012  2.1.0.12rc1
- 1.0.12               2    10012  2.1.0.12
- 1.1.0a-f             -    10100  2.1.1.0a-f abandoned
- 1.2.0beta1-2         2    10200  2.1.2.0beta1-2
- 1.2.0beta3-5         3    10200  3.1.2.0beta3-5
- 1.2.0rc1             3    10200  3.1.2.0rc1
- 1.2.0                3    10200  3.1.2.0
- 1.2.1beta-4          3    10201  3.1.2.1beta1-4
- 1.2.1rc1-2           3    10201  3.1.2.1rc1-2
- 1.2.1                3    10201  3.1.2.1
- 1.2.2beta1-6        12    10202  12.so.0.1.2.2beta1-6
- 1.0.13beta1         10    10013  10.so.0.1.0.13beta1
- 1.0.13rc1           10    10013  10.so.0.1.0.13rc1
- 1.2.2rc1            12    10202  12.so.0.1.2.2rc1
- 1.0.13              10    10013  10.so.0.1.0.13
- 1.2.2               12    10202  12.so.0.1.2.2
- 1.2.3rc1-6          12    10203  12.so.0.1.2.3rc1-6
- 1.2.3               12    10203  12.so.0.1.2.3
- 1.2.4beta1-3        13    10204  12.so.0.1.2.4beta1-3
- 1.2.4rc1            13    10204  12.so.0.1.2.4rc1
- 1.0.14              10    10014  10.so.0.1.0.14
- 1.2.4               13    10204  12.so.0.1.2.4
- 1.2.5beta1-2        13    10205  12.so.0.1.2.5beta1-2
- 1.0.15rc1           10    10015  10.so.0.1.0.15rc1
- 1.0.15              10    10015  10.so.0.1.0.15
- 1.2.5               13    10205  12.so.0.1.2.5
- 1.2.6beta1-4        13    10206  12.so.0.1.2.6beta1-4
- 1.2.6rc1-5          13    10206  12.so.0.1.2.6rc1-5
- 1.0.16              10    10016  10.so.0.1.0.16
- 1.2.6               13    10206  12.so.0.1.2.6
- 1.2.7beta1-2        13    10207  12.so.0.1.2.7beta1-2
- 1.0.17rc1           10    10017  12.so.0.1.0.17rc1
- 1.2.7rc1            13    10207  12.so.0.1.2.7rc1
- 1.0.17              10    10017  12.so.0.1.0.17
- 1.2.7               13    10207  12.so.0.1.2.7
- 1.2.8beta1-5        13    10208  12.so.0.1.2.8beta1-5
- 1.0.18rc1-5         10    10018  12.so.0.1.0.18rc1-5
- 1.2.8rc1-5          13    10208  12.so.0.1.2.8rc1-5
- 1.0.18              10    10018  12.so.0.1.0.18
- 1.2.8               13    10208  12.so.0.1.2.8
- 1.2.9beta1-3        13    10209  12.so.0.1.2.9beta1-3
- 1.2.9beta4-11       13    10209  12.so.0.9[.0]
- 1.2.9rc1            13    10209  12.so.0.9[.0]
- 1.2.9               13    10209  12.so.0.9[.0]
- 1.2.10beta1-7       13    10210  12.so.0.10[.0]
- 1.2.10rc1-2         13    10210  12.so.0.10[.0]
- 1.2.10              13    10210  12.so.0.10[.0]
- 1.4.0beta1-6        14    10400  14.so.0.0[.0]
- 1.2.11beta1-4       13    10210  12.so.0.11[.0]
- 1.4.0beta7-8        14    10400  14.so.0.0[.0]
- 1.2.11              13    10211  12.so.0.11[.0]
- 1.2.12              13    10212  12.so.0.12[.0]
- 1.4.0beta9-14       14    10400  14.so.0.0[.0]
- 1.2.13              13    10213  12.so.0.13[.0]
- 1.4.0beta15-36      14    10400  14.so.0.0[.0]
- 1.4.0beta37-87      14    10400  14.so.14.0[.0]
- 1.4.0rc01           14    10400  14.so.14.0[.0]
- 1.4.0beta88-109     14    10400  14.so.14.0[.0]
- 1.4.0rc02-08        14    10400  14.so.14.0[.0]
- 1.4.0               14    10400  14.so.14.0[.0]
- 1.4.1beta01-03      14    10401  14.so.14.1[.0]
- 1.4.1rc01           14    10401  14.so.14.1[.0]
- 1.4.1beta04-12      14    10401  14.so.14.1[.0]
- 1.4.1               14    10401  14.so.14.1[.0]
- 1.4.2               14    10402  14.so.14.2[.0]
- 1.4.3               14    10403  14.so.14.3[.0]
- 1.4.4               14    10404  14.so.14.4[.0]
- 1.5.0beta01-58      15    10500  15.so.15.0[.0]
- 1.5.0rc01-07        15    10500  15.so.15.0[.0]
- 1.5.0               15    10500  15.so.15.0[.0]
- 1.5.1beta01-11      15    10501  15.so.15.1[.0]
- 1.5.1rc01-02        15    10501  15.so.15.1[.0]
- 1.5.1               15    10501  15.so.15.1[.0]
- 1.5.2beta01-03      15    10502  15.so.15.2[.0]
- 1.5.2rc01-03        15    10502  15.so.15.2[.0]
- 1.5.2               15    10502  15.so.15.2[.0]
- 1.5.3beta01-10      15    10503  15.so.15.3[.0]
- 1.5.3rc01-02        15    10503  15.so.15.3[.0]
- 1.5.3beta11         15    10503  15.so.15.3[.0]
- 1.5.3 [omitted]
- 1.5.4beta01-08      15    10504  15.so.15.4[.0]
- 1.5.4rc01           15    10504  15.so.15.4[.0]
- 1.5.4               15    10504  15.so.15.4[.0]
- 1.5.5beta01-08      15    10505  15.so.15.5[.0]
- 1.5.5rc01           15    10505  15.so.15.5[.0]
- 1.5.5               15    10505  15.so.15.5[.0]
- 1.5.6beta01-07      15    10506  15.so.15.6[.0]
- 1.5.6rc01-03        15    10506  15.so.15.6[.0]
- 1.5.6               15    10506  15.so.15.6[.0]
- 1.5.7beta01-05      15    10507  15.so.15.7[.0]
- 1.5.7rc01-03        15    10507  15.so.15.7[.0]
- 1.5.7               15    10507  15.so.15.7[.0]
- 1.6.0beta01-40      16    10600  16.so.16.0[.0]
- 1.6.0rc01-08        16    10600  16.so.16.0[.0]
- 1.6.0               16    10600  16.so.16.0[.0]
- 1.6.1beta01-09      16    10601  16.so.16.1[.0]
- 1.6.1rc01           16    10601  16.so.16.1[.0]
- 1.6.1               16    10601  16.so.16.1[.0]
- 1.6.2beta01         16    10602  16.so.16.2[.0]
- 1.6.2rc01-06        16    10602  16.so.16.2[.0]
- 1.6.2               16    10602  16.so.16.2[.0]
- 1.6.3beta01-11      16    10603  16.so.16.3[.0]
- 1.6.3rc01           16    10603  16.so.16.3[.0]
- 1.6.3               16    10603  16.so.16.3[.0]
- 1.6.4beta01-02      16    10604  16.so.16.4[.0]
- 1.6.4rc01           16    10604  16.so.16.4[.0]
- 1.6.4               16    10604  16.so.16.4[.0]
- 1.6.5               16    10605  16.so.16.5[.0]
- 1.6.6               16    10606  16.so.16.6[.0]
- 1.6.7beta01-04      16    10607  16.so.16.7[.0]
- 1.6.7rc01-02        16    10607  16.so.16.7[.0]
- 1.6.7               16    10607  16.so.16.7[.0]
- 1.6.8beta01-02      16    10608  16.so.16.8[.0]
- 1.6.8rc01-02        16    10608  16.so.16.8[.0]
- 1.6.8               16    10608  16.so.16.8[.0]
- 1.6.9beta01-04      16    10609  16.so.16.9[.0]
- 1.6.9rc01-02        16    10609  16.so.16.9[.0]
- 1.6.9               16    10609  16.so.16.9[.0]
- 1.6.10beta01-03     16    10610  16.so.16.10[.0]
- 1.6.10rc01-03       16    10610  16.so.16.10[.0]
- 1.6.10              16    10610  16.so.16.10[.0]
- 1.6.11beta01-06     16    10611  16.so.16.11[.0]
- 1.6.11rc01-02       16    10611  16.so.16.11[.0]
- 1.6.11              16    10611  16.so.16.11[.0]
- 1.6.12rc01          16    10612  16.so.16.12[.0]
- 1.6.12              16    10612  16.so.16.12[.0]
- 1.6.13beta01-04     16    10613  16.so.16.13[.0]
- 1.6.13rc01-02       16    10613  16.so.16.13[.0]
- 1.6.13              16    10613  16.so.16.13[.0]
- 1.6.14beta01-07     16    10614  16.so.16.14[.0]
- 1.6.14rc01-02       16    10614  16.so.16.14[.0]
- 1.6.14              16    10614  16.so.16.14[.0]
- 1.6.15beta01-08     16    10615  16.so.16.15[.0]
- 1.6.15rc01-03       16    10615  16.so.16.15[.0]
- 1.6.15              16    10615  16.so.16.15[.0]
- 1.6.16beta01-03     16    10616  16.so.16.16[.0]
- 1.6.16rc01-02       16    10616  16.so.16.16[.0]
- 1.6.16              16    10616  16.so.16.16[.0]
-
-Henceforth the source version will match the shared-library minor
-and patch numbers; the shared-library major version number will be
-used for changes in backward compatibility, as it is intended.  The
-PNG_PNGLIB_VER macro, which is not used within libpng but is available
-for applications, is an unsigned integer of the form xyyzz corresponding
-to the source version x.y.z (leading zeros in y and z).  Beta versions
-were given the previous public release number plus a letter, until
-version 1.0.6j; from then on they were given the upcoming public
-release number plus "betaNN" or "rcN".
-
-.SH "SEE ALSO"
-.BR "png"(5), " libpngpf"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5)
-
-.LP
-.IR libpng :
-.IP
-http://libpng.sourceforge.net (follow the [DOWNLOAD] link)
-http://www.libpng.org/pub/png
-
-.LP
-.IR zlib :
-.IP
-(generally) at the same location as
-.I libpng
-or at
-.br
-ftp://ftp.info-zip.org/pub/infozip/zlib
-
-.LP
-.IR PNG specification: RFC 2083
-.IP
-(generally) at the same location as
-.I libpng
-or at
-.br
-ftp://ds.internic.net/rfc/rfc2083.txt
-.br
-or (as a W3C Recommendation) at
-.br
-http://www.w3.org/TR/REC-png.html
-
-.LP
-In the case of any inconsistency between the PNG specification
-and this library, the specification takes precedence.
-
-.SH AUTHORS
-This man page: Glenn Randers-Pehrson
-<glennrp at users.sourceforge.net>
-
-The contributing authors would like to thank all those who helped
-with testing, bug fixes, and patience.  This wouldn't have been
-possible without all of you.
-
-Thanks to Frank J. T. Wojcik for helping with the documentation.
-
-Libpng version 1.6.16 - December 22, 2014:
-Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
-Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
-
-Supported by the PNG development group
-.br
-png-mng-implement at lists.sf.net
-(subscription required; visit
-png-mng-implement at lists.sourceforge.net (subscription required; visit
-https://lists.sourceforge.net/lists/listinfo/png-mng-implement
-to subscribe).
-
-.SH COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
-
-(This copy of the libpng notices is provided for your convenience.  In case of
-any discrepancy between this copy and the notices in the file png.h that is
-included in the libpng distribution, the latter shall prevail.)
-
-If you modify libpng you may insert additional notices immediately following
-this sentence.
-
-This code is released under the libpng license.
-
-libpng versions 1.2.6, August 15, 2004, through 1.6.16, December 22, 2014, are
-Copyright (c) 2004,2006-2014 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.2.5
-with the following individual added to the list of Contributing Authors
-
-   Cosmin Truta
-
-libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
-Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
-distributed according to the same disclaimer and license as libpng-1.0.6
-with the following individuals added to the list of Contributing Authors
-
-   Simon-Pierre Cadieux
-   Eric S. Raymond
-   Gilles Vollant
-
-and with the following additions to the disclaimer:
-
-   There is no warranty against interference with your
-   enjoyment of the library or against infringement.
-   There is no warranty that our efforts or the library
-   will fulfill any of your particular purposes or needs.
-   This library is provided with all faults, and the entire
-   risk of satisfactory quality, performance, accuracy, and
-   effort is with the user.
-
-libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
-Copyright (c) 1998, 1999 Glenn Randers-Pehrson
-Distributed according to the same disclaimer and license as libpng-0.96,
-with the following individuals added to the list of Contributing Authors:
-
-   Tom Lane
-   Glenn Randers-Pehrson
-   Willem van Schaik
-
-libpng versions 0.89, June 1996, through 0.96, May 1997, are
-Copyright (c) 1996, 1997 Andreas Dilger
-Distributed according to the same disclaimer and license as libpng-0.88,
-with the following individuals added to the list of Contributing Authors:
-
-   John Bowler
-   Kevin Bracey
-   Sam Bushell
-   Magnus Holmgren
-   Greg Roelofs
-   Tom Tanner
-
-libpng versions 0.5, May 1995, through 0.88, January 1996, are
-Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
-
-For the purposes of this copyright and license, "Contributing Authors"
-is defined as the following set of individuals:
-
-   Andreas Dilger
-   Dave Martindale
-   Guy Eric Schalnat
-   Paul Schmidt
-   Tim Wegner
-
-The PNG Reference Library is supplied "AS IS".  The Contributing Authors
-and Group 42, Inc. disclaim all warranties, expressed or implied,
-including, without limitation, the warranties of merchantability and of
-fitness for any purpose.  The Contributing Authors and Group 42, Inc.
-assume no liability for direct, indirect, incidental, special, exemplary,
-or consequential damages, which may result from the use of the PNG
-Reference Library, even if advised of the possibility of such damage.
-
-Permission is hereby granted to use, copy, modify, and distribute this
-source code, or portions hereof, for any purpose, without fee, subject
-to the following restrictions:
-
-1. The origin of this source code must not be misrepresented.
-
-2. Altered versions must be plainly marked as such and
-   must not be misrepresented as being the original source.
-
-3. This Copyright notice may not be removed or altered from
-   any source or altered source distribution.
-
-The Contributing Authors and Group 42, Inc. specifically permit, without
-fee, and encourage the use of this source code as a component to
-supporting the PNG file format in commercial products.  If you use this
-source code in a product, acknowledgment is not required but would be
-appreciated.
-
-
-A "png_get_copyright" function is available, for convenient use in "about"
-boxes and the like:
-
-   printf("%s",png_get_copyright(NULL));
-
-Also, the PNG logo (in PNG format, of course) is supplied in the
-files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
-
-Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
-certification mark of the Open Source Initiative.
-
-Glenn Randers-Pehrson
-glennrp at users.sourceforge.net
-December 22, 2014
-
-.\" end of man page
-
--- a/DoConfig/fltk/png/libpngpf.3
+++ /dev/null
@@ -1,18 +1,0 @@
-.TH LIBPNGPF 3 "December 22, 2014"
-.SH NAME
-libpng \- Portable Network Graphics (PNG) Reference Library 1.6.16
-(private functions)
-.SH SYNOPSIS
-\fB#include \fI"pngpriv.h"
-
-\fBAs of libpng version \fP\fI1.5.1\fP\fB, this section is no longer \fP\fImaintained\fP\fB, now that the private function prototypes are hidden in pngpriv.h and not accessible to applications. Look in pngpriv.h for the prototypes and a short description of each \fIfunction.
-
-.SH DESCRIPTION
-The functions previously listed here are used privately by libpng and are not
-available for use by applications.  They are not "exported" to applications
-using shared libraries.
-
-.SH SEE ALSO
-.BR "png"(5), " libpng"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5)
-.SH AUTHOR
-Glenn Randers-Pehrson
--- a/DoConfig/fltk/png/makedepend
+++ /dev/null
@@ -1,32 +1,0 @@
-# DO NOT DELETE
-
-png.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-png.o: pngdebug.h
-pngset.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngset.o: pngdebug.h
-pngget.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngget.o: pngdebug.h
-pngrutil.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngrutil.o: pngdebug.h
-pngtrans.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngtrans.o: pngdebug.h
-pngwutil.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngwutil.o: pngdebug.h
-pngread.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngread.o: pngdebug.h
-pngrio.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngrio.o: pngdebug.h
-pngwio.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngwio.o: pngdebug.h
-pngwrite.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngwrite.o: pngdebug.h
-pngrtran.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngrtran.o: pngdebug.h
-pngwtran.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngwtran.o: pngdebug.h
-pngmem.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngmem.o: pngdebug.h
-pngerror.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngerror.o: pngdebug.h
-pngpread.o: pngpriv.h pnglibconf.h png.h pngconf.h pngstruct.h pnginfo.h
-pngpread.o: pngdebug.h
--- a/DoConfig/fltk/png/png.5
+++ /dev/null
@@ -1,74 +1,0 @@
-.TH PNG 5 "December 22, 2014"
-.SH NAME
-png \- Portable Network Graphics (PNG) format
-.SH DESCRIPTION
-PNG (Portable Network Graphics) is an extensible file format for the
-lossless, portable, well-compressed storage of raster images. PNG provides
-a patent-free replacement for GIF and can also replace many
-common uses of TIFF. Indexed-color, grayscale, and truecolor images are
-supported, plus an optional alpha channel. Sample depths range from
-1 to 16 bits.
-.br
-
-PNG is designed to work well in online viewing applications, such as the
-World Wide Web, so it is fully streamable with a progressive display
-option. PNG is robust, providing both full file integrity checking and
-fast, simple detection of common transmission errors. Also, PNG can store
-gamma and chromaticity data for improved color matching on heterogeneous
-platforms.
-
-.SH "SEE ALSO"
-.BR "libpng"(3), " libpngpf"(3), " zlib"(3), " deflate"(5), " " and " zlib"(5)
-.LP
-PNG specification (second edition), November 2003:
-.IP
-.br
-  <http://www.w3.org/TR/2003/REC-PNG-20031110/
-PNG 1.2 specification, July 1999:
-.IP
-.br
-http://www.libpng.org/pub/png
-.LP
-PNG 1.0 specification, October 1996:
-.IP
-.br
-RFC 2083
-.IP
-.br
-ftp://ds.internic.net/rfc/rfc2083.txt
-.br
-or (as a W3C Recommendation) at
-.br
-http://www.w3.org/TR/REC-png.html
-.SH AUTHORS
-This man page: Glenn Randers-Pehrson
-.LP
-Portable Network Graphics (PNG) Specification (Second Edition)
-Information technology - Computer graphics and image processing -
-Portable Network Graphics (PNG): Functional specification.
-ISO/IEC 15948:2003 (E) (November 10, 2003): David Duce and others.
-.LP
-Portable Network Graphics (PNG) Specification Version 1.2 (July 8, 1999):
-Glenn Randers-Pehrson and others (png-list).
-.LP
-Portable Network Graphics (PNG) Specification Version 1.0 (October 1, 1996):
-Thomas Boutell and others (png-list).
-.LP
-
-
-.SH COPYRIGHT NOTICE
-.LP
-This man page is Copyright (c) 1998-2006 Glenn Randers-Pehrson.  See png.h
-for conditions of use and distribution.
-.LP
-The PNG Specification (Second Edition) is
-Copyright (c) 2003 W3C. (MIT, ERCIM, Keio), All Rights Reserved.
-.LP
-The PNG-1.2 specification is copyright (c) 1999 Glenn Randers-Pehrson.
-See the specification for conditions of use and distribution.
-.LP
-The PNG-1.0 specification is copyright (c) 1996 Massachusetts Institute of
-Technology.  See the specification for conditions of use and distribution.
-.LP
-.\" end of man page
-
--- a/DoConfig/fltk/png/png.c
+++ /dev/null
@@ -1,4493 +1,0 @@
-
-/* png.c - location for general purpose libpng functions
- *
- * Last changed in libpng 1.6.16 [December 22, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_16 Your_png_h_is_not_version_1_6_16;
-
-/* Tells libpng that we have already handled the first "num_bytes" bytes
- * of the PNG file signature.  If the PNG data is embedded into another
- * stream we can set num_bytes = 8 so that libpng will not attempt to read
- * or write any of the magic bytes before it starts on the IHDR.
- */
-
-#ifdef PNG_READ_SUPPORTED
-void PNGAPI
-png_set_sig_bytes(png_structrp png_ptr, int num_bytes)
-{
-   png_debug(1, "in png_set_sig_bytes");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (num_bytes > 8)
-      png_error(png_ptr, "Too many bytes for PNG signature");
-
-   png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes);
-}
-
-/* Checks whether the supplied bytes match the PNG signature.  We allow
- * checking less than the full 8-byte signature so that those apps that
- * already read the first few bytes of a file to determine the file type
- * can simply check the remaining bytes for extra assurance.  Returns
- * an integer less than, equal to, or greater than zero if sig is found,
- * respectively, to be less than, to match, or be greater than the correct
- * PNG signature (this is the same behavior as strcmp, memcmp, etc).
- */
-int PNGAPI
-png_sig_cmp(png_const_bytep sig, png_size_t start, png_size_t num_to_check)
-{
-   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-
-   if (num_to_check > 8)
-      num_to_check = 8;
-
-   else if (num_to_check < 1)
-      return (-1);
-
-   if (start > 7)
-      return (-1);
-
-   if (start + num_to_check > 8)
-      num_to_check = 8 - start;
-
-   return ((int)(memcmp(&sig[start], &png_signature[start], num_to_check)));
-}
-
-#endif /* READ */
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Function to allocate memory for zlib */
-PNG_FUNCTION(voidpf /* PRIVATE */,
-png_zalloc,(voidpf png_ptr, uInt items, uInt size),PNG_ALLOCATED)
-{
-   png_alloc_size_t num_bytes = size;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   if (items >= (~(png_alloc_size_t)0)/size)
-   {
-      png_warning (png_voidcast(png_structrp, png_ptr),
-         "Potential overflow in png_zalloc()");
-      return NULL;
-   }
-
-   num_bytes *= items;
-   return png_malloc_warn(png_voidcast(png_structrp, png_ptr), num_bytes);
-}
-
-/* Function to free memory for zlib */
-void /* PRIVATE */
-png_zfree(voidpf png_ptr, voidpf ptr)
-{
-   png_free(png_voidcast(png_const_structrp,png_ptr), ptr);
-}
-
-/* Reset the CRC variable to 32 bits of 1's.  Care must be taken
- * in case CRC is > 32 bits to leave the top bits 0.
- */
-void /* PRIVATE */
-png_reset_crc(png_structrp png_ptr)
-{
-   /* The cast is safe because the crc is a 32 bit value. */
-   png_ptr->crc = (png_uint_32)crc32(0, Z_NULL, 0);
-}
-
-/* Calculate the CRC over a section of data.  We can only pass as
- * much data to this routine as the largest single buffer size.  We
- * also check that this data will actually be used before going to the
- * trouble of calculating it.
- */
-void /* PRIVATE */
-png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
-{
-   int need_crc = 1;
-
-   if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name) != 0)
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
-          (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
-         need_crc = 0;
-   }
-
-   else /* critical */
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) != 0)
-         need_crc = 0;
-   }
-
-   /* 'uLong' is defined in zlib.h as unsigned long; this means that on some
-    * systems it is a 64 bit value.  crc32, however, returns 32 bits so the
-    * following cast is safe.  'uInt' may be no more than 16 bits, so it is
-    * necessary to perform a loop here.
-    */
-   if (need_crc != 0 && length > 0)
-   {
-      uLong crc = png_ptr->crc; /* Should never issue a warning */
-
-      do
-      {
-         uInt safe_length = (uInt)length;
-         if (safe_length == 0)
-            safe_length = (uInt)-1; /* evil, but safe */
-
-         crc = crc32(crc, ptr, safe_length);
-
-         /* The following should never issue compiler warnings; if they do the
-          * target system has characteristics that will probably violate other
-          * assumptions within the libpng code.
-          */
-         ptr += safe_length;
-         length -= safe_length;
-      }
-      while (length > 0);
-
-      /* And the following is always safe because the crc is only 32 bits. */
-      png_ptr->crc = (png_uint_32)crc;
-   }
-}
-
-/* Check a user supplied version number, called from both read and write
- * functions that create a png_struct.
- */
-int
-png_user_version_check(png_structrp png_ptr, png_const_charp user_png_ver)
-{
-     /* Libpng versions 1.0.0 and later are binary compatible if the version
-      * string matches through the second '.'; we must recompile any
-      * applications that use any older library version.
-      */
-
-   if (user_png_ver != NULL)
-   {
-      int i = -1;
-      int found_dots = 0;
-
-      do
-      {
-         i++;
-         if (user_png_ver[i] != PNG_LIBPNG_VER_STRING[i])
-            png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-         if (user_png_ver[i] == '.')
-            found_dots++;
-      } while (found_dots < 2 && user_png_ver[i] != 0 &&
-            PNG_LIBPNG_VER_STRING[i] != 0);
-   }
-
-   else
-      png_ptr->flags |= PNG_FLAG_LIBRARY_MISMATCH;
-
-   if ((png_ptr->flags & PNG_FLAG_LIBRARY_MISMATCH) != 0)
-   {
-#ifdef PNG_WARNINGS_SUPPORTED
-      size_t pos = 0;
-      char m[128];
-
-      pos = png_safecat(m, (sizeof m), pos,
-          "Application built with libpng-");
-      pos = png_safecat(m, (sizeof m), pos, user_png_ver);
-      pos = png_safecat(m, (sizeof m), pos, " but running with ");
-      pos = png_safecat(m, (sizeof m), pos, PNG_LIBPNG_VER_STRING);
-      PNG_UNUSED(pos)
-
-      png_warning(png_ptr, m);
-#endif
-
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-      png_ptr->flags = 0;
-#endif
-
-      return 0;
-   }
-
-   /* Success return. */
-   return 1;
-}
-
-/* Generic function to create a png_struct for either read or write - this
- * contains the common initialization.
- */
-PNG_FUNCTION(png_structp /* PRIVATE */,
-png_create_png_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
-{
-   png_struct create_struct;
-#  ifdef PNG_SETJMP_SUPPORTED
-      jmp_buf create_jmp_buf;
-#  endif
-
-   /* This temporary stack-allocated structure is used to provide a place to
-    * build enough context to allow the user provided memory allocator (if any)
-    * to be called.
-    */
-   memset(&create_struct, 0, (sizeof create_struct));
-
-   /* Added at libpng-1.2.6 */
-#  ifdef PNG_USER_LIMITS_SUPPORTED
-      create_struct.user_width_max = PNG_USER_WIDTH_MAX;
-      create_struct.user_height_max = PNG_USER_HEIGHT_MAX;
-
-#     ifdef PNG_USER_CHUNK_CACHE_MAX
-         /* Added at libpng-1.2.43 and 1.4.0 */
-         create_struct.user_chunk_cache_max = PNG_USER_CHUNK_CACHE_MAX;
-#     endif
-
-#     ifdef PNG_USER_CHUNK_MALLOC_MAX
-         /* Added at libpng-1.2.43 and 1.4.1, required only for read but exists
-          * in png_struct regardless.
-          */
-         create_struct.user_chunk_malloc_max = PNG_USER_CHUNK_MALLOC_MAX;
-#     endif
-#  endif
-
-   /* The following two API calls simply set fields in png_struct, so it is safe
-    * to do them now even though error handling is not yet set up.
-    */
-#  ifdef PNG_USER_MEM_SUPPORTED
-      png_set_mem_fn(&create_struct, mem_ptr, malloc_fn, free_fn);
-#  else
-      PNG_UNUSED(mem_ptr)
-      PNG_UNUSED(malloc_fn)
-      PNG_UNUSED(free_fn)
-#  endif
-
-   /* (*error_fn) can return control to the caller after the error_ptr is set,
-    * this will result in a memory leak unless the error_fn does something
-    * extremely sophisticated.  The design lacks merit but is implicit in the
-    * API.
-    */
-   png_set_error_fn(&create_struct, error_ptr, error_fn, warn_fn);
-
-#  ifdef PNG_SETJMP_SUPPORTED
-      if (!setjmp(create_jmp_buf))
-      {
-         /* Temporarily fake out the longjmp information until we have
-          * successfully completed this function.  This only works if we have
-          * setjmp() support compiled in, but it is safe - this stuff should
-          * never happen.
-          */
-         create_struct.jmp_buf_ptr = &create_jmp_buf;
-         create_struct.jmp_buf_size = 0; /*stack allocation*/
-         create_struct.longjmp_fn = longjmp;
-#  else
-      {
-#  endif
-         /* Call the general version checker (shared with read and write code):
-          */
-         if (png_user_version_check(&create_struct, user_png_ver) != 0)
-         {
-            png_structrp png_ptr = png_voidcast(png_structrp,
-               png_malloc_warn(&create_struct, (sizeof *png_ptr)));
-
-            if (png_ptr != NULL)
-            {
-               /* png_ptr->zstream holds a back-pointer to the png_struct, so
-                * this can only be done now:
-                */
-               create_struct.zstream.zalloc = png_zalloc;
-               create_struct.zstream.zfree = png_zfree;
-               create_struct.zstream.opaque = png_ptr;
-
-#              ifdef PNG_SETJMP_SUPPORTED
-                  /* Eliminate the local error handling: */
-                  create_struct.jmp_buf_ptr = NULL;
-                  create_struct.jmp_buf_size = 0;
-                  create_struct.longjmp_fn = 0;
-#              endif
-
-               *png_ptr = create_struct;
-
-               /* This is the successful return point */
-               return png_ptr;
-            }
-         }
-      }
-
-   /* A longjmp because of a bug in the application storage allocator or a
-    * simple failure to allocate the png_struct.
-    */
-   return NULL;
-}
-
-/* Allocate the memory for an info_struct for the application. */
-PNG_FUNCTION(png_infop,PNGAPI
-png_create_info_struct,(png_const_structrp png_ptr),PNG_ALLOCATED)
-{
-   png_inforp info_ptr;
-
-   png_debug(1, "in png_create_info_struct");
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   /* Use the internal API that does not (or at least should not) error out, so
-    * that this call always returns ok.  The application typically sets up the
-    * error handling *after* creating the info_struct because this is the way it
-    * has always been done in 'example.c'.
-    */
-   info_ptr = png_voidcast(png_inforp, png_malloc_base(png_ptr,
-      (sizeof *info_ptr)));
-
-   if (info_ptr != NULL)
-      memset(info_ptr, 0, (sizeof *info_ptr));
-
-   return info_ptr;
-}
-
-/* This function frees the memory associated with a single info struct.
- * Normally, one would use either png_destroy_read_struct() or
- * png_destroy_write_struct() to free an info struct, but this may be
- * useful for some applications.  From libpng 1.6.0 this function is also used
- * internally to implement the png_info release part of the 'struct' destroy
- * APIs.  This ensures that all possible approaches free the same data (all of
- * it).
- */
-void PNGAPI
-png_destroy_info_struct(png_const_structrp png_ptr, png_infopp info_ptr_ptr)
-{
-   png_inforp info_ptr = NULL;
-
-   png_debug(1, "in png_destroy_info_struct");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (info_ptr_ptr != NULL)
-      info_ptr = *info_ptr_ptr;
-
-   if (info_ptr != NULL)
-   {
-      /* Do this first in case of an error below; if the app implements its own
-       * memory management this can lead to png_free calling png_error, which
-       * will abort this routine and return control to the app error handler.
-       * An infinite loop may result if it then tries to free the same info
-       * ptr.
-       */
-      *info_ptr_ptr = NULL;
-
-      png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
-      memset(info_ptr, 0, (sizeof *info_ptr));
-      png_free(png_ptr, info_ptr);
-   }
-}
-
-/* Initialize the info structure.  This is now an internal function (0.89)
- * and applications using it are urged to use png_create_info_struct()
- * instead.  Use deprecated in 1.6.0, internal use removed (used internally it
- * is just a memset).
- *
- * NOTE: it is almost inconceivable that this API is used because it bypasses
- * the user-memory mechanism and the user error handling/warning mechanisms in
- * those cases where it does anything other than a memset.
- */
-PNG_FUNCTION(void,PNGAPI
-png_info_init_3,(png_infopp ptr_ptr, png_size_t png_info_struct_size),
-   PNG_DEPRECATED)
-{
-   png_inforp info_ptr = *ptr_ptr;
-
-   png_debug(1, "in png_info_init_3");
-
-   if (info_ptr == NULL)
-      return;
-
-   if ((sizeof (png_info)) > png_info_struct_size)
-   {
-      *ptr_ptr = NULL;
-      /* The following line is why this API should not be used: */
-      free(info_ptr);
-      info_ptr = png_voidcast(png_inforp, png_malloc_base(NULL,
-         (sizeof *info_ptr)));
-      *ptr_ptr = info_ptr;
-   }
-
-   /* Set everything to 0 */
-   memset(info_ptr, 0, (sizeof *info_ptr));
-}
-
-/* The following API is not called internally */
-void PNGAPI
-png_data_freer(png_const_structrp png_ptr, png_inforp info_ptr,
-   int freer, png_uint_32 mask)
-{
-   png_debug(1, "in png_data_freer");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (freer == PNG_DESTROY_WILL_FREE_DATA)
-      info_ptr->free_me |= mask;
-
-   else if (freer == PNG_USER_WILL_FREE_DATA)
-      info_ptr->free_me &= ~mask;
-
-   else
-      png_error(png_ptr, "Unknown freer parameter in png_data_freer");
-}
-
-void PNGAPI
-png_free_data(png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 mask,
-   int num)
-{
-   png_debug(1, "in png_free_data");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-#ifdef PNG_TEXT_SUPPORTED
-   /* Free text item num or (if num == -1) all text items */
-   if (info_ptr->text != 0 &&
-       ((mask & PNG_FREE_TEXT) & info_ptr->free_me) != 0)
-   {
-      if (num != -1)
-      {
-         png_free(png_ptr, info_ptr->text[num].key);
-         info_ptr->text[num].key = NULL;
-      }
-
-      else
-      {
-         int i;
-
-         for (i = 0; i < info_ptr->num_text; i++)
-            png_free(png_ptr, info_ptr->text[i].key);
-
-         png_free(png_ptr, info_ptr->text);
-         info_ptr->text = NULL;
-         info_ptr->num_text = 0;
-      }
-   }
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-   /* Free any tRNS entry */
-   if (((mask & PNG_FREE_TRNS) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->trans_alpha);
-      info_ptr->trans_alpha = NULL;
-      info_ptr->valid &= ~PNG_INFO_tRNS;
-   }
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-   /* Free any sCAL entry */
-   if (((mask & PNG_FREE_SCAL) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->scal_s_width);
-      png_free(png_ptr, info_ptr->scal_s_height);
-      info_ptr->scal_s_width = NULL;
-      info_ptr->scal_s_height = NULL;
-      info_ptr->valid &= ~PNG_INFO_sCAL;
-   }
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-   /* Free any pCAL entry */
-   if (((mask & PNG_FREE_PCAL) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->pcal_purpose);
-      png_free(png_ptr, info_ptr->pcal_units);
-      info_ptr->pcal_purpose = NULL;
-      info_ptr->pcal_units = NULL;
-
-      if (info_ptr->pcal_params != NULL)
-         {
-            int i;
-
-            for (i = 0; i < info_ptr->pcal_nparams; i++)
-               png_free(png_ptr, info_ptr->pcal_params[i]);
-
-            png_free(png_ptr, info_ptr->pcal_params);
-            info_ptr->pcal_params = NULL;
-         }
-      info_ptr->valid &= ~PNG_INFO_pCAL;
-   }
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-   /* Free any profile entry */
-   if (((mask & PNG_FREE_ICCP) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->iccp_name);
-      png_free(png_ptr, info_ptr->iccp_profile);
-      info_ptr->iccp_name = NULL;
-      info_ptr->iccp_profile = NULL;
-      info_ptr->valid &= ~PNG_INFO_iCCP;
-   }
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-   /* Free a given sPLT entry, or (if num == -1) all sPLT entries */
-   if (info_ptr->splt_palettes != 0 &&
-       ((mask & PNG_FREE_SPLT) & info_ptr->free_me) != 0)
-   {
-      if (num != -1)
-      {
-         png_free(png_ptr, info_ptr->splt_palettes[num].name);
-         png_free(png_ptr, info_ptr->splt_palettes[num].entries);
-         info_ptr->splt_palettes[num].name = NULL;
-         info_ptr->splt_palettes[num].entries = NULL;
-      }
-
-      else
-      {
-         if (info_ptr->splt_palettes_num != 0)
-         {
-            int i;
-
-            for (i = 0; i < info_ptr->splt_palettes_num; i++)
-            {
-               png_free(png_ptr, info_ptr->splt_palettes[i].name);
-               png_free(png_ptr, info_ptr->splt_palettes[i].entries);
-            }
-
-            png_free(png_ptr, info_ptr->splt_palettes);
-            info_ptr->splt_palettes = NULL;
-            info_ptr->splt_palettes_num = 0;
-         }
-         info_ptr->valid &= ~PNG_INFO_sPLT;
-      }
-   }
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-   if (info_ptr->unknown_chunks != 0 &&
-       ((mask & PNG_FREE_UNKN) & info_ptr->free_me) != 0)
-   {
-      if (num != -1)
-      {
-          png_free(png_ptr, info_ptr->unknown_chunks[num].data);
-          info_ptr->unknown_chunks[num].data = NULL;
-      }
-
-      else
-      {
-         int i;
-
-         if (info_ptr->unknown_chunks_num != 0)
-         {
-            for (i = 0; i < info_ptr->unknown_chunks_num; i++)
-               png_free(png_ptr, info_ptr->unknown_chunks[i].data);
-
-            png_free(png_ptr, info_ptr->unknown_chunks);
-            info_ptr->unknown_chunks = NULL;
-            info_ptr->unknown_chunks_num = 0;
-         }
-      }
-   }
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-   /* Free any hIST entry */
-   if (((mask & PNG_FREE_HIST) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->hist);
-      info_ptr->hist = NULL;
-      info_ptr->valid &= ~PNG_INFO_hIST;
-   }
-#endif
-
-   /* Free any PLTE entry that was internally allocated */
-   if (((mask & PNG_FREE_PLTE) & info_ptr->free_me) != 0)
-   {
-      png_free(png_ptr, info_ptr->palette);
-      info_ptr->palette = NULL;
-      info_ptr->valid &= ~PNG_INFO_PLTE;
-      info_ptr->num_palette = 0;
-   }
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-   /* Free any image bits attached to the info structure */
-   if (((mask & PNG_FREE_ROWS) & info_ptr->free_me) != 0)
-   {
-      if (info_ptr->row_pointers != 0)
-      {
-         png_uint_32 row;
-         for (row = 0; row < info_ptr->height; row++)
-            png_free(png_ptr, info_ptr->row_pointers[row]);
-
-         png_free(png_ptr, info_ptr->row_pointers);
-         info_ptr->row_pointers = NULL;
-      }
-      info_ptr->valid &= ~PNG_INFO_IDAT;
-   }
-#endif
-
-   if (num != -1)
-      mask &= ~PNG_FREE_MUL;
-
-   info_ptr->free_me &= ~mask;
-}
-#endif /* READ || WRITE */
-
-/* This function returns a pointer to the io_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy() or png_read_destroy() are called.
- */
-png_voidp PNGAPI
-png_get_io_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return (png_ptr->io_ptr);
-}
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-#  ifdef PNG_STDIO_SUPPORTED
-/* Initialize the default input/output functions for the PNG file.  If you
- * use your own read or write routines, you can call either png_set_read_fn()
- * or png_set_write_fn() instead of png_init_io().  If you have defined
- * PNG_NO_STDIO or otherwise disabled PNG_STDIO_SUPPORTED, you must use a
- * function of your own because "FILE *" isn't necessarily available.
- */
-void PNGAPI
-png_init_io(png_structrp png_ptr, png_FILE_p fp)
-{
-   png_debug(1, "in png_init_io");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = (png_voidp)fp;
-}
-#  endif
-
-#ifdef PNG_SAVE_INT_32_SUPPORTED
-/* The png_save_int_32 function assumes integers are stored in two's
- * complement format.  If this isn't the case, then this routine needs to
- * be modified to write data in two's complement format.  Note that,
- * the following works correctly even if png_int_32 has more than 32 bits
- * (compare the more complex code required on read for sign extension.)
- */
-void PNGAPI
-png_save_int_32(png_bytep buf, png_int_32 i)
-{
-   buf[0] = (png_byte)((i >> 24) & 0xff);
-   buf[1] = (png_byte)((i >> 16) & 0xff);
-   buf[2] = (png_byte)((i >> 8) & 0xff);
-   buf[3] = (png_byte)(i & 0xff);
-}
-#endif
-
-#  ifdef PNG_TIME_RFC1123_SUPPORTED
-/* Convert the supplied time into an RFC 1123 string suitable for use in
- * a "Creation Time" or other text-based time string.
- */
-int PNGAPI
-png_convert_to_rfc1123_buffer(char out[29], png_const_timep ptime)
-{
-   static PNG_CONST char short_months[12][4] =
-        {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
-         "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
-
-   if (out == NULL)
-      return 0;
-
-   if (ptime->year > 9999 /* RFC1123 limitation */ ||
-       ptime->month == 0    ||  ptime->month > 12  ||
-       ptime->day   == 0    ||  ptime->day   > 31  ||
-       ptime->hour  > 23    ||  ptime->minute > 59 ||
-       ptime->second > 60)
-      return 0;
-
-   {
-      size_t pos = 0;
-      char number_buf[5]; /* enough for a four-digit year */
-
-#     define APPEND_STRING(string) pos = png_safecat(out, 29, pos, (string))
-#     define APPEND_NUMBER(format, value)\
-         APPEND_STRING(PNG_FORMAT_NUMBER(number_buf, format, (value)))
-#     define APPEND(ch) if (pos < 28) out[pos++] = (ch)
-
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_u, (unsigned)ptime->day);
-      APPEND(' ');
-      APPEND_STRING(short_months[(ptime->month - 1)]);
-      APPEND(' ');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_u, ptime->year);
-      APPEND(' ');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->hour);
-      APPEND(':');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->minute);
-      APPEND(':');
-      APPEND_NUMBER(PNG_NUMBER_FORMAT_02u, (unsigned)ptime->second);
-      APPEND_STRING(" +0000"); /* This reliably terminates the buffer */
-
-#     undef APPEND
-#     undef APPEND_NUMBER
-#     undef APPEND_STRING
-   }
-
-   return 1;
-}
-
-#     if PNG_LIBPNG_VER < 10700
-/* To do: remove the following from libpng-1.7 */
-/* Original API that uses a private buffer in png_struct.
- * Deprecated because it causes png_struct to carry a spurious temporary
- * buffer (png_struct::time_buffer), better to have the caller pass this in.
- */
-png_const_charp PNGAPI
-png_convert_to_rfc1123(png_structrp png_ptr, png_const_timep ptime)
-{
-   if (png_ptr != NULL)
-   {
-      /* The only failure above if png_ptr != NULL is from an invalid ptime */
-      if (png_convert_to_rfc1123_buffer(png_ptr->time_buffer, ptime) == 0)
-         png_warning(png_ptr, "Ignoring invalid time value");
-
-      else
-         return png_ptr->time_buffer;
-   }
-
-   return NULL;
-}
-#     endif
-#  endif /* TIME_RFC1123 */
-
-#endif /* READ || WRITE */
-
-png_const_charp PNGAPI
-png_get_copyright(png_const_structrp png_ptr)
-{
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-#ifdef PNG_STRING_COPYRIGHT
-   return PNG_STRING_COPYRIGHT
-#else
-#  ifdef __STDC__
-   return PNG_STRING_NEWLINE \
-     "libpng version 1.6.16 - December 22, 2014" PNG_STRING_NEWLINE \
-     "Copyright (c) 1998-2014 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
-     "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
-     "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
-     PNG_STRING_NEWLINE;
-#  else
-      return "libpng version 1.6.16 - December 22, 2014\
-      Copyright (c) 1998-2014 Glenn Randers-Pehrson\
-      Copyright (c) 1996-1997 Andreas Dilger\
-      Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
-#  endif
-#endif
-}
-
-/* The following return the library version as a short string in the
- * format 1.0.0 through 99.99.99zz.  To get the version of *.h files
- * used with your application, print out PNG_LIBPNG_VER_STRING, which
- * is defined in png.h.
- * Note: now there is no difference between png_get_libpng_ver() and
- * png_get_header_ver().  Due to the version_nn_nn_nn typedef guard,
- * it is guaranteed that png.c uses the correct version of png.h.
- */
-png_const_charp PNGAPI
-png_get_libpng_ver(png_const_structrp png_ptr)
-{
-   /* Version of *.c files used when building libpng */
-   return png_get_header_ver(png_ptr);
-}
-
-png_const_charp PNGAPI
-png_get_header_ver(png_const_structrp png_ptr)
-{
-   /* Version of *.h files used when building libpng */
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-   return PNG_LIBPNG_VER_STRING;
-}
-
-png_const_charp PNGAPI
-png_get_header_version(png_const_structrp png_ptr)
-{
-   /* Returns longer string containing both version and date */
-   PNG_UNUSED(png_ptr)  /* Silence compiler warning about unused png_ptr */
-#ifdef __STDC__
-   return PNG_HEADER_VERSION_STRING
-#  ifndef PNG_READ_SUPPORTED
-   "     (NO READ SUPPORT)"
-#  endif
-   PNG_STRING_NEWLINE;
-#else
-   return PNG_HEADER_VERSION_STRING;
-#endif
-}
-
-#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
-/* NOTE: this routine is not used internally! */
-/* Build a grayscale palette.  Palette is assumed to be 1 << bit_depth
- * large of png_color.  This lets grayscale images be treated as
- * paletted.  Most useful for gamma correction and simplification
- * of code.  This API is not used internally.
- */
-void PNGAPI
-png_build_grayscale_palette(int bit_depth, png_colorp palette)
-{
-   int num_palette;
-   int color_inc;
-   int i;
-   int v;
-
-   png_debug(1, "in png_do_build_grayscale_palette");
-
-   if (palette == NULL)
-      return;
-
-   switch (bit_depth)
-   {
-      case 1:
-         num_palette = 2;
-         color_inc = 0xff;
-         break;
-
-      case 2:
-         num_palette = 4;
-         color_inc = 0x55;
-         break;
-
-      case 4:
-         num_palette = 16;
-         color_inc = 0x11;
-         break;
-
-      case 8:
-         num_palette = 256;
-         color_inc = 1;
-         break;
-
-      default:
-         num_palette = 0;
-         color_inc = 0;
-         break;
-   }
-
-   for (i = 0, v = 0; i < num_palette; i++, v += color_inc)
-   {
-      palette[i].red = (png_byte)v;
-      palette[i].green = (png_byte)v;
-      palette[i].blue = (png_byte)v;
-   }
-}
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-int PNGAPI
-png_handle_as_unknown(png_const_structrp png_ptr, png_const_bytep chunk_name)
-{
-   /* Check chunk_name and return "keep" value if it's on the list, else 0 */
-   png_const_bytep p, p_end;
-
-   if (png_ptr == NULL || chunk_name == NULL || png_ptr->num_chunk_list == 0)
-      return PNG_HANDLE_CHUNK_AS_DEFAULT;
-
-   p_end = png_ptr->chunk_list;
-   p = p_end + png_ptr->num_chunk_list*5; /* beyond end */
-
-   /* The code is the fifth byte after each four byte string.  Historically this
-    * code was always searched from the end of the list, this is no longer
-    * necessary because the 'set' routine handles duplicate entries correcty.
-    */
-   do /* num_chunk_list > 0, so at least one */
-   {
-      p -= 5;
-
-      if (memcmp(chunk_name, p, 4) == 0)
-         return p[4];
-   }
-   while (p > p_end);
-
-   /* This means that known chunks should be processed and unknown chunks should
-    * be handled according to the value of png_ptr->unknown_default; this can be
-    * confusing because, as a result, there are two levels of defaulting for
-    * unknown chunks.
-    */
-   return PNG_HANDLE_CHUNK_AS_DEFAULT;
-}
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) ||\
-   defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
-int /* PRIVATE */
-png_chunk_unknown_handling(png_const_structrp png_ptr, png_uint_32 chunk_name)
-{
-   png_byte chunk_string[5];
-
-   PNG_CSTRING_FROM_CHUNK(chunk_string, chunk_name);
-   return png_handle_as_unknown(png_ptr, chunk_string);
-}
-#endif /* READ_UNKNOWN_CHUNKS || HANDLE_AS_UNKNOWN */
-#endif /* SET_UNKNOWN_CHUNKS */
-
-#ifdef PNG_READ_SUPPORTED
-/* This function, added to libpng-1.0.6g, is untested. */
-int PNGAPI
-png_reset_zstream(png_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return Z_STREAM_ERROR;
-
-   /* WARNING: this resets the window bits to the maximum! */
-   return (inflateReset(&png_ptr->zstream));
-}
-#endif /* READ */
-
-/* This function was added to libpng-1.0.7 */
-png_uint_32 PNGAPI
-png_access_version_number(void)
-{
-   /* Version of *.c files used when building libpng */
-   return((png_uint_32)PNG_LIBPNG_VER);
-}
-
-
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Ensure that png_ptr->zstream.msg holds some appropriate error message string.
- * If it doesn't 'ret' is used to set it to something appropriate, even in cases
- * like Z_OK or Z_STREAM_END where the error code is apparently a success code.
- */
-void /* PRIVATE */
-png_zstream_error(png_structrp png_ptr, int ret)
-{
-   /* Translate 'ret' into an appropriate error string, priority is given to the
-    * one in zstream if set.  This always returns a string, even in cases like
-    * Z_OK or Z_STREAM_END where the error code is a success code.
-    */
-   if (png_ptr->zstream.msg == NULL) switch (ret)
-   {
-      default:
-      case Z_OK:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected zlib return code");
-         break;
-
-      case Z_STREAM_END:
-         /* Normal exit */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected end of LZ stream");
-         break;
-
-      case Z_NEED_DICT:
-         /* This means the deflate stream did not have a dictionary; this
-          * indicates a bogus PNG.
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("missing LZ dictionary");
-         break;
-
-      case Z_ERRNO:
-         /* gz APIs only: should not happen */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("zlib IO error");
-         break;
-
-      case Z_STREAM_ERROR:
-         /* internal libpng error */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("bad parameters to zlib");
-         break;
-
-      case Z_DATA_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("damaged LZ stream");
-         break;
-
-      case Z_MEM_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("insufficient memory");
-         break;
-
-      case Z_BUF_ERROR:
-         /* End of input or output; not a problem if the caller is doing
-          * incremental read or write.
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("truncated");
-         break;
-
-      case Z_VERSION_ERROR:
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unsupported zlib version");
-         break;
-
-      case PNG_UNEXPECTED_ZLIB_RETURN:
-         /* Compile errors here mean that zlib now uses the value co-opted in
-          * pngpriv.h for PNG_UNEXPECTED_ZLIB_RETURN; update the switch above
-          * and change pngpriv.h.  Note that this message is "... return",
-          * whereas the default/Z_OK one is "... return code".
-          */
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("unexpected zlib return");
-         break;
-   }
-}
-
-/* png_convert_size: a PNGAPI but no longer in png.h, so deleted
- * at libpng 1.5.5!
- */
-
-/* Added at libpng version 1.2.34 and 1.4.0 (moved from pngset.c) */
-#ifdef PNG_GAMMA_SUPPORTED /* always set if COLORSPACE */
-static int
-png_colorspace_check_gamma(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_fixed_point gAMA, int from)
-   /* This is called to check a new gamma value against an existing one.  The
-    * routine returns false if the new gamma value should not be written.
-    *
-    * 'from' says where the new gamma value comes from:
-    *
-    *    0: the new gamma value is the libpng estimate for an ICC profile
-    *    1: the new gamma value comes from a gAMA chunk
-    *    2: the new gamma value comes from an sRGB chunk
-    */
-{
-   png_fixed_point gtest;
-
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
-      (png_muldiv(&gtest, colorspace->gamma, PNG_FP_1, gAMA) == 0  ||
-      png_gamma_significant(gtest) != 0))
-   {
-      /* Either this is an sRGB image, in which case the calculated gamma
-       * approximation should match, or this is an image with a profile and the
-       * value libpng calculates for the gamma of the profile does not match the
-       * value recorded in the file.  The former, sRGB, case is an error, the
-       * latter is just a warning.
-       */
-      if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0 || from == 2)
-      {
-         png_chunk_report(png_ptr, "gamma value does not match sRGB",
-            PNG_CHUNK_ERROR);
-         /* Do not overwrite an sRGB value */
-         return from == 2;
-      }
-
-      else /* sRGB tag not involved */
-      {
-         png_chunk_report(png_ptr, "gamma value does not match libpng estimate",
-            PNG_CHUNK_WARNING);
-         return from == 1;
-      }
-   }
-
-   return 1;
-}
-
-void /* PRIVATE */
-png_colorspace_set_gamma(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_fixed_point gAMA)
-{
-   /* Changed in libpng-1.5.4 to limit the values to ensure overflow can't
-    * occur.  Since the fixed point representation is asymetrical it is
-    * possible for 1/gamma to overflow the limit of 21474 and this means the
-    * gamma value must be at least 5/100000 and hence at most 20000.0.  For
-    * safety the limits here are a little narrower.  The values are 0.00016 to
-    * 6250.0, which are truly ridiculous gamma values (and will produce
-    * displays that are all black or all white.)
-    *
-    * In 1.6.0 this test replaces the ones in pngrutil.c, in the gAMA chunk
-    * handling code, which only required the value to be >0.
-    */
-   png_const_charp errmsg;
-
-   if (gAMA < 16 || gAMA > 625000000)
-      errmsg = "gamma value out of range";
-
-#  ifdef PNG_READ_gAMA_SUPPORTED
-      /* Allow the application to set the gamma value more than once */
-      else if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-         (colorspace->flags & PNG_COLORSPACE_FROM_gAMA) != 0)
-         errmsg = "duplicate";
-#  endif
-
-   /* Do nothing if the colorspace is already invalid */
-   else if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
-      return;
-
-   else
-   {
-      if (png_colorspace_check_gamma(png_ptr, colorspace, gAMA,
-          1/*from gAMA*/) != 0)
-      {
-         /* Store this gamma value. */
-         colorspace->gamma = gAMA;
-         colorspace->flags |=
-            (PNG_COLORSPACE_HAVE_GAMMA | PNG_COLORSPACE_FROM_gAMA);
-      }
-
-      /* At present if the check_gamma test fails the gamma of the colorspace is
-       * not updated however the colorspace is not invalidated.  This
-       * corresponds to the case where the existing gamma comes from an sRGB
-       * chunk or profile.  An error message has already been output.
-       */
-      return;
-   }
-
-   /* Error exit - errmsg has been set. */
-   colorspace->flags |= PNG_COLORSPACE_INVALID;
-   png_chunk_report(png_ptr, errmsg, PNG_CHUNK_WRITE_ERROR);
-}
-
-void /* PRIVATE */
-png_colorspace_sync_info(png_const_structrp png_ptr, png_inforp info_ptr)
-{
-   if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) != 0)
-   {
-      /* Everything is invalid */
-      info_ptr->valid &= ~(PNG_INFO_gAMA|PNG_INFO_cHRM|PNG_INFO_sRGB|
-         PNG_INFO_iCCP);
-
-#     ifdef PNG_COLORSPACE_SUPPORTED
-         /* Clean up the iCCP profile now if it won't be used. */
-         png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, -1/*not used*/);
-#     else
-         PNG_UNUSED(png_ptr)
-#     endif
-   }
-
-   else
-   {
-#     ifdef PNG_COLORSPACE_SUPPORTED
-         /* Leave the INFO_iCCP flag set if the pngset.c code has already set
-          * it; this allows a PNG to contain a profile which matches sRGB and
-          * yet still have that profile retrievable by the application.
-          */
-         if ((info_ptr->colorspace.flags & PNG_COLORSPACE_MATCHES_sRGB) != 0)
-            info_ptr->valid |= PNG_INFO_sRGB;
-
-         else
-            info_ptr->valid &= ~PNG_INFO_sRGB;
-
-         if ((info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-            info_ptr->valid |= PNG_INFO_cHRM;
-
-         else
-            info_ptr->valid &= ~PNG_INFO_cHRM;
-#     endif
-
-      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0)
-         info_ptr->valid |= PNG_INFO_gAMA;
-
-      else
-         info_ptr->valid &= ~PNG_INFO_gAMA;
-   }
-}
-
-#ifdef PNG_READ_SUPPORTED
-void /* PRIVATE */
-png_colorspace_sync(png_const_structrp png_ptr, png_inforp info_ptr)
-{
-   if (info_ptr == NULL) /* reduce code size; check here not in the caller */
-      return;
-
-   info_ptr->colorspace = png_ptr->colorspace;
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-#endif
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* Added at libpng-1.5.5 to support read and write of true CIEXYZ values for
- * cHRM, as opposed to using chromaticities.  These internal APIs return
- * non-zero on a parameter error.  The X, Y and Z values are required to be
- * positive and less than 1.0.
- */
-static int
-png_xy_from_XYZ(png_xy *xy, const png_XYZ *XYZ)
-{
-   png_int_32 d, dwhite, whiteX, whiteY;
-
-   d = XYZ->red_X + XYZ->red_Y + XYZ->red_Z;
-   if (png_muldiv(&xy->redx, XYZ->red_X, PNG_FP_1, d) == 0)
-      return 1;
-   if (png_muldiv(&xy->redy, XYZ->red_Y, PNG_FP_1, d) == 0)
-      return 1;
-   dwhite = d;
-   whiteX = XYZ->red_X;
-   whiteY = XYZ->red_Y;
-
-   d = XYZ->green_X + XYZ->green_Y + XYZ->green_Z;
-   if (png_muldiv(&xy->greenx, XYZ->green_X, PNG_FP_1, d) == 0)
-      return 1;
-   if (png_muldiv(&xy->greeny, XYZ->green_Y, PNG_FP_1, d) == 0)
-      return 1;
-   dwhite += d;
-   whiteX += XYZ->green_X;
-   whiteY += XYZ->green_Y;
-
-   d = XYZ->blue_X + XYZ->blue_Y + XYZ->blue_Z;
-   if (png_muldiv(&xy->bluex, XYZ->blue_X, PNG_FP_1, d) == 0)
-      return 1;
-   if (png_muldiv(&xy->bluey, XYZ->blue_Y, PNG_FP_1, d) == 0)
-      return 1;
-   dwhite += d;
-   whiteX += XYZ->blue_X;
-   whiteY += XYZ->blue_Y;
-
-   /* The reference white is simply the sum of the end-point (X,Y,Z) vectors,
-    * thus:
-    */
-   if (png_muldiv(&xy->whitex, whiteX, PNG_FP_1, dwhite) == 0)
-      return 1;
-   if (png_muldiv(&xy->whitey, whiteY, PNG_FP_1, dwhite) == 0)
-      return 1;
-
-   return 0;
-}
-
-static int
-png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
-{
-   png_fixed_point red_inverse, green_inverse, blue_scale;
-   png_fixed_point left, right, denominator;
-
-   /* Check xy and, implicitly, z.  Note that wide gamut color spaces typically
-    * have end points with 0 tristimulus values (these are impossible end
-    * points, but they are used to cover the possible colors.)
-    */
-   if (xy->redx < 0 || xy->redx > PNG_FP_1) return 1;
-   if (xy->redy < 0 || xy->redy > PNG_FP_1-xy->redx) return 1;
-   if (xy->greenx < 0 || xy->greenx > PNG_FP_1) return 1;
-   if (xy->greeny < 0 || xy->greeny > PNG_FP_1-xy->greenx) return 1;
-   if (xy->bluex < 0 || xy->bluex > PNG_FP_1) return 1;
-   if (xy->bluey < 0 || xy->bluey > PNG_FP_1-xy->bluex) return 1;
-   if (xy->whitex < 0 || xy->whitex > PNG_FP_1) return 1;
-   if (xy->whitey < 0 || xy->whitey > PNG_FP_1-xy->whitex) return 1;
-
-   /* The reverse calculation is more difficult because the original tristimulus
-    * value had 9 independent values (red,green,blue)x(X,Y,Z) however only 8
-    * derived values were recorded in the cHRM chunk;
-    * (red,green,blue,white)x(x,y).  This loses one degree of freedom and
-    * therefore an arbitrary ninth value has to be introduced to undo the
-    * original transformations.
-    *
-    * Think of the original end-points as points in (X,Y,Z) space.  The
-    * chromaticity values (c) have the property:
-    *
-    *           C
-    *   c = ---------
-    *       X + Y + Z
-    *
-    * For each c (x,y,z) from the corresponding original C (X,Y,Z).  Thus the
-    * three chromaticity values (x,y,z) for each end-point obey the
-    * relationship:
-    *
-    *   x + y + z = 1
-    *
-    * This describes the plane in (X,Y,Z) space that intersects each axis at the
-    * value 1.0; call this the chromaticity plane.  Thus the chromaticity
-    * calculation has scaled each end-point so that it is on the x+y+z=1 plane
-    * and chromaticity is the intersection of the vector from the origin to the
-    * (X,Y,Z) value with the chromaticity plane.
-    *
-    * To fully invert the chromaticity calculation we would need the three
-    * end-point scale factors, (red-scale, green-scale, blue-scale), but these
-    * were not recorded.  Instead we calculated the reference white (X,Y,Z) and
-    * recorded the chromaticity of this.  The reference white (X,Y,Z) would have
-    * given all three of the scale factors since:
-    *
-    *    color-C = color-c * color-scale
-    *    white-C = red-C + green-C + blue-C
-    *            = red-c*red-scale + green-c*green-scale + blue-c*blue-scale
-    *
-    * But cHRM records only white-x and white-y, so we have lost the white scale
-    * factor:
-    *
-    *    white-C = white-c*white-scale
-    *
-    * To handle this the inverse transformation makes an arbitrary assumption
-    * about white-scale:
-    *
-    *    Assume: white-Y = 1.0
-    *    Hence:  white-scale = 1/white-y
-    *    Or:     red-Y + green-Y + blue-Y = 1.0
-    *
-    * Notice the last statement of the assumption gives an equation in three of
-    * the nine values we want to calculate.  8 more equations come from the
-    * above routine as summarised at the top above (the chromaticity
-    * calculation):
-    *
-    *    Given: color-x = color-X / (color-X + color-Y + color-Z)
-    *    Hence: (color-x - 1)*color-X + color.x*color-Y + color.x*color-Z = 0
-    *
-    * This is 9 simultaneous equations in the 9 variables "color-C" and can be
-    * solved by Cramer's rule.  Cramer's rule requires calculating 10 9x9 matrix
-    * determinants, however this is not as bad as it seems because only 28 of
-    * the total of 90 terms in the various matrices are non-zero.  Nevertheless
-    * Cramer's rule is notoriously numerically unstable because the determinant
-    * calculation involves the difference of large, but similar, numbers.  It is
-    * difficult to be sure that the calculation is stable for real world values
-    * and it is certain that it becomes unstable where the end points are close
-    * together.
-    *
-    * So this code uses the perhaps slightly less optimal but more
-    * understandable and totally obvious approach of calculating color-scale.
-    *
-    * This algorithm depends on the precision in white-scale and that is
-    * (1/white-y), so we can immediately see that as white-y approaches 0 the
-    * accuracy inherent in the cHRM chunk drops off substantially.
-    *
-    * libpng arithmetic: a simple inversion of the above equations
-    * ------------------------------------------------------------
-    *
-    *    white_scale = 1/white-y
-    *    white-X = white-x * white-scale
-    *    white-Y = 1.0
-    *    white-Z = (1 - white-x - white-y) * white_scale
-    *
-    *    white-C = red-C + green-C + blue-C
-    *            = red-c*red-scale + green-c*green-scale + blue-c*blue-scale
-    *
-    * This gives us three equations in (red-scale,green-scale,blue-scale) where
-    * all the coefficients are now known:
-    *
-    *    red-x*red-scale + green-x*green-scale + blue-x*blue-scale
-    *       = white-x/white-y
-    *    red-y*red-scale + green-y*green-scale + blue-y*blue-scale = 1
-    *    red-z*red-scale + green-z*green-scale + blue-z*blue-scale
-    *       = (1 - white-x - white-y)/white-y
-    *
-    * In the last equation color-z is (1 - color-x - color-y) so we can add all
-    * three equations together to get an alternative third:
-    *
-    *    red-scale + green-scale + blue-scale = 1/white-y = white-scale
-    *
-    * So now we have a Cramer's rule solution where the determinants are just
-    * 3x3 - far more tractible.  Unfortunately 3x3 determinants still involve
-    * multiplication of three coefficients so we can't guarantee to avoid
-    * overflow in the libpng fixed point representation.  Using Cramer's rule in
-    * floating point is probably a good choice here, but it's not an option for
-    * fixed point.  Instead proceed to simplify the first two equations by
-    * eliminating what is likely to be the largest value, blue-scale:
-    *
-    *    blue-scale = white-scale - red-scale - green-scale
-    *
-    * Hence:
-    *
-    *    (red-x - blue-x)*red-scale + (green-x - blue-x)*green-scale =
-    *                (white-x - blue-x)*white-scale
-    *
-    *    (red-y - blue-y)*red-scale + (green-y - blue-y)*green-scale =
-    *                1 - blue-y*white-scale
-    *
-    * And now we can trivially solve for (red-scale,green-scale):
-    *
-    *    green-scale =
-    *                (white-x - blue-x)*white-scale - (red-x - blue-x)*red-scale
-    *                -----------------------------------------------------------
-    *                                  green-x - blue-x
-    *
-    *    red-scale =
-    *                1 - blue-y*white-scale - (green-y - blue-y) * green-scale
-    *                ---------------------------------------------------------
-    *                                  red-y - blue-y
-    *
-    * Hence:
-    *
-    *    red-scale =
-    *          ( (green-x - blue-x) * (white-y - blue-y) -
-    *            (green-y - blue-y) * (white-x - blue-x) ) / white-y
-    * -------------------------------------------------------------------------
-    *  (green-x - blue-x)*(red-y - blue-y)-(green-y - blue-y)*(red-x - blue-x)
-    *
-    *    green-scale =
-    *          ( (red-y - blue-y) * (white-x - blue-x) -
-    *            (red-x - blue-x) * (white-y - blue-y) ) / white-y
-    * -------------------------------------------------------------------------
-    *  (green-x - blue-x)*(red-y - blue-y)-(green-y - blue-y)*(red-x - blue-x)
-    *
-    * Accuracy:
-    * The input values have 5 decimal digits of accuracy.  The values are all in
-    * the range 0 < value < 1, so simple products are in the same range but may
-    * need up to 10 decimal digits to preserve the original precision and avoid
-    * underflow.  Because we are using a 32-bit signed representation we cannot
-    * match this; the best is a little over 9 decimal digits, less than 10.
-    *
-    * The approach used here is to preserve the maximum precision within the
-    * signed representation.  Because the red-scale calculation above uses the
-    * difference between two products of values that must be in the range -1..+1
-    * it is sufficient to divide the product by 7; ceil(100,000/32767*2).  The
-    * factor is irrelevant in the calculation because it is applied to both
-    * numerator and denominator.
-    *
-    * Note that the values of the differences of the products of the
-    * chromaticities in the above equations tend to be small, for example for
-    * the sRGB chromaticities they are:
-    *
-    * red numerator:    -0.04751
-    * green numerator:  -0.08788
-    * denominator:      -0.2241 (without white-y multiplication)
-    *
-    *  The resultant Y coefficients from the chromaticities of some widely used
-    *  color space definitions are (to 15 decimal places):
-    *
-    *  sRGB
-    *    0.212639005871510 0.715168678767756 0.072192315360734
-    *  Kodak ProPhoto
-    *    0.288071128229293 0.711843217810102 0.000085653960605
-    *  Adobe RGB
-    *    0.297344975250536 0.627363566255466 0.075291458493998
-    *  Adobe Wide Gamut RGB
-    *    0.258728243040113 0.724682314948566 0.016589442011321
-    */
-   /* By the argument, above overflow should be impossible here. The return
-    * value of 2 indicates an internal error to the caller.
-    */
-   if (png_muldiv(&left, xy->greenx-xy->bluex, xy->redy - xy->bluey, 7) == 0)
-      return 2;
-   if (png_muldiv(&right, xy->greeny-xy->bluey, xy->redx - xy->bluex, 7) == 0)
-      return 2;
-   denominator = left - right;
-
-   /* Now find the red numerator. */
-   if (png_muldiv(&left, xy->greenx-xy->bluex, xy->whitey-xy->bluey, 7) == 0)
-      return 2;
-   if (png_muldiv(&right, xy->greeny-xy->bluey, xy->whitex-xy->bluex, 7) == 0)
-      return 2;
-
-   /* Overflow is possible here and it indicates an extreme set of PNG cHRM
-    * chunk values.  This calculation actually returns the reciprocal of the
-    * scale value because this allows us to delay the multiplication of white-y
-    * into the denominator, which tends to produce a small number.
-    */
-   if (png_muldiv(&red_inverse, xy->whitey, denominator, left-right) == 0 ||
-       red_inverse <= xy->whitey /* r+g+b scales = white scale */)
-      return 1;
-
-   /* Similarly for green_inverse: */
-   if (png_muldiv(&left, xy->redy-xy->bluey, xy->whitex-xy->bluex, 7) == 0)
-      return 2;
-   if (png_muldiv(&right, xy->redx-xy->bluex, xy->whitey-xy->bluey, 7) == 0)
-      return 2;
-   if (png_muldiv(&green_inverse, xy->whitey, denominator, left-right) == 0 ||
-       green_inverse <= xy->whitey)
-      return 1;
-
-   /* And the blue scale, the checks above guarantee this can't overflow but it
-    * can still produce 0 for extreme cHRM values.
-    */
-   blue_scale = png_reciprocal(xy->whitey) - png_reciprocal(red_inverse) -
-       png_reciprocal(green_inverse);
-   if (blue_scale <= 0)
-      return 1;
-
-
-   /* And fill in the png_XYZ: */
-   if (png_muldiv(&XYZ->red_X, xy->redx, PNG_FP_1, red_inverse) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->red_Y, xy->redy, PNG_FP_1, red_inverse) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->red_Z, PNG_FP_1 - xy->redx - xy->redy, PNG_FP_1,
-       red_inverse) == 0)
-      return 1;
-
-   if (png_muldiv(&XYZ->green_X, xy->greenx, PNG_FP_1, green_inverse) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->green_Y, xy->greeny, PNG_FP_1, green_inverse) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->green_Z, PNG_FP_1 - xy->greenx - xy->greeny, PNG_FP_1,
-       green_inverse) == 0)
-      return 1;
-
-   if (png_muldiv(&XYZ->blue_X, xy->bluex, blue_scale, PNG_FP_1) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->blue_Y, xy->bluey, blue_scale, PNG_FP_1) == 0)
-      return 1;
-   if (png_muldiv(&XYZ->blue_Z, PNG_FP_1 - xy->bluex - xy->bluey, blue_scale,
-       PNG_FP_1) == 0)
-      return 1;
-
-   return 0; /*success*/
-}
-
-static int
-png_XYZ_normalize(png_XYZ *XYZ)
-{
-   png_int_32 Y;
-
-   if (XYZ->red_Y < 0 || XYZ->green_Y < 0 || XYZ->blue_Y < 0 ||
-      XYZ->red_X < 0 || XYZ->green_X < 0 || XYZ->blue_X < 0 ||
-      XYZ->red_Z < 0 || XYZ->green_Z < 0 || XYZ->blue_Z < 0)
-      return 1;
-
-   /* Normalize by scaling so the sum of the end-point Y values is PNG_FP_1.
-    * IMPLEMENTATION NOTE: ANSI requires signed overflow not to occur, therefore
-    * relying on addition of two positive values producing a negative one is not
-    * safe.
-    */
-   Y = XYZ->red_Y;
-   if (0x7fffffff - Y < XYZ->green_X)
-      return 1;
-   Y += XYZ->green_Y;
-   if (0x7fffffff - Y < XYZ->blue_X)
-      return 1;
-   Y += XYZ->blue_Y;
-
-   if (Y != PNG_FP_1)
-   {
-      if (png_muldiv(&XYZ->red_X, XYZ->red_X, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->red_Y, XYZ->red_Y, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->red_Z, XYZ->red_Z, PNG_FP_1, Y) == 0)
-         return 1;
-
-      if (png_muldiv(&XYZ->green_X, XYZ->green_X, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->green_Y, XYZ->green_Y, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->green_Z, XYZ->green_Z, PNG_FP_1, Y) == 0)
-         return 1;
-
-      if (png_muldiv(&XYZ->blue_X, XYZ->blue_X, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->blue_Y, XYZ->blue_Y, PNG_FP_1, Y) == 0)
-         return 1;
-      if (png_muldiv(&XYZ->blue_Z, XYZ->blue_Z, PNG_FP_1, Y) == 0)
-         return 1;
-   }
-
-   return 0;
-}
-
-static int
-png_colorspace_endpoints_match(const png_xy *xy1, const png_xy *xy2, int delta)
-{
-   /* Allow an error of +/-0.01 (absolute value) on each chromaticity */
-   if (PNG_OUT_OF_RANGE(xy1->whitex, xy2->whitex,delta) ||
-       PNG_OUT_OF_RANGE(xy1->whitey, xy2->whitey,delta) ||
-       PNG_OUT_OF_RANGE(xy1->redx,   xy2->redx,  delta) ||
-       PNG_OUT_OF_RANGE(xy1->redy,   xy2->redy,  delta) ||
-       PNG_OUT_OF_RANGE(xy1->greenx, xy2->greenx,delta) ||
-       PNG_OUT_OF_RANGE(xy1->greeny, xy2->greeny,delta) ||
-       PNG_OUT_OF_RANGE(xy1->bluex,  xy2->bluex, delta) ||
-       PNG_OUT_OF_RANGE(xy1->bluey,  xy2->bluey, delta))
-      return 0;
-   return 1;
-}
-
-/* Added in libpng-1.6.0, a different check for the validity of a set of cHRM
- * chunk chromaticities.  Earlier checks used to simply look for the overflow
- * condition (where the determinant of the matrix to solve for XYZ ends up zero
- * because the chromaticity values are not all distinct.)  Despite this it is
- * theoretically possible to produce chromaticities that are apparently valid
- * but that rapidly degrade to invalid, potentially crashing, sets because of
- * arithmetic inaccuracies when calculations are performed on them.  The new
- * check is to round-trip xy -> XYZ -> xy and then check that the result is
- * within a small percentage of the original.
- */
-static int
-png_colorspace_check_xy(png_XYZ *XYZ, const png_xy *xy)
-{
-   int result;
-   png_xy xy_test;
-
-   /* As a side-effect this routine also returns the XYZ endpoints. */
-   result = png_XYZ_from_xy(XYZ, xy);
-   if (result != 0)
-      return result;
-
-   result = png_xy_from_XYZ(&xy_test, XYZ);
-   if (result != 0)
-      return result;
-
-   if (png_colorspace_endpoints_match(xy, &xy_test,
-       5/*actually, the math is pretty accurate*/) != 0)
-      return 0;
-
-   /* Too much slip */
-   return 1;
-}
-
-/* This is the check going the other way.  The XYZ is modified to normalize it
- * (another side-effect) and the xy chromaticities are returned.
- */
-static int
-png_colorspace_check_XYZ(png_xy *xy, png_XYZ *XYZ)
-{
-   int result;
-   png_XYZ XYZtemp;
-
-   result = png_XYZ_normalize(XYZ);
-   if (result != 0)
-      return result;
-
-   result = png_xy_from_XYZ(xy, XYZ);
-   if (result != 0)
-      return result;
-
-   XYZtemp = *XYZ;
-   return png_colorspace_check_xy(&XYZtemp, xy);
-}
-
-/* Used to check for an endpoint match against sRGB */
-static const png_xy sRGB_xy = /* From ITU-R BT.709-3 */
-{
-   /* color      x       y */
-   /* red   */ 64000, 33000,
-   /* green */ 30000, 60000,
-   /* blue  */ 15000,  6000,
-   /* white */ 31270, 32900
-};
-
-static int
-png_colorspace_set_xy_and_XYZ(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_xy *xy, const png_XYZ *XYZ,
-   int preferred)
-{
-   if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
-      return 0;
-
-   /* The consistency check is performed on the chromaticities; this factors out
-    * variations because of the normalization (or not) of the end point Y
-    * values.
-    */
-   if (preferred < 2 &&
-       (colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      /* The end points must be reasonably close to any we already have.  The
-       * following allows an error of up to +/-.001
-       */
-      if (png_colorspace_endpoints_match(xy, &colorspace->end_points_xy,
-          100) == 0)
-      {
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "inconsistent chromaticities");
-         return 0; /* failed */
-      }
-
-      /* Only overwrite with preferred values */
-      if (preferred == 0)
-         return 1; /* ok, but no change */
-   }
-
-   colorspace->end_points_xy = *xy;
-   colorspace->end_points_XYZ = *XYZ;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_ENDPOINTS;
-
-   /* The end points are normally quoted to two decimal digits, so allow +/-0.01
-    * on this test.
-    */
-   if (png_colorspace_endpoints_match(xy, &sRGB_xy, 1000) != 0)
-      colorspace->flags |= PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB;
-
-   else
-      colorspace->flags &= PNG_COLORSPACE_CANCEL(
-         PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB);
-
-   return 2; /* ok and changed */
-}
-
-int /* PRIVATE */
-png_colorspace_set_chromaticities(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_xy *xy, int preferred)
-{
-   /* We must check the end points to ensure they are reasonable - in the past
-    * color management systems have crashed as a result of getting bogus
-    * colorant values, while this isn't the fault of libpng it is the
-    * responsibility of libpng because PNG carries the bomb and libpng is in a
-    * position to protect against it.
-    */
-   png_XYZ XYZ;
-
-   switch (png_colorspace_check_xy(&XYZ, xy))
-   {
-      case 0: /* success */
-         return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, xy, &XYZ,
-            preferred);
-
-      case 1:
-         /* We can't invert the chromaticities so we can't produce value XYZ
-          * values.  Likely as not a color management system will fail too.
-          */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "invalid chromaticities");
-         break;
-
-      default:
-         /* libpng is broken; this should be a warning but if it happens we
-          * want error reports so for the moment it is an error.
-          */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_error(png_ptr, "internal error checking chromaticities");
-         break;
-   }
-
-   return 0; /* failed */
-}
-
-int /* PRIVATE */
-png_colorspace_set_endpoints(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, const png_XYZ *XYZ_in, int preferred)
-{
-   png_XYZ XYZ = *XYZ_in;
-   png_xy xy;
-
-   switch (png_colorspace_check_XYZ(&xy, &XYZ))
-   {
-      case 0:
-         return png_colorspace_set_xy_and_XYZ(png_ptr, colorspace, &xy, &XYZ,
-            preferred);
-
-      case 1:
-         /* End points are invalid. */
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_benign_error(png_ptr, "invalid end points");
-         break;
-
-      default:
-         colorspace->flags |= PNG_COLORSPACE_INVALID;
-         png_error(png_ptr, "internal error checking chromaticities");
-         break;
-   }
-
-   return 0; /* failed */
-}
-
-#if defined(PNG_sRGB_SUPPORTED) || defined(PNG_iCCP_SUPPORTED)
-/* Error message generation */
-static char
-png_icc_tag_char(png_uint_32 byte)
-{
-   byte &= 0xff;
-   if (byte >= 32 && byte <= 126)
-      return (char)byte;
-   else
-      return '?';
-}
-
-static void
-png_icc_tag_name(char *name, png_uint_32 tag)
-{
-   name[0] = '\'';
-   name[1] = png_icc_tag_char(tag >> 24);
-   name[2] = png_icc_tag_char(tag >> 16);
-   name[3] = png_icc_tag_char(tag >>  8);
-   name[4] = png_icc_tag_char(tag      );
-   name[5] = '\'';
-}
-
-static int
-is_ICC_signature_char(png_alloc_size_t it)
-{
-   return it == 32 || (it >= 48 && it <= 57) || (it >= 65 && it <= 90) ||
-      (it >= 97 && it <= 122);
-}
-
-static int
-is_ICC_signature(png_alloc_size_t it)
-{
-   return is_ICC_signature_char(it >> 24) /* checks all the top bits */ &&
-      is_ICC_signature_char((it >> 16) & 0xff) &&
-      is_ICC_signature_char((it >> 8) & 0xff) &&
-      is_ICC_signature_char(it & 0xff);
-}
-
-static int
-png_icc_profile_error(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_alloc_size_t value, png_const_charp reason)
-{
-   size_t pos;
-   char message[196]; /* see below for calculation */
-
-   if (colorspace != NULL)
-      colorspace->flags |= PNG_COLORSPACE_INVALID;
-
-   pos = png_safecat(message, (sizeof message), 0, "profile '"); /* 9 chars */
-   pos = png_safecat(message, pos+79, pos, name); /* Truncate to 79 chars */
-   pos = png_safecat(message, (sizeof message), pos, "': "); /* +2 = 90 */
-   if (is_ICC_signature(value) != 0)
-   {
-      /* So 'value' is at most 4 bytes and the following cast is safe */
-      png_icc_tag_name(message+pos, (png_uint_32)value);
-      pos += 6; /* total +8; less than the else clause */
-      message[pos++] = ':';
-      message[pos++] = ' ';
-   }
-#  ifdef PNG_WARNINGS_SUPPORTED
-   else
-      {
-         char number[PNG_NUMBER_BUFFER_SIZE]; /* +24 = 114*/
-
-         pos = png_safecat(message, (sizeof message), pos,
-            png_format_number(number, number+(sizeof number),
-               PNG_NUMBER_FORMAT_x, value));
-         pos = png_safecat(message, (sizeof message), pos, "h: "); /*+2 = 116*/
-      }
-#  endif
-   /* The 'reason' is an arbitrary message, allow +79 maximum 195 */
-   pos = png_safecat(message, (sizeof message), pos, reason);
-   PNG_UNUSED(pos)
-
-   /* This is recoverable, but make it unconditionally an app_error on write to
-    * avoid writing invalid ICC profiles into PNG files (i.e., we handle them
-    * on read, with a warning, but on write unless the app turns off
-    * application errors the PNG won't be written.)
-    */
-   png_chunk_report(png_ptr, message,
-      (colorspace != NULL) ? PNG_CHUNK_ERROR : PNG_CHUNK_WRITE_ERROR);
-
-   return 0;
-}
-#endif /* sRGB || iCCP */
-
-#ifdef PNG_sRGB_SUPPORTED
-int /* PRIVATE */
-png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   int intent)
-{
-   /* sRGB sets known gamma, end points and (from the chunk) intent. */
-   /* IMPORTANT: these are not necessarily the values found in an ICC profile
-    * because ICC profiles store values adapted to a D50 environment; it is
-    * expected that the ICC profile mediaWhitePointTag will be D50; see the
-    * checks and code elsewhere to understand this better.
-    *
-    * These XYZ values, which are accurate to 5dp, produce rgb to gray
-    * coefficients of (6968,23435,2366), which are reduced (because they add up
-    * to 32769 not 32768) to (6968,23434,2366).  These are the values that
-    * libpng has traditionally used (and are the best values given the 15bit
-    * algorithm used by the rgb to gray code.)
-    */
-   static const png_XYZ sRGB_XYZ = /* D65 XYZ (*not* the D50 adapted values!) */
-   {
-      /* color      X      Y      Z */
-      /* red   */ 41239, 21264,  1933,
-      /* green */ 35758, 71517, 11919,
-      /* blue  */ 18048,  7219, 95053
-   };
-
-   /* Do nothing if the colorspace is already invalidated. */
-   if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
-      return 0;
-
-   /* Check the intent, then check for existing settings.  It is valid for the
-    * PNG file to have cHRM or gAMA chunks along with sRGB, but the values must
-    * be consistent with the correct values.  If, however, this function is
-    * called below because an iCCP chunk matches sRGB then it is quite
-    * conceivable that an older app recorded incorrect gAMA and cHRM because of
-    * an incorrect calculation based on the values in the profile - this does
-    * *not* invalidate the profile (though it still produces an error, which can
-    * be ignored.)
-    */
-   if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST)
-      return png_icc_profile_error(png_ptr, colorspace, "sRGB",
-         (unsigned)intent, "invalid sRGB rendering intent");
-
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 &&
-      colorspace->rendering_intent != intent)
-      return png_icc_profile_error(png_ptr, colorspace, "sRGB",
-         (unsigned)intent, "inconsistent rendering intents");
-
-   if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0)
-   {
-      png_benign_error(png_ptr, "duplicate sRGB information ignored");
-      return 0;
-   }
-
-   /* If the standard sRGB cHRM chunk does not match the one from the PNG file
-    * warn but overwrite the value with the correct one.
-    */
-   if ((colorspace->flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0 &&
-      !png_colorspace_endpoints_match(&sRGB_xy, &colorspace->end_points_xy,
-         100))
-      png_chunk_report(png_ptr, "cHRM chunk does not match sRGB",
-         PNG_CHUNK_ERROR);
-
-   /* This check is just done for the error reporting - the routine always
-    * returns true when the 'from' argument corresponds to sRGB (2).
-    */
-   (void)png_colorspace_check_gamma(png_ptr, colorspace, PNG_GAMMA_sRGB_INVERSE,
-      2/*from sRGB*/);
-
-   /* intent: bugs in GCC force 'int' to be used as the parameter type. */
-   colorspace->rendering_intent = (png_uint_16)intent;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_INTENT;
-
-   /* endpoints */
-   colorspace->end_points_xy = sRGB_xy;
-   colorspace->end_points_XYZ = sRGB_XYZ;
-   colorspace->flags |=
-      (PNG_COLORSPACE_HAVE_ENDPOINTS|PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB);
-
-   /* gamma */
-   colorspace->gamma = PNG_GAMMA_sRGB_INVERSE;
-   colorspace->flags |= PNG_COLORSPACE_HAVE_GAMMA;
-
-   /* Finally record that we have an sRGB profile */
-   colorspace->flags |=
-      (PNG_COLORSPACE_MATCHES_sRGB|PNG_COLORSPACE_FROM_sRGB);
-
-   return 1; /* set */
-}
-#endif /* sRGB */
-
-#ifdef PNG_iCCP_SUPPORTED
-/* Encoded value of D50 as an ICC XYZNumber.  From the ICC 2010 spec the value
- * is XYZ(0.9642,1.0,0.8249), which scales to:
- *
- *    (63189.8112, 65536, 54060.6464)
- */
-static const png_byte D50_nCIEXYZ[12] =
-   { 0x00, 0x00, 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d };
-
-int /* PRIVATE */
-png_icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length)
-{
-   if (profile_length < 132)
-      return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
-         "too short");
-
-   return 1;
-}
-
-int /* PRIVATE */
-png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length,
-   png_const_bytep profile/* first 132 bytes only */, int color_type)
-{
-   png_uint_32 temp;
-
-   /* Length check; this cannot be ignored in this code because profile_length
-    * is used later to check the tag table, so even if the profile seems over
-    * long profile_length from the caller must be correct.  The caller can fix
-    * this up on read or write by just passing in the profile header length.
-    */
-   temp = png_get_uint_32(profile);
-   if (temp != profile_length)
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "length does not match profile");
-
-   temp = (png_uint_32) (*(profile+8));
-   if (temp > 3 && (profile_length & 3))
-      return png_icc_profile_error(png_ptr, colorspace, name, profile_length,
-         "invalid length");
-
-   temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
-   if (temp > 357913930 || /* (2^32-4-132)/12: maximum possible tag count */
-      profile_length < 132+12*temp) /* truncated tag table */
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "tag count too large");
-
-   /* The 'intent' must be valid or we can't store it, ICC limits the intent to
-    * 16 bits.
-    */
-   temp = png_get_uint_32(profile+64);
-   if (temp >= 0xffff) /* The ICC limit */
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "invalid rendering intent");
-
-   /* This is just a warning because the profile may be valid in future
-    * versions.
-    */
-   if (temp >= PNG_sRGB_INTENT_LAST)
-      (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-         "intent outside defined range");
-
-   /* At this point the tag table can't be checked because it hasn't necessarily
-    * been loaded; however, various header fields can be checked.  These checks
-    * are for values permitted by the PNG spec in an ICC profile; the PNG spec
-    * restricts the profiles that can be passed in an iCCP chunk (they must be
-    * appropriate to processing PNG data!)
-    */
-
-   /* Data checks (could be skipped).  These checks must be independent of the
-    * version number; however, the version number doesn't accomodate changes in
-    * the header fields (just the known tags and the interpretation of the
-    * data.)
-    */
-   temp = png_get_uint_32(profile+36); /* signature 'ascp' */
-   if (temp != 0x61637370)
-      return png_icc_profile_error(png_ptr, colorspace, name, temp,
-         "invalid signature");
-
-   /* Currently the PCS illuminant/adopted white point (the computational
-    * white point) are required to be D50,
-    * however the profile contains a record of the illuminant so perhaps ICC
-    * expects to be able to change this in the future (despite the rationale in
-    * the introduction for using a fixed PCS adopted white.)  Consequently the
-    * following is just a warning.
-    */
-   if (memcmp(profile+68, D50_nCIEXYZ, 12) != 0)
-      (void)png_icc_profile_error(png_ptr, NULL, name, 0/*no tag value*/,
-         "PCS illuminant is not D50");
-
-   /* The PNG spec requires this:
-    * "If the iCCP chunk is present, the image samples conform to the colour
-    * space represented by the embedded ICC profile as defined by the
-    * International Color Consortium [ICC]. The colour space of the ICC profile
-    * shall be an RGB colour space for colour images (PNG colour types 2, 3, and
-    * 6), or a greyscale colour space for greyscale images (PNG colour types 0
-    * and 4)."
-    *
-    * This checking code ensures the embedded profile (on either read or write)
-    * conforms to the specification requirements.  Notice that an ICC 'gray'
-    * color-space profile contains the information to transform the monochrome
-    * data to XYZ or L*a*b (according to which PCS the profile uses) and this
-    * should be used in preference to the standard libpng K channel replication
-    * into R, G and B channels.
-    *
-    * Previously it was suggested that an RGB profile on grayscale data could be
-    * handled.  However it it is clear that using an RGB profile in this context
-    * must be an error - there is no specification of what it means.  Thus it is
-    * almost certainly more correct to ignore the profile.
-    */
-   temp = png_get_uint_32(profile+16); /* data colour space field */
-   switch (temp)
-   {
-      case 0x52474220: /* 'RGB ' */
-         if ((color_type & PNG_COLOR_MASK_COLOR) == 0)
-            return png_icc_profile_error(png_ptr, colorspace, name, temp,
-               "RGB color space not permitted on grayscale PNG");
-         break;
-
-      case 0x47524159: /* 'GRAY' */
-         if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
-            return png_icc_profile_error(png_ptr, colorspace, name, temp,
-               "Gray color space not permitted on RGB PNG");
-         break;
-
-      default:
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "invalid ICC profile color space");
-   }
-
-   /* It is up to the application to check that the profile class matches the
-    * application requirements; the spec provides no guidance, but it's pretty
-    * weird if the profile is not scanner ('scnr'), monitor ('mntr'), printer
-    * ('prtr') or 'spac' (for generic color spaces).  Issue a warning in these
-    * cases.  Issue an error for device link or abstract profiles - these don't
-    * contain the records necessary to transform the color-space to anything
-    * other than the target device (and not even that for an abstract profile).
-    * Profiles of these classes may not be embedded in images.
-    */
-   temp = png_get_uint_32(profile+12); /* profile/device class */
-   switch (temp)
-   {
-      case 0x73636E72: /* 'scnr' */
-      case 0x6D6E7472: /* 'mntr' */
-      case 0x70727472: /* 'prtr' */
-      case 0x73706163: /* 'spac' */
-         /* All supported */
-         break;
-
-      case 0x61627374: /* 'abst' */
-         /* May not be embedded in an image */
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "invalid embedded Abstract ICC profile");
-
-      case 0x6C696E6B: /* 'link' */
-         /* DeviceLink profiles cannot be interpreted in a non-device specific
-          * fashion, if an app uses the AToB0Tag in the profile the results are
-          * undefined unless the result is sent to the intended device,
-          * therefore a DeviceLink profile should not be found embedded in a
-          * PNG.
-          */
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "unexpected DeviceLink ICC profile class");
-
-      case 0x6E6D636C: /* 'nmcl' */
-         /* A NamedColor profile is also device specific, however it doesn't
-          * contain an AToB0 tag that is open to misinterpretation.  Almost
-          * certainly it will fail the tests below.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-            "unexpected NamedColor ICC profile class");
-         break;
-
-      default:
-         /* To allow for future enhancements to the profile accept unrecognized
-          * profile classes with a warning, these then hit the test below on the
-          * tag content to ensure they are backward compatible with one of the
-          * understood profiles.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, temp,
-            "unrecognized ICC profile class");
-         break;
-   }
-
-   /* For any profile other than a device link one the PCS must be encoded
-    * either in XYZ or Lab.
-    */
-   temp = png_get_uint_32(profile+20);
-   switch (temp)
-   {
-      case 0x58595A20: /* 'XYZ ' */
-      case 0x4C616220: /* 'Lab ' */
-         break;
-
-      default:
-         return png_icc_profile_error(png_ptr, colorspace, name, temp,
-            "unexpected ICC PCS encoding");
-   }
-
-   return 1;
-}
-
-int /* PRIVATE */
-png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length,
-   png_const_bytep profile /* header plus whole tag table */)
-{
-   png_uint_32 tag_count = png_get_uint_32(profile+128);
-   png_uint_32 itag;
-   png_const_bytep tag = profile+132; /* The first tag */
-
-   /* First scan all the tags in the table and add bits to the icc_info value
-    * (temporarily in 'tags').
-    */
-   for (itag=0; itag < tag_count; ++itag, tag += 12)
-   {
-      png_uint_32 tag_id = png_get_uint_32(tag+0);
-      png_uint_32 tag_start = png_get_uint_32(tag+4); /* must be aligned */
-      png_uint_32 tag_length = png_get_uint_32(tag+8);/* not padded */
-
-      /* The ICC specification does not exclude zero length tags, therefore the
-       * start might actually be anywhere if there is no data, but this would be
-       * a clear abuse of the intent of the standard so the start is checked for
-       * being in range.  All defined tag types have an 8 byte header - a 4 byte
-       * type signature then 0.
-       */
-      if ((tag_start & 3) != 0)
-      {
-         /* CNHP730S.icc shipped with Microsoft Windows 64 violates this, it is
-          * only a warning here because libpng does not care about the
-          * alignment.
-          */
-         (void)png_icc_profile_error(png_ptr, NULL, name, tag_id,
-            "ICC profile tag start not a multiple of 4");
-      }
-
-      /* This is a hard error; potentially it can cause read outside the
-       * profile.
-       */
-      if (tag_start > profile_length || tag_length > profile_length - tag_start)
-         return png_icc_profile_error(png_ptr, colorspace, name, tag_id,
-            "ICC profile tag outside profile");
-   }
-
-   return 1; /* success, maybe with warnings */
-}
-
-#if defined(PNG_sRGB_SUPPORTED) && PNG_sRGB_PROFILE_CHECKS >= 0
-/* Information about the known ICC sRGB profiles */
-static const struct
-{
-   png_uint_32 adler, crc, length;
-   png_uint_32 md5[4];
-   png_byte    have_md5;
-   png_byte    is_broken;
-   png_uint_16 intent;
-
-#  define PNG_MD5(a,b,c,d) { a, b, c, d }, (a!=0)||(b!=0)||(c!=0)||(d!=0)
-#  define PNG_ICC_CHECKSUM(adler, crc, md5, intent, broke, date, length, fname)\
-      { adler, crc, length, md5, broke, intent },
-
-} png_sRGB_checks[] =
-{
-   /* This data comes from contrib/tools/checksum-icc run on downloads of
-    * all four ICC sRGB profiles from www.color.org.
-    */
-   /* adler32, crc32, MD5[4], intent, date, length, file-name */
-   PNG_ICC_CHECKSUM(0x0a3fd9f6, 0x3b8772b9,
-      PNG_MD5(0x29f83dde, 0xaff255ae, 0x7842fae4, 0xca83390d), 0, 0,
-      "2009/03/27 21:36:31", 3048, "sRGB_IEC61966-2-1_black_scaled.icc")
-
-   /* ICC sRGB v2 perceptual no black-compensation: */
-   PNG_ICC_CHECKSUM(0x4909e5e1, 0x427ebb21,
-      PNG_MD5(0xc95bd637, 0xe95d8a3b, 0x0df38f99, 0xc1320389), 1, 0,
-      "2009/03/27 21:37:45", 3052, "sRGB_IEC61966-2-1_no_black_scaling.icc")
-
-   PNG_ICC_CHECKSUM(0xfd2144a1, 0x306fd8ae,
-      PNG_MD5(0xfc663378, 0x37e2886b, 0xfd72e983, 0x8228f1b8), 0, 0,
-      "2009/08/10 17:28:01", 60988, "sRGB_v4_ICC_preference_displayclass.icc")
-
-   /* ICC sRGB v4 perceptual */
-   PNG_ICC_CHECKSUM(0x209c35d2, 0xbbef7812,
-      PNG_MD5(0x34562abf, 0x994ccd06, 0x6d2c5721, 0xd0d68c5d), 0, 0,
-      "2007/07/25 00:05:37", 60960, "sRGB_v4_ICC_preference.icc")
-
-   /* The following profiles have no known MD5 checksum. If there is a match
-    * on the (empty) MD5 the other fields are used to attempt a match and
-    * a warning is produced.  The first two of these profiles have a 'cprt' tag
-    * which suggests that they were also made by Hewlett Packard.
-    */
-   PNG_ICC_CHECKSUM(0xa054d762, 0x5d5129ce,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 0,
-      "2004/07/21 18:57:42", 3024, "sRGB_IEC61966-2-1_noBPC.icc")
-
-   /* This is a 'mntr' (display) profile with a mediaWhitePointTag that does not
-    * match the D50 PCS illuminant in the header (it is in fact the D65 values,
-    * so the white point is recorded as the un-adapted value.)  The profiles
-    * below only differ in one byte - the intent - and are basically the same as
-    * the previous profile except for the mediaWhitePointTag error and a missing
-    * chromaticAdaptationTag.
-    */
-   PNG_ICC_CHECKSUM(0xf784f3fb, 0x182ea552,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
-      "1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
-
-   PNG_ICC_CHECKSUM(0x0398f3fc, 0xf29e526d,
-      PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
-      "1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
-};
-
-static int
-png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
-   png_const_bytep profile, uLong adler)
-{
-   /* The quick check is to verify just the MD5 signature and trust the
-    * rest of the data.  Because the profile has already been verified for
-    * correctness this is safe.  png_colorspace_set_sRGB will check the 'intent'
-    * field too, so if the profile has been edited with an intent not defined
-    * by sRGB (but maybe defined by a later ICC specification) the read of
-    * the profile will fail at that point.
-    */
-
-   png_uint_32 length = 0;
-   png_uint_32 intent = 0x10000; /* invalid */
-#if PNG_sRGB_PROFILE_CHECKS > 1
-   uLong crc = 0; /* the value for 0 length data */
-#endif
-   unsigned int i;
-
-#ifdef PNG_SET_OPTION_SUPPORTED
-   /* First see if PNG_SKIP_sRGB_CHECK_PROFILE has been set to "on" */
-   if (((png_ptr->options >> PNG_SKIP_sRGB_CHECK_PROFILE) & 3) ==
-               PNG_OPTION_ON)
-      return 0;
-#endif
-
-   for (i=0; i < (sizeof png_sRGB_checks) / (sizeof png_sRGB_checks[0]); ++i)
-   {
-      if (png_get_uint_32(profile+84) == png_sRGB_checks[i].md5[0] &&
-         png_get_uint_32(profile+88) == png_sRGB_checks[i].md5[1] &&
-         png_get_uint_32(profile+92) == png_sRGB_checks[i].md5[2] &&
-         png_get_uint_32(profile+96) == png_sRGB_checks[i].md5[3])
-      {
-         /* This may be one of the old HP profiles without an MD5, in that
-          * case we can only use the length and Adler32 (note that these
-          * are not used by default if there is an MD5!)
-          */
-#        if PNG_sRGB_PROFILE_CHECKS == 0
-            if (png_sRGB_checks[i].have_md5 != 0)
-               return 1+png_sRGB_checks[i].is_broken;
-#        endif
-
-         /* Profile is unsigned or more checks have been configured in. */
-         if (length == 0)
-         {
-            length = png_get_uint_32(profile);
-            intent = png_get_uint_32(profile+64);
-         }
-
-         /* Length *and* intent must match */
-         if (length == png_sRGB_checks[i].length &&
-            intent == png_sRGB_checks[i].intent)
-         {
-            /* Now calculate the adler32 if not done already. */
-            if (adler == 0)
-            {
-               adler = adler32(0, NULL, 0);
-               adler = adler32(adler, profile, length);
-            }
-
-            if (adler == png_sRGB_checks[i].adler)
-            {
-               /* These basic checks suggest that the data has not been
-                * modified, but if the check level is more than 1 perform
-                * our own crc32 checksum on the data.
-                */
-#              if PNG_sRGB_PROFILE_CHECKS > 1
-                  if (crc == 0)
-                  {
-                     crc = crc32(0, NULL, 0);
-                     crc = crc32(crc, profile, length);
-                  }
-
-                  /* So this check must pass for the 'return' below to happen.
-                   */
-                  if (crc == png_sRGB_checks[i].crc)
-#              endif
-               {
-                  if (png_sRGB_checks[i].is_broken != 0)
-                  {
-                     /* These profiles are known to have bad data that may cause
-                      * problems if they are used, therefore attempt to
-                      * discourage their use, skip the 'have_md5' warning below,
-                      * which is made irrelevant by this error.
-                      */
-                     png_chunk_report(png_ptr, "known incorrect sRGB profile",
-                        PNG_CHUNK_ERROR);
-                  }
-
-                  /* Warn that this being done; this isn't even an error since
-                   * the profile is perfectly valid, but it would be nice if
-                   * people used the up-to-date ones.
-                   */
-                  else if (png_sRGB_checks[i].have_md5 == 0)
-                  {
-                     png_chunk_report(png_ptr, "out-of-date sRGB profile with"
-                        " no signature",
-                        PNG_CHUNK_WARNING);
-                  }
-
-                  return 1+png_sRGB_checks[i].is_broken;
-               }
-            }
-
-# if PNG_sRGB_PROFILE_CHECKS > 0
-         /* The signature matched, but the profile had been changed in some
-          * way.  This probably indicates a data error or uninformed hacking.
-          * Fall through to "no match".
-          */
-         png_chunk_report(png_ptr, "Not recognizing known sRGB profile that"
-             " has been edited", 
-             PNG_CHUNK_WARNING);
-         break;
-# endif
-         }
-      }
-   }
-
-   return 0; /* no match */
-}
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-void /* PRIVATE */
-png_icc_set_sRGB(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_bytep profile, uLong adler)
-{
-   /* Is this profile one of the known ICC sRGB profiles?  If it is, just set
-    * the sRGB information.
-    */
-#if PNG_sRGB_PROFILE_CHECKS >= 0
-   if (png_compare_ICC_profile_with_sRGB(png_ptr, profile, adler) != 0)
-#endif
-      (void)png_colorspace_set_sRGB(png_ptr, colorspace,
-         (int)/*already checked*/png_get_uint_32(profile+64));
-}
-#endif /* READ_sRGB */
-
-int /* PRIVATE */
-png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_charp name, png_uint_32 profile_length, png_const_bytep profile,
-   int color_type)
-{
-   if ((colorspace->flags & PNG_COLORSPACE_INVALID) != 0)
-      return 0;
-
-   if (png_icc_check_length(png_ptr, colorspace, name, profile_length) != 0 &&
-       png_icc_check_header(png_ptr, colorspace, name, profile_length, profile,
-          color_type) != 0 &&
-       png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
-          profile) != 0)
-   {
-#     ifdef PNG_sRGB_SUPPORTED
-         /* If no sRGB support, don't try storing sRGB information */
-         png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
-#     endif
-      return 1;
-   }
-
-   /* Failure case */
-   return 0;
-}
-#endif /* iCCP */
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-void /* PRIVATE */
-png_colorspace_set_rgb_coefficients(png_structrp png_ptr)
-{
-   /* Set the rgb_to_gray coefficients from the colorspace. */
-   if (png_ptr->rgb_to_gray_coefficients_set == 0 &&
-      (png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      /* png_set_background has not been called, get the coefficients from the Y
-       * values of the colorspace colorants.
-       */
-      png_fixed_point r = png_ptr->colorspace.end_points_XYZ.red_Y;
-      png_fixed_point g = png_ptr->colorspace.end_points_XYZ.green_Y;
-      png_fixed_point b = png_ptr->colorspace.end_points_XYZ.blue_Y;
-      png_fixed_point total = r+g+b;
-
-      if (total > 0 &&
-         r >= 0 && png_muldiv(&r, r, 32768, total) && r >= 0 && r <= 32768 &&
-         g >= 0 && png_muldiv(&g, g, 32768, total) && g >= 0 && g <= 32768 &&
-         b >= 0 && png_muldiv(&b, b, 32768, total) && b >= 0 && b <= 32768 &&
-         r+g+b <= 32769)
-      {
-         /* We allow 0 coefficients here.  r+g+b may be 32769 if two or
-          * all of the coefficients were rounded up.  Handle this by
-          * reducing the *largest* coefficient by 1; this matches the
-          * approach used for the default coefficients in pngrtran.c
-          */
-         int add = 0;
-
-         if (r+g+b > 32768)
-            add = -1;
-         else if (r+g+b < 32768)
-            add = 1;
-
-         if (add != 0)
-         {
-            if (g >= r && g >= b)
-               g += add;
-            else if (r >= g && r >= b)
-               r += add;
-            else
-               b += add;
-         }
-
-         /* Check for an internal error. */
-         if (r+g+b != 32768)
-            png_error(png_ptr,
-               "internal error handling cHRM coefficients");
-
-         else
-         {
-            png_ptr->rgb_to_gray_red_coeff   = (png_uint_16)r;
-            png_ptr->rgb_to_gray_green_coeff = (png_uint_16)g;
-         }
-      }
-
-      /* This is a png_error at present even though it could be ignored -
-       * it should never happen, but it is important that if it does, the
-       * bug is fixed.
-       */
-      else
-         png_error(png_ptr, "internal error handling cHRM->XYZ");
-   }
-}
-#endif
-
-#endif /* COLORSPACE */
-
-#ifdef __GNUC__
-/* This exists solely to work round a warning from GNU C. */
-static int /* PRIVATE */
-png_gt(size_t a, size_t b)
-{
-    return a > b;
-}
-#else
-#   define png_gt(a,b) ((a) > (b))
-#endif
-
-void /* PRIVATE */
-png_check_IHDR(png_const_structrp png_ptr,
-   png_uint_32 width, png_uint_32 height, int bit_depth,
-   int color_type, int interlace_type, int compression_type,
-   int filter_type)
-{
-   int error = 0;
-
-   /* Check for width and height valid values */
-   if (width == 0)
-   {
-      png_warning(png_ptr, "Image width is zero in IHDR");
-      error = 1;
-   }
-   else if (width > PNG_UINT_31_MAX)
-   {
-      png_warning(png_ptr, "Invalid image width in IHDR");
-      error = 1;
-   }
-
-   else if (png_gt(width,
-                   (PNG_SIZE_MAX >> 3) /* 8-byte RGBA pixels */
-                   - 48                /* big_row_buf hack */
-                   - 1                 /* filter byte */
-                   - 7*8               /* rounding width to multiple of 8 pix */
-                   - 8))               /* extra max_pixel_depth pad */
-   {
-      /* The size of the row must be within the limits of this architecture.
-       * Because the read code can perform arbitrary transformations the
-       * maximum size is checked here.  Because the code in png_read_start_row
-       * adds extra space "for safety's sake" in several places a conservative
-       * limit is used here.
-       *
-       * NOTE: it would be far better to check the size that is actually used,
-       * but the effect in the real world is minor and the changes are more
-       * extensive, therefore much more dangerous and much more difficult to
-       * write in a way that avoids compiler warnings.
-       */
-      png_warning(png_ptr, "Image width is too large for this architecture");
-      error = 1;
-   }
-   else
-   {
-#     ifdef PNG_SET_USER_LIMITS_SUPPORTED
-      if (width > png_ptr->user_width_max)
-#     else
-      if (width > PNG_USER_WIDTH_MAX)
-#     endif
-      {
-         png_warning(png_ptr, "Image width exceeds user limit in IHDR");
-         error = 1;
-      }
-   }
-
-   if (height == 0)
-   {
-      png_warning(png_ptr, "Image height is zero in IHDR");
-      error = 1;
-   }
-   else if (height > PNG_UINT_31_MAX)
-   {
-      png_warning(png_ptr, "Invalid image height in IHDR");
-      error = 1;
-   }
-   else
-   {
-#     ifdef PNG_SET_USER_LIMITS_SUPPORTED
-      if (height > png_ptr->user_height_max)
-#     else
-      if (height > PNG_USER_HEIGHT_MAX)
-#     endif
-      {
-         png_warning(png_ptr, "Image height exceeds user limit in IHDR");
-         error = 1;
-      }
-   }
-
-   /* Check other values */
-   if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
-       bit_depth != 8 && bit_depth != 16)
-   {
-      png_warning(png_ptr, "Invalid bit depth in IHDR");
-      error = 1;
-   }
-
-   if (color_type < 0 || color_type == 1 ||
-       color_type == 5 || color_type > 6)
-   {
-      png_warning(png_ptr, "Invalid color type in IHDR");
-      error = 1;
-   }
-
-   if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
-       ((color_type == PNG_COLOR_TYPE_RGB ||
-         color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
-         color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
-   {
-      png_warning(png_ptr, "Invalid color type/bit depth combination in IHDR");
-      error = 1;
-   }
-
-   if (interlace_type >= PNG_INTERLACE_LAST)
-   {
-      png_warning(png_ptr, "Unknown interlace method in IHDR");
-      error = 1;
-   }
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Unknown compression method in IHDR");
-      error = 1;
-   }
-
-#  ifdef PNG_MNG_FEATURES_SUPPORTED
-   /* Accept filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not read a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0 &&
-       png_ptr->mng_features_permitted != 0)
-      png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
-
-   if (filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      if (!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
-          (filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
-          ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) == 0) &&
-          (color_type == PNG_COLOR_TYPE_RGB ||
-          color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
-      {
-         png_warning(png_ptr, "Unknown filter method in IHDR");
-         error = 1;
-      }
-
-      if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0)
-      {
-         png_warning(png_ptr, "Invalid filter method in IHDR");
-         error = 1;
-      }
-   }
-
-#  else
-   if (filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Unknown filter method in IHDR");
-      error = 1;
-   }
-#  endif
-
-   if (error == 1)
-      png_error(png_ptr, "Invalid IHDR data");
-}
-
-#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)
-/* ASCII to fp functions */
-/* Check an ASCII formated floating point value, see the more detailed
- * comments in pngpriv.h
- */
-/* The following is used internally to preserve the sticky flags */
-#define png_fp_add(state, flags) ((state) |= (flags))
-#define png_fp_set(state, value) ((state) = (value) | ((state) & PNG_FP_STICKY))
-
-int /* PRIVATE */
-png_check_fp_number(png_const_charp string, png_size_t size, int *statep,
-   png_size_tp whereami)
-{
-   int state = *statep;
-   png_size_t i = *whereami;
-
-   while (i < size)
-   {
-      int type;
-      /* First find the type of the next character */
-      switch (string[i])
-      {
-      case 43:  type = PNG_FP_SAW_SIGN;                   break;
-      case 45:  type = PNG_FP_SAW_SIGN + PNG_FP_NEGATIVE; break;
-      case 46:  type = PNG_FP_SAW_DOT;                    break;
-      case 48:  type = PNG_FP_SAW_DIGIT;                  break;
-      case 49: case 50: case 51: case 52:
-      case 53: case 54: case 55: case 56:
-      case 57:  type = PNG_FP_SAW_DIGIT + PNG_FP_NONZERO; break;
-      case 69:
-      case 101: type = PNG_FP_SAW_E;                      break;
-      default:  goto PNG_FP_End;
-      }
-
-      /* Now deal with this type according to the current
-       * state, the type is arranged to not overlap the
-       * bits of the PNG_FP_STATE.
-       */
-      switch ((state & PNG_FP_STATE) + (type & PNG_FP_SAW_ANY))
-      {
-      case PNG_FP_INTEGER + PNG_FP_SAW_SIGN:
-         if ((state & PNG_FP_SAW_ANY) != 0)
-            goto PNG_FP_End; /* not a part of the number */
-
-         png_fp_add(state, type);
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_DOT:
-         /* Ok as trailer, ok as lead of fraction. */
-         if ((state & PNG_FP_SAW_DOT) != 0) /* two dots */
-            goto PNG_FP_End;
-
-         else if ((state & PNG_FP_SAW_DIGIT) != 0) /* trailing dot? */
-            png_fp_add(state, type);
-
-         else
-            png_fp_set(state, PNG_FP_FRACTION | type);
-
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_DIGIT:
-         if ((state & PNG_FP_SAW_DOT) != 0) /* delayed fraction */
-            png_fp_set(state, PNG_FP_FRACTION | PNG_FP_SAW_DOT);
-
-         png_fp_add(state, type | PNG_FP_WAS_VALID);
-
-         break;
-
-      case PNG_FP_INTEGER + PNG_FP_SAW_E:
-         if ((state & PNG_FP_SAW_DIGIT) == 0)
-            goto PNG_FP_End;
-
-         png_fp_set(state, PNG_FP_EXPONENT);
-
-         break;
-
-   /* case PNG_FP_FRACTION + PNG_FP_SAW_SIGN:
-         goto PNG_FP_End; ** no sign in fraction */
-
-   /* case PNG_FP_FRACTION + PNG_FP_SAW_DOT:
-         goto PNG_FP_End; ** Because SAW_DOT is always set */
-
-      case PNG_FP_FRACTION + PNG_FP_SAW_DIGIT:
-         png_fp_add(state, type | PNG_FP_WAS_VALID);
-         break;
-
-      case PNG_FP_FRACTION + PNG_FP_SAW_E:
-         /* This is correct because the trailing '.' on an
-          * integer is handled above - so we can only get here
-          * with the sequence ".E" (with no preceding digits).
-          */
-         if ((state & PNG_FP_SAW_DIGIT) == 0)
-            goto PNG_FP_End;
-
-         png_fp_set(state, PNG_FP_EXPONENT);
-
-         break;
-
-      case PNG_FP_EXPONENT + PNG_FP_SAW_SIGN:
-         if ((state & PNG_FP_SAW_ANY) != 0)
-            goto PNG_FP_End; /* not a part of the number */
-
-         png_fp_add(state, PNG_FP_SAW_SIGN);
-
-         break;
-
-   /* case PNG_FP_EXPONENT + PNG_FP_SAW_DOT:
-         goto PNG_FP_End; */
-
-      case PNG_FP_EXPONENT + PNG_FP_SAW_DIGIT:
-         png_fp_add(state, PNG_FP_SAW_DIGIT | PNG_FP_WAS_VALID);
-
-         break;
-
-   /* case PNG_FP_EXPONEXT + PNG_FP_SAW_E:
-         goto PNG_FP_End; */
-
-      default: goto PNG_FP_End; /* I.e. break 2 */
-      }
-
-      /* The character seems ok, continue. */
-      ++i;
-   }
-
-PNG_FP_End:
-   /* Here at the end, update the state and return the correct
-    * return code.
-    */
-   *statep = state;
-   *whereami = i;
-
-   return (state & PNG_FP_SAW_DIGIT) != 0;
-}
-
-
-/* The same but for a complete string. */
-int
-png_check_fp_string(png_const_charp string, png_size_t size)
-{
-   int        state=0;
-   png_size_t char_index=0;
-
-   if (png_check_fp_number(string, size, &state, &char_index) != 0 &&
-      (char_index == size || string[char_index] == 0))
-      return state /* must be non-zero - see above */;
-
-   return 0; /* i.e. fail */
-}
-#endif /* pCAL || sCAL */
-
-#ifdef PNG_sCAL_SUPPORTED
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-/* Utility used below - a simple accurate power of ten from an integral
- * exponent.
- */
-static double
-png_pow10(int power)
-{
-   int recip = 0;
-   double d = 1;
-
-   /* Handle negative exponent with a reciprocal at the end because
-    * 10 is exact whereas .1 is inexact in base 2
-    */
-   if (power < 0)
-   {
-      if (power < DBL_MIN_10_EXP) return 0;
-      recip = 1, power = -power;
-   }
-
-   if (power > 0)
-   {
-      /* Decompose power bitwise. */
-      double mult = 10;
-      do
-      {
-         if (power & 1) d *= mult;
-         mult *= mult;
-         power >>= 1;
-      }
-      while (power > 0);
-
-      if (recip != 0) d = 1/d;
-   }
-   /* else power is 0 and d is 1 */
-
-   return d;
-}
-
-/* Function to format a floating point value in ASCII with a given
- * precision.
- */
-void /* PRIVATE */
-png_ascii_from_fp(png_const_structrp png_ptr, png_charp ascii, png_size_t size,
-    double fp, unsigned int precision)
-{
-   /* We use standard functions from math.h, but not printf because
-    * that would require stdio.  The caller must supply a buffer of
-    * sufficient size or we will png_error.  The tests on size and
-    * the space in ascii[] consumed are indicated below.
-    */
-   if (precision < 1)
-      precision = DBL_DIG;
-
-   /* Enforce the limit of the implementation precision too. */
-   if (precision > DBL_DIG+1)
-      precision = DBL_DIG+1;
-
-   /* Basic sanity checks */
-   if (size >= precision+5) /* See the requirements below. */
-   {
-      if (fp < 0)
-      {
-         fp = -fp;
-         *ascii++ = 45; /* '-'  PLUS 1 TOTAL 1 */
-         --size;
-      }
-
-      if (fp >= DBL_MIN && fp <= DBL_MAX)
-      {
-         int exp_b10;       /* A base 10 exponent */
-         double base;   /* 10^exp_b10 */
-
-         /* First extract a base 10 exponent of the number,
-          * the calculation below rounds down when converting
-          * from base 2 to base 10 (multiply by log10(2) -
-          * 0.3010, but 77/256 is 0.3008, so exp_b10 needs to
-          * be increased.  Note that the arithmetic shift
-          * performs a floor() unlike C arithmetic - using a
-          * C multiply would break the following for negative
-          * exponents.
-          */
-         (void)frexp(fp, &exp_b10); /* exponent to base 2 */
-
-         exp_b10 = (exp_b10 * 77) >> 8; /* <= exponent to base 10 */
-
-         /* Avoid underflow here. */
-         base = png_pow10(exp_b10); /* May underflow */
-
-         while (base < DBL_MIN || base < fp)
-         {
-            /* And this may overflow. */
-            double test = png_pow10(exp_b10+1);
-
-            if (test <= DBL_MAX)
-               ++exp_b10, base = test;
-
-            else
-               break;
-         }
-
-         /* Normalize fp and correct exp_b10, after this fp is in the
-          * range [.1,1) and exp_b10 is both the exponent and the digit
-          * *before* which the decimal point should be inserted
-          * (starting with 0 for the first digit).  Note that this
-          * works even if 10^exp_b10 is out of range because of the
-          * test on DBL_MAX above.
-          */
-         fp /= base;
-         while (fp >= 1) fp /= 10, ++exp_b10;
-
-         /* Because of the code above fp may, at this point, be
-          * less than .1, this is ok because the code below can
-          * handle the leading zeros this generates, so no attempt
-          * is made to correct that here.
-          */
-
-         {
-            int czero, clead, cdigits;
-            char exponent[10];
-
-            /* Allow up to two leading zeros - this will not lengthen
-             * the number compared to using E-n.
-             */
-            if (exp_b10 < 0 && exp_b10 > -3) /* PLUS 3 TOTAL 4 */
-            {
-               czero = -exp_b10; /* PLUS 2 digits: TOTAL 3 */
-               exp_b10 = 0;      /* Dot added below before first output. */
-            }
-            else
-               czero = 0;    /* No zeros to add */
-
-            /* Generate the digit list, stripping trailing zeros and
-             * inserting a '.' before a digit if the exponent is 0.
-             */
-            clead = czero; /* Count of leading zeros */
-            cdigits = 0;   /* Count of digits in list. */
-
-            do
-            {
-               double d;
-
-               fp *= 10;
-               /* Use modf here, not floor and subtract, so that
-                * the separation is done in one step.  At the end
-                * of the loop don't break the number into parts so
-                * that the final digit is rounded.
-                */
-               if (cdigits+czero-clead+1 < (int)precision)
-                  fp = modf(fp, &d);
-
-               else
-               {
-                  d = floor(fp + .5);
-
-                  if (d > 9)
-                  {
-                     /* Rounding up to 10, handle that here. */
-                     if (czero > 0)
-                     {
-                        --czero, d = 1;
-                        if (cdigits == 0) --clead;
-                     }
-                     else
-                     {
-                        while (cdigits > 0 && d > 9)
-                        {
-                           int ch = *--ascii;
-
-                           if (exp_b10 != (-1))
-                              ++exp_b10;
-
-                           else if (ch == 46)
-                           {
-                              ch = *--ascii, ++size;
-                              /* Advance exp_b10 to '1', so that the
-                               * decimal point happens after the
-                               * previous digit.
-                               */
-                              exp_b10 = 1;
-                           }
-
-                           --cdigits;
-                           d = ch - 47;  /* I.e. 1+(ch-48) */
-                        }
-
-                        /* Did we reach the beginning? If so adjust the
-                         * exponent but take into account the leading
-                         * decimal point.
-                         */
-                        if (d > 9)  /* cdigits == 0 */
-                        {
-                           if (exp_b10 == (-1))
-                           {
-                              /* Leading decimal point (plus zeros?), if
-                               * we lose the decimal point here it must
-                               * be reentered below.
-                               */
-                              int ch = *--ascii;
-
-                              if (ch == 46)
-                                 ++size, exp_b10 = 1;
-
-                              /* Else lost a leading zero, so 'exp_b10' is
-                               * still ok at (-1)
-                               */
-                           }
-                           else
-                              ++exp_b10;
-
-                           /* In all cases we output a '1' */
-                           d = 1;
-                        }
-                     }
-                  }
-                  fp = 0; /* Guarantees termination below. */
-               }
-
-               if (d == 0)
-               {
-                  ++czero;
-                  if (cdigits == 0) ++clead;
-               }
-               else
-               {
-                  /* Included embedded zeros in the digit count. */
-                  cdigits += czero - clead;
-                  clead = 0;
-
-                  while (czero > 0)
-                  {
-                     /* exp_b10 == (-1) means we just output the decimal
-                      * place - after the DP don't adjust 'exp_b10' any
-                      * more!
-                      */
-                     if (exp_b10 != (-1))
-                     {
-                        if (exp_b10 == 0) *ascii++ = 46, --size;
-                        /* PLUS 1: TOTAL 4 */
-                        --exp_b10;
-                     }
-                     *ascii++ = 48, --czero;
-                  }
-
-                  if (exp_b10 != (-1))
-                  {
-                     if (exp_b10 == 0)
-                        *ascii++ = 46, --size; /* counted above */
-
-                     --exp_b10;
-                  }
-                  *ascii++ = (char)(48 + (int)d), ++cdigits;
-               }
-            }
-            while (cdigits+czero-clead < (int)precision && fp > DBL_MIN);
-
-            /* The total output count (max) is now 4+precision */
-
-            /* Check for an exponent, if we don't need one we are
-             * done and just need to terminate the string.  At
-             * this point exp_b10==(-1) is effectively if flag - it got
-             * to '-1' because of the decrement after outputing
-             * the decimal point above (the exponent required is
-             * *not* -1!)
-             */
-            if (exp_b10 >= (-1) && exp_b10 <= 2)
-            {
-               /* The following only happens if we didn't output the
-                * leading zeros above for negative exponent, so this
-                * doest add to the digit requirement.  Note that the
-                * two zeros here can only be output if the two leading
-                * zeros were *not* output, so this doesn't increase
-                * the output count.
-                */
-               while (--exp_b10 >= 0) *ascii++ = 48;
-
-               *ascii = 0;
-
-               /* Total buffer requirement (including the '\0') is
-                * 5+precision - see check at the start.
-                */
-               return;
-            }
-
-            /* Here if an exponent is required, adjust size for
-             * the digits we output but did not count.  The total
-             * digit output here so far is at most 1+precision - no
-             * decimal point and no leading or trailing zeros have
-             * been output.
-             */
-            size -= cdigits;
-
-            *ascii++ = 69, --size;    /* 'E': PLUS 1 TOTAL 2+precision */
-
-            /* The following use of an unsigned temporary avoids ambiguities in
-             * the signed arithmetic on exp_b10 and permits GCC at least to do
-             * better optimization.
-             */
-            {
-               unsigned int uexp_b10;
-
-               if (exp_b10 < 0)
-               {
-                  *ascii++ = 45, --size; /* '-': PLUS 1 TOTAL 3+precision */
-                  uexp_b10 = -exp_b10;
-               }
-
-               else
-                  uexp_b10 = exp_b10;
-
-               cdigits = 0;
-
-               while (uexp_b10 > 0)
-               {
-                  exponent[cdigits++] = (char)(48 + uexp_b10 % 10);
-                  uexp_b10 /= 10;
-               }
-            }
-
-            /* Need another size check here for the exponent digits, so
-             * this need not be considered above.
-             */
-            if ((int)size > cdigits)
-            {
-               while (cdigits > 0) *ascii++ = exponent[--cdigits];
-
-               *ascii = 0;
-
-               return;
-            }
-         }
-      }
-      else if (!(fp >= DBL_MIN))
-      {
-         *ascii++ = 48; /* '0' */
-         *ascii = 0;
-         return;
-      }
-      else
-      {
-         *ascii++ = 105; /* 'i' */
-         *ascii++ = 110; /* 'n' */
-         *ascii++ = 102; /* 'f' */
-         *ascii = 0;
-         return;
-      }
-   }
-
-   /* Here on buffer too small. */
-   png_error(png_ptr, "ASCII conversion buffer too small");
-}
-
-#  endif /* FLOATING_POINT */
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-/* Function to format a fixed point value in ASCII.
- */
-void /* PRIVATE */
-png_ascii_from_fixed(png_const_structrp png_ptr, png_charp ascii,
-    png_size_t size, png_fixed_point fp)
-{
-   /* Require space for 10 decimal digits, a decimal point, a minus sign and a
-    * trailing \0, 13 characters:
-    */
-   if (size > 12)
-   {
-      png_uint_32 num;
-
-      /* Avoid overflow here on the minimum integer. */
-      if (fp < 0)
-         *ascii++ = 45, --size, num = -fp;
-      else
-         num = fp;
-
-      if (num <= 0x80000000) /* else overflowed */
-      {
-         unsigned int ndigits = 0, first = 16 /* flag value */;
-         char digits[10];
-
-         while (num)
-         {
-            /* Split the low digit off num: */
-            unsigned int tmp = num/10;
-            num -= tmp*10;
-            digits[ndigits++] = (char)(48 + num);
-            /* Record the first non-zero digit, note that this is a number
-             * starting at 1, it's not actually the array index.
-             */
-            if (first == 16 && num > 0)
-               first = ndigits;
-            num = tmp;
-         }
-
-         if (ndigits > 0)
-         {
-            while (ndigits > 5) *ascii++ = digits[--ndigits];
-            /* The remaining digits are fractional digits, ndigits is '5' or
-             * smaller at this point.  It is certainly not zero.  Check for a
-             * non-zero fractional digit:
-             */
-            if (first <= 5)
-            {
-               unsigned int i;
-               *ascii++ = 46; /* decimal point */
-               /* ndigits may be <5 for small numbers, output leading zeros
-                * then ndigits digits to first:
-                */
-               i = 5;
-               while (ndigits < i) *ascii++ = 48, --i;
-               while (ndigits >= first) *ascii++ = digits[--ndigits];
-               /* Don't output the trailing zeros! */
-            }
-         }
-         else
-            *ascii++ = 48;
-
-         /* And null terminate the string: */
-         *ascii = 0;
-         return;
-      }
-   }
-
-   /* Here on buffer too small. */
-   png_error(png_ptr, "ASCII conversion buffer too small");
-}
-#   endif /* FIXED_POINT */
-#endif /* READ_SCAL */
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
-   !defined(PNG_FIXED_POINT_MACRO_SUPPORTED) && \
-   (defined(PNG_gAMA_SUPPORTED) || defined(PNG_cHRM_SUPPORTED) || \
-   defined(PNG_sCAL_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)) || \
-   (defined(PNG_sCAL_SUPPORTED) && \
-   defined(PNG_FLOATING_ARITHMETIC_SUPPORTED))
-png_fixed_point
-png_fixed(png_const_structrp png_ptr, double fp, png_const_charp text)
-{
-   double r = floor(100000 * fp + .5);
-
-   if (r > 2147483647. || r < -2147483648.)
-      png_fixed_error(png_ptr, text);
-
-#  ifndef PNG_ERROR_TEXT_SUPPORTED
-      PNG_UNUSED(text)
-#  endif
-
-   return (png_fixed_point)r;
-}
-#endif
-
-#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_COLORSPACE_SUPPORTED) ||\
-    defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)
-/* muldiv functions */
-/* This API takes signed arguments and rounds the result to the nearest
- * integer (or, for a fixed point number - the standard argument - to
- * the nearest .00001).  Overflow and divide by zero are signalled in
- * the result, a boolean - true on success, false on overflow.
- */
-int
-png_muldiv(png_fixed_point_p res, png_fixed_point a, png_int_32 times,
-    png_int_32 divisor)
-{
-   /* Return a * times / divisor, rounded. */
-   if (divisor != 0)
-   {
-      if (a == 0 || times == 0)
-      {
-         *res = 0;
-         return 1;
-      }
-      else
-      {
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         double r = a;
-         r *= times;
-         r /= divisor;
-         r = floor(r+.5);
-
-         /* A png_fixed_point is a 32-bit integer. */
-         if (r <= 2147483647. && r >= -2147483648.)
-         {
-            *res = (png_fixed_point)r;
-            return 1;
-         }
-#else
-         int negative = 0;
-         png_uint_32 A, T, D;
-         png_uint_32 s16, s32, s00;
-
-         if (a < 0)
-            negative = 1, A = -a;
-         else
-            A = a;
-
-         if (times < 0)
-            negative = !negative, T = -times;
-         else
-            T = times;
-
-         if (divisor < 0)
-            negative = !negative, D = -divisor;
-         else
-            D = divisor;
-
-         /* Following can't overflow because the arguments only
-          * have 31 bits each, however the result may be 32 bits.
-          */
-         s16 = (A >> 16) * (T & 0xffff) +
-                           (A & 0xffff) * (T >> 16);
-         /* Can't overflow because the a*times bit is only 30
-          * bits at most.
-          */
-         s32 = (A >> 16) * (T >> 16) + (s16 >> 16);
-         s00 = (A & 0xffff) * (T & 0xffff);
-
-         s16 = (s16 & 0xffff) << 16;
-         s00 += s16;
-
-         if (s00 < s16)
-            ++s32; /* carry */
-
-         if (s32 < D) /* else overflow */
-         {
-            /* s32.s00 is now the 64-bit product, do a standard
-             * division, we know that s32 < D, so the maximum
-             * required shift is 31.
-             */
-            int bitshift = 32;
-            png_fixed_point result = 0; /* NOTE: signed */
-
-            while (--bitshift >= 0)
-            {
-               png_uint_32 d32, d00;
-
-               if (bitshift > 0)
-                  d32 = D >> (32-bitshift), d00 = D << bitshift;
-
-               else
-                  d32 = 0, d00 = D;
-
-               if (s32 > d32)
-               {
-                  if (s00 < d00) --s32; /* carry */
-                  s32 -= d32, s00 -= d00, result += 1<<bitshift;
-               }
-
-               else
-                  if (s32 == d32 && s00 >= d00)
-                     s32 = 0, s00 -= d00, result += 1<<bitshift;
-            }
-
-            /* Handle the rounding. */
-            if (s00 >= (D >> 1))
-               ++result;
-
-            if (negative != 0)
-               result = -result;
-
-            /* Check for overflow. */
-            if ((negative != 0 && result <= 0) ||
-                (negative == 0 && result >= 0))
-            {
-               *res = result;
-               return 1;
-            }
-         }
-#endif
-      }
-   }
-
-   return 0;
-}
-#endif /* READ_GAMMA || INCH_CONVERSIONS */
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-/* The following is for when the caller doesn't much care about the
- * result.
- */
-png_fixed_point
-png_muldiv_warn(png_const_structrp png_ptr, png_fixed_point a, png_int_32 times,
-    png_int_32 divisor)
-{
-   png_fixed_point result;
-
-   if (png_muldiv(&result, a, times, divisor) != 0)
-      return result;
-
-   png_warning(png_ptr, "fixed point overflow ignored");
-   return 0;
-}
-#endif
-
-#ifdef PNG_GAMMA_SUPPORTED /* more fixed point functions for gamma */
-/* Calculate a reciprocal, return 0 on div-by-zero or overflow. */
-png_fixed_point
-png_reciprocal(png_fixed_point a)
-{
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = floor(1E10/a+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#else
-   png_fixed_point res;
-
-   if (png_muldiv(&res, 100000, 100000, a) != 0)
-      return res;
-#endif
-
-   return 0; /* error/overflow */
-}
-
-/* This is the shared test on whether a gamma value is 'significant' - whether
- * it is worth doing gamma correction.
- */
-int /* PRIVATE */
-png_gamma_significant(png_fixed_point gamma_val)
-{
-   return gamma_val < PNG_FP_1 - PNG_GAMMA_THRESHOLD_FIXED ||
-       gamma_val > PNG_FP_1 + PNG_GAMMA_THRESHOLD_FIXED;
-}
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-#if defined(PNG_16BIT_SUPPORTED) || !defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)
-/* A local convenience routine. */
-static png_fixed_point
-png_product2(png_fixed_point a, png_fixed_point b)
-{
-   /* The required result is 1/a * 1/b; the following preserves accuracy. */
-#    ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = a * 1E-5;
-   r *= b;
-   r = floor(r+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#    else
-   png_fixed_point res;
-
-   if (png_muldiv(&res, a, b, 100000) != 0)
-      return res;
-#    endif
-
-   return 0; /* overflow */
-}
-#endif /* 16BIT || !FLOATING_ARITHMETIC */
-
-/* The inverse of the above. */
-png_fixed_point
-png_reciprocal2(png_fixed_point a, png_fixed_point b)
-{
-   /* The required result is 1/a * 1/b; the following preserves accuracy. */
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   double r = 1E15/a;
-   r /= b;
-   r = floor(r+.5);
-
-   if (r <= 2147483647. && r >= -2147483648.)
-      return (png_fixed_point)r;
-#else
-   /* This may overflow because the range of png_fixed_point isn't symmetric,
-    * but this API is only used for the product of file and screen gamma so it
-    * doesn't matter that the smallest number it can produce is 1/21474, not
-    * 1/100000
-    */
-   png_fixed_point res = png_product2(a, b);
-
-   if (res != 0)
-      return png_reciprocal(res);
-#endif
-
-   return 0; /* overflow */
-}
-#endif /* READ_GAMMA */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED /* gamma table code */
-#ifndef PNG_FLOATING_ARITHMETIC_SUPPORTED
-/* Fixed point gamma.
- *
- * The code to calculate the tables used below can be found in the shell script
- * contrib/tools/intgamma.sh
- *
- * To calculate gamma this code implements fast log() and exp() calls using only
- * fixed point arithmetic.  This code has sufficient precision for either 8-bit
- * or 16-bit sample values.
- *
- * The tables used here were calculated using simple 'bc' programs, but C double
- * precision floating point arithmetic would work fine.
- *
- * 8-bit log table
- *   This is a table of -log(value/255)/log(2) for 'value' in the range 128 to
- *   255, so it's the base 2 logarithm of a normalized 8-bit floating point
- *   mantissa.  The numbers are 32-bit fractions.
- */
-static const png_uint_32
-png_8bit_l2[128] =
-{
-   4270715492U, 4222494797U, 4174646467U, 4127164793U, 4080044201U, 4033279239U,
-   3986864580U, 3940795015U, 3895065449U, 3849670902U, 3804606499U, 3759867474U,
-   3715449162U, 3671346997U, 3627556511U, 3584073329U, 3540893168U, 3498011834U,
-   3455425220U, 3413129301U, 3371120137U, 3329393864U, 3287946700U, 3246774933U,
-   3205874930U, 3165243125U, 3124876025U, 3084770202U, 3044922296U, 3005329011U,
-   2965987113U, 2926893432U, 2888044853U, 2849438323U, 2811070844U, 2772939474U,
-   2735041326U, 2697373562U, 2659933400U, 2622718104U, 2585724991U, 2548951424U,
-   2512394810U, 2476052606U, 2439922311U, 2404001468U, 2368287663U, 2332778523U,
-   2297471715U, 2262364947U, 2227455964U, 2192742551U, 2158222529U, 2123893754U,
-   2089754119U, 2055801552U, 2022034013U, 1988449497U, 1955046031U, 1921821672U,
-   1888774511U, 1855902668U, 1823204291U, 1790677560U, 1758320682U, 1726131893U,
-   1694109454U, 1662251657U, 1630556815U, 1599023271U, 1567649391U, 1536433567U,
-   1505374214U, 1474469770U, 1443718700U, 1413119487U, 1382670639U, 1352370686U,
-   1322218179U, 1292211689U, 1262349810U, 1232631153U, 1203054352U, 1173618059U,
-   1144320946U, 1115161701U, 1086139034U, 1057251672U, 1028498358U, 999877854U,
-   971388940U, 943030410U, 914801076U, 886699767U, 858725327U, 830876614U,
-   803152505U, 775551890U, 748073672U, 720716771U, 693480120U, 666362667U,
-   639363374U, 612481215U, 585715177U, 559064263U, 532527486U, 506103872U,
-   479792461U, 453592303U, 427502463U, 401522014U, 375650043U, 349885648U,
-   324227938U, 298676034U, 273229066U, 247886176U, 222646516U, 197509248U,
-   172473545U, 147538590U, 122703574U, 97967701U, 73330182U, 48790236U,
-   24347096U, 0U
-
-#if 0
-   /* The following are the values for 16-bit tables - these work fine for the
-    * 8-bit conversions but produce very slightly larger errors in the 16-bit
-    * log (about 1.2 as opposed to 0.7 absolute error in the final value).  To
-    * use these all the shifts below must be adjusted appropriately.
-    */
-   65166, 64430, 63700, 62976, 62257, 61543, 60835, 60132, 59434, 58741, 58054,
-   57371, 56693, 56020, 55352, 54689, 54030, 53375, 52726, 52080, 51439, 50803,
-   50170, 49542, 48918, 48298, 47682, 47070, 46462, 45858, 45257, 44661, 44068,
-   43479, 42894, 42312, 41733, 41159, 40587, 40020, 39455, 38894, 38336, 37782,
-   37230, 36682, 36137, 35595, 35057, 34521, 33988, 33459, 32932, 32408, 31887,
-   31369, 30854, 30341, 29832, 29325, 28820, 28319, 27820, 27324, 26830, 26339,
-   25850, 25364, 24880, 24399, 23920, 23444, 22970, 22499, 22029, 21562, 21098,
-   20636, 20175, 19718, 19262, 18808, 18357, 17908, 17461, 17016, 16573, 16132,
-   15694, 15257, 14822, 14390, 13959, 13530, 13103, 12678, 12255, 11834, 11415,
-   10997, 10582, 10168, 9756, 9346, 8937, 8531, 8126, 7723, 7321, 6921, 6523,
-   6127, 5732, 5339, 4947, 4557, 4169, 3782, 3397, 3014, 2632, 2251, 1872, 1495,
-   1119, 744, 372
-#endif
-};
-
-static png_int_32
-png_log8bit(unsigned int x)
-{
-   unsigned int lg2 = 0;
-   /* Each time 'x' is multiplied by 2, 1 must be subtracted off the final log,
-    * because the log is actually negate that means adding 1.  The final
-    * returned value thus has the range 0 (for 255 input) to 7.994 (for 1
-    * input), return -1 for the overflow (log 0) case, - so the result is
-    * always at most 19 bits.
-    */
-   if ((x &= 0xff) == 0)
-      return -1;
-
-   if ((x & 0xf0) == 0)
-      lg2  = 4, x <<= 4;
-
-   if ((x & 0xc0) == 0)
-      lg2 += 2, x <<= 2;
-
-   if ((x & 0x80) == 0)
-      lg2 += 1, x <<= 1;
-
-   /* result is at most 19 bits, so this cast is safe: */
-   return (png_int_32)((lg2 << 16) + ((png_8bit_l2[x-128]+32768)>>16));
-}
-
-/* The above gives exact (to 16 binary places) log2 values for 8-bit images,
- * for 16-bit images we use the most significant 8 bits of the 16-bit value to
- * get an approximation then multiply the approximation by a correction factor
- * determined by the remaining up to 8 bits.  This requires an additional step
- * in the 16-bit case.
- *
- * We want log2(value/65535), we have log2(v'/255), where:
- *
- *    value = v' * 256 + v''
- *          = v' * f
- *
- * So f is value/v', which is equal to (256+v''/v') since v' is in the range 128
- * to 255 and v'' is in the range 0 to 255 f will be in the range 256 to less
- * than 258.  The final factor also needs to correct for the fact that our 8-bit
- * value is scaled by 255, whereas the 16-bit values must be scaled by 65535.
- *
- * This gives a final formula using a calculated value 'x' which is value/v' and
- * scaling by 65536 to match the above table:
- *
- *   log2(x/257) * 65536
- *
- * Since these numbers are so close to '1' we can use simple linear
- * interpolation between the two end values 256/257 (result -368.61) and 258/257
- * (result 367.179).  The values used below are scaled by a further 64 to give
- * 16-bit precision in the interpolation:
- *
- * Start (256): -23591
- * Zero  (257):      0
- * End   (258):  23499
- */
-#ifdef PNG_16BIT_SUPPORTED
-static png_int_32
-png_log16bit(png_uint_32 x)
-{
-   unsigned int lg2 = 0;
-
-   /* As above, but now the input has 16 bits. */
-   if ((x &= 0xffff) == 0)
-      return -1;
-
-   if ((x & 0xff00) == 0)
-      lg2  = 8, x <<= 8;
-
-   if ((x & 0xf000) == 0)
-      lg2 += 4, x <<= 4;
-
-   if ((x & 0xc000) == 0)
-      lg2 += 2, x <<= 2;
-
-   if ((x & 0x8000) == 0)
-      lg2 += 1, x <<= 1;
-
-   /* Calculate the base logarithm from the top 8 bits as a 28-bit fractional
-    * value.
-    */
-   lg2 <<= 28;
-   lg2 += (png_8bit_l2[(x>>8)-128]+8) >> 4;
-
-   /* Now we need to interpolate the factor, this requires a division by the top
-    * 8 bits.  Do this with maximum precision.
-    */
-   x = ((x << 16) + (x >> 9)) / (x >> 8);
-
-   /* Since we divided by the top 8 bits of 'x' there will be a '1' at 1<<24,
-    * the value at 1<<16 (ignoring this) will be 0 or 1; this gives us exactly
-    * 16 bits to interpolate to get the low bits of the result.  Round the
-    * answer.  Note that the end point values are scaled by 64 to retain overall
-    * precision and that 'lg2' is current scaled by an extra 12 bits, so adjust
-    * the overall scaling by 6-12.  Round at every step.
-    */
-   x -= 1U << 24;
-
-   if (x <= 65536U) /* <= '257' */
-      lg2 += ((23591U * (65536U-x)) + (1U << (16+6-12-1))) >> (16+6-12);
-
-   else
-      lg2 -= ((23499U * (x-65536U)) + (1U << (16+6-12-1))) >> (16+6-12);
-
-   /* Safe, because the result can't have more than 20 bits: */
-   return (png_int_32)((lg2 + 2048) >> 12);
-}
-#endif /* 16BIT */
-
-/* The 'exp()' case must invert the above, taking a 20-bit fixed point
- * logarithmic value and returning a 16 or 8-bit number as appropriate.  In
- * each case only the low 16 bits are relevant - the fraction - since the
- * integer bits (the top 4) simply determine a shift.
- *
- * The worst case is the 16-bit distinction between 65535 and 65534. This
- * requires perhaps spurious accuracy in the decoding of the logarithm to
- * distinguish log2(65535/65534.5) - 10^-5 or 17 bits.  There is little chance
- * of getting this accuracy in practice.
- *
- * To deal with this the following exp() function works out the exponent of the
- * frational part of the logarithm by using an accurate 32-bit value from the
- * top four fractional bits then multiplying in the remaining bits.
- */
-static const png_uint_32
-png_32bit_exp[16] =
-{
-   /* NOTE: the first entry is deliberately set to the maximum 32-bit value. */
-   4294967295U, 4112874773U, 3938502376U, 3771522796U, 3611622603U, 3458501653U,
-   3311872529U, 3171459999U, 3037000500U, 2908241642U, 2784941738U, 2666869345U,
-   2553802834U, 2445529972U, 2341847524U, 2242560872U
-};
-
-/* Adjustment table; provided to explain the numbers in the code below. */
-#if 0
-for (i=11;i>=0;--i){ print i, " ", (1 - e(-(2^i)/65536*l(2))) * 2^(32-i), "\n"}
-   11 44937.64284865548751208448
-   10 45180.98734845585101160448
-    9 45303.31936980687359311872
-    8 45364.65110595323018870784
-    7 45395.35850361789624614912
-    6 45410.72259715102037508096
-    5 45418.40724413220722311168
-    4 45422.25021786898173001728
-    3 45424.17186732298419044352
-    2 45425.13273269940811464704
-    1 45425.61317555035558641664
-    0 45425.85339951654943850496
-#endif
-
-static png_uint_32
-png_exp(png_fixed_point x)
-{
-   if (x > 0 && x <= 0xfffff) /* Else overflow or zero (underflow) */
-   {
-      /* Obtain a 4-bit approximation */
-      png_uint_32 e = png_32bit_exp[(x >> 12) & 0xf];
-
-      /* Incorporate the low 12 bits - these decrease the returned value by
-       * multiplying by a number less than 1 if the bit is set.  The multiplier
-       * is determined by the above table and the shift. Notice that the values
-       * converge on 45426 and this is used to allow linear interpolation of the
-       * low bits.
-       */
-      if (x & 0x800)
-         e -= (((e >> 16) * 44938U) +  16U) >> 5;
-
-      if (x & 0x400)
-         e -= (((e >> 16) * 45181U) +  32U) >> 6;
-
-      if (x & 0x200)
-         e -= (((e >> 16) * 45303U) +  64U) >> 7;
-
-      if (x & 0x100)
-         e -= (((e >> 16) * 45365U) + 128U) >> 8;
-
-      if (x & 0x080)
-         e -= (((e >> 16) * 45395U) + 256U) >> 9;
-
-      if (x & 0x040)
-         e -= (((e >> 16) * 45410U) + 512U) >> 10;
-
-      /* And handle the low 6 bits in a single block. */
-      e -= (((e >> 16) * 355U * (x & 0x3fU)) + 256U) >> 9;
-
-      /* Handle the upper bits of x. */
-      e >>= x >> 16;
-      return e;
-   }
-
-   /* Check for overflow */
-   if (x <= 0)
-      return png_32bit_exp[0];
-
-   /* Else underflow */
-   return 0;
-}
-
-static png_byte
-png_exp8bit(png_fixed_point lg2)
-{
-   /* Get a 32-bit value: */
-   png_uint_32 x = png_exp(lg2);
-
-   /* Convert the 32-bit value to 0..255 by multiplying by 256-1. Note that the
-    * second, rounding, step can't overflow because of the first, subtraction,
-    * step.
-    */
-   x -= x >> 8;
-   return (png_byte)((x + 0x7fffffU) >> 24);
-}
-
-#ifdef PNG_16BIT_SUPPORTED
-static png_uint_16
-png_exp16bit(png_fixed_point lg2)
-{
-   /* Get a 32-bit value: */
-   png_uint_32 x = png_exp(lg2);
-
-   /* Convert the 32-bit value to 0..65535 by multiplying by 65536-1: */
-   x -= x >> 16;
-   return (png_uint_16)((x + 32767U) >> 16);
-}
-#endif /* 16BIT */
-#endif /* FLOATING_ARITHMETIC */
-
-png_byte
-png_gamma_8bit_correct(unsigned int value, png_fixed_point gamma_val)
-{
-   if (value > 0 && value < 255)
-   {
-#     ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         /* 'value' is unsigned, ANSI-C90 requires the compiler to correctly
-          * convert this to a floating point value.  This includes values that
-          * would overflow if 'value' were to be converted to 'int'.
-          *
-          * Apparently GCC, however, does an intermediate conversion to (int)
-          * on some (ARM) but not all (x86) platforms, possibly because of
-          * hardware FP limitations.  (E.g. if the hardware conversion always
-          * assumes the integer register contains a signed value.)  This results
-          * in ANSI-C undefined behavior for large values.
-          *
-          * Other implementations on the same machine might actually be ANSI-C90
-          * conformant and therefore compile spurious extra code for the large
-          * values.
-          *
-          * We can be reasonably sure that an unsigned to float conversion
-          * won't be faster than an int to float one.  Therefore this code
-          * assumes responsibility for the undefined behavior, which it knows
-          * can't happen because of the check above.
-          *
-          * Note the argument to this routine is an (unsigned int) because, on
-          * 16-bit platforms, it is assigned a value which might be out of
-          * range for an (int); that would result in undefined behavior in the
-          * caller if the *argument* ('value') were to be declared (int).
-          */
-         double r = floor(255*pow((int)/*SAFE*/value/255.,gamma_val*.00001)+.5);
-         return (png_byte)r;
-#     else
-         png_int_32 lg2 = png_log8bit(value);
-         png_fixed_point res;
-
-         if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1) != 0)
-            return png_exp8bit(res);
-
-         /* Overflow. */
-         value = 0;
-#     endif
-   }
-
-   return (png_byte)value;
-}
-
-#ifdef PNG_16BIT_SUPPORTED
-png_uint_16
-png_gamma_16bit_correct(unsigned int value, png_fixed_point gamma_val)
-{
-   if (value > 0 && value < 65535)
-   {
-#     ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-         /* The same (unsigned int)->(double) constraints apply here as above,
-          * however in this case the (unsigned int) to (int) conversion can
-          * overflow on an ANSI-C90 compliant system so the cast needs to ensure
-          * that this is not possible.
-          */
-         double r = floor(65535*pow((png_int_32)value/65535.,
-                     gamma_val*.00001)+.5);
-         return (png_uint_16)r;
-#     else
-         png_int_32 lg2 = png_log16bit(value);
-         png_fixed_point res;
-
-         if (png_muldiv(&res, gamma_val, lg2, PNG_FP_1) != 0)
-            return png_exp16bit(res);
-
-         /* Overflow. */
-         value = 0;
-#     endif
-   }
-
-   return (png_uint_16)value;
-}
-#endif /* 16BIT */
-
-/* This does the right thing based on the bit_depth field of the
- * png_struct, interpreting values as 8-bit or 16-bit.  While the result
- * is nominally a 16-bit value if bit depth is 8 then the result is
- * 8-bit (as are the arguments.)
- */
-png_uint_16 /* PRIVATE */
-png_gamma_correct(png_structrp png_ptr, unsigned int value,
-    png_fixed_point gamma_val)
-{
-   if (png_ptr->bit_depth == 8)
-      return png_gamma_8bit_correct(value, gamma_val);
-
-#ifdef PNG_16BIT_SUPPORTED
-   else
-      return png_gamma_16bit_correct(value, gamma_val);
-#else
-      /* should not reach this */
-      return 0;
-#endif /* 16BIT */
-}
-
-#ifdef PNG_16BIT_SUPPORTED
-/* Internal function to build a single 16-bit table - the table consists of
- * 'num' 256 entry subtables, where 'num' is determined by 'shift' - the amount
- * to shift the input values right (or 16-number_of_signifiant_bits).
- *
- * The caller is responsible for ensuring that the table gets cleaned up on
- * png_error (i.e. if one of the mallocs below fails) - i.e. the *table argument
- * should be somewhere that will be cleaned.
- */
-static void
-png_build_16bit_table(png_structrp png_ptr, png_uint_16pp *ptable,
-   PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
-{
-   /* Various values derived from 'shift': */
-   PNG_CONST unsigned int num = 1U << (8U - shift);
-#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-   /* CSE the division and work round wacky GCC warnings (see the comments
-    * in png_gamma_8bit_correct for where these come from.)
-    */
-   PNG_CONST double fmax = 1./(((png_int_32)1 << (16U - shift))-1);
-#endif
-   PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
-   PNG_CONST unsigned int max_by_2 = 1U << (15U-shift);
-   unsigned int i;
-
-   png_uint_16pp table = *ptable =
-       (png_uint_16pp)png_calloc(png_ptr, num * (sizeof (png_uint_16p)));
-
-   for (i = 0; i < num; i++)
-   {
-      png_uint_16p sub_table = table[i] =
-          (png_uint_16p)png_malloc(png_ptr, 256 * (sizeof (png_uint_16)));
-
-      /* The 'threshold' test is repeated here because it can arise for one of
-       * the 16-bit tables even if the others don't hit it.
-       */
-      if (png_gamma_significant(gamma_val) != 0)
-      {
-         /* The old code would overflow at the end and this would cause the
-          * 'pow' function to return a result >1, resulting in an
-          * arithmetic error.  This code follows the spec exactly; ig is
-          * the recovered input sample, it always has 8-16 bits.
-          *
-          * We want input * 65535/max, rounded, the arithmetic fits in 32
-          * bits (unsigned) so long as max <= 32767.
-          */
-         unsigned int j;
-         for (j = 0; j < 256; j++)
-         {
-            png_uint_32 ig = (j << (8-shift)) + i;
-#           ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
-               /* Inline the 'max' scaling operation: */
-               /* See png_gamma_8bit_correct for why the cast to (int) is
-                * required here.
-                */
-               double d = floor(65535.*pow(ig*fmax, gamma_val*.00001)+.5);
-               sub_table[j] = (png_uint_16)d;
-#           else
-               if (shift != 0)
-                  ig = (ig * 65535U + max_by_2)/max;
-
-               sub_table[j] = png_gamma_16bit_correct(ig, gamma_val);
-#           endif
-         }
-      }
-      else
-      {
-         /* We must still build a table, but do it the fast way. */
-         unsigned int j;
-
-         for (j = 0; j < 256; j++)
-         {
-            png_uint_32 ig = (j << (8-shift)) + i;
-
-            if (shift != 0)
-               ig = (ig * 65535U + max_by_2)/max;
-
-            sub_table[j] = (png_uint_16)ig;
-         }
-      }
-   }
-}
-
-/* NOTE: this function expects the *inverse* of the overall gamma transformation
- * required.
- */
-static void
-png_build_16to8_table(png_structrp png_ptr, png_uint_16pp *ptable,
-   PNG_CONST unsigned int shift, PNG_CONST png_fixed_point gamma_val)
-{
-   PNG_CONST unsigned int num = 1U << (8U - shift);
-   PNG_CONST unsigned int max = (1U << (16U - shift))-1U;
-   unsigned int i;
-   png_uint_32 last;
-
-   png_uint_16pp table = *ptable =
-       (png_uint_16pp)png_calloc(png_ptr, num * (sizeof (png_uint_16p)));
-
-   /* 'num' is the number of tables and also the number of low bits of low
-    * bits of the input 16-bit value used to select a table.  Each table is
-    * itself indexed by the high 8 bits of the value.
-    */
-   for (i = 0; i < num; i++)
-      table[i] = (png_uint_16p)png_malloc(png_ptr,
-          256 * (sizeof (png_uint_16)));
-
-   /* 'gamma_val' is set to the reciprocal of the value calculated above, so
-    * pow(out,g) is an *input* value.  'last' is the last input value set.
-    *
-    * In the loop 'i' is used to find output values.  Since the output is
-    * 8-bit there are only 256 possible values.  The tables are set up to
-    * select the closest possible output value for each input by finding
-    * the input value at the boundary between each pair of output values
-    * and filling the table up to that boundary with the lower output
-    * value.
-    *
-    * The boundary values are 0.5,1.5..253.5,254.5.  Since these are 9-bit
-    * values the code below uses a 16-bit value in i; the values start at
-    * 128.5 (for 0.5) and step by 257, for a total of 254 values (the last
-    * entries are filled with 255).  Start i at 128 and fill all 'last'
-    * table entries <= 'max'
-    */
-   last = 0;
-   for (i = 0; i < 255; ++i) /* 8-bit output value */
-   {
-      /* Find the corresponding maximum input value */
-      png_uint_16 out = (png_uint_16)(i * 257U); /* 16-bit output value */
-
-      /* Find the boundary value in 16 bits: */
-      png_uint_32 bound = png_gamma_16bit_correct(out+128U, gamma_val);
-
-      /* Adjust (round) to (16-shift) bits: */
-      bound = (bound * max + 32768U)/65535U + 1U;
-
-      while (last < bound)
-      {
-         table[last & (0xffU >> shift)][last >> (8U - shift)] = out;
-         last++;
-      }
-   }
-
-   /* And fill in the final entries. */
-   while (last < (num << 8))
-   {
-      table[last & (0xff >> shift)][last >> (8U - shift)] = 65535U;
-      last++;
-   }
-}
-#endif /* 16BIT */
-
-/* Build a single 8-bit table: same as the 16-bit case but much simpler (and
- * typically much faster).  Note that libpng currently does no sBIT processing
- * (apparently contrary to the spec) so a 256-entry table is always generated.
- */
-static void
-png_build_8bit_table(png_structrp png_ptr, png_bytepp ptable,
-   PNG_CONST png_fixed_point gamma_val)
-{
-   unsigned int i;
-   png_bytep table = *ptable = (png_bytep)png_malloc(png_ptr, 256);
-
-   if (png_gamma_significant(gamma_val) != 0)
-      for (i=0; i<256; i++)
-         table[i] = png_gamma_8bit_correct(i, gamma_val);
-
-   else
-      for (i=0; i<256; ++i)
-         table[i] = (png_byte)i;
-}
-
-/* Used from png_read_destroy and below to release the memory used by the gamma
- * tables.
- */
-void /* PRIVATE */
-png_destroy_gamma_table(png_structrp png_ptr)
-{
-   png_free(png_ptr, png_ptr->gamma_table);
-   png_ptr->gamma_table = NULL;
-
-#ifdef PNG_16BIT_SUPPORTED
-   if (png_ptr->gamma_16_table != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_table[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_table);
-   png_ptr->gamma_16_table = NULL;
-   }
-#endif /* 16BIT */
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-   png_free(png_ptr, png_ptr->gamma_from_1);
-   png_ptr->gamma_from_1 = NULL;
-   png_free(png_ptr, png_ptr->gamma_to_1);
-   png_ptr->gamma_to_1 = NULL;
-
-#ifdef PNG_16BIT_SUPPORTED
-   if (png_ptr->gamma_16_from_1 != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_from_1);
-   png_ptr->gamma_16_from_1 = NULL;
-   }
-   if (png_ptr->gamma_16_to_1 != NULL)
-   {
-      int i;
-      int istop = (1 << (8 - png_ptr->gamma_shift));
-      for (i = 0; i < istop; i++)
-      {
-         png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
-      }
-   png_free(png_ptr, png_ptr->gamma_16_to_1);
-   png_ptr->gamma_16_to_1 = NULL;
-   }
-#endif /* 16BIT */
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-}
-
-/* We build the 8- or 16-bit gamma tables here.  Note that for 16-bit
- * tables, we don't make a full table if we are reducing to 8-bit in
- * the future.  Note also how the gamma_16 tables are segmented so that
- * we don't need to allocate > 64K chunks for a full 16-bit table.
- */
-void /* PRIVATE */
-png_build_gamma_table(png_structrp png_ptr, int bit_depth)
-{
-  png_debug(1, "in png_build_gamma_table");
-
-  /* Remove any existing table; this copes with multiple calls to
-   * png_read_update_info.  The warning is because building the gamma tables
-   * multiple times is a performance hit - it's harmless but the ability to call
-   * png_read_update_info() multiple times is new in 1.5.6 so it seems sensible
-   * to warn if the app introduces such a hit.
-   */
-  if (png_ptr->gamma_table != NULL || png_ptr->gamma_16_table != NULL)
-  {
-    png_warning(png_ptr, "gamma table being rebuilt");
-    png_destroy_gamma_table(png_ptr);
-  }
-
-  if (bit_depth <= 8)
-  {
-     png_build_8bit_table(png_ptr, &png_ptr->gamma_table,
-         png_ptr->screen_gamma > 0 ?  png_reciprocal2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-     if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
-     {
-        png_build_8bit_table(png_ptr, &png_ptr->gamma_to_1,
-            png_reciprocal(png_ptr->colorspace.gamma));
-
-        png_build_8bit_table(png_ptr, &png_ptr->gamma_from_1,
-            png_ptr->screen_gamma > 0 ?  png_reciprocal(png_ptr->screen_gamma) :
-            png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
-     }
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-  }
-#ifdef PNG_16BIT_SUPPORTED
-  else
-  {
-     png_byte shift, sig_bit;
-
-     if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-     {
-        sig_bit = png_ptr->sig_bit.red;
-
-        if (png_ptr->sig_bit.green > sig_bit)
-           sig_bit = png_ptr->sig_bit.green;
-
-        if (png_ptr->sig_bit.blue > sig_bit)
-           sig_bit = png_ptr->sig_bit.blue;
-     }
-     else
-        sig_bit = png_ptr->sig_bit.gray;
-
-     /* 16-bit gamma code uses this equation:
-      *
-      *   ov = table[(iv & 0xff) >> gamma_shift][iv >> 8]
-      *
-      * Where 'iv' is the input color value and 'ov' is the output value -
-      * pow(iv, gamma).
-      *
-      * Thus the gamma table consists of up to 256 256-entry tables.  The table
-      * is selected by the (8-gamma_shift) most significant of the low 8 bits of
-      * the color value then indexed by the upper 8 bits:
-      *
-      *   table[low bits][high 8 bits]
-      *
-      * So the table 'n' corresponds to all those 'iv' of:
-      *
-      *   <all high 8-bit values><n << gamma_shift>..<(n+1 << gamma_shift)-1>
-      *
-      */
-     if (sig_bit > 0 && sig_bit < 16U)
-        shift = (png_byte)(16U - sig_bit); /* shift == insignificant bits */
-
-     else
-        shift = 0; /* keep all 16 bits */
-
-     if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
-     {
-        /* PNG_MAX_GAMMA_8 is the number of bits to keep - effectively
-         * the significant bits in the *input* when the output will
-         * eventually be 8 bits.  By default it is 11.
-         */
-        if (shift < (16U - PNG_MAX_GAMMA_8))
-           shift = (16U - PNG_MAX_GAMMA_8);
-     }
-
-     if (shift > 8U)
-        shift = 8U; /* Guarantees at least one table! */
-
-     png_ptr->gamma_shift = shift;
-
-     /* NOTE: prior to 1.5.4 this test used to include PNG_BACKGROUND (now
-      * PNG_COMPOSE).  This effectively smashed the background calculation for
-      * 16-bit output because the 8-bit table assumes the result will be reduced
-      * to 8 bits.
-      */
-     if ((png_ptr->transformations & (PNG_16_TO_8 | PNG_SCALE_16_TO_8)) != 0)
-         png_build_16to8_table(png_ptr, &png_ptr->gamma_16_table, shift,
-         png_ptr->screen_gamma > 0 ? png_product2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-
-     else
-         png_build_16bit_table(png_ptr, &png_ptr->gamma_16_table, shift,
-         png_ptr->screen_gamma > 0 ? png_reciprocal2(png_ptr->colorspace.gamma,
-         png_ptr->screen_gamma) : PNG_FP_1);
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-     if ((png_ptr->transformations & (PNG_COMPOSE | PNG_RGB_TO_GRAY)) != 0)
-     {
-        png_build_16bit_table(png_ptr, &png_ptr->gamma_16_to_1, shift,
-            png_reciprocal(png_ptr->colorspace.gamma));
-
-        /* Notice that the '16 from 1' table should be full precision, however
-         * the lookup on this table still uses gamma_shift, so it can't be.
-         * TODO: fix this.
-         */
-        png_build_16bit_table(png_ptr, &png_ptr->gamma_16_from_1, shift,
-            png_ptr->screen_gamma > 0 ? png_reciprocal(png_ptr->screen_gamma) :
-            png_ptr->colorspace.gamma/* Probably doing rgb_to_gray */);
-     }
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-  }
-#endif /* 16BIT */
-}
-#endif /* READ_GAMMA */
-
-/* HARDWARE OR SOFTWARE OPTION SUPPORT */
-#ifdef PNG_SET_OPTION_SUPPORTED
-int PNGAPI
-png_set_option(png_structrp png_ptr, int option, int onoff)
-{
-   if (png_ptr != NULL && option >= 0 && option < PNG_OPTION_NEXT &&
-      (option & 1) == 0)
-   {
-      int mask = 3 << option;
-      int setting = (2 + (onoff != 0)) << option;
-      int current = png_ptr->options;
-
-      png_ptr->options = (png_byte)((current & ~mask) | setting);
-
-      return (current & mask) >> option;
-   }
-
-   return PNG_OPTION_INVALID;
-}
-#endif
-
-/* sRGB support */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-/* sRGB conversion tables; these are machine generated with the code in
- * contrib/tools/makesRGB.c.  The actual sRGB transfer curve defined in the
- * specification (see the article at http://en.wikipedia.org/wiki/SRGB)
- * is used, not the gamma=1/2.2 approximation use elsewhere in libpng.
- * The sRGB to linear table is exact (to the nearest 16 bit linear fraction).
- * The inverse (linear to sRGB) table has accuracies as follows:
- *
- * For all possible (255*65535+1) input values:
- *
- *    error: -0.515566 - 0.625971, 79441 (0.475369%) of readings inexact
- *
- * For the input values corresponding to the 65536 16-bit values:
- *
- *    error: -0.513727 - 0.607759, 308 (0.469978%) of readings inexact
- *
- * In all cases the inexact readings are only off by one.
- */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* The convert-to-sRGB table is only currently required for read. */
-const png_uint_16 png_sRGB_table[256] =
-{
-   0,20,40,60,80,99,119,139,
-   159,179,199,219,241,264,288,313,
-   340,367,396,427,458,491,526,562,
-   599,637,677,718,761,805,851,898,
-   947,997,1048,1101,1156,1212,1270,1330,
-   1391,1453,1517,1583,1651,1720,1790,1863,
-   1937,2013,2090,2170,2250,2333,2418,2504,
-   2592,2681,2773,2866,2961,3058,3157,3258,
-   3360,3464,3570,3678,3788,3900,4014,4129,
-   4247,4366,4488,4611,4736,4864,4993,5124,
-   5257,5392,5530,5669,5810,5953,6099,6246,
-   6395,6547,6700,6856,7014,7174,7335,7500,
-   7666,7834,8004,8177,8352,8528,8708,8889,
-   9072,9258,9445,9635,9828,10022,10219,10417,
-   10619,10822,11028,11235,11446,11658,11873,12090,
-   12309,12530,12754,12980,13209,13440,13673,13909,
-   14146,14387,14629,14874,15122,15371,15623,15878,
-   16135,16394,16656,16920,17187,17456,17727,18001,
-   18277,18556,18837,19121,19407,19696,19987,20281,
-   20577,20876,21177,21481,21787,22096,22407,22721,
-   23038,23357,23678,24002,24329,24658,24990,25325,
-   25662,26001,26344,26688,27036,27386,27739,28094,
-   28452,28813,29176,29542,29911,30282,30656,31033,
-   31412,31794,32179,32567,32957,33350,33745,34143,
-   34544,34948,35355,35764,36176,36591,37008,37429,
-   37852,38278,38706,39138,39572,40009,40449,40891,
-   41337,41785,42236,42690,43147,43606,44069,44534,
-   45002,45473,45947,46423,46903,47385,47871,48359,
-   48850,49344,49841,50341,50844,51349,51858,52369,
-   52884,53401,53921,54445,54971,55500,56032,56567,
-   57105,57646,58190,58737,59287,59840,60396,60955,
-   61517,62082,62650,63221,63795,64372,64952,65535
-};
-#endif /* SIMPLIFIED_READ */
-
-/* The base/delta tables are required for both read and write (but currently
- * only the simplified versions.)
- */
-const png_uint_16 png_sRGB_base[512] =
-{
-   128,1782,3383,4644,5675,6564,7357,8074,
-   8732,9346,9921,10463,10977,11466,11935,12384,
-   12816,13233,13634,14024,14402,14769,15125,15473,
-   15812,16142,16466,16781,17090,17393,17690,17981,
-   18266,18546,18822,19093,19359,19621,19879,20133,
-   20383,20630,20873,21113,21349,21583,21813,22041,
-   22265,22487,22707,22923,23138,23350,23559,23767,
-   23972,24175,24376,24575,24772,24967,25160,25352,
-   25542,25730,25916,26101,26284,26465,26645,26823,
-   27000,27176,27350,27523,27695,27865,28034,28201,
-   28368,28533,28697,28860,29021,29182,29341,29500,
-   29657,29813,29969,30123,30276,30429,30580,30730,
-   30880,31028,31176,31323,31469,31614,31758,31902,
-   32045,32186,32327,32468,32607,32746,32884,33021,
-   33158,33294,33429,33564,33697,33831,33963,34095,
-   34226,34357,34486,34616,34744,34873,35000,35127,
-   35253,35379,35504,35629,35753,35876,35999,36122,
-   36244,36365,36486,36606,36726,36845,36964,37083,
-   37201,37318,37435,37551,37668,37783,37898,38013,
-   38127,38241,38354,38467,38580,38692,38803,38915,
-   39026,39136,39246,39356,39465,39574,39682,39790,
-   39898,40005,40112,40219,40325,40431,40537,40642,
-   40747,40851,40955,41059,41163,41266,41369,41471,
-   41573,41675,41777,41878,41979,42079,42179,42279,
-   42379,42478,42577,42676,42775,42873,42971,43068,
-   43165,43262,43359,43456,43552,43648,43743,43839,
-   43934,44028,44123,44217,44311,44405,44499,44592,
-   44685,44778,44870,44962,45054,45146,45238,45329,
-   45420,45511,45601,45692,45782,45872,45961,46051,
-   46140,46229,46318,46406,46494,46583,46670,46758,
-   46846,46933,47020,47107,47193,47280,47366,47452,
-   47538,47623,47709,47794,47879,47964,48048,48133,
-   48217,48301,48385,48468,48552,48635,48718,48801,
-   48884,48966,49048,49131,49213,49294,49376,49458,
-   49539,49620,49701,49782,49862,49943,50023,50103,
-   50183,50263,50342,50422,50501,50580,50659,50738,
-   50816,50895,50973,51051,51129,51207,51285,51362,
-   51439,51517,51594,51671,51747,51824,51900,51977,
-   52053,52129,52205,52280,52356,52432,52507,52582,
-   52657,52732,52807,52881,52956,53030,53104,53178,
-   53252,53326,53400,53473,53546,53620,53693,53766,
-   53839,53911,53984,54056,54129,54201,54273,54345,
-   54417,54489,54560,54632,54703,54774,54845,54916,
-   54987,55058,55129,55199,55269,55340,55410,55480,
-   55550,55620,55689,55759,55828,55898,55967,56036,
-   56105,56174,56243,56311,56380,56448,56517,56585,
-   56653,56721,56789,56857,56924,56992,57059,57127,
-   57194,57261,57328,57395,57462,57529,57595,57662,
-   57728,57795,57861,57927,57993,58059,58125,58191,
-   58256,58322,58387,58453,58518,58583,58648,58713,
-   58778,58843,58908,58972,59037,59101,59165,59230,
-   59294,59358,59422,59486,59549,59613,59677,59740,
-   59804,59867,59930,59993,60056,60119,60182,60245,
-   60308,60370,60433,60495,60558,60620,60682,60744,
-   60806,60868,60930,60992,61054,61115,61177,61238,
-   61300,61361,61422,61483,61544,61605,61666,61727,
-   61788,61848,61909,61969,62030,62090,62150,62211,
-   62271,62331,62391,62450,62510,62570,62630,62689,
-   62749,62808,62867,62927,62986,63045,63104,63163,
-   63222,63281,63340,63398,63457,63515,63574,63632,
-   63691,63749,63807,63865,63923,63981,64039,64097,
-   64155,64212,64270,64328,64385,64443,64500,64557,
-   64614,64672,64729,64786,64843,64900,64956,65013,
-   65070,65126,65183,65239,65296,65352,65409,65465
-};
-
-const png_byte png_sRGB_delta[512] =
-{
-   207,201,158,129,113,100,90,82,77,72,68,64,61,59,56,54,
-   52,50,49,47,46,45,43,42,41,40,39,39,38,37,36,36,
-   35,34,34,33,33,32,32,31,31,30,30,30,29,29,28,28,
-   28,27,27,27,27,26,26,26,25,25,25,25,24,24,24,24,
-   23,23,23,23,23,22,22,22,22,22,22,21,21,21,21,21,
-   21,20,20,20,20,20,20,20,20,19,19,19,19,19,19,19,
-   19,18,18,18,18,18,18,18,18,18,18,17,17,17,17,17,
-   17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16,
-   16,16,16,16,15,15,15,15,15,15,15,15,15,15,15,15,
-   15,15,15,15,14,14,14,14,14,14,14,14,14,14,14,14,
-   14,14,14,14,14,14,14,13,13,13,13,13,13,13,13,13,
-   13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,
-   12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-   12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,
-   11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-   11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-   11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-   10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
-   9,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-   8,8,8,8,8,8,8,8,8,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-   7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
-};
-#endif /* SIMPLIFIED READ/WRITE sRGB support */
-
-/* SIMPLIFIED READ/WRITE SUPPORT */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-static int
-png_image_free_function(png_voidp argument)
-{
-   png_imagep image = png_voidcast(png_imagep, argument);
-   png_controlp cp = image->opaque;
-   png_control c;
-
-   /* Double check that we have a png_ptr - it should be impossible to get here
-    * without one.
-    */
-   if (cp->png_ptr == NULL)
-      return 0;
-
-   /* First free any data held in the control structure. */
-#  ifdef PNG_STDIO_SUPPORTED
-      if (cp->owned_file != 0)
-      {
-         FILE *fp = png_voidcast(FILE*, cp->png_ptr->io_ptr);
-         cp->owned_file = 0;
-
-         /* Ignore errors here. */
-         if (fp != NULL)
-         {
-            cp->png_ptr->io_ptr = NULL;
-            (void)fclose(fp);
-         }
-      }
-#  endif
-
-   /* Copy the control structure so that the original, allocated, version can be
-    * safely freed.  Notice that a png_error here stops the remainder of the
-    * cleanup, but this is probably fine because that would indicate bad memory
-    * problems anyway.
-    */
-   c = *cp;
-   image->opaque = &c;
-   png_free(c.png_ptr, cp);
-
-   /* Then the structures, calling the correct API. */
-   if (c.for_write != 0)
-   {
-#     ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-         png_destroy_write_struct(&c.png_ptr, &c.info_ptr);
-#     else
-         png_error(c.png_ptr, "simplified write not supported");
-#     endif
-   }
-   else
-   {
-#     ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-         png_destroy_read_struct(&c.png_ptr, &c.info_ptr, NULL);
-#     else
-         png_error(c.png_ptr, "simplified read not supported");
-#     endif
-   }
-
-   /* Success. */
-   return 1;
-}
-
-void PNGAPI
-png_image_free(png_imagep image)
-{
-   /* Safely call the real function, but only if doing so is safe at this point
-    * (if not inside an error handling context).  Otherwise assume
-    * png_safe_execute will call this API after the return.
-    */
-   if (image != NULL && image->opaque != NULL &&
-      image->opaque->error_buf == NULL)
-   {
-      /* Ignore errors here: */
-      (void)png_safe_execute(image, png_image_free_function, image);
-      image->opaque = NULL;
-   }
-}
-
-int /* PRIVATE */
-png_image_error(png_imagep image, png_const_charp error_message)
-{
-   /* Utility to log an error. */
-   png_safecat(image->message, (sizeof image->message), 0, error_message);
-   image->warning_or_error |= PNG_IMAGE_ERROR;
-   png_image_free(image);
-   return 0;
-}
-
-#endif /* SIMPLIFIED READ/WRITE */
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/png.h
+++ /dev/null
@@ -1,3282 +1,0 @@
-
-/* png.h - header file for PNG reference library
- *
- * libpng version 1.6.16, December 22, 2014
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license (See LICENSE, below)
- *
- * Authors and maintainers:
- *   libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
- *   libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
- *   libpng versions 0.97, January 1998, through 1.6.16, December 22, 2014: Glenn
- *   See also "Contributing Authors", below.
- *
- * Note about libpng version numbers:
- *
- *   Due to various miscommunications, unforeseen code incompatibilities
- *   and occasional factors outside the authors' control, version numbering
- *   on the library has not always been consistent and straightforward.
- *   The following table summarizes matters since version 0.89c, which was
- *   the first widely used release:
- *
- *    source                 png.h  png.h  shared-lib
- *    version                string   int  version
- *    -------                ------ -----  ----------
- *    0.89c "1.0 beta 3"     0.89      89  1.0.89
- *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
- *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
- *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
- *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
- *    0.97c                  0.97      97  2.0.97
- *    0.98                   0.98      98  2.0.98
- *    0.99                   0.99      98  2.0.99
- *    0.99a-m                0.99      99  2.0.99
- *    1.00                   1.00     100  2.1.0 [100 should be 10000]
- *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
- *    1.0.1       png.h string is   10001  2.1.0
- *    1.0.1a-e    identical to the  10002  from here on, the shared library
- *    1.0.2       source version)   10002  is 2.V where V is the source code
- *    1.0.2a-b                      10003  version, except as noted.
- *    1.0.3                         10003
- *    1.0.3a-d                      10004
- *    1.0.4                         10004
- *    1.0.4a-f                      10005
- *    1.0.5 (+ 2 patches)           10005
- *    1.0.5a-d                      10006
- *    1.0.5e-r                      10100 (not source compatible)
- *    1.0.5s-v                      10006 (not binary compatible)
- *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
- *    1.0.6d-f                      10007 (still binary incompatible)
- *    1.0.6g                        10007
- *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
- *    1.0.6i                        10007  10.6i
- *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
- *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
- *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
- *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
- *    1.0.7                    1    10007  (still compatible)
- *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4
- *    1.0.8rc1                 1    10008  2.1.0.8rc1
- *    1.0.8                    1    10008  2.1.0.8
- *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6
- *    1.0.9rc1                 1    10009  2.1.0.9rc1
- *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10
- *    1.0.9rc2                 1    10009  2.1.0.9rc2
- *    1.0.9                    1    10009  2.1.0.9
- *    1.0.10beta1              1    10010  2.1.0.10beta1
- *    1.0.10rc1                1    10010  2.1.0.10rc1
- *    1.0.10                   1    10010  2.1.0.10
- *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3
- *    1.0.11rc1                1    10011  2.1.0.11rc1
- *    1.0.11                   1    10011  2.1.0.11
- *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2
- *    1.0.12rc1                2    10012  2.1.0.12rc1
- *    1.0.12                   2    10012  2.1.0.12
- *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)
- *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2
- *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5
- *    1.2.0rc1                 3    10200  3.1.2.0rc1
- *    1.2.0                    3    10200  3.1.2.0
- *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4
- *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2
- *    1.2.1                    3    10201  3.1.2.1
- *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6
- *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1
- *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1
- *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1
- *    1.0.13                  10    10013  10.so.0.1.0.13
- *    1.2.2                   12    10202  12.so.0.1.2.2
- *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6
- *    1.2.3                   12    10203  12.so.0.1.2.3
- *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3
- *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1
- *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1
- *    1.0.14                  10    10014  10.so.0.1.0.14
- *    1.2.4                   13    10204  12.so.0.1.2.4
- *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2
- *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3
- *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3
- *    1.0.15                  10    10015  10.so.0.1.0.15
- *    1.2.5                   13    10205  12.so.0.1.2.5
- *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
- *    1.0.16                  10    10016  10.so.0.1.0.16
- *    1.2.6                   13    10206  12.so.0.1.2.6
- *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
- *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
- *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
- *    1.0.17                  10    10017  12.so.0.1.0.17
- *    1.2.7                   13    10207  12.so.0.1.2.7
- *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
- *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
- *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
- *    1.0.18                  10    10018  12.so.0.1.0.18
- *    1.2.8                   13    10208  12.so.0.1.2.8
- *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
- *    1.2.9beta4-11           13    10209  12.so.0.9[.0]
- *    1.2.9rc1                13    10209  12.so.0.9[.0]
- *    1.2.9                   13    10209  12.so.0.9[.0]
- *    1.2.10beta1-7           13    10210  12.so.0.10[.0]
- *    1.2.10rc1-2             13    10210  12.so.0.10[.0]
- *    1.2.10                  13    10210  12.so.0.10[.0]
- *    1.4.0beta1-5            14    10400  14.so.0.0[.0]
- *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
- *    1.4.0beta7-8            14    10400  14.so.0.0[.0]
- *    1.2.11                  13    10211  12.so.0.11[.0]
- *    1.2.12                  13    10212  12.so.0.12[.0]
- *    1.4.0beta9-14           14    10400  14.so.0.0[.0]
- *    1.2.13                  13    10213  12.so.0.13[.0]
- *    1.4.0beta15-36          14    10400  14.so.0.0[.0]
- *    1.4.0beta37-87          14    10400  14.so.14.0[.0]
- *    1.4.0rc01               14    10400  14.so.14.0[.0]
- *    1.4.0beta88-109         14    10400  14.so.14.0[.0]
- *    1.4.0rc02-08            14    10400  14.so.14.0[.0]
- *    1.4.0                   14    10400  14.so.14.0[.0]
- *    1.4.1beta01-03          14    10401  14.so.14.1[.0]
- *    1.4.1rc01               14    10401  14.so.14.1[.0]
- *    1.4.1beta04-12          14    10401  14.so.14.1[.0]
- *    1.4.1                   14    10401  14.so.14.1[.0]
- *    1.4.2                   14    10402  14.so.14.2[.0]
- *    1.4.3                   14    10403  14.so.14.3[.0]
- *    1.4.4                   14    10404  14.so.14.4[.0]
- *    1.5.0beta01-58          15    10500  15.so.15.0[.0]
- *    1.5.0rc01-07            15    10500  15.so.15.0[.0]
- *    1.5.0                   15    10500  15.so.15.0[.0]
- *    1.5.1beta01-11          15    10501  15.so.15.1[.0]
- *    1.5.1rc01-02            15    10501  15.so.15.1[.0]
- *    1.5.1                   15    10501  15.so.15.1[.0]
- *    1.5.2beta01-03          15    10502  15.so.15.2[.0]
- *    1.5.2rc01-03            15    10502  15.so.15.2[.0]
- *    1.5.2                   15    10502  15.so.15.2[.0]
- *    1.5.3beta01-10          15    10503  15.so.15.3[.0]
- *    1.5.3rc01-02            15    10503  15.so.15.3[.0]
- *    1.5.3beta11             15    10503  15.so.15.3[.0]
- *    1.5.3 [omitted]
- *    1.5.4beta01-08          15    10504  15.so.15.4[.0]
- *    1.5.4rc01               15    10504  15.so.15.4[.0]
- *    1.5.4                   15    10504  15.so.15.4[.0]
- *    1.5.5beta01-08          15    10505  15.so.15.5[.0]
- *    1.5.5rc01               15    10505  15.so.15.5[.0]
- *    1.5.5                   15    10505  15.so.15.5[.0]
- *    1.5.6beta01-07          15    10506  15.so.15.6[.0]
- *    1.5.6rc01-03            15    10506  15.so.15.6[.0]
- *    1.5.6                   15    10506  15.so.15.6[.0]
- *    1.5.7beta01-05          15    10507  15.so.15.7[.0]
- *    1.5.7rc01-03            15    10507  15.so.15.7[.0]
- *    1.5.7                   15    10507  15.so.15.7[.0]
- *    1.6.0beta01-40          16    10600  16.so.16.0[.0]
- *    1.6.0rc01-08            16    10600  16.so.16.0[.0]
- *    1.6.0                   16    10600  16.so.16.0[.0]
- *    1.6.1beta01-09          16    10601  16.so.16.1[.0]
- *    1.6.1rc01               16    10601  16.so.16.1[.0]
- *    1.6.1                   16    10601  16.so.16.1[.0]
- *    1.6.2beta01             16    10602  16.so.16.2[.0]
- *    1.6.2rc01-06            16    10602  16.so.16.2[.0]
- *    1.6.2                   16    10602  16.so.16.2[.0]
- *    1.6.3beta01-11          16    10603  16.so.16.3[.0]
- *    1.6.3rc01               16    10603  16.so.16.3[.0]
- *    1.6.3                   16    10603  16.so.16.3[.0]
- *    1.6.4beta01-02          16    10604  16.so.16.4[.0]
- *    1.6.4rc01               16    10604  16.so.16.4[.0]
- *    1.6.4                   16    10604  16.so.16.4[.0]
- *    1.6.5                   16    10605  16.so.16.5[.0]
- *    1.6.6                   16    10606  16.so.16.6[.0]
- *    1.6.7beta01-04          16    10607  16.so.16.7[.0]
- *    1.6.7rc01-03            16    10607  16.so.16.7[.0]
- *    1.6.7                   16    10607  16.so.16.7[.0]
- *    1.6.8beta01-02          16    10608  16.so.16.8[.0]
- *    1.6.8rc01-02            16    10608  16.so.16.8[.0]
- *    1.6.8                   16    10608  16.so.16.8[.0]
- *    1.6.9beta01-04          16    10609  16.so.16.9[.0]
- *    1.6.9rc01-02            16    10609  16.so.16.9[.0]
- *    1.6.9                   16    10609  16.so.16.9[.0]
- *    1.6.10beta01-03         16    10610  16.so.16.10[.0]
- *    1.6.10rc01-03           16    10610  16.so.16.10[.0]
- *    1.6.10                  16    10610  16.so.16.10[.0]
- *    1.6.11beta01-06         16    10611  16.so.16.11[.0]
- *    1.6.11rc01-02           16    10611  16.so.16.11[.0]
- *    1.6.11                  16    10611  16.so.16.11[.0]
- *    1.6.12rc01-03           16    10612  16.so.16.12[.0]
- *    1.6.12                  16    10612  16.so.16.12[.0]
- *    1.6.13beta01-04         16    10613  16.so.16.13[.0]
- *    1.6.13rc01-02           16    10613  16.so.16.13[.0]
- *    1.6.13                  16    10613  16.so.16.13[.0]
- *    1.6.14beta01-07         16    10614  16.so.16.14[.0]
- *    1.6.14rc01-02           16    10614  16.so.16.14[.0]
- *    1.6.14                  16    10614  16.so.16.14[.0]
- *    1.6.15beta01-08         16    10615  16.so.16.15[.0]
- *    1.6.15rc01-03           16    10615  16.so.16.15[.0]
- *    1.6.15                  16    10615  16.so.16.15[.0]
- *    1.6.16beta01-03         16    10616  16.so.16.16[.0]
- *    1.6.16rc01-02           16    10616  16.so.16.16[.0]
- *    1.6.16                  16    10616  16.so.16.16[.0]
- *
- *   Henceforth the source version will match the shared-library major
- *   and minor numbers; the shared-library major version number will be
- *   used for changes in backward compatibility, as it is intended.  The
- *   PNG_LIBPNG_VER macro, which is not used within libpng but is available
- *   for applications, is an unsigned integer of the form xyyzz corresponding
- *   to the source version x.y.z (leading zeros in y and z).  Beta versions
- *   were given the previous public release number plus a letter, until
- *   version 1.0.6j; from then on they were given the upcoming public
- *   release number plus "betaNN" or "rcNN".
- *
- *   Binary incompatibility exists only when applications make direct access
- *   to the info_ptr or png_ptr members through png.h, and the compiled
- *   application is loaded with a different version of the library.
- *
- *   DLLNUM will change each time there are forward or backward changes
- *   in binary compatibility (e.g., when a new feature is added).
- *
- * See libpng-manual.txt or libpng.3 for more information.  The PNG
- * specification is available as a W3C Recommendation and as an ISO
- * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
- */
-
-/*
- * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
- *
- * If you modify libpng you may insert additional notices immediately following
- * this sentence.
- *
- * This code is released under the libpng license.
- *
- * libpng versions 1.2.6, August 15, 2004, through 1.6.16, December 22, 2014, are
- * Copyright (c) 2004, 2006-2014 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.2.5
- * with the following individual added to the list of Contributing Authors:
- *
- *    Cosmin Truta
- *
- * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
- * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-1.0.6
- * with the following individuals added to the list of Contributing Authors:
- *
- *    Simon-Pierre Cadieux
- *    Eric S. Raymond
- *    Gilles Vollant
- *
- * and with the following additions to the disclaimer:
- *
- *    There is no warranty against interference with your enjoyment of the
- *    library or against infringement.  There is no warranty that our
- *    efforts or the library will fulfill any of your particular purposes
- *    or needs.  This library is provided with all faults, and the entire
- *    risk of satisfactory quality, performance, accuracy, and effort is with
- *    the user.
- *
- * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
- * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
- * distributed according to the same disclaimer and license as libpng-0.96,
- * with the following individuals added to the list of Contributing Authors:
- *
- *    Tom Lane
- *    Glenn Randers-Pehrson
- *    Willem van Schaik
- *
- * libpng versions 0.89, June 1996, through 0.96, May 1997, are
- * Copyright (c) 1996, 1997 Andreas Dilger
- * Distributed according to the same disclaimer and license as libpng-0.88,
- * with the following individuals added to the list of Contributing Authors:
- *
- *    John Bowler
- *    Kevin Bracey
- *    Sam Bushell
- *    Magnus Holmgren
- *    Greg Roelofs
- *    Tom Tanner
- *
- * libpng versions 0.5, May 1995, through 0.88, January 1996, are
- * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
- *
- * For the purposes of this copyright and license, "Contributing Authors"
- * is defined as the following set of individuals:
- *
- *    Andreas Dilger
- *    Dave Martindale
- *    Guy Eric Schalnat
- *    Paul Schmidt
- *    Tim Wegner
- *
- * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
- * and Group 42, Inc. disclaim all warranties, expressed or implied,
- * including, without limitation, the warranties of merchantability and of
- * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
- * assume no liability for direct, indirect, incidental, special, exemplary,
- * or consequential damages, which may result from the use of the PNG
- * Reference Library, even if advised of the possibility of such damage.
- *
- * Permission is hereby granted to use, copy, modify, and distribute this
- * source code, or portions hereof, for any purpose, without fee, subject
- * to the following restrictions:
- *
- *   1. The origin of this source code must not be misrepresented.
- *
- *   2. Altered versions must be plainly marked as such and must not
- *      be misrepresented as being the original source.
- *
- *   3. This Copyright notice may not be removed or altered from
- *      any source or altered source distribution.
- *
- * The Contributing Authors and Group 42, Inc. specifically permit, without
- * fee, and encourage the use of this source code as a component to
- * supporting the PNG file format in commercial products.  If you use this
- * source code in a product, acknowledgment is not required but would be
- * appreciated.
- */
-
-/*
- * A "png_get_copyright" function is available, for convenient use in "about"
- * boxes and the like:
- *
- *     printf("%s", png_get_copyright(NULL));
- *
- * Also, the PNG logo (in PNG format, of course) is supplied in the
- * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
- */
-
-/*
- * Libpng is OSI Certified Open Source Software.  OSI Certified is a
- * certification mark of the Open Source Initiative.
- */
-
-/*
- * The contributing authors would like to thank all those who helped
- * with testing, bug fixes, and patience.  This wouldn't have been
- * possible without all of you.
- *
- * Thanks to Frank J. T. Wojcik for helping with the documentation.
- */
-
-/*
- * Y2K compliance in libpng:
- * =========================
- *
- *    December 22, 2014
- *
- *    Since the PNG Development group is an ad-hoc body, we can't make
- *    an official declaration.
- *
- *    This is your unofficial assurance that libpng from version 0.71 and
- *    upward through 1.6.16 are Y2K compliant.  It is my belief that
- *    earlier versions were also Y2K compliant.
- *
- *    Libpng only has two year fields.  One is a 2-byte unsigned integer
- *    that will hold years up to 65535.  The other, which is deprecated,
- *    holds the date in text format, and will hold years up to 9999.
- *
- *    The integer is
- *        "png_uint_16 year" in png_time_struct.
- *
- *    The string is
- *        "char time_buffer[29]" in png_struct.  This is no longer used
- *    in libpng-1.6.x and will be removed from libpng-1.7.0.
- *
- *    There are seven time-related functions:
- *        png.c: png_convert_to_rfc_1123_buffer() in png.c
- *          (formerly png_convert_to_rfc_1123() prior to libpng-1.5.x and
- *          png_convert_to_rfc_1152() in error prior to libpng-0.98)
- *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
- *        png_convert_from_time_t() in pngwrite.c
- *        png_get_tIME() in pngget.c
- *        png_handle_tIME() in pngrutil.c, called in pngread.c
- *        png_set_tIME() in pngset.c
- *        png_write_tIME() in pngwutil.c, called in pngwrite.c
- *
- *    All handle dates properly in a Y2K environment.  The
- *    png_convert_from_time_t() function calls gmtime() to convert from system
- *    clock time, which returns (year - 1900), which we properly convert to
- *    the full 4-digit year.  There is a possibility that libpng applications
- *    are not passing 4-digit years into the png_convert_to_rfc_1123_buffer()
- *    function, or that they are incorrectly passing only a 2-digit year
- *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
- *    but this is not under our control.  The libpng documentation has always
- *    stated that it works with 4-digit years, and the APIs have been
- *    documented as such.
- *
- *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
- *    integer to hold the year, and can hold years as large as 65535.
- *
- *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
- *    no date-related code.
- *
- *       Glenn Randers-Pehrson
- *       libpng maintainer
- *       PNG Development Group
- */
-
-#ifndef PNG_H
-#define PNG_H
-
-/* This is not the place to learn how to use libpng. The file libpng-manual.txt
- * describes how to use libpng, and the file example.c summarizes it
- * with some code on which to build.  This file is useful for looking
- * at the actual function definitions and structure components.  If that
- * file has been stripped from your copy of libpng, you can find it at
- * <http://www.libpng.org/pub/png/libpng-manual.txt>
- *
- * If you just need to read a PNG file and don't want to read the documentation
- * skip to the end of this file and read the section entitled 'simplified API'.
- */
-
-/* Version information for png.h - this should match the version in png.c */
-#define PNG_LIBPNG_VER_STRING "1.6.16"
-#define PNG_HEADER_VERSION_STRING \
-     " libpng version 1.6.16 - December 22, 2014\n"
-
-#define PNG_LIBPNG_VER_SONUM   16
-#define PNG_LIBPNG_VER_DLLNUM  16
-
-/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
-#define PNG_LIBPNG_VER_MAJOR   1
-#define PNG_LIBPNG_VER_MINOR   6
-#define PNG_LIBPNG_VER_RELEASE 16
-
-/* This should match the numeric part of the final component of
- * PNG_LIBPNG_VER_STRING, omitting any leading zero:
- */
-
-#define PNG_LIBPNG_VER_BUILD  0
-
-/* Release Status */
-#define PNG_LIBPNG_BUILD_ALPHA    1
-#define PNG_LIBPNG_BUILD_BETA     2
-#define PNG_LIBPNG_BUILD_RC       3
-#define PNG_LIBPNG_BUILD_STABLE   4
-#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
-
-/* Release-Specific Flags */
-#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
-                                       PNG_LIBPNG_BUILD_STABLE only */
-#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
-                                       PNG_LIBPNG_BUILD_SPECIAL */
-#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
-                                       PNG_LIBPNG_BUILD_PRIVATE */
-
-#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
-
-/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
- * We must not include leading zeros.
- * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
- * version 1.0.0 was mis-numbered 100 instead of 10000).  From
- * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
- */
-#define PNG_LIBPNG_VER 10616 /* 1.6.16 */
-
-/* Library configuration: these options cannot be changed after
- * the library has been built.
- */
-#ifndef PNGLCONF_H
-    /* If pnglibconf.h is missing, you can
-     * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
-     */
-#   include "pnglibconf.h"
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-   /* Machine specific configuration. */
-#  include "pngconf.h"
-#endif
-
-/*
- * Added at libpng-1.2.8
- *
- * Ref MSDN: Private as priority over Special
- * VS_FF_PRIVATEBUILD File *was not* built using standard release
- * procedures. If this value is given, the StringFileInfo block must
- * contain a PrivateBuild string.
- *
- * VS_FF_SPECIALBUILD File *was* built by the original company using
- * standard release procedures but is a variation of the standard
- * file of the same version number. If this value is given, the
- * StringFileInfo block must contain a SpecialBuild string.
- */
-
-#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */
-#  define PNG_LIBPNG_BUILD_TYPE \
-       (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
-#else
-#  ifdef PNG_LIBPNG_SPECIALBUILD
-#    define PNG_LIBPNG_BUILD_TYPE \
-         (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
-#  else
-#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
-#  endif
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-
-/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Version information for C files, stored in png.c.  This had better match
- * the version above.
- */
-#define png_libpng_ver png_get_header_ver(NULL)
-
-/* This file is arranged in several sections:
- *
- * 1. Any configuration options that can be specified by for the application
- *    code when it is built.  (Build time configuration is in pnglibconf.h)
- * 2. Type definitions (base types are defined in pngconf.h), structure
- *    definitions.
- * 3. Exported library functions.
- * 4. Simplified API.
- *
- * The library source code has additional files (principally pngpriv.h) that
- * allow configuration of the library.
- */
-/* Section 1: run time configuration
- * See pnglibconf.h for build time configuration
- *
- * Run time configuration allows the application to choose between
- * implementations of certain arithmetic APIs.  The default is set
- * at build time and recorded in pnglibconf.h, but it is safe to
- * override these (and only these) settings.  Note that this won't
- * change what the library does, only application code, and the
- * settings can (and probably should) be made on a per-file basis
- * by setting the #defines before including png.h
- *
- * Use macros to read integers from PNG data or use the exported
- * functions?
- *   PNG_USE_READ_MACROS: use the macros (see below)  Note that
- *     the macros evaluate their argument multiple times.
- *   PNG_NO_USE_READ_MACROS: call the relevant library function.
- *
- * Use the alternative algorithm for compositing alpha samples that
- * does not use division?
- *   PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
- *      algorithm.
- *   PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
- *
- * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
- * false?
- *   PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
- *      APIs to png_warning.
- * Otherwise the calls are mapped to png_error.
- */
-
-/* Section 2: type definitions, including structures and compile time
- * constants.
- * See pngconf.h for base types that vary by machine/system
- */
-
-/* This triggers a compiler error in png.c, if png.c and png.h
- * do not agree upon the version number.
- */
-typedef char* png_libpng_version_1_6_16;
-
-/* Basic control structions.  Read libpng-manual.txt or libpng.3 for more info.
- *
- * png_struct is the cache of information used while reading or writing a single
- * PNG file.  One of these is always required, although the simplified API
- * (below) hides the creation and destruction of it.
- */
-typedef struct png_struct_def png_struct;
-typedef const png_struct * png_const_structp;
-typedef png_struct * png_structp;
-typedef png_struct * * png_structpp;
-
-/* png_info contains information read from or to be written to a PNG file.  One
- * or more of these must exist while reading or creating a PNG file.  The
- * information is not used by libpng during read but is used to control what
- * gets written when a PNG file is created.  "png_get_" function calls read
- * information during read and "png_set_" functions calls write information
- * when creating a PNG.
- * been moved into a separate header file that is not accessible to
- * applications.  Read libpng-manual.txt or libpng.3 for more info.
- */
-typedef struct png_info_def png_info;
-typedef png_info * png_infop;
-typedef const png_info * png_const_infop;
-typedef png_info * * png_infopp;
-
-/* Types with names ending 'p' are pointer types.  The corresponding types with
- * names ending 'rp' are identical pointer types except that the pointer is
- * marked 'restrict', which means that it is the only pointer to the object
- * passed to the function.  Applications should not use the 'restrict' types;
- * it is always valid to pass 'p' to a pointer with a function argument of the
- * corresponding 'rp' type.  Different compilers have different rules with
- * regard to type matching in the presence of 'restrict'.  For backward
- * compatibility libpng callbacks never have 'restrict' in their parameters and,
- * consequentially, writing portable application code is extremely difficult if
- * an attempt is made to use 'restrict'.
- */
-typedef png_struct * PNG_RESTRICT png_structrp;
-typedef const png_struct * PNG_RESTRICT png_const_structrp;
-typedef png_info * PNG_RESTRICT png_inforp;
-typedef const png_info * PNG_RESTRICT png_const_inforp;
-
-/* Three color definitions.  The order of the red, green, and blue, (and the
- * exact size) is not important, although the size of the fields need to
- * be png_byte or png_uint_16 (as defined below).
- */
-typedef struct png_color_struct
-{
-   png_byte red;
-   png_byte green;
-   png_byte blue;
-} png_color;
-typedef png_color * png_colorp;
-typedef const png_color * png_const_colorp;
-typedef png_color * * png_colorpp;
-
-typedef struct png_color_16_struct
-{
-   png_byte index;    /* used for palette files */
-   png_uint_16 red;   /* for use in red green blue files */
-   png_uint_16 green;
-   png_uint_16 blue;
-   png_uint_16 gray;  /* for use in grayscale files */
-} png_color_16;
-typedef png_color_16 * png_color_16p;
-typedef const png_color_16 * png_const_color_16p;
-typedef png_color_16 * * png_color_16pp;
-
-typedef struct png_color_8_struct
-{
-   png_byte red;   /* for use in red green blue files */
-   png_byte green;
-   png_byte blue;
-   png_byte gray;  /* for use in grayscale files */
-   png_byte alpha; /* for alpha channel files */
-} png_color_8;
-typedef png_color_8 * png_color_8p;
-typedef const png_color_8 * png_const_color_8p;
-typedef png_color_8 * * png_color_8pp;
-
-/*
- * The following two structures are used for the in-core representation
- * of sPLT chunks.
- */
-typedef struct png_sPLT_entry_struct
-{
-   png_uint_16 red;
-   png_uint_16 green;
-   png_uint_16 blue;
-   png_uint_16 alpha;
-   png_uint_16 frequency;
-} png_sPLT_entry;
-typedef png_sPLT_entry * png_sPLT_entryp;
-typedef const png_sPLT_entry * png_const_sPLT_entryp;
-typedef png_sPLT_entry * * png_sPLT_entrypp;
-
-/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
- *  occupy the LSB of their respective members, and the MSB of each member
- *  is zero-filled.  The frequency member always occupies the full 16 bits.
- */
-
-typedef struct png_sPLT_struct
-{
-   png_charp name;           /* palette name */
-   png_byte depth;           /* depth of palette samples */
-   png_sPLT_entryp entries;  /* palette entries */
-   png_int_32 nentries;      /* number of palette entries */
-} png_sPLT_t;
-typedef png_sPLT_t * png_sPLT_tp;
-typedef const png_sPLT_t * png_const_sPLT_tp;
-typedef png_sPLT_t * * png_sPLT_tpp;
-
-#ifdef PNG_TEXT_SUPPORTED
-/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
- * and whether that contents is compressed or not.  The "key" field
- * points to a regular zero-terminated C string.  The "text" fields can be a
- * regular C string, an empty string, or a NULL pointer.
- * However, the structure returned by png_get_text() will always contain
- * the "text" field as a regular zero-terminated C string (possibly
- * empty), never a NULL pointer, so it can be safely used in printf() and
- * other string-handling functions.  Note that the "itxt_length", "lang", and
- * "lang_key" members of the structure only exist when the library is built
- * with iTXt chunk support.  Prior to libpng-1.4.0 the library was built by
- * default without iTXt support. Also note that when iTXt *is* supported,
- * the "lang" and "lang_key" fields contain NULL pointers when the
- * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or
- * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the
- * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag"
- * which is always 0 or 1, or its "compression method" which is always 0.
- */
-typedef struct png_text_struct
-{
-   int  compression;       /* compression value:
-                             -1: tEXt, none
-                              0: zTXt, deflate
-                              1: iTXt, none
-                              2: iTXt, deflate  */
-   png_charp key;          /* keyword, 1-79 character description of "text" */
-   png_charp text;         /* comment, may be an empty string (ie "")
-                              or a NULL pointer */
-   png_size_t text_length; /* length of the text string */
-   png_size_t itxt_length; /* length of the itxt string */
-   png_charp lang;         /* language code, 0-79 characters
-                              or a NULL pointer */
-   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
-                              chars or a NULL pointer */
-} png_text;
-typedef png_text * png_textp;
-typedef const png_text * png_const_textp;
-typedef png_text * * png_textpp;
-#endif
-
-/* Supported compression types for text in PNG files (tEXt, and zTXt).
- * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
-#define PNG_TEXT_COMPRESSION_NONE_WR -3
-#define PNG_TEXT_COMPRESSION_zTXt_WR -2
-#define PNG_TEXT_COMPRESSION_NONE    -1
-#define PNG_TEXT_COMPRESSION_zTXt     0
-#define PNG_ITXT_COMPRESSION_NONE     1
-#define PNG_ITXT_COMPRESSION_zTXt     2
-#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
-
-/* png_time is a way to hold the time in an machine independent way.
- * Two conversions are provided, both from time_t and struct tm.  There
- * is no portable way to convert to either of these structures, as far
- * as I know.  If you know of a portable way, send it to me.  As a side
- * note - PNG has always been Year 2000 compliant!
- */
-typedef struct png_time_struct
-{
-   png_uint_16 year; /* full year, as in, 1995 */
-   png_byte month;   /* month of year, 1 - 12 */
-   png_byte day;     /* day of month, 1 - 31 */
-   png_byte hour;    /* hour of day, 0 - 23 */
-   png_byte minute;  /* minute of hour, 0 - 59 */
-   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
-} png_time;
-typedef png_time * png_timep;
-typedef const png_time * png_const_timep;
-typedef png_time * * png_timepp;
-
-#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\
-   defined(PNG_USER_CHUNKS_SUPPORTED)
-/* png_unknown_chunk is a structure to hold queued chunks for which there is
- * no specific support.  The idea is that we can use this to queue
- * up private chunks for output even though the library doesn't actually
- * know about their semantics.
- *
- * The data in the structure is set by libpng on read and used on write.
- */
-typedef struct png_unknown_chunk_t
-{
-    png_byte name[5]; /* Textual chunk name with '\0' terminator */
-    png_byte *data;   /* Data, should not be modified on read! */
-    png_size_t size;
-
-    /* On write 'location' must be set using the flag values listed below.
-     * Notice that on read it is set by libpng however the values stored have
-     * more bits set than are listed below.  Always treat the value as a
-     * bitmask.  On write set only one bit - setting multiple bits may cause the
-     * chunk to be written in multiple places.
-     */
-    png_byte location; /* mode of operation at read time */
-}
-png_unknown_chunk;
-
-typedef png_unknown_chunk * png_unknown_chunkp;
-typedef const png_unknown_chunk * png_const_unknown_chunkp;
-typedef png_unknown_chunk * * png_unknown_chunkpp;
-#endif
-
-/* Flag values for the unknown chunk location byte. */
-#define PNG_HAVE_IHDR  0x01
-#define PNG_HAVE_PLTE  0x02
-#define PNG_AFTER_IDAT 0x08
-
-/* Maximum positive integer used in PNG is (2^31)-1 */
-#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
-#define PNG_UINT_32_MAX ((png_uint_32)(-1))
-#define PNG_SIZE_MAX ((png_size_t)(-1))
-
-/* These are constants for fixed point values encoded in the
- * PNG specification manner (x100000)
- */
-#define PNG_FP_1    100000
-#define PNG_FP_HALF  50000
-#define PNG_FP_MAX  ((png_fixed_point)0x7fffffffL)
-#define PNG_FP_MIN  (-PNG_FP_MAX)
-
-/* These describe the color_type field in png_info. */
-/* color type masks */
-#define PNG_COLOR_MASK_PALETTE    1
-#define PNG_COLOR_MASK_COLOR      2
-#define PNG_COLOR_MASK_ALPHA      4
-
-/* color types.  Note that not all combinations are legal */
-#define PNG_COLOR_TYPE_GRAY 0
-#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
-#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
-#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
-#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
-/* aliases */
-#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
-#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
-
-/* This is for compression type. PNG 1.0-1.2 only define the single type. */
-#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
-#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
-
-/* This is for filter type. PNG 1.0-1.2 only define the single type. */
-#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
-#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
-#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
-
-/* These are for the interlacing type.  These values should NOT be changed. */
-#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
-#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
-#define PNG_INTERLACE_LAST        2 /* Not a valid value */
-
-/* These are for the oFFs chunk.  These values should NOT be changed. */
-#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
-#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
-#define PNG_OFFSET_LAST           2 /* Not a valid value */
-
-/* These are for the pCAL chunk.  These values should NOT be changed. */
-#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
-#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
-#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
-#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
-#define PNG_EQUATION_LAST         4 /* Not a valid value */
-
-/* These are for the sCAL chunk.  These values should NOT be changed. */
-#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
-#define PNG_SCALE_METER           1 /* meters per pixel */
-#define PNG_SCALE_RADIAN          2 /* radians per pixel */
-#define PNG_SCALE_LAST            3 /* Not a valid value */
-
-/* These are for the pHYs chunk.  These values should NOT be changed. */
-#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
-#define PNG_RESOLUTION_METER      1 /* pixels/meter */
-#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
-
-/* These are for the sRGB chunk.  These values should NOT be changed. */
-#define PNG_sRGB_INTENT_PERCEPTUAL 0
-#define PNG_sRGB_INTENT_RELATIVE   1
-#define PNG_sRGB_INTENT_SATURATION 2
-#define PNG_sRGB_INTENT_ABSOLUTE   3
-#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
-
-/* This is for text chunks */
-#define PNG_KEYWORD_MAX_LENGTH     79
-
-/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
-#define PNG_MAX_PALETTE_LENGTH    256
-
-/* These determine if an ancillary chunk's data has been successfully read
- * from the PNG header, or if the application has filled in the corresponding
- * data in the info_struct to be written into the output file.  The values
- * of the PNG_INFO_<chunk> defines should NOT be changed.
- */
-#define PNG_INFO_gAMA 0x0001
-#define PNG_INFO_sBIT 0x0002
-#define PNG_INFO_cHRM 0x0004
-#define PNG_INFO_PLTE 0x0008
-#define PNG_INFO_tRNS 0x0010
-#define PNG_INFO_bKGD 0x0020
-#define PNG_INFO_hIST 0x0040
-#define PNG_INFO_pHYs 0x0080
-#define PNG_INFO_oFFs 0x0100
-#define PNG_INFO_tIME 0x0200
-#define PNG_INFO_pCAL 0x0400
-#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
-#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
-#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
-#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
-#define PNG_INFO_IDAT 0x8000   /* ESR, 1.0.6 */
-
-/* This is used for the transformation routines, as some of them
- * change these values for the row.  It also should enable using
- * the routines for other purposes.
- */
-typedef struct png_row_info_struct
-{
-   png_uint_32 width;    /* width of row */
-   png_size_t rowbytes;  /* number of bytes in row */
-   png_byte color_type;  /* color type of row */
-   png_byte bit_depth;   /* bit depth of row */
-   png_byte channels;    /* number of channels (1, 2, 3, or 4) */
-   png_byte pixel_depth; /* bits per pixel (depth * channels) */
-} png_row_info;
-
-typedef png_row_info * png_row_infop;
-typedef png_row_info * * png_row_infopp;
-
-/* These are the function types for the I/O functions and for the functions
- * that allow the user to override the default I/O functions with his or her
- * own.  The png_error_ptr type should match that of user-supplied warning
- * and error functions, while the png_rw_ptr type should match that of the
- * user read/write data functions.  Note that the 'write' function must not
- * modify the buffer it is passed. The 'read' function, on the other hand, is
- * expected to return the read data in the buffer.
- */
-typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
-typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
-typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
-typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
-    int));
-typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,
-    int));
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
-typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
-
-/* The following callback receives png_uint_32 row_number, int pass for the
- * png_bytep data of the row.  When transforming an interlaced image the
- * row number is the row number within the sub-image of the interlace pass, so
- * the value will increase to the height of the sub-image (not the full image)
- * then reset to 0 for the next pass.
- *
- * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
- * find the output pixel (x,y) given an interlaced sub-image pixel
- * (row,col,pass).  (See below for these macros.)
- */
-typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,
-    png_uint_32, int));
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,
-    png_bytep));
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
-    png_unknown_chunkp));
-#endif
-#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
-/* not used anywhere */
-/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* This must match the function definition in <setjmp.h>, and the application
- * must include this before png.h to obtain the definition of jmp_buf.  The
- * function is required to be PNG_NORETURN, but this is not checked.  If the
- * function does return the application will crash via an abort() or similar
- * system level call.
- *
- * If you get a warning here while building the library you may need to make
- * changes to ensure that pnglibconf.h records the calling convention used by
- * your compiler.  This may be very difficult - try using a different compiler
- * to build the library!
- */
-PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
-#endif
-
-/* Transform masks for the high-level interface */
-#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
-#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
-#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
-#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
-#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
-#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
-#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
-#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
-#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
-#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
-#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
-#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
-#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
-/* Added to libpng-1.2.34 */
-#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
-#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
-/* Added to libpng-1.4.0 */
-#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
-/* Added to libpng-1.5.4 */
-#define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */
-#define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */
-
-/* Flags for MNG supported features */
-#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
-#define PNG_FLAG_MNG_FILTER_64      0x04
-#define PNG_ALL_MNG_FEATURES        0x05
-
-/* NOTE: prior to 1.5 these functions had no 'API' style declaration,
- * this allowed the zlib default functions to be used on Windows
- * platforms.  In 1.5 the zlib default malloc (which just calls malloc and
- * ignores the first argument) should be completely compatible with the
- * following.
- */
-typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
-    png_alloc_size_t));
-typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
-
-/* Section 3: exported functions
- * Here are the function definitions most commonly used.  This is not
- * the place to find out how to use libpng.  See libpng-manual.txt for the
- * full explanation, see example.c for the summary.  This just provides
- * a simple one line description of the use of each function.
- *
- * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in
- * pngconf.h and in the *.dfn files in the scripts directory.
- *
- *   PNG_EXPORT(ordinal, type, name, (args));
- *
- *       ordinal:    ordinal that is used while building
- *                   *.def files. The ordinal value is only
- *                   relevant when preprocessing png.h with
- *                   the *.dfn files for building symbol table
- *                   entries, and are removed by pngconf.h.
- *       type:       return type of the function
- *       name:       function name
- *       args:       function arguments, with types
- *
- * When we wish to append attributes to a function prototype we use
- * the PNG_EXPORTA() macro instead.
- *
- *   PNG_EXPORTA(ordinal, type, name, (args), attributes);
- *
- *       ordinal, type, name, and args: same as in PNG_EXPORT().
- *       attributes: function attributes
- */
-
-/* Returns the version number of the library */
-PNG_EXPORT(1, png_uint_32, png_access_version_number, (void));
-
-/* Tell lib we have already handled the first <num_bytes> magic bytes.
- * Handling more than 8 bytes from the beginning of the file is an error.
- */
-PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes));
-
-/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
- * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
- * signature, and non-zero otherwise.  Having num_to_check == 0 or
- * start > 7 will always fail (ie return non-zero).
- */
-PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
-    png_size_t num_to_check));
-
-/* Simple signature checking function.  This is the same as calling
- * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
- */
-#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
-
-/* Allocate and initialize png_ptr struct for reading, and any other memory. */
-PNG_EXPORTA(4, png_structp, png_create_read_struct,
-    (png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),
-    PNG_ALLOCATED);
-
-/* Allocate and initialize png_ptr struct for writing, and any other memory */
-PNG_EXPORTA(5, png_structp, png_create_write_struct,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn),
-    PNG_ALLOCATED);
-
-PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
-    (png_const_structrp png_ptr));
-
-PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr,
-    png_size_t size));
-
-/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
- * match up.
- */
-#ifdef PNG_SETJMP_SUPPORTED
-/* This function returns the jmp_buf built in to *png_ptr.  It must be
- * supplied with an appropriate 'longjmp' function to use on that jmp_buf
- * unless the default error function is overridden in which case NULL is
- * acceptable.  The size of the jmp_buf is checked against the actual size
- * allocated by the library - the call will return NULL on a mismatch
- * indicating an ABI mismatch.
- */
-PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr,
-    png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
-#  define png_jmpbuf(png_ptr) \
-      (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf))))
-#else
-#  define png_jmpbuf(png_ptr) \
-      (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
-#endif
-/* This function should be used by libpng applications in place of
- * longjmp(png_ptr->jmpbuf, val).  If longjmp_fn() has been set, it
- * will use it; otherwise it will call PNG_ABORT().  This function was
- * added in libpng-1.5.0.
- */
-PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val),
-    PNG_NORETURN);
-
-#ifdef PNG_READ_SUPPORTED
-/* Reset the compression stream */
-PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED);
-#endif
-
-/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_EXPORTA(11, png_structp, png_create_read_struct_2,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn,
-    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
-    PNG_ALLOCATED);
-PNG_EXPORTA(12, png_structp, png_create_write_struct_2,
-    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn,
-    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
-    PNG_ALLOCATED);
-#endif
-
-/* Write the PNG file signature. */
-PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr));
-
-/* Write a PNG chunk - size, type, (optional) data, CRC. */
-PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep
-    chunk_name, png_const_bytep data, png_size_t length));
-
-/* Write the start of a PNG chunk - length and chunk name. */
-PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr,
-    png_const_bytep chunk_name, png_uint_32 length));
-
-/* Write the data of a PNG chunk started with png_write_chunk_start(). */
-PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr,
-    png_const_bytep data, png_size_t length));
-
-/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
-PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr));
-
-/* Allocate and initialize the info structure */
-PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr),
-    PNG_ALLOCATED);
-
-/* DEPRECATED: this function allowed init structures to be created using the
- * default allocation method (typically malloc).  Use is deprecated in 1.6.0 and
- * the API will be removed in the future.
- */
-PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr,
-    png_size_t png_info_struct_size), PNG_DEPRECATED);
-
-/* Writes all the PNG information before the image. */
-PNG_EXPORT(20, void, png_write_info_before_PLTE,
-    (png_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(21, void, png_write_info,
-    (png_structrp png_ptr, png_const_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the information before the actual image data. */
-PNG_EXPORT(22, void, png_read_info,
-    (png_structrp png_ptr, png_inforp info_ptr));
-#endif
-
-#ifdef PNG_TIME_RFC1123_SUPPORTED
-   /* Convert to a US string format: there is no localization support in this
-    * routine.  The original implementation used a 29 character buffer in
-    * png_struct, this will be removed in future versions.
-    */
-#if PNG_LIBPNG_VER < 10700
-/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */
-PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr,
-    png_const_timep ptime),PNG_DEPRECATED);
-#endif
-PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29],
-    png_const_timep ptime));
-#endif
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-/* Convert from a struct tm to png_time */
-PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime,
-    const struct tm * ttime));
-
-/* Convert from time_t to png_time.  Uses gmtime() */
-PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime));
-#endif /* CONVERT_tIME */
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
-PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr));
-PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr));
-PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr));
-PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion
- * of a tRNS chunk if present.
- */
-PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Use blue, green, red order for pixels. */
-PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-/* Expand the grayscale to 24-bit RGB if necessary. */
-PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-/* Reduce RGB to grayscale. */
-#define PNG_ERROR_ACTION_NONE  1
-#define PNG_ERROR_ACTION_WARN  2
-#define PNG_ERROR_ACTION_ERROR 3
-#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/
-
-PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr,
-    int error_action, double red, double green))
-PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr,
-    int error_action, png_fixed_point red, png_fixed_point green))
-
-PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp
-    png_ptr));
-#endif
-
-#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
-PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,
-    png_colorp palette));
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-/* How the alpha channel is interpreted - this affects how the color channels
- * of a PNG file are returned to the calling application when an alpha channel,
- * or a tRNS chunk in a palette file, is present.
- *
- * This has no effect on the way pixels are written into a PNG output
- * datastream. The color samples in a PNG datastream are never premultiplied
- * with the alpha samples.
- *
- * The default is to return data according to the PNG specification: the alpha
- * channel is a linear measure of the contribution of the pixel to the
- * corresponding composited pixel, and the color channels are unassociated
- * (not premultiplied).  The gamma encoded color channels must be scaled
- * according to the contribution and to do this it is necessary to undo
- * the encoding, scale the color values, perform the composition and reencode
- * the values.  This is the 'PNG' mode.
- *
- * The alternative is to 'associate' the alpha with the color information by
- * storing color channel values that have been scaled by the alpha.
- * image.  These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes
- * (the latter being the two common names for associated alpha color channels).
- *
- * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha
- * value is equal to the maximum value.
- *
- * The final choice is to gamma encode the alpha channel as well.  This is
- * broken because, in practice, no implementation that uses this choice
- * correctly undoes the encoding before handling alpha composition.  Use this
- * choice only if other serious errors in the software or hardware you use
- * mandate it; the typical serious error is for dark halos to appear around
- * opaque areas of the composited PNG image because of arithmetic overflow.
- *
- * The API function png_set_alpha_mode specifies which of these choices to use
- * with an enumerated 'mode' value and the gamma of the required output:
- */
-#define PNG_ALPHA_PNG           0 /* according to the PNG standard */
-#define PNG_ALPHA_STANDARD      1 /* according to Porter/Duff */
-#define PNG_ALPHA_ASSOCIATED    1 /* as above; this is the normal practice */
-#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */
-#define PNG_ALPHA_OPTIMIZED     2 /* 'PNG' for opaque pixels, else 'STANDARD' */
-#define PNG_ALPHA_BROKEN        3 /* the alpha channel is gamma encoded */
-
-PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode,
-    double output_gamma))
-PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr,
-    int mode, png_fixed_point output_gamma))
-#endif
-
-#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-/* The output_gamma value is a screen gamma in libpng terminology: it expresses
- * how to decode the output values, not how they are encoded.
- */
-#define PNG_DEFAULT_sRGB -1       /* sRGB gamma and color space */
-#define PNG_GAMMA_MAC_18 -2       /* Old Mac '1.8' gamma and color space */
-#define PNG_GAMMA_sRGB   220000   /* Television standards--matches sRGB gamma */
-#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */
-#endif
-
-/* The following are examples of calls to png_set_alpha_mode to achieve the
- * required overall gamma correction and, where necessary, alpha
- * premultiplication.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
- *    This is the default libpng handling of the alpha channel - it is not
- *    pre-multiplied into the color components.  In addition the call states
- *    that the output is for a sRGB system and causes all PNG files without gAMA
- *    chunks to be assumed to be encoded using sRGB.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
- *    In this case the output is assumed to be something like an sRGB conformant
- *    display preceeded by a power-law lookup table of power 1.45.  This is how
- *    early Mac systems behaved.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
- *    This is the classic Jim Blinn approach and will work in academic
- *    environments where everything is done by the book.  It has the shortcoming
- *    of assuming that input PNG data with no gamma information is linear - this
- *    is unlikely to be correct unless the PNG files where generated locally.
- *    Most of the time the output precision will be so low as to show
- *    significant banding in dark areas of the image.
- *
- * png_set_expand_16(pp);
- * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
- *    This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
- *    are assumed to have the sRGB encoding if not marked with a gamma value and
- *    the output is always 16 bits per component.  This permits accurate scaling
- *    and processing of the data.  If you know that your input PNG files were
- *    generated locally you might need to replace PNG_DEFAULT_sRGB with the
- *    correct value for your system.
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
- *    If you just need to composite the PNG image onto an existing background
- *    and if you control the code that does this you can use the optimization
- *    setting.  In this case you just copy completely opaque pixels to the
- *    output.  For pixels that are not completely transparent (you just skip
- *    those) you do the composition math using png_composite or png_composite_16
- *    below then encode the resultant 8-bit or 16-bit values to match the output
- *    encoding.
- *
- * Other cases
- *    If neither the PNG nor the standard linear encoding work for you because
- *    of the software or hardware you use then you have a big problem.  The PNG
- *    case will probably result in halos around the image.  The linear encoding
- *    will probably result in a washed out, too bright, image (it's actually too
- *    contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
- *    substantially reduce the halos.  Alternatively try:
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
- *    This option will also reduce the halos, but there will be slight dark
- *    halos round the opaque parts of the image where the background is light.
- *    In the OPTIMIZED mode the halos will be light halos where the background
- *    is dark.  Take your pick - the halos are unavoidable unless you can get
- *    your hardware/software fixed!  (The OPTIMIZED approach is slightly
- *    faster.)
- *
- * When the default gamma of PNG files doesn't match the output gamma.
- *    If you have PNG files with no gamma information png_set_alpha_mode allows
- *    you to provide a default gamma, but it also sets the ouput gamma to the
- *    matching value.  If you know your PNG files have a gamma that doesn't
- *    match the output you can take advantage of the fact that
- *    png_set_alpha_mode always sets the output gamma but only sets the PNG
- *    default if it is not already set:
- *
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
- * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
- *    The first call sets both the default and the output gamma values, the
- *    second call overrides the output gamma without changing the default.  This
- *    is easier than achieving the same effect with png_set_gamma.  You must use
- *    PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
- *    fire if more than one call to png_set_alpha_mode and png_set_background is
- *    made in the same read operation, however multiple calls with PNG_ALPHA_PNG
- *    are ignored.
- */
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
-PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler,
-    int flags));
-/* The values of the PNG_FILLER_ defines should NOT be changed */
-#  define PNG_FILLER_BEFORE 0
-#  define PNG_FILLER_AFTER 1
-/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
-PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr,
-    png_uint_32 filler, int flags));
-#endif /* READ_FILLER || WRITE_FILLER */
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Swap bytes in 16-bit depth files. */
-PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
-PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
-    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* Swap packing order of pixels in bytes. */
-PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-/* Converts files to legal bit depths. */
-PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p
-    true_bits));
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
-    defined(PNG_WRITE_INTERLACING_SUPPORTED)
-/* Have the code handle the interlacing.  Returns the number of passes.
- * MUST be called before png_read_update_info or png_start_read_image,
- * otherwise it will not have the desired effect.  Note that it is still
- * necessary to call png_read_row or png_read_rows png_get_image_height
- * times for each pass.
-*/
-PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr));
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-/* Invert monochrome files */
-PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-/* Handle alpha and tRNS by replacing with a background color.  Prior to
- * libpng-1.5.4 this API must not be called before the PNG file header has been
- * read.  Doing so will result in unexpected behavior and possible warnings or
- * errors if the PNG file contains a bKGD chunk.
- */
-PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, double background_gamma))
-PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, png_fixed_point background_gamma))
-#endif
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-#  define PNG_BACKGROUND_GAMMA_UNKNOWN 0
-#  define PNG_BACKGROUND_GAMMA_SCREEN  1
-#  define PNG_BACKGROUND_GAMMA_FILE    2
-#  define PNG_BACKGROUND_GAMMA_UNIQUE  3
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-/* Scale a 16-bit depth file down to 8-bit, accurately. */
-PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
-/* Strip the second byte of information from a 16-bit depth file. */
-PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* Turn on quantizing, and reduce the palette to the number of colors
- * available.
- */
-PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr,
-    png_colorp palette, int num_palette, int maximum_colors,
-    png_const_uint_16p histogram, int full_quantize));
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* The threshold on gamma processing is configurable but hard-wired into the
- * library.  The following is the floating point variant.
- */
-#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001)
-
-/* Handle gamma correction. Screen_gamma=(display_exponent).
- * NOTE: this API simply sets the screen and file gamma values. It will
- * therefore override the value for gamma in a PNG file if it is called after
- * the file header has been read - use with care  - call before reading the PNG
- * file for best results!
- *
- * These routines accept the same gamma values as png_set_alpha_mode (described
- * above).  The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either
- * API (floating point or fixed.)  Notice, however, that the 'file_gamma' value
- * is the inverse of a 'screen gamma' value.
- */
-PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr,
-    double screen_gamma, double override_file_gamma))
-PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr,
-    png_fixed_point screen_gamma, png_fixed_point override_file_gamma))
-#endif
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-/* Set how many lines between output flushes - 0 for no flushing */
-PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows));
-/* Flush the current PNG output buffer */
-PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr));
-#endif
-
-/* Optional update palette with requested transformations */
-PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr));
-
-/* Optional call to update the users info structure */
-PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr,
-    png_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read one or more rows of image data. */
-PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row,
-    png_bytepp display_row, png_uint_32 num_rows));
-#endif
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read a row of data. */
-PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row,
-    png_bytep display_row));
-#endif
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the whole image into memory at once. */
-PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image));
-#endif
-
-/* Write a row of image data */
-PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr,
-    png_const_bytep row));
-
-/* Write a few rows of image data: (*row) is not written; however, the type
- * is declared as writeable to maintain compatibility with previous versions
- * of libpng and to allow the 'display_row' array from read_rows to be passed
- * unchanged to write_rows.
- */
-PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row,
-    png_uint_32 num_rows));
-
-/* Write the image data */
-PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image));
-
-/* Write the end of the PNG file. */
-PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr,
-    png_inforp info_ptr));
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the end of the PNG file. */
-PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr));
-#endif
-
-/* Free any memory associated with the png_info_struct */
-PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr,
-    png_infopp info_ptr_ptr));
-
-/* Free any memory associated with the png_struct and the png_info_structs */
-PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr,
-    png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
-
-/* Free any memory associated with the png_struct and the png_info_structs */
-PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr,
-    png_infopp info_ptr_ptr));
-
-/* Set the libpng method of handling chunk CRC errors */
-PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action,
-    int ancil_action));
-
-/* Values for png_set_crc_action() say how to handle CRC errors in
- * ancillary and critical chunks, and whether to use the data contained
- * therein.  Note that it is impossible to "discard" data in a critical
- * chunk.  For versions prior to 0.90, the action was always error/quit,
- * whereas in version 0.90 and later, the action for CRC errors in ancillary
- * chunks is warn/discard.  These values should NOT be changed.
- *
- *      value                       action:critical     action:ancillary
- */
-#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
-#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
-#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
-#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
-#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
-#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
-
-/* These functions give the user control over the scan-line filtering in
- * libpng and the compression methods used by zlib.  These functions are
- * mainly useful for testing, as the defaults should work with most users.
- * Those users who are tight on memory or want faster performance at the
- * expense of compression can modify them.  See the compression library
- * header file (zlib.h) for an explination of the compression functions.
- */
-
-/* Set the filtering method(s) used by libpng.  Currently, the only valid
- * value for "method" is 0.
- */
-PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method,
-    int filters));
-
-/* Flags for png_set_filter() to say which filters to use.  The flags
- * are chosen so that they don't conflict with real filter types
- * below, in case they are supplied instead of the #defined constants.
- * These values should NOT be changed.
- */
-#define PNG_NO_FILTERS     0x00
-#define PNG_FILTER_NONE    0x08
-#define PNG_FILTER_SUB     0x10
-#define PNG_FILTER_UP      0x20
-#define PNG_FILTER_AVG     0x40
-#define PNG_FILTER_PAETH   0x80
-#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
-                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
-
-/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
- * These defines should NOT be changed.
- */
-#define PNG_FILTER_VALUE_NONE  0
-#define PNG_FILTER_VALUE_SUB   1
-#define PNG_FILTER_VALUE_UP    2
-#define PNG_FILTER_VALUE_AVG   3
-#define PNG_FILTER_VALUE_PAETH 4
-#define PNG_FILTER_VALUE_LAST  5
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
-/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
- * defines, either the default (minimum-sum-of-absolute-differences), or
- * the experimental method (weighted-minimum-sum-of-absolute-differences).
- *
- * Weights are factors >= 1.0, indicating how important it is to keep the
- * filter type consistent between rows.  Larger numbers mean the current
- * filter is that many times as likely to be the same as the "num_weights"
- * previous filters.  This is cumulative for each previous row with a weight.
- * There needs to be "num_weights" values in "filter_weights", or it can be
- * NULL if the weights aren't being specified.  Weights have no influence on
- * the selection of the first row filter.  Well chosen weights can (in theory)
- * improve the compression for a given image.
- *
- * Costs are factors >= 1.0 indicating the relative decoding costs of a
- * filter type.  Higher costs indicate more decoding expense, and are
- * therefore less likely to be selected over a filter with lower computational
- * costs.  There needs to be a value in "filter_costs" for each valid filter
- * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
- * setting the costs.  Costs try to improve the speed of decompression without
- * unduly increasing the compressed image size.
- *
- * A negative weight or cost indicates the default value is to be used, and
- * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
- * The default values for both weights and costs are currently 1.0, but may
- * change if good general weighting/cost heuristics can be found.  If both
- * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
- * to the UNWEIGHTED method, but with added encoding time/computation.
- */
-PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr,
-    int heuristic_method, int num_weights, png_const_doublep filter_weights,
-    png_const_doublep filter_costs))
-PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,
-    (png_structrp png_ptr, int heuristic_method, int num_weights,
-    png_const_fixed_point_p filter_weights,
-    png_const_fixed_point_p filter_costs))
-#endif /* WRITE_WEIGHTED_FILTER */
-
-/* Heuristic used for row filter selection.  These defines should NOT be
- * changed.
- */
-#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
-#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
-#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
-#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
-
-#ifdef PNG_WRITE_SUPPORTED
-/* Set the library compression level.  Currently, valid values range from
- * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
- * (0 - no compression, 9 - "maximal" compression).  Note that tests have
- * shown that zlib compression levels 3-6 usually perform as well as level 9
- * for PNG images, and do considerably fewer caclulations.  In the future,
- * these values may not correspond directly to the zlib compression levels.
- */
-PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr,
-    int level));
-
-PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr,
-    int mem_level));
-
-PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr,
-    int strategy));
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr,
-    int window_bits));
-
-PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr,
-    int method));
-#endif
-
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-/* Also set zlib parameters for compressing non-IDAT chunks */
-PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr,
-    int level));
-
-PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr,
-    int mem_level));
-
-PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr,
-    int strategy));
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-PNG_EXPORT(225, void, png_set_text_compression_window_bits,
-    (png_structrp png_ptr, int window_bits));
-
-PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr,
-    int method));
-#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */
-
-/* These next functions are called for input/output, memory, and error
- * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
- * and call standard C I/O routines such as fread(), fwrite(), and
- * fprintf().  These functions can be made to use other I/O routines
- * at run time for those applications that need to handle I/O in a
- * different manner by calling png_set_???_fn().  See libpng-manual.txt for
- * more information.
- */
-
-#ifdef PNG_STDIO_SUPPORTED
-/* Initialize the input/output for the PNG file to the default functions. */
-PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp));
-#endif
-
-/* Replace the (error and abort), and warning functions with user
- * supplied functions.  If no messages are to be printed you must still
- * write and use replacement functions. The replacement error_fn should
- * still do a longjmp to the last setjmp location if you are using this
- * method of error handling.  If error_fn or warning_fn is NULL, the
- * default function will be used.
- */
-
-PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr,
-    png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
-
-/* Return the user pointer associated with the error functions */
-PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr));
-
-/* Replace the default data output functions with a user supplied one(s).
- * If buffered output is not used, then output_flush_fn can be set to NULL.
- * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
- * output_flush_fn will be ignored (and thus can be NULL).
- * It is probably a mistake to use NULL for output_flush_fn if
- * write_data_fn is not also NULL unless you have built libpng with
- * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's
- * default flush function, which uses the standard *FILE structure, will
- * be used.
- */
-PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
-
-/* Replace the default data input function with a user supplied one. */
-PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr read_data_fn));
-
-/* Return the user pointer associated with the I/O functions */
-PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr));
-
-PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr,
-    png_read_status_ptr read_row_fn));
-
-PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr,
-    png_write_status_ptr write_row_fn));
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* Replace the default memory allocation functions with user supplied one(s). */
-PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
-/* Return the user pointer associated with the memory functions */
-PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr,
-    png_user_transform_ptr read_user_transform_fn));
-#endif
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr,
-    png_user_transform_ptr write_user_transform_fn));
-#endif
-
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr,
-    png_voidp user_transform_ptr, int user_transform_depth,
-    int user_transform_channels));
-/* Return the user pointer associated with the user transform functions */
-PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr,
-    (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED
-/* Return information about the row currently being processed.  Note that these
- * APIs do not fail but will return unexpected results if called outside a user
- * transform callback.  Also note that when transforming an interlaced image the
- * row number is the row number within the sub-image of the interlace pass, so
- * the value will increase to the height of the sub-image (not the full image)
- * then reset to 0 for the next pass.
- *
- * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
- * find the output pixel (x,y) given an interlaced sub-image pixel
- * (row,col,pass).  (See below for these macros.)
- */
-PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp));
-PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp));
-#endif
-
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-/* This callback is called only for *unknown* chunks.  If
- * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known
- * chunks to be treated as unknown, however in this case the callback must do
- * any processing required by the chunk (e.g. by calling the appropriate
- * png_set_ APIs.)
- *
- * There is no write support - on write, by default, all the chunks in the
- * 'unknown' list are written in the specified position.
- *
- * The integer return from the callback function is interpreted thus:
- *
- * negative: An error occured, png_chunk_error will be called.
- *     zero: The chunk was not handled, the chunk will be saved. A critical
- *           chunk will cause an error at this point unless it is to be saved.
- * positive: The chunk was handled, libpng will ignore/discard it.
- *
- * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about
- * how this behavior will change in libpng 1.7
- */
-PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr,
-    png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr));
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-/* Sets the function callbacks for the push reader, and a pointer to a
- * user-defined structure available to the callback functions.
- */
-PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr,
-    png_voidp progressive_ptr, png_progressive_info_ptr info_fn,
-    png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn));
-
-/* Returns the user pointer associated with the push read functions */
-PNG_EXPORT(91, png_voidp, png_get_progressive_ptr,
-    (png_const_structrp png_ptr));
-
-/* Function to be called when data becomes available */
-PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr,
-    png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size));
-
-/* A function which may be called *only* within png_process_data to stop the
- * processing of any more data.  The function returns the number of bytes
- * remaining, excluding any that libpng has cached internally.  A subsequent
- * call to png_process_data must supply these bytes again.  If the argument
- * 'save' is set to true the routine will first save all the pending data and
- * will always return 0.
- */
-PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save));
-
-/* A function which may be called *only* outside (after) a call to
- * png_process_data.  It returns the number of bytes of data to skip in the
- * input.  Normally it will return 0, but if it returns a non-zero value the
- * application must skip than number of bytes of input data and pass the
- * following data to the next call to png_process_data.
- */
-PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp));
-
-/* Function that combines rows.  'new_row' is a flag that should come from
- * the callback and be non-NULL if anything needs to be done; the library
- * stores its own version of the new data internally and ignores the passed
- * in value.
- */
-PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr,
-    png_bytep old_row, png_const_bytep new_row));
-#endif /* PROGRESSIVE_READ */
-
-PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-/* Added at libpng version 1.4.0 */
-PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-
-/* Added at libpng version 1.2.4 */
-PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED);
-
-/* Frees a pointer allocated by png_malloc() */
-PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr));
-
-/* Free data that was allocated internally */
-PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 free_me, int num));
-
-/* Reassign responsibility for freeing existing data, whether allocated
- * by libpng or by the application; this works on the png_info structure passed
- * in, it does not change the state for other png_info structures.
- *
- * It is unlikely that this function works correctly as of 1.6.0 and using it
- * may result either in memory leaks or double free of allocated data.
- */
-PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int freer, png_uint_32 mask));
-
-/* Assignments for png_data_freer */
-#define PNG_DESTROY_WILL_FREE_DATA 1
-#define PNG_SET_WILL_FREE_DATA 1
-#define PNG_USER_WILL_FREE_DATA 2
-/* Flags for png_ptr->free_me and info_ptr->free_me */
-#define PNG_FREE_HIST 0x0008
-#define PNG_FREE_ICCP 0x0010
-#define PNG_FREE_SPLT 0x0020
-#define PNG_FREE_ROWS 0x0040
-#define PNG_FREE_PCAL 0x0080
-#define PNG_FREE_SCAL 0x0100
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-#  define PNG_FREE_UNKN 0x0200
-#endif
-/*      PNG_FREE_LIST 0x0400    removed in 1.6.0 because it is ignored */
-#define PNG_FREE_PLTE 0x1000
-#define PNG_FREE_TRNS 0x2000
-#define PNG_FREE_TEXT 0x4000
-#define PNG_FREE_ALL  0x7fff
-#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
-
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr,
-    png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED);
-PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr,
-    png_voidp ptr), PNG_DEPRECATED);
-#endif
-
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-/* Fatal error in PNG image of libpng - can't continue */
-PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr,
-    png_const_charp error_message), PNG_NORETURN);
-
-/* The same, but the chunk name is prepended to the error string. */
-PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr,
-    png_const_charp error_message), PNG_NORETURN);
-
-#else
-/* Fatal error in PNG image of libpng - can't continue */
-PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN);
-#  define png_error(s1,s2) png_err(s1)
-#  define png_chunk_error(s1,s2) png_err(s1)
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* Non-fatal error in libpng.  Can continue, but may have a problem. */
-PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-
-/* Non-fatal error in libpng, chunk name is prepended to message. */
-PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-#else
-#  define png_warning(s1,s2) ((void)(s1))
-#  define png_chunk_warning(s1,s2) ((void)(s1))
-#endif
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-/* Benign error in libpng.  Can continue, but may have a problem.
- * User can choose whether to handle as a fatal error or as a warning. */
-PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-
-#ifdef PNG_READ_SUPPORTED
-/* Same, chunk name is prepended to message (only during read) */
-PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr,
-    png_const_charp warning_message));
-#endif
-
-PNG_EXPORT(109, void, png_set_benign_errors,
-    (png_structrp png_ptr, int allowed));
-#else
-#  ifdef PNG_ALLOW_BENIGN_ERRORS
-#    define png_benign_error png_warning
-#    define png_chunk_benign_error png_chunk_warning
-#  else
-#    define png_benign_error png_error
-#    define png_chunk_benign_error png_chunk_error
-#  endif
-#endif
-
-/* The png_set_<chunk> functions are for storing values in the png_info_struct.
- * Similarly, the png_get_<chunk> calls are used to read values from the
- * png_info_struct, either storing the parameters in the passed variables, or
- * setting pointers into the png_info_struct where the data is stored.  The
- * png_get_<chunk> functions return a non-zero value if the data was available
- * in info_ptr, or return zero and do not change any of the parameters if the
- * data was not available.
- *
- * These functions should be used instead of directly accessing png_info
- * to avoid problems with future changes in the size and internal layout of
- * png_info_struct.
- */
-/* Returns "flag" if chunk data is valid in info_ptr. */
-PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 flag));
-
-/* Returns number of bytes needed to hold a transformed row. */
-PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-/* Returns row_pointers, which is an array of pointers to scanlines that was
- * returned from png_read_png().
- */
-PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Set row_pointers, which is an array of pointers to scanlines for use
- * by png_write_png().
- */
-PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_bytepp row_pointers));
-#endif
-
-/* Returns number of color channels in image. */
-PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* Returns image width in pixels. */
-PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image height in pixels. */
-PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image bit_depth. */
-PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image color_type. */
-PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image filter_type. */
-PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image interlace_type. */
-PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image compression_type. */
-PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-
-/* Returns image resolution in pixels per meter, from pHYs chunk data. */
-PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
-PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-
-/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
-PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(128, png_int_32, png_get_x_offset_microns,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-PNG_EXPORT(129, png_int_32, png_get_y_offset_microns,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-#endif /* EASY_ACCESS */
-
-#ifdef PNG_READ_SUPPORTED
-/* Returns pointer to signature string read from PNG header */
-PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr));
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_color_16p *background));
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_color_16p background));
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x,
-    double *red_y, double *green_x, double *green_y, double *blue_x,
-    double *blue_y))
-PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z,
-    double *green_X, double *green_Y, double *green_Z, double *blue_X,
-    double *blue_Y, double *blue_Z))
-PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_white_x, png_fixed_point *int_white_y,
-    png_fixed_point *int_red_x, png_fixed_point *int_red_y,
-    png_fixed_point *int_green_x, png_fixed_point *int_green_y,
-    png_fixed_point *int_blue_x, png_fixed_point *int_blue_y))
-PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
-    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
-    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
-    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
-    png_fixed_point *int_blue_Z))
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr,
-    png_inforp info_ptr,
-    double white_x, double white_y, double red_x, double red_y, double green_x,
-    double green_y, double blue_x, double blue_y))
-PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr,
-    png_inforp info_ptr, double red_X, double red_Y, double red_Z,
-    double green_X, double green_Y, double green_Z, double blue_X,
-    double blue_Y, double blue_Z))
-PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_white_x,
-    png_fixed_point int_white_y, png_fixed_point int_red_x,
-    png_fixed_point int_red_y, png_fixed_point int_green_x,
-    png_fixed_point int_green_y, png_fixed_point int_blue_x,
-    png_fixed_point int_blue_y))
-PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y,
-    png_fixed_point int_red_Z, png_fixed_point int_green_X,
-    png_fixed_point int_green_Y, png_fixed_point int_green_Z,
-    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,
-    png_fixed_point int_blue_Z))
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, double *file_gamma))
-PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_file_gamma))
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr,
-    png_inforp info_ptr, double file_gamma))
-PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_fixed_point int_file_gamma))
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_16p *hist));
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_uint_16p hist));
-#endif
-
-PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height,
-    int *bit_depth, int *color_type, int *interlace_method,
-    int *compression_method, int *filter_method));
-
-PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_method, int compression_method,
-    int filter_method));
-
-#ifdef PNG_oFFs_SUPPORTED
-PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr,
-   png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
-   int *unit_type));
-#endif
-
-#ifdef PNG_oFFs_SUPPORTED
-PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y,
-    int unit_type));
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_charp *purpose, png_int_32 *X0,
-    png_int_32 *X1, int *type, int *nparams, png_charp *units,
-    png_charpp *params));
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1,
-    int type, int nparams, png_const_charp units, png_charpp params));
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
-    int *unit_type));
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
-#endif
-
-PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr,
-   png_inforp info_ptr, png_colorp *palette, int *num_palette));
-
-PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr,
-    png_inforp info_ptr, png_const_colorp palette, int num_palette));
-
-#ifdef PNG_sBIT_SUPPORTED
-PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_color_8p *sig_bit));
-#endif
-
-#ifdef PNG_sBIT_SUPPORTED
-PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_color_8p sig_bit));
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, int *file_srgb_intent));
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int srgb_intent));
-PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int srgb_intent));
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_charpp name, int *compression_type,
-    png_bytepp profile, png_uint_32 *proflen));
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_charp name, int compression_type,
-    png_const_bytep profile, png_uint_32 proflen));
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_sPLT_tpp entries));
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_sPLT_tp entries, int nentries));
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-/* png_get_text also returns the number of text chunks in *num_text */
-PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_textp *text_ptr, int *num_text));
-#endif
-
-/* Note while png_set_text() will accept a structure whose text,
- * language, and  translated keywords are NULL pointers, the structure
- * returned by png_get_text will always contain regular
- * zero-terminated C strings.  They might be empty strings but
- * they will never be NULL pointers.
- */
-
-#ifdef PNG_TEXT_SUPPORTED
-PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_textp text_ptr, int num_text));
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_timep *mod_time));
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_timep mod_time));
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans,
-    png_color_16p *trans_color));
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr,
-    png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans,
-    png_const_color_16p trans_color));
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, int *unit, double *width, double *height))
-#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
-   defined(PNG_FLOATING_POINT_SUPPORTED)
-/* NOTE: this API is currently implemented using floating point arithmetic,
- * consequently it can only be used on systems with floating point support.
- * In any case the range of values supported by png_fixed_point is small and it
- * is highly recommended that png_get_sCAL_s be used instead.
- */
-PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit,
-    png_fixed_point *width, png_fixed_point *height))
-#endif
-PNG_EXPORT(169, png_uint_32, png_get_sCAL_s,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit,
-    png_charpp swidth, png_charpp sheight));
-
-PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int unit, double width, double height))
-PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr,
-   png_inforp info_ptr, int unit, png_fixed_point width,
-   png_fixed_point height))
-PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int unit,
-    png_const_charp swidth, png_const_charp sheight));
-#endif /* sCAL */
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-/* Provide the default handling for all unknown chunks or, optionally, for
- * specific unknown chunks.
- *
- * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was
- * ignored and the default was used, the per-chunk setting only had an effect on
- * write.  If you wish to have chunk-specific handling on read in code that must
- * work on earlier versions you must use a user chunk callback to specify the
- * desired handling (keep or discard.)
- *
- * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below.  The
- * parameter is interpreted as follows:
- *
- * READ:
- *    PNG_HANDLE_CHUNK_AS_DEFAULT:
- *       Known chunks: do normal libpng processing, do not keep the chunk (but
- *          see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
- *       Unknown chunks: for a specific chunk use the global default, when used
- *          as the default discard the chunk data.
- *    PNG_HANDLE_CHUNK_NEVER:
- *       Discard the chunk data.
- *    PNG_HANDLE_CHUNK_IF_SAFE:
- *       Keep the chunk data if the chunk is not critical else raise a chunk
- *       error.
- *    PNG_HANDLE_CHUNK_ALWAYS:
- *       Keep the chunk data.
- *
- * If the chunk data is saved it can be retrieved using png_get_unknown_chunks,
- * below.  Notice that specifying "AS_DEFAULT" as a global default is equivalent
- * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks
- * it simply resets the behavior to the libpng default.
- *
- * INTERACTION WTIH USER CHUNK CALLBACKS:
- * The per-chunk handling is always used when there is a png_user_chunk_ptr
- * callback and the callback returns 0; the chunk is then always stored *unless*
- * it is critical and the per-chunk setting is other than ALWAYS.  Notice that
- * the global default is *not* used in this case.  (In effect the per-chunk
- * value is incremented to at least IF_SAFE.)
- *
- * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and
- * per-chunk defaults will be honored.  If you want to preserve the current
- * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE
- * as the default - if you don't do this libpng 1.6 will issue a warning.
- *
- * If you want unhandled unknown chunks to be discarded in libpng 1.6 and
- * earlier simply return '1' (handled).
- *
- * PNG_HANDLE_AS_UNKNOWN_SUPPORTED:
- *    If this is *not* set known chunks will always be handled by libpng and
- *    will never be stored in the unknown chunk list.  Known chunks listed to
- *    png_set_keep_unknown_chunks will have no effect.  If it is set then known
- *    chunks listed with a keep other than AS_DEFAULT will *never* be processed
- *    by libpng, in addition critical chunks must either be processed by the
- *    callback or saved.
- *
- *    The IHDR and IEND chunks must not be listed.  Because this turns off the
- *    default handling for chunks that would otherwise be recognized the
- *    behavior of libpng transformations may well become incorrect!
- *
- * WRITE:
- *    When writing chunks the options only apply to the chunks specified by
- *    png_set_unknown_chunks (below), libpng will *always* write known chunks
- *    required by png_set_ calls and will always write the core critical chunks
- *    (as required for PLTE).
- *
- *    Each chunk in the png_set_unknown_chunks list is looked up in the
- *    png_set_keep_unknown_chunks list to find the keep setting, this is then
- *    interpreted as follows:
- *
- *    PNG_HANDLE_CHUNK_AS_DEFAULT:
- *       Write safe-to-copy chunks and write other chunks if the global
- *       default is set to _ALWAYS, otherwise don't write this chunk.
- *    PNG_HANDLE_CHUNK_NEVER:
- *       Do not write the chunk.
- *    PNG_HANDLE_CHUNK_IF_SAFE:
- *       Write the chunk if it is safe-to-copy, otherwise do not write it.
- *    PNG_HANDLE_CHUNK_ALWAYS:
- *       Write the chunk.
- *
- * Note that the default behavior is effectively the opposite of the read case -
- * in read unknown chunks are not stored by default, in write they are written
- * by default.  Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different
- * - on write the safe-to-copy bit is checked, on read the critical bit is
- * checked and on read if the chunk is critical an error will be raised.
- *
- * num_chunks:
- * ===========
- *    If num_chunks is positive, then the "keep" parameter specifies the manner
- *    for handling only those chunks appearing in the chunk_list array,
- *    otherwise the chunk list array is ignored.
- *
- *    If num_chunks is 0 the "keep" parameter specifies the default behavior for
- *    unknown chunks, as described above.
- *
- *    If num_chunks is negative, then the "keep" parameter specifies the manner
- *    for handling all unknown chunks plus all chunks recognized by libpng
- *    except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to
- *    be processed by libpng.
- */
-PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr,
-    int keep, png_const_bytep chunk_list, int num_chunks));
-
-/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned;
- * the result is therefore true (non-zero) if special handling is required,
- * false for the default handling.
- */
-PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr,
-    png_const_bytep chunk_name));
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_unknown_chunkp unknowns,
-    int num_unknowns));
-   /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added
-    * unknowns to the location currently stored in the png_struct.  This is
-    * invariably the wrong value on write.  To fix this call the following API
-    * for each chunk in the list with the correct location.  If you know your
-    * code won't be compiled on earlier versions you can rely on
-    * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing
-    * the correct thing.
-    */
-
-PNG_EXPORT(175, void, png_set_unknown_chunk_location,
-    (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location));
-
-PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr,
-    png_inforp info_ptr, png_unknown_chunkpp entries));
-#endif
-
-/* Png_free_data() will turn off the "valid" flag for anything it frees.
- * If you need to turn it off for a chunk that your application has freed,
- * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
- */
-PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr,
-    png_inforp info_ptr, int mask));
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-/* The "params" pointer is currently not used and is for future expansion. */
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, png_voidp params));
-#endif
-#ifdef PNG_WRITE_SUPPORTED
-PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, png_voidp params));
-#endif
-#endif
-
-PNG_EXPORT(180, png_const_charp, png_get_copyright,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(181, png_const_charp, png_get_header_ver,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(182, png_const_charp, png_get_header_version,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(183, png_const_charp, png_get_libpng_ver,
-    (png_const_structrp png_ptr));
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr,
-    png_uint_32 mng_features_permitted));
-#endif
-
-/* For use in png_set_keep_unknown, added to version 1.2.6 */
-#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
-#define PNG_HANDLE_CHUNK_NEVER        1
-#define PNG_HANDLE_CHUNK_IF_SAFE      2
-#define PNG_HANDLE_CHUNK_ALWAYS       3
-#define PNG_HANDLE_CHUNK_LAST         4
-
-/* Strip the prepended error numbers ("#nnn ") from error and warning
- * messages before passing them to the error or warning handler.
- */
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr,
-    png_uint_32 strip_mode));
-#endif
-
-/* Added in libpng-1.2.6 */
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr,
-    png_uint_32 user_width_max, png_uint_32 user_height_max));
-PNG_EXPORT(187, png_uint_32, png_get_user_width_max,
-    (png_const_structrp png_ptr));
-PNG_EXPORT(188, png_uint_32, png_get_user_height_max,
-    (png_const_structrp png_ptr));
-/* Added in libpng-1.4.0 */
-PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr,
-    png_uint_32 user_chunk_cache_max));
-PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max,
-    (png_const_structrp png_ptr));
-/* Added in libpng-1.4.1 */
-PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr,
-    png_alloc_size_t user_chunk_cache_max));
-PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max,
-    (png_const_structrp png_ptr));
-#endif
-
-#if defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr));
-
-PNG_FP_EXPORT(196, float, png_get_x_offset_inches,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
-PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#endif
-
-PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr))
-#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
-PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed,
-    (png_const_structrp png_ptr, png_const_inforp info_ptr))
-#endif
-
-#  ifdef PNG_pHYs_SUPPORTED
-PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr,
-    png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
-    int *unit_type));
-#  endif /* pHYs */
-#endif  /* INCH_CONVERSIONS */
-
-/* Added in libpng-1.4.0 */
-#ifdef PNG_IO_STATE_SUPPORTED
-PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr));
-
-/* Removed from libpng 1.6; use png_get_io_chunk_type. */
-PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr),
-    PNG_DEPRECATED)
-
-PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
-    (png_const_structrp png_ptr));
-
-/* The flags returned by png_get_io_state() are the following: */
-#  define PNG_IO_NONE        0x0000   /* no I/O at this moment */
-#  define PNG_IO_READING     0x0001   /* currently reading */
-#  define PNG_IO_WRITING     0x0002   /* currently writing */
-#  define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
-#  define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
-#  define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
-#  define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
-#  define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
-#  define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
-#endif /* IO_STATE */
-
-/* Interlace support.  The following macros are always defined so that if
- * libpng interlace handling is turned off the macros may be used to handle
- * interlaced images within the application.
- */
-#define PNG_INTERLACE_ADAM7_PASSES 7
-
-/* Two macros to return the first row and first column of the original,
- * full, image which appears in a given pass.  'pass' is in the range 0
- * to 6 and the result is in the range 0 to 7.
- */
-#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7)
-#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7)
-
-/* A macro to return the offset between pixels in the output row for a pair of
- * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that
- * follows.  Note that ROW_OFFSET is the offset from one row to the next whereas
- * COL_OFFSET is from one column to the next, within a row.
- */
-#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8)
-#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1))
-
-/* Two macros to help evaluate the number of rows or columns in each
- * pass.  This is expressed as a shift - effectively log2 of the number or
- * rows or columns in each 8x8 tile of the original image.
- */
-#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3)
-#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3)
-
-/* Hence two macros to determine the number of rows or columns in a given
- * pass of an image given its height or width.  In fact these macros may
- * return non-zero even though the sub-image is empty, because the other
- * dimension may be empty for a small image.
- */
-#define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\
-   -1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass))
-#define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\
-   -1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass))
-
-/* For the reader row callbacks (both progressive and sequential) it is
- * necessary to find the row in the output image given a row in an interlaced
- * image, so two more macros:
- */
-#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \
-   (((y_in)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass))
-#define PNG_COL_FROM_PASS_COL(x_in, pass) \
-   (((x_in)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass))
-
-/* Two macros which return a boolean (0 or 1) saying whether the given row
- * or column is in a particular pass.  These use a common utility macro that
- * returns a mask for a given pass - the offset 'off' selects the row or
- * column version.  The mask has the appropriate bit set for each column in
- * the tile.
- */
-#define PNG_PASS_MASK(pass,off) ( \
-   ((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \
-   ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0))
-
-#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \
-   ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1)
-#define PNG_COL_IN_INTERLACE_PASS(x, pass) \
-   ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1)
-
-#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
-/* With these routines we avoid an integer divide, which will be slower on
- * most machines.  However, it does take more operations than the corresponding
- * divide method, so it may be slower on a few RISC systems.  There are two
- * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
- *
- * Note that the rounding factors are NOT supposed to be the same!  128 and
- * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
- * standard method.
- *
- * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
- */
-
- /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
-
-#  define png_composite(composite, fg, alpha, bg)         \
-     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
-           * (png_uint_16)(alpha)                         \
-           + (png_uint_16)(bg)*(png_uint_16)(255          \
-           - (png_uint_16)(alpha)) + 128);                \
-       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
-
-#  define png_composite_16(composite, fg, alpha, bg)       \
-     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg)  \
-           * (png_uint_32)(alpha)                          \
-           + (png_uint_32)(bg)*(65535                      \
-           - (png_uint_32)(alpha)) + 32768);               \
-       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
-
-#else  /* Standard method using integer division */
-
-#  define png_composite(composite, fg, alpha, bg)                          \
-     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +  \
-     (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
-     127) / 255)
-
-#  define png_composite_16(composite, fg, alpha, bg)                         \
-     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
-     (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) +         \
-     32767) / 65535)
-#endif /* READ_COMPOSITE_NODIV */
-
-#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf));
-PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf));
-PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf));
-#endif
-
-PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr,
-    png_const_bytep buf));
-/* No png_get_int_16 -- may be added if there's a real need for it. */
-
-/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i));
-#endif
-#ifdef PNG_SAVE_INT_32_SUPPORTED
-PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i));
-#endif
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
-/* No png_save_int_16 -- may be added if there's a real need for it. */
-#endif
-
-#ifdef PNG_USE_READ_MACROS
-/* Inline macros to do direct reads of bytes from the input buffer.
- * The png_get_int_32() routine assumes we are using two's complement
- * format for negative values, which is almost certainly true.
- */
-#  define PNG_get_uint_32(buf) \
-     (((png_uint_32)(*(buf)) << 24) + \
-      ((png_uint_32)(*((buf) + 1)) << 16) + \
-      ((png_uint_32)(*((buf) + 2)) << 8) + \
-      ((png_uint_32)(*((buf) + 3))))
-
-   /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
-    * function) incorrectly returned a value of type png_uint_32.
-    */
-#  define PNG_get_uint_16(buf) \
-     ((png_uint_16) \
-      (((unsigned int)(*(buf)) << 8) + \
-       ((unsigned int)(*((buf) + 1)))))
-
-#  define PNG_get_int_32(buf) \
-     ((png_int_32)((*(buf) & 0x80) \
-      ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \
-      : (png_int_32)png_get_uint_32(buf)))
-
-   /* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h,
-    * but defining a macro name prefixed with PNG_PREFIX.
-    */
-#  ifndef PNG_PREFIX
-#     define png_get_uint_32(buf) PNG_get_uint_32(buf)
-#     define png_get_uint_16(buf) PNG_get_uint_16(buf)
-#     define png_get_int_32(buf)  PNG_get_int_32(buf)
-#  endif
-#else
-#  ifdef PNG_PREFIX
-      /* No macros; revert to the (redefined) function */
-#     define PNG_get_uint_32 (png_get_uint_32)
-#     define PNG_get_uint_16 (png_get_uint_16)
-#     define PNG_get_int_32  (png_get_int_32)
-#  endif
-#endif
-
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \
-    defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-/*******************************************************************************
- *  SIMPLIFIED API
- *******************************************************************************
- *
- * Please read the documentation in libpng-manual.txt (TODO: write said
- * documentation) if you don't understand what follows.
- *
- * The simplified API hides the details of both libpng and the PNG file format
- * itself.  It allows PNG files to be read into a very limited number of
- * in-memory bitmap formats or to be written from the same formats.  If these
- * formats do not accomodate your needs then you can, and should, use the more
- * sophisticated APIs above - these support a wide variety of in-memory formats
- * and a wide variety of sophisticated transformations to those formats as well
- * as a wide variety of APIs to manipulate ancillary information.
- *
- * To read a PNG file using the simplified API:
- *
- * 1) Declare a 'png_image' structure (see below) on the stack and set the
- *    version field to PNG_IMAGE_VERSION.
- * 2) Call the appropriate png_image_begin_read... function.
- * 3) Set the png_image 'format' member to the required sample format.
- * 4) Allocate a buffer for the image and, if required, the color-map.
- * 5) Call png_image_finish_read to read the image and, if required, the
- *    color-map into your buffers.
- *
- * There are no restrictions on the format of the PNG input itself; all valid
- * color types, bit depths, and interlace methods are acceptable, and the
- * input image is transformed as necessary to the requested in-memory format
- * during the png_image_finish_read() step.  The only caveat is that if you
- * request a color-mapped image from a PNG that is full-color or makes
- * complex use of an alpha channel the transformation is extremely lossy and the
- * result may look terrible.
- *
- * To write a PNG file using the simplified API:
- *
- * 1) Declare a 'png_image' structure on the stack and memset() it to all zero.
- * 2) Initialize the members of the structure that describe the image, setting
- *    the 'format' member to the format of the image samples.
- * 3) Call the appropriate png_image_write... function with a pointer to the
- *    image and, if necessary, the color-map to write the PNG data.
- *
- * png_image is a structure that describes the in-memory format of an image
- * when it is being read or defines the in-memory format of an image that you
- * need to write:
- */
-#define PNG_IMAGE_VERSION 1
-
-typedef struct png_control *png_controlp;
-typedef struct
-{
-   png_controlp opaque;    /* Initialize to NULL, free with png_image_free */
-   png_uint_32  version;   /* Set to PNG_IMAGE_VERSION */
-   png_uint_32  width;     /* Image width in pixels (columns) */
-   png_uint_32  height;    /* Image height in pixels (rows) */
-   png_uint_32  format;    /* Image format as defined below */
-   png_uint_32  flags;     /* A bit mask containing informational flags */
-   png_uint_32  colormap_entries;
-                           /* Number of entries in the color-map */
-
-   /* In the event of an error or warning the following field will be set to a
-    * non-zero value and the 'message' field will contain a '\0' terminated
-    * string with the libpng error or warning message.  If both warnings and
-    * an error were encountered, only the error is recorded.  If there
-    * are multiple warnings, only the first one is recorded.
-    *
-    * The upper 30 bits of this value are reserved, the low two bits contain
-    * a value as follows:
-    */
-#  define PNG_IMAGE_WARNING 1
-#  define PNG_IMAGE_ERROR 2
-   /*
-    * The result is a two-bit code such that a value more than 1 indicates
-    * a failure in the API just called:
-    *
-    *    0 - no warning or error
-    *    1 - warning
-    *    2 - error
-    *    3 - error preceded by warning
-    */
-#  define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1)
-
-   png_uint_32  warning_or_error;
-
-   char         message[64];
-} png_image, *png_imagep;
-
-/* The samples of the image have one to four channels whose components have
- * original values in the range 0 to 1.0:
- *
- * 1: A single gray or luminance channel (G).
- * 2: A gray/luminance channel and an alpha channel (GA).
- * 3: Three red, green, blue color channels (RGB).
- * 4: Three color channels and an alpha channel (RGBA).
- *
- * The components are encoded in one of two ways:
- *
- * a) As a small integer, value 0..255, contained in a single byte.  For the
- * alpha channel the original value is simply value/255.  For the color or
- * luminance channels the value is encoded according to the sRGB specification
- * and matches the 8-bit format expected by typical display devices.
- *
- * The color/gray channels are not scaled (pre-multiplied) by the alpha
- * channel and are suitable for passing to color management software.
- *
- * b) As a value in the range 0..65535, contained in a 2-byte integer.  All
- * channels can be converted to the original value by dividing by 65535; all
- * channels are linear.  Color channels use the RGB encoding (RGB end-points) of
- * the sRGB specification.  This encoding is identified by the
- * PNG_FORMAT_FLAG_LINEAR flag below.
- *
- * When the simplified API needs to convert between sRGB and linear colorspaces,
- * the actual sRGB transfer curve defined in the sRGB specification (see the
- * article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
- * approximation used elsewhere in libpng.
- *
- * When an alpha channel is present it is expected to denote pixel coverage
- * of the color or luminance channels and is returned as an associated alpha
- * channel: the color/gray channels are scaled (pre-multiplied) by the alpha
- * value.
- *
- * The samples are either contained directly in the image data, between 1 and 8
- * bytes per pixel according to the encoding, or are held in a color-map indexed
- * by bytes in the image data.  In the case of a color-map the color-map entries
- * are individual samples, encoded as above, and the image data has one byte per
- * pixel to select the relevant sample from the color-map.
- */
-
-/* PNG_FORMAT_*
- *
- * #defines to be used in png_image::format.  Each #define identifies a
- * particular layout of sample data and, if present, alpha values.  There are
- * separate defines for each of the two component encodings.
- *
- * A format is built up using single bit flag values.  All combinations are
- * valid.  Formats can be built up from the flag values or you can use one of
- * the predefined values below.  When testing formats always use the FORMAT_FLAG
- * macros to test for individual features - future versions of the library may
- * add new flags.
- *
- * When reading or writing color-mapped images the format should be set to the
- * format of the entries in the color-map then png_image_{read,write}_colormap
- * called to read or write the color-map and set the format correctly for the
- * image data.  Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
- *
- * NOTE: libpng can be built with particular features disabled, if you see
- * compiler errors because the definition of one of the following flags has been
- * compiled out it is because libpng does not have the required support.  It is
- * possible, however, for the libpng configuration to enable the format on just
- * read or just write; in that case you may see an error at run time.  You can
- * guard against this by checking for the definition of the appropriate
- * "_SUPPORTED" macro, one of:
- *
- *    PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
- */
-#define PNG_FORMAT_FLAG_ALPHA    0x01U /* format with an alpha channel */
-#define PNG_FORMAT_FLAG_COLOR    0x02U /* color format: otherwise grayscale */
-#define PNG_FORMAT_FLAG_LINEAR   0x04U /* 2 byte channels else 1 byte */
-#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */
-
-#ifdef PNG_FORMAT_BGR_SUPPORTED
-#  define PNG_FORMAT_FLAG_BGR    0x10U /* BGR colors, else order is RGB */
-#endif
-
-#ifdef PNG_FORMAT_AFIRST_SUPPORTED
-#  define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */
-#endif
-
-/* Commonly used formats have predefined macros.
- *
- * First the single byte (sRGB) formats:
- */
-#define PNG_FORMAT_GRAY 0
-#define PNG_FORMAT_GA   PNG_FORMAT_FLAG_ALPHA
-#define PNG_FORMAT_AG   (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
-#define PNG_FORMAT_RGB  PNG_FORMAT_FLAG_COLOR
-#define PNG_FORMAT_BGR  (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
-#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
-#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
-
-/* Then the linear 2-byte formats.  When naming these "Y" is used to
- * indicate a luminance (gray) channel.
- */
-#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
-#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
-#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
-#define PNG_FORMAT_LINEAR_RGB_ALPHA \
-   (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA)
-
-/* With color-mapped formats the image data is one byte for each pixel, the byte
- * is an index into the color-map which is formatted as above.  To obtain a
- * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
- * to one of the above definitions, or you can use one of the definitions below.
- */
-#define PNG_FORMAT_RGB_COLORMAP  (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_BGR_COLORMAP  (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP)
-#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP)
-
-/* PNG_IMAGE macros
- *
- * These are convenience macros to derive information from a png_image
- * structure.  The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
- * actual image sample values - either the entries in the color-map or the
- * pixels in the image.  The PNG_IMAGE_PIXEL_ macros return corresponding values
- * for the pixels and will always return 1 for color-mapped formats.  The
- * remaining macros return information about the rows in the image and the
- * complete image.
- *
- * NOTE: All the macros that take a png_image::format parameter are compile time
- * constants if the format parameter is, itself, a constant.  Therefore these
- * macros can be used in array declarations and case labels where required.
- * Similarly the macros are also pre-processor constants (sizeof is not used) so
- * they can be used in #if tests.
- *
- * First the information about the samples.
- */
-#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\
-   (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1)
-   /* Return the total number of channels in a given format: 1..4 */
-
-#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\
-   ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1)
-   /* Return the size in bytes of a single component of a pixel or color-map
-    * entry (as appropriate) in the image: 1 or 2.
-    */
-
-#define PNG_IMAGE_SAMPLE_SIZE(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt))
-   /* This is the size of the sample data for one sample.  If the image is
-    * color-mapped it is the size of one color-map entry (and image pixels are
-    * one byte in size), otherwise it is the size of one image pixel.
-    */
-
-#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
-   (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
-   /* The maximum size of the color-map required by the format expressed in a
-    * count of components.  This can be used to compile-time allocate a
-    * color-map:
-    *
-    * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
-    *
-    * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
-    *
-    * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
-    * information from one of the png_image_begin_read_ APIs and dynamically
-    * allocate the required memory.
-    */
-
-/* Corresponding information about the pixels */
-#define PNG_IMAGE_PIXEL_(test,fmt)\
-   (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt))
-
-#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\
-   PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt)
-   /* The number of separate channels (components) in a pixel; 1 for a
-    * color-mapped image.
-    */
-
-#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\
-   PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt)
-   /* The size, in bytes, of each component in a pixel; 1 for a color-mapped
-    * image.
-    */
-
-#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt)
-   /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */
-
-/* Information about the whole row, or whole image */
-#define PNG_IMAGE_ROW_STRIDE(image)\
-   (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width)
-   /* Return the total number of components in a single row of the image; this
-    * is the minimum 'row stride', the minimum count of components between each
-    * row.  For a color-mapped image this is the minimum number of bytes in a
-    * row.
-    */
-
-#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\
-   (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride))
-   /* Return the size, in bytes, of an image buffer given a png_image and a row
-    * stride - the number of components to leave space for in each row.
-    */
-
-#define PNG_IMAGE_SIZE(image)\
-   PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image))
-   /* Return the size, in bytes, of the image in memory given just a png_image;
-    * the row stride is the minimum stride required for the image.
-    */
-
-#define PNG_IMAGE_COLORMAP_SIZE(image)\
-   (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries)
-   /* Return the size, in bytes, of the color-map of this image.  If the image
-    * format is not a color-map format this will return a size sufficient for
-    * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if
-    * you don't want to allocate a color-map in this case.
-    */
-
-/* PNG_IMAGE_FLAG_*
- *
- * Flags containing additional information about the image are held in the
- * 'flags' field of png_image.
- */
-#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01
-   /* This indicates the the RGB values of the in-memory bitmap do not
-    * correspond to the red, green and blue end-points defined by sRGB.
-    */
-
-#define PNG_IMAGE_FLAG_FAST 0x02
-   /* On write emphasise speed over compression; the resultant PNG file will be
-    * larger but will be produced significantly faster, particular for large
-    * images.  Do not use this option for images which will be distributed, only
-    * used it when producing intermediate files that will be read back in
-    * repeatedly.  For a typical 24-bit image the option will double the read
-    * speed at the cost of increasing the image size by 25%, however for many
-    * more compressible images the PNG file can be 10 times larger with only a
-    * slight speed gain.
-    */
-
-#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04
-   /* On read if the image is a 16-bit per component image and there is no gAMA
-    * or sRGB chunk assume that the components are sRGB encoded.  Notice that
-    * images output by the simplified API always have gamma information; setting
-    * this flag only affects the interpretation of 16-bit images from an
-    * external source.  It is recommended that the application expose this flag
-    * to the user; the user can normally easily recognize the difference between
-    * linear and sRGB encoding.  This flag has no effect on write - the data
-    * passed to the write APIs must have the correct encoding (as defined
-    * above.)
-    *
-    * If the flag is not set (the default) input 16-bit per component data is
-    * assumed to be linear.
-    *
-    * NOTE: the flag can only be set after the png_image_begin_read_ call,
-    * because that call initializes the 'flags' field.
-    */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* READ APIs
- * ---------
- *
- * The png_image passed to the read APIs must have been initialized by setting
- * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.)
- */
-#ifdef PNG_STDIO_SUPPORTED
-PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image,
-   const char *file_name));
-   /* The named file is opened for read and the image header is filled in
-    * from the PNG header in the file.
-    */
-
-PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image,
-   FILE* file));
-   /* The PNG header is read from the stdio FILE object. */
-#endif /* STDIO */
-
-PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image,
-   png_const_voidp memory, png_size_t size));
-   /* The PNG header is read from the given memory buffer. */
-
-PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image,
-   png_const_colorp background, void *buffer, png_int_32 row_stride,
-   void *colormap));
-   /* Finish reading the image into the supplied buffer and clean up the
-    * png_image structure.
-    *
-    * row_stride is the step, in byte or 2-byte units as appropriate,
-    * between adjacent rows.  A positive stride indicates that the top-most row
-    * is first in the buffer - the normal top-down arrangement.  A negative
-    * stride indicates that the bottom-most row is first in the buffer.
-    *
-    * background need only be supplied if an alpha channel must be removed from
-    * a png_byte format and the removal is to be done by compositing on a solid
-    * color; otherwise it may be NULL and any composition will be done directly
-    * onto the buffer.  The value is an sRGB color to use for the background,
-    * for grayscale output the green channel is used.
-    *
-    * background must be supplied when an alpha channel must be removed from a
-    * single byte color-mapped output format, in other words if:
-    *
-    * 1) The original format from png_image_begin_read_from_* had
-    *    PNG_FORMAT_FLAG_ALPHA set.
-    * 2) The format set by the application does not.
-    * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and
-    *    PNG_FORMAT_FLAG_LINEAR *not* set.
-    *
-    * For linear output removing the alpha channel is always done by compositing
-    * on black and background is ignored.
-    *
-    * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set.  It must
-    * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE.
-    * image->colormap_entries will be updated to the actual number of entries
-    * written to the colormap; this may be less than the original value.
-    */
-
-PNG_EXPORT(238, void, png_image_free, (png_imagep image));
-   /* Free any data allocated by libpng in image->opaque, setting the pointer to
-    * NULL.  May be called at any time after the structure is initialized.
-    */
-#endif /* SIMPLIFIED_READ */
-
-#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-#ifdef PNG_STDIO_SUPPORTED
-/* WRITE APIS
- * ----------
- * For write you must initialize a png_image structure to describe the image to
- * be written.  To do this use memset to set the whole structure to 0 then
- * initialize fields describing your image.
- *
- * version: must be set to PNG_IMAGE_VERSION
- * opaque: must be initialized to NULL
- * width: image width in pixels
- * height: image height in rows
- * format: the format of the data (image and color-map) you wish to write
- * flags: set to 0 unless one of the defined flags applies; set
- *    PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB
- *    values do not correspond to the colors in sRGB.
- * colormap_entries: set to the number of entries in the color-map (0 to 256)
- */
-PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image,
-   const char *file, int convert_to_8bit, const void *buffer,
-   png_int_32 row_stride, const void *colormap));
-   /* Write the image to the named file. */
-
-PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
-   int convert_to_8_bit, const void *buffer, png_int_32 row_stride,
-   const void *colormap));
-   /* Write the image to the given (FILE*). */
-
-/* With both write APIs if image is in one of the linear formats with 16-bit
- * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG
- * gamma encoded according to the sRGB specification, otherwise a 16-bit linear
- * encoded PNG file is written.
- *
- * With color-mapped data formats the colormap parameter point to a color-map
- * with at least image->colormap_entries encoded in the specified format.  If
- * the format is linear the written PNG color-map will be converted to sRGB
- * regardless of the convert_to_8_bit flag.
- *
- * With all APIs row_stride is handled as in the read APIs - it is the spacing
- * from one row to the next in component sized units (1 or 2 bytes) and if
- * negative indicates a bottom-up row layout in the buffer.
- *
- * Note that the write API does not support interlacing or sub-8-bit pixels.
- */
-#endif /* STDIO */
-#endif /* SIMPLIFIED_WRITE */
-/*******************************************************************************
- *  END OF SIMPLIFIED API
- ******************************************************************************/
-#endif /* SIMPLIFIED_{READ|WRITE} */
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-PNG_EXPORT(242, void, png_set_check_for_invalid_index,
-    (png_structrp png_ptr, int allowed));
-#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
-PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
-    png_const_infop info_ptr));
-#  endif
-#endif /* CHECK_FOR_INVALID_INDEX */
-
-/*******************************************************************************
- *  IMPLEMENTATION OPTIONS
- *******************************************************************************
- *
- * Support for arbitrary implementation-specific optimizations.  The API allows
- * particular options to be turned on or off.  'Option' is the number of the
- * option and 'onoff' is 0 (off) or non-0 (on).  The value returned is given
- * by the PNG_OPTION_ defines below.
- *
- * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions,
- *           are detected at run time, however sometimes it may be impossible
- *           to do this in user mode, in which case it is necessary to discover
- *           the capabilities in an OS specific way.  Such capabilities are
- *           listed here when libpng has support for them and must be turned
- *           ON by the application if present.
- *
- * SOFTWARE: sometimes software optimizations actually result in performance
- *           decrease on some architectures or systems, or with some sets of
- *           PNG images.  'Software' options allow such optimizations to be
- *           selected at run time.
- */
-#ifdef PNG_SET_OPTION_SUPPORTED
-#ifdef PNG_ARM_NEON_API_SUPPORTED
-#  define PNG_ARM_NEON   0 /* HARDWARE: ARM Neon SIMD instructions supported */
-#endif
-#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */
-#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */
-#define PNG_OPTION_NEXT  6 /* Next option - numbers must be even */
-
-/* Return values: NOTE: there are four values and 'off' is *not* zero */
-#define PNG_OPTION_UNSET   0 /* Unset - defaults to off */
-#define PNG_OPTION_INVALID 1 /* Option number out of range */
-#define PNG_OPTION_OFF     2
-#define PNG_OPTION_ON      3
-
-PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
-   int onoff));
-#endif /* SET_OPTION */
-
-/*******************************************************************************
- *  END OF HARDWARE AND SOFTWARE OPTIONS
- ******************************************************************************/
-
-/* Maintainer: Put new public prototypes here ^, in libpng.3, in project
- * defs, and in scripts/symbols.def.
- */
-
-/* The last ordinal number (this is the *last* one already used; the next
- * one to use is one more than this.)
- */
-#ifdef PNG_EXPORT_LAST_ORDINAL
-  PNG_EXPORT_LAST_ORDINAL(244);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PNG_VERSION_INFO_ONLY */
-/* Do not put anything past this line */
-#endif /* PNG_H */
--- a/DoConfig/fltk/png/pngconf.h
+++ /dev/null
@@ -1,644 +1,0 @@
-
-/* pngconf.h - machine configurable file for libpng
- *
- * libpng version 1.6.16,December 22, 2014
- *
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- */
-
-/* Any machine specific code is near the front of this file, so if you
- * are configuring libpng for a machine, you may want to read the section
- * starting here down to where it starts to typedef png_color, png_text,
- * and png_info.
- */
-
-#ifndef PNGCONF_H
-#define PNGCONF_H
-
-/* To do: Do all of this in scripts/pnglibconf.dfa */
-#ifdef PNG_SAFE_LIMITS_SUPPORTED
-#  ifdef PNG_USER_WIDTH_MAX
-#    undef PNG_USER_WIDTH_MAX
-#    define PNG_USER_WIDTH_MAX 1000000L
-#  endif
-#  ifdef PNG_USER_HEIGHT_MAX
-#    undef PNG_USER_HEIGHT_MAX
-#    define PNG_USER_HEIGHT_MAX 1000000L
-#  endif
-#  ifdef PNG_USER_CHUNK_MALLOC_MAX
-#    undef PNG_USER_CHUNK_MALLOC_MAX
-#    define PNG_USER_CHUNK_MALLOC_MAX 4000000L
-#  endif
-#  ifdef PNG_USER_CHUNK_CACHE_MAX
-#    undef PNG_USER_CHUNK_CACHE_MAX
-#    define PNG_USER_CHUNK_CACHE_MAX 128
-#  endif
-#endif
-
-#ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */
-
-/* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C
- * compiler for correct compilation.  The following header files are required by
- * the standard.  If your compiler doesn't provide these header files, or they
- * do not match the standard, you will need to provide/improve them.
- */
-#include <limits.h>
-#include <stddef.h>
-
-/* Library header files.  These header files are all defined by ISOC90; libpng
- * expects conformant implementations, however, an ISOC90 conformant system need
- * not provide these header files if the functionality cannot be implemented.
- * In this case it will be necessary to disable the relevant parts of libpng in
- * the build of pnglibconf.h.
- *
- * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not
- * include this unnecessary header file.
- */
-
-#ifdef PNG_STDIO_SUPPORTED
-   /* Required for the definition of FILE: */
-#  include <stdio.h>
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-   /* Required for the definition of jmp_buf and the declaration of longjmp: */
-#  include <setjmp.h>
-#endif
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-   /* Required for struct tm: */
-#  include <time.h>
-#endif
-
-#endif /* PNG_BUILDING_SYMBOL_TABLE */
-
-/* Prior to 1.6.0 it was possible to turn off 'const' in declarations using
- * PNG_NO_CONST; this is no longer supported except for data declarations which
- * apparently still cause problems in 2011 on some compilers.
- */
-#define PNG_CONST const /* backward compatibility only */
-
-/* This controls optimization of the reading of 16 and 32 bit values
- * from PNG files.  It can be set on a per-app-file basis - it
- * just changes whether a macro is used when the function is called.
- * The library builder sets the default; if read functions are not
- * built into the library the macro implementation is forced on.
- */
-#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED
-#  define PNG_USE_READ_MACROS
-#endif
-#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
-#  if PNG_DEFAULT_READ_MACROS
-#    define PNG_USE_READ_MACROS
-#  endif
-#endif
-
-/* COMPILER SPECIFIC OPTIONS.
- *
- * These options are provided so that a variety of difficult compilers
- * can be used.  Some are fixed at build time (e.g. PNG_API_RULE
- * below) but still have compiler specific implementations, others
- * may be changed on a per-file basis when compiling against libpng.
- */
-
-/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect
- * against legacy (pre ISOC90) compilers that did not understand function
- * prototypes.  It is not required for modern C compilers.
- */
-#ifndef PNGARG
-#  define PNGARG(arglist) arglist
-#endif
-
-/* Function calling conventions.
- * =============================
- * Normally it is not necessary to specify to the compiler how to call
- * a function - it just does it - however on x86 systems derived from
- * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems
- * and some others) there are multiple ways to call a function and the
- * default can be changed on the compiler command line.  For this reason
- * libpng specifies the calling convention of every exported function and
- * every function called via a user supplied function pointer.  This is
- * done in this file by defining the following macros:
- *
- * PNGAPI    Calling convention for exported functions.
- * PNGCBAPI  Calling convention for user provided (callback) functions.
- * PNGCAPI   Calling convention used by the ANSI-C library (required
- *           for longjmp callbacks and sometimes used internally to
- *           specify the calling convention for zlib).
- *
- * These macros should never be overridden.  If it is necessary to
- * change calling convention in a private build this can be done
- * by setting PNG_API_RULE (which defaults to 0) to one of the values
- * below to select the correct 'API' variants.
- *
- * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout.
- *                This is correct in every known environment.
- * PNG_API_RULE=1 Use the operating system convention for PNGAPI and
- *                the 'C' calling convention (from PNGCAPI) for
- *                callbacks (PNGCBAPI).  This is no longer required
- *                in any known environment - if it has to be used
- *                please post an explanation of the problem to the
- *                libpng mailing list.
- *
- * These cases only differ if the operating system does not use the C
- * calling convention, at present this just means the above cases
- * (x86 DOS/Windows sytems) and, even then, this does not apply to
- * Cygwin running on those systems.
- *
- * Note that the value must be defined in pnglibconf.h so that what
- * the application uses to call the library matches the conventions
- * set when building the library.
- */
-
-/* Symbol export
- * =============
- * When building a shared library it is almost always necessary to tell
- * the compiler which symbols to export.  The png.h macro 'PNG_EXPORT'
- * is used to mark the symbols.  On some systems these symbols can be
- * extracted at link time and need no special processing by the compiler,
- * on other systems the symbols are flagged by the compiler and just
- * the declaration requires a special tag applied (unfortunately) in a
- * compiler dependent way.  Some systems can do either.
- *
- * A small number of older systems also require a symbol from a DLL to
- * be flagged to the program that calls it.  This is a problem because
- * we do not know in the header file included by application code that
- * the symbol will come from a shared library, as opposed to a statically
- * linked one.  For this reason the application must tell us by setting
- * the magic flag PNG_USE_DLL to turn on the special processing before
- * it includes png.h.
- *
- * Four additional macros are used to make this happen:
- *
- * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from
- *            the build or imported if PNG_USE_DLL is set - compiler
- *            and system specific.
- *
- * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to
- *                       'type', compiler specific.
- *
- * PNG_DLL_EXPORT Set to the magic to use during a libpng build to
- *                make a symbol exported from the DLL.  Not used in the
- *                public header files; see pngpriv.h for how it is used
- *                in the libpng build.
- *
- * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come
- *                from a DLL - used to define PNG_IMPEXP when
- *                PNG_USE_DLL is set.
- */
-
-/* System specific discovery.
- * ==========================
- * This code is used at build time to find PNG_IMPEXP, the API settings
- * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL
- * import processing is possible.  On Windows systems it also sets
- * compiler-specific macros to the values required to change the calling
- * conventions of the various functions.
- */
-#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\
-    defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-  /* Windows system (DOS doesn't support DLLs).  Includes builds under Cygwin or
-   * MinGW on any architecture currently supported by Windows.  Also includes
-   * Watcom builds but these need special treatment because they are not
-   * compatible with GCC or Visual C because of different calling conventions.
-   */
-#  if PNG_API_RULE == 2
-    /* If this line results in an error, either because __watcall is not
-     * understood or because of a redefine just below you cannot use *this*
-     * build of the library with the compiler you are using.  *This* build was
-     * build using Watcom and applications must also be built using Watcom!
-     */
-#    define PNGCAPI __watcall
-#  endif
-
-#  if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
-#    define PNGCAPI __cdecl
-#    if PNG_API_RULE == 1
-       /* If this line results in an error __stdcall is not understood and
-        * PNG_API_RULE should not have been set to '1'.
-        */
-#      define PNGAPI __stdcall
-#    endif
-#  else
-    /* An older compiler, or one not detected (erroneously) above,
-     * if necessary override on the command line to get the correct
-     * variants for the compiler.
-     */
-#    ifndef PNGCAPI
-#      define PNGCAPI _cdecl
-#    endif
-#    if PNG_API_RULE == 1 && !defined(PNGAPI)
-#      define PNGAPI _stdcall
-#    endif
-#  endif /* compiler/api */
-
-  /* NOTE: PNGCBAPI always defaults to PNGCAPI. */
-
-#  if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
-#     error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed"
-#  endif
-
-#  if (defined(_MSC_VER) && _MSC_VER < 800) ||\
-      (defined(__BORLANDC__) && __BORLANDC__ < 0x500)
-    /* older Borland and MSC
-     * compilers used '__export' and required this to be after
-     * the type.
-     */
-#    ifndef PNG_EXPORT_TYPE
-#      define PNG_EXPORT_TYPE(type) type PNG_IMPEXP
-#    endif
-#    define PNG_DLL_EXPORT __export
-#  else /* newer compiler */
-#    define PNG_DLL_EXPORT __declspec(dllexport)
-#    ifndef PNG_DLL_IMPORT
-#      define PNG_DLL_IMPORT __declspec(dllimport)
-#    endif
-#  endif /* compiler */
-
-#else /* !Windows */
-#  if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__)
-#    define PNGAPI _System
-#  else /* !Windows/x86 && !OS/2 */
-    /* Use the defaults, or define PNG*API on the command line (but
-     * this will have to be done for every compile!)
-     */
-#  endif /* other system, !OS/2 */
-#endif /* !Windows/x86 */
-
-/* Now do all the defaulting . */
-#ifndef PNGCAPI
-#  define PNGCAPI
-#endif
-#ifndef PNGCBAPI
-#  define PNGCBAPI PNGCAPI
-#endif
-#ifndef PNGAPI
-#  define PNGAPI PNGCAPI
-#endif
-
-/* PNG_IMPEXP may be set on the compilation system command line or (if not set)
- * then in an internal header file when building the library, otherwise (when
- * using the library) it is set here.
- */
-#ifndef PNG_IMPEXP
-#  if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT)
-     /* This forces use of a DLL, disallowing static linking */
-#    define PNG_IMPEXP PNG_DLL_IMPORT
-#  endif
-
-#  ifndef PNG_IMPEXP
-#    define PNG_IMPEXP
-#  endif
-#endif
-
-/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat
- * 'attributes' as a storage class - the attributes go at the start of the
- * function definition, and attributes are always appended regardless of the
- * compiler.  This considerably simplifies these macros but may cause problems
- * if any compilers both need function attributes and fail to handle them as
- * a storage class (this is unlikely.)
- */
-#ifndef PNG_FUNCTION
-#  define PNG_FUNCTION(type, name, args, attributes) attributes type name args
-#endif
-
-#ifndef PNG_EXPORT_TYPE
-#  define PNG_EXPORT_TYPE(type) PNG_IMPEXP type
-#endif
-
-   /* The ordinal value is only relevant when preprocessing png.h for symbol
-    * table entries, so we discard it here.  See the .dfn files in the
-    * scripts directory.
-    */
-#ifndef PNG_EXPORTA
-
-#  define PNG_EXPORTA(ordinal, type, name, args, attributes)\
-      PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
-        extern attributes)
-#endif
-
-/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
- * so make something non-empty to satisfy the requirement:
- */
-#define PNG_EMPTY /*empty list*/
-
-#define PNG_EXPORT(ordinal, type, name, args)\
-   PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
-
-/* Use PNG_REMOVED to comment out a removed interface. */
-#ifndef PNG_REMOVED
-#  define PNG_REMOVED(ordinal, type, name, args, attributes)
-#endif
-
-#ifndef PNG_CALLBACK
-#  define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args)
-#endif
-
-/* Support for compiler specific function attributes.  These are used
- * so that where compiler support is available incorrect use of API
- * functions in png.h will generate compiler warnings.
- *
- * Added at libpng-1.2.41.
- */
-
-#ifndef PNG_NO_PEDANTIC_WARNINGS
-#  ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED
-#    define PNG_PEDANTIC_WARNINGS_SUPPORTED
-#  endif
-#endif
-
-#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED
-  /* Support for compiler specific function attributes.  These are used
-   * so that where compiler support is available, incorrect use of API
-   * functions in png.h will generate compiler warnings.  Added at libpng
-   * version 1.2.41.  Disabling these removes the warnings but may also produce
-   * less efficient code.
-   */
-#  if defined(__clang__) && defined(__has_attribute)
-     /* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */
-#    if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__)
-#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
-#    endif
-#    if !defined(PNG_NORETURN) && __has_attribute(__noreturn__)
-#      define PNG_NORETURN __attribute__((__noreturn__))
-#    endif
-#    if !defined(PNG_ALLOCATED) && __has_attribute(__malloc__)
-#      define PNG_ALLOCATED __attribute__((__malloc__))
-#    endif
-#    if !defined(PNG_DEPRECATED) && __has_attribute(__deprecated__)
-#      define PNG_DEPRECATED __attribute__((__deprecated__))
-#    endif
-#    if !defined(PNG_PRIVATE)
-#      ifdef __has_extension
-#        if __has_extension(attribute_unavailable_with_message)
-#          define PNG_PRIVATE __attribute__((__unavailable__(\
-             "This function is not exported by libpng.")))
-#        endif
-#      endif
-#    endif
-#    ifndef PNG_RESTRICT
-#      define PNG_RESTRICT __restrict
-#    endif
-
-#  elif defined(__GNUC__)
-#    ifndef PNG_USE_RESULT
-#      define PNG_USE_RESULT __attribute__((__warn_unused_result__))
-#    endif
-#    ifndef PNG_NORETURN
-#      define PNG_NORETURN   __attribute__((__noreturn__))
-#    endif
-#    if __GNUC__ >= 3
-#      ifndef PNG_ALLOCATED
-#        define PNG_ALLOCATED  __attribute__((__malloc__))
-#      endif
-#      ifndef PNG_DEPRECATED
-#        define PNG_DEPRECATED __attribute__((__deprecated__))
-#      endif
-#      ifndef PNG_PRIVATE
-#        if 0 /* Doesn't work so we use deprecated instead*/
-#          define PNG_PRIVATE \
-            __attribute__((warning("This function is not exported by libpng.")))
-#        else
-#          define PNG_PRIVATE \
-            __attribute__((__deprecated__))
-#        endif
-#      endif
-#      if ((__GNUC__ > 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1))
-#        ifndef PNG_RESTRICT
-#          define PNG_RESTRICT __restrict
-#        endif
-#      endif /* __GNUC__.__GNUC_MINOR__ > 3.0 */
-#    endif /* __GNUC__ >= 3 */
-
-#  elif defined(_MSC_VER)  && (_MSC_VER >= 1300)
-#    ifndef PNG_USE_RESULT
-#      define PNG_USE_RESULT /* not supported */
-#    endif
-#    ifndef PNG_NORETURN
-#      define PNG_NORETURN   __declspec(noreturn)
-#    endif
-#    ifndef PNG_ALLOCATED
-#      if (_MSC_VER >= 1400)
-#        define PNG_ALLOCATED __declspec(restrict)
-#      endif
-#    endif
-#    ifndef PNG_DEPRECATED
-#      define PNG_DEPRECATED __declspec(deprecated)
-#    endif
-#    ifndef PNG_PRIVATE
-#      define PNG_PRIVATE __declspec(deprecated)
-#    endif
-#    ifndef PNG_RESTRICT
-#      if (_MSC_VER >= 1400)
-#        define PNG_RESTRICT __restrict
-#      endif
-#    endif
-
-#  elif defined(__WATCOMC__)
-#    ifndef PNG_RESTRICT
-#      define PNG_RESTRICT __restrict
-#    endif
-#  endif
-#endif /* PNG_PEDANTIC_WARNINGS */
-
-#ifndef PNG_DEPRECATED
-#  define PNG_DEPRECATED  /* Use of this function is deprecated */
-#endif
-#ifndef PNG_USE_RESULT
-#  define PNG_USE_RESULT  /* The result of this function must be checked */
-#endif
-#ifndef PNG_NORETURN
-#  define PNG_NORETURN    /* This function does not return */
-#endif
-#ifndef PNG_ALLOCATED
-#  define PNG_ALLOCATED   /* The result of the function is new memory */
-#endif
-#ifndef PNG_PRIVATE
-#  define PNG_PRIVATE     /* This is a private libpng function */
-#endif
-#ifndef PNG_RESTRICT
-#  define PNG_RESTRICT    /* The C99 "restrict" feature */
-#endif
-
-#ifndef PNG_FP_EXPORT     /* A floating point API. */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-#     define PNG_FP_EXPORT(ordinal, type, name, args)\
-         PNG_EXPORT(ordinal, type, name, args);
-#  else                   /* No floating point APIs */
-#     define PNG_FP_EXPORT(ordinal, type, name, args)
-#  endif
-#endif
-#ifndef PNG_FIXED_EXPORT  /* A fixed point API. */
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\
-         PNG_EXPORT(ordinal, type, name, args);
-#  else                   /* No fixed point APIs */
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)
-#  endif
-#endif
-
-#ifndef PNG_BUILDING_SYMBOL_TABLE
-/* Some typedefs to get us started.  These should be safe on most of the common
- * platforms.
- *
- * png_uint_32 and png_int_32 may, currently, be larger than required to hold a
- * 32-bit value however this is not normally advisable.
- *
- * png_uint_16 and png_int_16 should always be two bytes in size - this is
- * verified at library build time.
- *
- * png_byte must always be one byte in size.
- *
- * The checks below use constants from limits.h, as defined by the ISOC90
- * standard.
- */
-#if CHAR_BIT == 8 && UCHAR_MAX == 255
-   typedef unsigned char png_byte;
-#else
-#  error "libpng requires 8 bit bytes"
-#endif
-
-#if INT_MIN == -32768 && INT_MAX == 32767
-   typedef int png_int_16;
-#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
-   typedef short png_int_16;
-#else
-#  error "libpng requires a signed 16 bit type"
-#endif
-
-#if UINT_MAX == 65535
-   typedef unsigned int png_uint_16;
-#elif USHRT_MAX == 65535
-   typedef unsigned short png_uint_16;
-#else
-#  error "libpng requires an unsigned 16 bit type"
-#endif
-
-#if INT_MIN < -2147483646 && INT_MAX > 2147483646
-   typedef int png_int_32;
-#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
-   typedef long int png_int_32;
-#else
-#  error "libpng requires a signed 32 bit (or more) type"
-#endif
-
-#if UINT_MAX > 4294967294
-   typedef unsigned int png_uint_32;
-#elif ULONG_MAX > 4294967294
-   typedef unsigned long int png_uint_32;
-#else
-#  error "libpng requires an unsigned 32 bit (or more) type"
-#endif
-
-/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
- * requires an ISOC90 compiler and relies on consistent behavior of sizeof.
- */
-typedef size_t png_size_t;
-typedef ptrdiff_t png_ptrdiff_t;
-
-/* libpng needs to know the maximum value of 'size_t' and this controls the
- * definition of png_alloc_size_t, below.  This maximum value of size_t limits
- * but does not control the maximum allocations the library makes - there is
- * direct application control of this through png_set_user_limits().
- */
-#ifndef PNG_SMALL_SIZE_T
-   /* Compiler specific tests for systems where size_t is known to be less than
-    * 32 bits (some of these systems may no longer work because of the lack of
-    * 'far' support; see above.)
-    */
-#  if (defined(__TURBOC__) && !defined(__FLAT__)) ||\
-   (defined(_MSC_VER) && defined(MAXSEG_64K))
-#     define PNG_SMALL_SIZE_T
-#  endif
-#endif
-
-/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, and no
- * smaller than png_uint_32.  Casts from png_size_t or png_uint_32 to
- * png_alloc_size_t are not necessary; in fact, it is recommended not to use
- * them at all so that the compiler can complain when something turns out to be
- * problematic.
- *
- * Casts in the other direction (from png_alloc_size_t to png_size_t or
- * png_uint_32) should be explicitly applied; however, we do not expect to
- * encounter practical situations that require such conversions.
- *
- * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than
- * 4294967295 - i.e. less than the maximum value of png_uint_32.
- */
-#ifdef PNG_SMALL_SIZE_T
-   typedef png_uint_32 png_alloc_size_t;
-#else
-   typedef png_size_t png_alloc_size_t;
-#endif
-
-/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler
- * implementations of Intel CPU specific support of user-mode segmented address
- * spaces, where 16-bit pointers address more than 65536 bytes of memory using
- * separate 'segment' registers.  The implementation requires two different
- * types of pointer (only one of which includes the segment value.)
- *
- * If required this support is available in version 1.2 of libpng and may be
- * available in versions through 1.5, although the correctness of the code has
- * not been verified recently.
- */
-
-/* Typedef for floating-point numbers that are converted to fixed-point with a
- * multiple of 100,000, e.g., gamma
- */
-typedef png_int_32 png_fixed_point;
-
-/* Add typedefs for pointers */
-typedef void                  * png_voidp;
-typedef const void            * png_const_voidp;
-typedef png_byte              * png_bytep;
-typedef const png_byte        * png_const_bytep;
-typedef png_uint_32           * png_uint_32p;
-typedef const png_uint_32     * png_const_uint_32p;
-typedef png_int_32            * png_int_32p;
-typedef const png_int_32      * png_const_int_32p;
-typedef png_uint_16           * png_uint_16p;
-typedef const png_uint_16     * png_const_uint_16p;
-typedef png_int_16            * png_int_16p;
-typedef const png_int_16      * png_const_int_16p;
-typedef char                  * png_charp;
-typedef const char            * png_const_charp;
-typedef png_fixed_point       * png_fixed_point_p;
-typedef const png_fixed_point * png_const_fixed_point_p;
-typedef png_size_t            * png_size_tp;
-typedef const png_size_t      * png_const_size_tp;
-
-#ifdef PNG_STDIO_SUPPORTED
-typedef FILE            * png_FILE_p;
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double       * png_doublep;
-typedef const double * png_const_doublep;
-#endif
-
-/* Pointers to pointers; i.e. arrays */
-typedef png_byte        * * png_bytepp;
-typedef png_uint_32     * * png_uint_32pp;
-typedef png_int_32      * * png_int_32pp;
-typedef png_uint_16     * * png_uint_16pp;
-typedef png_int_16      * * png_int_16pp;
-typedef const char      * * png_const_charpp;
-typedef char            * * png_charpp;
-typedef png_fixed_point * * png_fixed_point_pp;
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-typedef double          * * png_doublepp;
-#endif
-
-/* Pointers to pointers to pointers; i.e., pointer to array */
-typedef char            * * * png_charppp;
-
-#endif /* PNG_BUILDING_SYMBOL_TABLE */
-
-#endif /* PNGCONF_H */
--- a/DoConfig/fltk/png/pngdebug.h
+++ /dev/null
@@ -1,154 +1,0 @@
-
-/* pngdebug.h - Debugging macros for libpng, also used in pngtest.c
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.8 [December 19, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* Define PNG_DEBUG at compile time for debugging information.  Higher
- * numbers for PNG_DEBUG mean more debugging information.  This has
- * only been added since version 0.95 so it is not implemented throughout
- * libpng yet, but more support will be added as needed.
- *
- * png_debug[1-2]?(level, message ,arg{0-2})
- *   Expands to a statement (either a simple expression or a compound
- *   do..while(0) statement) that outputs a message with parameter
- *   substitution if PNG_DEBUG is defined to 2 or more.  If PNG_DEBUG
- *   is undefined, 0 or 1 every png_debug expands to a simple expression
- *   (actually ((void)0)).
- *
- *   level: level of detail of message, starting at 0.  A level 'n'
- *          message is preceded by 'n' 3-space indentations (not implemented
- *          on Microsoft compilers unless PNG_DEBUG_FILE is also
- *          defined, to allow debug DLL compilation with no standard IO).
- *   message: a printf(3) style text string.  A trailing '\n' is added
- *            to the message.
- *   arg: 0 to 2 arguments for printf(3) style substitution in message.
- */
-#ifndef PNGDEBUG_H
-#define PNGDEBUG_H
-/* These settings control the formatting of messages in png.c and pngerror.c */
-/* Moved to pngdebug.h at 1.5.0 */
-#  ifndef PNG_LITERAL_SHARP
-#    define PNG_LITERAL_SHARP 0x23
-#  endif
-#  ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
-#    define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
-#  endif
-#  ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
-#    define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
-#  endif
-#  ifndef PNG_STRING_NEWLINE
-#    define PNG_STRING_NEWLINE "\n"
-#  endif
-
-#ifdef PNG_DEBUG
-#  if (PNG_DEBUG > 0)
-#    if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
-#      include <crtdbg.h>
-#      if (PNG_DEBUG > 1)
-#        ifndef _DEBUG
-#          define _DEBUG
-#        endif
-#        ifndef png_debug
-#          define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)
-#        endif
-#        ifndef png_debug1
-#          define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)
-#        endif
-#        ifndef png_debug2
-#          define png_debug2(l,m,p1,p2) \
-             _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)
-#        endif
-#      endif
-#    else /* PNG_DEBUG_FILE || !_MSC_VER */
-#      ifndef PNG_STDIO_SUPPORTED
-#        include <stdio.h> /* not included yet */
-#      endif
-#      ifndef PNG_DEBUG_FILE
-#        define PNG_DEBUG_FILE stderr
-#      endif /* PNG_DEBUG_FILE */
-
-#      if (PNG_DEBUG > 1)
-#        ifdef __STDC__
-#          ifndef png_debug
-#            define png_debug(l,m) \
-       do { \
-       int num_tabs=l; \
-       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
-         (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : "")))); \
-       } while (0)
-#          endif
-#          ifndef png_debug1
-#            define png_debug1(l,m,p1) \
-       do { \
-       int num_tabs=l; \
-       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
-         (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : ""))),p1); \
-       } while (0)
-#          endif
-#          ifndef png_debug2
-#            define png_debug2(l,m,p1,p2) \
-       do { \
-       int num_tabs=l; \
-       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "   " : \
-         (num_tabs==2 ? "      " : (num_tabs>2 ? "         " : ""))),p1,p2);\
-       } while (0)
-#          endif
-#        else /* __STDC __ */
-#          ifndef png_debug
-#            define png_debug(l,m) \
-       do { \
-       int num_tabs=l; \
-       char format[256]; \
-       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
-         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
-         m,PNG_STRING_NEWLINE); \
-       fprintf(PNG_DEBUG_FILE,format); \
-       } while (0)
-#          endif
-#          ifndef png_debug1
-#            define png_debug1(l,m,p1) \
-       do { \
-       int num_tabs=l; \
-       char format[256]; \
-       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
-         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
-         m,PNG_STRING_NEWLINE); \
-       fprintf(PNG_DEBUG_FILE,format,p1); \
-       } while (0)
-#          endif
-#          ifndef png_debug2
-#            define png_debug2(l,m,p1,p2) \
-       do { \
-       int num_tabs=l; \
-       char format[256]; \
-       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
-         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
-         m,PNG_STRING_NEWLINE); \
-       fprintf(PNG_DEBUG_FILE,format,p1,p2); \
-       } while (0)
-#          endif
-#        endif /* __STDC __ */
-#      endif /* (PNG_DEBUG > 1) */
-
-#    endif /* _MSC_VER */
-#  endif /* (PNG_DEBUG > 0) */
-#endif /* PNG_DEBUG */
-#ifndef png_debug
-#  define png_debug(l, m) ((void)0)
-#endif
-#ifndef png_debug1
-#  define png_debug1(l, m, p1) ((void)0)
-#endif
-#ifndef png_debug2
-#  define png_debug2(l, m, p1, p2) ((void)0)
-#endif
-#endif /* PNGDEBUG_H */
--- a/DoConfig/fltk/png/pngerror.c
+++ /dev/null
@@ -1,963 +1,0 @@
-
-/* pngerror.c - stub functions for i/o and memory allocation
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all error handling.  Users who
- * need special error handling are expected to write replacement functions
- * and use png_set_error_fn() to use those functions.  See the instructions
- * at each function.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-static PNG_FUNCTION(void, png_default_error,PNGARG((png_const_structrp png_ptr,
-    png_const_charp error_message)),PNG_NORETURN);
-
-#ifdef PNG_WARNINGS_SUPPORTED
-static void /* PRIVATE */
-png_default_warning PNGARG((png_const_structrp png_ptr,
-   png_const_charp warning_message));
-#endif /* WARNINGS */
-
-/* This function is called whenever there is a fatal error.  This function
- * should not be changed.  If there is a need to handle errors differently,
- * you should supply a replacement error function and use png_set_error_fn()
- * to replace the error function at run-time.
- */
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-PNG_FUNCTION(void,PNGAPI
-png_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   char msg[16];
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags &
-         (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0
-      {
-         if (*error_message == PNG_LITERAL_SHARP)
-         {
-            /* Strip "#nnnn " from beginning of error message. */
-            int offset;
-            for (offset = 1; offset<15; offset++)
-               if (error_message[offset] == ' ')
-                  break;
-
-            if ((png_ptr->flags & PNG_FLAG_STRIP_ERROR_TEXT) != 0)
-            {
-               int i;
-               for (i = 0; i < offset - 1; i++)
-                  msg[i] = error_message[i + 1];
-               msg[i - 1] = '\0';
-               error_message = msg;
-            }
-
-            else
-               error_message += offset;
-      }
-
-      else
-      {
-         if ((png_ptr->flags & PNG_FLAG_STRIP_ERROR_TEXT) != 0)
-         {
-            msg[0] = '0';
-            msg[1] = '\0';
-            error_message = msg;
-         }
-       }
-     }
-   }
-#endif
-   if (png_ptr != NULL && png_ptr->error_fn != NULL)
-      (*(png_ptr->error_fn))(png_constcast(png_structrp,png_ptr),
-          error_message);
-
-   /* If the custom handler doesn't exist, or if it returns,
-      use the default handler, which will not return. */
-   png_default_error(png_ptr, error_message);
-}
-#else
-PNG_FUNCTION(void,PNGAPI
-png_err,(png_const_structrp png_ptr),PNG_NORETURN)
-{
-   /* Prior to 1.5.2 the error_fn received a NULL pointer, expressed
-    * erroneously as '\0', instead of the empty string "".  This was
-    * apparently an error, introduced in libpng-1.2.20, and png_default_error
-    * will crash in this case.
-    */
-   if (png_ptr != NULL && png_ptr->error_fn != NULL)
-      (*(png_ptr->error_fn))(png_constcast(png_structrp,png_ptr), "");
-
-   /* If the custom handler doesn't exist, or if it returns,
-      use the default handler, which will not return. */
-   png_default_error(png_ptr, "");
-}
-#endif /* ERROR_TEXT */
-
-/* Utility to safely appends strings to a buffer.  This never errors out so
- * error checking is not required in the caller.
- */
-size_t
-png_safecat(png_charp buffer, size_t bufsize, size_t pos,
-   png_const_charp string)
-{
-   if (buffer != NULL && pos < bufsize)
-   {
-      if (string != NULL)
-         while (*string != '\0' && pos < bufsize-1)
-           buffer[pos++] = *string++;
-
-      buffer[pos] = '\0';
-   }
-
-   return pos;
-}
-
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_TIME_RFC1123_SUPPORTED)
-/* Utility to dump an unsigned value into a buffer, given a start pointer and
- * and end pointer (which should point just *beyond* the end of the buffer!)
- * Returns the pointer to the start of the formatted string.
- */
-png_charp
-png_format_number(png_const_charp start, png_charp end, int format,
-   png_alloc_size_t number)
-{
-   int count = 0;    /* number of digits output */
-   int mincount = 1; /* minimum number required */
-   int output = 0;   /* digit output (for the fixed point format) */
-
-   *--end = '\0';
-
-   /* This is written so that the loop always runs at least once, even with
-    * number zero.
-    */
-   while (end > start && (number != 0 || count < mincount))
-   {
-
-      static const char digits[] = "0123456789ABCDEF";
-
-      switch (format)
-      {
-         case PNG_NUMBER_FORMAT_fixed:
-            /* Needs five digits (the fraction) */
-            mincount = 5;
-            if (output != 0 || number % 10 != 0)
-            {
-               *--end = digits[number % 10];
-               output = 1;
-            }
-            number /= 10;
-            break;
-
-         case PNG_NUMBER_FORMAT_02u:
-            /* Expects at least 2 digits. */
-            mincount = 2;
-            /* FALL THROUGH */
-
-         case PNG_NUMBER_FORMAT_u:
-            *--end = digits[number % 10];
-            number /= 10;
-            break;
-
-         case PNG_NUMBER_FORMAT_02x:
-            /* This format expects at least two digits */
-            mincount = 2;
-            /* FALL THROUGH */
-
-         case PNG_NUMBER_FORMAT_x:
-            *--end = digits[number & 0xf];
-            number >>= 4;
-            break;
-
-         default: /* an error */
-            number = 0;
-            break;
-      }
-
-      /* Keep track of the number of digits added */
-      ++count;
-
-      /* Float a fixed number here: */
-      if ((format == PNG_NUMBER_FORMAT_fixed) && (count == 5) && (end > start))
-      {
-         /* End of the fraction, but maybe nothing was output?  In that case
-          * drop the decimal point.  If the number is a true zero handle that
-          * here.
-          */
-         if (output != 0)
-            *--end = '.';
-         else if (number == 0) /* and !output */
-            *--end = '0';
-      }
-   }
-
-   return end;
-}
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* This function is called whenever there is a non-fatal error.  This function
- * should not be changed.  If there is a need to handle warnings differently,
- * you should supply a replacement warning function and use
- * png_set_error_fn() to replace the warning function at run-time.
- */
-void PNGAPI
-png_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-   int offset = 0;
-   if (png_ptr != NULL)
-   {
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   if ((png_ptr->flags &
-       (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0)
-#endif
-      {
-         if (*warning_message == PNG_LITERAL_SHARP)
-         {
-            for (offset = 1; offset < 15; offset++)
-               if (warning_message[offset] == ' ')
-                  break;
-         }
-      }
-   }
-   if (png_ptr != NULL && png_ptr->warning_fn != NULL)
-      (*(png_ptr->warning_fn))(png_constcast(png_structrp,png_ptr),
-         warning_message + offset);
-   else
-      png_default_warning(png_ptr, warning_message + offset);
-}
-
-/* These functions support 'formatted' warning messages with up to
- * PNG_WARNING_PARAMETER_COUNT parameters.  In the format string the parameter
- * is introduced by @<number>, where 'number' starts at 1.  This follows the
- * standard established by X/Open for internationalizable error messages.
- */
-void
-png_warning_parameter(png_warning_parameters p, int number,
-   png_const_charp string)
-{
-   if (number > 0 && number <= PNG_WARNING_PARAMETER_COUNT)
-      (void)png_safecat(p[number-1], (sizeof p[number-1]), 0, string);
-}
-
-void
-png_warning_parameter_unsigned(png_warning_parameters p, int number, int format,
-   png_alloc_size_t value)
-{
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
-   png_warning_parameter(p, number, PNG_FORMAT_NUMBER(buffer, format, value));
-}
-
-void
-png_warning_parameter_signed(png_warning_parameters p, int number, int format,
-   png_int_32 value)
-{
-   png_alloc_size_t u;
-   png_charp str;
-   char buffer[PNG_NUMBER_BUFFER_SIZE];
-
-   /* Avoid overflow by doing the negate in a png_alloc_size_t: */
-   u = (png_alloc_size_t)value;
-   if (value < 0)
-      u = ~u + 1;
-
-   str = PNG_FORMAT_NUMBER(buffer, format, u);
-
-   if (value < 0 && str > buffer)
-      *--str = '-';
-
-   png_warning_parameter(p, number, str);
-}
-
-void
-png_formatted_warning(png_const_structrp png_ptr, png_warning_parameters p,
-   png_const_charp message)
-{
-   /* The internal buffer is just 192 bytes - enough for all our messages,
-    * overflow doesn't happen because this code checks!  If someone figures
-    * out how to send us a message longer than 192 bytes, all that will
-    * happen is that the message will be truncated appropriately.
-    */
-   size_t i = 0; /* Index in the msg[] buffer: */
-   char msg[192];
-
-   /* Each iteration through the following loop writes at most one character
-    * to msg[i++] then returns here to validate that there is still space for
-    * the trailing '\0'.  It may (in the case of a parameter) read more than
-    * one character from message[]; it must check for '\0' and continue to the
-    * test if it finds the end of string.
-    */
-   while (i<(sizeof msg)-1 && *message != '\0')
-   {
-      /* '@' at end of string is now just printed (previously it was skipped);
-       * it is an error in the calling code to terminate the string with @.
-       */
-      if (p != NULL && *message == '@' && message[1] != '\0')
-      {
-         int parameter_char = *++message; /* Consume the '@' */
-         static const char valid_parameters[] = "123456789";
-         int parameter = 0;
-
-         /* Search for the parameter digit, the index in the string is the
-          * parameter to use.
-          */
-         while (valid_parameters[parameter] != parameter_char &&
-            valid_parameters[parameter] != '\0')
-            ++parameter;
-
-         /* If the parameter digit is out of range it will just get printed. */
-         if (parameter < PNG_WARNING_PARAMETER_COUNT)
-         {
-            /* Append this parameter */
-            png_const_charp parm = p[parameter];
-            png_const_charp pend = p[parameter] + (sizeof p[parameter]);
-
-            /* No need to copy the trailing '\0' here, but there is no guarantee
-             * that parm[] has been initialized, so there is no guarantee of a
-             * trailing '\0':
-             */
-            while (i<(sizeof msg)-1 && *parm != '\0' && parm < pend)
-               msg[i++] = *parm++;
-
-            /* Consume the parameter digit too: */
-            ++message;
-            continue;
-         }
-
-         /* else not a parameter and there is a character after the @ sign; just
-          * copy that.  This is known not to be '\0' because of the test above.
-          */
-      }
-
-      /* At this point *message can't be '\0', even in the bad parameter case
-       * above where there is a lone '@' at the end of the message string.
-       */
-      msg[i++] = *message++;
-   }
-
-   /* i is always less than (sizeof msg), so: */
-   msg[i] = '\0';
-
-   /* And this is the formatted message. It may be larger than
-    * PNG_MAX_ERROR_TEXT, but that is only used for 'chunk' errors and these
-    * are not (currently) formatted.
-    */
-   png_warning(png_ptr, msg);
-}
-#endif /* WARNINGS */
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_benign_error(png_const_structrp png_ptr, png_const_charp error_message)
-{
-   if ((png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN) != 0)
-   {
-#     ifdef PNG_READ_SUPPORTED
-         if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-            png_ptr->chunk_name != 0)
-            png_chunk_warning(png_ptr, error_message);
-         else
-#     endif
-      png_warning(png_ptr, error_message);
-   }
-
-   else
-   {
-#     ifdef PNG_READ_SUPPORTED
-         if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-            png_ptr->chunk_name != 0)
-            png_chunk_error(png_ptr, error_message);
-         else
-#     endif
-      png_error(png_ptr, error_message);
-   }
-
-#  ifndef PNG_ERROR_TEXT_SUPPORTED
-      PNG_UNUSED(error_message)
-#  endif
-}
-
-void /* PRIVATE */
-png_app_warning(png_const_structrp png_ptr, png_const_charp error_message)
-{
-  if ((png_ptr->flags & PNG_FLAG_APP_WARNINGS_WARN) != 0)
-     png_warning(png_ptr, error_message);
-  else
-     png_error(png_ptr, error_message);
-
-#  ifndef PNG_ERROR_TEXT_SUPPORTED
-      PNG_UNUSED(error_message)
-#  endif
-}
-
-void /* PRIVATE */
-png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
-{
-  if ((png_ptr->flags & PNG_FLAG_APP_ERRORS_WARN) != 0)
-     png_warning(png_ptr, error_message);
-  else
-     png_error(png_ptr, error_message);
-
-#  ifndef PNG_ERROR_TEXT_SUPPORTED
-      PNG_UNUSED(error_message)
-#  endif
-}
-#endif /* BENIGN_ERRORS */
-
-#define PNG_MAX_ERROR_TEXT 196 /* Currently limited by profile_error in png.c */
-#if defined(PNG_WARNINGS_SUPPORTED) || \
-   (defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED))
-/* These utilities are used internally to build an error message that relates
- * to the current chunk.  The chunk name comes from png_ptr->chunk_name,
- * which is used to prefix the message.  The message is limited in length
- * to 63 bytes. The name characters are output as hex digits wrapped in []
- * if the character is invalid.
- */
-#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
-static PNG_CONST char png_digit[16] = {
-   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-   'A', 'B', 'C', 'D', 'E', 'F'
-};
-
-static void /* PRIVATE */
-png_format_buffer(png_const_structrp png_ptr, png_charp buffer, png_const_charp
-    error_message)
-{
-   png_uint_32 chunk_name = png_ptr->chunk_name;
-   int iout = 0, ishift = 24;
-
-   while (ishift >= 0)
-   {
-      int c = (int)(chunk_name >> ishift) & 0xff;
-
-      ishift -= 8;
-      if (isnonalpha(c) != 0)
-      {
-         buffer[iout++] = PNG_LITERAL_LEFT_SQUARE_BRACKET;
-         buffer[iout++] = png_digit[(c & 0xf0) >> 4];
-         buffer[iout++] = png_digit[c & 0x0f];
-         buffer[iout++] = PNG_LITERAL_RIGHT_SQUARE_BRACKET;
-      }
-
-      else
-      {
-         buffer[iout++] = (char)c;
-      }
-   }
-
-   if (error_message == NULL)
-      buffer[iout] = '\0';
-
-   else
-   {
-      int iin = 0;
-
-      buffer[iout++] = ':';
-      buffer[iout++] = ' ';
-
-      while (iin < PNG_MAX_ERROR_TEXT-1 && error_message[iin] != '\0')
-         buffer[iout++] = error_message[iin++];
-
-      /* iin < PNG_MAX_ERROR_TEXT, so the following is safe: */
-      buffer[iout] = '\0';
-   }
-}
-#endif /* WARNINGS || ERROR_TEXT */
-
-#if defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
-PNG_FUNCTION(void,PNGAPI
-png_chunk_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-   char msg[18+PNG_MAX_ERROR_TEXT];
-   if (png_ptr == NULL)
-      png_error(png_ptr, error_message);
-
-   else
-   {
-      png_format_buffer(png_ptr, msg, error_message);
-      png_error(png_ptr, msg);
-   }
-}
-#endif /* READ && ERROR_TEXT */
-
-#ifdef PNG_WARNINGS_SUPPORTED
-void PNGAPI
-png_chunk_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-   char msg[18+PNG_MAX_ERROR_TEXT];
-   if (png_ptr == NULL)
-      png_warning(png_ptr, warning_message);
-
-   else
-   {
-      png_format_buffer(png_ptr, msg, warning_message);
-      png_warning(png_ptr, msg);
-   }
-}
-#endif /* WARNINGS */
-
-#ifdef PNG_READ_SUPPORTED
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_chunk_benign_error(png_const_structrp png_ptr, png_const_charp
-    error_message)
-{
-   if ((png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN) != 0)
-      png_chunk_warning(png_ptr, error_message);
-
-   else
-      png_chunk_error(png_ptr, error_message);
-
-#  ifndef PNG_ERROR_TEXT_SUPPORTED
-      PNG_UNUSED(error_message)
-#  endif
-}
-#endif
-#endif /* READ */
-
-void /* PRIVATE */
-png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
-{
-#  ifndef PNG_WARNINGS_SUPPORTED
-      PNG_UNUSED(message)
-#  endif
-
-   /* This is always supported, but for just read or just write it
-    * unconditionally does the right thing.
-    */
-#  if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
-#  endif
-
-#  ifdef PNG_READ_SUPPORTED
-      {
-         if (error < PNG_CHUNK_ERROR)
-            png_chunk_warning(png_ptr, message);
-
-         else
-            png_chunk_benign_error(png_ptr, message);
-      }
-#  endif
-
-#  if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
-      else if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
-#  endif
-
-#  ifdef PNG_WRITE_SUPPORTED
-      {
-         if (error < PNG_CHUNK_WRITE_ERROR)
-            png_app_warning(png_ptr, message);
-
-         else
-            png_app_error(png_ptr, message);
-      }
-#  endif
-}
-
-#ifdef PNG_ERROR_TEXT_SUPPORTED
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_FUNCTION(void,
-png_fixed_error,(png_const_structrp png_ptr, png_const_charp name),PNG_NORETURN)
-{
-#  define fixed_message "fixed point overflow in "
-#  define fixed_message_ln ((sizeof fixed_message)-1)
-   int  iin;
-   char msg[fixed_message_ln+PNG_MAX_ERROR_TEXT];
-   memcpy(msg, fixed_message, fixed_message_ln);
-   iin = 0;
-   if (name != NULL)
-      while (iin < (PNG_MAX_ERROR_TEXT-1) && name[iin] != 0)
-      {
-         msg[fixed_message_ln + iin] = name[iin];
-         ++iin;
-      }
-   msg[fixed_message_ln + iin] = 0;
-   png_error(png_ptr, msg);
-}
-#endif
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-/* This API only exists if ANSI-C style error handling is used,
- * otherwise it is necessary for png_default_error to be overridden.
- */
-jmp_buf* PNGAPI
-png_set_longjmp_fn(png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
-    size_t jmp_buf_size)
-{
-   /* From libpng 1.6.0 the app gets one chance to set a 'jmpbuf_size' value
-    * and it must not change after that.  Libpng doesn't care how big the
-    * buffer is, just that it doesn't change.
-    *
-    * If the buffer size is no *larger* than the size of jmp_buf when libpng is
-    * compiled a built in jmp_buf is returned; this preserves the pre-1.6.0
-    * semantics that this call will not fail.  If the size is larger, however,
-    * the buffer is allocated and this may fail, causing the function to return
-    * NULL.
-    */
-   if (png_ptr == NULL)
-      return NULL;
-
-   if (png_ptr->jmp_buf_ptr == NULL)
-   {
-      png_ptr->jmp_buf_size = 0; /* not allocated */
-
-      if (jmp_buf_size <= (sizeof png_ptr->jmp_buf_local))
-         png_ptr->jmp_buf_ptr = &png_ptr->jmp_buf_local;
-
-      else
-      {
-         png_ptr->jmp_buf_ptr = png_voidcast(jmp_buf *,
-            png_malloc_warn(png_ptr, jmp_buf_size));
-
-         if (png_ptr->jmp_buf_ptr == NULL)
-            return NULL; /* new NULL return on OOM */
-
-         png_ptr->jmp_buf_size = jmp_buf_size;
-      }
-   }
-
-   else /* Already allocated: check the size */
-   {
-      size_t size = png_ptr->jmp_buf_size;
-
-      if (size == 0)
-      {
-         size = (sizeof png_ptr->jmp_buf_local);
-         if (png_ptr->jmp_buf_ptr != &png_ptr->jmp_buf_local)
-         {
-            /* This is an internal error in libpng: somehow we have been left
-             * with a stack allocated jmp_buf when the application regained
-             * control.  It's always possible to fix this up, but for the moment
-             * this is a png_error because that makes it easy to detect.
-             */
-            png_error(png_ptr, "Libpng jmp_buf still allocated");
-            /* png_ptr->jmp_buf_ptr = &png_ptr->jmp_buf_local; */
-         }
-      }
-
-      if (size != jmp_buf_size)
-      {
-         png_warning(png_ptr, "Application jmp_buf size changed");
-         return NULL; /* caller will probably crash: no choice here */
-      }
-   }
-
-   /* Finally fill in the function, now we have a satisfactory buffer. It is
-    * valid to change the function on every call.
-    */
-   png_ptr->longjmp_fn = longjmp_fn;
-   return png_ptr->jmp_buf_ptr;
-}
-
-void /* PRIVATE */
-png_free_jmpbuf(png_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-   {
-      jmp_buf *jb = png_ptr->jmp_buf_ptr;
-
-      /* A size of 0 is used to indicate a local, stack, allocation of the
-       * pointer; used here and in png.c
-       */
-      if (jb != NULL && png_ptr->jmp_buf_size > 0)
-      {
-
-         /* This stuff is so that a failure to free the error control structure
-          * does not leave libpng in a state with no valid error handling: the
-          * free always succeeds, if there is an error it gets ignored.
-          */
-         if (jb != &png_ptr->jmp_buf_local)
-         {
-            /* Make an internal, libpng, jmp_buf to return here */
-            jmp_buf free_jmp_buf;
-
-            if (!setjmp(free_jmp_buf))
-            {
-               png_ptr->jmp_buf_ptr = &free_jmp_buf; /* come back here */
-               png_ptr->jmp_buf_size = 0; /* stack allocation */
-               png_ptr->longjmp_fn = longjmp;
-               png_free(png_ptr, jb); /* Return to setjmp on error */
-            }
-         }
-      }
-
-      /* *Always* cancel everything out: */
-      png_ptr->jmp_buf_size = 0;
-      png_ptr->jmp_buf_ptr = NULL;
-      png_ptr->longjmp_fn = 0;
-   }
-}
-#endif
-
-/* This is the default error handling function.  Note that replacements for
- * this function MUST NOT RETURN, or the program will likely crash.  This
- * function is used by default, or if the program supplies NULL for the
- * error function pointer in png_set_error_fn().
- */
-static PNG_FUNCTION(void /* PRIVATE */,
-png_default_error,(png_const_structrp png_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-#ifdef PNG_CONSOLE_IO_SUPPORTED
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   /* Check on NULL only added in 1.5.4 */
-   if (error_message != NULL && *error_message == PNG_LITERAL_SHARP)
-   {
-      /* Strip "#nnnn " from beginning of error message. */
-      int offset;
-      char error_number[16];
-      for (offset = 0; offset<15; offset++)
-      {
-         error_number[offset] = error_message[offset + 1];
-         if (error_message[offset] == ' ')
-            break;
-      }
-
-      if ((offset > 1) && (offset < 15))
-      {
-         error_number[offset - 1] = '\0';
-         fprintf(stderr, "libpng error no. %s: %s",
-             error_number, error_message + offset + 1);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-
-      else
-      {
-         fprintf(stderr, "libpng error: %s, offset=%d",
-             error_message, offset);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-   }
-   else
-#endif
-   {
-      fprintf(stderr, "libpng error: %s", error_message ? error_message :
-         "undefined");
-      fprintf(stderr, PNG_STRING_NEWLINE);
-   }
-#else
-   PNG_UNUSED(error_message) /* Make compiler happy */
-#endif
-   png_longjmp(png_ptr, 1);
-}
-
-PNG_FUNCTION(void,PNGAPI
-png_longjmp,(png_const_structrp png_ptr, int val),PNG_NORETURN)
-{
-#ifdef PNG_SETJMP_SUPPORTED
-   if (png_ptr != NULL && png_ptr->longjmp_fn != NULL &&
-       png_ptr->jmp_buf_ptr != NULL)
-      png_ptr->longjmp_fn(*png_ptr->jmp_buf_ptr, val);
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(val)
-#endif
-
-   /* If control reaches this point, png_longjmp() must not return. The only
-    * choice is to terminate the whole process (or maybe the thread); to do
-    * this the ANSI-C abort() function is used unless a different method is 
-    * implemented by overriding the default configuration setting for
-    * PNG_ABORT().
-    */
-   PNG_ABORT();
-}
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* This function is called when there is a warning, but the library thinks
- * it can continue anyway.  Replacement functions don't have to do anything
- * here if you don't want them to.  In the default configuration, png_ptr is
- * not used, but it is passed in case it may be useful.
- */
-static void /* PRIVATE */
-png_default_warning(png_const_structrp png_ptr, png_const_charp warning_message)
-{
-#ifdef PNG_CONSOLE_IO_SUPPORTED
-#  ifdef PNG_ERROR_NUMBERS_SUPPORTED
-   if (*warning_message == PNG_LITERAL_SHARP)
-   {
-      int offset;
-      char warning_number[16];
-      for (offset = 0; offset < 15; offset++)
-      {
-         warning_number[offset] = warning_message[offset + 1];
-         if (warning_message[offset] == ' ')
-            break;
-      }
-
-      if ((offset > 1) && (offset < 15))
-      {
-         warning_number[offset + 1] = '\0';
-         fprintf(stderr, "libpng warning no. %s: %s",
-             warning_number, warning_message + offset);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-
-      else
-      {
-         fprintf(stderr, "libpng warning: %s",
-             warning_message);
-         fprintf(stderr, PNG_STRING_NEWLINE);
-      }
-   }
-   else
-#  endif
-
-   {
-      fprintf(stderr, "libpng warning: %s", warning_message);
-      fprintf(stderr, PNG_STRING_NEWLINE);
-   }
-#else
-   PNG_UNUSED(warning_message) /* Make compiler happy */
-#endif
-   PNG_UNUSED(png_ptr) /* Make compiler happy */
-}
-#endif /* WARNINGS */
-
-/* This function is called when the application wants to use another method
- * of handling errors and warnings.  Note that the error function MUST NOT
- * return to the calling routine or serious problems will occur.  The return
- * method used in the default routine calls longjmp(png_ptr->jmp_buf_ptr, 1)
- */
-void PNGAPI
-png_set_error_fn(png_structrp png_ptr, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warning_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->error_ptr = error_ptr;
-   png_ptr->error_fn = error_fn;
-#ifdef PNG_WARNINGS_SUPPORTED
-   png_ptr->warning_fn = warning_fn;
-#else
-   PNG_UNUSED(warning_fn)
-#endif
-}
-
-
-/* This function returns a pointer to the error_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_error_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return NULL;
-
-   return ((png_voidp)png_ptr->error_ptr);
-}
-
-
-#ifdef PNG_ERROR_NUMBERS_SUPPORTED
-void PNGAPI
-png_set_strip_error_numbers(png_structrp png_ptr, png_uint_32 strip_mode)
-{
-   if (png_ptr != NULL)
-   {
-      png_ptr->flags &=
-         ((~(PNG_FLAG_STRIP_ERROR_NUMBERS |
-         PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
-   }
-}
-#endif
-
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-   /* Currently the above both depend on SETJMP_SUPPORTED, however it would be
-    * possible to implement without setjmp support just so long as there is some
-    * way to handle the error return here:
-    */
-PNG_FUNCTION(void /* PRIVATE */, (PNGCBAPI
-png_safe_error),(png_structp png_nonconst_ptr, png_const_charp error_message),
-   PNG_NORETURN)
-{
-   const png_const_structrp png_ptr = png_nonconst_ptr;
-   png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
-
-   /* An error is always logged here, overwriting anything (typically a warning)
-    * that is already there:
-    */
-   if (image != NULL)
-   {
-      png_safecat(image->message, (sizeof image->message), 0, error_message);
-      image->warning_or_error |= PNG_IMAGE_ERROR;
-
-      /* Retrieve the jmp_buf from within the png_control, making this work for
-       * C++ compilation too is pretty tricky: C++ wants a pointer to the first
-       * element of a jmp_buf, but C doesn't tell us the type of that.
-       */
-      if (image->opaque != NULL && image->opaque->error_buf != NULL)
-         longjmp(png_control_jmp_buf(image->opaque), 1);
-
-      /* Missing longjmp buffer, the following is to help debugging: */
-      {
-         size_t pos = png_safecat(image->message, (sizeof image->message), 0,
-            "bad longjmp: ");
-         png_safecat(image->message, (sizeof image->message), pos,
-             error_message);
-      }
-   }
-
-   /* Here on an internal programming error. */
-   abort();
-}
-
-#ifdef PNG_WARNINGS_SUPPORTED
-void /* PRIVATE */ PNGCBAPI
-png_safe_warning(png_structp png_nonconst_ptr, png_const_charp warning_message)
-{
-   const png_const_structrp png_ptr = png_nonconst_ptr;
-   png_imagep image = png_voidcast(png_imagep, png_ptr->error_ptr);
-
-   /* A warning is only logged if there is no prior warning or error. */
-   if (image->warning_or_error == 0)
-   {
-      png_safecat(image->message, (sizeof image->message), 0, warning_message);
-      image->warning_or_error |= PNG_IMAGE_WARNING;
-   }
-}
-#endif
-
-int /* PRIVATE */
-png_safe_execute(png_imagep image_in, int (*function)(png_voidp), png_voidp arg)
-{
-   volatile png_imagep image = image_in;
-   volatile int result;
-   volatile png_voidp saved_error_buf;
-   jmp_buf safe_jmpbuf;
-
-   /* Safely execute function(arg) with png_error returning to this function. */
-   saved_error_buf = image->opaque->error_buf;
-   result = setjmp(safe_jmpbuf) == 0;
-
-   if (result != 0)
-   {
-
-      image->opaque->error_buf = safe_jmpbuf;
-      result = function(arg);
-   }
-
-   image->opaque->error_buf = saved_error_buf;
-
-   /* And do the cleanup prior to any failure return. */
-   if (result == 0)
-      png_image_free(image);
-
-   return result;
-}
-#endif /* SIMPLIFIED READ || SIMPLIFIED_WRITE */
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/pngget.c
+++ /dev/null
@@ -1,1213 +1,0 @@
-
-/* pngget.c - retrieval of values from info struct
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-png_uint_32 PNGAPI
-png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 flag)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->valid & flag);
-
-   return(0);
-}
-
-png_size_t PNGAPI
-png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->rowbytes);
-
-   return(0);
-}
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-png_bytepp PNGAPI
-png_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->row_pointers);
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_EASY_ACCESS_SUPPORTED
-/* Easy access to info, added in libpng-0.99 */
-png_uint_32 PNGAPI
-png_get_image_width(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->width;
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_image_height(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->height;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_bit_depth(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->bit_depth;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->color_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_filter_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->filter_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_interlace_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->interlace_type;
-
-   return (0);
-}
-
-png_byte PNGAPI
-png_get_compression_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return info_ptr->compression_type;
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
-   info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-      {
-         png_debug1(1, "in %s retrieval function",
-             "png_get_x_pixels_per_meter");
-
-         if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-            return (info_ptr->x_pixels_per_unit);
-      }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp
-    info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function",
-          "png_get_y_pixels_per_meter");
-
-      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)
-         return (info_ptr->y_pixels_per_unit);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_pixels_per_meter(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
-
-      if (info_ptr->phys_unit_type == PNG_RESOLUTION_METER &&
-          info_ptr->x_pixels_per_unit == info_ptr->y_pixels_per_unit)
-         return (info_ptr->x_pixels_per_unit);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_pixel_aspect_ratio(png_const_structrp png_ptr, png_const_inforp
-   info_ptr)
-{
-#ifdef PNG_READ_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
-
-      if (info_ptr->x_pixels_per_unit != 0)
-         return ((float)((float)info_ptr->y_pixels_per_unit
-             /(float)info_ptr->x_pixels_per_unit));
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return ((float)0.0);
-}
-#endif
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_fixed_point PNGAPI
-png_get_pixel_aspect_ratio_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-#ifdef PNG_READ_pHYs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0 &&
-       info_ptr->x_pixels_per_unit > 0 && info_ptr->y_pixels_per_unit > 0 &&
-       info_ptr->x_pixels_per_unit <= PNG_UINT_31_MAX &&
-       info_ptr->y_pixels_per_unit <= PNG_UINT_31_MAX)
-   {
-      png_fixed_point res;
-
-      png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio_fixed");
-
-      /* The following casts work because a PNG 4 byte integer only has a valid
-       * range of 0..2^31-1; otherwise the cast might overflow.
-       */
-      if (png_muldiv(&res, (png_int_32)info_ptr->y_pixels_per_unit, PNG_FP_1,
-          (png_int_32)info_ptr->x_pixels_per_unit) != 0)
-         return res;
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return 0;
-}
-#endif
-
-png_int_32 PNGAPI
-png_get_x_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_oFFs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->x_offset);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_microns(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_oFFs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_MICROMETER)
-         return (info_ptr->y_offset);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_x_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_oFFs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_x_offset_pixels");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->x_offset);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-png_int_32 PNGAPI
-png_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-#ifdef PNG_oFFs_SUPPORTED
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_oFFs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "png_get_y_offset_pixels");
-
-      if (info_ptr->offset_unit_type == PNG_OFFSET_PIXEL)
-         return (info_ptr->y_offset);
-   }
-#else
-   PNG_UNUSED(png_ptr)
-   PNG_UNUSED(info_ptr)
-#endif
-
-   return (0);
-}
-
-#ifdef PNG_INCH_CONVERSIONS_SUPPORTED
-static png_uint_32
-ppi_from_ppm(png_uint_32 ppm)
-{
-#if 0
-   /* The conversion is *(2.54/100), in binary (32 digits):
-    * .00000110100000001001110101001001
-    */
-   png_uint_32 t1001, t1101;
-   ppm >>= 1;                  /* .1 */
-   t1001 = ppm + (ppm >> 3);   /* .1001 */
-   t1101 = t1001 + (ppm >> 1); /* .1101 */
-   ppm >>= 20;                 /* .000000000000000000001 */
-   t1101 += t1101 >> 15;       /* .1101000000000001101 */
-   t1001 >>= 11;               /* .000000000001001 */
-   t1001 += t1001 >> 12;       /* .000000000001001000000001001 */
-   ppm += t1001;               /* .000000000001001000001001001 */
-   ppm += t1101;               /* .110100000001001110101001001 */
-   return (ppm + 16) >> 5;/* .00000110100000001001110101001001 */
-#else
-   /* The argument is a PNG unsigned integer, so it is not permitted
-    * to be bigger than 2^31.
-    */
-   png_fixed_point result;
-   if (ppm <= PNG_UINT_31_MAX && png_muldiv(&result, (png_int_32)ppm, 127,
-       5000) != 0)
-      return result;
-
-   /* Overflow. */
-   return 0;
-#endif
-}
-
-png_uint_32 PNGAPI
-png_get_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_pixels_per_meter(png_ptr, info_ptr));
-}
-
-png_uint_32 PNGAPI
-png_get_x_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_x_pixels_per_meter(png_ptr, info_ptr));
-}
-
-png_uint_32 PNGAPI
-png_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   return ppi_from_ppm(png_get_y_pixels_per_meter(png_ptr, info_ptr));
-}
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-static png_fixed_point
-png_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
-{
-   /* Convert from metres * 1,000,000 to inches * 100,000, meters to
-    * inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
-    * Notice that this can overflow - a warning is output and 0 is
-    * returned.
-    */
-   return png_muldiv_warn(png_ptr, microns, 500, 127);
-}
-
-png_fixed_point PNGAPI
-png_get_x_offset_inches_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-   return png_fixed_inches_from_microns(png_ptr,
-       png_get_x_offset_microns(png_ptr, info_ptr));
-}
-#endif
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-png_fixed_point PNGAPI
-png_get_y_offset_inches_fixed(png_const_structrp png_ptr,
-    png_const_inforp info_ptr)
-{
-   return png_fixed_inches_from_microns(png_ptr,
-       png_get_y_offset_microns(png_ptr, info_ptr));
-}
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_x_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   /* To avoid the overflow do the conversion directly in floating
-    * point.
-    */
-   return (float)(png_get_x_offset_microns(png_ptr, info_ptr) * .00003937);
-}
-#endif
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-float PNGAPI
-png_get_y_offset_inches(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   /* To avoid the overflow do the conversion directly in floating
-    * point.
-    */
-   return (float)(png_get_y_offset_microns(png_ptr, info_ptr) * .00003937);
-}
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
-   png_uint_32 retval = 0;
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "pHYs");
-
-      if (res_x != NULL)
-      {
-         *res_x = info_ptr->x_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (res_y != NULL)
-      {
-         *res_y = info_ptr->y_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (unit_type != NULL)
-      {
-         *unit_type = (int)info_ptr->phys_unit_type;
-         retval |= PNG_INFO_pHYs;
-
-         if (*unit_type == 1)
-         {
-            if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
-            if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
-         }
-      }
-   }
-
-   return (retval);
-}
-#endif /* pHYs */
-#endif  /* INCH_CONVERSIONS */
-
-/* png_get_channels really belongs in here, too, but it's been around longer */
-
-#endif  /* EASY_ACCESS */
-
-
-png_byte PNGAPI
-png_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->channels);
-
-   return (0);
-}
-
-#ifdef PNG_READ_SUPPORTED
-png_const_bytep PNGAPI
-png_get_signature(png_const_structrp png_ptr, png_const_inforp info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return(info_ptr->signature);
-
-   return (NULL);
-}
-#endif
-
-#ifdef PNG_bKGD_SUPPORTED
-png_uint_32 PNGAPI
-png_get_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
-   png_color_16p *background)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_bKGD) != 0 &&
-       background != NULL)
-   {
-      png_debug1(1, "in %s retrieval function", "bKGD");
-
-      *background = &(info_ptr->background);
-      return (PNG_INFO_bKGD);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-/* The XYZ APIs were added in 1.5.5 to take advantage of the code added at the
- * same time to correct the rgb grayscale coefficient defaults obtained from the
- * cHRM chunk in 1.5.4
- */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    double *white_x, double *white_y, double *red_x, double *red_y,
-    double *green_x, double *green_y, double *blue_x, double *blue_y)
-{
-   /* Quiet API change: this code used to only return the end points if a cHRM
-    * chunk was present, but the end points can also come from iCCP or sRGB
-    * chunks, so in 1.6.0 the png_get_ APIs return the end points regardless and
-    * the png_set_ APIs merely check that set end points are mutually
-    * consistent.
-    */
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM");
-
-      if (white_x != NULL)
-         *white_x = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.whitex, "cHRM white X");
-      if (white_y != NULL)
-         *white_y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.whitey, "cHRM white Y");
-      if (red_x != NULL)
-         *red_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redx,
-            "cHRM red X");
-      if (red_y != NULL)
-         *red_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.redy,
-            "cHRM red Y");
-      if (green_x != NULL)
-         *green_x = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.greenx, "cHRM green X");
-      if (green_y != NULL)
-         *green_y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_xy.greeny, "cHRM green Y");
-      if (blue_x != NULL)
-         *blue_x = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluex,
-            "cHRM blue X");
-      if (blue_y != NULL)
-         *blue_y = png_float(png_ptr, info_ptr->colorspace.end_points_xy.bluey,
-            "cHRM blue Y");
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
-   double *red_X, double *red_Y, double *red_Z, double *green_X,
-   double *green_Y, double *green_Z, double *blue_X, double *blue_Y,
-   double *blue_Z)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ(float)");
-
-      if (red_X != NULL)
-         *red_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_X,
-            "cHRM red X");
-      if (red_Y != NULL)
-         *red_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Y,
-            "cHRM red Y");
-      if (red_Z != NULL)
-         *red_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.red_Z,
-            "cHRM red Z");
-      if (green_X != NULL)
-         *green_X = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_X, "cHRM green X");
-      if (green_Y != NULL)
-         *green_Y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_Y, "cHRM green Y");
-      if (green_Z != NULL)
-         *green_Z = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
-      if (blue_X != NULL)
-         *blue_X = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
-      if (blue_Y != NULL)
-         *blue_Y = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
-      if (blue_Z != NULL)
-         *blue_Z = png_float(png_ptr,
-            info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-#  endif
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
-    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
-    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
-    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
-    png_fixed_point *int_blue_Z)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "cHRM_XYZ");
-
-      if (int_red_X != NULL)
-         *int_red_X = info_ptr->colorspace.end_points_XYZ.red_X;
-      if (int_red_Y != NULL)
-         *int_red_Y = info_ptr->colorspace.end_points_XYZ.red_Y;
-      if (int_red_Z != NULL)
-         *int_red_Z = info_ptr->colorspace.end_points_XYZ.red_Z;
-      if (int_green_X != NULL)
-         *int_green_X = info_ptr->colorspace.end_points_XYZ.green_X;
-      if (int_green_Y != NULL)
-         *int_green_Y = info_ptr->colorspace.end_points_XYZ.green_Y;
-      if (int_green_Z != NULL)
-         *int_green_Z = info_ptr->colorspace.end_points_XYZ.green_Z;
-      if (int_blue_X != NULL)
-         *int_blue_X = info_ptr->colorspace.end_points_XYZ.blue_X;
-      if (int_blue_Y != NULL)
-         *int_blue_Y = info_ptr->colorspace.end_points_XYZ.blue_Y;
-      if (int_blue_Z != NULL)
-         *int_blue_Z = info_ptr->colorspace.end_points_XYZ.blue_Z;
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-
-png_uint_32 PNGAPI
-png_get_cHRM_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
-    png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
-    png_fixed_point *blue_x, png_fixed_point *blue_y)
-{
-   png_debug1(1, "in %s retrieval function", "cHRM");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_ENDPOINTS) != 0)
-   {
-      if (white_x != NULL)
-         *white_x = info_ptr->colorspace.end_points_xy.whitex;
-      if (white_y != NULL)
-         *white_y = info_ptr->colorspace.end_points_xy.whitey;
-      if (red_x != NULL)
-         *red_x = info_ptr->colorspace.end_points_xy.redx;
-      if (red_y != NULL)
-         *red_y = info_ptr->colorspace.end_points_xy.redy;
-      if (green_x != NULL)
-         *green_x = info_ptr->colorspace.end_points_xy.greenx;
-      if (green_y != NULL)
-         *green_y = info_ptr->colorspace.end_points_xy.greeny;
-      if (blue_x != NULL)
-         *blue_x = info_ptr->colorspace.end_points_xy.bluex;
-      if (blue_y != NULL)
-         *blue_y = info_ptr->colorspace.end_points_xy.bluey;
-      return (PNG_INFO_cHRM);
-   }
-
-   return (0);
-}
-#  endif
-#endif
-
-#ifdef PNG_gAMA_SUPPORTED
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_fixed_point *file_gamma)
-{
-   png_debug1(1, "in %s retrieval function", "gAMA");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
-      file_gamma != NULL)
-   {
-      *file_gamma = info_ptr->colorspace.gamma;
-      return (PNG_INFO_gAMA);
-   }
-
-   return (0);
-}
-#  endif
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_gAMA(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    double *file_gamma)
-{
-   png_debug1(1, "in %s retrieval function", "gAMA(float)");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) != 0 &&
-      file_gamma != NULL)
-   {
-      *file_gamma = png_float(png_ptr, info_ptr->colorspace.gamma,
-         "png_get_gAMA");
-      return (PNG_INFO_gAMA);
-   }
-
-   return (0);
-}
-#  endif
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sRGB(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *file_srgb_intent)
-{
-   png_debug1(1, "in %s retrieval function", "sRGB");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-      (info_ptr->valid & PNG_INFO_sRGB) != 0 && file_srgb_intent != NULL)
-   {
-      *file_srgb_intent = info_ptr->colorspace.rendering_intent;
-      return (PNG_INFO_sRGB);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-png_uint_32 PNGAPI
-png_get_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_charpp name, int *compression_type,
-    png_bytepp profile, png_uint_32 *proflen)
-{
-   png_debug1(1, "in %s retrieval function", "iCCP");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_iCCP) != 0 &&
-       name != NULL && compression_type != NULL && profile != NULL &&
-           proflen != NULL)
-   {
-      *name = info_ptr->iccp_name;
-      *profile = info_ptr->iccp_profile;
-      *proflen = png_get_uint_32(info_ptr->iccp_profile);
-      /* This is somewhat irrelevant since the profile data returned has
-       * actually been uncompressed.
-       */
-      *compression_type = PNG_COMPRESSION_TYPE_BASE;
-      return (PNG_INFO_iCCP);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-int PNGAPI
-png_get_sPLT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_sPLT_tpp spalettes)
-{
-   if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
-   {
-      *spalettes = info_ptr->splt_palettes;
-      return info_ptr->splt_palettes_num;
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-png_uint_32 PNGAPI
-png_get_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_16p *hist)
-{
-   png_debug1(1, "in %s retrieval function", "hIST");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_hIST) != 0 && hist != NULL)
-   {
-      *hist = info_ptr->hist;
-      return (PNG_INFO_hIST);
-   }
-
-   return (0);
-}
-#endif
-
-png_uint_32 PNGAPI
-png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *width, png_uint_32 *height, int *bit_depth,
-    int *color_type, int *interlace_type, int *compression_type,
-    int *filter_type)
-{
-   png_debug1(1, "in %s retrieval function", "IHDR");
-
-   if (png_ptr == NULL || info_ptr == NULL || width == NULL ||
-       height == NULL || bit_depth == NULL || color_type == NULL)
-      return (0);
-
-   *width = info_ptr->width;
-   *height = info_ptr->height;
-   *bit_depth = info_ptr->bit_depth;
-   *color_type = info_ptr->color_type;
-
-   if (compression_type != NULL)
-      *compression_type = info_ptr->compression_type;
-
-   if (filter_type != NULL)
-      *filter_type = info_ptr->filter_type;
-
-   if (interlace_type != NULL)
-      *interlace_type = info_ptr->interlace_type;
-
-   /* This is redundant if we can be sure that the info_ptr values were all
-    * assigned in png_set_IHDR().  We do the check anyhow in case an
-    * application has ignored our advice not to mess with the members
-    * of info_ptr directly.
-    */
-   png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
-       info_ptr->compression_type, info_ptr->filter_type);
-
-   return (1);
-}
-
-#ifdef PNG_oFFs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_oFFs(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
-{
-   png_debug1(1, "in %s retrieval function", "oFFs");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_oFFs) != 0 &&
-       offset_x != NULL && offset_y != NULL && unit_type != NULL)
-   {
-      *offset_x = info_ptr->x_offset;
-      *offset_y = info_ptr->y_offset;
-      *unit_type = (int)info_ptr->offset_unit_type;
-      return (PNG_INFO_oFFs);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
-    png_charp *units, png_charpp *params)
-{
-   png_debug1(1, "in %s retrieval function", "pCAL");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pCAL) != 0 &&
-       purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
-       nparams != NULL && units != NULL && params != NULL)
-   {
-      *purpose = info_ptr->pcal_purpose;
-      *X0 = info_ptr->pcal_X0;
-      *X1 = info_ptr->pcal_X1;
-      *type = (int)info_ptr->pcal_type;
-      *nparams = (int)info_ptr->pcal_nparams;
-      *units = info_ptr->pcal_units;
-      *params = info_ptr->pcal_params;
-      return (PNG_INFO_pCAL);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-#    if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
-         defined(PNG_FLOATING_POINT_SUPPORTED)
-png_uint_32 PNGAPI
-png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, png_fixed_point *width, png_fixed_point *height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL) != 0)
-   {
-      *unit = info_ptr->scal_unit;
-      /*TODO: make this work without FP support; the API is currently eliminated
-       * if neither floating point APIs nor internal floating point arithmetic
-       * are enabled.
-       */
-      *width = png_fixed(png_ptr, atof(info_ptr->scal_s_width), "sCAL width");
-      *height = png_fixed(png_ptr, atof(info_ptr->scal_s_height),
-         "sCAL height");
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#    endif /* FLOATING_ARITHMETIC */
-#  endif /* FIXED_POINT */
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, double *width, double *height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL) != 0)
-   {
-      *unit = info_ptr->scal_unit;
-      *width = atof(info_ptr->scal_s_width);
-      *height = atof(info_ptr->scal_s_height);
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#  endif /* FLOATING POINT */
-png_uint_32 PNGAPI
-png_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    int *unit, png_charpp width, png_charpp height)
-{
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sCAL) != 0)
-   {
-      *unit = info_ptr->scal_unit;
-      *width = info_ptr->scal_s_width;
-      *height = info_ptr->scal_s_height;
-      return (PNG_INFO_sCAL);
-   }
-
-   return(0);
-}
-#endif /* sCAL */
-
-#ifdef PNG_pHYs_SUPPORTED
-png_uint_32 PNGAPI
-png_get_pHYs(png_const_structrp png_ptr, png_const_inforp info_ptr,
-    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
-{
-   png_uint_32 retval = 0;
-
-   png_debug1(1, "in %s retrieval function", "pHYs");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      if (res_x != NULL)
-      {
-         *res_x = info_ptr->x_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (res_y != NULL)
-      {
-         *res_y = info_ptr->y_pixels_per_unit;
-         retval |= PNG_INFO_pHYs;
-      }
-
-      if (unit_type != NULL)
-      {
-         *unit_type = (int)info_ptr->phys_unit_type;
-         retval |= PNG_INFO_pHYs;
-      }
-   }
-
-   return (retval);
-}
-#endif /* pHYs */
-
-png_uint_32 PNGAPI
-png_get_PLTE(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_colorp *palette, int *num_palette)
-{
-   png_debug1(1, "in %s retrieval function", "PLTE");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_PLTE) != 0 && palette != NULL)
-   {
-      *palette = info_ptr->palette;
-      *num_palette = info_ptr->num_palette;
-      png_debug1(3, "num_palette = %d", *num_palette);
-      return (PNG_INFO_PLTE);
-   }
-
-   return (0);
-}
-
-#ifdef PNG_sBIT_SUPPORTED
-png_uint_32 PNGAPI
-png_get_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_color_8p *sig_bit)
-{
-   png_debug1(1, "in %s retrieval function", "sBIT");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_sBIT) != 0 && sig_bit != NULL)
-   {
-      *sig_bit = &(info_ptr->sig_bit);
-      return (PNG_INFO_sBIT);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-int PNGAPI
-png_get_text(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_textp *text_ptr, int *num_text)
-{
-   if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
-   {
-      png_debug1(1, "in 0x%lx retrieval function",
-         (unsigned long)png_ptr->chunk_name);
-
-      if (text_ptr != NULL)
-         *text_ptr = info_ptr->text;
-
-      if (num_text != NULL)
-         *num_text = info_ptr->num_text;
-
-      return info_ptr->num_text;
-   }
-
-   if (num_text != NULL)
-      *num_text = 0;
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-png_uint_32 PNGAPI
-png_get_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_timep *mod_time)
-{
-   png_debug1(1, "in %s retrieval function", "tIME");
-
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_tIME) != 0 && mod_time != NULL)
-   {
-      *mod_time = &(info_ptr->mod_time);
-      return (PNG_INFO_tIME);
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-png_uint_32 PNGAPI
-png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
-{
-   png_uint_32 retval = 0;
-   if (png_ptr != NULL && info_ptr != NULL &&
-       (info_ptr->valid & PNG_INFO_tRNS) != 0)
-   {
-      png_debug1(1, "in %s retrieval function", "tRNS");
-
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (trans_alpha != NULL)
-         {
-            *trans_alpha = info_ptr->trans_alpha;
-            retval |= PNG_INFO_tRNS;
-         }
-
-         if (trans_color != NULL)
-            *trans_color = &(info_ptr->trans_color);
-      }
-
-      else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
-      {
-         if (trans_color != NULL)
-         {
-            *trans_color = &(info_ptr->trans_color);
-            retval |= PNG_INFO_tRNS;
-         }
-
-         if (trans_alpha != NULL)
-            *trans_alpha = NULL;
-      }
-
-      if (num_trans != NULL)
-      {
-         *num_trans = info_ptr->num_trans;
-         retval |= PNG_INFO_tRNS;
-      }
-   }
-
-   return (retval);
-}
-#endif
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-int PNGAPI
-png_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_unknown_chunkpp unknowns)
-{
-   if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
-   {
-      *unknowns = info_ptr->unknown_chunks;
-      return info_ptr->unknown_chunks_num;
-   }
-
-   return (0);
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-png_byte PNGAPI
-png_get_rgb_to_gray_status (png_const_structrp png_ptr)
-{
-   return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0);
-}
-#endif
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-png_voidp PNGAPI
-png_get_user_chunk_ptr(png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_ptr : NULL);
-}
-#endif
-
-png_size_t PNGAPI
-png_get_compression_buffer_size(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return 0;
-
-#  ifdef PNG_WRITE_SUPPORTED
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
-#  endif
-   {
-#     ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-         return png_ptr->IDAT_read_size;
-#     else
-         return PNG_IDAT_READ_SIZE;
-#     endif
-   }
-
-#  ifdef PNG_WRITE_SUPPORTED
-      else
-         return png_ptr->zbuffer_size;
-#  endif
-}
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* These functions were added to libpng 1.2.6 and were enabled
- * by default in libpng-1.4.0 */
-png_uint_32 PNGAPI
-png_get_user_width_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_width_max : 0);
-}
-
-png_uint_32 PNGAPI
-png_get_user_height_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_height_max : 0);
-}
-
-/* This function was added to libpng 1.4.0 */
-png_uint_32 PNGAPI
-png_get_chunk_cache_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_cache_max : 0);
-}
-
-/* This function was added to libpng 1.4.1 */
-png_alloc_size_t PNGAPI
-png_get_chunk_malloc_max (png_const_structrp png_ptr)
-{
-   return (png_ptr ? png_ptr->user_chunk_malloc_max : 0);
-}
-#endif /* SET_USER_LIMITS */
-
-/* These functions were added to libpng 1.4.0 */
-#ifdef PNG_IO_STATE_SUPPORTED
-png_uint_32 PNGAPI
-png_get_io_state (png_const_structrp png_ptr)
-{
-   return png_ptr->io_state;
-}
-
-png_uint_32 PNGAPI
-png_get_io_chunk_type (png_const_structrp png_ptr)
-{
-   return png_ptr->chunk_name;
-}
-#endif /* IO_STATE */
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-#  ifdef PNG_GET_PALETTE_MAX_SUPPORTED
-int PNGAPI
-png_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      return png_ptr->num_palette_max;
-
-   return (-1);
-}
-#  endif
-#endif
-
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/pnginfo.h
+++ /dev/null
@@ -1,260 +1,0 @@
-
-/* pnginfo.h - header file for PNG reference library
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
- /* png_info is a structure that holds the information in a PNG file so
- * that the application can find out the characteristics of the image.
- * If you are reading the file, this structure will tell you what is
- * in the PNG file.  If you are writing the file, fill in the information
- * you want to put into the PNG file, using png_set_*() functions, then
- * call png_write_info().
- *
- * The names chosen should be very close to the PNG specification, so
- * consult that document for information about the meaning of each field.
- *
- * With libpng < 0.95, it was only possible to directly set and read the
- * the values in the png_info_struct, which meant that the contents and
- * order of the values had to remain fixed.  With libpng 0.95 and later,
- * however, there are now functions that abstract the contents of
- * png_info_struct from the application, so this makes it easier to use
- * libpng with dynamic libraries, and even makes it possible to use
- * libraries that don't have all of the libpng ancillary chunk-handing
- * functionality.  In libpng-1.5.0 this was moved into a separate private
- * file that is not visible to applications.
- *
- * The following members may have allocated storage attached that should be
- * cleaned up before the structure is discarded: palette, trans, text,
- * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
- * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
- * are automatically freed when the info structure is deallocated, if they were
- * allocated internally by libpng.  This behavior can be changed by means
- * of the png_data_freer() function.
- *
- * More allocation details: all the chunk-reading functions that
- * change these members go through the corresponding png_set_*
- * functions.  A function to clear these members is available: see
- * png_free_data().  The png_set_* functions do not depend on being
- * able to point info structure members to any of the storage they are
- * passed (they make their own copies), EXCEPT that the png_set_text
- * functions use the same storage passed to them in the text_ptr or
- * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
- * functions do not make their own copies.
- */
-#ifndef PNGINFO_H
-#define PNGINFO_H
-
-struct png_info_def
-{
-   /* The following are necessary for every PNG file */
-   png_uint_32 width;  /* width of image in pixels (from IHDR) */
-   png_uint_32 height; /* height of image in pixels (from IHDR) */
-   png_uint_32 valid;  /* valid chunk data (see PNG_INFO_ below) */
-   png_size_t rowbytes; /* bytes needed to hold an untransformed row */
-   png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
-   png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
-   png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
-   png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
-   png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
-   /* The following three should have been named *_method not *_type */
-   png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
-   png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
-   png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
-
-   /* The following are set by png_set_IHDR, called from the application on
-    * write, but the are never actually used by the write code.
-    */
-   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
-   png_byte pixel_depth;    /* number of bits per pixel */
-   png_byte spare_byte;     /* to align the data, and for future use */
-
-#ifdef PNG_READ_SUPPORTED
-   /* This is never set during write */
-   png_byte signature[8];   /* magic bytes read by libpng from start of file */
-#endif
-
-   /* The rest of the data is optional.  If you are reading, check the
-    * valid field to see if the information in these are valid.  If you
-    * are writing, set the valid field to those chunks you want written,
-    * and initialize the appropriate fields below.
-    */
-
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-   /* png_colorspace only contains 'flags' if neither GAMMA or COLORSPACE are
-    * defined.  When COLORSPACE is switched on all the colorspace-defining
-    * chunks should be enabled, when GAMMA is switched on all the gamma-defining
-    * chunks should be enabled.  If this is not done it becomes possible to read
-    * inconsistent PNG files and assign a probably incorrect interpretation to
-    * the information.  (In other words, by carefully choosing which chunks to
-    * recognize the system configuration can select an interpretation for PNG
-    * files containing ambiguous data and this will result in inconsistent
-    * behavior between different libpng builds!)
-    */
-   png_colorspace colorspace;
-#endif
-
-#ifdef PNG_iCCP_SUPPORTED
-   /* iCCP chunk data. */
-   png_charp iccp_name;     /* profile name */
-   png_bytep iccp_profile;  /* International Color Consortium profile data */
-   png_uint_32 iccp_proflen;  /* ICC profile data length */
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-   /* The tEXt, and zTXt chunks contain human-readable textual data in
-    * uncompressed, compressed, and optionally compressed forms, respectively.
-    * The data in "text" is an array of pointers to uncompressed,
-    * null-terminated C strings. Each chunk has a keyword that describes the
-    * textual data contained in that chunk.  Keywords are not required to be
-    * unique, and the text string may be empty.  Any number of text chunks may
-    * be in an image.
-    */
-   int num_text; /* number of comments read or comments to write */
-   int max_text; /* current size of text array */
-   png_textp text; /* array of comments read or comments to write */
-#endif /* TEXT */
-
-#ifdef PNG_tIME_SUPPORTED
-   /* The tIME chunk holds the last time the displayed image data was
-    * modified.  See the png_time struct for the contents of this struct.
-    */
-   png_time mod_time;
-#endif
-
-#ifdef PNG_sBIT_SUPPORTED
-   /* The sBIT chunk specifies the number of significant high-order bits
-    * in the pixel data.  Values are in the range [1, bit_depth], and are
-    * only specified for the channels in the pixel data.  The contents of
-    * the low-order bits is not specified.  Data is valid if
-    * (valid & PNG_INFO_sBIT) is non-zero.
-    */
-   png_color_8 sig_bit; /* significant bits in color channels */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
-defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* The tRNS chunk supplies transparency data for paletted images and
-    * other image types that don't need a full alpha channel.  There are
-    * "num_trans" transparency values for a paletted image, stored in the
-    * same order as the palette colors, starting from index 0.  Values
-    * for the data are in the range [0, 255], ranging from fully transparent
-    * to fully opaque, respectively.  For non-paletted images, there is a
-    * single color specified that should be treated as fully transparent.
-    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
-    */
-   png_bytep trans_alpha;    /* alpha values for paletted image */
-   png_color_16 trans_color; /* transparent color for non-palette image */
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* The bKGD chunk gives the suggested image background color if the
-    * display program does not have its own background color and the image
-    * is needs to composited onto a background before display.  The colors
-    * in "background" are normally in the same color space/depth as the
-    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
-    */
-   png_color_16 background;
-#endif
-
-#ifdef PNG_oFFs_SUPPORTED
-   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
-    * and downwards from the top-left corner of the display, page, or other
-    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
-    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
-    */
-   png_int_32 x_offset; /* x offset on page */
-   png_int_32 y_offset; /* y offset on page */
-   png_byte offset_unit_type; /* offset units type */
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-   /* The pHYs chunk gives the physical pixel density of the image for
-    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
-    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
-    */
-   png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
-   png_uint_32 y_pixels_per_unit; /* vertical pixel density */
-   png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-   /* The hIST chunk contains the relative frequency or importance of the
-    * various palette entries, so that a viewer can intelligently select a
-    * reduced-color palette, if required.  Data is an array of "num_palette"
-    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
-    * is non-zero.
-    */
-   png_uint_16p hist;
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-   /* The pCAL chunk describes a transformation between the stored pixel
-    * values and original physical data values used to create the image.
-    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
-    * range given by [pcal_X0, pcal_X1], and are further transformed by a
-    * (possibly non-linear) transformation function given by "pcal_type"
-    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
-    * defines below, and the PNG-Group's PNG extensions document for a
-    * complete description of the transformations and how they should be
-    * implemented, and for a description of the ASCII parameter strings.
-    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
-    */
-   png_charp pcal_purpose;  /* pCAL chunk description string */
-   png_int_32 pcal_X0;      /* minimum value */
-   png_int_32 pcal_X1;      /* maximum value */
-   png_charp pcal_units;    /* Latin-1 string giving physical units */
-   png_charpp pcal_params;  /* ASCII strings containing parameter values */
-   png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
-   png_byte pcal_nparams;   /* number of parameters given in pcal_params */
-#endif
-
-/* New members added in libpng-1.0.6 */
-   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-   /* Storage for unknown chunks that the library doesn't recognize. */
-   png_unknown_chunkp unknown_chunks;
-
-   /* The type of this field is limited by the type of 
-    * png_struct::user_chunk_cache_max, else overflow can occur.
-    */
-   int                unknown_chunks_num;
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-   /* Data on sPLT chunks (there may be more than one). */
-   png_sPLT_tp splt_palettes;
-   int         splt_palettes_num; /* Match type returned by png_get API */
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-   /* The sCAL chunk describes the actual physical dimensions of the
-    * subject matter of the graphic.  The chunk contains a unit specification
-    * a byte value, and two ASCII strings representing floating-point
-    * values.  The values are width and height corresponsing to one pixel
-    * in the image.  Data values are valid if (valid & PNG_INFO_sCAL) is
-    * non-zero.
-    */
-   png_byte scal_unit;         /* unit of physical scale */
-   png_charp scal_s_width;     /* string containing height */
-   png_charp scal_s_height;    /* string containing width */
-#endif
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS)
-      non-zero */
-   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
-   png_bytepp row_pointers;        /* the image bits */
-#endif
-
-};
-#endif /* PNGINFO_H */
--- a/DoConfig/fltk/png/pnglibconf.h
+++ /dev/null
@@ -1,209 +1,0 @@
-/* pnglibconf.h - library build configuration */
-
-/* libpng version 1.6.16,December 22, 2014 */
-
-/* Copyright (c) 1998-2014 Glenn Randers-Pehrson */
-
-/* This code is released under the libpng license. */
-/* For conditions of distribution and use, see the disclaimer */
-/* and license in png.h */
-
-/* pnglibconf.h */
-/* Machine generated file: DO NOT EDIT */
-/* Derived from: scripts/pnglibconf.dfa */
-#ifndef PNGLCONF_H
-#define PNGLCONF_H
-/* options */
-#define PNG_16BIT_SUPPORTED
-#define PNG_ALIGNED_MEMORY_SUPPORTED
-/*#undef PNG_ARM_NEON_API_SUPPORTED*/
-/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/
-#define PNG_BENIGN_ERRORS_SUPPORTED
-#define PNG_BENIGN_READ_ERRORS_SUPPORTED
-/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/
-#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
-#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-#define PNG_COLORSPACE_SUPPORTED
-#define PNG_CONSOLE_IO_SUPPORTED
-#define PNG_CONVERT_tIME_SUPPORTED
-#define PNG_EASY_ACCESS_SUPPORTED
-/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/
-#define PNG_ERROR_TEXT_SUPPORTED
-#define PNG_FIXED_POINT_SUPPORTED
-#define PNG_FLOATING_ARITHMETIC_SUPPORTED
-#define PNG_FLOATING_POINT_SUPPORTED
-#define PNG_FORMAT_AFIRST_SUPPORTED
-#define PNG_FORMAT_BGR_SUPPORTED
-#define PNG_GAMMA_SUPPORTED
-#define PNG_GET_PALETTE_MAX_SUPPORTED
-#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-#define PNG_INCH_CONVERSIONS_SUPPORTED
-#define PNG_INFO_IMAGE_SUPPORTED
-#define PNG_IO_STATE_SUPPORTED
-#define PNG_MNG_FEATURES_SUPPORTED
-#define PNG_POINTER_INDEXING_SUPPORTED
-#define PNG_PROGRESSIVE_READ_SUPPORTED
-#define PNG_READ_16BIT_SUPPORTED
-#define PNG_READ_ALPHA_MODE_SUPPORTED
-#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
-#define PNG_READ_BACKGROUND_SUPPORTED
-#define PNG_READ_BGR_SUPPORTED
-#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
-#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
-#define PNG_READ_COMPRESSED_TEXT_SUPPORTED
-#define PNG_READ_EXPAND_16_SUPPORTED
-#define PNG_READ_EXPAND_SUPPORTED
-#define PNG_READ_FILLER_SUPPORTED
-#define PNG_READ_GAMMA_SUPPORTED
-#define PNG_READ_GET_PALETTE_MAX_SUPPORTED
-#define PNG_READ_GRAY_TO_RGB_SUPPORTED
-#define PNG_READ_INTERLACING_SUPPORTED
-#define PNG_READ_INT_FUNCTIONS_SUPPORTED
-#define PNG_READ_INVERT_ALPHA_SUPPORTED
-#define PNG_READ_INVERT_SUPPORTED
-#define PNG_READ_OPT_PLTE_SUPPORTED
-#define PNG_READ_PACKSWAP_SUPPORTED
-#define PNG_READ_PACK_SUPPORTED
-#define PNG_READ_QUANTIZE_SUPPORTED
-#define PNG_READ_RGB_TO_GRAY_SUPPORTED
-#define PNG_READ_SCALE_16_TO_8_SUPPORTED
-#define PNG_READ_SHIFT_SUPPORTED
-#define PNG_READ_STRIP_16_TO_8_SUPPORTED
-#define PNG_READ_STRIP_ALPHA_SUPPORTED
-#define PNG_READ_SUPPORTED
-#define PNG_READ_SWAP_ALPHA_SUPPORTED
-#define PNG_READ_SWAP_SUPPORTED
-#define PNG_READ_TEXT_SUPPORTED
-#define PNG_READ_TRANSFORMS_SUPPORTED
-#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_READ_USER_CHUNKS_SUPPORTED
-#define PNG_READ_USER_TRANSFORM_SUPPORTED
-#define PNG_READ_bKGD_SUPPORTED
-#define PNG_READ_cHRM_SUPPORTED
-#define PNG_READ_gAMA_SUPPORTED
-#define PNG_READ_hIST_SUPPORTED
-#define PNG_READ_iCCP_SUPPORTED
-#define PNG_READ_iTXt_SUPPORTED
-#define PNG_READ_oFFs_SUPPORTED
-#define PNG_READ_pCAL_SUPPORTED
-#define PNG_READ_pHYs_SUPPORTED
-#define PNG_READ_sBIT_SUPPORTED
-#define PNG_READ_sCAL_SUPPORTED
-#define PNG_READ_sPLT_SUPPORTED
-#define PNG_READ_sRGB_SUPPORTED
-#define PNG_READ_tEXt_SUPPORTED
-#define PNG_READ_tIME_SUPPORTED
-#define PNG_READ_tRNS_SUPPORTED
-#define PNG_READ_zTXt_SUPPORTED
-/*#undef PNG_SAFE_LIMITS_SUPPORTED*/
-#define PNG_SAVE_INT_32_SUPPORTED
-#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_SEQUENTIAL_READ_SUPPORTED
-#define PNG_SETJMP_SUPPORTED
-#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
-#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-#define PNG_SET_OPTION_SUPPORTED
-#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_SET_USER_LIMITS_SUPPORTED
-#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
-#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED
-#define PNG_SIMPLIFIED_READ_SUPPORTED
-#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
-#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
-#define PNG_SIMPLIFIED_WRITE_SUPPORTED
-#define PNG_STDIO_SUPPORTED
-#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_TEXT_SUPPORTED
-#define PNG_TIME_RFC1123_SUPPORTED
-#define PNG_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_USER_CHUNKS_SUPPORTED
-#define PNG_USER_LIMITS_SUPPORTED
-#define PNG_USER_MEM_SUPPORTED
-#define PNG_USER_TRANSFORM_INFO_SUPPORTED
-#define PNG_USER_TRANSFORM_PTR_SUPPORTED
-#define PNG_WARNINGS_SUPPORTED
-#define PNG_WRITE_16BIT_SUPPORTED
-#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
-#define PNG_WRITE_BGR_SUPPORTED
-#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
-#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
-#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-#define PNG_WRITE_FILLER_SUPPORTED
-#define PNG_WRITE_FILTER_SUPPORTED
-#define PNG_WRITE_FLUSH_SUPPORTED
-#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED
-#define PNG_WRITE_INTERLACING_SUPPORTED
-#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
-#define PNG_WRITE_INVERT_SUPPORTED
-#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-#define PNG_WRITE_PACKSWAP_SUPPORTED
-#define PNG_WRITE_PACK_SUPPORTED
-#define PNG_WRITE_SHIFT_SUPPORTED
-#define PNG_WRITE_SUPPORTED
-#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
-#define PNG_WRITE_SWAP_SUPPORTED
-#define PNG_WRITE_TEXT_SUPPORTED
-#define PNG_WRITE_TRANSFORMS_SUPPORTED
-#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
-#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-#define PNG_WRITE_bKGD_SUPPORTED
-#define PNG_WRITE_cHRM_SUPPORTED
-#define PNG_WRITE_gAMA_SUPPORTED
-#define PNG_WRITE_hIST_SUPPORTED
-#define PNG_WRITE_iCCP_SUPPORTED
-#define PNG_WRITE_iTXt_SUPPORTED
-#define PNG_WRITE_oFFs_SUPPORTED
-#define PNG_WRITE_pCAL_SUPPORTED
-#define PNG_WRITE_pHYs_SUPPORTED
-#define PNG_WRITE_sBIT_SUPPORTED
-#define PNG_WRITE_sCAL_SUPPORTED
-#define PNG_WRITE_sPLT_SUPPORTED
-#define PNG_WRITE_sRGB_SUPPORTED
-#define PNG_WRITE_tEXt_SUPPORTED
-#define PNG_WRITE_tIME_SUPPORTED
-#define PNG_WRITE_tRNS_SUPPORTED
-#define PNG_WRITE_zTXt_SUPPORTED
-#define PNG_bKGD_SUPPORTED
-#define PNG_cHRM_SUPPORTED
-#define PNG_gAMA_SUPPORTED
-#define PNG_hIST_SUPPORTED
-#define PNG_iCCP_SUPPORTED
-#define PNG_iTXt_SUPPORTED
-#define PNG_oFFs_SUPPORTED
-#define PNG_pCAL_SUPPORTED
-#define PNG_pHYs_SUPPORTED
-#define PNG_sBIT_SUPPORTED
-#define PNG_sCAL_SUPPORTED
-#define PNG_sPLT_SUPPORTED
-#define PNG_sRGB_SUPPORTED
-#define PNG_tEXt_SUPPORTED
-#define PNG_tIME_SUPPORTED
-#define PNG_tRNS_SUPPORTED
-#define PNG_zTXt_SUPPORTED
-/* end of options */
-/* settings */
-#define PNG_API_RULE 0
-#define PNG_COST_SHIFT 3
-#define PNG_DEFAULT_READ_MACROS 1
-#define PNG_GAMMA_THRESHOLD_FIXED 5000
-#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE
-#define PNG_INFLATE_BUF_SIZE 1024
-#define PNG_MAX_GAMMA_8 11
-#define PNG_QUANTIZE_BLUE_BITS 5
-#define PNG_QUANTIZE_GREEN_BITS 5
-#define PNG_QUANTIZE_RED_BITS 5
-#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1)
-#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
-#define PNG_WEIGHT_SHIFT 8
-#define PNG_ZBUF_SIZE 8192
-/* #define PNG_ZLIB_VERNUM 0x1270 */
-#define PNG_ZLIB_VERNUM 0x0 /* FLTK: disable check */
-#define PNG_Z_DEFAULT_COMPRESSION (-1)
-#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0
-#define PNG_Z_DEFAULT_STRATEGY 1
-#define PNG_sCAL_PRECISION 5
-#define PNG_sRGB_PROFILE_CHECKS 2
-/* end of settings */
-#endif /* PNGLCONF_H */
--- a/DoConfig/fltk/png/pngmem.c
+++ /dev/null
@@ -1,281 +1,0 @@
-
-/* pngmem.c - stub functions for memory allocation
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all memory allocation.  Users who
- * need special memory handling are expected to supply replacement
- * functions for png_malloc() and png_free(), and to use
- * png_create_read_struct_2() and png_create_write_struct_2() to
- * identify the replacement functions.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-/* Free a png_struct */
-void /* PRIVATE */
-png_destroy_png_struct(png_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-   {
-      /* png_free might call png_error and may certainly call
-       * png_get_mem_ptr, so fake a temporary png_struct to support this.
-       */
-      png_struct dummy_struct = *png_ptr;
-      memset(png_ptr, 0, (sizeof *png_ptr));
-      png_free(&dummy_struct, png_ptr);
-
-#     ifdef PNG_SETJMP_SUPPORTED
-         /* We may have a jmp_buf left to deallocate. */
-         png_free_jmpbuf(&dummy_struct);
-#     endif
-   }
-}
-
-/* Allocate memory.  For reasonable files, size should never exceed
- * 64K.  However, zlib may allocate more then 64K if you don't tell
- * it not to.  See zconf.h and png.h for more information.  zlib does
- * need to allocate exactly 64K, so whatever you call here must
- * have the ability to do that.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_calloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
-{
-   png_voidp ret;
-
-   ret = png_malloc(png_ptr, size);
-
-   if (ret != NULL)
-      memset(ret, 0, size);
-
-   return ret;
-}
-
-/* png_malloc_base, an internal function added at libpng 1.6.0, does the work of
- * allocating memory, taking into account limits and PNG_USER_MEM_SUPPORTED.
- * Checking and error handling must happen outside this routine; it returns NULL
- * if the allocation cannot be done (for any reason.)
- */
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
-   PNG_ALLOCATED)
-{
-   /* Moved to png_malloc_base from png_malloc_default in 1.6.0; the DOS
-    * allocators have also been removed in 1.6.0, so any 16-bit system now has
-    * to implement a user memory handler.  This checks to be sure it isn't
-    * called with big numbers.
-    */
-#ifndef PNG_USER_MEM_SUPPORTED
-   PNG_UNUSED(png_ptr)
-#endif
-
-   if (size > 0 && size <= PNG_SIZE_MAX
-#     ifdef PNG_MAX_MALLOC_64K
-         && size <= 65536U
-#     endif
-      )
-   {
-#ifdef PNG_USER_MEM_SUPPORTED
-      if (png_ptr != NULL && png_ptr->malloc_fn != NULL)
-         return png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
-
-      else
-#endif
-         return malloc((size_t)size); /* checked for truncation above */
-   }
-
-   else
-      return NULL;
-}
-
-#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) ||\
-   defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED)
-/* This is really here only to work round a spurious warning in GCC 4.6 and 4.7
- * that arises because of the checks in png_realloc_array that are repeated in
- * png_malloc_array.
- */
-static png_voidp
-png_malloc_array_checked(png_const_structrp png_ptr, int nelements,
-   size_t element_size)
-{
-   png_alloc_size_t req = nelements; /* known to be > 0 */
-
-   if (req <= PNG_SIZE_MAX/element_size)
-      return png_malloc_base(png_ptr, req * element_size);
-
-   /* The failure case when the request is too large */
-   return NULL;
-}
-
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_malloc_array,(png_const_structrp png_ptr, int nelements,
-   size_t element_size),PNG_ALLOCATED)
-{
-   if (nelements <= 0 || element_size == 0)
-      png_error(png_ptr, "internal error: array alloc");
-
-   return png_malloc_array_checked(png_ptr, nelements, element_size);
-}
-
-PNG_FUNCTION(png_voidp /* PRIVATE */,
-png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
-   int old_elements, int add_elements, size_t element_size),PNG_ALLOCATED)
-{
-   /* These are internal errors: */
-   if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
-      (old_array == NULL && old_elements > 0))
-      png_error(png_ptr, "internal error: array realloc");
-
-   /* Check for overflow on the elements count (so the caller does not have to
-    * check.)
-    */
-   if (add_elements <= INT_MAX - old_elements)
-   {
-      png_voidp new_array = png_malloc_array_checked(png_ptr,
-         old_elements+add_elements, element_size);
-
-      if (new_array != NULL)
-      {
-         /* Because png_malloc_array worked the size calculations below cannot
-          * overflow.
-          */
-         if (old_elements > 0)
-            memcpy(new_array, old_array, element_size*(unsigned)old_elements);
-
-         memset((char*)new_array + element_size*(unsigned)old_elements, 0,
-            element_size*(unsigned)add_elements);
-
-         return new_array;
-      }
-   }
-
-   return NULL; /* error */
-}
-#endif /* TEXT || sPLT || STORE_UNKNOWN_CHUNKS */
-
-/* Various functions that have different error handling are derived from this.
- * png_malloc always exists, but if PNG_USER_MEM_SUPPORTED is defined a separate
- * function png_malloc_default is also provided.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
-{
-   png_voidp ret;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   ret = png_malloc_base(png_ptr, size);
-
-   if (ret == NULL)
-       png_error(png_ptr, "Out of memory"); /* 'm' means png_malloc */
-
-   return ret;
-}
-
-#ifdef PNG_USER_MEM_SUPPORTED
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
-   PNG_ALLOCATED PNG_DEPRECATED)
-{
-   png_voidp ret;
-
-   if (png_ptr == NULL)
-      return NULL;
-
-   /* Passing 'NULL' here bypasses the application provided memory handler. */
-   ret = png_malloc_base(NULL/*use malloc*/, size);
-
-   if (ret == NULL)
-      png_error(png_ptr, "Out of Memory"); /* 'M' means png_malloc_default */
-
-   return ret;
-}
-#endif /* USER_MEM */
-
-/* This function was added at libpng version 1.2.3.  The png_malloc_warn()
- * function will issue a png_warning and return NULL instead of issuing a
- * png_error, if it fails to allocate the requested memory.
- */
-PNG_FUNCTION(png_voidp,PNGAPI
-png_malloc_warn,(png_const_structrp png_ptr, png_alloc_size_t size),
-   PNG_ALLOCATED)
-{
-   if (png_ptr != NULL)
-   {
-      png_voidp ret = png_malloc_base(png_ptr, size);
-
-      if (ret != NULL)
-         return ret;
-
-      png_warning(png_ptr, "Out of memory");
-   }
-
-   return NULL;
-}
-
-/* Free a pointer allocated by png_malloc().  If ptr is NULL, return
- * without taking any action.
- */
-void PNGAPI
-png_free(png_const_structrp png_ptr, png_voidp ptr)
-{
-   if (png_ptr == NULL || ptr == NULL)
-      return;
-
-#ifdef PNG_USER_MEM_SUPPORTED
-   if (png_ptr->free_fn != NULL)
-      png_ptr->free_fn(png_constcast(png_structrp,png_ptr), ptr);
-
-   else
-      png_free_default(png_ptr, ptr);
-}
-
-PNG_FUNCTION(void,PNGAPI
-png_free_default,(png_const_structrp png_ptr, png_voidp ptr),PNG_DEPRECATED)
-{
-   if (png_ptr == NULL || ptr == NULL)
-      return;
-#endif /* USER_MEM */
-
-   free(ptr);
-}
-
-#ifdef PNG_USER_MEM_SUPPORTED
-/* This function is called when the application wants to use another method
- * of allocating and freeing memory.
- */
-void PNGAPI
-png_set_mem_fn(png_structrp png_ptr, png_voidp mem_ptr, png_malloc_ptr
-  malloc_fn, png_free_ptr free_fn)
-{
-   if (png_ptr != NULL)
-   {
-      png_ptr->mem_ptr = mem_ptr;
-      png_ptr->malloc_fn = malloc_fn;
-      png_ptr->free_fn = free_fn;
-   }
-}
-
-/* This function returns a pointer to the mem_ptr associated with the user
- * functions.  The application should free any memory associated with this
- * pointer before png_write_destroy and png_read_destroy are called.
- */
-png_voidp PNGAPI
-png_get_mem_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return NULL;
-
-   return png_ptr->mem_ptr;
-}
-#endif /* USER_MEM */
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/pngpread.c
+++ /dev/null
@@ -1,1168 +1,0 @@
-
-/* pngpread.c - read a png file in push mode
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-
-/* Push model modes */
-#define PNG_READ_SIG_MODE   0
-#define PNG_READ_CHUNK_MODE 1
-#define PNG_READ_IDAT_MODE  2
-#define PNG_SKIP_MODE       3
-#define PNG_READ_tEXt_MODE  4
-#define PNG_READ_zTXt_MODE  5
-#define PNG_READ_DONE_MODE  6
-#define PNG_READ_iTXt_MODE  7
-#define PNG_ERROR_MODE      8
-
-#define PNG_PUSH_SAVE_BUFFER_IF_FULL \
-if (png_ptr->push_length + 4 > png_ptr->buffer_size) \
-   { png_push_save_buffer(png_ptr); return; }
-#define PNG_PUSH_SAVE_BUFFER_IF_LT(N) \
-if (png_ptr->buffer_size < N) \
-   { png_push_save_buffer(png_ptr); return; }
-
-void PNGAPI
-png_process_data(png_structrp png_ptr, png_inforp info_ptr,
-    png_bytep buffer, png_size_t buffer_size)
-{
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_push_restore_buffer(png_ptr, buffer, buffer_size);
-
-   while (png_ptr->buffer_size)
-   {
-      png_process_some_data(png_ptr, info_ptr);
-   }
-}
-
-png_size_t PNGAPI
-png_process_data_pause(png_structrp png_ptr, int save)
-{
-   if (png_ptr != NULL)
-   {
-      /* It's easiest for the caller if we do the save; then the caller doesn't
-       * have to supply the same data again:
-       */
-      if (save != 0)
-         png_push_save_buffer(png_ptr);
-      else
-      {
-         /* This includes any pending saved bytes: */
-         png_size_t remaining = png_ptr->buffer_size;
-         png_ptr->buffer_size = 0;
-
-         /* So subtract the saved buffer size, unless all the data
-          * is actually 'saved', in which case we just return 0
-          */
-         if (png_ptr->save_buffer_size < remaining)
-            return remaining - png_ptr->save_buffer_size;
-      }
-   }
-
-   return 0;
-}
-
-png_uint_32 PNGAPI
-png_process_data_skip(png_structrp png_ptr)
-{
-   png_uint_32 remaining = 0;
-
-   if (png_ptr != NULL && png_ptr->process_mode == PNG_SKIP_MODE &&
-      png_ptr->skip_length > 0)
-   {
-      /* At the end of png_process_data the buffer size must be 0 (see the loop
-       * above) so we can detect a broken call here:
-       */
-      if (png_ptr->buffer_size != 0)
-         png_error(png_ptr,
-            "png_process_data_skip called inside png_process_data");
-
-      /* If is impossible for there to be a saved buffer at this point -
-       * otherwise we could not be in SKIP mode.  This will also happen if
-       * png_process_skip is called inside png_process_data (but only very
-       * rarely.)
-       */
-      if (png_ptr->save_buffer_size != 0)
-         png_error(png_ptr, "png_process_data_skip called with saved data");
-
-      remaining = png_ptr->skip_length;
-      png_ptr->skip_length = 0;
-      png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-   }
-
-   return remaining;
-}
-
-/* What we do with the incoming data depends on what we were previously
- * doing before we ran out of data...
- */
-void /* PRIVATE */
-png_process_some_data(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr == NULL)
-      return;
-
-   switch (png_ptr->process_mode)
-   {
-      case PNG_READ_SIG_MODE:
-      {
-         png_push_read_sig(png_ptr, info_ptr);
-         break;
-      }
-
-      case PNG_READ_CHUNK_MODE:
-      {
-         png_push_read_chunk(png_ptr, info_ptr);
-         break;
-      }
-
-      case PNG_READ_IDAT_MODE:
-      {
-         png_push_read_IDAT(png_ptr);
-         break;
-      }
-
-      case PNG_SKIP_MODE:
-      {
-         png_push_crc_finish(png_ptr);
-         break;
-      }
-
-      default:
-      {
-         png_ptr->buffer_size = 0;
-         break;
-      }
-   }
-}
-
-/* Read any remaining signature bytes from the stream and compare them with
- * the correct PNG signature.  It is possible that this routine is called
- * with bytes already read from the signature, either because they have been
- * checked by the calling application, or because of multiple calls to this
- * routine.
- */
-void /* PRIVATE */
-png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_size_t num_checked = png_ptr->sig_bytes, /* SAFE, does not exceed 8 */ 
-             num_to_check = 8 - num_checked;
-
-   if (png_ptr->buffer_size < num_to_check)
-   {
-      num_to_check = png_ptr->buffer_size;
-   }
-
-   png_push_fill_buffer(png_ptr, &(info_ptr->signature[num_checked]),
-       num_to_check);
-   png_ptr->sig_bytes = (png_byte)(png_ptr->sig_bytes + num_to_check);
-
-   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
-   {
-      if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
-         png_error(png_ptr, "Not a PNG file");
-
-      else
-         png_error(png_ptr, "PNG file corrupted by ASCII conversion");
-   }
-   else
-   {
-      if (png_ptr->sig_bytes >= 8)
-      {
-         png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-      }
-   }
-}
-
-void /* PRIVATE */
-png_push_read_chunk(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_uint_32 chunk_name;
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep; /* unknown handling method */
-#endif
-
-   /* First we make sure we have enough data for the 4-byte chunk name
-    * and the 4-byte chunk length before proceeding with decoding the
-    * chunk data.  To fully decode each of these chunks, we also make
-    * sure we have enough data in the buffer for the 4-byte CRC at the
-    * end of every chunk (except IDAT, which is handled separately).
-    */
-   if ((png_ptr->mode & PNG_HAVE_CHUNK_HEADER) == 0)
-   {
-      png_byte chunk_length[4];
-      png_byte chunk_tag[4];
-
-      PNG_PUSH_SAVE_BUFFER_IF_LT(8)
-      png_push_fill_buffer(png_ptr, chunk_length, 4);
-      png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
-      png_reset_crc(png_ptr);
-      png_crc_read(png_ptr, chunk_tag, 4);
-      png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
-      png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-      png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
-   }
-
-   chunk_name = png_ptr->chunk_name;
-
-   if (chunk_name == png_IDAT)
-   {
-      if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
-         png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
-
-      /* If we reach an IDAT chunk, this means we have read all of the
-       * header chunks, and we can start reading the image (or if this
-       * is called after the image has been read - we have an error).
-       */
-      if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-         png_error(png_ptr, "Missing IHDR before IDAT");
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-          (png_ptr->mode & PNG_HAVE_PLTE) == 0)
-         png_error(png_ptr, "Missing PLTE before IDAT");
-
-      png_ptr->mode |= PNG_HAVE_IDAT;
-      png_ptr->process_mode = PNG_READ_IDAT_MODE;
-
-      if ((png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) == 0)
-         if (png_ptr->push_length == 0)
-            return;
-
-      if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
-         png_benign_error(png_ptr, "Too many IDATs found");
-   }
-
-   if (chunk_name == png_IHDR)
-   {
-      if (png_ptr->push_length != 13)
-         png_error(png_ptr, "Invalid IHDR length");
-
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_IHDR(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-   else if (chunk_name == png_IEND)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_IEND(png_ptr, info_ptr, png_ptr->push_length);
-
-      png_ptr->process_mode = PNG_READ_DONE_MODE;
-      png_push_have_end(png_ptr, info_ptr);
-   }
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length, keep);
-
-      if (chunk_name == png_PLTE)
-         png_ptr->mode |= PNG_HAVE_PLTE;
-   }
-#endif
-
-   else if (chunk_name == png_PLTE)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_PLTE(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-   else if (chunk_name == png_IDAT)
-   {
-      png_ptr->idat_size = png_ptr->push_length;
-      png_ptr->process_mode = PNG_READ_IDAT_MODE;
-      png_push_have_info(png_ptr, info_ptr);
-      png_ptr->zstream.avail_out =
-          (uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
-          png_ptr->iwidth) + 1;
-      png_ptr->zstream.next_out = png_ptr->row_buf;
-      return;
-   }
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-   else if (png_ptr->chunk_name == png_gAMA)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_gAMA(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sBIT_SUPPORTED
-   else if (png_ptr->chunk_name == png_sBIT)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_sBIT(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_cHRM_SUPPORTED
-   else if (png_ptr->chunk_name == png_cHRM)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_cHRM(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sRGB_SUPPORTED
-   else if (chunk_name == png_sRGB)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_sRGB(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_iCCP_SUPPORTED
-   else if (png_ptr->chunk_name == png_iCCP)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_iCCP(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sPLT_SUPPORTED
-   else if (chunk_name == png_sPLT)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_sPLT(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tRNS_SUPPORTED
-   else if (chunk_name == png_tRNS)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_tRNS(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_bKGD_SUPPORTED
-   else if (chunk_name == png_bKGD)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_bKGD(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_hIST_SUPPORTED
-   else if (chunk_name == png_hIST)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_hIST(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_pHYs_SUPPORTED
-   else if (chunk_name == png_pHYs)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_pHYs(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_oFFs_SUPPORTED
-   else if (chunk_name == png_oFFs)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_oFFs(png_ptr, info_ptr, png_ptr->push_length);
-   }
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-   else if (chunk_name == png_pCAL)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_pCAL(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_sCAL_SUPPORTED
-   else if (chunk_name == png_sCAL)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_sCAL(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tIME_SUPPORTED
-   else if (chunk_name == png_tIME)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_tIME(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_tEXt_SUPPORTED
-   else if (chunk_name == png_tEXt)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_tEXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_zTXt_SUPPORTED
-   else if (chunk_name == png_zTXt)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_zTXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-
-#endif
-#ifdef PNG_READ_iTXt_SUPPORTED
-   else if (chunk_name == png_iTXt)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
-   }
-#endif
-
-   else
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_FULL
-      png_handle_unknown(png_ptr, info_ptr, png_ptr->push_length,
-         PNG_HANDLE_CHUNK_AS_DEFAULT);
-   }
-
-   png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-}
-
-void /* PRIVATE */
-png_push_crc_skip(png_structrp png_ptr, png_uint_32 skip)
-{
-   png_ptr->process_mode = PNG_SKIP_MODE;
-   png_ptr->skip_length = skip;
-}
-
-void /* PRIVATE */
-png_push_crc_finish(png_structrp png_ptr)
-{
-   if (png_ptr->skip_length != 0 && png_ptr->save_buffer_size != 0)
-   {
-      png_size_t save_size = png_ptr->save_buffer_size;
-      png_uint_32 skip_length = png_ptr->skip_length;
-
-      /* We want the smaller of 'skip_length' and 'save_buffer_size', but
-       * they are of different types and we don't know which variable has the
-       * fewest bits.  Carefully select the smaller and cast it to the type of
-       * the larger - this cannot overflow.  Do not cast in the following test
-       * - it will break on either 16 or 64 bit platforms.
-       */
-      if (skip_length < save_size)
-         save_size = (png_size_t)skip_length;
-
-      else
-         skip_length = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_ptr->skip_length -= skip_length;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-   if (png_ptr->skip_length != 0 && png_ptr->current_buffer_size != 0)
-   {
-      png_size_t save_size = png_ptr->current_buffer_size;
-      png_uint_32 skip_length = png_ptr->skip_length;
-
-      /* We want the smaller of 'skip_length' and 'current_buffer_size', here,
-       * the same problem exists as above and the same solution.
-       */
-      if (skip_length < save_size)
-         save_size = (png_size_t)skip_length;
-
-      else
-         skip_length = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_ptr->skip_length -= skip_length;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-   if (png_ptr->skip_length == 0)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_LT(4)
-      png_crc_finish(png_ptr, 0);
-      png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-   }
-}
-
-void PNGCBAPI
-png_push_fill_buffer(png_structp png_ptr, png_bytep buffer, png_size_t length)
-{
-   png_bytep ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   ptr = buffer;
-   if (png_ptr->save_buffer_size != 0)
-   {
-      png_size_t save_size;
-
-      if (length < png_ptr->save_buffer_size)
-         save_size = length;
-
-      else
-         save_size = png_ptr->save_buffer_size;
-
-      memcpy(ptr, png_ptr->save_buffer_ptr, save_size);
-      length -= save_size;
-      ptr += save_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-   if (length != 0 && png_ptr->current_buffer_size != 0)
-   {
-      png_size_t save_size;
-
-      if (length < png_ptr->current_buffer_size)
-         save_size = length;
-
-      else
-         save_size = png_ptr->current_buffer_size;
-
-      memcpy(ptr, png_ptr->current_buffer_ptr, save_size);
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-}
-
-void /* PRIVATE */
-png_push_save_buffer(png_structrp png_ptr)
-{
-   if (png_ptr->save_buffer_size != 0)
-   {
-      if (png_ptr->save_buffer_ptr != png_ptr->save_buffer)
-      {
-         png_size_t i, istop;
-         png_bytep sp;
-         png_bytep dp;
-
-         istop = png_ptr->save_buffer_size;
-         for (i = 0, sp = png_ptr->save_buffer_ptr, dp = png_ptr->save_buffer;
-             i < istop; i++, sp++, dp++)
-         {
-            *dp = *sp;
-         }
-      }
-   }
-   if (png_ptr->save_buffer_size + png_ptr->current_buffer_size >
-       png_ptr->save_buffer_max)
-   {
-      png_size_t new_max;
-      png_bytep old_buffer;
-
-      if (png_ptr->save_buffer_size > PNG_SIZE_MAX -
-          (png_ptr->current_buffer_size + 256))
-      {
-         png_error(png_ptr, "Potential overflow of save_buffer");
-      }
-
-      new_max = png_ptr->save_buffer_size + png_ptr->current_buffer_size + 256;
-      old_buffer = png_ptr->save_buffer;
-      png_ptr->save_buffer = (png_bytep)png_malloc_warn(png_ptr,
-          (png_size_t)new_max);
-
-      if (png_ptr->save_buffer == NULL)
-      {
-         png_free(png_ptr, old_buffer);
-         old_buffer = NULL;
-         png_error(png_ptr, "Insufficient memory for save_buffer");
-      }
-
-      memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
-      png_free(png_ptr, old_buffer);
-      old_buffer = NULL;
-      png_ptr->save_buffer_max = new_max;
-   }
-   if (png_ptr->current_buffer_size)
-   {
-      memcpy(png_ptr->save_buffer + png_ptr->save_buffer_size,
-         png_ptr->current_buffer_ptr, png_ptr->current_buffer_size);
-      png_ptr->save_buffer_size += png_ptr->current_buffer_size;
-      png_ptr->current_buffer_size = 0;
-   }
-   png_ptr->save_buffer_ptr = png_ptr->save_buffer;
-   png_ptr->buffer_size = 0;
-}
-
-void /* PRIVATE */
-png_push_restore_buffer(png_structrp png_ptr, png_bytep buffer,
-   png_size_t buffer_length)
-{
-   png_ptr->current_buffer = buffer;
-   png_ptr->current_buffer_size = buffer_length;
-   png_ptr->buffer_size = buffer_length + png_ptr->save_buffer_size;
-   png_ptr->current_buffer_ptr = png_ptr->current_buffer;
-}
-
-void /* PRIVATE */
-png_push_read_IDAT(png_structrp png_ptr)
-{
-   if ((png_ptr->mode & PNG_HAVE_CHUNK_HEADER) == 0)
-   {
-      png_byte chunk_length[4];
-      png_byte chunk_tag[4];
-
-      /* TODO: this code can be commoned up with the same code in push_read */
-      PNG_PUSH_SAVE_BUFFER_IF_LT(8)
-      png_push_fill_buffer(png_ptr, chunk_length, 4);
-      png_ptr->push_length = png_get_uint_31(png_ptr, chunk_length);
-      png_reset_crc(png_ptr);
-      png_crc_read(png_ptr, chunk_tag, 4);
-      png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(chunk_tag);
-      png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
-
-      if (png_ptr->chunk_name != png_IDAT)
-      {
-         png_ptr->process_mode = PNG_READ_CHUNK_MODE;
-
-         if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0)
-            png_error(png_ptr, "Not enough compressed data");
-
-         return;
-      }
-
-      png_ptr->idat_size = png_ptr->push_length;
-   }
-
-   if (png_ptr->idat_size != 0 && png_ptr->save_buffer_size != 0)
-   {
-      png_size_t save_size = png_ptr->save_buffer_size;
-      png_uint_32 idat_size = png_ptr->idat_size;
-
-      /* We want the smaller of 'idat_size' and 'current_buffer_size', but they
-       * are of different types and we don't know which variable has the fewest
-       * bits.  Carefully select the smaller and cast it to the type of the
-       * larger - this cannot overflow.  Do not cast in the following test - it
-       * will break on either 16 or 64 bit platforms.
-       */
-      if (idat_size < save_size)
-         save_size = (png_size_t)idat_size;
-
-      else
-         idat_size = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
-
-      png_ptr->idat_size -= idat_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->save_buffer_size -= save_size;
-      png_ptr->save_buffer_ptr += save_size;
-   }
-
-   if (png_ptr->idat_size != 0 && png_ptr->current_buffer_size != 0)
-   {
-      png_size_t save_size = png_ptr->current_buffer_size;
-      png_uint_32 idat_size = png_ptr->idat_size;
-
-      /* We want the smaller of 'idat_size' and 'current_buffer_size', but they
-       * are of different types and we don't know which variable has the fewest
-       * bits.  Carefully select the smaller and cast it to the type of the
-       * larger - this cannot overflow.
-       */
-      if (idat_size < save_size)
-         save_size = (png_size_t)idat_size;
-
-      else
-         idat_size = (png_uint_32)save_size;
-
-      png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
-
-      png_ptr->idat_size -= idat_size;
-      png_ptr->buffer_size -= save_size;
-      png_ptr->current_buffer_size -= save_size;
-      png_ptr->current_buffer_ptr += save_size;
-   }
-   if (png_ptr->idat_size == 0)
-   {
-      PNG_PUSH_SAVE_BUFFER_IF_LT(4)
-      png_crc_finish(png_ptr, 0);
-      png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
-      png_ptr->mode |= PNG_AFTER_IDAT;
-      png_ptr->zowner = 0;
-   }
-}
-
-void /* PRIVATE */
-png_process_IDAT_data(png_structrp png_ptr, png_bytep buffer,
-   png_size_t buffer_length)
-{
-   /* The caller checks for a non-zero buffer length. */
-   if (!(buffer_length > 0) || buffer == NULL)
-      png_error(png_ptr, "No IDAT data (internal error)");
-
-   /* This routine must process all the data it has been given
-    * before returning, calling the row callback as required to
-    * handle the uncompressed results.
-    */
-   png_ptr->zstream.next_in = buffer;
-   /* TODO: WARNING: TRUNCATION ERROR: DANGER WILL ROBINSON: */
-   png_ptr->zstream.avail_in = (uInt)buffer_length;
-
-   /* Keep going until the decompressed data is all processed
-    * or the stream marked as finished.
-    */
-   while (png_ptr->zstream.avail_in > 0 &&
-      !(png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED))
-   {
-      int ret;
-
-      /* We have data for zlib, but we must check that zlib
-       * has someplace to put the results.  It doesn't matter
-       * if we don't expect any results -- it may be the input
-       * data is just the LZ end code.
-       */
-      if (!(png_ptr->zstream.avail_out > 0))
-      {
-         /* TODO: WARNING: TRUNCATION ERROR: DANGER WILL ROBINSON: */
-         png_ptr->zstream.avail_out = (uInt)(PNG_ROWBYTES(png_ptr->pixel_depth,
-             png_ptr->iwidth) + 1);
-
-         png_ptr->zstream.next_out = png_ptr->row_buf;
-      }
-
-      /* Using Z_SYNC_FLUSH here means that an unterminated
-       * LZ stream (a stream with a missing end code) can still
-       * be handled, otherwise (Z_NO_FLUSH) a future zlib
-       * implementation might defer output and therefore
-       * change the current behavior (see comments in inflate.c
-       * for why this doesn't happen at present with zlib 1.2.5).
-       */
-      ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH);
-
-      /* Check for any failure before proceeding. */
-      if (ret != Z_OK && ret != Z_STREAM_END)
-      {
-         /* Terminate the decompression. */
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-         png_ptr->zowner = 0;
-
-         /* This may be a truncated stream (missing or
-          * damaged end code).  Treat that as a warning.
-          */
-         if (png_ptr->row_number >= png_ptr->num_rows ||
-             png_ptr->pass > 6)
-            png_warning(png_ptr, "Truncated compressed data in IDAT");
-
-         else
-            png_error(png_ptr, "Decompression error in IDAT");
-
-         /* Skip the check on unprocessed input */
-         return;
-      }
-
-      /* Did inflate output any data? */
-      if (png_ptr->zstream.next_out != png_ptr->row_buf)
-      {
-         /* Is this unexpected data after the last row?
-          * If it is, artificially terminate the LZ output
-          * here.
-          */
-         if (png_ptr->row_number >= png_ptr->num_rows ||
-             png_ptr->pass > 6)
-         {
-            /* Extra data. */
-            png_warning(png_ptr, "Extra compressed data in IDAT");
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-            png_ptr->zowner = 0;
-
-            /* Do no more processing; skip the unprocessed
-             * input check below.
-             */
-            return;
-         }
-
-         /* Do we have a complete row? */
-         if (png_ptr->zstream.avail_out == 0)
-            png_push_process_row(png_ptr);
-      }
-
-      /* And check for the end of the stream. */
-      if (ret == Z_STREAM_END)
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-   }
-
-   /* All the data should have been processed, if anything
-    * is left at this point we have bytes of IDAT data
-    * after the zlib end code.
-    */
-   if (png_ptr->zstream.avail_in > 0)
-      png_warning(png_ptr, "Extra compression data in IDAT");
-}
-
-void /* PRIVATE */
-png_push_process_row(png_structrp png_ptr)
-{
-   /* 1.5.6: row_info moved out of png_struct to a local here. */
-   png_row_info row_info;
-
-   row_info.width = png_ptr->iwidth; /* NOTE: width of current interlaced row */
-   row_info.color_type = png_ptr->color_type;
-   row_info.bit_depth = png_ptr->bit_depth;
-   row_info.channels = png_ptr->channels;
-   row_info.pixel_depth = png_ptr->pixel_depth;
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-   if (png_ptr->row_buf[0] > PNG_FILTER_VALUE_NONE)
-   {
-      if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
-         png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
-            png_ptr->prev_row + 1, png_ptr->row_buf[0]);
-      else
-         png_error(png_ptr, "bad adaptive filter value");
-   }
-
-   /* libpng 1.5.6: the following line was copying png_ptr->rowbytes before
-    * 1.5.6, while the buffer really is this big in current versions of libpng
-    * it may not be in the future, so this was changed just to copy the
-    * interlaced row count:
-    */
-   memcpy(png_ptr->prev_row, png_ptr->row_buf, row_info.rowbytes + 1);
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   if (png_ptr->transformations != 0)
-      png_do_read_transformations(png_ptr, &row_info);
-#endif
-
-   /* The transformed pixel depth should match the depth now in row_info. */
-   if (png_ptr->transformed_pixel_depth == 0)
-   {
-      png_ptr->transformed_pixel_depth = row_info.pixel_depth;
-      if (row_info.pixel_depth > png_ptr->maximum_pixel_depth)
-         png_error(png_ptr, "progressive row overflow");
-   }
-
-   else if (png_ptr->transformed_pixel_depth != row_info.pixel_depth)
-      png_error(png_ptr, "internal progressive row size calculation error");
-
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Expand interlaced rows to full size */
-   if (png_ptr->interlaced != 0 &&
-       (png_ptr->transformations & PNG_INTERLACE) != 0)
-   {
-      if (png_ptr->pass < 6)
-         png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
-            png_ptr->transformations);
-
-      switch (png_ptr->pass)
-      {
-         case 0:
-         {
-            int i;
-            for (i = 0; i < 8 && png_ptr->pass == 0; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr); /* Updates png_ptr->pass */
-            }
-
-            if (png_ptr->pass == 2) /* Pass 1 might be empty */
-            {
-               for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            if (png_ptr->pass == 4 && png_ptr->height <= 4)
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            if (png_ptr->pass == 6 && png_ptr->height <= 4)
-            {
-                png_push_have_row(png_ptr, NULL);
-                png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         case 1:
-         {
-            int i;
-            for (i = 0; i < 8 && png_ptr->pass == 1; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 2) /* Skip top 4 generated rows */
-            {
-               for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 2:
-         {
-            int i;
-
-            for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            for (i = 0; i < 4 && png_ptr->pass == 2; i++)
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 4) /* Pass 3 might be empty */
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 3:
-         {
-            int i;
-
-            for (i = 0; i < 4 && png_ptr->pass == 3; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 4) /* Skip top two generated rows */
-            {
-               for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-               {
-                  png_push_have_row(png_ptr, NULL);
-                  png_read_push_finish_row(png_ptr);
-               }
-            }
-
-            break;
-         }
-
-         case 4:
-         {
-            int i;
-
-            for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            for (i = 0; i < 2 && png_ptr->pass == 4; i++)
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 6) /* Pass 5 might be empty */
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         case 5:
-         {
-            int i;
-
-            for (i = 0; i < 2 && png_ptr->pass == 5; i++)
-            {
-               png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            if (png_ptr->pass == 6) /* Skip top generated row */
-            {
-               png_push_have_row(png_ptr, NULL);
-               png_read_push_finish_row(png_ptr);
-            }
-
-            break;
-         }
-
-         default:
-         case 6:
-         {
-            png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-            png_read_push_finish_row(png_ptr);
-
-            if (png_ptr->pass != 6)
-               break;
-
-            png_push_have_row(png_ptr, NULL);
-            png_read_push_finish_row(png_ptr);
-         }
-      }
-   }
-   else
-   {
-      png_push_have_row(png_ptr, png_ptr->row_buf + 1);
-      png_read_push_finish_row(png_ptr);
-   }
-}
-
-void /* PRIVATE */
-png_read_push_finish_row(png_structrp png_ptr)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
-
-   /* Height of interlace block.  This is not currently used - if you need
-    * it, uncomment it here and in png.h
-   static PNG_CONST png_byte png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
-   */
-#endif
-
-   png_ptr->row_number++;
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-   if (png_ptr->interlaced != 0)
-   {
-      png_ptr->row_number = 0;
-      memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-      do
-      {
-         png_ptr->pass++;
-         if ((png_ptr->pass == 1 && png_ptr->width < 5) ||
-             (png_ptr->pass == 3 && png_ptr->width < 3) ||
-             (png_ptr->pass == 5 && png_ptr->width < 2))
-            png_ptr->pass++;
-
-         if (png_ptr->pass > 7)
-            png_ptr->pass--;
-
-         if (png_ptr->pass >= 7)
-            break;
-
-         png_ptr->iwidth = (png_ptr->width +
-             png_pass_inc[png_ptr->pass] - 1 -
-             png_pass_start[png_ptr->pass]) /
-             png_pass_inc[png_ptr->pass];
-
-         if ((png_ptr->transformations & PNG_INTERLACE) != 0)
-            break;
-
-         png_ptr->num_rows = (png_ptr->height +
-             png_pass_yinc[png_ptr->pass] - 1 -
-             png_pass_ystart[png_ptr->pass]) /
-             png_pass_yinc[png_ptr->pass];
-
-      } while (png_ptr->iwidth == 0 || png_ptr->num_rows == 0);
-   }
-}
-
-void /* PRIVATE */
-png_push_have_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr->info_fn != NULL)
-      (*(png_ptr->info_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-   if (png_ptr->end_fn != NULL)
-      (*(png_ptr->end_fn))(png_ptr, info_ptr);
-}
-
-void /* PRIVATE */
-png_push_have_row(png_structrp png_ptr, png_bytep row)
-{
-   if (png_ptr->row_fn != NULL)
-      (*(png_ptr->row_fn))(png_ptr, row, png_ptr->row_number,
-         (int)png_ptr->pass);
-}
-
-void PNGAPI
-png_progressive_combine_row(png_const_structrp png_ptr, png_bytep old_row,
-    png_const_bytep new_row)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* new_row is a flag here - if it is NULL then the app callback was called
-    * from an empty row (see the calls to png_struct::row_fn below), otherwise
-    * it must be png_ptr->row_buf+1
-    */
-   if (new_row != NULL)
-      png_combine_row(png_ptr, old_row, 1/*blocky display*/);
-}
-
-void PNGAPI
-png_set_progressive_read_fn(png_structrp png_ptr, png_voidp progressive_ptr,
-    png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
-    png_progressive_end_ptr end_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->info_fn = info_fn;
-   png_ptr->row_fn = row_fn;
-   png_ptr->end_fn = end_fn;
-
-   png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
-}
-
-png_voidp PNGAPI
-png_get_progressive_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return png_ptr->io_ptr;
-}
-#endif /* PROGRESSIVE_READ */
--- a/DoConfig/fltk/png/pngpriv.h
+++ /dev/null
@@ -1,1944 +1,0 @@
-
-/* pngpriv.h - private declarations for use inside libpng
- *
- * For conditions of distribution and use, see copyright notice in png.h
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.10 [March 6, 1014]]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* The symbols declared in this file (including the functions declared
- * as extern) are PRIVATE.  They are not part of the libpng public
- * interface, and are not recommended for use by regular applications.
- * Some of them may become public in the future; others may stay private,
- * change in an incompatible way, or even disappear.
- * Although the libpng users are not forbidden to include this header,
- * they should be well aware of the issues that may arise from doing so.
- */
-
-#ifndef PNGPRIV_H
-#define PNGPRIV_H
-
-/* Feature Test Macros.  The following are defined here to ensure that correctly
- * implemented libraries reveal the APIs libpng needs to build and hide those
- * that are not needed and potentially damaging to the compilation.
- *
- * Feature Test Macros must be defined before any system header is included (see
- * POSIX 1003.1 2.8.2 "POSIX Symbols."
- *
- * These macros only have an effect if the operating system supports either
- * POSIX 1003.1 or C99, or both.  On other operating systems (particularly
- * Windows/Visual Studio) there is no effect; the OS specific tests below are
- * still required (as of 2011-05-02.)
- */
-#define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
-
-#ifndef PNG_VERSION_INFO_ONLY
-/* Standard library headers not required by png.h: */
-#  include <stdlib.h>
-#  include <string.h>
-#endif
-
-#define PNGLIB_BUILD /*libpng is being built, not used*/
-
-/* If HAVE_CONFIG_H is defined during the build then the build system must
- * provide an appropriate "config.h" file on the include path.  The header file
- * must provide definitions as required below (search for "HAVE_CONFIG_H");
- * see configure.ac for more details of the requirements.  The macro
- * "PNG_NO_CONFIG_H" is provided for maintainers to test for dependencies on
- * 'configure'; define this macro to prevent the configure build including the
- * configure generated config.h.  Libpng is expected to compile without *any*
- * special build system support on a reasonably ANSI-C compliant system.
- */
-#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
-#  include <config.h>
-
-   /* Pick up the definition of 'restrict' from config.h if it was read: */
-#  define PNG_RESTRICT restrict
-#endif
-
-/* To support symbol prefixing it is necessary to know *before* including png.h
- * whether the fixed point (and maybe other) APIs are exported, because if they
- * are not internal definitions may be required.  This is handled below just
- * before png.h is included, but load the configuration now if it is available.
- */
-#ifndef PNGLCONF_H
-#  include "pnglibconf.h"
-#endif
-
-/* Local renames may change non-exported API functions from png.h */
-#if defined(PNG_PREFIX) && !defined(PNGPREFIX_H)
-#  include "pngprefix.h"
-#endif
-
-#ifdef PNG_USER_CONFIG
-#  include "pngusr.h"
-   /* These should have been defined in pngusr.h */
-#  ifndef PNG_USER_PRIVATEBUILD
-#    define PNG_USER_PRIVATEBUILD "Custom libpng build"
-#  endif
-#  ifndef PNG_USER_DLLFNAME_POSTFIX
-#    define PNG_USER_DLLFNAME_POSTFIX "Cb"
-#  endif
-#endif
-
-/* Compile time options.
- * =====================
- * In a multi-arch build the compiler may compile the code several times for the
- * same object module, producing different binaries for different architectures.
- * When this happens configure-time setting of the target host options cannot be
- * done and this interferes with the handling of the ARM NEON optimizations, and
- * possibly other similar optimizations.  Put additional tests here; in general
- * this is needed when the same option can be changed at both compile time and
- * run time depending on the target OS (i.e. iOS vs Android.)
- *
- * NOTE: symbol prefixing does not pass $(CFLAGS) to the preprocessor, because
- * this is not possible with certain compilers (Oracle SUN OS CC), as a result
- * it is necessary to ensure that all extern functions that *might* be used
- * regardless of $(CFLAGS) get declared in this file.  The test on __ARM_NEON__
- * below is one example of this behavior because it is controlled by the
- * presence or not of -mfpu=neon on the GCC command line, it is possible to do
- * this in $(CC), e.g. "CC=gcc -mfpu=neon", but people who build libpng rarely
- * do this.
- */
-#ifndef PNG_ARM_NEON_OPT
-   /* ARM NEON optimizations are being controlled by the compiler settings,
-    * typically the target FPU.  If the FPU has been set to NEON (-mfpu=neon
-    * with GCC) then the compiler will define __ARM_NEON__ and we can rely
-    * unconditionally on NEON instructions not crashing, otherwise we must
-    * disable use of NEON instructions.
-    *
-    * NOTE: at present these optimizations depend on 'ALIGNED_MEMORY', so they
-    * can only be turned on automatically if that is supported too.  If
-    * PNG_ARM_NEON_OPT is set in CPPFLAGS (to >0) then arm/arm_init.c will fail
-    * to compile with an appropriate #error if ALIGNED_MEMORY has been turned
-    * off.
-    *
-    * Note that gcc-4.9 defines __ARM_NEON instead of __ARM_NEON__, so we
-    * check both variants.
-    */
-#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
-   defined(PNG_ALIGNED_MEMORY_SUPPORTED)
-#     define PNG_ARM_NEON_OPT 2
-#  else
-#     define PNG_ARM_NEON_OPT 0
-#  endif
-#endif
-
-#if PNG_ARM_NEON_OPT > 0
-   /* NEON optimizations are to be at least considered by libpng, so enable the
-    * callbacks to do this.
-    */
-#  define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_neon
-
-   /* By default the 'intrinsics' code in arm/filter_neon_intrinsics.c is used
-    * if possible - if __ARM_NEON__ is set and the compiler version is not known
-    * to be broken.  This is controlled by PNG_ARM_NEON_IMPLEMENTATION which can
-    * be:
-    *
-    *    1  The intrinsics code (the default with __ARM_NEON__)
-    *    2  The hand coded assembler (the default without __ARM_NEON__)
-    *
-    * It is possible to set PNG_ARM_NEON_IMPLEMENTATION in CPPFLAGS, however
-    * this is *NOT* supported and may cease to work even after a minor revision
-    * to libpng.  It *is* valid to do this for testing purposes, e.g. speed
-    * testing or a new compiler, but the results should be communicated to the
-    * libpng implementation list for incorporation in the next minor release.
-    */
-#  ifndef PNG_ARM_NEON_IMPLEMENTATION
-#     if defined(__ARM_NEON__) || defined(__ARM_NEON)
-#        if defined(__clang__)
-            /* At present it is unknown by the libpng developers which versions
-             * of clang support the intrinsics, however some or perhaps all
-             * versions do not work with the assembler so this may be
-             * irrelevant, so just use the default (do nothing here.)
-             */
-#        elif defined(__GNUC__)
-            /* GCC 4.5.4 NEON support is known to be broken.  4.6.3 is known to
-             * work, so if this *is* GCC, or G++, look for a version >4.5
-             */
-#           if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
-#              define PNG_ARM_NEON_IMPLEMENTATION 2
-#           endif /* no GNUC support */
-#        endif /* __GNUC__ */
-#     else /* !defined __ARM_NEON__ */
-         /* The 'intrinsics' code simply won't compile without this -mfpu=neon:
-          */
-#        define PNG_ARM_NEON_IMPLEMENTATION 2
-#     endif /* __ARM_NEON__ */
-#  endif /* !PNG_ARM_NEON_IMPLEMENTATION */
-
-#  ifndef PNG_ARM_NEON_IMPLEMENTATION
-      /* Use the intrinsics code by default. */
-#     define PNG_ARM_NEON_IMPLEMENTATION 1
-#  endif
-#endif /* PNG_ARM_NEON_OPT > 0 */
-
-/* Is this a build of a DLL where compilation of the object modules requires
- * different preprocessor settings to those required for a simple library?  If
- * so PNG_BUILD_DLL must be set.
- *
- * If libpng is used inside a DLL but that DLL does not export the libpng APIs
- * PNG_BUILD_DLL must not be set.  To avoid the code below kicking in build a
- * static library of libpng then link the DLL against that.
- */
-#ifndef PNG_BUILD_DLL
-#  ifdef DLL_EXPORT
-      /* This is set by libtool when files are compiled for a DLL; libtool
-       * always compiles twice, even on systems where it isn't necessary.  Set
-       * PNG_BUILD_DLL in case it is necessary:
-       */
-#     define PNG_BUILD_DLL
-#  else
-#     ifdef _WINDLL
-         /* This is set by the Microsoft Visual Studio IDE in projects that
-          * build a DLL.  It can't easily be removed from those projects (it
-          * isn't visible in the Visual Studio UI) so it is a fairly reliable
-          * indication that PNG_IMPEXP needs to be set to the DLL export
-          * attributes.
-          */
-#        define PNG_BUILD_DLL
-#     else
-#        ifdef __DLL__
-            /* This is set by the Borland C system when compiling for a DLL
-             * (as above.)
-             */
-#           define PNG_BUILD_DLL
-#        else
-            /* Add additional compiler cases here. */
-#        endif
-#     endif
-#  endif
-#endif /* Setting PNG_BUILD_DLL if required */
-
-/* See pngconf.h for more details: the builder of the library may set this on
- * the command line to the right thing for the specific compilation system or it
- * may be automagically set above (at present we know of no system where it does
- * need to be set on the command line.)
- *
- * PNG_IMPEXP must be set here when building the library to prevent pngconf.h
- * setting it to the "import" setting for a DLL build.
- */
-#ifndef PNG_IMPEXP
-#  ifdef PNG_BUILD_DLL
-#     define PNG_IMPEXP PNG_DLL_EXPORT
-#  else
-      /* Not building a DLL, or the DLL doesn't require specific export
-       * definitions.
-       */
-#     define PNG_IMPEXP
-#  endif
-#endif
-
-/* No warnings for private or deprecated functions in the build: */
-#ifndef PNG_DEPRECATED
-#  define PNG_DEPRECATED
-#endif
-#ifndef PNG_PRIVATE
-#  define PNG_PRIVATE
-#endif
-
-/* Symbol preprocessing support.
- *
- * To enable listing global, but internal, symbols the following macros should
- * always be used to declare an extern data or function object in this file.
- */
-#ifndef PNG_INTERNAL_DATA
-#  define PNG_INTERNAL_DATA(type, name, array) extern type name array
-#endif
-
-#ifndef PNG_INTERNAL_FUNCTION
-#  define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
-      extern PNG_FUNCTION(type, name, args, PNG_EMPTY attributes)
-#endif
-
-#ifndef PNG_INTERNAL_CALLBACK
-#  define PNG_INTERNAL_CALLBACK(type, name, args, attributes)\
-      extern PNG_FUNCTION(type, (PNGCBAPI name), args, PNG_EMPTY attributes)
-#endif
-
-/* If floating or fixed point APIs are disabled they may still be compiled
- * internally.  To handle this make sure they are declared as the appropriate
- * internal extern function (otherwise the symbol prefixing stuff won't work and
- * the functions will be used without definitions.)
- *
- * NOTE: although all the API functions are declared here they are not all
- * actually built!  Because the declarations are still made it is necessary to
- * fake out types that they depend on.
- */
-#ifndef PNG_FP_EXPORT
-#  ifndef PNG_FLOATING_POINT_SUPPORTED
-#     define PNG_FP_EXPORT(ordinal, type, name, args)\
-         PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
-#     ifndef PNG_VERSION_INFO_ONLY
-         typedef struct png_incomplete png_double;
-         typedef png_double*           png_doublep;
-         typedef const png_double*     png_const_doublep;
-         typedef png_double**          png_doublepp;
-#     endif
-#  endif
-#endif
-#ifndef PNG_FIXED_EXPORT
-#  ifndef PNG_FIXED_POINT_SUPPORTED
-#     define PNG_FIXED_EXPORT(ordinal, type, name, args)\
-         PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
-#  endif
-#endif
-
-#include "png.h"
-
-/* pngconf.h does not set PNG_DLL_EXPORT unless it is required, so: */
-#ifndef PNG_DLL_EXPORT
-#  define PNG_DLL_EXPORT
-#endif
-
-/* SECURITY and SAFETY:
- *
- * By default libpng is built without any internal limits on image size,
- * individual heap (png_malloc) allocations or the total amount of memory used.
- * If PNG_SAFE_LIMITS_SUPPORTED is defined, however, the limits below are used
- * (unless individually overridden).  These limits are believed to be fairly
- * safe, but builders of secure systems should verify the values against the
- * real system capabilities.
- */
-#ifdef PNG_SAFE_LIMITS_SUPPORTED
-   /* 'safe' limits */
-#  ifndef PNG_USER_WIDTH_MAX
-#     define PNG_USER_WIDTH_MAX 1000000
-#  endif
-#  ifndef PNG_USER_HEIGHT_MAX
-#     define PNG_USER_HEIGHT_MAX 1000000
-#  endif
-#  ifndef PNG_USER_CHUNK_CACHE_MAX
-#     define PNG_USER_CHUNK_CACHE_MAX 128
-#  endif
-#  ifndef PNG_USER_CHUNK_MALLOC_MAX
-#     define PNG_USER_CHUNK_MALLOC_MAX 8000000
-#  endif
-#else
-   /* values for no limits */
-#  ifndef PNG_USER_WIDTH_MAX
-#     define PNG_USER_WIDTH_MAX 0x7fffffff
-#  endif
-#  ifndef PNG_USER_HEIGHT_MAX
-#     define PNG_USER_HEIGHT_MAX 0x7fffffff
-#  endif
-#  ifndef PNG_USER_CHUNK_CACHE_MAX
-#     define PNG_USER_CHUNK_CACHE_MAX 0
-#  endif
-#  ifndef PNG_USER_CHUNK_MALLOC_MAX
-#     define PNG_USER_CHUNK_MALLOC_MAX 0
-#  endif
-#endif
-
-/* Moved to pngpriv.h at libpng-1.5.0 */
-/* NOTE: some of these may have been used in external applications as
- * these definitions were exposed in pngconf.h prior to 1.5.
- */
-
-/* If you are running on a machine where you cannot allocate more
- * than 64K of memory at once, uncomment this.  While libpng will not
- * normally need that much memory in a chunk (unless you load up a very
- * large file), zlib needs to know how big of a chunk it can use, and
- * libpng thus makes sure to check any memory allocation to verify it
- * will fit into memory.
- *
- * zlib provides 'MAXSEG_64K' which, if defined, indicates the
- * same limit and pngconf.h (already included) sets the limit
- * if certain operating systems are detected.
- */
-#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
-#  define PNG_MAX_MALLOC_64K
-#endif
-
-#ifndef PNG_UNUSED
-/* Unused formal parameter warnings are silenced using the following macro
- * which is expected to have no bad effects on performance (optimizing
- * compilers will probably remove it entirely).  Note that if you replace
- * it with something other than whitespace, you must include the terminating
- * semicolon.
- */
-#  define PNG_UNUSED(param) (void)param;
-#endif
-
-/* Just a little check that someone hasn't tried to define something
- * contradictory.
- */
-#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
-#  undef PNG_ZBUF_SIZE
-#  define PNG_ZBUF_SIZE 65536L
-#endif
-
-/* If warnings or errors are turned off the code is disabled or redirected here.
- * From 1.5.4 functions have been added to allow very limited formatting of
- * error and warning messages - this code will also be disabled here.
- */
-#ifdef PNG_WARNINGS_SUPPORTED
-#  define PNG_WARNING_PARAMETERS(p) png_warning_parameters p;
-#else
-#  define png_warning_parameter(p,number,string) ((void)0)
-#  define png_warning_parameter_unsigned(p,number,format,value) ((void)0)
-#  define png_warning_parameter_signed(p,number,format,value) ((void)0)
-#  define png_formatted_warning(pp,p,message) ((void)(pp))
-#  define PNG_WARNING_PARAMETERS(p)
-#endif
-#ifndef PNG_ERROR_TEXT_SUPPORTED
-#  define png_fixed_error(s1,s2) png_err(s1)
-#endif
-
-/* C allows up-casts from (void*) to any pointer and (const void*) to any
- * pointer to a const object.  C++ regards this as a type error and requires an
- * explicit, static, cast and provides the static_cast<> rune to ensure that
- * const is not cast away.
- */
-#ifdef __cplusplus
-#  define png_voidcast(type, value) static_cast<type>(value)
-#  define png_constcast(type, value) const_cast<type>(value)
-#  define png_aligncast(type, value) \
-   static_cast<type>(static_cast<void*>(value))
-#  define png_aligncastconst(type, value) \
-   static_cast<type>(static_cast<const void*>(value))
-#else
-#  define png_voidcast(type, value) (value)
-#  define png_constcast(type, value) ((type)(value))
-#  define png_aligncast(type, value) ((void*)(value))
-#  define png_aligncastconst(type, value) ((const void*)(value))
-#endif /* __cplusplus */
-
-/* Some fixed point APIs are still required even if not exported because
- * they get used by the corresponding floating point APIs.  This magic
- * deals with this:
- */
-#ifdef PNG_FIXED_POINT_SUPPORTED
-#  define PNGFAPI PNGAPI
-#else
-#  define PNGFAPI /* PRIVATE */
-#endif
-
-#ifndef PNG_VERSION_INFO_ONLY
-/* Other defines specific to compilers can go here.  Try to keep
- * them inside an appropriate ifdef/endif pair for portability.
- */
-#if defined(PNG_FLOATING_POINT_SUPPORTED) ||\
-    defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)
-   /* png.c requires the following ANSI-C constants if the conversion of
-    * floating point to ASCII is implemented therein:
-    *
-    *  DBL_DIG  Maximum number of decimal digits (can be set to any constant)
-    *  DBL_MIN  Smallest normalized fp number (can be set to an arbitrary value)
-    *  DBL_MAX  Maximum floating point number (can be set to an arbitrary value)
-    */
-#  include <float.h>
-
-#  if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
-    defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
-     /* We need to check that <math.h> hasn't already been included earlier
-      * as it seems it doesn't agree with <fp.h>, yet we should really use
-      * <fp.h> if possible.
-      */
-#    if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
-#      include <fp.h>
-#    endif
-#  else
-#    include <math.h>
-#  endif
-#  if defined(_AMIGA) && defined(__SASC) && defined(_M68881)
-     /* Amiga SAS/C: We must include builtin FPU functions when compiling using
-      * MATH=68881
-      */
-#    include <m68881.h>
-#  endif
-#endif
-
-/* This provides the non-ANSI (far) memory allocation routines. */
-#if defined(__TURBOC__) && defined(__MSDOS__)
-#  include <mem.h>
-#  include <alloc.h>
-#endif
-
-#if defined(WIN32) || defined(_Windows) || defined(_WINDOWS) || \
-    defined(_WIN32) || defined(__WIN32__)
-#  include <windows.h>  /* defines _WINDOWS_ macro */
-#endif
-#endif /* PNG_VERSION_INFO_ONLY */
-
-/* Moved here around 1.5.0beta36 from pngconf.h */
-/* Users may want to use these so they are not private.  Any library
- * functions that are passed far data must be model-independent.
- */
-
-/* Memory model/platform independent fns */
-#ifndef PNG_ABORT
-#  ifdef _WINDOWS_
-#    define PNG_ABORT() ExitProcess(0)
-#  else
-#    define PNG_ABORT() abort()
-#  endif
-#endif
-
-/* These macros may need to be architecture dependent. */
-#define PNG_ALIGN_NONE   0 /* do not use data alignment */
-#define PNG_ALIGN_ALWAYS 1 /* assume unaligned accesses are OK */
-#ifdef offsetof
-#  define PNG_ALIGN_OFFSET 2 /* use offsetof to determine alignment */
-#else
-#  define PNG_ALIGN_OFFSET -1 /* prevent the use of this */
-#endif
-#define PNG_ALIGN_SIZE   3 /* use sizeof to determine alignment */
-
-#ifndef PNG_ALIGN_TYPE
-   /* Default to using aligned access optimizations and requiring alignment to a
-    * multiple of the data type size.  Override in a compiler specific fashion
-    * if necessary by inserting tests here:
-    */
-#  define PNG_ALIGN_TYPE PNG_ALIGN_SIZE
-#endif
-
-#if PNG_ALIGN_TYPE == PNG_ALIGN_SIZE
-   /* This is used because in some compiler implementations non-aligned
-    * structure members are supported, so the offsetof approach below fails.
-    * Set PNG_ALIGN_SIZE=0 for compiler combinations where unaligned access
-    * is good for performance.  Do not do this unless you have tested the result
-    * and understand it.
-    */
-#  define png_alignof(type) (sizeof (type))
-#else
-#  if PNG_ALIGN_TYPE == PNG_ALIGN_OFFSET
-#     define png_alignof(type) offsetof(struct{char c; type t;}, t)
-#  else
-#     if PNG_ALIGN_TYPE == PNG_ALIGN_ALWAYS
-#        define png_alignof(type) (1)
-#     endif
-      /* Else leave png_alignof undefined to prevent use thereof */
-#  endif
-#endif
-
-/* This implicitly assumes alignment is always to a power of 2. */
-#ifdef png_alignof
-#  define png_isaligned(ptr, type)\
-   ((((const char*)ptr-(const char*)0) & (png_alignof(type)-1)) == 0)
-#else
-#  define png_isaligned(ptr, type) 0
-#endif
-
-/* End of memory model/platform independent support */
-/* End of 1.5.0beta36 move from pngconf.h */
-
-/* CONSTANTS and UTILITY MACROS
- * These are used internally by libpng and not exposed in the API
- */
-
-/* Various modes of operation.  Note that after an init, mode is set to
- * zero automatically when the structure is created.  Three of these
- * are defined in png.h because they need to be visible to applications
- * that call png_set_unknown_chunk().
- */
-/* #define PNG_HAVE_IHDR            0x01 (defined in png.h) */
-/* #define PNG_HAVE_PLTE            0x02 (defined in png.h) */
-#define PNG_HAVE_IDAT               0x04
-/* #define PNG_AFTER_IDAT           0x08 (defined in png.h) */
-#define PNG_HAVE_IEND               0x10
-                   /*               0x20 (unused) */
-                   /*               0x40 (unused) */
-                   /*               0x80 (unused) */
-#define PNG_HAVE_CHUNK_HEADER      0x100
-#define PNG_WROTE_tIME             0x200
-#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
-#define PNG_BACKGROUND_IS_GRAY     0x800
-#define PNG_HAVE_PNG_SIGNATURE    0x1000
-#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
-                   /*             0x4000 (unused) */
-#define PNG_IS_READ_STRUCT        0x8000 /* Else is a write struct */
-
-/* Flags for the transformations the PNG library does on the image data */
-#define PNG_BGR                 0x0001
-#define PNG_INTERLACE           0x0002
-#define PNG_PACK                0x0004
-#define PNG_SHIFT               0x0008
-#define PNG_SWAP_BYTES          0x0010
-#define PNG_INVERT_MONO         0x0020
-#define PNG_QUANTIZE            0x0040
-#define PNG_COMPOSE             0x0080     /* Was PNG_BACKGROUND */
-#define PNG_BACKGROUND_EXPAND   0x0100
-#define PNG_EXPAND_16           0x0200     /* Added to libpng 1.5.2 */
-#define PNG_16_TO_8             0x0400     /* Becomes 'chop' in 1.5.4 */
-#define PNG_RGBA                0x0800
-#define PNG_EXPAND              0x1000
-#define PNG_GAMMA               0x2000
-#define PNG_GRAY_TO_RGB         0x4000
-#define PNG_FILLER              0x8000
-#define PNG_PACKSWAP           0x10000
-#define PNG_SWAP_ALPHA         0x20000
-#define PNG_STRIP_ALPHA        0x40000
-#define PNG_INVERT_ALPHA       0x80000
-#define PNG_USER_TRANSFORM    0x100000
-#define PNG_RGB_TO_GRAY_ERR   0x200000
-#define PNG_RGB_TO_GRAY_WARN  0x400000
-#define PNG_RGB_TO_GRAY       0x600000 /* two bits, RGB_TO_GRAY_ERR|WARN */
-#define PNG_ENCODE_ALPHA      0x800000 /* Added to libpng-1.5.4 */
-#define PNG_ADD_ALPHA         0x1000000 /* Added to libpng-1.2.7 */
-#define PNG_EXPAND_tRNS       0x2000000 /* Added to libpng-1.2.9 */
-#define PNG_SCALE_16_TO_8     0x4000000 /* Added to libpng-1.5.4 */
-                       /*   0x8000000 unused */
-                       /*  0x10000000 unused */
-                       /*  0x20000000 unused */
-                       /*  0x40000000 unused */
-/* Flags for png_create_struct */
-#define PNG_STRUCT_PNG   0x0001
-#define PNG_STRUCT_INFO  0x0002
-
-/* Scaling factor for filter heuristic weighting calculations */
-#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
-#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
-
-/* Flags for the png_ptr->flags rather than declaring a byte for each one */
-#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
-#define PNG_FLAG_ZSTREAM_INITIALIZED      0x0002 /* Added to libpng-1.6.0 */
-                                  /*      0x0004    unused */
-#define PNG_FLAG_ZSTREAM_ENDED            0x0008 /* Added to libpng-1.6.0 */
-                                  /*      0x0010    unused */
-                                  /*      0x0020    unused */
-#define PNG_FLAG_ROW_INIT                 0x0040
-#define PNG_FLAG_FILLER_AFTER             0x0080
-#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
-#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
-#define PNG_FLAG_CRC_CRITICAL_USE         0x0400
-#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
-#define PNG_FLAG_ASSUME_sRGB              0x1000 /* Added to libpng-1.5.4 */
-#define PNG_FLAG_OPTIMIZE_ALPHA           0x2000 /* Added to libpng-1.5.4 */
-#define PNG_FLAG_DETECT_UNINITIALIZED     0x4000 /* Added to libpng-1.5.4 */
-/* #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000 */
-/* #define PNG_FLAG_KEEP_UNSAFE_CHUNKS      0x10000 */
-#define PNG_FLAG_LIBRARY_MISMATCH        0x20000
-#define PNG_FLAG_STRIP_ERROR_NUMBERS     0x40000
-#define PNG_FLAG_STRIP_ERROR_TEXT        0x80000
-#define PNG_FLAG_BENIGN_ERRORS_WARN     0x100000 /* Added to libpng-1.4.0 */
-#define PNG_FLAG_APP_WARNINGS_WARN      0x200000 /* Added to libpng-1.6.0 */
-#define PNG_FLAG_APP_ERRORS_WARN        0x400000 /* Added to libpng-1.6.0 */
-                                  /*    0x800000    unused */
-                                  /*   0x1000000    unused */
-                                  /*   0x2000000    unused */
-                                  /*   0x4000000    unused */
-                                  /*   0x8000000    unused */
-                                  /*  0x10000000    unused */
-                                  /*  0x20000000    unused */
-                                  /*  0x40000000    unused */
-
-#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
-                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)
-
-#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
-                                     PNG_FLAG_CRC_CRITICAL_IGNORE)
-
-#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
-                                     PNG_FLAG_CRC_CRITICAL_MASK)
-
-/* Save typing and make code easier to understand */
-
-#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
-   abs((int)((c1).green) - (int)((c2).green)) + \
-   abs((int)((c1).blue) - (int)((c2).blue)))
-
-/* Added to libpng-1.6.0: scale a 16-bit value in the range 0..65535 to 0..255
- * by dividing by 257 *with rounding*.  This macro is exact for the given range.
- * See the discourse in pngrtran.c png_do_scale_16_to_8.  The values in the
- * macro were established by experiment (modifying the added value).  The macro
- * has a second variant that takes a value already scaled by 255 and divides by
- * 65535 - this has a maximum error of .502.  Over the range 0..65535*65535 it
- * only gives off-by-one errors and only for 0.5% (1 in 200) of the values.
- */
-#define PNG_DIV65535(v24) (((v24) + 32895) >> 16)
-#define PNG_DIV257(v16) PNG_DIV65535((png_uint_32)(v16) * 255)
-
-/* Added to libpng-1.2.6 JB */
-#define PNG_ROWBYTES(pixel_bits, width) \
-    ((pixel_bits) >= 8 ? \
-    ((png_size_t)(width) * (((png_size_t)(pixel_bits)) >> 3)) : \
-    (( ((png_size_t)(width) * ((png_size_t)(pixel_bits))) + 7) >> 3) )
-
-/* PNG_OUT_OF_RANGE returns true if value is outside the range
- * ideal-delta..ideal+delta.  Each argument is evaluated twice.
- * "ideal" and "delta" should be constants, normally simple
- * integers, "value" a variable. Added to libpng-1.2.6 JB
- */
-#define PNG_OUT_OF_RANGE(value, ideal, delta) \
-   ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
-
-/* Conversions between fixed and floating point, only defined if
- * required (to make sure the code doesn't accidentally use float
- * when it is supposedly disabled.)
- */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-/* The floating point conversion can't overflow, though it can and
- * does lose accuracy relative to the original fixed point value.
- * In practice this doesn't matter because png_fixed_point only
- * stores numbers with very low precision.  The png_ptr and s
- * arguments are unused by default but are there in case error
- * checking becomes a requirement.
- */
-#define png_float(png_ptr, fixed, s) (.00001 * (fixed))
-
-/* The fixed point conversion performs range checking and evaluates
- * its argument multiple times, so must be used with care.  The
- * range checking uses the PNG specification values for a signed
- * 32 bit fixed point value except that the values are deliberately
- * rounded-to-zero to an integral value - 21474 (21474.83 is roughly
- * (2^31-1) * 100000). 's' is a string that describes the value being
- * converted.
- *
- * NOTE: this macro will raise a png_error if the range check fails,
- * therefore it is normally only appropriate to use this on values
- * that come from API calls or other sources where an out of range
- * error indicates a programming error, not a data error!
- *
- * NOTE: by default this is off - the macro is not used - because the
- * function call saves a lot of code.
- */
-#ifdef PNG_FIXED_POINT_MACRO_SUPPORTED
-#define png_fixed(png_ptr, fp, s) ((fp) <= 21474 && (fp) >= -21474 ?\
-    ((png_fixed_point)(100000 * (fp))) : (png_fixed_error(png_ptr, s),0))
-#endif
-/* else the corresponding function is defined below, inside the scope of the
- * cplusplus test.
- */
-#endif
-
-/* Constants for known chunk types.  If you need to add a chunk, define the name
- * here.  For historical reasons these constants have the form png_<name>; i.e.
- * the prefix is lower case.  Please use decimal values as the parameters to
- * match the ISO PNG specification and to avoid relying on the C locale
- * interpretation of character values.
- *
- * Prior to 1.5.6 these constants were strings, as of 1.5.6 png_uint_32 values
- * are computed and a new macro (PNG_STRING_FROM_CHUNK) added to allow a string
- * to be generated if required.
- *
- * PNG_32b correctly produces a value shifted by up to 24 bits, even on
- * architectures where (int) is only 16 bits.
- */
-#define PNG_32b(b,s) ((png_uint_32)(b) << (s))
-#define PNG_U32(b1,b2,b3,b4) \
-   (PNG_32b(b1,24) | PNG_32b(b2,16) | PNG_32b(b3,8) | PNG_32b(b4,0))
-
-/* Constants for known chunk types.
- *
- * MAINTAINERS: If you need to add a chunk, define the name here.
- * For historical reasons these constants have the form png_<name>; i.e.
- * the prefix is lower case.  Please use decimal values as the parameters to
- * match the ISO PNG specification and to avoid relying on the C locale
- * interpretation of character values.  Please keep the list sorted.
- *
- * Notice that PNG_U32 is used to define a 32-bit value for the 4 byte chunk
- * type.  In fact the specification does not express chunk types this way,
- * however using a 32-bit value means that the chunk type can be read from the
- * stream using exactly the same code as used for a 32-bit unsigned value and
- * can be examined far more efficiently (using one arithmetic compare).
- *
- * Prior to 1.5.6 the chunk type constants were expressed as C strings.  The
- * libpng API still uses strings for 'unknown' chunks and a macro,
- * PNG_STRING_FROM_CHUNK, allows a string to be generated if required.  Notice
- * that for portable code numeric values must still be used; the string "IHDR"
- * is not portable and neither is PNG_U32('I', 'H', 'D', 'R').
- *
- * In 1.7.0 the definitions will be made public in png.h to avoid having to
- * duplicate the same definitions in application code.
- */
-#define png_IDAT PNG_U32( 73,  68,  65,  84)
-#define png_IEND PNG_U32( 73,  69,  78,  68)
-#define png_IHDR PNG_U32( 73,  72,  68,  82)
-#define png_PLTE PNG_U32( 80,  76,  84,  69)
-#define png_bKGD PNG_U32( 98,  75,  71,  68)
-#define png_cHRM PNG_U32( 99,  72,  82,  77)
-#define png_fRAc PNG_U32(102,  82,  65,  99) /* registered, not defined */
-#define png_gAMA PNG_U32(103,  65,  77,  65)
-#define png_gIFg PNG_U32(103,  73,  70, 103)
-#define png_gIFt PNG_U32(103,  73,  70, 116) /* deprecated */
-#define png_gIFx PNG_U32(103,  73,  70, 120)
-#define png_hIST PNG_U32(104,  73,  83,  84)
-#define png_iCCP PNG_U32(105,  67,  67,  80)
-#define png_iTXt PNG_U32(105,  84,  88, 116)
-#define png_oFFs PNG_U32(111,  70,  70, 115)
-#define png_pCAL PNG_U32(112,  67,  65,  76)
-#define png_pHYs PNG_U32(112,  72,  89, 115)
-#define png_sBIT PNG_U32(115,  66,  73,  84)
-#define png_sCAL PNG_U32(115,  67,  65,  76)
-#define png_sPLT PNG_U32(115,  80,  76,  84)
-#define png_sRGB PNG_U32(115,  82,  71,  66)
-#define png_sTER PNG_U32(115,  84,  69,  82)
-#define png_tEXt PNG_U32(116,  69,  88, 116)
-#define png_tIME PNG_U32(116,  73,  77,  69)
-#define png_tRNS PNG_U32(116,  82,  78,  83)
-#define png_zTXt PNG_U32(122,  84,  88, 116)
-
-/* The following will work on (signed char*) strings, whereas the get_uint_32
- * macro will fail on top-bit-set values because of the sign extension.
- */
-#define PNG_CHUNK_FROM_STRING(s)\
-   PNG_U32(0xff&(s)[0], 0xff&(s)[1], 0xff&(s)[2], 0xff&(s)[3])
-
-/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
- * signed and the argument is a (char[])  This macro will fail miserably on
- * systems where (char) is more than 8 bits.
- */
-#define PNG_STRING_FROM_CHUNK(s,c)\
-   (void)(((char*)(s))[0]=(char)((c)>>24), ((char*)(s))[1]=(char)((c)>>16),\
-   ((char*)(s))[2]=(char)((c)>>8), ((char*)(s))[3]=(char)((c)))
-
-/* Do the same but terminate with a null character. */
-#define PNG_CSTRING_FROM_CHUNK(s,c)\
-   (void)(PNG_STRING_FROM_CHUNK(s,c), ((char*)(s))[4] = 0)
-
-/* Test on flag values as defined in the spec (section 5.4): */
-#define PNG_CHUNK_ANCILLARY(c)   (1 & ((c) >> 29))
-#define PNG_CHUNK_CRITICAL(c)     (!PNG_CHUNK_ANCILLARY(c))
-#define PNG_CHUNK_PRIVATE(c)      (1 & ((c) >> 21))
-#define PNG_CHUNK_RESERVED(c)     (1 & ((c) >> 13))
-#define PNG_CHUNK_SAFE_TO_COPY(c) (1 & ((c) >>  5))
-
-/* Gamma values (new at libpng-1.5.4): */
-#define PNG_GAMMA_MAC_OLD 151724  /* Assume '1.8' is really 2.2/1.45! */
-#define PNG_GAMMA_MAC_INVERSE 65909
-#define PNG_GAMMA_sRGB_INVERSE 45455
-
-/* Almost everything below is C specific; the #defines above can be used in
- * non-C code (so long as it is C-preprocessed) the rest of this stuff cannot.
- */
-#ifndef PNG_VERSION_INFO_ONLY
-
-#include "pngstruct.h"
-#include "pnginfo.h"
-
-/* Validate the include paths - the include path used to generate pnglibconf.h
- * must match that used in the build, or we must be using pnglibconf.h.prebuilt:
- */
-#if PNG_ZLIB_VERNUM != 0 && PNG_ZLIB_VERNUM != ZLIB_VERNUM
-#  error ZLIB_VERNUM != PNG_ZLIB_VERNUM \
-      "-I (include path) error: see the notes in pngpriv.h"
-   /* This means that when pnglibconf.h was built the copy of zlib.h that it
-    * used is not the same as the one being used here.  Because the build of
-    * libpng makes decisions to use inflateInit2 and inflateReset2 based on the
-    * zlib version number and because this affects handling of certain broken
-    * PNG files the -I directives must match.
-    *
-    * The most likely explanation is that you passed a -I in CFLAGS. This will
-    * not work; all the preprocessor directories and in particular all the -I
-    * directives must be in CPPFLAGS.
-    */
-#endif
-
-/* This is used for 16 bit gamma tables -- only the top level pointers are
- * const; this could be changed:
- */
-typedef const png_uint_16p * png_const_uint_16pp;
-
-/* Added to libpng-1.5.7: sRGB conversion tables */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_table, [256]);
-   /* Convert from an sRGB encoded value 0..255 to a 16-bit linear value,
-    * 0..65535.  This table gives the closest 16-bit answers (no errors).
-    */
-#endif
-
-PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_base, [512]);
-PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
-
-#define PNG_sRGB_FROM_LINEAR(linear) ((png_byte)((png_sRGB_base[(linear)>>15] +\
-   ((((linear)&0x7fff)*png_sRGB_delta[(linear)>>15])>>12)) >> 8))
-   /* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
-    * encoded value with maximum error 0.646365.  Note that the input is not a
-    * 16-bit value; it has been multiplied by 255! */
-#endif /* SIMPLIFIED_READ/WRITE */
-
-
-/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Internal functions; these are not exported from a DLL however because they
- * are used within several of the C source files they have to be C extern.
- *
- * All of these functions must be declared with PNG_INTERNAL_FUNCTION.
- */
-
-/* Zlib support */
-#define PNG_UNEXPECTED_ZLIB_RETURN (-7)
-PNG_INTERNAL_FUNCTION(void, png_zstream_error,(png_structrp png_ptr, int ret),
-   PNG_EMPTY);
-   /* Used by the zlib handling functions to ensure that z_stream::msg is always
-    * set before they return.
-    */
-
-#ifdef PNG_WRITE_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_free_buffer_list,(png_structrp png_ptr,
-   png_compression_bufferp *list),PNG_EMPTY);
-   /* Free the buffer list used by the compressed write code. */
-#endif
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
-   !defined(PNG_FIXED_POINT_MACRO_SUPPORTED) && \
-   (defined(PNG_gAMA_SUPPORTED) || defined(PNG_cHRM_SUPPORTED) || \
-   defined(PNG_sCAL_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)) || \
-   (defined(PNG_sCAL_SUPPORTED) && \
-   defined(PNG_FLOATING_ARITHMETIC_SUPPORTED))
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_fixed,(png_const_structrp png_ptr,
-   double fp, png_const_charp text),PNG_EMPTY);
-#endif
-
-/* Check the user version string for compatibility, returns false if the version
- * numbers aren't compatible.
- */
-PNG_INTERNAL_FUNCTION(int,png_user_version_check,(png_structrp png_ptr,
-   png_const_charp user_png_ver),PNG_EMPTY);
-
-/* Internal base allocator - no messages, NULL on failure to allocate.  This
- * does, however, call the application provided allocator and that could call
- * png_error (although that would be a bug in the application implementation.)
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_base,(png_const_structrp png_ptr,
-   png_alloc_size_t size),PNG_ALLOCATED);
-
-#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) ||\
-   defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED)
-/* Internal array allocator, outputs no error or warning messages on failure,
- * just returns NULL.  
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_array,(png_const_structrp png_ptr,
-   int nelements, size_t element_size),PNG_ALLOCATED);
-
-/* The same but an existing array is extended by add_elements.  This function
- * also memsets the new elements to 0 and copies the old elements.  The old
- * array is not freed or altered.
- */
-PNG_INTERNAL_FUNCTION(png_voidp,png_realloc_array,(png_const_structrp png_ptr,
-   png_const_voidp array, int old_elements, int add_elements,
-   size_t element_size),PNG_ALLOCATED);
-#endif /* text, sPLT or unknown chunks */
-
-/* Magic to create a struct when there is no struct to call the user supplied
- * memory allocators.  Because error handling has not been set up the memory
- * handlers can't safely call png_error, but this is an obscure and undocumented
- * restriction so libpng has to assume that the 'free' handler, at least, might
- * call png_error.
- */
-PNG_INTERNAL_FUNCTION(png_structp,png_create_png_struct,
-   (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
-    png_error_ptr warn_fn, png_voidp mem_ptr, png_malloc_ptr malloc_fn,
-    png_free_ptr free_fn),PNG_ALLOCATED);
-
-/* Free memory from internal libpng struct */
-PNG_INTERNAL_FUNCTION(void,png_destroy_png_struct,(png_structrp png_ptr),
-   PNG_EMPTY);
-
-/* Free an allocated jmp_buf (always succeeds) */
-PNG_INTERNAL_FUNCTION(void,png_free_jmpbuf,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Function to allocate memory for zlib.  PNGAPI is disallowed. */
-PNG_INTERNAL_FUNCTION(voidpf,png_zalloc,(voidpf png_ptr, uInt items, uInt size),
-   PNG_ALLOCATED);
-
-/* Function to free memory for zlib.  PNGAPI is disallowed. */
-PNG_INTERNAL_FUNCTION(void,png_zfree,(voidpf png_ptr, voidpf ptr),PNG_EMPTY);
-
-/* Next four functions are used internally as callbacks.  PNGCBAPI is required
- * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3, changed to
- * PNGCBAPI at 1.5.0
- */
-
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_read_data,(png_structp png_ptr,
-    png_bytep data, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_push_fill_buffer,(png_structp png_ptr,
-    png_bytep buffer, png_size_t length),PNG_EMPTY);
-#endif
-
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_write_data,(png_structp png_ptr,
-    png_bytep data, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_STDIO_SUPPORTED
-PNG_INTERNAL_FUNCTION(void PNGCBAPI,png_default_flush,(png_structp png_ptr),
-   PNG_EMPTY);
-#  endif
-#endif
-
-/* Reset the CRC variable */
-PNG_INTERNAL_FUNCTION(void,png_reset_crc,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Write the "data" buffer to whatever output you are using */
-PNG_INTERNAL_FUNCTION(void,png_write_data,(png_structrp png_ptr,
-    png_const_bytep data, png_size_t length),PNG_EMPTY);
-
-/* Read and check the PNG file signature */
-PNG_INTERNAL_FUNCTION(void,png_read_sig,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-
-/* Read the chunk header (length + type name) */
-PNG_INTERNAL_FUNCTION(png_uint_32,png_read_chunk_header,(png_structrp png_ptr),
-   PNG_EMPTY);
-
-/* Read data from whatever input you are using into the "data" buffer */
-PNG_INTERNAL_FUNCTION(void,png_read_data,(png_structrp png_ptr, png_bytep data,
-    png_size_t length),PNG_EMPTY);
-
-/* Read bytes into buf, and update png_ptr->crc */
-PNG_INTERNAL_FUNCTION(void,png_crc_read,(png_structrp png_ptr, png_bytep buf,
-    png_uint_32 length),PNG_EMPTY);
-
-/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
-PNG_INTERNAL_FUNCTION(int,png_crc_finish,(png_structrp png_ptr,
-   png_uint_32 skip),PNG_EMPTY);
-
-/* Read the CRC from the file and compare it to the libpng calculated CRC */
-PNG_INTERNAL_FUNCTION(int,png_crc_error,(png_structrp png_ptr),PNG_EMPTY);
-
-/* Calculate the CRC over a section of data.  Note that we are only
- * passing a maximum of 64K on systems that have this as a memory limit,
- * since this is the maximum buffer size we can specify.
- */
-PNG_INTERNAL_FUNCTION(void,png_calculate_crc,(png_structrp png_ptr,
-   png_const_bytep ptr, png_size_t length),PNG_EMPTY);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_flush,(png_structrp png_ptr),PNG_EMPTY);
-#endif
-
-/* Write various chunks */
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information.
- */
-PNG_INTERNAL_FUNCTION(void,png_write_IHDR,(png_structrp png_ptr,
-   png_uint_32 width, png_uint_32 height, int bit_depth, int color_type,
-   int compression_method, int filter_method, int interlace_method),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_write_PLTE,(png_structrp png_ptr,
-   png_const_colorp palette, png_uint_32 num_pal),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_compress_IDAT,(png_structrp png_ptr,
-   png_const_bytep row_data, png_alloc_size_t row_data_length, int flush),
-   PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_write_IEND,(png_structrp png_ptr),PNG_EMPTY);
-
-#ifdef PNG_WRITE_gAMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_gAMA_fixed,(png_structrp png_ptr,
-    png_fixed_point file_gamma),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sBIT,(png_structrp png_ptr,
-    png_const_color_8p sbit, int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_cHRM_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_cHRM_fixed,(png_structrp png_ptr,
-    const png_xy *xy), PNG_EMPTY);
-    /* The xy value must have been previously validated */
-#endif
-
-#ifdef PNG_WRITE_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sRGB,(png_structrp png_ptr,
-    int intent),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_iCCP,(png_structrp png_ptr,
-   png_const_charp name, png_const_bytep profile), PNG_EMPTY);
-   /* The profile must have been previously validated for correctness, the
-    * length comes from the first four bytes.  Only the base, deflate,
-    * compression is supported.
-    */
-#endif
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sPLT,(png_structrp png_ptr,
-    png_const_sPLT_tp palette),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tRNS,(png_structrp png_ptr,
-    png_const_bytep trans, png_const_color_16p values, int number,
-    int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_bKGD,(png_structrp png_ptr,
-    png_const_color_16p values, int color_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_hIST,(png_structrp png_ptr,
-    png_const_uint_16p hist, int num_hist),PNG_EMPTY);
-#endif
-
-/* Chunks that have keywords */
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tEXt,(png_structrp png_ptr,
-   png_const_charp key, png_const_charp text, png_size_t text_len),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_zTXt,(png_structrp png_ptr, png_const_charp
-    key, png_const_charp text, int compression),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_iTXt,(png_structrp png_ptr,
-    int compression, png_const_charp key, png_const_charp lang,
-    png_const_charp lang_key, png_const_charp text),PNG_EMPTY);
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED  /* Added at version 1.0.14 and 1.2.4 */
-PNG_INTERNAL_FUNCTION(int,png_set_text_2,(png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_textp text_ptr, int num_text),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_oFFs,(png_structrp png_ptr,
-    png_int_32 x_offset, png_int_32 y_offset, int unit_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_pCAL,(png_structrp png_ptr,
-    png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams,
-    png_const_charp units, png_charpp params),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_pHYs,(png_structrp png_ptr,
-    png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
-    int unit_type),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_tIME,(png_structrp png_ptr,
-    png_const_timep mod_time),PNG_EMPTY);
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_write_sCAL_s,(png_structrp png_ptr,
-    int unit, png_const_charp width, png_const_charp height),PNG_EMPTY);
-#endif
-
-/* Called when finished processing a row of data */
-PNG_INTERNAL_FUNCTION(void,png_write_finish_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-
-/* Internal use only.   Called before first row of data */
-PNG_INTERNAL_FUNCTION(void,png_write_start_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-
-/* Combine a row of data, dealing with alpha, etc. if requested.  'row' is an
- * array of png_ptr->width pixels.  If the image is not interlaced or this
- * is the final pass this just does a memcpy, otherwise the "display" flag
- * is used to determine whether to copy pixels that are not in the current pass.
- *
- * Because 'png_do_read_interlace' (below) replicates pixels this allows this
- * function to achieve the documented 'blocky' appearance during interlaced read
- * if display is 1 and the 'sparkle' appearance, where existing pixels in 'row'
- * are not changed if they are not in the current pass, when display is 0.
- *
- * 'display' must be 0 or 1, otherwise the memcpy will be done regardless.
- *
- * The API always reads from the png_struct row buffer and always assumes that
- * it is full width (png_do_read_interlace has already been called.)
- *
- * This function is only ever used to write to row buffers provided by the
- * caller of the relevant libpng API and the row must have already been
- * transformed by the read transformations.
- *
- * The PNG_USE_COMPILE_TIME_MASKS option causes generation of pre-computed
- * bitmasks for use within the code, otherwise runtime generated masks are used.
- * The default is compile time masks.
- */
-#ifndef PNG_USE_COMPILE_TIME_MASKS
-#  define PNG_USE_COMPILE_TIME_MASKS 1
-#endif
-PNG_INTERNAL_FUNCTION(void,png_combine_row,(png_const_structrp png_ptr,
-    png_bytep row, int display),PNG_EMPTY);
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-/* Expand an interlaced row: the 'row_info' describes the pass data that has
- * been read in and must correspond to the pixels in 'row', the pixels are
- * expanded (moved apart) in 'row' to match the final layout, when doing this
- * the pixels are *replicated* to the intervening space.  This is essential for
- * the correct operation of png_combine_row, above.
- */
-PNG_INTERNAL_FUNCTION(void,png_do_read_interlace,(png_row_infop row_info,
-    png_bytep row, int pass, png_uint_32 transformations),PNG_EMPTY);
-#endif
-
-/* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-/* Grab pixels out of a row for an interlaced pass */
-PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
-    png_bytep row, int pass),PNG_EMPTY);
-#endif
-
-/* Unfilter a row: check the filter value before calling this, there is no point
- * calling it for PNG_FILTER_VALUE_NONE.
- */
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row,(png_structrp pp, png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row, int filter),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,(png_row_infop row_info,
-    png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,(png_row_infop
-    row_info, png_bytep row, png_const_bytep prev_row),PNG_EMPTY);
-
-/* Choose the best filter to use and filter the row data */
-PNG_INTERNAL_FUNCTION(void,png_write_find_filter,(png_structrp png_ptr,
-    png_row_infop row_info),PNG_EMPTY);
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_read_IDAT_data,(png_structrp png_ptr,
-   png_bytep output, png_alloc_size_t avail_out),PNG_EMPTY);
-   /* Read 'avail_out' bytes of data from the IDAT stream.  If the output buffer
-    * is NULL the function checks, instead, for the end of the stream.  In this
-    * case a benign error will be issued if the stream end is not found or if
-    * extra data has to be consumed.
-    */
-PNG_INTERNAL_FUNCTION(void,png_read_finish_IDAT,(png_structrp png_ptr),
-   PNG_EMPTY);
-   /* This cleans up when the IDAT LZ stream does not end when the last image
-    * byte is read; there is still some pending input.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_read_finish_row,(png_structrp png_ptr),
-   PNG_EMPTY);
-   /* Finish a row while reading, dealing with interlacing passes, etc. */
-#endif /* SEQUENTIAL_READ */
-
-/* Initialize the row buffers, etc. */
-PNG_INTERNAL_FUNCTION(void,png_read_start_row,(png_structrp png_ptr),PNG_EMPTY);
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-/* Optional call to update the users info structure */
-PNG_INTERNAL_FUNCTION(void,png_read_transform_info,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#endif
-
-/* Shared transform functions, defined in pngtran.c */
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
-    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_strip_channel,(png_row_infop row_info,
-    png_bytep row, int at_start),PNG_EMPTY);
-#endif
-
-#ifdef PNG_16BIT_SUPPORTED
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_swap,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
-    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_packswap,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_invert,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_bgr,(png_row_infop row_info,
-    png_bytep row),PNG_EMPTY);
-#endif
-
-/* The following decodes the appropriate chunks, and does error correction,
- * then calls the appropriate callback for the chunk if it is valid.
- */
-
-/* Decode the IHDR chunk */
-PNG_INTERNAL_FUNCTION(void,png_handle_IHDR,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_handle_PLTE,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_handle_IEND,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_bKGD,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_cHRM,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_gAMA,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_hIST,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_iCCP,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif /* READ_iCCP */
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_oFFs,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_pCAL,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_pHYs,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sBIT,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sCAL,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sPLT,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif /* READ_sPLT */
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_sRGB,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tIME,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_tRNS,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_handle_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-#endif
-
-PNG_INTERNAL_FUNCTION(void,png_check_chunk_name,(png_structrp png_ptr,
-    png_uint_32 chunk_name),PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_handle_unknown,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length, int keep),PNG_EMPTY);
-   /* This is the function that gets called for unknown chunks.  The 'keep'
-    * argument is either non-zero for a known chunk that has been set to be
-    * handled as unknown or zero for an unknown chunk.  By default the function
-    * just skips the chunk or errors out if it is critical.
-    */
-
-#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) ||\
-    defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
-PNG_INTERNAL_FUNCTION(int,png_chunk_unknown_handling,
-    (png_const_structrp png_ptr, png_uint_32 chunk_name),PNG_EMPTY);
-   /* Exactly as the API png_handle_as_unknown() except that the argument is a
-    * 32-bit chunk name, not a string.
-    */
-#endif /* READ_UNKNOWN_CHUNKS || HANDLE_AS_UNKNOWN */
-
-/* Handle the transformations for reading and writing */
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_read_transformations,(png_structrp png_ptr,
-   png_row_infop row_info),PNG_EMPTY);
-#endif
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_do_write_transformations,(png_structrp png_ptr,
-   png_row_infop row_info),PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_init_read_transformations,(png_structrp png_ptr),
-    PNG_EMPTY);
-#endif
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_read_chunk,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_sig,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_check_crc,(png_structrp png_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_crc_skip,(png_structrp png_ptr,
-    png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_crc_finish,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_save_buffer,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_restore_buffer,(png_structrp png_ptr,
-    png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_IDAT,(png_structrp png_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_process_IDAT_data,(png_structrp png_ptr,
-    png_bytep buffer, png_size_t buffer_length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_process_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_handle_unknown,(png_structrp png_ptr,
-   png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_info,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_end,(png_structrp png_ptr,
-   png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_have_row,(png_structrp png_ptr,
-     png_bytep row),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_end,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_process_some_data,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_read_push_finish_row,(png_structrp png_ptr),
-    PNG_EMPTY);
-#  ifdef PNG_READ_tEXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_tEXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-#  ifdef PNG_READ_zTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_zTXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-#  ifdef PNG_READ_iTXt_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_push_handle_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr, png_uint_32 length),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_push_read_iTXt,(png_structrp png_ptr,
-    png_inforp info_ptr),PNG_EMPTY);
-#  endif
-
-#endif /* PROGRESSIVE_READ */
-
-/* Added at libpng version 1.6.0 */
-#ifdef PNG_GAMMA_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_colorspace_set_gamma,(png_const_structrp png_ptr,
-    png_colorspacerp colorspace, png_fixed_point gAMA), PNG_EMPTY);
-   /* Set the colorspace gamma with a value provided by the application or by
-    * the gAMA chunk on read.  The value will override anything set by an ICC
-    * profile.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_colorspace_sync_info,(png_const_structrp png_ptr,
-    png_inforp info_ptr), PNG_EMPTY);
-    /* Synchronize the info 'valid' flags with the colorspace */
-
-PNG_INTERNAL_FUNCTION(void,png_colorspace_sync,(png_const_structrp png_ptr,
-    png_inforp info_ptr), PNG_EMPTY);
-    /* Copy the png_struct colorspace to the info_struct and call the above to
-     * synchronize the flags.  Checks for NULL info_ptr and does nothing.
-     */
-#endif
-
-/* Added at libpng version 1.4.0 */
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* These internal functions are for maintaining the colorspace structure within
- * a png_info or png_struct (or, indeed, both).
- */
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_chromaticities,
-   (png_const_structrp png_ptr, png_colorspacerp colorspace, const png_xy *xy,
-    int preferred), PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_endpoints,
-   (png_const_structrp png_ptr, png_colorspacerp colorspace, const png_XYZ *XYZ,
-    int preferred), PNG_EMPTY);
-
-#ifdef PNG_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_sRGB,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, int intent), PNG_EMPTY);
-   /* This does set the colorspace gAMA and cHRM values too, but doesn't set the
-    * flags to write them, if it returns false there was a problem and an error
-    * message has already been output (but the colorspace may still need to be
-    * synced to record the invalid flag).
-    */
-#endif /* sRGB */
-
-#ifdef PNG_iCCP_SUPPORTED
-PNG_INTERNAL_FUNCTION(int,png_colorspace_set_ICC,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length, png_const_bytep profile, int color_type),
-   PNG_EMPTY);
-   /* The 'name' is used for information only */
-
-/* Routines for checking parts of an ICC profile. */
-PNG_INTERNAL_FUNCTION(int,png_icc_check_length,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length), PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(int,png_icc_check_header,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length,
-   png_const_bytep profile /* first 132 bytes only */, int color_type),
-   PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(int,png_icc_check_tag_table,(png_const_structrp png_ptr,
-   png_colorspacerp colorspace, png_const_charp name,
-   png_uint_32 profile_length,
-   png_const_bytep profile /* header plus whole tag table */), PNG_EMPTY);
-#ifdef PNG_sRGB_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_icc_set_sRGB,(
-   png_const_structrp png_ptr, png_colorspacerp colorspace,
-   png_const_bytep profile, uLong adler), PNG_EMPTY);
-   /* 'adler' is the Adler32 checksum of the uncompressed profile data. It may
-    * be zero to indicate that it is not available.  It is used, if provided,
-    * as a fast check on the profile when checking to see if it is sRGB.
-    */
-#endif
-#endif /* iCCP */
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_colorspace_set_rgb_coefficients,
-   (png_structrp png_ptr), PNG_EMPTY);
-   /* Set the rgb_to_gray coefficients from the colorspace Y values */
-#endif /* READ_RGB_TO_GRAY */
-#endif /* COLORSPACE */
-
-/* Added at libpng version 1.4.0 */
-PNG_INTERNAL_FUNCTION(void,png_check_IHDR,(png_const_structrp png_ptr,
-    png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_type, int compression_type,
-    int filter_type),PNG_EMPTY);
-
-/* Added at libpng version 1.5.10 */
-#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \
-    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_do_check_palette_indexes,
-   (png_structrp png_ptr, png_row_infop row_info),PNG_EMPTY);
-#endif
-
-#if defined(PNG_FLOATING_POINT_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED)
-PNG_INTERNAL_FUNCTION(void,png_fixed_error,(png_const_structrp png_ptr,
-   png_const_charp name),PNG_NORETURN);
-#endif
-
-/* Puts 'string' into 'buffer' at buffer[pos], taking care never to overwrite
- * the end.  Always leaves the buffer nul terminated.  Never errors out (and
- * there is no error code.)
- */
-PNG_INTERNAL_FUNCTION(size_t,png_safecat,(png_charp buffer, size_t bufsize,
-   size_t pos, png_const_charp string),PNG_EMPTY);
-
-/* Various internal functions to handle formatted warning messages, currently
- * only implemented for warnings.
- */
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_TIME_RFC1123_SUPPORTED)
-/* Utility to dump an unsigned value into a buffer, given a start pointer and
- * and end pointer (which should point just *beyond* the end of the buffer!)
- * Returns the pointer to the start of the formatted string.  This utility only
- * does unsigned values.
- */
-PNG_INTERNAL_FUNCTION(png_charp,png_format_number,(png_const_charp start,
-   png_charp end, int format, png_alloc_size_t number),PNG_EMPTY);
-
-/* Convenience macro that takes an array: */
-#define PNG_FORMAT_NUMBER(buffer,format,number) \
-   png_format_number(buffer, buffer + (sizeof buffer), format, number)
-
-/* Suggested size for a number buffer (enough for 64 bits and a sign!) */
-#define PNG_NUMBER_BUFFER_SIZE 24
-
-/* These are the integer formats currently supported, the name is formed from
- * the standard printf(3) format string.
- */
-#define PNG_NUMBER_FORMAT_u     1 /* chose unsigned API! */
-#define PNG_NUMBER_FORMAT_02u   2
-#define PNG_NUMBER_FORMAT_d     1 /* chose signed API! */
-#define PNG_NUMBER_FORMAT_02d   2
-#define PNG_NUMBER_FORMAT_x     3
-#define PNG_NUMBER_FORMAT_02x   4
-#define PNG_NUMBER_FORMAT_fixed 5 /* choose the signed API */
-#endif
-
-#ifdef PNG_WARNINGS_SUPPORTED
-/* New defines and members adding in libpng-1.5.4 */
-#  define PNG_WARNING_PARAMETER_SIZE 32
-#  define PNG_WARNING_PARAMETER_COUNT 8 /* Maximum 9; see pngerror.c */
-
-/* An l-value of this type has to be passed to the APIs below to cache the
- * values of the parameters to a formatted warning message.
- */
-typedef char png_warning_parameters[PNG_WARNING_PARAMETER_COUNT][
-   PNG_WARNING_PARAMETER_SIZE];
-
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter,(png_warning_parameters p,
-   int number, png_const_charp string),PNG_EMPTY);
-   /* Parameters are limited in size to PNG_WARNING_PARAMETER_SIZE characters,
-    * including the trailing '\0'.
-    */
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter_unsigned,
-   (png_warning_parameters p, int number, int format, png_alloc_size_t value),
-   PNG_EMPTY);
-   /* Use png_alloc_size_t because it is an unsigned type as big as any we
-    * need to output.  Use the following for a signed value.
-    */
-PNG_INTERNAL_FUNCTION(void,png_warning_parameter_signed,
-   (png_warning_parameters p, int number, int format, png_int_32 value),
-   PNG_EMPTY);
-
-PNG_INTERNAL_FUNCTION(void,png_formatted_warning,(png_const_structrp png_ptr,
-   png_warning_parameters p, png_const_charp message),PNG_EMPTY);
-   /* 'message' follows the X/Open approach of using @1, @2 to insert
-    * parameters previously supplied using the above functions.  Errors in
-    * specifying the parameters will simply result in garbage substitutions.
-    */
-#endif
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-/* Application errors (new in 1.6); use these functions (declared below) for
- * errors in the parameters or order of API function calls on read.  The
- * 'warning' should be used for an error that can be handled completely; the
- * 'error' for one which can be handled safely but which may lose application
- * information or settings.
- *
- * By default these both result in a png_error call prior to release, while in a
- * released version the 'warning' is just a warning.  However if the application
- * explicitly disables benign errors (explicitly permitting the code to lose
- * information) they both turn into warnings.
- *
- * If benign errors aren't supported they end up as the corresponding base call
- * (png_warning or png_error.)
- */
-PNG_INTERNAL_FUNCTION(void,png_app_warning,(png_const_structrp png_ptr,
-   png_const_charp message),PNG_EMPTY);
-   /* The application provided invalid parameters to an API function or called
-    * an API function at the wrong time, libpng can completely recover.
-    */
-
-PNG_INTERNAL_FUNCTION(void,png_app_error,(png_const_structrp png_ptr,
-   png_const_charp message),PNG_EMPTY);
-   /* As above but libpng will ignore the call, or attempt some other partial
-    * recovery from the error.
-    */
-#else
-#  define png_app_warning(pp,s) png_warning(pp,s)
-#  define png_app_error(pp,s) png_error(pp,s)
-#endif
-
-PNG_INTERNAL_FUNCTION(void,png_chunk_report,(png_const_structrp png_ptr,
-   png_const_charp message, int error),PNG_EMPTY);
-   /* Report a recoverable issue in chunk data.  On read this is used to report
-    * a problem found while reading a particular chunk and the
-    * png_chunk_benign_error or png_chunk_warning function is used as
-    * appropriate.  On write this is used to report an error that comes from
-    * data set via an application call to a png_set_ API and png_app_error or
-    * png_app_warning is used as appropriate.
-    *
-    * The 'error' parameter must have one of the following values:
-    */
-#define PNG_CHUNK_WARNING     0 /* never an error */
-#define PNG_CHUNK_WRITE_ERROR 1 /* an error only on write */
-#define PNG_CHUNK_ERROR       2 /* always an error */
-
-/* ASCII to FP interfaces, currently only implemented if sCAL
- * support is required.
- */
-#if defined(PNG_sCAL_SUPPORTED)
-/* MAX_DIGITS is actually the maximum number of characters in an sCAL
- * width or height, derived from the precision (number of significant
- * digits - a build time settable option) and assumptions about the
- * maximum ridiculous exponent.
- */
-#define PNG_sCAL_MAX_DIGITS (PNG_sCAL_PRECISION+1/*.*/+1/*E*/+10/*exponent*/)
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_ascii_from_fp,(png_const_structrp png_ptr,
-   png_charp ascii, png_size_t size, double fp, unsigned int precision),
-   PNG_EMPTY);
-#endif /* FLOATING_POINT */
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-PNG_INTERNAL_FUNCTION(void,png_ascii_from_fixed,(png_const_structrp png_ptr,
-   png_charp ascii, png_size_t size, png_fixed_point fp),PNG_EMPTY);
-#endif /* FIXED_POINT */
-#endif /* sCAL */
-
-#if defined(PNG_sCAL_SUPPORTED) || defined(PNG_pCAL_SUPPORTED)
-/* An internal API to validate the format of a floating point number.
- * The result is the index of the next character.  If the number is
- * not valid it will be the index of a character in the supposed number.
- *
- * The format of a number is defined in the PNG extensions specification
- * and this API is strictly conformant to that spec, not anyone elses!
- *
- * The format as a regular expression is:
- *
- * [+-]?[0-9]+.?([Ee][+-]?[0-9]+)?
- *
- * or:
- *
- * [+-]?.[0-9]+(.[0-9]+)?([Ee][+-]?[0-9]+)?
- *
- * The complexity is that either integer or fraction must be present and the
- * fraction is permitted to have no digits only if the integer is present.
- *
- * NOTE: The dangling E problem.
- *   There is a PNG valid floating point number in the following:
- *
- *       PNG floating point numbers are not greedy.
- *
- *   Working this out requires *TWO* character lookahead (because of the
- *   sign), the parser does not do this - it will fail at the 'r' - this
- *   doesn't matter for PNG sCAL chunk values, but it requires more care
- *   if the value were ever to be embedded in something more complex.  Use
- *   ANSI-C strtod if you need the lookahead.
- */
-/* State table for the parser. */
-#define PNG_FP_INTEGER    0  /* before or in integer */
-#define PNG_FP_FRACTION   1  /* before or in fraction */
-#define PNG_FP_EXPONENT   2  /* before or in exponent */
-#define PNG_FP_STATE      3  /* mask for the above */
-#define PNG_FP_SAW_SIGN   4  /* Saw +/- in current state */
-#define PNG_FP_SAW_DIGIT  8  /* Saw a digit in current state */
-#define PNG_FP_SAW_DOT   16  /* Saw a dot in current state */
-#define PNG_FP_SAW_E     32  /* Saw an E (or e) in current state */
-#define PNG_FP_SAW_ANY   60  /* Saw any of the above 4 */
-
-/* These three values don't affect the parser.  They are set but not used.
- */
-#define PNG_FP_WAS_VALID 64  /* Preceding substring is a valid fp number */
-#define PNG_FP_NEGATIVE 128  /* A negative number, including "-0" */
-#define PNG_FP_NONZERO  256  /* A non-zero value */
-#define PNG_FP_STICKY   448  /* The above three flags */
-
-/* This is available for the caller to store in 'state' if required.  Do not
- * call the parser after setting it (the parser sometimes clears it.)
- */
-#define PNG_FP_INVALID  512  /* Available for callers as a distinct value */
-
-/* Result codes for the parser (boolean - true meants ok, false means
- * not ok yet.)
- */
-#define PNG_FP_MAYBE      0  /* The number may be valid in the future */
-#define PNG_FP_OK         1  /* The number is valid */
-
-/* Tests on the sticky non-zero and negative flags.  To pass these checks
- * the state must also indicate that the whole number is valid - this is
- * achieved by testing PNG_FP_SAW_DIGIT (see the implementation for why this
- * is equivalent to PNG_FP_OK above.)
- */
-#define PNG_FP_NZ_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NEGATIVE | PNG_FP_NONZERO)
-   /* NZ_MASK: the string is valid and a non-zero negative value */
-#define PNG_FP_Z_MASK (PNG_FP_SAW_DIGIT | PNG_FP_NONZERO)
-   /* Z MASK: the string is valid and a non-zero value. */
-   /* PNG_FP_SAW_DIGIT: the string is valid. */
-#define PNG_FP_IS_ZERO(state) (((state) & PNG_FP_Z_MASK) == PNG_FP_SAW_DIGIT)
-#define PNG_FP_IS_POSITIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_Z_MASK)
-#define PNG_FP_IS_NEGATIVE(state) (((state) & PNG_FP_NZ_MASK) == PNG_FP_NZ_MASK)
-
-/* The actual parser.  This can be called repeatedly. It updates
- * the index into the string and the state variable (which must
- * be initialized to 0).  It returns a result code, as above.  There
- * is no point calling the parser any more if it fails to advance to
- * the end of the string - it is stuck on an invalid character (or
- * terminated by '\0').
- *
- * Note that the pointer will consume an E or even an E+ and then leave
- * a 'maybe' state even though a preceding integer.fraction is valid.
- * The PNG_FP_WAS_VALID flag indicates that a preceding substring was
- * a valid number.  It's possible to recover from this by calling
- * the parser again (from the start, with state 0) but with a string
- * that omits the last character (i.e. set the size to the index of
- * the problem character.)  This has not been tested within libpng.
- */
-PNG_INTERNAL_FUNCTION(int,png_check_fp_number,(png_const_charp string,
-   png_size_t size, int *statep, png_size_tp whereami),PNG_EMPTY);
-
-/* This is the same but it checks a complete string and returns true
- * only if it just contains a floating point number.  As of 1.5.4 this
- * function also returns the state at the end of parsing the number if
- * it was valid (otherwise it returns 0.)  This can be used for testing
- * for negative or zero values using the sticky flag.
- */
-PNG_INTERNAL_FUNCTION(int,png_check_fp_string,(png_const_charp string,
-   png_size_t size),PNG_EMPTY);
-#endif /* pCAL || sCAL */
-
-#if defined(PNG_GAMMA_SUPPORTED) ||\
-    defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)
-/* Added at libpng version 1.5.0 */
-/* This is a utility to provide a*times/div (rounded) and indicate
- * if there is an overflow.  The result is a boolean - false (0)
- * for overflow, true (1) if no overflow, in which case *res
- * holds the result.
- */
-PNG_INTERNAL_FUNCTION(int,png_muldiv,(png_fixed_point_p res, png_fixed_point a,
-   png_int_32 multiplied_by, png_int_32 divided_by),PNG_EMPTY);
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_INCH_CONVERSIONS_SUPPORTED)
-/* Same deal, but issue a warning on overflow and return 0. */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_muldiv_warn,
-   (png_const_structrp png_ptr, png_fixed_point a, png_int_32 multiplied_by,
-   png_int_32 divided_by),PNG_EMPTY);
-#endif
-
-#ifdef PNG_GAMMA_SUPPORTED
-/* Calculate a reciprocal - used for gamma values.  This returns
- * 0 if the argument is 0 in order to maintain an undefined value;
- * there are no warnings.
- */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_reciprocal,(png_fixed_point a),
-   PNG_EMPTY);
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* The same but gives a reciprocal of the product of two fixed point
- * values.  Accuracy is suitable for gamma calculations but this is
- * not exact - use png_muldiv for that.  Only required at present on read.
- */
-PNG_INTERNAL_FUNCTION(png_fixed_point,png_reciprocal2,(png_fixed_point a,
-   png_fixed_point b),PNG_EMPTY);
-#endif
-
-/* Return true if the gamma value is significantly different from 1.0 */
-PNG_INTERNAL_FUNCTION(int,png_gamma_significant,(png_fixed_point gamma_value),
-   PNG_EMPTY);
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* Internal fixed point gamma correction.  These APIs are called as
- * required to convert single values - they don't need to be fast,
- * they are not used when processing image pixel values.
- *
- * While the input is an 'unsigned' value it must actually be the
- * correct bit value - 0..255 or 0..65535 as required.
- */
-PNG_INTERNAL_FUNCTION(png_uint_16,png_gamma_correct,(png_structrp png_ptr,
-   unsigned int value, png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(png_uint_16,png_gamma_16bit_correct,(unsigned int value,
-   png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(png_byte,png_gamma_8bit_correct,(unsigned int value,
-   png_fixed_point gamma_value),PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_destroy_gamma_table,(png_structrp png_ptr),
-   PNG_EMPTY);
-PNG_INTERNAL_FUNCTION(void,png_build_gamma_table,(png_structrp png_ptr,
-   int bit_depth),PNG_EMPTY);
-#endif
-
-/* SIMPLIFIED READ/WRITE SUPPORT */
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
-   defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
-/* The internal structure that png_image::opaque points to. */
-typedef struct png_control
-{
-   png_structp png_ptr;
-   png_infop   info_ptr;
-   png_voidp   error_buf;           /* Always a jmp_buf at present. */
-
-   png_const_bytep memory;          /* Memory buffer. */
-   png_size_t      size;            /* Size of the memory buffer. */
-
-   unsigned int for_write       :1; /* Otherwise it is a read structure */
-   unsigned int owned_file      :1; /* We own the file in io_ptr */
-} png_control;
-
-/* Return the pointer to the jmp_buf from a png_control: necessary because C
- * does not reveal the type of the elements of jmp_buf.
- */
-#ifdef __cplusplus
-#  define png_control_jmp_buf(pc) (((jmp_buf*)((pc)->error_buf))[0])
-#else
-#  define png_control_jmp_buf(pc) ((pc)->error_buf)
-#endif
-
-/* Utility to safely execute a piece of libpng code catching and logging any
- * errors that might occur.  Returns true on success, false on failure (either
- * of the function or as a result of a png_error.)
- */
-PNG_INTERNAL_CALLBACK(void,png_safe_error,(png_structp png_ptr,
-   png_const_charp error_message),PNG_NORETURN);
-
-#ifdef PNG_WARNINGS_SUPPORTED
-PNG_INTERNAL_CALLBACK(void,png_safe_warning,(png_structp png_ptr,
-   png_const_charp warning_message),PNG_EMPTY);
-#else
-#  define png_safe_warning 0/*dummy argument*/
-#endif
-
-PNG_INTERNAL_FUNCTION(int,png_safe_execute,(png_imagep image,
-   int (*function)(png_voidp), png_voidp arg),PNG_EMPTY);
-
-/* Utility to log an error; this also cleans up the png_image; the function
- * always returns 0 (false).
- */
-PNG_INTERNAL_FUNCTION(int,png_image_error,(png_imagep image,
-   png_const_charp error_message),PNG_EMPTY);
-
-#ifndef PNG_SIMPLIFIED_READ_SUPPORTED
-/* png_image_free is used by the write code but not exported */
-PNG_INTERNAL_FUNCTION(void, png_image_free, (png_imagep image), PNG_EMPTY);
-#endif /* !SIMPLIFIED_READ */
-
-#endif /* SIMPLIFIED READ/WRITE */
-
-/* These are initialization functions for hardware specific PNG filter
- * optimizations; list these here then select the appropriate one at compile
- * time using the macro PNG_FILTER_OPTIMIZATIONS.  If the macro is not defined
- * the generic code is used.
- */
-#ifdef PNG_FILTER_OPTIMIZATIONS
-PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
-   unsigned int bpp), PNG_EMPTY);
-   /* Just declare the optimization that will be used */
-#else
-   /* List *all* the possible optimizations here - this branch is required if
-    * the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
-    * CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
-    */
-PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
-   (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
-#endif
-
-/* Maintainer: Put new private prototypes here ^ */
-
-#include "pngdebug.h"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PNG_VERSION_INFO_ONLY */
-#endif /* PNGPRIV_H */
--- a/DoConfig/fltk/png/pngread.c
+++ /dev/null
@@ -1,4121 +1,0 @@
-
-/* pngread.c - read a PNG file
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains routines that an application calls directly to
- * read a PNG file or stream.
- */
-
-#include "pngpriv.h"
-#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
-#  include <errno.h>
-#endif
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Create a PNG structure for reading, and allocate any memory needed. */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_read_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),PNG_ALLOCATED)
-{
-#ifndef PNG_USER_MEM_SUPPORTED
-   png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, NULL, NULL, NULL);
-#else
-   return png_create_read_struct_2(user_png_ver, error_ptr, error_fn,
-       warn_fn, NULL, NULL, NULL);
-}
-
-/* Alternate create PNG structure for reading, and allocate any memory
- * needed.
- */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_read_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
-{
-   png_structp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-      error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
-#endif /* USER_MEM */
-
-   if (png_ptr != NULL)
-   {
-      png_ptr->mode = PNG_IS_READ_STRUCT;
-
-      /* Added in libpng-1.6.0; this can be used to detect a read structure if
-       * required (it will be zero in a write structure.)
-       */
-#     ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-         png_ptr->IDAT_read_size = PNG_IDAT_READ_SIZE;
-#     endif
-
-#     ifdef PNG_BENIGN_READ_ERRORS_SUPPORTED
-         png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
-
-         /* In stable builds only warn if an application error can be completely
-          * handled.
-          */
-#        if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-            png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
-#        endif
-#     endif
-
-      /* TODO: delay this, it can be done in png_init_io (if the app doesn't
-       * do it itself) avoiding setting the default function if it is not
-       * required.
-       */
-      png_set_read_fn(png_ptr, NULL, NULL);
-   }
-
-   return png_ptr;
-}
-
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the information before the actual image data.  This has been
- * changed in v0.90 to allow reading a file that already has the magic
- * bytes read from the stream.  You can tell libpng how many bytes have
- * been read from the beginning of the stream (up to the maximum of 8)
- * via png_set_sig_bytes(), and we will only check the remaining bytes
- * here.  The application can then have access to the signature bytes we
- * read if it is determined that this isn't a valid PNG file.
- */
-void PNGAPI
-png_read_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep;
-#endif
-
-   png_debug(1, "in png_read_info");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* Read and check the PNG file signature. */
-   png_read_sig(png_ptr, info_ptr);
-
-   for (;;)
-   {
-      png_uint_32 length = png_read_chunk_header(png_ptr);
-      png_uint_32 chunk_name = png_ptr->chunk_name;
-
-      /* IDAT logic needs to happen here to simplify getting the two flags
-       * right.
-       */
-      if (chunk_name == png_IDAT)
-      {
-         if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-            png_chunk_error(png_ptr, "Missing IHDR before IDAT");
-
-         else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-             (png_ptr->mode & PNG_HAVE_PLTE) == 0)
-            png_chunk_error(png_ptr, "Missing PLTE before IDAT");
-
-         else if ((png_ptr->mode & PNG_AFTER_IDAT) != 0)
-            png_chunk_benign_error(png_ptr, "Too many IDATs found");
-
-         png_ptr->mode |= PNG_HAVE_IDAT;
-      }
-
-      else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-         png_ptr->mode |= PNG_AFTER_IDAT;
-
-      /* This should be a binary subdivision search or a hash for
-       * matching the chunk name rather than a linear search.
-       */
-      if (chunk_name == png_IHDR)
-         png_handle_IHDR(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IEND)
-         png_handle_IEND(png_ptr, info_ptr, length);
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-      else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-      {
-         png_handle_unknown(png_ptr, info_ptr, length, keep);
-
-         if (chunk_name == png_PLTE)
-            png_ptr->mode |= PNG_HAVE_PLTE;
-
-         else if (chunk_name == png_IDAT)
-         {
-            png_ptr->idat_size = 0; /* It has been consumed */
-            break;
-         }
-      }
-#endif
-      else if (chunk_name == png_PLTE)
-         png_handle_PLTE(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IDAT)
-      {
-         png_ptr->idat_size = length;
-         break;
-      }
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-      else if (chunk_name == png_bKGD)
-         png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-      else if (chunk_name == png_cHRM)
-         png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-      else if (chunk_name == png_gAMA)
-         png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-      else if (chunk_name == png_hIST)
-         png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-      else if (chunk_name == png_oFFs)
-         png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-      else if (chunk_name == png_pCAL)
-         png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-      else if (chunk_name == png_sCAL)
-         png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-      else if (chunk_name == png_pHYs)
-         png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-      else if (chunk_name == png_sBIT)
-         png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-      else if (chunk_name == png_sRGB)
-         png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-      else if (chunk_name == png_iCCP)
-         png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-      else if (chunk_name == png_sPLT)
-         png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-      else if (chunk_name == png_tEXt)
-         png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-      else if (chunk_name == png_tIME)
-         png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-      else if (chunk_name == png_tRNS)
-         png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-      else if (chunk_name == png_zTXt)
-         png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-      else if (chunk_name == png_iTXt)
-         png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
-
-      else
-         png_handle_unknown(png_ptr, info_ptr, length,
-            PNG_HANDLE_CHUNK_AS_DEFAULT);
-   }
-}
-#endif /* SEQUENTIAL_READ */
-
-/* Optional call to update the users info_ptr structure */
-void PNGAPI
-png_read_update_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_read_update_info");
-
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-      {
-         png_read_start_row(png_ptr);
-
-#        ifdef PNG_READ_TRANSFORMS_SUPPORTED
-            png_read_transform_info(png_ptr, info_ptr);
-#        else
-            PNG_UNUSED(info_ptr)
-#        endif
-      }
-
-      /* New in 1.6.0 this avoids the bug of doing the initializations twice */
-      else
-         png_app_error(png_ptr,
-            "png_read_update_info/png_start_read_image: duplicate call");
-   }
-}
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Initialize palette, background, etc, after transformations
- * are set, but before any reading takes place.  This allows
- * the user to obtain a gamma-corrected palette, for example.
- * If the user doesn't call this, we will do it ourselves.
- */
-void PNGAPI
-png_start_read_image(png_structrp png_ptr)
-{
-   png_debug(1, "in png_start_read_image");
-
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-         png_read_start_row(png_ptr);
-
-      /* New in 1.6.0 this avoids the bug of doing the initializations twice */
-      else
-         png_app_error(png_ptr,
-            "png_start_read_image/png_read_update_info: duplicate call");
-   }
-}
-#endif /* SEQUENTIAL_READ */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-/* Undoes intrapixel differencing,
- * NOTE: this is apparently only supported in the 'sequential' reader.
- */
-static void
-png_do_read_intrapixel(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_read_intrapixel");
-
-   if (
-       (row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      int bytes_per_pixel;
-      png_uint_32 row_width = row_info->width;
-
-      if (row_info->bit_depth == 8)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 3;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 4;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            *(rp) = (png_byte)((256 + *rp + *(rp + 1)) & 0xff);
-            *(rp+2) = (png_byte)((256 + *(rp + 2) + *(rp + 1)) & 0xff);
-         }
-      }
-      else if (row_info->bit_depth == 16)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 6;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 8;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);
-            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);
-            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);
-            png_uint_32 red  = (s0 + s1 + 65536) & 0xffff;
-            png_uint_32 blue = (s2 + s1 + 65536) & 0xffff;
-            *(rp    ) = (png_byte)((red >> 8) & 0xff);
-            *(rp + 1) = (png_byte)(red & 0xff);
-            *(rp + 4) = (png_byte)((blue >> 8) & 0xff);
-            *(rp + 5) = (png_byte)(blue & 0xff);
-         }
-      }
-   }
-}
-#endif /* MNG_FEATURES */
-
-void PNGAPI
-png_read_row(png_structrp png_ptr, png_bytep row, png_bytep dsp_row)
-{
-   png_row_info row_info;
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug2(1, "in png_read_row (row %lu, pass %d)",
-       (unsigned long)png_ptr->row_number, png_ptr->pass);
-
-   /* png_read_start_row sets the information (in particular iwidth) for this
-    * interlace pass.
-    */
-   if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-      png_read_start_row(png_ptr);
-
-   /* 1.5.6: row_info moved out of png_struct to a local here. */
-   row_info.width = png_ptr->iwidth; /* NOTE: width of current interlaced row */
-   row_info.color_type = png_ptr->color_type;
-   row_info.bit_depth = png_ptr->bit_depth;
-   row_info.channels = png_ptr->channels;
-   row_info.pixel_depth = png_ptr->pixel_depth;
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-#ifdef PNG_WARNINGS_SUPPORTED
-   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
-   {
-   /* Check for transforms that have been set but were defined out */
-#if defined(PNG_WRITE_INVERT_SUPPORTED) && !defined(PNG_READ_INVERT_SUPPORTED)
-   if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
-      png_warning(png_ptr, "PNG_READ_INVERT_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) && !defined(PNG_READ_FILLER_SUPPORTED)
-   if ((png_ptr->transformations & PNG_FILLER) != 0)
-      png_warning(png_ptr, "PNG_READ_FILLER_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
-    !defined(PNG_READ_PACKSWAP_SUPPORTED)
-   if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-      png_warning(png_ptr, "PNG_READ_PACKSWAP_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_PACK_SUPPORTED) && !defined(PNG_READ_PACK_SUPPORTED)
-   if ((png_ptr->transformations & PNG_PACK) != 0)
-      png_warning(png_ptr, "PNG_READ_PACK_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_SHIFT_SUPPORTED) && !defined(PNG_READ_SHIFT_SUPPORTED)
-   if ((png_ptr->transformations & PNG_SHIFT) != 0)
-      png_warning(png_ptr, "PNG_READ_SHIFT_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_BGR_SUPPORTED) && !defined(PNG_READ_BGR_SUPPORTED)
-   if ((png_ptr->transformations & PNG_BGR) != 0)
-      png_warning(png_ptr, "PNG_READ_BGR_SUPPORTED is not defined");
-#endif
-
-#if defined(PNG_WRITE_SWAP_SUPPORTED) && !defined(PNG_READ_SWAP_SUPPORTED)
-   if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
-      png_warning(png_ptr, "PNG_READ_SWAP_SUPPORTED is not defined");
-#endif
-   }
-#endif /* WARNINGS */
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* If interlaced and we do not need a new row, combine row and return.
-    * Notice that the pixels we have from previous rows have been transformed
-    * already; we can only combine like with like (transformed or
-    * untransformed) and, because of the libpng API for interlaced images, this
-    * means we must transform before de-interlacing.
-    */
-   if (png_ptr->interlaced != 0 &&
-       (png_ptr->transformations & PNG_INTERLACE) != 0)
-   {
-      switch (png_ptr->pass)
-      {
-         case 0:
-            if (png_ptr->row_number & 0x07)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 1:
-            if ((png_ptr->row_number & 0x07) || png_ptr->width < 5)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 2:
-            if ((png_ptr->row_number & 0x07) != 4)
-            {
-               if (dsp_row != NULL && (png_ptr->row_number & 4))
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 3:
-            if ((png_ptr->row_number & 3) || png_ptr->width < 3)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 4:
-            if ((png_ptr->row_number & 3) != 2)
-            {
-               if (dsp_row != NULL && (png_ptr->row_number & 2))
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 5:
-            if ((png_ptr->row_number & 1) || png_ptr->width < 2)
-            {
-               if (dsp_row != NULL)
-                  png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         default:
-         case 6:
-            if ((png_ptr->row_number & 1) == 0)
-            {
-               png_read_finish_row(png_ptr);
-               return;
-            }
-            break;
-      }
-   }
-#endif
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) == 0)
-      png_error(png_ptr, "Invalid attempt to read row data");
-
-   /* Fill the row with IDAT data: */
-   png_read_IDAT_data(png_ptr, png_ptr->row_buf, row_info.rowbytes + 1);
-
-   if (png_ptr->row_buf[0] > PNG_FILTER_VALUE_NONE)
-   {
-      if (png_ptr->row_buf[0] < PNG_FILTER_VALUE_LAST)
-         png_read_filter_row(png_ptr, &row_info, png_ptr->row_buf + 1,
-            png_ptr->prev_row + 1, png_ptr->row_buf[0]);
-      else
-         png_error(png_ptr, "bad adaptive filter value");
-   }
-
-   /* libpng 1.5.6: the following line was copying png_ptr->rowbytes before
-    * 1.5.6, while the buffer really is this big in current versions of libpng
-    * it may not be in the future, so this was changed just to copy the
-    * interlaced count:
-    */
-   memcpy(png_ptr->prev_row, png_ptr->row_buf, row_info.rowbytes + 1);
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
-       (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
-   {
-      /* Intrapixel differencing */
-      png_do_read_intrapixel(&row_info, png_ptr->row_buf + 1);
-   }
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   if (png_ptr->transformations)
-      png_do_read_transformations(png_ptr, &row_info);
-#endif
-
-   /* The transformed pixel depth should match the depth now in row_info. */
-   if (png_ptr->transformed_pixel_depth == 0)
-   {
-      png_ptr->transformed_pixel_depth = row_info.pixel_depth;
-      if (row_info.pixel_depth > png_ptr->maximum_pixel_depth)
-         png_error(png_ptr, "sequential row overflow");
-   }
-
-   else if (png_ptr->transformed_pixel_depth != row_info.pixel_depth)
-      png_error(png_ptr, "internal sequential row size calculation error");
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   /* Expand interlaced rows to full size */
-   if (png_ptr->interlaced != 0 &&
-      (png_ptr->transformations & PNG_INTERLACE) != 0)
-   {
-      if (png_ptr->pass < 6)
-         png_do_read_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass,
-            png_ptr->transformations);
-
-      if (dsp_row != NULL)
-         png_combine_row(png_ptr, dsp_row, 1/*display*/);
-
-      if (row != NULL)
-         png_combine_row(png_ptr, row, 0/*row*/);
-   }
-
-   else
-#endif
-   {
-      if (row != NULL)
-         png_combine_row(png_ptr, row, -1/*ignored*/);
-
-      if (dsp_row != NULL)
-         png_combine_row(png_ptr, dsp_row, -1/*ignored*/);
-   }
-   png_read_finish_row(png_ptr);
-
-   if (png_ptr->read_row_fn != NULL)
-      (*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-
-}
-#endif /* SEQUENTIAL_READ */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read one or more rows of image data.  If the image is interlaced,
- * and png_set_interlace_handling() has been called, the rows need to
- * contain the contents of the rows from the previous pass.  If the
- * image has alpha or transparency, and png_handle_alpha()[*] has been
- * called, the rows contents must be initialized to the contents of the
- * screen.
- *
- * "row" holds the actual image, and pixels are placed in it
- * as they arrive.  If the image is displayed after each pass, it will
- * appear to "sparkle" in.  "display_row" can be used to display a
- * "chunky" progressive image, with finer detail added as it becomes
- * available.  If you do not want this "chunky" display, you may pass
- * NULL for display_row.  If you do not want the sparkle display, and
- * you have not called png_handle_alpha(), you may pass NULL for rows.
- * If you have called png_handle_alpha(), and the image has either an
- * alpha channel or a transparency chunk, you must provide a buffer for
- * rows.  In this case, you do not have to provide a display_row buffer
- * also, but you may.  If the image is not interlaced, or if you have
- * not called png_set_interlace_handling(), the display_row buffer will
- * be ignored, so pass NULL to it.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-
-void PNGAPI
-png_read_rows(png_structrp png_ptr, png_bytepp row,
-    png_bytepp display_row, png_uint_32 num_rows)
-{
-   png_uint_32 i;
-   png_bytepp rp;
-   png_bytepp dp;
-
-   png_debug(1, "in png_read_rows");
-
-   if (png_ptr == NULL)
-      return;
-
-   rp = row;
-   dp = display_row;
-   if (rp != NULL && dp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep rptr = *rp++;
-         png_bytep dptr = *dp++;
-
-         png_read_row(png_ptr, rptr, dptr);
-      }
-
-   else if (rp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep rptr = *rp;
-         png_read_row(png_ptr, rptr, NULL);
-         rp++;
-      }
-
-   else if (dp != NULL)
-      for (i = 0; i < num_rows; i++)
-      {
-         png_bytep dptr = *dp;
-         png_read_row(png_ptr, NULL, dptr);
-         dp++;
-      }
-}
-#endif /* SEQUENTIAL_READ */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the entire image.  If the image has an alpha channel or a tRNS
- * chunk, and you have called png_handle_alpha()[*], you will need to
- * initialize the image to the current image that PNG will be overlaying.
- * We set the num_rows again here, in case it was incorrectly set in
- * png_read_start_row() by a call to png_read_update_info() or
- * png_start_read_image() if png_set_interlace_handling() wasn't called
- * prior to either of these functions like it should have been.  You can
- * only call this function once.  If you desire to have an image for
- * each pass of a interlaced image, use png_read_rows() instead.
- *
- * [*] png_handle_alpha() does not exist yet, as of this version of libpng
- */
-void PNGAPI
-png_read_image(png_structrp png_ptr, png_bytepp image)
-{
-   png_uint_32 i, image_height;
-   int pass, j;
-   png_bytepp rp;
-
-   png_debug(1, "in png_read_image");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if ((png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-   {
-      pass = png_set_interlace_handling(png_ptr);
-      /* And make sure transforms are initialized. */
-      png_start_read_image(png_ptr);
-   }
-   else
-   {
-      if (png_ptr->interlaced != 0 &&
-          (png_ptr->transformations & PNG_INTERLACE) == 0)
-      {
-         /* Caller called png_start_read_image or png_read_update_info without
-          * first turning on the PNG_INTERLACE transform.  We can fix this here,
-          * but the caller should do it!
-          */
-         png_warning(png_ptr, "Interlace handling should be turned on when "
-            "using png_read_image");
-         /* Make sure this is set correctly */
-         png_ptr->num_rows = png_ptr->height;
-      }
-
-      /* Obtain the pass number, which also turns on the PNG_INTERLACE flag in
-       * the above error case.
-       */
-      pass = png_set_interlace_handling(png_ptr);
-   }
-#else
-   if (png_ptr->interlaced)
-      png_error(png_ptr,
-          "Cannot read interlaced image -- interlace handler disabled");
-
-   pass = 1;
-#endif
-
-   image_height=png_ptr->height;
-
-   for (j = 0; j < pass; j++)
-   {
-      rp = image;
-      for (i = 0; i < image_height; i++)
-      {
-         png_read_row(png_ptr, *rp, NULL);
-         rp++;
-      }
-   }
-}
-#endif /* SEQUENTIAL_READ */
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-/* Read the end of the PNG file.  Will not read past the end of the
- * file, will verify the end is accurate, and will read any comments
- * or time information at the end of the file, if info is not NULL.
- */
-void PNGAPI
-png_read_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   int keep;
-#endif
-
-   png_debug(1, "in png_read_end");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* If png_read_end is called in the middle of reading the rows there may
-    * still be pending IDAT data and an owned zstream.  Deal with this here.
-    */
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-   if (png_chunk_unknown_handling(png_ptr, png_IDAT) == 0)
-#endif
-      png_read_finish_IDAT(png_ptr);
-
-#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Report invalid palette index; added at libng-1.5.10 */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-      png_ptr->num_palette_max > png_ptr->num_palette)
-     png_benign_error(png_ptr, "Read palette index exceeding num_palette");
-#endif
-
-   do
-   {
-      png_uint_32 length = png_read_chunk_header(png_ptr);
-      png_uint_32 chunk_name = png_ptr->chunk_name;
-
-      if (chunk_name == png_IEND)
-         png_handle_IEND(png_ptr, info_ptr, length);
-
-      else if (chunk_name == png_IHDR)
-         png_handle_IHDR(png_ptr, info_ptr, length);
-
-      else if (info_ptr == NULL)
-         png_crc_finish(png_ptr, length);
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-      else if ((keep = png_chunk_unknown_handling(png_ptr, chunk_name)) != 0)
-      {
-         if (chunk_name == png_IDAT)
-         {
-            if ((length > 0) ||
-                (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
-               png_benign_error(png_ptr, "Too many IDATs found");
-         }
-         png_handle_unknown(png_ptr, info_ptr, length, keep);
-         if (chunk_name == png_PLTE)
-            png_ptr->mode |= PNG_HAVE_PLTE;
-      }
-#endif
-
-      else if (chunk_name == png_IDAT)
-      {
-         /* Zero length IDATs are legal after the last IDAT has been
-          * read, but not after other chunks have been read.
-          */
-         if ((length > 0) ||
-             (png_ptr->mode & PNG_HAVE_CHUNK_AFTER_IDAT) != 0)
-            png_benign_error(png_ptr, "Too many IDATs found");
-
-         png_crc_finish(png_ptr, length);
-      }
-      else if (chunk_name == png_PLTE)
-         png_handle_PLTE(png_ptr, info_ptr, length);
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-      else if (chunk_name == png_bKGD)
-         png_handle_bKGD(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-      else if (chunk_name == png_cHRM)
-         png_handle_cHRM(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-      else if (chunk_name == png_gAMA)
-         png_handle_gAMA(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-      else if (chunk_name == png_hIST)
-         png_handle_hIST(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-      else if (chunk_name == png_oFFs)
-         png_handle_oFFs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-      else if (chunk_name == png_pCAL)
-         png_handle_pCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-      else if (chunk_name == png_sCAL)
-         png_handle_sCAL(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-      else if (chunk_name == png_pHYs)
-         png_handle_pHYs(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-      else if (chunk_name == png_sBIT)
-         png_handle_sBIT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-      else if (chunk_name == png_sRGB)
-         png_handle_sRGB(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-      else if (chunk_name == png_iCCP)
-         png_handle_iCCP(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-      else if (chunk_name == png_sPLT)
-         png_handle_sPLT(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-      else if (chunk_name == png_tEXt)
-         png_handle_tEXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-      else if (chunk_name == png_tIME)
-         png_handle_tIME(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-      else if (chunk_name == png_tRNS)
-         png_handle_tRNS(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-      else if (chunk_name == png_zTXt)
-         png_handle_zTXt(png_ptr, info_ptr, length);
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-      else if (chunk_name == png_iTXt)
-         png_handle_iTXt(png_ptr, info_ptr, length);
-#endif
-
-      else
-         png_handle_unknown(png_ptr, info_ptr, length,
-            PNG_HANDLE_CHUNK_AS_DEFAULT);
-   } while ((png_ptr->mode & PNG_HAVE_IEND) == 0);
-}
-#endif /* SEQUENTIAL_READ */
-
-/* Free all memory used in the read struct */
-static void
-png_read_destroy(png_structrp png_ptr)
-{
-   png_debug(1, "in png_read_destroy");
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_destroy_gamma_table(png_ptr);
-#endif
-
-   png_free(png_ptr, png_ptr->big_row_buf);
-   png_ptr->big_row_buf = NULL;
-   png_free(png_ptr, png_ptr->big_prev_row);
-   png_ptr->big_prev_row = NULL;
-   png_free(png_ptr, png_ptr->read_buffer);
-   png_ptr->read_buffer = NULL;
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   png_free(png_ptr, png_ptr->palette_lookup);
-   png_ptr->palette_lookup = NULL;
-   png_free(png_ptr, png_ptr->quantize_index);
-   png_ptr->quantize_index = NULL;
-#endif
-
-   if ((png_ptr->free_me & PNG_FREE_PLTE) != 0)
-   {
-      png_zfree(png_ptr, png_ptr->palette);
-      png_ptr->palette = NULL;
-   }
-   png_ptr->free_me &= ~PNG_FREE_PLTE;
-
-#if defined(PNG_tRNS_SUPPORTED) || \
-    defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   if ((png_ptr->free_me & PNG_FREE_TRNS) != 0)
-   {
-      png_free(png_ptr, png_ptr->trans_alpha);
-      png_ptr->trans_alpha = NULL;
-   }
-   png_ptr->free_me &= ~PNG_FREE_TRNS;
-#endif
-
-   inflateEnd(&png_ptr->zstream);
-
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-   png_free(png_ptr, png_ptr->save_buffer);
-   png_ptr->save_buffer = NULL;
-#endif
-
-#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) && \
-   defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-   png_free(png_ptr, png_ptr->unknown_chunk.data);
-   png_ptr->unknown_chunk.data = NULL;
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   png_free(png_ptr, png_ptr->chunk_list);
-   png_ptr->chunk_list = NULL;
-#endif
-
-   /* NOTE: the 'setjmp' buffer may still be allocated and the memory and error
-    * callbacks are still set at this point.  They are required to complete the
-    * destruction of the png_struct itself.
-    */
-}
-
-/* Free all memory used by the read */
-void PNGAPI
-png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
-    png_infopp end_info_ptr_ptr)
-{
-   png_structrp png_ptr = NULL;
-
-   png_debug(1, "in png_destroy_read_struct");
-
-   if (png_ptr_ptr != NULL)
-      png_ptr = *png_ptr_ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   /* libpng 1.6.0: use the API to destroy info structs to ensure consistent
-    * behavior.  Prior to 1.6.0 libpng did extra 'info' destruction in this API.
-    * The extra was, apparently, unnecessary yet this hides memory leak bugs.
-    */
-   png_destroy_info_struct(png_ptr, end_info_ptr_ptr);
-   png_destroy_info_struct(png_ptr, info_ptr_ptr);
-
-   *png_ptr_ptr = NULL;
-   png_read_destroy(png_ptr);
-   png_destroy_png_struct(png_ptr);
-}
-
-void PNGAPI
-png_set_read_status_fn(png_structrp png_ptr, png_read_status_ptr read_row_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->read_row_fn = read_row_fn;
-}
-
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_read_png(png_structrp png_ptr, png_inforp info_ptr,
-                           int transforms,
-                           voidp params)
-{
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* png_read_info() gives us all of the information from the
-    * PNG file before the first IDAT (image data chunk).
-    */
-   png_read_info(png_ptr, info_ptr);
-   if (info_ptr->height > PNG_UINT_32_MAX/(sizeof (png_bytep)))
-      png_error(png_ptr, "Image is too high to process with png_read_png()");
-
-   /* -------------- image transformations start here ------------------- */
-   /* libpng 1.6.10: add code to cause a png_app_error if a selected TRANSFORM
-    * is not implemented.  This will only happen in de-configured (non-default)
-    * libpng builds.  The results can be unexpected - png_read_png may return
-    * short or mal-formed rows because the transform is skipped.
-    */
-
-   /* Tell libpng to strip 16-bit/color files down to 8 bits per color.
-    */
-   if ((transforms & PNG_TRANSFORM_SCALE_16) != 0)
-     /* Added at libpng-1.5.4. "strip_16" produces the same result that it
-      * did in earlier versions, while "scale_16" is now more accurate.
-      */
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-      png_set_scale_16(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SCALE_16 not supported");
-#endif
-
-   /* If both SCALE and STRIP are required pngrtran will effectively cancel the
-    * latter by doing SCALE first.  This is ok and allows apps not to check for
-    * which is supported to get the right answer.
-    */
-   if ((transforms & PNG_TRANSFORM_STRIP_16) != 0)
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-      png_set_strip_16(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_STRIP_16 not supported");
-#endif
-
-   /* Strip alpha bytes from the input data without combining with
-    * the background (not recommended).
-    */
-   if ((transforms & PNG_TRANSFORM_STRIP_ALPHA) != 0)
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-      png_set_strip_alpha(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_STRIP_ALPHA not supported");
-#endif
-
-   /* Extract multiple pixels with bit depths of 1, 2, or 4 from a single
-    * byte into separate bytes (useful for paletted and grayscale images).
-    */
-   if ((transforms & PNG_TRANSFORM_PACKING) != 0)
-#ifdef PNG_READ_PACK_SUPPORTED
-      png_set_packing(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_PACKING not supported");
-#endif
-
-   /* Change the order of packed pixels to least significant bit first
-    * (not useful if you are using png_set_packing).
-    */
-   if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-      png_set_packswap(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_PACKSWAP not supported");
-#endif
-
-   /* Expand paletted colors into true RGB triplets
-    * Expand grayscale images to full 8 bits from 1, 2, or 4 bits/pixel
-    * Expand paletted or RGB images with transparency to full alpha
-    * channels so the data will be available as RGBA quartets.
-    */
-   if ((transforms & PNG_TRANSFORM_EXPAND) != 0)
-#ifdef PNG_READ_EXPAND_SUPPORTED
-      png_set_expand(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_EXPAND not supported");
-#endif
-
-   /* We don't handle background color or gamma transformation or quantizing.
-    */
-
-   /* Invert monochrome files to have 0 as white and 1 as black
-    */
-   if ((transforms & PNG_TRANSFORM_INVERT_MONO) != 0)
-#ifdef PNG_READ_INVERT_SUPPORTED
-      png_set_invert_mono(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_MONO not supported");
-#endif
-
-   /* If you want to shift the pixel values from the range [0,255] or
-    * [0,65535] to the original [0,7] or [0,31], or whatever range the
-    * colors were originally in:
-    */
-   if ((transforms & PNG_TRANSFORM_SHIFT) != 0)
-#ifdef PNG_READ_SHIFT_SUPPORTED
-      if ((info_ptr->valid & PNG_INFO_sBIT) != 0)
-         png_set_shift(png_ptr, &info_ptr->sig_bit);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SHIFT not supported");
-#endif
-
-   /* Flip the RGB pixels to BGR (or RGBA to BGRA) */
-   if ((transforms & PNG_TRANSFORM_BGR) != 0)
-#ifdef PNG_READ_BGR_SUPPORTED
-      png_set_bgr(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_BGR not supported");
-#endif
-
-   /* Swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
-   if ((transforms & PNG_TRANSFORM_SWAP_ALPHA) != 0)
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-      png_set_swap_alpha(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ALPHA not supported");
-#endif
-
-   /* Swap bytes of 16-bit files to least significant byte first */
-   if ((transforms & PNG_TRANSFORM_SWAP_ENDIAN) != 0)
-#ifdef PNG_READ_SWAP_SUPPORTED
-      png_set_swap(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
-#endif
-
-/* Added at libpng-1.2.41 */
-   /* Invert the alpha channel from opacity to transparency */
-   if ((transforms & PNG_TRANSFORM_INVERT_ALPHA) != 0)
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-      png_set_invert_alpha(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_ALPHA not supported");
-#endif
-
-/* Added at libpng-1.2.41 */
-   /* Expand grayscale image to RGB */
-   if ((transforms & PNG_TRANSFORM_GRAY_TO_RGB) != 0)
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-      png_set_gray_to_rgb(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_GRAY_TO_RGB not supported");
-#endif
-
-/* Added at libpng-1.5.4 */
-   if ((transforms & PNG_TRANSFORM_EXPAND_16) != 0)
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-      png_set_expand_16(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_EXPAND_16 not supported");
-#endif
-
-   /* We don't handle adding filler bytes */
-
-   /* We use png_read_image and rely on that for interlace handling, but we also
-    * call png_read_update_info therefore must turn on interlace handling now:
-    */
-   (void)png_set_interlace_handling(png_ptr);
-
-   /* Optional call to gamma correct and add the background to the palette
-    * and update info structure.  REQUIRED if you are expecting libpng to
-    * update the palette for you (i.e., you selected such a transform above).
-    */
-   png_read_update_info(png_ptr, info_ptr);
-
-   /* -------------- image transformations end here ------------------- */
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
-   if (info_ptr->row_pointers == NULL)
-   {
-      png_uint_32 iptr;
-
-      info_ptr->row_pointers = png_voidcast(png_bytepp, png_malloc(png_ptr,
-          info_ptr->height * (sizeof (png_bytep))));
-
-      for (iptr=0; iptr<info_ptr->height; iptr++)
-         info_ptr->row_pointers[iptr] = NULL;
-
-      info_ptr->free_me |= PNG_FREE_ROWS;
-
-      for (iptr = 0; iptr < info_ptr->height; iptr++)
-         info_ptr->row_pointers[iptr] = png_voidcast(png_bytep,
-            png_malloc(png_ptr, info_ptr->rowbytes));
-   }
-
-   png_read_image(png_ptr, info_ptr->row_pointers);
-   info_ptr->valid |= PNG_INFO_IDAT;
-
-   /* Read rest of file, and get additional chunks in info_ptr - REQUIRED */
-   png_read_end(png_ptr, info_ptr);
-
-   PNG_UNUSED(params)
-}
-#endif /* INFO_IMAGE */
-#endif /* SEQUENTIAL_READ */
-
-#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
-/* SIMPLIFIED READ
- *
- * This code currently relies on the sequential reader, though it could easily
- * be made to work with the progressive one.
- */
-/* Arguments to png_image_finish_read: */
-
-/* Encoding of PNG data (used by the color-map code) */
-#  define P_NOTSET  0 /* File encoding not yet known */
-#  define P_sRGB    1 /* 8-bit encoded to sRGB gamma */
-#  define P_LINEAR  2 /* 16-bit linear: not encoded, NOT pre-multiplied! */
-#  define P_FILE    3 /* 8-bit encoded to file gamma, not sRGB or linear */
-#  define P_LINEAR8 4 /* 8-bit linear: only from a file value */
-
-/* Color-map processing: after libpng has run on the PNG image further
- * processing may be needed to convert the data to color-map indices.
- */
-#define PNG_CMAP_NONE      0
-#define PNG_CMAP_GA        1 /* Process GA data to a color-map with alpha */
-#define PNG_CMAP_TRANS     2 /* Process GA data to a background index */
-#define PNG_CMAP_RGB       3 /* Process RGB data */
-#define PNG_CMAP_RGB_ALPHA 4 /* Process RGBA data */
-
-/* The following document where the background is for each processing case. */
-#define PNG_CMAP_NONE_BACKGROUND      256
-#define PNG_CMAP_GA_BACKGROUND        231
-#define PNG_CMAP_TRANS_BACKGROUND     254
-#define PNG_CMAP_RGB_BACKGROUND       256
-#define PNG_CMAP_RGB_ALPHA_BACKGROUND 216
-
-typedef struct
-{
-   /* Arguments: */
-   png_imagep image;
-   png_voidp  buffer;
-   png_int_32 row_stride;
-   png_voidp  colormap;
-   png_const_colorp background;
-   /* Local variables: */
-   png_voidp       local_row;
-   png_voidp       first_row;
-   ptrdiff_t       row_bytes;           /* step between rows */
-   int             file_encoding;       /* E_ values above */
-   png_fixed_point gamma_to_linear;     /* For P_FILE, reciprocal of gamma */
-   int             colormap_processing; /* PNG_CMAP_ values above */
-} png_image_read_control;
-
-/* Do all the *safe* initialization - 'safe' means that png_error won't be
- * called, so setting up the jmp_buf is not required.  This means that anything
- * called from here must *not* call png_malloc - it has to call png_malloc_warn
- * instead so that control is returned safely back to this routine.
- */
-static int
-png_image_read_init(png_imagep image)
-{
-   if (image->opaque == NULL)
-   {
-      png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, image,
-          png_safe_error, png_safe_warning);
-
-      /* And set the rest of the structure to NULL to ensure that the various
-       * fields are consistent.
-       */
-      memset(image, 0, (sizeof *image));
-      image->version = PNG_IMAGE_VERSION;
-
-      if (png_ptr != NULL)
-      {
-         png_infop info_ptr = png_create_info_struct(png_ptr);
-
-         if (info_ptr != NULL)
-         {
-            png_controlp control = png_voidcast(png_controlp,
-               png_malloc_warn(png_ptr, (sizeof *control)));
-
-            if (control != NULL)
-            {
-               memset(control, 0, (sizeof *control));
-
-               control->png_ptr = png_ptr;
-               control->info_ptr = info_ptr;
-               control->for_write = 0;
-
-               image->opaque = control;
-               return 1;
-            }
-
-            /* Error clean up */
-            png_destroy_info_struct(png_ptr, &info_ptr);
-         }
-
-         png_destroy_read_struct(&png_ptr, NULL, NULL);
-      }
-
-      return png_image_error(image, "png_image_read: out of memory");
-   }
-
-   return png_image_error(image, "png_image_read: opaque pointer not NULL");
-}
-
-/* Utility to find the base format of a PNG file from a png_struct. */
-static png_uint_32
-png_image_format(png_structrp png_ptr)
-{
-   png_uint_32 format = 0;
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-      format |= PNG_FORMAT_FLAG_COLOR;
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      format |= PNG_FORMAT_FLAG_ALPHA;
-
-   /* Use png_ptr here, not info_ptr, because by examination png_handle_tRNS
-    * sets the png_struct fields; that's all we are interested in here.  The
-    * precise interaction with an app call to png_set_tRNS and PNG file reading
-    * is unclear.
-    */
-   else if (png_ptr->num_trans > 0)
-      format |= PNG_FORMAT_FLAG_ALPHA;
-
-   if (png_ptr->bit_depth == 16)
-      format |= PNG_FORMAT_FLAG_LINEAR;
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_PALETTE) != 0)
-      format |= PNG_FORMAT_FLAG_COLORMAP;
-
-   return format;
-}
-
-/* Is the given gamma significantly different from sRGB?  The test is the same
- * one used in pngrtran.c when deciding whether to do gamma correction.  The
- * arithmetic optimizes the division by using the fact that the inverse of the
- * file sRGB gamma is 2.2
- */
-static int
-png_gamma_not_sRGB(png_fixed_point g)
-{
-   if (g < PNG_FP_1)
-   {
-      /* An uninitialized gamma is assumed to be sRGB for the simplified API. */
-      if (g == 0)
-         return 0;
-
-      return png_gamma_significant((g * 11 + 2)/5 /* i.e. *2.2, rounded */);
-   }
-
-   return 1;
-}
-
-/* Do the main body of a 'png_image_begin_read' function; read the PNG file
- * header and fill in all the information.  This is executed in a safe context,
- * unlike the init routine above.
- */
-static int
-png_image_read_header(png_voidp argument)
-{
-   png_imagep image = png_voidcast(png_imagep, argument);
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-
-   png_set_benign_errors(png_ptr, 1/*warn*/);
-   png_read_info(png_ptr, info_ptr);
-
-   /* Do this the fast way; just read directly out of png_struct. */
-   image->width = png_ptr->width;
-   image->height = png_ptr->height;
-
-   {
-      png_uint_32 format = png_image_format(png_ptr);
-
-      image->format = format;
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-      /* Does the colorspace match sRGB?  If there is no color endpoint
-       * (colorant) information assume yes, otherwise require the
-       * 'ENDPOINTS_MATCHP_sRGB' colorspace flag to have been set.  If the
-       * colorspace has been determined to be invalid ignore it.
-       */
-      if ((format & PNG_FORMAT_FLAG_COLOR) != 0 && ((png_ptr->colorspace.flags
-         & (PNG_COLORSPACE_HAVE_ENDPOINTS|PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB|
-            PNG_COLORSPACE_INVALID)) == PNG_COLORSPACE_HAVE_ENDPOINTS))
-         image->flags |= PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB;
-#endif
-   }
-
-   /* We need the maximum number of entries regardless of the format the
-    * application sets here.
-    */
-   {
-      png_uint_32 cmap_entries;
-
-      switch (png_ptr->color_type)
-      {
-         case PNG_COLOR_TYPE_GRAY:
-            cmap_entries = 1U << png_ptr->bit_depth;
-            break;
-
-         case PNG_COLOR_TYPE_PALETTE:
-            cmap_entries = png_ptr->num_palette;
-            break;
-
-         default:
-            cmap_entries = 256;
-            break;
-      }
-
-      if (cmap_entries > 256)
-         cmap_entries = 256;
-
-      image->colormap_entries = cmap_entries;
-   }
-
-   return 1;
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-int PNGAPI
-png_image_begin_read_from_stdio(png_imagep image, FILE* file)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file != NULL)
-      {
-         if (png_image_read_init(image) != 0)
-         {
-            /* This is slightly evil, but png_init_io doesn't do anything other
-             * than this and we haven't changed the standard IO functions so
-             * this saves a 'safe' function.
-             */
-            image->opaque->png_ptr->io_ptr = file;
-            return png_safe_execute(image, png_image_read_header, image);
-         }
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_stdio: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_stdio: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-int PNGAPI
-png_image_begin_read_from_file(png_imagep image, const char *file_name)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file_name != NULL)
-      {
-         FILE *fp = fopen(file_name, "rb");
-
-         if (fp != NULL)
-         {
-            if (png_image_read_init(image) != 0)
-            {
-               image->opaque->png_ptr->io_ptr = fp;
-               image->opaque->owned_file = 1;
-               return png_safe_execute(image, png_image_read_header, image);
-            }
-
-            /* Clean up: just the opened file. */
-            (void)fclose(fp);
-         }
-
-         else
-            return png_image_error(image, strerror(errno));
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_file: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_file: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-#endif /* STDIO */
-
-static void PNGCBAPI
-png_image_memory_read(png_structp png_ptr, png_bytep out, png_size_t need)
-{
-   if (png_ptr != NULL)
-   {
-      png_imagep image = png_voidcast(png_imagep, png_ptr->io_ptr);
-      if (image != NULL)
-      {
-         png_controlp cp = image->opaque;
-         if (cp != NULL)
-         {
-            png_const_bytep memory = cp->memory;
-            png_size_t size = cp->size;
-
-            if (memory != NULL && size >= need)
-            {
-               memcpy(out, memory, need);
-               cp->memory = memory + need;
-               cp->size = size - need;
-               return;
-            }
-
-            png_error(png_ptr, "read beyond end of data");
-         }
-      }
-
-      png_error(png_ptr, "invalid memory read");
-   }
-}
-
-int PNGAPI png_image_begin_read_from_memory(png_imagep image,
-   png_const_voidp memory, png_size_t size)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (memory != NULL && size > 0)
-      {
-         if (png_image_read_init(image) != 0)
-         {
-            /* Now set the IO functions to read from the memory buffer and
-             * store it into io_ptr.  Again do this in-place to avoid calling a
-             * libpng function that requires error handling.
-             */
-            image->opaque->memory = png_voidcast(png_const_bytep, memory);
-            image->opaque->size = size;
-            image->opaque->png_ptr->io_ptr = image;
-            image->opaque->png_ptr->read_data_fn = png_image_memory_read;
-
-            return png_safe_execute(image, png_image_read_header, image);
-         }
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_begin_read_from_memory: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_begin_read_from_memory: incorrect PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-/* Utility function to skip chunks that are not used by the simplified image
- * read functions and an appropriate macro to call it.
- */
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-static void
-png_image_skip_unused_chunks(png_structrp png_ptr)
-{
-   /* Prepare the reader to ignore all recognized chunks whose data will not
-    * be used, i.e., all chunks recognized by libpng except for those
-    * involved in basic image reading:
-    *
-    *    IHDR, PLTE, IDAT, IEND
-    *
-    * Or image data handling:
-    *
-    *    tRNS, bKGD, gAMA, cHRM, sRGB, [iCCP] and sBIT.
-    *
-    * This provides a small performance improvement and eliminates any
-    * potential vulnerability to security problems in the unused chunks.
-    *
-    * At present the iCCP chunk data isn't used, so iCCP chunk can be ignored
-    * too.  This allows the simplified API to be compiled without iCCP support,
-    * however if the support is there the chunk is still checked to detect
-    * errors (which are unfortunately quite common.)
-    */
-   {
-         static PNG_CONST png_byte chunks_to_process[] = {
-            98,  75,  71,  68, '\0',  /* bKGD */
-            99,  72,  82,  77, '\0',  /* cHRM */
-           103,  65,  77,  65, '\0',  /* gAMA */
-#        ifdef PNG_READ_iCCP_SUPPORTED
-           105,  67,  67,  80, '\0',  /* iCCP */
-#        endif
-           115,  66,  73,  84, '\0',  /* sBIT */
-           115,  82,  71,  66, '\0',  /* sRGB */
-           };
-
-       /* Ignore unknown chunks and all other chunks except for the
-        * IHDR, PLTE, tRNS, IDAT, and IEND chunks.
-        */
-       png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_NEVER,
-         NULL, -1);
-
-       /* But do not ignore image data handling chunks */
-       png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_AS_DEFAULT,
-         chunks_to_process, (int)/*SAFE*/(sizeof chunks_to_process)/5);
-    }
-}
-
-#  define PNG_SKIP_CHUNKS(p) png_image_skip_unused_chunks(p)
-#else
-#  define PNG_SKIP_CHUNKS(p) ((void)0)
-#endif /* HANDLE_AS_UNKNOWN */
-
-/* The following macro gives the exact rounded answer for all values in the
- * range 0..255 (it actually divides by 51.2, but the rounding still generates
- * the correct numbers 0..5
- */
-#define PNG_DIV51(v8) (((v8) * 5 + 130) >> 8)
-
-/* Utility functions to make particular color-maps */
-static void
-set_file_encoding(png_image_read_control *display)
-{
-   png_fixed_point g = display->image->opaque->png_ptr->colorspace.gamma;
-   if (png_gamma_significant(g) != 0)
-   {
-      if (png_gamma_not_sRGB(g) != 0)
-      {
-         display->file_encoding = P_FILE;
-         display->gamma_to_linear = png_reciprocal(g);
-      }
-
-      else
-         display->file_encoding = P_sRGB;
-   }
-
-   else
-      display->file_encoding = P_LINEAR8;
-}
-
-static unsigned int
-decode_gamma(png_image_read_control *display, png_uint_32 value, int encoding)
-{
-   if (encoding == P_FILE) /* double check */
-      encoding = display->file_encoding;
-
-   if (encoding == P_NOTSET) /* must be the file encoding */
-   {
-      set_file_encoding(display);
-      encoding = display->file_encoding;
-   }
-
-   switch (encoding)
-   {
-      case P_FILE:
-         value = png_gamma_16bit_correct(value*257, display->gamma_to_linear);
-         break;
-
-      case P_sRGB:
-         value = png_sRGB_table[value];
-         break;
-
-      case P_LINEAR:
-         break;
-
-      case P_LINEAR8:
-         value *= 257;
-         break;
-
-      default:
-         png_error(display->image->opaque->png_ptr,
-            "unexpected encoding (internal error)");
-         break;
-   }
-
-   return value;
-}
-
-static png_uint_32
-png_colormap_compose(png_image_read_control *display,
-   png_uint_32 foreground, int foreground_encoding, png_uint_32 alpha,
-   png_uint_32 background, int encoding)
-{
-   /* The file value is composed on the background, the background has the given
-    * encoding and so does the result, the file is encoded with P_FILE and the
-    * file and alpha are 8-bit values.  The (output) encoding will always be
-    * P_LINEAR or P_sRGB.
-    */
-   png_uint_32 f = decode_gamma(display, foreground, foreground_encoding);
-   png_uint_32 b = decode_gamma(display, background, encoding);
-
-   /* The alpha is always an 8-bit value (it comes from the palette), the value
-    * scaled by 255 is what PNG_sRGB_FROM_LINEAR requires.
-    */
-   f = f * alpha + b * (255-alpha);
-
-   if (encoding == P_LINEAR)
-   {
-      /* Scale to 65535; divide by 255, approximately (in fact this is extremely
-       * accurate, it divides by 255.00000005937181414556, with no overflow.)
-       */
-      f *= 257; /* Now scaled by 65535 */
-      f += f >> 16;
-      f = (f+32768) >> 16;
-   }
-
-   else /* P_sRGB */
-      f = PNG_sRGB_FROM_LINEAR(f);
-
-   return f;
-}
-
-/* NOTE: P_LINEAR values to this routine must be 16-bit, but P_FILE values must
- * be 8-bit.
- */
-static void
-png_create_colormap_entry(png_image_read_control *display,
-   png_uint_32 ip, png_uint_32 red, png_uint_32 green, png_uint_32 blue,
-   png_uint_32 alpha, int encoding)
-{
-   png_imagep image = display->image;
-   const int output_encoding = (image->format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
-      P_LINEAR : P_sRGB;
-   const int convert_to_Y = (image->format & PNG_FORMAT_FLAG_COLOR) == 0 &&
-      (red != green || green != blue);
-
-   if (ip > 255)
-      png_error(image->opaque->png_ptr, "color-map index out of range");
-
-   /* Update the cache with whether the file gamma is significantly different
-    * from sRGB.
-    */
-   if (encoding == P_FILE)
-   {
-      if (display->file_encoding == P_NOTSET)
-         set_file_encoding(display);
-
-      /* Note that the cached value may be P_FILE too, but if it is then the
-       * gamma_to_linear member has been set.
-       */
-      encoding = display->file_encoding;
-   }
-
-   if (encoding == P_FILE)
-   {
-      png_fixed_point g = display->gamma_to_linear;
-
-      red = png_gamma_16bit_correct(red*257, g);
-      green = png_gamma_16bit_correct(green*257, g);
-      blue = png_gamma_16bit_correct(blue*257, g);
-
-      if (convert_to_Y != 0 || output_encoding == P_LINEAR)
-      {
-         alpha *= 257;
-         encoding = P_LINEAR;
-      }
-
-      else
-      {
-         red = PNG_sRGB_FROM_LINEAR(red * 255);
-         green = PNG_sRGB_FROM_LINEAR(green * 255);
-         blue = PNG_sRGB_FROM_LINEAR(blue * 255);
-         encoding = P_sRGB;
-      }
-   }
-
-   else if (encoding == P_LINEAR8)
-   {
-      /* This encoding occurs quite frequently in test cases because PngSuite
-       * includes a gAMA 1.0 chunk with most images.
-       */
-      red *= 257;
-      green *= 257;
-      blue *= 257;
-      alpha *= 257;
-      encoding = P_LINEAR;
-   }
-
-   else if (encoding == P_sRGB &&
-       (convert_to_Y  != 0 || output_encoding == P_LINEAR))
-   {
-      /* The values are 8-bit sRGB values, but must be converted to 16-bit
-       * linear.
-       */
-      red = png_sRGB_table[red];
-      green = png_sRGB_table[green];
-      blue = png_sRGB_table[blue];
-      alpha *= 257;
-      encoding = P_LINEAR;
-   }
-
-   /* This is set if the color isn't gray but the output is. */
-   if (encoding == P_LINEAR)
-   {
-      if (convert_to_Y != 0)
-      {
-         /* NOTE: these values are copied from png_do_rgb_to_gray */
-         png_uint_32 y = (png_uint_32)6968 * red  + (png_uint_32)23434 * green +
-            (png_uint_32)2366 * blue;
-
-         if (output_encoding == P_LINEAR)
-            y = (y + 16384) >> 15;
-
-         else
-         {
-            /* y is scaled by 32768, we need it scaled by 255: */
-            y = (y + 128) >> 8;
-            y *= 255;
-            y = PNG_sRGB_FROM_LINEAR((y + 64) >> 7);
-            encoding = P_sRGB;
-         }
-
-         blue = red = green = y;
-      }
-
-      else if (output_encoding == P_sRGB)
-      {
-         red = PNG_sRGB_FROM_LINEAR(red * 255);
-         green = PNG_sRGB_FROM_LINEAR(green * 255);
-         blue = PNG_sRGB_FROM_LINEAR(blue * 255);
-         alpha = PNG_DIV257(alpha);
-         encoding = P_sRGB;
-      }
-   }
-
-   if (encoding != output_encoding)
-      png_error(image->opaque->png_ptr, "bad encoding (internal error)");
-
-   /* Store the value. */
-   {
-#     ifdef PNG_FORMAT_AFIRST_SUPPORTED
-         const int afirst = (image->format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
-            (image->format & PNG_FORMAT_FLAG_ALPHA) != 0;
-#     else
-#        define afirst 0
-#     endif
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         const int bgr = (image->format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
-#     else
-#        define bgr 0
-#     endif
-
-      if (output_encoding == P_LINEAR)
-      {
-         png_uint_16p entry = png_voidcast(png_uint_16p, display->colormap);
-
-         entry += ip * PNG_IMAGE_SAMPLE_CHANNELS(image->format);
-
-         /* The linear 16-bit values must be pre-multiplied by the alpha channel
-          * value, if less than 65535 (this is, effectively, composite on black
-          * if the alpha channel is removed.)
-          */
-         switch (PNG_IMAGE_SAMPLE_CHANNELS(image->format))
-         {
-            case 4:
-               entry[afirst ? 0 : 3] = (png_uint_16)alpha;
-               /* FALL THROUGH */
-
-            case 3:
-               if (alpha < 65535)
-               {
-                  if (alpha > 0)
-                  {
-                     blue = (blue * alpha + 32767U)/65535U;
-                     green = (green * alpha + 32767U)/65535U;
-                     red = (red * alpha + 32767U)/65535U;
-                  }
-
-                  else
-                     red = green = blue = 0;
-               }
-               entry[afirst + (2 ^ bgr)] = (png_uint_16)blue;
-               entry[afirst + 1] = (png_uint_16)green;
-               entry[afirst + bgr] = (png_uint_16)red;
-               break;
-
-            case 2:
-               entry[1 ^ afirst] = (png_uint_16)alpha;
-               /* FALL THROUGH */
-
-            case 1:
-               if (alpha < 65535)
-               {
-                  if (alpha > 0)
-                     green = (green * alpha + 32767U)/65535U;
-
-                  else
-                     green = 0;
-               }
-               entry[afirst] = (png_uint_16)green;
-               break;
-
-            default:
-               break;
-         }
-      }
-
-      else /* output encoding is P_sRGB */
-      {
-         png_bytep entry = png_voidcast(png_bytep, display->colormap);
-
-         entry += ip * PNG_IMAGE_SAMPLE_CHANNELS(image->format);
-
-         switch (PNG_IMAGE_SAMPLE_CHANNELS(image->format))
-         {
-            case 4:
-               entry[afirst ? 0 : 3] = (png_byte)alpha;
-            case 3:
-               entry[afirst + (2 ^ bgr)] = (png_byte)blue;
-               entry[afirst + 1] = (png_byte)green;
-               entry[afirst + bgr] = (png_byte)red;
-               break;
-
-            case 2:
-               entry[1 ^ afirst] = (png_byte)alpha;
-            case 1:
-               entry[afirst] = (png_byte)green;
-               break;
-
-            default:
-               break;
-         }
-      }
-
-#     ifdef afirst
-#        undef afirst
-#     endif
-#     ifdef bgr
-#        undef bgr
-#     endif
-   }
-}
-
-static int
-make_gray_file_colormap(png_image_read_control *display)
-{
-   unsigned int i;
-
-   for (i=0; i<256; ++i)
-      png_create_colormap_entry(display, i, i, i, i, 255, P_FILE);
-
-   return i;
-}
-
-static int
-make_gray_colormap(png_image_read_control *display)
-{
-   unsigned int i;
-
-   for (i=0; i<256; ++i)
-      png_create_colormap_entry(display, i, i, i, i, 255, P_sRGB);
-
-   return i;
-}
-#define PNG_GRAY_COLORMAP_ENTRIES 256
-
-static int
-make_ga_colormap(png_image_read_control *display)
-{
-   unsigned int i, a;
-
-   /* Alpha is retained, the output will be a color-map with entries
-    * selected by six levels of alpha.  One transparent entry, 6 gray
-    * levels for all the intermediate alpha values, leaving 230 entries
-    * for the opaque grays.  The color-map entries are the six values
-    * [0..5]*51, the GA processing uses PNG_DIV51(value) to find the
-    * relevant entry.
-    *
-    * if (alpha > 229) // opaque
-    * {
-    *    // The 231 entries are selected to make the math below work:
-    *    base = 0;
-    *    entry = (231 * gray + 128) >> 8;
-    * }
-    * else if (alpha < 26) // transparent
-    * {
-    *    base = 231;
-    *    entry = 0;
-    * }
-    * else // partially opaque
-    * {
-    *    base = 226 + 6 * PNG_DIV51(alpha);
-    *    entry = PNG_DIV51(gray);
-    * }
-    */
-   i = 0;
-   while (i < 231)
-   {
-      unsigned int gray = (i * 256 + 115) / 231;
-      png_create_colormap_entry(display, i++, gray, gray, gray, 255, P_sRGB);
-   }
-
-   /* 255 is used here for the component values for consistency with the code
-    * that undoes premultiplication in pngwrite.c.
-    */
-   png_create_colormap_entry(display, i++, 255, 255, 255, 0, P_sRGB);
-
-   for (a=1; a<5; ++a)
-   {
-      unsigned int g;
-
-      for (g=0; g<6; ++g)
-         png_create_colormap_entry(display, i++, g*51, g*51, g*51, a*51,
-            P_sRGB);
-   }
-
-   return i;
-}
-
-#define PNG_GA_COLORMAP_ENTRIES 256
-
-static int
-make_rgb_colormap(png_image_read_control *display)
-{
-   unsigned int i, r;
-
-   /* Build a 6x6x6 opaque RGB cube */
-   for (i=r=0; r<6; ++r)
-   {
-      unsigned int g;
-
-      for (g=0; g<6; ++g)
-      {
-         unsigned int b;
-
-         for (b=0; b<6; ++b)
-            png_create_colormap_entry(display, i++, r*51, g*51, b*51, 255,
-               P_sRGB);
-      }
-   }
-
-   return i;
-}
-
-#define PNG_RGB_COLORMAP_ENTRIES 216
-
-/* Return a palette index to the above palette given three 8-bit sRGB values. */
-#define PNG_RGB_INDEX(r,g,b) \
-   ((png_byte)(6 * (6 * PNG_DIV51(r) + PNG_DIV51(g)) + PNG_DIV51(b)))
-
-static int
-png_image_read_colormap(png_voidp argument)
-{
-   png_image_read_control *display =
-      png_voidcast(png_image_read_control*, argument);
-   const png_imagep image = display->image;
-
-   const png_structrp png_ptr = image->opaque->png_ptr;
-   const png_uint_32 output_format = image->format;
-   const int output_encoding = (output_format & PNG_FORMAT_FLAG_LINEAR) != 0 ?
-      P_LINEAR : P_sRGB;
-
-   unsigned int cmap_entries;
-   unsigned int output_processing;        /* Output processing option */
-   unsigned int data_encoding = P_NOTSET; /* Encoding libpng must produce */
-
-   /* Background information; the background color and the index of this color
-    * in the color-map if it exists (else 256).
-    */
-   unsigned int background_index = 256;
-   png_uint_32 back_r, back_g, back_b;
-
-   /* Flags to accumulate things that need to be done to the input. */
-   int expand_tRNS = 0;
-
-   /* Exclude the NYI feature of compositing onto a color-mapped buffer; it is
-    * very difficult to do, the results look awful, and it is difficult to see
-    * what possible use it is because the application can't control the
-    * color-map.
-    */
-   if (((png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0 ||
-         png_ptr->num_trans > 0) /* alpha in input */ &&
-      ((output_format & PNG_FORMAT_FLAG_ALPHA) == 0) /* no alpha in output */)
-   {
-      if (output_encoding == P_LINEAR) /* compose on black */
-         back_b = back_g = back_r = 0;
-
-      else if (display->background == NULL /* no way to remove it */)
-         png_error(png_ptr,
-            "a background color must be supplied to remove alpha/transparency");
-
-      /* Get a copy of the background color (this avoids repeating the checks
-       * below.)  The encoding is 8-bit sRGB or 16-bit linear, depending on the
-       * output format.
-       */
-      else
-      {
-         back_g = display->background->green;
-         if ((output_format & PNG_FORMAT_FLAG_COLOR) != 0)
-         {
-            back_r = display->background->red;
-            back_b = display->background->blue;
-         }
-         else
-            back_b = back_r = back_g;
-      }
-   }
-
-   else if (output_encoding == P_LINEAR)
-      back_b = back_r = back_g = 65535;
-
-   else
-      back_b = back_r = back_g = 255;
-
-   /* Default the input file gamma if required - this is necessary because
-    * libpng assumes that if no gamma information is present the data is in the
-    * output format, but the simplified API deduces the gamma from the input
-    * format.
-    */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) == 0)
-   {
-      /* Do this directly, not using the png_colorspace functions, to ensure
-       * that it happens even if the colorspace is invalid (though probably if
-       * it is the setting will be ignored)  Note that the same thing can be
-       * achieved at the application interface with png_set_gAMA.
-       */
-      if (png_ptr->bit_depth == 16 &&
-         (image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
-         png_ptr->colorspace.gamma = PNG_GAMMA_LINEAR;
-
-      else
-         png_ptr->colorspace.gamma = PNG_GAMMA_sRGB_INVERSE;
-
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   }
-
-   /* Decide what to do based on the PNG color type of the input data.  The
-    * utility function png_create_colormap_entry deals with most aspects of the
-    * output transformations; this code works out how to produce bytes of
-    * color-map entries from the original format.
-    */
-   switch (png_ptr->color_type)
-   {
-      case PNG_COLOR_TYPE_GRAY:
-         if (png_ptr->bit_depth <= 8)
-         {
-            /* There at most 256 colors in the output, regardless of
-             * transparency.
-             */
-            unsigned int step, i, val, trans = 256/*ignore*/, back_alpha = 0;
-
-            cmap_entries = 1U << png_ptr->bit_depth;
-            if (cmap_entries > image->colormap_entries)
-               png_error(png_ptr, "gray[8] color-map: too few entries");
-
-            step = 255 / (cmap_entries - 1);
-            output_processing = PNG_CMAP_NONE;
-
-            /* If there is a tRNS chunk then this either selects a transparent
-             * value or, if the output has no alpha, the background color.
-             */
-            if (png_ptr->num_trans > 0)
-            {
-               trans = png_ptr->trans_color.gray;
-
-               if ((output_format & PNG_FORMAT_FLAG_ALPHA) == 0)
-                  back_alpha = output_encoding == P_LINEAR ? 65535 : 255;
-            }
-
-            /* png_create_colormap_entry just takes an RGBA and writes the
-             * corresponding color-map entry using the format from 'image',
-             * including the required conversion to sRGB or linear as
-             * appropriate.  The input values are always either sRGB (if the
-             * gamma correction flag is 0) or 0..255 scaled file encoded values
-             * (if the function must gamma correct them).
-             */
-            for (i=val=0; i<cmap_entries; ++i, val += step)
-            {
-               /* 'i' is a file value.  While this will result in duplicated
-                * entries for 8-bit non-sRGB encoded files it is necessary to
-                * have non-gamma corrected values to do tRNS handling.
-                */
-               if (i != trans)
-                  png_create_colormap_entry(display, i, val, val, val, 255,
-                     P_FILE/*8-bit with file gamma*/);
-
-               /* Else this entry is transparent.  The colors don't matter if
-                * there is an alpha channel (back_alpha == 0), but it does no
-                * harm to pass them in; the values are not set above so this
-                * passes in white.
-                *
-                * NOTE: this preserves the full precision of the application
-                * supplied background color when it is used.
-                */
-               else
-                  png_create_colormap_entry(display, i, back_r, back_g, back_b,
-                     back_alpha, output_encoding);
-            }
-
-            /* We need libpng to preserve the original encoding. */
-            data_encoding = P_FILE;
-
-            /* The rows from libpng, while technically gray values, are now also
-             * color-map indices; however, they may need to be expanded to 1
-             * byte per pixel.  This is what png_set_packing does (i.e., it
-             * unpacks the bit values into bytes.)
-             */
-            if (png_ptr->bit_depth < 8)
-               png_set_packing(png_ptr);
-         }
-
-         else /* bit depth is 16 */
-         {
-            /* The 16-bit input values can be converted directly to 8-bit gamma
-             * encoded values; however, if a tRNS chunk is present 257 color-map
-             * entries are required.  This means that the extra entry requires
-             * special processing; add an alpha channel, sacrifice gray level
-             * 254 and convert transparent (alpha==0) entries to that.
-             *
-             * Use libpng to chop the data to 8 bits.  Convert it to sRGB at the
-             * same time to minimize quality loss.  If a tRNS chunk is present
-             * this means libpng must handle it too; otherwise it is impossible
-             * to do the exact match on the 16-bit value.
-             *
-             * If the output has no alpha channel *and* the background color is
-             * gray then it is possible to let libpng handle the substitution by
-             * ensuring that the corresponding gray level matches the background
-             * color exactly.
-             */
-            data_encoding = P_sRGB;
-
-            if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-               png_error(png_ptr, "gray[16] color-map: too few entries");
-
-            cmap_entries = make_gray_colormap(display);
-
-            if (png_ptr->num_trans > 0)
-            {
-               unsigned int back_alpha;
-
-               if ((output_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-                  back_alpha = 0;
-
-               else
-               {
-                  if (back_r == back_g && back_g == back_b)
-                  {
-                     /* Background is gray; no special processing will be
-                      * required.
-                      */
-                     png_color_16 c;
-                     png_uint_32 gray = back_g;
-
-                     if (output_encoding == P_LINEAR)
-                     {
-                        gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                        /* And make sure the corresponding palette entry
-                         * matches.
-                         */
-                        png_create_colormap_entry(display, gray, back_g, back_g,
-                           back_g, 65535, P_LINEAR);
-                     }
-
-                     /* The background passed to libpng, however, must be the
-                      * sRGB value.
-                      */
-                     c.index = 0; /*unused*/
-                     c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-                     /* NOTE: does this work without expanding tRNS to alpha?
-                      * It should be the color->gray case below apparently
-                      * doesn't.
-                      */
-                     png_set_background_fixed(png_ptr, &c,
-                        PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                        0/*gamma: not used*/);
-
-                     output_processing = PNG_CMAP_NONE;
-                     break;
-                  }
-
-                  back_alpha = output_encoding == P_LINEAR ? 65535 : 255;
-               }
-
-               /* output_processing means that the libpng-processed row will be
-                * 8-bit GA and it has to be processing to single byte color-map
-                * values.  Entry 254 is replaced by either a completely
-                * transparent entry or by the background color at full
-                * precision (and the background color is not a simple gray
-                * level in this case.)
-                */
-               expand_tRNS = 1;
-               output_processing = PNG_CMAP_TRANS;
-               background_index = 254;
-
-               /* And set (overwrite) color-map entry 254 to the actual
-                * background color at full precision.
-                */
-               png_create_colormap_entry(display, 254, back_r, back_g, back_b,
-                  back_alpha, output_encoding);
-            }
-
-            else
-               output_processing = PNG_CMAP_NONE;
-         }
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         /* 8-bit or 16-bit PNG with two channels - gray and alpha.  A minimum
-          * of 65536 combinations.  If, however, the alpha channel is to be
-          * removed there are only 256 possibilities if the background is gray.
-          * (Otherwise there is a subset of the 65536 possibilities defined by
-          * the triangle between black, white and the background color.)
-          *
-          * Reduce 16-bit files to 8-bit and sRGB encode the result.  No need to
-          * worry about tRNS matching - tRNS is ignored if there is an alpha
-          * channel.
-          */
-         data_encoding = P_sRGB;
-
-         if ((output_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-         {
-            if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-               png_error(png_ptr, "gray+alpha color-map: too few entries");
-
-            cmap_entries = make_ga_colormap(display);
-
-            background_index = PNG_CMAP_GA_BACKGROUND;
-            output_processing = PNG_CMAP_GA;
-         }
-
-         else /* alpha is removed */
-         {
-            /* Alpha must be removed as the PNG data is processed when the
-             * background is a color because the G and A channels are
-             * independent and the vector addition (non-parallel vectors) is a
-             * 2-D problem.
-             *
-             * This can be reduced to the same algorithm as above by making a
-             * colormap containing gray levels (for the opaque grays), a
-             * background entry (for a transparent pixel) and a set of four six
-             * level color values, one set for each intermediate alpha value.
-             * See the comments in make_ga_colormap for how this works in the
-             * per-pixel processing.
-             *
-             * If the background is gray, however, we only need a 256 entry gray
-             * level color map.  It is sufficient to make the entry generated
-             * for the background color be exactly the color specified.
-             */
-            if ((output_format & PNG_FORMAT_FLAG_COLOR) == 0 ||
-               (back_r == back_g && back_g == back_b))
-            {
-               /* Background is gray; no special processing will be required. */
-               png_color_16 c;
-               png_uint_32 gray = back_g;
-
-               if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "gray-alpha color-map: too few entries");
-
-               cmap_entries = make_gray_colormap(display);
-
-               if (output_encoding == P_LINEAR)
-               {
-                  gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                  /* And make sure the corresponding palette entry matches. */
-                  png_create_colormap_entry(display, gray, back_g, back_g,
-                     back_g, 65535, P_LINEAR);
-               }
-
-               /* The background passed to libpng, however, must be the sRGB
-                * value.
-                */
-               c.index = 0; /*unused*/
-               c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-               png_set_background_fixed(png_ptr, &c,
-                  PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                  0/*gamma: not used*/);
-
-               output_processing = PNG_CMAP_NONE;
-            }
-
-            else
-            {
-               png_uint_32 i, a;
-
-               /* This is the same as png_make_ga_colormap, above, except that
-                * the entries are all opaque.
-                */
-               if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "ga-alpha color-map: too few entries");
-
-               i = 0;
-               while (i < 231)
-               {
-                  png_uint_32 gray = (i * 256 + 115) / 231;
-                  png_create_colormap_entry(display, i++, gray, gray, gray,
-                     255, P_sRGB);
-               }
-
-               /* NOTE: this preserves the full precision of the application
-                * background color.
-                */
-               background_index = i;
-               png_create_colormap_entry(display, i++, back_r, back_g, back_b,
-                  output_encoding == P_LINEAR ? 65535U : 255U, output_encoding);
-
-               /* For non-opaque input composite on the sRGB background - this
-                * requires inverting the encoding for each component.  The input
-                * is still converted to the sRGB encoding because this is a
-                * reasonable approximate to the logarithmic curve of human
-                * visual sensitivity, at least over the narrow range which PNG
-                * represents.  Consequently 'G' is always sRGB encoded, while
-                * 'A' is linear.  We need the linear background colors.
-                */
-               if (output_encoding == P_sRGB) /* else already linear */
-               {
-                  /* This may produce a value not exactly matching the
-                   * background, but that's ok because these numbers are only
-                   * used when alpha != 0
-                   */
-                  back_r = png_sRGB_table[back_r];
-                  back_g = png_sRGB_table[back_g];
-                  back_b = png_sRGB_table[back_b];
-               }
-
-               for (a=1; a<5; ++a)
-               {
-                  unsigned int g;
-
-                  /* PNG_sRGB_FROM_LINEAR expects a 16-bit linear value scaled
-                   * by an 8-bit alpha value (0..255).
-                   */
-                  png_uint_32 alpha = 51 * a;
-                  png_uint_32 back_rx = (255-alpha) * back_r;
-                  png_uint_32 back_gx = (255-alpha) * back_g;
-                  png_uint_32 back_bx = (255-alpha) * back_b;
-
-                  for (g=0; g<6; ++g)
-                  {
-                     png_uint_32 gray = png_sRGB_table[g*51] * alpha;
-
-                     png_create_colormap_entry(display, i++,
-                        PNG_sRGB_FROM_LINEAR(gray + back_rx),
-                        PNG_sRGB_FROM_LINEAR(gray + back_gx),
-                        PNG_sRGB_FROM_LINEAR(gray + back_bx), 255, P_sRGB);
-                  }
-               }
-
-               cmap_entries = i;
-               output_processing = PNG_CMAP_GA;
-            }
-         }
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-         /* Exclude the case where the output is gray; we can always handle this
-          * with the cases above.
-          */
-         if ((output_format & PNG_FORMAT_FLAG_COLOR) == 0)
-         {
-            /* The color-map will be grayscale, so we may as well convert the
-             * input RGB values to a simple grayscale and use the grayscale
-             * code above.
-             *
-             * NOTE: calling this apparently damages the recognition of the
-             * transparent color in background color handling; call
-             * png_set_tRNS_to_alpha before png_set_background_fixed.
-             */
-            png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE, -1,
-               -1);
-            data_encoding = P_sRGB;
-
-            /* The output will now be one or two 8-bit gray or gray+alpha
-             * channels.  The more complex case arises when the input has alpha.
-             */
-            if ((png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-               png_ptr->num_trans > 0) &&
-               (output_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            {
-               /* Both input and output have an alpha channel, so no background
-                * processing is required; just map the GA bytes to the right
-                * color-map entry.
-                */
-               expand_tRNS = 1;
-
-               if (PNG_GA_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb[ga] color-map: too few entries");
-
-               cmap_entries = make_ga_colormap(display);
-               background_index = PNG_CMAP_GA_BACKGROUND;
-               output_processing = PNG_CMAP_GA;
-            }
-
-            else
-            {
-               /* Either the input or the output has no alpha channel, so there
-                * will be no non-opaque pixels in the color-map; it will just be
-                * grayscale.
-                */
-               if (PNG_GRAY_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb[gray] color-map: too few entries");
-
-               /* Ideally this code would use libpng to do the gamma correction,
-                * but if an input alpha channel is to be removed we will hit the
-                * libpng bug in gamma+compose+rgb-to-gray (the double gamma
-                * correction bug).  Fix this by dropping the gamma correction in
-                * this case and doing it in the palette; this will result in
-                * duplicate palette entries, but that's better than the
-                * alternative of double gamma correction.
-                */
-               if ((png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-                  png_ptr->num_trans > 0) &&
-                  png_gamma_not_sRGB(png_ptr->colorspace.gamma) != 0)
-               {
-                  cmap_entries = make_gray_file_colormap(display);
-                  data_encoding = P_FILE;
-               }
-
-               else
-                  cmap_entries = make_gray_colormap(display);
-
-               /* But if the input has alpha or transparency it must be removed
-                */
-               if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-                  png_ptr->num_trans > 0)
-               {
-                  png_color_16 c;
-                  png_uint_32 gray = back_g;
-
-                  /* We need to ensure that the application background exists in
-                   * the colormap and that completely transparent pixels map to
-                   * it.  Achieve this simply by ensuring that the entry
-                   * selected for the background really is the background color.
-                   */
-                  if (data_encoding == P_FILE) /* from the fixup above */
-                  {
-                     /* The app supplied a gray which is in output_encoding, we
-                      * need to convert it to a value of the input (P_FILE)
-                      * encoding then set this palette entry to the required
-                      * output encoding.
-                      */
-                     if (output_encoding == P_sRGB)
-                        gray = png_sRGB_table[gray]; /* now P_LINEAR */
-
-                     gray = PNG_DIV257(png_gamma_16bit_correct(gray,
-                        png_ptr->colorspace.gamma)); /* now P_FILE */
-
-                     /* And make sure the corresponding palette entry contains
-                      * exactly the required sRGB value.
-                      */
-                     png_create_colormap_entry(display, gray, back_g, back_g,
-                        back_g, 0/*unused*/, output_encoding);
-                  }
-
-                  else if (output_encoding == P_LINEAR)
-                  {
-                     gray = PNG_sRGB_FROM_LINEAR(gray * 255);
-
-                     /* And make sure the corresponding palette entry matches.
-                      */
-                     png_create_colormap_entry(display, gray, back_g, back_g,
-                        back_g, 0/*unused*/, P_LINEAR);
-                  }
-
-                  /* The background passed to libpng, however, must be the
-                   * output (normally sRGB) value.
-                   */
-                  c.index = 0; /*unused*/
-                  c.gray = c.red = c.green = c.blue = (png_uint_16)gray;
-
-                  /* NOTE: the following is apparently a bug in libpng. Without
-                   * it the transparent color recognition in
-                   * png_set_background_fixed seems to go wrong.
-                   */
-                  expand_tRNS = 1;
-                  png_set_background_fixed(png_ptr, &c,
-                     PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                     0/*gamma: not used*/);
-               }
-
-               output_processing = PNG_CMAP_NONE;
-            }
-         }
-
-         else /* output is color */
-         {
-            /* We could use png_quantize here so long as there is no transparent
-             * color or alpha; png_quantize ignores alpha.  Easier overall just
-             * to do it once and using PNG_DIV51 on the 6x6x6 reduced RGB cube.
-             * Consequently we always want libpng to produce sRGB data.
-             */
-            data_encoding = P_sRGB;
-
-            /* Is there any transparency or alpha? */
-            if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-               png_ptr->num_trans > 0)
-            {
-               /* Is there alpha in the output too?  If so all four channels are
-                * processed into a special RGB cube with alpha support.
-                */
-               if ((output_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-               {
-                  png_uint_32 r;
-
-                  if (PNG_RGB_COLORMAP_ENTRIES+1+27 > image->colormap_entries)
-                     png_error(png_ptr, "rgb+alpha color-map: too few entries");
-
-                  cmap_entries = make_rgb_colormap(display);
-
-                  /* Add a transparent entry. */
-                  png_create_colormap_entry(display, cmap_entries, 255, 255,
-                     255, 0, P_sRGB);
-
-                  /* This is stored as the background index for the processing
-                   * algorithm.
-                   */
-                  background_index = cmap_entries++;
-
-                  /* Add 27 r,g,b entries each with alpha 0.5. */
-                  for (r=0; r<256; r = (r << 1) | 0x7f)
-                  {
-                     png_uint_32 g;
-
-                     for (g=0; g<256; g = (g << 1) | 0x7f)
-                     {
-                        png_uint_32 b;
-
-                        /* This generates components with the values 0, 127 and
-                         * 255
-                         */
-                        for (b=0; b<256; b = (b << 1) | 0x7f)
-                           png_create_colormap_entry(display, cmap_entries++,
-                              r, g, b, 128, P_sRGB);
-                     }
-                  }
-
-                  expand_tRNS = 1;
-                  output_processing = PNG_CMAP_RGB_ALPHA;
-               }
-
-               else
-               {
-                  /* Alpha/transparency must be removed.  The background must
-                   * exist in the color map (achieved by setting adding it after
-                   * the 666 color-map).  If the standard processing code will
-                   * pick up this entry automatically that's all that is
-                   * required; libpng can be called to do the background
-                   * processing.
-                   */
-                  unsigned int sample_size =
-                     PNG_IMAGE_SAMPLE_SIZE(output_format);
-                  png_uint_32 r, g, b; /* sRGB background */
-
-                  if (PNG_RGB_COLORMAP_ENTRIES+1+27 > image->colormap_entries)
-                     png_error(png_ptr, "rgb-alpha color-map: too few entries");
-
-                  cmap_entries = make_rgb_colormap(display);
-
-                  png_create_colormap_entry(display, cmap_entries, back_r,
-                        back_g, back_b, 0/*unused*/, output_encoding);
-
-                  if (output_encoding == P_LINEAR)
-                  {
-                     r = PNG_sRGB_FROM_LINEAR(back_r * 255);
-                     g = PNG_sRGB_FROM_LINEAR(back_g * 255);
-                     b = PNG_sRGB_FROM_LINEAR(back_b * 255);
-                  }
-
-                  else
-                  {
-                     r = back_r;
-                     g = back_g;
-                     b = back_g;
-                  }
-
-                  /* Compare the newly-created color-map entry with the one the
-                   * PNG_CMAP_RGB algorithm will use.  If the two entries don't
-                   * match, add the new one and set this as the background
-                   * index.
-                   */
-                  if (memcmp((png_const_bytep)display->colormap +
-                        sample_size * cmap_entries,
-                     (png_const_bytep)display->colormap +
-                        sample_size * PNG_RGB_INDEX(r,g,b),
-                     sample_size) != 0)
-                  {
-                     /* The background color must be added. */
-                     background_index = cmap_entries++;
-
-                     /* Add 27 r,g,b entries each with created by composing with
-                      * the background at alpha 0.5.
-                      */
-                     for (r=0; r<256; r = (r << 1) | 0x7f)
-                     {
-                        for (g=0; g<256; g = (g << 1) | 0x7f)
-                        {
-                           /* This generates components with the values 0, 127
-                            * and 255
-                            */
-                           for (b=0; b<256; b = (b << 1) | 0x7f)
-                              png_create_colormap_entry(display, cmap_entries++,
-                                 png_colormap_compose(display, r, P_sRGB, 128,
-                                    back_r, output_encoding),
-                                 png_colormap_compose(display, g, P_sRGB, 128,
-                                    back_g, output_encoding),
-                                 png_colormap_compose(display, b, P_sRGB, 128,
-                                    back_b, output_encoding),
-                                 0/*unused*/, output_encoding);
-                        }
-                     }
-
-                     expand_tRNS = 1;
-                     output_processing = PNG_CMAP_RGB_ALPHA;
-                  }
-
-                  else /* background color is in the standard color-map */
-                  {
-                     png_color_16 c;
-
-                     c.index = 0; /*unused*/
-                     c.red = (png_uint_16)back_r;
-                     c.gray = c.green = (png_uint_16)back_g;
-                     c.blue = (png_uint_16)back_b;
-
-                     png_set_background_fixed(png_ptr, &c,
-                        PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                        0/*gamma: not used*/);
-
-                     output_processing = PNG_CMAP_RGB;
-                  }
-               }
-            }
-
-            else /* no alpha or transparency in the input */
-            {
-               /* Alpha in the output is irrelevant, simply map the opaque input
-                * pixels to the 6x6x6 color-map.
-                */
-               if (PNG_RGB_COLORMAP_ENTRIES > image->colormap_entries)
-                  png_error(png_ptr, "rgb color-map: too few entries");
-
-               cmap_entries = make_rgb_colormap(display);
-               output_processing = PNG_CMAP_RGB;
-            }
-         }
-         break;
-
-      case PNG_COLOR_TYPE_PALETTE:
-         /* It's already got a color-map.  It may be necessary to eliminate the
-          * tRNS entries though.
-          */
-         {
-            unsigned int num_trans = png_ptr->num_trans;
-            png_const_bytep trans = num_trans > 0 ? png_ptr->trans_alpha : NULL;
-            png_const_colorp colormap = png_ptr->palette;
-            const int do_background = trans != NULL &&
-               (output_format & PNG_FORMAT_FLAG_ALPHA) == 0;
-            unsigned int i;
-
-            /* Just in case: */
-            if (trans == NULL)
-               num_trans = 0;
-
-            output_processing = PNG_CMAP_NONE;
-            data_encoding = P_FILE; /* Don't change from color-map indices */
-            cmap_entries = png_ptr->num_palette;
-            if (cmap_entries > 256)
-               cmap_entries = 256;
-
-            if (cmap_entries > image->colormap_entries)
-               png_error(png_ptr, "palette color-map: too few entries");
-
-            for (i=0; i < cmap_entries; ++i)
-            {
-               if (do_background != 0 && i < num_trans && trans[i] < 255)
-               {
-                  if (trans[i] == 0)
-                     png_create_colormap_entry(display, i, back_r, back_g,
-                        back_b, 0, output_encoding);
-
-                  else
-                  {
-                     /* Must compose the PNG file color in the color-map entry
-                      * on the sRGB color in 'back'.
-                      */
-                     png_create_colormap_entry(display, i,
-                        png_colormap_compose(display, colormap[i].red, P_FILE,
-                           trans[i], back_r, output_encoding),
-                        png_colormap_compose(display, colormap[i].green, P_FILE,
-                           trans[i], back_g, output_encoding),
-                        png_colormap_compose(display, colormap[i].blue, P_FILE,
-                           trans[i], back_b, output_encoding),
-                        output_encoding == P_LINEAR ? trans[i] * 257U :
-                           trans[i],
-                        output_encoding);
-                  }
-               }
-
-               else
-                  png_create_colormap_entry(display, i, colormap[i].red,
-                     colormap[i].green, colormap[i].blue,
-                     i < num_trans ? trans[i] : 255U, P_FILE/*8-bit*/);
-            }
-
-            /* The PNG data may have indices packed in fewer than 8 bits, it
-             * must be expanded if so.
-             */
-            if (png_ptr->bit_depth < 8)
-               png_set_packing(png_ptr);
-         }
-         break;
-
-      default:
-         png_error(png_ptr, "invalid PNG color type");
-         /*NOT REACHED*/
-         break;
-   }
-
-   /* Now deal with the output processing */
-   if (expand_tRNS != 0 && png_ptr->num_trans > 0 &&
-       (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) == 0)
-      png_set_tRNS_to_alpha(png_ptr);
-
-   switch (data_encoding)
-   {
-      default:
-         png_error(png_ptr, "bad data option (internal error)");
-         break;
-
-      case P_sRGB:
-         /* Change to 8-bit sRGB */
-         png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, PNG_GAMMA_sRGB);
-         /* FALL THROUGH */
-
-      case P_FILE:
-         if (png_ptr->bit_depth > 8)
-            png_set_scale_16(png_ptr);
-         break;
-   }
-
-   if (cmap_entries > 256 || cmap_entries > image->colormap_entries)
-      png_error(png_ptr, "color map overflow (BAD internal error)");
-
-   image->colormap_entries = cmap_entries;
-
-   /* Double check using the recorded background index */
-   switch (output_processing)
-   {
-      case PNG_CMAP_NONE:
-         if (background_index != PNG_CMAP_NONE_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_GA:
-         if (background_index != PNG_CMAP_GA_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_TRANS:
-         if (background_index >= cmap_entries ||
-            background_index != PNG_CMAP_TRANS_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_RGB:
-         if (background_index != PNG_CMAP_RGB_BACKGROUND)
-            goto bad_background;
-         break;
-
-      case PNG_CMAP_RGB_ALPHA:
-         if (background_index != PNG_CMAP_RGB_ALPHA_BACKGROUND)
-            goto bad_background;
-         break;
-
-      default:
-         png_error(png_ptr, "bad processing option (internal error)");
-
-      bad_background:
-         png_error(png_ptr, "bad background index (internal error)");
-   }
-
-   display->colormap_processing = output_processing;
-
-   return 1/*ok*/;
-}
-
-/* The final part of the color-map read called from png_image_finish_read. */
-static int
-png_image_read_and_map(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   int passes;
-
-   /* Called when the libpng data must be transformed into the color-mapped
-    * form.  There is a local row buffer in display->local and this routine must
-    * do the interlace handling.
-    */
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   {
-      png_uint_32  height = image->height;
-      png_uint_32  width = image->width;
-      int          proc = display->colormap_processing;
-      png_bytep    first_row = png_voidcast(png_bytep, display->first_row);
-      ptrdiff_t    step_row = display->row_bytes;
-      int pass;
-
-      for (pass = 0; pass < passes; ++pass)
-      {
-         unsigned int     startx, stepx, stepy;
-         png_uint_32      y;
-
-         if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-         {
-            /* The row may be empty for a short image: */
-            if (PNG_PASS_COLS(width, pass) == 0)
-               continue;
-
-            startx = PNG_PASS_START_COL(pass);
-            stepx = PNG_PASS_COL_OFFSET(pass);
-            y = PNG_PASS_START_ROW(pass);
-            stepy = PNG_PASS_ROW_OFFSET(pass);
-         }
-
-         else
-         {
-            y = 0;
-            startx = 0;
-            stepx = stepy = 1;
-         }
-
-         for (; y<height; y += stepy)
-         {
-            png_bytep inrow = png_voidcast(png_bytep, display->local_row);
-            png_bytep outrow = first_row + y * step_row;
-            png_const_bytep end_row = outrow + width;
-
-            /* Read read the libpng data into the temporary buffer. */
-            png_read_row(png_ptr, inrow, NULL);
-
-            /* Now process the row according to the processing option, note
-             * that the caller verifies that the format of the libpng output
-             * data is as required.
-             */
-            outrow += startx;
-            switch (proc)
-            {
-               case PNG_CMAP_GA:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     /* The data is always in the PNG order */
-                     unsigned int gray = *inrow++;
-                     unsigned int alpha = *inrow++;
-                     unsigned int entry;
-
-                     /* NOTE: this code is copied as a comment in
-                      * make_ga_colormap above.  Please update the
-                      * comment if you change this code!
-                      */
-                     if (alpha > 229) /* opaque */
-                     {
-                        entry = (231 * gray + 128) >> 8;
-                     }
-                     else if (alpha < 26) /* transparent */
-                     {
-                        entry = 231;
-                     }
-                     else /* partially opaque */
-                     {
-                        entry = 226 + 6 * PNG_DIV51(alpha) + PNG_DIV51(gray);
-                     }
-
-                     *outrow = (png_byte)entry;
-                  }
-                  break;
-
-               case PNG_CMAP_TRANS:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     png_byte gray = *inrow++;
-                     png_byte alpha = *inrow++;
-
-                     if (alpha == 0)
-                        *outrow = PNG_CMAP_TRANS_BACKGROUND;
-
-                     else if (gray != PNG_CMAP_TRANS_BACKGROUND)
-                        *outrow = gray;
-
-                     else
-                        *outrow = (png_byte)(PNG_CMAP_TRANS_BACKGROUND+1);
-                  }
-                  break;
-
-               case PNG_CMAP_RGB:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     *outrow = PNG_RGB_INDEX(inrow[0], inrow[1], inrow[2]);
-                     inrow += 3;
-                  }
-                  break;
-
-               case PNG_CMAP_RGB_ALPHA:
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     unsigned int alpha = inrow[3];
-
-                     /* Because the alpha entries only hold alpha==0.5 values
-                      * split the processing at alpha==0.25 (64) and 0.75
-                      * (196).
-                      */
-
-                     if (alpha >= 196)
-                        *outrow = PNG_RGB_INDEX(inrow[0], inrow[1],
-                           inrow[2]);
-
-                     else if (alpha < 64)
-                        *outrow = PNG_CMAP_RGB_ALPHA_BACKGROUND;
-
-                     else
-                     {
-                        /* Likewise there are three entries for each of r, g
-                         * and b.  We could select the entry by popcount on
-                         * the top two bits on those architectures that
-                         * support it, this is what the code below does,
-                         * crudely.
-                         */
-                        unsigned int back_i = PNG_CMAP_RGB_ALPHA_BACKGROUND+1;
-
-                        /* Here are how the values map:
-                         *
-                         * 0x00 .. 0x3f -> 0
-                         * 0x40 .. 0xbf -> 1
-                         * 0xc0 .. 0xff -> 2
-                         *
-                         * So, as above with the explicit alpha checks, the
-                         * breakpoints are at 64 and 196.
-                         */
-                        if (inrow[0] & 0x80) back_i += 9; /* red */
-                        if (inrow[0] & 0x40) back_i += 9;
-                        if (inrow[0] & 0x80) back_i += 3; /* green */
-                        if (inrow[0] & 0x40) back_i += 3;
-                        if (inrow[0] & 0x80) back_i += 1; /* blue */
-                        if (inrow[0] & 0x40) back_i += 1;
-
-                        *outrow = (png_byte)back_i;
-                     }
-
-                     inrow += 4;
-                  }
-                  break;
-
-               default:
-                  break;
-            }
-         }
-      }
-   }
-
-   return 1;
-}
-
-static int
-png_image_read_colormapped(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_controlp control = image->opaque;
-   png_structrp png_ptr = control->png_ptr;
-   png_inforp info_ptr = control->info_ptr;
-
-   int passes = 0; /* As a flag */
-
-   PNG_SKIP_CHUNKS(png_ptr);
-
-   /* Update the 'info' structure and make sure the result is as required; first
-    * make sure to turn on the interlace handling if it will be required
-    * (because it can't be turned on *after* the call to png_read_update_info!)
-    */
-   if (display->colormap_processing == PNG_CMAP_NONE)
-      passes = png_set_interlace_handling(png_ptr);
-
-   png_read_update_info(png_ptr, info_ptr);
-
-   /* The expected output can be deduced from the colormap_processing option. */
-   switch (display->colormap_processing)
-   {
-      case PNG_CMAP_NONE:
-         /* Output must be one channel and one byte per pixel, the output
-          * encoding can be anything.
-          */
-         if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
-            info_ptr->color_type == PNG_COLOR_TYPE_GRAY) &&
-            info_ptr->bit_depth == 8)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_TRANS:
-      case PNG_CMAP_GA:
-         /* Output must be two channels and the 'G' one must be sRGB, the latter
-          * can be checked with an exact number because it should have been set
-          * to this number above!
-          */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 256)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_RGB:
-         /* Output must be 8-bit sRGB encoded RGB */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 216)
-            break;
-
-         goto bad_output;
-
-      case PNG_CMAP_RGB_ALPHA:
-         /* Output must be 8-bit sRGB encoded RGBA */
-         if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
-            info_ptr->bit_depth == 8 &&
-            png_ptr->screen_gamma == PNG_GAMMA_sRGB &&
-            image->colormap_entries == 244 /* 216 + 1 + 27 */)
-            break;
-
-         /* goto bad_output; */
-         /* FALL THROUGH */
-
-      default:
-      bad_output:
-         png_error(png_ptr, "bad color-map processing (internal error)");
-   }
-
-   /* Now read the rows.  Do this here if it is possible to read directly into
-    * the output buffer, otherwise allocate a local row buffer of the maximum
-    * size libpng requires and call the relevant processing routine safely.
-    */
-   {
-      png_voidp first_row = display->buffer;
-      ptrdiff_t row_bytes = display->row_stride;
-
-      /* The following expression is designed to work correctly whether it gives
-       * a signed or an unsigned result.
-       */
-      if (row_bytes < 0)
-      {
-         char *ptr = png_voidcast(char*, first_row);
-         ptr += (image->height-1) * (-row_bytes);
-         first_row = png_voidcast(png_voidp, ptr);
-      }
-
-      display->first_row = first_row;
-      display->row_bytes = row_bytes;
-   }
-
-   if (passes == 0)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_and_map, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else
-   {
-      png_alloc_size_t row_bytes = display->row_bytes;
-
-      while (--passes >= 0)
-      {
-         png_uint_32      y = image->height;
-         png_bytep        row = png_voidcast(png_bytep, display->first_row);
-
-         while (y-- > 0)
-         {
-            png_read_row(png_ptr, row, NULL);
-            row += row_bytes;
-         }
-      }
-
-      return 1;
-   }
-}
-
-/* Just the row reading part of png_image_read. */
-static int
-png_image_read_composite(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   int passes;
-
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   {
-      png_uint_32  height = image->height;
-      png_uint_32  width = image->width;
-      ptrdiff_t    step_row = display->row_bytes;
-      unsigned int channels =
-         (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ? 3 : 1;
-      int pass;
-
-      for (pass = 0; pass < passes; ++pass)
-      {
-         unsigned int     startx, stepx, stepy;
-         png_uint_32      y;
-
-         if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-         {
-            /* The row may be empty for a short image: */
-            if (PNG_PASS_COLS(width, pass) == 0)
-               continue;
-
-            startx = PNG_PASS_START_COL(pass) * channels;
-            stepx = PNG_PASS_COL_OFFSET(pass) * channels;
-            y = PNG_PASS_START_ROW(pass);
-            stepy = PNG_PASS_ROW_OFFSET(pass);
-         }
-
-         else
-         {
-            y = 0;
-            startx = 0;
-            stepx = channels;
-            stepy = 1;
-         }
-
-         for (; y<height; y += stepy)
-         {
-            png_bytep inrow = png_voidcast(png_bytep, display->local_row);
-            png_bytep outrow;
-            png_const_bytep end_row;
-
-            /* Read the row, which is packed: */
-            png_read_row(png_ptr, inrow, NULL);
-
-            outrow = png_voidcast(png_bytep, display->first_row);
-            outrow += y * step_row;
-            end_row = outrow + width * channels;
-
-            /* Now do the composition on each pixel in this row. */
-            outrow += startx;
-            for (; outrow < end_row; outrow += stepx)
-            {
-               png_byte alpha = inrow[channels];
-
-               if (alpha > 0) /* else no change to the output */
-               {
-                  unsigned int c;
-
-                  for (c=0; c<channels; ++c)
-                  {
-                     png_uint_32 component = inrow[c];
-
-                     if (alpha < 255) /* else just use component */
-                     {
-                        /* This is PNG_OPTIMIZED_ALPHA, the component value
-                         * is a linear 8-bit value.  Combine this with the
-                         * current outrow[c] value which is sRGB encoded.
-                         * Arithmetic here is 16-bits to preserve the output
-                         * values correctly.
-                         */
-                        component *= 257*255; /* =65535 */
-                        component += (255-alpha)*png_sRGB_table[outrow[c]];
-
-                        /* So 'component' is scaled by 255*65535 and is
-                         * therefore appropriate for the sRGB to linear
-                         * conversion table.
-                         */
-                        component = PNG_sRGB_FROM_LINEAR(component);
-                     }
-
-                     outrow[c] = (png_byte)component;
-                  }
-               }
-
-               inrow += channels+1; /* components and alpha channel */
-            }
-         }
-      }
-   }
-
-   return 1;
-}
-
-/* The do_local_background case; called when all the following transforms are to
- * be done:
- *
- * PNG_RGB_TO_GRAY
- * PNG_COMPOSITE
- * PNG_GAMMA
- *
- * This is a work-around for the fact that both the PNG_RGB_TO_GRAY and
- * PNG_COMPOSITE code performs gamma correction, so we get double gamma
- * correction.  The fix-up is to prevent the PNG_COMPOSITE operation from
- * happening inside libpng, so this routine sees an 8 or 16-bit gray+alpha
- * row and handles the removal or pre-multiplication of the alpha channel.
- */
-static int
-png_image_read_background(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-   png_uint_32 height = image->height;
-   png_uint_32 width = image->width;
-   int pass, passes;
-
-   /* Double check the convoluted logic below.  We expect to get here with
-    * libpng doing rgb to gray and gamma correction but background processing
-    * left to the png_image_read_background function.  The rows libpng produce
-    * might be 8 or 16-bit but should always have two channels; gray plus alpha.
-    */
-   if ((png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
-      png_error(png_ptr, "lost rgb to gray");
-
-   if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-      png_error(png_ptr, "unexpected compose");
-
-   if (png_get_channels(png_ptr, info_ptr) != 2)
-      png_error(png_ptr, "lost/gained channels");
-
-   /* Expect the 8-bit case to always remove the alpha channel */
-   if ((image->format & PNG_FORMAT_FLAG_LINEAR) == 0 &&
-      (image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
-      png_error(png_ptr, "unexpected 8-bit transformation");
-
-   switch (png_ptr->interlaced)
-   {
-      case PNG_INTERLACE_NONE:
-         passes = 1;
-         break;
-
-      case PNG_INTERLACE_ADAM7:
-         passes = PNG_INTERLACE_ADAM7_PASSES;
-         break;
-
-      default:
-         png_error(png_ptr, "unknown interlace type");
-   }
-
-   /* Use direct access to info_ptr here because otherwise the simplified API
-    * would require PNG_EASY_ACCESS_SUPPORTED (just for this.)  Note this is
-    * checking the value after libpng expansions, not the original value in the
-    * PNG.
-    */
-   switch (info_ptr->bit_depth)
-   {
-      default:
-         png_error(png_ptr, "unexpected bit depth");
-         break;
-
-      case 8:
-         /* 8-bit sRGB gray values with an alpha channel; the alpha channel is
-          * to be removed by composing on a background: either the row if
-          * display->background is NULL or display->background->green if not.
-          * Unlike the code above ALPHA_OPTIMIZED has *not* been done.
-          */
-         {
-            png_bytep first_row = png_voidcast(png_bytep, display->first_row);
-            ptrdiff_t step_row = display->row_bytes;
-
-            for (pass = 0; pass < passes; ++pass)
-            {
-               png_bytep        row = png_voidcast(png_bytep,
-                                                   display->first_row);
-               unsigned int     startx, stepx, stepy;
-               png_uint_32      y;
-
-               if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-               {
-                  /* The row may be empty for a short image: */
-                  if (PNG_PASS_COLS(width, pass) == 0)
-                     continue;
-
-                  startx = PNG_PASS_START_COL(pass);
-                  stepx = PNG_PASS_COL_OFFSET(pass);
-                  y = PNG_PASS_START_ROW(pass);
-                  stepy = PNG_PASS_ROW_OFFSET(pass);
-               }
-
-               else
-               {
-                  y = 0;
-                  startx = 0;
-                  stepx = stepy = 1;
-               }
-
-               if (display->background == NULL)
-               {
-                  for (; y<height; y += stepy)
-                  {
-                     png_bytep inrow = png_voidcast(png_bytep,
-                        display->local_row);
-                     png_bytep outrow = first_row + y * step_row;
-                     png_const_bytep end_row = outrow + width;
-
-                     /* Read the row, which is packed: */
-                     png_read_row(png_ptr, inrow, NULL);
-
-                     /* Now do the composition on each pixel in this row. */
-                     outrow += startx;
-                     for (; outrow < end_row; outrow += stepx)
-                     {
-                        png_byte alpha = inrow[1];
-
-                        if (alpha > 0) /* else no change to the output */
-                        {
-                           png_uint_32 component = inrow[0];
-
-                           if (alpha < 255) /* else just use component */
-                           {
-                              /* Since PNG_OPTIMIZED_ALPHA was not set it is
-                               * necessary to invert the sRGB transfer
-                               * function and multiply the alpha out.
-                               */
-                              component = png_sRGB_table[component] * alpha;
-                              component += png_sRGB_table[outrow[0]] *
-                                 (255-alpha);
-                              component = PNG_sRGB_FROM_LINEAR(component);
-                           }
-
-                           outrow[0] = (png_byte)component;
-                        }
-
-                        inrow += 2; /* gray and alpha channel */
-                     }
-                  }
-               }
-
-               else /* constant background value */
-               {
-                  png_byte background8 = display->background->green;
-                  png_uint_16 background = png_sRGB_table[background8];
-
-                  for (; y<height; y += stepy)
-                  {
-                     png_bytep inrow = png_voidcast(png_bytep,
-                        display->local_row);
-                     png_bytep outrow = first_row + y * step_row;
-                     png_const_bytep end_row = outrow + width;
-
-                     /* Read the row, which is packed: */
-                     png_read_row(png_ptr, inrow, NULL);
-
-                     /* Now do the composition on each pixel in this row. */
-                     outrow += startx;
-                     for (; outrow < end_row; outrow += stepx)
-                     {
-                        png_byte alpha = inrow[1];
-
-                        if (alpha > 0) /* else use background */
-                        {
-                           png_uint_32 component = inrow[0];
-
-                           if (alpha < 255) /* else just use component */
-                           {
-                              component = png_sRGB_table[component] * alpha;
-                              component += background * (255-alpha);
-                              component = PNG_sRGB_FROM_LINEAR(component);
-                           }
-
-                           outrow[0] = (png_byte)component;
-                        }
-
-                        else
-                           outrow[0] = background8;
-
-                        inrow += 2; /* gray and alpha channel */
-                     }
-
-                     row += display->row_bytes;
-                  }
-               }
-            }
-         }
-         break;
-
-      case 16:
-         /* 16-bit linear with pre-multiplied alpha; the pre-multiplication must
-          * still be done and, maybe, the alpha channel removed.  This code also
-          * handles the alpha-first option.
-          */
-         {
-            png_uint_16p first_row = png_voidcast(png_uint_16p,
-               display->first_row);
-            /* The division by two is safe because the caller passed in a
-             * stride which was multiplied by 2 (below) to get row_bytes.
-             */
-            ptrdiff_t    step_row = display->row_bytes / 2;
-            int preserve_alpha = (image->format & PNG_FORMAT_FLAG_ALPHA) != 0;
-            unsigned int outchannels = 1+preserve_alpha;
-            int swap_alpha = 0;
-
-#           ifdef PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
-               if (preserve_alpha != 0 &&
-                   (image->format & PNG_FORMAT_FLAG_AFIRST) != 0)
-                  swap_alpha = 1;
-#           endif
-
-            for (pass = 0; pass < passes; ++pass)
-            {
-               unsigned int     startx, stepx, stepy;
-               png_uint_32      y;
-
-               /* The 'x' start and step are adjusted to output components here.
-                */
-               if (png_ptr->interlaced == PNG_INTERLACE_ADAM7)
-               {
-                  /* The row may be empty for a short image: */
-                  if (PNG_PASS_COLS(width, pass) == 0)
-                     continue;
-
-                  startx = PNG_PASS_START_COL(pass) * outchannels;
-                  stepx = PNG_PASS_COL_OFFSET(pass) * outchannels;
-                  y = PNG_PASS_START_ROW(pass);
-                  stepy = PNG_PASS_ROW_OFFSET(pass);
-               }
-
-               else
-               {
-                  y = 0;
-                  startx = 0;
-                  stepx = outchannels;
-                  stepy = 1;
-               }
-
-               for (; y<height; y += stepy)
-               {
-                  png_const_uint_16p inrow;
-                  png_uint_16p outrow = first_row + y*step_row;
-                  png_uint_16p end_row = outrow + width * outchannels;
-
-                  /* Read the row, which is packed: */
-                  png_read_row(png_ptr, png_voidcast(png_bytep,
-                     display->local_row), NULL);
-                  inrow = png_voidcast(png_const_uint_16p, display->local_row);
-
-                  /* Now do the pre-multiplication on each pixel in this row.
-                   */
-                  outrow += startx;
-                  for (; outrow < end_row; outrow += stepx)
-                  {
-                     png_uint_32 component = inrow[0];
-                     png_uint_16 alpha = inrow[1];
-
-                     if (alpha > 0) /* else 0 */
-                     {
-                        if (alpha < 65535) /* else just use component */
-                        {
-                           component *= alpha;
-                           component += 32767;
-                           component /= 65535;
-                        }
-                     }
-
-                     else
-                        component = 0;
-
-                     outrow[swap_alpha] = (png_uint_16)component;
-                     if (preserve_alpha != 0)
-                        outrow[1 ^ swap_alpha] = alpha;
-
-                     inrow += 2; /* components and alpha channel */
-                  }
-               }
-            }
-         }
-         break;
-   }
-
-   return 1;
-}
-
-/* The guts of png_image_finish_read as a png_safe_execute callback. */
-static int
-png_image_read_direct(png_voidp argument)
-{
-   png_image_read_control *display = png_voidcast(png_image_read_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-
-   png_uint_32 format = image->format;
-   int linear = (format & PNG_FORMAT_FLAG_LINEAR) != 0;
-   int do_local_compose = 0;
-   int do_local_background = 0; /* to avoid double gamma correction bug */
-   int passes = 0;
-
-   /* Add transforms to ensure the correct output format is produced then check
-    * that the required implementation support is there.  Always expand; always
-    * need 8 bits minimum, no palette and expanded tRNS.
-    */
-   png_set_expand(png_ptr);
-
-   /* Now check the format to see if it was modified. */
-   {
-      png_uint_32 base_format = png_image_format(png_ptr) &
-         ~PNG_FORMAT_FLAG_COLORMAP /* removed by png_set_expand */;
-      png_uint_32 change = format ^ base_format;
-      png_fixed_point output_gamma;
-      int mode; /* alpha mode */
-
-      /* Do this first so that we have a record if rgb to gray is happening. */
-      if ((change & PNG_FORMAT_FLAG_COLOR) != 0)
-      {
-         /* gray<->color transformation required. */
-         if ((format & PNG_FORMAT_FLAG_COLOR) != 0)
-            png_set_gray_to_rgb(png_ptr);
-
-         else
-         {
-            /* libpng can't do both rgb to gray and
-             * background/pre-multiplication if there is also significant gamma
-             * correction, because both operations require linear colors and
-             * the code only supports one transform doing the gamma correction.
-             * Handle this by doing the pre-multiplication or background
-             * operation in this code, if necessary.
-             *
-             * TODO: fix this by rewriting pngrtran.c (!)
-             *
-             * For the moment (given that fixing this in pngrtran.c is an
-             * enormous change) 'do_local_background' is used to indicate that
-             * the problem exists.
-             */
-            if ((base_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-               do_local_background = 1/*maybe*/;
-
-            png_set_rgb_to_gray_fixed(png_ptr, PNG_ERROR_ACTION_NONE,
-               PNG_RGB_TO_GRAY_DEFAULT, PNG_RGB_TO_GRAY_DEFAULT);
-         }
-
-         change &= ~PNG_FORMAT_FLAG_COLOR;
-      }
-
-      /* Set the gamma appropriately, linear for 16-bit input, sRGB otherwise.
-       */
-      {
-         png_fixed_point input_gamma_default;
-
-         if ((base_format & PNG_FORMAT_FLAG_LINEAR) != 0 &&
-             (image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
-            input_gamma_default = PNG_GAMMA_LINEAR;
-         else
-            input_gamma_default = PNG_DEFAULT_sRGB;
-
-         /* Call png_set_alpha_mode to set the default for the input gamma; the
-          * output gamma is set by a second call below.
-          */
-         png_set_alpha_mode_fixed(png_ptr, PNG_ALPHA_PNG, input_gamma_default);
-      }
-
-      if (linear != 0)
-      {
-         /* If there *is* an alpha channel in the input it must be multiplied
-          * out; use PNG_ALPHA_STANDARD, otherwise just use PNG_ALPHA_PNG.
-          */
-         if ((base_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            mode = PNG_ALPHA_STANDARD; /* associated alpha */
-
-         else
-            mode = PNG_ALPHA_PNG;
-
-         output_gamma = PNG_GAMMA_LINEAR;
-      }
-
-      else
-      {
-         mode = PNG_ALPHA_PNG;
-         output_gamma = PNG_DEFAULT_sRGB;
-      }
-
-      /* If 'do_local_background' is set check for the presence of gamma
-       * correction; this is part of the work-round for the libpng bug
-       * described above.
-       *
-       * TODO: fix libpng and remove this.
-       */
-      if (do_local_background != 0)
-      {
-         png_fixed_point gtest;
-
-         /* This is 'png_gamma_threshold' from pngrtran.c; the test used for
-          * gamma correction, the screen gamma hasn't been set on png_struct
-          * yet; it's set below.  png_struct::gamma, however, is set to the
-          * final value.
-          */
-         if (png_muldiv(&gtest, output_gamma, png_ptr->colorspace.gamma,
-               PNG_FP_1) != 0 && png_gamma_significant(gtest) == 0)
-            do_local_background = 0;
-
-         else if (mode == PNG_ALPHA_STANDARD)
-         {
-            do_local_background = 2/*required*/;
-            mode = PNG_ALPHA_PNG; /* prevent libpng doing it */
-         }
-
-         /* else leave as 1 for the checks below */
-      }
-
-      /* If the bit-depth changes then handle that here. */
-      if ((change & PNG_FORMAT_FLAG_LINEAR) != 0)
-      {
-         if (linear != 0 /*16-bit output*/)
-            png_set_expand_16(png_ptr);
-
-         else /* 8-bit output */
-            png_set_scale_16(png_ptr);
-
-         change &= ~PNG_FORMAT_FLAG_LINEAR;
-      }
-
-      /* Now the background/alpha channel changes. */
-      if ((change & PNG_FORMAT_FLAG_ALPHA) != 0)
-      {
-         /* Removing an alpha channel requires composition for the 8-bit
-          * formats; for the 16-bit it is already done, above, by the
-          * pre-multiplication and the channel just needs to be stripped.
-          */
-         if ((base_format & PNG_FORMAT_FLAG_ALPHA) != 0)
-         {
-            /* If RGB->gray is happening the alpha channel must be left and the
-             * operation completed locally.
-             *
-             * TODO: fix libpng and remove this.
-             */
-            if (do_local_background != 0)
-               do_local_background = 2/*required*/;
-
-            /* 16-bit output: just remove the channel */
-            else if (linear != 0) /* compose on black (well, pre-multiply) */
-               png_set_strip_alpha(png_ptr);
-
-            /* 8-bit output: do an appropriate compose */
-            else if (display->background != NULL)
-            {
-               png_color_16 c;
-
-               c.index = 0; /*unused*/
-               c.red = display->background->red;
-               c.green = display->background->green;
-               c.blue = display->background->blue;
-               c.gray = display->background->green;
-
-               /* This is always an 8-bit sRGB value, using the 'green' channel
-                * for gray is much better than calculating the luminance here;
-                * we can get off-by-one errors in that calculation relative to
-                * the app expectations and that will show up in transparent
-                * pixels.
-                */
-               png_set_background_fixed(png_ptr, &c,
-                  PNG_BACKGROUND_GAMMA_SCREEN, 0/*need_expand*/,
-                  0/*gamma: not used*/);
-            }
-
-            else /* compose on row: implemented below. */
-            {
-               do_local_compose = 1;
-               /* This leaves the alpha channel in the output, so it has to be
-                * removed by the code below.  Set the encoding to the 'OPTIMIZE'
-                * one so the code only has to hack on the pixels that require
-                * composition.
-                */
-               mode = PNG_ALPHA_OPTIMIZED;
-            }
-         }
-
-         else /* output needs an alpha channel */
-         {
-            /* This is tricky because it happens before the swap operation has
-             * been accomplished; however, the swap does *not* swap the added
-             * alpha channel (weird API), so it must be added in the correct
-             * place.
-             */
-            png_uint_32 filler; /* opaque filler */
-            int where;
-
-            if (linear != 0)
-               filler = 65535;
-
-            else
-               filler = 255;
-
-#           ifdef PNG_FORMAT_AFIRST_SUPPORTED
-               if ((format & PNG_FORMAT_FLAG_AFIRST) != 0)
-               {
-                  where = PNG_FILLER_BEFORE;
-                  change &= ~PNG_FORMAT_FLAG_AFIRST;
-               }
-
-               else
-#           endif
-               where = PNG_FILLER_AFTER;
-
-            png_set_add_alpha(png_ptr, filler, where);
-         }
-
-         /* This stops the (irrelevant) call to swap_alpha below. */
-         change &= ~PNG_FORMAT_FLAG_ALPHA;
-      }
-
-      /* Now set the alpha mode correctly; this is always done, even if there is
-       * no alpha channel in either the input or the output because it correctly
-       * sets the output gamma.
-       */
-      png_set_alpha_mode_fixed(png_ptr, mode, output_gamma);
-
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         if ((change & PNG_FORMAT_FLAG_BGR) != 0)
-         {
-            /* Check only the output format; PNG is never BGR; don't do this if
-             * the output is gray, but fix up the 'format' value in that case.
-             */
-            if ((format & PNG_FORMAT_FLAG_COLOR) != 0)
-               png_set_bgr(png_ptr);
-
-            else
-               format &= ~PNG_FORMAT_FLAG_BGR;
-
-            change &= ~PNG_FORMAT_FLAG_BGR;
-         }
-#     endif
-
-#     ifdef PNG_FORMAT_AFIRST_SUPPORTED
-         if ((change & PNG_FORMAT_FLAG_AFIRST) != 0)
-         {
-            /* Only relevant if there is an alpha channel - it's particularly
-             * important to handle this correctly because do_local_compose may
-             * be set above and then libpng will keep the alpha channel for this
-             * code to remove.
-             */
-            if ((format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            {
-               /* Disable this if doing a local background,
-                * TODO: remove this when local background is no longer required.
-                */
-               if (do_local_background != 2)
-                  png_set_swap_alpha(png_ptr);
-            }
-
-            else
-               format &= ~PNG_FORMAT_FLAG_AFIRST;
-
-            change &= ~PNG_FORMAT_FLAG_AFIRST;
-         }
-#     endif
-
-      /* If the *output* is 16-bit then we need to check for a byte-swap on this
-       * architecture.
-       */
-      if (linear != 0)
-      {
-         PNG_CONST png_uint_16 le = 0x0001;
-
-         if ((*(png_const_bytep) & le) != 0)
-            png_set_swap(png_ptr);
-      }
-
-      /* If change is not now 0 some transformation is missing - error out. */
-      if (change != 0)
-         png_error(png_ptr, "png_read_image: unsupported transformation");
-   }
-
-   PNG_SKIP_CHUNKS(png_ptr);
-
-   /* Update the 'info' structure and make sure the result is as required; first
-    * make sure to turn on the interlace handling if it will be required
-    * (because it can't be turned on *after* the call to png_read_update_info!)
-    *
-    * TODO: remove the do_local_background fixup below.
-    */
-   if (do_local_compose == 0 && do_local_background != 2)
-      passes = png_set_interlace_handling(png_ptr);
-
-   png_read_update_info(png_ptr, info_ptr);
-
-   {
-      png_uint_32 info_format = 0;
-
-      if ((info_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-         info_format |= PNG_FORMAT_FLAG_COLOR;
-
-      if ((info_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      {
-         /* do_local_compose removes this channel below. */
-         if (do_local_compose == 0)
-         {
-            /* do_local_background does the same if required. */
-            if (do_local_background != 2 ||
-               (format & PNG_FORMAT_FLAG_ALPHA) != 0)
-               info_format |= PNG_FORMAT_FLAG_ALPHA;
-         }
-      }
-
-      else if (do_local_compose != 0) /* internal error */
-         png_error(png_ptr, "png_image_read: alpha channel lost");
-
-      if (info_ptr->bit_depth == 16)
-         info_format |= PNG_FORMAT_FLAG_LINEAR;
-
-#     ifdef PNG_FORMAT_BGR_SUPPORTED
-         if ((png_ptr->transformations & PNG_BGR) != 0)
-            info_format |= PNG_FORMAT_FLAG_BGR;
-#     endif
-
-#     ifdef PNG_FORMAT_AFIRST_SUPPORTED
-         if (do_local_background == 2)
-         {
-            if ((format & PNG_FORMAT_FLAG_AFIRST) != 0)
-               info_format |= PNG_FORMAT_FLAG_AFIRST;
-         }
-
-         if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0 ||
-            ((png_ptr->transformations & PNG_ADD_ALPHA) != 0 &&
-            (png_ptr->flags & PNG_FLAG_FILLER_AFTER) == 0))
-         {
-            if (do_local_background == 2)
-               png_error(png_ptr, "unexpected alpha swap transformation");
-
-            info_format |= PNG_FORMAT_FLAG_AFIRST;
-         }
-#     endif
-
-      /* This is actually an internal error. */
-      if (info_format != format)
-         png_error(png_ptr, "png_read_image: invalid transformations");
-   }
-
-   /* Now read the rows.  If do_local_compose is set then it is necessary to use
-    * a local row buffer.  The output will be GA, RGBA or BGRA and must be
-    * converted to G, RGB or BGR as appropriate.  The 'local_row' member of the
-    * display acts as a flag.
-    */
-   {
-      png_voidp first_row = display->buffer;
-      ptrdiff_t row_bytes = display->row_stride;
-
-      if (linear != 0)
-         row_bytes *= 2;
-
-      /* The following expression is designed to work correctly whether it gives
-       * a signed or an unsigned result.
-       */
-      if (row_bytes < 0)
-      {
-         char *ptr = png_voidcast(char*, first_row);
-         ptr += (image->height-1) * (-row_bytes);
-         first_row = png_voidcast(png_voidp, ptr);
-      }
-
-      display->first_row = first_row;
-      display->row_bytes = row_bytes;
-   }
-
-   if (do_local_compose != 0)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_composite, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else if (do_local_background == 2)
-   {
-      int result;
-      png_voidp row = png_malloc(png_ptr, png_get_rowbytes(png_ptr, info_ptr));
-
-      display->local_row = row;
-      result = png_safe_execute(image, png_image_read_background, display);
-      display->local_row = NULL;
-      png_free(png_ptr, row);
-
-      return result;
-   }
-
-   else
-   {
-      png_alloc_size_t row_bytes = display->row_bytes;
-
-      while (--passes >= 0)
-      {
-         png_uint_32      y = image->height;
-         png_bytep        row = png_voidcast(png_bytep, display->first_row);
-
-         while (y-- > 0)
-         {
-            png_read_row(png_ptr, row, NULL);
-            row += row_bytes;
-         }
-      }
-
-      return 1;
-   }
-}
-
-int PNGAPI
-png_image_finish_read(png_imagep image, png_const_colorp background,
-   void *buffer, png_int_32 row_stride, void *colormap)
-{
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      png_uint_32 check;
-
-      if (row_stride == 0)
-         row_stride = PNG_IMAGE_ROW_STRIDE(*image);
-
-      if (row_stride < 0)
-         check = -row_stride;
-
-      else
-         check = row_stride;
-
-      if (image->opaque != NULL && buffer != NULL &&
-         check >= PNG_IMAGE_ROW_STRIDE(*image))
-      {
-         if ((image->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ||
-            (image->colormap_entries > 0 && colormap != NULL))
-         {
-            int result;
-            png_image_read_control display;
-
-            memset(&display, 0, (sizeof display));
-            display.image = image;
-            display.buffer = buffer;
-            display.row_stride = row_stride;
-            display.colormap = colormap;
-            display.background = background;
-            display.local_row = NULL;
-
-            /* Choose the correct 'end' routine; for the color-map case all the
-             * setup has already been done.
-             */
-            if ((image->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
-               result =
-                  png_safe_execute(image, png_image_read_colormap, &display) &&
-                  png_safe_execute(image, png_image_read_colormapped, &display);
-
-            else
-               result =
-                  png_safe_execute(image, png_image_read_direct, &display);
-
-            png_image_free(image);
-            return result;
-         }
-
-         else
-            return png_image_error(image,
-               "png_image_finish_read[color-map]: no color-map");
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_finish_read: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_finish_read: damaged PNG_IMAGE_VERSION");
-
-   return 0;
-}
-
-#endif /* SIMPLIFIED_READ */
-#endif /* READ */
--- a/DoConfig/fltk/png/pngrio.c
+++ /dev/null
@@ -1,120 +1,0 @@
-
-/* pngrio.c - functions for data input
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all input.  Users who need
- * special handling are expected to write a function that has the same
- * arguments as this and performs a similar function, but that possibly
- * has a different input method.  Note that you shouldn't change this
- * function, but rather write a replacement function and then make
- * libpng use it at run time with png_set_read_fn(...).
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Read the data from whatever input you are using.  The default routine
- * reads from a file pointer.  Note that this routine sometimes gets called
- * with very small lengths, so you should implement some kind of simple
- * buffering if you are using unbuffered reads.  This should never be asked
- * to read more then 64K on a 16 bit machine.
- */
-void /* PRIVATE */
-png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
-{
-   png_debug1(4, "reading %d bytes", (int)length);
-
-   if (png_ptr->read_data_fn != NULL)
-      (*(png_ptr->read_data_fn))(png_ptr, data, length);
-
-   else
-      png_error(png_ptr, "Call to NULL read function");
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-/* This is the function that does the actual reading of data.  If you are
- * not reading from a standard C stream, you should create a replacement
- * read_data function and use it at run time with png_set_read_fn(), rather
- * than changing the library.
- */
-void PNGCBAPI
-png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
-   png_size_t check;
-
-   if (png_ptr == NULL)
-      return;
-
-   /* fread() returns 0 on error, so it is OK to store this in a png_size_t
-    * instead of an int, which is what fread() actually returns.
-    */
-   check = fread(data, 1, length, png_voidcast(png_FILE_p, png_ptr->io_ptr));
-
-   if (check != length)
-      png_error(png_ptr, "Read Error");
-}
-#endif
-
-/* This function allows the application to supply a new input function
- * for libpng if standard C streams aren't being used.
- *
- * This function takes as its arguments:
- *
- * png_ptr      - pointer to a png input data structure
- *
- * io_ptr       - pointer to user supplied structure containing info about
- *                the input functions.  May be NULL.
- *
- * read_data_fn - pointer to a new input function that takes as its
- *                arguments a pointer to a png_struct, a pointer to
- *                a location where input data can be stored, and a 32-bit
- *                unsigned int that is the number of bytes to be read.
- *                To exit and output any fatal error messages the new write
- *                function should call png_error(png_ptr, "Error msg").
- *                May be NULL, in which case libpng's default function will
- *                be used.
- */
-void PNGAPI
-png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,
-   png_rw_ptr read_data_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = io_ptr;
-
-#ifdef PNG_STDIO_SUPPORTED
-   if (read_data_fn != NULL)
-      png_ptr->read_data_fn = read_data_fn;
-
-   else
-      png_ptr->read_data_fn = png_default_read_data;
-#else
-   png_ptr->read_data_fn = read_data_fn;
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-   /* It is an error to write to a read device */
-   if (png_ptr->write_data_fn != NULL)
-   {
-      png_ptr->write_data_fn = NULL;
-      png_warning(png_ptr,
-          "Can't set both read_data_fn and write_data_fn in the"
-          " same structure");
-   }
-#endif
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_ptr->output_flush_fn = NULL;
-#endif
-}
-#endif /* READ */
--- a/DoConfig/fltk/png/pngrtran.c
+++ /dev/null
@@ -1,4994 +1,0 @@
-
-/* pngrtran.c - transforms the data in a row for PNG readers
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains functions optionally called by an application
- * in order to tell libpng how to handle data when reading a PNG.
- * Transformations that are used in both reading and writing are
- * in pngtrans.c.
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-/* Set the action on getting a CRC error for an ancillary or critical chunk. */
-void PNGAPI
-png_set_crc_action(png_structrp png_ptr, int crit_action, int ancil_action)
-{
-   png_debug(1, "in png_set_crc_action");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* Tell libpng how we react to CRC errors in critical chunks */
-   switch (crit_action)
-   {
-      case PNG_CRC_NO_CHANGE:                        /* Leave setting as is */
-         break;
-
-      case PNG_CRC_WARN_USE:                               /* Warn/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE;
-         break;
-
-      case PNG_CRC_QUIET_USE:                             /* Quiet/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_CRITICAL_USE |
-                           PNG_FLAG_CRC_CRITICAL_IGNORE;
-         break;
-
-      case PNG_CRC_WARN_DISCARD:    /* Not a valid action for critical data */
-         png_warning(png_ptr,
-            "Can't discard critical data on CRC error");
-      case PNG_CRC_ERROR_QUIT:                                /* Error/quit */
-
-      case PNG_CRC_DEFAULT:
-      default:
-         png_ptr->flags &= ~PNG_FLAG_CRC_CRITICAL_MASK;
-         break;
-   }
-
-   /* Tell libpng how we react to CRC errors in ancillary chunks */
-   switch (ancil_action)
-   {
-      case PNG_CRC_NO_CHANGE:                       /* Leave setting as is */
-         break;
-
-      case PNG_CRC_WARN_USE:                              /* Warn/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE;
-         break;
-
-      case PNG_CRC_QUIET_USE:                            /* Quiet/use data */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_USE |
-                           PNG_FLAG_CRC_ANCILLARY_NOWARN;
-         break;
-
-      case PNG_CRC_ERROR_QUIT:                               /* Error/quit */
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         png_ptr->flags |= PNG_FLAG_CRC_ANCILLARY_NOWARN;
-         break;
-
-      case PNG_CRC_WARN_DISCARD:                      /* Warn/discard data */
-
-      case PNG_CRC_DEFAULT:
-      default:
-         png_ptr->flags &= ~PNG_FLAG_CRC_ANCILLARY_MASK;
-         break;
-   }
-}
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-/* Is it OK to set a transformation now?  Only if png_start_read_image or
- * png_read_update_info have not been called.  It is not necessary for the IHDR
- * to have been read in all cases; the need_IHDR parameter allows for this
- * check too.
- */
-static int
-png_rtran_ok(png_structrp png_ptr, int need_IHDR)
-{
-   if (png_ptr != NULL)
-   {
-      if ((png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
-         png_app_error(png_ptr,
-            "invalid after png_start_read_image or png_read_update_info");
-
-      else if (need_IHDR && (png_ptr->mode & PNG_HAVE_IHDR) == 0)
-         png_app_error(png_ptr, "invalid before the PNG header has been read");
-
-      else
-      {
-         /* Turn on failure to initialize correctly for all transforms. */
-         png_ptr->flags |= PNG_FLAG_DETECT_UNINITIALIZED;
-
-         return 1; /* Ok */
-      }
-   }
-
-   return 0; /* no png_error possible! */
-}
-#endif
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-/* Handle alpha and tRNS via a background color */
-void PNGFAPI
-png_set_background_fixed(png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, png_fixed_point background_gamma)
-{
-   png_debug(1, "in png_set_background_fixed");
-
-   if (png_rtran_ok(png_ptr, 0) == 0 || background_color == NULL)
-      return;
-
-   if (background_gamma_code == PNG_BACKGROUND_GAMMA_UNKNOWN)
-   {
-      png_warning(png_ptr, "Application must supply a known background gamma");
-      return;
-   }
-
-   png_ptr->transformations |= PNG_COMPOSE | PNG_STRIP_ALPHA;
-   png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-   png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-   png_ptr->background = *background_color;
-   png_ptr->background_gamma = background_gamma;
-   png_ptr->background_gamma_type = (png_byte)(background_gamma_code);
-   if (need_expand != 0)
-      png_ptr->transformations |= PNG_BACKGROUND_EXPAND;
-   else
-      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_background(png_structrp png_ptr,
-    png_const_color_16p background_color, int background_gamma_code,
-    int need_expand, double background_gamma)
-{
-   png_set_background_fixed(png_ptr, background_color, background_gamma_code,
-      need_expand, png_fixed(png_ptr, background_gamma, "png_set_background"));
-}
-#  endif  /* FLOATING_POINT */
-#endif /* READ_BACKGROUND */
-
-/* Scale 16-bit depth files to 8-bit depth.  If both of these are set then the
- * one that pngrtran does first (scale) happens.  This is necessary to allow the
- * TRANSFORM and API behavior to be somewhat consistent, and it's simpler.
- */
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-void PNGAPI
-png_set_scale_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_scale_16");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= PNG_SCALE_16_TO_8;
-}
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-/* Chop 16-bit depth files to 8-bit depth */
-void PNGAPI
-png_set_strip_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_strip_16");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= PNG_16_TO_8;
-}
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-void PNGAPI
-png_set_strip_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_strip_alpha");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= PNG_STRIP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_ALPHA_MODE_SUPPORTED) || defined(PNG_READ_GAMMA_SUPPORTED)
-static png_fixed_point
-translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
-   int is_screen)
-{
-   /* Check for flag values.  The main reason for having the old Mac value as a
-    * flag is that it is pretty near impossible to work out what the correct
-    * value is from Apple documentation - a working Mac system is needed to
-    * discover the value!
-    */
-   if (output_gamma == PNG_DEFAULT_sRGB ||
-      output_gamma == PNG_FP_1 / PNG_DEFAULT_sRGB)
-   {
-      /* If there is no sRGB support this just sets the gamma to the standard
-       * sRGB value.  (This is a side effect of using this function!)
-       */
-#     ifdef PNG_READ_sRGB_SUPPORTED
-         png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
-#     else
-         PNG_UNUSED(png_ptr)
-#     endif
-      if (is_screen != 0)
-         output_gamma = PNG_GAMMA_sRGB;
-      else
-         output_gamma = PNG_GAMMA_sRGB_INVERSE;
-   }
-
-   else if (output_gamma == PNG_GAMMA_MAC_18 ||
-      output_gamma == PNG_FP_1 / PNG_GAMMA_MAC_18)
-   {
-      if (is_screen != 0)
-         output_gamma = PNG_GAMMA_MAC_OLD;
-      else
-         output_gamma = PNG_GAMMA_MAC_INVERSE;
-   }
-
-   return output_gamma;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-static png_fixed_point
-convert_gamma_value(png_structrp png_ptr, double output_gamma)
-{
-   /* The following silently ignores cases where fixed point (times 100,000)
-    * gamma values are passed to the floating point API.  This is safe and it
-    * means the fixed point constants work just fine with the floating point
-    * API.  The alternative would just lead to undetected errors and spurious
-    * bug reports.  Negative values fail inside the _fixed API unless they
-    * correspond to the flag values.
-    */
-   if (output_gamma > 0 && output_gamma < 128)
-      output_gamma *= PNG_FP_1;
-
-   /* This preserves -1 and -2 exactly: */
-   output_gamma = floor(output_gamma + .5);
-
-   if (output_gamma > PNG_FP_MAX || output_gamma < PNG_FP_MIN)
-      png_fixed_error(png_ptr, "gamma value");
-
-   return (png_fixed_point)output_gamma;
-}
-#  endif
-#endif /* READ_ALPHA_MODE || READ_GAMMA */
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-void PNGFAPI
-png_set_alpha_mode_fixed(png_structrp png_ptr, int mode,
-   png_fixed_point output_gamma)
-{
-   int compose = 0;
-   png_fixed_point file_gamma;
-
-   png_debug(1, "in png_set_alpha_mode");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   output_gamma = translate_gamma_flags(png_ptr, output_gamma, 1/*screen*/);
-
-   /* Validate the value to ensure it is in a reasonable range. The value
-    * is expected to be 1 or greater, but this range test allows for some
-    * viewing correction values.  The intent is to weed out users of this API
-    * who use the inverse of the gamma value accidentally!  Since some of these
-    * values are reasonable this may have to be changed.
-    */
-   if (output_gamma < 70000 || output_gamma > 300000)
-      png_error(png_ptr, "output gamma out of expected range");
-
-   /* The default file gamma is the inverse of the output gamma; the output
-    * gamma may be changed below so get the file value first:
-    */
-   file_gamma = png_reciprocal(output_gamma);
-
-   /* There are really 8 possibilities here, composed of any combination
-    * of:
-    *
-    *    premultiply the color channels
-    *    do not encode non-opaque pixels
-    *    encode the alpha as well as the color channels
-    *
-    * The differences disappear if the input/output ('screen') gamma is 1.0,
-    * because then the encoding is a no-op and there is only the choice of
-    * premultiplying the color channels or not.
-    *
-    * png_set_alpha_mode and png_set_background interact because both use
-    * png_compose to do the work.  Calling both is only useful when
-    * png_set_alpha_mode is used to set the default mode - PNG_ALPHA_PNG - along
-    * with a default gamma value.  Otherwise PNG_COMPOSE must not be set.
-    */
-   switch (mode)
-   {
-      case PNG_ALPHA_PNG:        /* default: png standard */
-         /* No compose, but it may be set by png_set_background! */
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         break;
-
-      case PNG_ALPHA_ASSOCIATED: /* color channels premultiplied */
-         compose = 1;
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         /* The output is linear: */
-         output_gamma = PNG_FP_1;
-         break;
-
-      case PNG_ALPHA_OPTIMIZED:  /* associated, non-opaque pixels linear */
-         compose = 1;
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags |= PNG_FLAG_OPTIMIZE_ALPHA;
-         /* output_gamma records the encoding of opaque pixels! */
-         break;
-
-      case PNG_ALPHA_BROKEN:     /* associated, non-linear, alpha encoded */
-         compose = 1;
-         png_ptr->transformations |= PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-         break;
-
-      default:
-         png_error(png_ptr, "invalid alpha mode");
-   }
-
-   /* Only set the default gamma if the file gamma has not been set (this has
-    * the side effect that the gamma in a second call to png_set_alpha_mode will
-    * be ignored.)
-    */
-   if (png_ptr->colorspace.gamma == 0)
-   {
-      png_ptr->colorspace.gamma = file_gamma;
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   }
-
-   /* But always set the output gamma: */
-   png_ptr->screen_gamma = output_gamma;
-
-   /* Finally, if pre-multiplying, set the background fields to achieve the
-    * desired result.
-    */
-   if (compose != 0)
-   {
-      /* And obtain alpha pre-multiplication by composing on black: */
-      memset(&png_ptr->background, 0, (sizeof png_ptr->background));
-      png_ptr->background_gamma = png_ptr->colorspace.gamma; /* just in case */
-      png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_FILE;
-      png_ptr->transformations &= ~PNG_BACKGROUND_EXPAND;
-
-      if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-         png_error(png_ptr,
-            "conflicting calls to set alpha mode and background");
-
-      png_ptr->transformations |= PNG_COMPOSE;
-   }
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_alpha_mode(png_structrp png_ptr, int mode, double output_gamma)
-{
-   png_set_alpha_mode_fixed(png_ptr, mode, convert_gamma_value(png_ptr,
-      output_gamma));
-}
-#  endif
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* Dither file to 8-bit.  Supply a palette, the current number
- * of elements in the palette, the maximum number of elements
- * allowed, and a histogram if possible.  If the current number
- * of colors is greater then the maximum number, the palette will be
- * modified to fit in the maximum number.  "full_quantize" indicates
- * whether we need a quantizing cube set up for RGB images, or if we
- * simply are reducing the number of colors in a paletted image.
- */
-
-typedef struct png_dsort_struct
-{
-   struct png_dsort_struct * next;
-   png_byte left;
-   png_byte right;
-} png_dsort;
-typedef png_dsort *   png_dsortp;
-typedef png_dsort * * png_dsortpp;
-
-void PNGAPI
-png_set_quantize(png_structrp png_ptr, png_colorp palette,
-    int num_palette, int maximum_colors, png_const_uint_16p histogram,
-    int full_quantize)
-{
-   png_debug(1, "in png_set_quantize");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= PNG_QUANTIZE;
-
-   if (full_quantize == 0)
-   {
-      int i;
-
-      png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr,
-          (png_uint_32)(num_palette * (sizeof (png_byte))));
-      for (i = 0; i < num_palette; i++)
-         png_ptr->quantize_index[i] = (png_byte)i;
-   }
-
-   if (num_palette > maximum_colors)
-   {
-      if (histogram != NULL)
-      {
-         /* This is easy enough, just throw out the least used colors.
-          * Perhaps not the best solution, but good enough.
-          */
-
-         int i;
-
-         /* Initialize an array to sort colors */
-         png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-
-         /* Initialize the quantize_sort array */
-         for (i = 0; i < num_palette; i++)
-            png_ptr->quantize_sort[i] = (png_byte)i;
-
-         /* Find the least used palette entries by starting a
-          * bubble sort, and running it until we have sorted
-          * out enough colors.  Note that we don't care about
-          * sorting all the colors, just finding which are
-          * least used.
-          */
-
-         for (i = num_palette - 1; i >= maximum_colors; i--)
-         {
-            int done; /* To stop early if the list is pre-sorted */
-            int j;
-
-            done = 1;
-            for (j = 0; j < i; j++)
-            {
-               if (histogram[png_ptr->quantize_sort[j]]
-                   < histogram[png_ptr->quantize_sort[j + 1]])
-               {
-                  png_byte t;
-
-                  t = png_ptr->quantize_sort[j];
-                  png_ptr->quantize_sort[j] = png_ptr->quantize_sort[j + 1];
-                  png_ptr->quantize_sort[j + 1] = t;
-                  done = 0;
-               }
-            }
-
-            if (done != 0)
-               break;
-         }
-
-         /* Swap the palette around, and set up a table, if necessary */
-         if (full_quantize != 0)
-         {
-            int j = num_palette;
-
-            /* Put all the useful colors within the max, but don't
-             * move the others.
-             */
-            for (i = 0; i < maximum_colors; i++)
-            {
-               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
-               {
-                  do
-                     j--;
-                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
-
-                  palette[i] = palette[j];
-               }
-            }
-         }
-         else
-         {
-            int j = num_palette;
-
-            /* Move all the used colors inside the max limit, and
-             * develop a translation table.
-             */
-            for (i = 0; i < maximum_colors; i++)
-            {
-               /* Only move the colors we need to */
-               if ((int)png_ptr->quantize_sort[i] >= maximum_colors)
-               {
-                  png_color tmp_color;
-
-                  do
-                     j--;
-                  while ((int)png_ptr->quantize_sort[j] >= maximum_colors);
-
-                  tmp_color = palette[j];
-                  palette[j] = palette[i];
-                  palette[i] = tmp_color;
-                  /* Indicate where the color went */
-                  png_ptr->quantize_index[j] = (png_byte)i;
-                  png_ptr->quantize_index[i] = (png_byte)j;
-               }
-            }
-
-            /* Find closest color for those colors we are not using */
-            for (i = 0; i < num_palette; i++)
-            {
-               if ((int)png_ptr->quantize_index[i] >= maximum_colors)
-               {
-                  int min_d, k, min_k, d_index;
-
-                  /* Find the closest color to one we threw out */
-                  d_index = png_ptr->quantize_index[i];
-                  min_d = PNG_COLOR_DIST(palette[d_index], palette[0]);
-                  for (k = 1, min_k = 0; k < maximum_colors; k++)
-                  {
-                     int d;
-
-                     d = PNG_COLOR_DIST(palette[d_index], palette[k]);
-
-                     if (d < min_d)
-                     {
-                        min_d = d;
-                        min_k = k;
-                     }
-                  }
-                  /* Point to closest color */
-                  png_ptr->quantize_index[i] = (png_byte)min_k;
-               }
-            }
-         }
-         png_free(png_ptr, png_ptr->quantize_sort);
-         png_ptr->quantize_sort = NULL;
-      }
-      else
-      {
-         /* This is much harder to do simply (and quickly).  Perhaps
-          * we need to go through a median cut routine, but those
-          * don't always behave themselves with only a few colors
-          * as input.  So we will just find the closest two colors,
-          * and throw out one of them (chosen somewhat randomly).
-          * [We don't understand this at all, so if someone wants to
-          *  work on improving it, be our guest - AED, GRP]
-          */
-         int i;
-         int max_d;
-         int num_new_palette;
-         png_dsortp t;
-         png_dsortpp hash;
-
-         t = NULL;
-
-         /* Initialize palette index arrays */
-         png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-         png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)(num_palette * (sizeof (png_byte))));
-
-         /* Initialize the sort array */
-         for (i = 0; i < num_palette; i++)
-         {
-            png_ptr->index_to_palette[i] = (png_byte)i;
-            png_ptr->palette_to_index[i] = (png_byte)i;
-         }
-
-         hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 *
-             (sizeof (png_dsortp))));
-
-         num_new_palette = num_palette;
-
-         /* Initial wild guess at how far apart the farthest pixel
-          * pair we will be eliminating will be.  Larger
-          * numbers mean more areas will be allocated, Smaller
-          * numbers run the risk of not saving enough data, and
-          * having to do this all over again.
-          *
-          * I have not done extensive checking on this number.
-          */
-         max_d = 96;
-
-         while (num_new_palette > maximum_colors)
-         {
-            for (i = 0; i < num_new_palette - 1; i++)
-            {
-               int j;
-
-               for (j = i + 1; j < num_new_palette; j++)
-               {
-                  int d;
-
-                  d = PNG_COLOR_DIST(palette[i], palette[j]);
-
-                  if (d <= max_d)
-                  {
-
-                     t = (png_dsortp)png_malloc_warn(png_ptr,
-                         (png_uint_32)(sizeof (png_dsort)));
-
-                     if (t == NULL)
-                         break;
-
-                     t->next = hash[d];
-                     t->left = (png_byte)i;
-                     t->right = (png_byte)j;
-                     hash[d] = t;
-                  }
-               }
-               if (t == NULL)
-                  break;
-            }
-
-            if (t != NULL)
-            for (i = 0; i <= max_d; i++)
-            {
-               if (hash[i] != NULL)
-               {
-                  png_dsortp p;
-
-                  for (p = hash[i]; p; p = p->next)
-                  {
-                     if ((int)png_ptr->index_to_palette[p->left]
-                         < num_new_palette &&
-                         (int)png_ptr->index_to_palette[p->right]
-                         < num_new_palette)
-                     {
-                        int j, next_j;
-
-                        if (num_new_palette & 0x01)
-                        {
-                           j = p->left;
-                           next_j = p->right;
-                        }
-                        else
-                        {
-                           j = p->right;
-                           next_j = p->left;
-                        }
-
-                        num_new_palette--;
-                        palette[png_ptr->index_to_palette[j]]
-                            = palette[num_new_palette];
-                        if (full_quantize == 0)
-                        {
-                           int k;
-
-                           for (k = 0; k < num_palette; k++)
-                           {
-                              if (png_ptr->quantize_index[k] ==
-                                  png_ptr->index_to_palette[j])
-                                 png_ptr->quantize_index[k] =
-                                     png_ptr->index_to_palette[next_j];
-
-                              if ((int)png_ptr->quantize_index[k] ==
-                                  num_new_palette)
-                                 png_ptr->quantize_index[k] =
-                                     png_ptr->index_to_palette[j];
-                           }
-                        }
-
-                        png_ptr->index_to_palette[png_ptr->palette_to_index
-                            [num_new_palette]] = png_ptr->index_to_palette[j];
-
-                        png_ptr->palette_to_index[png_ptr->index_to_palette[j]]
-                            = png_ptr->palette_to_index[num_new_palette];
-
-                        png_ptr->index_to_palette[j] =
-                            (png_byte)num_new_palette;
-
-                        png_ptr->palette_to_index[num_new_palette] =
-                            (png_byte)j;
-                     }
-                     if (num_new_palette <= maximum_colors)
-                        break;
-                  }
-                  if (num_new_palette <= maximum_colors)
-                     break;
-               }
-            }
-
-            for (i = 0; i < 769; i++)
-            {
-               if (hash[i] != NULL)
-               {
-                  png_dsortp p = hash[i];
-                  while (p)
-                  {
-                     t = p->next;
-                     png_free(png_ptr, p);
-                     p = t;
-                  }
-               }
-               hash[i] = 0;
-            }
-            max_d += 96;
-         }
-         png_free(png_ptr, hash);
-         png_free(png_ptr, png_ptr->palette_to_index);
-         png_free(png_ptr, png_ptr->index_to_palette);
-         png_ptr->palette_to_index = NULL;
-         png_ptr->index_to_palette = NULL;
-      }
-      num_palette = maximum_colors;
-   }
-   if (png_ptr->palette == NULL)
-   {
-      png_ptr->palette = palette;
-   }
-   png_ptr->num_palette = (png_uint_16)num_palette;
-
-   if (full_quantize != 0)
-   {
-      int i;
-      png_bytep distance;
-      int total_bits = PNG_QUANTIZE_RED_BITS + PNG_QUANTIZE_GREEN_BITS +
-          PNG_QUANTIZE_BLUE_BITS;
-      int num_red = (1 << PNG_QUANTIZE_RED_BITS);
-      int num_green = (1 << PNG_QUANTIZE_GREEN_BITS);
-      int num_blue = (1 << PNG_QUANTIZE_BLUE_BITS);
-      png_size_t num_entries = ((png_size_t)1 << total_bits);
-
-      png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr,
-          (png_uint_32)(num_entries * (sizeof (png_byte))));
-
-      distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
-          (sizeof (png_byte))));
-
-      memset(distance, 0xff, num_entries * (sizeof (png_byte)));
-
-      for (i = 0; i < num_palette; i++)
-      {
-         int ir, ig, ib;
-         int r = (palette[i].red >> (8 - PNG_QUANTIZE_RED_BITS));
-         int g = (palette[i].green >> (8 - PNG_QUANTIZE_GREEN_BITS));
-         int b = (palette[i].blue >> (8 - PNG_QUANTIZE_BLUE_BITS));
-
-         for (ir = 0; ir < num_red; ir++)
-         {
-            /* int dr = abs(ir - r); */
-            int dr = ((ir > r) ? ir - r : r - ir);
-            int index_r = (ir << (PNG_QUANTIZE_BLUE_BITS +
-                PNG_QUANTIZE_GREEN_BITS));
-
-            for (ig = 0; ig < num_green; ig++)
-            {
-               /* int dg = abs(ig - g); */
-               int dg = ((ig > g) ? ig - g : g - ig);
-               int dt = dr + dg;
-               int dm = ((dr > dg) ? dr : dg);
-               int index_g = index_r | (ig << PNG_QUANTIZE_BLUE_BITS);
-
-               for (ib = 0; ib < num_blue; ib++)
-               {
-                  int d_index = index_g | ib;
-                  /* int db = abs(ib - b); */
-                  int db = ((ib > b) ? ib - b : b - ib);
-                  int dmax = ((dm > db) ? dm : db);
-                  int d = dmax + dt + db;
-
-                  if (d < (int)distance[d_index])
-                  {
-                     distance[d_index] = (png_byte)d;
-                     png_ptr->palette_lookup[d_index] = (png_byte)i;
-                  }
-               }
-            }
-         }
-      }
-
-      png_free(png_ptr, distance);
-   }
-}
-#endif /* READ_QUANTIZE */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-void PNGFAPI
-png_set_gamma_fixed(png_structrp png_ptr, png_fixed_point scrn_gamma,
-   png_fixed_point file_gamma)
-{
-   png_debug(1, "in png_set_gamma_fixed");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   /* New in libpng-1.5.4 - reserve particular negative values as flags. */
-   scrn_gamma = translate_gamma_flags(png_ptr, scrn_gamma, 1/*screen*/);
-   file_gamma = translate_gamma_flags(png_ptr, file_gamma, 0/*file*/);
-
-   /* Checking the gamma values for being >0 was added in 1.5.4 along with the
-    * premultiplied alpha support; this actually hides an undocumented feature
-    * of the previous implementation which allowed gamma processing to be
-    * disabled in background handling.  There is no evidence (so far) that this
-    * was being used; however, png_set_background itself accepted and must still
-    * accept '0' for the gamma value it takes, because it isn't always used.
-    *
-    * Since this is an API change (albeit a very minor one that removes an
-    * undocumented API feature) the following checks were only enabled in
-    * libpng-1.6.0.
-    */
-   if (file_gamma <= 0)
-      png_error(png_ptr, "invalid file gamma in png_set_gamma");
-
-   if (scrn_gamma <= 0)
-      png_error(png_ptr, "invalid screen gamma in png_set_gamma");
-
-   /* Set the gamma values unconditionally - this overrides the value in the PNG
-    * file if a gAMA chunk was present.  png_set_alpha_mode provides a
-    * different, easier, way to default the file gamma.
-    */
-   png_ptr->colorspace.gamma = file_gamma;
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-   png_ptr->screen_gamma = scrn_gamma;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_gamma(png_structrp png_ptr, double scrn_gamma, double file_gamma)
-{
-   png_set_gamma_fixed(png_ptr, convert_gamma_value(png_ptr, scrn_gamma),
-      convert_gamma_value(png_ptr, file_gamma));
-}
-#  endif /* FLOATING_POINT */
-#endif /* READ_GAMMA */
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expand paletted images to RGB, expand grayscale images of
- * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
- * to alpha channels.
- */
-void PNGAPI
-png_set_expand(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-
-/* GRR 19990627:  the following three functions currently are identical
- *  to png_set_expand().  However, it is entirely reasonable that someone
- *  might wish to expand an indexed image to RGB but *not* expand a single,
- *  fully transparent palette entry to a full alpha channel--perhaps instead
- *  convert tRNS to the grayscale/RGB format (16-bit RGB value), or replace
- *  the transparent color with a particular RGB value, or drop tRNS entirely.
- *  IOW, a future version of the library may make the transformations flag
- *  a bit more fine-grained, with separate bits for each of these three
- *  functions.
- *
- *  More to the point, these functions make it obvious what libpng will be
- *  doing, whereas "expand" can (and does) mean any number of things.
- *
- *  GRP 20060307: In libpng-1.2.9, png_set_gray_1_2_4_to_8() was modified
- *  to expand only the sample depth but not to expand the tRNS to alpha
- *  and its name was changed to png_set_expand_gray_1_2_4_to_8().
- */
-
-/* Expand paletted images to RGB. */
-void PNGAPI
-png_set_palette_to_rgb(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_palette_to_rgb");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-
-/* Expand grayscale images of less than 8-bit depth to 8 bits. */
-void PNGAPI
-png_set_expand_gray_1_2_4_to_8(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand_gray_1_2_4_to_8");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= PNG_EXPAND;
-}
-
-/* Expand tRNS chunks to alpha channels. */
-void PNGAPI
-png_set_tRNS_to_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_tRNS_to_alpha");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-#endif /* READ_EXPAND */
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* Expand to 16-bit channels, expand the tRNS chunk too (because otherwise
- * it may not work correctly.)
- */
-void PNGAPI
-png_set_expand_16(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_expand_16");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   png_ptr->transformations |= (PNG_EXPAND_16 | PNG_EXPAND | PNG_EXPAND_tRNS);
-}
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-void PNGAPI
-png_set_gray_to_rgb(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_gray_to_rgb");
-
-   if (png_rtran_ok(png_ptr, 0) == 0)
-      return;
-
-   /* Because rgb must be 8 bits or more: */
-   png_set_expand_gray_1_2_4_to_8(png_ptr);
-   png_ptr->transformations |= PNG_GRAY_TO_RGB;
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-void PNGFAPI
-png_set_rgb_to_gray_fixed(png_structrp png_ptr, int error_action,
-    png_fixed_point red, png_fixed_point green)
-{
-   png_debug(1, "in png_set_rgb_to_gray");
-
-   /* Need the IHDR here because of the check on color_type below. */
-   /* TODO: fix this */
-   if (png_rtran_ok(png_ptr, 1) == 0)
-      return;
-
-   switch (error_action)
-   {
-      case PNG_ERROR_ACTION_NONE:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY;
-         break;
-
-      case PNG_ERROR_ACTION_WARN:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY_WARN;
-         break;
-
-      case PNG_ERROR_ACTION_ERROR:
-         png_ptr->transformations |= PNG_RGB_TO_GRAY_ERR;
-         break;
-
-      default:
-         png_error(png_ptr, "invalid error action to rgb_to_gray");
-         break;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#ifdef PNG_READ_EXPAND_SUPPORTED
-      png_ptr->transformations |= PNG_EXPAND;
-#else
-   {
-      /* Make this an error in 1.6 because otherwise the application may assume
-       * that it just worked and get a memory overwrite.
-       */
-      png_error(png_ptr,
-        "Cannot do RGB_TO_GRAY without EXPAND_SUPPORTED");
-
-      /* png_ptr->transformations &= ~PNG_RGB_TO_GRAY; */
-   }
-#endif
-   {
-      if (red >= 0 && green >= 0 && red + green <= PNG_FP_1)
-      {
-         png_uint_16 red_int, green_int;
-
-         /* NOTE: this calculation does not round, but this behavior is retained
-          * for consistency; the inaccuracy is very small.  The code here always
-          * overwrites the coefficients, regardless of whether they have been
-          * defaulted or set already.
-          */
-         red_int = (png_uint_16)(((png_uint_32)red*32768)/100000);
-         green_int = (png_uint_16)(((png_uint_32)green*32768)/100000);
-
-         png_ptr->rgb_to_gray_red_coeff   = red_int;
-         png_ptr->rgb_to_gray_green_coeff = green_int;
-         png_ptr->rgb_to_gray_coefficients_set = 1;
-      }
-
-      else
-      {
-         if (red >= 0 && green >= 0)
-            png_app_warning(png_ptr,
-               "ignoring out of range rgb_to_gray coefficients");
-
-         /* Use the defaults, from the cHRM chunk if set, else the historical
-          * values which are close to the sRGB/HDTV/ITU-Rec 709 values.  See
-          * png_do_rgb_to_gray for more discussion of the values.  In this case
-          * the coefficients are not marked as 'set' and are not overwritten if
-          * something has already provided a default.
-          */
-         if (png_ptr->rgb_to_gray_red_coeff == 0 &&
-            png_ptr->rgb_to_gray_green_coeff == 0)
-         {
-            png_ptr->rgb_to_gray_red_coeff   = 6968;
-            png_ptr->rgb_to_gray_green_coeff = 23434;
-            /* png_ptr->rgb_to_gray_blue_coeff  = 2366; */
-         }
-      }
-   }
-}
-
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-/* Convert a RGB image to a grayscale of the same width.  This allows us,
- * for example, to convert a 24 bpp RGB image into an 8 bpp grayscale image.
- */
-
-void PNGAPI
-png_set_rgb_to_gray(png_structrp png_ptr, int error_action, double red,
-   double green)
-{
-   png_set_rgb_to_gray_fixed(png_ptr, error_action,
-      png_fixed(png_ptr, red, "rgb to gray red coefficient"),
-      png_fixed(png_ptr, green, "rgb to gray green coefficient"));
-}
-#endif /* FLOATING POINT */
-
-#endif /* RGB_TO_GRAY */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-void PNGAPI
-png_set_read_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
-    read_user_transform_fn)
-{
-   png_debug(1, "in png_set_read_user_transform_fn");
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   png_ptr->transformations |= PNG_USER_TRANSFORM;
-   png_ptr->read_user_transform_fn = read_user_transform_fn;
-#endif
-}
-#endif
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* In the case of gamma transformations only do transformations on images where
- * the [file] gamma and screen_gamma are not close reciprocals, otherwise it
- * slows things down slightly, and also needlessly introduces small errors.
- */
-static int /* PRIVATE */
-png_gamma_threshold(png_fixed_point screen_gamma, png_fixed_point file_gamma)
-{
-   /* PNG_GAMMA_THRESHOLD is the threshold for performing gamma
-    * correction as a difference of the overall transform from 1.0
-    *
-    * We want to compare the threshold with s*f - 1, if we get
-    * overflow here it is because of wacky gamma values so we
-    * turn on processing anyway.
-    */
-   png_fixed_point gtest;
-   return !png_muldiv(&gtest, screen_gamma, file_gamma, PNG_FP_1) ||
-       png_gamma_significant(gtest);
-}
-#endif
-
-/* Initialize everything needed for the read.  This includes modifying
- * the palette.
- */
-
-/* For the moment 'png_init_palette_transformations' and
- * 'png_init_rgb_transformations' only do some flag canceling optimizations.
- * The intent is that these two routines should have palette or rgb operations
- * extracted from 'png_init_read_transformations'.
- */
-static void /* PRIVATE */
-png_init_palette_transformations(png_structrp png_ptr)
-{
-   /* Called to handle the (input) palette case.  In png_do_read_transformations
-    * the first step is to expand the palette if requested, so this code must
-    * take care to only make changes that are invariant with respect to the
-    * palette expansion, or only do them if there is no expansion.
-    *
-    * STRIP_ALPHA has already been handled in the caller (by setting num_trans
-    * to 0.)
-    */
-   int input_has_alpha = 0;
-   int input_has_transparency = 0;
-
-   if (png_ptr->num_trans > 0)
-   {
-      int i;
-
-      /* Ignore if all the entries are opaque (unlikely!) */
-      for (i=0; i<png_ptr->num_trans; ++i)
-      {
-         if (png_ptr->trans_alpha[i] == 255)
-            continue;
-         else if (png_ptr->trans_alpha[i] == 0)
-            input_has_transparency = 1;
-         else
-         {
-            input_has_transparency = 1;
-            input_has_alpha = 1;
-            break;
-         }
-      }
-   }
-
-   /* If no alpha we can optimize. */
-   if (input_has_alpha == 0)
-   {
-      /* Any alpha means background and associative alpha processing is
-       * required, however if the alpha is 0 or 1 throughout OPTIMIZE_ALPHA
-       * and ENCODE_ALPHA are irrelevant.
-       */
-      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-      if (input_has_transparency == 0)
-         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
-   }
-
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* png_set_background handling - deals with the complexity of whether the
-    * background color is in the file format or the screen format in the case
-    * where an 'expand' will happen.
-    */
-
-   /* The following code cannot be entered in the alpha pre-multiplication case
-    * because PNG_BACKGROUND_EXPAND is cancelled below.
-    */
-   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
-       (png_ptr->transformations & PNG_EXPAND) != 0)
-   {
-      {
-         png_ptr->background.red   =
-             png_ptr->palette[png_ptr->background.index].red;
-         png_ptr->background.green =
-             png_ptr->palette[png_ptr->background.index].green;
-         png_ptr->background.blue  =
-             png_ptr->palette[png_ptr->background.index].blue;
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-        if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
-        {
-           if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
-           {
-              /* Invert the alpha channel (in tRNS) unless the pixels are
-               * going to be expanded, in which case leave it for later
-               */
-              int i, istop = png_ptr->num_trans;
-
-              for (i=0; i<istop; i++)
-                 png_ptr->trans_alpha[i] = (png_byte)(255 -
-                    png_ptr->trans_alpha[i]);
-           }
-        }
-#endif /* READ_INVERT_ALPHA */
-      }
-   } /* background expand and (therefore) no alpha association. */
-#endif /* READ_EXPAND && READ_BACKGROUND */
-}
-
-static void /* PRIVATE */
-png_init_rgb_transformations(png_structrp png_ptr)
-{
-   /* Added to libpng-1.5.4: check the color type to determine whether there
-    * is any alpha or transparency in the image and simply cancel the
-    * background and alpha mode stuff if there isn't.
-    */
-   int input_has_alpha = (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0;
-   int input_has_transparency = png_ptr->num_trans > 0;
-
-   /* If no alpha we can optimize. */
-   if (input_has_alpha == 0)
-   {
-      /* Any alpha means background and associative alpha processing is
-       * required, however if the alpha is 0 or 1 throughout OPTIMIZE_ALPHA
-       * and ENCODE_ALPHA are irrelevant.
-       */
-#     ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-         png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-         png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-#     endif
-
-      if (input_has_transparency == 0)
-         png_ptr->transformations &= ~(PNG_COMPOSE | PNG_BACKGROUND_EXPAND);
-   }
-
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* png_set_background handling - deals with the complexity of whether the
-    * background color is in the file format or the screen format in the case
-    * where an 'expand' will happen.
-    */
-
-   /* The following code cannot be entered in the alpha pre-multiplication case
-    * because PNG_BACKGROUND_EXPAND is cancelled below.
-    */
-   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0 &&
-       (png_ptr->transformations & PNG_EXPAND) != 0 &&
-       (png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
-       /* i.e., GRAY or GRAY_ALPHA */
-   {
-      {
-         /* Expand background and tRNS chunks */
-         int gray = png_ptr->background.gray;
-         int trans_gray = png_ptr->trans_color.gray;
-
-         switch (png_ptr->bit_depth)
-         {
-            case 1:
-               gray *= 0xff;
-               trans_gray *= 0xff;
-               break;
-
-            case 2:
-               gray *= 0x55;
-               trans_gray *= 0x55;
-               break;
-
-            case 4:
-               gray *= 0x11;
-               trans_gray *= 0x11;
-               break;
-
-            default:
-
-            case 8:
-               /* FALL THROUGH (Already 8 bits) */
-
-            case 16:
-               /* Already a full 16 bits */
-               break;
-         }
-
-         png_ptr->background.red = png_ptr->background.green =
-            png_ptr->background.blue = (png_uint_16)gray;
-
-         if ((png_ptr->transformations & PNG_EXPAND_tRNS) == 0)
-         {
-            png_ptr->trans_color.red = png_ptr->trans_color.green =
-               png_ptr->trans_color.blue = (png_uint_16)trans_gray;
-         }
-      }
-   } /* background expand and (therefore) no alpha association. */
-#endif /* READ_EXPAND && READ_BACKGROUND */
-}
-
-void /* PRIVATE */
-png_init_read_transformations(png_structrp png_ptr)
-{
-   png_debug(1, "in png_init_read_transformations");
-
-   /* This internal function is called from png_read_start_row in pngrutil.c
-    * and it is called before the 'rowbytes' calculation is done, so the code
-    * in here can change or update the transformations flags.
-    *
-    * First do updates that do not depend on the details of the PNG image data
-    * being processed.
-    */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   /* Prior to 1.5.4 these tests were performed from png_set_gamma, 1.5.4 adds
-    * png_set_alpha_mode and this is another source for a default file gamma so
-    * the test needs to be performed later - here.  In addition prior to 1.5.4
-    * the tests were repeated for the PALETTE color type here - this is no
-    * longer necessary (and doesn't seem to have been necessary before.)
-    */
-   {
-      /* The following temporary indicates if overall gamma correction is
-       * required.
-       */
-      int gamma_correction = 0;
-
-      if (png_ptr->colorspace.gamma != 0) /* has been set */
-      {
-         if (png_ptr->screen_gamma != 0) /* screen set too */
-            gamma_correction = png_gamma_threshold(png_ptr->colorspace.gamma,
-               png_ptr->screen_gamma);
-
-         else
-            /* Assume the output matches the input; a long time default behavior
-             * of libpng, although the standard has nothing to say about this.
-             */
-            png_ptr->screen_gamma = png_reciprocal(png_ptr->colorspace.gamma);
-      }
-
-      else if (png_ptr->screen_gamma != 0)
-         /* The converse - assume the file matches the screen, note that this
-          * perhaps undesireable default can (from 1.5.4) be changed by calling
-          * png_set_alpha_mode (even if the alpha handling mode isn't required
-          * or isn't changed from the default.)
-          */
-         png_ptr->colorspace.gamma = png_reciprocal(png_ptr->screen_gamma);
-
-      else /* neither are set */
-         /* Just in case the following prevents any processing - file and screen
-          * are both assumed to be linear and there is no way to introduce a
-          * third gamma value other than png_set_background with 'UNIQUE', and,
-          * prior to 1.5.4
-          */
-         png_ptr->screen_gamma = png_ptr->colorspace.gamma = PNG_FP_1;
-
-      /* We have a gamma value now. */
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
-
-      /* Now turn the gamma transformation on or off as appropriate.  Notice
-       * that PNG_GAMMA just refers to the file->screen correction.  Alpha
-       * composition may independently cause gamma correction because it needs
-       * linear data (e.g. if the file has a gAMA chunk but the screen gamma
-       * hasn't been specified.)  In any case this flag may get turned off in
-       * the code immediately below if the transform can be handled outside the
-       * row loop.
-       */
-      if (gamma_correction != 0)
-         png_ptr->transformations |= PNG_GAMMA;
-
-      else
-         png_ptr->transformations &= ~PNG_GAMMA;
-   }
-#endif
-
-   /* Certain transformations have the effect of preventing other
-    * transformations that happen afterward in png_do_read_transformations;
-    * resolve the interdependencies here.  From the code of
-    * png_do_read_transformations the order is:
-    *
-    *  1) PNG_EXPAND (including PNG_EXPAND_tRNS)
-    *  2) PNG_STRIP_ALPHA (if no compose)
-    *  3) PNG_RGB_TO_GRAY
-    *  4) PNG_GRAY_TO_RGB iff !PNG_BACKGROUND_IS_GRAY
-    *  5) PNG_COMPOSE
-    *  6) PNG_GAMMA
-    *  7) PNG_STRIP_ALPHA (if compose)
-    *  8) PNG_ENCODE_ALPHA
-    *  9) PNG_SCALE_16_TO_8
-    * 10) PNG_16_TO_8
-    * 11) PNG_QUANTIZE (converts to palette)
-    * 12) PNG_EXPAND_16
-    * 13) PNG_GRAY_TO_RGB iff PNG_BACKGROUND_IS_GRAY
-    * 14) PNG_INVERT_MONO
-    * 15) PNG_INVERT_ALPHA
-    * 16) PNG_SHIFT
-    * 17) PNG_PACK
-    * 18) PNG_BGR
-    * 19) PNG_PACKSWAP
-    * 20) PNG_FILLER (includes PNG_ADD_ALPHA)
-    * 21) PNG_SWAP_ALPHA
-    * 22) PNG_SWAP_BYTES
-    * 23) PNG_USER_TRANSFORM [must be last]
-    */
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
-       (png_ptr->transformations & PNG_COMPOSE) == 0)
-   {
-      /* Stripping the alpha channel happens immediately after the 'expand'
-       * transformations, before all other transformation, so it cancels out
-       * the alpha handling.  It has the side effect negating the effect of
-       * PNG_EXPAND_tRNS too:
-       */
-      png_ptr->transformations &= ~(PNG_BACKGROUND_EXPAND | PNG_ENCODE_ALPHA |
-         PNG_EXPAND_tRNS);
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-
-      /* Kill the tRNS chunk itself too.  Prior to 1.5.4 this did not happen
-       * so transparency information would remain just so long as it wasn't
-       * expanded.  This produces unexpected API changes if the set of things
-       * that do PNG_EXPAND_tRNS changes (perfectly possible given the
-       * documentation - which says ask for what you want, accept what you
-       * get.)  This makes the behavior consistent from 1.5.4:
-       */
-      png_ptr->num_trans = 0;
-   }
-#endif /* STRIP_ALPHA supported, no COMPOSE */
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-   /* If the screen gamma is about 1.0 then the OPTIMIZE_ALPHA and ENCODE_ALPHA
-    * settings will have no effect.
-    */
-   if (png_gamma_significant(png_ptr->screen_gamma) == 0)
-   {
-      png_ptr->transformations &= ~PNG_ENCODE_ALPHA;
-      png_ptr->flags &= ~PNG_FLAG_OPTIMIZE_ALPHA;
-   }
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   /* Make sure the coefficients for the rgb to gray conversion are set
-    * appropriately.
-    */
-   if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
-      png_colorspace_set_rgb_coefficients(png_ptr);
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
-   /* Detect gray background and attempt to enable optimization for
-    * gray --> RGB case.
-    *
-    * Note:  if PNG_BACKGROUND_EXPAND is set and color_type is either RGB or
-    * RGB_ALPHA (in which case need_expand is superfluous anyway), the
-    * background color might actually be gray yet not be flagged as such.
-    * This is not a problem for the current code, which uses
-    * PNG_BACKGROUND_IS_GRAY only to decide when to do the
-    * png_do_gray_to_rgb() transformation.
-    *
-    * TODO: this code needs to be revised to avoid the complexity and
-    * interdependencies.  The color type of the background should be recorded in
-    * png_set_background, along with the bit depth, then the code has a record
-    * of exactly what color space the background is currently in.
-    */
-   if ((png_ptr->transformations & PNG_BACKGROUND_EXPAND) != 0)
-   {
-      /* PNG_BACKGROUND_EXPAND: the background is in the file color space, so if
-       * the file was grayscale the background value is gray.
-       */
-      if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
-         png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
-   }
-
-   else if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-   {
-      /* PNG_COMPOSE: png_set_background was called with need_expand false,
-       * so the color is in the color space of the output or png_set_alpha_mode
-       * was called and the color is black.  Ignore RGB_TO_GRAY because that
-       * happens before GRAY_TO_RGB.
-       */
-      if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
-      {
-         if (png_ptr->background.red == png_ptr->background.green &&
-             png_ptr->background.red == png_ptr->background.blue)
-         {
-            png_ptr->mode |= PNG_BACKGROUND_IS_GRAY;
-            png_ptr->background.gray = png_ptr->background.red;
-         }
-      }
-   }
-#endif /* READ_EXPAND && READ_BACKGROUND */
-#endif /* READ_GRAY_TO_RGB */
-
-   /* For indexed PNG data (PNG_COLOR_TYPE_PALETTE) many of the transformations
-    * can be performed directly on the palette, and some (such as rgb to gray)
-    * can be optimized inside the palette.  This is particularly true of the
-    * composite (background and alpha) stuff, which can be pretty much all done
-    * in the palette even if the result is expanded to RGB or gray afterward.
-    *
-    * NOTE: this is Not Yet Implemented, the code behaves as in 1.5.1 and
-    * earlier and the palette stuff is actually handled on the first row.  This
-    * leads to the reported bug that the palette returned by png_get_PLTE is not
-    * updated.
-    */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      png_init_palette_transformations(png_ptr);
-
-   else
-      png_init_rgb_transformations(png_ptr);
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
-   defined(PNG_READ_EXPAND_16_SUPPORTED)
-   if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
-       (png_ptr->transformations & PNG_COMPOSE) != 0 &&
-       (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
-       png_ptr->bit_depth != 16)
-   {
-      /* TODO: fix this.  Because the expand_16 operation is after the compose
-       * handling the background color must be 8, not 16, bits deep, but the
-       * application will supply a 16-bit value so reduce it here.
-       *
-       * The PNG_BACKGROUND_EXPAND code above does not expand to 16 bits at
-       * present, so that case is ok (until do_expand_16 is moved.)
-       *
-       * NOTE: this discards the low 16 bits of the user supplied background
-       * color, but until expand_16 works properly there is no choice!
-       */
-#     define CHOP(x) (x)=((png_uint_16)PNG_DIV257(x))
-      CHOP(png_ptr->background.red);
-      CHOP(png_ptr->background.green);
-      CHOP(png_ptr->background.blue);
-      CHOP(png_ptr->background.gray);
-#     undef CHOP
-   }
-#endif /* READ_BACKGROUND && READ_EXPAND_16 */
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) && \
-   (defined(PNG_READ_SCALE_16_TO_8_SUPPORTED) || \
-   defined(PNG_READ_STRIP_16_TO_8_SUPPORTED))
-   if ((png_ptr->transformations & (PNG_16_TO_8|PNG_SCALE_16_TO_8)) != 0 &&
-       (png_ptr->transformations & PNG_COMPOSE) != 0 &&
-       (png_ptr->transformations & PNG_BACKGROUND_EXPAND) == 0 &&
-       png_ptr->bit_depth == 16)
-   {
-      /* On the other hand, if a 16-bit file is to be reduced to 8-bits per
-       * component this will also happen after PNG_COMPOSE and so the background
-       * color must be pre-expanded here.
-       *
-       * TODO: fix this too.
-       */
-      png_ptr->background.red = (png_uint_16)(png_ptr->background.red * 257);
-      png_ptr->background.green =
-         (png_uint_16)(png_ptr->background.green * 257);
-      png_ptr->background.blue = (png_uint_16)(png_ptr->background.blue * 257);
-      png_ptr->background.gray = (png_uint_16)(png_ptr->background.gray * 257);
-   }
-#endif
-
-   /* NOTE: below 'PNG_READ_ALPHA_MODE_SUPPORTED' is presumed to also enable the
-    * background support (see the comments in scripts/pnglibconf.dfa), this
-    * allows pre-multiplication of the alpha channel to be implemented as
-    * compositing on black.  This is probably sub-optimal and has been done in
-    * 1.5.4 betas simply to enable external critique and testing (i.e. to
-    * implement the new API quickly, without lots of internal changes.)
-    */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-#  ifdef PNG_READ_BACKGROUND_SUPPORTED
-      /* Includes ALPHA_MODE */
-      png_ptr->background_1 = png_ptr->background;
-#  endif
-
-   /* This needs to change - in the palette image case a whole set of tables are
-    * built when it would be quicker to just calculate the correct value for
-    * each palette entry directly.  Also, the test is too tricky - why check
-    * PNG_RGB_TO_GRAY if PNG_GAMMA is not set?  The answer seems to be that
-    * PNG_GAMMA is cancelled even if the gamma is known?  The test excludes the
-    * PNG_COMPOSE case, so apparently if there is no *overall* gamma correction
-    * the gamma tables will not be built even if composition is required on a
-    * gamma encoded value.
-    *
-    * In 1.5.4 this is addressed below by an additional check on the individual
-    * file gamma - if it is not 1.0 both RGB_TO_GRAY and COMPOSE need the
-    * tables.
-    */
-   if ((png_ptr->transformations & PNG_GAMMA) != 0 ||
-       ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0 &&
-        (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
-         png_gamma_significant(png_ptr->screen_gamma) != 0)) ||
-        ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
-         (png_gamma_significant(png_ptr->colorspace.gamma) != 0 ||
-          png_gamma_significant(png_ptr->screen_gamma) != 0
-#  ifdef PNG_READ_BACKGROUND_SUPPORTED
-         || (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_UNIQUE &&
-           png_gamma_significant(png_ptr->background_gamma) != 0)
-#  endif
-        )) || ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
-       png_gamma_significant(png_ptr->screen_gamma) != 0))
-   {
-      png_build_gamma_table(png_ptr, png_ptr->bit_depth);
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-      if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-      {
-         /* Issue a warning about this combination: because RGB_TO_GRAY is
-          * optimized to do the gamma transform if present yet do_background has
-          * to do the same thing if both options are set a
-          * double-gamma-correction happens.  This is true in all versions of
-          * libpng to date.
-          */
-         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
-            png_warning(png_ptr,
-               "libpng does not support gamma+background+rgb_to_gray");
-
-         if ((png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) != 0)
-         {
-            /* We don't get to here unless there is a tRNS chunk with non-opaque
-             * entries - see the checking code at the start of this function.
-             */
-            png_color back, back_1;
-            png_colorp palette = png_ptr->palette;
-            int num_palette = png_ptr->num_palette;
-            int i;
-            if (png_ptr->background_gamma_type == PNG_BACKGROUND_GAMMA_FILE)
-            {
-
-               back.red = png_ptr->gamma_table[png_ptr->background.red];
-               back.green = png_ptr->gamma_table[png_ptr->background.green];
-               back.blue = png_ptr->gamma_table[png_ptr->background.blue];
-
-               back_1.red = png_ptr->gamma_to_1[png_ptr->background.red];
-               back_1.green = png_ptr->gamma_to_1[png_ptr->background.green];
-               back_1.blue = png_ptr->gamma_to_1[png_ptr->background.blue];
-            }
-            else
-            {
-               png_fixed_point g, gs;
-
-               switch (png_ptr->background_gamma_type)
-               {
-                  case PNG_BACKGROUND_GAMMA_SCREEN:
-                     g = (png_ptr->screen_gamma);
-                     gs = PNG_FP_1;
-                     break;
-
-                  case PNG_BACKGROUND_GAMMA_FILE:
-                     g = png_reciprocal(png_ptr->colorspace.gamma);
-                     gs = png_reciprocal2(png_ptr->colorspace.gamma,
-                        png_ptr->screen_gamma);
-                     break;
-
-                  case PNG_BACKGROUND_GAMMA_UNIQUE:
-                     g = png_reciprocal(png_ptr->background_gamma);
-                     gs = png_reciprocal2(png_ptr->background_gamma,
-                        png_ptr->screen_gamma);
-                     break;
-                  default:
-                     g = PNG_FP_1;    /* back_1 */
-                     gs = PNG_FP_1;   /* back */
-                     break;
-               }
-
-               if (png_gamma_significant(gs) != 0)
-               {
-                  back.red = png_gamma_8bit_correct(png_ptr->background.red,
-                      gs);
-                  back.green = png_gamma_8bit_correct(png_ptr->background.green,
-                      gs);
-                  back.blue = png_gamma_8bit_correct(png_ptr->background.blue,
-                      gs);
-               }
-
-               else
-               {
-                  back.red   = (png_byte)png_ptr->background.red;
-                  back.green = (png_byte)png_ptr->background.green;
-                  back.blue  = (png_byte)png_ptr->background.blue;
-               }
-
-               if (png_gamma_significant(g) != 0)
-               {
-                  back_1.red = png_gamma_8bit_correct(png_ptr->background.red,
-                     g);
-                  back_1.green = png_gamma_8bit_correct(
-                     png_ptr->background.green, g);
-                  back_1.blue = png_gamma_8bit_correct(png_ptr->background.blue,
-                     g);
-               }
-
-               else
-               {
-                  back_1.red   = (png_byte)png_ptr->background.red;
-                  back_1.green = (png_byte)png_ptr->background.green;
-                  back_1.blue  = (png_byte)png_ptr->background.blue;
-               }
-            }
-
-            for (i = 0; i < num_palette; i++)
-            {
-               if (i < (int)png_ptr->num_trans &&
-                   png_ptr->trans_alpha[i] != 0xff)
-               {
-                  if (png_ptr->trans_alpha[i] == 0)
-                  {
-                     palette[i] = back;
-                  }
-                  else /* if (png_ptr->trans_alpha[i] != 0xff) */
-                  {
-                     png_byte v, w;
-
-                     v = png_ptr->gamma_to_1[palette[i].red];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.red);
-                     palette[i].red = png_ptr->gamma_from_1[w];
-
-                     v = png_ptr->gamma_to_1[palette[i].green];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.green);
-                     palette[i].green = png_ptr->gamma_from_1[w];
-
-                     v = png_ptr->gamma_to_1[palette[i].blue];
-                     png_composite(w, v, png_ptr->trans_alpha[i], back_1.blue);
-                     palette[i].blue = png_ptr->gamma_from_1[w];
-                  }
-               }
-               else
-               {
-                  palette[i].red = png_ptr->gamma_table[palette[i].red];
-                  palette[i].green = png_ptr->gamma_table[palette[i].green];
-                  palette[i].blue = png_ptr->gamma_table[palette[i].blue];
-               }
-            }
-
-            /* Prevent the transformations being done again.
-             *
-             * NOTE: this is highly dubious; it removes the transformations in
-             * place.  This seems inconsistent with the general treatment of the
-             * transformations elsewhere.
-             */
-            png_ptr->transformations &= ~(PNG_COMPOSE | PNG_GAMMA);
-         } /* color_type == PNG_COLOR_TYPE_PALETTE */
-
-         /* if (png_ptr->background_gamma_type!=PNG_BACKGROUND_GAMMA_UNKNOWN) */
-         else /* color_type != PNG_COLOR_TYPE_PALETTE */
-         {
-            int gs_sig, g_sig;
-            png_fixed_point g = PNG_FP_1;  /* Correction to linear */
-            png_fixed_point gs = PNG_FP_1; /* Correction to screen */
-
-            switch (png_ptr->background_gamma_type)
-            {
-               case PNG_BACKGROUND_GAMMA_SCREEN:
-                  g = png_ptr->screen_gamma;
-                  /* gs = PNG_FP_1; */
-                  break;
-
-               case PNG_BACKGROUND_GAMMA_FILE:
-                  g = png_reciprocal(png_ptr->colorspace.gamma);
-                  gs = png_reciprocal2(png_ptr->colorspace.gamma,
-                     png_ptr->screen_gamma);
-                  break;
-
-               case PNG_BACKGROUND_GAMMA_UNIQUE:
-                  g = png_reciprocal(png_ptr->background_gamma);
-                  gs = png_reciprocal2(png_ptr->background_gamma,
-                      png_ptr->screen_gamma);
-                  break;
-
-               default:
-                  png_error(png_ptr, "invalid background gamma type");
-            }
-
-            g_sig = png_gamma_significant(g);
-            gs_sig = png_gamma_significant(gs);
-
-            if (g_sig != 0)
-               png_ptr->background_1.gray = png_gamma_correct(png_ptr,
-                   png_ptr->background.gray, g);
-
-            if (gs_sig != 0)
-               png_ptr->background.gray = png_gamma_correct(png_ptr,
-                   png_ptr->background.gray, gs);
-
-            if ((png_ptr->background.red != png_ptr->background.green) ||
-                (png_ptr->background.red != png_ptr->background.blue) ||
-                (png_ptr->background.red != png_ptr->background.gray))
-            {
-               /* RGB or RGBA with color background */
-               if (g_sig != 0)
-               {
-                  png_ptr->background_1.red = png_gamma_correct(png_ptr,
-                      png_ptr->background.red, g);
-
-                  png_ptr->background_1.green = png_gamma_correct(png_ptr,
-                      png_ptr->background.green, g);
-
-                  png_ptr->background_1.blue = png_gamma_correct(png_ptr,
-                      png_ptr->background.blue, g);
-               }
-
-               if (gs_sig != 0)
-               {
-                  png_ptr->background.red = png_gamma_correct(png_ptr,
-                      png_ptr->background.red, gs);
-
-                  png_ptr->background.green = png_gamma_correct(png_ptr,
-                      png_ptr->background.green, gs);
-
-                  png_ptr->background.blue = png_gamma_correct(png_ptr,
-                      png_ptr->background.blue, gs);
-               }
-            }
-
-            else
-            {
-               /* GRAY, GRAY ALPHA, RGB, or RGBA with gray background */
-               png_ptr->background_1.red = png_ptr->background_1.green
-                   = png_ptr->background_1.blue = png_ptr->background_1.gray;
-
-               png_ptr->background.red = png_ptr->background.green
-                   = png_ptr->background.blue = png_ptr->background.gray;
-            }
-
-            /* The background is now in screen gamma: */
-            png_ptr->background_gamma_type = PNG_BACKGROUND_GAMMA_SCREEN;
-         } /* color_type != PNG_COLOR_TYPE_PALETTE */
-      }/* png_ptr->transformations & PNG_BACKGROUND */
-
-      else
-      /* Transformation does not include PNG_BACKGROUND */
-#endif /* READ_BACKGROUND */
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-         /* RGB_TO_GRAY needs to have non-gamma-corrected values! */
-         && ((png_ptr->transformations & PNG_EXPAND) == 0 ||
-         (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0)
-#endif
-         )
-      {
-         png_colorp palette = png_ptr->palette;
-         int num_palette = png_ptr->num_palette;
-         int i;
-
-         /* NOTE: there are other transformations that should probably be in
-          * here too.
-          */
-         for (i = 0; i < num_palette; i++)
-         {
-            palette[i].red = png_ptr->gamma_table[palette[i].red];
-            palette[i].green = png_ptr->gamma_table[palette[i].green];
-            palette[i].blue = png_ptr->gamma_table[palette[i].blue];
-         }
-
-         /* Done the gamma correction. */
-         png_ptr->transformations &= ~PNG_GAMMA;
-      } /* color_type == PALETTE && !PNG_BACKGROUND transformation */
-   }
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-   else
-#endif
-#endif /* READ_GAMMA */
-
-#ifdef PNG_READ_BACKGROUND_SUPPORTED
-   /* No GAMMA transformation (see the hanging else 4 lines above) */
-   if ((png_ptr->transformations & PNG_COMPOSE) != 0 &&
-       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
-   {
-      int i;
-      int istop = (int)png_ptr->num_trans;
-      png_color back;
-      png_colorp palette = png_ptr->palette;
-
-      back.red   = (png_byte)png_ptr->background.red;
-      back.green = (png_byte)png_ptr->background.green;
-      back.blue  = (png_byte)png_ptr->background.blue;
-
-      for (i = 0; i < istop; i++)
-      {
-         if (png_ptr->trans_alpha[i] == 0)
-         {
-            palette[i] = back;
-         }
-
-         else if (png_ptr->trans_alpha[i] != 0xff)
-         {
-            /* The png_composite() macro is defined in png.h */
-            png_composite(palette[i].red, palette[i].red,
-                png_ptr->trans_alpha[i], back.red);
-
-            png_composite(palette[i].green, palette[i].green,
-                png_ptr->trans_alpha[i], back.green);
-
-            png_composite(palette[i].blue, palette[i].blue,
-                png_ptr->trans_alpha[i], back.blue);
-         }
-      }
-
-      png_ptr->transformations &= ~PNG_COMPOSE;
-   }
-#endif /* READ_BACKGROUND */
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-   if ((png_ptr->transformations & PNG_SHIFT) != 0 &&
-       (png_ptr->transformations & PNG_EXPAND) == 0 &&
-       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE))
-   {
-      int i;
-      int istop = png_ptr->num_palette;
-      int shift = 8 - png_ptr->sig_bit.red;
-
-      png_ptr->transformations &= ~PNG_SHIFT;
-
-      /* significant bits can be in the range 1 to 7 for a meaninful result, if
-       * the number of significant bits is 0 then no shift is done (this is an
-       * error condition which is silently ignored.)
-       */
-      if (shift > 0 && shift < 8)
-         for (i=0; i<istop; ++i)
-         {
-            int component = png_ptr->palette[i].red;
-
-            component >>= shift;
-            png_ptr->palette[i].red = (png_byte)component;
-         }
-
-      shift = 8 - png_ptr->sig_bit.green;
-      if (shift > 0 && shift < 8)
-         for (i=0; i<istop; ++i)
-         {
-            int component = png_ptr->palette[i].green;
-
-            component >>= shift;
-            png_ptr->palette[i].green = (png_byte)component;
-         }
-
-      shift = 8 - png_ptr->sig_bit.blue;
-      if (shift > 0 && shift < 8)
-         for (i=0; i<istop; ++i)
-         {
-            int component = png_ptr->palette[i].blue;
-
-            component >>= shift;
-            png_ptr->palette[i].blue = (png_byte)component;
-         }
-   }
-#endif  /* READ_SHIFT */
-}
-
-/* Modify the info structure to reflect the transformations.  The
- * info should be updated so a PNG file could be written with it,
- * assuming the transformations result in valid PNG data.
- */
-void /* PRIVATE */
-png_read_transform_info(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_read_transform_info");
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if ((png_ptr->transformations & PNG_EXPAND) != 0)
-   {
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         /* This check must match what actually happens in
-          * png_do_expand_palette; if it ever checks the tRNS chunk to see if
-          * it is all opaque we must do the same (at present it does not.)
-          */
-         if (png_ptr->num_trans > 0)
-            info_ptr->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-
-         else
-            info_ptr->color_type = PNG_COLOR_TYPE_RGB;
-
-         info_ptr->bit_depth = 8;
-         info_ptr->num_trans = 0;
-
-         if (png_ptr->palette == NULL)
-            png_error (png_ptr, "Palette is NULL in indexed image");
-      }
-      else
-      {
-         if (png_ptr->num_trans != 0)
-         {
-            if ((png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
-               info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-         }
-         if (info_ptr->bit_depth < 8)
-            info_ptr->bit_depth = 8;
-
-         info_ptr->num_trans = 0;
-      }
-   }
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   /* The following is almost certainly wrong unless the background value is in
-    * the screen space!
-    */
-   if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-      info_ptr->background = png_ptr->background;
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   /* The following used to be conditional on PNG_GAMMA (prior to 1.5.4),
-    * however it seems that the code in png_init_read_transformations, which has
-    * been called before this from png_read_update_info->png_read_start_row
-    * sometimes does the gamma transform and cancels the flag.
-    *
-    * TODO: this looks wrong; the info_ptr should end up with a gamma equal to
-    * the screen_gamma value.  The following probably results in weirdness if
-    * the info_ptr is used by the app after the rows have been read.
-    */
-   info_ptr->colorspace.gamma = png_ptr->colorspace.gamma;
-#endif
-
-   if (info_ptr->bit_depth == 16)
-   {
-#  ifdef PNG_READ_16BIT_SUPPORTED
-#     ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-         if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
-            info_ptr->bit_depth = 8;
-#     endif
-
-#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-         if ((png_ptr->transformations & PNG_16_TO_8) != 0)
-            info_ptr->bit_depth = 8;
-#     endif
-
-#  else
-      /* No 16 bit support: force chopping 16-bit input down to 8, in this case
-       * the app program can chose if both APIs are available by setting the
-       * correct scaling to use.
-       */
-#     ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-         /* For compatibility with previous versions use the strip method by
-          * default.  This code works because if PNG_SCALE_16_TO_8 is already
-          * set the code below will do that in preference to the chop.
-          */
-         png_ptr->transformations |= PNG_16_TO_8;
-         info_ptr->bit_depth = 8;
-#     else
-
-#        ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-            png_ptr->transformations |= PNG_SCALE_16_TO_8;
-            info_ptr->bit_depth = 8;
-#        else
-
-            CONFIGURATION ERROR: you must enable at least one 16 to 8 method
-#        endif
-#    endif
-#endif /* !READ_16BIT */
-   }
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
-      info_ptr->color_type = (png_byte)(info_ptr->color_type |
-         PNG_COLOR_MASK_COLOR);
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
-      info_ptr->color_type = (png_byte)(info_ptr->color_type &
-         ~PNG_COLOR_MASK_COLOR);
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
-   {
-      if (((info_ptr->color_type == PNG_COLOR_TYPE_RGB) ||
-          (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)) &&
-          png_ptr->palette_lookup != 0 && info_ptr->bit_depth == 8)
-      {
-         info_ptr->color_type = PNG_COLOR_TYPE_PALETTE;
-      }
-   }
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   if ((png_ptr->transformations & PNG_EXPAND_16) != 0 &&
-       info_ptr->bit_depth == 8 &&
-       info_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      info_ptr->bit_depth = 16;
-   }
-#endif
-
-#ifdef PNG_READ_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) != 0 &&
-       (info_ptr->bit_depth < 8))
-      info_ptr->bit_depth = 8;
-#endif
-
-   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      info_ptr->channels = 1;
-
-   else if ((info_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-      info_ptr->channels = 3;
-
-   else
-      info_ptr->channels = 1;
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0)
-   {
-      info_ptr->color_type = (png_byte)(info_ptr->color_type &
-         ~PNG_COLOR_MASK_ALPHA);
-      info_ptr->num_trans = 0;
-   }
-#endif
-
-   if ((info_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      info_ptr->channels++;
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   /* STRIP_ALPHA and FILLER allowed:  MASK_ALPHA bit stripped above */
-   if ((png_ptr->transformations & PNG_FILLER) != 0 &&
-       (info_ptr->color_type == PNG_COLOR_TYPE_RGB ||
-       info_ptr->color_type == PNG_COLOR_TYPE_GRAY))
-   {
-      info_ptr->channels++;
-      /* If adding a true alpha channel not just filler */
-      if ((png_ptr->transformations & PNG_ADD_ALPHA) != 0)
-         info_ptr->color_type |= PNG_COLOR_MASK_ALPHA;
-   }
-#endif
-
-#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) && \
-defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
-   if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
-   {
-      if (info_ptr->bit_depth < png_ptr->user_transform_depth)
-         info_ptr->bit_depth = png_ptr->user_transform_depth;
-
-      if (info_ptr->channels < png_ptr->user_transform_channels)
-         info_ptr->channels = png_ptr->user_transform_channels;
-   }
-#endif
-
-   info_ptr->pixel_depth = (png_byte)(info_ptr->channels *
-       info_ptr->bit_depth);
-
-   info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, info_ptr->width);
-
-   /* Adding in 1.5.4: cache the above value in png_struct so that we can later
-    * check in png_rowbytes that the user buffer won't get overwritten.  Note
-    * that the field is not always set - if png_read_update_info isn't called
-    * the application has to either not do any transforms or get the calculation
-    * right itself.
-    */
-   png_ptr->info_rowbytes = info_ptr->rowbytes;
-
-#ifndef PNG_READ_EXPAND_SUPPORTED
-   if (png_ptr != NULL)
-      return;
-#endif
-}
-
-#ifdef PNG_READ_PACK_SUPPORTED
-/* Unpack pixels of 1, 2, or 4 bits per pixel into 1 byte per pixel,
- * without changing the actual values.  Thus, if you had a row with
- * a bit depth of 1, you would end up with bytes that only contained
- * the numbers 0 or 1.  If you would rather they contain 0 and 255, use
- * png_do_shift() after this.
- */
-static void
-png_do_unpack(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_unpack");
-
-   if (row_info->bit_depth < 8)
-   {
-      png_uint_32 i;
-      png_uint_32 row_width=row_info->width;
-
-      switch (row_info->bit_depth)
-      {
-         case 1:
-         {
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 3);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = 7 - (int)((row_width + 7) & 0x07);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x01);
-
-               if (shift == 7)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift++;
-
-               dp--;
-            }
-            break;
-         }
-
-         case 2:
-         {
-
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 2);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x03);
-
-               if (shift == 6)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift += 2;
-
-               dp--;
-            }
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp = row + (png_size_t)((row_width - 1) >> 1);
-            png_bytep dp = row + (png_size_t)row_width - 1;
-            png_uint_32 shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
-            for (i = 0; i < row_width; i++)
-            {
-               *dp = (png_byte)((*sp >> shift) & 0x0f);
-
-               if (shift == 4)
-               {
-                  shift = 0;
-                  sp--;
-               }
-
-               else
-                  shift = 4;
-
-               dp--;
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-/* Reverse the effects of png_do_shift.  This routine merely shifts the
- * pixels back to their significant bits values.  Thus, if you have
- * a row of bit depth 8, but only 5 are significant, this will shift
- * the values back to 0 through 31.
- */
-static void
-png_do_unshift(png_row_infop row_info, png_bytep row,
-    png_const_color_8p sig_bits)
-{
-   int color_type;
-
-   png_debug(1, "in png_do_unshift");
-
-   /* The palette case has already been handled in the _init routine. */
-   color_type = row_info->color_type;
-
-   if (color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      int shift[4];
-      int channels = 0;
-      int bit_depth = row_info->bit_depth;
-
-      if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
-      {
-         shift[channels++] = bit_depth - sig_bits->red;
-         shift[channels++] = bit_depth - sig_bits->green;
-         shift[channels++] = bit_depth - sig_bits->blue;
-      }
-
-      else
-      {
-         shift[channels++] = bit_depth - sig_bits->gray;
-      }
-
-      if ((color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      {
-         shift[channels++] = bit_depth - sig_bits->alpha;
-      }
-
-      {
-         int c, have_shift;
-
-         for (c = have_shift = 0; c < channels; ++c)
-         {
-            /* A shift of more than the bit depth is an error condition but it
-             * gets ignored here.
-             */
-            if (shift[c] <= 0 || shift[c] >= bit_depth)
-               shift[c] = 0;
-
-            else
-               have_shift = 1;
-         }
-
-         if (have_shift == 0)
-            return;
-      }
-
-      switch (bit_depth)
-      {
-         default:
-         /* Must be 1bpp gray: should not be here! */
-            /* NOTREACHED */
-            break;
-
-         case 2:
-         /* Must be 2bpp gray */
-         /* assert(channels == 1 && shift[0] == 1) */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-
-            while (bp < bp_end)
-            {
-               int b = (*bp >> 1) & 0x55;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-         case 4:
-         /* Must be 4bpp gray */
-         /* assert(channels == 1) */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int gray_shift = shift[0];
-            int mask =  0xf >> gray_shift;
-
-            mask |= mask << 4;
-
-            while (bp < bp_end)
-            {
-               int b = (*bp >> gray_shift) & mask;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-         case 8:
-         /* Single byte components, G, GA, RGB, RGBA */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int channel = 0;
-
-            while (bp < bp_end)
-            {
-               int b = *bp >> shift[channel];
-               if (++channel >= channels)
-                  channel = 0;
-               *bp++ = (png_byte)b;
-            }
-            break;
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         case 16:
-         /* Double byte components, G, GA, RGB, RGBA */
-         {
-            png_bytep bp = row;
-            png_bytep bp_end = bp + row_info->rowbytes;
-            int channel = 0;
-
-            while (bp < bp_end)
-            {
-               int value = (bp[0] << 8) + bp[1];
-
-               value >>= shift[channel];
-               if (++channel >= channels)
-                  channel = 0;
-               *bp++ = (png_byte)(value >> 8);
-               *bp++ = (png_byte)(value & 0xff);
-            }
-            break;
-         }
-#endif
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-/* Scale rows of bit depth 16 down to 8 accurately */
-static void
-png_do_scale_16_to_8(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_scale_16_to_8");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep sp = row; /* source */
-      png_bytep dp = row; /* destination */
-      png_bytep ep = sp + row_info->rowbytes; /* end+1 */
-
-      while (sp < ep)
-      {
-         /* The input is an array of 16 bit components, these must be scaled to
-          * 8 bits each.  For a 16 bit value V the required value (from the PNG
-          * specification) is:
-          *
-          *    (V * 255) / 65535
-          *
-          * This reduces to round(V / 257), or floor((V + 128.5)/257)
-          *
-          * Represent V as the two byte value vhi.vlo.  Make a guess that the
-          * result is the top byte of V, vhi, then the correction to this value
-          * is:
-          *
-          *    error = floor(((V-vhi.vhi) + 128.5) / 257)
-          *          = floor(((vlo-vhi) + 128.5) / 257)
-          *
-          * This can be approximated using integer arithmetic (and a signed
-          * shift):
-          *
-          *    error = (vlo-vhi+128) >> 8;
-          *
-          * The approximate differs from the exact answer only when (vlo-vhi) is
-          * 128; it then gives a correction of +1 when the exact correction is
-          * 0.  This gives 128 errors.  The exact answer (correct for all 16 bit
-          * input values) is:
-          *
-          *    error = (vlo-vhi+128)*65535 >> 24;
-          *
-          * An alternative arithmetic calculation which also gives no errors is:
-          *
-          *    (V * 255 + 32895) >> 16
-          */
-
-         png_int_32 tmp = *sp++; /* must be signed! */
-         tmp += (((int)*sp++ - tmp + 128) * 65535) >> 24;
-         *dp++ = (png_byte)tmp;
-      }
-
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_info->width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-static void
-/* Simply discard the low byte.  This was the default behavior prior
- * to libpng-1.5.4.
- */
-png_do_chop(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_chop");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep sp = row; /* source */
-      png_bytep dp = row; /* destination */
-      png_bytep ep = sp + row_info->rowbytes; /* end+1 */
-
-      while (sp < ep)
-      {
-         *dp++ = *sp;
-         sp += 2; /* skip low byte */
-      }
-
-      row_info->bit_depth = 8;
-      row_info->pixel_depth = (png_byte)(8 * row_info->channels);
-      row_info->rowbytes = row_info->width * row_info->channels;
-   }
-}
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-static void
-png_do_read_swap_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_read_swap_alpha");
-
-   {
-      png_uint_32 row_width = row_info->width;
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         /* This converts from RGBA to ARGB */
-         if (row_info->bit_depth == 8)
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save;
-            }
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         /* This converts from RRGGBBAA to AARRGGBB */
-         else
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save[2];
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save[0] = *(--sp);
-               save[1] = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save[0];
-               *(--dp) = save[1];
-            }
-         }
-#endif
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         /* This converts from GA to AG */
-         if (row_info->bit_depth == 8)
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save;
-            }
-         }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-         /* This converts from GGAA to AAGG */
-         else
-         {
-            png_bytep sp = row + row_info->rowbytes;
-            png_bytep dp = sp;
-            png_byte save[2];
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               save[0] = *(--sp);
-               save[1] = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = save[0];
-               *(--dp) = save[1];
-            }
-         }
-#endif
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-static void
-png_do_read_invert_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_uint_32 row_width;
-   png_debug(1, "in png_do_read_invert_alpha");
-
-   row_width = row_info->width;
-   if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         /* This inverts the alpha channel in RGBA */
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-
-/*          This does nothing:
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            We can replace it with:
-*/
-            sp-=3;
-            dp=sp;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      /* This inverts the alpha channel in RRGGBBAA */
-      else
-      {
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = (png_byte)(255 - *(--sp));
-
-/*          This does nothing:
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-            We can replace it with:
-*/
-            sp-=6;
-            dp=sp;
-         }
-      }
-#endif
-   }
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         /* This inverts the alpha channel in GA */
-         png_bytep sp = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = *(--sp);
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else
-      {
-         /* This inverts the alpha channel in GGAA */
-         png_bytep sp  = row + row_info->rowbytes;
-         png_bytep dp = sp;
-         png_uint_32 i;
-
-         for (i = 0; i < row_width; i++)
-         {
-            *(--dp) = (png_byte)(255 - *(--sp));
-            *(--dp) = (png_byte)(255 - *(--sp));
-/*
-            *(--dp) = *(--sp);
-            *(--dp) = *(--sp);
-*/
-            sp-=2;
-            dp=sp;
-         }
-      }
-#endif
-   }
-}
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-/* Add filler channel if we have RGB color */
-static void
-png_do_read_filler(png_row_infop row_info, png_bytep row,
-    png_uint_32 filler, png_uint_32 flags)
-{
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-   png_byte hi_filler = (png_byte)((filler>>8) & 0xff);
-#endif
-   png_byte lo_filler = (png_byte)(filler & 0xff);
-
-   png_debug(1, "in png_do_read_filler");
-
-   if (
-       row_info->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
-         {
-            /* This changes the data from G to GX */
-            png_bytep sp = row + (png_size_t)row_width;
-            png_bytep dp =  sp + (png_size_t)row_width;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = lo_filler;
-            row_info->channels = 2;
-            row_info->pixel_depth = 16;
-            row_info->rowbytes = row_width * 2;
-         }
-
-         else
-         {
-            /* This changes the data from G to XG */
-            png_bytep sp = row + (png_size_t)row_width;
-            png_bytep dp = sp  + (png_size_t)row_width;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 2;
-            row_info->pixel_depth = 16;
-            row_info->rowbytes = row_width * 2;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
-         {
-            /* This changes the data from GG to GGXX */
-            png_bytep sp = row + (png_size_t)row_width * 2;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = hi_filler;
-            *(--dp) = lo_filler;
-            row_info->channels = 2;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-
-         else
-         {
-            /* This changes the data from GG to XXGG */
-            png_bytep sp = row + (png_size_t)row_width * 2;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 2;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-      }
-#endif
-   } /* COLOR_TYPE == GRAY */
-   else if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
-         {
-            /* This changes the data from RGB to RGBX */
-            png_bytep sp = row + (png_size_t)row_width * 3;
-            png_bytep dp = sp  + (png_size_t)row_width;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = lo_filler;
-            row_info->channels = 4;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-
-         else
-         {
-            /* This changes the data from RGB to XRGB */
-            png_bytep sp = row + (png_size_t)row_width * 3;
-            png_bytep dp = sp + (png_size_t)row_width;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = lo_filler;
-            }
-            row_info->channels = 4;
-            row_info->pixel_depth = 32;
-            row_info->rowbytes = row_width * 4;
-         }
-      }
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if ((flags & PNG_FLAG_FILLER_AFTER) != 0)
-         {
-            /* This changes the data from RRGGBB to RRGGBBXX */
-            png_bytep sp = row + (png_size_t)row_width * 6;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 1; i < row_width; i++)
-            {
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-            }
-            *(--dp) = hi_filler;
-            *(--dp) = lo_filler;
-            row_info->channels = 4;
-            row_info->pixel_depth = 64;
-            row_info->rowbytes = row_width * 8;
-         }
-
-         else
-         {
-            /* This changes the data from RRGGBB to XXRRGGBB */
-            png_bytep sp = row + (png_size_t)row_width * 6;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = *(--sp);
-               *(--dp) = hi_filler;
-               *(--dp) = lo_filler;
-            }
-
-            row_info->channels = 4;
-            row_info->pixel_depth = 64;
-            row_info->rowbytes = row_width * 8;
-         }
-      }
-#endif
-   } /* COLOR_TYPE == RGB */
-}
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-/* Expand grayscale files to RGB, with or without alpha */
-static void
-png_do_gray_to_rgb(png_row_infop row_info, png_bytep row)
-{
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-
-   png_debug(1, "in png_do_gray_to_rgb");
-
-   if (row_info->bit_depth >= 8 &&
-       (row_info->color_type & PNG_COLOR_MASK_COLOR) == 0)
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This changes G to RGB */
-            png_bytep sp = row + (png_size_t)row_width - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *sp;
-               *(dp--) = *sp;
-               *(dp--) = *(sp--);
-            }
-         }
-
-         else
-         {
-            /* This changes GG to RRGGBB */
-            png_bytep sp = row + (png_size_t)row_width * 2 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 4;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-            }
-         }
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This changes GA to RGBA */
-            png_bytep sp = row + (png_size_t)row_width * 2 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 2;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *(sp--);
-               *(dp--) = *sp;
-               *(dp--) = *sp;
-               *(dp--) = *(sp--);
-            }
-         }
-
-         else
-         {
-            /* This changes GGAA to RRGGBBAA */
-            png_bytep sp = row + (png_size_t)row_width * 4 - 1;
-            png_bytep dp = sp  + (png_size_t)row_width * 4;
-            for (i = 0; i < row_width; i++)
-            {
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *sp;
-               *(dp--) = *(sp - 1);
-               *(dp--) = *(sp--);
-               *(dp--) = *(sp--);
-            }
-         }
-      }
-      row_info->channels = (png_byte)(row_info->channels + 2);
-      row_info->color_type |= PNG_COLOR_MASK_COLOR;
-      row_info->pixel_depth = (png_byte)(row_info->channels *
-          row_info->bit_depth);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-   }
-}
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-/* Reduce RGB files to grayscale, with or without alpha
- * using the equation given in Poynton's ColorFAQ of 1998-01-04 at
- * <http://www.inforamp.net/~poynton/>  (THIS LINK IS DEAD June 2008 but
- * versions dated 1998 through November 2002 have been archived at
- * http://web.archive.org/web/20000816232553/http://www.inforamp.net/
- * ~poynton/notes/colour_and_gamma/ColorFAQ.txt )
- * Charles Poynton poynton at poynton.com
- *
- *     Y = 0.212671 * R + 0.715160 * G + 0.072169 * B
- *
- *  which can be expressed with integers as
- *
- *     Y = (6969 * R + 23434 * G + 2365 * B)/32768
- *
- * Poynton's current link (as of January 2003 through July 2011):
- * <http://www.poynton.com/notes/colour_and_gamma/>
- * has changed the numbers slightly:
- *
- *     Y = 0.2126*R + 0.7152*G + 0.0722*B
- *
- *  which can be expressed with integers as
- *
- *     Y = (6966 * R + 23436 * G + 2366 * B)/32768
- *
- *  Historically, however, libpng uses numbers derived from the ITU-R Rec 709
- *  end point chromaticities and the D65 white point.  Depending on the
- *  precision used for the D65 white point this produces a variety of different
- *  numbers, however if the four decimal place value used in ITU-R Rec 709 is
- *  used (0.3127,0.3290) the Y calculation would be:
- *
- *     Y = (6968 * R + 23435 * G + 2366 * B)/32768
- *
- *  While this is correct the rounding results in an overflow for white, because
- *  the sum of the rounded coefficients is 32769, not 32768.  Consequently
- *  libpng uses, instead, the closest non-overflowing approximation:
- *
- *     Y = (6968 * R + 23434 * G + 2366 * B)/32768
- *
- *  Starting with libpng-1.5.5, if the image being converted has a cHRM chunk
- *  (including an sRGB chunk) then the chromaticities are used to calculate the
- *  coefficients.  See the chunk handling in pngrutil.c for more information.
- *
- *  In all cases the calculation is to be done in a linear colorspace.  If no
- *  gamma information is available to correct the encoding of the original RGB
- *  values this results in an implicit assumption that the original PNG RGB
- *  values were linear.
- *
- *  Other integer coefficents can be used via png_set_rgb_to_gray().  Because
- *  the API takes just red and green coefficients the blue coefficient is
- *  calculated to make the sum 32768.  This will result in different rounding
- *  to that used above.
- */
-static int
-png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
-
-{
-   int rgb_error = 0;
-
-   png_debug(1, "in png_do_rgb_to_gray");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_PALETTE) == 0 &&
-       (row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
-      PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
-      PNG_CONST png_uint_32 bc = 32768 - rc - gc;
-      PNG_CONST png_uint_32 row_width = row_info->width;
-      PNG_CONST int have_alpha =
-         (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
-
-      if (row_info->bit_depth == 8)
-      {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-         /* Notice that gamma to/from 1 are not necessarily inverses (if
-          * there is an overall gamma correction).  Prior to 1.5.5 this code
-          * checked the linearized values for equality; this doesn't match
-          * the documentation, the original values must be checked.
-          */
-         if (png_ptr->gamma_from_1 != NULL && png_ptr->gamma_to_1 != NULL)
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte red   = *(sp++);
-               png_byte green = *(sp++);
-               png_byte blue  = *(sp++);
-
-               if (red != green || red != blue)
-               {
-                  red = png_ptr->gamma_to_1[red];
-                  green = png_ptr->gamma_to_1[green];
-                  blue = png_ptr->gamma_to_1[blue];
-
-                  rgb_error |= 1;
-                  *(dp++) = png_ptr->gamma_from_1[
-                      (rc*red + gc*green + bc*blue + 16384)>>15];
-               }
-
-               else
-               {
-                  /* If there is no overall correction the table will not be
-                   * set.
-                   */
-                  if (png_ptr->gamma_table != NULL)
-                     red = png_ptr->gamma_table[red];
-
-                  *(dp++) = red;
-               }
-
-               if (have_alpha != 0)
-                  *(dp++) = *(sp++);
-            }
-         }
-         else
-#endif
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte red   = *(sp++);
-               png_byte green = *(sp++);
-               png_byte blue  = *(sp++);
-
-               if (red != green || red != blue)
-               {
-                  rgb_error |= 1;
-                  /* NOTE: this is the historical approach which simply
-                   * truncates the results.
-                   */
-                  *(dp++) = (png_byte)((rc*red + gc*green + bc*blue)>>15);
-               }
-
-               else
-                  *(dp++) = red;
-
-               if (have_alpha != 0)
-                  *(dp++) = *(sp++);
-            }
-         }
-      }
-
-      else /* RGB bit_depth == 16 */
-      {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-         if (png_ptr->gamma_16_to_1 != NULL && png_ptr->gamma_16_from_1 != NULL)
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_uint_16 red, green, blue, w;
-
-               red   = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-               green = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-               blue  = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-
-               if (red == green && red == blue)
-               {
-                  if (png_ptr->gamma_16_table != NULL)
-                     w = png_ptr->gamma_16_table[(red & 0xff)
-                         >> png_ptr->gamma_shift][red >> 8];
-
-                  else
-                     w = red;
-               }
-
-               else
-               {
-                  png_uint_16 red_1   = png_ptr->gamma_16_to_1[(red&0xff)
-                      >> png_ptr->gamma_shift][red>>8];
-                  png_uint_16 green_1 =
-                      png_ptr->gamma_16_to_1[(green&0xff) >>
-                      png_ptr->gamma_shift][green>>8];
-                  png_uint_16 blue_1  = png_ptr->gamma_16_to_1[(blue&0xff)
-                      >> png_ptr->gamma_shift][blue>>8];
-                  png_uint_16 gray16  = (png_uint_16)((rc*red_1 + gc*green_1
-                      + bc*blue_1 + 16384)>>15);
-                  w = png_ptr->gamma_16_from_1[(gray16&0xff) >>
-                      png_ptr->gamma_shift][gray16 >> 8];
-                  rgb_error |= 1;
-               }
-
-               *(dp++) = (png_byte)((w>>8) & 0xff);
-               *(dp++) = (png_byte)(w & 0xff);
-
-               if (have_alpha != 0)
-               {
-                  *(dp++) = *(sp++);
-                  *(dp++) = *(sp++);
-               }
-            }
-         }
-         else
-#endif
-         {
-            png_bytep sp = row;
-            png_bytep dp = row;
-            png_uint_32 i;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_uint_16 red, green, blue, gray16;
-
-               red   = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-               green = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-               blue  = (png_uint_16)(((*(sp)) << 8) | *(sp + 1)); sp += 2;
-
-               if (red != green || red != blue)
-                  rgb_error |= 1;
-
-               /* From 1.5.5 in the 16 bit case do the accurate conversion even
-                * in the 'fast' case - this is because this is where the code
-                * ends up when handling linear 16 bit data.
-                */
-               gray16  = (png_uint_16)((rc*red + gc*green + bc*blue + 16384) >>
-                  15);
-               *(dp++) = (png_byte)((gray16 >> 8) & 0xff);
-               *(dp++) = (png_byte)(gray16 & 0xff);
-
-               if (have_alpha != 0)
-               {
-                  *(dp++) = *(sp++);
-                  *(dp++) = *(sp++);
-               }
-            }
-         }
-      }
-
-      row_info->channels = (png_byte)(row_info->channels - 2);
-      row_info->color_type = (png_byte)(row_info->color_type &
-          ~PNG_COLOR_MASK_COLOR);
-      row_info->pixel_depth = (png_byte)(row_info->channels *
-          row_info->bit_depth);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-   }
-   return rgb_error;
-}
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-/* Replace any alpha or transparency with the supplied background color.
- * "background" is already in the screen gamma, while "background_1" is
- * at a gamma of 1.0.  Paletted files have already been taken care of.
- */
-static void
-png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_const_bytep gamma_table = png_ptr->gamma_table;
-   png_const_bytep gamma_from_1 = png_ptr->gamma_from_1;
-   png_const_bytep gamma_to_1 = png_ptr->gamma_to_1;
-   png_const_uint_16pp gamma_16 = png_ptr->gamma_16_table;
-   png_const_uint_16pp gamma_16_from_1 = png_ptr->gamma_16_from_1;
-   png_const_uint_16pp gamma_16_to_1 = png_ptr->gamma_16_to_1;
-   int gamma_shift = png_ptr->gamma_shift;
-   int optimize = (png_ptr->flags & PNG_FLAG_OPTIMIZE_ALPHA) != 0;
-#endif
-
-   png_bytep sp;
-   png_uint_32 i;
-   png_uint_32 row_width = row_info->width;
-   int shift;
-
-   png_debug(1, "in png_do_compose");
-
-   {
-      switch (row_info->color_type)
-      {
-         case PNG_COLOR_TYPE_GRAY:
-         {
-            switch (row_info->bit_depth)
-            {
-               case 1:
-               {
-                  sp = row;
-                  shift = 7;
-                  for (i = 0; i < row_width; i++)
-                  {
-                     if ((png_uint_16)((*sp >> shift) & 0x01)
-                        == png_ptr->trans_color.gray)
-                     {
-                        unsigned int tmp = *sp & (0x7f7f >> (7 - shift));
-                        tmp |= png_ptr->background.gray << shift;
-                        *sp = (png_byte)(tmp & 0xff);
-                     }
-
-                     if (shift == 0)
-                     {
-                        shift = 7;
-                        sp++;
-                     }
-
-                     else
-                        shift--;
-                  }
-                  break;
-               }
-
-               case 2:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     shift = 6;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x03)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        else
-                        {
-                           unsigned int p = (*sp >> shift) & 0x03;
-                           unsigned int g = (gamma_table [p | (p << 2) |
-                               (p << 4) | (p << 6)] >> 6) & 0x03;
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= g << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (shift == 0)
-                        {
-                           shift = 6;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 2;
-                     }
-                  }
-
-                  else
-#endif
-                  {
-                     sp = row;
-                     shift = 6;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x03)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0x3f3f >> (6 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (shift == 0)
-                        {
-                           shift = 6;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 2;
-                     }
-                  }
-                  break;
-               }
-
-               case 4:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     shift = 4;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x0f)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        else
-                        {
-                           unsigned int p = (*sp >> shift) & 0x0f;
-                           unsigned int g = (gamma_table[p | (p << 4)] >> 4) &
-                              0x0f;
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= g << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (shift == 0)
-                        {
-                           shift = 4;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 4;
-                     }
-                  }
-
-                  else
-#endif
-                  {
-                     sp = row;
-                     shift = 4;
-                     for (i = 0; i < row_width; i++)
-                     {
-                        if ((png_uint_16)((*sp >> shift) & 0x0f)
-                            == png_ptr->trans_color.gray)
-                        {
-                           unsigned int tmp = *sp & (0xf0f >> (4 - shift));
-                           tmp |= png_ptr->background.gray << shift;
-                           *sp = (png_byte)(tmp & 0xff);
-                        }
-
-                        if (shift == 0)
-                        {
-                           shift = 4;
-                           sp++;
-                        }
-
-                        else
-                           shift -= 4;
-                     }
-                  }
-                  break;
-               }
-
-               case 8:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_table != NULL)
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp++)
-                     {
-                        if (*sp == png_ptr->trans_color.gray)
-                           *sp = (png_byte)png_ptr->background.gray;
-
-                        else
-                           *sp = gamma_table[*sp];
-                     }
-                  }
-                  else
-#endif
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp++)
-                     {
-                        if (*sp == png_ptr->trans_color.gray)
-                           *sp = (png_byte)png_ptr->background.gray;
-                     }
-                  }
-                  break;
-               }
-
-               case 16:
-               {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-                  if (gamma_16 != NULL)
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp += 2)
-                     {
-                        png_uint_16 v;
-
-                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                        if (v == png_ptr->trans_color.gray)
-                        {
-                           /* Background is already in screen gamma */
-                           *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                           *(sp + 1) = (png_byte)(png_ptr->background.gray
-                                & 0xff);
-                        }
-
-                        else
-                        {
-                           v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                           *sp = (png_byte)((v >> 8) & 0xff);
-                           *(sp + 1) = (png_byte)(v & 0xff);
-                        }
-                     }
-                  }
-                  else
-#endif
-                  {
-                     sp = row;
-                     for (i = 0; i < row_width; i++, sp += 2)
-                     {
-                        png_uint_16 v;
-
-                        v = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                        if (v == png_ptr->trans_color.gray)
-                        {
-                           *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                           *(sp + 1) = (png_byte)(png_ptr->background.gray
-                                & 0xff);
-                        }
-                     }
-                  }
-                  break;
-               }
-
-               default:
-                  break;
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 3)
-                  {
-                     if (*sp == png_ptr->trans_color.red &&
-                         *(sp + 1) == png_ptr->trans_color.green &&
-                         *(sp + 2) == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else
-                     {
-                        *sp = gamma_table[*sp];
-                        *(sp + 1) = gamma_table[*(sp + 1)];
-                        *(sp + 2) = gamma_table[*(sp + 2)];
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 3)
-                  {
-                     if (*sp == png_ptr->trans_color.red &&
-                         *(sp + 1) == png_ptr->trans_color.green &&
-                         *(sp + 2) == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-                  }
-               }
-            }
-            else /* if (row_info->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 6)
-                  {
-                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                         + *(sp + 5));
-
-                     if (r == png_ptr->trans_color.red &&
-                         g == png_ptr->trans_color.green &&
-                         b == png_ptr->trans_color.blue)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 6)
-                  {
-                     png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-
-                     png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                         + *(sp + 5));
-
-                     if (r == png_ptr->trans_color.red &&
-                         g == png_ptr->trans_color.green &&
-                         b == png_ptr->trans_color.blue)
-                     {
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
-                   gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 2)
-                  {
-                     png_uint_16 a = *(sp + 1);
-
-                     if (a == 0xff)
-                        *sp = gamma_table[*sp];
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)png_ptr->background.gray;
-                     }
-
-                     else
-                     {
-                        png_byte v, w;
-
-                        v = gamma_to_1[*sp];
-                        png_composite(w, v, a, png_ptr->background_1.gray);
-                        if (optimize == 0)
-                           w = gamma_from_1[w];
-                        *sp = w;
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 2)
-                  {
-                     png_byte a = *(sp + 1);
-
-                     if (a == 0)
-                        *sp = (png_byte)png_ptr->background.gray;
-
-                     else if (a < 0xff)
-                        png_composite(*sp, *sp, a, png_ptr->background.gray);
-                  }
-               }
-            }
-            else /* if (png_ptr->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
-                   gamma_16_to_1 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     if (a == (png_uint_16)0xffff)
-                     {
-                        png_uint_16 v;
-
-                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 g, v, w;
-
-                        g = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
-                        png_composite_16(v, g, a, png_ptr->background_1.gray);
-                        if (optimize != 0)
-                           w = v;
-                        else
-                           w = gamma_16_from_1[(v&0xff) >> gamma_shift][v >> 8];
-                        *sp = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(w & 0xff);
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_uint_16 a = (png_uint_16)(((*(sp + 2)) << 8)
-                         + *(sp + 3));
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)((png_ptr->background.gray >> 8)
-                                & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.gray & 0xff);
-                     }
-
-                     else if (a < 0xffff)
-                     {
-                        png_uint_16 g, v;
-
-                        g = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-                        png_composite_16(v, g, a, png_ptr->background.gray);
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_to_1 != NULL && gamma_from_1 != NULL &&
-                   gamma_table != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_byte a = *(sp + 3);
-
-                     if (a == 0xff)
-                     {
-                        *sp = gamma_table[*sp];
-                        *(sp + 1) = gamma_table[*(sp + 1)];
-                        *(sp + 2) = gamma_table[*(sp + 2)];
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else
-                     {
-                        png_byte v, w;
-
-                        v = gamma_to_1[*sp];
-                        png_composite(w, v, a, png_ptr->background_1.red);
-                        if (optimize == 0) w = gamma_from_1[w];
-                        *sp = w;
-
-                        v = gamma_to_1[*(sp + 1)];
-                        png_composite(w, v, a, png_ptr->background_1.green);
-                        if (optimize == 0) w = gamma_from_1[w];
-                        *(sp + 1) = w;
-
-                        v = gamma_to_1[*(sp + 2)];
-                        png_composite(w, v, a, png_ptr->background_1.blue);
-                        if (optimize == 0) w = gamma_from_1[w];
-                        *(sp + 2) = w;
-                     }
-                  }
-               }
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 4)
-                  {
-                     png_byte a = *(sp + 3);
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)png_ptr->background.red;
-                        *(sp + 1) = (png_byte)png_ptr->background.green;
-                        *(sp + 2) = (png_byte)png_ptr->background.blue;
-                     }
-
-                     else if (a < 0xff)
-                     {
-                        png_composite(*sp, *sp, a, png_ptr->background.red);
-
-                        png_composite(*(sp + 1), *(sp + 1), a,
-                            png_ptr->background.green);
-
-                        png_composite(*(sp + 2), *(sp + 2), a,
-                            png_ptr->background.blue);
-                     }
-                  }
-               }
-            }
-            else /* if (row_info->bit_depth == 16) */
-            {
-#ifdef PNG_READ_GAMMA_SUPPORTED
-               if (gamma_16 != NULL && gamma_16_from_1 != NULL &&
-                   gamma_16_to_1 != NULL)
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 8)
-                  {
-                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
-                         << 8) + (png_uint_16)(*(sp + 7)));
-
-                     if (a == (png_uint_16)0xffff)
-                     {
-                        png_uint_16 v;
-
-                        v = gamma_16[*(sp + 1) >> gamma_shift][*sp];
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        v = gamma_16[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-
-                     else if (a == 0)
-                     {
-                        /* Background is already in screen gamma */
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else
-                     {
-                        png_uint_16 v, w;
-
-                        v = gamma_16_to_1[*(sp + 1) >> gamma_shift][*sp];
-                        png_composite_16(w, v, a, png_ptr->background_1.red);
-                        if (optimize == 0)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-                        *sp = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(w & 0xff);
-
-                        v = gamma_16_to_1[*(sp + 3) >> gamma_shift][*(sp + 2)];
-                        png_composite_16(w, v, a, png_ptr->background_1.green);
-                        if (optimize == 0)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-
-                        *(sp + 2) = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(w & 0xff);
-
-                        v = gamma_16_to_1[*(sp + 5) >> gamma_shift][*(sp + 4)];
-                        png_composite_16(w, v, a, png_ptr->background_1.blue);
-                        if (optimize == 0)
-                           w = gamma_16_from_1[((w&0xff) >> gamma_shift)][w >>
-                                8];
-
-                        *(sp + 4) = (png_byte)((w >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(w & 0xff);
-                     }
-                  }
-               }
-
-               else
-#endif
-               {
-                  sp = row;
-                  for (i = 0; i < row_width; i++, sp += 8)
-                  {
-                     png_uint_16 a = (png_uint_16)(((png_uint_16)(*(sp + 6))
-                         << 8) + (png_uint_16)(*(sp + 7)));
-
-                     if (a == 0)
-                     {
-                        *sp = (png_byte)((png_ptr->background.red >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(png_ptr->background.red & 0xff);
-                        *(sp + 2) = (png_byte)((png_ptr->background.green >> 8)
-                                & 0xff);
-                        *(sp + 3) = (png_byte)(png_ptr->background.green
-                                & 0xff);
-                        *(sp + 4) = (png_byte)((png_ptr->background.blue >> 8)
-                                & 0xff);
-                        *(sp + 5) = (png_byte)(png_ptr->background.blue & 0xff);
-                     }
-
-                     else if (a < 0xffff)
-                     {
-                        png_uint_16 v;
-
-                        png_uint_16 r = (png_uint_16)(((*sp) << 8) + *(sp + 1));
-                        png_uint_16 g = (png_uint_16)(((*(sp + 2)) << 8)
-                            + *(sp + 3));
-                        png_uint_16 b = (png_uint_16)(((*(sp + 4)) << 8)
-                            + *(sp + 5));
-
-                        png_composite_16(v, r, a, png_ptr->background.red);
-                        *sp = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 1) = (png_byte)(v & 0xff);
-
-                        png_composite_16(v, g, a, png_ptr->background.green);
-                        *(sp + 2) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 3) = (png_byte)(v & 0xff);
-
-                        png_composite_16(v, b, a, png_ptr->background.blue);
-                        *(sp + 4) = (png_byte)((v >> 8) & 0xff);
-                        *(sp + 5) = (png_byte)(v & 0xff);
-                     }
-                  }
-               }
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE */
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-/* Gamma correct the image, avoiding the alpha channel.  Make sure
- * you do this after you deal with the transparency issue on grayscale
- * or RGB images. If your bit depth is 8, use gamma_table, if it
- * is 16, use gamma_16_table and gamma_shift.  Build these with
- * build_gamma_table().
- */
-static void
-png_do_gamma(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-   png_const_bytep gamma_table = png_ptr->gamma_table;
-   png_const_uint_16pp gamma_16_table = png_ptr->gamma_16_table;
-   int gamma_shift = png_ptr->gamma_shift;
-
-   png_bytep sp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_gamma");
-
-   if (((row_info->bit_depth <= 8 && gamma_table != NULL) ||
-       (row_info->bit_depth == 16 && gamma_16_table != NULL)))
-   {
-      switch (row_info->color_type)
-      {
-         case PNG_COLOR_TYPE_RGB:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-                  *sp = gamma_table[*sp];
-                  sp++;
-                  *sp = gamma_table[*sp];
-                  sp++;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_RGB_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  *sp = gamma_table[*sp];
-                  sp++;
-
-                  sp++;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-
-                  v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 4;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY_ALPHA:
-         {
-            if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp += 2;
-               }
-            }
-
-            else /* if (row_info->bit_depth == 16) */
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 4;
-               }
-            }
-            break;
-         }
-
-         case PNG_COLOR_TYPE_GRAY:
-         {
-            if (row_info->bit_depth == 2)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i += 4)
-               {
-                  int a = *sp & 0xc0;
-                  int b = *sp & 0x30;
-                  int c = *sp & 0x0c;
-                  int d = *sp & 0x03;
-
-                  *sp = (png_byte)(
-                      ((((int)gamma_table[a|(a>>2)|(a>>4)|(a>>6)])   ) & 0xc0)|
-                      ((((int)gamma_table[(b<<2)|b|(b>>2)|(b>>4)])>>2) & 0x30)|
-                      ((((int)gamma_table[(c<<4)|(c<<2)|c|(c>>2)])>>4) & 0x0c)|
-                      ((((int)gamma_table[(d<<6)|(d<<4)|(d<<2)|d])>>6) ));
-                  sp++;
-               }
-            }
-
-            if (row_info->bit_depth == 4)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i += 2)
-               {
-                  int msb = *sp & 0xf0;
-                  int lsb = *sp & 0x0f;
-
-                  *sp = (png_byte)((((int)gamma_table[msb | (msb >> 4)]) & 0xf0)
-                      | (((int)gamma_table[(lsb << 4) | lsb]) >> 4));
-                  sp++;
-               }
-            }
-
-            else if (row_info->bit_depth == 8)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  *sp = gamma_table[*sp];
-                  sp++;
-               }
-            }
-
-            else if (row_info->bit_depth == 16)
-            {
-               sp = row;
-               for (i = 0; i < row_width; i++)
-               {
-                  png_uint_16 v = gamma_16_table[*(sp + 1) >> gamma_shift][*sp];
-                  *sp = (png_byte)((v >> 8) & 0xff);
-                  *(sp + 1) = (png_byte)(v & 0xff);
-                  sp += 2;
-               }
-            }
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-/* Encode the alpha channel to the output gamma (the input channel is always
- * linear.)  Called only with color types that have an alpha channel.  Needs the
- * from_1 tables.
- */
-static void
-png_do_encode_alpha(png_row_infop row_info, png_bytep row, png_structrp png_ptr)
-{
-   png_uint_32 row_width = row_info->width;
-
-   png_debug(1, "in png_do_encode_alpha");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         PNG_CONST png_bytep table = png_ptr->gamma_from_1;
-
-         if (table != NULL)
-         {
-            PNG_CONST int step =
-               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
-
-            /* The alpha channel is the last component: */
-            row += step - 1;
-
-            for (; row_width > 0; --row_width, row += step)
-               *row = table[*row];
-
-            return;
-         }
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
-         PNG_CONST int gamma_shift = png_ptr->gamma_shift;
-
-         if (table != NULL)
-         {
-            PNG_CONST int step =
-               (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
-
-            /* The alpha channel is the last component: */
-            row += step - 2;
-
-            for (; row_width > 0; --row_width, row += step)
-            {
-               png_uint_16 v;
-
-               v = table[*(row + 1) >> gamma_shift][*row];
-               *row = (png_byte)((v >> 8) & 0xff);
-               *(row + 1) = (png_byte)(v & 0xff);
-            }
-
-            return;
-         }
-      }
-   }
-
-   /* Only get to here if called with a weird row_info; no harm has been done,
-    * so just issue a warning.
-    */
-   png_warning(png_ptr, "png_do_encode_alpha: unexpected call");
-}
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-/* Expands a palette row to an RGB or RGBA row depending
- * upon whether you supply trans and num_trans.
- */
-static void
-png_do_expand_palette(png_row_infop row_info, png_bytep row,
-   png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
-{
-   int shift, value;
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_expand_palette");
-
-   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (row_info->bit_depth < 8)
-      {
-         switch (row_info->bit_depth)
-         {
-            case 1:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 3);
-               dp = row + (png_size_t)row_width - 1;
-               shift = 7 - (int)((row_width + 7) & 0x07);
-               for (i = 0; i < row_width; i++)
-               {
-                  if ((*sp >> shift) & 0x01)
-                     *dp = 1;
-
-                  else
-                     *dp = 0;
-
-                  if (shift == 7)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift++;
-
-                  dp--;
-               }
-               break;
-            }
-
-            case 2:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 2);
-               dp = row + (png_size_t)row_width - 1;
-               shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-               for (i = 0; i < row_width; i++)
-               {
-                  value = (*sp >> shift) & 0x03;
-                  *dp = (png_byte)value;
-                  if (shift == 6)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift += 2;
-
-                  dp--;
-               }
-               break;
-            }
-
-            case 4:
-            {
-               sp = row + (png_size_t)((row_width - 1) >> 1);
-               dp = row + (png_size_t)row_width - 1;
-               shift = (int)((row_width & 0x01) << 2);
-               for (i = 0; i < row_width; i++)
-               {
-                  value = (*sp >> shift) & 0x0f;
-                  *dp = (png_byte)value;
-                  if (shift == 4)
-                  {
-                     shift = 0;
-                     sp--;
-                  }
-
-                  else
-                     shift += 4;
-
-                  dp--;
-               }
-               break;
-            }
-
-            default:
-               break;
-         }
-         row_info->bit_depth = 8;
-         row_info->pixel_depth = 8;
-         row_info->rowbytes = row_width;
-      }
-
-      if (row_info->bit_depth == 8)
-      {
-         {
-            if (num_trans > 0)
-            {
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width << 2) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  if ((int)(*sp) >= num_trans)
-                     *dp-- = 0xff;
-
-                  else
-                     *dp-- = trans_alpha[*sp];
-
-                  *dp-- = palette[*sp].blue;
-                  *dp-- = palette[*sp].green;
-                  *dp-- = palette[*sp].red;
-                  sp--;
-               }
-               row_info->bit_depth = 8;
-               row_info->pixel_depth = 32;
-               row_info->rowbytes = row_width * 4;
-               row_info->color_type = 6;
-               row_info->channels = 4;
-            }
-
-            else
-            {
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width * 3) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  *dp-- = palette[*sp].blue;
-                  *dp-- = palette[*sp].green;
-                  *dp-- = palette[*sp].red;
-                  sp--;
-               }
-
-               row_info->bit_depth = 8;
-               row_info->pixel_depth = 24;
-               row_info->rowbytes = row_width * 3;
-               row_info->color_type = 2;
-               row_info->channels = 3;
-            }
-         }
-      }
-   }
-}
-
-/* If the bit depth < 8, it is expanded to 8.  Also, if the already
- * expanded transparency value is supplied, an alpha channel is built.
- */
-static void
-png_do_expand(png_row_infop row_info, png_bytep row,
-    png_const_color_16p trans_color)
-{
-   int shift, value;
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_expand");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         unsigned int gray = trans_color != NULL ? trans_color->gray : 0;
-
-         if (row_info->bit_depth < 8)
-         {
-            switch (row_info->bit_depth)
-            {
-               case 1:
-               {
-                  gray = (gray & 0x01) * 0xff;
-                  sp = row + (png_size_t)((row_width - 1) >> 3);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = 7 - (int)((row_width + 7) & 0x07);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     if ((*sp >> shift) & 0x01)
-                        *dp = 0xff;
-
-                     else
-                        *dp = 0;
-
-                     if (shift == 7)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift++;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               case 2:
-               {
-                  gray = (gray & 0x03) * 0x55;
-                  sp = row + (png_size_t)((row_width - 1) >> 2);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = (int)((3 - ((row_width + 3) & 0x03)) << 1);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     value = (*sp >> shift) & 0x03;
-                     *dp = (png_byte)(value | (value << 2) | (value << 4) |
-                        (value << 6));
-                     if (shift == 6)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift += 2;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               case 4:
-               {
-                  gray = (gray & 0x0f) * 0x11;
-                  sp = row + (png_size_t)((row_width - 1) >> 1);
-                  dp = row + (png_size_t)row_width - 1;
-                  shift = (int)((1 - ((row_width + 1) & 0x01)) << 2);
-                  for (i = 0; i < row_width; i++)
-                  {
-                     value = (*sp >> shift) & 0x0f;
-                     *dp = (png_byte)(value | (value << 4));
-                     if (shift == 4)
-                     {
-                        shift = 0;
-                        sp--;
-                     }
-
-                     else
-                        shift = 4;
-
-                     dp--;
-                  }
-                  break;
-               }
-
-               default:
-                  break;
-            }
-
-            row_info->bit_depth = 8;
-            row_info->pixel_depth = 8;
-            row_info->rowbytes = row_width;
-         }
-
-         if (trans_color != NULL)
-         {
-            if (row_info->bit_depth == 8)
-            {
-               gray = gray & 0xff;
-               sp = row + (png_size_t)row_width - 1;
-               dp = row + (png_size_t)(row_width << 1) - 1;
-
-               for (i = 0; i < row_width; i++)
-               {
-                  if (*sp == gray)
-                     *dp-- = 0;
-
-                  else
-                     *dp-- = 0xff;
-
-                  *dp-- = *sp--;
-               }
-            }
-
-            else if (row_info->bit_depth == 16)
-            {
-               unsigned int gray_high = (gray >> 8) & 0xff;
-               unsigned int gray_low = gray & 0xff;
-               sp = row + row_info->rowbytes - 1;
-               dp = row + (row_info->rowbytes << 1) - 1;
-               for (i = 0; i < row_width; i++)
-               {
-                  if (*(sp - 1) == gray_high && *(sp) == gray_low)
-                  {
-                     *dp-- = 0;
-                     *dp-- = 0;
-                  }
-
-                  else
-                  {
-                     *dp-- = 0xff;
-                     *dp-- = 0xff;
-                  }
-
-                  *dp-- = *sp--;
-                  *dp-- = *sp--;
-               }
-            }
-
-            row_info->color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
-            row_info->channels = 2;
-            row_info->pixel_depth = (png_byte)(row_info->bit_depth << 1);
-            row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-               row_width);
-         }
-      }
-      else if (row_info->color_type == PNG_COLOR_TYPE_RGB &&
-          trans_color != NULL)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            png_byte red = (png_byte)(trans_color->red & 0xff);
-            png_byte green = (png_byte)(trans_color->green & 0xff);
-            png_byte blue = (png_byte)(trans_color->blue & 0xff);
-            sp = row + (png_size_t)row_info->rowbytes - 1;
-            dp = row + (png_size_t)(row_width << 2) - 1;
-            for (i = 0; i < row_width; i++)
-            {
-               if (*(sp - 2) == red && *(sp - 1) == green && *(sp) == blue)
-                  *dp-- = 0;
-
-               else
-                  *dp-- = 0xff;
-
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-            }
-         }
-         else if (row_info->bit_depth == 16)
-         {
-            png_byte red_high = (png_byte)((trans_color->red >> 8) & 0xff);
-            png_byte green_high = (png_byte)((trans_color->green >> 8) & 0xff);
-            png_byte blue_high = (png_byte)((trans_color->blue >> 8) & 0xff);
-            png_byte red_low = (png_byte)(trans_color->red & 0xff);
-            png_byte green_low = (png_byte)(trans_color->green & 0xff);
-            png_byte blue_low = (png_byte)(trans_color->blue & 0xff);
-            sp = row + row_info->rowbytes - 1;
-            dp = row + (png_size_t)(row_width << 3) - 1;
-            for (i = 0; i < row_width; i++)
-            {
-               if (*(sp - 5) == red_high &&
-                   *(sp - 4) == red_low &&
-                   *(sp - 3) == green_high &&
-                   *(sp - 2) == green_low &&
-                   *(sp - 1) == blue_high &&
-                   *(sp    ) == blue_low)
-               {
-                  *dp-- = 0;
-                  *dp-- = 0;
-               }
-
-               else
-               {
-                  *dp-- = 0xff;
-                  *dp-- = 0xff;
-               }
-
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-               *dp-- = *sp--;
-            }
-         }
-         row_info->color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-         row_info->channels = 4;
-         row_info->pixel_depth = (png_byte)(row_info->bit_depth << 2);
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-   }
-}
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-/* If the bit depth is 8 and the color type is not a palette type expand the
- * whole row to 16 bits.  Has no effect otherwise.
- */
-static void
-png_do_expand_16(png_row_infop row_info, png_bytep row)
-{
-   if (row_info->bit_depth == 8 &&
-      row_info->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      /* The row have a sequence of bytes containing [0..255] and we need
-       * to turn it into another row containing [0..65535], to do this we
-       * calculate:
-       *
-       *  (input / 255) * 65535
-       *
-       *  Which happens to be exactly input * 257 and this can be achieved
-       *  simply by byte replication in place (copying backwards).
-       */
-      png_byte *sp = row + row_info->rowbytes; /* source, last byte + 1 */
-      png_byte *dp = sp + row_info->rowbytes;  /* destination, end + 1 */
-      while (dp > sp)
-         dp[-2] = dp[-1] = *--sp, dp -= 2;
-
-      row_info->rowbytes *= 2;
-      row_info->bit_depth = 16;
-      row_info->pixel_depth = (png_byte)(row_info->channels * 16);
-   }
-}
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-static void
-png_do_quantize(png_row_infop row_info, png_bytep row,
-    png_const_bytep palette_lookup, png_const_bytep quantize_lookup)
-{
-   png_bytep sp, dp;
-   png_uint_32 i;
-   png_uint_32 row_width=row_info->width;
-
-   png_debug(1, "in png_do_quantize");
-
-   if (row_info->bit_depth == 8)
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB && palette_lookup)
-      {
-         int r, g, b, p;
-         sp = row;
-         dp = row;
-         for (i = 0; i < row_width; i++)
-         {
-            r = *sp++;
-            g = *sp++;
-            b = *sp++;
-
-            /* This looks real messy, but the compiler will reduce
-             * it down to a reasonable formula.  For example, with
-             * 5 bits per color, we get:
-             * p = (((r >> 3) & 0x1f) << 10) |
-             *    (((g >> 3) & 0x1f) << 5) |
-             *    ((b >> 3) & 0x1f);
-             */
-            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &
-                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<
-                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |
-                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &
-                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<
-                (PNG_QUANTIZE_BLUE_BITS)) |
-                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &
-                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));
-
-            *dp++ = palette_lookup[p];
-         }
-
-         row_info->color_type = PNG_COLOR_TYPE_PALETTE;
-         row_info->channels = 1;
-         row_info->pixel_depth = row_info->bit_depth;
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
-         palette_lookup != NULL)
-      {
-         int r, g, b, p;
-         sp = row;
-         dp = row;
-         for (i = 0; i < row_width; i++)
-         {
-            r = *sp++;
-            g = *sp++;
-            b = *sp++;
-            sp++;
-
-            p = (((r >> (8 - PNG_QUANTIZE_RED_BITS)) &
-                ((1 << PNG_QUANTIZE_RED_BITS) - 1)) <<
-                (PNG_QUANTIZE_GREEN_BITS + PNG_QUANTIZE_BLUE_BITS)) |
-                (((g >> (8 - PNG_QUANTIZE_GREEN_BITS)) &
-                ((1 << PNG_QUANTIZE_GREEN_BITS) - 1)) <<
-                (PNG_QUANTIZE_BLUE_BITS)) |
-                ((b >> (8 - PNG_QUANTIZE_BLUE_BITS)) &
-                ((1 << PNG_QUANTIZE_BLUE_BITS) - 1));
-
-            *dp++ = palette_lookup[p];
-         }
-
-         row_info->color_type = PNG_COLOR_TYPE_PALETTE;
-         row_info->channels = 1;
-         row_info->pixel_depth = row_info->bit_depth;
-         row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_width);
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&
-         quantize_lookup)
-      {
-         sp = row;
-
-         for (i = 0; i < row_width; i++, sp++)
-         {
-            *sp = quantize_lookup[*sp];
-         }
-      }
-   }
-}
-#endif /* READ_QUANTIZE */
-
-/* Transform the row.  The order of transformations is significant,
- * and is very touchy.  If you add a transformation, take care to
- * decide how it fits in with the other transformations here.
- */
-void /* PRIVATE */
-png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_debug(1, "in png_do_read_transformations");
-
-   if (png_ptr->row_buf == NULL)
-   {
-      /* Prior to 1.5.4 this output row/pass where the NULL pointer is, but this
-       * error is incredibly rare and incredibly easy to debug without this
-       * information.
-       */
-      png_error(png_ptr, "NULL row buffer");
-   }
-
-   /* The following is debugging; prior to 1.5.4 the code was never compiled in;
-    * in 1.5.4 PNG_FLAG_DETECT_UNINITIALIZED was added and the macro
-    * PNG_WARN_UNINITIALIZED_ROW removed.  In 1.6 the new flag is set only for
-    * all transformations, however in practice the ROW_INIT always gets done on
-    * demand, if necessary.
-    */
-   if ((png_ptr->flags & PNG_FLAG_DETECT_UNINITIALIZED) != 0 &&
-       (png_ptr->flags & PNG_FLAG_ROW_INIT) == 0)
-   {
-      /* Application has failed to call either png_read_start_image() or
-       * png_read_update_info() after setting transforms that expand pixels.
-       * This check added to libpng-1.2.19 (but not enabled until 1.5.4).
-       */
-      png_error(png_ptr, "Uninitialized row");
-   }
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if ((png_ptr->transformations & PNG_EXPAND) != 0)
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         png_do_expand_palette(row_info, png_ptr->row_buf + 1,
-             png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
-      }
-
-      else
-      {
-         if (png_ptr->num_trans != 0 &&
-             (png_ptr->transformations & PNG_EXPAND_tRNS) != 0)
-            png_do_expand(row_info, png_ptr->row_buf + 1,
-                &(png_ptr->trans_color));
-
-         else
-            png_do_expand(row_info, png_ptr->row_buf + 1,
-                NULL);
-      }
-   }
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
-       (png_ptr->transformations & PNG_COMPOSE) == 0 &&
-       (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-       row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-         0 /* at_start == false, because SWAP_ALPHA happens later */);
-#endif
-
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   if ((png_ptr->transformations & PNG_RGB_TO_GRAY) != 0)
-   {
-      int rgb_error =
-          png_do_rgb_to_gray(png_ptr, row_info,
-              png_ptr->row_buf + 1);
-
-      if (rgb_error != 0)
-      {
-         png_ptr->rgb_to_gray_status=1;
-         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
-             PNG_RGB_TO_GRAY_WARN)
-            png_warning(png_ptr, "png_do_rgb_to_gray found nongray pixel");
-
-         if ((png_ptr->transformations & PNG_RGB_TO_GRAY) ==
-             PNG_RGB_TO_GRAY_ERR)
-            png_error(png_ptr, "png_do_rgb_to_gray found nongray pixel");
-      }
-   }
-#endif
-
-/* From Andreas Dilger e-mail to png-implement, 26 March 1998:
- *
- *   In most cases, the "simple transparency" should be done prior to doing
- *   gray-to-RGB, or you will have to test 3x as many bytes to check if a
- *   pixel is transparent.  You would also need to make sure that the
- *   transparency information is upgraded to RGB.
- *
- *   To summarize, the current flow is:
- *   - Gray + simple transparency -> compare 1 or 2 gray bytes and composite
- *                                   with background "in place" if transparent,
- *                                   convert to RGB if necessary
- *   - Gray + alpha -> composite with gray background and remove alpha bytes,
- *                                   convert to RGB if necessary
- *
- *   To support RGB backgrounds for gray images we need:
- *   - Gray + simple transparency -> convert to RGB + simple transparency,
- *                                   compare 3 or 6 bytes and composite with
- *                                   background "in place" if transparent
- *                                   (3x compare/pixel compared to doing
- *                                   composite with gray bkgrnd)
- *   - Gray + alpha -> convert to RGB + alpha, composite with background and
- *                                   remove alpha bytes (3x float
- *                                   operations/pixel compared with composite
- *                                   on gray background)
- *
- *  Greg's change will do this.  The reason it wasn't done before is for
- *  performance, as this increases the per-pixel operations.  If we would check
- *  in advance if the background was gray or RGB, and position the gray-to-RGB
- *  transform appropriately, then it would save a lot of work/time.
- */
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   /* If gray -> RGB, do so now only if background is non-gray; else do later
-    * for performance reasons
-    */
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
-       (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) == 0)
-      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
-#endif
-
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   if ((png_ptr->transformations & PNG_COMPOSE) != 0)
-      png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   if ((png_ptr->transformations & PNG_GAMMA) != 0 &&
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-      /* Because RGB_TO_GRAY does the gamma transform. */
-      (png_ptr->transformations & PNG_RGB_TO_GRAY) == 0 &&
-#endif
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-      /* Because PNG_COMPOSE does the gamma transform if there is something to
-       * do (if there is an alpha channel or transparency.)
-       */
-       !((png_ptr->transformations & PNG_COMPOSE) &&
-       ((png_ptr->num_trans != 0) ||
-       (png_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)) &&
-#endif
-      /* Because png_init_read_transformations transforms the palette, unless
-       * RGB_TO_GRAY will do the transform.
-       */
-       (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE))
-      png_do_gamma(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_STRIP_ALPHA) != 0 &&
-       (png_ptr->transformations & PNG_COMPOSE) != 0 &&
-       (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA ||
-       row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA))
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-          0 /* at_start == false, because SWAP_ALPHA happens later */);
-#endif
-
-#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
-   if ((png_ptr->transformations & PNG_ENCODE_ALPHA) != 0 &&
-       (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      png_do_encode_alpha(row_info, png_ptr->row_buf + 1, png_ptr);
-#endif
-
-#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
-   if ((png_ptr->transformations & PNG_SCALE_16_TO_8) != 0)
-      png_do_scale_16_to_8(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
-   /* There is no harm in doing both of these because only one has any effect,
-    * by putting the 'scale' option first if the app asks for scale (either by
-    * calling the API or in a TRANSFORM flag) this is what happens.
-    */
-   if ((png_ptr->transformations & PNG_16_TO_8) != 0)
-      png_do_chop(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   if ((png_ptr->transformations & PNG_QUANTIZE) != 0)
-   {
-      png_do_quantize(row_info, png_ptr->row_buf + 1,
-          png_ptr->palette_lookup, png_ptr->quantize_index);
-
-      if (row_info->rowbytes == 0)
-         png_error(png_ptr, "png_do_quantize returned rowbytes=0");
-   }
-#endif /* READ_QUANTIZE */
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   /* Do the expansion now, after all the arithmetic has been done.  Notice
-    * that previous transformations can handle the PNG_EXPAND_16 flag if this
-    * is efficient (particularly true in the case of gamma correction, where
-    * better accuracy results faster!)
-    */
-   if ((png_ptr->transformations & PNG_EXPAND_16) != 0)
-      png_do_expand_16(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   /* NOTE: moved here in 1.5.4 (from much later in this list.) */
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0 &&
-       (png_ptr->mode & PNG_BACKGROUND_IS_GRAY) != 0)
-      png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_INVERT_SUPPORTED
-   if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
-      png_do_invert(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
-      png_do_read_invert_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_SHIFT_SUPPORTED
-   if ((png_ptr->transformations & PNG_SHIFT) != 0)
-      png_do_unshift(row_info, png_ptr->row_buf + 1,
-          &(png_ptr->shift));
-#endif
-
-#ifdef PNG_READ_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) != 0)
-      png_do_unpack(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Added at libpng-1.5.10 */
-   if (row_info->color_type == PNG_COLOR_TYPE_PALETTE &&
-       png_ptr->num_palette_max >= 0)
-      png_do_check_palette_indexes(png_ptr, row_info);
-#endif
-
-#ifdef PNG_READ_BGR_SUPPORTED
-   if ((png_ptr->transformations & PNG_BGR) != 0)
-      png_do_bgr(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-      png_do_packswap(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   if ((png_ptr->transformations & PNG_FILLER) != 0)
-      png_do_read_filler(row_info, png_ptr->row_buf + 1,
-          (png_uint_32)png_ptr->filler, png_ptr->flags);
-#endif
-
-#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0)
-      png_do_read_swap_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_READ_16BIT_SUPPORTED
-#ifdef PNG_READ_SWAP_SUPPORTED
-   if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
-      png_do_swap(row_info, png_ptr->row_buf + 1);
-#endif
-#endif
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
-   {
-      if (png_ptr->read_user_transform_fn != NULL)
-         (*(png_ptr->read_user_transform_fn)) /* User read transform function */
-             (png_ptr,     /* png_ptr */
-             row_info,     /* row_info: */
-                /*  png_uint_32 width;       width of row */
-                /*  png_size_t rowbytes;     number of bytes in row */
-                /*  png_byte color_type;     color type of pixels */
-                /*  png_byte bit_depth;      bit depth of samples */
-                /*  png_byte channels;       number of channels (1-4) */
-                /*  png_byte pixel_depth;    bits per pixel (depth*channels) */
-             png_ptr->row_buf + 1);    /* start of pixel data for row */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-      if (png_ptr->user_transform_depth != 0)
-         row_info->bit_depth = png_ptr->user_transform_depth;
-
-      if (png_ptr->user_transform_channels != 0)
-         row_info->channels = png_ptr->user_transform_channels;
-#endif
-      row_info->pixel_depth = (png_byte)(row_info->bit_depth *
-          row_info->channels);
-
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, row_info->width);
-   }
-#endif
-}
-
-#endif /* READ_TRANSFORMS */
-#endif /* READ */
--- a/DoConfig/fltk/png/pngrutil.c
+++ /dev/null
@@ -1,4474 +1,0 @@
-
-/* pngrutil.c - utilities to read a PNG file
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file contains routines that are only called from within
- * libpng itself during the course of reading an image.
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_READ_SUPPORTED
-
-png_uint_32 PNGAPI
-png_get_uint_31(png_const_structrp png_ptr, png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-
-   if (uval > PNG_UINT_31_MAX)
-      png_error(png_ptr, "PNG unsigned integer out of range");
-
-   return (uval);
-}
-
-#if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_READ_cHRM_SUPPORTED)
-/* The following is a variation on the above for use with the fixed
- * point values used for gAMA and cHRM.  Instead of png_error it
- * issues a warning and returns (-1) - an invalid value because both
- * gAMA and cHRM use *unsigned* integers for fixed point values.
- */
-#define PNG_FIXED_ERROR (-1)
-
-static png_fixed_point /* PRIVATE */
-png_get_fixed_point(png_structrp png_ptr, png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-
-   if (uval <= PNG_UINT_31_MAX)
-      return (png_fixed_point)uval; /* known to be in range */
-
-   /* The caller can turn off the warning by passing NULL. */
-   if (png_ptr != NULL)
-      png_warning(png_ptr, "PNG fixed point integer out of range");
-
-   return PNG_FIXED_ERROR;
-}
-#endif
-
-#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
-/* NOTE: the read macros will obscure these definitions, so that if
- * PNG_USE_READ_MACROS is set the library will not use them internally,
- * but the APIs will still be available externally.
- *
- * The parentheses around "PNGAPI function_name" in the following three
- * functions are necessary because they allow the macros to co-exist with
- * these (unused but exported) functions.
- */
-
-/* Grab an unsigned 32-bit integer from a buffer in big-endian format. */
-png_uint_32 (PNGAPI
-png_get_uint_32)(png_const_bytep buf)
-{
-   png_uint_32 uval =
-       ((png_uint_32)(*(buf    )) << 24) +
-       ((png_uint_32)(*(buf + 1)) << 16) +
-       ((png_uint_32)(*(buf + 2)) <<  8) +
-       ((png_uint_32)(*(buf + 3))      ) ;
-
-   return uval;
-}
-
-/* Grab a signed 32-bit integer from a buffer in big-endian format.  The
- * data is stored in the PNG file in two's complement format and there
- * is no guarantee that a 'png_int_32' is exactly 32 bits, therefore
- * the following code does a two's complement to native conversion.
- */
-png_int_32 (PNGAPI
-png_get_int_32)(png_const_bytep buf)
-{
-   png_uint_32 uval = png_get_uint_32(buf);
-   if ((uval & 0x80000000) == 0) /* non-negative */
-      return uval;
-
-   uval = (uval ^ 0xffffffff) + 1;  /* 2's complement: -x = ~x+1 */
-   return -(png_int_32)uval;
-}
-
-/* Grab an unsigned 16-bit integer from a buffer in big-endian format. */
-png_uint_16 (PNGAPI
-png_get_uint_16)(png_const_bytep buf)
-{
-   /* ANSI-C requires an int value to accomodate at least 16 bits so this
-    * works and allows the compiler not to worry about possible narrowing
-    * on 32 bit systems.  (Pre-ANSI systems did not make integers smaller
-    * than 16 bits either.)
-    */
-   unsigned int val =
-       ((unsigned int)(*buf) << 8) +
-       ((unsigned int)(*(buf + 1)));
-
-   return (png_uint_16)val;
-}
-
-#endif /* READ_INT_FUNCTIONS */
-
-/* Read and check the PNG file signature */
-void /* PRIVATE */
-png_read_sig(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_size_t num_checked, num_to_check;
-
-   /* Exit if the user application does not expect a signature. */
-   if (png_ptr->sig_bytes >= 8)
-      return;
-
-   num_checked = png_ptr->sig_bytes;
-   num_to_check = 8 - num_checked;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_SIGNATURE;
-#endif
-
-   /* The signature must be serialized in a single I/O call. */
-   png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check);
-   png_ptr->sig_bytes = 8;
-
-   if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check) != 0)
-   {
-      if (num_checked < 4 &&
-          png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
-         png_error(png_ptr, "Not a PNG file");
-      else
-         png_error(png_ptr, "PNG file corrupted by ASCII conversion");
-   }
-   if (num_checked < 3)
-      png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
-}
-
-/* Read the chunk header (length + type name).
- * Put the type name into png_ptr->chunk_name, and return the length.
- */
-png_uint_32 /* PRIVATE */
-png_read_chunk_header(png_structrp png_ptr)
-{
-   png_byte buf[8];
-   png_uint_32 length;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_HDR;
-#endif
-
-   /* Read the length and the chunk name.
-    * This must be performed in a single I/O call.
-    */
-   png_read_data(png_ptr, buf, 8);
-   length = png_get_uint_31(png_ptr, buf);
-
-   /* Put the chunk name into png_ptr->chunk_name. */
-   png_ptr->chunk_name = PNG_CHUNK_FROM_STRING(buf+4);
-
-   png_debug2(0, "Reading %lx chunk, length = %lu",
-       (unsigned long)png_ptr->chunk_name, (unsigned long)length);
-
-   /* Reset the crc and run it over the chunk name. */
-   png_reset_crc(png_ptr);
-   png_calculate_crc(png_ptr, buf + 4, 4);
-
-   /* Check to see if chunk name is valid. */
-   png_check_chunk_name(png_ptr, png_ptr->chunk_name);
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_DATA;
-#endif
-
-   return length;
-}
-
-/* Read data, and (optionally) run it through the CRC. */
-void /* PRIVATE */
-png_crc_read(png_structrp png_ptr, png_bytep buf, png_uint_32 length)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_read_data(png_ptr, buf, length);
-   png_calculate_crc(png_ptr, buf, length);
-}
-
-/* Optionally skip data and then check the CRC.  Depending on whether we
- * are reading an ancillary or critical chunk, and how the program has set
- * things up, we may calculate the CRC on the data and print a message.
- * Returns '1' if there was a CRC error, '0' otherwise.
- */
-int /* PRIVATE */
-png_crc_finish(png_structrp png_ptr, png_uint_32 skip)
-{
-   /* The size of the local buffer for inflate is a good guess as to a
-    * reasonable size to use for buffering reads from the application.
-    */
-   while (skip > 0)
-   {
-      png_uint_32 len;
-      png_byte tmpbuf[PNG_INFLATE_BUF_SIZE];
-
-      len = (sizeof tmpbuf);
-      if (len > skip)
-         len = skip;
-      skip -= len;
-
-      png_crc_read(png_ptr, tmpbuf, len);
-   }
-
-   if (png_crc_error(png_ptr) != 0)
-   {
-      if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name) != 0 ?
-          (png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) == 0 :
-          (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE) != 0)
-      {
-         png_chunk_warning(png_ptr, "CRC error");
-      }
-
-      else
-         png_chunk_error(png_ptr, "CRC error");
-
-      return (1);
-   }
-
-   return (0);
-}
-
-/* Compare the CRC stored in the PNG file with that calculated by libpng from
- * the data it has read thus far.
- */
-int /* PRIVATE */
-png_crc_error(png_structrp png_ptr)
-{
-   png_byte crc_bytes[4];
-   png_uint_32 crc;
-   int need_crc = 1;
-
-   if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name) != 0)
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
-          (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
-         need_crc = 0;
-   }
-
-   else /* critical */
-   {
-      if ((png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE) != 0)
-         need_crc = 0;
-   }
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   png_ptr->io_state = PNG_IO_READING | PNG_IO_CHUNK_CRC;
-#endif
-
-   /* The chunk CRC must be serialized in a single I/O call. */
-   png_read_data(png_ptr, crc_bytes, 4);
-
-   if (need_crc != 0)
-   {
-      crc = png_get_uint_32(crc_bytes);
-      return ((int)(crc != png_ptr->crc));
-   }
-
-   else
-      return (0);
-}
-
-#if defined(PNG_READ_iCCP_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) ||\
-    defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_sCAL_SUPPORTED) ||\
-    defined(PNG_READ_sPLT_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) ||\
-    defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_SEQUENTIAL_READ_SUPPORTED)
-/* Manage the read buffer; this simply reallocates the buffer if it is not small
- * enough (or if it is not allocated).  The routine returns a pointer to the
- * buffer; if an error occurs and 'warn' is set the routine returns NULL, else
- * it will call png_error (via png_malloc) on failure.  (warn == 2 means
- * 'silent').
- */
-static png_bytep
-png_read_buffer(png_structrp png_ptr, png_alloc_size_t new_size, int warn)
-{
-   png_bytep buffer = png_ptr->read_buffer;
-
-   if (buffer != NULL && new_size > png_ptr->read_buffer_size)
-   {
-      png_ptr->read_buffer = NULL;
-      png_ptr->read_buffer = NULL;
-      png_ptr->read_buffer_size = 0;
-      png_free(png_ptr, buffer);
-      buffer = NULL;
-   }
-
-   if (buffer == NULL)
-   {
-      buffer = png_voidcast(png_bytep, png_malloc_base(png_ptr, new_size));
-
-      if (buffer != NULL)
-      {
-         png_ptr->read_buffer = buffer;
-         png_ptr->read_buffer_size = new_size;
-      }
-
-      else if (warn < 2) /* else silent */
-      {
-         if (warn != 0)
-             png_chunk_warning(png_ptr, "insufficient memory to read chunk");
-
-         else
-             png_chunk_error(png_ptr, "insufficient memory to read chunk");
-      }
-   }
-
-   return buffer;
-}
-#endif /* READ_iCCP|iTXt|pCAL|sCAL|sPLT|tEXt|zTXt|SEQUENTIAL_READ */
-
-/* png_inflate_claim: claim the zstream for some nefarious purpose that involves
- * decompression.  Returns Z_OK on success, else a zlib error code.  It checks
- * the owner but, in final release builds, just issues a warning if some other
- * chunk apparently owns the stream.  Prior to release it does a png_error.
- */
-static int
-png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
-{
-   if (png_ptr->zowner != 0)
-   {
-      char msg[64];
-
-      PNG_STRING_FROM_CHUNK(msg, png_ptr->zowner);
-      /* So the message that results is "<chunk> using zstream"; this is an
-       * internal error, but is very useful for debugging.  i18n requirements
-       * are minimal.
-       */
-      (void)png_safecat(msg, (sizeof msg), 4, " using zstream");
-#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-      png_chunk_warning(png_ptr, msg);
-      png_ptr->zowner = 0;
-#else
-      png_chunk_error(png_ptr, msg);
-#endif
-   }
-
-   /* Implementation note: unlike 'png_deflate_claim' this internal function
-    * does not take the size of the data as an argument.  Some efficiency could
-    * be gained by using this when it is known *if* the zlib stream itself does
-    * not record the number; however, this is an illusion: the original writer
-    * of the PNG may have selected a lower window size, and we really must
-    * follow that because, for systems with with limited capabilities, we
-    * would otherwise reject the application's attempts to use a smaller window
-    * size (zlib doesn't have an interface to say "this or lower"!).
-    *
-    * inflateReset2 was added to zlib 1.2.4; before this the window could not be
-    * reset, therefore it is necessary to always allocate the maximum window
-    * size with earlier zlibs just in case later compressed chunks need it.
-    */
-   {
-      int ret; /* zlib return code */
-#if PNG_ZLIB_VERNUM >= 0x1240
-
-# if defined(PNG_SET_OPTION_SUPPORTED) && defined(PNG_MAXIMUM_INFLATE_WINDOW)
-      int window_bits;
-
-      if (((png_ptr->options >> PNG_MAXIMUM_INFLATE_WINDOW) & 3) ==
-          PNG_OPTION_ON)
-         window_bits = 15;
-
-      else
-         window_bits = 0;
-# else
-#   define window_bits 0
-# endif
-#endif
-
-      /* Set this for safety, just in case the previous owner left pointers to
-       * memory allocations.
-       */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.next_out = NULL;
-      png_ptr->zstream.avail_out = 0;
-
-      if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) != 0)
-      {
-#if PNG_ZLIB_VERNUM < 0x1240
-         ret = inflateReset(&png_ptr->zstream);
-#else
-         ret = inflateReset2(&png_ptr->zstream, window_bits);
-#endif
-      }
-
-      else
-      {
-#if PNG_ZLIB_VERNUM < 0x1240
-         ret = inflateInit(&png_ptr->zstream);
-#else
-         ret = inflateInit2(&png_ptr->zstream, window_bits);
-#endif
-
-         if (ret == Z_OK)
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      if (ret == Z_OK)
-         png_ptr->zowner = owner;
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      return ret;
-   }
-
-#ifdef window_bits
-# undef window_bits
-#endif
-}
-
-#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
-/* png_inflate now returns zlib error codes including Z_OK and Z_STREAM_END to
- * allow the caller to do multiple calls if required.  If the 'finish' flag is
- * set Z_FINISH will be passed to the final inflate() call and Z_STREAM_END must
- * be returned or there has been a problem, otherwise Z_SYNC_FLUSH is used and
- * Z_OK or Z_STREAM_END will be returned on success.
- *
- * The input and output sizes are updated to the actual amounts of data consumed
- * or written, not the amount available (as in a z_stream).  The data pointers
- * are not changed, so the next input is (data+input_size) and the next
- * available output is (output+output_size).
- */
-static int
-png_inflate(png_structrp png_ptr, png_uint_32 owner, int finish,
-    /* INPUT: */ png_const_bytep input, png_uint_32p input_size_ptr,
-    /* OUTPUT: */ png_bytep output, png_alloc_size_t *output_size_ptr)
-{
-   if (png_ptr->zowner == owner) /* Else not claimed */
-   {
-      int ret;
-      png_alloc_size_t avail_out = *output_size_ptr;
-      png_uint_32 avail_in = *input_size_ptr;
-
-      /* zlib can't necessarily handle more than 65535 bytes at once (i.e. it
-       * can't even necessarily handle 65536 bytes) because the type uInt is
-       * "16 bits or more".  Consequently it is necessary to chunk the input to
-       * zlib.  This code uses ZLIB_IO_MAX, from pngpriv.h, as the maximum (the
-       * maximum value that can be stored in a uInt.)  It is possible to set
-       * ZLIB_IO_MAX to a lower value in pngpriv.h and this may sometimes have
-       * a performance advantage, because it reduces the amount of data accessed
-       * at each step and that may give the OS more time to page it in.
-       */
-      png_ptr->zstream.next_in = PNGZ_INPUT_CAST(input);
-      /* avail_in and avail_out are set below from 'size' */
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.avail_out = 0;
-
-      /* Read directly into the output if it is available (this is set to
-       * a local buffer below if output is NULL).
-       */
-      if (output != NULL)
-         png_ptr->zstream.next_out = output;
-
-      do
-      {
-         uInt avail;
-         Byte local_buffer[PNG_INFLATE_BUF_SIZE];
-
-         /* zlib INPUT BUFFER */
-         /* The setting of 'avail_in' used to be outside the loop; by setting it
-          * inside it is possible to chunk the input to zlib and simply rely on
-          * zlib to advance the 'next_in' pointer.  This allows arbitrary
-          * amounts of data to be passed through zlib at the unavoidable cost of
-          * requiring a window save (memcpy of up to 32768 output bytes)
-          * every ZLIB_IO_MAX input bytes.
-          */
-         avail_in += png_ptr->zstream.avail_in; /* not consumed last time */
-
-         avail = ZLIB_IO_MAX;
-
-         if (avail_in < avail)
-            avail = (uInt)avail_in; /* safe: < than ZLIB_IO_MAX */
-
-         avail_in -= avail;
-         png_ptr->zstream.avail_in = avail;
-
-         /* zlib OUTPUT BUFFER */
-         avail_out += png_ptr->zstream.avail_out; /* not written last time */
-
-         avail = ZLIB_IO_MAX; /* maximum zlib can process */
-
-         if (output == NULL)
-         {
-            /* Reset the output buffer each time round if output is NULL and
-             * make available the full buffer, up to 'remaining_space'
-             */
-            png_ptr->zstream.next_out = local_buffer;
-            if ((sizeof local_buffer) < avail)
-               avail = (sizeof local_buffer);
-         }
-
-         if (avail_out < avail)
-            avail = (uInt)avail_out; /* safe: < ZLIB_IO_MAX */
-
-         png_ptr->zstream.avail_out = avail;
-         avail_out -= avail;
-
-         /* zlib inflate call */
-         /* In fact 'avail_out' may be 0 at this point, that happens at the end
-          * of the read when the final LZ end code was not passed at the end of
-          * the previous chunk of input data.  Tell zlib if we have reached the
-          * end of the output buffer.
-          */
-         ret = inflate(&png_ptr->zstream, avail_out > 0 ? Z_NO_FLUSH :
-             (finish ? Z_FINISH : Z_SYNC_FLUSH));
-      } while (ret == Z_OK);
-
-      /* For safety kill the local buffer pointer now */
-      if (output == NULL)
-         png_ptr->zstream.next_out = NULL;
-
-      /* Claw back the 'size' and 'remaining_space' byte counts. */
-      avail_in += png_ptr->zstream.avail_in;
-      avail_out += png_ptr->zstream.avail_out;
-
-      /* Update the input and output sizes; the updated values are the amount
-       * consumed or written, effectively the inverse of what zlib uses.
-       */
-      if (avail_out > 0)
-         *output_size_ptr -= avail_out;
-
-      if (avail_in > 0)
-         *input_size_ptr -= avail_in;
-
-      /* Ensure png_ptr->zstream.msg is set (even in the success case!) */
-      png_zstream_error(png_ptr, ret);
-      return ret;
-   }
-
-   else
-   {
-      /* This is a bad internal error.  The recovery assigns to the zstream msg
-       * pointer, which is not owned by the caller, but this is safe; it's only
-       * used on errors!
-       */
-      png_ptr->zstream.msg = PNGZ_MSG_CAST("zstream unclaimed");
-      return Z_STREAM_ERROR;
-   }
-}
-
-/*
- * Decompress trailing data in a chunk.  The assumption is that read_buffer
- * points at an allocated area holding the contents of a chunk with a
- * trailing compressed part.  What we get back is an allocated area
- * holding the original prefix part and an uncompressed version of the
- * trailing part (the malloc area passed in is freed).
- */
-static int
-png_decompress_chunk(png_structrp png_ptr,
-   png_uint_32 chunklength, png_uint_32 prefix_size,
-   png_alloc_size_t *newlength /* must be initialized to the maximum! */,
-   int terminate /*add a '\0' to the end of the uncompressed data*/)
-{
-   /* TODO: implement different limits for different types of chunk.
-    *
-    * The caller supplies *newlength set to the maximum length of the
-    * uncompressed data, but this routine allocates space for the prefix and
-    * maybe a '\0' terminator too.  We have to assume that 'prefix_size' is
-    * limited only by the maximum chunk size.
-    */
-   png_alloc_size_t limit = PNG_SIZE_MAX;
-
-# ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-   if (png_ptr->user_chunk_malloc_max > 0 &&
-       png_ptr->user_chunk_malloc_max < limit)
-      limit = png_ptr->user_chunk_malloc_max;
-# elif PNG_USER_CHUNK_MALLOC_MAX > 0
-   if (PNG_USER_CHUNK_MALLOC_MAX < limit)
-      limit = PNG_USER_CHUNK_MALLOC_MAX;
-# endif
-
-   if (limit >= prefix_size + (terminate != 0))
-   {
-      int ret;
-
-      limit -= prefix_size + (terminate != 0);
-
-      if (limit < *newlength)
-         *newlength = limit;
-
-      /* Now try to claim the stream. */
-      ret = png_inflate_claim(png_ptr, png_ptr->chunk_name);
-
-      if (ret == Z_OK)
-      {
-         png_uint_32 lzsize = chunklength - prefix_size;
-
-         ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
-            /* input: */ png_ptr->read_buffer + prefix_size, &lzsize,
-            /* output: */ NULL, newlength);
-
-         if (ret == Z_STREAM_END)
-         {
-            /* Use 'inflateReset' here, not 'inflateReset2' because this
-             * preserves the previously decided window size (otherwise it would
-             * be necessary to store the previous window size.)  In practice
-             * this doesn't matter anyway, because png_inflate will call inflate
-             * with Z_FINISH in almost all cases, so the window will not be
-             * maintained.
-             */
-            if (inflateReset(&png_ptr->zstream) == Z_OK)
-            {
-               /* Because of the limit checks above we know that the new,
-                * expanded, size will fit in a size_t (let alone an
-                * png_alloc_size_t).  Use png_malloc_base here to avoid an
-                * extra OOM message.
-                */
-               png_alloc_size_t new_size = *newlength;
-               png_alloc_size_t buffer_size = prefix_size + new_size +
-                  (terminate != 0);
-               png_bytep text = png_voidcast(png_bytep, png_malloc_base(png_ptr,
-                  buffer_size));
-
-               if (text != NULL)
-               {
-                  ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/,
-                     png_ptr->read_buffer + prefix_size, &lzsize,
-                     text + prefix_size, newlength);
-
-                  if (ret == Z_STREAM_END)
-                  {
-                     if (new_size == *newlength)
-                     {
-                        if (terminate != 0)
-                           text[prefix_size + *newlength] = 0;
-
-                        if (prefix_size > 0)
-                           memcpy(text, png_ptr->read_buffer, prefix_size);
-
-                        {
-                           png_bytep old_ptr = png_ptr->read_buffer;
-
-                           png_ptr->read_buffer = text;
-                           png_ptr->read_buffer_size = buffer_size;
-                           text = old_ptr; /* freed below */
-                        }
-                     }
-
-                     else
-                     {
-                        /* The size changed on the second read, there can be no
-                         * guarantee that anything is correct at this point.
-                         * The 'msg' pointer has been set to "unexpected end of
-                         * LZ stream", which is fine, but return an error code
-                         * that the caller won't accept.
-                         */
-                        ret = PNG_UNEXPECTED_ZLIB_RETURN;
-                     }
-                  }
-
-                  else if (ret == Z_OK)
-                     ret = PNG_UNEXPECTED_ZLIB_RETURN; /* for safety */
-
-                  /* Free the text pointer (this is the old read_buffer on
-                   * success)
-                   */
-                  png_free(png_ptr, text);
-                  text = NULL;
-
-                  /* This really is very benign, but it's still an error because
-                   * the extra space may otherwise be used as a Trojan Horse.
-                   */
-                  if (ret == Z_STREAM_END &&
-                     chunklength - prefix_size != lzsize)
-                     png_chunk_benign_error(png_ptr, "extra compressed data");
-               }
-
-               else
-               {
-                  /* Out of memory allocating the buffer */
-                  ret = Z_MEM_ERROR;
-                  png_zstream_error(png_ptr, Z_MEM_ERROR);
-               }
-            }
-
-            else
-            {
-               /* inflateReset failed, store the error message */
-               png_zstream_error(png_ptr, ret);
-
-               if (ret == Z_STREAM_END)
-                  ret = PNG_UNEXPECTED_ZLIB_RETURN;
-            }
-         }
-
-         else if (ret == Z_OK)
-            ret = PNG_UNEXPECTED_ZLIB_RETURN;
-
-         /* Release the claimed stream */
-         png_ptr->zowner = 0;
-      }
-
-      else /* the claim failed */ if (ret == Z_STREAM_END) /* impossible! */
-         ret = PNG_UNEXPECTED_ZLIB_RETURN;
-
-      return ret;
-   }
-
-   else
-   {
-      /* Application/configuration limits exceeded */
-      png_zstream_error(png_ptr, Z_MEM_ERROR);
-      return Z_MEM_ERROR;
-   }
-}
-#endif /* READ_COMPRESSED_TEXT */
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-/* Perform a partial read and decompress, producing 'avail_out' bytes and
- * reading from the current chunk as required.
- */
-static int
-png_inflate_read(png_structrp png_ptr, png_bytep read_buffer, uInt read_size,
-   png_uint_32p chunk_bytes, png_bytep next_out, png_alloc_size_t *out_size,
-   int finish)
-{
-   if (png_ptr->zowner == png_ptr->chunk_name)
-   {
-      int ret;
-
-      /* next_in and avail_in must have been initialized by the caller. */
-      png_ptr->zstream.next_out = next_out;
-      png_ptr->zstream.avail_out = 0; /* set in the loop */
-
-      do
-      {
-         if (png_ptr->zstream.avail_in == 0)
-         {
-            if (read_size > *chunk_bytes)
-               read_size = (uInt)*chunk_bytes;
-            *chunk_bytes -= read_size;
-
-            if (read_size > 0)
-               png_crc_read(png_ptr, read_buffer, read_size);
-
-            png_ptr->zstream.next_in = read_buffer;
-            png_ptr->zstream.avail_in = read_size;
-         }
-
-         if (png_ptr->zstream.avail_out == 0)
-         {
-            uInt avail = ZLIB_IO_MAX;
-            if (avail > *out_size)
-               avail = (uInt)*out_size;
-            *out_size -= avail;
-
-            png_ptr->zstream.avail_out = avail;
-         }
-
-         /* Use Z_SYNC_FLUSH when there is no more chunk data to ensure that all
-          * the available output is produced; this allows reading of truncated
-          * streams.
-          */
-         ret = inflate(&png_ptr->zstream,
-            *chunk_bytes > 0 ? Z_NO_FLUSH : (finish ? Z_FINISH : Z_SYNC_FLUSH));
-      }
-      while (ret == Z_OK && (*out_size > 0 || png_ptr->zstream.avail_out > 0));
-
-      *out_size += png_ptr->zstream.avail_out;
-      png_ptr->zstream.avail_out = 0; /* Should not be required, but is safe */
-
-      /* Ensure the error message pointer is always set: */
-      png_zstream_error(png_ptr, ret);
-      return ret;
-   }
-
-   else
-   {
-      png_ptr->zstream.msg = PNGZ_MSG_CAST("zstream unclaimed");
-      return Z_STREAM_ERROR;
-   }
-}
-#endif
-
-/* Read and check the IDHR chunk */
-
-void /* PRIVATE */
-png_handle_IHDR(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[13];
-   png_uint_32 width, height;
-   int bit_depth, color_type, compression_type, filter_type;
-   int interlace_type;
-
-   png_debug(1, "in png_handle_IHDR");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) != 0)
-      png_chunk_error(png_ptr, "out of place");
-
-   /* Check the length */
-   if (length != 13)
-      png_chunk_error(png_ptr, "invalid");
-
-   png_ptr->mode |= PNG_HAVE_IHDR;
-
-   png_crc_read(png_ptr, buf, 13);
-   png_crc_finish(png_ptr, 0);
-
-   width = png_get_uint_31(png_ptr, buf);
-   height = png_get_uint_31(png_ptr, buf + 4);
-   bit_depth = buf[8];
-   color_type = buf[9];
-   compression_type = buf[10];
-   filter_type = buf[11];
-   interlace_type = buf[12];
-
-   /* Set internal variables */
-   png_ptr->width = width;
-   png_ptr->height = height;
-   png_ptr->bit_depth = (png_byte)bit_depth;
-   png_ptr->interlaced = (png_byte)interlace_type;
-   png_ptr->color_type = (png_byte)color_type;
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_ptr->filter_type = (png_byte)filter_type;
-#endif
-   png_ptr->compression_type = (png_byte)compression_type;
-
-   /* Find number of channels */
-   switch (png_ptr->color_type)
-   {
-      default: /* invalid, png_set_IHDR calls png_error */
-      case PNG_COLOR_TYPE_GRAY:
-      case PNG_COLOR_TYPE_PALETTE:
-         png_ptr->channels = 1;
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-         png_ptr->channels = 3;
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         png_ptr->channels = 2;
-         break;
-
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-         png_ptr->channels = 4;
-         break;
-   }
-
-   /* Set up other useful info */
-   png_ptr->pixel_depth = (png_byte)(png_ptr->bit_depth * png_ptr->channels);
-   png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->width);
-   png_debug1(3, "bit_depth = %d", png_ptr->bit_depth);
-   png_debug1(3, "channels = %d", png_ptr->channels);
-   png_debug1(3, "rowbytes = %lu", (unsigned long)png_ptr->rowbytes);
-   png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth,
-       color_type, interlace_type, compression_type, filter_type);
-}
-
-/* Read and check the palette */
-void /* PRIVATE */
-png_handle_PLTE(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_color palette[PNG_MAX_PALETTE_LENGTH];
-   int num, i;
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   png_colorp pal_ptr;
-#endif
-
-   png_debug(1, "in png_handle_PLTE");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   /* Moved to before the 'after IDAT' check below because otherwise duplicate
-    * PLTE chunks are potentially ignored (the spec says there shall not be more
-    * than one PLTE, the error is not treated as benign, so this check trumps
-    * the requirement that PLTE appears before IDAT.)
-    */
-   else if ((png_ptr->mode & PNG_HAVE_PLTE) != 0)
-      png_chunk_error(png_ptr, "duplicate");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      /* This is benign because the non-benign error happened before, when an
-       * IDAT was encountered in a color-mapped image with no PLTE.
-       */
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   png_ptr->mode |= PNG_HAVE_PLTE;
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "ignored in grayscale PNG");
-      return;
-   }
-
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-#endif
-
-   if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3)
-   {
-      png_crc_finish(png_ptr, length);
-
-      if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
-         png_chunk_benign_error(png_ptr, "invalid");
-
-      else
-         png_chunk_error(png_ptr, "invalid");
-
-      return;
-   }
-
-   /* The cast is safe because 'length' is less than 3*PNG_MAX_PALETTE_LENGTH */
-   num = (int)length / 3;
-
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
-   {
-      png_byte buf[3];
-
-      png_crc_read(png_ptr, buf, 3);
-      pal_ptr->red = buf[0];
-      pal_ptr->green = buf[1];
-      pal_ptr->blue = buf[2];
-   }
-#else
-   for (i = 0; i < num; i++)
-   {
-      png_byte buf[3];
-
-      png_crc_read(png_ptr, buf, 3);
-      /* Don't depend upon png_color being any order */
-      palette[i].red = buf[0];
-      palette[i].green = buf[1];
-      palette[i].blue = buf[2];
-   }
-#endif
-
-   /* If we actually need the PLTE chunk (ie for a paletted image), we do
-    * whatever the normal CRC configuration tells us.  However, if we
-    * have an RGB image, the PLTE can be considered ancillary, so
-    * we will act as though it is.
-    */
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-#endif
-   {
-      png_crc_finish(png_ptr, 0);
-   }
-
-#ifndef PNG_READ_OPT_PLTE_SUPPORTED
-   else if (png_crc_error(png_ptr) != 0)  /* Only if we have a CRC error */
-   {
-      /* If we don't want to use the data from an ancillary chunk,
-       * we have two options: an error abort, or a warning and we
-       * ignore the data in this chunk (which should be OK, since
-       * it's considered ancillary for a RGB or RGBA image).
-       *
-       * IMPLEMENTATION NOTE: this is only here because png_crc_finish uses the
-       * chunk type to determine whether to check the ancillary or the critical
-       * flags.
-       */
-      if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_USE) == 0)
-      {
-         if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) != 0)
-            return;
-
-         else
-            png_chunk_error(png_ptr, "CRC error");
-      }
-
-      /* Otherwise, we (optionally) emit a warning and use the chunk. */
-      else if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) == 0)
-         png_chunk_warning(png_ptr, "CRC error");
-   }
-#endif
-
-   /* TODO: png_set_PLTE has the side effect of setting png_ptr->palette to its
-    * own copy of the palette.  This has the side effect that when png_start_row
-    * is called (this happens after any call to png_read_update_info) the
-    * info_ptr palette gets changed.  This is extremely unexpected and
-    * confusing.
-    *
-    * Fix this by not sharing the palette in this way.
-    */
-   png_set_PLTE(png_ptr, info_ptr, palette, num);
-
-   /* The three chunks, bKGD, hIST and tRNS *must* appear after PLTE and before
-    * IDAT.  Prior to 1.6.0 this was not checked; instead the code merely
-    * checked the apparent validity of a tRNS chunk inserted before PLTE on a
-    * palette PNG.  1.6.0 attempts to rigorously follow the standard and
-    * therefore does a benign error if the erroneous condition is detected *and*
-    * cancels the tRNS if the benign error returns.  The alternative is to
-    * amend the standard since it would be rather hypocritical of the standards
-    * maintainers to ignore it.
-    */
-#ifdef PNG_READ_tRNS_SUPPORTED
-   if (png_ptr->num_trans > 0 ||
-       (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS) != 0))
-   {
-      /* Cancel this because otherwise it would be used if the transforms
-       * require it.  Don't cancel the 'valid' flag because this would prevent
-       * detection of duplicate chunks.
-       */
-      png_ptr->num_trans = 0;
-
-      if (info_ptr != NULL)
-         info_ptr->num_trans = 0;
-
-      png_chunk_benign_error(png_ptr, "tRNS must be after");
-   }
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) != 0)
-      png_chunk_benign_error(png_ptr, "hIST must be after");
-#endif
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) != 0)
-      png_chunk_benign_error(png_ptr, "bKGD must be after");
-#endif
-}
-
-void /* PRIVATE */
-png_handle_IEND(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_debug(1, "in png_handle_IEND");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0 ||
-       (png_ptr->mode & PNG_HAVE_IDAT) == 0)
-      png_chunk_error(png_ptr, "out of place");
-
-   png_ptr->mode |= (PNG_AFTER_IDAT | PNG_HAVE_IEND);
-
-   png_crc_finish(png_ptr, length);
-
-   if (length != 0)
-      png_chunk_benign_error(png_ptr, "invalid");
-
-   PNG_UNUSED(info_ptr)
-}
-
-#ifdef PNG_READ_gAMA_SUPPORTED
-void /* PRIVATE */
-png_handle_gAMA(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_fixed_point igamma;
-   png_byte buf[4];
-
-   png_debug(1, "in png_handle_gAMA");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE)) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 4)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 4);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   igamma = png_get_fixed_point(NULL, buf);
-
-   png_colorspace_set_gamma(png_ptr, &png_ptr->colorspace, igamma);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif
-
-#ifdef PNG_READ_sBIT_SUPPORTED
-void /* PRIVATE */
-png_handle_sBIT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int truelen, i;
-   png_byte sample_depth;
-   png_byte buf[4];
-
-   png_debug(1, "in png_handle_sBIT");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE)) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      truelen = 3;
-      sample_depth = 8;
-   }
-
-   else
-   {
-      truelen = png_ptr->channels;
-      sample_depth = png_ptr->bit_depth;
-   }
-
-   if (length != truelen || length > 4)
-   {
-      png_chunk_benign_error(png_ptr, "invalid");
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   buf[0] = buf[1] = buf[2] = buf[3] = sample_depth;
-   png_crc_read(png_ptr, buf, truelen);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   for (i=0; i<truelen; ++i)
-      if (buf[i] == 0 || buf[i] > sample_depth)
-      {
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      png_ptr->sig_bit.red = buf[0];
-      png_ptr->sig_bit.green = buf[1];
-      png_ptr->sig_bit.blue = buf[2];
-      png_ptr->sig_bit.alpha = buf[3];
-   }
-
-   else
-   {
-      png_ptr->sig_bit.gray = buf[0];
-      png_ptr->sig_bit.red = buf[0];
-      png_ptr->sig_bit.green = buf[0];
-      png_ptr->sig_bit.blue = buf[0];
-      png_ptr->sig_bit.alpha = buf[1];
-   }
-
-   png_set_sBIT(png_ptr, info_ptr, &(png_ptr->sig_bit));
-}
-#endif
-
-#ifdef PNG_READ_cHRM_SUPPORTED
-void /* PRIVATE */
-png_handle_cHRM(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[32];
-   png_xy xy;
-
-   png_debug(1, "in png_handle_cHRM");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE)) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 32)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 32);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   xy.whitex = png_get_fixed_point(NULL, buf);
-   xy.whitey = png_get_fixed_point(NULL, buf + 4);
-   xy.redx   = png_get_fixed_point(NULL, buf + 8);
-   xy.redy   = png_get_fixed_point(NULL, buf + 12);
-   xy.greenx = png_get_fixed_point(NULL, buf + 16);
-   xy.greeny = png_get_fixed_point(NULL, buf + 20);
-   xy.bluex  = png_get_fixed_point(NULL, buf + 24);
-   xy.bluey  = png_get_fixed_point(NULL, buf + 28);
-
-   if (xy.whitex == PNG_FIXED_ERROR ||
-       xy.whitey == PNG_FIXED_ERROR ||
-       xy.redx   == PNG_FIXED_ERROR ||
-       xy.redy   == PNG_FIXED_ERROR ||
-       xy.greenx == PNG_FIXED_ERROR ||
-       xy.greeny == PNG_FIXED_ERROR ||
-       xy.bluex  == PNG_FIXED_ERROR ||
-       xy.bluey  == PNG_FIXED_ERROR)
-   {
-      png_chunk_benign_error(png_ptr, "invalid values");
-      return;
-   }
-
-   /* If a colorspace error has already been output skip this chunk */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) != 0)
-      return;
-
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_FROM_cHRM) != 0)
-   {
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-      png_colorspace_sync(png_ptr, info_ptr);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-   (void)png_colorspace_set_chromaticities(png_ptr, &png_ptr->colorspace, &xy,
-      1/*prefer cHRM values*/);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif
-
-#ifdef PNG_READ_sRGB_SUPPORTED
-void /* PRIVATE */
-png_handle_sRGB(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte intent;
-
-   png_debug(1, "in png_handle_sRGB");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE)) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   if (length != 1)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, &intent, 1);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   /* If a colorspace error has already been output skip this chunk */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) != 0)
-      return;
-
-   /* Only one sRGB or iCCP chunk is allowed, use the HAVE_INTENT flag to detect
-    * this.
-    */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_INTENT) != 0)
-   {
-      png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-      png_colorspace_sync(png_ptr, info_ptr);
-      png_chunk_benign_error(png_ptr, "too many profiles");
-      return;
-   }
-
-   (void)png_colorspace_set_sRGB(png_ptr, &png_ptr->colorspace, intent);
-   png_colorspace_sync(png_ptr, info_ptr);
-}
-#endif /* READ_sRGB */
-
-#ifdef PNG_READ_iCCP_SUPPORTED
-void /* PRIVATE */
-png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-/* Note: this does not properly handle profiles that are > 64K under DOS */
-{
-   png_const_charp errmsg = NULL; /* error message output, or no error */
-   int finished = 0; /* crc checked */
-
-   png_debug(1, "in png_handle_iCCP");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & (PNG_HAVE_IDAT|PNG_HAVE_PLTE)) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   /* Consistent with all the above colorspace handling an obviously *invalid*
-    * chunk is just ignored, so does not invalidate the color space.  An
-    * alternative is to set the 'invalid' flags at the start of this routine
-    * and only clear them in they were not set before and all the tests pass.
-    * The minimum 'deflate' stream is assumed to be just the 2 byte header and
-    * 4 byte checksum.  The keyword must be at least one character and there is
-    * a terminator (0) byte and the compression method.
-    */
-   if (length < 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too short");
-      return;
-   }
-
-   /* If a colorspace error has already been output skip this chunk */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   /* Only one sRGB or iCCP chunk is allowed, use the HAVE_INTENT flag to detect
-    * this.
-    */
-   if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_INTENT) == 0)
-   {
-      uInt read_length, keyword_length;
-      char keyword[81];
-
-      /* Find the keyword; the keyword plus separator and compression method
-       * bytes can be at most 81 characters long.
-       */
-      read_length = 81; /* maximum */
-      if (read_length > length)
-         read_length = (uInt)length;
-
-      png_crc_read(png_ptr, (png_bytep)keyword, read_length);
-      length -= read_length;
-
-      keyword_length = 0;
-      while (keyword_length < 80 && keyword_length < read_length &&
-         keyword[keyword_length] != 0)
-         ++keyword_length;
-
-      /* TODO: make the keyword checking common */
-      if (keyword_length >= 1 && keyword_length <= 79)
-      {
-         /* We only understand '0' compression - deflate - so if we get a
-          * different value we can't safely decode the chunk.
-          */
-         if (keyword_length+1 < read_length &&
-            keyword[keyword_length+1] == PNG_COMPRESSION_TYPE_BASE)
-         {
-            read_length -= keyword_length+2;
-
-            if (png_inflate_claim(png_ptr, png_iCCP) == Z_OK)
-            {
-               Byte profile_header[132];
-               Byte local_buffer[PNG_INFLATE_BUF_SIZE];
-               png_alloc_size_t size = (sizeof profile_header);
-
-               png_ptr->zstream.next_in = (Bytef*)keyword + (keyword_length+2);
-               png_ptr->zstream.avail_in = read_length;
-               (void)png_inflate_read(png_ptr, local_buffer,
-                  (sizeof local_buffer), &length, profile_header, &size,
-                  0/*finish: don't, because the output is too small*/);
-
-               if (size == 0)
-               {
-                  /* We have the ICC profile header; do the basic header checks.
-                   */
-                  const png_uint_32 profile_length =
-                     png_get_uint_32(profile_header);
-
-                  if (png_icc_check_length(png_ptr, &png_ptr->colorspace,
-                     keyword, profile_length) != 0)
-                  {
-                     /* The length is apparently ok, so we can check the 132
-                      * byte header.
-                      */
-                     if (png_icc_check_header(png_ptr, &png_ptr->colorspace,
-                        keyword, profile_length, profile_header,
-                        png_ptr->color_type) != 0)
-                     {
-                        /* Now read the tag table; a variable size buffer is
-                         * needed at this point, allocate one for the whole
-                         * profile.  The header check has already validated
-                         * that none of these stuff will overflow.
-                         */
-                        const png_uint_32 tag_count = png_get_uint_32(
-                           profile_header+128);
-                        png_bytep profile = png_read_buffer(png_ptr,
-                           profile_length, 2/*silent*/);
-
-                        if (profile != NULL)
-                        {
-                           memcpy(profile, profile_header,
-                              (sizeof profile_header));
-
-                           size = 12 * tag_count;
-
-                           (void)png_inflate_read(png_ptr, local_buffer,
-                              (sizeof local_buffer), &length,
-                              profile + (sizeof profile_header), &size, 0);
-
-                           /* Still expect a buffer error because we expect
-                            * there to be some tag data!
-                            */
-                           if (size == 0)
-                           {
-                              if (png_icc_check_tag_table(png_ptr,
-                                 &png_ptr->colorspace, keyword, profile_length,
-                                 profile) != 0)
-                              {
-                                 /* The profile has been validated for basic
-                                  * security issues, so read the whole thing in.
-                                  */
-                                 size = profile_length - (sizeof profile_header)
-                                    - 12 * tag_count;
-
-                                 (void)png_inflate_read(png_ptr, local_buffer,
-                                    (sizeof local_buffer), &length,
-                                    profile + (sizeof profile_header) +
-                                    12 * tag_count, &size, 1/*finish*/);
-
-                                 if (length > 0 && !(png_ptr->flags &
-                                       PNG_FLAG_BENIGN_ERRORS_WARN))
-                                    errmsg = "extra compressed data";
-
-                                 /* But otherwise allow extra data: */
-                                 else if (size == 0)
-                                 {
-                                    if (length > 0)
-                                    {
-                                       /* This can be handled completely, so
-                                        * keep going.
-                                        */
-                                       png_chunk_warning(png_ptr,
-                                          "extra compressed data");
-                                    }
-
-                                    png_crc_finish(png_ptr, length);
-                                    finished = 1;
-
-#                                   ifdef PNG_sRGB_SUPPORTED
-                                       /* Check for a match against sRGB */
-                                       png_icc_set_sRGB(png_ptr,
-                                          &png_ptr->colorspace, profile,
-                                          png_ptr->zstream.adler);
-#                                   endif
-
-                                    /* Steal the profile for info_ptr. */
-                                    if (info_ptr != NULL)
-                                    {
-                                       png_free_data(png_ptr, info_ptr,
-                                          PNG_FREE_ICCP, 0);
-
-                                       info_ptr->iccp_name = png_voidcast(char*,
-                                          png_malloc_base(png_ptr,
-                                          keyword_length+1));
-                                       if (info_ptr->iccp_name != NULL)
-                                       {
-                                          memcpy(info_ptr->iccp_name, keyword,
-                                             keyword_length+1);
-                                          info_ptr->iccp_proflen =
-                                             profile_length;
-                                          info_ptr->iccp_profile = profile;
-                                          png_ptr->read_buffer = NULL; /*steal*/
-                                          info_ptr->free_me |= PNG_FREE_ICCP;
-                                          info_ptr->valid |= PNG_INFO_iCCP;
-                                       }
-
-                                       else
-                                       {
-                                          png_ptr->colorspace.flags |=
-                                             PNG_COLORSPACE_INVALID;
-                                          errmsg = "out of memory";
-                                       }
-                                    }
-
-                                    /* else the profile remains in the read
-                                     * buffer which gets reused for subsequent
-                                     * chunks.
-                                     */
-
-                                    if (info_ptr != NULL)
-                                       png_colorspace_sync(png_ptr, info_ptr);
-
-                                    if (errmsg == NULL)
-                                    {
-                                       png_ptr->zowner = 0;
-                                       return;
-                                    }
-                                 }
-
-                                 else if (size > 0)
-                                    errmsg = "truncated";
-
-                                 else
-                                    errmsg = png_ptr->zstream.msg;
-                              }
-
-                              /* else png_icc_check_tag_table output an error */
-                           }
-
-                           else /* profile truncated */
-                              errmsg = png_ptr->zstream.msg;
-                        }
-
-                        else
-                           errmsg = "out of memory";
-                     }
-
-                     /* else png_icc_check_header output an error */
-                  }
-
-                  /* else png_icc_check_length output an error */
-               }
-
-               else /* profile truncated */
-                  errmsg = png_ptr->zstream.msg;
-
-               /* Release the stream */
-               png_ptr->zowner = 0;
-            }
-
-            else /* png_inflate_claim failed */
-               errmsg = png_ptr->zstream.msg;
-         }
-
-         else
-            errmsg = "bad compression method"; /* or missing */
-      }
-
-      else
-         errmsg = "bad keyword";
-   }
-
-   else
-      errmsg = "too many profiles";
-
-   /* Failure: the reason is in 'errmsg' */
-   if (finished == 0)
-      png_crc_finish(png_ptr, length);
-
-   png_ptr->colorspace.flags |= PNG_COLORSPACE_INVALID;
-   png_colorspace_sync(png_ptr, info_ptr);
-   if (errmsg != NULL) /* else already output */
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif /* READ_iCCP */
-
-#ifdef PNG_READ_sPLT_SUPPORTED
-void /* PRIVATE */
-png_handle_sPLT(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-{
-   png_bytep entry_start, buffer;
-   png_sPLT_t new_palette;
-   png_sPLT_entryp pp;
-   png_uint_32 data_length;
-   int entry_size, i;
-   png_uint_32 skip = 0;
-   png_uint_32 dl;
-   png_size_t max_dl;
-
-   png_debug(1, "in png_handle_sPLT");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_warning(png_ptr, "No space in chunk cache for sPLT");
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-   }
-#endif
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (length > 65535U)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too large to fit in memory");
-      return;
-   }
-#endif
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-
-   /* WARNING: this may break if size_t is less than 32 bits; it is assumed
-    * that the PNG_MAX_MALLOC_64K test is enabled in this case, but this is a
-    * potential breakage point if the types in pngconf.h aren't exactly right.
-    */
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, skip) != 0)
-      return;
-
-   buffer[length] = 0;
-
-   for (entry_start = buffer; *entry_start; entry_start++)
-      /* Empty loop to find end of name */ ;
-
-   ++entry_start;
-
-   /* A sample depth should follow the separator, and we should be on it  */
-   if (entry_start > buffer + length - 2)
-   {
-      png_warning(png_ptr, "malformed sPLT chunk");
-      return;
-   }
-
-   new_palette.depth = *entry_start++;
-   entry_size = (new_palette.depth == 8 ? 6 : 10);
-   /* This must fit in a png_uint_32 because it is derived from the original
-    * chunk data length.
-    */
-   data_length = length - (png_uint_32)(entry_start - buffer);
-
-   /* Integrity-check the data length */
-   if ((data_length % entry_size) != 0)
-   {
-      png_warning(png_ptr, "sPLT chunk has bad length");
-      return;
-   }
-
-   dl = (png_int_32)(data_length / entry_size);
-   max_dl = PNG_SIZE_MAX / (sizeof (png_sPLT_entry));
-
-   if (dl > max_dl)
-   {
-       png_warning(png_ptr, "sPLT chunk too long");
-       return;
-   }
-
-   new_palette.nentries = (png_int_32)(data_length / entry_size);
-
-   new_palette.entries = (png_sPLT_entryp)png_malloc_warn(
-       png_ptr, new_palette.nentries * (sizeof (png_sPLT_entry)));
-
-   if (new_palette.entries == NULL)
-   {
-       png_warning(png_ptr, "sPLT chunk requires too much memory");
-       return;
-   }
-
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (i = 0; i < new_palette.nentries; i++)
-   {
-      pp = new_palette.entries + i;
-
-      if (new_palette.depth == 8)
-      {
-         pp->red = *entry_start++;
-         pp->green = *entry_start++;
-         pp->blue = *entry_start++;
-         pp->alpha = *entry_start++;
-      }
-
-      else
-      {
-         pp->red   = png_get_uint_16(entry_start); entry_start += 2;
-         pp->green = png_get_uint_16(entry_start); entry_start += 2;
-         pp->blue  = png_get_uint_16(entry_start); entry_start += 2;
-         pp->alpha = png_get_uint_16(entry_start); entry_start += 2;
-      }
-
-      pp->frequency = png_get_uint_16(entry_start); entry_start += 2;
-   }
-#else
-   pp = new_palette.entries;
-
-   for (i = 0; i < new_palette.nentries; i++)
-   {
-
-      if (new_palette.depth == 8)
-      {
-         pp[i].red   = *entry_start++;
-         pp[i].green = *entry_start++;
-         pp[i].blue  = *entry_start++;
-         pp[i].alpha = *entry_start++;
-      }
-
-      else
-      {
-         pp[i].red   = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].green = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].blue  = png_get_uint_16(entry_start); entry_start += 2;
-         pp[i].alpha = png_get_uint_16(entry_start); entry_start += 2;
-      }
-
-      pp[i].frequency = png_get_uint_16(entry_start); entry_start += 2;
-   }
-#endif
-
-   /* Discard all chunk data except the name and stash that */
-   new_palette.name = (png_charp)buffer;
-
-   png_set_sPLT(png_ptr, info_ptr, &new_palette, 1);
-
-   png_free(png_ptr, new_palette.entries);
-}
-#endif /* READ_sPLT */
-
-#ifdef PNG_READ_tRNS_SUPPORTED
-void /* PRIVATE */
-png_handle_tRNS(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte readbuf[PNG_MAX_PALETTE_LENGTH];
-
-   png_debug(1, "in png_handle_tRNS");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      png_byte buf[2];
-
-      if (length != 2)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, buf, 2);
-      png_ptr->num_trans = 1;
-      png_ptr->trans_color.gray = png_get_uint_16(buf);
-   }
-
-   else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
-   {
-      png_byte buf[6];
-
-      if (length != 6)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, buf, length);
-      png_ptr->num_trans = 1;
-      png_ptr->trans_color.red = png_get_uint_16(buf);
-      png_ptr->trans_color.green = png_get_uint_16(buf + 2);
-      png_ptr->trans_color.blue = png_get_uint_16(buf + 4);
-   }
-
-   else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if ((png_ptr->mode & PNG_HAVE_PLTE) == 0)
-      {
-         /* TODO: is this actually an error in the ISO spec? */
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "out of place");
-         return;
-      }
-
-      if (length > png_ptr->num_palette || length > PNG_MAX_PALETTE_LENGTH ||
-         length == 0)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "invalid");
-         return;
-      }
-
-      png_crc_read(png_ptr, readbuf, length);
-      png_ptr->num_trans = (png_uint_16)length;
-   }
-
-   else
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid with alpha channel");
-      return;
-   }
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-   {
-      png_ptr->num_trans = 0;
-      return;
-   }
-
-   /* TODO: this is a horrible side effect in the palette case because the
-    * png_struct ends up with a pointer to the tRNS buffer owned by the
-    * png_info.  Fix this.
-    */
-   png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans,
-       &(png_ptr->trans_color));
-}
-#endif
-
-#ifdef PNG_READ_bKGD_SUPPORTED
-void /* PRIVATE */
-png_handle_bKGD(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int truelen;
-   png_byte buf[6];
-   png_color_16 background;
-
-   png_debug(1, "in png_handle_bKGD");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0 ||
-       (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
-       (png_ptr->mode & PNG_HAVE_PLTE) == 0))
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      truelen = 1;
-
-   else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-      truelen = 6;
-
-   else
-      truelen = 2;
-
-   if (length != truelen)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, truelen);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   /* We convert the index value into RGB components so that we can allow
-    * arbitrary RGB values for background when we have transparency, and
-    * so it is easy to determine the RGB values of the background color
-    * from the info_ptr struct.
-    */
-   if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      background.index = buf[0];
-
-      if (info_ptr != NULL && info_ptr->num_palette != 0)
-      {
-         if (buf[0] >= info_ptr->num_palette)
-         {
-            png_chunk_benign_error(png_ptr, "invalid index");
-            return;
-         }
-
-         background.red = (png_uint_16)png_ptr->palette[buf[0]].red;
-         background.green = (png_uint_16)png_ptr->palette[buf[0]].green;
-         background.blue = (png_uint_16)png_ptr->palette[buf[0]].blue;
-      }
-
-      else
-         background.red = background.green = background.blue = 0;
-
-      background.gray = 0;
-   }
-
-   else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0) /* GRAY */
-   {
-      background.index = 0;
-      background.red =
-      background.green =
-      background.blue =
-      background.gray = png_get_uint_16(buf);
-   }
-
-   else
-   {
-      background.index = 0;
-      background.red = png_get_uint_16(buf);
-      background.green = png_get_uint_16(buf + 2);
-      background.blue = png_get_uint_16(buf + 4);
-      background.gray = 0;
-   }
-
-   png_set_bKGD(png_ptr, info_ptr, &background);
-}
-#endif
-
-#ifdef PNG_READ_hIST_SUPPORTED
-void /* PRIVATE */
-png_handle_hIST(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   unsigned int num, i;
-   png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH];
-
-   png_debug(1, "in png_handle_hIST");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0 ||
-       (png_ptr->mode & PNG_HAVE_PLTE) == 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   num = length / 2 ;
-
-   if (num != png_ptr->num_palette || num > PNG_MAX_PALETTE_LENGTH)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   for (i = 0; i < num; i++)
-   {
-      png_byte buf[2];
-
-      png_crc_read(png_ptr, buf, 2);
-      readbuf[i] = png_get_uint_16(buf);
-   }
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   png_set_hIST(png_ptr, info_ptr, readbuf);
-}
-#endif
-
-#ifdef PNG_READ_pHYs_SUPPORTED
-void /* PRIVATE */
-png_handle_pHYs(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[9];
-   png_uint_32 res_x, res_y;
-   int unit_type;
-
-   png_debug(1, "in png_handle_pHYs");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (length != 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 9);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   res_x = png_get_uint_32(buf);
-   res_y = png_get_uint_32(buf + 4);
-   unit_type = buf[8];
-   png_set_pHYs(png_ptr, info_ptr, res_x, res_y, unit_type);
-}
-#endif
-
-#ifdef PNG_READ_oFFs_SUPPORTED
-void /* PRIVATE */
-png_handle_oFFs(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[9];
-   png_int_32 offset_x, offset_y;
-   int unit_type;
-
-   png_debug(1, "in png_handle_oFFs");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if (length != 9)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 9);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   offset_x = png_get_int_32(buf);
-   offset_y = png_get_int_32(buf + 4);
-   unit_type = buf[8];
-   png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, unit_type);
-}
-#endif
-
-#ifdef PNG_READ_pCAL_SUPPORTED
-/* Read the pCAL chunk (described in the PNG Extensions document) */
-void /* PRIVATE */
-png_handle_pCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_int_32 X0, X1;
-   png_byte type, nparams;
-   png_bytep buffer, buf, units, endptr;
-   png_charpp params;
-   int i;
-
-   png_debug(1, "in png_handle_pCAL");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   png_debug1(2, "Allocating and reading pCAL chunk data (%u bytes)",
-       length + 1);
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   buffer[length] = 0; /* Null terminate the last string */
-
-   png_debug(3, "Finding end of pCAL purpose string");
-   for (buf = buffer; *buf; buf++)
-      /* Empty loop */ ;
-
-   endptr = buffer + length;
-
-   /* We need to have at least 12 bytes after the purpose string
-    * in order to get the parameter information.
-    */
-   if (endptr <= buf + 12)
-   {
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_debug(3, "Reading pCAL X0, X1, type, nparams, and units");
-   X0 = png_get_int_32((png_bytep)buf+1);
-   X1 = png_get_int_32((png_bytep)buf+5);
-   type = buf[9];
-   nparams = buf[10];
-   units = buf + 11;
-
-   png_debug(3, "Checking pCAL equation type and number of parameters");
-   /* Check that we have the right number of parameters for known
-    * equation types.
-    */
-   if ((type == PNG_EQUATION_LINEAR && nparams != 2) ||
-       (type == PNG_EQUATION_BASE_E && nparams != 3) ||
-       (type == PNG_EQUATION_ARBITRARY && nparams != 3) ||
-       (type == PNG_EQUATION_HYPERBOLIC && nparams != 4))
-   {
-      png_chunk_benign_error(png_ptr, "invalid parameter count");
-      return;
-   }
-
-   else if (type >= PNG_EQUATION_LAST)
-   {
-      png_chunk_benign_error(png_ptr, "unrecognized equation type");
-   }
-
-   for (buf = units; *buf; buf++)
-      /* Empty loop to move past the units string. */ ;
-
-   png_debug(3, "Allocating pCAL parameters array");
-
-   params = png_voidcast(png_charpp, png_malloc_warn(png_ptr,
-       nparams * (sizeof (png_charp))));
-
-   if (params == NULL)
-   {
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   /* Get pointers to the start of each parameter string. */
-   for (i = 0; i < nparams; i++)
-   {
-      buf++; /* Skip the null string terminator from previous parameter. */
-
-      png_debug1(3, "Reading pCAL parameter %d", i);
-
-      for (params[i] = (png_charp)buf; buf <= endptr && *buf != 0; buf++)
-         /* Empty loop to move past each parameter string */ ;
-
-      /* Make sure we haven't run out of data yet */
-      if (buf > endptr)
-      {
-         png_free(png_ptr, params);
-         png_chunk_benign_error(png_ptr, "invalid data");
-         return;
-      }
-   }
-
-   png_set_pCAL(png_ptr, info_ptr, (png_charp)buffer, X0, X1, type, nparams,
-      (png_charp)units, params);
-
-   png_free(png_ptr, params);
-}
-#endif
-
-#ifdef PNG_READ_sCAL_SUPPORTED
-/* Read the sCAL chunk */
-void /* PRIVATE */
-png_handle_sCAL(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_bytep buffer;
-   png_size_t i;
-   int state;
-
-   png_debug(1, "in png_handle_sCAL");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of place");
-      return;
-   }
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_sCAL) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   /* Need unit type, width, \0, height: minimum 4 bytes */
-   else if (length < 4)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_debug1(2, "Allocating and reading sCAL chunk data (%u bytes)",
-      length + 1);
-
-   buffer = png_read_buffer(png_ptr, length+1, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_chunk_benign_error(png_ptr, "out of memory");
-      png_crc_finish(png_ptr, length);
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-   buffer[length] = 0; /* Null terminate the last string */
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   /* Validate the unit. */
-   if (buffer[0] != 1 && buffer[0] != 2)
-   {
-      png_chunk_benign_error(png_ptr, "invalid unit");
-      return;
-   }
-
-   /* Validate the ASCII numbers, need two ASCII numbers separated by
-    * a '\0' and they need to fit exactly in the chunk data.
-    */
-   i = 1;
-   state = 0;
-
-   if (png_check_fp_number((png_const_charp)buffer, length, &state, &i) == 0 ||
-       i >= length || buffer[i++] != 0)
-      png_chunk_benign_error(png_ptr, "bad width format");
-
-   else if (PNG_FP_IS_POSITIVE(state) == 0)
-      png_chunk_benign_error(png_ptr, "non-positive width");
-
-   else
-   {
-      png_size_t heighti = i;
-
-      state = 0;
-      if (png_check_fp_number((png_const_charp)buffer, length,
-          &state, &i) == 0 || i != length)
-         png_chunk_benign_error(png_ptr, "bad height format");
-
-      else if (PNG_FP_IS_POSITIVE(state) == 0)
-         png_chunk_benign_error(png_ptr, "non-positive height");
-
-      else
-         /* This is the (only) success case. */
-         png_set_sCAL_s(png_ptr, info_ptr, buffer[0],
-            (png_charp)buffer+1, (png_charp)buffer+heighti);
-   }
-}
-#endif
-
-#ifdef PNG_READ_tIME_SUPPORTED
-void /* PRIVATE */
-png_handle_tIME(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_byte buf[7];
-   png_time mod_time;
-
-   png_debug(1, "in png_handle_tIME");
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   else if (info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME) != 0)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "duplicate");
-      return;
-   }
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   if (length != 7)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "invalid");
-      return;
-   }
-
-   png_crc_read(png_ptr, buf, 7);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   mod_time.second = buf[6];
-   mod_time.minute = buf[5];
-   mod_time.hour = buf[4];
-   mod_time.day = buf[3];
-   mod_time.month = buf[2];
-   mod_time.year = png_get_uint_16(buf);
-
-   png_set_tIME(png_ptr, info_ptr, &mod_time);
-}
-#endif
-
-#ifdef PNG_READ_tEXt_SUPPORTED
-/* Note: this does not properly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_tEXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_text  text_info;
-   png_bytep buffer;
-   png_charp key;
-   png_charp text;
-   png_uint_32 skip = 0;
-
-   png_debug(1, "in png_handle_tEXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (length > 65535U)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "too large to fit in memory");
-      return;
-   }
-#endif
-
-   buffer = png_read_buffer(png_ptr, length+1, 1/*warn*/);
-
-   if (buffer == NULL)
-   {
-     png_chunk_benign_error(png_ptr, "out of memory");
-     return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, skip) != 0)
-      return;
-
-   key = (png_charp)buffer;
-   key[length] = 0;
-
-   for (text = key; *text; text++)
-      /* Empty loop to find end of key */ ;
-
-   if (text != key + length)
-      text++;
-
-   text_info.compression = PNG_TEXT_COMPRESSION_NONE;
-   text_info.key = key;
-   text_info.lang = NULL;
-   text_info.lang_key = NULL;
-   text_info.itxt_length = 0;
-   text_info.text = text;
-   text_info.text_length = strlen(text);
-
-   if (png_set_text_2(png_ptr, info_ptr, &text_info, 1) != 0)
-      png_warning(png_ptr, "Insufficient memory to process text chunk");
-}
-#endif
-
-#ifdef PNG_READ_zTXt_SUPPORTED
-/* Note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_zTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_const_charp errmsg = NULL;
-   png_bytep       buffer;
-   png_uint_32     keyword_length;
-
-   png_debug(1, "in png_handle_zTXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   buffer = png_read_buffer(png_ptr, length, 2/*silent*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   /* TODO: also check that the keyword contents match the spec! */
-   for (keyword_length = 0;
-      keyword_length < length && buffer[keyword_length] != 0;
-      ++keyword_length)
-      /* Empty loop to find end of name */ ;
-
-   if (keyword_length > 79 || keyword_length < 1)
-      errmsg = "bad keyword";
-
-   /* zTXt must have some LZ data after the keyword, although it may expand to
-    * zero bytes; we need a '\0' at the end of the keyword, the compression type
-    * then the LZ data:
-    */
-   else if (keyword_length + 3 > length)
-      errmsg = "truncated";
-
-   else if (buffer[keyword_length+1] != PNG_COMPRESSION_TYPE_BASE)
-      errmsg = "unknown compression type";
-
-   else
-   {
-      png_alloc_size_t uncompressed_length = PNG_SIZE_MAX;
-
-      /* TODO: at present png_decompress_chunk imposes a single application
-       * level memory limit, this should be split to different values for iCCP
-       * and text chunks.
-       */
-      if (png_decompress_chunk(png_ptr, length, keyword_length+2,
-         &uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
-      {
-         png_text text;
-
-         /* It worked; png_ptr->read_buffer now looks like a tEXt chunk except
-          * for the extra compression type byte and the fact that it isn't
-          * necessarily '\0' terminated.
-          */
-         buffer = png_ptr->read_buffer;
-         buffer[uncompressed_length+(keyword_length+2)] = 0;
-
-         text.compression = PNG_TEXT_COMPRESSION_zTXt;
-         text.key = (png_charp)buffer;
-         text.text = (png_charp)(buffer + keyword_length+2);
-         text.text_length = uncompressed_length;
-         text.itxt_length = 0;
-         text.lang = NULL;
-         text.lang_key = NULL;
-
-         if (png_set_text_2(png_ptr, info_ptr, &text, 1) != 0)
-            errmsg = "insufficient memory";
-      }
-
-      else
-         errmsg = png_ptr->zstream.msg;
-   }
-
-   if (errmsg != NULL)
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif
-
-#ifdef PNG_READ_iTXt_SUPPORTED
-/* Note: this does not correctly handle chunks that are > 64K under DOS */
-void /* PRIVATE */
-png_handle_iTXt(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
-{
-   png_const_charp errmsg = NULL;
-   png_bytep buffer;
-   png_uint_32 prefix_length;
-
-   png_debug(1, "in png_handle_iTXt");
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   if (png_ptr->user_chunk_cache_max != 0)
-   {
-      if (png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         return;
-      }
-
-      if (--png_ptr->user_chunk_cache_max == 1)
-      {
-         png_crc_finish(png_ptr, length);
-         png_chunk_benign_error(png_ptr, "no space in chunk cache");
-         return;
-      }
-   }
-#endif
-
-   if ((png_ptr->mode & PNG_HAVE_IHDR) == 0)
-      png_chunk_error(png_ptr, "missing IHDR");
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) != 0)
-      png_ptr->mode |= PNG_AFTER_IDAT;
-
-   buffer = png_read_buffer(png_ptr, length+1, 1/*warn*/);
-
-   if (buffer == NULL)
-   {
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "out of memory");
-      return;
-   }
-
-   png_crc_read(png_ptr, buffer, length);
-
-   if (png_crc_finish(png_ptr, 0) != 0)
-      return;
-
-   /* First the keyword. */
-   for (prefix_length=0;
-      prefix_length < length && buffer[prefix_length] != 0;
-      ++prefix_length)
-      /* Empty loop */ ;
-
-   /* Perform a basic check on the keyword length here. */
-   if (prefix_length > 79 || prefix_length < 1)
-      errmsg = "bad keyword";
-
-   /* Expect keyword, compression flag, compression type, language, translated
-    * keyword (both may be empty but are 0 terminated) then the text, which may
-    * be empty.
-    */
-   else if (prefix_length + 5 > length)
-      errmsg = "truncated";
-
-   else if (buffer[prefix_length+1] == 0 ||
-      (buffer[prefix_length+1] == 1 &&
-      buffer[prefix_length+2] == PNG_COMPRESSION_TYPE_BASE))
-   {
-      int compressed = buffer[prefix_length+1] != 0;
-      png_uint_32 language_offset, translated_keyword_offset;
-      png_alloc_size_t uncompressed_length = 0;
-
-      /* Now the language tag */
-      prefix_length += 3;
-      language_offset = prefix_length;
-
-      for (; prefix_length < length && buffer[prefix_length] != 0;
-         ++prefix_length)
-         /* Empty loop */ ;
-
-      /* WARNING: the length may be invalid here, this is checked below. */
-      translated_keyword_offset = ++prefix_length;
-
-      for (; prefix_length < length && buffer[prefix_length] != 0;
-         ++prefix_length)
-         /* Empty loop */ ;
-
-      /* prefix_length should now be at the trailing '\0' of the translated
-       * keyword, but it may already be over the end.  None of this arithmetic
-       * can overflow because chunks are at most 2^31 bytes long, but on 16-bit
-       * systems the available allocation may overflow.
-       */
-      ++prefix_length;
-
-      if (compressed == 0 && prefix_length <= length)
-         uncompressed_length = length - prefix_length;
-
-      else if (compressed != 0 && prefix_length < length)
-      {
-         uncompressed_length = PNG_SIZE_MAX;
-
-         /* TODO: at present png_decompress_chunk imposes a single application
-          * level memory limit, this should be split to different values for
-          * iCCP and text chunks.
-          */
-         if (png_decompress_chunk(png_ptr, length, prefix_length,
-            &uncompressed_length, 1/*terminate*/) == Z_STREAM_END)
-            buffer = png_ptr->read_buffer;
-
-         else
-            errmsg = png_ptr->zstream.msg;
-      }
-
-      else
-         errmsg = "truncated";
-
-      if (errmsg == NULL)
-      {
-         png_text text;
-
-         buffer[uncompressed_length+prefix_length] = 0;
-
-         if (compressed == 0)
-            text.compression = PNG_ITXT_COMPRESSION_NONE;
-
-         else
-            text.compression = PNG_ITXT_COMPRESSION_zTXt;
-
-         text.key = (png_charp)buffer;
-         text.lang = (png_charp)buffer + language_offset;
-         text.lang_key = (png_charp)buffer + translated_keyword_offset;
-         text.text = (png_charp)buffer + prefix_length;
-         text.text_length = 0;
-         text.itxt_length = uncompressed_length;
-
-         if (png_set_text_2(png_ptr, info_ptr, &text, 1) != 0)
-            errmsg = "insufficient memory";
-      }
-   }
-
-   else
-      errmsg = "bad compression info";
-
-   if (errmsg != NULL)
-      png_chunk_benign_error(png_ptr, errmsg);
-}
-#endif
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-/* Utility function for png_handle_unknown; set up png_ptr::unknown_chunk */
-static int
-png_cache_unknown_chunk(png_structrp png_ptr, png_uint_32 length)
-{
-   png_alloc_size_t limit = PNG_SIZE_MAX;
-
-   if (png_ptr->unknown_chunk.data != NULL)
-   {
-      png_free(png_ptr, png_ptr->unknown_chunk.data);
-      png_ptr->unknown_chunk.data = NULL;
-   }
-
-#  ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-      if (png_ptr->user_chunk_malloc_max > 0 &&
-          png_ptr->user_chunk_malloc_max < limit)
-         limit = png_ptr->user_chunk_malloc_max;
-
-#  elif PNG_USER_CHUNK_MALLOC_MAX > 0
-      if (PNG_USER_CHUNK_MALLOC_MAX < limit)
-         limit = PNG_USER_CHUNK_MALLOC_MAX;
-#  endif
-
-   if (length <= limit)
-   {
-      PNG_CSTRING_FROM_CHUNK(png_ptr->unknown_chunk.name, png_ptr->chunk_name);
-      /* The following is safe because of the PNG_SIZE_MAX init above */
-      png_ptr->unknown_chunk.size = (png_size_t)length/*SAFE*/;
-      /* 'mode' is a flag array, only the bottom four bits matter here */
-      png_ptr->unknown_chunk.location = (png_byte)png_ptr->mode/*SAFE*/;
-
-      if (length == 0)
-         png_ptr->unknown_chunk.data = NULL;
-
-      else
-      {
-         /* Do a 'warn' here - it is handled below. */
-         png_ptr->unknown_chunk.data = png_voidcast(png_bytep,
-            png_malloc_warn(png_ptr, length));
-      }
-   }
-
-   if (png_ptr->unknown_chunk.data == NULL && length > 0)
-   {
-      /* This is benign because we clean up correctly */
-      png_crc_finish(png_ptr, length);
-      png_chunk_benign_error(png_ptr, "unknown chunk exceeds memory limits");
-      return 0;
-   }
-
-   else
-   {
-      if (length > 0)
-         png_crc_read(png_ptr, png_ptr->unknown_chunk.data, length);
-      png_crc_finish(png_ptr, 0);
-      return 1;
-   }
-}
-#endif /* READ_UNKNOWN_CHUNKS */
-
-/* Handle an unknown, or known but disabled, chunk */
-void /* PRIVATE */
-png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
-   png_uint_32 length, int keep)
-{
-   int handled = 0; /* the chunk was handled */
-
-   png_debug(1, "in png_handle_unknown");
-
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-   /* NOTE: this code is based on the code in libpng-1.4.12 except for fixing
-    * the bug which meant that setting a non-default behavior for a specific
-    * chunk would be ignored (the default was always used unless a user
-    * callback was installed).
-    *
-    * 'keep' is the value from the png_chunk_unknown_handling, the setting for
-    * this specific chunk_name, if PNG_HANDLE_AS_UNKNOWN_SUPPORTED, if not it
-    * will always be PNG_HANDLE_CHUNK_AS_DEFAULT and it needs to be set here.
-    * This is just an optimization to avoid multiple calls to the lookup
-    * function.
-    */
-#  ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-#     ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-         keep = png_chunk_unknown_handling(png_ptr, png_ptr->chunk_name);
-#     endif
-#  endif
-
-   /* One of the following methods will read the chunk or skip it (at least one
-    * of these is always defined because this is the only way to switch on
-    * PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
-    */
-#  ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-      /* The user callback takes precedence over the chunk keep value, but the
-       * keep value is still required to validate a save of a critical chunk.
-       */
-      if (png_ptr->read_user_chunk_fn != NULL)
-      {
-         if (png_cache_unknown_chunk(png_ptr, length) != 0)
-         {
-            /* Callback to user unknown chunk handler */
-            int ret = (*(png_ptr->read_user_chunk_fn))(png_ptr,
-               &png_ptr->unknown_chunk);
-
-            /* ret is:
-             * negative: An error occured, png_chunk_error will be called.
-             *     zero: The chunk was not handled, the chunk will be discarded
-             *           unless png_set_keep_unknown_chunks has been used to set
-             *           a 'keep' behavior for this particular chunk, in which
-             *           case that will be used.  A critical chunk will cause an
-             *           error at this point unless it is to be saved.
-             * positive: The chunk was handled, libpng will ignore/discard it.
-             */
-            if (ret < 0)
-               png_chunk_error(png_ptr, "error in user chunk");
-
-            else if (ret == 0)
-            {
-               /* If the keep value is 'default' or 'never' override it, but
-                * still error out on critical chunks unless the keep value is
-                * 'always'  While this is weird it is the behavior in 1.4.12.
-                * A possible improvement would be to obey the value set for the
-                * chunk, but this would be an API change that would probably
-                * damage some applications.
-                *
-                * The png_app_warning below catches the case that matters, where
-                * the application has not set specific save or ignore for this
-                * chunk or global save or ignore.
-                */
-               if (keep < PNG_HANDLE_CHUNK_IF_SAFE)
-               {
-#                 ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-                     if (png_ptr->unknown_default < PNG_HANDLE_CHUNK_IF_SAFE)
-                     {
-                        png_chunk_warning(png_ptr, "Saving unknown chunk:");
-                        png_app_warning(png_ptr,
-                           "forcing save of an unhandled chunk;"
-                           " please call png_set_keep_unknown_chunks");
-                           /* with keep = PNG_HANDLE_CHUNK_IF_SAFE */
-                     }
-#                 endif
-                  keep = PNG_HANDLE_CHUNK_IF_SAFE;
-               }
-            }
-
-            else /* chunk was handled */
-            {
-               handled = 1;
-               /* Critical chunks can be safely discarded at this point. */
-               keep = PNG_HANDLE_CHUNK_NEVER;
-            }
-         }
-
-         else
-            keep = PNG_HANDLE_CHUNK_NEVER; /* insufficient memory */
-      }
-
-      else
-         /* Use the SAVE_UNKNOWN_CHUNKS code or skip the chunk */
-#  endif /* READ_USER_CHUNKS */
-
-#  ifdef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
-      {
-         /* keep is currently just the per-chunk setting, if there was no
-          * setting change it to the global default now (not that this may
-          * still be AS_DEFAULT) then obtain the cache of the chunk if required,
-          * if not simply skip the chunk.
-          */
-         if (keep == PNG_HANDLE_CHUNK_AS_DEFAULT)
-            keep = png_ptr->unknown_default;
-
-         if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
-            (keep == PNG_HANDLE_CHUNK_IF_SAFE &&
-             PNG_CHUNK_ANCILLARY(png_ptr->chunk_name)))
-         {
-            if (png_cache_unknown_chunk(png_ptr, length) == 0)
-               keep = PNG_HANDLE_CHUNK_NEVER;
-         }
-
-         else
-            png_crc_finish(png_ptr, length);
-      }
-#  else
-#     ifndef PNG_READ_USER_CHUNKS_SUPPORTED
-#        error no method to support READ_UNKNOWN_CHUNKS
-#     endif
-
-      {
-         /* If here there is no read callback pointer set and no support is
-          * compiled in to just save the unknown chunks, so simply skip this
-          * chunk.  If 'keep' is something other than AS_DEFAULT or NEVER then
-          * the app has erroneously asked for unknown chunk saving when there
-          * is no support.
-          */
-         if (keep > PNG_HANDLE_CHUNK_NEVER)
-            png_app_error(png_ptr, "no unknown chunk support available");
-
-         png_crc_finish(png_ptr, length);
-      }
-#  endif
-
-#  ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-      /* Now store the chunk in the chunk list if appropriate, and if the limits
-       * permit it.
-       */
-      if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
-         (keep == PNG_HANDLE_CHUNK_IF_SAFE &&
-          PNG_CHUNK_ANCILLARY(png_ptr->chunk_name)))
-      {
-#     ifdef PNG_USER_LIMITS_SUPPORTED
-         switch (png_ptr->user_chunk_cache_max)
-         {
-            case 2:
-               png_ptr->user_chunk_cache_max = 1;
-               png_chunk_benign_error(png_ptr, "no space in chunk cache");
-               /* FALL THROUGH */
-            case 1:
-               /* NOTE: prior to 1.6.0 this case resulted in an unknown critical
-                * chunk being skipped, now there will be a hard error below.
-                */
-               break;
-
-            default: /* not at limit */
-               --(png_ptr->user_chunk_cache_max);
-               /* FALL THROUGH */
-            case 0: /* no limit */
-#     endif /* USER_LIMITS */
-               /* Here when the limit isn't reached or when limits are compiled
-                * out; store the chunk.
-                */
-               png_set_unknown_chunks(png_ptr, info_ptr,
-                  &png_ptr->unknown_chunk, 1);
-               handled = 1;
-#     ifdef PNG_USER_LIMITS_SUPPORTED
-               break;
-         }
-#     endif
-      }
-#  else /* no store support: the chunk must be handled by the user callback */
-      PNG_UNUSED(info_ptr)
-#  endif
-
-   /* Regardless of the error handling below the cached data (if any) can be
-    * freed now.  Notice that the data is not freed if there is a png_error, but
-    * it will be freed by destroy_read_struct.
-    */
-   if (png_ptr->unknown_chunk.data != NULL)
-      png_free(png_ptr, png_ptr->unknown_chunk.data);
-   png_ptr->unknown_chunk.data = NULL;
-
-#else /* !PNG_READ_UNKNOWN_CHUNKS_SUPPORTED */
-   /* There is no support to read an unknown chunk, so just skip it. */
-   png_crc_finish(png_ptr, length);
-   PNG_UNUSED(info_ptr)
-   PNG_UNUSED(keep)
-#endif /* !READ_UNKNOWN_CHUNKS */
-
-   /* Check for unhandled critical chunks */
-   if (handled == 0 && PNG_CHUNK_CRITICAL(png_ptr->chunk_name))
-      png_chunk_error(png_ptr, "unhandled critical chunk");
-}
-
-/* This function is called to verify that a chunk name is valid.
- * This function can't have the "critical chunk check" incorporated
- * into it, since in the future we will need to be able to call user
- * functions to handle unknown critical chunks after we check that
- * the chunk name itself is valid.
- */
-
-/* Bit hacking: the test for an invalid byte in the 4 byte chunk name is:
- *
- * ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
- */
-
-void /* PRIVATE */
-png_check_chunk_name(png_structrp png_ptr, png_uint_32 chunk_name)
-{
-   int i;
-
-   png_debug(1, "in png_check_chunk_name");
-
-   for (i=1; i<=4; ++i)
-   {
-      int c = chunk_name & 0xff;
-
-      if (c < 65 || c > 122 || (c > 90 && c < 97))
-         png_chunk_error(png_ptr, "invalid chunk type");
-
-      chunk_name >>= 8;
-   }
-}
-
-/* Combines the row recently read in with the existing pixels in the row.  This
- * routine takes care of alpha and transparency if requested.  This routine also
- * handles the two methods of progressive display of interlaced images,
- * depending on the 'display' value; if 'display' is true then the whole row
- * (dp) is filled from the start by replicating the available pixels.  If
- * 'display' is false only those pixels present in the pass are filled in.
- */
-void /* PRIVATE */
-png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
-{
-   unsigned int pixel_depth = png_ptr->transformed_pixel_depth;
-   png_const_bytep sp = png_ptr->row_buf + 1;
-   png_alloc_size_t row_width = png_ptr->width;
-   unsigned int pass = png_ptr->pass;
-   png_bytep end_ptr = 0;
-   png_byte end_byte = 0;
-   unsigned int end_mask;
-
-   png_debug(1, "in png_combine_row");
-
-   /* Added in 1.5.6: it should not be possible to enter this routine until at
-    * least one row has been read from the PNG data and transformed.
-    */
-   if (pixel_depth == 0)
-      png_error(png_ptr, "internal row logic error");
-
-   /* Added in 1.5.4: the pixel depth should match the information returned by
-    * any call to png_read_update_info at this point.  Do not continue if we got
-    * this wrong.
-    */
-   if (png_ptr->info_rowbytes != 0 && png_ptr->info_rowbytes !=
-          PNG_ROWBYTES(pixel_depth, row_width))
-      png_error(png_ptr, "internal row size calculation error");
-
-   /* Don't expect this to ever happen: */
-   if (row_width == 0)
-      png_error(png_ptr, "internal row width error");
-
-   /* Preserve the last byte in cases where only part of it will be overwritten,
-    * the multiply below may overflow, we don't care because ANSI-C guarantees
-    * we get the low bits.
-    */
-   end_mask = (pixel_depth * row_width) & 7;
-   if (end_mask != 0)
-   {
-      /* end_ptr == NULL is a flag to say do nothing */
-      end_ptr = dp + PNG_ROWBYTES(pixel_depth, row_width) - 1;
-      end_byte = *end_ptr;
-#     ifdef PNG_READ_PACKSWAP_SUPPORTED
-         if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-            /* little-endian byte */
-            end_mask = 0xff << end_mask;
-
-         else /* big-endian byte */
-#     endif
-         end_mask = 0xff >> end_mask;
-      /* end_mask is now the bits to *keep* from the destination row */
-   }
-
-   /* For non-interlaced images this reduces to a memcpy(). A memcpy()
-    * will also happen if interlacing isn't supported or if the application
-    * does not call png_set_interlace_handling().  In the latter cases the
-    * caller just gets a sequence of the unexpanded rows from each interlace
-    * pass.
-    */
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-   if (png_ptr->interlaced != 0 &&
-       (png_ptr->transformations & PNG_INTERLACE) != 0 &&
-       pass < 6 && (display == 0 ||
-       /* The following copies everything for 'display' on passes 0, 2 and 4. */
-       (display == 1 && (pass & 1) != 0)))
-   {
-      /* Narrow images may have no bits in a pass; the caller should handle
-       * this, but this test is cheap:
-       */
-      if (row_width <= PNG_PASS_START_COL(pass))
-         return;
-
-      if (pixel_depth < 8)
-      {
-         /* For pixel depths up to 4 bpp the 8-pixel mask can be expanded to fit
-          * into 32 bits, then a single loop over the bytes using the four byte
-          * values in the 32-bit mask can be used.  For the 'display' option the
-          * expanded mask may also not require any masking within a byte.  To
-          * make this work the PACKSWAP option must be taken into account - it
-          * simply requires the pixels to be reversed in each byte.
-          *
-          * The 'regular' case requires a mask for each of the first 6 passes,
-          * the 'display' case does a copy for the even passes in the range
-          * 0..6.  This has already been handled in the test above.
-          *
-          * The masks are arranged as four bytes with the first byte to use in
-          * the lowest bits (little-endian) regardless of the order (PACKSWAP or
-          * not) of the pixels in each byte.
-          *
-          * NOTE: the whole of this logic depends on the caller of this function
-          * only calling it on rows appropriate to the pass.  This function only
-          * understands the 'x' logic; the 'y' logic is handled by the caller.
-          *
-          * The following defines allow generation of compile time constant bit
-          * masks for each pixel depth and each possibility of swapped or not
-          * swapped bytes.  Pass 'p' is in the range 0..6; 'x', a pixel index,
-          * is in the range 0..7; and the result is 1 if the pixel is to be
-          * copied in the pass, 0 if not.  'S' is for the sparkle method, 'B'
-          * for the block method.
-          *
-          * With some compilers a compile time expression of the general form:
-          *
-          *    (shift >= 32) ? (a >> (shift-32)) : (b >> shift)
-          *
-          * Produces warnings with values of 'shift' in the range 33 to 63
-          * because the right hand side of the ?: expression is evaluated by
-          * the compiler even though it isn't used.  Microsoft Visual C (various
-          * versions) and the Intel C compiler are known to do this.  To avoid
-          * this the following macros are used in 1.5.6.  This is a temporary
-          * solution to avoid destabilizing the code during the release process.
-          */
-#        if PNG_USE_COMPILE_TIME_MASKS
-#           define PNG_LSR(x,s) ((x)>>((s) & 0x1f))
-#           define PNG_LSL(x,s) ((x)<<((s) & 0x1f))
-#        else
-#           define PNG_LSR(x,s) ((x)>>(s))
-#           define PNG_LSL(x,s) ((x)<<(s))
-#        endif
-#        define S_COPY(p,x) (((p)<4 ? PNG_LSR(0x80088822,(3-(p))*8+(7-(x))) :\
-           PNG_LSR(0xaa55ff00,(7-(p))*8+(7-(x)))) & 1)
-#        define B_COPY(p,x) (((p)<4 ? PNG_LSR(0xff0fff33,(3-(p))*8+(7-(x))) :\
-           PNG_LSR(0xff55ff00,(7-(p))*8+(7-(x)))) & 1)
-
-         /* Return a mask for pass 'p' pixel 'x' at depth 'd'.  The mask is
-          * little endian - the first pixel is at bit 0 - however the extra
-          * parameter 's' can be set to cause the mask position to be swapped
-          * within each byte, to match the PNG format.  This is done by XOR of
-          * the shift with 7, 6 or 4 for bit depths 1, 2 and 4.
-          */
-#        define PIXEL_MASK(p,x,d,s) \
-            (PNG_LSL(((PNG_LSL(1U,(d)))-1),(((x)*(d))^((s)?8-(d):0))))
-
-         /* Hence generate the appropriate 'block' or 'sparkle' pixel copy mask.
-          */
-#        define S_MASKx(p,x,d,s) (S_COPY(p,x)?PIXEL_MASK(p,x,d,s):0)
-#        define B_MASKx(p,x,d,s) (B_COPY(p,x)?PIXEL_MASK(p,x,d,s):0)
-
-         /* Combine 8 of these to get the full mask.  For the 1-bpp and 2-bpp
-          * cases the result needs replicating, for the 4-bpp case the above
-          * generates a full 32 bits.
-          */
-#        define MASK_EXPAND(m,d) ((m)*((d)==1?0x01010101:((d)==2?0x00010001:1)))
-
-#        define S_MASK(p,d,s) MASK_EXPAND(S_MASKx(p,0,d,s) + S_MASKx(p,1,d,s) +\
-            S_MASKx(p,2,d,s) + S_MASKx(p,3,d,s) + S_MASKx(p,4,d,s) +\
-            S_MASKx(p,5,d,s) + S_MASKx(p,6,d,s) + S_MASKx(p,7,d,s), d)
-
-#        define B_MASK(p,d,s) MASK_EXPAND(B_MASKx(p,0,d,s) + B_MASKx(p,1,d,s) +\
-            B_MASKx(p,2,d,s) + B_MASKx(p,3,d,s) + B_MASKx(p,4,d,s) +\
-            B_MASKx(p,5,d,s) + B_MASKx(p,6,d,s) + B_MASKx(p,7,d,s), d)
-
-#if PNG_USE_COMPILE_TIME_MASKS
-         /* Utility macros to construct all the masks for a depth/swap
-          * combination.  The 's' parameter says whether the format is PNG
-          * (big endian bytes) or not.  Only the three odd-numbered passes are
-          * required for the display/block algorithm.
-          */
-#        define S_MASKS(d,s) { S_MASK(0,d,s), S_MASK(1,d,s), S_MASK(2,d,s),\
-            S_MASK(3,d,s), S_MASK(4,d,s), S_MASK(5,d,s) }
-
-#        define B_MASKS(d,s) { B_MASK(1,d,s), B_MASK(3,d,s), B_MASK(5,d,s) }
-
-#        define DEPTH_INDEX(d) ((d)==1?0:((d)==2?1:2))
-
-         /* Hence the pre-compiled masks indexed by PACKSWAP (or not), depth and
-          * then pass:
-          */
-         static PNG_CONST png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
-         {
-            /* Little-endian byte masks for PACKSWAP */
-            { S_MASKS(1,0), S_MASKS(2,0), S_MASKS(4,0) },
-            /* Normal (big-endian byte) masks - PNG format */
-            { S_MASKS(1,1), S_MASKS(2,1), S_MASKS(4,1) }
-         };
-
-         /* display_mask has only three entries for the odd passes, so index by
-          * pass>>1.
-          */
-         static PNG_CONST png_uint_32 display_mask[2][3][3] =
-         {
-            /* Little-endian byte masks for PACKSWAP */
-            { B_MASKS(1,0), B_MASKS(2,0), B_MASKS(4,0) },
-            /* Normal (big-endian byte) masks - PNG format */
-            { B_MASKS(1,1), B_MASKS(2,1), B_MASKS(4,1) }
-         };
-
-#        define MASK(pass,depth,display,png)\
-            ((display)?display_mask[png][DEPTH_INDEX(depth)][pass>>1]:\
-               row_mask[png][DEPTH_INDEX(depth)][pass])
-
-#else /* !PNG_USE_COMPILE_TIME_MASKS */
-         /* This is the runtime alternative: it seems unlikely that this will
-          * ever be either smaller or faster than the compile time approach.
-          */
-#        define MASK(pass,depth,display,png)\
-            ((display)?B_MASK(pass,depth,png):S_MASK(pass,depth,png))
-#endif /* !USE_COMPILE_TIME_MASKS */
-
-         /* Use the appropriate mask to copy the required bits.  In some cases
-          * the byte mask will be 0 or 0xff; optimize these cases.  row_width is
-          * the number of pixels, but the code copies bytes, so it is necessary
-          * to special case the end.
-          */
-         png_uint_32 pixels_per_byte = 8 / pixel_depth;
-         png_uint_32 mask;
-
-#        ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-               mask = MASK(pass, pixel_depth, display, 0);
-
-            else
-#        endif
-            mask = MASK(pass, pixel_depth, display, 1);
-
-         for (;;)
-         {
-            png_uint_32 m;
-
-            /* It doesn't matter in the following if png_uint_32 has more than
-             * 32 bits because the high bits always match those in m<<24; it is,
-             * however, essential to use OR here, not +, because of this.
-             */
-            m = mask;
-            mask = (m >> 8) | (m << 24); /* rotate right to good compilers */
-            m &= 0xff;
-
-            if (m != 0) /* something to copy */
-            {
-               if (m != 0xff)
-                  *dp = (png_byte)((*dp & ~m) | (*sp & m));
-               else
-                  *dp = *sp;
-            }
-
-            /* NOTE: this may overwrite the last byte with garbage if the image
-             * is not an exact number of bytes wide; libpng has always done
-             * this.
-             */
-            if (row_width <= pixels_per_byte)
-               break; /* May need to restore part of the last byte */
-
-            row_width -= pixels_per_byte;
-            ++dp;
-            ++sp;
-         }
-      }
-
-      else /* pixel_depth >= 8 */
-      {
-         unsigned int bytes_to_copy, bytes_to_jump;
-
-         /* Validate the depth - it must be a multiple of 8 */
-         if (pixel_depth & 7)
-            png_error(png_ptr, "invalid user transform pixel depth");
-
-         pixel_depth >>= 3; /* now in bytes */
-         row_width *= pixel_depth;
-
-         /* Regardless of pass number the Adam 7 interlace always results in a
-          * fixed number of pixels to copy then to skip.  There may be a
-          * different number of pixels to skip at the start though.
-          */
-         {
-            unsigned int offset = PNG_PASS_START_COL(pass) * pixel_depth;
-
-            row_width -= offset;
-            dp += offset;
-            sp += offset;
-         }
-
-         /* Work out the bytes to copy. */
-         if (display != 0)
-         {
-            /* When doing the 'block' algorithm the pixel in the pass gets
-             * replicated to adjacent pixels.  This is why the even (0,2,4,6)
-             * passes are skipped above - the entire expanded row is copied.
-             */
-            bytes_to_copy = (1<<((6-pass)>>1)) * pixel_depth;
-
-            /* But don't allow this number to exceed the actual row width. */
-            if (bytes_to_copy > row_width)
-               bytes_to_copy = (unsigned int)/*SAFE*/row_width;
-         }
-
-         else /* normal row; Adam7 only ever gives us one pixel to copy. */
-            bytes_to_copy = pixel_depth;
-
-         /* In Adam7 there is a constant offset between where the pixels go. */
-         bytes_to_jump = PNG_PASS_COL_OFFSET(pass) * pixel_depth;
-
-         /* And simply copy these bytes.  Some optimization is possible here,
-          * depending on the value of 'bytes_to_copy'.  Special case the low
-          * byte counts, which we know to be frequent.
-          *
-          * Notice that these cases all 'return' rather than 'break' - this
-          * avoids an unnecessary test on whether to restore the last byte
-          * below.
-          */
-         switch (bytes_to_copy)
-         {
-            case 1:
-               for (;;)
-               {
-                  *dp = *sp;
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  dp += bytes_to_jump;
-                  sp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-
-            case 2:
-               /* There is a possibility of a partial copy at the end here; this
-                * slows the code down somewhat.
-                */
-               do
-               {
-                  dp[0] = sp[0], dp[1] = sp[1];
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-               while (row_width > 1);
-
-               /* And there can only be one byte left at this point: */
-               *dp = *sp;
-               return;
-
-            case 3:
-               /* This can only be the RGB case, so each copy is exactly one
-                * pixel and it is not necessary to check for a partial copy.
-                */
-               for (;;)
-               {
-                  dp[0] = sp[0], dp[1] = sp[1], dp[2] = sp[2];
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-               }
-
-            default:
-#if PNG_ALIGN_TYPE != PNG_ALIGN_NONE
-               /* Check for double byte alignment and, if possible, use a
-                * 16-bit copy.  Don't attempt this for narrow images - ones that
-                * are less than an interlace panel wide.  Don't attempt it for
-                * wide bytes_to_copy either - use the memcpy there.
-                */
-               if (bytes_to_copy < 16 /*else use memcpy*/ &&
-                   png_isaligned(dp, png_uint_16) &&
-                   png_isaligned(sp, png_uint_16) &&
-                   bytes_to_copy % (sizeof (png_uint_16)) == 0 &&
-                   bytes_to_jump % (sizeof (png_uint_16)) == 0)
-               {
-                  /* Everything is aligned for png_uint_16 copies, but try for
-                   * png_uint_32 first.
-                   */
-                  if (png_isaligned(dp, png_uint_32) != 0 &&
-                      png_isaligned(sp, png_uint_32) != 0 &&
-                      bytes_to_copy % (sizeof (png_uint_32)) == 0 &&
-                      bytes_to_jump % (sizeof (png_uint_32)) == 0)
-                  {
-                     png_uint_32p dp32 = png_aligncast(png_uint_32p,dp);
-                     png_const_uint_32p sp32 = png_aligncastconst(
-                         png_const_uint_32p, sp);
-                     size_t skip = (bytes_to_jump-bytes_to_copy) /
-                         (sizeof (png_uint_32));
-
-                     do
-                     {
-                        size_t c = bytes_to_copy;
-                        do
-                        {
-                           *dp32++ = *sp32++;
-                           c -= (sizeof (png_uint_32));
-                        }
-                        while (c > 0);
-
-                        if (row_width <= bytes_to_jump)
-                           return;
-
-                        dp32 += skip;
-                        sp32 += skip;
-                        row_width -= bytes_to_jump;
-                     }
-                     while (bytes_to_copy <= row_width);
-
-                     /* Get to here when the row_width truncates the final copy.
-                      * There will be 1-3 bytes left to copy, so don't try the
-                      * 16-bit loop below.
-                      */
-                     dp = (png_bytep)dp32;
-                     sp = (png_const_bytep)sp32;
-                     do
-                        *dp++ = *sp++;
-                     while (--row_width > 0);
-                     return;
-                  }
-
-                  /* Else do it in 16-bit quantities, but only if the size is
-                   * not too large.
-                   */
-                  else
-                  {
-                     png_uint_16p dp16 = png_aligncast(png_uint_16p, dp);
-                     png_const_uint_16p sp16 = png_aligncastconst(
-                        png_const_uint_16p, sp);
-                     size_t skip = (bytes_to_jump-bytes_to_copy) /
-                        (sizeof (png_uint_16));
-
-                     do
-                     {
-                        size_t c = bytes_to_copy;
-                        do
-                        {
-                           *dp16++ = *sp16++;
-                           c -= (sizeof (png_uint_16));
-                        }
-                        while (c > 0);
-
-                        if (row_width <= bytes_to_jump)
-                           return;
-
-                        dp16 += skip;
-                        sp16 += skip;
-                        row_width -= bytes_to_jump;
-                     }
-                     while (bytes_to_copy <= row_width);
-
-                     /* End of row - 1 byte left, bytes_to_copy > row_width: */
-                     dp = (png_bytep)dp16;
-                     sp = (png_const_bytep)sp16;
-                     do
-                        *dp++ = *sp++;
-                     while (--row_width > 0);
-                     return;
-                  }
-               }
-#endif /* ALIGN_TYPE code */
-
-               /* The true default - use a memcpy: */
-               for (;;)
-               {
-                  memcpy(dp, sp, bytes_to_copy);
-
-                  if (row_width <= bytes_to_jump)
-                     return;
-
-                  sp += bytes_to_jump;
-                  dp += bytes_to_jump;
-                  row_width -= bytes_to_jump;
-                  if (bytes_to_copy > row_width)
-                     bytes_to_copy = (unsigned int)/*SAFE*/row_width;
-               }
-         }
-
-         /* NOT REACHED*/
-      } /* pixel_depth >= 8 */
-
-      /* Here if pixel_depth < 8 to check 'end_ptr' below. */
-   }
-   else
-#endif /* READ_INTERLACING */
-
-   /* If here then the switch above wasn't used so just memcpy the whole row
-    * from the temporary row buffer (notice that this overwrites the end of the
-    * destination row if it is a partial byte.)
-    */
-   memcpy(dp, sp, PNG_ROWBYTES(pixel_depth, row_width));
-
-   /* Restore the overwritten bits from the last byte if necessary. */
-   if (end_ptr != NULL)
-      *end_ptr = (png_byte)((end_byte & end_mask) | (*end_ptr & ~end_mask));
-}
-
-#ifdef PNG_READ_INTERLACING_SUPPORTED
-void /* PRIVATE */
-png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
-   png_uint_32 transformations /* Because these may affect the byte layout */)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-   /* Offset to next interlace block */
-   static PNG_CONST int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   png_debug(1, "in png_do_read_interlace");
-   if (row != NULL && row_info != NULL)
-   {
-      png_uint_32 final_width;
-
-      final_width = row_info->width * png_pass_inc[pass];
-
-      switch (row_info->pixel_depth)
-      {
-         case 1:
-         {
-            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 3);
-            png_bytep dp = row + (png_size_t)((final_width - 1) >> 3);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
-            png_byte v;
-            png_uint_32 i;
-            int j;
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if ((transformations & PNG_PACKSWAP) != 0)
-            {
-                sshift = (int)((row_info->width + 7) & 0x07);
-                dshift = (int)((final_width + 7) & 0x07);
-                s_start = 7;
-                s_end = 0;
-                s_inc = -1;
-            }
-
-            else
-#endif
-            {
-                sshift = 7 - (int)((row_info->width + 7) & 0x07);
-                dshift = 7 - (int)((final_width + 7) & 0x07);
-                s_start = 0;
-                s_end = 7;
-                s_inc = 1;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               v = (png_byte)((*sp >> sshift) & 0x01);
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0x7f7f >> (7 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp = row + (png_uint_32)((row_info->width - 1) >> 2);
-            png_bytep dp = row + (png_uint_32)((final_width - 1) >> 2);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            int jstop = png_pass_inc[pass];
-            png_uint_32 i;
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if ((transformations & PNG_PACKSWAP) != 0)
-            {
-               sshift = (int)(((row_info->width + 3) & 0x03) << 1);
-               dshift = (int)(((final_width + 3) & 0x03) << 1);
-               s_start = 6;
-               s_end = 0;
-               s_inc = -2;
-            }
-
-            else
-#endif
-            {
-               sshift = (int)((3 - ((row_info->width + 3) & 0x03)) << 1);
-               dshift = (int)((3 - ((final_width + 3) & 0x03)) << 1);
-               s_start = 0;
-               s_end = 6;
-               s_inc = 2;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v;
-               int j;
-
-               v = (png_byte)((*sp >> sshift) & 0x03);
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0x3f3f >> (6 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp = row + (png_size_t)((row_info->width - 1) >> 1);
-            png_bytep dp = row + (png_size_t)((final_width - 1) >> 1);
-            int sshift, dshift;
-            int s_start, s_end, s_inc;
-            png_uint_32 i;
-            int jstop = png_pass_inc[pass];
-
-#ifdef PNG_READ_PACKSWAP_SUPPORTED
-            if ((transformations & PNG_PACKSWAP) != 0)
-            {
-               sshift = (int)(((row_info->width + 1) & 0x01) << 2);
-               dshift = (int)(((final_width + 1) & 0x01) << 2);
-               s_start = 4;
-               s_end = 0;
-               s_inc = -4;
-            }
-
-            else
-#endif
-            {
-               sshift = (int)((1 - ((row_info->width + 1) & 0x01)) << 2);
-               dshift = (int)((1 - ((final_width + 1) & 0x01)) << 2);
-               s_start = 0;
-               s_end = 4;
-               s_inc = 4;
-            }
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v = (png_byte)((*sp >> sshift) & 0x0f);
-               int j;
-
-               for (j = 0; j < jstop; j++)
-               {
-                  unsigned int tmp = *dp & (0xf0f >> (4 - dshift));
-                  tmp |= v << dshift;
-                  *dp = (png_byte)(tmp & 0xff);
-
-                  if (dshift == s_end)
-                  {
-                     dshift = s_start;
-                     dp--;
-                  }
-
-                  else
-                     dshift += s_inc;
-               }
-
-               if (sshift == s_end)
-               {
-                  sshift = s_start;
-                  sp--;
-               }
-
-               else
-                  sshift += s_inc;
-            }
-            break;
-         }
-
-         default:
-         {
-            png_size_t pixel_bytes = (row_info->pixel_depth >> 3);
-
-            png_bytep sp = row + (png_size_t)(row_info->width - 1)
-                * pixel_bytes;
-
-            png_bytep dp = row + (png_size_t)(final_width - 1) * pixel_bytes;
-
-            int jstop = png_pass_inc[pass];
-            png_uint_32 i;
-
-            for (i = 0; i < row_info->width; i++)
-            {
-               png_byte v[8]; /* SAFE; pixel_depth does not exceed 64 */
-               int j;
-
-               memcpy(v, sp, pixel_bytes);
-
-               for (j = 0; j < jstop; j++)
-               {
-                  memcpy(dp, v, pixel_bytes);
-                  dp -= pixel_bytes;
-               }
-
-               sp -= pixel_bytes;
-            }
-            break;
-         }
-      }
-
-      row_info->width = final_width;
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth, final_width);
-   }
-#ifndef PNG_READ_PACKSWAP_SUPPORTED
-   PNG_UNUSED(transformations)  /* Silence compiler warning */
-#endif
-}
-#endif /* READ_INTERLACING */
-
-static void
-png_read_filter_row_sub(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_size_t istop = row_info->rowbytes;
-   unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_bytep rp = row + bpp;
-
-   PNG_UNUSED(prev_row)
-
-   for (i = bpp; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) + (int)(*(rp-bpp))) & 0xff);
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_up(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_size_t istop = row_info->rowbytes;
-   png_bytep rp = row;
-   png_const_bytep pp = prev_row;
-
-   for (i = 0; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_avg(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_size_t i;
-   png_bytep rp = row;
-   png_const_bytep pp = prev_row;
-   unsigned int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_size_t istop = row_info->rowbytes - bpp;
-
-   for (i = 0; i < bpp; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) +
-         ((int)(*pp++) / 2 )) & 0xff);
-
-      rp++;
-   }
-
-   for (i = 0; i < istop; i++)
-   {
-      *rp = (png_byte)(((int)(*rp) +
-         (int)(*pp++ + *(rp-bpp)) / 2 ) & 0xff);
-
-      rp++;
-   }
-}
-
-static void
-png_read_filter_row_paeth_1byte_pixel(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   png_bytep rp_end = row + row_info->rowbytes;
-   int a, c;
-
-   /* First pixel/byte */
-   c = *prev_row++;
-   a = *row + c;
-   *row++ = (png_byte)a;
-
-   /* Remainder */
-   while (row < rp_end)
-   {
-      int b, pa, pb, pc, p;
-
-      a &= 0xff; /* From previous iteration or start */
-      b = *prev_row++;
-
-      p = b - c;
-      pc = a - c;
-
-#     ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#     else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#     endif
-
-      /* Find the best predictor, the least of pa, pb, pc favoring the earlier
-       * ones in the case of a tie.
-       */
-      if (pb < pa) pa = pb, a = b;
-      if (pc < pa) a = c;
-
-      /* Calculate the current pixel in a, and move the previous row pixel to c
-       * for the next time round the loop
-       */
-      c = b;
-      a += *row;
-      *row++ = (png_byte)a;
-   }
-}
-
-static void
-png_read_filter_row_paeth_multibyte_pixel(png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row)
-{
-   int bpp = (row_info->pixel_depth + 7) >> 3;
-   png_bytep rp_end = row + bpp;
-
-   /* Process the first pixel in the row completely (this is the same as 'up'
-    * because there is only one candidate predictor for the first row).
-    */
-   while (row < rp_end)
-   {
-      int a = *row + *prev_row++;
-      *row++ = (png_byte)a;
-   }
-
-   /* Remainder */
-   rp_end += row_info->rowbytes - bpp;
-
-   while (row < rp_end)
-   {
-      int a, b, c, pa, pb, pc, p;
-
-      c = *(prev_row - bpp);
-      a = *(row - bpp);
-      b = *prev_row++;
-
-      p = b - c;
-      pc = a - c;
-
-#     ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#     else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#     endif
-
-      if (pb < pa) pa = pb, a = b;
-      if (pc < pa) a = c;
-
-      a += *row;
-      *row++ = (png_byte)a;
-   }
-}
-
-static void
-png_init_filter_functions(png_structrp pp)
-   /* This function is called once for every PNG image (except for PNG images
-    * that only use PNG_FILTER_VALUE_NONE for all rows) to set the
-    * implementations required to reverse the filtering of PNG rows.  Reversing
-    * the filter is the first transformation performed on the row data.  It is
-    * performed in place, therefore an implementation can be selected based on
-    * the image pixel format.  If the implementation depends on image width then
-    * take care to ensure that it works correctly if the image is interlaced -
-    * interlacing causes the actual row width to vary.
-    */
-{
-   unsigned int bpp = (pp->pixel_depth + 7) >> 3;
-
-   pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub;
-   pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up;
-   pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg;
-   if (bpp == 1)
-      pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
-         png_read_filter_row_paeth_1byte_pixel;
-   else
-      pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
-         png_read_filter_row_paeth_multibyte_pixel;
-
-#ifdef PNG_FILTER_OPTIMIZATIONS
-   /* To use this define PNG_FILTER_OPTIMIZATIONS as the name of a function to
-    * call to install hardware optimizations for the above functions; simply
-    * replace whatever elements of the pp->read_filter[] array with a hardware
-    * specific (or, for that matter, generic) optimization.
-    *
-    * To see an example of this examine what configure.ac does when
-    * --enable-arm-neon is specified on the command line.
-    */
-   PNG_FILTER_OPTIMIZATIONS(pp, bpp);
-#endif
-}
-
-void /* PRIVATE */
-png_read_filter_row(png_structrp pp, png_row_infop row_info, png_bytep row,
-   png_const_bytep prev_row, int filter)
-{
-   /* OPTIMIZATION: DO NOT MODIFY THIS FUNCTION, instead #define
-    * PNG_FILTER_OPTIMIZATIONS to a function that overrides the generic
-    * implementations.  See png_init_filter_functions above.
-    */
-   if (filter > PNG_FILTER_VALUE_NONE && filter < PNG_FILTER_VALUE_LAST)
-   {
-      if (pp->read_filter[0] == NULL)
-         png_init_filter_functions(pp);
-
-      pp->read_filter[filter-1](row_info, row, prev_row);
-   }
-}
-
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-void /* PRIVATE */
-png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
-   png_alloc_size_t avail_out)
-{
-   /* Loop reading IDATs and decompressing the result into output[avail_out] */
-   png_ptr->zstream.next_out = output;
-   png_ptr->zstream.avail_out = 0; /* safety: set below */
-
-   if (output == NULL)
-      avail_out = 0;
-
-   do
-   {
-      int ret;
-      png_byte tmpbuf[PNG_INFLATE_BUF_SIZE];
-
-      if (png_ptr->zstream.avail_in == 0)
-      {
-         uInt avail_in;
-         png_bytep buffer;
-
-         while (png_ptr->idat_size == 0)
-         {
-            png_crc_finish(png_ptr, 0);
-
-            png_ptr->idat_size = png_read_chunk_header(png_ptr);
-            /* This is an error even in the 'check' case because the code just
-             * consumed a non-IDAT header.
-             */
-            if (png_ptr->chunk_name != png_IDAT)
-               png_error(png_ptr, "Not enough image data");
-         }
-
-         avail_in = png_ptr->IDAT_read_size;
-
-         if (avail_in > png_ptr->idat_size)
-            avail_in = (uInt)png_ptr->idat_size;
-
-         /* A PNG with a gradually increasing IDAT size will defeat this attempt
-          * to minimize memory usage by causing lots of re-allocs, but
-          * realistically doing IDAT_read_size re-allocs is not likely to be a
-          * big problem.
-          */
-         buffer = png_read_buffer(png_ptr, avail_in, 0/*error*/);
-
-         png_crc_read(png_ptr, buffer, avail_in);
-         png_ptr->idat_size -= avail_in;
-
-         png_ptr->zstream.next_in = buffer;
-         png_ptr->zstream.avail_in = avail_in;
-      }
-
-      /* And set up the output side. */
-      if (output != NULL) /* standard read */
-      {
-         uInt out = ZLIB_IO_MAX;
-
-         if (out > avail_out)
-            out = (uInt)avail_out;
-
-         avail_out -= out;
-         png_ptr->zstream.avail_out = out;
-      }
-
-      else /* after last row, checking for end */
-      {
-         png_ptr->zstream.next_out = tmpbuf;
-         png_ptr->zstream.avail_out = (sizeof tmpbuf);
-      }
-
-      /* Use NO_FLUSH; this gives zlib the maximum opportunity to optimize the
-       * process.  If the LZ stream is truncated the sequential reader will
-       * terminally damage the stream, above, by reading the chunk header of the
-       * following chunk (it then exits with png_error).
-       *
-       * TODO: deal more elegantly with truncated IDAT lists.
-       */
-      ret = inflate(&png_ptr->zstream, Z_NO_FLUSH);
-
-      /* Take the unconsumed output back. */
-      if (output != NULL)
-         avail_out += png_ptr->zstream.avail_out;
-
-      else /* avail_out counts the extra bytes */
-         avail_out += (sizeof tmpbuf) - png_ptr->zstream.avail_out;
-
-      png_ptr->zstream.avail_out = 0;
-
-      if (ret == Z_STREAM_END)
-      {
-         /* Do this for safety; we won't read any more into this row. */
-         png_ptr->zstream.next_out = NULL;
-
-         png_ptr->mode |= PNG_AFTER_IDAT;
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-
-         if (png_ptr->zstream.avail_in > 0 || png_ptr->idat_size > 0)
-            png_chunk_benign_error(png_ptr, "Extra compressed data");
-         break;
-      }
-
-      if (ret != Z_OK)
-      {
-         png_zstream_error(png_ptr, ret);
-
-         if (output != NULL)
-            png_chunk_error(png_ptr, png_ptr->zstream.msg);
-
-         else /* checking */
-         {
-            png_chunk_benign_error(png_ptr, png_ptr->zstream.msg);
-            return;
-         }
-      }
-   } while (avail_out > 0);
-
-   if (avail_out > 0)
-   {
-      /* The stream ended before the image; this is the same as too few IDATs so
-       * should be handled the same way.
-       */
-      if (output != NULL)
-         png_error(png_ptr, "Not enough image data");
-
-      else /* the deflate stream contained extra data */
-         png_chunk_benign_error(png_ptr, "Too much image data");
-   }
-}
-
-void /* PRIVATE */
-png_read_finish_IDAT(png_structrp png_ptr)
-{
-   /* We don't need any more data and the stream should have ended, however the
-    * LZ end code may actually not have been processed.  In this case we must
-    * read it otherwise stray unread IDAT data or, more likely, an IDAT chunk
-    * may still remain to be consumed.
-    */
-   if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0)
-   {
-      /* The NULL causes png_read_IDAT_data to swallow any remaining bytes in
-       * the compressed stream, but the stream may be damaged too, so even after
-       * this call we may need to terminate the zstream ownership.
-       */
-      png_read_IDAT_data(png_ptr, NULL, 0);
-      png_ptr->zstream.next_out = NULL; /* safety */
-
-      /* Now clear everything out for safety; the following may not have been
-       * done.
-       */
-      if ((png_ptr->flags & PNG_FLAG_ZSTREAM_ENDED) == 0)
-      {
-         png_ptr->mode |= PNG_AFTER_IDAT;
-         png_ptr->flags |= PNG_FLAG_ZSTREAM_ENDED;
-      }
-   }
-
-   /* If the zstream has not been released do it now *and* terminate the reading
-    * of the final IDAT chunk.
-    */
-   if (png_ptr->zowner == png_IDAT)
-   {
-      /* Always do this; the pointers otherwise point into the read buffer. */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-
-      /* Now we no longer own the zstream. */
-      png_ptr->zowner = 0;
-
-      /* The slightly weird semantics of the sequential IDAT reading is that we
-       * are always in or at the end of an IDAT chunk, so we always need to do a
-       * crc_finish here.  If idat_size is non-zero we also need to read the
-       * spurious bytes at the end of the chunk now.
-       */
-      (void)png_crc_finish(png_ptr, png_ptr->idat_size);
-   }
-}
-
-void /* PRIVATE */
-png_read_finish_row(png_structrp png_ptr)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-
-   png_debug(1, "in png_read_finish_row");
-   png_ptr->row_number++;
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-   if (png_ptr->interlaced != 0)
-   {
-      png_ptr->row_number = 0;
-
-      /* TO DO: don't do this if prev_row isn't needed (requires
-       * read-ahead of the next row's filter byte.
-       */
-      memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-      do
-      {
-         png_ptr->pass++;
-
-         if (png_ptr->pass >= 7)
-            break;
-
-         png_ptr->iwidth = (png_ptr->width +
-            png_pass_inc[png_ptr->pass] - 1 -
-            png_pass_start[png_ptr->pass]) /
-            png_pass_inc[png_ptr->pass];
-
-         if ((png_ptr->transformations & PNG_INTERLACE) == 0)
-         {
-            png_ptr->num_rows = (png_ptr->height +
-                png_pass_yinc[png_ptr->pass] - 1 -
-                png_pass_ystart[png_ptr->pass]) /
-                png_pass_yinc[png_ptr->pass];
-         }
-
-         else  /* if (png_ptr->transformations & PNG_INTERLACE) */
-            break; /* libpng deinterlacing sees every row */
-
-      } while (png_ptr->num_rows == 0 || png_ptr->iwidth == 0);
-
-      if (png_ptr->pass < 7)
-         return;
-   }
-
-   /* Here after at the end of the last row of the last pass. */
-   png_read_finish_IDAT(png_ptr);
-}
-#endif /* SEQUENTIAL_READ */
-
-void /* PRIVATE */
-png_read_start_row(png_structrp png_ptr)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-
-   int max_pixel_depth;
-   png_size_t row_bytes;
-
-   png_debug(1, "in png_read_start_row");
-
-#ifdef PNG_READ_TRANSFORMS_SUPPORTED
-   png_init_read_transformations(png_ptr);
-#endif
-   if (png_ptr->interlaced != 0)
-   {
-      if ((png_ptr->transformations & PNG_INTERLACE) == 0)
-         png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
-             png_pass_ystart[0]) / png_pass_yinc[0];
-
-      else
-         png_ptr->num_rows = png_ptr->height;
-
-      png_ptr->iwidth = (png_ptr->width +
-          png_pass_inc[png_ptr->pass] - 1 -
-          png_pass_start[png_ptr->pass]) /
-          png_pass_inc[png_ptr->pass];
-   }
-
-   else
-   {
-      png_ptr->num_rows = png_ptr->height;
-      png_ptr->iwidth = png_ptr->width;
-   }
-
-   max_pixel_depth = png_ptr->pixel_depth;
-
-   /* WARNING: * png_read_transform_info (pngrtran.c) performs a simpler set of
-    * calculations to calculate the final pixel depth, then
-    * png_do_read_transforms actually does the transforms.  This means that the
-    * code which effectively calculates this value is actually repeated in three
-    * separate places.  They must all match.  Innocent changes to the order of
-    * transformations can and will break libpng in a way that causes memory
-    * overwrites.
-    *
-    * TODO: fix this.
-    */
-#ifdef PNG_READ_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) != 0 && png_ptr->bit_depth < 8)
-      max_pixel_depth = 8;
-#endif
-
-#ifdef PNG_READ_EXPAND_SUPPORTED
-   if ((png_ptr->transformations & PNG_EXPAND) != 0)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (png_ptr->num_trans != 0)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 24;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (max_pixel_depth < 8)
-            max_pixel_depth = 8;
-
-         if (png_ptr->num_trans != 0)
-            max_pixel_depth *= 2;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
-      {
-         if (png_ptr->num_trans != 0)
-         {
-            max_pixel_depth *= 4;
-            max_pixel_depth /= 3;
-         }
-      }
-   }
-#endif
-
-#ifdef PNG_READ_EXPAND_16_SUPPORTED
-   if ((png_ptr->transformations & PNG_EXPAND_16) != 0)
-   {
-#     ifdef PNG_READ_EXPAND_SUPPORTED
-         /* In fact it is an error if it isn't supported, but checking is
-          * the safe way.
-          */
-         if ((png_ptr->transformations & PNG_EXPAND) != 0)
-         {
-            if (png_ptr->bit_depth < 16)
-               max_pixel_depth *= 2;
-         }
-         else
-#     endif
-         png_ptr->transformations &= ~PNG_EXPAND_16;
-   }
-#endif
-
-#ifdef PNG_READ_FILLER_SUPPORTED
-   if ((png_ptr->transformations & (PNG_FILLER)) != 0)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
-      {
-         if (max_pixel_depth <= 8)
-            max_pixel_depth = 16;
-
-         else
-            max_pixel_depth = 32;
-      }
-
-      else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB ||
-         png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         if (max_pixel_depth <= 32)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 64;
-      }
-   }
-#endif
-
-#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
-   if ((png_ptr->transformations & PNG_GRAY_TO_RGB) != 0)
-   {
-      if (
-#ifdef PNG_READ_EXPAND_SUPPORTED
-          (png_ptr->num_trans != 0 &&
-          (png_ptr->transformations & PNG_EXPAND) != 0) ||
-#endif
-#ifdef PNG_READ_FILLER_SUPPORTED
-          (png_ptr->transformations & (PNG_FILLER)) != 0 ||
-#endif
-          png_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (max_pixel_depth <= 16)
-            max_pixel_depth = 32;
-
-         else
-            max_pixel_depth = 64;
-      }
-
-      else
-      {
-         if (max_pixel_depth <= 8)
-         {
-            if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-               max_pixel_depth = 32;
-
-            else
-               max_pixel_depth = 24;
-         }
-
-         else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            max_pixel_depth = 64;
-
-         else
-            max_pixel_depth = 48;
-      }
-   }
-#endif
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) && \
-defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
-   if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
-   {
-      int user_pixel_depth = png_ptr->user_transform_depth *
-         png_ptr->user_transform_channels;
-
-      if (user_pixel_depth > max_pixel_depth)
-         max_pixel_depth = user_pixel_depth;
-   }
-#endif
-
-   /* This value is stored in png_struct and double checked in the row read
-    * code.
-    */
-   png_ptr->maximum_pixel_depth = (png_byte)max_pixel_depth;
-   png_ptr->transformed_pixel_depth = 0; /* calculated on demand */
-
-   /* Align the width on the next larger 8 pixels.  Mainly used
-    * for interlacing
-    */
-   row_bytes = ((png_ptr->width + 7) & ~((png_uint_32)7));
-   /* Calculate the maximum bytes needed, adding a byte and a pixel
-    * for safety's sake
-    */
-   row_bytes = PNG_ROWBYTES(max_pixel_depth, row_bytes) +
-       1 + ((max_pixel_depth + 7) >> 3);
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (row_bytes > (png_uint_32)65536L)
-      png_error(png_ptr, "This image requires a row greater than 64KB");
-#endif
-
-   if (row_bytes + 48 > png_ptr->old_big_row_buf_size)
-   {
-     png_free(png_ptr, png_ptr->big_row_buf);
-     png_free(png_ptr, png_ptr->big_prev_row);
-
-     if (png_ptr->interlaced != 0)
-        png_ptr->big_row_buf = (png_bytep)png_calloc(png_ptr,
-            row_bytes + 48);
-
-     else
-        png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
-
-     png_ptr->big_prev_row = (png_bytep)png_malloc(png_ptr, row_bytes + 48);
-
-#ifdef PNG_ALIGNED_MEMORY_SUPPORTED
-     /* Use 16-byte aligned memory for row_buf with at least 16 bytes
-      * of padding before and after row_buf; treat prev_row similarly.
-      * NOTE: the alignment is to the start of the pixels, one beyond the start
-      * of the buffer, because of the filter byte.  Prior to libpng 1.5.6 this
-      * was incorrect; the filter byte was aligned, which had the exact
-      * opposite effect of that intended.
-      */
-     {
-        png_bytep temp = png_ptr->big_row_buf + 32;
-        int extra = (int)((temp - (png_bytep)0) & 0x0f);
-        png_ptr->row_buf = temp - extra - 1/*filter byte*/;
-
-        temp = png_ptr->big_prev_row + 32;
-        extra = (int)((temp - (png_bytep)0) & 0x0f);
-        png_ptr->prev_row = temp - extra - 1/*filter byte*/;
-     }
-
-#else
-     /* Use 31 bytes of padding before and 17 bytes after row_buf. */
-     png_ptr->row_buf = png_ptr->big_row_buf + 31;
-     png_ptr->prev_row = png_ptr->big_prev_row + 31;
-#endif
-     png_ptr->old_big_row_buf_size = row_bytes + 48;
-   }
-
-#ifdef PNG_MAX_MALLOC_64K
-   if (png_ptr->rowbytes > 65535)
-      png_error(png_ptr, "This image requires a row greater than 64KB");
-
-#endif
-   if (png_ptr->rowbytes > (PNG_SIZE_MAX - 1))
-      png_error(png_ptr, "Row has too many bytes to allocate in memory");
-
-   memset(png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
-
-   png_debug1(3, "width = %u,", png_ptr->width);
-   png_debug1(3, "height = %u,", png_ptr->height);
-   png_debug1(3, "iwidth = %u,", png_ptr->iwidth);
-   png_debug1(3, "num_rows = %u,", png_ptr->num_rows);
-   png_debug1(3, "rowbytes = %lu,", (unsigned long)png_ptr->rowbytes);
-   png_debug1(3, "irowbytes = %lu",
-       (unsigned long)PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1);
-
-   /* The sequential reader needs a buffer for IDAT, but the progressive reader
-    * does not, so free the read buffer now regardless; the sequential reader
-    * reallocates it on demand.
-    */
-   if (png_ptr->read_buffer != 0)
-   {
-      png_bytep buffer = png_ptr->read_buffer;
-
-      png_ptr->read_buffer_size = 0;
-      png_ptr->read_buffer = NULL;
-      png_free(png_ptr, buffer);
-   }
-
-   /* Finally claim the zstream for the inflate of the IDAT data, use the bits
-    * value from the stream (note that this will result in a fatal error if the
-    * IDAT stream has a bogus deflate header window_bits value, but this should
-    * not be happening any longer!)
-    */
-   if (png_inflate_claim(png_ptr, png_IDAT) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   png_ptr->flags |= PNG_FLAG_ROW_INIT;
-}
-#endif /* READ */
--- a/DoConfig/fltk/png/pngset.c
+++ /dev/null
@@ -1,1611 +1,0 @@
-
-/* pngset.c - storage of image information into info struct
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * The functions here are used during reads to store data from the file
- * into the info struct, and during writes to store application data
- * into the info struct for writing into the file.  This abstracts the
- * info struct and allows us to change the structure in the future.
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-#ifdef PNG_bKGD_SUPPORTED
-void PNGAPI
-png_set_bKGD(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_color_16p background)
-{
-   png_debug1(1, "in %s storage function", "bKGD");
-
-   if (png_ptr == NULL || info_ptr == NULL || background == NULL)
-      return;
-
-   info_ptr->background = *background;
-   info_ptr->valid |= PNG_INFO_bKGD;
-}
-#endif
-
-#ifdef PNG_cHRM_SUPPORTED
-void PNGFAPI
-png_set_cHRM_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point white_x, png_fixed_point white_y, png_fixed_point red_x,
-    png_fixed_point red_y, png_fixed_point green_x, png_fixed_point green_y,
-    png_fixed_point blue_x, png_fixed_point blue_y)
-{
-   png_xy xy;
-
-   png_debug1(1, "in %s storage function", "cHRM fixed");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   xy.redx = red_x;
-   xy.redy = red_y;
-   xy.greenx = green_x;
-   xy.greeny = green_y;
-   xy.bluex = blue_x;
-   xy.bluey = blue_y;
-   xy.whitex = white_x;
-   xy.whitey = white_y;
-
-   if (png_colorspace_set_chromaticities(png_ptr, &info_ptr->colorspace, &xy,
-       2/* override with app values*/) != 0)
-      info_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-void PNGFAPI
-png_set_cHRM_XYZ_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point int_red_X, png_fixed_point int_red_Y,
-    png_fixed_point int_red_Z, png_fixed_point int_green_X,
-    png_fixed_point int_green_Y, png_fixed_point int_green_Z,
-    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,
-    png_fixed_point int_blue_Z)
-{
-   png_XYZ XYZ;
-
-   png_debug1(1, "in %s storage function", "cHRM XYZ fixed");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   XYZ.red_X = int_red_X;
-   XYZ.red_Y = int_red_Y;
-   XYZ.red_Z = int_red_Z;
-   XYZ.green_X = int_green_X;
-   XYZ.green_Y = int_green_Y;
-   XYZ.green_Z = int_green_Z;
-   XYZ.blue_X = int_blue_X;
-   XYZ.blue_Y = int_blue_Y;
-   XYZ.blue_Z = int_blue_Z;
-
-   if (png_colorspace_set_endpoints(png_ptr, &info_ptr->colorspace,
-       &XYZ, 2) != 0)
-      info_ptr->colorspace.flags |= PNG_COLORSPACE_FROM_cHRM;
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_cHRM(png_const_structrp png_ptr, png_inforp info_ptr,
-    double white_x, double white_y, double red_x, double red_y,
-    double green_x, double green_y, double blue_x, double blue_y)
-{
-   png_set_cHRM_fixed(png_ptr, info_ptr,
-      png_fixed(png_ptr, white_x, "cHRM White X"),
-      png_fixed(png_ptr, white_y, "cHRM White Y"),
-      png_fixed(png_ptr, red_x, "cHRM Red X"),
-      png_fixed(png_ptr, red_y, "cHRM Red Y"),
-      png_fixed(png_ptr, green_x, "cHRM Green X"),
-      png_fixed(png_ptr, green_y, "cHRM Green Y"),
-      png_fixed(png_ptr, blue_x, "cHRM Blue X"),
-      png_fixed(png_ptr, blue_y, "cHRM Blue Y"));
-}
-
-void PNGAPI
-png_set_cHRM_XYZ(png_const_structrp png_ptr, png_inforp info_ptr, double red_X,
-    double red_Y, double red_Z, double green_X, double green_Y, double green_Z,
-    double blue_X, double blue_Y, double blue_Z)
-{
-   png_set_cHRM_XYZ_fixed(png_ptr, info_ptr,
-      png_fixed(png_ptr, red_X, "cHRM Red X"),
-      png_fixed(png_ptr, red_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, red_Z, "cHRM Red Z"),
-      png_fixed(png_ptr, green_X, "cHRM Red X"),
-      png_fixed(png_ptr, green_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, green_Z, "cHRM Red Z"),
-      png_fixed(png_ptr, blue_X, "cHRM Red X"),
-      png_fixed(png_ptr, blue_Y, "cHRM Red Y"),
-      png_fixed(png_ptr, blue_Z, "cHRM Red Z"));
-}
-#  endif /* FLOATING_POINT */
-
-#endif /* cHRM */
-
-#ifdef PNG_gAMA_SUPPORTED
-void PNGFAPI
-png_set_gAMA_fixed(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_fixed_point file_gamma)
-{
-   png_debug1(1, "in %s storage function", "gAMA");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_colorspace_set_gamma(png_ptr, &info_ptr->colorspace, file_gamma);
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_gAMA(png_const_structrp png_ptr, png_inforp info_ptr, double file_gamma)
-{
-   png_set_gAMA_fixed(png_ptr, info_ptr, png_fixed(png_ptr, file_gamma,
-       "png_set_gAMA"));
-}
-#  endif
-#endif
-
-#ifdef PNG_hIST_SUPPORTED
-void PNGAPI
-png_set_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_uint_16p hist)
-{
-   int i;
-
-   png_debug1(1, "in %s storage function", "hIST");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (info_ptr->num_palette == 0 || info_ptr->num_palette
-       > PNG_MAX_PALETTE_LENGTH)
-   {
-      png_warning(png_ptr,
-          "Invalid palette size, hIST allocation skipped");
-
-      return;
-   }
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0);
-
-   /* Changed from info->num_palette to PNG_MAX_PALETTE_LENGTH in
-    * version 1.2.1
-    */
-   info_ptr->hist = png_voidcast(png_uint_16p, png_malloc_warn(png_ptr,
-       PNG_MAX_PALETTE_LENGTH * (sizeof (png_uint_16))));
-
-   if (info_ptr->hist == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for hIST chunk data");
-      return;
-   }
-
-   info_ptr->free_me |= PNG_FREE_HIST;
-
-   for (i = 0; i < info_ptr->num_palette; i++)
-      info_ptr->hist[i] = hist[i];
-
-   info_ptr->valid |= PNG_INFO_hIST;
-}
-#endif
-
-void PNGAPI
-png_set_IHDR(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_32 width, png_uint_32 height, int bit_depth,
-    int color_type, int interlace_type, int compression_type,
-    int filter_type)
-{
-   png_debug1(1, "in %s storage function", "IHDR");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->width = width;
-   info_ptr->height = height;
-   info_ptr->bit_depth = (png_byte)bit_depth;
-   info_ptr->color_type = (png_byte)color_type;
-   info_ptr->compression_type = (png_byte)compression_type;
-   info_ptr->filter_type = (png_byte)filter_type;
-   info_ptr->interlace_type = (png_byte)interlace_type;
-
-   png_check_IHDR (png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
-       info_ptr->compression_type, info_ptr->filter_type);
-
-   if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      info_ptr->channels = 1;
-
-   else if ((info_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
-      info_ptr->channels = 3;
-
-   else
-      info_ptr->channels = 1;
-
-   if ((info_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      info_ptr->channels++;
-
-   info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
-
-   info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
-}
-
-#ifdef PNG_oFFs_SUPPORTED
-void PNGAPI
-png_set_oFFs(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_int_32 offset_x, png_int_32 offset_y, int unit_type)
-{
-   png_debug1(1, "in %s storage function", "oFFs");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->x_offset = offset_x;
-   info_ptr->y_offset = offset_y;
-   info_ptr->offset_unit_type = (png_byte)unit_type;
-   info_ptr->valid |= PNG_INFO_oFFs;
-}
-#endif
-
-#ifdef PNG_pCAL_SUPPORTED
-void PNGAPI
-png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type,
-    int nparams, png_const_charp units, png_charpp params)
-{
-   png_size_t length;
-   int i;
-
-   png_debug1(1, "in %s storage function", "pCAL");
-
-   if (png_ptr == NULL || info_ptr == NULL || purpose == NULL || units == NULL
-      || (nparams > 0 && params == NULL))
-      return;
-
-   length = strlen(purpose) + 1;
-   png_debug1(3, "allocating purpose for info (%lu bytes)",
-       (unsigned long)length);
-
-   /* TODO: validate format of calibration name and unit name */
-
-   /* Check that the type matches the specification. */
-   if (type < 0 || type > 3)
-      png_error(png_ptr, "Invalid pCAL equation type");
-
-   if (nparams < 0 || nparams > 255)
-      png_error(png_ptr, "Invalid pCAL parameter count");
-
-   /* Validate params[nparams] */
-   for (i=0; i<nparams; ++i)
-   {
-      if (params[i] == NULL ||
-          !png_check_fp_string(params[i], strlen(params[i])))
-         png_error(png_ptr, "Invalid format for pCAL parameter");
-   }
-
-   info_ptr->pcal_purpose = png_voidcast(png_charp,
-       png_malloc_warn(png_ptr, length));
-
-   if (info_ptr->pcal_purpose == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL purpose");
-      return;
-   }
-
-   memcpy(info_ptr->pcal_purpose, purpose, length);
-
-   png_debug(3, "storing X0, X1, type, and nparams in info");
-   info_ptr->pcal_X0 = X0;
-   info_ptr->pcal_X1 = X1;
-   info_ptr->pcal_type = (png_byte)type;
-   info_ptr->pcal_nparams = (png_byte)nparams;
-
-   length = strlen(units) + 1;
-   png_debug1(3, "allocating units for info (%lu bytes)",
-     (unsigned long)length);
-
-   info_ptr->pcal_units = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, length));
-
-   if (info_ptr->pcal_units == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL units");
-      return;
-   }
-
-   memcpy(info_ptr->pcal_units, units, length);
-
-   info_ptr->pcal_params = png_voidcast(png_charpp, png_malloc_warn(png_ptr,
-       (png_size_t)((nparams + 1) * (sizeof (png_charp)))));
-
-   if (info_ptr->pcal_params == NULL)
-   {
-      png_warning(png_ptr, "Insufficient memory for pCAL params");
-      return;
-   }
-
-   memset(info_ptr->pcal_params, 0, (nparams + 1) * (sizeof (png_charp)));
-
-   for (i = 0; i < nparams; i++)
-   {
-      length = strlen(params[i]) + 1;
-      png_debug2(3, "allocating parameter %d for info (%lu bytes)", i,
-          (unsigned long)length);
-
-      info_ptr->pcal_params[i] = (png_charp)png_malloc_warn(png_ptr, length);
-
-      if (info_ptr->pcal_params[i] == NULL)
-      {
-         png_warning(png_ptr, "Insufficient memory for pCAL parameter");
-         return;
-      }
-
-      memcpy(info_ptr->pcal_params[i], params[i], length);
-   }
-
-   info_ptr->valid |= PNG_INFO_pCAL;
-   info_ptr->free_me |= PNG_FREE_PCAL;
-}
-#endif
-
-#ifdef PNG_sCAL_SUPPORTED
-void PNGAPI
-png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
-    int unit, png_const_charp swidth, png_const_charp sheight)
-{
-   png_size_t lengthw = 0, lengthh = 0;
-
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   /* Double check the unit (should never get here with an invalid
-    * unit unless this is an API call.)
-    */
-   if (unit != 1 && unit != 2)
-      png_error(png_ptr, "Invalid sCAL unit");
-
-   if (swidth == NULL || (lengthw = strlen(swidth)) == 0 ||
-       swidth[0] == 45 /* '-' */ || !png_check_fp_string(swidth, lengthw))
-      png_error(png_ptr, "Invalid sCAL width");
-
-   if (sheight == NULL || (lengthh = strlen(sheight)) == 0 ||
-       sheight[0] == 45 /* '-' */ || !png_check_fp_string(sheight, lengthh))
-      png_error(png_ptr, "Invalid sCAL height");
-
-   info_ptr->scal_unit = (png_byte)unit;
-
-   ++lengthw;
-
-   png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthw);
-
-   info_ptr->scal_s_width = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, lengthw));
-
-   if (info_ptr->scal_s_width == NULL)
-   {
-      png_warning(png_ptr, "Memory allocation failed while processing sCAL");
-      return;
-   }
-
-   memcpy(info_ptr->scal_s_width, swidth, lengthw);
-
-   ++lengthh;
-
-   png_debug1(3, "allocating unit for info (%u bytes)", (unsigned int)lengthh);
-
-   info_ptr->scal_s_height = png_voidcast(png_charp,
-      png_malloc_warn(png_ptr, lengthh));
-
-   if (info_ptr->scal_s_height == NULL)
-   {
-      png_free (png_ptr, info_ptr->scal_s_width);
-      info_ptr->scal_s_width = NULL;
-
-      png_warning(png_ptr, "Memory allocation failed while processing sCAL");
-      return;
-   }
-
-   memcpy(info_ptr->scal_s_height, sheight, lengthh);
-
-   info_ptr->valid |= PNG_INFO_sCAL;
-   info_ptr->free_me |= PNG_FREE_SCAL;
-}
-
-#  ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
-    double width, double height)
-{
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   /* Check the arguments. */
-   if (width <= 0)
-      png_warning(png_ptr, "Invalid sCAL width ignored");
-
-   else if (height <= 0)
-      png_warning(png_ptr, "Invalid sCAL height ignored");
-
-   else
-   {
-      /* Convert 'width' and 'height' to ASCII. */
-      char swidth[PNG_sCAL_MAX_DIGITS+1];
-      char sheight[PNG_sCAL_MAX_DIGITS+1];
-
-      png_ascii_from_fp(png_ptr, swidth, (sizeof swidth), width,
-         PNG_sCAL_PRECISION);
-      png_ascii_from_fp(png_ptr, sheight, (sizeof sheight), height,
-         PNG_sCAL_PRECISION);
-
-      png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
-   }
-}
-#  endif
-
-#  ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_sCAL_fixed(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
-    png_fixed_point width, png_fixed_point height)
-{
-   png_debug1(1, "in %s storage function", "sCAL");
-
-   /* Check the arguments. */
-   if (width <= 0)
-      png_warning(png_ptr, "Invalid sCAL width ignored");
-
-   else if (height <= 0)
-      png_warning(png_ptr, "Invalid sCAL height ignored");
-
-   else
-   {
-      /* Convert 'width' and 'height' to ASCII. */
-      char swidth[PNG_sCAL_MAX_DIGITS+1];
-      char sheight[PNG_sCAL_MAX_DIGITS+1];
-
-      png_ascii_from_fixed(png_ptr, swidth, (sizeof swidth), width);
-      png_ascii_from_fixed(png_ptr, sheight, (sizeof sheight), height);
-
-      png_set_sCAL_s(png_ptr, info_ptr, unit, swidth, sheight);
-   }
-}
-#  endif
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
-void PNGAPI
-png_set_pHYs(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_uint_32 res_x, png_uint_32 res_y, int unit_type)
-{
-   png_debug1(1, "in %s storage function", "pHYs");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   info_ptr->x_pixels_per_unit = res_x;
-   info_ptr->y_pixels_per_unit = res_y;
-   info_ptr->phys_unit_type = (png_byte)unit_type;
-   info_ptr->valid |= PNG_INFO_pHYs;
-}
-#endif
-
-void PNGAPI
-png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
-    png_const_colorp palette, int num_palette)
-{
-
-   png_debug1(1, "in %s storage function", "PLTE");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
-   {
-      if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-         png_error(png_ptr, "Invalid palette length");
-
-      else
-      {
-         png_warning(png_ptr, "Invalid palette length");
-         return;
-      }
-   }
-
-   if ((num_palette > 0 && palette == NULL) ||
-      (num_palette == 0
-#        ifdef PNG_MNG_FEATURES_SUPPORTED
-            && (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0
-#        endif
-      ))
-   {
-      png_error(png_ptr, "Invalid palette");
-      return;
-   }
-
-   /* It may not actually be necessary to set png_ptr->palette here;
-    * we do it for backward compatibility with the way the png_handle_tRNS
-    * function used to do the allocation.
-    *
-    * 1.6.0: the above statement appears to be incorrect; something has to set
-    * the palette inside png_struct on read.
-    */
-   png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
-
-   /* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
-    * of num_palette entries, in case of an invalid PNG file that has
-    * too-large sample values.
-    */
-   png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
-       PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
-
-   if (num_palette > 0)
-      memcpy(png_ptr->palette, palette, num_palette * (sizeof (png_color)));
-   info_ptr->palette = png_ptr->palette;
-   info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
-
-   info_ptr->free_me |= PNG_FREE_PLTE;
-
-   info_ptr->valid |= PNG_INFO_PLTE;
-}
-
-#ifdef PNG_sBIT_SUPPORTED
-void PNGAPI
-png_set_sBIT(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_color_8p sig_bit)
-{
-   png_debug1(1, "in %s storage function", "sBIT");
-
-   if (png_ptr == NULL || info_ptr == NULL || sig_bit == NULL)
-      return;
-
-   info_ptr->sig_bit = *sig_bit;
-   info_ptr->valid |= PNG_INFO_sBIT;
-}
-#endif
-
-#ifdef PNG_sRGB_SUPPORTED
-void PNGAPI
-png_set_sRGB(png_const_structrp png_ptr, png_inforp info_ptr, int srgb_intent)
-{
-   png_debug1(1, "in %s storage function", "sRGB");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   (void)png_colorspace_set_sRGB(png_ptr, &info_ptr->colorspace, srgb_intent);
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-
-void PNGAPI
-png_set_sRGB_gAMA_and_cHRM(png_const_structrp png_ptr, png_inforp info_ptr,
-    int srgb_intent)
-{
-   png_debug1(1, "in %s storage function", "sRGB_gAMA_and_cHRM");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (png_colorspace_set_sRGB(png_ptr, &info_ptr->colorspace,
-       srgb_intent) != 0)
-   {
-      /* This causes the gAMA and cHRM to be written too */
-      info_ptr->colorspace.flags |=
-         PNG_COLORSPACE_FROM_gAMA|PNG_COLORSPACE_FROM_cHRM;
-   }
-
-   png_colorspace_sync_info(png_ptr, info_ptr);
-}
-#endif /* sRGB */
-
-
-#ifdef PNG_iCCP_SUPPORTED
-void PNGAPI
-png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_charp name, int compression_type,
-    png_const_bytep profile, png_uint_32 proflen)
-{
-   png_charp new_iccp_name;
-   png_bytep new_iccp_profile;
-   png_size_t length;
-
-   png_debug1(1, "in %s storage function", "iCCP");
-
-   if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
-      return;
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-      png_app_error(png_ptr, "Invalid iCCP compression method");
-
-   /* Set the colorspace first because this validates the profile; do not
-    * override previously set app cHRM or gAMA here (because likely as not the
-    * application knows better than libpng what the correct values are.)  Pass
-    * the info_ptr color_type field to png_colorspace_set_ICC because in the
-    * write case it has not yet been stored in png_ptr.
-    */
-   {
-      int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
-         proflen, profile, info_ptr->color_type);
-
-      png_colorspace_sync_info(png_ptr, info_ptr);
-
-      /* Don't do any of the copying if the profile was bad, or inconsistent. */
-      if (result == 0)
-         return;
-
-      /* But do write the gAMA and cHRM chunks from the profile. */
-      info_ptr->colorspace.flags |=
-         PNG_COLORSPACE_FROM_gAMA|PNG_COLORSPACE_FROM_cHRM;
-   }
-
-   length = strlen(name)+1;
-   new_iccp_name = png_voidcast(png_charp, png_malloc_warn(png_ptr, length));
-
-   if (new_iccp_name == NULL)
-   {
-      png_benign_error(png_ptr, "Insufficient memory to process iCCP chunk");
-      return;
-   }
-
-   memcpy(new_iccp_name, name, length);
-   new_iccp_profile = png_voidcast(png_bytep,
-      png_malloc_warn(png_ptr, proflen));
-
-   if (new_iccp_profile == NULL)
-   {
-      png_free(png_ptr, new_iccp_name);
-      new_iccp_name = NULL;
-      png_benign_error(png_ptr,
-          "Insufficient memory to process iCCP profile");
-      return;
-   }
-
-   memcpy(new_iccp_profile, profile, proflen);
-
-   png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
-
-   info_ptr->iccp_proflen = proflen;
-   info_ptr->iccp_name = new_iccp_name;
-   info_ptr->iccp_profile = new_iccp_profile;
-   info_ptr->free_me |= PNG_FREE_ICCP;
-   info_ptr->valid |= PNG_INFO_iCCP;
-}
-#endif
-
-#ifdef PNG_TEXT_SUPPORTED
-void PNGAPI
-png_set_text(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_textp text_ptr, int num_text)
-{
-   int ret;
-   ret = png_set_text_2(png_ptr, info_ptr, text_ptr, num_text);
-
-   if (ret != 0)
-      png_error(png_ptr, "Insufficient memory to store text");
-}
-
-int /* PRIVATE */
-png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_textp text_ptr, int num_text)
-{
-   int i;
-
-   png_debug1(1, "in %lx storage function", png_ptr == NULL ? "unexpected" :
-      (unsigned long)png_ptr->chunk_name);
-
-   if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
-      return(0);
-
-   /* Make sure we have enough space in the "text" array in info_struct
-    * to hold all of the incoming text_ptr objects.  This compare can't overflow
-    * because max_text >= num_text (anyway, subtract of two positive integers
-    * can't overflow in any case.)
-    */
-   if (num_text > info_ptr->max_text - info_ptr->num_text)
-   {
-      int old_num_text = info_ptr->num_text;
-      int max_text;
-      png_textp new_text = NULL;
-
-      /* Calculate an appropriate max_text, checking for overflow. */
-      max_text = old_num_text;
-      if (num_text <= INT_MAX - max_text)
-      {
-         max_text += num_text;
-
-         /* Round up to a multiple of 8 */
-         if (max_text < INT_MAX-8)
-            max_text = (max_text + 8) & ~0x7;
-
-         else
-            max_text = INT_MAX;
-
-         /* Now allocate a new array and copy the old members in; this does all
-          * the overflow checks.
-          */
-         new_text = png_voidcast(png_textp,png_realloc_array(png_ptr,
-            info_ptr->text, old_num_text, max_text-old_num_text,
-            sizeof *new_text));
-      }
-
-      if (new_text == NULL)
-      {
-         png_chunk_report(png_ptr, "too many text chunks",
-            PNG_CHUNK_WRITE_ERROR);
-         return 1;
-      }
-
-      png_free(png_ptr, info_ptr->text);
-
-      info_ptr->text = new_text;
-      info_ptr->free_me |= PNG_FREE_TEXT;
-      info_ptr->max_text = max_text;
-      /* num_text is adjusted below as the entries are copied in */
-
-      png_debug1(3, "allocated %d entries for info_ptr->text", max_text);
-   }
-
-   for (i = 0; i < num_text; i++)
-   {
-      size_t text_length, key_len;
-      size_t lang_len, lang_key_len;
-      png_textp textp = &(info_ptr->text[info_ptr->num_text]);
-
-      if (text_ptr[i].key == NULL)
-          continue;
-
-      if (text_ptr[i].compression < PNG_TEXT_COMPRESSION_NONE ||
-          text_ptr[i].compression >= PNG_TEXT_COMPRESSION_LAST)
-      {
-         png_chunk_report(png_ptr, "text compression mode is out of range",
-            PNG_CHUNK_WRITE_ERROR);
-         continue;
-      }
-
-      key_len = strlen(text_ptr[i].key);
-
-      if (text_ptr[i].compression <= 0)
-      {
-         lang_len = 0;
-         lang_key_len = 0;
-      }
-
-      else
-#  ifdef PNG_iTXt_SUPPORTED
-      {
-         /* Set iTXt data */
-
-         if (text_ptr[i].lang != NULL)
-            lang_len = strlen(text_ptr[i].lang);
-
-         else
-            lang_len = 0;
-
-         if (text_ptr[i].lang_key != NULL)
-            lang_key_len = strlen(text_ptr[i].lang_key);
-
-         else
-            lang_key_len = 0;
-      }
-#  else /* PNG_iTXt_SUPPORTED */
-      {
-         png_chunk_report(png_ptr, "iTXt chunk not supported",
-            PNG_CHUNK_WRITE_ERROR);
-         continue;
-      }
-#  endif
-
-      if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0')
-      {
-         text_length = 0;
-#  ifdef PNG_iTXt_SUPPORTED
-         if (text_ptr[i].compression > 0)
-            textp->compression = PNG_ITXT_COMPRESSION_NONE;
-
-         else
-#  endif
-            textp->compression = PNG_TEXT_COMPRESSION_NONE;
-      }
-
-      else
-      {
-         text_length = strlen(text_ptr[i].text);
-         textp->compression = text_ptr[i].compression;
-      }
-
-      textp->key = png_voidcast(png_charp,png_malloc_base(png_ptr,
-          key_len + text_length + lang_len + lang_key_len + 4));
-
-      if (textp->key == NULL)
-      {
-         png_chunk_report(png_ptr, "text chunk: out of memory",
-               PNG_CHUNK_WRITE_ERROR);
-         return 1;
-      }
-
-      png_debug2(2, "Allocated %lu bytes at %p in png_set_text",
-          (unsigned long)(png_uint_32)
-          (key_len + lang_len + lang_key_len + text_length + 4),
-          textp->key);
-
-      memcpy(textp->key, text_ptr[i].key, key_len);
-      *(textp->key + key_len) = '\0';
-
-      if (text_ptr[i].compression > 0)
-      {
-         textp->lang = textp->key + key_len + 1;
-         memcpy(textp->lang, text_ptr[i].lang, lang_len);
-         *(textp->lang + lang_len) = '\0';
-         textp->lang_key = textp->lang + lang_len + 1;
-         memcpy(textp->lang_key, text_ptr[i].lang_key, lang_key_len);
-         *(textp->lang_key + lang_key_len) = '\0';
-         textp->text = textp->lang_key + lang_key_len + 1;
-      }
-
-      else
-      {
-         textp->lang=NULL;
-         textp->lang_key=NULL;
-         textp->text = textp->key + key_len + 1;
-      }
-
-      if (text_length != 0)
-         memcpy(textp->text, text_ptr[i].text, text_length);
-
-      *(textp->text + text_length) = '\0';
-
-#  ifdef PNG_iTXt_SUPPORTED
-      if (textp->compression > 0)
-      {
-         textp->text_length = 0;
-         textp->itxt_length = text_length;
-      }
-
-      else
-#  endif
-      {
-         textp->text_length = text_length;
-         textp->itxt_length = 0;
-      }
-
-      info_ptr->num_text++;
-      png_debug1(3, "transferred text chunk %d", info_ptr->num_text);
-   }
-
-   return(0);
-}
-#endif
-
-#ifdef PNG_tIME_SUPPORTED
-void PNGAPI
-png_set_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_const_timep mod_time)
-{
-   png_debug1(1, "in %s storage function", "tIME");
-
-   if (png_ptr == NULL || info_ptr == NULL || mod_time == NULL ||
-       (png_ptr->mode & PNG_WROTE_tIME) != 0)
-      return;
-
-   if (mod_time->month == 0   || mod_time->month > 12  ||
-       mod_time->day   == 0   || mod_time->day   > 31  ||
-       mod_time->hour  > 23   || mod_time->minute > 59 ||
-       mod_time->second > 60)
-   {
-      png_warning(png_ptr, "Ignoring invalid time value");
-      return;
-   }
-
-   info_ptr->mod_time = *mod_time;
-   info_ptr->valid |= PNG_INFO_tIME;
-}
-#endif
-
-#ifdef PNG_tRNS_SUPPORTED
-void PNGAPI
-png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
-    png_const_bytep trans_alpha, int num_trans, png_const_color_16p trans_color)
-{
-   png_debug1(1, "in %s storage function", "tRNS");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (trans_alpha != NULL)
-   {
-       /* It may not actually be necessary to set png_ptr->trans_alpha here;
-        * we do it for backward compatibility with the way the png_handle_tRNS
-        * function used to do the allocation.
-        *
-        * 1.6.0: The above statement is incorrect; png_handle_tRNS effectively
-        * relies on png_set_tRNS storing the information in png_struct
-        * (otherwise it won't be there for the code in pngrtran.c).
-        */
-
-       png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
-
-       /* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
-       png_ptr->trans_alpha = info_ptr->trans_alpha = png_voidcast(png_bytep,
-         png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
-
-       if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
-          memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
-   }
-
-   if (trans_color != NULL)
-   {
-      int sample_max = (1 << info_ptr->bit_depth);
-
-      if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY &&
-          trans_color->gray > sample_max) ||
-          (info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
-          (trans_color->red > sample_max ||
-          trans_color->green > sample_max ||
-          trans_color->blue > sample_max)))
-         png_warning(png_ptr,
-            "tRNS chunk has out-of-range samples for bit_depth");
-
-      info_ptr->trans_color = *trans_color;
-
-      if (num_trans == 0)
-         num_trans = 1;
-   }
-
-   info_ptr->num_trans = (png_uint_16)num_trans;
-
-   if (num_trans != 0)
-   {
-      info_ptr->valid |= PNG_INFO_tRNS;
-      info_ptr->free_me |= PNG_FREE_TRNS;
-   }
-}
-#endif
-
-#ifdef PNG_sPLT_SUPPORTED
-void PNGAPI
-png_set_sPLT(png_const_structrp png_ptr,
-    png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)
-/*
- *  entries        - array of png_sPLT_t structures
- *                   to be added to the list of palettes
- *                   in the info structure.
- *
- *  nentries       - number of palette structures to be
- *                   added.
- */
-{
-   png_sPLT_tp np;
-
-   if (png_ptr == NULL || info_ptr == NULL || nentries <= 0 || entries == NULL)
-      return;
-
-   /* Use the internal realloc function, which checks for all the possible
-    * overflows.  Notice that the parameters are (int) and (size_t)
-    */
-   np = png_voidcast(png_sPLT_tp,png_realloc_array(png_ptr,
-      info_ptr->splt_palettes, info_ptr->splt_palettes_num, nentries,
-      sizeof *np));
-
-   if (np == NULL)
-   {
-      /* Out of memory or too many chunks */
-      png_chunk_report(png_ptr, "too many sPLT chunks", PNG_CHUNK_WRITE_ERROR);
-      return;
-   }
-
-   png_free(png_ptr, info_ptr->splt_palettes);
-   info_ptr->splt_palettes = np;
-   info_ptr->free_me |= PNG_FREE_SPLT;
-
-   np += info_ptr->splt_palettes_num;
-
-   do
-   {
-      png_size_t length;
-
-      /* Skip invalid input entries */
-      if (entries->name == NULL || entries->entries == NULL)
-      {
-         /* png_handle_sPLT doesn't do this, so this is an app error */
-         png_app_error(png_ptr, "png_set_sPLT: invalid sPLT");
-         /* Just skip the invalid entry */
-         continue;
-      }
-
-      np->depth = entries->depth;
-
-      /* In the event of out-of-memory just return - there's no point keeping
-       * on trying to add sPLT chunks.
-       */
-      length = strlen(entries->name) + 1;
-      np->name = png_voidcast(png_charp, png_malloc_base(png_ptr, length));
-
-      if (np->name == NULL)
-         break;
-
-      memcpy(np->name, entries->name, length);
-
-      /* IMPORTANT: we have memory now that won't get freed if something else
-       * goes wrong; this code must free it.  png_malloc_array produces no
-       * warnings; use a png_chunk_report (below) if there is an error.
-       */
-      np->entries = png_voidcast(png_sPLT_entryp, png_malloc_array(png_ptr,
-          entries->nentries, sizeof (png_sPLT_entry)));
-
-      if (np->entries == NULL)
-      {
-         png_free(png_ptr, np->name);
-         np->name = NULL;
-         break;
-      }
-
-      np->nentries = entries->nentries;
-      /* This multiply can't overflow because png_malloc_array has already
-       * checked it when doing the allocation.
-       */
-      memcpy(np->entries, entries->entries,
-         entries->nentries * sizeof (png_sPLT_entry));
-
-      /* Note that 'continue' skips the advance of the out pointer and out
-       * count, so an invalid entry is not added.
-       */
-      info_ptr->valid |= PNG_INFO_sPLT;
-      ++(info_ptr->splt_palettes_num);
-      ++np;
-   }
-   while (++entries, --nentries);
-
-   if (nentries > 0)
-      png_chunk_report(png_ptr, "sPLT out of memory", PNG_CHUNK_WRITE_ERROR);
-}
-#endif /* sPLT */
-
-#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
-static png_byte
-check_location(png_const_structrp png_ptr, int location)
-{
-   location &= (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT);
-
-   /* New in 1.6.0; copy the location and check it.  This is an API
-    * change; previously the app had to use the
-    * png_set_unknown_chunk_location API below for each chunk.
-    */
-   if (location == 0 && (png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
-   {
-      /* Write struct, so unknown chunks come from the app */
-      png_app_warning(png_ptr,
-         "png_set_unknown_chunks now expects a valid location");
-      /* Use the old behavior */
-      location = (png_byte)(png_ptr->mode &
-         (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT));
-   }
-
-   /* This need not be an internal error - if the app calls
-    * png_set_unknown_chunks on a read pointer it must get the location right.
-    */
-   if (location == 0)
-      png_error(png_ptr, "invalid location in png_set_unknown_chunks");
-
-   /* Now reduce the location to the top-most set bit by removing each least
-    * significant bit in turn.
-    */
-   while (location != (location & -location))
-      location &= ~(location & -location);
-
-   /* The cast is safe because 'location' is a bit mask and only the low four
-    * bits are significant.
-    */
-   return (png_byte)location;
-}
-
-void PNGAPI
-png_set_unknown_chunks(png_const_structrp png_ptr,
-   png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns)
-{
-   png_unknown_chunkp np;
-
-   if (png_ptr == NULL || info_ptr == NULL || num_unknowns <= 0 ||
-      unknowns == NULL)
-      return;
-
-   /* Check for the failure cases where support has been disabled at compile
-    * time.  This code is hardly ever compiled - it's here because
-    * STORE_UNKNOWN_CHUNKS is set by both read and write code (compiling in this
-    * code) but may be meaningless if the read or write handling of unknown
-    * chunks is not compiled in.
-    */
-#  if !defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) && \
-      defined(PNG_READ_SUPPORTED)
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
-      {
-         png_app_error(png_ptr, "no unknown chunk support on read");
-         return;
-      }
-#  endif
-#  if !defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) && \
-      defined(PNG_WRITE_SUPPORTED)
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
-      {
-         png_app_error(png_ptr, "no unknown chunk support on write");
-         return;
-      }
-#  endif
-
-   /* Prior to 1.6.0 this code used png_malloc_warn; however, this meant that
-    * unknown critical chunks could be lost with just a warning resulting in
-    * undefined behavior.  Now png_chunk_report is used to provide behavior
-    * appropriate to read or write.
-    */
-   np = png_voidcast(png_unknown_chunkp, png_realloc_array(png_ptr,
-         info_ptr->unknown_chunks, info_ptr->unknown_chunks_num, num_unknowns,
-         sizeof *np));
-
-   if (np == NULL)
-   {
-      png_chunk_report(png_ptr, "too many unknown chunks",
-         PNG_CHUNK_WRITE_ERROR);
-      return;
-   }
-
-   png_free(png_ptr, info_ptr->unknown_chunks);
-   info_ptr->unknown_chunks = np; /* safe because it is initialized */
-   info_ptr->free_me |= PNG_FREE_UNKN;
-
-   np += info_ptr->unknown_chunks_num;
-
-   /* Increment unknown_chunks_num each time round the loop to protect the
-    * just-allocated chunk data.
-    */
-   for (; num_unknowns > 0; --num_unknowns, ++unknowns)
-   {
-      memcpy(np->name, unknowns->name, (sizeof np->name));
-      np->name[(sizeof np->name)-1] = '\0';
-      np->location = check_location(png_ptr, unknowns->location);
-
-      if (unknowns->size == 0)
-      {
-         np->data = NULL;
-         np->size = 0;
-      }
-
-      else
-      {
-         np->data = png_voidcast(png_bytep,
-            png_malloc_base(png_ptr, unknowns->size));
-
-         if (np->data == NULL)
-         {
-            png_chunk_report(png_ptr, "unknown chunk: out of memory",
-               PNG_CHUNK_WRITE_ERROR);
-            /* But just skip storing the unknown chunk */
-            continue;
-         }
-
-         memcpy(np->data, unknowns->data, unknowns->size);
-         np->size = unknowns->size;
-      }
-
-      /* These increments are skipped on out-of-memory for the data - the
-       * unknown chunk entry gets overwritten if the png_chunk_report returns.
-       * This is correct in the read case (the chunk is just dropped.)
-       */
-      ++np;
-      ++(info_ptr->unknown_chunks_num);
-   }
-}
-
-void PNGAPI
-png_set_unknown_chunk_location(png_const_structrp png_ptr, png_inforp info_ptr,
-    int chunk, int location)
-{
-   /* This API is pretty pointless in 1.6.0 because the location can be set
-    * before the call to png_set_unknown_chunks.
-    *
-    * TODO: add a png_app_warning in 1.7
-    */
-   if (png_ptr != NULL && info_ptr != NULL && chunk >= 0 &&
-      chunk < info_ptr->unknown_chunks_num)
-   {
-      if ((location & (PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT)) == 0)
-      {
-         png_app_error(png_ptr, "invalid unknown chunk location");
-         /* Fake out the pre 1.6.0 behavior: */
-         if ((location & PNG_HAVE_IDAT) != 0) /* undocumented! */
-            location = PNG_AFTER_IDAT;
-
-         else
-            location = PNG_HAVE_IHDR; /* also undocumented */
-      }
-
-      info_ptr->unknown_chunks[chunk].location =
-         check_location(png_ptr, location);
-   }
-}
-#endif
-
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-png_uint_32 PNGAPI
-png_permit_mng_features (png_structrp png_ptr, png_uint_32 mng_features)
-{
-   png_debug(1, "in png_permit_mng_features");
-
-   if (png_ptr == NULL)
-      return 0;
-
-   png_ptr->mng_features_permitted = mng_features & PNG_ALL_MNG_FEATURES;
-
-   return png_ptr->mng_features_permitted;
-}
-#endif
-
-#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-static unsigned int
-add_one_chunk(png_bytep list, unsigned int count, png_const_bytep add, int keep)
-{
-   unsigned int i;
-
-   /* Utility function: update the 'keep' state of a chunk if it is already in
-    * the list, otherwise add it to the list.
-    */
-   for (i=0; i<count; ++i, list += 5)
-   {
-      if (memcmp(list, add, 4) == 0)
-      {
-         list[4] = (png_byte)keep;
-         return count;
-      }
-   }
-
-   if (keep != PNG_HANDLE_CHUNK_AS_DEFAULT)
-   {
-      ++count;
-      memcpy(list, add, 4);
-      list[4] = (png_byte)keep;
-   }
-
-   return count;
-}
-
-void PNGAPI
-png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
-    png_const_bytep chunk_list, int num_chunks_in)
-{
-   png_bytep new_list;
-   unsigned int num_chunks, old_num_chunks;
-
-   if (png_ptr == NULL)
-      return;
-
-   if (keep < 0 || keep >= PNG_HANDLE_CHUNK_LAST)
-   {
-      png_app_error(png_ptr, "png_set_keep_unknown_chunks: invalid keep");
-      return;
-   }
-
-   if (num_chunks_in <= 0)
-   {
-      png_ptr->unknown_default = keep;
-
-      /* '0' means just set the flags, so stop here */
-      if (num_chunks_in == 0)
-        return;
-   }
-
-   if (num_chunks_in < 0)
-   {
-      /* Ignore all unknown chunks and all chunks recognized by
-       * libpng except for IHDR, PLTE, tRNS, IDAT, and IEND
-       */
-      static PNG_CONST png_byte chunks_to_ignore[] = {
-         98,  75,  71,  68, '\0',  /* bKGD */
-         99,  72,  82,  77, '\0',  /* cHRM */
-        103,  65,  77,  65, '\0',  /* gAMA */
-        104,  73,  83,  84, '\0',  /* hIST */
-        105,  67,  67,  80, '\0',  /* iCCP */
-        105,  84,  88, 116, '\0',  /* iTXt */
-        111,  70,  70, 115, '\0',  /* oFFs */
-        112,  67,  65,  76, '\0',  /* pCAL */
-        112,  72,  89, 115, '\0',  /* pHYs */
-        115,  66,  73,  84, '\0',  /* sBIT */
-        115,  67,  65,  76, '\0',  /* sCAL */
-        115,  80,  76,  84, '\0',  /* sPLT */
-        115,  84,  69,  82, '\0',  /* sTER */
-        115,  82,  71,  66, '\0',  /* sRGB */
-        116,  69,  88, 116, '\0',  /* tEXt */
-        116,  73,  77,  69, '\0',  /* tIME */
-        122,  84,  88, 116, '\0'   /* zTXt */
-      };
-
-      chunk_list = chunks_to_ignore;
-      num_chunks = (unsigned int)/*SAFE*/(sizeof chunks_to_ignore)/5U;
-   }
-
-   else /* num_chunks_in > 0 */
-   {
-      if (chunk_list == NULL)
-      {
-         /* Prior to 1.6.0 this was silently ignored, now it is an app_error
-          * which can be switched off.
-          */
-         png_app_error(png_ptr, "png_set_keep_unknown_chunks: no chunk list");
-         return;
-      }
-
-      num_chunks = num_chunks_in;
-   }
-
-   old_num_chunks = png_ptr->num_chunk_list;
-   if (png_ptr->chunk_list == NULL)
-      old_num_chunks = 0;
-
-   /* Since num_chunks is always restricted to UINT_MAX/5 this can't overflow.
-    */
-   if (num_chunks + old_num_chunks > UINT_MAX/5)
-   {
-      png_app_error(png_ptr, "png_set_keep_unknown_chunks: too many chunks");
-      return;
-   }
-
-   /* If these chunks are being reset to the default then no more memory is
-    * required because add_one_chunk above doesn't extend the list if the 'keep'
-    * parameter is the default.
-    */
-   if (keep != 0)
-   {
-      new_list = png_voidcast(png_bytep, png_malloc(png_ptr,
-          5 * (num_chunks + old_num_chunks)));
-
-      if (old_num_chunks > 0)
-         memcpy(new_list, png_ptr->chunk_list, 5*old_num_chunks);
-   }
-
-   else if (old_num_chunks > 0)
-      new_list = png_ptr->chunk_list;
-
-   else
-      new_list = NULL;
-
-   /* Add the new chunks together with each one's handling code.  If the chunk
-    * already exists the code is updated, otherwise the chunk is added to the
-    * end.  (In libpng 1.6.0 order no longer matters because this code enforces
-    * the earlier convention that the last setting is the one that is used.)
-    */
-   if (new_list != NULL)
-   {
-      png_const_bytep inlist;
-      png_bytep outlist;
-      unsigned int i;
-
-      for (i=0; i<num_chunks; ++i)
-      {
-         old_num_chunks = add_one_chunk(new_list, old_num_chunks,
-            chunk_list+5*i, keep);
-      }
-
-      /* Now remove any spurious 'default' entries. */
-      num_chunks = 0;
-      for (i=0, inlist=outlist=new_list; i<old_num_chunks; ++i, inlist += 5)
-      {
-         if (inlist[4])
-         {
-            if (outlist != inlist)
-               memcpy(outlist, inlist, 5);
-            outlist += 5;
-            ++num_chunks;
-         }
-      }
-
-      /* This means the application has removed all the specialized handling. */
-      if (num_chunks == 0)
-      {
-         if (png_ptr->chunk_list != new_list)
-            png_free(png_ptr, new_list);
-
-         new_list = NULL;
-      }
-   }
-
-   else
-      num_chunks = 0;
-
-   png_ptr->num_chunk_list = num_chunks;
-
-   if (png_ptr->chunk_list != new_list)
-   {
-      if (png_ptr->chunk_list != NULL)
-         png_free(png_ptr, png_ptr->chunk_list);
-
-      png_ptr->chunk_list = new_list;
-   }
-}
-#endif
-
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-void PNGAPI
-png_set_read_user_chunk_fn(png_structrp png_ptr, png_voidp user_chunk_ptr,
-    png_user_chunk_ptr read_user_chunk_fn)
-{
-   png_debug(1, "in png_set_read_user_chunk_fn");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->read_user_chunk_fn = read_user_chunk_fn;
-   png_ptr->user_chunk_ptr = user_chunk_ptr;
-}
-#endif
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
-    png_bytepp row_pointers)
-{
-   png_debug1(1, "in %s storage function", "rows");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if (info_ptr->row_pointers != NULL &&
-       (info_ptr->row_pointers != row_pointers))
-      png_free_data(png_ptr, info_ptr, PNG_FREE_ROWS, 0);
-
-   info_ptr->row_pointers = row_pointers;
-
-   if (row_pointers != NULL)
-      info_ptr->valid |= PNG_INFO_IDAT;
-}
-#endif
-
-void PNGAPI
-png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
-{
-    if (png_ptr == NULL)
-       return;
-
-    if (size == 0 || size > PNG_UINT_31_MAX)
-       png_error(png_ptr, "invalid compression buffer size");
-
-#  ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
-      {
-         png_ptr->IDAT_read_size = (png_uint_32)size; /* checked above */
-         return;
-      }
-#  endif
-
-#  ifdef PNG_WRITE_SUPPORTED
-      if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
-      {
-         if (png_ptr->zowner != 0)
-         {
-            png_warning(png_ptr,
-              "Compression buffer size cannot be changed because it is in use");
-            return;
-         }
-
-         if (size > ZLIB_IO_MAX)
-         {
-            png_warning(png_ptr,
-               "Compression buffer size limited to system maximum");
-            size = ZLIB_IO_MAX; /* must fit */
-         }
-
-         else if (size < 6)
-         {
-            /* Deflate will potentially go into an infinite loop on a SYNC_FLUSH
-             * if this is permitted.
-             */
-            png_warning(png_ptr,
-               "Compression buffer size cannot be reduced below 6");
-            return;
-         }
-
-         if (png_ptr->zbuffer_size != size)
-         {
-            png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
-            png_ptr->zbuffer_size = (uInt)size;
-         }
-      }
-#  endif
-}
-
-void PNGAPI
-png_set_invalid(png_const_structrp png_ptr, png_inforp info_ptr, int mask)
-{
-   if (png_ptr != NULL && info_ptr != NULL)
-      info_ptr->valid &= ~mask;
-}
-
-
-#ifdef PNG_SET_USER_LIMITS_SUPPORTED
-/* This function was added to libpng 1.2.6 */
-void PNGAPI
-png_set_user_limits (png_structrp png_ptr, png_uint_32 user_width_max,
-    png_uint_32 user_height_max)
-{
-   /* Images with dimensions larger than these limits will be
-    * rejected by png_set_IHDR().  To accept any PNG datastream
-    * regardless of dimensions, set both limits to 0x7ffffffL.
-    */
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->user_width_max = user_width_max;
-   png_ptr->user_height_max = user_height_max;
-}
-
-/* This function was added to libpng 1.4.0 */
-void PNGAPI
-png_set_chunk_cache_max (png_structrp png_ptr, png_uint_32 user_chunk_cache_max)
-{
-    if (png_ptr != NULL)
-       png_ptr->user_chunk_cache_max = user_chunk_cache_max;
-}
-
-/* This function was added to libpng 1.4.1 */
-void PNGAPI
-png_set_chunk_malloc_max (png_structrp png_ptr,
-    png_alloc_size_t user_chunk_malloc_max)
-{
-   if (png_ptr != NULL)
-      png_ptr->user_chunk_malloc_max = user_chunk_malloc_max;
-}
-#endif /* ?SET_USER_LIMITS */
-
-
-#ifdef PNG_BENIGN_ERRORS_SUPPORTED
-void PNGAPI
-png_set_benign_errors(png_structrp png_ptr, int allowed)
-{
-   png_debug(1, "in png_set_benign_errors");
-
-   /* If allowed is 1, png_benign_error() is treated as a warning.
-    *
-    * If allowed is 0, png_benign_error() is treated as an error (which
-    * is the default behavior if png_set_benign_errors() is not called).
-    */
-
-   if (allowed != 0)
-      png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN |
-         PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN;
-
-   else
-      png_ptr->flags &= ~(PNG_FLAG_BENIGN_ERRORS_WARN |
-         PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN);
-}
-#endif /* BENIGN_ERRORS */
-
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Whether to report invalid palette index; added at libng-1.5.10.
-    * It is possible for an indexed (color-type==3) PNG file to contain
-    * pixels with invalid (out-of-range) indexes if the PLTE chunk has
-    * fewer entries than the image's bit-depth would allow. We recover
-    * from this gracefully by filling any incomplete palette with zeros
-    * (opaque black).  By default, when this occurs libpng will issue
-    * a benign error.  This API can be used to override that behavior.
-    */
-void PNGAPI
-png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
-{
-   png_debug(1, "in png_set_check_for_invalid_index");
-
-   if (allowed > 0)
-      png_ptr->num_palette_max = 0;
-
-   else
-      png_ptr->num_palette_max = -1;
-}
-#endif
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/pngstruct.h
+++ /dev/null
@@ -1,489 +1,0 @@
-
-/* pngstruct.h - header file for PNG reference library
- *
- * Copyright (c) 1998-2013 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * Last changed in libpng 1.6.1 [March 28, 2013]
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-/* The structure that holds the information to read and write PNG files.
- * The only people who need to care about what is inside of this are the
- * people who will be modifying the library for their own special needs.
- * It should NOT be accessed directly by an application.
- */
-
-#ifndef PNGSTRUCT_H
-#define PNGSTRUCT_H
-/* zlib.h defines the structure z_stream, an instance of which is included
- * in this structure and is required for decompressing the LZ compressed
- * data in PNG files.
- */
-#ifndef ZLIB_CONST
-   /* We must ensure that zlib uses 'const' in declarations. */
-#  define ZLIB_CONST
-#endif
-#include "zlib.h"
-#ifdef const
-   /* zlib.h sometimes #defines const to nothing, undo this. */
-#  undef const
-#endif
-
-/* zlib.h has mediocre z_const use before 1.2.6, this stuff is for compatibility
- * with older builds.
- */
-#if ZLIB_VERNUM < 0x1260
-#  define PNGZ_MSG_CAST(s) png_constcast(char*,s)
-#  define PNGZ_INPUT_CAST(b) png_constcast(png_bytep,b)
-#else
-#  define PNGZ_MSG_CAST(s) (s)
-#  define PNGZ_INPUT_CAST(b) (b)
-#endif
-
-/* zlib.h declares a magic type 'uInt' that limits the amount of data that zlib
- * can handle at once.  This type need be no larger than 16 bits (so maximum of
- * 65535), this define allows us to discover how big it is, but limited by the
- * maximuum for png_size_t.  The value can be overriden in a library build
- * (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably
- * lower value (e.g. 255 works).  A lower value may help memory usage (slightly)
- * and may even improve performance on some systems (and degrade it on others.)
- */
-#ifndef ZLIB_IO_MAX
-#  define ZLIB_IO_MAX ((uInt)-1)
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-/* The type of a compression buffer list used by the write code. */
-typedef struct png_compression_buffer
-{
-   struct png_compression_buffer *next;
-   png_byte                       output[1]; /* actually zbuf_size */
-} png_compression_buffer, *png_compression_bufferp;
-
-#define PNG_COMPRESSION_BUFFER_SIZE(pp)\
-   (offsetof(png_compression_buffer, output) + (pp)->zbuffer_size)
-#endif
-
-/* Colorspace support; structures used in png_struct, png_info and in internal
- * functions to hold and communicate information about the color space.
- *
- * PNG_COLORSPACE_SUPPORTED is only required if the application will perform
- * colorspace corrections, otherwise all the colorspace information can be
- * skipped and the size of libpng can be reduced (significantly) by compiling
- * out the colorspace support.
- */
-#ifdef PNG_COLORSPACE_SUPPORTED
-/* The chromaticities of the red, green and blue colorants and the chromaticity
- * of the corresponding white point (i.e. of rgb(1.0,1.0,1.0)).
- */
-typedef struct png_xy
-{
-   png_fixed_point redx, redy;
-   png_fixed_point greenx, greeny;
-   png_fixed_point bluex, bluey;
-   png_fixed_point whitex, whitey;
-} png_xy;
-
-/* The same data as above but encoded as CIE XYZ values.  When this data comes
- * from chromaticities the sum of the Y values is assumed to be 1.0
- */
-typedef struct png_XYZ
-{
-   png_fixed_point red_X, red_Y, red_Z;
-   png_fixed_point green_X, green_Y, green_Z;
-   png_fixed_point blue_X, blue_Y, blue_Z;
-} png_XYZ;
-#endif /* COLORSPACE */
-
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-/* A colorspace is all the above plus, potentially, profile information,
- * however at present libpng does not use the profile internally so it is only
- * stored in the png_info struct (if iCCP is supported.)  The rendering intent
- * is retained here and is checked.
- *
- * The file gamma encoding information is also stored here and gamma correction
- * is done by libpng, whereas color correction must currently be done by the
- * application.
- */
-typedef struct png_colorspace
-{
-#ifdef PNG_GAMMA_SUPPORTED
-   png_fixed_point gamma;        /* File gamma */
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-   png_xy      end_points_xy;    /* End points as chromaticities */
-   png_XYZ     end_points_XYZ;   /* End points as CIE XYZ colorant values */
-   png_uint_16 rendering_intent; /* Rendering intent of a profile */
-#endif
-
-   /* Flags are always defined to simplify the code. */
-   png_uint_16 flags;            /* As defined below */
-} png_colorspace, * PNG_RESTRICT png_colorspacerp;
-
-typedef const png_colorspace * PNG_RESTRICT png_const_colorspacerp;
-
-/* General flags for the 'flags' field */
-#define PNG_COLORSPACE_HAVE_GAMMA           0x0001
-#define PNG_COLORSPACE_HAVE_ENDPOINTS       0x0002
-#define PNG_COLORSPACE_HAVE_INTENT          0x0004
-#define PNG_COLORSPACE_FROM_gAMA            0x0008
-#define PNG_COLORSPACE_FROM_cHRM            0x0010
-#define PNG_COLORSPACE_FROM_sRGB            0x0020
-#define PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB 0x0040
-#define PNG_COLORSPACE_MATCHES_sRGB         0x0080 /* exact match on profile */
-#define PNG_COLORSPACE_INVALID              0x8000
-#define PNG_COLORSPACE_CANCEL(flags)        (0xffff ^ (flags))
-#endif /* COLORSPACE || GAMMA */
-
-struct png_struct_def
-{
-#ifdef PNG_SETJMP_SUPPORTED
-   jmp_buf jmp_buf_local;     /* New name in 1.6.0 for jmp_buf in png_struct */
-   png_longjmp_ptr longjmp_fn;/* setjmp non-local goto function. */
-   jmp_buf *jmp_buf_ptr;      /* passed to longjmp_fn */
-   size_t jmp_buf_size;       /* size of the above, if allocated */
-#endif
-   png_error_ptr error_fn;    /* function for printing errors and aborting */
-#ifdef PNG_WARNINGS_SUPPORTED
-   png_error_ptr warning_fn;  /* function for printing warnings */
-#endif
-   png_voidp error_ptr;       /* user supplied struct for error functions */
-   png_rw_ptr write_data_fn;  /* function for writing output data */
-   png_rw_ptr read_data_fn;   /* function for reading input data */
-   png_voidp io_ptr;          /* ptr to application struct for I/O functions */
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   png_user_transform_ptr read_user_transform_fn; /* user read transform */
-#endif
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-   png_user_transform_ptr write_user_transform_fn; /* user write transform */
-#endif
-
-/* These were added in libpng-1.0.2 */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-   png_voidp user_transform_ptr; /* user supplied struct for user transform */
-   png_byte user_transform_depth;    /* bit depth of user transformed pixels */
-   png_byte user_transform_channels; /* channels in user transformed pixels */
-#endif
-#endif
-
-   png_uint_32 mode;          /* tells us where we are in the PNG file */
-   png_uint_32 flags;         /* flags indicating various things to libpng */
-   png_uint_32 transformations; /* which transformations to perform */
-
-   png_uint_32 zowner;        /* ID (chunk type) of zstream owner, 0 if none */
-   z_stream    zstream;       /* decompression structure */
-
-#ifdef PNG_WRITE_SUPPORTED
-   png_compression_bufferp zbuffer_list; /* Created on demand during write */
-   uInt                    zbuffer_size; /* size of the actual buffer */
-
-   int zlib_level;            /* holds zlib compression level */
-   int zlib_method;           /* holds zlib compression method */
-   int zlib_window_bits;      /* holds zlib compression window bits */
-   int zlib_mem_level;        /* holds zlib compression memory level */
-   int zlib_strategy;         /* holds zlib compression strategy */
-#endif
-/* Added at libpng 1.5.4 */
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-   int zlib_text_level;            /* holds zlib compression level */
-   int zlib_text_method;           /* holds zlib compression method */
-   int zlib_text_window_bits;      /* holds zlib compression window bits */
-   int zlib_text_mem_level;        /* holds zlib compression memory level */
-   int zlib_text_strategy;         /* holds zlib compression strategy */
-#endif
-/* End of material added at libpng 1.5.4 */
-/* Added at libpng 1.6.0 */
-#ifdef PNG_WRITE_SUPPORTED
-   int zlib_set_level;        /* Actual values set into the zstream on write */
-   int zlib_set_method;
-   int zlib_set_window_bits;
-   int zlib_set_mem_level;
-   int zlib_set_strategy;
-#endif
-
-   png_uint_32 width;         /* width of image in pixels */
-   png_uint_32 height;        /* height of image in pixels */
-   png_uint_32 num_rows;      /* number of rows in current pass */
-   png_uint_32 usr_width;     /* width of row at start of write */
-   png_size_t rowbytes;       /* size of row in bytes */
-   png_uint_32 iwidth;        /* width of current interlaced row in pixels */
-   png_uint_32 row_number;    /* current row in interlace pass */
-   png_uint_32 chunk_name;    /* PNG_CHUNK() id of current chunk */
-   png_bytep prev_row;        /* buffer to save previous (unfiltered) row.
-                               * This is a pointer into big_prev_row
-                               */
-   png_bytep row_buf;         /* buffer to save current (unfiltered) row.
-                               * This is a pointer into big_row_buf
-                               */
-#ifdef PNG_WRITE_SUPPORTED
-   png_bytep sub_row;         /* buffer to save "sub" row when filtering */
-   png_bytep up_row;          /* buffer to save "up" row when filtering */
-   png_bytep avg_row;         /* buffer to save "avg" row when filtering */
-   png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
-#endif
-   png_size_t info_rowbytes;  /* Added in 1.5.4: cache of updated row bytes */
-
-   png_uint_32 idat_size;     /* current IDAT size for read */
-   png_uint_32 crc;           /* current chunk CRC value */
-   png_colorp palette;        /* palette from the input file */
-   png_uint_16 num_palette;   /* number of color entries in palette */
-
-/* Added at libpng-1.5.10 */
-#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   int num_palette_max;       /* maximum palette index found in IDAT */
-#endif
-
-   png_uint_16 num_trans;     /* number of transparency values */
-   png_byte compression;      /* file compression type (always 0) */
-   png_byte filter;           /* file filter type (always 0) */
-   png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
-   png_byte pass;             /* current interlace pass (0 - 6) */
-   png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
-   png_byte color_type;       /* color type of file */
-   png_byte bit_depth;        /* bit depth of file */
-   png_byte usr_bit_depth;    /* bit depth of users row: write only */
-   png_byte pixel_depth;      /* number of bits per pixel */
-   png_byte channels;         /* number of channels in file */
-#ifdef PNG_WRITE_SUPPORTED
-   png_byte usr_channels;     /* channels at start of write: write only */
-#endif
-   png_byte sig_bytes;        /* magic bytes read/written from start of file */
-   png_byte maximum_pixel_depth;
-                              /* pixel depth used for the row buffers */
-   png_byte transformed_pixel_depth;
-                              /* pixel depth after read/write transforms */
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-   png_uint_16 filler;           /* filler bytes for pixel expansion */
-#endif
-
-#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED)
-   png_byte background_gamma_type;
-   png_fixed_point background_gamma;
-   png_color_16 background;   /* background color in screen gamma space */
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   png_color_16 background_1; /* background normalized to gamma 1.0 */
-#endif
-#endif /* bKGD */
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_flush_ptr output_flush_fn; /* Function for flushing output */
-   png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
-   png_uint_32 flush_rows;    /* number of rows written since last flush */
-#endif
-
-#ifdef PNG_READ_GAMMA_SUPPORTED
-   int gamma_shift;      /* number of "insignificant" bits in 16-bit gamma */
-   png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */
-
-   png_bytep gamma_table;     /* gamma table for 8-bit depth files */
-   png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
-#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \
-   defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \
-   defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
-   png_bytep gamma_from_1;    /* converts from 1.0 to screen */
-   png_bytep gamma_to_1;      /* converts from file to 1.0 */
-   png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
-   png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
-#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */
-#endif
-
-#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
-   png_color_8 sig_bit;       /* significant bits in each available channel */
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-   png_color_8 shift;         /* shift for significant bit tranformation */
-#endif
-
-#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
- || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
-   png_bytep trans_alpha;           /* alpha values for paletted files */
-   png_color_16 trans_color;  /* transparent color for non-paletted files */
-#endif
-
-   png_read_status_ptr read_row_fn;   /* called after each row is decoded */
-   png_write_status_ptr write_row_fn; /* called after each row is encoded */
-#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
-   png_progressive_info_ptr info_fn; /* called after header data fully read */
-   png_progressive_row_ptr row_fn;   /* called after a prog. row is decoded */
-   png_progressive_end_ptr end_fn;   /* called after image is complete */
-   png_bytep save_buffer_ptr;        /* current location in save_buffer */
-   png_bytep save_buffer;            /* buffer for previously read data */
-   png_bytep current_buffer_ptr;     /* current location in current_buffer */
-   png_bytep current_buffer;         /* buffer for recently used data */
-   png_uint_32 push_length;          /* size of current input chunk */
-   png_uint_32 skip_length;          /* bytes to skip in input data */
-   png_size_t save_buffer_size;      /* amount of data now in save_buffer */
-   png_size_t save_buffer_max;       /* total size of save_buffer */
-   png_size_t buffer_size;           /* total amount of available input data */
-   png_size_t current_buffer_size;   /* amount of data now in current_buffer */
-   int process_mode;                 /* what push library is currently doing */
-   int cur_palette;                  /* current push library palette index */
-
-#endif /* PROGRESSIVE_READ */
-
-#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
-/* For the Borland special 64K segment handler */
-   png_bytepp offset_table_ptr;
-   png_bytep offset_table;
-   png_uint_16 offset_table_number;
-   png_uint_16 offset_table_count;
-   png_uint_16 offset_table_count_free;
-#endif
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-   png_bytep palette_lookup; /* lookup table for quantizing */
-   png_bytep quantize_index; /* index translation for palette files */
-#endif
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   png_byte heuristic_method;        /* heuristic for row filter selection */
-   png_byte num_prev_filters;        /* number of weights for previous rows */
-   png_bytep prev_filters;           /* filter type(s) of previous row(s) */
-   png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
-   png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
-   png_uint_16p filter_costs;        /* relative filter calculation cost */
-   png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
-#endif
-
-   /* Options */
-#ifdef PNG_SET_OPTION_SUPPORTED
-   png_byte options;           /* On/off state (up to 4 options) */
-#endif
-
-#if PNG_LIBPNG_VER < 10700
-/* To do: remove this from libpng-1.7 */
-#ifdef PNG_TIME_RFC1123_SUPPORTED
-   char time_buffer[29]; /* String to hold RFC 1123 time text */
-#endif
-#endif
-
-/* New members added in libpng-1.0.6 */
-
-   png_uint_32 free_me;    /* flags items libpng is responsible for freeing */
-
-#ifdef PNG_USER_CHUNKS_SUPPORTED
-   png_voidp user_chunk_ptr;
-#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
-   png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
-#endif
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   int          unknown_default; /* As PNG_HANDLE_* */
-   unsigned int num_chunk_list;  /* Number of entries in the list */
-   png_bytep    chunk_list;      /* List of png_byte[5]; the textual chunk name
-                                  * followed by a PNG_HANDLE_* byte */
-#endif
-
-/* New members added in libpng-1.0.3 */
-#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
-   png_byte rgb_to_gray_status;
-   /* Added in libpng 1.5.5 to record setting of coefficients: */
-   png_byte rgb_to_gray_coefficients_set;
-   /* These were changed from png_byte in libpng-1.0.6 */
-   png_uint_16 rgb_to_gray_red_coeff;
-   png_uint_16 rgb_to_gray_green_coeff;
-   /* deleted in 1.5.5: rgb_to_gray_blue_coeff; */
-#endif
-
-/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
-#if defined(PNG_MNG_FEATURES_SUPPORTED)
-/* Changed from png_byte to png_uint_32 at version 1.2.0 */
-   png_uint_32 mng_features_permitted;
-#endif
-
-/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_byte filter_type;
-#endif
-
-/* New members added in libpng-1.2.0 */
-
-/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
-#ifdef PNG_USER_MEM_SUPPORTED
-   png_voidp mem_ptr;             /* user supplied struct for mem functions */
-   png_malloc_ptr malloc_fn;      /* function for allocating memory */
-   png_free_ptr free_fn;          /* function for freeing memory */
-#endif
-
-/* New member added in libpng-1.0.13 and 1.2.0 */
-   png_bytep big_row_buf;         /* buffer to save current (unfiltered) row */
-
-#ifdef PNG_READ_QUANTIZE_SUPPORTED
-/* The following three members were added at version 1.0.14 and 1.2.4 */
-   png_bytep quantize_sort;          /* working sort array */
-   png_bytep index_to_palette;       /* where the original index currently is
-                                        in the palette */
-   png_bytep palette_to_index;       /* which original index points to this
-                                         palette color */
-#endif
-
-/* New members added in libpng-1.0.16 and 1.2.6 */
-   png_byte compression_type;
-
-#ifdef PNG_USER_LIMITS_SUPPORTED
-   png_uint_32 user_width_max;
-   png_uint_32 user_height_max;
-
-   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
-    * chunks that can be stored (0 means unlimited).
-    */
-   png_uint_32 user_chunk_cache_max;
-
-   /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk
-    * can occupy when decompressed.  0 means unlimited.
-    */
-   png_alloc_size_t user_chunk_malloc_max;
-#endif
-
-/* New member added in libpng-1.0.25 and 1.2.17 */
-#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-   /* Temporary storage for unknown chunk that the library doesn't recognize,
-    * used while reading the chunk.
-    */
-   png_unknown_chunk unknown_chunk;
-#endif
-
-/* New member added in libpng-1.2.26 */
-  png_size_t old_big_row_buf_size;
-
-#ifdef PNG_READ_SUPPORTED
-/* New member added in libpng-1.2.30 */
-  png_bytep        read_buffer;      /* buffer for reading chunk data */
-  png_alloc_size_t read_buffer_size; /* current size of the buffer */
-#endif
-#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
-  uInt             IDAT_read_size;   /* limit on read buffer size for IDAT */
-#endif
-
-#ifdef PNG_IO_STATE_SUPPORTED
-/* New member added in libpng-1.4.0 */
-   png_uint_32 io_state;
-#endif
-
-/* New member added in libpng-1.5.6 */
-   png_bytep big_prev_row;
-
-/* New member added in libpng-1.5.7 */
-   void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info,
-      png_bytep row, png_const_bytep prev_row);
-
-#ifdef PNG_READ_SUPPORTED
-#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
-   png_colorspace   colorspace;
-#endif
-#endif
-};
-#endif /* PNGSTRUCT_H */
--- a/DoConfig/fltk/png/pngtrans.c
+++ /dev/null
@@ -1,849 +1,0 @@
-
-/* pngtrans.c - transforms the data in a row (used by both readers and writers)
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Turn on BGR-to-RGB mapping */
-void PNGAPI
-png_set_bgr(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_bgr");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_BGR;
-}
-#endif
-
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Turn on 16 bit byte swapping */
-void PNGAPI
-png_set_swap(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_swap");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth == 16)
-      png_ptr->transformations |= PNG_SWAP_BYTES;
-}
-#endif
-
-#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
-/* Turn on pixel packing */
-void PNGAPI
-png_set_packing(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_packing");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth < 8)
-   {
-      png_ptr->transformations |= PNG_PACK;
-#     ifdef PNG_WRITE_SUPPORTED
-         png_ptr->usr_bit_depth = 8;
-#     endif
-   }
-}
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-/* Turn on packed pixel swapping */
-void PNGAPI
-png_set_packswap(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_packswap");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (png_ptr->bit_depth < 8)
-      png_ptr->transformations |= PNG_PACKSWAP;
-}
-#endif
-
-#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
-void PNGAPI
-png_set_shift(png_structrp png_ptr, png_const_color_8p true_bits)
-{
-   png_debug(1, "in png_set_shift");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_SHIFT;
-   png_ptr->shift = *true_bits;
-}
-#endif
-
-#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
-    defined(PNG_WRITE_INTERLACING_SUPPORTED)
-int PNGAPI
-png_set_interlace_handling(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_interlace handling");
-
-   if (png_ptr != 0 && png_ptr->interlaced != 0)
-   {
-      png_ptr->transformations |= PNG_INTERLACE;
-      return (7);
-   }
-
-   return (1);
-}
-#endif
-
-#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
-/* Add a filler byte on read, or remove a filler or alpha byte on write.
- * The filler type has changed in v0.95 to allow future 2-byte fillers
- * for 48-bit input data, as well as to avoid problems with some compilers
- * that don't like bytes as parameters.
- */
-void PNGAPI
-png_set_filler(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
-{
-   png_debug(1, "in png_set_filler");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* In libpng 1.6 it is possible to determine whether this is a read or write
-    * operation and therefore to do more checking here for a valid call.
-    */
-   if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
-   {
-#     ifdef PNG_READ_FILLER_SUPPORTED
-         /* On read png_set_filler is always valid, regardless of the base PNG
-          * format, because other transformations can give a format where the
-          * filler code can execute (basically an 8 or 16-bit component RGB or G
-          * format.)
-          *
-          * NOTE: usr_channels is not used by the read code!  (This has led to
-          * confusion in the past.)  The filler is only used in the read code.
-          */
-         png_ptr->filler = (png_uint_16)filler;
-#     else
-         png_app_error(png_ptr, "png_set_filler not supported on read");
-         PNG_UNUSED(filler) /* not used in the write case */
-         return;
-#     endif
-   }
-
-   else /* write */
-   {
-#     ifdef PNG_WRITE_FILLER_SUPPORTED
-         /* On write the usr_channels parameter must be set correctly at the
-          * start to record the number of channels in the app-supplied data.
-          */
-         switch (png_ptr->color_type)
-         {
-            case PNG_COLOR_TYPE_RGB:
-               png_ptr->usr_channels = 4;
-               break;
-
-            case PNG_COLOR_TYPE_GRAY:
-               if (png_ptr->bit_depth >= 8)
-               {
-                  png_ptr->usr_channels = 2;
-                  break;
-               }
-
-               else
-               {
-                  /* There simply isn't any code in libpng to strip out bits
-                   * from bytes when the components are less than a byte in
-                   * size!
-                   */
-                  png_app_error(png_ptr,
-                     "png_set_filler is invalid for low bit depth gray output");
-                  return;
-               }
-
-            default:
-               png_app_error(png_ptr,
-                  "png_set_filler: inappropriate color type");
-               return;
-         }
-#     else
-         png_app_error(png_ptr, "png_set_filler not supported on write");
-         return;
-#     endif
-   }
-
-   /* Here on success - libpng supports the operation, set the transformation
-    * and the flag to say where the filler channel is.
-    */
-   png_ptr->transformations |= PNG_FILLER;
-
-   if (filler_loc == PNG_FILLER_AFTER)
-      png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
-
-   else
-      png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
-}
-
-/* Added to libpng-1.2.7 */
-void PNGAPI
-png_set_add_alpha(png_structrp png_ptr, png_uint_32 filler, int filler_loc)
-{
-   png_debug(1, "in png_set_add_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_set_filler(png_ptr, filler, filler_loc);
-   /* The above may fail to do anything. */
-   if ((png_ptr->transformations & PNG_FILLER) != 0)
-      png_ptr->transformations |= PNG_ADD_ALPHA;
-}
-
-#endif
-
-#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_swap_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_swap_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_SWAP_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
-    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
-void PNGAPI
-png_set_invert_alpha(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_invert_alpha");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_INVERT_ALPHA;
-}
-#endif
-
-#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
-void PNGAPI
-png_set_invert_mono(png_structrp png_ptr)
-{
-   png_debug(1, "in png_set_invert_mono");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_INVERT_MONO;
-}
-
-/* Invert monochrome grayscale data */
-void /* PRIVATE */
-png_do_invert(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_invert");
-
-  /* This test removed from libpng version 1.0.13 and 1.2.0:
-   *   if (row_info->bit_depth == 1 &&
-   */
-   if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i++)
-      {
-         *rp = (png_byte)(~(*rp));
-         rp++;
-      }
-   }
-
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-      row_info->bit_depth == 8)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i += 2)
-      {
-         *rp = (png_byte)(~(*rp));
-         rp += 2;
-      }
-   }
-
-#ifdef PNG_16BIT_SUPPORTED
-   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
-      row_info->bit_depth == 16)
-   {
-      png_bytep rp = row;
-      png_size_t i;
-      png_size_t istop = row_info->rowbytes;
-
-      for (i = 0; i < istop; i += 4)
-      {
-         *rp = (png_byte)(~(*rp));
-         *(rp + 1) = (png_byte)(~(*(rp + 1)));
-         rp += 4;
-      }
-   }
-#endif
-}
-#endif
-
-#ifdef PNG_16BIT_SUPPORTED
-#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
-/* Swaps byte order on 16 bit depth images */
-void /* PRIVATE */
-png_do_swap(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_swap");
-
-   if (row_info->bit_depth == 16)
-   {
-      png_bytep rp = row;
-      png_uint_32 i;
-      png_uint_32 istop= row_info->width * row_info->channels;
-
-      for (i = 0; i < istop; i++, rp += 2)
-      {
-#ifdef PNG_BUILTIN_BSWAP16_SUPPORTED
-         /* Feature added to libpng-1.6.11 for testing purposes, not
-          * enabled by default.
-          */
-         *(png_uint_16*)rp = __builtin_bswap16(*(png_uint_16*)rp);
-#else
-         png_byte t = *rp;
-         *rp = *(rp + 1);
-         *(rp + 1) = t;
-#endif
-      }
-   }
-}
-#endif
-#endif
-
-#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
-static PNG_CONST png_byte onebppswaptable[256] = {
-   0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
-   0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
-   0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
-   0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
-   0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
-   0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
-   0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
-   0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
-   0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
-   0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
-   0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
-   0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
-   0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
-   0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
-   0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
-   0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
-   0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
-   0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
-   0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
-   0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
-   0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
-   0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
-   0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
-   0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
-   0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
-   0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
-   0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
-   0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
-   0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
-   0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
-   0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
-   0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-
-static PNG_CONST png_byte twobppswaptable[256] = {
-   0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
-   0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
-   0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
-   0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
-   0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
-   0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
-   0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
-   0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
-   0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
-   0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
-   0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
-   0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
-   0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
-   0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
-   0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
-   0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
-   0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
-   0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
-   0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
-   0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
-   0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
-   0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
-   0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
-   0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
-   0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
-   0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
-   0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
-   0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
-   0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
-   0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
-   0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
-   0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
-};
-
-static PNG_CONST png_byte fourbppswaptable[256] = {
-   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
-   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
-   0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
-   0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
-   0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
-   0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
-   0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
-   0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
-   0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
-   0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
-   0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
-   0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
-   0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
-   0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
-   0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
-   0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
-   0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
-   0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
-   0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
-   0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
-   0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
-   0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
-   0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
-   0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
-   0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
-   0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
-   0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
-   0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
-   0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
-   0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
-   0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
-   0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
-};
-
-/* Swaps pixel packing order within bytes */
-void /* PRIVATE */
-png_do_packswap(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_packswap");
-
-   if (row_info->bit_depth < 8)
-   {
-      png_bytep rp;
-      png_const_bytep end, table;
-
-      end = row + row_info->rowbytes;
-
-      if (row_info->bit_depth == 1)
-         table = onebppswaptable;
-
-      else if (row_info->bit_depth == 2)
-         table = twobppswaptable;
-
-      else if (row_info->bit_depth == 4)
-         table = fourbppswaptable;
-
-      else
-         return;
-
-      for (rp = row; rp < end; rp++)
-         *rp = table[*rp];
-   }
-}
-#endif /* PACKSWAP || WRITE_PACKSWAP */
-
-#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
-    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
-/* Remove a channel - this used to be 'png_do_strip_filler' but it used a
- * somewhat weird combination of flags to determine what to do.  All the calls
- * to png_do_strip_filler are changed in 1.5.2 to call this instead with the
- * correct arguments.
- *
- * The routine isn't general - the channel must be the channel at the start or
- * end (not in the middle) of each pixel.
- */
-void /* PRIVATE */
-png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start)
-{
-   png_bytep sp = row; /* source pointer */
-   png_bytep dp = row; /* destination pointer */
-   png_bytep ep = row + row_info->rowbytes; /* One beyond end of row */
-
-   /* At the start sp will point to the first byte to copy and dp to where
-    * it is copied to.  ep always points just beyond the end of the row, so
-    * the loop simply copies (channels-1) channels until sp reaches ep.
-    *
-    * at_start:        0 -- convert AG, XG, ARGB, XRGB, AAGG, XXGG, etc.
-    *            nonzero -- convert GA, GX, RGBA, RGBX, GGAA, RRGGBBXX, etc.
-    */
-
-   /* GA, GX, XG cases */
-   if (row_info->channels == 2)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (at_start != 0) /* Skip initial filler */
-            ++sp;
-         else          /* Skip initial channel and, for sp, the filler */
-            sp += 2, ++dp;
-
-         /* For a 1 pixel wide image there is nothing to do */
-         while (sp < ep)
-            *dp++ = *sp, sp += 2;
-
-         row_info->pixel_depth = 8;
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         if (at_start != 0) /* Skip initial filler */
-            sp += 2;
-         else          /* Skip initial channel and, for sp, the filler */
-            sp += 4, dp += 2;
-
-         while (sp < ep)
-            *dp++ = *sp++, *dp++ = *sp, sp += 3;
-
-         row_info->pixel_depth = 16;
-      }
-
-      else
-         return; /* bad bit depth */
-
-      row_info->channels = 1;
-
-      /* Finally fix the color type if it records an alpha channel */
-      if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-         row_info->color_type = PNG_COLOR_TYPE_GRAY;
-   }
-
-   /* RGBA, RGBX, XRGB cases */
-   else if (row_info->channels == 4)
-   {
-      if (row_info->bit_depth == 8)
-      {
-         if (at_start != 0) /* Skip initial filler */
-            ++sp;
-         else          /* Skip initial channels and, for sp, the filler */
-            sp += 4, dp += 3;
-
-         /* Note that the loop adds 3 to dp and 4 to sp each time. */
-         while (sp < ep)
-            *dp++ = *sp++, *dp++ = *sp++, *dp++ = *sp, sp += 2;
-
-         row_info->pixel_depth = 24;
-      }
-
-      else if (row_info->bit_depth == 16)
-      {
-         if (at_start != 0) /* Skip initial filler */
-            sp += 2;
-         else          /* Skip initial channels and, for sp, the filler */
-            sp += 8, dp += 6;
-
-         while (sp < ep)
-         {
-            /* Copy 6 bytes, skip 2 */
-            *dp++ = *sp++, *dp++ = *sp++;
-            *dp++ = *sp++, *dp++ = *sp++;
-            *dp++ = *sp++, *dp++ = *sp, sp += 3;
-         }
-
-         row_info->pixel_depth = 48;
-      }
-
-      else
-         return; /* bad bit depth */
-
-      row_info->channels = 3;
-
-      /* Finally fix the color type if it records an alpha channel */
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         row_info->color_type = PNG_COLOR_TYPE_RGB;
-   }
-
-   else
-      return; /* The filler channel has gone already */
-
-   /* Fix the rowbytes value. */
-   row_info->rowbytes = dp-row;
-}
-#endif
-
-#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
-/* Swaps red and blue bytes within a pixel */
-void /* PRIVATE */
-png_do_bgr(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_bgr");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      png_uint_32 row_width = row_info->width;
-      if (row_info->bit_depth == 8)
-      {
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 3)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 2);
-               *(rp + 2) = save;
-            }
-         }
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 4)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 2);
-               *(rp + 2) = save;
-            }
-         }
-      }
-
-#ifdef PNG_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 6)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 4);
-               *(rp + 4) = save;
-               save = *(rp + 1);
-               *(rp + 1) = *(rp + 5);
-               *(rp + 5) = save;
-            }
-         }
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-         {
-            png_bytep rp;
-            png_uint_32 i;
-
-            for (i = 0, rp = row; i < row_width; i++, rp += 8)
-            {
-               png_byte save = *rp;
-               *rp = *(rp + 4);
-               *(rp + 4) = save;
-               save = *(rp + 1);
-               *(rp + 1) = *(rp + 5);
-               *(rp + 5) = save;
-            }
-         }
-      }
-#endif
-   }
-}
-#endif /* READ_BGR || WRITE_BGR */
-
-#if defined(PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED) || \
-    defined(PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED)
-/* Added at libpng-1.5.10 */
-void /* PRIVATE */
-png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info)
-{
-   if (png_ptr->num_palette < (1 << row_info->bit_depth) &&
-      png_ptr->num_palette > 0) /* num_palette can be 0 in MNG files */
-   {
-      /* Calculations moved outside switch in an attempt to stop different
-       * compiler warnings.  'padding' is in *bits* within the last byte, it is
-       * an 'int' because pixel_depth becomes an 'int' in the expression below,
-       * and this calculation is used because it avoids warnings that other
-       * forms produced on either GCC or MSVC.
-       */
-      int padding = (-row_info->pixel_depth * row_info->width) & 7;
-      png_bytep rp = png_ptr->row_buf + row_info->rowbytes;
-
-      switch (row_info->bit_depth)
-      {
-         case 1:
-         {
-            /* in this case, all bytes must be 0 so we don't need
-             * to unpack the pixels except for the rightmost one.
-             */
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              if (*rp >> padding != 0)
-                 png_ptr->num_palette_max = 1;
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 2:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              int i = ((*rp >> padding) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 2) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 4) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 6) & 0x03);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 4:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-              int i = ((*rp >> padding) & 0x0f);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              i = (((*rp >> padding) >> 4) & 0x0f);
-
-              if (i > png_ptr->num_palette_max)
-                 png_ptr->num_palette_max = i;
-
-              padding = 0;
-            }
-
-            break;
-         }
-
-         case 8:
-         {
-            for (; rp > png_ptr->row_buf; rp--)
-            {
-               if (*rp > png_ptr->num_palette_max)
-                  png_ptr->num_palette_max = (int) *rp;
-            }
-
-            break;
-         }
-
-         default:
-            break;
-      }
-   }
-}
-#endif /* CHECK_FOR_INVALID_INDEX */
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
-    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-void PNGAPI
-png_set_user_transform_info(png_structrp png_ptr, png_voidp
-   user_transform_ptr, int user_transform_depth, int user_transform_channels)
-{
-   png_debug(1, "in png_set_user_transform_info");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
-   if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
-      (png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
-   {
-      png_app_error(png_ptr,
-            "info change after png_start_read_image or png_read_update_info");
-      return;
-   }
-#endif
-
-   png_ptr->user_transform_ptr = user_transform_ptr;
-   png_ptr->user_transform_depth = (png_byte)user_transform_depth;
-   png_ptr->user_transform_channels = (png_byte)user_transform_channels;
-}
-#endif
-
-/* This function returns a pointer to the user_transform_ptr associated with
- * the user transform functions.  The application should free any memory
- * associated with this pointer before png_write_destroy and png_read_destroy
- * are called.
- */
-#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
-png_voidp PNGAPI
-png_get_user_transform_ptr(png_const_structrp png_ptr)
-{
-   if (png_ptr == NULL)
-      return (NULL);
-
-   return png_ptr->user_transform_ptr;
-}
-#endif
-
-#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED
-png_uint_32 PNGAPI
-png_get_current_row_number(png_const_structrp png_ptr)
-{
-   /* See the comments in png.h - this is the sub-image row when reading an
-    * interlaced image.
-    */
-   if (png_ptr != NULL)
-      return png_ptr->row_number;
-
-   return PNG_UINT_32_MAX; /* help the app not to fail silently */
-}
-
-png_byte PNGAPI
-png_get_current_pass_number(png_const_structrp png_ptr)
-{
-   if (png_ptr != NULL)
-      return png_ptr->pass;
-   return 8; /* invalid */
-}
-#endif /* USER_TRANSFORM_INFO */
-#endif /* READ_USER_TRANSFORM || WRITE_USER_TRANSFORM */
-#endif /* READ || WRITE */
--- a/DoConfig/fltk/png/pngwio.c
+++ /dev/null
@@ -1,168 +1,0 @@
-
-/* pngwio.c - functions for data output
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- *
- * This file provides a location for all output.  Users who need
- * special handling are expected to write functions that have the same
- * arguments as these and perform similar functions, but that possibly
- * use different output methods.  Note that you shouldn't change these
- * functions, but rather write replacement functions and then change
- * them at run time with png_set_write_fn(...).
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-
-/* Write the data to whatever output you are using.  The default routine
- * writes to a file pointer.  Note that this routine sometimes gets called
- * with very small lengths, so you should implement some kind of simple
- * buffering if you are using unbuffered writes.  This should never be asked
- * to write more than 64K on a 16 bit machine.
- */
-
-void /* PRIVATE */
-png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
-{
-   /* NOTE: write_data_fn must not change the buffer! */
-   if (png_ptr->write_data_fn != NULL )
-      (*(png_ptr->write_data_fn))(png_ptr, png_constcast(png_bytep,data),
-         length);
-
-   else
-      png_error(png_ptr, "Call to NULL write function");
-}
-
-#ifdef PNG_STDIO_SUPPORTED
-/* This is the function that does the actual writing of data.  If you are
- * not writing to a standard C stream, you should create a replacement
- * write_data function and use it at run time with png_set_write_fn(), rather
- * than changing the library.
- */
-void PNGCBAPI
-png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
-{
-   png_size_t check;
-
-   if (png_ptr == NULL)
-      return;
-
-   check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
-
-   if (check != length)
-      png_error(png_ptr, "Write Error");
-}
-#endif
-
-/* This function is called to output any data pending writing (normally
- * to disk).  After png_flush is called, there should be no data pending
- * writing in any buffers.
- */
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-void /* PRIVATE */
-png_flush(png_structrp png_ptr)
-{
-   if (png_ptr->output_flush_fn != NULL)
-      (*(png_ptr->output_flush_fn))(png_ptr);
-}
-
-#  ifdef PNG_STDIO_SUPPORTED
-void PNGCBAPI
-png_default_flush(png_structp png_ptr)
-{
-   png_FILE_p io_ptr;
-
-   if (png_ptr == NULL)
-      return;
-
-   io_ptr = png_voidcast(png_FILE_p, (png_ptr->io_ptr));
-   fflush(io_ptr);
-}
-#  endif
-#endif
-
-/* This function allows the application to supply new output functions for
- * libpng if standard C streams aren't being used.
- *
- * This function takes as its arguments:
- * png_ptr       - pointer to a png output data structure
- * io_ptr        - pointer to user supplied structure containing info about
- *                 the output functions.  May be NULL.
- * write_data_fn - pointer to a new output function that takes as its
- *                 arguments a pointer to a png_struct, a pointer to
- *                 data to be written, and a 32-bit unsigned int that is
- *                 the number of bytes to be written.  The new write
- *                 function should call png_error(png_ptr, "Error msg")
- *                 to exit and output any fatal error messages.  May be
- *                 NULL, in which case libpng's default function will
- *                 be used.
- * flush_data_fn - pointer to a new flush function that takes as its
- *                 arguments a pointer to a png_struct.  After a call to
- *                 the flush function, there should be no data in any buffers
- *                 or pending transmission.  If the output method doesn't do
- *                 any buffering of output, a function prototype must still be
- *                 supplied although it doesn't have to do anything.  If
- *                 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
- *                 time, output_flush_fn will be ignored, although it must be
- *                 supplied for compatibility.  May be NULL, in which case
- *                 libpng's default function will be used, if
- *                 PNG_WRITE_FLUSH_SUPPORTED is defined.  This is not
- *                 a good idea if io_ptr does not point to a standard
- *                 *FILE structure.
- */
-void PNGAPI
-png_set_write_fn(png_structrp png_ptr, png_voidp io_ptr,
-    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->io_ptr = io_ptr;
-
-#ifdef PNG_STDIO_SUPPORTED
-   if (write_data_fn != NULL)
-      png_ptr->write_data_fn = write_data_fn;
-
-   else
-      png_ptr->write_data_fn = png_default_write_data;
-#else
-   png_ptr->write_data_fn = write_data_fn;
-#endif
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_STDIO_SUPPORTED
-
-   if (output_flush_fn != NULL)
-      png_ptr->output_flush_fn = output_flush_fn;
-
-   else
-      png_ptr->output_flush_fn = png_default_flush;
-
-#  else
-   png_ptr->output_flush_fn = output_flush_fn;
-#  endif
-#else
-   PNG_UNUSED(output_flush_fn)
-#endif /* WRITE_FLUSH */
-
-#ifdef PNG_READ_SUPPORTED
-   /* It is an error to read while writing a png file */
-   if (png_ptr->read_data_fn != NULL)
-   {
-      png_ptr->read_data_fn = NULL;
-
-      png_warning(png_ptr,
-          "Can't set both read_data_fn and write_data_fn in the"
-          " same structure");
-   }
-#endif
-}
-#endif /* WRITE */
--- a/DoConfig/fltk/png/pngwrite.c
+++ /dev/null
@@ -1,2455 +1,0 @@
-
-/* pngwrite.c - general routines to write a PNG file
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
-#  include <errno.h>
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-/* Write out all the unknown chunks for the current given location */
-static void
-write_unknown_chunks(png_structrp png_ptr, png_const_inforp info_ptr,
-   unsigned int where)
-{
-   if (info_ptr->unknown_chunks_num != 0)
-   {
-      png_const_unknown_chunkp up;
-
-      png_debug(5, "writing extra chunks");
-
-      for (up = info_ptr->unknown_chunks;
-           up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
-           ++up)
-         if ((up->location & where) != 0)
-      {
-         /* If per-chunk unknown chunk handling is enabled use it, otherwise
-          * just write the chunks the application has set.
-          */
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-         int keep = png_handle_as_unknown(png_ptr, up->name);
-
-         /* NOTE: this code is radically different from the read side in the
-          * matter of handling an ancillary unknown chunk.  In the read side
-          * the default behavior is to discard it, in the code below the default
-          * behavior is to write it.  Critical chunks are, however, only
-          * written if explicitly listed or if the default is set to write all
-          * unknown chunks.
-          *
-          * The default handling is also slightly weird - it is not possible to
-          * stop the writing of all unsafe-to-copy chunks!
-          *
-          * TODO: REVIEW: this would seem to be a bug.
-          */
-         if (keep != PNG_HANDLE_CHUNK_NEVER &&
-             ((up->name[3] & 0x20) /* safe-to-copy overrides everything */ ||
-              keep == PNG_HANDLE_CHUNK_ALWAYS ||
-              (keep == PNG_HANDLE_CHUNK_AS_DEFAULT &&
-               png_ptr->unknown_default == PNG_HANDLE_CHUNK_ALWAYS)))
-#endif
-         {
-            /* TODO: review, what is wrong with a zero length unknown chunk? */
-            if (up->size == 0)
-               png_warning(png_ptr, "Writing zero-length unknown chunk");
-
-            png_write_chunk(png_ptr, up->name, up->data, up->size);
-         }
-      }
-   }
-}
-#endif /* WRITE_UNKNOWN_CHUNKS */
-
-/* Writes all the PNG information.  This is the suggested way to use the
- * library.  If you have a new chunk to add, make a function to write it,
- * and put it in the correct location here.  If you want the chunk written
- * after the image data, put it in png_write_end().  I strongly encourage
- * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing
- * the chunk, as that will keep the code from breaking if you want to just
- * write a plain PNG file.  If you have long comments, I suggest writing
- * them in png_write_end(), and compressing them.
- */
-void PNGAPI
-png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
-{
-   png_debug(1, "in png_write_info_before_PLTE");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if ((png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE) == 0)
-   {
-   /* Write PNG signature */
-   png_write_sig(png_ptr);
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0 && \
-       png_ptr->mng_features_permitted != 0)
-   {
-      png_warning(png_ptr, "MNG features are not allowed in a PNG datastream");
-      png_ptr->mng_features_permitted = 0;
-   }
-#endif
-
-   /* Write IHDR information. */
-   png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
-       info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
-       info_ptr->filter_type,
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-       info_ptr->interlace_type
-#else
-       0
-#endif
-      );
-
-   /* The rest of these check to see if the valid field has the appropriate
-    * flag set, and if it does, writes the chunk.
-    *
-    * 1.6.0: COLORSPACE support controls the writing of these chunks too, and
-    * the chunks will be written if the WRITE routine is there and information
-    * is available in the COLORSPACE.  (See png_colorspace_sync_info in png.c
-    * for where the valid flags get set.)
-    *
-    * Under certain circumstances the colorspace can be invalidated without
-    * syncing the info_struct 'valid' flags; this happens if libpng detects and
-    * error and calls png_error while the color space is being set, yet the
-    * application continues writing the PNG.  So check the 'invalid' flag here
-    * too.
-    */
-#ifdef PNG_GAMMA_SUPPORTED
-#  ifdef PNG_WRITE_gAMA_SUPPORTED
-      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
-          (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_gAMA) != 0 &&
-          (info_ptr->valid & PNG_INFO_gAMA) != 0)
-         png_write_gAMA_fixed(png_ptr, info_ptr->colorspace.gamma);
-#  endif
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-   /* Write only one of sRGB or an ICC profile.  If a profile was supplied
-    * and it matches one of the known sRGB ones issue a warning.
-    */
-#  ifdef PNG_WRITE_iCCP_SUPPORTED
-      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
-          (info_ptr->valid & PNG_INFO_iCCP) != 0)
-      {
-#        ifdef PNG_WRITE_sRGB_SUPPORTED
-            if ((info_ptr->valid & PNG_INFO_sRGB) != 0)
-               png_app_warning(png_ptr,
-                  "profile matches sRGB but writing iCCP instead");
-#        endif
-
-         png_write_iCCP(png_ptr, info_ptr->iccp_name,
-            info_ptr->iccp_profile);
-      }
-#     ifdef PNG_WRITE_sRGB_SUPPORTED
-         else
-#     endif
-#  endif
-
-#  ifdef PNG_WRITE_sRGB_SUPPORTED
-      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
-          (info_ptr->valid & PNG_INFO_sRGB) != 0)
-         png_write_sRGB(png_ptr, info_ptr->colorspace.rendering_intent);
-#  endif /* WRITE_sRGB */
-#endif /* COLORSPACE */
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_sBIT) != 0)
-      png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
-#endif
-
-#ifdef PNG_COLORSPACE_SUPPORTED
-#  ifdef PNG_WRITE_cHRM_SUPPORTED
-      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
-         (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_cHRM) != 0 &&
-         (info_ptr->valid & PNG_INFO_cHRM) != 0)
-         png_write_cHRM_fixed(png_ptr, &info_ptr->colorspace.end_points_xy);
-#  endif
-#endif
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-      write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_IHDR);
-#endif
-
-      png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
-   }
-}
-
-void PNGAPI
-png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
-{
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-   int i;
-#endif
-
-   png_debug(1, "in png_write_info");
-
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   png_write_info_before_PLTE(png_ptr, info_ptr);
-
-   if ((info_ptr->valid & PNG_INFO_PLTE) != 0)
-      png_write_PLTE(png_ptr, info_ptr->palette,
-          (png_uint_32)info_ptr->num_palette);
-
-   else if ((info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) !=0)
-      png_error(png_ptr, "Valid palette required for paletted images");
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_tRNS) !=0)
-   {
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-      /* Invert the alpha channel (in tRNS) */
-      if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0 &&
-          info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         int j;
-         for (j = 0; j<(int)info_ptr->num_trans; j++)
-            info_ptr->trans_alpha[j] =
-               (png_byte)(255 - info_ptr->trans_alpha[j]);
-      }
-#endif
-      png_write_tRNS(png_ptr, info_ptr->trans_alpha, &(info_ptr->trans_color),
-          info_ptr->num_trans, info_ptr->color_type);
-   }
-#endif
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_bKGD) != 0)
-      png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_hIST) != 0)
-      png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_oFFs) != 0)
-      png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
-          info_ptr->offset_unit_type);
-#endif
-
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_pCAL) != 0)
-      png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
-          info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams,
-          info_ptr->pcal_units, info_ptr->pcal_params);
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_sCAL) != 0)
-      png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
-          info_ptr->scal_s_width, info_ptr->scal_s_height);
-#endif /* sCAL */
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_pHYs) != 0)
-      png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
-          info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type);
-#endif /* pHYs */
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_tIME) != 0)
-   {
-      png_write_tIME(png_ptr, &(info_ptr->mod_time));
-      png_ptr->mode |= PNG_WROTE_tIME;
-   }
-#endif /* tIME */
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-   if ((info_ptr->valid & PNG_INFO_sPLT) != 0)
-      for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
-         png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
-#endif /* sPLT */
-
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-   /* Check to see if we need to write text chunks */
-   for (i = 0; i < info_ptr->num_text; i++)
-   {
-      png_debug2(2, "Writing header text chunk %d, type %d", i,
-          info_ptr->text[i].compression);
-      /* An internationalized chunk? */
-      if (info_ptr->text[i].compression > 0)
-      {
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-         /* Write international chunk */
-         png_write_iTXt(png_ptr,
-             info_ptr->text[i].compression,
-             info_ptr->text[i].key,
-             info_ptr->text[i].lang,
-             info_ptr->text[i].lang_key,
-             info_ptr->text[i].text);
-         /* Mark this chunk as written */
-         if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-         else
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-#else
-         png_warning(png_ptr, "Unable to write international text");
-#endif
-      }
-
-      /* If we want a compressed text chunk */
-      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt)
-      {
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-         /* Write compressed chunk */
-         png_write_zTXt(png_ptr, info_ptr->text[i].key,
-             info_ptr->text[i].text, info_ptr->text[i].compression);
-         /* Mark this chunk as written */
-         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-#else
-         png_warning(png_ptr, "Unable to write compressed text");
-#endif
-      }
-
-      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-      {
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-         /* Write uncompressed chunk */
-         png_write_tEXt(png_ptr, info_ptr->text[i].key,
-             info_ptr->text[i].text,
-             0);
-         /* Mark this chunk as written */
-         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-#else
-         /* Can't get here */
-         png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
-      }
-   }
-#endif /* tEXt */
-
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-   write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_PLTE);
-#endif
-}
-
-/* Writes the end of the PNG file.  If you don't want to write comments or
- * time information, you can pass NULL for info.  If you already wrote these
- * in png_write_info(), do not write them again here.  If you have long
- * comments, I suggest writing them here, and compressing them.
- */
-void PNGAPI
-png_write_end(png_structrp png_ptr, png_inforp info_ptr)
-{
-   png_debug(1, "in png_write_end");
-
-   if (png_ptr == NULL)
-      return;
-
-   if ((png_ptr->mode & PNG_HAVE_IDAT) == 0)
-      png_error(png_ptr, "No IDATs written into file");
-
-#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   if (png_ptr->num_palette_max > png_ptr->num_palette)
-      png_benign_error(png_ptr, "Wrote palette index exceeding num_palette");
-#endif
-
-   /* See if user wants us to write information chunks */
-   if (info_ptr != NULL)
-   {
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-      int i; /* local index variable */
-#endif
-#ifdef PNG_WRITE_tIME_SUPPORTED
-      /* Check to see if user has supplied a time chunk */
-      if ((info_ptr->valid & PNG_INFO_tIME) != 0 &&
-          (png_ptr->mode & PNG_WROTE_tIME) == 0)
-         png_write_tIME(png_ptr, &(info_ptr->mod_time));
-
-#endif
-#ifdef PNG_WRITE_TEXT_SUPPORTED
-      /* Loop through comment chunks */
-      for (i = 0; i < info_ptr->num_text; i++)
-      {
-         png_debug2(2, "Writing trailer text chunk %d, type %d", i,
-            info_ptr->text[i].compression);
-         /* An internationalized chunk? */
-         if (info_ptr->text[i].compression > 0)
-         {
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-            /* Write international chunk */
-            png_write_iTXt(png_ptr,
-                info_ptr->text[i].compression,
-                info_ptr->text[i].key,
-                info_ptr->text[i].lang,
-                info_ptr->text[i].lang_key,
-                info_ptr->text[i].text);
-            /* Mark this chunk as written */
-            if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-               info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-            else
-               info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-#else
-            png_warning(png_ptr, "Unable to write international text");
-#endif
-         }
-
-         else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
-         {
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-            /* Write compressed chunk */
-            png_write_zTXt(png_ptr, info_ptr->text[i].key,
-                info_ptr->text[i].text, info_ptr->text[i].compression);
-            /* Mark this chunk as written */
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
-#else
-            png_warning(png_ptr, "Unable to write compressed text");
-#endif
-         }
-
-         else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
-         {
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-            /* Write uncompressed chunk */
-            png_write_tEXt(png_ptr, info_ptr->text[i].key,
-                info_ptr->text[i].text, 0);
-            /* Mark this chunk as written */
-            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
-#else
-            png_warning(png_ptr, "Unable to write uncompressed text");
-#endif
-         }
-      }
-#endif
-#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-      write_unknown_chunks(png_ptr, info_ptr, PNG_AFTER_IDAT);
-#endif
-   }
-
-   png_ptr->mode |= PNG_AFTER_IDAT;
-
-   /* Write end of PNG file */
-   png_write_IEND(png_ptr);
-
-   /* This flush, added in libpng-1.0.8, removed from libpng-1.0.9beta03,
-    * and restored again in libpng-1.2.30, may cause some applications that
-    * do not set png_ptr->output_flush_fn to crash.  If your application
-    * experiences a problem, please try building libpng with
-    * PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED defined, and report the event to
-    * png-mng-implement at lists.sf.net .
-    */
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-#  ifdef PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED
-   png_flush(png_ptr);
-#  endif
-#endif
-}
-
-#ifdef PNG_CONVERT_tIME_SUPPORTED
-void PNGAPI
-png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm * ttime)
-{
-   png_debug(1, "in png_convert_from_struct_tm");
-
-   ptime->year = (png_uint_16)(1900 + ttime->tm_year);
-   ptime->month = (png_byte)(ttime->tm_mon + 1);
-   ptime->day = (png_byte)ttime->tm_mday;
-   ptime->hour = (png_byte)ttime->tm_hour;
-   ptime->minute = (png_byte)ttime->tm_min;
-   ptime->second = (png_byte)ttime->tm_sec;
-}
-
-void PNGAPI
-png_convert_from_time_t(png_timep ptime, time_t ttime)
-{
-   struct tm *tbuf;
-
-   png_debug(1, "in png_convert_from_time_t");
-
-   tbuf = gmtime(&ttime);
-   png_convert_from_struct_tm(ptime, tbuf);
-}
-#endif
-
-/* Initialize png_ptr structure, and allocate any memory needed */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_write_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn),PNG_ALLOCATED)
-{
-#ifndef PNG_USER_MEM_SUPPORTED
-   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-       error_fn, warn_fn, NULL, NULL, NULL);
-#else
-   return png_create_write_struct_2(user_png_ver, error_ptr, error_fn,
-       warn_fn, NULL, NULL, NULL);
-}
-
-/* Alternate initialize png_ptr structure, and allocate any memory needed */
-PNG_FUNCTION(png_structp,PNGAPI
-png_create_write_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
-    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
-    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
-{
-   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
-       error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
-#endif /* USER_MEM */
-   if (png_ptr != NULL)
-   {
-      /* Set the zlib control values to defaults; they can be overridden by the
-       * application after the struct has been created.
-       */
-      png_ptr->zbuffer_size = PNG_ZBUF_SIZE;
-
-      /* The 'zlib_strategy' setting is irrelevant because png_default_claim in
-       * pngwutil.c defaults it according to whether or not filters will be
-       * used, and ignores this setting.
-       */
-      png_ptr->zlib_strategy = PNG_Z_DEFAULT_STRATEGY;
-      png_ptr->zlib_level = PNG_Z_DEFAULT_COMPRESSION;
-      png_ptr->zlib_mem_level = 8;
-      png_ptr->zlib_window_bits = 15;
-      png_ptr->zlib_method = 8;
-
-#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
-      png_ptr->zlib_text_strategy = PNG_TEXT_Z_DEFAULT_STRATEGY;
-      png_ptr->zlib_text_level = PNG_TEXT_Z_DEFAULT_COMPRESSION;
-      png_ptr->zlib_text_mem_level = 8;
-      png_ptr->zlib_text_window_bits = 15;
-      png_ptr->zlib_text_method = 8;
-#endif /* WRITE_COMPRESSED_TEXT */
-
-      /* This is a highly dubious configuration option; by default it is off,
-       * but it may be appropriate for private builds that are testing
-       * extensions not conformant to the current specification, or of
-       * applications that must not fail to write at all costs!
-       */
-#ifdef PNG_BENIGN_WRITE_ERRORS_SUPPORTED
-      /* In stable builds only warn if an application error can be completely
-       * handled.
-       */
-      png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
-#endif
-
-      /* App warnings are warnings in release (or release candidate) builds but
-       * are errors during development.
-       */
-#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-      png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
-#endif
-
-      /* TODO: delay this, it can be done in png_init_io() (if the app doesn't
-       * do it itself) avoiding setting the default function if it is not
-       * required.
-       */
-      png_set_write_fn(png_ptr, NULL, NULL, NULL);
-   }
-
-   return png_ptr;
-}
-
-
-/* Write a few rows of image data.  If the image is interlaced,
- * either you will have to write the 7 sub images, or, if you
- * have called png_set_interlace_handling(), you will have to
- * "write" the image seven times.
- */
-void PNGAPI
-png_write_rows(png_structrp png_ptr, png_bytepp row,
-    png_uint_32 num_rows)
-{
-   png_uint_32 i; /* row counter */
-   png_bytepp rp; /* row pointer */
-
-   png_debug(1, "in png_write_rows");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* Loop through the rows */
-   for (i = 0, rp = row; i < num_rows; i++, rp++)
-   {
-      png_write_row(png_ptr, *rp);
-   }
-}
-
-/* Write the image.  You only need to call this function once, even
- * if you are writing an interlaced image.
- */
-void PNGAPI
-png_write_image(png_structrp png_ptr, png_bytepp image)
-{
-   png_uint_32 i; /* row index */
-   int pass, num_pass; /* pass variables */
-   png_bytepp rp; /* points to current row */
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug(1, "in png_write_image");
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Initialize interlace handling.  If image is not interlaced,
-    * this will set pass to 1
-    */
-   num_pass = png_set_interlace_handling(png_ptr);
-#else
-   num_pass = 1;
-#endif
-   /* Loop through passes */
-   for (pass = 0; pass < num_pass; pass++)
-   {
-      /* Loop through image */
-      for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
-      {
-         png_write_row(png_ptr, *rp);
-      }
-   }
-}
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-/* Performs intrapixel differencing  */
-static void
-png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_intrapixel");
-
-   if ((row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      int bytes_per_pixel;
-      png_uint_32 row_width = row_info->width;
-      if (row_info->bit_depth == 8)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 3;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 4;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            *(rp)     = (png_byte)((*rp       - *(rp + 1)) & 0xff);
-            *(rp + 2) = (png_byte)((*(rp + 2) - *(rp + 1)) & 0xff);
-         }
-      }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      else if (row_info->bit_depth == 16)
-      {
-         png_bytep rp;
-         png_uint_32 i;
-
-         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
-            bytes_per_pixel = 6;
-
-         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-            bytes_per_pixel = 8;
-
-         else
-            return;
-
-         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
-         {
-            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);
-            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);
-            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);
-            png_uint_32 red  = (png_uint_32)((s0 - s1) & 0xffffL);
-            png_uint_32 blue = (png_uint_32)((s2 - s1) & 0xffffL);
-            *(rp    ) = (png_byte)((red >> 8) & 0xff);
-            *(rp + 1) = (png_byte)(red & 0xff);
-            *(rp + 4) = (png_byte)((blue >> 8) & 0xff);
-            *(rp + 5) = (png_byte)(blue & 0xff);
-         }
-      }
-#endif /* WRITE_16BIT */
-   }
-}
-#endif /* MNG_FEATURES */
-
-/* Called by user to write a row of image data */
-void PNGAPI
-png_write_row(png_structrp png_ptr, png_const_bytep row)
-{
-   /* 1.5.6: moved from png_struct to be a local structure: */
-   png_row_info row_info;
-
-   if (png_ptr == NULL)
-      return;
-
-   png_debug2(1, "in png_write_row (row %u, pass %d)",
-      png_ptr->row_number, png_ptr->pass);
-
-   /* Initialize transformations and other stuff if first time */
-   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
-   {
-      /* Make sure we wrote the header info */
-      if ((png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE) == 0)
-         png_error(png_ptr,
-             "png_write_info was never called before png_write_row");
-
-      /* Check for transforms that have been set but were defined out */
-#if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED)
-      if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
-         png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED)
-      if ((png_ptr->transformations & PNG_FILLER) != 0)
-         png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined");
-#endif
-#if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
-    defined(PNG_READ_PACKSWAP_SUPPORTED)
-      if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-         png_warning(png_ptr,
-             "PNG_WRITE_PACKSWAP_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED)
-      if ((png_ptr->transformations & PNG_PACK) != 0)
-         png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED)
-      if ((png_ptr->transformations & PNG_SHIFT) != 0)
-         png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED)
-      if ((png_ptr->transformations & PNG_BGR) != 0)
-         png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined");
-#endif
-
-#if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED)
-      if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
-         png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined");
-#endif
-
-      png_write_start_row(png_ptr);
-   }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced and not interested in row, return */
-   if (png_ptr->interlaced != 0 &&
-       (png_ptr->transformations & PNG_INTERLACE) != 0)
-   {
-      switch (png_ptr->pass)
-      {
-         case 0:
-            if ((png_ptr->row_number & 0x07) != 0)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 1:
-            if ((png_ptr->row_number & 0x07) != 0 || png_ptr->width < 5)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 2:
-            if ((png_ptr->row_number & 0x07) != 4)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 3:
-            if ((png_ptr->row_number & 0x03) != 0 || png_ptr->width < 3)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 4:
-            if ((png_ptr->row_number & 0x03) != 2)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 5:
-            if ((png_ptr->row_number & 0x01) != 0 || png_ptr->width < 2)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         case 6:
-            if ((png_ptr->row_number & 0x01) == 0)
-            {
-               png_write_finish_row(png_ptr);
-               return;
-            }
-            break;
-
-         default: /* error: ignore it */
-            break;
-      }
-   }
-#endif
-
-   /* Set up row info for transformations */
-   row_info.color_type = png_ptr->color_type;
-   row_info.width = png_ptr->usr_width;
-   row_info.channels = png_ptr->usr_channels;
-   row_info.bit_depth = png_ptr->usr_bit_depth;
-   row_info.pixel_depth = (png_byte)(row_info.bit_depth * row_info.channels);
-   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
-
-   png_debug1(3, "row_info->color_type = %d", row_info.color_type);
-   png_debug1(3, "row_info->width = %u", row_info.width);
-   png_debug1(3, "row_info->channels = %d", row_info.channels);
-   png_debug1(3, "row_info->bit_depth = %d", row_info.bit_depth);
-   png_debug1(3, "row_info->pixel_depth = %d", row_info.pixel_depth);
-   png_debug1(3, "row_info->rowbytes = %lu", (unsigned long)row_info.rowbytes);
-
-   /* Copy user's row into buffer, leaving room for filter byte. */
-   memcpy(png_ptr->row_buf + 1, row, row_info.rowbytes);
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Handle interlacing */
-   if (png_ptr->interlaced && png_ptr->pass < 6 &&
-       (png_ptr->transformations & PNG_INTERLACE) != 0)
-   {
-      png_do_write_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass);
-      /* This should always get caught above, but still ... */
-      if (row_info.width == 0)
-      {
-         png_write_finish_row(png_ptr);
-         return;
-      }
-   }
-#endif
-
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-   /* Handle other transformations */
-   if (png_ptr->transformations != 0)
-      png_do_write_transformations(png_ptr, &row_info);
-#endif
-
-   /* At this point the row_info pixel depth must match the 'transformed' depth,
-    * which is also the output depth.
-    */
-   if (row_info.pixel_depth != png_ptr->pixel_depth ||
-      row_info.pixel_depth != png_ptr->transformed_pixel_depth)
-      png_error(png_ptr, "internal write transform logic error");
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   /* Write filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not write a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
-       (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
-   {
-      /* Intrapixel differencing */
-      png_do_write_intrapixel(&row_info, png_ptr->row_buf + 1);
-   }
-#endif
-
-/* Added at libpng-1.5.10 */
-#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
-   /* Check for out-of-range palette index */
-   if (row_info.color_type == PNG_COLOR_TYPE_PALETTE &&
-       png_ptr->num_palette_max >= 0)
-      png_do_check_palette_indexes(png_ptr, &row_info);
-#endif
-
-   /* Find a filter if necessary, filter the row and write it out. */
-   png_write_find_filter(png_ptr, &row_info);
-
-   if (png_ptr->write_row_fn != NULL)
-      (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
-}
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-/* Set the automatic flush interval or 0 to turn flushing off */
-void PNGAPI
-png_set_flush(png_structrp png_ptr, int nrows)
-{
-   png_debug(1, "in png_set_flush");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
-}
-
-/* Flush the current output buffers now */
-void PNGAPI
-png_write_flush(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_flush");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* We have already written out all of the data */
-   if (png_ptr->row_number >= png_ptr->num_rows)
-      return;
-
-   png_compress_IDAT(png_ptr, NULL, 0, Z_SYNC_FLUSH);
-   png_ptr->flush_rows = 0;
-   png_flush(png_ptr);
-}
-#endif /* WRITE_FLUSH */
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-static void png_reset_filter_heuristics(png_structrp png_ptr);/* forward decl */
-#endif
-
-/* Free any memory used in png_ptr struct without freeing the struct itself. */
-static void
-png_write_destroy(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_destroy");
-
-   /* Free any memory zlib uses */
-   if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) != 0)
-      deflateEnd(&png_ptr->zstream);
-
-   /* Free our memory.  png_free checks NULL for us. */
-   png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
-   png_free(png_ptr, png_ptr->row_buf);
-   png_ptr->row_buf = NULL;
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   png_free(png_ptr, png_ptr->prev_row);
-   png_free(png_ptr, png_ptr->sub_row);
-   png_free(png_ptr, png_ptr->up_row);
-   png_free(png_ptr, png_ptr->avg_row);
-   png_free(png_ptr, png_ptr->paeth_row);
-   png_ptr->prev_row = NULL;
-   png_ptr->sub_row = NULL;
-   png_ptr->up_row = NULL;
-   png_ptr->avg_row = NULL;
-   png_ptr->paeth_row = NULL;
-#endif
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   /* Use this to save a little code space, it doesn't free the filter_costs */
-   png_reset_filter_heuristics(png_ptr);
-   png_free(png_ptr, png_ptr->filter_costs);
-   png_free(png_ptr, png_ptr->inv_filter_costs);
-   png_ptr->filter_costs = NULL;
-   png_ptr->inv_filter_costs = NULL;
-#endif
-
-#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
-   png_free(png_ptr, png_ptr->chunk_list);
-   png_ptr->chunk_list = NULL;
-#endif
-
-   /* The error handling and memory handling information is left intact at this
-    * point: the jmp_buf may still have to be freed.  See png_destroy_png_struct
-    * for how this happens.
-    */
-}
-
-/* Free all memory used by the write.
- * In libpng 1.6.0 this API changed quietly to no longer accept a NULL value for
- * *png_ptr_ptr.  Prior to 1.6.0 it would accept such a value and it would free
- * the passed in info_structs but it would quietly fail to free any of the data
- * inside them.  In 1.6.0 it quietly does nothing (it has to be quiet because it
- * has no png_ptr.)
- */
-void PNGAPI
-png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
-{
-   png_debug(1, "in png_destroy_write_struct");
-
-   if (png_ptr_ptr != NULL)
-   {
-      png_structrp png_ptr = *png_ptr_ptr;
-
-      if (png_ptr != NULL) /* added in libpng 1.6.0 */
-      {
-         png_destroy_info_struct(png_ptr, info_ptr_ptr);
-
-         *png_ptr_ptr = NULL;
-         png_write_destroy(png_ptr);
-         png_destroy_png_struct(png_ptr);
-      }
-   }
-}
-
-/* Allow the application to select one or more row filters to use. */
-void PNGAPI
-png_set_filter(png_structrp png_ptr, int method, int filters)
-{
-   png_debug(1, "in png_set_filter");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
-       (method == PNG_INTRAPIXEL_DIFFERENCING))
-      method = PNG_FILTER_TYPE_BASE;
-
-#endif
-   if (method == PNG_FILTER_TYPE_BASE)
-   {
-      switch (filters & (PNG_ALL_FILTERS | 0x07))
-      {
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         case 5:
-         case 6:
-         case 7: png_app_error(png_ptr, "Unknown row filter for method 0");
-            /* FALL THROUGH */
-#endif /* WRITE_FILTER */
-         case PNG_FILTER_VALUE_NONE:
-            png_ptr->do_filter = PNG_FILTER_NONE; break;
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         case PNG_FILTER_VALUE_SUB:
-            png_ptr->do_filter = PNG_FILTER_SUB; break;
-
-         case PNG_FILTER_VALUE_UP:
-            png_ptr->do_filter = PNG_FILTER_UP; break;
-
-         case PNG_FILTER_VALUE_AVG:
-            png_ptr->do_filter = PNG_FILTER_AVG; break;
-
-         case PNG_FILTER_VALUE_PAETH:
-            png_ptr->do_filter = PNG_FILTER_PAETH; break;
-
-         default:
-            png_ptr->do_filter = (png_byte)filters; break;
-#else
-         default:
-            png_app_error(png_ptr, "Unknown row filter for method 0");
-#endif /* WRITE_FILTER */
-      }
-
-      /* If we have allocated the row_buf, this means we have already started
-       * with the image and we should have allocated all of the filter buffers
-       * that have been selected.  If prev_row isn't already allocated, then
-       * it is too late to start using the filters that need it, since we
-       * will be missing the data in the previous row.  If an application
-       * wants to start and stop using particular filters during compression,
-       * it should start out with all of the filters, and then add and
-       * remove them after the start of compression.
-       */
-      if (png_ptr->row_buf != NULL)
-      {
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-         if ((png_ptr->do_filter & PNG_FILTER_SUB) != 0 &&
-             png_ptr->sub_row == NULL)
-         {
-            png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
-                (png_ptr->rowbytes + 1));
-            png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_UP) != 0 &&
-              png_ptr->up_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Up filter after starting");
-               png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
-                   ~PNG_FILTER_UP);
-            }
-
-            else
-            {
-               png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
-            }
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_AVG) != 0 &&
-              png_ptr->avg_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Average filter after starting");
-               png_ptr->do_filter = (png_byte)(png_ptr->do_filter &
-                   ~PNG_FILTER_AVG);
-            }
-
-            else
-            {
-               png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
-            }
-         }
-
-         if ((png_ptr->do_filter & PNG_FILTER_PAETH) != 0 &&
-             png_ptr->paeth_row == NULL)
-         {
-            if (png_ptr->prev_row == NULL)
-            {
-               png_warning(png_ptr, "Can't add Paeth filter after starting");
-               png_ptr->do_filter &= (png_byte)(~PNG_FILTER_PAETH);
-            }
-
-            else
-            {
-               png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
-                   (png_ptr->rowbytes + 1));
-               png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
-            }
-         }
-
-         if (png_ptr->do_filter == PNG_NO_FILTERS)
-#endif /* WRITE_FILTER */
-            png_ptr->do_filter = PNG_FILTER_NONE;
-      }
-   }
-   else
-      png_error(png_ptr, "Unknown custom filter method");
-}
-
-/* This allows us to influence the way in which libpng chooses the "best"
- * filter for the current scanline.  While the "minimum-sum-of-absolute-
- * differences metric is relatively fast and effective, there is some
- * question as to whether it can be improved upon by trying to keep the
- * filtered data going to zlib more consistent, hopefully resulting in
- * better compression.
- */
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED      /* GRR 970116 */
-/* Convenience reset API. */
-static void
-png_reset_filter_heuristics(png_structrp png_ptr)
-{
-   /* Clear out any old values in the 'weights' - this must be done because if
-    * the app calls set_filter_heuristics multiple times with different
-    * 'num_weights' values we would otherwise potentially have wrong sized
-    * arrays.
-    */
-   png_ptr->num_prev_filters = 0;
-   png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
-   if (png_ptr->prev_filters != NULL)
-   {
-      png_bytep old = png_ptr->prev_filters;
-      png_ptr->prev_filters = NULL;
-      png_free(png_ptr, old);
-   }
-   if (png_ptr->filter_weights != NULL)
-   {
-      png_uint_16p old = png_ptr->filter_weights;
-      png_ptr->filter_weights = NULL;
-      png_free(png_ptr, old);
-   }
-
-   if (png_ptr->inv_filter_weights != NULL)
-   {
-      png_uint_16p old = png_ptr->inv_filter_weights;
-      png_ptr->inv_filter_weights = NULL;
-      png_free(png_ptr, old);
-   }
-
-   /* Leave the filter_costs - this array is fixed size. */
-}
-
-static int
-png_init_filter_heuristics(png_structrp png_ptr, int heuristic_method,
-   int num_weights)
-{
-   if (png_ptr == NULL)
-      return 0;
-
-   /* Clear out the arrays */
-   png_reset_filter_heuristics(png_ptr);
-
-   /* Check arguments; the 'reset' function makes the correct settings for the
-    * unweighted case, but we must handle the weight case by initializing the
-    * arrays for the caller.
-    */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-
-      if (num_weights > 0)
-      {
-         png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_byte)) * num_weights));
-
-         /* To make sure that the weighting starts out fairly */
-         for (i = 0; i < num_weights; i++)
-         {
-            png_ptr->prev_filters[i] = 255;
-         }
-
-         png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * num_weights));
-
-         png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * num_weights));
-
-         for (i = 0; i < num_weights; i++)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         /* Safe to set this now */
-         png_ptr->num_prev_filters = (png_byte)num_weights;
-      }
-
-      /* If, in the future, there are other filter methods, this would
-       * need to be based on png_ptr->filter.
-       */
-      if (png_ptr->filter_costs == NULL)
-      {
-         png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
-
-         png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
-             (png_uint_32)((sizeof (png_uint_16)) * PNG_FILTER_VALUE_LAST));
-      }
-
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
-      {
-         png_ptr->inv_filter_costs[i] =
-         png_ptr->filter_costs[i] = PNG_COST_FACTOR;
-      }
-
-      /* All the arrays are inited, safe to set this: */
-      png_ptr->heuristic_method = PNG_FILTER_HEURISTIC_WEIGHTED;
-
-      /* Return the 'ok' code. */
-      return 1;
-   }
-   else if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT ||
-      heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
-   {
-      return 1;
-   }
-   else
-   {
-      png_warning(png_ptr, "Unknown filter heuristic method");
-      return 0;
-   }
-}
-
-/* Provide floating and fixed point APIs */
-#ifdef PNG_FLOATING_POINT_SUPPORTED
-void PNGAPI
-png_set_filter_heuristics(png_structrp png_ptr, int heuristic_method,
-    int num_weights, png_const_doublep filter_weights,
-    png_const_doublep filter_costs)
-{
-   png_debug(1, "in png_set_filter_heuristics");
-
-   /* The internal API allocates all the arrays and ensures that the elements of
-    * those arrays are set to the default value.
-    */
-   if (png_init_filter_heuristics(png_ptr, heuristic_method, num_weights) == 0)
-      return;
-
-   /* If using the weighted method copy in the weights. */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-      for (i = 0; i < num_weights; i++)
-      {
-         if (filter_weights[i] <= 0.0)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         else
-         {
-            png_ptr->inv_filter_weights[i] =
-                (png_uint_16)(PNG_WEIGHT_FACTOR*filter_weights[i]+.5);
-
-            png_ptr->filter_weights[i] =
-                (png_uint_16)(PNG_WEIGHT_FACTOR/filter_weights[i]+.5);
-         }
-      }
-
-      /* Here is where we set the relative costs of the different filters.  We
-       * should take the desired compression level into account when setting
-       * the costs, so that Paeth, for instance, has a high relative cost at low
-       * compression levels, while it has a lower relative cost at higher
-       * compression settings.  The filter types are in order of increasing
-       * relative cost, so it would be possible to do this with an algorithm.
-       */
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++) if (filter_costs[i] >= 1.0)
-      {
-         png_ptr->inv_filter_costs[i] =
-             (png_uint_16)(PNG_COST_FACTOR / filter_costs[i] + .5);
-
-         png_ptr->filter_costs[i] =
-             (png_uint_16)(PNG_COST_FACTOR * filter_costs[i] + .5);
-      }
-   }
-}
-#endif /* FLOATING_POINT */
-
-#ifdef PNG_FIXED_POINT_SUPPORTED
-void PNGAPI
-png_set_filter_heuristics_fixed(png_structrp png_ptr, int heuristic_method,
-    int num_weights, png_const_fixed_point_p filter_weights,
-    png_const_fixed_point_p filter_costs)
-{
-   png_debug(1, "in png_set_filter_heuristics_fixed");
-
-   /* The internal API allocates all the arrays and ensures that the elements of
-    * those arrays are set to the default value.
-    */
-   if (png_init_filter_heuristics(png_ptr, heuristic_method, num_weights) == 0)
-      return;
-
-   /* If using the weighted method copy in the weights. */
-   if (heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-   {
-      int i;
-      for (i = 0; i < num_weights; i++)
-      {
-         if (filter_weights[i] <= 0)
-         {
-            png_ptr->inv_filter_weights[i] =
-            png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
-         }
-
-         else
-         {
-            png_ptr->inv_filter_weights[i] = (png_uint_16)
-               ((PNG_WEIGHT_FACTOR*filter_weights[i]+PNG_FP_HALF)/PNG_FP_1);
-
-            png_ptr->filter_weights[i] = (png_uint_16)((PNG_WEIGHT_FACTOR*
-               PNG_FP_1+(filter_weights[i]/2))/filter_weights[i]);
-         }
-      }
-
-      /* Here is where we set the relative costs of the different filters.  We
-       * should take the desired compression level into account when setting
-       * the costs, so that Paeth, for instance, has a high relative cost at low
-       * compression levels, while it has a lower relative cost at higher
-       * compression settings.  The filter types are in order of increasing
-       * relative cost, so it would be possible to do this with an algorithm.
-       */
-      for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
-         if (filter_costs[i] >= PNG_FP_1)
-      {
-         png_uint_32 tmp;
-
-         /* Use a 32 bit unsigned temporary here because otherwise the
-          * intermediate value will be a 32 bit *signed* integer (ANSI rules)
-          * and this will get the wrong answer on division.
-          */
-         tmp = PNG_COST_FACTOR*PNG_FP_1 + (filter_costs[i]/2);
-         tmp /= filter_costs[i];
-
-         png_ptr->inv_filter_costs[i] = (png_uint_16)tmp;
-
-         tmp = PNG_COST_FACTOR * filter_costs[i] + PNG_FP_HALF;
-         tmp /= PNG_FP_1;
-
-         png_ptr->filter_costs[i] = (png_uint_16)tmp;
-      }
-   }
-}
-#endif /* FIXED_POINT */
-#endif /* WRITE_WEIGHTED_FILTER */
-
-void PNGAPI
-png_set_compression_level(png_structrp png_ptr, int level)
-{
-   png_debug(1, "in png_set_compression_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_level = level;
-}
-
-void PNGAPI
-png_set_compression_mem_level(png_structrp png_ptr, int mem_level)
-{
-   png_debug(1, "in png_set_compression_mem_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_mem_level = mem_level;
-}
-
-void PNGAPI
-png_set_compression_strategy(png_structrp png_ptr, int strategy)
-{
-   png_debug(1, "in png_set_compression_strategy");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* The flag setting here prevents the libpng dynamic selection of strategy.
-    */
-   png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
-   png_ptr->zlib_strategy = strategy;
-}
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-void PNGAPI
-png_set_compression_window_bits(png_structrp png_ptr, int window_bits)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* Prior to 1.6.0 this would warn but then set the window_bits value, this
-    * meant that negative window bits values could be selected which would cause
-    * libpng to write a non-standard PNG file with raw deflate or gzip
-    * compressed IDAT or ancillary chunks.  Such files can be read and there is
-    * no warning on read, so this seems like a very bad idea.
-    */
-   if (window_bits > 15)
-   {
-      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
-      window_bits = 15;
-   }
-
-   else if (window_bits < 8)
-   {
-      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
-      window_bits = 8;
-   }
-
-   png_ptr->zlib_window_bits = window_bits;
-}
-
-void PNGAPI
-png_set_compression_method(png_structrp png_ptr, int method)
-{
-   png_debug(1, "in png_set_compression_method");
-
-   if (png_ptr == NULL)
-      return;
-
-   /* This would produce an invalid PNG file if it worked, but it doesn't and
-    * deflate will fault it, so it is harmless to just warn here.
-    */
-   if (method != 8)
-      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
-
-   png_ptr->zlib_method = method;
-}
-
-/* The following were added to libpng-1.5.4 */
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-void PNGAPI
-png_set_text_compression_level(png_structrp png_ptr, int level)
-{
-   png_debug(1, "in png_set_text_compression_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_level = level;
-}
-
-void PNGAPI
-png_set_text_compression_mem_level(png_structrp png_ptr, int mem_level)
-{
-   png_debug(1, "in png_set_text_compression_mem_level");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_mem_level = mem_level;
-}
-
-void PNGAPI
-png_set_text_compression_strategy(png_structrp png_ptr, int strategy)
-{
-   png_debug(1, "in png_set_text_compression_strategy");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->zlib_text_strategy = strategy;
-}
-
-/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
- * smaller value of window_bits if it can do so safely.
- */
-void PNGAPI
-png_set_text_compression_window_bits(png_structrp png_ptr, int window_bits)
-{
-   if (png_ptr == NULL)
-      return;
-
-   if (window_bits > 15)
-   {
-      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
-      window_bits = 15;
-   }
-
-   else if (window_bits < 8)
-   {
-      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
-      window_bits = 8;
-   }
-
-   png_ptr->zlib_text_window_bits = window_bits;
-}
-
-void PNGAPI
-png_set_text_compression_method(png_structrp png_ptr, int method)
-{
-   png_debug(1, "in png_set_text_compression_method");
-
-   if (png_ptr == NULL)
-      return;
-
-   if (method != 8)
-      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
-
-   png_ptr->zlib_text_method = method;
-}
-#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */
-/* end of API added to libpng-1.5.4 */
-
-void PNGAPI
-png_set_write_status_fn(png_structrp png_ptr, png_write_status_ptr write_row_fn)
-{
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->write_row_fn = write_row_fn;
-}
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-void PNGAPI
-png_set_write_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
-    write_user_transform_fn)
-{
-   png_debug(1, "in png_set_write_user_transform_fn");
-
-   if (png_ptr == NULL)
-      return;
-
-   png_ptr->transformations |= PNG_USER_TRANSFORM;
-   png_ptr->write_user_transform_fn = write_user_transform_fn;
-}
-#endif
-
-
-#ifdef PNG_INFO_IMAGE_SUPPORTED
-void PNGAPI
-png_write_png(png_structrp png_ptr, png_inforp info_ptr,
-    int transforms, voidp params)
-{
-   if (png_ptr == NULL || info_ptr == NULL)
-      return;
-
-   if ((info_ptr->valid & PNG_INFO_IDAT) == 0)
-   {
-      png_app_error(png_ptr, "no rows for png_write_image to write");
-      return;
-   }
-
-   /* Write the file header information. */
-   png_write_info(png_ptr, info_ptr);
-
-   /* ------ these transformations don't touch the info structure ------- */
-
-   /* Invert monochrome pixels */
-   if ((transforms & PNG_TRANSFORM_INVERT_MONO) != 0)
-#ifdef PNG_WRITE_INVERT_SUPPORTED
-      png_set_invert_mono(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_MONO not supported");
-#endif
-
-   /* Shift the pixels up to a legal bit depth and fill in
-    * as appropriate to correctly scale the image.
-    */
-   if ((transforms & PNG_TRANSFORM_SHIFT) != 0)
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-      if ((info_ptr->valid & PNG_INFO_sBIT) != 0)
-         png_set_shift(png_ptr, &info_ptr->sig_bit);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SHIFT not supported");
-#endif
-
-   /* Pack pixels into bytes */
-   if ((transforms & PNG_TRANSFORM_PACKING) != 0)
-#ifdef PNG_WRITE_PACK_SUPPORTED
-      png_set_packing(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_PACKING not supported");
-#endif
-
-   /* Swap location of alpha bytes from ARGB to RGBA */
-   if ((transforms & PNG_TRANSFORM_SWAP_ALPHA) != 0)
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-      png_set_swap_alpha(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ALPHA not supported");
-#endif
-
-   /* Remove a filler (X) from XRGB/RGBX/AG/GA into to convert it into
-    * RGB, note that the code expects the input color type to be G or RGB; no
-    * alpha channel.
-    */
-   if ((transforms & (PNG_TRANSFORM_STRIP_FILLER_AFTER|
-      PNG_TRANSFORM_STRIP_FILLER_BEFORE)) != 0)
-   {
-#ifdef PNG_WRITE_FILLER_SUPPORTED
-      if ((transforms & PNG_TRANSFORM_STRIP_FILLER_AFTER) != 0)
-      {
-         if ((transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE) != 0)
-            png_app_error(png_ptr,
-               "PNG_TRANSFORM_STRIP_FILLER: BEFORE+AFTER not supported");
-
-         /* Continue if ignored - this is the pre-1.6.10 behavior */
-         png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
-      }
-
-      else if ((transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE) != 0)
-         png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_STRIP_FILLER not supported");
-#endif
-   }
-
-   /* Flip BGR pixels to RGB */
-   if ((transforms & PNG_TRANSFORM_BGR) != 0)
-#ifdef PNG_WRITE_BGR_SUPPORTED
-      png_set_bgr(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_BGR not supported");
-#endif
-
-   /* Swap bytes of 16-bit files to most significant byte first */
-   if ((transforms & PNG_TRANSFORM_SWAP_ENDIAN) != 0)
-#ifdef PNG_WRITE_SWAP_SUPPORTED
-      png_set_swap(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
-#endif
-
-   /* Swap bits of 1, 2, 4 bit packed pixel formats */
-   if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
-#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
-      png_set_packswap(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_PACKSWAP not supported");
-#endif
-
-   /* Invert the alpha channel from opacity to transparency */
-   if ((transforms & PNG_TRANSFORM_INVERT_ALPHA) != 0)
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-      png_set_invert_alpha(png_ptr);
-#else
-      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_ALPHA not supported");
-#endif
-
-   /* ----------------------- end of transformations ------------------- */
-
-   /* Write the bits */
-   png_write_image(png_ptr, info_ptr->row_pointers);
-
-   /* It is REQUIRED to call this to finish writing the rest of the file */
-   png_write_end(png_ptr, info_ptr);
-
-   PNG_UNUSED(params)
-}
-#endif
-
-
-#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
-#ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
-/* Initialize the write structure - general purpose utility. */
-static int
-png_image_write_init(png_imagep image)
-{
-   png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, image,
-          png_safe_error, png_safe_warning);
-
-   if (png_ptr != NULL)
-   {
-      png_infop info_ptr = png_create_info_struct(png_ptr);
-
-      if (info_ptr != NULL)
-      {
-         png_controlp control = png_voidcast(png_controlp,
-            png_malloc_warn(png_ptr, (sizeof *control)));
-
-         if (control != NULL)
-         {
-            memset(control, 0, (sizeof *control));
-
-            control->png_ptr = png_ptr;
-            control->info_ptr = info_ptr;
-            control->for_write = 1;
-
-            image->opaque = control;
-            return 1;
-         }
-
-         /* Error clean up */
-         png_destroy_info_struct(png_ptr, &info_ptr);
-      }
-
-      png_destroy_write_struct(&png_ptr, NULL);
-   }
-
-   return png_image_error(image, "png_image_write_: out of memory");
-}
-
-/* Arguments to png_image_write_main: */
-typedef struct
-{
-   /* Arguments: */
-   png_imagep      image;
-   png_const_voidp buffer;
-   png_int_32      row_stride;
-   png_const_voidp colormap;
-   int             convert_to_8bit;
-   /* Local variables: */
-   png_const_voidp first_row;
-   ptrdiff_t       row_bytes;
-   png_voidp       local_row;
-} png_image_write_control;
-
-/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
- * do any necessary byte swapping.  The component order is defined by the
- * png_image format value.
- */
-static int
-png_write_image_16bit(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-
-   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
-      display->first_row);
-   png_uint_16p output_row = png_voidcast(png_uint_16p, display->local_row);
-   png_uint_16p row_end;
-   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ? 3 : 1;
-   int aindex = 0;
-   png_uint_32 y = image->height;
-
-   if ((image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
-   {
-#     ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
-         if ((image->format & PNG_FORMAT_FLAG_AFIRST) != 0)
-         {
-            aindex = -1;
-            ++input_row; /* To point to the first component */
-            ++output_row;
-         }
-
-         else
-#     endif
-         aindex = channels;
-   }
-
-   else
-      png_error(png_ptr, "png_write_image: internal call error");
-
-   /* Work out the output row end and count over this, note that the increment
-    * above to 'row' means that row_end can actually be beyond the end of the
-    * row; this is correct.
-    */
-   row_end = output_row + image->width * (channels+1);
-
-   while (y-- > 0)
-   {
-      png_const_uint_16p in_ptr = input_row;
-      png_uint_16p out_ptr = output_row;
-
-      while (out_ptr < row_end)
-      {
-         const png_uint_16 alpha = in_ptr[aindex];
-         png_uint_32 reciprocal = 0;
-         int c;
-
-         out_ptr[aindex] = alpha;
-
-         /* Calculate a reciprocal.  The correct calculation is simply
-          * component/alpha*65535 << 15. (I.e. 15 bits of precision); this
-          * allows correct rounding by adding .5 before the shift.  'reciprocal'
-          * is only initialized when required.
-          */
-         if (alpha > 0 && alpha < 65535)
-            reciprocal = ((0xffff<<15)+(alpha>>1))/alpha;
-
-         c = channels;
-         do /* always at least one channel */
-         {
-            png_uint_16 component = *in_ptr++;
-
-            /* The following gives 65535 for an alpha of 0, which is fine,
-             * otherwise if 0/0 is represented as some other value there is more
-             * likely to be a discontinuity which will probably damage
-             * compression when moving from a fully transparent area to a
-             * nearly transparent one.  (The assumption here is that opaque
-             * areas tend not to be 0 intensity.)
-             */
-            if (component >= alpha)
-               component = 65535;
-
-            /* component<alpha, so component/alpha is less than one and
-             * component*reciprocal is less than 2^31.
-             */
-            else if (component > 0 && alpha < 65535)
-            {
-               png_uint_32 calc = component * reciprocal;
-               calc += 16384; /* round to nearest */
-               component = (png_uint_16)(calc >> 15);
-            }
-
-            *out_ptr++ = component;
-         }
-         while (--c > 0);
-
-         /* Skip to next component (skip the intervening alpha channel) */
-         ++in_ptr;
-         ++out_ptr;
-      }
-
-      png_write_row(png_ptr, png_voidcast(png_const_bytep, display->local_row));
-      input_row += display->row_bytes/(sizeof (png_uint_16));
-   }
-
-   return 1;
-}
-
-/* Given 16-bit input (1 to 4 channels) write 8-bit output.  If an alpha channel
- * is present it must be removed from the components, the components are then
- * written in sRGB encoding.  No components are added or removed.
- *
- * Calculate an alpha reciprocal to reverse pre-multiplication.  As above the
- * calculation can be done to 15 bits of accuracy; however, the output needs to
- * be scaled in the range 0..255*65535, so include that scaling here.
- */
-#define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
-
-static png_byte
-png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
-   png_uint_32 reciprocal/*from the above macro*/)
-{
-   /* The following gives 1.0 for an alpha of 0, which is fine, otherwise if 0/0
-    * is represented as some other value there is more likely to be a
-    * discontinuity which will probably damage compression when moving from a
-    * fully transparent area to a nearly transparent one.  (The assumption here
-    * is that opaque areas tend not to be 0 intensity.)
-    *
-    * There is a rounding problem here; if alpha is less than 128 it will end up
-    * as 0 when scaled to 8 bits.  To avoid introducing spurious colors into the
-    * output change for this too.
-    */
-   if (component >= alpha || alpha < 128)
-      return 255;
-
-   /* component<alpha, so component/alpha is less than one and
-    * component*reciprocal is less than 2^31.
-    */
-   else if (component > 0)
-   {
-      /* The test is that alpha/257 (rounded) is less than 255, the first value
-       * that becomes 255 is 65407.
-       * NOTE: this must agree with the PNG_DIV257 macro (which must, therefore,
-       * be exact!)  [Could also test reciprocal != 0]
-       */
-      if (alpha < 65407)
-      {
-         component *= reciprocal;
-         component += 64; /* round to nearest */
-         component >>= 7;
-      }
-
-      else
-         component *= 255;
-
-      /* Convert the component to sRGB. */
-      return (png_byte)PNG_sRGB_FROM_LINEAR(component);
-   }
-
-   else
-      return 0;
-}
-
-static int
-png_write_image_8bit(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-
-   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
-      display->first_row);
-   png_bytep output_row = png_voidcast(png_bytep, display->local_row);
-   png_uint_32 y = image->height;
-   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ? 3 : 1;
-
-   if ((image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
-   {
-      png_bytep row_end;
-      int aindex;
-
-#     ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
-         if ((image->format & PNG_FORMAT_FLAG_AFIRST) != 0)
-         {
-            aindex = -1;
-            ++input_row; /* To point to the first component */
-            ++output_row;
-         }
-
-         else
-#     endif
-         aindex = channels;
-
-      /* Use row_end in place of a loop counter: */
-      row_end = output_row + image->width * (channels+1);
-
-      while (y-- > 0)
-      {
-         png_const_uint_16p in_ptr = input_row;
-         png_bytep out_ptr = output_row;
-
-         while (out_ptr < row_end)
-         {
-            png_uint_16 alpha = in_ptr[aindex];
-            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
-            png_uint_32 reciprocal = 0;
-            int c;
-
-            /* Scale and write the alpha channel. */
-            out_ptr[aindex] = alphabyte;
-
-            if (alphabyte > 0 && alphabyte < 255)
-               reciprocal = UNP_RECIPROCAL(alpha);
-
-            c = channels;
-            do /* always at least one channel */
-               *out_ptr++ = png_unpremultiply(*in_ptr++, alpha, reciprocal);
-            while (--c > 0);
-
-            /* Skip to next component (skip the intervening alpha channel) */
-            ++in_ptr;
-            ++out_ptr;
-         } /* while out_ptr < row_end */
-
-         png_write_row(png_ptr, png_voidcast(png_const_bytep,
-            display->local_row));
-         input_row += display->row_bytes/(sizeof (png_uint_16));
-      } /* while y */
-   }
-
-   else
-   {
-      /* No alpha channel, so the row_end really is the end of the row and it
-       * is sufficient to loop over the components one by one.
-       */
-      png_bytep row_end = output_row + image->width * channels;
-
-      while (y-- > 0)
-      {
-         png_const_uint_16p in_ptr = input_row;
-         png_bytep out_ptr = output_row;
-
-         while (out_ptr < row_end)
-         {
-            png_uint_32 component = *in_ptr++;
-
-            component *= 255;
-            *out_ptr++ = (png_byte)PNG_sRGB_FROM_LINEAR(component);
-         }
-
-         png_write_row(png_ptr, output_row);
-         input_row += display->row_bytes/(sizeof (png_uint_16));
-      }
-   }
-
-   return 1;
-}
-
-static void
-png_image_set_PLTE(png_image_write_control *display)
-{
-   const png_imagep image = display->image;
-   const void *cmap = display->colormap;
-   const int entries = image->colormap_entries > 256 ? 256 :
-      (int)image->colormap_entries;
-
-   /* NOTE: the caller must check for cmap != NULL and entries != 0 */
-   const png_uint_32 format = image->format;
-   const int channels = PNG_IMAGE_SAMPLE_CHANNELS(format);
-
-#  if defined(PNG_FORMAT_BGR_SUPPORTED) &&\
-      defined(PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED)
-      const int afirst = (format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
-         (format & PNG_FORMAT_FLAG_ALPHA) != 0;
-#  else
-#     define afirst 0
-#  endif
-
-#  ifdef PNG_FORMAT_BGR_SUPPORTED
-      const int bgr = (format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
-#  else
-#     define bgr 0
-#  endif
-
-   int i, num_trans;
-   png_color palette[256];
-   png_byte tRNS[256];
-
-   memset(tRNS, 255, (sizeof tRNS));
-   memset(palette, 0, (sizeof palette));
-
-   for (i=num_trans=0; i<entries; ++i)
-   {
-      /* This gets automatically converted to sRGB with reversal of the
-       * pre-multiplication if the color-map has an alpha channel.
-       */
-      if ((format & PNG_FORMAT_FLAG_LINEAR) != 0)
-      {
-         png_const_uint_16p entry = png_voidcast(png_const_uint_16p, cmap);
-
-         entry += i * channels;
-
-         if ((channels & 1) != 0) /* no alpha */
-         {
-            if (channels >= 3) /* RGB */
-            {
-               palette[i].blue = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[(2 ^ bgr)]);
-               palette[i].green = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[1]);
-               palette[i].red = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
-                  entry[bgr]);
-            }
-
-            else /* Gray */
-               palette[i].blue = palette[i].red = palette[i].green =
-                  (png_byte)PNG_sRGB_FROM_LINEAR(255 * *entry);
-         }
-
-         else /* alpha */
-         {
-            png_uint_16 alpha = entry[afirst ? 0 : channels-1];
-            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
-            png_uint_32 reciprocal = 0;
-
-            /* Calculate a reciprocal, as in the png_write_image_8bit code above
-             * this is designed to produce a value scaled to 255*65535 when
-             * divided by 128 (i.e. asr 7).
-             */
-            if (alphabyte > 0 && alphabyte < 255)
-               reciprocal = (((0xffff*0xff)<<7)+(alpha>>1))/alpha;
-
-            tRNS[i] = alphabyte;
-            if (alphabyte < 255)
-               num_trans = i+1;
-
-            if (channels >= 3) /* RGB */
-            {
-               palette[i].blue = png_unpremultiply(entry[afirst + (2 ^ bgr)],
-                  alpha, reciprocal);
-               palette[i].green = png_unpremultiply(entry[afirst + 1], alpha,
-                  reciprocal);
-               palette[i].red = png_unpremultiply(entry[afirst + bgr], alpha,
-                  reciprocal);
-            }
-
-            else /* gray */
-               palette[i].blue = palette[i].red = palette[i].green =
-                  png_unpremultiply(entry[afirst], alpha, reciprocal);
-         }
-      }
-
-      else /* Color-map has sRGB values */
-      {
-         png_const_bytep entry = png_voidcast(png_const_bytep, cmap);
-
-         entry += i * channels;
-
-         switch (channels)
-         {
-            case 4:
-               tRNS[i] = entry[afirst ? 0 : 3];
-               if (tRNS[i] < 255)
-                  num_trans = i+1;
-               /* FALL THROUGH */
-            case 3:
-               palette[i].blue = entry[afirst + (2 ^ bgr)];
-               palette[i].green = entry[afirst + 1];
-               palette[i].red = entry[afirst + bgr];
-               break;
-
-            case 2:
-               tRNS[i] = entry[1 ^ afirst];
-               if (tRNS[i] < 255)
-                  num_trans = i+1;
-               /* FALL THROUGH */
-            case 1:
-               palette[i].blue = palette[i].red = palette[i].green =
-                  entry[afirst];
-               break;
-
-            default:
-               break;
-         }
-      }
-   }
-
-#  ifdef afirst
-#     undef afirst
-#  endif
-#  ifdef bgr
-#     undef bgr
-#  endif
-
-   png_set_PLTE(image->opaque->png_ptr, image->opaque->info_ptr, palette,
-      entries);
-
-   if (num_trans > 0)
-      png_set_tRNS(image->opaque->png_ptr, image->opaque->info_ptr, tRNS,
-         num_trans, NULL);
-
-   image->colormap_entries = entries;
-}
-
-static int
-png_image_write_main(png_voidp argument)
-{
-   png_image_write_control *display = png_voidcast(png_image_write_control*,
-      argument);
-   png_imagep image = display->image;
-   png_structrp png_ptr = image->opaque->png_ptr;
-   png_inforp info_ptr = image->opaque->info_ptr;
-   png_uint_32 format = image->format;
-
-   /* The following four ints are actually booleans */
-   int colormap = (format & PNG_FORMAT_FLAG_COLORMAP);
-   int linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR); /* input */
-   int alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA);
-   int write_16bit = linear && !colormap && (display->convert_to_8bit == 0);
-
-#  ifdef PNG_BENIGN_ERRORS_SUPPORTED
-      /* Make sure we error out on any bad situation */
-      png_set_benign_errors(png_ptr, 0/*error*/);
-#  endif
-
-   /* Default the 'row_stride' parameter if required. */
-   if (display->row_stride == 0)
-      display->row_stride = PNG_IMAGE_ROW_STRIDE(*image);
-
-   /* Set the required transforms then write the rows in the correct order. */
-   if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
-   {
-      if (display->colormap != NULL && image->colormap_entries > 0)
-      {
-         png_uint_32 entries = image->colormap_entries;
-
-         png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
-            entries > 16 ? 8 : (entries > 4 ? 4 : (entries > 2 ? 2 : 1)),
-            PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
-            PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
-         png_image_set_PLTE(display);
-      }
-
-      else
-         png_error(image->opaque->png_ptr,
-            "no color-map for color-mapped image");
-   }
-
-   else
-      png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
-         write_16bit ? 16 : 8,
-         ((format & PNG_FORMAT_FLAG_COLOR) ? PNG_COLOR_MASK_COLOR : 0) +
-         ((format & PNG_FORMAT_FLAG_ALPHA) ? PNG_COLOR_MASK_ALPHA : 0),
-         PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
-
-   /* Counter-intuitively the data transformations must be called *after*
-    * png_write_info, not before as in the read code, but the 'set' functions
-    * must still be called before.  Just set the color space information, never
-    * write an interlaced image.
-    */
-
-   if (write_16bit != 0)
-   {
-      /* The gamma here is 1.0 (linear) and the cHRM chunk matches sRGB. */
-      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_LINEAR);
-
-      if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
-         png_set_cHRM_fixed(png_ptr, info_ptr,
-            /* color      x       y */
-            /* white */ 31270, 32900,
-            /* red   */ 64000, 33000,
-            /* green */ 30000, 60000,
-            /* blue  */ 15000,  6000
-         );
-   }
-
-   else if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
-      png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_PERCEPTUAL);
-
-   /* Else writing an 8-bit file and the *colors* aren't sRGB, but the 8-bit
-    * space must still be gamma encoded.
-    */
-   else
-      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_sRGB_INVERSE);
-
-   /* Write the file header. */
-   png_write_info(png_ptr, info_ptr);
-
-   /* Now set up the data transformations (*after* the header is written),
-    * remove the handled transformations from the 'format' flags for checking.
-    *
-    * First check for a little endian system if writing 16 bit files.
-    */
-   if (write_16bit != 0)
-   {
-      PNG_CONST png_uint_16 le = 0x0001;
-
-      if ((*(png_const_bytep) & le) != 0)
-         png_set_swap(png_ptr);
-   }
-
-#  ifdef PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
-      if ((format & PNG_FORMAT_FLAG_BGR) != 0)
-      {
-         if (colormap == 0 && (format & PNG_FORMAT_FLAG_COLOR) != 0)
-            png_set_bgr(png_ptr);
-         format &= ~PNG_FORMAT_FLAG_BGR;
-      }
-#  endif
-
-#  ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
-      if ((format & PNG_FORMAT_FLAG_AFIRST) != 0)
-      {
-         if (colormap == 0 && (format & PNG_FORMAT_FLAG_ALPHA) != 0)
-            png_set_swap_alpha(png_ptr);
-         format &= ~PNG_FORMAT_FLAG_AFIRST;
-      }
-#  endif
-
-   /* If there are 16 or fewer color-map entries we wrote a lower bit depth
-    * above, but the application data is still byte packed.
-    */
-   if (colormap != 0 && image->colormap_entries <= 16)
-      png_set_packing(png_ptr);
-
-   /* That should have handled all (both) the transforms. */
-   if ((format & ~(png_uint_32)(PNG_FORMAT_FLAG_COLOR | PNG_FORMAT_FLAG_LINEAR |
-         PNG_FORMAT_FLAG_ALPHA | PNG_FORMAT_FLAG_COLORMAP)) != 0)
-      png_error(png_ptr, "png_write_image: unsupported transformation");
-
-   {
-      png_const_bytep row = png_voidcast(png_const_bytep, display->buffer);
-      ptrdiff_t row_bytes = display->row_stride;
-
-      if (linear != 0)
-         row_bytes *= (sizeof (png_uint_16));
-
-      if (row_bytes < 0)
-         row += (image->height-1) * (-row_bytes);
-
-      display->first_row = row;
-      display->row_bytes = row_bytes;
-   }
-
-   /* Apply 'fast' options if the flag is set. */
-   if ((image->flags & PNG_IMAGE_FLAG_FAST) != 0)
-   {
-      png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_NO_FILTERS);
-      /* NOTE: determined by experiment using pngstest, this reflects some
-       * balance between the time to write the image once and the time to read
-       * it about 50 times.  The speed-up in pngstest was about 10-20% of the
-       * total (user) time on a heavily loaded system.
-       */
-      png_set_compression_level(png_ptr, 3);
-   }
-
-   /* Check for the cases that currently require a pre-transform on the row
-    * before it is written.  This only applies when the input is 16-bit and
-    * either there is an alpha channel or it is converted to 8-bit.
-    */
-   if ((linear != 0 && alpha != 0 ) ||
-       (colormap == 0 && display->convert_to_8bit != 0))
-   {
-      png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
-         png_get_rowbytes(png_ptr, info_ptr)));
-      int result;
-
-      display->local_row = row;
-      if (write_16bit != 0)
-         result = png_safe_execute(image, png_write_image_16bit, display);
-      else
-         result = png_safe_execute(image, png_write_image_8bit, display);
-      display->local_row = NULL;
-
-      png_free(png_ptr, row);
-
-      /* Skip the 'write_end' on error: */
-      if (result == 0)
-         return 0;
-   }
-
-   /* Otherwise this is the case where the input is in a format currently
-    * supported by the rest of the libpng write code; call it directly.
-    */
-   else
-   {
-      png_const_bytep row = png_voidcast(png_const_bytep, display->first_row);
-      ptrdiff_t row_bytes = display->row_bytes;
-      png_uint_32 y = image->height;
-
-      while (y-- > 0)
-      {
-         png_write_row(png_ptr, row);
-         row += row_bytes;
-      }
-   }
-
-   png_write_end(png_ptr, info_ptr);
-   return 1;
-}
-
-int PNGAPI
-png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
-   const void *buffer, png_int_32 row_stride, const void *colormap)
-{
-   /* Write the image to the given (FILE*). */
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file != NULL)
-      {
-         if (png_image_write_init(image) != 0)
-         {
-            png_image_write_control display;
-            int result;
-
-            /* This is slightly evil, but png_init_io doesn't do anything other
-             * than this and we haven't changed the standard IO functions so
-             * this saves a 'safe' function.
-             */
-            image->opaque->png_ptr->io_ptr = file;
-
-            memset(&display, 0, (sizeof display));
-            display.image = image;
-            display.buffer = buffer;
-            display.row_stride = row_stride;
-            display.colormap = colormap;
-            display.convert_to_8bit = convert_to_8bit;
-
-            result = png_safe_execute(image, png_image_write_main, &display);
-            png_image_free(image);
-            return result;
-         }
-
-         else
-            return 0;
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_write_to_stdio: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_write_to_stdio: incorrect PNG_IMAGE_VERSION");
-
-   else
-      return 0;
-}
-
-int PNGAPI
-png_image_write_to_file(png_imagep image, const char *file_name,
-   int convert_to_8bit, const void *buffer, png_int_32 row_stride,
-   const void *colormap)
-{
-   /* Write the image to the named file. */
-   if (image != NULL && image->version == PNG_IMAGE_VERSION)
-   {
-      if (file_name != NULL)
-      {
-         FILE *fp = fopen(file_name, "wb");
-
-         if (fp != NULL)
-         {
-            if (png_image_write_to_stdio(image, fp, convert_to_8bit, buffer,
-               row_stride, colormap) != 0)
-            {
-               int error; /* from fflush/fclose */
-
-               /* Make sure the file is flushed correctly. */
-               if (fflush(fp) == 0 && ferror(fp) == 0)
-               {
-                  if (fclose(fp) == 0)
-                     return 1;
-
-                  error = errno; /* from fclose */
-               }
-
-               else
-               {
-                  error = errno; /* from fflush or ferror */
-                  (void)fclose(fp);
-               }
-
-               (void)remove(file_name);
-               /* The image has already been cleaned up; this is just used to
-                * set the error (because the original write succeeded).
-                */
-               return png_image_error(image, strerror(error));
-            }
-
-            else
-            {
-               /* Clean up: just the opened file. */
-               (void)fclose(fp);
-               (void)remove(file_name);
-               return 0;
-            }
-         }
-
-         else
-            return png_image_error(image, strerror(errno));
-      }
-
-      else
-         return png_image_error(image,
-            "png_image_write_to_file: invalid argument");
-   }
-
-   else if (image != NULL)
-      return png_image_error(image,
-         "png_image_write_to_file: incorrect PNG_IMAGE_VERSION");
-
-   else
-      return 0;
-}
-#endif /* STDIO */
-#endif /* SIMPLIFIED_WRITE */
-#endif /* WRITE */
--- a/DoConfig/fltk/png/pngwtran.c
+++ /dev/null
@@ -1,574 +1,0 @@
-
-/* pngwtran.c - transforms the data in a row for PNG writers
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-/* Pack pixels into bytes.  Pass the true bit depth in bit_depth.  The
- * row_info bit depth should be 8 (one pixel per byte).  The channels
- * should be 1 (this only happens on grayscale and paletted images).
- */
-static void
-png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
-{
-   png_debug(1, "in png_do_pack");
-
-   if (row_info->bit_depth == 8 &&
-      row_info->channels == 1)
-   {
-      switch ((int)bit_depth)
-      {
-         case 1:
-         {
-            png_bytep sp, dp;
-            int mask, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            mask = 0x80;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               if (*sp != 0)
-                  v |= mask;
-
-               sp++;
-
-               if (mask > 1)
-                  mask >>= 1;
-
-               else
-               {
-                  mask = 0x80;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-            }
-
-            if (mask != 0x80)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp, dp;
-            int shift, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            shift = 6;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte value;
-
-               value = (png_byte)(*sp & 0x03);
-               v |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 6;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-
-               else
-                  shift -= 2;
-
-               sp++;
-            }
-
-            if (shift != 6)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp, dp;
-            int shift, v;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            sp = row;
-            dp = row;
-            shift = 4;
-            v = 0;
-
-            for (i = 0; i < row_width; i++)
-            {
-               png_byte value;
-
-               value = (png_byte)(*sp & 0x0f);
-               v |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 4;
-                  *dp = (png_byte)v;
-                  dp++;
-                  v = 0;
-               }
-
-               else
-                  shift -= 4;
-
-               sp++;
-            }
-
-            if (shift != 4)
-               *dp = (png_byte)v;
-
-            break;
-         }
-
-         default:
-            break;
-      }
-
-      row_info->bit_depth = (png_byte)bit_depth;
-      row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-          row_info->width);
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-/* Shift pixel values to take advantage of whole range.  Pass the
- * true number of bits in bit_depth.  The row should be packed
- * according to row_info->bit_depth.  Thus, if you had a row of
- * bit depth 4, but the pixels only had values from 0 to 7, you
- * would pass 3 as bit_depth, and this routine would translate the
- * data to 0 to 15.
- */
-static void
-png_do_shift(png_row_infop row_info, png_bytep row,
-    png_const_color_8p bit_depth)
-{
-   png_debug(1, "in png_do_shift");
-
-   if (row_info->color_type != PNG_COLOR_TYPE_PALETTE)
-   {
-      int shift_start[4], shift_dec[4];
-      int channels = 0;
-
-      if ((row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->red;
-         shift_dec[channels] = bit_depth->red;
-         channels++;
-
-         shift_start[channels] = row_info->bit_depth - bit_depth->green;
-         shift_dec[channels] = bit_depth->green;
-         channels++;
-
-         shift_start[channels] = row_info->bit_depth - bit_depth->blue;
-         shift_dec[channels] = bit_depth->blue;
-         channels++;
-      }
-
-      else
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->gray;
-         shift_dec[channels] = bit_depth->gray;
-         channels++;
-      }
-
-      if ((row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
-      {
-         shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
-         shift_dec[channels] = bit_depth->alpha;
-         channels++;
-      }
-
-      /* With low row depths, could only be grayscale, so one channel */
-      if (row_info->bit_depth < 8)
-      {
-         png_bytep bp = row;
-         png_size_t i;
-         unsigned int mask;
-         png_size_t row_bytes = row_info->rowbytes;
-
-         if (bit_depth->gray == 1 && row_info->bit_depth == 2)
-            mask = 0x55;
-
-         else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
-            mask = 0x11;
-
-         else
-            mask = 0xff;
-
-         for (i = 0; i < row_bytes; i++, bp++)
-         {
-            int j;
-            unsigned int v, out;
-
-            v = *bp;
-            out = 0;
-
-            for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
-            {
-               if (j > 0)
-                  out |= v << j;
-
-               else
-                  out |= (v >> (-j)) & mask;
-            }
-
-            *bp = (png_byte)(out & 0xff);
-         }
-      }
-
-      else if (row_info->bit_depth == 8)
-      {
-         png_bytep bp = row;
-         png_uint_32 i;
-         png_uint_32 istop = channels * row_info->width;
-
-         for (i = 0; i < istop; i++, bp++)
-         {
-
-            const unsigned int c = i%channels;
-            int j;
-            unsigned int v, out;
-
-            v = *bp;
-            out = 0;
-
-            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
-            {
-               if (j > 0)
-                  out |= v << j;
-
-               else
-                  out |= v >> (-j);
-            }
-
-            *bp = (png_byte)(out & 0xff);
-         }
-      }
-
-      else
-      {
-         png_bytep bp;
-         png_uint_32 i;
-         png_uint_32 istop = channels * row_info->width;
-
-         for (bp = row, i = 0; i < istop; i++)
-         {
-            const unsigned int c = i%channels;
-            int j;
-            unsigned int value, v;
-
-            v = png_get_uint_16(bp);
-            value = 0;
-
-            for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
-            {
-               if (j > 0)
-                  value |= v << j;
-
-               else
-                  value |= v >> (-j);
-            }
-            *bp++ = (png_byte)((value >> 8) & 0xff);
-            *bp++ = (png_byte)(value & 0xff);
-         }
-      }
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-static void
-png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_swap_alpha");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This converts from ARGB to RGBA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save;
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This converts from AARRGGBB to RRGGBBAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save[2];
-               save[0] = *(sp++);
-               save[1] = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save[0];
-               *(dp++) = save[1];
-            }
-         }
-#endif /* WRITE_16BIT */
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This converts from AG to GA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save;
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This converts from AAGG to GGAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               png_byte save[2];
-               save[0] = *(sp++);
-               save[1] = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = save[0];
-               *(dp++) = save[1];
-            }
-         }
-#endif /* WRITE_16BIT */
-      }
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-static void
-png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
-{
-   png_debug(1, "in png_do_write_invert_alpha");
-
-   {
-      if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This inverts the alpha channel in RGBA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=3; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This inverts the alpha channel in RRGGBBAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=6; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-#endif /* WRITE_16BIT */
-      }
-
-      else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-      {
-         if (row_info->bit_depth == 8)
-         {
-            /* This inverts the alpha channel in GA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               *(dp++) = *(sp++);
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         else
-         {
-            /* This inverts the alpha channel in GGAA */
-            png_bytep sp, dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            for (i = 0, sp = dp = row; i < row_width; i++)
-            {
-               /* Does nothing
-               *(dp++) = *(sp++);
-               *(dp++) = *(sp++);
-               */
-               sp+=2; dp = sp;
-               *(dp++) = (png_byte)(255 - *(sp++));
-               *(dp++) = (png_byte)(255 - *(sp++));
-            }
-         }
-#endif /* WRITE_16BIT */
-      }
-   }
-}
-#endif
-
-/* Transform the data according to the user's wishes.  The order of
- * transformations is significant.
- */
-void /* PRIVATE */
-png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_debug(1, "in png_do_write_transformations");
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
-   if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
-      if (png_ptr->write_user_transform_fn != NULL)
-         (*(png_ptr->write_user_transform_fn)) /* User write transform
-                                                 function */
-             (png_ptr,  /* png_ptr */
-             row_info,  /* row_info: */
-                /*  png_uint_32 width;       width of row */
-                /*  png_size_t rowbytes;     number of bytes in row */
-                /*  png_byte color_type;     color type of pixels */
-                /*  png_byte bit_depth;      bit depth of samples */
-                /*  png_byte channels;       number of channels (1-4) */
-                /*  png_byte pixel_depth;    bits per pixel (depth*channels) */
-             png_ptr->row_buf + 1);      /* start of pixel data for row */
-#endif
-
-#ifdef PNG_WRITE_FILLER_SUPPORTED
-   if ((png_ptr->transformations & PNG_FILLER) != 0)
-      png_do_strip_channel(row_info, png_ptr->row_buf + 1,
-         !(png_ptr->flags & PNG_FLAG_FILLER_AFTER));
-#endif
-
-#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
-      png_do_packswap(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_PACK_SUPPORTED
-   if ((png_ptr->transformations & PNG_PACK) != 0)
-      png_do_pack(row_info, png_ptr->row_buf + 1,
-          (png_uint_32)png_ptr->bit_depth);
-#endif
-
-#ifdef PNG_WRITE_SWAP_SUPPORTED
-#  ifdef PNG_16BIT_SUPPORTED
-   if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
-      png_do_swap(row_info, png_ptr->row_buf + 1);
-#  endif
-#endif
-
-#ifdef PNG_WRITE_SHIFT_SUPPORTED
-   if ((png_ptr->transformations & PNG_SHIFT) != 0)
-      png_do_shift(row_info, png_ptr->row_buf + 1,
-          &(png_ptr->shift));
-#endif
-
-#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0)
-      png_do_write_swap_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
-   if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
-      png_do_write_invert_alpha(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_BGR_SUPPORTED
-   if ((png_ptr->transformations & PNG_BGR) != 0)
-      png_do_bgr(row_info, png_ptr->row_buf + 1);
-#endif
-
-#ifdef PNG_WRITE_INVERT_SUPPORTED
-   if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
-      png_do_invert(row_info, png_ptr->row_buf + 1);
-#endif
-}
-#endif /* WRITE_TRANSFORMS */
-#endif /* WRITE */
--- a/DoConfig/fltk/png/pngwutil.c
+++ /dev/null
@@ -1,3029 +1,0 @@
-
-/* pngwutil.c - utilities to write a PNG file
- *
- * Last changed in libpng 1.6.15 [November 20, 2014]
- * Copyright (c) 1998-2014 Glenn Randers-Pehrson
- * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
- * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#include "pngpriv.h"
-
-#ifdef PNG_WRITE_SUPPORTED
-
-#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
-/* Place a 32-bit number into a buffer in PNG byte order.  We work
- * with unsigned numbers for convenience, although one supported
- * ancillary chunk uses signed (two's complement) numbers.
- */
-void PNGAPI
-png_save_uint_32(png_bytep buf, png_uint_32 i)
-{
-   buf[0] = (png_byte)((i >> 24) & 0xff);
-   buf[1] = (png_byte)((i >> 16) & 0xff);
-   buf[2] = (png_byte)((i >> 8) & 0xff);
-   buf[3] = (png_byte)(i & 0xff);
-}
-
-/* Place a 16-bit number into a buffer in PNG byte order.
- * The parameter is declared unsigned int, not png_uint_16,
- * just to avoid potential problems on pre-ANSI C compilers.
- */
-void PNGAPI
-png_save_uint_16(png_bytep buf, unsigned int i)
-{
-   buf[0] = (png_byte)((i >> 8) & 0xff);
-   buf[1] = (png_byte)(i & 0xff);
-}
-#endif
-
-/* Simple function to write the signature.  If we have already written
- * the magic bytes of the signature, or more likely, the PNG stream is
- * being embedded into another stream and doesn't need its own signature,
- * we should call png_set_sig_bytes() to tell libpng how many of the
- * bytes have already been written.
- */
-void PNGAPI
-png_write_sig(png_structrp png_ptr)
-{
-   png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the signature is being written */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_SIGNATURE;
-#endif
-
-   /* Write the rest of the 8 byte signature */
-   png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
-      (png_size_t)(8 - png_ptr->sig_bytes));
-
-   if (png_ptr->sig_bytes < 3)
-      png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
-}
-
-/* Write the start of a PNG chunk.  The type is the chunk type.
- * The total_length is the sum of the lengths of all the data you will be
- * passing in png_write_chunk_data().
- */
-static void
-png_write_chunk_header(png_structrp png_ptr, png_uint_32 chunk_name,
-    png_uint_32 length)
-{
-   png_byte buf[8];
-
-#if defined(PNG_DEBUG) && (PNG_DEBUG > 0)
-   PNG_CSTRING_FROM_CHUNK(buf, chunk_name);
-   png_debug2(0, "Writing %s chunk, length = %lu", buf, (unsigned long)length);
-#endif
-
-   if (png_ptr == NULL)
-      return;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the chunk header is being written.
-    * PNG_IO_CHUNK_HDR requires a single I/O call.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_HDR;
-#endif
-
-   /* Write the length and the chunk name */
-   png_save_uint_32(buf, length);
-   png_save_uint_32(buf + 4, chunk_name);
-   png_write_data(png_ptr, buf, 8);
-
-   /* Put the chunk name into png_ptr->chunk_name */
-   png_ptr->chunk_name = chunk_name;
-
-   /* Reset the crc and run it over the chunk name */
-   png_reset_crc(png_ptr);
-
-   png_calculate_crc(png_ptr, buf + 4, 4);
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that chunk data will (possibly) be written.
-    * PNG_IO_CHUNK_DATA does NOT require a specific number of I/O calls.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_DATA;
-#endif
-}
-
-void PNGAPI
-png_write_chunk_start(png_structrp png_ptr, png_const_bytep chunk_string,
-    png_uint_32 length)
-{
-   png_write_chunk_header(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), length);
-}
-
-/* Write the data of a PNG chunk started with png_write_chunk_header().
- * Note that multiple calls to this function are allowed, and that the
- * sum of the lengths from these calls *must* add up to the total_length
- * given to png_write_chunk_header().
- */
-void PNGAPI
-png_write_chunk_data(png_structrp png_ptr, png_const_bytep data,
-    png_size_t length)
-{
-   /* Write the data, and run the CRC over it */
-   if (png_ptr == NULL)
-      return;
-
-   if (data != NULL && length > 0)
-   {
-      png_write_data(png_ptr, data, length);
-
-      /* Update the CRC after writing the data,
-       * in case the user I/O routine alters it.
-       */
-      png_calculate_crc(png_ptr, data, length);
-   }
-}
-
-/* Finish a chunk started with png_write_chunk_header(). */
-void PNGAPI
-png_write_chunk_end(png_structrp png_ptr)
-{
-   png_byte buf[4];
-
-   if (png_ptr == NULL) return;
-
-#ifdef PNG_IO_STATE_SUPPORTED
-   /* Inform the I/O callback that the chunk CRC is being written.
-    * PNG_IO_CHUNK_CRC requires a single I/O function call.
-    */
-   png_ptr->io_state = PNG_IO_WRITING | PNG_IO_CHUNK_CRC;
-#endif
-
-   /* Write the crc in a single operation */
-   png_save_uint_32(buf, png_ptr->crc);
-
-   png_write_data(png_ptr, buf, (png_size_t)4);
-}
-
-/* Write a PNG chunk all at once.  The type is an array of ASCII characters
- * representing the chunk name.  The array must be at least 4 bytes in
- * length, and does not need to be null terminated.  To be safe, pass the
- * pre-defined chunk names here, and if you need a new one, define it
- * where the others are defined.  The length is the length of the data.
- * All the data must be present.  If that is not possible, use the
- * png_write_chunk_start(), png_write_chunk_data(), and png_write_chunk_end()
- * functions instead.
- */
-static void
-png_write_complete_chunk(png_structrp png_ptr, png_uint_32 chunk_name,
-   png_const_bytep data, png_size_t length)
-{
-   if (png_ptr == NULL)
-      return;
-
-   /* On 64 bit architectures 'length' may not fit in a png_uint_32. */
-   if (length > PNG_UINT_31_MAX)
-      png_error(png_ptr, "length exceeds PNG maximum");
-
-   png_write_chunk_header(png_ptr, chunk_name, (png_uint_32)length);
-   png_write_chunk_data(png_ptr, data, length);
-   png_write_chunk_end(png_ptr);
-}
-
-/* This is the API that calls the internal function above. */
-void PNGAPI
-png_write_chunk(png_structrp png_ptr, png_const_bytep chunk_string,
-   png_const_bytep data, png_size_t length)
-{
-   png_write_complete_chunk(png_ptr, PNG_CHUNK_FROM_STRING(chunk_string), data,
-      length);
-}
-
-/* This is used below to find the size of an image to pass to png_deflate_claim,
- * so it only needs to be accurate if the size is less than 16384 bytes (the
- * point at which a lower LZ window size can be used.)
- */
-static png_alloc_size_t
-png_image_size(png_structrp png_ptr)
-{
-   /* Only return sizes up to the maximum of a png_uint_32; do this by limiting
-    * the width and height used to 15 bits.
-    */
-   png_uint_32 h = png_ptr->height;
-
-   if (png_ptr->rowbytes < 32768 && h < 32768)
-   {
-      if (png_ptr->interlaced != 0)
-      {
-         /* Interlacing makes the image larger because of the replication of
-          * both the filter byte and the padding to a byte boundary.
-          */
-         png_uint_32 w = png_ptr->width;
-         unsigned int pd = png_ptr->pixel_depth;
-         png_alloc_size_t cb_base;
-         int pass;
-
-         for (cb_base=0, pass=0; pass<=6; ++pass)
-         {
-            png_uint_32 pw = PNG_PASS_COLS(w, pass);
-
-            if (pw > 0)
-               cb_base += (PNG_ROWBYTES(pd, pw)+1) * PNG_PASS_ROWS(h, pass);
-         }
-
-         return cb_base;
-      }
-
-      else
-         return (png_ptr->rowbytes+1) * h;
-   }
-
-   else
-      return 0xffffffffU;
-}
-
-#ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-   /* This is the code to hack the first two bytes of the deflate stream (the
-    * deflate header) to correct the windowBits value to match the actual data
-    * size.  Note that the second argument is the *uncompressed* size but the
-    * first argument is the *compressed* data (and it must be deflate
-    * compressed.)
-    */
-static void
-optimize_cmf(png_bytep data, png_alloc_size_t data_size)
-{
-   /* Optimize the CMF field in the zlib stream.  The resultant zlib stream is
-    * still compliant to the stream specification.
-    */
-   if (data_size <= 16384) /* else windowBits must be 15 */
-   {
-      unsigned int z_cmf = data[0];  /* zlib compression method and flags */
-
-      if ((z_cmf & 0x0f) == 8 && (z_cmf & 0xf0) <= 0x70)
-      {
-         unsigned int z_cinfo;
-         unsigned int half_z_window_size;
-
-         z_cinfo = z_cmf >> 4;
-         half_z_window_size = 1U << (z_cinfo + 7);
-
-         if (data_size <= half_z_window_size) /* else no change */
-         {
-            unsigned int tmp;
-
-            do
-            {
-               half_z_window_size >>= 1;
-               --z_cinfo;
-            }
-            while (z_cinfo > 0 && data_size <= half_z_window_size);
-
-            z_cmf = (z_cmf & 0x0f) | (z_cinfo << 4);
-
-            data[0] = (png_byte)z_cmf;
-            tmp = data[1] & 0xe0;
-            tmp += 0x1f - ((z_cmf << 8) + tmp) % 0x1f;
-            data[1] = (png_byte)tmp;
-         }
-      }
-   }
-}
-#endif /* WRITE_OPTIMIZE_CMF */
-
-/* Initialize the compressor for the appropriate type of compression. */
-static int
-png_deflate_claim(png_structrp png_ptr, png_uint_32 owner,
-   png_alloc_size_t data_size)
-{
-   if (png_ptr->zowner != 0)
-   {
-#if defined(PNG_WARNINGS_SUPPORTED) || defined(PNG_ERROR_TEXT_SUPPORTED)
-      char msg[64];
-
-      PNG_STRING_FROM_CHUNK(msg, owner);
-      msg[4] = ':';
-      msg[5] = ' ';
-      PNG_STRING_FROM_CHUNK(msg+6, png_ptr->zowner);
-      /* So the message that results is "<chunk> using zstream"; this is an
-       * internal error, but is very useful for debugging.  i18n requirements
-       * are minimal.
-       */
-      (void)png_safecat(msg, (sizeof msg), 10, " using zstream");
-#endif
-#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
-         png_warning(png_ptr, msg);
-
-         /* Attempt sane error recovery */
-         if (png_ptr->zowner == png_IDAT) /* don't steal from IDAT */
-         {
-            png_ptr->zstream.msg = PNGZ_MSG_CAST("in use by IDAT");
-            return Z_STREAM_ERROR;
-         }
-
-         png_ptr->zowner = 0;
-#else
-         png_error(png_ptr, msg);
-#endif
-   }
-
-   {
-      int level = png_ptr->zlib_level;
-      int method = png_ptr->zlib_method;
-      int windowBits = png_ptr->zlib_window_bits;
-      int memLevel = png_ptr->zlib_mem_level;
-      int strategy; /* set below */
-      int ret; /* zlib return code */
-
-      if (owner == png_IDAT)
-      {
-         if ((png_ptr->flags & PNG_FLAG_ZLIB_CUSTOM_STRATEGY) != 0)
-            strategy = png_ptr->zlib_strategy;
-
-         else if (png_ptr->do_filter != PNG_FILTER_NONE)
-            strategy = PNG_Z_DEFAULT_STRATEGY;
-
-         else
-            strategy = PNG_Z_DEFAULT_NOFILTER_STRATEGY;
-      }
-
-      else
-      {
-#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
-            level = png_ptr->zlib_text_level;
-            method = png_ptr->zlib_text_method;
-            windowBits = png_ptr->zlib_text_window_bits;
-            memLevel = png_ptr->zlib_text_mem_level;
-            strategy = png_ptr->zlib_text_strategy;
-#else
-            /* If customization is not supported the values all come from the
-             * IDAT values except for the strategy, which is fixed to the
-             * default.  (This is the pre-1.6.0 behavior too, although it was
-             * implemented in a very different way.)
-             */
-            strategy = Z_DEFAULT_STRATEGY;
-#endif
-      }
-
-      /* Adjust 'windowBits' down if larger than 'data_size'; to stop this
-       * happening just pass 32768 as the data_size parameter.  Notice that zlib
-       * requires an extra 262 bytes in the window in addition to the data to be
-       * able to see the whole of the data, so if data_size+262 takes us to the
-       * next windowBits size we need to fix up the value later.  (Because even
-       * though deflate needs the extra window, inflate does not!)
-       */
-      if (data_size <= 16384)
-      {
-         /* IMPLEMENTATION NOTE: this 'half_window_size' stuff is only here to
-          * work round a Microsoft Visual C misbehavior which, contrary to C-90,
-          * widens the result of the following shift to 64-bits if (and,
-          * apparently, only if) it is used in a test.
-          */
-         unsigned int half_window_size = 1U << (windowBits-1);
-
-         while (data_size + 262 <= half_window_size)
-         {
-            half_window_size >>= 1;
-            --windowBits;
-         }
-      }
-
-      /* Check against the previous initialized values, if any. */
-      if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) != 0 &&
-         (png_ptr->zlib_set_level != level ||
-         png_ptr->zlib_set_method != method ||
-         png_ptr->zlib_set_window_bits != windowBits ||
-         png_ptr->zlib_set_mem_level != memLevel ||
-         png_ptr->zlib_set_strategy != strategy))
-      {
-         if (deflateEnd(&png_ptr->zstream) != Z_OK)
-            png_warning(png_ptr, "deflateEnd failed (ignored)");
-
-         png_ptr->flags &= ~PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      /* For safety clear out the input and output pointers (currently zlib
-       * doesn't use them on Init, but it might in the future).
-       */
-      png_ptr->zstream.next_in = NULL;
-      png_ptr->zstream.avail_in = 0;
-      png_ptr->zstream.next_out = NULL;
-      png_ptr->zstream.avail_out = 0;
-
-      /* Now initialize if required, setting the new parameters, otherwise just
-       * to a simple reset to the previous parameters.
-       */
-      if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) != 0)
-         ret = deflateReset(&png_ptr->zstream);
-
-      else
-      {
-         ret = deflateInit2(&png_ptr->zstream, level, method, windowBits,
-            memLevel, strategy);
-
-         if (ret == Z_OK)
-            png_ptr->flags |= PNG_FLAG_ZSTREAM_INITIALIZED;
-      }
-
-      /* The return code is from either deflateReset or deflateInit2; they have
-       * pretty much the same set of error codes.
-       */
-      if (ret == Z_OK)
-         png_ptr->zowner = owner;
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      return ret;
-   }
-}
-
-/* Clean up (or trim) a linked list of compression buffers. */
-void /* PRIVATE */
-png_free_buffer_list(png_structrp png_ptr, png_compression_bufferp *listp)
-{
-   png_compression_bufferp list = *listp;
-
-   if (list != NULL)
-   {
-      *listp = NULL;
-
-      do
-      {
-         png_compression_bufferp next = list->next;
-
-         png_free(png_ptr, list);
-         list = next;
-      }
-      while (list != NULL);
-   }
-}
-
-#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
-/* This pair of functions encapsulates the operation of (a) compressing a
- * text string, and (b) issuing it later as a series of chunk data writes.
- * The compression_state structure is shared context for these functions
- * set up by the caller to allow access to the relevant local variables.
- *
- * compression_buffer (new in 1.6.0) is just a linked list of zbuffer_size
- * temporary buffers.  From 1.6.0 it is retained in png_struct so that it will
- * be correctly freed in the event of a write error (previous implementations
- * just leaked memory.)
- */
-typedef struct
-{
-   png_const_bytep      input;        /* The uncompressed input data */
-   png_alloc_size_t     input_len;    /* Its length */
-   png_uint_32          output_len;   /* Final compressed length */
-   png_byte             output[1024]; /* First block of output */
-} compression_state;
-
-static void
-png_text_compress_init(compression_state *comp, png_const_bytep input,
-   png_alloc_size_t input_len)
-{
-   comp->input = input;
-   comp->input_len = input_len;
-   comp->output_len = 0;
-}
-
-/* Compress the data in the compression state input */
-static int
-png_text_compress(png_structrp png_ptr, png_uint_32 chunk_name,
-   compression_state *comp, png_uint_32 prefix_len)
-{
-   int ret;
-
-   /* To find the length of the output it is necessary to first compress the
-    * input. The result is buffered rather than using the two-pass algorithm
-    * that is used on the inflate side; deflate is assumed to be slower and a
-    * PNG writer is assumed to have more memory available than a PNG reader.
-    *
-    * IMPLEMENTATION NOTE: the zlib API deflateBound() can be used to find an
-    * upper limit on the output size, but it is always bigger than the input
-    * size so it is likely to be more efficient to use this linked-list
-    * approach.
-    */
-   ret = png_deflate_claim(png_ptr, chunk_name, comp->input_len);
-
-   if (ret != Z_OK)
-      return ret;
-
-   /* Set up the compression buffers, we need a loop here to avoid overflowing a
-    * uInt.  Use ZLIB_IO_MAX to limit the input.  The output is always limited
-    * by the output buffer size, so there is no need to check that.  Since this
-    * is ANSI-C we know that an 'int', hence a uInt, is always at least 16 bits
-    * in size.
-    */
-   {
-      png_compression_bufferp *end = &png_ptr->zbuffer_list;
-      png_alloc_size_t input_len = comp->input_len; /* may be zero! */
-      png_uint_32 output_len;
-
-      /* zlib updates these for us: */
-      png_ptr->zstream.next_in = PNGZ_INPUT_CAST(comp->input);
-      png_ptr->zstream.avail_in = 0; /* Set below */
-      png_ptr->zstream.next_out = comp->output;
-      png_ptr->zstream.avail_out = (sizeof comp->output);
-
-      output_len = png_ptr->zstream.avail_out;
-
-      do
-      {
-         uInt avail_in = ZLIB_IO_MAX;
-
-         if (avail_in > input_len)
-            avail_in = (uInt)input_len;
-
-         input_len -= avail_in;
-
-         png_ptr->zstream.avail_in = avail_in;
-
-         if (png_ptr->zstream.avail_out == 0)
-         {
-            png_compression_buffer *next;
-
-            /* Chunk data is limited to 2^31 bytes in length, so the prefix
-             * length must be counted here.
-             */
-            if (output_len + prefix_len > PNG_UINT_31_MAX)
-            {
-               ret = Z_MEM_ERROR;
-               break;
-            }
-
-            /* Need a new (malloc'ed) buffer, but there may be one present
-             * already.
-             */
-            next = *end;
-            if (next == NULL)
-            {
-               next = png_voidcast(png_compression_bufferp, png_malloc_base
-                  (png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
-
-               if (next == NULL)
-               {
-                  ret = Z_MEM_ERROR;
-                  break;
-               }
-
-               /* Link in this buffer (so that it will be freed later) */
-               next->next = NULL;
-               *end = next;
-            }
-
-            png_ptr->zstream.next_out = next->output;
-            png_ptr->zstream.avail_out = png_ptr->zbuffer_size;
-            output_len += png_ptr->zstream.avail_out;
-
-            /* Move 'end' to the next buffer pointer. */
-            end = &next->next;
-         }
-
-         /* Compress the data */
-         ret = deflate(&png_ptr->zstream,
-            input_len > 0 ? Z_NO_FLUSH : Z_FINISH);
-
-         /* Claw back input data that was not consumed (because avail_in is
-          * reset above every time round the loop).
-          */
-         input_len += png_ptr->zstream.avail_in;
-         png_ptr->zstream.avail_in = 0; /* safety */
-      }
-      while (ret == Z_OK);
-
-      /* There may be some space left in the last output buffer. This needs to
-       * be subtracted from output_len.
-       */
-      output_len -= png_ptr->zstream.avail_out;
-      png_ptr->zstream.avail_out = 0; /* safety */
-      comp->output_len = output_len;
-
-      /* Now double check the output length, put in a custom message if it is
-       * too long.  Otherwise ensure the z_stream::msg pointer is set to
-       * something.
-       */
-      if (output_len + prefix_len >= PNG_UINT_31_MAX)
-      {
-         png_ptr->zstream.msg = PNGZ_MSG_CAST("compressed data too long");
-         ret = Z_MEM_ERROR;
-      }
-
-      else
-         png_zstream_error(png_ptr, ret);
-
-      /* Reset zlib for another zTXt/iTXt or image data */
-      png_ptr->zowner = 0;
-
-      /* The only success case is Z_STREAM_END, input_len must be 0; if not this
-       * is an internal error.
-       */
-      if (ret == Z_STREAM_END && input_len == 0)
-      {
-#ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-         /* Fix up the deflate header, if required */
-         optimize_cmf(comp->output, comp->input_len);
-#endif
-         /* But Z_OK is returned, not Z_STREAM_END; this allows the claim
-          * function above to return Z_STREAM_END on an error (though it never
-          * does in the current versions of zlib.)
-          */
-         return Z_OK;
-      }
-
-      else
-         return ret;
-   }
-}
-
-/* Ship the compressed text out via chunk writes */
-static void
-png_write_compressed_data_out(png_structrp png_ptr, compression_state *comp)
-{
-   png_uint_32 output_len = comp->output_len;
-   png_const_bytep output = comp->output;
-   png_uint_32 avail = (sizeof comp->output);
-   png_compression_buffer *next = png_ptr->zbuffer_list;
-
-   for (;;)
-   {
-      if (avail > output_len)
-         avail = output_len;
-
-      png_write_chunk_data(png_ptr, output, avail);
-
-      output_len -= avail;
-
-      if (output_len == 0 || next == NULL)
-         break;
-
-      avail = png_ptr->zbuffer_size;
-      output = next->output;
-      next = next->next;
-   }
-
-   /* This is an internal error; 'next' must have been NULL! */
-   if (output_len > 0)
-      png_error(png_ptr, "error writing ancillary chunked compressed data");
-}
-#endif /* WRITE_COMPRESSED_TEXT */
-
-#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
-    defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
-/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification,
- * and if invalid, correct the keyword rather than discarding the entire
- * chunk.  The PNG 1.0 specification requires keywords 1-79 characters in
- * length, forbids leading or trailing whitespace, multiple internal spaces,
- * and the non-break space (0x80) from ISO 8859-1.  Returns keyword length.
- *
- * The 'new_key' buffer must be 80 characters in size (for the keyword plus a
- * trailing '\0').  If this routine returns 0 then there was no keyword, or a
- * valid one could not be generated, and the caller must png_error.
- */
-static png_uint_32
-png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
-{
-   png_const_charp orig_key = key;
-   png_uint_32 key_len = 0;
-   int bad_character = 0;
-   int space = 1;
-
-   png_debug(1, "in png_check_keyword");
-
-   if (key == NULL)
-   {
-      *new_key = 0;
-      return 0;
-   }
-
-   while (*key && key_len < 79)
-   {
-      png_byte ch = (png_byte)(0xff & *key++);
-
-      if ((ch > 32 && ch <= 126) || (ch >= 161 /*&& ch <= 255*/))
-         *new_key++ = ch, ++key_len, space = 0;
-
-      else if (space == 0)
-      {
-         /* A space or an invalid character when one wasn't seen immediately
-          * before; output just a space.
-          */
-         *new_key++ = 32, ++key_len, space = 1;
-
-         /* If the character was not a space then it is invalid. */
-         if (ch != 32)
-            bad_character = ch;
-      }
-
-      else if (bad_character == 0)
-         bad_character = ch; /* just skip it, record the first error */
-   }
-
-   if (key_len > 0 && space != 0) /* trailing space */
-   {
-      --key_len, --new_key;
-      if (bad_character == 0)
-         bad_character = 32;
-   }
-
-   /* Terminate the keyword */
-   *new_key = 0;
-
-   if (key_len == 0)
-      return 0;
-
-#ifdef PNG_WARNINGS_SUPPORTED
-   /* Try to only output one warning per keyword: */
-   if (*key != 0) /* keyword too long */
-      png_warning(png_ptr, "keyword truncated");
-
-   else if (bad_character != 0)
-   {
-      PNG_WARNING_PARAMETERS(p)
-
-      png_warning_parameter(p, 1, orig_key);
-      png_warning_parameter_signed(p, 2, PNG_NUMBER_FORMAT_02x, bad_character);
-
-      png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
-   }
-#endif /* WARNINGS */
-
-   return key_len;
-}
-#endif /* WRITE_TEXT || WRITE_pCAL || WRITE_iCCP || WRITE_sPLT */
-
-/* Write the IHDR chunk, and update the png_struct with the necessary
- * information.  Note that the rest of this code depends upon this
- * information being correct.
- */
-void /* PRIVATE */
-png_write_IHDR(png_structrp png_ptr, png_uint_32 width, png_uint_32 height,
-    int bit_depth, int color_type, int compression_type, int filter_type,
-    int interlace_type)
-{
-   png_byte buf[13]; /* Buffer to store the IHDR info */
-
-   png_debug(1, "in png_write_IHDR");
-
-   /* Check that we have valid input data from the application info */
-   switch (color_type)
-   {
-      case PNG_COLOR_TYPE_GRAY:
-         switch (bit_depth)
-         {
-            case 1:
-            case 2:
-            case 4:
-            case 8:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-            case 16:
-#endif
-               png_ptr->channels = 1; break;
-
-            default:
-               png_error(png_ptr,
-                   "Invalid bit depth for grayscale image");
-         }
-         break;
-
-      case PNG_COLOR_TYPE_RGB:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         if (bit_depth != 8 && bit_depth != 16)
-#else
-         if (bit_depth != 8)
-#endif
-            png_error(png_ptr, "Invalid bit depth for RGB image");
-
-         png_ptr->channels = 3;
-         break;
-
-      case PNG_COLOR_TYPE_PALETTE:
-         switch (bit_depth)
-         {
-            case 1:
-            case 2:
-            case 4:
-            case 8:
-               png_ptr->channels = 1;
-               break;
-
-            default:
-               png_error(png_ptr, "Invalid bit depth for paletted image");
-         }
-         break;
-
-      case PNG_COLOR_TYPE_GRAY_ALPHA:
-         if (bit_depth != 8 && bit_depth != 16)
-            png_error(png_ptr, "Invalid bit depth for grayscale+alpha image");
-
-         png_ptr->channels = 2;
-         break;
-
-      case PNG_COLOR_TYPE_RGB_ALPHA:
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-         if (bit_depth != 8 && bit_depth != 16)
-#else
-         if (bit_depth != 8)
-#endif
-            png_error(png_ptr, "Invalid bit depth for RGBA image");
-
-         png_ptr->channels = 4;
-         break;
-
-      default:
-         png_error(png_ptr, "Invalid image color type specified");
-   }
-
-   if (compression_type != PNG_COMPRESSION_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Invalid compression type specified");
-      compression_type = PNG_COMPRESSION_TYPE_BASE;
-   }
-
-   /* Write filter_method 64 (intrapixel differencing) only if
-    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
-    * 2. Libpng did not write a PNG signature (this filter_method is only
-    *    used in PNG datastreams that are embedded in MNG datastreams) and
-    * 3. The application called png_permit_mng_features with a mask that
-    *    included PNG_FLAG_MNG_FILTER_64 and
-    * 4. The filter_method is 64 and
-    * 5. The color_type is RGB or RGBA
-    */
-   if (
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-       !((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
-       ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) == 0) &&
-       (color_type == PNG_COLOR_TYPE_RGB ||
-        color_type == PNG_COLOR_TYPE_RGB_ALPHA) &&
-       (filter_type == PNG_INTRAPIXEL_DIFFERENCING)) &&
-#endif
-       filter_type != PNG_FILTER_TYPE_BASE)
-   {
-      png_warning(png_ptr, "Invalid filter type specified");
-      filter_type = PNG_FILTER_TYPE_BASE;
-   }
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   if (interlace_type != PNG_INTERLACE_NONE &&
-       interlace_type != PNG_INTERLACE_ADAM7)
-   {
-      png_warning(png_ptr, "Invalid interlace type specified");
-      interlace_type = PNG_INTERLACE_ADAM7;
-   }
-#else
-   interlace_type=PNG_INTERLACE_NONE;
-#endif
-
-   /* Save the relevent information */
-   png_ptr->bit_depth = (png_byte)bit_depth;
-   png_ptr->color_type = (png_byte)color_type;
-   png_ptr->interlaced = (png_byte)interlace_type;
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-   png_ptr->filter_type = (png_byte)filter_type;
-#endif
-   png_ptr->compression_type = (png_byte)compression_type;
-   png_ptr->width = width;
-   png_ptr->height = height;
-
-   png_ptr->pixel_depth = (png_byte)(bit_depth * png_ptr->channels);
-   png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
-   /* Set the usr info, so any transformations can modify it */
-   png_ptr->usr_width = png_ptr->width;
-   png_ptr->usr_bit_depth = png_ptr->bit_depth;
-   png_ptr->usr_channels = png_ptr->channels;
-
-   /* Pack the header information into the buffer */
-   png_save_uint_32(buf, width);
-   png_save_uint_32(buf + 4, height);
-   buf[8] = (png_byte)bit_depth;
-   buf[9] = (png_byte)color_type;
-   buf[10] = (png_byte)compression_type;
-   buf[11] = (png_byte)filter_type;
-   buf[12] = (png_byte)interlace_type;
-
-   /* Write the chunk */
-   png_write_complete_chunk(png_ptr, png_IHDR, buf, (png_size_t)13);
-
-   if ((png_ptr->do_filter) == PNG_NO_FILTERS)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE ||
-          png_ptr->bit_depth < 8)
-         png_ptr->do_filter = PNG_FILTER_NONE;
-
-      else
-         png_ptr->do_filter = PNG_ALL_FILTERS;
-   }
-
-   png_ptr->mode = PNG_HAVE_IHDR; /* not READY_FOR_ZTXT */
-}
-
-/* Write the palette.  We are careful not to trust png_color to be in the
- * correct order for PNG, so people can redefine it to any convenient
- * structure.
- */
-void /* PRIVATE */
-png_write_PLTE(png_structrp png_ptr, png_const_colorp palette,
-    png_uint_32 num_pal)
-{
-   png_uint_32 i;
-   png_const_colorp pal_ptr;
-   png_byte buf[3];
-
-   png_debug(1, "in png_write_PLTE");
-
-   if ((
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-       (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0 &&
-#endif
-       num_pal == 0) || num_pal > 256)
-   {
-      if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
-      {
-         png_error(png_ptr, "Invalid number of colors in palette");
-      }
-
-      else
-      {
-         png_warning(png_ptr, "Invalid number of colors in palette");
-         return;
-      }
-   }
-
-   if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) == 0)
-   {
-      png_warning(png_ptr,
-          "Ignoring request to write a PLTE chunk in grayscale PNG");
-
-      return;
-   }
-
-   png_ptr->num_palette = (png_uint_16)num_pal;
-   png_debug1(3, "num_palette = %d", png_ptr->num_palette);
-
-   png_write_chunk_header(png_ptr, png_PLTE, (png_uint_32)(num_pal * 3));
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-
-   for (i = 0, pal_ptr = palette; i < num_pal; i++, pal_ptr++)
-   {
-      buf[0] = pal_ptr->red;
-      buf[1] = pal_ptr->green;
-      buf[2] = pal_ptr->blue;
-      png_write_chunk_data(png_ptr, buf, (png_size_t)3);
-   }
-
-#else
-   /* This is a little slower but some buggy compilers need to do this
-    * instead
-    */
-   pal_ptr=palette;
-
-   for (i = 0; i < num_pal; i++)
-   {
-      buf[0] = pal_ptr[i].red;
-      buf[1] = pal_ptr[i].green;
-      buf[2] = pal_ptr[i].blue;
-      png_write_chunk_data(png_ptr, buf, (png_size_t)3);
-   }
-
-#endif
-   png_write_chunk_end(png_ptr);
-   png_ptr->mode |= PNG_HAVE_PLTE;
-}
-
-/* This is similar to png_text_compress, above, except that it does not require
- * all of the data at once and, instead of buffering the compressed result,
- * writes it as IDAT chunks.  Unlike png_text_compress it *can* png_error out
- * because it calls the write interface.  As a result it does its own error
- * reporting and does not return an error code.  In the event of error it will
- * just call png_error.  The input data length may exceed 32-bits.  The 'flush'
- * parameter is exactly the same as that to deflate, with the following
- * meanings:
- *
- * Z_NO_FLUSH: normal incremental output of compressed data
- * Z_SYNC_FLUSH: do a SYNC_FLUSH, used by png_write_flush
- * Z_FINISH: this is the end of the input, do a Z_FINISH and clean up
- *
- * The routine manages the acquire and release of the png_ptr->zstream by
- * checking and (at the end) clearing png_ptr->zowner; it does some sanity
- * checks on the 'mode' flags while doing this.
- */
-void /* PRIVATE */
-png_compress_IDAT(png_structrp png_ptr, png_const_bytep input,
-   png_alloc_size_t input_len, int flush)
-{
-   if (png_ptr->zowner != png_IDAT)
-   {
-      /* First time.   Ensure we have a temporary buffer for compression and
-       * trim the buffer list if it has more than one entry to free memory.
-       * If 'WRITE_COMPRESSED_TEXT' is not set the list will never have been
-       * created at this point, but the check here is quick and safe.
-       */
-      if (png_ptr->zbuffer_list == NULL)
-      {
-         png_ptr->zbuffer_list = png_voidcast(png_compression_bufferp,
-            png_malloc(png_ptr, PNG_COMPRESSION_BUFFER_SIZE(png_ptr)));
-         png_ptr->zbuffer_list->next = NULL;
-      }
-
-      else
-         png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list->next);
-
-      /* It is a terminal error if we can't claim the zstream. */
-      if (png_deflate_claim(png_ptr, png_IDAT, png_image_size(png_ptr)) != Z_OK)
-         png_error(png_ptr, png_ptr->zstream.msg);
-
-      /* The output state is maintained in png_ptr->zstream, so it must be
-       * initialized here after the claim.
-       */
-      png_ptr->zstream.next_out = png_ptr->zbuffer_list->output;
-      png_ptr->zstream.avail_out = png_ptr->zbuffer_size;
-   }
-
-   /* Now loop reading and writing until all the input is consumed or an error
-    * terminates the operation.  The _out values are maintained across calls to
-    * this function, but the input must be reset each time.
-    */
-   png_ptr->zstream.next_in = PNGZ_INPUT_CAST(input);
-   png_ptr->zstream.avail_in = 0; /* set below */
-   for (;;)
-   {
-      int ret;
-
-      /* INPUT: from the row data */
-      uInt avail = ZLIB_IO_MAX;
-
-      if (avail > input_len)
-         avail = (uInt)input_len; /* safe because of the check */
-
-      png_ptr->zstream.avail_in = avail;
-      input_len -= avail;
-
-      ret = deflate(&png_ptr->zstream, input_len > 0 ? Z_NO_FLUSH : flush);
-
-      /* Include as-yet unconsumed input */
-      input_len += png_ptr->zstream.avail_in;
-      png_ptr->zstream.avail_in = 0;
-
-      /* OUTPUT: write complete IDAT chunks when avail_out drops to zero. Note
-       * that these two zstream fields are preserved across the calls, therefore
-       * there is no need to set these up on entry to the loop.
-       */
-      if (png_ptr->zstream.avail_out == 0)
-      {
-         png_bytep data = png_ptr->zbuffer_list->output;
-         uInt size = png_ptr->zbuffer_size;
-
-         /* Write an IDAT containing the data then reset the buffer.  The
-          * first IDAT may need deflate header optimization.
-          */
-#ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-            if ((png_ptr->mode & PNG_HAVE_IDAT) == 0 &&
-                png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE)
-               optimize_cmf(data, png_image_size(png_ptr));
-#endif
-
-         png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-         png_ptr->mode |= PNG_HAVE_IDAT;
-
-         png_ptr->zstream.next_out = data;
-         png_ptr->zstream.avail_out = size;
-
-         /* For SYNC_FLUSH or FINISH it is essential to keep calling zlib with
-          * the same flush parameter until it has finished output, for NO_FLUSH
-          * it doesn't matter.
-          */
-         if (ret == Z_OK && flush != Z_NO_FLUSH)
-            continue;
-      }
-
-      /* The order of these checks doesn't matter much; it just affects which
-       * possible error might be detected if multiple things go wrong at once.
-       */
-      if (ret == Z_OK) /* most likely return code! */
-      {
-         /* If all the input has been consumed then just return.  If Z_FINISH
-          * was used as the flush parameter something has gone wrong if we get
-          * here.
-          */
-         if (input_len == 0)
-         {
-            if (flush == Z_FINISH)
-               png_error(png_ptr, "Z_OK on Z_FINISH with output space");
-
-            return;
-         }
-      }
-
-      else if (ret == Z_STREAM_END && flush == Z_FINISH)
-      {
-         /* This is the end of the IDAT data; any pending output must be
-          * flushed.  For small PNG files we may still be at the beginning.
-          */
-         png_bytep data = png_ptr->zbuffer_list->output;
-         uInt size = png_ptr->zbuffer_size - png_ptr->zstream.avail_out;
-
-#ifdef PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
-         if ((png_ptr->mode & PNG_HAVE_IDAT) == 0 &&
-             png_ptr->compression_type == PNG_COMPRESSION_TYPE_BASE)
-            optimize_cmf(data, png_image_size(png_ptr));
-#endif
-
-         png_write_complete_chunk(png_ptr, png_IDAT, data, size);
-         png_ptr->zstream.avail_out = 0;
-         png_ptr->zstream.next_out = NULL;
-         png_ptr->mode |= PNG_HAVE_IDAT | PNG_AFTER_IDAT;
-
-         png_ptr->zowner = 0; /* Release the stream */
-         return;
-      }
-
-      else
-      {
-         /* This is an error condition. */
-         png_zstream_error(png_ptr, ret);
-         png_error(png_ptr, png_ptr->zstream.msg);
-      }
-   }
-}
-
-/* Write an IEND chunk */
-void /* PRIVATE */
-png_write_IEND(png_structrp png_ptr)
-{
-   png_debug(1, "in png_write_IEND");
-
-   png_write_complete_chunk(png_ptr, png_IEND, NULL, (png_size_t)0);
-   png_ptr->mode |= PNG_HAVE_IEND;
-}
-
-#ifdef PNG_WRITE_gAMA_SUPPORTED
-/* Write a gAMA chunk */
-void /* PRIVATE */
-png_write_gAMA_fixed(png_structrp png_ptr, png_fixed_point file_gamma)
-{
-   png_byte buf[4];
-
-   png_debug(1, "in png_write_gAMA");
-
-   /* file_gamma is saved in 1/100,000ths */
-   png_save_uint_32(buf, (png_uint_32)file_gamma);
-   png_write_complete_chunk(png_ptr, png_gAMA, buf, (png_size_t)4);
-}
-#endif
-
-#ifdef PNG_WRITE_sRGB_SUPPORTED
-/* Write a sRGB chunk */
-void /* PRIVATE */
-png_write_sRGB(png_structrp png_ptr, int srgb_intent)
-{
-   png_byte buf[1];
-
-   png_debug(1, "in png_write_sRGB");
-
-   if (srgb_intent >= PNG_sRGB_INTENT_LAST)
-      png_warning(png_ptr,
-          "Invalid sRGB rendering intent specified");
-
-   buf[0]=(png_byte)srgb_intent;
-   png_write_complete_chunk(png_ptr, png_sRGB, buf, (png_size_t)1);
-}
-#endif
-
-#ifdef PNG_WRITE_iCCP_SUPPORTED
-/* Write an iCCP chunk */
-void /* PRIVATE */
-png_write_iCCP(png_structrp png_ptr, png_const_charp name,
-    png_const_bytep profile)
-{
-   png_uint_32 name_len;
-   png_uint_32 profile_len;
-   png_byte new_name[81]; /* 1 byte for the compression byte */
-   compression_state comp;
-   png_uint_32 temp;
-
-   png_debug(1, "in png_write_iCCP");
-
-   /* These are all internal problems: the profile should have been checked
-    * before when it was stored.
-    */
-   if (profile == NULL)
-      png_error(png_ptr, "No profile for iCCP chunk"); /* internal error */
-
-   profile_len = png_get_uint_32(profile);
-
-   if (profile_len < 132)
-      png_error(png_ptr, "ICC profile too short");
-
-   temp = (png_uint_32) (*(profile+8));
-   if (temp > 3 && (profile_len & 0x03))
-      png_error(png_ptr, "ICC profile length invalid (not a multiple of 4)");
-
-   {
-      png_uint_32 embedded_profile_len = png_get_uint_32(profile);
-
-      if (profile_len != embedded_profile_len)
-         png_error(png_ptr, "Profile length does not match profile");
-   }
-
-   name_len = png_check_keyword(png_ptr, name, new_name);
-
-   if (name_len == 0)
-      png_error(png_ptr, "iCCP: invalid keyword");
-
-   new_name[++name_len] = PNG_COMPRESSION_TYPE_BASE;
-
-   /* Make sure we include the NULL after the name and the compression type */
-   ++name_len;
-
-   png_text_compress_init(&comp, profile, profile_len);
-
-   /* Allow for keyword terminator and compression byte */
-   if (png_text_compress(png_ptr, png_iCCP, &comp, name_len) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   png_write_chunk_header(png_ptr, png_iCCP, name_len + comp.output_len);
-
-   png_write_chunk_data(png_ptr, new_name, name_len);
-
-   png_write_compressed_data_out(png_ptr, &comp);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sPLT_SUPPORTED
-/* Write a sPLT chunk */
-void /* PRIVATE */
-png_write_sPLT(png_structrp png_ptr, png_const_sPLT_tp spalette)
-{
-   png_uint_32 name_len;
-   png_byte new_name[80];
-   png_byte entrybuf[10];
-   png_size_t entry_size = (spalette->depth == 8 ? 6 : 10);
-   png_size_t palette_size = entry_size * spalette->nentries;
-   png_sPLT_entryp ep;
-#ifndef PNG_POINTER_INDEXING_SUPPORTED
-   int i;
-#endif
-
-   png_debug(1, "in png_write_sPLT");
-
-   name_len = png_check_keyword(png_ptr, spalette->name, new_name);
-
-   if (name_len == 0)
-      png_error(png_ptr, "sPLT: invalid keyword");
-
-   /* Make sure we include the NULL after the name */
-   png_write_chunk_header(png_ptr, png_sPLT,
-       (png_uint_32)(name_len + 2 + palette_size));
-
-   png_write_chunk_data(png_ptr, (png_bytep)new_name,
-       (png_size_t)(name_len + 1));
-
-   png_write_chunk_data(png_ptr, &spalette->depth, (png_size_t)1);
-
-   /* Loop through each palette entry, writing appropriately */
-#ifdef PNG_POINTER_INDEXING_SUPPORTED
-   for (ep = spalette->entries; ep<spalette->entries + spalette->nentries; ep++)
-   {
-      if (spalette->depth == 8)
-      {
-         entrybuf[0] = (png_byte)ep->red;
-         entrybuf[1] = (png_byte)ep->green;
-         entrybuf[2] = (png_byte)ep->blue;
-         entrybuf[3] = (png_byte)ep->alpha;
-         png_save_uint_16(entrybuf + 4, ep->frequency);
-      }
-
-      else
-      {
-         png_save_uint_16(entrybuf + 0, ep->red);
-         png_save_uint_16(entrybuf + 2, ep->green);
-         png_save_uint_16(entrybuf + 4, ep->blue);
-         png_save_uint_16(entrybuf + 6, ep->alpha);
-         png_save_uint_16(entrybuf + 8, ep->frequency);
-      }
-
-      png_write_chunk_data(png_ptr, entrybuf, entry_size);
-   }
-#else
-   ep=spalette->entries;
-   for (i = 0; i>spalette->nentries; i++)
-   {
-      if (spalette->depth == 8)
-      {
-         entrybuf[0] = (png_byte)ep[i].red;
-         entrybuf[1] = (png_byte)ep[i].green;
-         entrybuf[2] = (png_byte)ep[i].blue;
-         entrybuf[3] = (png_byte)ep[i].alpha;
-         png_save_uint_16(entrybuf + 4, ep[i].frequency);
-      }
-
-      else
-      {
-         png_save_uint_16(entrybuf + 0, ep[i].red);
-         png_save_uint_16(entrybuf + 2, ep[i].green);
-         png_save_uint_16(entrybuf + 4, ep[i].blue);
-         png_save_uint_16(entrybuf + 6, ep[i].alpha);
-         png_save_uint_16(entrybuf + 8, ep[i].frequency);
-      }
-
-      png_write_chunk_data(png_ptr, entrybuf, entry_size);
-   }
-#endif
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sBIT_SUPPORTED
-/* Write the sBIT chunk */
-void /* PRIVATE */
-png_write_sBIT(png_structrp png_ptr, png_const_color_8p sbit, int color_type)
-{
-   png_byte buf[4];
-   png_size_t size;
-
-   png_debug(1, "in png_write_sBIT");
-
-   /* Make sure we don't depend upon the order of PNG_COLOR_8 */
-   if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      png_byte maxbits;
-
-      maxbits = (png_byte)(color_type==PNG_COLOR_TYPE_PALETTE ? 8 :
-          png_ptr->usr_bit_depth);
-
-      if (sbit->red == 0 || sbit->red > maxbits ||
-          sbit->green == 0 || sbit->green > maxbits ||
-          sbit->blue == 0 || sbit->blue > maxbits)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[0] = sbit->red;
-      buf[1] = sbit->green;
-      buf[2] = sbit->blue;
-      size = 3;
-   }
-
-   else
-   {
-      if (sbit->gray == 0 || sbit->gray > png_ptr->usr_bit_depth)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[0] = sbit->gray;
-      size = 1;
-   }
-
-   if ((color_type & PNG_COLOR_MASK_ALPHA) != 0)
-   {
-      if (sbit->alpha == 0 || sbit->alpha > png_ptr->usr_bit_depth)
-      {
-         png_warning(png_ptr, "Invalid sBIT depth specified");
-         return;
-      }
-
-      buf[size++] = sbit->alpha;
-   }
-
-   png_write_complete_chunk(png_ptr, png_sBIT, buf, size);
-}
-#endif
-
-#ifdef PNG_WRITE_cHRM_SUPPORTED
-/* Write the cHRM chunk */
-void /* PRIVATE */
-png_write_cHRM_fixed(png_structrp png_ptr, const png_xy *xy)
-{
-   png_byte buf[32];
-
-   png_debug(1, "in png_write_cHRM");
-
-   /* Each value is saved in 1/100,000ths */
-   png_save_int_32(buf,      xy->whitex);
-   png_save_int_32(buf +  4, xy->whitey);
-
-   png_save_int_32(buf +  8, xy->redx);
-   png_save_int_32(buf + 12, xy->redy);
-
-   png_save_int_32(buf + 16, xy->greenx);
-   png_save_int_32(buf + 20, xy->greeny);
-
-   png_save_int_32(buf + 24, xy->bluex);
-   png_save_int_32(buf + 28, xy->bluey);
-
-   png_write_complete_chunk(png_ptr, png_cHRM, buf, 32);
-}
-#endif
-
-#ifdef PNG_WRITE_tRNS_SUPPORTED
-/* Write the tRNS chunk */
-void /* PRIVATE */
-png_write_tRNS(png_structrp png_ptr, png_const_bytep trans_alpha,
-    png_const_color_16p tran, int num_trans, int color_type)
-{
-   png_byte buf[6];
-
-   png_debug(1, "in png_write_tRNS");
-
-   if (color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (num_trans <= 0 || num_trans > (int)png_ptr->num_palette)
-      {
-         png_app_warning(png_ptr,
-             "Invalid number of transparent colors specified");
-         return;
-      }
-
-      /* Write the chunk out as it is */
-      png_write_complete_chunk(png_ptr, png_tRNS, trans_alpha,
-         (png_size_t)num_trans);
-   }
-
-   else if (color_type == PNG_COLOR_TYPE_GRAY)
-   {
-      /* One 16 bit value */
-      if (tran->gray >= (1 << png_ptr->bit_depth))
-      {
-         png_app_warning(png_ptr,
-             "Ignoring attempt to write tRNS chunk out-of-range for bit_depth");
-
-         return;
-      }
-
-      png_save_uint_16(buf, tran->gray);
-      png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)2);
-   }
-
-   else if (color_type == PNG_COLOR_TYPE_RGB)
-   {
-      /* Three 16 bit values */
-      png_save_uint_16(buf, tran->red);
-      png_save_uint_16(buf + 2, tran->green);
-      png_save_uint_16(buf + 4, tran->blue);
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      if (png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]) != 0)
-#else
-      if ((buf[0] | buf[2] | buf[4]) != 0)
-#endif
-      {
-         png_app_warning(png_ptr,
-           "Ignoring attempt to write 16-bit tRNS chunk when bit_depth is 8");
-         return;
-      }
-
-      png_write_complete_chunk(png_ptr, png_tRNS, buf, (png_size_t)6);
-   }
-
-   else
-   {
-      png_app_warning(png_ptr, "Can't write tRNS with an alpha channel");
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_bKGD_SUPPORTED
-/* Write the background chunk */
-void /* PRIVATE */
-png_write_bKGD(png_structrp png_ptr, png_const_color_16p back, int color_type)
-{
-   png_byte buf[6];
-
-   png_debug(1, "in png_write_bKGD");
-
-   if (color_type == PNG_COLOR_TYPE_PALETTE)
-   {
-      if (
-#ifdef PNG_MNG_FEATURES_SUPPORTED
-          (png_ptr->num_palette != 0 ||
-          (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0) &&
-#endif
-         back->index >= png_ptr->num_palette)
-      {
-         png_warning(png_ptr, "Invalid background palette index");
-         return;
-      }
-
-      buf[0] = back->index;
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)1);
-   }
-
-   else if ((color_type & PNG_COLOR_MASK_COLOR) != 0)
-   {
-      png_save_uint_16(buf, back->red);
-      png_save_uint_16(buf + 2, back->green);
-      png_save_uint_16(buf + 4, back->blue);
-#ifdef PNG_WRITE_16BIT_SUPPORTED
-      if (png_ptr->bit_depth == 8 && (buf[0] | buf[2] | buf[4]) != 0)
-#else
-      if ((buf[0] | buf[2] | buf[4]) != 0)
-#endif
-      {
-         png_warning(png_ptr,
-             "Ignoring attempt to write 16-bit bKGD chunk when bit_depth is 8");
-
-         return;
-      }
-
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)6);
-   }
-
-   else
-   {
-      if (back->gray >= (1 << png_ptr->bit_depth))
-      {
-         png_warning(png_ptr,
-             "Ignoring attempt to write bKGD chunk out-of-range for bit_depth");
-
-         return;
-      }
-
-      png_save_uint_16(buf, back->gray);
-      png_write_complete_chunk(png_ptr, png_bKGD, buf, (png_size_t)2);
-   }
-}
-#endif
-
-#ifdef PNG_WRITE_hIST_SUPPORTED
-/* Write the histogram */
-void /* PRIVATE */
-png_write_hIST(png_structrp png_ptr, png_const_uint_16p hist, int num_hist)
-{
-   int i;
-   png_byte buf[3];
-
-   png_debug(1, "in png_write_hIST");
-
-   if (num_hist > (int)png_ptr->num_palette)
-   {
-      png_debug2(3, "num_hist = %d, num_palette = %d", num_hist,
-          png_ptr->num_palette);
-
-      png_warning(png_ptr, "Invalid number of histogram entries specified");
-      return;
-   }
-
-   png_write_chunk_header(png_ptr, png_hIST, (png_uint_32)(num_hist * 2));
-
-   for (i = 0; i < num_hist; i++)
-   {
-      png_save_uint_16(buf, hist[i]);
-      png_write_chunk_data(png_ptr, buf, (png_size_t)2);
-   }
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_tEXt_SUPPORTED
-/* Write a tEXt chunk */
-void /* PRIVATE */
-png_write_tEXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
-    png_size_t text_len)
-{
-   png_uint_32 key_len;
-   png_byte new_key[80];
-
-   png_debug(1, "in png_write_tEXt");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "tEXt: invalid keyword");
-
-   if (text == NULL || *text == '\0')
-      text_len = 0;
-
-   else
-      text_len = strlen(text);
-
-   if (text_len > PNG_UINT_31_MAX - (key_len+1))
-      png_error(png_ptr, "tEXt: text too long");
-
-   /* Make sure we include the 0 after the key */
-   png_write_chunk_header(png_ptr, png_tEXt,
-       (png_uint_32)/*checked above*/(key_len + text_len + 1));
-   /*
-    * We leave it to the application to meet PNG-1.0 requirements on the
-    * contents of the text.  PNG-1.0 through PNG-1.2 discourage the use of
-    * any non-Latin-1 characters except for NEWLINE.  ISO PNG will forbid them.
-    * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
-    */
-   png_write_chunk_data(png_ptr, new_key, key_len + 1);
-
-   if (text_len != 0)
-      png_write_chunk_data(png_ptr, (png_const_bytep)text, text_len);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_zTXt_SUPPORTED
-/* Write a compressed text chunk */
-void /* PRIVATE */
-png_write_zTXt(png_structrp png_ptr, png_const_charp key, png_const_charp text,
-    int compression)
-{
-   png_uint_32 key_len;
-   png_byte new_key[81];
-   compression_state comp;
-
-   png_debug(1, "in png_write_zTXt");
-
-   if (compression == PNG_TEXT_COMPRESSION_NONE)
-   {
-      png_write_tEXt(png_ptr, key, text, 0);
-      return;
-   }
-
-   if (compression != PNG_TEXT_COMPRESSION_zTXt)
-      png_error(png_ptr, "zTXt: invalid compression type");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "zTXt: invalid keyword");
-
-   /* Add the compression method and 1 for the keyword separator. */
-   new_key[++key_len] = PNG_COMPRESSION_TYPE_BASE;
-   ++key_len;
-
-   /* Compute the compressed data; do it now for the length */
-   png_text_compress_init(&comp, (png_const_bytep)text,
-      text == NULL ? 0 : strlen(text));
-
-   if (png_text_compress(png_ptr, png_zTXt, &comp, key_len) != Z_OK)
-      png_error(png_ptr, png_ptr->zstream.msg);
-
-   /* Write start of chunk */
-   png_write_chunk_header(png_ptr, png_zTXt, key_len + comp.output_len);
-
-   /* Write key */
-   png_write_chunk_data(png_ptr, new_key, key_len);
-
-   /* Write the compressed data */
-   png_write_compressed_data_out(png_ptr, &comp);
-
-   /* Close the chunk */
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_iTXt_SUPPORTED
-/* Write an iTXt chunk */
-void /* PRIVATE */
-png_write_iTXt(png_structrp png_ptr, int compression, png_const_charp key,
-    png_const_charp lang, png_const_charp lang_key, png_const_charp text)
-{
-   png_uint_32 key_len, prefix_len;
-   png_size_t lang_len, lang_key_len;
-   png_byte new_key[82];
-   compression_state comp;
-
-   png_debug(1, "in png_write_iTXt");
-
-   key_len = png_check_keyword(png_ptr, key, new_key);
-
-   if (key_len == 0)
-      png_error(png_ptr, "iTXt: invalid keyword");
-
-   /* Set the compression flag */
-   switch (compression)
-   {
-      case PNG_ITXT_COMPRESSION_NONE:
-      case PNG_TEXT_COMPRESSION_NONE:
-         compression = new_key[++key_len] = 0; /* no compression */
-         break;
-
-      case PNG_TEXT_COMPRESSION_zTXt:
-      case PNG_ITXT_COMPRESSION_zTXt:
-         compression = new_key[++key_len] = 1; /* compressed */
-         break;
-
-      default:
-         png_error(png_ptr, "iTXt: invalid compression");
-   }
-
-   new_key[++key_len] = PNG_COMPRESSION_TYPE_BASE;
-   ++key_len; /* for the keywod separator */
-
-   /* We leave it to the application to meet PNG-1.0 requirements on the
-    * contents of the text.  PNG-1.0 through PNG-1.2 discourage the use of
-    * any non-Latin-1 characters except for NEWLINE.  ISO PNG, however,
-    * specifies that the text is UTF-8 and this really doesn't require any
-    * checking.
-    *
-    * The NUL character is forbidden by PNG-1.0 through PNG-1.2 and ISO PNG.
-    *
-    * TODO: validate the language tag correctly (see the spec.)
-    */
-   if (lang == NULL) lang = ""; /* empty language is valid */
-   lang_len = strlen(lang)+1;
-   if (lang_key == NULL) lang_key = ""; /* may be empty */
-   lang_key_len = strlen(lang_key)+1;
-   if (text == NULL) text = ""; /* may be empty */
-
-   prefix_len = key_len;
-   if (lang_len > PNG_UINT_31_MAX-prefix_len)
-      prefix_len = PNG_UINT_31_MAX;
-   else
-      prefix_len = (png_uint_32)(prefix_len + lang_len);
-
-   if (lang_key_len > PNG_UINT_31_MAX-prefix_len)
-      prefix_len = PNG_UINT_31_MAX;
-   else
-      prefix_len = (png_uint_32)(prefix_len + lang_key_len);
-
-   png_text_compress_init(&comp, (png_const_bytep)text, strlen(text));
-
-   if (compression != 0)
-   {
-      if (png_text_compress(png_ptr, png_iTXt, &comp, prefix_len) != Z_OK)
-         png_error(png_ptr, png_ptr->zstream.msg);
-   }
-
-   else
-   {
-      if (comp.input_len > PNG_UINT_31_MAX-prefix_len)
-         png_error(png_ptr, "iTXt: uncompressed text too long");
-
-      /* So the string will fit in a chunk: */
-      comp.output_len = (png_uint_32)/*SAFE*/comp.input_len;
-   }
-
-   png_write_chunk_header(png_ptr, png_iTXt, comp.output_len + prefix_len);
-
-   png_write_chunk_data(png_ptr, new_key, key_len);
-
-   png_write_chunk_data(png_ptr, (png_const_bytep)lang, lang_len);
-
-   png_write_chunk_data(png_ptr, (png_const_bytep)lang_key, lang_key_len);
-
-   if (compression != 0)
-      png_write_compressed_data_out(png_ptr, &comp);
-
-   else
-      png_write_chunk_data(png_ptr, (png_const_bytep)text, comp.input_len);
-
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_oFFs_SUPPORTED
-/* Write the oFFs chunk */
-void /* PRIVATE */
-png_write_oFFs(png_structrp png_ptr, png_int_32 x_offset, png_int_32 y_offset,
-    int unit_type)
-{
-   png_byte buf[9];
-
-   png_debug(1, "in png_write_oFFs");
-
-   if (unit_type >= PNG_OFFSET_LAST)
-      png_warning(png_ptr, "Unrecognized unit type for oFFs chunk");
-
-   png_save_int_32(buf, x_offset);
-   png_save_int_32(buf + 4, y_offset);
-   buf[8] = (png_byte)unit_type;
-
-   png_write_complete_chunk(png_ptr, png_oFFs, buf, (png_size_t)9);
-}
-#endif
-#ifdef PNG_WRITE_pCAL_SUPPORTED
-/* Write the pCAL chunk (described in the PNG extensions document) */
-void /* PRIVATE */
-png_write_pCAL(png_structrp png_ptr, png_charp purpose, png_int_32 X0,
-    png_int_32 X1, int type, int nparams, png_const_charp units,
-    png_charpp params)
-{
-   png_uint_32 purpose_len;
-   png_size_t units_len, total_len;
-   png_size_tp params_len;
-   png_byte buf[10];
-   png_byte new_purpose[80];
-   int i;
-
-   png_debug1(1, "in png_write_pCAL (%d parameters)", nparams);
-
-   if (type >= PNG_EQUATION_LAST)
-      png_error(png_ptr, "Unrecognized equation type for pCAL chunk");
-
-   purpose_len = png_check_keyword(png_ptr, purpose, new_purpose);
-
-   if (purpose_len == 0)
-      png_error(png_ptr, "pCAL: invalid keyword");
-
-   ++purpose_len; /* terminator */
-
-   png_debug1(3, "pCAL purpose length = %d", (int)purpose_len);
-   units_len = strlen(units) + (nparams == 0 ? 0 : 1);
-   png_debug1(3, "pCAL units length = %d", (int)units_len);
-   total_len = purpose_len + units_len + 10;
-
-   params_len = (png_size_tp)png_malloc(png_ptr,
-       (png_alloc_size_t)(nparams * (sizeof (png_size_t))));
-
-   /* Find the length of each parameter, making sure we don't count the
-    * null terminator for the last parameter.
-    */
-   for (i = 0; i < nparams; i++)
-   {
-      params_len[i] = strlen(params[i]) + (i == nparams - 1 ? 0 : 1);
-      png_debug2(3, "pCAL parameter %d length = %lu", i,
-          (unsigned long)params_len[i]);
-      total_len += params_len[i];
-   }
-
-   png_debug1(3, "pCAL total length = %d", (int)total_len);
-   png_write_chunk_header(png_ptr, png_pCAL, (png_uint_32)total_len);
-   png_write_chunk_data(png_ptr, new_purpose, purpose_len);
-   png_save_int_32(buf, X0);
-   png_save_int_32(buf + 4, X1);
-   buf[8] = (png_byte)type;
-   buf[9] = (png_byte)nparams;
-   png_write_chunk_data(png_ptr, buf, (png_size_t)10);
-   png_write_chunk_data(png_ptr, (png_const_bytep)units, (png_size_t)units_len);
-
-   for (i = 0; i < nparams; i++)
-   {
-      png_write_chunk_data(png_ptr, (png_const_bytep)params[i], params_len[i]);
-   }
-
-   png_free(png_ptr, params_len);
-   png_write_chunk_end(png_ptr);
-}
-#endif
-
-#ifdef PNG_WRITE_sCAL_SUPPORTED
-/* Write the sCAL chunk */
-void /* PRIVATE */
-png_write_sCAL_s(png_structrp png_ptr, int unit, png_const_charp width,
-    png_const_charp height)
-{
-   png_byte buf[64];
-   png_size_t wlen, hlen, total_len;
-
-   png_debug(1, "in png_write_sCAL_s");
-
-   wlen = strlen(width);
-   hlen = strlen(height);
-   total_len = wlen + hlen + 2;
-
-   if (total_len > 64)
-   {
-      png_warning(png_ptr, "Can't write sCAL (buffer too small)");
-      return;
-   }
-
-   buf[0] = (png_byte)unit;
-   memcpy(buf + 1, width, wlen + 1);      /* Append the '\0' here */
-   memcpy(buf + wlen + 2, height, hlen);  /* Do NOT append the '\0' here */
-
-   png_debug1(3, "sCAL total length = %u", (unsigned int)total_len);
-   png_write_complete_chunk(png_ptr, png_sCAL, buf, total_len);
-}
-#endif
-
-#ifdef PNG_WRITE_pHYs_SUPPORTED
-/* Write the pHYs chunk */
-void /* PRIVATE */
-png_write_pHYs(png_structrp png_ptr, png_uint_32 x_pixels_per_unit,
-    png_uint_32 y_pixels_per_unit,
-    int unit_type)
-{
-   png_byte buf[9];
-
-   png_debug(1, "in png_write_pHYs");
-
-   if (unit_type >= PNG_RESOLUTION_LAST)
-      png_warning(png_ptr, "Unrecognized unit type for pHYs chunk");
-
-   png_save_uint_32(buf, x_pixels_per_unit);
-   png_save_uint_32(buf + 4, y_pixels_per_unit);
-   buf[8] = (png_byte)unit_type;
-
-   png_write_complete_chunk(png_ptr, png_pHYs, buf, (png_size_t)9);
-}
-#endif
-
-#ifdef PNG_WRITE_tIME_SUPPORTED
-/* Write the tIME chunk.  Use either png_convert_from_struct_tm()
- * or png_convert_from_time_t(), or fill in the structure yourself.
- */
-void /* PRIVATE */
-png_write_tIME(png_structrp png_ptr, png_const_timep mod_time)
-{
-   png_byte buf[7];
-
-   png_debug(1, "in png_write_tIME");
-
-   if (mod_time->month  > 12 || mod_time->month  < 1 ||
-       mod_time->day    > 31 || mod_time->day    < 1 ||
-       mod_time->hour   > 23 || mod_time->second > 60)
-   {
-      png_warning(png_ptr, "Invalid time specified for tIME chunk");
-      return;
-   }
-
-   png_save_uint_16(buf, mod_time->year);
-   buf[2] = mod_time->month;
-   buf[3] = mod_time->day;
-   buf[4] = mod_time->hour;
-   buf[5] = mod_time->minute;
-   buf[6] = mod_time->second;
-
-   png_write_complete_chunk(png_ptr, png_tIME, buf, (png_size_t)7);
-}
-#endif
-
-/* Initializes the row writing capability of libpng */
-void /* PRIVATE */
-png_write_start_row(png_structrp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-
-   png_alloc_size_t buf_size;
-   int usr_pixel_depth;
-
-   png_debug(1, "in png_write_start_row");
-
-   usr_pixel_depth = png_ptr->usr_channels * png_ptr->usr_bit_depth;
-   buf_size = PNG_ROWBYTES(usr_pixel_depth, png_ptr->width) + 1;
-
-   /* 1.5.6: added to allow checking in the row write code. */
-   png_ptr->transformed_pixel_depth = png_ptr->pixel_depth;
-   png_ptr->maximum_pixel_depth = (png_byte)usr_pixel_depth;
-
-   /* Set up row buffer */
-   png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, buf_size);
-
-   png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   /* Set up filtering buffer, if using this filter */
-   if (png_ptr->do_filter & PNG_FILTER_SUB)
-   {
-      png_ptr->sub_row = (png_bytep)png_malloc(png_ptr, png_ptr->rowbytes + 1);
-
-      png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
-   }
-
-   /* We only need to keep the previous row if we are using one of these. */
-   if ((png_ptr->do_filter &
-      (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH)) != 0)
-   {
-      /* Set up previous row buffer */
-      png_ptr->prev_row = (png_bytep)png_calloc(png_ptr, buf_size);
-
-      if ((png_ptr->do_filter & PNG_FILTER_UP) != 0)
-      {
-         png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
-            png_ptr->rowbytes + 1);
-
-         png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
-      }
-
-      if ((png_ptr->do_filter & PNG_FILTER_AVG) != 0)
-      {
-         png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
-             png_ptr->rowbytes + 1);
-
-         png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
-      }
-
-      if ((png_ptr->do_filter & PNG_FILTER_PAETH) != 0)
-      {
-         png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
-             png_ptr->rowbytes + 1);
-
-         png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
-      }
-   }
-#endif /* WRITE_FILTER */
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced, we need to set up width and height of pass */
-   if (png_ptr->interlaced != 0)
-   {
-      if ((png_ptr->transformations & PNG_INTERLACE) == 0)
-      {
-         png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
-             png_pass_ystart[0]) / png_pass_yinc[0];
-
-         png_ptr->usr_width = (png_ptr->width + png_pass_inc[0] - 1 -
-             png_pass_start[0]) / png_pass_inc[0];
-      }
-
-      else
-      {
-         png_ptr->num_rows = png_ptr->height;
-         png_ptr->usr_width = png_ptr->width;
-      }
-   }
-
-   else
-#endif
-   {
-      png_ptr->num_rows = png_ptr->height;
-      png_ptr->usr_width = png_ptr->width;
-   }
-}
-
-/* Internal use only.  Called when finished processing a row of data. */
-void /* PRIVATE */
-png_write_finish_row(png_structrp png_ptr)
-{
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   /* Start of interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_ystart[7] = {0, 0, 4, 0, 2, 0, 1};
-
-   /* Offset to next interlace block in the y direction */
-   static PNG_CONST png_byte png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
-#endif
-
-   png_debug(1, "in png_write_finish_row");
-
-   /* Next row */
-   png_ptr->row_number++;
-
-   /* See if we are done */
-   if (png_ptr->row_number < png_ptr->num_rows)
-      return;
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-   /* If interlaced, go to next pass */
-   if (png_ptr->interlaced != 0)
-   {
-      png_ptr->row_number = 0;
-      if ((png_ptr->transformations & PNG_INTERLACE) != 0)
-      {
-         png_ptr->pass++;
-      }
-
-      else
-      {
-         /* Loop until we find a non-zero width or height pass */
-         do
-         {
-            png_ptr->pass++;
-
-            if (png_ptr->pass >= 7)
-               break;
-
-            png_ptr->usr_width = (png_ptr->width +
-                png_pass_inc[png_ptr->pass] - 1 -
-                png_pass_start[png_ptr->pass]) /
-                png_pass_inc[png_ptr->pass];
-
-            png_ptr->num_rows = (png_ptr->height +
-                png_pass_yinc[png_ptr->pass] - 1 -
-                png_pass_ystart[png_ptr->pass]) /
-                png_pass_yinc[png_ptr->pass];
-
-            if ((png_ptr->transformations & PNG_INTERLACE) != 0)
-               break;
-
-         } while (png_ptr->usr_width == 0 || png_ptr->num_rows == 0);
-
-      }
-
-      /* Reset the row above the image for the next pass */
-      if (png_ptr->pass < 7)
-      {
-         if (png_ptr->prev_row != NULL)
-            memset(png_ptr->prev_row, 0,
-                (png_size_t)(PNG_ROWBYTES(png_ptr->usr_channels*
-                png_ptr->usr_bit_depth, png_ptr->width)) + 1);
-
-         return;
-      }
-   }
-#endif
-
-   /* If we get here, we've just written the last row, so we need
-      to flush the compressor */
-   png_compress_IDAT(png_ptr, NULL, 0, Z_FINISH);
-}
-
-#ifdef PNG_WRITE_INTERLACING_SUPPORTED
-/* Pick out the correct pixels for the interlace pass.
- * The basic idea here is to go through the row with a source
- * pointer and a destination pointer (sp and dp), and copy the
- * correct pixels for the pass.  As the row gets compacted,
- * sp will always be >= dp, so we should never overwrite anything.
- * See the default: case for the easiest code to understand.
- */
-void /* PRIVATE */
-png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
-{
-   /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
-
-   /* Start of interlace block */
-   static PNG_CONST png_byte png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
-
-   /* Offset to next interlace block */
-   static PNG_CONST png_byte  png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
-
-   png_debug(1, "in png_do_write_interlace");
-
-   /* We don't have to do anything on the last pass (6) */
-   if (pass < 6)
-   {
-      /* Each pixel depth is handled separately */
-      switch (row_info->pixel_depth)
-      {
-         case 1:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            d = 0;
-            shift = 7;
-
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 3);
-               value = (int)(*sp >> (7 - (int)(i & 0x07))) & 0x01;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 7;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift--;
-
-            }
-            if (shift != 7)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         case 2:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            shift = 6;
-            d = 0;
-
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 2);
-               value = (*sp >> ((3 - (int)(i & 0x03)) << 1)) & 0x03;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 6;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift -= 2;
-            }
-            if (shift != 6)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         case 4:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            int shift;
-            int d;
-            int value;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-
-            dp = row;
-            shift = 4;
-            d = 0;
-            for (i = png_pass_start[pass]; i < row_width;
-                i += png_pass_inc[pass])
-            {
-               sp = row + (png_size_t)(i >> 1);
-               value = (*sp >> ((1 - (int)(i & 0x01)) << 2)) & 0x0f;
-               d |= (value << shift);
-
-               if (shift == 0)
-               {
-                  shift = 4;
-                  *dp++ = (png_byte)d;
-                  d = 0;
-               }
-
-               else
-                  shift -= 4;
-            }
-            if (shift != 4)
-               *dp = (png_byte)d;
-
-            break;
-         }
-
-         default:
-         {
-            png_bytep sp;
-            png_bytep dp;
-            png_uint_32 i;
-            png_uint_32 row_width = row_info->width;
-            png_size_t pixel_bytes;
-
-            /* Start at the beginning */
-            dp = row;
-
-            /* Find out how many bytes each pixel takes up */
-            pixel_bytes = (row_info->pixel_depth >> 3);
-
-            /* Loop through the row, only looking at the pixels that matter */
-            for (i = png_pass_start[pass]; i < row_width;
-               i += png_pass_inc[pass])
-            {
-               /* Find out where the original pixel is */
-               sp = row + (png_size_t)i * pixel_bytes;
-
-               /* Move the pixel */
-               if (dp != sp)
-                  memcpy(dp, sp, pixel_bytes);
-
-               /* Next pixel */
-               dp += pixel_bytes;
-            }
-            break;
-         }
-      }
-      /* Set new row width */
-      row_info->width = (row_info->width +
-          png_pass_inc[pass] - 1 -
-          png_pass_start[pass]) /
-          png_pass_inc[pass];
-
-      row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
-          row_info->width);
-   }
-}
-#endif
-
-/* This filters the row, chooses which filter to use, if it has not already
- * been specified by the application, and then writes the row out with the
- * chosen filter.
- */
-static void
-png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
-   png_size_t row_bytes);
-
-#define PNG_MAXSUM (((png_uint_32)(-1)) >> 1)
-#define PNG_HISHIFT 10
-#define PNG_LOMASK ((png_uint_32)0xffffL)
-#define PNG_HIMASK ((png_uint_32)(~PNG_LOMASK >> PNG_HISHIFT))
-void /* PRIVATE */
-png_write_find_filter(png_structrp png_ptr, png_row_infop row_info)
-{
-   png_bytep best_row;
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   png_bytep prev_row, row_buf;
-   png_uint_32 mins, bpp;
-   png_byte filter_to_do = png_ptr->do_filter;
-   png_size_t row_bytes = row_info->rowbytes;
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   int num_p_filters = png_ptr->num_prev_filters;
-#endif
-
-   png_debug(1, "in png_write_find_filter");
-
-#ifndef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-  if (png_ptr->row_number == 0 && filter_to_do == PNG_ALL_FILTERS)
-  {
-     /* These will never be selected so we need not test them. */
-     filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH);
-  }
-#endif
-
-   /* Find out how many bytes offset each pixel is */
-   bpp = (row_info->pixel_depth + 7) >> 3;
-
-   prev_row = png_ptr->prev_row;
-#endif
-   best_row = png_ptr->row_buf;
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-   row_buf = best_row;
-   mins = PNG_MAXSUM;
-
-   /* The prediction method we use is to find which method provides the
-    * smallest value when summing the absolute values of the distances
-    * from zero, using anything >= 128 as negative numbers.  This is known
-    * as the "minimum sum of absolute differences" heuristic.  Other
-    * heuristics are the "weighted minimum sum of absolute differences"
-    * (experimental and can in theory improve compression), and the "zlib
-    * predictive" method (not implemented yet), which does test compressions
-    * of lines using different filter methods, and then chooses the
-    * (series of) filter(s) that give minimum compressed data size (VERY
-    * computationally expensive).
-    *
-    * GRR 980525:  consider also
-    *
-    *   (1) minimum sum of absolute differences from running average (i.e.,
-    *       keep running sum of non-absolute differences & count of bytes)
-    *       [track dispersion, too?  restart average if dispersion too large?]
-    *
-    *  (1b) minimum sum of absolute differences from sliding average, probably
-    *       with window size <= deflate window (usually 32K)
-    *
-    *   (2) minimum sum of squared differences from zero or running average
-    *       (i.e., ~ root-mean-square approach)
-    */
-
-
-   /* We don't need to test the 'no filter' case if this is the only filter
-    * that has been chosen, as it doesn't actually do anything to the data.
-    */
-   if ((filter_to_do & PNG_FILTER_NONE) != 0 && filter_to_do != PNG_FILTER_NONE)
-   {
-      png_bytep rp;
-      png_uint_32 sum = 0;
-      png_size_t i;
-      int v;
-
-      for (i = 0, rp = row_buf + 1; i < row_bytes; i++, rp++)
-      {
-         v = *rp;
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         png_uint_32 sumhi, sumlo;
-         int j;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */
-
-         /* Reduce the sum if we match any of the previous rows */
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         /* Factor in the cost of this filter (this is here for completeness,
-          * but it makes no sense to have a "cost" for the NONE filter, as
-          * it has the minimum possible computational cost - none).
-          */
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-      mins = sum;
-   }
-
-   /* Sub filter */
-   if (filter_to_do == PNG_FILTER_SUB)
-   /* It's the only filter so no testing is needed */
-   {
-      png_bytep rp, lp, dp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
-           i++, rp++, dp++)
-      {
-         *dp = *rp;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes;
-         i++, rp++, lp++, dp++)
-      {
-         *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
-      }
-
-      best_row = png_ptr->sub_row;
-   }
-
-   else if ((filter_to_do & PNG_FILTER_SUB) != 0)
-   {
-      png_bytep rp, dp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      /* We temporarily increase the "minimum sum" by the factor we
-       * would reduce the sum of this filter, so that we can do the
-       * early exit comparison without scaling the sum each time.
-       */
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
-           i++, rp++, dp++)
-      {
-         v = *dp = *rp;
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes;
-         i++, rp++, lp++, dp++)
-      {
-         v = *dp = (png_byte)(((int)*rp - (int)*lp) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
-            {
-               sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->sub_row;
-      }
-   }
-
-   /* Up filter */
-   if (filter_to_do == PNG_FILTER_UP)
-   {
-      png_bytep rp, dp, pp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
-          pp = prev_row + 1; i < row_bytes;
-          i++, rp++, pp++, dp++)
-      {
-         *dp = (png_byte)(((int)*rp - (int)*pp) & 0xff);
-      }
-
-      best_row = png_ptr->up_row;
-   }
-
-   else if ((filter_to_do & PNG_FILTER_UP) != 0)
-   {
-      png_bytep rp, dp, pp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
-          pp = prev_row + 1; i < row_bytes; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->up_row;
-      }
-   }
-
-   /* Avg filter */
-   if (filter_to_do == PNG_FILTER_AVG)
-   {
-      png_bytep rp, dp, pp, lp;
-      png_uint_32 i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
-           pp = prev_row + 1; i < bpp; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
-      }
-
-      for (lp = row_buf + 1; i < row_bytes; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2))
-                 & 0xff);
-      }
-      best_row = png_ptr->avg_row;
-   }
-
-   else if ((filter_to_do & PNG_FILTER_AVG) != 0)
-   {
-      png_bytep rp, dp, pp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
-           pp = prev_row + 1; i < bpp; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - ((int)*pp++ / 2)) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1; i < row_bytes; i++)
-      {
-         v = *dp++ =
-             (png_byte)(((int)*rp++ - (((int)*pp++ + (int)*lp++) / 2)) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         mins = sum;
-         best_row = png_ptr->avg_row;
-      }
-   }
-
-   /* Paeth filter */
-   if ((filter_to_do == PNG_FILTER_PAETH) != 0)
-   {
-      png_bytep rp, dp, pp, cp, lp;
-      png_size_t i;
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
-          pp = prev_row + 1; i < bpp; i++)
-      {
-         *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-      }
-
-      for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
-      {
-         int a, b, c, pa, pb, pc, p;
-
-         b = *pp++;
-         c = *cp++;
-         a = *lp++;
-
-         p = b - c;
-         pc = a - c;
-
-#ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-
-         p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-
-         *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
-      }
-      best_row = png_ptr->paeth_row;
-   }
-
-   else if ((filter_to_do & PNG_FILTER_PAETH) != 0)
-   {
-      png_bytep rp, dp, pp, cp, lp;
-      png_uint_32 sum = 0, lmins = mins;
-      png_size_t i;
-      int v;
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 lmhi, lmlo;
-         lmlo = lmins & PNG_LOMASK;
-         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
-            {
-               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         if (lmhi > PNG_HIMASK)
-            lmins = PNG_MAXSUM;
-
-         else
-            lmins = (lmhi << PNG_HISHIFT) + lmlo;
-      }
-#endif
-
-      for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
-          pp = prev_row + 1; i < bpp; i++)
-      {
-         v = *dp++ = (png_byte)(((int)*rp++ - (int)*pp++) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-      }
-
-      for (lp = row_buf + 1, cp = prev_row + 1; i < row_bytes; i++)
-      {
-         int a, b, c, pa, pb, pc, p;
-
-         b = *pp++;
-         c = *cp++;
-         a = *lp++;
-
-#ifndef PNG_SLOW_PAETH
-         p = b - c;
-         pc = a - c;
-#ifdef PNG_USE_ABS
-         pa = abs(p);
-         pb = abs(pc);
-         pc = abs(p + pc);
-#else
-         pa = p < 0 ? -p : p;
-         pb = pc < 0 ? -pc : pc;
-         pc = (p + pc) < 0 ? -(p + pc) : p + pc;
-#endif
-         p = (pa <= pb && pa <=pc) ? a : (pb <= pc) ? b : c;
-#else /* SLOW_PAETH */
-         p = a + b - c;
-         pa = abs(p - a);
-         pb = abs(p - b);
-         pc = abs(p - c);
-
-         if (pa <= pb && pa <= pc)
-            p = a;
-
-         else if (pb <= pc)
-            p = b;
-
-         else
-            p = c;
-#endif /* SLOW_PAETH */
-
-         v = *dp++ = (png_byte)(((int)*rp++ - p) & 0xff);
-
-         sum += (v < 128) ? v : 256 - v;
-
-         if (sum > lmins)  /* We are already worse, don't continue. */
-            break;
-      }
-
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
-      {
-         int j;
-         png_uint_32 sumhi, sumlo;
-         sumlo = sum & PNG_LOMASK;
-         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
-
-         for (j = 0; j < num_p_filters; j++)
-         {
-            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
-            {
-               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-
-               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
-                   PNG_WEIGHT_SHIFT;
-            }
-         }
-
-         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
-             PNG_COST_SHIFT;
-
-         if (sumhi > PNG_HIMASK)
-            sum = PNG_MAXSUM;
-
-         else
-            sum = (sumhi << PNG_HISHIFT) + sumlo;
-      }
-#endif
-
-      if (sum < mins)
-      {
-         best_row = png_ptr->paeth_row;
-      }
-   }
-#endif /* WRITE_FILTER */
-
-   /* Do the actual writing of the filtered row data from the chosen filter. */
-   png_write_filtered_row(png_ptr, best_row, row_info->rowbytes+1);
-
-#ifdef PNG_WRITE_FILTER_SUPPORTED
-#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-   /* Save the type of filter we picked this time for future calculations */
-   if (png_ptr->num_prev_filters > 0)
-   {
-      int j;
-
-      for (j = 1; j < num_p_filters; j++)
-      {
-         png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1];
-      }
-
-      png_ptr->prev_filters[j] = best_row[0];
-   }
-#endif
-#endif /* WRITE_FILTER */
-}
-
-
-/* Do the actual writing of a previously filtered row. */
-static void
-png_write_filtered_row(png_structrp png_ptr, png_bytep filtered_row,
-   png_size_t full_row_length/*includes filter byte*/)
-{
-   png_debug(1, "in png_write_filtered_row");
-
-   png_debug1(2, "filter = %d", filtered_row[0]);
-
-   png_compress_IDAT(png_ptr, filtered_row, full_row_length, Z_NO_FLUSH);
-
-   /* Swap the current and previous rows */
-   if (png_ptr->prev_row != NULL)
-   {
-      png_bytep tptr;
-
-      tptr = png_ptr->prev_row;
-      png_ptr->prev_row = png_ptr->row_buf;
-      png_ptr->row_buf = tptr;
-   }
-
-   /* Finish row - updates counters and flushes zlib if last row */
-   png_write_finish_row(png_ptr);
-
-#ifdef PNG_WRITE_FLUSH_SUPPORTED
-   png_ptr->flush_rows++;
-
-   if (png_ptr->flush_dist > 0 &&
-       png_ptr->flush_rows >= png_ptr->flush_dist)
-   {
-      png_write_flush(png_ptr);
-   }
-#endif /* WRITE_FLUSH */
-}
-#endif /* WRITE */
--- a/DoConfig/fltk/src/CMakeLists.txt
+++ /dev/null
@@ -1,380 +1,0 @@
-
-set(CPPFILES
-  Fl.cxx
-  Fl_Adjuster.cxx
-  Fl_Bitmap.cxx
-  Fl_Browser.cxx
-  Fl_Browser_.cxx
-  Fl_Browser_load.cxx
-  Fl_Box.cxx
-  Fl_Button.cxx
-  Fl_Chart.cxx
-  Fl_Check_Browser.cxx
-  Fl_Check_Button.cxx
-  Fl_Choice.cxx
-  Fl_Clock.cxx
-  Fl_Color_Chooser.cxx
-  Fl_Copy_Surface.cxx
-  Fl_Counter.cxx
-  Fl_Device.cxx
-  Fl_Dial.cxx
-  Fl_Help_Dialog_Dox.cxx
-  Fl_Double_Window.cxx
-  Fl_File_Browser.cxx
-  Fl_File_Chooser.cxx
-  Fl_File_Chooser2.cxx
-  Fl_File_Icon.cxx
-  Fl_File_Input.cxx
-  Fl_Group.cxx
-  Fl_Help_View.cxx
-  Fl_Image.cxx
-  Fl_Image_Surface.cxx
-  Fl_Input.cxx
-  Fl_Input_.cxx
-  Fl_Light_Button.cxx
-  Fl_Menu.cxx
-  Fl_Menu_.cxx
-  Fl_Menu_Bar.cxx
-  Fl_Menu_Button.cxx
-  Fl_Menu_Window.cxx
-  Fl_Menu_add.cxx
-  Fl_Menu_global.cxx
-  Fl_Multi_Label.cxx
-  Fl_Native_File_Chooser.cxx
-  Fl_Overlay_Window.cxx
-  Fl_Pack.cxx
-  Fl_Paged_Device.cxx
-  Fl_Pixmap.cxx
-  Fl_Positioner.cxx
-  Fl_PostScript.cxx
-  Fl_Printer.cxx
-  Fl_Preferences.cxx
-  Fl_Progress.cxx
-  Fl_Repeat_Button.cxx
-  Fl_Return_Button.cxx
-  Fl_Roller.cxx
-  Fl_Round_Button.cxx
-  Fl_Scroll.cxx
-  Fl_Scrollbar.cxx
-  Fl_Shared_Image.cxx
-  Fl_Single_Window.cxx
-  Fl_Slider.cxx
-  Fl_Table.cxx
-  Fl_Table_Row.cxx
-  Fl_Tabs.cxx
-  Fl_Text_Buffer.cxx
-  Fl_Text_Display.cxx
-  Fl_Text_Editor.cxx
-  Fl_Tile.cxx
-  Fl_Tiled_Image.cxx
-  Fl_Tooltip.cxx
-  Fl_Tree.cxx
-  Fl_Tree_Item_Array.cxx
-  Fl_Tree_Item.cxx
-  Fl_Tree_Prefs.cxx
-  Fl_Valuator.cxx
-  Fl_Value_Input.cxx
-  Fl_Value_Output.cxx
-  Fl_Value_Slider.cxx
-  Fl_Widget.cxx
-  Fl_Window.cxx
-  Fl_Window_fullscreen.cxx
-  Fl_Window_hotspot.cxx
-  Fl_Window_iconize.cxx
-  Fl_Window_shape.cxx
-  Fl_Wizard.cxx
-  Fl_XBM_Image.cxx
-  Fl_XPM_Image.cxx
-  Fl_abort.cxx
-  Fl_add_idle.cxx
-  Fl_arg.cxx
-  Fl_compose.cxx
-  Fl_display.cxx
-  Fl_get_key.cxx
-  Fl_get_system_colors.cxx
-  Fl_grab.cxx
-  Fl_lock.cxx
-  Fl_own_colormap.cxx
-  Fl_visual.cxx
-  Fl_x.cxx
-  filename_absolute.cxx
-  filename_expand.cxx
-  filename_ext.cxx
-  filename_isdir.cxx
-  filename_list.cxx
-  filename_match.cxx
-  filename_setext.cxx
-  fl_arc.cxx
-  fl_arci.cxx
-  fl_ask.cxx
-  fl_boxtype.cxx
-  fl_color.cxx
-  fl_cursor.cxx
-  fl_curve.cxx
-  fl_diamond_box.cxx
-  fl_dnd.cxx
-  fl_draw.cxx
-  fl_draw_image.cxx
-  fl_draw_pixmap.cxx
-  fl_engraved_label.cxx
-  fl_file_dir.cxx
-  fl_font.cxx
-  fl_gleam.cxx
-  fl_gtk.cxx
-  fl_labeltype.cxx
-  fl_line_style.cxx
-  fl_open_uri.cxx
-  fl_oval_box.cxx
-  fl_overlay.cxx
-  fl_overlay_visual.cxx
-  fl_plastic.cxx
-  fl_read_image.cxx
-  fl_rect.cxx
-  fl_round_box.cxx
-  fl_rounded_box.cxx
-  fl_set_font.cxx
-  fl_set_fonts.cxx
-  fl_scroll_area.cxx
-  fl_shadow_box.cxx
-  fl_shortcut.cxx
-  fl_show_colormap.cxx
-  fl_symbols.cxx
-  fl_vertex.cxx
-  ps_image.cxx
-  screen_xywh.cxx
-  fl_utf8.cxx
-  fl_encoding_latin1.cxx
-  fl_encoding_mac_roman.cxx
-)
-
-set(FLCPPFILES
-  forms_compatability.cxx
-  forms_bitmap.cxx
-  forms_free.cxx
-  forms_fselect.cxx
-  forms_pixmap.cxx
-  forms_timer.cxx
-)
-
-set(GLCPPFILES
-  Fl_Gl_Choice.cxx
-  Fl_Gl_Device_Plugin.cxx
-  Fl_Gl_Overlay.cxx
-  Fl_Gl_Window.cxx
-  freeglut_geometry.cxx
-  freeglut_stroke_mono_roman.cxx
-  freeglut_stroke_roman.cxx
-  freeglut_teapot.cxx
-  gl_draw.cxx
-  gl_start.cxx
-  glut_compatability.cxx
-  glut_font.cxx
-)
-
-set(IMGCPPFILES
-  fl_images_core.cxx
-  Fl_BMP_Image.cxx
-  Fl_File_Icon2.cxx
-  Fl_GIF_Image.cxx
-  Fl_Help_Dialog.cxx
-  Fl_JPEG_Image.cxx
-  Fl_PNG_Image.cxx
-  Fl_PNM_Image.cxx
-)
-
-set(CFILES
-  flstring.c
-  scandir.c
-  numericsort.c
-  vsnprintf.c
-  xutf8/is_right2left.c
-  xutf8/is_spacing.c
-  xutf8/case.c
-  xutf8/utf8Input.c
-  xutf8/utf8Utils.c
-  xutf8/utf8Wrap.c
-  xutf8/keysym2Ucs.c
-  fl_utf.c
-)
-
-if (APPLE AND NOT OPTION_APPLE_X11)
-    set(MMFILES
-        Fl_cocoa.mm
-        Fl_Quartz_Printer.mm
-        Fl_Native_File_Chooser_MAC.mm
-        Fl_Sys_Menu_Bar.mm
-        )
-else()
-   set(MMFILES
-      )
-endif (APPLE AND NOT OPTION_APPLE_X11)
-
-#######################################################################
-
-# prepare source files for shared and static FLTK libraries
-
-set (SHARED_FILES ${CPPFILES} ${MMFILES} ${CFILES})
-
-set (STATIC_FILES ${SHARED_FILES})
-
-if (WIN32)
-    list(APPEND STATIC_FILES fl_call_main.c)
-endif (WIN32)
-
-add_definitions(-DFL_LIBRARY)
-
-#######################################################################
-
-# prepare optional libs for shared and static FLTK libraries
-
-set (OPTIONAL_LIBS)
-
-if (LIB_dl)
-    list(APPEND OPTIONAL_LIBS ${LIB_dl})
-endif (LIB_dl)
-
-if (USE_THREADS)
-    list(APPEND OPTIONAL_LIBS ${CMAKE_THREAD_LIBS_INIT})
-endif (USE_THREADS)
-
-if (USE_X11)
-    list(APPEND OPTIONAL_LIBS ${X11_LIBRARIES})
-endif (USE_X11)
-
-if (WIN32)
-    list(APPEND OPTIONAL_LIBS comctl32)
-endif (WIN32)
-
-if (FLTK_HAVE_CAIRO)
-    list(APPEND OPTIONAL_LIBS fltk_cairo ${PKG_CAIRO_LIBRARIES})
-ENDif (FLTK_HAVE_CAIRO)
-
-if (HAVE_XINERAMA)
-    list(APPEND OPTIONAL_LIBS ${X11_Xinerama_LIB})
-endif (HAVE_XINERAMA)
-
-if (HAVE_XFIXES)
-    list(APPEND OPTIONAL_LIBS ${X11_Xfixes_LIB})
-endif (HAVE_XFIXES)
-
-if (HAVE_XCURSOR)
-    list(APPEND OPTIONAL_LIBS ${X11_Xcursor_LIB})
-endif (HAVE_XCURSOR)
-
-if (HAVE_XRENDER)
-    list(APPEND OPTIONAL_LIBS ${X11_Xrender_LIB})
-endif (HAVE_XRENDER)
-
-if (USE_XFT)
-    list(APPEND OPTIONAL_LIBS ${X11_Xft_LIB})
-    if (LIB_fontconfig)
-	list(APPEND OPTIONAL_LIBS ${LIB_fontconfig})
-    endif (LIB_fontconfig)
-endif (USE_XFT)
-
-#######################################################################
-
-FL_ADD_LIBRARY(fltk STATIC "${STATIC_FILES}")
-target_link_libraries(fltk ${OPTIONAL_LIBS})
-
-#######################################################################
-
-FL_ADD_LIBRARY(fltk_forms STATIC "${FLCPPFILES}")
-target_link_libraries(fltk_forms fltk)
-
-#######################################################################
-
-FL_ADD_LIBRARY(fltk_images STATIC "${IMGCPPFILES}")
-target_link_libraries(fltk_images fltk)
-
-if (OPTION_USE_SYSTEM_LIBJPEG)
-    target_link_libraries(fltk_images ${FLTK_JPEG_LIBRARIES})
-else()
-    target_link_libraries(fltk_images fltk_jpeg)
-endif (OPTION_USE_SYSTEM_LIBJPEG)
-
-if (OPTION_USE_SYSTEM_ZLIB)
-    target_link_libraries(fltk_images ${FLTK_ZLIB_LIBRARIES})
-else()
-    target_link_libraries(fltk_images fltk_z)
-endif (OPTION_USE_SYSTEM_ZLIB)
-
-if (OPTION_USE_SYSTEM_LIBPNG)
-    target_link_libraries(fltk_images ${FLTK_PNG_LIBRARIES})
-else()
-    target_link_libraries(fltk_images fltk_png)
-endif (OPTION_USE_SYSTEM_LIBPNG)
-
-#######################################################################
-
-if (OPENGL_FOUND)
-   FL_ADD_LIBRARY(fltk_gl STATIC "${GLCPPFILES}")
-   target_link_libraries(fltk_gl fltk ${OPENGL_LIBRARIES})
-endif (OPENGL_FOUND)
-
-#######################################################################
-# Build shared libraries (optional)
-#######################################################################
-
-# Note to devs: As of 08 Aug 2016 we can build shared libs (dlls)
-# under Windows with Visual Studio (MSVC) but we can't link for instance
-# fltk_images_SHARED with fltk_SHARED - we have to use fltk, i.e. the
-# "static" object library instead. I don't know how to fix this, but
-# at least we can build shared libraries (dlls) with Visual Studio.
-# AlbrechtS
-
-if (OPTION_BUILD_SHARED_LIBS)
-
-    FL_ADD_LIBRARY(fltk SHARED "${SHARED_FILES}")
-    target_link_libraries(fltk_SHARED ${OPTIONAL_LIBS})
-
-    ###################################################################
-
-    FL_ADD_LIBRARY(fltk_forms SHARED "${FLCPPFILES}")
-    if (MSVC)
-      target_link_libraries(fltk_forms_SHARED fltk)
-    else ()
-      target_link_libraries(fltk_forms_SHARED fltk_SHARED)
-    endif (MSVC)
-
-    ###################################################################
-
-    FL_ADD_LIBRARY(fltk_images SHARED "${IMGCPPFILES}")
-    if (MSVC)
-      target_link_libraries(fltk_images_SHARED fltk)
-    else ()
-      target_link_libraries(fltk_images_SHARED fltk_SHARED)
-    endif (MSVC)
-
-    if (OPTION_USE_SYSTEM_LIBJPEG)
-	target_link_libraries(fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
-    else()
-	target_link_libraries(fltk_images_SHARED fltk_jpeg_SHARED)
-    endif (OPTION_USE_SYSTEM_LIBJPEG)
-
-    if (OPTION_USE_SYSTEM_LIBPNG)
-	target_link_libraries(fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
-    else()
-	target_link_libraries(fltk_images_SHARED fltk_png_SHARED)
-    endif (OPTION_USE_SYSTEM_LIBPNG)
-
-    if (OPTION_USE_SYSTEM_ZLIB)
-	target_link_libraries(fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
-    else()
-	target_link_libraries(fltk_images_SHARED fltk_z_SHARED)
-    endif (OPTION_USE_SYSTEM_ZLIB)
-
-    ###################################################################
-
-    if (OPENGL_FOUND)
-      FL_ADD_LIBRARY(fltk_gl SHARED "${GLCPPFILES}")
-      if (MSVC)
-	target_link_libraries(fltk_gl_SHARED fltk ${OPENGL_LIBRARIES})
-      else ()
-	target_link_libraries(fltk_gl_SHARED fltk_SHARED ${OPENGL_LIBRARIES})
-      endif (MSVC)
-    endif (OPENGL_FOUND)
-
-endif (OPTION_BUILD_SHARED_LIBS)
-
-#######################################################################
--- a/DoConfig/fltk/src/Fl.cxx
+++ /dev/null
@@ -1,2282 +1,0 @@
-//
-// "$Id$"
-//
-// Main event handling code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// warning: the Apple Quartz version still uses some Quickdraw calls,
-//          mostly to get around the single active context in QD and
-//          to implement clipping. This should be changed into pure
-//          Quartz calls in the near future.
-#include <config.h>
-
-/* We require Windows 2000 features (e.g. VK definitions) */
-#if defined(WIN32)
-# if !defined(WINVER) || (WINVER < 0x0500)
-#  ifdef WINVER
-#   undef WINVER
-#  endif
-#  define WINVER 0x0500
-# endif
-# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
-#  ifdef _WIN32_WINNT
-#   undef _WIN32_WINNT
-#  endif
-#  define _WIN32_WINNT 0x0500
-# endif
-#endif
-
-
-// STR #3454: We must #define FD_ISSET before we #include winsock2.h
-// to fix an undefined reference (__FD_ISSET). (AlbrechtS Feb 2018)
-// Other portions of the fix for STR #3454 are in src/Fl_win32.cxx.
-// This fix is only necessary for MinGW.
-
-#ifdef __MINGW32__
-static void * get_wsock_mod();
-typedef int(__stdcall *fl_wsk_fd_is_set_f)(unsigned int, void *);
-static fl_wsk_fd_is_set_f fl_wsk_fd_is_set = 0;
-
-#define FD_ISSET(S,SET) \
-  (get_wsock_mod() ? fl_wsk_fd_is_set(S, SET) : 0)
-#endif // __MINGW32__
-
-// recent versions of MinGW warn: "Please include winsock2.h before windows.h",
-// hence we must include winsock2.h before FL/Fl.H (A.S. Dec. 2010, IMM May 2011)
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <winsock2.h>
-#endif
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/x.H>
-
-#include <ctype.h>
-#include <stdlib.h>
-#include "flstring.h"
-
-#if defined(DEBUG) || defined(DEBUG_WATCH)
-#  include <stdio.h>
-#endif // DEBUG || DEBUG_WATCH
-
-#ifdef WIN32
-#  include <ole2.h>
-void fl_free_fonts(void);
-HBRUSH fl_brush_action(int action);
-void fl_cleanup_pens(void);
-void fl_release_dc(HWND,HDC);
-void fl_cleanup_dc_list(void);
-#elif defined(__APPLE__)
-extern double fl_mac_flush_and_wait(double time_to_wait);
-#endif // WIN32
-
-//
-// Globals...
-//
-
-// Pointers you can use to change FLTK to a foreign language.
-// Note: Similar pointers are defined in FL/fl_ask.H and src/fl_ask.cxx
-#if !defined(__APPLE__) || defined(FL_DOXYGEN)
-  const char* fl_local_alt   = "Alt";	///< string pointer used in shortcuts, you can change it to another language
-  const char* fl_local_ctrl  = "Ctrl";	///< string pointer used in shortcuts, you can change it to another language
-  const char* fl_local_meta  = "Meta";	///< string pointer used in shortcuts, you can change it to another language
-  const char* fl_local_shift = "Shift";	///< string pointer used in shortcuts, you can change it to another language
-#else
-  const char* fl_local_alt   = "\xe2\x8c\xa5\\"; // U+2325 (option key)
-  const char* fl_local_ctrl  = "\xe2\x8c\x83\\"; // U+2303 (up arrowhead)
-  const char* fl_local_meta  = "\xe2\x8c\x98\\"; // U+2318 (place of interest sign)
-  const char* fl_local_shift = "\xe2\x87\xa7\\"; // U+21E7 (upwards white arrow)
-#endif
-
-// Apple App Menu
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-const char *Fl_Mac_App_Menu::about = "About %@";
-const char *Fl_Mac_App_Menu::print = "Print Front Window";
-const char *Fl_Mac_App_Menu::services = "Services";
-const char *Fl_Mac_App_Menu::hide = "Hide %@";
-const char *Fl_Mac_App_Menu::hide_others = "Hide Others";
-const char *Fl_Mac_App_Menu::show = "Show All";
-const char *Fl_Mac_App_Menu::quit = "Quit %@";
-#endif // __APPLE__
-
-#ifndef FL_DOXYGEN
-Fl_Widget	*Fl::belowmouse_,
-		*Fl::pushed_,
-		*Fl::focus_,
-		*Fl::selection_owner_;
-int		Fl::damage_,
-		Fl::e_number,
-		Fl::e_x,
-		Fl::e_y,
-		Fl::e_x_root,
-		Fl::e_y_root,
-		Fl::e_dx,
-		Fl::e_dy,
-		Fl::e_state,
-		Fl::e_clicks,
-		Fl::e_is_click,
-		Fl::e_keysym,
-                Fl::e_original_keysym,
-		Fl::scrollbar_size_ = 16;
-
-char		*Fl::e_text = (char *)"";
-int		Fl::e_length;
-const char*	Fl::e_clipboard_type = "";
-void *		Fl::e_clipboard_data = NULL;
-
-Fl_Event_Dispatch Fl::e_dispatch = 0;
-
-unsigned char   Fl::options_[] = { 0, 0 };
-unsigned char   Fl::options_read_ = 0;
-
-
-Fl_Window *fl_xfocus = NULL;	// which window X thinks has focus
-Fl_Window *fl_xmousewin;// which window X thinks has FL_ENTER
-Fl_Window *Fl::grab_;	// most recent Fl::grab()
-Fl_Window *Fl::modal_;	// topmost modal() window
-
-#endif // FL_DOXYGEN
-
-char const * const Fl::clipboard_plain_text = "text/plain";
-char const * const Fl::clipboard_image = "image";
-
-//
-// 'Fl::version()' - Return the API version number...
-//
-
-/**
-  Returns the compiled-in value of the FL_VERSION constant. This
-  is useful for checking the version of a shared library.
-
-  \deprecated	Use int Fl::api_version() instead.
-*/
-double Fl::version() {
-  return FL_VERSION;
-}
-
-/**
-  Returns the compiled-in value of the FL_API_VERSION constant. This
-  is useful for checking the version of a shared library.
-*/
-int Fl::api_version() {
-  return FL_API_VERSION;
-}
-
-/**
-  Returns the compiled-in value of the FL_ABI_VERSION constant. This
-  is useful for checking the version of a shared library.
-*/
-int  Fl::abi_version() {
-  return FL_ABI_VERSION;
-}
-
-/**
-  Gets the default scrollbar size used by
-  Fl_Browser_,
-  Fl_Help_View,
-  Fl_Scroll, and
-  Fl_Text_Display widgets.
-  \returns The default size for widget scrollbars, in pixels.
-*/
-int Fl::scrollbar_size() {
-  return scrollbar_size_;
-}
-
-/**
-  Sets the default scrollbar size that is used by the
-  Fl_Browser_,
-  Fl_Help_View,
-  Fl_Scroll, and
-  Fl_Text_Display widgets.
-  \param[in] W The new default size for widget scrollbars, in pixels.
-*/
-void Fl::scrollbar_size(int W) {
-  scrollbar_size_ = W;
-}
-
-
-/** Returns whether or not the mouse event is inside the given rectangle.
-
-    Returns non-zero if the current Fl::event_x() and Fl::event_y()
-    put it inside the given arbitrary bounding box.
-
-    You should always call this rather than doing your own comparison
-    so you are consistent about edge effects.
-
-    To find out, whether the event is inside a child widget of the
-    current window, you can use Fl::event_inside(const Fl_Widget *).
-
-    \param[in] xx,yy,ww,hh	bounding box
-    \return			non-zero, if mouse event is inside
-*/
-int Fl::event_inside(int xx,int yy,int ww,int hh) /*const*/ {
-  int mx = e_x - xx;
-  int my = e_y - yy;
-  return (mx >= 0 && mx < ww && my >= 0 && my < hh);
-}
-
-/** Returns whether or not the mouse event is inside a given child widget.
-
-    Returns non-zero if the current Fl::event_x() and Fl::event_y()
-    put it inside the given child widget's bounding box.
-
-    This method can only be used to check whether the mouse event is
-    inside a \b child widget of the window that handles the event, and
-    there must not be an intermediate subwindow (i.e. the widget must
-    not be inside a subwindow of the current window). However, it is
-    valid if the widget is inside a nested Fl_Group.
-
-    You must not use it with the window itself as the \p o argument
-    in a window's handle() method.
-
-    \note The mentioned restrictions are necessary, because this method
-    does not transform coordinates of child widgets, and thus the given
-    widget \p o must be within the \e same window that is handling the
-    current event. Otherwise the results are undefined.
-
-    You should always call this rather than doing your own comparison
-    so you are consistent about edge effects.
-
-    \see Fl::event_inside(int, int, int, int)
-
-    \param[in] o	child widget to be tested
-    \return		non-zero, if mouse event is inside the widget
-*/
-int Fl::event_inside(const Fl_Widget *o) /*const*/ {
-  int mx = e_x - o->x();
-  int my = e_y - o->y();
-  return (mx >= 0 && mx < o->w() && my >= 0 && my < o->h());
-}
-
-//
-//
-// timer support
-//
-
-#ifdef WIN32
-
-// implementation in Fl_win32.cxx
-
-#elif defined(__APPLE__)
-
-// implementation in Fl_cocoa.mm (was Fl_mac.cxx)
-
-#else
-
-//
-// X11 timers
-//
-
-
-////////////////////////////////////////////////////////////////////////
-// Timeouts are stored in a sorted list (*first_timeout), so only the
-// first one needs to be checked to see if any should be called.
-// Allocated, but unused (free) Timeout structs are stored in another
-// linked list (*free_timeout).
-
-struct Timeout {
-  double time;
-  void (*cb)(void*);
-  void* arg;
-  Timeout* next;
-};
-static Timeout* first_timeout, *free_timeout;
-
-#include <sys/time.h>
-
-// I avoid the overhead of getting the current time when we have no
-// timeouts by setting this flag instead of getting the time.
-// In this case calling elapse_timeouts() does nothing, but records
-// the current time, and the next call will actually elapse time.
-static char reset_clock = 1;
-
-static void elapse_timeouts() {
-  static struct timeval prevclock;
-  struct timeval newclock;
-  gettimeofday(&newclock, NULL);
-  double elapsed = newclock.tv_sec - prevclock.tv_sec +
-    (newclock.tv_usec - prevclock.tv_usec)/1000000.0;
-  prevclock.tv_sec = newclock.tv_sec;
-  prevclock.tv_usec = newclock.tv_usec;
-  if (reset_clock) {
-    reset_clock = 0;
-  } else if (elapsed > 0) {
-    for (Timeout* t = first_timeout; t; t = t->next) t->time -= elapsed;
-  }
-}
-
-// Continuously-adjusted error value, this is a number <= 0 for how late
-// we were at calling the last timeout. This appears to make repeat_timeout
-// very accurate even when processing takes a significant portion of the
-// time interval:
-static double missed_timeout_by;
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void *argp) {
-  elapse_timeouts();
-  repeat_timeout(time, cb, argp);
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void *argp) {
-  time += missed_timeout_by; if (time < -.05) time = 0;
-  Timeout* t = free_timeout;
-  if (t) {
-      free_timeout = t->next;
-  } else {
-      t = new Timeout;
-  }
-  t->time = time;
-  t->cb = cb;
-  t->arg = argp;
-  // insert-sort the new timeout:
-  Timeout** p = &first_timeout;
-  while (*p && (*p)->time <= time) p = &((*p)->next);
-  t->next = *p;
-  *p = t;
-}
-
-/**
-  Returns true if the timeout exists and has not been called yet.
-*/
-int Fl::has_timeout(Fl_Timeout_Handler cb, void *argp) {
-  for (Timeout* t = first_timeout; t; t = t->next)
-    if (t->cb == cb && t->arg == argp) return 1;
-  return 0;
-}
-
-/**
-  Removes a timeout callback. It is harmless to remove a timeout
-  callback that no longer exists.
-
-  \note	This version removes all matching timeouts, not just the first one.
-	This may change in the future.
-*/
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void *argp) {
-  for (Timeout** p = &first_timeout; *p;) {
-    Timeout* t = *p;
-    if (t->cb == cb && (t->arg == argp || !argp)) {
-      *p = t->next;
-      t->next = free_timeout;
-      free_timeout = t;
-    } else {
-      p = &(t->next);
-    }
-  }
-}
-
-#endif
-
-////////////////////////////////////////////////////////////////
-// Checks are just stored in a list. They are called in the reverse
-// order that they were added (this may change in the future).
-// This is a bit messy because I want to allow checks to be added,
-// removed, and have wait() called from inside them. To do this
-// next_check points at the next unprocessed one for the outermost
-// call to Fl::wait().
-
-struct Check {
-  void (*cb)(void*);
-  void* arg;
-  Check* next;
-};
-static Check *first_check, *next_check, *free_check;
-
-/**
-  FLTK will call this callback just before it flushes the display and
-  waits for events.  This is different than an idle callback because it
-  is only called once, then FLTK calls the system and tells it not to
-  return until an event happens.
-
-  This can be used by code that wants to monitor the
-  application's state, such as to keep a display up to date. The
-  advantage of using a check callback is that it is called only when no
-  events are pending. If events are coming in quickly, whole blocks of
-  them will be processed before this is called once. This can save
-  significant time and avoid the application falling behind the events.
-
-  Sample code:
-
-  \code
-  bool state_changed; // anything that changes the display turns this on
-
-  void callback(void*) {
-   if (!state_changed) return;
-   state_changed = false;
-   do_expensive_calculation();
-   widget-&gt;redraw();
-  }
-
-  main() {
-   Fl::add_check(callback);
-   return Fl::run();
-  }
-  \endcode
-*/
-void Fl::add_check(Fl_Timeout_Handler cb, void *argp) {
-  Check* t = free_check;
-  if (t) free_check = t->next;
-  else t = new Check;
-  t->cb = cb;
-  t->arg = argp;
-  t->next = first_check;
-  if (next_check == first_check) next_check = t;
-  first_check = t;
-}
-
-/**
-  Removes a check callback. It is harmless to remove a check
-  callback that no longer exists.
-*/
-void Fl::remove_check(Fl_Timeout_Handler cb, void *argp) {
-  for (Check** p = &first_check; *p;) {
-    Check* t = *p;
-    if (t->cb == cb && t->arg == argp) {
-      if (next_check == t) next_check = t->next;
-      *p = t->next;
-      t->next = free_check;
-      free_check = t;
-    } else {
-      p = &(t->next);
-    }
-  }
-}
-
-/**
-  Returns 1 if the check exists and has not been called yet, 0 otherwise.
-*/
-int Fl::has_check(Fl_Timeout_Handler cb, void *argp) {
-  for (Check** p = &first_check; *p;) {
-    Check* t = *p;
-    if (t->cb == cb && t->arg == argp) {
-      return 1;
-    } else {
-      p = &(t->next);
-    }
-  }
-  return 0;
-}
-
-static void run_checks()
-{
-  // checks are a bit messy so that add/remove and wait may be called
-  // from inside them without causing an infinite loop:
-  if (next_check == first_check) {
-    while (next_check) {
-      Check* checkp = next_check;
-      next_check = checkp->next;
-      (checkp->cb)(checkp->arg);
-    }
-    next_check = first_check;
-  }
-}
-
-#if !defined(WIN32) && !defined(__APPLE__)
-static char in_idle;
-#endif
-
-////////////////////////////////////////////////////////////////
-// Clipboard notifications
-
-struct Clipboard_Notify {
-  Fl_Clipboard_Notify_Handler handler;
-  void *data;
-  struct Clipboard_Notify *next;
-};
-
-static struct Clipboard_Notify *clip_notify_list = NULL;
-
-extern void fl_clipboard_notify_change(); // in Fl_<platform>.cxx
-
-void Fl::add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data) {
-  struct Clipboard_Notify *node;
-
-  remove_clipboard_notify(h);
-
-  node = new Clipboard_Notify;
-
-  node->handler = h;
-  node->data = data;
-  node->next = clip_notify_list;
-
-  clip_notify_list = node;
-
-  fl_clipboard_notify_change();
-}
-
-void Fl::remove_clipboard_notify(Fl_Clipboard_Notify_Handler h) {
-  struct Clipboard_Notify *node, **prev;
-
-  node = clip_notify_list;
-  prev = &clip_notify_list;
-  while (node != NULL) {
-    if (node->handler == h) {
-      *prev = node->next;
-      delete node;
-
-      fl_clipboard_notify_change();
-
-      return;
-    }
-
-    prev = &node->next;
-    node = node->next;
-  }
-}
-
-bool fl_clipboard_notify_empty(void) {
-  return clip_notify_list == NULL;
-}
-
-void fl_trigger_clipboard_notify(int source) {
-  struct Clipboard_Notify *node, *next;
-
-  node = clip_notify_list;
-  while (node != NULL) {
-    next = node->next;
-    node->handler(source, node->data);
-    node = next;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// wait/run/check/ready:
-
-void (*Fl::idle)(); // see Fl::add_idle.cxx for the add/remove functions
-
-extern int fl_ready(); // in Fl_<platform>.cxx
-extern int fl_wait(double time); // in Fl_<platform>.cxx
-
-/**
-  See int Fl::wait()
-*/
-double Fl::wait(double time_to_wait) {
-  // delete all widgets that were listed during callbacks
-  do_widget_deletion();
-
-#ifdef WIN32
-
-  return fl_wait(time_to_wait);
-
-#elif defined(__APPLE__)
-
-  run_checks();
-  return fl_mac_flush_and_wait(time_to_wait);
-
-#else
-
-  if (first_timeout) {
-    elapse_timeouts();
-    Timeout *t;
-    while ((t = first_timeout)) {
-      if (t->time > 0) break;
-      // The first timeout in the array has expired.
-      missed_timeout_by = t->time;
-      // We must remove timeout from array before doing the callback:
-      void (*cb)(void*) = t->cb;
-      void *argp = t->arg;
-      first_timeout = t->next;
-      t->next = free_timeout;
-      free_timeout = t;
-      // Now it is safe for the callback to do add_timeout:
-      cb(argp);
-    }
-  } else {
-    reset_clock = 1; // we are not going to check the clock
-  }
-  run_checks();
-//  if (idle && !fl_ready()) {
-  if (idle) {
-    if (!in_idle) {
-      in_idle = 1;
-      idle();
-      in_idle = 0;
-    }
-    // the idle function may turn off idle, we can then wait:
-    if (idle) time_to_wait = 0.0;
-  }
-  if (first_timeout && first_timeout->time < time_to_wait)
-    time_to_wait = first_timeout->time;
-  if (time_to_wait <= 0.0) {
-    // do flush second so that the results of events are visible:
-    int ret = fl_wait(0.0);
-    flush();
-    return ret;
-  } else {
-    // do flush first so that user sees the display:
-    flush();
-    if (idle && !in_idle) // 'idle' may have been set within flush()
-      time_to_wait = 0.0;
-    return fl_wait(time_to_wait);
-  }
-#endif
-}
-
-#define FOREVER 1e20
-
-/**
-  As long as any windows are displayed this calls Fl::wait()
-  repeatedly.  When all the windows are closed it returns zero
-  (supposedly it would return non-zero on any errors, but FLTK calls
-  exit directly for these).  A normal program will end main()
-  with return Fl::run();.
-*/
-int Fl::run() {
-  while (Fl_X::first) wait(FOREVER);
-  return 0;
-}
-
-/**
-  Waits until "something happens" and then returns.  Call this
-  repeatedly to "run" your program.  You can also check what happened
-  each time after this returns, which is quite useful for managing
-  program state.
-
-  What this really does is call all idle callbacks, all elapsed
-  timeouts, call Fl::flush() to get the screen to update, and
-  then wait some time (zero if there are idle callbacks, the shortest of
-  all pending timeouts, or infinity), for any events from the user or
-  any Fl::add_fd() callbacks.  It then handles the events and
-  calls the callbacks and then returns.
-
-  The return value of Fl::wait() is non-zero if there are any
-  visible windows - this may change in future versions of FLTK.
-
-  Fl::wait(time) waits a maximum of \e time seconds.
-  <i>It can return much sooner if something happens.</i>
-
-  The return value is positive if an event or fd happens before the
-  time elapsed.  It is zero if nothing happens (on Win32 this will only
-  return zero if \e time is zero).  It is negative if an error
-  occurs (this will happen on UNIX if a signal happens).
-*/
-int Fl::wait() {
-  if (!Fl_X::first) return 0;
-  wait(FOREVER);
-  return Fl_X::first != 0; // return true if there is a window
-}
-
-/**
-  Same as Fl::wait(0).  Calling this during a big calculation
-  will keep the screen up to date and the interface responsive:
-
-  \code
-  while (!calculation_done()) {
-  calculate();
-  Fl::check();
-  if (user_hit_abort_button()) break;
-  }
-  \endcode
-
-  This returns non-zero if any windows are displayed, and 0 if no
-  windows are displayed (this is likely to change in future versions of
-  FLTK).
-*/
-int Fl::check() {
-  wait(0.0);
-  return Fl_X::first != 0; // return true if there is a window
-}
-
-/**
-  This is similar to Fl::check() except this does \e not
-  call Fl::flush() or any callbacks, which is useful if your
-  program is in a state where such callbacks are illegal.  This returns
-  true if Fl::check() would do anything (it will continue to
-  return true until you call Fl::check() or Fl::wait()).
-
-  \code
-  while (!calculation_done()) {
-    calculate();
-    if (Fl::ready()) {
-      do_expensive_cleanup();
-      Fl::check();
-      if (user_hit_abort_button()) break;
-    }
-  }
-  \endcode
-*/
-int Fl::ready() {
-#if ! defined( WIN32 )  &&  ! defined(__APPLE__)
-  if (first_timeout) {
-    elapse_timeouts();
-    if (first_timeout->time <= 0) return 1;
-  } else {
-    reset_clock = 1;
-  }
-#endif
-  return fl_ready();
-}
-
-////////////////////////////////////////////////////////////////
-// Window list management:
-
-#ifndef FL_DOXYGEN
-Fl_X* Fl_X::first;
-#endif
-
-Fl_Window* fl_find(Window xid) {
-  Fl_X *window;
-  for (Fl_X **pp = &Fl_X::first; (window = *pp); pp = &window->next)
-   if (window->xid == xid) {
-      if (window != Fl_X::first && !Fl::modal()) {
-        // make this window be first to speed up searches
-        // this is not done if modal is true to avoid messing up modal stack
-        *pp = window->next;
-        window->next = Fl_X::first;
-        Fl_X::first = window;
-      }
-      return window->w;
-    }
-  return 0;
-}
-
-/**
-  Returns the first top-level window in the list of shown() windows.  If
-  a modal() window is shown this is the top-most modal window, otherwise
-  it is the most recent window to get an event.
-*/
-Fl_Window* Fl::first_window() {
-  Fl_X* i = Fl_X::first;
-  return i ? i->w : 0;
-}
-
-/**
-  Returns the next top-level window in the list of shown() windows.
-  You can use this call to iterate through all the windows that are shown().
-  \param[in] window	must be shown and not NULL
-*/
-Fl_Window* Fl::next_window(const Fl_Window* window) {
-  Fl_X* i = Fl_X::i(window)->next;
-  return i ? i->w : 0;
-}
-
-/**
- Sets the window that is returned by first_window().
- The window is removed from wherever it is in the
- list and inserted at the top.  This is not done if Fl::modal()
- is on or if the window is not shown(). Because the first window
- is used to set the "parent" of modal windows, this is often
- useful.
- */
-void Fl::first_window(Fl_Window* window) {
-  if (!window || !window->shown()) return;
-  fl_find( Fl_X::i(window)->xid );
-}
-
-/**
-  Redraws all widgets.
-*/
-void Fl::redraw() {
-  for (Fl_X* i = Fl_X::first; i; i = i->next) i->w->redraw();
-}
-
-/**
-  Causes all the windows that need it to be redrawn and graphics forced
-  out through the pipes.
-
-  This is what wait() does before looking for events.
-
-  Note: in multi-threaded applications you should only call Fl::flush()
-  from the main thread. If a child thread needs to trigger a redraw event,
-  it should instead call Fl::awake() to get the main thread to process the
-  event queue.
-*/
-void Fl::flush() {
-  if (damage()) {
-    damage_ = 0;
-    for (Fl_X* i = Fl_X::first; i; i = i->next) {
-      if (i->wait_for_expose) {damage_ = 1; continue;}
-      Fl_Window* wi = i->w;
-      if (!wi->visible_r()) continue;
-      if (wi->damage()) {i->flush(); wi->clear_damage();}
-      // destroy damage regions for windows that don't use them:
-      if (i->region) {XDestroyRegion(i->region); i->region = 0;}
-    }
-  }
-#if defined(USE_X11)
-  if (fl_display) XFlush(fl_display);
-#elif defined(WIN32)
-  GdiFlush();
-#elif defined (__APPLE_QUARTZ__)
-  if (fl_gc)
-    CGContextFlush(fl_gc);
-#else
-# error unsupported platform
-#endif
-}
-
-
-////////////////////////////////////////////////////////////////
-// Event handlers:
-
-
-struct handler_link {
-  int (*handle)(int);
-  handler_link *next;
-};
-
-
-static handler_link *handlers = 0;
-
-
-/**
-  Install a function to parse unrecognized events.  If FLTK cannot
-  figure out what to do with an event, it calls each of these functions
-  (most recent first) until one of them returns non-zero.  If none of
-  them returns non-zero then the event is ignored.  Events that cause
-  this to be called are:
-
-  - \ref FL_SHORTCUT events that are not recognized by any widget.
-    This lets you provide global shortcut keys.
-  - \ref FL_SCREEN_CONFIGURATION_CHANGED events.
-    Under X11, this event requires the libXrandr.so shared library to be
-    loadable at run-time and the X server to implement the RandR extension.
-  - \ref FL_FULLSCREEN events sent to a window that enters or leaves
-    fullscreen mode.
-  - System events that FLTK does not recognize.  See fl_xevent.
-  - \e Some other events when the widget FLTK selected returns
-    zero from its handle() method.  Exactly which ones may change
-    in future versions, however.
-
- \see Fl::remove_handler(Fl_Event_Handler)
- \see Fl::event_dispatch(Fl_Event_Dispatch d)
- \see Fl::handle(int, Fl_Window*)
-*/
-void Fl::add_handler(Fl_Event_Handler ha) {
-  handler_link *l = new handler_link;
-  l->handle = ha;
-  l->next = handlers;
-  handlers = l;
-}
-
-
-/**
- Removes a previously added event handler.
- \see Fl::handle(int, Fl_Window*)
-*/
-void Fl::remove_handler(Fl_Event_Handler ha) {
-  handler_link *l, *p;
-
-  // Search for the handler in the list...
-  for (l = handlers, p = 0; l && l->handle != ha; p = l, l = l->next) {/*empty*/}
-
-  if (l) {
-    // Found it, so remove it from the list...
-    if (p) p->next = l->next;
-    else handlers = l->next;
-
-    // And free the record...
-    delete l;
-  }
-}
-
-int (*fl_local_grab)(int); // used by fl_dnd.cxx
-
-static int send_handlers(int e) {
-  for (const handler_link *hl = handlers; hl; hl = hl->next)
-    if (hl->handle(e)) return 1;
-  return 0;
-}
-
-
-////////////////////////////////////////////////////////////////
-// System event handlers:
-
-
-struct system_handler_link {
-  Fl_System_Handler handle;
-  void *data;
-  system_handler_link *next;
-};
-
-
-static system_handler_link *sys_handlers = 0;
-
-
-/**
- \brief Install a function to intercept system events.
-
- FLTK calls each of these functions as soon as a new system event is
- received. The processing will stop at the first function to return
- non-zero. If all functions return zero then the event is passed on
- for normal handling by FLTK.
-
- Each function will be called with a pointer to the system event as
- the first argument and \p data as the second argument. The system
- event pointer will always be void *, but will point to different
- objects depending on the platform:
-   - X11: XEvent
-   - Windows: MSG
-   - OS X: NSEvent
-
- \param ha The event handler function to register
- \param data User data to include on each call
-
- \see Fl::remove_system_handler(Fl_System_Handler)
-*/
-void Fl::add_system_handler(Fl_System_Handler ha, void *data) {
-  system_handler_link *l = new system_handler_link;
-  l->handle = ha;
-  l->data = data;
-  l->next = sys_handlers;
-  sys_handlers = l;
-}
-
-
-/**
- Removes a previously added system event handler.
-
- \param ha The event handler function to remove
-
- \see Fl::add_system_handler(Fl_System_Handler)
-*/
-void Fl::remove_system_handler(Fl_System_Handler ha) {
-  system_handler_link *l, *p;
-
-  // Search for the handler in the list...
-  for (l = sys_handlers, p = 0; l && l->handle != ha; p = l, l = l->next);
-
-  if (l) {
-    // Found it, so remove it from the list...
-    if (p) p->next = l->next;
-    else sys_handlers = l->next;
-
-    // And free the record...
-    delete l;
-  }
-}
-
-int fl_send_system_handlers(void *e) {
-  for (const system_handler_link *hl = sys_handlers; hl; hl = hl->next) {
-    if (hl->handle(e, hl->data))
-      return 1;
-  }
-  return 0;
-}
-
-
-////////////////////////////////////////////////////////////////
-
-Fl_Widget* fl_oldfocus; // kludge for Fl_Group...
-
-/**
-    Sets the widget that will receive FL_KEYBOARD events.
-
-    If you change Fl::focus(), the previous widget and all
-    parents (that don't contain the new widget) are sent FL_UNFOCUS
-    events.  Changing the focus does \e not send FL_FOCUS to
-    this or any widget, because sending FL_FOCUS is supposed to
-    \e test if the widget wants the focus (by it returning non-zero from
-    handle()).
-
-    \see Fl_Widget::take_focus()
-*/
-void Fl::focus(Fl_Widget *o) {
-  if (o && !o->visible_focus()) return;
-  if (grab()) return; // don't do anything while grab is on
-  Fl_Widget *p = focus_;
-  if (o != p) {
-    Fl::compose_reset();
-    focus_ = o;
-    // make sure that fl_xfocus is set to the top level window
-    // of this widget, or fl_fix_focus will clear our focus again
-    if (o) {
-      Fl_Window *win = 0, *w1 = o->as_window();
-      if (!w1) w1 = o->window();
-      while (w1) { win=w1; w1=win->window(); }
-      if (win) {
-#ifdef __APPLE__
-	if (fl_xfocus != win) {
-	  Fl_X *x = Fl_X::i(win);
-	  if (x) x->set_key_window();
-	}
-#elif defined(USE_X11)
-	if (fl_xfocus != win) {
-	  Fl_X *x = Fl_X::i(win);
-	  if (!Fl_X::ewmh_supported())
-	    win->show(); // Old WMs, XMapRaised
-	  else if (x) // New WMs use the NETWM attribute:
-	    Fl_X::activate_window(x->xid);
-	}
-#endif
-	fl_xfocus = win;
-      }
-    }
-    // take focus from the old focused window
-    fl_oldfocus = 0;
-    int old_event = e_number;
-    e_number = FL_UNFOCUS;
-    for (; p; p = p->parent()) {
-      p->handle(FL_UNFOCUS);
-      fl_oldfocus = p;
-    }
-    e_number = old_event;
-  }
-}
-
-static char dnd_flag = 0; // make 'belowmouse' send DND_LEAVE instead of LEAVE
-
-/**
-    Sets the widget that is below the mouse.  This is for
-    highlighting buttons.  It is not used to send FL_PUSH or
-    FL_MOVE directly, for several obscure reasons, but those events
-    typically go to this widget.  This is also the first widget tried for
-    FL_SHORTCUT events.
-
-    If you change the belowmouse widget, the previous one and all
-    parents (that don't contain the new widget) are sent FL_LEAVE
-    events.  Changing this does \e not send FL_ENTER to this
-    or any widget, because sending FL_ENTER is supposed to \e test
-    if the widget wants the mouse (by it returning non-zero from
-    handle()).
-*/
-void Fl::belowmouse(Fl_Widget *o) {
-  if (grab()) return; // don't do anything while grab is on
-  Fl_Widget *p = belowmouse_;
-  if (o != p) {
-    belowmouse_ = o;
-    int old_event = e_number;
-    e_number = dnd_flag ? FL_DND_LEAVE : FL_LEAVE;
-    for (; p && !p->contains(o); p = p->parent()) {
-      p->handle(e_number);
-    }
-    e_number = old_event;
-  }
-}
-
-/**
-    Sets the widget that is being pushed. FL_DRAG or
-    FL_RELEASE (and any more FL_PUSH) events will be sent to
-    this widget.
-
-    If you change the pushed widget, the previous one and all parents
-    (that don't contain the new widget) are sent FL_RELEASE
-    events.  Changing this does \e not send FL_PUSH to this
-    or any widget, because sending FL_PUSH is supposed to \e test
-    if the widget wants the mouse (by it returning non-zero from
-    handle()).
-*/
- void Fl::pushed(Fl_Widget *o) {
-  pushed_ = o;
-}
-
-static void nothing(Fl_Widget *) {}
-void (*Fl_Tooltip::enter)(Fl_Widget *) = nothing;
-void (*Fl_Tooltip::exit)(Fl_Widget *) = nothing;
-
-// Update modal(), focus() and other state according to system state,
-// and send FL_ENTER, FL_LEAVE, FL_FOCUS, and/or FL_UNFOCUS events.
-// This is the only function that produces these events in response
-// to system activity.
-// This is called whenever a window is added or hidden, and whenever
-// X says the focus or mouse window have changed.
-
-void fl_fix_focus() {
-#ifdef DEBUG
-  puts("fl_fix_focus();");
-#endif // DEBUG
-
-  if (Fl::grab()) return; // don't do anything while grab is on.
-
-  // set focus based on Fl::modal() and fl_xfocus
-  Fl_Widget* w = fl_xfocus;
-  if (w) {
-    int saved = Fl::e_keysym;
-    if (Fl::e_keysym < (FL_Button + FL_LEFT_MOUSE) ||
-        Fl::e_keysym > (FL_Button + FL_RIGHT_MOUSE))
-      Fl::e_keysym = 0; // make sure widgets don't think a keystroke moved focus
-    while (w->parent()) w = w->parent();
-    if (Fl::modal()) w = Fl::modal();
-    if (!w->contains(Fl::focus()))
-      if (!w->take_focus()) Fl::focus(w);
-    Fl::e_keysym = saved;
-  } else
-    Fl::focus(0);
-
-// MRS: Originally we checked the button state, but a user reported that it
-//      broke click-to-focus in FLWM?!?
-//  if (!(Fl::event_state() & 0x7f00000 /*FL_BUTTONS*/)) {
-  if (!Fl::pushed()) {
-    // set belowmouse based on Fl::modal() and fl_xmousewin:
-    w = fl_xmousewin;
-    if (w) {
-      if (Fl::modal()) w = Fl::modal();
-      if (!w->contains(Fl::belowmouse())) {
-        int old_event = Fl::e_number;
-	w->handle(Fl::e_number = FL_ENTER);
-	Fl::e_number = old_event;
-	if (!w->contains(Fl::belowmouse())) Fl::belowmouse(w);
-      } else {
-	// send a FL_MOVE event so the enter/leave state is up to date
-	Fl::e_x = Fl::e_x_root-fl_xmousewin->x();
-	Fl::e_y = Fl::e_y_root-fl_xmousewin->y();
-        int old_event = Fl::e_number;
-	w->handle(Fl::e_number = FL_MOVE);
-	Fl::e_number = old_event;
-      }
-    } else {
-      Fl::belowmouse(0);
-      Fl_Tooltip::enter(0);
-    }
-  }
-}
-
-#if !(defined(WIN32) || defined(__APPLE__))
-extern Fl_Widget *fl_selection_requestor; // from Fl_x.cxx
-#endif
-
-// This function is called by ~Fl_Widget() and by Fl_Widget::deactivate()
-// and by Fl_Widget::hide().  It indicates that the widget does not want
-// to receive any more events, and also removes all global variables that
-// point at the widget.
-// I changed this from the 1.0.1 behavior, the older version could send
-// FL_LEAVE or FL_UNFOCUS events to the widget.  This appears to not be
-// desirable behavior and caused flwm to crash.
-
-void fl_throw_focus(Fl_Widget *o) {
-#ifdef DEBUG
-  printf("fl_throw_focus(o=%p)\n", o);
-#endif // DEBUG
-
-  if (o->contains(Fl::pushed())) Fl::pushed_ = 0;
-#if !(defined(WIN32) || defined(__APPLE__))
-  if (o->contains(fl_selection_requestor)) fl_selection_requestor = 0;
-#endif
-  if (o->contains(Fl::belowmouse())) Fl::belowmouse_ = 0;
-  if (o->contains(Fl::focus())) Fl::focus_ = 0;
-  if (o == fl_xfocus) fl_xfocus = 0;
-  if (o == Fl_Tooltip::current()) Fl_Tooltip::current(0);
-  if (o == fl_xmousewin) fl_xmousewin = 0;
-  Fl_Tooltip::exit(o);
-  fl_fix_focus();
-}
-
-////////////////////////////////////////////////////////////////
-
-// Find the first active_r() widget, starting at the widget wi and
-// walking up the widget hierarchy to the top level window.
-//
-// In other words: find_active() returns an active group that contains
-// the inactive widget and all inactive parent groups.
-//
-// This is used to send FL_SHORTCUT events to the Fl::belowmouse() widget
-// in case the target widget itself is inactive_r(). In this case the event
-// is sent to the first active_r() parent.
-//
-// This prevents sending events to inactive widgets that might get the
-// input focus otherwise. The search is fast and light and avoids calling
-// inactive_r() multiple times.
-// See STR #3216.
-//
-// Returns: first active_r() widget "above" the widget wi or NULL if
-// no widget is active. May return the top level window.
-
-static Fl_Widget *find_active(Fl_Widget *wi) {
-  Fl_Widget *found = 0;
-  for (; wi; wi = wi->parent()) {
-    if (wi->active()) {
-      if (!found) found = wi;
-    }
-    else found = 0;
-  }
-  return found;
-}
-
-////////////////////////////////////////////////////////////////
-
-// Call to->handle(), but first replace the mouse x/y with the correct
-// values to account for nested windows. 'window' is the outermost
-// window the event was posted to by the system:
-static int send_event(int event, Fl_Widget* to, Fl_Window* window) {
-  int dx, dy;
-  int old_event = Fl::e_number;
-  if (window) {
-    dx = window->x();
-    dy = window->y();
-  } else {
-    dx = dy = 0;
-  }
-  for (const Fl_Widget* w = to; w; w = w->parent())
-    if (w->type()>=FL_WINDOW) {dx -= w->x(); dy -= w->y();}
-  int save_x = Fl::e_x; Fl::e_x += dx;
-  int save_y = Fl::e_y; Fl::e_y += dy;
-  int ret = to->handle(Fl::e_number = event);
-  Fl::e_number = old_event;
-  Fl::e_y = save_y;
-  Fl::e_x = save_x;
-  return ret;
-}
-
-
-/**
- \brief Set a new event dispatch function.
-
- The event dispatch function is called after native events are converted to
- FLTK events, but before they are handled by FLTK. If the dispatch function
- Fl_Event_Dispatch \p d is set, it is up to the dispatch function to call
- Fl::handle_(int, Fl_Window*) or to ignore the event.
-
- The dispatch function itself must return 0 if it ignored the event,
- or non-zero if it used the event. If you call Fl::handle_(), then
- this will return the correct value.
-
- The event dispatch can be used to handle exceptions in FLTK events and
- callbacks before they reach the native event handler:
-
- \code
- int myHandler(int e, Fl_Window *w) {
-   try {
-     return Fl::handle_(e, w);
-   } catch () {
-     ...
-   }
- }
-
- main() {
-   Fl::event_dispatch(myHandler);
-   ...
-   Fl::run();
- }
- \endcode
-
- \param d new dispatch function, or NULL
- \see Fl::add_handler(Fl_Event_Handler)
- \see Fl::handle(int, Fl_Window*)
- \see Fl::handle_(int, Fl_Window*)
- */
-void Fl::event_dispatch(Fl_Event_Dispatch d)
-{
-  e_dispatch = d;
-}
-
-
-/**
- \brief Return the current event dispatch function.
- */
-Fl_Event_Dispatch Fl::event_dispatch()
-{
-  return e_dispatch;
-}
-
-
-/**
- \brief Handle events from the window system.
-
- This is called from the native event dispatch after native events have been
- converted to FLTK notation. This function calls Fl::handle_(int, Fl_Window*)
- unless the user sets a dispatch function. If a user dispatch function is set,
- the user must make sure that Fl::handle_() is called, or the event will be
- ignored.
-
- \param e the event type (Fl::event_number() is not yet set)
- \param window the window that caused this event
- \return 0 if the event was not handled
-
- \see Fl::add_handler(Fl_Event_Handler)
- \see Fl::event_dispatch(Fl_Event_Dispatch)
- */
-int Fl::handle(int e, Fl_Window* window)
-{
-  if (e_dispatch) {
-    return e_dispatch(e, window);
-  } else {
-    return handle_(e, window);
-  }
-}
-
-
-/**
- \brief Handle events from the window system.
-
- This function is called from the native event dispatch, unless the user sets
- another dispatch function. In that case, the user dispatch function must
- decide when to call Fl::handle_(int, Fl_Window*)
-
- \param e the event type (Fl::event_number() is not yet set)
- \param window the window that caused this event
- \return 0 if the event was not handled
-
- \see Fl::event_dispatch(Fl_Event_Dispatch)
- */
-int Fl::handle_(int e, Fl_Window* window)
-{
-  e_number = e;
-  if (fl_local_grab) return fl_local_grab(e);
-
-  Fl_Widget* wi = window;
-
-  switch (e) {
-
-  case FL_CLOSE:
-    if ( grab() || (modal() && window != modal()) ) return 0;
-    wi->do_callback();
-    return 1;
-
-  case FL_SHOW:
-    wi->Fl_Widget::show(); // this calls Fl_Widget::show(), not Fl_Window::show()
-    return 1;
-
-  case FL_HIDE:
-    wi->Fl_Widget::hide(); // this calls Fl_Widget::hide(), not Fl_Window::hide()
-    return 1;
-
-  case FL_PUSH:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    if (grab()) wi = grab();
-    else if (modal() && wi != modal()) return 0;
-    pushed_ = wi;
-    Fl_Tooltip::current(wi);
-    if (send_event(e, wi, window)) return 1;
-    // raise windows that are clicked on:
-    window->show();
-    return 1;
-
-  case FL_DND_ENTER:
-  case FL_DND_DRAG:
-    dnd_flag = 1;
-    break;
-
-  case FL_DND_LEAVE:
-    dnd_flag = 1;
-    belowmouse(0);
-    dnd_flag = 0;
-    return 1;
-
-  case FL_DND_RELEASE:
-    wi = belowmouse();
-    break;
-
-  case FL_MOVE:
-  case FL_DRAG:
-    fl_xmousewin = window; // this should already be set, but just in case.
-    if (pushed()) {
-      wi = pushed();
-      if (grab()) wi = grab();
-      e_number = e = FL_DRAG;
-      break;
-    }
-    if (modal() && wi != modal()) wi = 0;
-    if (grab()) wi = grab();
-    { int ret;
-      Fl_Widget* pbm = belowmouse();
-#ifdef __APPLE__
-      if (fl_mac_os_version < 100500) {
-        // before 10.5, mouse moved events aren't sent to borderless windows such as tooltips
-	Fl_Window *tooltip = Fl_Tooltip::current_window();
-	int inside = 0;
-	if (tooltip && tooltip->shown() ) { // check if a tooltip window is currently opened
-	  // check if mouse is inside the tooltip
-	  inside = (Fl::event_x_root() >= tooltip->x() && Fl::event_x_root() < tooltip->x() + tooltip->w() &&
-	  Fl::event_y_root() >= tooltip->y() && Fl::event_y_root() < tooltip->y() + tooltip->h() );
-	}
-	// if inside, send event to tooltip window instead of background window
-	if (inside) ret = send_event(e, tooltip, window);
-	else ret = (wi && send_event(e, wi, window));
-      } else
-#endif
-      ret = (wi && send_event(e, wi, window));
-   if (pbm != belowmouse()) {
-#ifdef DEBUG
-      printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-      Fl_Tooltip::enter(belowmouse());
-    }
-    return ret;}
-
-  case FL_RELEASE: {
-//    printf("FL_RELEASE: window=%p, pushed() = %p, grab() = %p, modal() = %p\n",
-//           window, pushed(), grab(), modal());
-
-    if (grab()) {
-      wi = grab();
-      pushed_ = 0; // must be zero before callback is done!
-    } else if (pushed()) {
-      wi = pushed();
-      pushed_ = 0; // must be zero before callback is done!
-    } else if (modal() && wi != modal()) return 0;
-    int r = send_event(e, wi, window);
-    fl_fix_focus();
-    return r;}
-
-  case FL_UNFOCUS:
-    window = 0;
-  case FL_FOCUS:
-    fl_xfocus = window;
-    fl_fix_focus();
-    return 1;
-
-  case FL_KEYUP:
-    // Send the key-up to the current focus widget. This is not
-    // always the same widget that received the corresponding
-    // FL_KEYBOARD event because focus may have changed.
-    // Sending the KEYUP to the right KEYDOWN is possible, but
-    // would require that we track the KEYDOWN for every possible
-    // key stroke (users may hold down multiple keys!) and then
-    // make sure that the widget still exists before sending
-    // a KEYUP there. I believe that the current solution is
-    // "close enough".
-    for (wi = grab() ? grab() : focus(); wi; wi = wi->parent())
-      if (send_event(FL_KEYUP, wi, window)) return 1;
-    return 0;
-
-  case FL_KEYBOARD:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    Fl_Tooltip::enter((Fl_Widget*)0);
-
-    fl_xfocus = window; // this should not happen!  But maybe it does:
-
-    // Try it as keystroke, sending it to focus and all parents:
-    for (wi = grab() ? grab() : focus(); wi; wi = wi->parent())
-      if (send_event(FL_KEYBOARD, wi, window)) return 1;
-
-    // recursive call to try shortcut:
-    if (handle(FL_SHORTCUT, window)) return 1;
-
-    // and then try a shortcut with the case of the text swapped, by
-    // changing the text and falling through to FL_SHORTCUT case:
-    {unsigned char* c = (unsigned char*)event_text(); // cast away const
-    if (!isalpha(*c)) return 0;
-    *c = isupper(*c) ? tolower(*c) : toupper(*c);}
-    e_number = e = FL_SHORTCUT;
-
-  case FL_SHORTCUT:
-    if (grab()) {wi = grab(); break;} // send it to grab window
-
-    // Try it as shortcut, sending to mouse widget and all parents:
-    wi = find_active(belowmouse()); // STR #3216
-    if (!wi) {
-      wi = modal();
-      if (!wi) wi = window;
-    } else if (wi->window() != first_window()) {
-      if (send_event(FL_SHORTCUT, first_window(), first_window())) return 1;
-    }
-
-    for (; wi; wi = wi->parent()) {
-      if (send_event(FL_SHORTCUT, wi, wi->window())) return 1;
-    }
-
-    // try using add_handle() functions:
-    if (send_handlers(FL_SHORTCUT)) return 1;
-
-    // make Escape key close windows:
-    if (event_key()==FL_Escape) {
-      wi = modal(); if (!wi) wi = window;
-      wi->do_callback();
-      return 1;
-    }
-
-    return 0;
-
-  case FL_ENTER:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    fl_xmousewin = window;
-    fl_fix_focus();
-    Fl_Tooltip::enter(belowmouse());
-    return 1;
-
-  case FL_LEAVE:
-#ifdef DEBUG
-    printf("Fl::handle(e=%d, window=%p);\n", e, window);
-#endif // DEBUG
-
-    if (!pushed_) {
-      belowmouse(0);
-      Fl_Tooltip::enter(0);
-    }
-    if (window == fl_xmousewin) {fl_xmousewin = 0; fl_fix_focus();}
-    return 1;
-
-  case FL_MOUSEWHEEL:
-    fl_xfocus = window; // this should not happen!  But maybe it does:
-
-    // Try sending it to the "grab" first
-    if (grab() && grab()!=modal() && grab()!=window) {
-      if (send_event(FL_MOUSEWHEEL, grab(), window)) return 1;
-    }
-    // Now try sending it to the "modal" window
-    if (modal()) {
-      send_event(FL_MOUSEWHEEL, modal(), window);
-      return 1;
-    }
-    // Finally try sending it to the window, the event occured in
-    if (send_event(FL_MOUSEWHEEL, window, window)) return 1;
-  default:
-    break;
-  }
-  if (wi && send_event(e, wi, window)) {
-    dnd_flag = 0;
-    return 1;
-  }
-  dnd_flag = 0;
-  return send_handlers(e);
-}
-
-////////////////////////////////////////////////////////////////
-// hide() destroys the X window, it does not do unmap!
-
-#if defined(WIN32)
-extern void fl_clipboard_notify_retarget(HWND wnd);
-extern void fl_update_clipboard(void);
-#elif USE_XFT
-extern void fl_destroy_xft_draw(Window);
-#endif
-
-void Fl_Window::hide() {
-#ifdef WIN32
-  // STR#3079: if there remains a window and a non-modal window, and the window is deleted,
-  // the app remains running without any apparent window.
-  // Bug mechanism: hiding an owner window unmaps the owned (non-modal) window(s)
-  // but does not delete it(them) in FLTK.
-  // Fix for it: 
-  // when hiding a window, build list of windows it owns, and do hide/show on them.
-  int count = 0;
-  Fl_Window *win, **doit = NULL;
-  for (win = Fl::first_window(); win && i; win = Fl::next_window(win)) {
-    if (win->non_modal() && GetWindow(fl_xid(win), GW_OWNER) == i->xid) {
-      count++;
-    }
-  }
-  if (count) {
-    doit = new Fl_Window*[count];
-    count = 0;
-    for (win = Fl::first_window(); win && i; win = Fl::next_window(win)) {
-      if (win->non_modal() && GetWindow(fl_xid(win), GW_OWNER) == i->xid) {
-	doit[count++] = win;
-      }
-    }
-  }
-#endif
-  clear_visible();
-
-  if (!shown()) return;
-
-  // remove from the list of windows:
-  Fl_X* ip = i;
-  Fl_X** pp = &Fl_X::first;
-  for (; *pp != ip; pp = &(*pp)->next) if (!*pp) return;
-  *pp = ip->next;
-#ifdef __APPLE__
-  // MacOS X manages a single pointer per application. Make sure that hiding
-  // a toplevel window will not leave us with some random pointer shape, or
-  // worst case, an invisible pointer
-  if (!parent()) cursor(FL_CURSOR_DEFAULT);
-#endif
-  i = 0;
-
-  // recursively remove any subwindows:
-  for (Fl_X *wi = Fl_X::first; wi;) {
-    Fl_Window* W = wi->w;
-    if (W->window() == this) {
-      W->hide();
-      W->set_visible();
-      wi = Fl_X::first;
-    } else wi = wi->next;
-  }
-
-  if (this == Fl::modal_) { // we are closing the modal window, find next one:
-    Fl_Window* W;
-    for (W = Fl::first_window(); W; W = Fl::next_window(W))
-      if (W->modal()) break;
-    Fl::modal_ = W;
-  }
-
-  // Make sure no events are sent to this window:
-  fl_throw_focus(this);
-  handle(FL_HIDE);
-
-#if defined(WIN32)
-  // make sure any custom icons get freed
-  icons(NULL, 0);
-  // this little trick keeps the current clipboard alive, even if we are about
-  // to destroy the window that owns the selection.
-  if (GetClipboardOwner()==ip->xid)
-    fl_update_clipboard();
-  // Make sure we unlink this window from the clipboard chain
-  fl_clipboard_notify_retarget(ip->xid);
-  // Send a message to myself so that I'll get out of the event loop...
-  PostMessage(ip->xid, WM_APP, 0, 0);
-  if (ip->private_dc) fl_release_dc(ip->xid, ip->private_dc);
-    if (ip->xid == fl_window && fl_gc) {
-      fl_release_dc(fl_window, fl_gc);
-      fl_window = (HWND)-1;
-      fl_gc = 0;
-# ifdef FLTK_USE_CAIRO
-      if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0);
-# endif
-    }
-#elif defined(__APPLE_QUARTZ__)
-  Fl_X::q_release_context(ip);
-  if ( ip->xid == fl_window )
-    fl_window = 0;
-#endif
-
-  if (ip->region) XDestroyRegion(ip->region);
-
-#if defined(USE_X11)
-# if USE_XFT
-  fl_destroy_xft_draw(ip->xid);
-# endif
-  // this test makes sure ip->xid has not been destroyed already
-  if (ip->xid) XDestroyWindow(fl_display, ip->xid);
-#elif defined(WIN32)
-  // this little trickery seems to avoid the popup window stacking problem
-  HWND p = GetForegroundWindow();
-  if (p==GetParent(ip->xid)) {
-    ShowWindow(ip->xid, SW_HIDE);
-    ShowWindow(p, SW_SHOWNA);
-  }
-  XDestroyWindow(fl_display, ip->xid);
-  // end of fix for STR#3079
-  if (count) {
-    int ii;
-    for (ii = 0; ii < count; ii++)  doit[ii]->hide();
-    for (ii = 0; ii < count; ii++)  {
-      if (ii != 0) doit[0]->show(); // Fix for STR#3165
-      doit[ii]->show();
-    }
-    delete[] doit;
-  }
-#elif defined(__APPLE_QUARTZ__)
-  ip->destroy();
-#else
-# error unsupported platform
-#endif
-
-#ifdef WIN32
-  // Try to stop the annoying "raise another program" behavior
-  if (non_modal() && Fl::first_window() && Fl::first_window()->shown())
-    Fl::first_window()->show();
-#endif
-  delete ip;
-}
-
-
-// FL_SHOW and FL_HIDE are called whenever the visibility of this widget
-// or any parent changes.  We must correctly map/unmap the system's window.
-
-// For top-level windows it is assumed the window has already been
-// mapped or unmapped!!!  This is because this should only happen when
-// Fl_Window::show() or Fl_Window::hide() is called, or in response to
-// iconize/deiconize events from the system.
-
-int Fl_Window::handle(int ev)
-{
-  if (parent()) {
-    switch (ev) {
-    case FL_SHOW:
-      if (!shown()) show();
-      else {
-#if defined(USE_X11) || defined(WIN32)
-        XMapWindow(fl_display, fl_xid(this)); // extra map calls are harmless
-#elif defined(__APPLE_QUARTZ__)
-	i->map();
-#else
-# error unsupported platform
-#endif // __APPLE__
-      }
-      break;
-    case FL_HIDE:
-      if (shown()) {
-	// Find what really turned invisible, if it was a parent window
-	// we do nothing.  We need to avoid unnecessary unmap calls
-	// because they cause the display to blink when the parent is
-	// remapped.  However if this or any intermediate non-window
-	// widget has really had hide() called directly on it, we must
-	// unmap because when the parent window is remapped we don't
-	// want to reappear.
-	if (visible()) {
-	 Fl_Widget* p = parent(); for (;p->visible();p = p->parent()) {}
-	 if (p->type() >= FL_WINDOW) break; // don't do the unmap
-	}
-#if defined(USE_X11) || defined(WIN32)
-	XUnmapWindow(fl_display, fl_xid(this));
-#elif defined(__APPLE_QUARTZ__)
-	i->unmap();
-#else
-# error platform unsupported
-#endif
-      }
-      break;
-    }
-//  } else if (ev == FL_FOCUS || ev == FL_UNFOCUS) {
-//    Fl_Tooltip::exit(Fl_Tooltip::current());
-  }
-
-  return Fl_Group::handle(ev);
-}
-
-////////////////////////////////////////////////////////////////
-// Back compatibility cut & paste functions for fltk 1.1 only:
-
-/** Back-compatibility only: The single-argument call can be used to
-    move the selection to another widget or to set the owner to
-    NULL, without changing the actual text of the
-    selection. FL_SELECTIONCLEAR is sent to the previous
-    selection owner, if any.
-
-    <i>Copying the buffer every time the selection is changed is
-    obviously wasteful, especially for large selections.  An interface will
-    probably be added in a future version to allow the selection to be made
-    by a callback function.  The current interface will be emulated on top
-    of this.</i>
-*/
-void Fl::selection_owner(Fl_Widget *owner) {selection_owner_ = owner;}
-
-/**
-  Changes the current selection.  The block of text is
-  copied to an internal buffer by FLTK (be careful if doing this in
-  response to an FL_PASTE as this \e may be the same buffer
-  returned by event_text()).  The selection_owner()
-  widget is set to the passed owner.
-*/
-void Fl::selection(Fl_Widget &owner, const char* text, int len) {
-  selection_owner_ = &owner;
-  Fl::copy(text, len, 0);
-}
-
-/** Backward compatibility only.
-  This calls Fl::paste(receiver, 0);
-  \see Fl::paste(Fl_Widget &receiver, int clipboard, const char* type)
-*/
-void Fl::paste(Fl_Widget &receiver) {
-  Fl::paste(receiver, 0);
-}
-#if FLTK_ABI_VERSION >= 10303
-#elif !defined(FL_DOXYGEN)
-void Fl::paste(Fl_Widget &receiver, int source)
-{
-  Fl::paste(receiver, source, Fl::clipboard_plain_text);
-}
-
-void Fl::copy(const char* stuff, int len, int destination) {
-  Fl::copy(stuff, len, destination, Fl::clipboard_plain_text);
-}
-
-#endif
-////////////////////////////////////////////////////////////////
-
-#include <FL/fl_draw.H>
-
-void Fl_Widget::redraw() {
-  damage(FL_DAMAGE_ALL);
-}
-
-void Fl_Widget::redraw_label() {
-  if (window()) {
-    if (box() == FL_NO_BOX) {
-      // Widgets with the FL_NO_BOX boxtype need a parent to
-      // redraw, since it is responsible for redrawing the
-      // background...
-      int X = x() > 0 ? x() - 1 : 0;
-      int Y = y() > 0 ? y() - 1 : 0;
-      window()->damage(FL_DAMAGE_ALL, X, Y, w() + 2, h() + 2);
-    }
-
-    if (align() && !(align() & FL_ALIGN_INSIDE) && window()->shown()) {
-      // If the label is not inside the widget, compute the location of
-      // the label and redraw the window within that bounding box...
-      int W = 0, H = 0;
-      label_.measure(W, H);
-      W += 5; // Add a little to the size of the label to cover overflow
-      H += 5;
-
-      // FIXME:
-      // This assumes that measure() returns the correct outline, which it does
-      // not in all possible cases of alignment combinedwith image and symbols.
-      switch (align() & 0x0f) {
-        case FL_ALIGN_TOP_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x(), y()-H, W, H); break;
-        case FL_ALIGN_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+(w()-W)/2, y()-H, W, H); break;
-        case FL_ALIGN_TOP_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w()-W, y()-H, W, H); break;
-        case FL_ALIGN_LEFT_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y(), W, H); break;
-        case FL_ALIGN_RIGHT_TOP:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y(), W, H); break;
-        case FL_ALIGN_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y()+(h()-H)/2, W, H); break;
-        case FL_ALIGN_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y()+(h()-H)/2, W, H); break;
-        case FL_ALIGN_LEFT_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()-W, y()+h()-H, W, H); break;
-        case FL_ALIGN_RIGHT_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w(), y()+h()-H, W, H); break;
-        case FL_ALIGN_BOTTOM_LEFT:
-          window()->damage(FL_DAMAGE_EXPOSE, x(), y()+h(), W, H); break;
-        case FL_ALIGN_BOTTOM:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+(w()-W)/2, y()+h(), W, H); break;
-        case FL_ALIGN_BOTTOM_RIGHT:
-          window()->damage(FL_DAMAGE_EXPOSE, x()+w()-W, y()+h(), W, H); break;
-        default:
-          window()->damage(FL_DAMAGE_ALL); break;
-      }
-    } else {
-      // The label is inside the widget, so just redraw the widget itself...
-      damage(FL_DAMAGE_ALL);
-    }
-  }
-}
-
-void Fl_Widget::damage(uchar fl) {
-  if (type() < FL_WINDOW) {
-    // damage only the rectangle covered by a child widget:
-    damage(fl, x(), y(), w(), h());
-  } else {
-    // damage entire window by deleting the region:
-    Fl_X* i = Fl_X::i((Fl_Window*)this);
-    if (!i) return; // window not mapped, so ignore it
-    if (i->region) {XDestroyRegion(i->region); i->region = 0;}
-    damage_ |= fl;
-    Fl::damage(FL_DAMAGE_CHILD);
-  }
-}
-
-void Fl_Widget::damage(uchar fl, int X, int Y, int W, int H) {
-  Fl_Widget* wi = this;
-  // mark all parent widgets between this and window with FL_DAMAGE_CHILD:
-  while (wi->type() < FL_WINDOW) {
-    wi->damage_ |= fl;
-    wi = wi->parent();
-    if (!wi) return;
-    fl = FL_DAMAGE_CHILD;
-  }
-  Fl_X* i = Fl_X::i((Fl_Window*)wi);
-  if (!i) return; // window not mapped, so ignore it
-
-  // clip the damage to the window and quit if none:
-  if (X < 0) {W += X; X = 0;}
-  if (Y < 0) {H += Y; Y = 0;}
-  if (W > wi->w()-X) W = wi->w()-X;
-  if (H > wi->h()-Y) H = wi->h()-Y;
-  if (W <= 0 || H <= 0) return;
-
-  if (!X && !Y && W==wi->w() && H==wi->h()) {
-    // if damage covers entire window delete region:
-    wi->damage(fl);
-    return;
-  }
-
-  if (wi->damage()) {
-    // if we already have damage we must merge with existing region:
-    if (i->region) {
-#if defined(USE_X11)
-      XRectangle R;
-      R.x = X; R.y = Y; R.width = W; R.height = H;
-      XUnionRectWithRegion(&R, i->region, i->region);
-#elif defined(WIN32)
-      Fl_Region R = XRectangleRegion(X, Y, W, H);
-      CombineRgn(i->region, i->region, R, RGN_OR);
-      XDestroyRegion(R);
-#elif defined(__APPLE_QUARTZ__)
-      CGRect arg = fl_cgrectmake_cocoa(X, Y, W, H);
-      int j; // don't add a rectangle totally inside the Fl_Region
-      for(j = 0; j < i->region->count; j++) {
-        if(CGRectContainsRect(i->region->rects[j], arg)) break;
-      }
-      if( j >= i->region->count) {
-        i->region->rects = (CGRect*)realloc(i->region->rects, (++(i->region->count)) * sizeof(CGRect));
-        i->region->rects[i->region->count - 1] = arg;
-      }
-#else
-# error unsupported platform
-#endif
-    }
-    wi->damage_ |= fl;
-  } else {
-    // create a new region:
-    if (i->region) XDestroyRegion(i->region);
-    i->region = XRectangleRegion(X,Y,W,H);
-    wi->damage_ = fl;
-  }
-  Fl::damage(FL_DAMAGE_CHILD);
-}
-void Fl_Window::flush() {
-  if (!shown()) return;
-  make_current();
-//if (damage() == FL_DAMAGE_EXPOSE && can_boxcheat(box())) fl_boxcheat = this;
-  fl_clip_region(i->region); i->region = 0;
-  draw();
-}
-
-#ifdef WIN32
-#  include "Fl_win32.cxx"
-//#elif defined(__APPLE__)
-#endif
-
-
-//
-// The following methods allow callbacks to schedule the deletion of
-// widgets at "safe" times.
-//
-
-
-static int		num_dwidgets = 0, alloc_dwidgets = 0;
-static Fl_Widget	**dwidgets = 0;
-
-
-/**
-  Schedules a widget for deletion at the next call to the event loop.
-  Use this method to delete a widget inside a callback function.
-
-  To avoid early deletion of widgets, this function should be called
-  toward the end of a callback and only after any call to the event
-  loop (Fl::wait(), Fl::flush(), Fl::check(), fl_ask(), etc.).
-
-  When deleting groups or windows, you must only delete the group or
-  window widget and not the individual child widgets.
-
-  \since FLTK 1.3.4 the widget will be hidden immediately, but the actual
-  destruction will be delayed until the event loop is finished. Up to
-  FLTK 1.3.3 windows wouldn't be hidden before the event loop was done,
-  hence you had to hide() a window in your window close callback if
-  you called Fl::delete_widget() to destroy (and hide) the window.
-
-  \since FLTK 1.3.0 it is not necessary to remove widgets from their parent
-  groups or windows before calling this, because it will be done in the
-  widget's destructor, but it is not a failure to do this nevertheless.
-
-  \note In FLTK 1.1 you \b must remove widgets from their parent group
-  (or window) before deleting them.
-
-  \see Fl_Widget::~Fl_Widget()
-*/
-void Fl::delete_widget(Fl_Widget *wi) {
-  if (!wi) return;
-
-  // if the widget is shown(), hide() it (FLTK 1.3.4)
-  if (wi->visible_r()) wi->hide();
-  Fl_Window *win = wi->as_window();
-  if (win && win->shown()) win->hide(); // case of iconified window
-
-  // don't add the same widget twice to the widget delete list
-  for (int i = 0; i < num_dwidgets; i++) {
-    if (dwidgets[i]==wi) return;
-  }
-
-  if (num_dwidgets >= alloc_dwidgets) {
-    Fl_Widget	**temp;
-
-    temp = new Fl_Widget *[alloc_dwidgets + 10];
-    if (alloc_dwidgets) {
-      memcpy(temp, dwidgets, alloc_dwidgets * sizeof(Fl_Widget *));
-      delete[] dwidgets;
-    }
-
-    dwidgets = temp;
-    alloc_dwidgets += 10;
-  }
-
-  dwidgets[num_dwidgets] = wi;
-  num_dwidgets ++;
-}
-
-
-/**
-    Deletes widgets previously scheduled for deletion.
-
-    This is for internal use only. You should never call this directly.
-
-    Fl::do_widget_deletion() is called from the FLTK event loop or whenever
-    you call Fl::wait(). The previously scheduled widgets are deleted in the
-    same order they were scheduled by calling Fl::delete_widget().
-
-    \see Fl::delete_widget(Fl_Widget *wi)
-*/
-void Fl::do_widget_deletion() {
-  if (!num_dwidgets) return;
-
-  for (int i = 0; i < num_dwidgets; i ++)
-    delete dwidgets[i];
-
-  num_dwidgets = 0;
-}
-
-
-static Fl_Widget ***widget_watch = 0;
-static int num_widget_watch = 0;
-static int max_widget_watch = 0;
-
-
-/**
-  Adds a widget pointer to the widget watch list.
-
-  \note Internal use only, please use class Fl_Widget_Tracker instead.
-
-  This can be used, if it is possible that a widget might be deleted during
-  a callback or similar function. The widget pointer must be added to the
-  watch list before calling the callback. After the callback the widget
-  pointer can be queried, if it is NULL. \e If it is NULL, then the widget has been
-  deleted during the callback and must not be accessed anymore. If the widget
-  pointer is \e not NULL, then the widget has not been deleted and can be accessed
-  safely.
-
-  After accessing the widget, the widget pointer must be released from the
-  watch list by calling Fl::release_widget_pointer().
-
-  Example for a button that is clicked (from its handle() method):
-  \code
-    Fl_Widget *wp = this;		// save 'this' in a pointer variable
-    Fl::watch_widget_pointer(wp);	// add the pointer to the watch list
-    set_changed();			// set the changed flag
-    do_callback();			// call the callback
-    if (!wp) {				// the widget has been deleted
-
-      // DO NOT ACCESS THE DELETED WIDGET !
-
-    } else {				// the widget still exists
-      clear_changed();			// reset the changed flag
-    }
-
-    Fl::release_widget_pointer(wp);	// remove the pointer from the watch list
-   \endcode
-
-   This works, because all widgets call Fl::clear_widget_pointer() in their
-   destructors.
-
-   \see Fl::release_widget_pointer()
-   \see Fl::clear_widget_pointer()
-
-   An easier and more convenient method to control widget deletion during
-   callbacks is to use the class Fl_Widget_Tracker with a local (automatic)
-   variable.
-
-   \see class Fl_Widget_Tracker
-*/
-void Fl::watch_widget_pointer(Fl_Widget *&w)
-{
-  Fl_Widget **wp = &w;
-  int i;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i]==wp) return;
-  }
-  if (num_widget_watch==max_widget_watch) {
-    max_widget_watch += 8;
-    widget_watch = (Fl_Widget***)realloc(widget_watch, sizeof(Fl_Widget**)*max_widget_watch);
-  }
-  widget_watch[num_widget_watch++] = wp;
-#ifdef DEBUG_WATCH
-  printf ("\nwatch_widget_pointer:   (%d/%d) %8p => %8p\n",
-    num_widget_watch,num_widget_watch,wp,*wp);
-  fflush(stdout);
-#endif // DEBUG_WATCH
-}
-
-
-/**
-  Releases a widget pointer from the watch list.
-
-  This is used to remove a widget pointer that has been added to the watch list
-  with Fl::watch_widget_pointer(), when it is not needed anymore.
-
-  \note Internal use only, please use class Fl_Widget_Tracker instead.
-
-  \see Fl::watch_widget_pointer()
-*/
-void Fl::release_widget_pointer(Fl_Widget *&w)
-{
-  Fl_Widget **wp = &w;
-  int i,j=0;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i]!=wp) {
-      if (j<i) widget_watch[j] = widget_watch[i]; // fill gap
-      j++;
-    }
-#ifdef DEBUG_WATCH
-    else { // found widget pointer
-      printf ("release_widget_pointer: (%d/%d) %8p => %8p\n",
-	i+1,num_widget_watch,wp,*wp);
-    }
-#endif //DEBUG_WATCH
-  }
-  num_widget_watch = j;
-#ifdef DEBUG_WATCH
-  printf ("                        num_widget_watch = %d\n\n",num_widget_watch);
-  fflush(stdout);
-#endif // DEBUG_WATCH
-  return;
-}
-
-
-/**
-  Clears a widget pointer \e in the watch list.
-
-  This is called when a widget is destroyed (by its destructor). You should never
-  call this directly.
-
-  \note Internal use only !
-
-  This method searches the widget watch list for pointers to the widget and
-  clears each pointer that points to it. Widget pointers can be added to the
-  widget watch list by calling Fl::watch_widget_pointer() or by using the
-  helper class Fl_Widget_Tracker (recommended).
-
-  \see Fl::watch_widget_pointer()
-  \see class Fl_Widget_Tracker
-*/
-void Fl::clear_widget_pointer(Fl_Widget const *w)
-{
-  if (w==0L) return;
-  int i;
-  for (i=0; i<num_widget_watch; ++i) {
-    if (widget_watch[i] && *widget_watch[i]==w) {
-      *widget_watch[i] = 0L;
-    }
-  }
-}
-
-
-/**
- \brief FLTK library options management.
-
- This function needs to be documented in more detail. It can be used for more
- optional settings, such as using a native file chooser instead of the FLTK one
- wherever possible, disabling tooltips, disabling visible focus, disabling
- FLTK file chooser preview, etc. .
-
- There should be a command line option interface.
-
- There should be an application that manages options system wide, per user, and
- per application.
-
- Example:
- \code
-     if ( Fl::option(Fl::OPTION_ARROW_FOCUS) )
-         { ..on..  }
-     else
-         { ..off..  }
- \endcode
-
- \note As of FLTK 1.3.0, options can be managed within fluid, using the menu
- <i>Edit/Global FLTK Settings</i>.
-
- \param opt which option
- \return true or false
- \see enum Fl::Fl_Option
- \see Fl::option(Fl_Option, bool)
-
- \since FLTK 1.3.0
- */
-bool Fl::option(Fl_Option opt)
-{
-  if (!options_read_) {
-    int tmp;
-    { // first, read the system wide preferences
-      Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
-      Fl_Preferences opt_prefs(prefs, "options");
-      opt_prefs.get("ArrowFocus", tmp, 0);                      // default: off
-      options_[OPTION_ARROW_FOCUS] = tmp;
-      //opt_prefs.get("NativeFilechooser", tmp, 1);             // default: on
-      //options_[OPTION_NATIVE_FILECHOOSER] = tmp;
-      //opt_prefs.get("FilechooserPreview", tmp, 1);            // default: on
-      //options_[OPTION_FILECHOOSER_PREVIEW] = tmp;
-      opt_prefs.get("VisibleFocus", tmp, 1);                    // default: on
-      options_[OPTION_VISIBLE_FOCUS] = tmp;
-      opt_prefs.get("DNDText", tmp, 1);                         // default: on
-      options_[OPTION_DND_TEXT] = tmp;
-      opt_prefs.get("ShowTooltips", tmp, 1);                    // default: on
-      options_[OPTION_SHOW_TOOLTIPS] = tmp;
-      opt_prefs.get("FNFCUsesGTK", tmp, 1);                    // default: on
-      options_[OPTION_FNFC_USES_GTK] = tmp;
-    }
-    { // next, check the user preferences
-      // override system options only, if the option is set ( >= 0 )
-      Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
-      Fl_Preferences opt_prefs(prefs, "options");
-      opt_prefs.get("ArrowFocus", tmp, -1);
-      if (tmp >= 0) options_[OPTION_ARROW_FOCUS] = tmp;
-      //opt_prefs.get("NativeFilechooser", tmp, -1);
-      //if (tmp >= 0) options_[OPTION_NATIVE_FILECHOOSER] = tmp;
-      //opt_prefs.get("FilechooserPreview", tmp, -1);
-      //if (tmp >= 0) options_[OPTION_FILECHOOSER_PREVIEW] = tmp;
-      opt_prefs.get("VisibleFocus", tmp, -1);
-      if (tmp >= 0) options_[OPTION_VISIBLE_FOCUS] = tmp;
-      opt_prefs.get("DNDText", tmp, -1);
-      if (tmp >= 0) options_[OPTION_DND_TEXT] = tmp;
-      opt_prefs.get("ShowTooltips", tmp, -1);
-      if (tmp >= 0) options_[OPTION_SHOW_TOOLTIPS] = tmp;
-      opt_prefs.get("FNFCUsesGTK", tmp, -1);
-      if (tmp >= 0) options_[OPTION_FNFC_USES_GTK] = tmp;
-    }
-    { // now, if the developer has registered this app, we could as for per-application preferences
-    }
-    options_read_ = 1;
-  }
-  if (opt<0 || opt>=OPTION_LAST)
-    return false;
-  return (bool)(options_[opt]!=0);
-}
-
-/**
- \brief Override an option while the application is running.
-
- This function does not change any system or user settings.
-
- Example:
- \code
-     Fl::option(Fl::OPTION_ARROW_FOCUS, true);     // on
-     Fl::option(Fl::OPTION_ARROW_FOCUS, false);    // off
- \endcode
-
- \param opt which option
- \param val set to true or false
- \see enum Fl::Fl_Option
- \see bool Fl::option(Fl_Option)
- */
-void Fl::option(Fl_Option opt, bool val)
-{
-  if (opt<0 || opt>=OPTION_LAST)
-    return;
-  if (!options_read_) {
-    // first read this option, so we don't override our setting later
-    option(opt);
-  }
-  options_[opt] = val;
-}
-
-
-// Helper class Fl_Widget_Tracker
-
-/**
-  The constructor adds a widget to the watch list.
-*/
-Fl_Widget_Tracker::Fl_Widget_Tracker(Fl_Widget *wi)
-{
-  wp_ = wi;
-  Fl::watch_widget_pointer(wp_); // add pointer to watch list
-}
-
-/**
-  The destructor removes a widget from the watch list.
-*/
-Fl_Widget_Tracker::~Fl_Widget_Tracker()
-{
-  Fl::release_widget_pointer(wp_); // remove pointer from watch list
-}
-
-int Fl::use_high_res_GL_ = 0;
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Adjuster.cxx
+++ /dev/null
@@ -1,173 +1,0 @@
-//
-// "$Id$"
-//
-// Adjuster widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Adjuster.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/fl_draw.H>
-
-#include "fastarrow.h"
-static Fl_Bitmap fastarrow(fastarrow_bits, fastarrow_width, fastarrow_height);
-#include "mediumarrow.h"
-static Fl_Bitmap mediumarrow(mediumarrow_bits, mediumarrow_width, mediumarrow_height);
-#include "slowarrow.h"
-static Fl_Bitmap slowarrow(slowarrow_bits, slowarrow_width, slowarrow_height);
-
-// changing the value does not change the appearance:
-void Fl_Adjuster::value_damage() {}
-
-void Fl_Adjuster::draw() {
-  int dx, dy, W, H;
-  if (w()>=h()) {
-    dx = W = w()/3;
-    dy = 0; H = h();
-  } else {
-    dx = 0; W = w();
-    dy = H = h()/3;
-  }
-  draw_box(drag==1?FL_DOWN_BOX:box(), x(),  y()+2*dy, W, H, color());
-  draw_box(drag==2?FL_DOWN_BOX:box(), x()+dx, y()+dy, W, H, color());
-  draw_box(drag==3?FL_DOWN_BOX:box(), x()+2*dx,  y(), W, H, color());
-  if (active_r())
-    fl_color(selection_color());
-  else
-    fl_color(fl_inactive(selection_color()));
-  fastarrow.draw(x()+(W-fastarrow_width)/2,
-		 y()+2*dy+(H-fastarrow_height)/2, W, H);
-  mediumarrow.draw(x()+dx+(W-mediumarrow_width)/2,
-		   y()+dy+(H-mediumarrow_height)/2, W, H);
-  slowarrow.draw(x()+2*dx+(W-slowarrow_width)/2,
-		 y()+(H-slowarrow_width)/2, W, H);
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Adjuster::handle(int event) {
-  double v;
-  int delta;
-  int mx = Fl::event_x();
-  // Fl_Widget_Tracker wp(this);
-  switch (event) {
-    case FL_PUSH:
-      if (Fl::visible_focus()) Fl::focus(this);
-      ix = mx;
-      if (w()>=h())
-	drag = 3*(mx-x())/w() + 1;
-      else
-	drag = 3-3*(Fl::event_y()-y()-1)/h();
-      { Fl_Widget_Tracker wp(this);
-	handle_push();
-	if (wp.deleted()) return 1;
-      }
-      redraw();
-      return 1;
-    case FL_DRAG:
-      if (w() >= h()) {
-	delta = x()+(drag-1)*w()/3;	// left edge of button
-	if (mx < delta)
-	  delta = mx-delta;
-	else if (mx > (delta+w()/3)) // right edge of button
-	  delta = mx-delta-w()/3;
-	else
-	  delta = 0;
-      } else {
-	if (mx < x())
-	  delta = mx-x();
-	else if (mx > (x()+w()))
-	  delta = mx-x()-w();
-	else
-	  delta = 0;
-      }
-      switch (drag) {
-	case 3: v = increment(previous_value(), delta); break;
-	case 2: v = increment(previous_value(), delta*10); break;
-	default:v = increment(previous_value(), delta*100); break;
-      }
-      handle_drag(soft() ? softclamp(v) : clamp(v));
-      return 1;
-    case FL_RELEASE:
-      if (Fl::event_is_click()) { // detect click but no drag
-	if (Fl::event_state()&0xF0000) delta = -10;
-	else delta = 10;
-	switch (drag) {
-	  case 3: v = increment(previous_value(), delta); break;
-	  case 2: v = increment(previous_value(), delta*10); break;
-	  default:v = increment(previous_value(), delta*100); break;
-	}
-	Fl_Widget_Tracker wp(this);
-	handle_drag(soft() ? softclamp(v) : clamp(v));
-	if (wp.deleted()) return 1;
-      }
-      drag = 0;
-      redraw();
-      handle_release();
-      return 1;
-    case FL_KEYBOARD :
-      switch (Fl::event_key()) {
-	case FL_Up:
-          if (w() > h()) return 0;
-	  handle_drag(clamp(increment(value(),-1)));
-	  return 1;
-	case FL_Down:
-          if (w() > h()) return 0;
-	  handle_drag(clamp(increment(value(),1)));
-	  return 1;
-	case FL_Left:
-          if (w() < h()) return 0;
-	  handle_drag(clamp(increment(value(),-1)));
-	  return 1;
-	case FL_Right:
-          if (w() < h()) return 0;
-	  handle_drag(clamp(increment(value(),1)));
-	  return 1;
-	default:
-          return 0;
-      }
-      // break not required because of switch...
-
-    case FL_FOCUS:
-    case FL_UNFOCUS:
-      if (Fl::visible_focus()) {
-        redraw();
-        return 1;
-      } else return 0;
-
-    case FL_ENTER :
-    case FL_LEAVE :
-      return 1;
-  }
-  return 0;
-}
-
-/**
-  Creates a new Fl_Adjuster widget using the given position,
-  size, and label string. It looks best if one of the dimensions is 3
-  times the other.
-  <P> Inherited destructor destroys the Valuator.
-*/
-Fl_Adjuster::Fl_Adjuster(int X, int Y, int W, int H, const char* l)
-  : Fl_Valuator(X, Y, W, H, l) {
-  box(FL_UP_BOX);
-  step(1, 10000);
-  selection_color(FL_SELECTION_COLOR);
-  drag = 0;
-  soft_ = 1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_BMP_Image.cxx
+++ /dev/null
@@ -1,504 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_BMP_Image routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_BMP_Image::Fl_BMP_Image() - Load a BMP image file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_BMP_Image.H>
-#include <FL/fl_utf8.h>
-#include <FL/Fl.H>
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-
-//
-// BMP definitions...
-//
-
-#ifndef BI_RGB
-#  define BI_RGB       0             // No compression - straight BGR data
-#  define BI_RLE8      1             // 8-bit run-length compression
-#  define BI_RLE4      2             // 4-bit run-length compression
-#  define BI_BITFIELDS 3             // RGB bitmap with RGB masks
-#endif // !BI_RGB
-
-
-//
-// Local functions...
-//
-
-static int		read_long(FILE *fp);
-static unsigned short	read_word(FILE *fp);
-static unsigned int	read_dword(FILE *fp);
-
-
-/**
- The constructor loads the named BMP image from the given bmp filename.
-
- The destructor frees all memory and server resources that are used by
- the image.
-
- Use Fl_Image::fail() to check if Fl_BMP_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- BMP format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason.
- */
-Fl_BMP_Image::Fl_BMP_Image(const char *bmp) // I - File to read
-  : Fl_RGB_Image(0,0,0) {
-  FILE		*fp;		// File pointer
-  int		info_size,	// Size of info header
-		depth,		// Depth of image (bits)
-		bDepth = 3,	// Depth of image (bytes)
-		compression,	// Type of compression
-		colors_used,	// Number of colors used
-		x, y,		// Looping vars
-		color,		// Color of RLE pixel
-		repcount,	// Number of times to repeat
-		temp,		// Temporary color
-		align,		// Alignment bytes
-		dataSize,	// number of bytes in image data set
-		row_order,	// 1 = normal;  -1 = flipped row order
-		start_y,	// Beginning Y
-		end_y;		// Ending Y
-  long		offbits;	// Offset to image data
-  uchar		bit,		// Bit in image
-		byte;		// Byte in image
-  uchar		*ptr;		// Pointer into pixels
-  uchar		colormap[256][3];// Colormap
-  uchar		havemask;	// Single bit mask follows image data
-  int		use_5_6_5;	// Use 5:6:5 for R:G:B channels in 16 bit images
-
-
-  // Open the file...
-  if ((fp = fl_fopen(bmp, "rb")) == NULL) {
-    ld(ERR_FILE_ACCESS);
-    return;
-  }
-
-  // Get the header...
-  byte = (uchar)getc(fp);	// Check "BM" sync chars
-  bit  = (uchar)getc(fp);
-  if (byte != 'B' || bit != 'M') {
-    fclose(fp);
-    ld(ERR_FORMAT);
-    return;
-  }
-
-  read_dword(fp);		// Skip size
-  read_word(fp);		// Skip reserved stuff
-  read_word(fp);
-  offbits = (long)read_dword(fp);// Read offset to image data
-
-  // Then the bitmap information...
-  info_size = read_dword(fp);
-
-//  printf("offbits = %ld, info_size = %d\n", offbits, info_size);
-
-  havemask  = 0;
-  row_order = -1;
-  use_5_6_5 = 0;
-
-  if (info_size < 40) {
-    // Old Windows/OS2 BMP header...
-    w(read_word(fp));
-    h(read_word(fp));
-    read_word(fp);
-    depth = read_word(fp);
-    compression = BI_RGB;
-    colors_used = 0;
-
-    repcount = info_size - 12;
-  } else {
-    // New BMP header...
-    w(read_long(fp));
-    // If the height is negative, the row order is flipped
-    temp = read_long(fp);
-    if (temp < 0) row_order = 1;
-    h(abs(temp));
-    read_word(fp);
-    depth = read_word(fp);
-    compression = read_dword(fp);
-    dataSize = read_dword(fp);
-    read_long(fp);
-    read_long(fp);
-    colors_used = read_dword(fp);
-    read_dword(fp);
-
-    repcount = info_size - 40;
-
-    if (!compression && depth>=8 && w()>32/depth) {
-      int Bpp = depth/8;
-      int maskSize = (((w()*Bpp+3)&~3)*h()) + (((((w()+7)/8)+3)&~3)*h());
-      if (maskSize==2*dataSize) {
-        havemask = 1;
-	h(h()/2);
-	bDepth = 4;
-      }
-    }
-  }
-
-//  printf("w() = %d, h() = %d, depth = %d, compression = %d, colors_used = %d, repcount = %d\n",
-//         w(), h(), depth, compression, colors_used, repcount);
-
-  // Skip remaining header bytes...
-  while (repcount > 0) {
-    getc(fp);
-    repcount --;
-  }
-
-  // Check header data...
-  if (!w() || !h() || !depth) {
-    fclose(fp);
-    w(0); h(0); d(0); ld(ERR_FORMAT);
-    return;
-  }
-
-  // Get colormap...
-  if (colors_used == 0 && depth <= 8)
-    colors_used = 1 << depth;
-
-  for (repcount = 0; repcount < colors_used; repcount ++) {
-    // Read BGR color...
-    if (fread(colormap[repcount], 1, 3, fp)==0) { /* ignore */ }
-
-    // Skip pad byte for new BMP files...
-    if (info_size > 12) getc(fp);
-  }
-
-  // Read first dword of colormap. It tells us if 5:5:5 or 5:6:5 for 16 bit
-  if (depth == 16)
-    use_5_6_5 = (read_dword(fp) == 0xf800);
-
-  // Set byte depth for RGBA images
-  if (depth == 32)
-    bDepth=4;
-
-  // Setup image and buffers...
-  d(bDepth);
-  if (offbits) fseek(fp, offbits, SEEK_SET);
-
-  if (((size_t)w()) * h() * d() > max_size() ) {
-    Fl::warning("BMP file \"%s\" is too large!\n", bmp);
-    fclose(fp);
-    w(0); h(0); d(0); ld(ERR_FORMAT);
-    return;
-  }
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-
-  // Read the image data...
-  color = 0;
-  repcount = 0;
-  align = 0;
-  byte  = 0;
-  temp  = 0;
-
-  if (row_order < 0) {
-    start_y = h() - 1;
-    end_y   = -1;
-  } else {
-    start_y = 0;
-    end_y   = h();
-  }
-
-  for (y = start_y; y != end_y; y += row_order) {
-    ptr = (uchar *)array + y * w() * d();
-
-    switch (depth)
-    {
-      case 1 : // Bitmap
-          for (x = w(), bit = 128; x > 0; x --) {
-	    if (bit == 128) byte = (uchar)getc(fp);
-
-	    if (byte & bit) {
-	      *ptr++ = colormap[1][2];
-	      *ptr++ = colormap[1][1];
-	      *ptr++ = colormap[1][0];
-	    } else {
-	      *ptr++ = colormap[0][2];
-	      *ptr++ = colormap[0][1];
-	      *ptr++ = colormap[0][0];
-	    }
-
-	    if (bit > 1)
-	      bit >>= 1;
-	    else
-	      bit = 128;
-	  }
-
-          // Read remaining bytes to align to 32 bits...
-	  for (temp = (w() + 7) / 8; temp & 3; temp ++) {
-	    getc(fp);
-	  }
-          break;
-
-      case 4 : // 16-color
-          for (x = w(), bit = 0xf0; x > 0; x --) {
-	    // Get a new repcount as needed...
-	    if (repcount == 0) {
-              if (compression != BI_RLE4) {
-		repcount = 2;
-		color = -1;
-              } else {
-		while (align > 0) {
-	          align --;
-		  getc(fp);
-        	}
-
-		if ((repcount = getc(fp)) == 0) {
-		  if ((repcount = getc(fp)) == 0) {
-		    // End of line...
-                    x ++;
-		    continue;
-		  } else if (repcount == 1) {
-                    // End of image...
-		    break;
-		  } else if (repcount == 2) {
-		    // Delta...
-		    repcount = getc(fp) * getc(fp) * w();
-		    color = 0;
-		  } else {
-		    // Absolute...
-		    color = -1;
-		    align = ((4 - (repcount & 3)) / 2) & 1;
-		  }
-		} else {
-	          color = getc(fp);
-		}
-	      }
-	    }
-
-            // Get a new color as needed...
-	    repcount --;
-
-	    // Extract the next pixel...
-            if (bit == 0xf0) {
-	      // Get the next color byte as needed...
-              if (color < 0) temp = getc(fp);
-	      else temp = color;
-
-              // Copy the color value...
-	      *ptr++ = colormap[(temp >> 4) & 15][2];
-	      *ptr++ = colormap[(temp >> 4) & 15][1];
-	      *ptr++ = colormap[(temp >> 4) & 15][0];
-
-	      bit  = 0x0f;
-	    } else {
-	      bit  = 0xf0;
-
-              // Copy the color value...
-	      *ptr++ = colormap[temp & 15][2];
-	      *ptr++ = colormap[temp & 15][1];
-	      *ptr++ = colormap[temp & 15][0];
-	    }
-
-	  }
-
-	  if (!compression) {
-            // Read remaining bytes to align to 32 bits...
-	    for (temp = (w() + 1) / 2; temp & 3; temp ++) {
-	      getc(fp);
-	    }
-	  }
-          break;
-
-      case 8 : // 256-color
-          for (x = w(); x > 0; x --) {
-	    // Get a new repcount as needed...
-            if (compression != BI_RLE8) {
-	      repcount = 1;
-	      color = -1;
-            }
-
-	    if (repcount == 0) {
-	      while (align > 0) {
-	        align --;
-		getc(fp);
-              }
-
-	      if ((repcount = getc(fp)) == 0) {
-		if ((repcount = getc(fp)) == 0) {
-		  // End of line...
-                  x ++;
-		  continue;
-		} else if (repcount == 1) {
-		  // End of image...
-		  break;
-		} else if (repcount == 2) {
-		  // Delta...
-		  repcount = getc(fp) * getc(fp) * w();
-		  color = 0;
-		} else {
-		  // Absolute...
-		  color = -1;
-		  align = (2 - (repcount & 1)) & 1;
-		}
-	      } else {
-	        color = getc(fp);
-              }
-            }
-
-            // Get a new color as needed...
-            if (color < 0) temp = getc(fp);
-	    else temp = color;
-
-            repcount --;
-
-            // Copy the color value...
-	    *ptr++ = colormap[temp][2];
-	    *ptr++ = colormap[temp][1];
-	    *ptr++ = colormap[temp][0];
-	    if (havemask) ptr++;
-	  }
-
-	  if (!compression) {
-            // Read remaining bytes to align to 32 bits...
-	    for (temp = w(); temp & 3; temp ++) {
-	      getc(fp);
-	    }
-	  }
-          break;
-
-      case 16 : // 16-bit 5:5:5 or 5:6:5 RGB
-          for (x = w(); x > 0; x --, ptr += bDepth) {
-	    uchar b = getc(fp), a = getc(fp) ;
-	    if (use_5_6_5) {
-		ptr[2] = (uchar)(( b << 3 ) & 0xf8);
-		ptr[1] = (uchar)(((a << 5) & 0xe0) | ((b >> 3) & 0x1c));
-		ptr[0] = (uchar)(a & 0xf8);
-	    } else {
-		ptr[2] = (uchar)((b << 3) & 0xf8);
-		ptr[1] = (uchar)(((a << 6) & 0xc0) | ((b >> 2) & 0x38));
-		ptr[0] = (uchar)((a<<1) & 0xf8);
-	    }
-	  }
-
-          // Read remaining bytes to align to 32 bits...
-	  for (temp = w() * 2; temp & 3; temp ++) {
-	    getc(fp);
-	  }
-          break;
-
-      case 24 : // 24-bit RGB
-          for (x = w(); x > 0; x --, ptr += bDepth) {
-	    ptr[2] = (uchar)getc(fp);
-	    ptr[1] = (uchar)getc(fp);
-	    ptr[0] = (uchar)getc(fp);
-	  }
-
-          // Read remaining bytes to align to 32 bits...
-	  for (temp = w() * 3; temp & 3; temp ++) {
-	    getc(fp);
-	  }
-          break;
-		  
-      case 32 : // 32-bit RGBA
-         for (x = w(); x > 0; x --, ptr += bDepth) {
-            ptr[2] = (uchar)getc(fp);
-            ptr[1] = (uchar)getc(fp);
-            ptr[0] = (uchar)getc(fp);
-            ptr[3] = (uchar)getc(fp);
-          }
-          break;
-    }
-  }
-  
-  if (havemask) {
-    for (y = h() - 1; y >= 0; y --) {
-      ptr = (uchar *)array + y * w() * d() + 3;
-      for (x = w(), bit = 128; x > 0; x --, ptr+=bDepth) {
-	if (bit == 128) byte = (uchar)getc(fp);
-	if (byte & bit)
-	  *ptr = 0;
-	else
-	  *ptr = 255;
-	if (bit > 1)
-	  bit >>= 1;
-	else
-	  bit = 128;
-      }
-      // Read remaining bytes to align to 32 bits...
-      for (temp = (w() + 7) / 8; temp & 3; temp ++)
-	getc(fp);
-    }
-  }
-
-  // Close the file and return...
-  fclose(fp);
-}
-
-
-//
-// 'read_word()' - Read a 16-bit unsigned integer.
-//
-
-static unsigned short	// O - 16-bit unsigned integer
-read_word(FILE *fp) {	// I - File to read from
-  unsigned char b0, b1;	// Bytes from file
-
-  b0 = (uchar)getc(fp);
-  b1 = (uchar)getc(fp);
-
-  return ((b1 << 8) | b0);
-}
-
-
-//
-// 'read_dword()' - Read a 32-bit unsigned integer.
-//
-
-static unsigned int		// O - 32-bit unsigned integer
-read_dword(FILE *fp) {		// I - File to read from
-  unsigned char b0, b1, b2, b3;	// Bytes from file
-
-  b0 = (uchar)getc(fp);
-  b1 = (uchar)getc(fp);
-  b2 = (uchar)getc(fp);
-  b3 = (uchar)getc(fp);
-
-  return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
-}
-
-
-//
-// 'read_long()' - Read a 32-bit signed integer.
-//
-
-static int			// O - 32-bit signed integer
-read_long(FILE *fp) {		// I - File to read from
-  unsigned char b0, b1, b2, b3;	// Bytes from file
-
-  b0 = (uchar)getc(fp);
-  b1 = (uchar)getc(fp);
-  b2 = (uchar)getc(fp);
-  b3 = (uchar)getc(fp);
-
-  return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Bitmap.cxx
+++ /dev/null
@@ -1,474 +1,0 @@
-//
-// "$Id$"
-//
-// Bitmap drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/** \fn Fl_Bitmap::Fl_Bitmap(const char *array, int W, int H)
-  The constructors create a new bitmap from the specified bitmap data.*/
-
-/** \fn Fl_Bitmap::Fl_Bitmap(const unsigned char *array, int W, int H)
-  The constructors create a new bitmap from the specified bitmap data.*/
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Printer.H>
-#include "flstring.h"
-
-#if defined(__APPLE_QUARTZ__)
-
-
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *array) {
-  static uchar reverse[16] =    /* Bit reversal lookup table */
-    { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee, 
-      0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
-  int rowBytes = (w+7)>>3 ;
-  uchar *bmask = (uchar*)malloc(rowBytes*h), *dst = bmask;
-  const uchar *src = array;
-  for ( int i=rowBytes*h; i>0; i--,src++ ) {
-    *dst++ = ((reverse[*src & 0x0f] & 0xf0) | (reverse[(*src >> 4) & 0x0f] & 0x0f))^0xff;
-  }
-  CGDataProviderRef srcp = CGDataProviderCreateWithData( 0L, bmask, rowBytes*h, 0L);
-  CGImageRef id_ = CGImageMaskCreate( w, h, 1, 1, rowBytes, srcp, 0L, false);
-  CGDataProviderRelease(srcp);
-  return (Fl_Bitmask)id_;
-}
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  if (bm) CGImageRelease((CGImageRef)bm);
-}
-
-
-#elif defined(WIN32) // Windows bitmask functions...
-
-
-// 'fl_create_bitmap()' - Create a 1-bit bitmap for drawing...
-static Fl_Bitmask fl_create_bitmap(int w, int h, const uchar *data) {
-  // we need to pad the lines out to words & swap the bits
-  // in each byte.
-  int w1 = (w+7)/8;
-  int w2 = ((w+15)/16)*2;
-  uchar* newarray = new uchar[w2*h];
-  const uchar* src = data;
-  uchar* dest = newarray;
-  Fl_Bitmask bm;
-  static uchar reverse[16] =	/* Bit reversal lookup table */
-  	      { 0x00, 0x88, 0x44, 0xcc, 0x22, 0xaa, 0x66, 0xee,
-		0x11, 0x99, 0x55, 0xdd, 0x33, 0xbb, 0x77, 0xff };
-
-  for (int y=0; y < h; y++) {
-    for (int n = 0; n < w1; n++, src++)
-      *dest++ = (uchar)((reverse[*src & 0x0f] & 0xf0) |
-	                (reverse[(*src >> 4) & 0x0f] & 0x0f));
-    dest += w2-w1;
-  }
-
-  bm = CreateBitmap(w, h, 1, 1, newarray);
-
-  delete[] newarray;
-
-  return bm;
-}
-
-// 'fl_create_bitmask()' - Create an N-bit bitmap for masking...
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
-  // this won't work when the user changes display mode during run or
-  // has two screens with differnet depths
-  Fl_Bitmask bm;
-  static uchar hiNibble[16] =
-  { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
-    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0 };
-  static uchar loNibble[16] =
-  { 0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e,
-    0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b, 0x07, 0x0f };
-  int np  = GetDeviceCaps(fl_gc, PLANES);	//: was always one on sample machines
-  int bpp = GetDeviceCaps(fl_gc, BITSPIXEL);//: 1,4,8,16,24,32 and more odd stuff?
-  int Bpr = (bpp*w+7)/8;			//: bytes per row
-  int pad = Bpr&1, w1 = (w+7)/8, shr = ((w-1)&7)+1;
-  if (bpp==4) shr = (shr+1)/2;
-  uchar *newarray = new uchar[(Bpr+pad)*h];
-  uchar *dst = newarray;
-  const uchar *src = data;
-
-  for (int i=0; i<h; i++) {
-    // This is slooow, but we do it only once per pixmap
-    for (int j=w1; j>0; j--) {
-      uchar b = *src++;
-      if (bpp==1) {
-        *dst++ = (uchar)( hiNibble[b&15] ) | ( loNibble[(b>>4)&15] );
-      } else if (bpp==4) {
-        for (int k=(j==1)?shr:4; k>0; k--) {
-          *dst++ = (uchar)("\377\360\017\000"[b&3]);
-          b = b >> 2;
-        }
-      } else {
-        for (int k=(j==1)?shr:8; k>0; k--) {
-          if (b&1) {
-            *dst++=0;
-	    if (bpp>8) *dst++=0;
-            if (bpp>16) *dst++=0;
-	    if (bpp>24) *dst++=0;
-	  } else {
-	    *dst++=0xff;
-	    if (bpp>8) *dst++=0xff;
-	    if (bpp>16) *dst++=0xff;
-	    if (bpp>24) *dst++=0xff;
-	  }
-
-	  b = b >> 1;
-        }
-      }
-    }
-
-    dst += pad;
-  }
-
-  bm = CreateBitmap(w, h, np, bpp, newarray);
-  delete[] newarray;
-
-  return bm;
-}
-
-
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  DeleteObject((HGDIOBJ)bm);
-}
-
-
-#else // X11 bitmask functions
-
-
-Fl_Bitmask fl_create_bitmask(int w, int h, const uchar *data) {
-  return XCreateBitmapFromData(fl_display, fl_window, (const char *)data,
-                               (w+7)&-8, h);
-}
-
-void fl_delete_bitmask(Fl_Bitmask bm) {
-  fl_delete_offscreen((Fl_Offscreen)bm);
-}
-
-
-#endif // __APPLE__
-
-
-// Create a 1-bit mask used for alpha blending
-Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *array) {
-  Fl_Bitmask bm;
-  int bmw = (w + 7) / 8;
-  uchar *bitmap = new uchar[bmw * h];
-  uchar *bitptr, bit;
-  const uchar *dataptr;
-  int x, y;
-  static uchar dither[16][16] = { // Simple 16x16 Floyd dither
-    { 0,   128, 32,  160, 8,   136, 40,  168,
-      2,   130, 34,  162, 10,  138, 42,  170 },
-    { 192, 64,  224, 96,  200, 72,  232, 104,
-      194, 66,  226, 98,  202, 74,  234, 106 },
-    { 48,  176, 16,  144, 56,  184, 24,  152,
-      50,  178, 18,  146, 58,  186, 26,  154 },
-    { 240, 112, 208, 80,  248, 120, 216, 88,
-      242, 114, 210, 82,  250, 122, 218, 90 },
-    { 12,  140, 44,  172, 4,   132, 36,  164,
-      14,  142, 46,  174, 6,   134, 38,  166 },
-    { 204, 76,  236, 108, 196, 68,  228, 100,
-      206, 78,  238, 110, 198, 70,  230, 102 },
-    { 60,  188, 28,  156, 52,  180, 20,  148,
-      62,  190, 30,  158, 54,  182, 22,  150 },
-    { 252, 124, 220, 92,  244, 116, 212, 84,
-      254, 126, 222, 94,  246, 118, 214, 86 },
-    { 3,   131, 35,  163, 11,  139, 43,  171,
-      1,   129, 33,  161, 9,   137, 41,  169 },
-    { 195, 67,  227, 99,  203, 75,  235, 107,
-      193, 65,  225, 97,  201, 73,  233, 105 },
-    { 51,  179, 19,  147, 59,  187, 27,  155,
-      49,  177, 17,  145, 57,  185, 25,  153 },
-    { 243, 115, 211, 83,  251, 123, 219, 91,
-      241, 113, 209, 81,  249, 121, 217, 89 },
-    { 15,  143, 47,  175, 7,   135, 39,  167,
-      13,  141, 45,  173, 5,   133, 37,  165 },
-    { 207, 79,  239, 111, 199, 71,  231, 103,
-      205, 77,  237, 109, 197, 69,  229, 101 },
-    { 63,  191, 31,  159, 55,  183, 23,  151,
-      61,  189, 29,  157, 53,  181, 21,  149 },
-    { 254, 127, 223, 95,  247, 119, 215, 87,
-      253, 125, 221, 93,  245, 117, 213, 85 }
-  };
-
-  // Generate a 1-bit "screen door" alpha mask; not always pretty, but
-  // definitely fast...  In the future we may be able to support things
-  // like the RENDER extension in XFree86, when available, to provide
-  // true RGBA-blended rendering.  See:
-  //
-  //     http://www.xfree86.org/~keithp/render/protocol.html
-  //
-  // for more info on XRender...
-  //
-  // MacOS already provides alpha blending support and has its own
-  // fl_create_alphamask() function...
-  memset(bitmap, 0, bmw * h);
-
-  for (dataptr = array + d - 1, y = 0; y < h; y ++, dataptr += ld)
-    for (bitptr = bitmap + y * bmw, bit = 1, x = 0; x < w; x ++, dataptr += d) {
-      if (*dataptr > dither[x & 15][y & 15])
-	*bitptr |= bit;
-      if (bit < 128) bit <<= 1;
-      else {
-	bit = 1;
-	bitptr ++;
-      }
-    }
-
-  bm = fl_create_bitmask(w, h, bitmap);
-  delete[] bitmap;
-
-  return (bm);
-}
-
-void Fl_Bitmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-int Fl_Bitmap::start(int XP, int YP, int WP, int HP, int &cx, int &cy,
-		 int &X, int &Y, int &W, int &H)
-{
-  if (!array) {
-    draw_empty(XP, YP);
-    return 1;
-  }
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w()) W = w()-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h()) H = h()-cy;
-  if (H <= 0) return 1;
-#if defined(WIN32)
-  if (!id_) id_ = fl_create_bitmap(w(), h(), array);
-#else
-  if (!id_) id_ = fl_create_bitmask(w(), h(), array);
-#endif
-  return 0;
-}
-
-#ifdef __APPLE__
-void Fl_Quartz_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (bm->start(XP, YP, WP, HP, cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (bm->id_ && fl_gc) {
-    CGRect rect = { { (CGFloat)X, (CGFloat)Y }, { (CGFloat)W, (CGFloat)H } };
-    Fl_X::q_begin_image(rect, cx, cy, bm->w(), bm->h());
-    CGContextDrawImage(fl_gc, rect, (CGImageRef)bm->id_);
-    Fl_X::q_end_image();
-  }
-}
-
-#elif defined(WIN32)
-void Fl_GDI_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (bm->start(XP, YP, WP, HP, cx, cy, X, Y, W, H)) {
-    return;
-  }
-  
-  HDC tempdc = CreateCompatibleDC(fl_gc);
-  int save = SaveDC(tempdc);
-  SelectObject(tempdc, (HGDIOBJ)bm->id_);
-  SelectObject(fl_gc, fl_brush());
-  // secret bitblt code found in old MSWindows reference manual:
-  BitBlt(fl_gc, X, Y, W, H, tempdc, cx, cy, 0xE20746L);
-  RestoreDC(tempdc, save);
-  DeleteDC(tempdc);
-}  
-
-void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  typedef BOOL (WINAPI* fl_transp_func)  (HDC,int,int,int,int,HDC,int,int,int,int,UINT);
-  static fl_transp_func fl_TransparentBlt = NULL;
-  static HMODULE hMod = NULL;
-  if (!hMod) {
-    hMod = LoadLibrary("MSIMG32.DLL");
-    if (hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt");
-  }
-  if (!fl_TransparentBlt) {
-    Fl_GDI_Graphics_Driver::draw(bm,  XP,  YP,  WP,  HP,  cx,  cy);
-    return;
-    }
-  if (bm->start(XP, YP, WP, HP, cx, cy, X, Y, W, H)) {
-    return;
-  }
-  
-  HDC tempdc;
-  int save;
-  // algorithm for bitmap output to Fl_GDI_Printer
-  Fl_Color save_c = fl_color(); // save bitmap's desired color
-  uchar r, g, b;
-  Fl::get_color(save_c, r, g, b);
-  r = 255-r;
-  g = 255-g;
-  b = 255-b;
-  Fl_Color background = fl_rgb_color(r, g, b); // a color very different from the bitmap's
-  Fl_Offscreen tmp_id = fl_create_offscreen(W, H);
-  fl_begin_offscreen(tmp_id);
-  fl_color(background);
-  fl_rectf(0,0,W,H); // use this color as offscreen background
-  fl_color(save_c); // back to bitmap's color
-  tempdc = CreateCompatibleDC(fl_gc);
-  save = SaveDC(tempdc);
-  SelectObject(tempdc, (HGDIOBJ)bm->id_);
-  SelectObject(fl_gc, fl_brush()); // use bitmap's desired color
-  BitBlt(fl_gc, 0, 0, W, H, tempdc, 0, 0, 0xE20746L); // draw bitmap to offscreen
-  fl_end_offscreen(); // offscreen data is in tmp_id
-  SelectObject(tempdc, (HGDIOBJ)tmp_id); // use offscreen data
-  // draw it to printer context with background color as transparent
-  fl_TransparentBlt(fl_gc, X,Y,W,H, tempdc, cx, cy, bm->w(), bm->h(), RGB(r, g, b) ); 
-  fl_delete_offscreen(tmp_id);
-  RestoreDC(tempdc, save);
-  DeleteDC(tempdc);
-}  
-
-#else // Xlib
-void Fl_Xlib_Graphics_Driver::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (bm->start(XP, YP, WP, HP, cx, cy, X, Y, W, H)) {
-    return;
-  }
-  
-  XSetStipple(fl_display, fl_gc, bm->id_);
-  int ox = X-cx; if (ox < 0) ox += bm->w();
-  int oy = Y-cy; if (oy < 0) oy += bm->h();
-  XSetTSOrigin(fl_display, fl_gc, ox, oy);
-  XSetFillStyle(fl_display, fl_gc, FillStippled);
-  XFillRectangle(fl_display, fl_window, fl_gc, X, Y, W, H);
-  XSetFillStyle(fl_display, fl_gc, FillSolid);
-}
-#endif
-
-/**
-  The destructor frees all memory and server resources that are used by
-  the bitmap.
-*/
-Fl_Bitmap::~Fl_Bitmap() {
-  uncache();
-  if (alloc_array) delete[] (uchar *)array;
-}
-
-void Fl_Bitmap::uncache() {
-  if (id_) {
-#ifdef __APPLE_QUARTZ__
-    fl_delete_bitmask((Fl_Bitmask)id_);
-#else
-    fl_delete_bitmask((Fl_Offscreen)id_);
-#endif
-    id_ = 0;
-  }
-}
-
-void Fl_Bitmap::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_Bitmap::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-Fl_Image *Fl_Bitmap::copy(int W, int H) {
-  Fl_Bitmap	*new_image;	// New RGB image
-  uchar		*new_array;	// New array for image data
-
-  // Optimize the simple copy where the width and height are the same...
-  if (W == w() && H == h()) {
-    new_array = new uchar [H * ((W + 7) / 8)];
-    memcpy(new_array, array, H * ((W + 7) / 8));
-
-    new_image = new Fl_Bitmap(new_array, W, H);
-    new_image->alloc_array = 1;
-
-    return new_image;
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and 
-  uchar		*new_ptr,	// Pointer into new array
-		new_bit,	// Bit for new array
-		old_bit;	// Bit for old array
-  const uchar	*old_ptr;	// Pointer into old array
-  int		sx, sy,		// Source coordinates
-		dx, dy,		// Destination coordinates
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep;	// X & Y step increments
-
-
-  // Figure out Bresenham step/modulus values...
-  xmod   = w() % W;
-  xstep  = w() / W;
-  ymod   = h() % H;
-  ystep  = h() / H;
-
-  // Allocate memory for the new image...
-  new_array = new uchar [H * ((W + 7) / 8)];
-  new_image = new Fl_Bitmap(new_array, W, H);
-  new_image->alloc_array = 1;
-
-  memset(new_array, 0, H * ((W + 7) / 8));
-
-  // Scale the image using a nearest-neighbor algorithm...
-  for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
-    for (dx = W, xerr = W, old_ptr = array + sy * ((w() + 7) / 8), sx = 0, new_bit = 1;
-	 dx > 0;
-	 dx --) {
-      old_bit = (uchar)(1 << (sx & 7));
-      if (old_ptr[sx / 8] & old_bit) *new_ptr |= new_bit;
-
-      if (new_bit < 128) new_bit <<= 1;
-      else {
-        new_bit = 1;
-	new_ptr ++;
-      }
-
-      sx   += xstep;
-      xerr -= xmod;
-
-      if (xerr <= 0) {
-	xerr += W;
-	sx ++;
-      }
-    }
-
-    if (new_bit > 1) new_ptr ++;
-
-    sy   += ystep;
-    yerr -= ymod;
-    if (yerr <= 0) {
-      yerr += H;
-      sy ++;
-    }
-  }
-
-  return new_image;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Box.cxx
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Box widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Box.H>
-
-
-Fl_Box::Fl_Box(int X, int Y, int W, int H, const char *l)
-: Fl_Widget(X,Y,W,H,l) 
-{
-}
-
-Fl_Box::Fl_Box(Fl_Boxtype b, int X, int Y, int W, int H, const char *l)
-: Fl_Widget(X,Y,W,H,l) 
-{
-  box(b);
-}
-
-void Fl_Box::draw() {
-  draw_box();
-  draw_label();
-}
-
-int Fl_Box::handle(int event) {
-  if (event == FL_ENTER || event == FL_LEAVE) return 1;
-  else return 0;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Browser.cxx
+++ /dev/null
@@ -1,964 +1,0 @@
-//
-// "$Id$"
-//
-// Browser widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include <stdlib.h>
-#include <math.h>
-
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Multi_Browser.H>
-#include <FL/Fl_Select_Browser.H>
-
-
-// I modified this from the original Forms data to use a linked list
-// so that the number of items in the browser and size of those items
-// is unlimited. The only problem is that the old browser used an
-// index number to identify a line, and it is slow to convert from/to
-// a pointer. I use a cache of the last match to try to speed this up.
-
-// Also added the ability to "hide" a line. This sets its height to
-// zero, so the Fl_Browser_ cannot pick it.
-
-#define SELECTED 1
-#define NOTDISPLAYED 2
-
-// WARNING:
-//       Fl_File_Chooser.cxx also has a definition of this structure (FL_BLINE).
-//       Changes to FL_BLINE *must* be reflected in Fl_File_Chooser.cxx as well.
-//       This hack in Fl_File_Chooser should be solved.
-//
-struct FL_BLINE {	// data is in a linked list of these
-  FL_BLINE* prev;
-  FL_BLINE* next;
-  void* data;
-  Fl_Image* icon;
-  short length;		// sizeof(txt)-1, may be longer than string
-  char flags;		// selected, displayed
-  char txt[1];		// start of allocated array
-};
-
-/**
-  Returns the very first item in the list.
-  Example of use:
-  \code
-  // Walk the browser from beginning to end
-  for ( void *i=item_first(); i; i=item_next(i) ) {
-      printf("item label='%s'\n", item_text(i));
-  }
-  \endcode
-  \returns The first item, or NULL if list is empty.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_first() const {return first;}
-
-/**
-  Returns the next item after \p item.
-  \param[in] item The 'current' item
-  \returns The next item after \p item, or NULL if there are none after this one.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_next(void* item) const {return ((FL_BLINE*)item)->next;}
-
-/**
-  Returns the previous item before \p item.
-  \param[in] item The 'current' item
-  \returns The previous item before \p item, or NULL if there are none before this one.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_prev(void* item) const {return ((FL_BLINE*)item)->prev;}
-
-/**
-  Returns the very last item in the list.
-  Example of use:
-  \code
-  // Walk the browser in reverse, from end to start
-  for ( void *i=item_last(); i; i=item_prev(i) ) {
-      printf("item label='%s'\n", item_text(i));
-  }
-  \endcode
-  \returns The last item, or NULL if list is empty.
-  \see item_first(), item_last(), item_next(), item_prev()
-*/
-void* Fl_Browser::item_last() const {return last;}
-
-/**
-  See if \p item is selected.
-  \param[in] item The item whose selection state is to be checked.
-  \returns 1 if selected, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::item_selected(void* item) const {
-  return ((FL_BLINE*)item)->flags&SELECTED;
-}
-/**
-  Change the selection state of \p item to the value \p val.
-  \param[in] item The item to be changed.
-  \param[in] val The new selection state: 1 selects, 0 de-selects.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-void Fl_Browser::item_select(void *item, int val) {
-  if (val) ((FL_BLINE*)item)->flags |= SELECTED;
-  else     ((FL_BLINE*)item)->flags &= ~SELECTED;
-}
-
-/**
-  Returns the label text for \p item.
-  \param[in] item The item whose label text is returned.
-  \returns The item's text string. (Can be NULL)
-*/
-const char *Fl_Browser::item_text(void *item) const { 
-  return ((FL_BLINE*)item)->txt;
-}
-
-/**
-  Returns the item for specified \p line.
-
-  Note: This call is slow. It's fine for e.g. responding to user
-  clicks, but slow if called often, such as in a tight sorting loop.
-  Finding an item 'by line' involves a linear lookup on the internal
-  linked list. The performance hit can be significant if the browser's
-  contents is large, and the method is called often (e.g. during a sort).
-  If you're writing a subclass, use the protected methods item_first(),
-  item_next(), etc. to access the internal linked list more efficiently.
-
-  \param[in] line The line number of the item to return. (1 based)
-  \retval item that was found.
-  \retval NULL if line is out of range.
-  \see item_at(), find_line(), lineno()
-*/
-FL_BLINE* Fl_Browser::find_line(int line) const {
-  int n; FL_BLINE* l;
-  if (line == cacheline) return cache;
-  if (cacheline && line > (cacheline/2) && line < ((cacheline+lines)/2)) {
-    n = cacheline; l = cache;
-  } else if (line <= (lines/2)) {
-    n = 1; l = first;
-  } else {
-    n = lines; l = last;
-  }
-  for (; n < line && l; n++) l = l->next;
-  for (; n > line && l; n--) l = l->prev;
-  ((Fl_Browser*)this)->cacheline = line;
-  ((Fl_Browser*)this)->cache = l;
-  return l;
-}
-
-/**
-  Returns line number corresponding to \p item, or zero if not found.
-  Caveat: See efficiency note in find_line().
-  \param[in] item The item to be found
-  \returns The line number of the item, or 0 if not found.
-  \see item_at(), find_line(), lineno()
-*/
-int Fl_Browser::lineno(void *item) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  if (!l) return 0;
-  if (l == cache) return cacheline;
-  if (l == first) return 1;
-  if (l == last) return lines;
-  if (!cache) {
-    ((Fl_Browser*)this)->cache = first;
-    ((Fl_Browser*)this)->cacheline = 1;
-  }
-  // assume it is near cache, search both directions:
-  FL_BLINE* b = cache->prev;
-  int bnum = cacheline-1;
-  FL_BLINE* f = cache->next;
-  int fnum = cacheline+1;
-  int n = 0;
-  for (;;) {
-    if (b == l) {n = bnum; break;}
-    if (f == l) {n = fnum; break;}
-    if (b) {b = b->prev; bnum--;}
-    if (f) {f = f->next; fnum++;}
-  }
-  ((Fl_Browser*)this)->cache = l;
-  ((Fl_Browser*)this)->cacheline = n;
-  return n;
-}
-
-/**
-  Removes the item at the specified \p line.
-  Caveat: See efficiency note in find_line().
-  You must call redraw() to make any changes visible.
-  \param[in] line The line number to be removed. (1 based) Must be in range!
-  \returns Pointer to browser item that was removed (and is no longer valid).
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-FL_BLINE* Fl_Browser::_remove(int line) {
-  FL_BLINE* ttt = find_line(line);
-  deleting(ttt);
-
-  cacheline = line-1;
-  cache = ttt->prev;
-  lines--;
-  full_height_ -= item_height(ttt);
-  if (ttt->prev) ttt->prev->next = ttt->next;
-  else first = ttt->next;
-  if (ttt->next) ttt->next->prev = ttt->prev;
-  else last = ttt->prev;
-
-  return(ttt);
-}
-
-/**
-  Remove entry for given \p line number, making the browser one line shorter.
-  You must call redraw() to make any changes visible.
-  \param[in] line Line to be removed. (1 based) \n
-                  If \p line is out of range, no action is taken.
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::remove(int line) {
-  if (line < 1 || line > lines) return;
-  free(_remove(line));
-}
-
-/**
-  Insert specified \p item above \p line.
-  If \p line > size() then the line is added to the end.
-
-  Caveat: See efficiency note in find_line().
-
-  \param[in] line  The new line will be inserted above this line (1 based).
-  \param[in] item  The item to be added.
-*/
-void Fl_Browser::insert(int line, FL_BLINE* item) {
-  if (!first) {
-    item->prev = item->next = 0;
-    first = last = item;
-  } else if (line <= 1) {
-    inserting(first, item);
-    item->prev = 0;
-    item->next = first;
-    item->next->prev = item;
-    first = item;
-  } else if (line > lines) {
-    item->prev = last;
-    item->prev->next = item;
-    item->next = 0;
-    last = item;
-  } else {
-    FL_BLINE* n = find_line(line);
-    inserting(n, item);
-    item->next = n;
-    item->prev = n->prev;
-    item->prev->next = item;
-    n->prev = item;
-  }
-  cacheline = line;
-  cache = item;
-  lines++;
-  full_height_ += item_height(item);
-  redraw_line(item);
-}
-
-/**
-  Insert a new entry whose label is \p newtext \e above given \p line, optional data \p d.
-
-  Text may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  The optional void * argument \p d will be the data() of the new item.
-
-  \param[in] line Line position for insert. (1 based) \n
-             If \p line > size(), the entry will be added at the end.
-  \param[in] newtext The label text for the new line.
-  \param[in] d Optional pointer to user data to be associated with the new line.
-*/
-void Fl_Browser::insert(int line, const char* newtext, void* d) {
-  if (!newtext) newtext = "";		// STR #3269
-  int l = (int) strlen(newtext);
-  FL_BLINE* t = (FL_BLINE*)malloc(sizeof(FL_BLINE)+l);
-  t->length = (short)l;
-  t->flags = 0;
-  strcpy(t->txt, newtext);
-  t->data = d;
-  t->icon = 0;
-  insert(line, t);
-}
-
-/**
-  Line \p from is removed and reinserted at \p to.
-  Note: \p to is calculated \e after line \p from gets removed.
-  \param[in] to Destination line number (calculated \e after line \p from is removed)
-  \param[in] from Line number of item to be moved
-*/
-void Fl_Browser::move(int to, int from) {
-  if (from < 1 || from > lines) return;
-  insert(to, _remove(from));
-}
-
-/**
-  Sets the text for the specified \p line to \p newtext.
-
-  Text may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  Does nothing if \p line is out of range.
-
-  \param[in] line The line of the item whose text will be changed. (1 based)
-  \param[in] newtext The new string to be assigned to the item.
-*/
-void Fl_Browser::text(int line, const char* newtext) {
-  if (line < 1 || line > lines) return;
-  FL_BLINE* t = find_line(line);
-  if (!newtext) newtext = "";		// STR #3269
-  int l = (int) strlen(newtext);
-  if (l > t->length) {
-    FL_BLINE* n = (FL_BLINE*)malloc(sizeof(FL_BLINE)+l);
-    replacing(t, n);
-    cache = n;
-    n->data = t->data;
-    n->icon = t->icon;
-    n->length = (short)l;
-    n->flags = t->flags;
-    n->prev = t->prev;
-    if (n->prev) n->prev->next = n; else first = n;
-    n->next = t->next;
-    if (n->next) n->next->prev = n; else last = n;
-    free(t);
-    t = n;
-  }
-  strcpy(t->txt, newtext);
-  redraw_line(t);
-}
-
-/**
-  Sets the user data for specified \p line to \p d.
-  Does nothing if \p line is out of range.
-  \param[in] line The line of the item whose data() is to be changed. (1 based)
-  \param[in] d The new data to be assigned to the item. (can be NULL)
-*/
-void Fl_Browser::data(int line, void* d) {
-  if (line < 1 || line > lines) return;
-  find_line(line)->data = d;
-}
-
-/**
-  Returns height of \p item in pixels.
-  This takes into account embedded \@ codes within the text() label.
-  \param[in] item The item whose height is returned.
-  \returns The height of the item in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::item_height(void *item) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  if (l->flags & NOTDISPLAYED) return 0;
-
-  int hmax = 2; // use 2 to insure we don't return a zero!
-
-  if (!l->txt[0]) {
-    // For blank lines set the height to exactly 1 line!
-    fl_font(textfont(), textsize());
-    int hh = fl_height();
-    if (hh > hmax) hmax = hh;
-  } else {
-    const int* i = column_widths();
-    // do each column separately as they may all set different fonts:
-    for (char* str = l->txt; str && *str; str++) {
-      Fl_Font font = textfont(); // default font
-      int tsize = textsize(); // default size
-      while (*str==format_char()) {
-	str++;
-	switch (*str++) {
-	case 'l': case 'L': tsize = 24; break;
-	case 'm': case 'M': tsize = 18; break;
-	case 's': tsize = 11; break;
-	case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-	case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-	case 'f': case 't': font = FL_COURIER; break;
-	case 'B':
-	case 'C': while (isdigit(*str & 255)) str++; break; // skip a color number
-	case 'F': font = (Fl_Font)strtol(str,&str,10); break;
-	case 'S': tsize = strtol(str,&str,10); break;
-	case 0: case '@': str--;
-	case '.': goto END_FORMAT;
-	}
-      }
-      END_FORMAT:
-      char* ptr = str;
-      if (ptr && *i++) str = strchr(str, column_char());
-      else str = NULL;
-      if((!str && *ptr) || (str && ptr < str)) {
-	fl_font(font, tsize); int hh = fl_height();
-	if (hh > hmax) hmax = hh;
-      }
-      if (!str || !*str) break;
-    }
-  }
-
-  if (l->icon && (l->icon->h()+2)>hmax) {
-    hmax = l->icon->h() + 2;	// leave 2px above/below
-  }
-  return hmax; // previous version returned hmax+2!
-}
-
-/**
-  Returns width of \p item in pixels.
-  This takes into account embedded \@ codes within the text() label.
-  \param[in] item The item whose width is returned.
-  \returns The width of the item in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::item_width(void *item) const {
-  FL_BLINE* l=(FL_BLINE*)item;
-  char* str = l->txt;
-  const int* i = column_widths();
-  int ww = 0;
-
-  while (*i) { // add up all tab-separated fields
-    char* e;
-    e = strchr(str, column_char());
-    if (!e) break; // last one occupied by text
-    str = e+1;
-    ww += *i++;
-  }
-
-  // OK, we gotta parse the string and find the string width...
-  int tsize = textsize();
-  Fl_Font font = textfont();
-  int done = 0;
-
-  while (*str == format_char_ && str[1] && str[1] != format_char_) {
-    str ++;
-    switch (*str++) {
-    case 'l': case 'L': tsize = 24; break;
-    case 'm': case 'M': tsize = 18; break;
-    case 's': tsize = 11; break;
-    case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-    case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-    case 'f': case 't': font = FL_COURIER; break;
-    case 'B':
-    case 'C': while (isdigit(*str & 255)) str++; break; // skip a color number
-    case 'F': font = (Fl_Font)strtol(str, &str, 10); break;
-    case 'S': tsize = strtol(str, &str, 10); break;
-    case '.':
-      done = 1;
-      break;
-    case '@':
-      str--;
-      done = 1;
-    }
-
-    if (done)
-      break;
-  }
-
-  if (*str == format_char_ && str[1])
-    str ++;
-
-  if (ww==0 && l->icon) ww = l->icon->w();
-
-  fl_font(font, tsize);
-  return ww + int(fl_width(str)) + 6;
-}
-
-/**
-  The height of the entire list of all visible() items in pixels.
-  This returns the accumulated height of *all* the items in the browser
-  that are not hidden with hide(), including items scrolled off screen.
-  \returns The accumulated size of all the visible items in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::full_height() const {
-  return full_height_;
-}
-
-/**
-  The default 'average' item height (including inter-item spacing) in pixels.
-  This currently returns textsize() + 2.
-  \returns The value in pixels.
-  \see item_height(), item_width(),\n
-       incr_height(), full_height()
-*/
-int Fl_Browser::incr_height() const {
-  return textsize()+2;
-}
-
-/**
-  Draws \p item at the position specified by \p X \p Y \p W \p H.
-  The \p W and \p H values are used for clipping.
-  Should only be called within the context of an FLTK draw().
-  \param[in] item The item to be drawn
-  \param[in] X,Y,W,H position and size.
-*/
-void Fl_Browser::item_draw(void* item, int X, int Y, int W, int H) const {
-  FL_BLINE* l = (FL_BLINE*)item;
-  char* str = l->txt;
-  const int* i = column_widths();
-
-  bool first = true;	// for icon
-  while (W > 6) {	// do each tab-separated field
-    int w1 = W;	// width for this field
-    char* e = 0; // pointer to end of field or null if none
-    if (*i) { // find end of field and temporarily replace with 0
-      e = strchr(str, column_char());
-      if (e) {*e = 0; w1 = *i++;}
-    }
-    // Icon drawing code
-    if (first) {
-      first = false;
-      if (l->icon) {
-	l->icon->draw(X+2,Y+1);	// leave 2px left, 1px above
-	int iconw = l->icon->w()+2;
-	X += iconw; W -= iconw; w1 -= iconw;
-      }
-    }
-    int tsize = textsize();
-    Fl_Font font = textfont();
-    Fl_Color lcol = textcolor();
-    Fl_Align talign = FL_ALIGN_LEFT;
-    // check for all the @-lines recognized by XForms:
-    //#if defined(__GNUC__)
-    //#warning FIXME This maybe needs to be more UTF8 aware now...?
-    //#endif /*__GNUC__*/
-    while (*str == format_char() && *++str && *str != format_char()) {
-      switch (*str++) {
-      case 'l': case 'L': tsize = 24; break;
-      case 'm': case 'M': tsize = 18; break;
-      case 's': tsize = 11; break;
-      case 'b': font = (Fl_Font)(font|FL_BOLD); break;
-      case 'i': font = (Fl_Font)(font|FL_ITALIC); break;
-      case 'f': case 't': font = FL_COURIER; break;
-      case 'c': talign = FL_ALIGN_CENTER; break;
-      case 'r': talign = FL_ALIGN_RIGHT; break;
-      case 'B': 
-	if (!(l->flags & SELECTED)) {
-	  fl_color((Fl_Color)strtoul(str, &str, 10));
-	  fl_rectf(X, Y, w1, H);
-	} else while (isdigit(*str & 255)) str++; // skip digits
-        break;
-      case 'C':
-	lcol = (Fl_Color)strtoul(str, &str, 10);
-	break;
-      case 'F':
-	font = (Fl_Font)strtol(str, &str, 10);
-	break;
-      case 'N':
-	lcol = FL_INACTIVE_COLOR;
-	break;
-      case 'S':
-	tsize = strtol(str, &str, 10);
-	break;
-      case '-':
-	fl_color(FL_DARK3);
-	fl_line(X+3, Y+H/2, X+w1-3, Y+H/2);
-	fl_color(FL_LIGHT3);
-	fl_line(X+3, Y+H/2+1, X+w1-3, Y+H/2+1);
-	break;
-      case 'u':
-      case '_':
-	fl_color(lcol);
-	fl_line(X+3, Y+H-1, X+w1-3, Y+H-1);
-	break;
-      case '.':
-	goto BREAK;
-      case '@':
-	str--; goto BREAK;
-      }
-    }
-  BREAK:
-    fl_font(font, tsize);
-    if (l->flags & SELECTED)
-      lcol = fl_contrast(lcol, selection_color());
-    if (!active_r()) lcol = fl_inactive(lcol);
-    fl_color(lcol);
-    fl_draw(str, X+3, Y, w1-6, H, e ? Fl_Align(talign|FL_ALIGN_CLIP) : talign, 0, 0);
-    if (!e) break; // no more fields...
-    *e = column_char(); // put the separator back
-    X += w1;
-    W -= w1;
-    str = e+1;
-  }
-}
-
-static const int no_columns[1] = {0};
-
-/**
-  The constructor makes an empty browser.
-  \param[in] X,Y,W,H position and size.
-  \param[in] L label string, may be NULL.
-*/
-Fl_Browser::Fl_Browser(int X, int Y, int W, int H, const char *L)
-: Fl_Browser_(X, Y, W, H, L) {
-  column_widths_ = no_columns;
-  lines = 0;
-  full_height_ = 0;
-  cacheline = 0;
-  format_char_ = '@';
-  column_char_ = '\t';
-  first = last = cache = 0;
-}
-
-/**
-  Updates the browser so that \p line is shown at position \p pos.
-  \param[in] line line number. (1 based)
-  \param[in] pos position.
-  \see topline(), middleline(), bottomline()
-*/
-void Fl_Browser::lineposition(int line, Fl_Line_Position pos) {
-  if (line<1) line = 1;
-  if (line>lines) line = lines;
-  int p = 0;
-
-  FL_BLINE* l;
-  for (l=first; l && line>1; l = l->next) {
-    line--; p += item_height(l);
-  }
-  if (l && (pos == BOTTOM)) p += item_height (l);
-
-  int final = p, X, Y, W, H;
-  bbox(X, Y, W, H);
-
-  switch(pos) {
-    case TOP: break;
-    case BOTTOM: final -= H; break;
-    case MIDDLE: final -= H/2; break;
-  }
-  
-  if (final > (full_height() - H)) final = full_height() -H;
-  position(final);
-}
-
-/**
-  Returns the line that is currently visible at the top of the browser.
-  If there is no vertical scrollbar then this will always return 1.
-  \returns The lineno() of the top() of the browser.
-*/
-int Fl_Browser::topline() const {
-  return lineno(top());
-}
-
-/**
-  Sets the default text size (in pixels) for the lines in the browser to \p newSize.
-
-  This method recalculates all item heights and caches the total height
-  internally for optimization of later item changes. This can be slow
-  if there are many items in the browser.
-
-  It returns immediately (w/o recalculation) if \p newSize equals
-  the current textsize().
-
-  You \e may need to call redraw() to see the effect and to have the
-  scrollbar positions recalculated.
-
-  You should set the text size \e before populating the browser with items
-  unless you really need to \e change the size later.
-*/
-void Fl_Browser::textsize(Fl_Fontsize newSize) {
-  if (newSize == textsize())
-    return; // avoid recalculation
-  Fl_Browser_::textsize(newSize);
-  new_list();
-  full_height_ = 0;
-  if (lines == 0) return;
-  for (FL_BLINE* itm=(FL_BLINE *)item_first(); itm; itm=(FL_BLINE *)item_next(itm)) {
-    full_height_ += item_height(itm);
-  }
-}
-
-/**
-  Removes all the lines in the browser.
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::clear() {
-  for (FL_BLINE* l = first; l;) {
-    FL_BLINE* n = l->next;
-    free(l);
-    l = n;
-  }
-  full_height_ = 0;
-  first = 0;
-  last = 0;
-  lines = 0;
-  new_list();
-}
-
-/**
-  Adds a new line to the end of the browser.
-
-  The text string \p newtext may contain format characters; see format_char() for details.
-  \p newtext is copied using the strdup() function, and can be NULL to make a blank line.
-
-  The optional void* argument \p d will be the data() for the new item.
-
-  \param[in] newtext The label text used for the added item
-  \param[in] d Optional user data() for the item (0 if unspecified)
-  \see add(), insert(), remove(), swap(int,int), clear()
-*/
-void Fl_Browser::add(const char* newtext, void* d) {
-  insert(lines+1, newtext, d);
-  //Fl_Browser_::display(last);
-}
-
-/**
-  Returns the label text for the specified \p line.
-  Return value can be NULL if \p line is out of range or unset.
-  The parameter \p line is 1 based.
-  \param[in] line The line number of the item whose text is returned. (1 based)
-  \returns The text string (can be NULL)
-*/
-const char* Fl_Browser::text(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->txt;
-}
-
-/**
-  Returns the user data() for specified \p line.
-  Return value can be NULL if \p line is out of range or no user data() was defined.
-  The parameter \p line is 1 based (1 will be the first item in the list).
-  \param[in] line The line number of the item whose data() is returned. (1 based)
-  \returns The user data pointer (can be NULL)
-
-*/
-void* Fl_Browser::data(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->data;
-}
-
-/**
-  Sets the selection state of the item at \p line to the value \p val.
-  If \p val is not specified, the default is 1 (selects the item).
-  \param[in] line The line number of the item to be changed. (1 based)
-  \param[in] val The new selection state (1=select, 0=de-select).
-  \returns 1 if the state changed, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::select(int line, int val) {
-  if (line < 1 || line > lines) return 0;
-  return Fl_Browser_::select(find_line(line), val);
-}
-
-/**
-  Returns 1 if specified \p line is selected, 0 if not.
-  \param[in] line The line being checked (1 based)
-  \returns 1 if item selected, 0 if not.
-  \see select(), selected(), value(), item_select(), item_selected()
-  */
-int Fl_Browser::selected(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return find_line(line)->flags & SELECTED;
-}
-
-/**
-  Makes \p line visible, and available for selection by user.
-  Opposite of hide(int).
-  This changes the full_height() if the state was changed.
-  redraw() is called automatically if a change occurred.
-  \param[in] line The line to be shown. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::show(int line) {
-  FL_BLINE* t = find_line(line);
-  if (t->flags & NOTDISPLAYED) {
-    t->flags &= ~NOTDISPLAYED;
-    full_height_ += item_height(t);
-    if (Fl_Browser_::displayed(t)) redraw();
-  }
-}
-
-/**
-  Makes \p line invisible, preventing selection by the user.
-  The line can still be selected under program control.
-  This changes the full_height() if the state was changed.
-  When a line is made invisible, lines below it are moved up in the display.
-  redraw() is called automatically if a change occurred.
-  \param[in] line The line to be hidden. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::hide(int line) {
-  FL_BLINE* t = find_line(line);
-  if (!(t->flags & NOTDISPLAYED)) {
-    full_height_ -= item_height(t);
-    t->flags |= NOTDISPLAYED;
-    if (Fl_Browser_::displayed(t)) redraw();
-  }
-}
-
-/**
-  For back compatibility.
-  This calls show(line) if \p val is true, and hide(line) otherwise.
-  If \p val is not specified, the default is 1 (makes the line visible).
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-void Fl_Browser::display(int line, int val) {
-  if (line < 1 || line > lines) return;
-  if (val) show(line); else hide(line);
-}
-
-/**
-  Returns non-zero if the specified \p line is visible, 0 if hidden.
-  Use show(int), hide(int), or make_visible(int) to change an item's visible state.
-  \param[in] line The line in the browser to be tested. (1 based)
-  \see show(int), hide(int), display(), visible(), make_visible()
-*/
-int Fl_Browser::visible(int line) const {
-  if (line < 1 || line > lines) return 0;
-  return !(find_line(line)->flags&NOTDISPLAYED);
-}
-
-/**
-  Returns the line number of the currently selected line, or 0 if none selected.
-  \returns The line number of current selection, or 0 if none selected.
-  \see select(), selected(), value(), item_select(), item_selected()
-*/
-int Fl_Browser::value() const {
-  return lineno(selection());
-}
-
-/**
-  Swap the two items \p a and \p b.
-  Uses swapping() to ensure list updates correctly.
-  \param[in] a,b The two items to be swapped.
-  \see swap(int,int), item_swap()
-*/
-void Fl_Browser::swap(FL_BLINE *a, FL_BLINE *b) {
-
-  if ( a == b || !a || !b) return;          // nothing to do
-  swapping(a, b);
-  FL_BLINE *aprev  = a->prev;
-  FL_BLINE *anext  = a->next;
-  FL_BLINE *bprev  = b->prev;
-  FL_BLINE *bnext  = b->next;
-  if ( b->prev == a ) { 		// A ADJACENT TO B
-     if ( aprev ) aprev->next = b; else first = b;
-     b->next = a;
-     a->next = bnext;
-     b->prev = aprev;
-     a->prev = b;
-     if ( bnext ) bnext->prev = a; else last = a;
-  } else if ( a->prev == b ) {		// B ADJACENT TO A
-     if ( bprev ) bprev->next = a; else first = a;
-     a->next = b;
-     b->next = anext;
-     a->prev = bprev;
-     b->prev = a;
-     if ( anext ) anext->prev = b; else last = b;
-  } else {				// A AND B NOT ADJACENT
-     // handle prev's
-     b->prev = aprev;
-     if ( anext ) anext->prev = b; else last = b;
-     a->prev = bprev;
-     if ( bnext ) bnext->prev = a; else last = a;
-     // handle next's
-     if ( aprev ) aprev->next = b; else first = b;
-     b->next = anext;
-     if ( bprev ) bprev->next = a; else first = a;
-     a->next = bnext;
-  }
-  // Disable cache -- we played around with positions
-  cacheline = 0;
-  cache = 0;
-}
-
-/**
-  Swaps two browser lines \p a and \p b.
-  You must call redraw() to make any changes visible.
-  \param[in] a,b The two lines to be swapped. (both 1 based)
-  \see swap(int,int), item_swap()
-*/
-void Fl_Browser::swap(int a, int b) {
-  if (a < 1 || a > lines || b < 1 || b > lines) return;
-  FL_BLINE* ai = find_line(a);
-  FL_BLINE* bi = find_line(b);
-  swap(ai,bi);
-}
-
-/**
-  Set the image icon for \p line to the value \p icon.
-  Caller is responsible for keeping the icon allocated.
-  The \p line is automatically redrawn.
-  \param[in] line The line to be modified. If out of range, nothing is done.
-  \param[in] icon The image icon to be assigned to the \p line.
-                  If NULL, any previous icon is removed.
-*/
-void Fl_Browser::icon(int line, Fl_Image* icon) {
-
-  if (line<1 || line > lines) return;
-
-  FL_BLINE* bl = find_line(line);
-
-  int old_h = bl->icon ? bl->icon->h()+2 : 0;	// init with *old* icon height
-  bl->icon = 0;					// remove icon, if any
-  int th = item_height(bl);			// height of text only
-  int new_h = icon ? icon->h()+2 : 0;		// init with *new* icon height
-  if (th > old_h) old_h = th;
-  if (th > new_h) new_h = th;
-  int dh = new_h - old_h;
-  full_height_ += dh;				// do this *always*
-
-  bl->icon = icon;				// set new icon
-  if (dh>0) {
-    redraw();					// icon larger than item? must redraw widget
-  } else {
-    redraw_line(bl);				// icon same or smaller? can redraw just this line
-  }
-  replacing(bl,bl);				// recalc Fl_Browser_::max_width et al
-}
-
-/**
-  Returns the icon currently defined for \p line.
-  If no icon is defined, NULL is returned.
-  \param[in] line The line whose icon is returned.
-  \returns The icon defined, or NULL if none.
-*/
-Fl_Image* Fl_Browser::icon(int line) const {
-  FL_BLINE* l = find_line(line);
-  return(l ? l->icon : NULL);
-}
-
-/**
-  Removes the icon for \p line.
-  It's ok to remove an icon if none has been defined.
-  \param[in] line The line whose icon is to be removed.
-*/
-void Fl_Browser::remove_icon(int line) { 
-  icon(line,0);
-}
-
-
-Fl_Hold_Browser::Fl_Hold_Browser(int X,int Y,int W,int H,const char *L)
-: Fl_Browser(X,Y,W,H,L) 
-{
-  type(FL_HOLD_BROWSER);
-}
-
-
-Fl_Multi_Browser::Fl_Multi_Browser(int X,int Y,int W,int H,const char *L)
-: Fl_Browser(X,Y,W,H,L) 
-{
-  type(FL_MULTI_BROWSER);
-}
-
-
-Fl_Select_Browser::Fl_Select_Browser(int X,int Y,int W,int H,const char *L)
-: Fl_Browser(X,Y,W,H,L) 
-{
-  type(FL_SELECT_BROWSER);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Browser_.cxx
+++ /dev/null
@@ -1,1102 +1,0 @@
-//
-// "$Id$"
-//
-// Base Browser widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#define DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Browser_.H>
-#include <FL/fl_draw.H>
-
-
-// This is the base class for browsers.  To be useful it must be
-// subclassed and several virtual functions defined.  The
-// Forms-compatible browser and the file chooser's browser are
-// subclassed off of this.
-
-// Yes, I know this should be a template...
-
-// This has been designed so that the subclass has complete control
-// over the storage of the data, although because next() and prev()
-// functions are used to index, it works best as a linked list or as a
-// large block of characters in which the line breaks must be searched
-// for.
-
-// A great deal of work has been done so that the "height" of a data
-// object does not need to be determined until it is drawn.  This was
-// done for the file chooser, because the height requires doing stat()
-// to see if the file is a directory, which can be annoyingly slow
-// over the network.
-
-/* redraw bits:
-   1 = redraw children (the scrollbar)
-   2 = redraw one or two items
-   4 = redraw all items
-*/
-
-static void scrollbar_callback(Fl_Widget* s, void*) {
-  ((Fl_Browser_*)(s->parent()))->position(int(((Fl_Scrollbar*)s)->value()));
-}
-
-static void hscrollbar_callback(Fl_Widget* s, void*) {
-  ((Fl_Browser_*)(s->parent()))->hposition(int(((Fl_Scrollbar*)s)->value()));
-}
-
-// return where to draw the actual box:
-/**
-  Returns the bounding box for the interior of the list's display window, inside
-  the scrollbars.
-  \param[out] X,Y,W,H The returned bounding box.\n
-                      (The original contents of these parameters are overwritten)
-*/
-void Fl_Browser_::bbox(int& X, int& Y, int& W, int& H) const {
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-  X = x()+Fl::box_dx(b);
-  Y = y()+Fl::box_dy(b);
-  W = w()-Fl::box_dw(b);
-  H = h()-Fl::box_dh(b);
-  if (scrollbar.visible()) {
-    W -= scrollsize;
-    if (scrollbar.align() & FL_ALIGN_LEFT) X += scrollsize;
-  }
-  if (W < 0) W = 0;
-  if (hscrollbar.visible()) {
-    H -= scrollsize;
-    if (scrollbar.align() & FL_ALIGN_TOP) Y += scrollsize;
-  }
-  if (H < 0) H = 0;
-}
-
-/**
-  This method returns the X position of the left edge of the list area
-  after adjusting for the scrollbar and border, if any.
-  \returns The X position of the left edge of the list, in pixels.
-  \see Fl_Browser_::bbox()
-*/
-int Fl_Browser_::leftedge() const {
-  int X, Y, W, H; bbox(X, Y, W, H);
-  return X;
-}
-
-// The scrollbars may be moved again by draw(), since each one's size
-// depends on whether the other is visible or not.  This skips over
-// Fl_Group::resize since it moves the scrollbars uselessly.
-/**
-  Repositions and/or resizes the browser.
-  \param[in] X,Y,W,H The new position and size for the browser, in pixels.
-*/
-void Fl_Browser_::resize(int X, int Y, int W, int H) {
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  Fl_Widget::resize(X, Y, W, H);
-  // move the scrollbars so they can respond to events:
-  bbox(X,Y,W,H);
-  scrollbar.resize(
-	scrollbar.align()&FL_ALIGN_LEFT ? X-scrollsize : X+W,
-	Y, scrollsize, H);
-  hscrollbar.resize(
-	X, scrollbar.align()&FL_ALIGN_TOP ? Y-scrollsize : Y+H,
-	W, scrollsize);
-  max_width = 0;
-}
-
-// Cause minimal update to redraw the given item:
-/**
-  This method should be called when the contents of \p item has changed,
-  but not its height.
-  \param[in] item The item that needs to be redrawn.
-  \see redraw_lines(), redraw_line()
-*/
-void Fl_Browser_::redraw_line(void* item) {
-  if (!redraw1 || redraw1 == item) {redraw1 = item; damage(FL_DAMAGE_EXPOSE);}
-  else if (!redraw2 || redraw2 == item) {redraw2 = item; damage(FL_DAMAGE_EXPOSE);}
-  else damage(FL_DAMAGE_SCROLL);
-}
-
-// Figure out top() based on position():
-void Fl_Browser_::update_top() {
-  if (!top_) top_ = item_first();
-  if (position_ != real_position_) {
-    void* l;
-    int ly;
-    int yy = position_;
-    // start from either head or current position, whichever is closer:
-    if (!top_ || yy <= (real_position_/2)) {
-      l = item_first();
-      ly = 0;
-    } else {
-      l = top_;
-      ly = real_position_-offset_;
-    }
-    if (!l) {
-      top_ = 0;
-      offset_ = 0;
-      real_position_ = 0;
-    } else {
-      int hh = item_quick_height(l);
-      // step through list until we find line containing this point:
-      while (ly > yy) {
-	void* l1 = item_prev(l);
-	if (!l1) {ly = 0; break;} // hit the top
-	l  = l1;
-	hh = item_quick_height(l);
-	ly -= hh;
-      }
-      while ((ly+hh) <= yy) {
-	void* l1 = item_next(l);
-	if (!l1) {yy = ly+hh-1; break;}
-	l = l1;
-	ly += hh;
-	hh = item_quick_height(l);
-      }
-      // top item must *really* be visible, use slow height:
-      for (;;) {
-	hh = item_height(l);
-	if ((ly+hh) > yy) break; // it is big enough to see
-	// go up to top of previous item:
-	void* l1 = item_prev(l);
-	if (!l1) {ly = yy = 0; break;} // hit the top
-	l = l1; yy = position_ = ly = ly-item_quick_height(l);
-      }
-      // use it:
-      top_ = l;
-      offset_ = yy-ly;
-      real_position_ = yy;
-    }
-    damage(FL_DAMAGE_SCROLL);
-  }
-}
-
-// Change position(), top() will update when update_top() is called
-// (probably by draw() or handle()):
-/**
-  Sets the vertical scroll position of the list to pixel position \p pos.
-  The position is how many pixels of the list are scrolled off the top edge
-  of the screen. Example: A position of '3' scrolls the top three pixels of
-  the list off the top edge of the screen.
-  \param[in] pos The vertical position (in pixels) to scroll the browser to.
-  \see position(), hposition()
-*/
-void Fl_Browser_::position(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos == position_) return;
-  position_ = pos;
-  if (pos != real_position_) redraw_lines();
-}
-
-/**
-  Sets the horizontal scroll position of the list to pixel position \p pos.
-  The position is how many pixels of the list are scrolled off the left edge
-  of the screen. Example: A position of '18' scrolls the left 18 pixels of the list
-  off the left edge of the screen.
-  \param[in] pos The horizontal position (in pixels) to scroll the browser to.
-  \see position(), hposition()
-*/
-void Fl_Browser_::hposition(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos == hposition_) return;
-  hposition_ = pos;
-  if (pos != real_hposition_) redraw_lines();
-}
-
-// Tell whether item is currently displayed:
-/**
-  Returns non-zero if \p item has been scrolled to a position where it is being displayed.
-  Checks to see if the item's vertical position is within the top and bottom
-  edges of the display window. This does NOT take into account the hide()/show()
-  status of the widget or item.
-  \param[in] item The item to check
-  \returns 1 if visible, 0 if not visible.
-  \see display(), displayed()
-*/
-int Fl_Browser_::displayed(void* item) const {
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int yy = H+offset_;
-  for (void* l = top_; l && yy > 0; l = item_next(l)) {
-    if (l == item) return 1;
-    yy -= item_height(l);
-  }
-  return 0;
-}
-
-// Ensure this item is displayed:
-// Messy because we have no idea if it is before top or after bottom:
-/**
-  Displays the \p item, scrolling the list as necessary.
-  \param[in] item The item to be displayed.
-  \see display(), displayed()
-*/
-void Fl_Browser_::display(void* item) {
-
-  // First special case - want to display first item in the list?
-  update_top();
-  if (item == item_first()) {position(0); return;}
-
-  int X, Y, W, H, Yp; bbox(X, Y, W, H);
-  void* l = top_;
-  Y = Yp = -offset_;
-  int h1;
-
-  // 2nd special case - want to display item already displayed at top of browser?
-  if (l == item) {position(real_position_+Y); return;} // scroll up a bit
-
-  // 3rd special case - want to display item just above top of browser?
-  void* lp = item_prev(l);
-  if (lp == item) {position(real_position_+Y-item_quick_height(lp)); return;}
-
-#ifdef DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
-  // search for item.  We search both up and down the list at the same time,
-  // this evens up the execution time for the two cases - the old way was
-  // much slower for going up than for going down.
-  while (l || lp) {
-    if (l) {
-      h1 = item_quick_height(l);
-      if (l == item) {
-	if (Y <= H) { // it is visible or right at bottom
-	  Y = Y+h1-H; // find where bottom edge is
-	  if (Y > 0) position(real_position_+Y); // scroll down a bit
-	} else {
-	  position(real_position_+Y-(H-h1)/2); // center it
-	}
-	return;
-      }
-      Y += h1;
-      l = item_next(l);
-    }
-    if (lp) {
-      h1 = item_quick_height(lp);
-      Yp -= h1;
-      if (lp == item) {
-	if ((Yp + h1) >= 0) position(real_position_+Yp);
-	else position(real_position_+Yp-(H-h1)/2);
-	return;
-      }
-      lp = item_prev(lp);
-    }
-  }
-#else
-  // Old version went forwards and then backwards:
-  // search forward for it:
-  l = top_;
-  for (; l; l = item_next(l)) {
-    h1 = item_quick_height(l);
-    if (l == item) {
-      if (Y <= H) { // it is visible or right at bottom
-	Y = Y+h1-H; // find where bottom edge is
-	if (Y > 0) position(real_position_+Y); // scroll down a bit
-      } else {
-	position(real_position_+Y-(H-h1)/2); // center it
-      }
-      return;
-    }
-    Y += h1;
-  }
-  // search backward for it, if found center it:
-  l = lp;
-  Y = -offset_;
-  for (; l; l = item_prev(l)) {
-    h1 = item_quick_height(l);
-    Y -= h1;
-    if (l == item) {
-      if ((Y + h1) >= 0) position(real_position_+Y);
-      else position(real_position_+Y-(H-h1)/2);
-      return;
-    }
-  }
-#endif
-}
-
-// redraw, has side effect of updating top and setting scrollbar:
-/**
-  Draws the list within the normal widget bounding box.
-*/
-void Fl_Browser_::draw() {
-  int drawsquare = 0;
-  update_top();
-  int full_width_ = full_width();
-  int full_height_ = full_height();
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int dont_repeat = 0;
-J1:
-  if (damage() & FL_DAMAGE_ALL) { // redraw the box if full redraw
-    Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-    draw_box(b, x(), y(), w(), h(), color());
-    drawsquare = 1;
-  }
-  // see if scrollbar needs to be switched on/off:
-  if ((has_scrollbar_ & VERTICAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
-    if (!scrollbar.visible()) {
-      scrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    top_ = item_first(); real_position_ = offset_ = 0;
-    if (scrollbar.visible()) {
-      scrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  if ((has_scrollbar_ & HORIZONTAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_ > W)) {
-    if (!hscrollbar.visible()) {
-      hscrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    real_hposition_ = 0;
-    if (hscrollbar.visible()) {
-      hscrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  // Check the vertical scrollbar again, just in case it needs to be drawn
-  // because the horizontal one is drawn.  There should be a cleaner way
-  // to do this besides copying the same code...
-  if ((has_scrollbar_ & VERTICAL) && (
-	(has_scrollbar_ & ALWAYS_ON) || position_ || full_height_ > H)) {
-    if (!scrollbar.visible()) {
-      scrollbar.set_visible();
-      drawsquare = 1;
-      bbox(X, Y, W, H);
-    }
-  } else {
-    top_ = item_first(); real_position_ = offset_ = 0;
-    if (scrollbar.visible()) {
-      scrollbar.clear_visible();
-      clear_damage((uchar)(damage()|FL_DAMAGE_SCROLL));
-    }
-  }
-
-  bbox(X, Y, W, H);
-
-  fl_push_clip(X, Y, W, H);
-  // for each line, draw it if full redraw or scrolled.  Erase background
-  // if not a full redraw or if it is selected:
-  void* l = top();
-  int yy = -offset_;
-  for (; l && yy < H; l = item_next(l)) {
-    int hh = item_height(l);
-    if (hh <= 0) continue;
-    if ((damage()&(FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) || l == redraw1 || l == redraw2) {
-      if (item_selected(l)) {
-	fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
-	fl_rectf(X, yy+Y, W, hh);
-      } else if (!(damage()&FL_DAMAGE_ALL)) {
-	fl_push_clip(X, yy+Y, W, hh);
-	draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
-	fl_pop_clip();
-      }
-      item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
-      if (l == selection_ && Fl::focus() == this) {
-	draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color());
-	draw_focus(FL_NO_BOX, X, yy+Y, W+1, hh+1);
-      }
-      int ww = item_width(l);
-      if (ww > max_width) {max_width = ww; max_width_item = l;}
-    }
-    yy += hh;
-  }
-  // erase the area below last line:
-  if (!(damage()&FL_DAMAGE_ALL) && yy < H) {
-    fl_push_clip(X, yy+Y, W, H-yy);
-    draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
-    fl_pop_clip();
-  }
-  fl_pop_clip();
-
-  fl_push_clip(x(),y(),w(),h());		// STR# 2886
-  redraw1 = redraw2 = 0;
-  if (!dont_repeat) {
-    dont_repeat = 1;
-    // see if changes to full_height caused by calls to slow_height
-    // caused scrollbar state to change, in which case we have to redraw:
-    full_height_ = full_height();
-    full_width_ = full_width();
-    if ((has_scrollbar_ & VERTICAL) &&
-	((has_scrollbar_ & ALWAYS_ON) || position_ || full_height_>H)) {
-      if (!scrollbar.visible()) { damage(FL_DAMAGE_ALL); fl_pop_clip(); goto J1; }
-    } else {
-      if (scrollbar.visible()) { damage(FL_DAMAGE_ALL); fl_pop_clip(); goto J1; }
-    }
-    if ((has_scrollbar_ & HORIZONTAL) &&
-	((has_scrollbar_ & ALWAYS_ON) || hposition_ || full_width_>W)) {
-      if (!hscrollbar.visible()) { damage(FL_DAMAGE_ALL); fl_pop_clip(); goto J1; }
-    } else {
-      if (hscrollbar.visible()) { damage(FL_DAMAGE_ALL); fl_pop_clip(); goto J1; }
-    }
-  }
-
-  // update the scrollbars and redraw them:
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  int dy = top_ ? item_quick_height(top_) : 0; if (dy < 10) dy = 10;
-  if (scrollbar.visible()) {
-    scrollbar.damage_resize(
-	scrollbar.align()&FL_ALIGN_LEFT ? X-scrollsize : X+W,
-	Y, scrollsize, H);
-    scrollbar.value(position_, H, 0, full_height_);
-    scrollbar.linesize(dy);
-    if (drawsquare) draw_child(scrollbar);
-    else update_child(scrollbar);
-  }
-  if (hscrollbar.visible()) {
-    hscrollbar.damage_resize(
-	X, scrollbar.align()&FL_ALIGN_TOP ? Y-scrollsize : Y+H,
-	W, scrollsize);
-    hscrollbar.value(hposition_, W, 0, full_width_);
-    hscrollbar.linesize(dy);
-    if (drawsquare) draw_child(hscrollbar);
-    else update_child(hscrollbar);
-  }
-
-  // draw that little square between the scrollbars:
-  if (drawsquare && scrollbar.visible() && hscrollbar.visible()) {
-    fl_color(parent()->color());
-    fl_rectf(scrollbar.x(), hscrollbar.y(), scrollsize, scrollsize);
-  }
-
-  real_hposition_ = hposition_;
-  fl_pop_clip();
-}
-
-// Quick way to delete and reset everything:
-/**
-  This method should be called when the list data is completely replaced
-  or cleared. It informs the Fl_Browser_ widget that any cached
-  information it has concerning the items is invalid.
-  This method does not clear the list, it just handles the follow up
-  bookkeeping after the list has been cleared.
-*/
-void Fl_Browser_::new_list() {
-  top_ = 0;
-  position_ = real_position_ = 0;
-  hposition_ = real_hposition_ = 0;
-  selection_ = 0;
-  offset_ = 0;
-  max_width = 0;
-  max_width_item = 0;
-  redraw_lines();
-}
-
-// Tell it that this item is going away, and that this must remove
-// all pointers to it:
-/**
-  This method should be used when \p item is being deleted from the list.
-  It allows the Fl_Browser_ to discard any cached data it has on the item.
-  This method does not actually delete the item, but handles the follow up
-  bookkeeping after the item has just been deleted.
-  \param[in] item The item being deleted.
-*/
-void Fl_Browser_::deleting(void* item) {
-  if (displayed(item)) {
-    redraw_lines();
-    if (item == top_) {
-      real_position_ -= offset_;
-      offset_ = 0;
-      top_ = item_next(item);
-      if (!top_) top_ = item_prev(item);
-    }
-  } else {
-    // we don't know where this item is, recalculate top...
-    real_position_ = 0;
-    offset_ = 0;
-    top_ = 0;
-  }
-  if (item == selection_) selection_ = 0;
-  if (item == max_width_item) {max_width_item = 0; max_width = 0;}
-}
-
-/**
-  This method should be used when item \p a is being replaced by item \p b.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  schedules a redraw for the item being changed, and tries to maintain the selection.
-  This method does not actually replace the item, but handles the follow up
-  bookkeeping after the item has just been replaced.
-  \param[in] a Item being replaced
-  \param[in] b Item to replace 'a'
-*/
-void Fl_Browser_::replacing(void* a, void* b) {
-  redraw_line(a);
-  if (a == selection_) selection_ = b;
-  if (a == top_) top_ = b;
-  if (a == max_width_item) {max_width_item = 0; max_width = 0;}
-}
-
-/**
-  This method should be used when two items \p a and \p b are being swapped.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  schedules a redraw for the two items, and tries to maintain the current selection.
-  This method does not actually swap items, but handles the follow up
-  bookkeeping after items have been swapped.
-  \param[in] a,b Items being swapped.
-*/
-void Fl_Browser_::swapping(void* a, void* b) {
-  redraw_line(a);
-  redraw_line(b);
-  if (a == selection_) selection_ = b;
-  else if (b == selection_) selection_ = a;
-  if (a == top_) top_ = b;
-  else if (b == top_) top_ = a;
-}
-
-/**
-  This method should be used when an item is in the process of
-  being inserted into the list.
-  It allows the Fl_Browser_ to update its cache data as needed,
-  scheduling a redraw for the affected lines.
-  This method does not actually insert items, but handles the 
-  follow up bookkeeping after items have been inserted.
-  \param[in] a The starting item position
-  \param[in] b The new item being inserted
-*/
-void Fl_Browser_::inserting(void* a, void* b) {
-  if (displayed(a)) redraw_lines();
-  if (a == top_) top_ = b;
-}
-
-/**
-  This method returns the item under mouse y position \p ypos.
-  NULL is returned if no item is displayed at that position.
-  \param[in] ypos The y position (eg. Fl::event_y()) to find an item under.
-  \returns The item, or NULL if not found
-*/
-void* Fl_Browser_::find_item(int ypos) {
-  update_top();
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int yy = Y-offset_;
-  for (void *l = top_; l; l = item_next(l)) {
-    int hh = item_height(l); if (hh <= 0) continue;
-    yy += hh;
-    if (ypos <= yy || yy>=(Y+H)) return l;
-  }
-  return 0;
-}
-
-/**
-  Sets the selection state of \p item to \p val,
-  and returns 1 if the state changed or 0 if it did not.
-  
-  If \p docallbacks is non-zero, select tries to call
-  the callback function for the widget.
-
-  \param[in] item The item whose selection state is to be changed
-  \param[in] val The new selection state (1=select, 0=de-select)
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-  \returns 1 if state was changed, 0 if not.
-*/
-int Fl_Browser_::select(void* item, int val, int docallbacks) {
-  if (type() == FL_MULTI_BROWSER) {
-    if (selection_ != item) {
-      if (selection_) redraw_line(selection_);
-      selection_ = item;
-      redraw_line(item);
-    }
-    if ((!val)==(!item_selected(item))) return 0;
-    item_select(item, val);
-    redraw_line(item);
-  } else {
-    if (val && selection_ == item) return 0;
-    if (!val && selection_ != item) return 0;
-    if (selection_) {
-      item_select(selection_, 0);
-      redraw_line(selection_);
-      selection_ = 0;
-    }
-    if (val) {
-      item_select(item, 1);
-      selection_ = item;
-      redraw_line(item);
-      display(item);
-    }
-  }	    
-  if (docallbacks) {
-    set_changed();
-    do_callback();
-  }
-  return 1;
-}
-
-/**
-  Deselects all items in the list and returns 1 if the state changed
-  or 0 if it did not.
-  
-  If the optional \p docallbacks parameter is non-zero, deselect tries
-  to call the callback function for the widget.
-
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-*/
-int Fl_Browser_::deselect(int docallbacks) {
-  if (type() == FL_MULTI_BROWSER) {
-    int change = 0;
-    for (void* p = item_first(); p; p = item_next(p))
-      change |= select(p, 0, docallbacks);
-    return change;
-  } else {
-    if (!selection_) return 0;
-    item_select(selection_, 0);
-    redraw_line(selection_);
-    selection_ = 0;
-    return 1;
-  }
-}
-
-/**
-  Selects \p item and returns 1 if the state changed or 0 if it did not.
-  Any other items in the list are deselected.
-  \param[in] item The \p item to select.
-  \param[in] docallbacks If 1, invokes widget callback if item changed.\n
-                         If 0, doesn't do callback (default).
-*/
-int Fl_Browser_::select_only(void* item, int docallbacks) {
-  if (!item) return deselect(docallbacks);
-  int change = 0;
-  Fl_Widget_Tracker wp(this);
-  if (type() == FL_MULTI_BROWSER) {
-    for (void* p = item_first(); p; p = item_next(p)) {
-      if (p != item) change |= select(p, 0, docallbacks);
-      if (wp.deleted()) return change;
-    }
-  }
-  change |= select(item, 1, docallbacks);
-  if (wp.deleted()) return change;
-  display(item);
-  return change;
-}
-
-/**
-  Handles the \p event within the normal widget bounding box.
-  \param[in] event The event to process.
-  \returns 1 if event was processed, 0 if not.
-*/
-int Fl_Browser_::handle(int event) {
-
-  // NOTE:
-  // We use Fl_Widget_Tracker to test if the user has deleted
-  // this widget in a callback. Callbacks can be called by:
-  //  - do_callback()
-  //  - select()
-  //  - select_only()
-  //  - deselect()
-  // Thus we must test wp.deleted() after each of these calls,
-  // unless we return directly after one of these.
-  // If wp.deleted() is true, we return 1 because we used the event.
-
-  Fl_Widget_Tracker wp(this);
-
-  // must do shortcuts first or the scrollbar will get them...
-  if (event == FL_ENTER || event == FL_LEAVE) return 1;
-  if (event == FL_KEYBOARD && type() >= FL_HOLD_BROWSER) {
-    void* l1 = selection_;
-    void* l = l1; if (!l) l = top_; if (!l) l = item_first();
-    if (l) {
-      if (type()==FL_HOLD_BROWSER) {
-        switch (Fl::event_key()) {
-        case FL_Down:
-	  while ((l = item_next(l))) {
-	    if (item_height(l)>0) {select_only(l, when()); break;}
-	  }
-	  return 1;
-        case FL_Up:
-          while ((l = item_prev(l))) {
-	    if (item_height(l)>0) {
-	      select_only(l, when());
-	      break; // no need to test wp (return 1)
-	    }
-	  }
-          return 1;
-        } 
-      } else  {
-        switch (Fl::event_key()) {
-        case FL_Enter:
-        case FL_KP_Enter:
-          select_only(l, when() & ~FL_WHEN_ENTER_KEY);
-	  if (wp.deleted()) return 1;
-	  if (when() & FL_WHEN_ENTER_KEY) {
-	    set_changed();
-	    do_callback();
-	  }
-          return 1;
-        case ' ':
-          selection_ = l;
-          select(l, !item_selected(l), when() & ~FL_WHEN_ENTER_KEY);
-          return 1;
-        case FL_Down:
-          while ((l = item_next(l))) {
-            if (Fl::event_state(FL_SHIFT|FL_CTRL))
-              select(l, l1 ? item_selected(l1) : 1, when());
-	    if (wp.deleted()) return 1;
-            if (item_height(l)>0) goto J1;
-          }
-          return 1;
-        case FL_Up:
-          while ((l = item_prev(l))) {
-            if (Fl::event_state(FL_SHIFT|FL_CTRL))
-              select(l, l1 ? item_selected(l1) : 1, when());
-	    if (wp.deleted()) return 1;
-            if (item_height(l)>0) goto J1;
-          }
-          return 1;
-J1:
-          if (selection_) redraw_line(selection_);
-          selection_ = l; redraw_line(l);
-          display(l);
-          return 1;
-        }
-      }
-    }
-  }
-  
-  if (Fl_Group::handle(event)) return 1;
-  if (wp.deleted()) return 1;
-
-  int X, Y, W, H; bbox(X, Y, W, H);
-  int my;
-// NOTE:
-// instead of:
-//     change = select_only(find_item(my), when() & FL_WHEN_CHANGED)
-// we use the construct:
-//     change = select_only(find_item(my), 0);
-//     if (change && (when() & FL_WHEN_CHANGED)) {
-//	 set_changed();
-//       do_callback();
-//     }
-// See str #834
-// The first form calls the callback *before* setting change.
-// The callback may execute an Fl::wait(), resulting in another
-// call of Fl_Browser_::handle() for the same widget. The sequence
-// of events can be an FL_PUSH followed by an FL_RELEASE.
-// This second call of Fl_Browser_::handle() may result in a -
-// somewhat unexpected - second concurrent invocation of the callback.
-
-  static char change;
-  static char whichway;
-  static int py;
-  switch (event) {
-  case FL_PUSH:
-    if (!Fl::event_inside(X, Y, W, H)) return 0;
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    my = py = Fl::event_y();
-    change = 0;
-    if (type() == FL_NORMAL_BROWSER || !top_)
-      ;
-    else if (type() != FL_MULTI_BROWSER) {
-      change = select_only(find_item(my), 0);
-      if (wp.deleted()) return 1;
-      if (change && (when() & FL_WHEN_CHANGED)) {
-	set_changed();
-	do_callback();
-	if (wp.deleted()) return 1;
-      }
-    } else {
-      void* l = find_item(my);
-      whichway = 1;
-      if (Fl::event_state(FL_COMMAND)) { // toggle selection:
-      TOGGLE:
-	if (l) {
-	  whichway = !item_selected(l);
-	  change = select(l, whichway, 0);
-	  if (wp.deleted()) return 1;
-	  if (change && (when() & FL_WHEN_CHANGED)) {
-	    set_changed();
-	    do_callback();
-	    if (wp.deleted()) return 1;
-	  }
-	}
-      } else if (Fl::event_state(FL_SHIFT)) { // extend selection:
-	if (l == selection_) goto TOGGLE;
-	// state of previous selection determines new value:
-	whichway = l ? !item_selected(l) : 1;
-	// see which of the new item or previous selection is earlier,
-	// by searching from the previous forward for this one:
-	int down;
-	if (!l) down = 1;
-	else {for (void* m = selection_; ; m = item_next(m)) {
-	  if (m == l) {down = 1; break;}
-	  if (!m) {down = 0; break;}
-	}}
-	if (down) {
-	  for (void* m = selection_; m != l; m = item_next(m)) {
-	    select(m, whichway, when() & FL_WHEN_CHANGED);
-	    if (wp.deleted()) return 1;
-	  }
-	} else {
-	  void* e = selection_;
-	  for (void* m = item_next(l); m; m = item_next(m)) {
-	    select(m, whichway, when() & FL_WHEN_CHANGED);
-	    if (wp.deleted()) return 1;
-	    if (m == e) break;
-	  }
-	}
-	// do the clicked item last so the select box is around it:
-	change = 1;
-	if (l) select(l, whichway, when() & FL_WHEN_CHANGED);
-	if (wp.deleted()) return 1;
-      } else { // select only this item
-	change = select_only(l, 0);
-	if (wp.deleted()) return 1;
-	if (change && (when() & FL_WHEN_CHANGED)) {
-	  set_changed();
-	  do_callback();
-	  if (wp.deleted()) return 1;
-	}
-      }
-    }
-    return 1;
-  case FL_DRAG:
-    // do the scrolling first:
-    my = Fl::event_y();
-    if (my < Y && my < py) {
-      int p = real_position_+my-Y;
-      if (p<0) p = 0;
-      position(p);
-    } else if (my > (Y+H) && my > py) {
-      int p = real_position_+my-(Y+H);
-      int hh = full_height()-H; if (p > hh) p = hh;
-      if (p<0) p = 0;
-      position(p);
-    }
-    if (type() == FL_NORMAL_BROWSER || !top_)
-      ;
-    else if (type() == FL_MULTI_BROWSER) {
-      void* l = find_item(my);
-      void* t; void* b; // this will be the range to change
-      if (my > py) { // go down
-	t = selection_ ? item_next(selection_) : 0;
-	b = l ? item_next(l) : 0;
-      } else {	// go up
-	t = l;
-	b = selection_;
-      }
-      for (; t && t != b; t = item_next(t)) {
-	char change_t;
-	change_t = select(t, whichway, 0);
-	if (wp.deleted()) return 1;
-	change |= change_t;
-	if (change_t && (when() & FL_WHEN_CHANGED)) {
-	  set_changed();
-	  do_callback();
-	  if (wp.deleted()) return 1;
-	}
-      }
-      if (l) selection_ = l;
-    } else {
-      void* l1 = selection_;
-      void* l =
-	(Fl::event_x()<x() || Fl::event_x()>x()+w()) ? selection_ :
-	find_item(my);
-      change = (l != l1);
-      select_only(l, when() & FL_WHEN_CHANGED);
-      if (wp.deleted()) return 1;
-    }
-    py = my;
-    return 1;
-  case FL_RELEASE:
-    if (type() == FL_SELECT_BROWSER) {
-      void* t = selection_;
-      deselect();
-      if (wp.deleted()) return 1;
-      selection_ = t;
-    }
-    if (change) {
-      set_changed();
-      if (when() & FL_WHEN_RELEASE) do_callback();
-    } else {
-      if (when() & FL_WHEN_NOT_CHANGED) do_callback();
-    }
-    if (wp.deleted()) return 1;
-
-    // double click calls the callback: (like Enter Key)
-    if (Fl::event_clicks() && (when() & FL_WHEN_ENTER_KEY)) {
-      set_changed();
-      do_callback();
-    }
-    return 1;
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (type() >= FL_HOLD_BROWSER && Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  }
-
-  return 0;
-}
-
-/**
-  The constructor makes an empty browser.
-  \param[in] X,Y,W,H position and size.
-  \param[in] L The label string, may be NULL.
-*/
-Fl_Browser_::Fl_Browser_(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(X, Y, W, H, L),
-    scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
-    hscrollbar(0, 0, 0, 0, 0)
-{
-  box(FL_NO_BOX);
-  align(FL_ALIGN_BOTTOM);
-  position_ = real_position_ = 0;
-  hposition_ = real_hposition_ = 0;
-  offset_ = 0;
-  top_ = 0;
-  when(FL_WHEN_RELEASE_ALWAYS);
-  selection_ = 0;
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  scrollbar.callback(scrollbar_callback);
-//scrollbar.align(FL_ALIGN_LEFT|FL_ALIGN_BOTTOM); // back compatibility?
-  hscrollbar.callback(hscrollbar_callback);
-  hscrollbar.type(FL_HORIZONTAL);
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  has_scrollbar_ = BOTH;
-  max_width = 0;
-  max_width_item = 0;
-  scrollbar_size_ = 0;
-  redraw1 = redraw2 = 0;
-  end();
-}
-
-/**
-  Sort the items in the browser based on \p flags.
-  item_swap(void*, void*) and item_text(void*) must be implemented for this call.
-  \param[in] flags FL_SORT_ASCENDING -- sort in ascending order\n
-                   FL_SORT_DESCENDING -- sort in descending order\n
-		   Values other than the above will cause undefined behavior\n
-		   Other flags may appear in the future.
-  \todo Add a flag to ignore case
-*/
-void Fl_Browser_::sort(int flags) {
-  //
-  // Simple bubble sort - pure lazyness on my side.
-  //
-  int i, j, n = -1, desc = ((flags&FL_SORT_DESCENDING)==FL_SORT_DESCENDING);
-  void *a =item_first(), *b, *c;
-  if (!a) return;
-  while (a) {
-    a = item_next(a);
-    n++;
-  }
-  for (i=n; i>0; i--) {
-    char swapped = 0;
-    a = item_first();
-    b = item_next(a);
-    for (j=0; j<i; j++) {
-      const char *ta = item_text(a);
-      const char *tb = item_text(b);
-      c = item_next(b);
-      if (desc) {
-        if (strcmp(ta, tb)<0) {
-          item_swap(a, b);
-          swapped = 1;
-        }
-      } else {
-        if (strcmp(ta, tb)>0) {
-          item_swap(a, b);
-          swapped = 1;
-        }
-      }
-      if (!c) break;
-      b = c; a = item_prev(b);
-    }
-    if (!swapped)
-      break;
-  }
-}
-
-// Default versions of some of the virtual functions:
-
-/**
-  This method may be provided by the subclass to return the height of the
-  \p item, in pixels.  
-  Allow for two additional pixels for the list selection box.
-  This method differs from item_height in that it is only called for 
-  selection and scrolling operations. 
-  The default implementation calls item_height.
-  \param[in] item The item whose height to return.
-  \returns The height, in pixels.
-*/
-int Fl_Browser_::item_quick_height(void* item) const {
-  return item_height(item);
-}
-
-/**
-  This method may be provided to return the average height of all items
-  to be used for scrolling. 
-  The default implementation uses the height of the first item.
-  \returns The average height of items, in pixels.
-*/
-int Fl_Browser_::incr_height() const {
-  return item_quick_height(item_first());
-}
-
-/**
-  This method may be provided by the subclass to indicate the full height
-  of the item list, in pixels. 
-  The default implementation computes the full height from the item heights. 
-  Includes the items that are scrolled off screen.
-  \returns The height of the entire list, in pixels.
-*/
-int Fl_Browser_::full_height() const {
-  int t = 0;
-  for (void* p = item_first(); p; p = item_next(p))
-    t += item_quick_height(p);
-  return t;
-}
-
-/**
-  This method may be provided by the subclass to indicate the full width
-  of the item list, in pixels. 
-  The default implementation computes the full width from the item widths.
-  \returns The maximum width of all the items, in pixels.
-*/
-int Fl_Browser_::full_width() const {
-  return max_width;
-}
-
-/**
-  This method must be implemented by the subclass if it supports 
-  multiple selections; sets the selection state to \p val for the \p item.
-  Sets the selection state for \p item, where optional \p val is 1 (select, the default)
-  or 0 (de-select).
-  \param[in] item The item to be selected
-  \param[in] val The optional selection state; 1=select, 0=de-select.\n
-                 The default is to select the item (1).
-*/
-void Fl_Browser_::item_select(void *item, int val) {}
-
-/**
-  This method must be implemented by the subclass if it supports
-  multiple selections; returns the selection state for \p item.
-  The method should return 1 if \p item is selected, or 0 otherwise.
-  \param[in] item The item to test.
-*/
-int Fl_Browser_::item_selected(void* item) const { return item==selection_ ? 1 : 0; }
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Browser_load.cxx
+++ /dev/null
@@ -1,61 +1,0 @@
-//
-// "$Id$"
-//
-// File loading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Browser.H>
-#include <stdio.h>
-#include <FL/fl_utf8.h>
-
-/**
-  Clears the browser and reads the file, adding each line from the file
-  to the browser.  If the filename is NULL or a zero-length
-  string then this just clears the browser.  This returns zero if there
-  was any error in opening or reading the file, in which case errno
-  is set to the system error.  The data() of each line is set
-  to NULL.
-  \param[in] filename The filename to load
-  \returns 1 if OK, 0 on error (errno has reason)
-  \see add()
-*/
-int Fl_Browser::load(const char *filename) {
-#define MAXFL_BLINE 1024
-    char newtext[MAXFL_BLINE];
-    int c;
-    int i;
-    clear();
-    if (!filename || !(filename[0])) return 1;
-    FILE *fl = fl_fopen(filename,"r");
-    if (!fl) return 0;
-    i = 0;
-    do {
-	c = getc(fl);
-	if (c == '\n' || c <= 0 || i>=(MAXFL_BLINE-1)) {
-	    newtext[i] = 0;
-	    add(newtext);
-	    i = 0;
-	} else {
-	    newtext[i++] = c;
-	}
-    } while (c >= 0);
-    fclose(fl);
-    return 1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Button.cxx
+++ /dev/null
@@ -1,252 +1,0 @@
-//
-// "$Id$"
-//
-// Button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-
-#include <FL/Fl_Radio_Button.H>
-#include <FL/Fl_Toggle_Button.H>
-
-
-Fl_Widget_Tracker *Fl_Button::key_release_tracker = 0;
-
-
-// There are a lot of subclasses, named Fl_*_Button.  Some of
-// them are implemented by setting the type() value and testing it
-// here.  This includes Fl_Radio_Button and Fl_Toggle_Button
-
-/**
-  Sets the current value of the button.
-  A non-zero value sets the button to 1 (ON), and zero sets it to 0 (OFF).
-  \param[in] v button value.
-  \see set(), clear()
- */
-int Fl_Button::value(int v) {
-  v = v ? 1 : 0;
-  oldval = v;
-  clear_changed();
-  if (value_ != v) {
-    value_ = v;
-    if (box()) redraw();
-    else redraw_label();
-    return 1;
-  } else {
-    return 0;
-  }
-}
-
-/**
-  Turns on this button and turns off all other radio buttons in the group
-  (calling \c value(1) or \c set() does not do this).
- */
-void Fl_Button::setonly() { // set this radio button on, turn others off
-  value(1);
-  Fl_Group* g = parent();
-  Fl_Widget*const* a = g->array();
-  for (int i = g->children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o != this && o->type()==FL_RADIO_BUTTON) ((Fl_Button*)o)->value(0);
-  }
-}
-
-void Fl_Button::draw() {
-  if (type() == FL_HIDDEN_BUTTON) return;
-  Fl_Color col = value() ? selection_color() : color();
-  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
-  draw_backdrop();
-  if (labeltype() == FL_NORMAL_LABEL && value()) {
-    Fl_Color c = labelcolor();
-    labelcolor(fl_contrast(c, col));
-    draw_label();
-    labelcolor(c);
-  } else draw_label();
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Button::handle(int event) {
-  int newval;
-  switch (event) {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_LEAVE:
-//  if ((value_?selection_color():color())==FL_GRAY) redraw();
-    return 1;
-  case FL_PUSH:
-    if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this);
-    /* FALLTHROUGH */
-  case FL_DRAG:
-    if (Fl::event_inside(this)) {
-      if (type() == FL_RADIO_BUTTON) newval = 1;
-      else newval = !oldval;
-    } else {
-      clear_changed();
-      newval = oldval;
-    }
-    if (newval != value_) {
-      value_ = newval;
-      set_changed();
-      redraw();
-      if (when() & FL_WHEN_CHANGED) do_callback();
-    }
-    return 1;
-  case FL_RELEASE:
-    if (value_ == oldval) {
-      if (when() & FL_WHEN_NOT_CHANGED) do_callback();
-      return 1;
-    }
-    set_changed();
-    if (type() == FL_RADIO_BUTTON) setonly();
-    else if (type() == FL_TOGGLE_BUTTON) oldval = value_;
-    else {
-      value(oldval);
-      set_changed();
-      if (when() & FL_WHEN_CHANGED) {
-	Fl_Widget_Tracker wp(this);
-        do_callback();
-        if (wp.deleted()) return 1;
-      }
-    }
-    if (when() & FL_WHEN_RELEASE) do_callback();
-    return 1;
-  case FL_SHORTCUT:
-    if (!(shortcut() ?
-	  Fl::test_shortcut(shortcut()) : test_shortcut())) return 0;
-    if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this);
-    goto triggered_by_keyboard;
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      if (box() == FL_NO_BOX) {
-	// Widgets with the FL_NO_BOX boxtype need a parent to
-	// redraw, since it is responsible for redrawing the
-	// background...
-	int X = x() > 0 ? x() - 1 : 0;
-	int Y = y() > 0 ? y() - 1 : 0;
-	if (window()) window()->damage(FL_DAMAGE_ALL, X, Y, w() + 2, h() + 2);
-      } else redraw();
-      return 1;
-    } else return 0;
-    /* NOTREACHED */
-  case FL_KEYBOARD :
-    if (Fl::focus() == this && Fl::event_key() == ' ' &&
-        !(Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) {
-      set_changed();
-    triggered_by_keyboard:
-      Fl_Widget_Tracker wp(this);
-      if (type() == FL_RADIO_BUTTON) {
-        if (!value_) {
-	  setonly();
-	  if (when() & FL_WHEN_CHANGED) do_callback();
-        }
-      } else if (type() == FL_TOGGLE_BUTTON) {
-	value(!value());
-	if (when() & FL_WHEN_CHANGED) do_callback();
-      } else {
-        simulate_key_action();
-      }
-      if (wp.deleted()) return 1;
-      if (when() & FL_WHEN_RELEASE) do_callback();
-      return 1;
-    }
-  default:
-    return 0;
-  }
-}
-
-void Fl_Button::simulate_key_action()
-{
-  if (key_release_tracker) {
-    Fl::remove_timeout(key_release_timeout, key_release_tracker);
-    key_release_timeout(key_release_tracker);
-  }
-  value(1);
-  redraw();
-  key_release_tracker = new Fl_Widget_Tracker(this);
-  Fl::add_timeout(0.15, key_release_timeout, key_release_tracker);
-}
-
-void Fl_Button::key_release_timeout(void *d)
-{
-  Fl_Widget_Tracker *wt = (Fl_Widget_Tracker*)d;
-  if (!wt)
-    return;
-  if (wt==key_release_tracker)
-    key_release_tracker = 0L;
-  Fl_Button *btn = (Fl_Button*)wt->widget();
-  if (btn) {
-    btn->value(0);
-    btn->redraw();
-  }
-  delete wt;
-}
-
-/**
-  The constructor creates the button using the given position, size, and label.
-
-  The default box type is box(FL_UP_BOX).
-
-  You can control how the button is drawn when ON by setting down_box().
-  The default is FL_NO_BOX (0) which will select an appropriate box type
-  using the normal (OFF) box type by using fl_down(box()).
-
-  Derived classes may handle this differently.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Button::Fl_Button(int X, int Y, int W, int H, const char *L)
-: Fl_Widget(X,Y,W,H,L) {
-  box(FL_UP_BOX);
-  down_box(FL_NO_BOX);
-  value_ = oldval = 0;
-  shortcut_ = 0;
-  set_flag(SHORTCUT_LABEL);
-}
-
-/**
-  The constructor creates the button using the given position, size, and label.
-
-  The Button type() is set to FL_RADIO_BUTTON.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Radio_Button::Fl_Radio_Button(int X,int Y,int W,int H,const char *L)
-: Fl_Button(X, Y, W, H, L) {
-  type(FL_RADIO_BUTTON);
-}
-
-/**
-  The constructor creates the button using the given position, size, and label.
-
-  The Button type() is set to FL_TOGGLE_BUTTON.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Toggle_Button::Fl_Toggle_Button(int X,int Y,int W,int H,const char *L)
-: Fl_Button(X,Y,W,H,L)
-{
-  type(FL_TOGGLE_BUTTON);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Chart.cxx
+++ /dev/null
@@ -1,427 +1,0 @@
-//
-// "$Id$"
-//
-// Forms-compatible chart widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/math.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Chart.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include <stdlib.h>
-
-#define ARCINC	(2.0*M_PI/360.0)
-
-// this function is in fl_boxtype.cxx:
-void fl_rectbound(int x,int y,int w,int h, Fl_Color color);
-
-/* Widget specific information */
-
-static void draw_barchart(int x,int y,int w,int h,
-			  int numb, FL_CHART_ENTRY entries[],
-			  double min, double max, int autosize, int maxnumb,
-			  Fl_Color textcolor)
-/* Draws a bar chart. x,y,w,h is the bounding box, entries the array of
-   numb entries and min and max the boundaries. */
-{
-  double incr;
-  int zeroh;
-  double lh = fl_height();
-  if (max == min) incr = h;
-  else incr = h/(max-min);
-  if ( (-min*incr) < lh) {
-      incr = (h - lh + min*incr)/(max-min);
-      zeroh = int(y+h-lh);
-  } else {
-      zeroh = (int)rint(y+h+min * incr);
-  }
-  int bwidth = (int)rint(w/double(autosize?numb:maxnumb));
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(x, zeroh, x+w, zeroh);
-  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
-  int i;
-  /* Draw the bars */
-  for (i=0; i<numb; i++) {
-      int hh = (int)rint(entries[i].val*incr);
-      if (hh < 0)
-	fl_rectbound(x+i*bwidth,zeroh,bwidth+1,-hh+1, (Fl_Color)entries[i].col);
-      else if (hh > 0)
-	fl_rectbound(x+i*bwidth,zeroh-hh,bwidth+1,hh+1,(Fl_Color)entries[i].col);
-  }
-  /* Draw the labels */
-  fl_color(textcolor);
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      x+i*bwidth+bwidth/2,zeroh,0,0,
-	      FL_ALIGN_TOP);
-}
-
-static void draw_horbarchart(int x,int y,int w,int h,
-			     int numb, FL_CHART_ENTRY entries[],
-			     double min, double max, int autosize, int maxnumb,
-			     Fl_Color textcolor)
-/* Draws a horizontal bar chart. x,y,w,h is the bounding box, entries the
-   array of numb entries and min and max the boundaries. */
-{
-  int i;
-  double lw = 0.0;		/* Maximal label width */
-  /* Compute maximal label width */
-  for (i=0; i<numb; i++) {
-      double w1 = fl_width(entries[i].str);
-      if (w1 > lw) lw = w1;
-  }
-  if (lw > 0.0) lw += 4.0;
-  double incr;
-  int zeroh;
-  if (max == min) incr = w;
-  else incr = w/(max-min);
-  if ( (-min*incr) < lw) {
-      incr = (w - lw + min*incr)/(max-min);
-      zeroh = x+(int)rint(lw);
-  } else {
-      zeroh = (int)rint(x-min * incr);
-  }
-  int bwidth = (int)rint(h/double(autosize?numb:maxnumb));
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(zeroh, y, zeroh, y+h);
-  if (min == 0.0 && max == 0.0) return; /* Nothing else to draw */
-  /* Draw the bars */
-  for (i=0; i<numb; i++) {
-      int ww = (int)rint(entries[i].val*incr);
-      if (ww > 0)
-	fl_rectbound(zeroh,y+i*bwidth,ww+1,bwidth+1, (Fl_Color)entries[i].col);
-      else if (ww < 0)
-	fl_rectbound(zeroh+ww,y+i*bwidth,-ww+1,bwidth+1,(Fl_Color)entries[i].col);
-  }
-  /* Draw the labels */
-  fl_color(textcolor);
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      zeroh-2,y+i*bwidth+bwidth/2,0,0,
-	      FL_ALIGN_RIGHT);
-}
-
-static void draw_linechart(int type, int x,int y,int w,int h,
-			   int numb, FL_CHART_ENTRY entries[],
-			   double min, double max, int autosize, int maxnumb,
-			   Fl_Color textcolor)
-/* Draws a line chart. x,y,w,h is the bounding box, entries the array of
-   numb entries and min and max the boundaries. */
-{
-  int i;
-  double lh = fl_height();
-  double incr;
-  if (max == min) incr = h-2.0*lh;
-  else incr = (h-2.0*lh)/ (max-min);
-  int zeroh = (int)rint(y+h-lh+min * incr);
-  double bwidth = w/double(autosize?numb:maxnumb);
-  /* Draw the values */
-  for (i=0; i<numb; i++) {
-      int x0 = x + (int)rint((i-.5)*bwidth);
-      int x1 = x + (int)rint((i+.5)*bwidth);
-      int yy0 = i ? zeroh - (int)rint(entries[i-1].val*incr) : 0;
-      int yy1 = zeroh - (int)rint(entries[i].val*incr);
-      if (type == FL_SPIKE_CHART) {
-	  fl_color((Fl_Color)entries[i].col);
-	  fl_line(x1, zeroh, x1, yy1);
-      } else if (type == FL_LINE_CHART && i != 0) {
-	  fl_color((Fl_Color)entries[i-1].col);
-	  fl_line(x0,yy0,x1,yy1);
-      } else if (type == FL_FILLED_CHART && i != 0) {
-	  fl_color((Fl_Color)entries[i-1].col);
-	  if ((entries[i-1].val>0.0)!=(entries[i].val>0.0)) {
-	      double ttt = entries[i-1].val/(entries[i-1].val-entries[i].val);
-	      int xt = x + (int)rint((i-.5+ttt)*bwidth);
-	      fl_polygon(x0,zeroh, x0,yy0, xt,zeroh);
-	      fl_polygon(xt,zeroh, x1,yy1, x1,zeroh);
-	  } else {
-	      fl_polygon(x0,zeroh, x0,yy0, x1,yy1, x1,zeroh);
-	  }
-	  fl_color(textcolor);
-	  fl_line(x0,yy0,x1,yy1);
-      }
-  }
-  /* Draw base line */
-  fl_color(textcolor);
-  fl_line(x,zeroh,x+w,zeroh);
-  /* Draw the labels */
-  for (i=0; i<numb; i++)
-      fl_draw(entries[i].str,
-	      x+(int)rint((i+.5)*bwidth), zeroh - (int)rint(entries[i].val*incr),0,0,
-	      entries[i].val>=0 ? FL_ALIGN_BOTTOM : FL_ALIGN_TOP);
-}
-
-static void draw_piechart(int x,int y,int w,int h,
-			  int numb, FL_CHART_ENTRY entries[], int special,
-			  Fl_Color textcolor)
-/* Draws a pie chart. x,y,w,h is the bounding box, entries the array of
-   numb entries */
-{
-  int i;
-  double xc,yc,rad;	/* center and radius */
-  double tot;		/* sum of values */
-  double incr;		/* increment in angle */
-  double curang;		/* current angle we are drawing */
-  double txc,tyc;	/* temporary center */
-  double lh = fl_height();
-  /* compute center and radius */
-  double h_denom = (special ? 2.3 : 2.0);
-  rad = (h - 2*lh)/h_denom/1.1;
-  xc = x+w/2.0; yc = y+h-1.1*rad-lh;
-  /* compute sum of values */
-  tot = 0.0;
-  for (i=0; i<numb; i++)
-    if (entries[i].val > 0.0) tot += entries[i].val;
-  if (tot == 0.0) return;
-  incr = 360.0/tot;
-  /* Draw the pie */
-  curang = 0.0;
-  for (i=0; i<numb; i++)
-    if (entries[i].val > 0.0)
-    {
-      txc = xc; tyc = yc;
-      /* Correct for special pies */
-      if (special && i==0)
-      {
-        txc += 0.3*rad*cos(ARCINC*(curang+0.5*incr*entries[i].val));
-        tyc -= 0.3*rad*sin(ARCINC*(curang+0.5*incr*entries[i].val));
-      }
-      fl_color((Fl_Color)entries[i].col);
-      fl_begin_polygon(); fl_vertex(txc,tyc);
-      fl_arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
-      fl_end_polygon();
-      fl_color(textcolor);
-      fl_begin_loop(); fl_vertex(txc,tyc);
-      fl_arc(txc,tyc,rad,curang, curang+incr*entries[i].val);
-      fl_end_loop();
-      curang += 0.5 * incr * entries[i].val;
-      /* draw the label */
-      double xl = txc + 1.1*rad*cos(ARCINC*curang);
-      fl_draw(entries[i].str,
-	      (int)rint(xl),
-	      (int)rint(tyc - 1.1*rad*sin(ARCINC*curang)),
-	      0, 0,
-	      xl<txc ? FL_ALIGN_RIGHT : FL_ALIGN_LEFT);
-      curang += 0.5 * incr * entries[i].val;
-    }
-}
-
-void Fl_Chart::draw() {
-
-    draw_box();
-    Fl_Boxtype b = box();
-    int xx = x()+Fl::box_dx(b); // was 9 instead of dx...
-    int yy = y()+Fl::box_dy(b);
-    int ww = w()-Fl::box_dw(b);
-    int hh = h()-Fl::box_dh(b);
-    fl_push_clip(xx, yy, ww, hh);
-
-    ww--; hh--; // adjust for line thickness
-
-    if (min >= max) {
-	min = max = 0.0;
-	for (int i=0; i<numb; i++) {
-	    if (entries[i].val < min) min = entries[i].val;
-	    if (entries[i].val > max) max = entries[i].val;
-	}
-    }
-
-    fl_font(textfont(),textsize());
-
-    switch (type()) {
-    case FL_BAR_CHART:
-	ww++; // makes the bars fill box correctly
-	draw_barchart(xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    case FL_HORBAR_CHART:
-	hh++; // makes the bars fill box correctly
-	draw_horbarchart(xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    case FL_PIE_CHART:
-	draw_piechart(xx,yy,ww,hh,numb,entries,0, textcolor());
-	break;
-    case FL_SPECIALPIE_CHART:
-	draw_piechart(xx,yy,ww,hh,numb,entries,1,textcolor());
-	break;
-    default:
-	draw_linechart(type(),xx,yy,ww,hh, numb, entries, min, max,
-			autosize(), maxnumb, textcolor());
-	break;
-    }
-    draw_label();
-    fl_pop_clip();
-}
-
-/*------------------------------*/
-
-#define FL_CHART_BOXTYPE	FL_BORDER_BOX
-#define FL_CHART_COL1		FL_COL1
-#define FL_CHART_LCOL		FL_LCOL
-#define FL_CHART_ALIGN		FL_ALIGN_BOTTOM
-
-/**
-  Create a new Fl_Chart widget using the given position, size and label string.
-  The default boxstyle is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Chart::Fl_Chart(int X, int Y, int W, int H,const char *L) :
-Fl_Widget(X,Y,W,H,L) {
-  box(FL_BORDER_BOX);
-  align(FL_ALIGN_BOTTOM);
-  numb       = 0;
-  maxnumb    = 0;
-  sizenumb   = FL_CHART_MAX;
-  autosize_  = 1;
-  min = max  = 0;
-  textfont_  = FL_HELVETICA;
-  textsize_  = 10;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  entries    = (FL_CHART_ENTRY *)calloc(sizeof(FL_CHART_ENTRY), FL_CHART_MAX + 1);
-}
-
-/**
-  Destroys the Fl_Chart widget and all of its data.
- */
-Fl_Chart::~Fl_Chart() {
-  free(entries);
-}
-
-/**
-  Removes all values from the chart.
- */
-void Fl_Chart::clear() {
-  numb = 0;
-  min = max = 0;
-  redraw();
-}
-
-/**
-  Add the data value \p val with optional label \p str and color \p col
-  to the chart.
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::add(double val, const char *str, unsigned col) {
-  /* Allocate more entries if required */
-  if (numb >= sizenumb) {
-    sizenumb += FL_CHART_MAX;
-    entries = (FL_CHART_ENTRY *)realloc(entries, sizeof(FL_CHART_ENTRY) * (sizenumb + 1));
-  }
-  // Shift entries as needed
-  if (numb >= maxnumb && maxnumb > 0) {
-    memmove(entries, entries + 1, sizeof(FL_CHART_ENTRY) * (numb - 1));
-    numb --;
-  }
-  entries[numb].val = float(val);
-  entries[numb].col = col;
-    if (str) {
-	strlcpy(entries[numb].str,str,FL_CHART_LABEL_MAX + 1);
-    } else {
-	entries[numb].str[0] = 0;
-    }
-  numb++;
-  redraw();
-}
-
-/**
-  Inserts a data value \p val at the given position \p ind.
-  Position 1 is the first data value.
-  \param[in] ind insertion position
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::insert(int ind, double val, const char *str, unsigned col) {
-  int i;
-  if (ind < 1 || ind > numb+1) return;
-  /* Allocate more entries if required */
-  if (numb >= sizenumb) {
-    sizenumb += FL_CHART_MAX;
-    entries = (FL_CHART_ENTRY *)realloc(entries, sizeof(FL_CHART_ENTRY) * (sizenumb + 1));
-  }
-  // Shift entries as needed
-  for (i=numb; i >= ind; i--) entries[i] = entries[i-1];
-  if (numb < maxnumb || maxnumb == 0) numb++;
-  /* Fill in the new entry */
-  entries[ind-1].val = float(val);
-  entries[ind-1].col = col;
-  if (str) {
-      strlcpy(entries[ind-1].str,str,FL_CHART_LABEL_MAX+1);
-  } else {
-      entries[ind-1].str[0] = 0;
-  }
-  redraw();
-}
-
-/**
-  Replace a data value \p val at the given position \p ind.
-  Position 1 is the first data value.
-  \param[in] ind insertion position
-  \param[in] val data value
-  \param[in] str optional data label
-  \param[in] col optional data color
- */
-void Fl_Chart::replace(int ind,double val, const char *str, unsigned col) {
-  if (ind < 1 || ind > numb) return;
-  entries[ind-1].val = float(val);
-  entries[ind-1].col = col;
-  if (str) {
-      strlcpy(entries[ind-1].str,str,FL_CHART_LABEL_MAX+1);
-  } else {
-      entries[ind-1].str[0] = 0;
-  }
-  redraw();
-}
-
-/**
-  Sets the lower and upper bounds of the chart values.
-  \param[in] a, b are used to set lower, upper
- */
-void Fl_Chart::bounds(double a, double b) {
-  this->min = a;
-  this->max = b;
-  redraw();
-}
-
-/**
-  Set the maximum number of data values for a chart.
-  If you do not call this method then the chart will be allowed to grow
-  to any size depending on available memory.
-  \param[in] m maximum number of data values allowed.
- */
-void Fl_Chart::maxsize(int m) {
-  int i;
-  /* Fill in the new number */
-  if (m < 0) return;
-  maxnumb = m;
-  /* Shift entries if required */
-  if (numb > maxnumb) {
-      for (i = 0; i<maxnumb; i++)
-	  entries[i] = entries[i+numb-maxnumb];
-      numb = maxnumb;
-      redraw();
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Check_Browser.cxx
+++ /dev/null
@@ -1,320 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Check_Browser header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <FL/fl_draw.H>
-#include <FL/Fl_Check_Browser.H>
-
-/* This uses a cache for faster access when you're scanning the list
-either forwards or backwards. */
-
-Fl_Check_Browser::cb_item *Fl_Check_Browser::find_item(int n) const {
-	int i = n;
-	cb_item *p = first;
-
-	if (n <= 0 || n > nitems_ || p == 0) {
-		return 0;
-	}
-
-	if (n == cached_item) {
-		p = cache;
-		n = 1;
-	} else if (n == cached_item + 1) {
-		p = cache->next;
-		n = 1;
-	} else if (n == cached_item - 1) {
-		p = cache->prev;
-		n = 1;
-	}
-
-	while (--n) {
-		p = p->next;
-	}
-
-	/* Cast to not const and cache it. */
-
-	((Fl_Check_Browser *)this)->cache = p;
-	((Fl_Check_Browser *)this)->cached_item = i;
-
-	return p;
-}
-
-int Fl_Check_Browser::lineno(cb_item *p0) const {
-	cb_item *p = first;
-
-	if (p == 0) {
-		return 0;
-	}
-
-	int i = 1;
-	while (p) {
-		if (p == p0) {
-			return i;
-		}
-		i++;
-		p = p->next;
-	}
-
-	return 0;
-}
-
-Fl_Check_Browser::Fl_Check_Browser(int X, int Y, int W, int H, const char *l)
-/**  The constructor makes an empty browser.*/
-: Fl_Browser_(X, Y, W, H, l) {
-	type(FL_SELECT_BROWSER);
-	when(FL_WHEN_NEVER);
-	first = last = 0;
-	nitems_ = nchecked_ = 0;
-	cached_item = -1;
-}
-
-void *Fl_Check_Browser::item_first() const {
-	return first;
-}
-
-void *Fl_Check_Browser::item_next(void *l) const {
-	return ((cb_item *)l)->next;
-}
-
-void *Fl_Check_Browser::item_prev(void *l) const {
-	return ((cb_item *)l)->prev;
-}
-
-int Fl_Check_Browser::item_height(void *) const {
-	return textsize() + 2;
-}
-
-#define CHECK_SIZE (textsize()-2)
-
-int Fl_Check_Browser::item_width(void *v) const {
-	fl_font(textfont(), textsize());
-	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + 8;
-}
-
-void Fl_Check_Browser::item_draw(void *v, int X, int Y, int, int) const {
-	cb_item *i = (cb_item *)v;
-	char *s = i->text;
-	int tsize = textsize();
-	Fl_Color col = active_r() ? textcolor() : fl_inactive(textcolor());
-	int cy = Y + (tsize + 1 - CHECK_SIZE) / 2;
-	X += 2;
-
-	fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-	fl_loop(X, cy, X, cy + CHECK_SIZE,
-	        X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
-	if (i->checked) {
-	  int tx = X + 3;
-	  int tw = CHECK_SIZE - 4;
-	  int d1 = tw/3;
-	  int d2 = tw-d1;
-	  int ty = cy + (CHECK_SIZE+d2)/2-d1-2;
-	  for (int n = 0; n < 3; n++, ty++) {
-	    fl_line(tx, ty, tx+d1, ty+d1);
-	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	  }
-	}
-	fl_font(textfont(), tsize);
-	if (i->selected) {
-		col = fl_contrast(col, selection_color());
-	}
-	fl_color(col);
-	fl_draw(s, X + CHECK_SIZE + 8, Y + tsize - 1);
-}
-
-void Fl_Check_Browser::item_select(void *v, int state) {
-	cb_item *i = (cb_item *)v;
-
-	if (state) {
-		if (i->checked) {
-			i->checked = 0;
-			nchecked_--;
-		} else {
-			i->checked = 1;
-			nchecked_++;
-		}
-	}
-}
-
-int Fl_Check_Browser::item_selected(void *v) const {
-	cb_item *i = (cb_item *)v;
-	return i->selected;
-}
-/**
- Add a new unchecked line to the end of the browser.  
- \see add(char *s, int b)
-*/
-int Fl_Check_Browser::add(char *s) {
-	return (add(s, 0));
-}
-
-/** 
- Add a new line to the end of the browser.  The text is copied
- using the strdup() function.  It may also be NULL to make
- a blank line.  It can set the item checked if \p b is not 0.
- */
-int Fl_Check_Browser::add(char *s, int b) {
-	cb_item *p = (cb_item *)malloc(sizeof(cb_item));
-	p->next = 0;
-	p->prev = 0;
-	p->checked = b;
-	p->selected = 0;
-	p->text = strdup(s);
-
-	if (b) {
-		nchecked_++;
-	}
-
-	if (last == 0) {
-		first = last = p;
-	} else {
-		last->next = p;
-		p->prev = last;
-		last = p;
-	}
-	nitems_++;
-
-	return (nitems_);
-}
-
-/**
-  Remove line n and make the browser one line shorter. Returns the 
-  number of lines left in the browser.
-*/
-int Fl_Check_Browser::remove(int item) {
-  cb_item *p = find_item(item);
-  
-  // line at item exists
-  if(p) {
-    // tell the Browser_ what we will do
-    deleting(p);
-
-    // fix checked count
-    if(p->checked)
-      --nchecked_;
-    
-    // remove the node
-    if (p->prev) 
-      p->prev->next = p->next;
-    else 
-      first = p->next;
-    if (p->next) 
-      p->next->prev = p->prev;
-    else 
-      last = p->prev;
-    
-    free(p->text);
-    free(p);
-    
-    --nitems_;
-    cached_item = -1;
-  }
-  
-  return (nitems_);
-}
-
-/**  Remove every item from the browser.*/
-void Fl_Check_Browser::clear() {
-	cb_item *p = first;
-	cb_item *next;
-
-	if (p == 0) {
-		return;
-	}
-
-	new_list();
-	do {
-		next = p->next;
-		free(p->text);
-		free(p);
-		p = next;
-	} while (p);
-
-	first = last = 0;
-	nitems_ = nchecked_ = 0;
-	cached_item = -1;
-}
-
-/** Gets the current status of item item. */
-int Fl_Check_Browser::checked(int i) const {
-	cb_item *p = find_item(i);
-
-	if (p) return p->checked;
-	return 0;
-}
-
-/** Sets the check status of item item to b. */
-void Fl_Check_Browser::checked(int i, int b) {
-	cb_item *p = find_item(i);
-
-	if (p && (p->checked ^ b)) {
-		p->checked = b;
-		if (b) {
-			nchecked_++;
-		} else {
-			nchecked_--;
-		}
-		redraw();
-	}
-}
-
-/**  Returns the index of the currently selected item.*/
-int Fl_Check_Browser::value() const {
-	return lineno((cb_item *)selection());
-}
-
-/**  Return a pointer to an internal buffer holding item item's text.*/
-char *Fl_Check_Browser::text(int i) const {
-	cb_item *p = find_item(i);
-
-	if (p) return p->text;
-	return 0;
-}
-
-/**  Sets all the items checked.*/
-void Fl_Check_Browser::check_all() {
-	cb_item *p;
-
-	nchecked_ = nitems_;
-	for (p = first; p; p = p->next) {
-		p->checked = 1;
-	}
-	redraw();
-}
-
-/**  Sets all the items unchecked.*/
-void Fl_Check_Browser::check_none() {
-	cb_item *p;
-
-	nchecked_ = 0;
-	for (p = first; p; p = p->next) {
-		p->checked = 0;
-	}
-	redraw();
-}
-
-int Fl_Check_Browser::handle(int event) {
-  if (event==FL_PUSH)
-    deselect();
-  return Fl_Browser_::handle(event);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Check_Button.cxx
+++ /dev/null
@@ -1,56 +1,0 @@
-//
-// "$Id$"
-//
-// Check button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Check_Button.H>
-
-/**
-  \class Fl_Check_Button
-  \brief A button with a "checkmark" to show its status.
-
-  \image html Fl_Check_Button.png
-  \image latex Fl_Check_Button.png  "Fl_Check_Button" width=4cm
-
-  Buttons generate callbacks when they are clicked by the user. You control
-  exactly when and how by changing the values for type() and when().
-
-  The Fl_Check_Button subclass displays its "ON" state by showing a "checkmark"
-  rather than drawing itself pushed in.
- */
-
-/**
-  Creates a new Fl_Check_Button widget using the given position, size, and label string.
-
-  The default box type is FL_NO_BOX, which draws the label w/o a box
-  right of the checkmark.
-
-  The selection_color() sets the color of the checkmark.
-  Default is FL_FOREGROUND_COLOR (usually black).
-
-  You can use down_box() to change the box type of the checkmark.
-  Default is FL_DOWN_BOX.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Check_Button::Fl_Check_Button(int X, int Y, int W, int H, const char *L)
-: Fl_Light_Button(X, Y, W, H, L) {
-  box(FL_NO_BOX);
-  down_box(FL_DOWN_BOX);
-  selection_color(FL_FOREGROUND_COLOR);
-}
--- a/DoConfig/fltk/src/Fl_Choice.cxx
+++ /dev/null
@@ -1,225 +1,0 @@
-//
-// "$Id$"
-//
-// Choice widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-// Emulates the Forms choice widget.  This is almost exactly the same
-// as an Fl_Menu_Button.  The only difference is the appearance of the
-// button: it draws the text of the current pick and a down-arrow.
-
-void Fl_Choice::draw() {
-  Fl_Boxtype btype = Fl::scheme() ? FL_UP_BOX		// non-default uses up box
-                                  : FL_DOWN_BOX;	// default scheme uses down box
-  int dx = Fl::box_dx(btype);
-  int dy = Fl::box_dy(btype);
-
-  // Arrow area
-  int H = h() - 2 * dy;
-  int W = Fl::is_scheme("gtk+")    ? 20 :			// gtk+  -- fixed size
-          Fl::is_scheme("gleam")   ? 20 :			// gleam -- fixed size
-          Fl::is_scheme("plastic") ? ((H > 20) ? 20 : H)	// plastic: shrink if H<20
-                                   : ((H > 20) ? 20 : H);	// default: shrink if H<20
-  int X = x() + w() - W - dx;
-  int Y = y() + dy;
-
-  // Arrow object
-  int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
-  int x1 = X + (W - 2 * w1 - 1) / 2;
-  int y1 = Y + (H - w1 - 1) / 2;
-
-  if (Fl::scheme()) {
-    // NON-DEFAULT SCHEME
-
-    // Draw widget box
-    draw_box(btype, color());
-
-    // Draw arrow area
-    fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-    if (Fl::is_scheme("plastic")) {
-      // Show larger up/down arrows...
-      fl_polygon(x1, y1 + 3, x1 + w1, y1 + w1 + 3, x1 + 2 * w1, y1 + 3);
-      fl_polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
-    } else {
-      // Show smaller up/down arrows with a divider...
-      x1 = x() + w() - 13 - dx;
-      y1 = y() + h() / 2;
-      fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
-      fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
-
-      fl_color(fl_darker(color()));
-      fl_yxline(x1 - 7, y1 - 8, y1 + 8);
-
-      fl_color(fl_lighter(color()));
-      fl_yxline(x1 - 6, y1 - 8, y1 + 8);
-    }
-  } else {
-    // DEFAULT SCHEME
-
-    // Draw widget box
-    if (fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) == textcolor()) {
-      draw_box(btype, FL_BACKGROUND2_COLOR);
-    } else {
-      draw_box(btype, fl_lighter(color()));
-    }
-
-    // Draw arrow area
-    draw_box(FL_UP_BOX,X,Y,W,H,color());
-    fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-    fl_polygon(x1, y1, x1 + w1, y1 + w1, x1 + 2 * w1, y1);
-  }
-
-  W += 2 * dx;
-
-  // Draw menu item's label
-  if (mvalue()) {
-    Fl_Menu_Item m = *mvalue();
-    if (active_r()) m.activate(); else m.deactivate();
-
-    // Clip
-    int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
-    fl_push_clip(xx, yy, ww, hh);
-
-    if ( Fl::scheme()) {
-      Fl_Label l;
-      l.value = m.text;
-      l.image = 0;
-      l.deimage = 0;
-      l.type = m.labeltype_;
-      l.font = m.labelsize_ || m.labelfont_ ? m.labelfont_ : textfont();
-      l.size = m.labelsize_ ? m.labelsize_ : textsize();
-      l.color= m.labelcolor_ ? m.labelcolor_ : textcolor();
-      if (!m.active()) l.color = fl_inactive((Fl_Color)l.color);
-      fl_draw_shortcut = 2; // hack value to make '&' disappear
-      l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
-      fl_draw_shortcut = 0;
-      if ( Fl::focus() == this ) draw_focus(box(), xx, yy, ww, hh);
-    }
-    else {
-      fl_draw_shortcut = 2; // hack value to make '&' disappear
-      m.draw(xx, yy, ww, hh, this, Fl::focus() == this);
-      fl_draw_shortcut = 0;
-    }
-
-    fl_pop_clip();
-  }
-
-  // Widget's label
-  draw_label();
-}
-
-/**
-  Create a new Fl_Choice widget using the given position, size and label string.
-  The default boxtype is \c FL_UP_BOX.
-
-  The constructor sets menu() to NULL.
-  See Fl_Menu_ for the methods to set or change the menu.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Choice::Fl_Choice(int X, int Y, int W, int H, const char *L)
-: Fl_Menu_(X,Y,W,H,L) {
-  align(FL_ALIGN_LEFT);
-  when(FL_WHEN_RELEASE);
-  textfont(FL_HELVETICA);
-  box(FL_FLAT_BOX);
-  down_box(FL_BORDER_BOX);
-}
-
-/**
-  Sets the currently selected value using a pointer to menu item.
-  Changing the selected value causes a redraw().
-  \param[in] v pointer to menu item in the menu item array.
-  \returns non-zero if the new value is different to the old one.
- */
-int Fl_Choice::value(const Fl_Menu_Item *v) {
-  if (!Fl_Menu_::value(v)) return 0;
-  redraw();
-  return 1;
-}
-
-/**
-  Sets the currently selected value using the index into the menu item array.
-  Changing the selected value causes a redraw().
-  \param[in] v index of value in the menu item array.
-  \returns non-zero if the new value is different to the old one.
- */
-int Fl_Choice::value(int v) {
-  if (v == -1) return value((const Fl_Menu_Item *)0);
-  if (v < 0 || v >= (size() - 1)) return 0;
-  if (!Fl_Menu_::value(v)) return 0;
-  redraw();
-  return 1;
-}
-
-int Fl_Choice::handle(int e) {
-  if (!menu() || !menu()->text) return 0;
-  const Fl_Menu_Item* v;
-  Fl_Widget_Tracker wp(this);
-  switch (e) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-
-  case FL_KEYBOARD:
-    if (Fl::event_key() != ' ' ||
-        (Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) return 0;
-  case FL_PUSH:
-    if (Fl::visible_focus()) Fl::focus(this);
-  J1:
-    if (Fl::scheme()
-	|| fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) != textcolor()) {
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
-      if (wp.deleted()) return 1;
-    } else {
-      // In order to preserve the old look-n-feel of "white" menus,
-      // temporarily override the color() of this widget...
-      Fl_Color c = color();
-      color(FL_BACKGROUND2_COLOR);
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
-      if (wp.deleted()) return 1;
-      color(c);
-    }
-    if (!v || v->submenu()) return 1;
-    if (v != mvalue()) redraw();
-    picked(v);
-    return 1;
-  case FL_SHORTCUT:
-    if (Fl_Widget::test_shortcut()) goto J1;
-    v = menu()->test_shortcut();
-    if (!v) return 0;
-    if (v != mvalue()) redraw();
-    picked(v);
-    return 1;
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  default:
-    return 0;
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Clock.cxx
+++ /dev/null
@@ -1,223 +1,0 @@
-//
-// "$Id$"
-//
-// Clock widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Clock.H>
-#include <FL/Fl_Round_Clock.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include <time.h>
-#ifndef WIN32
-#  include <sys/time.h>
-#endif /* !WIN32 */
-
-// Original clock display written by Paul Haeberli at SGI.
-// Modifications by Mark Overmars for Forms
-// Further changes by Bill Spitzak for fltk
-
-const float hourhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -7.0f}};
-const float  minhand[4][2] = {{-0.5f, 0}, {0, 1.5f}, {0.5f, 0}, {0, -11.5f}};
-const float  sechand[4][2] = {{-0.1f, 0}, {0, 2.0f}, {0.1f, 0}, {0, -11.5f}};
-
-static void drawhand(double ang,const float v[][2],Fl_Color fill,Fl_Color line)
-{
-  fl_push_matrix();
-  fl_rotate(ang);
-  fl_color(fill);
-  fl_begin_polygon();
-  int i; for (i=0; i<4; i++) fl_vertex(v[i][0],v[i][1]);
-  fl_end_polygon();
-  fl_color(line);
-  fl_begin_loop();
-  for (i=0; i<4; i++) fl_vertex(v[i][0],v[i][1]);
-  fl_end_loop();
-  fl_pop_matrix();
-}
-
-void Fl_Clock_Output::drawhands(Fl_Color fill, Fl_Color line) {
-  if (!active_r()) {
-    fill = fl_inactive(fill);
-    line = fl_inactive(line);
-  }
-  drawhand(-360*(hour()+minute()/60.0)/12, hourhand, fill, line);
-  drawhand(-360*(minute()+second()/60.0)/60, minhand, fill, line);
-  drawhand(-360*(second()/60.0), sechand, fill, line);
-}
-
-static void rect(double x, double y, double w, double h) {
-  double r = x+w;
-  double t = y+h;
-  fl_begin_polygon();
-  fl_vertex(x, y);
-  fl_vertex(r, y);
-  fl_vertex(r, t);
-  fl_vertex(x, t);
-  fl_end_polygon();
-}
-
-/**
-  Draw clock with the given position and size.
-  \param[in] X, Y, W, H position and size
-*/
-void Fl_Clock_Output::draw(int X, int Y, int W, int H) {
-  Fl_Color box_color = type()==FL_ROUND_CLOCK ? FL_GRAY : color();
-  Fl_Color shadow_color = fl_color_average(box_color, FL_BLACK, 0.5);
-  draw_box(box(), X, Y, W, H, box_color);
-  fl_push_matrix();
-  fl_translate(X+W/2.0-.5, Y+H/2.0-.5);
-  fl_scale((W-1)/28.0, (H-1)/28.0);
-  if (type() == FL_ROUND_CLOCK) {
-    fl_color(active_r() ? color() : fl_inactive(color()));
-    fl_begin_polygon(); fl_circle(0,0,14); fl_end_polygon();
-    fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop(); fl_circle(0,0,14); fl_end_loop();
-  }
-  // draw the shadows:
-  fl_push_matrix();
-  fl_translate(0.60, 0.60);
-  drawhands(shadow_color, shadow_color);
-  fl_pop_matrix();
-  // draw the tick marks:
-  fl_push_matrix();
-  fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-  for (int i=0; i<12; i++) {
-    if (i==6) rect(-0.5, 9, 1, 2);
-    else if (i==3 || i==0 || i== 9) rect(-0.5, 9.5, 1, 1);
-    else rect(-0.25, 9.5, .5, 1);
-    fl_rotate(-30);
-  }
-  fl_pop_matrix();
-  // draw the hands:
-  drawhands(selection_color(), FL_FOREGROUND_COLOR); // color was 54
-  fl_pop_matrix();
-}
-
-/**
-  Draw clock with current position and size.
-*/
-void Fl_Clock_Output::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/**
-  Set the displayed time.
-  Set the time in hours, minutes, and seconds.
-  \param[in] H, m, s displayed time
-  \see hour(), minute(), second()
- */
-void Fl_Clock_Output::value(int H, int m, int s) {
-  if (H!=hour_ || m!=minute_ || s!=second_) {
-    hour_ = H; minute_ = m; second_ = s;
-    value_ = (H * 60 + m) * 60 + s;
-    damage(FL_DAMAGE_CHILD);
-  }
-}
-
-/**
-  Set the displayed time.
-  Set the time in seconds since the UNIX epoch (January 1, 1970).
-  \param[in] v seconds since epoch
-  \see value()
- */
-void Fl_Clock_Output::value(ulong v) {
-  value_ = v;
-  struct tm *timeofday;
-  // Some platforms, notably Windows, now use a 64-bit time_t value...
-  time_t vv = (time_t)v;
-  timeofday = localtime(&vv);
-  value(timeofday->tm_hour, timeofday->tm_min, timeofday->tm_sec);
-}
-
-/**
-  Create a new Fl_Clock_Output widget with the given position, size and label.
-  The default boxtype is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock_Output::Fl_Clock_Output(int X, int Y, int W, int H, const char *L)
-: Fl_Widget(X, Y, W, H, L) {
-  box(FL_UP_BOX);
-  selection_color(fl_gray_ramp(5));
-  align(FL_ALIGN_BOTTOM);
-  hour_ = 0;
-  minute_ = 0;
-  second_ = 0;
-  value_ = 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-/**
-  Create an Fl_Clock widget using the given position, size, and label string.
-  The default boxtype is \c FL_NO_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {}
-
-/**
-  Create an Fl_Clock widget using the given boxtype, position, size, and
-  label string.
-  \param[in] t boxtype
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Clock::Fl_Clock(uchar t, int X, int Y, int W, int H, const char *L)
-  : Fl_Clock_Output(X, Y, W, H, L) {
-  type(t);
-  box(t==FL_ROUND_CLOCK ? FL_NO_BOX : FL_UP_BOX);
-}
-
-static void tick(void *v) {
-  ((Fl_Clock*)v)->value((ulong) time(0));
-  Fl::add_timeout(1.0, tick, v);
-}
-
-int Fl_Clock::handle(int event) {
-  switch (event) {
-  case FL_SHOW:
-    tick(this);
-    break;
-  case FL_HIDE:
-    Fl::remove_timeout(tick, this);
-    break;
-  }
-  return Fl_Clock_Output::handle(event);
-}
-  
-/**
-  The destructor removes the clock.
- */
-Fl_Clock::~Fl_Clock() {
-  Fl::remove_timeout(tick, this);
-}
-
-
-Fl_Round_Clock::Fl_Round_Clock(int X,int Y,int W,int H, const char *L)
-: Fl_Clock(X, Y, W, H, L) 
-{
-  type(FL_ROUND_CLOCK); 
-  box(FL_NO_BOX);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Color_Chooser.cxx
+++ /dev/null
@@ -1,623 +1,0 @@
-//
-// "$Id$"
-//
-// Color chooser for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Color_Chooser.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-#include <stdio.h>
-
-// Besides being a useful object on it's own, the Fl_Color_Chooser was
-// an attempt to make a complex composite object that could be easily
-// imbedded into a user interface.  If you wish to make complex objects
-// of your own, be sure to read this code.
-
-// The function fl_color_chooser() creates a window containing a color
-// chooser and a few buttons and current-color indicators.  It is an
-// easier interface for simple programs that just need a color.
-
-// The "hue box" can be a circle or rectilinear.
-// You get a circle by defining this:
-#define CIRCLE 1
-// And the "hue box" can auto-update when the value changes
-// you get this by defining this:
-#define UPDATE_HUE_BOX 1
-
-/**
-  This \e static method converts HSV colors to RGB colorspace.
-  \param[in] H, S, V color components
-  \param[out] R, G, B color components
- */
-void Fl_Color_Chooser::hsv2rgb(
-	double H, double S, double V, double& R, double& G, double& B) {
-  if (S < 5.0e-6) {
-    R = G = B = V;
-  } else {
-    int i = (int)H;  
-    double f = H - (float)i;
-    double p1 = V*(1.0-S);
-    double p2 = V*(1.0-S*f);
-    double p3 = V*(1.0-S*(1.0-f));
-    switch (i) {
-    case 0: R = V;   G = p3;  B = p1;  break;
-    case 1: R = p2;  G = V;   B = p1;  break;
-    case 2: R = p1;  G = V;   B = p3;  break;
-    case 3: R = p1;  G = p2;  B = V;   break;
-    case 4: R = p3;  G = p1;  B = V;   break;
-    case 5: R = V;   G = p1;  B = p2;  break;
-    }
-  }
-}
-
-/**
-  This \e static method converts RGB colors to HSV colorspace.
-  \param[in] R, G, B color components
-  \param[out] H, S, V color components
- */
-void Fl_Color_Chooser::rgb2hsv(
-	double R, double G, double B, double& H, double& S, double& V) {
-  double maxv = R > G ? R : G; if (B > maxv) maxv = B;
-  V = maxv;
-  if (maxv>0) {
-    double minv = R < G ? R : G; if (B < minv) minv = B;
-    S = 1.0 - double(minv)/maxv;
-    if (maxv > minv) {
-      if (maxv == R) {H = (G-B)/double(maxv-minv); if (H<0) H += 6.0;}
-      else if (maxv == G) H = 2.0+(B-R)/double(maxv-minv);
-      else H = 4.0+(R-G)/double(maxv-minv);
-    }
-  }
-}
-
-/** Fl_Color_Chooser modes */
-enum {
-  M_RGB,	/**< mode() of Fl_Color_Chooser showing RGB values */
-  M_BYTE,	/**< mode() of Fl_Color_Chooser showing byte values */
-  M_HEX,	/**< mode() of Fl_Color_Chooser showing hex values */
-  M_HSV		/**< mode() of Fl_Color_Chooser showing HSV values */
-};
-static const Fl_Menu_Item mode_menu[] = {
-  {"rgb"},
-  {"byte"},
-  {"hex"},
-  {"hsv"},
-  {0}
-};
-
-#ifndef FL_DOXYGEN
-int Flcc_Value_Input::format(char* buf) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  if (c->mode() == M_HEX) return sprintf(buf,"0x%02X", int(value()));
-  else return Fl_Valuator::format(buf);
-}
-#endif // !FL_DOXYGEN
-
-void Fl_Color_Chooser::set_valuators() {
-  switch (mode()) {
-  case M_RGB:
-    rvalue.range(0,1); rvalue.step(1,1000); rvalue.value(r_);
-    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(g_);
-    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(b_);
-    break;
-  case M_BYTE: /* FALLTHROUGH */
-  case M_HEX:
-    rvalue.range(0,255); rvalue.step(1); rvalue.value(int(255*r_+.5));
-    gvalue.range(0,255); gvalue.step(1); gvalue.value(int(255*g_+.5));
-    bvalue.range(0,255); bvalue.step(1); bvalue.value(int(255*b_+.5));
-    break;
-  case M_HSV:
-    rvalue.range(0,6); rvalue.step(1,1000); rvalue.value(hue_);
-    gvalue.range(0,1); gvalue.step(1,1000); gvalue.value(saturation_);
-    bvalue.range(0,1); bvalue.step(1,1000); bvalue.value(value_);
-    break;
-  }
-}
-
-/**
-  Sets the current rgb color values.
-  Does not do the callback. Does not clamp (but out of range values will
-  produce psychedelic effects in the hue selector).
-  \param[in] R, G, B color components.
-  \return 1 if a new rgb value was set, 0 if the rgb value was the previous one.
- */
-int Fl_Color_Chooser::rgb(double R, double G, double B) {
-  if (R == r_ && G == g_ && B == b_) return 0;
-  r_ = R; g_ = G; b_ = B;
-  double ph = hue_;
-  double ps = saturation_;
-  double pv = value_;
-  rgb2hsv(R,G,B,hue_,saturation_,value_);
-  set_valuators();
-  set_changed();
-  if (value_ != pv) {
-#ifdef UPDATE_HUE_BOX
-    huebox.damage(FL_DAMAGE_SCROLL);
-#endif
-    valuebox.damage(FL_DAMAGE_EXPOSE);}
-  if (hue_ != ph || saturation_ != ps) {
-    huebox.damage(FL_DAMAGE_EXPOSE); 
-    valuebox.damage(FL_DAMAGE_SCROLL);
-  }
-  return 1;
-}
-
-/**
-  Set the hsv values.
-  The passed values are clamped (or for hue, modulus 6 is used) to get
-  legal values. Does not do the callback.
-  \param[in] H, S, V color components.
-  \return 1 if a new hsv value was set, 0 if the hsv value was the previous one.
-*/
-int Fl_Color_Chooser::hsv(double H, double S, double V) {
-  H = fmod(H,6.0); if (H < 0.0) H += 6.0;
-  if (S < 0.0) S = 0.0; else if (S > 1.0) S = 1.0;
-  if (V < 0.0) V = 0.0; else if (V > 1.0) V = 1.0;
-  if (H == hue_ && S == saturation_ && V == value_) return 0;
-  double ph = hue_;
-  double ps = saturation_;
-  double pv = value_;
-  hue_ = H; saturation_ = S; value_ = V;
-  if (value_ != pv) {
-#ifdef UPDATE_HUE_BOX
-    huebox.damage(FL_DAMAGE_SCROLL);
-#endif
-    valuebox.damage(FL_DAMAGE_EXPOSE);}
-  if (hue_ != ph || saturation_ != ps) {
-    huebox.damage(FL_DAMAGE_EXPOSE); 
-    valuebox.damage(FL_DAMAGE_SCROLL);
-  }
-  hsv2rgb(H,S,V,r_,g_,b_);
-  set_valuators();
-  set_changed();
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-
-static void tohs(double x, double y, double& h, double& s) {
-#ifdef CIRCLE
-  x = 2*x-1;
-  y = 1-2*y;
-  s = sqrt(x*x+y*y); if (s > 1.0) s = 1.0;
-  h = (3.0/M_PI)*atan2(y,x);
-  if (h<0) h += 6.0;
-#else
-  h = fmod(6.0*x,6.0); if (h < 0.0) h += 6.0;
-  s = 1.0-y; if (s < 0.0) s = 0.0; else if (s > 1.0) s = 1.0;
-#endif
-}
-
-#ifndef FL_DOXYGEN
-int Flcc_HueBox::handle(int e) {
-  static double ih, is;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  switch (e) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    ih = c->hue();
-    is = c->saturation();
-  case FL_DRAG: {
-    double Xf, Yf, H, S;
-    Xf = (Fl::event_x()-x()-Fl::box_dx(box()))/double(w()-Fl::box_dw(box()));
-    Yf = (Fl::event_y()-y()-Fl::box_dy(box()))/double(h()-Fl::box_dh(box()));
-    tohs(Xf, Yf, H, S);
-    if (fabs(H-ih) < 3*6.0/w()) H = ih;
-    if (fabs(S-is) < 3*1.0/h()) S = is;
-    if (Fl::event_state(FL_CTRL)) H = ih;
-    if (c->hsv(H, S, c->value())) c->do_callback();
-    } return 1;
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-    else return 1;
-  case FL_KEYBOARD :
-    return handle_key(Fl::event_key());
-  default:
-    return 0;
-  }
-}
-#endif // !FL_DOXYGEN
-
-static void generate_image(void* vv, int X, int Y, int W, uchar* buf) {
-  Flcc_HueBox* v = (Flcc_HueBox*)vv;
-  int iw = v->w()-Fl::box_dw(v->box());
-  double Yf = double(Y)/(v->h()-Fl::box_dh(v->box()));
-#ifdef UPDATE_HUE_BOX
-  const double V = ((Fl_Color_Chooser*)(v->parent()))->value();
-#else
-  const double V = 1.0;
-#endif
-  for (int x = X; x < X+W; x++) {
-    double Xf = double(x)/iw;
-    double H,S; tohs(Xf,Yf,H,S);
-    double r=0, g=0, b=0;
-    Fl_Color_Chooser::hsv2rgb(H,S,V,r,g,b);
-    *buf++ = uchar(255*r+.5);
-    *buf++ = uchar(255*g+.5);
-    *buf++ = uchar(255*b+.5);
-  }
-}
-
-#ifndef FL_DOXYGEN
-int Flcc_HueBox::handle_key(int key) {
-  int w1 = w()-Fl::box_dw(box())-6;
-  int h1 = h()-Fl::box_dh(box())-6;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-
-#ifdef CIRCLE
-  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * w1);
-  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * h1);
-#else
-  int X = int(c->hue()/6.0*w1);
-  int Y = int((1-c->saturation())*h1);
-#endif
-
-  switch (key) {
-    case FL_Up :
-      Y -= 3;
-      break;
-    case FL_Down :
-      Y += 3;
-      break;
-    case FL_Left :
-      X -= 3;
-      break;
-    case FL_Right :
-      X += 3;
-      break;
-    default :
-      return 0;
-  }
-
-  double Xf, Yf, H, S;
-  Xf = (double)X/(double)w1;
-  Yf = (double)Y/(double)h1;
-  tohs(Xf, Yf, H, S);
-  if (c->hsv(H, S, c->value())) c->do_callback();
-
-  return 1;
-}
-#endif // !FL_DOXYGEN
-
-#ifndef FL_DOXYGEN
-void Flcc_HueBox::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int x1 = x()+Fl::box_dx(box());
-  int yy1 = y()+Fl::box_dy(box());
-  int w1 = w()-Fl::box_dw(box());
-  int h1 = h()-Fl::box_dh(box());
-  if (damage() == FL_DAMAGE_EXPOSE) fl_push_clip(x1+px,yy1+py,6,6);
-  fl_draw_image(generate_image, this, x1, yy1, w1, h1);
-  if (damage() == FL_DAMAGE_EXPOSE) fl_pop_clip();
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-#ifdef CIRCLE
-  int X = int(.5*(cos(c->hue()*(M_PI/3.0))*c->saturation()+1) * (w1-6));
-  int Y = int(.5*(1-sin(c->hue()*(M_PI/3.0))*c->saturation()) * (h1-6));
-#else
-  int X = int(c->hue()/6.0*(w1-6));
-  int Y = int((1-c->saturation())*(h1-6));
-#endif
-  if (X < 0) X = 0; else if (X > w1-6) X = w1-6;
-  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
-  //  fl_color(c->value()>.75 ? FL_BLACK : FL_WHITE);
-  draw_box(FL_UP_BOX,x1+X,yy1+Y,6,6,Fl::focus() == this ? FL_FOREGROUND_COLOR : FL_GRAY);
-  px = X; py = Y;
-}
-#endif // !FL_DOXYGEN
-
-////////////////////////////////////////////////////////////////
-
-#ifndef FL_DOXYGEN
-int Flcc_ValueBox::handle(int e) {
-  static double iv;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  switch (e) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    iv = c->value();
-  case FL_DRAG: {
-    double Yf;
-    Yf = 1-(Fl::event_y()-y()-Fl::box_dy(box()))/double(h()-Fl::box_dh(box()));
-    if (fabs(Yf-iv)<(3*1.0/h())) Yf = iv;
-    if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
-    } return 1;
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-    else return 1;
-  case FL_KEYBOARD :
-    return handle_key(Fl::event_key());
-  default:
-    return 0;
-  }
-}
-#endif // !FL_DOXYGEN
-
-static double tr, tg, tb;
-static void generate_vimage(void* vv, int X, int Y, int W, uchar* buf) {
-  Flcc_ValueBox* v = (Flcc_ValueBox*)vv;
-  double Yf = 255*(1.0-double(Y)/(v->h()-Fl::box_dh(v->box())));
-  uchar r = uchar(tr*Yf+.5);
-  uchar g = uchar(tg*Yf+.5);
-  uchar b = uchar(tb*Yf+.5);
-  for (int x = X; x < X+W; x++) {
-    *buf++ = r; *buf++ = g; *buf++ = b;
-  }
-}
-
-#ifndef FL_DOXYGEN
-void Flcc_ValueBox::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-  c->hsv2rgb(c->hue(),c->saturation(),1.0,tr,tg,tb);
-  int x1 = x()+Fl::box_dx(box());
-  int yy1 = y()+Fl::box_dy(box());
-  int w1 = w()-Fl::box_dw(box());
-  int h1 = h()-Fl::box_dh(box());
-  if (damage() == FL_DAMAGE_EXPOSE) fl_push_clip(x1,yy1+py,w1,6);
-  fl_draw_image(generate_vimage, this, x1, yy1, w1, h1);
-  if (damage() == FL_DAMAGE_EXPOSE) fl_pop_clip();
-  int Y = int((1-c->value()) * (h1-6));
-  if (Y < 0) Y = 0; else if (Y > h1-6) Y = h1-6;
-  draw_box(FL_UP_BOX,x1,yy1+Y,w1,6,Fl::focus() == this ? FL_FOREGROUND_COLOR : FL_GRAY);
-  py = Y;
-}
-#endif // !FL_DOXYGEN
-
-#ifndef FL_DOXYGEN
-int Flcc_ValueBox::handle_key(int key) {
-  int h1 = h()-Fl::box_dh(box())-6;
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)parent();
-
-  int Y = int((1-c->value()) * h1);
-  if (Y < 0) Y = 0; else if (Y > h1) Y = h1;
-
-  switch (key) {
-    case FL_Up :
-      Y -= 3;
-      break;
-    case FL_Down :
-      Y += 3;
-      break;
-    default :
-      return 0;
-  }
-
-  double Yf;
-  Yf = 1-((double)Y/(double)h1);
-  if (c->hsv(c->hue(),c->saturation(),Yf)) c->do_callback();
-
-  return 1;
-}
-#endif // !FL_DOXYGEN
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Color_Chooser::rgb_cb(Fl_Widget* o, void*) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)(o->parent());
-  double R = c->rvalue.value();
-  double G = c->gvalue.value();
-  double B = c->bvalue.value();
-  if (c->mode() == M_HSV) {
-    if (c->hsv(R,G,B)) c->do_callback();
-    return;
-  }
-  if (c->mode() != M_RGB) {
-    R = R/255;
-    G = G/255;
-    B = B/255;
-  }
-  if (c->rgb(R,G,B)) c->do_callback();
-}
-
-void Fl_Color_Chooser::mode_cb(Fl_Widget* o, void*) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)(o->parent());
-  // force them to redraw even if value is the same:
-  c->rvalue.value(-1);
-  c->gvalue.value(-1);
-  c->bvalue.value(-1);
-  c->set_valuators();
-}
-
-void Fl_Color_Chooser::mode(int newMode)
-{
-  choice.value(newMode);
-  choice.do_callback();
-}
-
-
-////////////////////////////////////////////////////////////////
-
-/**
-  Creates a new Fl_Color_Chooser widget using the given position, size, and
-  label string.
-  The recommended dimensions are 200x95. The color is initialized to black.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Color_Chooser::Fl_Color_Chooser(int X, int Y, int W, int H, const char* L)
-  : Fl_Group(0,0,195,115,L),
-    huebox(0,0,115,115),
-    valuebox(115,0,20,115),
-    choice(140,0,55,25),
-    rvalue(140,30,55,25),
-    gvalue(140,60,55,25),
-    bvalue(140,90,55,25),
-    resize_box(0,0,115,115)
-{
-  end();
-  resizable(resize_box);
-  resize(X,Y,W,H);
-  r_ = g_ = b_ = 0;
-  hue_ = 0.0;
-  saturation_ = 0.0;
-  value_ = 0.0;
-  huebox.box(FL_DOWN_FRAME);
-  valuebox.box(FL_DOWN_FRAME);
-  choice.menu(mode_menu);
-  set_valuators();
-  rvalue.callback(rgb_cb);
-  gvalue.callback(rgb_cb);
-  bvalue.callback(rgb_cb);
-  choice.callback(mode_cb);
-  choice.box(FL_THIN_UP_BOX);
-  choice.textfont(FL_HELVETICA_BOLD_ITALIC);
-}
-
-////////////////////////////////////////////////////////////////
-// fl_color_chooser():
-
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-
-class ColorChip : public Fl_Widget {
-  void draw();
-public:
-  uchar r,g,b;
-  ColorChip(int X, int Y, int W, int H) : Fl_Widget(X,Y,W,H) {
-    box(FL_ENGRAVED_FRAME);}
-};
-
-void ColorChip::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  fl_rectf(x()+Fl::box_dx(box()),
-	   y()+Fl::box_dy(box()),
-	   w()-Fl::box_dw(box()),
-	   h()-Fl::box_dh(box()),r,g,b);
-}
-
-static void chooser_cb(Fl_Widget* o, void* vv) {
-  Fl_Color_Chooser* c = (Fl_Color_Chooser*)o;
-  ColorChip* v = (ColorChip*)vv;
-  v->r = uchar(255*c->r()+.5);
-  v->g = uchar(255*c->g()+.5);
-  v->b = uchar(255*c->b()+.5);
-  v->damage(FL_DAMAGE_EXPOSE);
-}
-
-extern const char* fl_ok;
-extern const char* fl_cancel;
-
-// fl_color_chooser's callback for ok_button (below)
-//  [in] o is a pointer to okay_button (below) 
-//  [in] p is a pointer to an int to receive the return value (1)
-// closes the fl_color_chooser window
-static void cc_ok_cb (Fl_Widget *o, void *p) {
-  *((int *)p) = 1; // set return value
-  o->window()->hide();
-}
-
-// fl_color_chooser's callback for cancel_button and window close
-//  [in] o is a pointer to cancel_button (below) _or_ the dialog window
-//  [in] p is a pointer to an int to receive the return value (0)
-// closes the fl_color_chooser window
-static void cc_cancel_cb (Fl_Widget *o, void *p) {
-  *((int *)p) = 0; // set return value
-  if (o->window()) // cancel button
-    o->window()->hide();
-  else // window close
-    o->hide();
-}
-
-/** \addtogroup  group_comdlg 
-    @{ */
-/**
-  \brief Pops up a window to let the user pick an arbitrary RGB color.
-  \note \#include <FL/Fl_Color_Chooser.H>
-  \image html fl_color_chooser.jpg 
-  \image latex  fl_color_chooser.jpg "fl_color_chooser" width=8cm
-  \param[in] name Title label for the window
-  \param[in,out] r, g, b Color components in the range 0.0 to 1.0.
-  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
-  \retval 1 if user confirms the selection 
-  \retval 0 if user cancels the dialog
-  \relates Fl_Color_Chooser
- */
-int fl_color_chooser(const char* name, double& r, double& g, double& b, int cmode) {
-  int ret = 0;
-  Fl_Window window(215,200,name);
-  window.callback(cc_cancel_cb,&ret);
-  Fl_Color_Chooser chooser(10, 10, 195, 115);
-  ColorChip ok_color(10, 130, 95, 25);
-  Fl_Return_Button ok_button(10, 165, 95, 25, fl_ok);
-  ok_button.callback(cc_ok_cb,&ret);
-  ColorChip cancel_color(110, 130, 95, 25);
-  cancel_color.r = uchar(255*r+.5); ok_color.r = cancel_color.r;
-  ok_color.g = cancel_color.g = uchar(255*g+.5);
-  ok_color.b = cancel_color.b = uchar(255*b+.5);
-  Fl_Button cancel_button(110, 165, 95, 25, fl_cancel);
-  cancel_button.callback(cc_cancel_cb,&ret);
-  window.resizable(chooser);
-  chooser.rgb(r,g,b);
-  chooser.callback(chooser_cb, &ok_color);
-  if (cmode!=-1) chooser.mode(cmode);
-  window.end();
-  window.set_modal();
-  window.hotspot(window);
-  window.show();
-  while (window.shown()) Fl::wait();
-  if (ret) { // ok_button or Enter
-    r = chooser.r();
-    g = chooser.g();
-    b = chooser.b();
-  }
-  return ret;
-}
-
-/**
-  \brief Pops up a window to let the user pick an arbitrary RGB color.
-  \note \#include <FL/Fl_Color_Chooser.H>
-  \image html fl_color_chooser.jpg 
-  \image latex  fl_color_chooser.jpg "fl_color_chooser" width=8cm
-  \param[in] name Title label for the window
-  \param[in,out] r, g, b Color components in the range 0 to 255.
-  \param[in] cmode Optional mode for color chooser. See mode(int). Default -1 if none (rgb mode).
-  \retval 1 if user confirms the selection 
-  \retval 0 if user cancels the dialog
-  \relates Fl_Color_Chooser
- */
-int fl_color_chooser(const char* name, uchar& r, uchar& g, uchar& b, int cmode) {
-  double dr = r/255.0;
-  double dg = g/255.0;
-  double db = b/255.0;
-  if (fl_color_chooser(name,dr,dg,db,cmode)) {
-    r = uchar(255*dr+.5);
-    g = uchar(255*dg+.5);
-    b = uchar(255*db+.5);
-    return 1;
-  }
-  return 0;
-}
-
-/** @} */
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Copy_Surface.cxx
+++ /dev/null
@@ -1,407 +1,0 @@
-//
-// "$Id$"
-//
-// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Copy_Surface.H>
-#include <FL/Fl.H>
-
-
-#if defined(__APPLE__)
-#include <ApplicationServices/ApplicationServices.h>
-
-Fl_Quartz_Surface_::Fl_Quartz_Surface_(int w, int h) : Fl_System_Printer(), width(w), height(h) {
-}
-
-int Fl_Quartz_Surface_::printable_rect(int *w, int *h) {
-  *w = width;
-  *h = height;
-  return 0;
-}
-
-const char *Fl_Quartz_Surface_::class_id = "Fl_Quartz_Surface_";
-
-#elif defined(WIN32)
-
-Fl_GDI_Surface_::Fl_GDI_Surface_() : Fl_Paged_Device() {
-  driver(new Fl_GDI_Graphics_Driver);
-  depth = 0;
-}
-
-Fl_GDI_Surface_::~Fl_GDI_Surface_() {
-  delete driver();
-}
-
-void Fl_GDI_Surface_::translate(int x, int y) {
-  GetWindowOrgEx(fl_gc, origins+depth);
-  SetWindowOrgEx(fl_gc, origins[depth].x - x, origins[depth].y - y, NULL);
-  if (depth < sizeof(origins)/sizeof(POINT)) depth++;
-  else Fl::warning("Fl_GDI_Surface_: translate stack overflow!");
-}
-
-void Fl_GDI_Surface_::untranslate() {
-  if (depth > 0) depth--;
-  SetWindowOrgEx(fl_gc, origins[depth].x, origins[depth].y, NULL);
-}
-  
-const char *Fl_GDI_Surface_::class_id = "Fl_GDI_Surface_";
-
-#endif
-
-
-const char *Fl_Copy_Surface::class_id = "Fl_Copy_Surface";
-
-/** Constructor. 
- \param w and \param h are the width and height of the clipboard surface
- in pixels where drawing will occur.
- */
-Fl_Copy_Surface::Fl_Copy_Surface(int w, int h) :  Fl_Surface_Device(NULL)
-{
-  width = w;
-  height = h;
-#ifdef __APPLE__
-  helper = new Fl_Quartz_Surface_(width, height);
-  driver(helper->driver());
-  prepare_copy_pdf_and_tiff(w, h);
-  oldgc = fl_gc;
-#elif defined(WIN32)
-  helper = new Fl_GDI_Surface_();
-  driver(helper->driver());
-  oldgc = fl_gc;
-  // exact computation of factor from screen units to EnhMetaFile units (0.01 mm)
-  HDC hdc = GetDC(NULL);
-  int hmm = GetDeviceCaps(hdc, HORZSIZE);
-  int hdots = GetDeviceCaps(hdc, HORZRES);
-  int vmm = GetDeviceCaps(hdc, VERTSIZE);
-  int vdots = GetDeviceCaps(hdc, VERTRES);
-  int dhr = GetDeviceCaps(hdc, DESKTOPHORZRES); // true number of pixels on display
-  ReleaseDC(NULL, hdc);
-  float factorw = (100.f * hmm) / hdots;
-  float factorh = (100.f * vmm) / vdots;
-  // Global display scaling factor: 1, 1.25, 1.5, 1.75, etc...
-  float scaling = dhr/float(hdots);
-  
-  RECT rect; rect.left = 0; rect.top = 0; rect.right = (LONG)(w * factorw / scaling); rect.bottom = (LONG)(h * factorh / scaling);
-  gc = CreateEnhMetaFile (NULL, NULL, &rect, NULL);
-  if (gc != NULL) {
-    SetTextAlign(gc, TA_BASELINE|TA_LEFT);
-    SetBkMode(gc, TRANSPARENT);
-  } 
-#else // Xlib
-  helper = new Fl_Xlib_Surface_();
-  driver(helper->driver());
-  Fl::first_window()->make_current();
-  oldwindow = fl_xid(Fl::first_window());
-  xid = fl_create_offscreen(w,h);
-  Fl_Surface_Device *present_surface = Fl_Surface_Device::surface();
-  set_current();
-  fl_color(FL_WHITE);
-  fl_rectf(0, 0, w, h);
-  present_surface->set_current();
-#endif
-}
-
-/** Destructor.
- */
-Fl_Copy_Surface::~Fl_Copy_Surface()
-{
-#ifdef __APPLE__
-  complete_copy_pdf_and_tiff();
-  fl_gc = oldgc;
-  delete (Fl_Quartz_Surface_*)helper;
-#elif defined(WIN32)
-  if(oldgc == fl_gc) oldgc = NULL;
-  HENHMETAFILE hmf = CloseEnhMetaFile (gc);
-  if ( hmf != NULL ) {
-    if ( OpenClipboard (NULL) ){
-      EmptyClipboard ();
-      SetClipboardData (CF_ENHMETAFILE, hmf);
-      CloseClipboard ();
-    }
-    DeleteEnhMetaFile(hmf);
-  }
-  DeleteDC(gc);
-  fl_gc = oldgc;
-  delete (Fl_GDI_Surface_*)helper;
-#else // Xlib
-  fl_pop_clip(); 
-  unsigned char *data = fl_read_image(NULL,0,0,width,height,0);
-  fl_window = oldwindow; 
-  _ss->set_current();
-  Fl::copy_image(data,width,height,1);
-  delete[] data;
-  fl_delete_offscreen(xid);
-  delete (Fl_Xlib_Surface_*)helper;
-#endif
-}
-
-/** Copies a widget in the clipboard
- 
- \param widget any FLTK widget (e.g., standard, custom, window, GL view) to copy
- \param delta_x and \param delta_y give 
- the position in the clipboard of the top-left corner of the widget
- */
-void Fl_Copy_Surface::draw(Fl_Widget* widget, int delta_x, int delta_y) 
-{
-  helper->print_widget(widget, delta_x, delta_y);
-}
-
-void Fl_Copy_Surface::set_current()
-{
-#if defined(__APPLE__) || defined(WIN32)
-  fl_gc = gc;
-  fl_window = (Window)1;
-  Fl_Surface_Device::set_current();
-#else
-  fl_window=xid; 
-  _ss = Fl_Surface_Device::surface(); 
-  Fl_Surface_Device::set_current();
-  fl_push_no_clip();
-#endif
-}
-
-
-#if defined(__APPLE__)
-
-size_t Fl_Copy_Surface::MyPutBytes(void* info, const void* buffer, size_t count)
-  {
-  CFDataAppendBytes ((CFMutableDataRef) info, (const UInt8 *)buffer, count);
-  return count;
-}
-
-void Fl_Copy_Surface::init_PDF_context(int w, int h)
-{
-  CGRect bounds = CGRectMake(0, 0, w, h );	
-  pdfdata = CFDataCreateMutable(NULL, 0);
-  CGDataConsumerRef myconsumer;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
-  if (&CGDataConsumerCreateWithCFData != NULL) {
-    myconsumer = CGDataConsumerCreateWithCFData(pdfdata); // 10.4
-  }
-  else 
-#endif
-  {
-    static CGDataConsumerCallbacks callbacks = { Fl_Copy_Surface::MyPutBytes, NULL };
-    myconsumer = CGDataConsumerCreate ((void*) pdfdata, &callbacks);
-  }
-  gc = CGPDFContextCreate (myconsumer, &bounds, NULL);
-  CGDataConsumerRelease (myconsumer);
-}
-
-void Fl_Copy_Surface::prepare_copy_pdf_and_tiff(int w, int h)
-{
-  init_PDF_context(w, h);
-  if (gc == NULL) return;
-  CGRect bounds = CGRectMake(0, 0, w, h );	
-  CGContextBeginPage (gc, &bounds);
-  CGContextTranslateCTM(gc, 0, h);
-  CGContextScaleCTM(gc, 1.0f, -1.0f);
-  CGContextSaveGState(gc);
-}
-
-void Fl_Copy_Surface::draw_decorated_window(Fl_Window* win, int delta_x, int delta_y)
-{
-  int bt = win->decorated_h() - win->h();
-  draw(win, delta_x, bt + delta_y ); // draw the window content
-  if (win->border()) {
-    // draw the window title bar
-    CGContextSaveGState(gc);
-    CGContextTranslateCTM(gc, delta_x, bt + delta_y);
-    CGContextScaleCTM(gc, 1, -1);
-    Fl_X::clip_to_rounded_corners(gc, win->w(), bt);
-    void *layer = Fl_X::get_titlebar_layer(win);
-    if (layer) {
-      CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();
-      if (fl_mac_os_version < 101300) {
-        // for unknown reason, rendering the layer to the Fl_Copy_Surface pdf graphics context does not work;
-        // we use an auxiliary bitmap context
-        CGContextRef auxgc = CGBitmapContextCreate(NULL, win->w(), bt, 8, 0, cspace, kCGImageAlphaPremultipliedLast);
-        CGColorSpaceRelease(cspace);
-        CGContextTranslateCTM(auxgc, 0, bt);
-        CGContextScaleCTM(auxgc, 1, -1);
-        Fl_X::draw_layer_to_context(layer, auxgc, win->w(), bt);
-        Fl_RGB_Image *image = new Fl_RGB_Image((const uchar*)CGBitmapContextGetData(auxgc), win->w(), bt, 4,
-                                               CGBitmapContextGetBytesPerRow(auxgc)); // 10.2
-        image->draw(0, 0);
-        delete image;
-        CGContextRelease(auxgc);
-      } else {
-        Fl_X::draw_layer_to_context(layer, gc, win->w(), bt);
-      }
-    } else {
-      CGImageRef img = Fl_X::CGImage_from_window_rect(win, 0, -bt, win->w(), bt);
-      CGContextDrawImage(gc, CGRectMake(0, 0, win->w(), bt), img);
-      CGImageRelease(img);
-    }
-    CGContextRestoreGState(gc);
-  }
-}
-
-#else
-
-/** Copies a window and its borders and title bar to the clipboard. 
- \param win an FLTK window to copy
- \param delta_x and \param delta_y give
- the position in the clipboard of the top-left corner of the window's title bar
-*/
-void Fl_Copy_Surface::draw_decorated_window(Fl_Window* win, int delta_x, int delta_y)
-{
-  helper->draw_decorated_window(win, delta_x, delta_y, this);
-}
-
-#endif // __APPLE__
-
-
-#if !(defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN))
-/* graphics driver that translates all graphics coordinates before calling Xlib */
-class Fl_translated_Xlib_Graphics_Driver_ : public Fl_Xlib_Graphics_Driver {
-  int offset_x, offset_y; // translation between user and graphical coordinates: graphical = user + offset
-  unsigned depth; // depth of translation stack
-  int stack_x[20], stack_y[20]; // translation stack allowing cumulative translations
-public:
-  static const char *class_id;
-  const char *class_name() {return class_id;};
-  Fl_translated_Xlib_Graphics_Driver_() {
-    offset_x = 0; offset_y = 0;
-    depth = 0;
-    }
-  virtual ~Fl_translated_Xlib_Graphics_Driver_() {};
-  void translate_all(int dx, int dy) { // reversibly adds dx,dy to the offset between user and graphical coordinates
-    stack_x[depth] = offset_x;
-    stack_y[depth] = offset_y;
-    offset_x = stack_x[depth] + dx;
-    offset_y = stack_y[depth] + dy;
-    push_matrix();
-    translate(dx, dy);
-    if (depth < sizeof(stack_x)/sizeof(int)) depth++;
-    else Fl::warning("%s: translate stack overflow!", class_id);
-  }
-  void untranslate_all() { // undoes previous translate_all()
-    if (depth > 0) depth--;
-    offset_x = stack_x[depth];
-    offset_y = stack_y[depth];
-    pop_matrix();
-  }
-  void rect(int x, int y, int w, int h) { Fl_Xlib_Graphics_Driver::rect(x+offset_x, y+offset_y, w, h); }
-  void rectf(int x, int y, int w, int h) { Fl_Xlib_Graphics_Driver::rectf(x+offset_x, y+offset_y, w, h); }
-  void xyline(int x, int y, int x1) { Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x); }
-  void xyline(int x, int y, int x1, int y2) { Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x, y2+offset_y); }
-  void xyline(int x, int y, int x1, int y2, int x3) { Fl_Xlib_Graphics_Driver::xyline(x+offset_x, y+offset_y, x1+offset_x, y2+offset_y, x3+offset_x); }
-  void yxline(int x, int y, int y1) { Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y); }
-  void yxline(int x, int y, int y1, int x2) { Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y, x2+offset_x); }
-  void yxline(int x, int y, int y1, int x2, int y3) { Fl_Xlib_Graphics_Driver::yxline(x+offset_x, y+offset_y, y1+offset_y, x2+offset_x, y3+offset_y); }
-  void line(int x, int y, int x1, int y1) { Fl_Xlib_Graphics_Driver::line(x+offset_x, y+offset_y, x1+offset_x, y1+offset_y); }
-  void line(int x, int y, int x1, int y1, int x2, int y2) { Fl_Xlib_Graphics_Driver::line(x+offset_x, y+offset_y, x1+offset_x, y1+offset_y, x2+offset_x, y2+offset_y); }
-  void draw(const char* str, int n, int x, int y) { 
-    Fl_Xlib_Graphics_Driver::draw(str, n, x+offset_x, y+offset_y); 
- }
-  void draw(int angle, const char *str, int n, int x, int y) { 
-    Fl_Xlib_Graphics_Driver::draw(angle, str, n, x+offset_x, y+offset_y); 
-  }
-  void rtl_draw(const char* str, int n, int x, int y) { 
-    Fl_Xlib_Graphics_Driver::rtl_draw(str, n, x+offset_x, y+offset_y); 
-  }
-  void draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) { 
-    XP += offset_x; YP += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw(pxm, XP, YP, WP,HP,cx,cy); 
-    untranslate_all();
-  }
-  void draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) { 
-    XP += offset_x; YP += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw(bm, XP, YP, WP,HP,cx,cy); 
-    untranslate_all();
-  }
-  void draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) { 
-    XP += offset_x; YP += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw(img, XP, YP, WP,HP,cx,cy); 
-    untranslate_all();
-  }
-  void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) { 
-    X += offset_x; Y += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw_image(buf, X, Y, W,H,D,L); 
-    untranslate_all();
-  }
-  void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) { 
-    X += offset_x; Y += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw_image(cb, data, X, Y, W,H,D); 
-    untranslate_all();
-  }
-  void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) { 
-    X += offset_x; Y += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw_image_mono(buf, X, Y, W,H,D,L); 
-    untranslate_all();
-  }
-  void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) { 
-    X += offset_x; Y += offset_y;
-    translate_all(-offset_x, -offset_y);
-    Fl_Xlib_Graphics_Driver::draw_image_mono(cb, data, X, Y, W,H,D); 
-    untranslate_all();
-  }
-  void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) { 
-    Fl_Xlib_Graphics_Driver::copy_offscreen(x+offset_x, y+offset_y, w, h,pixmap,srcx,srcy); 
-  }
-  void push_clip(int x, int y, int w, int h) {
-    Fl_Xlib_Graphics_Driver::push_clip(x+offset_x, y+offset_y, w, h); 
-  }
-  int not_clipped(int x, int y, int w, int h) { return Fl_Xlib_Graphics_Driver::not_clipped(x + offset_x, y + offset_y, w, h); };
-  int clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H) { 
-    int retval = Fl_Xlib_Graphics_Driver::clip_box(x + offset_x, y + offset_y, w,h,X,Y,W,H);
-    X -= offset_x;
-    Y -= offset_y;
-    return retval;
-  }
-  void pie(int x, int y, int w, int h, double a1, double a2) { Fl_Xlib_Graphics_Driver::pie(x+offset_x,y+offset_y,w,h,a1,a2); }
-  void arc(int x, int y, int w, int h, double a1, double a2) { Fl_Xlib_Graphics_Driver::arc(x+offset_x,y+offset_y,w,h,a1,a2); }
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2) { Fl_Xlib_Graphics_Driver::polygon(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y);}
-  void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-    Fl_Xlib_Graphics_Driver::polygon(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y,x3+offset_x,y3+offset_y);
-  }
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2) {Fl_Xlib_Graphics_Driver::loop(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y);}
-  void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-    Fl_Xlib_Graphics_Driver::loop(x0+offset_x,y0+offset_y,x1+offset_x,y1+offset_y,x2+offset_x,y2+offset_y,x3+offset_x,y3+offset_y);
-  }
-  void point(int x, int y) { Fl_Xlib_Graphics_Driver::point(x+offset_x, y+offset_y); }
-};
-
-const char *Fl_translated_Xlib_Graphics_Driver_::class_id = "Fl_translated_Xlib_Graphics_Driver_";
-
-void Fl_Xlib_Surface_::translate(int x, int y) { 
-  ((Fl_translated_Xlib_Graphics_Driver_*)driver())->translate_all(x, y); 
-}
-void Fl_Xlib_Surface_::untranslate() { 
-  ((Fl_translated_Xlib_Graphics_Driver_*)driver())->untranslate_all(); 
-}
-
-Fl_Xlib_Surface_::Fl_Xlib_Surface_() : Fl_Paged_Device() {
-  driver(new Fl_translated_Xlib_Graphics_Driver_());
-}
-Fl_Xlib_Surface_::~Fl_Xlib_Surface_() {
-  delete driver();
-}
-
-const char *Fl_Xlib_Surface_::class_id = "Fl_Xlib_Surface_";
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Counter.cxx
+++ /dev/null
@@ -1,210 +1,0 @@
-//
-// "$Id$"
-//
-// Counter widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Simple_Counter.H>
-#include <FL/fl_draw.H>
-
-void Fl_Counter::draw() {
-  int i; Fl_Boxtype boxtype[5];
-  Fl_Color selcolor;
-
-  boxtype[0] = box();
-  if (boxtype[0] == FL_UP_BOX) boxtype[0] = FL_DOWN_BOX;
-  if (boxtype[0] == FL_THIN_UP_BOX) boxtype[0] = FL_THIN_DOWN_BOX;
-  for (i=1; i<5; i++)
-    if (mouseobj == i)
-      boxtype[i] = fl_down(box());
-    else
-      boxtype[i] = box();
-
-  int xx[5], ww[5];
-  if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
-    xx[1] = x();	 ww[1] = W;
-    xx[2] = x()+1*W;     ww[2] = W;
-    xx[0] = x()+2*W;     ww[0] = w()-4*W;
-    xx[3] = x()+w()-2*W; ww[3] = W;
-    xx[4] = x()+w()-1*W; ww[4] = W;
-  } else {
-    int W = w()*20/100;
-    xx[1] = 0;	         ww[1] = 0;
-    xx[2] = x();	 ww[2] = W;
-    xx[0] = x()+W;	 ww[0] = w()-2*W;
-    xx[3] = x()+w()-1*W; ww[3] = W;
-    xx[4] = 0;	         ww[4] = 0;
-  }
-
-  draw_box(boxtype[0], xx[0], y(), ww[0], h(), FL_BACKGROUND2_COLOR);
-  fl_font(textfont(), textsize());
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  char str[128]; format(str);
-  fl_draw(str, xx[0], y(), ww[0], h(), FL_ALIGN_CENTER);
-  if (Fl::focus() == this) draw_focus(boxtype[0], xx[0], y(), ww[0], h());
-  if (!(damage()&FL_DAMAGE_ALL)) return; // only need to redraw text
-
-  if (active_r())
-    selcolor = labelcolor();
-  else
-    selcolor = fl_inactive(labelcolor());
-
-  if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
-    fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
-  }
-  draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
-  fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
-  draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
-  fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
-  if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
-    fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
-  }
-}
-
-void Fl_Counter::increment_cb() {
-  if (!mouseobj) return;
-  double v = value();
-  switch (mouseobj) {
-  case 1: v -= lstep_; break;
-  case 2: v = increment(v, -1); break;
-  case 3: v = increment(v, 1); break;
-  case 4: v += lstep_; break;
-  }
-  handle_drag(clamp(round(v)));
-}
-
-#define INITIALREPEAT .5
-#define REPEAT .1
-
-void Fl_Counter::repeat_callback(void* v) {
-  Fl_Counter* b = (Fl_Counter*)v;
-  if (b->mouseobj) {
-    Fl::add_timeout(REPEAT, repeat_callback, b);
-    b->increment_cb();
-  }
-}
-
-int Fl_Counter::calc_mouseobj() {
-  if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
-    if (Fl::event_inside(x(), y(), W, h())) return 1;
-    if (Fl::event_inside(x()+W, y(), W, h())) return 2;
-    if (Fl::event_inside(x()+w()-2*W, y(), W, h())) return 3;
-    if (Fl::event_inside(x()+w()-W, y(), W, h())) return 4;
-  } else {
-    int W = w()*20/100;
-    if (Fl::event_inside(x(), y(), W, h())) return 2;
-    if (Fl::event_inside(x()+w()-W, y(), W, h())) return 3;
-  }
-  return -1;
-}
-
-int Fl_Counter::handle(int event) {
-  int i;
-  switch (event) {
-  case FL_RELEASE:
-    if (mouseobj) {
-      Fl::remove_timeout(repeat_callback, this);
-      mouseobj = 0;
-      redraw();
-    }
-    handle_release();
-    return 1;
-  case FL_PUSH:
-    if (Fl::visible_focus()) Fl::focus(this);
-    { Fl_Widget_Tracker wp(this);
-      handle_push();
-      if (wp.deleted()) return 1;
-    }
-  case FL_DRAG:
-    i = calc_mouseobj();
-    if (i != mouseobj) {
-      Fl::remove_timeout(repeat_callback, this);
-      mouseobj = (uchar)i;
-      if (i) Fl::add_timeout(INITIALREPEAT, repeat_callback, this);
-      Fl_Widget_Tracker wp(this);
-      increment_cb();
-      if (wp.deleted()) return 1;
-      redraw();
-    }
-    return 1;
-  case FL_KEYBOARD :
-    switch (Fl::event_key()) {
-      case FL_Left:
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Right:
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      default:
-        return 0;
-    }
-    // break not required because of switch...
-  case FL_FOCUS : /* FALLTHROUGH */
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER : /* FALLTHROUGH */
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Destroys the valuator.
- */
-Fl_Counter::~Fl_Counter() {
-  Fl::remove_timeout(repeat_callback, this);
-}
-
-/**
-  Creates a new Fl_Counter widget using the given position, size, and label
-  string. The default type is FL_NORMAL_COUNTER.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
- */
-Fl_Counter::Fl_Counter(int X, int Y, int W, int H, const char* L)
-  : Fl_Valuator(X, Y, W, H, L) {
-  box(FL_UP_BOX);
-  selection_color(FL_INACTIVE_COLOR); // was FL_BLUE
-  align(FL_ALIGN_BOTTOM);
-  bounds(-1000000.0, 1000000.0);
-  Fl_Valuator::step(1, 10);
-  lstep_ = 1.0;
-  mouseobj = 0;
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-}
-
-
-Fl_Simple_Counter::Fl_Simple_Counter(int X,int Y,int W,int H, const char *L)
-: Fl_Counter(X,Y,W,H,L) {
-  type(FL_SIMPLE_COUNTER);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Device.cxx
+++ /dev/null
@@ -1,107 +1,0 @@
-//
-// "$Id$"
-//
-// implementation of Fl_Device class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Device.H>
-#include <FL/Fl_Image.H>
-
-const char *Fl_Device::class_id = "Fl_Device";
-const char *Fl_Surface_Device::class_id = "Fl_Surface_Device";
-const char *Fl_Display_Device::class_id = "Fl_Display_Device";
-const char *Fl_Graphics_Driver::class_id = "Fl_Graphics_Driver";
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-const char *Fl_Quartz_Graphics_Driver::class_id = "Fl_Quartz_Graphics_Driver";
-#  ifndef FL_DOXYGEN
-   bool Fl_Display_Device::high_res_window_ = false;
-#  endif
-#endif
-#if defined(WIN32) || defined(FL_DOXYGEN)
-const char *Fl_GDI_Graphics_Driver::class_id = "Fl_GDI_Graphics_Driver";
-const char *Fl_GDI_Printer_Graphics_Driver::class_id = "Fl_GDI_Printer_Graphics_Driver";
-#endif
-#if !(defined(__APPLE__) || defined(WIN32))
-const char *Fl_Xlib_Graphics_Driver::class_id = "Fl_Xlib_Graphics_Driver";
-#endif
-
-
-/** \brief Make this surface the current drawing surface.
- This surface will receive all future graphics requests. */
-void Fl_Surface_Device::set_current(void)
-{
-  fl_graphics_driver = _driver;
-  _surface = this;
-}
-
-FL_EXPORT Fl_Graphics_Driver *fl_graphics_driver; // the current target device of graphics operations
-Fl_Surface_Device* Fl_Surface_Device::_surface; // the current target surface of graphics operations
-
-const Fl_Graphics_Driver::matrix Fl_Graphics_Driver::m0 = {1, 0, 0, 1, 0, 0};
-
-Fl_Graphics_Driver::Fl_Graphics_Driver() {
-  font_ = 0;
-  size_ = 0;
-  sptr=0; rstackptr=0; 
-  rstack[0] = NULL;
-  fl_clip_state_number=0;
-  m = m0; 
-  fl_matrix = &m; 
-  p = (XPOINT *)0;
-  font_descriptor_ = NULL;
-  p_size = 0;
-};
-
-void Fl_Graphics_Driver::text_extents(const char*t, int n, int& dx, int& dy, int& w, int& h)
-{
-  w = (int)width(t, n);
-  h = - height();
-  dx = 0;
-  dy = descent();
-}
-
-/**  A constructor that sets the graphics driver used by the display */
-Fl_Display_Device::Fl_Display_Device(Fl_Graphics_Driver *graphics_driver) : Fl_Surface_Device(graphics_driver) {
-  this->set_current();
-};
-
-
-/** Returns the platform display device. */
-Fl_Display_Device *Fl_Display_Device::display_device() {
-  static Fl_Display_Device *display = new Fl_Display_Device(new
-#if defined(__APPLE__)
-                                                                  Fl_Quartz_Graphics_Driver
-#elif defined(WIN32)
-                                                                  Fl_GDI_Graphics_Driver
-#else
-                                                                  Fl_Xlib_Graphics_Driver
-#endif
-                                                                 );
-  return display;
-};
-
-
-Fl_Surface_Device *Fl_Surface_Device::default_surface()
-{
-  return Fl_Display_Device::display_device();
-}
-
-
-Fl_Display_Device *Fl_Display_Device::_display = Fl_Display_Device::display_device();
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Dial.cxx
+++ /dev/null
@@ -1,174 +1,0 @@
-//
-// "$Id$"
-//
-// Circular dial widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Dial.H>
-#include <FL/Fl_Fill_Dial.H>
-#include <FL/Fl_Line_Dial.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include <FL/math.h>
-
-
-// All angles are measured with 0 to the right and counter-clockwise
-/**
-  Draws dial at given position and size.
-  \param[in] X, Y, W, H position and size
-*/
-void Fl_Dial::draw(int X, int Y, int W, int H) {
-  if (damage()&FL_DAMAGE_ALL) draw_box(box(), X, Y, W, H, color());
-  X += Fl::box_dx(box());
-  Y += Fl::box_dy(box());
-  W -= Fl::box_dw(box());
-  H -= Fl::box_dh(box());
-  double angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
-  if (type() == FL_FILL_DIAL) {
-    // foo: draw this nicely in certain round box types
-    int foo = (box() > _FL_ROUND_UP_BOX && Fl::box_dx(box()));
-    if (foo) {X--; Y--; W+=2; H+=2;}
-    if (active_r()) fl_color(color());
-    else fl_color(fl_inactive(color()));
-    fl_pie(X, Y, W, H, 270-a1, angle > a1 ? 360+270-angle : 270-360-angle);
-    if (active_r()) fl_color(selection_color());
-    else fl_color(fl_inactive(selection_color()));
-    fl_pie(X, Y, W, H, 270-angle, 270-a1);
-    if (foo) {
-      if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-      else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-      fl_arc(X, Y, W, H, 0, 360);
-    }
-    return;
-  }
-  if (!(damage()&FL_DAMAGE_ALL)) {
-    if (active_r()) fl_color(color());
-    else fl_color(fl_inactive(color()));
-    fl_pie(X+1, Y+1, W-2, H-2, 0, 360);
-  }
-  fl_push_matrix();
-  fl_translate(X+W/2-.5, Y+H/2-.5);
-  fl_scale(W-1, H-1);
-  fl_rotate(45-angle);
-  if (active_r()) fl_color(selection_color());
-  else fl_color(fl_inactive(selection_color()));
-  if (type()) { // FL_LINE_DIAL
-    fl_begin_polygon();
-    fl_vertex(0.0,   0.0);
-    fl_vertex(-0.04, 0.0);
-    fl_vertex(-0.25, 0.25);
-    fl_vertex(0.0,   0.04);
-    fl_end_polygon();
-    if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-    else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop();
-    fl_vertex(0.0,   0.0);
-    fl_vertex(-0.04, 0.0);
-    fl_vertex(-0.25, 0.25);
-    fl_vertex(0.0,   0.04);
-    fl_end_loop();
-  } else {
-    fl_begin_polygon(); fl_circle(-0.20, 0.20, 0.07); fl_end_polygon();
-    if (active_r()) fl_color(FL_FOREGROUND_COLOR);
-    else fl_color(fl_inactive(FL_FOREGROUND_COLOR));
-    fl_begin_loop(); fl_circle(-0.20, 0.20, 0.07); fl_end_loop();
-  }
-  fl_pop_matrix();
-}
-
-/**
-  Draws dial at current position and size.
-*/
-void Fl_Dial::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/**
-  Allows subclasses to handle event based on given position and size.
-  \param[in] event, X, Y, W, H event to handle, related position and size.
-*/
-int Fl_Dial::handle(int event, int X, int Y, int W, int H) {
-  switch (event) {
-  case FL_PUSH: {
-    Fl_Widget_Tracker wp(this);  
-    handle_push();
-    if (wp.deleted()) return 1; }
-  case FL_DRAG: {
-    int mx = (Fl::event_x()-X-W/2)*H;
-    int my = (Fl::event_y()-Y-H/2)*W;
-    if (!mx && !my) return 1;
-    double angle = 270-atan2((float)-my, (float)mx)*180/M_PI;
-    double oldangle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1;
-    while (angle < oldangle-180) angle += 360;
-    while (angle > oldangle+180) angle -= 360;
-    double val;
-    if ((a1<a2) ? (angle <= a1) : (angle >= a1)) {
-      val = minimum();
-    } else if ((a1<a2) ? (angle >= a2) : (angle <= a2)) {
-      val = maximum();
-    } else {
-      val = minimum() + (maximum()-minimum())*(angle-a1)/(a2-a1);
-    }
-    handle_drag(clamp(round(val)));
-  } return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_ENTER : /* FALLTHROUGH */
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Allow subclasses to handle event based on current position and size.
-*/
-int Fl_Dial::handle(int e) {
-  return handle(e, x(), y(), w(), h());
-}
-
-Fl_Dial::Fl_Dial(int X, int Y, int W, int H, const char* l)
-/**
-  Creates a new Fl_Dial widget using the given position, size,
-  and label string. The default type is FL_NORMAL_DIAL.
-*/
-: Fl_Valuator(X, Y, W, H, l) {
-  box(FL_OVAL_BOX);
-  selection_color(FL_INACTIVE_COLOR); // was 37
-  a1 = 45;
-  a2 = 315;
-}
-
-
-Fl_Fill_Dial::Fl_Fill_Dial(int X,int Y,int W,int H, const char *L)
-: Fl_Dial(X,Y,W,H,L) {
-  type(FL_FILL_DIAL);
-}
-
-
-Fl_Line_Dial::Fl_Line_Dial(int X,int Y,int W,int H, const char *L)
-: Fl_Dial(X,Y,W,H,L) 
-{
-  type(FL_LINE_DIAL);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Double_Window.cxx
+++ /dev/null
@@ -1,549 +1,0 @@
-//
-// "$Id$"
-//
-// Double-buffered window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file
- Fl_Double_Window implementation.
- */
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/Fl_Printer.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-// On systems that support double buffering "naturally" the base
-// Fl_Window class will probably do double-buffer and this subclass
-// does nothing.
-
-#if USE_XDBE
-
-#include <X11/extensions/Xdbe.h>
-
-static int use_xdbe;
-
-static int can_xdbe() {
-  static int tried;
-  if (!tried) {
-    tried = 1;
-    int event_base, error_base;
-    if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
-    Drawable root = RootWindow(fl_display,fl_screen);
-    int numscreens = 1;
-    XdbeScreenVisualInfo *a = XdbeGetVisualInfo(fl_display,&root,&numscreens);
-    if (!a) return 0;
-    for (int j = 0; j < a->count; j++) {
-      if (a->visinfo[j].visual == fl_visual->visualid
-	  /*&& a->visinfo[j].perflevel > 0*/) {
-        use_xdbe = 1; break;
-      }
-    }
-    XdbeFreeVisualInfo(a);
-  }
-  return use_xdbe;
-}
-#endif
-
-
-Fl_Double_Window::Fl_Double_Window(int W, int H, const char *l) 
-: Fl_Window(W,H,l), 
-  force_doublebuffering_(0) 
-{ 
-  type(FL_DOUBLE_WINDOW); 
-}
-
-
-Fl_Double_Window::Fl_Double_Window(int X, int Y, int W, int H, const char *l)
-: Fl_Window(X,Y,W,H,l), 
-  force_doublebuffering_(0) 
-{ 
-  type(FL_DOUBLE_WINDOW);
-}
-
-
-void Fl_Double_Window::show() {
-  Fl_Window::show();
-}
-
-
-/** \addtogroup fl_drawings
- @{
- */
-/** Copy a rectangular area of the given offscreen buffer into the current drawing destination.
- \param x,y	position where to draw the copied rectangle
- \param w,h	size of the copied rectangle
- \param pixmap  offscreen buffer containing the rectangle to copy
- \param srcx,srcy origin in offscreen buffer of rectangle to copy
- */
-#if FLTK_ABI_VERSION >= 10301
-void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
-  fl_graphics_driver->copy_offscreen(x, y, w, h, pixmap, srcx, srcy);
-}
-#else
-void fl_copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
-#ifdef WIN32
-  if (fl_graphics_driver->class_name() == Fl_GDI_Graphics_Driver::class_id ||
-      fl_graphics_driver->class_name() == Fl_GDI_Printer_Graphics_Driver::class_id) {
-#else
-  if (fl_graphics_driver->class_name() == Fl_Display_Device::display_device()->driver()->class_name()) {
-#endif
-#ifdef USE_X11
-    ((Fl_Xlib_Graphics_Driver*)fl_graphics_driver)->copy_offscreen(x, y, w, h, pixmap, srcx, srcy);
-#elif defined(WIN32)
-    ((Fl_GDI_Graphics_Driver*)fl_graphics_driver)->copy_offscreen(x, y, w, h, pixmap, srcx, srcy);
-#elif defined(__APPLE__)
-    ((Fl_Quartz_Graphics_Driver*)fl_graphics_driver)->copy_offscreen(x, y, w, h, pixmap, srcx, srcy);
-#endif
-  }
-  else { // when copy is not to the display
-    fl_graphics_driver->copy_offscreen(x, y, w, h, pixmap, srcx, srcy);
-  }
-}
-#endif // FLTK_ABI_VERSION
-/** @} */
-
-/** see fl_copy_offscreen() */
-void Fl_Graphics_Driver::copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy)
-{
-  fl_begin_offscreen(pixmap);
-  uchar *img = fl_read_image(NULL, srcx, srcy, w, h, 0);
-  fl_end_offscreen();
-  fl_draw_image(img, x, y, w, h, 3, 0);
-  delete[] img;
-}
-
-#if defined(USE_X11)
-
-#if HAVE_XRENDER
-#include <X11/extensions/Xrender.h>
-#endif
-
-void Fl_Xlib_Graphics_Driver::copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy) {
-  XCopyArea(fl_display, pixmap, fl_window, fl_gc, srcx, srcy, w, h, x, y);
-}
-
-void Fl_Xlib_Graphics_Driver::copy_offscreen_with_alpha(int x, int y, int w, int h,
-						        Fl_Offscreen pixmap, int srcx, int srcy) {
-#if HAVE_XRENDER
-  XRenderPictureAttributes srcattr;
-  memset(&srcattr, 0, sizeof(XRenderPictureAttributes));
-  static XRenderPictFormat *srcfmt = XRenderFindStandardFormat(fl_display, PictStandardARGB32);
-  static XRenderPictFormat *dstfmt = XRenderFindStandardFormat(fl_display, PictStandardRGB24);
-
-  Picture src = XRenderCreatePicture(fl_display, pixmap, srcfmt, 0, &srcattr);
-  Picture dst = XRenderCreatePicture(fl_display, fl_window, dstfmt, 0, &srcattr);
-
-  if (!src || !dst) {
-    fprintf(stderr, "Failed to create Render pictures (%lu %lu)\n", src, dst);
-    return;
-  }
-
-  const Fl_Region clipr = fl_clip_region();
-  if (clipr)
-    XRenderSetPictureClipRegion(fl_display, dst, clipr);
-
-  XRenderComposite(fl_display, PictOpOver, src, None, dst, srcx, srcy, 0, 0,
-  			x, y, w, h);
-
-  XRenderFreePicture(fl_display, src);
-  XRenderFreePicture(fl_display, dst);
-#endif
-}
-
-char fl_can_do_alpha_blending() {
-  return Fl_X::xrender_supported();
-}
-#elif defined(WIN32)
-
-// Code used to switch output to an off-screen window.  See macros in
-// win32.H which save the old state in local variables.
-
-typedef struct { BYTE a; BYTE b; BYTE c; BYTE d; } FL_BLENDFUNCTION;
-typedef BOOL (WINAPI* fl_alpha_blend_func)
-    (HDC,int,int,int,int,HDC,int,int,int,int,FL_BLENDFUNCTION);
-static fl_alpha_blend_func fl_alpha_blend = NULL;
-static FL_BLENDFUNCTION blendfunc = { 0, 0, 255, 1};
-
-/*
- * This function checks if the version of MSWindows that we
- * curently run on supports alpha blending for bitmap transfers
- * and finds the required function if so.
- */
-char fl_can_do_alpha_blending() {
-  static char been_here = 0;
-  static char can_do = 0;
-  // do this test only once
-  if (been_here) return can_do;
-  been_here = 1;
-  // load the library that implements alpha blending
-  HMODULE hMod = LoadLibrary("MSIMG32.DLL");
-  // give up if that doesn't exist (Win95?)
-  if (!hMod) return 0;
-  // now find the blending function inside that dll
-  fl_alpha_blend = (fl_alpha_blend_func)GetProcAddress(hMod, "AlphaBlend");
-  // give up if we can't find it (Win95)
-  if (!fl_alpha_blend) return 0;
-  // we have the call, but does our display support alpha blending?
-  // get the desktop's device context
-  HDC dc = GetDC(0L);
-  if (!dc) return 0;
-  // check the device capabilities flags. However GetDeviceCaps
-  // does not return anything useful, so we have to do it manually:
-
-  HBITMAP bm = CreateCompatibleBitmap(dc, 1, 1);
-  HDC new_gc = CreateCompatibleDC(dc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bm);
-  /*COLORREF set = */ SetPixel(new_gc, 0, 0, 0x01010101);
-  BOOL alpha_ok = fl_alpha_blend(dc, 0, 0, 1, 1, new_gc, 0, 0, 1, 1, blendfunc);
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-  DeleteObject(bm);
-  ReleaseDC(0L, dc);
-
-  if (alpha_ok) can_do = 1;
-  return can_do;
-}
-
-HDC fl_makeDC(HBITMAP bitmap) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  SetTextAlign(new_gc, TA_BASELINE|TA_LEFT);
-  SetBkMode(new_gc, TRANSPARENT);
-#if USE_COLORMAP
-  if (fl_palette) SelectPalette(new_gc, fl_palette, FALSE);
-#endif
-  SelectObject(new_gc, bitmap);
-  return new_gc;
-}
-
-void Fl_GDI_Graphics_Driver::copy_offscreen(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bitmap);
-  BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-}
-
-void Fl_GDI_Graphics_Driver::copy_offscreen_with_alpha(int x,int y,int w,int h,HBITMAP bitmap,int srcx,int srcy) {
-  HDC new_gc = CreateCompatibleDC(fl_gc);
-  int save = SaveDC(new_gc);
-  SelectObject(new_gc, bitmap);
-  BOOL alpha_ok = 0;
-  // first try to alpha blend
-  if ( fl_can_do_alpha_blending() ) {
-    alpha_ok = fl_alpha_blend(fl_gc, x, y, w, h, new_gc, srcx, srcy, w, h, blendfunc);
-  }
-  // if that failed (it shouldn't), still copy the bitmap over, but now alpha is 1
-  if (!alpha_ok) {
-    BitBlt(fl_gc, x, y, w, h, new_gc, srcx, srcy, SRCCOPY);
-  }
-  RestoreDC(new_gc, save);
-  DeleteDC(new_gc);
-}
-
-
-#elif defined(__APPLE_QUARTZ__) || defined(FL_DOXYGEN)
-
-char fl_can_do_alpha_blending() {
-  return 1;
-}
-
-#if ! defined(FL_DOXYGEN)
-Fl_Offscreen Fl_Quartz_Graphics_Driver::create_offscreen_with_alpha(int w, int h) {
-  void *data = calloc(w*h,4);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  CGContextRef ctx = CGBitmapContextCreate(
-    data, w, h, 8, w*4, lut, kCGImageAlphaPremultipliedLast);
-  CGColorSpaceRelease(lut);
-  return (Fl_Offscreen)ctx;
-}
-#endif
-
-/** \addtogroup fl_drawings
- @{
- */
-
-/** 
-  Creation of an offscreen graphics buffer.
- \param w,h     width and height in pixels of the buffer.
- \return    the created graphics buffer.
- */
-Fl_Offscreen fl_create_offscreen(int w, int h) {
-  void *data = calloc(w*h,4);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  CGContextRef ctx = CGBitmapContextCreate(
-    data, w, h, 8, w*4, lut, kCGImageAlphaNoneSkipLast);
-  CGColorSpaceRelease(lut);
-  return (Fl_Offscreen)ctx;
-}
-
-static void bmProviderRelease (void *src, const void *data, size_t size) {
-  CFIndex count = CFGetRetainCount(src);
-  CFRelease(src);
-  if(count == 1) free((void*)data);
-}
-
-void Fl_Quartz_Graphics_Driver::copy_offscreen(int x,int y,int w,int h,Fl_Offscreen osrc,int srcx,int srcy) {
-  CGContextRef src = (CGContextRef)osrc;
-  void *data = CGBitmapContextGetData(src);
-  int sw = CGBitmapContextGetWidth(src);
-  int sh = CGBitmapContextGetHeight(src);
-  CGImageAlphaInfo alpha = CGBitmapContextGetAlphaInfo(src);
-  CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-  // when output goes to a Quartz printercontext, release of the bitmap must be
-  // delayed after the end of the print page
-  CFRetain(src);
-  CGDataProviderRef src_bytes = CGDataProviderCreateWithData( src, data, sw*sh*4, bmProviderRelease);
-  CGImageRef img = CGImageCreate( sw, sh, 8, 4*8, 4*sw, lut, alpha,
-    src_bytes, 0L, false, kCGRenderingIntentDefault);
-  // fl_push_clip();
-  CGRect rect = CGRectMake(x, y, w, h);
-  Fl_X::q_begin_image(rect, srcx, srcy, sw, sh);
-  CGContextDrawImage(fl_gc, rect, img);
-  Fl_X::q_end_image();
-  CGImageRelease(img);
-  CGColorSpaceRelease(lut);
-  CGDataProviderRelease(src_bytes);
-}
-
-/**  Deletion of an offscreen graphics buffer.
- \param ctx     the buffer to be deleted.
- */
-void fl_delete_offscreen(Fl_Offscreen ctx) {
-  if (!ctx) return;
-  void *data = CGBitmapContextGetData((CGContextRef)ctx);
-  CFIndex count = CFGetRetainCount(ctx);
-  CGContextRelease((CGContextRef)ctx);
-  if(count == 1) free(data);
-}
-
-const int stack_max = 16;
-static int stack_ix = 0;
-static CGContextRef stack_gc[stack_max];
-static Window stack_window[stack_max];
-static Fl_Surface_Device *_ss;
-
-/**  Send all subsequent drawing commands to this offscreen buffer.
- \param ctx     the offscreen buffer.
- */
-void fl_begin_offscreen(Fl_Offscreen ctx) {
-  _ss = Fl_Surface_Device::surface(); 
-  Fl_Display_Device::display_device()->set_current();
-  if (stack_ix<stack_max) {
-    stack_gc[stack_ix] = fl_gc;
-    stack_window[stack_ix] = fl_window;
-  } else 
-    fprintf(stderr, "FLTK CGContext Stack overflow error\n");
-  stack_ix++;
-
-  fl_gc = (CGContextRef)ctx;
-  fl_window = 0;
-  CGContextSaveGState(fl_gc);
-  fl_push_no_clip();
-}
-
-/** Quit sending drawing commands to the current offscreen buffer.
- */
-void fl_end_offscreen() {
-  fl_pop_clip();
-  CGContextRestoreGState(fl_gc); // matches CGContextSaveGState in fl_begin_offscreen()
-  CGContextFlush(fl_gc);
-  if (stack_ix>0)
-    stack_ix--;
-  else
-    fprintf(stderr, "FLTK CGContext Stack underflow error\n");
-  if (stack_ix<stack_max) {
-    fl_gc = stack_gc[stack_ix];
-    fl_window = stack_window[stack_ix];
-  }
-  _ss->set_current();
-}
-
-/** @} */
-
-
-#else
-# error unsupported platform
-#endif
-
-/**
-  Forces the window to be redrawn.
-*/
-void Fl_Double_Window::flush() {flush(0);}
-
-/**
-  Forces the window to be redrawn.
-  \param[in] eraseoverlay non-zero to erase overlay, zero to ignore
-
-  Fl_Overlay_Window relies on flush(1) copying the back buffer to the
-  front everywhere, even if damage() == 0, thus erasing the overlay,
-  and leaving the clip region set to the entire window.
-*/
-void Fl_Double_Window::flush(int eraseoverlay) {
-  if (!shown()) return;
-  make_current(); // make sure fl_gc is non-zero
-  Fl_X *myi = Fl_X::i(this);
-  if (!myi) return; // window not yet created
-  if (!myi->other_xid) {
-#if USE_XDBE
-    if (can_xdbe()) {
-      myi->other_xid = XdbeAllocateBackBufferName(fl_display, fl_xid(this), XdbeCopied);
-      myi->backbuffer_bad = 1;
-    } else
-#endif
-#if defined(USE_X11) || defined(WIN32)
-    myi->other_xid = fl_create_offscreen(w(), h());
-    clear_damage(FL_DAMAGE_ALL);
-#elif defined(__APPLE_QUARTZ__)
-    if (force_doublebuffering_) {
-      myi->other_xid = fl_create_offscreen(w(), h());
-      clear_damage(FL_DAMAGE_ALL);
-    }
-#else
-# error unsupported platform
-#endif
-  }
-#if USE_XDBE
-  if (use_xdbe) {
-    if (myi->backbuffer_bad || eraseoverlay) {
-      // Make sure we do a complete redraw...
-      if (myi->region) {XDestroyRegion(myi->region); myi->region = 0;}
-      clear_damage(FL_DAMAGE_ALL);
-      myi->backbuffer_bad = 0;
-    }
-
-    // Redraw as needed...
-    if (damage()) {
-      fl_clip_region(myi->region); myi->region = 0;
-      fl_window = myi->other_xid;
-      draw();
-      fl_window = myi->xid;
-    }
-
-    // Copy contents of back buffer to window...
-    XdbeSwapInfo s;
-    s.swap_window = fl_xid(this);
-    s.swap_action = XdbeCopied;
-    XdbeSwapBuffers(fl_display, &s, 1);
-    return;
-  } else
-#endif
-  if (damage() & ~FL_DAMAGE_EXPOSE) {
-    fl_clip_region(myi->region); myi->region = 0;
-#ifdef WIN32
-    HDC _sgc = fl_gc;
-    fl_gc = fl_makeDC(myi->other_xid);
-    int save = SaveDC(fl_gc);
-    fl_restore_clip(); // duplicate region into new gc
-    draw();
-    RestoreDC(fl_gc, save);
-    DeleteDC(fl_gc);
-    fl_gc = _sgc;
-    //# if defined(FLTK_USE_CAIRO)
-    //if Fl::cairo_autolink_context() Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-    //# endif
-#elif defined(__APPLE__)
-    if ( myi->other_xid ) {
-      fl_begin_offscreen( myi->other_xid );
-      fl_clip_region( 0 );   
-      draw();
-      fl_end_offscreen();
-    } else {
-      draw();
-    }
-#else // X:
-    fl_window = myi->other_xid;
-    draw();
-    fl_window = myi->xid;
-#endif
-  }
-  if (eraseoverlay) fl_clip_region(0);
-  // on Irix (at least) it is faster to reduce the area copied to
-  // the current clip region:
-  int X,Y,W,H; fl_clip_box(0,0,w(),h(),X,Y,W,H);
-  if (myi->other_xid) fl_copy_offscreen(X, Y, W, H, myi->other_xid, X, Y);
-}
-
-void Fl_Double_Window::resize(int X,int Y,int W,int H) {
-  int ow = w();
-  int oh = h();
-  Fl_Window::resize(X,Y,W,H);
-#if USE_XDBE
-  if (use_xdbe) {
-    Fl_X* myi = Fl_X::i(this);
-    if (myi && myi->other_xid && (ow < w() || oh < h())) {
-      // STR #2152: Deallocate the back buffer to force creation of a new one.
-      XdbeDeallocateBackBufferName(fl_display,myi->other_xid);
-      myi->other_xid = 0;
-    }
-    return;
-  }
-#endif
-  Fl_X* myi = Fl_X::i(this);
-  if (myi && myi->other_xid && (ow != w() || oh != h())) {
-    fl_delete_offscreen(myi->other_xid);
-    myi->other_xid = 0;
-  }
-}
-
-void Fl_Double_Window::hide() {
-  Fl_X* myi = Fl_X::i(this);
-  if (myi && myi->other_xid) {
-#if USE_XDBE
-    if (use_xdbe) {
-      XdbeDeallocateBackBufferName(fl_display, myi->other_xid);
-    }
-    else
-#endif
-      fl_delete_offscreen(myi->other_xid);
-  }
-  Fl_Window::hide();
-}
-
-/**
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code.
-*/
-Fl_Double_Window::~Fl_Double_Window() {
-  hide();
-}
-
-
-Fl_Overlay_Window::Fl_Overlay_Window(int W, int H, const char *l)
-: Fl_Double_Window(W,H,l) 
-{
-  overlay_ = 0; 
-  force_doublebuffering_=1; 
-  image(0); 
-}
-  
-  
-Fl_Overlay_Window::Fl_Overlay_Window(int X, int Y, int W, int H, const char *l)
-: Fl_Double_Window(X,Y,W,H,l) 
-{
-  overlay_ = 0; 
-  force_doublebuffering_=1; 
-  image(0); 
-}
-
-  
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Browser.cxx
+++ /dev/null
@@ -1,735 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Browser routines.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_File_Browser::full_height()     - Return the height of the list.
-//   Fl_File_Browser::item_height()     - Return the height of a list item.
-//   Fl_File_Browser::item_width()      - Return the width of a list item.
-//   Fl_File_Browser::item_draw()       - Draw a list item.
-//   Fl_File_Browser::Fl_File_Browser() - Create a Fl_File_Browser widget.
-//   Fl_File_Browser::load()            - Load a directory into the browser.
-//   Fl_File_Browser::filter()          - Set the filename filter.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_File_Browser.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-#include <FL/Fl_Image.H>	// icon
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __CYGWIN__
-#  include <mntent.h>
-#elif defined(WIN32)
-#  include <windows.h>
-#  include <direct.h>
-// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
-// interfers with the Fl_File_Icon enumeration of the same name.
-#  ifdef DIRECTORY
-#    undef DIRECTORY
-#  endif // DIRECTORY
-#endif // __CYGWIN__
-
-#ifdef __EMX__
-#  define  INCL_DOS
-#  define  INCL_DOSMISC
-#  include <os2.h>
-#endif // __EMX__
-
-#if defined(__APPLE__)
-#  include <sys/param.h>
-#  include <sys/ucred.h>
-#  include <sys/mount.h>
-#endif // __APPLE__
-
-#if defined(_AIX)
-extern "C" {
-#  include <sys/types.h>
-#  include <sys/vmount.h>
-#  include <sys/mntctl.h>
-  // Older AIX versions don't expose this prototype
-  int
-  mntctl(int, int, char *);
-}
-#endif  // _AIX
-
-#if defined(__NetBSD__)
-extern "C" {
-#  include <sys/param.h>  // For '__NetBSD_Version__' definition
-#  if defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 300000000)
-#    include <sys/types.h>
-#    include <sys/statvfs.h>
-#    if defined(HAVE_PTHREAD) && defined(HAVE_PTHREAD_H)
-#      include <pthread.h>
-#    endif  // HAVE_PTHREAD && HAVE_PTHREAD_H
-#    ifdef HAVE_PTHREAD
-  static pthread_mutex_t getvfsstat_mutex = PTHREAD_MUTEX_INITIALIZER;
-#    endif  // HAVE_PTHREAD/
-#  endif  // __NetBSD_Version__
-}
-#endif  // __NetBSD__
-
-//
-// FL_BLINE definition from "Fl_Browser.cxx"...
-//
-
-#define SELECTED 1
-#define NOTDISPLAYED 2
-
-// TODO -- Warning: The definition of FL_BLINE here is a hack.
-//    Fl_File_Browser should not do this. PLEASE FIX.
-//    FL_BLINE should be private to Fl_Browser, and not re-defined here.
-//    For now, make sure this struct is precisely consistent with Fl_Browser.cxx.
-//
-struct FL_BLINE			// data is in a linked list of these
-{
-  FL_BLINE	*prev;		// Previous item in list
-  FL_BLINE	*next;		// Next item in list
-  void		*data;		// Pointer to data (function)
-  Fl_Image      *icon;		// Pointer to optional icon
-  short		length;		// sizeof(txt)-1, may be longer than string
-  char		flags;		// selected, displayed
-  char		txt[1];		// start of allocated array
-};
-
-
-//
-// 'Fl_File_Browser::full_height()' - Return the height of the list.
-//
-
-int					// O - Height in pixels
-Fl_File_Browser::full_height() const
-{
-  int	i,				// Looping var
-	th;				// Total height of list.
-
-
-  for (i = 0, th = 0; i < size(); i ++)
-    th += item_height(find_line(i));
-
-  return (th);
-}
-
-
-//
-// 'Fl_File_Browser::item_height()' - Return the height of a list item.
-//
-
-int					// O - Height in pixels
-Fl_File_Browser::item_height(void *p) const	// I - List item data
-{
-  FL_BLINE	*line;			// Pointer to line
-  char		*t;			// Pointer into text
-  int		height;			// Width of line
-  int		textheight;		// Height of text
-
-
-  // Figure out the standard text height...
-  fl_font(textfont(), textsize());
-  textheight = fl_height();
-
-  // We always have at least 1 line...
-  height = textheight;
-
-  // Scan for newlines...
-  line = (FL_BLINE *)p;
-
-  if (line != NULL)
-    for (t = line->txt; *t != '\0'; t ++)
-      if (*t == '\n')
-	height += textheight;
-
-  // If we have enabled icons then add space for them...
-  if (Fl_File_Icon::first() != NULL && height < iconsize_)
-    height = iconsize_;
-
-  // Add space for the selection border..
-  height += 2;
-
-  // Return the height
-  return (height);
-}
-
-
-//
-// 'Fl_File_Browser::item_width()' - Return the width of a list item.
-//
-
-int					// O - Width in pixels
-Fl_File_Browser::item_width(void *p) const	// I - List item data
-{
-  int		i;			// Looping var
-  FL_BLINE	*line;			// Pointer to line
-  char		*t,			// Pointer into text
-		*ptr,			// Pointer into fragment
-		fragment[10240];	// Fragment of text
-  int		width,			// Width of line
-		tempwidth;		// Width of fragment
-  int		column;			// Current column
-  const int	*columns;		// Columns
-
-
-  // Scan for newlines...
-  line    = (FL_BLINE *)p;
-  columns = column_widths();
-
-  // Set the font and size...
-  if (line->txt[strlen(line->txt) - 1] == '/')
-    fl_font(textfont() | FL_BOLD, textsize());
-  else
-    fl_font(textfont(), textsize());
-
-  if (strchr(line->txt, '\n') == NULL &&
-      strchr(line->txt, column_char()) == NULL)
-  {
-    // Do a fast width calculation...
-    width = (int)fl_width(line->txt);
-  }
-  else
-  {
-    // More than 1 line or have columns; find the maximum width...
-    width     = 0;
-    tempwidth = 0;
-    column    = 0;
-
-    for (t = line->txt, ptr = fragment; *t != '\0'; t ++)
-      if (*t == '\n')
-      {
-        // Newline - nul terminate this fragment and get the width...
-        *ptr = '\0';
-
-	tempwidth += (int)fl_width(fragment);
-
-        // Update the max width as needed...
-	if (tempwidth > width)
-	  width = tempwidth;
-
-        // Point back to the start of the fragment...
-	ptr       = fragment;
-	tempwidth = 0;
-	column    = 0;
-      }
-      else if (*t == column_char())
-      {
-        // Advance to the next column...
-        column ++;
-	if (columns)
-	{
-	  for (i = 0, tempwidth = 0; i < column && columns[i]; i ++)
-	    tempwidth += columns[i];
-	}
-	else
-          tempwidth = column * (int)(fl_height() * 0.6 * 8.0);
-
-        if (tempwidth > width)
-	  width = tempwidth;
-
-	ptr = fragment;
-      }
-      else
-        *ptr++ = *t;
-
-    if (ptr > fragment)
-    {
-      // Nul terminate this fragment and get the width...
-      *ptr = '\0';
-
-      tempwidth += (int)fl_width(fragment);
-
-      // Update the max width as needed...
-      if (tempwidth > width)
-	width = tempwidth;
-    }
-  }
-
-  // If we have enabled icons then add space for them...
-  if (Fl_File_Icon::first() != NULL)
-    width += iconsize_ + 8;
-
-  // Add space for the selection border..
-  width += 2;
-
-  // Return the width
-  return (width);
-}
-
-
-//
-// 'Fl_File_Browser::item_draw()' - Draw a list item.
-//
-
-void
-Fl_File_Browser::item_draw(void *p,	// I - List item data
-                 	   int  X,	// I - Upper-lefthand X coordinate
-		 	   int  Y,	// I - Upper-lefthand Y coordinate
-		 	   int  W,	// I - Width of item
-			   int) const	// I - Height of item
-{
-  int		i;			// Looping var
-  FL_BLINE	*line;			// Pointer to line
-  Fl_Color	c;			// Text color
-  char		*t,			// Pointer into text
-		*ptr,			// Pointer into fragment
-		fragment[10240];	// Fragment of text
-  int		width,			// Width of line
-		height;			// Height of line
-  int		column;			// Current column
-  const int	*columns;		// Columns
-
-
-  // Draw the list item text...
-  line = (FL_BLINE *)p;
-
-  if (line->txt[strlen(line->txt) - 1] == '/')
-    fl_font(textfont() | FL_BOLD, textsize());
-  else
-    fl_font(textfont(), textsize());
-
-  if (line->flags & SELECTED)
-    c = fl_contrast(textcolor(), selection_color());
-  else
-    c = textcolor();
-
-  if (Fl_File_Icon::first() == NULL)
-  {
-    // No icons, just draw the text...
-    X ++;
-    W -= 2;
-  }
-  else
-  {
-    // Draw the icon if it is set...
-    if (line->data)
-      ((Fl_File_Icon *)line->data)->draw(X, Y, iconsize_, iconsize_,
-                                	(line->flags & SELECTED) ? FL_YELLOW :
-				                                   FL_LIGHT2,
-					active_r());
-
-    // Draw the text offset to the right...
-    X += iconsize_ + 9;
-    W -= iconsize_ - 10;
-
-    // Center the text vertically...
-    height = fl_height();
-
-    for (t = line->txt; *t != '\0'; t ++)
-      if (*t == '\n')
-	height += fl_height();
-
-    if (height < iconsize_)
-      Y += (iconsize_ - height) / 2;
-  }
-
-  // Draw the text...
-  line    = (FL_BLINE *)p;
-  columns = column_widths();
-  width   = 0;
-  column  = 0;
-
-  if (active_r())
-    fl_color(c);
-  else
-    fl_color(fl_inactive(c));
-
-  for (t = line->txt, ptr = fragment; *t != '\0'; t ++) {
-    if (*t == '\n') {
-      // Newline - nul terminate this fragment and draw it...
-      *ptr = '\0';
-
-      fl_draw(fragment, X + width, Y, W - width, fl_height(),
-              (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-
-      // Point back to the start of the fragment...
-      ptr    = fragment;
-      width  = 0;
-      Y      += fl_height();
-      column = 0;
-    } else if (*t == column_char()) {
-      // Tab - nul terminate this fragment and draw it...
-      *ptr = '\0';
-
-      int cW = W - width; // Clip width...
-
-      if (columns) {
-	// Try clipping inside this column...
-	for (i = 0; i < column && columns[i]; i ++) { ; }
-
-	if (columns[i])
-	  cW = columns[i];
-      }
-
-      fl_draw(fragment, X + width, Y, cW, fl_height(),
-              (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-
-      // Advance to the next column...
-      column ++;
-      if (columns) {
-	for (i = 0, width = 0; i < column && columns[i]; i ++)
-	  width += columns[i];
-      }
-      else
-	width = column * (int)(fl_height() * 0.6 * 8.0);
-      ptr = fragment;
-    }
-    else
-      *ptr++ = *t;
-  }
-  if (ptr > fragment) {
-    // Nul terminate this fragment and draw it...
-    *ptr = '\0';
-
-    fl_draw(fragment, X + width, Y, W - width, fl_height(),
-            (Fl_Align)(FL_ALIGN_LEFT | FL_ALIGN_CLIP), 0, 0);
-  }
-}
-
-
-//
-// 'Fl_File_Browser::Fl_File_Browser()' - Create a Fl_File_Browser widget.
-//
-
-Fl_File_Browser::Fl_File_Browser(int        X,  // I - Upper-lefthand X coordinate
-                        	 int        Y,  // I - Upper-lefthand Y coordinate
-				 int        W,  // I - Width in pixels
-				 int        H,  // I - Height in pixels
-				 const char *l)	// I - Label text
-    : Fl_Browser(X, Y, W, H, l)
-{
-  // Initialize the filter pattern, current directory, and icon size...
-  pattern_   = "*";
-  directory_ = "";
-  iconsize_  = (uchar)(3 * textsize() / 2);
-  filetype_  = FILES;
-}
-
-
-//
-// 'Fl_File_Browser::load()' - Load a directory into the browser.
-//
-
-int						// O - Number of files loaded
-Fl_File_Browser::load(const char     *directory,// I - Directory to load
-                      Fl_File_Sort_F *sort)	// I - Sort function to use
-{
-  int		i;				// Looping var
-  int		num_files;			// Number of files in directory
-  int		num_dirs;			// Number of directories in list
-  char		filename[4096];			// Current file
-  Fl_File_Icon	*icon;				// Icon to use
-
-
-//  printf("Fl_File_Browser::load(\"%s\")\n", directory);
-
-  clear();
-
-  directory_ = directory;
-
-  if (!directory)
-    return (0);
-
-  if (directory_[0] == '\0')
-  {
-    //
-    // No directory specified; for UNIX list all mount points.  For DOS
-    // list all valid drive letters...
-    //
-
-    num_files = 0;
-    if ((icon = Fl_File_Icon::find("any", Fl_File_Icon::DEVICE)) == NULL)
-      icon = Fl_File_Icon::find("any", Fl_File_Icon::DIRECTORY);
-
-#ifdef WIN32
-#  ifdef __CYGWIN__
-    //
-    // Cygwin provides an implementation of setmntent() to get the list
-    // of available drives...
-    //
-    FILE          *m = setmntent("/-not-used-", "r");
-    struct mntent *p;
-
-    while ((p = getmntent (m)) != NULL) {
-      add(p->mnt_dir, icon);
-      num_files ++;
-    }
-
-    endmntent(m);
-#  else
-    //
-    // Normal WIN32 code uses drive bits...
-    //
-    DWORD	drives;		// Drive available bits
-
-    drives = GetLogicalDrives();
-    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
-      if (drives & 1)
-      {
-        sprintf(filename, "%c:/", i);
-
-	if (i < 'C') // see also: GetDriveType and GetVolumeInformation in WIN32
-	  add(filename, icon);
-	else
-	  add(filename, icon);
-
-	num_files ++;
-      }
-#  endif // __CYGWIN__
-#elif defined(__EMX__)
-    //
-    // OS/2 code uses drive bits...
-    //
-    ULONG	curdrive;	// Current drive
-    ULONG	drives;		// Drive available bits
-    int		start = 3;      // 'C' (MRS - dunno if this is correct!)
-
-
-    DosQueryCurrentDisk(&curdrive, &drives);
-    drives >>= start - 1;
-    for (i = 'A'; i <= 'Z'; i ++, drives >>= 1)
-      if (drives & 1)
-      {
-        sprintf(filename, "%c:/", i);
-        add(filename, icon);
-
-	num_files ++;
-      }
-#elif defined(__APPLE__)
-    // MacOS X and Darwin use getfsstat() system call...
-    int			numfs;	// Number of file systems
-    struct statfs	*fs;	// Buffer for file system info
-
-
-    // We always have the root filesystem.
-    add("/", icon);
-
-    // Get the mounted filesystems...
-    numfs = getfsstat(NULL, 0, MNT_NOWAIT);
-    if (numfs > 0) {
-      // We have file systems, get them...
-      fs = new struct statfs[numfs];
-      getfsstat(fs, sizeof(struct statfs) * numfs, MNT_NOWAIT);
-
-      // Add filesystems to the list...
-      for (i = 0; i < numfs; i ++) {
-	// Ignore "/", "/dev", and "/.vol"...
-        if (fs[i].f_mntonname[1] && strcmp(fs[i].f_mntonname, "/dev") &&
-	    strcmp(fs[i].f_mntonname, "/.vol")) {
-          snprintf(filename, sizeof(filename), "%s/", fs[i].f_mntonname);
-          add(filename, icon);
-        }
-        num_files ++;
-      }
-
-      // Free the memory used for the file system info array...
-      delete[] fs;
-    }
-#elif defined(_AIX)
-    // AIX don't write the mounted filesystems to a file like '/etc/mnttab'.
-    // But reading the list of mounted filesystems from the kernel is possible:
-    // http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.basetechref/doc/basetrf1/mntctl.htm
-    int res = -1, len;
-    char *list = NULL, *name;
-    struct vmount *vp;
-
-    // We always have the root filesystem
-    add("/", icon);
-    // Get the required buffer size for the vmount structures
-    res = mntctl(MCTL_QUERY, sizeof(len), (char *) &len);
-    if (!res) {
-      // Allocate buffer ...
-      list = (char *) malloc((size_t) len);
-      if (NULL == list) {
-        res = -1;
-      } else {
-        // ... and read vmount structures from kernel
-        res = mntctl(MCTL_QUERY, len, list);
-        if (0 >= res) {
-          res = -1;
-        } else {
-          for (i = 0, vp = (struct vmount *) list; i < res; ++i) {
-            name = (char *) vp + vp->vmt_data[VMT_STUB].vmt_off;
-            strlcpy(filename, name, sizeof(filename));
-            // Skip the already added root filesystem
-            if (strcmp("/", filename) != 0) {
-              strlcat(filename, "/", sizeof(filename));
-              add(filename, icon);
-            }
-            vp = (struct vmount *) ((char *) vp + vp->vmt_length);
-          }
-        }
-      }
-    }
-    // Note: Executing 'free(NULL)' is allowed and simply do nothing
-    free((void *) list);
-#elif defined(__NetBSD__) && defined(__NetBSD_Version__) \
-      && (__NetBSD_Version__ >= 300000000)
-    // NetBSD don't write the mounted filesystems to a file like '/etc/mnttab'.
-    // Since NetBSD 3.0 the system call getvfsstat(2) has replaced getfsstat(2)
-    // that is used by getmntinfo(3):
-    // http://www.daemon-systems.org/man/getmntinfo.3.html
-    int res = -1;
-    struct statvfs *list;
-
-    // We always have the root filesystem
-    add("/", icon);
-#  ifdef HAVE_PTHREAD
-    // Lock mutex for thread safety
-    if (!pthread_mutex_lock(&getvfsstat_mutex)) {
-#  endif  // HAVE_PTHREAD
-      // Get list of statvfs structures
-      res = getmntinfo(&list, ST_WAIT);
-      if(0 < res) {
-        for (i = 0;  i < res; ++i) {
-          strlcpy(filename, list[i].f_mntonname, sizeof(filename));
-          // Skip the already added root filesystem
-          if (strcmp("/", filename) != 0) {
-            strlcat(filename, "/", sizeof(filename));
-            add(filename, icon);
-          }
-        }
-      } else {
-         res = -1;
-      }
-#  ifdef HAVE_PTHREAD
-      pthread_mutex_unlock(&getvfsstat_mutex);
-    }
-#  endif  // HAVE_PTHREAD
-#else
-    //
-    // UNIX code uses /etc/fstab or similar...
-    //
-    FILE	*mtab;		// /etc/mtab or /etc/mnttab file
-    char	line[FL_PATH_MAX];	// Input line
-
-    //
-    // Open the file that contains a list of mounted filesystems...
-    //
-
-    mtab = fl_fopen("/etc/mnttab", "r");	// Fairly standard
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/mtab", "r");	// More standard
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/fstab", "r");	// Otherwise fallback to full list
-    if (mtab == NULL)
-      mtab = fl_fopen("/etc/vfstab", "r");	// Alternate full list file
-
-    if (mtab != NULL)
-    {
-      // We always have the root filesystem
-      add("/", icon);
-      num_files ++;
-      while (fgets(line, sizeof(line), mtab) != NULL)
-      {
-        if (line[0] == '#' || line[0] == '\n')
-	  continue;
-        if (sscanf(line, "%*s%4095s", filename) != 1)
-	  continue;
-
-        if (strcmp("/", filename) == 0) continue; // root was added before
-        // Add a trailing slash (except for the root filesystem)
-        strlcat(filename, "/", sizeof(filename));
-
-//        printf("Fl_File_Browser::load() - adding \"%s\" to list...\n", filename);
-        add(filename, icon);
-	num_files ++;
-      }
-
-      fclose(mtab);
-    } else {
-      // Every Unix has a root filesystem '/'.
-      // This last stage fallback ensures that the user don't get an empty
-      // window after requesting filesystem list.
-      add("/", icon);
-    }
-#endif // WIN32 || __EMX__ || __APPLE__ || _AIX || ...
-  }
-  else
-  {
-    dirent	**files;	// Files in in directory
-
-
-    //
-    // Build the file list...
-    //
-
-#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
-    strlcpy(filename, directory_, sizeof(filename));
-    i = (int) (strlen(filename) - 1);
-
-    if (i == 2 && filename[1] == ':' &&
-        (filename[2] == '/' || filename[2] == '\\'))
-      filename[2] = '/';
-    else if (filename[i] != '/' && filename[i] != '\\')
-      strlcat(filename, "/", sizeof(filename));
-
-    num_files = fl_filename_list(filename, &files, sort);
-#else
-    num_files = fl_filename_list(directory_, &files, sort);
-#endif /* WIN32 || __EMX__ */
-
-    if (num_files <= 0)
-      return (0);
-
-    for (i = 0, num_dirs = 0; i < num_files; i ++) {
-      if (strcmp(files[i]->d_name, "./")) {
-	snprintf(filename, sizeof(filename), "%s/%s", directory_,
-	         files[i]->d_name);
-
-        icon = Fl_File_Icon::find(filename);
-	if ((icon && icon->type() == Fl_File_Icon::DIRECTORY) ||
-	     _fl_filename_isdir_quick(filename)) {
-          num_dirs ++;
-          insert(num_dirs, files[i]->d_name, icon);
-	} else if (filetype_ == FILES &&
-	           fl_filename_match(files[i]->d_name, pattern_)) {
-          add(files[i]->d_name, icon);
-	}
-      }
-
-      free(files[i]);
-    }
-
-    free(files);
-  }
-
-  return (num_files);
-}
-
-
-//
-// 'Fl_File_Browser::filter()' - Set the filename filter.
-//
-
-void
-Fl_File_Browser::filter(const char *pattern)	// I - Pattern string
-{
-  // If pattern is NULL set the pattern to "*"...
-  if (pattern)
-    pattern_ = pattern;
-  else
-    pattern_ = "*";
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Chooser.cxx
+++ /dev/null
@@ -1,479 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// =======================================================================
-//  DO NOT EDIT FL/Fl_File_Chooser.H and src/Fl_File_Chooser.cxx !!!
-// =======================================================================
-//  Please use fluid to change src/Fl_File_Chooser.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// =======================================================================
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "../FL/Fl_File_Chooser.H"
-#include <FL/fl_draw.H>
-
-void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) {
-  fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();
-}
-void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) {
-  ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v);
-}
-
-void Fl_File_Chooser::cb_showChoice_i(Fl_Choice*, void*) {
-  showChoiceCB();
-}
-void Fl_File_Chooser::cb_showChoice(Fl_Choice* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_showChoice_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favoritesButton_i(Fl_Menu_Button*, void*) {
-  favoritesButtonCB();
-}
-void Fl_File_Chooser::cb_favoritesButton(Fl_Menu_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favoritesButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_newButton_i(Fl_Button*, void*) {
-  newdir();
-}
-void Fl_File_Chooser::cb_newButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_newButton_i(o,v);
-}
-
-#include <FL/Fl_Bitmap.H>
-static const unsigned char idata_new[] =
-{0,0,120,0,132,0,2,1,1,254,1,128,49,128,49,128,253,128,253,128,49,128,49,
-128,1,128,1,128,255,255,0,0};
-static Fl_Image *image_new() {
-  static Fl_Image *image = new Fl_Bitmap(idata_new, 16, 16);
-  return image;
-}
-
-void Fl_File_Chooser::cb__i(Fl_Tile*, void*) {
-  update_preview();
-}
-void Fl_File_Chooser::cb_(Fl_Tile* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->user_data()))->cb__i(o,v);
-}
-
-void Fl_File_Chooser::cb_fileList_i(Fl_File_Browser*, void*) {
-  fileListCB();
-}
-void Fl_File_Chooser::cb_fileList(Fl_File_Browser* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileList_i(o,v);
-}
-
-void Fl_File_Chooser::cb_previewButton_i(Fl_Check_Button*, void*) {
-  preview(previewButton->value());
-}
-void Fl_File_Chooser::cb_previewButton(Fl_Check_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_previewButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_showHiddenButton_i(Fl_Check_Button*, void*) {
-  showHidden(showHiddenButton->value());
-}
-void Fl_File_Chooser::cb_showHiddenButton(Fl_Check_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_showHiddenButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_fileName_i(Fl_File_Input*, void*) {
-  fileNameCB();
-}
-void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_fileName_i(o,v);
-}
-
-void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) {
-  window->hide();
-
-// Do any callback that is registered...
-if (callback_)
-  (*callback_)(this, data_);
-}
-void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_okButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) {
-  fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();
-}
-void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favList_i(Fl_File_Browser*, void*) {
-  favoritesCB(favList);
-}
-void Fl_File_Chooser::cb_favList(Fl_File_Browser* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->user_data()))->cb_favList_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favUpButton_i(Fl_Button*, void*) {
-  favoritesCB(favUpButton);
-}
-void Fl_File_Chooser::cb_favUpButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favUpButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favDeleteButton_i(Fl_Button*, void*) {
-  favoritesCB(favDeleteButton);
-}
-void Fl_File_Chooser::cb_favDeleteButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDeleteButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favDownButton_i(Fl_Button*, void*) {
-  favoritesCB(favDownButton);
-}
-void Fl_File_Chooser::cb_favDownButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favDownButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favCancelButton_i(Fl_Button*, void*) {
-  favWindow->hide();
-}
-void Fl_File_Chooser::cb_favCancelButton(Fl_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favCancelButton_i(o,v);
-}
-
-void Fl_File_Chooser::cb_favOkButton_i(Fl_Return_Button*, void*) {
-  favoritesCB(favOkButton);
-}
-void Fl_File_Chooser::cb_favOkButton(Fl_Return_Button* o, void* v) {
-  ((Fl_File_Chooser*)(o->parent()->parent()->user_data()))->cb_favOkButton_i(o,v);
-}
-
-Fl_File_Chooser::Fl_File_Chooser(const char *d, const char *p, int t, const char *title) {
-  if (!prefs_) {
-    prefs_ = new Fl_Preferences(Fl_Preferences::USER, "fltk.org", "filechooser");
-  }
-  Fl_Group *prev_current = Fl_Group::current();
-  { window = new Fl_Double_Window(490, 380, "Choose File");
-    window->callback((Fl_Callback*)cb_window, (void*)(this));
-    { Fl_Group* o = new Fl_Group(10, 10, 470, 25);
-      { showChoice = new Fl_Choice(65, 10, 215, 25, "Show:");
-        showChoice->down_box(FL_BORDER_BOX);
-        showChoice->labelfont(1);
-        showChoice->callback((Fl_Callback*)cb_showChoice);
-        Fl_Group::current()->resizable(showChoice);
-        showChoice->label(show_label);
-      } // Fl_Choice* showChoice
-      { favoritesButton = new Fl_Menu_Button(290, 10, 155, 25, "Favorites");
-        favoritesButton->down_box(FL_BORDER_BOX);
-        favoritesButton->callback((Fl_Callback*)cb_favoritesButton);
-        favoritesButton->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
-        favoritesButton->label(favorites_label);
-      } // Fl_Menu_Button* favoritesButton
-      { Fl_Button* o = newButton = new Fl_Button(455, 10, 25, 25);
-        newButton->image( image_new() );
-        newButton->labelsize(8);
-        newButton->callback((Fl_Callback*)cb_newButton);
-        o->tooltip(new_directory_tooltip);
-      } // Fl_Button* newButton
-      o->end();
-    } // Fl_Group* o
-    { Fl_Tile* o = new Fl_Tile(10, 45, 470, 225);
-      o->callback((Fl_Callback*)cb_);
-      { fileList = new Fl_File_Browser(10, 45, 295, 225);
-        fileList->type(2);
-        fileList->callback((Fl_Callback*)cb_fileList);
-        fileList->window()->hotspot(fileList);
-      } // Fl_File_Browser* fileList
-      { previewBox = new Fl_Box(305, 45, 175, 225, "?");
-        previewBox->box(FL_DOWN_BOX);
-        previewBox->labelsize(100);
-        previewBox->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE));
-      } // Fl_Box* previewBox
-      o->end();
-      Fl_Group::current()->resizable(o);
-    } // Fl_Tile* o
-    { Fl_Group* o = new Fl_Group(10, 275, 470, 95);
-      { Fl_Group* o = new Fl_Group(10, 275, 470, 20);
-        { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview");
-          previewButton->shortcut(0x80070);
-          previewButton->down_box(FL_DOWN_BOX);
-          previewButton->value(1);
-          previewButton->callback((Fl_Callback*)cb_previewButton);
-          previewButton->label(preview_label);
-        } // Fl_Check_Button* previewButton
-        { showHiddenButton = new Fl_Check_Button(115, 275, 165, 20, "Show hidden files");
-          showHiddenButton->down_box(FL_DOWN_BOX);
-          showHiddenButton->callback((Fl_Callback*)cb_showHiddenButton);
-          showHiddenButton->label(hidden_label);
-        } // Fl_Check_Button* showHiddenButton
-        { Fl_Box* o = new Fl_Box(115, 275, 365, 20);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-      } // Fl_Group* o
-      { fileName = new Fl_File_Input(115, 300, 365, 35);
-        fileName->labelfont(1);
-        fileName->callback((Fl_Callback*)cb_fileName);
-        fileName->when(FL_WHEN_ENTER_KEY);
-        Fl_Group::current()->resizable(fileName);
-        fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);
-      } // Fl_File_Input* fileName
-      { Fl_Box* o = new Fl_Box(10, 310, 105, 25, "Filename:");
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_RIGHT|FL_ALIGN_INSIDE));
-        o->label(filename_label);
-      } // Fl_Box* o
-      { Fl_Group* o = new Fl_Group(10, 345, 470, 25);
-        { okButton = new Fl_Return_Button(313, 345, 85, 25, "OK");
-          okButton->callback((Fl_Callback*)cb_okButton);
-          okButton->label(fl_ok);
-        } // Fl_Return_Button* okButton
-        { Fl_Button* o = cancelButton = new Fl_Button(408, 345, 72, 25, "Cancel");
-          cancelButton->callback((Fl_Callback*)cb_cancelButton);
-          o->label(fl_cancel);
-        } // Fl_Button* cancelButton
-        { Fl_Box* o = new Fl_Box(10, 345, 30, 25);
-          Fl_Group::current()->resizable(o);
-        } // Fl_Box* o
-        o->end();
-      } // Fl_Group* o
-      o->end();
-    } // Fl_Group* o
-    if (title) window->label(title);
-    window->set_modal();
-    window->end();
-  } // Fl_Double_Window* window
-  { favWindow = new Fl_Double_Window(355, 150, "Manage Favorites");
-    favWindow->user_data((void*)(this));
-    { favList = new Fl_File_Browser(10, 10, 300, 95);
-      favList->type(2);
-      favList->callback((Fl_Callback*)cb_favList);
-      Fl_Group::current()->resizable(favList);
-    } // Fl_File_Browser* favList
-    { Fl_Group* o = new Fl_Group(320, 10, 25, 95);
-      { favUpButton = new Fl_Button(320, 10, 25, 25, "@8>");
-        favUpButton->callback((Fl_Callback*)cb_favUpButton);
-      } // Fl_Button* favUpButton
-      { favDeleteButton = new Fl_Button(320, 45, 25, 25, "X");
-        favDeleteButton->labelfont(1);
-        favDeleteButton->callback((Fl_Callback*)cb_favDeleteButton);
-        Fl_Group::current()->resizable(favDeleteButton);
-      } // Fl_Button* favDeleteButton
-      { favDownButton = new Fl_Button(320, 80, 25, 25, "@2>");
-        favDownButton->callback((Fl_Callback*)cb_favDownButton);
-      } // Fl_Button* favDownButton
-      o->end();
-    } // Fl_Group* o
-    { Fl_Group* o = new Fl_Group(10, 113, 335, 29);
-      { favCancelButton = new Fl_Button(273, 115, 72, 25, "Cancel");
-        favCancelButton->callback((Fl_Callback*)cb_favCancelButton);
-        favCancelButton->label(fl_cancel);
-      } // Fl_Button* favCancelButton
-      { favOkButton = new Fl_Return_Button(181, 115, 79, 25, "Save");
-        favOkButton->callback((Fl_Callback*)cb_favOkButton);
-        favOkButton->label(save_label);
-      } // Fl_Return_Button* favOkButton
-      { Fl_Box* o = new Fl_Box(10, 115, 161, 25);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    favWindow->label(manage_favorites_label);
-    favWindow->set_modal();
-    favWindow->size_range(181, 150);
-    favWindow->end();
-  } // Fl_Double_Window* favWindow
-  callback_ = 0;
-  data_ = 0;
-  directory_[0] = 0;
-  window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
-  type(t);
-  filter(p);
-  update_favorites();
-  value(d);
-  type(t);
-  int e;
-  prefs_->get("preview", e, 1);
-  preview(e);
-  Fl_Group::current(prev_current);
-  ext_group=(Fl_Widget*)0;
-}
-
-Fl_File_Chooser::~Fl_File_Chooser() {
-  Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-  if(ext_group)window->remove(ext_group);
-  delete window;
-  delete favWindow;
-}
-
-void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d ) {
-  callback_ = cb;
-  data_     = d;
-}
-
-void Fl_File_Chooser::color(Fl_Color c) {
-  fileList->color(c);
-}
-
-Fl_Color Fl_File_Chooser::color() {
-  return (fileList->color());
-}
-
-char * Fl_File_Chooser::directory() {
-  return directory_;
-}
-
-const char * Fl_File_Chooser::filter() {
-  return (fileList->filter());
-}
-
-int Fl_File_Chooser::filter_value() {
-  return showChoice->value();
-}
-
-void Fl_File_Chooser::filter_value(int f) {
-  showChoice->value(f);
-  showChoiceCB();
-}
-
-void Fl_File_Chooser::hide() {
-  window->hide();
-}
-
-void Fl_File_Chooser::iconsize(uchar s) {
-  fileList->iconsize(s);
-}
-
-uchar Fl_File_Chooser::iconsize() {
-  return (fileList->iconsize());
-}
-
-void Fl_File_Chooser::label(const char *l) {
-  window->label(l);
-}
-
-const char * Fl_File_Chooser::label() {
-  return (window->label());
-}
-
-void Fl_File_Chooser::ok_label(const char *l) {
-  if (l) okButton->label(l);
-  int w=0, h=0;
-  okButton->measure_label(w, h);
-  okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
-                   w + 40, 25);
-  okButton->parent()->init_sizes();
-}
-
-const char * Fl_File_Chooser::ok_label() {
-  return (okButton->label());
-}
-
-int Fl_File_Chooser::shown() {
-  return window->shown();
-}
-
-void Fl_File_Chooser::textcolor(Fl_Color c) {
-  fileList->textcolor(c);
-}
-
-Fl_Color Fl_File_Chooser::textcolor() {
-  return (fileList->textcolor());
-}
-
-void Fl_File_Chooser::textfont(Fl_Font f) {
-  fileList->textfont(f);
-}
-
-Fl_Font Fl_File_Chooser::textfont() {
-  return (fileList->textfont());
-}
-
-void Fl_File_Chooser::textsize(Fl_Fontsize s) {
-  fileList->textsize(s);
-}
-
-Fl_Fontsize Fl_File_Chooser::textsize() {
-  return (fileList->textsize());
-}
-
-void Fl_File_Chooser::type(int t) {
-  type_ = t;
-  if (t & MULTI)
-    fileList->type(FL_MULTI_BROWSER);
-  else
-    fileList->type(FL_HOLD_BROWSER);
-  if (t & CREATE)
-    newButton->activate();
-  else
-    newButton->deactivate();
-  if (t & DIRECTORY)
-    fileList->filetype(Fl_File_Browser::DIRECTORIES);
-  else
-    fileList->filetype(Fl_File_Browser::FILES);
-}
-
-int Fl_File_Chooser::type() {
-  return (type_);
-}
-
-void * Fl_File_Chooser::user_data() const {
-  return (data_);
-}
-
-void Fl_File_Chooser::user_data(void *d) {
-  data_ = d;
-}
-
-int Fl_File_Chooser::visible() {
-  return window->visible();
-}
-
-Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget* gr) {
-  Fl_Widget* ret=ext_group;
-  if (gr==ext_group) {
-    return ret;
-  }
-  if (ext_group) {
-    int sh=ext_group->h()+4;
-    Fl_Widget* svres=window->resizable();
-    window->resizable(NULL);
-    window->size(window->w(),window->h()-sh);
-    window->remove(ext_group);
-    ext_group=NULL;
-    window->resizable(svres);
-  }
-  if (gr) {
-    int nh=window->h()+gr->h()+4;
-    Fl_Widget* svres=window->resizable();
-    window->resizable(NULL);
-    window->size(window->w(),nh);
-    gr->position(2,okButton->y()+okButton->h()+2);
-    window->add(gr);
-    ext_group=gr;
-    window->resizable(svres);
-  }
-  return ret;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Chooser.fl
+++ /dev/null
@@ -1,498 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {../FL/Fl_File_Chooser.H}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// =======================================================================
-//  DO NOT EDIT FL/Fl_File_Chooser.H and src/Fl_File_Chooser.cxx !!!
-// =======================================================================
-//  Please use fluid to change src/Fl_File_Chooser.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// =======================================================================
-//
-} {in_source in_header
-}
-
-decl {\#include <FL/fl_draw.H>} {private local
-}
-
-class FL_EXPORT Fl_File_Chooser {open
-} {
-  decl {enum { SINGLE = 0, MULTI = 1, CREATE = 2, DIRECTORY = 4 };} {public local
-  }
-  decl {static Fl_Preferences *prefs_;} {private local
-  }
-  decl {void (*callback_)(Fl_File_Chooser*, void *);} {private local
-  }
-  decl {void *data_;} {private local
-  }
-  decl {char directory_[FL_PATH_MAX];} {private local
-  }
-  decl {char pattern_[FL_PATH_MAX];} {private local
-  }
-  decl {char preview_text_[2048];} {private local
-  }
-  decl {int type_;} {private local
-  }
-  decl {void favoritesButtonCB();} {private local
-  }
-  decl {void favoritesCB(Fl_Widget *w);} {private local
-  }
-  decl {void fileListCB();} {private local
-  }
-  decl {void fileNameCB();} {private local
-  }
-  decl {void newdir();} {private local
-  }
-  decl {static void previewCB(Fl_File_Chooser *fc);} {private local
-  }
-  decl {void showChoiceCB();} {private local
-  }
-  decl {void update_favorites();} {private local
-  }
-  decl {void update_preview();} {private local
-  }
-  Function {Fl_File_Chooser(const char *d, const char *p, int t, const char *title)} {} {
-    code {if (!prefs_) {
-  prefs_ = new Fl_Preferences(Fl_Preferences::USER, "fltk.org", "filechooser");
-}} {}
-    code {Fl_Group *prev_current = Fl_Group::current();} {}
-    Fl_Window window {
-      label {Choose File}
-      callback {fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();} open
-      private xywh {507 327 490 380} type Double hide resizable
-      code0 {if (title) window->label(title);}
-      code1 {\#include <stdio.h>}
-      code2 {\#include <stdlib.h>}
-      code3 {\#include <string.h>} modal
-    } {
-      Fl_Group {} {open
-        private xywh {10 10 470 25}
-      } {
-        Fl_Choice showChoice {
-          label {Show:}
-          callback {showChoiceCB();} open
-          private xywh {65 10 215 25} down_box BORDER_BOX labelfont 1 resizable
-          code0 {showChoice->label(show_label);}
-        } {}
-        Fl_Menu_Button favoritesButton {
-          label Favorites
-          callback {favoritesButtonCB();} open
-          private xywh {290 10 155 25} down_box BORDER_BOX align 20
-          code0 {favoritesButton->label(favorites_label);}
-        } {}
-        Fl_Button newButton {
-          callback {newdir();}
-          image {new.xbm} xywh {455 10 25 25} labelsize 8
-          code0 {\#include <FL/Fl_Preferences.H>}
-          code1 {o->tooltip(new_directory_tooltip);}
-        }
-      }
-      Fl_Tile {} {
-        callback {update_preview();}
-        private xywh {10 45 470 225} resizable
-      } {
-        Fl_File_Browser fileList {
-          callback {fileListCB();}
-          private xywh {10 45 295 225} type Hold hotspot
-          code0 {\#include <FL/Fl_File_Browser.H>}
-        }
-        Fl_Box previewBox {
-          label {?}
-          private xywh {305 45 175 225} box DOWN_BOX labelsize 100 align 80
-        }
-      }
-      Fl_Group {} {open
-        private xywh {10 275 470 95}
-      } {
-        Fl_Group {} {open
-          private xywh {10 275 470 20}
-        } {
-          Fl_Check_Button previewButton {
-            label Preview
-            callback {preview(previewButton->value());}
-            xywh {10 275 73 20} down_box DOWN_BOX shortcut 0x80070 value 1
-            code0 {previewButton->label(preview_label);}
-          }
-          Fl_Check_Button showHiddenButton {
-            label {Show hidden files}
-            callback {showHidden(showHiddenButton->value());}
-            xywh {115 275 165 20} down_box DOWN_BOX
-            code0 {showHiddenButton->label(hidden_label);}
-          }
-          Fl_Box {} {
-            private xywh {115 275 365 20} resizable
-          }
-        }
-        Fl_File_Input fileName {
-          callback {fileNameCB();}
-          private xywh {115 300 365 35} labelfont 1 when 8 resizable
-          code0 {fileName->when(FL_WHEN_CHANGED | FL_WHEN_ENTER_KEY_ALWAYS);}
-        }
-        Fl_Box {} {
-          label {Filename:}
-          private xywh {10 310 105 25} labelfont 1 align 24
-          code0 {o->label(filename_label);}
-        }
-        Fl_Group {} {open
-          private xywh {10 345 470 25}
-        } {
-          Fl_Return_Button okButton {
-            label OK
-            callback {window->hide();
-
-// Do any callback that is registered...
-if (callback_)
-  (*callback_)(this, data_);}
-            private xywh {313 345 85 25}
-            code0 {\#include <FL/fl_ask.H>}
-            code1 {okButton->label(fl_ok);}
-          }
-          Fl_Button cancelButton {
-            label Cancel
-            callback {fileName->value("");
-fileList->deselect();
-Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-window->hide();}
-            private xywh {408 345 72 25}
-            code0 {o->label(fl_cancel);}
-          }
-          Fl_Box {} {
-            private xywh {10 345 30 25} resizable
-          }
-        }
-      }
-    }
-    Fl_Window favWindow {
-      label {Manage Favorites}
-      private xywh {413 100 355 150} type Double hide resizable
-      code0 {favWindow->label(manage_favorites_label);} modal size_range {181 150 0 0}
-    } {
-      Fl_File_Browser favList {
-        callback {favoritesCB(favList);}
-        private xywh {10 10 300 95} type Hold resizable
-      }
-      Fl_Group {} {open
-        xywh {320 10 25 95}
-      } {
-        Fl_Button favUpButton {
-          label {@8>}
-          callback {favoritesCB(favUpButton);}
-          private xywh {320 10 25 25}
-        }
-        Fl_Button favDeleteButton {
-          label X
-          callback {favoritesCB(favDeleteButton);}
-          private xywh {320 45 25 25} labelfont 1 resizable
-        }
-        Fl_Button favDownButton {
-          label {@2>}
-          callback {favoritesCB(favDownButton);}
-          private xywh {320 80 25 25}
-        }
-      }
-      Fl_Group {} {open
-        xywh {10 113 335 29}
-      } {
-        Fl_Button favCancelButton {
-          label Cancel
-          callback {favWindow->hide();}
-          private xywh {273 115 72 25}
-          code0 {favCancelButton->label(fl_cancel);}
-        }
-        Fl_Return_Button favOkButton {
-          label Save
-          callback {favoritesCB(favOkButton);}
-          private xywh {181 115 79 25}
-          code0 {\#include <FL/fl_ask.H>}
-          code1 {favOkButton->label(save_label);}
-        }
-        Fl_Box {} {
-          xywh {10 115 161 25} resizable
-        }
-      }
-    }
-    code {callback_ = 0;
-data_ = 0;
-directory_[0] = 0;
-window->size_range(window->w(), window->h(), Fl::w(), Fl::h());
-type(t);
-filter(p);
-update_favorites();
-value(d);
-type(t);
-int e;
-prefs_->get("preview", e, 1);
-preview(e);
-Fl_Group::current(prev_current);} {}
-    code {ext_group=(Fl_Widget*)0;} {}
-  }
-  Function {~Fl_File_Chooser()} {open
-  } {
-    code {Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-if(ext_group)window->remove(ext_group);
-delete window;
-delete favWindow;} {}
-  }
-  Function {callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0)} {return_type void
-  } {
-    code {callback_ = cb;
-data_     = d;} {}
-  }
-  Function {color(Fl_Color c)} {} {
-    code {fileList->color(c);} {}
-  }
-  Function {color()} {return_type Fl_Color
-  } {
-    code {return (fileList->color());} {}
-  }
-  decl {int count();} {public local
-  }
-  decl {void directory(const char *d);} {public local
-  }
-  Function {directory()} {return_type {char *}
-  } {
-    code {return directory_;} {}
-  }
-  decl {void filter(const char *p);} {public local
-  }
-  Function {filter()} {return_type {const char *}
-  } {
-    code {return (fileList->filter());} {}
-  }
-  Function {filter_value()} {return_type int
-  } {
-    code {return showChoice->value();} {}
-  }
-  Function {filter_value(int f)} {return_type void
-  } {
-    code {showChoice->value(f);
-showChoiceCB();} {}
-  }
-  Function {hide()} {return_type void
-  } {
-    code {window->hide();} {}
-  }
-  Function {iconsize(uchar s)} {return_type void
-  } {
-    code {fileList->iconsize(s);} {}
-  }
-  Function {iconsize()} {return_type uchar
-  } {
-    code {return (fileList->iconsize());} {}
-  }
-  Function {label(const char *l)} {return_type void
-  } {
-    code {window->label(l);} {}
-  }
-  Function {label()} {return_type {const char *}
-  } {
-    code {return (window->label());} {}
-  }
-  Function {ok_label(const char *l)} {return_type void
-  } {
-    code {if (l) okButton->label(l);
-int w=0, h=0;
-okButton->measure_label(w, h);
-okButton->resize(cancelButton->x() - 50 - w, cancelButton->y(),
-                 w + 40, 25);
-okButton->parent()->init_sizes();} {}
-  }
-  Function {ok_label()} {return_type {const char *}
-  } {
-    code {return (okButton->label());} {}
-  }
-  decl {void preview(int e);} {public local
-  }
-  decl {int preview() const { return previewButton->value(); }} {public local
-  }
-  decl {void showHidden(int e);} {private local
-  }
-  decl {void remove_hidden_files();} {private local
-  }
-  decl {void rescan();} {public local
-  }
-  decl {void rescan_keep_filename();} {public local
-  }
-  decl {void show();} {public local
-  }
-  Function {shown()} {return_type int
-  } {
-    code {return window->shown();} {}
-  }
-  Function {textcolor(Fl_Color c)} {return_type void
-  } {
-    code {fileList->textcolor(c);} {}
-  }
-  Function {textcolor()} {return_type Fl_Color
-  } {
-    code {return (fileList->textcolor());} {}
-  }
-  Function {textfont(Fl_Font f)} {return_type void
-  } {
-    code {fileList->textfont(f);} {}
-  }
-  Function {textfont()} {selected return_type Fl_Font
-  } {
-    code {return (fileList->textfont());} {}
-  }
-  Function {textsize(Fl_Fontsize s)} {return_type void
-  } {
-    code {fileList->textsize(s);} {}
-  }
-  Function {textsize()} {return_type Fl_Fontsize
-  } {
-    code {return (fileList->textsize());} {}
-  }
-  Function {type(int t)} {return_type void
-  } {
-    code {type_ = t;
-if (t & MULTI)
-  fileList->type(FL_MULTI_BROWSER);
-else
-  fileList->type(FL_HOLD_BROWSER);
-if (t & CREATE)
-  newButton->activate();
-else
-  newButton->deactivate();
-if (t & DIRECTORY)
-  fileList->filetype(Fl_File_Browser::DIRECTORIES);
-else
-  fileList->filetype(Fl_File_Browser::FILES);} {}
-  }
-  Function {type()} {return_type int
-  } {
-    code {return (type_);} {}
-  }
-  Function {user_data() const} {return_type {void *}
-  } {
-    code {return (data_);} {}
-  }
-  Function {user_data(void *d)} {return_type void
-  } {
-    code {data_ = d;} {}
-  }
-  decl {const char *value(int f = 1);} {public local
-  }
-  decl {void value(const char *filename);} {public local
-  }
-  Function {visible()} {return_type int
-  } {
-    code {return window->visible();} {}
-  }
-  decl {static const char *add_favorites_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *all_files_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *custom_filter_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *existing_file_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *favorites_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *filename_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *filesystems_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *manage_favorites_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *new_directory_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *new_directory_tooltip;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *preview_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *save_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *show_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static const char *hidden_label;} {
-    comment {[standard text may be customized at run-time]} public local
-  }
-  decl {static Fl_File_Sort_F *sort;} {
-    comment {the sort function that is used when loading
-the contents of a directory.} public local
-  }
-  decl {Fl_Widget* ext_group;} {private local
-  }
-  Function {add_extra(Fl_Widget* gr)} {open return_type {Fl_Widget*}
-  } {
-    code {Fl_Widget* ret=ext_group;} {}
-    codeblock {if (gr==ext_group)} {open
-    } {
-      code {return ret;} {}
-    }
-    codeblock {if (ext_group)} {open
-    } {
-      code {int sh=ext_group->h()+4;
-Fl_Widget* svres=window->resizable();
-window->resizable(NULL);
-window->size(window->w(),window->h()-sh);
-window->remove(ext_group);
-ext_group=NULL;
-window->resizable(svres);} {}
-    }
-    codeblock {if (gr)} {open
-    } {
-      code {int nh=window->h()+gr->h()+4;
-Fl_Widget* svres=window->resizable();
-window->resizable(NULL);
-window->size(window->w(),nh);
-gr->position(2,okButton->y()+okButton->h()+2);
-window->add(gr);
-ext_group=gr;
-window->resizable(svres);} {}
-    }
-    code {return ret;} {}
-  }
-}
-
-decl {FL_EXPORT char *fl_dir_chooser(const char *message,const char *fname,int relative=0);} {public local
-}
-
-decl {FL_EXPORT char *fl_file_chooser(const char *message,const char *pat,const char *fname,int relative=0);} {public local
-}
-
-decl {FL_EXPORT void fl_file_chooser_callback(void (*cb)(const char*));} {public local
-}
-
-decl {FL_EXPORT void fl_file_chooser_ok_label(const char*l);} {public local
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/src/Fl_File_Chooser2.cxx
+++ /dev/null
@@ -1,1734 +1,0 @@
-//
-// "$Id$"
-//
-// More Fl_File_Chooser routines.
-//
-// Copyright 1999-2011 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// fabien: ATTENTION: Only Out Of Source Gen. because cxx/H files are autogenerated by fluid.
-/** \defgroup group_comdlg Common Dialogs classes and functions
-    @{
-*/
-/** \class Fl_File_Chooser
-  The Fl_File_Chooser widget displays a standard file selection
-  dialog that supports various selection modes.
-  
-  \image html Fl_File_Chooser.jpg 
-  \image latex  Fl_File_Chooser.jpg "Fl_File_Chooser" width=12cm
- 
- The Fl_File_Chooser widget transmits UTF-8 encoded filenames to its user. It is
- recommended to open files that may have non-ASCII names with the fl_fopen() or
- fl_open() utility functions that handle these names in a cross-platform way 
- (whereas the standard fopen()/open() functions fail on the MSWindows platform 
- to open files with a non-ASCII name).
- 
-  The Fl_File_Chooser class also exports several static values
-  that may be used to localize or customize the appearance of all file chooser
-  dialogs:
-  
-  <CENTER><TABLE BORDER="1">
-  <TR>
-  	<TH>Member</TH>
-  	<TH>Default value</TH>
-  </TR>
-  <TR>
-  	<TD>add_favorites_label</TD>
-  	<TD>"Add to Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>all_files_label</TD>
-  	<TD>"All Files (*)"</TD>
-  </TR>
-  <TR>
-  	<TD>custom_filter_label</TD>
-  	<TD>"Custom Filter"</TD>
-  </TR>
-  <TR>
-  	<TD>existing_file_label</TD>
-  	<TD>"Please choose an existing file!"</TD>
-  </TR>
-  <TR>
-  	<TD>favorites_label</TD>
-  	<TD>"Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>filename_label</TD>
-  	<TD>"Filename:"</TD>
-  </TR>
-  <TR>
-  	<TD>filesystems_label</TD>
-  	<TD>"My Computer" (WIN32)<BR>
-  	"File Systems" (all others)</TD>
-  </TR>
- <TR>
-	<TD>hidden_label</TD>
-	<TD>"Show hidden files:"</TD>
- </TR>
- <TR>
-  	<TD>manage_favorites_label</TD>
-  	<TD>"Manage Favorites"</TD>
-  </TR>
-  <TR>
-  	<TD>new_directory_label</TD>
-  	<TD>"New Directory?"</TD>
-  </TR>
-  <TR>
-  	<TD>new_directory_tooltip</TD>
-  	<TD>"Create a new directory."</TD>
-  </TR>
-  <TR>
-  	<TD>preview_label</TD>
-  	<TD>"Preview"</TD>
-  </TR>
-  <TR>
-  	<TD>save_label</TD>
-  	<TD>"Save"</TD>
-  </TR>
-  <TR>
-  	<TD>show_label</TD>
-  	<TD>"Show:"</TD>
-  </TR>
- <TR>
-  	<TD>sort</TD>
-  	<TD>fl_numericsort</TD>
-  </TR>
-  </TABLE></CENTER>
-
-  The Fl_File_Chooser::sort member specifies the sort function that is
-  used when loading the contents of a directory and can be customized
-  at run-time.
-
-  The Fl_File_Chooser class also exports the Fl_File_Chooser::newButton
-  and Fl_File_Chooser::previewButton widgets so that application developers
-  can control their appearance and use.  For more complex customization,
-  consider copying the FLTK file chooser code and changing it accordingly.
-*/
-/** @} */
-
-/** \fn Fl_File_Chooser::Fl_File_Chooser(const char *pathname, const char *pattern, int type, const char *title)
-  The constructor creates the Fl_File_Chooser dialog shown.
-  The pathname argument can be a directory name or a
-  complete file name (in which case the corresponding file is highlighted
-  in the list and in the filename input field.)
-  
-  The pattern argument can be a NULL
-  string or "*" to list all files, or it can be a
-  series of descriptions and filter strings separated by tab
-  characters (\\t). The format of filters is either
-  "Description text (patterns)" or just "patterns". A file chooser
-  that provides filters for HTML and image files might look like:
-  
-  \code
-  "HTML Files (*.html)\tImage Files (*.{bmp,gif,jpg,png})"
-  \endcode
-  
-  The file chooser will automatically add the "All Files (*)"
-  pattern to the end of the string you pass if you do not provide
-  one. The first filter in the string is the default filter.
-  
-  See the FLTK documentation on fl_filename_match()
-  for the kinds of pattern strings that are supported.
-  
-  The type argument can be one of the following:
-  
-  \li \c SINGLE - allows the user to select a single, existing file.
-  \li \c MULTI - allows the user to select one or more existing files.
-  \li \c CREATE - allows the user to select a single, existing file or
-         specify a new filename.
-  \li \c DIRECTORY - allows the user to select a single, existing directory.
-  
-  The title argument is used to set the title bar text for the
-  Fl_File_Chooser window.
-*/
-
-/** \var Fl_File_Chooser::newButton
-  The "new directory" button is exported so that application developers
-  can control the appearance and use.
-*/
-
-/** \var Fl_File_Chooser::previewButton
-  The "preview" button is exported so that application developers can
-  control the appearance and use.
-*/
-
-/** \var Fl_File_Chooser::showHiddenButton
- When checked, hidden files (i.e., filename begins with dot) are displayed.
- 
- The "showHiddenButton" button is exported so that application developers can
- control its appearance.
- */
-
-/** \fn Fl_File_Chooser::~Fl_File_Chooser()
-  Destroys the widget and frees all memory used by it.*/
-
-/** \fn void Fl_File_Chooser::color(Fl_Color c)
-  Sets the background color of the Fl_File_Browser list.*/
-
-/** \fn Fl_Color Fl_File_Chooser::color()
-  Gets the background color of the Fl_File_Browser list.*/
-
-/** \fn int Fl_File_Chooser::count()
-  Returns the number of selected files.*/
-
-/** \fn void Fl_File_Chooser::directory(const char *pathname)
-  Sets the current directory.*/
-
-/** \fn const char *Fl_File_Chooser::directory()
-  Gets the current directory.*/
-
-/** \fn void Fl_File_Chooser::filter(const char *pattern)
-  Sets or gets the current filename filter patterns. The filter
-  patterns use fl_filename_match().
-  Multiple patterns can be used by separating them with tabs, like
-  <tt>"*.jpg\t*.png\t*.gif\t*"</tt>. In addition, you can provide
-  human-readable labels with the patterns inside parenthesis, like
-  <tt>"JPEG Files (*.jpg)\tPNG Files (*.png)\tGIF Files (*.gif)\tAll Files (*)"
-  </tt>.
-
-  Use filter(NULL) to show all files.
-*/
-
-/** \fn const char *Fl_File_Chooser::filter()
-  See void filter(const char *pattern)*/
-
-/** \fn void Fl_File_Chooser::filter_value(int f)
-  Sets the current filename filter selection.*/
-
-/** \fn int Fl_File_Chooser::filter_value()
-  Gets the current filename filter selection.*/
-
-/** \fn void Fl_File_Chooser::hide()
-  Hides the Fl_File_Chooser window.*/
-
-/** \fn void Fl_File_Chooser::iconsize(uchar s)
-  Sets the size of the icons in the Fl_File_Browser.  By
-  default the icon size is set to 1.5 times the textsize().
-*/
-
-/** \fn uchar Fl_File_Chooser::iconsize()
-  Gets the size of the icons in the Fl_File_Browser.  By
-  default the icon size is set to 1.5 times the textsize().
-*/
-
-/** \fn void Fl_File_Chooser::label(const char *l)
-  Sets the title bar text for the Fl_File_Chooser.*/
-
-/** \fn const char *Fl_File_Chooser::label()
-  Gets the title bar text for the Fl_File_Chooser.*/
-
-/** \fn void Fl_File_Chooser::ok_label(const char *l)
-  Sets the label for the "ok" button in the Fl_File_Chooser.
-*/
-
-/** \fn const char *Fl_File_Chooser::ok_label()
-  Gets the label for the "ok" button in the Fl_File_Chooser.
-*/
-
-/** \fn int Fl_File_Chooser::preview() const
-   Returns the current state of the preview box. */
-
-/** \fn void Fl_File_Chooser::rescan()
-  Reloads the current directory in the Fl_File_Browser.*/
-
-/** \fn void Fl_File_Chooser::show()
-  Shows the Fl_File_Chooser window.*/
-
-/** \fn void Fl_File_Chooser::textcolor(Fl_Color c)
-  Sets the current Fl_File_Browser text color.*/
-
-/** \fn Fl_Color Fl_File_Chooser::textcolor()
-  Gets the current Fl_File_Browser text color.*/
-
-/** \fn void Fl_File_Chooser::textfont(Fl_Font f)
-  Sets the current Fl_File_Browser text font.*/
-
-/** \fn Fl_Font Fl_File_Chooser::textfont()
-  Gets the current Fl_File_Browser text font.*/
-
-/** \fn void Fl_File_Chooser::textsize(Fl_Fontsize s)
-  Sets the current Fl_File_Browser text size.*/
-
-/** \fn Fl_Fontsize Fl_File_Chooser::textsize()
-  Gets the current Fl_File_Browser text size.*/
-
-/** \fn void Fl_File_Chooser::type(int t)
-  Sets the current type of Fl_File_Chooser.*/
-
-/** \fn int Fl_File_Chooser::type()
-  Gets the current type of Fl_File_Chooser.*/
-
-/** \fn void Fl_File_Chooser::value(const char *pathname)
-  Sets the current value of the selected file.
-*/
-
-/** \fn const char *Fl_File_Chooser::value(int f)
- Gets the current value of the selected file(s).
- \p f is a \c 1-based index into a list of
- file names. The number of selected files is returned by
- Fl_File_Chooser::count().
- 
- This sample code loops through all selected files:
- \code
- // Get list of filenames user selected from a MULTI chooser
- for ( int t=1; t<=chooser->count(); t++ ) {
- const char *filename = chooser->value(t);
- ...
- }
- \endcode
- */
-
-/** \fn int Fl_File_Chooser::visible()
-  Returns 1 if the Fl_File_Chooser window is visible.*/
-
-/** \fn Fl_Widget* Fl_File_Chooser::add_extra(Fl_Widget*)
-  Adds extra widget at the bottom of Fl_File_Chooser window.
-  Returns pointer for previous extra widget or NULL if not set previously.
-  If argument is NULL only remove previous extra widget.
-
-  \note Fl_File_Chooser does \b not delete extra widget in destructor!
-     To prevent memory leakage, don't forget to delete unused extra widgets
-*/
-  /** \fn int Fl_File_Chooser::shown()
-    Returns non-zero if the file chooser main window show() has been called (but not hide()
-    see Fl_Window::shown()
-  */
-
-  /** \fn void Fl_File_Chooser::callback(void (*cb)(Fl_File_Chooser *, void *), void *d = 0)
-    Sets the file chooser callback cb and associated data d */
-
-  /** \fn void Fl_File_Chooser::user_data(void *d)
-    Sets the file chooser user data d */
-
-  /** \fn void * Fl_File_Chooser::user_data() const
-    Gets the file chooser user data */
-// *** END OF OUT OF SOURCE DOC ***
-
-// Contents:
-//
-//   Fl_File_Chooser::count()             - Return the number of selected files.
-//   Fl_File_Chooser::directory()         - Set the directory in the file chooser.
-//   Fl_File_Chooser::filter()            - Set the filter(s) for the chooser.
-//   Fl_File_Chooser::newdir()            - Make a new directory.
-//   Fl_File_Chooser::value()             - Return a selected filename.
-//   Fl_File_Chooser::rescan()            - Rescan the current directory.
-//   Fl_File_Chooser::favoritesButtonCB() - Handle favorites selections.
-//   Fl_File_Chooser::fileListCB()        - Handle clicks (and double-clicks)
-//                                          in the Fl_File_Browser.
-//   Fl_File_Chooser::fileNameCB()        - Handle text entry in the FileBrowser.
-//   Fl_File_Chooser::showChoiceCB()      - Handle show selections.
-//   compare_dirnames()                   - Compare two directory names.
-//   quote_pathname()                     - Quote a pathname for a menu.
-//   unquote_pathname()                   - Unquote a pathname from a menu.
-//
-//   Fl_File_Chooser::add_extra()         - add extra widget at the bottom, return pointer 
-//                                          to previous extra widget or NULL if none,
-//                                          If argument is NULL extra widget removed.
-//                                          NOTE! file chooser does't delete extra widget in 
-//                                          destructor! To prevent memory leakage don't forget
-//					    delete unused extra widgets by yourself.
-//
-
-//
-// Include necessary headers.
-//
-
-#include <FL/Fl_File_Chooser.H>
-#include <FL/filename.H>
-#include <FL/fl_ask.H>
-#include <FL/x.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/fl_draw.H>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if defined(WIN32) && ! defined (__CYGWIN__)
-#  include <direct.h>
-#  include <io.h>
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define access _access
-#  define mkdir _mkdir
-// Apparently Borland C++ defines DIRECTORY in <direct.h>, which
-// interfers with the Fl_File_Icon enumeration of the same name.
-#  ifdef DIRECTORY
-#    undef DIRECTORY
-#  endif // DIRECTORY
-#else
-#  include <unistd.h>
-#  include <pwd.h>
-#endif /* WIN32 */
-
-
-//
-// File chooser label strings and sort function...
-//
-
-Fl_Preferences*	Fl_File_Chooser::prefs_ = NULL;
-
-const char	*Fl_File_Chooser::add_favorites_label = "Add to Favorites";
-const char	*Fl_File_Chooser::all_files_label = "All Files (*)";
-const char	*Fl_File_Chooser::custom_filter_label = "Custom Filter";
-const char	*Fl_File_Chooser::existing_file_label = "Please choose an existing file!";
-const char	*Fl_File_Chooser::favorites_label = "Favorites";
-const char	*Fl_File_Chooser::filename_label = "Filename:";
-#ifdef WIN32
-const char	*Fl_File_Chooser::filesystems_label = "My Computer";
-#else
-const char	*Fl_File_Chooser::filesystems_label = "File Systems";
-#endif // WIN32
-const char	*Fl_File_Chooser::manage_favorites_label = "Manage Favorites";
-const char	*Fl_File_Chooser::new_directory_label = "New Directory?";
-const char	*Fl_File_Chooser::new_directory_tooltip = "Create a new directory.";
-const char	*Fl_File_Chooser::preview_label = "Preview";
-const char	*Fl_File_Chooser::save_label = "Save";
-const char	*Fl_File_Chooser::show_label = "Show:";
-const char      *Fl_File_Chooser::hidden_label = "Show hidden files";
-Fl_File_Sort_F	*Fl_File_Chooser::sort = fl_numericsort;
-
-
-//
-// Local functions...
-//
-
-static int	compare_dirnames(const char *a, const char *b);
-static void	quote_pathname(char *, const char *, int);
-static void	unquote_pathname(char *, const char *, int);
-
-// use platform dependent getenv() to get the home directory (STR #3166)
-static const char* get_homedir();
-
-//
-// 'Fl_File_Chooser::count()' - Return the number of selected files.
-//
-
-int				// O - Number of selected files
-Fl_File_Chooser::count() {
-  int		i;		// Looping var
-  int		fcount;		// Number of selected files
-  const char	*filename;	// Filename in input field or list
-
-
-  filename = fileName->value();
-
-  if (!(type_ & MULTI)) {
-    // Check to see if the file name input field is blank...
-    if (!filename || !filename[0]) return 0;
-    else return 1;
-  }
-
-  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
-    if (fileList->selected(i)) {
-      // See if this file is a directory...
-      // matt: why would we do that? It is perfectly legal to select multiple
-      // directories in a DIR chooser. They are visually selected and value(i)
-      // returns all of them as expected
-      //filename = (char *)fileList->text(i);
-
-      //if (filename[strlen(filename) - 1] != '/')
-	fcount ++;
-    }
-
-  if (fcount) return fcount;
-  else if (!filename || !filename[0]) return 0;
-  else return 1;
-}
-
-
-//
-// 'Fl_File_Chooser::directory()' - Set the directory in the file chooser.
-//
-
-void
-Fl_File_Chooser::directory(const char *d)// I - Directory to change to
-{
-  char	*dirptr;			// Pointer into directory
-
-
-//  printf("Fl_File_Chooser::directory(\"%s\")\n", d == NULL ? "(null)" : d);
-
-  // NULL == current directory
-  if (d == NULL)
-    d = ".";
-
-#ifdef WIN32
-  // See if the filename contains backslashes...
-  char	*slash;				// Pointer to slashes
-  char	fixpath[FL_PATH_MAX];			// Path with slashes converted
-  if (strchr(d, '\\')) {
-    // Convert backslashes to slashes...
-    strlcpy(fixpath, d, sizeof(fixpath));
-
-    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
-      *slash = '/';
-
-    d = fixpath;
-  }
-#endif // WIN32
-
-  if (d[0] != '\0')
-  {
-    // Make the directory absolute...
-#if (defined(WIN32) && ! defined(__CYGWIN__))|| defined(__EMX__)
-    if (d[0] != '/' && d[0] != '\\' && d[1] != ':')
-#else
-    if (d[0] != '/' && d[0] != '\\')
-#endif /* WIN32 || __EMX__ */
-      fl_filename_absolute(directory_, d);
-    else
-      strlcpy(directory_, d, sizeof(directory_));
-
-    // Strip any trailing slash...
-    dirptr = directory_ + strlen(directory_) - 1;
-    if ((*dirptr == '/' || *dirptr == '\\') && dirptr > directory_)
-      *dirptr = '\0';
-
-    // See if we have a trailing .. or . in the filename...
-    dirptr = directory_ + strlen(directory_) - 3;
-    if (dirptr >= directory_ && strcmp(dirptr, "/..") == 0) {
-      // Yes, we have "..", so strip the trailing path...
-      *dirptr = '\0';
-      while (dirptr > directory_) {
-        if (*dirptr == '/') break;
-	dirptr --;
-      }
-
-      if (dirptr >= directory_ && *dirptr == '/')
-        *dirptr = '\0';
-    } else if ((dirptr + 1) >= directory_ && strcmp(dirptr + 1, "/.") == 0) {
-      // Strip trailing "."...
-      dirptr[1] = '\0';
-    }
-  }
-  else
-    directory_[0] = '\0';
-
-  if (shown()) {
-    // Rescan the directory...
-    rescan();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::favoritesButtonCB()' - Handle favorites selections.
-//
-
-void
-Fl_File_Chooser::favoritesButtonCB()
-{
-  int		v;			// Current selection
-  char		pathname[FL_PATH_MAX],		// Pathname
-		menuname[FL_PATH_MAX];		// Menu name
-
-
-  v = favoritesButton->value();
-
-  if (!v) {
-    // Add current directory to favorites...
-    if (get_homedir()) v = favoritesButton->size() - 5;
-    else v = favoritesButton->size() - 4;
-
-    sprintf(menuname, "favorite%02d", v);
-
-    prefs_->set(menuname, directory_);
-    prefs_->flush();
-
-    quote_pathname(menuname, directory_, sizeof(menuname));
-    favoritesButton->add(menuname);
-
-    if (favoritesButton->size() > 104) {
-      ((Fl_Menu_Item *)favoritesButton->menu())[0].deactivate();
-    }
-  } else if (v == 1) {
-    // Manage favorites...
-    favoritesCB(0);
-  } else if (v == 2) {
-    // Filesystems/My Computer
-    directory("");
-  } else {
-    unquote_pathname(pathname, favoritesButton->text(v), sizeof(pathname));
-    directory(pathname);
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::favoritesCB()' - Handle favorites dialog.
-//
-
-void
-Fl_File_Chooser::favoritesCB(Fl_Widget *w)
-					// I - Widget
-{
-  int		i;			// Looping var
-  char		name[32],		// Preference name
-		pathname[1024];		// Directory in list
-
-
-  if (!w) {
-    // Load the favorites list...
-    favList->clear();
-    favList->deselect();
-
-    for (i = 0; i < 100; i ++) {
-      // Get favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_->get(name, pathname, "", sizeof(pathname));
-
-      // Stop on the first empty favorite...
-      if (!pathname[0]) break;
-
-      // Add the favorite to the list...
-      favList->add(pathname,
-                   Fl_File_Icon::find(pathname, Fl_File_Icon::DIRECTORY));
-    }
-
-    favUpButton->deactivate();
-    favDeleteButton->deactivate();
-    favDownButton->deactivate();
-    favOkButton->deactivate();
-
-    favWindow->hotspot(favList);
-    favWindow->show();
-  } else if (w == favList) {
-    i = favList->value();
-    if (i) {
-      if (i > 1) favUpButton->activate();
-      else favUpButton->deactivate();
-
-      favDeleteButton->activate();
-
-      if (i < favList->size()) favDownButton->activate();
-      else favDownButton->deactivate();
-    } else {
-      favUpButton->deactivate();
-      favDeleteButton->deactivate();
-      favDownButton->deactivate();
-    }
-  } else if (w == favUpButton) {
-    i = favList->value();
-
-    favList->insert(i - 1, favList->text(i), favList->data(i));
-    favList->remove(i + 1);
-    favList->select(i - 1);
-
-    if (i == 2) favUpButton->deactivate();
-
-    favDownButton->activate();
-
-    favOkButton->activate();
-  } else if (w == favDeleteButton) {
-    i = favList->value();
-
-    favList->remove(i);
-
-    if (i > favList->size()) i --;
-    favList->select(i);
-
-    if (i < favList->size()) favDownButton->activate();
-    else favDownButton->deactivate();
-
-    if (i > 1) favUpButton->activate();
-    else favUpButton->deactivate();
-
-    if (!i) favDeleteButton->deactivate();
-
-    favOkButton->activate();
-  } else if (w == favDownButton) {
-    i = favList->value();
-
-    favList->insert(i + 2, favList->text(i), favList->data(i));
-    favList->remove(i);
-    favList->select(i + 1);
-
-    if ((i + 1) == favList->size()) favDownButton->deactivate();
-
-    favUpButton->activate();
-
-    favOkButton->activate();
-  } else if (w == favOkButton) {
-    // Copy the new list over...
-    for (i = 0; i < favList->size(); i ++) {
-      // Set favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_->set(name, favList->text(i + 1));
-    }
-
-    // Clear old entries as necessary...
-    for (; i < 100; i ++) {
-      // Clear favorite directory 0 to 99...
-      sprintf(name, "favorite%02d", i);
-
-      prefs_->get(name, pathname, "", sizeof(pathname));
-
-      if (pathname[0]) prefs_->set(name, "");
-      else break;
-    }
-
-    update_favorites();
-    prefs_->flush();
-
-    favWindow->hide();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::fileListCB()' - Handle clicks (and double-clicks) in the
-//                                   Fl_File_Browser.
-//
-
-void
-Fl_File_Chooser::fileListCB()
-{
-  char	*filename,			// New filename
-	pathname[FL_PATH_MAX];			// Full pathname to file
-
-
-  filename = (char *)fileList->text(fileList->value());
-  if (!filename)
-    return;
-
-  if (!directory_[0]) {
-    strlcpy(pathname, filename, sizeof(pathname));
-  } else if (strcmp(directory_, "/") == 0) {
-    snprintf(pathname, sizeof(pathname), "/%s", filename);
-  } else {
-    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, filename);
-  }
-
-  if (Fl::event_clicks()) {
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-    if ((strlen(pathname) == 2 && pathname[1] == ':') ||
-        _fl_filename_isdir_quick(pathname))
-#else
-    if (_fl_filename_isdir_quick(pathname))
-#endif /* WIN32 || __EMX__ */
-    {
-      // Change directories...
-      directory(pathname);
-
-      // Reset the click count so that a click in the same spot won't
-      // be treated as a triple-click.  We use a value of -1 because
-      // the next click will increment click count to 0, which is what
-      // we really want...
-      Fl::event_clicks(-1);
-    }
-    else
-    {
-      // Hide the window - picked the file...
-      window->hide();
-      if (callback_) (*callback_)(this, data_);
-    }
-  }
-  else
-  {
-    // Check if the user clicks on a directory when picking files;
-    // if so, make sure only that item is selected...
-    filename = pathname + strlen(pathname) - 1;
-
-    if ((type_ & MULTI) && !(type_ & DIRECTORY)) {
-      if (*filename == '/') {
-	// Clicked on a directory, deselect everything else...
-	int i = fileList->value();
-	fileList->deselect();
-	fileList->select(i);
-      } else {
-        // Clicked on a file - see if there are other directories selected...
-        int i;
-	const char *temp;
-	for (i = 1; i <= fileList->size(); i ++) {
-	  if (i != fileList->value() && fileList->selected(i)) {
-	    temp = fileList->text(i);
-	    temp += strlen(temp) - 1;
-	    if (*temp == '/') break;	// Yes, selected directory
-	  }
-	}
-
-        if (i <= fileList->size()) {
-	  i = fileList->value();
-	  fileList->deselect();
-	  fileList->select(i);
-	}
-      }
-    }
-    // Strip any trailing slash from the directory name...
-    if (*filename == '/') *filename = '\0';
-
-//    puts("Setting fileName from fileListCB...");
-    fileName->value(pathname);
-
-    // Update the preview box...
-    Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this);
-    Fl::add_timeout(1.0, (Fl_Timeout_Handler)previewCB, this);
-
-    // Do any callback that is registered...
-    if (callback_) (*callback_)(this, data_);
-
-    // Activate the OK button as needed...
-    if (!_fl_filename_isdir_quick(pathname) || (type_ & DIRECTORY))
-      okButton->activate();
-    else
-      okButton->deactivate();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::fileNameCB()' - Handle text entry in the FileBrowser.
-//
-
-void
-Fl_File_Chooser::fileNameCB()
-{
-  char		*filename,	// New filename
-		*slash,		// Pointer to trailing slash
-		pathname[FL_PATH_MAX],	// Full pathname to file
-		matchname[FL_PATH_MAX];	// Matching filename
-  int		i,		// Looping var
-		min_match,	// Minimum number of matching chars
-		max_match,	// Maximum number of matching chars
-		num_files,	// Number of files in directory
-		first_line;	// First matching line
-  const char	*file;		// File from directory
-
-//  puts("fileNameCB()");
-//  printf("Event: %s\n", fl_eventnames[Fl::event()]);
-
-  // Get the filename from the text field...
-  filename = (char *)fileName->value();
-
-  if (!filename || !filename[0]) {
-    okButton->deactivate();
-    return;
-  }
-
-  // Expand ~ and $ variables as needed...
-  if (strchr(filename, '~') || strchr(filename, '$')) {
-    fl_filename_expand(pathname, sizeof(pathname), filename);
-    filename = pathname;
-    value(pathname);
-  }
-
-  // Make sure we have an absolute path...
-#if (defined(WIN32) && !defined(__CYGWIN__)) || defined(__EMX__)
-  if (directory_[0] != '\0' && filename[0] != '/' &&
-      filename[0] != '\\' &&
-      !(isalpha(filename[0] & 255) && (!filename[1] || filename[1] == ':'))) {
-#else
-  if (directory_[0] != '\0' && filename[0] != '/') {
-#endif /* WIN32 || __EMX__ */
-    fl_filename_absolute(pathname, sizeof(pathname), filename);
-    value(pathname);
-    fileName->mark(fileName->position()); // no selection after expansion
-  } else if (filename != pathname) {
-    // Finally, make sure that we have a writable copy...
-    strlcpy(pathname, filename, sizeof(pathname));
-  }
-
-  filename = pathname;
-
-  // Now process things according to the key pressed...
-  if (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter) {
-    // Enter pressed - select or change directory...
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-    if ((isalpha(pathname[0] & 255) && pathname[1] == ':' && !pathname[2]) ||
-        (_fl_filename_isdir_quick(pathname) &&
-	 compare_dirnames(pathname, directory_))) {
-#else
-    if (_fl_filename_isdir_quick(pathname) &&
-	compare_dirnames(pathname, directory_)) {
-#endif /* WIN32 || __EMX__ */
-      directory(pathname);
-    } else if ((type_ & CREATE) || access(pathname, 0) == 0) {
-      if (!_fl_filename_isdir_quick(pathname) || (type_ & DIRECTORY)) {
-	// Update the preview box...
-	update_preview();
-
-	// Do any callback that is registered...
-	if (callback_) (*callback_)(this, data_);
-
-	// Hide the window to signal things are done...
-	window->hide();
-      }
-    } else {
-      // File doesn't exist, so beep at and alert the user...
-      fl_alert("%s",existing_file_label);
-    }
-  }
-  else if (Fl::event_key() != FL_Delete &&
-           Fl::event_key() != FL_BackSpace) {
-    // Check to see if the user has entered a directory...
-    if ((slash = strrchr(pathname, '/')) == NULL)
-      slash = strrchr(pathname, '\\');
-
-    if (!slash) return;
-
-    // Yes, change directories if necessary...
-    *slash++ = '\0';
-    filename = slash;
-
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(pathname, directory_) &&
-        (pathname[0] || strcmp("/", directory_))) {
-#else
-    if (strcmp(pathname, directory_) &&
-        (pathname[0] || strcmp("/", directory_))) {
-#endif // WIN32 || __EMX__
-      int p = fileName->position();
-      int m = fileName->mark();
-
-      directory(pathname);
-
-      if (filename[0]) {
-	char tempname[FL_PATH_MAX];
-
-	snprintf(tempname, sizeof(tempname), "%s/%s", directory_, filename);
-	fileName->value(tempname);
-	strlcpy(pathname, tempname, sizeof(pathname));
-      }
-
-      fileName->position(p, m);
-    }
-
-    // Other key pressed - do filename completion as possible...
-    num_files  = fileList->size();
-    min_match  = (int) strlen(filename);
-    max_match  = min_match + 1;
-    first_line = 0;
-
-    for (i = 1; i <= num_files && max_match > min_match; i ++) {
-      file = fileList->text(i);
-
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-      if (strncasecmp(filename, file, min_match) == 0) {
-#else
-      if (strncmp(filename, file, min_match) == 0) {
-#endif // WIN32 || __EMX__
-        // OK, this one matches; check against the previous match
-	if (!first_line) {
-	  // First match; copy stuff over...
-	  strlcpy(matchname, file, sizeof(matchname));
-	  max_match = (int) strlen(matchname);
-
-          // Strip trailing /, if any...
-	  if (matchname[max_match - 1] == '/') {
-	    max_match --;
-	    matchname[max_match] = '\0';
-	  }
-
-	  // And then make sure that the item is visible
-          fileList->topline(i);
-	  first_line = i;
-	} else {
-	  // Succeeding match; compare to find maximum string match...
-	  while (max_match > min_match)
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-	    if (strncasecmp(file, matchname, max_match) == 0)
-#else
-	    if (strncmp(file, matchname, max_match) == 0)
-#endif // WIN32 || __EMX__
-	      break;
-	    else
-	      max_match --;
-
-          // Truncate the string as needed...
-          matchname[max_match] = '\0';
-	}
-      }
-    }
-
-    // If we have any matches, add them to the input field...
-    if (first_line > 0 && min_match == max_match &&
-        max_match == (int)strlen(fileList->text(first_line))) {
-      // This is the only possible match...
-      fileList->deselect(0);
-      fileList->select(first_line);
-      fileList->redraw();
-    } else if (max_match > min_match && first_line) {
-      // Add the matching portion...
-      fileName->replace( 
-			(int) (filename - pathname), 
-			(int) (filename - pathname + min_match),
-			matchname);
-
-      // Highlight it with the cursor at the end of the selection so
-      // s/he can press the right arrow to accept the selection
-      // (Tab and End also do this for both cases.)
-      fileName->position(
-			 (int) (filename - pathname + max_match),
-			 (int) (filename - pathname + min_match));
-    } else if (max_match == 0) {
-      fileList->deselect(0);
-      fileList->redraw();
-    }
-
-    // See if we need to enable the OK button...
-    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
-        (!fl_filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
-      okButton->activate();
-    } else {
-      okButton->deactivate();
-    }
-  } else {
-    // FL_Delete or FL_BackSpace
-    fileList->deselect(0);
-    fileList->redraw();
-    if (((type_ & CREATE) || !access(fileName->value(), 0)) &&
-        (!fl_filename_isdir(fileName->value()) || (type_ & DIRECTORY))) {
-      okButton->activate();
-    } else {
-      okButton->deactivate();
-    }
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::filter()' - Set the filter(s) for the chooser.
-//
-
-void
-Fl_File_Chooser::filter(const char *p)		// I - Pattern(s)
-{
-  char		*copyp,				// Copy of pattern
-		*start,				// Start of pattern
-		*end;				// End of pattern
-  int		allfiles;			// Do we have a "*" pattern?
-  char		temp[FL_PATH_MAX];			// Temporary pattern string
-
-
-  // Make sure we have a pattern...
-  if (!p || !*p) p = "*";
-
-  // Copy the pattern string...
-  copyp = strdup(p);
-
-  // Separate the pattern string as necessary...
-  showChoice->clear();
-
-  for (start = copyp, allfiles = 0; start && *start; start = end) {
-    end = strchr(start, '\t');
-    if (end) *end++ = '\0';
-
-    if (strcmp(start, "*") == 0) {
-      showChoice->add(all_files_label);
-      allfiles = 1;
-    } else {
-      quote_pathname(temp, start, sizeof(temp));
-      showChoice->add(temp);
-      if (strstr(start, "(*)") != NULL) allfiles = 1;
-    }
-  }
-
-  free(copyp);
-
-  if (!allfiles) showChoice->add(all_files_label);
-
-  showChoice->add(custom_filter_label);
-  
-  showChoice->value(0);
-  showChoiceCB();
-}
-
-
-//
-// 'Fl_File_Chooser::newdir()' - Make a new directory.
-//
-
-void
-Fl_File_Chooser::newdir()
-{
-  const char	*dir;		// New directory name
-  char		pathname[FL_PATH_MAX];	// Full path of directory
-
-
-  // Get a directory name from the user
-  if ((dir = fl_input("%s", NULL, new_directory_label)) == NULL)
-    return;
-
-  // Make it relative to the current directory as needed...
-#if (defined(WIN32) && ! defined (__CYGWIN__)) || defined(__EMX__)
-  if (dir[0] != '/' && dir[0] != '\\' && dir[1] != ':')
-#else
-  if (dir[0] != '/' && dir[0] != '\\')
-#endif /* WIN32 || __EMX__ */
-    snprintf(pathname, sizeof(pathname), "%s/%s", directory_, dir);
-  else
-    strlcpy(pathname, dir, sizeof(pathname));
-
-  // Create the directory; ignore EEXIST errors...
-#if defined(WIN32) && ! defined (__CYGWIN__)
-  if (mkdir(pathname))
-#else
-  if (mkdir(pathname, 0777))
-#endif /* WIN32 */
-    if (errno != EEXIST)
-    {
-      fl_alert("%s", strerror(errno));
-      return;
-    }
-
-  // Show the new directory...
-  directory(pathname);
-}
-
-
-
-/** Enable or disable the preview tile. 1 = enable preview, 0 = disable preview. */
-void Fl_File_Chooser::preview(int e)
-{
-  previewButton->value(e);
-  prefs_->set("preview", e);
-  prefs_->flush();
-
-  Fl_Group *p = previewBox->parent();
-  if (e) {
-    int w = p->w() * 2 / 3;
-    fileList->resize(fileList->x(), fileList->y(),
-                     w, fileList->h());
-    previewBox->resize(fileList->x()+w, previewBox->y(),
-                       p->w()-w, previewBox->h());
-    previewBox->show();
-    update_preview();
-  } else {
-    fileList->resize(fileList->x(), fileList->y(),
-                     p->w(), fileList->h());
-    previewBox->resize(p->x()+p->w(), previewBox->y(),
-                       0, previewBox->h());
-    previewBox->hide();
-  }
-  p->init_sizes();
-
-  fileList->parent()->redraw();
-}
-
-
-//
-// 'Fl_File_Chooser::previewCB()' - Timeout handler for the preview box.
-//
-
-void
-Fl_File_Chooser::previewCB(Fl_File_Chooser *fc) {	// I - File chooser
-  fc->update_preview();
-}
-
-
-//
-// 'Fl_File_Chooser::rescan()' - Rescan the current directory.
-//
-
-void
-Fl_File_Chooser::rescan()
-{
-  char	pathname[FL_PATH_MAX];		// New pathname for filename field
-
-
-  // Clear the current filename
-  strlcpy(pathname, directory_, sizeof(pathname));
-  if (pathname[0] && pathname[strlen(pathname) - 1] != '/') {
-    strlcat(pathname, "/", sizeof(pathname));
-  }
-//  puts("Setting fileName in rescan()");
-  fileName->value(pathname);
-
-  if (type_ & DIRECTORY)
-    okButton->activate();
-  else
-    okButton->deactivate();
-
-  // Build the file list...
-  fileList->load(directory_, sort);
-#ifndef WIN32	
-  if (!showHiddenButton->value()) remove_hidden_files();
-#endif
-  // Update the preview box...
-  update_preview();
-}
-
-//
-/**  
-  Rescan the current directory  without clearing the filename, 
-  then select the file if it is in the list
-*/
-void Fl_File_Chooser::rescan_keep_filename()
-{
-  // if no filename was set, this is likely a diretory browser
-  const char *fn = fileName->value();
-  if (!fn || !*fn || fn[strlen(fn) - 1]=='/') {
-    rescan();
-    return;
-  }
-
-  int   i;
-  char	pathname[FL_PATH_MAX];		// New pathname for filename field
-  strlcpy(pathname, fn, sizeof(pathname));
-
-  // Build the file list...
-  fileList->load(directory_, sort);
-#ifndef WIN32	
-  if (!showHiddenButton->value()) remove_hidden_files();
-#endif
-  // Update the preview box...
-  update_preview();
-
-  // and select the chosen file
-  char found = 0;
-  char *slash = strrchr(pathname, '/');
-  if (slash) 
-    slash++;
-  else
-    slash = pathname;
-  for (i = 1; i <= fileList->size(); i ++)
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(fileList->text(i), slash) == 0) {
-#else
-    if (strcmp(fileList->text(i), slash) == 0) {
-#endif // WIN32 || __EMX__
-      fileList->topline(i);
-      fileList->select(i);
-      found = 1;
-      break;
-    }
-
-  // update OK button activity
-  if (found || type_ & CREATE)
-    okButton->activate();
-  else
-    okButton->deactivate();
-}
-
-
-//
-// 'Fl_File_Chooser::showChoiceCB()' - Handle show selections.
-//
-
-void
-Fl_File_Chooser::showChoiceCB()
-{
-  const char	*item,			// Selected item
-		*patstart;		// Start of pattern
-  char		*patend;		// End of pattern
-  char		temp[FL_PATH_MAX];		// Temporary string for pattern
-
-
-  item = showChoice->text(showChoice->value());
-
-  if (strcmp(item, custom_filter_label) == 0) {
-    if ((item = fl_input("%s", pattern_, custom_filter_label)) != NULL) {
-      strlcpy(pattern_, item, sizeof(pattern_));
-
-      quote_pathname(temp, item, sizeof(temp));
-      showChoice->add(temp);
-      showChoice->value(showChoice->size() - 2);
-    }
-  } else if ((patstart = strchr(item, '(')) == NULL) {
-    strlcpy(pattern_, item, sizeof(pattern_));
-  } else {
-    strlcpy(pattern_, patstart + 1, sizeof(pattern_));
-    if ((patend = strrchr(pattern_, ')')) != NULL) *patend = '\0';
-  }
-
-  fileList->filter(pattern_);
-
-  if (shown()) {
-    // Rescan the directory...
-    rescan_keep_filename();
-  }
-}
-
-
-//
-// 'Fl_File_Chooser::update_favorites()' - Update the favorites menu.
-//
-
-void
-Fl_File_Chooser::update_favorites()
-{
-  int		i;			// Looping var
-  char		pathname[FL_PATH_MAX],		// Pathname
-		menuname[2048];		// Menu name
-  const char	*home;			// Home directory
-
-
-  favoritesButton->clear();
-  favoritesButton->add("bla");
-  favoritesButton->clear();
-  favoritesButton->add(add_favorites_label, FL_ALT + 'a', 0);
-  favoritesButton->add(manage_favorites_label, FL_ALT + 'm', 0, 0, FL_MENU_DIVIDER);
-  favoritesButton->add(filesystems_label, FL_ALT + 'f', 0);
-
-  if ((home = get_homedir()) != NULL) {
-    quote_pathname(menuname, home, sizeof(menuname));
-    favoritesButton->add(menuname, FL_ALT + 'h', 0);
-  }
-
-  for (i = 0; i < 100; i ++) {
-    sprintf(menuname, "favorite%02d", i);
-    prefs_->get(menuname, pathname, "", sizeof(pathname));
-    if (!pathname[0]) break;
-
-    quote_pathname(menuname, pathname, sizeof(menuname));
-
-    if (i < 10) favoritesButton->add(menuname, FL_ALT + '0' + i, 0);
-    else favoritesButton->add(menuname);
-  }
-
-  if (i == 100) ((Fl_Menu_Item *)favoritesButton->menu())[0].deactivate();
-}
-
-
-//
-// 'Fl_File_Chooser::update_preview()' - Update the preview box...
-//
-
-void
-Fl_File_Chooser::update_preview()
-{
-  const char		*filename;	// Current filename
-  const char            *newlabel = 0;  // New label text
-  Fl_Shared_Image	*image = 0,     // New image
-			*oldimage;	// Old image
-  int			pbw, pbh;	// Width and height of preview box
-  int			w, h;		// Width and height of preview image
-  int                   set = 0;        // Set this flag as soon as a decent preview is found
-
-  if (!previewButton->value()) return;
-
-  filename = value();
-  if (filename == NULL) {
-    // no file name at all, so we have an empty preview
-    set = 1;
-  } else if (fl_filename_isdir(filename)) {
-    // filename is a directory, show a folder icon
-    newlabel = "@fileopen";
-    set = 1;
-  } else {
-    struct stat s;
-    if (fl_stat(filename, &s)==0) {
-      if ((s.st_mode&S_IFMT)!=S_IFREG) {
-        // this is no regular file, probably some kind of device
-        newlabel = "@-3refresh"; // a cross
-        set = 1;
-      } else if (s.st_size==0) {
-        // this file is emty
-        newlabel = "<empty file>";
-        set = 1;
-      } else {
-        // if this file is an image, try to load it
-        window->cursor(FL_CURSOR_WAIT);
-        Fl::check();
-        
-        image = Fl_Shared_Image::get(filename);
-        
-        if (image) {
-          window->cursor(FL_CURSOR_DEFAULT);
-          Fl::check();
-          set = 1;
-        }
-      }
-    }
-  }
-
-  oldimage = (Fl_Shared_Image *)previewBox->image();
-
-  if (oldimage) oldimage->release();
-
-  previewBox->image(0);
-
-  if (!set) {
-    FILE	*fp;
-    int		bytes;
-    char	*ptr;
-
-    if (filename) fp = fl_fopen(filename, "rb");
-    else fp = NULL;
-
-    if (fp != NULL) {
-      // Try reading the first 1k of data for a label...
-      bytes = (int) fread(preview_text_, 1, sizeof(preview_text_) - 1, fp);
-      preview_text_[bytes] = '\0';
-      fclose(fp);
-    } else {
-      // Assume we can't read any data...
-      preview_text_[0] = '\0';
-    }
-
-    window->cursor(FL_CURSOR_DEFAULT);
-    Fl::check();
-
-    // Scan the buffer for printable UTF8 chars...
-    for (ptr = preview_text_; *ptr; ptr++) {
-      uchar c = uchar(*ptr);
-      if ( (c&0x80)==0 ) {
-        if (!isprint(c&255) && !isspace(c&255)) break;
-      } else if ( (c&0xe0)==0xc0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      } else if ( (c&0xf0)==0xe0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      } else if ( (c&0xf8)==0xf0 ) {
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-        if (ptr[1] && (ptr[1]&0xc0)!=0x80) break;
-        ptr++;
-      }
-    } 
-//         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
-//	 ptr ++);
-
-    // Scan the buffer for printable characters in 8 bit
-    if (*ptr || ptr == preview_text_) {
-      for (ptr = preview_text_;
-         *ptr && (isprint(*ptr & 255) || isspace(*ptr & 255));
-	 ptr ++) {/*empty*/}
-    }
-
-    if (*ptr || ptr == preview_text_) {
-      // Non-printable file, just show a big ?...
-      previewBox->label(filename ? "?" : 0);
-      previewBox->align(FL_ALIGN_CLIP);
-      previewBox->labelsize(75);
-      previewBox->labelfont(FL_HELVETICA);
-    } else {
-      // Show the first 1k of text...
-      int size = previewBox->h() / 20;
-      if (size < 6) size = 6;
-      else if (size > FL_NORMAL_SIZE) size = FL_NORMAL_SIZE;
-
-      previewBox->label(preview_text_);
-      previewBox->align((Fl_Align)(FL_ALIGN_CLIP | FL_ALIGN_INSIDE |
-                                   FL_ALIGN_LEFT | FL_ALIGN_TOP));
-      previewBox->labelsize(size);
-      previewBox->labelfont(FL_COURIER);
-    }
-  } else if (image && ( (image->w() <= 0) ||
-                        (image->h() <= 0) ||
-                        (image->d() < 0)  ||
-                        (image->count() <= 0))) {
-    // Image has errors? Show big 'X'
-    previewBox->label("X");
-    previewBox->align(FL_ALIGN_CLIP);
-    previewBox->labelsize(70);
-    previewBox->labelfont(FL_HELVETICA);
-    previewBox->redraw();
-  } else if (image) {
-    pbw = previewBox->w() - 20;
-    pbh = previewBox->h() - 20;
-
-    if (image->w() > pbw || image->h() > pbh) {
-      w   = pbw;
-      h   = w * image->h() / image->w();
-
-      if (h > pbh) {
-	h = pbh;
-	w = h * image->w() / image->h();
-      }
-
-      oldimage = (Fl_Shared_Image *)image->copy(w, h);
-      previewBox->image((Fl_Image *)oldimage);
-
-      image->release();
-    } else {
-      previewBox->image((Fl_Image *)image);
-    }
-
-    previewBox->align(FL_ALIGN_CLIP);
-    previewBox->label(0);
-  } else if (newlabel) {
-    previewBox->label(newlabel);
-    previewBox->align(FL_ALIGN_CLIP);
-    previewBox->labelsize(newlabel[0]=='@'?75:12);
-    previewBox->labelfont(FL_HELVETICA);
-  }
-
-  previewBox->redraw();
-}
-
-
-//
-// 'Fl_File_Chooser::value()' - Return a selected filename.
-//
-
-const char *			// O - Filename or NULL
-Fl_File_Chooser::value(int f)	// I - File number
-{
-  int		i;		// Looping var
-  int		fcount;		// Number of selected files
-  const char	*name;		// Current filename
-  static char	pathname[FL_PATH_MAX];	// Filename + directory
-
-
-  name = fileName->value();
-
-  if (!(type_ & MULTI)) {
-    // Return the filename in the filename field...
-    if (!name || !name[0]) return NULL;
-    else return name;
-  }
-
-  // Return a filename from the list...
-  for (i = 1, fcount = 0; i <= fileList->size(); i ++)
-    if (fileList->selected(i)) {
-      // See if this file is a selected file/directory...
-      name = fileList->text(i);
-
-      fcount ++;
-
-      if (fcount == f) {
-	if (directory_[0]) {
-	  snprintf(pathname, sizeof(pathname), "%s/%s", directory_, name);
-	} else {
-	  strlcpy(pathname, name, sizeof(pathname));
-	}
-
-	return pathname;
-      }
-    }
-
-  // If nothing is selected, use the filename field...
-  if (!name || !name[0]) return NULL;
-  else return name;
-}
-
-
-//
-// 'Fl_File_Chooser::value()' - Set the current filename.
-//
-
-void
-Fl_File_Chooser::value(const char *filename)
-					// I - Filename + directory
-{
-  int	i,				// Looping var
-  	fcount;				// Number of items in list
-  char	*slash;				// Directory separator
-  char	pathname[FL_PATH_MAX];		// Local copy of filename
-
-
-//  printf("Fl_File_Chooser::value(\"%s\")\n", filename == NULL ? "(null)" : filename);
-
-  // See if the filename is the "My System" directory...
-  if (filename == NULL || !filename[0]) {
-    // Yes, just change the current directory...
-    directory(filename);
-    fileName->value("");
-    okButton->deactivate();
-    return;
-  }
-
-#ifdef WIN32
-  // See if the filename contains backslashes...
-  char	fixpath[FL_PATH_MAX];			// Path with slashes converted
-  if (strchr(filename, '\\')) {
-    // Convert backslashes to slashes...
-    strlcpy(fixpath, filename, sizeof(fixpath));
-
-    for (slash = strchr(fixpath, '\\'); slash; slash = strchr(slash + 1, '\\'))
-      *slash = '/';
-
-    filename = fixpath;
-  }
-#endif // WIN32
-
-  // See if there is a directory in there...
-  fl_filename_absolute(pathname, sizeof(pathname), filename);
-
-  if ((slash = strrchr(pathname, '/')) != NULL) {
-    // Yes, change the display to the directory... 
-    if (!fl_filename_isdir(pathname)) *slash++ = '\0';
-
-    directory(pathname);
-    if (*slash == '/') slash = pathname;
-  } else {
-    directory(".");
-    slash = pathname;
-  }
-
-  // Set the input field to the absolute path...
-  if (slash > pathname) slash[-1] = '/';
-
-  fileName->value(pathname);
-  fileName->position(0, (int) strlen(pathname));
-  okButton->activate();
-
-  // Then find the file in the file list and select it...
-  fcount = fileList->size();
-
-  fileList->deselect(0);
-  fileList->redraw();
-
-  for (i = 1; i <= fcount; i ++)
-#if defined(WIN32) || defined(__EMX__)
-    if (strcasecmp(fileList->text(i), slash) == 0) {
-#else
-    if (strcmp(fileList->text(i), slash) == 0) {
-#endif // WIN32 || __EMX__
-//      printf("Selecting line %d...\n", i);
-      fileList->topline(i);
-      fileList->select(i);
-      break;
-    }
-}
-  
-void Fl_File_Chooser::show()
-{
-  window->hotspot(fileList);
-  window->show();
-  Fl::flush();
-  fl_cursor(FL_CURSOR_WAIT);
-  rescan_keep_filename();
-  fl_cursor(FL_CURSOR_DEFAULT);
-  fileName->take_focus();
-#ifdef WIN32
-  showHiddenButton->hide();
-#endif
-}
-
-void Fl_File_Chooser::showHidden(int value)
-{
-  if (value) {
-    fileList->load(directory());
-  } else {
-    remove_hidden_files();
-    fileList->redraw();
-  }
-}
-  
-void Fl_File_Chooser::remove_hidden_files()
-{
-  int count = fileList->size();
-  for(int num = count; num >= 1; num--) {
-    const char *p = fileList->text(num);
-    if (*p == '.' && strcmp(p, "../") != 0) fileList->remove(num);
-  }
-  fileList->topline(1);
-}
-
-  
-//
-// 'compare_dirnames()' - Compare two directory names.
-//
-
-static int
-compare_dirnames(const char *a, const char *b) {
-  int alen, blen;
-
-  // Get length of each string...
-  alen = (int) (strlen(a) - 1);
-  blen = (int) (strlen(b) - 1);
-
-  if (alen < 0 || blen < 0) return alen - blen;
-
-  // Check for trailing slashes...
-  if (a[alen] != '/') alen ++;
-  if (b[blen] != '/') blen ++;
-
-  // If the lengths aren't the same, then return the difference...
-  if (alen != blen) return alen - blen;
-
-  // Do a comparison of the first N chars (alen == blen at this point)...
-#ifdef WIN32
-  return strncasecmp(a, b, alen);
-#else
-  return strncmp(a, b, alen);
-#endif // WIN32
-}
-
-
-//
-// 'quote_pathname()' - Quote a pathname for a menu.
-//
-
-static void
-quote_pathname(char       *dst,		// O - Destination string
-               const char *src,		// I - Source string
-	       int        dstsize)	// I - Size of destination string
-{
-  dstsize--; // prepare for trailing zero
-
-  while (*src && dstsize > 1) {
-    if (*src == '\\') {
-      // Convert backslash to forward slash...
-      *dst++ = '\\';
-      *dst++ = '/';
-      dstsize -= 2;
-      src ++;
-    } else {
-      if (*src == '/') {
-	*dst++ = '\\';
-	dstsize--;
-      }
-      *dst++ = *src++;
-      dstsize--;
-    }
-  }
-
-  *dst = '\0';
-}
-
-
-//
-// 'unquote_pathname()' - Unquote a pathname from a menu.
-//
-
-static void
-unquote_pathname(char       *dst,	// O - Destination string
-                 const char *src,	// I - Source string
-	         int        dstsize)	// I - Size of destination string
-{
-  dstsize--; // prepare for trailing zero
-
-  while (*src && dstsize > 0) {
-    if (*src == '\\') src++;
-    *dst++ = *src++;
-    dstsize--;
-  }
-
-  *dst = '\0';
-}
-
-//
-// 'get_homedir()' - Try to find the home directory (platform dependent).
-
-static const char*
-get_homedir() {
-
-  const char *home = fl_getenv("HOME");
-
-#ifdef WIN32
-
-  if (!home) home = fl_getenv("UserProfile");
-
-#endif // WIN32
-
-  return home;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Icon.cxx
+++ /dev/null
@@ -1,483 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Icon routines.
-//
-// KDE icon code donated by Maarten De Boer.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_File_Icon::Fl_File_Icon()       - Create a new file icon.
-//   Fl_File_Icon::~Fl_File_Icon()      - Remove a file icon.
-//   Fl_File_Icon::add()               - Add data to an icon.
-//   Fl_File_Icon::find()              - Find an icon based upon a given file.
-//   Fl_File_Icon::draw()              - Draw an icon.
-//   Fl_File_Icon::label()             - Set the widgets label to an icon.
-//   Fl_File_Icon::labeltype()         - Draw the icon label.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#if (defined(WIN32) && ! defined(__CYGWIN__)) || defined(__EMX__)
-#  include <io.h>
-#  define F_OK	0
-#else
-#  include <unistd.h>
-#endif /* WIN32 || __EMX__ */
-
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-
-
-//
-// Define missing POSIX/XPG4 macros as needed...
-//
-
-#ifndef S_ISDIR
-#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#endif /* !S_ISDIR */
-
-
-//
-// Icon cache...
-//
-
-Fl_File_Icon	*Fl_File_Icon::first_ = (Fl_File_Icon *)0;
-
-
-/**
-  Creates a new Fl_File_Icon with the specified information.
-  \param[in] p filename pattern
-  \param[in] t file type
-  \param[in] nd number of data values
-  \param[in] d data values
-*/
-Fl_File_Icon::Fl_File_Icon(const char *p,	/* I - Filename pattern */
-                	   int        t,	/* I - File type */
-			   int        nd,	/* I - Number of data values */
-			   short      *d)	/* I - Data values */
-{
-  // Initialize the pattern and type...
-  pattern_ = p;
-  type_    = t;
-
-  // Copy icon data as needed...
-  if (nd)
-  {
-    num_data_   = nd;
-    alloc_data_ = nd + 1;
-    data_       = (short *)calloc(sizeof(short), nd + 1);
-    memcpy(data_, d, nd * sizeof(short));
-  }
-  else
-  {
-    num_data_   = 0;
-    alloc_data_ = 0;
-  }
-
-  // And add the icon to the list of icons...
-  next_  = first_;
-  first_ = this;
-}
-
-
-/**
-  The destructor destroys the icon and frees all memory that has been
-  allocated for it.
-*/
-Fl_File_Icon::~Fl_File_Icon() {
-  Fl_File_Icon	*current,	// Current icon in list
-		*prev;		// Previous icon in list
-
-
-  // Find the icon in the list...
-  for (current = first_, prev = (Fl_File_Icon *)0;
-       current != this && current != (Fl_File_Icon *)0;
-       prev = current, current = current->next_) {/*empty*/}
-
-  // Remove the icon from the list as needed...
-  if (current)
-  {
-    if (prev)
-      prev->next_ = current->next_;
-    else
-      first_ = current->next_;
-  }
-
-  // Free any memory used...
-  if (alloc_data_)
-    free(data_);
-}
-
-
-/**
-  Adds a keyword value to the icon array, returning a pointer to it.
-  \param[in] d data value
-*/
-short *				// O - Pointer to new data value
-Fl_File_Icon::add(short d)	// I - Data to add
-{
-  short	*dptr;			// Pointer to new data value
-
-
-  // Allocate/reallocate memory as needed
-  if ((num_data_ + 1) >= alloc_data_)
-  {
-    alloc_data_ += 128;
-
-    if (alloc_data_ == 128)
-      dptr = (short *)malloc(sizeof(short) * alloc_data_);
-    else
-      dptr = (short *)realloc(data_, sizeof(short) * alloc_data_);
-
-    if (dptr == NULL)
-      return (NULL);
-
-    data_ = dptr;
-  }
-
-  // Store the new data value and return
-  data_[num_data_++] = d;
-  data_[num_data_]   = END;
-
-  return (data_ + num_data_ - 1);
-}
-
-
-/**
-  Finds an icon that matches the given filename and file type.
-  \param[in] filename name of file
-  \param[in] filetype enumerated file type
-  \return matching file icon or NULL
-*/
-Fl_File_Icon *				// O - Matching file icon or NULL
-Fl_File_Icon::find(const char *filename,// I - Name of file */
-                   int        filetype)	// I - Enumerated file type
-{
-  Fl_File_Icon	*current;		// Current file in list
-#ifndef WIN32
-  struct stat	fileinfo;		// Information on file
-#endif // !WIN32
-  const char	*name;			// Base name of filename
-
-
-  // Get file information if needed...
-  if (filetype == ANY)
-  {
-#ifdef WIN32
-    if (filename[strlen(filename) - 1] == '/')
-      filetype = DIRECTORY;
-    else if (fl_filename_isdir(filename))
-      filetype = DIRECTORY;
-    else
-      filetype = PLAIN;
-#else
-    if (!fl_stat(filename, &fileinfo))
-    {
-      if (S_ISDIR(fileinfo.st_mode))
-        filetype = DIRECTORY;
-#  ifdef S_IFIFO
-      else if (S_ISFIFO(fileinfo.st_mode))
-        filetype = FIFO;
-#  endif // S_IFIFO
-#  if defined(S_ICHR) && defined(S_IBLK)
-      else if (S_ISCHR(fileinfo.st_mode) || S_ISBLK(fileinfo.st_mode))
-        filetype = DEVICE;
-#  endif // S_ICHR && S_IBLK
-#  ifdef S_ILNK
-      else if (S_ISLNK(fileinfo.st_mode))
-        filetype = LINK;
-#  endif // S_ILNK
-      else
-        filetype = PLAIN;
-    }
-    else
-      filetype = PLAIN;
-#endif // WIN32
-  }
-
-  // Look at the base name in the filename
-  name = fl_filename_name(filename);
-
-  // Loop through the available file types and return any match that
-  // is found...
-  for (current = first_; current != (Fl_File_Icon *)0; current = current->next_)
-    if ((current->type_ == filetype || current->type_ == ANY) &&
-        (fl_filename_match(filename, current->pattern_) ||
-	 fl_filename_match(name, current->pattern_)))
-      break;
-
-  // Return the match (if any)...
-  return (current);
-}
-
-/**
-  Draws an icon in the indicated area.
-  \param[in] x, y, w, h position and size
-  \param[in] ic icon color
-  \param[in] active status, default is active [non-zero]
-*/
-void
-Fl_File_Icon::draw(int      x,		// I - Upper-lefthand X
-        	   int      y,		// I - Upper-lefthand Y
-		   int      w,		// I - Width of bounding box
-		   int      h,		// I - Height of bounding box
-        	   Fl_Color ic,		// I - Icon color...
-        	   int      active)	// I - Active or inactive?
-{
-  Fl_Color	c,		// Current color
-		oc;		// Outline color
-  short		*d,		// Pointer to data
-		*dend;		// End of data...
-  short		*prim;		// Pointer to start of primitive...
-  double	scale;		// Scale of icon
-
-
-  // Don't try to draw a NULL array!
-  if (num_data_ == 0)
-    return;
-
-  // Setup the transform matrix as needed...
-  scale = w < h ? w : h;
-
-  fl_push_matrix();
-  fl_translate((float)x + 0.5 * ((float)w - scale),
-               (float)y + 0.5 * ((float)h + scale));
-  fl_scale(scale, -scale);
-
-  // Loop through the array until we see an unmatched END...
-  d    = data_;
-  dend = data_ + num_data_;
-  prim = NULL;
-  c    = ic;
-
-  if (active)
-    fl_color(c);
-  else
-    fl_color(fl_inactive(c));
-
-  while (d < dend)
-    switch (*d)
-    {
-      case END :
-          if (prim)
-            switch (*prim)
-	    {
-	      case LINE :
-		  fl_end_line();
-		  break;
-
-	      case CLOSEDLINE :
-		  fl_end_loop();
-		  break;
-
-	      case POLYGON :
-		  fl_end_complex_polygon();
-		  break;
-
-	      case OUTLINEPOLYGON :
-		  fl_end_complex_polygon();
-
-        	  oc = (Fl_Color)((((unsigned short *)prim)[1] << 16) | 
-	                	  ((unsigned short *)prim)[2]);
-                  if (active)
-		  {
-                    if (oc == FL_ICON_COLOR)
-		      fl_color(ic);
-		    else
-		      fl_color(oc);
-		  }
-		  else
-		  {
-                    if (oc == FL_ICON_COLOR)
-		      fl_color(fl_inactive(ic));
-		    else
-		      fl_color(fl_inactive(oc));
-		  }
-
-		  fl_begin_loop();
-
-		  prim += 3;
-		  while (*prim == VERTEX)
-		  {
-		    fl_vertex(prim[1] * 0.0001, prim[2] * 0.0001);
-		    prim += 3;
-		  }
-
-        	  fl_end_loop();
-		  fl_color(c);
-		  break;
-	    }
-
-          prim = NULL;
-	  d ++;
-	  break;
-
-      case COLOR :
-          c = (Fl_Color)((((unsigned short *)d)[1] << 16) | 
-	                   ((unsigned short *)d)[2]);
-
-          if (c == FL_ICON_COLOR)
-	    c = ic;
-
-          if (!active)
-	    c = fl_inactive(c);
-
-          fl_color(c);
-	  d += 3;
-	  break;
-
-      case LINE :
-          prim = d;
-	  d ++;
-	  fl_begin_line();
-	  break;
-
-      case CLOSEDLINE :
-          prim = d;
-	  d ++;
-	  fl_begin_loop();
-	  break;
-
-      case POLYGON :
-          prim = d;
-	  d ++;
-	  fl_begin_complex_polygon();
-	  break;
-
-      case OUTLINEPOLYGON :
-          prim = d;
-	  d += 3;
-	  fl_begin_complex_polygon();
-	  break;
-
-      case VERTEX :
-          if (prim)
-	    fl_vertex(d[1] * 0.0001, d[2] * 0.0001);
-	  d += 3;
-	  break;
-
-      default : // Ignore invalid data...
-          d ++;
-    }
-
-  // If we still have an open primitive, close it...
-  if (prim)
-    switch (*prim)
-    {
-      case LINE :
-	  fl_end_line();
-	  break;
-
-      case CLOSEDLINE :
-	  fl_end_loop();
-	  break;
-
-      case POLYGON :
-	  fl_end_polygon();
-	  break;
-
-      case OUTLINEPOLYGON :
-	  fl_end_polygon();
-
-          oc = (Fl_Color)((((unsigned short *)prim)[1] << 16) | 
-	                  ((unsigned short *)prim)[2]);
-          if (active)
-	  {
-            if (oc == FL_ICON_COLOR)
-	      fl_color(ic);
-	    else
-	      fl_color(oc);
-	  }
-	  else
-	  {
-            if (oc == FL_ICON_COLOR)
-	      fl_color(fl_inactive(ic));
-	    else
-	      fl_color(fl_inactive(oc));
-	  }
-
-	  fl_begin_loop();
-
-	  prim += 3;
-	  while (*prim == VERTEX)
-	  {
-	    fl_vertex(prim[1] * 0.0001, prim[2] * 0.0001);
-	    prim += 3;
-	  }
-
-          fl_end_loop();
-	  fl_color(c);
-	  break;
-    }
-
-  // Restore the transform matrix
-  fl_pop_matrix();
-}
-
-/**
-  Applies the icon to the widget, registering the Fl_File_Icon
-  label type as needed.
-  \param[in] w widget for which this icon will become the label
-*/
-void Fl_File_Icon::label(Fl_Widget *w)	// I - Widget to label
-{
-  Fl::set_labeltype(_FL_ICON_LABEL, labeltype, 0);
-  w->label(_FL_ICON_LABEL, (const char*)this);
-}
-
-
-/**
-  Draw the icon label.
-  \param[in] o label data
-  \param[in] x, y, w, h position and size of label
-  \param[in] a label alignment [not used]
-*/
-void
-Fl_File_Icon::labeltype(const Fl_Label *o,	// I - Label data
-                	int            x,	// I - X position of label
-			int            y,	// I - Y position of label
-			int            w,	// I - Width of label
-			int            h,	// I - Height of label
-			Fl_Align       a)	// I - Label alignment (not used)
-{
-  Fl_File_Icon *icon;			// Pointer to icon data
-
-
-  (void)a;
-
-  icon = (Fl_File_Icon *)(o->value);
-  if (icon) icon->draw(x, y, w, h, (Fl_Color)(o->color));
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Icon2.cxx
+++ /dev/null
@@ -1,1018 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_File_Icon system icon routines.
-//
-// KDE icon code donated by Maarten De Boer.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_File_Icon::load()              - Load an icon file...
-//   Fl_File_Icon::load_fti()          - Load an SGI-format FTI file...
-//   Fl_File_Icon::load_image()        - Load an image icon file...
-//   Fl_File_Icon::load_system_icons() - Load the standard system icons/filetypes.
-//   load_kde_icons()                  - Load KDE icon files.
-//   load_kde_mimelnk()                - Load a KDE "mimelnk" file.
-//   kde_to_fltk_pattern()             - Convert a KDE pattern to a FLTK pattern.
-//   get_kde_val()                     - Get a KDE value.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <ctype.h>
-#include <errno.h>
-#include <FL/math.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <io.h>
-#  define F_OK	0
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define access _access
-#else
-#  include <unistd.h>
-#endif // WIN32
-
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-
-
-//
-// Define missing POSIX/XPG4 macros as needed...
-//
-
-#ifndef S_ISDIR
-#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#endif /* !S_ISDIR */
-
-
-//
-// Local functions...
-//
-
-static void	load_kde_icons(const char *directory, const char *icondir);
-static void	load_kde_mimelnk(const char *filename, const char *icondir);
-static char	*kde_to_fltk_pattern(const char *kdepattern);
-static char	*get_kde_val(char *str, const char *key);
-
-
-//
-// Local globals...
-//
-
-static const char *kdedir = NULL;
-
-
-/**
-  Loads the specified icon image. The format is deduced from the filename.
-  \param[in] f filename
-*/
-void
-Fl_File_Icon::load(const char *f)	// I - File to read from
-{
-  int		i;			// Load status...
-  const char	*ext;			// File extension
-
-
-  ext = fl_filename_ext(f);
-
-  if (ext && strcmp(ext, ".fti") == 0)
-    i = load_fti(f);
-  else
-    i = load_image(f);
-
-  if (i)
-  {
-    Fl::warning("Fl_File_Icon::load(): Unable to load icon file \"%s\".", f);
-    return;
-  }
-}
-
-
-/**
-  Loads an SGI icon file.
-  \param[in] fti icon filename
-  \return 0 on success, non-zero on error
-*/
-int					// O - 0 on success, non-zero on error
-Fl_File_Icon::load_fti(const char *fti)	// I - File to read from
-{
-  FILE	*fp;			// File pointer
-  int	ch;			// Current character
-  char	command[255],		// Command string ("vertex", etc.)
-	params[255],		// Parameter string ("10.0,20.0", etc.)
-	*ptr;			// Pointer into strings
-  int	outline;		// Outline polygon
-
-
-  // Try to open the file...
-  if ((fp = fl_fopen(fti, "rb")) == NULL)
-  {
-    Fl::error("Fl_File_Icon::load_fti(): Unable to open \"%s\" - %s",
-              fti, strerror(errno));
-    return -1;
-  }
-
-  // Read the entire file, adding data as needed...
-  outline = 0;
-
-  while ((ch = getc(fp)) != EOF)
-  {
-    // Skip whitespace
-    if (isspace(ch))
-      continue;
-
-    // Skip comments starting with "#"...
-    if (ch == '#')
-    {
-      while ((ch = getc(fp)) != EOF)
-        if (ch == '\n')
-	  break;
-
-      if (ch == EOF)
-        break;
-      else
-        continue;
-    }
-
-    // OK, this character better be a letter...
-    if (!isalpha(ch))
-    {
-      Fl::error("Fl_File_Icon::load_fti(): Expected a letter at file position %ld (saw '%c')",
-                ftell(fp) - 1, ch);
-      break;
-    }
-
-    // Scan the command name...
-    ptr    = command;
-    *ptr++ = ch;
-
-    while ((ch = getc(fp)) != EOF)
-    {
-      if (ch == '(')
-        break;
-      else if (ptr < (command + sizeof(command) - 1))
-        *ptr++ = ch;
-    }
-
-    *ptr++ = '\0';
-
-    // Make sure we stopped on a parenthesis...
-    if (ch != '(')
-    {
-      Fl::error("Fl_File_Icon::load_fti(): Expected a ( at file position %ld (saw '%c')",
-                ftell(fp) - 1, ch);
-      break;
-    }
-
-    // Scan the parameters...
-    ptr = params;
-
-    while ((ch = getc(fp)) != EOF)
-    {
-      if (ch == ')')
-        break;
-      else if (ptr < (params + sizeof(params) - 1))
-        *ptr++ = ch;
-    }
-
-    *ptr++ = '\0';
-
-    // Make sure we stopped on a parenthesis...
-    if (ch != ')')
-    {
-      Fl::error("Fl_File_Icon::load_fti(): Expected a ) at file position %ld (saw '%c')",
-                ftell(fp) - 1, ch);
-      break;
-    }
-
-    // Make sure the next character is a semicolon...
-    if ((ch = getc(fp)) != ';')
-    {
-      Fl::error("Fl_File_Icon::load_fti(): Expected a ; at file position %ld (saw '%c')",
-                ftell(fp) - 1, ch);
-      break;
-    }
-
-    // Now process the command...
-    if (strcmp(command, "color") == 0)
-    {
-      // Set the color; for negative colors blend the two primaries to
-      // produce a composite color.  Also, the following symbolic color
-      // names are understood:
-      //
-      //     name           FLTK color
-      //     -------------  ----------
-      //     iconcolor      FL_ICON_COLOR; mapped to the icon color in
-      //                    Fl_File_Icon::draw()
-      //     shadowcolor    FL_DARK3
-      //     outlinecolor   FL_BLACK
-      if (strcmp(params, "iconcolor") == 0)
-        add_color(FL_ICON_COLOR);
-      else if (strcmp(params, "shadowcolor") == 0)
-        add_color(FL_DARK3);
-      else if (strcmp(params, "outlinecolor") == 0)
-        add_color(FL_BLACK);
-      else
-      {
-        int c = atoi(params);	// Color value
-
-
-        if (c < 0)
-	{
-	  // Composite color; compute average...
-	  c = -c;
-	  add_color(fl_color_average((Fl_Color)(c >> 4),
-	                             (Fl_Color)(c & 15), 0.5f));
-	}
-	else
-	  add_color((Fl_Color)c);
-      }
-    }
-    else if (strcmp(command, "bgnline") == 0)
-      add(LINE);
-    else if (strcmp(command, "bgnclosedline") == 0)
-      add(CLOSEDLINE);
-    else if (strcmp(command, "bgnpolygon") == 0)
-      add(POLYGON);
-    else if (strcmp(command, "bgnoutlinepolygon") == 0)
-    {
-      add(OUTLINEPOLYGON);
-      outline = add(0) - data_;
-      add(0);
-    }
-    else if (strcmp(command, "endoutlinepolygon") == 0 && outline)
-    {
-      unsigned cval; // Color value
-
-      // Set the outline color; see above for valid values...
-      if (strcmp(params, "iconcolor") == 0)
-        cval = FL_ICON_COLOR;
-      else if (strcmp(params, "shadowcolor") == 0)
-        cval = FL_DARK3;
-      else if (strcmp(params, "outlinecolor") == 0)
-        cval = FL_BLACK;
-      else
-      {
-        int c = atoi(params);	// Color value
-
-
-        if (c < 0)
-	{
-	  // Composite color; compute average...
-	  c = -c;
-	  cval = fl_color_average((Fl_Color)(c >> 4), (Fl_Color)(c & 15), 0.5f);
-	}
-	else
-	  cval = c;
-      }
-
-      // Store outline color...
-      data_[outline]     = cval >> 16;
-      data_[outline + 1] = cval;
-
-      outline = 0;
-      add(END);
-    }
-    else if (strncmp(command, "end", 3) == 0)
-      add(END);
-    else if (strcmp(command, "vertex") == 0)
-    {
-      float x, y;		// Coordinates of vertex
-
-
-      if (sscanf(params, "%f,%f", &x, &y) != 2)
-        break;
-
-      add_vertex((short)(int)rint(x * 100.0), (short)(int)rint(y * 100.0));
-    }
-    else
-    {
-      Fl::error("Fl_File_Icon::load_fti(): Unknown command \"%s\" at file position %ld.",
-                command, ftell(fp) - 1);
-      break;
-    }
-  }
-
-  // Close the file and return...
-  fclose(fp);
-
-#ifdef DEBUG
-  printf("Icon File \"%s\":\n", fti);
-  for (int i = 0; i < num_data_; i ++)
-    printf("    %d,\n", data_[i]);
-#endif /* DEBUG */
-
-  return 0;
-}
-
-
-/**
-  Load an image icon file from an image filename.
-  \param[in] ifile image filename
-  \return 0 on success, non-zero on error
-*/
-int Fl_File_Icon::load_image(const char *ifile)	// I - File to read from
-{
-  Fl_Shared_Image	*img;		// Image file
-
-
-  img = Fl_Shared_Image::get(ifile);
-  if (!img || !img->count() || !img->w() || !img->h()) return -1;
-
-  if (img->count() == 1) {
-    int		x, y;		// X & Y in image
-    int		startx;		// Starting X coord
-    Fl_Color	c,		// Current color
-		temp;		// Temporary color
-    const uchar *row;		// Pointer into image
-
-    const int extra_data = img->ld() ? (img->ld()-img->w()*img->d()) : 0;
-
-    // Loop through grayscale or RGB image...
-    for (y = 0, row = (const uchar *)(*(img->data())); y < img->h(); y ++, row += extra_data)
-    {
-      for (x = 0, startx = 0, c = (Fl_Color)-1;
-           x < img->w();
-	   x ++, row += img->d())
-      {
-	switch (img->d())
-	{
-          case 1 :
-              temp = fl_rgb_color(row[0], row[0], row[0]);
-	      break;
-          case 2 :
-	      if (row[1] > 127)
-        	temp = fl_rgb_color(row[0], row[0], row[0]);
-	      else
-		temp = (Fl_Color)-1;
-	      break;
-	  case 3 :
-              temp = fl_rgb_color(row[0], row[1], row[2]);
-	      break;
-	  default :
-	      if (row[3] > 127)
-        	temp = fl_rgb_color(row[0], row[1], row[2]);
-	      else
-		temp = (Fl_Color)-1;
-	      break;
-	}
-
-	if (temp != c)
-	{
-	  if (x > startx && c != (Fl_Color)-1)
-	  {
-	    add_color(c);
-	    add(POLYGON);
-	    add_vertex(startx * 9000 / img->w() + 1000, 9500 - y * 9000 / img->h());
-	    add_vertex(x * 9000 / img->w() + 1000,      9500 - y * 9000 / img->h());
-	    add_vertex(x * 9000 / img->w() + 1000,      9500 - (y + 1) * 9000 / img->h());
-	    add_vertex(startx * 9000 / img->w() + 1000, 9500 - (y + 1) * 9000 / img->h());
-	    add(END);
-	  }
-
-          c      = temp;
-	  startx = x;
-	}
-      }
-
-      if (x > startx && c != (Fl_Color)-1)
-      {
-	add_color(c);
-	add(POLYGON);
-	add_vertex(startx * 9000 / img->w() + 1000, 9500 - y * 9000 / img->h());
-	add_vertex(x * 9000 / img->w() + 1000,      9500 - y * 9000 / img->h());
-	add_vertex(x * 9000 / img->w() + 1000,      9500 - (y + 1) * 9000 / img->h());
-	add_vertex(startx * 9000 / img->w() + 1000, 9500 - (y + 1) * 9000 / img->h());
-	add(END);
-      }
-    }
-  } else {
-    int		i, j;			// Looping vars
-    int		ch;			// Current character
-    int		newch;			// New character
-    int		bg;			// Background color
-    char	val[16];		// Color value
-    const char	*lineptr,		// Pointer into line
-		*const*ptr;		// Pointer into data array
-    int		ncolors,		// Number of colors
-		chars_per_color;	// Characters per color
-    Fl_Color	*colors;		// Colors
-    int		red, green, blue;	// Red, green, and blue values
-    int		x, y;			// X & Y in image
-    int		startx;			// Starting X coord
-
-    // Get the pixmap data...
-    ptr = img->data();
-    sscanf(*ptr, "%*d%*d%d%d", &ncolors, &chars_per_color);
-
-    colors = new Fl_Color[1 << (chars_per_color * 8)];
-
-    // Read the colormap...
-    memset(colors, 0, sizeof(Fl_Color) << (chars_per_color * 8));
-    bg = ' ';
-
-    ptr ++;
-
-    if (ncolors < 0) {
-      // Read compressed colormap...
-      const uchar *cmapptr;
-
-      ncolors = -ncolors;
-
-      for (i = 0, cmapptr = (const uchar *)*ptr; i < ncolors; i ++, cmapptr += 4)
-        colors[cmapptr[0]] = fl_rgb_color(cmapptr[1], cmapptr[2], cmapptr[3]);
-
-      ptr ++;
-    } else {
-      for (i = 0; i < ncolors; i ++, ptr ++) {
-	// Get the color's character
-	lineptr = *ptr;
-	ch      = *lineptr++;
-
-        if (chars_per_color > 1) ch = (ch << 8) | *lineptr++;
-
-	// Get the color value...
-	if ((lineptr = strstr(lineptr, "c ")) == NULL) {
-	  // No color; make this black...
-	  colors[ch] = FL_BLACK;
-	} else if (lineptr[2] == '#') {
-	  // Read the RGB triplet...
-	  lineptr += 3;
-	  for (j = 0; j < 12; j ++)
-            if (!isxdigit(lineptr[j]))
-	      break;
-
-	  switch (j) {
-            case 0 :
-		bg = ch;
-	    default :
-		red = green = blue = 0;
-		break;
-
-            case 3 :
-		val[0] = lineptr[0];
-		val[1] = '\0';
-		red = 255 * strtol(val, NULL, 16) / 15;
-
-		val[0] = lineptr[1];
-		val[1] = '\0';
-		green = 255 * strtol(val, NULL, 16) / 15;
-
-		val[0] = lineptr[2];
-		val[1] = '\0';
-		blue = 255 * strtol(val, NULL, 16) / 15;
-		break;
-
-            case 6 :
-            case 9 :
-            case 12 :
-		j /= 3;
-
-		val[0] = lineptr[0];
-		val[1] = lineptr[1];
-		val[2] = '\0';
-		red = strtol(val, NULL, 16);
-
-		val[0] = lineptr[j + 0];
-		val[1] = lineptr[j + 1];
-		val[2] = '\0';
-		green = strtol(val, NULL, 16);
-
-		val[0] = lineptr[2 * j + 0];
-		val[1] = lineptr[2 * j + 1];
-		val[2] = '\0';
-		blue = strtol(val, NULL, 16);
-		break;
-	  }
-
-	  colors[ch] = fl_rgb_color((uchar)red, (uchar)green, (uchar)blue);
-	} else {
-	  // Read a color name...
-	  if (strncasecmp(lineptr + 2, "white", 5) == 0) colors[ch] = FL_WHITE;
-	  else if (strncasecmp(lineptr + 2, "black", 5) == 0) colors[ch] = FL_BLACK;
-	  else if (strncasecmp(lineptr + 2, "none", 4) == 0) {
-            colors[ch] = FL_BLACK;
-	    bg = ch;
-	  } else colors[ch] = FL_GRAY;
-	}
-      }
-    }
-
-    // Read the image data...
-    for (y = 0; y < img->h(); y ++, ptr ++) {
-      lineptr = *ptr;
-      startx  = 0;
-      ch      = bg;
-
-      for (x = 0; x < img->w(); x ++) {
-	newch = *lineptr++;
-
-        if (chars_per_color > 1) newch = (newch << 8) | *lineptr++;
-
-	if (newch != ch) {
-	  if (ch != bg) {
-            add_color(colors[ch]);
-	    add(POLYGON);
-	    add_vertex(startx * 9000 / img->w() + 1000, 9500 - y * 9000 / img->h());
-	    add_vertex(x * 9000 / img->w() + 1000,      9500 - y * 9000 / img->h());
-	    add_vertex(x * 9000 / img->w() + 1000,      9500 - (y + 1) * 9000 / img->h());
-	    add_vertex(startx * 9000 / img->w() + 1000, 9500 - (y + 1) * 9000 / img->h());
-	    add(END);
-          }
-
-	  ch     = newch;
-	  startx = x;
-	}
-      }
-
-      if (ch != bg) {
-	add_color(colors[ch]);
-	add(POLYGON);
-	add_vertex(startx * 9000 / img->w() + 1000, 9500 - y * 9000 / img->h());
-	add_vertex(x * 9000 / img->w() + 1000,      9500 - y * 9000 / img->h());
-	add_vertex(x * 9000 / img->w() + 1000,      9500 - (y + 1) * 9000 / img->h());
-	add_vertex(startx * 9000 / img->w() + 1000, 9500 - (y + 1) * 9000 / img->h());
-	add(END);
-      }
-    }
-
-    // Free the colormap...
-    delete[] colors;
-  }
-
-  img->release();
-
-#ifdef DEBUG
-{
-  int i;
-  printf("Icon File \"%s\":\n", ifile);
-  for (i = 0; i < num_data_; i ++)
-  {
-    printf("    %d,\n", data_[i]);
-  }
-}
-#endif // DEBUG
-
-  return 0;
-}
-
-
-/**
-  Loads all system-defined icons. This call is useful when using the
-  FileChooser widget and should be used when the application starts:
-
-  \code
-  Fl_File_Icon::load_system_icons();
-  \endcode
-*/
-void
-Fl_File_Icon::load_system_icons(void) {
-  int		i;		// Looping var
-  Fl_File_Icon	*icon;		// New icons
-  char		filename[FL_PATH_MAX];	// Filename
-  char		icondir[FL_PATH_MAX];	// Icon directory
-  static int	init = 0;	// Have the icons been initialized?
-  const char * const icondirs[] = {
-		  "Bluecurve",	// Icon directories to look for, in order
-		  "crystalsvg",
-		  "default.kde",
-		  "hicolor",
-		  NULL
-		};
-  static short	plain[] = {	// Plain file icon
-		  COLOR, -1, -1, OUTLINEPOLYGON, 0, FL_GRAY,
-		  VERTEX, 2000, 1000, VERTEX, 2000, 9000,
-		  VERTEX, 6000, 9000, VERTEX, 8000, 7000,
-		  VERTEX, 8000, 1000, END, OUTLINEPOLYGON, 0, FL_GRAY,
-		  VERTEX, 6000, 9000, VERTEX, 6000, 7000,
-		  VERTEX, 8000, 7000, END,
-		  COLOR, 0, FL_BLACK, LINE, VERTEX, 6000, 7000,
-		  VERTEX, 8000, 7000, VERTEX, 8000, 1000,
-		  VERTEX, 2000, 1000, END, LINE, VERTEX, 3000, 7000,
-		  VERTEX, 5000, 7000, END, LINE, VERTEX, 3000, 6000,
-		  VERTEX, 5000, 6000, END, LINE, VERTEX, 3000, 5000,
-		  VERTEX, 7000, 5000, END, LINE, VERTEX, 3000, 4000,
-		  VERTEX, 7000, 4000, END, LINE, VERTEX, 3000, 3000,
-		  VERTEX, 7000, 3000, END, LINE, VERTEX, 3000, 2000,
-		  VERTEX, 7000, 2000, END,
-		  END
-		};
-  static short	image[] = {	// Image file icon
-		  COLOR, -1, -1, OUTLINEPOLYGON, 0, FL_GRAY,
-		  VERTEX, 2000, 1000, VERTEX, 2000, 9000,
-		  VERTEX, 6000, 9000, VERTEX, 8000, 7000,
-		  VERTEX, 8000, 1000, END, OUTLINEPOLYGON, 0, FL_GRAY,
-		  VERTEX, 6000, 9000, VERTEX, 6000, 7000,
-		  VERTEX, 8000, 7000, END,
-		  COLOR, 0, FL_BLACK, LINE, VERTEX, 6000, 7000,
-		  VERTEX, 8000, 7000, VERTEX, 8000, 1000,
-		  VERTEX, 2000, 1000, END,
-		  COLOR, 0, FL_RED, POLYGON, VERTEX, 3500, 2500,
-		  VERTEX, 3000, 3000, VERTEX, 3000, 4000,
-		  VERTEX, 3500, 4500, VERTEX, 4500, 4500,
-		  VERTEX, 5000, 4000, VERTEX, 5000, 3000,
-		  VERTEX, 4500, 2500, END,
-		  COLOR, 0, FL_GREEN, POLYGON, VERTEX, 5500, 2500,
-		  VERTEX, 5000, 3000, VERTEX, 5000, 4000,
-		  VERTEX, 5500, 4500, VERTEX, 6500, 4500,
-		  VERTEX, 7000, 4000, VERTEX, 7000, 3000,
-		  VERTEX, 6500, 2500, END,
-		  COLOR, 0, FL_BLUE, POLYGON, VERTEX, 4500, 3500,
-		  VERTEX, 4000, 4000, VERTEX, 4000, 5000,
-		  VERTEX, 4500, 5500, VERTEX, 5500, 5500,
-		  VERTEX, 6000, 5000, VERTEX, 6000, 4000,
-		  VERTEX, 5500, 3500, END,
-		  END
-		};
-  static short	dir[] = {	// Directory icon
-		  COLOR, -1, -1, POLYGON, VERTEX, 1000, 1000,
-		  VERTEX, 1000, 7500,  VERTEX, 9000, 7500,
-		  VERTEX, 9000, 1000, END,
-		  POLYGON, VERTEX, 1000, 7500, VERTEX, 2500, 9000,
-		  VERTEX, 5000, 9000, VERTEX, 6500, 7500, END,
-		  COLOR, 0, FL_WHITE, LINE, VERTEX, 1500, 1500,
-		  VERTEX, 1500, 7000, VERTEX, 9000, 7000, END,
-		  COLOR, 0, FL_BLACK, LINE, VERTEX, 9000, 7500,
-		  VERTEX, 9000, 1000, VERTEX, 1000, 1000, END,
-		  COLOR, 0, FL_GRAY, LINE, VERTEX, 1000, 1000,
-		  VERTEX, 1000, 7500, VERTEX, 2500, 9000,
-		  VERTEX, 5000, 9000, VERTEX, 6500, 7500,
-		  VERTEX, 9000, 7500, END,
-		  END
-		};
-
-
-  // Add symbols if they haven't been added already...
-  if (!init) {
-    // This method requires the images library...
-    fl_register_images();
-
-    if (!kdedir) {
-      // Figure out where KDE is installed...
-      if ((kdedir = getenv("KDEDIR")) == NULL) {
-        if (!access("/opt/kde", F_OK)) kdedir = "/opt/kde";
-	else if (!access("/usr/local/share/mimelnk", F_OK)) kdedir = "/usr/local";
-        else kdedir = "/usr";
-      }
-    }
-
-    snprintf(filename, sizeof(filename), "%s/share/mimelnk", kdedir);
-
-    if (!access(filename, F_OK)) {
-      // Load KDE icons...
-      icon = new Fl_File_Icon("*", Fl_File_Icon::PLAIN);
-
-      for (i = 0; icondirs[i]; i ++) {
-	snprintf(icondir, sizeof(icondir), "%s/share/icons/%s", kdedir,
-		 icondirs[i]);
-
-        if (!access(icondir, F_OK)) break;
-      }
-
-      if (icondirs[i]) {
-        snprintf(filename, sizeof(filename), "%s/16x16/mimetypes/unknown.png",
-	         icondir);
-      } else {
-	snprintf(filename, sizeof(filename), "%s/share/icons/unknown.xpm",
-	         kdedir);
-      }
-
-      if (!access(filename, F_OK)) icon->load_image(filename);
-
-      icon = new Fl_File_Icon("*", Fl_File_Icon::LINK);
-
-      snprintf(filename, sizeof(filename), "%s/16x16/filesystems/link.png",
-               icondir);
-
-      if (!access(filename, F_OK)) icon->load_image(filename);
-
-      snprintf(filename, sizeof(filename), "%s/share/mimelnk", kdedir);
-      load_kde_icons(filename, icondir);
-    } else if (!access("/usr/share/icons/folder.xpm", F_OK)) {
-      // Load GNOME icons...
-      icon = new Fl_File_Icon("*", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/share/icons/page.xpm");
-
-      icon = new Fl_File_Icon("*", Fl_File_Icon::DIRECTORY);
-      icon->load_image("/usr/share/icons/folder.xpm");
-    } else if (!access("/usr/dt/appconfig/icons", F_OK)) {
-      // Load CDE icons...
-      icon = new Fl_File_Icon("*", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/dt/appconfig/icons/C/Dtdata.m.pm");
-
-      icon = new Fl_File_Icon("*", Fl_File_Icon::DIRECTORY);
-      icon->load_image("/usr/dt/appconfig/icons/C/DtdirB.m.pm");
-
-      icon = new Fl_File_Icon("core", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/dt/appconfig/icons/C/Dtcore.m.pm");
-
-      icon = new Fl_File_Icon("*.{bmp|bw|gif|jpg|pbm|pcd|pgm|ppm|png|ras|rgb|tif|xbm|xpm}", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/dt/appconfig/icons/C/Dtimage.m.pm");
-
-      icon = new Fl_File_Icon("*.{eps|pdf|ps}", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/dt/appconfig/icons/C/Dtps.m.pm");
-
-      icon = new Fl_File_Icon("*.ppd", Fl_File_Icon::PLAIN);
-      icon->load_image("/usr/dt/appconfig/icons/C/DtPrtpr.m.pm");
-    } else if (!access("/usr/lib/filetype", F_OK)) {
-      // Load SGI icons...
-      icon = new Fl_File_Icon("*", Fl_File_Icon::PLAIN);
-      icon->load_fti("/usr/lib/filetype/iconlib/generic.doc.fti");
-
-      icon = new Fl_File_Icon("*", Fl_File_Icon::DIRECTORY);
-      icon->load_fti("/usr/lib/filetype/iconlib/generic.folder.closed.fti");
-
-      icon = new Fl_File_Icon("core", Fl_File_Icon::PLAIN);
-      icon->load_fti("/usr/lib/filetype/default/iconlib/CoreFile.fti");
-
-      icon = new Fl_File_Icon("*.{bmp|bw|gif|jpg|pbm|pcd|pgm|ppm|png|ras|rgb|tif|xbm|xpm}", Fl_File_Icon::PLAIN);
-      icon->load_fti("/usr/lib/filetype/system/iconlib/ImageFile.fti");
-
-      if (!access("/usr/lib/filetype/install/iconlib/acroread.doc.fti", F_OK)) {
-	icon = new Fl_File_Icon("*.{eps|ps}", Fl_File_Icon::PLAIN);
-	icon->load_fti("/usr/lib/filetype/system/iconlib/PostScriptFile.closed.fti");
-
-	icon = new Fl_File_Icon("*.pdf", Fl_File_Icon::PLAIN);
-	icon->load_fti("/usr/lib/filetype/install/iconlib/acroread.doc.fti");
-      } else {
-	icon = new Fl_File_Icon("*.{eps|pdf|ps}", Fl_File_Icon::PLAIN);
-	icon->load_fti("/usr/lib/filetype/system/iconlib/PostScriptFile.closed.fti");
-      }
-
-      if (!access("/usr/lib/filetype/install/iconlib/html.fti", F_OK)) {
-	icon = new Fl_File_Icon("*.{htm|html|shtml}", Fl_File_Icon::PLAIN);
-        icon->load_fti("/usr/lib/filetype/iconlib/generic.doc.fti");
-	icon->load_fti("/usr/lib/filetype/install/iconlib/html.fti");
-      }
-
-      if (!access("/usr/lib/filetype/install/iconlib/color.ps.idle.fti", F_OK)) {
-	icon = new Fl_File_Icon("*.ppd", Fl_File_Icon::PLAIN);
-	icon->load_fti("/usr/lib/filetype/install/iconlib/color.ps.idle.fti");
-      }
-    } else {
-      // Create the default icons...
-      new Fl_File_Icon("*", Fl_File_Icon::PLAIN, sizeof(plain) / sizeof(plain[0]), plain);
-      new Fl_File_Icon("*.{bm|bmp|bw|gif|jpg|pbm|pcd|pgm|ppm|png|ras|rgb|tif|xbm|xpm}", Fl_File_Icon::PLAIN,
-                   sizeof(image) / sizeof(image[0]), image);
-      new Fl_File_Icon("*", Fl_File_Icon::DIRECTORY, sizeof(dir) / sizeof(dir[0]), dir);
-    }
-
-    // Mark things as initialized...
-    init = 1;
-
-#ifdef DEBUG
-    int count;
-    Fl_File_Icon *temp;
-    for (count = 0, temp = first_; temp; temp = temp->next_, count ++);
-    printf("count of Fl_File_Icon's is %d...\n", count);
-#endif // DEBUG
-  }
-}
-
-
-//
-// 'load_kde_icons()' - Load KDE icon files.
-//
-
-static void
-load_kde_icons(const char *directory,	// I - Directory to load
-               const char *icondir) {	// I - Location of icons
-  int		i;			// Looping var
-  int		n;			// Number of entries in directory
-  dirent	**entries;		// Entries in directory
-  char		full[FL_PATH_MAX];	// Full name of file
-
-
-  entries = (dirent **)0;
-  n       = fl_filename_list(directory, &entries);
-
-  for (i = 0; i < n; i ++) {
-    if (entries[i]->d_name[0] != '.') {
-      snprintf(full, sizeof(full), "%s/%s", directory, entries[i]->d_name);
-
-      if (fl_filename_isdir(full)) load_kde_icons(full, icondir);
-      else load_kde_mimelnk(full, icondir);
-    }
-
-    free((void *)entries[i]);
-  }
-
-  free((void*)entries);
-}
-
-
-//
-// 'load_kde_mimelnk()' - Load a KDE "mimelnk" file.
-//
-
-static void
-load_kde_mimelnk(const char *filename,	// I - mimelnk filename
-                 const char *icondir) {	// I - Location of icons
-  FILE		*fp;
-  char		tmp[1024];
-  char		iconfilename[FL_PATH_MAX];
-  char		pattern[1024];
-  char		mimetype[1024];
-  char		*val;
-  char		full_iconfilename[FL_PATH_MAX];
-  Fl_File_Icon	*icon;
-
-
-  mimetype[0]     = '\0';
-  pattern[0]      = '\0';
-  iconfilename[0] = '\0';
-
-  if ((fp = fl_fopen(filename, "rb")) != NULL) {
-    while (fgets(tmp, sizeof(tmp), fp)) {
-      if ((val = get_kde_val(tmp, "Icon")) != NULL)
-	strlcpy(iconfilename, val, sizeof(iconfilename));
-      else if ((val = get_kde_val(tmp, "MimeType")) != NULL)
-	strlcpy(mimetype, val, sizeof(mimetype));
-      else if ((val = get_kde_val(tmp, "Patterns")) != NULL)
-	strlcpy(pattern, val, sizeof(pattern));
-    }
-
-    fclose(fp);
-
-#ifdef DEBUG
-    printf("%s: Icon=\"%s\", MimeType=\"%s\", Patterns=\"%s\"\n", filename,
-           iconfilename, mimetype, pattern);
-#endif // DEBUG
-
-    if (!pattern[0] && strncmp(mimetype, "inode/", 6)) return;
-
-    if (iconfilename[0]) {
-      if (iconfilename[0] == '/') {
-        strlcpy(full_iconfilename, iconfilename, sizeof(full_iconfilename));
-      } else if (!access(icondir, F_OK)) {
-        // KDE 3.x and 2.x icons
-	int		i;		// Looping var
-	static const char *paths[] = {	// Subdirs to look in...
-	  "16x16/actions",
-	  "16x16/apps",
-	  "16x16/devices",
-	  "16x16/filesystems",
-	  "16x16/mimetypes",
-/*
-	  "20x20/actions",
-	  "20x20/apps",
-	  "20x20/devices",
-	  "20x20/filesystems",
-	  "20x20/mimetypes",
-
-	  "22x22/actions",
-	  "22x22/apps",
-	  "22x22/devices",
-	  "22x22/filesystems",
-	  "22x22/mimetypes",
-
-	  "24x24/actions",
-	  "24x24/apps",
-	  "24x24/devices",
-	  "24x24/filesystems",
-	  "24x24/mimetypes",
-*/
-	  "32x32/actions",
-	  "32x32/apps",
-	  "32x32/devices",
-	  "32x32/filesystems",
-	  "32x32/mimetypes",
-/*
-	  "36x36/actions",
-	  "36x36/apps",
-	  "36x36/devices",
-	  "36x36/filesystems",
-	  "36x36/mimetypes",
-
-	  "48x48/actions",
-	  "48x48/apps",
-	  "48x48/devices",
-	  "48x48/filesystems",
-	  "48x48/mimetypes",
-
-	  "64x64/actions",
-	  "64x64/apps",
-	  "64x64/devices",
-	  "64x64/filesystems",
-	  "64x64/mimetypes",
-
-	  "96x96/actions",
-	  "96x96/apps",
-	  "96x96/devices",
-	  "96x96/filesystems",
-	  "96x96/mimetypes"
-*/	};
-
-        for (i = 0; i < (int)(sizeof(paths) / sizeof(paths[0])); i ++) {
-          snprintf(full_iconfilename, sizeof(full_iconfilename),
-	           "%s/%s/%s.png", icondir, paths[i], iconfilename);
-
-          if (!access(full_iconfilename, F_OK)) break;
-	}
-
-        if (i >= (int)(sizeof(paths) / sizeof(paths[0]))) return;
-      } else {
-        // KDE 1.x icons
-        snprintf(full_iconfilename, sizeof(full_iconfilename),
-	         "%s/%s", tmp, iconfilename);
-
-        if (access(full_iconfilename, F_OK)) return;
-      }
-
-      if (strncmp(mimetype, "inode/", 6) == 0) {
-	if (!strcmp(mimetype + 6, "directory"))
-	  icon = new Fl_File_Icon("*", Fl_File_Icon::DIRECTORY);
-	else if (!strcmp(mimetype + 6, "blockdevice"))
-	  icon = new Fl_File_Icon("*", Fl_File_Icon::DEVICE);
-	else if (!strcmp(mimetype + 6, "fifo"))
-	  icon = new Fl_File_Icon("*", Fl_File_Icon::FIFO);
-	else return;
-      } else {
-        icon = new Fl_File_Icon(kde_to_fltk_pattern(pattern),
-                                Fl_File_Icon::PLAIN);
-      }
-
-      icon->load(full_iconfilename);
-    }
-  }
-}
-
-
-//
-// 'kde_to_fltk_pattern()' - Convert a KDE pattern to a FLTK pattern.
-//
-
-static char *
-kde_to_fltk_pattern(const char *kdepattern) {
-  char	*pattern,
-	*patptr;
-
-
-  pattern = (char *)malloc(strlen(kdepattern) + 3);
-  strcpy(pattern, "{");
-  strcpy(pattern + 1, kdepattern);
-
-  if (pattern[strlen(pattern) - 1] == ';') pattern[strlen(pattern) - 1] = '\0';
-
-  strcat(pattern, "}");
-
-  for (patptr = pattern; *patptr; patptr ++) {
-    if (*patptr == ';') *patptr = '|';
-  }
-
-  return (pattern);
-}
-
-
-//
-// 'get_kde_val()' - Get a KDE value.
-//
-
-static char *
-get_kde_val(char       *str,
-            const char *key) {
-  while (*str == *key) {
-    str ++;
-    key ++;
-  }
-
-  if (*key == '\0' && *str == '=') {
-    if (str[strlen(str) - 1] == '\n') str[strlen(str) - 1] = '\0';
-
-    return (str + 1);
-  }
-
-  return ((char *)0);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_File_Input.cxx
+++ /dev/null
@@ -1,289 +1,0 @@
-//
-// "$Id$"
-//
-// File_Input header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Original version Copyright 1998 by Curtis Edwards.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/filename.H>
-#include <stdio.h>
-#include "flstring.h"
-
-
-//
-// Height of directory buttons...
-//
-
-#define DIR_HEIGHT	10
-
-
-//
-// Redraw bit for directory bar...
-//
-
-#define FL_DAMAGE_BAR	0x10
-
-
-/**
-  Creates a new Fl_File_Input widget using the given position,
-  size, and label string. The default boxtype is FL_DOWN_BOX.
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
-*/
-Fl_File_Input::Fl_File_Input(int X, int Y, int W, int H, const char *L)
-  : Fl_Input(X, Y, W, H, L) {
-  buttons_[0] = 0;
-  errorcolor_ = FL_RED;
-  ok_entry_   = 1;
-  pressed_    = -1;
-
-  down_box(FL_UP_BOX);
-}
-
-/**
-  Draw directory buttons.
-*/
-void Fl_File_Input::draw_buttons() {
-  int	i,					// Looping var
-	X;					// Current X position
-
-
-  if (damage() & (FL_DAMAGE_BAR | FL_DAMAGE_ALL)) {
-    update_buttons();
-  }
-
-  for (X = 0, i = 0; buttons_[i]; i ++)
-  {
-    if ((X + buttons_[i]) > xscroll()) {
-      if (X < xscroll()) {
-        draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-                 x(), y(), X + buttons_[i] - xscroll(), DIR_HEIGHT, FL_GRAY);
-      } else if ((X + buttons_[i] - xscroll()) > w()) {
-	draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-        	 x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT,
-		 FL_GRAY);
-      } else {
-        draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-	         x() + X - xscroll(), y(), buttons_[i], DIR_HEIGHT, FL_GRAY);
-      }
-    }
-
-    X += buttons_[i];
-  }
-
-  if (X < w()) {
-    draw_box(pressed_ == i ? fl_down(down_box()) : down_box(),
-             x() + X - xscroll(), y(), w() - X + xscroll(), DIR_HEIGHT, FL_GRAY);
-  }
-}
-
-/**
-  Update the sizes of the directory buttons.
-*/
-void Fl_File_Input::update_buttons() {
-  int		i;				// Looping var
-  const char	*start,				// Start of path component
-		*end;				// End of path component
-
-
-//  puts("update_buttons()");
-
-  // Set the current font & size...
-  fl_font(textfont(), textsize());
-
-  // Loop through the value string, setting widths...
-  for (i = 0, start = value();
-       start && i < (int)(sizeof(buttons_) / sizeof(buttons_[0]) - 1);
-       start = end, i ++) {
-//    printf("    start = \"%s\"\n", start);
-    if ((end = strchr(start, '/')) == NULL)
-#if defined(WIN32) || defined(__EMX__)
-      if ((end = strchr(start, '\\')) == NULL)
-#endif // WIN32 || __EMX__
-      break;
-
-    end ++;
-
-    buttons_[i] = (short)fl_width(start, (int) (end - start));
-    if (!i) buttons_[i] += Fl::box_dx(box()) + 6;
-  }
-
-//  printf("    found %d components/buttons...\n", i);
-
-  buttons_[i] = 0;
-}
-
-
-/**
-  Sets the value of the widget given a new string value and its length.
-  Returns non 0 on success.
-  \param[in] str new string value
-  \param[in] len lengh of value
-*/
-int						// O - TRUE on success
-Fl_File_Input::value(const char *str,		// I - New string value
-                     int        len) {		// I - Length of value
-  damage(FL_DAMAGE_BAR);
-  return Fl_Input::value(str,len);
-}
-
-
-/**
-  Sets the value of the widget given a new string value.
-  Returns non 0 on success.
-  \param[in] str new string value
-*/
-int						// O - TRUE on success
-Fl_File_Input::value(const char *str) {		// I - New string value
-  damage(FL_DAMAGE_BAR);
-  return Fl_Input::value(str);
-}
-
-
-/**
-  Draws the file input widget
-*/
-void Fl_File_Input::draw() {
-  Fl_Boxtype b = box();
-  if (damage() & (FL_DAMAGE_BAR | FL_DAMAGE_ALL)) draw_buttons();
-  // this flag keeps Fl_Input_::drawtext from drawing a bogus box!
-  char must_trick_fl_input_ = 
-    Fl::focus()!=this && !size() && !(damage()&FL_DAMAGE_ALL);
-  if ((damage() & FL_DAMAGE_ALL) || must_trick_fl_input_) 
-    draw_box(b,x(),y()+DIR_HEIGHT,w(),h()-DIR_HEIGHT,color());
-  if (!must_trick_fl_input_) 
-    Fl_Input_::drawtext(x()+Fl::box_dx(b)+3, y()+Fl::box_dy(b)+DIR_HEIGHT,
-		        w()-Fl::box_dw(b)-6, h()-Fl::box_dh(b)-DIR_HEIGHT);
-}
-
-
-
-/**
-  Handle events in the widget.
-  Return non zero if event is handled.
-  \param[in] event
-*/
-int						// O - TRUE if we handled event
-Fl_File_Input::handle(int event) 		// I - Event
-{
-//  printf("handle(event = %d)\n", event);
-  static char inButtonBar = 0;
-
-  switch (event) {
-    case FL_MOVE :
-    case FL_ENTER :
-      if (active_r()) {
-	if (Fl::event_y() < (y() + DIR_HEIGHT)) 
-          window()->cursor(FL_CURSOR_DEFAULT);
-	else 
-          window()->cursor(FL_CURSOR_INSERT);
-      }
-
-      return 1;
-
-    case FL_PUSH :
-      inButtonBar = (Fl::event_y() < (y() + DIR_HEIGHT));
-    case FL_RELEASE :
-    case FL_DRAG :
-      if (inButtonBar) 
-        return handle_button(event);
-      else
-        return Fl_Input::handle(event);
-
-    default :
-      { Fl_Widget_Tracker wp(this);
-	if (Fl_Input::handle(event)) {
-	  if (wp.exists())
-	    damage(FL_DAMAGE_BAR);
-	  return 1;
-	}
-      }
-      return 0;
-  }
-}
-
-
-
-/**
-  Handles button events in the widget.
-  Return non zero if event is handled.
-  \param[in] event
-*/
-int						// O - TRUE if we handled event
-Fl_File_Input::handle_button(int event)		// I - Event
-{
-  int		i,				// Looping var
-		X;				// Current X position
-  char		*start,				// Start of path component
-		*end;				// End of path component
-  char		newvalue[FL_PATH_MAX];		// New value
-
-
-  // Figure out which button is being pressed...
-  for (X = 0, i = 0; buttons_[i]; i ++)
-  {
-    X += buttons_[i];
-
-    if (X > xscroll() && Fl::event_x() < (x() + X - xscroll())) break;
-  }
-
-//  printf("handle_button(event = %d), button = %d\n", event, i);
-
-  // Redraw the directory bar...
-  if (event == FL_RELEASE) pressed_ = -1;
-  else pressed_ = (short)i;
-
-  window()->make_current();
-  draw_buttons();
-
-  // Return immediately if the user is clicking on the last button or
-  // has not released the mouse button...
-  if (!buttons_[i] || event != FL_RELEASE) return 1;
-
-  // Figure out where to truncate the path...
-  strlcpy(newvalue, value(), sizeof(newvalue));
-
-  for (start = newvalue, end = start; start && i >= 0; start = end, i --) {
-//    printf("    start = \"%s\"\n", start);
-    if ((end = strchr(start, '/')) == NULL)
-#if defined(WIN32) || defined(__EMX__)
-      if ((end = strchr(start, '\\')) == NULL)
-#endif // WIN32 || __EMX__
-      break;
-
-    end ++;
-  }
-
-  if (i < 0) {
-    // Found the end; truncate the value and update the buttons...
-    *start = '\0';
-    value(newvalue, (int) (start - newvalue) );
-
-    // Then do the callbacks, if necessary...
-    set_changed();
-    if (when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE) ) do_callback();
-  }
-
-  return 1;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Font.H
+++ /dev/null
@@ -1,108 +1,0 @@
-//
-// "$Id$"
-//
-// Font definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Two internal fltk data structures:
-//
-// Fl_Fontdesc: an entry into the fl_font() table.  There is one of these
-// for each fltk font number.
-//
-#ifndef FL_FONT_
-#define FL_FONT_
-
-#include <config.h>
-
-#  if USE_XFT
-typedef struct _XftFont XftFont;
-#  elif !defined(WIN32) && !defined(__APPLE__)
-#    include "Xutf8.h"
-#  endif // USE_XFT
-
-/**
-   This a structure for an actual system font, with junk to
-   help choose it and info on character sizes.  Each Fl_Fontdesc has a
-   linked list of these.  These are created the first time each system
-   font/size combination is used.
-*/
-class Fl_Font_Descriptor {
-public:
-  /** linked list for this Fl_Fontdesc */
-  Fl_Font_Descriptor *next;	
-  Fl_Fontsize size; /**< font size */
-#ifndef FL_DOXYGEN // don't bother with platorm dependant details in the doc. 
-#  ifdef WIN32
-  HFONT fid;
-  int *width[64];
-  TEXTMETRIC metr;
-  int angle;
-  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
-#  elif defined(__APPLE_QUARTZ__)
-  FL_EXPORT Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
-  ATSUTextLayout layout;
-#     if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  CTFontRef fontref;
-  // the unicode span is divided in 512 blocks of 128 characters
-  float *width[512]; // array of arrays of character widths
-#     endif
-  ATSUStyle style;
-  short ascent, descent, q_width;
-#  elif USE_XFT
-  XftFont* font;
-  //const char* encoding;
-  int angle;
-  FL_EXPORT Fl_Font_Descriptor(const char* xfontname, Fl_Fontsize size, int angle);
-#  else
-  XUtf8FontStruct* font;	// X UTF-8 font information
-  FL_EXPORT Fl_Font_Descriptor(const char* xfontname);
-#  endif
-#  if HAVE_GL
-  unsigned int listbase;// base of display list, 0 = none
-#ifndef __APPLE_QUARTZ__
-  char glok[64];
-#endif // __APPLE_QUARTZ__
-#  endif // HAVE_GL
-
-  FL_EXPORT ~Fl_Font_Descriptor();
-
-#endif // FL_DOXYGEN
-};
-
-//extern FL_EXPORT Fl_Font_Descriptor *fl_fontsize; // the currently selected one
-
-struct Fl_Fontdesc {
-  const char *name;
-  char fontname[128];	// "Pretty" font name
-  Fl_Font_Descriptor *first;	// linked list of sizes of this style
-#  ifndef WIN32
-  char **xlist;		// matched X font names
-  int n;		// size of xlist, negative = don't free xlist!
-#  endif
-};
-
-extern FL_EXPORT Fl_Fontdesc *fl_fonts; // the table
-
-#  ifndef WIN32
-// functions for parsing X font names:
-FL_EXPORT const char* fl_font_word(const char *p, int n);
-FL_EXPORT char *fl_find_fontsize(char *name);
-#  endif
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_GDI_Printer.cxx
+++ /dev/null
@@ -1,287 +1,0 @@
-//
-// "$Id$"
-//
-// Support for WIN32 printing for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#include <FL/Fl_Printer.H>
-
-
-#include <FL/fl_ask.H>
-#include <FL/math.h>
-
-extern HWND fl_window;
-
-Fl_System_Printer::Fl_System_Printer(void) : Fl_Paged_Device() {
-  hPr = NULL;
-  driver(new Fl_GDI_Printer_Graphics_Driver);
-}
-
-Fl_System_Printer::~Fl_System_Printer(void) {
-  if (hPr) end_job();
-  delete driver();
-}
-
-static void WIN_SetupPrinterDeviceContext(HDC prHDC)
-{
-  if ( !prHDC ) return;
-  
-  fl_window = 0;
-  fl_gc = prHDC;
-  SetGraphicsMode(prHDC, GM_ADVANCED); // to allow for rotations
-  SetMapMode(prHDC, MM_ANISOTROPIC);
-  SetTextAlign(prHDC, TA_BASELINE|TA_LEFT);
-  SetBkMode(prHDC, TRANSPARENT);	
-  // this matches 720 logical units to the number of device units in 10 inches of paper
-  // thus the logical unit is the point (= 1/72 inch)
-  SetWindowExtEx(prHDC, 720, 720, NULL);
-  SetViewportExtEx(prHDC, 10*GetDeviceCaps(prHDC, LOGPIXELSX), 10*GetDeviceCaps(prHDC, LOGPIXELSY), NULL);
-}
-
-
-int Fl_System_Printer::start_job (int pagecount, int *frompage, int *topage)
-// returns 0 iff OK
-{
-  if (pagecount == 0) pagecount = 10000;
-  DWORD       commdlgerr;
-  DOCINFO     di;
-  char        docName [256];
-  int err = 0;
-  
-  abortPrint = FALSE;
-  memset (&pd, 0, sizeof (PRINTDLG));
-  pd.lStructSize = sizeof (PRINTDLG);
-  pd.hwndOwner = GetForegroundWindow();
-  pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE | PD_NOSELECTION;
-  pd.nMinPage = 1;
-  pd.nMaxPage = pagecount;
-  BOOL b = PrintDlg (&pd);
-  if (pd.hwndOwner) { // restore the correct state of mouse buttons and keyboard modifier keys (STR #3221)
-    WNDPROC windproc = (WNDPROC)GetWindowLongPtrW(pd.hwndOwner, GWLP_WNDPROC);
-    CallWindowProc(windproc, pd.hwndOwner, WM_ACTIVATEAPP, 1, 0);
-  }
-  if (b != 0) {
-    hPr = pd.hDC;
-    if (hPr != NULL) {
-      strcpy (docName, "FLTK");
-      memset(&di, 0, sizeof(DOCINFO));
-      di.cbSize = sizeof (DOCINFO);
-      di.lpszDocName = (LPCSTR) docName;
-      prerr = StartDoc (hPr, &di);
-      if (prerr < 1) {
-        abortPrint = TRUE;
-        //fl_alert ("StartDoc error %d", prerr);
-        err = 1;
-      }
-    } else {
-      commdlgerr = CommDlgExtendedError ();
-      fl_alert ("Unable to create print context, error %lu",
-                (unsigned long) commdlgerr);
-      err = 1;
-    }
-  } else {
-    err = 1;
-  }
-  if(!err) {
-    if((pd.Flags & PD_PAGENUMS) != 0 ) {
-      if (frompage) *frompage = pd.nFromPage;
-      if (topage) *topage = pd.nToPage;
-    }
-    else {
-      if (frompage) *frompage = 1;
-      if (topage) *topage = pagecount;
-    }
-    x_offset = 0;
-    y_offset = 0;
-    WIN_SetupPrinterDeviceContext (hPr);
-    gc = (void *)fl_gc;
-    this->set_current();
-  }
-  return err;
-}
-
-void Fl_System_Printer::end_job (void)
-{
-  Fl_Display_Device::display_device()->set_current();
-  if (hPr != NULL) {
-    if (! abortPrint) {
-      prerr = EndDoc (hPr);
-      if (prerr < 0) {
-	fl_alert ("EndDoc error %d", prerr);
-      }
-    }
-    DeleteDC (hPr);
-    if (pd.hDevMode != NULL) {
-      GlobalFree (pd.hDevMode);
-    }
-    if (pd.hDevNames != NULL) {
-      GlobalFree (pd.hDevNames);
-    }
-  }
-  hPr = NULL;
-}
-
-void Fl_System_Printer::absolute_printable_rect(int *x, int *y, int *w, int *h)
-{
-  POINT         physPageSize;
-  POINT         pixelsPerInch;
-  XFORM		transform;
-    
-  if (hPr == NULL) return;
-  GetWorldTransform(fl_gc, &transform);
-  ModifyWorldTransform(fl_gc, NULL, MWT_IDENTITY);
-  SetWindowOrgEx(fl_gc, 0, 0, NULL);
-  
-  physPageSize.x = GetDeviceCaps(hPr, HORZRES);
-  physPageSize.y = GetDeviceCaps(hPr, VERTRES);
-  DPtoLP(hPr, &physPageSize, 1);
-  *w = physPageSize.x + 1;
-  *h = physPageSize.y + 1;
-  pixelsPerInch.x = GetDeviceCaps(hPr, LOGPIXELSX);
-  pixelsPerInch.y = GetDeviceCaps(hPr, LOGPIXELSY);
-  DPtoLP(hPr, &pixelsPerInch, 1);
-  left_margin = (pixelsPerInch.x / 4);
-  *w -= (pixelsPerInch.x / 2);
-  top_margin = (pixelsPerInch.y / 4);
-  *h -= (pixelsPerInch.y / 2);
-  
-  *x = left_margin;
-  *y = top_margin;
-  origin(x_offset, y_offset);
-  SetWorldTransform(fl_gc, &transform);
-}
-
-void Fl_System_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  int x = 0, y = 0, w = 0, h = 0;
-  absolute_printable_rect(&x, &y, &w, &h);
-  if (left) *left = x;
-  if (top) *top = y;
-  if (right) *right = x;
-  if (bottom) *bottom = y;
-}
-
-int Fl_System_Printer::printable_rect(int *w, int *h)
-{
-  int x, y;
-  absolute_printable_rect(&x, &y, w, h);
-  return 0;
-}
-
-int Fl_System_Printer::start_page (void)
-{
-  int  rsult, w, h;
-  
-  rsult = 0;
-  if (hPr != NULL) {
-    WIN_SetupPrinterDeviceContext (hPr);
-    prerr = StartPage (hPr);
-    if (prerr < 0) {
-      fl_alert ("StartPage error %d", prerr);
-      rsult = 1;
-    }
-    printable_rect(&w, &h);
-    origin(0, 0);
-    fl_clip_region(0);
-    gc = (void *)fl_gc;
-  }
-  return rsult;
-}
-
-void Fl_System_Printer::origin (int deltax, int deltay)
-{
-  SetWindowOrgEx(fl_gc, - left_margin - deltax, - top_margin - deltay, NULL);
-  x_offset = deltax;
-  y_offset = deltay;
-}
-
-void Fl_System_Printer::scale (float scalex, float scaley)
-{
-  if (scaley == 0.) scaley = scalex;
-  int w, h;
-  SetWindowExtEx(fl_gc, (int)(720 / scalex + 0.5), (int)(720 / scaley + 0.5), NULL);
-  printable_rect(&w, &h);
-  origin(0, 0);
-}
-
-void Fl_System_Printer::rotate (float rot_angle)
-{
-  XFORM mat;
-  float angle;
-  angle = (float) - (rot_angle * M_PI / 180.);
-  mat.eM11 = cos(angle);
-  mat.eM12 = sin(angle);
-  mat.eM21 = - mat.eM12;
-  mat.eM22 = mat.eM11;
-  mat.eDx = mat.eDy = 0;
-  SetWorldTransform(fl_gc, &mat);
-}
-
-int Fl_System_Printer::end_page (void)
-{
-  int  rsult;
-  
-  rsult = 0;
-  if (hPr != NULL) {
-    prerr = EndPage (hPr);
-    if (prerr < 0) {
-      abortPrint = TRUE;
-      fl_alert ("EndPage error %d", prerr);
-      rsult = 1;
-    }
-  }
-  gc = NULL;
-  return rsult;
-}
-
-static int translate_stack_depth = 0;
-const int translate_stack_max = 5;
-static int translate_stack_x[translate_stack_max];
-static int translate_stack_y[translate_stack_max];
-
-static void do_translate(int x, int y)
-{
-  XFORM tr;
-  tr.eM11 = tr.eM22 = 1;
-  tr.eM12 = tr.eM21 = 0;
-  tr.eDx =  (FLOAT) x;
-  tr.eDy =  (FLOAT) y;
-  ModifyWorldTransform(fl_gc, &tr, MWT_LEFTMULTIPLY);
-}
-
-void Fl_System_Printer::translate (int x, int y)
-{
-  do_translate(x, y);
-  if (translate_stack_depth < translate_stack_max) {
-    translate_stack_x[translate_stack_depth] = x;
-    translate_stack_y[translate_stack_depth] = y;
-    translate_stack_depth++;
-    }
-}
-
-void Fl_System_Printer::untranslate (void)
-{
-  if (translate_stack_depth > 0) {
-    translate_stack_depth--;
-    do_translate( - translate_stack_x[translate_stack_depth], - translate_stack_y[translate_stack_depth] );
-    }
-}
-
-#endif // WIN32
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_GIF_Image.cxx
+++ /dev/null
@@ -1,423 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_GIF_Image routines.
-//
-// Copyright 1997-2019 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//
-
-//
-// Reference: GIF89a Specification (links valid as of Jan 05, 2019):
-//
-// "GRAPHICS INTERCHANGE FORMAT(sm), Version 89a" (authoritative):
-// https://www.w3.org/Graphics/GIF/spec-gif89a.txt
-//
-// HTML version (non-authoritative):
-// https://web.archive.org/web/20160304075538/http://qalle.net/gif89a.php
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_GIF_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-// Read a .gif file and convert it to a "xpm" format (actually my
-// modified one with compressed colormaps).
-
-// Extensively modified from original code for gif2ras by
-// Patrick J. Naughton of Sun Microsystems.  The original
-// copyright notice follows:
-
-/* gif2ras.c - Converts from a Compuserve GIF (tm) image to a Sun Raster image.
- *
- * Copyright (c) 1988 by Patrick J. Naughton
- *
- * Author: Patrick J. Naughton
- * naughton@wind.sun.com
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation.
- *
- * This file is provided AS IS with no warranties of any kind.  The author
- * shall have no liability with respect to the infringement of copyrights,
- * trade secrets or any patents by this file or any part thereof.  In no
- * event will the author be liable for any lost revenue or profits or
- * other special, indirect and consequential damages.
- *
- * Comments and additions should be sent to the author:
- *
- *                     Patrick J. Naughton
- *                     Sun Microsystems, Inc.
- *                     2550 Garcia Ave, MS 14-40
- *                     Mountain View, CA 94043
- *                     (415) 336-1080
- */
-
-typedef unsigned char uchar;
-
-#define NEXTBYTE (uchar)getc(GifFile)
-#define GETSHORT(var) var = NEXTBYTE; var += NEXTBYTE << 8
-
-/**
- The constructor loads the named GIF image.
-
- The destructor frees all memory and server resources that are used by
- the image.
-
- Use Fl_Image::fail() to check if Fl_GIF_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- GIF format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason.
- */
-Fl_GIF_Image::Fl_GIF_Image(const char *infname) : Fl_Pixmap((char *const*)0) {
-  FILE *GifFile;	// File to read
-  char **new_data;	// Data array
-
-  if ((GifFile = fl_fopen(infname, "rb")) == NULL) {
-    Fl::error("Fl_GIF_Image: Unable to open %s!", infname);
-    ld(ERR_FILE_ACCESS);
-    return;
-  }
-
-  {char b[6];
-  if (fread(b,1,6,GifFile)<6) {
-    fclose(GifFile);
-    ld(ERR_FILE_ACCESS);
-    return; /* quit on eof */
-  }
-  if (b[0]!='G' || b[1]!='I' || b[2] != 'F') {
-    fclose(GifFile);
-    Fl::error("Fl_GIF_Image: %s is not a GIF file.\n", infname);
-    ld(ERR_FORMAT);
-    return;
-  }
-  if (b[3]!='8' || b[4]>'9' || b[5]!= 'a')
-    Fl::warning("%s is version %c%c%c.",infname,b[3],b[4],b[5]);
-  }
-
-  int Width; GETSHORT(Width);
-  int Height; GETSHORT(Height);
-
-  uchar ch = NEXTBYTE;
-  char HasColormap = ((ch & 0x80) != 0);
-  int BitsPerPixel = (ch & 7) + 1;
-  int ColorMapSize;
-  if (HasColormap) {
-    ColorMapSize = 2 << (ch & 7);
-  } else {
-    ColorMapSize = 0;
-  }
-  // int OriginalResolution = ((ch>>4)&7)+1;
-  // int SortedTable = (ch&8)!=0;
-  ch = NEXTBYTE; // Background Color index
-  ch = NEXTBYTE; // Aspect ratio is N/64
-
-  // Read in global colormap:
-  uchar transparent_pixel = 0;
-  char has_transparent = 0;
-  uchar Red[256], Green[256], Blue[256]; /* color map */
-  if (HasColormap) {
-    for (int i=0; i < ColorMapSize; i++) {	
-      Red[i] = NEXTBYTE;
-      Green[i] = NEXTBYTE;
-      Blue[i] = NEXTBYTE;
-    }
-  }
-
-  int CodeSize;		/* Code size, init from GIF header, increases... */
-  char Interlace;
-
-  for (;;) {
-
-    int i = NEXTBYTE;
-    if (i<0) {
-      fclose(GifFile);
-      Fl::error("Fl_GIF_Image: %s - unexpected EOF",infname); 
-      w(0); h(0); d(0); ld(ERR_FORMAT);
-      return;
-    }
-    int blocklen;
-
-    //  if (i == 0x3B) return 0;  eof code
-
-    if (i == 0x21) {		// a "gif extension"
-
-      ch = NEXTBYTE;
-      blocklen = NEXTBYTE;
-
-      if (ch==0xF9 && blocklen==4) { // Netscape animation extension
-
-	char bits;
-	bits = NEXTBYTE;
-	getc(GifFile); getc(GifFile); // GETSHORT(delay);
-	transparent_pixel = NEXTBYTE;
-	if (bits & 1) has_transparent = 1;
-	blocklen = NEXTBYTE;
-
-      } else if (ch == 0xFF) { // Netscape repeat count
-	;
-
-      } else if (ch != 0xFE) { //Gif Comment
-	Fl::warning("%s: unknown gif extension 0x%02x.", infname, ch);
-      }
-    } else if (i == 0x2c) {	// an image
-
-      ch = NEXTBYTE; ch = NEXTBYTE; // GETSHORT(x_position);
-      ch = NEXTBYTE; ch = NEXTBYTE; // GETSHORT(y_position);
-      GETSHORT(Width);
-      GETSHORT(Height);
-      ch = NEXTBYTE;
-      Interlace = ((ch & 0x40) != 0);
-      if (ch & 0x80) { // image has local color table
-	BitsPerPixel = (ch & 7) + 1;
-	ColorMapSize = 2 << (ch & 7);
-	for (i=0; i < ColorMapSize; i++) {
-	  Red[i] = NEXTBYTE;
-	  Green[i] = NEXTBYTE;
-	  Blue[i] = NEXTBYTE;
-	}
-      }
-      CodeSize = NEXTBYTE+1;
-      break; // okay, this is the image we want
-    } else {
-      Fl::warning("%s: unknown gif code 0x%02x", infname, i);
-      blocklen = 0;
-    }
-
-    // skip the data:
-    while (blocklen>0) {while (blocklen--) {ch = NEXTBYTE;} blocklen=NEXTBYTE;}
-  }
-
-  if (BitsPerPixel >= CodeSize)
-  {
-    // Workaround for broken GIF files...
-    BitsPerPixel = CodeSize - 1;
-    ColorMapSize = 1 << BitsPerPixel;
-  }
-
-  // Fix images w/o color table. The standard allows this and lets the
-  // decoder choose a default color table. The standard recommends the
-  // first two color table entries should be black and white.
-
-  if (ColorMapSize == 0) { // no global and no local color table
-    Fl::warning("%s does not have a color table, using default.\n", infname);
-    BitsPerPixel = CodeSize - 1;
-    ColorMapSize = 1 << BitsPerPixel;
-    Red[0] = Green[0] = Blue[0] = 0;	// black
-    Red[1] = Green[1] = Blue[1] = 255;	// white
-    for (int i = 2; i < ColorMapSize; i++) {
-      Red[i] = Green[i] = Blue[i] = (uchar)(255 * i / (ColorMapSize - 1));
-    }
-#if (0)
-    // fill color table to maximum size
-    for (int i = ColorMapSize; i < 256; i++) {
-      Red[i] = Green[i] = Blue[i] = 0; // black
-    }
-#endif
-  }
-
-  uchar *Image = new uchar[Width*Height];
-
-  int YC = 0, Pass = 0; /* Used to de-interlace the picture */
-  uchar *p = Image;
-  uchar *eol = p+Width;
-
-  int InitCodeSize = CodeSize;
-  int ClearCode = (1 << (CodeSize-1));
-  int EOFCode = ClearCode + 1;
-  int FirstFree = ClearCode + 2;
-  int FinChar = 0;
-  int ReadMask = (1<<CodeSize) - 1;
-  int FreeCode = FirstFree;
-  int OldCode = ClearCode;
-
-  // tables used by LZW decompresser:
-  short int Prefix[4096];
-  uchar Suffix[4096];
-
-  int blocklen = NEXTBYTE;
-  uchar thisbyte = NEXTBYTE; blocklen--;
-  int frombit = 0;
-
-  for (;;) {
-
-/* Fetch the next code from the raster data stream.  The codes can be
- * any length from 3 to 12 bits, packed into 8-bit bytes, so we have to
- * maintain our location as a pointer and a bit offset.
- * In addition, gif adds totally useless and annoying block counts
- * that must be correctly skipped over. */
-    int CurCode = thisbyte;
-    if (frombit+CodeSize > 7) {
-      if (blocklen <= 0) {
-	blocklen = NEXTBYTE;
-	if (blocklen <= 0) break;
-      }
-      thisbyte = NEXTBYTE; blocklen--;
-      CurCode |= thisbyte<<8;
-    }
-    if (frombit+CodeSize > 15) {
-      if (blocklen <= 0) {
-	blocklen = NEXTBYTE;
-	if (blocklen <= 0) break;
-      }
-      thisbyte = NEXTBYTE; blocklen--;
-      CurCode |= thisbyte<<16;
-    }
-    CurCode = (CurCode>>frombit)&ReadMask;
-    frombit = (frombit+CodeSize)%8;
-
-    if (CurCode == ClearCode) {
-      CodeSize = InitCodeSize;
-      ReadMask = (1<<CodeSize) - 1;
-      FreeCode = FirstFree;
-      OldCode = ClearCode;
-      continue;
-    }
-
-    if (CurCode == EOFCode) break;
-
-    uchar OutCode[1025]; // temporary array for reversing codes
-    uchar *tp = OutCode;
-    int i;
-    if (CurCode < FreeCode) i = CurCode;
-    else if (CurCode == FreeCode) {*tp++ = (uchar)FinChar; i = OldCode;}
-    else {Fl::error("Fl_GIF_Image: %s - LZW Barf!", infname); break;}
-
-    while (i >= ColorMapSize) {*tp++ = Suffix[i]; i = Prefix[i];}
-    *tp++ = FinChar = i;
-    do {
-      *p++ = *--tp;
-      if (p >= eol) {
-	if (!Interlace) YC++;
-	else switch (Pass) {
-	case 0: YC += 8; if (YC >= Height) {Pass++; YC = 4;} break;
-	case 1: YC += 8; if (YC >= Height) {Pass++; YC = 2;} break;
-	case 2: YC += 4; if (YC >= Height) {Pass++; YC = 1;} break;
-	case 3: YC += 2; break;
-	}
-	if (YC>=Height) YC=0; /* cheap bug fix when excess data */
-	p = Image + YC*Width;
-	eol = p+Width;
-      }
-    } while (tp > OutCode);
-
-    if (OldCode != ClearCode) {
-      Prefix[FreeCode] = (short)OldCode;
-      Suffix[FreeCode] = FinChar;
-      FreeCode++;
-      if (FreeCode > ReadMask) {
-	if (CodeSize < 12) {
-	  CodeSize++;
-	  ReadMask = (1 << CodeSize) - 1;
-	}
-	else FreeCode--;
-      }
-    }
-    OldCode = CurCode;
-  }
-
-  // We are done reading the file, now convert to xpm:
-
-  // allocate line pointer arrays:
-  w(Width);
-  h(Height);
-  d(1);
-  new_data = new char*[Height+2];
-
-  // transparent pixel must be zero, swap if it isn't:
-  if (has_transparent && transparent_pixel != 0) {
-    // swap transparent pixel with zero
-    p = Image+Width*Height;
-    while (p-- > Image) {
-      if (*p==transparent_pixel) *p = 0;
-      else if (!*p) *p = transparent_pixel;
-    }
-    uchar t;
-    t                        = Red[0];
-    Red[0]                   = Red[transparent_pixel];
-    Red[transparent_pixel]   = t;
-
-    t                        = Green[0];
-    Green[0]                 = Green[transparent_pixel];
-    Green[transparent_pixel] = t;
-
-    t                        = Blue[0];
-    Blue[0]                  = Blue[transparent_pixel];
-    Blue[transparent_pixel]  = t;
-  }
-
-  // find out what colors are actually used:
-  uchar used[256]; uchar remap[256];
-  int i;
-  for (i = 0; i < ColorMapSize; i++) used[i] = 0;
-  p = Image+Width*Height;
-  while (p-- > Image) used[*p] = 1;
-
-  // remap them to start with printing characters:
-  int base = has_transparent && used[0] ? ' ' : ' '+1;
-  int numcolors = 0;
-  for (i = 0; i < ColorMapSize; i++) if (used[i]) {
-    remap[i] = (uchar)(base++);
-    numcolors++;
-  }
-
-  // write the first line of xpm data (use suffix as temp array):
-  int length = sprintf((char*)(Suffix),
-		       "%d %d %d %d",Width,Height,-numcolors,1);
-  new_data[0] = new char[length+1];
-  strcpy(new_data[0], (char*)Suffix);
-
-  // write the colormap
-  new_data[1] = (char*)(p = new uchar[4*numcolors]);
-  for (i = 0; i < ColorMapSize; i++) if (used[i]) {
-    *p++ = remap[i];
-    *p++ = Red[i];
-    *p++ = Green[i];
-    *p++ = Blue[i];
-  }
-
-  // remap the image data:
-  p = Image+Width*Height;
-  while (p-- > Image) *p = remap[*p];
-
-  // split the image data into lines:
-  for (i=0; i<Height; i++) {
-    new_data[i+2] = new char[Width+1];
-    memcpy(new_data[i + 2], (char*)(Image + i*Width), Width);
-    new_data[i + 2][Width] = 0;
-  }
-
-  data((const char **)new_data, Height + 2);
-  alloc_data = 1;
-
-  delete[] Image;
-
-  fclose(GifFile);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Gl_Choice.H
+++ /dev/null
@@ -1,123 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Internal interface to set up OpenGL.
-//
-// A "Fl_Gl_Choice" is created from an OpenGL mode and holds information
-// necessary to create a window (on X) and to create an OpenGL "context"
-// (on both X and Win32).
-//
-// fl_create_gl_context takes a window (necessary only on Win32) and an
-// Fl_Gl_Choice and returns a new OpenGL context. All contexts share
-// display lists with each other.
-//
-// On X another fl_create_gl_context is provided to create it for any
-// X visual.
-//
-// fl_set_gl_context makes the given OpenGL context current and makes
-// it draw into the passed window. It tracks the current one context
-// to avoid calling the context switching code when the same context
-// is used, though it is a mystery to me why the GLX/WGL libraries
-// don't do this themselves...
-//
-// fl_no_gl_context clears that cache so the next fl_set_gl_context is
-// guaranteed to work.
-//
-// fl_delete_gl_context destroys the context.
-//
-// This code is used by Fl_Gl_Window, gl_start(), and gl_visual()
-
-#ifndef Fl_Gl_Choice_H
-#define Fl_Gl_Choice_H
-
-// Warning: whatever GLContext is defined to must take exactly the same
-// space in a structure as a void*!!!
-#ifdef WIN32
-#  include <FL/gl.h>
-#  define GLContext HGLRC
-#elif defined(__APPLE_QUARTZ__)
-#  include <OpenGL/gl.h>
-#ifdef __OBJC__
-@class NSOpenGLPixelFormat;
-@class NSOpenGLContext;
-#else
-class NSOpenGLPixelFormat;
-class NSOpenGLContext;
-#endif // __OBJC__
-typedef NSOpenGLContext* FLOpenGLContextPtr;
-#  define GLContext FLOpenGLContextPtr
-#else
-#  include <GL/glx.h>
-#  define GLContext GLXContext
-#  if ! defined(GLX_VERSION_1_3)
-#    typedef void *GLXFBConfig;
-#  endif
-#endif
-
-// Describes crap needed to create a GLContext.
-class Fl_Gl_Choice {
-  int mode;
-  const int *alist;
-  Fl_Gl_Choice *next;
-public:
-#ifdef WIN32
-  int pixelformat;	// the visual to use
-  PIXELFORMATDESCRIPTOR pfd; // some wgl calls need this thing
-#elif defined(__APPLE_QUARTZ__)
-  NSOpenGLPixelFormat* pixelformat;
-#else
-  XVisualInfo *vis;	// the visual to use
-  Colormap colormap;	// a colormap for that visual
-  GLXFBConfig best_fb;
-#endif
-  // Return one of these structures for a given gl mode.
-  // The second argument is a glX attribute list, and is used if mode is
-  // zero.  This is not supported on Win32:
-  static Fl_Gl_Choice *find(int mode, const int *);
-};
-
-class Fl_Window;
-
-#ifdef WIN32
-
-GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice*, int layer=0);
-
-#elif defined(__APPLE_QUARTZ__)
-
-GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice*, int layer=0);
-
-#else
-
-GLContext fl_create_gl_context(XVisualInfo* vis);
-
-//static inline
- GLContext fl_create_gl_context(Fl_Window*, const Fl_Gl_Choice* g);/* {
-  return fl_create_gl_context(g->vis);
-}*/
-
-#endif
-
-void fl_set_gl_context(Fl_Window*, GLContext);
-void fl_no_gl_context();
-void fl_delete_gl_context(GLContext);
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Gl_Choice.cxx
+++ /dev/null
@@ -1,460 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL visual selection code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#if HAVE_GL
-
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <stdlib.h>
-#  include "Fl_Gl_Choice.H"
-#  include <FL/gl_draw.H>
-#  include "flstring.h"
-#  include <FL/fl_utf8.h>
-
-#  ifdef WIN32
-void fl_save_dc(HWND, HDC);
-#elif defined(__APPLE__)
-extern void gl_texture_reset();
-#endif
-
-#if defined(USE_X11)
-static XVisualInfo *gl3_getvisual(const int *blist, GLXFBConfig *pbestFB)
-{
-  int glx_major, glx_minor;
-  
-  // FBConfigs were added in GLX version 1.3.
-  if ( !glXQueryVersion( fl_display, &glx_major, &glx_minor ) ||
-      ( ( glx_major == 1 ) && ( glx_minor < 3 ) ) || ( glx_major < 1 ) )
-  {
-    //printf("Invalid GLX version");
-    return NULL;
-  }
-  
-  //printf( "Getting matching framebuffer configs\n" );
-  int fbcount;
-  GLXFBConfig* fbc = glXChooseFBConfig(fl_display, DefaultScreen(fl_display), blist, &fbcount);
-  if (!fbc)
-  {
-    //printf( "Failed to retrieve a framebuffer config\n" );
-    return NULL;
-  }
-  //printf( "Found %d matching FB configs.\n", fbcount );
-  
-  // Pick the FB config/visual with the most samples per pixel
-  int best_fbc = -1, worst_fbc = -1, best_num_samp = -1, worst_num_samp = 999;
-  
-  int i;
-  for (i=0; i<fbcount; ++i)
-  {
-    XVisualInfo *vi = glXGetVisualFromFBConfig( fl_display, fbc[i] );
-    if ( vi )
-    {
-      int samp_buf, samples;
-      glXGetFBConfigAttrib( fl_display, fbc[i], GLX_SAMPLE_BUFFERS, &samp_buf );
-      glXGetFBConfigAttrib( fl_display, fbc[i], GLX_SAMPLES       , &samples  );
-      /*printf( "  Matching fbconfig %d, visual ID 0x%2lx: SAMPLE_BUFFERS = %d, SAMPLES = %d\n",
-       i, vi -> visualid, samp_buf, samples );*/
-      if ( best_fbc < 0 || (samp_buf && samples > best_num_samp) )
-        best_fbc = i, best_num_samp = samples;
-      if ( worst_fbc < 0 || !samp_buf || samples < worst_num_samp )
-        worst_fbc = i, worst_num_samp = samples;
-    }
-    XFree( vi );
-  }
-  
-  GLXFBConfig bestFbc = fbc[ best_fbc ];
-  
-  // Be sure to free the FBConfig list allocated by glXChooseFBConfig()
-  XFree( fbc );
-  
-  // Get a visual
-  XVisualInfo *vi = glXGetVisualFromFBConfig( fl_display, bestFbc );
-  *pbestFB = bestFbc;
-  return vi;
-}
-#endif
-
-static Fl_Gl_Choice *first;
-
-// this assumes one of the two arguments is zero:
-// We keep the list system in Win32 to stay compatible and interpret
-// the list later...
-Fl_Gl_Choice *Fl_Gl_Choice::find(int m, const int *alistp) {
-  Fl_Gl_Choice *g;
-  
-  for (g = first; g; g = g->next)
-    if (g->mode == m && g->alist == alistp) 
-      return g;
-
-#if defined(USE_X11)    
-  const int *blist;
-  int list[32];
-    
-  if (alistp)
-    blist = alistp;
-  else {
-    int n = 0;
-    if (m & FL_INDEX) {
-      list[n++] = GLX_BUFFER_SIZE;
-      list[n++] = 8; // glut tries many sizes, but this should work...
-    } else {
-      list[n++] = GLX_RGBA;
-      list[n++] = GLX_GREEN_SIZE;
-      list[n++] = (m & FL_RGB8) ? 8 : 1;
-      if (m & FL_ALPHA) {
-	list[n++] = GLX_ALPHA_SIZE;
-	list[n++] = (m & FL_RGB8) ? 8 : 1;
-      }
-      if (m & FL_ACCUM) {
-	list[n++] = GLX_ACCUM_GREEN_SIZE;
-	list[n++] = 1;
-	if (m & FL_ALPHA) {
-	  list[n++] = GLX_ACCUM_ALPHA_SIZE;
-	  list[n++] = 1;
-	}
-      }
-    }
-    if (m & FL_DOUBLE) {
-      list[n++] = GLX_DOUBLEBUFFER;
-    }
-    if (m & FL_DEPTH) {
-      list[n++] = GLX_DEPTH_SIZE; list[n++] = 1;
-    }
-    if (m & FL_STENCIL) {
-      list[n++] = GLX_STENCIL_SIZE; list[n++] = 1;
-    }
-    if (m & FL_STEREO) {
-      list[n++] = GLX_STEREO;
-    }
-#    if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
-    if (m & FL_MULTISAMPLE) {
-      list[n++] = GLX_SAMPLES_SGIS;
-      list[n++] = 4; // value Glut uses
-    }
-#    endif
-    list[n] = 0;
-    blist = list;
-  }
-    
-  fl_open_display();
-  XVisualInfo *visp = NULL;
-  GLXFBConfig best_fb = NULL;
-  if (m & FL_OPENGL3) {
-    visp = gl3_getvisual((const int *)blist, &best_fb);
-  }
-  if (!visp) {
-    visp = glXChooseVisual(fl_display, fl_screen, (int *)blist);
-    if (!visp) {
-#    if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
-      if (m&FL_MULTISAMPLE) return find(m&~FL_MULTISAMPLE,0);
-#    endif
-      return 0;
-    }
-  }
-
-#elif defined(__APPLE_QUARTZ__)
-  fl_open_display();
-  NSOpenGLPixelFormat* fmt = Fl_X::mode_to_NSOpenGLPixelFormat(m, alistp);
-  if (!fmt) return 0;
-  
-#elif defined(WIN32)
-
-// STR #3119: select pixel format with composition support
-// ... and no more than 32 color bits (8 bits/color)
-// Ref: PixelFormatDescriptor Object
-// https://msdn.microsoft.com/en-us/library/cc231189.aspx
-#if !defined(PFD_SUPPORT_COMPOSITION)
-# define PFD_SUPPORT_COMPOSITION (0x8000)
-#endif
-
-#define DEBUG_PFD (0) // 1 = PFD selection debug output, 0 = no debug output
-
-  // Replacement for ChoosePixelFormat() that finds one with an overlay
-  // if possible:
-  if (!fl_gc) fl_GetDC(0);
-  int pixelformat = 0;
-  PIXELFORMATDESCRIPTOR chosen_pfd;
-  for (int i = 1; ; i++) {
-    PIXELFORMATDESCRIPTOR pfd;
-    if (!DescribePixelFormat(fl_gc, i, sizeof(pfd), &pfd)) break;
-    // continue if it does not satisfy our requirements:
-    if (~pfd.dwFlags & (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL)) continue;
-    if (pfd.iPixelType != ((m&FL_INDEX)?PFD_TYPE_COLORINDEX:PFD_TYPE_RGBA)) continue;
-    if ((m & FL_ALPHA) && !pfd.cAlphaBits) continue;
-    if ((m & FL_ACCUM) && !pfd.cAccumBits) continue;
-    if ((!(m & FL_DOUBLE)) != (!(pfd.dwFlags & PFD_DOUBLEBUFFER))) continue;
-    if ((!(m & FL_STEREO)) != (!(pfd.dwFlags & PFD_STEREO))) continue;
-    if ((m & FL_DEPTH) && !pfd.cDepthBits) continue;
-    if ((m & FL_STENCIL) && !pfd.cStencilBits) continue;
-
-#if DEBUG_PFD
-    printf("pfd #%d supports composition: %s\n", i, (pfd.dwFlags & PFD_SUPPORT_COMPOSITION) ? "yes" : "no");
-    printf("    ... & PFD_GENERIC_FORMAT: %s\n", (pfd.dwFlags & PFD_GENERIC_FORMAT) ? "generic" : "accelerated");
-    printf("    ... Overlay Planes      : %d\n", pfd.bReserved & 15);
-    printf("    ... Color & Depth       : %d, %d\n", pfd.cColorBits, pfd.cDepthBits);
-    if (pixelformat)
-      printf("        current pixelformat : %d\n", pixelformat);
-    fflush(stdout);
-#endif // DEBUG_PFD
-
-    // see if better than the one we have already:
-    if (pixelformat) {
-      // offering non-generic rendering is better (read: hardware acceleration)
-      if (!(chosen_pfd.dwFlags & PFD_GENERIC_FORMAT) &&
-          (pfd.dwFlags & PFD_GENERIC_FORMAT)) continue;
-      // offering overlay is better:
-      else if (!(chosen_pfd.bReserved & 15) && (pfd.bReserved & 15)) {}
-      // otherwise prefer a format that supports composition (STR #3119)
-      else if ((chosen_pfd.dwFlags & PFD_SUPPORT_COMPOSITION) &&
-	       !(pfd.dwFlags & PFD_SUPPORT_COMPOSITION)) continue;
-      // otherwise more bit planes is better, but no more than 32 (8 bits per channel):
-      else if (pfd.cColorBits > 32 || chosen_pfd.cColorBits > pfd.cColorBits) continue;
-      else if (chosen_pfd.cDepthBits > pfd.cDepthBits) continue;
-    }
-    pixelformat = i;
-    chosen_pfd = pfd;
-  }
-
-#if DEBUG_PFD
-  static int bb = 0;
-  if (!bb) {
-    bb = 1;
-    printf("PFD_SUPPORT_COMPOSITION = 0x%x\n", PFD_SUPPORT_COMPOSITION);
-  }
-  printf("Chosen pixel format is %d\n", pixelformat);
-  printf("Color bits = %d, Depth bits = %d\n", chosen_pfd.cColorBits, chosen_pfd.cDepthBits);
-  printf("Pixel format supports composition: %s\n", (chosen_pfd.dwFlags & PFD_SUPPORT_COMPOSITION) ? "yes" : "no");
-  fflush(stdout);
-#endif // DEBUG_PFD
-
-  if (!pixelformat) return 0;
-#else
-# error platform unsupported
-#endif
-
-  g = new Fl_Gl_Choice;
-  g->mode = m;
-  g->alist = alistp;
-  g->next = first;
-  first = g;
-
-#if defined(USE_X11)
-  g->vis = visp;
-  g->best_fb = best_fb;
-
-  if (/*MaxCmapsOfScreen(ScreenOfDisplay(fl_display,fl_screen))==1 && */
-      visp->visualid == fl_visual->visualid &&
-      !fl_getenv("MESA_PRIVATE_CMAP"))
-    g->colormap = fl_colormap;
-  else
-    g->colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-				  visp->visual, AllocNone);
-#  elif defined(WIN32)
-  g->pixelformat = pixelformat;
-  g->pfd = chosen_pfd;
-#  elif defined(__APPLE_QUARTZ__)
-  g->pixelformat = fmt;
-#  else
-#    error unsupported platform
-#  endif
-
-  return g;
-}
-
-static GLContext *context_list = 0;
-static int nContext = 0, NContext = 0;
-
-static void add_context(GLContext ctx) {
-  if (!ctx) return;
-  if (nContext==NContext) {
-    if (!NContext) NContext = 8;
-    NContext *= 2;
-    context_list = (GLContext*)realloc(
-      context_list, NContext*sizeof(GLContext));
-  }
-  context_list[nContext++] = ctx;
-}
-
-static void del_context(GLContext ctx) {
-  int i; 
-  for (i=0; i<nContext; i++) {
-    if (context_list[i]==ctx) {
-      memmove(context_list+i, context_list+i+1,
-        (nContext-i-1) * sizeof(GLContext));
-      context_list[--nContext] = 0;
-      break;
-    }
-  }
-  if (!nContext) gl_remove_displaylist_fonts();
-}
-
-#if defined(USE_X11)
-
-static bool ctxErrorOccurred = false;
-static int ctxErrorHandler( Display *dpy, XErrorEvent *ev )
-{
-  ctxErrorOccurred = true;
-  return 0;
-}
-
-
-GLContext fl_create_gl_context(Fl_Window *window, const Fl_Gl_Choice* g) {
-  GLContext shared_ctx = 0;
-  if (context_list && nContext) shared_ctx = context_list[0];
-  
-  typedef GLContext (*glXCreateContextAttribsARBProc)(Display*, GLXFBConfig, GLContext, Bool, const int*);
-  
-  // It is not necessary to create or make current to a context before calling glXGetProcAddressARB
-  static glXCreateContextAttribsARBProc glXCreateContextAttribsARB =
-  (glXCreateContextAttribsARBProc)glXGetProcAddressARB((const GLubyte *)"glXCreateContextAttribsARB");
-  
-  GLContext ctx = 0;
-  
-  // Check for the GLX_ARB_create_context extension string and the function.
-  // If either is not present, use GLX 1.3 context creation method.
-  const char *glxExts = glXQueryExtensionsString(fl_display, fl_screen);
-  if (g->best_fb && strstr(glxExts, "GLX_ARB_create_context") && glXCreateContextAttribsARB ) {
-    int context_attribs[] =
-    {
-      GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
-      GLX_CONTEXT_MINOR_VERSION_ARB, 2,
-      //GLX_CONTEXT_FLAGS_ARB        , GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
-      //GLX_CONTEXT_PROFILE_MASK_ARB ,   GLX_CONTEXT_CORE_PROFILE_BIT_ARB ,
-      None
-    };
-    ctxErrorOccurred = false;
-    XErrorHandler oldHandler = XSetErrorHandler(&ctxErrorHandler);
-    ctx = glXCreateContextAttribsARB( fl_display, g->best_fb, shared_ctx, True, context_attribs );
-    // Sync to ensure any errors generated are processed.
-    XSync( fl_display, False );
-    if (ctxErrorOccurred) ctx = 0;
-    XSetErrorHandler(oldHandler);
-  }
-  if (!ctx) { // use OpenGL 1-style context creation
-    ctx = glXCreateContext(fl_display, g->vis, shared_ctx, true);
-  }
-  if (ctx)
-    add_context(ctx);
-//glXMakeCurrent(fl_display, fl_xid(window), ctx);printf("%s\n", glGetString(GL_VERSION));
-  return ctx;
-}
-
-
-GLContext fl_create_gl_context(XVisualInfo* vis) {
-  GLContext shared_ctx = 0;
-  if (context_list && nContext) shared_ctx = context_list[0];
-  GLContext context = glXCreateContext(fl_display, vis, shared_ctx, 1);
-  if (context)
-    add_context(context);
-  return context;
-}
-
-#elif defined(WIN32)
-
-GLContext fl_create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer) {
-  Fl_X* i = Fl_X::i(window);
-  HDC hdc = i->private_dc;
-  if (!hdc) {
-    hdc = i->private_dc = GetDCEx(i->xid, 0, DCX_CACHE);
-    fl_save_dc(i->xid, hdc);
-    SetPixelFormat(hdc, g->pixelformat, (PIXELFORMATDESCRIPTOR*)(&g->pfd));
-#    if USE_COLORMAP
-    if (fl_palette) SelectPalette(hdc, fl_palette, FALSE);
-#    endif
-  }
-  GLContext context =
-    layer ? wglCreateLayerContext(hdc, layer) : wglCreateContext(hdc);
-  if (context) {
-    if (context_list && nContext) 
-      wglShareLists(context_list[0], context);
-    add_context(context);
-  }
-  return context;
-}
-
-#  elif defined(__APPLE_QUARTZ__)
-
-GLContext fl_create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer) {
-  GLContext context, shared_ctx = 0;
-  if (context_list && nContext) shared_ctx = context_list[0];
-  // resets the pile of string textures used to draw strings
-  // necessary before the first context is created
-  if (!shared_ctx) gl_texture_reset();
-  context = Fl_X::create_GLcontext_for_window(g->pixelformat, shared_ctx, window);
-  if (!context) return 0;
-  add_context((GLContext)context);
-  return (context);
-}
-#  else
-#    error unsupported platform
-#  endif
-
-static GLContext cached_context;
-static Fl_Window* cached_window;
-
-void fl_set_gl_context(Fl_Window* w, GLContext context) {
-  if (context != cached_context || w != cached_window) {
-    cached_context = context;
-    cached_window = w;
-#  if defined(USE_X11)
-    glXMakeCurrent(fl_display, fl_xid(w), context);
-#  elif defined(WIN32)
-    wglMakeCurrent(Fl_X::i(w)->private_dc, context);
-#  elif defined(__APPLE_QUARTZ__)
-    Fl_X::GLcontext_makecurrent(context);
-#  else
-#   error unsupported platform
-#  endif
-  }
-}
-
-void fl_no_gl_context() {
-  cached_context = 0;
-  cached_window = 0;
-#  if defined(USE_X11)
-  glXMakeCurrent(fl_display, 0, 0);
-#  elif defined(WIN32)
-  wglMakeCurrent(0, 0);
-#  elif defined(__APPLE_QUARTZ__)
-  Fl_X::GL_cleardrawable();
-#  else
-#    error unsupported platform
-#  endif
-}
-
-void fl_delete_gl_context(GLContext context) {
-  if (cached_context == context) fl_no_gl_context();
-#  if defined(USE_X11)
-  glXDestroyContext(fl_display, context);
-#  elif defined(WIN32)
-  wglDeleteContext(context);
-#  elif defined(__APPLE_QUARTZ__)
-  Fl_X::GLcontext_release(context);
-#  else
-#    error unsupported platform
-#  endif
-  del_context(context);
-}
-
-#endif // HAVE_GL
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Gl_Device_Plugin.cxx
+++ /dev/null
@@ -1,150 +1,0 @@
-//
-// "$Id$"
-//
-// implementation of class Fl_Gl_Device_Plugin for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Gl_Window.H>
-#include "Fl_Gl_Choice.H"
-#include <FL/Fl_RGB_Image.H>
-#include "FL/Fl.H"
-
-#if defined(__APPLE__)
-uchar *convert_BGRA_to_RGB(uchar *baseAddress, int w, int h, int mByteWidth)
-{
-  uchar *newimg = new uchar[3*w*h];
-  uchar *to = newimg;
-  for (int i = 0; i < h; i++) {
-    uchar *from = baseAddress + i * mByteWidth;
-    for (int j = 0; j < w; j++, from += 4) {
-#if defined(__ppc__) && __ppc__
-      memcpy(to, from + 1, 3);
-      to += 3;
-#else
-      *(to++) = *(from+2);
-      *(to++) = *(from+1);
-      *(to++) = *from;
-#endif
-    }
-  }
-  delete[] baseAddress;
-  return newimg;
-}
-#endif
-
-static Fl_RGB_Image* capture_gl_rectangle(Fl_Gl_Window *glw, int x, int y, int w, int h)
-/* captures a rectangle of a Fl_Gl_Window window, and returns it as a RGB image
- stored from bottom to top.
- */
-{
-#if defined(__APPLE__)
-  const int bytesperpixel = 4;
-  float factor = glw->pixels_per_unit();
-  if (factor > 1) {
-    w *= factor; h *= factor; x *= factor; y *= factor;
-  }
-#else
-  const int bytesperpixel = 3;
-#endif
-  glw->flush(); // forces a GL redraw, necessary for the glpuzzle demo
-  // Read OpenGL context pixels directly.
-  // For extra safety, save & restore OpenGL states that are changed
-  glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
-  glPixelStorei(GL_PACK_ALIGNMENT, 4); /* Force 4-byte alignment */
-  glPixelStorei(GL_PACK_ROW_LENGTH, 0);
-  glPixelStorei(GL_PACK_SKIP_ROWS, 0);
-  glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
-  // Read a block of pixels from the frame buffer
-  int mByteWidth = w * bytesperpixel;
-  mByteWidth = (mByteWidth + 3) & ~3;    // Align to 4 bytes
-  uchar *baseAddress = new uchar[mByteWidth * h];
-  glReadPixels(x, glw->pixel_h() - (y+h), w, h,
-#if defined(__APPLE__)
-               GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV,
-#else
-               GL_RGB, GL_UNSIGNED_BYTE,
-#endif
-               baseAddress);
-  glPopClientAttrib();
-#if defined(__APPLE__)
-  baseAddress = convert_BGRA_to_RGB(baseAddress, w, h, mByteWidth);
-  mByteWidth = 3 * w;
-#endif
-  Fl_RGB_Image *img = new Fl_RGB_Image(baseAddress, w, h, 3, mByteWidth);
-  img->alloc_array = 1;
-  return img;
-}
-
-#ifdef __APPLE__
-static void imgProviderReleaseData (void *info, const void *data, size_t size)
-{
-  delete (Fl_RGB_Image *)info;
-}
-#endif
-
-/**
- This class will make sure that OpenGL printing/screen capture is available if fltk_gl
- was linked to the program
- */
-class Fl_Gl_Device_Plugin : public Fl_Device_Plugin {
-public:
-  Fl_Gl_Device_Plugin() : Fl_Device_Plugin(name()) { }
-  virtual const char *name() { return "opengl.device.fltk.org"; }
-  virtual int print(Fl_Widget *w, int x, int y, int height /*useless*/) {
-    Fl_Gl_Window *glw = w->as_gl_window();
-    if (!glw) return 0;
-    Fl_RGB_Image *img = capture_gl_rectangle(glw, 0, 0, glw->w(), glw->h());
-#ifdef __APPLE__
-    if (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id) {
-      // convert the image to CGImage, and draw it at full res (useful on retina display)
-      CGColorSpaceRef cSpace = CGColorSpaceCreateDeviceRGB();
-      CGDataProviderRef provider = CGDataProviderCreateWithData(img, img->array, img->ld() * img->h(), imgProviderReleaseData);
-      CGImageRef cgimg = CGImageCreate(img->w(), img->h(), 8, 24, img->ld(), cSpace,
-                                     (CGBitmapInfo)(kCGImageAlphaNone),
-                                     provider, NULL, false, kCGRenderingIntentDefault);
-      CGColorSpaceRelease(cSpace);
-      CGDataProviderRelease(provider);
-      CGContextDrawImage(fl_gc, CGRectMake(0, 0, glw->w(), glw->h()), cgimg);
-      CFRelease(cgimg);
-      return 1;
-    } else if (img->w() > glw->w()) {
-      Fl_RGB_Image *img2 = (Fl_RGB_Image*)img->copy(glw->w(), glw->h());
-      delete img;
-      img = img2;
-    }
-#endif
-    int ld = img->ld() ? img->ld() : img->w() * img->d();
-    fl_draw_image(img->array + (img->h() - 1) * ld, x, y , img->w(), img->h(), 3, - ld);
-    delete img;
-    return 1;
-  }
-  virtual Fl_RGB_Image* rectangle_capture(Fl_Widget *widget, int x, int y, int w, int h) {
-    Fl_Gl_Window *glw = widget->as_gl_window();
-    if (!glw) return NULL;
-    return capture_gl_rectangle(glw, x, y, w, h);
-  }
-};
-
-static Fl_Gl_Device_Plugin Gl_Device_Plugin;
-
-// The purpose of this variable, used in Fl_Gl_Window.cxx, is only to force this file to be loaded
-// whenever Fl_Gl_Window.cxx is loaded, that is, whenever fltk_gl is.
-FL_EXPORT int fl_gl_load_plugin = 0;
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Gl_Overlay.cxx
+++ /dev/null
@@ -1,239 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL overlay code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#if HAVE_GL
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include "Fl_Gl_Choice.H"
-#include <FL/Fl_Gl_Window.H>
-#include <stdlib.h>
-
-#if !HAVE_GL_OVERLAY
-
-int Fl_Gl_Window::can_do_overlay() {return 0;}
-
-void Fl_Gl_Window::make_overlay() {overlay = this;}
-
-#else
-
-// Methods on Fl_Gl_Window that create an overlay window.  Because
-// many programs don't need the overlay, this is separated into this
-// source file so it is not linked in if not used.
-
-// Under X this is done by creating another window, of class _Fl_Gl_Overlay
-// which is a subclass of Fl_Gl_Window except it uses the overlay planes.
-// A pointer to this is stored in the "overlay" pointer of the Fl_Gl_Window.
-
-// Under win32 another GLX context is created to draw into the overlay
-// and it is stored in the "overlay" pointer.
-
-// In both cases if overlay hardware is unavailable, the overlay is
-// "faked" by drawing into the main layers.  This is indicated by
-// setting overlay == this.
-
-#ifndef WIN32
-////////////////////////////////////////////////////////////////
-// X version
-
-extern XVisualInfo *fl_find_overlay_visual();
-extern XVisualInfo *fl_overlay_visual;
-extern Colormap fl_overlay_colormap;
-extern unsigned long fl_transparent_pixel;
-extern uchar fl_overlay;
-
-class _Fl_Gl_Overlay : public Fl_Gl_Window {
-  void flush();
-  void draw();
-public:
-  void show();
-  _Fl_Gl_Overlay(int x, int y, int w, int h) :
-    Fl_Gl_Window(x,y,w,h) {
-    set_flag(INACTIVE);
-  }
-};
-
-void _Fl_Gl_Overlay::flush() {
-  make_current();
-#ifdef BOXX_BUGS
-  // The BoXX overlay is broken and you must not call swap-buffers. This
-  // code will make it work, but we lose because machines that do support
-  // double-buffered overlays will blink when they don't have to
-  glDrawBuffer(GL_FRONT);
-  draw();
-#else
-  draw();
-  swap_buffers();
-#endif
-  glFlush();
-  valid(1);
-}
-
-void _Fl_Gl_Overlay::draw() {
-  if (!valid()) glClearIndex((GLfloat)fl_transparent_pixel);
-  if (damage() != FL_DAMAGE_EXPOSE) glClear(GL_COLOR_BUFFER_BIT);
-  Fl_Gl_Window *w = (Fl_Gl_Window *)parent();
-  uchar save_valid = w->valid();
-  w->valid(valid());
-  fl_overlay = 1;
-  w->draw_overlay();
-  fl_overlay = 0;
-  valid(w->valid());
-  w->valid(save_valid);
-}
-
-void _Fl_Gl_Overlay::show() {
-  if (!shown()) {
-    fl_background_pixel = int(fl_transparent_pixel);
-    Fl_X::make_xid(this, fl_overlay_visual, fl_overlay_colormap);
-    fl_background_pixel = -1;
-    // find the outermost window to tell wm about the colormap:
-    Fl_Window *w = window();
-    for (;;) {Fl_Window *w1 = w->window(); if (!w1) break; w = w1;}
-    XSetWMColormapWindows(fl_display, fl_xid(w), &(Fl_X::i(this)->xid), 1);
-    context(fl_create_gl_context(fl_overlay_visual), 1);
-    valid(0);
-  }
-  Fl_Gl_Window::show();
-}
-
-int Fl_Gl_Window::can_do_overlay() {
-  return fl_find_overlay_visual() != 0;
-}
-
-void Fl_Gl_Window::make_overlay() {
-  if (overlay) return;
-  if (can_do_overlay()) {
-    _Fl_Gl_Overlay* o = new _Fl_Gl_Overlay(0,0,w(),h());
-    overlay = o;
-    add(*o);
-    o->show();
-  } else {
-    overlay = this; // fake the overlay
-  }
-}
-
-#else
-////////////////////////////////////////////////////////////////
-// WIN32 version:
-
-//static COLORREF *palette;
-extern int fl_overlay_depth;
-
-void Fl_Gl_Window::make_overlay() {
-  if (overlay) return;
-
-  GLContext context = fl_create_gl_context(this, g, 1);
-  if (!context) {overlay = this; return;} // fake the overlay
-
-  HDC hdc = Fl_X::i(this)->private_dc;
-  overlay = context;
-  LAYERPLANEDESCRIPTOR pfd;
-  wglDescribeLayerPlane(hdc, g->pixelformat, 1, sizeof(pfd), &pfd);
-  if (!pfd.iPixelType) {
-    ; // full-color overlay
-  } else {
-    fl_overlay_depth = pfd.cColorBits; // used by gl_color()
-    if (fl_overlay_depth > 8) fl_overlay_depth = 8;
-    COLORREF palette[256];
-    int n = (1<<fl_overlay_depth)-1;
-    // copy all colors except #0 into the overlay palette:
-    for (int i = 0; i <= n; i++) {
-      uchar r,g,b; Fl::get_color((Fl_Color)i,r,g,b);
-      palette[i] = RGB(r,g,b);
-    }
-    // always provide black & white in the last 2 pixels:
-    if (fl_overlay_depth < 8) {
-      palette[n-1] = RGB(0,0,0);
-      palette[n] = RGB(255,255,255);
-    }
-    // and use it:
-    wglSetLayerPaletteEntries(hdc, 1, 1, n, palette+1);
-    wglRealizeLayerPalette(hdc, 1, TRUE);
-  }
-  valid(0);
-  return;
-}
-
-int Fl_Gl_Window::can_do_overlay() {
-  if (!g) {
-    g = Fl_Gl_Choice::find(mode_,alist);
-    if (!g) return 0;
-  }
-  return (g->pfd.bReserved & 15) != 0;
-}
-
-////////////////////////////////////////////////////////////////
-#endif
-
-#endif
-
-void Fl_Gl_Window::redraw_overlay() {
-  if (!shown()) return;
-  make_overlay();
-#ifdef __APPLE__
-  redraw();
-#else
-#ifndef WIN32
-  if (overlay != this)
-    ((Fl_Gl_Window*)overlay)->redraw();
-  else
-#endif
-    damage(FL_DAMAGE_OVERLAY);
-#endif
-}
-
-void Fl_Gl_Window::make_overlay_current() {
-  make_overlay();
-#ifdef __APPLE__
-  // this is not very useful, but unfortunately, Apple decided
-  // that front buffer drawing can no longer (OS X 10.4) be 
-  // supported on their platforms.
-  make_current();
-#else
-#if HAVE_GL_OVERLAY
-  if (overlay != this) {
-#ifdef WIN32
-    fl_set_gl_context(this, (GLContext)overlay);
-//  if (fl_overlay_depth)
-//    wglRealizeLayerPalette(Fl_X::i(this)->private_dc, 1, TRUE);
-#else
-    ((Fl_Gl_Window*)overlay)->make_current();
-#endif
-  } else
-#endif
-    glDrawBuffer(GL_FRONT);
-#endif
-}
-/** Hides the window if it is not this window, does nothing in WIN32. */
-void Fl_Gl_Window::hide_overlay() {
-#if HAVE_GL_OVERLAY
-#ifdef WIN32
-  // nothing needs to be done?  Or should it be erased?
-#else
-  if (overlay && overlay!=this) ((Fl_Gl_Window*)overlay)->hide();
-#endif
-#endif
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Gl_Window.cxx
+++ /dev/null
@@ -1,563 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "flstring.h"
-#if HAVE_GL
-
-extern int fl_gl_load_plugin;
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include "Fl_Gl_Choice.H"
-#ifdef __APPLE__
-#include <FL/gl.h>
-#include <OpenGL/OpenGL.h>
-#endif
-#include <FL/Fl_Gl_Window.H>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-
-////////////////////////////////////////////////////////////////
-
-// The symbol SWAP_TYPE defines what is in the back buffer after doing
-// a glXSwapBuffers().
-
-// The OpenGl documentation says that the contents of the backbuffer
-// are "undefined" after glXSwapBuffers().  However, if we know what
-// is in the backbuffers then we can save a good deal of time.  For
-// this reason you can define some symbols to describe what is left in
-// the back buffer.
-
-// Having not found any way to determine this from glx (or wgl) I have
-// resorted to letting the user specify it with an environment variable,
-// GL_SWAP_TYPE, it should be equal to one of these symbols:
-
-// contents of back buffer after glXSwapBuffers():
-#define UNDEFINED 1 	// anything
-#define SWAP 2		// former front buffer (same as unknown)
-#define COPY 3		// unchanged
-#define NODAMAGE 4	// unchanged even by X expose() events
-
-static char SWAP_TYPE = 0 ; // 0 = determine it from environment variable
-
-////////////////////////////////////////////////////////////////
-
-/**  Returns non-zero if the hardware supports the given or current OpenGL  mode. */
-int Fl_Gl_Window::can_do(int a, const int *b) {
-  return Fl_Gl_Choice::find(a,b) != 0;
-}
-
-void Fl_Gl_Window::show() {
-#if defined(__APPLE__)
-  int need_redraw = 0;
-#endif
-  if (!shown()) {
-    if (!g) {
-      g = Fl_Gl_Choice::find(mode_,alist);
-      if (!g && (mode_ & FL_DOUBLE) == FL_SINGLE) {
-        g = Fl_Gl_Choice::find(mode_ | FL_DOUBLE,alist);
-	if (g) mode_ |= FL_FAKE_SINGLE;
-      }
-
-      if (!g) {
-        Fl::error("Insufficient GL support");
-	return;
-      }
-    }
-#if !defined(WIN32) && !defined(__APPLE__)
-    Fl_X::make_xid(this, g->vis, g->colormap);
-    if (overlay && overlay != this) ((Fl_Gl_Window*)overlay)->show();
-#elif defined(__APPLE__)
-	if( ! parent() ) need_redraw=1;
-#endif
-  }
-  Fl_Window::show();
-
-#ifdef __APPLE__
-  set_visible();
-  if(need_redraw) redraw();//necessary only after creation of a top-level GL window
-#endif /* __APPLE__ */
-}
-
-#if defined(__APPLE__)
-
-float Fl_Gl_Window::pixels_per_unit()
-{
-  return (fl_mac_os_version >= 100700 && Fl::use_high_res_GL() && Fl_X::i(this) && Fl_X::i(this)->mapped_to_retina()) ? 2 : 1;
-}
-
-#endif // __APPLE__
-
-/**
-  The invalidate() method turns off valid() and is
-  equivalent to calling value(0).
-*/
-void Fl_Gl_Window::invalidate() {
-  valid(0);
-  context_valid(0);
-#ifndef WIN32
-  if (overlay) {
-    ((Fl_Gl_Window*)overlay)->valid(0);
-    ((Fl_Gl_Window*)overlay)->context_valid(0);
-  }
-#endif
-}
-
-int Fl_Gl_Window::mode(int m, const int *a) {
-  if (m == mode_ && a == alist) return 0;
-#ifndef __APPLE__
-  int oldmode = mode_;
-#endif
-#if defined(__APPLE__) || defined(USE_X11)
-  if (a) { // when the mode is set using the a array of system-dependent values, and if asking for double buffer,
-           // the FL_DOUBLE flag must be set in the mode_ member variable
-    const int *aa = a;
-    while (*aa) {
-      if (*(aa++) ==
-#  if defined(__APPLE__)
-          kCGLPFADoubleBuffer
-#  else
-          GLX_DOUBLEBUFFER
-#  endif
-          ) { m |= FL_DOUBLE; break; }
-    }
-  }
-#endif // !__APPLE__
-#if !defined(WIN32) && !defined(__APPLE__)
-  Fl_Gl_Choice* oldg = g;
-#endif // !WIN32 && !__APPLE__
-  context(0);
-  mode_ = m; alist = a;
-  if (shown()) {
-    g = Fl_Gl_Choice::find(m, a);
-
-#if defined(USE_X11)
-    // under X, if the visual changes we must make a new X window (yuck!):
-    if (!g || g->vis->visualid!=oldg->vis->visualid || (oldmode^m)&FL_DOUBLE) {
-      hide();
-      show();
-    }
-#elif defined(WIN32)
-    if (!g || (oldmode^m)&(FL_DOUBLE|FL_STEREO)) {
-      hide();
-      show();
-    }
-#elif defined(__APPLE_QUARTZ__)
-    redraw();
-#else
-#  error unsupported platform
-#endif
-  } else {
-    g = 0;
-  }
-  return 1;
-}
-
-#define NON_LOCAL_CONTEXT 0x80000000
-
-/**
-  The make_current() method selects the OpenGL context for the
-  widget.  It is called automatically prior to the draw() method
-  being called and can also be used to implement feedback and/or
-  selection within the handle() method.
-*/
-
-void Fl_Gl_Window::make_current() {
-//  puts("Fl_Gl_Window::make_current()");
-//  printf("make_current: context_=%p\n", context_);
-#if defined(__APPLE__)
-  // detect if the window was moved between low and high resolution displays
-  if (Fl_X::i(this)->changed_resolution()){
-    Fl_X::i(this)->changed_resolution(false);
-    invalidate();
-    Fl_X::GLcontext_update(context_);
-  }
-#endif
-  if (!context_) {
-    mode_ &= ~NON_LOCAL_CONTEXT;
-    context_ = fl_create_gl_context(this, g);
-    valid(0);
-    context_valid(0);
-  }
-  fl_set_gl_context(this, context_);
-
-#if defined(WIN32) && USE_COLORMAP
-  if (fl_palette) {
-    fl_GetDC(fl_xid(this));
-    SelectPalette(fl_gc, fl_palette, FALSE);
-    RealizePalette(fl_gc);
-  }
-#endif // USE_COLORMAP
-  if (mode_ & FL_FAKE_SINGLE) {
-    glDrawBuffer(GL_FRONT);
-    glReadBuffer(GL_FRONT);
-  }
-  current_ = this;
-}
-
-/**
-  Sets the projection so 0,0 is in the lower left of the window and each
-  pixel is 1 unit wide/tall.  If you are drawing 2D images, your 
-  draw() method may want to call this if valid() is false.
-*/
-void Fl_Gl_Window::ortho() {
-// Alpha NT seems to have a broken OpenGL that does not like negative coords:
-#ifdef _M_ALPHA
-  glLoadIdentity();
-  glViewport(0, 0, w(), h());
-  glOrtho(0, w(), 0, h(), -1, 1);
-#else
-  GLint v[2];
-  glGetIntegerv(GL_MAX_VIEWPORT_DIMS, v);
-  glLoadIdentity();
-  glViewport(pixel_w()-v[0], pixel_h()-v[1], v[0], v[1]);
-  glOrtho(pixel_w()-v[0], pixel_w(), pixel_h()-v[1], pixel_h(), -1, 1);
-#endif
-}
-
-/**
-  The swap_buffers() method swaps the back and front buffers.
-  It is called automatically after the draw() method is called.
-*/
-void Fl_Gl_Window::swap_buffers() {
-#if defined(USE_X11)
-  glXSwapBuffers(fl_display, fl_xid(this));
-#elif defined(WIN32)
-#  if HAVE_GL_OVERLAY
-  // Do not swap the overlay, to match GLX:
-  BOOL ret = wglSwapLayerBuffers(Fl_X::i(this)->private_dc, WGL_SWAP_MAIN_PLANE);
-  DWORD err = GetLastError();;
-#  else
-  SwapBuffers(Fl_X::i(this)->private_dc);
-#  endif
-#elif defined(__APPLE_QUARTZ__)
-  if(overlay != NULL) {
-    // STR# 2944 [1]
-    //    Save matrixmode/proj/modelview/rasterpos before doing overlay.
-    //
-    int wo=pixel_w(), ho=pixel_h();
-    GLint matrixmode;
-    GLfloat pos[4];
-    glGetIntegerv(GL_MATRIX_MODE, &matrixmode);
-    glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);       // save original glRasterPos
-    glMatrixMode(GL_PROJECTION);			// save proj/model matrices
-    glPushMatrix();
-      glLoadIdentity();
-      glMatrixMode(GL_MODELVIEW);
-      glPushMatrix();
-        glLoadIdentity();
-        glScalef(2.0f/wo, 2.0f/ho, 1.0f);
-        glTranslatef(-wo/2.0f, -ho/2.0f, 0.0f);         // set transform so 0,0 is bottom/left of Gl_Window
-        glRasterPos2i(0,0);                             // set glRasterPos to bottom left corner
-        {
-          // Emulate overlay by doing copypixels
-          glReadBuffer(GL_BACK);
-          glDrawBuffer(GL_FRONT);
-          glCopyPixels(0, 0, wo, ho, GL_COLOR);         // copy GL_BACK to GL_FRONT
-        }
-        glPopMatrix(); // GL_MODELVIEW                  // restore model/proj matrices
-      glMatrixMode(GL_PROJECTION);
-      glPopMatrix();
-    glMatrixMode(matrixmode);
-    glRasterPos3f(pos[0], pos[1], pos[2]);              // restore original glRasterPos
-  }
-  /* // nothing to do here under Cocoa because [NSOpenGLContext -flushBuffer] done later replaces it
-   else
-    aglSwapBuffers((AGLContext)context_);
-   */
-#else
-# error unsupported platform
-#endif
-}
-
-#if HAVE_GL_OVERLAY && defined(WIN32)
-uchar fl_overlay; // changes how fl_color() works
-int fl_overlay_depth = 0;
-#endif
-
-
-void Fl_Gl_Window::flush() {
-  if (!shown()) return;
-  uchar save_valid = valid_f_ & 1;
-#if HAVE_GL_OVERLAY && defined(WIN32)
-  uchar save_valid_f = valid_f_;
-#endif
-  
-#ifdef __APPLE__
-  Fl_X *i = Fl_X::i(this);
-  if (i->wait_for_expose) {
-    Fl_X::GLcontext_update((GLContext)context());
-    i->wait_for_expose = 0;
-  }
-#endif
-
-#if HAVE_GL_OVERLAY && defined(WIN32)
-
-  // Draw into hardware overlay planes if they are damaged:
-  if (overlay && overlay != this
-      && (damage()&(FL_DAMAGE_OVERLAY|FL_DAMAGE_EXPOSE) || !save_valid)) {
-    fl_set_gl_context(this, (GLContext)overlay);
-    if (fl_overlay_depth)
-      wglRealizeLayerPalette(Fl_X::i(this)->private_dc, 1, TRUE);
-    glDisable(GL_SCISSOR_TEST);
-    glClear(GL_COLOR_BUFFER_BIT);
-    fl_overlay = 1;
-    draw_overlay();
-    fl_overlay = 0;
-    valid_f_ = save_valid_f;
-    wglSwapLayerBuffers(Fl_X::i(this)->private_dc, WGL_SWAP_OVERLAY1);
-    // if only the overlay was damaged we are done, leave main layer alone:
-    if (damage() == FL_DAMAGE_OVERLAY) {
-      return;
-    }
-  }
-#endif
-
-  make_current();
-
-  if (mode_ & FL_DOUBLE) {
-
-    glDrawBuffer(GL_BACK);
-
-    if (!SWAP_TYPE) {
-#if defined (__APPLE_QUARTZ__) || defined (USE_X11)
-      SWAP_TYPE = COPY;
-#else
-      SWAP_TYPE = UNDEFINED;
-#endif
-      const char* c = fl_getenv("GL_SWAP_TYPE");
-      if (c) {
-	if (!strcmp(c,"COPY")) SWAP_TYPE = COPY;
-	else if (!strcmp(c, "NODAMAGE")) SWAP_TYPE = NODAMAGE;
-	else if (!strcmp(c, "SWAP")) SWAP_TYPE = SWAP;
-	else SWAP_TYPE = UNDEFINED;
-      }
-    }
-
-    if (SWAP_TYPE == NODAMAGE) {
-
-      // don't draw if only overlay damage or expose events:
-      if ((damage()&~(FL_DAMAGE_OVERLAY|FL_DAMAGE_EXPOSE)) || !save_valid)
-	draw();
-      swap_buffers();
-
-    } else if (SWAP_TYPE == COPY) {
-
-      // don't draw if only the overlay is damaged:
-      if (damage() != FL_DAMAGE_OVERLAY || !save_valid) draw();
-	  swap_buffers();
-
-    } else if (SWAP_TYPE == SWAP){
-      damage(FL_DAMAGE_ALL);
-      draw();
-      if (overlay == this) draw_overlay();
-      swap_buffers();
-    } else if (SWAP_TYPE == UNDEFINED){ // SWAP_TYPE == UNDEFINED
-
-      // If we are faking the overlay, use CopyPixels to act like
-      // SWAP_TYPE == COPY.  Otherwise overlay redraw is way too slow.
-      if (overlay == this) {
-	// don't draw if only the overlay is damaged:
-	if (damage1_ || damage() != FL_DAMAGE_OVERLAY || !save_valid) draw();
-	// we use a separate context for the copy because rasterpos must be 0
-	// and depth test needs to be off:
-	static GLContext ortho_context = 0;
-	static Fl_Gl_Window* ortho_window = 0;
-	int orthoinit = !ortho_context;
-	if (orthoinit) ortho_context = fl_create_gl_context(this, g);
-	fl_set_gl_context(this, ortho_context);
-	if (orthoinit || !save_valid || ortho_window != this) {
-	  glDisable(GL_DEPTH_TEST);
-	  glReadBuffer(GL_BACK);
-	  glDrawBuffer(GL_FRONT);
-	  glLoadIdentity();
-	  glViewport(0, 0, pixel_w(), pixel_h());
-	  glOrtho(0, pixel_w(), 0, pixel_h(), -1, 1);
-	  glRasterPos2i(0,0);
-	  ortho_window = this;
-	}
-	glCopyPixels(0,0,pixel_w(),pixel_h(),GL_COLOR);
-	make_current(); // set current context back to draw overlay
-	damage1_ = 0;
-
-      } else {
-        damage1_ = damage();
-        clear_damage(0xff); draw();
-        swap_buffers();
-      }
-
-    }
-#ifdef __APPLE__
-    Fl_X::GLcontext_flushbuffer(context_);
-#endif
-
-    if (overlay==this && SWAP_TYPE != SWAP) { // fake overlay in front buffer
-      glDrawBuffer(GL_FRONT);
-      draw_overlay();
-      glDrawBuffer(GL_BACK);
-      glFlush();
-    }
-
-  } else {	// single-buffered context is simpler:
-
-    draw();
-    if (overlay == this) draw_overlay();
-    glFlush();
-
-  }
-
-  valid(1);
-  context_valid(1);
-}
-
-void Fl_Gl_Window::resize(int X,int Y,int W,int H) {
-//  printf("Fl_Gl_Window::resize(X=%d, Y=%d, W=%d, H=%d)\n", X, Y, W, H);
-//  printf("current: x()=%d, y()=%d, w()=%d, h()=%d\n", x(), y(), w(), h());
-
-  int is_a_resize = (W != Fl_Widget::w() || H != Fl_Widget::h());
-  if (is_a_resize) valid(0);
-  
-#ifdef __APPLE__
-  Fl_X *flx = Fl_X::i(this);
-  if (flx && flx->in_windowDidResize()) Fl_X::GLcontext_update(context_);
-#endif
-
-#if ! ( defined(__APPLE__) || defined(WIN32) )
-  if (is_a_resize && !resizable() && overlay && overlay != this) {
-    ((Fl_Gl_Window*)overlay)->resize(0,0,W,H);
-  }
-#endif
-
-  Fl_Window::resize(X,Y,W,H);
-}
-
-/**
-  Sets a pointer to the GLContext that this window is using.
-  This is a system-dependent structure, but it is portable to copy
-  the context from one window to another. You can also set it to NULL,
-  which will force FLTK to recreate the context the next time make_current()
-  is called, this is useful for getting around bugs in OpenGL implementations.
-  
-  If <i>destroy_flag</i> is true the context will be destroyed by
-  fltk when the window is destroyed, or when the mode() is changed, 
-  or the next time context(x) is called.
-*/
-void Fl_Gl_Window::context(void* v, int destroy_flag) {
-  if (context_ && !(mode_&NON_LOCAL_CONTEXT)) fl_delete_gl_context(context_);
-  context_ = (GLContext)v;
-  if (destroy_flag) mode_ &= ~NON_LOCAL_CONTEXT;
-  else mode_ |= NON_LOCAL_CONTEXT;
-}    
-
-/**
-  Hides the window and destroys the OpenGL context.
-*/
-void Fl_Gl_Window::hide() {
-  context(0);
-#if HAVE_GL_OVERLAY && defined(WIN32)
-  if (overlay && overlay != this) {
-    fl_delete_gl_context((GLContext)overlay);
-    overlay = 0;
-  }
-#endif
-  Fl_Window::hide();
-}
-
-/**
-  The destructor removes the widget and destroys the OpenGL context
-  associated with it.
-*/
-Fl_Gl_Window::~Fl_Gl_Window() {
-  hide();
-//  delete overlay; this is done by ~Fl_Group
-}
-
-void Fl_Gl_Window::init() {
-  end(); // we probably don't want any children
-  box(FL_NO_BOX);
-
-  mode_    = FL_RGB | FL_DEPTH | FL_DOUBLE;
-  alist    = 0;
-  context_ = 0;
-  g        = 0;
-  overlay  = 0;
-  valid_f_ = 0;
-  damage1_ = 0;
-
-#if 0 // This breaks resizing on Linux/X11
-  int H = h();
-  h(1); // Make sure we actually do something in resize()...
-  resize(x(), y(), w(), H);
-#endif // 0
-}
-
-/**
-  You must implement this virtual function if you want to draw into the
-  overlay.  The overlay is cleared before this is called.  You should
-  draw anything that is not clear using OpenGL.  You must use 
-  gl_color(i) to choose colors (it allocates them from the colormap
-  using system-specific calls), and remember that you are in an indexed
-  OpenGL mode and drawing anything other than flat-shaded will probably
-  not work.
-
-  Both this function and Fl_Gl_Window::draw() should check 
-  Fl_Gl_Window::valid() and set the same transformation.  If you
-  don't your code may not work on other systems.  Depending on the OS,
-  and on whether overlays are real or simulated, the OpenGL context may
-  be the same or different between the overlay and main window.
-*/
-void Fl_Gl_Window::draw_overlay() {}
-
-#endif
-
-  /**
-  You \e \b must subclass Fl_Gl_Window and provide an implementation for 
-  draw().  You may also provide an implementation of draw_overlay()
-  if you want to draw into the overlay planes.  You can avoid
-  reinitializing the viewport and lights and other things by checking 
-  valid() at the start of draw() and only doing the
-  initialization if it is false.
-
-  The draw() method can <I>only</I> use OpenGL calls.  Do not
-  attempt to call X, any of the functions in <FL/fl_draw.H>, or glX
-  directly.  Do not call gl_start() or gl_finish().
-
-  If double-buffering is enabled in the window, the back and front
-  buffers are swapped after this function is completed.
-*/
-void Fl_Gl_Window::draw() {
-    Fl::fatal("Fl_Gl_Window::draw() *must* be overriden. Please refer to the documentation.");
-}
-
-
-/**
- Handle some FLTK events as needed.
- */
-int Fl_Gl_Window::handle(int event) 
-{
-  return Fl_Window::handle(event);
-}
-
-// don't remove me! this serves only to force linking of Fl_Gl_Device_Plugin.o
-int Fl_Gl_Window::gl_plugin_linkage() {
-  return fl_gl_load_plugin;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Group.cxx
+++ /dev/null
@@ -1,881 +1,0 @@
-//
-// "$Id$"
-//
-// Group widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The Fl_Group is the only defined container type in FLTK.
-
-// Fl_Window itself is a subclass of this, and most of the event
-// handling is designed so windows themselves work correctly.
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-
-#include <FL/Fl_Input_Choice.H>
-#include <FL/Fl_Spinner.H>
-
-
-Fl_Group* Fl_Group::current_;
-
-// Hack: A single child is stored in the pointer to the array, while
-// multiple children are stored in an allocated array:
-
-/**
-  Returns a pointer to the array of children. <I>This pointer is only
-  valid until the next time a child is added or removed.</I>
-*/
-Fl_Widget*const* Fl_Group::array() const {
-  return children_ <= 1 ? (Fl_Widget**)(&array_) : array_;
-}
-
-/**
-  Searches the child array for the widget and returns the index. Returns children()
-  if the widget is NULL or not found.
-*/
-int Fl_Group::find(const Fl_Widget* o) const {
-  Fl_Widget*const* a = array();
-  int i; for (i=0; i < children_; i++) if (*a++ == o) break;
-  return i;
-}
-
-// Metrowerks CodeWarrior and others can't export the static
-// class member: current_, so these methods can't be inlined...
-
-/**
-  Sets the current group so you can build the widget
-  tree by just constructing the widgets.
-
-  begin() is automatically called by the constructor for Fl_Group (and thus for
-  Fl_Window as well). begin() <I>is exactly the same as</I> current(this).
-  <I>Don't forget to end() the group or window!</I>
-*/
-void Fl_Group::begin() {current_ = this;}
-
-/**
-  <I>Exactly the same as</I> current(this->parent()). Any new widgets
-  added to the widget tree will be added to the parent of the group.
-*/
-void Fl_Group::end() {current_ = parent();}
-
-/**
-  Returns the currently active group.
-  
-  The Fl_Widget constructor automatically does current()->add(widget) if this
-  is not null. To prevent new widgets from being added to a group, call
-  Fl_Group::current(0).
-*/
-Fl_Group *Fl_Group::current() {return current_;}
-
-/**
-  Sets the current group.
-  \see Fl_Group::current() 
-*/
-void Fl_Group::current(Fl_Group *g) {current_ = g;}
-
-extern Fl_Widget* fl_oldfocus; // set by Fl::focus
-
-// For back-compatibility, we must adjust all events sent to child
-// windows so they are relative to that window.
-
-static int send(Fl_Widget* o, int event) {
-  if (o->type() < FL_WINDOW) return o->handle(event);
-  switch ( event )
-  {
-  case FL_DND_ENTER: /* FALLTHROUGH */
-  case FL_DND_DRAG:
-    // figure out correct type of event:
-    event = (o->contains(Fl::belowmouse())) ? FL_DND_DRAG : FL_DND_ENTER;
-  }
-  int save_x = Fl::e_x; Fl::e_x -= o->x();
-  int save_y = Fl::e_y; Fl::e_y -= o->y();
-  int ret = o->handle(event);
-  Fl::e_y = save_y;
-  Fl::e_x = save_x;
-  switch ( event )
-  {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_DND_ENTER:
-    // Successful completion of FL_ENTER means the widget is now the
-    // belowmouse widget, but only call Fl::belowmouse if the child
-    // widget did not do so:
-    if (!o->contains(Fl::belowmouse())) Fl::belowmouse(o);
-    break;
-  }
-  return ret;
-}
-
-// translate the current keystroke into up/down/left/right for navigation:
-static int navkey() {
-  // The app may want these for hotkeys, check key state
-  if (Fl::event_state(FL_CTRL | FL_ALT | FL_META)) return 0;
-
-  switch (Fl::event_key()) {
-  case 0: // not an FL_KEYBOARD/FL_SHORTCUT event
-    break;
-  case FL_Tab:
-    if (!Fl::event_state(FL_SHIFT)) return FL_Right;
-    return FL_Left;
-  case FL_Right:
-    return FL_Right;
-  case FL_Left:
-    return FL_Left;
-  case FL_Up:
-    return FL_Up;
-  case FL_Down:
-    return FL_Down;
-  }
-  return 0;
-}
-
-int Fl_Group::handle(int event) {
-
-  Fl_Widget*const* a = array();
-  int i;
-  Fl_Widget* o;
-
-  switch (event) {
-
-  case FL_FOCUS:
-    switch (navkey()) {
-    default:
-      if (savedfocus_ && savedfocus_->take_focus()) return 1;
-    case FL_Right:
-    case FL_Down:
-      for (i = children(); i--;) if ((*a++)->take_focus()) return 1;
-      break;
-    case FL_Left:
-    case FL_Up:
-      for (i = children(); i--;) if (a[i]->take_focus()) return 1;
-      break;
-    }
-    return 0;
-
-  case FL_UNFOCUS:
-    savedfocus_ = fl_oldfocus;
-    return 0;
-
-  case FL_KEYBOARD:
-    return navigation(navkey());
-
-  case FL_SHORTCUT:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o) && send(o,FL_SHORTCUT))
-	return 1;
-    }
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && !Fl::event_inside(o) && send(o,FL_SHORTCUT))
-	return 1;
-    }
-    if ((Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)) return navigation(FL_Down);
-    return 0;
-
-  case FL_ENTER:
-  case FL_MOVE:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->visible() && Fl::event_inside(o)) {
-	if (o->contains(Fl::belowmouse())) {
-	  return send(o,FL_MOVE);
-	} else {
-	  Fl::belowmouse(o);
-	  if (send(o,FL_ENTER)) return 1;
-	}
-      }
-    }
-    Fl::belowmouse(this);
-    return 1;
-
-  case FL_DND_ENTER:
-  case FL_DND_DRAG:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o)) {
-	if (o->contains(Fl::belowmouse())) {
-	  return send(o,FL_DND_DRAG);
-	} else if (send(o,FL_DND_ENTER)) {
-	  if (!o->contains(Fl::belowmouse())) Fl::belowmouse(o);
-	  return 1;
-	}
-      }
-    }
-    Fl::belowmouse(this);
-    return 0;
-
-  case FL_PUSH:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o)) {
-	Fl_Widget_Tracker wp(o);
-	if (send(o,FL_PUSH)) {
-	  if (Fl::pushed() && wp.exists() && !o->contains(Fl::pushed())) Fl::pushed(o);
-	  return 1;
-	}
-      }
-    }
-    return 0;
-
-  case FL_RELEASE:
-  case FL_DRAG:
-    o = Fl::pushed();
-    if (o == this) return 0;
-    else if (o) send(o,event);
-    else {
-      for (i = children(); i--;) {
-	o = a[i];
-	if (o->takesevents() && Fl::event_inside(o)) {
-	  if (send(o,event)) return 1;
-	}
-      }
-    }
-    return 0;
-
-  case FL_MOUSEWHEEL:
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
-	return 1;
-    }
-    for (i = children(); i--;) {
-      o = a[i];
-      if (o->takesevents() && !Fl::event_inside(o) && send(o,FL_MOUSEWHEEL))
-	return 1;
-    }
-    return 0;
-
-  case FL_DEACTIVATE:
-  case FL_ACTIVATE:
-    for (i = children(); i--;) {
-      o = *a++;
-      if (o->active()) o->handle(event);
-    }
-    return 1;
-
-  case FL_SHOW:
-  case FL_HIDE:
-    for (i = children(); i--;) {
-      o = *a++;
-      if (event == FL_HIDE && o == Fl::focus()) {
-        // Give up input focus...
-	int old_event = Fl::e_number;
-        o->handle(Fl::e_number = FL_UNFOCUS);
-	Fl::e_number = old_event;
-	Fl::focus(0);
-      }
-      if (o->visible()) o->handle(event);
-    }
-    return 1;
-
-  default:
-    // For all other events, try to give to each child, starting at focus:
-    for (i = 0; i < children(); i ++)
-      if (Fl::focus_ == a[i]) break;
-
-    if (i >= children()) i = 0;
-
-    if (children()) {
-      for (int j = i;;) {
-        if (a[j]->takesevents()) if (send(a[j], event)) return 1;
-        j++;
-        if (j >= children()) j = 0;
-        if (j == i) break;
-      }
-    }
-
-    return 0;
-  }
-}
-
-//void Fl_Group::focus(Fl_Widget *o) {Fl::focus(o); o->handle(FL_FOCUS);}
-
-#if 0
-const char *nameof(Fl_Widget *o) {
-  if (!o) return "NULL";
-  if (!o->label()) return "<no label>";
-  return o->label();
-}
-#endif
-
-// try to move the focus in response to a keystroke:
-int Fl_Group::navigation(int key) {
-  if (children() <= 1) return 0;
-  int i;
-  for (i = 0; ; i++) {
-    if (i >= children_) return 0;
-    if (array_[i]->contains(Fl::focus())) break;
-  }
-  Fl_Widget *previous = array_[i];
-
-  for (;;) {
-    switch (key) {
-    case FL_Right:
-    case FL_Down:
-      i++;
-      if (i >= children_) {
-	if (parent()) return 0;
-	i = 0;
-      }
-      break;
-    case FL_Left:
-    case FL_Up:
-      if (i) i--;
-      else {
-	if (parent()) return 0;
-	i = children_-1;
-      }
-      break;
-    default:
-      return 0;
-    }
-    Fl_Widget* o = array_[i];
-    if (o == previous) return 0;
-    switch (key) {
-    case FL_Down:
-    case FL_Up:
-      // for up/down, the widgets have to overlap horizontally:
-      if (o->x() >= previous->x()+previous->w() ||
-	  o->x()+o->w() <= previous->x()) continue;
-    }
-    if (o->take_focus()) return 1;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-Fl_Group::Fl_Group(int X,int Y,int W,int H,const char *l)
-: Fl_Widget(X,Y,W,H,l) {
-  align(FL_ALIGN_TOP);
-  children_ = 0;
-  array_ = 0;
-  savedfocus_ = 0;
-  resizable_ = this;
-  sizes_ = 0; // this is allocated when first resize() is done
-  // Subclasses may want to construct child objects as part of their
-  // constructor, so make sure they are add()'d to this object.
-  // But you must end() the object!
-  begin();
-}
-
-/**
-  Deletes all child widgets from memory recursively.
-
-  This method differs from the remove() method in that it
-  affects all child widgets and deletes them from memory.
-*/
-void Fl_Group::clear() {
-  savedfocus_ = 0;
-  resizable_ = this;
-  init_sizes();
-
-  // we must change the Fl::pushed() widget, if it is one of
-  // the group's children. Otherwise fl_fix_focus() would send
-  // lots of events to children that are about to be deleted
-  // anyway.
-
-  Fl_Widget *pushed = Fl::pushed();	// save pushed() widget
-  if (contains(pushed)) pushed = this;	// set it to be the group, if it's a child
-  Fl::pushed(this);			// for fl_fix_focus etc.
-
-  // okay, now it is safe to destroy the children:
-
-#define REVERSE_CHILDREN
-#ifdef  REVERSE_CHILDREN
-  // Reverse the order of the children. Doing this and deleting
-  // always the last child is much faster than the other way around.
-  if (children_ > 1) {
-    Fl_Widget *temp;
-    Fl_Widget **a = (Fl_Widget**)array();
-    for (int i=0,j=children_-1; i<children_/2; i++,j--) {
-      temp = a[i];
-      a[i] = a[j];
-      a[j] = temp;
-    }
-  }
-#endif // REVERSE_CHILDREN
-
-  while (children_) {			// delete all children
-    int idx = children_-1;		// last child's index
-    Fl_Widget* w = child(idx);		// last child widget
-    if (w->parent()==this) {		// should always be true
-      if (children_>2) {		// optimized removal
-        w->parent_ = 0;			// reset child's parent
-        children_--;			// update counter
-      } else {				// slow removal
-        remove(idx);
-      }
-      delete w;				// delete the child
-    } else {				// should never happen
-      remove(idx);			// remove it anyway
-    }
-  }
-
-  if (pushed != this) Fl::pushed(pushed); // reset pushed() widget
-
-}
-
-/**
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code.
-  
-  It is allowed that the Fl_Group and all of its children are automatic
-  (local) variables, but you must declare the Fl_Group \e first, so that
-  it is destroyed last.
-  
-  If you add static or automatic (local) variables to an Fl_Group, then it
-  is your responsibility to remove (or delete) all such static or automatic
-  child widgets \e \b before destroying the group - otherwise the child
-  widgets' destructors would be called twice!
-*/
-Fl_Group::~Fl_Group() {
-  clear();
-}
-
-/**
-  The widget is removed from its current group (if any) and then
-  inserted into this group. It is put at index n - or at the end,
-  if n >= children(). This can also be used to rearrange
-  the widgets inside a group.
-*/
-void Fl_Group::insert(Fl_Widget &o, int index) {
-  if (o.parent()) {
-    Fl_Group* g = o.parent();
-    int n = g->find(o);
-    if (g == this) {
-      if (index > n) index--;
-      if (index == n) return;
-    }
-    g->remove(n);
-  }
-  o.parent_ = this;
-  if (children_ == 0) { // use array pointer to point at single child
-    array_ = (Fl_Widget**)&o;
-  } else if (children_ == 1) { // go from 1 to 2 children
-    Fl_Widget* t = (Fl_Widget*)array_;
-    array_ = (Fl_Widget**)malloc(2*sizeof(Fl_Widget*));
-    if (index) {array_[0] = t; array_[1] = &o;}
-    else {array_[0] = &o; array_[1] = t;}
-  } else {
-    if (!(children_ & (children_-1))) // double number of children
-      array_ = (Fl_Widget**)realloc((void*)array_,
-				    2*children_*sizeof(Fl_Widget*));
-    int j; for (j = children_; j > index; j--) array_[j] = array_[j-1];
-    array_[j] = &o;
-  }
-  children_++;
-  init_sizes();
-}
-
-/**
-  The widget is removed from its current group (if any) and then added
-  to the end of this group.
-*/
-void Fl_Group::add(Fl_Widget &o) {insert(o, children_);}
-
-/**
-  Removes the widget at \p index from the group but does not delete it.
-
-  This method does nothing if \p index is out of bounds.
-
-  This method differs from the clear() method in that it only affects
-  a single widget and does not delete it from memory.
-  
-  \since FLTK 1.3.0
-*/
-void Fl_Group::remove(int index) {
-  if (index < 0 || index >= children_) return;
-  Fl_Widget &o = *child(index);
-  if (&o == savedfocus_) savedfocus_ = 0;
-  if (o.parent_ == this) {	// this should always be true
-    o.parent_ = 0;
-  } 
-
-  // remove the widget from the group
-
-  children_--;
-  if (children_ == 1) { // go from 2 to 1 child
-    Fl_Widget *t = array_[!index];
-    free((void*)array_);
-    array_ = (Fl_Widget**)t;
-  } else if (children_ > 1) { // delete from array
-    for (; index < children_; index++) array_[index] = array_[index+1];
-  }
-  init_sizes();
-}
-
-/**
-  Removes a widget from the group but does not delete it.
-
-  This method does nothing if the widget is not a child of the group.
-
-  This method differs from the clear() method in that it only affects
-  a single widget and does not delete it from memory.
-  
-  \note If you have the child's index anyway, use remove(int index)
-  instead, because this doesn't need a child lookup in the group's
-  table of children. This can be much faster, if there are lots of
-  children.
-*/
-void Fl_Group::remove(Fl_Widget &o) {
-  if (!children_) return;
-  int i = find(o);
-  if (i < children_) remove(i);
-}
-
-////////////////////////////////////////////////////////////////
-
-// Rather lame kludge here, I need to detect windows and ignore the
-// changes to X,Y, since all children are relative to X,Y.  That
-// is why I check type():
-
-// sizes array stores the initial positions of widgets as
-// left,right,top,bottom quads.  The first quad is the group, the
-// second is the resizable (clipped to the group), and the
-// rest are the children.  This is a convenient order for the
-// algorithm.  If you change this be sure to fix Fl_Tile which
-// also uses this array!
-
-/**
-  Resets the internal array of widget sizes and positions.
-
-  The Fl_Group widget keeps track of the original widget sizes and
-  positions when resizing occurs so that if you resize a window back to its
-  original size the widgets will be in the correct places. If you rearrange
-  the widgets in your group, call this method to register the new arrangement
-  with the Fl_Group that contains them.
-  
-  If you add or remove widgets, this will be done automatically.
-  
-  \note The internal array of widget sizes and positions will be allocated and
-  filled when the next resize() occurs.
-  
-  \sa sizes()
-*/
-void Fl_Group::init_sizes() {
-  delete[] sizes_; sizes_ = 0;
-}
-
-/**
-  Returns the internal array of widget sizes and positions.
-
-  If the sizes() array does not exist, it will be allocated and filled
-  with the current widget sizes and positions.
-
-  \note You should never need to use this method directly, unless you have
-  special needs to rearrange the children of a Fl_Group. Fl_Tile uses
-  this to rearrange its widget positions.
-  
-  \sa init_sizes()
-
-  \todo Should the internal representation of the sizes() array be documented?
-*/
-int* Fl_Group::sizes() {
-  if (!sizes_) {
-    int* p = sizes_ = new int[4*(children_+2)];
-    // first thing in sizes array is the group's size:
-    if (type() < FL_WINDOW) {p[0] = x(); p[2] = y();} else {p[0] = p[2] = 0;}
-    p[1] = p[0]+w(); p[3] = p[2]+h();
-    // next is the resizable's size:
-    p[4] = p[0]; // init to the group's size
-    p[5] = p[1];
-    p[6] = p[2];
-    p[7] = p[3];
-    Fl_Widget* r = resizable();
-    if (r && r != this) { // then clip the resizable to it
-      int t;
-      t = r->x(); if (t > p[0]) p[4] = t;
-      t +=r->w(); if (t < p[1]) p[5] = t;
-      t = r->y(); if (t > p[2]) p[6] = t;
-      t +=r->h(); if (t < p[3]) p[7] = t;
-    }
-    // next is all the children's sizes:
-    p += 8;
-    Fl_Widget*const* a = array();
-    for (int i=children_; i--;) {
-      Fl_Widget* o = *a++;
-      *p++ = o->x();
-      *p++ = o->x()+o->w();
-      *p++ = o->y();
-      *p++ = o->y()+o->h();
-    }
-  }
-  return sizes_;
-}
-
-/**
-  Resizes the Fl_Group widget and all of its children.
-
-  The Fl_Group widget first resizes itself, and then it moves and resizes
-  all its children according to the rules documented for
-  Fl_Group::resizable(Fl_Widget*)
-
-  \sa Fl_Group::resizable(Fl_Widget*)
-  \sa Fl_Group::resizable()
-  \sa Fl_Widget::resize(int,int,int,int)
-*/
-void Fl_Group::resize(int X, int Y, int W, int H) {
-
-  int dx = X-x();
-  int dy = Y-y();
-  int dw = W-w();
-  int dh = H-h();
-  
-  int *p = sizes(); // save initial sizes and positions
-
-  Fl_Widget::resize(X,Y,W,H); // make new xywh values visible for children
-
-  if (!resizable() || (dw==0 && dh==0) ) {
-
-    if (type() < FL_WINDOW) {
-      Fl_Widget*const* a = array();
-      for (int i=children_; i--;) {
-	Fl_Widget* o = *a++;
-	o->resize(o->x()+dx, o->y()+dy, o->w(), o->h());
-      }
-    }
-
-  } else if (children_) {
-
-    // get changes in size/position from the initial size:
-    dx = X - p[0];
-    dw = W - (p[1]-p[0]);
-    dy = Y - p[2];
-    dh = H - (p[3]-p[2]);
-    if (type() >= FL_WINDOW) dx = dy = 0;
-    p += 4;
-
-    // get initial size of resizable():
-    int IX = *p++;
-    int IR = *p++;
-    int IY = *p++;
-    int IB = *p++;
-
-    Fl_Widget*const* a = array();
-    for (int i=children_; i--;) {
-      Fl_Widget* o = *a++;
-#if 1
-      int XX = *p++;
-      if (XX >= IR) XX += dw;
-      else if (XX > IX) XX = IX+((XX-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
-      int R = *p++;
-      if (R >= IR) R += dw;
-      else if (R > IX) R = IX+((R-IX)*(IR+dw-IX)+(IR-IX)/2)/(IR-IX);
-
-      int YY = *p++;
-      if (YY >= IB) YY += dh;
-      else if (YY > IY) YY = IY+((YY-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
-      int B = *p++;
-      if (B >= IB) B += dh;
-      else if (B > IY) B = IY+((B-IY)*(IB+dh-IY)+(IB-IY)/2)/(IB-IY);
-#else // much simpler code from Francois Ostiguy:
-      int XX = *p++;
-      if (XX >= IR) XX += dw;
-      else if (XX > IX) XX += dw * (XX-IX)/(IR-IX);
-      int R = *p++;
-      if (R >= IR) R += dw;
-      else if (R > IX) R = R + dw * (R-IX)/(IR-IX);
-
-      int YY = *p++;
-      if (YY >= IB) YY += dh;
-      else if (YY > IY) YY = YY + dh*(YY-IY)/(IB-IY);
-      int B = *p++;
-      if (B >= IB) B += dh;
-      else if (B > IY) B = B + dh*(B-IY)/(IB-IY);
-#endif
-      o->resize(XX+dx, YY+dy, R-XX, B-YY);
-    }
-  }
-}
-
-/**
-  Draws all children of the group.
-
-  This is useful, if you derived a widget from Fl_Group and want to draw a special
-  border or background. You can call draw_children() from the derived draw() method
-  after drawing the box, border, or background.
-*/
-void Fl_Group::draw_children() {
-  Fl_Widget*const* a = array();
-
-  if (clip_children()) {
-    fl_push_clip(x() + Fl::box_dx(box()),
-                 y() + Fl::box_dy(box()),
-		 w() - Fl::box_dw(box()),
-		 h() - Fl::box_dh(box()));
-  }
-
-  if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
-    for (int i=children_; i--;) {
-      Fl_Widget& o = **a++;
-      draw_child(o);
-      draw_outside_label(o);
-    }
-  } else {	// only redraw the children that need it:
-    for (int i=children_; i--;) update_child(**a++);
-  }
-
-  if (clip_children()) fl_pop_clip();
-}
-
-void Fl_Group::draw() {
-  if (damage() & ~FL_DAMAGE_CHILD) { // redraw the entire thing:
-    draw_box();
-    draw_label();
-  }
-  draw_children();
-}
-
-/**
-  Draws a child only if it needs it.
-
-  This draws a child widget, if it is not clipped \em and if any damage() bits
-  are set. The damage bits are cleared after drawing.
-
-  \sa Fl_Group::draw_child(Fl_Widget& widget) const
-*/
-void Fl_Group::update_child(Fl_Widget& widget) const {
-  if (widget.damage() && widget.visible() && widget.type() < FL_WINDOW &&
-      fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
-    widget.draw();	
-    widget.clear_damage();
-  }
-}
-
-/**
-  Forces a child to redraw.
-
-  This draws a child widget, if it is not clipped.
-  The damage bits are cleared after drawing.
-*/
-void Fl_Group::draw_child(Fl_Widget& widget) const {
-  if (widget.visible() && widget.type() < FL_WINDOW &&
-      fl_not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
-    widget.clear_damage(FL_DAMAGE_ALL);
-    widget.draw();
-    widget.clear_damage();
-  }
-}
-
-extern char fl_draw_shortcut;
-
-/** Parents normally call this to draw outside labels of child widgets. */
-void Fl_Group::draw_outside_label(const Fl_Widget& widget) const {
-  if (!widget.visible()) return;
-  // skip any labels that are inside the widget:
-  if (!(widget.align()&15) || (widget.align() & FL_ALIGN_INSIDE)) return;
-  // invent a box that is outside the widget:
-  Fl_Align a = widget.align();
-  int X = widget.x();
-  int Y = widget.y();
-  int W = widget.w();
-  int H = widget.h();
-  int wx, wy;
-  if (const_cast<Fl_Group*>(this)->as_window()) {
-    wx = wy = 0;
-  } else {
-    wx = x(); wy = y();
-  }
-  if ( (a & 0x0f) == FL_ALIGN_LEFT_TOP ) {
-    a = (a &~0x0f ) | FL_ALIGN_TOP_RIGHT;
-    X = wx;
-    W = widget.x()-X-3;
-  } else if ( (a & 0x0f) == FL_ALIGN_LEFT_BOTTOM ) {
-    a = (a &~0x0f ) | FL_ALIGN_BOTTOM_RIGHT; 
-    X = wx;
-    W = widget.x()-X-3;
-  } else if ( (a & 0x0f) == FL_ALIGN_RIGHT_TOP ) {
-    a = (a &~0x0f ) | FL_ALIGN_TOP_LEFT; 
-    X = X+W+3;
-    W = wx+this->w()-X;
-  } else if ( (a & 0x0f) == FL_ALIGN_RIGHT_BOTTOM ) {
-    a = (a &~0x0f ) | FL_ALIGN_BOTTOM_LEFT; 
-    X = X+W+3;
-    W = wx+this->w()-X;
-  } else if (a & FL_ALIGN_TOP) {
-    a ^= (FL_ALIGN_BOTTOM|FL_ALIGN_TOP);
-    Y = wy;
-    H = widget.y()-Y;
-  } else if (a & FL_ALIGN_BOTTOM) {
-    a ^= (FL_ALIGN_BOTTOM|FL_ALIGN_TOP);
-    Y = Y+H;
-    H = wy+h()-Y;
-  } else if (a & FL_ALIGN_LEFT) {
-    a ^= (FL_ALIGN_LEFT|FL_ALIGN_RIGHT);
-    X = wx;
-    W = widget.x()-X-3;
-  } else if (a & FL_ALIGN_RIGHT) {
-    a ^= (FL_ALIGN_LEFT|FL_ALIGN_RIGHT);
-    X = X+W+3;
-    W = wx+this->w()-X;
-  }
-  widget.draw_label(X,Y,W,H,(Fl_Align)a);
-}
-
-
-Fl_Input_Choice::Fl_Input_Choice (int X,int Y,int W,int H,const char*L) 
-: Fl_Group(X,Y,W,H,L) 
-{
-  Fl_Group::box(FL_DOWN_BOX);
-  align(FL_ALIGN_LEFT);				// default like Fl_Input
-  inp_ = new Fl_Input(inp_x(), inp_y(),
-                      inp_w(), inp_h());
-  inp_->callback(inp_cb, (void*)this);
-  inp_->box(FL_FLAT_BOX);		// cosmetic
-  inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
-  menu_ = new InputMenuButton(menu_x(), menu_y(),
-                              menu_w(), menu_h());
-  menu_->callback(menu_cb, (void*)this);
-  menu_->box(FL_FLAT_BOX);				// cosmetic
-  end();
-}
-
-
-Fl_Spinner::Fl_Spinner(int X, int Y, int W, int H, const char *L)
-: Fl_Group(X, Y, W, H, L),
-  input_(X, Y, W - H / 2 - 2, H),
-  up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
-  down_button_(X + W - H / 2 - 2, Y + H - H / 2,
-               H / 2 + 2, H / 2, "@-42>") 
-{
-  end();
-  
-  value_   = 1.0;
-  minimum_ = 1.0;
-  maximum_ = 100.0;
-  step_    = 1.0;
-  format_  = "%g";
-  
-  align(FL_ALIGN_LEFT);
-  
-  input_.value("1");
-  input_.type(FL_INT_INPUT);
-  input_.when(FL_WHEN_ENTER_KEY | FL_WHEN_RELEASE);
-  input_.callback((Fl_Callback *)sb_cb, this);
-  
-  up_button_.callback((Fl_Callback *)sb_cb, this);
-  
-  down_button_.callback((Fl_Callback *)sb_cb, this);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Help_Dialog.cxx
+++ /dev/null
@@ -1,299 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// ========================================================================
-//  DO NOT EDIT FL/Fl_Help_Dialog.H and src/Fl_Help_Dialog.cxx !!!
-// ========================================================================
-//  Please use fluid to change src/Fl_Help_Dialog.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// ========================================================================
-//
-
-// generated by Fast Light User Interface Designer (fluid) version 1.0305
-
-#include "../FL/Fl_Help_Dialog.H"
-#include "flstring.h"
-#include <FL/fl_ask.H>
-
-void Fl_Help_Dialog::cb_back__i(Fl_Button*, void*) {
-  if (index_ > 0)
-  index_ --;
-
-if (index_ == 0)
-  back_->deactivate();
-
-forward_->activate();
-
-int l = line_[index_];
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);
-}
-void Fl_Help_Dialog::cb_back_(Fl_Button* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_back__i(o,v);
-}
-
-void Fl_Help_Dialog::cb_forward__i(Fl_Button*, void*) {
-  if (index_ < max_)
-  index_ ++;
-
-if (index_ >= max_)
-  forward_->deactivate();
-
-back_->activate();
-
-int l = view_->topline();
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);
-}
-void Fl_Help_Dialog::cb_forward_(Fl_Button* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_forward__i(o,v);
-}
-
-void Fl_Help_Dialog::cb_smaller__i(Fl_Button*, void*) {
-  if (view_->textsize() > 8)
-  view_->textsize(view_->textsize() - 2);
-
-if (view_->textsize() <= 8)
-  smaller_->deactivate();
-larger_->activate();
-}
-void Fl_Help_Dialog::cb_smaller_(Fl_Button* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_smaller__i(o,v);
-}
-
-void Fl_Help_Dialog::cb_larger__i(Fl_Button*, void*) {
-  if (view_->textsize() < 18)
-  view_->textsize(view_->textsize() + 2);
-
-if (view_->textsize() >= 18)
-  larger_->deactivate();
-smaller_->activate();
-}
-void Fl_Help_Dialog::cb_larger_(Fl_Button* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->parent()->user_data()))->cb_larger__i(o,v);
-}
-
-void Fl_Help_Dialog::cb_find__i(Fl_Input*, void*) {
-  find_pos_ = view_->find(find_->value(), find_pos_);
-}
-void Fl_Help_Dialog::cb_find_(Fl_Input* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->parent()->parent()->user_data()))->cb_find__i(o,v);
-}
-
-void Fl_Help_Dialog::cb_view__i(Fl_Help_View*, void*) {
-  if (view_->filename())
-{
-  if (view_->changed())
-  {
-    index_ ++;
-
-    if (index_ >= 100)
-    {
-      memmove(line_, line_ + 10, sizeof(line_[0]) * 90);
-      memmove(file_, file_ + 10, sizeof(file_[0]) * 90);
-      index_ -= 10;
-    }
-
-    max_ = index_;
-
-    strlcpy(file_[index_], view_->filename(),sizeof(file_[0]));
-    line_[index_] = view_->topline();
-
-    if (index_ > 0)
-      back_->activate();
-    else
-      back_->deactivate();
-
-    forward_->deactivate();
-    window_->label(view_->title());
-  }
-  else // if ! view_->changed()
-  {
-    strlcpy(file_[index_], view_->filename(), sizeof(file_[0]));
-    line_[index_] = view_->topline();
-  }
-} else { // if ! view_->filename()
-  index_ = 0; // hitting an internal page will disable the back/fwd buffer
-  file_[index_][0] = 0; // unnamed internal page
-  line_[index_] = view_->topline();
-  back_->deactivate();
-  forward_->deactivate();
-};
-}
-void Fl_Help_Dialog::cb_view_(Fl_Help_View* o, void* v) {
-  ((Fl_Help_Dialog*)(o->parent()->user_data()))->cb_view__i(o,v);
-}
-
-Fl_Help_Dialog::Fl_Help_Dialog() {
-  { window_ = new Fl_Double_Window(530, 385, "Help Dialog");
-    window_->user_data((void*)(this));
-    { Fl_Group* o = new Fl_Group(10, 10, 511, 25);
-      { back_ = new Fl_Button(10, 10, 25, 25, "@<-");
-        back_->tooltip("Show the previous help page.");
-        back_->shortcut(0xff51);
-        back_->labelcolor((Fl_Color)2);
-        back_->callback((Fl_Callback*)cb_back_);
-      } // Fl_Button* back_
-      { forward_ = new Fl_Button(45, 10, 25, 25, "@->");
-        forward_->tooltip("Show the next help page.");
-        forward_->shortcut(0xff53);
-        forward_->labelcolor((Fl_Color)2);
-        forward_->callback((Fl_Callback*)cb_forward_);
-      } // Fl_Button* forward_
-      { smaller_ = new Fl_Button(80, 10, 25, 25, "F");
-        smaller_->tooltip("Make the help text smaller.");
-        smaller_->labelfont(1);
-        smaller_->labelsize(10);
-        smaller_->callback((Fl_Callback*)cb_smaller_);
-      } // Fl_Button* smaller_
-      { larger_ = new Fl_Button(115, 10, 25, 25, "F");
-        larger_->tooltip("Make the help text larger.");
-        larger_->labelfont(1);
-        larger_->labelsize(16);
-        larger_->callback((Fl_Callback*)cb_larger_);
-      } // Fl_Button* larger_
-      { Fl_Group* o = new Fl_Group(350, 10, 171, 25);
-        o->box(FL_DOWN_BOX);
-        o->color(FL_BACKGROUND2_COLOR);
-        { find_ = new Fl_Input(375, 12, 143, 21, "@search");
-          find_->tooltip("find text in document");
-          find_->box(FL_FLAT_BOX);
-          find_->labelsize(13);
-          find_->textfont(4);
-          find_->callback((Fl_Callback*)cb_find_);
-          find_->when(FL_WHEN_ENTER_KEY_ALWAYS);
-        } // Fl_Input* find_
-        o->end();
-      } // Fl_Group* o
-      { Fl_Box* o = new Fl_Box(150, 10, 190, 25);
-        Fl_Group::current()->resizable(o);
-      } // Fl_Box* o
-      o->end();
-    } // Fl_Group* o
-    { view_ = new Fl_Help_View(10, 45, 510, 330);
-      view_->box(FL_DOWN_BOX);
-      view_->callback((Fl_Callback*)cb_view_);
-      Fl_Group::current()->resizable(view_);
-    } // Fl_Help_View* view_
-    window_->size_range(260, 150);
-    window_->end();
-  } // Fl_Double_Window* window_
-  back_->deactivate();
-  forward_->deactivate();
-  
-  index_    = -1;
-  max_      = 0;
-  find_pos_ = 0;
-  
-  fl_register_images();
-}
-
-Fl_Help_Dialog::~Fl_Help_Dialog() {
-  delete window_;
-}
-
-int Fl_Help_Dialog::h() {
-  return (window_->h());
-}
-
-void Fl_Help_Dialog::hide() {
-  window_->hide();
-}
-
-void Fl_Help_Dialog::load(const char *f) {
-  view_->set_changed();
-  view_->load(f);
-  window_->label(view_->title());
-}
-
-void Fl_Help_Dialog::position(int xx, int yy) {
-  window_->position(xx, yy);
-}
-
-void Fl_Help_Dialog::resize(int xx, int yy, int ww, int hh) {
-  window_->resize(xx, yy, ww, hh);
-}
-
-void Fl_Help_Dialog::show() {
-  window_->show();
-}
-
-void Fl_Help_Dialog::show(int argc, char **argv) {
-  window_->show(argc, argv);
-}
-
-void Fl_Help_Dialog::textsize(Fl_Fontsize s) {
-  view_->textsize(s);
-  
-  if (s <= 8)
-    smaller_->deactivate();
-  else
-    smaller_->activate();
-  
-  if (s >= 18)
-    larger_->deactivate();
-  else
-    larger_->activate();
-}
-
-Fl_Fontsize Fl_Help_Dialog::textsize() {
-  return (view_->textsize());
-}
-
-void Fl_Help_Dialog::topline(const char *n) {
-  view_->topline(n);
-}
-
-void Fl_Help_Dialog::topline(int n) {
-  view_->topline(n);
-}
-
-void Fl_Help_Dialog::value(const char *f) {
-  view_->set_changed();
-  view_->value(f);
-  window_->label(view_->title());
-}
-
-const char * Fl_Help_Dialog::value() const {
-  return view_->value();
-}
-
-int Fl_Help_Dialog::visible() {
-  return (window_->visible());
-}
-
-int Fl_Help_Dialog::w() {
-  return (window_->w());
-}
-
-int Fl_Help_Dialog::x() {
-  return (window_->x());
-}
-
-int Fl_Help_Dialog::y() {
-  return (window_->y());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Help_Dialog.fl
+++ /dev/null
@@ -1,270 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {../FL/Fl_Help_Dialog.H}
-code_name {.cxx}
-comment {//
-// "$Id$"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// ========================================================================
-//  DO NOT EDIT FL/Fl_Help_Dialog.H and src/Fl_Help_Dialog.cxx !!!
-// ========================================================================
-//  Please use fluid to change src/Fl_Help_Dialog.fl interactively
-//  and then use fluid to "write code" or edit and use fluid -c .
-// ========================================================================
-//
-} {in_source in_header
-}
-
-decl {\#include "flstring.h"} {private local
-}
-
-decl {\#include <FL/fl_ask.H>} {private local
-}
-
-class FL_EXPORT Fl_Help_Dialog {open
-} {
-  decl {int index_;} {private local
-  }
-  decl {int max_;} {private local
-  }
-  decl {int line_[100];                 // FIXME: we must remove those static numbers} {private local
-  }
-  decl {char file_[100][FL_PATH_MAX];   // FIXME: we must remove those static numbers} {private local
-  }
-  decl {int find_pos_;} {private local
-  }
-  Function {Fl_Help_Dialog()} {open
-  } {
-    Fl_Window window_ {
-      label {Help Dialog} open
-      private xywh {398 64 530 385} type Double hide resizable size_range {260 150 0 0}
-    } {
-      Fl_Group {} {open selected
-        xywh {10 10 511 25}
-      } {
-        Fl_Button back_ {
-          label {@<-}
-          callback {if (index_ > 0)
-  index_ --;
-
-if (index_ == 0)
-  back_->deactivate();
-
-forward_->activate();
-
-int l = line_[index_];
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);}
-          private tooltip {Show the previous help page.} xywh {10 10 25 25} shortcut 0xff51 labelcolor 2
-        }
-        Fl_Button forward_ {
-          label {@->}
-          callback {if (index_ < max_)
-  index_ ++;
-
-if (index_ >= max_)
-  forward_->deactivate();
-
-back_->activate();
-
-int l = view_->topline();
-
-if (strcmp(view_->filename(), file_[index_]) != 0)
-  view_->load(file_[index_]);
-
-view_->topline(l);}
-          private tooltip {Show the next help page.} xywh {45 10 25 25} shortcut 0xff53 labelcolor 2
-        }
-        Fl_Button smaller_ {
-          label F
-          callback {if (view_->textsize() > 8)
-  view_->textsize(view_->textsize() - 2);
-
-if (view_->textsize() <= 8)
-  smaller_->deactivate();
-larger_->activate();}
-          private tooltip {Make the help text smaller.} xywh {80 10 25 25} labelfont 1 labelsize 10
-        }
-        Fl_Button larger_ {
-          label F
-          callback {if (view_->textsize() < 18)
-  view_->textsize(view_->textsize() + 2);
-
-if (view_->textsize() >= 18)
-  larger_->deactivate();
-smaller_->activate();}
-          private tooltip {Make the help text larger.} xywh {115 10 25 25} labelfont 1 labelsize 16
-        }
-        Fl_Group {} {open
-          xywh {350 10 171 25} box DOWN_BOX color 7
-        } {
-          Fl_Input find_ {
-            label {@search}
-            callback {find_pos_ = view_->find(find_->value(), find_pos_);}
-            private tooltip {find text in document} xywh {375 12 143 21} box FLAT_BOX labelsize 13 when 10 textfont 4
-          }
-        }
-        Fl_Box {} {
-          xywh {150 10 190 25} resizable
-        }
-      }
-      Fl_Help_View view_ {
-        callback {if (view_->filename())
-{
-  if (view_->changed())
-  {
-    index_ ++;
-
-    if (index_ >= 100)
-    {
-      memmove(line_, line_ + 10, sizeof(line_[0]) * 90);
-      memmove(file_, file_ + 10, sizeof(file_[0]) * 90);
-      index_ -= 10;
-    }
-
-    max_ = index_;
-
-    strlcpy(file_[index_], view_->filename(),sizeof(file_[0]));
-    line_[index_] = view_->topline();
-
-    if (index_ > 0)
-      back_->activate();
-    else
-      back_->deactivate();
-
-    forward_->deactivate();
-    window_->label(view_->title());
-  }
-  else // if ! view_->changed()
-  {
-    strlcpy(file_[index_], view_->filename(), sizeof(file_[0]));
-    line_[index_] = view_->topline();
-  }
-} else { // if ! view_->filename()
-  index_ = 0; // hitting an internal page will disable the back/fwd buffer
-  file_[index_][0] = 0; // unnamed internal page
-  line_[index_] = view_->topline();
-  back_->deactivate();
-  forward_->deactivate();
-}}
-        private xywh {10 45 510 330} box DOWN_BOX resizable
-      }
-    }
-    code {back_->deactivate();
-forward_->deactivate();
-
-index_    = -1;
-max_      = 0;
-find_pos_ = 0;
-
-fl_register_images();} {}
-  }
-  Function {~Fl_Help_Dialog()} {} {
-    code {delete window_;} {}
-  }
-  Function {h()} {return_type int
-  } {
-    code {return (window_->h());} {}
-  }
-  Function {hide()} {return_type void
-  } {
-    code {window_->hide();} {}
-  }
-  Function {load(const char *f)} {return_type void
-  } {
-    code {view_->set_changed();
-view_->load(f);
-window_->label(view_->title());} {}
-  }
-  Function {position(int xx, int yy)} {return_type void
-  } {
-    code {window_->position(xx, yy);} {}
-  }
-  Function {resize(int xx, int yy, int ww, int hh)} {return_type void
-  } {
-    code {window_->resize(xx, yy, ww, hh);} {}
-  }
-  Function {show()} {return_type void
-  } {
-    code {window_->show();} {}
-  }
-  Function {show(int argc, char **argv)} {return_type void
-  } {
-    code {window_->show(argc, argv);} {}
-  }
-  Function {textsize(Fl_Fontsize s)} {return_type void
-  } {
-    code {view_->textsize(s);
-
-if (s <= 8)
-  smaller_->deactivate();
-else
-  smaller_->activate();
-
-if (s >= 18)
-  larger_->deactivate();
-else
-  larger_->activate();} {}
-  }
-  Function {textsize()} {return_type Fl_Fontsize
-  } {
-    code {return (view_->textsize());} {}
-  }
-  Function {topline(const char *n)} {return_type void
-  } {
-    code {view_->topline(n);} {}
-  }
-  Function {topline(int n)} {return_type void
-  } {
-    code {view_->topline(n);} {}
-  }
-  Function {value(const char *f)} {return_type void
-  } {
-    code {view_->set_changed();
-view_->value(f);
-window_->label(view_->title());} {}
-  }
-  Function {value() const} {return_type {const char *}
-  } {
-    code {return view_->value();} {}
-  }
-  Function {visible()} {return_type int
-  } {
-    code {return (window_->visible());} {}
-  }
-  Function {w()} {return_type int
-  } {
-    code {return (window_->w());} {}
-  }
-  Function {x()} {return_type int
-  } {
-    code {return (window_->x());} {}
-  }
-  Function {y()} {return_type int
-  } {
-    code {return (window_->y());} {}
-  }
-}
-
-comment {
-//
-// End of "$Id$".
-//} {in_source in_header
-}
--- a/DoConfig/fltk/src/Fl_Help_Dialog_Dox.cxx
+++ /dev/null
@@ -1,111 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Help_Dialog dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Fl_Help_Dialog (autogenerated class) doxygen documentation placeholder
-
-/** \class Fl_Help_Dialog
-  The Fl_Help_Dialog widget displays a standard help dialog window
-  using the Fl_Help_View widget.
-  
-  <P ALIGN=CENTER> \image html Fl_Help_Dialog.png </P> 
-  \image latex  Fl_Help_Dialog.png "Fl_Help_Dialog" width=8cm
-*/
-
-/** \fn Fl_Help_Dialog::Fl_Help_Dialog()
-  The constructor creates the dialog pictured above.*/
-
-/** \fn Fl_Help_Dialog::~Fl_Help_Dialog()
-  The destructor destroys the widget and frees all memory that has been
-  allocated for the current file.
-*/
-
-/** \fn void Fl_Help_Dialog::hide()
-  Hides the Fl_Help_Dialog window.*/
-
-/** \fn void Fl_Help_Dialog::load(const char *f)
-  Loads the specified HTML file into the Fl_Help_View widget.
-  The filename can also contain a target name ("filename.html#target").
-*/
-
-/** \fn void Fl_Help_Dialog::position(int x, int y)
-  Set the screen position of the dialog.*/
-
-/** \fn void Fl_Help_Dialog::resize(int xx, int yy, int ww, int hh)
-  Change the position and size of the dialog.*/
-
-/** \fn void Fl_Help_Dialog::show()
-  Shows the Fl_Help_Dialog window.*/
-
-/** \fn void Fl_Help_Dialog::textsize(Fl_Fontsize s)
-  Sets or gets the default text size for the help view.*/
-
-/** \fn uchar Fl_Help_Dialog::textsize()
-  Sets or gets the default text size for the help view.*/
-
-/** \fn void Fl_Help_Dialog::topline(const char *n)
-  Sets the top line in the Fl_Help_View widget to the named or
-  numbered line.
-*/
-
-/** \fn void Fl_Help_Dialog::topline(int n)
-  Sets the top line in the Fl_Help_View widget to the named or
-  numbered line.
-*/
-
-/** \fn void Fl_Help_Dialog::value(const char *v)
-  The first form sets the current buffer to the string provided and
-  reformats the text. It also clears the history of the "back" and
-  "forward" buttons. The second form returns the current buffer contents.
-*/
-
-/** \fn const char *Fl_Help_Dialog::value() const
-  The first form sets the current buffer to the string provided and
-  reformats the text. It also clears the history of the "back" and
-  "forward" buttons. The second form returns the current buffer contents.
-*/
-
-/** \fn int Fl_Help_Dialog::visible()
-  Returns 1 if the Fl_Help_Dialog window is visible.*/
-
-/** \fn int Fl_Help_Dialog::x()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::y()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::w()
-  Returns the position and size of the help dialog.*/
-
-/** \fn int Fl_Help_Dialog::h()
-  Returns the position and size of the help dialog.*/
-
-/** \fn void Fl_Help_Dialog::show()
-  Shows the main Help Dialog Window
-  Delegates call to encapsulated window_ void Fl_Window::show() method */
-
-/** \fn void Fl_Help_Dialog::show(int argc, char **argv)
-  Shows the main Help Dialog Window
-  Delegates call to encapsulated window_ void Fl_Window::show(int argc, char **argv) instance method */
-
-/** \fn void Fl_Help_Dialog::textsize(Fl_Fontsize s)
-  Sets the internal Fl_Help_View instance text size.
-  Delegates call to encapsulated view_ void Fl_Help_View::textsize(Fl_Fontsize s) instance method */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Help_View.cxx
+++ /dev/null
@@ -1,3718 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Help_View widget routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// Buffer management (HV_Edit_Buffer) and more by AlbrechtS and others.
-// Copyright 2011-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_Help_View::add_block()       - Add a text block to the list.
-//   Fl_Help_View::add_link()        - Add a new link to the list.
-//   Fl_Help_View::add_target()      - Add a new target to the list.
-//   Fl_Help_View::compare_targets() - Compare two targets.
-//   Fl_Help_View::do_align()        - Compute the alignment for a line in
-//                                     a block.
-//   Fl_Help_View::draw()            - Draw the Fl_Help_View widget.
-//   Fl_Help_View::format()          - Format the help text.
-//   Fl_Help_View::format_table()    - Format a table...
-//   Fl_Help_View::free_data()       - Free memory used for the document.
-//   Fl_Help_View::get_align()       - Get an alignment attribute.
-//   Fl_Help_View::get_attr()        - Get an attribute value from the string.
-//   Fl_Help_View::get_color()       - Get an alignment attribute.
-//   Fl_Help_View::handle()          - Handle events in the widget.
-//   Fl_Help_View::Fl_Help_View()    - Build a Fl_Help_View widget.
-//   Fl_Help_View::~Fl_Help_View()   - Destroy a Fl_Help_View widget.
-//   Fl_Help_View::load()            - Load the specified file.
-//   Fl_Help_View::resize()          - Resize the help widget.
-//   Fl_Help_View::topline()         - Set the top line to the named target.
-//   Fl_Help_View::topline()         - Set the top line by number.
-//   Fl_Help_View::value()           - Set the help text directly.
-//   scrollbar_callback()            - A callback for the scrollbar.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_Help_View.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include <FL/filename.H>	// fl_open_uri()
-#include "flstring.h"
-#include <ctype.h>
-#include <errno.h>
-#include <math.h>
-
-#if defined(WIN32) && ! defined(__CYGWIN__)
-#  include <io.h>
-#  include <direct.h>
-#else
-#  include <unistd.h>
-#endif // WIN32
-
-#define MAX_COLUMNS	200
-
-//
-// Typedef the C API sort function type the only way I know how...
-//
-
-extern "C"
-{
-  typedef int (*compare_func_t)(const void *, const void *);
-}
-
-
-//
-// Local functions...
-//
-
-static int	quote_char(const char *);
-static void	scrollbar_callback(Fl_Widget *s, void *);
-static void	hscrollbar_callback(Fl_Widget *s, void *);
-
-//
-// global flag for image loading (see get_image).
-//
-
-static char initial_load = 0;
-
-//
-// Broken image...
-//
-
-static const char * const broken_xpm[] =
-		{
-		  "16 24 4 1",
-		  "@ c #000000",
-		  "  c #ffffff",
-		  "+ c none",
-		  "x c #ff0000",
-		  // pixels
-		  "@@@@@@@+++++++++",
-		  "@    @++++++++++",
-		  "@   @+++++++++++",
-		  "@   @++@++++++++",
-		  "@    @@+++++++++",
-		  "@     @+++@+++++",
-		  "@     @++@@++++@",
-		  "@ xxx  @@  @++@@",
-		  "@  xxx    xx@@ @",
-		  "@   xxx  xxx   @",
-		  "@    xxxxxx    @",
-		  "@     xxxx     @",
-		  "@    xxxxxx    @",
-		  "@   xxx  xxx   @",
-		  "@  xxx    xxx  @",
-		  "@ xxx      xxx @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@              @",
-		  "@@@@@@@@@@@@@@@@",
-		  NULL
-		};
-
-static Fl_Pixmap broken_image(broken_xpm);
-
-//
-// Simple margin stack for Fl_Help_View::format()...
-//
-
-struct fl_margins {
-  int depth_;
-  int margins_[100];
-
-  fl_margins() { clear();  }
-
-  int clear() {
-//    puts("fl_margins::clear()");
-
-    depth_ = 0;
-    return margins_[0] = 4;
-  }
-
-  int current() { return margins_[depth_]; }
-
-  int pop() {
-//    printf("fl_margins::pop(): depth_=%d, xx=%d\n", depth_,
-//           depth_ > 0 ? margins_[depth_ - 1] : 4);
-
-    if (depth_ > 0) {
-      depth_ --;
-      return margins_[depth_];
-    } else return 4;
-  }
-
-  int push(int indent) {
-    int xx;
-
-    xx = margins_[depth_] + indent;
-
-//    printf("fl_margins::push(indent=%d): depth_=%d, xx=%d\n", indent,
-//           depth_ + 1, xx);
-
-    if (depth_ < 99) {
-      depth_ ++;
-      margins_[depth_] = xx;
-    }
-
-    return xx;
-  }
-};
-
-//
-// All the stuff needed to implement text selection in Fl_Help_View
-//
-
-/* matt:
- * We are trying to keep binary compatibility with previous versions
- * of FLTK. This means that we are limited to adding static variables
- * only to not enlarge the Fl_Help_View class. Lucky for us, only one
- * text can be selected system wide, so we can remember the selection
- * in a single set of variables.
- *
- * Still to do:
- * - &word; style characters mess up our count inside a word boundary
- * - we can only select words, no individual characters
- * - no dragging of the selection into another widget
- * - selection must be cleared if another widget get focus!
- * - write a comment for every new function
- */
-
-/*
-The following functions are also used to draw stuff and should be replaced with
-local copies that are much faster when merely counting:
-
-fl_color(Fl_Color);
-fl_rectf(int, int, int, int);
-fl_push_clip(int, int, int, int);
-fl_xyline(int, int, int);
-fl_rect()
-fl_line()
-img->draw()
-*/
-
-// We don't put the offscreen buffer in the help view class because
-// we'd need to include x.H in the header...
-static Fl_Offscreen fl_help_view_buffer;
-int Fl_Help_View::selection_first = 0;
-int Fl_Help_View::selection_last = 0;
-int Fl_Help_View::selection_push_first = 0;
-int Fl_Help_View::selection_push_last = 0;
-int Fl_Help_View::selection_drag_first = 0;
-int Fl_Help_View::selection_drag_last = 0;
-int Fl_Help_View::selected = 0;
-int Fl_Help_View::draw_mode = 0;
-int Fl_Help_View::mouse_x = 0;
-int Fl_Help_View::mouse_y = 0;
-int Fl_Help_View::current_pos = 0;
-Fl_Help_View *Fl_Help_View::current_view = 0L;
-Fl_Color Fl_Help_View::hv_selection_color;
-Fl_Color Fl_Help_View::hv_selection_text_color;
-
-/*
- * This function must be optimized for speed!
- */
-void Fl_Help_View::hv_draw(const char *t, int x, int y, int entity_extra_length)
-{
-  if (selected && current_view==this && current_pos<selection_last && current_pos>=selection_first) {
-    Fl_Color c = fl_color();
-    fl_color(hv_selection_color);
-    int w = (int)fl_width(t);
-    if (current_pos+(int)strlen(t)<selection_last)
-      w += (int)fl_width(' ');
-    fl_rectf(x, y+fl_descent()-fl_height(), w, fl_height());
-    fl_color(hv_selection_text_color);
-    fl_draw(t, x, y);
-    fl_color(c);
-  } else {
-    fl_draw(t, x, y);
-  }
-  if (draw_mode) {
-    int w = (int)fl_width(t);
-    if (mouse_x>=x && mouse_x<x+w) {
-      if (mouse_y>=y-fl_height()+fl_descent()&&mouse_y<=y+fl_descent()) {
-        int f = (int) current_pos;
-        int l = (int) (f+strlen(t)); // use 'quote_char' to calculate the true length of the HTML string
-        if (draw_mode==1) {
-          selection_push_first = f;
-          selection_push_last = l;
-        } else {
-          selection_drag_first = f;
-          selection_drag_last = l + entity_extra_length;
-        }
-      }
-    }
-  }
-}
-
-#define DEBUG_EDIT_BUFFER 0
-
-#if (DEBUG_EDIT_BUFFER > 1)
-#define DEBUG_FUNCTION(L,F) \
-  printf("\n========\n  [%d] --- %s\n========\n", L, F); \
-  fflush(stdout);
-#else
-#define DEBUG_FUNCTION(L,F)
-#endif
-
-
-/* ** Intentionally not Doxygen docs.
-  HelpView Edit Buffer management class.
-  <b>Internal use only.</b>
-
-  This class is for internal use in this file. Its sole purpose is to
-  allow buffer management to avoid buffer overflows in stack variables
-  used to edit strings for formatting and drawing (STR #3275).
-
-  This class will likely be superseded by an Fl_String or Fl_Buffer class
-  in a later FLTK release (1.4.x).
-
-  Note: The buffer allocation and extension size (chunk size) must be
-  a power of 2, but this is deliberately never checked, because this
-  class is only used here with default values. Using extension sizes
-  that are not a power of 2 may result in unpredictable behavior.
-*/
-
-class HV_Edit_Buffer {
-
-  int size_;				// actually used text size w/o nul
-  int allocated_;			// allocated buffer size
-  int extend_;				// extend size (must be a power of 2)
-
-  char *buf_;				// internal buffer
-
-public:
-
-  HV_Edit_Buffer (int alloc = 1024, int ext = 1024);	// c'tor
-  ~HV_Edit_Buffer ();					// d'tor
-
-  char *c_str() { return buf_; }
-  void clear();
-  int size() { return size_; }
-  void check(int size);
-  const char *add(const char *text, int size = -1);
-  void add(char c);
-  void add(int ucs);
-
-  int cmp(const char * str) { return !strcasecmp(buf_, str); }
-  int width() { return (int)fl_width(buf_); }
-
-  char & operator[] (int idx) { return buf_[idx]; }
-  char operator[] (int idx) const { return buf_[idx]; }
-
-#if (DEBUG_EDIT_BUFFER)
-  void print(const char *text = "");
-#endif
-};
-
-/*
-  Edit buffer constructor.
-*/
-HV_Edit_Buffer::HV_Edit_Buffer(
-	int	alloc,
-	int	ext)
-{
-  alloc = (alloc + ext-1) & (~(ext-1));	// round to chunk size
-
-  size_ = 0;
-  allocated_ = alloc;
-  extend_ = ext;
-  buf_ = (char *)malloc(alloc);
-}
-
-/*
-  Clears the edit buffer, but doesn't free the buffer.
-*/
-void HV_Edit_Buffer::clear()
-{
-
-  // DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-  size_ = 0;
-  buf_[0] = '\0';
-}
-
-/*
-  Adds text to the buffer.
-
-  \param[in]	text	text to be added
-  \param[in]	size	text size, default: -1 => strlen(text)
-  \returns	new input text pointer, i.e. points beyond inserted text
-*/
-const char *HV_Edit_Buffer::add(const char *text, int size) {
-
-  if (size < 0) size = (int)strlen(text);
-  if (!size) return text;
-
-  check(size);
-
-#if (DEBUG_EDIT_BUFFER > 1)
-  printf("HV_Edit_Buffer::add(text,%d), allocated=%d, size=%d\n",
-	 size, allocated_, size_+size);
-  fflush(stdout);
-#endif
-
-  memcpy(buf_+size_, text, size);
-  size_ += size;
-  buf_[size_] = '\0';
-
-  return (text + size);
-
-} // add(const char *text, int size)
-
-/*
-  Adds one byte (character) to the buffer.
-
-  \note It is possible to add partial UTF-8 sequences.
-
-  \param[in]	c	byte (char) to be added
-*/
-void HV_Edit_Buffer::add(char c) {
-
-  check(1);
-
-#if (DEBUG_EDIT_BUFFER > 1)
-  printf("HV_Edit_Buffer::add(char = '%c'), allocated=%d, size=%d\n",
-	 c, allocated_, size_+1);
-  fflush(stdout);
-#endif
-
-  buf_[size_++] = c;
-  buf_[size_] = '\0';
-
-} // add(char c)
-
-/*
-  Adds one Unicode character (int) to the buffer.
-
-  The Unicode character \p ucs is converted to UTF-8 and appended to
-  the buffer.
-
-  \param[in]	ucs	Unicode character (code point) to be added
-*/
-void HV_Edit_Buffer::add(int ucs) {
-
-  int len;
-  char cbuf[6];
-
-  len = fl_utf8encode((unsigned int)ucs, cbuf);
-  if (len < 1) len = 1;
-  add(cbuf,len);
-
-} // add(int ucs)
-
-/*
-  Checks needed buffer size and reallocates the buffer if necessary.
-
-  Tests if the given string \p size can be added to the string buffer.
-  An additional nul byte is also considered in the calculation.
-
-  \p size must be >= 0.
-
-  If the requested \p size doesn't fit in the allocated buffer size,
-  the buffer is extended.
-
-  \param[in]	size	requested text size to be added (w/o trailing nul)
-*/
-void HV_Edit_Buffer::check(int size) {
-
-  if (size_ + size + 1 <= allocated_) return;
-
-  int new_size = (allocated_ + size + extend_) & (~(extend_-1)); // round to chunk size
-
-  buf_ = (char *)realloc(buf_, new_size);
-
-#if (DEBUG_EDIT_BUFFER)
-  printf("HV_Edit_Buffer::check(%d), allocated: %d ->%d\n",
-	 size, allocated_, new_size);
-  fflush(stdout);
-#endif
-
-  allocated_ = new_size;
-
-} // HV_Edit_Buffer::check()
-
-
-/*
-  The destructor frees the edit buffer.
-*/
-HV_Edit_Buffer::~HV_Edit_Buffer() {
-
-  if (buf_) {
-#if (DEBUG_EDIT_BUFFER)
-    printf("~HV_Edit_Buffer(): size = %d, allocated = %d\n",
-      size_, allocated_);
-    fflush(stdout);
-#endif
-    free(buf_);
-  }
-} // ~HV_Edit_Buffer()
-
-
-/*
-  Prints the edit buffer (Debug only).
-*/
-#if (DEBUG_EDIT_BUFFER)
-void HV_Edit_Buffer::print(const char *text) {
-  printf("HV_Edit_Buffer::print(%s), allocated=%d, size=%d\n",
-	 text, allocated_, size_);
-  printf("    \"%s\"\n", buf_ && size_ ? buf_ : "");
-  fflush(stdout);
-} // print()
-#endif
-
-/** Adds a text block to the list. */
-Fl_Help_Block *					// O - Pointer to new block
-Fl_Help_View::add_block(const char   *s,	// I - Pointer to start of block text
-                	int           xx,	// I - X position of block
-			int           yy,	// I - Y position of block
-			int           ww,	// I - Right margin of block
-			int           hh,	// I - Height of block
-			unsigned char border)	// I - Draw border?
-{
-  Fl_Help_Block	*temp;				// New block
-
-
-  // printf("add_block(s = %p, xx = %d, yy = %d, ww = %d, hh = %d, border = %d)\n",
-  //        s, xx, yy, ww, hh, border);
-
-  if (nblocks_ >= ablocks_)
-  {
-    ablocks_ += 16;
-
-    if (ablocks_ == 16)
-      blocks_ = (Fl_Help_Block *)malloc(sizeof(Fl_Help_Block) * ablocks_);
-    else
-      blocks_ = (Fl_Help_Block *)realloc(blocks_, sizeof(Fl_Help_Block) * ablocks_);
-  }
-
-  temp = blocks_ + nblocks_;
-  memset(temp, 0, sizeof(Fl_Help_Block));
-  temp->start   = s;
-  temp->end     = s;
-  temp->x       = xx;
-  temp->y       = yy;
-  temp->w       = ww;
-  temp->h       = hh;
-  temp->border  = border;
-  temp->bgcolor = bgcolor_;
-  nblocks_ ++;
-
-  return (temp);
-}
-
-
-/** Adds a new link to the list. */
-void Fl_Help_View::add_link(const char *n,	// I - Name of link
-                      int        xx,	// I - X position of link
-		      int        yy,	// I - Y position of link
-		      int        ww,	// I - Width of link text
-		      int        hh)	// I - Height of link text
-{
-  Fl_Help_Link	*temp;			// New link
-  char		*target;		// Pointer to target name
-
-
-  if (nlinks_ >= alinks_)
-  {
-    alinks_ += 16;
-
-    if (alinks_ == 16)
-      links_ = (Fl_Help_Link *)malloc(sizeof(Fl_Help_Link) * alinks_);
-    else
-      links_ = (Fl_Help_Link *)realloc(links_, sizeof(Fl_Help_Link) * alinks_);
-  }
-
-  temp = links_ + nlinks_;
-
-  temp->x       = xx;
-  temp->y       = yy;
-  temp->w       = xx + ww;
-  temp->h       = yy + hh;
-
-  strlcpy(temp->filename, n, sizeof(temp->filename));
-
-  if ((target = strrchr(temp->filename, '#')) != NULL)
-  {
-    *target++ = '\0';
-    strlcpy(temp->name, target, sizeof(temp->name));
-  }
-  else
-    temp->name[0] = '\0';
-
-  nlinks_ ++;
-}
-
-
-/** Adds a new target to the list. */
-void Fl_Help_View::add_target(const char *n,	// I - Name of target
-			      int        yy)	// I - Y position of target
-{
-  Fl_Help_Target	*temp;			// New target
-
-
-  if (ntargets_ >= atargets_)
-  {
-    atargets_ += 16;
-
-    if (atargets_ == 16)
-      targets_ = (Fl_Help_Target *)malloc(sizeof(Fl_Help_Target) * atargets_);
-    else
-      targets_ = (Fl_Help_Target *)realloc(targets_, sizeof(Fl_Help_Target) * atargets_);
-  }
-
-  temp = targets_ + ntargets_;
-
-  temp->y = yy;
-  strlcpy(temp->name, n, sizeof(temp->name));
-
-  ntargets_ ++;
-}
-
-/** Compares two targets.*/
-int							// O - Result of comparison
-Fl_Help_View::compare_targets(const Fl_Help_Target *t0,	// I - First target
-                             const Fl_Help_Target *t1)	// I - Second target
-{
-  return (strcasecmp(t0->name, t1->name));
-}
-
-/** Computes the alignment for a line in a block.*/
-int						// O - New line
-Fl_Help_View::do_align(Fl_Help_Block *block,	// I - Block to add to
-                      int          line,	// I - Current line
-		      int          xx,		// I - Current X position
-		      int          a,		// I - Current alignment
-		      int          &l)		// IO - Starting link
-{
-  int	offset;					// Alignment offset
-
-
-  switch (a)
-  {
-    case RIGHT :	// Right align
-	offset = block->w - xx;
-	break;
-    case CENTER :	// Center
-	offset = (block->w - xx) / 2;
-	break;
-    default :		// Left align
-	offset = 0;
-	break;
-  }
-
-  block->line[line] = block->x + offset;
-
-  if (line < 31)
-    line ++;
-
-  while (l < nlinks_)
-  {
-    links_[l].x += offset;
-    links_[l].w += offset;
-    l ++;
-  }
-
-  return (line);
-}
-
-/** Draws the Fl_Help_View widget. */
-void
-Fl_Help_View::draw()
-{
-  int			i;		// Looping var
-  const Fl_Help_Block	*block;		// Pointer to current block
-  const char		*ptr,		// Pointer to text in block
-			*attrs;		// Pointer to start of element attributes
-  HV_Edit_Buffer	buf;		// Text buffer
-  char			attr[1024];	// Attribute buffer
-  int			xx, yy, ww, hh;	// Current positions and sizes
-  int			line;		// Current line
-  Fl_Font               font;
-  Fl_Fontsize           fsize;          // Current font and size
-  Fl_Color              fcolor;         // current font color
-  int			head, pre,	// Flags for text
-			needspace;	// Do we need whitespace?
-  Fl_Boxtype		b = box() ? box() : FL_DOWN_BOX;
-					// Box to draw...
-  int			underline,	// Underline text?
-                        xtra_ww;        // Extra width for underlined space between words
-
-  DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-  // Draw the scrollbar(s) and box first...
-  ww = w();
-  hh = h();
-  i  = 0;
-
-  draw_box(b, x(), y(), ww, hh, bgcolor_);
-
-  if ( hscrollbar_.visible() || scrollbar_.visible() ) {
-    int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    int hor_vis = hscrollbar_.visible();
-    int ver_vis = scrollbar_.visible();
-    // Scrollbar corner
-    int scorn_x = x() + ww - (ver_vis?scrollsize:0) - Fl::box_dw(b) + Fl::box_dx(b);
-    int scorn_y = y() + hh - (hor_vis?scrollsize:0) - Fl::box_dh(b) + Fl::box_dy(b);
-    if ( hor_vis ) {
-      if ( hscrollbar_.h() != scrollsize ) {		// scrollsize changed?
-	hscrollbar_.resize(x(), scorn_y, scorn_x - x(), scrollsize);
-	init_sizes();
-      }
-      draw_child(hscrollbar_);
-      hh -= scrollsize;
-    }
-    if ( ver_vis ) {
-      if ( scrollbar_.w() != scrollsize ) {		// scrollsize changed?
-	scrollbar_.resize(scorn_x, y(), scrollsize, scorn_y - y());
-	init_sizes();
-      }
-      draw_child(scrollbar_);
-      ww -= scrollsize;
-    }
-    if ( hor_vis && ver_vis ) {
-      // Both scrollbars visible? Draw little gray box in corner
-      fl_color(FL_GRAY);
-      fl_rectf(scorn_x, scorn_y, scrollsize, scrollsize);
-    }
-  }
-
-  if (!value_)
-    return;
-
-  if (current_view == this && selected) {
-    hv_selection_color      = FL_SELECTION_COLOR;
-    hv_selection_text_color = fl_contrast(textcolor_, FL_SELECTION_COLOR);
-  }
-  current_pos = 0;
-
-  // Clip the drawing to the inside of the box...
-  fl_push_clip(x() + Fl::box_dx(b), y() + Fl::box_dy(b),
-               ww - Fl::box_dw(b), hh - Fl::box_dh(b));
-  fl_color(textcolor_);
-
-  // Draw all visible blocks...
-  for (i = 0, block = blocks_; i < nblocks_; i ++, block ++)
-    if ((block->y + block->h) >= topline_ && block->y < (topline_ + h()))
-    {
-      line      = 0;
-      xx        = block->line[line];
-      yy        = block->y - topline_;
-      hh        = 0;
-      pre       = 0;
-      head      = 0;
-      needspace = 0;
-      underline = 0;
-
-      initfont(font, fsize, fcolor);
-      // byte length difference between html entity (encoded by &...;) and
-      // UTF-8 encoding of same character
-      int entity_extra_length = 0;
-      for (ptr = block->start, buf.clear(); ptr < block->end;)
-      {
-	if ((*ptr == '<' || isspace((*ptr)&255)) && buf.size() > 0)
-	{
-	  if (!head && !pre)
-	  {
-            // Check width...
-            ww = buf.width();
-
-            if (needspace && xx > block->x)
-	      xx += (int)fl_width(' ');
-
-            if ((xx + ww) > block->w)
-	    {
-	      if (line < 31)
-	        line ++;
-	      xx = block->line[line];
-	      yy += hh;
-	      hh = 0;
-	    }
-
-            hv_draw(buf.c_str(), xx + x() - leftline_, yy + y(), entity_extra_length);
-	    buf.clear();
-            entity_extra_length = 0;
-	    if (underline) {
-              xtra_ww = isspace((*ptr)&255)?(int)fl_width(' '):0;
-              fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                xx + x() - leftline_ + ww + xtra_ww);
-            }
-            current_pos = (int) (ptr-value_);
-
-            xx += ww;
-	    if ((fsize + 2) > hh)
-	      hh = fsize + 2;
-
-	    needspace = 0;
-	  }
-	  else if (pre)
-	  {
-	    while (isspace((*ptr)&255))
-	    {
-	      if (*ptr == '\n')
-	      {
-		hv_draw(buf.c_str(), xx + x() - leftline_, yy + y());
-		if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-					 xx + x() - leftline_ + buf.width());
-		buf.clear();
-		current_pos = (int) (ptr-value_);
-		if (line < 31)
-		  line ++;
-		xx = block->line[line];
-		yy += hh;
-		hh = fsize + 2;
-	      }
-	      else if (*ptr == '\t')
-	      {
-		// Do tabs every 8 columns...
-		buf.add(' '); // add at least one space
-		while (buf.size() & 7)
-	          buf.add(' ');
-	      }
-	      else {
-	        buf.add(' ');
-	      }
-              if ((fsize + 2) > hh)
-	        hh = fsize + 2;
-
-              ptr ++;
-	    }
-
-            if (buf.size() > 0)
-	    {
-              hv_draw(buf.c_str(), xx + x() - leftline_, yy + y());
-	      ww = buf.width();
-	      buf.clear();
-	      if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                               xx + x() - leftline_ + ww);
-              xx += ww;
-              current_pos = (int) (ptr-value_);
-	    }
-
-	    needspace = 0;
-	  }
-	  else
-	  {
-	    buf.clear();
-
-	    while (isspace((*ptr)&255))
-              ptr ++;
-            current_pos = (int) (ptr-value_);
-	  }
-	}
-
-	if (*ptr == '<')
-	{
-	  ptr ++;
-
-          if (strncmp(ptr, "!--", 3) == 0)
-	  {
-	    // Comment...
-	    ptr += 3;
-	    if ((ptr = strstr(ptr, "-->")) != NULL)
-	    {
-	      ptr += 3;
-	      continue;
-	    }
-	    else
-	      break;
-	  }
-
-	  while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-	    buf.add(*ptr++);
-
-	  attrs = ptr;
-	  while (*ptr && *ptr != '>')
-            ptr ++;
-
-	  if (*ptr == '>')
-            ptr ++;
-
-          // end of command reached, set the supposed start of printed eord here
-          current_pos = (int) (ptr-value_);
-	  if (buf.cmp("HEAD"))
-            head = 1;
-	  else if (buf.cmp("BR"))
-	  {
-	    if (line < 31)
-	      line ++;
-	    xx = block->line[line];
-            yy += hh;
-	    hh = 0;
-	  }
-	  else if (buf.cmp("HR"))
-	  {
-	    fl_line(block->x + x(), yy + y(), block->w + x(),
-	            yy + y());
-
-	    if (line < 31)
-	      line ++;
-	    xx = block->line[line];
-            yy += 2 * fsize; //hh;
-	    hh = 0;
-	  }
-	  else if (buf.cmp("CENTER") ||
-		   buf.cmp("P") ||
-		   buf.cmp("H1") ||
-		   buf.cmp("H2") ||
-		   buf.cmp("H3") ||
-		   buf.cmp("H4") ||
-		   buf.cmp("H5") ||
-		   buf.cmp("H6") ||
-		   buf.cmp("UL") ||
-		   buf.cmp("OL") ||
-		   buf.cmp("DL") ||
-		   buf.cmp("LI") ||
-		   buf.cmp("DD") ||
-		   buf.cmp("DT") ||
-		   buf.cmp("PRE"))
-	  {
-            if (tolower(buf[0]) == 'h')
-	    {
-	      font  = FL_HELVETICA_BOLD;
-	      fsize = textsize_ + '7' - buf[1];
-	    }
-	    else if (buf.cmp("DT"))
-	    {
-	      font  = textfont_ | FL_ITALIC;
-	      fsize = textsize_;
-	    }
-	    else if (buf.cmp("PRE"))
-	    {
-	      font  = FL_COURIER;
-	      fsize = textsize_;
-	      pre   = 1;
-	    }
-
-            if (buf.cmp("LI"))
-	    {
-	      // draw bullet (&bull;) Unicode: U+2022, UTF-8 (hex): e2 80 a2
-              unsigned char bullet[4] = { 0xe2, 0x80, 0xa2, 0x00 };
-              hv_draw((char *)bullet, xx - fsize + x() - leftline_, yy + y());
-	    }
-
-	    pushfont(font, fsize);
-	    buf.clear();
-	  }
-	  else if (buf.cmp("A") &&
-	           get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
-	  {
-	    fl_color(linkcolor_);
-	    underline = 1;
-	  }
-	  else if (buf.cmp("/A"))
-	  {
-	    fl_color(textcolor_);
-	    underline = 0;
-	  }
-	  else if (buf.cmp("FONT"))
-	  {
-	    if (get_attr(attrs, "COLOR", attr, sizeof(attr)) != NULL) {
-	      textcolor_ = get_color(attr, textcolor_);
-	    }
-
-            if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
-	      if (!strncasecmp(attr, "helvetica", 9) ||
-	          !strncasecmp(attr, "arial", 5) ||
-		  !strncasecmp(attr, "sans", 4)) font = FL_HELVETICA;
-              else if (!strncasecmp(attr, "times", 5) ||
-	               !strncasecmp(attr, "serif", 5)) font = FL_TIMES;
-              else if (!strncasecmp(attr, "symbol", 6)) font = FL_SYMBOL;
-	      else font = FL_COURIER;
-            }
-
-            if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
-              if (isdigit(attr[0] & 255)) {
-	        // Absolute size
-	        fsize = (int)(textsize_ * pow(1.2, atof(attr) - 3.0));
-	      } else {
-	        // Relative size
-	        fsize = (int)(fsize * pow(1.2, atof(attr) - 3.0));
-	      }
-	    }
-
-            pushfont(font, fsize);
-	  }
-	  else if (buf.cmp("/FONT"))
-	  {
-	    popfont(font, fsize, textcolor_);
-	  }
-	  else if (buf.cmp("U"))
-	    underline = 1;
-	  else if (buf.cmp("/U"))
-	    underline = 0;
-	  else if (buf.cmp("B") ||
-	           buf.cmp("STRONG"))
-	    pushfont(font |= FL_BOLD, fsize);
-	  else if (buf.cmp("TD") ||
-	           buf.cmp("TH"))
-          {
-	    int tx, ty, tw, th;
-
-	    if (tolower(buf[1]) == 'h')
-	      pushfont(font |= FL_BOLD, fsize);
-	    else
-	      pushfont(font = textfont_, fsize);
-
-            tx = block->x - 4 - leftline_;
-	    ty = block->y - topline_ - fsize - 3;
-            tw = block->w - block->x + 7;
-	    th = block->h + fsize - 5;
-
-            if (tx < 0)
-	    {
-	      tw += tx;
-	      tx  = 0;
-	    }
-
-	    if (ty < 0)
-	    {
-	      th += ty;
-	      ty  = 0;
-	    }
-
-            tx += x();
-	    ty += y();
-
-            if (block->bgcolor != bgcolor_)
-	    {
-	      fl_color(block->bgcolor);
-              fl_rectf(tx, ty, tw, th);
-              fl_color(textcolor_);
-	    }
-
-            if (block->border)
-              fl_rect(tx, ty, tw, th);
-	  }
-	  else if (buf.cmp("I") ||
-                   buf.cmp("EM"))
-	    pushfont(font |= FL_ITALIC, fsize);
-	  else if (buf.cmp("CODE") ||
-	           buf.cmp("TT"))
-	    pushfont(font = FL_COURIER, fsize);
-	  else if (buf.cmp("KBD"))
-	    pushfont(font = FL_COURIER_BOLD, fsize);
-	  else if (buf.cmp("VAR"))
-	    pushfont(font = FL_COURIER_ITALIC, fsize);
-	  else if (buf.cmp("/HEAD"))
-            head = 0;
-	  else if (buf.cmp("/H1") ||
-		   buf.cmp("/H2") ||
-		   buf.cmp("/H3") ||
-		   buf.cmp("/H4") ||
-		   buf.cmp("/H5") ||
-		   buf.cmp("/H6") ||
-		   buf.cmp("/B") ||
-		   buf.cmp("/STRONG") ||
-		   buf.cmp("/I") ||
-		   buf.cmp("/EM") ||
-		   buf.cmp("/CODE") ||
-		   buf.cmp("/TT") ||
-		   buf.cmp("/KBD") ||
-		   buf.cmp("/VAR"))
-	    popfont(font, fsize, fcolor);
-	  else if (buf.cmp("/PRE"))
-	  {
-	    popfont(font, fsize, fcolor);
-	    pre = 0;
-	  }
-	  else if (buf.cmp("IMG"))
-	  {
-	    Fl_Shared_Image *img = 0;
-	    int		width, height;
-	    char	wattr[8], hattr[8];
-
-
-            get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-            get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	    width  = get_length(wattr);
-	    height = get_length(hattr);
-
-	    if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	      img = get_image(attr, width, height);
-	      if (!width) width = img->w();
-	      if (!height) height = img->h();
-	    }
-
-	    if (!width || !height) {
-              if (get_attr(attrs, "ALT", attr, sizeof(attr)) == NULL) {
-	        strcpy(attr, "IMG");
-              }
-	    }
-
-	    ww = width;
-
-	    if (needspace && xx > block->x)
-	      xx += (int)fl_width(' ');
-
-	    if ((xx + ww) > block->w)
-	    {
-	      if (line < 31)
-		line ++;
-
-	      xx = block->line[line];
-	      yy += hh;
-	      hh = 0;
-	    }
-
-	    if (img) {
-	      img->draw(xx + x() - leftline_,
-	                yy + y() - fl_height() + fl_descent() + 2);
-	    }
-
-	    xx += ww;
-	    if ((height + 2) > hh)
-	      hh = height + 2;
-
-	    needspace = 0;
-	  }
-	  buf.clear();
-	}
-	else if (*ptr == '\n' && pre)
-	{
-          hv_draw(buf.c_str(), xx + x() - leftline_, yy + y());
-	  buf.clear();
-
-	  if (line < 31)
-	    line ++;
-	  xx = block->line[line];
-	  yy += hh;
-	  hh = fsize + 2;
-	  needspace = 0;
-
-	  ptr ++;
-          current_pos = (int) (ptr-value_);
-	}
-	else if (isspace((*ptr)&255))
-	{
-	  if (pre)
-	  {
-	    if (*ptr == ' ')
-	      buf.add(' ');
-	    else
-	    {
-	      // Do tabs every 8 columns...
-	      buf.add(' '); // at least one space
-	      while (buf.size() & 7)
-	        buf.add(' ');
-            }
-	  }
-
-          ptr ++;
-          if (!pre) current_pos = (int) (ptr-value_);
-	  needspace = 1;
-	}
-	else if (*ptr == '&') // process html entity
-	{
-	  ptr ++;
-
-          int qch = quote_char(ptr);
-
-	  if (qch < 0)
-	    buf.add('&');
-	  else {
-            int utf8l = buf.size();
-	    buf.add(qch);
-            utf8l = buf.size() - utf8l; // length of added UTF-8 text
-            const char *oldptr = ptr;
-	    ptr = strchr(ptr, ';') + 1;
-            entity_extra_length += ptr - (oldptr-1) - utf8l; // extra length between html entity and UTF-8
-	  }
-
-          if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-	}
-	else
-	{
-	  buf.add(*ptr++);
-
-          if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-        }
-      }
-
-      if (buf.size() > 0 && !pre && !head)
-      {
-	ww = buf.width();
-
-        if (needspace && xx > block->x)
-	  xx += (int)fl_width(' ');
-
-	if ((xx + ww) > block->w)
-	{
-	  if (line < 31)
-	    line ++;
-	  xx = block->line[line];
-	  yy += hh;
-	  hh = 0;
-	}
-      }
-
-      if (buf.size() > 0 && !head)
-      {
-        hv_draw(buf.c_str(), xx + x() - leftline_, yy + y());
-	if (underline) fl_xyline(xx + x() - leftline_, yy + y() + 1,
-	                         xx + x() - leftline_ + ww);
-        current_pos = (int) (ptr-value_);
-      }
-    }
-
-  fl_pop_clip();
-} // draw()
-
-
-
-/** Finds the specified string \p s at starting position \p p.
-
-    \return the matching position or -1 if not found
-*/
-int						// O - Matching position or -1 if not found
-Fl_Help_View::find(const char *s,		// I - String to find
-                   int        p)		// I - Starting position
-{
-  int		i,				// Looping var
-		c;				// Current character
-  Fl_Help_Block	*b;				// Current block
-  const char	*bp,				// Block matching pointer
-		*bs,				// Start of current comparison
-		*sp;				// Search string pointer
-
-
-  DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-  // Range check input and value...
-  if (!s || !value_) return -1;
-
-  if (p < 0 || p >= (int)strlen(value_)) p = 0;
-  else if (p > 0) p ++;
-
-  // Look for the string...
-  for (i = nblocks_, b = blocks_; i > 0; i --, b ++) {
-    if (b->end < (value_ + p))
-      continue;
-
-    if (b->start < (value_ + p)) bp = value_ + p;
-    else bp = b->start;
-
-    for (sp = s, bs = bp; *sp && *bp && bp < b->end; bp ++) {
-      if (*bp == '<') {
-        // skip to end of element...
-	while (*bp && bp < b->end && *bp != '>') bp ++;
-	continue;
-      } else if (*bp == '&') {
-        // decode HTML entity...
-	if ((c = quote_char(bp + 1)) < 0) c = '&';	// *FIXME* UTF-8, see below
-	else bp = strchr(bp + 1, ';') + 1;
-      } else c = *bp;
-
-      // *FIXME* *UTF-8* (A.S. 02/14/2016)
-      // At this point c may be an arbitrary Unicode Code Point corresponding
-      // to a quoted character (see above), i.e. it _can_ be a multi byte
-      // UTF-8 sequence and must be compared with the corresponding
-      // multi byte string in (*sp)...
-      // For instance: "&euro;" == 0x20ac -> 0xe2 0x82 0xac (UTF-8: 3 bytes).
-      // Hint: use fl_utf8encode() [see below]
-
-      if (tolower(*sp) == tolower(c)) sp ++;
-      else {
-        // No match, so reset to start of search...
-	sp = s;
-	bs ++;
-	bp = bs;
-      }
-    }
-
-    if (!*sp) {
-      // Found a match!
-      topline(b->y - b->h);
-      return (int) (b->end - value_);
-    }
-  }
-
-  // No match!
-  return (-1);
-}
-
-/** Formats the help text. */
-void Fl_Help_View::format() {
-  int		i;		// Looping var
-  int		done;		// Are we done yet?
-  Fl_Help_Block	*block,		// Current block
-		*cell;		// Current table cell
-  int		cells[MAX_COLUMNS],
-				// Cells in the current row...
-		row;		// Current table row (block number)
-  const char	*ptr,		// Pointer into block
-		*start,		// Pointer to start of element
-		*attrs;		// Pointer to start of element attributes
-  HV_Edit_Buffer buf;		// Text buffer
-  char		attr[1024],	// Attribute buffer
-		wattr[1024],	// Width attribute buffer
-		hattr[1024],	// Height attribute buffer
-		linkdest[1024];	// Link destination
-  int		xx, yy, ww, hh;	// Size of current text fragment
-  int		line;		// Current line in block
-  int		links;		// Links for current line
-  Fl_Font       font;
-  Fl_Fontsize   fsize;          // Current font and size
-  Fl_Color      fcolor;         // Current font color
-  unsigned char	border;		// Draw border?
-  int		talign,		// Current alignment
-		newalign,	// New alignment
-		head,		// In the <HEAD> section?
-		pre,		// <PRE> text?
-		needspace;	// Do we need whitespace?
-  int		table_width,	// Width of table
-		table_offset;	// Offset of table
-  int		column,		// Current table column number
-		columns[MAX_COLUMNS];
-				// Column widths
-  Fl_Color	tc, rc;		// Table/row background color
-  Fl_Boxtype	b = box() ? box() : FL_DOWN_BOX;
-				// Box to draw...
-  fl_margins	margins;	// Left margin stack...
-
-  DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-  // Reset document width...
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  hsize_ = w() - scrollsize - Fl::box_dw(b);
-
-  done = 0;
-  while (!done)
-  {
-    // Reset state variables...
-    done       = 1;
-    nblocks_   = 0;
-    nlinks_    = 0;
-    ntargets_  = 0;
-    size_      = 0;
-    bgcolor_   = color();
-    textcolor_ = textcolor();
-    linkcolor_ = fl_contrast(FL_BLUE, color());
-
-    tc = rc = bgcolor_;
-
-    strcpy(title_, "Untitled");
-
-    if (!value_)
-      return;
-
-    // Setup for formatting...
-    initfont(font, fsize, fcolor);
-
-    line         = 0;
-    links        = 0;
-    xx           = margins.clear();
-    yy           = fsize + 2;
-    ww           = 0;
-    column       = 0;
-    border       = 0;
-    hh           = 0;
-    block        = add_block(value_, xx, yy, hsize_, 0);
-    row          = 0;
-    head         = 0;
-    pre          = 0;
-    talign       = LEFT;
-    newalign     = LEFT;
-    needspace    = 0;
-    linkdest[0]  = '\0';
-    table_offset = 0;
-
-    // Html text character loop
-    for (ptr = value_, buf.clear(); *ptr;)
-    {
-      // End of word?
-      if ((*ptr == '<' || isspace((*ptr)&255)) && buf.size() > 0)
-      {
-        // Get width of word parsed so far...
-        ww = buf.width();
-
-	if (!head && !pre)
-	{
-          // Check width...
-          if (ww > hsize_) {
-	    hsize_ = ww;
-	    done   = 0;
-	    break;
-	  }
-
-          if (needspace && xx > block->x)
-	    ww += (int)fl_width(' ');
-
-  //        printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
-  //	       line, xx, ww, block->x, block->w);
-
-          if ((xx + ww) > block->w)
-	  {
-            line     = do_align(block, line, xx, newalign, links);
-	    xx       = block->x;
-	    yy       += hh;
-	    block->h += hh;
-	    hh       = 0;
-	  }
-
-          if (linkdest[0])
-	    add_link(linkdest, xx, yy - fsize, ww, fsize);
-
-	  xx += ww;
-	  if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-
-	  needspace = 0;
-	}
-	else if (pre)
-	{
-          // Add a link as needed...
-          if (linkdest[0])
-	    add_link(linkdest, xx, yy - hh, ww, hh);
-
-	  xx += ww;
-	  if ((fsize + 2) > hh)
-	    hh = fsize + 2;
-
-          // Handle preformatted text...
-	  while (isspace((*ptr)&255))
-	  {
-	    if (*ptr == '\n')
-	    {
-              if (xx > hsize_) break;
-
-              line     = do_align(block, line, xx, newalign, links);
-              xx       = block->x;
-	      yy       += hh;
-	      block->h += hh;
-	      hh       = fsize + 2;
-	    }
-	    else
-              xx += (int)fl_width(' ');
-
-            if ((fsize + 2) > hh)
-	      hh = fsize + 2;
-
-            ptr ++;
-	  }
-
-          if (xx > hsize_) {
-	    hsize_ = xx;
-	    done   = 0;
-	    break;
-	  }
-
-	  needspace = 0;
-	}
-	else
-	{
-          // Handle normal text or stuff in the <HEAD> section...
-	  while (isspace((*ptr)&255))
-            ptr ++;
-	}
-
-	buf.clear();
-      }
-
-      if (*ptr == '<')
-      {
-	// Handle html tags..
-	start = ptr;
-	ptr ++;
-
-        if (strncmp(ptr, "!--", 3) == 0)
-	{
-	  // Comment...
-	  ptr += 3;
-	  if ((ptr = strstr(ptr, "-->")) != NULL)
-	  {
-	    ptr += 3;
-	    continue;
-	  }
-	  else
-	    break;
-	}
-
-	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-	  buf.add(*ptr++);
-
-	attrs = ptr;
-	while (*ptr && *ptr != '>')
-          ptr ++;
-
-	if (*ptr == '>')
-          ptr ++;
-
-	if (buf.cmp("HEAD"))
-          head = 1;
-	else if (buf.cmp("/HEAD"))
-          head = 0;
-	else if (buf.cmp("TITLE"))
-	{
-          // Copy the title in the document...
-	  char *st;
-          for (st = title_;
-	       *ptr != '<' && *ptr && st < (title_ + sizeof(title_) - 1);
-	       *st++ = *ptr++) {/*empty*/}
-
-	  *st = '\0';
-	  buf.clear();
-	}
-	else if (buf.cmp("A"))
-	{
-          if (get_attr(attrs, "NAME", attr, sizeof(attr)) != NULL)
-	    add_target(attr, yy - fsize - 2);
-
-	  if (get_attr(attrs, "HREF", attr, sizeof(attr)) != NULL)
-	    strlcpy(linkdest, attr, sizeof(linkdest));
-	}
-	else if (buf.cmp("/A"))
-          linkdest[0] = '\0';
-	else if (buf.cmp("BODY"))
-	{
-          bgcolor_   = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)),
-	                	 color());
-          textcolor_ = get_color(get_attr(attrs, "TEXT", attr, sizeof(attr)),
-	                	 textcolor());
-          linkcolor_ = get_color(get_attr(attrs, "LINK", attr, sizeof(attr)),
-	                	 fl_contrast(FL_BLUE, color()));
-	}
-	else if (buf.cmp("BR"))
-	{
-          line     = do_align(block, line, xx, newalign, links);
-          xx       = block->x;
-	  block->h += hh;
-          yy       += hh;
-	  hh       = 0;
-	}
-	else if (buf.cmp("CENTER") ||
-		 buf.cmp("P") ||
-		 buf.cmp("H1") ||
-		 buf.cmp("H2") ||
-		 buf.cmp("H3") ||
-		 buf.cmp("H4") ||
-		 buf.cmp("H5") ||
-		 buf.cmp("H6") ||
-		 buf.cmp("UL") ||
-		 buf.cmp("OL") ||
-		 buf.cmp("DL") ||
-		 buf.cmp("LI") ||
-		 buf.cmp("DD") ||
-		 buf.cmp("DT") ||
-		 buf.cmp("HR") ||
-		 buf.cmp("PRE") ||
-		 buf.cmp("TABLE"))
-	{
-          block->end = start;
-          line       = do_align(block, line, xx, newalign, links);
-	  newalign   = buf.cmp("CENTER") ? CENTER : LEFT;
-          xx         = block->x;
-          block->h   += hh;
-
-          if (buf.cmp("UL") ||
-	      buf.cmp("OL") ||
-	      buf.cmp("DL"))
-          {
-	    block->h += fsize + 2;
-	    xx       = margins.push(4 * fsize);
-	  }
-          else if (buf.cmp("TABLE"))
-	  {
-	    if (get_attr(attrs, "BORDER", attr, sizeof(attr)))
-	      border = (uchar)atoi(attr);
-	    else
-	      border = 0;
-
-            tc = rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), bgcolor_);
-
-	    block->h += fsize + 2;
-
-            format_table(&table_width, columns, start);
-
-            if ((xx + table_width) > hsize_) {
-#ifdef DEBUG
-              printf("xx=%d, table_width=%d, hsize_=%d\n", xx, table_width,
-	             hsize_);
-#endif // DEBUG
-	      hsize_ = xx + table_width;
-	      done   = 0;
-	      break;
-	    }
-
-            switch (get_align(attrs, talign))
-	    {
-	      default :
-	          table_offset = 0;
-	          break;
-
-	      case CENTER :
-	          table_offset = (hsize_ - table_width) / 2 - textsize_;
-	          break;
-
-	      case RIGHT :
-	          table_offset = hsize_ - table_width - textsize_;
-	          break;
-	    }
-
-	    column = 0;
-	  }
-
-          if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
-	  {
-	    font  = FL_HELVETICA_BOLD;
-	    fsize = textsize_ + '7' - buf[1];
-	  }
-	  else if (buf.cmp("DT"))
-	  {
-	    font  = textfont_ | FL_ITALIC;
-	    fsize = textsize_;
-	  }
-	  else if (buf.cmp("PRE"))
-	  {
-	    font  = FL_COURIER;
-	    fsize = textsize_;
-	    pre   = 1;
-	  }
-	  else
-	  {
-	    font  = textfont_;
-	    fsize = textsize_;
-	  }
-
-	  pushfont(font, fsize);
-
-          yy = block->y + block->h;
-          hh = 0;
-
-          if ((tolower(buf[0]) == 'h' && isdigit(buf[1])) ||
-	      buf.cmp("DD") ||
-	      buf.cmp("DT") ||
-	      buf.cmp("P"))
-            yy += fsize + 2;
-	  else if (buf.cmp("HR"))
-	  {
-	    hh += 2 * fsize;
-	    yy += fsize;
-	  }
-
-          if (row)
-	    block = add_block(start, xx, yy, block->w, 0);
-	  else
-	    block = add_block(start, xx, yy, hsize_, 0);
-
-	  needspace = 0;
-	  line      = 0;
-
-	  if (buf.cmp("CENTER"))
-	    newalign = talign = CENTER;
-	  else
-	    newalign = get_align(attrs, talign);
-	}
-	else if (buf.cmp("/CENTER") ||
-		 buf.cmp("/P") ||
-		 buf.cmp("/H1") ||
-		 buf.cmp("/H2") ||
-		 buf.cmp("/H3") ||
-		 buf.cmp("/H4") ||
-		 buf.cmp("/H5") ||
-		 buf.cmp("/H6") ||
-		 buf.cmp("/PRE") ||
-		 buf.cmp("/UL") ||
-		 buf.cmp("/OL") ||
-		 buf.cmp("/DL") ||
-		 buf.cmp("/TABLE"))
-	{
-          line       = do_align(block, line, xx, newalign, links);
-          xx         = block->x;
-          block->end = ptr;
-
-          if (buf.cmp("/UL") ||
-	      buf.cmp("/OL") ||
-	      buf.cmp("/DL"))
-	  {
-	    xx       = margins.pop();
-	    block->h += fsize + 2;
-	  }
-	  else if (buf.cmp("/TABLE"))
-          {
-	    block->h += fsize + 2;
-            xx       = margins.current();
-          }
-	  else if (buf.cmp("/PRE"))
-	  {
-	    pre = 0;
-	    hh  = 0;
-	  }
-	  else if (buf.cmp("/CENTER"))
-	    talign = LEFT;
-
-          popfont(font, fsize, fcolor);
-
-	  //#if defined(__GNUC__)
-          //#warning FIXME this isspace & 255 test will probably not work on a utf8 stream... And we use it everywhere!
-	  //#endif /*__GNUC__*/
-          while (isspace((*ptr)&255))
-	    ptr ++;
-
-          block->h += hh;
-          yy       += hh;
-
-          if (tolower(buf[2]) == 'l')
-            yy += fsize + 2;
-
-          if (row)
-	    block = add_block(ptr, xx, yy, block->w, 0);
-	  else
-	    block = add_block(ptr, xx, yy, hsize_, 0);
-
-	  needspace = 0;
-	  hh        = 0;
-	  line      = 0;
-	  newalign  = talign;
-	}
-	else if (buf.cmp("TR"))
-	{
-          block->end = start;
-          line       = do_align(block, line, xx, newalign, links);
-          xx         = block->x;
-          block->h   += hh;
-
-          if (row)
-	  {
-            yy = blocks_[row].y + blocks_[row].h;
-
-	    for (cell = blocks_ + row + 1; cell <= block; cell ++)
-	      if ((cell->y + cell->h) > yy)
-		yy = cell->y + cell->h;
-
-            block = blocks_ + row;
-
-            block->h = yy - block->y + 2;
-
-	    for (i = 0; i < column; i ++)
-	      if (cells[i])
-	      {
-		cell = blocks_ + cells[i];
-		cell->h = block->h;
-	      }
-	  }
-
-          memset(cells, 0, sizeof(cells));
-
-	  yy        = block->y + block->h - 4;
-	  hh        = 0;
-          block     = add_block(start, xx, yy, hsize_, 0);
-	  row       = (int) (block - blocks_);
-	  needspace = 0;
-	  column    = 0;
-	  line      = 0;
-
-          rc = get_color(get_attr(attrs, "BGCOLOR", attr, sizeof(attr)), tc);
-	}
-	else if (buf.cmp("/TR") && row)
-	{
-          line       = do_align(block, line, xx, newalign, links);
-          block->end = start;
-	  block->h   += hh;
-	  talign     = LEFT;
-
-          xx = blocks_[row].x;
-          yy = blocks_[row].y + blocks_[row].h;
-
-	  for (cell = blocks_ + row + 1; cell <= block; cell ++)
-	    if ((cell->y + cell->h) > yy)
-	      yy = cell->y + cell->h;
-
-          block = blocks_ + row;
-
-          block->h = yy - block->y + 2;
-
-	  for (i = 0; i < column; i ++)
-	    if (cells[i])
-	    {
-	      cell = blocks_ + cells[i];
-	      cell->h = block->h;
-	    }
-
-	  yy        = block->y + block->h /*- 4*/;
-          block     = add_block(start, xx, yy, hsize_, 0);
-	  needspace = 0;
-	  row       = 0;
-	  line      = 0;
-	}
-	else if ((buf.cmp("TD") ||
-                  buf.cmp("TH")) && row)
-	{
-          int	colspan;		// COLSPAN attribute
-
-
-          line       = do_align(block, line, xx, newalign, links);
-          block->end = start;
-	  block->h   += hh;
-
-          if (buf.cmp("TH"))
-	    font = textfont_ | FL_BOLD;
-	  else
-	    font = textfont_;
-
-          fsize = textsize_;
-
-          xx = blocks_[row].x + fsize + 3 + table_offset;
-	  for (i = 0; i < column; i ++)
-	    xx += columns[i] + 6;
-
-          margins.push(xx - margins.current());
-
-          if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
-	    colspan = atoi(attr);
-	  else
-	    colspan = 1;
-
-          for (i = 0, ww = -6; i < colspan; i ++)
-	    ww += columns[column + i] + 6;
-
-          if (block->end == block->start && nblocks_ > 1)
-	  {
-	    nblocks_ --;
-	    block --;
-	  }
-
-	  pushfont(font, fsize);
-
-	  yy        = blocks_[row].y;
-	  hh        = 0;
-          block     = add_block(start, xx, yy, xx + ww, 0, border);
-	  needspace = 0;
-	  line      = 0;
-	  newalign  = get_align(attrs, tolower(buf[1]) == 'h' ? CENTER : LEFT);
-	  talign    = newalign;
-
-          cells[column] = (int) (block - blocks_);
-
-	  column += colspan;
-
-          block->bgcolor = get_color(get_attr(attrs, "BGCOLOR", attr,
-	                                      sizeof(attr)), rc);
-	}
-	else if ((buf.cmp("/TD") ||
-                  buf.cmp("/TH")) && row)
-	{
-          line = do_align(block, line, xx, newalign, links);
-          popfont(font, fsize, fcolor);
-	  xx = margins.pop();
-	  talign = LEFT;
-	}
-	else if (buf.cmp("FONT"))
-	{
-          if (get_attr(attrs, "FACE", attr, sizeof(attr)) != NULL) {
-	    if (!strncasecmp(attr, "helvetica", 9) ||
-	        !strncasecmp(attr, "arial", 5) ||
-		!strncasecmp(attr, "sans", 4)) font = FL_HELVETICA;
-            else if (!strncasecmp(attr, "times", 5) ||
-	             !strncasecmp(attr, "serif", 5)) font = FL_TIMES;
-            else if (!strncasecmp(attr, "symbol", 6)) font = FL_SYMBOL;
-	    else font = FL_COURIER;
-          }
-
-          if (get_attr(attrs, "SIZE", attr, sizeof(attr)) != NULL) {
-            if (isdigit(attr[0] & 255)) {
-	      // Absolute size
-	      fsize = (int)(textsize_ * pow(1.2, atoi(attr) - 3.0));
-	    } else {
-	      // Relative size
-	      fsize = (int)(fsize * pow(1.2, atoi(attr)));
-	    }
-	  }
-
-          pushfont(font, fsize);
-	}
-	else if (buf.cmp("/FONT"))
-	  popfont(font, fsize, fcolor);
-	else if (buf.cmp("B") ||
-		 buf.cmp("STRONG"))
-	  pushfont(font |= FL_BOLD, fsize);
-	else if (buf.cmp("I") ||
-		 buf.cmp("EM"))
-	  pushfont(font |= FL_ITALIC, fsize);
-	else if (buf.cmp("CODE") ||
-		 buf.cmp("TT"))
-	  pushfont(font = FL_COURIER, fsize);
-	else if (buf.cmp("KBD"))
-	  pushfont(font = FL_COURIER_BOLD, fsize);
-	else if (buf.cmp("VAR"))
-	  pushfont(font = FL_COURIER_ITALIC, fsize);
-	else if (buf.cmp("/B") ||
-		 buf.cmp("/STRONG") ||
-		 buf.cmp("/I") ||
-		 buf.cmp("/EM") ||
-		 buf.cmp("/CODE") ||
-		 buf.cmp("/TT") ||
-		 buf.cmp("/KBD") ||
-		 buf.cmp("/VAR"))
-	  popfont(font, fsize, fcolor);
-	else if (buf.cmp("IMG"))
-	{
-	  Fl_Shared_Image	*img = 0;
-	  int		width;
-	  int		height;
-
-
-	  get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-	  get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	  width  = get_length(wattr);
-	  height = get_length(hattr);
-
-	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	    img    = get_image(attr, width, height);
-	    width  = img->w();
-	    height = img->h();
-	  }
-
-	  ww = width;
-
-          if (ww > hsize_) {
-	    hsize_ = ww;
-	    done   = 0;
-	    break;
-	  }
-
-	  if (needspace && xx > block->x)
-	    ww += (int)fl_width(' ');
-
-	  if ((xx + ww) > block->w)
-	  {
-	    line     = do_align(block, line, xx, newalign, links);
-	    xx       = block->x;
-	    yy       += hh;
-	    block->h += hh;
-	    hh       = 0;
-	  }
-
-	  if (linkdest[0])
-	    add_link(linkdest, xx, yy-fsize, ww, height);
-
-	  xx += ww;
-	  if ((height + 2) > hh)
-	    hh = height + 2;
-
-	  needspace = 0;
-	}
-	buf.clear();
-      }
-      else if (*ptr == '\n' && pre)
-      {
-	if (linkdest[0])
-	  add_link(linkdest, xx, yy - hh, ww, hh);
-
-        if (xx > hsize_) {
-	  hsize_ = xx;
-          done   = 0;
-	  break;
-	}
-
-	line      = do_align(block, line, xx, newalign, links);
-	xx        = block->x;
-	yy        += hh;
-	block->h  += hh;
-	needspace = 0;
-	ptr ++;
-      }
-      else if (isspace((*ptr)&255))
-      {
-	needspace = 1;
-	if ( pre ) {
-	  xx += (int)fl_width(' ');
-        }
-	ptr ++;
-      }
-      else if (*ptr == '&')
-      {
-        // Handle html '&' codes, eg. "&amp;"
-	ptr ++;
-
-        int qch = quote_char(ptr);
-
-	if (qch < 0)
-	  buf.add('&');
-	else {
-	  buf.add(qch);
-	  ptr = strchr(ptr, ';') + 1;
-	}
-
-	if ((fsize + 2) > hh)
-          hh = fsize + 2;
-      }
-      else
-      {
-        buf.add(*ptr++);
-
-	if ((fsize + 2) > hh)
-          hh = fsize + 2;
-      }
-    }
-
-    if (buf.size() > 0 && !head)
-    {
-      ww = buf.width();
-
-  //    printf("line = %d, xx = %d, ww = %d, block->x = %d, block->w = %d\n",
-  //	   line, xx, ww, block->x, block->w);
-
-      if (ww > hsize_) {
-	hsize_ = ww;
-	done   = 0;
-	break;
-      }
-
-      if (needspace && xx > block->x)
-	ww += (int)fl_width(' ');
-
-      if ((xx + ww) > block->w)
-      {
-	line     = do_align(block, line, xx, newalign, links);
-	xx       = block->x;
-	yy       += hh;
-	block->h += hh;
-	hh       = 0;
-      }
-
-      if (linkdest[0])
-	add_link(linkdest, xx, yy - fsize, ww, fsize);
-
-      xx += ww;
-    }
-
-    do_align(block, line, xx, newalign, links);
-
-    block->end = ptr;
-    size_      = yy + hh;
-  }
-
-//  printf("margins.depth_=%d\n", margins.depth_);
-
-  if (ntargets_ > 1)
-    qsort(targets_, ntargets_, sizeof(Fl_Help_Target),
-          (compare_func_t)compare_targets);
-
-  int dx = Fl::box_dw(b) - Fl::box_dx(b);
-  int dy = Fl::box_dh(b) - Fl::box_dy(b);
-  int ss = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  int dw = Fl::box_dw(b) + ss;
-  int dh = Fl::box_dh(b);
-
-  if (hsize_ > (w() - dw)) {
-    hscrollbar_.show();
-
-    dh += ss;
-
-    if (size_ < (h() - dh)) {
-      scrollbar_.hide();
-      hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
-                         w() - Fl::box_dw(b), ss);
-    } else {
-      scrollbar_.show();
-      scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
-                        ss, h() - ss - Fl::box_dh(b));
-      hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
-                         w() - ss - Fl::box_dw(b), ss);
-    }
-  } else {
-    hscrollbar_.hide();
-
-    if (size_ < (h() - dh)) scrollbar_.hide();
-    else {
-      scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
-                        ss, h() - Fl::box_dh(b));
-      scrollbar_.show();
-    }
-  }
-
-  // Reset scrolling if it needs to be...
-  if (scrollbar_.visible()) {
-    int temph = h() - Fl::box_dh(b);
-    if (hscrollbar_.visible()) temph -= ss;
-    if ((topline_ + temph) > size_) topline(size_ - temph);
-    else topline(topline_);
-  } else topline(0);
-
-  if (hscrollbar_.visible()) {
-    int tempw = w() - ss - Fl::box_dw(b);
-    if ((leftline_ + tempw) > hsize_) leftline(hsize_ - tempw);
-    else leftline(leftline_);
-  } else leftline(0);
-}
-
-
-/** Formats a table */
-void
-Fl_Help_View::format_table(int        *table_width,	// O - Total table width
-                           int        *columns,		// O - Column widths
-	                   const char *table)		// I - Pointer to start of table
-{
-  int		column,					// Current column
-		num_columns,				// Number of columns
-		colspan,				// COLSPAN attribute
-		width,					// Current width
-		temp_width,				// Temporary width
-		max_width,				// Maximum width
-		incell,					// In a table cell?
-		pre,					// <PRE> text?
-		needspace;				// Need whitespace?
-  HV_Edit_Buffer buf;					// Text buffer
-  char		attr[1024],				// Other attribute
-		wattr[1024],				// WIDTH attribute
-		hattr[1024];				// HEIGHT attribute
-  const char	*ptr,					// Pointer into table
-		*attrs,					// Pointer to attributes
-		*start;					// Start of element
-  int		minwidths[MAX_COLUMNS];			// Minimum widths for each column
-  Fl_Font       font;
-  Fl_Fontsize   fsize;				        // Current font and size
-  Fl_Color      fcolor;                                 // Currrent font color
-
-  DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-  // Clear widths...
-  *table_width = 0;
-  for (column = 0; column < MAX_COLUMNS; column ++)
-  {
-    columns[column]   = 0;
-    minwidths[column] = 0;
-  }
-
-  num_columns = 0;
-  colspan     = 0;
-  max_width   = 0;
-  pre         = 0;
-  needspace   = 0;
-  fstack_.top(font, fsize, fcolor);
-
-  // Scan the table...
-  for (ptr = table, column = -1, width = 0, incell = 0; *ptr;)
-  {
-    if ((*ptr == '<' || isspace((*ptr)&255)) && buf.size() > 0 && incell)
-    {
-      // Check width...
-      if (needspace)
-      {
-	buf.add(' ');
-	needspace = 0;
-      }
-
-      temp_width = buf.width();
-      buf.clear();
-
-      if (temp_width > minwidths[column])
-        minwidths[column] = temp_width;
-
-      width += temp_width;
-
-      if (width > max_width)
-        max_width = width;
-    }
-
-    if (*ptr == '<')
-    {
-      start = ptr;
-
-      for (buf.clear(), ptr ++; *ptr && *ptr != '>' && !isspace((*ptr)&255);)
-	buf.add(*ptr++);
-
-      attrs = ptr;
-      while (*ptr && *ptr != '>')
-        ptr ++;
-
-      if (*ptr == '>')
-        ptr ++;
-
-      if (buf.cmp("BR") ||
-	  buf.cmp("HR"))
-      {
-        width     = 0;
-	needspace = 0;
-      }
-      else if (buf.cmp("TABLE") && start > table)
-        break;
-      else if (buf.cmp("CENTER") ||
-               buf.cmp("P") ||
-               buf.cmp("H1") ||
-	       buf.cmp("H2") ||
-	       buf.cmp("H3") ||
-	       buf.cmp("H4") ||
-	       buf.cmp("H5") ||
-	       buf.cmp("H6") ||
-	       buf.cmp("UL") ||
-	       buf.cmp("OL") ||
-	       buf.cmp("DL") ||
-	       buf.cmp("LI") ||
-	       buf.cmp("DD") ||
-	       buf.cmp("DT") ||
-	       buf.cmp("PRE"))
-      {
-        width     = 0;
-	needspace = 0;
-
-        if (tolower(buf[0]) == 'h' && isdigit(buf[1]))
-	{
-	  font  = FL_HELVETICA_BOLD;
-	  fsize = textsize_ + '7' - buf[1];
-	}
-	else if (buf.cmp("DT"))
-	{
-	  font  = textfont_ | FL_ITALIC;
-	  fsize = textsize_;
-	}
-	else if (buf.cmp("PRE"))
-	{
-	  font  = FL_COURIER;
-	  fsize = textsize_;
-	  pre   = 1;
-	}
-	else if (buf.cmp("LI"))
-	{
-	  width  += 4 * fsize;
-	  font   = textfont_;
-	  fsize  = textsize_;
-	}
-	else
-	{
-	  font  = textfont_;
-	  fsize = textsize_;
-	}
-
-	pushfont(font, fsize);
-      }
-      else if (buf.cmp("/CENTER") ||
-	       buf.cmp("/P") ||
-	       buf.cmp("/H1") ||
-	       buf.cmp("/H2") ||
-	       buf.cmp("/H3") ||
-	       buf.cmp("/H4") ||
-	       buf.cmp("/H5") ||
-	       buf.cmp("/H6") ||
-	       buf.cmp("/PRE") ||
-	       buf.cmp("/UL") ||
-	       buf.cmp("/OL") ||
-	       buf.cmp("/DL"))
-      {
-        width     = 0;
-	needspace = 0;
-
-        popfont(font, fsize, fcolor);
-      }
-      else if (buf.cmp("TR") || buf.cmp("/TR") ||
-               buf.cmp("/TABLE"))
-      {
-//        printf("%s column = %d, colspan = %d, num_columns = %d\n",
-//	       buf.c_str(), column, colspan, num_columns);
-
-        if (column >= 0)
-	{
-	  // This is a hack to support COLSPAN...
-	  max_width /= colspan;
-
-	  while (colspan > 0)
-	  {
-	    if (max_width > columns[column])
-	      columns[column] = max_width;
-
-	    column ++;
-	    colspan --;
-	  }
-	}
-
-	if (buf.cmp("/TABLE"))
-	  break;
-
-	needspace = 0;
-	column    = -1;
-	width     = 0;
-	max_width = 0;
-	incell    = 0;
-      }
-      else if (buf.cmp("TD") ||
-               buf.cmp("TH"))
-      {
-//        printf("BEFORE column = %d, colspan = %d, num_columns = %d\n",
-//	       column, colspan, num_columns);
-
-        if (column >= 0)
-	{
-	  // This is a hack to support COLSPAN...
-	  max_width /= colspan;
-
-	  while (colspan > 0)
-	  {
-	    if (max_width > columns[column])
-	      columns[column] = max_width;
-
-	    column ++;
-	    colspan --;
-	  }
-	}
-	else
-	  column ++;
-
-        if (get_attr(attrs, "COLSPAN", attr, sizeof(attr)) != NULL)
-	  colspan = atoi(attr);
-	else
-	  colspan = 1;
-
-//        printf("AFTER column = %d, colspan = %d, num_columns = %d\n",
-//	       column, colspan, num_columns);
-
-        if ((column + colspan) >= num_columns)
-	  num_columns = column + colspan;
-
-	needspace = 0;
-	width     = 0;
-	incell    = 1;
-
-        if (buf.cmp("TH"))
-	  font = textfont_ | FL_BOLD;
-	else
-	  font = textfont_;
-
-        fsize = textsize_;
-
-	pushfont(font, fsize);
-
-        if (get_attr(attrs, "WIDTH", attr, sizeof(attr)) != NULL)
-	  max_width = get_length(attr);
-	else
-	  max_width = 0;
-
-//        printf("max_width = %d\n", max_width);
-      }
-      else if (buf.cmp("/TD") ||
-               buf.cmp("/TH"))
-      {
-	incell = 0;
-        popfont(font, fsize, fcolor);
-      }
-      else if (buf.cmp("B") ||
-               buf.cmp("STRONG"))
-	pushfont(font |= FL_BOLD, fsize);
-      else if (buf.cmp("I") ||
-               buf.cmp("EM"))
-	pushfont(font |= FL_ITALIC, fsize);
-      else if (buf.cmp("CODE") ||
-               buf.cmp("TT"))
-	pushfont(font = FL_COURIER, fsize);
-      else if (buf.cmp("KBD"))
-	pushfont(font = FL_COURIER_BOLD, fsize);
-      else if (buf.cmp("VAR"))
-	pushfont(font = FL_COURIER_ITALIC, fsize);
-      else if (buf.cmp("/B") ||
-	       buf.cmp("/STRONG") ||
-	       buf.cmp("/I") ||
-	       buf.cmp("/EM") ||
-	       buf.cmp("/CODE") ||
-	       buf.cmp("/TT") ||
-	       buf.cmp("/KBD") ||
-	       buf.cmp("/VAR"))
-	popfont(font, fsize, fcolor);
-      else if (buf.cmp("IMG") && incell)
-      {
-	Fl_Shared_Image	*img = 0;
-	int		iwidth, iheight;
-
-
-        get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-        get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	iwidth  = get_length(wattr);
-	iheight = get_length(hattr);
-
-        if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	  img     = get_image(attr, iwidth, iheight);
-	  iwidth  = img->w();
-	  iheight = img->h();
-	}
-
-	if (iwidth > minwidths[column])
-          minwidths[column] = iwidth;
-
-        width += iwidth;
-	if (needspace)
-	  width += (int)fl_width(' ');
-
-	if (width > max_width)
-          max_width = width;
-
-	needspace = 0;
-      }
-      buf.clear();
-    }
-    else if (*ptr == '\n' && pre)
-    {
-      width     = 0;
-      needspace = 0;
-      ptr ++;
-    }
-    else if (isspace((*ptr)&255))
-    {
-      needspace = 1;
-
-      ptr ++;
-    }
-    else if (*ptr == '&' )
-    {
-      ptr ++;
-
-      int qch = quote_char(ptr);
-
-      if (qch < 0)
-	buf.add('&');
-      else {
-	buf.add(qch);
-	ptr = strchr(ptr, ';') + 1;
-      }
-    }
-    else
-    {
-      buf.add(*ptr++);
-    }
-  }
-
-  // Now that we have scanned the entire table, adjust the table and
-  // cell widths to fit on the screen...
-  if (get_attr(table + 6, "WIDTH", attr, sizeof(attr)))
-    *table_width = get_length(attr);
-  else
-    *table_width = 0;
-
-#ifdef DEBUG
-  printf("num_columns = %d, table_width = %d\n", num_columns, *table_width);
-#endif // DEBUG
-
-  if (num_columns == 0)
-    return;
-
-  // Add up the widths...
-  for (column = 0, width = 0; column < num_columns; column ++)
-    width += columns[column];
-
-#ifdef DEBUG
-  printf("width = %d, w() = %d\n", width, w());
-  for (column = 0; column < num_columns; column ++)
-    printf("    columns[%d] = %d, minwidths[%d] = %d\n", column, columns[column],
-           column, minwidths[column]);
-#endif // DEBUG
-
-  // Adjust the width if needed...
-  int scale_width = *table_width;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (scale_width == 0) {
-    if (width > (hsize_ - scrollsize)) scale_width = hsize_ - scrollsize;
-    else scale_width = width;
-  }
-
-  if (width < scale_width) {
-#ifdef DEBUG
-    printf("Scaling table up to %d from %d...\n", scale_width, width);
-#endif // DEBUG
-
-    *table_width = 0;
-
-    scale_width = (scale_width - width) / num_columns;
-
-#ifdef DEBUG
-    printf("adjusted scale_width = %d\n", scale_width);
-#endif // DEBUG
-
-    for (column = 0; column < num_columns; column ++) {
-      columns[column] += scale_width;
-
-      (*table_width) += columns[column];
-    }
-  }
-  else if (width > scale_width) {
-#ifdef DEBUG
-    printf("Scaling table down to %d from %d...\n", scale_width, width);
-#endif // DEBUG
-
-    for (column = 0; column < num_columns; column ++) {
-      width       -= minwidths[column];
-      scale_width -= minwidths[column];
-    }
-
-#ifdef DEBUG
-    printf("adjusted width = %d, scale_width = %d\n", width, scale_width);
-#endif // DEBUG
-
-    if (width > 0) {
-      for (column = 0; column < num_columns; column ++) {
-	columns[column] -= minwidths[column];
-	columns[column] = scale_width * columns[column] / width;
-	columns[column] += minwidths[column];
-      }
-    }
-
-    *table_width = 0;
-    for (column = 0; column < num_columns; column ++) {
-      (*table_width) += columns[column];
-    }
-  }
-  else if (*table_width == 0)
-    *table_width = width;
-
-#ifdef DEBUG
-  printf("FINAL table_width = %d\n", *table_width);
-  for (column = 0; column < num_columns; column ++)
-    printf("    columns[%d] = %d\n", column, columns[column]);
-#endif // DEBUG
-}
-
-
-/** Frees memory used for the document. */
-void
-Fl_Help_View::free_data() {
-  // Release all images...
-  if (value_) {
-    const char	*ptr,		// Pointer into block
-		*attrs;		// Pointer to start of element attributes
-    HV_Edit_Buffer buf;		// Text buffer
-    char	attr[1024],	// Attribute buffer
-		wattr[1024],	// Width attribute buffer
-		hattr[1024];	// Height attribute buffer
-
-    DEBUG_FUNCTION(__LINE__,__FUNCTION__);
-
-    for (ptr = value_; *ptr;)
-    {
-      if (*ptr == '<')
-      {
-	ptr ++;
-
-        if (strncmp(ptr, "!--", 3) == 0)
-	{
-	  // Comment...
-	  ptr += 3;
-	  if ((ptr = strstr(ptr, "-->")) != NULL)
-	  {
-	    ptr += 3;
-	    continue;
-	  }
-	  else
-	    break;
-	}
-
-        buf.clear();
-
-	while (*ptr && *ptr != '>' && !isspace((*ptr)&255))
-	  buf.add(*ptr++);
-
-	attrs = ptr;
-	while (*ptr && *ptr != '>')
-          ptr ++;
-
-	if (*ptr == '>')
-          ptr ++;
-
-	if (buf.cmp("IMG"))
-	{
-	  Fl_Shared_Image	*img;
-	  int		width;
-	  int		height;
-
-          get_attr(attrs, "WIDTH", wattr, sizeof(wattr));
-          get_attr(attrs, "HEIGHT", hattr, sizeof(hattr));
-	  width  = get_length(wattr);
-	  height = get_length(hattr);
-
-	  if (get_attr(attrs, "SRC", attr, sizeof(attr))) {
-	    // Get and release the image to free it from memory...
-	    img = get_image(attr, width, height);
-	    if ((void*)img != &broken_image) {
-	      img->release();
-	    }
-	  }
-	}
-      }
-      else
-        ptr ++;
-    }
-
-    free((void *)value_);
-    value_ = 0;
-  }
-
-  // Free all of the arrays...
-  if (nblocks_) {
-    free(blocks_);
-
-    ablocks_ = 0;
-    nblocks_ = 0;
-    blocks_  = 0;
-  }
-
-  if (nlinks_) {
-    free(links_);
-
-    alinks_ = 0;
-    nlinks_ = 0;
-    links_  = 0;
-  }
-
-  if (ntargets_) {
-    free(targets_);
-
-    atargets_ = 0;
-    ntargets_ = 0;
-    targets_  = 0;
-  }
-} // free_data()
-
-/** Gets an alignment attribute. */
-int					// O - Alignment
-Fl_Help_View::get_align(const char *p,	// I - Pointer to start of attrs
-                        int        a)	// I - Default alignment
-{
-  char	buf[255];			// Alignment value
-
-
-  if (get_attr(p, "ALIGN", buf, sizeof(buf)) == NULL)
-    return (a);
-
-  if (strcasecmp(buf, "CENTER") == 0)
-    return (CENTER);
-  else if (strcasecmp(buf, "RIGHT") == 0)
-    return (RIGHT);
-  else
-    return (LEFT);
-}
-
-
-/** Gets an attribute value from the string. */
-const char *					// O - Pointer to buf or NULL
-Fl_Help_View::get_attr(const char *p,		// I - Pointer to start of attributes
-                      const char *n,		// I - Name of attribute
-		      char       *buf,		// O - Buffer for attribute value
-		      int        bufsize)	// I - Size of buffer
-{
-  char	name[255],				// Name from string
-	*ptr,					// Pointer into name or value
-	quote;					// Quote
-
-
-  buf[0] = '\0';
-
-  while (*p && *p != '>')
-  {
-    while (isspace((*p)&255))
-      p ++;
-
-    if (*p == '>' || !*p)
-      return (NULL);
-
-    for (ptr = name; *p && !isspace((*p)&255) && *p != '=' && *p != '>';)
-      if (ptr < (name + sizeof(name) - 1))
-        *ptr++ = *p++;
-      else
-        p ++;
-
-    *ptr = '\0';
-
-    if (isspace((*p)&255) || !*p || *p == '>')
-      buf[0] = '\0';
-    else
-    {
-      if (*p == '=')
-        p ++;
-
-      for (ptr = buf; *p && !isspace((*p)&255) && *p != '>';)
-        if (*p == '\'' || *p == '\"')
-	{
-	  quote = *p++;
-
-	  while (*p && *p != quote)
-	    if ((ptr - buf + 1) < bufsize)
-	      *ptr++ = *p++;
-	    else
-	      p ++;
-
-          if (*p == quote)
-	    p ++;
-	}
-	else if ((ptr - buf + 1) < bufsize)
-	  *ptr++ = *p++;
-	else
-	  p ++;
-
-      *ptr = '\0';
-    }
-
-    if (strcasecmp(n, name) == 0)
-      return (buf);
-    else
-      buf[0] = '\0';
-
-    if (*p == '>')
-      return (NULL);
-  }
-
-  return (NULL);
-}
-
-
-/** Gets a color attribute. */
-Fl_Color				// O - Color value
-Fl_Help_View::get_color(const char *n,	// I - Color name
-                        Fl_Color   c)	// I - Default color value
-{
-  int	i;				// Looping var
-  int	rgb, r, g, b;			// RGB values
-  static const struct {			// Color name table
-    const char *name;
-    int r, g, b;
-  }	colors[] = {
-    { "black",		0x00, 0x00, 0x00 },
-    { "red",		0xff, 0x00, 0x00 },
-    { "green",		0x00, 0x80, 0x00 },
-    { "yellow",		0xff, 0xff, 0x00 },
-    { "blue",		0x00, 0x00, 0xff },
-    { "magenta",	0xff, 0x00, 0xff },
-    { "fuchsia",	0xff, 0x00, 0xff },
-    { "cyan",		0x00, 0xff, 0xff },
-    { "aqua",		0x00, 0xff, 0xff },
-    { "white",		0xff, 0xff, 0xff },
-    { "gray",		0x80, 0x80, 0x80 },
-    { "grey",		0x80, 0x80, 0x80 },
-    { "lime",		0x00, 0xff, 0x00 },
-    { "maroon",		0x80, 0x00, 0x00 },
-    { "navy",		0x00, 0x00, 0x80 },
-    { "olive",		0x80, 0x80, 0x00 },
-    { "purple",		0x80, 0x00, 0x80 },
-    { "silver",		0xc0, 0xc0, 0xc0 },
-    { "teal",		0x00, 0x80, 0x80 }
-  };
-
-
-  if (!n || !n[0]) return c;
-
-  if (n[0] == '#') {
-    // Do hex color lookup
-    rgb = strtol(n + 1, NULL, 16);
-
-    if (strlen(n) > 4) {
-      r = rgb >> 16;
-      g = (rgb >> 8) & 255;
-      b = rgb & 255;
-    } else {
-      r = (rgb >> 8) * 17;
-      g = ((rgb >> 4) & 15) * 17;
-      b = (rgb & 15) * 17;
-    }
-    return (fl_rgb_color((uchar)r, (uchar)g, (uchar)b));
-  } else {
-    for (i = 0; i < (int)(sizeof(colors) / sizeof(colors[0])); i ++)
-      if (!strcasecmp(n, colors[i].name)) {
-        return fl_rgb_color(colors[i].r, colors[i].g, colors[i].b);
-      }
-    return c;
-  }
-}
-
-
-/** Gets an inline image.
-
-  The image reference count is maintained accordingly, such that
-  the image can be released exactly once when the document is closed.
-
-  \return a pointer to a cached Fl_Shared_Image, if the image can be loaded,
-  	  otherwise a pointer to an internal Fl_Pixmap (broken_image).
-
-  \todo Fl_Help_View::get_image() returns a pointer to the internal
-  Fl_Pixmap broken_image, but this is _not_ compatible with the
-  return type Fl_Shared_Image (release() must not be called).
-*/
-
-/* Implementation note: (A.S. Apr 05, 2009)
-
-  Fl_Help_View::get_image() uses a static global flag (initial_load)
-  to determine, if it is called from the initial loading of a document
-  (load() or value()), or from resize() or draw().
-
-  A better solution would be to manage all loaded images in an own
-  structure like Fl_Help_Target (Fl_Help_Image ?) to avoid using this
-  global flag, but this would break the ABI !
-
-  This should be fixed in FLTK 1.3 !
-
-
-  If initial_load is true, then Fl_Shared_Image::get() is called to
-  load the image, and the reference count of the shared image is
-  increased by one.
-
-  If initial_load is false, then Fl_Shared_Image::find() is called to
-  load the image, and the image is released immediately. This avoids
-  increasing the reference count when calling get_image() from draw()
-  or resize().
-
-  Calling Fl_Shared_Image::find() instead of Fl_Shared_Image::get() avoids
-  doing unnecessary i/o for "broken images" within each resize/redraw.
-
-  Each image must be released exactly once in the destructor or before
-  a new document is loaded: see free_data().
-*/
-
-Fl_Shared_Image *
-Fl_Help_View::get_image(const char *name, int W, int H) {
-  const char	*localname;		// Local filename
-  char		dir[FL_PATH_MAX];	// Current directory
-  char		temp[FL_PATH_MAX],	// Temporary filename
-		*tempptr;		// Pointer into temporary name
-  Fl_Shared_Image *ip;			// Image pointer...
-
-  // See if the image can be found...
-  if (strchr(directory_, ':') != NULL && strchr(name, ':') == NULL) {
-    if (name[0] == '/') {
-      strlcpy(temp, directory_, sizeof(temp));
-
-      if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL) {
-        strlcpy(tempptr, name, sizeof(temp) - (tempptr - temp));
-      } else {
-        strlcat(temp, name, sizeof(temp));
-      }
-    } else {
-      snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
-    }
-
-    if (link_) localname = (*link_)(this, temp);
-    else localname = temp;
-  } else if (name[0] != '/' && strchr(name, ':') == NULL) {
-    if (directory_[0]) snprintf(temp, sizeof(temp), "%s/%s", directory_, name);
-    else {
-      fl_getcwd(dir, sizeof(dir));
-      snprintf(temp, sizeof(temp), "file:%s/%s", dir, name);
-    }
-
-    if (link_) localname = (*link_)(this, temp);
-    else localname = temp;
-  } else if (link_) localname = (*link_)(this, name);
-  else localname = name;
-
-  if (!localname) return 0;
-
-  if (strncmp(localname, "file:", 5) == 0) localname += 5;
-
-  if (initial_load) {
-    if ((ip = Fl_Shared_Image::get(localname, W, H)) == NULL) {
-      ip = (Fl_Shared_Image *)&broken_image;
-    }
-  } else { // draw or resize
-    if ((ip = Fl_Shared_Image::find(localname, W, H)) == NULL) {
-      ip = (Fl_Shared_Image *)&broken_image;
-    } else {
-      ip->release();
-    }
-  }
-
-  return ip;
-}
-
-
-/** Gets a length value, either absolute or %. */
-int
-Fl_Help_View::get_length(const char *l) {	// I - Value
-  int	val;					// Integer value
-
-  if (!l[0]) return 0;
-
-  val = atoi(l);
-  if (l[strlen(l) - 1] == '%') {
-    if (val > 100) val = 100;
-    else if (val < 0) val = 0;
-
-    int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    val = val * (hsize_ - scrollsize) / 100;
-  }
-
-  return val;
-}
-
-
-Fl_Help_Link *Fl_Help_View::find_link(int xx, int yy)
-{
-  int		i;
-  Fl_Help_Link	*linkp;
-  for (i = nlinks_, linkp = links_; i > 0; i --, linkp ++) {
-    if (xx >= linkp->x && xx < linkp->w &&
-        yy >= linkp->y && yy < linkp->h)
-      break;
-  }
-  return i ? linkp : 0L;
-}
-
-void Fl_Help_View::follow_link(Fl_Help_Link *linkp)
-{
-  char		target[32];	// Current target
-
-  clear_selection();
-
-  strlcpy(target, linkp->name, sizeof(target));
-
-  set_changed();
-
-  if (strcmp(linkp->filename, filename_) != 0 && linkp->filename[0])
-  {
-    char	dir[FL_PATH_MAX];	// Current directory
-    char	temp[FL_PATH_MAX],	// Temporary filename
-	      *tempptr;	// Pointer into temporary filename
-
-
-    if (strchr(directory_, ':') != NULL &&
-        strchr(linkp->filename, ':') == NULL)
-    {
-      if (linkp->filename[0] == '/')
-      {
-        strlcpy(temp, directory_, sizeof(temp));
-        if ((tempptr = strrchr(strchr(directory_, ':') + 3, '/')) != NULL)
-	  strlcpy(tempptr, linkp->filename, sizeof(temp));
-	else
-	  strlcat(temp, linkp->filename, sizeof(temp));
-      }
-      else
-	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
-    }
-    else if (linkp->filename[0] != '/' && strchr(linkp->filename, ':') == NULL)
-    {
-      if (directory_[0])
-	snprintf(temp, sizeof(temp), "%s/%s", directory_, linkp->filename);
-      else
-      {
-	  fl_getcwd(dir, sizeof(dir));
-	snprintf(temp, sizeof(temp), "file:%s/%s", dir, linkp->filename);
-      }
-    }
-    else
-      strlcpy(temp, linkp->filename, sizeof(temp));
-
-    if (linkp->name[0])
-      snprintf(temp + strlen(temp), sizeof(temp) - strlen(temp), "#%s",
-	       linkp->name);
-
-    load(temp);
-  }
-  else if (target[0])
-    topline(target);
-  else
-    topline(0);
-
-  leftline(0);
-}
-
-/** Removes the current text selection. */
-void Fl_Help_View::clear_selection()
-{
-  if (current_view==this)
-    clear_global_selection();
-}
-/** Selects all the text in the view. */
-void Fl_Help_View::select_all()
-{
-  clear_global_selection();
-  if (!value_) return;
-  current_view = this;
-  selection_drag_last = selection_last = (int) strlen(value_);
-  selected = 1;
-}
-
-void Fl_Help_View::clear_global_selection()
-{
-  if (selected) redraw();
-  selection_push_first = selection_push_last = 0;
-  selection_drag_first = selection_drag_last = 0;
-  selection_first = selection_last = 0;
-  selected = 0;
-}
-
-char Fl_Help_View::begin_selection()
-{
-  clear_global_selection();
-
-  if (!fl_help_view_buffer) fl_help_view_buffer = fl_create_offscreen(1, 1);
-
-  mouse_x = Fl::event_x();
-  mouse_y = Fl::event_y();
-  draw_mode = 1;
-
-    current_view = this;
-    fl_begin_offscreen(fl_help_view_buffer);
-    draw();
-    fl_end_offscreen();
-
-  draw_mode = 0;
-
-  if (selection_push_last) return 1;
-  else return 0;
-}
-
-char Fl_Help_View::extend_selection()
-{
-  if (Fl::event_is_click())
-    return 0;
-
-//  printf("old selection_first=%d, selection_last=%d\n",
-//         selection_first, selection_last);
-
-  int sf = selection_first, sl = selection_last;
-
-  selected = 1;
-  mouse_x = Fl::event_x();
-  mouse_y = Fl::event_y();
-  draw_mode = 2;
-
-    fl_begin_offscreen(fl_help_view_buffer);
-    draw();
-    fl_end_offscreen();
-
-  draw_mode = 0;
-
-  if (selection_push_first < selection_drag_first) {
-    selection_first = selection_push_first;
-  } else {
-    selection_first = selection_drag_first;
-  }
-
-  if (selection_push_last > selection_drag_last) {
-    selection_last = selection_push_last;
-  } else {
-    selection_last = selection_drag_last;
-  }
-
-//  printf("new selection_first=%d, selection_last=%d\n",
-//         selection_first, selection_last);
-
-  if (sf!=selection_first || sl!=selection_last) {
-//    puts("REDRAW!!!\n");
-    return 1;
-  } else {
-//    puts("");
-    return 0;
-  }
-}
-
-// convert a command with up to four letters into an unsigned int
-static unsigned int command(const char *cmd)
-{
-  unsigned int ret = (tolower(cmd[0])<<24);
-  char c = cmd[1];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= (tolower(c)<<16);
-  c = cmd[2];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= (tolower(c)<<8);
-  c = cmd[3];
-  if (c=='>' || c==' ' || c==0) return ret;
-  ret |= tolower(c);
-  c = cmd[4];
-  if (c=='>' || c==' ' || c==0) return ret;
-  return 0;
-}
-
-#define CMD(a, b, c, d) ((a<<24)|(b<<16)|(c<<8)|d)
-
-void Fl_Help_View::end_selection(int clipboard)
-{
-  if (!selected || current_view!=this)
-    return;
-  // convert the select part of our html text into some kind of somewhat readable UTF-8
-  // and store it in the selection buffer
-  int p = 0;
-  char pre = 0;
-  int len = (int) strlen(value_);
-  char *txt = (char*)malloc(len+1), *d = txt;
-  const char *s = value_, *cmd, *src;
-  for (;;) {
-    int c = (*s++) & 0xff;
-    if (c==0) break;
-    if (c=='<') { // begin of some html command. Skip until we find a '>'
-      cmd = s;
-      for (;;) {
-        c = (*s++) & 0xff;
-        if (c==0 || c=='>') break;
-      }
-      if (c==0) break;
-      // do something with this command... .
-      // The replacement string must not be longer than the command
-      // itself plus '<' and '>'
-      src = 0;
-      switch (command(cmd)) {
-        case CMD('p','r','e', 0 ): pre = 1; break;
-        case CMD('/','p','r','e'): pre = 0; break;
-        case CMD('t','d', 0 , 0 ):
-        case CMD('p', 0 , 0 , 0 ):
-        case CMD('/','p', 0 , 0 ):
-        case CMD('b','r', 0 , 0 ): src = "\n"; break;
-        case CMD('l','i', 0 , 0 ): src = "\n * "; break;
-        case CMD('/','h','1', 0 ):
-        case CMD('/','h','2', 0 ):
-        case CMD('/','h','3', 0 ):
-        case CMD('/','h','4', 0 ):
-        case CMD('/','h','5', 0 ):
-        case CMD('/','h','6', 0 ): src = "\n\n"; break;
-        case CMD('t','r', 0 , 0 ):
-        case CMD('h','1', 0 , 0 ):
-        case CMD('h','2', 0 , 0 ):
-        case CMD('h','3', 0 , 0 ):
-        case CMD('h','4', 0 , 0 ):
-        case CMD('h','5', 0 , 0 ):
-        case CMD('h','6', 0 , 0 ): src = "\n\n"; break;
-        case CMD('d','t', 0 , 0 ): src = "\n "; break;
-        case CMD('d','d', 0 , 0 ): src = "\n - "; break;
-      }
-      int n = (int) (s-value_);
-      if (src && n>selection_first && n<=selection_last) {
-        while (*src) {
-          *d++ = *src++;
-        }
-        c = src[-1] & 0xff;
-        p = isspace(c) ? ' ' : c;
-      }
-      continue;
-    }
-    const char *s2 = s;
-    if (c=='&') { // special characters (HTML entities)
-      int xx = quote_char(s);
-      if (xx >= 0) {
-        c = xx;
-        for (;;) {
-          char cc = *s++;
-          if (!cc || cc==';') break;
-        }
-      }
-    }
-    int n = (int) (s2-value_);
-    if (n>selection_first && n<=selection_last) {
-      if (!pre && c < 256 && isspace(c)) c = ' ';
-      if (p != ' ' || c != ' ') {
-        if (s2 != s) { // c was an HTML entity
-          d += fl_utf8encode(c, d);
-        }
-        else *d++ = c;
-      }
-      p = c;
-    }
-    if (n>selection_last) break; // stop parsing html after end of selection
-  }
-  *d = 0;
-  Fl::copy(txt, (int) strlen(txt), clipboard);
-  // printf("copy [%s]\n", txt);
-  free(txt);
-}
-
-/** Handles events in the widget. */
-int				// O - 1 if we handled it, 0 otherwise
-Fl_Help_View::handle(int event)	// I - Event to handle
-{
-  static Fl_Help_Link *linkp;   // currently clicked link
-
-  int xx = Fl::event_x() - x() + leftline_;
-  int yy = Fl::event_y() - y() + topline_;
-
-  switch (event)
-  {
-    case FL_FOCUS:
-      redraw();
-      return 1;
-    case FL_UNFOCUS:
-      clear_selection();
-      redraw();
-      return 1;
-    case FL_ENTER :
-      Fl_Group::handle(event);
-      return 1;
-    case FL_LEAVE :
-      fl_cursor(FL_CURSOR_DEFAULT);
-      break;
-    case FL_MOVE:
-      if (find_link(xx, yy)) fl_cursor(FL_CURSOR_HAND);
-      else fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_PUSH:
-      if (Fl_Group::handle(event)) return 1;
-      linkp = find_link(xx, yy);
-      if (linkp) {
-        fl_cursor(FL_CURSOR_HAND);
-        return 1;
-      }
-      if (begin_selection()) {
-        fl_cursor(FL_CURSOR_INSERT);
-        return 1;
-      }
-      fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_DRAG:
-      if (linkp) {
-        if (Fl::event_is_click()) {
-          fl_cursor(FL_CURSOR_HAND);
-        } else {
-          fl_cursor(FL_CURSOR_DEFAULT); // should be "FL_CURSOR_CANCEL" if we had it
-        }
-        return 1;
-      }
-      if (current_view==this && selection_push_last) {
-        if (extend_selection()) redraw();
-        fl_cursor(FL_CURSOR_INSERT);
-        return 1;
-      }
-      fl_cursor(FL_CURSOR_DEFAULT);
-      return 1;
-    case FL_RELEASE:
-      if (linkp) {
-        if (Fl::event_is_click()) {
-          follow_link(linkp);
-        }
-        fl_cursor(FL_CURSOR_DEFAULT);
-        linkp = 0;
-        return 1;
-      }
-      if (current_view==this && selection_push_last) {
-        end_selection();
-        return 1;
-      }
-      return 1;
-    case FL_SHORTCUT: {
-      int mods = Fl::event_state() & (FL_META|FL_CTRL|FL_ALT|FL_SHIFT);
-      if ( mods == FL_COMMAND) {
-	switch ( Fl::event_key() ) {
-	  case 'a': select_all(); redraw(); return 1;
-	  case 'c':
-	  case 'x': end_selection(1); return 1;
-	}
-      }
-      break; }
-  }
-  return (Fl_Group::handle(event));
-}
-
-/**
-  The constructor creates the Fl_Help_View widget at the specified
-  position and size.
-*/
-Fl_Help_View::Fl_Help_View(int        xx,	// I - Left position
-                	   int        yy,	// I - Top position
-			   int        ww,	// I - Width in pixels
-			   int        hh,	// I - Height in pixels
-			   const char *l)
-    : Fl_Group(xx, yy, ww, hh, l),
-      scrollbar_(xx + ww - Fl::scrollbar_size(), yy,
-                 Fl::scrollbar_size(), hh - Fl::scrollbar_size()),
-      hscrollbar_(xx, yy + hh - Fl::scrollbar_size(),
-                  ww - Fl::scrollbar_size(), Fl::scrollbar_size())
-{
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-
-  title_[0]     = '\0';
-  defcolor_     = FL_FOREGROUND_COLOR;
-  bgcolor_      = FL_BACKGROUND_COLOR;
-  textcolor_    = FL_FOREGROUND_COLOR;
-  linkcolor_    = FL_SELECTION_COLOR;
-  textfont_     = FL_TIMES;
-  textsize_     = 12;
-  value_        = NULL;
-
-  ablocks_      = 0;
-  nblocks_      = 0;
-  blocks_       = (Fl_Help_Block *)0;
-
-  link_         = (Fl_Help_Func *)0;
-
-  alinks_       = 0;
-  nlinks_       = 0;
-  links_        = (Fl_Help_Link *)0;
-
-  atargets_     = 0;
-  ntargets_     = 0;
-  targets_      = (Fl_Help_Target *)0;
-
-  directory_[0] = '\0';
-  filename_[0]  = '\0';
-
-  topline_      = 0;
-  leftline_     = 0;
-  size_         = 0;
-  hsize_        = 0;
-  scrollbar_size_ = 0;
-
-  scrollbar_.value(0, hh, 0, 1);
-  scrollbar_.step(8.0);
-  scrollbar_.show();
-  scrollbar_.callback(scrollbar_callback);
-
-  hscrollbar_.value(0, ww, 0, 1);
-  hscrollbar_.step(8.0);
-  hscrollbar_.show();
-  hscrollbar_.callback(hscrollbar_callback);
-  hscrollbar_.type(FL_HORIZONTAL);
-  end();
-
-  resize(xx, yy, ww, hh);
-}
-
-
-/** Destroys the Fl_Help_View widget.
-
-  The destructor destroys the widget and frees all memory that has been
-  allocated for the current document.
-*/
-Fl_Help_View::~Fl_Help_View()
-{
-  clear_selection();
-  free_data();
-}
-
-
-/** Loads the specified file.
-
-  This method loads the specified file or URL.
-*/
-int				// O - 0 on success, -1 on error
-Fl_Help_View::load(const char *f)// I - Filename to load (may also have target)
-{
-  FILE		*fp;		// File to read from
-  long		len;		// Length of file
-  char		*target;	// Target in file
-  char		*slash;		// Directory separator
-  const char	*localname;	// Local filename
-  char		error[1024];	// Error buffer
-  char		newname[FL_PATH_MAX];	// New filename buffer
-
-  // printf("load(%s)\n",f); fflush(stdout);
-
-  if (strncmp(f, "ftp:", 4) == 0 ||
-      strncmp(f, "http:", 5) == 0 ||
-      strncmp(f, "https:", 6) == 0 ||
-      strncmp(f, "ipp:", 4) == 0 ||
-      strncmp(f, "mailto:", 7) == 0 ||
-      strncmp(f, "news:", 5) == 0) {
-    char urimsg[FL_PATH_MAX];
-    if ( fl_open_uri(f, urimsg, sizeof(urimsg)) == 0 ) {
-      clear_selection();
-
-      strlcpy(newname, f, sizeof(newname));
-      if ((target = strrchr(newname, '#')) != NULL)
-	*target++ = '\0';
-
-      if (link_)
-	localname = (*link_)(this, newname);
-      else
-	localname = filename_;
-
-      if (!localname)
-	return (0);
-
-      free_data();
-
-      strlcpy(filename_, newname, sizeof(filename_));
-      strlcpy(directory_, newname, sizeof(directory_));
-
-      // Note: We do not support Windows backslashes, since they are illegal
-      //       in URLs...
-      if ((slash = strrchr(directory_, '/')) == NULL)
-	directory_[0] = '\0';
-      else if (slash > directory_ && slash[-1] != '/')
-	*slash = '\0';
-
-      snprintf(error, sizeof(error),
-	       "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
-	       "<BODY><H1>Error</H1>"
-	       "<P>Unable to follow the link \"%s\" - "
-	       "%s.</P></BODY>",
-	       f, urimsg);
-      value(error);
-      //return(-1);
-    }
-    return(0);
-  }
-
-  clear_selection();
-
-  strlcpy(newname, f, sizeof(newname));
-  if ((target = strrchr(newname, '#')) != NULL)
-    *target++ = '\0';
-
-  if (link_)
-    localname = (*link_)(this, newname);
-  else
-    localname = filename_;
-
-  if (!localname)
-    return (0);
-
-  free_data();
-
-  strlcpy(filename_, newname, sizeof(filename_));
-  strlcpy(directory_, newname, sizeof(directory_));
-
-  // Note: We do not support Windows backslashes, since they are illegal
-  //       in URLs...
-  if ((slash = strrchr(directory_, '/')) == NULL)
-    directory_[0] = '\0';
-  else if (slash > directory_ && slash[-1] != '/')
-    *slash = '\0';
-
-  if (strncmp(localname, "file:", 5) == 0)
-    localname += 5;	// Adjust for local filename...
-
-  if ((fp = fl_fopen(localname, "rb")) != NULL)
-  {
-    fseek(fp, 0, SEEK_END);
-    len = ftell(fp);
-    rewind(fp);
-
-    value_ = (const char *)calloc(len + 1, 1);
-    if (fread((void *)value_, 1, len, fp)==0) { /* use default 0 */ }
-    fclose(fp);
-  }
-  else
-  {
-    snprintf(error, sizeof(error),
-	     "<HTML><HEAD><TITLE>Error</TITLE></HEAD>"
-	     "<BODY><H1>Error</H1>"
-	     "<P>Unable to follow the link \"%s\" - "
-	     "%s.</P></BODY>",
-	     localname, strerror(errno));
-    value_ = strdup(error);
-  }
-
-  initial_load = 1;
-  format();
-  initial_load = 0;
-
-  if (target)
-    topline(target);
-  else
-    topline(0);
-
-  return (0);
-}
-
-
-/** Resizes the help widget. */
-
-void
-Fl_Help_View::resize(int xx,	// I - New left position
-                     int yy,	// I - New top position
-		     int ww,	// I - New width
-		     int hh)	// I - New height
-{
-  Fl_Boxtype		b = box() ? box() : FL_DOWN_BOX;
-					// Box to draw...
-
-
-  Fl_Widget::resize(xx, yy, ww, hh);
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  scrollbar_.resize(x() + w() - scrollsize - Fl::box_dw(b) + Fl::box_dx(b),
-                    y() + Fl::box_dy(b), scrollsize, h() - scrollsize - Fl::box_dh(b));
-  hscrollbar_.resize(x() + Fl::box_dx(b),
-                     y() + h() - scrollsize - Fl::box_dh(b) + Fl::box_dy(b),
-                     w() - scrollsize - Fl::box_dw(b), scrollsize);
-
-  format();
-}
-
-
-/** Scrolls the text to the indicated position, given a named destination.
-
-  \param[in] n target name
-*/
-void
-Fl_Help_View::topline(const char *n)	// I - Target name
-{
-  Fl_Help_Target key,			// Target name key
-		*target;		// Pointer to matching target
-
-
-  if (ntargets_ == 0)
-    return;
-
-  strlcpy(key.name, n, sizeof(key.name));
-
-  target = (Fl_Help_Target *)bsearch(&key, targets_, ntargets_, sizeof(Fl_Help_Target),
-                                 (compare_func_t)compare_targets);
-
-  if (target != NULL)
-    topline(target->y);
-}
-
-
-/** Scrolls the text to the indicated position, given a pixel line.
-
-  If the given pixel value \p top is out of range, then the text is
-  scrolled to the top or bottom of the document, resp.
-
-  \param[in] top top line number in pixels (0 = start of document)
-*/
-void
-Fl_Help_View::topline(int top)	// I - Top line number
-{
-  if (!value_)
-    return;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (size_ < (h() - scrollsize) || top < 0)
-    top = 0;
-  else if (top > size_)
-    top = size_;
-
-  topline_ = top;
-
-  scrollbar_.value(topline_, h() - scrollsize, 0, size_);
-
-  do_callback();
-
-  redraw();
-}
-
-
-/** Scrolls the text to the indicated position, given a pixel column.
-
-  If the given pixel value \p left is out of range, then the text is
-  scrolled to the left or right side of the document, resp.
-
-  \param[in] left left column number in pixels (0 = left side)
-*/
-void
-Fl_Help_View::leftline(int left)	// I - Left position
-{
-  if (!value_)
-    return;
-
-  int scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-  if (hsize_ < (w() - scrollsize) || left < 0)
-    left = 0;
-  else if (left > hsize_)
-    left = hsize_;
-
-  leftline_ = left;
-
-  hscrollbar_.value(leftline_, w() - scrollsize, 0, hsize_);
-
-  redraw();
-}
-
-
-/** Sets the current help text buffer to the string provided and reformats the text.
-
-  The provided character string \p val is copied internally and will be
-  freed when value() is called again, or when the widget is destroyed.
-
-  If \p val is NULL, then the widget is cleared.
-*/
-void
-Fl_Help_View::value(const char *val)	// I - Text to view
-{
-  clear_selection();
-  free_data();
-  set_changed();
-
-  if (!val)
-    return;
-
-  value_ = strdup(val);
-
-  initial_load = 1;
-  format();
-  initial_load = 0;
-
-  topline(0);
-  leftline(0);
-}
-
-
-/*  Returns the Unicode Code Point associated with a quoted character
-    (aka "HTML Entity").
-
-    Possible encoding formats:
-     - &name;		named entity
-     - &#nn..;		numeric (decimal) Unicode Code Point
-     - &#xnn..;		numeric (hexadecimal) Unicode Code Point
-     - &#Xnn..;		numeric (hexadecimal) Unicode Code Point
-    'nn..' = decimal or hexadecimal number, resp.
-
-    Contents of the table names[] below:
-
-    All printable ASCII (32-126) and ISO-8859-1 (160-255) characters
-    are encoded with the same value in Unicode. Special characters
-    outside the range [0-255] are encoded with their Unicode Code Point
-    as hexadecimal constants. Example:
-     - Euro sign: (Unicode) U+20ac = (hex) 0x20ac
-
-    Note: Converted to correct Unicode values and tested (compared with
-    the display of Firefox). AlbrechtS, 14 Feb. 2016.
-
-    Note to devs: if you add or remove items to/from this list, please
-    update the documentation in FL/Fl_Help_View.H.
-*/
-static int			// O - Code or -1 on error
-quote_char(const char *p) {	// I - Quoted string
-  int	i;			// Looping var
-  static const struct {
-    const char	*name;
-    int		namelen;
-    int		code;
-  }	*nameptr,		// Pointer into name array
-	names[] = {		// Quoting names
-    { "Aacute;", 7, 193 },
-    { "aacute;", 7, 225 },
-    { "Acirc;",  6, 194 },
-    { "acirc;",  6, 226 },
-    { "acute;",  6, 180 },
-    { "AElig;",  6, 198 },
-    { "aelig;",  6, 230 },
-    { "Agrave;", 7, 192 },
-    { "agrave;", 7, 224 },
-    { "amp;",    4, '&' },
-    { "Aring;",  6, 197 },
-    { "aring;",  6, 229 },
-    { "Atilde;", 7, 195 },
-    { "atilde;", 7, 227 },
-    { "Auml;",   5, 196 },
-    { "auml;",   5, 228 },
-    { "brvbar;", 7, 166 },
-    { "bull;",   5, 0x2022 },
-    { "Ccedil;", 7, 199 },
-    { "ccedil;", 7, 231 },
-    { "cedil;",  6, 184 },
-    { "cent;",   5, 162 },
-    { "copy;",   5, 169 },
-    { "curren;", 7, 164 },
-    { "deg;",    4, 176 },
-    { "divide;", 7, 247 },
-    { "Eacute;", 7, 201 },
-    { "eacute;", 7, 233 },
-    { "Ecirc;",  6, 202 },
-    { "ecirc;",  6, 234 },
-    { "Egrave;", 7, 200 },
-    { "egrave;", 7, 232 },
-    { "ETH;",    4, 208 },
-    { "eth;",    4, 240 },
-    { "Euml;",   5, 203 },
-    { "euml;",   5, 235 },
-    { "euro;",   5, 0x20ac },
-    { "frac12;", 7, 189 },
-    { "frac14;", 7, 188 },
-    { "frac34;", 7, 190 },
-    { "gt;",     3, '>' },
-    { "Iacute;", 7, 205 },
-    { "iacute;", 7, 237 },
-    { "Icirc;",  6, 206 },
-    { "icirc;",  6, 238 },
-    { "iexcl;",  6, 161 },
-    { "Igrave;", 7, 204 },
-    { "igrave;", 7, 236 },
-    { "iquest;", 7, 191 },
-    { "Iuml;",   5, 207 },
-    { "iuml;",   5, 239 },
-    { "laquo;",  6, 171 },
-    { "lt;",     3, '<' },
-    { "macr;",   5, 175 },
-    { "micro;",  6, 181 },
-    { "middot;", 7, 183 },
-    { "nbsp;",   5, ' ' },
-    { "not;",    4, 172 },
-    { "Ntilde;", 7, 209 },
-    { "ntilde;", 7, 241 },
-    { "Oacute;", 7, 211 },
-    { "oacute;", 7, 243 },
-    { "Ocirc;",  6, 212 },
-    { "ocirc;",  6, 244 },
-    { "Ograve;", 7, 210 },
-    { "ograve;", 7, 242 },
-    { "ordf;",   5, 170 },
-    { "ordm;",   5, 186 },
-    { "Oslash;", 7, 216 },
-    { "oslash;", 7, 248 },
-    { "Otilde;", 7, 213 },
-    { "otilde;", 7, 245 },
-    { "Ouml;",   5, 214 },
-    { "ouml;",   5, 246 },
-    { "para;",   5, 182 },
-    { "permil;", 7, 0x2030 },
-    { "plusmn;", 7, 177 },
-    { "pound;",  6, 163 },
-    { "quot;",   5, '\"' },
-    { "raquo;",  6, 187 },
-    { "reg;",    4, 174 },
-    { "sect;",   5, 167 },
-    { "shy;",    4, 173 },
-    { "sup1;",   5, 185 },
-    { "sup2;",   5, 178 },
-    { "sup3;",   5, 179 },
-    { "szlig;",  6, 223 },
-    { "THORN;",  6, 222 },
-    { "thorn;",  6, 254 },
-    { "times;",  6, 215 },
-    { "trade;",  6, 0x2122 },
-    { "Uacute;", 7, 218 },
-    { "uacute;", 7, 250 },
-    { "Ucirc;",  6, 219 },
-    { "ucirc;",  6, 251 },
-    { "Ugrave;", 7, 217 },
-    { "ugrave;", 7, 249 },
-    { "uml;",    4, 168 },
-    { "Uuml;",   5, 220 },
-    { "uuml;",   5, 252 },
-    { "Yacute;", 7, 221 },
-    { "yacute;", 7, 253 },
-    { "yen;",    4, 165 },
-    { "Yuml;",   5, 0x0178 },
-    { "yuml;",   5, 255 }
-  };
-
-  if (!strchr(p, ';')) return -1;
-  if (*p == '#') {
-    if (*(p+1) == 'x' || *(p+1) == 'X') return strtol(p+2, NULL, 16);
-    else return atoi(p+1);
-  }
-  for (i = (int)(sizeof(names) / sizeof(names[0])), nameptr = names; i > 0; i --, nameptr ++)
-    if (strncmp(p, nameptr->name, nameptr->namelen) == 0)
-      return nameptr->code;
-
-  return -1;
-}
-
-
-/** The vertical scrollbar callback. */
-static void
-scrollbar_callback(Fl_Widget *s, void *)
-{
-  ((Fl_Help_View *)(s->parent()))->topline(int(((Fl_Scrollbar*)s)->value()));
-}
-
-
-/** The horizontal scrollbar callback. */
-static void
-hscrollbar_callback(Fl_Widget *s, void *)
-{
-  ((Fl_Help_View *)(s->parent()))->leftline(int(((Fl_Scrollbar*)s)->value()));
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Image.cxx
+++ /dev/null
@@ -1,885 +1,0 @@
-//
-// "$Id$"
-//
-// Image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Image.H>
-#include <FL/Fl_Printer.H>
-#include "flstring.h"
-
-#ifdef WIN32
-void fl_release_dc(HWND, HDC); // from Fl_win32.cxx
-#endif
-
-void fl_restore_clip(); // from fl_rect.cxx
-
-//
-// Base image class...
-//
-
-Fl_RGB_Scaling Fl_Image::RGB_scaling_ = FL_RGB_SCALING_NEAREST;
-
-
-/**
- The constructor creates an empty image with the specified
- width, height, and depth. The width and height are in pixels.
- The depth is 0 for bitmaps, 1 for pixmap (colormap) images, and
- 1 to 4 for color images.
- */
-Fl_Image::Fl_Image(int W, int H, int D) :
-  w_(W), h_(H), d_(D), ld_(0), count_(0), data_(0L)
-{}
-
-/**
-  The destructor is a virtual method that frees all memory used
-  by the image.
-*/
-Fl_Image::~Fl_Image() {
-}
-
-/**
-  If the image has been cached for display, delete the cache
-  data. This allows you to change the data used for the image and
-  then redraw it without recreating an image object.
-*/
-void Fl_Image::uncache() {
-}
-
-void Fl_Image::draw(int XP, int YP, int, int, int, int) {
-  draw_empty(XP, YP);
-}
-
-/**
-  The protected method draw_empty() draws a box with
-  an X in it. It can be used to draw any image that lacks image
-  data.
-*/
-void Fl_Image::draw_empty(int X, int Y) {
-  if (w() > 0 && h() > 0) {
-    fl_color(FL_FOREGROUND_COLOR);
-    fl_rect(X, Y, w(), h());
-    fl_line(X, Y, X + w() - 1, Y + h() - 1);
-    fl_line(X, Y + h() - 1, X + w() - 1, Y);
-  }
-}
-
-/**
-  The copy() method creates a copy of the specified
-  image. If the width and height are provided, the image is
-  resized to the specified size. The image should be deleted (or in
-  the case of Fl_Shared_Image, released) when you are done
-  with it.
-*/
-Fl_Image *Fl_Image::copy(int W, int H) {
-  return new Fl_Image(W, H, d());
-}
-
-/**
-  The color_average() method averages the colors in
-  the image with the FLTK color value c. The i
-  argument specifies the amount of the original image to combine
-  with the color, so a value of 1.0 results in no color blend, and
-  a value of 0.0 results in a constant image of the specified
-  color. 
-
-  An internal copy is made of the original image before
-  changes are applied, to avoid modifying the original image.
-*/
-void Fl_Image::color_average(Fl_Color, float) {
-}
-
-/**
-  The desaturate() method converts an image to
-  grayscale. If the image contains an alpha channel (depth = 4),
-  the alpha channel is preserved.
-  
-  An internal copy is made of the original image before
-  changes are applied, to avoid modifying the original image.
-*/
-void Fl_Image::desaturate() {
-}
-
-/**
-  The label() methods are an obsolete way to set the
-  image attribute of a widget or menu item. Use the
-  image() or deimage() methods of the
-  Fl_Widget and Fl_Menu_Item classes
-  instead.
-*/
-void Fl_Image::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-/**
-  The label() methods are an obsolete way to set the
-  image attribute of a widget or menu item. Use the
-  image() or deimage() methods of the
-  Fl_Widget and Fl_Menu_Item classes
-  instead.
-*/
-void Fl_Image::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-/**
- Returns a value that is not 0 if there is currently no image
- available.
-
- Example use:
- \code
-    [..]
-    Fl_Box box(X,Y,W,H);
-    Fl_JPEG_Image jpg("/tmp/foo.jpg");
-    switch ( jpg.fail() ) {
-        case Fl_Image::ERR_NO_IMAGE:
-        case Fl_Image::ERR_FILE_ACCESS:
-            fl_alert("/tmp/foo.jpg: %s", strerror(errno));    // shows actual os error to user
-            exit(1);
-        case Fl_Image::ERR_FORMAT:
-            fl_alert("/tmp/foo.jpg: couldn't decode image");
-            exit(1);
-    }
-    box.image(jpg);
-    [..]
- \endcode
-
- \return ERR_NO_IMAGE if no image was found
- \return ERR_FILE_ACCESS if there was a file access related error (errno should be set)
- \return ERR_FORMAT if image decoding failed.
- */
-int Fl_Image::fail()
-{
-    // if no image exists, ld_ may contain a simple error code
-    if ( (w_<=0) || (h_<=0) || (d_<=0) ) {
-        if (ld_==0)
-            return ERR_NO_IMAGE;
-        else
-            return ld_;
-    }
-    return 0;
-}
-
-void
-Fl_Image::labeltype(const Fl_Label *lo,		// I - Label
-                    int            lx,		// I - X position
-		    int            ly,		// I - Y position
-		    int            lw,		// I - Width of label
-		    int            lh,		// I - Height of label
-		    Fl_Align       la) {	// I - Alignment
-  Fl_Image	*img;				// Image pointer
-  int		cx, cy;				// Image position
-
-  img = (Fl_Image *)(lo->value);
-
-  if (la & FL_ALIGN_LEFT) cx = 0;
-  else if (la & FL_ALIGN_RIGHT) cx = img->w() - lw;
-  else cx = (img->w() - lw) / 2;
-
-  if (la & FL_ALIGN_TOP) cy = 0;
-  else if (la & FL_ALIGN_BOTTOM) cy = img->h() - lh;
-  else cy = (img->h() - lh) / 2;
-
-  fl_color((Fl_Color)lo->color);
-
-  img->draw(lx, ly, lw, lh, cx, cy);
-}
-
-void
-Fl_Image::measure(const Fl_Label *lo,		// I - Label
-                  int            &lw,		// O - Width of image
-		  int            &lh) {		// O - Height of image
-  Fl_Image *img;				// Image pointer
-
-  img = (Fl_Image *)(lo->value);
-
-  lw = img->w();
-  lh = img->h();
-}
-
-/** Sets the RGB image scaling method used for copy(int, int).
-    Applies to all RGB images, defaults to FL_RGB_SCALING_NEAREST.
-*/
-void Fl_Image::RGB_scaling(Fl_RGB_Scaling method) {
-  RGB_scaling_ = method;
-}
-
-/** Returns the currently used RGB image scaling method. */
-Fl_RGB_Scaling Fl_Image::RGB_scaling() {
-  return RGB_scaling_;
-}
-
-
-//
-// RGB image class...
-//
-size_t Fl_RGB_Image::max_size_ = ~((size_t)0);
-
-int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg);
-
-
-/**
-  The constructor creates a new image from the specified data.
-
-  The data array \p bits must contain sufficient data to provide
-  \p W * \p H * \p D image bytes and optional line padding, see \p LD.
-
-  \p W and \p H are the width and height of the image in pixels, resp.
-
-  \p D is the image depth and can be:
-    - D=1: each uchar in \p bits[] is a grayscale pixel value
-    - D=2: each uchar pair in \p bits[] is a grayscale + alpha pixel value
-    - D=3: each uchar triplet in \p bits[] is an R/G/B pixel value
-    - D=4: each uchar quad in \p bits[] is an R/G/B/A pixel value
-
-  \p LD specifies the line data size of the array, see Fl_Image::ld(int).
-  If \p LD is zero, then \p W * \p D is assumed, otherwise \p LD must be
-  greater than or equal to \p W * \p D to account for (unused) extra data
-  per line (padding).
-
-  The caller is responsible that the image data array \p bits persists as
-  long as the image is used.
-
-  This constructor sets Fl_RGB_Image::alloc_array to 0.
-  To have the image object control the deallocation of the data array
-  \p bits, set alloc_array to non-zero after construction.
-
-  \param[in] bits   The image data array.
-  \param[in] W      The width of the image in pixels.
-  \param[in] H      The height of the image in pixels.
-  \param[in] D      The image depth, or 'number of channels' (default=3).
-  \param[in] LD     Line data size (default=0).
-
-  \see Fl_Image::data(), Fl_Image::w(), Fl_Image::h(), Fl_Image::d(), Fl_Image::ld(int)
-*/
-Fl_RGB_Image::Fl_RGB_Image(const uchar *bits, int W, int H, int D, int LD) :
-  Fl_Image(W,H,D),
-  array(bits),
-  alloc_array(0),
-  id_(0),
-  mask_(0)
-{
-    data((const char **)&array, 1);
-    ld(LD);
-}
-
-
-/** 
-  The constructor creates a new RGBA image from the specified Fl_Pixmap.
-
-  The RGBA image is built fully opaque except for the transparent area
-  of the pixmap that is assigned the \p bg color with full transparency.
-
-  This constructor creates a new internal data array and sets
-  Fl_RGB_Image::alloc_array to 1 so the data array is deleted when the
-  image is destroyed.
-*/
-Fl_RGB_Image::Fl_RGB_Image(const Fl_Pixmap *pxm, Fl_Color bg):
-  Fl_Image(pxm->w(), pxm->h(), 4),
-  array(0),
-  alloc_array(0),
-  id_(0),
-  mask_(0)
-{
-  if (pxm && pxm->w() > 0 && pxm->h() > 0) {
-    array = new uchar[w() * h() * d()];
-    alloc_array = 1;
-    fl_convert_pixmap(pxm->data(), (uchar*)array, bg);
-  }
-  data((const char **)&array, 1);
-}
-
-
-/**
-  The destructor frees all memory and server resources that are used by
-  the image.
-*/
-Fl_RGB_Image::~Fl_RGB_Image() {
-#ifdef __APPLE__
-  if (id_) CGImageRelease((CGImageRef)id_);
-  else if (alloc_array) delete[] (uchar *)array;
-#else
-  uncache();
-  if (alloc_array) delete[] (uchar *)array;
-#endif
-}
-
-void Fl_RGB_Image::uncache() {
-#ifdef __APPLE__
-  if (id_) {
-    if (mask_) *(bool*)mask_ = false;
-    CGImageRelease((CGImageRef)id_);
-    id_ = 0;
-    mask_ = NULL;
-  }
-#else
-  if (id_) {
-    fl_delete_offscreen((Fl_Offscreen)id_);
-    id_ = 0;
-  }
-
-  if (mask_) {
-    fl_delete_bitmask((Fl_Bitmask)mask_);
-    mask_ = 0;
-  }
-#endif
-}
-
-Fl_Image *Fl_RGB_Image::copy(int W, int H) {
-  Fl_RGB_Image	*new_image;	// New RGB image
-  uchar		*new_array;	// New array for image data
-
-  // Optimize the simple copy where the width and height are the same,
-  // or when we are copying an empty image...
-  if ((W == w() && H == h()) ||
-      !w() || !h() || !d() || !array) {
-    if (array) {
-      // Make a copy of the image data and return a new Fl_RGB_Image...
-      new_array = new uchar[w() * h() * d()];
-      if (ld() && ld()!=w()*d()) {
-        const uchar *src = array;
-        uchar *dst = new_array;
-        int dy, dh = h(), wd = w()*d(), wld = ld();
-        for (dy=0; dy<dh; dy++) {
-          memcpy(dst, src, wd);
-          src += wld;
-          dst += wd;
-        }
-      } else {
-        memcpy(new_array, array, w() * h() * d());
-      }
-      new_image = new Fl_RGB_Image(new_array, w(), h(), d());
-      new_image->alloc_array = 1;
-
-      return new_image;
-    } else {
-      return new Fl_RGB_Image(array, w(), h(), d(), ld());
-    }
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and create new image
-  uchar		*new_ptr;	// Pointer into new array
-  const uchar	*old_ptr;	// Pointer into old array
-  int		dx, dy,		// Destination coordinates
-		line_d;		// stride from line to line
-
-  // Allocate memory for the new image...
-  new_array = new uchar [W * H * d()];
-  new_image = new Fl_RGB_Image(new_array, W, H, d());
-  new_image->alloc_array = 1;
-
-  line_d = ld() ? ld() : w() * d();
-
-  if (Fl_Image::RGB_scaling() == FL_RGB_SCALING_NEAREST) {
-
-    int		c,		// Channel number
-		sy,		// Source coordinate
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep;	// X & Y step increments
-
-    // Figure out Bresenham step/modulus values...
-    xmod   = w() % W;
-    xstep  = (w() / W) * d();
-    ymod   = h() % H;
-    ystep  = h() / H;
-
-    // Scale the image using a nearest-neighbor algorithm...
-    for (dy = H, sy = 0, yerr = H, new_ptr = new_array; dy > 0; dy --) {
-      for (dx = W, xerr = W, old_ptr = array + sy * line_d; dx > 0; dx --) {
-        for (c = 0; c < d(); c ++) *new_ptr++ = old_ptr[c];
-
-        old_ptr += xstep;
-        xerr    -= xmod;
-
-        if (xerr <= 0) {
-          xerr    += W;
-	  old_ptr += d();
-        }
-      }
-
-      sy   += ystep;
-      yerr -= ymod;
-      if (yerr <= 0) {
-        yerr += H;
-        sy ++;
-      }
-    }
-  } else {
-    // Bilinear scaling (FL_RGB_SCALING_BILINEAR)
-    const float xscale = (w() - 1) / (float) W;
-    const float yscale = (h() - 1) / (float) H;
-    for (dy = 0; dy < H; dy++) {
-      float oldy = dy * yscale;
-      if (oldy >= h())
-        oldy = float(h() - 1);
-      const float yfract = oldy - (unsigned) oldy;
-
-      for (dx = 0; dx < W; dx++) {
-        new_ptr = new_array + dy * W * d() + dx * d();
-
-        float oldx = dx * xscale;
-        if (oldx >= w())
-          oldx = float(w() - 1);
-        const float xfract = oldx - (unsigned) oldx;
-
-        const unsigned leftx = (unsigned)oldx;
-        const unsigned lefty = (unsigned)oldy;
-        const unsigned rightx = (unsigned)(oldx + 1 >= w() ? oldx : oldx + 1);
-        const unsigned righty = (unsigned)oldy;
-        const unsigned dleftx = (unsigned)oldx;
-        const unsigned dlefty = (unsigned)(oldy + 1 >= h() ? oldy : oldy + 1);
-        const unsigned drightx = (unsigned)rightx;
-        const unsigned drighty = (unsigned)dlefty;
-
-        uchar left[4], right[4], downleft[4], downright[4];
-        memcpy(left, array + lefty * line_d + leftx * d(), d());
-        memcpy(right, array + righty * line_d + rightx * d(), d());
-        memcpy(downleft, array + dlefty * line_d + dleftx * d(), d());
-        memcpy(downright, array + drighty * line_d + drightx * d(), d());
-
-        int i;
-        if (d() == 4) {
-          for (i = 0; i < 3; i++) {
-            left[i] = (uchar)(left[i] * left[3] / 255.0f);
-            right[i] = (uchar)(right[i] * right[3] / 255.0f);
-            downleft[i] = (uchar)(downleft[i] * downleft[3] / 255.0f);
-            downright[i] = (uchar)(downright[i] * downright[3] / 255.0f);
-          }
-        }
-
-	const float leftf = 1 - xfract;
-	const float rightf = xfract;
-	const float upf = 1 - yfract;
-	const float downf = yfract;
-
-        for (i = 0; i < d(); i++) {
-          new_ptr[i] = (uchar)((left[i] * leftf +
-                   right[i] * rightf) * upf +
-                   (downleft[i] * leftf +
-                   downright[i] * rightf) * downf);
-        }
-
-        if (d() == 4 && new_ptr[3]) {
-          for (i = 0; i < 3; i++) {
-            new_ptr[i] = (uchar)(new_ptr[i] / (new_ptr[3] / 255.0f));
-          }
-        }
-      }
-    }
-  }
-
-  return new_image;
-}
-
-void Fl_RGB_Image::color_average(Fl_Color c, float i) {
-  // Don't average an empty image...
-  if (!w() || !h() || !d() || !array) return;
-
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  uchar		*new_array,
-		*new_ptr;
-
-  if (!alloc_array) new_array = new uchar[h() * w() * d()];
-  else new_array = (uchar *)array;
-
-  // Get the color to blend with...
-  uchar		r, g, b;
-  unsigned	ia, ir, ig, ib;
-
-  Fl::get_color(c, r, g, b);
-  if (i < 0.0f) i = 0.0f;
-  else if (i > 1.0f) i = 1.0f;
-
-  ia = (unsigned)(256 * i);
-  ir = r * (256 - ia);
-  ig = g * (256 - ia);
-  ib = b * (256 - ia);
-
-  // Update the image data to do the blend...
-  const uchar	*old_ptr;
-  int		x, y;
-  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
-
-  if (d() < 3) {
-    ig = (r * 31 + g * 61 + b * 8) / 100 * (256 - ia);
-
-    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-      for (x = 0; x < w(); x ++) {
-	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
-	if (d() > 1) *new_ptr++ = *old_ptr++;
-      }
-  } else {
-    for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-      for (x = 0; x < w(); x ++) {
-	*new_ptr++ = (*old_ptr++ * ia + ir) >> 8;
-	*new_ptr++ = (*old_ptr++ * ia + ig) >> 8;
-	*new_ptr++ = (*old_ptr++ * ia + ib) >> 8;
-	if (d() > 3) *new_ptr++ = *old_ptr++;
-      }
-  }
-
-  // Set the new pointers/values as needed...
-  if (!alloc_array) {
-    array       = new_array;
-    alloc_array = 1;
-
-    ld(0);
-  }
-}
-
-void Fl_RGB_Image::desaturate() {
-  // Don't desaturate an empty image...
-  if (!w() || !h() || !d() || !array) return;
-
-  // Can only desaturate color images...
-  if (d() < 3) return;
-
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory for a grayscale image...
-  uchar		*new_array,
-		*new_ptr;
-  int		new_d;
-
-  new_d     = d() - 2;
-  new_array = new uchar[h() * w() * new_d];
-
-  // Copy the image data, converting to grayscale...
-  const uchar	*old_ptr;
-  int		x, y;
-  int   line_i = ld() ? ld() - (w()*d()) : 0; // increment from line end to beginning of next line
-
-  for (new_ptr = new_array, old_ptr = array, y = 0; y < h(); y ++, old_ptr += line_i)
-    for (x = 0; x < w(); x ++, old_ptr += d()) {
-      *new_ptr++ = (uchar)((31 * old_ptr[0] + 61 * old_ptr[1] + 8 * old_ptr[2]) / 100);
-      if (d() > 3) *new_ptr++ = old_ptr[3];
-    }
-
-  // Free the old array as needed, and then set the new pointers/values...
-  if (alloc_array) delete[] (uchar *)array;
-
-  array       = new_array;
-  alloc_array = 1;
-
-  ld(0);
-  d(new_d);
-}
-
-#if !defined(WIN32) && !defined(__APPLE__)
-// Composite an image with alpha on systems that don't have accelerated
-// alpha compositing...
-static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, int cy) {
-  int ld = img->ld();
-  if (ld == 0) ld = img->w() * img->d();
-  uchar *srcptr = (uchar*)img->array + cy * ld + cx * img->d();
-  int srcskip = ld - img->d() * W;
-
-  uchar *dst = new uchar[W * H * 3];
-  uchar *dstptr = dst;
-
-  fl_read_image(dst, X, Y, W, H, 0);
-
-  uchar srcr, srcg, srcb, srca;
-  uchar dstr, dstg, dstb, dsta;
-
-  if (img->d() == 2) {
-    // Composite grayscale + alpha over RGB...
-    for (int y = H; y > 0; y--, srcptr+=srcskip)
-      for (int x = W; x > 0; x--) {
-	srcg = *srcptr++;
-	srca = *srcptr++;
-
-	dstr = dstptr[0];
-	dstg = dstptr[1];
-	dstb = dstptr[2];
-	dsta = 255 - srca;
-
-	*dstptr++ = (srcg * srca + dstr * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstb * dsta) >> 8;
-      }
-  } else {
-    // Composite RGBA over RGB...
-    for (int y = H; y > 0; y--, srcptr+=srcskip)
-      for (int x = W; x > 0; x--) {
-	srcr = *srcptr++;
-	srcg = *srcptr++;
-	srcb = *srcptr++;
-	srca = *srcptr++;
-
-	dstr = dstptr[0];
-	dstg = dstptr[1];
-	dstb = dstptr[2];
-	dsta = 255 - srca;
-
-	*dstptr++ = (srcr * srca + dstr * dsta) >> 8;
-	*dstptr++ = (srcg * srca + dstg * dsta) >> 8;
-	*dstptr++ = (srcb * srca + dstb * dsta) >> 8;
-      }
-  }
-
-  fl_draw_image(dst, X, Y, W, H, 3, 0);
-
-  delete[] dst;
-}
-#endif // !WIN32 && !__APPLE__
-
-void Fl_RGB_Image::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-static int start(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy, 
-		 int &X, int &Y, int &W, int &H)
-{
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w) W = w-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h) H = h-cy;
-  if (H <= 0) return 1;
-  return 0;
-}
-
-/** Draws an Fl_Image scaled to width \p W & height \p H with top-left corner at \em X,Y
- \return zero when the graphics driver doesn't implement scaled drawing, non-zero if it does implement it.
- */
-int Fl_Graphics_Driver::draw_scaled(Fl_Image *img, int X, int Y, int W, int H) {
-  return 0;
-}
-
-#ifdef __APPLE__
-static void imgProviderReleaseData (void *info, const void *data, size_t size)
-{
-  if (!info || *(bool*)info) delete[] (unsigned char *)data;
-  delete (bool*)info;
-}
-
-void Fl_Quartz_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) {
-    CGColorSpaceRef lut = img->d()<=2 ? CGColorSpaceCreateDeviceGray() : CGColorSpaceCreateDeviceRGB();
-    int ld = img->ld();
-    if (!ld) ld = img->w() * img->d();
-    // If img->alloc_array == 0, the CGImage data provider must not release the image data.
-    // If img->alloc_array != 0, the CGImage data provider will take responsibilty of deleting RGB image data after use:
-    // when the CGImage is deallocated, the release callback of its data provider
-    // (imgProviderReleaseData) is called and can delete the RGB image data.
-    // If the CGImage is printed, it is not deallocated until after the end of the page,
-    // therefore, with img->alloc_array != 0, the RGB image can be safely deleted any time after return from this function.
-    // The previously unused mask_ member allows to make sure the RGB image data is not deleted by Fl_RGB_Image::uncache().
-    if (img->alloc_array) img->mask_ = new bool(true);
-    CGDataProviderRef src = CGDataProviderCreateWithData(img->mask_, img->array, ld * img->h(),
-                                                         img->alloc_array?imgProviderReleaseData:NULL);
-    img->id_ = CGImageCreate(img->w(), img->h(), 8, img->d()*8, ld,
-                             lut, (img->d()&1)?kCGImageAlphaNone:kCGImageAlphaLast,
-                             src, 0L, false, kCGRenderingIntentDefault);
-    CGColorSpaceRelease(lut);
-    CGDataProviderRelease(src);
-  }
-  if (img->id_ && fl_gc) {
-    if (!img->alloc_array && Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id && !CGImageGetShouldInterpolate((CGImageRef)img->id_)) {
-      // When printing, the image data is used when the page is completed, that is, after return from this function.
-      // If the image has alloc_array = 0, we must protect against image data being freed before it is used:
-      // we duplicate the image data and have it deleted after use by the release-callback of the CGImage data provider
-      Fl_RGB_Image* img2 = (Fl_RGB_Image*)img->copy();
-      img2->alloc_array = 0;
-      const uchar *img_bytes = img2->array;
-      int ld = img2->ld();
-      if (!ld) ld = img2->w() * img2->d();
-      delete img2;
-      img->uncache();
-      CGColorSpaceRef lut = img->d()<=2 ? CGColorSpaceCreateDeviceGray() : CGColorSpaceCreateDeviceRGB();
-      CGDataProviderRef src = CGDataProviderCreateWithData( NULL, img_bytes, ld * img->h(), imgProviderReleaseData);
-      img->id_ = CGImageCreate(img->w(), img->h(), 8, img->d()*8, ld,
-                               lut, (img->d()&1)?kCGImageAlphaNone:kCGImageAlphaLast,
-                               src, 0L, true, kCGRenderingIntentDefault);
-      CGColorSpaceRelease(lut);
-      CGDataProviderRelease(src);
-    }
-    CGRect rect = CGRectMake(X, Y, W, H);
-    Fl_X::q_begin_image(rect, cx, cy, img->w(), img->h());
-    CGContextDrawImage(fl_gc, rect, (CGImageRef)img->id_);
-    Fl_X::q_end_image();
-  }
-}
-
-int Fl_Quartz_Graphics_Driver::draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP) {
-  int X, Y, W, H;
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H); // X,Y,W,H will give the unclipped area of XP,YP,WP,HP
-  if (W == 0 || H == 0) return 1;
-  fl_push_no_clip(); // remove the FLTK clip that can't be rescaled
-  CGContextSaveGState(fl_gc);
-  CGContextClipToRect(fl_gc, CGRectMake(X, Y, W, H)); // this clip path will be rescaled & translated
-  CGContextTranslateCTM(fl_gc, XP, YP);
-  CGContextScaleCTM(fl_gc, float(WP)/img->w(), float(HP)/img->h());
-  img->draw(0, 0, img->w(), img->h(), 0, 0);
-  CGContextRestoreGState(fl_gc);
-  fl_pop_clip(); // restore FLTK's clip
-  return 1;
-}
-
-#elif defined(WIN32)
-static Fl_Offscreen build_id(Fl_RGB_Image *img, void **pmask)
-{
-  Fl_Offscreen offs = fl_create_offscreen(img->w(), img->h());
-  if ((img->d() == 2 || img->d() == 4) && fl_can_do_alpha_blending()) {
-    fl_begin_offscreen(offs);
-    fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d()|FL_IMAGE_WITH_ALPHA, img->ld());
-    fl_end_offscreen();
-  } else {
-    fl_begin_offscreen(offs);
-    fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
-    fl_end_offscreen();
-    if (img->d() == 2 || img->d() == 4) {
-      *pmask = fl_create_alphamask(img->w(), img->h(), img->d(), img->ld(), img->array);
-    }
-  }
-  return offs;
-}
-
-void Fl_GDI_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) img->id_ = build_id(img, &(img->mask_));
-  if (img->mask_) {
-    HDC new_gc = CreateCompatibleDC(fl_gc);
-    int save = SaveDC(new_gc);
-    SelectObject(new_gc, (void*)img->mask_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCAND);
-    SelectObject(new_gc, (void*)img->id_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCPAINT);
-    RestoreDC(new_gc,save);
-    DeleteDC(new_gc);
-  } else if (img->d()==2 || img->d()==4) {
-    copy_offscreen_with_alpha(X, Y, W, H, (Fl_Offscreen)img->id_, cx, cy);
-  } else {
-    copy_offscreen(X, Y, W, H, (Fl_Offscreen)img->id_, cx, cy);
-  }
-}
-
-int Fl_GDI_Printer_Graphics_Driver::draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP) {
-  XFORM old_tr, tr;
-  GetWorldTransform(fl_gc, &old_tr); // storing old transform
-  tr.eM11 = float(WP)/float(img->w());
-  tr.eM22 = float(HP)/float(img->h());
-  tr.eM12 = tr.eM21 = 0;
-  tr.eDx =  XP;
-  tr.eDy =  YP;
-  ModifyWorldTransform(fl_gc, &tr, MWT_LEFTMULTIPLY);
-  img->draw(0, 0, img->w(), img->h(), 0, 0);
-  SetWorldTransform(fl_gc, &old_tr);
-  return 1;
-}
-
-#else
-void Fl_Xlib_Graphics_Driver::draw(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  // Don't draw an empty image...
-  if (!img->d() || !img->array) {
-    img->draw_empty(XP, YP);
-    return;
-  }
-  if (start(img, XP, YP, WP, HP, img->w(), img->h(), cx, cy, X, Y, W, H)) {
-    return;
-  }
-  if (!img->id_) {
-    if (img->d() == 1 || img->d() == 3) {
-      img->id_ = fl_create_offscreen(img->w(), img->h());
-      fl_begin_offscreen((Fl_Offscreen)img->id_);
-      fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), img->ld());
-      fl_end_offscreen();
-    } else if (img->d() == 4 && fl_can_do_alpha_blending()) {
-      img->id_ = fl_create_offscreen_with_alpha(img->w(), img->h());
-      fl_begin_offscreen((Fl_Offscreen)img->id_);
-      fl_draw_image(img->array, 0, 0, img->w(), img->h(), img->d() | FL_IMAGE_WITH_ALPHA,
-                    img->ld());
-      fl_end_offscreen();
-    }
-  }
-  if (img->id_) {
-    if (img->mask_) {
-      // I can't figure out how to combine a mask with existing region,
-      // so cut the image down to a clipped rectangle:
-      int nx, ny; fl_clip_box(X,Y,W,H,nx,ny,W,H);
-      cx += nx-X; X = nx;
-      cy += ny-Y; Y = ny;
-      // make X use the bitmap as a mask:
-      XSetClipMask(fl_display, fl_gc, img->mask_);
-      int ox = X-cx; if (ox < 0) ox += img->w();
-      int oy = Y-cy; if (oy < 0) oy += img->h();
-      XSetClipOrigin(fl_display, fl_gc, X-cx, Y-cy);
-    }
-
-    if (img->d() == 4 && fl_can_do_alpha_blending())
-      copy_offscreen_with_alpha(X, Y, W, H, img->id_, cx, cy);
-    else
-      copy_offscreen(X, Y, W, H, img->id_, cx, cy);
-
-    if (img->mask_) {
-      // put the old clip region back
-      XSetClipOrigin(fl_display, fl_gc, 0, 0);
-      fl_restore_clip();
-    }
-  } else {
-    // Composite image with alpha manually each time...
-    alpha_blend(img, X, Y, W, H, cx, cy);
-  }
-}
-
-#endif
-
-void Fl_RGB_Image::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_RGB_Image::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Image_Surface.cxx
+++ /dev/null
@@ -1,251 +1,0 @@
-//
-// "$Id$"
-//
-// Draw-to-image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Image_Surface.H>
-#include <FL/Fl_Printer.H>
-#include <FL/Fl.H>
-
-const char *Fl_Image_Surface::class_id = "Fl_Image_Surface";
-
-void Fl_Image_Surface::prepare_(int w, int h, int highres) {
-  width = w;
-  height = h;
-#if FL_ABI_VERSION < 10304
-  highres = 0;
-  if (highres) {/* avoid compiler warning (Linux + Windows */}
-#endif
-#ifdef __APPLE__
-  offscreen = fl_create_offscreen(highres ? 2*w : w, highres ? 2*h : h);
-  helper = new Fl_Quartz_Flipped_Surface_(w, h);
-  if (highres) {
-    CGContextScaleCTM(offscreen, 2, 2);
-  }
-  driver(helper->driver());
-  CGContextSetShouldAntialias(offscreen, false);
-  CGContextSaveGState(offscreen);
-  CGContextTranslateCTM(offscreen, 0, height);
-  CGContextScaleCTM(offscreen, 1.0f, -1.0f);
-  CGContextSetRGBFillColor(offscreen, 1, 1, 1, 1);
-  CGContextFillRect(offscreen, CGRectMake(0,0,w,h) );
-#elif defined(WIN32)
-  offscreen = fl_create_offscreen(w, h);
-  helper = new Fl_GDI_Surface_();
-  driver(helper->driver());
-#else
-  gc = 0;
-  if (!fl_gc) { // allows use of this class before any window is shown
-    fl_open_display();
-    gc = XCreateGC(fl_display, RootWindow(fl_display, fl_screen), 0, 0);
-    fl_gc = gc;
-  }
-  offscreen = fl_create_offscreen(w, h);
-  helper = new Fl_Xlib_Surface_();
-  driver(helper->driver());
-#endif
-}
-
-/** Constructor with optional high resolution.
- \param w and \param h give the size in pixels of the resulting image.
- \param highres if non-zero, the surface pixel size is twice as high and wide as w and h,
- which is useful to draw it later on a high resolution display (e.g., retina display). 
- This is implemented for the Mac OS platform only.
- If \p highres is non-zero, use Fl_Image_Surface::highres_image() to get the image data.
- \version 1.3.4 and requires compilation with -DFL_ABI_VERSION=10304 (1.3.3 without the highres parameter)
- */
-Fl_Image_Surface::Fl_Image_Surface(int w, int h, int highres) : Fl_Surface_Device(NULL) {
-  prepare_(w, h, highres);
-}
-#if FLTK_ABI_VERSION < 10304
-Fl_Image_Surface::Fl_Image_Surface(int w, int h) : Fl_Surface_Device(NULL) {
-  prepare_(w, h, 0);
-}
-#endif
-
-
-/** The destructor.
- */
-Fl_Image_Surface::~Fl_Image_Surface() {
-#ifdef __APPLE__
-  void *data = CGBitmapContextGetData((CGContextRef)offscreen);
-  free(data);
-  CGContextRelease((CGContextRef)offscreen);
-  delete (Fl_Quartz_Flipped_Surface_*)helper;
-#elif defined(WIN32)
-  fl_delete_offscreen(offscreen);
-  delete (Fl_GDI_Surface_*)helper;
-#else
-  fl_delete_offscreen(offscreen);
-  if (gc) { XFreeGC(fl_display, gc); fl_gc = 0; }
-  delete (Fl_Xlib_Surface_*)helper;
-#endif
-}
-
-/** Returns an image made of all drawings sent to the Fl_Image_Surface object.
- The returned object contains its own copy of the RGB data.
- Prefer Fl_Image_Surface::highres_image() if the surface was 
- constructed with the highres option on.
- */
-Fl_RGB_Image* Fl_Image_Surface::image()
-{
-  unsigned char *data;
-  int W = width, H = height;
-#ifdef __APPLE__
-  CGContextFlush(offscreen);
-  W = CGBitmapContextGetWidth(offscreen);
-  H = CGBitmapContextGetHeight(offscreen);
-  Fl_X::set_high_resolution(0);
-  data = fl_read_image(NULL, 0, 0, W, H, 0);
-  fl_gc = 0;
-#elif defined(WIN32)
-  fl_pop_clip(); 
-  data = fl_read_image(NULL, 0, 0, width, height, 0);
-  RestoreDC(fl_gc, _savedc); 
-  DeleteDC(fl_gc); 
-  _ss->set_current(); 
-  fl_window=_sw; 
-  fl_gc = _sgc;
-#else
-  fl_pop_clip(); 
-  data = fl_read_image(NULL, 0, 0, width, height, 0);
-  fl_window = pre_window; 
-  previous->set_current();
-#endif
-  Fl_RGB_Image *image = new Fl_RGB_Image(data, W, H);
-  image->alloc_array = 1;
-  return image;
-}
-
-/** Returns a possibly high resolution image made of all drawings sent to the Fl_Image_Surface object.
- The Fl_Image_Surface object should have been constructed with Fl_Image_Surface(W, H, 1).
- The returned image is scaled to a size of WxH drawing units and may have a pixel size twice as wide and high.
- The returned object should be deallocated with Fl_Shared_Image::release() after use.
- \version 1.3.4 and requires compilation with -DFL_ABI_VERSION=10304
- */
-Fl_Shared_Image* Fl_Image_Surface::highres_image()
-{
-  Fl_Shared_Image *s_img = Fl_Shared_Image::get(image());
-  s_img->scale(width, height);
-  return s_img;
-}
-
-/** Draws a widget in the image surface
- 
- \param widget any FLTK widget (e.g., standard, custom, window, GL view) to draw in the image
- \param delta_x and \param delta_y give 
- the position in the image of the top-left corner of the widget
- */
-void Fl_Image_Surface::draw(Fl_Widget *widget, int delta_x, int delta_y)
-{
-  helper->print_widget(widget, delta_x, delta_y);
-}
-
-
-void Fl_Image_Surface::set_current()
-{
-#if defined(__APPLE__)
-  fl_gc = offscreen; fl_window = 0;
-  Fl_Surface_Device::set_current();
-  Fl_X::set_high_resolution( CGBitmapContextGetWidth(offscreen) > width );
-#elif defined(WIN32)
-  _sgc=fl_gc; 
-  _sw=fl_window;
-  _ss = Fl_Surface_Device::surface(); 
-  Fl_Surface_Device::set_current();
-  fl_gc = fl_makeDC(offscreen); 
-   _savedc = SaveDC(fl_gc); 
-  fl_window=(HWND)offscreen; 
-  fl_push_no_clip();
-#else
-  pre_window = fl_window; 
-  fl_window = offscreen; 
-  previous = Fl_Surface_Device::surface(); 
-  Fl_Surface_Device::set_current();
-  fl_push_no_clip();
-#endif
-}
-
-#if defined(__APPLE__)
-
-Fl_Quartz_Flipped_Surface_::Fl_Quartz_Flipped_Surface_(int w, int h) : Fl_Quartz_Surface_(w, h) {
-}
-
-void Fl_Quartz_Flipped_Surface_::translate(int x, int y) {
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, x, -y);
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, 0, height);
-  CGContextScaleCTM(fl_gc, 1.0f, -1.0f);
-}
-
-void Fl_Quartz_Flipped_Surface_::untranslate() {
-  CGContextRestoreGState(fl_gc);
-}
-
-const char *Fl_Quartz_Flipped_Surface_::class_id = "Fl_Quartz_Flipped_Surface_";
-
-
-void Fl_Image_Surface::draw_decorated_window(Fl_Window* win, int delta_x, int delta_y)
-{
-  int bt = win->decorated_h() - win->h();
-  draw(win, delta_x, bt + delta_y ); // draw the window content
-  if (win->border()) {
-    // draw the window title bar
-    helper->translate(delta_x, delta_y);
-    CGContextTranslateCTM(fl_gc, 0, bt);
-    CGContextScaleCTM(fl_gc, 1, -1);
-    void *layer = Fl_X::get_titlebar_layer(win);
-    if (layer) {
-      Fl_X::draw_layer_to_context(layer, fl_gc, win->w(), bt);
-    } else {
-      CGImageRef img = Fl_X::CGImage_from_window_rect(win, 0, -bt, win->w(), bt);
-      CGContextDrawImage(fl_gc, CGRectMake(0, 0, win->w(), bt), img);
-      CGImageRelease(img);
-    }
-    helper->untranslate();
-    CGContextTranslateCTM(fl_gc, delta_x, height+delta_y);
-    CGContextScaleCTM(fl_gc, 1.0f, -1.0f);
-  }
-}
-
-#else
-
-/** Draws a window and its borders and title bar to the image drawing surface. 
- \param win an FLTK window to draw in the image
- \param delta_x and \param delta_y give
- the position in the image of the top-left corner of the window's title bar
-*/
-void Fl_Image_Surface::draw_decorated_window(Fl_Window* win, int delta_x, int delta_y)
-{
-#ifdef WIN32
-  // draw_decorated_window() will change the current drawing surface, and set it
-  // back to us; it's necessary to do some cleaning before
-  fl_pop_clip();
-  RestoreDC(fl_gc, _savedc);
-  DeleteDC(fl_gc);
-#elif !defined(__APPLE__)
-  fl_pop_clip();
-#endif
-  helper->draw_decorated_window(win, delta_x, delta_y, this);
-}
-#endif
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Input.cxx
+++ /dev/null
@@ -1,853 +1,0 @@
-//
-// "$Id$"
-//
-// Input widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is the "user interface", it decodes user actions into what to
-// do to the text.  See also Fl_Input_.cxx, where the text is actually
-// manipulated (and some ui, in particular the mouse, is done...).
-// In theory you can replace this code with another subclass to change
-// the keybindings.
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include "flstring.h"
-
-#include <FL/Fl_Float_Input.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Multiline_Input.H>
-#include <FL/Fl_Output.H>
-#include <FL/Fl_Multiline_Output.H>
-#include <FL/Fl_Secret_Input.H>
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-
-void Fl_Input::draw() {
-  if (input_type() == FL_HIDDEN_INPUT) return;
-  Fl_Boxtype b = box();
-  if (damage() & FL_DAMAGE_ALL) draw_box(b, color());
-  Fl_Input_::drawtext(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-		      w()-Fl::box_dw(b), h()-Fl::box_dh(b));
-}
-
-// kludge so shift causes selection to extend:
-int Fl_Input::shift_position(int p) {
-  return position(p, Fl::event_state(FL_SHIFT) ? mark() : p);
-}
-
-int Fl_Input::shift_up_down_position(int p) {
-  return up_down_position(p, Fl::event_state(FL_SHIFT));
-}
-
-// Old text from FLTK 1.1 for reference:
-// If you define NORMAL_INPUT_MOVE as zero you will get the peculiar fltk
-// behavior where moving off the end of an input field will move the
-// cursor into the next field:
-// define it as 1 to prevent cursor movement from going to next field:
-//
-// Note: this has been replaced by Fl::option(Fl::OPTION_ARROW_FOCUS)
-// in FLTK 1.3.  This option has "inverted" values:
-//   1 = Arrow keys move focus (previously 0)
-//   0 = Arrow keys don't move focus (previously 1)
-// Hence we define ...
-//
-#define NORMAL_INPUT_MOVE (Fl::option(Fl::OPTION_ARROW_FOCUS) ? 0 : 1)
-
-#define ctrl(x) ((x)^0x40)
-
-// List of characters that are legal in a floating point input field.
-// This text string is created at run-time to take the current locale
-// into account (for example, continental Europe uses a comma instead
-// of a decimal point). For back compatibility reasons, we always 
-// allow the decimal point.
-#ifdef HAVE_LOCALECONV
-static const char *standard_fp_chars = ".eE+-"; 
-static const char *legal_fp_chars = 0L;
-#else
-static const char *legal_fp_chars = ".eE+-"; 
-#endif
-
-// Move cursor up specified #lines
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_lines_up(int repeat_num) {
-  int i = position();
-  if (!line_start(i)) {
-    //UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
-    return NORMAL_INPUT_MOVE;
-  }
-  while(repeat_num--) {
-    i = line_start(i);
-    if (!i) break;
-    i--;
-  }
-  shift_up_down_position(line_start(i));
-  return 1;
-}
-
-// Move cursor down specified #lines
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_lines_down(int repeat_num) {
-  int i = position();
-  if (line_end(i) >= size()) {
-    //UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
-    return NORMAL_INPUT_MOVE;
-  }
-  while (repeat_num--) {  
-    i = line_end(i);
-    if (i >= size()) break;
-    i++;
-  }
-  shift_up_down_position(i);
-  return 1;
-}
-
-// Move up a page
-int Fl_Input::kf_page_up() {
-  return kf_lines_up(linesPerPage());
-}
-
-// Move down a page
-int Fl_Input::kf_page_down() {
-  return kf_lines_down(linesPerPage());
-}
-
-// Toggle insert mode
-int Fl_Input::kf_insert_toggle() {
-  if (readonly()) { fl_beep(); return 1; }
-  return 1;				// \todo: needs insert mode
-}
-
-// Delete word right
-int Fl_Input::kf_delete_word_right() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(position(), word_end(position()));
-  return 1;
-}
-
-// Delete word left
-int Fl_Input::kf_delete_word_left() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(word_start(position()), position());
-  return 1;
-}
-
-// Delete to start of line
-int Fl_Input::kf_delete_sol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(line_start(position()), position());
-  return 1;
-}
-
-// Delete to end of line
-int Fl_Input::kf_delete_eol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  cut(position(), line_end(position()));
-  return 1;
-}
-
-int Fl_Input::kf_delete_char_right() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) return cut();
-  else return cut(1);
-}
-
-int Fl_Input::kf_delete_char_left() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (mark() != position()) cut();
-  else cut(-1);
-  return 1;
-}
-
-// Move cursor to start of line
-int Fl_Input::kf_move_sol() {
-  return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move cursor to end of line
-int Fl_Input::kf_move_eol() {
-  return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Clear to end of line
-int Fl_Input::kf_clear_eol() {
-  if (readonly()) { fl_beep(); return 1; }
-  if (position()>=size()) return 0;
-  int i = line_end(position());
-  if (i == position() && i < size()) i++;
-  cut(position(), i);
-  return copy_cuts();
-}
-
-// Move cursor one character to the left
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_move_char_left() {
-  int i = shift_position(position()-1) + NORMAL_INPUT_MOVE;
-  return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
-}
-
-// Move cursor one character to the right
-//    If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
-//
-int Fl_Input::kf_move_char_right() {
-  int i = shift_position(position()+1) + NORMAL_INPUT_MOVE;
-  return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
-}
-
-// Move cursor word-left
-int Fl_Input::kf_move_word_left() {
-  shift_position(word_start(position()));
-  return 1; 
-}
-
-// Move cursor word-right
-int Fl_Input::kf_move_word_right() {
-  shift_position(word_end(position()));
-  return 1;
-}
-
-// Move cursor up one line and to the start of line (paragraph up)
-int Fl_Input::kf_move_up_and_sol() {
-  if (line_start(position())==position() && position()>0)
-    return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
-  else
-    return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move cursor down one line and to the end of line (paragraph down)
-int Fl_Input::kf_move_down_and_eol() {
-  if (line_end(position())==position() && position()<size())
-    return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
-  else
-    return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
-}
-
-// Move to top of document
-int Fl_Input::kf_top() {
-  shift_position(0);
-  return 1;
-}
-
-// Move to bottom of document
-int Fl_Input::kf_bottom() {
-  shift_position(size());
-  return 1; 
-}
-
-// Select all text in the widget
-int Fl_Input::kf_select_all() {
-  position(0,size());
-  return 1;
-}
-
-// Undo.
-int Fl_Input::kf_undo() {
-  if (readonly()) { fl_beep(); return 1; }
-  return undo();
-}
-
-// Redo. (currently unimplemented.. toggles undo() instead)
-int Fl_Input::kf_redo() {
-  if (readonly()) { fl_beep(); return 1; }
-  return kf_undo();			// currently we don't support multilevel undo
-}
-
-// Do a copy operation
-int Fl_Input::kf_copy() {
-  return copy(1);
-}
-
-// Do a paste operation
-int Fl_Input::kf_paste() {
-  if (readonly()) { fl_beep(); return 1; }
-  Fl::paste(*this, 1);
-  return 1;
-}
-
-// Do a cut with copy
-int Fl_Input::kf_copy_cut() {
-  if (readonly()) { fl_beep(); return 1; }
-  copy(1);
-  return cut();
-}
-
-// Handle a keystroke.
-//     Returns 1 if handled by us, 0 if not.
-//
-int Fl_Input::handle_key() {
-  
-  char ascii = Fl::event_text()[0];
-  
-  int del;
-  if (Fl::compose(del)) {
-    
-    // Insert characters into numeric fields after checking for legality:
-    if (input_type() == FL_FLOAT_INPUT || input_type() == FL_INT_INPUT) {
-      Fl::compose_reset(); // ignore any foreign letters...
-      
-      // initialize the list of legal characters inside a floating point number
-#ifdef HAVE_LOCALECONV
-      if (!legal_fp_chars) {
-        size_t len = strlen(standard_fp_chars);
-        struct lconv *lc = localeconv();
-        if (lc) {
-          if (lc->decimal_point) len += strlen(lc->decimal_point);
-          if (lc->mon_decimal_point) len += strlen(lc->mon_decimal_point);
-          if (lc->positive_sign) len += strlen(lc->positive_sign);
-          if (lc->negative_sign) len += strlen(lc->negative_sign);
-        }
-        // the following line is not a true memory leak because the array is only
-        // allocated once if required, and automatically freed when the program quits
-        char *chars = (char*)malloc(len+1);
-	legal_fp_chars = chars;
-        strcpy(chars, standard_fp_chars);
-        if (lc) {
-          if (lc->decimal_point) strcat(chars, lc->decimal_point);
-          if (lc->mon_decimal_point) strcat(chars, lc->mon_decimal_point);
-          if (lc->positive_sign) strcat(chars, lc->positive_sign);
-          if (lc->negative_sign) strcat(chars, lc->negative_sign);
-        }
-      }
-#endif // HAVE_LOCALECONV
-      
-      // find the insert position
-      int ip = position()<mark() ? position() : mark();
-      // This is complex to allow "0xff12" hex to be typed:
-      if (   (!ip && (ascii == '+' || ascii == '-')) 
-          || (ascii >= '0' && ascii <= '9') 
-          || (ip==1 && index(0)=='0' && (ascii=='x' || ascii == 'X')) 
-          || (ip>1 && index(0)=='0' && (index(1)=='x'||index(1)=='X') 
-              && ((ascii>='A'&& ascii<='F') || (ascii>='a'&& ascii<='f'))) 
-          || (input_type()==FL_FLOAT_INPUT && ascii && strchr(legal_fp_chars, ascii))) 
-      {
-	if (readonly()) fl_beep();
-	else replace(position(), mark(), &ascii, 1);
-      }
-      return 1;
-    }
-    
-    if (del || Fl::event_length()) {
-      if (readonly()) fl_beep();
-      else replace(position(), del ? position()-del : mark(),
-	           Fl::event_text(), Fl::event_length());
-    }
-#ifdef __APPLE__
-    if (Fl::compose_state) {
-      this->mark( this->position() - Fl::compose_state );
-      }
-#endif
-    return 1;
-  }
-  
-  unsigned int mods = Fl::event_state() & (FL_META|FL_CTRL|FL_ALT);
-  unsigned int shift = Fl::event_state() & FL_SHIFT;
-  unsigned int multiline = (input_type() == FL_MULTILINE_INPUT) ? 1 : 0;
-  //
-  // The following lists apps that support these keypresses.
-  // Prefixes: '!' indicates NOT supported, '?' indicates un-verified.
-  //
-  //    HIG=Human Interface Guide, 
-  //    TE=TextEdit.app, SA=Safari.app, WOX=MS Word/OSX -- OSX 10.4.x
-  //    NP=Notepad, WP=WordPad, WOW=MS Word/Windows     -- WinXP
-  //    GE=gedit, KE=kedit                              -- Ubuntu8.04
-  //    OF=old FLTK behavior (<=1.1.10)
-  //
-  // Example: (NP,WP,!WO) means supported in notepad + wordpad, but NOT word.
-  //
-  switch (Fl::event_key()) {
-
-    case FL_Insert:
-      // Note: Mac has no "Insert" key; it's the "Help" key.
-      //       This keypress is apparently not possible on macs.
-      //
-      if (mods==0 && shift) return kf_paste();			// Shift-Insert   (WP,NP,WOW,GE,KE,OF)
-      if (mods==0)          return kf_insert_toggle();		// Insert         (Standard)
-      if (mods==FL_CTRL)    return kf_copy();			// Ctrl-Insert    (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-
-    case FL_Delete: {
-#ifdef __APPLE__
-      if (mods==0)          return kf_delete_char_right();	// Delete         (OSX-HIG,TE,SA,WOX)
-      if (mods==FL_CTRL)    return kf_delete_char_right();	// Ctrl-Delete    (??? TE,!SA,!WOX)
-      if (mods==FL_ALT)     return kf_delete_word_right();	// Alt-Delete     (OSX-HIG,TE,SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      int selected = (position() != mark()) ? 1 : 0;
-      if (mods==0 && shift && selected)
-                            return kf_copy_cut();		// Shift-Delete with selection (WP,NP,WOW,GE,KE,OF)
-      if (mods==0 && shift && !selected)
-                            return kf_delete_char_right();	// Shift-Delete no selection (WP,NP,WOW,GE,KE,!OF)
-      if (mods==0)          return kf_delete_char_right();	// Delete         (Standard)
-      if (mods==FL_CTRL)    return kf_delete_word_right();	// Ctrl-Delete    (WP,!NP,WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-    }
-
-    case FL_Left:
-#ifdef __APPLE__
-      if (mods==0)          return kf_move_char_left();		// Left           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_move_word_left();		// Alt-Left       (OSX-HIG)
-      if (mods==FL_META)    return kf_move_sol();		// Meta-Left      (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_move_sol();		// Ctrl-Left      (TE/SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_char_left();		// Left           (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_word_left();		// Ctrl-Left      (WP,NP,WOW,GE,KE,!OF)
-      if (mods==FL_META)    return kf_move_char_left();		// Meta-Left      (WP,NP,?WOW,GE,KE)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Right:
-#ifdef __APPLE__
-      if (mods==0)          return kf_move_char_right();	// Right          (OSX-HIG)
-      if (mods==FL_ALT)     return kf_move_word_right();	// Alt-Right      (OSX-HIG)
-      if (mods==FL_META)    return kf_move_eol();		// Meta-Right     (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_move_eol();		// Ctrl-Right     (TE/SA)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_char_right();	// Right          (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_word_right();	// Ctrl-Right     (WP,NP,WOW,GE,KE,!OF)
-      if (mods==FL_META)    return kf_move_char_right();	// Meta-Right     (WP,NP,?WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Up:
-#ifdef __APPLE__
-      if (mods==0)          return kf_lines_up(1);		// Up             (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_page_up();		// Ctrl-Up        (TE !HIG)
-      if (mods==FL_ALT)     return kf_move_up_and_sol();	// Alt-Up         (OSX-HIG)
-      if (mods==FL_META)    return kf_top();			// Meta-Up        (OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_lines_up(1);		// Up             (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_up_and_sol();	// Ctrl-Up        (WP,!NP,WOW,GE,!KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Down:
-#ifdef __APPLE__
-      if (mods==0)          return kf_lines_down(1);		// Dn             (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_page_down();		// Ctrl-Dn        (TE !HIG)
-      if (mods==FL_ALT)     return kf_move_down_and_eol();	// Alt-Dn         (OSX-HIG)
-      if (mods==FL_META)    return kf_bottom();			// Meta-Dn        (OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_lines_down(1);		// Dn             (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_move_down_and_eol();	// Ctrl-Down      (WP,!NP,WOW,GE,!KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Page_Up:
-      // Fl_Input has no scroll control, so instead we move the cursor by one page
-      // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
-#ifdef __APPLE__
-      if (mods==0)          return kf_page_up();		// PgUp           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_page_up();		// Alt-PageUp     (OSX-HIG)
-      if (mods==FL_META)    return kf_top();			// Meta-PageUp    (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_page_up();		// PageUp         (WP,NP,WOW,GE,KE)
-      if (mods==FL_CTRL)    return kf_page_up();		// Ctrl-PageUp    (!WP,!NP,!WOW,!GE,KE,OF)
-      if (mods==FL_ALT)     return kf_page_up();		// Alt-PageUp     (!WP,!NP,!WOW,!GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Page_Down:
-#ifdef __APPLE__
-      // Fl_Input has no scroll control, so instead we move the cursor by one page
-      // OSX-HIG recommends Alt increase one semantic unit, Meta next higher..
-      if (mods==0)          return kf_page_down();		// PgDn           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_page_down();		// Alt-PageDn     (OSX-HIG)
-      if (mods==FL_META)    return kf_bottom();			// Meta-PageDn    (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_page_down();		// PageDn         (WP,NP,WOW,GE,KE)
-      if (mods==FL_CTRL)    return kf_page_down();		// Ctrl-PageDn    (!WP,!NP,!WOW,!GE,KE,OF)
-      if (mods==FL_ALT)     return kf_page_down();		// Alt-PageDn     (!WP,!NP,!WOW,!GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Home:
-#ifdef __APPLE__
-      if (mods==0)          return kf_top();			// Home           (OSX-HIG)
-      if (mods==FL_ALT)     return kf_top();			// Alt-Home       (???)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_sol();		// Home           (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_top();			// Ctrl-Home      (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_End:
-#ifdef __APPLE__
-      if (mods==0)          return kf_bottom();			// End            (OSX-HIG)
-      if (mods==FL_ALT)     return kf_bottom();			// Alt-End        (???)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_move_eol();		// End            (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_bottom();			// Ctrl-End       (WP,NP,WOW,GE,KE,OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_BackSpace:
-#ifdef __APPLE__
-      if (mods==0)          return kf_delete_char_left();	// Backspace      (OSX-HIG)
-      if (mods==FL_CTRL)    return kf_delete_char_left();	// Ctrl-Backspace (TE/SA)
-      if (mods==FL_ALT)     return kf_delete_word_left();	// Alt-Backspace  (OSX-HIG)
-      if (mods==FL_META)    return kf_delete_sol();		// Meta-Backspace (OSX-HIG,!TE)
-      return 0;							// ignore other combos, pass to parent
-#else
-      if (mods==0)          return kf_delete_char_left();	// Backspace      (WP,NP,WOW,GE,KE,OF)
-      if (mods==FL_CTRL)    return kf_delete_word_left();	// Ctrl-Backspace (WP,!NP,WOW,GE,KE,!OF)
-      return 0;							// ignore other combos, pass to parent
-#endif
-
-    case FL_Enter:
-    case FL_KP_Enter:
-      if (when() & FL_WHEN_ENTER_KEY) {
-        position(size(), 0);
-        maybe_do_callback();
-        return 1;
-      } else if (multiline && !readonly()) {
-        return replace(position(), mark(), "\n", 1);
-      } return 0;			// reserved for shortcuts
-
-    case FL_Tab:
-      // Handle special case for multiline input with 'old tab behavior';
-      // tab handled as a normal insertable character.
-      //
-      if (mods==0 && !shift 		// Tab?
-	   && !tab_nav()		// old tab behavior enabled?
-	   && multiline) {		// multiline input?
-        break;				// insert tab character
-      }
-      if (mods==0) return 0;					// Tab, Shift-Tab? nav focus      (Standard/OSX-HIG)
-      return 0;							// ignore other combos, pass to parent
-
-    case 'a':
-      if (mods==FL_COMMAND) return kf_select_all();		// Ctrl-A, Mac:Meta-A             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'c':
-      if (mods==FL_COMMAND) return kf_copy();			// Ctrl-C, Mac:Meta-C             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'v':
-      if (mods==FL_COMMAND) return kf_paste();			// Ctrl-V, Mac:Meta-V             (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-    case 'x':
-      if (mods==FL_COMMAND) return kf_copy_cut();		// Ctrl-X, Mac:Meta-X             (Standard/OSX-HIG)
-      break;
-    case 'z':
-      if (mods==FL_COMMAND && !shift) return kf_undo();		// Ctrl-Z, Mac:Meta-Z             (Standard/OSX-HIG)
-      if (mods==FL_COMMAND && shift)  return kf_redo();		// Shift-Ctrl-Z, Mac:Shift-Meta-Z (Standard/OSX-HIG)
-      break;							// handle other combos elsewhere
-  }
-  
-  switch (ascii) {
-    case ctrl('H'):
-      return kf_delete_char_left();				// Ctrl-H                           (!WP,!NP,!WOW,!WOX,TE,SA,GE,KE,OF)
-    case ctrl('I'): 						// Ctrl-I (literal Tab)             (!WP,NP,!WOW,!GE,KE,OF)
-    case ctrl('J'):						// Ctrl-J (literal Line Feed/Enter) (Standard)
-    case ctrl('L'):						// Ctrl-L (literal Form Feed)       (Standard)
-    case ctrl('M'):						// Ctrl-M (literal Cr)              (Standard)
-      if (readonly()) { fl_beep(); return 1; }
-      // insert a few selected control characters literally:
-      if (input_type() != FL_FLOAT_INPUT && input_type() != FL_INT_INPUT)
-        return replace(position(), mark(), &ascii, 1);
-      break;
-  }
-  
-  return 0;		// ignored
-}
-
-int Fl_Input::handle(int event) {
-  static int dnd_save_position, dnd_save_mark, drag_start = -1, newpos;
-  static Fl_Widget *dnd_save_focus = NULL;
-  switch (event) {
-#ifdef __APPLE__
-    case FL_UNFOCUS:
-      if (Fl::compose_state) {
-	this->mark( this->position() );
-	Fl::reset_marked_text();
-      }
-      break;
-#endif
-    case FL_FOCUS:
-      switch (Fl::event_key()) {
-        case FL_Right:
-          position(0);
-          break;
-        case FL_Left:
-          position(size());
-          break;
-        case FL_Down:
-          up_down_position(0);
-          break;
-        case FL_Up:
-          up_down_position(line_start(size()));
-          break;
-        case FL_Tab:
-          position(size(),0);
-          break;
-        default:
-          position(position(),mark());// turns off the saved up/down arrow position
-          break;
-      }
-      break;
-      
-    case FL_KEYBOARD:
-      // Handle special case for multiline input with 'old tab behavior'
-      // where tab is entered as a character: make sure user attempt to 'tab over'
-      // widget doesn't destroy the field, replacing it with a tab character.
-      //
-      if (Fl::event_key() == FL_Tab 			// Tab key?
-          && !Fl::event_state(FL_SHIFT)			// no shift?
-          && !tab_nav()					// with tab navigation disabled?
-	  && input_type() == FL_MULTILINE_INPUT		// with a multiline input?
-	  && size() > 0                                 // non-empty field?
-          && ((mark()==0 && position()==size()) || (position()==0 && mark()==size()))) {// while entire field selected?
-        // Set cursor to the end of the selection...
-        if (mark() > position())
-          position(mark());
-        else
-          position(position());
-        return (1);
-      } else {
-        if (active_r() && window() && this == Fl::belowmouse()) 
-          window()->cursor(FL_CURSOR_NONE);
-        return handle_key();
-      }
-      //NOTREACHED
-      
-    case FL_PUSH:
-      if (Fl::dnd_text_ops()) {
-        int oldpos = position(), oldmark = mark();
-        Fl_Boxtype b = box();
-        Fl_Input_::handle_mouse(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                                w()-Fl::box_dw(b), h()-Fl::box_dh(b), 0);
-        newpos = position(); 
-        position( oldpos, oldmark );
-        if (Fl::focus()==this && !Fl::event_state(FL_SHIFT) && input_type()!=FL_SECRET_INPUT &&
-           ( (newpos >= mark() && newpos < position()) || 
-             (newpos >= position() && newpos < mark()) ) ) {
-          // user clicked in the selection, may be trying to drag
-          drag_start = newpos;
-          return 1;
-        }
-        drag_start = -1;
-      }
-      
-      if (Fl::focus() != this) {
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      break;
-      
-    case FL_DRAG:
-      if (Fl::dnd_text_ops()) {
-        if (drag_start >= 0) {
-          if (Fl::event_is_click()) return 1; // debounce the mouse
-                                              // save the position because sometimes we don't get DND_ENTER:
-          dnd_save_position = position();
-          dnd_save_mark = mark();
-	  dnd_save_focus = this;
-          // drag the data:
-          copy(0);
-#ifdef __APPLE__
-          Fl_X::dnd(1);
-#else
-          Fl::dnd();
-#endif
-          return 1;
-        }
-      }
-      break;
-      
-    case FL_RELEASE:
-      if (Fl::event_button() == 2) {
-        Fl::event_is_click(0); // stop double click from picking a word
-        Fl::paste(*this, 0);
-      } else if (!Fl::event_is_click()) {
-        // copy drag-selected text to the clipboard.
-        copy(0);
-      } else if (Fl::event_is_click() && drag_start >= 0) {
-        // user clicked in the field and wants to reset the cursor position...
-        position(drag_start, drag_start);
-        drag_start = -1;
-      } else if (Fl::event_clicks()) {
-        // user double or triple clicked to select word or whole text
-        copy(0);
-      }
-      
-      // For output widgets, do the callback so the app knows the user
-      // did something with the mouse...
-      if (readonly()) do_callback();
-      
-      return 1;
-      
-    case FL_DND_ENTER:
-      Fl::belowmouse(this); // send the leave events first
-      if (dnd_save_focus != this) {
-	dnd_save_position = position();
-	dnd_save_mark = mark();
-	dnd_save_focus = Fl::focus();
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      // fall through:
-    case FL_DND_DRAG: 
-      //int p = mouse_position(X, Y, W, H);
-#ifdef DND_OUT_XXXX
-      if (Fl::focus()==this && (p>=dnd_save_position && p<=dnd_save_mark ||
-                                p>=dnd_save_mark && p<=dnd_save_position)) {
-        position(dnd_save_position, dnd_save_mark);
-        return 0;
-      }
-#endif
-      {
-        Fl_Boxtype b = box();
-        Fl_Input_::handle_mouse(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                                w()-Fl::box_dw(b), h()-Fl::box_dh(b), 0);
-      }
-      return 1;
-      
-    case FL_DND_LEAVE:
-      position(dnd_save_position, dnd_save_mark);
-#ifdef DND_OUT_XXXX
-      if (!focused())
-#endif
-        if (dnd_save_focus && dnd_save_focus != this) {
-          Fl::focus(dnd_save_focus);
-          handle(FL_UNFOCUS);
-        }
-#if !(defined(__APPLE__) || defined(WIN32))
-      Fl::first_window()->cursor(FL_CURSOR_MOVE);
-#endif
-      dnd_save_focus = NULL;
-      return 1;
-      
-    case FL_DND_RELEASE:
-      if (dnd_save_focus == this) { // if the dragged text comes from the same widget
-	// remove the selected text
-	int old_position = position();
-	if (dnd_save_mark > dnd_save_position) {
-	  int tmp = dnd_save_mark;
-	  dnd_save_mark = dnd_save_position;
-	  dnd_save_position = tmp;
-	  }
-	replace(dnd_save_mark, dnd_save_position, NULL, 0);
-	if (old_position > dnd_save_position) position(old_position - (dnd_save_position - dnd_save_mark));
-	else position(old_position);
-	}
-      else if(dnd_save_focus) {
-	dnd_save_focus->handle(FL_UNFOCUS);
-	}
-      dnd_save_focus = NULL;
-      take_focus();
-      return 1;
-      
-      /* TODO: this will scroll the area, but stop if the cursor would become invisible.
-       That clipping happens in drawtext(). Do we change the clipping or should 
-       we move the cursor (ouch)?
-       case FL_MOUSEWHEEL:
-       if (Fl::e_dy > 0) {
-       yscroll( yscroll() - Fl::e_dy*15 );
-       } else if (Fl::e_dy < 0) {
-       yscroll( yscroll() - Fl::e_dy*15 );
-       }
-       return 1;
-       */
-  }
-  Fl_Boxtype b = box();
-  return Fl_Input_::handletext(event,
-                               x()+Fl::box_dx(b), y()+Fl::box_dy(b),
-                               w()-Fl::box_dw(b), h()-Fl::box_dh(b));
-}
-
-/**
- Creates a new Fl_Input widget using the given position, size,
- and label string. The default boxtype is FL_DOWN_BOX.
- */
-Fl_Input::Fl_Input(int X, int Y, int W, int H, const char *l)
-: Fl_Input_(X, Y, W, H, l) {
-}
-
-
-Fl_Float_Input::Fl_Float_Input(int X,int Y,int W,int H,const char *l)
-: Fl_Input(X,Y,W,H,l) 
-{
-  type(FL_FLOAT_INPUT);
-  clear_flag(MAC_USE_ACCENTS_MENU);
-}
-
-
-Fl_Int_Input::Fl_Int_Input(int X,int Y,int W,int H,const char *l)
-: Fl_Input(X,Y,W,H,l) {
-  type(FL_INT_INPUT);
-  clear_flag(MAC_USE_ACCENTS_MENU);
-}
-
-
-Fl_Multiline_Input::Fl_Multiline_Input(int X,int Y,int W,int H,const char *l)
-: Fl_Input(X,Y,W,H,l) {
-  type(FL_MULTILINE_INPUT);
-}
-
-
-Fl_Output::Fl_Output(int X,int Y,int W,int H, const char *l)
-: Fl_Input(X, Y, W, H, l) {
-  type(FL_NORMAL_OUTPUT);
-}
-
-
-Fl_Multiline_Output::Fl_Multiline_Output(int X,int Y,int W,int H,const char *l)
-: Fl_Output(X,Y,W,H,l) {
-  type(FL_MULTILINE_OUTPUT);
-}
-
-
-Fl_Secret_Input::Fl_Secret_Input(int X,int Y,int W,int H,const char *l)
-: Fl_Input(X,Y,W,H,l) {
-  type(FL_SECRET_INPUT);
-  clear_flag(MAC_USE_ACCENTS_MENU);
-}
-
-int Fl_Secret_Input::handle(int event) {
-  int retval = Fl_Input::handle(event);
-#ifdef __APPLE__
-  if (event == FL_KEYBOARD && Fl::compose_state) {
-    this->mark( this->position() ); // don't underline marked text
-  }
-#endif
-  return retval;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Input_.cxx
+++ /dev/null
@@ -1,1342 +1,0 @@
-//
-// "$Id$"
-//
-// Common input widget routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Input_.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include <math.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdlib.h>
-#include <ctype.h>
-
-#define MAXBUF 1024
-#if defined(USE_X11) && !USE_XFT
-const int secret_char = '*'; // asterisk to hide secret input
-#else
-const int secret_char = 0x2022; // bullet to hide secret input
-#endif
-static int l_secret;
-
-extern void fl_draw(const char*, int, float, float);
-
-////////////////////////////////////////////////////////////////
-
-/** \internal
-  Converts a given text segment into the text that will be rendered on screen.
-
-  This copies the text from \p p to \p buf, replacing characters with <tt>^X</tt>
-  and <tt>\\nnn</tt> as necessary.
-
-  The destination buffer is limited to \c MAXBUF (currently at 1024). All
-  following text is truncated.
-
-  \param [in] p pointer to source buffer
-  \param [in] buf pointer to destination buffer
-  \return pointer to the end of the destination buffer
-*/
-const char* Fl_Input_::expand(const char* p, char* buf) const {
-  char* o = buf;
-  char* e = buf+(MAXBUF-4);
-  const char* lastspace = p;
-  char* lastspace_out = o;
-  int width_to_lastspace = 0;
-  int word_count = 0;
-  int word_wrap;
-//  const char *pe = p + strlen(p);
-
-  if (input_type()==FL_SECRET_INPUT) {
-    while (o<e && p < value_+size_) {
-      if (fl_utf8len((char)p[0]) >= 1) {
-	l_secret = fl_utf8encode(secret_char, o);
-	o += l_secret;
-      }
-      p++;
-    }
-
-  } else while (o<e) {
-    if (wrap() && (p >= value_+size_ || isspace(*p & 255))) {
-      word_wrap = w() - Fl::box_dw(box()) - 2;
-      width_to_lastspace += (int)fl_width(lastspace_out, (int) (o-lastspace_out));
-      if (p > lastspace+1) {
-	if (word_count && width_to_lastspace > word_wrap) {
-	  p = lastspace; o = lastspace_out; break;
-	}
-	word_count++;
-      }
-      lastspace = p;
-      lastspace_out = o;
-    }
-
-    if (p >= value_+size_) break;
-    int c = *p++ & 255;
-    if (c < ' ' || c == 127) {
-      if (c=='\n' && input_type()==FL_MULTILINE_INPUT) {p--; break;}
-      if (c == '\t' && input_type()==FL_MULTILINE_INPUT) {
-        for (c = fl_utf_nb_char((uchar*)buf, (int) (o-buf))%8; c<8 && o<e; c++) {
-          *o++ = ' ';
-        }
-      } else {
-	*o++ = '^';
-	*o++ = c ^ 0x40;
-      }
-    } else {
-      *o++ = c;
-    }
-  }
-  *o = 0;
-  return p;
-}
-
-/** \internal
-  Calculates the width in pixels of part of a text buffer.
-
-  This call takes a string, usually created by expand, and calculates
-  the width of the string when rendered with the given font.
-
-  \param [in] p pointer to the start of the original string
-  \param [in] e pointer to the end of the original string
-  \param [in] buf pointer to the buffer as returned by expand()
-  \return width of string in pixels
-*/
-double Fl_Input_::expandpos(
-  const char* p,	// real string
-  const char* e,	// pointer into real string
-  const char* buf,	// conversion of real string by expand()
-  int* returnn		// return offset into buf here
-) const {
-  int n = 0;
-  int chr = 0;
-  int l;
-  if (input_type()==FL_SECRET_INPUT) {
-    while (p<e) {
-      l = fl_utf8len((char)p[0]);
-      if (l >= 1) n += l_secret;
-      p += l;
-    }
-  } else while (p<e) {
-    int c = *p & 255;
-    if (c < ' ' || c == 127) {
-      if (c == '\t' && input_type()==FL_MULTILINE_INPUT) {
-         n += 8-(chr%8);
-         chr += 7-(chr%8);
-      } else n += 2;
-    } else {
-      n++;
-    }
-    chr += fl_utf8len((char)p[0]) >= 1;
-    p++;
-  }
-  if (returnn) *returnn = n;
-  return fl_width(buf, n);
-}
-
-////////////////////////////////////////////////////////////////
-
-/** \internal
-  Marks a range of characters for update.
-
-  This call marks all characters from \p to the end of the 
-  text buffer for update. At least these characters
-  will be redrawn in the next update cycle.
-
-  Characters from \p mu_p to end of widget are redrawn.
-  If \p erase_cursor_only, small part at \p mu_p is redrawn.
-  Right now minimal update just keeps unchanged characters from
-  being erased, so they don't blink.
-
-  \param [in] p start of update range
-*/
-void Fl_Input_::minimal_update(int p) {
-  if (damage() & FL_DAMAGE_ALL) return; // don't waste time if it won't be done
-  if (damage() & FL_DAMAGE_EXPOSE) {
-    if (p < mu_p) mu_p = p;
-  } else {
-    mu_p = p;
-  }
-
-  damage(FL_DAMAGE_EXPOSE);
-  erase_cursor_only = 0;
-}
-
-/** \internal
-  Marks a range of characters for update.
-
-  This call marks a text range for update. At least all characters
-  from \p p to \p q will be redrawn in the next update cycle.
-
-  \param [in] p start of update range
-  \param [in] q end of update range
-*/
-void Fl_Input_::minimal_update(int p, int q) {
-  if (q < p) p = q;
-  minimal_update(p);
-}
-
-////////////////////////////////////////////////////////////////
-
-/* Horizontal cursor position in pixels while moving up or down. */
-double Fl_Input_::up_down_pos = 0;
-
-/* Flag to remember last cursor move. */
-int Fl_Input_::was_up_down = 0;
-
-/**
-  Sets the current font and font size.
-*/
-void Fl_Input_::setfont() const {
-  fl_font(textfont(), textsize());
-}
-
-/**
-  Draws the text in the passed bounding box.  
-
-  If <tt>damage() & FL_DAMAGE_ALL</tt> is true, this assumes the 
-  area has already been erased to color(). Otherwise it does
-  minimal update and erases the area itself.
-
-  \param X, Y, W, H area that must be redrawn
-*/
-void Fl_Input_::drawtext(int X, int Y, int W, int H) {
-  int do_mu = !(damage()&FL_DAMAGE_ALL);
-
-  if (Fl::focus()!=this && !size()) {
-    if (do_mu) { // we have to erase it if cursor was there
-      draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-               W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-    }
-    return;
-  }
-
-  int selstart, selend;
-  if (Fl::focus()!=this && /*Fl::selection_owner()!=this &&*/ Fl::pushed()!=this)
-    selstart = selend = 0;
-  else if (position() <= mark()) {
-    selstart = position(); selend = mark();
-  } else {
-    selend = position(); selstart = mark();
-  }
-
-  setfont();
-  const char *p, *e;
-  char buf[MAXBUF];
-
-  // count how many lines and put the last one into the buffer:
-  // And figure out where the cursor is:
-  int height = fl_height();
-  int threshold = height/2;
-  int lines;
-  int curx, cury;
-  for (p=value(), curx=cury=lines=0; ;) {
-    e = expand(p, buf);
-    if (position() >= p-value() && position() <= e-value()) {
-      curx = int(expandpos(p, value()+position(), buf, 0)+.5);
-      if (Fl::focus()==this && !was_up_down) up_down_pos = curx;
-      cury = lines*height;
-      int newscroll = xscroll_;
-      if (curx > newscroll+W-threshold) {
-	// figure out scrolling so there is space after the cursor:
-	newscroll = curx+threshold-W;
-	// figure out the furthest left we ever want to scroll:
-	int ex = int(expandpos(p, e, buf, 0))+4-W;
-	// use minimum of both amounts:
-	if (ex < newscroll) newscroll = ex;
-      } else if (curx < newscroll+threshold) {
-	newscroll = curx-threshold;
-      }
-      if (newscroll < 0) newscroll = 0;
-      if (newscroll != xscroll_) {
-	xscroll_ = newscroll;
-	mu_p = 0; erase_cursor_only = 0;
-      }
-    }
-    lines++;
-    if (e >= value_+size_) break;
-    p = e+1;
-  }
-
-  // adjust the scrolling:
-  if (input_type()==FL_MULTILINE_INPUT) {
-    int newy = yscroll_;
-    if (cury < newy) newy = cury;
-    if (cury > newy+H-height) newy = cury-H+height;
-    if (newy < -1) newy = -1;
-    if (newy != yscroll_) {yscroll_ = newy; mu_p = 0; erase_cursor_only = 0;}
-  } else {
-    yscroll_ = -(H-height)/2;
-  }
-
-  fl_push_clip(X, Y, W, H);
-  Fl_Color tc = active_r() ? textcolor() : fl_inactive(textcolor());
-
-  p = value();
-  // visit each line and draw it:
-  int desc = height-fl_descent();
-  float xpos = (float)(X - xscroll_ + 1);
-  int ypos = -yscroll_;
-  for (; ypos < H;) {
-
-    // re-expand line unless it is the last one calculated above:
-    if (lines>1) e = expand(p, buf);
-
-    if (ypos <= -height) goto CONTINUE; // clipped off top
-
-    if (do_mu) {	// for minimal update:
-      const char* pp = value()+mu_p; // pointer to where minimal update starts
-      if (e < pp) goto CONTINUE2; // this line is before the changes
-      if (readonly()) erase_cursor_only = 0; // this isn't the most efficient way
-      if (erase_cursor_only && p > pp) goto CONTINUE2; // this line is after
-      // calculate area to erase:
-      float r = (float)(X+W);
-      float xx;
-      if (p >= pp) {
-	xx = (float)X;
-	if (erase_cursor_only) r = xpos+2;
-	else if (readonly()) xx -= 3;
-      } else {
-	xx = xpos + (float)expandpos(p, pp, buf, 0);
-	if (erase_cursor_only) r = xx+2;
-	else if (readonly()) xx -= 3;
-      }
-      // clip to and erase it:
-      fl_push_clip((int)xx-1-height/8, Y+ypos, (int)(r-xx+2+height/4), height);
-      draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-               W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-      // it now draws entire line over it
-      // this should not draw letters to left of erased area, but
-      // that is nyi.
-    }
-
-    // Draw selection area if required:
-    if (selstart < selend && selstart <= e-value() && selend > p-value()) {
-      const char* pp = value()+selstart;
-      float x1 = xpos;
-      int offset1 = 0;
-      if (pp > p) {
-	fl_color(tc);
-	x1 += (float)expandpos(p, pp, buf, &offset1);
-	fl_draw(buf, offset1, xpos, (float)(Y+ypos+desc));
-      }
-      pp = value()+selend;
-      float x2 = (float)(X+W);
-      int offset2;
-      if (pp <= e) x2 = xpos + (float)expandpos(p, pp, buf, &offset2);
-      else offset2 = (int) strlen(buf);
-#ifdef __APPLE__ // Mac OS: underline marked ( = selected + Fl::compose_state != 0) text 
-      if (Fl::compose_state) {
-        fl_color(textcolor());
-      }
-      else 
-#endif
-      {
-      fl_color(selection_color());
-      fl_rectf((int)(x1+0.5), Y+ypos, (int)(x2-x1+0.5), height);
-      fl_color(fl_contrast(textcolor(), selection_color()));
-      }
-      fl_draw(buf+offset1, offset2-offset1, x1, (float)(Y+ypos+desc));
-#ifdef __APPLE__ // Mac OS: underline marked ( = selected + Fl::compose_state != 0) text
-      if (Fl::compose_state) {
-        fl_color( fl_color_average(textcolor(), color(), 0.6) );
-        float width = fl_width(buf+offset1, offset2-offset1);
-        fl_line(x1, Y+ypos+height-1, x1+width, Y+ypos+height-1);
-      }
-#endif
-      if (pp < e) {
-	fl_color(tc);
-	fl_draw(buf+offset2, (int) strlen(buf+offset2), x2, (float)(Y+ypos+desc));
-      }
-    } else {
-      // draw unselected text
-      fl_color(tc);
-      fl_draw(buf, (int) strlen(buf), xpos, (float)(Y+ypos+desc));
-    }
-
-    if (do_mu) fl_pop_clip();
-
-  CONTINUE2:
-    // draw the cursor:
-    if (Fl::focus() == this && (
-#ifdef __APPLE__
-				Fl::compose_state || 
-#endif
-				selstart == selend) &&
-	position() >= p-value() && position() <= e-value()) {
-      fl_color(cursor_color());
-      // cursor position may need to be recomputed (see STR #2486)
-      curx = int(expandpos(p, value()+position(), buf, 0)+.5);
-      if (readonly()) {
-        fl_line((int)(xpos+curx-2.5f), Y+ypos+height-1,
-	        (int)(xpos+curx+0.5f), Y+ypos+height-4,
-	        (int)(xpos+curx+3.5f), Y+ypos+height-1);
-      } else {
-        fl_rectf((int)(xpos+curx+0.5), Y+ypos, 2, height);
-      }
-#ifdef __APPLE__
-      Fl::insertion_point_location(xpos+curx, Y+ypos+height, height);
-#endif
-    }
-
-  CONTINUE:
-    ypos += height;
-    if (e >= value_+size_) break;
-    if (*e == '\n' || *e == ' ') e++;
-    p = e;
-  }
-
-  // for minimal update, erase all lines below last one if necessary:
-  if (input_type()==FL_MULTILINE_INPUT && do_mu && ypos<H
-      && (!erase_cursor_only || p <= value()+mu_p)) {
-    if (ypos < 0) ypos = 0;
-    fl_push_clip(X, Y+ypos, W, H-ypos);
-    draw_box(box(), X-Fl::box_dx(box()), Y-Fl::box_dy(box()),
-             W+Fl::box_dw(box()), H+Fl::box_dh(box()), color());
-    fl_pop_clip();
-  }
-
-  fl_pop_clip();
-  if (Fl::focus() == this) {
-       fl_set_spot(textfont(), textsize(),
-               (int)xpos+curx, Y+ypos-fl_descent(), W, H, window());
-  }
-}
-
-/** \internal
-  Simple function that determines if a character could be part of a word.
-  \todo This function is not UTF-8-aware.
-*/
-static int isword(char c) {
-  return (c&128 || isalnum(c) || strchr("#%-@_~", c));
-}
-
-/**
-  Finds the end of a word.
-
-  Returns the index after the last byte of a word.
-  If the index is already at the end of a word, it will find the
-  end of the following word, so if you call it repeatedly you will
-  move forwards to the end of the text.
-
-  Note that this is inconsistent with line_end().
-
-  \param [in] i starting index for the search
-  \return end of the word
-*/
-int Fl_Input_::word_end(int i) const {
-  if (input_type() == FL_SECRET_INPUT) return size();
-  while (i < size() && !isword(index(i))) i++;
-  while (i < size() && isword(index(i))) i++;
-  return i;
-}
-
-/**
-  Finds the start of a word.
-
-  Returns the index of the first byte of a word.
-  If the index is already at the beginning of a word, it will find the
-  beginning of the previous word, so if you call it repeatedly you will
-  move backwards to the beginning of the text.
-
-  Note that this is inconsistent with line_start().
-
-  \param [in] i starting index for the search
-  \return start of the word, or previous word
-*/
-int Fl_Input_::word_start(int i) const {
-  if (input_type() == FL_SECRET_INPUT) return 0;
-  while (i > 0 && !isword(index(i-1))) i--;
-  while (i > 0 && isword(index(i-1))) i--;
-  return i;
-}
-
-/**
-  Finds the end of a line.
-
-  This call calculates the end of a line based on the given 
-  index \p i. 
- 
-  \param [in] i starting index for the search
-  \return end of the line
-*/
-int Fl_Input_::line_end(int i) const {
-  if (input_type() != FL_MULTILINE_INPUT) return size();
-
-  if (wrap()) {
-    // go to the start of the paragraph:
-    int j = i;
-    while (j > 0 && index(j-1) != '\n') j--;
-    // now measure lines until we get past i, end of that line is real eol:
-    setfont();
-    for (const char* p=value()+j; ;) {
-      char buf[MAXBUF];
-      p = expand(p, buf);
-      int k = (int) (p-value());
-      if (k >= i) return k;
-      p++;
-    }
-  } else {
-    while (i < size() && index(i) != '\n') i++;
-    return i;
-  }
-}
-
-/**
-  Finds the start of a line.
-
-  This call calculates the start of a line based on the given 
-  index \p i. 
- 
-  \param [in] i starting index for the search
-  \return start of the line
-*/
-int Fl_Input_::line_start(int i) const {
-  if (input_type() != FL_MULTILINE_INPUT) return 0;
-  int j = i;
-  while (j > 0 && index(j-1) != '\n') j--;
-  if (wrap()) {
-    // now measure lines until we get past i, start of that line is real eol:
-    setfont();
-    for (const char* p=value()+j; ;) {
-      char buf[MAXBUF];
-      const char* e = expand(p, buf);
-      if ((int) (e-value()) >= i) return (int) (p-value());
-      p = e+1;
-    }
-  } else return j;
-}
-
-static int strict_word_start(const char *s, int i, int itype) {
-  if (itype == FL_SECRET_INPUT) return 0;
-  while (i > 0 && !isspace(s[i-1]))
-    i--;
-  return i;
-}
-
-static int strict_word_end(const char *s, int len, int i, int itype) {
-  if (itype == FL_SECRET_INPUT) return len;
-  while (i < len && !isspace(s[i]))
-    i++;
-  return i;
-}
-
-/** 
-  Handles mouse clicks and mouse moves.
-  \todo Add comment and parameters
-*/
-void Fl_Input_::handle_mouse(int X, int Y, int /*W*/, int /*H*/, int drag) {
-  was_up_down = 0;
-  if (!size()) return;
-  setfont();
-
-  const char *p, *e;
-  char buf[MAXBUF];
-
-  int theline = (input_type()==FL_MULTILINE_INPUT) ?
-    (Fl::event_y()-Y+yscroll_)/fl_height() : 0;
-
-  int newpos = 0;
-  for (p=value();; ) {
-    e = expand(p, buf);
-    theline--; if (theline < 0) break;
-    if (e >= value_+size_) break;
-    p = e+1;
-  }
-  const char *l, *r, *t; double f0 = Fl::event_x()-X+xscroll_;
-  for (l = p, r = e; l<r; ) {
-    double f;
-    int cw = fl_utf8len((char)l[0]);
-    if (cw < 1) cw = 1;
-    t = l+cw;
-    f = X-xscroll_+expandpos(p, t, buf, 0);
-    if (f <= Fl::event_x()) {l = t; f0 = Fl::event_x()-f;}
-    else r = t-cw;
-  }
-  if (l < e) { // see if closer to character on right:
-    double f1;
-    int cw = fl_utf8len((char)l[0]);
-    if (cw > 0) {
-      f1 = X-xscroll_+expandpos(p, l + cw, buf, 0) - Fl::event_x();
-      if (f1 < f0) l = l+cw;
-    }
-  }
-  newpos = (int) (l-value());
-
-  int newmark = drag ? mark() : newpos;
-  if (Fl::event_clicks()) {
-    if (newpos >= newmark) {
-      if (newpos == newmark) {
-	if (newpos < size()) newpos++;
-	else newmark--;
-      }
-      if (Fl::event_clicks() > 1) {
-	newpos = line_end(newpos);
-	newmark = line_start(newmark);
-      } else {
-	newpos = strict_word_end(value(), size(), newpos, input_type());
-	newmark = strict_word_start(value(), newmark, input_type());
-      }
-    } else {
-      if (Fl::event_clicks() > 1) {
-	newpos = line_start(newpos);
-	newmark = line_end(newmark);
-      } else {
-	newpos = strict_word_start(value(), newpos, input_type());
-	newmark = strict_word_end(value(), size(), newmark, input_type());
-      }
-    }
-    // if the multiple click does not increase the selection, revert
-    // to single-click behavior:
-    if (!drag && (mark() > position() ?
-                  (newmark >= position() && newpos <= mark()) :
-                  (newmark >= mark() && newpos <= position()))) {
-      Fl::event_clicks(0);
-      newmark = newpos = (int) (l-value());
-    }
-  }
-  position(newpos, newmark);
-}
-
-/**
-  Sets the index for the cursor and mark.
-
-  The input widget maintains two pointers into the string. The
-  \e position (\c p) is where the cursor is. The
-  \e mark (\c m) is the other end of the selected text. If they
-  are equal then there is no selection. Changing this does not
-  affect the clipboard (use copy() to do that).
-    
-  Changing these values causes a redraw(). The new
-  values are bounds checked. 
-
-  \param p index for the cursor position
-  \param m index for the mark
-  \return 0 if no positions changed
-  \see position(int), position(), mark(int)
-*/
-int Fl_Input_::position(int p, int m) {
-  int is_same = 0;
-  was_up_down = 0;
-  if (p<0) p = 0;
-  if (p>size()) p = size();
-  if (m<0) m = 0;
-  if (m>size()) m = size();
-  if (p == m) is_same = 1;
-
-  while (p < position_ && p > 0 && (size() - p) > 0 &&
-       (fl_utf8len((char)(value() + p)[0]) < 1)) { p--; }
-  int ul = fl_utf8len((char)(value() + p)[0]);
-  while (p < size() && p > position_ && ul < 0) {
-       p++;
-       ul = fl_utf8len((char)(value() + p)[0]);
-  }
-
-  while (m < mark_ && m > 0 && (size() - m) > 0 &&
-       (fl_utf8len((char)(value() + m)[0]) < 1)) { m--; }
-  ul = fl_utf8len((char)(value() + m)[0]);
-  while (m < size() && m > mark_ && ul < 0) {
-       m++;
-       ul = fl_utf8len((char)(value() + m)[0]);
-  }
-  if (is_same) m = p;
-  if (p == position_ && m == mark_) return 0;
-
-
-  //if (Fl::selection_owner() == this) Fl::selection_owner(0);
-  if (p != m) {
-    if (p != position_) minimal_update(position_, p);
-    if (m != mark_) minimal_update(mark_, m);
-  } else {
-    // new position is a cursor
-    if (position_ == mark_) {
-      // old position was just a cursor
-      if (Fl::focus() == this && !(damage()&FL_DAMAGE_EXPOSE)) {
-	minimal_update(position_); erase_cursor_only = 1;
-      }
-    } else { // old position was a selection
-      minimal_update(position_, mark_);
-    }
-  }
-  position_ = p;
-  mark_ = m;
-  return 1;
-}
-
-/**
-  Moves the cursor to the column given by \p up_down_pos.
-
-  This function is helpful when implementing up and down 
-  cursor movement. It moves the cursor from the beginning
-  of a line to the column indicated by the global variable
-  \p up_down_pos in pixel units.
-
-  \param [in] i index into the beginning of a line of text
-  \param [in] keepmark if set, move only the cursor, but not the mark
-  \return index to new cursor position
-*/
-int Fl_Input_::up_down_position(int i, int keepmark) {
-  // unlike before, i must be at the start of the line already!
-
-  setfont();
-  char buf[MAXBUF];
-  const char* p = value()+i;
-  const char* e = expand(p, buf);
-  const char *l, *r, *t;
-  for (l = p, r = e; l<r; ) {
-    t = l+(r-l+1)/2;
-    int f = (int)expandpos(p, t, buf, 0);
-    if (f <= up_down_pos) l = t; else r = t-1;
-  }
-  int j = (int) (l-value());
-  j = position(j, keepmark ? mark_ : j);
-  was_up_down = 1;
-  return j;
-}
-
-/**
-  Put the current selection into the clipboard.
-
-  This function copies the current selection between mark() and
-  position() into the specified \c clipboard. This does not
-  replace the old clipboard contents if position() and
-  mark() are equal. Clipboard 0 maps to the current text
-  selection and clipboard 1 maps to the cut/paste clipboard.
-
-  \param clipboard the clipboard destination 0 or 1
-  \return 0 if no text is selected, 1 if the selection was copied
-  \see Fl::copy(const char *, int, int)
-*/
-int Fl_Input_::copy(int clipboard) {
-  int b = position();
-  int e = mark();
-  if (b != e) {
-    if (b > e) {b = mark(); e = position();}
-    if (input_type() == FL_SECRET_INPUT) e = b;
-    Fl::copy(value()+b, e-b, clipboard);
-    return 1;
-  }
-  return 0;
-}
-
-#define MAXFLOATSIZE 40
-
-static char* undobuffer;
-static int undobufferlength;
-static Fl_Input_* undowidget;
-static int undoat;	// points after insertion
-static int undocut;	// number of characters deleted there
-static int undoinsert;	// number of characters inserted
-static int yankcut;	// length of valid contents of buffer, even if undocut=0
-
-static void undobuffersize(int n) {
-  if (n > undobufferlength) {
-    if (undobuffer) {
-      do {undobufferlength *= 2;} while (undobufferlength < n);
-      undobuffer = (char*)realloc(undobuffer, undobufferlength);
-    } else {
-      undobufferlength = n+9;
-      undobuffer = (char*)malloc(undobufferlength);
-    }
-  }
-}
-
-/**
-  Deletes text from \p b to \p e and inserts the new string \p text.
-
-  All changes to the text buffer go through this function.
-  It deletes the region between \p b and \p e (either one may be less or
-  equal to the other), and then inserts the string \p text
-  at that point and moves the mark() and 
-  position() to the end of the insertion. Does the callback if
-  <tt>when() & FL_WHEN_CHANGED</tt> and there is a change.
-
-  Set \p b and \p e equal to not delete anything.
-  Set \p text to \c NULL to not insert anything.
-
-  \p ilen can be zero or <tt>strlen(text)</tt>, which
-  saves a tiny bit of time if you happen to already know the
-  length of the insertion, or can be used to insert a portion of a
-  string. If \p ilen is zero, <tt>strlen(text)</tt> is used instead.
-
-  \p b and \p e are clamped to the <tt>0..size()</tt> range, so it is
-  safe to pass any values. \p b, \p e, and \p ilen are used as numbers
-  of bytes (not characters), where \p b and \p e count from 0 to
-  size() (end of buffer).
-
-  If \p b and/or \p e don't point to a valid UTF-8 character boundary,
-  they are adjusted to the previous (\p b) or the next (\p e) valid
-  UTF-8 character boundary, resp..
-
-  If the current number of characters in the buffer minus deleted
-  characters plus inserted characters in \p text would overflow the
-  number of allowed characters (maximum_size()), then only the first
-  characters of the string are inserted, so that maximum_size()
-  is not exceeded.
-
-  cut() and insert() are just inline functions that call replace().
-
-  \param [in] b beginning index of text to be deleted
-  \param [in] e ending index of text to be deleted and insertion position
-  \param [in] text string that will be inserted
-  \param [in] ilen length of \p text or 0 for \c nul terminated strings
-  \return 0 if nothing changed
-  
-  \note If \p text does not point to a valid UTF-8 character or includes
-  invalid UTF-8 sequences, the text is inserted nevertheless (counting
-  invalid UTF-8 bytes as one character each).
-*/
-int Fl_Input_::replace(int b, int e, const char* text, int ilen) {
-  int ul, om, op;
-  was_up_down = 0;
-
-  if (b<0) b = 0;
-  if (e<0) e = 0;
-  if (b>size_) b = size_;
-  if (e>size_) e = size_;
-  if (e<b) {int t=b; b=e; e=t;}
-  while (b != e && b > 0 && (size_ - b) > 0 &&
-       (fl_utf8len((value_ + b)[0]) < 1)) { b--; }
-  ul = fl_utf8len((char)(value_ + e)[0]);
-  while (e < size_ && e > 0 && ul < 0) {
-       e++;
-       ul = fl_utf8len((char)(value_ + e)[0]);
-  }
-  if (text && !ilen) ilen = (int) strlen(text);
-  if (e<=b && !ilen) return 0; // don't clobber undo for a null operation
-
-  // we must count UTF-8 *characters* to determine whether we can insert
-  // the full text or only a part of it (and how much this would be)
-
-  int nchars = 0;	// characters in value() - deleted + inserted
-  const char *p = value_;
-  while (p < (char *)(value_+size_)) {
-    if (p == (char *)(value_+b)) { // skip removed part
-      p = (char *)(value_+e);
-      if (p >= (char *)(value_+size_)) break;
-    }
-    int ulen = fl_utf8len(*p);
-    if (ulen < 1) ulen = 1; // invalid UTF-8 character: count as 1
-    nchars++;
-    p += ulen;
-  }
-  int nlen = 0;		// length (in bytes) to be inserted
-  p = text;
-  while (p < (char *)(text+ilen) && nchars < maximum_size()) {
-    int ulen = fl_utf8len(*p);
-    if (ulen < 1) ulen = 1; // invalid UTF-8 character: count as 1
-    nchars++;
-    p += ulen;
-    nlen += ulen;
-  }
-  ilen = nlen;
-
-  put_in_buffer(size_+ilen);
-
-  if (e>b) {
-    if (undowidget == this && b == undoat) {
-      undobuffersize(undocut+(e-b));
-      memcpy(undobuffer+undocut, value_+b, e-b);
-      undocut += e-b;
-    } else if (undowidget == this && e == undoat && !undoinsert) {
-      undobuffersize(undocut+(e-b));
-      memmove(undobuffer+(e-b), undobuffer, undocut);
-      memcpy(undobuffer, value_+b, e-b);
-      undocut += e-b;
-    } else if (undowidget == this && e == undoat && (e-b)<undoinsert) {
-      undoinsert -= e-b;
-    } else {
-      undobuffersize(e-b);
-      memcpy(undobuffer, value_+b, e-b);
-      undocut = e-b;
-      undoinsert = 0;
-    }
-    memmove(buffer+b, buffer+e, size_-e+1);
-    size_ -= e-b;
-    undowidget = this;
-    undoat = b;
-    if (input_type() == FL_SECRET_INPUT) yankcut = 0; else yankcut = undocut;
-  }
-
-  if (ilen) {
-    if (undowidget == this && b == undoat)
-      undoinsert += ilen;
-    else {
-      undocut = 0;
-      undoinsert = ilen;
-    }
-    memmove(buffer+b+ilen, buffer+b, size_-b+1);
-    memcpy(buffer+b, text, ilen);
-    size_ += ilen;
-  }
-  undowidget = this;
-  om = mark_;
-  op = position_;
-  mark_ = position_ = undoat = b+ilen;
-
-  // Insertions into the word at the end of the line will cause it to
-  // wrap to the next line, so we must indicate that the changes may start
-  // right after the whitespace before the current word.  This will
-  // result in sub-optimal update when such wrapping does not happen
-  // but it is too hard to figure out for now...
-  if (wrap()) {
-    // if there is a space in the pasted text, the whole line may have rewrapped
-    int i;
-    for (i=0; i<ilen; i++)
-      if (text[i]==' ') break;
-    if (i==ilen)
-      while (b > 0 && !isspace(index(b) & 255) && index(b)!='\n') b--;
-    else
-      while (b > 0 && index(b)!='\n') b--;
-  }
-
-  // make sure we redraw the old selection or cursor:
-  if (om < b) b = om;
-  if (op < b) b = op;
-
-  minimal_update(b);
-
-  mark_ = position_ = undoat;
-
-  set_changed();
-  if (when()&FL_WHEN_CHANGED) do_callback();
-  return 1;
-}
-
-/**
-  Undoes previous changes to the text buffer.
-
-  This call undoes a number of previous calls to replace().
-
-  \return non-zero if any change was made.
-*/
-int Fl_Input_::undo() {
-  was_up_down = 0;
-  if ( undowidget != this || (!undocut && !undoinsert) ) return 0;
-
-  int ilen = undocut;
-  int xlen = undoinsert;
-  int b = undoat-xlen;
-  int b1 = b;
-
-  put_in_buffer(size_+ilen);
-
-  if (ilen) {
-    memmove(buffer+b+ilen, buffer+b, size_-b+1);
-    memcpy(buffer+b, undobuffer, ilen);
-    size_ += ilen;
-    b += ilen;
-  }
-
-  if (xlen) {
-    undobuffersize(xlen);
-    memcpy(undobuffer, buffer+b, xlen);
-    memmove(buffer+b, buffer+b+xlen, size_-xlen-b+1);
-    size_ -= xlen;
-  }
-
-  undocut = xlen;
-  if (xlen) yankcut = xlen;
-  undoinsert = ilen;
-  undoat = b;
-  mark_ = b /* -ilen */;
-  position_ = b;
-
-  if (wrap())
-    while (b1 > 0 && index(b1)!='\n') b1--;
-  minimal_update(b1);
-  set_changed();
-  if (when()&FL_WHEN_CHANGED) do_callback();
-  return 1;
-}
-
-/**
-  Copies the \e yank buffer to the clipboard.
-
-  This method copies all the previous contiguous cuts from the undo
-  information to the clipboard. This function implements 
-  the \c ^K shortcut key.
-
-  \return 0 if the operation did not change the clipboard
-  \see copy(int), cut()
-*/
-int Fl_Input_::copy_cuts() {
-  // put the yank buffer into the X clipboard
-  if (!yankcut || input_type()==FL_SECRET_INPUT) return 0;
-  Fl::copy(undobuffer, yankcut, 1);
-  return 1;
-}
-
-/** \internal
-  Checks the when() field and does a callback if indicated.
-*/
-void Fl_Input_::maybe_do_callback() {
-  if (changed() || (when()&FL_WHEN_NOT_CHANGED)) {
-    do_callback();
-  }
-}
-
-/** 
-  Handles all kinds of text field related events.
-
-  This is called by derived classes.
-  \todo Add comment and parameters
-*/
-int Fl_Input_::handletext(int event, int X, int Y, int W, int H) {
-  switch (event) {
-
-  case FL_ENTER:
-  case FL_MOVE:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_INSERT);
-    return 1;
-
-  case FL_LEAVE:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    return 1;
-
-  case FL_FOCUS:
-    fl_set_spot(textfont(), textsize(), x(), y(), w(), h(), window());
-    if (mark_ == position_) {
-      minimal_update(size()+1);
-    } else //if (Fl::selection_owner() != this)
-      minimal_update(mark_, position_);
-    return 1;
-
-  case FL_UNFOCUS:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    if (mark_ == position_) {
-      if (!(damage()&FL_DAMAGE_EXPOSE)) {minimal_update(position_); erase_cursor_only = 1;}
-    } else //if (Fl::selection_owner() != this)
-      minimal_update(mark_, position_);
-  case FL_HIDE:
-    fl_reset_spot();
-    if (!readonly() && (when() & FL_WHEN_RELEASE))
-      maybe_do_callback();
-    return 1;
-
-  case FL_PUSH:
-    if (active_r() && window()) window()->cursor(FL_CURSOR_INSERT);
-
-    handle_mouse(X, Y, W, H, Fl::event_state(FL_SHIFT));
-
-    if (Fl::focus() != this) {
-      Fl::focus(this);
-      handle(FL_FOCUS);
-    }
-    return 1;
-
-  case FL_DRAG:
-    handle_mouse(X, Y, W, H, 1);
-    return 1;
-
-  case FL_RELEASE:
-    copy(0);
-    return 1;
-
-  case FL_PASTE: {
-    // Don't allow pastes into readonly widgets...
-    if (readonly()) {
-      fl_beep(FL_BEEP_ERROR);
-      return 1;
-    }
-
-    // See if we have anything to paste...
-    if (!Fl::event_text() || !Fl::event_length()) return 1;
-
-    // strip trailing control characters and spaces before pasting:
-    const char* t = Fl::event_text();
-    const char* e = t+Fl::event_length();
-    if (input_type() != FL_MULTILINE_INPUT) while (e > t && isspace(*(e-1) & 255)) e--;
-    if (!t || e <= t) return 1; // Int/float stuff will crash without this test
-    if (input_type() == FL_INT_INPUT) {
-      while (isspace(*t & 255) && t < e) t ++;
-      const char *p = t;
-      if (*p == '+' || *p == '-') p ++;
-      if (strncmp(p, "0x", 2) == 0) {
-        p += 2;
-        while (isxdigit(*p & 255) && p < e) p ++;
-      } else {
-        while (isdigit(*p & 255) && p < e) p ++;
-      }
-      if (p < e) {
-        fl_beep(FL_BEEP_ERROR);
-        return 1;
-      } else return replace(0, size(), t, (int) (e-t));
-    } else if (input_type() == FL_FLOAT_INPUT) {
-      while (isspace(*t & 255) && t < e) t ++;
-      const char *p = t;
-      if (*p == '+' || *p == '-') p ++;
-      while (isdigit(*p & 255) && p < e) p ++;
-      if (*p == '.') {
-        p ++;
-        while (isdigit(*p & 255) && p < e) p ++;
-	if (*p == 'e' || *p == 'E') {
-	  p ++;
-	  if (*p == '+' || *p == '-') p ++;
-	  while (isdigit(*p & 255) && p < e) p ++;
-	}
-      }
-      if (p < e) {
-        fl_beep(FL_BEEP_ERROR);
-        return 1;
-      } else return replace(0, size(), t, (int) (e-t));
-    }
-    return replace(position(), mark(), t, (int) (e-t));}
-
-  case FL_SHORTCUT:
-    if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut())) 
-      return 0;
-    if (Fl::visible_focus() && handle(FL_FOCUS)) {
-      Fl::focus(this);
-      return 1;
-    } // else fall through
-
-  default:
-    return 0;
-  }
-}
-
-/*------------------------------*/
-
-/**
-  Creates a new Fl_Input_ widget.
-
-  This function creates a new Fl_Input_ widget and adds it to the current
-  Fl_Group. The value() is set to \c NULL.
-  The default boxtype is \c FL_DOWN_BOX.
-
-  \param X, Y, W, H the dimensions of the new widget
-  \param l an optional label text
-*/
-Fl_Input_::Fl_Input_(int X, int Y, int W, int H, const char* l)
-: Fl_Widget(X, Y, W, H, l) {
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  align(FL_ALIGN_LEFT);
-  textsize_ = FL_NORMAL_SIZE;
-  textfont_ = FL_HELVETICA;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  cursor_color_ = FL_FOREGROUND_COLOR; // was FL_BLUE
-  mark_ = position_ = size_ = 0;
-  bufsize = 0;
-  buffer  = 0;
-  value_ = "";
-  xscroll_ = yscroll_ = 0;
-  maximum_size_ = 32767;
-  shortcut_ = 0;
-  set_flag(SHORTCUT_LABEL);
-  set_flag(MAC_USE_ACCENTS_MENU);
-  tab_nav(1);
-}
-
-/**
- Copies the value from a possibly static entry into the internal buffer.
-
- \param [in] len size of the current text
-*/
-void Fl_Input_::put_in_buffer(int len) {
-  if (value_ == buffer && bufsize > len) {
-    buffer[size_] = 0;
-    return;
-  }
-  if (!bufsize) {
-    if (len > size_) len += 9; // let a few characters insert before realloc
-    bufsize = len+1; 
-    buffer = (char*)malloc(bufsize);
-  } else if (bufsize <= len) {
-    // we may need to move old value in case it points into buffer:
-    int moveit = (value_ >= buffer && value_ < buffer+bufsize);
-    // enlarge current buffer
-    if (len > size_) {
-      do {bufsize *= 2;} while (bufsize <= len);
-    } else {
-      bufsize = len+1;
-    }
-    // Note: the following code is equivalent to:
-    //
-    //   if (moveit) value_ = value_ - buffer;
-    //   char* nbuffer = (char*)realloc(buffer, bufsize);
-    //   if (moveit) value_ = value_ + nbuffer;
-    //   buffer = nbuffer;
-    //
-    // We just optimized the pointer arithmetic for value_...
-    //
-    char* nbuffer = (char*)realloc(buffer, bufsize);
-    if (moveit) value_ += (nbuffer-buffer);
-    buffer = nbuffer;
-  }
-  memmove(buffer, value_, size_); buffer[size_] = 0;
-  value_ = buffer;
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the point to 
-  the end of it. The string is \e not copied. If the user edits the
-  string it is copied to the internal buffer then. This can save a
-  great deal of time and memory if your program is rapidly
-  changing the values of text fields, but this will only work if
-  the passed string remains unchanged until either the
-  Fl_Input is destroyed or value() is called again.
-
-  You can use the \p len parameter to directly set the length
-  if you know it already or want to put \c nul characters in the text.
-
-  \param [in] str the new text 
-  \param [in] len the length of the new text
-  \return non-zero if the new value is different than the current one
-*/
-int Fl_Input_::static_value(const char* str, int len) {
-  clear_changed();
-  if (undowidget == this) undowidget = 0;
-  if (str == value_ && len == size_) return 0;
-  if (len) { // non-empty new value:
-    if (xscroll_ || yscroll_) {
-      xscroll_ = yscroll_ = 0;
-      minimal_update(0);
-    } else {
-      int i = 0;
-      // find first different character:
-      if (value_) {
-	for (; i<size_ && i<len && str[i]==value_[i]; i++) {/*empty*/}
-	if (i==size_ && i==len) return 0;
-      }
-      minimal_update(i);
-    }
-    value_ = str;
-    size_ = len;
-  } else { // empty new value:
-    if (!size_) return 0; // both old and new are empty.
-    size_ = 0;
-    value_ = "";
-    xscroll_ = yscroll_ = 0;
-    minimal_update(0);
-  }
-  position(readonly() ? 0 : size());
-  return 1;
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the point to 
-  the end of it. The string is \e not copied. If the user edits the
-  string it is copied to the internal buffer then. This can save a
-  great deal of time and memory if your program is rapidly
-  changing the values of text fields, but this will only work if
-  the passed string remains unchanged until either the
-  Fl_Input is destroyed or value() is called again.
-
-  \param [in] str the new text 
-  \return non-zero if the new value is different than the current one
-*/
-int Fl_Input_::static_value(const char* str) {
-  return static_value(str, str ? (int) strlen(str) : 0);
-}
-
-/**
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the
-  point to the end of it. The string is copied to the internal
-  buffer. Passing \c NULL is the same as "". 
-
-  You can use the \p length parameter to directly set the length
-  if you know it already or want to put \c nul characters in the text.
-
-  \param [in] str the new text 
-  \param [in] len the length of the new text
-  \return non-zero if the new value is different than the current one
-  \see Fl_Input_::value(const char* str), Fl_Input_::value()
-*/
-int Fl_Input_::value(const char* str, int len) {
-  int r = static_value(str, len);
-  if (len) put_in_buffer(len);
-  return r;
-}
-
-/** 
-  Changes the widget text.
-
-  This function changes the text and sets the mark and the
-  point to the end of it. The string is copied to the internal
-  buffer. Passing \c NULL is the same as \c "". 
-
-  \param [in] str the new text 
-  \return non-zero if the new value is different than the current one
-  \see Fl_Input_::value(const char* str, int len), Fl_Input_::value()
-*/
-int Fl_Input_::value(const char* str) {
-  return value(str, str ? (int) strlen(str) : 0);
-}
-
-/**
-  Changes the size of the widget.
-  This call updates the text layout so that the cursor is visible.
-  \param [in] X, Y, W, H new size of the widget
-  \see Fl_Widget::resize(int, int, int, int)
-*/
-void Fl_Input_::resize(int X, int Y, int W, int H) {
-  if (W != w()) xscroll_ = 0;
-  if (H != h()) yscroll_ = 0;
-  Fl_Widget::resize(X, Y, W, H);
-}
-
-/**
-  Destroys the widget.
-
-  The destructor clears all allocated buffers and removes the widget
-  from the parent Fl_Group.
-*/
-Fl_Input_::~Fl_Input_() {
-  if (undowidget == this) undowidget = 0;
-  if (bufsize) free((void*)buffer);
-}
-
-/** \internal
-  Returns the number of lines displayed on a single page.
-  \return widget height divided by the font height
-*/
-int Fl_Input_::linesPerPage() {
-  int n = 1;
-  if (input_type() == FL_MULTILINE_INPUT) {
-    fl_font(textfont(),textsize()); //ensure current font is set to ours
-    n = h()/fl_height(); // number of lines to scroll
-    if (n<=0) n = 1;
-  }
-  return n;
-}
-
-/**
-  Returns the character at index \p i.
-
-  This function returns the UTF-8 character at \p i 
-  as a ucs4 character code.
-
-  \param [in] i index into the value field
-  \return the character at index \p i
-*/
-unsigned int Fl_Input_::index(int i) const 
-{
-  int len = 0;
-  return fl_utf8decode(value_+i, value_+size_, &len);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_JPEG_Image.cxx
+++ /dev/null
@@ -1,391 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_JPEG_Image routines.
-//
-// Copyright 1997-2011 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_JPEG_Image::Fl_JPEG_Image() - Load a JPEG image file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_JPEG_Image.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/fl_utf8.h>
-#include <FL/Fl.H>
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <setjmp.h>
-
-
-// Some releases of the Cygwin JPEG libraries don't have a correctly
-// updated header file for the INT32 data type; the following define
-// from Shane Hill seems to be a usable workaround...
-
-#if defined(WIN32) && defined(__CYGWIN__)
-#  define XMD_H
-#endif // WIN32 && __CYGWIN__
-
-
-extern "C"
-{
-#ifdef HAVE_LIBJPEG
-#  include <jpeglib.h>
-#endif // HAVE_LIBJPEG
-}
-
-
-//
-// Custom JPEG error handling structure...
-//
-
-#ifdef HAVE_LIBJPEG
-struct fl_jpeg_error_mgr {
-  jpeg_error_mgr	pub_;		// Destination manager...
-  jmp_buf		errhand_;	// Error handler
-};
-#endif // HAVE_LIBJPEG
-
-
-//
-// Error handler for JPEG files...
-//
-
-#ifdef HAVE_LIBJPEG
-extern "C" {
-  static void
-  fl_jpeg_error_handler(j_common_ptr dinfo) {	// I - Decompressor info
-    longjmp(((fl_jpeg_error_mgr *)(dinfo->err))->errhand_, 1);
-  }
-
-  static void
-  fl_jpeg_output_handler(j_common_ptr) {	// I - Decompressor info (not used)
-  }
-}
-#endif // HAVE_LIBJPEG
-
-
-/**
- \brief The constructor loads the JPEG image from the given jpeg filename.
- 
- The inherited destructor frees all memory and server resources that are used 
- by the image.
- 
- Use Fl_Image::fail() to check if Fl_JPEG_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- JPEG format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason. If the image has loaded correctly,
- w(), h(), and d() should return values greater than zero.
- 
- \param[in] filename a full path and name pointing to a valid jpeg file.
- */
-Fl_JPEG_Image::Fl_JPEG_Image(const char *filename)	// I - File to load
-: Fl_RGB_Image(0,0,0) {
-#ifdef HAVE_LIBJPEG
-  FILE				*fp;	// File pointer
-  jpeg_decompress_struct	dinfo;	// Decompressor info
-  fl_jpeg_error_mgr		jerr;	// Error handler info
-  JSAMPROW			row;	// Sample row pointer
-  
-  // the following variables are pointers allocating some private space that
-  // is not reset by 'setjmp()'
-  char* max_finish_decompress_err;      // count errors and give up afer a while
-  char* max_destroy_decompress_err;     // to avoid recusion and deadlock
-  
-  // Clear data...
-  alloc_array = 0;
-  array = (uchar *)0;
-  
-  // Open the image file...
-  if ((fp = fl_fopen(filename, "rb")) == NULL) {
-    ld(ERR_FILE_ACCESS);
-    return;
-  }
-  
-  // Setup the decompressor info and read the header...
-  dinfo.err                = jpeg_std_error((jpeg_error_mgr *)&jerr);
-  jerr.pub_.error_exit     = fl_jpeg_error_handler;
-  jerr.pub_.output_message = fl_jpeg_output_handler;
-  
-  // Setup error loop variables
-  max_finish_decompress_err = (char*)malloc(1);   // allocate space on the frame for error counters
-  max_destroy_decompress_err = (char*)malloc(1);  // otherwise, the variables are reset on the longjmp
-  *max_finish_decompress_err=10;
-  *max_destroy_decompress_err=10;
-  
-  if (setjmp(jerr.errhand_))
-  {
-    // JPEG error handling...
-    Fl::warning("JPEG file \"%s\" is too large or contains errors!\n", filename);
-    // if any of the cleanup routines hits another error, we would end up 
-    // in a loop. So instead, we decrement max_err for some upper cleanup limit.
-    if ( ((*max_finish_decompress_err)-- > 0) && array)
-      jpeg_finish_decompress(&dinfo);
-    if ( (*max_destroy_decompress_err)-- > 0)
-      jpeg_destroy_decompress(&dinfo);
-    
-    fclose(fp);
-    
-    w(0);
-    h(0);
-    d(0);
-    
-    if (array) {
-      delete[] (uchar *)array;
-      array = 0;
-      alloc_array = 0;
-    }
-    
-    free(max_destroy_decompress_err);
-    free(max_finish_decompress_err);
-    
-    ld(ERR_FORMAT);
-    return;
-  }
-  
-  jpeg_create_decompress(&dinfo);
-  jpeg_stdio_src(&dinfo, fp);
-  jpeg_read_header(&dinfo, TRUE);
-  
-  dinfo.quantize_colors      = (boolean)FALSE;
-  dinfo.out_color_space      = JCS_RGB;
-  dinfo.out_color_components = 3;
-  dinfo.output_components    = 3;
-  
-  jpeg_calc_output_dimensions(&dinfo);
-  
-  w(dinfo.output_width); 
-  h(dinfo.output_height);
-  d(dinfo.output_components);
-  
-  if (((size_t)w()) * h() * d() > max_size() ) longjmp(jerr.errhand_, 1);
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-  
-  jpeg_start_decompress(&dinfo);
-  
-  while (dinfo.output_scanline < dinfo.output_height) {
-    row = (JSAMPROW)(array +
-                     dinfo.output_scanline * dinfo.output_width *
-                     dinfo.output_components);
-    jpeg_read_scanlines(&dinfo, &row, (JDIMENSION)1);
-  }
-  
-  jpeg_finish_decompress(&dinfo);
-  jpeg_destroy_decompress(&dinfo);
-  
-  free(max_destroy_decompress_err);
-  free(max_finish_decompress_err);
-  
-  fclose(fp);
-#endif // HAVE_LIBJPEG
-}
-
-
-// data source manager for reading jpegs from memory
-// init_source (j_decompress_ptr cinfo)
-// fill_input_buffer (j_decompress_ptr cinfo)
-// skip_input_data (j_decompress_ptr cinfo, long num_bytes)
-// resync_to_restart (j_decompress_ptr cinfo, int desired)
-// term_source (j_decompress_ptr cinfo)
-//         JOCTET * next_output_byte;  /* => next byte to write in buffer */
-//         size_t free_in_buffer;      /* # of byte spaces remaining in buffer */
-
-#ifdef HAVE_LIBJPEG
-typedef struct {
-  struct jpeg_source_mgr pub;
-  const unsigned char *data, *s;
-  // JOCTET * buffer;              /* start of buffer */
-  // boolean start_of_file;        /* have we gotten any data yet? */
-} my_source_mgr;
-
-typedef my_source_mgr *my_src_ptr;
-
-
-extern "C" {
-
-  static void init_source(j_decompress_ptr cinfo) {
-    my_src_ptr src = (my_src_ptr)cinfo->src;
-    src->s = src->data;
-  }
-
-  static boolean fill_input_buffer(j_decompress_ptr cinfo) {
-    my_src_ptr src = (my_src_ptr)cinfo->src;
-    size_t nbytes = 4096;
-    src->pub.next_input_byte = src->s;
-    src->pub.bytes_in_buffer = nbytes;
-    src->s += nbytes;
-    return TRUE;
-  }
-
-  static void term_source(j_decompress_ptr cinfo)
-  {
-  }
-
-  static void skip_input_data(j_decompress_ptr cinfo, long num_bytes) {
-    my_src_ptr src = (my_src_ptr)cinfo->src;
-    if (num_bytes > 0) {
-      while (num_bytes > (long)src->pub.bytes_in_buffer) {
-        num_bytes -= (long)src->pub.bytes_in_buffer;
-        fill_input_buffer(cinfo);
-      }
-      src->pub.next_input_byte += (size_t) num_bytes;
-      src->pub.bytes_in_buffer -= (size_t) num_bytes;
-    }
-  }
-
-} // extern "C"
-
-static void jpeg_mem_src(j_decompress_ptr cinfo, const unsigned char *data)
-{
-  my_src_ptr src;
-  cinfo->src = (struct jpeg_source_mgr *)malloc(sizeof(my_source_mgr));
-  src = (my_src_ptr)cinfo->src;
-  src->pub.init_source = init_source;
-  src->pub.fill_input_buffer = fill_input_buffer;
-  src->pub.skip_input_data = skip_input_data;
-  src->pub.resync_to_restart = jpeg_resync_to_restart;
-  src->pub.term_source = term_source;
-  src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
-  src->pub.next_input_byte = NULL; /* until buffer loaded */
-  src->data = data;
-  src->s = data;
-}
-#endif // HAVE_LIBJPEG
-
-
-/**
- \brief The constructor loads the JPEG image from memory.
-
- Construct an image from a block of memory inside the application. Fluid offers
- "binary Data" chunks as a great way to add image data into the C++ source code.
- name_png can be NULL. If a name is given, the image is added to the list of 
- shared images (see: Fl_Shared_Image) and will be available by that name.
-
- The inherited destructor frees all memory and server resources that are used 
- by the image.
-
- Use Fl_Image::fail() to check if Fl_JPEG_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- JPEG format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason. If the image has loaded correctly,
- w(), h(), and d() should return values greater than zero.
-
- \param name A unique name or NULL
- \param data A pointer to the memory location of the JPEG image
- */
-Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
-: Fl_RGB_Image(0,0,0) {
-#ifdef HAVE_LIBJPEG
-  jpeg_decompress_struct	dinfo;	// Decompressor info
-  fl_jpeg_error_mgr		jerr;	// Error handler info
-  JSAMPROW			row;	// Sample row pointer
-  
-  // the following variables are pointers allocating some private space that
-  // is not reset by 'setjmp()'
-  char* max_finish_decompress_err;      // count errors and give up afer a while
-  char* max_destroy_decompress_err;     // to avoid recusion and deadlock
-  
-  // Clear data...
-  alloc_array = 0;
-  array = (uchar *)0;
-  
-  // Setup the decompressor info and read the header...
-  dinfo.err                = jpeg_std_error((jpeg_error_mgr *)&jerr);
-  jerr.pub_.error_exit     = fl_jpeg_error_handler;
-  jerr.pub_.output_message = fl_jpeg_output_handler;
-  
-  // Setup error loop variables
-  max_finish_decompress_err = (char*)malloc(1);   // allocate space on the frame for error counters
-  max_destroy_decompress_err = (char*)malloc(1);  // otherwise, the variables are reset on the longjmp
-  *max_finish_decompress_err=10;
-  *max_destroy_decompress_err=10;
-  
-  if (setjmp(jerr.errhand_))
-  {
-    // JPEG error handling...
-    Fl::warning("JPEG data is too large or contains errors!\n");
-    // if any of the cleanup routines hits another error, we would end up 
-    // in a loop. So instead, we decrement max_err for some upper cleanup limit.
-    if ( ((*max_finish_decompress_err)-- > 0) && array)
-      jpeg_finish_decompress(&dinfo);
-    if ( (*max_destroy_decompress_err)-- > 0)
-      jpeg_destroy_decompress(&dinfo);
-    
-    w(0);
-    h(0);
-    d(0);
-    
-    if (array) {
-      delete[] (uchar *)array;
-      array = 0;
-      alloc_array = 0;
-    }
-    
-    free(max_destroy_decompress_err);
-    free(max_finish_decompress_err);
-    
-    return;
-  }
-  
-  jpeg_create_decompress(&dinfo);
-  jpeg_mem_src(&dinfo, data);
-  jpeg_read_header(&dinfo, TRUE);
-  
-  dinfo.quantize_colors      = (boolean)FALSE;
-  dinfo.out_color_space      = JCS_RGB;
-  dinfo.out_color_components = 3;
-  dinfo.output_components    = 3;
-  
-  jpeg_calc_output_dimensions(&dinfo);
-  
-  w(dinfo.output_width); 
-  h(dinfo.output_height);
-  d(dinfo.output_components);
-  
-  if (((size_t)w()) * h() * d() > max_size() ) longjmp(jerr.errhand_, 1);
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-  
-  jpeg_start_decompress(&dinfo);
-  
-  while (dinfo.output_scanline < dinfo.output_height) {
-    row = (JSAMPROW)(array +
-                     dinfo.output_scanline * dinfo.output_width *
-                     dinfo.output_components);
-    jpeg_read_scanlines(&dinfo, &row, (JDIMENSION)1);
-  }
-  
-  jpeg_finish_decompress(&dinfo);
-  jpeg_destroy_decompress(&dinfo);
-  
-  free(max_destroy_decompress_err);
-  free(max_finish_decompress_err);
-
-  if (w() && h() && name) {
-    Fl_Shared_Image *si = new Fl_Shared_Image(name, this);
-    si->add();
-  }
-#endif // HAVE_LIBJPEG
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Light_Button.cxx
+++ /dev/null
@@ -1,173 +1,0 @@
-//
-// "$Id$"
-//
-// Lighted button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Subclass of Fl_Button where the "box" indicates whether it is
-// pushed or not, and the "down box" is drawn small and square on
-// the left to indicate the current state.
-
-// The default down_box of zero draws a rectangle designed to look
-// just like Flame's buttons.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Radio_Light_Button.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-void Fl_Light_Button::draw() {
-  if (box()) draw_box(this==Fl::pushed() ? fl_down(box()) : box(), color());
-  Fl_Color col = value() ? (active_r() ? selection_color() :
-                            fl_inactive(selection_color())) : color();
-
-  int W  = labelsize();
-  int bx = Fl::box_dx(box());	// box frame width
-  int dx = bx + 2;		// relative position of check mark etc.
-  int dy = (h() - W) / 2;	// neg. offset o.k. for vertical centering
-  int lx = 0;			// relative label position (STR #3237)
-
-  if (down_box()) {
-    // draw other down_box() styles:
-    switch (down_box()) {
-      case FL_DOWN_BOX :
-      case FL_UP_BOX :
-      case _FL_PLASTIC_DOWN_BOX :
-      case _FL_PLASTIC_UP_BOX :
-        // Check box...
-        draw_box(down_box(), x()+dx, y()+dy, W, W, FL_BACKGROUND2_COLOR);
-	if (value()) {
-	  if (Fl::is_scheme("gtk+")) {
-	    fl_color(FL_SELECTION_COLOR);
-	  } else {
-	    fl_color(col);
-	  }
-	  int tx = x() + dx + 3;
-	  int tw = W - 6;
-	  int d1 = tw/3;
-	  int d2 = tw-d1;
-	  int ty = y() + dy + (W+d2)/2-d1-2;
-	  for (int n = 0; n < 3; n++, ty++) {
-	    fl_line(tx, ty, tx+d1, ty+d1);
-	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	  }
-	}
-        break;
-      case _FL_ROUND_DOWN_BOX :
-      case _FL_ROUND_UP_BOX :
-        // Radio button...
-        draw_box(down_box(), x()+dx, y()+dy, W, W, FL_BACKGROUND2_COLOR);
-	if (value()) {
-	  int tW = (W - Fl::box_dw(down_box())) / 2 + 1;
-	  if ((W - tW) & 1) tW++; // Make sure difference is even to center
-	  int tdx = dx + (W - tW) / 2;
-	  int tdy = dy + (W - tW) / 2;
-
-	  if (Fl::is_scheme("gtk+")) {
-	    fl_color(FL_SELECTION_COLOR);
-	    tW --;
-	    fl_pie(x() + tdx - 1, y() + tdy - 1, tW + 3, tW + 3, 0.0, 360.0);
-	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
-	  } else fl_color(col);
-
-	  switch (tW) {
-	    // Larger circles draw fine...
-	    default :
-              fl_pie(x() + tdx, y() + tdy, tW, tW, 0.0, 360.0);
-	      break;
-
-            // Small circles don't draw well on many systems...
-	    case 6 :
-	      fl_rectf(x() + tdx + 2, y() + tdy, tW - 4, tW);
-	      fl_rectf(x() + tdx + 1, y() + tdy + 1, tW - 2, tW - 2);
-	      fl_rectf(x() + tdx, y() + tdy + 2, tW, tW - 4);
-	      break;
-
-	    case 5 :
-	    case 4 :
-	    case 3 :
-	      fl_rectf(x() + tdx + 1, y() + tdy, tW - 2, tW);
-	      fl_rectf(x() + tdx, y() + tdy + 1, tW, tW - 2);
-	      break;
-
-	    case 2 :
-	    case 1 :
-	      fl_rectf(x() + tdx, y() + tdy, tW, tW);
-	      break;
-	  }
-
-	  if (Fl::is_scheme("gtk+")) {
-	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.5));
-	    fl_arc(x() + tdx, y() + tdy, tW + 1, tW + 1, 60.0, 180.0);
-	  }
-	}
-        break;
-      default :
-        draw_box(down_box(), x()+dx, y()+dy, W, W, col);
-        break;
-    }
-    lx = dx + W + 2;
-  } else {
-    // if down_box() is zero, draw light button style:
-    int hh = h()-2*dy - 2;
-    int ww = W/2+1;
-    int xx = dx;
-    if (w()<ww+2*xx) xx = (w()-ww)/2;
-    if (Fl::is_scheme("plastic")) {
-      col = active_r() ? selection_color() : fl_inactive(selection_color());
-      fl_color(value() ? col : fl_color_average(col, FL_BLACK, 0.5f));
-      fl_pie(x()+xx, y()+dy+1, ww, hh, 0, 360);
-    } else {
-      draw_box(FL_THIN_DOWN_BOX, x()+xx, y()+dy+1, ww, hh, col);
-    }
-    lx = dx + ww + 2;
-  }
-  draw_label(x()+lx, y(), w()-lx-bx, h());
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Light_Button::handle(int event) {
-  switch (event) {
-  case FL_RELEASE:
-    if (box()) redraw();
-  default:
-    return Fl_Button::handle(event);
-  }
-}
-
-/**
-  Creates a new Fl_Light_Button widget using the given
-  position, size, and label string.
-  <P>The destructor deletes the check button.
-*/
-Fl_Light_Button::Fl_Light_Button(int X, int Y, int W, int H, const char* l)
-: Fl_Button(X, Y, W, H, l) {
-  type(FL_TOGGLE_BUTTON);
-  selection_color(FL_YELLOW);
-  align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-}
-
-
-Fl_Radio_Light_Button::Fl_Radio_Light_Button(int X,int Y,int W,int H,const char *l)
-: Fl_Light_Button(X,Y,W,H,l) 
-{
-  type(FL_RADIO_BUTTON);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu.cxx
+++ /dev/null
@@ -1,1088 +1,0 @@
-//
-// "$Id$"
-//
-// Menu code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Warning: this menu code is quite a mess!
-
-// This file contains code for implementing Fl_Menu_Item, and for
-// methods for bringing up popup menu hierarchies without using the
-// Fl_Menu_ widget.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Window.H>
-#include <FL/Fl_Menu_.H>
-#include <FL/fl_draw.H>
-#include <stdio.h>
-#include "flstring.h"
-
-/** Size of the menu starting from this menu item.
-
-  This method counts all menu items starting with \p this menu item,
-  including all menu items in the same (sub)menu level, all nested
-  submenus, \b and the terminating empty (0) menu item.
-
-  It does \b not count menu items referred to by FL_SUBMENU_POINTER
-  menu items (except the single menu item with FL_SUBMENU_POINTER).
-
-  All menu items counted are consecutive in memory (one array).
-
-  Example:
-
-  \code
-    schemechoice = new Fl_Choice(X+125,Y,140,25,"FLTK Scheme");
-    schemechoice->add("none");
-    schemechoice->add("plastic");
-    schemechoice->add("gtk+");
-    schemechoice->add("gleam");
-    printf("schemechoice->menu()->size() = %d\n", schemechoice->menu()->size());
-  \endcode
-
-  Output:
-
-  schemechoice->menu()->%size() = 5
-*/
-int Fl_Menu_Item::size() const {
-  const Fl_Menu_Item* m = this;
-  int nest = 0;
-  for (;;) {
-    if (!m->text) {
-      if (!nest) return (int) (m-this+1);
-      nest--;
-    } else if (m->flags & FL_SUBMENU) {
-      nest++;
-    }
-    m++;
-  }
-}
-
-// Advance a pointer to next visible or invisible item of a menu array, 
-// skipping the contents of submenus.
-static const Fl_Menu_Item* next_visible_or_not(const Fl_Menu_Item* m) {
-  int nest = 0;
-  do {
-    if (!m->text) {
-      if (!nest) return m;
-      nest--;
-    } else if (m->flags&FL_SUBMENU) {
-      nest++;
-    }
-    m++;
-  }
-  while (nest);
-  return m;
-}
-
-/**
-  Advance a pointer by n items through a menu array, skipping
-  the contents of submenus and invisible items.  There are two calls so
-  that you can advance through const and non-const data.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::next(int n) const {
-  if (n < 0) return 0; // this is so selected==-1 returns NULL
-  const Fl_Menu_Item* m = this;
-  if (!m->visible()) n++;
-  while (n) {
-    m = next_visible_or_not(m);
-    if (m->visible() || !m->text) n--;
-  }
-  return m;
-}
-
-// appearance of current menus are pulled from this parent widget:
-static const Fl_Menu_* button=0;
-
-////////////////////////////////////////////////////////////////
-
-// tiny window for title of menu:
-class menutitle : public Fl_Menu_Window {
-  void draw();
-public:
-  const Fl_Menu_Item* menu;
-  menutitle(int X, int Y, int W, int H, const Fl_Menu_Item*);
-};
-
-// each vertical menu has one of these:
-class menuwindow : public Fl_Menu_Window {
-  void draw();
-  void drawentry(const Fl_Menu_Item*, int i, int erase);
-public:
-  menutitle* title;
-  int handle(int);
-#if defined (__APPLE__) || defined (USE_X11)
-  int early_hide_handle(int);
-#endif
-  int itemheight;	// zero == menubar
-  int numitems;
-  int selected;
-  int drawn_selected;	// last redraw has this selected
-  int shortcutWidth;
-  const Fl_Menu_Item* menu;
-  menuwindow(const Fl_Menu_Item* m, int X, int Y, int W, int H,
-	     const Fl_Menu_Item* picked, const Fl_Menu_Item* title,
-	     int menubar = 0, int menubar_title = 0, int right_edge = 0);
-  ~menuwindow();
-  void set_selected(int);
-  int find_selected(int mx, int my);
-  int titlex(int);
-  void autoscroll(int);
-  void position(int x, int y);
-  int is_inside(int x, int y);
-};
-
-#define LEADING 4 // extra vertical leading
-
-extern char fl_draw_shortcut;
-
-/** 
-  Measures width of label, including effect of & characters. 
-  Optionally, can get height if hp is not NULL. 
-*/
-int Fl_Menu_Item::measure(int* hp, const Fl_Menu_* m) const {
-  Fl_Label l;
-  l.value   = text;
-  l.image   = 0;
-  l.deimage = 0;
-  l.type    = labeltype_;
-  l.font    = labelsize_ || labelfont_ ? labelfont_ : (m ? m->textfont() : FL_HELVETICA);
-  l.size    = labelsize_ ? labelsize_ : m ? m->textsize() : FL_NORMAL_SIZE;
-  l.color   = FL_FOREGROUND_COLOR; // this makes no difference?
-  fl_draw_shortcut = 1;
-  int w = 0; int h = 0;
-  l.measure(w, hp ? *hp : h);
-  fl_draw_shortcut = 0;
-  if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) w += FL_NORMAL_SIZE;
-  return w;
-}
-
-/** Draws the menu item in bounding box x,y,w,h, optionally selects the item. */
-void Fl_Menu_Item::draw(int x, int y, int w, int h, const Fl_Menu_* m,
-			int selected) const {
-  Fl_Label l;
-  l.value   = text;
-  l.image   = 0;
-  l.deimage = 0;
-  l.type    = labeltype_;
-  l.font    = labelsize_ || labelfont_ ? labelfont_ : (m ? m->textfont() : FL_HELVETICA);
-  l.size    = labelsize_ ? labelsize_ : m ? m->textsize() : FL_NORMAL_SIZE;
-  l.color   = labelcolor_ ? labelcolor_ : m ? m->textcolor() : int(FL_FOREGROUND_COLOR);
-  if (!active()) l.color = fl_inactive((Fl_Color)l.color);
-  Fl_Color color = m ? m->color() : FL_GRAY;
-  if (selected) {
-    Fl_Color r = m ? m->selection_color() : FL_SELECTION_COLOR;
-    Fl_Boxtype b = m && m->down_box() ? m->down_box() : FL_FLAT_BOX;
-    if (fl_contrast(r,color)!=r) { // back compatibility boxtypes
-      if (selected == 2) { // menu title
-	r = color;
-	b = m ? m->box() : FL_UP_BOX;
-      } else {
-	r = (Fl_Color)(FL_COLOR_CUBE-1); // white
-	l.color = fl_contrast((Fl_Color)labelcolor_, r);
-      }
-    } else {
-      l.color = fl_contrast((Fl_Color)labelcolor_, r);
-    }
-    if (selected == 2) { // menu title
-      fl_draw_box(b, x, y, w, h, r);
-      x += 3;
-      w -= 8;
-    } else {
-      fl_draw_box(b, x+1, y-(LEADING-2)/2, w-2, h+(LEADING-2), r);
-    }
-  }
-
-  if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) {
-    int d = (h - FL_NORMAL_SIZE + 1) / 2;
-    int W = h - 2 * d;
-
-    if (flags & FL_MENU_RADIO) {
-      fl_draw_box(FL_ROUND_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
-      if (value()) {
-	int tW = (W - Fl::box_dw(FL_ROUND_DOWN_BOX)) / 2 + 1;
-	if ((W - tW) & 1) tW++;	// Make sure difference is even to center
-	int td = (W - tW) / 2;
-        if (Fl::is_scheme("gtk+")) {
-	  fl_color(FL_SELECTION_COLOR);
-	  tW --;
-	  fl_pie(x + td + 1, y + d + td - 1, tW + 3, tW + 3, 0.0, 360.0);
-	  fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
-	} else fl_color(labelcolor_);
-
-	switch (tW) {
-	  // Larger circles draw fine...
-	  default :
-            fl_pie(x + td + 2, y + d + td, tW, tW, 0.0, 360.0);
-	    break;
-
-          // Small circles don't draw well on many systems...
-	  case 6 :
-	    fl_rectf(x + td + 4, y + d + td, tW - 4, tW);
-	    fl_rectf(x + td + 3, y + d + td + 1, tW - 2, tW - 2);
-	    fl_rectf(x + td + 2, y + d + td + 2, tW, tW - 4);
-	    break;
-
-	  case 5 :
-	  case 4 :
-	  case 3 :
-	    fl_rectf(x + td + 3, y + d + td, tW - 2, tW);
-	    fl_rectf(x + td + 2, y + d + td + 1, tW, tW - 2);
-	    break;
-
-	  case 2 :
-	  case 1 :
-	    fl_rectf(x + td + 2, y + d + td, tW, tW);
-	    break;
-	}
-
-	if (Fl::is_scheme("gtk+")) {
-	  fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.5));
-	  fl_arc(x + td + 2, y + d + td, tW + 1, tW + 1, 60.0, 180.0);
-	}
-      }
-    } else {
-      fl_draw_box(FL_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
-      if (value()) {
-	if (Fl::is_scheme("gtk+")) {
-	  fl_color(FL_SELECTION_COLOR);
-	} else {
-	  fl_color(labelcolor_);
-	}
-	int tx = x + 5;
-	int tw = W - 6;
-	int d1 = tw/3;
-	int d2 = tw-d1;
-	int ty = y + d + (W+d2)/2-d1-2;
-	for (int n = 0; n < 3; n++, ty++) {
-	  fl_line(tx, ty, tx+d1, ty+d1);
-	  fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
-	}
-      }
-    }
-    x += W + 3;
-    w -= W + 3;
-  }
-
-  if (!fl_draw_shortcut) fl_draw_shortcut = 1;
-  l.draw(x+3, y, w>6 ? w-6 : 0, h, FL_ALIGN_LEFT);
-  fl_draw_shortcut = 0;
-}
-
-menutitle::menutitle(int X, int Y, int W, int H, const Fl_Menu_Item* L) :
-  Fl_Menu_Window(X, Y, W, H, 0) {
-  end();
-  set_modal();
-  clear_border();
-  set_menu_window();
-  menu = L;
-  if (L->labelcolor_ || Fl::scheme() || L->labeltype_ > FL_NO_LABEL) clear_overlay();
-}
-
-menuwindow::menuwindow(const Fl_Menu_Item* m, int X, int Y, int Wp, int Hp,
-		       const Fl_Menu_Item* picked, const Fl_Menu_Item* t, 
-		       int menubar, int menubar_title, int right_edge)
-  : Fl_Menu_Window(X, Y, Wp, Hp, 0)
-{
-  int scr_x, scr_y, scr_w, scr_h;
-  int tx = X, ty = Y;
-
-  Fl::screen_work_area(scr_x, scr_y, scr_w, scr_h);
-  if (!right_edge || right_edge > scr_x+scr_w) right_edge = scr_x+scr_w;
-
-  end();
-  set_modal();
-  clear_border();
-  set_menu_window();
-  menu = m;
-  if (m) m = m->first(); // find the first item that needs to be rendered
-  drawn_selected = -1;
-  if (button) {
-    box(button->box());
-    if (box() == FL_NO_BOX || box() == FL_FLAT_BOX) box(FL_UP_BOX);
-  } else {
-    box(FL_UP_BOX);
-  }
-  color(button && !Fl::scheme() ? button->color() : FL_GRAY);
-  selected = -1;
-  {
-    int j = 0;
-    if (m) for (const Fl_Menu_Item* m1=m; ; m1 = m1->next(), j++) {
-      if (picked) {
-        if (m1 == picked) {selected = j; picked = 0;}
-        else if (m1 > picked) {selected = j-1; picked = 0; Wp = Hp = 0;}
-    }
-    if (!m1->text) break;
-  }
-  numitems = j;}
-
-  if (menubar) {
-    itemheight = 0;
-    title = 0;
-    return;
-  }
-
-  itemheight = 1;
-
-  int hotKeysw = 0;
-  int hotModsw = 0;
-  int Wtitle = 0;
-  int Htitle = 0;
-  if (t) Wtitle = t->measure(&Htitle, button) + 12;
-  int W = 0;
-  if (m) for (; m->text; m = m->next()) {
-    int hh; 
-    int w1 = m->measure(&hh, button);
-    if (hh+LEADING>itemheight) itemheight = hh+LEADING;
-    if (m->flags&(FL_SUBMENU|FL_SUBMENU_POINTER)) 
-      w1 += FL_NORMAL_SIZE;
-    if (w1 > W) W = w1;
-    // calculate the maximum width of all shortcuts
-    if (m->shortcut_) {
-      // s is a pointer to the UTF-8 string for the entire shortcut
-      // k points only to the key part (minus the modifier keys)
-      const char *k, *s = fl_shortcut_label(m->shortcut_, &k);
-      if (fl_utf_nb_char((const unsigned char*)k, (int) strlen(k))<=4) {
-        // a regular shortcut has a right-justified modifier followed by a left-justified key
-        w1 = int(fl_width(s, (int) (k-s)));
-        if (w1 > hotModsw) hotModsw = w1;
-        w1 = int(fl_width(k))+4;
-        if (w1 > hotKeysw) hotKeysw = w1;
-      } else {
-        // a shortcut with a long modifier is right-justified to the menu
-        w1 = int(fl_width(s))+4;
-        if (w1 > (hotModsw+hotKeysw)) {
-          hotModsw = w1-hotKeysw;
-        }
-      }
-    }
-    if (m->labelcolor_ || Fl::scheme() || m->labeltype_ > FL_NO_LABEL) clear_overlay();
-  }
-  shortcutWidth = hotKeysw;
-  if (selected >= 0 && !Wp) X -= W/2;
-  int BW = Fl::box_dx(box());
-  W += hotKeysw+hotModsw+2*BW+7;
-  if (Wp > W) W = Wp;
-  if (Wtitle > W) W = Wtitle;
-
-  if (X < scr_x) X = scr_x; 
-  // this change improves popup submenu positioning at right screen edge, 
-  // but it makes right_edge argument useless
-  //if (X > scr_x+scr_w-W) X = right_edge-W;
-  if (X > scr_x+scr_w-W) X = scr_x+scr_w-W;
-  x(X); w(W);
-  h((numitems ? itemheight*numitems-LEADING : 0)+2*BW+3);
-  if (selected >= 0) {
-    Y = Y+(Hp-itemheight)/2-selected*itemheight-BW;
-  } else {
-    Y = Y+Hp;
-    // if the menu hits the bottom of the screen, we try to draw
-    // it above the menubar instead. We will not adjust any menu
-    // that has a selected item.
-    if (Y+h()>scr_y+scr_h && Y-h()>=scr_y) {
-      if (Hp>1) {
-        // if we know the height of the Fl_Menu_, use it
-        Y = Y-Hp-h();
-      } else if (t) {
-        // assume that the menubar item height relates to the first
-        // menuitem as well
-        Y = Y-itemheight-h()-Fl::box_dh(box());
-      } else {
-        // draw the menu to the right
-        Y = Y-h()+itemheight+Fl::box_dy(box());
-      }
-    }
-  }
-  if (m) y(Y); else {y(Y-2); w(1); h(1);}
-
-  if (t) {
-    if (menubar_title) {
-      int dy = Fl::box_dy(button->box())+1;
-      int ht = button->h()-dy*2;
-      title = new menutitle(tx, ty-ht-dy, Wtitle, ht, t);
-    } else {
-      int dy = 2;
-      int ht = Htitle+2*BW+3;
-      title = new menutitle(X, Y-ht-dy, Wtitle, ht, t);
-    }
-  } else {
-    title = 0;
-  }
-}
-
-menuwindow::~menuwindow() {
-  hide();
-  delete title;
-}
-
-void menuwindow::position(int X, int Y) {
-  if (title) {title->position(X, title->y()+Y-y());}
-  Fl_Menu_Window::position(X, Y);
-  // x(X); y(Y); // don't wait for response from X
-}
-
-// scroll so item i is visible on screen
-void menuwindow::autoscroll(int n) {
-  int scr_y, scr_h;
-  int Y = y()+Fl::box_dx(box())+2+n*itemheight;
-
-  int xx, ww;
-  Fl::screen_work_area(xx, scr_y, ww, scr_h);
-  if (Y <= scr_y) Y = scr_y-Y+10;
-  else {
-    Y = Y+itemheight-scr_h-scr_y;
-    if (Y < 0) return;
-    Y = -Y-10;
-  }
-  Fl_Menu_Window::position(x(), y()+Y);
-  // y(y()+Y); // don't wait for response from X
-}
-
-////////////////////////////////////////////////////////////////
-
-void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
-  if (!m) return; // this happens if -1 is selected item and redrawn
-
-  int BW = Fl::box_dx(box());
-  int xx = BW;
-  int W = w();
-  int ww = W-2*BW-1;
-  int yy = BW+1+n*itemheight;
-  int hh = itemheight - LEADING;
-
-  if (eraseit && n != selected) {
-    fl_push_clip(xx+1, yy-(LEADING-2)/2, ww-2, hh+(LEADING-2));
-    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
-    fl_pop_clip();
-  }
-
-  m->draw(xx, yy, ww, hh, button, n==selected);
-
-  // the shortcuts and arrows assume fl_color() was left set by draw():
-  if (m->submenu()) {
-    int sz = (hh-7)&-2;
-    int y1 = yy+(hh-sz)/2;
-    int x1 = xx+ww-sz-3;
-    fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
-  } else if (m->shortcut_) {
-    Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
-                    button ? button->textfont() : FL_HELVETICA;
-    fl_font(f, m->labelsize_ ? m->labelsize_ :
-                   button ? button->textsize() : FL_NORMAL_SIZE);
-    const char *k, *s = fl_shortcut_label(m->shortcut_, &k);
-    if (fl_utf_nb_char((const unsigned char*)k, (int) strlen(k))<=4) {
-      // right-align the modifiers and left-align the key
-      char *buf = (char*)malloc(k-s+1);
-      memcpy(buf, s, k-s); buf[k-s] = 0;
-      fl_draw(buf, xx, yy, ww-shortcutWidth, hh, FL_ALIGN_RIGHT);
-      fl_draw(  k, xx+ww-shortcutWidth, yy, shortcutWidth, hh, FL_ALIGN_LEFT);
-      free(buf);
-    } else {
-      // right-align to the menu
-      fl_draw(s, xx, yy, ww-4, hh, FL_ALIGN_RIGHT);
-    }
-  }
-
-  if (m->flags & FL_MENU_DIVIDER) {
-    fl_color(FL_DARK3);
-    fl_xyline(BW-1, yy+hh+(LEADING-2)/2, W-2*BW+2);
-    fl_color(FL_LIGHT3);
-    fl_xyline(BW-1, yy+hh+((LEADING-2)/2+1), W-2*BW+2);
-  }
-}
-
-void menutitle::draw() {
-  menu->draw(0, 0, w(), h(), button, 2);
-}
-
-void menuwindow::draw() {
-  if (damage() != FL_DAMAGE_CHILD) {	// complete redraw
-    fl_draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
-    if (menu) {
-      const Fl_Menu_Item* m; int j;
-      for (m=menu->first(), j=0; m->text; j++, m = m->next()) drawentry(m, j, 0);
-    }
-  } else {
-    if (damage() & FL_DAMAGE_CHILD && selected!=drawn_selected) { // change selection
-      drawentry(menu->next(drawn_selected), drawn_selected, 1);
-      drawentry(menu->next(selected), selected, 1);
-    }
-  }	    
-  drawn_selected = selected;
-}
-
-void menuwindow::set_selected(int n) {
-  if (n != selected) {selected = n; damage(FL_DAMAGE_CHILD);}
-}
-
-////////////////////////////////////////////////////////////////
-
-int menuwindow::find_selected(int mx, int my) {
-  if (!menu || !menu->text) return -1;
-  mx -= x();
-  my -= y();
-  if (my < 0 || my >= h()) return -1;
-  if (!itemheight) { // menubar
-    int xx = 3; int n = 0;
-    const Fl_Menu_Item* m = menu ? menu->first() : 0;
-    for (; ; m = m->next(), n++) {
-      if (!m->text) return -1;
-      xx += m->measure(0, button) + 16;
-      if (xx > mx) break;
-    }
-    return n;
-  }
-  if (mx < Fl::box_dx(box()) || mx >= w()) return -1;
-  int n = (my-Fl::box_dx(box())-1)/itemheight;
-  if (n < 0 || n>=numitems) return -1;
-  return n;
-}
-
-// return horizontal position for item n in a menubar:
-int menuwindow::titlex(int n) {
-  const Fl_Menu_Item* m;
-  int xx = 3;
-  for (m=menu->first(); n--; m = m->next()) xx += m->measure(0, button) + 16;
-  return xx;
-}
-
-// return 1, if the given root coordinates are inside the window
-int menuwindow::is_inside(int mx, int my) {
-  if ( mx < x_root() || mx >= x_root() + w() ||
-       my < y_root() || my >= y_root() + h()) {
-    return 0;
-  }
-  if (itemheight == 0 && find_selected(mx, my) == -1) {
-    // in the menubar but out from any menu header
-    return 0;
-    }
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-// Fl_Menu_Item::popup(...)
-
-// Because Fl::grab() is done, all events go to one of the menu windows.
-// But the handle method needs to look at all of them to find out
-// what item the user is pointing at.  And it needs a whole lot
-// of other state variables to determine what is going on with
-// the currently displayed menus.
-// So the main loop (handlemenu()) puts all the state in a structure
-// and puts a pointer to it in a static location, so the handle()
-// on menus can refer to it and alter it.  The handle() method
-// changes variables in this state to indicate what item is
-// picked, but does not actually alter the display, instead the
-// main loop does that.  This is because the X mapping and unmapping
-// of windows is slow, and we don't want to fall behind the events.
-
-// values for menustate.state:
-#define INITIAL_STATE 0	// no mouse up or down since popup() called
-#define PUSH_STATE 1	// mouse has been pushed on a normal item
-#define DONE_STATE 2	// exit the popup, the current item was picked
-#define MENU_PUSH_STATE 3 // mouse has been pushed on a menu title
-
-struct menustate {
-  const Fl_Menu_Item* current_item; // what mouse is pointing at
-  int menu_number; // which menu it is in
-  int item_number; // which item in that menu, -1 if none
-  menuwindow* p[20]; // pointers to menus
-  int nummenus;
-  int menubar; // if true p[0] is a menubar
-  int state;
-  menuwindow* fakemenu; // kludge for buttons in menubar
-  int is_inside(int mx, int my);
-};
-static menustate* p=0;
-
-// return 1 if the coordinates are inside any of the menuwindows
-int menustate::is_inside(int mx, int my) {
-  int i;
-  for (i=nummenus-1; i>=0; i--) {
-    if (p[i]->is_inside(mx, my))
-      return 1;
-  }
-  return 0;
-}
-
-static inline void setitem(const Fl_Menu_Item* i, int m, int n) {
-  p->current_item = i;
-  p->menu_number = m;
-  p->item_number = n;
-}
-
-static void setitem(int m, int n) {
-  menustate &pp = *p;
-  pp.current_item = (n >= 0) ? pp.p[m]->menu->next(n) : 0;
-  pp.menu_number = m;
-  pp.item_number = n;
-}
-
-static int forward(int menu) { // go to next item in menu menu if possible
-  menustate &pp = *p;
-  // Fl_Menu_Button can generate menu=-1. This line fixes it and selectes the first item.
-  if (menu==-1) 
-    menu = 0;
-  menuwindow &m = *(pp.p[menu]);
-  int item = (menu == pp.menu_number) ? pp.item_number : m.selected;
-  while (++item < m.numitems) {
-    const Fl_Menu_Item* m1 = m.menu->next(item);
-    if (m1->activevisible()) {setitem(m1, menu, item); return 1;}
-  }
-  return 0;
-}
-
-static int backward(int menu) { // previous item in menu menu if possible
-  menustate &pp = *p;
-  menuwindow &m = *(pp.p[menu]);
-  int item = (menu == pp.menu_number) ? pp.item_number : m.selected;
-  if (item < 0) item = m.numitems;
-  while (--item >= 0) {
-    const Fl_Menu_Item* m1 = m.menu->next(item);
-    if (m1->activevisible()) {setitem(m1, menu, item); return 1;}
-  }
-  return 0;
-}
-
-int menuwindow::handle(int e) {
-#if defined (__APPLE__) || defined (USE_X11)
-  // This off-route takes care of the "detached menu" bug on OS X.
-  // Apple event handler requires that we hide all menu windows right
-  // now, so that Carbon can continue undisturbed with handling window
-  // manager events, like dragging the application window.
-  int ret = early_hide_handle(e);
-  menustate &pp = *p;
-  if (pp.state == DONE_STATE) {
-    hide();
-    if (pp.fakemenu) {
-      pp.fakemenu->hide();
-      if (pp.fakemenu->title)
-        pp.fakemenu->title->hide();
-    }
-    int i = pp.nummenus;
-    while (i>0) {
-      menuwindow *mw = pp.p[--i];
-      if (mw) {
-        mw->hide();
-        if (mw->title) 
-          mw->title->hide();
-      }
-    }
-  }
-  return ret;
-}
-
-int menuwindow::early_hide_handle(int e) {
-#endif
-  menustate &pp = *p;
-  switch (e) {
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-    case FL_BackSpace:
-    BACKTAB:
-      if (!backward(pp.menu_number)) {pp.item_number = -1;backward(pp.menu_number);}
-      return 1;
-    case FL_Up:
-      if (pp.menubar && pp.menu_number == 0) {
-        // Do nothing...
-      } else if (backward(pp.menu_number)) {
-        // Do nothing...
-      } else if (pp.menubar && pp.menu_number==1) {
-        setitem(0, pp.p[0]->selected);
-      }
-      return 1;
-    case FL_Tab:
-      if (Fl::event_shift()) goto BACKTAB;
-    case FL_Down:
-      if (pp.menu_number || !pp.menubar) {
-        if (!forward(pp.menu_number) && Fl::event_key()==FL_Tab) {
-          pp.item_number = -1;
-          forward(pp.menu_number);
-        }
-      } else if (pp.menu_number < pp.nummenus-1) {
-        forward(pp.menu_number+1);
-      }
-      return 1;
-    case FL_Right:
-      if (pp.menubar && (pp.menu_number<=0 || (pp.menu_number==1 && pp.nummenus==2)))
-	forward(0);
-      else if (pp.menu_number < pp.nummenus-1) forward(pp.menu_number+1);
-      return 1;
-    case FL_Left:
-      if (pp.menubar && pp.menu_number<=1) backward(0);
-      else if (pp.menu_number>0)
-	setitem(pp.menu_number-1, pp.p[pp.menu_number-1]->selected);
-      return 1;
-    case FL_Enter:
-    case FL_KP_Enter:
-    case ' ':
-      pp.state = DONE_STATE;
-      return 1;
-    case FL_Escape:
-      setitem(0, -1, 0);
-      pp.state = DONE_STATE;
-      return 1;
-    }
-    break;
-  case FL_SHORTCUT: 
-    {
-      for (int mymenu = pp.nummenus; mymenu--;) {
-	menuwindow &mw = *(pp.p[mymenu]);
-	int item; const Fl_Menu_Item* m = mw.menu->find_shortcut(&item);
-	if (m) {
-	  setitem(m, mymenu, item);
-	  if (!m->submenu()) pp.state = DONE_STATE;
-	  return 1;
-	}
-      }
-    }
-    break;
-    case FL_MOVE:
-#if ! (defined(WIN32) || defined(__APPLE__))
-      if (pp.state == DONE_STATE) {
-	return 1; // Fix for STR #2619
-      }
-      /* FALLTHROUGH */
-#endif
-  case FL_ENTER:
-  case FL_PUSH:
-  case FL_DRAG:
-    {
-      int mx = Fl::event_x_root();
-      int my = Fl::event_y_root();
-      int item=0; int mymenu = pp.nummenus-1;
-      // Clicking or dragging outside menu cancels it...
-      if ((!pp.menubar || mymenu) && !pp.is_inside(mx, my)) {
-	setitem(0, -1, 0);
-	if (e==FL_PUSH)
-	  pp.state = DONE_STATE;
-	return 1;
-      }
-      for (mymenu = pp.nummenus-1; ; mymenu--) {
-	item = pp.p[mymenu]->find_selected(mx, my);
-	if (item >= 0) 
-	  break;
-	if (mymenu <= 0) {
-	  // buttons in menubars must be deselected if we move outside of them!
-	  if (pp.menu_number==-1 && e==FL_PUSH) {
-	    pp.state = DONE_STATE;
-	    return 1;
-	  }
-	  if (pp.current_item && pp.menu_number==0 && !pp.current_item->submenu()) {
-	    if (e==FL_PUSH)
-	      pp.state = DONE_STATE;
-	    setitem(0, -1, 0);
-	    return 1;
-	  }
-	  // all others can stay selected
-	  return 0;
-	}
-      }
-      if (my == 0 && item > 0) setitem(mymenu, item - 1);
-      else setitem(mymenu, item);
-      if (e == FL_PUSH) {
-	if (pp.current_item && pp.current_item->submenu() // this is a menu title
-	    && item != pp.p[mymenu]->selected // and it is not already on
-	    && !pp.current_item->callback_) // and it does not have a callback
-	  pp.state = MENU_PUSH_STATE;
-	else
-	  pp.state = PUSH_STATE;
-      }
-    }
-    return 1;
-  case FL_RELEASE:
-    // Mouse must either be held down/dragged some, or this must be
-    // the second click (not the one that popped up the menu):
-    if (   !Fl::event_is_click() 
-        || pp.state == PUSH_STATE 
-        || (pp.menubar && pp.current_item && !pp.current_item->submenu()) // button
-	) {
-#if 0 // makes the check/radio items leave the menu up
-      const Fl_Menu_Item* m = pp.current_item;
-      if (m && button && (m->flags & (FL_MENU_TOGGLE|FL_MENU_RADIO))) {
-	((Fl_Menu_*)button)->picked(m);
-	pp.p[pp.menu_number]->redraw();
-      } else
-#endif
-      // do nothing if they try to pick inactive items
-      if (!pp.current_item || pp.current_item->activevisible())
-	pp.state = DONE_STATE;
-    }
-    return 1;
-  }
-  return Fl_Window::handle(e);
-}
-
-/**
-  Pulldown() is similar to popup(), but a rectangle is
-  provided to position the menu.  The menu is made at least W
-  wide, and the picked item is centered over the rectangle
-  (like Fl_Choice uses).  If picked is zero or not
-  found, the menu is aligned just below the rectangle (like a pulldown
-  menu).
-  <P>The title and menubar arguments are used
-  internally by the Fl_Menu_Bar widget.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::pulldown(
-    int X, int Y, int W, int H,
-    const Fl_Menu_Item* initial_item,
-    const Fl_Menu_* pbutton,
-    const Fl_Menu_Item* t,
-    int menubar) const {
-  Fl_Group::current(0); // fix possible user error...
-
-  // track the Fl_Menu_ widget to make sure we notice if it gets
-  // deleted while the menu is open (STR #3503)
-  Fl_Widget_Tracker wp((Fl_Widget *)pbutton);
-
-  button = pbutton;
-  if (pbutton && pbutton->window()) {
-    for (Fl_Window* w = pbutton->window(); w; w = w->window()) {
-      X += w->x();
-      Y += w->y();
-    }
-  } else {
-    X += Fl::event_x_root()-Fl::event_x();
-    Y += Fl::event_y_root()-Fl::event_y();
-  }
-  menuwindow mw(this, X, Y, W, H, initial_item, t, menubar);
-  Fl::grab(mw);
-  menustate pp; p = &pp;
-  pp.p[0] = &mw;
-  pp.nummenus = 1;
-  pp.menubar = menubar;
-  pp.state = INITIAL_STATE;
-  pp.fakemenu = 0; // kludge for buttons in menubar
-
-  // preselected item, pop up submenus if necessary:
-  if (initial_item && mw.selected >= 0) {
-    setitem(0, mw.selected);
-    goto STARTUP;
-  }
-
-  pp.current_item = 0; pp.menu_number = 0; pp.item_number = -1;
-  if (menubar) {
-    // find the initial menu
-    if (!mw.handle(FL_DRAG)) {
-      Fl::grab(0);
-      return 0;
-    }
-  }
-  initial_item = pp.current_item;
-  if (initial_item) goto STARTUP;
-
-  // the main loop: runs until p.state goes to DONE_STATE or the menu
-  // widget is deleted (e.g. from a timer callback, see STR #3503):
-  for (;;) {
-
-    // make sure all the menus are shown:
-    {
-      for (int k = menubar; k < pp.nummenus; k++) {
-        if (!pp.p[k]->shown()) {
-	  if (pp.p[k]->title) pp.p[k]->title->show();
-	  pp.p[k]->show();
-        }
-      }
-    }
-
-    // get events:
-    {
-      const Fl_Menu_Item* oldi = pp.current_item;
-      Fl::wait();
-      if (pbutton && wp.deleted()) // menu widget has been deleted (STR #3503)
-	break;
-      if (pp.state == DONE_STATE) break; // done.
-      if (pp.current_item == oldi) continue;
-    }
-
-    // only do rest if item changes:
-    if(pp.fakemenu) {delete pp.fakemenu; pp.fakemenu = 0;} // turn off "menubar button"
-
-    if (!pp.current_item) { // pointing at nothing
-      // turn off selection in deepest menu, but don't erase other menus:
-      pp.p[pp.nummenus-1]->set_selected(-1);
-      continue;
-    }
-
-    if(pp.fakemenu) {delete pp.fakemenu; pp.fakemenu = 0;}
-    initial_item = 0; // stop the startup code
-    pp.p[pp.menu_number]->autoscroll(pp.item_number);
-
-  STARTUP:
-    menuwindow& cw = *pp.p[pp.menu_number];
-    const Fl_Menu_Item* m = pp.current_item;
-    if (!m->activevisible()) { // pointing at inactive item
-      cw.set_selected(-1);
-      initial_item = 0; // turn off startup code
-      continue;
-    }
-    cw.set_selected(pp.item_number);
-
-    if (m==initial_item) initial_item=0; // stop the startup code if item found
-    if (m->submenu()) {
-      const Fl_Menu_Item* title = m;
-      const Fl_Menu_Item* menutable;
-      if (m->flags&FL_SUBMENU) menutable = m+1;
-      else menutable = (Fl_Menu_Item*)(m)->user_data_;
-      // figure out where new menu goes:
-      int nX, nY;
-      if (!pp.menu_number && pp.menubar) {	// menu off a menubar:
-	nX = cw.x() + cw.titlex(pp.item_number);
-	nY = cw.y() + cw.h();
-	initial_item = 0;
-      } else {
-	nX = cw.x() + cw.w();
-	nY = cw.y() + pp.item_number * cw.itemheight;
-	title = 0;
-      }
-      if (initial_item) { // bring up submenu containing initial item:
-	menuwindow* n = new menuwindow(menutable,X,Y,W,H,initial_item,title,0,0,cw.x());
-	pp.p[pp.nummenus++] = n;
-	// move all earlier menus to line up with this new one:
-	if (n->selected>=0) {
-	  int dy = n->y()-nY;
-	  int dx = n->x()-nX;
-	  int waX, waY, waW, waH;
-	  Fl::screen_work_area(waX, waY, waW, waH, X, Y);
-	  for (int menu = 0; menu <= pp.menu_number; menu++) {
-	    menuwindow* tt = pp.p[menu];
-	    int nx = tt->x()+dx; if (nx < waX) {nx = waX; dx = -tt->x() + waX;}
-	    int ny = tt->y()+dy; if (ny < waY) {ny = waY; dy = -tt->y() + waY;}
-	    tt->position(nx, ny);
-	  }
-	  setitem(pp.nummenus-1, n->selected);
-	  goto STARTUP;
-	}
-      } else if (pp.nummenus > pp.menu_number+1 &&
-		 pp.p[pp.menu_number+1]->menu == menutable) {
-	// the menu is already up:
-	while (pp.nummenus > pp.menu_number+2) delete pp.p[--pp.nummenus];
-	pp.p[pp.nummenus-1]->set_selected(-1);
-      } else {
-	// delete all the old menus and create new one:
-	while (pp.nummenus > pp.menu_number+1) delete pp.p[--pp.nummenus];
-	pp.p[pp.nummenus++]= new menuwindow(menutable, nX, nY,
-					  title?1:0, 0, 0, title, 0, menubar, 
-					    (title ? 0 : cw.x()) );
-      }
-    } else { // !m->submenu():
-      while (pp.nummenus > pp.menu_number+1) delete pp.p[--pp.nummenus];
-      if (!pp.menu_number && pp.menubar) {
-	// kludge so "menubar buttons" turn "on" by using menu title:
-	pp.fakemenu = new menuwindow(0,
-				  cw.x()+cw.titlex(pp.item_number),
-				  cw.y()+cw.h(), 0, 0,
-				  0, m, 0, 1);
-	pp.fakemenu->title->show();
-      }
-    }
-  }
-  const Fl_Menu_Item* m = (pbutton && wp.deleted()) ? NULL : pp.current_item;
-  delete pp.fakemenu;
-  while (pp.nummenus>1) delete pp.p[--pp.nummenus];
-  mw.hide();
-  Fl::grab(0);
-  return m;
-}
-
-/**
-  This method is called by widgets that want to display menus.
-
-  The menu stays up until the user picks an item or dismisses it.
-  The selected item (or NULL if none) is returned. <I>This does not
-  do the callbacks or change the state of check or radio items.</I>
-
-  X,Y is the position of the mouse cursor, relative to the
-  window that got the most recent event (usually you can pass 
-  Fl::event_x() and Fl::event_y() unchanged here).
-
-  \p title is a character string title for the menu.  If
-  non-zero a small box appears above the menu with the title in it.
-
-  The menu is positioned so the cursor is centered over the item 
-  picked.  This will work even if \p picked is in a submenu.
-  If \p picked is zero or not in the menu item table the menu is
-  positioned with the cursor in the top-left corner.
-
-  \p button is a pointer to an Fl_Menu_ from which the color and
-  boxtypes for the menu are pulled.  If NULL then defaults are used.
-*/
-const Fl_Menu_Item* Fl_Menu_Item::popup(
-  int X, int Y,
-  const char* title,
-  const Fl_Menu_Item* picked,
-  const Fl_Menu_* button
-  ) const {
-  static Fl_Menu_Item dummy; // static so it is all zeros
-  dummy.text = title;
-  return pulldown(X, Y, 0, 0, picked, button, title ? &dummy : 0);
-}
-
-/**
-  Search only the top level menu for a shortcut.  
-  Either &x in the label or the shortcut fields are used.
-
-  This tests the current event, which must be an FL_KEYBOARD or 
-  FL_SHORTCUT, against a shortcut value.
-
-  \param ip returns the index of the item, if \p ip is not NULL.
-  \param require_alt if true: match only if Alt key is pressed.
-
-  \return found Fl_Menu_Item or NULL
-*/
-const Fl_Menu_Item* Fl_Menu_Item::find_shortcut(int* ip, const bool require_alt) const {
-  const Fl_Menu_Item* m = this;
-  if (m) for (int ii = 0; m->text; m = next_visible_or_not(m), ii++) {
-    if (m->active()) {
-      if (Fl::test_shortcut(m->shortcut_)
-	 || Fl_Widget::test_shortcut(m->text, require_alt)) {
-	if (ip) *ip=ii;
-	return m;
-      }
-    }
-  }
-  return 0;
-}
-
-// Recursive search of all submenus for anything with this key as a
-// shortcut.  Only uses the shortcut field, ignores &x in the labels:
-/**
-  This is designed to be called by a widgets handle() method in
-  response to a FL_SHORTCUT event.  If the current event matches
-  one of the items shortcut, that item is returned.  If the keystroke
-  does not match any shortcuts then NULL is returned.  This only
-  matches the shortcut() fields, not the letters in the title
-  preceeded by '
-*/
-const Fl_Menu_Item* Fl_Menu_Item::test_shortcut() const {
-  const Fl_Menu_Item* m = this;
-  const Fl_Menu_Item* ret = 0;
-  if (m) for (; m->text; m = next_visible_or_not(m)) {
-    if (m->active()) {
-      // return immediately any match of an item in top level menu:
-      if (Fl::test_shortcut(m->shortcut_)) return m;
-      // if (Fl_Widget::test_shortcut(m->text)) return m;
-      // only return matches from lower menu if nothing found in top menu:
-      if (!ret && m->submenu()) {
-	const Fl_Menu_Item* s =
-	  (m->flags&FL_SUBMENU) ? m+1:(const Fl_Menu_Item*)m->user_data_;
-	ret = s->test_shortcut();
-      }
-    }
-  }
-  return ret;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_.cxx
+++ /dev/null
@@ -1,514 +1,0 @@
-//
-// "$Id$"
-//
-// Common menu code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is a base class for all items that have a menu:
-//	Fl_Menu_Bar, Fl_Menu_Button, Fl_Choice
-// This provides storage for a menu item, functions to add/modify/delete
-// items, and a call for when the user picks a menu item.
-
-// More code in Fl_Menu_add.cxx
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-#define SAFE_STRCAT(s) { len += (int) strlen(s); if ( len >= namelen ) { *name='\0'; return(-2); } else strcat(name,(s)); }
-
-/** Get the menu 'pathname' for the specified menuitem.
-
-    If finditem==NULL, mvalue() is used (the most recently picked menuitem).
-
-    \b Example:
-    \code
-      Fl_Menu_Bar *menubar = 0;
-      void my_menu_callback(Fl_Widget*,void*) {
-        char name[80];
-        if ( menubar->item_pathname(name, sizeof(name)-1) == 0 ) {   // recently picked item
-          if ( strcmp(name, "File/&Open") == 0 ) { .. }              // open invoked
-          if ( strcmp(name, "File/&Save") == 0 ) { .. }              // save invoked
-          if ( strcmp(name, "Edit/&Copy") == 0 ) { .. }              // copy invoked
-        }
-      }
-      int main() {
-        [..]
-        menubar = new Fl_Menu_Bar(..);
-        menubar->add("File/&Open",  0, my_menu_callback);
-        menubar->add("File/&Save",  0, my_menu_callback);
-        menubar->add("Edit/&Copy",  0, my_menu_callback);
-        [..]
-      }
-    \endcode
-
-    \returns
-	-   0 : OK (name has menuitem's pathname)
-	-  -1 : item not found (name="")
-	-  -2 : 'name' not large enough (name="")
-    \see find_item()
-*/
-int Fl_Menu_::item_pathname(char *name, int namelen, const Fl_Menu_Item *finditem) const {
-  name[0] = '\0';
-  return item_pathname_(name, namelen, finditem, menu_);
-}
-
-// INTERNAL: Descend into a specific menu hierarchy
-int Fl_Menu_::item_pathname_(char *name, 
-			     int namelen,
-			     const Fl_Menu_Item *finditem,
-			     const Fl_Menu_Item *menu) const {
-  int len = 0;
-  int level = 0;
-  finditem = finditem ? finditem : mvalue();    
-  menu = menu ? menu : this->menu();
-  for ( int t=0; t<size(); t++ ) {
-    const Fl_Menu_Item *m = menu + t;
-    if (m->submenu()) {				// submenu? descend
-      if (m->flags & FL_SUBMENU_POINTER) {
-        // SUBMENU POINTER? Recurse to descend
-        int slen = strlen(name);
-	const Fl_Menu_Item *submenu = (const Fl_Menu_Item*)m->user_data();
-        if (m->label()) {
-          if (*name) SAFE_STRCAT("/");
-	  SAFE_STRCAT(m->label());
-        }
-        if (item_pathname_(name, len, finditem, submenu) == 0)
-	  return 0;
-	name[slen] = 0;				// continue from where we were
-      } else {
-        // REGULAR SUBMENU? DESCEND
-	++level;
-        if (*name) SAFE_STRCAT("/");
-        if (m->label()) SAFE_STRCAT(m->label());
-        if (m == finditem) return(0);		// found? done.
-      }
-    } else {
-      if (m->label()) {				// menu item?
-	if ( m == finditem ) {			// found? tack on itemname, done.
-	  SAFE_STRCAT("/");
-	  SAFE_STRCAT(m->label());
-	  return(0);
-	}
-      } else {					// end of submenu? pop
-        if ( --level < 0 ) {
-	  *name = '\0';
-	  return -1;
-	}
-	char *ss = strrchr(name, '/');
-	if ( ss ) { *ss = 0; len = (int) strlen(name); }	// "File/Edit" -> "File"
-	else { name[0] = '\0'; len = 0; }	// "File" -> ""
-	continue;
-      }
-    }
-  }
-  *name = '\0';
-  return(-1);					// item not found
-}
-
-/**
- Find the menu item for a given menu \p pathname, such as "Edit/Copy".
- 
- This method finds a menu item in the menu array, also traversing submenus, but
- not submenu pointers (FL_SUBMENU_POINTER).
-
- To get the menu item's index, use find_index(const char*)
-
-  \b Example:
-  \code
-    Fl_Menu_Bar *menubar = new Fl_Menu_Bar(..);
-    menubar->add("File/&Open");
-    menubar->add("File/&Save");
-    menubar->add("Edit/&Copy");
-    // [..]
-    Fl_Menu_Item *item;
-    if ( ( item = (Fl_Menu_Item*)menubar->find_item("File/&Open") ) != NULL ) {
-	item->labelcolor(FL_RED);
-    }
-    if ( ( item = (Fl_Menu_Item*)menubar->find_item("Edit/&Copy") ) != NULL ) {
-	item->labelcolor(FL_GREEN);
-    }
-  \endcode
-
-  \param pathname The path and name of the menu item
-  \returns The item found, or NULL if not found
-  \see find_index(const char*), find_item(Fl_Callback*), item_pathname() 
-*/
-const Fl_Menu_Item * Fl_Menu_::find_item(const char *pathname) {
-  int i = find_index(pathname);
-  return( (i==-1) ? 0 : (const Fl_Menu_Item*)(menu_+i));
-}
-
-/**
- Find the index into the menu array for a given \p item.
-
- A way to convert a menu item pointer into an index.
-
- Does \b not handle items that are in submenu pointers (FL_SUBMENU_POINTER).
-
- -1 is returned if the item is not in this menu
- or is part of an FL_SUBMENU_POINTER submenu.
-
- Current implementation is fast and not expensive.
-
- \code
-   // Convert an index-to-item
-   int index = 12;
-   const Fl_Menu_Item *item = mymenu->menu() + index;
-
-   // Convert an item-to-index
-   int index = mymenu->find_index(item);
-   if ( index == -1 ) { ..error.. }
- \endcode
-
- \param[in]  item  The item to be found
- \returns    The index of the item, or -1 if not found.
- \see        menu()
-*/
-int Fl_Menu_::find_index(const Fl_Menu_Item *item) const {
-  Fl_Menu_Item *max = menu_+size();
-  if (item<menu_ || item>=max) return(-1);
-  return (int) (item-menu_);
-}
-
-/**
- Find the index into the menu array for a given callback \p cb.
- 
- This method finds a menu item's index position, also traversing submenus, but
- \b not submenu pointers (FL_SUBMENU_POINTER). This is useful if an
- application uses internationalisation and a menu item can not be found
- using its label. This search is also much faster.
-
- \param cb Find the first item with this callback
- \returns  The index of the item with the specific callback, or -1 if not found
- \see      find_index(const char*)
- */
-int Fl_Menu_::find_index(Fl_Callback *cb) const {
-  for ( int t=0; t < size(); t++ )
-    if (menu_[t].callback_==cb)
-      return(t);
-  return(-1);
-}
-
-/**
- Find the menu item index for a given menu \p pathname, such as "Edit/Copy".
- 
- This method finds a menu item's index position for the given menu pathname,
- also traversing submenus, but \b not submenu pointers (FL_SUBMENU_POINTER).
-
- To get the menu item pointer for a pathname, use find_item()
-
- \param[in] pathname The path and name of the menu item to find
- \returns        The index of the matching item, or -1 if not found.
- \see            item_pathname()
-
-*/
-int Fl_Menu_::find_index(const char *pathname) const {
-  char menupath[1024] = "";	// File/Export
-  for ( int t=0; t < size(); t++ ) {
-    Fl_Menu_Item *m = menu_ + t;
-    if (m->flags&FL_SUBMENU) {
-      // IT'S A SUBMENU
-      // we do not support searches through FL_SUBMENU_POINTER links
-      if (menupath[0]) strlcat(menupath, "/", sizeof(menupath));
-      strlcat(menupath, m->label(), sizeof(menupath));
-      if (!strcmp(menupath, pathname)) return(t);
-    } else {
-      if (!m->label()) {
-	// END OF SUBMENU? Pop back one level.
-	char *ss = strrchr(menupath, '/');
-	if ( ss ) *ss = 0;
-	else menupath[0] = '\0';
-	continue;
-      }
-      // IT'S A MENU ITEM
-      char itempath[1024];	// eg. Edit/Copy
-      strcpy(itempath, menupath);
-      if (itempath[0]) strlcat(itempath, "/", sizeof(itempath));
-      strlcat(itempath, m->label(), sizeof(itempath));
-      if (!strcmp(itempath, pathname)) return(t);
-    }
-  }
-  return(-1);
-}
-
-/**
- Find the menu item for the given callback \p cb.
- 
- This method finds a menu item in a menu array, also traversing submenus, but
- not submenu pointers. This is useful if an application uses 
- internationalisation and a menu item can not be found using its label. This
- search is also much faster.
- 
- \param[in] cb find the first item with this callback
- \returns The item found, or NULL if not found
- \see find_item(const char*)
- */
-const Fl_Menu_Item * Fl_Menu_::find_item(Fl_Callback *cb) {
-  for ( int t=0; t < size(); t++ ) {
-    const Fl_Menu_Item *m = menu_ + t;
-    if (m->callback_==cb) {
-      return m;
-    }
-  }
-  return (const Fl_Menu_Item *)0;
-}
-
-/**
-  The value is the index into menu() of the last item chosen by
-  the user.  It is zero initially.  You can set it as an integer, or set
-  it with a pointer to a menu item.  The set routines return non-zero if
-  the new value is different than the old one.
-*/
-int Fl_Menu_::value(const Fl_Menu_Item* m) {
-  clear_changed();
-  if (value_ != m) {value_ = m; return 1;}
-  return 0;
-}
-
-/** 
- When user picks a menu item, call this.  It will do the callback.
- Unfortunately this also casts away const for the checkboxes, but this
- was necessary so non-checkbox menus can really be declared const...
-*/
-const Fl_Menu_Item* Fl_Menu_::picked(const Fl_Menu_Item* v) {
-  if (v) {
-    if (v->radio()) {
-      if (!v->value()) { // they are turning on a radio item
-        set_changed();
-        setonly((Fl_Menu_Item*)v);
-      }
-      redraw();
-    } else if (v->flags & FL_MENU_TOGGLE) {
-      set_changed();
-      ((Fl_Menu_Item*)v)->flags ^= FL_MENU_VALUE;
-      redraw();
-    } else if (v != value_) { // normal item
-      set_changed();
-    }
-    value_ = v;
-    if (when()&(FL_WHEN_CHANGED|FL_WHEN_RELEASE)) {
-      if (changed() || when()&FL_WHEN_NOT_CHANGED) {
-	if (value_ && value_->callback_) value_->do_callback((Fl_Widget*)this);
-	else do_callback();
-      }
-    }
-  }
-  return v;
-}
-
-/* Scans an array of Fl_Menu_Item's that begins at start, searching for item.
- Returns NULL if item is not found.
- If item is present, returns start, unless item belongs to an
- FL_SUBMENU_POINTER-adressed array of items, in which case the first item of this array is returned.
- */
-static Fl_Menu_Item *first_submenu_item(Fl_Menu_Item *item, Fl_Menu_Item *start)
-{
-  Fl_Menu_Item* m = start;
-  int nest = 0; // will indicate submenu nesting depth
-  while (1) { // loop over all menu items
-    if (!m->text) { // m is a null item
-      if (!nest) return NULL; // item was not found
-      nest--; // m marks the end of a submenu -> decrement submenu nesting depth
-    } else { // a true item
-      if (m == item) return start; // item is found, return menu start item
-      if (m->flags & FL_SUBMENU_POINTER) {
-        // scan the detached submenu which begins at m->user_data()
-        Fl_Menu_Item *first = first_submenu_item(item, (Fl_Menu_Item*)m->user_data());
-        if (first) return first; // if item was found in the submenu, return
-      }
-      else if (m->flags & FL_SUBMENU) { // a direct submenu
-        nest++; // increment submenu nesting depth
-      }
-    }
-    m++; // step to next menu item
-  }
-}
-
-
-/** Turns the radio item "on" for the menu item and turns "off" adjacent radio items of the same group. */
-void Fl_Menu_::setonly(Fl_Menu_Item* item) {
-  // find the first item of the (sub)menu containing item
-  Fl_Menu_Item* first = first_submenu_item(item, menu_);
-  if (!first) return; // item does not belong to our menu
-  item->flags |= FL_MENU_RADIO | FL_MENU_VALUE;
-  Fl_Menu_Item* j;
-  for (j = item; ; ) {	// go down
-    if (j->flags & FL_MENU_DIVIDER) break; // stop on divider lines
-    j++;
-    if (!j->text || !j->radio()) break; // stop after group
-    j->clear();
-  }
-  for (j = item-1; j>=first; j--) { // go up
-    //DEBUG printf("GO UP: WORKING ON: item='%s', flags=%x\n", j->text, j->flags);
-    if (!j->text || (j->flags&FL_MENU_DIVIDER) || !j->radio()) break;
-    j->clear();
-  }
-}
-
-/** Turns the radio item "on" for the menu item and turns "off" adjacent radio items set.
- \deprecated This method is dangerous if radio items are first in the menu.
- Use Fl_Menu_::setonly(Fl_Menu_Item*) instead.
- */
-void Fl_Menu_Item::setonly() {
-  flags |= FL_MENU_RADIO | FL_MENU_VALUE;
-  Fl_Menu_Item* j;
-  for (j = this; ; ) {	// go down
-    if (j->flags & FL_MENU_DIVIDER) break; // stop on divider lines
-    j++;
-    if (!j->text || !j->radio()) break; // stop after group
-    j->clear();
-  }
-  for (j = this-1; ; j--) { // go up
-    if (!j->text || (j->flags&FL_MENU_DIVIDER) || !j->radio()) break;
-    j->clear();
-  }
-}
-
-/**
- Creates a new Fl_Menu_ widget using the given position, size,
- and label string.  menu() is initialized to null.
- */
-Fl_Menu_::Fl_Menu_(int X,int Y,int W,int H,const char* l)
-: Fl_Widget(X,Y,W,H,l) {
-  set_flag(SHORTCUT_LABEL);
-  box(FL_UP_BOX);
-  when(FL_WHEN_RELEASE_ALWAYS);
-  value_ = menu_ = 0;
-  alloc = 0;
-  selection_color(FL_SELECTION_COLOR);
-  textfont(FL_HELVETICA);
-  textsize(FL_NORMAL_SIZE);
-  textcolor(FL_FOREGROUND_COLOR);
-  down_box(FL_NO_BOX);
-}
-
-/**
-  This returns the number of Fl_Menu_Item structures that make up the
-  menu, correctly counting submenus.  This includes the "terminator"
-  item at the end.  To copy a menu array you need to copy
-  size()*sizeof(Fl_Menu_Item) bytes.  If the menu is
-  NULL this returns zero (an empty menu will return 1).
-*/
-int Fl_Menu_::size() const {
-  if (!menu_) return 0;
-  return menu_->size();
-}
-
-/**
-    Sets the menu array pointer directly.  If the old menu is private it is
-    deleted.  NULL is allowed and acts the same as a zero-length
-    menu.  If you try to modify the array (with add(), replace(), or
-    remove()) a private copy is automatically done.
-*/
-void Fl_Menu_::menu(const Fl_Menu_Item* m) {
-  clear();
-  value_ = menu_ = (Fl_Menu_Item*)m;
-}
-
-// this version is ok with new Fl_Menu_add code with fl_menu_array_owner:
-
-/** 
-  Sets the menu array pointer with a copy of m that will be automatically deleted. 
-  If userdata \p ud is not NULL, then all user data pointers are changed in the menus as well.
-  See void Fl_Menu_::menu(const Fl_Menu_Item* m). 
-*/
-void Fl_Menu_::copy(const Fl_Menu_Item* m, void* ud) {
-  int n = m->size();
-  Fl_Menu_Item* newMenu = new Fl_Menu_Item[n];
-  memcpy(newMenu, m, n*sizeof(Fl_Menu_Item));
-  menu(newMenu);
-  alloc = 1; // make destructor free array, but not strings
-  // for convenience, provide way to change all the user data pointers:
-  if (ud) for (; n--;) {
-    if (newMenu->callback_) newMenu->user_data_ = ud;
-    newMenu++;
-  }
-}
-
-Fl_Menu_::~Fl_Menu_() {
-  clear();
-}
-
-// Fl_Menu::add() uses this to indicate the owner of the dynamically-
-// expanding array.  We must not free this array:
-Fl_Menu_* fl_menu_array_owner = 0;
-
-/**
-  Same as menu(NULL), set the array pointer to null, indicating
-  a zero-length menu.
-  
-  Menus must not be cleared during a callback to the same menu.
-*/
-void Fl_Menu_::clear() {
-  if (alloc) {
-    if (alloc>1) for (int i = size(); i--;)
-      if (menu_[i].text) free((void*)menu_[i].text);
-    if (this == fl_menu_array_owner)
-      fl_menu_array_owner = 0;
-    else
-      delete[] menu_;
-    menu_ = 0;
-    value_ = 0;
-    alloc = 0;
-  }
-}
-
-/**
- Clears the specified submenu pointed to by \p index of all menu items.
-
- This method is useful for clearing a submenu so that it can be
- re-populated with new items. Example: a "File/Recent Files/..." submenu
- that shows the last few files that have been opened.
-
- The specified \p index must point to a submenu.
- 
- The submenu is cleared with remove().
- If the menu array was directly set with menu(x), then copy() 
- is done to make a private array.
-
- \warning Since this method can change the internal menu array, any menu
- item pointers or indices the application may have cached can become
- stale, and should be recalculated/refreshed.
-
- \b Example:
- \code
-   int index = menubar->find_index("File/Recent");    // get index of "File/Recent" submenu
-   if ( index != -1 ) menubar->clear_submenu(index);  // clear the submenu
-   menubar->add("File/Recent/Aaa");
-   menubar->add("File/Recent/Bbb");
-   [..]
- \endcode
-
- \param index The index of the submenu to be cleared
- \returns 0 on success, -1 if the index is out of range or not a submenu
- \see remove(int)
- */
-int Fl_Menu_::clear_submenu(int index) {
-  if ( index < 0 || index >= size() ) return(-1);
-  if ( ! (menu_[index].flags & FL_SUBMENU) ) return(-1);
-  ++index;					// advance to first item in submenu
-  while ( index < size() ) {                    // keep remove()ing top item until end is reached
-    if ( menu_[index].text == 0 ) break;	// end of this submenu? done
-    remove(index);				// remove items/submenus
-  }
-  return(0);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_Bar.cxx
+++ /dev/null
@@ -1,75 +1,0 @@
-//
-// "$Id$"
-//
-// Menu bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/fl_draw.H>
-
-void Fl_Menu_Bar::draw() {
-  draw_box();
-  if (!menu() || !menu()->text) return;
-  const Fl_Menu_Item* m;
-  int X = x()+6;
-  for (m=menu()->first(); m->text; m = m->next()) {
-    int W = m->measure(0,this) + 16;
-    m->draw(X, y(), W, h(), this);
-    X += W;
-    if (m->flags & FL_MENU_DIVIDER) {
-      int y1 = y() + Fl::box_dy(box());
-      int y2 = y1 + h() - Fl::box_dh(box()) - 1;
-
-      // Draw a vertical divider between menus...
-      fl_color(FL_DARK3);
-      fl_yxline(X - 6, y1, y2);
-      fl_color(FL_LIGHT3);
-      fl_yxline(X - 5, y1, y2);
-    }
-  }
-}
-
-int Fl_Menu_Bar::handle(int event) {
-  const Fl_Menu_Item* v;
-  if (menu() && menu()->text) switch (event) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-  case FL_PUSH:
-    v = 0;
-  J1:
-    v = menu()->pulldown(x(), y(), w(), h(), v, this, 0, 1);
-    picked(v);
-    return 1;
-  case FL_SHORTCUT:
-    if (visible_r()) {
-      v = menu()->find_shortcut(0, true);
-      if (v && v->submenu()) goto J1;
-    }
-    return test_shortcut() != 0;
-  }
-  return 0;
-}
-
-
-Fl_Menu_Bar::Fl_Menu_Bar(int X, int Y, int W, int H,const char *l)
-: Fl_Menu_(X,Y,W,H,l) 
-{
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_Button.cxx
+++ /dev/null
@@ -1,115 +1,0 @@
-//
-// "$Id$"
-//
-// Menu button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-
-
-static Fl_Menu_Button	*pressed_menu_button_ = 0;
-
-
-void Fl_Menu_Button::draw() {
-  if (!box() || type()) return;
-  int H = (labelsize()-3)&-2;
-  int X = x()+w()-H-Fl::box_dx(box())-Fl::box_dw(box())-1;
-  int Y = y()+(h()-H)/2;
-  draw_box(pressed_menu_button_ == this ? fl_down(box()) : box(), color());
-  draw_label(x()+Fl::box_dx(box()), y(), X-x()+2, h());
-  if (Fl::focus() == this) draw_focus();
-  // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
-  fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
-  fl_line(X+H/2, Y+H, X, Y, X+H, Y);
-  fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
-  fl_line(X+H, Y, X+H/2, Y+H);
-}
-
-
-/**
-  Act exactly as though the user clicked the button or typed the
-  shortcut key.  The menu appears, it waits for the user to pick an item,
-  and if they pick one it sets value() and does the callback or
-  sets changed() as described above.  The menu item is returned
-  or NULL if the user dismisses the menu.
-*/
-const Fl_Menu_Item* Fl_Menu_Button::popup() {
-  const Fl_Menu_Item* m;
-  pressed_menu_button_ = this;
-  redraw();
-  Fl_Widget_Tracker mb(this);
-  if (!box() || type()) {
-    m = menu()->popup(Fl::event_x(), Fl::event_y(), label(), mvalue(), this);
-  } else {
-    m = menu()->pulldown(x(), y(), w(), h(), 0, this);
-  }
-  picked(m);
-  pressed_menu_button_ = 0;
-  if (mb.exists()) redraw();
-  return m;
-}
-
-int Fl_Menu_Button::handle(int e) {
-  if (!menu() || !menu()->text) return 0;
-  switch (e) {
-  case FL_ENTER: /* FALLTHROUGH */
-  case FL_LEAVE:
-    return (box() && !type()) ? 1 : 0;
-  case FL_PUSH:
-    if (!box()) {
-      if (Fl::event_button() != 3) return 0;
-    } else if (type()) {
-      if (!(type() & (1 << (Fl::event_button()-1)))) return 0;
-    }
-    if (Fl::visible_focus()) Fl::focus(this);
-    popup();
-    return 1;
-  case FL_KEYBOARD:
-    if (!box()) return 0;
-    if (Fl::event_key() == ' ' &&
-        !(Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) {
-      popup();
-      return 1;
-    } else return 0;
-  case FL_SHORTCUT:
-    if (Fl_Widget::test_shortcut()) {popup(); return 1;}
-    return test_shortcut() != 0;
-  case FL_FOCUS: /* FALLTHROUGH */
-  case FL_UNFOCUS:
-    if (box() && Fl::visible_focus()) {
-      redraw();
-      return 1;
-    }
-  default:
-    return 0;
-  }
-}
-
-/**
-  Creates a new Fl_Menu_Button widget using the given position,
-  size, and label string. The default boxtype is FL_UP_BOX.
-  <P>The constructor sets menu() to NULL.  See 
-  Fl_Menu_ for the methods to set or change the menu.
-*/
-Fl_Menu_Button::Fl_Menu_Button(int X,int Y,int W,int H,const char *l)
-: Fl_Menu_(X,Y,W,H,l) {
-  down_box(FL_NO_BOX);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_Window.cxx
+++ /dev/null
@@ -1,116 +1,0 @@
-//
-// "$Id$"
-//
-// Menu window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is the window type used by Fl_Menu to make the pop-ups.
-// It draws in the overlay planes if possible.
-
-// Also here is the implementation of the mouse & keyboard grab,
-// which are used so that clicks outside the program's windows
-// can be used to dismiss the menus.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
-
-// WIN32 note: HAVE_OVERLAY is false
-#if HAVE_OVERLAY
-extern XVisualInfo *fl_find_overlay_visual();
-extern XVisualInfo *fl_overlay_visual;
-extern Colormap fl_overlay_colormap;
-extern unsigned long fl_transparent_pixel;
-static GC gc;	// the GC used by all X windows
-extern uchar fl_overlay; // changes how fl_color(x) works
-#endif
-
-#include <stdio.h>
-
-void Fl_Menu_Window::show() {
-#if HAVE_OVERLAY
-  if (!shown() && overlay() && fl_find_overlay_visual()) {
-    XInstallColormap(fl_display, fl_overlay_colormap);
-    fl_background_pixel = int(fl_transparent_pixel);
-    Fl_X::make_xid(this, fl_overlay_visual, fl_overlay_colormap);
-    fl_background_pixel = -1;
-  } else
-#endif
-    Fl_Single_Window::show();
-}
-
-void Fl_Menu_Window::flush() {
-  if (!shown()) return;
-#if HAVE_OVERLAY
-  if (!fl_overlay_visual || !overlay()) {Fl_Single_Window::flush(); return;}
-  Fl_X *myi = Fl_X::i(this);
-  fl_window = myi->xid;
-  if (!gc) {
-	  gc = XCreateGC(fl_display, myi->xid, 0, 0);
-# if defined(FLTK_USE_CAIRO)
-	  if(Fl::autolink_context()) Fl::cairo_make_current(gc); // capture gc changes automatically to update the cairo context adequately
-# endif
-  }
-  fl_gc = gc;
-  fl_overlay = 1;
-  fl_clip_region(myi->region); myi->region = 0; current_ = this;
-  draw();
-  fl_overlay = 0;
-#else
-  Fl_Single_Window::flush();
-#endif
-}
-
-/** Erases the window, does nothing if HAVE_OVERLAY is not defined config.h */
-void Fl_Menu_Window::erase() {
-#if HAVE_OVERLAY
-  if (!gc || !shown()) return;
-//XSetForeground(fl_display, gc, 0);
-//XFillRectangle(fl_display, fl_xid(this), gc, 0, 0, w(), h());
-  XClearWindow(fl_display, fl_xid(this));
-#endif
-}
-
-// Fix the colormap flashing on Maximum Impact Graphics by erasing the
-// menu before unmapping it:
-void Fl_Menu_Window::hide() {
-  erase();
-  Fl_Single_Window::hide();
-}
-
-/**  Destroys the window and all of its children.*/
-Fl_Menu_Window::~Fl_Menu_Window() {
-  hide();
-}
-
-
-Fl_Menu_Window::Fl_Menu_Window(int W, int H, const char *l)
-: Fl_Single_Window(W,H,l) 
-{ 
-  image(0); 
-}
-
-
-Fl_Menu_Window::Fl_Menu_Window(int X, int Y, int W, int H, const char *l)
-: Fl_Single_Window(X,Y,W,H,l) { 
-  image(0); 
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_add.cxx
+++ /dev/null
@@ -1,500 +1,0 @@
-//
-// "$Id$"
-//
-// Menu utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Methods to alter the menu in an Fl_Menu_ widget.
-
-// These are for Forms emulation and for dynamically changing the
-// menus.  They are in this source file so they are not linked in if
-// not used, which is what will happen if the program only uses
-// constant menu tables.
-
-// Not at all guaranteed to be Forms compatible, especially with any
-// string with a % sign in it!
-
-#include <FL/Fl_Menu_.H>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-// If the array is this, we will double-reallocate as necessary:
-static Fl_Menu_Item* local_array = 0;
-static int local_array_alloc = 0; // number allocated
-static int local_array_size = 0; // == size(local_array)
-extern Fl_Menu_* fl_menu_array_owner; // in Fl_Menu_.cxx
-
-// For historical reasons there are matching methods that work on a
-// user-allocated array of Fl_Menu_Item.  These methods are quite
-// depreciated and should not be used.  These old methods use the
-// above pointers to detect if the array belongs to an Fl_Menu_
-// widget, and if so it reallocates as necessary.
-
-
-
-// Insert a single Fl_Menu_Item into an array of size at offset n,
-// if this is local_array it will be reallocated if needed.
-static Fl_Menu_Item* array_insert(
-  Fl_Menu_Item* array,  // array to modify
-  int size,             // size of array
-  int n,                // index of new insert position
-  const char *text,     // text of new item (copy is made)
-  int flags             // flags for new item
-) {
-  if (array == local_array && size >= local_array_alloc) {
-    local_array_alloc = 2*size;
-    Fl_Menu_Item* newarray = new Fl_Menu_Item[local_array_alloc];
-    memmove(newarray, array, size*sizeof(Fl_Menu_Item));
-    delete[] local_array;
-    local_array = array = newarray;
-  }
-  // move all the later items:
-  memmove(array+n+1, array+n, sizeof(Fl_Menu_Item)*(size-n));
-  // create the new item:
-  Fl_Menu_Item* m = array+n;
-  m->text = text ? strdup(text) : 0;
-  m->shortcut_ = 0;
-  m->callback_ = 0;
-  m->user_data_ = 0;
-  m->flags = flags;
-  m->labeltype_ = m->labelsize_ = m->labelcolor_ = 0;
-  m->labelfont_ = FL_HELVETICA; 
-  return array;
-}
-
-
-
-// Comparison that does not care about deleted '&' signs:
-static int compare(const char* a, const char* b) {
-  for (;;) {
-    int n = *a-*b;
-    if (n) {
-      if (*a == '&') a++;
-      else if (*b == '&') b++;
-      else return n;
-    } else if (*a) {
-      a++; b++;
-    } else {
-      return 0;
-    }
-  }
-}
-
-
-/** Adds a menu item.
-
-  The text is split at '/' characters to automatically
-  produce submenus (actually a totally unnecessary feature as you can
-  now add submenu titles directly by setting FL_SUBMENU in the flags).
-
-  \returns the index into the menu() array, where the entry was added
-  \see Fl_Menu_Item::insert(int, const char*, int, Fl_Callback*, void*, int)
-*/
-int Fl_Menu_Item::add(
-  const char *mytext,
-  int sc,
-  Fl_Callback *cb,	
-  void *data,
-  int myflags
-) {
-  return(insert(-1,mytext,sc,cb,data,myflags));		// -1: append
-}
-
-
-/** 
- Inserts an item at position \p index.
-    
- If \p index is -1, the item is added the same way as Fl_Menu_Item::add().
-
- If 'mytext' contains any un-escaped front slashes (/), it's assumed 
- a menu pathname is being specified, and the value of \p index 
- will be ignored.
-
- In all other aspects, the behavior of insert() is the same as add().
- 
- \param[in] index	insert new items here
- \param[in] mytext	new label string, details see above
- \param[in] sc		keyboard shortcut for new item
- \param[in] cb		callback function for new item
- \param[in] data	user data for new item
- \param[in] myflags	menu flags as described in FL_Menu_Item
-
- \returns the index into the menu() array, where the entry was added
-*/
-int Fl_Menu_Item::insert(
-  int index,
-  const char *mytext,
-  int sc,
-  Fl_Callback *cb,	
-  void *data,
-  int myflags
-) {
-  Fl_Menu_Item *array = this;
-  Fl_Menu_Item *m = this;
-  const char *p;
-  char *q;
-  char buf[1024];
-
-  int msize = array==local_array ? local_array_size : array->size();
-  int flags1 = 0;
-  const char* item;
-
-  // split at slashes to make submenus:
-  for (;;) {
-
-    // leading slash makes us assume it is a filename:
-    if (*mytext == '/') {item = mytext; break;}
-
-    // leading underscore causes divider line:
-    if (*mytext == '_') {mytext++; flags1 = FL_MENU_DIVIDER;}
-
-    // copy to buf, changing \x to x:
-    q = buf;
-    for (p=mytext; *p && *p != '/'; *q++ = *p++) if (*p=='\\' && p[1]) p++;
-    *q = 0;
-
-    item = buf;
-    if (*p != '/') break; /* not a menu title */
-    index = -1;           /* any submenu specified overrides insert position */
-    mytext = p+1;         /* point at item title */
-
-    /* find a matching menu title: */
-    for (; m->text; m = m->next())
-      if (m->flags&FL_SUBMENU && !compare(item, m->text)) break;
-
-    if (!m->text) { /* create a new menu */
-      int n = (index==-1) ? (int) (m-array) : index;
-      array = array_insert(array, msize, n, item, FL_SUBMENU|flags1);
-      msize++;
-      array = array_insert(array, msize, n+1, 0, 0);
-      msize++;
-      m = array+n;
-    }
-    m++;	/* go into the submenu */
-    flags1 = 0;
-  }
-
-  /* find a matching menu item: */
-  for (; m->text; m = m->next())
-    if (!(m->flags&FL_SUBMENU) && !compare(m->text,item)) break;
-
-  if (!m->text) {	/* add a new menu item */
-    int n = (index==-1) ? (int) (m-array) : index;
-    array = array_insert(array, msize, n, item, myflags|flags1);
-    msize++;
-    if (myflags & FL_SUBMENU) { // add submenu delimiter
-      array = array_insert(array, msize, n+1, 0, 0);
-      msize++;
-    }
-    m = array+n;
-  }
-
-  /* fill it in */
-  m->shortcut_ = sc;
-  m->callback_ = cb;
-  m->user_data_ = data;
-  m->flags = myflags|flags1;
-
-  if (array == local_array) local_array_size = msize;
-  return (int) (m-array);
-}
-
-
-/**
-  Adds a new menu item.
-
-  \param[in] label	The text label for the menu item.
-  \param[in] shortcut	Optional keyboard shortcut that can be an int or string:
-			(FL_CTRL+'a') or "^a". Default 0 if none.
-  \param[in] callback	Optional callback invoked when user clicks the item.
-			Default 0 if none.
-  \param[in] userdata	Optional user data passed as an argument to the callback.
-			Default 0 if none.
-  \param[in] flags	Optional flags that control the type of menu item;
-			see below. Default is 0 for none.
-  \returns		The index into the menu() array, where the entry was added.
-
-  \par Description
-  If the menu array was directly set with menu(x), then copy() is done 
-  to make a private array.
-  \par 
-  Since this method can change the internal menu array, any menu item
-  pointers or indices the application may have cached can become stale,
-  and should be recalculated/refreshed.
-  \par
-  A menu item's callback must not add() items to its parent menu during the callback.
-
-  <B>Detailed Description of Parameters</B>
-  \par label
-  The menu item's label. This argument is required and must not be NULL.
-  \par
-  The characters "&", "/", "\", and "_" are treated as special characters in the label string. 
-  The "&" character specifies that the following character is an accelerator and will be underlined.
-  The "\" character is used to escape the next character in the string. 
-  Labels starting with the "_" character cause a divider to be placed after that menu item.
-  \par 
-  A label of the form "File/Quit" will create the submenu "File"
-  with a menu item called "Quit". The "/" character is ignored if it appears
-  as the first character of the label string, e.g.  "/File/Quit".
-  \par 
-  The label string is copied to new memory and can be freed.
-  The other arguments (including the shortcut) are copied into the
-  menu item unchanged.
-  \par 
-  If an item exists already with that name then it is replaced with
-  this new one.  Otherwise this new one is added to the end of the
-  correct menu or submenu.  The return value is the offset into the array
-  that the new entry was placed at.
-  
-  \par shortcut
-  The keyboard shortcut for this menu item. 
-  \par 
-  This parameter is optional, and defaults to 0 to indicate no shortcut.
-  \par
-  The shortcut can either be a raw integer value (eg. FL_CTRL+'A')
-  or a string (eg. "^c" or "^97").
-  \par
-  Raw integer shortcuts can be a combination of keyboard chars (eg. 'A')
-  and optional keyboard modifiers (see Fl::event_state(), e.g. FL_SHIFT, etc).
-  In addition, FL_COMMAND can be used to denote FL_META under Mac OS X and
-  FL_CTRL under other platforms.
-  \par
-  String shortcuts can be specified in one of two ways:
-  \par
-  \verbatim
-   [#+^]<ascii_value>    e.g. "97", "^97", "+97", "#97"
-   [#+^]<ascii_char>     e.g. "a", "^a", "+a", "#a"
-  \endverbatim
-  \par
-  ..where \<ascii_value\> is a decimal value representing an
-  ASCII character (eg. 97 is the ascii code for 'a'), and the optional
-  prefixes enhance the value that follows. Multiple prefixes must
-  appear in the order below.
-  \par
-  \verbatim
-   # - Alt
-   + - Shift
-   ^ - Control
-  \endverbatim
-  \par
-  Internally, the text shortcuts are converted to integer values using
-  fl_old_shortcut(const char*).
-
-  \par callback
-  The callback to invoke when this menu item is selected. 
-  \par 
-  This parameter is optional, and defaults to 0 for no callback.
-
-  \par userdata
-  The callback's 'user data' that is passed to the callback. 
-  \par 
-  This parameter is optional, and defaults to 0.
-
-  \par flags
-  These are bit flags to define what kind of menu item this is. 
-  \par
-  This parameter is optional, and defaults to 0 to define a 'regular' menu item.
-  \par 
-  These flags can be 'OR'ed together:
-  \code
-      FL_MENU_INACTIVE     // Deactivate menu item (gray out)
-      FL_MENU_TOGGLE       // Item is a checkbox toggle (shows checkbox for on/off state)
-      FL_MENU_VALUE        // The on/off state for checkbox/radio buttons (if set, state is 'on')
-      FL_MENU_RADIO        // Item is a radio button (one checkbox of many can be on)
-      FL_MENU_INVISIBLE    // Item will not show up (shortcut will work)
-      FL_SUBMENU_POINTER   // Indicates user_data() is a pointer to another menu array
-      FL_SUBMENU           // This item is a submenu to other items
-      FL_MENU_DIVIDER      // Creates divider line below this item. Also ends a group of radio buttons.
-  \endcode
-
-  If FL_SUBMENU is set in an item's flags, then actually two items are added:
-  the first item is the menu item (submenu title), as expected, and the second
-  item is the submenu terminating item with the label and all other members
-  set to 0. If you add submenus with the 'path' technique, then the
-  corresponding submenu terminators (maybe more than one) are added as well.
-
-  \todo Raw integer shortcut needs examples. 
-        Dependent on responses to http://fltk.org/newsgroups.php?gfltk.development+v:10086 and results of STR#2344
- */
-int Fl_Menu_::add(const char *label,int shortcut,Fl_Callback *callback,void *userdata,int flags) {
-  return(insert(-1,label,shortcut,callback,userdata,flags));	// -1: append
-}
-
-
-/**
-  Inserts a new menu item at the specified \p index position.
-
-  If \p index is -1, the menu item is appended; same behavior as add().
-
-  To properly insert a menu item, \p label must be the name of the item (eg. "Quit"),
-  and not a 'menu pathname' (eg. "File/Quit").  If a menu pathname is specified, 
-  the value of \p index is \em ignored, the new item's position defined by the pathname.
-  
-  For more details, see add(). Except for the \p index parameter, add()
-  has more detailed information on parameters and behavior, and is
-  functionally equivalent.
-
-  \param[in] index    The menu array's index position where the new item
-                      is inserted. If -1, behavior is the same as add().
-  \param[in] label    The text label for the menu item. If the label 
-                      is a menu pathname, \p index is ignored, and the pathname
-		      indicates the position of the new item.
-  \param[in] shortcut Optional keyboard shortcut. Can be an int (FL_CTRL+'a')
-                      or a string ("^a"). Default is 0.
-  \param[in] callback Optional callback invoked when user clicks the item.
-                      Default 0 if none.
-  \param[in] userdata Optional user data passed as an argument to the callback.
-                      Default 0 if none.
-  \param[in] flags    Optional flags that control the type of menu item; 
-                      see add() for more info. Default is 0 for none.
-  \returns            The index into the menu() array, where the entry was added.
-
-  \see                add()
-*/
-
-int Fl_Menu_::insert(
-  int index,
-  const char *label,
-  int shortcut,
-  Fl_Callback *callback,
-  void *userdata,
-  int flags
-) {
-  // make this widget own the local array:
-  if (this != fl_menu_array_owner) {
-    if (fl_menu_array_owner) {
-      Fl_Menu_* o = fl_menu_array_owner;
-      // the previous owner gets its own correctly-sized array:
-      int value_offset = (int) (o->value_-local_array);
-      int n = local_array_size;
-      Fl_Menu_Item* newMenu = o->menu_ = new Fl_Menu_Item[n];
-      memcpy(newMenu, local_array, n*sizeof(Fl_Menu_Item));
-      if (o->value_) o->value_ = newMenu+value_offset;
-    }
-    if (menu_) {
-      // this already has a menu array, use it as the local one:
-      delete[] local_array;
-      if (!alloc) copy(menu_); // duplicate a user-provided static array
-      // add to the menu's current array:
-      local_array_alloc = local_array_size = size();
-      local_array = menu_;
-    } else {
-      // start with a blank array:
-      alloc = 2; // indicates that the strings can be freed
-      if (local_array) {
-	menu_ = local_array;
-      } else {
-	local_array_alloc = 15;
-	local_array = menu_ = new Fl_Menu_Item[local_array_alloc];
-        memset(local_array, 0, sizeof(Fl_Menu_Item) * local_array_alloc);
-      }
-      memset(menu_, 0, sizeof(Fl_Menu_Item));
-      local_array_size = 1;
-    }
-    fl_menu_array_owner = this;
-  }
-  int r = menu_->insert(index,label,shortcut,callback,userdata,flags);
-  // if it rellocated array we must fix the pointer:
-  int value_offset = (int) (value_-menu_);
-  menu_ = local_array; // in case it reallocated it
-  if (value_) value_ = menu_+value_offset;
-  return r;
-}
-
-
-
-/**
-  This is a Forms (and SGI GL library) compatible add function, it
-  adds many menu items, with '|' separating the menu items, and tab
-  separating the menu item names from an optional shortcut string.
-
-  The passed string is split at any '|' characters and then
-  add(s,0,0,0,0) is done with each section. This is
-  often useful if you are just using the value, and is compatible
-  with Forms and other GL programs. The section strings use the
-  same special characters as described for the long version of add().
-
-  No items must be added to a menu during a callback to the same menu.
- 
-  \param str string containing multiple menu labels as described above
-  \returns the index into the menu() array, where the entry was added
-*/
-int Fl_Menu_::add(const char *str) {
-  char buf[1024];
-  int r = 0;
-  while (*str) {
-    int sc = 0;
-    char *c;
-    for (c = buf; c < (buf + sizeof(buf) - 2) && *str && *str != '|'; str++) {
-      if (*str == '\t') {*c++ = 0; sc = fl_old_shortcut(str);}
-      else *c++ = *str;
-    }
-    *c = 0;
-    r = add(buf, sc, 0, 0, 0);
-    if (*str) str++;
-  }
-  return r;
-}
-
-
-
-/**
-  Changes the text of item \p i.  This is the only way to get
-  slash into an add()'ed menu item.  If the menu array was directly set
-  with menu(x) then copy() is done to make a private array.
- 
-  \param i index into menu array
-  \param str new label for menu item at index i
-*/
-void Fl_Menu_::replace(int i, const char *str) {
-  if (i<0 || i>=size()) return;
-  if (!alloc) copy(menu_);
-  if (alloc > 1) {
-    free((void *)menu_[i].text);
-    str = strdup(str);
-  }
-  menu_[i].text = str;
-}
-
-
-
-/**
-  Deletes item \p i from the menu.  If the menu array was directly
-  set with menu(x) then copy() is done to make a private array.
-  
-  No items must be removed from a menu during a callback to the same menu.
- 
-  \param i index into menu array
-*/
-void Fl_Menu_::remove(int i) {
-  int n = size();
-  if (i<0 || i>=n) return;
-  if (!alloc) copy(menu_);
-  // find the next item, skipping submenus:
-  Fl_Menu_Item* item = menu_+i;
-  const Fl_Menu_Item* next_item = item->next();
-  // delete the text only if all items were created with add():
-  if (alloc > 1) {
-    for (Fl_Menu_Item* m = item; m < next_item; m++)
-      if (m->text) free((void*)(m->text));
-  }
-  // MRS: "n" is the menu size(), which includes the trailing NULL entry...
-  memmove(item, next_item, (menu_+n-next_item)*sizeof(Fl_Menu_Item));
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Menu_global.cxx
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// Global menu shortcut code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Make all the shortcuts in this menu global.
-// Currently only one menu at a time and you cannot destruct the menu,
-// is this sufficient?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Menu_.H>
-
-static Fl_Menu_* the_widget;
-
-static int handler(int e) {
-  if (e != FL_SHORTCUT || Fl::modal()) return 0;
-  Fl::first_window(the_widget->window());
-  return the_widget->handle(e);
-}
-
-/**
-  Make the shortcuts for this menu work no matter what window has the
-  focus when you type it.  This is done by using 
-  Fl::add_handler().  This Fl_Menu_ widget does not
-  have to be visible (ie the window it is in can be hidden, or it does
-  not have to be put in a window at all).
-  <P>Currently there can be only one global()menu.  Setting a new
-  one will replace the old one.  There is no way to remove the 
-  global() setting (so don't destroy the widget!)
-*/
-void Fl_Menu_::global() {
-  if (!the_widget) Fl::add_handler(handler);
-  the_widget = this;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Multi_Label.cxx
+++ /dev/null
@@ -1,71 +1,0 @@
-//
-// "$Id$"
-//
-// Multi-label widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Allows two labels to be used on a widget (by having one of them
-// be one of these it allows an infinte number!)
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Multi_Label.H>
-
-static void multi_labeltype(
-    const Fl_Label* o, int x, int y, int w, int h, Fl_Align a)
-{
-  Fl_Multi_Label* b = (Fl_Multi_Label*)(o->value);
-  Fl_Label local = *o;
-  local.value = b->labela;
-  local.type = b->typea;
-  int W = w; int H = h; local.measure(W, H);
-  local.draw(x,y,w,h,a);
-  if (a & FL_ALIGN_BOTTOM) h -= H;
-  else if (a & FL_ALIGN_TOP) {y += H; h -= H;}
-  else if (a & FL_ALIGN_RIGHT) w -= W;
-  else if (a & FL_ALIGN_LEFT) {x += W; w -= W;}
-  else {int d = (h+H)/2; y += d; h -= d;}
-  local.value = b->labelb;
-  local.type = b->typeb;
-  local.draw(x,y,w,h,a);
-}
-
-// measurement is only correct for left-to-right appending...
-static void multi_measure(const Fl_Label* o, int& w, int& h) {
-  Fl_Multi_Label* b = (Fl_Multi_Label*)(o->value);
-  Fl_Label local = *o;
-  local.value = b->labela;
-  local.type = b->typea;
-  local.measure(w,h);
-  local.value = b->labelb;
-  local.type = b->typeb;
-  int W = 0; int H = 0; local.measure(W,H);
-  w += W; if (H>h) h = H;
-}
-
-void Fl_Multi_Label::label(Fl_Widget* o) {
-  Fl::set_labeltype(_FL_MULTI_LABEL, multi_labeltype, multi_measure);
-  o->label(_FL_MULTI_LABEL, (const char*)this);
-}
-
-void Fl_Multi_Label::label(Fl_Menu_Item* o) {
-  Fl::set_labeltype(_FL_MULTI_LABEL, multi_labeltype, multi_measure);
-  o->label(_FL_MULTI_LABEL, (const char*)this);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser.cxx
+++ /dev/null
@@ -1,38 +1,0 @@
-// "$Id$"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Use Windows' chooser
-#ifdef WIN32
-#include "Fl_Native_File_Chooser_WIN32.cxx"
-#endif
-
-// Use Apple's chooser
-#ifdef __APPLE__
-#include <FL/Fl_Native_File_Chooser.H>
-#endif
-
-// All else falls back to FLTK's own chooser
-#if ! defined(__APPLE__) && !defined(WIN32)
-#include "Fl_Native_File_Chooser_FLTK.cxx"
-#endif
-
-const char *Fl_Native_File_Chooser::file_exists_message = "File exists. Are you sure you want to overwrite?";
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser_FLTK.cxx
+++ /dev/null
@@ -1,526 +1,0 @@
-// "$Id$"
-//
-// FLTK native file chooser widget wrapper for GTK's GtkFileChooserDialog 
-//
-// Copyright 1998-2014 by Bill Spitzak and others.
-// Copyright 2012 IMM
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_File_Icon.H>
-#define FLTK_CHOOSER_SINGLE    Fl_File_Chooser::SINGLE
-#define FLTK_CHOOSER_DIRECTORY Fl_File_Chooser::DIRECTORY
-#define FLTK_CHOOSER_MULTI     Fl_File_Chooser::MULTI
-#define FLTK_CHOOSER_CREATE    Fl_File_Chooser::CREATE
-
-#include "Fl_Native_File_Chooser_common.cxx"
-#include "Fl_Native_File_Chooser_GTK.cxx"
-
-#include <sys/stat.h>
-#include <string.h>
-
-int Fl_Native_File_Chooser::have_looked_for_GTK_libs = 0;
-
-/**
- The constructor. Internally allocates the native widgets.
- Optional \p val presets the type of browser this will be, 
- which can also be changed with type().
- */
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-#if FLTK_ABI_VERSION <= 10302
-  _btype       = val;
-  _options     = NO_OPTIONS;
-  _filter      = NULL;
-  _filtvalue   = 0;
-  _parsedfilt  = NULL;
-  _preset_file = NULL;
-  _prevvalue   = NULL;
-  _directory   = NULL;
-  _errmsg      = NULL;
-#endif // FLTK_ABI_VERSION
-  if (have_looked_for_GTK_libs == 0) {
-    // First Time here, try to find the GTK libs if they are installed
-#if HAVE_DLSYM && HAVE_DLFCN_H
-    if (Fl::option(Fl::OPTION_FNFC_USES_GTK)) {
-      Fl_GTK_File_Chooser::probe_for_GTK_libs();
-    }
-#endif
-    have_looked_for_GTK_libs = -1;
-  }
-  // if we found all the GTK functions we need, we will use the GtkFileChooserDialog
-  if (Fl_GTK_File_Chooser::did_find_GTK_libs) _gtk_file_chooser = new Fl_GTK_File_Chooser(val);
-  else _x11_file_chooser = new Fl_FLTK_File_Chooser(val);
-}
-
-/**
- Destructor. 
- Deallocates any resources allocated to this widget.
- */
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  delete _x11_file_chooser;
-}
-
-/**
- Sets the current Fl_Native_File_Chooser::Type of browser.
- */
-void Fl_Native_File_Chooser::type(int t) { return _x11_file_chooser->type(t); }
-
-/**
- Gets the current Fl_Native_File_Chooser::Type of browser.
- */
-int Fl_Native_File_Chooser::type() const { return _x11_file_chooser->type(); }
-
-/**
- Sets the platform specific chooser options to \p val.
- \p val is expected to be one or more Fl_Native_File_Chooser::Option flags ORed together.
- Some platforms have OS-specific functions that can be enabled/disabled via this method.
- <P>
- \code
- Flag              Description                                       Win       Mac       Other
- --------------    -----------------------------------------------   -------   -------   -------
- NEW_FOLDER        Shows the 'New Folder' button.                    Ignored   Used      Used
- PREVIEW           Enables the 'Preview' mode by default.            Ignored   Ignored   Used
- SAVEAS_CONFIRM    Confirm dialog if BROWSE_SAVE_FILE file exists.   Used      Used      Used
- USE_FILTER_EXT    Chooser filter pilots the output file extension.  Ignored   Used      Used (GTK)
-\endcode
- */
-void Fl_Native_File_Chooser::options(int o) {  _x11_file_chooser->options(o); }
-
-/**
- Gets the platform specific Fl_Native_File_Chooser::Option flags.
- */
-int Fl_Native_File_Chooser::options() const {  return _x11_file_chooser->options(); }
-
-/**
- Returns the number of filenames (or directory names) the user selected.
- <P>
- \b Example:
- \code
- if ( fnfc->show() == 0 ) {
-     // Print all filenames user selected
-     for (int n=0; n<fnfc->count(); n++ ) {
-         printf("%d) '%s'\n", n, fnfc->filename(n));
-     }
- }
- \endcode
- */
-int Fl_Native_File_Chooser::count() const { return _x11_file_chooser->count(); }
-
-/**
- Return the filename the user chose.
- Use this if only expecting a single filename.
- If more than one filename is expected, use filename(int) instead.
- Return value may be "" if no filename was chosen (eg. user cancelled).
- */
-const char *Fl_Native_File_Chooser::filename() const { return _x11_file_chooser->filename(); }
-
-/**
- Return one of the filenames the user selected.
- Use count() to determine how many filenames the user selected.
- <P>
- \b Example:
- \code
- if ( fnfc->show() == 0 ) {
-     // Print all filenames user selected
-     for (int n=0; n<fnfc->count(); n++ ) {
-         printf("%d) '%s'\n", n, fnfc->filename(n));
-     }
- }
- \endcode
- */
-const char *Fl_Native_File_Chooser::filename(int i) const { return _x11_file_chooser->filename(i); }
-
-/**
- Preset the directory the browser will show when opened.
- If \p val is NULL, or no directory is specified, the chooser will attempt
- to use the last non-cancelled folder.
- */
-void Fl_Native_File_Chooser::directory(const char *val) {  _x11_file_chooser->directory(val); }
-
-/**
- Returns the current preset directory() value.
- */
-const char *Fl_Native_File_Chooser::directory() const { return _x11_file_chooser->directory(); }
-
-/**
- Set the title of the file chooser's dialog window.
- Can be NULL if no title desired.
- The default title varies according to the platform, so you are advised to set the title explicitly.
- */
-void Fl_Native_File_Chooser::title(const char *t) {  _x11_file_chooser->title(t); }
-
-/**
- Get the title of the file chooser's dialog window.
- Return value may be NULL if no title was set.
- */
-const char* Fl_Native_File_Chooser::title() const { return _x11_file_chooser->title(); }
-
-/**
- Returns the filter string last set.
- Can be NULL if no filter was set.
- */
-const char *Fl_Native_File_Chooser::filter() const { return _x11_file_chooser->filter(); }
-
-/**
- Sets the filename filters used for browsing. 
- The default is NULL, which browses all files.
- <P>
- The filter string can be any of:
- <P>
- - A single wildcard (eg. "*.txt")
- - Multiple wildcards (eg. "*.{cxx,h,H}")
- - A descriptive name followed by a "\t" and a wildcard (eg. "Text Files\t*.txt")
- - A list of separate wildcards with a "\n" between each (eg. "*.{cxx,H}\n*.txt")
- - A list of descriptive names and wildcards (eg. "C++ Files\t*.{cxx,H}\nTxt Files\t*.txt")
- <P>
- The format of each filter is a wildcard, or an optional user description 
- followed by '\\t' and the wildcard.
- <P>
- On most platforms, each filter is available to the user via a pulldown menu 
- in the file chooser. The 'All Files' option is always available to the user. 
- */
-void Fl_Native_File_Chooser::filter(const char *f) {  _x11_file_chooser->filter(f); }
-
-/**
- Gets how many filters were available, not including "All Files" 
- */
-int Fl_Native_File_Chooser::filters() const { return _x11_file_chooser->filters(); }
-
-/**
- Sets which filter will be initially selected.
- 
- The first filter is indexed as 0. 
- If filter_value()==filters(), then "All Files" was chosen. 
- If filter_value() > filters(), then a custom filter was set.
- */
-void Fl_Native_File_Chooser::filter_value(int i) {  _x11_file_chooser->filter_value(i); }
-
-/**
- Returns which filter value was last selected by the user.
- This is only valid if the chooser returns success.
- */
-int Fl_Native_File_Chooser::filter_value() const { return _x11_file_chooser->filter_value(); }
-
-/**
- Sets the default filename for the chooser.
- Use directory() to set the default directory.
- Mainly used to preset the filename for save dialogs, 
- and on most platforms can be used for opening files as well. 
- */
-void Fl_Native_File_Chooser::preset_file(const char* f) {  _x11_file_chooser->preset_file(f); }
-
-/**
- Get the preset filename.
- */
-const char* Fl_Native_File_Chooser::preset_file() const { return _x11_file_chooser->preset_file(); }
-
-/**
- Returns a system dependent error message for the last method that failed. 
- This message should at least be flagged to the user in a dialog box, or to some kind of error log. 
- Contents will be valid only for methods that document errmsg() will have info on failures.
- */
-const char *Fl_Native_File_Chooser::errmsg() const { return _x11_file_chooser->errmsg(); }
-
-/**
- Post the chooser's dialog. Blocks until dialog has been completed or cancelled.
- \returns
- - 0  -- user picked a file
- - 1  -- user cancelled
- - -1 -- failed; errmsg() has reason
- */
-int Fl_Native_File_Chooser::show() { return _x11_file_chooser->show(); }
-
-Fl_FLTK_File_Chooser::Fl_FLTK_File_Chooser(int val) {
-  _btype       = 0;
-  _options     = 0;
-  _filter      = NULL;
-  _filtvalue   = 0;
-  _parsedfilt  = NULL;
-  _preset_file = NULL;
-  _prevvalue   = NULL;
-  _directory   = NULL;
-  _errmsg      = NULL;
-  _file_chooser= NULL;
-  if (val >= 0) {
-    _file_chooser = new Fl_File_Chooser(NULL, NULL, 0, NULL);
-    type(val);			// do this after _file_chooser created
-    }
-  _nfilters    = 0;
-} 
-
-Fl_FLTK_File_Chooser::~Fl_FLTK_File_Chooser() {
-  delete _file_chooser;
-  _file_chooser = NULL;
-  _filter      = strfree(_filter);
-  _parsedfilt  = strfree(_parsedfilt);
-  _preset_file = strfree(_preset_file);
-  _prevvalue   = strfree(_prevvalue);
-  _directory   = strfree(_directory);
-  _errmsg      = strfree(_errmsg);
-}
-
-
-// PRIVATE: SET ERROR MESSAGE
-void Fl_FLTK_File_Chooser::errmsg(const char *msg) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(msg);
-}
-
-// PRIVATE: translate Native types to Fl_File_Chooser types
-int Fl_FLTK_File_Chooser::type_fl_file(int val) {
-  switch (val) {
-    case Fl_Native_File_Chooser::BROWSE_FILE:
-      return(Fl_File_Chooser::SINGLE);
-    case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
-      return(Fl_File_Chooser::SINGLE | Fl_File_Chooser::DIRECTORY);
-    case Fl_Native_File_Chooser::BROWSE_MULTI_FILE:
-      return(Fl_File_Chooser::MULTI);
-    case Fl_Native_File_Chooser::BROWSE_MULTI_DIRECTORY:
-      return(Fl_File_Chooser::DIRECTORY | Fl_File_Chooser::MULTI);
-    case Fl_Native_File_Chooser::BROWSE_SAVE_FILE:
-      return(Fl_File_Chooser::SINGLE | Fl_File_Chooser::CREATE);
-    case Fl_Native_File_Chooser::BROWSE_SAVE_DIRECTORY:
-      return(Fl_File_Chooser::DIRECTORY | Fl_File_Chooser::MULTI | Fl_File_Chooser::CREATE);
-    default:
-      return(Fl_File_Chooser::SINGLE);
-  }
-}
-
-void Fl_FLTK_File_Chooser::type(int val) {
-  _btype = val;
-  _file_chooser->type(type_fl_file(val));
-}
-
-int Fl_FLTK_File_Chooser::type() const {
-  return(_btype);
-}
-
-void Fl_FLTK_File_Chooser::options(int val) {
-  _options = val;
-}
-
-int Fl_FLTK_File_Chooser::options() const {
-  return(_options);
-}
-
-int Fl_FLTK_File_Chooser::show() {
-
-  // FILTER
-  if ( _parsedfilt ) {
-    _file_chooser->filter(_parsedfilt);
-  }
-
-  // FILTER VALUE
-  //     Set this /after/ setting the filter
-  //
-  _file_chooser->filter_value(_filtvalue);
-
-  // DIRECTORY
-  if ( _directory && _directory[0] ) {
-    _file_chooser->directory(_directory);
-  } else {
-    _file_chooser->directory(_prevvalue);
-  }
-
-  // PRESET FILE
-  if ( _preset_file ) {
-    _file_chooser->value(_preset_file);
-  }
-
-  // OPTIONS: PREVIEW
-  _file_chooser->preview( (options() & Fl_Native_File_Chooser::PREVIEW) ? 1 : 0);
-
-  // OPTIONS: NEW FOLDER
-  if ( options() & Fl_Native_File_Chooser::NEW_FOLDER )
-    _file_chooser->type(_file_chooser->type() | Fl_File_Chooser::CREATE);	// on
-  
-  // SHOW
-  _file_chooser->show();
-
-  // BLOCK WHILE BROWSER SHOWN
-  while ( _file_chooser->shown() ) {
-    Fl::wait();
-  }
-
-  if ( _file_chooser->value() && _file_chooser->value()[0] ) {
-    _prevvalue = strfree(_prevvalue);
-    _prevvalue = strnew(_file_chooser->value());
-    _filtvalue = _file_chooser->filter_value(); // update filter value
-
-    // HANDLE SHOWING 'SaveAs' CONFIRM
-    if ( options() & Fl_Native_File_Chooser::SAVEAS_CONFIRM && type() == Fl_Native_File_Chooser::BROWSE_SAVE_FILE ) {
-      struct stat buf;
-      if ( stat(_file_chooser->value(), &buf) != -1 ) {
-        if ( buf.st_mode & S_IFREG ) {    // Regular file + exists?
-          if ( exist_dialog() == 0 ) {
-            return(1);
-          }
-        }
-      }
-    }
-  }
-
-  if ( _file_chooser->count() ) return(0);
-  else return(1);
-}
-
-const char *Fl_FLTK_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-const char* Fl_FLTK_File_Chooser::filename() const {
-  if ( _file_chooser->count() > 0 ) {
-    return(_file_chooser->value());
-  }
-  return("");
-}
-
-const char* Fl_FLTK_File_Chooser::filename(int i) const {
-  if ( i < _file_chooser->count() )
-    return(_file_chooser->value(i+1));  // convert fltk 1 based to our 0 based
-  return("");
-}
-
-void Fl_FLTK_File_Chooser::title(const char *val) {
-  _file_chooser->label(val);
-}
-
-const char *Fl_FLTK_File_Chooser::title() const {
-  return(_file_chooser->label());
-}
-
-void Fl_FLTK_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  _filter = strnew(val);
-  parse_filter();
-}
-
-const char *Fl_FLTK_File_Chooser::filter() const {
-  return(_filter);
-}
-
-int Fl_FLTK_File_Chooser::filters() const {
-  return(_nfilters);
-}
-
-void Fl_FLTK_File_Chooser::filter_value(int val) {
-  _filtvalue = val;
-}
-
-int Fl_FLTK_File_Chooser::filter_value() const {
-  return _filtvalue;
-}
-
-int Fl_FLTK_File_Chooser::count() const {
-  return _file_chooser->count();
-}
-
-void Fl_FLTK_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-const char *Fl_FLTK_File_Chooser::directory() const {
-  return _directory;
-}
-
-// PRIVATE: Convert our filter format to fltk's chooser format
-//     FROM                                     TO (FLTK)
-//     -------------------------                --------------------------
-//     "*.cxx"                                  "*.cxx Files(*.cxx)"
-//     "C Files\t*.{cxx,h}"                     "C Files(*.{cxx,h})"
-//     "C Files\t*.{cxx,h}\nText Files\t*.txt"  "C Files(*.{cxx,h})\tText Files(*.txt)"
-//
-//     Returns a modified version of the filter that the caller is responsible
-//     for freeing with strfree().
-//
-void Fl_FLTK_File_Chooser::parse_filter() {
-  _parsedfilt = strfree(_parsedfilt);	// clear previous parsed filter (if any)
-  _nfilters = 0;
-  char *in = _filter;
-  if ( !in ) return;
-
-  int has_name = strchr(in, '\t') ? 1 : 0;
-
-  char mode = has_name ? 'n' : 'w';	// parse mode: n=title, w=wildcard
-  char wildcard[1024] = "";		// parsed wildcard
-  char name[1024] = "";
-
-  // Parse filter user specified
-  for ( ; 1; in++ ) {
-    /*** DEBUG
-    printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n",
-			*in, mode,     name,     wildcard);
-    ***/
-
-    switch (*in) {
-      // FINISHED PARSING NAME?
-      case '\t':
-        if ( mode != 'n' ) goto regchar;
-        mode = 'w';
-        break; 
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar; 
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-	// APPEND NEW FILTER TO LIST
-	if ( wildcard[0] ) {
-	  // OUT: "name(wild)\tname(wild)"
-	  char comp[2048];
-	  sprintf(comp, "%s%.511s(%.511s)", ((_parsedfilt)?"\t":""),
-					    name, wildcard);
-	  _parsedfilt = strapp(_parsedfilt, comp);
-	  _nfilters++;
-	  //DEBUG printf("DEBUG: PARSED FILT NOW <%s>\n", _parsedfilt);
-	}
-	// RESET
-	wildcard[0] = name[0] = '\0';
-	mode = strchr(in, '\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) return;	// done
-	else continue;			// not done yet, more filters
-
-      // Parse all other chars
-      default:				// handle all non-special chars
-      regchar:				// handle regular char
-	switch ( mode ) {
-	  case 'n': chrcat(name, *in);     continue;
-	  case 'w': chrcat(wildcard, *in); continue;
-	}
-	break;
-    }
-  }
-  //NOTREACHED
-}
-
-void Fl_FLTK_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-const char* Fl_FLTK_File_Chooser::preset_file() const {
-  return _preset_file;
-}
-
-int Fl_FLTK_File_Chooser::exist_dialog() {
-  return fl_choice("%s", fl_cancel, fl_ok, NULL, Fl_Native_File_Chooser::file_exists_message);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser_GTK.cxx
+++ /dev/null
@@ -1,733 +1,0 @@
-// "$Id$"
-//
-// FLTK native file chooser widget wrapper for GTK's GtkFileChooserDialog 
-//
-// Copyright 1998-2014 by Bill Spitzak and others.
-// Copyright 2012 IMM
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/x.H>
-#if HAVE_DLSYM && HAVE_DLFCN_H
-#include <dlfcn.h>   // for dlopen et al
-#endif
-#include <locale.h>  // for setlocale
-
-/* --------------------- Type definitions from GLIB and GTK --------------------- */
-/* all of this is from the public gnome API, so unlikely to change */
-#ifndef	FALSE
-#define	FALSE	(0)
-#endif
-#ifndef	TRUE
-#define	TRUE	(!FALSE)
-#endif
-typedef void* gpointer;
-typedef int    gint;
-typedef unsigned int    guint;
-typedef unsigned long   gulong;
-typedef gint   gboolean;
-typedef char   gchar;
-typedef struct _GSList GSList;
-struct _GSList
-{
-  gpointer data;
-  GSList *next;
-};
-#define  g_slist_next(slist)	         ((slist) ? (((GSList *)(slist))->next) : NULL)
-typedef struct _GtkWidget      GtkWidget;
-typedef struct _GtkFileChooser      GtkFileChooser;
-typedef struct _GtkDialog        GtkDialog;
-typedef struct _GtkWindow          GtkWindow;
-typedef struct _GdkDrawable           GdkWindow;
-typedef struct _GtkFileFilter     GtkFileFilter;
-typedef struct _GtkToggleButton       GtkToggleButton;
-typedef enum {
-  GTK_FILE_FILTER_FILENAME     = 1 << 0,
-  GTK_FILE_FILTER_URI          = 1 << 1,
-  GTK_FILE_FILTER_DISPLAY_NAME = 1 << 2,
-  GTK_FILE_FILTER_MIME_TYPE    = 1 << 3
-} GtkFileFilterFlags;
-struct _GtkFileFilterInfo
-{
-  GtkFileFilterFlags contains;
-  
-  const gchar *filename;
-  const gchar *uri;
-  const gchar *display_name;
-  const gchar *mime_type;
-};
-typedef struct _GtkFileFilterInfo GtkFileFilterInfo;
-typedef gboolean (*GtkFileFilterFunc) (const GtkFileFilterInfo *filter_info, gpointer data);
-typedef void (*GDestroyNotify)(gpointer data);
-typedef enum
-{
-  GTK_FILE_CHOOSER_ACTION_OPEN,
-  GTK_FILE_CHOOSER_ACTION_SAVE,
-  GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
-  GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
-} GtkFileChooserAction;
-#define GTK_STOCK_CANCEL           "gtk-cancel"
-#define GTK_STOCK_SAVE             "gtk-save"
-#define GTK_STOCK_OPEN             "gtk-open"
-const int   GTK_RESPONSE_NONE = -1;
-const int   GTK_RESPONSE_ACCEPT = -3;
-const int   GTK_RESPONSE_DELETE_EVENT = -4;
-const int   GTK_RESPONSE_CANCEL = -6;
-typedef void  (*GCallback)(void);
-#define	G_CALLBACK(f)			 ((GCallback) (f))
-typedef int GConnectFlags;
-typedef struct _GClosure		 GClosure;
-typedef void  (*GClosureNotify)(gpointer data, GClosure	*closure);
-
-/* --------------------- End of Type definitions from GLIB and GTK --------------------- */
-
-int Fl_GTK_File_Chooser::did_find_GTK_libs = 0;
-
-/* These are the GTK/GLib methods we want to load, but not call by name...! */
-
-// void g_free (gpointer mem);
-typedef void (*XX_g_free)(gpointer);
-static XX_g_free fl_g_free = NULL;
-
-// gpointer g_slist_nth_data (GSList *list, guint n);
-typedef gpointer (*XX_g_slist_nth_data) (GSList *, guint);
-static XX_g_slist_nth_data fl_g_slist_nth_data = NULL;
-
-// guint g_slist_length (GSList *list);
-typedef guint (*XX_g_slist_length) (GSList *);
-static XX_g_slist_length fl_g_slist_length = NULL;
-
-// void g_slist_free (GSList *list);
-typedef void (*XX_g_slist_free) (GSList *);
-static XX_g_slist_free fl_g_slist_free = NULL;
-
-// gboolean gtk_init_check (int *argc, char ***argv);
-typedef gboolean (*XX_gtk_init_check)(int *, char ***);
-static XX_gtk_init_check fl_gtk_init_check = NULL;
-
-// void gtk_widget_destroy (GtkWidget *widget);
-typedef void (*XX_gtk_widget_destroy) (GtkWidget *);
-static XX_gtk_widget_destroy fl_gtk_widget_destroy = NULL;
-
-// void gtk_file_chooser_set_select_multiple(GtkFileChooser *chooser, gboolean select_multiple);
-typedef void (*XX_gtk_file_chooser_set_select_multiple)(GtkFileChooser *, gboolean);
-static XX_gtk_file_chooser_set_select_multiple fl_gtk_file_chooser_set_select_multiple = NULL;
-
-// void gtk_file_chooser_set_do_overwrite_confirmation(GtkFileChooser *chooser, gboolean do_overwrite_confirmation);
-typedef void (*XX_gtk_file_chooser_set_do_overwrite_confirmation)(GtkFileChooser *, gboolean);
-static XX_gtk_file_chooser_set_do_overwrite_confirmation fl_gtk_file_chooser_set_do_overwrite_confirmation = NULL;
-
-// void gtk_file_chooser_set_current_name (GtkFileChooser *chooser, const gchar *name);
-typedef void (*XX_gtk_file_chooser_set_current_name)(GtkFileChooser *, const gchar *);
-static XX_gtk_file_chooser_set_current_name fl_gtk_file_chooser_set_current_name = NULL;
-
-// void gtk_file_chooser_set_current_folder (GtkFileChooser *chooser, const gchar *name);
-typedef void (*XX_gtk_file_chooser_set_current_folder)(GtkFileChooser *, const gchar *);
-static XX_gtk_file_chooser_set_current_folder fl_gtk_file_chooser_set_current_folder = NULL;
-
-// void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser, gboolean create_folders);
-typedef void (*XX_gtk_file_chooser_set_create_folders) (GtkFileChooser *, gboolean);
-static XX_gtk_file_chooser_set_create_folders fl_gtk_file_chooser_set_create_folders = NULL;
-
-// gboolean gtk_file_chooser_get_select_multiple(GtkFileChooser *chooser);
-typedef gboolean (*XX_gtk_file_chooser_get_select_multiple)(GtkFileChooser *);
-static XX_gtk_file_chooser_get_select_multiple fl_gtk_file_chooser_get_select_multiple = NULL;
-
-// void gtk_widget_hide(GtkWidget *widget);
-typedef void (*XX_gtk_widget_hide)(GtkWidget *);
-static XX_gtk_widget_hide fl_gtk_widget_hide = NULL;
-
-// gchar * gtk_file_chooser_get_filename(GtkFileChooser *chooser);
-typedef gchar* (*XX_gtk_file_chooser_get_filename)(GtkFileChooser *);
-static XX_gtk_file_chooser_get_filename fl_gtk_file_chooser_get_filename = NULL;
-
-// GSList * gtk_file_chooser_get_filenames(GtkFileChooser *chooser);
-typedef GSList* (*XX_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser);
-static XX_gtk_file_chooser_get_filenames fl_gtk_file_chooser_get_filenames = NULL;
-
-// gboolean gtk_main_iteration(void);
-typedef gboolean (*XX_gtk_main_iteration)(void);
-static XX_gtk_main_iteration fl_gtk_main_iteration = NULL;
-
-// gboolean gtk_events_pending(void);
-typedef gboolean (*XX_gtk_events_pending)(void);
-static XX_gtk_events_pending fl_gtk_events_pending = NULL;
-
-// GtkWidget * gtk_file_chooser_dialog_new(const gchar *title, GtkWindow *parent, GtkFileChooserAction action, const gchar *first_button_text, ...);
-typedef GtkWidget* (*XX_gtk_file_chooser_dialog_new)(const gchar *, GtkWindow *, GtkFileChooserAction, const gchar *, ...);
-static XX_gtk_file_chooser_dialog_new fl_gtk_file_chooser_dialog_new = NULL;
-
-// void gtk_file_chooser_add_filter(GtkFileChooser*, GtkFileFilter*);
-typedef void (*XX_gtk_file_chooser_add_filter)(GtkFileChooser*, GtkFileFilter*);
-static XX_gtk_file_chooser_add_filter fl_gtk_file_chooser_add_filter = NULL;
-
-// GtkFileFilter* gtk_file_chooser_get_filter(GtkFileChooser*);
-typedef GtkFileFilter* (*XX_gtk_file_chooser_get_filter)(GtkFileChooser*);
-static XX_gtk_file_chooser_get_filter fl_gtk_file_chooser_get_filter = NULL;
-
-// void gtk_file_chooser_set_filter(GtkFileChooser*, GtkFileFilter*);
-typedef void (*XX_gtk_file_chooser_set_filter)(GtkFileChooser*, GtkFileFilter*);
-static XX_gtk_file_chooser_set_filter fl_gtk_file_chooser_set_filter = NULL;
-
-// GtkFileFilter * gtk_file_filter_new();
-typedef GtkFileFilter* (*XX_gtk_file_filter_new)(void);
-static XX_gtk_file_filter_new fl_gtk_file_filter_new = NULL;
-
-// void gtk_file_filter_add_pattern(GtkFileFilter*, const gchar*);
-typedef void (*XX_gtk_file_filter_add_pattern)(GtkFileFilter*, const gchar*);
-static XX_gtk_file_filter_add_pattern fl_gtk_file_filter_add_pattern = NULL;
-
-// void gtk_file_filter_add_custom(GtkFileFilter *filter, GtkFileFilterFlags needed,
-//  GtkFileFilterFunc func, gpointer data, GDestroyNotify notify);
-typedef void (*XX_gtk_file_filter_add_custom)(GtkFileFilter *filter, GtkFileFilterFlags needed,
-					      GtkFileFilterFunc func, gpointer data, 
-					      GDestroyNotify notify);
-static XX_gtk_file_filter_add_custom fl_gtk_file_filter_add_custom = NULL;
-
-// void gtk_file_filter_set_name(GtkFileFilter*, const gchar*);
-typedef void (*XX_gtk_file_filter_set_name)(GtkFileFilter*, const gchar*);
-static XX_gtk_file_filter_set_name fl_gtk_file_filter_set_name = NULL;
-
-// const gchar* gtk_file_filter_get_name(GtkFileFilter*);
-typedef const gchar* (*XX_gtk_file_filter_get_name)(GtkFileFilter*);
-static XX_gtk_file_filter_get_name fl_gtk_file_filter_get_name = NULL;
-
-// void gtk_file_chooser_set_extra_widget(GtkFileChooser *, GtkWidget *);
-typedef void (*XX_gtk_file_chooser_set_extra_widget)(GtkFileChooser *, GtkWidget *);
-static XX_gtk_file_chooser_set_extra_widget fl_gtk_file_chooser_set_extra_widget = NULL;
-
-// void gtk_widget_show_now(GtkWidget *);
-typedef void (*XX_gtk_widget_show_now)(GtkWidget *);
-static XX_gtk_widget_show_now fl_gtk_widget_show_now = NULL;
-
-// GdkWindow* gtk_widget_get_window(GtkWidget *);
-typedef GdkWindow* (*XX_gtk_widget_get_window)(GtkWidget *);
-static XX_gtk_widget_get_window fl_gtk_widget_get_window = NULL;
-
-// Window gdk_x11_drawable_get_xid(GdkWindow *);
-typedef Window (*XX_gdk_x11_drawable_get_xid)(GdkWindow *);
-static XX_gdk_x11_drawable_get_xid fl_gdk_x11_drawable_get_xid = NULL;
-
-// GtkWidget *gtk_check_button_new_with_label(const gchar *);
-typedef GtkWidget* (*XX_gtk_check_button_new_with_label)(const gchar *);
-static XX_gtk_check_button_new_with_label fl_gtk_check_button_new_with_label = NULL;
-
-// gulong g_signal_connect_data(gpointer, const gchar *, GCallback, gpointer, GClosureNotify, GConnectFlags);
-typedef gulong (*XX_g_signal_connect_data)(gpointer, const gchar *, GCallback, gpointer, GClosureNotify, GConnectFlags);
-static XX_g_signal_connect_data fl_g_signal_connect_data = NULL;
-
-// gboolean gtk_toggle_button_get_active(GtkToggleButton *);
-typedef gboolean (*XX_gtk_toggle_button_get_active)(GtkToggleButton*);
-static XX_gtk_toggle_button_get_active fl_gtk_toggle_button_get_active = NULL;
-
-// void gtk_file_chooser_set_show_hidden(GtkFileChooser *, gboolean);
-typedef void (*XX_gtk_file_chooser_set_show_hidden)(GtkFileChooser *, gboolean);
-static XX_gtk_file_chooser_set_show_hidden fl_gtk_file_chooser_set_show_hidden = NULL;
-
-// gboolean gtk_file_chooser_get_show_hidden(GtkFileChooser *);
-typedef gboolean (*XX_gtk_file_chooser_get_show_hidden)(GtkFileChooser *);
-static XX_gtk_file_chooser_get_show_hidden fl_gtk_file_chooser_get_show_hidden = NULL;
-
-// void gtk_toggle_button_set_active(GtkToggleButton *, gboolean);
-typedef void (*XX_gtk_toggle_button_set_active)(GtkToggleButton *, gboolean);
-static XX_gtk_toggle_button_set_active fl_gtk_toggle_button_set_active = NULL;
-
-
-Fl_GTK_File_Chooser::Fl_GTK_File_Chooser(int val) : Fl_FLTK_File_Chooser(-1)
-{
-  gtkw_ptr   = NULL;    // used to hold a GtkWidget* 
-  gtkw_slist = NULL;    // will hold the returned file names in a multi-selection...
-  gtkw_count = 0;       // How many items were selected?
-  gtkw_filename = NULL; // holds the last name we read back in a single file selection...
-  gtkw_title = NULL;    // dialog title
-  _btype = val;
-  previous_filter = NULL;
-}
-
-Fl_GTK_File_Chooser::~Fl_GTK_File_Chooser()
-{
-  // Should free up resources taken for...
-  if(gtkw_ptr) { 
-    fl_gtk_widget_destroy (gtkw_ptr);
-    gtkw_ptr = NULL;
-  }
-  if(gtkw_filename) {
-    fl_g_free(gtkw_filename);
-    gtkw_filename = NULL;
-  }
-  if(gtkw_slist) {
-    GSList *iter = (GSList *)gtkw_slist;
-    while(iter) {
-      if(iter->data) fl_g_free(iter->data);
-      iter = g_slist_next(iter);
-    }
-    fl_g_slist_free((GSList *)gtkw_slist);
-    gtkw_slist = NULL;
-  }
-  gtkw_count = 0; // assume we have no files selected now
-  gtkw_title = strfree(gtkw_title);
-}
-
-void Fl_GTK_File_Chooser::type(int val) {
-  _btype = val;
-}
-
-int Fl_GTK_File_Chooser::count() const {
-  return gtkw_count;
-}
-
-const char *Fl_GTK_File_Chooser::filename() const
-{
-  if(gtkw_ptr) {
-    if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
-      return gtkw_filename;
-    }
-    else {
-      GSList *iter = (GSList *)gtkw_slist;
-      char *nm = (char *)iter->data;
-      return nm;
-    }
-  }
-  return("");
-}
-
-const char *Fl_GTK_File_Chooser::filename(int i) const
-{
-  if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
-    return gtkw_filename;
-  }
-  else {
-    if ((unsigned)i < gtkw_count) {
-      GSList *iter = (GSList *)gtkw_slist;
-      char *nm = (char *)fl_g_slist_nth_data(iter, i);
-      return nm;
-    }
-  }
-  return("");
-}
-
-void Fl_GTK_File_Chooser::title(const char *val)
-{
-  strfree(gtkw_title);
-  gtkw_title = strnew(val);
-}
-
-const char* Fl_GTK_File_Chooser::title() const
-{
-  return gtkw_title;
-}
-
-/* changes the extension of the outfile in the chooser according to newly selected filter */
-void Fl_GTK_File_Chooser::changed_output_type(const char *filter)
-{
-  if ( !(options()&Fl_Native_File_Chooser::USE_FILTER_EXT) ) return;
-  if (strchr(filter, '(') || strchr(filter, '{') || strchr(filter+1, '*') || strncmp(filter, "*.", 2)) return;
-  const char *p = fl_gtk_file_chooser_get_filename((GtkFileChooser*)gtkw_ptr);
-  if (!p) return;
-  p = fl_filename_name(p);
-  const char *q = strrchr(p, '.');
-  if (!q) q = p + strlen(p);
-  char *r = new char[strlen(p) + strlen(filter)];
-  strcpy(r, p);
-  strcpy(r + (q - p), filter + 1);
-  fl_gtk_file_chooser_set_current_name((GtkFileChooser*)gtkw_ptr, r);
-  delete[] r;
-}
-
-/* Filters files before display in chooser. 
- Also used to detect when the filter just changed */
-gboolean Fl_GTK_File_Chooser::custom_gtk_filter_function(const GtkFileFilterInfo *info, Fl_GTK_File_Chooser::pair* p)
-{
-  if (p->running->previous_filter != p->filter) {
-    p->running->changed_output_type(p->filter);
-    p->running->previous_filter = p->filter;
-    }
-  return (gboolean)fl_filename_match(fl_filename_name(info->filename), p->filter);
-}
-
-void Fl_GTK_File_Chooser::free_pair(Fl_GTK_File_Chooser::pair *p)
-{
-  delete p;
-}
-
-static void hidden_files_cb(GtkToggleButton *togglebutton, gpointer user_data)
-{
-  gboolean state = fl_gtk_toggle_button_get_active(togglebutton);
-  fl_gtk_file_chooser_set_show_hidden((GtkFileChooser*)user_data, state);
-}
-
-int Fl_GTK_File_Chooser::show()
-{
-  // The point here is that after running a GTK dialog, the calling program's current locale is modified.
-  // To avoid that, we memorize the calling program's current locale, and the locale as modified
-  // by GTK after the first dialog use. We restore the calling program's current locale 
-  // before returning, and we set the locale as modified by GTK before subsequent GTK dialog uses.
-  static bool first = true;
-  char *p;
-  char *before = NULL;
-  static char *gtk_wants = NULL;
-  fl_open_display();
-  // record in before the calling program's current locale
-  p = setlocale(LC_ALL, NULL);
-  if (p) before = strdup(p);
-  if (gtk_wants) { // set the locale as GTK 'wants it'
-    setlocale(LC_ALL, gtk_wants);
-  }
-  int retval = fl_gtk_chooser_wrapper(); // may change the locale
-  if (first) {
-    first = false;
-    // record in gtk_wants the locale as modified by the GTK dialog
-    p = setlocale(LC_ALL, NULL);
-    if (p) gtk_wants = strdup(p);
-  }
-  if (before) {
-    setlocale(LC_ALL, before); // restore calling program's current locale
-    free(before);
-    }
-  return retval;
-}
-
-static char *extract_dir_from_path(const char *path)
-{
-  static char *dir = NULL;
-  if (fl_filename_isdir(path)) {
-    return (char*)path;
-  }
-  if (*path != '/') return NULL;
-  if (dir) free(dir);
-  dir = strdup(path);
-  do {
-    char *p = strrchr(dir, '/');
-    if (p == dir) p++;
-    *p = 0;
-    }
-  while (!fl_filename_isdir(dir));
-  return dir;
-}
-
-static void run_response_handler(GtkDialog *dialog, gint response_id, gpointer data)
-{
-  gint *ri = (gint *)data;
-  *ri = response_id;
-}
-
-
-int Fl_GTK_File_Chooser::fl_gtk_chooser_wrapper()
-{
-  int result = 1;
-  static int have_gtk_init = 0;
-  char *p;
-  
-  if(!have_gtk_init) {
-    have_gtk_init = -1;
-    int ac = 0;
-    fl_gtk_init_check(&ac, NULL);
-  }
-  
-  if(gtkw_ptr) { // discard the previous dialog widget
-    fl_gtk_widget_destroy (gtkw_ptr);
-    gtkw_ptr = NULL;
-  }
-  
-  // set the dialog action type
-  GtkFileChooserAction gtw_action_type;
-  switch (_btype) {
-    case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
-    case Fl_Native_File_Chooser::BROWSE_MULTI_DIRECTORY:
-      gtw_action_type = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
-      break;
-      
-    case Fl_Native_File_Chooser::BROWSE_SAVE_FILE:
-      gtw_action_type = GTK_FILE_CHOOSER_ACTION_SAVE;
-      break;
-      
-    case Fl_Native_File_Chooser::BROWSE_SAVE_DIRECTORY:
-      gtw_action_type = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
-      break;
-      
-    case Fl_Native_File_Chooser::BROWSE_MULTI_FILE:
-    case Fl_Native_File_Chooser::BROWSE_FILE:
-    default:
-      gtw_action_type = GTK_FILE_CHOOSER_ACTION_OPEN;
-      break;
-  }
-  // create a new dialog
-  gtkw_ptr = fl_gtk_file_chooser_dialog_new (gtkw_title,
-					     NULL, /* parent_window */
-					     gtw_action_type,
-					     GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-					     gtw_action_type == GTK_FILE_CHOOSER_ACTION_SAVE || gtw_action_type == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER ? 
-					     GTK_STOCK_SAVE : GTK_STOCK_OPEN, 
-					     GTK_RESPONSE_ACCEPT,
-					     NULL);
-  // did we create a valid dialog widget?
-  if(!gtkw_ptr) {
-    // fail
-    return -1;
-  }
-  
-  // set the dialog properties
-  switch (_btype) {
-    case Fl_Native_File_Chooser::BROWSE_MULTI_DIRECTORY:
-    case Fl_Native_File_Chooser::BROWSE_MULTI_FILE:
-      fl_gtk_file_chooser_set_select_multiple((GtkFileChooser *)gtkw_ptr, TRUE);
-      break;
-      
-    case Fl_Native_File_Chooser::BROWSE_SAVE_FILE:
-      if (_preset_file)fl_gtk_file_chooser_set_current_name ((GtkFileChooser *)gtkw_ptr, fl_filename_name(_preset_file));
-      /* FALLTHROUGH */
-    case Fl_Native_File_Chooser::BROWSE_SAVE_DIRECTORY:
-      fl_gtk_file_chooser_set_create_folders((GtkFileChooser *)gtkw_ptr, TRUE);
-      fl_gtk_file_chooser_set_do_overwrite_confirmation ((GtkFileChooser *)gtkw_ptr, (_options & Fl_Native_File_Chooser::SAVEAS_CONFIRM)?TRUE:FALSE);
-      break;
-      
-    case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
-    case Fl_Native_File_Chooser::BROWSE_FILE:
-    default:
-      break;
-  }
-  
-  if (_directory && _directory[0]) {
-    p = extract_dir_from_path(_directory);
-    if (p) fl_gtk_file_chooser_set_current_folder((GtkFileChooser *)gtkw_ptr, p);
-  }
-  else if (_preset_file) {
-    p = extract_dir_from_path(_preset_file);
-    if (p) fl_gtk_file_chooser_set_current_folder((GtkFileChooser *)gtkw_ptr, p);
-  }
-  
-  GtkFileFilter **filter_tab = NULL;
-  if (_parsedfilt) {
-    filter_tab = new GtkFileFilter*[_nfilters];
-    char *filter = strdup(_parsedfilt);
-    p = strtok(filter, "\t");
-    int count = 0;
-    while (p) {
-      filter_tab[count] = fl_gtk_file_filter_new();
-      fl_gtk_file_filter_set_name(filter_tab[count], p);
-      p = strchr(p, '(') + 1;
-      char *q = strchr(p, ')'); *q = 0;
-      fl_gtk_file_filter_add_custom(filter_tab[count], 
-				    GTK_FILE_FILTER_FILENAME, 
-				    (GtkFileFilterFunc)Fl_GTK_File_Chooser::custom_gtk_filter_function, 
-				    new Fl_GTK_File_Chooser::pair(this, p), 
-				    (GDestroyNotify)Fl_GTK_File_Chooser::free_pair);
-      fl_gtk_file_chooser_add_filter((GtkFileChooser *)gtkw_ptr, filter_tab[count]);
-      p = strtok(NULL, "\t");
-      count++;
-    }
-    free(filter);
-    fl_gtk_file_chooser_set_filter((GtkFileChooser *)gtkw_ptr, filter_tab[_filtvalue < _nfilters?_filtvalue:0]);
-    previous_filter = NULL;
-    if (gtw_action_type == GTK_FILE_CHOOSER_ACTION_OPEN) {
-      GtkFileFilter* gfilter = fl_gtk_file_filter_new();
-      fl_gtk_file_filter_set_name(gfilter, Fl_File_Chooser::all_files_label);
-      fl_gtk_file_filter_add_pattern(gfilter, "*");
-      fl_gtk_file_chooser_add_filter((GtkFileChooser *)gtkw_ptr, gfilter);
-    }
-  }
-  
-  GtkWidget *toggle = fl_gtk_check_button_new_with_label(Fl_File_Chooser::hidden_label);
-  fl_gtk_file_chooser_set_extra_widget((GtkFileChooser *)gtkw_ptr, toggle);
-  fl_g_signal_connect_data(toggle, "toggled", G_CALLBACK(hidden_files_cb), gtkw_ptr, NULL, (GConnectFlags) 0);
-  Fl_Window* firstw = Fl::first_window();
-  fl_gtk_widget_show_now(gtkw_ptr); // map the GTK window on screen
-  if (firstw) {
-    GdkWindow* gdkw = fl_gtk_widget_get_window(gtkw_ptr);
-    Window xw = fl_gdk_x11_drawable_get_xid(gdkw); // get the X11 ref of the GTK window
-    XSetTransientForHint(fl_display, xw, fl_xid(firstw)); // set the GTK window transient for the last FLTK win
-    }
-  gboolean state = fl_gtk_file_chooser_get_show_hidden((GtkFileChooser *)gtkw_ptr);
-  fl_gtk_toggle_button_set_active((GtkToggleButton *)toggle, state);
-  
-  gint response_id = GTK_RESPONSE_NONE;
-  fl_g_signal_connect_data(gtkw_ptr, "response", G_CALLBACK(run_response_handler), &response_id, NULL, (GConnectFlags) 0);
-  while (response_id == GTK_RESPONSE_NONE) { // loop that shows the GTK dialog window
-    fl_gtk_main_iteration(); // one iteration of the GTK event loop
-    while (XEventsQueued(fl_display, QueuedAfterReading)) { // emulate modal dialog
-      XEvent xevent;
-      XNextEvent(fl_display, &xevent);
-      Window xid = xevent.xany.window;
-      if (xevent.type == ConfigureNotify) xid = xevent.xmaprequest.window;
-      if (!fl_find(xid)) continue; // skip events to non-FLTK windows
-      // process Expose and ConfigureNotify events
-      if ( xevent.type == Expose || xevent.type == ConfigureNotify ) fl_handle(xevent); 
-    }
-    Fl::flush(); // do the drawings needed after Expose events
-  } 
-  
-  if (response_id == GTK_RESPONSE_ACCEPT) {
-    if (_parsedfilt) {
-      GtkFileFilter *gfilter = fl_gtk_file_chooser_get_filter((GtkFileChooser *)gtkw_ptr);
-      for (_filtvalue = 0; _filtvalue < _nfilters; _filtvalue++) {
-	if (filter_tab[_filtvalue] == gfilter) break;
-      }
-    }
-    
-    // discard any filenames or lists from previous calls
-    if(gtkw_filename) {
-      fl_g_free(gtkw_filename);
-      gtkw_filename = NULL;
-    }
-    if(gtkw_slist) {
-      GSList *iter = (GSList *)gtkw_slist;
-      while(iter) {
-        if(iter->data) fl_g_free(iter->data);
-        iter = g_slist_next(iter);
-      }
-      fl_g_slist_free((GSList *)gtkw_slist);
-      gtkw_slist = NULL;
-    }
-    gtkw_count = 0; // assume we have no files selected now
-    
-    if(fl_gtk_file_chooser_get_select_multiple((GtkFileChooser *)gtkw_ptr) == FALSE) {
-      gtkw_filename = fl_gtk_file_chooser_get_filename ((GtkFileChooser *)gtkw_ptr);
-      if (gtkw_filename) {
-        gtkw_count = 1;
-        result = 0;
-        //printf("single: %s\n", gtkw_filename);
-      }
-    }
-    else {
-      gtkw_slist = fl_gtk_file_chooser_get_filenames((GtkFileChooser *)gtkw_ptr);
-      gtkw_count = fl_g_slist_length((GSList *)gtkw_slist);
-      if(gtkw_count) result = 0;
-      
-      //      puts("multiple");
-      //      GSList *iter = (GSList *)gtkw_slist;
-      //      printf ("Selected %d files\n", gtkw_count);
-      //      while(iter) {
-      //        char *nm = (char *)iter->data;
-      //        printf("%s\n", nm);
-      //        iter = g_slist_next(iter);
-      //      }
-    }
-  }
-  delete[] filter_tab;
-  if ( response_id == GTK_RESPONSE_DELETE_EVENT) gtkw_ptr = NULL;
-  else fl_gtk_widget_hide (gtkw_ptr);
-  
-  // I think this is analogus to doing an Fl::check() - we need this here to make sure
-  // the GtkFileChooserDialog is removed from the display correctly
-  while (fl_gtk_events_pending ()) fl_gtk_main_iteration (); 
-  
-  return result;
-} // fl_gtk_chooser_wrapper
-
-#if HAVE_DLSYM && HAVE_DLFCN_H
-// macro to help with the symbol loading boilerplate...
-#  define GET_SYM(SSS, LLL) \
-dlerror();    /* Clear any existing error */  \
-fl_##SSS = (XX_##SSS)dlsym(LLL, #SSS);        \
-if ((pc_dl_error = dlerror()) != NULL)  {     \
-fprintf(stderr, "%s\n", pc_dl_error);       \
-did_find_GTK_libs = 0;                      \
-return; }
-
-static void* fl_dlopen(const char *filename1, const char *filename2)
-{
-  void *ptr = dlopen(filename1, RTLD_LAZY | RTLD_GLOBAL);
-  if (!ptr) ptr = dlopen(filename2, RTLD_LAZY | RTLD_GLOBAL);
-  return ptr;
-}
-#endif
-
-/* 
- * Use dlopen to see if we can load the gtk dynamic libraries that
- * will allow us to create a GtkFileChooserDialog() on the fly,
- * without linking to the GTK libs at compile time.
- */
-void Fl_GTK_File_Chooser::probe_for_GTK_libs(void) {
-#if HAVE_DLSYM && HAVE_DLFCN_H
-  void *ptr_glib    = NULL;
-  void *ptr_gtk     = NULL;
-  
-#   ifdef __APPLE_CC__ // allows testing on Darwin + X11
-  ptr_glib    = dlopen("/sw/lib/libglib-2.0.dylib", RTLD_LAZY | RTLD_GLOBAL);
-#   else
-  ptr_glib    = fl_dlopen("libglib-2.0.so", "libglib-2.0.so.0");
-#   endif
-  // Try first with GTK2
-#   ifdef __APPLE_CC__ // allows testing on Darwin + X11
-  ptr_gtk     = dlopen("/sw/lib/libgtk-x11-2.0.dylib", RTLD_LAZY | RTLD_GLOBAL);
-#else
-  ptr_gtk     = fl_dlopen("libgtk-x11-2.0.so", "libgtk-x11-2.0.so.0");
-#endif
-  if (ptr_gtk && ptr_glib) {
-#ifdef DEBUG
-    puts("selected GTK-2\n");
-#endif
-  }
-  else {// Try then with GTK3
-    ptr_gtk     = fl_dlopen("libgtk-3.so", "libgtk-3.so.0");
-#ifdef DEBUG
-    if (ptr_gtk && ptr_glib) {
-      puts("selected GTK-3\n");
-    }
-#endif
-  }
-  
-  if((!ptr_glib) || (!ptr_gtk)) {
-#ifdef DEBUG
-    puts("Failure to load libglib or libgtk");
-#endif
-    did_find_GTK_libs = 0;
-    return;
-  }
-  
-  char *pc_dl_error; // used to report errors by the GET_SYM macro...
-  // items we need from GLib
-  GET_SYM(g_free, ptr_glib);
-  GET_SYM(g_slist_nth_data, ptr_glib);
-  GET_SYM(g_slist_length, ptr_glib);
-  GET_SYM(g_slist_free, ptr_glib);
-  // items we need from GTK
-  GET_SYM(gtk_init_check, ptr_gtk);
-  GET_SYM(gtk_widget_destroy, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_select_multiple, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_do_overwrite_confirmation, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_current_name, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_current_folder, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_create_folders, ptr_gtk);
-  GET_SYM(gtk_file_chooser_get_select_multiple, ptr_gtk);
-  GET_SYM(gtk_widget_hide, ptr_gtk);
-  GET_SYM(gtk_file_chooser_get_filename, ptr_gtk);
-  GET_SYM(gtk_file_chooser_get_filenames, ptr_gtk);
-  GET_SYM(gtk_main_iteration, ptr_gtk);
-  GET_SYM(gtk_events_pending, ptr_gtk);
-  GET_SYM(gtk_file_chooser_dialog_new, ptr_gtk);
-  GET_SYM(gtk_file_chooser_add_filter, ptr_gtk);
-  GET_SYM(gtk_file_chooser_get_filter, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_filter, ptr_gtk);
-  GET_SYM(gtk_file_filter_new, ptr_gtk);
-  GET_SYM(gtk_file_filter_add_pattern, ptr_gtk);
-  GET_SYM(gtk_file_filter_add_custom, ptr_gtk);
-  GET_SYM(gtk_file_filter_set_name, ptr_gtk);
-  GET_SYM(gtk_file_filter_get_name, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_extra_widget, ptr_gtk);
-  GET_SYM(gtk_widget_show_now, ptr_gtk);
-  GET_SYM(gtk_widget_get_window, ptr_gtk);
-  GET_SYM(gdk_x11_drawable_get_xid, ptr_gtk);
-  GET_SYM(gtk_check_button_new_with_label, ptr_gtk);
-  GET_SYM(g_signal_connect_data, ptr_gtk);
-  GET_SYM(gtk_toggle_button_get_active, ptr_gtk);
-  GET_SYM(gtk_file_chooser_set_show_hidden, ptr_gtk);
-  GET_SYM(gtk_file_chooser_get_show_hidden, ptr_gtk);
-  GET_SYM(gtk_toggle_button_set_active, ptr_gtk);
-  
-  did_find_GTK_libs = 1;
-#endif
-} // probe_for_GTK_libs
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser_MAC.mm
+++ /dev/null
@@ -1,667 +1,0 @@
-// "$Id$"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// TODO:
-//	o When doing 'open file', only dir is preset, not filename.
-//        Possibly 'preset_file' could be used to select the filename.
-//
-
-#ifdef __APPLE__
-
-#include "Fl_Native_File_Chooser_common.cxx"		// strnew/strfree/strapp/chrcat
-#include <libgen.h>		// dirname(3)
-#include <sys/types.h>		// stat(2)
-#include <sys/stat.h>		// stat(2)
-
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/filename.H>
-
-// FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS
-void Fl_Native_File_Chooser::clear_pathnames() {
-  if ( _pathnames ) {
-    while ( --_tpathnames >= 0 ) {
-      _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]);
-    }
-    delete [] _pathnames;
-    _pathnames = NULL;
-  }
-  _tpathnames = 0;
-}
-
-// SET A SINGLE PATHNAME
-void Fl_Native_File_Chooser::set_single_pathname(const char *s) {
-  clear_pathnames();
-  _pathnames = new char*[1];
-  _pathnames[0] = strnew(s);
-  _tpathnames = 1;
-}
-
-// CONSTRUCTOR
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-  _btype          = val;
-  _panel = NULL;
-  _options        = NO_OPTIONS;
-  _pathnames      = NULL;
-  _tpathnames     = 0;
-  _title          = NULL;
-  _filter         = NULL;
-  _filt_names     = NULL;
-  memset(_filt_patt, 0, sizeof(char*) * MAXFILTERS);
-  _filt_total     = 0;
-  _filt_value     = 0;
-  _directory      = NULL;
-  _preset_file    = NULL;
-  _errmsg         = NULL;
-}
-
-// DESTRUCTOR
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  // _opts		// nothing to manage
-  // _options		// nothing to manage
-  // _keepstate		// nothing to manage
-  // _tempitem		// nothing to manage
-  clear_pathnames();
-  _directory   = strfree(_directory);
-  _title       = strfree(_title);
-  _preset_file = strfree(_preset_file);
-  _filter      = strfree(_filter);
-  //_filt_names		// managed by clear_filters()
-  //_filt_patt[i]	// managed by clear_filters()
-  //_filt_total		// managed by clear_filters()
-  clear_filters();
-  //_filt_value		// nothing to manage
-  _errmsg = strfree(_errmsg);
-}
-
-// GET TYPE OF BROWSER
-int Fl_Native_File_Chooser::type() const {
-  return(_btype);
-}
-
-// SET OPTIONS
-void Fl_Native_File_Chooser::options(int val) {
-  _options = val;
-}
-
-// GET OPTIONS
-int Fl_Native_File_Chooser::options() const {
-  return(_options);
-}
-
-// SHOW THE BROWSER WINDOW
-//     Returns:
-//         0 - user picked a file
-//         1 - user cancelled
-//        -1 - failed; errmsg() has reason
-//
-int Fl_Native_File_Chooser::show() {
-
-  // Make sure fltk interface updates before posting our dialog
-  Fl::flush();
-  
-  // POST BROWSER
-  int err = post();
-
-  return(err);
-}
-
-// SET ERROR MESSAGE
-//     Internal use only.
-//
-void Fl_Native_File_Chooser::errmsg(const char *msg) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(msg);
-}
-
-// RETURN ERROR MESSAGE
-const char *Fl_Native_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-// GET FILENAME
-const char* Fl_Native_File_Chooser::filename() const {
-  if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]);
-  return("");
-}
-
-// GET FILENAME FROM LIST OF FILENAMES
-const char* Fl_Native_File_Chooser::filename(int i) const {
-  if ( _pathnames && i < _tpathnames ) return(_pathnames[i]);
-  return("");
-}
-
-// GET TOTAL FILENAMES CHOSEN
-int Fl_Native_File_Chooser::count() const {
-  return(_tpathnames);
-}
-
-// PRESET PATHNAME
-//     Value can be NULL for none.
-//
-void Fl_Native_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-// GET PRESET PATHNAME
-//     Returned value can be NULL if none set.
-//
-const char* Fl_Native_File_Chooser::directory() const {
-  return(_directory);
-}
-
-// SET TITLE
-//     Value can be NULL if no title desired.
-//
-void Fl_Native_File_Chooser::title(const char *val) {
-  _title = strfree(_title);
-  _title = strnew(val);
-}
-
-// GET TITLE
-//     Returned value can be NULL if none set.
-//
-const char *Fl_Native_File_Chooser::title() const {
-  return(_title);
-}
-
-// SET FILTER
-//     Can be NULL if no filter needed
-//
-void Fl_Native_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  _filter = strnew(val);
-
-  // Parse filter user specified
-  //     IN: _filter = "C Files\t*.{cxx,h}\nText Files\t*.txt"
-  //    OUT: _filt_names   = "C Files\tText Files"
-  //         _filt_patt[0] = "*.{cxx,h}"
-  //         _filt_patt[1] = "*.txt"
-  //         _filt_total   = 2
-  //
-  parse_filter(_filter);
-}
-
-// GET FILTER
-//     Returned value can be NULL if none set.
-//
-const char *Fl_Native_File_Chooser::filter() const {
-  return(_filter);
-}
-
-// CLEAR ALL FILTERS
-//    Internal use only.
-//
-void Fl_Native_File_Chooser::clear_filters() {
-  _filt_names = strfree(_filt_names);
-  for (int i=0; i<_filt_total; i++) {
-    _filt_patt[i] = strfree(_filt_patt[i]);
-  }
-  _filt_total = 0;
-}
-
-// PARSE USER'S FILTER SPEC
-//    Parses user specified filter ('in'),
-//    breaks out into _filt_patt[], _filt_names, and _filt_total.
-//
-//    Handles:
-//    IN:                                   OUT:_filt_names    OUT: _filt_patt
-//    ------------------------------------  ------------------ ---------------
-//    "*.{ma,mb}"                           "*.{ma,mb} Files"  "*.{ma,mb}"
-//    "*.[abc]"                             "*.[abc] Files"    "*.[abc]"
-//    "*.txt"                               "*.txt Files"      "*.c"
-//    "C Files\t*.[ch]"                     "C Files"          "*.[ch]"
-//    "C Files\t*.[ch]\nText Files\t*.cxx"  "C Files"          "*.[ch]"
-//
-//    Parsing Mode:
-//         IN:"C Files\t*.{cxx,h}"
-//             |||||||  |||||||||
-//       mode: nnnnnnn  wwwwwwwww
-//             \_____/  \_______/
-//              Name     Wildcard
-//
-void Fl_Native_File_Chooser::parse_filter(const char *in) {
-  clear_filters();
-  if ( ! in ) return;
-  int has_name = strchr(in, '\t') ? 1 : 0;
-
-  char mode = has_name ? 'n' : 'w';	// parse mode: n=title, w=wildcard
-  char wildcard[1024] = "";		// parsed wildcard
-  char name[1024] = "";
-
-  // Parse filter user specified
-  for ( ; 1; in++ ) {
-
-    //// DEBUG
-    //// printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n",
-    ////                    *in,  mode,     name,     wildcard);
-    
-    switch (*in) {
-      // FINISHED PARSING NAME?
-      case '\t':
-	if ( mode != 'n' ) goto regchar;
-	mode = 'w';
-	break;
-
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar;
-
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-	// TITLE
-	//     If user didn't specify a name, make one
-	//
-	if ( name[0] == '\0' ) {
-	  sprintf(name, "%.*s Files", (int)sizeof(name)-10, wildcard);
-	}
-	// APPEND NEW FILTER TO LIST
-	if ( wildcard[0] ) {
-	  // Add to filtername list
-	  //     Tab delimit if more than one. We later break
-	  //     tab delimited string into CFArray with 
-	  //     CFStringCreateArrayBySeparatingStrings()
-	  //
-	  if ( _filt_total ) {
-	      _filt_names = strapp(_filt_names, "\t");
-	  }
-	  _filt_names = strapp(_filt_names, name);
-
-	  // Add filter to the pattern array
-	  _filt_patt[_filt_total++] = strnew(wildcard);
-	}
-	// RESET
-	wildcard[0] = name[0] = '\0';
-	mode = strchr(in, '\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) return;	// done
-	else continue;			// not done yet, more filters
-
-      // Parse all other chars
-      default:				// handle all non-special chars
-      regchar:				// handle regular char
-	switch ( mode ) {
-	  case 'n': chrcat(name, *in);     continue;
-	  case 'w': chrcat(wildcard, *in); continue;
-	}
-	break;
-    }
-  }
-  //NOTREACHED
-}
-
-// SET PRESET FILE
-//     Value can be NULL for none.
-//
-void Fl_Native_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-// PRESET FILE
-//     Returned value can be NULL if none set.
-//
-const char* Fl_Native_File_Chooser::preset_file() const {
-  return(_preset_file);
-}
-
-void Fl_Native_File_Chooser::filter_value(int val) {
-  _filt_value = val;
-}
-
-int Fl_Native_File_Chooser::filter_value() const {
-  return(_filt_value);
-}
-
-int Fl_Native_File_Chooser::filters() const {
-  return(_filt_total);
-}
-
-#import <Cocoa/Cocoa.h>
-#define UNLIKELYPREFIX "___fl_very_unlikely_prefix_"
-
-int Fl_Native_File_Chooser::get_saveas_basename(void) {
-  char *q = strdup( [[[(NSSavePanel*)_panel URL] path] UTF8String] );
-  if ( !(_options & SAVEAS_CONFIRM) ) {
-    const char *d = [[[[(NSSavePanel*)_panel URL] path] stringByDeletingLastPathComponent] UTF8String];
-    int l = (int)strlen(d) + 1;
-    if (strcmp(d, "/") == 0) l = 1;
-    int lu = strlen(UNLIKELYPREFIX);
-    // Remove UNLIKELYPREFIX between directory and filename parts
-    memmove(q + l, q + l + lu, strlen(q + l + lu) + 1);
-  }
-  set_single_pathname( q );
-  free(q);
-  return 0;
-}
-
-// SET THE TYPE OF BROWSER
-void Fl_Native_File_Chooser::type(int val) {
-  _btype = val;
-}
-
-/* Input
- filter=  "C files\t*.{c,h}\nText files\t*.txt\n"
- patterns[0] = "*.{c,h}"
- patterns[1] = "*.txt"
- count = 2
- Return:
- "C files (*.{c,h})\nText files (*.txt)\n"
- */
-static char *prepareMacFilter(int count, const char *filter, char **patterns) {
-  int rank = 0, l = 0;
-  for (int i = 0; i < count; i++) {
-    l += strlen(patterns[i]) + 3;
-    }
-  const char *p = filter;
-  char *q; q = new char[strlen(p) + l + 1];
-  const char *r, *s;
-  char *t;
-  t = q;
-  do {	// copy to t what is in filter removing what is between \t and \n, if any
-    r = strchr(p, '\n');
-    if (!r) r = p + strlen(p);
-    s = strchr(p, '\t');
-    if (s && s < r) { 
-      memcpy(q, p, s - p); 
-      q += s - p; 
-      if (rank < count) { sprintf(q, " (%s)", patterns[rank]); q += strlen(q); }
-    }
-    else { 
-      memcpy(q, p, r - p); 
-      q += r - p; 
-    }
-    rank++;
-    *(q++) = '\n'; 
-    if (*r) p = r + 1; else p = r;
-  } while(*p);
-  *q = 0;
-  return t;
-}
-  
-@interface FLopenDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSOpenSavePanelDelegate>
-#endif
-{
-  NSPopUpButton *nspopup;
-  char **filter_pattern;
-}
-- (FLopenDelegate*)setPopup:(NSPopUpButton*)popup filter_pattern:(char**)pattern;
-- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
-- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url;
-@end
-@implementation FLopenDelegate
-- (FLopenDelegate*)setPopup:(NSPopUpButton*)popup filter_pattern:(char**)pattern
-{
-  nspopup = popup;
-  filter_pattern = pattern;
-  return self;
-}
-- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename
-{
-  if ( [nspopup indexOfSelectedItem] == [nspopup numberOfItems] - 1) return YES;
-  BOOL isdir = NO;
-  [[NSFileManager defaultManager] fileExistsAtPath:filename isDirectory:&isdir];
-  if (isdir) return YES;
-  if ( fl_filename_match([filename fileSystemRepresentation], filter_pattern[ [nspopup indexOfSelectedItem] ]) ) return YES;
-  return NO;
-}
-- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url
-{
-  return [self panel:sender shouldShowFilename:[url path]];
-}
-@end
-
-@interface FLsaveDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSOpenSavePanelDelegate>
-#endif
-{
-  NSSavePanel *dialog;
-  BOOL saveas_confirm;
-}
-- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag;
-- (void)changedPopup:(id)sender;
-- (void)panel:(NSSavePanel*)p;
-- (void)option:(BOOL)o;
-@end
-@implementation FLsaveDelegate
-- (NSString *)panel:(id)sender userEnteredFilename:(NSString *)filename confirmed:(BOOL)okFlag
-{
-  if ( !okFlag || saveas_confirm ) return filename;
-  // User has clicked save, and no overwrite confirmation should occur.
-  // To get the latter, we need to change the name we return (hence the prefix):
-  return [@ UNLIKELYPREFIX stringByAppendingString:filename];
-}
-- (void)changedPopup:(id)sender
-// runs when the save panel popup menu changes output file type
-// correspondingly changes the extension of the output file name
-{
-  if (fl_mac_os_version < 100600) return; // because of setNameFieldStringValue and nameFieldStringValue
-  char *s = strdup([[(NSPopUpButton*)sender titleOfSelectedItem] UTF8String]);
-  if (!s) return;
-  char *p = strchr(s, '(');
-  if (!p) p = s;
-  p = strchr(p, '.');
-  if (!p) {free(s); return;}
-  p++;
-  while (*p == ' ') p++;
-  if (!p || *p == '{') {free(s); return;}
-  char *q = p+1;
-  while (*q != ' ' && *q != ')' && *q != 0) q++;
-  *q = 0;
-  NSString *ns = [NSString stringWithFormat:@"%@.%@", 
-		  [[dialog performSelector:@selector(nameFieldStringValue)] stringByDeletingPathExtension],
-		  [NSString stringWithUTF8String:p]];
-  free(s);
-  [dialog performSelector:@selector(setNameFieldStringValue:) withObject:ns];
-}
-- (void)panel:(NSSavePanel*)p
-{
-  dialog = p;
-}
-- (void) option:(BOOL)o
-{
-  saveas_confirm = o;
-}
-@end
-  
-static NSPopUpButton *createPopupAccessory(NSSavePanel *panel, const char *filter, const char *title, int rank)
-{
-  NSPopUpButton *popup;
-  NSRect rectview = NSMakeRect(5, 5, 350, 30 );
-  NSView *view = [[[NSView alloc] initWithFrame:rectview] autorelease];
-  NSRect rectbox = NSMakeRect(0, 3, 140, 20 );
-  NSBox *box = [[[NSBox alloc] initWithFrame:rectbox] autorelease];
-  NSRect rectpop = NSMakeRect(105, 0, 246, 30 );
-  popup = [[[NSPopUpButton alloc ] initWithFrame:rectpop pullsDown:NO] autorelease];
-  [view addSubview:box];
-  [view addSubview:popup];
-  [box setBorderType:NSNoBorder];
-  NSString *nstitle = [[NSString alloc] initWithUTF8String:title];
-  [box setTitle:nstitle];
-  [nstitle release];
-  NSFont *font = [NSFont controlContentFontOfSize:NSRegularControlSize];
-  [box setTitleFont:font];
-  [box sizeToFit];
-  // horizontally move box to fit the locale-dependent width of its title
-  NSRect r=[box frame];
-  NSPoint o = r.origin;
-  o.x = rectpop.origin.x - r.size.width + 15;
-  [box setFrameOrigin:o];
-  CFStringRef tab = CFSTR("\n");
-  CFStringRef tmp_cfs;
-  tmp_cfs = CFStringCreateWithCString(NULL, filter, kCFStringEncodingUTF8);
-  CFArrayRef array = CFStringCreateArrayBySeparatingStrings(NULL, tmp_cfs, tab);
-  CFRelease(tmp_cfs);
-  CFRelease(tab);
-  [popup addItemsWithTitles:(NSArray*)array];
-  NSMenuItem *item = [popup itemWithTitle:@""];
-  if (item) [popup removeItemWithTitle:@""];
-  CFRelease(array);
-  [popup selectItemAtIndex:rank];
-  [panel setAccessoryView:view];
-  return popup;
-}
-
-int Fl_Native_File_Chooser::runmodal()
-{
-  NSString *dir = nil;
-  NSString *fname = nil;
-  NSString *preset = nil;
-  NSInteger retval;
-  if (_preset_file) {
-    preset = [[NSString alloc] initWithUTF8String:_preset_file];
-    if (strchr(_preset_file, '/') != NULL) {
-      dir = [[NSString alloc] initWithString:[preset stringByDeletingLastPathComponent]];
-    }
-    fname = [preset lastPathComponent];
-  }
-  if (_directory && !dir) dir = [[NSString alloc] initWithUTF8String:_directory];
-  if (fl_mac_os_version >= 100600) {
-    if (dir) [(NSSavePanel*)_panel performSelector:@selector(setDirectoryURL:) withObject:[NSURL fileURLWithPath:dir]];
-    if (fname) [(NSSavePanel*)_panel performSelector:@selector(setNameFieldStringValue:) withObject:fname];
-    retval = [(NSSavePanel*)_panel runModal];
-  }
-  else {
-    retval = [(id)_panel runModalForDirectory:dir file:fname];
-  }
-  [dir release];
-  [preset release];
-  return (retval == NSFileHandlingPanelOKButton ? 1 : 0);
-}
-
-// POST BROWSER
-//     Internal use only.
-//     Assumes '_opts' has been initialized.
-//
-//     Returns:
-//         0 - user picked a file
-//         1 - user cancelled
-//        -1 - failed; errmsg() has reason
-//     
-int Fl_Native_File_Chooser::post() {
-  // INITIALIZE BROWSER
-  if ( _filt_total == 0 ) {	// Make sure they match
-    _filt_value = 0;		// TBD: move to someplace more logical?
-  }
-  fl_open_display();
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init];
-  switch (_btype) {
-    case BROWSE_FILE:
-    case BROWSE_MULTI_FILE:
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-      _panel =  [NSOpenPanel openPanel];
-      break;	  
-    case BROWSE_SAVE_DIRECTORY:
-    case BROWSE_SAVE_FILE:
-      _panel =  [NSSavePanel savePanel];
-      break;
-  }
-  BOOL is_open_panel = [(NSSavePanel*)_panel isKindOfClass:[NSOpenPanel class]];
-  if (_title) {
-    SEL title_or_message = (is_open_panel && fl_mac_os_version >= 101200) ?
-              @selector(setMessage:) : @selector(setTitle:);
-    [(NSSavePanel*)_panel performSelector:title_or_message withObject:[NSString stringWithUTF8String:_title]];
-  }
-  switch (_btype) {
-    case BROWSE_MULTI_FILE:
-      [(NSOpenPanel*)_panel setAllowsMultipleSelection:YES];
-      break;
-    case BROWSE_MULTI_DIRECTORY:
-      [(NSOpenPanel*)_panel setAllowsMultipleSelection:YES];
-      /* FALLTHROUGH */
-    case BROWSE_DIRECTORY:
-      [(NSOpenPanel*)_panel setCanChooseDirectories:YES];
-      break;
-    case BROWSE_SAVE_DIRECTORY:
-      [(NSSavePanel*)_panel setCanCreateDirectories:YES];
-      break;
-  }
-  
-  // SHOW THE DIALOG
-  NSWindow *key = [NSApp keyWindow];
-  NSPopUpButton *popup = nil;
-  if ( is_open_panel ) {
-    if (_filt_total) {
-      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
-      popup = createPopupAccessory((NSSavePanel*)_panel, t, Fl_File_Chooser::show_label, 0);
-      delete[] t;
-      [[popup menu] addItem:[NSMenuItem separatorItem]];
-      [popup addItemWithTitle:[NSString stringWithUTF8String:Fl_File_Chooser::all_files_label]];
-      [popup setAction:@selector(validateVisibleColumns)];
-      [popup setTarget:(NSObject*)_panel];
-      FLopenDelegate *openDelegate = [[[FLopenDelegate alloc] init] autorelease];
-      [openDelegate setPopup:popup filter_pattern:_filt_patt];
-      [(NSOpenPanel*)_panel setDelegate:openDelegate];
-    }
-  }
-  else {
-    FLsaveDelegate *saveDelegate = [[[FLsaveDelegate alloc] init] autorelease]; 
-    [(NSSavePanel*)_panel setAllowsOtherFileTypes:YES];
-    [(NSSavePanel*)_panel setDelegate:saveDelegate];
-    [saveDelegate option:(_options & SAVEAS_CONFIRM)];
-    if (_filt_total) {
-      if (_filt_value >= _filt_total) _filt_value = _filt_total - 1;
-      char *t = prepareMacFilter(_filt_total, _filter, _filt_patt);
-      popup = createPopupAccessory((NSSavePanel*)_panel, t, [[(NSSavePanel*)_panel nameFieldLabel] UTF8String], _filt_value);
-      delete[] t;
-      if (_options & USE_FILTER_EXT) {
-	[popup setAction:@selector(changedPopup:)];
-	[popup setTarget:saveDelegate];
-	[saveDelegate panel:(NSSavePanel*)_panel];
-      }
-      [(NSSavePanel*)_panel setCanSelectHiddenExtension:YES];
-    }
-  }
-  int retval = runmodal();
-  if (_filt_total) {
-    _filt_value = (int)[popup indexOfSelectedItem];
-  }
-  if ( retval == 1 ) {
-    if (is_open_panel) {
-      clear_pathnames();
-      NSArray *array = [(NSOpenPanel*)_panel URLs];
-      _tpathnames = (int)[array count];
-      _pathnames = new char*[_tpathnames];
-      for(int i = 0; i < _tpathnames; i++) {
-	_pathnames[i] = strnew([[(NSURL*)[array objectAtIndex:i] path] UTF8String]);
-      }
-    }
-    else get_saveas_basename();
-  }
-  [key makeKeyWindow];
-  [localPool release];
-  return (retval == 1 ? 0 : 1);
-}
-
-#endif // __APPLE__
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser_WIN32.cxx
+++ /dev/null
@@ -1,980 +1,0 @@
-// "$Id$"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2014 by Bill Spitzak and others.
-// Copyright 2004 Greg Ercolano.
-// API changes + filter improvements by Nathan Vander Wilt 2005
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Any application to multi-folder implementation:
-//     http://www.codeproject.com/dialog/selectfolder.asp
-//
-
-#ifndef FL_DOXYGEN		// PREVENT DOXYGEN'S USE OF THIS FILE
-#include <FL/Enumerations.H>
-
-#if FLTK_ABI_VERSION < 10304
-#define _ofn_ptr (&_ofn)
-#define _binf_ptr (&_binf)
-#endif
-
-#  include <stdlib.h>		// malloc
-#  include <stdio.h>		// sprintf
-#include <wchar.h>
-
-#include "Fl_Native_File_Chooser_common.cxx"		// strnew/strfree/strapp/chrcat
-
-#define FNFC_MAX_PATH 32768		// XXX: MAX_PATH under win32 is 260, too small for modern use
-
-#include <FL/Fl_Native_File_Chooser.H>
-static LPCWSTR utf8towchar(const char *in);
-static char *wchartoutf8(LPCWSTR in);
-
-#include <FL/x.H> // for fl_open_display
-
-#define LCURLY_CHR	'{'
-#define RCURLY_CHR	'}'
-#define LBRACKET_CHR	'['
-#define RBRACKET_CHR	']'
-
-// STATIC: PRINT WINDOWS 'DOUBLE NULL' STRING (DEBUG)
-#ifdef DEBUG
-#include <stdio.h>
-static void dnullprint(char *wp) {
-  if ( ! wp ) return;
-  for ( int t=0; true; t++ ) {
-    if ( wp[t] == '\0' && wp[t+1] == '\0' ) {
-      printf("\\0\\0");
-      fflush(stdout);
-      return;
-    } else if ( wp[t] == '\0' ) {
-      printf("\\0");
-    } else {
-      printf("%c",wp[t]);
-    }
-  }
-}
-#endif
-
-// RETURN LENGTH OF DOUBLENULL STRING
-//    Includes single nulls in count, excludes trailing doublenull.
-//
-//         1234 567
-//         |||/\|||
-//    IN: "one\0two\0\0"
-//   OUT: 7
-//
-static int dnulllen(const char *wp) {
-  int len = 0;
-  while ( ! ( *(wp+0) == 0 && *(wp+1) == 0 ) ) {
-    ++wp;
-    ++len;
-  }
-  return(len);
-}
-
-// STATIC: Append a string to another, leaving terminated with DOUBLE NULL.
-//     Automatically handles extending length of string.
-//     wp can be NULL (a new wp will be allocated and initialized).
-//     string must be NULL terminated.
-//     The pointer wp may be modified on return.
-//
-static void dnullcat(char*&wp, const char *string, int n = -1 ) {
-  //DEBUG printf("DEBUG: dnullcat IN: <"); dnullprint(wp); printf(">\n");
-  size_t inlen = ( n < 0 ) ? strlen(string) : n;
-  if ( ! wp ) {
-    wp = new char[inlen + 4];
-    *(wp+0) = '\0';
-    *(wp+1) = '\0';
-  } else {
-    int wplen = dnulllen(wp);
-    // Make copy of wp into larger buffer
-    char *tmp = new char[wplen + inlen + 4];
-    memcpy(tmp, wp, wplen+2);	// copy of wp plus doublenull
-    delete[] wp;		// delete old wp
-    wp = tmp;			// use new copy
-    //DEBUG printf("DEBUG: dnullcat COPY: <"); dnullprint(wp); printf("> (wplen=%d)\n", wplen);
-  }
-
-  // Find end of double null string
-  //     *wp2 is left pointing at second null.
-  //
-  char *wp2 = wp;
-  if ( *(wp2+0) != '\0' && *(wp2+1) != '\0' ) {
-    for ( ; 1; wp2++ ) {
-      if ( *(wp2+0) == '\0' && *(wp2+1) == '\0' ) {
-        wp2++;
-        break;
-      }
-    }
-  }
-
-  if ( n == -1 ) n = (int) strlen(string);
-  strncpy(wp2, string, n);
-
-  // Leave string double-null terminated
-  *(wp2+n+0) = '\0';
-  *(wp2+n+1) = '\0';
-  //DEBUG printf("DEBUG: dnullcat OUT: <"); dnullprint(wp); printf(">\n\n");
-}
-
-// CTOR
-Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
-  _btype           = val;
-  _options         = NO_OPTIONS;
-#if FLTK_ABI_VERSION >= 10304
-  _ofn_ptr = new OPENFILENAMEW;
-  _binf_ptr = new BROWSEINFOW;
-  _wpattern = 0;
-#endif
-  memset((void*)_ofn_ptr, 0, sizeof(OPENFILENAMEW));
-  _ofn_ptr->lStructSize = sizeof(OPENFILENAMEW);
-  _ofn_ptr->hwndOwner   = NULL;
-  memset((void*)_binf_ptr, 0, sizeof(BROWSEINFOW));
-  _pathnames       = NULL;
-  _tpathnames      = 0;
-  _directory       = NULL;
-  _title           = NULL;
-  _filter          = NULL;
-  _parsedfilt      = NULL;
-  _nfilters        = 0;
-  _preset_file     = NULL;
-  _errmsg          = NULL;
-}
-
-// DTOR
-Fl_Native_File_Chooser::~Fl_Native_File_Chooser() {
-  //_pathnames                // managed by clear_pathnames()
-  //_tpathnames               // managed by clear_pathnames()
-  _directory   = strfree(_directory);
-  _title       = strfree(_title);
-  _filter      = strfree(_filter);
-  //_parsedfilt               // managed by clear_filters()
-  //_nfilters                 // managed by clear_filters()
-  _preset_file = strfree(_preset_file);
-  _errmsg      = strfree(_errmsg);
-  clear_filters();
-  clear_pathnames();
-  ClearOFN();
-  ClearBINF();
-#if FLTK_ABI_VERSION >= 10304
-  delete _binf_ptr;
-  delete _ofn_ptr;
-  if ( _wpattern ) delete[] _wpattern;
-#endif
-}
-
-// SET TYPE OF BROWSER
-void Fl_Native_File_Chooser::type(int val) {
-  _btype = val;
-}
-
-// GET TYPE OF BROWSER
-int Fl_Native_File_Chooser::type() const {
-  return( _btype );
-}
-
-// SET OPTIONS
-void Fl_Native_File_Chooser::options(int val) {
-  _options = val;
-}
-
-// GET OPTIONS
-int Fl_Native_File_Chooser::options() const {
-  return(_options);
-}
-
-// PRIVATE: SET ERROR MESSAGE
-void Fl_Native_File_Chooser::errmsg(const char *val) {
-  _errmsg = strfree(_errmsg);
-  _errmsg = strnew(val);
-}
-
-// FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS
-void Fl_Native_File_Chooser::clear_pathnames() {
-  if ( _pathnames ) {
-    while ( --_tpathnames >= 0 ) {
-      _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]);
-    }
-    delete[] _pathnames;
-    _pathnames = NULL;
-  }
-  _tpathnames = 0;
-}
-
-// SET A SINGLE PATHNAME
-void Fl_Native_File_Chooser::set_single_pathname(const char *s) {
-  clear_pathnames();
-  _pathnames = new char*[1];
-  _pathnames[0] = strnew(s);
-  _tpathnames = 1;
-}
-
-// ADD PATHNAME TO EXISTING ARRAY
-void Fl_Native_File_Chooser::add_pathname(const char *s) {
-  if ( ! _pathnames ) {
-    // Create first element in array
-    ++_tpathnames;
-    _pathnames = new char*[_tpathnames];
-  } else {
-    // Grow array by 1
-    char **tmp = new char*[_tpathnames+1];		// create new buffer
-    memcpy((void*)tmp, (void*)_pathnames,
-		       sizeof(char*)*_tpathnames);	// copy old
-    delete[] _pathnames;				// delete old
-    _pathnames = tmp;					// use new
-    ++_tpathnames;
-  }
-  _pathnames[_tpathnames-1] = strnew(s);
-}
-
-// FREE A PIDL (Pointer to IDentity List)
-static void FreePIDL(LPITEMIDLIST pidl) {
-  IMalloc *imalloc = NULL;
-  if ( SUCCEEDED(SHGetMalloc(&imalloc)) ) {
-    imalloc->Free(pidl);
-    imalloc->Release();
-    imalloc = NULL;
-  }
-}
-
-// CLEAR MICROSOFT OFN (OPEN FILE NAME) CLASS
-void Fl_Native_File_Chooser::ClearOFN() {
-  // Free any previously allocated lpstrFile before zeroing out _ofn_ptr
-  if ( _ofn_ptr->lpstrFile ) {
-    delete[] _ofn_ptr->lpstrFile;
-    _ofn_ptr->lpstrFile = NULL;
-  }
-  if ( _ofn_ptr->lpstrInitialDir ) {
-    delete[] (TCHAR*) _ofn_ptr->lpstrInitialDir; //msvc6 compilation fix
-    _ofn_ptr->lpstrInitialDir = NULL;
-  }
-  _ofn_ptr->lpstrFilter = NULL;		// (deleted elsewhere)
-  int temp = _ofn_ptr->nFilterIndex;		// keep the filter_value
-  memset((void*)_ofn_ptr, 0, sizeof(OPENFILENAMEW));
-  _ofn_ptr->lStructSize  = sizeof(OPENFILENAMEW);
-  _ofn_ptr->nFilterIndex = temp;
-}
-
-// CLEAR MICROSOFT BINF (BROWSER INFO) CLASS
-void Fl_Native_File_Chooser::ClearBINF() {
-  if ( _binf_ptr->pidlRoot ) {
-    FreePIDL((ITEMIDLIST*)_binf_ptr->pidlRoot);
-    _binf_ptr->pidlRoot = NULL;
-  }
-  memset((void*)_binf_ptr, 0, sizeof(BROWSEINFOW));
-}
-
-// CONVERT WINDOWS BACKSLASHES TO UNIX FRONTSLASHES
-void Fl_Native_File_Chooser::Win2Unix(char *s) {
-  for ( ; *s; s++ )
-    if ( *s == '\\' ) *s = '/';
-}
-
-// CONVERT UNIX FRONTSLASHES TO WINDOWS BACKSLASHES
-void Fl_Native_File_Chooser::Unix2Win(char *s) {
-  for ( ; *s; s++ )
-    if ( *s == '/' ) *s = '\\';
-}
-
-// SAVE THE CURRENT WORKING DIRECTORY
-//     Returns a malloc()ed copy of the cwd that can
-//     later be freed with RestoreCWD(). May return 0 on error.
-//
-static char *SaveCWD() {
-  char *thecwd = 0;
-  DWORD thecwdsz = GetCurrentDirectory(0,0);
-  if ( thecwdsz > 0 ) {
-    thecwd = (char*)malloc(thecwdsz);
-    if (GetCurrentDirectory(thecwdsz, thecwd) == 0 ) {
-      free(thecwd); thecwd = 0;
-    }
-  }
-  return thecwd;
-}
-
-// RESTORES THE CWD SAVED BY SaveCWD(), FREES STRING
-//    Always returns NULL (string was freed).
-//
-static void RestoreCWD(char *thecwd) {
-  if ( !thecwd ) return;
-  SetCurrentDirectory(thecwd);
-  free(thecwd);
-}
-
-// SHOW FILE BROWSER
-int Fl_Native_File_Chooser::showfile() {
-  ClearOFN();
-  clear_pathnames();
-  size_t fsize = FNFC_MAX_PATH;
-  _ofn_ptr->Flags |= OFN_NOVALIDATE;	// prevent disabling of front slashes
-  _ofn_ptr->Flags |= OFN_HIDEREADONLY;	// hide goofy readonly flag
-  // USE NEW BROWSER
-  _ofn_ptr->Flags |= OFN_EXPLORER;	// use newer explorer windows
-  _ofn_ptr->Flags |= OFN_ENABLESIZING;	// allow window to be resized (hey, why not?)
-  _ofn_ptr->Flags |= OFN_NOCHANGEDIR;	// XXX: docs say ineffective on XP/2K/NT, but set it anyway..
-
-  switch ( _btype ) {
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-    case BROWSE_SAVE_DIRECTORY:
-      abort();				// never happens: handled by showdir()
-    case BROWSE_FILE:
-      break;
-    case BROWSE_MULTI_FILE:
-      _ofn_ptr->Flags |= OFN_ALLOWMULTISELECT;
-      break;
-    case BROWSE_SAVE_FILE:
-      if ( options() & SAVEAS_CONFIRM && type() == BROWSE_SAVE_FILE ) {
-	  _ofn_ptr->Flags |= OFN_OVERWRITEPROMPT;
-      }
-      break;
-  }
-  // SPACE FOR RETURNED FILENAME
-  _ofn_ptr->lpstrFile    = new WCHAR[fsize];
-  _ofn_ptr->nMaxFile     = (DWORD) fsize-1;
-  _ofn_ptr->lpstrFile[0] = 0;
-  _ofn_ptr->lpstrFile[1] = 0;		// dnull
-  // PARENT WINDOW
-  _ofn_ptr->hwndOwner = GetForegroundWindow();
-  // DIALOG TITLE
-  if (_title) {
-    static WCHAR wtitle[200];
-    wcsncpy(wtitle, utf8towchar(_title), 200);
-    wtitle[200-1] = 0;
-    _ofn_ptr->lpstrTitle =  wtitle;
-  } else {
-    _ofn_ptr->lpstrTitle = NULL;
-  }
-  // FILTER
-  if (_parsedfilt != NULL) {	// to convert a null-containing char string into a widechar string
-#if FLTK_ABI_VERSION >= 10304
-    // NEW
-    if ( !_wpattern ) _wpattern = new WCHAR[FNFC_MAX_PATH];
-#else
-    // OLD
-    static WCHAR _wpattern[FNFC_MAX_PATH];	// yuck -- replace with managed class member
-#endif
-    const char *p = _parsedfilt;
-    while(*(p + strlen(p) + 1) != 0) p += strlen(p) + 1;
-    p += strlen(p) + 2;
-    MultiByteToWideChar(CP_UTF8, 0, _parsedfilt, (int) (p - _parsedfilt), _wpattern, FNFC_MAX_PATH);
-    _ofn_ptr->lpstrFilter = _wpattern;
-  } else {
-    _ofn_ptr->lpstrFilter = NULL;
-  }
-  // PRESET FILE
-  //     If set, supercedes _directory. See KB Q86920 for details
-  //     XXX: this doesn't preselect the item in the listview.. why?
-  //
-  if ( _preset_file ) {
-    size_t len = strlen(_preset_file);
-    if ( len >= _ofn_ptr->nMaxFile ) {
-      char msg[80];
-      sprintf(msg, "preset_file() filename is too long: %ld is >=%ld", (long)len, (long)fsize);
-      return(-1);
-    }
-    wcscpy(_ofn_ptr->lpstrFile, utf8towchar(_preset_file));
-    // Unix2Win(_ofn_ptr->lpstrFile);
-    len = wcslen(_ofn_ptr->lpstrFile);
-    _ofn_ptr->lpstrFile[len+0] = 0;	// multiselect needs dnull
-    _ofn_ptr->lpstrFile[len+1] = 0;
-  }
-  if ( _directory ) {
-    // PRESET DIR
-    //     XXX: See KB Q86920 for doc bug:
-    //     http://support.microsoft.com/default.aspx?scid=kb;en-us;86920
-    //
-    _ofn_ptr->lpstrInitialDir    = new WCHAR[FNFC_MAX_PATH];
-    wcscpy((WCHAR *)_ofn_ptr->lpstrInitialDir, utf8towchar(_directory));
-    // Unix2Win((char*)_ofn_ptr->lpstrInitialDir);
-  }
-  // SAVE THE CURRENT DIRECTORY
-  //     See above warning (XXX) for OFN_NOCHANGEDIR
-  //
-  char *save_cwd = SaveCWD();		// must be freed with RestoreCWD()
-  // OPEN THE DIALOG WINDOW
-  int err;
-  if ( _btype == BROWSE_SAVE_FILE ) {
-    err = GetSaveFileNameW(_ofn_ptr);
-  } else {
-    err = GetOpenFileNameW(_ofn_ptr);
-  }
-  // GET EXTENDED ERROR
-  int exterr = CommDlgExtendedError();
-  // RESTORE CURRENT DIRECTORY
-  RestoreCWD(save_cwd); save_cwd = 0;	// also frees save_cwd
-  // ERROR OR CANCEL?
-  if ( err == 0 ) {
-    if ( exterr == 0 ) return(1);	// user hit cancel
-    // Otherwise, an error occurred..
-    char msg[80];
-    sprintf(msg, "CommDlgExtendedError() code=%d", err);
-    errmsg(msg);
-    return(-1);
-  }
-  // PREPARE PATHNAMES FOR RETURN
-  switch ( _btype ) {
-    case BROWSE_FILE:
-    case BROWSE_SAVE_FILE:
-      set_single_pathname(wchartoutf8(_ofn_ptr->lpstrFile));
-      // Win2Unix(_pathnames[_tpathnames-1]);
-      break;
-    case BROWSE_MULTI_FILE: {
-      // EXTRACT MULTIPLE FILENAMES
-      const WCHAR *dirname = _ofn_ptr->lpstrFile;
-      size_t dirlen = wcslen(dirname);
-      if ( dirlen > 0 ) {
-	// WALK STRING SEARCHING FOR 'DOUBLE-NULL'
-	//     eg. "/dir/name\0foo1\0foo2\0foo3\0\0"
-	//
-	char pathname[FNFC_MAX_PATH];
-	for ( const WCHAR *s = dirname + dirlen + 1;
-		 *s; s+= (wcslen(s)+1)) {
-		strcpy(pathname, wchartoutf8(dirname));
-		strcat(pathname, "\\");
-		strcat(pathname, wchartoutf8(s));
-		add_pathname(pathname);
-	}
-      }
-      // XXX
-      //    Work around problem where pasted forward-slash pathname
-      //    into the file browser causes new "Explorer" interface
-      //    not to grok forward slashes, passing back as a 'filename'..!
-      //
-      if ( _tpathnames == 0 ) {
-	add_pathname(wchartoutf8(dirname));
-	// Win2Unix(_pathnames[_tpathnames-1]);
-      }
-      break;
-    }
-    case BROWSE_DIRECTORY:
-    case BROWSE_MULTI_DIRECTORY:
-    case BROWSE_SAVE_DIRECTORY:
-      abort();			// never happens: handled by showdir()
-  }
-  return(0);
-}
-
-// Used by SHBrowseForFolder(), sets initial selected dir.
-// Ref: Usenet: microsoft.public.vc.mfc, Dec 8 2000, 1:38p David Lowndes
-//              Subject: How to specify to select an initial folder .."
-//
-static int CALLBACK Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data) {
-  switch (msg) {
-    case BFFM_INITIALIZED:
-      if (data) ::SendMessageW(win, BFFM_SETSELECTIONW, TRUE, data);
-      break;
-    case BFFM_SELCHANGED:
-      TCHAR path[FNFC_MAX_PATH];
-      if ( SHGetPathFromIDList((ITEMIDLIST*)param, path) ) {
-	::SendMessage(win, BFFM_ENABLEOK, 0, 1);
-      } else {
-	// disable ok button if not a path
-	::SendMessage(win, BFFM_ENABLEOK, 0, 0);
-      }
-      break;
-    case BFFM_VALIDATEFAILED:
-      // we could pop up an annoying message here.
-      // also needs set ulFlags |= BIF_VALIDATE
-      break;
-    default:
-      break;
-  }
-  return(0);
-}
-
-// SHOW DIRECTORY BROWSER
-int Fl_Native_File_Chooser::showdir() {
-  // initialize OLE only once
-  fl_open_display();		// init needed by BIF_USENEWUI
-  ClearBINF();
-  clear_pathnames();
-  // PARENT WINDOW
-  _binf_ptr->hwndOwner = GetForegroundWindow();
-  // DIALOG TITLE
-  //_binf_ptr->lpszTitle = _title ? _title : NULL;
-  if (_title) {
-    static WCHAR wtitle[256];
-    wcsncpy(wtitle, utf8towchar(_title), 256);
-    wtitle[255] = 0;
-    _binf_ptr->lpszTitle =  wtitle;
-  } else {
-    _binf_ptr->lpszTitle = NULL;
-  }
-
-  // FLAGS
-  _binf_ptr->ulFlags = 0; 		// initialize
-
-  // TBD: make sure matches to runtime system, if need be.
-  //(what if _WIN32_IE doesn't match system? does the program not run?)
-  //
-  // TBD: match all 3 types of directories
-  //
-  // NOTE: *Don't* use BIF_SHAREABLE. It /disables/ mapped network shares
-  //       from being visible in BROWSE_DIRECTORY mode. Walter Garm's comments:
-  //
-  //       --- Garms, Walter (GE EntSol, Security) wrote:
-  //       With your help I was able to solve the problem of the network drives.
-  //       For Version 6.0, at least, the BIF_SHAREABLE flag seems to have the
-  //       opposite sense:  With BIF_SHAREABLE not set I see the mapped network
-  //       drives, and with BIF_SHAREABLE set I do not.
-  //       ---
-
-#if defined(BIF_NONEWFOLDERBUTTON)				// Version 6.0
-  if ( _btype == BROWSE_DIRECTORY ) _binf_ptr->ulFlags |= BIF_NONEWFOLDERBUTTON;
-  _binf_ptr->ulFlags |= BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
-#elif defined(BIF_USENEWUI)					// Version 5.0
-  if ( _btype == BROWSE_DIRECTORY ) _binf_ptr->ulFlags |= BIF_EDITBOX;
-  else if ( _btype == BROWSE_SAVE_DIRECTORY ) _binf_ptr->ulFlags |= BIF_USENEWUI;
-  _binf_ptr->ulFlags |= BIF_RETURNONLYFSDIRS;
-#elif defined(BIF_EDITBOX)					// Version 4.71
-  _binf_ptr->ulFlags |= BIF_RETURNONLYFSDIRS | BIF_EDITBOX;
-#else								// Version Old
-  _binf_ptr->ulFlags |= BIF_RETURNONLYFSDIRS;
-#endif
-
-  // BUFFER
-  //char displayname[FNFC_MAX_PATH];
-  WCHAR displayname[FNFC_MAX_PATH];
-  _binf_ptr->pszDisplayName = displayname;
-
-  // PRESET DIR
-  WCHAR presetname[FNFC_MAX_PATH];
-  if ( _directory ) {
-    // Unix2Win(presetname);
-    wcsncpy(presetname, utf8towchar(_directory), FNFC_MAX_PATH);
-    presetname[FNFC_MAX_PATH-1] = 0;
-    _binf_ptr->lParam = (LPARAM)presetname;
-  }
-  else _binf_ptr->lParam = 0;
-  _binf_ptr->lpfn = Dir_CB;
-  // OPEN BROWSER
-  LPITEMIDLIST pidl = SHBrowseForFolderW(_binf_ptr);
-  // CANCEL?
-  if ( pidl == NULL ) return(1);
-
-  // GET THE PATHNAME(S) THE USER SELECTED
-  // TBD: expand NetHood shortcuts from this PIDL??
-  // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp
-
-  WCHAR path[FNFC_MAX_PATH];
-  if ( SHGetPathFromIDListW(pidl, path) ) {
-    // Win2Unix(path);
-    //add_pathname(path);
-    add_pathname(wchartoutf8(path));
-  }
-  FreePIDL(pidl);
-  if ( !wcslen(path) ) return(1);             // don't return empty pathnames
-  return(0);
-}
-
-// RETURNS:
-//    0 - user picked a file
-//    1 - user cancelled
-//   -1 - failed; errmsg() has reason
-//
-int Fl_Native_File_Chooser::show() {
-  int retval;
-  if ( _btype == BROWSE_DIRECTORY ||
-       _btype == BROWSE_MULTI_DIRECTORY ||
-       _btype == BROWSE_SAVE_DIRECTORY ) {
-    retval = showdir();
-  } else {
-    retval = showfile();
-  }
-  // restore the correct state of mouse buttons and keyboard modifier keys (STR #3221)
-  HWND h = GetForegroundWindow();
-  if (h) {
-    WNDPROC windproc = (WNDPROC)GetWindowLongPtrW(h, GWLP_WNDPROC);
-    CallWindowProc(windproc, h, WM_ACTIVATEAPP, 1, 0);
-  }
-  return retval;
-}
-
-// RETURN ERROR MESSAGE
-const char *Fl_Native_File_Chooser::errmsg() const {
-  return(_errmsg ? _errmsg : "No error");
-}
-
-// GET FILENAME
-const char* Fl_Native_File_Chooser::filename() const {
-  if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]);
-  return("");
-}
-
-// GET FILENAME FROM LIST OF FILENAMES
-const char* Fl_Native_File_Chooser::filename(int i) const {
-  if ( _pathnames && i < _tpathnames ) return(_pathnames[i]);
-  return("");
-}
-
-// GET TOTAL FILENAMES CHOSEN
-int Fl_Native_File_Chooser::count() const {
-  return(_tpathnames);
-}
-
-// PRESET PATHNAME
-//     Can be NULL if no preset is desired.
-//
-void Fl_Native_File_Chooser::directory(const char *val) {
-  _directory = strfree(_directory);
-  _directory = strnew(val);
-}
-
-// GET PRESET PATHNAME
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::directory() const {
-  return(_directory);
-}
-
-// SET TITLE
-//     Can be NULL if no title desired.
-//
-void Fl_Native_File_Chooser::title(const char *val) {
-  _title = strfree(_title);
-  _title = strnew(val);
-}
-
-// GET TITLE
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::title() const {
-  return(_title);
-}
-
-// SET FILTER
-//     Can be NULL if no filter needed
-//
-void Fl_Native_File_Chooser::filter(const char *val) {
-  _filter = strfree(_filter);
-  clear_filters();
-  if ( val ) {
-    _filter = strnew(val);
-    parse_filter(_filter);
-  }
-  add_filter("All Files", "*.*");	// always include 'all files' option
-
-#ifdef DEBUG
-  dnullprint(_parsedfilt);
-#endif /*DEBUG*/
-}
-
-// GET FILTER
-//    Can return NULL if none set.
-//
-const char *Fl_Native_File_Chooser::filter() const {
-  return(_filter);
-}
-
-// CLEAR FILTERS
-void Fl_Native_File_Chooser::clear_filters() {
-  _nfilters = 0;
-  _parsedfilt = strfree(_parsedfilt);
-}
-
-// ADD A FILTER
-void Fl_Native_File_Chooser::add_filter(const char *name_in,	// name of filter (optional: can be null)
-	                    const char *winfilter) {    	// windows style filter (eg. "*.cxx;*.h")
-  // No name? Make one..
-  char name[1024];
-  if ( !name_in || name_in[0] == '\0' ) {
-    sprintf(name, "%.*s Files", int(sizeof(name)-10), winfilter);
-  } else {
-    if ((strlen(name_in)+strlen(winfilter)+3) < sizeof(name)) {
-      sprintf(name, "%s (%s)", name_in, winfilter);
-    } else {
-      sprintf(name, "%.*s", int(sizeof(name)), name_in);
-    }
-  }
-  dnullcat(_parsedfilt, name);
-  dnullcat(_parsedfilt, winfilter);
-  _nfilters++;
-  //DEBUG printf("DEBUG: ADD FILTER name=<%s> winfilter=<%s>\n", name, winfilter);
-}
-
-// RETURN HOW MANY DIFFERENT FILTERS WERE SPECIFIED
-//   In: "foo.[CH]" or "foo.{C,H}"
-//   Out: 2
-//
-static int count_filters(const char *filter) {
-  int count = 0;
-  char mode = 0;
-  const char *in = filter;
-  while (*in) {
-    switch(*in) {
-      case '\\':			// escape next character
-        ++in; if ( *in == 0 ) continue;	// skip escape. EOL? done
-	++in;				// skip escaped char
-	continue;
-      case LCURLY_CHR:			// start "{aaa,bbb}"
-	mode = *in;			// set mode, parse over curly
-        ++count;			// at least +1 wildcard
-	break;
-      case RCURLY_CHR:			// end "{aaa,bbb}"
-	if ( mode == LCURLY_CHR )	// disable curly mode (if on)
-	  mode = 0;
-	break;
-      case LBRACKET_CHR:		// start "[xyz]"
-        mode = *in;			// set mode, parse over bracket
-	break;
-      case RBRACKET_CHR:		// end "[xyz]"
-	if ( mode == LBRACKET_CHR )	// disable bracket mode (if on)
-	  mode = 0;
-	break;
-      default:				// any other char
-        switch (mode) {			// handle {} or [] modes
-	  case LCURLY_CHR:		// handle "{aaa,bbb}"
-	    if (*in==',' || *in=='|')	// ',' and '|' adds filters
-	      ++count;
-	    break;
-	  case LBRACKET_CHR:		// handle "[xyz]"
-	    ++count;			// all chars in []'s add new filter
-	    break;
-	}
-	break;
-    }
-    ++in;				// parse past char
-  }
-  return count > 0 ? count : 1;		// return at least 1
-}
-
-// CONVERT FLTK STYLE PATTERN MATCHES TO WINDOWS 'DOUBLENULL' PATTERN
-// Returns with the parsed double-null result in '_parsedfilt'.
-//
-//    Handles:
-//        IN              OUT
-//        -----------     -----------------------------
-//        *.{ma,mb}       "*.{ma,mb} Files\0*.ma;*.mb\0\0"
-//        *.[abc]         "*.[abc] Files\0*.a;*.b;*.c\0\0"
-//        *.txt           "*.txt Files\0*.txt\0\0"
-//        C Files\t*.[ch] "C Files\0*.c;*.h\0\0"
-//
-//    Example:
-//         IN: "*.{ma,mb}"
-//        OUT: "*.ma;*.mb Files\0*.ma;*.mb\0All Files\0*.*\0\0"
-//              ---------------  ---------  ---------  ---
-//                     |             |          |       |
-//                   Title       Wildcards    Title    Wildcards
-//
-// Parsing Mode:
-//         IN:"C Files\t*.{cxx,h}"
-//             |||||||  |||||||||
-//       mode: nnnnnnn  ww{{{{{{{
-//             \_____/  \_______/
-//              Name     Wildcard
-//
-void Fl_Native_File_Chooser::parse_filter(const char *in) {
-  clear_filters();
-  if ( ! in || in[0] == '\0' ) return;
-
-  int has_name = strchr(in, '\t') ? 1 : 0;
-  char mode = has_name ? 'n' : 'w';		// parse mode: n=name, w=wildcard
-
-  // whatever input string is, our output won't be much longer in length..
-  // use double length just for safety.
-  size_t slen = strlen(in);
-  char *wildprefix = new char[(slen+1)*2]; wildprefix[0] = 0;
-  char *comp       = new char[(slen+1)*2]; comp[0] = 0;
-  char *name       = new char[(slen+1)*2]; name[0] = 0;
-
-  // Init
-  int nwildcards = 0;
-  int maxfilters = count_filters(in) + 1;	// count wildcard seps
-  char **wildcards = new char*[maxfilters];	// parsed wildcards (can be several)
-  int t;
-  for ( t=0; t<maxfilters; t++ ) {
-    wildcards[t] = new char[slen+1];
-    wildcards[t][0] = '\0';
-  }
-
-  // Parse
-  for ( ; 1; in++ ) {
-
-    //// DEBUG
-    //// printf("WORKING ON '%c': mode=<%c> name=<%s> wildprefix=<%s> nwildcards=%d wildcards[n]=<%s>\n",
-    ////        *in, mode, name, wildprefix, nwildcards, wildcards[nwildcards]);
-
-    switch (*in) {
-      case ',':
-      case '|':
-	if ( mode == LCURLY_CHR ) {
-	  // create new wildcard, copy in prefix
-	  strcat(wildcards[nwildcards++], wildprefix);
-	  continue;
-	} else {
-	  goto regchar;
-	}
-	continue;
-
-      // FINISHED PARSING A NAME?
-      case '\t':
-	if ( mode != 'n' ) goto regchar;
-	// finish parsing name? switch to wildcard mode
-	mode = 'w';
-	break;
-
-      // ESCAPE NEXT CHAR
-      case '\\':
-	++in;
-	goto regchar;
-
-      // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS?
-      case '\r':
-      case '\n':
-      case '\0':
-      {
-	if ( mode == 'w' ) {		// finished parsing wildcard?
-	  if ( nwildcards == 0 ) {
-	    strcpy(wildcards[nwildcards++], wildprefix);
-	  }
-	  // Append wildcards in Microsoft's "*.one;*.two" format
-	  comp[0] = 0;
-	  for ( t=0; t<nwildcards; t++ ) {
-	    if ( t != 0 ) strcat(comp, ";");
-	    strcat(comp, wildcards[t]);
-	  }
-	  // Add if not empty
-	  if ( comp[0] ) {
-	    add_filter(name, comp);
-	  }
-	}
-	// RESET
-	for ( t=0; t<maxfilters; t++ ) {
-	  wildcards[t][0] = '\0';
-	}
-	nwildcards = 0;
-	wildprefix[0] = name[0] = '\0';
-	mode = strchr(in,'\t') ? 'n' : 'w';
-	// DONE?
-	if ( *in == '\0' ) {		// done
-	  // Free everything
-	  delete[] wildprefix;
-	  delete[] comp;
-	  delete[] name;
-	  for ( t=0; t<maxfilters; t++ ) delete[] wildcards[t];
-	  delete[] wildcards;
-	  return;
-	}
-	continue;			// not done yet, more filters
-      }
-
-      // STARTING A WILDCARD?
-      case LBRACKET_CHR:
-      case LCURLY_CHR:
-	mode = *in;
-	if ( *in == LCURLY_CHR ) {
-	  // create new wildcard
-	  strcat(wildcards[nwildcards++], wildprefix);
-	}
-	continue;
-
-      // ENDING A WILDCARD?
-      case RBRACKET_CHR:
-      case RCURLY_CHR:
-	mode = 'w';	// back to wildcard mode
-	continue;
-
-      // ALL OTHER NON-SPECIAL CHARACTERS
-      default:
-      regchar:		// handle regular char
-	switch ( mode ) {
-	  case LBRACKET_CHR:
-	    // create new wildcard
-	    ++nwildcards;
-	    // copy in prefix
-	    strcpy(wildcards[nwildcards-1], wildprefix);
-	    // append search char
-	    chrcat(wildcards[nwildcards-1], *in);
-	    continue;
-
-	  case LCURLY_CHR:
-	    if ( nwildcards > 0 ) {
-	      chrcat(wildcards[nwildcards-1], *in);
-	    }
-	    continue;
-
-	  case 'n':
-	    chrcat(name, *in);
-	    continue;
-
-	  case 'w':
-	    chrcat(wildprefix, *in);
-	    for ( t=0; t<nwildcards; t++ ) {
-	      chrcat(wildcards[t], *in);
-	    }
-	    continue;
-	}
-	break;
-    }
-  }
-}
-
-// SET 'CURRENTLY SELECTED FILTER'
-void Fl_Native_File_Chooser::filter_value(int i) {
-  _ofn_ptr->nFilterIndex = i + 1;
-}
-
-// RETURN VALUE OF 'CURRENTLY SELECTED FILTER'
-int Fl_Native_File_Chooser::filter_value() const {
-  return(_ofn_ptr->nFilterIndex ? _ofn_ptr->nFilterIndex-1 : _nfilters+1);
-}
-
-// PRESET FILENAME FOR 'SAVE AS' CHOOSER
-void Fl_Native_File_Chooser::preset_file(const char* val) {
-  _preset_file = strfree(_preset_file);
-  _preset_file = strnew(val);
-}
-
-// GET PRESET FILENAME FOR 'SAVE AS' CHOOSER
-const char* Fl_Native_File_Chooser::preset_file() const {
-  return(_preset_file);
-}
-
-int Fl_Native_File_Chooser::filters() const {
-  return(_nfilters);
-}
-
-static char *wchartoutf8(LPCWSTR in) {
-  static char *out = NULL;
-  static int lchar = 0;
-  if (in == NULL)return NULL;
-  int utf8len  = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL);
-  if (utf8len > lchar) {
-    lchar = utf8len;
-    out = (char *)realloc(out, lchar * sizeof(char));
-  }
-  WideCharToMultiByte(CP_UTF8, 0, in, -1, out, utf8len, NULL, NULL);
-  return out;
-}
-
-static LPCWSTR utf8towchar(const char *in) {
-  static WCHAR *wout = NULL;
-  static int lwout = 0;
-  if (in == NULL)return NULL;
-  int wlen = MultiByteToWideChar(CP_UTF8, 0, in, -1, NULL, 0);
-  if (wlen > lwout) {
-    lwout = wlen;
-    wout = (WCHAR *)realloc(wout, lwout * sizeof(WCHAR));
-  }
-  MultiByteToWideChar(CP_UTF8, 0, in, -1, wout, wlen);
-  return wout;
-}
-
-#endif /*!FL_DOXYGEN*/
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Native_File_Chooser_common.cxx
+++ /dev/null
@@ -1,77 +1,0 @@
-// "$Id$"
-//
-// FLTK native OS file chooser widget
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <string.h>
-#include <FL/Enumerations.H>
-
-// COPY A STRING WITH 'new'
-//    Value can be NULL
-//
-static char *strnew(const char *val) {
-  if ( val == NULL ) return(NULL);
-  char *s = new char[strlen(val)+1];
-  strcpy(s, val);
-  return(s);
-}
-
-// FREE STRING CREATED WITH strnew(), NULLS OUT STRING
-//    Value can be NULL
-//
-static char *strfree(char *val) {
-  if ( val ) delete [] val;
-  return(NULL);
-}
-
-// 'DYNAMICALLY' APPEND ONE STRING TO ANOTHER
-//    Returns newly allocated string, or NULL 
-//    if s && val == NULL.
-//    's' can be NULL; returns a strnew(val).
-//    'val' can be NULL; s is returned unmodified.
-//
-//    Usage:
-//	char *s = strnew("foo");	// s = "foo"
-//      s = strapp(s, "bar");		// s = "foobar"
-//
-#if !defined(WIN32)
-static char *strapp(char *s, const char *val) {
-  if ( ! val ) {
-    return(s);			// Nothing to append? return s
-  }
-  if ( ! s ) {
-    return(strnew(val));	// New string? return copy of val
-  }
-  char *news = new char[strlen(s)+strlen(val)+1];
-  strcpy(news, s);
-  strcat(news, val);
-  delete [] s;			// delete old string
-  return(news);			// return new copy
-}
-#endif
-
-// APPEND A CHARACTER TO A STRING
-//     This does NOT allocate space for the new character.
-//
-static void chrcat(char *s, char c) {
-  char tmp[2] = { c, '\0' };
-  strcat(s, tmp);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Overlay_Window.cxx
+++ /dev/null
@@ -1,161 +1,0 @@
-//
-// "$Id$"
-//
-// Overlay window code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// A window using double-buffering and able to draw an overlay
-// on top of that.  Uses the hardware to draw the overlay if
-// possible, otherwise it just draws in the front buffer.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-void Fl_Overlay_Window::show() {
-  Fl_Double_Window::show();
-  if (overlay_ && overlay_ != this) overlay_->show();
-}
-
-void Fl_Overlay_Window::hide() {
-  Fl_Double_Window::hide();
-}
-
-void Fl_Overlay_Window::flush() {
-#ifdef BOXX_BUGS
-  if (overlay_ && overlay_ != this && overlay_->shown()) {
-    // all drawing to windows hidden by overlay windows is ignored, fix this
-    XUnmapWindow(fl_display, fl_xid(overlay_));
-    Fl_Double_Window::flush(0);
-    XMapWindow(fl_display, fl_xid(overlay_));
-    return;
-  }
-#endif
-  int erase_overlay = (damage()&FL_DAMAGE_OVERLAY) | (overlay_ == this);
-  clear_damage((uchar)(damage()&~FL_DAMAGE_OVERLAY));
-  Fl_Double_Window::flush(erase_overlay);
-  if (overlay_ == this) draw_overlay();
-}
-
-void Fl_Overlay_Window::resize(int X, int Y, int W, int H) {
-  Fl_Double_Window::resize(X,Y,W,H);
-  if (overlay_ && overlay_!=this) overlay_->resize(0,0,w(),h());
-}
-
-/**
-  Destroys the window and all child widgets.
-*/
-Fl_Overlay_Window::~Fl_Overlay_Window() {
-  hide();
-//  delete overlay; this is done by ~Fl_Group
-}
-
-#if !HAVE_OVERLAY
-
-int Fl_Overlay_Window::can_do_overlay() {return 0;}
-
-/**
-  Call this to indicate that the overlay data has changed and needs to
-  be redrawn.  The overlay will be clear until the first time this is
-  called, so if you want an initial display you must call this after
-  calling show().
-*/
-void Fl_Overlay_Window::redraw_overlay() {
-  overlay_ = this;
-  clear_damage((uchar)(damage()|FL_DAMAGE_OVERLAY));
-  Fl::damage(FL_DAMAGE_CHILD);
-}
-
-#else
-
-extern XVisualInfo *fl_find_overlay_visual();
-extern XVisualInfo *fl_overlay_visual;
-extern Colormap fl_overlay_colormap;
-extern unsigned long fl_transparent_pixel;
-static GC gc;	// the GC used by all X windows
-extern uchar fl_overlay; // changes how fl_color(x) works
-
-class _Fl_Overlay : public Fl_Window {
-  friend class Fl_Overlay_Window;
-  void flush();
-  void show();
-public:
-  _Fl_Overlay(int x, int y, int w, int h) :
-    Fl_Window(x,y,w,h) {set_flag(INACTIVE);}
-};
-
-int Fl_Overlay_Window::can_do_overlay() {
-  return fl_find_overlay_visual() != 0;
-}
-
-void _Fl_Overlay::show() {
-  if (shown()) {Fl_Window::show(); return;}
-  fl_background_pixel = int(fl_transparent_pixel);
-  Fl_X::make_xid(this, fl_overlay_visual, fl_overlay_colormap);
-  fl_background_pixel = -1;
-  // find the outermost window to tell wm about the colormap:
-  Fl_Window *w = window();
-  for (;;) {Fl_Window *w1 = w->window(); if (!w1) break; w = w1;}
-  XSetWMColormapWindows(fl_display, fl_xid(w), &(Fl_X::i(this)->xid), 1);
-}
-
-void _Fl_Overlay::flush() {
-  fl_window = fl_xid(this);
-  if (!gc) {
-	  gc = XCreateGC(fl_display, fl_xid(this), 0, 0);
-  }
-  fl_gc = gc;
-#if defined(FLTK_USE_CAIRO)
-      if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-#endif
-  fl_overlay = 1;
-  Fl_Overlay_Window *w = (Fl_Overlay_Window *)parent();
-  Fl_X *myi = Fl_X::i(this);
-  if (damage() != FL_DAMAGE_EXPOSE) XClearWindow(fl_display, fl_xid(this));
-  fl_clip_region(myi->region); myi->region = 0;
-  w->draw_overlay();
-  fl_overlay = 0;
-}
-
-void Fl_Overlay_Window::redraw_overlay() {
-  if (!fl_display) return; // this prevents fluid -c from opening display
-  if (!overlay_) {
-    if (can_do_overlay()) {
-      Fl_Group::current(this);
-      overlay_ = new _Fl_Overlay(0,0,w(),h());
-      Fl_Group::current(0);
-    } else {
-      overlay_ = this;	// fake the overlay
-    }
-  }
-  if (shown()) {
-    if (overlay_ == this) {
-      clear_damage(damage()|FL_DAMAGE_OVERLAY);
-      Fl::damage(FL_DAMAGE_CHILD);
-    } else if (!overlay_->shown())
-      overlay_->show();
-    else
-      overlay_->redraw();
-  }
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_PNG_Image.cxx
+++ /dev/null
@@ -1,239 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_PNG_Image routines.
-//
-// Copyright 1997-2012 by Easy Software Products.
-// Image support by Matthias Melcher, Copyright 2000-2009.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_PNG_Image::Fl_PNG_Image() - Load a PNG image file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_PNG_Image.H>
-#include <FL/Fl_Shared_Image.H>
-#include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-extern "C"
-{
-#  include <zlib.h>
-#  ifdef HAVE_PNG_H
-#    include <png.h>
-#  else
-#    include <libpng/png.h>
-#  endif // HAVE_PNG_H
-}
-
-typedef struct  {
-  png_structp pp;
-  const unsigned char *current;
-  const unsigned char *last;
-} fl_png_memory;
-
-extern "C" {
-  static void png_read_data_from_mem( png_structp png_ptr, //pointer to our data
-				      png_bytep data,  // where to copy the image data for libpng computing
-				      png_size_t length) // length of data to copy
-  {
-    fl_png_memory *png_mem_data = (fl_png_memory*)png_get_io_ptr(png_ptr); // get the pointer to our struct
-    if (png_mem_data->current + length > png_mem_data->last) {
-      png_error(png_mem_data->pp, "Invalid attempt to read row data");
-      return;
-    }
-    /* copy data from image buffer */
-    memcpy (data, png_mem_data->current, length);
-    /* advance in the memory data */
-    png_mem_data->current += length;
-  }
-} // extern "C"
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-
-
-/**
- The constructor loads the named PNG image from the given png filename.
-
- The destructor frees all memory and server resources that are used by
- the image.
-
- Use Fl_Image::fail() to check if Fl_PNG_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- PNG format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason.
-
- \param[in] filename	Name of PNG file to read
- */
-Fl_PNG_Image::Fl_PNG_Image (const char *filename): Fl_RGB_Image(0,0,0)
-{
-  load_png_(filename, NULL, 0);
-}
-
-
-/** 
- \brief Constructor that reads a PNG image from memory.
-
- Construct an image from a block of memory inside the application. Fluid offers
- "binary Data" chunks as a great way to add image data into the C++ source code.
- name_png can be NULL. If a name is given, the image is added to the list of 
- shared images (see: Fl_Shared_Image) and will be available by that name.
- 
- \param name_png  A name given to this image or NULL
- \param buffer	  Pointer to the start of the PNG image in memory
- \param maxsize   Size in bytes of the memory buffer containing the PNG image
- */
-Fl_PNG_Image::Fl_PNG_Image (
-      const char *name_png, const unsigned char *buffer, int maxsize): Fl_RGB_Image(0,0,0)
-{
-  load_png_(name_png, buffer, maxsize);
-}
-
-
-void Fl_PNG_Image::load_png_(const char *name_png, const unsigned char *buffer_png, int maxsize)
-{
-#if defined(HAVE_LIBPNG) && defined(HAVE_LIBZ)
-  int i;	  // Looping var
-  FILE *fp = NULL;	  // File pointer
-  int channels;	  // Number of color channels
-  png_structp pp; // PNG read pointer
-  png_infop info = 0; // PNG info pointers
-  png_bytep *rows;// PNG row pointers
-  fl_png_memory png_mem_data;
-  int from_memory = (buffer_png != NULL); // true if reading image from memory
-
-  if (!from_memory) {
-    if ((fp = fl_fopen(name_png, "rb")) == NULL) {
-      ld(ERR_FILE_ACCESS);
-      return;
-    }
-  }
-  const char *display_name = (name_png ? name_png : "In-memory PNG data");
-
-  // Setup the PNG data structures...
-  pp = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-  if (pp) info = png_create_info_struct(pp);
-  if (!pp || !info) {
-    if (pp) png_destroy_read_struct(&pp, NULL, NULL);
-    if (!from_memory) fclose(fp);
-    Fl::warning("Cannot allocate memory to read PNG file or data \"%s\".\n", display_name);
-    w(0); h(0); d(0); ld(ERR_FORMAT);
-    return;
-  }
-  
-  if (setjmp(png_jmpbuf(pp)))
-  {
-    png_destroy_read_struct(&pp, &info, NULL);
-    if (!from_memory) fclose(fp);
-    Fl::warning("PNG file or data \"%s\" is too large or contains errors!\n", display_name);
-    w(0); h(0); d(0); ld(ERR_FORMAT);
-    return;
-  }
-
-  if (from_memory) {
-    png_mem_data.current = buffer_png;
-    png_mem_data.last = buffer_png + maxsize;
-    png_mem_data.pp = pp;
-    // Initialize the function pointer to the PNG read "engine"...
-    png_set_read_fn (pp, (png_voidp) &png_mem_data, png_read_data_from_mem);
-  } else {
-    png_init_io(pp, fp); // Initialize the PNG file read "engine"...
-  }  
-
-  // Get the image dimensions and convert to grayscale or RGB...
-  png_read_info(pp, info);
-
-  if (png_get_color_type(pp, info) == PNG_COLOR_TYPE_PALETTE)
-    png_set_expand(pp);
-
-  if (png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
-    channels = 3;
-  else
-    channels = 1;
-
-  int num_trans = 0;
-  png_get_tRNS(pp, info, 0, &num_trans, 0);
-  if ((png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA) || (num_trans != 0))
-    channels ++;
-
-  w((int)(png_get_image_width(pp, info)));
-  h((int)(png_get_image_height(pp, info)));
-  d(channels);
-
-  if (png_get_bit_depth(pp, info) < 8)
-  {
-    png_set_packing(pp);
-    png_set_expand(pp);
-  }
-  else if (png_get_bit_depth(pp, info) == 16)
-    png_set_strip_16(pp);
-
-#  if defined(HAVE_PNG_GET_VALID) && defined(HAVE_PNG_SET_TRNS_TO_ALPHA)
-  // Handle transparency...
-  if (png_get_valid(pp, info, PNG_INFO_tRNS))
-    png_set_tRNS_to_alpha(pp);
-#  endif // HAVE_PNG_GET_VALID && HAVE_PNG_SET_TRNS_TO_ALPHA
-
-  if (((size_t)w()) * h() * d() > max_size() ) longjmp(png_jmpbuf(pp), 1);
-  array = new uchar[w() * h() * d()];
-  alloc_array = 1;
-
-  // Allocate pointers...
-  rows = new png_bytep[h()];
-
-  for (i = 0; i < h(); i ++)
-    rows[i] = (png_bytep)(array + i * w() * d());
-
-  // Read the image, handling interlacing as needed...
-  for (i = png_set_interlace_handling(pp); i > 0; i --)
-    png_read_rows(pp, rows, NULL, h());
-
-#ifdef WIN32
-  // Some Windows graphics drivers don't honor transparency when RGB == white
-  if (channels == 4) {
-    // Convert RGB to 0 when alpha == 0...
-    uchar *ptr = (uchar *)array;
-    for (i = w() * h(); i > 0; i --, ptr += 4)
-      if (!ptr[3]) ptr[0] = ptr[1] = ptr[2] = 0;
-  }
-#endif // WIN32
-
-  // Free memory and return...
-  delete[] rows;
-
-  png_read_end(pp, info);
-  png_destroy_read_struct(&pp, &info, NULL);
-
-  if (from_memory) {
-    if (w() && h() && name_png) {
-      Fl_Shared_Image *si = new Fl_Shared_Image(name_png, this);
-      si->add();
-    }
-  } else {
-    fclose(fp);
-  }
-#endif // HAVE_LIBPNG && HAVE_LIBZ
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_PNM_Image.cxx
+++ /dev/null
@@ -1,209 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_PNM_Image routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_PNM_Image::Fl_PNM_Image() - Load a PNM image...
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_PNM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-
-//
-// 'Fl_PNM_Image::Fl_PNM_Image()' - Load a PNM image...
-//
-
-
-/**
- The constructor loads the named PNM image.
-
- The destructor frees all memory and server resources that are used by
- the image.
-
- Use Fl_Image::fail() to check if Fl_PNM_Image failed to load. fail() returns
- ERR_FILE_ACCESS if the file could not be opened or read, ERR_FORMAT if the
- PNM format could not be decoded, and ERR_NO_IMAGE if the image could not
- be loaded for another reason.
- */
-Fl_PNM_Image::Fl_PNM_Image(const char *name)	// I - File to read
-  : Fl_RGB_Image(0,0,0) {
-  FILE		*fp;		// File pointer
-  int		x, y;		// Looping vars
-  char		line[1024],	// Input line
-		*lineptr;	// Pointer in line
-  uchar		*ptr,		// Pointer to pixel values
-		byte,		// Byte from file
-		bit;		// Bit in pixel
-  int		format,		// Format of PNM file
-		val,		// Pixel value
-		maxval;		// Maximum pixel value
-
-
-  if ((fp = fl_fopen(name, "rb")) == NULL) {
-    ld(ERR_FILE_ACCESS);
-    return;
-  }
-
-  //
-  // Read the file header in the format:
-  //
-  //   Pformat
-  //   # comment1
-  //   # comment2
-  //   ...
-  //   # commentN
-  //   width
-  //   height
-  //   max sample
-  //
-
-  lineptr = fgets(line, sizeof(line), fp);
-  if (!lineptr) {
-    fclose(fp);
-    Fl::error("Early end-of-file in PNM file \"%s\"!", name);
-    ld(ERR_FILE_ACCESS);
-    return;
-  }
-
-  lineptr ++;
-
-  format = atoi(lineptr);
-  while (isdigit(*lineptr)) lineptr ++;
-
-  if (format == 7) lineptr = (char *)"";
-
-  while (lineptr != NULL && w() == 0) {
-    if (*lineptr == '\0' || *lineptr == '#') {
-      lineptr = fgets(line, sizeof(line), fp);
-    } else if (isdigit(*lineptr)) {
-      w(strtol(lineptr, &lineptr, 10));
-    } else lineptr ++;
-  }
-
-  while (lineptr != NULL && h() == 0) {
-    if (*lineptr == '\0' || *lineptr == '#') {
-      lineptr = fgets(line, sizeof(line), fp);
-    } else if (isdigit(*lineptr)) {
-      h(strtol(lineptr, &lineptr, 10));
-    } else lineptr ++;
-  }
-
-  if (format != 1 && format != 4) {
-    maxval = 0;
-
-    while (lineptr != NULL && maxval == 0) {
-      if (*lineptr == '\0' || *lineptr == '#') {
-	lineptr = fgets(line, sizeof(line), fp);
-      } else if (isdigit(*lineptr)) {
-	maxval = strtol(lineptr, &lineptr, 10);
-      } else lineptr ++;
-    }
-  } else maxval = 1;
-
-  // Allocate memory...
-  if (format == 1 || format == 2 || format == 4 || format == 5) d(1);
-  else d(3);
-
-//  printf("%s = %dx%dx%d\n", name, w(), h(), d());
-
-  if (((size_t)w()) * h() * d() > max_size() ) {
-    Fl::warning("PNM file \"%s\" is too large!\n", name);
-    fclose(fp);
-    w(0); h(0); d(0); ld(ERR_FORMAT);
-    return;
-  }
-  array       = new uchar[w() * h() * d()];
-  alloc_array = 1;
-
-  // Read the image file...
-  for (y = 0; y < h(); y ++) {
-    ptr = (uchar *)array + y * w() * d();
-
-    switch (format) {
-      case 1 :
-        for (x = w(); x > 0; x --)
-          if (fscanf(fp, "%d", &val) == 1) *ptr++ = (uchar)(255 * (1-val));
-        break;
-        
-      case 2 :
-          for (x = w(); x > 0; x --)
-            if (fscanf(fp, "%d", &val) == 1) *ptr++ = (uchar)(255 * val / maxval);
-          break;
-
-      case 3 :
-          for (x = w(); x > 0; x --) {
-            if (fscanf(fp, "%d", &val) == 1) *ptr++ = (uchar)(255 * val / maxval);
-            if (fscanf(fp, "%d", &val) == 1) *ptr++ = (uchar)(255 * val / maxval);
-            if (fscanf(fp, "%d", &val) == 1) *ptr++ = (uchar)(255 * val / maxval);
-          }
-          break;
-
-      case 4 :
-        for (x = w(), byte = (uchar)getc(fp), bit = 128; x > 0; x --) {
-          if ((byte & bit) == 0) *ptr++ = 255; // 0 bit for white pixel
-          else *ptr++ = 0; // 1 bit for black pixel
-          
-          if (bit > 1) bit >>= 1;
-          else {
-            bit  = 128;
-            if (x > 1) byte = (uchar)getc(fp);
-          }
-        }
-        break;
-          
-      case 5 :
-      case 6 :
-        if (maxval < 256) {
-          if (fread(ptr, w(), d(), fp)) { /* ignored */ }
-        } else {
-          for (x = d() * w(); x > 0; x --) {
-            val = (uchar)getc(fp);
-            val = (val<<8)|(uchar)getc(fp);
-            *ptr++ = (255*val)/maxval;
-          }
-        }
-        break;
-        
-      case 7 : /* XV 3:3:2 thumbnail format */
-        for (x = w(); x > 0; x --) {
-          byte = (uchar)getc(fp);
-          
-          *ptr++ = (uchar)(255 * ((byte >> 5) & 7) / 7);
-          *ptr++ = (uchar)(255 * ((byte >> 2) & 7) / 7);
-          *ptr++ = (uchar)(255 * (byte & 3) / 3);
-        }
-        break;
-    }
-  }
-
-  fclose(fp);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Pack.cxx
+++ /dev/null
@@ -1,148 +1,0 @@
-//
-// "$Id$"
-//
-// Packing widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Based on code by Curtis Edwards
-// Group that compresses all it's children together and resizes to surround
-// them on each redraw (only if box() is zero)
-// Bugs: ?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Pack.H>
-#include <FL/fl_draw.H>
-
-/**
-  Creates a new Fl_Pack widget using the given position, size,
-  and label string. The default boxtype is FL_NO_BOX.
-  <P>The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code. A kludge has been done so the 
-  Fl_Pack and all of it's children can be automatic (local)
-  variables, but you must declare the Fl_Pack<I>first</I>, so
-  that it is destroyed last.
-*/
-Fl_Pack::Fl_Pack(int X, int Y, int W, int H,const char *l)
-: Fl_Group(X, Y, W, H, l) {
-  resizable(0);
-  spacing_ = 0;
-  // type(VERTICAL); // already set like this
-}
-
-void Fl_Pack::draw() {
-  int tx = x()+Fl::box_dx(box());
-  int ty = y()+Fl::box_dy(box());
-  int tw = w()-Fl::box_dw(box());
-  int th = h()-Fl::box_dh(box());
-  int rw, rh;
-  int current_position = horizontal() ? tx : ty;
-  int maximum_position = current_position;
-  uchar d = damage();
-  Fl_Widget*const* a = array();
-  if (horizontal()) {
-    rw = -spacing_;
-    rh = th;
-    
-    for (int i = children(); i--;)
-      if (child(i)->visible()) {
-        if (child(i) != this->resizable()) rw += child(i)->w();
-        rw += spacing_;
-      }
-  } else {
-    rw = tw;
-    rh = -spacing_;
-    
-    for (int i = children(); i--;)
-      if (child(i)->visible()) {
-        if (child(i) != this->resizable()) rh += child(i)->h();
-        rh += spacing_;
-      }
-  }
-  for (int i = children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o->visible()) {
-      int X,Y,W,H;
-      if (horizontal()) {
-        X = current_position;
-        W = o->w();
-        Y = ty;
-        H = th;
-      } else {
-        X = tx;
-        W = tw;
-        Y = current_position;
-        H = o->h();
-      }
-      // Last child, if resizable, takes all remaining room
-      if(i == 0 && o == this->resizable()) {
-        if(horizontal())
-          W = tw - rw;
-        else
-          H = th - rh;
-      }
-      if (spacing_ && current_position>maximum_position && box() &&
-        (X != o->x() || Y != o->y() || d&FL_DAMAGE_ALL)) {
-        fl_color(color());
-        if (horizontal())
-          fl_rectf(maximum_position, ty, spacing_, th);
-        else
-          fl_rectf(tx, maximum_position, tw, spacing_);
-      }
-      if (X != o->x() || Y != o->y() || W != o->w() || H != o->h()) {
-        o->resize(X,Y,W,H);
-        o->clear_damage(FL_DAMAGE_ALL);
-      }
-      if (d&FL_DAMAGE_ALL) {
-        draw_child(*o);
-        draw_outside_label(*o);
-      } else update_child(*o);
-      // child's draw() can change it's size, so use new size:
-      current_position += (horizontal() ? o->w() : o->h());
-      if (current_position > maximum_position)
-        maximum_position = current_position;
-      current_position += spacing_;
-    }
-  }
-  
-  if (horizontal()) {
-    if (maximum_position < tx+tw && box()) {
-      fl_color(color());
-      fl_rectf(maximum_position, ty, tx+tw-maximum_position, th);
-    }
-    tw = maximum_position-tx;
-  } else {
-    if (maximum_position < ty+th && box()) {
-      fl_color(color());
-      fl_rectf(tx, maximum_position, tw, ty+th-maximum_position);
-    }
-    th = maximum_position-ty;
-  }
-  
-  tw += Fl::box_dw(box()); if (tw <= 0) tw = 1;
-  th += Fl::box_dh(box()); if (th <= 0) th = 1;
-  if (tw != w() || th != h()) {
-    Fl_Widget::resize(x(),y(),tw,th);
-    d = FL_DAMAGE_ALL;
-  }
-  if (d&FL_DAMAGE_ALL) {
-    draw_box();
-    draw_label();
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Paged_Device.cxx
+++ /dev/null
@@ -1,299 +1,0 @@
-//
-// "$Id$"
-//
-// implementation of Fl_Paged_Device class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-/** \file Fl_Paged_Device.cxx
- \brief implementation of class Fl_Paged_Device.
- */
-
-#include <FL/Fl_Paged_Device.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-const char *Fl_Paged_Device::class_id = "Fl_Paged_Device";
-
-
-/**
- @brief Draws the widget on the printed page.
- *
- The widget's position on the printed page is determined by the last call to origin()
- and by the optional delta_x and delta_y arguments.
- Its dimensions are in points unless there was a previous call to scale().
- @param[in] widget Any FLTK widget (e.g., standard, custom, window).
- @param[in] delta_x Optional horizontal offset for positioning the widget relatively
- to the current origin of graphics functions.
- @param[in] delta_y Same as above, vertically.
- */
-void Fl_Paged_Device::print_widget(Fl_Widget* widget, int delta_x, int delta_y) 
-{ 
-  int old_x, old_y, new_x, new_y, is_window;
-  if ( ! widget->visible() ) return;
-  is_window = (widget->as_window() != NULL);
-  uchar old_damage = widget->damage();
-  widget->damage(FL_DAMAGE_ALL);
-  // set origin to the desired top-left position of the widget
-  origin(&old_x, &old_y);
-  new_x = old_x + delta_x;
-  new_y = old_y + delta_y;
-  if (!is_window) {
-    new_x -= widget->x();
-    new_y -= widget->y();
-  }
-  if (new_x != old_x || new_y != old_y) {
-    translate(new_x - old_x, new_y - old_y );
-  }
-  // if widget is a main window, clip all drawings to the window area
-  if (is_window && !widget->window()) {
-    fl_push_clip(0, 0, widget->w(), widget->h() );
-#ifdef __APPLE__ // for Mac OS X 10.6 and above, make window with rounded bottom corners
-    if ( fl_mac_os_version >= 100600 && driver()->class_name() == Fl_Quartz_Graphics_Driver::class_id ) {
-      Fl_X::clip_to_rounded_corners(fl_gc, widget->w(), widget->h());
-    }
-#endif
-  }
-  // we do some trickery to recognize OpenGL windows and draw them via a plugin
-  int drawn_by_plugin = 0;
-  if (widget->as_gl_window()) {
-    Fl_Plugin_Manager pm("fltk:device");  
-    Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
-    if (pi) {
-      drawn_by_plugin = pi->print(widget, 0, 0, 0);
-    }
-  }
-  if (!drawn_by_plugin) {
-    widget->draw();
-  }
-  if (is_window && !widget->window()) fl_pop_clip();
-  // find subwindows of widget and print them
-  traverse(widget);
-  // reset origin to where it was
-  if (new_x != old_x || new_y != old_y) {
-    untranslate();
-  }
-  if ((old_damage & FL_DAMAGE_CHILD) == 0) widget->clear_damage(old_damage);
-  else widget->damage(FL_DAMAGE_ALL);
-}
-
-
-void Fl_Paged_Device::traverse(Fl_Widget *widget)
-{
-  Fl_Group *g = widget->as_group();
-  if (!g) return;
-  int n = g->children();
-  for (int i = 0; i < n; i++) {
-    Fl_Widget *c = g->child(i);
-    if ( !c->visible() ) continue;
-    if ( c->as_window() ) {
-      print_widget(c, c->x(), c->y());
-    }
-    else traverse(c);
-  }
-}
-
-/**
- @brief Computes the page coordinates of the current origin of graphics functions.
- *
- @param[out] x If non-null, *x is set to the horizontal page offset of graphics origin.
- @param[out] y Same as above, vertically.
- */
-void Fl_Paged_Device::origin(int *x, int *y)
-{
-  if (x) *x = x_offset;
-  if (y) *y = y_offset;
-}
-
-/**
- @brief Prints a rectangular part of an on-screen window.
-
- @param win The window from where to capture.
- @param x The rectangle left
- @param y The rectangle top
- @param w The rectangle width
- @param h The rectangle height
- @param delta_x Optional horizontal offset from current graphics origin where to print the captured rectangle.
- @param delta_y As above, vertically.
- */
-void Fl_Paged_Device::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
-{
-  Fl_Surface_Device *current = Fl_Surface_Device::surface();
-  Fl_Display_Device::display_device()->set_current();
-  Fl_Window *save_front = Fl::first_window();
-  win->show();
-  fl_gc = NULL;
-  Fl::check();
-  win->make_current();
-  uchar *image_data;
-  image_data = fl_read_image(NULL, x, y, w, h);
-#ifdef __APPLE__
-  Fl_X::q_release_context(); // matches make_current() call above
-#endif
-  if (save_front != win) save_front->show();
-  current->set_current();
-  fl_draw_image(image_data, delta_x, delta_y, w, h, 3);
-  delete[] image_data;
-#ifdef WIN32
-  fl_gc = GetDC(fl_xid(win));
-  ReleaseDC(fl_xid(win), fl_gc);
-#endif
-}
-
-/**
- @brief Starts a print job.
-
- @param[in] pagecount the total number of pages of the job (or 0 if you don't know the number of pages)
- @param[out] frompage if non-null, *frompage is set to the first page the user wants printed
- @param[out] topage if non-null, *topage is set to the last page the user wants printed
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::start_job(int pagecount, int *frompage, int *topage) {return 1;}
-
-/**
- @brief Starts a new printed page
-
- The page coordinates are initially in points, i.e., 1/72 inch, 
- and with origin at the top left of the printable page area.
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::start_page (void) {return 1;}
-
-/**
- @brief Computes the width and height of the printable area of the page.
-
- Values are in the same unit as that used by FLTK drawing functions,
- are unchanged by calls to origin(), but are changed by scale() calls.
- Values account for the user-selected paper type and print orientation.
- @return 0 if OK, non-zero if any error
- */
-int Fl_Paged_Device::printable_rect(int *w, int *h) {return 1;}
-
-/**
- @brief Computes the dimensions of margins that lie between the printable page area and
- the full page.
-
- Values are in the same unit as that used by FLTK drawing functions. They are changed
- by scale() calls.
- @param[out] left If non-null, *left is set to the left margin size.
- @param[out] top If non-null, *top is set to the top margin size.
- @param[out] right If non-null, *right is set to the right margin size.
- @param[out] bottom If non-null, *bottom is set to the bottom margin size.
- */
-void Fl_Paged_Device::margins(int *left, int *top, int *right, int *bottom) {}
-
-/**
- @brief Sets the position in page coordinates of the origin of graphics functions.
-
- Arguments should be expressed relatively to the result of a previous printable_rect() call.
- That is, <tt>printable_rect(&w, &h); origin(w/2, 0);</tt> sets the graphics origin at the
- top center of the page printable area.
- Origin() calls are not affected by rotate() calls.
- Successive origin() calls don't combine their effects.
- @param[in] x Horizontal position in page coordinates of the desired origin of graphics functions.
- @param[in] y Same as above, vertically.
- */
-void Fl_Paged_Device::origin(int x, int y) {}
-
-/**
- @brief Changes the scaling of page coordinates.
-
- This function also resets the origin of graphics functions at top left of printable page area.
- After a scale() call, do a printable_rect() call to get the new dimensions of the printable page area.
- Successive scale() calls don't combine their effects.
- @param scale_x Horizontal dimensions of plot are multiplied by this quantity.
- @param scale_y Same as above, vertically. 
-  The value 0. is equivalent to setting \p scale_y = \p scale_x. Thus, scale(factor);
-  is equivalent to scale(factor, factor);
- */
-void Fl_Paged_Device::scale (float scale_x, float scale_y) {}
-
-/**
- @brief Rotates the graphics operations relatively to paper.
-
- The rotation is centered on the current graphics origin. 
- Successive rotate() calls don't combine their effects.
- @param angle Rotation angle in counter-clockwise degrees.
- */
-void Fl_Paged_Device::rotate(float angle) {}
-
-/**
- @brief To be called at the end of each page.
-
- @return 0 if OK, non-zero if any error.
- */
-int Fl_Paged_Device::end_page (void) {return 1;}
-
-/**
- @brief To be called at the end of a print job.
- */
-void Fl_Paged_Device::end_job (void) {}
-
-/**
- @brief Translates the current graphics origin accounting for the current rotation.
-
- This function is only useful after a rotate() call. 
- Each translate() call must be matched by an untranslate() call.
- Successive translate() calls add up their effects.
- */
-void Fl_Paged_Device::translate(int x, int y) {}
-
-/**
- @brief Undoes the effect of a previous translate() call.
- */
-void Fl_Paged_Device::untranslate(void) {}
-
-const Fl_Paged_Device::page_format Fl_Paged_Device::page_formats[NO_PAGE_FORMATS] = { 
-  // order of enum Page_Format
-  // comes from appendix B of 5003.PPD_Spec_v4.3.pdf
-  
-  // A* // index(Ai) = i
-  {2384, 3370, "A0"},
-  {1684, 2384, "A1"},
-  {1191, 1684, "A2"},
-  { 842, 1191, "A3"},
-  { 595,  842, "A4"},
-  { 420,  595, "A5"},
-  { 297,  420, "A6"},
-  { 210,  297, "A7"},
-  { 148,  210, "A8"},
-  { 105,  148, "A9"},
-  
-  // B* // index(Bi) = i+10
-  {2920, 4127, "B0"},
-  {2064, 2920, "B1"},
-  {1460, 2064, "B2"},
-  {1032, 1460, "B3"},
-  { 729, 1032, "B4"},
-  { 516,  729, "B5"},
-  { 363,  516, "B6"},
-  { 258,  363, "B7"},
-  { 181,  258, "B8"},
-  { 127,  181, "B9"},
-  {  91,  127, "B10"},
-  
-  // others
-  { 459,  649, "EnvC5"}, // envelope
-  { 312,  624, "EnvDL"}, // envelope
-  { 522,  756, "Executive"},
-  { 595,  935, "Folio"},
-  {1224,  792, "Ledger"}, // landscape
-  { 612, 1008, "Legal"},
-  { 612,  792, "Letter"},
-  { 792, 1224, "Tabloid"},
-  { 297,  684, "Env10"} // envelope
-};
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Pixmap.cxx
+++ /dev/null
@@ -1,571 +1,0 @@
-//
-// "$Id$"
-//
-// Pixmap drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Draws X pixmap data, keeping it stashed in a server pixmap so it
-// redraws fast.
-
-// See fl_draw_pixmap.cxx for code used to get the actual data into pixmap.
-// Implemented without using the xpm library (which I can't use because
-// it interferes with the color cube used by fl_draw_image).
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Printer.H>
-
-#if defined(USE_X11)
-#  if HAVE_X11_XREGION_H
-#    include <X11/Xregion.h>
-#  else // if the X11/Xregion.h header is not available, we assume this is the layout of an X11 Region:
-typedef struct {
-  short x1, x2, y1, y2;
-} BOX;
-struct _XRegion {
-  long size;
-  long numRects;
-  BOX *rects;
-  BOX extents;
-};
-#  endif // HAVE_X11_XREGION_H
-#endif   // USE_X11
-
-#include <stdio.h>
-#include "flstring.h"
-#include <ctype.h>
-
-#ifdef WIN32
-extern void fl_release_dc(HWND, HDC);      // located in Fl_win32.cxx
-#endif
-
-extern uchar **fl_mask_bitmap; // used by fl_draw_pixmap.cxx to store mask
-void fl_restore_clip(); // in fl_rect.cxx
-
-void Fl_Pixmap::measure() {
-  int W, H;
-
-  // ignore empty or bad pixmap data:
-  if (w()<0 && data()) {
-    fl_measure_pixmap(data(), W, H);
-    w(W); h(H);
-  }
-}
-
-void Fl_Pixmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  fl_graphics_driver->draw(this, XP, YP, WP, HP, cx, cy);
-}
-
-static int start(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int w, int h, int &cx, int &cy,
-		 int &X, int &Y, int &W, int &H)
-{
-  // ignore empty or bad pixmap data:
-  if (!pxm->data()) {
-    return 2;
-  }
-  if (WP == -1) {
-    WP = w;
-    HP = h;
-  }
-  if (!w) {
-    return 2;
-  }
-  // account for current clip region (faster on Irix):
-  fl_clip_box(XP,YP,WP,HP,X,Y,W,H);
-  cx += X-XP; cy += Y-YP;
-  // clip the box down to the size of image, quit if empty:
-  if (cx < 0) {W += cx; X -= cx; cx = 0;}
-  if (cx+W > w) W = w-cx;
-  if (W <= 0) return 1;
-  if (cy < 0) {H += cy; Y -= cy; cy = 0;}
-  if (cy+H > h) H = h-cy;
-  if (H <= 0) return 1;
-  return 0;
-}
-
-int Fl_Pixmap::prepare(int XP, int YP, int WP, int HP, int &cx, int &cy,
-			   int &X, int &Y, int &W, int &H) {
-  if (w() < 0) measure();
-  int code = start(this, XP, YP, WP, HP, w(), h(), cx, cy, X, Y, W, H);
-  if (code) {
-    if (code == 2) draw_empty(XP, YP);
-    return 1;
-  }
-  if (!id_) {
-#ifdef __APPLE__
-    id_ = Fl_Quartz_Graphics_Driver::create_offscreen_with_alpha(w(), h());
-#else
-    id_ = fl_create_offscreen(w(), h());
-#endif
-    fl_begin_offscreen((Fl_Offscreen)id_);
-#ifndef __APPLE__
-    uchar *bitmap = 0;
-    fl_mask_bitmap = &bitmap;
-#endif
-    fl_draw_pixmap(data(), 0, 0, FL_BLACK);
-#ifndef __APPLE__
-#if defined(WIN32)
-    extern UINT win_pixmap_bg_color; // computed by fl_draw_pixmap()
-    this->pixmap_bg_color = win_pixmap_bg_color;
-#endif
-    fl_mask_bitmap = 0;
-    if (bitmap) {
-      mask_ = fl_create_bitmask(w(), h(), bitmap);
-      delete[] bitmap;
-    }
-#endif
-    fl_end_offscreen();
-  }
-  return 0;
-}
-
-//------------------------------------------------------------------------------
-#ifdef __APPLE__					// Apple, Mac OS X
-//------------------------------------------------------------------------------
-
-void Fl_Quartz_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->prepare(XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
-  copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-}
-
-//------------------------------------------------------------------------------
-#elif defined(WIN32)					// Windows GDI
-//------------------------------------------------------------------------------
-
-void Fl_GDI_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->prepare(XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
-  if (pxm->mask_) {
-    HDC new_gc = CreateCompatibleDC(fl_gc);
-    int save = SaveDC(new_gc);
-    SelectObject(new_gc, (void*)pxm->mask_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCAND);
-    SelectObject(new_gc, (void*)pxm->id_);
-    BitBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, SRCPAINT);
-    RestoreDC(new_gc,save);
-    DeleteDC(new_gc);
-  } else {
-    copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-  }
-}
-
-#if FLTK_ABI_VERSION < 10301
-UINT Fl_Pixmap::pixmap_bg_color = 0;
-#endif
-
-void Fl_GDI_Printer_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->prepare(XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
-  typedef BOOL (WINAPI* fl_transp_func)  (HDC,int,int,int,int,HDC,int,int,int,int,UINT);
-  static HMODULE hMod = NULL;
-  static fl_transp_func fl_TransparentBlt = NULL;
-  if (!hMod) {
-    hMod = LoadLibrary("MSIMG32.DLL");
-    if(hMod) fl_TransparentBlt = (fl_transp_func)GetProcAddress(hMod, "TransparentBlt");
-  }
-  if (fl_TransparentBlt) {
-    HDC new_gc = CreateCompatibleDC(fl_gc);
-    int save = SaveDC(new_gc);
-    SelectObject(new_gc, (void*)pxm->id_);
-    // print all of offscreen but its parts in background color
-    fl_TransparentBlt(fl_gc, X, Y, W, H, new_gc, cx, cy, W, H, pxm->pixmap_bg_color );
-    RestoreDC(new_gc,save);
-    DeleteDC(new_gc);
-  }
-  else {
-    copy_offscreen(X, Y, W, H, (Fl_Offscreen)pxm->id_, cx, cy);
-  }
-}
-
-//------------------------------------------------------------------------------
-#else							// X11, Xlib
-//------------------------------------------------------------------------------
-
-void Fl_Xlib_Graphics_Driver::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
-  int X, Y, W, H;
-  if (pxm->prepare(XP, YP, WP, HP, cx, cy, X, Y, W, H)) return;
-  if (pxm->mask_) {
-    // make X use the bitmap as a mask:
-    XSetClipMask(fl_display, fl_gc, pxm->mask_);
-    XSetClipOrigin(fl_display, fl_gc, X-cx, Y-cy);
-    if (clip_region()) {
-      // At this point, XYWH is the bounding box of the intersection between
-      // the current clip region and the (portion of the) pixmap we have to draw.
-      // The current clip region is often a rectangle. But, when a window with rounded
-      // corners is moved above another window, expose events may create a complex clip
-      // region made of several (e.g., 10) rectangles. We have to draw only in the clip
-      // region, and also to mask out the transparent pixels of the image. This can't
-      // be done in a single Xlib call for a multi-rectangle clip region. Thus, we
-      // process each rectangle of the intersection between the clip region and XYWH.
-      // See also STR #3206.
-      Region r = XRectangleRegion(X,Y,W,H);
-      XIntersectRegion(r, clip_region(), r);
-      int X1, Y1, W1, H1;
-      for (int i = 0; i < r->numRects; i++) {
-        X1 = r->rects[i].x1;
-        Y1 = r->rects[i].y1;
-        W1 = r->rects[i].x2 - r->rects[i].x1;
-        H1 = r->rects[i].y2 - r->rects[i].y1;
-        copy_offscreen(X1, Y1, W1, H1, pxm->id_, cx + (X1 - X), cy + (Y1 - Y));
-      }
-      XDestroyRegion(r);
-    } else {
-      copy_offscreen(X, Y, W, H, pxm->id_, cx, cy);
-    }
-    // put the old clip region back
-    XSetClipOrigin(fl_display, fl_gc, 0, 0);
-    restore_clip();
-  }
-  else copy_offscreen(X, Y, W, H, pxm->id_, cx, cy);
-}
-
-//------------------------------------------------------------------------------
-#endif							// (platform-specific)
-//------------------------------------------------------------------------------
-
-/**
-  The destructor frees all memory and server resources that are used by
-  the pixmap.
-*/
-Fl_Pixmap::~Fl_Pixmap() {
-  uncache();
-  delete_data();
-}
-
-void Fl_Pixmap::uncache() {
-  if (id_) {
-    fl_delete_offscreen((Fl_Offscreen)id_);
-    id_ = 0;
-  }
-
-  if (mask_) {
-    fl_delete_bitmask((Fl_Bitmask)mask_);
-    mask_ = 0;
-  }
-}
-
-void Fl_Pixmap::label(Fl_Widget* widget) {
-  widget->image(this);
-}
-
-void Fl_Pixmap::label(Fl_Menu_Item* m) {
-  Fl::set_labeltype(_FL_IMAGE_LABEL, labeltype, Fl_Image::measure);
-  m->label(_FL_IMAGE_LABEL, (const char*)this);
-}
-
-void Fl_Pixmap::copy_data() {
-  if (alloc_data) return;
-
-  char		**new_data,	// New data array
-		**new_row;	// Current row in image
-  int		i,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel,// Characters per color
-		chars_per_line;	// Characters per line
-
-  // Figure out how many colors there are, and how big they are...
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-  chars_per_line = chars_per_pixel * w() + 1;
-
-  // Allocate memory for the new array...
-  if (ncolors < 0) new_data = new char *[h() + 2];
-  else new_data = new char *[h() + ncolors + 1];
-
-  new_data[0] = new char[strlen(data()[0]) + 1];
-  strcpy(new_data[0], data()[0]);
-
-  // Copy colors...
-  if (ncolors < 0) {
-    // Copy FLTK colormap values...
-    ncolors = -ncolors;
-    new_row = new_data + 1;
-    *new_row = new char[ncolors * 4];
-    memcpy(*new_row, data()[1], ncolors * 4);
-    ncolors = 1;
-    new_row ++;
-  } else {
-    // Copy standard XPM colormap values...
-    for (i = 0, new_row = new_data + 1; i < ncolors; i ++, new_row ++) {
-      *new_row = new char[strlen(data()[i + 1]) + 1];
-      strcpy(*new_row, data()[i + 1]);
-    }
-  }
-
-  // Copy image data...
-  for (i = 0; i < h(); i ++, new_row ++) {
-    *new_row = new char[chars_per_line];
-    memcpy(*new_row, data()[i + ncolors + 1], chars_per_line);
-  }
-
-  // Update pointers...
-  data((const char **)new_data, h() + ncolors + 1);
-  alloc_data = 1;
-}
-
-Fl_Image *Fl_Pixmap::copy(int W, int H) {
-  Fl_Pixmap	*new_image;	// New pixmap
-
-  // Optimize the simple copy where the width and height are the same...
-  if (W == w() && H == h()) {
-    // Make an exact copy of the image and return it...
-    new_image = new Fl_Pixmap(data());
-    new_image->copy_data();
-    return new_image;
-  }
-  if (W <= 0 || H <= 0) return 0;
-
-  // OK, need to resize the image data; allocate memory and
-  char		**new_data,	// New array for image data
-		**new_row,	// Pointer to row in image data
-		*new_ptr,	// Pointer into new array
-		new_info[255];	// New information line
-  const char	*old_ptr;	// Pointer into old array
-  int		i,		// Looping var
-		c,		// Channel number
-		sy,		// Source coordinate
-		dx, dy,		// Destination coordinates
-		xerr, yerr,	// X & Y errors
-		xmod, ymod,	// X & Y moduli
-		xstep, ystep;	// X & Y step increments
-  int		ncolors,	// Number of colors in image
-		chars_per_pixel,// Characters per color
-		chars_per_line;	// Characters per line
-
-  // Figure out how many colors there are, and how big they are...
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-  chars_per_line = chars_per_pixel * W + 1;
-
-  sprintf(new_info, "%d %d %d %d", W, H, ncolors, chars_per_pixel);
-
-  // Figure out Bresenham step/modulus values...
-  xmod   = w() % W;
-  xstep  = (w() / W) * chars_per_pixel;
-  ymod   = h() % H;
-  ystep  = h() / H;
-
-  // Allocate memory for the new array...
-  if (ncolors < 0) new_data = new char *[H + 2];
-  else new_data = new char *[H + ncolors + 1];
-  new_data[0] = new char[strlen(new_info) + 1];
-  strcpy(new_data[0], new_info);
-
-  // Copy colors...
-  if (ncolors < 0) {
-    // Copy FLTK colormap values...
-    ncolors = -ncolors;
-    new_row = new_data + 1;
-    *new_row = new char[ncolors * 4];
-    memcpy(*new_row, data()[1], ncolors * 4);
-    ncolors = 1;
-    new_row ++;
-  } else {
-    // Copy standard XPM colormap values...
-    for (i = 0, new_row = new_data + 1; i < ncolors; i ++, new_row ++) {
-      *new_row = new char[strlen(data()[i + 1]) + 1];
-      strcpy(*new_row, data()[i + 1]);
-    }
-  }
-
-  // Scale the image using a nearest-neighbor algorithm...
-  for (dy = H, sy = 0, yerr = H; dy > 0; dy --, new_row ++) {
-    *new_row = new char[chars_per_line];
-    new_ptr  = *new_row;
-
-    for (dx = W, xerr = W, old_ptr = data()[sy + ncolors + 1];
-	 dx > 0;
-	 dx --) {
-      for (c = 0; c < chars_per_pixel; c ++) *new_ptr++ = old_ptr[c];
-
-      old_ptr += xstep;
-      xerr    -= xmod;
-
-      if (xerr <= 0) {
-	xerr    += W;
-	old_ptr += chars_per_pixel;
-      }
-    }
-
-    *new_ptr = '\0';
-    sy       += ystep;
-    yerr     -= ymod;
-    if (yerr <= 0) {
-      yerr += H;
-      sy ++;
-    }
-  }
-
-  new_image = new Fl_Pixmap((char*const*)new_data);
-  new_image->alloc_data = 1;
-
-  return new_image;
-}
-
-void Fl_Pixmap::color_average(Fl_Color c, float i) {
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  copy_data();
-
-  // Get the color to blend with...
-  uchar		r, g, b;
-  unsigned	ia, ir, ig, ib;
-
-  Fl::get_color(c, r, g, b);
-  if (i < 0.0f) i = 0.0f;
-  else if (i > 1.0f) i = 1.0f;
-
-  ia = (unsigned)(256 * i);
-  ir = r * (256 - ia);
-  ig = g * (256 - ia);
-  ib = b * (256 - ia);
-
-  // Update the colormap to do the blend...
-  char		line[255];	// New colormap line
-  int		color,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel;// Characters per color
-
-
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-
-  if (ncolors < 0) {
-    // Update FLTK colormap...
-    ncolors = -ncolors;
-    uchar *cmap = (uchar *)(data()[1]);
-    for (color = 0; color < ncolors; color ++, cmap += 4) {
-      cmap[1] = (ia * cmap[1] + ir) >> 8;
-      cmap[2] = (ia * cmap[2] + ig) >> 8;
-      cmap[3] = (ia * cmap[3] + ib) >> 8;
-    }
-  } else {
-    // Update standard XPM colormap...
-    for (color = 0; color < ncolors; color ++) {
-      // look for "c word", or last word if none:
-      const char *p = data()[color + 1] + chars_per_pixel + 1;
-      const char *previous_word = p;
-      for (;;) {
-	while (*p && isspace(*p)) p++;
-	char what = *p++;
-	while (*p && !isspace(*p)) p++;
-	while (*p && isspace(*p)) p++;
-	if (!*p) {p = previous_word; break;}
-	if (what == 'c') break;
-	previous_word = p;
-	while (*p && !isspace(*p)) p++;
-      }
-
-      if (fl_parse_color(p, r, g, b)) {
-        r = (ia * r + ir) >> 8;
-        g = (ia * g + ig) >> 8;
-        b = (ia * b + ib) >> 8;
-
-        if (chars_per_pixel > 1) sprintf(line, "%c%c c #%02X%02X%02X",
-	                                 data()[color + 1][0],
-	                                 data()[color + 1][1], r, g, b);
-        else sprintf(line, "%c c #%02X%02X%02X", data()[color + 1][0], r, g, b);
-
-        delete[] (char *)data()[color + 1];
-	((char **)data())[color + 1] = new char[strlen(line) + 1];
-	strcpy((char *)data()[color + 1], line);
-      }
-    }
-  }
-}
-
-void Fl_Pixmap::delete_data() {
-  if (alloc_data) {
-    for (int i = 0; i < count(); i ++) delete[] (char *)data()[i];
-    delete[] (char **)data();
-  }
-}
-
-void Fl_Pixmap::set_data(const char * const * p) {
-  int	height,		// Number of lines in image
-	ncolors;	// Number of colors in image
-
-  if (p) {
-    sscanf(p[0],"%*d%d%d", &height, &ncolors);
-    if (ncolors < 0) data(p, height + 2);
-    else data(p, height + ncolors + 1);
-  }
-}
-
-
-void Fl_Pixmap::desaturate() {
-  // Delete any existing pixmap/mask objects...
-  uncache();
-
-  // Allocate memory as needed...
-  copy_data();
-
-  // Update the colormap to grayscale...
-  char		line[255];	// New colormap line
-  int		i,		// Looping var
-		ncolors,	// Number of colors in image
-		chars_per_pixel;// Characters per color
-  uchar		r, g, b;
-
-  sscanf(data()[0],"%*d%*d%d%d", &ncolors, &chars_per_pixel);
-
-  if (ncolors < 0) {
-    // Update FLTK colormap...
-    ncolors = -ncolors;
-    uchar *cmap = (uchar *)(data()[1]);
-    for (i = 0; i < ncolors; i ++, cmap += 4) {
-      g = (uchar)((cmap[1] * 31 + cmap[2] * 61 + cmap[3] * 8) / 100);
-      cmap[1] = cmap[2] = cmap[3] = g;
-    }
-  } else {
-    // Update standard XPM colormap...
-    for (i = 0; i < ncolors; i ++) {
-      // look for "c word", or last word if none:
-      const char *p = data()[i + 1] + chars_per_pixel + 1;
-      const char *previous_word = p;
-      for (;;) {
-	while (*p && isspace(*p)) p++;
-	char what = *p++;
-	while (*p && !isspace(*p)) p++;
-	while (*p && isspace(*p)) p++;
-	if (!*p) {p = previous_word; break;}
-	if (what == 'c') break;
-	previous_word = p;
-	while (*p && !isspace(*p)) p++;
-      }
-
-      if (fl_parse_color(p, r, g, b)) {
-        g = (uchar)((r * 31 + g * 61 + b * 8) / 100);
-
-        if (chars_per_pixel > 1) sprintf(line, "%c%c c #%02X%02X%02X", data()[i + 1][0],
-	                                 data()[i + 1][1], g, g, g);
-        else sprintf(line, "%c c #%02X%02X%02X", data()[i + 1][0], g, g, g);
-
-        delete[] (char *)data()[i + 1];
-	((char **)data())[i + 1] = new char[strlen(line) + 1];
-	strcpy((char *)data()[i + 1], line);
-      }
-    }
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Positioner.cxx
+++ /dev/null
@@ -1,151 +1,0 @@
-//
-// "$Id$"
-//
-// Positioner widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The positioner widget from Forms, gives 2D input
-// Written by: Mark Overmars
-
-#include <FL/Fl.H>
-#include <FL/Fl_Positioner.H>
-#include <FL/fl_draw.H>
-
-static double flinear(double val, double smin, double smax, double gmin, double gmax)
-{
-  if (smin == smax) return gmax;
-  else return gmin + (gmax - gmin) * (val - smin) / (smax - smin);
-}
-
-void Fl_Positioner::draw(int X, int Y, int W, int H) {
-  int x1 = X + 4;
-  int y1 = Y + 4;
-  int w1 = W - 2 * 4;
-  int h1 = H - 2 * 4;
-  int xx = int(flinear(xvalue(), xmin, xmax, x1, x1+w1-1)+.5);
-  int yy = int(flinear(yvalue(), ymin, ymax, y1, y1+h1-1)+.5);
-  draw_box(box(), X, Y, W, H, color());
-  fl_color(selection_color());
-  fl_xyline(x1, yy, x1+w1);
-  fl_yxline(xx, y1, y1+h1);
-}
-
-void Fl_Positioner::draw() {
-  draw(x(), y(), w(), h());
-  draw_label();
-}
-
-/** Returns the current position in x and y.*/
-int Fl_Positioner::value(double X, double Y) {
-  clear_changed();
-  if (X == xvalue_ && Y == yvalue_) return 0;
-  xvalue_ = X; yvalue_ = Y;
-  redraw();
-  return 1;
-}
-
-/** Sets the X axis coordinate.*/
-int Fl_Positioner::xvalue(double X) {
-  return(value(X, yvalue_));
-}
-
-/** Sets the Y axis coordinate.*/
-int Fl_Positioner::yvalue(double Y) {
-  return(value(xvalue_, Y));
-}
-
-int Fl_Positioner::handle(int event, int X, int Y, int W, int H) {
-  switch (event) {
-  case FL_PUSH:
-  case FL_DRAG:
-  case FL_RELEASE: {
-    double x1 = X + 4;
-    double y1 = Y + 4;
-    double w1 = W - 2 * 4;
-    double h1 = H - 2 * 4;
-    double xx = flinear(Fl::event_x(), x1, x1+w1-1.0, xmin, xmax);
-    if (xstep_) xx = int(xx/xstep_+0.5) * xstep_;
-    if (xmin < xmax) {
-      if (xx < xmin) xx = xmin;
-      if (xx > xmax) xx = xmax;
-    } else {
-      if (xx > xmin) xx = xmin;
-      if (xx < xmax) xx = xmax;
-    }
-    double yy = flinear(Fl::event_y(), y1, y1+h1-1.0, ymin, ymax);
-    if (ystep_) yy = int(yy/ystep_+0.5) * ystep_;
-    if (ymin < ymax) {
-      if (yy < ymin) yy = ymin;
-      if (yy > ymax) yy = ymax;
-    } else {
-      if (yy > ymin) yy = ymin;
-      if (yy < ymax) yy = ymax;
-    }
-    if (xx != xvalue_ || yy != yvalue_) {
-      xvalue_ = xx; yvalue_ = yy;
-      set_changed();
-      redraw();
-                   } }
-    if (!(when() & FL_WHEN_CHANGED ||
-	  (when() & FL_WHEN_RELEASE && event == FL_RELEASE))) return 1;
-    if (changed() || when()&FL_WHEN_NOT_CHANGED) {
-      if (event == FL_RELEASE) clear_changed();
-      do_callback();
-    }
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-int Fl_Positioner::handle(int e) {
-  return handle(e, x(), y(), w(), h());
-}
-
-/**
-  Creates a new Fl_Positioner widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-*/
-Fl_Positioner::Fl_Positioner(int X, int Y, int W, int H, const char* l)
-: Fl_Widget(X, Y, W, H, l) {
-  box(FL_DOWN_BOX);
-  selection_color(FL_RED);
-  align(FL_ALIGN_BOTTOM);
-  when(FL_WHEN_CHANGED);
-  xmin = ymin = 0;
-  xmax = ymax = 1;
-  xvalue_ = yvalue_ = .5;
-  xstep_ = ystep_ = 0;
-}
-
-/** Sets the X axis bounds.*/
-void Fl_Positioner::xbounds(double a, double b) {
-  if (a != xmin || b != xmax) {
-    xmin = a; xmax = b;
-    redraw();
-  }
-}
-
-/** Sets the Y axis bounds.*/
-void Fl_Positioner::ybounds(double a, double b) {
-  if (a != ymin || b != ymax) {
-    ymin = a; ymax = b;
-    redraw();
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_PostScript.cxx
+++ /dev/null
@@ -1,1659 +1,0 @@
-//
-// "$Id$"
-//
-// PostScript device support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Printer.H>
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#include <stdio.h>
-#include <FL/Fl_PostScript.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <stdarg.h>
-#if defined(USE_X11)
-#include "Fl_Font.H"
-#if USE_XFT
-#include <X11/Xft/Xft.h>
-#endif
-#endif
-
-const char *Fl_PostScript_Graphics_Driver::class_id = "Fl_PostScript_Graphics_Driver";
-const char *Fl_PostScript_File_Device::class_id = "Fl_PostScript_File_Device";
-/** \brief Label of the PostScript file chooser window */
-const char *Fl_PostScript_File_Device::file_chooser_title = "Select a .ps file";
-
-/**
- @brief The constructor.
- */
-Fl_PostScript_Graphics_Driver::Fl_PostScript_Graphics_Driver(void)
-{
-  close_cmd_ = 0;
-  //lang_level_ = 3;
-  lang_level_ = 2;
-  mask = 0;
-  ps_filename_ = NULL;
-  scale_x = scale_y = 1.;
-  bg_r = bg_g = bg_b = 255;
-}
-
-/** \brief The destructor. */
-Fl_PostScript_Graphics_Driver::~Fl_PostScript_Graphics_Driver() {
-  if(ps_filename_) free(ps_filename_);
-}
-
-/**
- @brief The constructor.
- */
-Fl_PostScript_File_Device::Fl_PostScript_File_Device(void)
-{
-#ifdef __APPLE__
-  gc = fl_gc; // the display context is used by fl_text_extents()
-#endif
-  Fl_Surface_Device::driver( new Fl_PostScript_Graphics_Driver() );
-}
-
-/**
- \brief Returns the PostScript driver of this drawing surface.
- */
-Fl_PostScript_Graphics_Driver *Fl_PostScript_File_Device::driver()
-{
-  return (Fl_PostScript_Graphics_Driver*)Fl_Surface_Device::driver();
-}
-
-
-/**
- @brief Begins the session where all graphics requests will go to a local PostScript file.
- *
- Opens a file dialog entitled with Fl_PostScript_File_Device::file_chooser_title to select an output PostScript file.
- @param pagecount The total number of pages to be created. Use 0 if this number is unknown when this function is called.
- @param format Desired page format.
- @param layout Desired page layout.
- @return 0 if OK, 1 if user cancelled the file dialog, 2 if fopen failed on user-selected output file.
- */
-int Fl_PostScript_File_Device::start_job (int pagecount, enum Fl_Paged_Device::Page_Format format, 
-					  enum Fl_Paged_Device::Page_Layout layout)
-{
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title(Fl_PostScript_File_Device::file_chooser_title);
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
-  fnfc.options(Fl_Native_File_Chooser::SAVEAS_CONFIRM);
-  fnfc.filter("PostScript\t*.ps\n");
-  // Show native chooser
-  if ( fnfc.show() ) return 1;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = fl_fopen(fnfc.filename(), "w");
-  if(ps->output == NULL) return 2;
-  ps->ps_filename_ = strdup(fnfc.filename());
-  ps->start_postscript(pagecount, format, layout);
-  this->set_current();
-  return 0;
-}
-
-extern "C" {
-  static int dont_close(FILE *f)
-  {
-    return 0;
-  }
-}
-
-/**
- @brief Begins the session where all graphics requests will go to FILE pointer.
- *
- @param ps_output A writable FILE pointer that will receive PostScript output and that should not be closed
- until after end_job() has been called.
- @param pagecount The total number of pages to be created. Use 0 if this number is unknown when this function is called.
- @param format Desired page format.
- @param layout Desired page layout.
- @return always 0.
- */
-int Fl_PostScript_File_Device::start_job (FILE *ps_output, int pagecount, 
-    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = ps_output;
-  ps->ps_filename_ = NULL;
-  ps->start_postscript(pagecount, format, layout);
-  ps->close_command(dont_close); // so that end_job() doesn't close the file
-  this->set_current();
-  return 0;
-}
-
-/** Don't use with this class. */
-int Fl_PostScript_File_Device::start_job(int pagecount, int* from, int* to)
-{
-  return 1;
-}
-
-/**
- @brief The destructor.
- */
-Fl_PostScript_File_Device::~Fl_PostScript_File_Device() {
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if (ps) delete ps;
-}
-
-/** Shields output PostScript data from modifications of the current locale.
- It typically avoids PostScript errors caused if the current locale uses comma instead of dot
- as "decimal point".
- \param format  directives controlling output PostScript data
- \return value returned by vfprintf() call
- */
-int Fl_PostScript_Graphics_Driver::clocale_printf(const char *format, ...)
-{
-  char *saved_locale = setlocale(LC_NUMERIC, NULL);
-  setlocale(LC_NUMERIC, "C");
-  va_list args;
-  va_start(args, format);
-  int retval = vfprintf(output, format, args);
-  va_end(args);
-  setlocale(LC_NUMERIC, saved_locale);
-  return retval;
-}
-
-#ifndef FL_DOXYGEN
-
-#if ! (defined(__APPLE__) || defined(WIN32) )
-#  include "print_panel.cxx"
-#endif
-
-//  Prolog string 
-
-static const char * prolog =
-"%%BeginProlog\n"
-"/L { /y2 exch def\n"
-"/x2 exch def\n"
-"/y1 exch def\n"
-"/x1 exch def\n"
-"newpath   x1 y1 moveto x2 y2 lineto\n"
-"stroke}\n"
-"bind def\n"
-
-
-"/R { /dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath stroke\n"
-"} bind def\n"
-
-"/CL {\n"
-"/dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath\n"
-"clip\n"
-"} bind def\n"
-
-"/FR { /dy exch def\n"
-"/dx exch def\n"
-"/y exch def\n"
-"/x exch def\n"
-"currentlinewidth 0 setlinewidth newpath\n"
-"x y moveto\n"
-"dx 0 rlineto\n"
-"0 dy rlineto\n"
-"dx neg 0 rlineto\n"
-"closepath fill setlinewidth\n"
-"} bind def\n"
-
-"/GS { gsave } bind  def\n"
-"/GR { grestore } bind def\n"
-
-"/SP { showpage } bind def\n"
-"/LW { setlinewidth } bind def\n"
-"/CF /Courier def\n"
-"/SF { /CF exch def } bind def\n"
-"/fsize 12 def\n"
-"/FS { /fsize exch def fsize CF findfont exch scalefont setfont }def \n"
-
-
-"/GL { setgray } bind def\n"
-"/SRGB { setrgbcolor } bind def\n"
-
-"/A85RLE { /ASCII85Decode filter /RunLengthDecode filter } bind def\n" // ASCII85Decode followed by RunLengthDecode filters
-
-//  color images 
-
-"/CI { GS /py exch def /px exch def /sy exch def /sx exch def\n"
-"translate \n"
-"sx sy scale px py 8 \n"
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile A85RLE\n false 3"
-" colorimage GR\n"
-"} bind def\n"
-
-//  gray images 
-
-"/GI { GS /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale px py 8 \n"
-
-
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile A85RLE\n"
-"image GR\n"
-"} bind def\n"
-
-// single-color bitmask 
-
-"/MI { GS /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale px py true \n"
-"[ px 0 0 py neg 0 py ]\n"
-"currentfile A85RLE\n"
-"imagemask GR\n"
-"} bind def\n"
-
-
-//  path 
-
-"/BFP { newpath moveto }  def\n"
-"/BP { newpath } bind def \n"
-"/PL { lineto } bind def \n"
-"/PM { moveto } bind def \n"
-"/MT { moveto } bind def \n"
-"/LT { lineto } bind def \n"
-"/EFP { closepath fill } bind def\n"  //was:stroke
-"/ELP { stroke } bind def\n"  
-"/ECP { closepath stroke } bind def\n"  // Closed (loop)
-"/LW { setlinewidth } bind def\n"
-
-// ////////////////////////// misc ////////////////
-"/TR { translate } bind def\n"
-"/CT { concat } bind def\n"
-"/RCT { matrix invertmatrix concat} bind def\n"
-"/SC { scale } bind def\n"
-//"/GPD { currentpagedevice /PageSize get} def\n"
-
-// show at position with desired width
-// usage:
-// width (string) x y show_pos_width
-"/show_pos_width {GS moveto dup dup stringwidth pop exch length 2 div dup 2 le {pop 9999} if "
-"1 sub exch 3 index exch sub exch "
-"div 0 2 index 1 -1 scale ashow pop pop GR} bind def\n" // spacing altered to match desired width
-//"/show_pos_width {GS moveto dup stringwidth pop 3 2 roll exch div -1 matrix scale concat "
-//"show GR } bind def\n" // horizontally scaled text to match desired width
-
-;
-
-
-static const char * prolog_2 =  // prolog relevant only if lang_level >1
-
-// color image dictionaries
-"/CII {GS /inter exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceRGB setcolorspace\n"
-"/IDD 8 dict def\n"
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile A85RLE def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-"/Decode [ 0 1 0 1 0 1 ] def\n"
-"end\n"
-"IDD image GR} bind def\n"
-
-// gray image dict 
-"/GII {GS /inter exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceGray setcolorspace\n"
-"/IDD 8 dict def\n"
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-
-"/Interpolate inter def\n"
-"/DataSource currentfile A85RLE def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-"/Decode [ 0 1 ] def\n"
-"end\n"
-"IDD image GR} bind def\n"
-
-// Create a custom PostScript font derived from PostScript standard text fonts
-// The encoding of this custom font is as follows:
-// 0000-00FF  coincides with Unicode, that is to ASCII + Latin-1
-// 0100-017F  coincides with Unicode, that is to Latin Extended-A
-// 0180-01A6  encodes miscellaneous characters present in PostScript standard text fonts
-
-// use ISOLatin1Encoding for all text fonts
-"/ToISO { dup findfont dup length dict copy begin /Encoding ISOLatin1Encoding def currentdict end definefont pop } def\n"
-"/Helvetica ToISO /Helvetica-Bold ToISO /Helvetica-Oblique ToISO /Helvetica-BoldOblique ToISO \n"
-"/Courier ToISO /Courier-Bold ToISO /Courier-Oblique ToISO /Courier-BoldOblique ToISO \n"
-"/Times-Roman ToISO /Times-Bold ToISO /Times-Italic ToISO /Times-BoldItalic ToISO \n"
-
-// define LatinExtA, the encoding of Latin-extended-A + some additional characters
-// see http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt for their names
-"/LatinExtA \n"
-"[ "
-" /Amacron /amacron /Abreve /abreve /Aogonek /aogonek\n" // begin of Latin Extended-A code page
-" /Cacute  /cacute  /Ccircumflex  /ccircumflex  /Cdotaccent  /cdotaccent  /Ccaron  /ccaron \n"
-" /Dcaron  /dcaron   /Dcroat  /dcroat\n"
-" /Emacron  /emacron  /Ebreve  /ebreve  /Edotaccent  /edotaccent  /Eogonek  /eogonek  /Ecaron  /ecaron\n"
-" /Gcircumflex  /gcircumflex  /Gbreve  /gbreve  /Gdotaccent  /gdotaccent  /Gcommaaccent  /gcommaaccent \n"
-" /Hcircumflex /hcircumflex  /Hbar  /hbar  \n"
-" /Itilde  /itilde  /Imacron  /imacron  /Ibreve  /ibreve  /Iogonek  /iogonek /Idotaccent  /dotlessi  \n"
-" /IJ  /ij  /Jcircumflex  /jcircumflex\n"
-" /Kcommaaccent  /kcommaaccent  /kgreenlandic  \n"
-" /Lacute  /lacute  /Lcommaaccent  /lcommaaccent   /Lcaron  /lcaron  /Ldotaccent /ldotaccent   /Lslash  /lslash \n"
-" /Nacute  /nacute  /Ncommaaccent  /ncommaaccent  /Ncaron  /ncaron  /napostrophe  /Eng  /eng  \n"
-" /Omacron  /omacron /Obreve  /obreve  /Ohungarumlaut  /ohungarumlaut  /OE  /oe \n"
-" /Racute  /racute  /Rcommaaccent  /rcommaaccent  /Rcaron  /rcaron \n"
-" /Sacute /sacute  /Scircumflex  /scircumflex  /Scedilla /scedilla /Scaron  /scaron \n"
-" /Tcommaaccent  /tcommaaccent  /Tcaron  /tcaron  /Tbar  /tbar \n"
-" /Utilde  /utilde /Umacron /umacron  /Ubreve  /ubreve  /Uring  /uring  /Uhungarumlaut  /uhungarumlaut  /Uogonek /uogonek \n"
-" /Wcircumflex  /wcircumflex  /Ycircumflex  /ycircumflex  /Ydieresis \n"
-" /Zacute /zacute /Zdotaccent /zdotaccent /Zcaron /zcaron \n"
-" /longs \n" // end of Latin Extended-A code page
-" /florin  /circumflex  /caron  /breve  /dotaccent  /ring \n" // remaining characters from PostScript standard text fonts
-" /ogonek  /tilde  /hungarumlaut  /endash /emdash \n"
-" /quoteleft  /quoteright  /quotesinglbase  /quotedblleft  /quotedblright \n"
-" /quotedblbase  /dagger  /daggerdbl  /bullet  /ellipsis \n"
-" /perthousand  /guilsinglleft  /guilsinglright  /fraction  /Euro \n"
-" /trademark /partialdiff  /Delta /summation  /radical \n"
-" /infinity /notequal /lessequal /greaterequal /lozenge \n"
-" /fi /fl /apple \n"
-" ] def \n"
-// deal with alternative PostScript names of some characters
-" /mycharstrings /Helvetica findfont /CharStrings get def\n"
-" /PSname2 { dup mycharstrings exch known {LatinExtA 3 -1 roll 3 -1 roll put}{pop pop} ifelse } def \n"
-" 16#20 /Gdot PSname2 16#21 /gdot PSname2 16#30 /Idot PSname2 16#3F /Ldot PSname2 16#40 /ldot PSname2 16#7F /slong PSname2 \n"
-
-// proc that gives LatinExtA encoding to a font
-"/ToLatinExtA { findfont dup length dict copy begin /Encoding LatinExtA def currentdict end definefont pop } def\n"
-// create Ext-versions of standard fonts that use LatinExtA encoding \n"
-"/HelveticaExt /Helvetica ToLatinExtA \n"
-"/Helvetica-BoldExt /Helvetica-Bold ToLatinExtA /Helvetica-ObliqueExt /Helvetica-Oblique ToLatinExtA  \n"
-"/Helvetica-BoldObliqueExt /Helvetica-BoldOblique ToLatinExtA  \n"
-"/CourierExt /Courier ToLatinExtA /Courier-BoldExt /Courier-Bold ToLatinExtA  \n"
-"/Courier-ObliqueExt /Courier-Oblique ToLatinExtA /Courier-BoldObliqueExt /Courier-BoldOblique ToLatinExtA \n"
-"/Times-RomanExt /Times-Roman ToLatinExtA /Times-BoldExt /Times-Bold ToLatinExtA  \n"
-"/Times-ItalicExt /Times-Italic ToLatinExtA /Times-BoldItalicExt /Times-BoldItalic ToLatinExtA \n"
-
-// proc to create a Type 0 font with 2-byte encoding 
-// that merges a text font with ISO encoding + same font with LatinExtA encoding
-"/To2byte { 6 dict begin /FontType 0 def \n"
-"/FDepVector 3 1 roll findfont exch findfont 2 array astore def \n"
-"/FontMatrix [1  0  0  1  0  0] def /FMapType 6 def /Encoding [ 0 1 0 ] def\n"
-// 100: Hexa count of ISO array; A7: hexa count of LatinExtA array
-"/SubsVector < 01 0100 00A7 > def\n" 
-"currentdict end definefont pop } def\n"
-// create Type 0 versions of standard fonts
-"/Helvetica2B /HelveticaExt /Helvetica To2byte \n"
-"/Helvetica-Bold2B /Helvetica-BoldExt /Helvetica-Bold To2byte \n"
-"/Helvetica-Oblique2B /Helvetica-ObliqueExt /Helvetica-Oblique To2byte \n"
-"/Helvetica-BoldOblique2B /Helvetica-BoldObliqueExt /Helvetica-BoldOblique To2byte \n"
-"/Courier2B /CourierExt /Courier To2byte \n"
-"/Courier-Bold2B /Courier-BoldExt /Courier-Bold To2byte \n"
-"/Courier-Oblique2B /Courier-ObliqueExt /Courier-Oblique To2byte \n"
-"/Courier-BoldOblique2B /Courier-BoldObliqueExt /Courier-BoldOblique To2byte \n"
-"/Times-Roman2B /Times-RomanExt /Times-Roman To2byte \n"
-"/Times-Bold2B /Times-BoldExt /Times-Bold To2byte \n"
-"/Times-Italic2B /Times-ItalicExt /Times-Italic To2byte \n"
-"/Times-BoldItalic2B /Times-BoldItalicExt /Times-BoldItalic To2byte \n"
-;
-
-static const char * prolog_2_pixmap =  // prolog relevant only if lang_level == 2 for pixmaps/masked color images
-"/pixmap_mat {[ pixmap_sx 0 0 pixmap_sy neg 0 pixmap_sy ]}  bind def\n"
-
-"/pixmap_dict {"
-"<< /PatternType 1 "
-"/PaintType 1 "
-"/TilingType 2 "
-"/BBox [0  0  pixmap_sx  pixmap_sy] "
-"/XStep pixmap_sx "
-"/YStep pixmap_sy\n"
-"/PaintProc "
-"{ begin "
-"pixmap_w pixmap_h scale "
-"pixmap_sx pixmap_sy 8 "
-"pixmap_mat "
-"currentfile A85RLE "
-"false 3 "
-"colorimage "
-"end "
-"} bind "
-">>\n"
-"} bind def\n"
-
-"/pixmap_plot {"
-"GS "
-"/pixmap_sy exch def /pixmap_sx exch def\n"
-"/pixmap_h exch def /pixmap_w exch def\n"
-"translate\n"
-"pixmap_dict matrix makepattern setpattern\n"
-"pixmap_w pixmap_h scale\n"
-"pixmap_sx pixmap_sy\n"
-"true\n"
-"pixmap_mat\n"
-"currentfile A85RLE\n"
-"imagemask\n"
-"GR\n"
-"} bind def\n"
-;
-
-static const char * prolog_3 = // prolog relevant only if lang_level >2
-
-// masked color images 
-"/CIM {GS /inter exch def /my exch def /mx exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceRGB setcolorspace\n"
-
-"/IDD 8 dict def\n"
-
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile A85RLE def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-
-"/Decode [ 0 1 0 1 0 1 ] def\n"
-"end\n"
-
-"/IMD 8 dict def\n"
-"IMD begin\n"
-"/ImageType 1 def\n"
-"/Width mx def\n"           
-"/Height my def\n"
-"/BitsPerComponent 1 def\n"
-//  "/Interpolate inter def\n"
-"/ImageMatrix [ mx 0 0 my neg 0 my ] def\n"
-"/Decode [ 1 0 ] def\n"
-"end\n"
-
-"<<\n"
-"/ImageType 3\n"
-"/InterleaveType 2\n"
-"/MaskDict IMD\n"
-"/DataDict IDD\n"
-">> image GR\n"
-"} bind def\n"
-
-
-//  masked gray images 
-"/GIM {GS /inter exch def /my exch def /mx exch def /py exch def /px exch def /sy exch def /sx exch def \n"
-"translate \n"
-"sx sy scale\n"
-"/DeviceGray setcolorspace\n"
-
-"/IDD 8 dict def\n"
-
-"IDD begin\n"
-"/ImageType 1 def\n"
-"/Width px def\n"
-"/Height py def\n"
-"/BitsPerComponent 8 def\n"
-"/Interpolate inter def\n"
-"/DataSource currentfile A85RLE def\n"
-"/MultipleDataSources false def\n"
-"/ImageMatrix [ px 0 0 py neg 0 py ] def\n"
-
-"/Decode [ 0 1 ] def\n"
-"end\n"
-
-"/IMD 8 dict def\n"
-
-"IMD begin\n"
-"/ImageType 1 def\n"
-"/Width mx def\n"           
-"/Height my def\n"
-"/BitsPerComponent 1 def\n"
-"/ImageMatrix [ mx 0 0 my neg 0 my ] def\n"
-"/Decode [ 1 0 ] def\n"
-"end\n"
-
-"<<\n"
-"/ImageType 3\n"
-"/InterleaveType 2\n"
-"/MaskDict IMD\n"
-"/DataDict IDD\n"
-">> image GR\n"
-"} bind def\n"
-
-
-"\n"
-;
-
-// end prolog 
-
-int Fl_PostScript_Graphics_Driver::start_postscript (int pagecount, 
-    enum Fl_Paged_Device::Page_Format format, enum Fl_Paged_Device::Page_Layout layout)
-//returns 0 iff OK
-{
-  int w, h, x;
-  if (format == Fl_Paged_Device::A4) {
-    left_margin = 18;
-    top_margin = 18;
-  }
-  else {
-    left_margin = 12;
-    top_margin = 12;
-  }
-  page_format_ = (enum Fl_Paged_Device::Page_Format)(format | layout);
-  if (layout & Fl_Paged_Device::LANDSCAPE){
-    ph_ = Fl_Paged_Device::page_formats[format].width;
-    pw_ = Fl_Paged_Device::page_formats[format].height;
-  } else {
-    pw_ = Fl_Paged_Device::page_formats[format].width;
-    ph_ = Fl_Paged_Device::page_formats[format].height;
-  }
-  
-  fputs("%!PS-Adobe-3.0\n", output);
-  fputs("%%Creator: FLTK\n", output);
-  if (lang_level_>1)
-    fprintf(output, "%%%%LanguageLevel: %i\n" , lang_level_);
-  if ((pages_ = pagecount))
-    fprintf(output, "%%%%Pages: %i\n", pagecount);
-  else
-    fputs("%%Pages: (atend)\n", output);
-  fprintf(output, "%%%%BeginFeature: *PageSize %s\n", Fl_Paged_Device::page_formats[format].name );
-  w = Fl_Paged_Device::page_formats[format].width;
-  h = Fl_Paged_Device::page_formats[format].height;
-  if (lang_level_ == 3 && (layout & Fl_Paged_Device::LANDSCAPE) ) { x = w; w = h; h = x; }
-  fprintf(output, "<</PageSize[%d %d]>>setpagedevice\n", w, h );
-  fputs("%%EndFeature\n", output);
-  fputs("%%EndComments\n", output);
-  fputs(prolog, output);
-  if (lang_level_ > 1) {
-    fputs(prolog_2, output);
-    }
-  if (lang_level_ == 2) {
-    fputs(prolog_2_pixmap, output);
-    }
-  if (lang_level_ > 2)
-    fputs(prolog_3, output);
-  if (lang_level_ >= 3) {
-    fputs("/CS { clipsave } bind def\n", output);
-    fputs("/CR { cliprestore } bind def\n", output);
-  } else {
-    fputs("/CS { GS } bind def\n", output);
-    fputs("/CR { GR } bind def\n", output);
-  }
-  page_policy_ = 1;
-  
-  
-  fputs("%%EndProlog\n",output);
-  if (lang_level_ >= 2)
-    fprintf(output,"<< /Policies << /Pagesize 1 >> >> setpagedevice\n");
-  
-  reset();
-  nPages=0;
-  return 0;
-}
-
-void Fl_PostScript_Graphics_Driver::recover(){
-  color(cr_,cg_,cb_);
-  line_style(linestyle_,linewidth_,linedash_);
-  font(Fl_Graphics_Driver::font(), Fl_Graphics_Driver::size());
-}
-
-void Fl_PostScript_Graphics_Driver::reset(){
-  gap_=1;
-  clip_=0;
-  cr_=cg_=cb_=0;
-  Fl_Graphics_Driver::font(FL_HELVETICA, 12);
-  linewidth_=0;
-  linestyle_=FL_SOLID;
-  strcpy(linedash_,"");
-  Clip *c=clip_;   ////just not to have memory leaks for badly writen code (forgotten clip popping)
-  
-  while(c){
-    clip_=clip_->prev;
-    delete c;
-    c=clip_;
-  }
-  
-}
-
-void Fl_PostScript_Graphics_Driver::page_policy(int p){
-  page_policy_ = p;
-  if(lang_level_>=2)
-    fprintf(output,"<< /Policies << /Pagesize %i >> >> setpagedevice\n", p);
-}
-
-// //////////////////// paging //////////////////////////////////////////
-
-
-
-void Fl_PostScript_Graphics_Driver::page(double pw, double ph, int media) {
-  
-  if (nPages){
-    fprintf(output, "CR\nGR\nGR\nGR\nSP\nrestore\n");
-  }
-  ++nPages;
-  fprintf(output, "%%%%Page: %i %i\n" , nPages , nPages);
-  fprintf(output, "%%%%PageBoundingBox: 0 0 %d %d\n", pw > ph ? (int)ph : (int)pw , pw > ph ? (int)pw : (int)ph);
-  if (pw>ph){
-    fprintf(output, "%%%%PageOrientation: Landscape\n");
-  }else{
-    fprintf(output, "%%%%PageOrientation: Portrait\n");
-  }
-  
-  fprintf(output, "%%%%BeginPageSetup\n");
-  if((media & Fl_Paged_Device::MEDIA) &&(lang_level_>1)){
-    int r = media & Fl_Paged_Device::REVERSED;
-    if(r) r = 2;
-    fprintf(output, "<< /PageSize [%i %i] /Orientation %i>> setpagedevice\n", (int)(pw+.5), (int)(ph+.5), r);
-  }
-  fprintf(output, "%%%%EndPageSetup\n");
-  
-/*  pw_ = pw;
-  ph_ = ph;*/
-  reset();
-  
-  fprintf(output, "save\n");
-  fprintf(output, "GS\n");
-  clocale_printf( "%g %g TR\n", (double)0 /*lm_*/ , ph_ /* - tm_*/);
-  fprintf(output, "1 -1 SC\n");
-  line_style(0);
-  fprintf(output, "GS\n");
-  
-  if (!((media & Fl_Paged_Device::MEDIA) &&(lang_level_>1))){
-    if (pw > ph) {
-      if(media & Fl_Paged_Device::REVERSED) {
-        fprintf(output, "-90 rotate %i 0 translate\n", int(-pw));
-	}
-      else {
-        fprintf(output, "90 rotate -%i -%i translate\n", (lang_level_ == 2 ? int(pw - ph) : 0), int(ph));
-	}
-      }
-      else {
-	if(media & Fl_Paged_Device::REVERSED)
-	  fprintf(output, "180 rotate %i %i translate\n", int(-pw), int(-ph));
-	}
-  }
-  fprintf(output, "GS\nCS\n");
-}
-
-void Fl_PostScript_Graphics_Driver::page(int format){
-/*  if(format &  Fl_Paged_Device::LANDSCAPE){
-    ph_=Fl_Paged_Device::page_formats[format & 0xFF].width;
-    pw_=Fl_Paged_Device::page_formats[format & 0xFF].height;
-  }else{
-    pw_=Fl_Paged_Device::page_formats[format & 0xFF].width;
-    ph_=Fl_Paged_Device::page_formats[format & 0xFF].height;
-  }*/
-  page(pw_,ph_,format & 0xFF00);//,orientation only;
-}
-
-void Fl_PostScript_Graphics_Driver::rect(int x, int y, int w, int h) {
-  // Commented code does not work, i can't find the bug ;-(
-  // fprintf(output, "GS\n");
-  //  fprintf(output, "%i, %i, %i, %i R\n", x , y , w, h);
-  //  fprintf(output, "GR\n");
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x+w-1 , y);
-  fprintf(output, "%i %i LT\n", x+w-1 , y+h-1);
-  fprintf(output, "%i %i LT\n", x , y+h-1);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::rectf(int x, int y, int w, int h) {
-  clocale_printf( "%g %g %i %i FR\n", x-0.5, y-0.5, w, h);
-}
-
-void Fl_PostScript_Graphics_Driver::line(int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output, "%i %i %i %i L\n", x1 , y1, x2 ,y2);
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::line(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y );
-  fprintf(output, "%i %i LT\n", x1 , y );
-  fprintf(output, "%i %i LT\n", x1 , y2);
-  fprintf(output,"%i %i LT\n", x3 , y2);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1, int y2){
-  
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output,"%i %i LT\n", x1 , y);
-  fprintf(output, "%i %i LT\n", x1 , y2 );
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::xyline(int x, int y, int x1){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x1 , y );
-  fprintf(output, "ELP\n");
-  
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3){
-  fprintf(output, "GS\n");
-  
-  fprintf(output,"BP\n");
-  fprintf(output,"%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1 );
-  fprintf(output, "%i %i LT\n", x2 , y1 );
-  fprintf(output , "%i %i LT\n", x2 , y3);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1, int x2){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1);
-  fprintf(output, "%i %i LT\n", x2 , y1);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::yxline(int x, int y, int y1){
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x , y);
-  fprintf(output, "%i %i LT\n", x , y1);
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output, "%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "%i %i LT\n", x3 , y3);
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0);
-  fprintf(output,"%i %i LT\n", x1 , y1);
-  fprintf(output, "%i %i LT\n", x2 , y2);
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
-  fprintf(output, "GS\n");
-  fprintf(output,"BP\n");
-  fprintf(output, "%i %i MT\n", x0 , y0 );
-  fprintf(output, "%i %i LT\n", x1 , y1 );
-  fprintf(output, "%i %i LT\n", x2 , y2 );
-  fprintf(output, "%i %i LT\n", x3 , y3 );
-  
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::point(int x, int y){
-  rectf(x,y,1,1);
-}
-
-static const int dashes_flat[5][7]={
-{-1,0,0,0,0,0,0},
-{3,1,-1,0,0,0,0},
-{1,1,-1,0,0,0,0},
-{3,1,1,1,-1,0,0},
-{3,1,1,1,1,1,-1}
-};
-
-
-//yeah, hack...
-static const double dashes_cap[5][7]={
-{-1,0,0,0,0,0,0},
-{2,2,-1,0,0,0,0},
-{0.01,1.99,-1,0,0,0,0},
-{2,2,0.01,1.99,-1,0,0},
-{2,2,0.01,1.99,0.01,1.99,-1}
-};
-
-
-void Fl_PostScript_Graphics_Driver::line_style(int style, int width, char* dashes){
-  //line_styled_=1;
-  
-  linewidth_=width;
-  linestyle_=style;
-  //dashes_= dashes;
-  if(dashes){
-    if(dashes != linedash_)
-      strcpy(linedash_,dashes);
-    
-  }else
-    linedash_[0]=0;
-  char width0 = 0;
-  if(!width){
-    width=1; //for screen drawing compatibility
-    width0=1;
-  }
-  
-  fprintf(output, "%i setlinewidth\n", width);
-  
-  if(!style && (!dashes || !(*dashes)) && width0) //system lines
-    style = FL_CAP_SQUARE;
-  
-  int cap = (style &0xf00) >> 8;
-  if(cap) cap--;
-  fprintf(output,"%i setlinecap\n", cap);
-  
-  int join = (style & 0xf000) >> 12;
-  
-  if(join) join--;
-  fprintf(output,"%i setlinejoin\n", join);
-  
-  
-  fprintf(output, "[");
-  if(dashes && *dashes){
-    while(*dashes){
-      fprintf(output, "%i ", *dashes);
-      dashes++;
-    }
-  }else{
-    if(style & 0x200){ // round and square caps, dash length need to be adjusted
-      const double *dt = dashes_cap[style & 0xff];
-      while (*dt >= 0){
-        clocale_printf("%g ",width * (*dt));
-        dt++;
-      }
-    }else{
-      
-      const int *ds = dashes_flat[style & 0xff];
-      while (*ds >= 0){
-	fprintf(output, "%i ",width * (*ds));
-        ds++;
-      }
-    }
-  }
-  fprintf(output, "] 0 setdash\n");
-}
-
-static const char *_fontNames[] = {
-"Helvetica2B", 
-"Helvetica-Bold2B",
-"Helvetica-Oblique2B",
-"Helvetica-BoldOblique2B",
-"Courier2B",
-"Courier-Bold2B",
-"Courier-Oblique2B",
-"Courier-BoldOblique2B",
-"Times-Roman2B",
-"Times-Bold2B",
-"Times-Italic2B",
-"Times-BoldItalic2B",
-"Symbol",
-"Courier2B",
-"Courier-Bold2B",
-"ZapfDingbats"
-};
-
-void Fl_PostScript_Graphics_Driver::font(int f, int s) {
-  Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver();
-  driver->font(f,s); // Use display fonts for font measurement
-  Fl_Graphics_Driver::font(f, s);
-  Fl_Font_Descriptor *desc = driver->font_descriptor();
-  this->font_descriptor(desc);
-  if (f < FL_FREE_FONT) {
-    float ps_size = (float) s;
-    fprintf(output, "/%s SF\n" , _fontNames[f]);
-#if defined(USE_X11) 
-#if USE_XFT
-    // Xft font height is sometimes larger than the required size (see STR 2566).
-    // Increase the PostScript font size by 15% without exceeding the display font height 
-    int max = desc->font->height;
-    ps_size = s * 1.15;
-    if (ps_size > max) ps_size = max;
-#else
-    // Non-Xft fonts can be smaller than required.
-    // Set the PostScript font size to the display font height 
-    char *name = desc->font->font_name_list[0];
-    char *p = strstr(name, "--");
-    if (p) {
-      sscanf(p + 2, "%f", &ps_size);
-    }
-#endif // USE_XFT
-#endif // USE_X11
-    clocale_printf("%.1f FS\n", ps_size);
-  }
-}
-
-double Fl_PostScript_Graphics_Driver::width(const char *s, int n) {
-  return Fl_Display_Device::display_device()->driver()->width(s, n);
-}
-
-double Fl_PostScript_Graphics_Driver::width(unsigned u) {
-  return Fl_Display_Device::display_device()->driver()->width(u);
-}
-
-int Fl_PostScript_Graphics_Driver::height() {
-  return Fl_Display_Device::display_device()->driver()->height();
-}
-
-int Fl_PostScript_Graphics_Driver::descent() {
-  return Fl_Display_Device::display_device()->driver()->descent();
-}
-
-void Fl_PostScript_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-  Fl_Display_Device::display_device()->driver()->text_extents(c, n, dx, dy, w, h);
-}
-
-
-void Fl_PostScript_Graphics_Driver::color(Fl_Color c) {
-  Fl::get_color(c, cr_, cg_, cb_);
-  color(cr_, cg_, cb_);
-}
-
-void Fl_PostScript_Graphics_Driver::color(unsigned char r, unsigned char g, unsigned char b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  cr_ = r; cg_ = g; cb_ = b;
-  if (r == g && g == b) {
-    double gray = r/255.0;
-    clocale_printf("%g GL\n", gray);
-  } else {
-    double fr, fg, fb;
-    fr = r/255.0;
-    fg = g/255.0;
-    fb = b/255.0;
-    clocale_printf("%g %g %g SRGB\n", fr , fg , fb);
-  }
-}
-
-void Fl_PostScript_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y)
-{
-  fprintf(output, "GS %d %d translate %d rotate\n", x, y, - angle);
-  this->transformed_draw(str, n, 0, 0);
-  fprintf(output, "GR\n");
-}
-
-
-// computes the mask for the RGB image img of all pixels with color != bg
-static uchar *calc_mask(uchar *img, int w, int h, Fl_Color bg)
-{
-  uchar red, green, blue, r, g, b;
-  uchar bit, byte, *q;
-  Fl::get_color(bg, red, green, blue);
-  int W = (w+7)/8; // width of mask
-  uchar* mask = new uchar[W * h];
-  q = mask;
-  while (h-- > 0) { // for each row
-    bit = 0x80; // byte with last bit set
-    byte = 0; // next mask byte to compute
-    for (int j = 0; j < w; j++) { // for each column
-      r = *img++; // the pixel color components
-      g = *img++;
-      b = *img++;
-      // if pixel doesn't have bg color, put it in mask
-      if (r != red || g != green || b != blue) byte |= bit;
-      bit = bit>>1; // shift bit one step to the right
-      if (bit == 0) { // single set bit has fallen out
-	*q++ = byte; // enter byte in mask
-	byte = 0; // reset next mask byte to zero
-	bit = 0x80; // and this byte
-	}
-      }
-    if (bit != 0x80) *q++ = byte; // enter last columns' byte in mask
-    }
-  return mask;
-}
-
-// write to PostScript a bitmap image of a UTF8 string
-void Fl_PostScript_Graphics_Driver::transformed_draw_extra(const char* str, int n, double x, double y, int w, bool rtl)
-{
-  // scale for bitmask computation
-#if defined(USE_X11) && !USE_XFT
-  float scale = 1; // don't scale because we can't expect to have scalable fonts
-#else
-  float scale = 2;
-#endif
-  Fl_Fontsize old_size = size();
-  Fl_Font fontnum = Fl_Graphics_Driver::font();
-  int w_scaled =  (int)(w * (scale + 0.5));
-  int h = (int)(height() * scale);
-  // create an offscreen image of the string
-  Fl_Color text_color = Fl_Graphics_Driver::color();
-  Fl_Color bg_color = fl_contrast(FL_WHITE, text_color);
-  Fl_Offscreen off = fl_create_offscreen(w_scaled, (int)(h+3*scale) );
-  fl_begin_offscreen(off);
-  fl_color(bg_color);
-  // color offscreen background with a shade contrasting with the text color
-  fl_rectf(0, 0, w_scaled, (int)(h+3*scale) );
-  fl_color(text_color);
-#if defined(USE_X11) && !USE_XFT
-  // force seeing this font as new so it's applied to the offscreen graphics context
-  fl_graphics_driver->font_descriptor(NULL);
-  fl_font(fontnum, 0);
-#endif
-  fl_font(fontnum, (Fl_Fontsize)(scale * old_size) );
-  int w2 = (int)fl_width(str, n);
-  // draw string in offscreen
-  if (rtl) fl_rtl_draw(str, n, w2, (int)(h * 0.8) );
-  else fl_draw(str, n, 1, (int)(h * 0.8) );
-  // read (most of) the offscreen image
-  uchar *img = fl_read_image(NULL, 1, 1, w2, h, 0);
-  fl_end_offscreen();
-  font(fontnum, old_size);
-  fl_delete_offscreen(off);
-  // compute the mask of what is not the background
-  uchar *mask = calc_mask(img, w2, h, bg_color);
-  delete[] img;
-  // write the string image to PostScript as a scaled bitmask
-  scale = w2 / float(w);
-  clocale_printf("%g %g %g %g %d %d MI\n", x, y - h*0.77/scale, w2/scale, h/scale, w2, h);
-  uchar *di;
-  int wmask = (w2+7)/8;
-  void *rle85 = prepare_rle85();
-  for (int j = h - 1; j >= 0; j--){
-    di = mask + j * wmask;
-    for (int i = 0; i < wmask; i++){
-      write_rle85(*di, rle85);
-      di++;
-    }
-  }
-  close_rle85(rle85); fputc('\n', output);
-  delete[] mask;
-}
-
-static int is_in_table(unsigned utf) {
-  unsigned i;
-  static unsigned extra_table_roman[] = { // unicodes/*names*/ of other characters from PostScript standard fonts
-    0x192/*florin*/, 0x2C6/*circumflex*/, 0x2C7/*caron*/, 
-    0x2D8/*breve*/, 0x2D9/*dotaccent*/, 0x2DA/*ring*/, 0x2DB/*ogonek*/, 0x2DC/*tilde*/, 0x2DD/*hungarumlaut*/,
-    0x2013/*endash*/, 0x2014/*emdash*/, 0x2018/*quoteleft*/, 0x2019/*quoteright*/, 
-    0x201A/*quotesinglbase*/, 0x201C/*quotedblleft*/, 0x201D/*quotedblright*/, 0x201E/*quotedblbase*/, 
-    0x2020/*dagger*/, 0x2021/*daggerdbl*/, 0x2022/*bullet*/,
-    0x2026/*ellipsis*/, 0x2030/*perthousand*/, 0x2039/*guilsinglleft*/, 0x203A/*guilsinglright*/, 
-    0x2044/*fraction*/, 0x20AC/*Euro*/, 0x2122/*trademark*/, 
-    0x2202/*partialdiff*/, 0x2206/*Delta*/, 0x2211/*summation*/, 0x221A/*radical*/,
-    0x221E/*infinity*/, 0x2260/*notequal*/, 0x2264/*lessequal*/, 
-    0x2265/*greaterequal*/, 
-    0x25CA/*lozenge*/, 0xFB01/*fi*/, 0xFB02/*fl*/,
-    0xF8FF/*apple*/
-  };
-  for ( i = 0; i < sizeof(extra_table_roman)/sizeof(int); i++) {
-    if (extra_table_roman[i] == utf) return i + 0x180;
-  }
-  return 0;
-}
-
-// outputs in PostScript a UTF8 string using the same width in points as on display
-void Fl_PostScript_Graphics_Driver::transformed_draw(const char* str, int n, double x, double y) {
-  int len, code;
-  if (!n || !str || !*str) return;
-  // compute display width of string
-  int w = (int)width(str, n);
-  if (w == 0) return;
-  if (Fl_Graphics_Driver::font() >= FL_FREE_FONT) {
-    transformed_draw_extra(str, n, x, y, w, false);
-    return;
-    }
-  fprintf(output, "%d <~", w);
-  void *data = prepare85();
-  // transforms UTF8 encoding to our custom PostScript encoding as follows:
-  // extract each unicode character
-  // if unicode <= 0x17F, unicode and PostScript codes are identical
-  // if unicode is one of the values listed in extra_table_roman above
-  //    its PostScript code is 0x180 + the character's rank in extra_table_roman
-  // if unicode is something else, draw all string as bitmap image
-
-  const char *last = str + n;
-  const char *str2 = str;
-  while (str2 < last) {
-    // Extract each unicode character of string.
-    unsigned utf = fl_utf8decode(str2, last, &len);
-    str2 += len;
-    if (utf <= 0x17F) { // until Latin Extended-A
-      ;
-      }
-    else if ( (code = is_in_table(utf)) != 0) { // other handled characters
-      utf = code;
-      }
-    else { // unhandled character: draw all string as bitmap image
-      fprintf(output, "~> pop pop\n"); // close and ignore the opened hex string
-      transformed_draw_extra(str, n, x, y, w, false);
-      return;
-    }
-    // 2 bytes per character, high-order byte first, encode that to ASCII85
-    uchar c[2]; c[1] = utf & 0xFF; c[0] = (utf & 0xFF00)>>8; write85(data, c, 2);
-  }
-  close85(data);
-  clocale_printf(" %g %g show_pos_width\n", x, y);
-}
-
-void Fl_PostScript_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
-  int w = (int)width(str, n);
-  transformed_draw_extra(str, n, x - w, y, w, true);
-}
-
-void Fl_PostScript_Graphics_Driver::concat(){
-  clocale_printf("[%g %g %g %g %g %g] CT\n", fl_matrix->a , fl_matrix->b , fl_matrix->c , fl_matrix->d , fl_matrix->x , fl_matrix->y);
-}
-
-void Fl_PostScript_Graphics_Driver::reconcat(){
-  clocale_printf("[%g %g %g %g %g %g] RCT\n" , fl_matrix->a , fl_matrix->b , fl_matrix->c , fl_matrix->d , fl_matrix->x , fl_matrix->y);
-}
-
-/////////////////  transformed (double) drawings ////////////////////////////////
-
-
-void Fl_PostScript_Graphics_Driver::begin_points(){
-  fprintf(output, "GS\n");
-  concat();
-  
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=POINTS;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_line(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=LINE;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_loop(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=LOOP;
-}
-
-void Fl_PostScript_Graphics_Driver::begin_polygon(){
-  fprintf(output, "GS\n");
-  concat();
-  fprintf(output, "BP\n");
-  gap_=1;
-  shape_=POLYGON;
-}
-
-void Fl_PostScript_Graphics_Driver::vertex(double x, double y){
-  if(shape_==POINTS){
-    clocale_printf("%g %g MT\n", x , y);
-    gap_=1;
-    return;
-  }
-  if(gap_){
-    clocale_printf("%g %g MT\n", x , y);
-    gap_=0;
-  }else
-    clocale_printf("%g %g LT\n", x , y);
-}
-
-void Fl_PostScript_Graphics_Driver::curve(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3){
-  if(shape_==NONE) return;
-  if(gap_)
-    clocale_printf("%g %g MT\n", x , y);
-  else
-    clocale_printf("%g %g LT\n", x , y);
-  gap_=0;
-  
-  clocale_printf("%g %g %g %g %g %g curveto \n", x1 , y1 , x2 , y2 , x3 , y3);
-}
-
-
-void Fl_PostScript_Graphics_Driver::circle(double x, double y, double r){
-  if(shape_==NONE){
-    fprintf(output, "GS\n");
-    concat();
-    //    fprintf(output, "BP\n");
-    clocale_printf("%g %g %g 0 360 arc\n", x , y , r);
-    reconcat();
-    //    fprintf(output, "ELP\n");
-    fprintf(output, "GR\n");
-  }else
-    
-    clocale_printf("%g %g %g 0 360 arc\n", x , y , r);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::arc(double x, double y, double r, double start, double a){
-  if(shape_==NONE) return;
-  gap_=0;
-  if(start>a)
-    clocale_printf("%g %g %g %g %g arc\n", x , y , r , -start, -a);
-  else
-    clocale_printf("%g %g %g %g %g arcn\n", x , y , r , -start, -a);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::arc(int x, int y, int w, int h, double a1, double a2) {
-  if (w <= 1 || h <= 1) return;
-  fprintf(output, "GS\n");
-  //fprintf(output, "BP\n");
-  begin_line();
-  clocale_printf("%g %g TR\n", x + w/2.0 -0.5 , y + h/2.0 - 0.5);
-  clocale_printf("%g %g SC\n", (w-1)/2.0 , (h-1)/2.0 );
-  arc(0,0,1,a2,a1);
-  //  fprintf(output, "0 0 1 %g %g arc\n" , -a1 , -a2);
-  clocale_printf("%g %g SC\n", 2.0/(w-1) , 2.0/(h-1) );
-  clocale_printf("%g %g TR\n", -x - w/2.0 +0.5 , -y - h/2.0 +0.5);
-  end_line();
-  
-  //  fprintf(output, "%g setlinewidth\n",  2/sqrt(w*h));
-  //  fprintf(output, "ELP\n");
-  //  fprintf(output, 2.0/w , 2.0/w , " SC\n";
-  //  fprintf(output, (-x - w/2.0) , (-y - h/2)  , " TR\n";
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::pie(int x, int y, int w, int h, double a1, double a2) {
-  fprintf(output, "GS\n");
-  begin_polygon();
-  clocale_printf("%g %g TR\n", x + w/2.0 -0.5 , y + h/2.0 - 0.5);
-  clocale_printf("%g %g SC\n", (w-1)/2.0 , (h-1)/2.0 );
-  vertex(0,0);
-  arc(0.0,0.0, 1, a2, a1);
-  end_polygon();
-  fprintf(output, "GR\n");
-}
-
-void Fl_PostScript_Graphics_Driver::end_points(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ELP\n"); //??
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::end_line(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ELP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-void Fl_PostScript_Graphics_Driver::end_loop(){
-  gap_=1;
-  reconcat();
-  fprintf(output, "ECP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::end_polygon(){
-  
-  gap_=1;
-  reconcat();
-  fprintf(output, "EFP\n");
-  fprintf(output, "GR\n");
-  shape_=NONE;
-}
-
-void Fl_PostScript_Graphics_Driver::transformed_vertex(double x, double y){
-  reconcat();
-  if(gap_){
-    clocale_printf("%g %g MT\n", x , y);
-    gap_=0;
-  }else
-    clocale_printf("%g %g LT\n", x , y);
-  concat();
-}
-
-/////////////////////////////   Clipping /////////////////////////////////////////////
-
-void Fl_PostScript_Graphics_Driver::push_clip(int x, int y, int w, int h) {
-  Clip * c=new Clip();
-  clip_box(x,y,w,h,c->x,c->y,c->w,c->h);
-  c->prev=clip_;
-  clip_=c;
-  fprintf(output, "CR\nCS\n");
-  if(lang_level_<3)
-    recover();
-  clocale_printf("%g %g %i %i CL\n", clip_->x-0.5 , clip_->y-0.5 , clip_->w  , clip_->h);
-  
-}
-
-void Fl_PostScript_Graphics_Driver::push_no_clip() {
-  Clip * c = new Clip();
-  c->prev=clip_;
-  clip_=c;
-  clip_->x = clip_->y = clip_->w = clip_->h = -1;
-  fprintf(output, "CR\nCS\n");
-  if(lang_level_<3)
-    recover();
-}
-
-void Fl_PostScript_Graphics_Driver::pop_clip() {
-  if(!clip_)return;
-  Clip * c=clip_;
-  clip_=clip_->prev;
-  delete c;
-  fprintf(output, "CR\nCS\n");
-  if(clip_ && clip_->w >0)
-    clocale_printf("%g %g %i %i CL\n", clip_->x - 0.5, clip_->y - 0.5, clip_->w  , clip_->h);
-  // uh, -0.5 is to match screen clipping, for floats there should be something beter
-  if(lang_level_<3)
-    recover();
-}
-
-int Fl_PostScript_Graphics_Driver::clip_box(int x, int y, int w, int h, int &X, int &Y, int &W, int &H){
-  if(!clip_){
-    X=x;Y=y;W=w;H=h;
-    return 1;
-  }
-  if(clip_->w < 0){
-    X=x;Y=y;W=w;H=h;
-    return 1;
-  }
-  int ret=0;
-  if (x > (X=clip_->x)) {X=x; ret=1;}
-  if (y > (Y=clip_->y)) {Y=y; ret=1;}
-  if ((x+w) < (clip_->x+clip_->w)) {
-    W=x+w-X;
-    
-    ret=1;
-    
-  }else
-    W = clip_->x + clip_->w - X;
-  if(W<0){
-    W=0;
-    return 1;
-  }
-  if ((y+h) < (clip_->y+clip_->h)) {
-    H=y+h-Y;
-    ret=1;
-  }else
-    H = clip_->y + clip_->h - Y;
-  if(H<0){
-    W=0;
-    H=0;
-    return 1;
-  }
-  return ret;
-}
-
-int Fl_PostScript_Graphics_Driver::not_clipped(int x, int y, int w, int h){
-  if(!clip_) return 1;
-  if(clip_->w < 0) return 1;
-  int X, Y, W, H;
-  clip_box(x, y, w, h, X, Y, W, H);
-  if(W) return 1;
-  return 0;
-}
-
-void Fl_PostScript_File_Device::margins(int *left, int *top, int *right, int *bottom) // to implement
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if(left) *left = (int)(ps->left_margin / ps->scale_x + .5);
-  if(right) *right = (int)(ps->left_margin / ps->scale_x + .5);
-  if(top) *top = (int)(ps->top_margin / ps->scale_y + .5);
-  if(bottom) *bottom = (int)(ps->top_margin / ps->scale_y + .5);
-}
-
-int Fl_PostScript_File_Device::printable_rect(int *w, int *h)
-//returns 0 iff OK
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if(w) *w = (int)((ps->pw_ - 2 * ps->left_margin) / ps->scale_x + .5);
-  if(h) *h = (int)((ps->ph_ - 2 * ps->top_margin) / ps->scale_y + .5);
-  return 0;
-}
-
-void Fl_PostScript_File_Device::origin(int *x, int *y)
-{
-  Fl_Paged_Device::origin(x, y);
-}
-
-void Fl_PostScript_File_Device::origin(int x, int y)
-{
-  x_offset = x;
-  y_offset = y;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->clocale_printf("GR GR GS %d %d TR  %f %f SC %d %d TR %f rotate GS\n",
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, x, y, ps->angle);
-}
-
-void Fl_PostScript_File_Device::scale (float s_x, float s_y)
-{
-  if (s_y == 0.) s_y = s_x;
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->scale_x = s_x;
-  ps->scale_y = s_y;
-  ps->clocale_printf("GR GR GS %d %d TR  %f %f SC %f rotate GS\n",
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, ps->angle);
-}
-
-void Fl_PostScript_File_Device::rotate (float rot_angle)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->angle = - rot_angle;
-  ps->clocale_printf("GR GR GS %d %d TR  %f %f SC %d %d TR %f rotate GS\n",
-	  ps->left_margin, ps->top_margin, ps->scale_x, ps->scale_y, x_offset, y_offset, ps->angle);
-}
-
-void Fl_PostScript_File_Device::translate(int x, int y)
-{
-  fprintf(driver()->output, "GS %d %d translate GS\n", x, y);
-}
-
-void Fl_PostScript_File_Device::untranslate(void)
-{
-  fprintf(driver()->output, "GR GR\n");
-}
-
-int Fl_PostScript_File_Device::start_page (void)
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->page(ps->page_format_);
-  x_offset = 0;
-  y_offset = 0;
-  ps->scale_x = ps->scale_y = 1.;
-  ps->angle = 0;
-  fprintf(ps->output, "GR GR GS %d %d translate GS\n", ps->left_margin, ps->top_margin);
-  return 0;
-}
-
-int Fl_PostScript_File_Device::end_page (void)
-{
-  return 0;
-}
-
-void Fl_PostScript_File_Device::end_job (void)
-// finishes PostScript & closes file
-{
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  if (ps->nPages) {  // for eps nPages is 0 so it is fine ....
-    fprintf(ps->output, "CR\nGR\nGR\nGR\nSP\n restore\n");
-    if (!ps->pages_){
-      fprintf(ps->output, "%%%%Trailer\n");
-      fprintf(ps->output, "%%%%Pages: %i\n" , ps->nPages);
-    };
-  } else
-    fprintf(ps->output, "GR\n restore\n");
-  fputs("%%EOF",ps->output);
-  ps->reset();
-  fflush(ps->output);
-  if(ferror(ps->output)) {
-    fl_alert ("Error during PostScript data output.");
-    }
-  if (ps->close_cmd_) {
-    (*ps->close_cmd_)(ps->output);
-  } else {
-    fclose(ps->output);
-    }
-  while (ps->clip_){
-    Fl_PostScript_Graphics_Driver::Clip * c= ps->clip_;
-    ps->clip_= ps->clip_->prev;
-    delete c;
-  }
-  Fl_Display_Device::display_device()->set_current();
-}
-
-#endif // FL_DOXYGEN
-
-#if ! (defined(__APPLE__) || defined(WIN32) )
-/** Starts a print job. */
-int Fl_PostScript_Printer::start_job(int pages, int *firstpage, int *lastpage) {
-  enum Fl_Paged_Device::Page_Format format;
-  enum Fl_Paged_Device::Page_Layout layout;
-
-  // first test version for print dialog
-  if (!print_panel) make_print_panel();
-  printing_style style = print_load();
-  print_selection->deactivate();
-  print_all->setonly();
-  print_all->do_callback();
-  print_from->value("1");
-  { char tmp[10]; snprintf(tmp, sizeof(tmp), "%d", pages); print_to->value(tmp); }
-  print_panel->show(); // this is modal
-  while (print_panel->shown()) Fl::wait();
-  
-  if (!print_start) // user clicked cancel
-    return 1;
-
-  // get options
-
-  switch (print_page_size->value()) {
-    case 0:
-      format = Fl_Paged_Device::LETTER;
-      break;
-    case 2:
-      format = Fl_Paged_Device::LEGAL;
-      break;
-    case 3:
-      format = Fl_Paged_Device::EXECUTIVE;
-      break;
-    case 4:
-      format = Fl_Paged_Device::A3;
-      break;
-    case 5:
-      format = Fl_Paged_Device::A5;
-      break;
-    case 6:
-      format = Fl_Paged_Device::B5;
-      break;
-    case 7:
-      format = Fl_Paged_Device::ENVELOPE;
-      break;
-    case 8:
-      format = Fl_Paged_Device::DLE;
-      break;
-    default:
-      format = Fl_Paged_Device::A4;
-      }
-      
-  { // page range choice
-    int from = 1, to = pages;
-    if (print_pages->value()) {
-      sscanf(print_from->value(), "%d", &from);
-      sscanf(print_to->value(), "%d", &to);
-    }
-    if (from < 1) from = 1;
-    if (to > pages) to = pages;
-    if (to < from) to = from;
-    if (firstpage) *firstpage = from;
-    if (lastpage) *lastpage = to;
-    if (pages > 0) pages = to - from + 1;
-  }
-  
-  if (print_output_mode[0]->value()) layout = Fl_Paged_Device::PORTRAIT;
-  else if (print_output_mode[1]->value()) layout = Fl_Paged_Device::LANDSCAPE;
-  else if (print_output_mode[2]->value()) layout = Fl_Paged_Device::PORTRAIT;
-  else layout = Fl_Paged_Device::LANDSCAPE;
-
-  int print_pipe = print_choice->value();	// 0 = print to file, >0 = printer (pipe)
-
-  const char *media = print_page_size->text(print_page_size->value());
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-  if (!print_pipe) printer = "<File>";
-
-  if (!print_pipe) // fall back to file printing
-    return Fl_PostScript_File_Device::start_job (pages, format, layout);
-
-  // Print: pipe the output into the lp command...
-
-  char command[1024];
-  if (style == SystemV) snprintf(command, sizeof(command), "lp -s -d %s -n %d -t '%s' -o media=%s",
-        printer, print_collate_button->value() ? 1 : (int)(print_copies->value() + 0.5), "FLTK", media);
-  else snprintf(command, sizeof(command), "lpr -h -P%s -#%d -T FLTK ",
-                printer, print_collate_button->value() ? 1 : (int)(print_copies->value() + 0.5));
-
-  Fl_PostScript_Graphics_Driver *ps = driver();
-  ps->output = popen(command, "w");
-  if (!ps->output) {
-    fl_alert("could not run command: %s\n",command);
-    return 1;
-  }
-  ps->close_command(pclose);
-  this->set_current();
-  return ps->start_postscript(pages, format, layout); // start printing
-}
-
-#endif // ! (defined(__APPLE__) || defined(WIN32) )
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Preferences.cxx
+++ /dev/null
@@ -1,1767 +1,0 @@
-//
-// "$Id$"
-//
-// Preferences methods for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2002-2010 by Matthias Melcher.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Plugin.H>
-#include <FL/filename.H>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <sys/stat.h>
-#include <time.h>
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <windows.h>
-#  include <direct.h>
-#  include <io.h>
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define access _access
-#  define mkdir _mkdir
-#elif defined (__APPLE__)
-#  include <ApplicationServices/ApplicationServices.h>
-#  include <unistd.h>
-#  include <config.h>
-#  include <dlfcn.h>
-#else
-#  include <unistd.h>
-#  include <config.h>
-#  if HAVE_DLFCN_H
-#    include <dlfcn.h>
-#  endif
-#endif
-
-#ifdef WIN32
-#  include <windows.h>
-#  include <rpc.h>
-// function pointer for the UuidCreate Function
-// RPC_STATUS RPC_ENTRY UuidCreate(UUID __RPC_FAR *Uuid);
-typedef RPC_STATUS (WINAPI* uuid_func)(UUID __RPC_FAR *Uuid);
-#else
-#  include <sys/time.h>
-#endif // WIN32
-
-#ifdef __CYGWIN__
-#  include <wchar.h>
-#endif
-
-char Fl_Preferences::nameBuffer[128];
-char Fl_Preferences::uuidBuffer[40];
-Fl_Preferences *Fl_Preferences::runtimePrefs = 0;
-
-/**
- * Returns a UUID as generated by the system.
- *
- * A UUID is a "universally unique identifier" which is commonly used in
- * configuration files to create identities. A UUID in ASCII looks like this:
- * <tt>937C4900-51AA-4C11-8DD3-7AB59944F03E</tt>. It has always 36 bytes plus
- * a trailing zero.
- *
- * \return a pointer to a static buffer containing the new UUID in ASCII format.
- *         The buffer is overwritten during every call to this function!
- */
-const char *Fl_Preferences::newUUID() {
-#ifdef __APPLE__
-  CFUUIDRef theUUID = CFUUIDCreate(NULL);
-  CFUUIDBytes b = CFUUIDGetUUIDBytes(theUUID);
-  sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-          b.byte0, b.byte1, b.byte2, b.byte3, b.byte4, b.byte5, b.byte6, b.byte7,
-          b.byte8, b.byte9, b.byte10, b.byte11, b.byte12, b.byte13, b.byte14, b.byte15);
-  CFRelease(theUUID);
-#elif defined (WIN32)
-  // First try and use the win API function UuidCreate(), but if that is not
-  // available, fall back to making something up from scratch.
-  // We do not want to link against the Rpcrt4.dll, as we will rarely use it,
-  // so we load the DLL dynamically, if it is available, and work from there.
-  static HMODULE hMod = NULL;
-  UUID ud;
-  UUID *pu = &ud;
-  int got_uuid = 0;
-
-  if (!hMod) {		// first time in?
-    hMod = LoadLibrary("Rpcrt4.dll");
-  }
-
-  if (hMod) {		// do we have a usable handle to Rpcrt4.dll?
-    uuid_func uuid_crt = (uuid_func)GetProcAddress(hMod, "UuidCreate");
-    if (uuid_crt != NULL) {
-      RPC_STATUS rpc_res = uuid_crt(pu);
-      if ( // is the return status OK for our needs?
-          (rpc_res == RPC_S_OK) ||		// all is well
-          (rpc_res == RPC_S_UUID_LOCAL_ONLY) || // only unique to this machine
-          (rpc_res == RPC_S_UUID_NO_ADDRESS)	// probably only locally unique
-        ) {
-        got_uuid = -1;
-        sprintf(uuidBuffer, "%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-            pu->Data1, pu->Data2, pu->Data3, pu->Data4[0], pu->Data4[1],
-            pu->Data4[2], pu->Data4[3], pu->Data4[4],
-            pu->Data4[5], pu->Data4[6], pu->Data4[7]);
-      }
-    }
-  }
-  if (got_uuid == 0) {		// did not make a UUID - use fallback logic
-    unsigned char b[16];
-    time_t t = time(0);		// first 4 byte
-    b[0] = (unsigned char)t;
-    b[1] = (unsigned char)(t>>8);
-    b[2] = (unsigned char)(t>>16);
-    b[3] = (unsigned char)(t>>24);
-    int r = rand();		// four more bytes
-    b[4] = (unsigned char)r;
-    b[5] = (unsigned char)(r>>8);
-    b[6] = (unsigned char)(r>>16);
-    b[7] = (unsigned char)(r>>24);
-    // Now we try to find 4 more "random" bytes. We extract the
-    // lower 4 bytes from the address of t - it is created on the
-    // stack so *might* be in a different place each time...
-    // This is now done via a union to make it compile OK on 64-bit systems.
-    union { void *pv; unsigned char a[sizeof(void*)]; } v;
-    v.pv = (void *)(&t);
-    // NOTE: This assume that all WinXX systems are little-endian
-    b[8] = v.a[0];
-    b[9] = v.a[1];
-    b[10] = v.a[2];
-    b[11] = v.a[3];
-    TCHAR name[MAX_COMPUTERNAME_LENGTH + 1]; // only used to make last four bytes
-    DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
-    // GetComputerName() does not depend on any extra libs, and returns something
-    // analogous to gethostname()
-    GetComputerName(name, &nSize);
-    //  use the first 4 TCHAR's of the name to create the last 4 bytes of our UUID
-    for (int ii = 0; ii < 4; ii++) {
-      b[12 + ii] = (unsigned char)name[ii];
-    }
-    sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-            b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7],
-            b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]);
-  }
-#else
-  // warning Unix implementation of Fl_Preferences::newUUID() incomplete!
-  // #include <uuid/uuid.h>
-  // void uuid_generate(uuid_t out);
-  unsigned char b[16];
-  time_t t = time(0);			// first 4 byte
-  b[0] = (unsigned char)t;
-  b[1] = (unsigned char)(t>>8);
-  b[2] = (unsigned char)(t>>16);
-  b[3] = (unsigned char)(t>>24);
-  int r = rand(); 			// four more bytes
-  b[4] = (unsigned char)r;
-  b[5] = (unsigned char)(r>>8);
-  b[6] = (unsigned char)(r>>16);
-  b[7] = (unsigned char)(r>>24);
-  unsigned long a = (unsigned long)&t;	// four more bytes
-  b[8] = (unsigned char)a;
-  b[9] = (unsigned char)(a>>8);
-  b[10] = (unsigned char)(a>>16);
-  b[11] = (unsigned char)(a>>24);
-  // Now we try to find 4 more "random" bytes. We extract the
-  // lower 4 bytes from the address of t - it is created on the
-  // stack so *might* be in a different place each time...
-  // This is now done via a union to make it compile OK on 64-bit systems.
-  union { void *pv; unsigned char a[sizeof(void*)]; } v;
-  v.pv = (void *)(&t);
-  // NOTE: May need to handle big- or little-endian systems here
-# if WORDS_BIGENDIAN
-  b[8] = v.a[sizeof(void*) - 1];
-  b[9] = v.a[sizeof(void*) - 2];
-  b[10] = v.a[sizeof(void*) - 3];
-  b[11] = v.a[sizeof(void*) - 4];
-# else /* data ordered for a little-endian system */
-  b[8] = v.a[0];
-  b[9] = v.a[1];
-  b[10] = v.a[2];
-  b[11] = v.a[3];
-# endif
-  char name[80];			// last four bytes
-  gethostname(name, 79);
-  memcpy(b+12, name, 4);
-  sprintf(uuidBuffer, "%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-          b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7],
-          b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]);
-#endif
-
-  return uuidBuffer;
-}
-
-/**
-   The constructor creates a group that manages name/value pairs and
-   child groups. Groups are ready for reading and writing at any time.
-   The root argument is either Fl_Preferences::USER
-   or Fl_Preferences::SYSTEM.
-
-   This constructor creates the <i>base</i> instance for all
-   following entries and reads existing databases into memory. The
-   vendor argument is a unique text string identifying the
-   development team or vendor of an application.  A domain name or
-   an EMail address are great unique names, e.g.
-   "researchATmatthiasm.com" or "fltk.org". The
-   application argument can be the working title or final
-   name of your application. Both vendor and
-   application must be valid relative UNIX pathnames and
-   may contain '/'s to create deeper file structures.
-
-   A set of Preferences marked "run-time" exists exactly one per application and
-   only as long as the application runs. It can be used as a database for
-   volatile information. FLTK uses it to register plugins at run-time.
-
-   \param[in] root can be \c USER or \c SYSTEM for user specific or system wide
-              preferences
-   \param[in] vendor unique text describing the company or author of this file
-   \param[in] application unique text describing the application
-*/
-Fl_Preferences::Fl_Preferences( Root root, const char *vendor, const char *application ) {
-  node = new Node( "." );
-  rootNode = new RootNode( this, root, vendor, application );
-  node->setRoot(rootNode);
-}
-
-/**
-   \brief Use this constructor to create or read a preferences file at an
-   arbitrary position in the file system.
-
-   The file name is generated in the form
-   <tt><i>path</i>/<i>application</i>.prefs</tt>. If \p application
-   is \c NULL, \p path must contain the full file name.
-
-   \param[in] path path to the directory that contains the preferences file
-   \param[in] vendor unique text describing the company or author of this file
-   \param[in] application unique text describing the application
- */
-Fl_Preferences::Fl_Preferences( const char *path, const char *vendor, const char *application ) {
-  node = new Node( "." );
-  rootNode = new RootNode( this, path, vendor, application );
-  node->setRoot(rootNode);
-}
-
-/**
-   \brief Generate or read a new group of entries within another group.
-
-   Use the \p group argument to name the group that you would like to access.
-   \p Group can also contain a path to a group further down the hierarchy by
-   separating group names with a forward slash '/'.
-
-   \param[in] parent reference object for the new group
-   \param[in] group name of the group to access (may contain '/'s)
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences &parent, const char *group ) {
-  rootNode = parent.rootNode;
-  node = parent.node->addChild( group );
-}
-
-/**
-   \brief Create or access a group of preferences using a name.
-   \param[in] parent the parameter parent is a pointer to the parent group.
-              \p Parent may be \p NULL. It then refers to an application internal
-              database which exists only once, and remains in RAM only until the
-              application quits. This database is used to manage plugins and other
-              data indexes by strings.
-   \param[in] group a group name that is used as a key into the database
-   \see Fl_Preferences( Fl_Preferences&, const char *group )
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences *parent, const char *group ) {
-  if (parent==0) {
-    if (!runtimePrefs) {
-      runtimePrefs = new Fl_Preferences();
-      runtimePrefs->node = new Node( "." );
-      runtimePrefs->rootNode = new RootNode( runtimePrefs );
-      runtimePrefs->node->setRoot(rootNode);
-    }
-    parent = runtimePrefs;
-  }
-  rootNode = parent->rootNode;
-  node = parent->node->addChild( group );
-}
-
-/**
- \brief Open a child group using a given index.
-
- Use the \p groupIndex argument to find the group that you would like to access.
- If the given index is invalid (negative or too high), a new group is created
- with a UUID as a name.
-
- The index needs to be fixed. It is currently backward. Index 0 points
- to the last member in the 'list' of preferences.
-
- \param[in] parent reference object for the new group
- \param[in] groupIndex zero based index into child groups
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences &parent, int groupIndex ) {
-  rootNode = parent.rootNode;
-  if (groupIndex<0 || groupIndex>=parent.groups()) {
-    node = parent.node->addChild( newUUID() );
-  } else {
-    node = parent.node->childNode( groupIndex );
-  }
-}
-
-/**
- \see Fl_Preferences( Fl_Preferences&, int groupIndex )
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences *parent, int groupIndex ) {
-  rootNode = parent->rootNode;
-  if (groupIndex<0 || groupIndex>=parent->groups()) {
-    node = parent->node->addChild( newUUID() );
-  } else {
-    node = parent->node->childNode( groupIndex );
-  }
-}
-
-/**
- Create a new dataset access point using a dataset ID.
-
- ID's are a great way to remember shortcuts to database entries that are deeply
- nested in a preferences database, as long as the database root is not deleted.
- An ID can be retrieved from any Fl_Preferences dataset, and can then be used
- to create multiple new references to the same dataset.
-
- ID's can be very helpful when put into the <tt>user_data()</tt> field of
- widget callbacks.
- */
-Fl_Preferences::Fl_Preferences( Fl_Preferences::ID id ) {
-  node = (Node*)id;
-  rootNode = node->findRoot();
-}
-
-/**
- Create another reference to a Preferences group.
- */
-Fl_Preferences::Fl_Preferences(const Fl_Preferences &rhs)
-: node(rhs.node),
-  rootNode(rhs.rootNode)
-{ }
-
-/**
- Assign another reference to a Preference group.
- */
-Fl_Preferences &Fl_Preferences::operator=(const Fl_Preferences &rhs) {
-  if (&rhs != this) {
-    node = rhs.node;
-    rootNode = rhs.rootNode;
-  }
-  return *this;
-}
-
-/**
-   The destructor removes allocated resources. When used on the
-   \em base preferences group, the destructor flushes all
-   changes to the preferences file and deletes all internal
-   databases.
-
-   The destructor does not remove any data from the database. It merely
-   deletes your reference to the database.
- */
-Fl_Preferences::~Fl_Preferences() {
-  if (node && !node->parent()) delete rootNode;
-  // DO NOT delete nodes! The root node will do that after writing the preferences
-  // zero all pointer to avoid memory errors, even though
-  // Valgrind does not complain (Cygwin does though)
-  node = 0L;
-  rootNode = 0L;
-}
-
-/**
-   Returns the number of groups that are contained within a group.
-
-   \return 0 for no groups at all
- */
-int Fl_Preferences::groups() {
-  return node->nChildren();
-}
-
-/**
-   Returns the name of the Nth (\p num_group) group.
-   There is no guaranteed order of group names. The index must
-   be within the range given by groups().
-
-   \param[in] num_group number indexing the requested group
-   \return 'C' string pointer to the group name
- */
-const char *Fl_Preferences::group( int num_group ) {
-  return node->child( num_group );
-}
-
-/**
-   Returns non-zero if a group with this name exists.
-   Group names are relative to the Preferences node and can contain a path.
-   "." describes the current node, "./" describes the topmost node.
-   By preceding a groupname with a "./", its path becomes relative to the topmost node.
-
-   \param[in] key name of group that is searched for
-   \return 0 if no group by that name was found
- */
-char Fl_Preferences::groupExists( const char *key ) {
-  return node->search( key ) ? 1 : 0 ;
-}
-
-/**
-   Deletes a group.
-
-   Removes a group and all keys and groups within that group
-   from the database.
-
-   \param[in] group name of the group to delete
-   \return 0 if call failed
- */
-char Fl_Preferences::deleteGroup( const char *group ) {
-  Node *nd = node->search( group );
-  if ( nd ) return nd->remove();
-  return 0;
-}
-
-/**
- Delete all groups.
- */
-char Fl_Preferences::deleteAllGroups() {
-  node->deleteAllChildren();
-  return 1;
-}
-
-/**
-   Returns the number of entries (name/value pairs) in a group.
-
-   \return number of entries
- */
-int Fl_Preferences::entries() {
-  return node->nEntry();
-}
-
-/**
-   Returns the name of an entry. There is no guaranteed order of
-   entry names. The index must be within the range given by
-   entries().
-
-   \param[in] index number indexing the requested entry
-   \return pointer to value cstring
- */
-const char *Fl_Preferences::entry( int index ) {
-  return node->entry(index).name;
-}
-
-/**
-   Returns non-zero if an entry with this name exists.
-
-   \param[in] key name of entry that is searched for
-   \return 0 if entry was not found
- */
-char Fl_Preferences::entryExists( const char *key ) {
-  return node->getEntry( key )>=0 ? 1 : 0 ;
-}
-
-/**
-   Deletes a single name/value pair.
-
-   This function removes the entry \p key from the database.
-
-   \param[in] key name of entry to delete
-   \return 0 if deleting the entry failed
- */
-char Fl_Preferences::deleteEntry( const char *key ) {
-  return node->deleteEntry( key );
-}
-
-/**
- Delete all entries.
- */
-char Fl_Preferences::deleteAllEntries() {
-  node->deleteAllEntries();
-  return 1;
-}
-
-/**
- Delete all groups and all entries.
- */
-char Fl_Preferences::clear() {
-  char ret1 = deleteAllGroups();
-  char ret2 = deleteAllEntries();
-  return ret1 & ret2;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, int &value, int defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? atoi( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, int value ) {
-  sprintf( nameBuffer, "%d", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, float &value, float defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? (float)atof( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, float value ) {
-  sprintf( nameBuffer, "%g", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \param[in] precision number of decimal digits to represent value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, float value, int precision ) {
-  sprintf( nameBuffer, "%.*g", precision, value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
-
- \param[in] key name of entry
- \param[out] value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, double &value, double defaultValue ) {
-  const char *v = node->get( key );
-  value = v ? atof( v ) : defaultValue;
-  return ( v != 0 );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, double value ) {
-  sprintf( nameBuffer, "%g", value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] value set this entry to \p value
- \param[in] precision number of decimal digits to represent value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, double value, int precision ) {
-  sprintf( nameBuffer, "%.*g", precision, value );
-  node->set( key, nameBuffer );
-  return 1;
-}
-
-// remove control sequences from a string
-static char *decodeText( const char *src ) {
-  int len = 0;
-  const char *s = src;
-  for ( ; *s; s++, len++ ) {
-    if ( *s == '\\' ) {
-      if ( isdigit( s[1] ) ) {
-        s+=3; 
-      } else { 
-        s+=1;
-      }
-    }
-  }
-  char *dst = (char*)malloc( len+1 ), *d = dst;
-  for ( s = src; *s; s++ ) {
-    char c = *s;
-    if ( c == '\\' ) {
-      if ( s[1] == '\\' ) { *d++ = c; s++; }
-      else if ( s[1] == 'n' ) { *d++ = '\n'; s++; }
-      else if ( s[1] == 'r' ) { *d++ = '\r'; s++; }
-      else if ( isdigit( s[1] ) ) { *d++ = ((s[1]-'0')<<6) + ((s[2]-'0')<<3) + (s[3]-'0'); s+=3; }
-      else s++; // error
-    }
-    else
-      *d++ = c;
-  }
-  *d = 0;
-  return dst;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
- 'maxSize' is the maximum length of text that will be read.
- The text buffer must allow for one additional byte for a trailing zero.
-
- \param[in] key name of entry
- \param[out] text returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] maxSize maximum length of value plus one byte for a trailing zero
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, char *text, const char *defaultValue, int maxSize ) {
-  const char *v = node->get( key );
-  if ( v && strchr( v, '\\' ) ) {
-    char *w = decodeText( v );
-    strlcpy(text, w, maxSize);
-    free( w );
-    return 1;
-  }
-  if ( !v ) v = defaultValue;
-  if ( v ) strlcpy(text, v, maxSize);
-  else *text = 0;
-  return ( v != defaultValue );
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0). get() allocates memory of
- sufficient size to hold the value. The buffer must be free'd by
- the developer using 'free(value)'.
-
- \param[in] key name of entry
- \param[out] text returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, char *&text, const char *defaultValue ) {
-  const char *v = node->get( key );
-  if ( v && strchr( v, '\\' ) ) {
-    text = decodeText( v );
-    return 1;
-  }
-  if ( !v ) v = defaultValue;
-  if ( v )
-    text = strdup( v );
-  else
-    text = 0;
-  return ( v != defaultValue );
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] text set this entry to \p value
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, const char *text ) {
-  const char *s = text ? text : "";
-  int n=0, ns=0;
-  for ( ; *s; s++ ) { n++; if ( *s<32 || *s=='\\' || *s==0x7f ) ns+=4; }
-  if ( ns ) {
-    char *buffer = (char*)malloc( n+ns+1 ), *d = buffer;
-    for ( s=text; *s; ) {
-      char c = *s;
-      if ( c=='\\' ) { *d++ = '\\'; *d++ = '\\'; s++; }
-      else if ( c=='\n' ) { *d++ = '\\'; *d++ = 'n'; s++; }
-      else if ( c=='\r' ) { *d++ = '\\'; *d++ = 'r'; s++; }
-      else if ( c<32 || c==0x7f )
-	{ *d++ = '\\'; *d++ = '0'+((c>>6)&3); *d++ = '0'+((c>>3)&7); *d++ = '0'+(c&7);  s++; }
-      else *d++ = *s++;
-    }
-    *d = 0;
-    node->set( key, buffer );
-    free( buffer );
-  }
-  else
-    node->set( key, text );
-  return 1;
-}
-
-// convert a hex string to binary data
-static void *decodeHex( const char *src, int &size ) {
-  size = (int) strlen( src )/2;
-  unsigned char *data = (unsigned char*)malloc( size ), *d = data;
-  const char *s = src;
-  for ( int i=size; i>0; i-- ) {
-    int v;
-    char x = tolower(*s++);
-    if ( x >= 'a' ) v = x-'a'+10; else v = x-'0';
-    v = v<<4;
-    x = tolower(*s++);
-    if ( x >= 'a' ) v += x-'a'+10; else v += x-'0';
-    *d++ = (uchar)v;
-  }
-  return (void*)data;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0).
- 'maxSize' is the maximum length of text that will be read.
-
- \param[in] key name of entry
- \param[out] data value returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] defaultSize size of default value array
- \param[in] maxSize maximum length of value
- \return 0 if the default value was used
-
- \todo maxSize should receive the number of bytes that were read.
- */
-char Fl_Preferences::get( const char *key, void *data, const void *defaultValue, int defaultSize, int maxSize ) {
-  const char *v = node->get( key );
-  if ( v ) {
-    int dsize;
-    void *w = decodeHex( v, dsize );
-    memmove( data, w, dsize>maxSize?maxSize:dsize );
-    free( w );
-    return 1;
-  }
-  if ( defaultValue )
-    memmove( data, defaultValue, defaultSize>maxSize?maxSize:defaultSize );
-  return 0;
-}
-
-/**
- Reads an entry from the group. A default value must be
- supplied. The return value indicates if the value was available
- (non-zero) or the default was used (0). get() allocates memory of
- sufficient size to hold the value. The buffer must be free'd by
- the developer using 'free(value)'.
-
- \param[in] key name of entry
- \param[out] data returned from preferences or default value if none was set
- \param[in] defaultValue default value to be used if no preference was set
- \param[in] defaultSize size of default value array
- \return 0 if the default value was used
- */
-char Fl_Preferences::get( const char *key, void *&data, const void *defaultValue, int defaultSize ) {
-  const char *v = node->get( key );
-  if ( v ) {
-    int dsize;
-    data = decodeHex( v, dsize );
-    return 1;
-  }
-  if ( defaultValue ) {
-    data = (void*)malloc( defaultSize );
-    memmove( data, defaultValue, defaultSize );
-  }
-  else
-    data = 0;
-  return 0;
-}
-
-/**
- Sets an entry (name/value pair). The return value indicates if there
- was a problem storing the data in memory. However it does not
- reflect if the value was actually stored in the preferences
- file.
-
- \param[in] key name of entry
- \param[in] data set this entry to \p value
- \param[in] dsize size of data array
- \return 0 if setting the value failed
- */
-char Fl_Preferences::set( const char *key, const void *data, int dsize ) {
-  char *buffer = (char*)malloc( dsize*2+1 ), *d = buffer;;
-  unsigned char *s = (unsigned char*)data;
-  for ( ; dsize>0; dsize-- ) {
-    static char lu[] = "0123456789abcdef";
-    unsigned char v = *s++;
-    *d++ = lu[v>>4];
-    *d++ = lu[v&0xf];
-  }
-  *d = 0;
-  node->set( key, buffer );
-  free( buffer );
-  return 1;
-}
-
-/**
- Returns the size of the value part of an entry.
-
- \param[in] key name of entry
- \return size of value
- */
-int Fl_Preferences::size( const char *key ) {
-  const char *v = node->get( key );
-  return (int) (v ? strlen( v ) : 0);
-}
-
-/**
- \brief Creates a path that is related to the preferences file and
- that is usable for additional application data.
-
- This function creates a directory that is named after the preferences
- database without the \c .prefs extension and located in the same directory.
- It then fills the given buffer with the complete path name.
-
- Example:
- \code
- Fl_Preferences prefs( USER, "matthiasm.com", "test" );
- char path[FL_PATH_MAX];
- prefs.getUserdataPath( path );
- \endcode
- ..creates the preferences database in (MS Windows):
- \code
- c:/Documents and Settings/matt/Application Data/matthiasm.com/test.prefs
- \endcode
- ..and returns the userdata path:
- \code
- c:/Documents and Settings/matt/Application Data/matthiasm.com/test/
- \endcode
-
- \param[out] path buffer for user data path
- \param[in] pathlen size of path buffer (should be at least \c FL_PATH_MAX)
- \return 0 if path was not created or pathname can't fit into buffer
- */
-char Fl_Preferences::getUserdataPath( char *path, int pathlen ) {
-  if ( rootNode )
-    return rootNode->getPath( path, pathlen );
-  return 0;
-}
-
-/**
- Writes all preferences to disk. This function works only with
- the base preferences group. This function is rarely used as
- deleting the base preferences flushes automatically.
- */
-void Fl_Preferences::flush() {
-  if ( rootNode && node->dirty() )
-    rootNode->write();
-}
-
-//-----------------------------------------------------------------------------
-// helper class to create dynamic group and entry names on the fly
-//
-
-/**
-   Creates a group name or entry name on the fly.
-
-   This version creates a simple unsigned integer as an entry name.
-
-   \code
-     int n, i;
-     Fl_Preferences prev( appPrefs, "PreviousFiles" );
-     prev.get( "n", 0 );
-     for ( i=0; i<n; i++ )
-       prev.get( Fl_Preferences::Name(i), prevFile[i], "" );
-   \endcode
- */
-Fl_Preferences::Name::Name( unsigned int n ) {
-  data_ = (char*)malloc(20);
-  sprintf(data_, "%u", n);
-}
-
-/**
-   Creates a group name or entry name on the fly.
-
-   This version creates entry names as in 'printf'.
-
-   \code
-     int n, i;
-     Fl_Preferences prefs( USER, "matthiasm.com", "test" );
-     prev.get( "nFiles", 0 );
-     for ( i=0; i<n; i++ )
-       prev.get( Fl_Preferences::Name( "File%d", i ), prevFile[i], "" );
-    \endcode
- */
-Fl_Preferences::Name::Name( const char *format, ... ) {
-  data_ = (char*)malloc(1024);
-  va_list args;
-  va_start(args, format);
-  vsnprintf(data_, 1024, format, args);
-  va_end(args);
-}
-
-// delete the name
-Fl_Preferences::Name::~Name() {
-  if (data_) {
-    free(data_);
-    data_ = 0L;
-  }
-}
-
-//-----------------------------------------------------------------------------
-// internal methods, do not modify or use as they will change without notice
-//
-
-int Fl_Preferences::Node::lastEntrySet = -1;
-
-// create the root node
-// - construct the name of the file that will hold our preferences
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char *vendor, const char *application )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-
-  char filename[ FL_PATH_MAX ]; filename[0] = 0;
-#ifdef WIN32
-#  define FLPREFS_RESOURCE	"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
-#  define FLPREFS_RESOURCEW	L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
-  size_t appDataLen = strlen(vendor) + strlen(application) + 8;
-  DWORD type, nn;
-  LONG err;
-  HKEY key;
-
-  switch (root) {
-    case SYSTEM:
-      err = RegOpenKeyW( HKEY_LOCAL_MACHINE, FLPREFS_RESOURCEW, &key );
-      if (err == ERROR_SUCCESS) {
-        nn = (DWORD) (FL_PATH_MAX - appDataLen); 
-        err = RegQueryValueExW( key, L"Common AppData", 0L, &type,
-                                (BYTE*)filename, &nn ); 
-        if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
-          filename[0] = 0;
-          filename[1] = 0;
-        }
-        RegCloseKey(key);
-      }
-      break;
-    case USER:
-      err = RegOpenKeyW( HKEY_CURRENT_USER, FLPREFS_RESOURCEW, &key );
-      if (err == ERROR_SUCCESS) {
-        nn = (DWORD) (FL_PATH_MAX - appDataLen);
-        err = RegQueryValueExW( key, L"AppData", 0L, &type,
-                                (BYTE*)filename, &nn ); 
-        if ( ( err != ERROR_SUCCESS ) && ( type == REG_SZ ) ) {
-          filename[0] = 0;
-          filename[1] = 0;
-	}
-        RegCloseKey(key);
-      }
-      break;
-  } 
-  if (!filename[1] && !filename[0]) {
-    strcpy(filename, "C:\\FLTK");
-  } else {
-#if 0
-    xchar *b = (xchar*)_wcsdup((xchar *)filename);
-#else
-    // cygwin does not come with _wcsdup. Use malloc +  wcscpy.
-    // For implementation of wcsdup functionality See
-    // - http://linenum.info/p/glibc/2.7/wcsmbs/wcsdup.c
-    xchar *b = (xchar*) malloc((wcslen((xchar *) filename) + 1) * sizeof(xchar));
-    wcscpy(b, (xchar *) filename);
-#endif
-    //  filename[fl_unicode2utf(b, wcslen((xchar*)b), filename)] = 0;
-    unsigned len = fl_utf8fromwc(filename, (FL_PATH_MAX-1), b, (unsigned) wcslen(b));
-    filename[len] = 0;
-    free(b);
-  }
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "/%s/%s.prefs", vendor, application);
-  for (char *s = filename; *s; s++) if (*s == '\\') *s = '/';
-#elif defined ( __APPLE__ )
-  // TODO: verify that this is the Apple sanctioned way of finding these folders
-  // (On MSWindows, this frequently leads to issues with internationalized systems)
-  // Carbon: err = FindFolder( kLocalDomain, kPreferencesFolderType, 1, &spec.vRefNum, &spec.parID );
-  switch (root) {
-    case SYSTEM:
-      strcpy(filename, "/Library/Preferences");
-      break;
-    case USER:
-      sprintf(filename, "%s/Library/Preferences", fl_getenv("HOME"));
-      break;
-  }
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "/%s/%s.prefs", vendor, application );
-#else
-  const char *e;
-  switch (root) {
-    case USER:
-      if ((e = fl_getenv("HOME")) != NULL) {
-	strlcpy(filename, e, sizeof(filename));
-
-	if (filename[strlen(filename)-1] != '/') {
-	  strlcat(filename, "/.fltk/", sizeof(filename));
-	} else {
-	  strlcat(filename, ".fltk/", sizeof(filename));
-	}
-	break;
-      } 
-    case SYSTEM:
-      strcpy(filename, "/etc/fltk/");
-      break;
-  } 
-  snprintf(filename + strlen(filename), sizeof(filename) - strlen(filename),
-           "%s/%s.prefs", vendor, application);
-#endif 
-  filename_    = strdup(filename);
-  vendor_      = strdup(vendor);
-  application_ = strdup(application); 
-  read();
-}
-
-// create the root node
-// - construct the name of the file that will hold our preferences
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, const char *path, const char *vendor, const char *application )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-
-  if (!vendor)
-    vendor = "unknown";
-  if (!application) {
-    application = "unknown";
-    filename_ = strdup(path);
-  } else {
-    char filename[ FL_PATH_MAX ]; filename[0] = 0;
-    snprintf(filename, sizeof(filename), "%s/%s.prefs", path, application);
-    filename_  = strdup(filename);
-  }
-  vendor_      = strdup(vendor);
-  application_ = strdup(application); 
-  read();
-}
-
-// create a root node that exists only on RAM and can not be read or written to
-// a file
-Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs )
-: prefs_(prefs),
-  filename_(0L),
-  vendor_(0L),
-  application_(0L) {
-}
-
-// destroy the root node and all depending nodes
-Fl_Preferences::RootNode::~RootNode() {
-  if ( prefs_->node->dirty() )
-    write();
-  if ( filename_ ) {
-    free( filename_ );
-    filename_ = 0L;
-  }
-  if ( vendor_ ) {
-    free( vendor_ );
-    vendor_ = 0L;
-  }
-  if ( application_ ) {
-    free( application_ );
-    application_ = 0L;
-  }
-  delete prefs_->node;
-  prefs_->node = 0L;
-}
-
-// read a preferences file and construct the group tree and with all entry leafs
-int Fl_Preferences::RootNode::read() {
-  if (!filename_)   // RUNTIME preferences
-    return -1; 
-  char buf[1024];
-  FILE *f = fl_fopen( filename_, "rb" );
-  if ( !f )
-    return -1; 
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  if (fgets( buf, 1024, f )==0) { /* ignore */ }
-  Node *nd = prefs_->node;
-  for (;;) {
-    if ( !fgets( buf, 1024, f ) ) break;	// EOF or Error
-    if ( buf[0]=='[' ) {			// read a new group
-      size_t end = strcspn( buf+1, "]\n\r" );
-      buf[ end+1 ] = 0;
-      nd = prefs_->node->find( buf+1 );
-    } else if ( buf[0]=='+' ) {			// value of previous name/value pair spans multiple lines
-      size_t end = strcspn( buf+1, "\n\r" );
-      if ( end != 0 ) {				// if entry is not empty
-	buf[ end+1 ] = 0;
-	nd->add( buf+1 );
-      }
-    } else {					 // read a name/value pair
-      size_t end = strcspn( buf, "\n\r" );
-      if ( end != 0 ) {				// if entry is not empty
-	buf[ end ] = 0;
-	nd->set( buf );
-      }
-    }
-  }
-  fclose( f );
-  return 0;
-}
-
-// write the group tree and all entry leafs
-int Fl_Preferences::RootNode::write() {
-  if (!filename_)   // RUNTIME preferences
-    return -1; 
-  fl_make_path_for_file(filename_);
-  FILE *f = fl_fopen( filename_, "wb" );
-  if ( !f )
-    return -1; 
-  fprintf( f, "; FLTK preferences file format 1.0\n" );
-  fprintf( f, "; vendor: %s\n", vendor_ );
-  fprintf( f, "; application: %s\n", application_ );
-  prefs_->node->write( f );
-  fclose( f );
-#if !(defined(__APPLE__) || defined(WIN32))
-  // unix: make sure that system prefs are user-readable
-  if (strncmp(filename_, "/etc/fltk/", 10) == 0) {
-    char *p;
-    p = filename_ + 9;
-    do {			 // for each directory to the pref file
-      *p = 0;
-      fl_chmod(filename_, 0755); // rwxr-xr-x
-      *p = '/';
-      p = strchr(p+1, '/');
-    } while (p);
-    fl_chmod(filename_, 0644);   // rw-r--r--
-  }
-#endif
-  return 0;
-}
-
-// get the path to the preferences directory
-char Fl_Preferences::RootNode::getPath( char *path, int pathlen ) {
-  if (!filename_)   // RUNTIME preferences
-    return 1; // return 1 (not -1) to be consistent with fl_make_path()
-  strlcpy( path, filename_, pathlen); 
-
-  char *s;
-  for ( s = path; *s; s++ ) if ( *s == '\\' ) *s = '/';
-  s = strrchr( path, '.' );
-  if ( !s ) return 0;
-  *s = 0;
-  char ret = fl_make_path( path );
-#if !(defined(__APPLE__) || defined(WIN32))
-  // unix: make sure that system prefs dir. is user-readable
-  if (strncmp(path, "/etc/fltk/", 10) == 0) {
-    fl_chmod(path, 0755); // rwxr-xr-x
-  }
-#endif
-  strcpy( s, "/" );
-  return ret;
-}
-
-// create a node that represents a group
-// - path must be a single word, prferable alnum(), dot and underscore only. Space is ok.
-Fl_Preferences::Node::Node( const char *path ) {
-  if ( path ) path_ = strdup( path ); else path_ = 0;
-  child_ = 0; next_ = 0; parent_ = 0;
-  entry_ = 0;
-  nEntry_ = NEntry_ = 0;
-  dirty_ = 0;
-  top_ = 0;
-  indexed_ = 0;
-  index_ = 0;
-  nIndex_ = NIndex_ = 0;
-}
-
-void Fl_Preferences::Node::deleteAllChildren() {
-  Node *nx;
-  for ( Node *nd = child_; nd; nd = nx ) {
-    nx = nd->next_;
-    delete nd;
-  }
-  child_ = 0L;
-  dirty_ = 1;
-  updateIndex();
-}
-
-void Fl_Preferences::Node::deleteAllEntries() {
-  if ( entry_ ) {
-    for ( int i = 0; i < nEntry_; i++ ) {
-      if ( entry_[i].name ) {
-	free( entry_[i].name );
-	entry_[i].name = 0L;
-      }
-      if ( entry_[i].value ) {
-	free( entry_[i].value );
-	entry_[i].value = 0L;
-      }
-    }
-    free( entry_ );
-    entry_ = 0L;
-    nEntry_ = 0;
-    NEntry_ = 0;
-  }
-  dirty_ = 1;
-}
-
-// delete this and all depending nodes
-Fl_Preferences::Node::~Node() {
-  deleteAllChildren();
-  deleteAllEntries();
-  deleteIndex();
-  if ( path_ ) {
-    free( path_ );
-    path_ = 0L;
-  }
-  next_ = 0L;
-  parent_ = 0L;
-}
-
-// recursively check if any entry is dirty (was changed after loading a fresh prefs file)
-char Fl_Preferences::Node::dirty() {
-  if ( dirty_ ) return 1;
-  if ( next_ && next_->dirty() ) return 1;
-  if ( child_ && child_->dirty() ) return 1;
-  return 0;
-}
-
-// write this node (recursively from the last neighbor back to this)
-// write all entries
-// write all children
-int Fl_Preferences::Node::write( FILE *f ) {
-  if ( next_ ) next_->write( f );
-  fprintf( f, "\n[%s]\n\n", path_ );
-  for ( int i = 0; i < nEntry_; i++ ) {
-    char *src = entry_[i].value;
-    if ( src ) {		// hack it into smaller pieces if needed
-      fprintf( f, "%s:", entry_[i].name );
-      size_t cnt, written = 0;
-      for ( cnt = 0; cnt < 60; cnt++ )
-	if ( src[cnt]==0 ) break;
-      written += fwrite( src, cnt, 1, f );
-      fprintf( f, "\n" );
-      src += cnt;
-      for (;*src;) {
-	for ( cnt = 0; cnt < 80; cnt++ )
-	  if ( src[cnt]==0 ) break;
-        fputc( '+', f );
-	written += fwrite( src, cnt, 1, f );
-        fputc( '\n', f );
-	src += cnt;
-      }
-    }
-    else
-      fprintf( f, "%s\n", entry_[i].name );
-  }
-  if ( child_ ) child_->write( f );
-  dirty_ = 0;
-  return 0;
-}
-
-// set the parent node and create the full path
-void Fl_Preferences::Node::setParent( Node *pn ) {
-  parent_ = pn;
-  next_ = pn->child_;
-  pn->child_ = this;
-  sprintf( nameBuffer, "%s/%s", pn->path_, path_ );
-  free( path_ );
-  path_ = strdup( nameBuffer );
-}
-
-// find the corresponding root node
-Fl_Preferences::RootNode *Fl_Preferences::Node::findRoot() {
-  Node *n = this;
-  do {
-    if (n->top_)
-      return n->root_;
-    n = n->parent();
-  } while (n);
-  return 0L;
-}
-
-// add a child to this node and set its path (try to find it first...)
-Fl_Preferences::Node *Fl_Preferences::Node::addChild( const char *path ) {
-  sprintf( nameBuffer, "%s/%s", path_, path );
-  char *name = strdup( nameBuffer );
-  Node *nd = find( name );
-  free( name );
-  dirty_ = 1;
-  updateIndex();
-  return nd;
-}
-
-// create and set, or change an entry within this node
-void Fl_Preferences::Node::set( const char *name, const char *value )
-{
-  for ( int i=0; i<nEntry_; i++ ) {
-    if ( strcmp( name, entry_[i].name ) == 0 ) {
-      if ( !value ) return; // annotation
-      if ( strcmp( value, entry_[i].value ) != 0 ) {
-	if ( entry_[i].value )
-	  free( entry_[i].value );
-	entry_[i].value = strdup( value );
-	dirty_ = 1;
-      }
-      lastEntrySet = i;
-      return;
-    }
-  }
-  if ( NEntry_==nEntry_ ) {
-    NEntry_ = NEntry_ ? NEntry_*2 : 10;
-    entry_ = (Entry*)realloc( entry_, NEntry_ * sizeof(Entry) );
-  }
-  entry_[ nEntry_ ].name = strdup( name );
-  entry_[ nEntry_ ].value = value?strdup( value ):0;
-  lastEntrySet = nEntry_;
-  nEntry_++;
-  dirty_ = 1;
-}
-
-// create or set a value (or annotation) from a single line in the file buffer
-void Fl_Preferences::Node::set( const char *line ) {
-  // hmm. If we assume that we always read this file in the beginning,
-  // we can handle the dirty flag 'quick and dirty'
-  char dirt = dirty_;
-  if ( line[0]==';' || line[0]==0 || line[0]=='#' ) {
-    set( line, 0 );
-  } else {
-    const char *c = strchr( line, ':' );
-    if ( c ) {
-      size_t len = c-line+1;
-      if ( len >= sizeof( nameBuffer ) )
-        len = sizeof( nameBuffer );
-      strlcpy( nameBuffer, line, len );
-      set( nameBuffer, c+1 );
-    } else {
-      set( line, "" );
-    }
-  }
-  dirty_ = dirt;
-}
-
-// add more data to an existing entry
-void Fl_Preferences::Node::add( const char *line ) {
-  if ( lastEntrySet<0 || lastEntrySet>=nEntry_ ) return;
-  char *&dst = entry_[ lastEntrySet ].value;
-  size_t a = strlen( dst );
-  size_t b = strlen( line );
-  dst = (char*)realloc( dst, a+b+1 );
-  memcpy( dst+a, line, b+1 );
-  dirty_ = 1;
-}
-
-// get the value for a name, returns 0 if no such name
-const char *Fl_Preferences::Node::get( const char *name ) {
-  int i = getEntry( name );
-  return i>=0 ? entry_[i].value : 0 ;
-}
-
-// find the index of an entry, returns -1 if no such entry
-int Fl_Preferences::Node::getEntry( const char *name ) {
-  for ( int i=0; i<nEntry_; i++ ) {
-    if ( strcmp( name, entry_[i].name ) == 0 ) {
-      return i;
-    }
-  }
-  return -1;
-}
-
-// remove one entry form this group
-char Fl_Preferences::Node::deleteEntry( const char *name ) {
-  int ix = getEntry( name );
-  if ( ix == -1 ) return 0;
-  memmove( entry_+ix, entry_+ix+1, (nEntry_-ix-1) * sizeof(Entry) );
-  nEntry_--;
-  dirty_ = 1;
-  return 1;
-}
-
-// find a group somewhere in the tree starting here
-// - this method will always return a valid node (except for memory allocation problems)
-// - if the node was not found, 'find' will create the required branch
-Fl_Preferences::Node *Fl_Preferences::Node::find( const char *path ) {
-  int len = (int) strlen( path_ );
-  if ( strncmp( path, path_, len ) == 0 ) {
-    if ( path[ len ] == 0 )
-      return this;
-    if ( path[ len ] == '/' ) {
-      Node *nd;
-      for ( nd = child_; nd; nd = nd->next_ ) {
-	Node *nn = nd->find( path );
-	if ( nn ) return nn;
-      }
-      const char *s = path+len+1;
-      const char *e = strchr( s, '/' );
-      if (e) strlcpy( nameBuffer, s, e-s+1 );
-      else strlcpy( nameBuffer, s, sizeof(nameBuffer));
-      nd = new Node( nameBuffer );
-      nd->setParent( this );
-      return nd->find( path );
-    }
-  }
-  return 0;
-}
-
-// find a group somewhere in the tree starting here
-// caller must not set 'offset' argument
-// - if the node does not exist, 'search' returns NULL
-// - if the pathname is "." (current node) return this node
-// - if the pathname is "./" (root node) return the topmost node
-// - if the pathname starts with "./", start the search at the root node instead
-Fl_Preferences::Node *Fl_Preferences::Node::search( const char *path, int offset ) { 
-  if ( offset == 0 ) {
-    if ( path[0] == '.' ) {
-      if ( path[1] == 0 ) {
-	return this; // user was searching for current node
-      } else if ( path[1] == '/' ) {
-	Node *nn = this;
-	while ( nn->parent() ) nn = nn->parent();
-	if ( path[2]==0 ) {		// user is searching for root ( "./" )
-	  return nn;
-	}
-	return nn->search( path+2, 2 ); // do a relative search on the root node
-      }
-    }
-    offset = (int) strlen( path_ ) + 1;
-  }
-  int len = (int) strlen( path_ );
-  if ( len < offset-1 ) return 0;
-  len -= offset;
-  if ( ( len <= 0 ) || ( strncmp( path, path_+offset, len ) == 0 ) ) {
-    if ( len > 0 && path[ len ] == 0 )
-      return this;
-    if ( len <= 0 || path[ len ] == '/' ) {
-      for ( Node *nd = child_; nd; nd = nd->next_ ) {
-	Node *nn = nd->search( path, offset );
-	if ( nn ) return nn;
-      }
-      return 0;
-    }
-  }
-  return 0;
-}
-
-// return the number of child nodes (groups)
-int Fl_Preferences::Node::nChildren() {
-  if (indexed_) {
-    return nIndex_;
-  } else {
-    int cnt = 0;
-    for ( Node *nd = child_; nd; nd = nd->next_ )
-      cnt++;
-    return cnt;
-  }
-}
-
-// return the node name
-const char *Fl_Preferences::Node::name() {
-  if ( path_ ) {
-    char *r = strrchr( path_, '/' );
-    return r ? r+1 : path_ ;
-  } else {
-    return 0L ;
-  }
-}
-
-// return the n'th child node's name
-const char *Fl_Preferences::Node::child( int ix ) {
-  Node *nd = childNode( ix );
-  if ( nd )
-    return nd->name();
-  else
-    return 0L ;
-}
-
-// return the n'th child node
-Fl_Preferences::Node *Fl_Preferences::Node::childNode( int ix ) {
-  createIndex();
-  if (indexed_) {
-    // usually faster access in correct order, but needing more memory
-    return index_[ix];
-  } else {
-    // slow access and reverse order
-    int n = nChildren();
-    ix = n - ix -1;
-    Node *nd;
-    for ( nd = child_; nd; nd = nd->next_ ) {
-      if ( !ix-- ) break;
-      if ( !nd ) break;
-    }
-    return nd;
-  }
-}
-
-// remove myself from the list and delete me (and all children)
-char Fl_Preferences::Node::remove() {
-  Node *nd = 0, *np;
-  if ( parent() ) {
-    nd = parent()->child_; np = 0L;
-    for ( ; nd; np = nd, nd = nd->next_ ) {
-      if ( nd == this ) {
-	if ( np )
-	  np->next_ = nd->next_;
-	else
-	  parent()->child_ = nd->next_;
-	break;
-      }
-    }
-    parent()->dirty_ = 1;
-    parent()->updateIndex();
-  }
-  delete this;
-  return ( nd != 0 );
-}
-
-void Fl_Preferences::Node::createIndex() {
-  if (indexed_) return;
-  int n = nChildren();
-  if (n>NIndex_) {
-    NIndex_ = n + 16;
-    index_ = (Node**)realloc(index_, NIndex_*sizeof(Node**));
-  }
-  Node *nd;
-  int i = 0;
-  for (nd = child_; nd; nd = nd->next_, i++) {
-    index_[n-i-1] = nd;
-  }
-  nIndex_ = n;
-  indexed_ = 1;
-}
-
-void Fl_Preferences::Node::updateIndex() {
-  indexed_ = 0;
-}
-
-void Fl_Preferences::Node::deleteIndex() {
-  if (index_) free(index_);
-  NIndex_ = nIndex_ = 0;
-  index_ = 0;
-  indexed_ = 0;
-}
-
-/**
- * \brief Create a plugin.
- *
- * \param[in] klass plugins are grouped in classes
- * \param[in] name every plugin should have a unique name
- */
-Fl_Plugin::Fl_Plugin(const char *klass, const char *name)
-: id(0) {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: creating a plugin, class \"%s\", name \"%s\"\n",
-         klass, name);
-#endif
-  Fl_Plugin_Manager pm(klass);
-  id = pm.addPlugin(name, this);
-}
-
-/**
- * \brief Clear the plugin and remove it from the database.
- */
-Fl_Plugin::~Fl_Plugin() {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: deleting a plugin\n");
-#endif
-  if (id)
-    Fl_Plugin_Manager::remove(id);
-}
-
-/**
- * \brief Manage all plugins belonging to one class.
- */
-Fl_Plugin_Manager::Fl_Plugin_Manager(const char *klass)
-: Fl_Preferences(0, Fl_Preferences::Name("%s/%s", "plugins", klass)) {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: creating a plugin manager for class \"%s\"\n", klass);
-#endif
-}
-
-/**
- * \brief Remove the plugin manager.
- *
- * Calling this does not remove the database itself or any plugins. It just
- * removes the reference to the database.
- */
-Fl_Plugin_Manager::~Fl_Plugin_Manager() {
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: deleting a plugin manager\n");
-#endif
-}
-
-static unsigned char x2i(char hi, char lo) {
-  return ((hi-'A')<<4) | (lo-'A');
-}
-
-static void i2x(unsigned char v, char *d) {
-  d[0] = ((v>>4)&0x0f)+'A'; d[1] = (v&0x0f)+'A';
-}
-
-static void *a2p(const char *s) {
-  union { void *ret; unsigned char d[sizeof(void*)]; } v;
-  v.ret = 0L;
-  int i=0, n=sizeof(void*);
-  for (i=0; i<n; i++) {
-    v.d[i] = x2i(s[2*i], s[2*i+1]);
-  }
-  return v.ret;
-}
-
-static void p2a(void *vp, char *d) {
-  union { void *vp; unsigned char s[sizeof(void*)]; } v;
-  v.vp = vp;
-  int i=0, n=sizeof(void*);
-  for (i=0; i<n; i++) {
-    i2x(v.s[i], d+i*2);
-  }
-  d[2*i] = 0;
-}
-
-/**
- * \brief Return the address of a plugin by index.
- */
-Fl_Plugin *Fl_Plugin_Manager::plugin(int index) {
-  char buf[34];
-  Fl_Plugin *ret = 0;
-  Fl_Preferences pin(this, index);
-  pin.get("address", buf, "", 34);
-  if (buf[0]=='@') ret = (Fl_Plugin*)a2p(buf+1);
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: returning plugin at index %d: (%s) %p\n", index, buf, ret);
-#endif
-  return ret;
-}
-
-/**
- * \brief Return the address of a plugin by name.
- */
-Fl_Plugin *Fl_Plugin_Manager::plugin(const char *name) {
-  char buf[34];
-  Fl_Plugin *ret = 0;
-  if (groupExists(name)) {
-    Fl_Preferences pin(this, name);
-    pin.get("address", buf, "", 34);
-    if (buf[0]=='@') ret = (Fl_Plugin*)a2p(buf+1);
-#ifdef FL_PLUGIN_VERBOSE
-    printf("Fl_Plugin: returning plugin named \"%s\": (%s) %p\n", name, buf, ret);
-#endif
-    return ret;
-  } else {
-#ifdef FL_PLUGIN_VERBOSE
-    printf("Fl_Plugin: no plugin found named \"%s\"\n", name);
-#endif
-    return 0L;
-  }
-}
-
-/**
- * \brief This function adds a new plugin to the database.
- *
- * There is no need to call this function explicitly. Every Fl_Plugin constructor
- * will call this function at initialization time.
- */
-Fl_Preferences::ID Fl_Plugin_Manager::addPlugin(const char *name, Fl_Plugin *plugin) {
-  char buf[34];
-#ifdef FL_PLUGIN_VERBOSE
-  printf("Fl_Plugin: adding plugin named \"%s\" at 0x%p\n", name, plugin);
-#endif
-  Fl_Preferences pin(this, name);
-  buf[0] = '@'; p2a(plugin, buf+1);
-  pin.set("address", buf);
-  return pin.id();
-}
-
-/**
- * \brief Remove any plugin.
- *
- * There is no need to call this function explicitly. Every Fl_Plugin destructor
- * will call this function at destruction time.
- */
-void Fl_Plugin_Manager::removePlugin(Fl_Preferences::ID id) {
-  Fl_Preferences::remove(id);
-}
-
-/**
- * \brief Load a module from disk.
- *
- * A module must be a dynamically linkable file for the given operating system.
- * When loading a module, its +init function will be called which in turn calls
- * the constructor of all statically initialized Fl_Plugin classes and adds
- * them to the database.
- */
-int Fl_Plugin_Manager::load(const char *filename) {
-  // the functions below will autmaticaly load plugins that are defined:
-  // Fl_My_Plugin plugin();
-#if defined(WIN32) && !defined(__CYGWIN__)
-  HMODULE dl = LoadLibrary(filename);
-#else
-  void * dl = NULL;
-# if HAVE_DLSYM
-    dl = dlopen(filename, RTLD_LAZY);
-# endif
-#endif
-  // There is no way of unloading a plugin!
-  return (dl!=0) ? 0 : -1;
-}
-
-/**
- * \brief Use this function to load a whole directory full of modules.
- */
-int Fl_Plugin_Manager::loadAll(const char *filepath, const char *pattern) {
-  struct dirent **dir;
-  int i, n = fl_filename_list(filepath, &dir);
-  for (i=0; i<n; i++) {
-    struct dirent *e = dir[i];
-    if (pattern==0 || fl_filename_match(e->d_name, pattern)) {
-      load(Fl_Preferences::Name("%s%s", filepath, e->d_name));
-    }
-    free(e);
-  }
-  free(dir);
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Printer.cxx
+++ /dev/null
@@ -1,201 +1,0 @@
-//
-// "$Id$"
-//
-// Encompasses platform-specific printing-support code and 
-// PostScript output code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Printer.H>
-
-#if defined(WIN32)
-#include "Fl_GDI_Printer.cxx"
-#endif
-
-// print dialog customization strings
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_title = "Print";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_printer = "Printer:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_range = "Print Range";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_copies = "Copies";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_all = "All";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_pages = "Pages";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_from = "From:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_to = "To:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_properties = "Properties...";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_copyNo = "# Copies:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_print_button = "Print";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_cancel_button = "Cancel";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::dialog_print_to_file = "Print To File";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_title = "Printer Properties";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_pagesize = "Page Size:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_mode = "Output Mode:";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_use = "Use";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_save = "Save";
-/** [this text may be customized at run-time] */
-const char *Fl_Printer::property_cancel = "Cancel";
-
-const char *Fl_Printer::class_id = "Fl_Printer";
-#if defined(__APPLE__) || defined(WIN32) || defined(FL_DOXYGEN)
-const char *Fl_System_Printer::class_id = Fl_Printer::class_id;
-#endif
-#if !( defined(__APPLE__) || defined(WIN32) )
-const char *Fl_PostScript_Printer::class_id = Fl_Printer::class_id;
-#endif
-
-#if defined(__APPLE__) || defined(WIN32)
-void Fl_System_Printer::set_current(void)
-{
-#ifdef __APPLE__
-  fl_gc = (CGContextRef)gc;
-#elif defined(WIN32)
-  fl_gc = (HDC)gc;
-#endif
-  this->Fl_Surface_Device::set_current();
-}
-
-void Fl_System_Printer::origin(int *x, int *y)
-{
-  Fl_Paged_Device::origin(x, y);
-}
-
-#endif
-
-Fl_Printer::Fl_Printer(void) {
-#if defined(WIN32) || defined(__APPLE__)
-  printer = new Fl_System_Printer();
-#else
-  printer = new Fl_PostScript_Printer();
-#endif
-  Fl_Surface_Device::driver(printer->driver());
-}
-
-/**
- Starts a print job.
- Opens a platform-specific dialog window allowing the user to set several options including
- the desired printer and the page orientation. Optionally, the user can also select a range of pages to  be
- printed. This range is returned to the caller that is in charge of sending only these pages 
- for printing.
- 
- @param[in] pagecount the total number of pages of the job (or 0 if you don't know the number of pages)
- @param[out] frompage if non-null, *frompage is set to the first page the user wants printed
- @param[out] topage if non-null, *topage is set to the last page the user wants printed
- @return 0 if OK, non-zero if any error occurred or if the user cancelled the print request.
- */
-int Fl_Printer::start_job(int pagecount, int *frompage, int *topage)
-{
-  return printer->start_job(pagecount, frompage, topage);
-}
-
-int Fl_Printer::start_page(void)
-{
-  return printer->start_page();
-}
-
-int Fl_Printer::printable_rect(int *w, int *h)
-{
-  return printer->printable_rect(w, h);
-}
-
-void Fl_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  printer->margins(left, top, right, bottom);
-}
-
-void Fl_Printer::origin(int *x, int *y)
-{
-  printer->origin(x, y);
-}
-
-void Fl_Printer::origin(int x, int y)
-{
-  printer->origin(x, y);
-}
-
-void Fl_Printer::scale(float scale_x, float scale_y)
-{
-  printer->scale(scale_x, scale_y);
-}
-
-void Fl_Printer::rotate(float angle)
-{
-  printer->rotate(angle);
-}
-
-void Fl_Printer::translate(int x, int y)
-{
-  printer->translate(x, y);
-}
-
-void Fl_Printer::untranslate(void)
-{
-  printer->untranslate();
-}
-
-int Fl_Printer::end_page (void)
-{
-  return printer->end_page();
-}
-
-void Fl_Printer::end_job (void)
-{
-  printer->end_job();
-}
-
-void Fl_Printer::print_widget(Fl_Widget* widget, int delta_x, int delta_y)
-{
-  printer->print_widget(widget, delta_x, delta_y);
-}
-
-void Fl_Printer::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
-{
-  printer->print_window_part(win, x, y, w, h, delta_x, delta_y);
-}
-
-void Fl_Printer::set_current(void)
-{
-  printer->set_current();
-}
-
-Fl_Graphics_Driver* Fl_Printer::driver(void)
-{
-  return printer->driver();
-}
-
-Fl_Printer::~Fl_Printer(void)
-{
-  delete printer;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Progress.cxx
+++ /dev/null
@@ -1,114 +1,0 @@
-//
-// "$Id$"
-//
-// Progress bar widget routines.
-//
-// Copyright 2000-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_Progress::draw()        - Draw the check button.
-//   Fl_Progress::Fl_Progress() - Construct a Fl_Progress widget.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Progress.H>
-#include <FL/fl_draw.H>
-
-
-//
-// Fl_Progress is a progress bar widget based off Fl_Widget that shows a
-// standard progress bar...
-//
-
-
-//
-// 'Fl_Progress::draw()' - Draw the progress bar.
-//
-
-/** Draws the progress bar. */
-void Fl_Progress::draw()
-{
-  int	progress;	// Size of progress bar...
-  int	bx, by, bw, bh;	// Box areas...
-  int	tx, tw;		// Temporary X + width
-
-
-  // Get the box borders...
-  bx = Fl::box_dx(box());
-  by = Fl::box_dy(box());
-  bw = Fl::box_dw(box());
-  bh = Fl::box_dh(box());
-
-  tx = x() + bx;
-  tw = w() - bw;
-
-  // Draw the progress bar...
-  if (maximum_ > minimum_)
-    progress = (int)(w() * (value_ - minimum_) / (maximum_ - minimum_) + 0.5f);
-  else
-    progress = 0;
-
-  // Draw the box and label...
-  if (progress > 0) {
-    Fl_Color c = labelcolor();
-    labelcolor(fl_contrast(labelcolor(), selection_color()));
-
-    fl_push_clip(x(), y(), progress + bx, h());
-      draw_box(box(), x(), y(), w(), h(), active_r() ? selection_color() : fl_inactive(selection_color()));
-      draw_label(tx, y() + by, tw, h() - bh);
-    fl_pop_clip();
-
-    labelcolor(c);
-
-    if (progress<w()) {
-      fl_push_clip(tx + progress, y(), w() - progress, h());
-        draw_box(box(), x(), y(), w(), h(), active_r() ? color() : fl_inactive(color()));
-        draw_label(tx, y() + by, tw, h() - bh);
-      fl_pop_clip();
-    }
-  } else {
-    draw_box(box(), x(), y(), w(), h(), active_r() ? color() : fl_inactive(color()));
-    draw_label(tx, y() + by, tw, h() - bh);
-  }
-}
-
-
-/**  
-    The constructor creates the progress bar using the position, size, and label.
-    
-    You can set the background color with color() and the
-    progress bar color with selection_color(), or you can set both colors
-    together with color(unsigned bg, unsigned sel).
-    
-    The default colors are FL_BACKGROUND2_COLOR and FL_YELLOW, resp.
-*/
-Fl_Progress::Fl_Progress(int X, int Y, int W, int H, const char* L)
-: Fl_Widget(X, Y, W, H, L) {
-  align(FL_ALIGN_INSIDE);
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_YELLOW);
-  minimum(0.0f);
-  maximum(100.0f);
-  value(0.0f);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Quartz_Printer.mm
+++ /dev/null
@@ -1,343 +1,0 @@
-//
-// "$Id$"
-//
-// Mac OS X-specific printing support (objective-c++) for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef __APPLE__
-#include <FL/Fl_Printer.H>
-
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#import <Cocoa/Cocoa.h>
-
-typedef OSStatus (*PMSessionSetDocumentFormatGeneration_type)(
-                                     PMPrintSession   printSession,
-                                     CFStringRef      docFormat,
-                                     CFArrayRef       graphicsContextTypes,
-                                     CFTypeRef        options);
-typedef OSStatus (*PMSessionBeginDocumentNoDialog_type)(
-                               PMPrintSession    printSession,
-                               PMPrintSettings   printSettings,
-                               PMPageFormat      pageFormat);
-typedef OSStatus
-(*PMSessionGetGraphicsContext_type)(
-                            PMPrintSession   printSession,
-                            CFStringRef      graphicsContextType,
-                            void **          graphicsContext);
-
-extern void fl_quartz_restore_line_style_();
-
-Fl_System_Printer::Fl_System_Printer(void)
-{
-  x_offset = 0;
-  y_offset = 0;
-  scale_x = scale_y = 1.;
-  gc = 0;
-  driver(new Fl_Quartz_Graphics_Driver);
-}
-
-Fl_System_Printer::~Fl_System_Printer(void) {
-  delete driver();
-}
-
-int Fl_System_Printer::start_job (int pagecount, int *frompage, int *topage)
-//printing using a Quartz graphics context
-//returns 0 iff OK
-{
-  OSStatus status = 0;
-  fl_open_display();
-  Fl_X::q_release_context();
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (fl_mac_os_version >= 100500) {
-    NSPrintInfo *info = [NSPrintInfo sharedPrintInfo];
-    NSPrintPanel *panel = [NSPrintPanel printPanel];
-    //from 10.5
-    [panel setOptions:NSPrintPanelShowsCopies | NSPrintPanelShowsPageRange | NSPrintPanelShowsPageSetupAccessory];
-    NSInteger retval = [panel runModalWithPrintInfo:info];//from 10.5
-    if(retval != NSOKButton) {
-      Fl_Window *w = Fl::first_window();
-      if (w) w->show();
-      return 1;
-    }
-    printSession = (PMPrintSession)[info PMPrintSession];//from 10.5
-    pageFormat = (PMPageFormat)[info PMPageFormat];//from 10.5
-    printSettings = (PMPrintSettings)[info PMPrintSettings];//from 10.5
-    UInt32 from32, to32;
-    PMGetFirstPage(printSettings, &from32); 
-    if (frompage) *frompage = (int)from32;
-    PMGetLastPage(printSettings, &to32); 
-    if (topage) {
-      *topage = (int)to32;
-      if (*topage > pagecount && pagecount > 0) *topage = pagecount;
-    }
-    status = PMSessionBeginCGDocumentNoDialog(printSession, printSettings, pageFormat);//from 10.4
-  }
-  else
-#endif
-  {
-#if !defined(__LP64__) || !__LP64__
-    Boolean accepted;
-    status = PMCreateSession(&printSession);
-    if (status != noErr) return 1;
-    status = PMCreatePageFormat(&pageFormat);
-    status = PMSessionDefaultPageFormat(printSession, pageFormat);
-    if (status != noErr) return 1;
-    // get pointer to the PMSessionPageSetupDialog Carbon function
-    typedef OSStatus (*dialog_f)(PMPrintSession, PMPageFormat, Boolean *);
-    static dialog_f f = NULL;
-    if (!f) f = (dialog_f)Fl_X::get_carbon_function("PMSessionPageSetupDialog");
-    status = (*f)(printSession, pageFormat, &accepted);
-    if (status != noErr || !accepted) {
-      Fl::first_window()->show();
-      return 1;
-    }
-    status = PMCreatePrintSettings(&printSettings);
-    if (status != noErr || printSettings == kPMNoPrintSettings) return 1;
-    status = PMSessionDefaultPrintSettings (printSession, printSettings);
-    if (status != noErr) return 1;
-    PMSetPageRange(printSettings, 1, (UInt32)kPMPrintAllPages);
-    // get pointer to the PMSessionPrintDialog Carbon function
-    typedef OSStatus (*dialog_f2)(PMPrintSession, PMPrintSettings, PMPageFormat, Boolean *);
-    static dialog_f2 f2 = NULL;
-    if (!f2) f2 = (dialog_f2)Fl_X::get_carbon_function("PMSessionPrintDialog");
-    status = (*f2)(printSession, printSettings, pageFormat, &accepted);
-    if (!accepted) status = kPMCancel;
-    if (status != noErr) {
-      Fl::first_window()->show();
-      return 1;
-    }
-    UInt32 from32, to32;
-    PMGetFirstPage(printSettings, &from32); 
-    if (frompage) *frompage = (int)from32;
-    PMGetLastPage(printSettings, &to32); 
-    if (topage) *topage = (int)to32;
-    if(topage && *topage > pagecount) *topage = pagecount;
-    CFStringRef mystring[1];
-    mystring[0] = kPMGraphicsContextCoreGraphics;
-    CFArrayRef array = CFArrayCreate(NULL, (const void **)mystring, 1, &kCFTypeArrayCallBacks);
-    PMSessionSetDocumentFormatGeneration_type PMSessionSetDocumentFormatGeneration =
-      (PMSessionSetDocumentFormatGeneration_type)Fl_X::get_carbon_function("PMSessionSetDocumentFormatGeneration");
-    status = PMSessionSetDocumentFormatGeneration(printSession, kPMDocumentFormatDefault, array, NULL);
-    CFRelease(array);
-    PMSessionBeginDocumentNoDialog_type PMSessionBeginDocumentNoDialog =
-      (PMSessionBeginDocumentNoDialog_type)Fl_X::get_carbon_function("PMSessionBeginDocumentNoDialog");
-    status = PMSessionBeginDocumentNoDialog(printSession, printSettings, pageFormat);
-#endif //__LP64__
-  }
-
-  if (status != noErr) return 1;
-  y_offset = x_offset = 0;
-  this->set_current();
-  return 0;
-}
-
-void Fl_System_Printer::margins(int *left, int *top, int *right, int *bottom)
-{
-  PMPaper paper;
-  PMGetPageFormatPaper(pageFormat, &paper);
-  PMOrientation orientation;
-  PMGetOrientation(pageFormat, &orientation);
-  PMPaperMargins margins;
-  PMPaperGetMargins(paper, &margins);
-  if(orientation == kPMPortrait) {
-    if (left) *left = (int)(margins.left / scale_x + 0.5);
-    if (top) *top = (int)(margins.top / scale_y + 0.5);
-    if (right) *right = (int)(margins.right / scale_x + 0.5);
-    if (bottom) *bottom = (int)(margins.bottom / scale_y + 0.5);
-    }
-  else {
-    if (left) *left = (int)(margins.top / scale_x + 0.5);
-    if (top) *top = (int)(margins.left / scale_y + 0.5);
-    if (right) *right = (int)(margins.bottom / scale_x + 0.5);
-    if (bottom) *bottom = (int)(margins.right / scale_y + 0.5);
-  }
-}
-
-int Fl_System_Printer::printable_rect(int *w, int *h)
-//returns 0 iff OK
-{
-  OSStatus status;
-  PMRect pmRect;
-  int x, y;
-  
-  status = PMGetAdjustedPageRect(pageFormat, &pmRect);
-  if (status != noErr) return 1;
-  
-  x = (int)pmRect.left;
-  y = (int)pmRect.top;
-  *w = int((int)(pmRect.right - x) / scale_x + 1);
-  *h = int((int)(pmRect.bottom - y) / scale_y + 1);
-  return 0;
-}
-
-void Fl_System_Printer::origin(int x, int y)
-{
-  x_offset = x;
-  y_offset = y;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextTranslateCTM(fl_gc, x, y);
-  CGContextRotateCTM(fl_gc, angle);
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::scale (float s_x, float s_y)
-{
-  if (s_y == 0.) s_y = s_x;
-  scale_x = s_x;
-  scale_y = s_y;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextRotateCTM(fl_gc, angle);
-  x_offset = y_offset = 0;
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::rotate (float rot_angle)
-{
-  angle = - rot_angle * M_PI / 180.;
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  CGContextScaleCTM(fl_gc, scale_x, scale_y);
-  CGContextTranslateCTM(fl_gc, x_offset, y_offset);
-  CGContextRotateCTM(fl_gc, angle);
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::translate(int x, int y)
-{
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, x, y );
-  CGContextSaveGState(fl_gc);
-}
-
-void Fl_System_Printer::untranslate(void)
-{
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-}
-
-int Fl_System_Printer::start_page (void)
-{	
-  OSStatus status = PMSessionBeginPageNoDialog(printSession, pageFormat, NULL);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if ( &PMSessionGetCGGraphicsContext != NULL ) {
-    status = PMSessionGetCGGraphicsContext(printSession, &fl_gc);
-  }
-  else
-#endif
-  {
-#if !defined(__LP64__) || !__LP64__
-    PMSessionGetGraphicsContext_type PMSessionGetGraphicsContext =
-      (PMSessionGetGraphicsContext_type)Fl_X::get_carbon_function("PMSessionGetGraphicsContext");
-    status = PMSessionGetGraphicsContext(printSession, NULL, (void **)&fl_gc);
-#endif
-  }
-  PMRect pmRect;
-  float win_scale_x, win_scale_y;
-
-  PMPaper paper;
-  PMGetPageFormatPaper(pageFormat, &paper);
-  PMPaperMargins margins;
-  PMPaperGetMargins(paper, &margins);
-  PMOrientation orientation;
-  PMGetOrientation(pageFormat, &orientation);
-  
-  status = PMGetAdjustedPageRect(pageFormat, &pmRect);
-  double h = pmRect.bottom - pmRect.top;
-  x_offset = 0;
-  y_offset = 0; 
-  angle = 0;
-  scale_x = scale_y = 1;
-  win_scale_x = win_scale_y = 1;
-  if(orientation == kPMPortrait)
-    CGContextTranslateCTM(fl_gc, margins.left, margins.bottom + h);
-  else
-    CGContextTranslateCTM(fl_gc, margins.top, margins.right + h);
-  CGContextScaleCTM(fl_gc, win_scale_x, - win_scale_y);
-  fl_quartz_restore_line_style_();
-  CGContextSetShouldAntialias(fl_gc, false);
-  CGContextSaveGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-  fl_line_style(FL_SOLID);
-  fl_window = (Window)1; // TODO: something better
-  fl_clip_region(0);
-  if( status == noErr) gc = fl_gc;
-  return status != noErr;
-}
-
-int Fl_System_Printer::end_page (void)
-{	
-  CGContextFlush(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  CGContextRestoreGState(fl_gc);
-  OSStatus status = PMSessionEndPageNoDialog(printSession);
-  gc = NULL;
-  return status != noErr;
-}
-
-void Fl_System_Printer::end_job (void)
-{
-  OSStatus status;
-  
-  status = PMSessionError(printSession);
-  if (status != noErr) {
-    fl_alert ("PM Session error %d", (int)status);
-  }
-  PMSessionEndDocumentNoDialog(printSession);
-#if !defined(__LP64__) || !__LP64__
-  if (fl_mac_os_version < 100500) {
-    PMRelease(printSettings);
-    PMRelease(pageFormat);
-    PMRelease(printSession);
-    }
-#endif
-  Fl_Display_Device::display_device()->set_current();
-  fl_gc = 0;
-  Fl_Window *w = Fl::first_window();
-  if (w) w->show();
-}
-
-// version that prints at high res if using a retina display
-void Fl_System_Printer::print_window_part(Fl_Window *win, int x, int y, int w, int h, int delta_x, int delta_y)
-{
-  Fl_Surface_Device *current = Fl_Surface_Device::surface();
-  Fl_Display_Device::display_device()->set_current();
-  Fl_Window *save_front = Fl::first_window();
-  win->show();
-  fl_gc = NULL;
-  Fl::check();
-  CGImageRef img = Fl_X::CGImage_from_window_rect(win, x, y, w, h);
-  if (save_front != win) save_front->show();
-  current->set_current();
-  CGRect rect = CGRectMake(delta_x, delta_y, w, h);
-  Fl_X::q_begin_image(rect, 0, 0, w, h);
-  CGContextDrawImage(fl_gc, rect, img);
-  Fl_X::q_end_image();
-  CFRelease(img);
-}
-
-#endif // __APPLE__
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Repeat_Button.cxx
+++ /dev/null
@@ -1,68 +1,0 @@
-//
-// "$Id$"
-//
-// Repeat button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Repeat_Button.H>
-
-#define INITIALREPEAT .5
-#define REPEAT .1
-
-void Fl_Repeat_Button::repeat_callback(void *v) {
-  Fl_Button *b = (Fl_Button*)v;
-  Fl::add_timeout(REPEAT,repeat_callback,b);
-  b->do_callback();
-}
-
-int Fl_Repeat_Button::handle(int event) {
-  int newval;
-  switch (event) {
-  case FL_HIDE:
-  case FL_DEACTIVATE:
-  case FL_RELEASE:
-    newval = 0; goto J1;
-  case FL_PUSH:
-  case FL_DRAG:
-    if (Fl::visible_focus()) Fl::focus(this);
-    newval = Fl::event_inside(this);
-  J1:
-    if (!active()) 
-      newval = 0;
-    if (value(newval)) {
-      if (newval) {
-	Fl::add_timeout(INITIALREPEAT,repeat_callback,this);
-	do_callback();
-      } else {
-	Fl::remove_timeout(repeat_callback,this);
-      }
-    }
-    return 1;
-  default:
-    return Fl_Button::handle(event);
-  }
-}
-
-
-Fl_Repeat_Button::Fl_Repeat_Button(int X,int Y,int W,int H,const char *l)
-: Fl_Button(X,Y,W,H,l) 
-{
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Return_Button.cxx
+++ /dev/null
@@ -1,72 +1,0 @@
-//
-// "$Id$"
-//
-// Return button widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/fl_draw.H>
-
-int fl_return_arrow(int x, int y, int w, int h) {
-  int size = w; if (h<size) size = h;
-  int d = (size+2)/4; if (d<3) d = 3;
-  int t = (size+9)/12; if (t<1) t = 1;
-  int x0 = x+(w-2*d-2*t-1)/2;
-  int x1 = x0+d;
-  int y0 = y+h/2;
-  fl_color(FL_LIGHT3);
-  fl_line(x0, y0, x1, y0+d);
-  fl_yxline(x1, y0+d, y0+t, x1+d+2*t, y0-d);
-  fl_yxline(x1, y0-t, y0-d);
-  fl_color(fl_gray_ramp(0));
-  fl_line(x0, y0, x1, y0-d);
-  fl_color(FL_DARK3);
-  fl_xyline(x1+1, y0-t, x1+d, y0-d, x1+d+2*t);
-  return 1;
-}
-
-void Fl_Return_Button::draw() {
-  if (type() == FL_HIDDEN_BUTTON) return;
-  Fl_Boxtype bt = value() ? (down_box()?down_box():fl_down(box())) : box();
-  int dx = Fl::box_dx(bt);
-  draw_box(bt, value() ? selection_color() : color());
-  int W = h();
-  if (w()/3 < W) W = w()/3;
-  fl_return_arrow(x()+w()-(W+dx), y(), W, h());
-  draw_label(x()+dx, y(), w()-(dx+W+dx), h());
-  if (Fl::focus() == this) draw_focus();
-}
-
-int Fl_Return_Button::handle(int event) {
-  if (event == FL_SHORTCUT &&
-      (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)) {
-    simulate_key_action();
-    do_callback();
-    return 1;
-  } else
-    return Fl_Button::handle(event);
-}
-
-
-Fl_Return_Button::Fl_Return_Button(int X, int Y, int W, int H,const char *l)
-: Fl_Button(X,Y,W,H,l) 
-{
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Roller.cxx
+++ /dev/null
@@ -1,176 +1,0 @@
-//
-// "$Id$"
-//
-// Roller widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Rapid-App style knob
-
-#include <FL/Fl.H>
-#include <FL/Fl_Roller.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-
-int Fl_Roller::handle(int event) {
-  static int ipos;
-  int newpos = horizontal() ? Fl::event_x() : Fl::event_y();
-  switch (event) {
-  case FL_PUSH:
-    if (Fl::visible_focus()) {
-      Fl::focus(this);
-      redraw();
-    }
-    handle_push();
-    ipos = newpos;
-    return 1;
-  case FL_DRAG:
-    handle_drag(clamp(round(increment(previous_value(),newpos-ipos))));
-    return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_KEYBOARD :
-    switch (Fl::event_key()) {
-      case FL_Up:
-        if (horizontal()) return 0;
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Down:
-        if (horizontal()) return 0;
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      case FL_Left:
-        if (!horizontal()) return 0;
-	handle_drag(clamp(increment(value(),-1)));
-	return 1;
-      case FL_Right:
-        if (!horizontal()) return 0;
-	handle_drag(clamp(increment(value(),1)));
-	return 1;
-      default:
-        return 0;
-    }
-    // break not required because of switch...
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-void Fl_Roller::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int X = x()+Fl::box_dx(box());
-  int Y = y()+Fl::box_dy(box());
-  int W = w()-Fl::box_dw(box())-1;
-  int H = h()-Fl::box_dh(box())-1;
-  if (W<=0 || H <=0) return;
-  int offset = step() ? int(value()/step()) : 0;
-  const double ARC = 1.5; // 1/2 the number of radians visible
-  const double delta = .2; // radians per knurl
-  if (horizontal()) { // horizontal one
-    // draw shaded ends of wheel:
-    int h1 = W/4+1; // distance from end that shading starts
-    fl_color(color()); fl_rectf(X+h1,Y,W-2*h1,H);
-    for (int i=0; h1; i++) {
-      fl_color((Fl_Color)(FL_GRAY-i-1));
-      int h2 = FL_GRAY-i-1 > FL_DARK3 ? 2*h1/3+1 : 0;
-      fl_rectf(X+h2,Y,h1-h2,H);
-      fl_rectf(X+W-h1,Y,h1-h2,H);
-      h1 = h2;
-    }
-    if (active_r()) {
-      // draw ridges:
-      double junk;
-      for (double yy = -ARC+modf(offset*sin(ARC)/(W/2)/delta,&junk)*delta;;
-	   yy += delta) {
-	int yy1 = int((sin(yy)/sin(ARC)+1)*W/2);
-	if (yy1 <= 0) continue; else if (yy1 >= W-1) break;
-	fl_color(FL_DARK3); fl_yxline(X+yy1,Y+1,Y+H-1);
-	if (yy < 0) yy1--; else yy1++;
-	fl_color(FL_LIGHT1);fl_yxline(X+yy1,Y+1,Y+H-1);
-      }
-      // draw edges:
-      h1 = W/8+1; // distance from end the color inverts
-      fl_color(FL_DARK2);
-      fl_xyline(X+h1,Y+H-1,X+W-h1);
-      fl_color(FL_DARK3);
-      fl_yxline(X,Y+H,Y,X+h1);
-      fl_xyline(X+W-h1,Y,X+W);
-      fl_color(FL_LIGHT2);
-      fl_xyline(X+h1,Y-1,X+W-h1);
-      fl_yxline(X+W,Y,Y+H,X+W-h1);
-      fl_xyline(X+h1,Y+H,X);
-    }
-  } else { // vertical one
-    // draw shaded ends of wheel:
-    int h1 = H/4+1; // distance from end that shading starts
-    fl_color(color()); fl_rectf(X,Y+h1,W,H-2*h1);
-    for (int i=0; h1; i++) {
-      fl_color((Fl_Color)(FL_GRAY-i-1));
-      int h2 = FL_GRAY-i-1 > FL_DARK3 ? 2*h1/3+1 : 0;
-      fl_rectf(X,Y+h2,W,h1-h2);
-      fl_rectf(X,Y+H-h1,W,h1-h2);
-      h1 = h2;
-    }
-    if (active_r()) {
-      // draw ridges:
-      double junk;
-      for (double yy = -ARC+modf(offset*sin(ARC)/(H/2)/delta,&junk)*delta;
-	   ; yy += delta) {
-	int yy1 = int((sin(yy)/sin(ARC)+1)*H/2);
-	if (yy1 <= 0) continue; else if (yy1 >= H-1) break;
-	fl_color(FL_DARK3); fl_xyline(X+1,Y+yy1,X+W-1);
-	if (yy < 0) yy1--; else yy1++;
-	fl_color(FL_LIGHT1);fl_xyline(X+1,Y+yy1,X+W-1);
-      }
-      // draw edges:
-      h1 = H/8+1; // distance from end the color inverts
-      fl_color(FL_DARK2);
-      fl_yxline(X+W-1,Y+h1,Y+H-h1);
-      fl_color(FL_DARK3);
-      fl_xyline(X+W,Y,X,Y+h1);
-      fl_yxline(X,Y+H-h1,Y+H);
-      fl_color(FL_LIGHT2);
-      fl_yxline(X,Y+h1,Y+H-h1);
-      fl_xyline(X,Y+H,X+W,Y+H-h1);
-      fl_yxline(X+W,Y+h1,Y);
-    }
-  }
-
-  if (Fl::focus() == this) draw_focus(FL_THIN_UP_FRAME, x(), y(), w(), h());
-}
-
-/**
-  Creates a new Fl_Roller widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-  <P>Inherited destructor destroys the valuator.
-*/
-Fl_Roller::Fl_Roller(int X,int Y,int W,int H,const char* L)
-  : Fl_Valuator(X,Y,W,H,L) {
-  box(FL_UP_BOX);
-  step(1,1000);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Round_Button.cxx
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Round button for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// A subclass of Fl_Button that always draws as a round circle.  This
-// circle is smaller than the widget size and can be surrounded by
-// another box type, for compatibility with Forms.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Radio_Round_Button.H>
-
-/**
-  Creates a new Fl_Round_Button widget using the given position, size, and label string.
-
-  \image html Fl_Round_Button.png
-  \image latex Fl_Round_Button.png " Fl_Round_Button" width=4cm
-
-  The Fl_Round_Button subclass displays the "ON" state by
-  turning on a light, rather than drawing pushed in.
-
-  The default box type is FL_NO_BOX, which draws the label w/o a box
-  right of the checkmark.
-
-  The shape of the "light" is set with down_box() and its default
-  value is FL_ROUND_DOWN_BOX.
-
-  The color of the light when on is controlled with selection_color(),
-  which defaults to FL_FOREGROUND_COLOR (usually black).
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
-*/
-Fl_Round_Button::Fl_Round_Button(int X,int Y,int W,int H, const char *L)
-: Fl_Light_Button(X,Y,W,H,L) {
-  box(FL_NO_BOX);
-  down_box(FL_ROUND_DOWN_BOX);
-  selection_color(FL_FOREGROUND_COLOR);
-}
-
-/**
-  Creates a new Fl_Radio_Button widget using the given position, size, and label string.
-
-  The button type() is set to FL_RADIO_BUTTON.
-
-  \param[in] X, Y, W, H position and size of the widget
-  \param[in] L widget label, default is no label
-*/
-
-Fl_Radio_Round_Button::Fl_Radio_Round_Button(int X,int Y,int W,int H,const char *L)
-: Fl_Round_Button(X,Y,W,H,L)
-{
-  type(FL_RADIO_BUTTON);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Scroll.cxx
+++ /dev/null
@@ -1,454 +1,0 @@
-//
-// "$Id$"
-//
-// Scroll widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/fl_draw.H>
-
-/** Clear all but the scrollbars... */
-void Fl_Scroll::clear() {
-  // Note: the scrollbars are removed from the group before calling
-  // Fl_Group::clear() to take advantage of the optimized widget removal
-  // and deletion. Finally they are added to Fl_Scroll's group again. This
-  // is MUCH faster than removing the widgets one by one (STR #2409).
-
-  remove(scrollbar);
-  remove(hscrollbar);
-  Fl_Group::clear();
-  add(hscrollbar);
-  add(scrollbar);
-}
-
-/** Insure the scrollbars are the last children. */
-void Fl_Scroll::fix_scrollbar_order() {
-  Fl_Widget** a = (Fl_Widget**)array();
-  if (a[children()-1] != &scrollbar) {
-    int i,j; for (i = j = 0; j < children(); j++)
-      if (a[j] != &hscrollbar && a[j] != &scrollbar) a[i++] = a[j];
-    a[i++] = &hscrollbar;
-    a[i++] = &scrollbar;
-  }
-}
-
-// Draw widget's background and children within a specific clip region
-//    So widget can just redraw damaged parts.
-//
-void Fl_Scroll::draw_clip(void* v,int X, int Y, int W, int H) {
-  fl_push_clip(X,Y,W,H);
-  Fl_Scroll* s = (Fl_Scroll*)v;
-  // erase background as needed...
-  switch (s->box()) {
-    case FL_NO_BOX :
-    case FL_UP_FRAME :
-    case FL_DOWN_FRAME :
-    case FL_THIN_UP_FRAME :
-    case FL_THIN_DOWN_FRAME :
-    case FL_ENGRAVED_FRAME :
-    case FL_EMBOSSED_FRAME :
-    case FL_BORDER_FRAME :
-    case _FL_SHADOW_FRAME :
-    case _FL_ROUNDED_FRAME :
-    case _FL_OVAL_FRAME :
-    case _FL_PLASTIC_UP_FRAME :
-    case _FL_PLASTIC_DOWN_FRAME :
-        if (s->parent() == (Fl_Group *)s->window() && Fl::scheme_bg_) {
-	  Fl::scheme_bg_->draw(X-(X%((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->w()),
-	                       Y-(Y%((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->h()),
-	                       W+((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->w(),
-			       H+((Fl_Tiled_Image *)Fl::scheme_bg_)->image()->h());
-	  break;
-        }
-
-    default :
-	fl_color(s->color());
-	fl_rectf(X,Y,W,H);
-	break;
-  }
-  Fl_Widget*const* a = s->array();
-  for (int i=s->children()-2; i--;) {
-    Fl_Widget& o = **a++;
-    s->draw_child(o);
-    s->draw_outside_label(o);
-  }
-  fl_pop_clip();
-}
-
-/**
-  Calculate visibility/size/position of scrollbars, find children's bounding box.
-
-  The \p si parameter will be filled with data from the calculations.
-  Derived classes can make use of this call to figure out the scrolling area
-  eg. during resize() handling.
-
-  \param[in] si -- ScrollInfo structure
-  \returns Structure containing the calculated info.
-*/
-void Fl_Scroll::recalc_scrollbars(ScrollInfo &si) {
-
-  // inner box of widget (excluding scrollbars)
-  si.innerbox.x = x()+Fl::box_dx(box());
-  si.innerbox.y = y()+Fl::box_dy(box());
-  si.innerbox.w = w()-Fl::box_dw(box());
-  si.innerbox.h = h()-Fl::box_dh(box());
-
-  // accumulate a bounding box for all the children
-  si.child.l = si.innerbox.x;
-  si.child.r = si.innerbox.x;
-  si.child.b = si.innerbox.y;
-  si.child.t = si.innerbox.y;
-  int first = 1;
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if ( o==&scrollbar || o==&hscrollbar ) continue;
-    if ( first ) {
-        first = 0;
-	si.child.l = o->x();
-	si.child.r = o->x()+o->w();
-	si.child.b = o->y()+o->h();
-	si.child.t = o->y();
-    } else {
-	if (o->x() < si.child.l) si.child.l = o->x();
-	if (o->y() < si.child.t) si.child.t = o->y();
-	if (o->x()+o->w() > si.child.r) si.child.r = o->x()+o->w();
-	if (o->y()+o->h() > si.child.b) si.child.b = o->y()+o->h();
-    }
-  }
-
-  // Turn the scrollbars on and off as necessary.
-  // See if children would fit if we had no scrollbars...
-  {
-    int X = si.innerbox.x;
-    int Y = si.innerbox.y;
-    int W = si.innerbox.w;
-    int H = si.innerbox.h;
-
-    si.scrollsize = scrollbar_size_ ? scrollbar_size_ : Fl::scrollbar_size();
-    si.vneeded = 0;
-    si.hneeded = 0;
-    if (type() & VERTICAL) {
-      if ((type() & ALWAYS_ON) || si.child.t < Y || si.child.b > Y+H) {
-	si.vneeded = 1;
-	W -= si.scrollsize;
-	if (scrollbar.align() & FL_ALIGN_LEFT) X += si.scrollsize;
-      }
-    }
-    if (type() & HORIZONTAL) {
-      if ((type() & ALWAYS_ON) || si.child.l < X || si.child.r > X+W) {
-	si.hneeded = 1;
-	H -= si.scrollsize;
-	if (scrollbar.align() & FL_ALIGN_TOP) Y += si.scrollsize;
-	// recheck vertical since we added a horizontal scrollbar
-	if (!si.vneeded && (type() & VERTICAL)) {
-	  if ((type() & ALWAYS_ON) || si.child.t < Y || si.child.b > Y+H) {
-	    si.vneeded = 1;
-	    W -= si.scrollsize;
-	    if (scrollbar.align() & FL_ALIGN_LEFT) X += si.scrollsize;
-	  }
-	}
-      }
-    }
-    si.innerchild.x = X;
-    si.innerchild.y = Y;
-    si.innerchild.w = W;
-    si.innerchild.h = H;
-  }
-
-  // calculate hor scrollbar position
-  si.hscroll.x = si.innerchild.x;
-  si.hscroll.y = (scrollbar.align() & FL_ALIGN_TOP)
-		     ? si.innerbox.y
-		     : si.innerbox.y + si.innerbox.h - si.scrollsize;
-  si.hscroll.w = si.innerchild.w;
-  si.hscroll.h = si.scrollsize;
-
-  // calculate ver scrollbar position
-  si.vscroll.x = (scrollbar.align() & FL_ALIGN_LEFT)
-                     ? si.innerbox.x
-		     : si.innerbox.x + si.innerbox.w - si.scrollsize;
-  si.vscroll.y = si.innerchild.y;
-  si.vscroll.w = si.scrollsize;
-  si.vscroll.h = si.innerchild.h;
-
-  // calculate h/v scrollbar values (pos/size/first/total)
-  si.hscroll.pos = si.innerchild.x - si.child.l;
-  si.hscroll.size = si.innerchild.w;
-  si.hscroll.first = 0;
-  si.hscroll.total = si.child.r - si.child.l;
-  if ( si.hscroll.pos < 0 ) { si.hscroll.total += (-si.hscroll.pos); si.hscroll.first = si.hscroll.pos; }
-
-  si.vscroll.pos = si.innerchild.y - si.child.t;
-  si.vscroll.size = si.innerchild.h;
-  si.vscroll.first = 0;
-  si.vscroll.total = si.child.b - si.child.t;
-  if ( si.vscroll.pos < 0 ) { si.vscroll.total += (-si.vscroll.pos); si.vscroll.first = si.vscroll.pos; }
-
-//  printf("DEBUG --- ScrollInfo ---\n");
-//  printf("DEBUG        scrollsize: %d\n", si.scrollsize);
-//  printf("DEBUG  hneeded, vneeded: %d %d\n", si.hneeded, si.vneeded);
-//  printf("DEBUG     innerbox.x, si.innerbox.y, si.innerbox.w,si.innerbox.h);
-//  printf("DEBUG   innerchild.xywh: %d %d %d %d\n", si.innerchild.x, si.innerchild.y, si.innerchild.w, si.innerchild.h);
-//  printf("DEBUG        child lrbt: %d %d %d %d\n", si.child.l, si.child.r, si.child.b, si.child.t);
-//  printf("DEBUG      hscroll xywh: %d %d %d %d\n", si.hscroll.x, si.hscroll.y, si.hscroll.w, si.hscroll.h);
-//  printf("DEBUG      vscroll xywh: %d %d %d %d\n", si.vscroll.x, si.vscroll.y, si.vscroll.w, si.vscroll.h);
-//  printf("DEBUG  horz scroll vals: %d %d %d %d\n", si.hscroll.pos, si.hscroll.size, si.hscroll.first, si.hscroll.total);
-//  printf("DEBUG  vert scroll vals: %d %d %d %d\n", si.vscroll.pos, si.vscroll.size, si.vscroll.first, si.vscroll.total);
-//  printf("DEBUG \n");
-}
-
-/**
-  Returns the bounding box for the interior of the scrolling area, inside
-  the scrollbars.
-
-  Currently this is only reliable after draw(), and before any resizing of
-  the Fl_Scroll or any child widgets occur.
-
-  \todo The visibility of the scrollbars ought to be checked/calculated
-  outside of the draw() method (STR #1895).
-*/
-void Fl_Scroll::bbox(int& X, int& Y, int& W, int& H) {
-  X = x()+Fl::box_dx(box());
-  Y = y()+Fl::box_dy(box());
-  W = w()-Fl::box_dw(box());
-  H = h()-Fl::box_dh(box());
-  if (scrollbar.visible()) {
-    W -= scrollbar.w();
-    if (scrollbar.align() & FL_ALIGN_LEFT) X += scrollbar.w();
-  }
-  if (hscrollbar.visible()) {
-    H -= hscrollbar.h();
-    if (scrollbar.align() & FL_ALIGN_TOP) Y += hscrollbar.h();
-  }
-}
-
-void Fl_Scroll::draw() {
-  fix_scrollbar_order();
-  int X,Y,W,H; bbox(X,Y,W,H);
-
-  uchar d = damage();
-
-  if (d & FL_DAMAGE_ALL) { // full redraw
-    draw_box(box(),x(),y(),w(),h(),color());
-    draw_clip(this, X, Y, W, H);
-  } else {
-    if (d & FL_DAMAGE_SCROLL) {
-      // scroll the contents:
-      fl_scroll(X, Y, W, H, oldx-xposition_, oldy-yposition_, draw_clip, this);
-
-      // Erase the background as needed...
-      Fl_Widget*const* a = array();
-      int L, R, T, B;
-      L = 999999;
-      R = 0;
-      T = 999999;
-      B = 0;
-      for (int i=children()-2; i--; a++) {
-        if ((*a)->x() < L) L = (*a)->x();
-	if (((*a)->x() + (*a)->w()) > R) R = (*a)->x() + (*a)->w();
-        if ((*a)->y() < T) T = (*a)->y();
-	if (((*a)->y() + (*a)->h()) > B) B = (*a)->y() + (*a)->h();
-      }
-      if (L > X) draw_clip(this, X, Y, L - X, H);
-      if (R < (X + W)) draw_clip(this, R, Y, X + W - R, H);
-      if (T > Y) draw_clip(this, X, Y, W, T - Y);
-      if (B < (Y + H)) draw_clip(this, X, B, W, Y + H - B);
-    }
-    if (d & FL_DAMAGE_CHILD) { // draw damaged children
-      fl_push_clip(X, Y, W, H);
-      Fl_Widget*const* a = array();
-      for (int i=children()-2; i--;) update_child(**a++);
-      fl_pop_clip();
-    }
-  }
-
-  // Calculate where scrollbars should go, and draw them
-  {
-      ScrollInfo si;
-      recalc_scrollbars(si);
-
-      // Now that we know what's needed, make it so.
-      if (si.vneeded && !scrollbar.visible()) {
-	scrollbar.set_visible();
-	d = FL_DAMAGE_ALL;
-      }
-      else if (!si.vneeded && scrollbar.visible()) {
-	scrollbar.clear_visible();
-	draw_clip(this, si.vscroll.x, si.vscroll.y, si.vscroll.w, si.vscroll.h);
-	d = FL_DAMAGE_ALL;
-      }
-      if (si.hneeded && !hscrollbar.visible()) {
-	hscrollbar.set_visible();
-	d = FL_DAMAGE_ALL;
-      }
-      else if (!si.hneeded && hscrollbar.visible()) {
-	hscrollbar.clear_visible();
-	draw_clip(this, si.hscroll.x, si.hscroll.y, si.hscroll.w, si.hscroll.h);
-	d = FL_DAMAGE_ALL;
-      }
-      else if ( hscrollbar.h() != si.scrollsize || scrollbar.w() != si.scrollsize ) {
-         // scrollsize changed
-         d = FL_DAMAGE_ALL;
-      }
-
-      scrollbar.resize(si.vscroll.x, si.vscroll.y, si.vscroll.w, si.vscroll.h);
-      oldy = yposition_ = si.vscroll.pos;	// si.innerchild.y - si.child.t;
-      scrollbar.value(si.vscroll.pos, si.vscroll.size, si.vscroll.first, si.vscroll.total);
-
-      hscrollbar.resize(si.hscroll.x, si.hscroll.y, si.hscroll.w, si.hscroll.h);
-      oldx = xposition_ = si.hscroll.pos;	// si.innerchild.x - si.child.l;
-      hscrollbar.value(si.hscroll.pos, si.hscroll.size, si.hscroll.first, si.hscroll.total);
-  }
-
-  // draw the scrollbars:
-  if (d & FL_DAMAGE_ALL) {
-    draw_child(scrollbar);
-    draw_child(hscrollbar);
-    if (scrollbar.visible() && hscrollbar.visible()) {
-      // fill in the little box in the corner
-      fl_color(color());
-      fl_rectf(scrollbar.x(), hscrollbar.y(), scrollbar.w(), hscrollbar.h());
-    }
-  } else {
-    update_child(scrollbar);
-    update_child(hscrollbar);
-  }
-}
-
-/**
-  Resizes the Fl_Scroll widget and moves its children if necessary.
-
-  The Fl_Scroll widget first resizes itself, and then it moves all its
-  children if (and only if) the Fl_Scroll widget has been moved. The
-  children are moved by the same amount as the Fl_Scroll widget has been
-  moved, hence all children keep their relative positions.
-
-  \note Fl_Scroll::resize() does \b not call Fl_Group::resize(), and
-  child widgets are \b not resized.
-
-  Since children of an Fl_Scroll are not resized, the resizable() widget
-  is ignored (if it is set).
-
-  The scrollbars are moved to their proper positions, as given by
-  Fl_Scroll::scrollbar.align(), and switched on or off as necessary.
-
-  \note Due to current (FLTK 1.3.x) implementation constraints some of this
-  may effectively be postponed until the Fl_Scroll is drawn the next time.
-  This may change in a future release.
-
-  \sa Fl_Group::resizable()
-  \sa Fl_Widget::resize(int,int,int,int)
-*/
-void Fl_Scroll::resize(int X, int Y, int W, int H) {
-  int dx = X-x(), dy = Y-y();
-  int dw = W-w(), dh = H-h();
-  Fl_Widget::resize(X,Y,W,H); // resize _before_ moving children around
-  fix_scrollbar_order();
-  // move all the children:
-  Fl_Widget*const* a = array();
-  for (int i=children()-2; i--;) {
-    Fl_Widget* o = *a++;
-    o->position(o->x()+dx, o->y()+dy);
-  }
-  if (dw==0 && dh==0) {
-    char pad = ( scrollbar.visible() && hscrollbar.visible() );
-    char al = ( (scrollbar.align() & FL_ALIGN_LEFT) != 0 );
-    char at = ( (scrollbar.align() & FL_ALIGN_TOP)  !=0 );
-    scrollbar.position(al?X:X+W-scrollbar.w(), (at&&pad)?Y+hscrollbar.h():Y);
-    hscrollbar.position((al&&pad)?X+scrollbar.w():X, at?Y:Y+H-hscrollbar.h());
-  } else {
-    // FIXME recalculation of scrollbars needs to be moved out of "draw()" (STR #1895)
-    redraw(); // need full recalculation of scrollbars
-  }
-}
-
-/**  Moves the contents of the scroll group to a new position.
-
-  This is like moving the scrollbars of the Fl_Scroll around. For instance:
-  \code
-    Fl_Scroll scroll (10,10,200,200);
-    Fl_Box b1 ( 10, 10,50,50,"b1"); // relative (x,y) = (0,0)
-    Fl_Box b2 ( 60, 60,50,50,"b2"); // relative (x,y) = (50,50)
-    Fl_Box b3 ( 60,110,50,50,"b3"); // relative (x,y) = (50,100)
-    // populate scroll with more children ...
-    scroll.end();
-    scroll.scroll_to(50,100);
-  \endcode
-  will move the logical origin of the internal scroll area to (-50,-100)
-  relative to the origin of the Fl_Scroll (10,10), i.e. Fl_Box b3 will
-  be visible in the top left corner of the scroll area.
-*/
-void Fl_Scroll::scroll_to(int X, int Y) {
-  int dx = xposition_-X;
-  int dy = yposition_-Y;
-  if (!dx && !dy) return;
-  xposition_ = X;
-  yposition_ = Y;
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o == &hscrollbar || o == &scrollbar) continue;
-    o->position(o->x()+dx, o->y()+dy);
-  }
-  if (parent() == (Fl_Group *)window() && Fl::scheme_bg_) damage(FL_DAMAGE_ALL);
-  else damage(FL_DAMAGE_SCROLL);
-}
-
-void Fl_Scroll::hscrollbar_cb(Fl_Widget* o, void*) {
-  Fl_Scroll* s = (Fl_Scroll*)(o->parent());
-  s->scroll_to(int(((Fl_Scrollbar*)o)->value()), s->yposition());
-}
-
-void Fl_Scroll::scrollbar_cb(Fl_Widget* o, void*) {
-  Fl_Scroll* s = (Fl_Scroll*)(o->parent());
-  s->scroll_to(s->xposition(), int(((Fl_Scrollbar*)o)->value()));
-}
-/**
-  Creates a new Fl_Scroll widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code. A kludge has been done so the
-  Fl_Scroll and all of its children can be automatic (local)
-  variables, but you must declare the Fl_Scroll <I>first</I>, so
-  that it is destroyed last.
-*/
-Fl_Scroll::Fl_Scroll(int X,int Y,int W,int H,const char* L)
-  : Fl_Group(X,Y,W,H,L),
-    scrollbar(X+W-Fl::scrollbar_size(),Y,
-              Fl::scrollbar_size(),H-Fl::scrollbar_size()),
-    hscrollbar(X,Y+H-Fl::scrollbar_size(),
-               W-Fl::scrollbar_size(),Fl::scrollbar_size()) {
-  type(BOTH);
-  xposition_ = oldx = 0;
-  yposition_ = oldy = 0;
-  scrollbar_size_ = 0;
-  hscrollbar.type(FL_HORIZONTAL);
-  hscrollbar.callback(hscrollbar_cb);
-  scrollbar.callback(scrollbar_cb);
-}
-
-int Fl_Scroll::handle(int event) {
-  fix_scrollbar_order();
-  return Fl_Group::handle(event);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Scrollbar.cxx
+++ /dev/null
@@ -1,283 +1,0 @@
-//
-// "$Id$"
-//
-// Scroll bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include "flstring.h"
-
-#define INITIALREPEAT .5
-#define REPEAT .05
-
-void Fl_Scrollbar::increment_cb() {
-  char inv = maximum()<minimum();
-  int ls = inv ? -linesize_ : linesize_;
-  int i;
-  switch (pushed_) {
-    case 1: // clicked on arrow left
-      i = -ls;
-      break;
-    default: // clicked on arrow right
-      i =  ls;
-      break;
-    case 5: // clicked into the box next to the slider on the left
-      i = -(int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
-      if (inv) {
-        if (i<-ls) i = -ls;
-      } else {
-        if (i>-ls) i = -ls; // err
-      }
-      break;
-    case 6: // clicked into the box next to the slider on the right
-      i = (int((maximum()-minimum())*slider_size()/(1.0-slider_size())));
-      if (inv) {
-        if (i>ls) i = ls;
-      } else {
-        if (i<ls) i = ls; // err
-      }
-      break;
-  }
-  handle_drag(clamp(value() + i));
-}
-
-void Fl_Scrollbar::timeout_cb(void* v) {
-  Fl_Scrollbar* s = (Fl_Scrollbar*)v;
-  s->increment_cb();
-  Fl::add_timeout(REPEAT, timeout_cb, s);
-}
-
-int Fl_Scrollbar::handle(int event) {
-  // area of scrollbar:
-  int area;
-  int X=x(); int Y=y(); int W=w(); int H=h();
-
-  // adjust slider area to be inside the arrow buttons:
-  if (horizontal()) {
-    if (W >= 3*H) {X += H; W -= 2*H;}
-  } else {
-    if (H >= 3*W) {Y += W; H -= 2*W;}
-  }
-
-  // which widget part is highlighted?
-  int relx;
-  int ww;
-  if (horizontal()) {
-    relx = Fl::event_x()-X;
-    ww = W;
-  } else {
-    relx = Fl::event_y()-Y;
-    ww = H;
-  }
-  if (relx < 0) area = 1;
-  else if (relx >= ww) area = 2;
-  else {
-    int S = int(slider_size()*ww+.5);
-    int T = (horizontal() ? H : W)/2+1;
-    if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-    if (S < T) S = T;
-    double val =
-      (maximum()-minimum()) ? (value()-minimum())/(maximum()-minimum()) : 0.5;
-    int sliderx;
-    if (val >= 1.0) sliderx = ww-S;
-    else if (val <= 0.0) sliderx = 0;
-    else sliderx = int(val*(ww-S)+.5);
-    if (Fl::event_button() == FL_MIDDLE_MOUSE) area = 8;
-    else if (relx < sliderx) area = 5;
-    else if (relx >= sliderx+S) area = 6;
-    else area = 8;
-  }
-
-  switch (event) {
-  case FL_ENTER:
-  case FL_LEAVE:
-    return 1;
-  case FL_RELEASE:
-      damage(FL_DAMAGE_ALL);
-    if (pushed_) {
-      Fl::remove_timeout(timeout_cb, this);
-      pushed_ = 0;
-    }
-    handle_release();
-    return 1;
-  case FL_PUSH:
-    if (pushed_) return 1;
-    if (area != 8) pushed_ = area;
-    if (pushed_) {
-      handle_push();
-      Fl::add_timeout(INITIALREPEAT, timeout_cb, this);
-      increment_cb();
-      damage(FL_DAMAGE_ALL);
-      return 1;
-    }
-    return Fl_Slider::handle(event, X,Y,W,H);
-  case FL_DRAG:
-    if (pushed_) return 1;
-    return Fl_Slider::handle(event, X,Y,W,H);
-  case FL_MOUSEWHEEL :
-    if (horizontal()) {
-      if (Fl::e_dx==0) return 0;
-      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-      handle_drag(clamp(value() + ls * Fl::e_dx));
-      return 1;
-    } else {
-      if (Fl::e_dy==0) return 0;
-      int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-      handle_drag(clamp(value() + ls * Fl::e_dy));
-      return 1;
-    }
-  case FL_SHORTCUT:
-  case FL_KEYBOARD: {
-    int v = value();
-    int ls = maximum()>=minimum() ? linesize_ : -linesize_;
-    if (horizontal()) {
-      switch (Fl::event_key()) {
-      case FL_Left:
-	v -= ls;
-	break;
-      case FL_Right:
-	v += ls;
-	break;
-      default:
-	return 0;
-      }
-    } else { // vertical
-      switch (Fl::event_key()) {
-      case FL_Up:
-	v -= ls;
-	break;
-      case FL_Down:
-	v += ls;
-	break;
-      case FL_Page_Up:
-	if (slider_size() >= 1.0) return 0;
-	v -= int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
-	v += ls;
-	break;
-      case FL_Page_Down:
-	if (slider_size() >= 1.0) return 0;
-	v += int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
-	v -= ls;
-	break;
-      case FL_Home:
-	v = int(minimum());
-	break;
-      case FL_End:
-	v = int(maximum());
-	break;
-      default:
-	return 0;
-      }
-    }
-    v = int(clamp(v));
-    if (v != value()) {
-      Fl_Slider::value(v);
-      value_damage();
-      set_changed();
-      do_callback();
-    }
-    return 1;}
-  }
-  return 0;
-}
-
-void Fl_Scrollbar::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  int X = x()+Fl::box_dx(box());
-  int Y = y()+Fl::box_dy(box());
-  int W = w()-Fl::box_dw(box());
-  int H = h()-Fl::box_dh(box());
-  if (horizontal()) {
-    if (W < 3*H) {Fl_Slider::draw(X,Y,W,H); return;}
-    Fl_Slider::draw(X+H,Y,W-2*H,H);
-    if (damage()&FL_DAMAGE_ALL) {
-      draw_box((pushed_==1) ? fl_down(slider()) : slider(),
-	       X, Y, H, H, selection_color());
-      draw_box((pushed_==2) ? fl_down(slider()) : slider(),
-	       X+W-H, Y, H, H, selection_color());
-      if (active_r())
-        fl_color(labelcolor());
-      else
-        fl_color(fl_inactive(labelcolor()));
-      int w1 = (H-4)/3; if (w1 < 1) w1 = 1;
-      int x1 = X+(H-w1-1)/2;
-      int yy1 = Y+(H-2*w1-1)/2;
-      if (Fl::is_scheme("gtk+")) {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1);
-	x1 += (W-H);
-	fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1);
-      } else {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
-	x1 += (W-H);
-	fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
-      }
-    }
-  } else { // vertical
-    if (H < 3*W) {Fl_Slider::draw(X,Y,W,H); return;}
-    Fl_Slider::draw(X,Y+W,W,H-2*W);
-    if (damage()&FL_DAMAGE_ALL) {
-      draw_box((pushed_==1) ? fl_down(slider()) : slider(),
-	       X, Y, W, W, selection_color());
-      draw_box((pushed_==2) ? fl_down(slider()) : slider(),
-	       X, Y+H-W, W, W, selection_color());
-      if (active_r())
-        fl_color(labelcolor());
-      else
-        fl_color(fl_inactive(labelcolor()));
-      int w1 = (W-4)/3; if (w1 < 1) w1 = 1;
-      int x1 = X+(W-2*w1-1)/2;
-      int yy1 = Y+(W-w1-1)/2;
-      if (Fl::is_scheme("gtk+")) {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+w1-1, x1+2*w1, yy1+w1, x1+w1, yy1);
-	yy1 += H-W;
-	fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1);
-	fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1);
-      } else {
-	fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1);
-	yy1 += H-W;
-	fl_polygon(x1, yy1, x1+w1, yy1+w1, x1+2*w1, yy1);
-      }
-    }
-  }
-}
-
-/**
-  Creates a new Fl_Scrollbar widget with given position, size, and label.
-  You need to do type(FL_HORIZONTAL) if you want a horizontal scrollbar.
-*/
-Fl_Scrollbar::Fl_Scrollbar(int X, int Y, int W, int H, const char* L)
-  : Fl_Slider(X, Y, W, H, L) {
-  box(FL_FLAT_BOX);
-  color(FL_DARK2);
-  slider(FL_UP_BOX);
-  linesize_ = 16;
-  pushed_ = 0;
-  step(1);
-}
-
-/**  Destroys the Scrollbar. */
-Fl_Scrollbar::~Fl_Scrollbar() {
-  if (pushed_)
-    Fl::remove_timeout(timeout_cb, this);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Shared_Image.cxx
+++ /dev/null
@@ -1,637 +1,0 @@
-//
-// "$Id$"
-//
-// Shared image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-#include <FL/Fl.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_XBM_Image.H>
-#include <FL/Fl_XPM_Image.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/fl_draw.H>
-
-//
-// Global class vars...
-//
-
-Fl_Shared_Image **Fl_Shared_Image::images_ = 0;	// Shared images
-int	Fl_Shared_Image::num_images_ = 0;	// Number of shared images
-int	Fl_Shared_Image::alloc_images_ = 0;	// Allocated shared images
-
-Fl_Shared_Handler *Fl_Shared_Image::handlers_ = 0;// Additional format handlers
-int	Fl_Shared_Image::num_handlers_ = 0;	// Number of format handlers
-int	Fl_Shared_Image::alloc_handlers_ = 0;	// Allocated format handlers
-
-
-//
-// Typedef the C API sort function type the only way I know how...
-//
-
-extern "C" {
-  typedef int (*compare_func_t)(const void *, const void *);
-}
-
-
-/** Returns the Fl_Shared_Image* array */
-Fl_Shared_Image **Fl_Shared_Image::images() {
-  return images_;
-}
-
-
-/** Returns the total number of shared images in the array. */
-int Fl_Shared_Image::num_images() {
-  return num_images_;
-}
-
-
-/**
-  Compares two shared images.
-
-  The order of comparison is:
-
-    -# Image name, usually the filename used to load it
-    -# Image width
-    -# Image height
-
-  A special case is considered if the width of one of the images is zero
-  and the other image is marked \p original. In this case the images match,
-  i.e. the comparison returns success (0).
-
-  An image is marked \p original if it was directly loaded from a file or
-  from memory as opposed to copied and resized images.
-
-  This comparison is used in Fl_Shared_Image::find() to find an image that
-  matches the requested one or to find the position where a new image
-  should be entered into the sorted list of shared images.
-
-  It is usually used in two steps:
-
-    -# search with exact width and height
-    -# if not found, search again with width = 0 (and height = 0)
-
-  The first step will only return a match if the image exists with the
-  same width and height. The second step will match if there is an image
-  marked \p original with the same name, regardless of width and height.
-
-  \returns	Whether the images match or their relative sort order (see text).
-
-  \retval	0	the images match
-  \retval	<0	Image \p i0 is \e less than image \p i1
-  \retval	>0	Image \p i0 is \e greater than image \p i1
-*/
-int
-Fl_Shared_Image::compare(Fl_Shared_Image **i0,		// I - First image
-                         Fl_Shared_Image **i1) {	// I - Second image
-  int i = strcmp((*i0)->name(), (*i1)->name());
-
-  if (i) return i;
-  else if (((*i0)->w() == 0 && (*i1)->original_) ||
-           ((*i1)->w() == 0 && (*i0)->original_)) return 0;
-  else if ((*i0)->w() != (*i1)->w()) return (*i0)->w() - (*i1)->w();
-  else return (*i0)->h() - (*i1)->h();
-}
-
-
-/**
-  Creates an empty shared image.
-  The constructors create a new shared image record in the image cache.
-
-  The constructors are protected and cannot be used directly
-  from a program. Use the get() method instead.
-*/
-Fl_Shared_Image::Fl_Shared_Image() : Fl_Image(0,0,0) {
-  name_        = 0;
-  refcount_    = 1;
-  original_    = 0;
-  image_       = 0;
-  alloc_image_ = 0;
-#if FLTK_ABI_VERSION >= 10304
-  scaled_image_= 0;
-#endif
-}
-
-
-/**
-  Creates a shared image from its filename and its corresponding Fl_Image* img.
-  The constructors create a new shared image record in the image cache.
-
-  The constructors are protected and cannot be used directly
-  from a program. Use the get() method instead.
-*/
-Fl_Shared_Image::Fl_Shared_Image(const char *n,		// I - Filename
-                                 Fl_Image   *img)	// I - Image
-  : Fl_Image(0,0,0) {
-  name_ = new char[strlen(n) + 1];
-  strcpy((char *)name_, n);
-
-  refcount_    = 1;
-  image_       = img;
-  alloc_image_ = !img;
-  original_    = 1;
-#if FLTK_ABI_VERSION >= 10304
-  scaled_image_= 0;
-#endif
-
-  if (!img) reload();
-  else update();
-}
-
-
-/**
-  Adds a shared image to the image cache.
-
-  This \b protected method adds an image to the cache, an ordered list
-  of shared images. The cache is searched for a matching image whenever
-  one is requested, for instance with Fl_Shared_Image::get() or
-  Fl_Shared_Image::find().
-*/
-void
-Fl_Shared_Image::add() {
-  Fl_Shared_Image	**temp;		// New image pointer array...
-
-  if (num_images_ >= alloc_images_) {
-    // Allocate more memory...
-    temp = new Fl_Shared_Image *[alloc_images_ + 32];
-
-    if (alloc_images_) {
-      memcpy(temp, images_, alloc_images_ * sizeof(Fl_Shared_Image *));
-
-      delete[] images_;
-    }
-
-    images_       = temp;
-    alloc_images_ += 32;
-  }
-
-  images_[num_images_] = this;
-  num_images_ ++;
-
-  if (num_images_ > 1) {
-    qsort(images_, num_images_, sizeof(Fl_Shared_Image *),
-          (compare_func_t)compare);
-  }
-}
-
-
-//
-// 'Fl_Shared_Image::update()' - Update the dimensions of the shared images.
-//
-
-void
-Fl_Shared_Image::update() {
-  if (image_) {
-    w(image_->w());
-    h(image_->h());
-    d(image_->d());
-    data(image_->data(), image_->count());
-  }
-}
-
-/**
-  The destructor frees all memory and server resources that are
-  used by the image.
-
-  The destructor is protected and cannot be used directly from a program.
-  Use the Fl_Shared_Image::release() method instead.
-*/
-Fl_Shared_Image::~Fl_Shared_Image() {
-  if (name_) delete[] (char *)name_;
-  if (alloc_image_) delete image_;
-#if FLTK_ABI_VERSION >= 10304
-  delete scaled_image_;
-#endif
-}
-
-
-/**
-  Releases and possibly destroys (if refcount <= 0) a shared image.
-
-  In the latter case, it will reorganize the shared image array
-  so that no hole will occur.
-*/
-void Fl_Shared_Image::release() {
-  int	i;	// Looping var...
-
-  refcount_ --;
-  if (refcount_ > 0) return;
-
-  for (i = 0; i < num_images_; i ++)
-    if (images_[i] == this) {
-      num_images_ --;
-
-      if (i < num_images_) {
-        memmove(images_ + i, images_ + i + 1,
-               (num_images_ - i) * sizeof(Fl_Shared_Image *));
-      }
-
-      break;
-    }
-
-  delete this;
-
-  if (num_images_ == 0 && images_) {
-    delete[] images_;
-
-    images_       = 0;
-    alloc_images_ = 0;
-  }
-}
-
-
-/** Reloads the shared image from disk. */
-void Fl_Shared_Image::reload() {
-  // Load image from disk...
-  int		i;		// Looping var
-  FILE		*fp;		// File pointer
-  uchar		header[64];	// Buffer for auto-detecting files
-  Fl_Image	*img;		// New image
-
-  if (!name_) return;
-
-  if ((fp = fl_fopen(name_, "rb")) != NULL) {
-    if (fread(header, 1, sizeof(header), fp)==0) { /* ignore */ }
-    fclose(fp);
-  } else {
-    return;
-  }
-
-  // Load the image as appropriate...
-  if (memcmp(header, "#define", 7) == 0) // XBM file
-    img = new Fl_XBM_Image(name_);
-  else if (memcmp(header, "/* XPM */", 9) == 0) // XPM file
-    img = new Fl_XPM_Image(name_);
-  else {
-    // Not a standard format; try an image handler...
-    for (i = 0, img = 0; i < num_handlers_; i ++) {
-      img = (handlers_[i])(name_, header, sizeof(header));
-
-      if (img) break;
-    }
-  }
-
-  if (img) {
-    if (alloc_image_) delete image_;
-
-    alloc_image_ = 1;
-
-    if ((img->w() != w() && w()) || (img->h() != h() && h())) {
-      // Make sure the reloaded image is the same size as the existing one.
-      Fl_Image *temp = img->copy(w(), h());
-      delete img;
-      image_ = temp;
-    } else {
-      image_ = img;
-    }
-
-    update();
-  }
-}
-
-
-//
-// 'Fl_Shared_Image::copy()' - Copy and resize a shared image...
-//
-// Note: intentionally no doxygen docs here.
-// For doxygen docs see Fl_Image::copy().
-
-Fl_Image *
-Fl_Shared_Image::copy(int W, int H) {
-  Fl_Image		*temp_image;	// New image file
-  Fl_Shared_Image	*temp_shared;	// New shared image
-
-  // Make a copy of the image we're sharing...
-  if (!image_) temp_image = 0;
-  else temp_image = image_->copy(W, H);
-
-  // Then make a new shared image...
-  temp_shared = new Fl_Shared_Image();
-
-  temp_shared->name_ = new char[strlen(name_) + 1];
-  strcpy((char *)temp_shared->name_, name_);
-
-  temp_shared->refcount_    = 1;
-  temp_shared->image_       = temp_image;
-  temp_shared->alloc_image_ = 1;
-
-  temp_shared->update();
-
-  return temp_shared;
-}
-
-
-//
-// 'Fl_Shared_Image::color_average()' - Blend colors...
-//
-
-void
-Fl_Shared_Image::color_average(Fl_Color c,	// I - Color to blend with
-                               float    i) {	// I - Blend fraction
-  if (!image_) return;
-
-  image_->color_average(c, i);
-  update();
-}
-
-
-//
-// 'Fl_Shared_Image::desaturate()' - Convert the image to grayscale...
-//
-
-void
-Fl_Shared_Image::desaturate() {
-  if (!image_) return;
-
-  image_->desaturate();
-  update();
-}
-
-
-//
-// 'Fl_Shared_Image::draw()' - Draw a shared image...
-//
-void Fl_Shared_Image::draw(int X, int Y, int W, int H, int cx, int cy) {
-#if FLTK_ABI_VERSION >= 10304
-  if (!image_) {
-    Fl_Image::draw(X, Y, W, H, cx, cy);
-    return;
-  }
-  if (w() == image_->w() && h() == image_->h()) {
-    image_->draw(X, Y, W, H, cx, cy);
-    return;
-  }
-  fl_push_clip(X, Y, W, H);
-  int done = 0;
-  // don't call Fl_Graphics_Driver::draw_scaled(Fl_Image*,...) for an enlarged Fl_Bitmap or Fl_Pixmap
-  if ((d() != 0 && count() < 2) || (w() <= image_->w() && h() <= image_->h())) {
-    done = fl_graphics_driver->draw_scaled(image_, X-cx, Y-cy, w(), h());
-  }
-  if (!done) {
-    if (scaled_image_ && (scaled_image_->w() != w() || scaled_image_->h() != h())) {
-      delete scaled_image_;
-      scaled_image_ = NULL;
-    }
-    if (!scaled_image_) {
-      Fl_RGB_Scaling previous = RGB_scaling();
-      RGB_scaling(scaling_algorithm_); // useless but no harm if image_ is not an Fl_RGB_Image
-      scaled_image_ = image_->copy(w(), h());
-      RGB_scaling(previous);
-    }
-    scaled_image_->draw(X-cx, Y-cy, scaled_image_->w(), scaled_image_->h(), 0, 0);
-  }
-  fl_pop_clip();
-#else
-  if (image_) image_->draw(X, Y, W, H, cx, cy);
-  else Fl_Image::draw(X, Y, W, H, cx, cy);
-#endif // FLTK_ABI_VERSION
-}
-
-/** Sets the drawing size of the shared image.
- This function gives the shared image its own size, independently from the size of the original image
- that is typically larger.
- This can be useful to draw a shared image on a drawing surface whose resolution is higher
- than the drawing unit for this surface: all pixels of the original image become available to fill
- an area of the drawing surface sized at <tt>width,height</tt>.
- Examples of such drawing surfaces: laser printers, PostScript files, PDF printers, retina displays on Apple hardware.
-
- \param width,height   maximum width and height (in drawing units) to use when drawing the shared image
- \param proportional   if not null, keep the width and height of the shared image proportional to those of its original image
- \param can_expand  if null, the width and height of the shared image will not exceed those of the original image
-
- \version 1.3.4 and requires compiling with FLTK_ABI_VERSION = 10304
-
- Example code: scale an image to fit in a box
- \code
- Fl_Box *b = ...  // a box
- Fl_Shared_Image *shared = Fl_Shared_Image::get("/path/to/picture.jpeg"); // read a picture file
- shared->scale(b->w(), b->h(), 1); // set the drawing size of the shared image to the size of the box
- b->image(shared); // use the shared image as the box image
- b->align(FL_ALIGN_INSIDE | FL_ALIGN_CENTER | FL_ALIGN_CLIP); // the image is to be drawn centered in the box
- \endcode
- */
-void Fl_Shared_Image::scale(int width, int height, int proportional, int can_expand)
-{
-#if FLTK_ABI_VERSION >= 10304
-  w(width);
-  h(height);
-  if (!image_) return;
-  float fw = image_->w() / float(width);
-  float fh = image_->h() / float(height);
-  if (proportional) {
-    if (fh > fw) fw = fh;
-    else fh = fw;
-  }
-  if (!can_expand) {
-    if (fw < 1) fw = 1;
-    if (fh < 1) fh = 1;
-  }
-  w(int(image_->w() / fw));
-  h(int(image_->h() / fh));
-#endif
-}
-
-
-Fl_RGB_Scaling Fl_Shared_Image::scaling_algorithm_ = FL_RGB_SCALING_BILINEAR;
-
-
-//
-// 'Fl_Shared_Image::uncache()' - Uncache the shared image...
-//
-
-void Fl_Shared_Image::uncache()
-{
-  if (image_) image_->uncache();
-}
-
-
-
-/** Finds a shared image from its name and size specifications.
-
-  This uses a binary search in the image cache.
-
-  If the image \p name exists with the exact width \p W and height \p H,
-  then it is returned.
-
-  If \p W == 0 and the image \p name exists with another size, then the
-  \b original image with that \p name is returned.
-
-  In either case the refcount of the returned image is increased.
-  The found image should be released with Fl_Shared_Image::release()
-  when no longer needed.
-*/
-Fl_Shared_Image* Fl_Shared_Image::find(const char *name, int W, int H) {
-  Fl_Shared_Image	*key,		// Image key
-			**match;	// Matching image
-
-  if (num_images_) {
-    key = new Fl_Shared_Image();
-    key->name_ = new char[strlen(name) + 1];
-    strcpy((char *)key->name_, name);
-    key->w(W);
-    key->h(H);
-
-    match = (Fl_Shared_Image **)bsearch(&key, images_, num_images_,
-                                        sizeof(Fl_Shared_Image *),
-                                        (compare_func_t)compare);
-
-    delete key;
-
-    if (match) {
-      (*match)->refcount_ ++;
-      return *match;
-    }
-  }
-
-  return 0;
-}
-
-
-/**
-  Find or load an image that can be shared by multiple widgets.
-
-  If the image exists with the requested size, this image will be returned.
-
-  If the image exists, but only with another size, then a new copy with the
-  requested size (width \p W and height \p H) will be created as a resized
-  copy of the original image. The new image is added to the internal list
-  of shared images.
-
-  If the image does not yet exist, then a new image of the proper
-  dimension is created from the filename \p name. The original image
-  from filename \p name is always added to the list of shared images in
-  its original size. If the requested size differs, then the resized
-  copy with width \p W and height \p H is also added to the list of
-  shared images.
-
-  \note	If the sizes differ, then \e two images are created as mentioned above.
-	This is intentional so the original image is cached and preserved.
-	If you request the same image with another size later, then the
-	\b original image will be found, copied, resized, and returned.
-
-  Shared JPEG and PNG images can also be created from memory by using their
-  named memory access constructor.
-
-  You should release() the image when you're done with it.
-
-  \param name name of the image
-  \param W, H desired size
-
-  \see Fl_Shared_Image::find(const char *name, int W, int H)
-  \see Fl_Shared_Image::release()
-  \see Fl_JPEG_Image::Fl_JPEG_Image(const char *name, const unsigned char *data)
-  \see Fl_PNG_Image::Fl_PNG_Image (const char *name_png, const unsigned char *buffer, int maxsize)
-*/
-Fl_Shared_Image* Fl_Shared_Image::get(const char *name, int W, int H) {
-  Fl_Shared_Image	*temp;		// Image
-
-  if ((temp = find(name, W, H)) != NULL) return temp;
-
-  if ((temp = find(name)) == NULL) {
-    temp = new Fl_Shared_Image(name);
-
-    if (!temp->image_) {
-      delete temp;
-      return NULL;
-    }
-
-    temp->add();
-  }
-
-  if ((temp->w() != W || temp->h() != H) && W && H) {
-    temp = (Fl_Shared_Image *)temp->copy(W, H);
-    temp->add();
-  }
-
-  return temp;
-}
-
-/** Builds a shared image from a pre-existing Fl_RGB_Image.
-
- \param[in] rgb		an Fl_RGB_Image used to build a new shared image.
- \param[in] own_it	1 if the shared image should delete \p rgb when
-			it is itself deleted, 0 otherwise
-
- \version 1.3.4
-*/
-Fl_Shared_Image *Fl_Shared_Image::get(Fl_RGB_Image *rgb, int own_it)
-{
-  Fl_Shared_Image *shared = new Fl_Shared_Image(Fl_Preferences::newUUID(), rgb);
-  shared->alloc_image_ = own_it;
-  shared->add();
-  return shared;
-}
-
-
-/** Adds a shared image handler, which is basically a test function
-    for adding new formats.
-*/
-void Fl_Shared_Image::add_handler(Fl_Shared_Handler f) {
-  int			i;		// Looping var...
-  Fl_Shared_Handler	*temp;		// New image handler array...
-
-  // First see if we have already added the handler...
-  for (i = 0; i < num_handlers_; i ++) {
-    if (handlers_[i] == f) return;
-  }
-
-  if (num_handlers_ >= alloc_handlers_) {
-    // Allocate more memory...
-    temp = new Fl_Shared_Handler [alloc_handlers_ + 32];
-
-    if (alloc_handlers_) {
-      memcpy(temp, handlers_, alloc_handlers_ * sizeof(Fl_Shared_Handler));
-
-      delete[] handlers_;
-    }
-
-    handlers_       = temp;
-    alloc_handlers_ += 32;
-  }
-
-  handlers_[num_handlers_] = f;
-  num_handlers_ ++;
-}
-
-
-/** Removes a shared image handler. */
-void Fl_Shared_Image::remove_handler(Fl_Shared_Handler f) {
-  int	i;				// Looping var...
-
-  // First see if the handler has been added...
-  for (i = 0; i < num_handlers_; i ++) {
-    if (handlers_[i] == f) break;
-  }
-
-  if (i >= num_handlers_) return;
-
-  // OK, remove the handler from the array...
-  num_handlers_ --;
-
-  if (i < num_handlers_) {
-    // Shift later handlers down 1...
-    memmove(handlers_ + i, handlers_ + i + 1,
-           (num_handlers_ - i) * sizeof(Fl_Shared_Handler ));
-  }
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Single_Window.cxx
+++ /dev/null
@@ -1,54 +1,0 @@
-//
-// "$Id$"
-//
-// Single-buffered window for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//	A window with a single-buffered context
-//
-//	This is provided for systems where the base class is double
-//	buffered.  You can turn it off using this subclass in case
-//	your display looks better without it.
-
-#include <FL/Fl_Single_Window.H>
-
-
-void Fl_Single_Window::show() 
-{
-  Fl_Window::show();
-}
-
-
-void Fl_Single_Window::flush() 
-{
-  Fl_Window::flush();
-}
-
-
-Fl_Single_Window::Fl_Single_Window(int W, int H, const char *l)
-: Fl_Window(W,H,l) 
-{
-}
-
-
-Fl_Single_Window::Fl_Single_Window(int X, int Y, int W, int H, const char *l)
-: Fl_Window(X,Y,W,H,l) 
-{
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Slider.cxx
+++ /dev/null
@@ -1,402 +1,0 @@
-//
-// "$Id$"
-//
-// Slider widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Fill_Slider.H>
-#include <FL/Fl_Hor_Slider.H>
-#include <FL/Fl_Hor_Fill_Slider.H>
-#include <FL/Fl_Hor_Nice_Slider.H>
-#include <FL/Fl_Nice_Slider.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-#include "flstring.h"
-
-
-void Fl_Slider::_Fl_Slider() {
-  slider_size_ = 0;
-  slider_ = 0; // FL_UP_BOX;
-}
-
-/**
-  Creates a new Fl_Slider widget using the given position,
-  size, and label string. The default boxtype is FL_DOWN_BOX.
-*/
-Fl_Slider::Fl_Slider(int X, int Y, int W, int H, const char* L)
-: Fl_Valuator(X, Y, W, H, L) {
-  box(FL_DOWN_BOX);
-  _Fl_Slider();
-}
-
-/**
-  Creates a new Fl_Slider widget using the given type, position,
-  size, and label string.
-*/
-Fl_Slider::Fl_Slider(uchar t, int X, int Y, int W, int H, const char* L)
-  : Fl_Valuator(X, Y, W, H, L) {
-  type(t);
-  box(t==FL_HOR_NICE_SLIDER || t==FL_VERT_NICE_SLIDER ?
-      FL_FLAT_BOX : FL_DOWN_BOX);
-  _Fl_Slider();
-}
-
-void Fl_Slider::slider_size(double v) {
-  if (v <  0) v = 0;
-  if (v > 1) v = 1;
-  if (slider_size_ != float(v)) {
-    slider_size_ = float(v); 
-    damage(FL_DAMAGE_EXPOSE);
-  }
-}
-
-/** 
-  Sets the minimum (a) and maximum (b) values for the valuator widget. 
-  if at least one of the values is changed, a partial redraw is asked.
-*/
-void Fl_Slider::bounds(double a, double b) {
-  if (minimum() != a || maximum() != b) {
-    Fl_Valuator::bounds(a, b); 
-    damage(FL_DAMAGE_EXPOSE);
-  }
-}
-
-/**
-  Sets the size and position of the sliding knob in the box.
-  \param[in] pos position of first line displayed
-  \param[in] size size of window in lines
-  \param[in] first number of first line
-  \param[in] total total number of lines
-  Returns Fl_Valuator::value(p)
- */
-int Fl_Slider::scrollvalue(int pos, int size, int first, int total) {
-  step(1, 1);
-  if (pos+size > first+total) total = pos+size-first;
-  slider_size(size >= total ? 1.0 : double(size)/double(total));
-  bounds(first, total-size+first);
-  return value(pos);
-}
-
-// All slider interaction is done as though the slider ranges from
-// zero to one, and the left (bottom) edge of the slider is at the
-// given position.  Since when the slider is all the way to the
-// right (top) the left (bottom) edge is not all the way over, a
-// position on the widget itself covers a wider range than 0-1,
-// actually it ranges from 0 to 1/(1-size).
-
-void Fl_Slider::draw_bg(int X, int Y, int W, int H) {
-  fl_push_clip(X, Y, W, H);
-  draw_box();
-  fl_pop_clip();
-
-  Fl_Color black = active_r() ? FL_FOREGROUND_COLOR : FL_INACTIVE_COLOR;
-  if (type() == FL_VERT_NICE_SLIDER) {
-    draw_box(FL_THIN_DOWN_BOX, X+W/2-2, Y, 4, H, black);
-  } else if (type() == FL_HOR_NICE_SLIDER) {
-    draw_box(FL_THIN_DOWN_BOX, X, Y+H/2-2, W, 4, black);
-  }
-}
-
-void Fl_Slider::draw(int X, int Y, int W, int H) {
-
-  double val;
-  if (minimum() == maximum())
-    val = 0.5;
-  else {
-    val = (value()-minimum())/(maximum()-minimum());
-    if (val > 1.0) val = 1.0;
-    else if (val < 0.0) val = 0.0;
-  }
-
-  int ww = (horizontal() ? W : H);
-  int xx, S;
-  if (type()==FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) {
-    S = int(val*ww+.5);
-    if (minimum()>maximum()) {S = ww-S; xx = ww-S;}
-    else xx = 0;
-  } else {
-    S = int(slider_size_*ww+.5);
-    int T = (horizontal() ? H : W)/2+1;
-    if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-    if (S < T) S = T;
-    xx = int(val*(ww-S)+.5);
-  }
-  int xsl, ysl, wsl, hsl;
-  if (horizontal()) {
-    xsl = X+xx;
-    wsl = S;
-    ysl = Y;
-    hsl = H;
-  } else {
-    ysl = Y+xx;
-    hsl = S;
-    xsl = X;
-    wsl = W;
-  }
-
-  draw_bg(X, Y, W, H);
-
-  Fl_Boxtype box1 = slider();
-  if (!box1) {box1 = (Fl_Boxtype)(box()&-2); if (!box1) box1 = FL_UP_BOX;}
-  if (type() == FL_VERT_NICE_SLIDER) {
-    draw_box(box1, xsl, ysl, wsl, hsl, FL_GRAY);
-    int d = (hsl-4)/2;
-    draw_box(FL_THIN_DOWN_BOX, xsl+2, ysl+d, wsl-4, hsl-2*d,selection_color());
-  } else if (type() == FL_HOR_NICE_SLIDER) {
-    draw_box(box1, xsl, ysl, wsl, hsl, FL_GRAY);
-    int d = (wsl-4)/2;
-    draw_box(FL_THIN_DOWN_BOX, xsl+d, ysl+2, wsl-2*d, hsl-4,selection_color());
-  } else {
-    if (wsl>0 && hsl>0) draw_box(box1, xsl, ysl, wsl, hsl, selection_color());
-
-    if (type() != FL_HOR_FILL_SLIDER && type() != FL_VERT_FILL_SLIDER &&
-        Fl::is_scheme("gtk+")) {
-      if (W>H && wsl>(hsl+8)) {
-        // Draw horizontal grippers
-	int yy, hh;
-	hh = hsl-8;
-	xx = xsl+(wsl-hsl-4)/2;
-	yy = ysl+3;
-
-	fl_color(fl_darker(selection_color()));
-	fl_line(xx, yy+hh, xx+hh, yy);
-	fl_line(xx+6, yy+hh, xx+hh+6, yy);
-	fl_line(xx+12, yy+hh, xx+hh+12, yy);
-
-        xx++;
-	fl_color(fl_lighter(selection_color()));
-	fl_line(xx, yy+hh, xx+hh, yy);
-	fl_line(xx+6, yy+hh, xx+hh+6, yy);
-	fl_line(xx+12, yy+hh, xx+hh+12, yy);
-      } else if (H>W && hsl>(wsl+8)) {
-        // Draw vertical grippers
-	int yy;
-	xx = xsl+4;
-	ww = wsl-8;
-	yy = ysl+(hsl-wsl-4)/2;
-
-	fl_color(fl_darker(selection_color()));
-	fl_line(xx, yy+ww, xx+ww, yy);
-	fl_line(xx, yy+ww+6, xx+ww, yy+6);
-	fl_line(xx, yy+ww+12, xx+ww, yy+12);
-
-        yy++;
-	fl_color(fl_lighter(selection_color()));
-	fl_line(xx, yy+ww, xx+ww, yy);
-	fl_line(xx, yy+ww+6, xx+ww, yy+6);
-	fl_line(xx, yy+ww+12, xx+ww, yy+12);
-      }
-    }
-  }
-
-  draw_label(xsl, ysl, wsl, hsl);
-  if (Fl::focus() == this) {
-    if (type() == FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) draw_focus();
-    else draw_focus(box1, xsl, ysl, wsl, hsl);
-  }
-}
-
-void Fl_Slider::draw() {
-  if (damage()&FL_DAMAGE_ALL) draw_box();
-  draw(x()+Fl::box_dx(box()),
-       y()+Fl::box_dy(box()),
-       w()-Fl::box_dw(box()),
-       h()-Fl::box_dh(box()));
-}
-
-int Fl_Slider::handle(int event, int X, int Y, int W, int H) {
-  // Fl_Widget_Tracker wp(this);
-  switch (event) {
-  case FL_PUSH: {
-    Fl_Widget_Tracker wp(this);
-    if (!Fl::event_inside(X, Y, W, H)) return 0;
-    handle_push();
-    if (wp.deleted()) return 1; }
-    // fall through ...
-  case FL_DRAG: {
-
-    double val;
-    if (minimum() == maximum())
-      val = 0.5;
-    else {
-      val = (value()-minimum())/(maximum()-minimum());
-      if (val > 1.0) val = 1.0;
-      else if (val < 0.0) val = 0.0;
-    }
-
-    int ww = (horizontal() ? W : H);
-    int mx = (horizontal() ? Fl::event_x()-X : Fl::event_y()-Y);
-    int S;
-    static int offcenter;
-
-    if (type() == FL_HOR_FILL_SLIDER || type() == FL_VERT_FILL_SLIDER) {
-
-      S = 0;
-      if (event == FL_PUSH) {
-	int xx = int(val*ww+.5);
-	offcenter = mx-xx;
-	if (offcenter < -10 || offcenter > 10) offcenter = 0;
-	else return 1;
-      }
-
-    } else {
-
-      S = int(slider_size_*ww+.5); if (S >= ww) return 0;
-      int T = (horizontal() ? H : W)/2+1;
-      if (type()==FL_VERT_NICE_SLIDER || type()==FL_HOR_NICE_SLIDER) T += 4;
-      if (S < T) S = T;
-      if (event == FL_PUSH) {
-	int xx = int(val*(ww-S)+.5);
-	offcenter = mx-xx;
-	if (offcenter < 0) offcenter = 0;
-	else if (offcenter > S) offcenter = S;
-	else return 1;
-      }
-    }
-
-    int xx = mx-offcenter;
-    double v = 0;
-    char tryAgain = 1;
-    while (tryAgain)
-    {
-      tryAgain = 0;
-      if (xx < 0) {
-        xx = 0;
-        offcenter = mx; if (offcenter < 0) offcenter = 0;
-      } else if (xx > (ww-S)) {
-        xx = ww-S;
-        offcenter = mx-xx; if (offcenter > S) offcenter = S;
-      }
-      v = round(xx*(maximum()-minimum())/(ww-S) + minimum());
-      // make sure a click outside the sliderbar moves it:
-      if (event == FL_PUSH && v == value()) {
-        offcenter = S/2;
-        event = FL_DRAG;
-        tryAgain = 1;
-      }
-    }
-    handle_drag(clamp(v));
-    } return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_KEYBOARD:
-    { Fl_Widget_Tracker wp(this);
-      switch (Fl::event_key()) {
-	case FL_Up:
-	  if (horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),-1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Down:
-	  if (horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Left:
-	  if (!horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),-1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	case FL_Right:
-	  if (!horizontal()) return 0;
-	  handle_push();
-	  if (wp.deleted()) return 1;
-	  handle_drag(clamp(increment(value(),1)));
-	  if (wp.deleted()) return 1;
-	  handle_release();
-	  return 1;
-	default:
-	  return 0;
-      }
-    }
-    // break not required because of switch...
-  case FL_FOCUS :
-  case FL_UNFOCUS :
-    if (Fl::visible_focus()) {
-      redraw();
-      return 1;
-    } else return 0;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-int Fl_Slider::handle(int event) {
-  if (event == FL_PUSH && Fl::visible_focus()) {
-    Fl::focus(this);
-    redraw();
-  }
-
-  return handle(event,
-		x()+Fl::box_dx(box()),
-		y()+Fl::box_dy(box()),
-		w()-Fl::box_dw(box()),
-		h()-Fl::box_dh(box()));
-}
-
-
-Fl_Fill_Slider::Fl_Fill_Slider(int X,int Y,int W,int H,const char *L)
-: Fl_Slider(X,Y,W,H,L) 
-{
-  type(FL_VERT_FILL_SLIDER);
-}
-
-
-Fl_Hor_Slider::Fl_Hor_Slider(int X,int Y,int W,int H,const char *l)
-: Fl_Slider(X,Y,W,H,l) {
-  type(FL_HOR_SLIDER);
-}
-
-
-Fl_Hor_Fill_Slider::Fl_Hor_Fill_Slider(int X,int Y,int W,int H,const char *L)
-: Fl_Slider(X,Y,W,H,L) 
-{
-  type(FL_HOR_FILL_SLIDER);
-}
-
-
-Fl_Hor_Nice_Slider::Fl_Hor_Nice_Slider(int X,int Y,int W,int H,const char *L)
-: Fl_Slider(X,Y,W,H,L) 
-{
-  type(FL_HOR_NICE_SLIDER); 
-  box(FL_FLAT_BOX);
-}
-
-
-Fl_Nice_Slider::Fl_Nice_Slider(int X,int Y,int W,int H,const char *L)
-: Fl_Slider(X,Y,W,H,L) {
-  type(FL_VERT_NICE_SLIDER); 
-  box(FL_FLAT_BOX);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Sys_Menu_Bar.mm
+++ /dev/null
@@ -1,542 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS system menu bar widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2013 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/*
- * This code has been tested on the "menubar" sample program and provides
- * basic functionality. 
- * 
- * To use the System Menu Bar, simply replace the main Fl_Menu_Bar
- * in an application with Fl_Sys_Menu_Bar.
- *
- * FLTK features not supported by the Mac System menu
- *
- * - no symbolic labels
- * - no embossed labels
- * - no font sizes
- *
- * Many other calls of the parent class don't work.
- */
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-#include <FL/Fl_Menu_Item.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/x.H>
-#include <FL/Fl.H>
-
-#import <Cocoa/Cocoa.h>
-
-#include "flstring.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdarg.h>
-
-typedef const Fl_Menu_Item *pFl_Menu_Item;
-
-Fl_Sys_Menu_Bar *fl_sys_menu_bar = 0;
-static Fl_Menu_Bar *custom_menu;
-
-static char *remove_ampersand(const char *s);
-extern void (*fl_lock_function)();
-extern void (*fl_unlock_function)();
-
-/*  Each MacOS system menu item contains a pointer to a record of type sys_menu_item defined below.
-    The purpose of these records is to associate each MacOS system menu item with a relevant Fl_Menu_Item.
-
-    Note: in the below, 'rank' is similar to an FLTK menu() 'index'.
-    Let's avoid exposing Mac internal terminology like 'rank' to FLTK users; stick with 'index'.
-
-    If use_rank is YES, the "rank" field is used, and fl_sys_menu_bar->menu() + rank is the address 
-    of the relevant Fl_Menu_Item;
-    Otherwise, the "item" field points to the relevant Fl_Menu_Item.
-    This allows the MacOS system menu to use the same Fl_Menu_Item's as those used by FLTK menus, 
-    the address of which can be relocated by the FLTK menu logic.
-    The "item" field is used for non-relocatable Fl_Menu_Item's associated to FL_SUBMENU_POINTER.
-    Sending the getFlItem message to a MacOS system menu item (of class FLMenuItem) returns the address
-    of the relevant Fl_Menu_Item.
-*/
-typedef struct {
-  union {
-    int rank;
-    const Fl_Menu_Item *item;
-  };
-  BOOL use_rank;
-} sys_menu_item;
-
-
-@interface FLMenuItem : NSMenuItem {
-}
-- (const Fl_Menu_Item*) getFlItem;
-- (void) itemCallback:(Fl_Menu_*)menu;
-- (void) doCallback;
-- (void) customCallback;
-- (void) directCallback;
-- (void) setKeyEquivalentModifierMask:(int)value;
-- (void) setFltkShortcut:(int)key;
-+ (int) addNewItem:(const Fl_Menu_Item*)mitem menu:(NSMenu*)menu action:(SEL)selector;
-@end
-
-@implementation FLMenuItem
-- (const Fl_Menu_Item*) getFlItem
-// returns the Fl_Menu_Item corresponding to this system menu item
-{
-  sys_menu_item *smi = (sys_menu_item*)[(NSData*)[self representedObject] bytes];
-  if (smi->use_rank) return fl_sys_menu_bar->menu() + smi->rank;
-  return smi->item;
-}
-- (void) itemCallback:(Fl_Menu_*)menu
-{
-  const Fl_Menu_Item *item = [self getFlItem];
-  menu->picked(item);
-  if ( item->flags & FL_MENU_TOGGLE ) {	// update the menu toggle symbol
-    [self setState:(item->value() ? NSOnState : NSOffState)];
-  }
-  else if ( item->flags & FL_MENU_RADIO ) {	// update the menu radio symbols
-    NSMenu* menu = [self menu];
-    NSInteger flRank = [menu indexOfItem:self];
-    NSInteger last = [menu numberOfItems] - 1;
-    int from = flRank;
-    while(from > 0) {
-      if ([[menu itemAtIndex:from-1] isSeparatorItem]) break;
-      item = [(FLMenuItem*)[menu itemAtIndex:from-1] getFlItem];
-      if ( !(item->flags & FL_MENU_RADIO) ) break;
-      from--;
-    }
-    int to = flRank;
-    while (to < last) {
-      if ([[menu itemAtIndex:to+1] isSeparatorItem]) break;
-      item = [(FLMenuItem*)[menu itemAtIndex:to+1] getFlItem];
-      if (!(item->flags & FL_MENU_RADIO)) break;
-      to++;
-    }
-    for(int i =  from; i <= to; i++) {
-      NSMenuItem *nsitem = [menu itemAtIndex:i];
-      [nsitem setState:(nsitem != self ? NSOffState : NSOnState)];
-    }
-  }
-}
-- (void) doCallback
-{
-  fl_lock_function();
-  [self itemCallback:fl_sys_menu_bar];
-  fl_unlock_function();
-}
-- (void) customCallback
-{
-  fl_lock_function();
-  [self itemCallback:custom_menu];
-  fl_unlock_function();
-}
-- (void) directCallback
-{
-  fl_lock_function();
-  Fl_Menu_Item *item = (Fl_Menu_Item *)[(NSData*)[self representedObject] bytes];
-  if ( item && item->callback() ) item->do_callback(NULL);
-  fl_unlock_function();
-}
-- (void) setKeyEquivalentModifierMask:(int)value
-{
-  NSUInteger macMod = 0;
-  if ( value & FL_META ) macMod = NSCommandKeyMask;
-  if ( value & FL_SHIFT || isupper(value) ) macMod |= NSShiftKeyMask;
-  if ( value & FL_ALT ) macMod |= NSAlternateKeyMask;
-  if ( value & FL_CTRL ) macMod |= NSControlKeyMask;
-  [super setKeyEquivalentModifierMask:macMod];
-}
-- (void) setFltkShortcut:(int)key
-{
-  // Separate key and modifier
-  int mod = key;
-  mod &= ~FL_KEY_MASK;	// modifier(s)
-  key &=  FL_KEY_MASK;	// key
-  unichar mac_key = (unichar)key;
-  if ( (key >= (FL_F+1)) && (key <= FL_F_Last) ) { // Handle function keys
-    int fkey_num = (key - FL_F);	// 1,2..
-    mac_key = NSF1FunctionKey + fkey_num - 1;
-    }
-  [self setKeyEquivalent:[NSString stringWithCharacters:&mac_key length:1]];
-  [self setKeyEquivalentModifierMask:mod];
-}
-+ (int) addNewItem:(const Fl_Menu_Item*)mitem menu:(NSMenu*)menu action:(SEL)selector
-{
-  char *name = remove_ampersand(mitem->label());
-  NSString *title = NSLocalizedString([NSString stringWithUTF8String:name], nil);
-  free(name);
-  FLMenuItem *item = [[FLMenuItem alloc] initWithTitle:title
-						action:selector
-					 keyEquivalent:@""];
-  sys_menu_item smi;
-  // >= 0 if mitem is in the menu items of fl_sys_menu_bar, -1 if not
-  smi.rank = (fl_sys_menu_bar ? fl_sys_menu_bar->find_index(mitem) : -1);
-  smi.use_rank = (smi.rank >= 0);
-  if (!smi.use_rank) smi.item = mitem;
-  NSData *pointer = [NSData dataWithBytes:&smi length:sizeof(smi)];
-  [item setRepresentedObject:pointer];
-  [menu addItem:item];
-  [item setTarget:item];
-  int retval = [menu indexOfItem:item];
-  [item release];
-  return retval;
-}
-@end
-
- 
-void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut) 
-{
-  fl_open_display();
-  Fl_Menu_Item aboutItem;
-  memset(&aboutItem, 0, sizeof(Fl_Menu_Item));
-  aboutItem.callback(cb);
-  aboutItem.user_data(user_data);
-  aboutItem.shortcut(shortcut);
-  NSMenu *appleMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
-  CFStringRef cfname = CFStringCreateCopy(NULL, (CFStringRef)[[appleMenu itemAtIndex:0] title]);
-  [appleMenu removeItemAtIndex:0];
-  FLMenuItem *item = [[[FLMenuItem alloc] initWithTitle:(NSString*)cfname 
-						 action:@selector(directCallback)
-					  keyEquivalent:@""] autorelease];
-  if (aboutItem.shortcut())
-    [item setFltkShortcut:aboutItem.shortcut()];
-  NSData *pointer = [NSData dataWithBytes:&aboutItem length:sizeof(Fl_Menu_Item)];
-  [item setRepresentedObject:pointer];
-  [appleMenu insertItem:item atIndex:0];
-  CFRelease(cfname);
-  [item setTarget:item];
-}
-
-/*
- * Set a shortcut for an Apple menu item using the FLTK shortcut descriptor.
- */
-static void setMenuShortcut( NSMenu* mh, int miCnt, const Fl_Menu_Item *m )
-{
-  if ( !m->shortcut_ ) 
-    return;
-  if ( m->flags & FL_SUBMENU )
-    return;
-  if ( m->flags & FL_SUBMENU_POINTER )
-    return;
-  FLMenuItem* menuItem = (FLMenuItem*)[mh itemAtIndex:miCnt];
-  [menuItem setFltkShortcut:(m->shortcut_)];
-}
-
-
-/*
- * Set the Toggle and Radio flag based on FLTK flags
- */
-static void setMenuFlags( NSMenu* mh, int miCnt, const Fl_Menu_Item *m )
-{
-  if ( m->flags & FL_MENU_TOGGLE )
-  {
-    NSMenuItem *menuItem = [mh itemAtIndex:miCnt];
-    [menuItem setState:(m->flags & FL_MENU_VALUE ? NSOnState : NSOffState)];
-  }
-  else if ( m->flags & FL_MENU_RADIO ) {
-    NSMenuItem *menuItem = [mh itemAtIndex:miCnt];
-    [menuItem setState:(m->flags & FL_MENU_VALUE ? NSOnState : NSOffState)];
-  }
-}
-
-static char *remove_ampersand(const char *s)
-{
-  char *ret = strdup(s);
-  const char *p = s;
-  char *q = ret;
-  while(*p != 0) {
-    if (p[0]=='&') {
-      if (p[1]=='&') {
-        *q++ = '&'; p+=2;
-      } else {
-        p++;
-      }
-    } else {
-      *q++ = *p++;
-    }
-  }
-  *q = 0;
-  return ret;
-}
-
-
-/*
- * create a sub menu for a specific menu handle
- */
-static void createSubMenu( NSMenu *mh, pFl_Menu_Item &mm,  const Fl_Menu_Item *mitem, SEL selector)
-{
-  NSMenu *submenu;
-  int miCnt, flags;
-  
-  if (mitem) {
-    NSMenuItem *menuItem;
-    char *ts = remove_ampersand(mitem->text);
-    NSString *title = NSLocalizedString([NSString stringWithUTF8String:ts], nil);
-    free(ts);
-    submenu = [[NSMenu alloc] initWithTitle:(NSString*)title];
-    [submenu setAutoenablesItems:NO];
-    
-    int cnt;
-    cnt = [mh numberOfItems];
-    cnt--;
-    menuItem = [mh itemAtIndex:cnt];
-    [menuItem setSubmenu:submenu];
-    [submenu release];
-  } else submenu = mh;
-  
-  while ( mm->text ) {
-    if (!mm->visible() ) { // skip invisible items and submenus
-      mm = mm->next(0);
-      continue;
-    }
-    miCnt = [FLMenuItem addNewItem:mm menu:submenu action:selector];
-    setMenuFlags( submenu, miCnt, mm );
-    setMenuShortcut( submenu, miCnt, mm );
-    if (mitem && (mm->flags & FL_MENU_INACTIVE || mitem->flags & FL_MENU_INACTIVE)) {
-      NSMenuItem *item = [submenu itemAtIndex:miCnt];
-      [item setEnabled:NO];
-    }
-    flags = mm->flags;
-    if ( mm->flags & FL_SUBMENU )
-    {
-      mm++;
-      createSubMenu( submenu, mm, mm - 1, selector);
-    }
-    else if ( mm->flags & FL_SUBMENU_POINTER )
-    {
-      const Fl_Menu_Item *smm = (Fl_Menu_Item*)mm->user_data_;
-      createSubMenu( submenu, smm, mm, selector);
-    }
-    if ( flags & FL_MENU_DIVIDER ) {
-      [submenu addItem:[NSMenuItem separatorItem]];
-      }
-    mm++;
-  }
-}
- 
-
-/*
- * convert a complete Fl_Menu_Item array into a series of menus in the top menu bar
- * ALL PREVIOUS SYSTEM MENUS, EXCEPT THE APPLICATION MENU, ARE REPLACED BY THE NEW DATA
- */
-static void convertToMenuBar(const Fl_Menu_Item *mm)
-{
-  NSMenu *fl_system_menu = [NSApp mainMenu];
-  int count;//first, delete all existing system menus
-  count = [fl_system_menu numberOfItems];
-  for(int i = count - 1; i > 0; i--) {
-    [fl_system_menu removeItem:[fl_system_menu itemAtIndex:i]];
-  }
-  if (mm) createSubMenu(fl_system_menu, mm, NULL, @selector(doCallback));
-}
-
-
-/**
- * @brief create a system menu bar using the given list of menu structs
- *
- * \author Matthias Melcher
- *
- * @param m list of Fl_Menu_Item
- */
-void Fl_Sys_Menu_Bar::menu(const Fl_Menu_Item *m) 
-{
-  fl_open_display();
-  Fl_Menu_Bar::menu( m );
-  convertToMenuBar(m);
-}
-
-
-/**
- * @brief Add a new menu item to the system menu bar.
- *
- * @param label     - new menu item's label
- * @param shortcut  - new menu item's integer shortcut (can be 0 for none, or e.g. FL_ALT+'x')
- * @param cb        - callback to be invoked when item selected (can be 0 for none, in which case the menubar's callback() can be used instead)
- * @param user_data - argument to the callback
- * @param flags     - item's flags, e.g. ::FL_MENU_TOGGLE, etc.
- *
- * \returns the index into the menu() array, where the entry was added
- *
- * @see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) 
- */
-int Fl_Sys_Menu_Bar::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
-{
-  fl_open_display();
-  int rank = Fl_Menu_::add(label, shortcut, cb, user_data, flags);
-  update();
-  return rank;
-}
-
-/**
- * Forms-compatible procedure to add items to the system menu bar
- *
- * \returns the index into the menu() array, where the entry was added
- * @see Fl_Menu_::add(const char* str) 
- */
-int Fl_Sys_Menu_Bar::add(const char* str)
-{
-  fl_open_display();
-  int rank = Fl_Menu_::add(str);
-  update();
-  return rank;
-}
-
-/**
- * @brief insert in the system menu bar a new menu item
- *
- * Insert in the system menu bar a new menu item, with a title string, shortcut int,
- * callback, argument to the callback, and flags.
- *
- * \returns the index into the menu() array, where the entry was inserted
- * @see Fl_Menu_::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) 
- */
-int Fl_Sys_Menu_Bar::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
-{
-  fl_open_display();
-  int rank = Fl_Menu_::insert(index, label, shortcut, cb, user_data, flags);
-  update();
-  return rank;
-}
-
-void Fl_Sys_Menu_Bar::clear()
-{
-  Fl_Menu_::clear();
-  convertToMenuBar(NULL);
-}
-
-int Fl_Sys_Menu_Bar::clear_submenu(int index)
-{
-  int retval = Fl_Menu_::clear_submenu(index);
-  if (retval != -1) update();
-  return retval;
-}
-
-/**
- * @brief remove an item from the system menu bar
- *
- * @param index		the index of the item to remove
- */
-void Fl_Sys_Menu_Bar::remove(int index)
-{
-  Fl_Menu_::remove(index);
-  update();
-}
-
-
-/**
- * @brief rename an item from the system menu bar
- *
- * @param index		the index of the item to rename
- * @param name		the new item name as a UTF8 string
- */
-void Fl_Sys_Menu_Bar::replace(int index, const char *name)
-{
-  Fl_Menu_::replace(index, name);	// index
-  update();
-}
-
-/** Updates the system menu after any change to its items.
- */
-void Fl_Sys_Menu_Bar::update()
-{
-  convertToMenuBar(Fl_Menu_::menu());
-}
-
-/*
- * Draw the menu bar. 
- * Nothing here because the OS does this for us.
- */
-void Fl_Sys_Menu_Bar::draw() {
-}
-
-static int process_sys_menu_shortcuts(int event)
-{
-  if (event != FL_SHORTCUT || !fl_sys_menu_bar || Fl::modal()) return 0;
-  // is the last event the shortcut of an item of the fl_sys_menu_bar menu ?
-  const Fl_Menu_Item *item = fl_sys_menu_bar->menu()->test_shortcut();
-  if (!item) return 0;
-  if (item->visible()) // have the system menu process the shortcut, highlighting the corresponding menu
-    [[NSApp mainMenu] performKeyEquivalent:[NSApp currentEvent]];
-  else // have FLTK process the shortcut associated to an invisible Fl_Menu_Item
-    fl_sys_menu_bar->picked(item);
-  return 1;
-}
-
-
-/**
- The constructor.
- On Mac OS X, all arguments are unused. On other platforms they are used as by Fl_Menu_Bar::Fl_Menu_Bar().
- */
-Fl_Sys_Menu_Bar::Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l)
-: Fl_Menu_Bar(x,y,w,h,l) 
-{
-  deactivate();			// don't let the old area take events
-  if (fl_sys_menu_bar) delete fl_sys_menu_bar;
-  fl_sys_menu_bar = this;
-  Fl::add_handler(process_sys_menu_shortcuts);
-}
-
-/** The destructor */
-Fl_Sys_Menu_Bar::~Fl_Sys_Menu_Bar()
-{
-  fl_sys_menu_bar = 0;
-  clear();
-  Fl::remove_handler(process_sys_menu_shortcuts);
-}
-
-/** \class Fl_Mac_App_Menu
- Mac OS-specific class allowing to customize and localize the application menu.
- 
- The public class attributes are used to build the application menu. They can be localized
- at run time to any UTF-8 text by placing instructions such as this before fl_open_display()
- gets called:
- \verbatim
- Fl_Mac_App_Menu::print = "Imprimer la fenêtre";
- \endverbatim
- \see \ref osissues_macos for another way to localization.
- */
-
-
-/** Adds custom menu item(s) to the application menu of the system menu bar.
- They are positioned after the "Print Front Window" item, or at its place
- if it was removed with <tt>Fl_Mac_App_Menu::print = ""</tt>.
- \param m zero-ending array of Fl_Menu_Item 's.
- */
-void Fl_Mac_App_Menu::custom_application_menu_items(const Fl_Menu_Item *m)
-{
-  fl_open_display(); // create the system menu, if needed
-  custom_menu = new Fl_Menu_Bar(0,0,0,0);
-  custom_menu->menu(m);
-  NSMenu *menu = [[[NSApp mainMenu] itemAtIndex:0] submenu]; // the application menu
-  NSInteger to_rank;
-  if ([[menu itemAtIndex:2] action] != @selector(printPanel)) { // the 'Print' item was removed
-    [menu insertItem:[NSMenuItem separatorItem] atIndex:1];
-    to_rank = 2;
-  } else to_rank = 3; // after the "Print Front Window" item
-  NSInteger count = [menu numberOfItems];
-  createSubMenu(menu, m, NULL, @selector(customCallback)); // add new items at end of application menu
-  NSInteger count2 = [menu numberOfItems];
-  for (NSInteger i = count; i < count2; i++) { // move new items to their desired position in application menu
-    NSMenuItem *item = [menu itemAtIndex:i];
-    [item retain];
-    [menu removeItemAtIndex:i];
-    [menu insertItem:item atIndex:to_rank++];
-    [item release];
-  }
-}
-#endif /* __APPLE__ */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Table.cxx
+++ /dev/null
@@ -1,1318 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Table -- A table widget
-//
-// Copyright 2002 by Greg Ercolano.
-// Copyright (c) 2004 O'ksi'D
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>		// fprintf
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table.H>
-
-#if defined(USE_UTF8) && ( defined(MICROSOFT) || defined(LINUX) )
-#include <FL/fl_utf8.H>	// currently only Windows and Linux
-#endif
-
-// Scroll display so 'row' is at top
-void Fl_Table::row_position(int row) {
-  if ( _row_position == row ) return;		// OPTIMIZATION: no change? avoid redraw
-  if ( row < 0 ) row = 0;
-  else if ( row >= rows() ) row = rows() - 1;
-  if ( table_h <= tih ) return;			// don't scroll if table smaller than window
-  double newtop = row_scroll_position(row);
-  if ( newtop > vscrollbar->maximum() ) {
-    newtop = vscrollbar->maximum();
-  }
-  vscrollbar->Fl_Slider::value(newtop);
-  table_scrolled();
-  redraw();
-  _row_position = row;	// HACK: override what table_scrolled() came up with
-}
-
-// Scroll display so 'col' is at left
-void Fl_Table::col_position(int col) {
-  if ( _col_position == col ) return;	// OPTIMIZATION: no change? avoid redraw
-  if ( col < 0 ) col = 0;
-  else if ( col >= cols() ) col = cols() - 1;
-  if ( table_w <= tiw ) return;		// don't scroll if table smaller than window
-  double newleft = col_scroll_position(col);
-  if ( newleft > hscrollbar->maximum() ) {
-    newleft = hscrollbar->maximum();
-  }
-  hscrollbar->Fl_Slider::value(newleft);
-  table_scrolled();
-  redraw();
-  _col_position = col;	// HACK: override what table_scrolled() came up with
-}
-
-// Find scroll position of a row (in pixels)
-long Fl_Table::row_scroll_position(int row) {
-  int startrow = 0;
-  long scroll = 0; 
-  // OPTIMIZATION: 
-  //     Attempt to use precomputed row scroll position
-  //
-  if ( toprow_scrollpos != -1 && row >= toprow ) {
-    scroll = toprow_scrollpos;
-    startrow = toprow;
-  }
-  for ( int t=startrow; t<row; t++ ) {
-    scroll += row_height(t);
-  }
-  return(scroll);
-}
-
-// Find scroll position of a column (in pixels)
-long Fl_Table::col_scroll_position(int col) {
-  int startcol = 0;
-  long scroll = 0;
-  // OPTIMIZATION: 
-  //     Attempt to use precomputed row scroll position
-  //
-  if ( leftcol_scrollpos != -1 && col >= leftcol ) {
-    scroll = leftcol_scrollpos;
-    startcol = leftcol;
-  }
-  for ( int t=startcol; t<col; t++ ) {
-    scroll += col_width(t);
-  }
-  return(scroll);
-}
-
-// Ctor
-Fl_Table::Fl_Table(int X, int Y, int W, int H, const char *l) : Fl_Group(X,Y,W,H,l) {
-  _rows             = 0;
-  _cols             = 0;
-  _row_header_w     = 40;
-  _col_header_h     = 18;
-  _row_header       = 0;
-  _col_header       = 0;
-  _row_header_color = color();
-  _col_header_color = color();
-  _row_resize       = 0;
-  _col_resize       = 0;
-  _row_resize_min   = 1;
-  _col_resize_min   = 1;
-  _redraw_toprow    = -1;
-  _redraw_botrow    = -1;
-  _redraw_leftcol   = -1;
-  _redraw_rightcol  = -1;
-  table_w           = 0;
-  table_h           = 0;
-  toprow            = 0;
-  botrow            = 0;
-  leftcol           = 0;
-  rightcol          = 0;
-  toprow_scrollpos  = -1;
-  leftcol_scrollpos = -1;
-  _last_cursor      = FL_CURSOR_DEFAULT;
-  _resizing_col     = -1;
-  _resizing_row     = -1;
-  _dragging_x       = -1;
-  _dragging_y       = -1;
-  _last_row         = -1;
-  _auto_drag        = 0;
-  current_col	    = -1;
-  current_row       = -1;
-  select_row        = -1;
-  select_col        = -1;
-#if FLTK_ABI_VERSION >= 10301
-  _scrollbar_size   = 0;
-#endif  
-#if FLTK_ABI_VERSION >= 10303
-  flags_            = 0;	// TABCELLNAV off
-#endif
-  box(FL_THIN_DOWN_FRAME);
-  
-  vscrollbar = new Fl_Scrollbar(x()+w()-Fl::scrollbar_size(), y(),
-                                Fl::scrollbar_size(), h()-Fl::scrollbar_size());
-  vscrollbar->type(FL_VERTICAL);
-  vscrollbar->callback(scroll_cb, (void*)this);
-  
-  hscrollbar = new Fl_Scrollbar(x(), y()+h()-Fl::scrollbar_size(),
-                                w(), Fl::scrollbar_size());
-  hscrollbar->type(FL_HORIZONTAL);
-  hscrollbar->callback(scroll_cb, (void*)this);
-  
-  table = new Fl_Scroll(x(), y(), w(), h());
-  table->box(FL_NO_BOX);
-  table->type(0);		// don't show Fl_Scroll's scrollbars -- use our own
-  table->hide();		// hide unless children are present
-  table->end();
-  
-  table_resized();
-  redraw();
-  
-  Fl_Group::end();		// end the group's begin()
-  
-  table->begin();		// leave with fltk children getting added to the scroll
-}
-
-// Dtor
-Fl_Table::~Fl_Table() {
-  // The parent Fl_Group takes care of destroying scrollbars
-}
-
-// Set height of a row
-void Fl_Table::row_height(int row, int height) {
-  if ( row < 0 ) return;
-  if ( row < (int)_rowheights.size() && _rowheights[row] == height ) {
-    return;		// OPTIMIZATION: no change? avoid redraw
-  }
-  // Add row heights, even if none yet
-  int now_size = (int)_rowheights.size();
-  if ( row >= now_size ) {
-    _rowheights.size(row);
-    while (now_size < row)
-      _rowheights[now_size++] = height;
-  }
-  _rowheights[row] = height;
-  table_resized();
-  if ( row <= botrow ) {	// OPTIMIZATION: only redraw if onscreen or above screen
-    redraw();
-  }
-  // ROW RESIZE CALLBACK
-  if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-    do_callback(CONTEXT_RC_RESIZE, row, 0);
-  }
-}
-
-// Set width of a column
-void Fl_Table::col_width(int col, int width)
-{
-  if ( col < 0 ) return;
-  if ( col < (int)_colwidths.size() && _colwidths[col] == width ) {
-    return;			// OPTIMIZATION: no change? avoid redraw
-  }
-  // Add column widths, even if none yet
-  int now_size = (int)_colwidths.size();
-  if ( col >= now_size ) {
-    _colwidths.size(col+1);
-    while (now_size < col) {
-      _colwidths[now_size++] = width;
-    }
-  }
-  _colwidths[col] = width;
-  table_resized();
-  if ( col <= rightcol ) {	// OPTIMIZATION: only redraw if onscreen or to the left
-    redraw();
-  }
-  // COLUMN RESIZE CALLBACK
-  if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-    do_callback(CONTEXT_RC_RESIZE, 0, col);
-  }
-}
-
-// Return row/col clamped to reality
-int Fl_Table::row_col_clamp(TableContext context, int &R, int &C) {
-  int clamped = 0;
-  if ( R < 0 ) { R = 0; clamped = 1; }
-  if ( C < 0 ) { C = 0; clamped = 1; }
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      // Allow col headers to draw even if no rows
-      if ( R >= _rows && R != 0 ) { R = _rows - 1; clamped = 1; }
-      break;
-      
-    case CONTEXT_ROW_HEADER:
-      // Allow row headers to draw even if no columns
-      if ( C >= _cols && C != 0 ) { C = _cols - 1; clamped = 1; }
-      break;
-      
-    case CONTEXT_CELL:
-    default:
-      // CLAMP R/C TO _rows/_cols
-      if ( R >= _rows ) { R = _rows - 1; clamped = 1; }
-      if ( C >= _cols ) { C = _cols - 1; clamped = 1; }
-      break;
-  }
-  return(clamped);
-}
-
-// Return bounding region for given context
-void Fl_Table::get_bounds(TableContext context, int &X, int &Y, int &W, int &H) {
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      // Column header clipping.
-      X = tox;
-      Y = wiy;
-      W = tow;
-      H = col_header_height();
-      return;
-      
-    case CONTEXT_ROW_HEADER:
-      // Row header clipping.
-      X = wix;
-      Y = toy;
-      W = row_header_width();
-      H = toh;
-      return;
-      
-    case CONTEXT_TABLE:
-      // Table inner dimensions
-      X = tix; Y = tiy; W = tiw; H = tih;
-      return;
-      
-      // TODO: Add other contexts..
-    default:
-      fprintf(stderr, "Fl_Table::get_bounds(): context %d unimplemented\n", (int)context);
-      return;
-  }
-  //NOTREACHED
-}
-
-// Find row/col beneath cursor
-//
-//    Returns R/C and context.
-//    Also returns resizeflag, if mouse is hovered over a resize boundary.
-//
-Fl_Table::TableContext Fl_Table::cursor2rowcol(int &R, int &C, ResizeFlag &resizeflag) {
-  // return values
-  R = C = 0;
-  resizeflag = RESIZE_NONE;
-  // Row header?
-  int X, Y, W, H;
-  if ( row_header() ) {
-    // Inside a row heading?
-    get_bounds(CONTEXT_ROW_HEADER, X, Y, W, H);
-    if ( Fl::event_inside(X, Y, W, H) ) {
-      // Scan visible rows until found
-      for ( R = toprow; R <= botrow; R++ ) {
-        find_cell(CONTEXT_ROW_HEADER, R, 0, X, Y, W, H);
-        if ( Fl::event_y() >= Y && Fl::event_y() < (Y+H) ) {
-          // Found row?
-          //     If cursor over resize boundary, and resize enabled,
-          //     enable the appropriate resize flag.
-          //
-          if ( row_resize() ) {
-            if ( Fl::event_y() <= (Y+3-0) ) { resizeflag = RESIZE_ROW_ABOVE; }
-            if ( Fl::event_y() >= (Y+H-3) ) { resizeflag = RESIZE_ROW_BELOW; }
-          }
-          return(CONTEXT_ROW_HEADER);
-        }
-      }
-      // Must be in row header dead zone
-      return(CONTEXT_NONE);
-    }
-  }
-  // Column header?
-  if ( col_header() ) {
-    // Inside a column heading?
-    get_bounds(CONTEXT_COL_HEADER, X, Y, W, H);
-    if ( Fl::event_inside(X, Y, W, H) ) {
-      // Scan visible columns until found
-      for ( C = leftcol; C <= rightcol; C++ ) {
-        find_cell(CONTEXT_COL_HEADER, 0, C, X, Y, W, H);
-        if ( Fl::event_x() >= X && Fl::event_x() < (X+W) ) {
-          // Found column?
-          //     If cursor over resize boundary, and resize enabled,
-          //     enable the appropriate resize flag.
-          //
-          if ( col_resize() ) {
-            if ( Fl::event_x() <= (X+3-0) ) { resizeflag = RESIZE_COL_LEFT; }
-            if ( Fl::event_x() >= (X+W-3) ) { resizeflag = RESIZE_COL_RIGHT; }
-          }
-          return(CONTEXT_COL_HEADER);
-        }
-      }
-      // Must be in column header dead zone
-      return(CONTEXT_NONE);
-    }
-  }
-  // Mouse somewhere in table?
-  //     Scan visible r/c's until we find it.
-  //
-  if ( Fl::event_inside(tox, toy, tow, toh) ) {
-    for ( R = toprow; R <= botrow; R++ ) {
-      find_cell(CONTEXT_CELL, R, C, X, Y, W, H);
-      if ( Fl::event_y() < Y ) break;		// OPT: thanks lars
-      if ( Fl::event_y() >= (Y+H) ) continue;	// OPT: " "
-      for ( C = leftcol; C <= rightcol; C++ ) {
-        find_cell(CONTEXT_CELL, R, C, X, Y, W, H);
-        if ( Fl::event_inside(X, Y, W, H) ) {
-          return(CONTEXT_CELL);			// found it
-        }
-      }
-    }
-    // Must be in a dead zone of the table
-    R = C = 0;
-    return(CONTEXT_TABLE);
-  }
-  // Somewhere else
-  return(CONTEXT_NONE);
-}
-
-// Find X/Y/W/H for cell at R/C
-//     If R or C are out of range, returns -1 
-//     with X/Y/W/H set to zero.
-//
-int Fl_Table::find_cell(TableContext context, int R, int C, int &X, int &Y, int &W, int &H) {
-  if ( row_col_clamp(context, R, C) ) {		// row or col out of range? error
-    X=Y=W=H=0;
-    return(-1);
-  }
-  X = col_scroll_position(C) - hscrollbar->value() + tix;
-  Y = row_scroll_position(R) - vscrollbar->value() + tiy;
-  W = col_width(C);
-  H = row_height(R);
-  
-  switch ( context ) {
-    case CONTEXT_COL_HEADER:
-      Y = wiy;
-      H = col_header_height();
-      return(0);
-      
-    case CONTEXT_ROW_HEADER:
-      X = wix;
-      W = row_header_width();
-      return(0);
-      
-    case CONTEXT_CELL:
-      return(0);
-      
-    case CONTEXT_TABLE:
-      return(0);
-      
-      // TODO -- HANDLE OTHER CONTEXTS
-    default:
-      fprintf(stderr, "Fl_Table::find_cell: unknown context %d\n", (int)context);
-      return(-1);
-  }
-  //NOTREACHED
-}
-
-// Enable automatic scroll-selection
-void Fl_Table::_start_auto_drag() {
-  if (_auto_drag) return;
-  _auto_drag = 1;
-  Fl::add_timeout(0.3, _auto_drag_cb2, this);
-}
-
-// Disable automatic scroll-selection
-void Fl_Table::_stop_auto_drag() {
-  if (!_auto_drag) return;
-  Fl::remove_timeout(_auto_drag_cb2, this);
-  _auto_drag = 0;
-}
-
-void Fl_Table::_auto_drag_cb2(void *d) {
-  ((Fl_Table*)d)->_auto_drag_cb();
-}
-
-// Handle automatic scroll-selection if mouse selection dragged off table edge
-void Fl_Table::_auto_drag_cb() {
-  int lx = Fl::e_x;
-  int ly = Fl::e_y;
-  if (_selecting == CONTEXT_COL_HEADER)
-  { ly = y() + col_header_height(); }
-  else if (_selecting == CONTEXT_ROW_HEADER)
-  { lx = x() + row_header_width(); }
-  if (lx > x() + w() - 20) {
-    Fl::e_x = x() + w() - 20;
-    if (hscrollbar->visible())
-      ((Fl_Slider*)hscrollbar)->value(hscrollbar->clamp(hscrollbar->value() + 30));
-    hscrollbar->do_callback();
-    _dragging_x = Fl::e_x - 30;
-  }
-  else if (lx < (x() + row_header_width())) {
-    Fl::e_x = x() + row_header_width() + 1;
-    if (hscrollbar->visible()) {
-      ((Fl_Slider*)hscrollbar)->value(hscrollbar->clamp(hscrollbar->value() - 30));
-    }
-    hscrollbar->do_callback();
-    _dragging_x = Fl::e_x + 30;
-  }
-  if (ly > y() + h() - 20) {
-    Fl::e_y = y() + h() - 20;
-    if (vscrollbar->visible()) {
-      ((Fl_Slider*)vscrollbar)->value(vscrollbar->clamp(vscrollbar->value() + 30));
-    }
-    vscrollbar->do_callback();
-    _dragging_y = Fl::e_y - 30;
-  }
-  else if (ly < (y() + col_header_height())) {
-    Fl::e_y = y() + col_header_height() + 1;
-    if (vscrollbar->visible()) {
-      ((Fl_Slider*)vscrollbar)->value(vscrollbar->clamp(vscrollbar->value() - 30));
-    }
-    vscrollbar->do_callback();
-    _dragging_y = Fl::e_y + 30;
-  }
-  _auto_drag = 2;
-  handle(FL_DRAG);
-  _auto_drag = 1;
-  Fl::e_x = lx;
-  Fl::e_y = ly;
-  Fl::check();
-  Fl::flush();
-  if (Fl::event_buttons() && _auto_drag) {
-    Fl::add_timeout(0.05, _auto_drag_cb2, this);
-  }
-}
-
-// Recalculate the window dimensions
-void Fl_Table::recalc_dimensions() {
-  // Recalc to* (Table Outer), ti* (Table Inner), wi* ( Widget Inner)
-  wix = ( x() + Fl::box_dx(box())); tox = wix; tix = tox + Fl::box_dx(table->box());
-  wiy = ( y() + Fl::box_dy(box())); toy = wiy; tiy = toy + Fl::box_dy(table->box());
-  wiw = ( w() - Fl::box_dw(box())); tow = wiw; tiw = tow - Fl::box_dw(table->box());
-  wih = ( h() - Fl::box_dh(box())); toh = wih; tih = toh - Fl::box_dh(table->box());
-  // Trim window if headers enabled
-  if ( col_header() ) {
-    tiy += col_header_height(); toy += col_header_height();
-    tih -= col_header_height(); toh -= col_header_height();
-  }
-  if ( row_header() ) {
-    tix += row_header_width(); tox += row_header_width();
-    tiw -= row_header_width(); tow -= row_header_width();
-  } 
-  // Make scroll bars disappear if window large enough
-  {
-    // First pass: can hide via window size?
-    int hidev = (table_h <= tih);
-    int hideh = (table_w <= tiw); 
-#if FLTK_ABI_VERSION >= 10301
-    // NEW
-    int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-#else
-    // OLD
-    int scrollsize = Fl::scrollbar_size();
-#endif
-    // Second pass: Check for interference
-    if ( !hideh && hidev ) { hidev = (( table_h - tih + scrollsize ) <= 0 ); }
-    if ( !hidev && hideh ) { hideh = (( table_w - tiw + scrollsize ) <= 0 ); }
-    // Determine scrollbar visibility, trim ti[xywh]/to[xywh]
-    if ( hidev ) { vscrollbar->hide(); }
-    else { vscrollbar->show(); tiw -= scrollsize; tow -= scrollsize; }
-    if ( hideh ) { hscrollbar->hide(); }
-    else { hscrollbar->show(); tih -= scrollsize; toh -= scrollsize; }
-  }
-  // Resize the child table
-  table->resize(tox, toy, tow, toh);
-  table->init_sizes();
-}
-
-// Recalculate internals after a scroll.
-//
-//    Call this if table has been scrolled or resized.
-//    Does not handle redraw().
-//    TODO: Assumes ti[xywh] has already been recalculated.
-//
-void Fl_Table::table_scrolled() {
-  // Find top row
-  int y, row, voff = vscrollbar->value();
-  for ( row=y=0; row < _rows; row++ ) {
-    y += row_height(row);
-    if ( y > voff ) { y -= row_height(row); break; }
-  }
-  _row_position = toprow = ( row >= _rows ) ? (row - 1) : row;
-  toprow_scrollpos = y;		// OPTIMIZATION: save for later use 
-  // Find bottom row
-  voff = vscrollbar->value() + tih;
-  for ( ; row < _rows; row++ ) {
-    y += row_height(row);
-    if ( y >= voff ) { break; }
-  }
-  botrow = ( row >= _rows ) ? (row - 1) : row; 
-  // Left column
-  int x, col, hoff = hscrollbar->value();
-  for ( col=x=0; col < _cols; col++ ) {
-    x += col_width(col);
-    if ( x > hoff ) { x -= col_width(col); break; }
-  }
-  _col_position = leftcol = ( col >= _cols ) ? (col - 1) : col;
-  leftcol_scrollpos = x;	// OPTIMIZATION: save for later use 
-  // Right column
-  //    Work with data left over from leftcol calculation
-  //
-  hoff = hscrollbar->value() + tiw;
-  for ( ; col < _cols; col++ ) {
-    x += col_width(col);
-    if ( x >= hoff ) { break; }
-  }
-  rightcol = ( col >= _cols ) ? (col - 1) : col; 
-  // First tell children to scroll
-  draw_cell(CONTEXT_RC_RESIZE, 0,0,0,0,0,0);
-}
-
-// Table resized: recalc internal data
-//    Call this whenever the window is resized.
-//    Recalculates the scrollbar sizes.
-//    Makes no assumptions about any pre-initialized data.
-//
-void Fl_Table::table_resized() {
-  table_h = row_scroll_position(rows());
-  table_w = col_scroll_position(cols()); 
-  recalc_dimensions(); 
-  // Recalc scrollbar sizes
-  //    Clamp scrollbar value() after a resize.
-  //    Resize scrollbars to enforce a constant trough width after a window resize.
-  //
-  {
-    // Vertical scrollbar
-    float vscrolltab = ( table_h == 0 || tih > table_h ) ? 1 : (float)tih / table_h;
-    float hscrolltab = ( table_w == 0 || tiw > table_w ) ? 1 : (float)tiw / table_w;
-#if FLTK_ABI_VERSION >= 10301
-    // NEW
-    int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-#else
-    // OLD
-    int scrollsize = Fl::scrollbar_size();
-#endif
-    vscrollbar->bounds(0, table_h-tih);
-    vscrollbar->precision(10);
-    vscrollbar->slider_size(vscrolltab);
-    vscrollbar->resize(wix+wiw-scrollsize, wiy,
-                       scrollsize, 
-                       wih - ((hscrollbar->visible())?scrollsize:0));
-    vscrollbar->Fl_Valuator::value(vscrollbar->clamp(vscrollbar->value()));	
-    // Horizontal scrollbar
-    hscrollbar->bounds(0, table_w-tiw);
-    hscrollbar->precision(10);
-    hscrollbar->slider_size(hscrolltab);
-    hscrollbar->resize(wix, wiy+wih-scrollsize,
-                       wiw - ((vscrollbar->visible())?scrollsize:0), 
-                       scrollsize);
-    hscrollbar->Fl_Valuator::value(hscrollbar->clamp(hscrollbar->value()));
-  }
-  
-  // Tell FLTK child widgets were resized
-  Fl_Group::init_sizes();
-  
-  // Recalc top/bot/left/right
-  table_scrolled();
-  
-  // DO *NOT* REDRAW -- LEAVE THIS UP TO THE CALLER
-  // redraw();
-}
-
-// Someone moved a scrollbar
-void Fl_Table::scroll_cb(Fl_Widget*w, void *data) {
-  Fl_Table *o = (Fl_Table*)data;
-  o->recalc_dimensions();	// recalc tix, tiy, etc.
-  o->table_scrolled();
-  o->redraw();
-}
-
-// Set number of rows
-void Fl_Table::rows(int val) {
-  int oldrows = _rows;
-  _rows = val;
-  {
-    int default_h = ( _rowheights.size() > 0 ) ? _rowheights.back() : 25;
-    int now_size = _rowheights.size();
-    _rowheights.size(val);			// enlarge or shrink as needed
-    while ( now_size < val ) {
-      _rowheights[now_size++] = default_h;	// fill new
-    }
-  }
-  table_resized();
-  
-  // OPTIMIZATION: redraw only if change is visible.
-  if ( val >= oldrows && oldrows > botrow ) {
-    // NO REDRAW
-  } else {
-    redraw();
-  }
-}
-
-// Set number of cols
-void Fl_Table::cols(int val) {
-  _cols = val;
-  {
-    int default_w = ( _colwidths.size() > 0 ) ? _colwidths[_colwidths.size()-1] : 80;
-    int now_size = _colwidths.size();
-    _colwidths.size(val);			// enlarge or shrink as needed
-    while ( now_size < val ) {
-      _colwidths[now_size++] = default_w;	// fill new
-    }
-  }
-  table_resized();
-  redraw();
-}
-
-// Change mouse cursor to different type
-void Fl_Table::change_cursor(Fl_Cursor newcursor) {
-  if ( newcursor != _last_cursor ) {
-    fl_cursor(newcursor, FL_BLACK, FL_WHITE);
-    _last_cursor = newcursor;
-  }
-}
-
-void Fl_Table::damage_zone(int r1, int c1, int r2, int c2, int r3, int c3) {
-  int R1 = r1, C1 = c1;
-  int R2 = r2, C2 = c2;
-  if (r1 > R2) R2 = r1;
-  if (r2 < R1) R1 = r2;
-  if (r3 > R2) R2 = r3;
-  if (r3 < R1) R1 = r3;
-  if (c1 > C2) C2 = c1;
-  if (c2 < C1) C1 = c2;
-  if (c3 > C2) C2 = c3;
-  if (c3 < C1) C1 = c3;
-  if (R1 < 0) {
-    if (R2 < 0) return;
-    R1 = 0;
-  }
-  if (C1 < 0) {
-    if (C2 < 0) return;
-    C1 = 0;
-  }
-  if (R1 < toprow) R1 = toprow;
-  if (R2 > botrow) R2 = botrow;
-  if (C1 < leftcol) C1 = leftcol;
-  if (C2 > rightcol) C2 = rightcol;
-  redraw_range(R1, R2, C1, C2);
-}
-
-int Fl_Table::move_cursor(int R, int C, int shiftselect) {
-  if (select_row == -1) R++;
-  if (select_col == -1) C++;
-  R += select_row;
-  C += select_col;
-  if (R < 0) R = 0;
-  if (R >= rows()) R = rows() - 1;
-  if (C < 0) C = 0;
-  if (C >= cols()) C = cols() - 1;
-  if (R == select_row && C == select_col) return 0;
-  damage_zone(current_row, current_col, select_row, select_col, R, C);
-  select_row = R;
-  select_col = C;
-  if (!shiftselect || !Fl::event_state(FL_SHIFT)) {
-    current_row = R;
-    current_col = C;
-  }
-  if (R < toprow + 1 || R > botrow - 1) row_position(R);
-  if (C < leftcol + 1 || C > rightcol - 1) col_position(C);
-  return 1;
-}
-
-int Fl_Table::move_cursor(int R, int C) {
-  return move_cursor(R,C,1);
-}
-
-//#define DEBUG 1
-#ifdef DEBUG
-#include <FL/names.h>
-#define PRINTEVENT \
-    fprintf(stderr,"Table %s: ** Event: %s --\n", (label()?label():"none"), fl_eventnames[event]);
-#else
-#define PRINTEVENT
-#endif
-
-// Handle FLTK events
-int Fl_Table::handle(int event) {
-  PRINTEVENT;
-  int ret = Fl_Group::handle(event);	// let FLTK group handle events first
-  // Which row/column are we over?
-  int R, C;  				// row/column being worked on
-  ResizeFlag resizeflag;		// which resizing area are we over? (0=none)
-  TableContext context = cursor2rowcol(R, C, resizeflag);
-  if (ret) {
-    if (Fl::event_inside(hscrollbar) || Fl::event_inside(vscrollbar)) return 1;
-    if ( context != CONTEXT_ROW_HEADER &&		// mouse not in row header (STR#2742)
-         context != CONTEXT_COL_HEADER &&		// mouse not in col header (STR#2742)
-         Fl::focus() != this && 			// we don't have focus?
-         contains(Fl::focus())) {			// focus is a child?
-      return 1;
-    }
-  }
-  // Make snapshots of realtime event states *before* we service user's cb,
-  // which may do things like post popup menus that return with unexpected button states.
-  int _event_button = Fl::event_button();
-  int _event_clicks = Fl::event_clicks();
-  int _event_x      = Fl::event_x();
-  int _event_y      = Fl::event_y();
-  int _event_key    = Fl::event_key();
-#if FLTK_ABI_VERSION >= 10303
-  int _event_state  = Fl::event_state();
-#endif
-  Fl_Widget *_focus = Fl::focus();
-  switch ( event ) {
-    case FL_PUSH:
-      // Single left-click on table? do user's callback with CONTEXT_TABLE
-      if (_event_button == 1 && !_event_clicks) {
-        if (_focus == this) {
-          take_focus();
-          do_callback(CONTEXT_TABLE, -1, -1);
-          ret = 1;
-        }
-        damage_zone(current_row, current_col, select_row, select_col, R, C);
-        if (context == CONTEXT_CELL) {
-          current_row = select_row = R;
-          current_col = select_col = C;
-          _selecting = CONTEXT_CELL;
-        } else {
-	  // Clear selection if not resizing row/col
-	  if ( !resizeflag ) {
-            current_row = select_row = -1;
-            current_col = select_col = -1;
-	  }
-        }
-      }
-      // A click on table with user's callback defined?
-      //     Need this for eg. right click to pop up a menu
-      //
-      if ( Fl_Widget::callback() &&		// callback defined?
-          resizeflag == RESIZE_NONE ) {		// not resizing?
-        do_callback(context, R, C);		// do callback with context (cell, header, etc)
-      }
-      // Handle selection if handling a left-click
-      //    Use snapshot of _event_button we made before servicing user's cb's
-      //    to avoid checking realtime state of buttons which may have changed
-      //    during the user's callbacks.
-      //
-      switch ( context ) {
-        case CONTEXT_CELL:
-          // FL_PUSH on a cell?
-          ret = 1;				// express interest in FL_RELEASE
-          break;
-          
-        case CONTEXT_NONE:
-          // FL_PUSH on table corner?
-          if ( _event_button == 1 && _event_x < x() + row_header_width()) {
-            current_col = 0;
-            select_col = cols() - 1;
-            current_row = 0;
-            select_row = rows() - 1;				
-            damage_zone(current_row, current_col, select_row, select_col);
-            ret = 1;
-          }
-          break;
-          
-        case CONTEXT_COL_HEADER:
-          // FL_PUSH on a column header?
-          if ( _event_button == 1) {
-            // Resizing? Handle it
-            if ( resizeflag ) {
-              // Start resize if left click on column border.
-              //    "ret=1" ensures we get drag events from now on.
-              //    (C-1) is used if mouse is over the left hand side 
-              //    of cell, so we resize the next column on the left.
-              //
-              _resizing_col = ( resizeflag & RESIZE_COL_LEFT ) ? C-1 : C; 
-              _resizing_row = -1;
-              _dragging_x = _event_x;
-              ret = 1;
-            } else {
-              // Not resizing? Select the column
-	      if ( Fl::focus() != this && contains(Fl::focus()) ) return 0;	// STR #3018 - item 1
-              current_col = select_col = C;
-              current_row = 0;
-              select_row = rows() - 1;
-              _selecting = CONTEXT_COL_HEADER;
-              damage_zone(current_row, current_col, select_row, select_col);
-              ret = 1;
-            }
-          }
-          break;
-          
-        case CONTEXT_ROW_HEADER:
-          // FL_PUSH on a row header?
-          if ( _event_button == 1 ) {
-            // Resizing? Handle it
-            if ( resizeflag ) {
-              // Start resize if left mouse clicked on row border.
-              //    "ret = 1" ensures we get drag events from now on.
-              //    (R-1) is used if mouse is over the top of the cell,
-              //    so that we resize the row above.
-              //
-              _resizing_row = ( resizeflag & RESIZE_ROW_ABOVE ) ? R-1 : R; 
-              _resizing_col = -1;
-              _dragging_y = _event_y; 
-              ret = 1;
-            } else {
-              // Not resizing? Select the row
-	      if ( Fl::focus() != this && contains(Fl::focus()) ) return 0;	// STR #3018 - item 1
-              current_row = select_row = R;
-              current_col = 0;
-              select_col = cols() - 1;
-              _selecting = CONTEXT_ROW_HEADER;
-              damage_zone(current_row, current_col, select_row, select_col);
-              ret = 1;
-            }
-          }
-          break;
-          
-        default:
-          ret = 0;		// express disinterest
-          break;
-      }
-      _last_row = R;
-      break;
-      
-    case FL_DRAG:
-      if (_auto_drag == 1) {
-        ret = 1;
-        break;
-      } 
-      if ( _resizing_col > -1 ) {
-        // Dragging column?
-        //
-        //    Let user drag even /outside/ the row/col widget.
-        //    Don't allow column width smaller than 1.
-        //    Continue to show FL_CURSOR_WE at all times during drag.
-        //
-        int offset = _dragging_x - _event_x;
-        int new_w = col_width(_resizing_col) - offset;
-        if ( new_w < _col_resize_min ) new_w = _col_resize_min;
-        col_width(_resizing_col, new_w);
-        _dragging_x = _event_x;
-        table_resized();
-        redraw();
-        change_cursor(FL_CURSOR_WE);
-        ret = 1;
-        if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-          do_callback(CONTEXT_RC_RESIZE, R, C);
-        }
-      }
-      else if ( _resizing_row > -1 ) {
-        // Dragging row?
-        //
-        //    Let user drag even /outside/ the row/col widget.
-        //    Don't allow row width smaller than 1.
-        //    Continue to show FL_CURSOR_NS at all times during drag.
-        //
-        int offset = _dragging_y - _event_y;
-        int new_h = row_height(_resizing_row) - offset;
-        if ( new_h < _row_resize_min ) new_h = _row_resize_min;
-        row_height(_resizing_row, new_h);
-        _dragging_y = _event_y;
-        table_resized();
-        redraw();
-        change_cursor(FL_CURSOR_NS);
-        ret = 1;
-        if ( Fl_Widget::callback() && when() & FL_WHEN_CHANGED ) {
-          do_callback(CONTEXT_RC_RESIZE, R, C);
-        }
-      } else {
-        if (_event_button == 1 && 
-            _selecting == CONTEXT_CELL &&
-            context == CONTEXT_CELL) {
-          // Dragging a cell selection?
-	  if ( _event_clicks ) break;			// STR #3018 - item 2
-          if (select_row != R || select_col != C) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_row = R;
-          select_col = C;
-          ret = 1;
-        }
-        else if (_event_button == 1 && 
-                 _selecting == CONTEXT_ROW_HEADER && 
-                 context & (CONTEXT_ROW_HEADER|CONTEXT_COL_HEADER|CONTEXT_CELL)) {
-          if (select_row != R) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_row = R;
-          ret = 1;
-        }
-        else if (_event_button == 1 && 
-                 _selecting == CONTEXT_COL_HEADER 
-                 && context & (CONTEXT_ROW_HEADER|CONTEXT_COL_HEADER|CONTEXT_CELL)) {
-          if (select_col != C) {
-            damage_zone(current_row, current_col, select_row, select_col, R, C);
-          }
-          select_col = C;
-          ret = 1;
-        }
-      }
-      // Enable autodrag if not resizing, and mouse has moved off table edge
-      if ( _resizing_row < 0 && _resizing_col < 0 && _auto_drag == 0 && 
-          ( _event_x > x() + w() - 20 ||
-            _event_x < x() + row_header_width() || 
-            _event_y > y() + h() - 20 ||
-            _event_y < y() + col_header_height()
-           ) ) {
-            _start_auto_drag();
-          }
-      break;
-      
-    case FL_RELEASE:
-      _stop_auto_drag();
-      switch ( context ) {
-        case CONTEXT_ROW_HEADER:		// release on row header
-        case CONTEXT_COL_HEADER:		// release on col header
-        case CONTEXT_CELL:			// release on a cell
-        case CONTEXT_TABLE:			// release on dead zone
-          if ( _resizing_col == -1 &&		// not resizing a column
-              _resizing_row == -1 &&		// not resizing a row
-              Fl_Widget::callback() && 		// callback defined
-              when() & FL_WHEN_RELEASE && 	// on button release
-              _last_row == R ) {		// release on same row PUSHed?
-            // Need this for eg. left clicking on a cell to select it
-            do_callback(context, R, C);
-          }
-          break;
-          
-        default:
-          break;
-      }
-      if ( _event_button == 1 ) {
-        change_cursor(FL_CURSOR_DEFAULT);
-        _resizing_col = -1;
-        _resizing_row = -1;
-        ret = 1;
-      }
-      break;
-      
-    case FL_MOVE:
-      if ( context == CONTEXT_COL_HEADER && 		// in column header?
-          resizeflag ) {				// resize + near boundary?
-        change_cursor(FL_CURSOR_WE);			// show resize cursor
-      }
-      else if ( context == CONTEXT_ROW_HEADER && 	// in row header?
-               resizeflag ) {				// resize + near boundary?
-        change_cursor(FL_CURSOR_NS);			// show resize cursor
-      } else {
-        change_cursor(FL_CURSOR_DEFAULT);		// normal cursor
-      }
-      ret = 1;
-      break;
-      
-    case FL_ENTER:		// See FLTK event docs on the FL_ENTER widget
-      if (!ret) take_focus();
-      ret = 1;
-      //FALLTHROUGH
-      
-    case FL_LEAVE:		// We want to track the mouse if resizing is allowed.
-      if ( resizeflag ) {
-        ret = 1;
-      }
-      if ( event == FL_LEAVE ) {
-        _stop_auto_drag();
-        change_cursor(FL_CURSOR_DEFAULT);
-      }
-      break;
-      
-    case FL_FOCUS:
-      Fl::focus(this);
-      //FALLTHROUGH
-      
-    case FL_UNFOCUS:
-      _stop_auto_drag();
-      ret = 1;
-      break;
-      
-    case FL_KEYBOARD: {
-      ret = 0;
-      int is_row = select_row;
-      int is_col = select_col;
-      switch(_event_key) {
-        case FL_Home:
-          ret = move_cursor(0, -1000000);
-          break;
-        case FL_End:
-          ret = move_cursor(0, 1000000);
-          break;
-        case FL_Page_Up:
-          ret = move_cursor(-(botrow - toprow - 1), 0);
-          break;
-        case FL_Page_Down:
-          ret = move_cursor(botrow - toprow - 1 , 0);
-          break;
-        case FL_Left:
-          ret = move_cursor(0, -1);
-          break;
-        case FL_Right:
-          ret = move_cursor(0, 1);
-          break;
-        case FL_Up:
-          ret = move_cursor(-1, 0);
-          break;
-        case FL_Down:
-          ret = move_cursor(1, 0);
-          break;
-	case FL_Tab:
-#if FLTK_ABI_VERSION >= 10303
-	  if ( !tab_cell_nav() ) break;		// not navigating cells? let fltk handle it (STR#2862)
-	  if ( _event_state & FL_SHIFT ) {
-            ret = move_cursor(0, -1, 0);	// shift-tab -> left
-	  } else {
-	    ret = move_cursor(0, 1, 0);		// tab -> right
-	  }
-          break;
-#else
-          break;				// without tab_cell_nav(), Fl_Table should default to navigating widgets, not cells
-#endif
-      }
-      if (ret && Fl::focus() != this) {
-        do_callback(CONTEXT_TABLE, -1, -1);
-        take_focus();
-      }
-      //if (!ret && Fl_Widget::callback() && when() & FL_WHEN_NOT_CHANGED  )
-      if ( Fl_Widget::callback() && 
-          (
-           ( !ret && when() & FL_WHEN_NOT_CHANGED ) || 
-           ( is_row!= select_row || is_col!= select_col ) 
-           )
-          ) {
-        do_callback(CONTEXT_CELL, select_row, select_col); 
-        //damage_zone(current_row, current_col, select_row, select_col);
-        ret = 1;
-      }
-      break;
-    }
-      
-    default:
-      change_cursor(FL_CURSOR_DEFAULT);
-      break;
-  }
-  return(ret);
-}
-
-// Resize FLTK override
-//     Handle resize events if user resizes parent window.
-//
-void Fl_Table::resize(int X, int Y, int W, int H) {
-  // Tell group to resize, and recalc our own widget as well
-  Fl_Group::resize(X, Y, W, H);
-  table_resized();
-  redraw();
-}
-
-// Draw a cell
-void Fl_Table::_redraw_cell(TableContext context, int r, int c) {
-  if ( r < 0 || c < 0 ) return;
-  int X,Y,W,H;
-  find_cell(context, r, c, X, Y, W, H);	// find positions of cell
-  draw_cell(context, r, c, X, Y, W, H);	// call users' function to draw it
-}
-
-/**
- See if the cell at row \p r and column \p c is selected.
- \returns 1 if the cell is selected, 0 if not.
- */
-int Fl_Table::is_selected(int r, int c) {
-  int s_left, s_right, s_top, s_bottom;
-  
-  if (select_col > current_col) {
-    s_left = current_col;
-    s_right = select_col;
-  } else {
-    s_right = current_col;
-    s_left = select_col;
-  }
-  if (select_row > current_row) {
-    s_top = current_row;
-    s_bottom = select_row;
-  } else {
-    s_bottom = current_row;
-    s_top = select_row;
-  }
-  if (r >= s_top && r <= s_bottom && c >= s_left && c <= s_right) {
-    return 1;
-  }
-  return 0;
-}
-
-/**
-  Gets the region of cells selected (highlighted).
-
-  \param[in] row_top   Returns the top row of selection area
-  \param[in] col_left  Returns the left column of selection area
-  \param[in] row_bot   Returns the bottom row of selection area
-  \param[in] col_right Returns the right column of selection area
-*/
-void Fl_Table::get_selection(int& row_top, int& col_left, int& row_bot, int& col_right) {
-  if (select_col > current_col) {
-    col_left  = current_col;
-    col_right = select_col;
-  } else {
-    col_right = current_col;
-    col_left  = select_col;
-  }
-  if (select_row > current_row) {
-    row_top = current_row;
-    row_bot = select_row;
-  } else {
-    row_bot = current_row;
-    row_top = select_row;
-  }
-}
-
-/**
-  Sets the region of cells to be selected (highlighted).
-
-  So for instance, set_selection(0,0,0,0) selects the top/left cell in the table.
-  And set_selection(0,0,1,1) selects the four cells in rows 0 and 1, column 0 and 1.
-
-  \param[in] row_top   Top row of selection area
-  \param[in] col_left  Left column of selection area
-  \param[in] row_bot   Bottom row of selection area
-  \param[in] col_right Right column of selection area
-*/
-void Fl_Table::set_selection(int row_top, int col_left, int row_bot, int col_right) {
-  damage_zone(current_row, current_col, select_row, select_col);
-  current_col = col_left;
-  current_row = row_top;
-  select_col  = col_right;
-  select_row  = row_bot;
-  damage_zone(current_row, current_col, select_row, select_col);
-}
-
-// Draw the entire Fl_Table
-//    Override the draw() routine to draw the table.
-//    Then tell the group to draw over us.
-//
-void Fl_Table::draw() {   
-#if FLTK_ABI_VERSION >= 10301
-    // NEW
-    int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-#else
-    // OLD
-    int scrollsize = Fl::scrollbar_size();
-#endif
-  // Check if scrollbar size changed
-  if ( ( vscrollbar && (scrollsize != vscrollbar->w()) ) || 
-       ( hscrollbar && (scrollsize != hscrollbar->h()) ) ) {
-    // handle size change, min/max, table dim's, etc
-    table_resized();
-  }
-
-  draw_cell(CONTEXT_STARTPAGE, 0, 0,	 	// let user's drawing routine
-            tix, tiy, tiw, tih);		// prep new page
-  
-  // Let fltk widgets draw themselves first. Do this after
-  // draw_cell(CONTEXT_STARTPAGE) in case user moves widgets around.
-  // Use window 'inner' clip to prevent drawing into table border.
-  // (unfortunately this clips FLTK's border, so we must draw it explicity below)
-  //
-  fl_push_clip(wix, wiy, wiw, wih);
-  {
-    Fl_Group::draw();
-  }
-  fl_pop_clip();
-  
-  // Explicitly draw border around widget, if any
-  draw_box(box(), x(), y(), w(), h(), color());
-  
-  // If Fl_Scroll 'table' is hidden, draw its box
-  //    Do this after Fl_Group::draw() so we draw over scrollbars
-  //    that leak around the border.
-  //
-  if ( ! table->visible() ) {
-    if ( damage() & FL_DAMAGE_ALL || damage() & FL_DAMAGE_CHILD ) {
-      draw_box(table->box(), tox, toy, tow, toh, table->color());
-    }
-  } 
-  // Clip all further drawing to the inner widget dimensions
-  fl_push_clip(wix, wiy, wiw, wih);
-  {
-    // Only redraw a few cells?
-    if ( ! ( damage() & FL_DAMAGE_ALL ) && _redraw_leftcol != -1 ) {
-      fl_push_clip(tix, tiy, tiw, tih);
-      for ( int c = _redraw_leftcol; c <= _redraw_rightcol; c++ ) {
-        for ( int r = _redraw_toprow; r <= _redraw_botrow; r++ ) { 
-          _redraw_cell(CONTEXT_CELL, r, c);
-        }
-      }
-      fl_pop_clip();
-    }
-    if ( damage() & FL_DAMAGE_ALL ) {
-      int X,Y,W,H;
-      // Draw row headers, if any
-      if ( row_header() ) {
-        get_bounds(CONTEXT_ROW_HEADER, X, Y, W, H);
-        fl_push_clip(X,Y,W,H);
-        for ( int r = toprow; r <= botrow; r++ ) {
-          _redraw_cell(CONTEXT_ROW_HEADER, r, 0);
-        }
-        fl_pop_clip();
-      }
-      // Draw column headers, if any
-      if ( col_header() ) {
-        get_bounds(CONTEXT_COL_HEADER, X, Y, W, H);
-        fl_push_clip(X,Y,W,H);
-        for ( int c = leftcol; c <= rightcol; c++ ) {
-          _redraw_cell(CONTEXT_COL_HEADER, 0, c);
-        }
-        fl_pop_clip();
-      } 
-      // Draw all cells.
-      //    This includes cells partially obscured off edges of table.
-      //    No longer do this last; you might think it would be nice
-      //    to draw over dead zones, but on redraws it flickers. Avoid
-      //    drawing over deadzones; prevent deadzones by sizing columns.
-      //
-      fl_push_clip(tix, tiy, tiw, tih); {
-        for ( int r = toprow; r <= botrow; r++ ) {
-          for ( int c = leftcol; c <= rightcol; c++ ) {
-            _redraw_cell(CONTEXT_CELL, r, c); 
-          }
-        }
-      }
-      fl_pop_clip(); 
-      // Draw little rectangle in corner of headers
-      if ( row_header() && col_header() ) {
-        fl_rectf(wix, wiy, row_header_width(), col_header_height(), color());
-      }
-      
-      // Table has a boxtype? Close those few dead pixels
-      if ( table->box() ) {
-        if ( col_header() ) {
-          fl_rectf(tox, wiy, Fl::box_dx(table->box()), col_header_height(), color());
-        }
-        if ( row_header() ) {
-          fl_rectf(wix, toy, row_header_width(), Fl::box_dx(table->box()), color());
-        }
-      }
-      
-      // Table width smaller than window? Fill remainder with rectangle
-      if ( table_w < tiw ) {
-        fl_rectf(tix + table_w, tiy, tiw - table_w, tih, color()); 
-        // Col header? fill that too
-        if ( col_header() ) {
-          fl_rectf(tix + table_w, 
-                   wiy, 
-                   // get that corner just right..
-                   (tiw - table_w + Fl::box_dw(table->box()) - 
-                    Fl::box_dx(table->box())),
-                   col_header_height(),
-                   color());
-        }
-      } 
-      // Table height smaller than window? Fill remainder with rectangle
-      if ( table_h < tih ) {
-        fl_rectf(tix, tiy + table_h, tiw, tih - table_h, color()); 
-        if ( row_header() ) {
-          // NOTE:
-          //     Careful with that lower corner; don't use tih; when eg.
-          //     table->box(FL_THIN_UP_FRAME) and hscrollbar hidden,
-          //     leaves a row of dead pixels.
-          //
-          fl_rectf(wix, tiy + table_h, row_header_width(), 
-                   (wiy+wih) - (tiy+table_h) - 
-                   ( hscrollbar->visible() ? scrollsize : 0),
-                   color());
-        }
-      }
-    } 
-    // Both scrollbars? Draw little box in lower right
-    if ( vscrollbar->visible() && hscrollbar->visible() ) {
-      fl_rectf(vscrollbar->x(), hscrollbar->y(), 
-               vscrollbar->w(), hscrollbar->h(), color());
-    } 
-    draw_cell(CONTEXT_ENDPAGE, 0, 0,		// let user's drawing
-              tix, tiy, tiw, tih);		// routines cleanup
-    
-    _redraw_leftcol = _redraw_rightcol = _redraw_toprow = _redraw_botrow = -1;
-  }
-  fl_pop_clip();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Table_Row.cxx
+++ /dev/null
@@ -1,327 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Table_Row -- A row oriented table widget
-//
-//    A class specializing in a table of rows.
-//    Handles row-specific selection behavior.
-//
-// Copyright 2002 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// TODO:
-//    o Row headings (only column headings supported currently)
-//
-
-#include <stdio.h>		// for debugging
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Table_Row.H>
-
-// Is row selected?
-int Fl_Table_Row::row_selected(int row) {
-  if ( row < 0 || row >= rows() ) return(-1);
-  return(_rowselect[row]);
-}
-
-// Change row selection type
-void Fl_Table_Row::type(TableRowSelectMode val) {
-  _selectmode = val;
-  switch ( _selectmode ) {
-    case SELECT_NONE: {
-      for ( int row=0; row<rows(); row++ ) {
-        _rowselect[row] = 0;
-      }
-      redraw();
-      break;
-    }
-    case SELECT_SINGLE: {
-      int count = 0;
-      for ( int row=0; row<rows(); row++ ) {
-        if ( _rowselect[row] ) {
-          if ( ++count > 1 ) {	// only one allowed
-            _rowselect[row] = 0;
-          }
-        }
-      }
-      redraw();
-      break;
-    }
-    case SELECT_MULTI:
-      break;
-  }
-}
-
-// Change selection state for row
-//
-//     flag:
-//        0 - clear selection
-//        1 - set selection
-//        2 - toggle selection
-//
-//     Returns:
-//        0 - selection state did not change
-//        1 - selection state changed
-//       -1 - row out of range or incorrect selection mode
-//
-int Fl_Table_Row::select_row(int row, int flag) {
-  int ret = 0;
-  if ( row < 0 || row >= rows() ) { return(-1); }
-  switch ( _selectmode ) {
-    case SELECT_NONE:
-      return(-1);
-      
-    case SELECT_SINGLE: {
-      int oldval;
-      for ( int t=0; t<rows(); t++ ) {
-        if ( t == row ) {
-          oldval = _rowselect[row];
-          if ( flag == 2 ) { _rowselect[row] ^= 1; }
-          else             { _rowselect[row] = flag; }
-          if ( oldval != _rowselect[row] ) {
-            redraw_range(row, row, leftcol, rightcol);
-            ret = 1;
-          }
-        }
-        else if ( _rowselect[t] ) {
-          _rowselect[t] = 0;
-          redraw_range(t, t, leftcol, rightcol);
-        }
-      }
-      break;
-    }
-      
-    case SELECT_MULTI: {
-      int oldval = _rowselect[row];
-      if ( flag == 2 ) { _rowselect[row] ^= 1; }
-      else             { _rowselect[row] = flag; }
-      if ( _rowselect[row] != oldval ) {		// select state changed?
-        if ( row >= toprow && row <= botrow ) {		// row visible?
-          // Extend partial redraw range
-          redraw_range(row, row, leftcol, rightcol);
-        }
-        ret = 1;
-      }
-    }
-  }
-  return(ret);
-}
-
-// Select all rows to a known state
-void Fl_Table_Row::select_all_rows(int flag) {
-  switch ( _selectmode ) {
-    case SELECT_NONE:
-      return;
-      
-    case SELECT_SINGLE:
-      if ( flag != 0 ) return;
-      //FALLTHROUGH
-      
-    case SELECT_MULTI: {
-      char changed = 0;
-      if ( flag == 2 ) {
-        for ( int row=0; row<(int)_rowselect.size(); row++ ) {
-          _rowselect[row] ^= 1;
-        }
-        changed = 1;
-      } else {
-        for ( int row=0; row<(int)_rowselect.size(); row++ ) {
-          changed |= (_rowselect[row] != flag)?1:0;
-          _rowselect[row] = flag; 
-        }
-      }
-      if ( changed ) {
-        redraw();
-      }
-    }
-  }
-}
-
-// Set number of rows
-void Fl_Table_Row::rows(int val) {
-  Fl_Table::rows(val);
-  while ( val > (int)_rowselect.size() ) { _rowselect.push_back(0); }	// enlarge
-  while ( val < (int)_rowselect.size() ) { _rowselect.pop_back(); }	// shrink
-}
-
-//#define DEBUG 1
-#ifdef DEBUG
-#include <FL/names.h>
-#define PRINTEVENT \
-    fprintf(stderr,"TableRow %s: ** Event: %s --\n", (label()?label():"none"), fl_eventnames[event]);
-#else
-#define PRINTEVENT
-#endif
-
-// Handle events
-int Fl_Table_Row::handle(int event) {
-  PRINTEVENT;  
-
-  // Make snapshots of realtime event states *before* we service user's cb,
-  // which may do things like post popup menus that return with unexpected button states.
-  int _event_button = Fl::event_button();
-  //int _event_clicks = Fl::event_clicks();	// uncomment if needed
-  int _event_x      = Fl::event_x();
-  int _event_y      = Fl::event_y();
-  //int _event_key    = Fl::event_key();	// uncomment if needed
-  int _event_state  = Fl::event_state();
-  //Fl_Widget *_focus = Fl::focus();		// uncomment if needed
-  
-  // Let base class handle event
-  //     Note: base class may invoke user callbacks that post menus,
-  //     so from here on use event state snapshots (above).
-  //
-  int ret = Fl_Table::handle(event);
-  
-  // The following code disables cell selection.. why was it added? -erco 05/18/03
-  // if ( ret ) { _last_y = Fl::event_y(); return(1); }	// base class 'handled' it (eg. column resize)
-  
-  int shiftstate = (_event_state & FL_CTRL) ? FL_CTRL :
-  (_event_state & FL_SHIFT) ? FL_SHIFT : 0;
-  
-  // Which row/column are we over?
-  int R, C;  				// row/column being worked on
-  ResizeFlag resizeflag;		// which resizing area are we over? (0=none)
-  TableContext context = cursor2rowcol(R, C, resizeflag);
-  switch ( event ) {
-    case FL_PUSH:
-      if ( _event_button == 1 ) {
-        _last_push_x = _event_x;	// save regardless of context
-        _last_push_y = _event_y;	// " "
-        
-        // Handle selection in table.
-        //     Select cell under cursor, and enable drag selection mode.
-        //
-        if ( context == CONTEXT_CELL ) {
-          // Ctrl key? Toggle selection state
-          switch ( shiftstate ) {
-            case FL_CTRL:
-              select_row(R, 2);		// toggle
-              break;
-              
-            case FL_SHIFT: {
-              select_row(R, 1);
-              if ( _last_row > -1 ) {
-                int srow = R, erow = _last_row;
-                if ( srow > erow ) {
-                  srow = _last_row;
-                  erow = R;
-                }
-                for ( int row = srow; row <= erow; row++ ) {
-                  select_row(row, 1);
-                }
-              }
-              break;
-            }
-              
-            default:
-              select_all_rows(0);	// clear all previous selections
-              select_row(R, 1);
-              break;
-          }
-          
-          _last_row = R;
-          _dragging_select = 1;
-          ret = 1;      // FL_PUSH handled (ensures FL_DRAG will be sent)
-          // redraw();  // redraw() handled by select_row()
-        }
-      } 
-      break;
-      
-    case FL_DRAG: {
-      if ( _dragging_select ) {
-        // Dragged off table edges? Handle scrolling
-        int offtop = toy - _last_y;			// >0 if off top of table
-        int offbot = _last_y - (toy + toh);		// >0 if off bottom of table
-        
-        if ( offtop > 0 && row_position() > 0 ) {
-          // Only scroll in upward direction
-          int diff = _last_y - _event_y;
-          if ( diff < 1 ) {
-            ret = 1;
-            break;
-          }
-          row_position(row_position() - diff);
-          context = CONTEXT_CELL; C = 0; R = row_position();  // HACK: fake it
-          if ( R < 0 || R > rows() ) { ret = 1; break; }      // HACK: ugly
-        }
-        else if ( offbot > 0 && botrow < rows() ) {
-          // Only scroll in downward direction
-          int diff = _event_y - _last_y;
-          if ( diff < 1 ) {
-            ret = 1;
-            break;
-          }
-          row_position(row_position() + diff);
-          context = CONTEXT_CELL; C = 0; R = botrow;		// HACK: fake it
-          if ( R < 0 || R > rows() ) { ret = 1; break; }	// HACK: ugly
-        }
-        if ( context == CONTEXT_CELL ) {
-          switch ( shiftstate ) {
-            case FL_CTRL:
-              if ( R != _last_row ) {		// toggle if dragged to new row
-                select_row(R, 2);		// 2=toggle
-              }
-              break;
-              
-            case FL_SHIFT:
-            default:
-              select_row(R, 1);
-              if ( _last_row > -1 ) {
-                int srow = R, erow = _last_row;
-                if ( srow > erow ) {
-                  srow = _last_row;
-                  erow = R;
-                }
-                for ( int row = srow; row <= erow; row++ ) {
-                  select_row(row, 1);
-                }
-              }
-              break;
-          }
-          ret = 1;				// drag handled
-          _last_row = R;
-        }
-      }
-      break;
-    }
-      
-    case FL_RELEASE:
-      if ( _event_button == 1 ) {
-        _dragging_select = 0;
-        ret = 1;			// release handled
-        // Clicked off edges of data table? 
-        //    A way for user to clear the current selection.
-        //
-        int databot = tiy + table_h,
-        dataright = tix + table_w;
-        if ( 
-            ( _last_push_x > dataright && _event_x > dataright ) ||
-            ( _last_push_y > databot && _event_y > databot )
-            ) {
-          select_all_rows(0);			// clear previous selections
-        }
-      }
-      break;
-      
-    default:
-      break;
-  }
-  _last_y = _event_y;
-  return(ret);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tabs.cxx
+++ /dev/null
@@ -1,552 +1,0 @@
-//
-// "$Id$"
-//
-// Tab widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This is the "file card tabs" interface to allow you to put lots and lots
-// of buttons and switches in a panel, as popularized by many toolkits.
-
-// Each child widget is a card, and its label() is printed on the card tab.
-// Clicking the tab makes that card visible.
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Tooltip.H>
-
-#define BORDER 2
-#define EXTRASPACE 10
-#define SELECTION_BORDER 5
-
-// Return the left edges of each tab (plus a fake left edge for a tab
-// past the right-hand one).  These positions are actually of the left
-// edge of the slope.  They are either separated by the correct distance
-// or by EXTRASPACE or by zero.
-// These positions are updated in the private arrays tab_pos[] and
-// tab_width[], resp.. If needed, these arrays are (re)allocated.
-// Return value is the index of the selected item.
-
-int Fl_Tabs::tab_positions() {
-  const int nc = children();
-  if (nc != tab_count) {
-    clear_tab_positions();
-    if (nc) {
-      tab_pos   = (int*)malloc((nc+1)*sizeof(int));
-      tab_width = (int*)malloc((nc+1)*sizeof(int));
-    }
-    tab_count = nc;
-  }
-  if (nc == 0) return 0;
-  int selected = 0;
-  Fl_Widget*const* a = array();
-  int i;
-  char prev_draw_shortcut = fl_draw_shortcut;
-  fl_draw_shortcut = 1;
-
-  tab_pos[0] = Fl::box_dx(box());
-  for (i=0; i<nc; i++) {
-    Fl_Widget* o = *a++;
-    if (o->visible()) selected = i;
-
-    int wt = 0; int ht = 0;
-    o->measure_label(wt,ht);
-
-    tab_width[i] = wt + EXTRASPACE;
-    tab_pos[i+1] = tab_pos[i] + tab_width[i] + BORDER;
-  }
-  fl_draw_shortcut = prev_draw_shortcut;
-
-  int r = w();
-  if (tab_pos[i] <= r) return selected;
-  // uh oh, they are too big:
-  // pack them against right edge:
-  tab_pos[i] = r;
-  for (i = nc; i--;) {
-    int l = r-tab_width[i];
-    if (tab_pos[i+1] < l) l = tab_pos[i+1];
-    if (tab_pos[i] <= l) break;
-    tab_pos[i] = l;
-    r -= EXTRASPACE;
-  }
-  // pack them against left edge and truncate width if they still don't fit:
-  for (i = 0; i<nc; i++) {
-    if (tab_pos[i] >= i*EXTRASPACE) break;
-    tab_pos[i] = i*EXTRASPACE;
-    int W = w()-1-EXTRASPACE*(nc-i) - tab_pos[i];
-    if (tab_width[i] > W) tab_width[i] = W;
-  }
-  // adjust edges according to visiblity:
-  for (i = nc; i > selected; i--) {
-    tab_pos[i] = tab_pos[i-1] + tab_width[i-1];
-  }
-  return selected;
-}
-
-// Returns space (height) in pixels needed for tabs. Negative to put them on the bottom.
-// Returns full height, if children() = 0.
-int Fl_Tabs::tab_height() {
-  if (children() == 0) return h();
-  int H = h();
-  int H2 = y();
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o->y() < y()+H) H = o->y()-y();
-    if (o->y()+o->h() > H2) H2 = o->y()+o->h();
-  }
-  H2 = y()+h()-H2;
-  if (H2 > H) return (H2 <= 0) ? 0 : -H2;
-  else return (H <= 0) ? 0 : H;
-}
-
-/**
-  Return the widget of the tab the user clicked on at \p event_x / \p event_y.
-  This is used for event handling (clicks) and by fluid to pick tabs.
-
-  \returns The child widget of the tab the user clicked on, or<br>
-           0 if there are no children or if the event is outside of the tabs area.
-*/
-Fl_Widget *Fl_Tabs::which(int event_x, int event_y) {
-  if (children() == 0) return 0;
-  int H = tab_height();
-  if (H < 0) {
-    if (event_y > y()+h() || event_y < y()+h()+H) return 0;
-  } else {
-    if (event_y > y()+H || event_y < y()) return 0;
-  }
-  if (event_x < x()) return 0;
-  Fl_Widget *ret = 0L;
-  const int nc = children();
-  tab_positions();
-  for (int i=0; i<nc; i++) {
-    if (event_x < x()+tab_pos[i+1]) {
-      ret = child(i);
-      break;
-    }
-  }
-  return ret;
-}
-
-void Fl_Tabs::redraw_tabs()
-{
-  int H = tab_height();
-  if (H >= 0) {
-    H += Fl::box_dy(box());
-    damage(FL_DAMAGE_SCROLL, x(), y(), w(), H);
-  } else {
-    H = Fl::box_dy(box()) - H;
-    damage(FL_DAMAGE_SCROLL, x(), y() + h() - H, w(), H);
-  }
-}
-
-int Fl_Tabs::handle(int event) {
-
-  Fl_Widget *o;
-  int i;
-
-  switch (event) {
-
-  case FL_PUSH: {
-    int H = tab_height();
-    if (H >= 0) {
-      if (Fl::event_y() > y()+H) return Fl_Group::handle(event);
-    } else {
-      if (Fl::event_y() < y()+h()+H) return Fl_Group::handle(event);
-    }}
-    /* FALLTHROUGH */
-  case FL_DRAG:
-  case FL_RELEASE:
-    o = which(Fl::event_x(), Fl::event_y());
-    if (event == FL_RELEASE) {
-      push(0);
-      if (o && Fl::visible_focus() && Fl::focus()!=this) {
-        Fl::focus(this);
-        redraw_tabs();
-      }
-      if (o &&                              // Released on a tab and..
-          (value(o) ||                      // tab changed value or..
-	   (when()&(FL_WHEN_NOT_CHANGED))   // ..no change but WHEN_NOT_CHANGED set,
-	  )                                 // handles FL_WHEN_RELEASE_ALWAYS too.
-	 ) {
-        Fl_Widget_Tracker wp(o);
-        set_changed();
-	do_callback();
-	if (wp.deleted()) return 1;
-      }
-      Fl_Tooltip::current(o);
-    } else {
-      push(o);
-    }
-    return 1;
-  case FL_MOVE: {
-    int ret = Fl_Group::handle(event);
-    Fl_Widget *o = Fl_Tooltip::current(), *n = o;
-    int H = tab_height();
-    if ( (H>=0) && (Fl::event_y()>y()+H) )
-      return ret;
-    else if ( (H<0) && (Fl::event_y() < y()+h()+H) )
-      return ret;
-    else {
-      n = which(Fl::event_x(), Fl::event_y());
-      if (!n) n = this;
-    }
-    if (n!=o)
-      Fl_Tooltip::enter(n);
-    return ret; }
-  case FL_FOCUS:
-  case FL_UNFOCUS:
-    if (!Fl::visible_focus()) return Fl_Group::handle(event);
-    if (Fl::event() == FL_RELEASE ||
-	Fl::event() == FL_SHORTCUT ||
-	Fl::event() == FL_KEYBOARD ||
-	Fl::event() == FL_FOCUS ||
-	Fl::event() == FL_UNFOCUS) {
-      redraw_tabs();
-      if (Fl::event() == FL_FOCUS) return Fl_Group::handle(event);
-      if (Fl::event() == FL_UNFOCUS) return 0;
-      else return 1;
-    } else return Fl_Group::handle(event);
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-      case FL_Left:
-	if (!children()) return 0;
-	if (child(0)->visible()) return 0;
-	for (i = 1; i < children(); i ++)
-	  if (child(i)->visible()) break;
-	value(child(i - 1));
-	set_changed();
-	do_callback();
-        return 1;
-      case FL_Right:
-	if (!children()) return 0;
-	if (child(children() - 1)->visible()) return 0;
-	for (i = 0; i < children(); i ++)
-	  if (child(i)->visible()) break;
-	value(child(i + 1));
-	set_changed();
-	do_callback();
-        return 1;
-      case FL_Down:
-        redraw();
-        return Fl_Group::handle(FL_FOCUS);
-      default:
-        break;
-    }
-    return Fl_Group::handle(event);
-  case FL_SHORTCUT:
-    for (i = 0; i < children(); ++i) {
-      Fl_Widget *c = child(i);
-      if (c->test_shortcut(c->label())) {
-        char sc = !c->visible();
-        value(c);
-        if (sc) set_changed();
-        do_callback();
-        return 1;
-      }
-    }
-    return Fl_Group::handle(event);
-  case FL_SHOW:
-    value(); // update visibilities and fall through
-  default:
-    return Fl_Group::handle(event);
-
-  }
-}
-
-/**
-  This is called by the tab widget's handle() method to set the
-  tab group widget the user last FL_PUSH'ed on. Set back to zero
-  on FL_RELEASE.
-
-  As of this writing, the value is mainly used by draw_tab()
-  to determine whether or not to draw a 'down' box for the tab
-  when it's clicked, and to turn it off if the user drags off it.
-
-  \see push().
-*/
-int Fl_Tabs::push(Fl_Widget *o) {
-  if (push_ == o) return 0;
-  if ( (push_ && !push_->visible()) || (o && !o->visible()) )
-    redraw_tabs();
-  push_ = o;
-  return 1;
-}
-
-/**
-  Gets the currently visible widget/tab.
-
-  The value() is the first visible child (or the last child if none
-  are visible) and this also hides any other children.
-  This allows the tabs to be deleted, moved to other groups, and
-  show()/hide() called without it screwing up.
-*/
-Fl_Widget* Fl_Tabs::value() {
-  Fl_Widget* v = 0;
-  Fl_Widget*const* a = array();
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (v) o->hide();
-    else if (o->visible()) v = o;
-    else if (!i) {o->show(); v = o;}
-  }
-  return v;
-}
-
-/**
-  Sets the widget to become the current visible widget/tab.
-  Setting the value hides all other children, and makes this one
-  visible, if it is really a child.
-  \returns 1 if there was a change (new value different from previous),<BR>
-           0 if there was no change (new value already set)
-*/
-int Fl_Tabs::value(Fl_Widget *newvalue) {
-  Fl_Widget*const* a = array();
-  int ret = 0;
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    if (o == newvalue) {
-      if (!o->visible()) ret = 1;
-      o->show();
-    } else {
-      o->hide();
-    }
-  }
-  return ret;
-}
-
-enum {LEFT, RIGHT, SELECTED};
-
-void Fl_Tabs::draw() {
-  Fl_Widget *v = value();
-  int H = tab_height();
-
-  if (damage() & FL_DAMAGE_ALL) { // redraw the entire thing:
-    Fl_Color c = v ? v->color() : color();
-
-    draw_box(box(), x(), y()+(H>=0?H:0), w(), h()-(H>=0?H:-H), c);
-
-    if (selection_color() != c) {
-      // Draw the top or bottom SELECTION_BORDER lines of the tab pane in the
-      // selection color so that the user knows which tab is selected...
-      int clip_y = (H >= 0) ? y() + H : y() + h() + H - SELECTION_BORDER;
-      fl_push_clip(x(), clip_y, w(), SELECTION_BORDER);
-      draw_box(box(), x(), clip_y, w(), SELECTION_BORDER, selection_color());
-      fl_pop_clip();
-    }
-    if (v) draw_child(*v);
-  } else { // redraw the child
-    if (v) update_child(*v);
-  }
-  if (damage() & (FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) {
-    const int nc = children();
-    int selected = tab_positions();
-    int i;
-    Fl_Widget*const* a = array();
-    for (i=0; i<selected; i++)
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], LEFT);
-    for (i=nc-1; i > selected; i--)
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], RIGHT);
-    if (v) {
-      i = selected;
-      draw_tab(x()+tab_pos[i], x()+tab_pos[i+1],
-               tab_width[i], H, a[i], SELECTED);
-    }
-  }
-}
-
-void Fl_Tabs::draw_tab(int x1, int x2, int W, int H, Fl_Widget* o, int what) {
-  int sel = (what == SELECTED);
-  int dh = Fl::box_dh(box());
-  int dy = Fl::box_dy(box());
-  char prev_draw_shortcut = fl_draw_shortcut;
-  fl_draw_shortcut = 1;
-
-  Fl_Boxtype bt = (o==push_ &&!sel) ? fl_down(box()) : box();
-
-  // compute offsets to make selected tab look bigger
-  int yofs = sel ? 0 : BORDER;
-
-  if ((x2 < x1+W) && what == RIGHT) x1 = x2 - W;
-
-  if (H >= 0) {
-    if (sel) fl_push_clip(x1, y(), x2 - x1, H + dh - dy);
-    else fl_push_clip(x1, y(), x2 - x1, H);
-
-    H += dh;
-
-    Fl_Color c = sel ? selection_color() : o->selection_color();
-
-    draw_box(bt, x1, y() + yofs, W, H + 10 - yofs, c);
-
-    // Save the previous label color
-    Fl_Color oc = o->labelcolor();
-
-    // Draw the label using the current color...
-    o->labelcolor(sel ? labelcolor() : o->labelcolor());
-    o->draw_label(x1, y() + yofs, W, H - yofs, FL_ALIGN_CENTER);
-
-    // Restore the original label color...
-    o->labelcolor(oc);
-
-    if (Fl::focus() == this && o->visible())
-      draw_focus(box(), x1, y(), W, H);
-
-    fl_pop_clip();
-  } else {
-    H = -H;
-
-    if (sel) fl_push_clip(x1, y() + h() - H - dy, x2 - x1, H + dy);
-    else fl_push_clip(x1, y() + h() - H, x2 - x1, H);
-
-    H += dh;
-
-    Fl_Color c = sel ? selection_color() : o->selection_color();
-
-    draw_box(bt, x1, y() + h() - H - 10, W, H + 10 - yofs, c);
-
-    // Save the previous label color
-    Fl_Color oc = o->labelcolor();
-
-    // Draw the label using the current color...
-    o->labelcolor(sel ? labelcolor() : o->labelcolor());
-    o->draw_label(x1, y() + h() - H, W, H - yofs, FL_ALIGN_CENTER);
-
-    // Restore the original label color...
-    o->labelcolor(oc);
-
-    if (Fl::focus() == this && o->visible())
-      draw_focus(box(), x1, y() + h() - H, W, H);
-
-    fl_pop_clip();
-  }
-  fl_draw_shortcut = prev_draw_shortcut;
-}
-
-/**
-  Creates a new Fl_Tabs widget using the given position, size,
-  and label string. The default boxtype is FL_THIN_UP_BOX.
-
-  Use add(Fl_Widget*) to add each child, which are usually
-  Fl_Group widgets. The children should be sized to stay
-  away from the top or bottom edge of the Fl_Tabs widget,
-  which is where the tabs will be drawn.
-
-  All children of Fl_Tabs should have the same size and exactly fit on top of
-  each other. They should only leave space above or below where the tabs will
-  go, but not on the sides. If the first child of Fl_Tabs is set to
-  "resizable()", the riders will not resize when the tabs are resized.
-
-  The destructor <I>also deletes all the children</I>. This
-  allows a whole tree to be deleted at once, without having to
-  keep a pointer to all the children in the user code. A kludge
-  has been done so the Fl_Tabs and all of its children
-  can be automatic (local) variables, but you must declare the
-  Fl_Tabs widget <I>first</I> so that it is destroyed last.
-*/
-Fl_Tabs::Fl_Tabs(int X,int Y,int W, int H, const char *l) :
-  Fl_Group(X,Y,W,H,l)
-{
-  box(FL_THIN_UP_BOX);
-#if FLTK_ABI_VERSION >= 10304
-  // NEW (nothing)
-#else
-  // OLD (init to prevent 'unused' warnings) -- STR #3169
-  value_ = 0;	// NOTE: this member unused -- STR #3169
-#endif
-  push_ = 0;
-  tab_pos = 0;
-  tab_width = 0;
-  tab_count = 0;
-}
-
-Fl_Tabs::~Fl_Tabs() {
-  clear_tab_positions();
-}
-
-/**
-  Returns the position and size available to be used by its children.
-
-  If there isn't any child yet the \p tabh parameter will be used to
-  calculate the return values. This assumes that the children's labelsize
-  is the same as the Fl_Tabs' labelsize and adds a small border.
-
-  If there are already children, the values of child(0) are returned, and
-  \p tabh is ignored.
-
-  \note Children should always use the same positions and sizes.
-
-  \p tabh can be one of
-  \li    0: calculate label size, tabs on top
-  \li   -1: calculate label size, tabs on bottom
-  \li >  0: use given \p tabh value, tabs on top (height = tabh)
-  \li < -1: use given \p tabh value, tabs on bottom (height = -tabh)
-
-  \param[in]	tabh		position and optional height of tabs (see above)
-  \param[out]	rx,ry,rw,rh	(x,y,w,h) of client area for children
-
-  \since	FLTK 1.3.0
-*/
-void Fl_Tabs::client_area(int &rx, int &ry, int &rw, int &rh, int tabh) {
-
-  if (children()) {			// use existing values
-
-    rx = child(0)->x();
-    ry = child(0)->y();
-    rw = child(0)->w();
-    rh = child(0)->h();
-
-  } else {				// calculate values
-
-    int y_offset;
-    int label_height = fl_height(labelfont(), labelsize()) + BORDER*2;
-
-    if (tabh == 0)			// use default (at top)
-      y_offset = label_height;
-    else if (tabh == -1)	 	// use default (at bottom)
-      y_offset = -label_height;
-    else
-      y_offset = tabh;			// user given value
-
-    rx = x();
-    rw = w();
-
-    if (y_offset >= 0) {		// labels at top
-      ry = y() + y_offset;
-      rh = h() - y_offset;
-    } else {				// labels at bottom
-      ry = y();
-      rh = h() + y_offset;
-    }
-  }
-}
-
-void Fl_Tabs::clear_tab_positions() {
-  if (tab_pos) {
-    free(tab_pos);
-    tab_pos = 0;
-  }
-  if (tab_width){
-    free(tab_width);
-    tab_width = 0;
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Text_Buffer.cxx
+++ /dev/null
@@ -1,1806 +1,0 @@
-//
-// "$Id$"
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/fl_ask.H>
-
-
-/*
- This file is based on a port of NEdit to FLTK many years ago. NEdit at that
- point was already stretched beyond the task it was designed for which explains
- why the source code is sometimes pretty convoluted. It still is a very useful
- widget for FLTK, and we are thankful that the nedit team allowed us to 
- integrate their code.
-
- With the introduction of Unicode and UTF-8, Fl_Text_... has to go into a whole
- new generation of code. Originally designed for monospaced fonts only, many
- features make less sense in the multibyte and multiwidth world of UTF-8.
-
- Columns are a good example. There is simply no such thing. The new Fl_Text_...
- widget converts columns to pixels by multiplying them with the average 
- character width for a given font.
-
- Rectangular selections were rarely used (if at all) and make little sense when
- using variable width fonts. They have been removed.
-
- Using multiple spaces to emulate tab stops has been replaced by pixel counting
- routines. They are slower, but give the expected result for proportional fonts.
-
- And constantly recalculating character widths is just much too expensive. Lines
- of text are now subdivided into blocks of text which are measured at once 
- instead of individual characters. 
- */
-
-
-#ifndef min
-
-static int max(int i1, int i2)
-{
-  return i1 >= i2 ? i1 : i2;
-}
-
-static int min(int i1, int i2)
-{
-  return i1 <= i2 ? i1 : i2;
-}
-
-#endif
-
-
-static char *undobuffer;
-static int undobufferlength;
-static Fl_Text_Buffer *undowidget;
-static int undoat;		// points after insertion
-static int undocut;		// number of characters deleted there
-static int undoinsert;		// number of characters inserted
-static int undoyankcut;		// length of valid contents of buffer, even if undocut=0
-
-/*
- Resize the undo buffer to match at least the requested size.
- */
-static void undobuffersize(int n)
-{
-  if (n > undobufferlength) {
-    if (undobuffer) {
-      do {
-	undobufferlength *= 2;
-      } while (undobufferlength < n);
-      undobuffer = (char *) realloc(undobuffer, undobufferlength);
-    } else {
-      undobufferlength = n + 9;
-      undobuffer = (char *) malloc(undobufferlength);
-    }
-  }
-}
-
-static void def_transcoding_warning_action(Fl_Text_Buffer *text)
-{
-  fl_alert("%s", text->file_encoding_warning_message);
-}
-
-/*
- Initialize all variables.
- */
-Fl_Text_Buffer::Fl_Text_Buffer(int requestedSize, int preferredGapSize)
-{
-  mLength = 0;
-  mPreferredGapSize = preferredGapSize;
-  mBuf = (char *) malloc(requestedSize + mPreferredGapSize);
-  mGapStart = 0;
-  mGapEnd = requestedSize + mPreferredGapSize;
-  mTabDist = 8;
-  mPrimary.mSelected = 0;
-  mPrimary.mStart = mPrimary.mEnd = 0;
-  mSecondary.mSelected = 0;
-  mSecondary.mStart = mSecondary.mEnd = 0;
-  mHighlight.mSelected = 0;
-  mHighlight.mStart = mHighlight.mEnd = 0;
-  mModifyProcs = NULL;
-  mCbArgs = NULL;
-  mNModifyProcs = 0;
-  mNPredeleteProcs = 0;
-  mPredeleteProcs = NULL;
-  mPredeleteCbArgs = NULL;
-  mCursorPosHint = 0;
-  mCanUndo = 1;
-  input_file_was_transcoded = 0;
-  transcoding_warning_action = def_transcoding_warning_action;
-}
-
-
-/*
- Free all resources.
- */
-Fl_Text_Buffer::~Fl_Text_Buffer()
-{
-  free(mBuf);
-  if (mNModifyProcs != 0) {
-    delete[]mModifyProcs;
-    delete[]mCbArgs;
-  }
-  if (mNPredeleteProcs > 0) {
-    delete[] mPredeleteProcs;
-    delete[] mPredeleteCbArgs;
-  }
-}
-
-
-/*
- This function copies verbose whatever is in front and after the gap into a
- single buffer.
- */
-char *Fl_Text_Buffer::text() const {
-  char *t = (char *) malloc(mLength + 1);
-  memcpy(t, mBuf, mGapStart);
-  memcpy(t+mGapStart, mBuf+mGapEnd, mLength - mGapStart);
-  t[mLength] = '\0';
-  return t;
-} 
-
-
-/*
- Set the text buffer to a new string.
- */
-void Fl_Text_Buffer::text(const char *t)
-{
-  IS_UTF8_ALIGNED(t)
-
-  // if t is null then substitute it with an empty string
-  // then don't return so that internal cleanup can happen
-  if (!t) t="";
-
-  call_predelete_callbacks(0, length());
-  
-  /* Save information for redisplay, and get rid of the old buffer */
-  const char *deletedText = text();
-  int deletedLength = mLength;
-  free((void *) mBuf);
-  
-  /* Start a new buffer with a gap of mPreferredGapSize at the end */
-  int insertedLength = (int) strlen(t);
-  mBuf = (char *) malloc(insertedLength + mPreferredGapSize);
-  mLength = insertedLength;
-  mGapStart = insertedLength;
-  mGapEnd = mGapStart + mPreferredGapSize;
-  memcpy(mBuf, t, insertedLength);
-  
-  /* Zero all of the existing selections */
-  update_selections(0, deletedLength, 0);
-  
-  /* Call the saved display routine(s) to update the screen */
-  call_modify_callbacks(0, deletedLength, insertedLength, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Creates a range of text to a new buffer and copies verbose from around the gap.
- */
-char *Fl_Text_Buffer::text_range(int start, int end) const {
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))
-  
-  char *s = NULL;
-  
-  /* Make sure start and end are ok, and allocate memory for returned string.
-   If start is bad, return "", if end is bad, adjust it. */
-  if (start < 0 || start > mLength)
-  {
-    s = (char *) malloc(1);
-    s[0] = '\0';
-    return s;
-  }
-  if (end < start) {
-    int temp = start;
-    start = end;
-    end = temp;
-  }
-  if (end > mLength)
-    end = mLength;
-  int copiedLength = end - start;
-  s = (char *) malloc(copiedLength + 1);
-  
-  /* Copy the text from the buffer to the returned string */
-  if (end <= mGapStart) {
-    memcpy(s, mBuf + start, copiedLength);
-  } else if (start >= mGapStart) {
-    memcpy(s, mBuf + start + (mGapEnd - mGapStart), copiedLength);
-  } else {
-    int part1Length = mGapStart - start;
-    memcpy(s, mBuf + start, part1Length);
-    memcpy(s + part1Length, mBuf + mGapEnd, copiedLength - part1Length);
-  }
-  s[copiedLength] = '\0';
-  return s;
-}
-
-/*
- Return a UCS-4 character at the given index.
- Pos must be at a character boundary.
- */
-unsigned int Fl_Text_Buffer::char_at(int pos) const {  
-  if (pos < 0 || pos >= mLength)
-    return '\0';
-  
-  IS_UTF8_ALIGNED2(this, (pos))
-  
-  const char *src = address(pos);
-  return fl_utf8decode(src, 0, 0);
-} 
-
-
-/*
- Return the raw byte at the given index.
- This function ignores all unicode encoding.
- */
-char Fl_Text_Buffer::byte_at(int pos) const {
-  if (pos < 0 || pos >= mLength)
-    return '\0';
-  const char *src = address(pos);
-  return *src;
-} 
-
-
-/*
- Insert some text at the given index.
- Pos must be at a character boundary.
-*/
-void Fl_Text_Buffer::insert(int pos, const char *text)
-{
-  IS_UTF8_ALIGNED2(this, (pos))
-  IS_UTF8_ALIGNED(text)
-  
-  /* check if there is actually any text */
-  if (!text || !*text)
-    return;
-  
-  /* if pos is not contiguous to existing text, make it */
-  if (pos > mLength)
-    pos = mLength;
-  if (pos < 0)
-    pos = 0;
-  
-  /* Even if nothing is deleted, we must call these callbacks */
-  call_predelete_callbacks(pos, 0);
-  
-  /* insert and redisplay */
-  int nInserted = insert_(pos, text);
-  mCursorPosHint = pos + nInserted;
-  IS_UTF8_ALIGNED2(this, (mCursorPosHint))
-  call_modify_callbacks(pos, 0, nInserted, 0, NULL);
-}
-
-
-/*
- Replace a range of text with new text.
- Start and end must be at a character boundary.
-*/
-void Fl_Text_Buffer::replace(int start, int end, const char *text)
-{
-  // Range check...
-  if (!text)
-    return;
-  if (start < 0)
-    start = 0;
-  if (end > mLength)
-    end = mLength;
-
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))
-  IS_UTF8_ALIGNED(text)
-  
-  call_predelete_callbacks(start, end - start);
-  const char *deletedText = text_range(start, end);
-  remove_(start, end);
-  int nInserted = insert_(start, text);
-  mCursorPosHint = start + nInserted;
-  call_modify_callbacks(start, end - start, nInserted, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Remove a range of text.
- Start and End must be at a character boundary.
-*/
-void Fl_Text_Buffer::remove(int start, int end)
-{
-  /* Make sure the arguments make sense */
-  if (start > end) {
-    int temp = start;
-    start = end;
-    end = temp;
-  }
-  if (start > mLength)
-    start = mLength;
-  if (start < 0)
-    start = 0;
-  if (end > mLength)
-    end = mLength;
-  if (end < 0)
-    end = 0;
-
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))  
-  
-  if (start == end)
-    return;
-  
-  call_predelete_callbacks(start, end - start);
-  /* Remove and redisplay */
-  const char *deletedText = text_range(start, end);
-  remove_(start, end);
-  mCursorPosHint = start;
-  call_modify_callbacks(start, end - start, 0, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Copy a range of text from another text buffer.
- fromStart, fromEnd, and toPos must be at a character boundary.
- */
-void Fl_Text_Buffer::copy(Fl_Text_Buffer * fromBuf, int fromStart,
-			  int fromEnd, int toPos)
-{
-  IS_UTF8_ALIGNED2(fromBuf, fromStart)
-  IS_UTF8_ALIGNED2(fromBuf, fromEnd)
-  IS_UTF8_ALIGNED2(this, (toPos))
-  
-  int copiedLength = fromEnd - fromStart;
-  
-  /* Prepare the buffer to receive the new text.  If the new text fits in
-   the current buffer, just move the gap (if necessary) to where
-   the text should be inserted.  If the new text is too large, reallocate
-   the buffer with a gap large enough to accomodate the new text and a
-   gap of mPreferredGapSize */
-  if (copiedLength > mGapEnd - mGapStart)
-    reallocate_with_gap(toPos, copiedLength + mPreferredGapSize);
-  else if (toPos != mGapStart)
-    move_gap(toPos);
-  
-  /* Insert the new text (toPos now corresponds to the start of the gap) */
-  if (fromEnd <= fromBuf->mGapStart) {
-    memcpy(&mBuf[toPos], &fromBuf->mBuf[fromStart], copiedLength);
-  } else if (fromStart >= fromBuf->mGapStart) {
-    memcpy(&mBuf[toPos],
-	   &fromBuf->mBuf[fromStart + (fromBuf->mGapEnd - fromBuf->mGapStart)],
-	   copiedLength);
-  } else {
-    int part1Length = fromBuf->mGapStart - fromStart;
-    memcpy(&mBuf[toPos], &fromBuf->mBuf[fromStart], part1Length);
-    memcpy(&mBuf[toPos + part1Length],
-	   &fromBuf->mBuf[fromBuf->mGapEnd], copiedLength - part1Length);
-  }
-  mGapStart += copiedLength;
-  mLength += copiedLength;
-  update_selections(toPos, 0, copiedLength);
-}
-
-
-/*
- Take the previous changes and undo them. Return the previous
- cursor position in cursorPos. Returns 1 if the undo was applied.
- CursorPos will be at a character boundary.
- */ 
-int Fl_Text_Buffer::undo(int *cursorPos)
-{
-  if (undowidget != this || (!undocut && !undoinsert && !mCanUndo))
-    return 0;
-  
-  int ilen = undocut;
-  int xlen = undoinsert;
-  int b = undoat - xlen;
-  
-  if (xlen && undoyankcut && !ilen) {
-    ilen = undoyankcut;
-  }
-  
-  if (xlen && ilen) {
-    undobuffersize(ilen + 1);
-    undobuffer[ilen] = 0;
-    char *tmp = strdup(undobuffer);
-    replace(b, undoat, tmp);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-    free(tmp);
-  } else if (xlen) {
-    remove(b, undoat);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-  } else if (ilen) {
-    undobuffersize(ilen + 1);
-    undobuffer[ilen] = 0;
-    insert(undoat, undobuffer);
-    if (cursorPos)
-      *cursorPos = mCursorPosHint;
-    undoyankcut = 0;
-  }
-  
-  return 1;
-}
-
-
-/*
- Set a flag if undo function will work.
- */
-void Fl_Text_Buffer::canUndo(char flag)
-{
-  mCanUndo = flag;
-  // disabling undo also clears the last undo operation!
-  if (!mCanUndo && undowidget==this) 
-    undowidget = 0;
-}
-
-
-/*
- Change the tab width. This will cause a couple of callbacks and a complete 
- redisplay. 
- Matt: I am not entirely sure why we need to trigger callbacks because
- tabs are only a graphical hint, not changing any text at all, but I leave
- this in here for back compatibility. 
- */
-void Fl_Text_Buffer::tab_distance(int tabDist)
-{
-  /* First call the pre-delete callbacks with the previous tab setting 
-   still active. */
-  call_predelete_callbacks(0, mLength);
-  
-  /* Change the tab setting */
-  mTabDist = tabDist;
-  
-  /* Force any display routines to redisplay everything (unfortunately,
-   this means copying the whole buffer contents to provide "deletedText" */
-  const char *deletedText = text();
-  call_modify_callbacks(0, mLength, mLength, 0, deletedText);
-  free((void *) deletedText);
-}
-
-
-/*
- Select a range of text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::select(int start, int end)
-{
-  IS_UTF8_ALIGNED2(this, (start))
-  IS_UTF8_ALIGNED2(this, (end))  
-  
-  Fl_Text_Selection oldSelection = mPrimary;
-  
-  mPrimary.set(start, end);
-  redisplay_selection(&oldSelection, &mPrimary);
-}
-
-
-/*
- Clear the primary selection.
- */
-void Fl_Text_Buffer::unselect()
-{
-  Fl_Text_Selection oldSelection = mPrimary;
-  
-  mPrimary.mSelected = 0;
-  redisplay_selection(&oldSelection, &mPrimary);
-}
-
-  
-/*
- Return the primary selection range.
- */
-int Fl_Text_Buffer::selection_position(int *start, int *end)
-{
-  return mPrimary.position(start, end);
-}
-
-
-/*
- Return a copy of the selected text.
- */
-char *Fl_Text_Buffer::selection_text()
-{
-  return selection_text_(&mPrimary);
-}
-
-
-/*
- Remove the selected text.
- */
-void Fl_Text_Buffer::remove_selection()
-{
-  remove_selection_(&mPrimary);
-}
-
-
-/*
- Replace the selected text.
- */
-void Fl_Text_Buffer::replace_selection(const char *text)
-{
-  replace_selection_(&mPrimary, text);
-}
-
-
-/*
- Select text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::secondary_select(int start, int end)
-{
-  Fl_Text_Selection oldSelection = mSecondary;
-  
-  mSecondary.set(start, end);
-  redisplay_selection(&oldSelection, &mSecondary);
-}
-
-
-/*
- Deselect text.
- */
-void Fl_Text_Buffer::secondary_unselect()
-{
-  Fl_Text_Selection oldSelection = mSecondary;
-  
-  mSecondary.mSelected = 0;
-  redisplay_selection(&oldSelection, &mSecondary);
-}
-
-  
-/*
- Return the selected range.
- */
-int Fl_Text_Buffer::secondary_selection_position(int *start, int *end)
-{
-  return mSecondary.position(start, end);
-}
-
-
-/*
- Return a copy of the text in this selection.
- */
-char *Fl_Text_Buffer::secondary_selection_text()
-{
-  return selection_text_(&mSecondary);
-}
-
-
-/*
- Remove the selected text.
- */
-void Fl_Text_Buffer::remove_secondary_selection()
-{
-  remove_selection_(&mSecondary);
-}
-
-
-/*
- Replace selected text.
- */
-void Fl_Text_Buffer::replace_secondary_selection(const char *text)
-{
-  replace_selection_(&mSecondary, text);
-}
-
-
-/*
- Highlight a range of text.
- Start and End must be at a character boundary.
- */
-void Fl_Text_Buffer::highlight(int start, int end)
-{
-  Fl_Text_Selection oldSelection = mHighlight;
-  
-  mHighlight.set(start, end);
-  redisplay_selection(&oldSelection, &mHighlight);
-}
-
-
-/*
- Remove text highlighting.
- */
-void Fl_Text_Buffer::unhighlight()
-{
-  Fl_Text_Selection oldSelection = mHighlight;
-  
-  mHighlight.mSelected = 0;
-  redisplay_selection(&oldSelection, &mHighlight);
-}
-
-  
-/*
- Return position of highlight.
- */
-int Fl_Text_Buffer::highlight_position(int *start, int *end)
-{
-  return mHighlight.position(start, end);
-}
-
-
-/*
- Return a copy of highlighted text.
- */
-char *Fl_Text_Buffer::highlight_text()
-{
-  return selection_text_(&mHighlight);
-}
-
-
-/*
- Add a callback that is called whenever text is modified.
- */
-void Fl_Text_Buffer::add_modify_callback(Fl_Text_Modify_Cb bufModifiedCB,
-					 void *cbArg)
-{
-  Fl_Text_Modify_Cb *newModifyProcs =
-  new Fl_Text_Modify_Cb[mNModifyProcs + 1];
-  void **newCBArgs = new void *[mNModifyProcs + 1];
-  for (int i = 0; i < mNModifyProcs; i++) {
-    newModifyProcs[i + 1] = mModifyProcs[i];
-    newCBArgs[i + 1] = mCbArgs[i];
-  }
-  if (mNModifyProcs != 0) {
-    delete[]mModifyProcs;
-    delete[]mCbArgs;
-  }
-  newModifyProcs[0] = bufModifiedCB;
-  newCBArgs[0] = cbArg;
-  mNModifyProcs++;
-  mModifyProcs = newModifyProcs;
-  mCbArgs = newCBArgs;
-}
-
-
-/*
- Remove a callback.
- */
-void Fl_Text_Buffer::remove_modify_callback(Fl_Text_Modify_Cb bufModifiedCB, 
-                                            void *cbArg)
-{
-  int i, toRemove = -1;
-  
-  /* find the matching callback to remove */
-  for (i = 0; i < mNModifyProcs; i++) {
-    if (mModifyProcs[i] == bufModifiedCB && mCbArgs[i] == cbArg) {
-      toRemove = i;
-      break;
-    }
-  }
-  if (toRemove == -1) {
-    Fl::error
-    ("Fl_Text_Buffer::remove_modify_callback(): Can't find modify CB to remove");
-    return;
-  }
-  
-  /* Allocate new lists for remaining callback procs and args (if
-   any are left) */
-  mNModifyProcs--;
-  if (mNModifyProcs == 0) {
-    mNModifyProcs = 0;
-    delete[]mModifyProcs;
-    mModifyProcs = NULL;
-    delete[]mCbArgs;
-    mCbArgs = NULL;
-    return;
-  }
-  Fl_Text_Modify_Cb *newModifyProcs = new Fl_Text_Modify_Cb[mNModifyProcs];
-  void **newCBArgs = new void *[mNModifyProcs];
-  
-  /* copy out the remaining members and free the old lists */
-  for (i = 0; i < toRemove; i++) {
-    newModifyProcs[i] = mModifyProcs[i];
-    newCBArgs[i] = mCbArgs[i];
-  }
-  for (; i < mNModifyProcs; i++) {
-    newModifyProcs[i] = mModifyProcs[i + 1];
-    newCBArgs[i] = mCbArgs[i + 1];
-  }
-  delete[]mModifyProcs;
-  delete[]mCbArgs;
-  mModifyProcs = newModifyProcs;
-  mCbArgs = newCBArgs;
-}
-
-
-/*
- Add a callback that is called before deleting text.
- */
-void Fl_Text_Buffer::add_predelete_callback(Fl_Text_Predelete_Cb bufPreDeleteCB, 
-                                            void *cbArg)
-{
-  Fl_Text_Predelete_Cb *newPreDeleteProcs =
-  new Fl_Text_Predelete_Cb[mNPredeleteProcs + 1];
-  void **newCBArgs = new void *[mNPredeleteProcs + 1];
-  for (int i = 0; i < mNPredeleteProcs; i++) {
-    newPreDeleteProcs[i + 1] = mPredeleteProcs[i];
-    newCBArgs[i + 1] = mPredeleteCbArgs[i];
-  }
-  if (mNPredeleteProcs > 0) {
-    delete[] mPredeleteProcs;
-    delete[] mPredeleteCbArgs;
-  }
-  newPreDeleteProcs[0] = bufPreDeleteCB;
-  newCBArgs[0] = cbArg;
-  mNPredeleteProcs++;
-  mPredeleteProcs = newPreDeleteProcs;
-  mPredeleteCbArgs = newCBArgs;
-}
-
-
-/*
- Remove a callback.
- */
-void Fl_Text_Buffer::remove_predelete_callback(Fl_Text_Predelete_Cb bufPreDeleteCB, void *cbArg)
-{
-  int i, toRemove = -1;
-  /* find the matching callback to remove */
-  for (i = 0; i < mNPredeleteProcs; i++) {
-    if (mPredeleteProcs[i] == bufPreDeleteCB &&
-	mPredeleteCbArgs[i] == cbArg) {
-      toRemove = i;
-      break;
-    }
-  }
-  if (toRemove == -1) {
-    Fl::error
-    ("Fl_Text_Buffer::remove_predelete_callback(): Can't find pre-delete CB to remove");
-    return;
-  }
-  
-  /* Allocate new lists for remaining callback procs and args (if any are left) */
-  mNPredeleteProcs--;
-  if (mNPredeleteProcs == 0) {
-    delete[]mPredeleteProcs;
-    mPredeleteProcs = NULL;
-    delete[]mPredeleteCbArgs;
-    mPredeleteCbArgs = NULL;
-    return;
-  }
-  Fl_Text_Predelete_Cb *newPreDeleteProcs = new Fl_Text_Predelete_Cb[mNPredeleteProcs];
-  void **newCBArgs = new void *[mNPredeleteProcs];
-  
-  /* copy out the remaining members and free the old lists */
-  for (i = 0; i < toRemove; i++) {
-    newPreDeleteProcs[i] = mPredeleteProcs[i];
-    newCBArgs[i] = mPredeleteCbArgs[i];
-  }
-  for (; i < mNPredeleteProcs; i++) {
-    newPreDeleteProcs[i] = mPredeleteProcs[i + 1];
-    newCBArgs[i] = mPredeleteCbArgs[i + 1];
-  }
-  delete[] mPredeleteProcs;
-  delete[] mPredeleteCbArgs;
-  mPredeleteProcs = newPreDeleteProcs;
-  mPredeleteCbArgs = newCBArgs;
-}
-
-
-/*
- Return a copy of the line that contains a given index.
- Pos must be at a character boundary.
- */
-char *Fl_Text_Buffer::line_text(int pos) const {
-  return text_range(line_start(pos), line_end(pos));
-} 
-
-
-/*
- Find the beginning of the line.
- */
-int Fl_Text_Buffer::line_start(int pos) const 
-{
-  if (!findchar_backward(pos, '\n', &pos))
-    return 0;
-  return pos + 1;
-} 
-
-
-/*
- Find the end of the line.
- */
-int Fl_Text_Buffer::line_end(int pos) const {
-  if (!findchar_forward(pos, '\n', &pos))
-    pos = mLength;
-  return pos;
-} 
-
-
-/*
- Find the beginning of a word.
- NOT UNICODE SAFE.
- */
-int Fl_Text_Buffer::word_start(int pos) const {
-  // FIXME: character is ucs-4
-  while (pos>0 && (isalnum(char_at(pos)) || char_at(pos) == '_')) {
-    pos = prev_char(pos);
-  } 
-  // FIXME: character is ucs-4
-  if (!(isalnum(char_at(pos)) || char_at(pos) == '_'))
-    pos = next_char(pos);
-  return pos;
-}
-
-
-/*
- Find the end of a word.
- NOT UNICODE SAFE.
- */
-int Fl_Text_Buffer::word_end(int pos) const {
-  // FIXME: character is ucs-4
-  while (pos < length() && (isalnum(char_at(pos)) || char_at(pos) == '_'))
-  {
-    pos = next_char(pos);
-  }
-  return pos;
-}
-
-
-/*
- Count the number of characters between two positions.
- */
-int Fl_Text_Buffer::count_displayed_characters(int lineStartPos,
-					       int targetPos) const
-{
-  IS_UTF8_ALIGNED2(this, (lineStartPos))
-  IS_UTF8_ALIGNED2(this, (targetPos))
-  
-  int charCount = 0;
-  
-  int pos = lineStartPos;
-  while (pos < targetPos) {
-    pos = next_char(pos);
-    charCount++;
-  }
-  return charCount;
-} 
-
-
-/*
- Skip ahead a number of characters from a given index.
- This function breaks early if it encounters a newline character.
- */
-int Fl_Text_Buffer::skip_displayed_characters(int lineStartPos, int nChars)
-{
-  IS_UTF8_ALIGNED2(this, (lineStartPos))
-
-  int pos = lineStartPos;
-  
-  for (int charCount = 0; charCount < nChars && pos < mLength; charCount++) {
-    unsigned int c = char_at(pos);
-    if (c == '\n')
-      return pos;
-    pos = next_char(pos);
-  }
-  return pos;
-}
-
-
-/*
- Count the number of newline characters between start and end.
- startPos and endPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::count_lines(int startPos, int endPos) const {
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED2(this, (endPos))
-  
-  int gapLen = mGapEnd - mGapStart;
-  int lineCount = 0;
-  
-  int pos = startPos;
-  while (pos < mGapStart)
-  {
-    if (pos == endPos)
-      return lineCount;
-    if (mBuf[pos++] == '\n')
-      lineCount++;
-  } 
-  while (pos < mLength) {
-    if (pos == endPos)
-      return lineCount;
-    if (mBuf[pos++ + gapLen] == '\n')
-      lineCount++;
-  }
-  return lineCount;
-}
-
-
-/*
- Skip to the first character, n lines ahead.
- StartPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::skip_lines(int startPos, int nLines)
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  
-  if (nLines == 0)
-    return startPos;
-  
-  int gapLen = mGapEnd - mGapStart;
-  int pos = startPos;
-  int lineCount = 0;
-  while (pos < mGapStart) {
-    if (mBuf[pos++] == '\n') {
-      lineCount++;
-      if (lineCount == nLines) {
-        IS_UTF8_ALIGNED2(this, (pos))
-	return pos;
-      }
-    }
-  }
-  while (pos < mLength) {
-    if (mBuf[pos++ + gapLen] == '\n') {
-      lineCount++;
-      if (lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos))
-	return pos;
-      }
-    }
-  }
-  IS_UTF8_ALIGNED2(this, (pos))
-  return pos;
-}
-
-
-/*
- Skip to the first character, n lines back.
- StartPos must be at a character boundary.
- This function is optimized for speed by not using UTF-8 calls.
- */
-int Fl_Text_Buffer::rewind_lines(int startPos, int nLines)
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  
-  int pos = startPos - 1;
-  if (pos <= 0)
-    return 0;
-  
-  int gapLen = mGapEnd - mGapStart;
-  int lineCount = -1;
-  while (pos >= mGapStart) {
-    if (mBuf[pos + gapLen] == '\n') {
-      if (++lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos+1))
-	return pos + 1;
-      }
-    }
-    pos--;
-  }
-  while (pos >= 0) {
-    if (mBuf[pos] == '\n') {
-      if (++lineCount >= nLines) {
-        IS_UTF8_ALIGNED2(this, (pos+1))
-	return pos + 1;
-      }
-    }
-    pos--;
-  }
-  return 0;
-}
-
-
-/*
- Find a matching string in the buffer.
- */
-int Fl_Text_Buffer::search_forward(int startPos, const char *searchString,
-				   int *foundPos, int matchCase) const 
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED(searchString)
-  
-  if (!searchString)
-    return 0;
-  int bp;
-  const char *sp;
-  if (matchCase) {
-    while (startPos < length()) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        char c = *sp;
-        // we reached the end of the "needle", so we found the string!
-        if (!c) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l = fl_utf8len1(c);
-        if (memcmp(sp, address(bp), l))
-          break;
-        sp += l; bp += l;
-      }
-      startPos = next_char(startPos);
-    }
-  } else {
-    while (startPos < length()) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        // we reached the end of the "needle", so we found the string!
-        if (!*sp) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l;
-        unsigned int b = char_at(bp);
-        unsigned int s = fl_utf8decode(sp, 0, &l);
-        if (fl_tolower(b)!=fl_tolower(s))
-          break;
-        sp += l; 
-        bp = next_char(bp);
-      }
-      startPos = next_char(startPos);
-    }
-  }  
-  return 0;
-}
-
-int Fl_Text_Buffer::search_backward(int startPos, const char *searchString,
-				    int *foundPos, int matchCase) const 
-{
-  IS_UTF8_ALIGNED2(this, (startPos))
-  IS_UTF8_ALIGNED(searchString)
-  
-  if (!searchString)
-    return 0;
-  int bp;
-  const char *sp;
-  if (matchCase) {
-    while (startPos >= 0) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        char c = *sp;
-        // we reached the end of the "needle", so we found the string!
-        if (!c) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l = fl_utf8len1(c);
-        if (memcmp(sp, address(bp), l))
-          break;
-        sp += l; bp += l;
-      }
-      startPos = prev_char(startPos);
-    }
-  } else {
-    while (startPos >= 0) {
-      bp = startPos;
-      sp = searchString;
-      for (;;) {
-        // we reached the end of the "needle", so we found the string!
-        if (!*sp) {
-          *foundPos = startPos;
-          return 1;
-        }
-        int l;
-        unsigned int b = char_at(bp);
-        unsigned int s = fl_utf8decode(sp, 0, &l);
-        if (fl_tolower(b)!=fl_tolower(s))
-          break;
-        sp += l; 
-        bp = next_char(bp);
-      }
-      startPos = prev_char(startPos);
-    }
-  }  
-  return 0;
-}
-
-
-
-/*
- Insert a string into the buffer.
- Pos must be at a character boundary. Text must be a correct UTF-8 string.
- */
-int Fl_Text_Buffer::insert_(int pos, const char *text)
-{
-  if (!text || !*text)
-    return 0;
-  
-  int insertedLength = (int) strlen(text);
-  
-  /* Prepare the buffer to receive the new text.  If the new text fits in
-   the current buffer, just move the gap (if necessary) to where
-   the text should be inserted.  If the new text is too large, reallocate
-   the buffer with a gap large enough to accomodate the new text and a
-   gap of mPreferredGapSize */
-  if (insertedLength > mGapEnd - mGapStart)
-    reallocate_with_gap(pos, insertedLength + mPreferredGapSize);
-  else if (pos != mGapStart)
-    move_gap(pos);
-  
-  /* Insert the new text (pos now corresponds to the start of the gap) */
-  memcpy(&mBuf[pos], text, insertedLength);
-  mGapStart += insertedLength;
-  mLength += insertedLength;
-  update_selections(pos, 0, insertedLength);
-  
-  if (mCanUndo) {
-    if (undowidget == this && undoat == pos && undoinsert) {
-      undoinsert += insertedLength;
-    } else {
-      undoinsert = insertedLength;
-      undoyankcut = (undoat == pos) ? undocut : 0;
-    }
-    undoat = pos + insertedLength;
-    undocut = 0;
-    undowidget = this;
-  }
-  
-  return insertedLength;
-}
-
-
-/*
- Remove a string from the buffer.
- Unicode safe. Start and end must be at a character boundary.
- */
-void Fl_Text_Buffer::remove_(int start, int end)
-{
-  /* if the gap is not contiguous to the area to remove, move it there */
-  
-  if (mCanUndo) {
-    if (undowidget == this && undoat == end && undocut) {
-      undobuffersize(undocut + end - start + 1);
-      memmove(undobuffer + end - start, undobuffer, undocut);
-      undocut += end - start;
-    } else {
-      undocut = end - start;
-      undobuffersize(undocut);
-    }
-    undoat = start;
-    undoinsert = 0;
-    undoyankcut = 0;
-    undowidget = this;
-  }
-  
-  if (start > mGapStart) {
-    if (mCanUndo)
-      memcpy(undobuffer, mBuf + (mGapEnd - mGapStart) + start,
-	     end - start);
-    move_gap(start);
-  } else if (end < mGapStart) {
-    if (mCanUndo)
-      memcpy(undobuffer, mBuf + start, end - start);
-    move_gap(end);
-  } else {
-    int prelen = mGapStart - start;
-    if (mCanUndo) {
-      memcpy(undobuffer, mBuf + start, prelen);
-      memcpy(undobuffer + prelen, mBuf + mGapEnd, end - start - prelen);
-    }
-  }
-  
-  /* expand the gap to encompass the deleted characters */
-  mGapEnd += end - mGapStart;
-  mGapStart -= mGapStart - start;
-  
-  /* update the length */
-  mLength -= end - start;
-  
-  /* fix up any selections which might be affected by the change */
-  update_selections(start, end - start, 0);
-}
-
-  
-/*
- simple setter.
- Unicode safe. Start and end must be at a character boundary.
- */
-void Fl_Text_Selection::set(int startpos, int endpos)
-{
-  mSelected = startpos != endpos;
-  mStart = min(startpos, endpos);
-  mEnd = max(startpos, endpos);
-}
-
-
-/*
- simple getter.
- Unicode safe. Start and end will be at a character boundary.
- */
-int Fl_Text_Selection::position(int *startpos, int *endpos) const {
-  if (!mSelected)
-    return 0;
-  *startpos = mStart;
-  *endpos = mEnd;
-  
-  return 1;
-} 
-
-
-/*
- Return if a position is inside the selected area.
- Unicode safe. Pos must be at a character boundary.
- */
-int Fl_Text_Selection::includes(int pos) const {
-  return (selected() && pos >= start() && pos < end() );
-}
-
-
-/*
- Return a duplicate of the selected text, or an empty string.
- Unicode safe.
- */
-char *Fl_Text_Buffer::selection_text_(Fl_Text_Selection * sel) const {
-  int start, end;
-  
-  /* If there's no selection, return an allocated empty string */
-  if (!sel->position(&start, &end))
-  {
-    char *s = (char *) malloc(1);
-    *s = '\0';
-    return s;
-  }
-  
-  /* Return the selected range */
-    return text_range(start, end);
-}
-
-
-/*
- Remove the selected text.
- Unicode safe.
- */
-void Fl_Text_Buffer::remove_selection_(Fl_Text_Selection * sel)
-{
-  int start, end;
-  
-  if (!sel->position(&start, &end))
-    return;
-  remove(start, end);
-  //undoyankcut = undocut;
-}
-
-
-/*
- Replace selection with text.
- Unicode safe.
- */
-void Fl_Text_Buffer::replace_selection_(Fl_Text_Selection * sel,
-					const char *text)
-{
-  Fl_Text_Selection oldSelection = *sel;
-  
-  /* If there's no selection, return */
-  int start, end;
-  if (!sel->position(&start, &end))
-    return;
-  
-  /* Do the appropriate type of replace */
-    replace(start, end, text);
-  
-  /* Unselect (happens automatically in BufReplace, but BufReplaceRect
-   can't detect when the contents of a selection goes away) */
-  sel->mSelected = 0;
-  redisplay_selection(&oldSelection, sel);
-}
-
-  
-/*
- Call all callbacks.
- Unicode safe.
- */
-void Fl_Text_Buffer::call_modify_callbacks(int pos, int nDeleted,
-					   int nInserted, int nRestyled,
-					   const char *deletedText) const {
-  IS_UTF8_ALIGNED2(this, pos)
-  for (int i = 0; i < mNModifyProcs; i++)
-    (*mModifyProcs[i]) (pos, nInserted, nDeleted, nRestyled,
-			deletedText, mCbArgs[i]);
-} 
-
-
-/*
- Call all callbacks.
- Unicode safe.
- */
-void Fl_Text_Buffer::call_predelete_callbacks(int pos, int nDeleted) const {
-  for (int i = 0; i < mNPredeleteProcs; i++)
-    (*mPredeleteProcs[i]) (pos, nDeleted, mPredeleteCbArgs[i]);
-} 
-
-
-/*
- Redisplay a new selected area.
- Unicode safe.
- */
-void Fl_Text_Buffer::redisplay_selection(Fl_Text_Selection *
-					   oldSelection,
-					   Fl_Text_Selection *
-					   newSelection) const
-{
-  int oldStart, oldEnd, newStart, newEnd, ch1Start, ch1End, ch2Start,
-  ch2End;
-  
-  /* If either selection is rectangular, add an additional character to
-   the end of the selection to request the redraw routines to wipe out
-   the parts of the selection beyond the end of the line */
-  oldStart = oldSelection->mStart;
-  newStart = newSelection->mStart;
-  oldEnd = oldSelection->mEnd;
-  newEnd = newSelection->mEnd;
-  
-  /* If the old or new selection is unselected, just redisplay the
-   single area that is (was) selected and return */
-  if (!oldSelection->mSelected && !newSelection->mSelected)
-    return;
-  if (!oldSelection->mSelected)
-  {
-    call_modify_callbacks(newStart, 0, 0, newEnd - newStart, NULL);
-    return;
-  }
-  if (!newSelection->mSelected) {
-    call_modify_callbacks(oldStart, 0, 0, oldEnd - oldStart, NULL);
-    return;
-  }
-  
-  /* If the selections are non-contiguous, do two separate updates
-   and return */
-  if (oldEnd < newStart || newEnd < oldStart) {
-    call_modify_callbacks(oldStart, 0, 0, oldEnd - oldStart, NULL);
-    call_modify_callbacks(newStart, 0, 0, newEnd - newStart, NULL);
-    return;
-  }
-  
-  /* Otherwise, separate into 3 separate regions: ch1, and ch2 (the two
-   changed areas), and the unchanged area of their intersection,
-   and update only the changed area(s) */
-  ch1Start = min(oldStart, newStart);
-  ch2End = max(oldEnd, newEnd);
-  ch1End = max(oldStart, newStart);
-  ch2Start = min(oldEnd, newEnd);
-  if (ch1Start != ch1End)
-    call_modify_callbacks(ch1Start, 0, 0, ch1End - ch1Start, NULL);
-  if (ch2Start != ch2End)
-    call_modify_callbacks(ch2Start, 0, 0, ch2End - ch2Start, NULL);
-}
-
-
-/*
- Move the gap around without changing buffer content.
- Unicode safe. Pos must be at a character boundary.
- */
-void Fl_Text_Buffer::move_gap(int pos)
-{
-  int gapLen = mGapEnd - mGapStart;
-  
-  if (pos > mGapStart)
-    memmove(&mBuf[mGapStart], &mBuf[mGapEnd], pos - mGapStart);
-  else
-    memmove(&mBuf[pos + gapLen], &mBuf[pos], mGapStart - pos);
-  mGapEnd += pos - mGapStart;
-  mGapStart += pos - mGapStart;
-}
-
-
-/*
- Create a larger gap.
- Unicode safe. Start must be at a character boundary.
- */
-void Fl_Text_Buffer::reallocate_with_gap(int newGapStart, int newGapLen)
-{
-  char *newBuf = (char *) malloc(mLength + newGapLen);
-  int newGapEnd = newGapStart + newGapLen;
-  
-  if (newGapStart <= mGapStart) {
-    memcpy(newBuf, mBuf, newGapStart);
-    memcpy(&newBuf[newGapEnd], &mBuf[newGapStart],
-	   mGapStart - newGapStart);
-    memcpy(&newBuf[newGapEnd + mGapStart - newGapStart],
-	   &mBuf[mGapEnd], mLength - mGapStart);
-  } else {			/* newGapStart > mGapStart */
-    memcpy(newBuf, mBuf, mGapStart);
-    memcpy(&newBuf[mGapStart], &mBuf[mGapEnd], newGapStart - mGapStart);
-    memcpy(&newBuf[newGapEnd],
-	   &mBuf[mGapEnd + newGapStart - mGapStart],
-	   mLength - newGapStart);
-  }
-  free((void *) mBuf);
-  mBuf = newBuf;
-  mGapStart = newGapStart;
-  mGapEnd = newGapEnd;
-}
-
-
-/*
- Update selection range if characters were inserted.
- Unicode safe. Pos must be at a character boundary.
- */
-void Fl_Text_Buffer::update_selections(int pos, int nDeleted,
-				       int nInserted)
-{
-  mPrimary.update(pos, nDeleted, nInserted);
-  mSecondary.update(pos, nDeleted, nInserted);
-  mHighlight.update(pos, nDeleted, nInserted);
-}
-
-
-// unicode safe, assuming the arguments are on character boundaries
-void Fl_Text_Selection::update(int pos, int nDeleted, int nInserted)
-{
-  if (!mSelected || pos > mEnd)
-    return;
-  if (pos + nDeleted <= mStart) {
-    mStart += nInserted - nDeleted;
-    mEnd += nInserted - nDeleted;
-  } else if (pos <= mStart && pos + nDeleted >= mEnd) {
-    mStart = pos;
-    mEnd = pos;
-    mSelected = 0;
-  } else if (pos <= mStart && pos + nDeleted < mEnd) {
-    mStart = pos;
-    mEnd = nInserted + mEnd - nDeleted;
-  } else if (pos < mEnd) {
-    mEnd += nInserted - nDeleted;
-    if (mEnd <= mStart)
-      mSelected = 0;
-  }
-}
-
-
-/*
- Find a UCS-4 character.
- StartPos must be at a character boundary, searchChar is UCS-4 encoded.
- */
-int Fl_Text_Buffer::findchar_forward(int startPos, unsigned searchChar,
-				     int *foundPos) const 
-{
-  if (startPos >= mLength) {
-    *foundPos = mLength;
-    return 0;
-  }
-  
-  if (startPos<0)
-    startPos = 0;
-  
-  for ( ; startPos<mLength; startPos = next_char(startPos)) {
-    if (searchChar == char_at(startPos)) {
-      *foundPos = startPos;
-      return 1;
-    }
-  }
-  
-  *foundPos = mLength;
-  return 0;
-}
-
-  
-/*
- Find a UCS-4 character.
- StartPos must be at a character boundary, searchChar is UCS-4 encoded.
- */
-int Fl_Text_Buffer::findchar_backward(int startPos, unsigned int searchChar,
-				      int *foundPos) const {
-  if (startPos <= 0) {
-    *foundPos = 0;
-    return 0;
-  }
-  
-  if (startPos > mLength)
-    startPos = mLength;
-  
-  for (startPos = prev_char(startPos); startPos>=0; startPos = prev_char(startPos)) {
-    if (searchChar == char_at(startPos)) {
-      *foundPos = startPos;
-      return 1;
-    }
-  }
-  
-  *foundPos = 0;
-  return 0;
-}
-
-//#define EXAMPLE_ENCODING // shows how to process any encoding for which a decoding function exists
-#ifdef EXAMPLE_ENCODING 
-
-// returns the UCS equivalent of *p in CP1252 and advances p by 1
-unsigned cp1252toucs(char* &p)
-{
-  // Codes 0x80..0x9f from the Microsoft CP1252 character set, translated
-  // to Unicode
-  static unsigned cp1252[32] = {
-    0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-    0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f,
-    0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-    0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178
-  };
-  unsigned char uc = *(unsigned char*)p;
-  p++;
-  return (uc < 0x80 || uc >= 0xa0 ? uc : cp1252[uc - 0x80]);
-}
-
-// returns the UCS equivalent of *p in UTF-16 and advances p by 2 (or more for surrogates)
-unsigned utf16toucs(char* &p)
-{
-  union {
-#if WORDS_BIGENDIAN
-    struct { unsigned char a, b;} chars;
-#else
-    struct { unsigned char b, a;} chars;
-#endif
-    U16 short_val;
-  } u;
-  u.chars.a = *(unsigned char*)p++;
-  u.chars.b = *(unsigned char*)p++;
-  return u.short_val;
-}
-
-// filter that produces, from an input stream fed by reading from fp,
-// a UTF-8-encoded output stream written in buffer.
-// Input can be any (e.g., 8-bit, UTF-16) encoding.
-// Output is true UTF-8.
-// p_trf points to a function that transforms encoded byte(s) into one UCS
-// and that increases the pointer by the adequate quantity
-static int general_input_filter(char *buffer, int buflen, 
-				 char *line, int sline, char* &endline, 
-				 unsigned (*p_trf)(char* &),
-				 FILE *fp)
-{
-  char *p, *q, multibyte[5];
-  int lq, r, offset;
-  p = line;
-  q = buffer;
-  while (q < buffer + buflen) {
-    if (p >= endline) {
-      r = fread(line, 1, sline, fp);
-      endline = line + r; 
-      if (r == 0) return q - buffer;
-      p = line;
-    }
-    if (q + 4 /*max width of utf-8 char*/ > buffer + buflen) {
-      memmove(line, p, endline - p);
-      endline -= (p - line);
-      return q - buffer;
-    }
-    lq = fl_utf8encode( p_trf(p), multibyte );
-    memcpy(q, multibyte, lq);
-    q += lq; 
-  }
-  memmove(line, p, endline - p);
-  endline -= (p - line);
-  return q - buffer;
-}
-#endif // EXAMPLE_ENCODING
-
-/*
- filter that produces, from an input stream fed by reading from fp,
- a UTF-8-encoded output stream written in buffer.
- Returns #bytes read into 'buffer'.
-
- Input can be UTF-8. If it is not, it is decoded with CP1252.
- Output is UTF-8.
-
- *input_was_changed returns true if input was not strict UTF-8, so output
- differs from input.
- */
-static int utf8_input_filter(char *buffer, 		// result buffer we fill with utf8 encoded text
-			     int buflen,		// max size of buffer from caller
-			     char *line,		// file line buffer caller wants us to use
-			     int sline, 		// max size of line buffer
-			     char* &endline, 		// keeps track of leftovers in line[] buffer between calls
-	                     FILE *fp,			// open file we're reading data from
-			     int *input_was_changed)	// returned flag: 'true' if buffer[] different from file due to utf8 encoding
-{
-  // p - work pointer to line[]
-  // q - work pointer to buffer[]
-  // l - length of utf8 sequence being worked on
-  // lp - fl_utf8decode() length of utf8 sequence being worked on
-  // lq - fl_utf8encode() length of utf8 sequence being worked on
-  // r - bytes read from last fread()
-  // u - utf8 decoded sequence as a single multibyte unsigned integer
-  char *p, *q, multibyte[5];
-  int l, lp, lq, r;
-  unsigned u;
-  p = line;
-  q = buffer;
-  while (q < buffer + buflen) {
-    if (p >= endline) {			// walked off end of input file's line buffer?
-      r = (int) fread(line, 1, sline, fp);	// read another block of sline bytes from file
-      endline = line + r; 
-      if (r == 0) return (int) (q - buffer);	// EOF? return bytes read into buffer[]
-      p = line;
-    }
-    // Predict length of utf8 sequence
-    //    See if utf8 seq we're working on would extend off end of line buffer,
-    //    and if so, adjust + load more data so that it doesn't.
-    //
-    l = fl_utf8len1(*p);		// anticipate length of utf8 sequence
-    if (p + l > endline) {		// would walk off end of line buffer?
-      memmove(line, p, endline - p);	// re-jigger line buffer to get some room
-      endline -= (p - line);
-      r = (int) fread(endline, 1, sline - (endline - line), fp);	 // re-fill line buffer
-      endline += r;
-      p = line;
-      if (endline - line < l) break;	// sequence *still* extends past end? stop loop
-    }
-    while ( l > 0) {
-      u = fl_utf8decode(p, p+l, &lp);	// get single utf8 encoded char as a Unicode value
-      lq = fl_utf8encode(u, multibyte);	// re-encode Unicode value to utf8 in multibyte[]
-      if (lp != l || lq != l) *input_was_changed = true;
-
-      if (q + lq > buffer + buflen) {	// encoding would walk off end of buffer[]?
-	memmove(line, p, endline - p);	// re-jigger line[] buffer for next call
-	endline -= (p - line);		// adjust end of line[] buffer for next call
-	return (int) (q - buffer);		// return what's decoded so far, caller will consume buffer
-      }
-      memcpy(q, multibyte, lq);
-      q += lq; 
-      p += lp;
-      l -= lp;
-    }
-  }
-  memmove(line, p, endline - p);
-  endline -= (p - line);
-  return (int) (q - buffer);
-}
-
-const char *Fl_Text_Buffer::file_encoding_warning_message = 
-"Displayed text contains the UTF-8 transcoding\n"
-"of the input file which was not UTF-8 encoded.\n"
-"Some changes may have occurred.";
-
-/*
- Insert text from a file.
- Input file can be of various encodings according to what input fiter is used.
- utf8_input_filter accepts UTF-8 or CP1252 as input encoding.
- Output is always UTF-8.
- */
- int Fl_Text_Buffer::insertfile(const char *file, int pos, int buflen)
-{
-  FILE *fp;
-  if (!(fp = fl_fopen(file, "r")))
-    return 1;
-  char *buffer = new char[buflen + 1];  
-  char *endline, line[100];
-  int l;
-  input_file_was_transcoded = false;
-  endline = line;
-  while (true) {
-#ifdef EXAMPLE_ENCODING
-    // example of 16-bit encoding: UTF-16
-    l = general_input_filter(buffer, buflen, 
-				  line, sizeof(line), endline, 
-				  utf16toucs, // use cp1252toucs to read CP1252-encoded files
-				  fp);
-    input_file_was_transcoded = true;
-#else
-    l = utf8_input_filter(buffer, buflen, line, sizeof(line), endline, 
-			  fp, &input_file_was_transcoded);
-#endif
-    if (l == 0) break;
-    buffer[l] = 0;
-    insert(pos, buffer);
-    pos += l;
-  }
-  int e = ferror(fp) ? 2 : 0;
-  fclose(fp);
-  delete[]buffer;
-  if ( (!e) && input_file_was_transcoded && transcoding_warning_action) {
-    transcoding_warning_action(this);
-  }
-  return e;
-}
-
-
-/*
- Write text to file.
- Unicode safe.
- */
-int Fl_Text_Buffer::outputfile(const char *file,
-			       int start, int end,
-			       int buflen) {
-  FILE *fp;
-  if (!(fp = fl_fopen(file, "w")))
-    return 1;
-  for (int n; (n = min(end - start, buflen)); start += n) {
-    const char *p = text_range(start, start + n);
-    int r = (int) fwrite(p, 1, n, fp);
-    free((void *) p);
-    if (r != n)
-      break;
-  }
-  
-  int e = ferror(fp) ? 2 : 0;
-  fclose(fp);
-  return e;
-}
-
-
-/*
- Return the previous character position.
- Unicode safe.
- */
-int Fl_Text_Buffer::prev_char_clipped(int pos) const
-{
-  if (pos<=0)
-    return 0;
-
-  IS_UTF8_ALIGNED2(this, (pos))  
-
-  char c;
-  do {
-    pos--;
-    if (pos==0)
-      return 0;
-    c = byte_at(pos);
-  } while ( (c&0xc0) == 0x80);
-  
-  IS_UTF8_ALIGNED2(this, (pos))  
-  return pos;
-}
-
-
-/*
- Return the previous character position.
- Returns -1 if the beginning of the buffer is reached.
- */
-int Fl_Text_Buffer::prev_char(int pos) const
-{
-  if (pos==0) return -1;
-  return prev_char_clipped(pos);
-}
-
-
-/*
- Return the next character position.
- Returns length() if the end of the buffer is reached.
- */
-int Fl_Text_Buffer::next_char(int pos) const
-{
-  IS_UTF8_ALIGNED2(this, (pos))  
-  int n = fl_utf8len1(byte_at(pos));
-  pos += n;
-  if (pos>=mLength)
-    return mLength;
-  IS_UTF8_ALIGNED2(this, (pos))  
-  return pos;
-}
-
-
-/*
- Return the next character position.
- If the end of the buffer is reached, it returns the current position.
- */
-int Fl_Text_Buffer::next_char_clipped(int pos) const
-{
-  return next_char(pos);
-}
-
-/*
- Align an index to the current UTF-8 boundary.
- */
-int Fl_Text_Buffer::utf8_align(int pos) const 
-{
-  char c = byte_at(pos);
-  while ( (c&0xc0) == 0x80) {
-    pos--;
-    c = byte_at(pos);
-  }
-  return pos;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Text_Display.cxx
+++ /dev/null
@@ -1,4136 +1,0 @@
-//
-// "$Id$"
-//
-// Copyright 2001-2016 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// TODO: rendering of the "optional hyphen"
-// TODO: font background color control via style buffer
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <limits.h>
-#include <ctype.h>
-#include <string.h>	// strdup()
-#include <FL/Fl.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_Window.H>
-
-#undef min
-#undef max
-
-// #define DEBUG
-// #define DEBUG2
-
-#define LINENUM_LEFT_OF_VSCROLL   	// uncomment this line ...
-// ... if you want the line numbers to be drawn left of the vertical
-// scrollbar (only if the vertical scrollbar is aligned left).
-// This is the default.
-// If not defined and the vertical scrollbar is aligned left, then the
-// scrollbar is positioned at the left border and the line numbers are
-// drawn between the scrollbar (left) and the text area (right).
-// If the vertical scrollbar is aligned right, then the line number
-// position is not affected by this definition.
-
-// Text area margins.  Left & right margins should be at least 3 so that
-// there is some room for the overhanging parts of the cursor!
-#define TOP_MARGIN 1
-#define BOTTOM_MARGIN 1
-#define LEFT_MARGIN 3
-#define RIGHT_MARGIN 3
-
-#define NO_HINT -1
-
-/* Masks for text drawing methods.  These are or'd together to form an
- integer which describes what drawing calls to use to draw a string */
-#define FILL_MASK         0x0100
-#define SECONDARY_MASK    0x0200
-#define PRIMARY_MASK      0x0400
-#define HIGHLIGHT_MASK    0x0800
-#define BG_ONLY_MASK      0x1000
-#define TEXT_ONLY_MASK    0x2000
-#define STYLE_LOOKUP_MASK   0xff
-
-/* Maximum displayable line length (how many characters will fit across the
- widest window).  This amount of memory is temporarily allocated from the
- stack in the draw_vline() method for drawing strings */
-#define MAX_DISP_LINE_LEN 1000
-
-static int max( int i1, int i2 );
-static int min( int i1, int i2 );
-static int countlines( const char *string );
-
-/* The variables below are used in a timer event to allow smooth
- scrolling of the text area when the pointer has left the area. */
-static int scroll_direction = 0;
-static int scroll_amount = 0;
-static int scroll_y = 0;
-static int scroll_x = 0;
-
-// CET - FIXME
-#define TMPFONTWIDTH 6
-
-
-
-/**
- \brief Creates a new text display widget.
-
- \param X, Y, W, H position and size of widget
- \param l label text, defaults to none
- */
-Fl_Text_Display::Fl_Text_Display(int X, int Y, int W, int H, const char* l)
-: Fl_Group(X, Y, W, H, l) {
-  int i;
-
-  mMaxsize = 0;
-  damage_range1_start = damage_range1_end = -1;
-  damage_range2_start = damage_range2_end = -1;
-  dragPos = dragging = 0;
-  dragType = DRAG_CHAR;
-  display_insert_position_hint = 0;
-  shortcut_ = 0;
-
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  box(FL_DOWN_FRAME);
-  textsize(FL_NORMAL_SIZE);
-  textcolor(FL_FOREGROUND_COLOR);
-  textfont(FL_HELVETICA);
-  set_flag(SHORTCUT_LABEL);
-
-  text_area.x = 0;
-  text_area.y = 0;
-  text_area.w = 0;
-  text_area.h = 0;
-
-  mVScrollBar = new Fl_Scrollbar(0,0,1,1);
-  mVScrollBar->callback((Fl_Callback*)v_scrollbar_cb, this);
-  mHScrollBar = new Fl_Scrollbar(0,0,1,1);
-  mHScrollBar->callback((Fl_Callback*)h_scrollbar_cb, this);
-  mHScrollBar->type(FL_HORIZONTAL);
-
-  end();
-
-  scrollbar_width(Fl::scrollbar_size());
-  scrollbar_align(FL_ALIGN_BOTTOM_RIGHT);
-
-  mCursorOn = 0;
-  mCursorPos = 0;
-  mCursorOldY = -100;
-  mCursorToHint = NO_HINT;
-  mCursorStyle = NORMAL_CURSOR;
-  mCursorPreferredXPos = -1;
-  mBuffer = 0;
-  mFirstChar = 0;
-  mLastChar = 0;
-  mNBufferLines = 0;
-  mTopLineNum = mTopLineNumHint = 1;
-  mAbsTopLineNum = 1;
-  mNeedAbsTopLineNum = 0;
-  mHorizOffset = mHorizOffsetHint = 0;
-
-  mCursor_color = FL_FOREGROUND_COLOR;
-
-  mStyleBuffer = 0;
-  mStyleTable = 0;
-  mNStyles = 0;
-  mNVisibleLines = 1;
-  mLineStarts = new int[mNVisibleLines];
-  mLineStarts[0] = 0;
-  for (i=1; i<mNVisibleLines; i++)
-    mLineStarts[i] = -1;
-  mSuppressResync = 0;
-  mNLinesDeleted = 0;
-  mModifyingTabDistance = 0;
-
-  mUnfinishedStyle = 0;
-  mUnfinishedHighlightCB = 0;
-  mHighlightCBArg = 0;
-
-  mLineNumLeft = mLineNumWidth = 0;
-  mContinuousWrap = 0;
-  mWrapMarginPix = 0;
-  mSuppressResync = mNLinesDeleted = mModifyingTabDistance = 0;
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_font_    = FL_HELVETICA;
-  linenumber_size_    = FL_NORMAL_SIZE;
-  linenumber_fgcolor_ = FL_INACTIVE_COLOR;
-  linenumber_bgcolor_ = 53;	// ~90% gray
-  linenumber_align_   = FL_ALIGN_RIGHT;
-  linenumber_format_  = strdup("%d");
-#endif
-}
-
-
-
-/**
- Free a text display and release its associated memory.
-
- Note, the text BUFFER that the text display displays is a separate
- entity and is not freed, nor are the style buffer or style table.
- */
-Fl_Text_Display::~Fl_Text_Display() {
-  if (scroll_direction) {
-    Fl::remove_timeout(scroll_timer_cb, this);
-    scroll_direction = 0;
-  }
-  if (mBuffer) {
-    mBuffer->remove_modify_callback(buffer_modified_cb, this);
-    mBuffer->remove_predelete_callback(buffer_predelete_cb, this);
-  }
-  if (mLineStarts) delete[] mLineStarts;
-#if FLTK_ABI_VERSION >= 10303
-  if (linenumber_format_) {
-    free((void*)linenumber_format_);
-    linenumber_format_ = 0;
-  }
-#endif
-}
-
-
-/**
- Set width of screen area for line numbers.
- Use to also enable/disable line numbers.
- A value of 0 disables line numbering, values >0 enable the line number display.
- \param width The new width of the area for line numbers to appear, in pixels.
-              0 disables line numbers (default)
-*/
-void Fl_Text_Display::linenumber_width(int width) {
-  if (width < 0) return;
-  mLineNumWidth = width;
-  resize(x(), y(), w(), h());	// triggers code to recalculate line#s
-}
-
-/**
- Return the screen area width provided for line numbers.
-*/
-int Fl_Text_Display::linenumber_width() const {
-  return mLineNumWidth;
-}
- 
-/**
- Set the font used for line numbers (if enabled).
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_font(Fl_Font val) {
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_font_ = val;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Return the font used for line numbers (if enabled).
-*/
-Fl_Font Fl_Text_Display::linenumber_font() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_font_;
-#else
-  return FL_HELVETICA;
-#endif
-}
-
-/**
- Set the font size used for line numbers (if enabled).
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_size(Fl_Fontsize val) {
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_size_ = val;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Return the font size used for line numbers (if enabled).
-*/
-Fl_Fontsize Fl_Text_Display::linenumber_size() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_size_;
-#else
-  return FL_NORMAL_SIZE;
-#endif
-}
-
-/**
- Set the foreground color used for line numbers (if enabled).
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_fgcolor(Fl_Color val) {
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_fgcolor_ = val;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Return the foreground color used for line numbers (if enabled).
-*/
-Fl_Color Fl_Text_Display::linenumber_fgcolor() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_fgcolor_;
-#else
-  return FL_INACTIVE_COLOR;
-#endif
-}
-
-/**
- Set the background color used for line numbers (if enabled).
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_bgcolor(Fl_Color val) {
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_bgcolor_ = val;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Returns the background color used for line numbers (if enabled).
-*/
-Fl_Color Fl_Text_Display::linenumber_bgcolor() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_bgcolor_;
-#else
-  return 53;	// hard coded ~90% gray
-#endif
-}
-
-/**
- Set alignment for line numbers (if enabled).
- Valid values are FL_ALIGN_LEFT, FL_ALIGN_CENTER or FL_ALIGN_RIGHT.
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_align(Fl_Align val) {
-#if FLTK_ABI_VERSION >= 10303
-  linenumber_align_ = val;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Returns the alignment used for line numbers (if enabled).
-*/
-Fl_Align Fl_Text_Display::linenumber_align() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_align_;
-#else
-  return FL_ALIGN_RIGHT;
-#endif
-}
-
-/**
- Sets the printf() style format string used for line numbers.
- Default is "%d" for normal unpadded decimal integers. 
-
- An internal copy of \p val is allocated and managed;
- it is automatically freed whenever a new value is assigned,
- or when the widget is destroyed.
- 
- The value of \p val must \a not be NULL.
-
- Example values:
-
-     - "%d"   -- For normal line numbers without padding (Default)
-     - "%03d" -- For 000 padding
-     - "%x"   -- For hexadecimal line numbers
-     - "%o"   -- For octal line numbers
-
- \version 1.3.3 ABI feature (ignored in 1.3.x unless FLTK_ABI_VERSION is 10303 or higher)
-*/
-void Fl_Text_Display::linenumber_format(const char* val) {
-#if FLTK_ABI_VERSION >= 10303
-  if ( linenumber_format_ ) free((void*)linenumber_format_);
-  linenumber_format_ = val ? strdup(val) : 0;
-#else
-  // do nothing
-#endif
-}
-
-/**
- Returns the line number printf() format string.
-*/
-const char* Fl_Text_Display::linenumber_format() const {
-#if FLTK_ABI_VERSION >= 10303
-  return linenumber_format_;
-#else
-  return "%d";
-#endif
-}
-
-/**
- Attach a text buffer to display, replacing the current buffer (if any)
- \param buf attach this text buffer
- */
-void Fl_Text_Display::buffer( Fl_Text_Buffer *buf ) {
-  /* If the text display is already displaying a buffer, clear it off
-   of the display and remove our callback from it */
-  if ( buf == mBuffer) return;
-  if ( mBuffer != 0 ) {
-    // we must provide a copy of the buffer that we are deleting!
-    char *deletedText = mBuffer->text();
-    buffer_modified_cb( 0, 0, mBuffer->length(), 0, deletedText, this );
-    free(deletedText);
-    mNBufferLines = 0;
-    mBuffer->remove_modify_callback( buffer_modified_cb, this );
-    mBuffer->remove_predelete_callback( buffer_predelete_cb, this );
-  }
-
-  /* Add the buffer to the display, and attach a callback to the buffer for
-   receiving modification information when the buffer contents change */
-  mBuffer = buf;
-  if (mBuffer) {
-    mBuffer->add_modify_callback( buffer_modified_cb, this );
-    mBuffer->add_predelete_callback( buffer_predelete_cb, this );
-
-    /* Update the display */
-    buffer_modified_cb( 0, buf->length(), 0, 0, 0, this );
-  }
-
-  /* Resize the widget to update the screen... */
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**
- \brief Attach (or remove) highlight information in text display and redisplay.
-
- Highlighting information consists of a style buffer which parallels the
- normal text buffer, but codes font and color information for the display;
- a style table which translates style buffer codes (indexed by buffer
- character - 'A') into fonts and colors; and a callback mechanism for
- as-needed highlighting, triggered by a style buffer entry of
- "unfinishedStyle".  Style buffer can trigger additional redisplay during
- a normal buffer modification if the buffer contains a primary Fl_Text_Selection
- (see extendRangeForStyleMods for more information on this protocol).
-
- Style buffers, tables and their associated memory are managed by the caller.
-
- Styles are ranged from 65 ('A') to 126.
-
- \param styleBuffer this buffer works in parallel to the text buffer. For every
-   character in the text buffer, the stye buffer has a byte at the same offset
-   that contains an index into an array of possible styles.
- \param styleTable a list of styles indexed by the style buffer
- \param nStyles number of styles in the style table
- \param unfinishedStyle if this style is found, the callback below is called
- \param unfinishedHighlightCB if a character with an unfinished style is found,
-   this callback will be called
- \param cbArg and optional argument for the callback above, usually a pointer
-   to the Text Display.
- */
-void Fl_Text_Display::highlight_data(Fl_Text_Buffer *styleBuffer,
-                                     const Style_Table_Entry *styleTable,
-                                     int nStyles, char unfinishedStyle,
-                                     Unfinished_Style_Cb unfinishedHighlightCB,
-                                     void *cbArg ) {
-  mStyleBuffer = styleBuffer;
-  mStyleTable = styleTable;
-  mNStyles = nStyles;
-  mUnfinishedStyle = unfinishedStyle;
-  mUnfinishedHighlightCB = unfinishedHighlightCB;
-  mHighlightCBArg = cbArg;
-  mColumnScale = 0;
-
-  mStyleBuffer->canUndo(0);
-  damage(FL_DAMAGE_EXPOSE);
-}
-
-
-
-/**
- \brief Find the longest line of all visible lines.
- \return the width of the longest visible line in pixels
- */
-int Fl_Text_Display::longest_vline() const {
-  int longest = 0;
-  for (int i = 0; i < mNVisibleLines; i++)
-    longest = max(longest, measure_vline(i));
-  return longest;
-}
-
-
-
-/**
- \brief Change the size of the displayed text area.
- Calling this function will trigger a recalculation of all lines visible and
- of all scrollbar sizes.
- \param X, Y, W, H new position and size of this widget
- */
-void Fl_Text_Display::resize(int X, int Y, int W, int H) {
-
-#ifdef DEBUG2
-  printf("\n");
-  printf("Fl_Text_Display::resize(X=%d, Y=%d, W=%d, H=%d)\n", X, Y, W, H);
-  printf("           current size(x=%d, y=%d, w=%d, h=%d)\n", x(), y(), w(), h());
-  printf("            box_d* size(x=%d, y=%d, w=%d, h=%d)\n",
-	 Fl::box_dx(box()),Fl::box_dy(box()),Fl::box_dw(box()),Fl::box_dh(box()));
-  printf("         text_area size(x=%d, y=%d, w=%d, h=%d)\n",
-	 text_area.x, text_area.y, text_area.w, text_area.h);
-  printf("    mContinuousWrap=%d, mWrapMarginPix=%d\n",
-	      mContinuousWrap, mWrapMarginPix);
-  fflush(stdout);
-#endif // DEBUG2
-
-  Fl_Widget::resize(X,Y,W,H);
-  if (!buffer()) return;
-
-  // did we have scrollbars initially?
-  unsigned int hscrollbarvisible = mHScrollBar->visible();
-  unsigned int vscrollbarvisible = mVScrollBar->visible();
-
-  int oldTAWidth = text_area.w;
-
-  X += Fl::box_dx(box());
-  Y += Fl::box_dy(box());
-  W -= Fl::box_dw(box());
-  H -= Fl::box_dh(box());
-
-  text_area.x = X + LEFT_MARGIN + mLineNumWidth;
-  text_area.y = Y + TOP_MARGIN;
-  text_area.w = W - LEFT_MARGIN - RIGHT_MARGIN - mLineNumWidth;
-  text_area.h = H - TOP_MARGIN - BOTTOM_MARGIN;
-
-  // Find the new maximum font height for this text display
-  int i;
-  for (i = 0, mMaxsize = fl_height(textfont(), textsize()); i < mNStyles; i++)
-    mMaxsize = max(mMaxsize, fl_height(mStyleTable[i].font, mStyleTable[i].size));
-
-  // try without scrollbars first
-  mVScrollBar->clear_visible();
-  mHScrollBar->clear_visible();
-
-#if (1) // optimization (experimental - seems to work well)
-
-  // Optimization: if the number of lines in the buffer does not fit in
-  // the display area, then we need a vertical scrollbar regardless of
-  // word wrapping. If we switch it on here, this saves one line counting
-  // run in wrap mode in the loop below ("... again ..."). This is important
-  // for large buffers that suffer from slow calculations of character width
-  // to determine line wrapping.
-
-  if (mContinuousWrap && !mWrapMarginPix) {
-
-    int nvlines = (text_area.h + mMaxsize - 1) / mMaxsize;
-    int nlines = buffer()->count_lines(0,buffer()->length());
-    if (nvlines < 1) nvlines = 1;
-    if (nlines >= nvlines-1) {
-      mVScrollBar->set_visible(); // we need a vertical scrollbar
-      text_area.w -= scrollbar_width();
-    }
-  }
-
-#endif // optimization
-
-  for (int again = 1; again;) {
-    again = 0;
-    /* In continuous wrap mode, a change in width affects the total number of
-     lines in the buffer, and can leave the top line number incorrect, and
-     the top character no longer pointing at a valid line start */
-
-#ifdef DEBUG2
-     printf("*** again ... text_area.w = %d, oldTAWidth = %d, diff = %d\n",
-	      text_area.w, oldTAWidth, text_area.w - oldTAWidth);
-#endif // DEBUG2
-
-    if (mContinuousWrap && !mWrapMarginPix && text_area.w != oldTAWidth) {
-
-      int oldFirstChar = mFirstChar;
-      mNBufferLines = count_lines(0, buffer()->length(), true);
-      mFirstChar = line_start(mFirstChar);
-      mTopLineNum = count_lines(0, mFirstChar, true)+1;
-      absolute_top_line_number(oldFirstChar);
-#ifdef DEBUG2
-      printf("    mNBufferLines=%d\n", mNBufferLines);
-#endif // DEBUG2
-
-    }
-
-    oldTAWidth = text_area.w;
-
-    /* reallocate and update the line starts array, which may have changed
-     size and / or contents.  */
-    int nvlines = (text_area.h + mMaxsize - 1) / mMaxsize;
-    if (nvlines < 1) nvlines = 1;
-    if (mNVisibleLines != nvlines) {
-      mNVisibleLines = nvlines;
-      if (mLineStarts) delete[] mLineStarts;
-      mLineStarts = new int [mNVisibleLines];
-    }
-
-    calc_line_starts(0, mNVisibleLines);
-    calc_last_char();
-
-    // figure the scrollbars
-    if (scrollbar_width()) {
-
-      /* Decide if the vertical scrollbar needs to be visible */
-      if (!mVScrollBar->visible() &&
-	  scrollbar_align() & (FL_ALIGN_LEFT|FL_ALIGN_RIGHT) &&
-	  mNBufferLines >= mNVisibleLines-1)
-      {
-	mVScrollBar->set_visible();
-	text_area.w -= scrollbar_width();
-	again = 1;
-      }
-
-      /*
-       Decide if the horizontal scrollbar needs to be visible. If the text
-       wraps at the right edge, do not draw a horizontal scrollbar. Otherwise, if there
-       is a vertical scrollbar, a horizontal is always created too.  This
-       is because the alternatives are unattractive:
-       * Dynamically creating a horizontal scrollbar based on the currently
-       visible lines is what the original nedit does, but it always wastes
-       space for the scrollbar even when it's not used.  Since the FLTK
-       widget dynamically allocates the space for the scrollbar and
-       rearranges the widget to make room for it, this would create a very
-       visually displeasing "bounce" effect when the vertical scrollbar is
-       dragged.  Trust me, I tried it and it looks really bad.
-       * The other alternative would be to keep track of what the longest
-       line in the entire buffer is and base the scrollbar on that.  I
-       didn't do this because I didn't see any easy way to do that using
-       the nedit code and this could involve a lengthy calculation for
-       large buffers.  If an efficient and non-costly way of doing this
-       can be found, this might be a way to go.
-       */
-      /* WAS: Suggestion: Try turning the horizontal scrollbar on when
-       you first see a line that is too wide in the window, but then
-       don't turn it off (ie mix both of your solutions). */
-
-      if (!mHScrollBar->visible() &&
-	  scrollbar_align() & (FL_ALIGN_TOP|FL_ALIGN_BOTTOM) &&
-          (mVScrollBar->visible() || longest_vline() > text_area.w))
-      {
-        char wrap_at_bounds = mContinuousWrap && (mWrapMarginPix<text_area.w);
-        if (!wrap_at_bounds) {
-          mHScrollBar->set_visible();
-          text_area.h -= scrollbar_width();
-          again = 1; // loop again to see if we now need vert. & recalc sizes
-        }
-      }
-    }
-  } // (... again ...)
-
-  // Calculate text area position, dependent on scrollbars and line numbers.
-  // Note: width and height have been calculated above.
-  text_area.x = X + mLineNumWidth + LEFT_MARGIN;
-  if (mVScrollBar->visible() && scrollbar_align() & FL_ALIGN_LEFT)
-    text_area.x += scrollbar_width();
-
-  text_area.y = Y + TOP_MARGIN;
-  if (mHScrollBar->visible() &&
-      scrollbar_align() & FL_ALIGN_TOP)
-    text_area.y += scrollbar_width();
-
-  // position and resize scrollbars
-  if (mVScrollBar->visible()) {
-    if (scrollbar_align() & FL_ALIGN_LEFT) {
-#ifdef LINENUM_LEFT_OF_VSCROLL
-      mVScrollBar->resize(text_area.x - LEFT_MARGIN - scrollbar_width(),
-#else
-      mVScrollBar->resize(X,
-#endif
-			  text_area.y - TOP_MARGIN,
-			  scrollbar_width(),
-			  text_area.h + TOP_MARGIN + BOTTOM_MARGIN);
-    } else {
-      mVScrollBar->resize(X+W-scrollbar_width(),
-			  text_area.y - TOP_MARGIN,
-			  scrollbar_width(),
-			  text_area.h + TOP_MARGIN + BOTTOM_MARGIN);
-    }
-  }
-
-  if (mHScrollBar->visible()) {
-    if (scrollbar_align() & FL_ALIGN_TOP) {
-      mHScrollBar->resize(text_area.x - LEFT_MARGIN,
-			  Y,
-			  text_area.w + LEFT_MARGIN + RIGHT_MARGIN,
-			  scrollbar_width());
-    } else {
-      mHScrollBar->resize(text_area.x - LEFT_MARGIN,
-			  Y + H - scrollbar_width(),
-			  text_area.w + LEFT_MARGIN + RIGHT_MARGIN,
-			  scrollbar_width());
-    }
-  }
-
-
-  // user request to change viewport
-  if (mTopLineNumHint != mTopLineNum || mHorizOffsetHint != mHorizOffset)
-    scroll_(mTopLineNumHint, mHorizOffsetHint);
-
-  // everything will fit in the viewport
-  if (mNBufferLines < mNVisibleLines || mBuffer == NULL || mBuffer->length() == 0) {
-    scroll_(1, mHorizOffset);
-  /* if empty lines become visible, there may be an opportunity to
-   display more text by scrolling down */
-  } else {
-    while (   mNVisibleLines>=2
-           && (mLineStarts[mNVisibleLines-2]==-1)
-           && scroll_(mTopLineNum-1, mHorizOffset))
-    { }
-  }
-
-  // user request to display insert position
-  if (display_insert_position_hint)
-    display_insert();
-
-  // in case horizontal offset is now greater than longest line
-  int maxhoffset = max(0, longest_vline()-text_area.w);
-  if (mHorizOffset > maxhoffset)
-    scroll_(mTopLineNumHint, maxhoffset);
-
-  mTopLineNumHint = mTopLineNum;
-  mHorizOffsetHint = mHorizOffset;
-  display_insert_position_hint = 0;
-
-  if (mContinuousWrap ||
-      hscrollbarvisible != mHScrollBar->visible() ||
-      vscrollbarvisible != mVScrollBar->visible())
-    redraw();
-
-  update_v_scrollbar();
-  update_h_scrollbar();
-}
-
-
-
-/**
- \brief Refresh a rectangle of the text display.
- \param left, top are in coordinates of the text drawing window.
- \param width, height size in pixels
- */
-void Fl_Text_Display::draw_text( int left, int top, int width, int height ) {
-  int fontHeight, firstLine, lastLine, line;
-
-  /* find the line number range of the display */
-  fontHeight = mMaxsize ? mMaxsize : textsize_;
-  firstLine = ( top - text_area.y - fontHeight + 1 ) / fontHeight;
-  lastLine = ( top + height - text_area.y ) / fontHeight + 1;
-
-  fl_push_clip( left, top, width, height );
-
-  /* draw the lines */
-  for ( line = firstLine; line <= lastLine; line++ )
-    draw_vline( line, left, left + width, 0, INT_MAX );
-
-  fl_pop_clip();
-}
-
-
-
-/**
- \brief Marks text from start to end as needing a redraw.
- This function will trigger a damage event and later a redraw of parts of
- the widget.
- \param startpos index of first character needing redraw
- \param endpos index after last character needing redraw
- */
-void Fl_Text_Display::redisplay_range(int startpos, int endpos) {
-  IS_UTF8_ALIGNED2(buffer(), startpos)
-  IS_UTF8_ALIGNED2(buffer(), endpos)
-
-  if (damage_range1_start == -1 && damage_range1_end == -1) {
-    damage_range1_start = startpos;
-    damage_range1_end = endpos;
-  } else if ((startpos >= damage_range1_start && startpos <= damage_range1_end) ||
-             (endpos >= damage_range1_start && endpos <= damage_range1_end)) {
-    damage_range1_start = min(damage_range1_start, startpos);
-    damage_range1_end = max(damage_range1_end, endpos);
-  } else if (damage_range2_start == -1 && damage_range2_end == -1) {
-    damage_range2_start = startpos;
-    damage_range2_end = endpos;
-  } else {
-    damage_range2_start = min(damage_range2_start, startpos);
-    damage_range2_end = max(damage_range2_end, endpos);
-  }
-  damage(FL_DAMAGE_SCROLL);
-}
-
-
-
-/**
- \brief Draw a range of text.
-
- Refresh all of the text between buffer positions \p startpos and
- \p endpos not including the character at the position \p endpos.
-
- If \p endpos points beyond the end of the buffer, refresh the whole display
- after \p startpos, including blank lines which are not technically part of
- any range of characters.
-
- \param startpos index of first character to draw
- \param endpos index after last character to draw
- */
-void Fl_Text_Display::draw_range(int startpos, int endpos) {
-  startpos = buffer()->utf8_align(startpos);
-  endpos = buffer()->utf8_align(endpos);
-
-  int i, startLine, lastLine, startIndex, endIndex;
-
-  /* If the range is outside of the displayed text, just return */
-  if ( endpos < mFirstChar || ( startpos > mLastChar && !empty_vlines() ) )
-    return;
-
-  /* Clean up the starting and ending values */
-  if ( startpos < 0 ) startpos = 0;
-  if ( startpos > mBuffer->length() ) startpos = mBuffer->length();
-  if ( endpos < 0 ) endpos = 0;
-  if ( endpos > mBuffer->length() ) endpos = mBuffer->length();
-
-  /* Get the starting and ending lines */
-  if ( startpos < mFirstChar )
-    startpos = mFirstChar;
-  if ( !position_to_line( startpos, &startLine ) )
-    startLine = mNVisibleLines - 1;
-  if ( endpos >= mLastChar ) {
-    lastLine = mNVisibleLines - 1;
-  } else {
-    if ( !position_to_line( endpos, &lastLine ) ) {
-      /* shouldn't happen */
-      lastLine = mNVisibleLines - 1;
-    }
-  }
-
-  /* Get the starting and ending positions within the lines */
-  startIndex = mLineStarts[ startLine ] == -1 ? 0 : startpos - mLineStarts[ startLine ];
-  if ( endpos >= mLastChar )
-    endIndex = INT_MAX;
-  else if ( mLineStarts[ lastLine ] == -1 )
-    endIndex = 0;
-  else
-    endIndex = endpos - mLineStarts[ lastLine ];
-
-  /* If the starting and ending lines are the same, redisplay the single
-   line between "start" and "end" */
-  if ( startLine == lastLine ) {
-    draw_vline( startLine, 0, INT_MAX, startIndex, endIndex );
-    return;
-  }
-
-  /* Redisplay the first line from "start" */
-  draw_vline( startLine, 0, INT_MAX, startIndex, INT_MAX );
-
-  /* Redisplay the lines in between at their full width */
-  for ( i = startLine + 1; i < lastLine; i++ )
-    draw_vline( i, 0, INT_MAX, 0, INT_MAX );
-
-  /* Redisplay the last line to "end" */
-  draw_vline( lastLine, 0, INT_MAX, 0, endIndex );
-}
-
-
-
-/**
- \brief Sets the position of the text insertion cursor for text display.
- Move the insertion cursor in front of the character at \p newPos.
- This function may trigger a redraw.
- \param newPos new caret position
- */
-void Fl_Text_Display::insert_position( int newPos ) {
-  IS_UTF8_ALIGNED2(buffer(), newPos)
-
-  /* make sure new position is ok, do nothing if it hasn't changed */
-  if ( newPos == mCursorPos ) return;
-  if ( newPos < 0 ) newPos = 0;
-  if ( newPos > mBuffer->length() ) newPos = mBuffer->length();
-
-  /* cursor movement cancels vertical cursor motion column */
-  mCursorPreferredXPos = -1;
-
-  /* erase the cursor at its previous position */
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-
-  mCursorPos = newPos;
-
-  /* draw cursor at its new position */
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-}
-
-
-
-/**
- \brief Shows the text cursor.
- This function may trigger a redraw.
- \param b show(1) or hide(0) the text cursor (caret).
- */
-void Fl_Text_Display::show_cursor(int b) {
-  mCursorOn = b;
-  if (!buffer()) return;
-  redisplay_range(buffer()->prev_char_clipped(mCursorPos), buffer()->next_char(mCursorPos));
-}
-
-
-
-/**
- \brief Sets the text cursor style.
- Sets the text cursor style to one of the following:
-
- \li Fl_Text_Display::NORMAL_CURSOR - Shows an I beam.
- \li Fl_Text_Display::CARET_CURSOR - Shows a caret under the text.
- \li Fl_Text_Display::DIM_CURSOR - Shows a dimmed I beam.
- \li Fl_Text_Display::BLOCK_CURSOR - Shows an unfilled box around the current
-      character.
- \li Fl_Text_Display::HEAVY_CURSOR - Shows a thick I beam.
-
- This call also switches the cursor on and may trigger a redraw.
-
- \param style new cursor style
- */
-void Fl_Text_Display::cursor_style(int style) {
-  mCursorStyle = style;
-  if (mCursorOn) show_cursor();
-}
-
-
-
-/**
- \brief Set the new text wrap mode.
-
- If \p wrap mode is not zero, this call enables automatic word wrapping at column
- \p wrapMargin. Word-wrapping does not change the text buffer itself, only the way
- the text is displayed. Different Text Displays can have different wrap modes,
- even if they share the same Text Buffer.
-
- \param wrap new wrap mode is WRAP_NONE (don't wrap text at all), WRAP_AT_COLUMN
-      (wrap text at the given text column), WRAP_AT_PIXEL (wrap text at a pixel
-      position), or WRAP_AT_BOUNDS (wrap text so that it fits into the
-      widget width)
- \param wrapMargin in WRAP_AT_COLUMN mode, text will wrap at the n'th character.
-      For variable width fonts, an average character width is calculated. The
-      column width is calculated using the current textfont or the first style
-      when this function is called. If the font size changes, this function
-      must be called again. In WRAP_AT_PIXEL mode, this is the pixel position.
- \todo we need new wrap modes to wrap at the window edge and based on pixel width
-   or average character width.
- */
-void Fl_Text_Display::wrap_mode(int wrap, int wrapMargin) {
-  switch (wrap) {
-    case WRAP_NONE:
-      mWrapMarginPix = 0;
-      mContinuousWrap = 0;
-      break;
-    case WRAP_AT_COLUMN:
-    default:
-      mWrapMarginPix = int(col_to_x(wrapMargin));
-      mContinuousWrap = 1;
-      break;
-    case WRAP_AT_PIXEL:
-      mWrapMarginPix = wrapMargin;
-      mContinuousWrap = 1;
-      break;
-    case WRAP_AT_BOUNDS:
-      mWrapMarginPix = 0;
-      mContinuousWrap = 1;
-      break;
-  }
-
-  if (buffer()) {
-    /* wrapping can change the total number of lines, re-count */
-    mNBufferLines = count_lines(0, buffer()->length(), true);
-
-    /* changing wrap margins or changing from wrapped mode to non-wrapped
-     can leave the character at the top no longer at a line start, and/or
-     change the line number */
-    mFirstChar = line_start(mFirstChar);
-    mTopLineNum = count_lines(0, mFirstChar, true) + 1;
-
-    reset_absolute_top_line_number();
-
-    /* update the line starts array */
-    calc_line_starts(0, mNVisibleLines);
-    calc_last_char();
-  } else {
-    // No buffer, so just clear the state info for later...
-    mNBufferLines  = 0;
-    mFirstChar     = 0;
-    mTopLineNum    = 1;
-    mAbsTopLineNum = 1;		// changed from 0 to 1 -- LZA / STR#2621
-  }
-
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**
- \brief Inserts "text" at the current cursor location.
-
- This has the same effect as inserting the text into the buffer using BufInsert
- and then moving the insert position after the newly inserted text, except
- that it's optimized to do less redrawing.
-
- \param text new text in UTF-8 encoding.
- */
-void Fl_Text_Display::insert(const char* text) {
-  IS_UTF8_ALIGNED2(buffer(), mCursorPos)
-  IS_UTF8_ALIGNED(text)
-
-  int pos = mCursorPos;
-
-  mCursorToHint = (int) (pos + strlen( text ));
-  mBuffer->insert( pos, text );
-  mCursorToHint = NO_HINT;
-}
-
-
-
-/**
- \brief Replaces text at the current insert position.
- \param text new text in UTF-8 encoding
-
- \todo Unicode? Find out exactly what we do here and simplify.
- */
-void Fl_Text_Display::overstrike(const char* text) {
-  IS_UTF8_ALIGNED2(buffer(), mCursorPos)
-  IS_UTF8_ALIGNED(text)
-
-  int startPos = mCursorPos;
-  Fl_Text_Buffer *buf = mBuffer;
-  int lineStart = buf->line_start( startPos );
-  int textLen = (int) strlen( text );
-  int i, p, endPos, indent, startIndent, endIndent;
-  const char *c;
-  unsigned int ch;
-  char *paddedText = NULL;
-
-  /* determine how many displayed character positions are covered */
-  startIndent = mBuffer->count_displayed_characters( lineStart, startPos );
-  indent = startIndent;
-  for ( c = text; *c != '\0'; c += fl_utf8len1(*c) )
-    indent++;
-  endIndent = indent;
-
-  /* find which characters to remove, and if necessary generate additional
-   padding to make up for removed control characters at the end */
-  indent = startIndent;
-  for ( p = startPos; ; p = buf->next_char(p) ) {
-    if ( p == buf->length() )
-      break;
-    ch = buf->char_at( p );
-    if ( ch == '\n' )
-      break;
-    indent++;
-    if ( indent == endIndent ) {
-      p = buf->next_char(p);
-      break;
-    } else if ( indent > endIndent ) {
-      if ( ch != '\t' ) {
-        p = buf->next_char(p);
-        paddedText = new char [ textLen + FL_TEXT_MAX_EXP_CHAR_LEN + 1 ];
-        strcpy( paddedText, text );
-        for ( i = 0; i < indent - endIndent; i++ )
-          paddedText[ textLen + i ] = ' ';
-        paddedText[ textLen + i ] = '\0';
-      }
-      break;
-    }
-  }
-  endPos = p;
-
-  mCursorToHint = startPos + textLen;
-  buf->replace( startPos, endPos, paddedText == NULL ? text : paddedText );
-  mCursorToHint = NO_HINT;
-  if ( paddedText != NULL )
-    delete [] paddedText;
-}
-
-
-
-/**
- \brief Convert a character index into a pixel position.
-
- Translate a buffer text position to the XY location where the top left of the
- cursor would be positioned to point to that character. Returns 0 if the
- position is not displayed because it is \e \b vertically out of view.
- If the position is horizontally out of view, returns the X coordinate where
- the position would be if it were visible.
-
- \param pos character index
- \param[out] X, Y pixel position of character on screen
- \return 0 if character vertically out of view, X & Y positions otherwise
- */
-int Fl_Text_Display::position_to_xy( int pos, int* X, int* Y ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int lineStartPos, fontHeight;
-  int visLineNum;
-  /* If position is not displayed, return false */
-  if ((pos < mFirstChar) || 
-      (pos > mLastChar && !empty_vlines()) ||
-      (pos > buffer()->length()) ) {		// STR #3231
-    return (*X=*Y=0); // make sure X & Y are set when it is out of view
-  }
-
-  /* Calculate Y coordinate */
-  if (!position_to_line(pos, &visLineNum) || visLineNum < 0 || visLineNum > mNBufferLines) {
-    return (*X=*Y=0); // make sure X & Y are set when it is out of view
-  }
-
-  fontHeight = mMaxsize;
-  *Y = text_area.y + visLineNum * fontHeight;
-
-  /* Get the text, length, and buffer position of the line. If the position
-   is beyond the end of the buffer and should be at the first position on
-   the first empty line, don't try to get or scan the text  */
-  lineStartPos = mLineStarts[visLineNum];
-  if ( lineStartPos == -1 ) {
-    *X = text_area.x - mHorizOffset;
-    return 1;
-  }
-  *X = text_area.x + handle_vline(GET_WIDTH, lineStartPos, pos-lineStartPos, 0, 0, 0, 0, 0, 0) - mHorizOffset;
-  return 1;
-}
-
-
-
-/**
- \brief Find the line and column number of position \p pos.
-
- This only works for displayed lines. If the line is not displayed, the
- function returns 0 (without the mLineStarts array it could turn in to very long
- calculation involving scanning large amounts of text in the buffer).
- If continuous wrap mode is on, returns the absolute line number (as opposed
- to the wrapped line number which is used for scrolling).
-
- \param pos character index
- \param[out] lineNum absolute (unwrapped) line number
- \param[out] column character offset to the beginning of the line
- \return 0 if \p pos is off screen, line number otherwise
- \todo a column number makes little sense in the UTF-8/variable font width
-    environment. We will have to further define what exactly we want to return.
-    Please check the functions that call this particular function.
- */
-int Fl_Text_Display::position_to_linecol( int pos, int* lineNum, int* column ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int retVal;
-
-  /* In continuous wrap mode, the absolute (non-wrapped) line count is
-   maintained separately, as needed.  Only return it if we're actually
-   keeping track of it and pos is in the displayed text */
-  if (mContinuousWrap) {
-    if (!maintaining_absolute_top_line_number() || pos < mFirstChar || pos > mLastChar)
-      return 0;
-    *lineNum = mAbsTopLineNum + buffer()->count_lines(mFirstChar, pos);
-    *column = buffer()->count_displayed_characters(buffer()->line_start(pos), pos);
-    return 1;
-  }
-
-  retVal = position_to_line( pos, lineNum );
-  if ( retVal ) {
-    *column = mBuffer->count_displayed_characters( mLineStarts[ *lineNum ], pos );
-    *lineNum += mTopLineNum;
-  }
-  return retVal;
-}
-
-
-
-/**
- \brief Check if a pixel position is within the primary selection.
- \param X, Y pixel position to test
- \return 1 if position (X, Y) is inside of the primary Fl_Text_Selection
- */
-int Fl_Text_Display::in_selection( int X, int Y ) const {
-  int pos = xy_to_position( X, Y, CHARACTER_POS );
-  IS_UTF8_ALIGNED2(buffer(), pos)
-  Fl_Text_Buffer *buf = mBuffer;
-  return buf->primary_selection()->includes(pos);
-}
-
-
-
-/**
- \brief Nobody knows what this function does.
-
- Correct a column number based on an unconstrained position (as returned by
- TextDXYToUnconstrainedPosition) to be relative to the last actual newline
- in the buffer before the row and column position given, rather than the
- last line start created by line wrapping.  This is an adapter
- for rectangular selections and code written before continuous wrap mode,
- which thinks that the unconstrained column is the number of characters
- from the last newline.  Obviously this is time consuming, because it
- invloves character re-counting.
-
- \param row
- \param column
- \return something unknown
- \todo What does this do and how is it useful? Column numbers mean little in
-    this context. Which functions depend on this one?
-
- \todo Unicode?
- */
-int Fl_Text_Display::wrapped_column(int row, int column) const {
-  int lineStart, dispLineStart;
-
-  if (!mContinuousWrap || row < 0 || row > mNVisibleLines)
-    return column;
-  dispLineStart = mLineStarts[row];
-  if (dispLineStart == -1)
-    return column;
-  lineStart = buffer()->line_start(dispLineStart);
-  return column + buffer()->count_displayed_characters(lineStart, dispLineStart);
-}
-
-
-
-/**
- \brief Nobody knows what this function does.
-
- Correct a row number from an unconstrained position (as returned by
- TextDXYToUnconstrainedPosition) to a straight number of newlines from the
- top line of the display.  Because rectangular selections are based on
- newlines, rather than display wrapping, and anywhere a rectangular selection
- needs a row, it needs it in terms of un-wrapped lines.
-
- \param row
- \return something unknown
- \todo What does this do and how is it useful? Column numbers mean little in
- this context. Which functions depend on this one?
- */
-int Fl_Text_Display::wrapped_row(int row) const {
-  if (!mContinuousWrap || row < 0 || row > mNVisibleLines)
-    return row;
-  return buffer()->count_lines(mFirstChar, mLineStarts[row]);
-}
-
-
-
-/**
- \brief Scroll the display to bring insertion cursor into view.
-
- Note: it would be nice to be able to do this without counting lines twice
- (scroll_() counts them too) and/or to count from the most efficient
- starting point, but the efficiency of this routine is not as important to
- the overall performance of the text display.
-
- \todo Unicode?
- */
-void Fl_Text_Display::display_insert() {
-  int hOffset, topLine, X, Y;
-  hOffset = mHorizOffset;
-  topLine = mTopLineNum;
-
-  if (insert_position() < mFirstChar) {
-    topLine -= count_lines(insert_position(), mFirstChar, false);
-  } else if (mNVisibleLines>=2 && mLineStarts[mNVisibleLines-2] != -1) {
-    int lastChar = line_end(mLineStarts[mNVisibleLines-2],true);
-    if (insert_position() >= lastChar)
-      topLine += count_lines(lastChar - (wrap_uses_character(mLastChar) ? 0 : 1),
-                             insert_position(), false);
-  }
-
-  /* Find the new setting for horizontal offset (this is a bit ungraceful).
-   If the line is visible, just use PositionToXY to get the position
-   to scroll to, otherwise, do the vertical scrolling first, then the
-   horizontal */
-  if (!position_to_xy( mCursorPos, &X, &Y )) {
-    scroll_(topLine, hOffset);
-    if (!position_to_xy( mCursorPos, &X, &Y )) {
-#ifdef DEBUG
-      printf ("*** display_insert/position_to_xy # GIVE UP !\n"); fflush(stdout);
-#endif // DEBUG
-      return;   /* Give up, it's not worth it (but why does it fail?) */
-    }
-  }
-  if (X > text_area.x + text_area.w)
-    hOffset += X-(text_area.x + text_area.w);
-  else if (X < text_area.x)
-    hOffset += X-text_area.x;
-
-  /* Do the scroll */
-  if (topLine != mTopLineNum || hOffset != mHorizOffset)
-    scroll_(topLine, hOffset);
-}
-
-
-/**
- \brief Scrolls the text buffer to show the current insert position.
- This function triggers a complete recalculation, ending in a call to
- Fl_Text_Display::display_insert()
- */
-void Fl_Text_Display::show_insert_position() {
-  display_insert_position_hint = 1;
-  resize(x(), y(), w(), h());
-}
-
-
-/*
- Cursor movement functions
- */
-
-/**
- \brief Moves the current insert position right one character.
- \return 1 if the cursor moved, 0 if the end of the text was reached
- */
-int Fl_Text_Display::move_right() {
-  if ( mCursorPos >= mBuffer->length() )
-    return 0;
-  int p = insert_position();
-  int q = buffer()->next_char(p);
-  insert_position(q);
-  return 1;
-}
-
-
-
-/**
- \brief Moves the current insert position left one character.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_left() {
-  if ( mCursorPos <= 0 )
-    return 0;
-  int p = insert_position();
-  int q = buffer()->prev_char_clipped(p);
-  insert_position(q);
-  return 1;
-}
-
-
-
-/**
- \brief Moves the current insert position up one line.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_up() {
-  int lineStartPos, xPos, prevLineStartPos, newPos, visLineNum;
-
-  /* Find the position of the start of the line.  Use the line starts array
-   if possible */
-  if ( position_to_line( mCursorPos, &visLineNum ) )
-    lineStartPos = mLineStarts[ visLineNum ];
-  else {
-    lineStartPos = line_start( mCursorPos );
-    visLineNum = -1;
-  }
-  if ( lineStartPos == 0 )
-    return 0;
-
-  /* Decide what column to move to, if there's a preferred column use that */
-  if (mCursorPreferredXPos >= 0)
-    xPos = mCursorPreferredXPos;
-  else
-    xPos = handle_vline(GET_WIDTH, lineStartPos, mCursorPos-lineStartPos,
-                        0, 0, 0, 0, 0, INT_MAX);
-
-  /* count forward from the start of the previous line to reach the column */
-  if ( visLineNum != -1 && visLineNum != 0 )
-    prevLineStartPos = mLineStarts[ visLineNum - 1 ];
-  else
-    prevLineStartPos = rewind_lines( lineStartPos, 1 );
-
-  int lineEnd = line_end(prevLineStartPos, true);
-  newPos = handle_vline(FIND_INDEX_FROM_ZERO, prevLineStartPos, lineEnd-prevLineStartPos,
-                        0, 0, 0, 0, 0, xPos);
-
-  /* move the cursor */
-  insert_position( newPos );
-
-  /* if a preferred column wasn't aleady established, establish it */
-  mCursorPreferredXPos = xPos;
-  return 1;
-}
-
-
-
-/**
- \brief Moves the current insert position down one line.
- \return 1 if the cursor moved, 0 if the beginning of the text was reached
- */
-int Fl_Text_Display::move_down() {
-  int lineStartPos, xPos, newPos, visLineNum;
-
-  if ( mCursorPos == mBuffer->length() )
-    return 0;
-
-  if ( position_to_line( mCursorPos, &visLineNum ) )
-    lineStartPos = mLineStarts[ visLineNum ];
-  else {
-    lineStartPos = line_start( mCursorPos );
-    visLineNum = -1;
-  }
-  if (mCursorPreferredXPos >= 0) {
-    xPos = mCursorPreferredXPos;
-  } else {
-    xPos = handle_vline(GET_WIDTH, lineStartPos, mCursorPos-lineStartPos,
-                        0, 0, 0, 0, 0, INT_MAX);
-  }
-
-  int nextLineStartPos = skip_lines( lineStartPos, 1, true );
-  int lineEnd = line_end(nextLineStartPos, true);
-  newPos = handle_vline(FIND_INDEX_FROM_ZERO, nextLineStartPos, lineEnd-nextLineStartPos,
-                        0, 0, 0, 0, 0, xPos);
-
-  insert_position( newPos );
-  mCursorPreferredXPos = xPos;
-  return 1;
-}
-
-
-
-/**
- \brief Count the number of lines between two positions.
-
- Same as Fl_Text_Buffer::count_lines(), but takes into account wrapping if
- wrapping is turned on. If the caller knows that \p startPos is at a line
- start, it can pass \p startPosIsLineStart as True to make the call more
- efficient by avoiding the additional step of scanning back to the last newline.
-
- \param startPos index to first character
- \param endPos index after last character
- \param startPosIsLineStart avoid scanning back to the line start
- \return number of lines
- */
-int Fl_Text_Display::count_lines(int startPos, int endPos,
-                                 bool startPosIsLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-  IS_UTF8_ALIGNED2(buffer(), endPos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-
-#ifdef DEBUG
-  printf("Fl_Text_Display::count_lines(startPos=%d, endPos=%d, startPosIsLineStart=%d\n",
-         startPos, endPos, startPosIsLineStart);
-#endif // DEBUG
-
-  /* If we're not wrapping use simple (and more efficient) Fl_Text_Buffer::count_lines() */
-  if (!mContinuousWrap)
-    return buffer()->count_lines(startPos, endPos);
-
-  wrapped_line_counter(buffer(), startPos, endPos, INT_MAX,
-                       startPosIsLineStart, 0, &retPos, &retLines, &retLineStart,
-                       &retLineEnd);
-
-#ifdef DEBUG
-  printf("   # after WLC: retPos=%d, retLines=%d, retLineStart=%d, retLineEnd=%d\n",
-         retPos, retLines, retLineStart, retLineEnd);
-#endif // DEBUG
-
-  return retLines;
-}
-
-
-
-/**
- \brief Skip a number of lines forward.
-
- Same as BufCountForwardNLines, but takes into account line breaks when
- wrapping is turned on. If the caller knows that startPos is at a line start,
- it can pass "startPosIsLineStart" as True to make the call more efficient
- by avoiding the additional step of scanning back to the last newline.
-
- \param startPos index to starting character
- \param nLines number of lines to skip ahead
- \param startPosIsLineStart avoid scanning back to the line start
- \return new position as index
- */
-int Fl_Text_Display::skip_lines(int startPos, int nLines,
-                                bool startPosIsLineStart) {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-
-  /* if we're not wrapping use more efficient BufCountForwardNLines */
-  if (!mContinuousWrap)
-    return buffer()->skip_lines(startPos, nLines);
-
-  /* wrappedLineCounter can't handle the 0 lines case */
-  if (nLines == 0)
-    return startPos;
-
-  /* use the common line counting routine to count forward */
-  wrapped_line_counter(buffer(), startPos, buffer()->length(),
-                       nLines, startPosIsLineStart, 0,
-                       &retPos, &retLines, &retLineStart, &retLineEnd);
-  IS_UTF8_ALIGNED2(buffer(), retPos)
-  return retPos;
-}
-
-
-
-/**
- \brief Returns the end of a line.
-
- Same as BufEndOfLine, but takes into account line breaks when wrapping
- is turned on.  If the caller knows that \p startPos is at a line start, it
- can pass "startPosIsLineStart" as True to make the call more efficient
- by avoiding the additional step of scanning back to the last newline.
-
- Note that the definition of the end of a line is less clear when continuous
- wrap is on.  With continuous wrap off, it's just a pointer to the newline
- that ends the line.  When it's on, it's the character beyond the last
- \b displayable character on the line, where a whitespace character which has
- been "converted" to a newline for wrapping is not considered displayable.
- Also note that a line can be wrapped at a non-whitespace character if the
- line had no whitespace.  In this case, this routine returns a pointer to
- the start of the next line.  This is also consistent with the model used by
- visLineLength.
-
- \param startPos index to starting character
- \param startPosIsLineStart avoid scanning back to the line start
- \return new position as index
- */
-int Fl_Text_Display::line_end(int startPos, bool startPosIsLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-
-  /* If we're not wrapping use more efficient BufEndOfLine */
-  if (!mContinuousWrap)
-    return buffer()->line_end(startPos);
-
-  if (startPos == buffer()->length())
-    return startPos;
-
-  wrapped_line_counter(buffer(), startPos, buffer()->length(), 1,
-                       startPosIsLineStart, 0, &retPos, &retLines, &retLineStart,
-                       &retLineEnd);
-
-  IS_UTF8_ALIGNED2(buffer(), retLineEnd)
-  return retLineEnd;
-}
-
-
-
-/**
- \brief Return the beginning of a line.
-
- Same as BufStartOfLine, but returns the character after last wrap point
- rather than the last newline.
-
- \param pos index to starting character
- \return new position as index
- */
-int Fl_Text_Display::line_start(int pos) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int retLines, retPos, retLineStart, retLineEnd;
-
-  /* If we're not wrapping, use the more efficient BufStartOfLine */
-  if (!mContinuousWrap)
-    return buffer()->line_start(pos);
-
-  wrapped_line_counter(buffer(), buffer()->line_start(pos), pos, INT_MAX, true, 0,
-                       &retPos, &retLines, &retLineStart, &retLineEnd);
-
-  IS_UTF8_ALIGNED2(buffer(), retLineStart)
-  return retLineStart;
-}
-
-
-
-/**
- \brief Skip a number of lines back.
-
- Same as BufCountBackwardNLines, but takes into account line breaks when
- wrapping is turned on.
-
- \param startPos index to starting character
- \param nLines number of lines to skip back
- \return new position as index
- */
-int Fl_Text_Display::rewind_lines(int startPos, int nLines) {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  Fl_Text_Buffer *buf = buffer();
-  int pos, lineStart, retLines, retPos, retLineStart, retLineEnd;
-
-  /* If we're not wrapping, use the more efficient BufCountBackwardNLines */
-  if (!mContinuousWrap)
-    return buf->rewind_lines(startPos, nLines);
-
-  pos = startPos;
-  for (;;) {
-    lineStart = buf->line_start(pos);
-    wrapped_line_counter(buf, lineStart, pos, INT_MAX, true, 0,
-                         &retPos, &retLines, &retLineStart, &retLineEnd, false);
-    if (retLines > nLines)
-      return skip_lines(lineStart, retLines-nLines, true);
-    nLines -= retLines;
-    pos = lineStart - 1;
-    if (pos < 0)
-      return 0;
-    nLines -= 1;
-  }
-}
-
-
-
-static inline int fl_isseparator(unsigned int c) {
-  // FIXME: this does not take UCS-4 encoding into account
-  return c != '$' && c != '_' && (isspace(c) || ispunct(c));
-}
-
-
-
-/**
- \brief Moves the current insert position right one word.
- */
-void Fl_Text_Display::next_word() {
-  int pos = insert_position();
-
-  while (pos < buffer()->length() && !fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-
-  while (pos < buffer()->length() && fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-
-  insert_position( pos );
-}
-
-
-
-/**
- \brief Moves the current insert position left one word.
- */
-void Fl_Text_Display::previous_word() {
-  int pos = insert_position();
-  if (pos==0) return;
-  pos = buffer()->prev_char(pos);
-
-  while (pos && fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->prev_char(pos);
-  }
-
-  while (pos && !fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->prev_char(pos);
-  }
-
-  if (fl_isseparator(buffer()->char_at(pos))) {
-    pos = buffer()->next_char(pos);
-  }
-
-  insert_position( pos );
-}
-
-
-
-/**
- \brief This is called before any characters are deleted.
-
- Callback attached to the text buffer to receive delete information before
- the modifications are actually made. 
-
- This callback can be used to adjust 
- the display or update other setting. It is not advisable to change any 
- buffers or text in this callback, or line counting may get out of sync.
-
- \param pos starting index of deletion
- \param nDeleted number of bytes we will delete (must be UTF-8 aligned!)
- \param cbArg "this" pointer for static callback function
- */
-void Fl_Text_Display::buffer_predelete_cb(int pos, int nDeleted, void *cbArg) {
-  Fl_Text_Display *textD = (Fl_Text_Display *)cbArg;
-  if (textD->mContinuousWrap) {
-  /* Note: we must perform this measurement, even if there is not a
-   single character deleted; the number of "deleted" lines is the
-   number of visual lines spanned by the real line in which the
-   modification takes place.
-   Also, a modification of the tab distance requires the same
-   kind of calculations in advance, even if the font width is "fixed",
-   because when the width of the tab characters changes, the layout
-   of the text may be completely different. */
-    IS_UTF8_ALIGNED2(textD->buffer(), pos)
-    textD->measure_deleted_lines(pos, nDeleted);
-  } else {
-    textD->mSuppressResync = 0; /* Probably not needed, but just in case */
-  }
-}
-
-
-
-/**
- \brief This is called whenever the buffer is modified.
-
- Callback attached to the text buffer to receive modification information
-
- This callback can be used to adjust 
- the display or update other setting. It is not advisable to change any 
- buffers or text in this callback, or line counting may get out of sync.
-
- \param pos starting index of modification
- \param nInserted number of bytes we inserted (must be UTF-8 aligned!)
- \param nDeleted number of bytes deleted (must be UTF-8 aligned!)
- \param nRestyled ??
- \param deletedText this is what was removed, must not be NULL if nDeleted is set
- \param cbArg "this" pointer for static callback function
- */
-void Fl_Text_Display::buffer_modified_cb( int pos, int nInserted, int nDeleted,
-                                         int nRestyled, const char *deletedText, void *cbArg ) {
-  int linesInserted, linesDeleted, startDispPos, endDispPos;
-  Fl_Text_Display *textD = ( Fl_Text_Display * ) cbArg;
-  Fl_Text_Buffer *buf = textD->mBuffer;
-  int oldFirstChar = textD->mFirstChar;
-  int scrolled, origCursorPos = textD->mCursorPos;
-  int wrapModStart = 0, wrapModEnd = 0;
-
-  IS_UTF8_ALIGNED2(buf, pos)
-  IS_UTF8_ALIGNED2(buf, oldFirstChar)
-
-  /* buffer modification cancels vertical cursor motion column */
-  if ( nInserted != 0 || nDeleted != 0 )
-    textD->mCursorPreferredXPos = -1;
-
-  /* Count the number of lines inserted and deleted, and in the case
-   of continuous wrap mode, how much has changed */
-  if (textD->mContinuousWrap) {
-    textD->find_wrap_range(deletedText, pos, nInserted, nDeleted,
-                           &wrapModStart, &wrapModEnd, &linesInserted, &linesDeleted);
-  } else {
-    linesInserted = nInserted == 0 ? 0 : buf->count_lines( pos, pos + nInserted );
-    linesDeleted = nDeleted == 0 ? 0 : countlines( deletedText );
-  }
-
-  /* Update the line starts and mTopLineNum */
-  if ( nInserted != 0 || nDeleted != 0 ) {
-    if (textD->mContinuousWrap) {
-      textD->update_line_starts( wrapModStart, wrapModEnd-wrapModStart,
-                                nDeleted + pos-wrapModStart + (wrapModEnd-(pos+nInserted)),
-                                linesInserted, linesDeleted, &scrolled );
-    } else {
-      textD->update_line_starts( pos, nInserted, nDeleted, linesInserted,
-                                linesDeleted, &scrolled );
-    }
-  } else
-    scrolled = 0;
-
-  /* If we're counting non-wrapped lines as well, maintain the absolute
-   (non-wrapped) line number of the text displayed */
-  if (textD->maintaining_absolute_top_line_number() &&
-      (nInserted != 0 || nDeleted != 0)) {
-    if (deletedText && (pos + nDeleted < oldFirstChar))
-      textD->mAbsTopLineNum += buf->count_lines(pos, pos + nInserted) -
-                               countlines(deletedText);
-    else if (pos < oldFirstChar)
-      textD->reset_absolute_top_line_number();
-  }
-
-  /* Update the line count for the whole buffer */
-  textD->mNBufferLines += linesInserted - linesDeleted;
-
-  /* Update the cursor position */
-  if ( textD->mCursorToHint != NO_HINT ) {
-    textD->mCursorPos = textD->mCursorToHint;
-    textD->mCursorToHint = NO_HINT;
-  } else if ( textD->mCursorPos > pos ) {
-    if ( textD->mCursorPos < pos + nDeleted )
-      textD->mCursorPos = pos;
-    else
-      textD->mCursorPos += nInserted - nDeleted;
-  }
-
-  // refigure scrollbars & stuff
-  textD->resize(textD->x(), textD->y(), textD->w(), textD->h());
-
-  // don't need to do anything else if not visible?
-  if (!textD->visible_r()) return;
-
-  /* If the changes caused scrolling, re-paint everything and we're done. */
-  if ( scrolled ) {
-    textD->damage(FL_DAMAGE_EXPOSE);
-    if ( textD->mStyleBuffer )   /* See comments in extendRangeForStyleMods */
-      textD->mStyleBuffer->primary_selection()->selected(0);
-    return;
-  }
-
-  /* If the changes didn't cause scrolling, decide the range of characters
-   that need to be re-painted.  Also if the cursor position moved, be
-   sure that the redisplay range covers the old cursor position so the
-   old cursor gets erased, and erase the bits of the cursor which extend
-   beyond the left and right edges of the text. */
-  startDispPos = textD->mContinuousWrap ? wrapModStart : pos;
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-
-  if ( origCursorPos == startDispPos && textD->mCursorPos != startDispPos )
-    startDispPos = min( startDispPos, buf->prev_char_clipped(origCursorPos) );
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-
-  if ( linesInserted == linesDeleted ) {
-    if ( nInserted == 0 && nDeleted == 0 )
-      endDispPos = pos + nRestyled;
-    else {
-      if (textD->mContinuousWrap)
-        endDispPos = wrapModEnd;
-      else
-        endDispPos = buf->next_char(buf->line_end( pos + nInserted ));
-
-      // CET - FIXME      if ( origCursorPos >= startDispPos &&
-      //                ( origCursorPos <= endDispPos || endDispPos == buf->length() ) )
-    }
-    if (linesInserted > 1) {
-      // textD->draw_line_numbers(false); // can't do this b/c not called from virtual draw();
-      textD->damage(::FL_DAMAGE_EXPOSE);
-    }
-  } else {
-    endDispPos = buf->next_char(textD->mLastChar);
-    // CET - FIXME   if ( origCursorPos >= pos )
-    /* If more than one line is inserted/deleted, a line break may have
-     been inserted or removed in between, and the line numbers may
-     have changed. If only one line is altered, line numbers cannot
-     be affected (the insertion or removal of a line break always
-     results in at least two lines being redrawn). */
-    
-    // Call draw_line_numbers() here to ensure line# is drawn
-    // when hitting enter for new line -- LZA / STR #2621
-    //textD->draw_line_numbers(true);    // no, can't call this here, not in draw() context -- ERCO / STR#2621
-    //textD->damage(::FL_DAMAGE_EXPOSE);
-  }
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  IS_UTF8_ALIGNED2(buf, endDispPos)
-
-  /* If there is a style buffer, check if the modification caused additional
-   changes that need to be redisplayed.  (Redisplaying separately would
-   cause double-redraw on almost every modification involving styled
-   text).  Extend the redraw range to incorporate style changes */
-  if ( textD->mStyleBuffer )
-    textD->extend_range_for_styles( &startDispPos, &endDispPos );
-  IS_UTF8_ALIGNED2(buf, startDispPos)
-  IS_UTF8_ALIGNED2(buf, endDispPos)
-
-  /* Redisplay computed range */
-  textD->redisplay_range( startDispPos, endDispPos );
-}
-
-
-/* Line Numbering Methods */
-
-/**
- \brief Line numbering stuff, currently unused.
-
- In continuous wrap mode, internal line numbers are calculated after
- wrapping.  A separate non-wrapped line count is maintained when line
- numbering is turned on.  There is some performance cost to maintaining this
- line count, so normally absolute line numbers are not tracked if line
- numbering is off.  This routine allows callers to specify that they still
- want this line count maintained (for use via TextDPosToLineAndCol).
- More specifically, this allows the line number reported in the statistics
- line to be calibrated in absolute lines, rather than post-wrapped lines.
- */
-void Fl_Text_Display::maintain_absolute_top_line_number(int state) {
-  mNeedAbsTopLineNum = state;
-  reset_absolute_top_line_number();
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
-
- Returns the absolute (non-wrapped) line number of the first line displayed.
- Returns 0 if the absolute top line number is not being maintained.
- */
-int Fl_Text_Display::get_absolute_top_line_number() const {
-  if (!mContinuousWrap)
-    return mTopLineNum;
-  if (maintaining_absolute_top_line_number())
-    return mAbsTopLineNum;
-  return 0;
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
-
- Re-calculate absolute top line number for a change in scroll position.
- */
-void Fl_Text_Display::absolute_top_line_number(int oldFirstChar) {
-  if (maintaining_absolute_top_line_number()) {
-    if (mFirstChar < oldFirstChar)
-      mAbsTopLineNum -= buffer()->count_lines(mFirstChar, oldFirstChar);
-    else
-      mAbsTopLineNum += buffer()->count_lines(oldFirstChar, mFirstChar);
-  }
-}
-
-
-
-/**
- \brief Line numbering stuff, currently unused.
-
- Return true if a separate absolute top line number is being maintained
- (for displaying line numbers or showing in the statistics line).
- */
-int Fl_Text_Display::maintaining_absolute_top_line_number() const {
-  return mContinuousWrap &&
-  (mLineNumWidth != 0 || mNeedAbsTopLineNum);
-}
-
-
-
-/**
- \brief Line numbering stuff, probably unused.
-
- Count lines from the beginning of the buffer to reestablish the
- absolute (non-wrapped) top line number.  If mode is not continuous wrap,
- or the number is not being maintained, does nothing.
- */
-void Fl_Text_Display::reset_absolute_top_line_number() {
-  mAbsTopLineNum = 1;
-  absolute_top_line_number(0);
-}
-
-
-
-/**
- \brief Convert a position index into a line number offset.
-
- Find the line number of position \p pos relative to the first line of
- displayed text. Returns 0 if the line is not displayed.
-
- \param pos ??
- \param[out] lineNum ??
- \return ??
- \todo What does this do?
- */
-int Fl_Text_Display::position_to_line( int pos, int *lineNum ) const {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int i;
-
-  *lineNum = 0;
-  if ( pos < mFirstChar ) return 0;
-  if ( pos > mLastChar ) {
-    if ( empty_vlines() ) {
-      if ( mLastChar < mBuffer->length() ) {
-        if ( !position_to_line( mLastChar, lineNum ) ) {
-          Fl::error("Fl_Text_Display::position_to_line(): Consistency check ptvl failed");
-          return 0;
-        }
-        return ++( *lineNum ) <= mNVisibleLines - 1;
-      } else {
-        position_to_line( buffer()->prev_char_clipped(mLastChar), lineNum );
-        return 1;
-      }
-    }
-    return 0;
-  }
-
-  for ( i = mNVisibleLines - 1; i >= 0; i-- ) {
-    if ( mLineStarts[ i ] != -1 && pos >= mLineStarts[ i ] ) {
-      *lineNum = i;
-      return 1;
-    }
-  }
-  return 0;   /* probably never be reached */
-}
-
-
-/**
- Universal pixel machine.
-
- We use a single function that handles all line layout, measuring, and drawing
-  \li draw a text range
-  \li return the width of a text range in pixels
-  \li return the index of a character that is at a pixel position
-
- \param[in] mode DRAW_LINE, GET_WIDTH, FIND_INDEX
- \param[in] lineStartPos index of first character
- \param[in] lineLen size of string in bytes
- \param[in] leftChar, rightChar
- \param[in] Y drawing position
- \param[in] bottomClip, leftClip, rightClip stop work when we reach the clipped
-            area. rightClip is the X position that we search in FIND_INDEX.
- \retval DRAW_LINE index of last drawn character
- \retval GET_WIDTH width in pixels of text segment if we would draw it
- \retval FIND_INDEX index of character at given x position in window coordinates
- \retval FIND_INDEX_FROM_ZERO index of character at given x position without scrolling and widget offsets
- \todo we need to handle hidden hyphens and tabs here!
- \todo we handle all styles and selections
- \todo we must provide code to get pixel positions of the middle of a character as well
- */
-int Fl_Text_Display::handle_vline(
-                                  int mode,
-                                  int lineStartPos, int lineLen, int leftChar, int rightChar,
-                                  int Y, int bottomClip,
-                                  int leftClip, int rightClip) const
-{
-  IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-
-  // FIXME: we need to allow two modes for FIND_INDEX: one on the edge of the
-  // FIXME: character for selection, and one on the character center for cursors.
-  int i, X, startX, startIndex, style, charStyle;
-  char *lineStr;
-
-  if ( lineStartPos == -1 ) {
-    lineStr = NULL;
-  } else {
-    lineStr = mBuffer->text_range( lineStartPos, lineStartPos + lineLen );
-  }
-
-  if (mode==GET_WIDTH) {
-    X = 0;
-  } else if (mode==FIND_INDEX_FROM_ZERO) {
-    X = 0;
-    mode = FIND_INDEX;
-  } else {
-    X = text_area.x - mHorizOffset;
-  }
-
-  startX = X;
-  startIndex = 0;
-  if (!lineStr) {
-    // just clear the background
-    if (mode==DRAW_LINE) {
-      style = position_style(lineStartPos, lineLen, -1);
-      draw_string( style|BG_ONLY_MASK, text_area.x, Y, text_area.x+text_area.w, lineStr, lineLen );
-    }
-    if (mode==FIND_INDEX) {
-      IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-      return lineStartPos;
-    }
-    return 0;
-  }
-
-  char currChar = 0, prevChar = 0;
-  // draw the line
-  style = position_style(lineStartPos, lineLen, 0);
-  for (i=0; i<lineLen; ) {
-    currChar = lineStr[i]; // one byte is enough to handele tabs and other cases
-    int len = fl_utf8len1(currChar);
-    if (len<=0) len = 1; // OUCH!
-    charStyle = position_style(lineStartPos, lineLen, i);
-    if (charStyle!=style || currChar=='\t' || prevChar=='\t') {
-      // draw a segment whenever the style changes or a Tab is found
-      int w = 0;
-      if (prevChar=='\t') {
-        // draw a single Tab space
-        int tab = (int)col_to_x(mBuffer->tab_distance());
-        int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x;
-        w = (((xAbs/tab)+1)*tab) - xAbs;
-        if (mode==DRAW_LINE)
-          draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 );
-        if (mode==FIND_INDEX && startX+w>rightClip) {
-          // find x pos inside block
-          free(lineStr);
-          return lineStartPos + startIndex;
-        }
-      } else {
-        // draw a text segment
-        w = int( string_width( lineStr+startIndex, i-startIndex, style ) );
-        if (mode==DRAW_LINE)
-          draw_string( style, startX, Y, startX+w, lineStr+startIndex, i-startIndex );
-        if (mode==FIND_INDEX && startX+w>rightClip) {
-          // find x pos inside block
-          int di = find_x(lineStr+startIndex, i-startIndex, style, rightClip-startX);
-          free(lineStr);
-          IS_UTF8_ALIGNED2(buffer(), (lineStartPos+startIndex+di))
-          return lineStartPos + startIndex + di;
-        }
-      }
-      style = charStyle;
-      startX += w;
-      startIndex = i;
-    }
-    i += len;
-    prevChar = currChar;
-  }
-  int w = 0;
-  if (currChar=='\t') {
-    // draw a single Tab space
-    int tab = (int)col_to_x(mBuffer->tab_distance());
-    int xAbs = (mode==GET_WIDTH) ? startX : startX+mHorizOffset-text_area.x;
-    w = (((xAbs/tab)+1)*tab) - xAbs;
-    if (mode==DRAW_LINE)
-      draw_string( style|BG_ONLY_MASK, startX, Y, startX+w, 0, 0 );
-    if (mode==FIND_INDEX) {
-      // find x pos inside block
-      free(lineStr);
-      return lineStartPos + startIndex + ( rightClip-startX>w ? 1 : 0 );
-    }
-  } else {
-    w = int( string_width( lineStr+startIndex, i-startIndex, style ) );
-    if (mode==DRAW_LINE)
-      draw_string( style, startX, Y, startX+w, lineStr+startIndex, i-startIndex );
-    if (mode==FIND_INDEX) {
-      // find x pos inside block
-      int di = find_x(lineStr+startIndex, i-startIndex, style, rightClip-startX);
-      free(lineStr);
-      IS_UTF8_ALIGNED2(buffer(), (lineStartPos+startIndex+di))
-      return lineStartPos + startIndex + di;
-    }
-  }
-  if (mode==GET_WIDTH) {
-    free(lineStr);
-    return startX+w;
-  }
-
-  // clear the rest of the line
-  startX += w;
-  style = position_style(lineStartPos, lineLen, i);
-  if (mode==DRAW_LINE)
-    draw_string( style|BG_ONLY_MASK, startX, Y, text_area.x+text_area.w, lineStr, lineLen );
-
-  free(lineStr);
-  IS_UTF8_ALIGNED2(buffer(), (lineStartPos+lineLen))
-  return lineStartPos + lineLen;
-}
-
-
-/**
- \brief Find the index of the character that lies at the given x position.
- \param s UTF-8 text string
- \param len length of string
- \param style index into style lookup table
- \param x position in pixels
- \return index into buffer
- */
-int Fl_Text_Display::find_x(const char *s, int len, int style, int x) const {
-  IS_UTF8_ALIGNED(s)
-
-  // TODO: use binary search which may be quicker.
-  int i = 0;
-  while (i<len) {
-    int cl = fl_utf8len1(s[i]);
-    int w = int( string_width(s, i+cl, style) );
-    if (w>x)
-      return i;
-    i += cl;
-  }
-  return len;
-}
-
-
-
-/**
- \brief Draw a single line of text.
-
- Draw the text on a single line represented by \p visLineNum (the
- number of lines down from the top of the display), limited by
- \p leftClip and \p rightClip window coordinates and \p leftCharIndex and
- \p rightCharIndex character positions (not including the character at
- position \p rightCharIndex).
-
- \param visLineNum index of line in the visible line number lookup
- \param leftClip, rightClip pixel position of clipped area
- \param leftCharIndex, rightCharIndex index into line of segment that we want to draw
- */
-void Fl_Text_Display::draw_vline(int visLineNum, int leftClip, int rightClip,
-                                 int leftCharIndex, int rightCharIndex) {
-  int Y, lineStartPos, lineLen, fontHeight;
-
-  //  printf("draw_vline(visLineNum=%d, leftClip=%d, rightClip=%d, leftCharIndex=%d, rightCharIndex=%d)\n",
-  //         visLineNum, leftClip, rightClip, leftCharIndex, rightCharIndex);
-  //  printf("nNVisibleLines=%d\n", mNVisibleLines);
-
-  /* If line is not displayed, skip it */
-  if ( visLineNum < 0 || visLineNum >= mNVisibleLines )
-    return;
-
-  /* Calculate Y coordinate of the string to draw */
-  fontHeight = mMaxsize;
-  Y = text_area.y + visLineNum * fontHeight;
-
-  /* Get the text, length, and  buffer position of the line to display */
-  lineStartPos = mLineStarts[ visLineNum ];
-  if ( lineStartPos == -1 ) {
-    lineLen = 0;
-  } else {
-    lineLen = vline_length( visLineNum );
-  }
-
-  /* Shrink the clipping range to the active display area */
-  leftClip = max( text_area.x, leftClip );
-  rightClip = min( rightClip, text_area.x + text_area.w );
-
-  handle_vline(DRAW_LINE,
-               lineStartPos, lineLen, leftCharIndex, rightCharIndex,
-               Y, Y+fontHeight, leftClip, rightClip);
-  return;
-}
-
-
-
-/**
- \brief Draw a text segment in a single style.
-
- Draw a string or blank area according to parameter \p style, using the
- appropriate colors and drawing method for that style, with top left
- corner at \p X, \p Y.  If style says to draw text, use \p string as
- source of characters, and draw \p nChars, if style is FILL, erase
- rectangle where text would have drawn from \p X to \p toX and from
- \p Y to the maximum y extent of the current font(s).
-
- \param style index into style lookup table
- \param X, Y drawing origin
- \param toX rightmost position if this is a fill operation
- \param string text if this is a drawing operation
- \param nChars number of characters to draw
- */
-void Fl_Text_Display::draw_string(int style,
-                                  int X, int Y, int toX,
-                                  const char *string, int nChars) const {
-  IS_UTF8_ALIGNED(string)
-
-  const Style_Table_Entry * styleRec;
-
-  /* Draw blank area rather than text, if that was the request */
-  if ( style & FILL_MASK ) {
-    if (style & TEXT_ONLY_MASK) return;
-    clear_rect( style, X, Y, toX - X, mMaxsize );
-    return;
-  }
-  /* Set font, color, and gc depending on style.  For normal text, GCs
-   for normal drawing, or drawing within a Fl_Text_Selection or highlight are
-   pre-allocated and pre-configured.  For syntax highlighting, GCs are
-   configured here, on the fly. */
-
-  Fl_Font font = textfont();
-  int fsize = textsize();
-  Fl_Color foreground;
-  Fl_Color background;
-
-  if ( style & STYLE_LOOKUP_MASK ) {
-    int si = (style & STYLE_LOOKUP_MASK) - 'A';
-    if (si < 0) si = 0;
-    else if (si >= mNStyles) si = mNStyles - 1;
-
-    styleRec = mStyleTable + si;
-    font  = styleRec->font;
-    fsize = styleRec->size;
-
-    if (style & PRIMARY_MASK) {
-      if (Fl::focus() == (Fl_Widget*)this) {
-#ifdef __APPLE__
-	if (Fl::compose_state) background = color();// Mac OS: underline marked text
-	else 
-#endif
-	background = selection_color();
-	}
-      else background = fl_color_average(color(), selection_color(), 0.4f);
-    } else if (style & HIGHLIGHT_MASK) {
-      if (Fl::focus() == (Fl_Widget*)this) background = fl_color_average(color(), selection_color(), 0.5f);
-      else background = fl_color_average(color(), selection_color(), 0.6f);
-    } else background = color();
-    foreground = (style & PRIMARY_MASK) ? fl_contrast(styleRec->color, background) : styleRec->color;
-  } else if (style & PRIMARY_MASK) {
-    if (Fl::focus() == (Fl_Widget*)this) background = selection_color();
-    else background = fl_color_average(color(), selection_color(), 0.4f);
-    foreground = fl_contrast(textcolor(), background);
-  } else if (style & HIGHLIGHT_MASK) {
-    if (Fl::focus() == (Fl_Widget*)this) background = fl_color_average(color(), selection_color(), 0.5f);
-    else background = fl_color_average(color(), selection_color(), 0.6f);
-    foreground = fl_contrast(textcolor(), background);
-  } else {
-    foreground = textcolor();
-    background = color();
-  }
-
-  if ( !active_r() ) {
-    foreground = fl_inactive(foreground);
-    background = fl_inactive(background);
-  }
-
-  if (!(style & TEXT_ONLY_MASK)) {
-    fl_color( background );
-    fl_rectf( X, Y, toX - X, mMaxsize );
-  }
-  if (!(style & BG_ONLY_MASK)) {
-    fl_color( foreground );
-    fl_font( font, fsize );
-#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT
-    // makes sure antialiased ÄÖÜ do not leak on line above
-    fl_push_clip(X, Y, toX - X, mMaxsize);
-#endif
-    fl_draw( string, nChars, X, Y + mMaxsize - fl_descent());
-#ifdef __APPLE__ // Mac OS: underline marked (= selected + Fl::compose_state != 0) text
-    if (Fl::compose_state && (style & PRIMARY_MASK)) {
-      fl_color( fl_color_average(foreground, background, 0.6) );
-      fl_line(X, Y + mMaxsize - 1, X + fl_width(string, nChars), Y + mMaxsize - 1);
-    }
-#endif
-#if !(defined(__APPLE__) || defined(WIN32)) && USE_XFT
-    fl_pop_clip();
-#endif
-  }
-
-  // CET - FIXME
-  /* If any space around the character remains unfilled (due to use of
-   different sized fonts for highlighting), fill in above or below
-   to erase previously drawn characters */
-  /*
-   if (fs->ascent < mAscent)
-   clear_rect( style, X, Y, toX - X, mAscent - fs->ascent);
-   if (fs->descent < mDescent)
-   clear_rect( style, X, Y + mAscent + fs->descent, toX - x,
-   mDescent - fs->descent);
-   */
-  /* Underline if style is secondary Fl_Text_Selection */
-
-  /*
-   if (style & SECONDARY_MASK)
-   XDrawLine(XtDisplay(mW), XtWindow(mW), gc, x,
-   y + mAscent, toX - 1, Y + fs->ascent);
-   */
-}
-
-
-
-/**
- \brief Clear a rectangle with the appropriate background color for \p style.
-
- \param style index into style table
- \param X, Y, width, height size and position of background area
- */
-void Fl_Text_Display::clear_rect(int style,
-                                 int X, int Y,
-                                 int width, int height) const {
-  /* A width of zero means "clear to end of window" to XClearArea */
-  if ( width == 0 )
-    return;
-
-  Fl_Color c;
-  if (style & PRIMARY_MASK) {
-    if (Fl::focus()==(Fl_Widget*)this) {
-      c = selection_color();
-    } else {
-      c = fl_color_average(color(), selection_color(), 0.4f);
-    }
-  } else if (style & HIGHLIGHT_MASK) {
-    if (Fl::focus()==(Fl_Widget*)this) {
-      c = fl_color_average(color(), selection_color(), 0.5f);
-    } else {
-      c = fl_color_average(color(), selection_color(), 0.6f);
-    }
-  } else {
-    c = color();
-  }
-  fl_color(active_r() ? c : fl_inactive(c));
-  fl_rectf( X, Y, width, height );
-}
-
-
-
-/**
- \brief Draw a cursor with top center at \p X, \p Y.
-
- \param X, Y cursor position in pixels
- */
-void Fl_Text_Display::draw_cursor( int X, int Y ) {
-
-  typedef struct {
-    int x1, y1, x2, y2;
-  }
-  Segment;
-
-  Segment segs[ 5 ];
-  int left, right, cursorWidth, midY;
-  //    int fontWidth = mFontStruct->min_bounds.width, nSegs = 0;
-  int fontWidth = TMPFONTWIDTH; // CET - FIXME
-  int nSegs = 0;
-  int fontHeight = mMaxsize;
-  int bot = Y + fontHeight - 1;
-
-  if ( X < text_area.x - 1 || X > text_area.x + text_area.w )
-    return;
-
-#ifdef __APPLE__
-  Fl::insertion_point_location(X, bot, fontHeight);
-#endif
-  /* For cursors other than the block, make them around 2/3 of a character
-   width, rounded to an even number of pixels so that X will draw an
-   odd number centered on the stem at x. */
-  cursorWidth = 4;   //(fontWidth/3) * 2;
-  left = X - cursorWidth / 2;
-  right = left + cursorWidth;
-
-  /* Create segments and draw cursor */
-  if ( mCursorStyle == CARET_CURSOR ) {
-    midY = bot - fontHeight / 5;
-    segs[ 0 ].x1 = left; segs[ 0 ].y1 = bot; segs[ 0 ].x2 = X; segs[ 0 ].y2 = midY;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = midY; segs[ 1 ].x2 = right; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = left; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = midY - 1;
-    segs[ 3 ].x1 = X; segs[ 3 ].y1 = midY - 1; segs[ 3 ].x2 = right; segs[ 3 ].y2 = bot;
-    nSegs = 4;
-  } else if ( mCursorStyle == NORMAL_CURSOR ) {
-    segs[ 0 ].x1 = left; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = right; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = X; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = left; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = right; segs[ 2 ].y2 = bot;
-    nSegs = 3;
-  } else if ( mCursorStyle == HEAVY_CURSOR ) {
-    segs[ 0 ].x1 = X - 1; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = X - 1; segs[ 0 ].y2 = bot;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = X; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = X + 1; segs[ 2 ].y1 = Y; segs[ 2 ].x2 = X + 1; segs[ 2 ].y2 = bot;
-    segs[ 3 ].x1 = left; segs[ 3 ].y1 = Y; segs[ 3 ].x2 = right; segs[ 3 ].y2 = Y;
-    segs[ 4 ].x1 = left; segs[ 4 ].y1 = bot; segs[ 4 ].x2 = right; segs[ 4 ].y2 = bot;
-    nSegs = 5;
-  } else if ( mCursorStyle == DIM_CURSOR ) {
-    midY = Y + fontHeight / 2;
-    segs[ 0 ].x1 = X; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = X; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = X; segs[ 1 ].y1 = midY; segs[ 1 ].x2 = X; segs[ 1 ].y2 = midY;
-    segs[ 2 ].x1 = X; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = bot;
-    nSegs = 3;
-  } else if ( mCursorStyle == BLOCK_CURSOR ) {
-    right = X + fontWidth;
-    segs[ 0 ].x1 = X; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = right; segs[ 0 ].y2 = Y;
-    segs[ 1 ].x1 = right; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = right; segs[ 1 ].y2 = bot;
-    segs[ 2 ].x1 = right; segs[ 2 ].y1 = bot; segs[ 2 ].x2 = X; segs[ 2 ].y2 = bot;
-    segs[ 3 ].x1 = X; segs[ 3 ].y1 = bot; segs[ 3 ].x2 = X; segs[ 3 ].y2 = Y;
-    nSegs = 4;
-  } else if ( mCursorStyle == SIMPLE_CURSOR ){
-    segs[ 0 ].x1 = X; segs[ 0 ].y1 = Y; segs[ 0 ].x2 = X; segs[ 0 ].y2 = bot;
-    segs[ 1 ].x1 = X+1; segs[ 1 ].y1 = Y; segs[ 1 ].x2 = X+1; segs[ 1 ].y2 = bot;
-    nSegs = 2;
-  }
-  fl_color( mCursor_color );
-
-  for ( int k = 0; k < nSegs; k++ ) {
-    fl_line( segs[ k ].x1, segs[ k ].y1, segs[ k ].x2, segs[ k ].y2 );
-  }
-}
-
-
-
-/**
- \brief Find the correct style for a character.
-
- Determine the drawing method to use to draw a specific character from "buf".
- \p lineStartPos gives the character index where the line begins, \p lineIndex,
- the number of characters past the beginning of the line, and \p lineIndex
- the number of displayed characters past the beginning of the line.  Passing
- \p lineStartPos of -1 returns the drawing style for "no text".
-
- Why not just: position_style(pos)?  Because style applies to blank areas
- of the window beyond the text boundaries, and because this routine must also
- decide whether a position is inside of a rectangular Fl_Text_Selection, and do
- so efficiently, without re-counting character positions from the start of the
- line.
-
- Note that style is a somewhat incorrect name, drawing method would
- be more appropriate.
-
- \param lineStartPos beginning of this line
- \param lineLen number of bytes in line
- \param lineIndex position of character within line
- \return style for the given character
- */
-int Fl_Text_Display::position_style( int lineStartPos, int lineLen, int lineIndex) const
-{
-  IS_UTF8_ALIGNED2(buffer(), lineStartPos)
-
-  Fl_Text_Buffer * buf = mBuffer;
-  Fl_Text_Buffer *styleBuf = mStyleBuffer;
-  int pos, style = 0;
-
-  if ( lineStartPos == -1 || buf == NULL )
-    return FILL_MASK;
-
-  pos = lineStartPos + min( lineIndex, lineLen );
-
-  if ( lineIndex >= lineLen )
-    style = FILL_MASK;
-  else if ( styleBuf != NULL ) {
-    style = ( unsigned char ) styleBuf->byte_at( pos );
-    if (style == mUnfinishedStyle && mUnfinishedHighlightCB) {
-      /* encountered "unfinished" style, trigger parsing */
-      (mUnfinishedHighlightCB)( pos, mHighlightCBArg);
-      style = (unsigned char) styleBuf->byte_at( pos);
-    }
-  }
-  if (buf->primary_selection()->includes(pos))
-    style |= PRIMARY_MASK;
-  if (buf->highlight_selection()->includes(pos))
-    style |= HIGHLIGHT_MASK;
-  if (buf->secondary_selection()->includes(pos))
-    style |= SECONDARY_MASK;
-  return style;
-}
-
-
-/**
- \brief Find the width of a string in the font of a particular style.
-
- \param string the text
- \param length number of bytes in string
- \param style index into style table
- \return width of text segment in pixels
- */
-double Fl_Text_Display::string_width( const char *string, int length, int style ) const {
-  IS_UTF8_ALIGNED(string)
-
-  Fl_Font font;
-  Fl_Fontsize fsize;
-
-  if ( mNStyles && (style & STYLE_LOOKUP_MASK) ) {
-    int si = (style & STYLE_LOOKUP_MASK) - 'A';
-    if (si < 0) si = 0;
-    else if (si >= mNStyles) si = mNStyles - 1;
-
-    font  = mStyleTable[si].font;
-    fsize = mStyleTable[si].size;
-  } else {
-    font  = textfont();
-    fsize = textsize();
-  }
-  fl_font( font, fsize );
-  return fl_width( string, length );
-}
-
-
-
-/**
- \brief Translate a pixel position into a character index.
-
- Translate window coordinates to the nearest (insert cursor or character
- cell) text position.  The parameter \p posType specifies how to interpret the
- position: CURSOR_POS means translate the coordinates to the nearest cursor
- position, and CHARACTER_POS means return the position of the character
- closest to (\p X, \p Y).
-
- \param X, Y pixel position
- \param posType CURSOR_POS or CHARACTER_POS
- \return index into text buffer
- */
-int Fl_Text_Display::xy_to_position( int X, int Y, int posType ) const {
-  int lineStart, lineLen, fontHeight;
-  int visLineNum;
-
-  /* Find the visible line number corresponding to the Y coordinate */
-  fontHeight = mMaxsize;
-  visLineNum = ( Y - text_area.y ) / fontHeight;
-  if ( visLineNum < 0 )
-    return mFirstChar;
-  if ( visLineNum >= mNVisibleLines )
-    visLineNum = mNVisibleLines - 1;
-
-  /* Find the position at the start of the line */
-  lineStart = mLineStarts[ visLineNum ];
-
-  /* If the line start was empty, return the last position in the buffer */
-  if ( lineStart == -1 )
-    return mBuffer->length();
-
-  /* Get the line text and its length */
-  lineLen = vline_length( visLineNum );
-
-  return handle_vline(FIND_INDEX,
-                      lineStart, lineLen, 0, 0,
-                      0, 0,
-                      text_area.x, X);
-}
-
-
-
-/**
- \brief Translate pixel coordinates into row and column.
-
- Translate window coordinates to the nearest row and column number for
- positioning the cursor.  This, of course, makes no sense when the font is
- proportional, since there are no absolute columns.  The parameter posType
- specifies how to interpret the position: CURSOR_POS means translate the
- coordinates to the nearest position between characters, and CHARACTER_POS
- means translate the position to the nearest character cell.
-
- \param X, Y pixel coordinates
- \param[out] row, column neares row and column
- \param posType CURSOR_POS or CHARACTER_POS
- */
-void Fl_Text_Display::xy_to_rowcol( int X, int Y, int *row,
-                                   int *column, int posType ) const {
-  int fontHeight = mMaxsize;
-  int fontWidth = TMPFONTWIDTH;   //mFontStruct->max_bounds.width;
-
-  /* Find the visible line number corresponding to the Y coordinate */
-  *row = ( Y - text_area.y ) / fontHeight;
-  if ( *row < 0 ) *row = 0;
-  if ( *row >= mNVisibleLines ) *row = mNVisibleLines - 1;
-
-  *column = ( ( X - text_area.x ) + mHorizOffset +
-             ( posType == CURSOR_POS ? fontWidth / 2 : 0 ) ) / fontWidth;
-  if ( *column < 0 ) * column = 0;
-}
-
-
-
-/**
- \brief Offset line start counters for a new vertical scroll position.
-
- Offset the line starts array, mTopLineNum, mFirstChar and lastChar, for a new
- vertical scroll position given by newTopLineNum.  If any currently displayed
- lines will still be visible, salvage the line starts values, otherwise,
- count lines from the nearest known line start (start or end of buffer, or
- the closest value in the mLineStarts array)
-
- \param newTopLineNum index into buffer
- */
-void Fl_Text_Display::offset_line_starts( int newTopLineNum ) {
-  int oldTopLineNum = mTopLineNum;
-  int oldFirstChar = mFirstChar;
-  int lineDelta = newTopLineNum - oldTopLineNum;
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int i, lastLineNum;
-  Fl_Text_Buffer *buf = mBuffer;
-
-  /* If there was no offset, nothing needs to be changed */
-  if ( lineDelta == 0 )
-    return;
-
-  /* Find the new value for mFirstChar by counting lines from the nearest
-   known line start (start or end of buffer, or the closest value in the
-   lineStarts array) */
-  lastLineNum = oldTopLineNum + nVisLines - 1;
-  if ( newTopLineNum < oldTopLineNum && newTopLineNum < -lineDelta ) {
-    mFirstChar = skip_lines( 0, newTopLineNum - 1, true );
-  } else if ( newTopLineNum < oldTopLineNum ) {
-    mFirstChar = rewind_lines( mFirstChar, -lineDelta );
-  } else if ( newTopLineNum < lastLineNum ) {
-    mFirstChar = lineStarts[ newTopLineNum - oldTopLineNum ];
-  } else if ( newTopLineNum - lastLineNum < mNBufferLines - newTopLineNum ) {
-    mFirstChar = skip_lines( lineStarts[ nVisLines - 1 ],
-                            newTopLineNum - lastLineNum, true );
-  } else {
-    mFirstChar = rewind_lines( buf->length(), mNBufferLines - newTopLineNum + 1 );
-  }
-
-  /* Fill in the line starts array */
-  if ( lineDelta < 0 && -lineDelta < nVisLines ) {
-    for ( i = nVisLines - 1; i >= -lineDelta; i-- )
-      lineStarts[ i ] = lineStarts[ i + lineDelta ];
-    calc_line_starts( 0, -lineDelta );
-  } else if ( lineDelta > 0 && lineDelta < nVisLines ) {
-    for ( i = 0; i < nVisLines - lineDelta; i++ )
-      lineStarts[ i ] = lineStarts[ i + lineDelta ];
-    calc_line_starts( nVisLines - lineDelta, nVisLines - 1 );
-  } else
-    calc_line_starts( 0, nVisLines );
-
-  /* Set lastChar and mTopLineNum */
-  calc_last_char();
-  mTopLineNum = newTopLineNum;
-
-  /* If we're numbering lines or being asked to maintain an absolute line
-   number, re-calculate the absolute line number */
-  absolute_top_line_number(oldFirstChar);
-}
-
-
-
-/**
- \brief Update line start arrays and variables.
-
- Update the line starts array, mTopLineNum, mFirstChar and lastChar for this
- text display after a modification to the text buffer, given by the
- position \p pos where the change began, and the numbers of characters
- and lines inserted and deleted.
-
- \param pos index into buffer of recent changes
- \param charsInserted number of bytes(!) inserted
- \param charsDeleted number of bytes(!) deleted
- \param linesInserted number of lines
- \param linesDeleted number of lines
- \param[out] scrolled set to 1 if the text display needs to be scrolled
- */
-void Fl_Text_Display::update_line_starts(int pos, int charsInserted,
-                                         int charsDeleted, int linesInserted,
-                                         int linesDeleted, int *scrolled ) {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int *lineStarts = mLineStarts;
-  int i, lineOfPos, lineOfEnd, nVisLines = mNVisibleLines;
-  int charDelta = charsInserted - charsDeleted;
-  int lineDelta = linesInserted - linesDeleted;
-
-  /* If all of the changes were before the displayed text, the display
-   doesn't change, just update the top line num and offset the line
-   start entries and first and last characters */
-  if ( pos + charsDeleted < mFirstChar ) {
-    mTopLineNum += lineDelta;
-    for ( i = 0; i < nVisLines && lineStarts[i] != -1; i++ )
-      lineStarts[ i ] += charDelta;
-    mFirstChar += charDelta;
-    mLastChar += charDelta;
-    *scrolled = 0;
-    return;
-  }
-
-  /* The change began before the beginning of the displayed text, but
-   part or all of the displayed text was deleted */
-  if ( pos < mFirstChar ) {
-    /* If some text remains in the window, anchor on that  */
-    if ( position_to_line( pos + charsDeleted, &lineOfEnd ) &&
-        ++lineOfEnd < nVisLines && lineStarts[ lineOfEnd ] != -1 ) {
-      mTopLineNum = max( 1, mTopLineNum + lineDelta );
-      mFirstChar = rewind_lines(lineStarts[ lineOfEnd ] + charDelta, lineOfEnd );
-      /* Otherwise anchor on original line number and recount everything */
-    } else {
-      if ( mTopLineNum > mNBufferLines + lineDelta ) {
-        mTopLineNum = 1;
-        mFirstChar = 0;
-      } else
-        mFirstChar = skip_lines( 0, mTopLineNum - 1, true );
-    }
-    calc_line_starts( 0, nVisLines - 1 );
-    /* calculate lastChar by finding the end of the last displayed line */
-    calc_last_char();
-    *scrolled = 1;
-    return;
-  }
-
-  /* If the change was in the middle of the displayed text (it usually is),
-   salvage as much of the line starts array as possible by moving and
-   offsetting the entries after the changed area, and re-counting the
-   added lines or the lines beyond the salvaged part of the line starts
-   array */
-  if ( pos <= mLastChar ) {
-    /* find line on which the change began */
-    position_to_line( pos, &lineOfPos );
-    /* salvage line starts after the changed area */
-    if ( lineDelta == 0 ) {
-      for ( i = lineOfPos + 1; i < nVisLines && lineStarts[ i ] != -1; i++ )
-        lineStarts[ i ] += charDelta;
-    } else if ( lineDelta > 0 ) {
-      for ( i = nVisLines - 1; i >= lineOfPos + lineDelta + 1; i-- )
-        lineStarts[ i ] = lineStarts[ i - lineDelta ] +
-        ( lineStarts[ i - lineDelta ] == -1 ? 0 : charDelta );
-    } else /* (lineDelta < 0) */ {
-      for ( i = max( 0, lineOfPos + 1 ); i < nVisLines + lineDelta; i++ )
-        lineStarts[ i ] = lineStarts[ i - lineDelta ] +
-        ( lineStarts[ i - lineDelta ] == -1 ? 0 : charDelta );
-    }
-    /* fill in the missing line starts */
-    if ( linesInserted >= 0 )
-      calc_line_starts( lineOfPos + 1, lineOfPos + linesInserted );
-    if ( lineDelta < 0 )
-      calc_line_starts( nVisLines + lineDelta, nVisLines );
-    /* calculate lastChar by finding the end of the last displayed line */
-    calc_last_char();
-    *scrolled = 0;
-    return;
-  }
-
-  /* Change was past the end of the displayed text, but displayable by virtue
-   of being an insert at the end of the buffer into visible blank lines */
-  if ( empty_vlines() ) {
-    position_to_line( pos, &lineOfPos );
-    calc_line_starts( lineOfPos, lineOfPos + linesInserted );
-    calc_last_char();
-    *scrolled = 0;
-    return;
-  }
-
-  /* Change was beyond the end of the buffer and not visible, do nothing */
-  *scrolled = 0;
-}
-
-
-
-/**
- \brief Update the line start arrays.
-
- Scan through the text in the "textD"'s buffer and recalculate the line
- starts array values beginning at index "startLine" and continuing through
- (including) "endLine".  It assumes that the line starts entry preceding
- "startLine" (or mFirstChar if startLine is 0) is good, and re-counts
- newlines to fill in the requested entries.  Out of range values for
- "startLine" and "endLine" are acceptable.
-
- \param startLine, endLine range of lines to scan as line numbers
- */
-void Fl_Text_Display::calc_line_starts( int startLine, int endLine ) {
-  int startPos, bufLen = mBuffer->length();
-  int line, lineEnd, nextLineStart, nVis = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-
-  /* Clean up (possibly) messy input parameters */
-  if ( endLine < 0 ) endLine = 0;
-  if ( endLine >= nVis ) endLine = nVis - 1;
-  if ( startLine < 0 ) startLine = 0;
-  if ( startLine >= nVis ) startLine = nVis - 1;
-  if ( startLine > endLine )
-    return;
-
-  /* Find the last known good line number -> position mapping */
-  if ( startLine == 0 ) {
-    lineStarts[ 0 ] = mFirstChar;
-    startLine = 1;
-  }
-  startPos = lineStarts[ startLine - 1 ];
-
-  /* If the starting position is already past the end of the text,
-   fill in -1's (means no text on line) and return */
-  if ( startPos == -1 ) {
-    for ( line = startLine; line <= endLine; line++ )
-      lineStarts[ line ] = -1;
-    return;
-  }
-
-  /* Loop searching for ends of lines and storing the positions of the
-   start of the next line in lineStarts */
-  for ( line = startLine; line <= endLine; line++ ) {
-    find_line_end(startPos, true, &lineEnd, &nextLineStart);
-    startPos = nextLineStart;
-    if ( startPos >= bufLen ) {
-      /* If the buffer ends with a newline or line break, put
-       buf->length() in the next line start position (instead of
-       a -1 which is the normal marker for an empty line) to
-       indicate that the cursor may safely be displayed there */
-      if ( line == 0 || ( lineStarts[ line - 1 ] != bufLen &&
-                         lineEnd != nextLineStart ) ) {
-        lineStarts[ line ] = bufLen;
-        line++;
-      }
-      break;
-    }
-    lineStarts[ line ] = startPos;
-  }
-
-  /* Set any entries beyond the end of the text to -1 */
-  for ( ; line <= endLine; line++ )
-    lineStarts[ line ] = -1;
-}
-
-
-
-/**
- \brief Update last display character index.
-
- Given a Fl_Text_Display with a complete, up-to-date lineStarts array, update
- the lastChar entry to point to the last buffer position displayed.
- */
-void Fl_Text_Display::calc_last_char() {
-  int i;
-  for (i = mNVisibleLines - 1; i >= 0 && mLineStarts[i] == -1; i--) ;
-  mLastChar = i < 0 ? 0 : line_end(mLineStarts[i], true);
-}
-
-
-
-/**
- \brief Scrolls the current buffer to start at the specified line and column.
- \param topLineNum top line number
- \param horizOffset column number
- \todo Column numbers make little sense here.
- */
-void Fl_Text_Display::scroll(int topLineNum, int horizOffset) {
-  mTopLineNumHint = topLineNum;
-  mHorizOffsetHint = horizOffset;
-  resize(x(), y(), w(), h());
-}
-
-
-
-/**
- \brief Scrolls the current buffer to start at the specified line and column.
- \param topLineNum top line number
- \param horizOffset in pixels
- \return 0 if nothing changed, 1 if we scrolled
- */
-int Fl_Text_Display::scroll_(int topLineNum, int horizOffset) {
-  /* Limit the requested scroll position to allowable values */
-  if (topLineNum > mNBufferLines + 3 - mNVisibleLines)
-    topLineNum = mNBufferLines + 3 - mNVisibleLines;
-  if (topLineNum < 1) topLineNum = 1;
-
-  if (horizOffset > longest_vline() - text_area.w)
-    horizOffset = longest_vline() - text_area.w;
-  if (horizOffset < 0) horizOffset = 0;
-
-  /* Do nothing if scroll position hasn't actually changed or there's no
-   window to draw in yet */
-  if (mHorizOffset == horizOffset && mTopLineNum == topLineNum)
-    return 0;
-
-  /* If the vertical scroll position has changed, update the line
-   starts array and related counters in the text display */
-  offset_line_starts(topLineNum);
-
-  /* Just setting mHorizOffset is enough information for redisplay */
-  mHorizOffset = horizOffset;
-
-  // redraw all text
-  damage(FL_DAMAGE_EXPOSE);
-  return 1;
-}
-
-
-
-/**
- \brief Update vertical scrollbar.
-
- Update the minimum, maximum, slider size, page increment, and value
- for the vertical scrollbar.
- */
-void Fl_Text_Display::update_v_scrollbar() {
-  /* The vertical scrollbar value and slider size directly represent the top
-   line number, and the number of visible lines respectively.  The scroll
-   bar maximum value is chosen to generally represent the size of the whole
-   buffer, with minor adjustments to keep the scrollbar widget happy */
-#ifdef DEBUG
-  printf("Fl_Text_Display::update_v_scrollbar():\n"
-         "    mTopLineNum=%d, mNVisibleLines=%d, mNBufferLines=%d\n",
-	 mTopLineNum, mNVisibleLines, mNBufferLines);
-#endif // DEBUG
-
-  mVScrollBar->value(mTopLineNum, mNVisibleLines, 1, mNBufferLines+2);
-  mVScrollBar->linesize(3);
-}
-
-
-/**
- \brief Update horizontal scrollbar.
-
- Update the minimum, maximum, slider size, page increment, and value
- for the horizontal scrollbar.
- */
-void Fl_Text_Display::update_h_scrollbar() {
-  int sliderMax = max(longest_vline(), text_area.w + mHorizOffset);
-  mHScrollBar->value( mHorizOffset, text_area.w, 0, sliderMax );
-}
-
-
-
-/**
- \brief Callbacks for drag or valueChanged on vertical scrollbar.
- */
-void Fl_Text_Display::v_scrollbar_cb(Fl_Scrollbar* b, Fl_Text_Display* textD) {
-  if (b->value() == textD->mTopLineNum) return;
-  textD->scroll(b->value(), textD->mHorizOffset);
-}
-
-
-
-/**
- \brief Callbacks for drag or valueChanged on horizontal scrollbar.
- */
-void Fl_Text_Display::h_scrollbar_cb(Fl_Scrollbar* b, Fl_Text_Display* textD) {
-  if (b->value() == textD->mHorizOffset) return;
-  textD->scroll(textD->mTopLineNum, b->value());
-}
-
-
-
-/**
- \brief Refresh the line number area.
- \param clearAll -- (currently unused) If False, only draws the line number text,
-                    does not clear the area behind it. If True, clears the area
-		    and redraws the text. Use False to avoid a 'flash' for
-		    single buffered windows.
- */
-
-// This draw_line_numbers() method based on patch from
-// http://www.mail-archive.com/fltk-dev@easysw.com/msg06376.html
-// altered to support line numbers right alignment. -LZA / STR #2621
-//
-void Fl_Text_Display::draw_line_numbers(bool /*clearAll*/) {
-  int Y, line, visLine, lineStart;
-  char lineNumString[16];
-  int lineHeight = mMaxsize;
-  int isactive = active_r() ? 1 : 0;
-
-  // Don't draw if lineNumWidth == 0 (line numbers are hidden),
-  // or widget is not yet realized
-  if (mLineNumWidth <= 0 || !visible_r())
-    return;
-
-  // Make sure we set the correct clipping range for line numbers.
-  // Take scrollbars and positions into account.
-  int hscroll_h = mHScrollBar->visible() ? mHScrollBar->h() : 0;
-  int xoff = Fl::box_dx(box());
-  int yoff = Fl::box_dy(box()) + ((scrollbar_align()&FL_ALIGN_TOP)?hscroll_h:0);
-
-#ifndef LINENUM_LEFT_OF_VSCROLL
-  int vscroll_w = mVScrollBar->visible() ? mVScrollBar->w() : 0;
-  if (scrollbar_align()&FL_ALIGN_LEFT)
-    xoff += vscroll_w;
-#endif
-
-  Fl_Color fgcolor = isactive ? linenumber_fgcolor() : fl_inactive(linenumber_fgcolor());
-  Fl_Color bgcolor = isactive ? linenumber_bgcolor() : fl_inactive(linenumber_bgcolor());
-  fl_push_clip(x() + xoff,
-               y() + yoff,
-               mLineNumWidth,
-               h() - Fl::box_dw(box()) - hscroll_h);
-  {
-    // Set background color for line number area -- LZA / STR# 2621
-    // Erase background
-    fl_color(bgcolor);
-    fl_rectf(x()+xoff, y(), mLineNumWidth, h());
-
-    // Draw separator line
-    //fl_color(180,180,180);
-    //fl_line(x()+mLineNumWidth-1, y(), x()+mLineNumWidth-1, y()+h());
-
-    // Draw line number text
-    fl_font(linenumber_font(), linenumber_size());
-
-    Y = y() + yoff;
-    line = get_absolute_top_line_number();
-
-    // set font color for line numbers
-    fl_color(fgcolor);
-    for (visLine=0; visLine < mNVisibleLines; visLine++) {
-      lineStart = mLineStarts[visLine];
-      if (lineStart != -1 && (lineStart==0 || buffer()->char_at(lineStart-1)=='\n')) {
-	sprintf(lineNumString, linenumber_format(), line);
-	int xx = x() + xoff + 3,
-	    yy = Y + 3,
-	    ww = mLineNumWidth - (3*2),
-	    hh = lineHeight;
-	fl_draw(lineNumString, xx, yy, ww, hh, linenumber_align(), 0, 0);
-	//DEBUG fl_rect(xx, yy, ww, hh);
-	line++;
-      } else {
-	if (visLine == 0) line++;
-      }
-      Y += lineHeight;
-    }
-  } 
-  fl_pop_clip();
-}
-
-static int max( int i1, int i2 ) {
-  return i1 >= i2 ? i1 : i2;
-}
-
-static int min( int i1, int i2 ) {
-  return i1 <= i2 ? i1 : i2;
-}
-
-
-
-/**
- Count the number of newlines in a null-terminated text string;
- */
-static int countlines( const char *string ) {
-  IS_UTF8_ALIGNED(string)
-
-  const char * c;
-  int lineCount = 0;
-
-  if (!string) return 0;
-
-  for ( c = string; *c != '\0'; c++ )
-    if ( *c == '\n' ) lineCount++;
-  return lineCount;
-}
-
-
-
-
-/**
- \brief Returns the width in pixels of the displayed line pointed to by "visLineNum".
- \param visLineNum index into visible lines array
- \return width of line in pixels
- */
-int Fl_Text_Display::measure_vline( int visLineNum ) const {
-  int lineLen = vline_length( visLineNum );
-  int lineStartPos = mLineStarts[ visLineNum ];
-  if (lineStartPos < 0 || lineLen == 0) return 0;
-  return handle_vline(GET_WIDTH, lineStartPos, lineLen, 0, 0, 0, 0, 0, 0);
-}
-
-
-
-/**
- \brief Return true if there are lines visible with no corresponding buffer text.
- \return 1 if there are empty lines
- */
-int Fl_Text_Display::empty_vlines() const {
-  return (mNVisibleLines > 0) && (mLineStarts[ mNVisibleLines - 1 ] == -1);
-}
-
-
-
-/**
- \brief Count number of bytes in a visible line.
-
- Return the length of a line (number of bytes) by examining
- entries in the line starts array rather than by scanning for newlines.
-
- \param visLineNum index of line in visible line array
- \return number of bytes in this line
- */
-int Fl_Text_Display::vline_length( int visLineNum ) const {
-  int nextLineStart, lineStartPos;
-
-  if (visLineNum < 0 || visLineNum >= mNVisibleLines)
-    return (0);
-
-  lineStartPos = mLineStarts[ visLineNum ];
-
-  if ( lineStartPos == -1 )
-    return 0;
-
-  if ( visLineNum + 1 >= mNVisibleLines )
-    return mLastChar - lineStartPos;
-
-  nextLineStart = mLineStarts[ visLineNum + 1 ];
-  if ( nextLineStart == -1 )
-    return mLastChar - lineStartPos;
-
-  int nextLineStartMinus1 = buffer()->prev_char(nextLineStart);
-  if (wrap_uses_character(nextLineStartMinus1))
-    return nextLineStartMinus1 - lineStartPos;
-
-  return nextLineStart - lineStartPos;
-}
-
-
-
-/**
- \brief Wrapping calculations.
-
- When continuous wrap is on, and the user inserts or deletes characters,
- wrapping can happen before and beyond the changed position.  This routine
- finds the extent of the changes, and counts the deleted and inserted lines
- over that range.  It also attempts to minimize the size of the range to
- what has to be counted and re-displayed, so the results can be useful
- both for delimiting where the line starts need to be recalculated, and
- for deciding what part of the text to redisplay.
-
- \param deletedText
- \param pos
- \param nInserted
- \param nDeleted
- \param modRangeStart
- \param modRangeEnd
- \param linesInserted
- \param linesDeleted
- */
-void Fl_Text_Display::find_wrap_range(const char *deletedText, int pos,
-                                      int nInserted, int nDeleted,
-                                      int *modRangeStart, int *modRangeEnd,
-                                      int *linesInserted, int *linesDeleted) {
-  IS_UTF8_ALIGNED(deletedText)
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int length, retPos, retLines, retLineStart, retLineEnd;
-  Fl_Text_Buffer *deletedTextBuf, *buf = buffer();
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int countFrom, countTo, lineStart, adjLineStart, i;
-  int visLineNum = 0, nLines = 0;
-
-  /*
-   ** Determine where to begin searching: either the previous newline, or
-   ** if possible, limit to the start of the (original) previous displayed
-   ** line, using information from the existing line starts array
-   */
-  if (pos >= mFirstChar && pos <= mLastChar) {
-    for (i=nVisLines-1; i>0; i--) {
-      if (lineStarts[i] != -1 && pos >= lineStarts[i]) {
-        break;
-      }
-    }
-    if (i > 0) {
-      countFrom = lineStarts[i-1];
-      visLineNum = i-1;
-    } else {
-      countFrom = buf->line_start(pos);
-    }
-  } else {
-    countFrom = buf->line_start(pos);
-  }
-
-  IS_UTF8_ALIGNED2(buf, countFrom)
-
-  /*
-   ** Move forward through the (new) text one line at a time, counting
-   ** displayed lines, and looking for either a real newline, or for the
-   ** line starts to re-sync with the original line starts array
-   */
-  lineStart = countFrom;
-  *modRangeStart = countFrom;
-  for (;;) {
-
-    /* advance to the next line.  If the line ended in a real newline
-     or the end of the buffer, that's far enough */
-    wrapped_line_counter(buf, lineStart, buf->length(), 1, true, 0,
-                         &retPos, &retLines, &retLineStart, &retLineEnd);
-    if (retPos >= buf->length()) {
-      countTo = buf->length();
-      *modRangeEnd = countTo;
-      if (retPos != retLineEnd)
-        nLines++;
-      break;
-    } else {
-      lineStart = retPos;
-    }
-    nLines++;
-    if (lineStart > pos + nInserted && buf->char_at(buf->prev_char(lineStart)) == '\n') {
-      countTo = lineStart;
-      *modRangeEnd = lineStart;
-      break;
-    }
-
-    /* Don't try to resync in continuous wrap mode with non-fixed font
-     sizes; it would result in a chicken-and-egg dependency between
-     the calculations for the inserted and the deleted lines.
-     If we're in that mode, the number of deleted lines is calculated in
-     advance, without resynchronization, so we shouldn't resynchronize
-     for the inserted lines either. */
-    if (mSuppressResync)
-      continue;
-
-    /* check for synchronization with the original line starts array
-     before pos, if so, the modified range can begin later */
-    if (lineStart <= pos) {
-      while (visLineNum<nVisLines && lineStarts[visLineNum] < lineStart)
-        visLineNum++;
-      if (visLineNum < nVisLines && lineStarts[visLineNum] == lineStart) {
-        countFrom = lineStart;
-        nLines = 0;
-        if (visLineNum+1 < nVisLines && lineStarts[visLineNum+1] != -1)
-          *modRangeStart = min(pos, buf->prev_char(lineStarts[visLineNum+1]));
-        else
-          *modRangeStart = countFrom;
-      } else
-        *modRangeStart = min(*modRangeStart, buf->prev_char(lineStart));
-    }
-
-    /* check for synchronization with the original line starts array
-     after pos, if so, the modified range can end early */
-    else if (lineStart > pos + nInserted) {
-      adjLineStart = lineStart - nInserted + nDeleted;
-      while (visLineNum<nVisLines && lineStarts[visLineNum]<adjLineStart)
-        visLineNum++;
-      if (visLineNum < nVisLines && lineStarts[visLineNum] != -1 &&
-          lineStarts[visLineNum] == adjLineStart) {
-        countTo = line_end(lineStart, true);
-        *modRangeEnd = lineStart;
-        break;
-      }
-    }
-  }
-  *linesInserted = nLines;
-
-
-  /* Count deleted lines between countFrom and countTo as the text existed
-   before the modification (that is, as if the text between pos and
-   pos+nInserted were replaced by "deletedText").  This extra context is
-   necessary because wrapping can occur outside of the modified region
-   as a result of adding or deleting text in the region. This is done by
-   creating a textBuffer containing the deleted text and the necessary
-   additional context, and calling the wrappedLineCounter on it.
-
-   NOTE: This must not be done in continuous wrap mode when the font
-   width is not fixed. In that case, the calculation would try
-   to access style information that is no longer available (deleted
-   text), or out of date (updated highlighting), possibly leading
-   to completely wrong calculations and/or even crashes eventually.
-   (This is not theoretical; it really happened.)
-
-   In that case, the calculation of the number of deleted lines
-   has happened before the buffer was modified (only in that case,
-   because resynchronization of the line starts is impossible
-   in that case, which makes the whole calculation less efficient).
-   */
-  if (mSuppressResync) {
-    *linesDeleted = mNLinesDeleted;
-    mSuppressResync = 0;
-    return;
-  }
-
-  length = (pos-countFrom) + nDeleted +(countTo-(pos+nInserted));
-  deletedTextBuf = new Fl_Text_Buffer(length);
-  deletedTextBuf->copy(buffer(), countFrom, pos, 0);
-  if (nDeleted != 0)
-    deletedTextBuf->insert(pos-countFrom, deletedText);
-  deletedTextBuf->copy(buffer(), pos+nInserted, countTo, pos-countFrom+nDeleted);
-  /* Note that we need to take into account an offset for the style buffer:
-   the deletedTextBuf can be out of sync with the style buffer. */
-  wrapped_line_counter(deletedTextBuf, 0, length, INT_MAX, true, countFrom,
-                       &retPos, &retLines, &retLineStart, &retLineEnd, false);
-  delete deletedTextBuf;
-  *linesDeleted = retLines;
-  mSuppressResync = 0;
-}
-
-
-
-/**
- \brief Wrapping calculations.
-
- This is a stripped-down version of the findWrapRange() function above,
- intended to be used to calculate the number of "deleted" lines during
- a buffer modification. It is called _before_ the modification takes place.
-
- This function should only be called in continuous wrap mode with a
- non-fixed font width. In that case, it is impossible to calculate
- the number of deleted lines, because the necessary style information
- is no longer available _after_ the modification. In other cases, we
- can still perform the calculation afterwards (possibly even more
- efficiently).
-
- \param pos
- \param nDeleted
- */
-void Fl_Text_Display::measure_deleted_lines(int pos, int nDeleted) {
-  IS_UTF8_ALIGNED2(buffer(), pos)
-
-  int retPos, retLines, retLineStart, retLineEnd;
-  Fl_Text_Buffer *buf = buffer();
-  int nVisLines = mNVisibleLines;
-  int *lineStarts = mLineStarts;
-  int countFrom, lineStart;
-  int nLines = 0, i;
-  /*
-   ** Determine where to begin searching: either the previous newline, or
-   ** if possible, limit to the start of the (original) previous displayed
-   ** line, using information from the existing line starts array
-   */
-  if (pos >= mFirstChar && pos <= mLastChar) {
-    for (i=nVisLines-1; i>0; i--)
-      if (lineStarts[i] != -1 && pos >= lineStarts[i])
-        break;
-    if (i > 0) {
-      countFrom = lineStarts[i-1];
-    } else
-      countFrom = buf->line_start(pos);
-  } else
-    countFrom = buf->line_start(pos);
-
-  /*
-   ** Move forward through the (new) text one line at a time, counting
-   ** displayed lines, and looking for either a real newline, or for the
-   ** line starts to re-sync with the original line starts array
-   */
-  lineStart = countFrom;
-  for (;;) {
-    /* advance to the next line.  If the line ended in a real newline
-     or the end of the buffer, that's far enough */
-    wrapped_line_counter(buf, lineStart, buf->length(), 1, true, 0,
-                         &retPos, &retLines, &retLineStart, &retLineEnd);
-    if (retPos >= buf->length()) {
-      if (retPos != retLineEnd)
-        nLines++;
-      break;
-    } else
-      lineStart = retPos;
-    nLines++;
-    if (lineStart > pos + nDeleted && buf->char_at(lineStart-1) == '\n') {
-      break;
-    }
-
-    /* Unlike in the findWrapRange() function above, we don't try to
-     resync with the line starts, because we don't know the length
-     of the inserted text yet, nor the updated style information.
-
-     Because of that, we also shouldn't resync with the line starts
-     after the modification either, because we must perform the
-     calculations for the deleted and inserted lines in the same way.
-
-     This can result in some unnecessary recalculation and redrawing
-     overhead, and therefore we should only use this two-phase mode
-     of calculation when it's really needed (continuous wrap + variable
-     font width). */
-  }
-  mNLinesDeleted = nLines;
-  mSuppressResync = 1;
-}
-
-
-
-/**
- \brief Wrapping calculations.
-
- Count forward from startPos to either maxPos or maxLines (whichever is
- reached first), and return all relevant positions and line count.
- The provided textBuffer may differ from the actual text buffer of the
- widget. In that case it must be a (partial) copy of the actual text buffer
- and the styleBufOffset argument must indicate the starting position of the
- copy, to take into account the correct style information.
-
- \param[in] buf      The text buffer to operate on
- \param[in] startPos Starting index position into the buffer
- \param[in] maxPos   Maximum index position into the buffer we'll reach
- \param[in] maxLines Maximum number of lines we'll reach
- \param[in] startPosIsLineStart  Flag indicating if startPos is start of line.
-                                 (If set, prevents our having to find the line start)
- \param[in] styleBufOffset Offset index position into style buffer.
-
- \param[out] retPos Position where counting ended.  When counting lines, the
-    position returned is the start of the line "maxLines" lines
-    beyond "startPos".
- \param[out] retLines Number of line breaks counted
- \param[out] retLineStart Start of the line where counting ended
- \param[out] retLineEnd End position of the last line traversed
- \param[out] countLastLineMissingNewLine
- */
-void Fl_Text_Display::wrapped_line_counter(Fl_Text_Buffer *buf, int startPos,
-                                           int maxPos, int maxLines, bool startPosIsLineStart, int styleBufOffset,
-                                           int *retPos, int *retLines, int *retLineStart, int *retLineEnd,
-                                           bool countLastLineMissingNewLine) const {
-  IS_UTF8_ALIGNED2(buf, startPos)
-  IS_UTF8_ALIGNED2(buf, maxPos)
-
-  int lineStart, newLineStart = 0, b, p, colNum, wrapMarginPix;
-  int i, foundBreak;
-  double width;
-  int nLines = 0;
-  unsigned int c;
-
-  /* Set the wrap margin to the wrap column or the view width */
-  if (mWrapMarginPix != 0) {
-    wrapMarginPix = mWrapMarginPix;
-  } else {
-    wrapMarginPix = text_area.w;
-  }
-
-  /* Find the start of the line if the start pos is not marked as a
-   line start. */
-  if (startPosIsLineStart)
-    lineStart = startPos;
-  else
-    lineStart = line_start(startPos);
-
-  /*
-   ** Loop until position exceeds maxPos or line count exceeds maxLines.
-   ** (actually, continues beyond maxPos to end of line containing maxPos,
-   ** in case later characters cause a word wrap back before maxPos)
-   */
-  colNum = 0;
-  width = 0;
-  for (p=lineStart; p<buf->length(); p=buf->next_char(p)) {
-    c = buf->char_at(p);  // UCS-4
-
-    /* If the character was a newline, count the line and start over,
-     otherwise, add it to the width and column counts */
-    if (c == '\n') {
-      if (p >= maxPos) {
-        *retPos = maxPos;
-        *retLines = nLines;
-        *retLineStart = lineStart;
-        *retLineEnd = maxPos;
-        return;
-      }
-      nLines++;
-      int p1 = buf->next_char(p);
-      if (nLines >= maxLines) {
-        *retPos = p1;
-        *retLines = nLines;
-        *retLineStart = p1;
-        *retLineEnd = p;
-        return;
-      }
-      lineStart = p1;
-      colNum = 0;
-      width = 0;
-    } else {
-      const char *s = buf->address(p);
-      colNum++;
-      // FIXME: it is not a good idea to simply add character widths because on
-      // some platforms, the width is a floating point value and depends on the
-      // previous character as well.
-      width += measure_proportional_character(s, (int)width, p+styleBufOffset);
-    }
-
-    /* If character exceeded wrap margin, find the break point and wrap there */
-    if (width > wrapMarginPix) {
-      foundBreak = false;
-      for (b=p; b>=lineStart; b=buf->prev_char(b)) {
-        c = buf->char_at(b);
-        if (c == '\t' || c == ' ') {
-          newLineStart = buf->next_char(b);
-          colNum = 0;
-          width = 0;
-          int iMax = buf->next_char(p);
-          for (i=buf->next_char(b); i<iMax; i = buf->next_char(i)) {
-            width += measure_proportional_character(buf->address(i), (int)width,
-                                                    i+styleBufOffset);
-            colNum++;
-          }
-          foundBreak = true;
-          break;
-        }
-      }
-      if (b<lineStart) b = lineStart;
-      if (!foundBreak) { /* no whitespace, just break at margin */
-        newLineStart = max(p, buf->next_char(lineStart));
-        colNum++;
-	if (b >= buf->length()) { // STR #2730
-	  width = 0;
-	} else {
-	  const char *s = buf->address(b);
-	  width = measure_proportional_character(s, 0, p+styleBufOffset);
-	}
-      }
-      if (p >= maxPos) {
-        *retPos = maxPos;
-        *retLines = maxPos < newLineStart ? nLines : nLines + 1;
-        *retLineStart = maxPos < newLineStart ? lineStart : newLineStart;
-        *retLineEnd = maxPos;
-        return;
-      }
-      nLines++;
-      if (nLines >= maxLines) {
-        *retPos = foundBreak ? buf->next_char(b) : max(p, buf->next_char(lineStart));
-        *retLines = nLines;
-        *retLineStart = lineStart;
-        *retLineEnd = foundBreak ? b : p;
-        return;
-      }
-      lineStart = newLineStart;
-    }
-  }
-
-  /* reached end of buffer before reaching pos or line target */
-  *retPos = buf->length();
-  *retLines = nLines;
-  if (countLastLineMissingNewLine && colNum > 0)
-    *retLines = buf->next_char(*retLines);
-  *retLineStart = lineStart;
-  *retLineEnd = buf->length();
-}
-
-
-
-/**
- \brief Wrapping calculations.
-
- Measure the width in pixels of the first character of string "s" at a
- particular column "colNum" and buffer position "pos".  This is for measuring
- characters in proportional or mixed-width highlighting fonts.
-
- A note about proportional and mixed-width fonts: the mixed width and
- proportional font code in nedit does not get much use in general editing,
- because nedit doesn't allow per-language-mode fonts, and editing programs
- in a proportional font is usually a bad idea, so very few users would
- choose a proportional font as a default.  There are still probably mixed-
- width syntax highlighting cases where things don't redraw properly for
- insertion/deletion, though static display and wrapping and resizing
- should now be solid because they are now used for online help display.
-
- \param s text string
- \param xPix x pixel position needed for calculating tab widths
- \param pos offset within string
- \return width of character in pixels
- */
-double Fl_Text_Display::measure_proportional_character(const char *s, int xPix, int pos) const {
-  IS_UTF8_ALIGNED(s)
-
-  if (*s=='\t') {
-    int tab = (int)col_to_x(mBuffer->tab_distance());
-    return (((xPix/tab)+1)*tab) - xPix;
-  }
-
-  int charLen = fl_utf8len1(*s), style = 0;
-  if (mStyleBuffer) {
-    style = mStyleBuffer->byte_at(pos);
-  }
-  return string_width(s, charLen, style);
-}
-
-
-
-/**
- \brief Finds both the end of the current line and the start of the next line.
-
- Why?
- In continuous wrap mode, if you need to know both, figuring out one from the
- other can be expensive or error prone.  The problem comes when there's a
- trailing space or tab just before the end of the buffer.  To translate an
- end of line value to or from the next lines start value, you need to know
- whether the trailing space or tab is being used as a line break or just a
- normal character, and to find that out would otherwise require counting all
- the way back to the beginning of the line.
-
- \param startPos
- \param startPosIsLineStart
- \param[out] lineEnd
- \param[out] nextLineStart
- */
-void Fl_Text_Display::find_line_end(int startPos, bool startPosIsLineStart,
-                                    int *lineEnd, int *nextLineStart) const {
-  IS_UTF8_ALIGNED2(buffer(), startPos)
-
-  int retLines, retLineStart;
-
-  /* if we're not wrapping use more efficient BufEndOfLine */
-  if (!mContinuousWrap) {
-    int le = buffer()->line_end(startPos);
-    int ls = buffer()->next_char(le);
-    *lineEnd = le;
-    *nextLineStart = min(buffer()->length(), ls);
-    return;
-  }
-
-  /* use the wrapped line counter routine to count forward one line */
-  wrapped_line_counter(buffer(), startPos, buffer()->length(),
-                       1, startPosIsLineStart, 0, nextLineStart, &retLines,
-                       &retLineStart, lineEnd);
-}
-
-
-
-/**
- \brief Check if the line break is caused by a \\n or by line wrapping.
-
- Line breaks in continuous wrap mode usually happen at newlines or
- whitespace.  This line-terminating character is not included in line
- width measurements and has a special status as a non-visible character.
- However, lines with no whitespace are wrapped without the benefit of a
- line terminating character, and this distinction causes endless trouble
- with all of the text display code which was originally written without
- continuous wrap mode and always expects to wrap at a newline character.
-
- Given the position of the end of the line, as returned by TextDEndOfLine
- or BufEndOfLine, this returns true if there is a line terminating
- character, and false if there's not.  On the last character in the
- buffer, this function can't tell for certain whether a trailing space was
- used as a wrap point, and just guesses that it wasn't.  So if an exact
- accounting is necessary, don't use this function.
-
- \param lineEndPos index of character where the line wraps
- \return 1 if a \\n character causes the line wrap
- */
-int Fl_Text_Display::wrap_uses_character(int lineEndPos) const {
-  IS_UTF8_ALIGNED2(buffer(), lineEndPos)
-
-  unsigned int c;
-
-  if (!mContinuousWrap || lineEndPos == buffer()->length())
-    return 1;
-
-  c = buffer()->char_at(lineEndPos);
-  return c == '\n' || ((c == '\t' || c == ' ') &&
-                       lineEndPos + 1 < buffer()->length());
-}
-
-
-
-/**
- \brief I don't know what this does!
-
- Extend the range of a redraw request (from *start to *end) with additional
- redraw requests resulting from changes to the attached style buffer (which
- contains auxiliary information for coloring or styling text).
-
- \param startpos ??
- \param endpos ??
-
- \todo Unicode?
- */
-void Fl_Text_Display::extend_range_for_styles( int *startpos, int *endpos ) {
-  IS_UTF8_ALIGNED2(buffer(), (*startpos))
-  IS_UTF8_ALIGNED2(buffer(), (*endpos))
-
-  Fl_Text_Selection * sel = mStyleBuffer->primary_selection();
-  int extended = 0;
-
-  /* The peculiar protocol used here is that modifications to the style
-   buffer are marked by selecting them with the buffer's primary Fl_Text_Selection.
-   The style buffer is usually modified in response to a modify callback on
-   the text buffer BEFORE Fl_Text_Display.c's modify callback, so that it can keep
-   the style buffer in step with the text buffer.  The style-update
-   callback can't just call for a redraw, because Fl_Text_Display hasn't processed
-   the original text changes yet.  Anyhow, to minimize redrawing and to
-   avoid the complexity of scheduling redraws later, this simple protocol
-   tells the text display's buffer modify callback to extend its redraw
-   range to show the text color/and font changes as well. */
-  if ( sel->selected() ) {
-    if ( sel->start() < *startpos ) {
-      *startpos = sel->start();
-      // somewhere while deleting, alignment is lost. We do this just to be sure.
-      *startpos = buffer()->utf8_align(*startpos);
-      IS_UTF8_ALIGNED2(buffer(), (*startpos))
-      extended = 1;
-    }
-    if ( sel->end() > *endpos ) {
-      *endpos = sel->end();
-      *endpos = buffer()->utf8_align(*endpos);
-      IS_UTF8_ALIGNED2(buffer(), (*endpos))
-      extended = 1;
-    }
-  }
-
-  /* If the Fl_Text_Selection was extended due to a style change, and some of the
-   fonts don't match in spacing, extend redraw area to end of line to
-   redraw characters exposed by possible font size changes */
-  if ( extended )
-    *endpos = mBuffer->line_end( *endpos ) + 1;
-
-  IS_UTF8_ALIGNED2(buffer(), (*endpos))
-}
-
-
-
-/**
- \brief Draw the widget.
-
- This function tries to limit drawing to smaller areas if possible.
- */
-void Fl_Text_Display::draw(void) {
-  // don't even try if there is no associated text buffer!
-  if (!buffer()) { draw_box(); return; }
-
-  fl_push_clip(x(),y(),w(),h());	// prevent drawing outside widget area
-
-  // background color -- change if inactive
-  Fl_Color bgcolor = active_r() ? color() : fl_inactive(color());
-
-  // draw the non-text, non-scrollbar areas.
-  if (damage() & FL_DAMAGE_ALL) {
-    //    printf("drawing all (box = %d)\n", box());
-    if (Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) {
-      // if to printer, draw the background
-      fl_rectf(text_area.x, text_area.y, text_area.w, text_area.h, bgcolor);
-    }
-    // draw the box()
-    int W = w(), H = h();
-    draw_box(box(), x(), y(), W, H, bgcolor);
-
-    if (mHScrollBar->visible())
-      W -= scrollbar_width();
-    if (mVScrollBar->visible())
-      H -= scrollbar_width();
-
-    // left margin
-    fl_rectf(text_area.x-LEFT_MARGIN, text_area.y-TOP_MARGIN,
-             LEFT_MARGIN, text_area.h+TOP_MARGIN+BOTTOM_MARGIN,
-             bgcolor);
-
-    // right margin
-    fl_rectf(text_area.x+text_area.w, text_area.y-TOP_MARGIN,
-             RIGHT_MARGIN, text_area.h+TOP_MARGIN+BOTTOM_MARGIN,
-             bgcolor);
-
-    // top margin
-    fl_rectf(text_area.x, text_area.y-TOP_MARGIN,
-             text_area.w, TOP_MARGIN, bgcolor);
-
-    // bottom margin
-    fl_rectf(text_area.x, text_area.y+text_area.h,
-             text_area.w, BOTTOM_MARGIN, bgcolor);
-
-    // draw that little box in the corner of the scrollbars
-    if (mVScrollBar->visible() && mHScrollBar->visible())
-      fl_rectf(mVScrollBar->x(), mHScrollBar->y(),
-               mVScrollBar->w(), mHScrollBar->h(),
-               FL_GRAY);
-    //draw_line_numbers(true);		// commented out STR# 2621 / LZA
-  }
-  else if (damage() & (FL_DAMAGE_SCROLL | FL_DAMAGE_EXPOSE)) {
-    //    printf("blanking previous cursor extrusions at Y: %d\n", mCursorOldY);
-    // CET - FIXME - save old cursor position instead and just draw side needed?
-    fl_push_clip(text_area.x-LEFT_MARGIN,
-                 text_area.y,
-                 text_area.w+LEFT_MARGIN+RIGHT_MARGIN,
-                 text_area.h);
-    fl_rectf(text_area.x-LEFT_MARGIN, mCursorOldY,
-             LEFT_MARGIN, mMaxsize, bgcolor);
-    fl_rectf(text_area.x+text_area.w, mCursorOldY,
-             RIGHT_MARGIN, mMaxsize, bgcolor);
-    fl_pop_clip();
-  }
-
-  // draw the scrollbars
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_CHILD)) {
-    mVScrollBar->damage(FL_DAMAGE_ALL);
-    mHScrollBar->damage(FL_DAMAGE_ALL);
-  }
-  update_child(*mVScrollBar);
-  update_child(*mHScrollBar);
-
-  // draw all of the text
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_EXPOSE)) {
-    //printf("drawing all text\n");
-    int X, Y, W, H;
-    if (fl_clip_box(text_area.x, text_area.y, text_area.w, text_area.h,
-                    X, Y, W, H)) {
-      // Draw text using the intersected clipping box...
-      // (this sets the clipping internally)
-      draw_text(X, Y, W, H);
-    } else {
-      // Draw the whole area...
-      draw_text(text_area.x, text_area.y, text_area.w, text_area.h);
-    }
-  }
-  else if (damage() & FL_DAMAGE_SCROLL) {
-    // draw some lines of text
-    fl_push_clip(text_area.x, text_area.y,
-                 text_area.w, text_area.h);
-    //printf("drawing text from %d to %d\n", damage_range1_start, damage_range1_end);
-    draw_range(damage_range1_start, damage_range1_end);
-    if (damage_range2_end != -1) {
-      //printf("drawing text from %d to %d\n", damage_range2_start, damage_range2_end);
-      draw_range(damage_range2_start, damage_range2_end);
-    }
-    damage_range1_start = damage_range1_end = -1;
-    damage_range2_start = damage_range2_end = -1;
-    fl_pop_clip();
-  }
-
-  // draw the text cursor
-  int start, end;
-  int has_selection = buffer()->selection_position(&start, &end);
-  if (damage() & (FL_DAMAGE_ALL | FL_DAMAGE_SCROLL | FL_DAMAGE_EXPOSE)
-      && (
-#ifdef __APPLE__
-	  Fl::compose_state ||
-#endif
-	  !has_selection || mCursorPos < start || mCursorPos > end) &&
-      mCursorOn && Fl::focus() == (Fl_Widget*)this ) {
-    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(mCursorPos, &X, &Y)) {
-      draw_cursor(X, Y);
-      mCursorOldY = Y;
-    }
-    //    else puts("position_to_xy() failed - unable to draw cursor!");
-    //printf("drew cursor at pos: %d (%d,%d)\n", mCursorPos, X, Y);
-    fl_pop_clip();
-  }
-
-  // Important to do this at end of this method, otherwise line numbers
-  // will not scroll with the text edit area
-  draw_line_numbers(true);
-    
-  fl_pop_clip();
-}
-
-
-
-// this processes drag events due to mouse for Fl_Text_Display and
-// also drags due to cursor movement with shift held down for
-// Fl_Text_Editor
-void fl_text_drag_me(int pos, Fl_Text_Display* d) {
-  if (d->dragType == Fl_Text_Display::DRAG_CHAR) {
-    if (pos >= d->dragPos) {
-      d->buffer()->select(d->dragPos, pos);
-    } else {
-      d->buffer()->select(pos, d->dragPos);
-    }
-    d->insert_position(pos);
-  } else if (d->dragType == Fl_Text_Display::DRAG_WORD) {
-    if (pos >= d->dragPos) {
-      d->insert_position(d->word_end(pos));
-      d->buffer()->select(d->word_start(d->dragPos), d->word_end(pos));
-    } else {
-      d->insert_position(d->word_start(pos));
-      d->buffer()->select(d->word_start(pos), d->word_end(d->dragPos));
-    }
-  } else if (d->dragType == Fl_Text_Display::DRAG_LINE) {
-    if (pos >= d->dragPos) {
-      d->insert_position(d->buffer()->line_end(pos)+1);
-      d->buffer()->select(d->buffer()->line_start(d->dragPos),
-                          d->buffer()->line_end(pos)+1);
-    } else {
-      d->insert_position(d->buffer()->line_start(pos));
-      d->buffer()->select(d->buffer()->line_start(pos),
-                          d->buffer()->line_end(d->dragPos)+1);
-    }
-  }
-}
-
-
-
-/**
- \brief Timer callback for scroll events.
-
- This timer event scrolls the text view proportionally to
- how far the mouse pointer has left the text area. This
- allows for smooth scrolling without "wiggeling" the mouse.
- */
-void Fl_Text_Display::scroll_timer_cb(void *user_data) {
-  Fl_Text_Display *w = (Fl_Text_Display*)user_data;
-  int pos;
-  switch (scroll_direction) {
-    case 1: // mouse is to the right, scroll left
-      w->scroll(w->mTopLineNum, w->mHorizOffset + scroll_amount);
-      pos = w->xy_to_position(w->text_area.x + w->text_area.w, scroll_y, CURSOR_POS);
-      break;
-    case 2: // mouse is to the left, scroll right
-      w->scroll(w->mTopLineNum, w->mHorizOffset + scroll_amount);
-      pos = w->xy_to_position(w->text_area.x, scroll_y, CURSOR_POS);
-      break;
-    case 3: // mouse is above, scroll down
-      w->scroll(w->mTopLineNum + scroll_amount, w->mHorizOffset);
-      pos = w->xy_to_position(scroll_x, w->text_area.y, CURSOR_POS);
-      break;
-    case 4: // mouse is below, scroll up
-      w->scroll(w->mTopLineNum + scroll_amount, w->mHorizOffset);
-      pos = w->xy_to_position(scroll_x, w->text_area.y + w->text_area.h, CURSOR_POS);
-      break;
-    default:
-      return;
-  }
-  fl_text_drag_me(pos, w);
-  Fl::repeat_timeout(.1, scroll_timer_cb, user_data);
-}
-
-
-
-/**
- \brief Event handling.
- */
-int Fl_Text_Display::handle(int event) {
-  if (!buffer()) return 0;
-  // This isn't very elegant!
-  if (!Fl::event_inside(text_area.x, text_area.y, text_area.w, text_area.h) &&
-      !dragging && event != FL_LEAVE && event != FL_ENTER &&
-      event != FL_MOVE && event != FL_FOCUS && event != FL_UNFOCUS &&
-      event != FL_KEYBOARD && event != FL_KEYUP) {
-    return Fl_Group::handle(event);
-  }
-
-  switch (event) {
-    case FL_ENTER:
-    case FL_MOVE:
-      if (active_r()) {
-        if (Fl::event_inside(text_area.x, text_area.y, text_area.w,
-	                     text_area.h)) window()->cursor(FL_CURSOR_INSERT);
-	else window()->cursor(FL_CURSOR_DEFAULT);
-	return 1;
-      } else {
-        return 0;
-      }
-
-    case FL_LEAVE:
-    case FL_HIDE:
-      if (active_r() && window()) {
-        window()->cursor(FL_CURSOR_DEFAULT);
-
-	return 1;
-      } else {
-	return 0;
-      }
-
-    case FL_PUSH: {
-      if (active_r() && window()) {
-        if (Fl::event_inside(text_area.x, text_area.y, text_area.w,
-                             text_area.h)) window()->cursor(FL_CURSOR_INSERT);
-        else window()->cursor(FL_CURSOR_DEFAULT);
-      }
-
-      if (Fl::focus() != this) {
-        Fl::focus(this);
-        handle(FL_FOCUS);
-      }
-      if (Fl_Group::handle(event)) return 1;
-      if (Fl::event_state()&FL_SHIFT) return handle(FL_DRAG);
-      dragging = 1;
-      int pos = xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS);
-      dragPos = pos;
-      if (buffer()->primary_selection()->includes(pos)) {
-        dragType = DRAG_START_DND;
-        return 1;
-      }
-      dragType = Fl::event_clicks();
-      if (dragType == DRAG_CHAR) {
-        buffer()->unselect();
-//	Fl::copy("", 0, 0); /* removed for STR 2668 */
-      }
-      else if (dragType == DRAG_WORD) {
-        buffer()->select(word_start(pos), word_end(pos));
-	dragPos = word_start(pos);
-	}
-
-      if (buffer()->primary_selection()->selected())
-        insert_position(buffer()->primary_selection()->end());
-      else
-        insert_position(pos);
-      show_insert_position();
-      return 1;
-    }
-
-    case FL_DRAG: {
-      if (dragType==DRAG_NONE)
-        return 1;
-      if (dragType==DRAG_START_DND) {
-        if (!Fl::event_is_click() && Fl::dnd_text_ops()) {
-          const char* copy = buffer()->selection_text();
-#ifdef __APPLE__
-          Fl_X::dnd(1);
-#else
-          Fl::dnd();
-#endif
-          free((void*)copy);
-        }
-        return 1;
-      }
-      int X = Fl::event_x(), Y = Fl::event_y(), pos = insert_position();
-      // if we leave the text_area, we start a timer event
-      // that will take care of scrolling and selecting
-      if (Y < text_area.y) {
-        scroll_x = X;
-        scroll_amount = (Y - text_area.y) / 5 - 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 3;
-      } else if (Y >= text_area.y+text_area.h) {
-        scroll_x = X;
-        scroll_amount = (Y - text_area.y - text_area.h) / 5 + 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 4;
-      } else if (X < text_area.x) {
-        scroll_y = Y;
-        scroll_amount = (X - text_area.x) / 2 - 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 2;
-      } else if (X >= text_area.x+text_area.w) {
-        scroll_y = Y;
-        scroll_amount = (X - text_area.x - text_area.w) / 2 + 1;
-        if (!scroll_direction) {
-          Fl::add_timeout(.01, scroll_timer_cb, this);
-        }
-        scroll_direction = 1;
-      } else {
-        if (scroll_direction) {
-          Fl::remove_timeout(scroll_timer_cb, this);
-          scroll_direction = 0;
-        }
-        pos = xy_to_position(X, Y, CURSOR_POS);
-        pos = buffer()->next_char(pos);
-      }
-      fl_text_drag_me(pos, this);
-      return 1;
-    }
-
-    case FL_RELEASE: {
-      if (Fl::event_is_click() && (! Fl::event_clicks()) &&
-	  buffer()->primary_selection()->includes(dragPos) && !(Fl::event_state()&FL_SHIFT) ) {
-	buffer()->unselect(); // clicking in the selection: unselect and move cursor
-	insert_position(dragPos);
-	return 1;
-      } else if (Fl::event_clicks() == DRAG_LINE && Fl::event_button() == FL_LEFT_MOUSE) {
-        buffer()->select(buffer()->line_start(dragPos), buffer()->next_char(buffer()->line_end(dragPos)));
-	dragPos = line_start(dragPos);
-	dragType = DRAG_CHAR;
-      } else {
-	dragging = 0;
-	if (scroll_direction) {
-	  Fl::remove_timeout(scroll_timer_cb, this);
-	  scroll_direction = 0;
-	}
-
-	// convert from WORD or LINE selection to CHAR
-	/*if (insert_position() >= dragPos)
-	  dragPos = buffer()->primary_selection()->start();
-	else
-	  dragPos = buffer()->primary_selection()->end();*/
-	dragType = DRAG_CHAR;
-      }
-
-      const char* copy = buffer()->selection_text();
-      if (*copy) Fl::copy(copy, (int) strlen(copy), 0);
-      free((void*)copy);
-      return 1;
-    }
-
-    case FL_MOUSEWHEEL:
-      if (Fl::event_dy()) return mVScrollBar->handle(event);
-      else return mHScrollBar->handle(event);
-
-    case FL_UNFOCUS:
-      if (active_r() && window()) window()->cursor(FL_CURSOR_DEFAULT);
-    case FL_FOCUS:
-      if (buffer()->selected()) {
-        int start, end;
-        if (buffer()->selection_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      if (buffer()->secondary_selected()) {
-        int start, end;
-        if (buffer()->secondary_selection_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      if (buffer()->highlight()) {
-        int start, end;
-        if (buffer()->highlight_position(&start, &end))
-          redisplay_range(start, end);
-      }
-      return 1;
-
-    case FL_KEYBOARD:
-      // Copy?
-      if ((Fl::event_state()&(FL_CTRL|FL_COMMAND)) && Fl::event_key()=='c') {
-        if (!buffer()->selected()) return 1;
-        const char *copy = buffer()->selection_text();
-        if (*copy) Fl::copy(copy, (int) strlen(copy), 1);
-        free((void*)copy);
-        return 1;
-      }
-
-      // Select all ?
-      if ((Fl::event_state()&(FL_CTRL|FL_COMMAND)) && Fl::event_key()=='a') {
-        buffer()->select(0,buffer()->length());
-        const char *copy = buffer()->selection_text();
-        if (*copy) Fl::copy(copy, (int) strlen(copy), 0);
-        free((void*)copy);
-        return 1;
-      }
-
-      if (mVScrollBar->handle(event)) return 1;
-      if (mHScrollBar->handle(event)) return 1;
-
-      break;
-
-    case FL_SHORTCUT:
-      if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut()))
-        return 0;
-      if (Fl::visible_focus() && handle(FL_FOCUS)) {
-        Fl::focus(this);
-        return 1;
-      }
-      break;
-
-  }
-
-  return 0;
-}
-
-
-/*
- Convert an x pixel position into a column number.
- */
-double Fl_Text_Display::x_to_col(double y) const
-{
-  if (!mColumnScale) {
-    mColumnScale = string_width("Mitg", 4, 'A') / 4.0;
-  }
-  return (y/mColumnScale)+0.5;
-}
-
-
-/**
- Convert a column number into an x pixel position.
- */
-double Fl_Text_Display::col_to_x(double col) const
-{
-  if (!mColumnScale) {
-    // recalculate column scale value
-    x_to_col(0);
-  }
-  return col*mColumnScale;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Text_Editor.cxx
+++ /dev/null
@@ -1,826 +1,0 @@
-//
-// "$Id$"
-//
-// Copyright 2001-2010 by Bill Spitzak and others.
-// Original code Copyright Mark Edel.  Permission to distribute under
-// the LGPL for the FLTK library granted by Mark Edel.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Text_Editor.H>
-#include <FL/fl_ask.H>
-
-
-/* Keyboard Control Matrix
-
-key\modifier   plain  Ctrl   Alt  Meta  
-  left          1/1  13/9   0/13  0/9  
-  right         2/2  14/10  0/14  0/10  
-  up            3/19 21/7   0/15  0/17 
-  down          4/20 22/8   0/16  0/18
-  home          9/5  17/0   0/0   0/0
-  end          10/6  18/0   0/0   0/0
-  page up      11/7  23/0   0/11  0/0
-  page down    12/8  24/0   0/12  0/0
-    (FLTK action / OS X action)
-    (adding the shift key extends the selection, all other combinations are no-op)
-
-  0: no-op
-  1: move cursor to the left, at line beginning wrap to end of prev line, at doc start no-op
-  2: move cursor to the right, at line end move to beginning of the next line, at doc end no-op
-  3: move cursor up, at doc top no-op
-  4: move cursor down, at doc bottom no-op
-  5: scroll display to top of text (cursor unchanged)
-  6: scroll display to end of text (cursor unchanged)
-  7: scroll text down one page (cursor unchanged)
-  8: scroll text up one page (cursor unchanged)
-  9: move cursor to beginning of line
- 10: move cursor to end of line
- 11: move cursor up one page and scroll down
- 12: move cursor down one page and scroll up
- 13: move to the beginning of the word or the previous word
- 14: move to the end of the word or the next word
- 15: if start of line: start of prev line, else start of this line
- 16: if end of line: end of next line, else end of this line
- 17: move cursor to the beginning of the document
- 18: move cursor to the end of the document
- 19: move cursor up, at doc top: home, at doc start: no-op)
- 20: move cursor down, at doc bot: end, at doc end: no-op)
- 21: scroll text down one line (cursor unchanged)
- 22: scroll text up one line (cursor unchanged)
- 23: move cursor to the beginning of the top of the screen
- 24: move cursor to the beginning of the bottom of the window
-*/
-
-/**  The constructor creates a new text editor widget.*/
-Fl_Text_Editor::Fl_Text_Editor(int X, int Y, int W, int H,  const char* l)
-    : Fl_Text_Display(X, Y, W, H, l) {
-  mCursorOn = 1;
-  insert_mode_ = 1;
-  key_bindings = 0;
-  set_flag(MAC_USE_ACCENTS_MENU);
-
-  // handle the default key bindings
-  add_default_key_bindings(&key_bindings);
-
-  // handle everything else
-  default_key_function(kf_default);
-}
-
-#ifndef FL_DOXYGEN
-Fl_Text_Editor::Key_Binding* Fl_Text_Editor::global_key_bindings = 0;
-#endif
-
-// These are the default key bindings every widget should start with
-static struct {
-  int key;
-  int state;
-  Fl_Text_Editor::Key_Func func;
-} default_key_bindings[] = {
-  { FL_Escape,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_ignore     },
-  { FL_Enter,     FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_enter      },
-  { FL_KP_Enter,  FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_enter      },
-  { FL_BackSpace, FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_backspace  },
-  { FL_Insert,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_insert     },
-  { FL_Delete,    FL_TEXT_EDITOR_ANY_STATE, Fl_Text_Editor::kf_delete     },
-  { FL_Home,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_End,       0,                        Fl_Text_Editor::kf_move       },
-  { FL_Left,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_Up,        0,                        Fl_Text_Editor::kf_move       },
-  { FL_Right,     0,                        Fl_Text_Editor::kf_move       },
-  { FL_Down,      0,                        Fl_Text_Editor::kf_move       },
-  { FL_Page_Up,   0,                        Fl_Text_Editor::kf_move       },
-  { FL_Page_Down, 0,                        Fl_Text_Editor::kf_move       },
-  { FL_Home,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_End,       FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Left,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Up,        FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Right,     FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Down,      FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Page_Up,   FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Page_Down, FL_SHIFT,                 Fl_Text_Editor::kf_shift_move },
-  { FL_Home,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_End,       FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Left,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Up,        FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Right,     FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Down,      FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Page_Up,   FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Page_Down, FL_CTRL,                  Fl_Text_Editor::kf_ctrl_move  },
-  { FL_Home,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_End,       FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Left,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Up,        FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Right,     FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Down,      FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Page_Up,   FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-  { FL_Page_Down, FL_CTRL|FL_SHIFT,         Fl_Text_Editor::kf_c_s_move   },
-//{ FL_Clear,	  0,                        Fl_Text_Editor::delete_to_eol },
-  { 'z',          FL_CTRL,                  Fl_Text_Editor::kf_undo	  },
-  { '/',          FL_CTRL,                  Fl_Text_Editor::kf_undo	  },
-  { 'x',          FL_CTRL,                  Fl_Text_Editor::kf_cut        },
-  { FL_Delete,    FL_SHIFT,                 Fl_Text_Editor::kf_cut        },
-  { 'c',          FL_CTRL,                  Fl_Text_Editor::kf_copy       },
-  { FL_Insert,    FL_CTRL,                  Fl_Text_Editor::kf_copy       },
-  { 'v',          FL_CTRL,                  Fl_Text_Editor::kf_paste      },
-  { FL_Insert,    FL_SHIFT,                 Fl_Text_Editor::kf_paste      },
-  { 'a',          FL_CTRL,                  Fl_Text_Editor::kf_select_all },
-
-#ifdef __APPLE__
-  // Define CMD+key accelerators...
-  { 'z',          FL_COMMAND,               Fl_Text_Editor::kf_undo       },
-  { 'x',          FL_COMMAND,               Fl_Text_Editor::kf_cut        },
-  { 'c',          FL_COMMAND,               Fl_Text_Editor::kf_copy       },
-  { 'v',          FL_COMMAND,               Fl_Text_Editor::kf_paste      },
-  { 'a',          FL_COMMAND,               Fl_Text_Editor::kf_select_all },
-  { FL_Left,      FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Right,     FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Up,        FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Down,      FL_COMMAND,               Fl_Text_Editor::kf_meta_move  },
-  { FL_Left,      FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Right,     FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Up,        FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-  { FL_Down,      FL_COMMAND|FL_SHIFT,      Fl_Text_Editor::kf_m_s_move   },
-#endif // __APPLE__
-
-  { 0,            0,                        0                             }
-};
-
-/**  Adds all of the default editor key bindings to the specified key binding list.*/
-void Fl_Text_Editor::add_default_key_bindings(Key_Binding** list) {
-  for (int i = 0; default_key_bindings[i].key; i++) {
-    add_key_binding(default_key_bindings[i].key,
-                    default_key_bindings[i].state,
-                    default_key_bindings[i].func,
-                    list);
-  }
-}
-
-/**  Returns the function associated with a key binding.*/
-#if FLTK_ABI_VERSION < 10304
-// OLD - non-const
-Fl_Text_Editor::Key_Func Fl_Text_Editor::bound_key_function(int key, int state, Key_Binding* list)
-#else
-// NEW - const (STR#3306)
-Fl_Text_Editor::Key_Func Fl_Text_Editor::bound_key_function(int key, int state, Key_Binding* list) const
-#endif
-{
-  Key_Binding* cur;
-  for (cur = list; cur; cur = cur->next)
-    if (cur->key == key)
-      if (cur->state == FL_TEXT_EDITOR_ANY_STATE || cur->state == state)
-        break;
-  if (!cur) return 0;
-  return cur->function;
-}
-
-/**  Removes all of the key bindings associated with the text editor or list.*/
-void Fl_Text_Editor::remove_all_key_bindings(Key_Binding** list) {
-  Key_Binding *cur, *next;
-  for (cur = *list; cur; cur = next) {
-    next = cur->next;
-    delete cur;
-  }
-  *list = 0;
-}
-
-/** Removes the key binding associated with the key \p key of state \p state
-    from the Key_Binding list \p list.
-
-    This can be used in derived classes to remove global key bindings
-    by using the global (static) Key_Binding list
-    Fl_Text_Editor::global_key_bindings.
-*/
-void Fl_Text_Editor::remove_key_binding(int key, int state, Key_Binding** list) {
-  Key_Binding *cur, *last = 0;
-  for (cur = *list; cur; last = cur, cur = cur->next)
-    if (cur->key == key && cur->state == state) break;
-  if (!cur) return;
-  if (last) last->next = cur->next;
-  else *list = cur->next;
-  delete cur;
-}
-
-/** Adds a \p key of state \p state with the function \p function to an
-    arbitrary key binding list \p list.
-
-    This can be used in derived classes to add global key bindings
-    by using the global (static) Key_Binding list
-    Fl_Text_Editor::global_key_bindings.
-*/
-void Fl_Text_Editor::add_key_binding(int key, int state, Key_Func function,
-                                Key_Binding** list) {
-  Key_Binding* kb = new Key_Binding;
-  kb->key = key;
-  kb->state = state;
-  kb->function = function;
-  kb->next = *list;
-  *list = kb;
-}
-
-////////////////////////////////////////////////////////////////
-
-static void kill_selection(Fl_Text_Editor* e) {
-  if (e->buffer()->selected()) {
-    e->insert_position(e->buffer()->primary_selection()->start());
-    e->buffer()->remove_selection();
-  }
-}
-
-/** Inserts the text associated with key \p 'c' in editor \p 'e'.
-    Honors the current selection and insert/overstrike mode.
-*/
-int Fl_Text_Editor::kf_default(int c, Fl_Text_Editor* e) {
-  // FIXME: this function is a mess! Fix this!
-  if (!c || (!isprint(c) && c != '\t')) return 0;
-  char s[2] = "\0";
-  s[0] = (char)c;
-  kill_selection(e);
-  if (e->insert_mode()) e->insert(s);
-  else e->overstrike(s);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Ignores the key \p 'c' in editor \p 'e'.
-    This method can be used as a keyboard binding to disable a key
-    that might otherwise be handled or entered as text.
-
-    An example would be disabling FL_Escape, so that it isn't added
-    to the buffer when invoked by the user.
-*/
-int Fl_Text_Editor::kf_ignore(int, Fl_Text_Editor*) {
-  return 0; // don't handle
-}
-
-/** Does a backspace for key \p 'c' in the current buffer of editor \p 'e'.
-    Any current selection is deleted.
-    Otherwise, the character left is deleted and the cursor moved.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_backspace(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected() && e->move_left()) {
-    int p1 = e->insert_position();
-    int p2 = e->buffer()->next_char(p1);
-    e->buffer()->select(p1, p2);
-  }
-  kill_selection(e);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Inserts a newline for key \p 'c' at the current cursor position in editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_enter(int, Fl_Text_Editor* e) {
-  kill_selection(e);
-  e->insert("\n");
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-extern void fl_text_drag_me(int pos, Fl_Text_Display* d);
-/** Moves the text cursor in the direction indicated by key \p 'c' in editor \p 'e'.
-    Supported values for 'c' are currently:
-    \code
-        FL_Home      -- moves the cursor to the beginning of the current line
-        FL_End       -- moves the cursor to the end of the current line
-        FL_Left      -- moves the cursor left one character
-        FL_Right     -- moves the cursor right one character
-        FL_Up        -- moves the cursor up one line
-        FL_Down      -- moves the cursor down one line
-        FL_Page_Up   -- moves the cursor up one page
-        FL_Page_Down -- moves the cursor down one page
-    \endcode
-*/
-int Fl_Text_Editor::kf_move(int c, Fl_Text_Editor* e) {
-  int i;
-  int selected = e->buffer()->selected();
-  if (!selected)
-    e->dragPos = e->insert_position();
-  e->buffer()->unselect();
-  Fl::copy("", 0, 0);
-  switch (c) {
-  case FL_Home:
-      e->insert_position(e->buffer()->line_start(e->insert_position()));
-      break;
-    case FL_End:
-      e->insert_position(e->buffer()->line_end(e->insert_position()));
-      break;
-    case FL_Left:
-      e->move_left();
-      break;
-    case FL_Right:
-      e->move_right();
-      break;
-    case FL_Up:
-      e->move_up();
-      break;
-    case FL_Down:
-      e->move_down();
-      break;
-    case FL_Page_Up:
-      for (i = 0; i < e->mNVisibleLines - 1; i++) e->move_up();
-      break;
-    case FL_Page_Down:
-      for (i = 0; i < e->mNVisibleLines - 1; i++) e->move_down();
-      break;
-  }
-  e->show_insert_position();
-  return 1;
-}
-
-/** Extends the current selection in the direction of key \p 'c' in editor \p 'e'.
-    \see kf_move()
-*/
-int Fl_Text_Editor::kf_shift_move(int c, Fl_Text_Editor* e) {
-  kf_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  char *copy = e->buffer()->selection_text();
-  if (copy) {
-    Fl::copy(copy, (int) strlen(copy), 0);
-    free(copy);
-    }
-  return 1;
-}
-
-/** Moves the current text cursor in the direction indicated by control key \p 'c' in editor \p 'e'.
-    Supported values for 'c' are currently:
-    \code
-        FL_Home      -- moves the cursor to the beginning of the document
-        FL_End       -- moves the cursor to the end of the document
-        FL_Left      -- moves the cursor left one word
-        FL_Right     -- moves the cursor right one word
-        FL_Up        -- scrolls up one line, without moving cursor
-        FL_Down      -- scrolls down one line, without moving cursor
-        FL_Page_Up   -- moves the cursor to the beginning of the top line on the current page
-        FL_Page_Down -- moves the cursor to the beginning of the last line on the current page
-    \endcode
-*/
-int Fl_Text_Editor::kf_ctrl_move(int c, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected())
-    e->dragPos = e->insert_position();
-  if (c != FL_Up && c != FL_Down) {
-    e->buffer()->unselect();
-    Fl::copy("", 0, 0);
-    e->show_insert_position();
-  }
-  switch (c) {
-    case FL_Home:
-      e->insert_position(0);
-      e->scroll(0, 0);
-      break;
-    case FL_End:
-      e->insert_position(e->buffer()->length());
-      e->scroll(e->count_lines(0, e->buffer()->length(), 1), 0);
-      break;
-    case FL_Left:
-      e->previous_word();
-      break;
-    case FL_Right:
-      e->next_word();
-      break;
-    case FL_Up:
-      e->scroll(e->mTopLineNum-1, e->mHorizOffset);
-      break;
-    case FL_Down:
-      e->scroll(e->mTopLineNum+1, e->mHorizOffset);
-      break;
-    case FL_Page_Up:
-      e->insert_position(e->mLineStarts[0]);
-      break;
-    case FL_Page_Down:
-      e->insert_position(e->mLineStarts[e->mNVisibleLines-2]);
-      break;
-  }
-  return 1;
-}
-
-/** Moves the current text cursor in the direction indicated by meta key \p 'c' in editor \p 'e'.
-    Supported values for 'c' are currently:
-    \code
-        FL_Up        -- moves cursor to the beginning of the current document
-        FL_Down      -- moves cursor to the end of the current document
-        FL_Left      -- moves the cursor to the beginning of the current line
-        FL_Right     -- moves the cursor to the end of the current line
-    \endcode
-*/
-int Fl_Text_Editor::kf_meta_move(int c, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected())
-    e->dragPos = e->insert_position();
-  if (c != FL_Up && c != FL_Down) {
-    e->buffer()->unselect();
-    Fl::copy("", 0, 0);
-    e->show_insert_position();
-  }
-  switch (c) {
-    case FL_Up:				// top of buffer
-      e->insert_position(0);
-      e->scroll(0, 0);
-      break;
-    case FL_Down:			// end of buffer
-      e->insert_position(e->buffer()->length());
-      e->scroll(e->count_lines(0, e->buffer()->length(), 1), 0);
-      break;
-    case FL_Left:			// beginning of line
-      kf_move(FL_Home, e);
-      break;
-    case FL_Right:			// end of line
-      kf_move(FL_End, e);
-      break;
-  }
-  return 1;
-}
-
-/** Extends the current selection in the direction indicated by meta key \p 'c' in editor \p 'e'.
-    \see kf_meta_move().
-*/
-int Fl_Text_Editor::kf_m_s_move(int c, Fl_Text_Editor* e) {
-  kf_meta_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  return 1;
-}
-
-/** Extends the current selection in the direction indicated by control key \p 'c' in editor \p 'e'.
-    \see kf_ctrl_move().
-*/
-int Fl_Text_Editor::kf_c_s_move(int c, Fl_Text_Editor* e) {
-  kf_ctrl_move(c, e);
-  fl_text_drag_me(e->insert_position(), e);
-  return 1;
-}
-
-/** Moves the text cursor to the beginning of the current line in editor \p 'e'.
-    Same as kf_move(FL_Home, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_home(int, Fl_Text_Editor* e) {
-    return kf_move(FL_Home, e);
-}
-
-/** Moves the text cursor to the end of the current line in editor \p 'e'.
-    Same as kf_move(FL_End, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_end(int, Fl_Text_Editor* e) {
-  return kf_move(FL_End, e);
-}
-
-/** Moves the text cursor one character to the left in editor \p 'e'.
-    Same as kf_move(FL_Left, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_left(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Left, e);
-}
-
-/** Moves the text cursor one line up for editor \p 'e'.
-    Same as kf_move(FL_Up, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_up(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Up, e);
-}
-
-/** Moves the text cursor one character to the right for editor \p 'e'.
-    Same as kf_move(FL_Right, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_right(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Right, e);
-}
-
-/** Moves the text cursor one line down for editor \p 'e'.
-    Same as kf_move(FL_Down, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_down(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Down, e);
-}
-
-/** Moves the text cursor up one page for editor \p 'e'.
-    Same as kf_move(FL_Page_Up, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_page_up(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Page_Up, e);
-}
-
-/** Moves the text cursor down one page for editor \p 'e'.
-    Same as kf_move(FL_Page_Down, e).
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_page_down(int, Fl_Text_Editor* e) {
-  return kf_move(FL_Page_Down, e);
-}
-
-/** Toggles the insert mode for editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_insert(int, Fl_Text_Editor* e) {
-  e->insert_mode(e->insert_mode() ? 0 : 1);
-  return 1;
-}
-
-/** Does a delete of selected text or the current character in the current buffer of editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_delete(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected()) {
-    int p1 = e->insert_position();
-    int p2 = e->buffer()->next_char(p1);
-    e->buffer()->select(p1, p2);
-  }
-
-  kill_selection(e);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Does a copy of selected text or the current character in the current buffer of editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_copy(int, Fl_Text_Editor* e) {
-  if (!e->buffer()->selected()) return 1;
-  const char *copy = e->buffer()->selection_text();
-  if (*copy) Fl::copy(copy, (int) strlen(copy), 1);
-  free((void*)copy);
-  e->show_insert_position();
-  return 1;
-}
-
-/** Does a cut of selected text in the current buffer of editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_cut(int c, Fl_Text_Editor* e) {
-  kf_copy(c, e);
-  kill_selection(e);
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Does a paste of selected text in the current buffer of editor \p 'e'.
-    Any current selection is replaced with the pasted content.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_paste(int, Fl_Text_Editor* e) {
-  kill_selection(e);
-  Fl::paste(*e, 1);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return 1;
-}
-
-/** Selects all text in the current buffer in editor \p 'e'.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_select_all(int, Fl_Text_Editor* e) {
-  e->buffer()->select(0, e->buffer()->length());
-  const char *copy = e->buffer()->selection_text();
-  if (*copy) Fl::copy(copy, (int) strlen(copy), 0);
-  free((void*)copy);
-  return 1;
-}
-
-/** Undo last edit in the current buffer of editor \p 'e'.
-    Also deselects previous selection.
-    The key value \p 'c' is currently unused.
-*/
-int Fl_Text_Editor::kf_undo(int , Fl_Text_Editor* e) {
-  e->buffer()->unselect();
-  Fl::copy("", 0, 0);
-  int crsr;
-  int ret = e->buffer()->undo(&crsr);
-  e->insert_position(crsr);
-  e->show_insert_position();
-  e->set_changed();
-  if (e->when()&FL_WHEN_CHANGED) e->do_callback();
-  return ret;
-}
-
-/** Handles a key press in the editor */
-int Fl_Text_Editor::handle_key() {
-  // Call FLTK's rules to try to turn this into a printing character.
-  // This uses the right-hand ctrl key as a "compose prefix" and returns
-  // the changes that should be made to the text, as a number of
-  // bytes to delete and a string to insert:
-  int del = 0;
-  if (Fl::compose(del)) {
-    if (del) {
-      // del is a number of bytes
-      int dp = insert_position() - del;
-      if ( dp < 0 ) dp = 0;
-      buffer()->select(dp, insert_position());
-    }
-    kill_selection(this);
-    if (Fl::event_length()) {
-      if (insert_mode()) insert(Fl::event_text());
-      else overstrike(Fl::event_text());
-    }
-#ifdef __APPLE__
-    if (Fl::compose_state) {
-      int pos = this->insert_position();
-      this->buffer()->select(pos - Fl::compose_state, pos);
-      }
-#endif
-    show_insert_position();
-    set_changed();
-    if (when()&FL_WHEN_CHANGED) do_callback();
-    return 1;
-  }
-
-  int key = Fl::event_key(), state = Fl::event_state(), c = Fl::event_text()[0];
-  state &= FL_SHIFT|FL_CTRL|FL_ALT|FL_META; // only care about these states
-  Key_Func f;
-  f = bound_key_function(key, state, global_key_bindings);
-  if (!f) f = bound_key_function(key, state, key_bindings);
-  if (f) return f(key, this);
-  if (default_key_function_ && !state) return default_key_function_(c, this);
-  return 0;
-}
-
-/** does or does not a callback according to changed() and when() settings */
-void Fl_Text_Editor::maybe_do_callback() {
-//  printf("Fl_Text_Editor::maybe_do_callback()\n");
-//  printf("changed()=%d, when()=%x\n", changed(), when());
-  if (changed() || (when()&FL_WHEN_NOT_CHANGED)) do_callback();
-}
-
-int Fl_Text_Editor::handle(int event) {
-  static int dndCursorPos;
-  
-  if (!buffer()) return 0;
-
-  switch (event) {
-    case FL_FOCUS:
-      show_cursor(mCursorOn); // redraws the cursor
-      if (buffer()->selected()) redraw(); // Redraw selections...
-      Fl::focus(this);
-      return 1;
-
-    case FL_UNFOCUS:
-      show_cursor(mCursorOn); // redraws the cursor
-#ifdef __APPLE__
-      if (buffer()->selected() && Fl::compose_state) {
-	int pos = insert_position();
-	buffer()->select(pos, pos);
-	Fl::reset_marked_text();
-      }
-#endif
-      if (buffer()->selected()) redraw(); // Redraw selections...
-    case FL_HIDE:
-      if (when() & FL_WHEN_RELEASE) maybe_do_callback();
-      return 1;
-
-    case FL_KEYBOARD:
-      if (active_r() && window() && this == Fl::belowmouse()) 
-        window()->cursor(FL_CURSOR_NONE);
-      return handle_key();
-
-    case FL_PASTE:
-      if (!Fl::event_text()) {
-        fl_beep();
-	return 1;
-      }
-      buffer()->remove_selection();
-      if (insert_mode()) insert(Fl::event_text());
-      else overstrike(Fl::event_text());
-      show_insert_position();
-      set_changed();
-      if (when()&FL_WHEN_CHANGED) do_callback();
-      return 1;
-
-    case FL_ENTER:
-// MRS: WIN32 only?  Need to test!
-//    case FL_MOVE:
-      show_cursor(mCursorOn);
-      return 1;
-
-    case FL_PUSH:
-      if (Fl::event_button() == 2) {
-        // don't let the text_display see this event
-        if (Fl_Group::handle(event)) return 1;
-        dragType = DRAG_NONE;
-	if(buffer()->selected()) {
-	  buffer()->unselect();
-	  }
-	int pos = xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS);
-        insert_position(pos);
-        Fl::paste(*this, 0);
-        Fl::focus(this);
-        set_changed();
-        if (when()&FL_WHEN_CHANGED) do_callback();
-        return 1;
-      }
-      break;
-
-    case FL_SHORTCUT:
-      if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut()))
-        return 0;
-      if (Fl::visible_focus() && handle(FL_FOCUS)) {
-        Fl::focus(this);
-        return 1;
-      }
-      break;
-      
-      // Handle drag'n'drop attempt by the user. This is a simplified 
-      // implementation which allows dnd operations onto the scroll bars.
-    case FL_DND_ENTER: // save the current cursor position
-      if (Fl::visible_focus() && handle(FL_FOCUS))
-        Fl::focus(this);
-      show_cursor(mCursorOn);
-      dndCursorPos = insert_position();
-      /* fall through */
-    case FL_DND_DRAG: // show a temporary insertion cursor
-      insert_position(xy_to_position(Fl::event_x(), Fl::event_y(), CURSOR_POS));
-      return 1;      
-    case FL_DND_LEAVE: // restore original cursor
-      insert_position(dndCursorPos);
-      return 1;      
-    case FL_DND_RELEASE: // keep insertion cursor and wait for the FL_PASTE event
-      if (!dragging) buffer()->unselect(); // FL_PASTE must not destroy current selection if drag comes from outside
-      return 1;
-  }
-
-  return Fl_Text_Display::handle(event);
-}
-
-#if FLTK_ABI_VERSION >= 10304
-/**
-Enables or disables Tab key focus navigation.
-
-When disabled (default), tab characters are inserted into
-Fl_Text_Editor. Only the mouse can change focus.  This behavior is
-desireable when Fl_Text_Editor is used, e.g. in a source code editor.
-
-When enabled, Tab navigates focus to the next widget, and Shift-Tab
-navigates focus to the previous widget. This behavior is desireable
-when Fl_Text_Editor is used e.g. in a database input form.
-
-Currently, this method is implemented as a convenience method
-that adjusts the key bindings for the Tab key. This implementation
-detail may change in the future. Know that changing the editor's
-key bindings for Tab and Shift-Tab may affect tab navigation.
-
-\param [in] val If \p val is 0, Tab inserts a tab character (default).<br>
-		If \p val is 1, Tab navigates widget focus.
-
-\see tab_nav(), Fl::OPTION_ARROW_FOCUS.
-\version 1.3.4 ABI feature
-*/
-void Fl_Text_Editor::tab_nav(int val) {
-  if ( val )
-    add_key_binding(FL_Tab, 0, kf_ignore);
-  else
-    remove_key_binding(FL_Tab, 0);
-}
-
-/**
-Check if Tab focus navigation is enabled.
-
-If disabled (default), hitting Tab inserts a tab character into the
-editor buffer.
-
-If enabled, hitting Tab navigates focus to the next widget,
-and Shift-Tab navigates focus to the previous widget.
-
-\returns	if Tab inserts tab characters or moves the focus
-\retval	0	Tab inserts tab characters (default)
-\retval	1	Tab navigation is enabled.
-
-\see tab_nav(int), Fl::OPTION_ARROW_FOCUS.
-\version 1.3.4 ABI feature
-*/
-int Fl_Text_Editor::tab_nav() const {
-  return (bound_key_function(FL_Tab,0)==kf_ignore) ? 1 : 0;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tile.cxx
+++ /dev/null
@@ -1,305 +1,0 @@
-//
-// "$Id$"
-//
-// Tile widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \class Fl_Tile
-
-  The Fl_Tile class lets you resize its children by dragging
-  the border between them.
-
-  \image html Fl_Tile.png
-  \image latex Fl_Tile.png "Fl_Tile" width=5cm
-
-  For the tiling to work correctly, the children of an Fl_Tile must
-  cover the entire area of the widget, but not overlap.
-  This means that all children must touch each other at their edges,
-  and no gaps can be left inside the Fl_Tile.
-
-  Fl_Tile does not normally draw any graphics of its own.
-  The "borders" which can be seen in the snapshot above are actually
-  part of the children. Their boxtypes have been set to FL_DOWN_BOX
-  creating the impression of "ridges" where the boxes touch. What
-  you see are actually two adjacent FL_DOWN_BOX's drawn next to each
-  other. All neighboring widgets share the same edge - the widget's
-  thick borders make it appear as though the widgets aren't actually
-  touching, but they are. If the edges of adjacent widgets do not
-  touch, then it will be impossible to drag the corresponding edges.
-
-  Fl_Tile allows objects to be resized to zero dimensions.
-  To prevent this you can use the resizable() to limit where
-  corners can be dragged to. For more information see note below.
-
-  Even though objects can be resized to zero sizes, they must initially
-  have non-zero sizes so the Fl_Tile can figure out their layout.
-  If desired, call position() after creating the children but before
-  displaying the window to set the borders where you want.
-
-  <b>Note on resizable(Fl_Widget &w):</b>
-  The "resizable" child widget (which should be invisible) limits where
-  the borders can be dragged to. All dragging will be limited inside the
-  resizable widget's borders. If you don't set it, it will be possible
-  to drag the borders right to the edges of the Fl_Tile widget, and thus
-  resize objects on the edges to zero width or height. When the entire
-  Fl_Tile widget is resized, the resizable() widget will keep its border
-  distance to all borders the same (this is normal resize behavior), so
-  that you can effectively set a border width that will never change.
-  To ensure correct event delivery to all child widgets the resizable()
-  widget must be the first child of the Fl_Tile widget group. Otherwise
-  some events (e.g. FL_MOVE and FL_ENTER) might be consumed by the resizable()
-  widget so that they are lost for widgets covered (overlapped) by the
-  resizable() widget.
-
-  \note
-  You can still resize widgets \b inside the resizable() to zero width and/or
-  height, i.e. box \b 2b above to zero width and box \b 3a to zero height.
-
-  \see void Fl_Group::resizable(Fl_Widget &w)
-
-  Example for resizable with 20 pixel border distance:
-  \code
-    int dx = 20, dy = dx;
-    Fl_Tile tile(50,50,300,300);
-    // create resizable() box first
-    Fl_Box r(tile.x()+dx,tile.y()+dy,tile.w()-2*dx,tile.h()-2*dy);
-    tile.resizable(r);
-    // ... create widgets inside tile (see test/tile.cxx) ...
-    tile.end();
-  \endcode
-
-  See also the complete example program in test/tile.cxx.
-*/
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Window.H>
-#include <stdlib.h>
-
-/**
-  Drags the intersection at (\p oldx,\p oldy) to (\p newx,\p newy).
-  This redraws all the necessary children.
-
-  Pass zero as \p oldx or \p oldy to disable drag in that direction.
-*/
-void Fl_Tile::position(int oldx, int oldy, int newx, int newy) {
-  Fl_Widget*const* a = array();
-  int *p = sizes();
-  p += 8; // skip group & resizable's saved size
-  for (int i=children(); i--; p += 4) {
-    Fl_Widget* o = *a++;
-    if (o == resizable()) continue;
-    int X = o->x();
-    int R = X+o->w();
-    if (oldx) {
-      int t = p[0];
-      if (t == oldx || (t>oldx && X<newx) || (t<oldx && X>newx) ) X = newx;
-      t = p[1];
-      if (t == oldx || (t>oldx && R<newx) || (t<oldx && R>newx) ) R = newx;
-    }
-    int Y = o->y();
-    int B = Y+o->h();
-    if (oldy) {
-      int t = p[2];
-      if (t == oldy || (t>oldy && Y<newy) || (t<oldy && Y>newy) ) Y = newy;
-      t = p[3];
-      if (t == oldy || (t>oldy && B<newy) || (t<oldy && B>newy) ) B = newy;
-    }
-    o->damage_resize(X,Y,R-X,B-Y);
-  }
-}
-
-/**
-  Resizes the Fl_Tile widget and its children.
-
-  Fl_Tile implements its own resize() method. It does not use
-  Fl_Group::resize() to resize itself and its children.
-
-  Enlarging works by just moving the lower-right corner and resizing
-  the bottom and right border widgets accordingly.
-
-  Shrinking the Fl_Tile works in the opposite way by shrinking
-  the bottom and right border widgets, unless they are reduced to zero
-  width or height, resp. or to their minimal sizes defined by the
-  resizable() widget. In this case other widgets will be shrunk as well.
-
-  See the Fl_Tile class documentation about how the resizable() works.
-*/
-
-void Fl_Tile::resize(int X,int Y,int W,int H) {
-
-  // remember how much to move the child widgets:
-  int dx = X-x();
-  int dy = Y-y();
-  int dw = W-w();
-  int dh = H-h();
-  int *p = sizes();
-  // resize this (skip the Fl_Group resize):
-  Fl_Widget::resize(X,Y,W,H);
-
-  // find bottom-right corner of resizable:
-  int OR = p[5];		// old right border
-  int NR = X+W-(p[1]-OR);	// new right border
-  int OB = p[7];		// old bottom border
-  int NB = Y+H-(p[3]-OB);	// new bottom border
-
-  // move everything to be on correct side of new resizable:
-  Fl_Widget*const* a = array();
-  p += 8;
-  for (int i=children(); i--;) {
-    Fl_Widget* o = *a++;
-    int xx = o->x()+dx;
-    int R = xx+o->w();
-    if (*p++ >= OR) xx += dw; else if (xx > NR) xx = NR;
-    if (*p++ >= OR) R += dw; else if (R > NR) R = NR;
-    int yy = o->y()+dy;
-    int B = yy+o->h();
-    if (*p++ >= OB) yy += dh; else if (yy > NB) yy = NB;
-    if (*p++ >= OB) B += dh; else if (B > NB) B = NB;
-    o->resize(xx,yy,R-xx,B-yy);
-    // do *not* call o->redraw() here! If you do, and the tile is inside a
-    // scroll, it'll set the damage areas wrong for all children!
-  }
-}
-
-static void set_cursor(Fl_Tile*t, Fl_Cursor c) {
-  static Fl_Cursor cursor;
-  if (cursor == c || !t->window()) return;
-  cursor = c;
-#ifdef __sgi
-  t->window()->cursor(c,FL_RED,FL_WHITE);
-#else
-  t->window()->cursor(c);
-#endif
-}
-
-static Fl_Cursor cursors[4] = {
-  FL_CURSOR_DEFAULT,
-  FL_CURSOR_WE,
-  FL_CURSOR_NS,
-  FL_CURSOR_MOVE};
-
-int Fl_Tile::handle(int event) {
-  static int sdrag;
-  static int sdx, sdy;
-  static int sx, sy;
-#define DRAGH 1
-#define DRAGV 2
-#define GRABAREA 4
-
-  int mx = Fl::event_x();
-  int my = Fl::event_y();
-
-  switch (event) {
-
-  case FL_MOVE:
-  case FL_ENTER:
-  case FL_PUSH:
-    // don't potentially change the mouse cursor if inactive:
-    if (!active()) break; // will cascade inherited handle()
-    {
-    int mindx = 100;
-    int mindy = 100;
-    int oldx = 0;
-    int oldy = 0;
-    Fl_Widget*const* a = array();
-    int *q = sizes();
-    int *p = q+8;
-    for (int i=children(); i--; p += 4) {
-      Fl_Widget* o = *a++;
-      if (o == resizable()) continue;
-      if (p[1]<q[1] && o->y()<=my+GRABAREA && o->y()+o->h()>=my-GRABAREA) {
-	int t = mx - (o->x()+o->w());
-	if (abs(t) < mindx) {
-	  sdx = t;
-	  mindx = abs(t);
-	  oldx = p[1];
-	}
-      }
-      if (p[3]<q[3] && o->x()<=mx+GRABAREA && o->x()+o->w()>=mx-GRABAREA) {
-	int t = my - (o->y()+o->h());
-	if (abs(t) < mindy) {
-	  sdy = t;
-	  mindy = abs(t);
-	  oldy = p[3];
-	}
-      }
-    }
-    sdrag = 0; sx = sy = 0;
-    if (mindx <= GRABAREA) {sdrag = DRAGH; sx = oldx;}
-    if (mindy <= GRABAREA) {sdrag |= DRAGV; sy = oldy;}
-    set_cursor(this, cursors[sdrag]);
-    if (sdrag) return 1;
-    return Fl_Group::handle(event);
-  }
-
-  case FL_LEAVE:
-    set_cursor(this, FL_CURSOR_DEFAULT);
-    break;
-
-  case FL_DRAG:
-    // This is necessary if CONSOLIDATE_MOTION in Fl_x.cxx is turned off:
-    // if (damage()) return 1; // don't fall behind
-  case FL_RELEASE: {
-    if (!sdrag) return 0; // should not happen
-    Fl_Widget* r = resizable(); if (!r) r = this;
-    int newx;
-    if (sdrag&DRAGH) {
-      newx = Fl::event_x()-sdx;
-      if (newx < r->x()) newx = r->x();
-      else if (newx > r->x()+r->w()) newx = r->x()+r->w();
-    } else
-      newx = sx;
-    int newy;
-    if (sdrag&DRAGV) {
-      newy = Fl::event_y()-sdy;
-      if (newy < r->y()) newy = r->y();
-      else if (newy > r->y()+r->h()) newy = r->y()+r->h();
-    } else
-      newy = sy;
-    position(sx,sy,newx,newy);
-    if (event == FL_DRAG) set_changed();
-    do_callback();
-    return 1;}
-
-  }
-
-  return Fl_Group::handle(event);
-}
-
-/**
-  Creates a new Fl_Tile widget using the given position, size,
-  and label string. The default boxtype is FL_NO_BOX.
-
-  The destructor <I>also deletes all the children</I>. This allows a
-  whole tree to be deleted at once, without having to keep a pointer to
-  all the children in the user code. A kludge has been done so the
-  Fl_Tile and all of its children can be automatic (local)
-  variables, but you must declare the Fl_Tile <I>first</I>, so
-  that it is destroyed last.
-
-  \see class Fl_Group
-*/
-
-Fl_Tile::Fl_Tile(int X,int Y,int W,int H,const char*L)
-: Fl_Group(X,Y,W,H,L)
-{
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tiled_Image.cxx
+++ /dev/null
@@ -1,202 +1,0 @@
-//
-// "$Id$"
-//
-// Tiled image code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-
-/**
-  The constructors create a new tiled image containing the specified image.
-  Use a width and height of 0 to tile the whole window/widget.
-
-  \note Due to implementation constraints in FLTK 1.3.3 and later width
-    and height of 0 may not work as expected when used as background image
-    in widgets other than windows. You may need to center and clip the
-    image (label) and set the label type to FL_NORMAL_LABEL. Doing so will
-    let the tiled image fill the whole widget as its background image.
-    Other combinations of label flags may or may not work.
-
-  \code
-  #include "bg.xpm"
-  Fl_Pixmap *bg_xpm = new Fl_Pixmap(bg_xpm);
-  Fl_Tiled_Image *bg_tiled = new Fl_Tiled_Image(bg_xpm,0,0);
-
-  Fl_Box *box = new Fl_Box(40,40,300,100,"");
-  box->box(FL_UP_BOX);
-  box->labeltype(FL_NORMAL_LABEL);
-  box->align(FL_ALIGN_INSIDE | FL_ALIGN_CENTER | FL_ALIGN_CLIP);
-  box->image(bg_tiled);
-  \endcode
-
-  \note Setting an image (label) for a window may not work as expected due
-    to implementation constraints in FLTK 1.3.x and maybe later. The reason
-    is the way Fl::scheme() initializes the window's label type and image.
-    A possible workaround is to use another Fl_Group as the only child widget
-    and to set the background image for this group as described above.
-
-  \todo Fix Fl_Tiled_Image as background image for widgets and windows
-    and fix the implementation of Fl::scheme(const char *).
-*/
-Fl_Tiled_Image::Fl_Tiled_Image(Fl_Image *i,	// I - Image to tile
-                               int      W,	// I - Width of tiled area
-			       int      H) :	// I - Height of tiled area
-  Fl_Image(W,H,0) {
-  image_       = i;
-  alloc_image_ = 0;
-
-  // giving to the tiled image the screen size may fail with multiscreen
-  // configurations, so we leave it with w = h = 0 (STR #3106)
-  // if (W == 0) w(Fl::w());
-  // if (H == 0) h(Fl::h());
-}
-/**
-  The destructor frees all memory and server resources that are used by
-  the tiled image.
-*/
-  Fl_Tiled_Image::~Fl_Tiled_Image() {
-  if (alloc_image_) delete image_;
-}
-
-
-//
-// 'Fl_Tiled_Image::copy()' - Copy and resize a tiled image...
-//
-
-Fl_Image *			// O - New image
-Fl_Tiled_Image::copy(int W,	// I - New width
-                     int H) {	// I - New height
-  if (W == w() && H == h()) return this;
-  else return new Fl_Tiled_Image(image_, W, H);
-}
-
-
-//
-// 'Fl_Tiled_Image::color_average()' - Blend colors...
-//
-
-void
-Fl_Tiled_Image::color_average(Fl_Color c,	// I - Color to blend with
-                              float    i) {	// I - Blend fraction
-  if (!alloc_image_) {
-    image_       = image_->copy();
-    alloc_image_ = 1;
-  }
-
-  image_->color_average(c, i);
-}
-
-
-//
-// 'Fl_Tiled_Image::desaturate()' - Convert the image to grayscale...
-//
-
-void
-Fl_Tiled_Image::desaturate() {
-  if (!alloc_image_) {
-    image_       = image_->copy();
-    alloc_image_ = 1;
-  }
-
-  image_->desaturate();
-}
-
-
-//
-// 'Fl_Tiled_Image::draw()' - Draw a tiled image.
-//
-/**
-  Draws a tiled image.
-
-  Tiled images can be used as background images for widgets and windows.
-  However, due to implementation constraints, you must take care when
-  setting label types and alignment flags. Only certain combinations work as
-  expected, others may yield unexpected results and undefined behavior.
-
-  This draw method can draw multiple copies of one image in an area given
-  by \p X, \p Y, \p W, \p H.
-
-  The optional arguments \p cx and \p cy can be used to crop the image
-  starting at offsets (cx, cy). \p cx and \p cy must be \>= 0 (negative values
-  are ignored). If one of the values is greater than the image width or height
-  resp. (\p cx \>= image()->w() or \p cy \>= image()->h()) nothing is drawn,
-  because the resulting image would be empty.
-
-  After calculating the resulting image size the image is drawn as often
-  as necessary to fill the given area, starting at the top left corner.
-
-  If both \p W and \p H are 0 the image is repeated as often as necessary
-  to fill the entire window, unless there is a valid clip region. If you
-  want to fill only one particular widget's background, then you should
-  either set a clip region in your draw() method or use the label alignment
-  flags \p FL_ALIGN_INSIDE|FL_ALIGN_CLIP to make sure the image is clipped.
-
-  This may be improved in a later version of the library.
-*/
-void
-Fl_Tiled_Image::draw(int X,	// I - Starting X position
-                     int Y,	// I - Starting Y position
-		     int W,	// I - Width of area to be filled
-		     int H,	// I - Height of area to be filled
-		     int cx,	// I - "Source" X position
-		     int cy) {	// I - "Source" Y position
-
-  int iw = image_->w();		// effective image width
-  int ih = image_->h();		// effective image height
-
-  if (!iw || !ih) return;
-  if (cx >= iw || cy >= ih) return;
-
-  if (cx < 0) cx = 0;		// ignore negative values
-  if (cy < 0) cy = 0;
-
-  // W and H null means the image is potentially as large as the current window
-  // or widget. The latter can not be checked here, hence we use the whole
-  // window as well and rely on appropriate clipping. See comments above.
-  // This should be fixed! (AlbrechtS, 01 Mar 2015)
-
-  if (W == 0 && H == 0 && Fl_Window::current()) {
-    W = Fl_Window::current()->w();
-    H = Fl_Window::current()->h();
-    X = Y = 0;
-  }
-
-  if (W == 0 || H == 0) return;
-
-  fl_push_clip(X, Y, W, H);
-
-  if (cx > 0) iw -= cx;		// crop image
-  if (cy > 0) ih -= cy;
-
-  for (int yy = Y; yy < H; yy += ih) {
-    if (fl_not_clipped(X,yy,W,ih)) {
-      for (int xx = X; xx < W; xx += iw) {
-	if (fl_not_clipped(xx,yy,iw,ih)) {
-	  image_->draw(xx,yy,iw,ih,cx,cy);
-	}
-      }
-    }
-  }
-  fl_pop_clip();
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tooltip.cxx
+++ /dev/null
@@ -1,379 +1,0 @@
-//
-// "$Id$"
-//
-// Tooltip source file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Window.H>
-
-#include <stdio.h>
-#include <string.h>	// strdup()
-
-float		Fl_Tooltip::delay_ = 1.0f;
-float		Fl_Tooltip::hoverdelay_ = 0.2f;
-Fl_Color	Fl_Tooltip::color_ = fl_color_cube(FL_NUM_RED - 1,
-		                                   FL_NUM_GREEN - 1,
-						   FL_NUM_BLUE - 2);
-Fl_Color	Fl_Tooltip::textcolor_ = FL_BLACK;
-Fl_Font         Fl_Tooltip::font_ = FL_HELVETICA;
-Fl_Fontsize     Fl_Tooltip::size_ = -1;
-#if FLTK_ABI_VERSION >= 10301
-int		Fl_Tooltip::margin_width_  = 3;
-int		Fl_Tooltip::margin_height_ = 3;
-int		Fl_Tooltip::wrap_width_    = 400;
-#endif
-
-static const char* tip;
-
-// FIXME: this should be a static class variable: Fl_Tooltip::draw_symbols_
-static const int draw_symbols_ = 1; // 1 = draw @-symbols in tooltips, 0 = no
-
-/**
-    This widget creates a tooltip box window, with no caption.
-*/
-class Fl_TooltipBox : public Fl_Menu_Window {
-public:
-  /** Creates the box window */
-  Fl_TooltipBox() : Fl_Menu_Window(0, 0) {
-    set_override();
-    set_tooltip_window();
-    end();
-  }
-  void draw();
-  void layout();
-  /** Shows the tooltip windows only if a tooltip text is available. */
-  void show() {
-    if (!tip) return;
-    
-    Fl_Menu_Window::show();
-  }
-
-  int handle(int e) {
-    if (e == FL_PUSH || e == FL_KEYDOWN) {
-      hide();
-      return 1;
-    }
-    return Fl_Menu_Window::handle(e);
-  }
-};
-
-Fl_Widget* Fl_Tooltip::widget_ = 0;
-static Fl_TooltipBox *window = 0;
-static int Y,H;
-
-#ifdef __APPLE__
-// returns the unique tooltip window
-Fl_Window *Fl_Tooltip::current_window(void)
-{
-  return (Fl_Window*)window;
-}
-#endif
-
-void Fl_TooltipBox::layout() {
-  fl_font(Fl_Tooltip::font(), Fl_Tooltip::size());
-  int ww = Fl_Tooltip::wrap_width();
-  int hh = 0;
-  fl_measure(tip, ww, hh, draw_symbols_);
-  ww += (Fl_Tooltip::margin_width() * 2);
-  hh += (Fl_Tooltip::margin_height() * 2);
-
-  // find position on the screen of the widget:
-  int ox = Fl::event_x_root();
-  int oy = Y + H+2;
-  for (Fl_Widget* p = Fl_Tooltip::current(); p; p = p->window()) {
-    oy += p->y();
-  }
-  int scr_x, scr_y, scr_w, scr_h;
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-  if (ox+ww > scr_x+scr_w) ox = scr_x+scr_w - ww;
-  if (ox < scr_x) ox = scr_x;
-  if (H > 30) {
-    oy = Fl::event_y_root()+13;
-    if (oy+hh > scr_y+scr_h) oy -= 23+hh;
-  } else {
-    if (oy+hh > scr_y+scr_h) oy -= (4+hh+H);
-  }
-  if (oy < scr_y) oy = scr_y;
-
-  resize(ox, oy, ww, hh);
-}
-
-void Fl_TooltipBox::draw() {
-  draw_box(FL_BORDER_BOX, 0, 0, w(), h(), Fl_Tooltip::color());
-  fl_color(Fl_Tooltip::textcolor());
-  fl_font(Fl_Tooltip::font(), Fl_Tooltip::size());
-  int X = Fl_Tooltip::margin_width();
-  int Y = Fl_Tooltip::margin_height();
-  int W = w() - (Fl_Tooltip::margin_width()*2);
-  int H = h() - (Fl_Tooltip::margin_height()*2);
-  fl_draw(tip, X, Y, W, H, Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_WRAP), 0, draw_symbols_);
-}
-
-static char recent_tooltip;
-
-static void recent_timeout(void*) {
-#ifdef DEBUG
-  puts("recent_timeout();");
-#endif // DEBUG
-
-  recent_tooltip = 0;
-}
-
-static char recursion;
-
-// Is top level window iconified?
-static int top_win_iconified_() {
-  Fl_Widget *w = Fl_Tooltip::current();
-  if ( !w ) return 0;
-  Fl_Window *topwin = w->top_window();
-  if ( !topwin ) return 0;
-  return !topwin->visible() ? 1 : 0;
-}
-
-static void tooltip_timeout(void*) {
-#ifdef DEBUG
-  puts("tooltip_timeout();");
-#endif // DEBUG
-
-  if (recursion) return;
-  recursion = 1;
-  if (!top_win_iconified_()) {   // no tooltip if top win iconified (STR #3157)
-    if (!tip || !*tip) {
-      if (window) window->hide();
-    } else {
-      int condition = 1;
-#if !(defined(__APPLE__) || defined(WIN32))
-      condition = (Fl::grab() == NULL);
-#endif
-      if ( condition ) {
-	if (!window) window = new Fl_TooltipBox;
-	// this cast bypasses the normal Fl_Window label() code:
-	((Fl_Widget*)window)->label(tip);
-	window->layout();
-	window->redraw();
-	// printf("tooltip_timeout: Showing window %p with tooltip \"%s\"...\n",
-	//        window, tip ? tip : "(null)");
-	window->show();
-      }
-    }
-  }
-
-  Fl::remove_timeout(recent_timeout);
-  recent_tooltip = 1;
-  recursion = 0;
-}
-
-/**
-   This method is called when the mouse pointer enters a widget.
-   <P>If this widget or one of its parents has a tooltip, enter it. This
-   will do nothing if this is the current widget (even if the mouse moved
-   out so an exit() was done and then moved back in). If no tooltip can
-   be found do Fl_Tooltip::exit_(). If you don't want this behavior (for instance
-   if you want the tooltip to reappear when the mouse moves back in)
-   call the fancier enter_area() below.
-*/
-void Fl_Tooltip::enter_(Fl_Widget* w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::enter_(w=%p)\n", w);
-  printf("    window=%p\n", window);
-#endif // DEBUG
-  if (w && w->as_window() && ((Fl_Window*)w)->tooltip_window()) {
-    // Fix STR #2650: if there's no better place for a tooltip window, don't move it.
-    int oldx = w->x();
-    int oldy = w->y();
-    ((Fl_TooltipBox*)w)->layout();
-    if (w->x() == oldx && w->y() == oldy) return;
-  }
-  // find the enclosing group with a tooltip:
-  Fl_Widget* tw = w;
-  for (;;) {
-    if (!tw) {exit_(0); return;}
-    if (tw == widget_) return;
-    if (tw->tooltip()) break;
-    tw = tw->parent();
-  }
-  enter_area(w, 0, 0, w->w(), w->h(), tw->tooltip());
-}
-/** 
-     Sets the current widget target. 
-     Acts as though enter(widget) was done but does not pop up a
-     tooltip.  This is useful to prevent a tooltip from reappearing when
-     a modal overlapping window is deleted. FLTK does this automatically
-     when you click the mouse button.
-*/
-void Fl_Tooltip::current(Fl_Widget* w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::current(w=%p)\n", w);
-#endif // DEBUG
-
-  exit_(0);
-  // find the enclosing group with a tooltip:
-  Fl_Widget* tw = w;
-  for (;;) {
-    if (!tw) return;
-    if (tw->tooltip()) break;
-    tw = tw->parent();
-  }
-  // act just like Fl_Tooltip::enter_() except we can remember a zero:
-  widget_ = w;
-}
-
-// Hide any visible tooltip.
-/**  This method is called when the mouse pointer leaves a  widget. */
-void Fl_Tooltip::exit_(Fl_Widget *w) {
-#ifdef DEBUG
-  printf("Fl_Tooltip::exit_(w=%p)\n", w);
-  printf("    widget=%p, window=%p\n", widget_, window);
-#endif // DEBUG
-
-  if (!widget_ || (w && w == window)) return;
-  widget_ = 0;
-  Fl::remove_timeout(tooltip_timeout);
-  Fl::remove_timeout(recent_timeout);
-  if (window && window->visible()) window->hide();
-  if (recent_tooltip) {
-    if (Fl::event_state() & FL_BUTTONS) recent_tooltip = 0;
-    else Fl::add_timeout(Fl_Tooltip::hoverdelay(), recent_timeout);
-  }
-}
-
-// Get ready to display a tooltip. The widget and the xywh box inside
-// it define an area the tooltip is for, this along with the current
-// mouse position places the tooltip (the mouse is assumed to point
-// inside or near the box).
-/**
-  You may be able to use this to provide tooltips for internal pieces
-  of your widget. Call this after setting Fl::belowmouse() to
-  your widget (because that calls the above enter() method). Then figure
-  out what thing the mouse is pointing at, and call this with the widget
-  (this pointer is used to remove the tooltip if the widget is deleted
-  or hidden, and to locate the tooltip), the rectangle surrounding the
-  area, relative to the top-left corner of the widget (used to calculate
-  where to put the tooltip), and the text of the tooltip (which must be
-  a pointer to static data as it is not copied).
-*/
-void Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char* t)
-{
-  (void)x;
-  (void)w;
-
-#ifdef DEBUG
-  printf("Fl_Tooltip::enter_area(wid=%p, x=%d, y=%d, w=%d, h=%d, t=\"%s\")\n",
-         wid, x, y, w, h, t ? t : "(null)");
-  printf("    recursion=%d, window=%p\n", recursion, window);
-#endif // DEBUG
-
-  if (recursion) return;
-  if (!t || !*t || !enabled()) {
-    exit_(0);
-    return;
-  }
-  // do nothing if it is the same:
-  if (wid==widget_ /*&& x==X && y==Y && w==W && h==H*/ && t==tip) return;
-  Fl::remove_timeout(tooltip_timeout);
-  Fl::remove_timeout(recent_timeout);
-  // remember it:
-  widget_ = wid; Y = y; H = h; tip = t;
-  // popup the tooltip immediately if it was recently up:
-  if (recent_tooltip) {
-    if (window) window->hide();
-    Fl::add_timeout(Fl_Tooltip::hoverdelay(), tooltip_timeout);
-  } else if (Fl_Tooltip::delay() < .1) {
-#ifdef WIN32
-    // possible fix for the Windows titlebar, it seems to want the
-    // window to be destroyed, moving it messes up the parenting:
-    if (window && window->visible()) window->hide();
-#endif // WIN32
-    tooltip_timeout(0);
-  } else {
-    if (window && window->visible()) window->hide();
-    Fl::add_timeout(Fl_Tooltip::delay(), tooltip_timeout);
-  }
-
-#ifdef DEBUG
-  printf("    tip=\"%s\", window->shown()=%d\n", tip ? tip : "(null)",
-         window ? window->shown() : 0);
-#endif // DEBUG
-}
-
-void Fl_Tooltip::set_enter_exit_once_() {
-  static char beenhere = 0;
-  if (!beenhere) {
-    beenhere          = 1;
-    Fl_Tooltip::enter = Fl_Tooltip::enter_;
-    Fl_Tooltip::exit  = Fl_Tooltip::exit_;
-  }
-}
-
-/**
-  Sets the current tooltip text. 
-
-  Sets a string of text to display in a popup tooltip window when the user 
-  hovers the mouse over the widget. The string is <I>not</I> copied, so 
-  make sure any formatted string is stored in a static, global, 
-  or allocated buffer. If you want a copy made and managed for you,
-  use the copy_tooltip() method, which will manage the tooltip string
-  automatically.
-
-  If no tooltip is set, the tooltip of the parent is inherited. Setting a 
-  tooltip for a group and setting no tooltip for a child will show the 
-  group's tooltip instead. To avoid this behavior, you can set the child's 
-  tooltip to an empty string ("").
-  \param[in] text New tooltip text (no copy is made)
-  \see copy_tooltip(const char*), tooltip()
-*/
-void Fl_Widget::tooltip(const char *text) {
-  Fl_Tooltip::set_enter_exit_once_();
-  if (flags() & COPIED_TOOLTIP) {
-    // reassigning a copied tooltip remains the same copied tooltip
-    if (tooltip_ == text) return;
-    free((void*)(tooltip_));            // free maintained copy
-    clear_flag(COPIED_TOOLTIP);         // disable copy flag (WE don't make copies)
-  }
-  tooltip_ = text;
-}
-
-/**
-  Sets the current tooltip text. 
-  Unlike tooltip(), this method allocates a copy of the tooltip 
-  string instead of using the original string pointer.
-
-  The internal copy will automatically be freed whenever you assign
-  a new tooltip or when the widget is destroyed.
-
-  If no tooltip is set, the tooltip of the parent is inherited. Setting a 
-  tooltip for a group and setting no tooltip for a child will show the 
-  group's tooltip instead. To avoid this behavior, you can set the child's 
-  tooltip to an empty string ("").
-  \param[in] text New tooltip text (an internal copy is made and managed)
-  \see tooltip(const char*), tooltip()
-*/
-void Fl_Widget::copy_tooltip(const char *text) {
-  Fl_Tooltip::set_enter_exit_once_();
-  if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
-  if (text) {
-    set_flag(COPIED_TOOLTIP);
-    tooltip_ = strdup(text);
-  } else {
-    clear_flag(COPIED_TOOLTIP);
-    tooltip_ = (char *)0;
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tree.cxx
+++ /dev/null
@@ -1,2964 +1,0 @@
-//
-// "$Id$"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Preferences.H>
-
-//////////////////////
-// Fl_Tree.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// INTERNAL: scroller callback (hor+vert scroll)
-static void scroll_cb(Fl_Widget*,void *data) {
-  ((Fl_Tree*)data)->redraw();
-}
-
-// INTERNAL: Parse elements from 'path' into an array of null terminated strings
-//    Handles escape characters, ignores multiple /'s.
-//    Path="/aa/bb", returns arr[0]="aa", arr[1]="bb", arr[2]=0.
-//    Caller must call free_path(arr).
-//
-static char **parse_path(const char *path) {
-  size_t len = strlen(path);
-  char *cp = new char[(len+1)], *word = cp, *s = cp; // freed below or in free_path()
-  char **ap = new char*[(len+1)], **arr = ap;	     // overallocates arr[]
-  while (1) {
-    if (*path =='/' || *path == 0) {		// handle path sep or eos
-      if (word != s) { *s++ = 0; *arr++= word; word = s; }
-      if ( !*path++) break; else continue;	// eos? done, else cont
-    } else if ( *path == '\\' ) {		// handle escape
-      if ( *(++path) ) { *s++ = *path++; } else continue;
-    } else { *s++ = *path++; }			// handle normal char
-  }
-  *arr = 0;
-  if ( arr == ap ) delete[] cp;	// empty arr[]? delete since free_path() can't
-  return ap;
-}
-
-// INTERNAL: Free an array 'arr' returned by parse_path()
-static void free_path(char **arr) {
-  if ( arr ) {
-    if ( arr[0] ) { delete[] arr[0]; }	// deletes cp in parse_path
-    delete[] arr;  			// deletes ptr array
-  }
-}
-
-#if 0		/* unused code -- STR #3169 */
-// INTERNAL: Recursively descend 'item's tree hierarchy
-//           accumulating total child 'count'
-//
-static int find_total_children(Fl_Tree_Item *item, int count=0) {
-  count++;
-  for ( int t=0; t<item->children(); t++ ) {
-    count = find_total_children(item->child(t), count);
-  }
-  return(count);
-}
-#endif
-
-/// Constructor.
-Fl_Tree::Fl_Tree(int X, int Y, int W, int H, const char *L) : Fl_Group(X,Y,W,H,L) { 
-#if FLTK_ABI_VERSION >= 10303
-  _root = new Fl_Tree_Item(this);
-#else
-  _root = new Fl_Tree_Item(_prefs);
-#endif
-  _root->parent(0);				// we are root of tree
-  _root->label("ROOT");
-  _item_focus      = 0;
-  _callback_item   = 0;
-  _callback_reason = FL_TREE_REASON_NONE;
-  _scrollbar_size  = 0;				// 0: uses Fl::scrollbar_size()
-	
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  _lastselect       = 0;
-#else /*FLTK_ABI_VERSION*/
-  // OLD: data initialized static inside handle()
-#endif /*FLTK_ABI_VERSION*/
-
-  box(FL_DOWN_BOX);
-  color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
-  when(FL_WHEN_CHANGED);
-  int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-  _vscroll = new Fl_Scrollbar(X+W-scrollsize,Y,scrollsize,H);
-  _vscroll->hide();
-  _vscroll->type(FL_VERTICAL);
-  _vscroll->step(1);
-  _vscroll->callback(scroll_cb, (void*)this);
-#if FLTK_ABI_VERSION >= 10303
-  _hscroll = new Fl_Scrollbar(X,Y+H-scrollsize,W,scrollsize);
-  _hscroll->hide();
-  _hscroll->type(FL_HORIZONTAL);
-  _hscroll->step(1);
-  _hscroll->callback(scroll_cb, (void*)this);
-  _tox = _tix = X + Fl::box_dx(box());
-  _toy = _tiy = Y + Fl::box_dy(box());
-  _tow = _tiw = W - Fl::box_dw(box());
-  _toh = _tih = H - Fl::box_dh(box());
-  _tree_w = -1;
-  _tree_h = -1;
-#endif
-  end();
-}
-
-/// Destructor.
-Fl_Tree::~Fl_Tree() {
-  if ( _root ) { delete _root; _root = 0; }
-}
-
-/// Extend the selection between and including \p 'from' and \p 'to'
-/// depending on direction \p 'dir', \p 'val', and \p 'visible'.
-///
-/// Efficient: does not walk entire tree; starts with \p 'from' and stops
-/// at \p 'to' while moving in direction \p 'dir'. Dir must be specified though.
-#if FLTK_ABI_VERSION >= 10303
-///
-/// If dir cannot be known in advance, such as during SHIFT-click operations,
-/// the method extend_selection(Fl_Tree_Item*,Fl_Tree_Item*,int,bool)
-/// should be used.
-#endif
-///
-/// Handles calling redraw() if anything changed.
-///
-/// \param[in] from Starting item
-/// \param[in] to   Ending item
-/// \param[in] dir  Direction to extend selection (FL_Up or FL_Down)
-/// \param[in] val  0=deselect, 1=select, 2=toggle
-/// \param[in] visible true=affect only open(), visible items,<br>
-///                    false=affect open or closed items (default)
-/// \returns The number of items whose selection states were changed, if any.
-/// \version 1.3.3
-///
-int Fl_Tree::extend_selection_dir(Fl_Tree_Item *from, Fl_Tree_Item *to,
-			          int dir, int val, bool visible ) {
-  int changed = 0;
-  for (Fl_Tree_Item *item=from; item; item = next_item(item, dir, visible) ) {
-    switch (val) {
-      case 0:
-	if ( deselect(item, when()) ) ++changed;
-        break;
-      case 1:
-        if ( select(item, when()) ) ++changed;
-	break;
-      case 2:
-        select_toggle(item, when());
-	++changed;	// toggle always involves a change
-	break;
-    }
-    if ( item==to ) break;
-  }
-  return(changed);
-}
-
-/// Extend a selection between \p 'from' and \p 'to' depending on \p 'visible'.
-///
-/// Similar to the more efficient
-/// extend_selection_dir(Fl_Tree_Item*,Fl_Tree_Item*,int dir,int val,bool vis)
-/// method, but direction (up or down) doesn't need to be known.<br>
-/// We're less efficient because we search the tree for to/from, then operate
-/// on items in between. The more efficient method avoids the "search",
-/// but necessitates a direction to be specified to find \p 'to'.<br>
-/// Used by SHIFT-click to extend a selection between two items inclusive.<br>
-/// Handles calling redraw() if anything changed.
-/// 
-/// \param[in] from    Starting item
-/// \param[in] to      Ending item
-/// \param[in] val     Select or deselect items (0=deselect, 1=select, 2=toggle)
-/// \param[in] visible true=affect only open(), visible items,<br>
-///                    false=affect open or closed items (default)
-/// \returns The number of items whose selection states were changed, if any.
-#if FLTK_ABI_VERSION >= 10303
-/// \version 1.3.3 ABI feature
-int Fl_Tree::extend_selection(Fl_Tree_Item *from, Fl_Tree_Item *to,
-			      int val, bool visible) {
-#else
-/// \note Made public in 1.3.3 ABI
-// Adding overload if not at least one overload breaks ABI, so avoid
-// by making a private function until ABI can change..
-int Fl_Tree::extend_selection__(Fl_Tree_Item *from, Fl_Tree_Item *to,
-			        int val, bool visible) {
-#endif
-  int changed = 0;
-  if ( from == to ) {
-    if ( visible && !from->is_visible() ) return(0);	// do nothing
-    switch (val) {
-      case 0:
-        if ( deselect(from, when()) ) ++changed;
-	break;
-      case 1:
-        if ( select(from, when()) ) ++changed;
-	break;
-      case 2:
-        select_toggle(from, when());
-	++changed;		// always changed
-	break;
-    }
-    return(changed);
-  }
-  char on = 0;
-  for ( Fl_Tree_Item *item = first(); item; item = item->next_visible(_prefs) ) {
-    if ( visible && !item->is_visible() ) continue;
-    if ( on || (item == from) || (item == to) ) {
-      switch (val) {
-	case 0:
-	  if ( deselect(item, when()) ) ++changed;
-	  break;
-	case 1:
-	  if ( select(item, when()) ) ++changed;
-	  break;
-	case 2:
-	  select_toggle(item, when());
-	  ++changed;	// toggle always involves a change
-	  break;
-      }
-      if ( (item == from) || (item == to) ) {
-        on ^= 1;
-	if ( !on ) break;	// done
-      }
-    }
-  }
-  return(changed);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-// not needed, above overload handles this
-#else
-/// Extend a selection between \p 'from' and \p 'to'.
-/// Extends selection for items and all children, visible ('open') or not.
-/// Walks entire tree from top to bottom looking for \p 'from' and \p 'to'.
-/// \version 1.3.0
-///
-void Fl_Tree::extend_selection(Fl_Tree_Item *from, Fl_Tree_Item *to) {
-  const int val = 1;		// 0=clr, 1=set, 2=toggle
-  const bool visible = false;	// true=only 'open' items, false='open' or 'closed'
-  extend_selection__(from, to, val, visible);	// use private method until we can release it
-}
-#endif
-
-/// Standard FLTK event handler for this widget.
-/// \todo add Fl_Widget_Tracker (see Fl_Browser_.cxx::handle())
-int Fl_Tree::handle(int e) {
-  if (e == FL_NO_EVENT) return(0);		// XXX: optimize to prevent slow resizes on large trees!
-  int ret = 0;
-  char is_shift   = Fl::event_state() & FL_SHIFT   ? 1 : 0;
-  char is_ctrl    = Fl::event_state() & FL_CTRL    ? 1 : 0;
-  char is_command = Fl::event_state() & FL_COMMAND ? 1 : 0;	// ctrl on win/lin, 'Command' on mac
-#if FLTK_ABI_VERSION >= 10301
-  // NEW: data inside Fl_Tree
-#else /*FLTK_ABI_VERSION*/
-  // OLD:
-  static Fl_Tree_Item *_lastselect = 0;		// used to extend selections
-#endif /*FLTK_ABI_VERSION*/
-  // Developer note: Fl_Browser_::handle() used for reference here..
-  // #include <FL/names.h>	// for event debugging
-  // fprintf(stderr, "DEBUG: %s (%d)\n", fl_eventnames[e], e);
-
-  if (e == FL_ENTER || e == FL_LEAVE) return(1);
-  switch (e) {
-    case FL_FOCUS: {
-      // FLTK tests if we want focus. 
-      //     If a nav key was used to give us focus, and we've got no saved
-      //     focus widget, determine which item gets focus depending on nav key.
-      //
-      if ( ! _item_focus ) {				// no focus established yet?
-	switch (Fl::event_key()) {			// determine if focus was navigated..
-	  case FL_Tab: {				// received focus via TAB?
-	    int updown = is_shift ? FL_Up : FL_Down;	// SHIFT-TAB similar to Up, TAB similar to Down
-	    set_item_focus(next_visible_item(0, updown));
-	    break;
-	  }
-	  case FL_Left:		// received focus via LEFT or UP?
-	  case FL_Up: { 	// XK_ISO_Left_Tab
-	    set_item_focus(next_visible_item(0, FL_Up));
-	    break;
-	  }
-	  case FL_Right: 	// received focus via RIGHT or DOWN?
-	  case FL_Down:
-	  default: {
-	    set_item_focus(next_visible_item(0, FL_Down));
-	    break;
-	  }
-	}
-      }
-      if ( visible_focus() ) redraw();	// draw focus change
-      return(1);
-    }
-    case FL_UNFOCUS: {		// FLTK telling us some other widget took focus.
-      if ( visible_focus() ) redraw();	// draw focus change
-      return(1);
-    }
-    case FL_KEYBOARD: {		// keyboard shortcut
-      // Do shortcuts first or scrollbar will get them...
-      if ( (Fl::focus() == this) &&				// tree has focus?
-           _prefs.selectmode() > FL_TREE_SELECT_NONE ) {	// select mode that supports kb events?
-	if ( !_item_focus ) {					// no current focus item?
-	  set_item_focus(first_visible_item());			// use first vis item
-	  if ( Fl::event_key() == FL_Up ||			// Up or down?
-	       Fl::event_key() == FL_Down )			// ..if so, already did 'motion'
-	    return(1);						// ..so just return.
-	}
-	if ( _item_focus ) {
-	  int ekey = Fl::event_key();
-	  switch (ekey) {
-	    case FL_Enter:	// ENTER: toggle open/close
-	    case FL_KP_Enter: {
-	      open_toggle(_item_focus, when());			// toggle item in focus
-	      return(1);					// done, we handled key
-	    }
-	    case ' ':		// SPACE: change selection state
-	      switch ( _prefs.selectmode() ) {
-		case FL_TREE_SELECT_NONE:
-		  break;					// ignore, let group have shot at event
-		case FL_TREE_SELECT_SINGLE:
-		case FL_TREE_SELECT_SINGLE_DRAGGABLE:
-		  if ( is_ctrl ) {				// CTRL-SPACE: (single mode) toggle
-		    if ( ! _item_focus->is_selected() ) {
-		      select_only(_item_focus, when());
-		    } else {
-		      deselect_all(0, when());
-		    }
-		  } else {
-		    select_only(_item_focus, when());		// SPACE: (single mode) select only
-		  }
-		  _lastselect = _item_focus;
-	          return(1);					// done, we handled key
-		case FL_TREE_SELECT_MULTI:
-		  if ( is_ctrl ) {
-		    select_toggle(_item_focus, when());		// CTRL-SPACE: (multi mode) toggle selection
-		  } else {
-		    select(_item_focus, when());		// SPACE: (multi-mode) select
-		  }
-		  _lastselect = _item_focus;
-	          return(1);					// done, we handled key
-	      }
-	      break;
-	    case FL_Right:  	// RIGHT: open children (if any)
-	    case FL_Left: {	// LEFT: close children (if any)
-	      if ( _item_focus ) {
-		if ( ekey == FL_Right && _item_focus->is_close() ) {
-		  open(_item_focus);	// open closed item
-		  ret = 1;
-		} else if ( ekey == FL_Left && _item_focus->is_open() ) {
-		  close(_item_focus);	// close open item
-		  ret = 1;
-		}
-		return(1);
-	      }
-	      break;
-	    }
-	    case FL_Up:		// UP: next item up, or extend selection up
-	    case FL_Down: {	// DOWN: next item down, or extend selection down
-	      set_item_focus(next_visible_item(_item_focus, ekey));	// next item up|dn
-	      if ( _item_focus ) {					// item in focus?
-	        // Autoscroll
-		int itemtop = _item_focus->y();
-		int itembot = _item_focus->y()+_item_focus->h();
-		if ( itemtop < y() ) { show_item_top(_item_focus); }
-		if ( itembot > y()+h() ) { show_item_bottom(_item_focus); }
-		// Extend selection
-		if ( _prefs.selectmode() == FL_TREE_SELECT_MULTI &&	// multiselect on?
-		     is_shift &&					// shift key?
-		     ! _item_focus->is_selected() ) {			// not already selected?
-		  select(_item_focus, when());				// extend selection..
-		  _lastselect = _item_focus;
-		}
-		return(1);
-	      }
-	      break;
-	    }
-	    case 'a':
-	    case 'A': {
-	      if ( is_command ) {					// ^A (win/linux), Meta-A (mac)
-		switch ( _prefs.selectmode() ) {
-		  case FL_TREE_SELECT_NONE:
-		  case FL_TREE_SELECT_SINGLE:
-		  case FL_TREE_SELECT_SINGLE_DRAGGABLE:
-		    break;
-		  case FL_TREE_SELECT_MULTI:
-		    // Do a 'select all'
-	            select_all();
-		    _lastselect = first_visible_item();
-		    take_focus();
-		    return(1);
-		}
-	      }
-	      break;
-	    }
-	  }
-	}
-      }
-      break;
-    }
-  }
-
-  // Let Fl_Group take a shot at handling the event
-  if (Fl_Group::handle(e)) {
-    return(1);			// handled? don't continue below
-  }
-
-  // Handle events the child FLTK widgets didn't need
-
-  // fprintf(stderr, "Fl_Tree::handle(): Event was %s (%d)\n", fl_eventnames[e], e); // DEBUGGING
-  if ( ! _root ) return(ret);
-  static int last_my = 0;
-  switch ( e ) {
-    case FL_PUSH: {		// clicked on tree
-      last_my = Fl::event_y();	// save for dragging direction..
-      if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this);
-#if FLTK_ABI_VERSION >= 10303
-      Fl_Tree_Item *item = _root->find_clicked(_prefs, 0);
-#else
-      Fl_Tree_Item *item = _root->find_clicked(_prefs);
-#endif
-      if ( !item ) {		// clicked, but not on an item?
-        _lastselect = 0;
-	switch ( _prefs.selectmode() ) {
-	  case FL_TREE_SELECT_NONE:
-	    break;
-	  case FL_TREE_SELECT_SINGLE:
-	  case FL_TREE_SELECT_SINGLE_DRAGGABLE:
-	  case FL_TREE_SELECT_MULTI:
-	    deselect_all();
-	    break;
-	}
-	break;
-      }
-      set_item_focus(item);			// becomes new focus widget, calls redraw() if needed
-      ret |= 1;					// handled
-      if ( Fl::event_button() == FL_LEFT_MOUSE ) {
-	if ( item->event_on_collapse_icon(_prefs) ) {	// collapse icon clicked?
-	  open_toggle(item);				// toggle open (handles redraw)
-	} else if ( item->event_on_label(_prefs) && 	// label clicked?
-		 (!item->widget() || !Fl::event_inside(item->widget())) ) {	// not inside widget
-	  switch ( _prefs.selectmode() ) {
-	    case FL_TREE_SELECT_NONE:
-	      break;
-	    case FL_TREE_SELECT_SINGLE:
-	    case FL_TREE_SELECT_SINGLE_DRAGGABLE:
-	      select_only(item, when());		// select only this item (handles redraw)
-	      _lastselect = item;
-	      break;
-	    case FL_TREE_SELECT_MULTI: {
-	      if ( is_shift ) {			// SHIFT+PUSH?
-	        if ( _lastselect ) {
-		  int val = is_ctrl ? 2 : 1;
-		  bool visible = true;
-#if FLTK_ABI_VERSION >= 10303
-	          extend_selection(_lastselect, item, val, visible);
-#else
-	          extend_selection__(_lastselect, item, val, visible);
-#endif
-	        } else {
-	          select(item);			// add to selection
-		}
-	      } else if ( is_ctrl ) {		// CTRL+PUSH?
-		select_toggle(item, when());	// toggle selection state
-	      } else {
-		select_only(item, when());
-	      }
-	      _lastselect = item;
-	      break;
-	    }
-	  }
-	}
-      }
-      break;
-    }
-    case FL_DRAG: {
-      // Do scrolling first..
-
-      // Detect up/down dragging
-      int my = Fl::event_y();
-      int dir = (my>last_my) ? FL_Down : FL_Up;
-      last_my = my;
-
-      // Handle autoscrolling
-      if ( my < y() ) {				// Above top?
-        dir = FL_Up;				// ..going up
-        int p = vposition()-(y()-my);		// ..position above us
-	if ( p < 0 ) p = 0;			// ..don't go above 0
-        vposition(p);				// ..scroll to new position
-      } else if ( my > (y()+h()) ) {		// Below bottom?
-        dir = FL_Down;				// ..going down
-        int p = vposition()+(my-y()-h());	// ..position below us
-	if ( p > (int)_vscroll->maximum() )	// ..don't go below bottom
-	  p = (int)_vscroll->maximum();
-        vposition(p);				// ..scroll to new position
-      }
-
-      // Now handle the event..
-      //    During drag, only interested in left-mouse operations.
-      //
-      if ( Fl::event_button() != FL_LEFT_MOUSE ) break;
-#if FLTK_ABI_VERSION >= 10303
-      Fl_Tree_Item *item = _root->find_clicked(_prefs, 1); // item we're on, vertically
-#else
-      Fl_Tree_Item *item = _root->find_clicked(_prefs); // item we're on, vertically
-#endif
-      if ( !item ) break;			// not near item? ignore drag event
-      ret |= 1;					// acknowledge event
-      if (_prefs.selectmode() != FL_TREE_SELECT_SINGLE_DRAGGABLE)
-        set_item_focus(item);			// becomes new focus item
-      if (item==_lastselect) break;		// same item as before? avoid reselect
-
-      // Handle selection behavior
-      switch ( _prefs.selectmode() ) {
-	case FL_TREE_SELECT_NONE:
-	  break;				// no selection changes
-	case FL_TREE_SELECT_SINGLE: {
-	  select_only(item, when());		// select only this item (handles redraw)
-	  break;
-	}
-	case FL_TREE_SELECT_SINGLE_DRAGGABLE: {
-	  item = _lastselect; // Keep the source intact
-	  redraw();
-	  break;
-	}
-	case FL_TREE_SELECT_MULTI: {
-	  Fl_Tree_Item *from = next_visible_item(_lastselect, dir); // avoid reselecting item
-	  Fl_Tree_Item *to = item;
-	  int val = is_ctrl ? 2 : 1;	// toggle_select() or just select()?
-	  bool visible = true;
-	  extend_selection_dir(from, to, dir, val, visible);
-	  break;
-	}
-      }
-      _lastselect = item;			// save current item for later
-      break;
-    }
-    case FL_RELEASE:
-      if (_prefs.selectmode() == FL_TREE_SELECT_SINGLE_DRAGGABLE &&
-          Fl::event_button() == FL_LEFT_MOUSE) {
-#if FLTK_ABI_VERSION >= 10303
-        Fl_Tree_Item *item = _root->find_clicked(_prefs, 1); // item we're on, vertically
-#else
-        Fl_Tree_Item *item = _root->find_clicked(_prefs); // item we're on, vertically
-#endif
-
-        if (item && _lastselect && item != _lastselect &&
-            Fl::event_x() >= item->label_x()) {
-          //printf("Would drag '%s' to '%s'\n", _lastselect->label(), item->label());
-          // Are we dropping above or below the target item?
-          const int h = Fl::event_y() - item->y();
-          const int mid = item->h() / 2;
-          const bool before = h < mid;
-          //printf("Dropping %s it\n", before ? "before" : "after");
-
-          // Do nothing if it would be a no-op
-          if ((before && prev(item) != _lastselect) ||
-              (!before && next(item) != _lastselect)) {
-            Fl_Tree_Item *parent = item->parent();
-
-            if (parent) {
-              int pos = parent->find_child(item);
-              if (!before)
-                pos++;
-
-              // Special case: trying to drop right before a folder
-              if (item->children() && item->is_open() && !before) {
-                parent = item;
-                pos = 0;
-              }
-
-              // If we're moving inside the same parent, use the below/above methods
-              if (_lastselect->parent() == parent) {
-                if (before) {
-                  _lastselect->move_above(item);
-                } else {
-                  _lastselect->move_below(item);
-                }
-              } else {
-                _lastselect->move_into(parent, pos);
-              }
-
-              redraw();
-              do_callback_for_item(_lastselect, FL_TREE_REASON_DRAGGED);
-            }
-          }
-        }
-        redraw();
-      } // End single-drag check
-      ret |= 1;
-      break;
-  }
-  return(ret);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-// nothing
-#else
-// Redraw timeout callback
-// (Only need this hack for old ABI 10302 and older)
-//
-static void redraw_soon(void *data) {
-  ((Fl_Tree*)data)->redraw();
-  Fl::remove_timeout(redraw_soon, data);
-}
-#endif
-
-#if FLTK_ABI_VERSION >= 10303
-/// Recalculate widget dimensions and scrollbar visibility,
-/// normally managed automatically.
-///
-/// Low overhead way to update the tree widget's outer/inner dimensions
-/// and re-determine scrollbar visibility based on these changes without
-/// recalculating the entire size of the tree data.
-///
-/// Assumes that either the tree's size in _tree_w/_tree_h are correct
-/// so that scrollbar visibility can be calculated easily, or are both
-/// zero indicating scrollbar visibility can't be calculated yet.
-///
-/// This method is called when the widget is resize()ed or if the
-/// scrollbar's sizes are changed (affects tree widget's inner dimensions
-/// tix/y/w/h), and also used by calc_tree().
-/// \version 1.3.3 ABI feature
-///
-void Fl_Tree::calc_dimensions() {
-  // Calc tree outer xywh
-  //    Area of the tree widget /outside/ scrollbars
-  //
-  _tox = x() + Fl::box_dx(box());
-  _toy = y() + Fl::box_dy(box());
-  _tow = w() - Fl::box_dw(box());
-  _toh = h() - Fl::box_dh(box());
-
-  // Scrollbar visiblity + positions
-  //    Calc this ONLY if tree_h and tree_w have been calculated.
-  //    Zero values for these indicate calc in progress, but not done yet.
-  //
-  if ( _tree_h >= 0 && _tree_w >= 0 ) {
-    int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-    int vshow = _tree_h > _toh ? 1 : 0;
-    int hshow = _tree_w > _tow ? 1 : 0;
-    // See if one scroller's appearance affects the other's visibility
-    if ( hshow && !vshow && (_tree_h > (_toh-scrollsize)) ) vshow = 1;
-    if ( vshow && !hshow && (_tree_w > (_tow-scrollsize)) ) hshow = 1;
-    // vertical scrollbar visibility
-    if ( vshow ) {
-      _vscroll->show();
-      _vscroll->resize(_tox+_tow-scrollsize, _toy,
-		       scrollsize, h()-Fl::box_dh(box()) - (hshow ? scrollsize : 0));
-    } else {
-      _vscroll->hide();
-      _vscroll->value(0);
-    }
-    // horizontal scrollbar visibility
-    if ( hshow ) {
-      _hscroll->show();
-      _hscroll->resize(_tox, _toy+_toh-scrollsize,
-		       _tow - (vshow ? scrollsize : 0), scrollsize);
-    } else {
-      _hscroll->hide();
-      _hscroll->value(0);
-    }
-
-    // Calculate inner dimensions
-    //    The area the tree occupies inside the scrollbars and margins
-    //
-    _tix = _tox;
-    _tiy = _toy;
-    _tiw = _tow - (_vscroll->visible() ? _vscroll->w() : 0);
-    _tih = _toh - (_hscroll->visible() ? _hscroll->h() : 0);
-
-    // Scrollbar tab sizes
-    _vscroll->slider_size(float(_tih) / float(_tree_h));
-    _vscroll->range(0.0, _tree_h - _tih);
-
-    _hscroll->slider_size(float(_tiw) / float(_tree_w));
-    _hscroll->range(0.0, _tree_w - _tiw);
-  } else {
-    // Best we can do without knowing tree_h/tree_w
-    _tix = _tox;
-    _tiy = _toy;
-    _tiw = _tow;
-    _tih = _toh;
-  }
-}
-
-/// Recalculates the tree's sizes and scrollbar visibility,
-/// normally managed automatically.
-///
-/// On return:
-///
-///	- _tree_w will be the overall pixel width of the entire viewable tree
-///	- _tree_h will be the overall pixel height ""
-///     - scrollbar visibility and pan sizes are updated
-///     - internal _tix/_tiy/_tiw/_tih dimensions are updated
-///
-/// _tree_w/_tree_h include the tree's margins (e.g. marginleft()),
-/// whether items are open or closed, label contents and font sizes, etc.
-///     
-/// The tree hierarchy's size is managed separately from the widget's
-/// size as an optimization; this way resize() on the widget doesn't
-/// involve recalculating the tree's hierarchy needlessly, as widget
-/// size has no bearing on the tree hierarchy.
-///
-/// The tree hierarchy's size only changes when items are added/removed,
-/// open/closed, label contents or font sizes changed, margins changed, etc.
-///
-/// This calculation involves walking the *entire* tree from top to bottom,
-/// potentially a slow calculation if the tree has many items (potentially
-/// hundreds of thousands), and should therefore be called sparingly.
-///
-/// For this reason, recalc_tree() is used as a way to /schedule/
-/// calculation when changes affect the tree hierarchy's size.
-///
-/// Apps may want to call this method directly if the app makes changes
-/// to the tree's geometry, then immediately needs to work with the tree's
-/// new dimensions before an actual redraw (and recalc) occurs. (This
-/// use by an app should only rarely be needed)
-///
-void Fl_Tree::calc_tree() {
-  // Set tree width and height to zero, and recalc just _tox/_toy/_tow/_toh for now.
-  _tree_w = _tree_h = -1;
-  calc_dimensions();
-  if ( !_root ) return;
-  // Walk the tree to determine its width and height.
-  // We need this to compute scrollbars..
-  // By the end, 'Y' will be the lowest point on the tree
-  //
-  int X = _tix + _prefs.marginleft() + _hscroll->value();
-  int Y = _tiy + _prefs.margintop()  - _vscroll->value();
-  int W = _tiw;
-  // Adjust root's X/W if connectors off
-  if (_prefs.connectorstyle() == FL_TREE_CONNECTOR_NONE) {
-    X -= _prefs.openicon()->w();
-    W += _prefs.openicon()->w();
-  }
-  int xmax = 0, render = 0, ytop = Y;
-  fl_font(_prefs.labelfont(), _prefs.labelsize());
-  _root->draw(X, Y, W, 0, xmax, 1, render);		// descend into tree without drawing (render=0)
-  // Save computed tree width and height
-  _tree_w = _prefs.marginleft() + xmax - X;		// include margin in tree's width
-  _tree_h = _prefs.margintop()  + Y - ytop;		// include margin in tree's height
-  // Calc tree dims again; now that tree_w/tree_h are known, scrollbars are calculated.
-  calc_dimensions();
-}
-#endif
-
-void Fl_Tree::resize(int X,int Y,int W, int H) {
-  fix_scrollbar_order();
-  Fl_Group::resize(X,Y,W,H);
-#if FLTK_ABI_VERSION >= 10303
-  calc_dimensions();
-#endif
-  init_sizes();
-}
-
-#if FLTK_ABI_VERSION >= 10303
-/// Standard FLTK draw() method, handles drawing the tree widget.
-void Fl_Tree::draw() {
-  fix_scrollbar_order();
-  // Has tree recalc been scheduled? If so, do it
-  if ( _tree_w == -1 ) calc_tree();
-  else calc_dimensions();
-  // Let group draw box+label but *NOT* children.
-  // We handle drawing children ourselves by calling each item's draw()
-  {
-    // Draw group's bg + label
-    if ( damage() & ~FL_DAMAGE_CHILD) {	// redraw entire widget?
-      Fl_Group::draw_box();
-      Fl_Group::draw_label();
-    }
-    if ( ! _root ) return;
-    // These values are changed during drawing
-    // By end, 'Y' will be the lowest point on the tree
-    int X = _tix + _prefs.marginleft() - _hscroll->value();
-    int Y = _tiy + _prefs.margintop()  - _vscroll->value();
-    int W = _tiw - X + _tix;
-    // Adjust root's X/W if connectors off
-    if (_prefs.connectorstyle() == FL_TREE_CONNECTOR_NONE) {
-      X -= _prefs.openicon()->w();
-      W += _prefs.openicon()->w();
-    }
-    // Draw entire tree, starting with root
-    fl_push_clip(_tix,_tiy,_tiw,_tih);
-    {
-      int xmax = 0;
-      fl_font(_prefs.labelfont(), _prefs.labelsize());
-      _root->draw(X, Y, W, 				// descend into tree here to draw it
-		  (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
-		  xmax, 1, 1);
-    }
-    fl_pop_clip();
-  }  
-  // Draw scrollbars last
-  draw_child(*_vscroll);
-  draw_child(*_hscroll);
-  // That little tile between the scrollbars
-  if ( _vscroll->visible() && _hscroll->visible() ) {
-    fl_color(_vscroll->color());
-    fl_rectf(_hscroll->x()+_hscroll->w(),
-             _vscroll->y()+_vscroll->h(),
-	     _vscroll->w(),
-	     _hscroll->h());
-  }
-
-  // Draw dragging line
-  if (_prefs.selectmode() == FL_TREE_SELECT_SINGLE_DRAGGABLE &&
-      Fl::pushed() == this) {
-
-    Fl_Tree_Item *item = _root->find_clicked(_prefs, 1); // item we're on, vertically
-    if (item && item != _item_focus) {
-      // Are we dropping above or before the target item?
-      const int h = Fl::event_y() - item->y();
-      const int mid = item->h() / 2;
-      const bool before = h < mid;
-
-      fl_color(FL_BLACK);
-
-      int tgt = item->y() + (before ? 0 : item->h());
-      fl_line(item->x(), tgt, item->x() + item->w(), tgt);
-    }
-  }
-}
-#else
-/// Standard FLTK draw() method, handles drawing the tree widget.
-void Fl_Tree::draw() {
-  int ytoofar = draw_tree();
-
-  // See if we're scrolled below bottom of tree
-  //   This can happen if someone just closed a large item.
-  //   If so, change scroller as needed.
-  //
-  if ( _vscroll->visible() && ytoofar > 0 ) {
-    int scrollval = _vscroll->value();
-    int ch = h() - Fl::box_dh(box());
-    int range2 = scrollval - ytoofar;
-    int size2 = ch + range2;
-    if ( range2 < 0 ) {
-      _vscroll->value(0);
-      _vscroll->hide();
-    } else {
-      _vscroll->slider_size(float(ch)/float(size2));
-      _vscroll->range(0.0,range2);
-      _vscroll->value(range2);
-    }
-    Fl::add_timeout(.10, redraw_soon, (void*)this);	// use timer to trigger redraw; we can't
-  }
-
-  // Draw dragging line
-  if (_prefs.selectmode() == FL_TREE_SELECT_SINGLE_DRAGGABLE &&
-      Fl::pushed() == this) {
-
-    Fl_Tree_Item *item = _root->find_clicked(_prefs); // item we're on, vertically
-    if (item && item != _item_focus) {
-      // Are we dropping above or before the target item?
-      const int h = Fl::event_y() - item->y();
-      const int mid = item->h() / 2;
-      const bool before = h < mid;
-
-      fl_color(FL_BLACK);
-
-      int tgt = item->y() + (before ? 0 : item->h());
-      fl_line(item->x(), tgt, item->x() + item->w(), tgt);
-    }
-  }
-}
-
-// This method is undocumented, and has been removed in ABI 1.3.3
-int Fl_Tree::draw_tree() {
-  int ret = 0;
-  fix_scrollbar_order();
-  // Let group draw box+label but *NOT* children.
-  // We handle drawing children ourselves by calling each item's draw()
-  //
-  int cx = x() + Fl::box_dx(box());
-  int cy = y() + Fl::box_dy(box());
-  int cw = w() - Fl::box_dw(box());
-  int ch = h() - Fl::box_dh(box());
-  {
-    // Handle group's bg
-    if ( damage() & ~FL_DAMAGE_CHILD) {			// redraw entire widget?
-      Fl_Group::draw_box();
-      Fl_Group::draw_label();
-    }
-    if ( ! _root ) return(0);
-    // These values are changed during drawing
-    // By end, 'Y' will be the lowest point on the tree
-    int X = cx + _prefs.marginleft();
-    int Y = cy + _prefs.margintop() - (_vscroll->visible() ? _vscroll->value() : 0);
-    int W = cw - _prefs.marginleft();			// - _prefs.marginright();
-    // Adjust root's X/W if connectors off
-    if (_prefs.connectorstyle() == FL_TREE_CONNECTOR_NONE) {
-      X -= _prefs.openicon()->w();
-      W += _prefs.openicon()->w();
-    }
-    int Ysave = Y;
-    fl_push_clip(cx,cy,cw,ch);
-    {
-      fl_font(_prefs.labelfont(), _prefs.labelsize());
-      _root->draw(X, Y, W, this,
-		  (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
-		  _prefs);
-    }
-    fl_pop_clip();
-    
-    // Show vertical scrollbar?
-    {
-#if FLTK_ABI_VERSION >= 10301
-      // NEW
-      int SY = Y + _prefs.marginbottom();
-#else /*FLTK_ABI_VERSION*/
-      // OLD
-      int SY = Y;
-#endif /*FLTK_ABI_VERSION*/
-      int ydiff = (SY+_prefs.margintop())-Ysave;		// ydiff=size of tree
-      int ytoofar = (cy+ch) - SY;				// ytoofar -- if >0, scrolled beyond bottom
-      if ( ytoofar > 0 ) ydiff += ytoofar;
-      if ( Ysave<cy || ydiff>ch || int(_vscroll->value())>1 ) {
-	_vscroll->visible();
-	int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-	int sx = x()+w()-Fl::box_dx(box())-scrollsize;
-	int sy = y()+Fl::box_dy(box());
-	int sw = scrollsize;
-	int sh = h()-Fl::box_dh(box());
-	_vscroll->show();
-	_vscroll->resize(sx,sy,sw,sh);
-	_vscroll->slider_size(float(ch)/float(ydiff));
-	_vscroll->range(0.0,ydiff-ch);
-	ret = ytoofar;
-      } else {
-	_vscroll->Fl_Slider::value(0);
-	_vscroll->hide();
-	ret = 0;
-      }
-    }
-  }
-  draw_child(*_vscroll);	// draw scroll last
-  return(ret);
-}
-#endif
-
-/// Print the tree as 'ascii art' to stdout.
-/// Used mainly for debugging.
-/// \todo should be const
-/// \version 1.3.0
-///
-void Fl_Tree::show_self() {
-  if ( ! _root ) return;
-  _root->show_self();
-}
-
-/// Set the label for the root item to \p 'new_label'. 
-///
-/// Makes an internally managed copy of 'new_label'.
-///
-void Fl_Tree::root_label(const char *new_label) {
-  if ( ! _root ) return;
-  _root->label(new_label);
-}
-
-/// Returns the root item.
-Fl_Tree_Item* Fl_Tree::root() {
-  return(_root);
-}
-
-/// Sets the root item to \p 'newitem'.
-///
-/// If a root item already exists, clear() is called first to clear it
-/// before replacing it with newitem.
-///
-#if FLTK_ABI_VERSION >= 10303
-/// Use this to install a custom item (derived from Fl_Tree_Item) as the root
-/// of the tree. This allows the derived class to implement custom drawing
-/// by overriding Fl_Tree_Item::draw_item_content().
-///
-#endif
-/// \version 1.3.3
-///
-void Fl_Tree::root(Fl_Tree_Item *newitem) {
-  if ( _root ) clear();
-  _root = newitem;
-}
-
-/// Adds a new item, given a menu style \p 'path'.
-/// Any parent nodes that don't already exist are created automatically.
-/// Adds the item based on the value of sortorder().
-/// If \p 'item' is NULL, a new item is created.
-///
-/// To specify items or submenus that contain slashes ('/' or '\')
-/// use an escape character to protect them, e.g.
-/// \code
-///     tree->add("/Holidays/Photos/12\\/25\\/2010");         // Adds item "12/25/2010"
-///     tree->add("/Pathnames/c:\\\\Program Files\\\\MyApp"); // Adds item "c:\Program Files\MyApp"
-/// \endcode
-/// \param[in] path The path to the item, e.g. "Flintstone/Fred".
-/// \param[in] item The new item to be added.
-///                 If NULL, a new item is created with
-///                 a name that is the last element in \p 'path'.
-/// \returns The new item added, or 0 on error.
-/// \version 1.3.3
-///
-Fl_Tree_Item* Fl_Tree::add(const char *path, Fl_Tree_Item *item) {
-  // Tree has no root? make one
-  if ( ! _root ) {
-#if FLTK_ABI_VERSION >= 10303
-    _root = new Fl_Tree_Item(this);
-#else
-    _root = new Fl_Tree_Item(_prefs);
-#endif
-    _root->parent(0);
-    _root->label("ROOT");
-  } 
-  // Find parent item via path
-  char **arr = parse_path(path);
-  item = _root->add(_prefs, arr, item);
-  free_path(arr);
-  return(item);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-// do nothing here: add(path,item) where item defaults to 0 takes its place
-#else
-/// Adds a new item given a menu style \p 'path'.
-/// Same as calling add(path, NULL);
-/// \param[in] path The path to the item to be created, e.g. "Flintstone/Fred".
-/// \returns The new item added, or 0 on error.
-/// \see add(const char*,Fl_Tree_Item*)
-/// \version 1.3.0 release
-///
-Fl_Tree_Item* Fl_Tree::add(const char *path) {
-  return add(path, 0);
-}
-#endif
-
-/// Add a new child item labeled \p 'name' to the specified \p 'parent_item'.
-///
-/// \param[in] parent_item The parent item the new child item will be added to.
-///                        Must not be NULL.
-/// \param[in] name The label for the new item
-/// \returns The new item added.
-/// \version 1.3.0 release
-///
-Fl_Tree_Item* Fl_Tree::add(Fl_Tree_Item *parent_item, const char *name) {
-  return(parent_item->add(_prefs, name));
-}
-
-/// Inserts a new item \p 'name' above the specified Fl_Tree_Item \p 'above'.
-/// Example:
-/// \code
-/// tree->add("Aaa/000");       // "000" is index 0 in Aaa's children
-/// tree->add("Aaa/111");       // "111" is index 1 in Aaa's children
-/// tree->add("Aaa/222");       // "222" is index 2 in Aaa's children
-/// ..
-/// // How to use insert_above() to insert a new item above Aaa/222
-/// Fl_Tree_Item *item = tree->find_item("Aaa/222");  // get item Aaa/222
-/// if (item) tree->insert_above(item, "New item");   // insert new item above it
-/// \endcode
-///
-/// \param[in] above -- the item above which to insert the new item. Must not be NULL.
-/// \param[in] name -- the name of the new item
-/// \returns The new item added, or 0 if 'above' could not be found.
-/// \see insert()
-/// 
-Fl_Tree_Item* Fl_Tree::insert_above(Fl_Tree_Item *above, const char *name) {
-  return(above->insert_above(_prefs, name));
-}
-
-/// Insert a new item \p 'name' into \p 'item's children at position \p 'pos'.
-///
-/// If \p pos is out of range the new item is
-///  - prepended if \p pos \< 0 or
-///  - appended  if \p pos \> item->children().
-///
-/// Note: \p pos == children() is not considered out of range: the item is
-/// appended to the child list.
-/// Example:
-/// \code
-/// tree->add("Aaa/000");       // "000" is index 0 in Aaa's children
-/// tree->add("Aaa/111");       // "111" is index 1 in Aaa's children
-/// tree->add("Aaa/222");       // "222" is index 2 in Aaa's children
-/// ..
-/// // How to use insert() to insert a new item between Aaa/111 + Aaa/222
-/// Fl_Tree_Item *item = tree->find_item("Aaa");  // get parent item Aaa
-/// if (item) tree->insert(item, "New item", 2);  // insert as a child of Aaa at index #2
-/// \endcode
-///
-/// \param[in] item The existing item to insert new child into. Must not be NULL.
-/// \param[in] name The label for the new item
-/// \param[in] pos The position of the new item in the child list
-/// \returns The new item added.
-/// \see insert_above()
-///
-Fl_Tree_Item* Fl_Tree::insert(Fl_Tree_Item *item, const char *name, int pos) {
-  return(item->insert(_prefs, name, pos));
-}
-
-/// Remove the specified \p 'item' from the tree.
-/// \p item may not be NULL.
-/// If it has children, all those are removed too.
-/// If item being removed has focus, no item will have focus.
-/// \returns 0 if done, -1 if 'item' not found.
-///
-int Fl_Tree::remove(Fl_Tree_Item *item) {
-  // Item being removed is focus item? zero focus
-  if ( item == _item_focus ) _item_focus = 0;
-#if FLTK_ABI_VERSION >= 10301
-  if ( item == _lastselect ) _lastselect = 0;
-#endif /*FLTK_ABI_VERSION*/
-  if ( item == _root ) {
-    clear();
-  } else {
-    Fl_Tree_Item *parent = item->parent();	// find item's parent
-    if ( ! parent ) return(-1);
-    parent->remove_child(item);			// remove child + children
-  }
-  return(0);
-} 
-
-/// Clear the entire tree's children, including the root.
-/// The tree will be left completely empty.
-///
-void Fl_Tree::clear() {
-  if ( ! _root ) return;
-  _root->clear_children();
-  delete _root; _root = 0;
-  _item_focus = 0;
-#if FLTK_ABI_VERSION >= 10301
-  _lastselect = 0;
-#endif /*FLTK_ABI_VERSION*/
-} 
-
-/// Clear all the children for \p 'item'.
-/// Item may not be NULL.
-///
-void Fl_Tree::clear_children(Fl_Tree_Item *item) {
-  if ( item->has_children() ) {
-    item->clear_children();
-    redraw();				// redraw only if there were children to clear
-  }
-} 
-
-/// Find the item, given a menu style path, e.g. "/Parent/Child/item".
-/// There is both a const and non-const version of this method.
-/// Const version allows pure const methods to use this method 
-/// to do lookups without causing compiler errors.
-///
-/// To specify items or submenus that contain slashes ('/' or '\')
-/// use an escape character to protect them, e.g.
-///
-/// \code
-///     tree->add("/Holidays/Photos/12\\/25\\/2010");         // Adds item "12/25/2010"
-///     tree->add("/Pathnames/c:\\\\Program Files\\\\MyApp"); // Adds item "c:\Program Files\MyApp"
-/// \endcode
-///
-/// \param[in] path -- the tree item's pathname to be found (e.g. "Flintstones/Fred")
-/// \returns The item, or NULL if not found.
-/// \see item_pathname()
-///
-const Fl_Tree_Item *Fl_Tree::find_item(const char *path) const {
-  if ( ! _root ) return(NULL);
-  char **arr = parse_path(path);
-  const Fl_Tree_Item *item = _root->find_item(arr);
-  free_path(arr);
-  return(item);
-}
-
-/// Non-const version of Fl_Tree::find_item(const char *path) const
-Fl_Tree_Item *Fl_Tree::find_item(const char *path) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree&>(*this).find_item(path)));
-}
-
-// Handle safe 'reverse string concatenation'.
-//   In the following we build the pathname from right-to-left,
-//   since we start at the child and work our way up to the root.
-//
-#define SAFE_RCAT(c) { \
-  slen += 1; if ( slen >= pathnamelen ) { pathname[0] = '\0'; return(-2); } \
-  *s-- = c; \
-  }
-
-/// Return \p 'pathname' of size \p 'pathnamelen' for the specified \p 'item'.
-///
-/// If \p 'item' is NULL, root() is used.<br>
-/// The tree's root will be included in the pathname if showroot() is on.<br>
-/// Menu items or submenus that contain slashes ('/' or '\') in their names
-/// will be escaped with a backslash. This is symmetrical with the add()
-/// function which uses the same escape pattern to set names.
-///
-/// \param[out] pathname The string to use to return the pathname
-/// \param[in] pathnamelen The maximum length of the string (including NULL). Must not be zero.
-/// \param[in] item The item whose pathname is to be returned.
-/// \returns
-///	-   0 : OK (\p pathname returns the item's pathname)
-///	-  -1 : item not found (pathname="")
-///	-  -2 : pathname not large enough (pathname="")
-/// \see find_item()
-///
-int Fl_Tree::item_pathname(char *pathname, int pathnamelen, const Fl_Tree_Item *item) const {
-  pathname[0] = '\0';
-  item = item ? item : _root;
-  if ( !item ) return(-1);
-  // Build pathname starting at end
-  char *s = (pathname+pathnamelen-1);
-  int slen = 0;			// length of string compiled so far (including NULL)
-  SAFE_RCAT('\0');
-  while ( item ) {
-    if ( item->is_root() && showroot() == 0 ) break;		// don't include root in path if showroot() off
-    // Find name of current item
-    const char *name = item->label() ? item->label() : "???";	// name for this item
-    int len = (int) strlen(name);
-    // Add name to end of pathname[]
-    for ( --len; len>=0; len-- ) {
-      SAFE_RCAT(name[len]);					// rcat name of item
-      if ( name[len] == '/' || name[len] == '\\' ) {
-        SAFE_RCAT('\\');					// escape front or back slashes within name
-      }
-    }
-    SAFE_RCAT('/');						// rcat leading slash
-    item = item->parent();					// move up tree (NULL==root)
-  }
-  if ( *(++s) == '/' ) { ++s; --slen; }				// leave off leading slash from pathname
-  if ( s != pathname ) memmove(pathname, s, slen);	// Shift down right-aligned string
-  return(0);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-/// Find the item that was last clicked on.
-/// You should use callback_item() instead, which is fast,
-/// and is meant to be used within a callback to determine the item clicked.
-///
-/// This method walks the entire tree looking for the first item that is
-/// under the mouse. (The value of the \p 'yonly' flag affects whether
-/// both x and y events are checked, or just y)
-///
-/// Use this method /only/ if you've subclassed Fl_Tree, and are receiving
-/// events before Fl_Tree has been able to process and update callback_item().
-/// 
-/// \param[in] yonly -- 0: check both event's X and Y values.
-///                  -- 1: only check event's Y value, don't care about X.
-/// \returns The item clicked, or NULL if no item was under the current event.
-/// \version 1.3.0
-/// \version 1.3.3 ABI feature: added yonly parameter
-///
-const Fl_Tree_Item* Fl_Tree::find_clicked(int yonly) const {
-  if ( ! _root ) return(NULL);
-  return(_root->find_clicked(_prefs, yonly));
-}
-
-/// Non-const version of Fl_Tree::find_clicked(int yonly) const.
-Fl_Tree_Item *Fl_Tree::find_clicked(int yonly) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree&>(*this).find_clicked(yonly)));
-}
-#else
-/// Find the item that was last clicked on.
-/// You should use callback_item() instead, which is fast,
-/// and is meant to be used within a callback to determine the item clicked.
-///
-/// This method walks the entire tree looking for the first item that is
-/// under the mouse, i.e. at Fl::event_x() / Fl::event_y().
-///
-/// Use this method /only/ if you've subclassed Fl_Tree, and are receiving
-/// events before Fl_Tree has been able to process and update callback_item().
-/// 
-/// \returns The item clicked, or NULL if no item was under the current event.
-/// \version 1.3.0
-///
-const Fl_Tree_Item* Fl_Tree::find_clicked() const {
-  if ( ! _root ) return(NULL);
-  return(_root->find_clicked(_prefs));
-}
-
-/// Non-const version of Fl_Tree::find_clicked() const.
-/// \version 1.3.0
-Fl_Tree_Item *Fl_Tree::find_clicked() {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree&>(*this).find_clicked()));
-}
-#endif
-
-/// Set the item that was last clicked.
-/// Should only be used by subclasses needing to change this value.
-/// Normally Fl_Tree manages this value.
-///
-/// \deprecated in 1.3.3 ABI -- use callback_item() instead.
-///
-void Fl_Tree::item_clicked(Fl_Tree_Item* item) {
-  _callback_item = item;
-}
-
-/// Return the item that was last clicked.
-///
-/// Valid only from within the callback().
-///
-/// \returns The item clicked, or 0 if none.
-///          0 may also be used to indicate several items were clicked/changed.
-/// \deprecated in 1.3.3 ABI -- use callback_item() instead.
-///
-Fl_Tree_Item* Fl_Tree::item_clicked() {
-  return(_callback_item);
-}
-
-/// Returns next open(), visible item above (\p dir==FL_Up)
-/// or below (\p dir==FL_Down) the specified \p 'item', or 0 if no more items.
-///
-/// If \p 'item' is 0, returns last() if \p 'dir' is FL_Up,
-/// or first() if \p dir is FL_Down.
-///
-/// \code
-/// // Walk down the tree (forwards)
-/// for ( Fl_Tree_Item *i=tree->first_visible_item(); i; i=tree->next_visible_item(i, FL_Down) )
-///     printf("Item: %s\n", i->label());
-///
-/// // Walk up the tree (backwards)
-/// for ( Fl_Tree_Item *i=tree->last_visible_item(); i; i=tree->next_visible_item(i, FL_Up) )
-///     printf("Item: %s\n", i->label());
-/// \endcode
-/// \param[in] item The item above/below which we'll find the next visible item
-/// \param[in] dir  The direction to search. Can be FL_Up or FL_Down.
-/// \returns The item found, or 0 if there's no visible items above/below the specified \p item.
-/// \version 1.3.3
-///
-Fl_Tree_Item *Fl_Tree::next_visible_item(Fl_Tree_Item *item, int dir) {
-  return next_item(item, dir, true);
-}
-
-/// Returns the first item in the tree, or 0 if none.
-///
-/// Use this to walk the tree in the forward direction, e.g.
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) )
-///     printf("Item: %s\n", item->label());
-/// \endcode
-///
-/// \returns First item in tree, or 0 if none (tree empty).
-/// \see first(), next(), last(), prev()
-///
-Fl_Tree_Item* Fl_Tree::first() {
-  return(_root);				// first item always root
-}
-
-/// Returns the first open(), visible item in the tree, or 0 if none.
-/// \deprecated in 1.3.3 ABI -- use first_visible_item() instead.
-///
-Fl_Tree_Item* Fl_Tree::first_visible() {
-  return(first_visible_item());
-}
-
-/// Returns the first open(), visible item in the tree, or 0 if none.
-/// \returns First visible item in tree, or 0 if none.
-/// \see first_visible_item(), last_visible_item(), next_visible_item()
-/// \version 1.3.3
-///
-Fl_Tree_Item* Fl_Tree::first_visible_item() {
-  Fl_Tree_Item *i = showroot() ? first() : next(first());
-  while ( i ) {
-    if ( i->visible() ) return(i);
-    i = next(i);
-  }
-  return(0);
-}
-
-/// Return the next item after \p 'item', or 0 if no more items.
-///
-/// Use this code to walk the entire tree:
-/// \code
-/// for ( Fl_Tree_Item *i = tree->first(); i; i = tree->next(i) )
-///     printf("Item: %s\n", i->label());
-/// \endcode
-///
-/// \param[in] item The item to use to find the next item. If NULL, returns 0.
-/// \returns Next item in tree, or 0 if at last item.
-///
-/// \see first(), next(), last(), prev()
-///
-Fl_Tree_Item *Fl_Tree::next(Fl_Tree_Item *item) {
-  if ( ! item ) return(0);
-  return(item->next());
-}
-
-/// Return the previous item before \p 'item', or 0 if no more items.
-///
-/// This can be used to walk the tree in reverse, e.g.
-/// \code
-/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->prev(item) )
-///     printf("Item: %s\n", item->label());
-/// \endcode
-///
-/// \param[in] item The item to use to find the previous item. If NULL, returns 0.
-/// \returns Previous item in tree, or 0 if at first item.
-///
-/// \see first(), next(), last(), prev()
-///
-Fl_Tree_Item *Fl_Tree::prev(Fl_Tree_Item *item) {
-  if ( ! item ) return(0);
-  return(item->prev());
-}
-
-/// Returns the last item in the tree.
-///
-/// This can be used to walk the tree in reverse, e.g.
-///
-/// \code
-/// for ( Fl_Tree_Item *item = tree->last(); item; item = tree->prev() )
-///     printf("Item: %s\n", item->label());
-/// \endcode
-///
-/// \returns Last item in the tree, or 0 if none (tree empty).
-/// \see first(), next(), last(), prev()
-///
-Fl_Tree_Item* Fl_Tree::last() {
-  if ( ! _root ) return(0);
-  Fl_Tree_Item *item = _root;
-  while ( item->has_children() ) {
-    item = item->child(item->children()-1);
-  }
-  return(item);
-}
-
-/// Returns the last open(), visible item in the tree.
-/// \deprecated in 1.3.3 -- use last_visible_item() instead.
-///
-Fl_Tree_Item* Fl_Tree::last_visible() {
-  return(last_visible_item());
-}
-
-/// Returns the last open(), visible item in the tree.
-/// \returns Last visible item in the tree, or 0 if none.
-/// \see first_visible_item(), last_visible_item(), next_visible_item()
-/// \version 1.3.3
-///
-Fl_Tree_Item* Fl_Tree::last_visible_item() {
-  Fl_Tree_Item *item = last();
-  while ( item ) {
-    if ( item->visible() ) {
-      if ( item == _root && !showroot() ) {
-        return(0);
-      } else {
-        return(item);
-      }
-    }
-    item = prev(item);
-  }
-  return(item);
-}
-
-/// Returns the first selected item in the tree.
-///
-/// Use this to walk the tree from top to bottom
-/// looking for all the selected items, e.g.
-///
-/// \code
-/// // Walk tree forward, from top to bottom
-/// for ( Fl_Tree_Item *i=tree->first_selected_item(); i; i=tree->next_selected_item(i) )
-///     printf("Selected item: %s\n", i->label());
-/// \endcode
-///
-/// \returns The first selected item, or 0 if none.
-/// \see first_selected_item(), last_selected_item(), next_selected_item()
-///     
-Fl_Tree_Item *Fl_Tree::first_selected_item() {
-  return(next_selected_item(0));
-}
-
-#if FLTK_ABI_VERSION >= 10303
-// nothing
-#else
-/// Returns the next selected item after \p 'item'.
-/// If \p item is 0, search starts at the first item (root).
-///
-/// This is a convenience method; equivalent to next_selected_item(item, FL_Down);
-///
-/// Use this to walk the tree forward (downward) looking for all the selected items, e.g.
-/// \code
-/// for ( Fl_Tree_Item *i = tree->first_selected_item(); i; i = tree->next_selected_item(i) )
-///     printf("Selected item: %s\n", i->label());
-/// \endcode
-///
-/// \param[in] item The item to use to find the next selected item. If NULL, first() is used.
-/// \returns The next selected item, or 0 if there are no more selected items.
-/// \see first_selected_item(), last_selected_item(), next_selected_item()
-///     
-Fl_Tree_Item *Fl_Tree::next_selected_item(Fl_Tree_Item *item) {
-  return(next_selected_item(item, FL_Down));
-}
-#endif
-
-/// Returns the last selected item in the tree.
-///
-/// Use this to walk the tree in reverse from bottom to top
-/// looking for all the selected items, e.g.
-///
-/// \code
-/// // Walk tree in reverse, from bottom to top
-/// for ( Fl_Tree_Item *i=tree->last_selected_item(); i; i=tree->next_selected_item(i, FL_Up) )
-///     printf("Selected item: %s\n", i->label());
-/// \endcode
-///
-/// \returns The last selected item, or 0 if none.
-/// \see first_selected_item(), last_selected_item(), next_selected_item()
-/// \version 1.3.3
-///     
-Fl_Tree_Item *Fl_Tree::last_selected_item() {
-  return(next_selected_item(0, FL_Up));
-}
-
-/// Returns next item after \p 'item' in direction \p 'dir'
-/// depending on \p 'visible'.
-///
-/// Next item will be above (if dir==FL_Up) or below (if dir==FL_Down).
-/// If \p 'visible' is true, only items whose parents are open() will be returned.
-/// If \p 'visible' is false, even items whose parents are close()ed will be returned.
-///
-/// If \p item is 0, the return value will be the result of this truth table:
-/// <PRE>
-///                        visible=true           visible=false
-///                        -------------------    -------------
-///          dir=FL_Up:    last_visible_item()    last()
-///        dir=FL_Down:    first_visible_item()   first()
-/// </PRE>
-///
-/// \par Example use:
-/// \code
-/// // Walk down the tree showing open(), visible items
-/// for ( Fl_Tree_Item *i=tree->first_visible_item(); i; i=tree->next_item(i, FL_Down, true) )
-///     printf("Item: %s\n", i->label());
-///
-/// // Walk up the tree showing open(), visible items
-/// for ( Fl_Tree_Item *i=tree->last_visible_item(); i; i=tree->next_item(i, FL_Up, true) )
-///     printf("Item: %s\n", i->label());
-///
-/// // Walk down the tree showing all items (open or closed)
-/// for ( Fl_Tree_Item *i=tree->first(); i; i=tree->next_item(i, FL_Down, false) )
-///     printf("Item: %s\n", i->label());
-///
-/// // Walk up the tree showing all items (open or closed)
-/// for ( Fl_Tree_Item *i=tree->last(); i; i=tree->next_item(i, FL_Up, false) )
-///     printf("Item: %s\n", i->label());
-/// \endcode
-///
-/// \param[in] item    The item to use to find the next item. If NULL, returns 0.
-/// \param[in] dir     Can be FL_Up or FL_Down (default=FL_Down or 'next')
-/// \param[in] visible true=return only open(), visible items,<br>
-///                    false=return open or closed items (default)
-/// \returns Next item in tree in the direction and visibility specified,
-///          or 0 if no more items of specified visibility in that direction.
-/// \see first(), last(), next(),<BR>
-///      first_visible_item(), last_visible_item(), next_visible_item(),<BR>
-///      first_selected_item(), last_selected_item(), next_selected_item()
-/// \version 1.3.3
-///  
-Fl_Tree_Item *Fl_Tree::next_item(Fl_Tree_Item *item, int dir, bool visible) {
-  if ( ! item ) {					// no start item?
-    if ( visible ) {
-	item = ( dir == FL_Up ) ? last_visible_item() : // wrap to bottom
-				  first_visible_item();	// wrap to top
-    } else {
-	item = ( dir == FL_Up ) ? last() :		// wrap to bottom
-				  first();		// wrap to top
-    }
-    if ( ! item ) return(0);
-    if ( item->visible_r() ) return(item);		// return first/last visible item
-  }
-  switch (dir) {
-    case FL_Up:
-      if ( visible ) return(item->prev_visible(_prefs));
-      else           return(item->prev());
-    case FL_Down:
-      if ( visible ) return(item->next_visible(_prefs));
-      else           return(item->next());
-  }
-  return(0);		// unknown dir
-}
-
-/// Returns the next selected item above or below \p 'item', depending on \p 'dir'.
-/// If \p 'item' is 0, search starts at either first() or last(), depending on \p 'dir':
-/// first() if \p 'dir' is FL_Down (default), last() if \p 'dir' is FL_Up.
-///
-/// Use this to walk the tree looking for all the selected items, e.g.
-/// \code
-/// // Walk down the tree (forwards)
-/// for ( Fl_Tree_Item *i=tree->first_selected_item(); i; i=tree->next_selected_item(i, FL_Down) )
-///     printf("Item: %s\n", i->label());
-///
-/// // Walk up the tree (backwards)
-/// for ( Fl_Tree_Item *i=tree->last_selected_item(); i; i=tree->next_selected_item(i, FL_Up) )
-///     printf("Item: %s\n", i->label());
-/// \endcode
-///
-/// \param[in] item The item above or below which we'll find the next selected item.
-///                 If NULL, first() is used if FL_Down, last() if FL_Up.
-///                 (default=NULL)
-/// \param[in] dir  The direction to go.
-///                 FL_Up for moving up the tree,
-///                 FL_Down for down the tree (default)
-/// \returns The next selected item, or 0 if there are no more selected items.
-/// \see first_selected_item(), last_selected_item(), next_selected_item()
-/// \version 1.3.3
-///
-Fl_Tree_Item *Fl_Tree::next_selected_item(Fl_Tree_Item *item, int dir) {
-  switch (dir) {
-    case FL_Down:
-      if ( ! item ) {
-	if ( ! (item = first()) ) return(0);
-	if ( item->is_selected() ) return(item);
-      }
-      while ( (item = item->next()) )
-	if ( item->is_selected() )
-	  return(item);
-      return(0);
-    case FL_Up:
-      if ( ! item ) {
-	if ( ! (item = last()) ) return(0);
-	if ( item->is_selected() ) return(item);
-      }
-      while ( (item = item->prev()) )
-	if ( item->is_selected() )
-	  return(item);
-      return(0);
-  }
-  return(0);
-}
-
-#if FLTK_ABI_VERSION >= 10303		/* reason for this: Fl_Tree_Item_Array::manage_item_destroy() */
-/// Returns the currently selected items as an array of \p 'ret_items'.
-///
-/// Example:
-/// \code
-///   // Get selected items as an array
-///   Fl_Tree_Item_Array items;
-///   tree->get_selected_items(items);
-///   // Manipulate the returned array
-///   for ( int t=0; t<items.total(); t++ ) {
-///       Fl_Tree_Item &item = items[t];
-///       ..do stuff with each selected item..
-///   }
-/// \endcode
-///
-/// \param[out] ret_items The returned array of selected items.
-/// \returns The number of items in the returned array.
-/// \see first_selected_item(), next_selected_item()
-/// \version 1.3.3 ABI feature
-///
-int Fl_Tree::get_selected_items(Fl_Tree_Item_Array &ret_items) {
-  ret_items.clear();
-  for ( Fl_Tree_Item *i=first_selected_item(); i; i=next_selected_item(i) ) {
-    ret_items.add(i);
-  }
-  return ret_items.total();
-}
-#endif
-
-/// Open the specified \p 'item'.
-///
-/// This causes the item's children (if any) to be shown.<br>
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item to be opened. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - callback() is not invoked
-///     -   1 - callback() is invoked if item changed (default),
-///             callback_reason() will be FL_TREE_REASON_OPENED
-/// \returns
-///     -   1 -- item was opened
-///     -   0 -- item was already open, no change
-///
-/// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-///
-int Fl_Tree::open(Fl_Tree_Item *item, int docallback) {
-  if ( item->is_open() ) return(0);
-  item->open();		// handles recalc_tree()
-  redraw();
-  if ( docallback ) {
-    do_callback_for_item(item, FL_TREE_REASON_OPENED);
-  }
-  return(1);
-}
-
-/// Opens the item specified by \p 'path'.
-///
-/// This causes the item's children (if any) to be shown.<br>
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. open("Holidays/12\\/25\\/2010").
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - callback() is not invoked
-///     -   1 - callback() is invoked if item changed (default),
-///             callback_reason() will be FL_TREE_REASON_OPENED
-/// \returns
-///     -   1 -- OK: item opened
-///     -   0 -- OK: item was already open, no change
-///     -  -1 -- ERROR: item was not found
-/// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-///         
-int Fl_Tree::open(const char *path, int docallback) {
-  Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(open(item, docallback));		// handles recalc_tree()
-}
-
-/// Toggle the open state of \p 'item'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item whose open state is to be toggled. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - callback() is not invoked
-///     -   1 - callback() is invoked (default), callback_reason() will be either
-///             FL_TREE_REASON_OPENED or FL_TREE_REASON_CLOSED
-///
-/// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-///
-void Fl_Tree::open_toggle(Fl_Tree_Item *item, int docallback) {
-  if ( item->is_open() ) {
-    close(item, docallback);		// handles recalc_tree()
-  } else {
-    open(item, docallback);		// handles recalc_tree()
-  }
-}
-
-/// Closes the specified \p 'item'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item to be closed. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - callback() is not invoked
-///     -   1 - callback() is invoked if item changed (default),
-///             callback_reason() will be FL_TREE_REASON_CLOSED
-/// \returns
-///     -   1 -- item was closed
-///     -   0 -- item was already closed, no change
-/// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-///
-int Fl_Tree::close(Fl_Tree_Item *item, int docallback) {
-  if ( item->is_close() ) return(0);
-  item->close();		// handles recalc_tree()
-  redraw();
-  if ( docallback ) {
-    do_callback_for_item(item, FL_TREE_REASON_CLOSED);
-  }
-  return(1);
-}
-
-/// Closes the item specified by \p 'path'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. close("Holidays/12\\/25\\/2010").
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - callback() is not invoked
-///     -   1 - callback() is invoked if item changed (default),
-///             callback_reason() will be FL_TREE_REASON_CLOSED
-/// \returns
-///     -   1 -- OK: item closed
-///     -   0 -- OK: item was already closed, no change
-///     -  -1 -- ERROR: item was not found
-/// \see open(), close(), is_open(), is_close(), callback_item(), callback_reason()
-///         
-int Fl_Tree::close(const char *path, int docallback) {
-  Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(close(item, docallback));		// handles recalc_tree()
-}
-
-/// See if \p 'item' is open.
-///
-/// Items that are 'open' are themselves not necessarily visible;
-/// one of the item's parents might be closed.
-///
-/// \param[in] item -- the item to be tested. Must not be NULL.
-/// \returns
-///     -  1 : item is open
-///     -  0 : item is closed
-///
-int Fl_Tree::is_open(Fl_Tree_Item *item) const {
-  return(item->is_open()?1:0);
-}
-
-/// See if item specified by \p 'path' is open.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. is_open("Holidays/12\\/25\\/2010").
-///
-/// Items that are 'open' are themselves not necessarily visible;
-/// one of the item's parents might be closed.
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \returns
-///     -    1 - OK: item is open
-///     -    0 - OK: item is closed
-///     -   -1 - ERROR: item was not found
-/// \see Fl_Tree_Item::visible_r()
-///
-int Fl_Tree::is_open(const char *path) const {
-  const Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(item->is_open()?1:0);
-}
-
-/// See if the specified \p 'item' is closed.
-///
-/// \param[in] item -- the item to be tested. Must not be NULL.
-/// \returns
-///     -   1 : item is closed
-///     -   0 : item is open
-///
-int Fl_Tree::is_close(Fl_Tree_Item *item) const {
-  return(item->is_close());
-}
-
-/// See if item specified by \p 'path' is closed.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. is_close("Holidays/12\\/25\\/2010").
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \returns
-///     -   1 - OK: item is closed
-///     -   0 - OK: item is open
-///     -  -1 - ERROR: item was not found
-///
-int Fl_Tree::is_close(const char *path) const {
-  const Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(item->is_close()?1:0);
-}
-
-/// Select the specified \p 'item'. Use 'deselect()' to deselect it.
-///
-/// Invokes the callback depending on the value of optional parameter \p docallback.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item to be selected. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked if item changed state,
-///             callback_reason() will be FL_TREE_REASON_SELECTED
-/// \returns
-///     -   1 - item's state was changed
-///     -   0 - item was already selected, no change was made
-///
-int Fl_Tree::select(Fl_Tree_Item *item, int docallback) {
-  int alreadySelected = item->is_selected();
-  if ( !alreadySelected ) {
-    item->select();
-    set_changed();
-    if ( docallback ) {
-      do_callback_for_item(item, FL_TREE_REASON_SELECTED);
-    }
-    redraw();
-    return(1);
-  }
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  if ( alreadySelected ) {
-    if ( (item_reselect_mode() == FL_TREE_SELECTABLE_ALWAYS) && docallback ) {
-      do_callback_for_item(item, FL_TREE_REASON_RESELECTED);
-    }
-  }
-#endif /*FLTK_ABI_VERSION*/
-  return(0);
-}
-
-/// Select the item specified by \p 'path'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. select("Holidays/12\\/25\\/2010").
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked if item changed state (default),
-///             callback_reason() will be FL_TREE_REASON_SELECTED
-/// \returns
-///     -   1 : OK: item's state was changed
-///     -   0 : OK: item was already selected, no change was made
-///     -  -1 : ERROR: item was not found
-///
-int Fl_Tree::select(const char *path, int docallback) {
-  Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(select(item, docallback));
-}
-
-/// Toggle the select state of the specified \p 'item'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item to be selected. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked (default), callback_reason() will be
-///             either FL_TREE_REASON_SELECTED or FL_TREE_REASON_DESELECTED
-///
-void Fl_Tree::select_toggle(Fl_Tree_Item *item, int docallback) {
-  item->select_toggle();
-  set_changed();
-  if ( docallback ) {
-    do_callback_for_item(item, item->is_selected() ? FL_TREE_REASON_SELECTED
-						   : FL_TREE_REASON_DESELECTED);
-  }
-  redraw();
-}
-
-/// Deselect the specified \p item.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item -- the item to be deselected. Must not be NULL.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked if item changed state (default),
-///             callback_reason() will be FL_TREE_REASON_DESELECTED
-/// \returns
-///     -   0 - item was already deselected, no change was made
-///     -   1 - item's state was changed
-///
-int Fl_Tree::deselect(Fl_Tree_Item *item, int docallback) {
-  if ( item->is_selected() ) {
-    item->deselect();
-    set_changed();
-    if ( docallback ) {
-      do_callback_for_item(item, FL_TREE_REASON_DESELECTED);
-    }
-    redraw();
-    return(1);
-  }
-  return(0);
-}
-
-/// Deselect an item specified by \p 'path'.
-///
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. deselect("Holidays/12\\/25\\/2010").
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked if item changed state (default),
-///             callback_reason() will be FL_TREE_REASON_DESELECTED
-///  \returns
-///     -   1 - OK: item's state was changed
-///     -   0 - OK: item was already deselected, no change was made
-///     -  -1 - ERROR: item was not found
-///
-int Fl_Tree::deselect(const char *path, int docallback) {
-  Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(deselect(item, docallback));
-}
-
-/// Deselect \p 'item' and all its children.
-///
-/// If item is NULL, first() is used.<br>
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item The item that will be deselected (along with all its children).
-///                 If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state (default),
-///             callback_reason() will be FL_TREE_REASON_DESELECTED
-/// \returns Count of how many items were actually changed to the deselected state.
-///
-int Fl_Tree::deselect_all(Fl_Tree_Item *item, int docallback) {
-  item = item ? item : first();			// NULL? use first()
-  if ( ! item ) return(0);
-  int count = 0;
-  // Deselect item
-  if ( item->is_selected() )
-    if ( deselect(item, docallback) )
-      ++count;
-  // Deselect its children
-  for ( int t=0; t<item->children(); t++ ) {
-    count += deselect_all(item->child(t), docallback);	// recurse
-  }
-  return(count);
-}
-
-/// Select only the specified item, deselecting all others that might be selected.
-///
-/// If \p 'selitem' is 0, first() is used.<br>
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] selitem The item to be selected. If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state (default), 
-///             callback_reason() will be either FL_TREE_REASON_SELECTED or 
-///             FL_TREE_REASON_DESELECTED
-/// \returns The number of items whose selection states were changed, if any.
-///
-int Fl_Tree::select_only(Fl_Tree_Item *selitem, int docallback) {
-  selitem = selitem ? selitem : first();	// NULL? use first()
-  if ( ! selitem ) return(0);
-  int changed = 0;
-  // Deselect everything first.
-  //    Prevents callbacks from seeing more than one item selected.
-  //
-  for ( Fl_Tree_Item *item = first(); item; item = item->next() ) {
-    if ( item == selitem ) continue;		// don't do anything to selitem yet..
-    if ( item->is_selected() ) {
-      deselect(item, docallback);
-      ++changed;
-    }
-  }
-#if FLTK_ABI_VERSION >= 10301
-  // Should we 'reselect' item if already selected?
-  if ( selitem->is_selected() && (item_reselect_mode()==FL_TREE_SELECTABLE_ALWAYS) ) {
-    // Selection unchanged, so no ++changed
-    select(selitem, docallback);			// do callback with reason=reselect
-  } else if ( !selitem->is_selected() ) {
-    // Item was not already selected, select and indicate changed
-    select(selitem, docallback);
-    ++changed;
-  }
-#else
-  if ( !selitem->is_selected() ) {
-    // All items deselected, now select the one we want
-    select(selitem, docallback);
-    ++changed;
-  }
-#endif
-  return(changed);
-}
-
-/// Select \p 'item' and all its children.
-///
-/// If item is NULL, first() is used.<br>
-/// Invokes the callback depending on the value of optional
-/// parameter \p 'docallback'.<br>
-/// Handles calling redraw() if anything changed.
-///
-/// The callback can use callback_item() and callback_reason() respectively to determine 
-/// the item changed and the reason the callback was called.
-///
-/// \param[in] item The item that will be selected (along with all its children). 
-///            If NULL, first() is used.
-/// \param[in] docallback -- A flag that determines if the callback() is invoked or not:
-///     -   0 - the callback() is not invoked
-///     -   1 - the callback() is invoked for each item that changed state (default),
-///             callback_reason() will be FL_TREE_REASON_SELECTED
-/// \returns Count of how many items were actually changed to the selected state.
-///
-int Fl_Tree::select_all(Fl_Tree_Item *item, int docallback) {
-  item = item ? item : first();			// NULL? use first()
-  if ( ! item ) return(0);
-  int count = 0;
-  // Select item
-  if ( !item->is_selected() )
-    if ( select(item, docallback) )
-      ++count;
-  // Select its children
-  for ( int t=0; t<item->children(); t++ ) {
-    count += select_all(item->child(t), docallback);	// recurse
-  }
-  return(count);
-}
-
-/// Get the item that currently has keyboard focus.
-Fl_Tree_Item* Fl_Tree::get_item_focus() const {
-  return(_item_focus);
-}
-
-/// Set the item that currently should have keyboard focus.
-///
-/// Handles calling redraw() to update the focus box (if it is visible).
-///
-/// \param[in] item The item that should take focus. If NULL, none will have focus.
-///
-void Fl_Tree::set_item_focus(Fl_Tree_Item *item) {
-  if ( _item_focus != item ) {		// changed?
-    _item_focus = item;			// update
-    if ( visible_focus() ) redraw();	// redraw to update focus box
-  }
-}
-
-/// See if the specified \p 'item' is selected.
-///
-/// \param[in] item -- the item to be tested. Must not be NULL.
-///
-/// \return
-///     -   1 : item selected
-///     -   0 : item deselected
-///
-int Fl_Tree::is_selected(Fl_Tree_Item *item) const {
-  return(item->is_selected()?1:0);
-}
-
-/// See if item specified by \p 'path' is selected.
-///
-/// Items or submenus that themselves contain slashes ('/' or '\')
-/// should be escaped, e.g. is_selected("Holidays/12\\/25\\/2010").
-///
-/// \param[in] path -- the tree item's pathname (e.g. "Flintstones/Fred")
-/// \returns
-///     -   1 : item selected
-///     -   0 : item deselected
-///     -  -1 : item was not found
-///
-int Fl_Tree::is_selected(const char *path) {
-  Fl_Tree_Item *item = find_item(path);
-  if ( ! item ) return(-1);
-  return(is_selected(item));
-}
-
-/// Get the default label fontsize used for creating new items.
-Fl_Fontsize Fl_Tree::item_labelsize() const {
-  return(_prefs.labelsize());
-}
-
-/// Set the default label font size used for creating new items.
-/// To change the font size on a per-item basis, use Fl_Tree_Item::labelsize(Fl_Fontsize)
-///
-void Fl_Tree::item_labelsize(Fl_Fontsize val) {
-  _prefs.labelsize(val);
-}
-
-/// Get the default font face used for creating new items.
-Fl_Font Fl_Tree::item_labelfont() const {
-  return(_prefs.labelfont());
-}
-
-/// Set the default font face used for creating new items.
-/// To change the font face on a per-item basis, use Fl_Tree_Item::labelfont(Fl_Font)
-///
-void Fl_Tree::item_labelfont(Fl_Font val) {
-  _prefs.labelfont(val);
-}
-
-/// Get the default label foreground color used for creating new items.
-Fl_Color Fl_Tree::item_labelfgcolor(void) const {
-  return(_prefs.labelfgcolor());
-}
-
-/// Set the default label foreground color used for creating new items.
-/// To change the foreground color on a per-item basis, use Fl_Tree_Item::labelfgcolor(Fl_Color)
-///
-void Fl_Tree::item_labelfgcolor(Fl_Color val) {
-  _prefs.labelfgcolor(val);
-}
-
-/// Get the default label background color used for creating new items.
-/// If the color is 0xffffffff, it is 'transparent'.
-Fl_Color Fl_Tree::item_labelbgcolor(void) const {
-  return(_prefs.labelbgcolor());
-}
-
-/// Set the default label background color used for creating new items.
-/// A special case is made for color 0xffffffff (default) which is treated as 'transparent'.
-/// To change the background color on a per-item basis, use Fl_Tree_Item::labelbgcolor(Fl_Color)
-///
-void Fl_Tree::item_labelbgcolor(Fl_Color val) {
-  _prefs.labelbgcolor(val);
-}
-
-/// Get the connector color used for tree connection lines.
-Fl_Color Fl_Tree::connectorcolor() const {
-  return(_prefs.connectorcolor());
-}
-
-/// Set the connector color used for tree connection lines.
-void Fl_Tree::connectorcolor(Fl_Color val) {
-  _prefs.connectorcolor(val);
-}
-
-/// Get the amount of white space (in pixels) that should appear
-/// between the widget's left border and the tree's contents.
-///
-int Fl_Tree::marginleft() const {
-  return(_prefs.marginleft());
-}
-
-/// Set the amount of white space (in pixels) that should appear
-/// between the widget's left border and the left side of the tree's contents.
-///
-void Fl_Tree::marginleft(int val) {
-  _prefs.marginleft(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Get the amount of white space (in pixels) that should appear
-/// between the widget's top border and the top of the tree's contents.
-///
-int Fl_Tree::margintop() const {
-  return(_prefs.margintop());
-}
-
-/// Sets the amount of white space (in pixels) that should appear
-/// between the widget's top border and the top of the tree's contents.
-///
-void Fl_Tree::margintop(int val) {
-  _prefs.margintop(val);
-  redraw();
-  recalc_tree();
-}
-
-#if FLTK_ABI_VERSION >= 10301
-/// Get the amount of white space (in pixels) that should appear
-/// below the last visible item when the vertical scroller is scrolled to the bottom.
-///
-int Fl_Tree::marginbottom() const {
-  return(_prefs.marginbottom());
-}
-
-/// Sets the amount of white space (in pixels) that should appear
-/// below the last visible item when the vertical scroller is scrolled to the bottom.
-///
-void Fl_Tree::marginbottom(int val) {
-  _prefs.marginbottom(val);
-  redraw();
-  recalc_tree();
-}
-#endif /*FLTK_ABI_VERSION*/
-
-/// Get the amount of white space (in pixels) that should appear
-/// between items in the tree.
-///
-int Fl_Tree::linespacing() const {
-  return(_prefs.linespacing());
-}
-
-/// Sets the amount of white space (in pixels) that should appear
-/// between items in the tree.
-///
-void Fl_Tree::linespacing(int val) {
-  _prefs.linespacing(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Get the amount of white space (in pixels) that should appear
-/// below an open child tree's contents.
-///
-int Fl_Tree::openchild_marginbottom() const {
-  return(_prefs.openchild_marginbottom());
-}
-
-/// Set the amount of white space (in pixels) that should appear
-/// below an open child tree's contents.
-///
-void Fl_Tree::openchild_marginbottom(int val) {
-  _prefs.openchild_marginbottom(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Get the amount of white space (in pixels) that should appear
-/// to the left of the usericon.
-int Fl_Tree::usericonmarginleft() const {
-  return(_prefs.usericonmarginleft());
-}
-
-/// Set the amount of white space (in pixels) that should appear
-/// to the left of the usericon.
-void Fl_Tree::usericonmarginleft(int val) {
-  _prefs.usericonmarginleft(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Get the amount of white space (in pixels) that should appear
-/// to the left of the label text.
-int Fl_Tree::labelmarginleft() const {
-  return(_prefs.labelmarginleft());
-}
-
-/// Set the amount of white space (in pixels) that should appear
-/// to the left of the label text.
-void Fl_Tree::labelmarginleft(int val) {
-  _prefs.labelmarginleft(val);
-  redraw();
-  recalc_tree();
-}
-
-#if FLTK_ABI_VERSION >= 10301
-/// Get the amount of white space (in pixels) that should appear
-/// to the left of the child fltk widget (if any).
-int Fl_Tree::widgetmarginleft() const {
-  return(_prefs.widgetmarginleft());
-}
-
-/// Set the amount of white space (in pixels) that should appear
-/// to the left of the child fltk widget (if any).
-void Fl_Tree::widgetmarginleft(int val) {
-  _prefs.widgetmarginleft(val);
-  redraw();
-  recalc_tree();
-}
-#endif /*FLTK_ABI_VERSION*/
-
-/// Gets the width of the horizontal connection lines (in pixels) 
-/// that appear to the left of each tree item's label.
-///
-int Fl_Tree::connectorwidth() const {
-  return(_prefs.connectorwidth());
-}
-
-/// Sets the width of the horizontal connection lines (in pixels) 
-/// that appear to the left of each tree item's label.
-///
-void Fl_Tree::connectorwidth(int val) {
-  _prefs.connectorwidth(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns the Fl_Image being used as the default user icon for all
-/// newly created items.
-/// Returns zero if no icon has been set, which is the default.
-///
-Fl_Image* Fl_Tree::usericon() const {
-  return(_prefs.usericon());
-}
-
-/// Sets the Fl_Image to be used as the default user icon for all
-/// newly created items.
-///
-/// If you want to specify user icons on a per-item basis,
-/// use Fl_Tree_Item::usericon() instead.
-///
-/// \param[in] val -- The new image to be used, or
-///                   zero to disable user icons.
-///
-void Fl_Tree::usericon(Fl_Image *val) {
-  _prefs.usericon(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns the icon to be used as the 'open' icon.
-/// If none was set, the internal default is returned,
-/// a simple '[+]' icon.
-///
-Fl_Image* Fl_Tree::openicon() const {
-  return(_prefs.openicon());
-}
-
-/// Sets the icon to be used as the 'open' icon.
-/// This overrides the built in default '[+]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [+] icon.
-///
-void Fl_Tree::openicon(Fl_Image *val) {
-  _prefs.openicon(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns the icon to be used as the 'close' icon.
-/// If none was set, the internal default is returned,
-/// a simple '[-]' icon.
-///
-Fl_Image* Fl_Tree::closeicon() const {
-  return(_prefs.closeicon());
-}
-
-/// Sets the icon to be used as the 'close' icon.
-/// This overrides the built in default '[-]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [-] icon.
-///
-void Fl_Tree::closeicon(Fl_Image *val) {
-  _prefs.closeicon(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns 1 if the collapse icon is enabled, 0 if not.
-/// \see showcollapse(int)
-int Fl_Tree::showcollapse() const {
-  return(_prefs.showcollapse());
-}
-
-/// Set if we should show the collapse icon or not.
-/// If collapse icons are disabled, the user will not be able
-/// to interactively collapse items in the tree, unless the application
-/// provides some other means via open() and close().
-///
-/// \param[in] val 1: shows collapse icons (default),\n
-///                0: hides collapse icons.
-///
-void Fl_Tree::showcollapse(int val) {
-  _prefs.showcollapse(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns 1 if the root item is to be shown, or 0 if not.
-int Fl_Tree::showroot() const {
-  return(_prefs.showroot());
-}
-
-/// Set if the root item should be shown or not.
-/// \param[in] val 1 -- show the root item (default)\n
-///                0 -- hide the root item.
-///
-void Fl_Tree::showroot(int val) {
-  _prefs.showroot(val);
-  redraw();
-  recalc_tree();
-}
-
-/// Returns the line drawing style for inter-connecting items.
-Fl_Tree_Connector Fl_Tree::connectorstyle() const {
-  return(_prefs.connectorstyle());
-}
-
-/// Sets the line drawing style for inter-connecting items.
-///     See ::Fl_Tree_Connector for possible values.
-///
-void Fl_Tree::connectorstyle(Fl_Tree_Connector val) {
-  _prefs.connectorstyle(val);
-  redraw();
-}
-
-/// Set the default sort order used when items are added to the tree.
-///     See ::Fl_Tree_Sort for possible values.
-///
-Fl_Tree_Sort Fl_Tree::sortorder() const {
-  return(_prefs.sortorder());
-}
-
-/// Gets the sort order used to add items to the tree.
-void Fl_Tree::sortorder(Fl_Tree_Sort val) {
-  _prefs.sortorder(val);
-  // no redraw().. only affects new add()itions
-}
-
-/// Sets the style of box used to draw selected items.
-/// This is an fltk ::Fl_Boxtype.
-/// The default is influenced by FLTK's current Fl::scheme()
-///
-Fl_Boxtype Fl_Tree::selectbox() const {
-  return(_prefs.selectbox());
-}
-
-/// Gets the style of box used to draw selected items.
-/// This is an fltk ::Fl_Boxtype.
-/// The default is influenced by FLTK's current Fl::scheme()
-///
-void Fl_Tree::selectbox(Fl_Boxtype val) {
-  _prefs.selectbox(val);
-  redraw();
-}
-
-/// Gets the tree's current selection mode.
-/// See ::Fl_Tree_Select for possible values.
-///
-Fl_Tree_Select Fl_Tree::selectmode() const {
-  return(_prefs.selectmode());
-}
-
-/// Sets the tree's selection mode.
-/// See ::Fl_Tree_Select for possible values.
-///
-void Fl_Tree::selectmode(Fl_Tree_Select val) {
-  _prefs.selectmode(val);
-}
-
-#if FLTK_ABI_VERSION >= 10301
-/// Returns the current item re/selection mode.
-/// \version 1.3.1 ABI feature
-///
-Fl_Tree_Item_Reselect_Mode Fl_Tree::item_reselect_mode() const {
-  return(_prefs.item_reselect_mode());
-}
-
-/// Sets the item re/selection mode.
-/// See ::Fl_Tree_Item_Reselect_Mode for possible values.
-/// \version 1.3.1 ABI feature
-///
-void Fl_Tree::item_reselect_mode(Fl_Tree_Item_Reselect_Mode mode) {
-  _prefs.item_reselect_mode(mode);
-}
-
-/// Get the 'item draw mode' used for the tree.
-/// \version 1.3.1 ABI feature
-///
-Fl_Tree_Item_Draw_Mode Fl_Tree::item_draw_mode() const {
-  return(_prefs.item_draw_mode());
-}
-
-/// Set the 'item draw mode' used for the tree to \p 'mode'.
-///
-/// This affects how items in the tree are drawn,
-/// such as when a widget() is defined. 
-/// See ::Fl_Tree_Item_Draw_Mode for possible values.
-/// \version 1.3.1 ABI feature
-///
-void Fl_Tree::item_draw_mode(Fl_Tree_Item_Draw_Mode mode) {
-  _prefs.item_draw_mode(mode);
-}
-
-/// Set the 'item draw mode' used for the tree to integer \p 'mode'.
-///
-/// This affects how items in the tree are drawn,
-/// such as when a widget() is defined. 
-/// See ::Fl_Tree_Item_Draw_Mode for possible values.
-/// \version 1.3.1 ABI feature
-///
-void Fl_Tree::item_draw_mode(int mode) {
-  _prefs.item_draw_mode(Fl_Tree_Item_Draw_Mode(mode));
-}
-#endif
-
-/// See if \p 'item' is currently displayed on-screen (visible within the widget).
-///
-/// This can be used to detect if the item is scrolled off-screen.
-/// Checks to see if the item's vertical position is within the top and bottom
-/// edges of the display window. This does NOT take into account the hide() / show()
-/// or open() / close() status of the item.
-///
-/// \param[in] item The item to be checked. If NULL, first() is used.
-/// \returns 1 if displayed, 0 if scrolled off screen or no items are in tree.
-///
-int Fl_Tree::displayed(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (!item) return(0);
-  return( (item->y() >= y()) && (item->y() <= (y()+h()-item->h())) ? 1 : 0);
-}
-
-/// Adjust the vertical scrollbar so that \p 'item' is visible
-/// \p 'yoff' pixels from the top of the Fl_Tree widget's display.
-///
-/// For instance, yoff=0 will position the item at the top.
-///
-/// If yoff is larger than the vertical scrollbar's limit,
-/// the value will be clipped. So if yoff=100, but scrollbar's max
-/// is 50, then 50 will be used.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-/// \param[in] yoff The pixel offset from the top for the displayed position.
-///
-/// \see show_item_top(), show_item_middle(), show_item_bottom()
-///
-void Fl_Tree::show_item(Fl_Tree_Item *item, int yoff) {
-  item = item ? item : first();
-  if (!item) return;
-  int newval = item->y() - y() - yoff + (int)_vscroll->value();
-  if ( newval < _vscroll->minimum() ) newval = (int)_vscroll->minimum();
-  if ( newval > _vscroll->maximum() ) newval = (int)_vscroll->maximum();
-  _vscroll->value(newval);
-  redraw();
-}
-
-/// Adjust the vertical scrollbar to show \p 'item' at the top
-/// of the display IF it is currently off-screen (for instance show_item_top()).
-/// If it is already on-screen, no change is made.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-/// \see show_item_top(), show_item_middle(), show_item_bottom()
-///
-void Fl_Tree::show_item(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (!item) return;
-  if ( displayed(item) ) return;
-  show_item_top(item);
-}
-
-/// Adjust the vertical scrollbar so that \p 'item' is at the top of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_top(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item(item, 0);
-}
-
-/// Adjust the vertical scrollbar so that \p 'item' is in the middle of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_middle(Fl_Tree_Item *item) {
-  item = item ? item : first();
-#if FLTK_ABI_VERSION >= 10303
-  if (item) show_item(item, (_tih/2)-(item->h()/2));
-#else
-  if (item) show_item(item, (h()/2)-(item->h()/2));
-#endif
-}
-
-/// Adjust the vertical scrollbar so that \p 'item' is at the bottom of the display.
-///
-/// \param[in] item The item to be shown. If NULL, first() is used.
-///
-void Fl_Tree::show_item_bottom(Fl_Tree_Item *item) {
-  item = item ? item : first();
-#if FLTK_ABI_VERSION >= 10303
-  if (item) show_item(item, _tih-item->h());
-#else
-  if (item) show_item(item, h()-item->h());
-#endif
-}
-
-/// Displays \p 'item', scrolling the tree as necessary.
-/// \param[in] item The item to be displayed. If NULL, first() is used.
-///
-void Fl_Tree::display(Fl_Tree_Item *item) {
-  item = item ? item : first();
-  if (item) show_item_middle(item);
-}
-
-/// Returns the vertical scroll position as a pixel offset.
-/// The position returned is how many pixels of the tree are scrolled off the top edge
-/// of the screen.
-/// \see vposition(int), hposition(), hposition(int)
-///
-int Fl_Tree::vposition() const {
-  return((int)_vscroll->value());
-}
-
-/// Sets the vertical scroll offset to position \p 'pos'.
-/// The position is how many pixels of the tree are scrolled off the top edge
-/// of the screen. 
-/// \param[in] pos The vertical position (in pixels) to scroll the tree to.
-/// \see vposition(), hposition(), hposition(int)
-///
-void Fl_Tree::vposition(int pos) {
-  if (pos < 0) pos = 0;
-  if (pos > _vscroll->maximum()) pos = (int)_vscroll->maximum();
-  if (pos == _vscroll->value()) return;
-  _vscroll->value(pos);
-  redraw();
-}
-
-/// Returns the horizontal scroll position as a pixel offset.
-/// The position returned is how many pixels of the tree are scrolled off the left edge
-/// of the screen.
-/// \see hposition(int), vposition(), vposition(int)
-/// \note Must be using FLTK ABI 1.3.3 or higher for this to be effective.
-///
-int Fl_Tree::hposition() const {
-#if FLTK_ABI_VERSION >= 10303
-  return((int)_hscroll->value());
-#else
-  return(0);
-#endif
-}
-
-/// Sets the horizontal scroll offset to position \p 'pos'.
-/// The position is how many pixels of the tree are scrolled off the left edge
-/// of the screen. 
-/// \param[in] pos The vertical position (in pixels) to scroll the tree to.
-/// \see hposition(), vposition(), vposition(int)
-/// \note Must be using FLTK ABI 1.3.3 or higher for this to be effective.
-///
-void Fl_Tree::hposition(int pos) {
-#if FLTK_ABI_VERSION >= 10303
-  if (pos < 0) pos = 0;
-  if (pos > _hscroll->maximum()) pos = (int)_hscroll->maximum();
-  if (pos == _hscroll->value()) return;
-  _hscroll->value(pos);
-  redraw();
-#endif
-}
-
-/// See if widget \p 'w' is one of the Fl_Tree widget's scrollbars.
-/// Use this to skip over the scrollbars when walking the child() array. Example:
-/// \code
-/// for ( int i=0; i<tree->children(); i++ ) {    // walk children
-///     Fl_Widget *w = tree->child(i);
-///     if ( tree->is_scrollbar(w) ) continue;    // skip scrollbars
-///     ..do work here..
-/// }
-/// \endcode
-/// \param[in] w Widget to test
-/// \returns 1 if \p w is a scrollbar, 0 if not.
-/// \todo should be const
-///
-int Fl_Tree::is_scrollbar(Fl_Widget *w) {
-#if FLTK_ABI_VERSION >= 10303
-  return( (w==_vscroll || w==_hscroll) ? 1 : 0 );
-#else
-  return( (w==_vscroll) ? 1 : 0 );
-#endif
-}
-
-/// Gets the default size of scrollbars' troughs for this widget
-/// in pixels.
-///
-/// If this value is zero (default), this widget will use the global
-/// Fl::scrollbar_size() value as the scrollbar's width.
-/// 
-/// \returns Scrollbar size in pixels, or 0 if the global Fl::scrollbar_size() is being used.
-/// \see Fl::scrollbar_size(int)
-///
-int Fl_Tree::scrollbar_size() const {
-  return(_scrollbar_size);
-}
-
-/// Sets the pixel size of the scrollbars' troughs to \p 'size'
-/// for this widget, in pixels.
-///
-/// Normally you should not need this method, and should use the global
-/// Fl::scrollbar_size(int) instead to manage the size of ALL 
-/// your widgets' scrollbars. This ensures your application 
-/// has a consistent UI, and is the default behavior. Normally
-/// this is what you want.
-///
-/// Only use this method if you really need to override just THIS
-/// instance of the widget's scrollbar size. (This need should be rare.)
-///   
-/// Setting \p size to the special value of 0 causes the widget to
-/// track the global Fl::scrollbar_size(), which is the default.
-///   
-/// \param[in] size Sets the scrollbar size in pixels.\n
-///                 If 0 (default), scrollbar size tracks the global Fl::scrollbar_size()
-/// \see Fl::scrollbar_size()
-///
-void Fl_Tree::scrollbar_size(int size) {
-  _scrollbar_size = size;
-  int scrollsize = _scrollbar_size ? _scrollbar_size : Fl::scrollbar_size();
-  if ( _vscroll->w() != scrollsize ) {
-    _vscroll->resize(x()+w()-scrollsize, h(), scrollsize, _vscroll->h());
-  }
-#if FLTK_ABI_VERSION >= 10303
-  if ( _hscroll->h() != scrollsize ) {
-    _hscroll->resize(x(), y()+h()-scrollsize, _hscroll->w(), scrollsize);
-  }
-  // Changing scrollbar size affects _tiw/_tih + may affect scrollbar visibility
-  calc_dimensions();
-#endif
-}   
-
-/// See if the vertical scrollbar is currently visible.
-/// \returns 1 if scrollbar visible, 0 if not.
-///
-int Fl_Tree::is_vscroll_visible() const {
-  return(_vscroll->visible() ? 1 : 0);
-}
-
-/// See if the horizontal scrollbar is currently visible.
-/// \returns 1 if scrollbar visible, 0 if not.
-/// \note Must be using FLTK ABI 1.3.3 or higher for this to be effective.
-///
-int Fl_Tree::is_hscroll_visible() const {
-#if FLTK_ABI_VERSION >= 10303
-  return(_hscroll->visible() ? 1 : 0);
-#else
-  return 0;
-#endif
-}
-
-/// Do the callback for the specified \p 'item' using \p 'reason',
-/// setting the callback_item() and callback_reason().
-///
-void Fl_Tree::do_callback_for_item(Fl_Tree_Item* item, Fl_Tree_Reason reason) {
-  callback_reason(reason);
-  callback_item(item);
-  do_callback((Fl_Widget*)this, user_data());
-}
-
-/// Sets the item that was changed for this callback.
-/// Used internally to pass the item that invoked the callback.
-///
-void Fl_Tree::callback_item(Fl_Tree_Item* item) {
-  _callback_item = item;
-}
-
-/// Gets the item that caused the callback.
-/// The callback() can use this value to see which item changed.
-///
-Fl_Tree_Item* Fl_Tree::callback_item() {
-  return(_callback_item);
-}
-
-/// Sets the reason for this callback.
-///    Used internally to pass the reason the callback was invoked.
-///
-void Fl_Tree::callback_reason(Fl_Tree_Reason reason) {
-  _callback_reason = reason;
-}
-
-/// Gets the reason for this callback.
-///
-/// The callback() can use this value to see why it was called. Example:
-/// \code
-///     void MyTreeCallback(Fl_Widget *w, void *userdata) {
-///         Fl_Tree *tree = (Fl_Tree*)w;
-///         Fl_Tree_Item *item = tree->callback_item();    // the item changed (can be NULL if more than one item was changed!)
-///         switch ( tree->callback_reason() ) {           // reason callback was invoked
-///             case     FL_TREE_REASON_OPENED: ..item was opened..
-///             case     FL_TREE_REASON_CLOSED: ..item was closed..
-///             case   FL_TREE_REASON_SELECTED: ..item was selected..
-///             case FL_TREE_REASON_RESELECTED: ..item was reselected (double-clicked, etc)..
-///             case FL_TREE_REASON_DESELECTED: ..item was deselected..
-///         }
-///     }
-/// \endcode
-///
-/// \see item_reselect_mode() -- enables FL_TREE_REASON_RESELECTED events
-///
-Fl_Tree_Reason Fl_Tree::callback_reason() const {
-  return(_callback_reason);
-}
-
-/**
- * Read a preferences database into the tree widget.
- * A preferences database is a hierarchical collection of data which can be
- * directly loaded into the tree view for inspection.
- * \param[in] prefs the Fl_Preferences database
- */
-void Fl_Tree::load(Fl_Preferences &prefs) {
-  int i, j, n, pn = (int) strlen(prefs.path());
-  char *p;
-  const char *path = prefs.path();
-  if (strcmp(path, ".")==0)
-    path += 1; // root path is empty
-  else
-    path += 2; // child path starts with "./"
-  n = prefs.groups();
-  for (i=0; i<n; i++) {
-    Fl_Preferences prefsChild(prefs, i);
-    add(prefsChild.path()+2); // children always start with "./"
-    load(prefsChild);
-  }
-  n = prefs.entries();
-  for (i=0; i<n; i++) {
-    // We must remove all fwd slashes in the key and value strings. Replace with backslash.
-    char *key = strdup(prefs.entry(i));
-    int kn = (int) strlen(key);
-    for (j=0; j<kn; j++) {
-      if (key[j]=='/') key[j]='\\'; 
-    }
-    char *val;  prefs.get(key, val, "");
-    int vn = (int) strlen(val);
-    for (j=0; j<vn; j++) {
-      if (val[j]=='/') val[j]='\\'; 
-    }
-    if (vn<40) {
-      size_t sze = pn + strlen(key) + vn;
-      p = (char*)malloc(sze+5);
-      sprintf(p, "%s/%s = %s", path, key, val);
-    } else {
-      size_t sze = pn + strlen(key) + 40;
-      p = (char*)malloc(sze+5);
-      sprintf(p, "%s/%s = %.40s...", path, key, val);
-    }
-    add(p[0]=='/'?p+1:p);
-    free(p);
-    free(val);
-    free(key);
-  }
-}
-
-/// Ensure the scrollbars are the last children
-void Fl_Tree::fix_scrollbar_order() {
-  Fl_Widget** a = (Fl_Widget**)array();
-  if (a[children()-1] != _vscroll) {
-    int i,j;
-#if FLTK_ABI_VERSION >= 10303
-    for (i = j = 0; j < children(); j++) {
-      if (a[j] != _vscroll && a[j] != _hscroll ) a[i++] = a[j];
-    }
-    a[i++] = _hscroll;
-    a[i++] = _vscroll;
-#else
-    for (i = j = 0; j < children(); j++) {
-      if (a[j] != _vscroll) a[i++] = a[j];
-    }
-    a[i++] = _vscroll;
-#endif
-  }
-}
-
-/// Schedule tree to recalc the entire tree size.
-/// \note Must be using FLTK ABI 1.3.3 or higher for this to be effective.
-///
-void Fl_Tree::recalc_tree() {
-#if FLTK_ABI_VERSION >= 10303
-  _tree_w = _tree_h = -1;
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tree_Item.cxx
+++ /dev/null
@@ -1,1850 +1,0 @@
-//
-// "$Id$"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Tree_Item.H>
-#include <FL/Fl_Tree_Prefs.H>
-#include <FL/Fl_Tree.H>
-
-//////////////////////
-// Fl_Tree_Item.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-/////////////////////////////////////////////////////////////////////////// 80 /
-
-// Was the last event inside the specified xywh?
-static int event_inside(const int xywh[4]) {
-  return(Fl::event_inside(xywh[0],xywh[1],xywh[2],xywh[3]));
-}
-
-/// Constructor.
-/// Makes a new instance of Fl_Tree_Item using defaults from \p 'prefs'.
-#if FLTK_ABI_VERSION >= 10303
-/// \deprecated in 1.3.3 ABI -- you must use Fl_Tree_Item(Fl_Tree*) for proper horizontal scrollbar behavior.
-#endif
-///
-Fl_Tree_Item::Fl_Tree_Item(const Fl_Tree_Prefs &prefs) {
-  _Init(prefs, 0);
-}
-
-// Initialize the tree item
-//    Used by constructors
-//
-void Fl_Tree_Item::_Init(const Fl_Tree_Prefs &prefs, Fl_Tree *tree) {
-#if FLTK_ABI_VERSION >= 10303
-  _tree         = tree;
-#endif
-  _label        = 0;
-  _labelfont    = prefs.labelfont();
-  _labelsize    = prefs.labelsize();
-  _labelfgcolor = prefs.labelfgcolor();
-  _labelbgcolor = prefs.labelbgcolor();
-  _widget       = 0;
-#if FLTK_ABI_VERSION >= 10301
-  _flags        = OPEN|VISIBLE|ACTIVE;
-#else /*FLTK_ABI_VERSION*/
-  _open         = 1;
-  _visible      = 1;
-  _active       = 1;
-  _selected     = 0;
-#endif /*FLTK_ABI_VERSION*/
-  _xywh[0]      = 0;
-  _xywh[1]      = 0;
-  _xywh[2]      = 0;
-  _xywh[3]      = 0;
-  _collapse_xywh[0] = 0;
-  _collapse_xywh[1] = 0;
-  _collapse_xywh[2] = 0;
-  _collapse_xywh[3] = 0;
-  _label_xywh[0]    = 0;
-  _label_xywh[1]    = 0;
-  _label_xywh[2]    = 0;
-  _label_xywh[3]    = 0;
-  _usericon         = 0;
-#if FLTK_ABI_VERSION >= 10304
-  _userdeicon       = 0;
-#endif
-  _userdata         = 0;
-  _parent           = 0;
-#if FLTK_ABI_VERSION >= 10303
-  _children.manage_item_destroy(1);	// let array's dtor manage destroying Fl_Tree_Items
-#endif
-#if FLTK_ABI_VERSION >= 10301
-  _prev_sibling     = 0;
-  _next_sibling     = 0;
-#endif /*FLTK_ABI_VERSION*/
-}
-
-#if FLTK_ABI_VERSION >= 10303
-/// Constructor.
-/// Makes a new instance of Fl_Tree_Item for \p 'tree'.
-///
-/// This must be used instead of the older, deprecated Fl_Tree_Item(Fl_Tree_Prefs)
-/// constructor for proper horizontal scrollbar calculation.
-///
-/// \version 1.3.3 ABI feature
-///
-Fl_Tree_Item::Fl_Tree_Item(Fl_Tree *tree) {
-  _Init(tree->_prefs, tree);
-}
-#endif
-
-// DTOR
-Fl_Tree_Item::~Fl_Tree_Item() {
-  if ( _label ) { 
-    free((void*)_label);
-    _label = 0;
-  }
-  _widget = 0;			// Fl_Group will handle destruction
-  _usericon = 0;		// user handled allocation
-#if FLTK_ABI_VERSION >= 10304
-  _userdeicon = 0;		// user handled allocation
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  // focus item? set to null
-  if ( _tree && this == _tree->_item_focus )
-    { _tree->_item_focus = 0; }
-#endif
-  //_children.clear();		// array's destructor handles itself
-}
-
-/// Copy constructor.
-Fl_Tree_Item::Fl_Tree_Item(const Fl_Tree_Item *o) {
-#if FLTK_ABI_VERSION >= 10303
-  _tree             = o->_tree;
-#endif
-  _label        = o->label() ? strdup(o->label()) : 0;
-  _labelfont    = o->labelfont();
-  _labelsize    = o->labelsize();
-  _labelfgcolor = o->labelfgcolor();
-  _labelbgcolor = o->labelbgcolor();
-  _widget       = o->widget();
-#if FLTK_ABI_VERSION >= 10301
-  _flags        = o->_flags;
-#else /*FLTK_ABI_VERSION*/
-  _open         = o->_open;
-  _visible      = o->_visible;
-  _active       = o->_active;
-  _selected     = o->_selected;
-#endif /*FLTK_ABI_VERSION*/
-  _xywh[0]      = o->_xywh[0];
-  _xywh[1]      = o->_xywh[1];
-  _xywh[2]      = o->_xywh[2];
-  _xywh[3]      = o->_xywh[3];
-  _collapse_xywh[0] = o->_collapse_xywh[0];
-  _collapse_xywh[1] = o->_collapse_xywh[1];
-  _collapse_xywh[2] = o->_collapse_xywh[2];
-  _collapse_xywh[3] = o->_collapse_xywh[3];
-  _label_xywh[0]    = o->_label_xywh[0];
-  _label_xywh[1]    = o->_label_xywh[1];
-  _label_xywh[2]    = o->_label_xywh[2];
-  _label_xywh[3]    = o->_label_xywh[3];
-  _usericon         = o->usericon();
-  _userdata         = o->user_data();
-  _parent           = o->_parent;
-#if FLTK_ABI_VERSION >= 10301
-  _prev_sibling     = 0;		// do not copy ptrs! use update_prev_next()
-  _next_sibling     = 0;		// do not copy ptrs! use update_prev_next()
-#endif /*FLTK_ABI_VERSION*/
-}
-
-/// Print the tree as 'ascii art' to stdout.
-/// Used mainly for debugging.
-///
-void Fl_Tree_Item::show_self(const char *indent) const {
-  const char *thelabel = label() ? label() : "(NULL)";
-#if FLTK_ABI_VERSION >= 10301
-  printf("%s-%s (%d children, this=%p, parent=%p, prev=%p, next=%p, depth=%d)\n",
-	 indent,thelabel,children(),(void*)this, (void*)_parent,
-	 _prev_sibling, _next_sibling, depth());
-#else /*FLTK_ABI_VERSION*/
-  printf("%s-%s (%d children, this=%p, parent=%p depth=%d)\n",
-	 indent,thelabel,children(),(void*)this, (void*)_parent, depth());
-#endif /*FLTK_ABI_VERSION*/
-  if ( children() ) {
-    char *i2 = new char [strlen(indent)+2];
-    strcpy(i2, indent);
-    strcat(i2, " |");
-    for ( int t=0; t<children(); t++ ) {
-      child(t)->show_self(i2);
-    }
-    delete[] i2;
-  }
-  fflush(stdout);
-}
-
-/// Set the label to \p 'name'.
-/// Makes and manages an internal copy of \p 'name'.
-///
-void Fl_Tree_Item::label(const char *name) {
-  if ( _label ) { free((void*)_label); _label = 0; }
-  _label = name ? strdup(name) : 0;
-  recalc_tree();		// may change label geometry
-}
-
-/// Return the label.
-const char *Fl_Tree_Item::label() const {
-  return(_label);
-}
-
-/// Return const child item for the specified 'index'.
-const Fl_Tree_Item *Fl_Tree_Item::child(int index) const {
-  return(_children[index]);
-}
-
-/// Clear all the children for this item.
-void Fl_Tree_Item::clear_children() {
-  _children.clear();
-  recalc_tree();		// may change tree geometry
-}
-
-/// Return the index of the immediate child of this item
-/// that has the label \p 'name'.
-///
-/// \returns index of found item, or -1 if not found.
-/// \version 1.3.0 release
-///
-int Fl_Tree_Item::find_child(const char *name) {
-  if ( name ) {
-    for ( int t=0; t<children(); t++ )
-      if ( child(t)->label() )
-        if ( strcmp(child(t)->label(), name) == 0 )
-          return(t);
-  }
-  return(-1);
-}
-
-/// Return the /immediate/ child of current item
-/// that has the label \p 'name'.
-///
-/// \returns const found item, or 0 if not found.
-/// \version 1.3.3
-///
-const Fl_Tree_Item* Fl_Tree_Item::find_child_item(const char *name) const {
-  if ( name )
-    for ( int t=0; t<children(); t++ )
-      if ( child(t)->label() )
-        if ( strcmp(child(t)->label(), name) == 0 )
-          return(child(t));
-  return(0);
-}
-
-/// Non-const version of Fl_Tree_Item::find_child_item(const char *name) const.
-Fl_Tree_Item* Fl_Tree_Item::find_child_item(const char *name) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree_Item &>(*this).find_child_item(name)));
-}
-
-/// Find child item by descending array \p 'arr' of names.
-/// Does not include self in search.
-/// Only Fl_Tree should need this method.
-///
-/// \returns item, or 0 if not found
-/// \version 1.3.0 release
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_child_item(char **arr) const {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t)->label() ) {
-      if ( strcmp(child(t)->label(), *arr) == 0 ) {	// match?
-        if ( *(arr+1) ) {				// more in arr? descend
-          return(_children[t]->find_child_item(arr+1));
-        } else {					// end of arr? done
-          return(_children[t]);
-        }
-      }
-    }
-  }
-  return(0);
-}
-
-/// Non-const version of Fl_Tree_Item::find_child_item(char **arr) const.
-Fl_Tree_Item *Fl_Tree_Item::find_child_item(char **arr) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree_Item &>(*this).find_child_item(arr)));
-}
-
-/// Find item by descending array of \p 'names'.
-/// Includes self in search.
-/// Only Fl_Tree should need this method. Use Fl_Tree::find_item() instead.
-///
-/// \returns const item, or 0 if not found
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_item(char **names) const {
-  if ( ! *names ) return(0);
-  if ( label() && strcmp(label(), *names) == 0 ) {	// match self?
-    ++names;						// skip self
-    if ( *names == 0 ) return(this);			// end of names, found ourself
-  }
-  if ( children() ) {					// check children..
-    return(find_child_item(names));
-  }
-  return(0);
-}
-
-/// Non-const version of Fl_Tree_Item::find_item(char **names) const.
-Fl_Tree_Item *Fl_Tree_Item::find_item(char **names) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree_Item &>(*this).find_item(names)));
-}
-
-/// Find the index number for the specified \p 'item'
-/// in the current item's list of children.
-///
-/// \returns the index, or -1 if not found.
-///
-int Fl_Tree_Item::find_child(Fl_Tree_Item *item) {
-  for ( int t=0; t<children(); t++ )
-    if ( item == child(t) )
-      return(t);
-  return(-1);
-}
-
-/// Add a new child to this item with the name \p 'new_label'
-/// and defaults from \p 'prefs'.
-/// An internally managed copy is made of the label string.
-/// Adds the item based on the value of prefs.sortorder().
-/// \returns the item added
-/// \version 1.3.0 release
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs,
-				const char *new_label) {
-  return(add(prefs, new_label, (Fl_Tree_Item*)0));
-}
-
-/// Add \p 'item' as immediate child with \p 'new_label'
-/// and defaults from \p 'prefs'.
-/// If \p 'item' is NULL, a new item is created.
-/// An internally managed copy is made of the label string.
-/// Adds the item based on the value of prefs.sortorder().
-/// \returns the item added
-/// \version 1.3.3
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs,
-			        const char *new_label,
-				Fl_Tree_Item *item) {
-#if FLTK_ABI_VERSION >= 10303
-  if ( !item )
-    { item = new Fl_Tree_Item(_tree); item->label(new_label); }
-#else
-  if ( !item )
-    { item = new Fl_Tree_Item(prefs); item->label(new_label); }
-#endif
-  recalc_tree();		// may change tree geometry
-  item->_parent = this;
-  switch ( prefs.sortorder() ) {
-    case FL_TREE_SORT_NONE: {
-      _children.add(item);
-      return(item);
-    }
-    case FL_TREE_SORT_ASCENDING: {
-      for ( int t=0; t<_children.total(); t++ ) {
-        Fl_Tree_Item *c = _children[t];
-        if ( c->label() && strcmp(c->label(), new_label) > 0 ) {
-          _children.insert(t, item);
-          return(item);
-        }
-      }
-      _children.add(item);
-      return(item);
-    }
-    case FL_TREE_SORT_DESCENDING: {
-      for ( int t=0; t<_children.total(); t++ ) {
-        Fl_Tree_Item *c = _children[t];
-        if ( c->label() && strcmp(c->label(), new_label) < 0 ) {
-          _children.insert(t, item);
-          return(item);
-        }
-      }
-      _children.add(item);
-      return(item);
-    }
-  }
-  return(item);
-}
-
-/// Descend into the path specified by \p 'arr', and add a new child there.
-/// Should be used only by Fl_Tree's internals.
-/// Adds the item based on the value of prefs.sortorder().
-/// \returns the item added.
-/// \version 1.3.0 release
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs, char **arr) {
-  return add(prefs, arr, 0);
-}
-
-/// Descend into path specified by \p 'arr' and add \p 'newitem' there.
-/// Should be used only by Fl_Tree's internals.
-/// If item is NULL, a new item is created.
-/// Adds the item based on the value of prefs.sortorder().
-/// \returns the item added.
-/// \version 1.3.3 ABI feature
-///
-Fl_Tree_Item *Fl_Tree_Item::add(const Fl_Tree_Prefs &prefs,
-			        char **arr,
-				Fl_Tree_Item *newitem) {
-  if ( !*arr ) return 0;
-  // See if we can find an existing child with name requested.
-  Fl_Tree_Item *child = find_child_item(*arr);
-  if ( child ) {		// Child found?
-    if ( *(arr+1) == 0 ) {	// ..and at end of path?
-      if ( !newitem ) {		// ..and no item specified?
-	return 0;		// ..error: child exists already
-      } else {
-        // Child found, end of path, item specified
-	return child->add(prefs, newitem->label(), newitem);
-      }
-    }
-    // Child found: more path elements to go or item specified?
-    // Descend into child to handle add..
-    return child->add(prefs, arr+1, newitem);	// recurse
-  }
-  // No child found, see if we reached end of path.
-  //	If so, add as an immediate child, done
-  if ( *(arr+1) == 0 )			// end of path?
-    return add(prefs, *arr, newitem);	// add as immediate child
-
-  // No child found, but more to path?
-  // 	If so, create new child to handle add()
-  Fl_Tree_Item *newchild;
-  return (newchild=add(prefs, *arr))	      // create new immediate child
-         ? newchild->add(prefs,arr+1,newitem) // it worked? recurse to add
-	 : 0;				      // failed? error
-}
-
-/**
-  Insert a new item named \p 'new_label' into current item's
-  children at a specified position \p 'pos'.
-
-  If \p pos is out of range the new item is
-   - prepended if \p pos \< 0 or
-   - appended  if \p pos \> item->children().
-
-  \returns the new item inserted
-  \see Fl_Tree::insert()
-*/
-Fl_Tree_Item *Fl_Tree_Item::insert(const Fl_Tree_Prefs &prefs, const char *new_label, int pos) {
-#if FLTK_ABI_VERSION >= 10303
-  Fl_Tree_Item *item = new Fl_Tree_Item(_tree);
-#else
-  Fl_Tree_Item *item = new Fl_Tree_Item(prefs);
-#endif
-  item->label(new_label);
-  item->_parent = this;
-  _children.insert(pos, item);
-  recalc_tree();		// may change tree geometry
-  return(item);
-}
-
-/// Insert a new item named \p 'new_label' above this item.
-/// \returns the new item inserted, or 0 if an error occurred.
-///
-Fl_Tree_Item *Fl_Tree_Item::insert_above(const Fl_Tree_Prefs &prefs, const char *new_label) {
-  Fl_Tree_Item *p = _parent;
-  if ( ! p ) return(0);
-  // Walk our parent's children to find ourself
-  for ( int t=0; t<p->children(); t++ ) {
-    Fl_Tree_Item *c = p->child(t);
-    if ( this == c ) {
-      return(p->insert(prefs, new_label, t));
-    }
-  }
-  return(0);
-}
-
-/// Deparent child at index position \p 'pos'.
-/// This creates an "orphaned" item that is still allocated,
-/// but has no parent or siblings. Normally the caller would
-/// want to immediately reparent the orphan elsewhere.
-///
-/// A successfully orphaned item will have its parent()
-/// and prev_sibling()/next_sibling() set to NULL.
-///
-/// \returns
-///     - pointer to orphaned item on success
-///     - NULL on error (could not deparent the item)
-///
-Fl_Tree_Item* Fl_Tree_Item::deparent(int pos) {
-  Fl_Tree_Item *orphan = _children[pos];
-  if ( _children.deparent(pos) < 0 ) return NULL;
-  return orphan;
-}
-
-/// Reparent specified item as a child of ourself at position \p 'pos'.
-/// Typically 'newchild' was recently orphaned with deparent().
-///
-/// \returns
-///    -  0: on success
-///    - -1: on error (e.g. if \p 'pos' out of range) with no changes made.
-///
-int Fl_Tree_Item::reparent(Fl_Tree_Item *newchild, int pos) {
-  int ret;
-  if ( (ret = _children.reparent(newchild, this, pos)) < 0 ) return ret;
-  newchild->parent(this);		// take custody
-  return 0;
-}
-
-/// Move the item 'from' to sibling position of 'to'.
-///
-/// \returns
-///    -  0: Success
-///    - -1: range error (e.g. if \p 'to' or \p 'from' out of range).
-///    - (Other return values reserved for future use)
-///
-int Fl_Tree_Item::move(int to, int from) {
-  return _children.move(to, from);
-}
-
-/// Move the current item above/below/into the specified 'item',
-/// where \p 'op' determines the type of move:
-///
-///    - 0: move above \p 'item' (\p 'pos' ignored)
-///    - 1: move below \p 'item' (\p 'pos' ignored)
-///    - 2: move into  \p 'item' as a child (at optional position \p 'pos')
-///
-/// \returns 0 on success. a negative number on error:
-///     - -1: one of the items has no parent
-///     - -2: item's index could not be determined
-///     - -3: bad 'op'
-///     - -4: index range error
-///     - -5: could not deparent
-///     - -6: could not reparent at \p 'pos'
-///     - (Other return values reserved for future use.)
-///
-int Fl_Tree_Item::move(Fl_Tree_Item *item, int op, int pos) {
-  Fl_Tree_Item *from_parent, *to_parent;
-  int from, to;
-  switch (op) {
-    case 0:	// "above"
-      from_parent = this->parent();
-      to_parent   = item->parent();
-      from        = from_parent->find_child(this);
-      to          = to_parent->find_child(item);
-      break;
-    case 1:	// "below"
-      from_parent = this->parent();
-      to_parent   = item->parent();
-      from        = from_parent->find_child(this);
-      to          = to_parent->find_child(item);
-      break;
-    case 2:	// "into"
-      from_parent = this->parent();
-      to_parent   = item;
-      from        = from_parent->find_child(this);
-      to          = pos;
-      break;
-    default:
-      return -3;
-  }
-  if ( !from_parent || !to_parent ) return -1;
-  if ( from < 0 || to < 0 ) return -2;
-  if ( from_parent == to_parent ) {		// same parent?
-    switch (op) {				// 'to' offsets due to scroll
-      case 0: if ( from < to && to > 0 ) --to; break;
-      case 1: if ( from > to && to < to_parent->children() ) ++to; break;
-    }
-    if ( from_parent->move(to, from) < 0 )	// simple move among siblings
-      return -4;
-  } else {					// different parent?
-    if ( to > to_parent->children() )		// try to prevent a reparent() error
-      return -4;
-    if ( from_parent->deparent(from) == NULL )	// deparent self from current parent
-      return -5;
-    if ( to_parent->reparent(this, to) < 0 ) {	// reparent self to new parent at position 'to'
-      to_parent->reparent(this, 0);		// failed? shouldn't happen, reparent at 0
-      return -6;
-    }
-  }
-  return 0;
-}
-
-/// Move the current item above the specified 'item'.
-/// This is the equivalent of calling move(item,0,0).
-///
-/// \returns 0 on success.<br>
-///          On error returns a negative value;
-///          see move(Fl_Tree_Item*,int,int) for possible error codes.
-///
-int Fl_Tree_Item::move_above(Fl_Tree_Item *item) {
-  return move(item, 0, 0);
-}
-
-/// Move the current item below the specified 'item'.
-/// This is the equivalent of calling move(item,1,0).
-///
-/// \returns 0 on success.<br>
-///          On error returns a negative value;
-///          see move(Fl_Tree_Item*,int,int) for possible error codes.
-///
-int Fl_Tree_Item::move_below(Fl_Tree_Item *item) {
-  return move(item, 1, 0);
-}
-
-/// Parent the current item as a child of the specified \p 'item'.
-/// This is the equivalent of calling move(item,2,pos).
-///
-/// \returns 0 on success.<br>
-///          On error returns a negative value;
-///          see move(Fl_Tree_Item*,int,int) for possible error codes.
-///
-int Fl_Tree_Item::move_into(Fl_Tree_Item *item, int pos) {
-  return move(item, 2, pos);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-/// Return the parent tree's prefs.
-/// \returns a reference to the parent tree's Fl_Tree_Prefs
-/// \version 1.3.3 ABI feature
-///
-const Fl_Tree_Prefs& Fl_Tree_Item::prefs() const {
-  return(_tree->_prefs);
-}
-
-/// Replace the current item with a new item.
-///
-/// The current item is destroyed if successful.
-/// No checks are made to see if an item with the same name exists.
-///
-/// This method can be used to, for example, install 'custom' items
-/// into the tree derived from Fl_Tree_Item; see draw_item_content().
-///
-/// \param[in] newitem The new item to replace the current item
-/// \returns newitem on success, NULL if could not be replaced.
-/// \see Fl_Tree_Item::draw_item_content(), Fl_Tree::root(Fl_Tree_Item*)
-/// \version 1.3.3 ABI feature
-///
-Fl_Tree_Item *Fl_Tree_Item::replace(Fl_Tree_Item *newitem) {
-  Fl_Tree_Item *p = parent();
-  if ( !p ) {			// no parent? then we're the tree's root..
-    _tree->root(newitem);	// ..tell tree to replace root
-    return newitem;
-  }
-  // has parent? ask parent to replace us
-  return p->replace_child(this, newitem);
-}
-
-/// Replace existing child \p 'olditem' with \p 'newitem'.
-///
-/// The \p 'olditem' is destroyed if successful.
-/// Can be used to put custom items (derived from Fl_Tree_Item) into the tree.
-/// No checks are made to see if an item with the same name exists.
-///
-/// \param[in] olditem The item to be found and replaced
-/// \param[in] newitem The new item to take the place of \p 'olditem'
-/// \returns newitem on success and \p 'olditem' is destroyed.
-///          NULL on error if \p 'olditem' was not found
-///          as an immediate child.
-/// \see replace(), Fl_Tree_Item::draw()
-/// \version 1.3.3 ABI feature
-///
-Fl_Tree_Item *Fl_Tree_Item::replace_child(Fl_Tree_Item *olditem,
-				          Fl_Tree_Item *newitem) {
-  int pos = find_child(olditem);	// find our index for olditem
-  if ( pos == -1 ) return(NULL);
-  newitem->_parent = this;
-  // replace in array (handles stitching neighboring items)
-  _children.replace(pos, newitem);
-  recalc_tree();			// newitem may have changed tree geometry
-  return newitem;
-}
-#endif
-
-/// Remove \p 'item' from the current item's children.
-/// \returns 0 if removed, -1 if item not an immediate child.
-///
-int Fl_Tree_Item::remove_child(Fl_Tree_Item *item) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t) == item ) {
-      item->clear_children();
-      _children.remove(t);
-      recalc_tree();		// may change tree geometry
-      return(0);
-    }
-  }
-  return(-1);
-}
-
-/// Remove immediate child (and its children) by its label \p 'name'.
-/// If more than one item matches \p 'name', only the first
-/// matching item is removed.
-/// \param[in] name The label name of the immediate child to remove
-/// \returns 0 if removed, -1 if not found.
-/// \version 1.3.3
-///
-int Fl_Tree_Item::remove_child(const char *name) {
-  for ( int t=0; t<children(); t++ ) {
-    if ( child(t)->label() ) {
-      if ( strcmp(child(t)->label(), name) == 0 ) {
-        _children.remove(t);
-	recalc_tree();		// may change tree geometry
-        return(0);
-      }
-    }
-  }
-  return(-1);
-}
-
-/// Swap two of our children, given two child index values \p 'ax' and \p 'bx'.
-/// Use e.g. for sorting.<br>
-/// This method is FAST, and does not involve lookups.<br>
-/// No range checking is done on either index value.
-/// \param[in] ax,bx the index of the items to swap
-///
-void Fl_Tree_Item::swap_children(int ax, int bx) {
-  _children.swap(ax, bx);
-}
-
-/// Swap two of our immediate children, given item pointers.
-/// Use e.g. for sorting. 
-///
-/// This method is SLOW because it involves linear lookups.<br>
-/// For speed, use swap_children(int,int) instead.
-///
-/// \param[in] a,b The item ptrs of the two items to swap.
-///                Both must be immediate children of the current item.
-/// \returns
-///    -    0 : OK
-///    -   -1 : failed: item \p 'a' or \p 'b' is not our child.
-///
-int Fl_Tree_Item::swap_children(Fl_Tree_Item *a, Fl_Tree_Item *b) {
-  int ax = -1, bx = -1;
-  for ( int t=0; t<children(); t++ ) {	// find index for a and b
-    if ( _children[t] == a ) { ax = t; if ( bx != -1 ) break; else continue; }
-    if ( _children[t] == b ) { bx = t; if ( ax != -1 ) break; else continue; }
-  }
-  if ( ax == -1 || bx == -1 ) return(-1);	// not found? fail
-  swap_children(ax,bx);
-  return(0);
-}
-
-/// Internal: Horizontal connector line based on preference settings.
-/// \param[in] x1 The left hand X position of the horizontal connector
-/// \param[in] x2 The right hand X position of the horizontal connector
-/// \param[in] y  The vertical position of the horizontal connector
-/// \param[in] prefs The Fl_Tree prefs
-///
-void Fl_Tree_Item::draw_horizontal_connector(int x1, int x2, int y, const Fl_Tree_Prefs &prefs) {
-  fl_color(prefs.connectorcolor());
-  switch ( prefs.connectorstyle() ) {
-    case FL_TREE_CONNECTOR_SOLID:
-      y |= 1;				// force alignment w/dot pattern
-      fl_line(x1,y,x2,y);
-      return;
-    case FL_TREE_CONNECTOR_DOTTED: 
-    {
-      y  |= 1;				// force alignment w/dot pattern
-      x1 |= 1;
-      for ( int xx=x1; xx<=x2; xx+=2 ) {
-	fl_point(xx, y);
-      }
-      return;
-    }
-    case FL_TREE_CONNECTOR_NONE:
-      return;
-  }
-}
-
-/// Internal: Vertical connector line based on preference settings.
-/// \param[in] x     The x position of the vertical connector
-/// \param[in] y1    The top of the vertical connector
-/// \param[in] y2    The bottom of the vertical connector
-/// \param[in] prefs The Fl_Tree prefs
-///
-void Fl_Tree_Item::draw_vertical_connector(int x, int y1, int y2, const Fl_Tree_Prefs &prefs) {
-  fl_color(prefs.connectorcolor());
-  switch ( prefs.connectorstyle() ) {
-    case FL_TREE_CONNECTOR_SOLID:
-      y1 |= 1;				// force alignment w/dot pattern
-      y2 |= 1;				// force alignment w/dot pattern
-      fl_line(x,y1,x,y2);
-      return;
-    case FL_TREE_CONNECTOR_DOTTED:
-    {
-      y1 |= 1;				// force alignment w/dot pattern
-      y2 |= 1;				// force alignment w/dot pattern
-      for ( int yy=y1; yy<=y2; yy+=2 ) {
-        fl_point(x, yy);
-      }
-      return;
-    }
-    case FL_TREE_CONNECTOR_NONE:
-      return;
-  }
-}
-
-#if FLTK_ABI_VERSION >= 10303
-/// Find the item that the last event was over.
-/// If \p 'yonly' is 1, only check event's y value, don't care about x.
-/// \param[in] prefs The parent tree's Fl_Tree_Prefs
-/// \param[in] yonly -- 0: check both event's X and Y values.
-///                  -- 1: only check event's Y value, don't care about X.
-/// \returns pointer to clicked item, or NULL if none found
-/// \version 1.3.3 ABI feature
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs, int yonly) const {
-  if ( ! is_visible() ) return(0);
-  if ( is_root() && !prefs.showroot() ) {
-    // skip event check if we're root but root not being shown
-  } else {
-    // See if event is over us
-    if ( yonly ) {
-      if ( Fl::event_y() >= _xywh[1] &&
-           Fl::event_y() <= (_xywh[1]+_xywh[3]) ) {
-        return(this);
-      }
-    } else {
-      if ( event_inside(_xywh) ) {		// event within this item?
-        return(this);				// found
-      }
-    }
-  }
-  if ( is_open() ) {				// open? check children of this item
-    for ( int t=0; t<children(); t++ ) {
-      const Fl_Tree_Item *item;
-      if ( (item = _children[t]->find_clicked(prefs, yonly)) != NULL)  // recurse into child for descendents
-        return(item);						       // found?
-    }
-  }
-  return(0);
-}
-
-/// Non-const version of Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs&,int) const
-Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs, int yonly) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree_Item &>(*this).find_clicked(prefs, yonly)));
-}
-#else
-/// Find the item that the last event was over.
-/// \param[in] prefs The parent tree's Fl_Tree_Prefs
-/// \returns pointer to clicked item, or NULL if none found
-/// \version 1.3.0
-///
-const Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs) const {
-  if ( ! is_visible() ) return(0);
-  if ( is_root() && !prefs.showroot() ) {
-    // skip event check if we're root but root not being shown
-  } else {
-    // See if event is over us
-    if ( event_inside(_xywh) ) {		// event within this item?
-      return(this);				// found
-    }
-  }
-  if ( is_open() ) {				// open? check children of this item
-    for ( int t=0; t<children(); t++ ) {
-      const Fl_Tree_Item *item;
-      if ( (item = _children[t]->find_clicked(prefs)) != NULL)  // recurse into child for descendents
-        return(item);						// found?
-    }
-  }
-  return(0);
-}
-
-/// Non-const version of Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs&) const.
-Fl_Tree_Item *Fl_Tree_Item::find_clicked(const Fl_Tree_Prefs &prefs) {
-  // "Effective C++, 3rd Ed", p.23. Sola fide, Amen.
-  return(const_cast<Fl_Tree_Item*>(
-	 static_cast<const Fl_Tree_Item &>(*this).find_clicked(prefs)));
-}
-#endif
-
-static void draw_item_focus(Fl_Boxtype B, Fl_Color fg, Fl_Color bg, int X, int Y, int W, int H) {
-  if (!Fl::visible_focus()) return;
-  switch (B) {
-    case FL_DOWN_BOX:
-    case FL_DOWN_FRAME:
-    case FL_THIN_DOWN_BOX:
-    case FL_THIN_DOWN_FRAME:
-      X ++;
-      Y ++;
-    default:
-      break;
-  }
-  fl_color(fl_contrast(fg, bg));
-
-#if defined(USE_X11) || defined(__APPLE_QUARTZ__)
-  fl_line_style(FL_DOT);
-  fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
-  fl_line_style(FL_SOLID);
-#else
-  // Some platforms don't implement dotted line style, so draw
-  // every other pixel around the focus area...
-  //
-  // Also, QuickDraw (MacOS) does not support line styles specifically,
-  // and the hack we use in fl_line_style() will not draw horizontal lines
-  // on odd-numbered rows...
-  int i, xx, yy;
-
-  X += Fl::box_dx(B);
-  Y += Fl::box_dy(B);
-  W -= Fl::box_dw(B) + 2;
-  H -= Fl::box_dh(B) + 2;
-
-  for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y);
-  for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy);
-  for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H);
-  for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy);
-#endif
-}
-
-/// Return the item's 'visible' height. Takes into account the item's:
-///    - visibility (if !is_visible(), returns 0)
-///    - labelfont() height: if label() != NULL
-///    - widget() height: if widget() != NULL
-///    - openicon() height (if not NULL)
-///    - usericon() height (if not NULL)
-/// Does NOT include Fl_Tree::linespacing();
-/// \returns maximum pixel height
-///
-int Fl_Tree_Item::calc_item_height(const Fl_Tree_Prefs &prefs) const {
-  if ( ! is_visible() ) return(0);
-  int H = 0;
-  if ( _label ) {
-    fl_font(_labelfont, _labelsize);	// fl_descent() needs this :/
-    H = _labelsize + fl_descent() + 1;	// at least one pixel space below descender
-  }
-#if FLTK_ABI_VERSION >= 10301
-  if ( widget() && 
-       (prefs.item_draw_mode() & FL_TREE_ITEM_HEIGHT_FROM_WIDGET) &&
-       H < widget()->h()) {
-    H = widget()->h();
-  }
-#endif /*FLTK_ABI_VERSION*/
-  if ( has_children() && prefs.openicon() && H<prefs.openicon()->h() )
-    H = prefs.openicon()->h();
-  if ( usericon() && H<usericon()->h() )
-    H = usericon()->h();
-  return(H);
-}
-
-#if FLTK_ABI_VERSION >= 10303
-// These methods held for 1.3.3 ABI: all need 'tree()' back-reference.
-
-/// Returns the recommended foreground color used for drawing this item.
-/// \see draw_item_content()
-/// \version 1.3.3 ABI ABI
-///
-Fl_Color Fl_Tree_Item::drawfgcolor() const {
-  return is_selected() ? fl_contrast(_labelfgcolor, tree()->selection_color())
-		       : (is_active() && tree()->active_r()) ? _labelfgcolor
-				                             : fl_inactive(_labelfgcolor);
-}
-
-/// Returns the recommended background color used for drawing this item.
-/// \see draw_item_content()
-/// \version 1.3.3 ABI
-///
-Fl_Color Fl_Tree_Item::drawbgcolor() const {
-  const Fl_Color unspecified = 0xffffffff;
-  return is_selected() ? is_active() && tree()->active_r() ? tree()->selection_color() 
-				                           : fl_inactive(tree()->selection_color())
-		       : _labelbgcolor == unspecified ? tree()->color()
-						      : _labelbgcolor;
-}
-
-/// Draw the item content
-///
-/// This method can be overridden to implement custom drawing
-/// by filling the label_[xywh]() area with content.
-///
-/// A minimal example of how to override draw_item_content()
-/// and draw just a normal item's background and label ourselves:
-///
-/// \code
-/// class MyTreeItem : public Fl_Tree_Item {
-/// public:
-///     MyTreeItem() { }
-///     ~MyTreeItem() { }
-///     // DRAW OUR CUSTOM CONTENT FOR THE ITEM
-///     int draw_item_content(int render) {
-///       // Our item's dimensions + text content
-///       int X=label_x(), Y=label_y(), W=label_w(), H=label_h(); 
-///       const char *text = label() ? label() : "";
-///       // Rendering? Do any drawing that's needed
-///       if ( render ) {
-///         // Draw bg -- a filled rectangle
-///         fl_color(drawbgcolor()); fl_rectf(X,Y,W,H);
-///         // Draw label
-///         fl_font(labelfont(), labelsize());      // use item's label font/size
-///         fl_color(drawfgcolor());                // use recommended fg color
-///         fl_draw(text, X,Y,W,H, FL_ALIGN_LEFT);  // draw the item's label
-///       }
-///       // Rendered or not, we must calculate content's max X position
-///       int lw=0, lh=0;
-///       fl_measure(text, lw, lh);                 // get width of label text
-///       return X + lw;                            // return X + label width
-///    }
-/// };
-/// \endcode
-///
-/// You can draw anything you want inside draw_item_content()
-/// using any of the fl_draw.H functions, as long as it's 
-/// within the label's xywh area.
-///
-/// To add instances of your custom item to the tree, you can use:
-///
-/// \code
-///     // Example #1: using add()
-///     MyTreeItem *bart = new MyTreeItem(..);  // class derived from Fl_Tree_Item
-///     tree->add("/Simpsons/Bart", bart);      // Add item as /Simpsons/Bart
-/// \endcode
-///
-/// ..or you can insert or replace existing items:
-///
-/// \code
-///     // Example #2: using replace() 
-///     MyTreeItem *marge = new MyTreeItem(..); // class derived from Fl_Tree_Item
-///     item = tree->add("/Simpsons/Marge");    // create item
-///     item->replace(mi);                      // replace it with our own
-/// \endcode
-///
-/// \param[in] render Whether we should render content (1), or just tally
-///            the geometry (0). Fl_Tree may want only to find the widest
-///            item in the tree for scrollbar calculations.
-///
-/// \returns the right-most X coordinate, or 'xmax' of content we drew,
-///          i.e. the "scrollable" content.
-///          The tree uses the largest xmax to determine the maximum
-///          width of the tree's content (needed for e.g. computing the
-///          horizontal scrollbar's size).
-/// \version 1.3.3 ABI feature
-///
-int Fl_Tree_Item::draw_item_content(int render) {
-  Fl_Color fg = drawfgcolor();
-  Fl_Color bg = drawbgcolor();
-  const Fl_Tree_Prefs &prefs = tree()->prefs();
-  int xmax = label_x();
-  // Background for this item, only if different from tree's bg
-  if ( render && (bg != tree()->color() || is_selected()) ) {
-    if ( is_selected() ) {			// Selected? Use selectbox() style
-      fl_draw_box(prefs.selectbox(),
-      		  label_x(), label_y(), label_w(), label_h(), bg);
-    } else {					// Not Selected? use plain filled rectangle
-      fl_color(bg);
-      fl_rectf(label_x(), label_y(), label_w(), label_h());
-    }
-    if ( widget() ) widget()->damage(FL_DAMAGE_ALL);	// if there's a child widget, we just damaged it
-  }
-  // Draw label
-  if ( _label && 
-       ( !widget() || 
-	 (prefs.item_draw_mode() & FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET) ) ) {
-    if ( render ) {
-      fl_color(fg);
-      fl_font(_labelfont, _labelsize);
-    }
-    int lx = label_x()+(_label ? prefs.labelmarginleft() : 0);
-    int ly = label_y()+(label_h()/2)+(_labelsize/2)-fl_descent()/2;
-    int lw=0, lh=0;
-    fl_measure(_label, lw, lh);		// get box around text (including white space)
-    if ( render ) fl_draw(_label, lx, ly);
-    xmax = lx + lw;			// update max width of drawn item
-  }
-  return xmax;
-}
-
-/// Draw this item and its children.
-///
-/// \param[in]     X              Horizontal position for item being drawn
-/// \param[in,out] Y              Vertical position for item being drawn,
-///                               returns new position for next item
-/// \param[in]     W              Recommended width for item
-/// \param[in]     itemfocus      The tree's current focus item (if any)
-/// \param[in,out] tree_item_xmax The tree's running xmax (right-most edge so far).
-///                               Mainly used by parent tree when render==0 to
-///                               calculate tree's max width.
-/// \param[in]     lastchild      Is this item the last child in a subtree?
-/// \param[in]     render         Whether or not to render the item:
-///                               0: no rendering, just calculate size w/out drawing.
-///                               1: render item as well as size calc
-///
-/// \version 1.3.3 ABI feature: modified parameters
-///
-void Fl_Tree_Item::draw(int X, int &Y, int W, Fl_Tree_Item *itemfocus,
-			int &tree_item_xmax, int lastchild, int render) {
-  Fl_Tree_Prefs &prefs = _tree->_prefs;
-  if ( !is_visible() ) return; 
-  int tree_top = tree()->_tiy;
-  int tree_bot = tree_top + tree()->_tih;
-  int H = calc_item_height(prefs);	// height of item
-  int H2 = H + prefs.linespacing();	// height of item with line spacing
-
-  // Update the xywh of this item
-  _xywh[0] = X;
-  _xywh[1] = Y;
-  _xywh[2] = W;
-  _xywh[3] = H;
-
-  // Determine collapse icon's xywh
-  //   Note: calculate collapse icon's xywh for possible mouse click detection.
-  //   We don't care about items clipped off the viewport; they won't get mouse events.
-  //
-  int item_y_center = Y+(H/2);
-  _collapse_xywh[2] = prefs.openicon()->w();
-  int &icon_w = _collapse_xywh[2];
-  _collapse_xywh[0] = X + (icon_w + prefs.connectorwidth())/2 - 3;
-  int &icon_x = _collapse_xywh[0];
-  _collapse_xywh[1] = item_y_center - (prefs.openicon()->h()/2);
-  int &icon_y = _collapse_xywh[1];
-  _collapse_xywh[3] = prefs.openicon()->h();
-
-  // Horizontal connector values
-  //   Must calculate these even if(clipped) because 'draw children' code (below)
-  //   needs hconn_x_center value. (Otherwise, these calculations could be 'clipped')
-  //
-  int hconn_x  = X+icon_w/2-1;
-  int hconn_x2 = hconn_x + prefs.connectorwidth();
-  int hconn_x_center = X + icon_w + ((hconn_x2 - (X + icon_w)) / 2);
-  int cw1 = icon_w+prefs.connectorwidth()/2, cw2 = prefs.connectorwidth();
-  int conn_w = cw1>cw2 ? cw1 : cw2;
-
-  // Usericon position
-  int uicon_x = X+(icon_w/2-1+conn_w) + ( (usericon() || prefs.usericon())
-  					  ? prefs.usericonmarginleft() : 0);
-  int uicon_w = usericon() ? usericon()->w()
-                           : prefs.usericon() ? prefs.usericon()->w() : 0;
-
-  // Label xywh
-  _label_xywh[0] = uicon_x + uicon_w + prefs.labelmarginleft();
-  _label_xywh[1] = Y;
-  _label_xywh[2] = tree()->_tix + tree()->_tiw - _label_xywh[0];
-  _label_xywh[3] = H;
-
-  // Begin calc of this item's max width..
-  //     It might not even be visible, so start at zero.
-  //
-  int xmax = 0;
-
-  // Recalc widget position
-  //   Do this whether clipped or not, so that when scrolled,
-  //   the widgets move to appropriate 'offscreen' positions
-  //   (so that they don't get mouse events, etc)
-  //
-  if ( widget() ) {
-    int wx = uicon_x + uicon_w + (_label ? prefs.labelmarginleft() : 0);
-    int wy = label_y();
-    int ww = widget()->w();		// use widget's width
-    int wh = (prefs.item_draw_mode() & FL_TREE_ITEM_HEIGHT_FROM_WIDGET)
-             ? widget()->h() : H;
-    if ( _label && 
-         (prefs.item_draw_mode() & FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET) ) {
-      fl_font(_labelfont, _labelsize);	// fldescent() needs this
-      int lw=0, lh=0;
-      fl_measure(_label,lw,lh);		// get box around text (including white space)
-      wx += (lw + prefs.widgetmarginleft());
-    }
-    if ( widget()->x() != wx || widget()->y() != wy ||
-	 widget()->w() != ww || widget()->h() != wh ) {
-      widget()->resize(wx,wy,ww,wh);		// we'll handle redraw below
-    }
-  }
-  char clipped = ((Y+H) < tree_top) || (Y>tree_bot) ? 1 : 0;
-  if (!render) clipped = 0;			// NOT rendering? Then don't clip, so we calc unclipped items
-#if FLTK_ABI_VERSION >= 10304
-  char active = (is_active() && tree()->active_r()) ? 1 : 0;
-#endif
-  char drawthis = ( is_root() && prefs.showroot() == 0 ) ? 0 : 1;
-  if ( !clipped ) {
-    Fl_Color fg = drawfgcolor();
-    Fl_Color bg = drawbgcolor();
-    // See if we should draw this item
-    //    If this item is root, and showroot() is disabled, don't draw.
-    //    'clipped' is an optimization to prevent drawing anything offscreen.
-    //
-    if ( drawthis ) {						// draw this item at all?
-      if ( (tree()->damage() & ~FL_DAMAGE_CHILD) || !render ) {	// non-child damage?
-	// Draw connectors
-	if ( render && prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
-	  // Horiz connector between center of icon and text
-	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
-	  // Small vertical line down to children
-	  if ( has_children() && is_open() )
-	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
-	  // Connectors for last child
-	  if ( !is_root() ) {
-	    if ( lastchild ) draw_vertical_connector(hconn_x, Y, item_y_center, prefs);
-	    else             draw_vertical_connector(hconn_x, Y, Y+H2, prefs);
-	  }
-	}
-	// Draw collapse icon
-	if ( render && has_children() && prefs.showcollapse() ) {
-	  // Draw icon image
-#if FLTK_ABI_VERSION >= 10304
-	  if ( is_open() ) {
-	    if ( active ) prefs.closeicon()->draw(icon_x,icon_y);
-	    else          prefs.closedeicon()->draw(icon_x,icon_y);
-	  } else {
-	    if ( active ) prefs.openicon()->draw(icon_x,icon_y);
-	    else          prefs.opendeicon()->draw(icon_x,icon_y);
-	  }
-#else
-	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
-	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
-	  }
-#endif
-	}
-	// Draw user icon (if any)
-#if FLTK_ABI_VERSION >= 10304
-	if ( render && usericon() ) {
-	  // Item has user icon? Use it
-	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  if ( active ) usericon()->draw(uicon_x,uicon_y);
-	  else if ( userdeicon() ) userdeicon()->draw(uicon_x,uicon_y);
-	} else if ( render && prefs.usericon() ) {
-	  // Prefs has user icon? Use it
-	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  if ( active ) prefs.usericon()->draw(uicon_x,uicon_y);
-	  else if ( prefs.userdeicon() ) prefs.userdeicon()->draw(uicon_x,uicon_y);
-	}
-#else
-	if ( render && usericon() ) {
-	  // Item has user icon? Use it
-	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  usericon()->draw(uicon_x,uicon_y);
-	} else if ( render && prefs.usericon() ) {
-	  // Prefs has user icon? Use it
-	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  prefs.usericon()->draw(uicon_x,uicon_y);
-	}
-#endif
-	// Draw item's content
-	xmax = draw_item_content(render);
-      }			// end non-child damage
-      // Draw child FLTK widget?
-      if ( widget() ) {
-        if (render)
-	  tree()->draw_child(*widget());	// let group handle drawing child
-	if ( widget()->label() && render )
-	  tree()->draw_outside_label(*widget());// label too
-        xmax = widget()->x() + widget()->w();	// update max width of widget
-      }
-      // Draw focus box around item's bg last
-      if ( render &&
-           this == itemfocus &&
-           Fl::visible_focus() && 
-	   Fl::focus() == tree() &&
-	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,label_x()+1,label_y()+1,label_w()-1,label_h()-1);
-      }
-    }			// end drawthis
-  }			// end clipped
-  if ( drawthis ) Y += H2;					// adjust Y (even if clipped)
-  // Manage tree_item_xmax
-  if ( xmax > tree_item_xmax )
-    tree_item_xmax = xmax;
-  // Draw child items (if any)
-  if ( has_children() && is_open() ) {
-    int child_x = drawthis ? (hconn_x_center - (icon_w/2) + 1)	// offset children to right,
-                           : X;					// unless didn't drawthis
-    int child_w = W - (child_x-X);
-    int child_y_start = Y;
-    for ( int t=0; t<children(); t++ ) {
-      int lastchild = ((t+1)==children()) ? 1 : 0;
-      _children[t]->draw(child_x, Y, child_w, itemfocus, tree_item_xmax, lastchild, render);
-    }
-    if ( has_children() && is_open() ) {
-      Y += prefs.openchild_marginbottom();		// offset below open child tree
-    }
-    if ( ! lastchild ) {
-      // Special 'clipped' calculation. (intentional variable shadowing)
-      int clipped = ((child_y_start < tree_top) && (Y < tree_top)) ||
-                    ((child_y_start > tree_bot) && (Y > tree_bot));
-      if (render && !clipped )
-        draw_vertical_connector(hconn_x, child_y_start, Y, prefs);
-    }
-  }
-}
-
-#else
-
-/// Draw this item and its children.
-///
-/// \param[in]     X	     Horizontal position for item being drawn
-/// \param[in,out] Y	     Vertical position for item being drawn,
-///                          returns new position for next item
-/// \param[in]     W	     Recommended width of item
-/// \param[in]	   tree      The parent tree
-/// \param[in]	   itemfocus The tree's current focus item (if any)
-/// \param[in]	   prefs     The tree's preferences
-/// \param[in]	   lastchild Is this item the last child in a subtree?
-///
-/// \version 1.3.0 release, removed 1.3.3 ABI
-///
-void Fl_Tree_Item::draw(int X, int &Y, int W, Fl_Widget *tree,
-			Fl_Tree_Item *itemfocus,
-                        const Fl_Tree_Prefs &prefs, int lastchild) {
-  if ( ! is_visible() ) return; 
-  int tree_top = tree->y();
-  int tree_bot = tree_top + tree->h();
-  int H = calc_item_height(prefs);	// height of item
-  int H2 = H + prefs.linespacing();	// height of item with line spacing
-
-  // Update the xywh of this item
-  _xywh[0] = X;
-  _xywh[1] = Y;
-  _xywh[2] = W;
-  _xywh[3] = H;
-
-  // Determine collapse icon's xywh
-  //   Note: calculate collapse icon's xywh for possible mouse click detection.
-  //   We don't care about items clipped off the viewport; they won't get mouse events.
-  //
-  int item_y_center = Y+(H/2);
-  _collapse_xywh[2] = prefs.openicon()->w();
-  int &icon_w = _collapse_xywh[2];
-  _collapse_xywh[0] = X + (icon_w + prefs.connectorwidth())/2 - 3;
-  int &icon_x = _collapse_xywh[0];
-  _collapse_xywh[1] = item_y_center - (prefs.openicon()->h()/2);
-  int &icon_y = _collapse_xywh[1];
-  _collapse_xywh[3] = prefs.openicon()->h();
-
-  // Horizontal connector values
-  //   XXX: Must calculate these even if(clipped) because 'draw children' code (below)
-  //   needs hconn_x_center value. (Otherwise, these calculations could be 'clipped')
-  //
-  int hconn_x  = X+icon_w/2-1;
-  int hconn_x2 = hconn_x + prefs.connectorwidth();
-  int hconn_x_center = X + icon_w + ((hconn_x2 - (X + icon_w)) / 2);
-  int cw1 = icon_w+prefs.connectorwidth()/2, cw2 = prefs.connectorwidth();
-  int conn_w = cw1>cw2 ? cw1 : cw2;
-
-  // Background position
-  int &bg_x = _label_xywh[0] = X+(icon_w/2-1+conn_w);
-  int &bg_y = _label_xywh[1] = Y;
-  int &bg_w = _label_xywh[2] = W-(icon_w/2-1+conn_w);
-  int &bg_h = _label_xywh[3] = H;
-
-  // Usericon position
-  int uicon_x = bg_x + ( (usericon() || prefs.usericon()) ? prefs.usericonmarginleft() : 0);
-  int uicon_w = usericon() ? usericon()->w() : prefs.usericon() ? prefs.usericon()->w() : 0;
-
-  // Label position
-  int label_x = uicon_x + uicon_w + (_label ? prefs.labelmarginleft() : 0);
-
-  // Recalc widget position
-  //   Do this whether clipped or not, so that when scrolled,
-  //   the widgets move to appropriate 'offscreen' positions
-  //   (so that they don't get mouse events, etc)
-  //
-  if ( widget() ) {
-    int wx = label_x;
-    int wy = bg_y;
-    int ww = widget()->w();		// use widget's width
-#if FLTK_ABI_VERSION >= 10301
-    int wh = (prefs.item_draw_mode() & FL_TREE_ITEM_HEIGHT_FROM_WIDGET)
-             ? widget()->h() : H;
-    if ( _label && 
-         (prefs.item_draw_mode() & FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET) ) {
-#else /*FLTK_ABI_VERSION*/
-    int wh = H;				// lock widget's height to item height
-    if ( _label && !widget() ) {	// back compat: don't draw label if widget() present
-#endif /*FLTK_ABI_VERSION*/
-      fl_font(_labelfont, _labelsize);	// fldescent() needs this
-      int lw=0, lh=0;
-      fl_measure(_label,lw,lh);		// get box around text (including white space)
-#if FLTK_ABI_VERSION >= 10301
-      // NEW
-      wx += (lw + prefs.widgetmarginleft());
-#else /*FLTK_ABI_VERSION*/
-      // OLD
-      wx += (lw + 3);
-#endif /*FLTK_ABI_VERSION*/
-    }
-    if ( widget()->x() != wx || widget()->y() != wy ||
-	 widget()->w() != ww || widget()->h() != wh ) {
-      widget()->resize(wx,wy,ww,wh);		// we'll handle redraw below
-    }
-  }
-  char clipped = ((Y+H) < tree_top) || (Y>tree_bot) ? 1 : 0;
-  char drawthis = ( is_root() && prefs.showroot() == 0 ) ? 0 : 1;
-  char active = (is_active() && tree->active_r()) ? 1 : 0;
-  if ( !clipped ) {
-    const Fl_Color unspecified = 0xffffffff;
-
-    Fl_Color fg = is_selected() ? fl_contrast(_labelfgcolor, tree->selection_color())
-		                : active ? _labelfgcolor
-				         : fl_inactive(_labelfgcolor);
-    Fl_Color bg = is_selected() ? active ? tree->selection_color() 
-				         : fl_inactive(tree->selection_color())
-		                : _labelbgcolor == unspecified ? tree->color()
-						               : _labelbgcolor;
-    // See if we should draw this item
-    //    If this item is root, and showroot() is disabled, don't draw.
-    //    'clipped' is an optimization to prevent drawing anything offscreen.
-    //
-    if ( drawthis ) {					// draw this item at all?
-      if ( tree->damage() & ~FL_DAMAGE_CHILD ) {	// non-child damage?
-	// Draw connectors
-	if ( prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
-	  // Horiz connector between center of icon and text
-	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
-	  // Small vertical line down to children
-	  if ( has_children() && is_open() )
-	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
-	  // Connectors for last child
-	  if ( !is_root() ) {
-	    if ( lastchild ) draw_vertical_connector(hconn_x, Y, item_y_center, prefs);
-	    else             draw_vertical_connector(hconn_x, Y, Y+H2, prefs);
-	  }
-	}
-	// Draw collapse icon
-	if ( has_children() && prefs.showcollapse() ) {
-	  // Draw icon image
-#if FLTK_ABI_VERSION >= 10304
-	  if ( is_open() ) {
-	    if ( active ) prefs.closeicon()->draw(icon_x,icon_y);
-	    else          prefs.closedeicon()->draw(icon_x,icon_y);
-	  } else {
-	    if ( active ) prefs.openicon()->draw(icon_x,icon_y);
-	    else          prefs.opendeicon()->draw(icon_x,icon_y);
-	  }
-#else
-	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
-	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
-	  }
-#endif
-	}
-	// Draw background for the item.. only if different from tree's bg color
-	if ( bg != tree->color() || is_selected() ) {
-	  if ( is_selected() ) {			// Selected? Use selectbox() style
-	    fl_draw_box(prefs.selectbox(),bg_x,bg_y,bg_w,bg_h,bg);
-	  } else {					// Not Selected? use plain filled rectangle
-	    fl_color(bg);
-	    fl_rectf(bg_x,bg_y,bg_w,bg_h);
-	  }
-	  if ( widget() ) widget()->damage(FL_DAMAGE_ALL);	// if there's a child widget, we just damaged it
-	}
-	// Draw user icon (if any)
-#if FLTK_ABI_VERSION >= 10304
-	if ( usericon() ) {
-	  // Item has user icon? Use it
-	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  if ( active ) usericon()->draw(uicon_x,uicon_y);
-	  else if ( userdeicon() ) userdeicon()->draw(uicon_x,uicon_y);
-	} else if ( prefs.usericon() ) {
-	  // Prefs has user icon? Use it
-	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  if ( active ) prefs.usericon()->draw(uicon_x,uicon_y);
-	  else if ( userdeicon() ) prefs.userdeicon()->draw(uicon_x,uicon_y);
-	}
-#else
-	if ( usericon() ) {
-	  // Item has user icon? Use it
-	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  usericon()->draw(uicon_x,uicon_y);
-	} else if ( prefs.usericon() ) {
-	  // Prefs has user icon? Use it
-	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  prefs.usericon()->draw(uicon_x,uicon_y);
-	}
-#endif
-	// Draw label
-#if FLTK_ABI_VERSION >= 10301
-	if ( _label && 
-	     ( !widget() || 
-	       (prefs.item_draw_mode() & FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET) ) )
-#else /*FLTK_ABI_VERSION*/
-	if ( _label && !widget() )	// back compat: don't draw label if widget() present
-#endif /*FLTK_ABI_VERSION*/
-	{
-	  fl_color(fg);
-	  fl_font(_labelfont, _labelsize);
-	  int label_y = Y+(H/2)+(_labelsize/2)-fl_descent()/2;
-	  fl_draw(_label, label_x, label_y);
-	}
-      }			// end non-child damage
-      // Draw child FLTK widget?
-      if ( widget() ) {
-        ((Fl_Tree*)tree)->draw_child(*widget());		// let group handle drawing child
-	if ( widget()->label() )
-	    ((Fl_Tree*)tree)->draw_outside_label(*widget());	// label too
-      }
-      // Draw focus box around item's bg last
-      if ( this == itemfocus &&
-           Fl::visible_focus() && 
-	   Fl::focus() == tree &&
-	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,bg_x+1,bg_y+1,bg_w-1,bg_h-1);
-      }
-    }			// end drawthis
-  }			// end clipped
-  if ( drawthis ) Y += H2;			// adjust Y (even if clipped)
-  // Draw child items (if any)
-  if ( has_children() && is_open() ) {
-    int child_x = drawthis ? (hconn_x_center - (icon_w/2) + 1)	// offset children to right,
-                           : X;					// unless didn't drawthis
-    int child_w = W - (child_x-X);
-    int child_y_start = Y;
-    for ( int t=0; t<children(); t++ ) {
-      int lastchild = ((t+1)==children()) ? 1 : 0;
-      _children[t]->draw(child_x, Y, child_w, tree, itemfocus, prefs, lastchild);
-    }
-    if ( has_children() && is_open() ) {
-      Y += prefs.openchild_marginbottom();		// offset below open child tree
-    }
-    if ( ! lastchild ) {
-      // Special 'clipped' calculation. (intentional variable shadowing)
-      int clipped = ((child_y_start < tree_top) && (Y < tree_top)) ||
-                    ((child_y_start > tree_bot) && (Y > tree_bot));
-      if (!clipped) draw_vertical_connector(hconn_x, child_y_start, Y, prefs);
-    }
-  }
-}
-#endif
-
-/// Was the event on the 'collapse' button of this item?
-///
-int Fl_Tree_Item::event_on_collapse_icon(const Fl_Tree_Prefs &prefs) const {
-  if ( is_visible() && is_active() && has_children() && prefs.showcollapse() ) {
-    return(event_inside(_collapse_xywh) ? 1 : 0);
-  } else {
-    return(0);
-  }
-}
-
-/// Was event on the label() of this item?
-///
-int Fl_Tree_Item::event_on_label(const Fl_Tree_Prefs &prefs) const {
-  if ( is_visible() && is_active() ) {
-    return(event_inside(_label_xywh) ? 1 : 0);
-  } else {
-    return(0);
-  }
-}
-
-/// Internal: Show the FLTK widget() for this item and all children.
-/// Used by open() to re-show widgets that were hidden by a previous close()
-///
-void Fl_Tree_Item::show_widgets() {
-  if ( _widget ) _widget->show();
-  if ( is_open() ) {
-    for ( int t=0; t<_children.total(); t++ ) {
-      _children[t]->show_widgets();
-    }
-  }
-}
-
-/// Internal: Hide the FLTK widget() for this item and all children.
-/// Used by close() to hide widgets.
-///
-void Fl_Tree_Item::hide_widgets() {
-  if ( _widget ) _widget->hide();
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->hide_widgets();
-  }
-}
-
-/// Open this item and all its children.
-void Fl_Tree_Item::open() {
-  set_flag(OPEN,1);
-  // Tell children to show() their widgets
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->show_widgets();
-  }
-  recalc_tree();		// may change tree geometry
-}
-
-/// Close this item and all its children.
-void Fl_Tree_Item::close() {
-  set_flag(OPEN,0);
-  // Tell children to hide() their widgets
-  for ( int t=0; t<_children.total(); t++ ) {
-    _children[t]->hide_widgets();
-  }
-  recalc_tree();		// may change tree geometry
-}
-
-/// Returns how many levels deep this item is in the hierarchy.
-///
-/// For instance; root has a depth of zero, and its immediate children
-/// would have a depth of 1, and so on. Use e.g. for determining the
-/// horizontal indent of this item during drawing.
-///
-int Fl_Tree_Item::depth() const {
-  int count = 0;
-  const Fl_Tree_Item *item = parent();
-  while ( item ) {
-    ++count;
-    item = item->parent();
-  }
-  return(count);
-}
-
-/// Return the next item in the tree.
-///
-/// This method can be used to walk the tree forward.
-/// For an example of how to use this method, see Fl_Tree::first().
-/// 
-/// \returns the next item in the tree, or 0 if there's no more items.
-///
-Fl_Tree_Item *Fl_Tree_Item::next() {
-  Fl_Tree_Item *p, *c = this;
-  if ( c->has_children() ) {
-    return(c->child(0));
-  }
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  while ( ( p = c->parent() ) != NULL ) {	// loop upwards through parents
-    if ( c->_next_sibling )			// not last child?
-      return(c->_next_sibling);			// return next child
-    c = p;					// child becomes parent to move up generation
-  }						// loop: moves up to next parent
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  while ( ( p = c->parent() ) != NULL ) {	// loop upwards through parents
-    int t = p->find_child(c);			// find our position in parent's children[] array
-    if ( ++t < p->children() )			// not last child?
-      return(p->child(t));			// return next child
-    c = p;					// child becomes parent to move up generation
-  }						// loop: moves up to next parent
-#endif /*FLTK_ABI_VERSION*/
-  return(0);					// hit root? done
-}
-
-/// Return the previous item in the tree.
-///
-/// This method can be used to walk the tree backwards.
-/// For an example of how to use this method, see Fl_Tree::last().
-/// 
-/// \returns the previous item in the tree, 
-///          or 0 if there's no item above this one (hit the root).
-///
-Fl_Tree_Item *Fl_Tree_Item::prev() {
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  if ( !parent() ) return(0);	// hit root? done
-  if ( !_prev_sibling ) {	// are we first child?
-    return(parent());		// return parent
-  }
-  // Tricky: in the following example our current position
-  // in the tree is 'j', and we need to move "up one" to 'i':
-  //
-  //        ROOT
-  //          |-- a
-  //              b-- c
-  //              |   d-- e
-  //              |   |   f
-  //              |   |
-  //              |   g-- h
-  //              |       i
-  //              j
-  //
-  // We do this via b->g->i:
-  //    1. Find j's prev_sibling (b)  _
-  //    2. Find b's 'last child' (g)   |_ while loop
-  //    3. Find g's 'last child' (i)  _|
-  //
-  Fl_Tree_Item *p = _prev_sibling;	// focus on our prev sibling
-  while ( p->has_children() ) {		// item has children?
-    p = p->child(p->children()-1);	// descend hierarchy finding deepest 'last child'
-  }
-  return(p);
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  Fl_Tree_Item *p=parent();		// start with parent
-  if ( ! p ) return(0);			// hit root? done
-  int t = p->find_child(this);		// find our position in parent's children[] array
-  if ( --t == -1 ) {	 		// are we first child?
-    return(p);				// return immediate parent
-  }
-  p = p->child(t);			// take parent's previous child
-  while ( p->has_children() ) {		// has children?
-    p = p->child(p->children()-1);	// take last child
-  }
-  return(p);
-#endif /*FLTK_ABI_VERSION*/
-}
-
-/// Return this item's next sibling.
-///
-/// Moves to the next item below us at the same level (sibling).
-/// Use this to move down the tree without changing depth().
-/// effectively skipping over this item's children/descendents.
-/// 
-/// \returns item's next sibling, or 0 if none.
-///
-Fl_Tree_Item *Fl_Tree_Item::next_sibling() {
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  return(_next_sibling);
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  if ( !parent() ) return(0);			// No parent (root)? We have no siblings
-  int index = parent()->find_child(this);	// find our position in parent's child() array
-  if ( index == -1 ) return(0);			// parent doesn't know us? weird
-  if ( (index+1) < parent()->children() )	// is there a next child?
-    return(parent()->child(index+1));		// return next child if there's one below us
-  return(0);					// no siblings below us
-#endif /*FLTK_ABI_VERSION*/
-}
-
-/// Return this item's previous sibling.
-///
-/// Moves to the previous item above us at the same level (sibling).
-/// Use this to move up the tree without changing depth().
-/// 
-/// \returns This item's previous sibling, or 0 if none.
-///
-Fl_Tree_Item *Fl_Tree_Item::prev_sibling() {
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  return(_prev_sibling);
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  if ( !parent() ) return(0);				// No parent (root)? We have no siblings
-  int index = parent()->find_child(this);		// find next position up in parent's child() array
-  if ( index == -1 ) return(0);				// parent doesn't know us? weird
-  if ( index > 0 ) return(parent()->child(index-1));	// return previous child if there's one above us
-  return(0);						// no siblings above us
-#endif /*FLTK_ABI_VERSION*/
-}
-
-/// Update our _prev_sibling and _next_sibling pointers to point to neighbors
-/// given \p index as being our current position in the parent's item array.
-/// Call this whenever items in the array are added/removed/moved/swapped/etc.
-/// \param[in] index Our index# in the parent.<br>
-///                  Special case if index=-1: become an orphan; null out all parent/sibling associations.
-/// 
-void Fl_Tree_Item::update_prev_next(int index) {
-#if FLTK_ABI_VERSION >= 10301
-  // NEW
-  if ( index == -1 ) {	// special case: become an orphan
-    _parent = 0;
-    _prev_sibling = 0;
-    _next_sibling = 0;
-    return;
-  }
-  int pchildren = parent() ? parent()->children() : 0;
-  int index_prev = index-1;
-  int index_next = index+1;
-  // Get pointers to prev+next items
-  Fl_Tree_Item *item_prev = (index_prev>=0)&&(index_prev<pchildren) ? parent()->child(index_prev) : 0;
-  Fl_Tree_Item *item_next = (index_next>=0)&&(index_next<pchildren) ? parent()->child(index_next) : 0;
-  // Adjust our prev+next ptrs
-  _prev_sibling = item_prev;
-  _next_sibling = item_next;
-  // Adjust neighbors to point to us
-  if ( item_prev ) item_prev->_next_sibling = this;
-  if ( item_next ) item_next->_prev_sibling = this;
-#else /*FLTK_ABI_VERSION*/
-  // OLD
-  // -- does nothing --
-#endif /*FLTK_ABI_VERSION*/
-}
-      
-/// Return the next open(), visible() item. 
-/// (If this item has children and is closed, children are skipped)
-///
-/// This method can be used to walk the tree forward, skipping items
-/// that are not currently open/visible to the user.
-/// 
-/// \returns the next open() visible() item below us,
-///          or 0 if there's no more items.
-/// \version 1.3.3
-///
-Fl_Tree_Item *Fl_Tree_Item::next_visible(Fl_Tree_Prefs &prefs) {
-  Fl_Tree_Item *item = this;
-  while ( 1 ) {
-    item = item->next();
-    if ( !item ) return 0;
-    if ( item->is_root() && !prefs.showroot() ) continue;
-    if ( item->visible_r() ) return(item);
-  }
-}
-
-/// Same as next_visible().
-/// \deprecated in 1.3.3 for confusing name, use next_visible() instead
-Fl_Tree_Item *Fl_Tree_Item::next_displayed(Fl_Tree_Prefs &prefs) {
-  return next_visible(prefs);
-}
-
-/// Return the previous open(), visible() item. 
-/// (If this item above us has children and is closed, its children are skipped)
-///
-/// This method can be used to walk the tree backward, 
-/// skipping items that are not currently open/visible to the user.
-/// 
-/// \returns the previous open() visible() item above us,
-///          or 0 if there's no more items.
-///
-Fl_Tree_Item *Fl_Tree_Item::prev_visible(Fl_Tree_Prefs &prefs) {
-  Fl_Tree_Item *c = this;
-  while ( c ) {
-    c = c->prev();					// previous item
-    if ( !c ) break;					// no more items? done
-    if ( c->is_root() )					// root
-      return((prefs.showroot()&&c->visible()) ? c : 0);	// return root if visible
-    if ( !c->visible() ) continue;			// item not visible? skip
-    // Check all parents to be sure none are closed.
-    // If closed, move up to that level and repeat until sure none are closed.
-    Fl_Tree_Item *p = c->parent();
-    while (1) {
-      if ( !p || p->is_root() ) return(c);		// hit top? then we're displayed, return c
-      if ( p->is_close() ) c = p;			// found closed parent? make it current
-      p = p->parent();					// continue up tree
-    }
-  }
-  return(0);						// hit end: no more items
-}
-
-/// Same as prev_visible().
-/// \deprecated in 1.3.3 for confusing name, use prev_visible()
-///
-Fl_Tree_Item *Fl_Tree_Item::prev_displayed(Fl_Tree_Prefs &prefs) {
-  return prev_visible(prefs);
-}
-
-/// See if item and all its parents are open() and visible().
-/// \returns
-///    1 -- item and its parents are open() and visible()
-///    0 -- item (or one of its parents) are invisible or close()ed.
-///
-int Fl_Tree_Item::visible_r() const {
-  if ( !visible() ) return(0);
-  for (const Fl_Tree_Item *p=parent(); p; p=p->parent())// move up through parents
-    if (!p->visible() || p->is_close()) return(0);	// any parent not visible or closed?
-  return(1);
-}
-
-/// Call this when our geometry is changed. (Font size, label contents, etc)
-/// Schedules tree to recalculate itself, as changes to us may affect tree
-/// widget's scrollbar visibility and tab sizes.
-/// \version 1.3.3 ABI
-///
-void Fl_Tree_Item::recalc_tree() {
-#if FLTK_ABI_VERSION >= 10303
-  _tree->recalc_tree();
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tree_Item_Array.cxx
+++ /dev/null
@@ -1,314 +1,0 @@
-//
-// "$Id$"
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <FL/Fl_Tree_Item_Array.H>
-#include <FL/Fl_Tree_Item.H>
-
-//////////////////////
-// Fl_Tree_Item_Array.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/// Constructor; creates an empty array.
-///
-///     The optional 'chunksize' can be specified to optimize
-///     memory allocation for potentially large arrays. Default chunksize is 10.
-/// 
-Fl_Tree_Item_Array::Fl_Tree_Item_Array(int new_chunksize) {
-  _items     = 0;
-  _total     = 0;
-  _size      = 0;
-#if FLTK_ABI_VERSION >= 10303
-  _flags     = 0;
-#endif
-  _chunksize = new_chunksize;
-}
-
-/// Destructor. Calls each item's destructor, destroys internal _items array.
-Fl_Tree_Item_Array::~Fl_Tree_Item_Array() {
-  clear();
-}
-
-/// Copy constructor. Makes new copy of array, with new instances of each item.
-Fl_Tree_Item_Array::Fl_Tree_Item_Array(const Fl_Tree_Item_Array* o) {
-  _items = (Fl_Tree_Item**)malloc(o->_size * sizeof(Fl_Tree_Item*));
-  _total     = 0;
-  _size      = o->_size;
-  _chunksize = o->_chunksize;
-#if FLTK_ABI_VERSION >= 10303
-  _flags     = o->_flags;
-#endif
-  for ( int t=0; t<o->_total; t++ ) {
-#if FLTK_ABI_VERSION >= 10303
-    if ( _flags & MANAGE_ITEM ) {
-      _items[t] = new Fl_Tree_Item(o->_items[t]);	// make new copy of item
-      ++_total;
-      _items[t]->update_prev_next(t);			// update uses _total's current value
-    } else {
-      _items[t] = o->_items[t];				// copy ptr only
-      ++_total;
-    }
-#else
-    _items[t] = new Fl_Tree_Item(o->_items[t]);		// make new copy of item
-    ++_total;
-    _items[t]->update_prev_next(t);			// update uses _total's current value
-#endif
-  }
-}
-
-/// Clear the entire array.
-///
-///     Each item will be deleted (destructors will be called),
-///     and the array will be cleared. total() will return 0.
-///
-void Fl_Tree_Item_Array::clear() {
-  if ( _items ) {
-    for ( int t=0; t<_total; t++ ) {
-#if FLTK_ABI_VERSION >= 10303
-      if ( _flags & MANAGE_ITEM )
-#endif
-      {
-        delete _items[t];
-	_items[t] = 0;
-      }
-    }
-    free((void*)_items); _items = 0;
-  }
-  _total = _size = 0;
-}
-
-// Internal: Enlarge the items array.
-//
-//    Adjusts size/items memory allocation as needed.
-//    Does NOT change total.
-//
-void Fl_Tree_Item_Array::enlarge(int count) {
-  int newtotal = _total + count;	// new total
-  if ( newtotal >= _size ) {		// more than we have allocated?
-    if ( (newtotal/150) > _chunksize ) _chunksize *= 10;
-    // Increase size of array
-    int newsize = _size + _chunksize;
-    Fl_Tree_Item **newitems = (Fl_Tree_Item**)malloc(newsize * sizeof(Fl_Tree_Item*));
-    if ( _items ) { 
-      // Copy old array -> new, delete old
-      memmove(newitems, _items, _size * sizeof(Fl_Tree_Item*));
-      free((void*)_items); _items = 0;
-    }
-    // Adjust items/sizeitems
-    _items = newitems;
-    _size = newsize;
-  }
-}
-
-/// Insert an item at index position \p pos.
-///
-///     Handles enlarging array if needed, total increased by 1.
-///     If \p pos \>= total(), the item is appended to the array.
-///     If \p pos \< 0, the item is prepended (works like pos == 0).
-///
-void Fl_Tree_Item_Array::insert(int pos, Fl_Tree_Item *new_item) {
-  if (pos < 0)
-    pos = 0;
-  else if (pos > _total)
-    pos = _total;
-  enlarge(1);
-  // printf("*** POS=%d TOTAL-1=%d NITEMS=%d\n", pos, _total-1, (_total-pos));
-  if ( pos <= (_total - 1) ) {	// need to move memory around?
-    int nitems = _total - pos;
-    memmove(&_items[pos+1], &_items[pos], sizeof(Fl_Tree_Item*) * nitems);
-  } 
-  _items[pos] = new_item;
-  _total++;
-#if FLTK_ABI_VERSION >= 10303
-  if ( _flags & MANAGE_ITEM )
-#endif
-  {
-    _items[pos]->update_prev_next(pos);	// adjust item's prev/next and its neighbors
-  }
-}
-
-/// Add an item* to the end of the array.
-///
-///     Assumes the item was created with 'new', and will remain
-///     allocated.. Fl_Tree_Item_Array will handle calling the
-///     item's destructor when the array is cleared or the item remove()'ed.
-///
-void Fl_Tree_Item_Array::add(Fl_Tree_Item *val) {
-  insert(_total, val);
-}
-
-/// Replace the item at \p index with \p newitem.
-///
-/// Old item at index position will be destroyed,
-/// and the new item will take it's place, and stitched into the linked list.
-///
-void Fl_Tree_Item_Array::replace(int index, Fl_Tree_Item *newitem) {
-  if ( _items[index] ) {			// delete if non-zero
-#if FLTK_ABI_VERSION >= 10303
-    if ( _flags & MANAGE_ITEM )
-#endif
-      // Destroy old item
-      delete _items[index];
-  }
-  _items[index] = newitem;			// install new item
-#if FLTK_ABI_VERSION >= 10303
-  if ( _flags & MANAGE_ITEM ) 
-#endif
-  {
-    // Restitch into linked list
-    _items[index]->update_prev_next(index);
-  }
-}
-
-/// Remove the item at \param[in] index from the array.
-///
-///     The item will be delete'd (if non-NULL), so its destructor will be called.
-///
-void Fl_Tree_Item_Array::remove(int index) {
-  if ( _items[index] ) {			// delete if non-zero
-#if FLTK_ABI_VERSION >= 10303
-    if ( _flags & MANAGE_ITEM )
-#endif
-      delete _items[index];
-  }
-  _items[index] = 0;
-  _total--;
-  for ( int i=index; i<_total; i++ ) {		// reshuffle the array
-    _items[i] = _items[i+1];
-  }
-#if FLTK_ABI_VERSION >= 10303
-  if ( _flags & MANAGE_ITEM ) 
-#endif
-  {
-    if ( index < _total ) {			// removed item not last?
-      _items[index]->update_prev_next(index);	// update next item's prev/next and neighbors
-    } else if ( ((index-1) >= 0) &&		// removed item IS last?
-	      ((index-1) < _total)) {
-      _items[index-1]->update_prev_next(index-1);// update prev item's prev/next and neighbors
-    }
-  }
-}
-
-/// Remove the item from the array.
-///
-///     \returns 0 if removed, or -1 if the item was not in the array.
-///
-int Fl_Tree_Item_Array::remove(Fl_Tree_Item *item) {
-  for ( int t=0; t<_total; t++ ) {
-    if ( item == _items[t] ) {
-      remove(t);
-      return(0);
-    }
-  }
-  return(-1);
-}
-
-#if FLTK_ABI_VERSION >= 10301
-/// Swap the two items at index positions \p ax and \p bx.
-void Fl_Tree_Item_Array::swap(int ax, int bx) {
-  Fl_Tree_Item *asave = _items[ax];
-  _items[ax] = _items[bx];
-  _items[bx] = asave;
-#if FLTK_ABI_VERSION >= 10303
-  if ( _flags & MANAGE_ITEM )
-#endif
-  {
-    // Adjust prev/next ptrs
-    _items[ax]->update_prev_next(ax);
-    _items[bx]->update_prev_next(bx);
-  }
-}
-#endif /* FLTK_ABI_VERSION */
-
-/// Move item at 'from' to new position 'to' in the array.
-/// Due to how the moving an item shuffles the array around,
-/// a positional 'move' implies things that may not be obvious:
-/// - When 'from' moved lower in tree, appears BELOW item that was at 'to'.
-/// - When 'from' moved higher in tree, appears ABOVE item that was at 'to'.
-///
-///     \returns 0 on success, -1 on range error (e.g. if \p 'to' or \p 'from' out of range)
-///
-int Fl_Tree_Item_Array::move(int to, int from) {
-  if ( from == to ) return 0;    // nop
-  if ( to<0 || to>=_total || from<0 || from>=_total ) return -1;
-  Fl_Tree_Item *item = _items[from];
-  // Remove item..
-  if ( from < to )
-    for ( int t=from; t<to && t<(_total+1); t++ )
-      _items[t] = _items[t+1];
-  else
-    for ( int t=from; t>to && t>0; t-- )
-      _items[t] = _items[t-1];
-  // Move to new position
-  _items[to] = item;
-  // Update all children
-  for ( int r=0; r<_total; r++ )	// XXX: excessive to do all children,
-    _items[r]->update_prev_next(r);	// XXX: but avoids weird boundary issues
-  return 0;
-}
-
-/// Deparent item at \p 'pos' from our list of children.
-/// Similar to a remove() without the destruction of the item.
-/// This creates an orphaned item (still allocated, has no parent)
-/// which soon after is typically reparented elsewhere.
-///
-///     \returns 0 on success, -1 on error (e.g. if \p 'pos' out of range)
-///
-int Fl_Tree_Item_Array::deparent(int pos) {
-  if ( pos>=_total || pos<0 ) return -1;
-  // Save item being deparented, and its two nearest siblings
-  Fl_Tree_Item *item = _items[pos];
-  Fl_Tree_Item *prev = item->prev_sibling();
-  Fl_Tree_Item *next = item->next_sibling();
-  // Remove from parent's list of children
-  _total -= 1;
-  for ( int t=pos; t<_total; t++ )
-    _items[t] = _items[t+1];            // delete, no destroy
-  // Now an orphan: remove association with old parent and siblings
-  item->update_prev_next(-1);           // become an orphan
-  // Adjust bereaved siblings
-  if ( prev ) prev->update_prev_next(pos-1);
-  if ( next ) next->update_prev_next(pos);
-  return 0;
-}
-
-/// Reparent specified item as a child of ourself.
-/// Typically 'newchild' was recently orphaned with deparent().
-///
-///     \returns 0 on success, -1 on error (e.g. if \p 'pos' out of range)
-///
-int Fl_Tree_Item_Array::reparent(Fl_Tree_Item *item, Fl_Tree_Item* newparent, int pos) {
-  if ( pos<0 || pos>_total ) return -1;
-  // Add item to new parent
-  enlarge(1);
-  _total += 1;
-  for ( int t=_total-1; t>pos; --t )    // shuffle array to make room for new entry
-    _items[t] = _items[t-1];
-  _items[pos] = item;                   // insert new entry
-  // Attach to new parent and siblings
-  _items[pos]->parent(newparent);       // reparent (update_prev_next() needs this)
-  _items[pos]->update_prev_next(pos);   // find new siblings
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Tree_Prefs.cxx
+++ /dev/null
@@ -1,208 +1,0 @@
-//
-// "$Id$"
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tree_Prefs.H>
-
-//////////////////////
-// Fl_Tree_Prefs.cxx
-//////////////////////
-//
-// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
-// Copyright (C) 2009-2010 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// INTERNAL: BUILT IN OPEN/STOW XPMS
-//    These can be replaced via prefs.openicon()/closeicon()
-//
-static const char * const L_open_xpm[] = {
-#ifdef __APPLE__
-  "11 11 2 1",
-  ".  c None",
-  "@  c #000000",
-  "...@.......",
-  "...@@......",
-  "...@@@.....",
-  "...@@@@....",
-  "...@@@@@...",
-  "...@@@@@@..",
-  "...@@@@@...",
-  "...@@@@....",
-  "...@@@.....",
-  "...@@......",
-  "...@......."
-#else /* __APPLE__ */
-  "11 11 3 1",
-  ".	c #fefefe",
-  "#	c #444444",
-  "@	c #000000",
-  "###########",
-  "#.........#",
-  "#.........#",
-  "#....@....#",
-  "#....@....#",
-  "#..@@@@@..#",
-  "#....@....#",
-  "#....@....#",
-  "#.........#",
-  "#.........#",
-  "###########"
-#endif /* __APPLE__ */
-};
-static Fl_Pixmap L_openpixmap(L_open_xpm);
-
-static const char * const L_close_xpm[] = {
-#ifdef __APPLE__
-  "11 11 2 1",
-  ".  c None",
-  "@  c #000000",
-  "...........",
-  "...........",
-  "...........",
-  "@@@@@@@@@@@",
-  ".@@@@@@@@@.",
-  "..@@@@@@@..",
-  "...@@@@@...",
-  "....@@@....",
-  ".....@.....",
-  "...........",
-  "..........."
-#else /* __APPLE__ */
-  "11 11 3 1",
-  ".	c #fefefe",
-  "#	c #444444",
-  "@	c #000000",
-  "###########",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#..@@@@@..#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "#.........#",
-  "###########"
-#endif /* __APPLE__ */
-};
-static Fl_Pixmap L_closepixmap(L_close_xpm);
-
-/// Sets the default icon to be used as the 'open' icon
-/// when items are add()ed to the tree.
-/// This overrides the built in default '[+]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [+] icon.
-///
-void Fl_Tree_Prefs::openicon(Fl_Image *val) {
-  _openimage = val ? val : &L_openpixmap;
-#if FLTK_ABI_VERSION >= 10304
-  // Update deactivated version of icon..
-  if ( _opendeimage ) delete _opendeimage;
-  if ( _openimage ) {
-    _opendeimage = _openimage->copy();
-    _opendeimage->inactive();
-  } else {
-    _opendeimage = 0;
-  }
-#endif
-}
-
-/// Sets the icon to be used as the 'close' icon.
-/// This overrides the built in default '[-]' icon.
-///
-/// \param[in] val -- The new image, or zero to use the default [-] icon.
-///
-void Fl_Tree_Prefs::closeicon(Fl_Image *val) {
-  _closeimage = val ? val : &L_closepixmap;
-#if FLTK_ABI_VERSION >= 10304
-  // Update deactivated version of icon..
-  if ( _closedeimage ) delete _closedeimage;
-  if ( _closeimage ) {
-    _closedeimage = _closeimage->copy();
-    _closedeimage->inactive();
-  } else {
-    _closedeimage = 0;
-  }
-#endif
-}
-
-/// Fl_Tree_Prefs constructor
-Fl_Tree_Prefs::Fl_Tree_Prefs() {
-  _labelfont              = FL_HELVETICA;
-  _labelsize              = FL_NORMAL_SIZE;
-  _marginleft             = 6;
-  _margintop              = 3;
-#if FLTK_ABI_VERSION >= 10301
-  _marginbottom           = 20;
-#endif /*FLTK_ABI_VERSION*/
-  _openchild_marginbottom = 0;
-  _usericonmarginleft     = 3;
-  _labelmarginleft        = 3;
-#if FLTK_ABI_VERSION >= 10301
-  _widgetmarginleft       = 3;
-#endif /*FLTK_ABI_VERSION*/
-  _linespacing            = 0;
-  _labelfgcolor           = FL_BLACK;
-  _labelbgcolor           = 0xffffffff;		// we use this as 'transparent'
-  _connectorcolor         = Fl_Color(43);
-#ifdef __APPLE__
-  _connectorstyle         = FL_TREE_CONNECTOR_NONE;
-#else /* __APPLE__ */
-  _connectorstyle         = FL_TREE_CONNECTOR_DOTTED;
-#endif /* __APPLE__ */
-  _openimage              = &L_openpixmap;
-  _closeimage             = &L_closepixmap;
-  _userimage              = 0;
-#if FLTK_ABI_VERSION >= 10304
-  _opendeimage = _openimage->copy();
-  _opendeimage->inactive();
-  _closedeimage = _closeimage->copy();
-  _closedeimage->inactive();
-  _userdeimage            = 0;
-#endif
-  _showcollapse           = 1;
-  _showroot               = 1;
-  _connectorwidth         = 17;
-  _sortorder              = FL_TREE_SORT_NONE;
-  _selectbox              = FL_FLAT_BOX;
-  _selectmode             = FL_TREE_SELECT_SINGLE;
-#if FLTK_ABI_VERSION >= 10301
-  _itemreselectmode       = FL_TREE_SELECTABLE_ONCE;
-  _itemdrawmode           = FL_TREE_ITEM_DRAW_DEFAULT;
-#endif
-#if FLTK_ABI_VERSION >= 10303
-  _itemdrawcallback       = 0;
-  _itemdrawuserdata       = 0;
-#endif
-  // Let fltk's current 'scheme' affect defaults
-  if (Fl::is_scheme("gtk+")) {
-    _selectbox = _FL_GTK_THIN_UP_BOX;
-  } else if (Fl::is_scheme("plastic")) {
-    _selectbox = _FL_PLASTIC_THIN_UP_BOX;
-  }
-}
-
-#if FLTK_ABI_VERSION >= 10304
-/// Fl_Tree_Prefs destructor
-Fl_Tree_Prefs::~Fl_Tree_Prefs() {
-  if ( _opendeimage )  delete _opendeimage;
-  if ( _closedeimage ) delete _closedeimage;
-  if ( _userdeimage )  delete _userdeimage;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Valuator.cxx
+++ /dev/null
@@ -1,198 +1,0 @@
-//
-// "$Id$"
-//
-// Valuator widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// Base class for sliders and all other one-value "knobs"
-
-#include <FL/Fl.H>
-#include <FL/Fl_Valuator.H>
-#include <FL/math.h>
-#include <stdio.h>
-#include "flstring.h"
-
-Fl_Valuator::Fl_Valuator(int X, int Y, int W, int H, const char* L)
-/**
-  Creates a new Fl_Valuator widget using the given position,
-  size, and label string. The default boxtype is FL_NO_BOX.
-*/
-: Fl_Widget(X,Y,W,H,L) {
-  align(FL_ALIGN_BOTTOM);
-  when(FL_WHEN_CHANGED);
-  value_ = 0;
-  previous_value_ = 1;
-  min = 0;
-  max = 1;
-  A = 0.0;
-  B = 1;
-}
-
-const double epsilon = 4.66e-10;
-
-/**  See double Fl_Valuator::step() const */
-void Fl_Valuator::step(double s) {
-  if (s < 0) s = -s;
-  A = rint(s);
-  B = 1;
-  while (fabs(s-A/B) > epsilon && B<=(0x7fffffff/10)) {B *= 10; A = rint(s*B);}
-}
-
-/** Sets the step value to 1.0 / 10<SUP>digits</SUP>.
-
-    Precision \p digits is limited to 0...9 to avoid internal overflow errors.
-    Values outside this range are clamped.
-
-    \note For negative values of \p digits the step value is set to
-    \p A = 1.0 and \p B = 1, i.e. 1.0/1 = 1.
-*/
-void Fl_Valuator::precision(int digits) {
-  if (digits > 9) digits = 9;
-  else if (digits < 0) digits = 0;
-  A = 1.0;
-  for (B = 1; digits--;) B *= 10;
-}
-
-/**  Asks for partial redraw */
-void Fl_Valuator::value_damage() {damage(FL_DAMAGE_EXPOSE);} // by default do partial-redraw
-
-/**
-    Sets the current value. The new value is \e not
-    clamped or otherwise changed before storing it. Use
-    clamp() or round() to modify the value before
-    calling value(). The widget is redrawn if the new value
-    is different than the current one. The initial value is zero.
-
-    changed() will return true if the user has moved the slider,
-    but it will be turned off by value(x) and just before doing a callback
-    (the callback can turn it back on if desired).
-*/
-int Fl_Valuator::value(double v) {
-  clear_changed();
-  if (v == value_) return 0;
-  value_ = v;
-  value_damage();
-  return 1;
-}
-/** Clamps the value, but accepts v if the previous value is not already out of range */
-double Fl_Valuator::softclamp(double v) {
-  int which = (min<=max);
-  double p = previous_value_;
-  if ((v<min)==which && p!=min && (p<min)!=which) return min;
-  else if ((v>max)==which && p!=max && (p>max)!=which) return max;
-  else return v;
-}
-
-// inline void Fl_Valuator::handle_push() {previous_value_ = value_;}
-/** Called during a drag operation, after an FL_WHEN_CHANGED event is received and before the callback. */
-void Fl_Valuator::handle_drag(double v) {
-  if (v != value_) {
-    value_ = v;
-    value_damage();
-    set_changed();
-    if (when() & FL_WHEN_CHANGED) do_callback();
-  }
-}
-/** Called after an FL_WHEN_RELEASE event is received and before the callback. */
-void Fl_Valuator::handle_release() {
-  if (when()&FL_WHEN_RELEASE) {
-    // insure changed() is off even if no callback is done.  It may have
-    // been turned on by the drag, and then the slider returned to it's
-    // initial position:
-    clear_changed();
-    // now do the callback only if slider in new position or always is on:
-    if (value_ != previous_value_ || when() & FL_WHEN_NOT_CHANGED) {
-      do_callback();
-    }
-  }
-}
-
-/**
-  Round the passed value to the nearest step increment.  Does
-  nothing if step is zero.
-*/
-double Fl_Valuator::round(double v) {
-  if (A) return rint(v*B/A)*A/B;
-  else return v;
-}
-
-/**  Clamps the passed value to the valuator range.*/
-double Fl_Valuator::clamp(double v) {
-  if ((v<min)==(min<=max)) return min;
-  else if ((v>max)==(min<=max)) return max;
-  else return v;
-}
-
-/**
-  Adds n times the step value to the passed value. If
-  step was set to zero it uses fabs(maximum() - minimum()) /
-  100.
-*/
-double Fl_Valuator::increment(double v, int n) {
-  if (!A) return v+n*(max-min)/100;
-  if (min > max) n = -n;
-  return (rint(v*B/A)+n)*A/B;
-}
-
-/**
-  Uses internal rules to format the fields numerical value into
-  the character array pointed to by the passed parameter.
-  
-  The actual format used depends on the current step value. If
-  the step value has been set to zero then a \%g format is used.
-  If the step value is non-zero, then a \%.*f format is used,
-  where the precision is calculated to show sufficient digits
-  for the current step value. An integer step value, such as 1
-  or 1.0, gives a precision of 0, so the formatted value will
-  appear as an integer.
-
-  This method is used by the Fl_Valuator_... group of widgets to
-  format the current value into a text string.
-  The return value is the length of the formatted text.
-  The formatted value is written into \p buffer.
-  \p buffer should have space for at least 128 bytes.
-
-  You may override this function to create your own text formatting.
-*/
-int Fl_Valuator::format(char* buffer) {
-  double v = value();
-  // MRS: THIS IS A HACK - RECOMMEND ADDING BUFFER SIZE ARGUMENT
-  if (!A || !B) return snprintf(buffer, 128, "%g", v);
-
-  // Figure out how many digits are required to correctly format the
-  // value.
-  int i, c = 0;
-  char temp[32];
-  // output a number with many digits after the decimal point. This
-  // seems to be needed to get high precission
-  snprintf(temp, sizeof(temp), "%.12f", A/B);
-  // strip all trailing 0's
-  for (i=(int) strlen(temp)-1; i>0; i--) {
-    if (temp[i]!='0') break;
-  }
-  // count digits until we find the decimal point (or comma or whatever
-  // letter is set in the current locale)
-  for (; i>0; i--, c++) {
-    if (!isdigit(temp[i])) break;
-  }
-
-  // MRS: THIS IS A HACK - RECOMMEND ADDING BUFFER SIZE ARGUMENT
-  return snprintf(buffer, 128, "%.*f", c, v);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Value_Input.cxx
+++ /dev/null
@@ -1,140 +1,0 @@
-//
-// "$Id$"
-//
-// Value input widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// FLTK widget for drag-adjusting a floating point value.
-// Warning: this works by making a child Fl_Input object, even
-// though this object is *not* an Fl_Group.  May be a kludge?
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Input.H>
-#include <FL/Fl_Group.H>
-#include <stdlib.h>
-#include <FL/math.h>
-
-
-void Fl_Value_Input::input_cb(Fl_Widget*, void* v) {
-  Fl_Value_Input& t = *(Fl_Value_Input*)v;
-  double nv;
-  if ((t.step() - floor(t.step()))>0.0 || t.step() == 0.0) nv = strtod(t.input.value(), 0);
-  else nv = strtol(t.input.value(), 0, 0);
-  if (nv != t.value() || t.when() & FL_WHEN_NOT_CHANGED) {
-    t.set_value(nv);
-    t.set_changed();
-    if (t.when()) t.do_callback();
-  }
-}
-
-void Fl_Value_Input::draw() {
-  if (damage()&~FL_DAMAGE_CHILD) input.clear_damage(FL_DAMAGE_ALL);
-  input.box(box());
-  input.color(color(), selection_color());
-  Fl_Widget *i = &input; i->draw(); // calls protected input.draw()
-  input.clear_damage();
-}
-
-void Fl_Value_Input::resize(int X, int Y, int W, int H) {
-  Fl_Valuator::resize(X, Y, W, H);
-  input.resize(X, Y, W, H);
-}
-
-void Fl_Value_Input::value_damage() {
-  char buf[128];
-  format(buf);
-  input.value(buf);
-  input.mark(input.position()); // turn off selection highlight
-}
-
-int Fl_Value_Input::handle(int event) {
-  double v;
-  int delta;
-  int mx = Fl::event_x_root();
-  static int ix, drag;
-  input.when(when());
-  switch (event) {
-  case FL_PUSH:
-    if (!step()) goto DEFAULT;
-    ix = mx;
-    drag = Fl::event_button();
-    handle_push();
-    return 1;
-  case FL_DRAG:
-    if (!step()) goto DEFAULT;
-    delta = mx-ix;
-    if (delta > 5) delta -= 5;
-    else if (delta < -5) delta += 5;
-    else delta = 0;
-    switch (drag) {
-    case 3: v = increment(previous_value(), delta*100); break;
-    case 2: v = increment(previous_value(), delta*10); break;
-    default:v = increment(previous_value(), delta); break;
-    }
-    v = round(v);
-    handle_drag(soft()?softclamp(v):clamp(v));;
-    return 1;
-  case FL_RELEASE:
-    if (!step()) goto DEFAULT;
-    if (value() != previous_value() || !Fl::event_is_click())
-      handle_release();
-    else {
-      Fl_Widget_Tracker wp(&input);
-      input.handle(FL_PUSH);
-      if (wp.exists())
-	input.handle(FL_RELEASE);
-    }
-    return 1;
-  case FL_FOCUS:
-    return input.take_focus();
-  case FL_SHORTCUT:
-    return input.handle(event);
-  default:
-  DEFAULT:
-    input.type(((step() - floor(step()))>0.0 || step() == 0.0) ? FL_FLOAT_INPUT : FL_INT_INPUT);
-    return input.handle(event);
-  }
-}
-
-/**
-  Creates a new Fl_Value_Input widget using the given
-  position, size, and label string. The default boxtype is
-  FL_DOWN_BOX.
-*/
-Fl_Value_Input::Fl_Value_Input(int X, int Y, int W, int H, const char* l)
-: Fl_Valuator(X, Y, W, H, l), input(X, Y, W, H, 0) {
-  soft_ = 0;
-  if (input.parent())  // defeat automatic-add
-    input.parent()->remove(input);
-  input.parent((Fl_Group *)this); // kludge!
-  input.callback(input_cb, this);
-  input.when(FL_WHEN_CHANGED);
-  box(input.box());
-  color(input.color());
-  selection_color(input.selection_color());
-  align(FL_ALIGN_LEFT);
-  value_damage();
-  set_flag(SHORTCUT_LABEL);
-}
-
-Fl_Value_Input::~Fl_Value_Input() {
-
-  if (input.parent() == (Fl_Group *)this)
-    input.parent(0);   // *revert* ctor kludge!
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Value_Output.cxx
+++ /dev/null
@@ -1,99 +1,0 @@
-//
-// "$Id$"
-//
-// Value output widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Fltk widget for drag-adjusting a floating point value.
-// This is much lighter than Fl_Value_Input because it has no text editor
-// If step() is zero then it can be used to display a floating-point value
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/fl_draw.H>
-
-void Fl_Value_Output::draw() {
-  Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;
-  int X = x()+Fl::box_dx(b);
-  int Y = y()+Fl::box_dy(b);
-  int W = w()-Fl::box_dw(b);
-  int H = h()-Fl::box_dh(b);
-  if (damage()&~FL_DAMAGE_CHILD)
-    draw_box(b, color());
-  else {
-    fl_color(color());
-    fl_rectf(X, Y, W, H);
-  }
-  char buf[128];
-  format(buf);
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  fl_font(textfont(), textsize());
-  fl_draw(buf,X,Y,W,H,FL_ALIGN_LEFT);
-}
-
-int Fl_Value_Output::handle(int event) {
-  if (!step()) return 0;
-  double v;
-  int delta;
-  int mx = Fl::event_x();
-  static int ix, drag;
-  switch (event) {
-  case FL_PUSH:
-    ix = mx;
-    drag = Fl::event_button();
-    handle_push();
-    return 1;
-  case FL_DRAG:
-    delta = Fl::event_x()-ix;
-    if (delta > 5) delta -= 5;
-    else if (delta < -5) delta += 5;
-    else delta = 0;
-    switch (drag) {
-    case 3: v = increment(previous_value(),delta*100); break;
-    case 2: v = increment(previous_value(),delta*10); break;
-    default:v = increment(previous_value(),delta); break;
-    }
-    v = round(v);
-    handle_drag(soft()?softclamp(v):clamp(v));;
-    return 1;
-  case FL_RELEASE:
-    handle_release();
-    return 1;
-  case FL_ENTER :
-  case FL_LEAVE :
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-/**
-  Creates a new Fl_Value_Output widget using the given
-  position, size, and label string. The default boxtype is FL_NO_BOX.
-  <P> Inherited destructor destroys the Valuator.
-*/
-Fl_Value_Output::Fl_Value_Output(int X, int Y, int W, int H,const char *l)
-: Fl_Valuator(X,Y,W,H,l) {
-  box(FL_NO_BOX);
-  align(FL_ALIGN_LEFT);
-  textfont_ = FL_HELVETICA;
-  textsize_ = FL_NORMAL_SIZE;
-  textcolor_ = FL_FOREGROUND_COLOR;
-  soft_ = 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Value_Slider.cxx
+++ /dev/null
@@ -1,85 +1,0 @@
-//
-// "$Id$"
-//
-// Value slider widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/fl_draw.H>
-#include <math.h>
-
-/**
-  Creates a new Fl_Value_Slider widget using the given
-  position, size, and label string. The default boxtype is FL_DOWN_BOX.
-*/
-Fl_Value_Slider::Fl_Value_Slider(int X, int Y, int W, int H, const char*l)
-: Fl_Slider(X,Y,W,H,l) {
-  step(1,100);
-  textfont_ = FL_HELVETICA;
-  textsize_ = 10;
-  textcolor_ = FL_FOREGROUND_COLOR;
-}
-
-void Fl_Value_Slider::draw() {
-  int sxx = x(), syy = y(), sww = w(), shh = h();
-  int bxx = x(), byy = y(), bww = w(), bhh = h();
-  if (horizontal()) {
-    bww = 35; sxx += 35; sww -= 35;
-  } else {
-    syy += 25; bhh = 25; shh -= 25;
-  }
-  if (damage()&FL_DAMAGE_ALL) draw_box(box(),sxx,syy,sww,shh,color());
-  Fl_Slider::draw(sxx+Fl::box_dx(box()),
-		  syy+Fl::box_dy(box()),
-		  sww-Fl::box_dw(box()),
-		  shh-Fl::box_dh(box()));
-  draw_box(box(),bxx,byy,bww,bhh,color());
-  char buf[128];
-  format(buf);
-  fl_font(textfont(), textsize());
-  fl_color(active_r() ? textcolor() : fl_inactive(textcolor()));
-  fl_draw(buf, bxx, byy, bww, bhh, FL_ALIGN_CLIP);
-}
-
-int Fl_Value_Slider::handle(int event) {
-  if (event == FL_PUSH && Fl::visible_focus()) {
-    Fl::focus(this);
-    redraw();
-  }
-  int sxx = x(), syy = y(), sww = w(), shh = h();
-  if (horizontal()) {
-    sxx += 35; sww -= 35;
-  } else {
-    syy += 25; shh -= 25;
-  }
-  return Fl_Slider::handle(event,
-			   sxx+Fl::box_dx(box()),
-			   syy+Fl::box_dy(box()),
-			   sww-Fl::box_dw(box()),
-			   shh-Fl::box_dh(box()));
-}
-
-
-Fl_Hor_Value_Slider::Fl_Hor_Value_Slider(int X,int Y,int W,int H,const char *l)
-: Fl_Value_Slider(X,Y,W,H,l) {
-  type(FL_HOR_SLIDER);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Widget.cxx
+++ /dev/null
@@ -1,356 +1,0 @@
-//
-// "$Id$"
-//
-// Base widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-
-////////////////////////////////////////////////////////////////
-// for compatibility with Forms, all widgets without callbacks are
-// inserted into a "queue" when they are activated, and the forms
-// compatibility interaction functions (fl_do_events, etc.) will
-// read one widget at a time from this queue and return it:
-
-const int QUEUE_SIZE = 20;
-
-static Fl_Widget *obj_queue[QUEUE_SIZE];
-static int obj_head, obj_tail;
-
-void Fl_Widget::default_callback(Fl_Widget *o, void * /*v*/) {
-#if 0
-  // This is necessary for strict forms compatibility but is confusing.
-  // Use the parent's callback if this widget does not have one.
-  for (Fl_Widget *p = o->parent(); p; p = p->parent())
-    if (p->callback() != default_callback) {
-      p->do_callback(o,v);
-      return;
-    }
-#endif
-  obj_queue[obj_head++] = o;
-  if (obj_head >= QUEUE_SIZE) obj_head = 0;
-  if (obj_head == obj_tail) {
-    obj_tail++;
-    if (obj_tail >= QUEUE_SIZE) obj_tail = 0;
-  }
-}
-/**
-    Reads the default callback queue and returns the first widget.
-
-    All Fl_Widgets that don't have a callback defined use the default
-    callback \p static Fl_Widget::default_callback() that puts a pointer
-    to the widget in a queue. This method reads the oldest widget out
-    of this queue.
-
-    The queue (FIFO) is limited (currently 20 items). If the queue
-    overflows, the oldest entry (Fl_Widget *) is discarded.
-
-    Relying on the default callback and reading the callback queue with
-    Fl::readqueue() is not recommended. If you need a callback, you should
-    set one with Fl_Widget::callback(Fl_Callback *cb, void *data)
-    or one of its variants.
-
-    \see Fl_Widget::callback()
-    \see Fl_Widget::callback(Fl_Callback *cb, void *data)
-    \see Fl_Widget::default_callback()
-*/
-Fl_Widget *Fl::readqueue() {
-  if (obj_tail==obj_head) return 0;
-  Fl_Widget *o = obj_queue[obj_tail++];
-  if (obj_tail >= QUEUE_SIZE) obj_tail = 0;
-  return o;
-}
-/*
-    This static internal function removes all pending callbacks for a
-    specific widget from the default callback queue (Fl::readqueue()).
-    It is only called from Fl_Widget's destructor if the widget
-    doesn't have an own callback.
-    Note: There's no need to have this in the Fl:: namespace.
-*/
-static void cleanup_readqueue(Fl_Widget *w) {
-
-  if (obj_tail==obj_head) return;
-  
-  // Read the entire queue and copy over all valid entries.
-  // The new head will be determined after the last copied entry.
-
-  int old_head = obj_head;	// save newest entry
-  int entry = obj_tail;		// oldest entry
-  obj_head = obj_tail;		// new queue start
-  for (;;) {
-    Fl_Widget *o = obj_queue[entry++];
-    if (entry >= QUEUE_SIZE) entry = 0;
-    if (o != w) { // valid entry
-      obj_queue[obj_head++] = o;
-      if (obj_head >= QUEUE_SIZE) obj_head = 0;
-    } // valid entry
-    if (entry == old_head) break;
-  }
-  return;
-}
-////////////////////////////////////////////////////////////////
-
-int Fl_Widget::handle(int) {
-  return 0;
-}
-
-/** Default font size for widgets */
-Fl_Fontsize FL_NORMAL_SIZE = 14;
-
-Fl_Widget::Fl_Widget(int X, int Y, int W, int H, const char* L) {
-
-  x_ = X; y_ = Y; w_ = W; h_ = H;
-
-  label_.value	 = L;
-  label_.image   = 0;
-  label_.deimage = 0;
-  label_.type	 = FL_NORMAL_LABEL;
-  label_.font	 = FL_HELVETICA;
-  label_.size	 = FL_NORMAL_SIZE;
-  label_.color	 = FL_FOREGROUND_COLOR;
-  label_.align_	 = FL_ALIGN_CENTER;
-  tooltip_       = 0;
-  callback_	 = default_callback;
-  user_data_ 	 = 0;
-  type_		 = 0;
-  flags_	 = VISIBLE_FOCUS;
-  damage_	 = 0;
-  box_		 = FL_NO_BOX;
-  color_	 = FL_GRAY;
-  color2_	 = FL_GRAY;
-  when_		 = FL_WHEN_RELEASE;
-
-  parent_ = 0;
-  if (Fl_Group::current()) Fl_Group::current()->add(this);
-  if (!fl_graphics_driver) {
-    // Make sure fl_graphics_driver is initialized. Important if we are called by a static initializer.
-    Fl_Display_Device::display_device();
-  }
-}
-
-void Fl_Widget::resize(int X, int Y, int W, int H) {
-  x_ = X; y_ = Y; w_ = W; h_ = H;
-}
-
-// this is useful for parent widgets to call to resize children:
-int Fl_Widget::damage_resize(int X, int Y, int W, int H) {
-  if (x() == X && y() == Y && w() == W && h() == H) return 0;
-  resize(X, Y, W, H);
-  redraw();
-  return 1;
-}
-
-int Fl_Widget::take_focus() {
-  if (!takesevents()) return 0;
-  if (!visible_focus()) return 0;
-  if (!handle(FL_FOCUS)) return 0; // see if it wants it
-  if (contains(Fl::focus())) return 1; // it called Fl::focus for us
-  Fl::focus(this);
-  return 1;
-}
-
-extern void fl_throw_focus(Fl_Widget*); // in Fl_x.cxx
-
-/**
-   Destroys the widget, taking care of throwing focus before if any.
-   Destruction removes the widget from any parent group! And groups when
-   destroyed destroy all their children. This is convenient and fast.
-*/
-Fl_Widget::~Fl_Widget() {
-  Fl::clear_widget_pointer(this);
-  if (flags() & COPIED_LABEL) free((void *)(label_.value));
-  if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
-  // remove from parent group
-  if (parent_) parent_->remove(this);
-#ifdef DEBUG_DELETE
-  if (parent_) { // this should never happen
-    printf("*** Fl_Widget: parent_->remove(this) failed [%p,%p]\n",parent_,this);
-  }
-#endif // DEBUG_DELETE
-  parent_ = 0; // Don't throw focus to a parent widget.
-  fl_throw_focus(this);
-  // remove stale entries from default callback queue (Fl::readqueue())
-  if (callback_ == default_callback) cleanup_readqueue(this);
-}
-
-/** Draws a focus box for the widget at the given position and size */
-void
-Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const {
-  if (!Fl::visible_focus()) return;
-  switch (B) {
-    case FL_DOWN_BOX:
-    case FL_DOWN_FRAME:
-    case FL_THIN_DOWN_BOX:
-    case FL_THIN_DOWN_FRAME:
-      X ++;
-      Y ++;
-    default:
-      break;
-  }
-
-  fl_color(fl_contrast(FL_BLACK, color()));
-
-#if defined(USE_X11) || defined(__APPLE_QUARTZ__)
-  fl_line_style(FL_DOT);
-  fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
-  fl_line_style(FL_SOLID);
-#elif defined(WIN32) 
-  // Windows 95/98/ME do not implement the dotted line style, so draw
-  // every other pixel around the focus area...
-  //
-  // Also, QuickDraw (MacOS) does not support line styles specifically,
-  // and the hack we use in fl_line_style() will not draw horizontal lines
-  // on odd-numbered rows...
-  int i, xx, yy;
-
-  X += Fl::box_dx(B);
-  Y += Fl::box_dy(B);
-  W -= Fl::box_dw(B) + 2;
-  H -= Fl::box_dh(B) + 2;
-
-  for (xx = 0, i = 1; xx < W; xx ++, i ++) if (i & 1) fl_point(X + xx, Y);
-  for (yy = 0; yy < H; yy ++, i ++) if (i & 1) fl_point(X + W, Y + yy);
-  for (xx = W; xx > 0; xx --, i ++) if (i & 1) fl_point(X + xx, Y + H);
-  for (yy = H; yy > 0; yy --, i ++) if (i & 1) fl_point(X, Y + yy);
-#else
-# error unsupported platform
-#endif // WIN32
-}
-
-
-void Fl_Widget::activate() {
-  if (!active()) {
-    clear_flag(INACTIVE);
-    if (active_r()) {
-      redraw();
-      redraw_label();
-      handle(FL_ACTIVATE);
-      if (inside(Fl::focus())) Fl::focus()->take_focus();
-    }
-  }
-}
-
-void Fl_Widget::deactivate() {
-  if (active_r()) {
-    set_flag(INACTIVE);
-    redraw();
-    redraw_label();
-    handle(FL_DEACTIVATE);
-    fl_throw_focus(this);
-  } else {
-    set_flag(INACTIVE);
-  }
-}
-
-int Fl_Widget::active_r() const {
-  for (const Fl_Widget* o = this; o; o = o->parent())
-    if (!o->active()) return 0;
-  return 1;
-}
-
-void Fl_Widget::show() {
-  if (!visible()) {
-    clear_flag(INVISIBLE);
-    if (visible_r()) {
-      redraw();
-      redraw_label();
-      handle(FL_SHOW);
-      if (inside(Fl::focus())) Fl::focus()->take_focus();
-    }
-  }
-}
-
-void Fl_Widget::hide() {
-  if (visible_r()) {
-    set_flag(INVISIBLE);
-    for (Fl_Widget *p = parent(); p; p = p->parent())
-      if (p->box() || !p->parent()) {p->redraw(); break;}
-    handle(FL_HIDE);
-    fl_throw_focus(this);
-  } else {
-    set_flag(INVISIBLE);
-  }
-}
-
-int Fl_Widget::visible_r() const {
-  for (const Fl_Widget* o = this; o; o = o->parent())
-    if (!o->visible()) return 0;
-  return 1;
-}
-
-// return true if widget is inside (or equal to) this:
-// Returns false for null widgets.
-int Fl_Widget::contains(const Fl_Widget *o) const {
-  for (; o; o = o->parent_) if (o == this) return 1;
-  return 0;
-}
-
-
-void
-Fl_Widget::label(const char *a) {
-  if (flags() & COPIED_LABEL) {
-    // reassigning a copied label remains the same copied label
-    if (label_.value == a)
-      return;
-    free((void *)(label_.value));
-    clear_flag(COPIED_LABEL);
-  }
-  label_.value=a;
-  redraw_label();
-}
-
-
-void
-Fl_Widget::copy_label(const char *a) {
-  // reassigning a copied label remains the same copied label
-  if ((flags() & COPIED_LABEL) && (label_.value == a))
-    return;
-  if (a) {
-    label(strdup(a));
-    set_flag(COPIED_LABEL);
-  } else {
-    label(0);
-  }
-}
-
-/** Calls the widget callback.
-
-  Causes a widget to invoke its callback function with arbitrary arguments.
-
-  \param[in] o call the callback with \p o as the widget argument
-  \param[in] arg use \p arg as the user data argument
-  \see callback()
-*/
-void
-Fl_Widget::do_callback(Fl_Widget* o,void* arg) {
-  if (!callback_) return;
-  Fl_Widget_Tracker wp(this);
-  callback_(o,arg);
-  if (wp.deleted()) return;
-  if (callback_ != default_callback)
-    clear_changed();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Window.cxx
+++ /dev/null
@@ -1,511 +1,0 @@
-//
-// "$Id$"
-//
-// Window widget class for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The Fl_Window is a window in the fltk library.
-// This is the system-independent portions.  The huge amount of 
-// crap you need to do to communicate with X is in Fl_x.cxx, the
-// equivalent (but totally different) crap for MSWindows is in Fl_win32.cxx
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/Fl_Window.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __APPLE_QUARTZ__
-#include <FL/fl_draw.H>
-#endif
-
-char *Fl_Window::default_xclass_ = 0L;
-
-void Fl_Window::_Fl_Window() {
-  type(FL_WINDOW);
-  box(FL_FLAT_BOX);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-    image(Fl::scheme_bg_);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  i = 0;
-  xclass_ = 0;
-  icon_ = new icon_data;
-  memset(icon_, 0, sizeof(*icon_));
-  iconlabel_ = 0;
-  resizable(0);
-  size_range_set = 0;
-  minw = maxw = minh = maxh = 0;
-  shape_data_ = NULL;
-
-#if FLTK_ABI_VERSION >= 10301
-  no_fullscreen_x = 0;
-  no_fullscreen_y = 0;
-  no_fullscreen_w = w();
-  no_fullscreen_h = h();
-#endif
-
-#if FLTK_ABI_VERSION >= 10303
-  fullscreen_screen_top = -1;
-  fullscreen_screen_bottom = -1;
-  fullscreen_screen_left = -1;
-  fullscreen_screen_right = -1;
-#endif
-
-  callback((Fl_Callback*)default_callback);
-}
-
-Fl_Window::Fl_Window(int X,int Y,int W, int H, const char *l)
-: Fl_Group(X, Y, W, H, l) {
-  cursor_default = FL_CURSOR_DEFAULT;
-
-  _Fl_Window();
-  set_flag(FORCE_POSITION);
-}
-
-Fl_Window::Fl_Window(int W, int H, const char *l)
-// fix common user error of a missing end() with current(0):
-  : Fl_Group((Fl_Group::current(0),0), 0, W, H, l) {
-  cursor_default = FL_CURSOR_DEFAULT;
-
-  _Fl_Window();
-  clear_visible();
-}
-
-Fl_Window::~Fl_Window() {
-  hide();
-  if (xclass_) {
-    free(xclass_);
-  }
-  free_icons();
-  delete icon_;
-  if (shape_data_) {
-    if (shape_data_->todelete_) delete shape_data_->todelete_;
-#if defined(__APPLE__)
-    if (shape_data_->mask) {
-      CGImageRelease(shape_data_->mask);
-    }
-#endif
-    delete shape_data_;
-  }
-}
-
-
-/** Returns a pointer to the nearest parent window up the widget hierarchy.
-    This will return sub-windows if there are any, or the parent window if there's no sub-windows.
-    If this widget IS the top-level window, NULL is returned.
-    \retval  NULL if no window is associated with this widget.
-    \note for an Fl_Window widget, this returns its <I>parent</I> window 
-          (if any), not <I>this</I> window.
-    \see top_window()
-*/
-Fl_Window *Fl_Widget::window() const {
-  for (Fl_Widget *o = parent(); o; o = o->parent())
-    if (o->type() >= FL_WINDOW) return (Fl_Window*)o;
-  return 0;
-}
-
-/** Returns a pointer to the top-level window for the widget.
-    In other words, the 'window manager window' that contains this widget.
-    This method differs from window() in that it won't return sub-windows (if there are any).
-    \returns the top-level window, or NULL if no top-level window is associated with this widget.
-    \see window()
-*/
-Fl_Window *Fl_Widget::top_window() const {
-  const Fl_Widget *w = this;
-  while (w->parent()) { w = w->parent(); }		// walk up the widget hierarchy to top-level item
-  return const_cast<Fl_Widget*>(w)->as_window();	// return if window, or NULL if not
-}
-
-/**
-  Finds the x/y offset of the current widget relative to the top-level window.
-  \param[out] xoff,yoff Returns the x/y offset
-  \returns the top-level window (or NULL for a widget that's not in any window)
-*/
-Fl_Window* Fl_Widget::top_window_offset(int& xoff, int& yoff) const {
-  xoff = yoff = 0;
-  const Fl_Widget *w = this;
-  while (w && w->window()) {
-    xoff += w->x();			// accumulate offsets
-    yoff += w->y();
-    w = w->window();			// walk up window hierarchy
-  }
-  return const_cast<Fl_Widget*>(w)->as_window();
-}
-
-/** Gets the x position of the window on the screen */
-int Fl_Window::x_root() const {
-  Fl_Window *p = window();
-  if (p) return p->x_root() + x();
-  return x();
-}
-/** Gets the y position of the window on the screen */
-int Fl_Window::y_root() const {
-  Fl_Window *p = window();
-  if (p) return p->y_root() + y();
-  return y();
-}
-
-void Fl_Window::label(const char *name) {
-  label(name, iconlabel());	// platform dependent
-}
-
-/** Sets the window titlebar label to a copy of a character string */
-void Fl_Window::copy_label(const char *a) {
-  Fl_Widget::copy_label(a);
-  label(label(), iconlabel());	// platform dependent
-}
-
-void Fl_Window::iconlabel(const char *iname) {
-  label(label(), iname);	// platform dependent
-}
-
-// the Fl::atclose pointer is provided for back compatibility.  You
-// can now just change the callback for the window instead.
-
-/** Default callback for window widgets. It hides the window and then calls the default widget callback. */
-void Fl::default_atclose(Fl_Window* window, void* v) {
-  window->hide();
-  Fl_Widget::default_callback(window, v); // put on Fl::read_queue()
-}
-/** Back compatibility: default window callback handler \see Fl::set_atclose() */
-void (*Fl::atclose)(Fl_Window*, void*) = default_atclose;
-/** Back compatibility: Sets the default callback v for win to call on close event */
-void Fl_Window::default_callback(Fl_Window* win, void* v) {
-  Fl::atclose(win, v);
-}
-
-/**  Returns the last window that was made current. \see Fl_Window::make_current() */
-Fl_Window *Fl_Window::current() {
-  return current_;
-}
-
-/** Returns the default xclass.
-
-  \see Fl_Window::default_xclass(const char *)
-
- */
-const char *Fl_Window::default_xclass()
-{
-  if (default_xclass_) {
-    return default_xclass_;
-  } else {
-    return "FLTK";
-  }
-}
-
-/** Sets the default window xclass.
-
-  The default xclass is used for all windows that don't have their
-  own xclass set before show() is called. You can change the default
-  xclass whenever you want, but this only affects windows that are
-  created (and shown) after this call.
-
-  The given string \p xc is copied. You can use a local variable or
-  free the string immediately after this call.
-
-  If you don't call this, the default xclass for all windows will be "FLTK".
-  You can reset the default xclass by specifying NULL for \p xc.
-
-  If you call Fl_Window::xclass(const char *) for any window, then
-  this also sets the default xclass, unless it has been set before.
-
-  \param[in] xc default xclass for all windows subsequently created
-
-  \see Fl_Window::xclass(const char *)
-*/
-void Fl_Window::default_xclass(const char *xc)
-{
-  if (default_xclass_) {
-    free(default_xclass_);
-    default_xclass_ = 0L;
-  }
-  if (xc) {
-    default_xclass_ = strdup(xc);
-  }
-}
-
-/** Sets the xclass for this window.
-
-  A string used to tell the system what type of window this is. Mostly
-  this identifies the picture to draw in the icon. This only works if
-  called \e before calling show().
-
-  <I>Under X</I>, this is turned into a XA_WM_CLASS pair by truncating at
-  the first non-alphanumeric character and capitalizing the first character,
-  and the second one if the first is 'x'.  Thus "foo" turns into "foo, Foo",
-  and "xprog.1" turns into "xprog, XProg".
-
-  <I>Under Microsoft Windows</I>, this string is used as the name of the
-  WNDCLASS structure, though it is not clear if this can have any
-  visible effect.
-
-  \since FLTK 1.3 the passed string is copied. You can use a local
-  variable or free the string immediately after this call. Note that
-  FLTK 1.1 stores the \e pointer without copying the string.
-
-  If the default xclass has not yet been set, this also sets the
-  default xclass for all windows created subsequently.
-
-  \see Fl_Window::default_xclass(const char *)
-*/
-void Fl_Window::xclass(const char *xc) 
-{
-  if (xclass_) {
-    free(xclass_);
-    xclass_ = 0L;
-  }
-  if (xc) {
-    xclass_ = strdup(xc);
-    if (!default_xclass_) {
-      default_xclass(xc);
-    }
-  }
-}
-
-/** Returns the xclass for this window, or a default.
-
-  \see Fl_Window::default_xclass(const char *)
-  \see Fl_Window::xclass(const char *)
-*/
-const char *Fl_Window::xclass() const
-{
-  if (xclass_) {
-    return xclass_;
-  } else {
-    return default_xclass();
-  }
-}
-
-/** Sets a single default window icon.
-
-  If \p icon is NULL the current default icons are removed.
-
-  \param[in] icon default icon for all windows subsequently created or NULL
-
-  \see Fl_Window::default_icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::icon(const Fl_RGB_Image *)
-  \see Fl_Window::icons(const Fl_RGB_Image *[], int)
- */
-void Fl_Window::default_icon(const Fl_RGB_Image *icon) {
-  if (icon)
-    default_icons(&icon, 1);
-  else
-    default_icons(&icon, 0);
-}
-
-/** Sets the default window icons.
-
-  The default icons are used for all windows that don't have their
-  own icons set before show() is called. You can change the default
-  icons whenever you want, but this only affects windows that are
-  created (and shown) after this call.
-
-  The given images in \p icons are copied. You can use a local
-  variable or free the images immediately after this call.
-
-  \param[in] icons default icons for all windows subsequently created
-  \param[in] count number of images in \p icons. Set to 0 to remove
-                   the current default icons
-
-  \see Fl_Window::default_icon(const Fl_RGB_Image *)
-  \see Fl_Window::icon(const Fl_RGB_Image *)
-  \see Fl_Window::icons(const Fl_RGB_Image *[], int)
- */
-void Fl_Window::default_icons(const Fl_RGB_Image *icons[], int count) {
-  Fl_X::set_default_icons(icons, count);
-}
-
-/** Sets or resets a single window icon.
-
-  A window icon \e can be changed while the window is shown, but this
-  \e may be platform and/or window manager dependent. To be sure that
-  the window displays the correct window icon you should always set the
-  icon before the window is shown.
-
-  If a window icon has not been set for a particular window, then the
-  default window icon (see links below) or the system default icon will
-  be used.
-
-  \param[in] icon icon for this window, NULL to reset window icon.
-
-  \see Fl_Window::default_icon(const Fl_RGB_Image *)
-  \see Fl_Window::default_icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::icons(const Fl_RGB_Image *[], int)
- */
-void Fl_Window::icon(const Fl_RGB_Image *icon) {
-  if (icon)
-    icons(&icon, 1);
-  else
-    icons(&icon, 0);
-}
-
-/** Sets the window icons.
-
-  You may set multiple window icons with different sizes. Dependent on
-  the platform and system settings the best (or the first) icon will be
-  chosen.
-
-  The given images in \p icons are copied. You can use a local
-  variable or free the images immediately after this call.
-
-  If \p count is zero, current icons are removed. If \p count is greater than
-  zero (must not be negative), then \p icons[] must contain at least \p count
-  valid image pointers (not NULL). Otherwise the behavior is undefined.
-
-  \param[in] icons icons for this window
-  \param[in] count number of images in \p icons. Set to 0 to remove
-                   the current icons
-
-  \see Fl_Window::default_icon(const Fl_RGB_Image *)
-  \see Fl_Window::default_icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::icon(const Fl_RGB_Image *)
- */
-void Fl_Window::icons(const Fl_RGB_Image *icons[], int count) {
-  free_icons();
-
-  if (count > 0) {
-    icon_->icons = new Fl_RGB_Image*[count];
-    icon_->count = count;
-    // FIXME: Fl_RGB_Image lacks const modifiers on methods
-    for (int i = 0;i < count;i++)
-      icon_->icons[i] = (Fl_RGB_Image*)((Fl_RGB_Image*)icons[i])->copy();
-  }
-
-  if (i)
-    i->set_icons();
-}
-
-/** Gets the current icon window target dependent data.
-  \deprecated in 1.3.3
- */
-const void *Fl_Window::icon() const {
-  return icon_->legacy_icon;
-}
-
-/** Sets the current icon window target dependent data.
-  \deprecated in 1.3.3
- */
-void Fl_Window::icon(const void * ic) {
-  free_icons();
-  icon_->legacy_icon = ic;
-}
-
-/** Deletes all icons previously attached to the window.
- \see Fl_Window::icons(const Fl_RGB_Image *icons[], int count)
- */
-void Fl_Window::free_icons() {
-  int i;
-
-  icon_->legacy_icon = 0L;
-
-  if (icon_->icons) {
-    for (i = 0;i < icon_->count;i++)
-      delete icon_->icons[i];
-    delete [] icon_->icons;
-    icon_->icons = 0L;
-  }
-
-  icon_->count = 0;
-
-#ifdef WIN32
-  if (icon_->big_icon)
-    DestroyIcon(icon_->big_icon);
-  if (icon_->small_icon)
-    DestroyIcon(icon_->small_icon);
-
-  icon_->big_icon = NULL;
-  icon_->small_icon = NULL;
-#endif
-}
-
-
-#ifndef __APPLE__
-/**
-  Waits for the window to be displayed after calling show().
-
-  Fl_Window::show() is not guaranteed to show and draw the window on
-  all platforms immediately. Instead this is done in the background;
-  particularly on X11 it will take a few messages (client server
-  roundtrips) to display the window. Usually this small delay doesn't
-  matter, but in some cases you may want to have the window instantiated
-  and displayed synchronously.
-
-  Currently (as of FLTK 1.3.4) this method has an effect on X11 and Mac OS.
-  On Windows, show() is always synchronous. The effect of show() varies with
-  versions of Mac OS X: early versions have the window appear on the screen
-  when show() returns, later versions don't.
-  If you want to write portable code and need this synchronous show() feature,
-  add win->wait_for_expose() on all platforms, and FLTK will just do the
-  right thing.
-
-  This method can be used for displaying splash screens before
-  calling Fl::run() or for having exact control over which window
-  has the focus after calling show().
-
-  If the window is not shown(), this method does nothing.
-
-  \note Depending on the platform and window manager wait_for_expose()
-    may not guarantee that the window is fully drawn when it is called.
-    Under X11 it may only make sure that the window is \b mapped, i.e.
-    the internal (OS dependent) window object was created (and maybe
-    shown on the desktop as an empty frame or something like that).
-    You may need to call Fl::flush() after wait_for_expose() to make
-    sure the window and all its widgets are drawn and thus visible.
-
-  \note FLTK does the best it can do to make sure that all widgets
-    get drawn if you call wait_for_expose() and Fl::flush(). However,
-    dependent on the window manager it can not be guaranteed that this
-    does always happen synchronously. The only guaranteed behavior that
-    all widgets are eventually drawn is if the FLTK event loop is run
-    continuously, for instance with Fl::run().
-
-  \see virtual void Fl_Window::show()
-
-  Example code for displaying a window before calling Fl::run()
-
-  \code
-    Fl_Double_Window win = new Fl_Double_Window(...);
-
-    // do more window initialization here ...
-
-    win->show();                // show window
-    win->wait_for_expose();     // wait, until displayed
-    Fl::flush();                // make sure everything gets drawn
-
-    // do more initialization work that needs some time here ...
-
-    Fl::run();                  // start FLTK event loop
-  \endcode
-
-  Note that the window will not be responsive until the event loop
-  is started with Fl::run().
-*/
-
-void Fl_Window::wait_for_expose() {
-  if (!shown()) return;
-  while (!i || i->wait_for_expose) {
-    Fl::wait();
-  }
-}
-#endif  // ! __APPLE__
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Window_fullscreen.cxx
+++ /dev/null
@@ -1,125 +1,0 @@
-//
-// "$Id$"
-//
-// Fullscreen window support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Turning the border on/off by changing the motif_wm_hints property
-// works on Irix 4DWM.  Does not appear to work for any other window
-// manager.  Fullscreen still works on some window managers (fvwm is one)
-// because they allow the border to be placed off-screen.
-
-// Unfortunately most X window managers ignore changes to the border
-// and refuse to position the border off-screen, so attempting to make
-// the window full screen will lose the size of the border off the
-// bottom and right.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-#include <config.h>
-
-#if FLTK_ABI_VERSION < 10301
-int Fl_Window::no_fullscreen_x = 0;
-int Fl_Window::no_fullscreen_y = 0;
-int Fl_Window::no_fullscreen_w = 0;
-int Fl_Window::no_fullscreen_h = 0;
-#endif
-
-#if FLTK_ABI_VERSION < 10303
-int Fl_Window::fullscreen_screen_top = -1;
-int Fl_Window::fullscreen_screen_bottom = -1;
-int Fl_Window::fullscreen_screen_left = -1;
-int Fl_Window::fullscreen_screen_right = -1;
-#endif
-
-void Fl_Window::border(int b) {
-  if (b) {
-    if (border()) return;
-    clear_flag(NOBORDER);
-  } else {
-    if (!border()) return;
-    set_flag(NOBORDER);
-  }
-#if defined(USE_X11)
-  if (shown()) Fl_X::i(this)->sendxjunk();
-#elif defined(WIN32)
-  // not yet implemented, but it's possible
-  // for full fullscreen we have to make the window topmost as well
-#elif defined(__APPLE_QUARTZ__)
-  // warning: not implemented in Quartz/Carbon
-#else
-# error unsupported platform
-#endif
-}
-
-/* Note: The previous implementation toggled border(). With this new
-   implementation this is not necessary. Additionally, if we do that,
-   the application may lose focus when switching out of fullscreen
-   mode with some window managers. Besides, the API does not say that
-   the FLTK border state should be toggled; it only says that the
-   borders should not be *visible*. 
-*/
-void Fl_Window::fullscreen() {
-  no_fullscreen_x = x();
-  no_fullscreen_y = y();
-  no_fullscreen_w = w();
-  no_fullscreen_h = h();
-  if (shown() && !(flags() & Fl_Widget::FULLSCREEN)) {
-    fullscreen_x();
-  } else {
-    set_flag(FULLSCREEN);
-  }
-}
-
-void Fl_Window::fullscreen_off(int X,int Y,int W,int H) {
-  if (shown() && (flags() & Fl_Widget::FULLSCREEN)) {
-    fullscreen_off_x(X, Y, W, H);
-  } else {
-    clear_flag(FULLSCREEN);
-  }
-  no_fullscreen_x = no_fullscreen_y = no_fullscreen_w = no_fullscreen_h = 0;
-}
-
-void Fl_Window::fullscreen_off() {
-  if (!no_fullscreen_x && !no_fullscreen_y) {
-    // Window was initially created fullscreen - default to current monitor
-    no_fullscreen_x = x();
-    no_fullscreen_y = y();
-  }
-  fullscreen_off(no_fullscreen_x, no_fullscreen_y, no_fullscreen_w, no_fullscreen_h);
-}
-
-void Fl_Window::fullscreen_screens(int top, int bottom, int left, int right) {
-  if ((top < 0) || (bottom < 0) || (left < 0) || (right < 0)) {
-    fullscreen_screen_top = -1;
-    fullscreen_screen_bottom = -1;
-    fullscreen_screen_left = -1;
-    fullscreen_screen_right = -1;
-  } else {
-    fullscreen_screen_top = top;
-    fullscreen_screen_bottom = bottom;
-    fullscreen_screen_left = left;
-    fullscreen_screen_right = right;
-  }
-
-  if (shown() && fullscreen_active())
-    fullscreen_x();
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Window_hotspot.cxx
+++ /dev/null
@@ -1,91 +1,0 @@
-//
-// "$Id$"
-//
-// Common hotspot routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include <stdio.h>
-
-void Fl_Window::hotspot(int X, int Y, int offscreen) {
-  int mx,my;
-
-  // Update the screen position based on the mouse position.
-  Fl::get_mouse(mx,my);
-  X = mx-X; Y = my-Y;
-
-  // If offscreen is 0 (the default), make sure that the window
-  // stays on the screen, if possible.
-  if (!offscreen) {
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_work_area(scr_x, scr_y, scr_w, scr_h);
-
-    int top = 0;
-    int left = 0;
-    int right = 0;
-    int bottom = 0;
-
-    if (border()) {
-#ifdef WIN32
-      if (size_range_set && (maxw != minw || maxh != minh)) {
-        left = right = GetSystemMetrics(SM_CXSIZEFRAME);
-        top = bottom = GetSystemMetrics(SM_CYSIZEFRAME);
-      } else {
-        left = right = GetSystemMetrics(SM_CXFIXEDFRAME); 
-        top = bottom = GetSystemMetrics(SM_CYFIXEDFRAME);
-      }
-      top += GetSystemMetrics(SM_CYCAPTION);
-#elif defined(__APPLE__)
-      top = 24;
-      left = 2;
-      right = 2;
-      bottom = 2;
-#else
-      // Ensure border is on screen; these values are generic enough
-      // to work with many window managers, and are based on KDE defaults.
-      top = 20;
-      left = 4;
-      right = 4;
-      bottom = 8;
-#endif
-    }
-    // now insure contents are on-screen (more important than border):
-    if (X+w()+right > scr_w+scr_x) X = scr_w+scr_x-right-w();
-    if (X-left < scr_x) X = left + scr_x;
-    if (Y+h()+bottom > scr_h+scr_y) Y = scr_h+scr_y-bottom-h();
-    if (Y-top < scr_y) Y = top + scr_y;
-    // make sure that we will force this position
-    if (X==x()) x(X-1);
-  }
-
-  position(X,Y);
-}
-
-void Fl_Window::hotspot(const Fl_Widget *o, int offscreen) {
-  int X = o->w()/2;
-  int Y = o->h()/2;
-  while (o != this && o) {
-    X += o->x(); Y += o->y();
-    o = o->window();
-  }
-  hotspot(X,Y,offscreen);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Window_iconize.cxx
+++ /dev/null
@@ -1,40 +1,0 @@
-//
-// "$Id$"
-//
-// Window minification code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/x.H>
-
-extern char fl_show_iconic; // in Fl_x.cxx
-
-void Fl_Window::iconize() {
-  if (!shown()) {
-    fl_show_iconic = 1;
-    show();
-  } else {
-#ifdef WIN32
-    ShowWindow(i->xid, SW_SHOWMINNOACTIVE);
-#elif defined(__APPLE__)
-    i->collapse();
-#else
-    XIconifyWindow(fl_display, i->xid, fl_screen);
-#endif
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Window_shape.cxx
+++ /dev/null
@@ -1,426 +1,0 @@
-//
-// "$Id$"
-//
-// Implementation of Fl_Window::shape(Fl_Image*) for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2010-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems to:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Pixmap.H>
-#include <string.h>
-
-#ifdef WIN32
-# include <malloc.h> // needed for VisualC2010
-#elif !defined(__APPLE__)
-#include <config.h>
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-#define ShapeBounding			0
-#define ShapeSet			0
-#endif
-
-
-#if defined(__APPLE__)
-
-static void MyProviderReleaseData (void *info, const void *data, size_t size) {
-  delete[] (uchar*)data;
-}
-
-// bitwise inversion of all 4-bit quantities
-static const unsigned char swapped[16] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
-
-static inline uchar swap_byte(const uchar b) {
-  // reverse the order of bits of byte b: 1->8 becomes 8->1
-  return (swapped[b & 0xF] << 4) | swapped[b >> 4];
-}
-
-#elif defined(WIN32)
-
-static inline BYTE bit(int x) { return (BYTE)(1 << (x%8)); }
-
-static HRGN bitmap2region(Fl_Image* image) {
-  HRGN hRgn = 0;
-  /* Does this need to be dynamically determined, perhaps? */
-  const int ALLOC_UNIT = 100;
-  DWORD maxRects = ALLOC_UNIT;
-  
-  RGNDATA* pData = (RGNDATA*)malloc(sizeof(RGNDATAHEADER)+(sizeof(RECT)*maxRects));
-  pData->rdh.dwSize = sizeof(RGNDATAHEADER);
-  pData->rdh.iType = RDH_RECTANGLES;
-  pData->rdh.nCount = pData->rdh.nRgnSize = 0;
-  SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-  
-  const int bytesPerLine = (image->w() + 7)/8;
-  BYTE* p, *data = (BYTE*)*image->data();
-  for (int y = 0; y < image->h(); y++) {
-    // each row, left to right
-    for (int x = 0; x < image->w(); x++) {
-      int x0 = x;
-      while (x < image->w()) {
-	p = data + x / 8;
-	if (!((*p) & bit(x))) break; // transparent pixel
-	x++;
-      }
-      if (x > x0) {
-	RECT *pr;
-	/* Add the pixels (x0, y) to (x, y+1) as a new rectangle
-	 * in the region
-	 */
-	if (pData->rdh.nCount >= maxRects) {
-	  maxRects += ALLOC_UNIT;
-	  pData = (RGNDATA*)realloc(pData, sizeof(RGNDATAHEADER)
-				    + (sizeof(RECT)*maxRects));
-	}
-	pr = (RECT*)&pData->Buffer;
-	SetRect(&pr[pData->rdh.nCount], x0, y, x, y+1);
-	if (x0 < pData->rdh.rcBound.left)
-	  pData->rdh.rcBound.left = x0;
-	if (y < pData->rdh.rcBound.top)
-	  pData->rdh.rcBound.top = y;
-	if (x > pData->rdh.rcBound.right)
-	  pData->rdh.rcBound.right = x;
-	if (y+1 > pData->rdh.rcBound.bottom)
-	  pData->rdh.rcBound.bottom = y+1;
-	pData->rdh.nCount++;
-	/* On Windows98, ExtCreateRegion() may fail if the
-	 * number of rectangles is too large (ie: >
-	 * 4000). Therefore, we have to create the region by
-	 * multiple steps.
-	 */
-	if (pData->rdh.nCount == 2000) {
-	  HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER)
-				   + (sizeof(RECT)*maxRects), pData);
-	  if (hRgn) {
-	    CombineRgn(hRgn, hRgn, h, RGN_OR);
-	    DeleteObject(h);
-	  } else 
-	    hRgn = h;
-	  pData->rdh.nCount = 0;
-	  SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-	}
-      }
-    }
-    /* Go to next row */
-    data += bytesPerLine;
-  }
-  /* Create or extend the region with the remaining rectangles*/
-  HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER)
-			   + (sizeof(RECT)*maxRects), pData);
-  if (hRgn) {
-    CombineRgn(hRgn, hRgn, h, RGN_OR);
-    DeleteObject(h);
-  } else hRgn = h;
-  free(pData); // I've created the region so I can free this now, right?
-  return hRgn;
-}
-
-#else
-
-#ifndef FL_DOXYGEN
-void Fl_Window::combine_mask()
-{
-  typedef void (*XShapeCombineMask_type)(Display*, int, int, int, int, Pixmap, int);
-  static XShapeCombineMask_type XShapeCombineMask_f = NULL;
-  static int beenhere = 0;
-  typedef Bool (*XShapeQueryExtension_type)(Display*, int*, int*);
-  if (!beenhere) {
-    beenhere = 1;
-#if HAVE_DLSYM && HAVE_DLFCN_H
-    fl_open_display();
-    void *handle = dlopen(NULL, RTLD_LAZY); // search symbols in executable
-    XShapeQueryExtension_type XShapeQueryExtension_f = (XShapeQueryExtension_type)dlsym(handle, "XShapeQueryExtension");
-    XShapeCombineMask_f = (XShapeCombineMask_type)dlsym(handle, "XShapeCombineMask");
-    // make sure that the X server has the SHAPE extension
-    int error_base, shapeEventBase;
-    if ( !( XShapeQueryExtension_f && XShapeCombineMask_f &&
-	   XShapeQueryExtension_f(fl_display, &shapeEventBase, &error_base) ) ) XShapeCombineMask_f = NULL;
-#endif
-  }
-  if (!XShapeCombineMask_f) return;
-  shape_data_->lw_ = w();
-  shape_data_->lh_ = h();
-  Fl_Image* temp = shape_data_->shape_->copy(shape_data_->lw_, shape_data_->lh_);
-  Pixmap pbitmap = XCreateBitmapFromData(fl_display, fl_xid(this),
-					 (const char*)*temp->data(),
-					 temp->w(), temp->h());
-  XShapeCombineMask_f(fl_display, fl_xid(this), ShapeBounding, 0, 0, pbitmap, ShapeSet);
-  if (pbitmap != None) XFreePixmap(fl_display, pbitmap);
-  delete temp;
-}
-#endif // !FL_DOXYGEN
-
-#endif // __APPLE__
-
-
-void Fl_Window::shape_bitmap_(Fl_Image* b) {
-  shape_data_->shape_ = b;
-#if defined(__APPLE__)
-  if (b) {
-    // complement mask bits and perform bitwise inversion of all bytes and also reverse top and bottom
-    int bytes_per_row = (b->w() + 7)/8;
-    uchar *from = new uchar[bytes_per_row * b->h()];
-    for (int i = 0; i < b->h(); i++) {
-      uchar *p = (uchar*)(*b->data()) + bytes_per_row * i;
-      uchar *last = p + bytes_per_row;
-      uchar *q = from + (b->h() - 1 - i) * bytes_per_row;
-      while (p < last) {
-        *q++ = swap_byte(~*p++);
-      }
-    }
-    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, from, bytes_per_row * b->h(), MyProviderReleaseData);
-    shape_data_->mask = CGImageMaskCreate(b->w(), b->h(), 1, 1, bytes_per_row, provider, NULL, false);
-    CFRelease(provider);
-  }  
-#endif
-}
-
-
-#if defined(__APPLE__) // on the mac, use an 8-bit mask
-/* the image can be of any depth
- offset gives the byte offset from the pixel start to the byte used to construct the shape
- */
-void Fl_Window::shape_alpha_(Fl_Image* img, int offset) {
-  int i, d = img->d(), w = img->w(), h = img->h();
-  shape_data_->shape_ = img;
-  if (shape_data_->shape_) {
-    // reverse top and bottom and convert to gray scale if img->d() == 3 and complement bits
-    int bytes_per_row = w * d;
-    uchar *from = new uchar[w * h];
-    for ( i = 0; i < h; i++) {
-      uchar *p = (uchar*)(*img->data()) + bytes_per_row * i + offset;
-      uchar *last = p + bytes_per_row;
-      uchar *q = from + (h - 1 - i) * w;
-      while (p < last) {
-        if (d == 3) {
-          unsigned u = *p++;
-          u += *p++;
-          u += *p++;
-          *q++ = ~(u/3);
-        }
-        else {
-          *q++ = ~(*p);
-          p += d;
-        }
-      }
-    }
-    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, from, w * h, MyProviderReleaseData);
-    shape_data_->mask = CGImageMaskCreate(w, h, 8, 8, w, provider, NULL, false);
-    CFRelease(provider);
-  }  
-}
-
-#else
-
-/* the img image can be of any depth
- offset gives the byte offset from the pixel start to the byte used to construct the shape
- */
-void Fl_Window::shape_alpha_(Fl_Image* img, int offset) {
-  int i, j, d = img->d(), w = img->w(), h = img->h(), bytesperrow = (w+7)/8;
-  unsigned u;
-  uchar byte, onebit;
-  // build an Fl_Bitmap covering the non-fully transparent/black part of the image
-  const uchar* bits = new uchar[h*bytesperrow]; // to store the bitmap
-  const uchar* alpha = (const uchar*)*img->data() + offset; // points to alpha value of rgba pixels
-  for (i = 0; i < h; i++) {
-    uchar *p = (uchar*)bits + i * bytesperrow;
-    byte = 0;
-    onebit = 1;
-    for (j = 0; j < w; j++) {
-      if (d == 3) {
-        u = *alpha;
-        u += *(alpha+1);
-        u += *(alpha+2);
-      }
-      else u = *alpha;
-      if (u > 0) { // if the pixel is not fully transparent/black
-        byte |= onebit; // turn on the corresponding bit of the bitmap
-      }
-      onebit = onebit << 1; // move the single set bit one position to the left
-      if (onebit == 0 || j == w-1) {
-        onebit = 1;
-        *p++ = byte; // store in bitmap one pack of bits
-        byte = 0;
-      }
-      alpha += d; // point to alpha value of next pixel
-    }
-  }
-  Fl_Bitmap* bitmap = new Fl_Bitmap(bits, w, h);
-  bitmap->alloc_array = 1;
-  shape_bitmap_(bitmap);
-  shape_data_->todelete_ = bitmap;
-}
-
-#endif
-
-
-void Fl_Window::shape_pixmap_(Fl_Image* pixmap) {
-  Fl_RGB_Image* rgba = new Fl_RGB_Image((Fl_Pixmap*)pixmap);
-  shape_alpha_(rgba, 3);
-  delete rgba;
-}
-
-#if FLTK_ABI_VERSION < 10303 && !defined(FL_DOXYGEN)
-Fl_Window::shape_data_type* Fl_Window::shape_data_ = NULL;
-#endif
-
-/** Assigns a non-rectangular shape to the window.
- This function gives an arbitrary shape (not just a rectangular region) to an Fl_Window.
- An Fl_Image of any dimension can be used as mask; it is rescaled to the window's dimension as needed.
- 
- The layout and widgets inside are unaware of the mask shape, and most will act as though the window's
- rectangular bounding box is available
- to them. It is up to you to make sure they adhere to the bounds of their masking shape.
- 
- The \p img argument can be an Fl_Bitmap, Fl_Pixmap, Fl_RGB_Image or Fl_Shared_Image:
- \li With Fl_Bitmap or Fl_Pixmap, the shaped window covers the image part where bitmap bits equal one,
- or where the pixmap is not fully transparent.
- \li With an Fl_RGB_Image with an alpha channel (depths 2 or 4), the shaped window covers the image part
- that is not fully transparent.
- \li With an Fl_RGB_Image of depth 1 (gray-scale) or 3 (RGB), the shaped window covers the non-black image part.
- \li With an Fl_Shared_Image, the shape is determined by rules above applied to the underlying image.
- The shared image should not have been scaled through Fl_Shared_Image::scale().
- 
- Platform details:
- \li On the unix/linux platform, the SHAPE extension of the X server is required.
- This function does control the shape of Fl_Gl_Window instances.
- \li On the MSWindows platform, this function does nothing with class Fl_Gl_Window.
- \li On the Mac platform, OS version 10.4 or above is required. 
- An 8-bit shape-mask is used when \p img is an Fl_RGB_Image:
- with depths 2 or 4, the image alpha channel becomes the shape mask such that areas with alpha = 0
- are out of the shaped window;
- with depths 1 or 3, white and black are in and out of the
- shaped window, respectively, and other colors give intermediate masking scores.
- This function does nothing with class Fl_Gl_Window.
-
- The window borders and caption created by the window system are turned off by default. They
- can be re-enabled by calling Fl_Window::border(1).
- 
- A usage example is found at example/shapedwindow.cxx.
- 
- \version 1.3.3 (and requires compilation with FLTK_ABI_VERSION >= 10303)
- */
-void Fl_Window::shape(const Fl_Image* img) {
-#if FLTK_ABI_VERSION >= 10303
-  if (shape_data_) {
-    if (shape_data_->todelete_) { delete shape_data_->todelete_; }
-#if defined(__APPLE__)
-    if (shape_data_->mask) { CGImageRelease(shape_data_->mask); }
-#endif
-    }
-  else {
-    shape_data_ = new shape_data_type;
-    }
-  memset(shape_data_, 0, sizeof(shape_data_type));
-  border(false);
-  int d = img->d();
-  if (d && img->count() >= 2) shape_pixmap_((Fl_Image*)img);
-  else if (d == 0) shape_bitmap_((Fl_Image*)img);
-  else if (d == 2 || d == 4) shape_alpha_((Fl_Image*)img, d - 1);
-  else if ((d == 1 || d == 3) && img->count() == 1) shape_alpha_((Fl_Image*)img, 0);
-#endif
-}
-
-void Fl_Window::draw() {
-  if (shape_data_) {
-# if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-    if (shape_data_->mask && (&CGContextClipToMask != NULL)) {
-      CGContextClipToMask(fl_gc, CGRectMake(0,0,w(),h()), shape_data_->mask); // requires Mac OS 10.4
-    }
-    CGContextSaveGState(fl_gc);
-#elif defined(WIN32)
-    if ((shape_data_->lw_ != w() || shape_data_->lh_ != h()) && shape_data_->shape_) {
-      // size of window has changed since last time
-      shape_data_->lw_ = w();
-      shape_data_->lh_ = h();
-      Fl_Image* temp = shape_data_->shape_->copy(shape_data_->lw_, shape_data_->lh_);
-      HRGN region = bitmap2region(temp);
-      SetWindowRgn(fl_xid(this), region, TRUE); // the system deletes the region when it's no longer needed
-      delete temp;
-    }
-#elif !(defined(__APPLE__) || defined(WIN32))
-    if (( shape_data_->lw_ != w() || shape_data_->lh_ != h() ) && shape_data_->shape_) {
-        // size of window has changed since last time
-    combine_mask();
-    }
-# endif
-  }
-
-  // The following is similar to Fl_Group::draw(), but ...
-  //
-  //  - draws the box at (0,0), i.e. with x=0 and y=0 instead of x() and y()
-  //  - does NOT draw the label (text)
-  //  - draws the image only if FL_ALIGN_INSIDE is set
-  //
-  // Note: The label (text) of top level windows is drawn in the title bar.
-  //   Other windows do not draw their labels at all, unless drawn by their
-  //   parent widgets or by special draw() methods (derived classes).
-
-  if (damage() & ~FL_DAMAGE_CHILD) {	 // draw the entire thing
-    draw_box(box(),0,0,w(),h(),color()); // draw box with x/y = 0
-
-    if (image() && (align() & FL_ALIGN_INSIDE)) { // draw the image only
-      Fl_Label l1;
-      memset(&l1,0,sizeof(l1));
-      l1.align_ = align();
-      l1.image = image();
-      if (!active_r() && l1.image && l1.deimage) l1.image = l1.deimage;
-      l1.type = labeltype();
-      l1.draw(0,0,w(),h(),align());
-    }
-  }
-  draw_children();
-
-#ifdef __APPLE_QUARTZ__
-  // on OS X, windows have no frame. Before OS X 10.7, to resize a window, we drag the lower right
-  // corner. This code draws a little ribbed triangle for dragging.
-  if (fl_mac_os_version < 100700 && fl_gc && !parent() && resizable() &&
-      (!size_range_set || minh!=maxh || minw!=maxw)) {
-    int dx = Fl::box_dw(box())-Fl::box_dx(box());
-    int dy = Fl::box_dh(box())-Fl::box_dy(box());
-    if (dx<=0) dx = 1;
-    if (dy<=0) dy = 1;
-    int x1 = w()-dx-1, x2 = x1, y1 = h()-dx-1, y2 = y1;
-    Fl_Color c[4] = {
-      color(),
-      fl_color_average(color(), FL_WHITE, 0.7f),
-      fl_color_average(color(), FL_BLACK, 0.6f),
-      fl_color_average(color(), FL_BLACK, 0.8f),
-    };
-    int i;
-    for (i=dx; i<12; i++) {
-      fl_color(c[i&3]);
-      fl_line(x1--, y1, x2, y2--);
-    }
-  }
-#endif
-# if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if (shape_data_) CGContextRestoreGState(fl_gc);
-# endif
-  
-# if defined(FLTK_USE_CAIRO)
-  Fl::cairo_make_current(this); // checkout if an update is necessary
-# endif
-}
-
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_Wizard.cxx
+++ /dev/null
@@ -1,186 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Wizard widget routines.
-//
-// Copyright 1997-2010 by Easy Software Products.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-
-//
-//   Fl_Wizard::Fl_Wizard() - Create an Fl_Wizard widget.
-//   Fl_Wizard::draw()      - Draw the wizard border and visible child.
-//   Fl_Wizard::next()      - Show the next child.
-//   Fl_Wizard::prev()      - Show the previous child.
-//   Fl_Wizard::value()     - Return the current visible child.
-//   Fl_Wizard::value()     - Set the visible child.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_Wizard.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-
-
-//
-// 'Fl_Wizard::Fl_Wizard()' - Create an Fl_Wizard widget.
-//
-
-/**
-  The constructor creates the Fl_Wizard widget at the specified
-  position and size.
-  <P>The inherited destructor destroys the widget and its children.
-*/
-Fl_Wizard::Fl_Wizard(int        xx,	// I - Lefthand position
-                     int        yy,	// I - Upper position
-		     int        ww,	// I - Width
-		     int        hh,	// I - Height
-		     const char *l) :	// I - Label
-    Fl_Group(xx, yy, ww, hh, l)
-{
-  box(FL_THIN_UP_BOX);
-
-  value_ = (Fl_Widget *)0;
-}
-
-
-//
-/** Draws the wizard border and visible child. */
-void Fl_Wizard::draw() {
-  Fl_Widget	*kid;	// Visible child
-
-
-  kid = value();
-
-  if (damage() & FL_DAMAGE_ALL)
-  {
-    // Redraw everything...
-    if (kid)
-    {
-      draw_box(box(), x(), y(), w(), h(), kid->color());
-      draw_child(*kid);
-    }
-    else
-      draw_box(box(), x(), y(), w(), h(), color());
-
-  }
-  else if (kid)
-    update_child(*kid);
-}
-
-
-/**
-  This method shows the next child of the wizard. If the last child
-  is already visible, this function does nothing.
-*/
-void Fl_Wizard::next() {
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-    if ((*kids)->visible())
-      break;
-
-  if (num_kids > 1)
-    value(kids[1]);
-}
-
-/** Shows the previous child.*/
-void Fl_Wizard::prev()
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-    if ((*kids)->visible())
-      break;
-
-  if (num_kids > 0 && num_kids < children())
-    value(kids[-1]);
-}
-
-/**  Gets the current visible child widget. */
-Fl_Widget* Fl_Wizard::value()
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-  Fl_Widget		*kid;
-
-
-  if ((num_kids = children()) == 0)
-    return ((Fl_Widget *)0);
-
-  for (kids = array(), kid = (Fl_Widget *)0; num_kids > 0; kids ++, num_kids --)
-  {
-    if ((*kids)->visible())
-    {
-      if (kid)
-        (*kids)->hide();
-      else
-        kid = *kids;
-    }
-  }
-
-  if (!kid)
-  {
-    kids --;
-    kid = *kids;
-    kid->show();
-  }
-
-  return (kid);
-}
-
-/**  Sets the child widget that is visible.*/
-void Fl_Wizard::value(Fl_Widget *kid)
-{
-  int			num_kids;
-  Fl_Widget	* const *kids;
-
-
-  if ((num_kids = children()) == 0)
-    return;
-
-  for (kids = array(); num_kids > 0; kids ++, num_kids --)
-  {
-    if (*kids == kid)
-    {
-      if (!kid->visible())
-        kid->show();
-    }
-    else
-      (*kids)->hide();
-  }
-
-  // This will restore the mouse pointer to the window's default cursor
-  // whenever the wizard pane is changed.  Otherwise text widgets that
-  // show the next pane may leave the cursor set to the I beam, etc...
-  if (window()) window()->cursor(FL_CURSOR_DEFAULT);
-}
-
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_XBM_Image.cxx
+++ /dev/null
@@ -1,104 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_XBM_Image routines.
-//
-// Copyright 1997-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   Fl_XBM_Image::Fl_XBM_Image() - Load an XBM file.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_XBM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-//
-// 'Fl_XBM_Image::Fl_XBM_Image()' - Load an XBM file.
-//
-
-/**  
-  The constructor loads the named XBM file from the given name filename.
-
-  The destructor frees all memory and server resources that are used by
-  the image.
-*/
-Fl_XBM_Image::Fl_XBM_Image(const char *name) : Fl_Bitmap((const char *)0,0,0) {
-  FILE	*f;
-  uchar	*ptr;
-
-  if ((f = fl_fopen(name, "rb")) == NULL) return;
-
-  char buffer[1024];
-  char junk[1024];
-  int wh[2]; // width and height
-  int i;
-  for (i = 0; i<2; i++) {
-    for (;;) {
-      if (!fgets(buffer,1024,f)) {
-        fclose(f);
-	return;
-      }
-      int r = sscanf(buffer,"#define %s %d",junk,&wh[i]);
-      if (r >= 2) break;
-    }
-  }
-
-  // skip to data array:
-  for (;;) {
-    if (!fgets(buffer,1024,f)) {
-      fclose(f);
-      return;
-    }
-    if (!strncmp(buffer,"static ",7)) break;
-  }
-
-  // Allocate memory...
-  w(wh[0]);
-  h(wh[1]);
-
-  int n = ((wh[0]+7)/8)*wh[1];
-  array = new uchar[n];
-
-  // read the data:
-  for (i = 0, ptr = (uchar *)array; i < n;) {
-    if (!fgets(buffer,1024,f)) {
-      fclose(f);
-      return;
-    }
-    const char *a = buffer;
-    while (*a && i<n) {
-      unsigned int t;
-      if (sscanf(a," 0x%x",&t)>0) {
-        *ptr++ = (uchar)t;
-	i ++;
-      }
-      while (*a && *a++ != ',') {/*empty*/}
-    }
-  }
-
-  fclose(f);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_XColor.H
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// X-specific color definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Enumerations.H>
-
-// one of these for each color in fltk's "colormap":
-// if overlays are enabled, another one for the overlay
-struct Fl_XColor {
-  unsigned char r,g,b;	// actual color used by X
-  unsigned char mapped;	// true when XAllocColor done
-  unsigned long pixel;	// the X pixel to use
-};
-extern Fl_XColor fl_xmap[/*overlay*/][256];
-
-// mask & shifts to produce xcolor for truecolor visuals:
-extern unsigned char fl_redmask, fl_greenmask, fl_bluemask;
-extern int fl_redshift, fl_greenshift, fl_blueshift, fl_extrashift;
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_XPM_Image.cxx
+++ /dev/null
@@ -1,145 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_XPM_Image routines.
-//
-// Copyright 1997-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_XPM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-
-
-//
-// 'hexdigit()' - Convert a hex digit to an integer.
-//
-
-static int hexdigit(int x) {	// I - Hex digit...
-  if (isdigit(x)) return x-'0';
-  if (isupper(x)) return x-'A'+10;
-  if (islower(x)) return x-'a'+10;
-  return 20;
-}
-
-#define MAXSIZE 2048
-#define INITIALLINES 256
-/**
-  The constructor loads the XPM image from the name filename.
-
-  The destructor frees all memory and server resources that are used by
-  the image.
-*/
-Fl_XPM_Image::Fl_XPM_Image(const char *name) : Fl_Pixmap((char *const*)0) {
-  FILE *f;
-
-  if ((f = fl_fopen(name, "rb")) == NULL) return;
-
-  // read all the c-strings out of the file:
-  char** new_data = new char *[INITIALLINES];
-  char** temp_data;
-  int malloc_size = INITIALLINES;
-  char buffer[MAXSIZE+20];
-  int i = 0;
-  int W,H,ncolors,chars_per_pixel;
-  while (fgets(buffer,MAXSIZE+20,f)) {
-    if (buffer[0] != '\"') continue;
-    char *myp = buffer;
-    char *q = buffer+1;
-    while (*q != '\"' && myp < buffer+MAXSIZE) {
-      if (*q == '\\') switch (*++q) {
-      case '\r':
-      case '\n':
-	if (!fgets(q,(int) (buffer+MAXSIZE+20-q),f)) { /* no problem if we hit EOF */ } break;
-      case 0:
-	break;
-      case 'x': {
-	q++;
-	int n = 0;
-	for (int x = 0; x < 2; x++) {
-	  int xd = hexdigit(*q);
-	  if (xd > 15) break;
-	  n = (n<<4)+xd;
-	  q++;
-	}
-	*myp++ = n;
-      } break;
-      default: {
-	int c = *q++;
-	if (c>='0' && c<='7') {
-	  c -= '0';
-	  for (int x=0; x<2; x++) {
-	    int xd = hexdigit(*q);
-	    if (xd>7) break;
-	    c = (c<<3)+xd;
-	    q++;
-	  }
-	}
-	*myp++ = c;
-      } break;
-      } else {
-	*myp++ = *q++;
-      }
-    }
-    *myp++ = 0;
-    if (i >= malloc_size) {
-      temp_data = new char *[malloc_size + INITIALLINES];
-      memcpy(temp_data, new_data, sizeof(char *) * malloc_size);
-      delete[] new_data;
-      new_data = temp_data;
-      malloc_size += INITIALLINES;
-    }
-    // first line has 4 ints: width, height, ncolors, chars_per_pixel
-    // followed by color segment: 
-    //   if ncolors < 0 this is FLTK (non standard) compressed colormap - all colors coded in single line of 4*ncolors bytes
-    //   otherwise - ncolor lines of at least chars_per_pixel bytes
-    // followed by pic segment: H lines of at least chars_per_pixel*W bytes
-    // next line: would have loved to use measure_pixmap, but it doesn't return all the data!
-    if ((!i) && (sscanf(buffer,"%d%d%d%d", &W, &H, &ncolors, &chars_per_pixel) < 4)) goto bad_data; // first line
-    else if ((i > (ncolors<0?1:ncolors)) && (myp-buffer-1<W*chars_per_pixel)) goto bad_data; // pic segment
-    else if (myp-buffer-1<(ncolors<0?-ncolors*4:chars_per_pixel)) goto bad_data; // color segment
-    new_data[i] = new char[myp-buffer+1];
-    memcpy(new_data[i], buffer,myp-buffer);
-    new_data[i][myp-buffer] = 0;
-    i++;
-  }
-
-  fclose(f);
-  f = NULL;
-  if ((!i) || (i<1+(ncolors<0?1:ncolors)+H)) goto bad_data;
-  data((const char **)new_data, i);
-  alloc_data = 1;
-
-  measure();
-  return;
-  // dealloc and close as needed when bad data was found
-bad_data:
-  while (i > 0) delete[] new_data[--i];
-  delete[] new_data;
-  if (f) fclose(f);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_abort.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-// Warning/error message code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This method is in its own source file so that stdlib and stdio
-// do not need to be included in Fl.cxx:
-// You can also override this by redefining all of these.
-
-#include <FL/Fl.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "flstring.h"
-
-#ifdef WIN32
-#  include <windows.h>
-
-static void warning(const char *, ...) {
-  // Show nothing for warnings under WIN32...
-}
-
-static void error(const char *format, ...) {
-  va_list args;
-  char buf[1024];
-  va_start(args, format);
-  vsnprintf(buf, 1024, format, args);
-  va_end(args);
-  MessageBox(0,buf,"Error",MB_ICONEXCLAMATION|MB_SYSTEMMODAL);
-}
-
-static void fatal(const char *format, ...) {
-  va_list args;
-  char buf[1024];
-  va_start(args, format);
-  vsnprintf(buf, 1024, format, args);
-  va_end(args);
-  MessageBox(0,buf,"Error",MB_ICONSTOP|MB_SYSTEMMODAL);
-  ::exit(1);
-}
-
-#else
-
-static void warning(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-}
-
-static void error(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-}
-
-static void fatal(const char *format, ...) {
-  va_list args;
-  va_start(args, format);
-  vfprintf(stderr, format, args);
-  va_end(args);
-  fputc('\n', stderr);
-  fflush(stderr);
-  ::exit(1);
-}
-
-#endif
-
-void (*Fl::warning)(const char* format, ...) = ::warning;
-void (*Fl::error)(const char* format, ...) = ::error;
-void (*Fl::fatal)(const char* format, ...) = ::fatal;
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_add_idle.cxx
+++ /dev/null
@@ -1,114 +1,0 @@
-//
-// "$Id$"
-//
-// Idle routine support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Allows you to manage an arbitrary set of idle() callbacks.
-// Replaces the older set_idle() call (which is used to implement this)
-
-#include <FL/Fl.H>
-
-struct idle_cb {
-  void (*cb)(void*);
-  void* data;
-  idle_cb *next;
-};
-
-// the callbacks are stored linked in a ring.  last points at the one
-// just called, first at the next to call.  last->next == first.
-
-static idle_cb* first;
-static idle_cb* last;
-static idle_cb* freelist;
-
-static void call_idle() {
-  idle_cb* p = first;
-  last = p; first = p->next;
-  p->cb(p->data); // this may call add_idle() or remove_idle()!
-}
-
-/**
-  Adds a callback function that is called every time by Fl::wait() and also
-  makes it act as though the timeout is zero (this makes Fl::wait() return
-  immediately, so if it is in a loop it is called repeatedly, and thus the
-  idle fucntion is called repeatedly).  The idle function can be used to get
-  background processing done.
-    
-  You can have multiple idle callbacks. To remove an idle callback use
-  Fl::remove_idle().
-    
-  Fl::wait() and Fl::check() call idle callbacks, but Fl::ready() does not.
-    
-  The idle callback can call any FLTK functions, including Fl::wait(),
-  Fl::check(), and Fl::ready().
-
-  FLTK will not recursively call the idle callback.
-*/
-void Fl::add_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = freelist;
-  if (p) freelist = p->next;
-  else p = new idle_cb;
-  p->cb = cb;
-  p->data = data;
-  if (first) {
-    last->next = p;
-    last = p;
-    p->next = first;
-  } else {
-    first = last = p;
-    p->next = p;
-    set_idle(call_idle);
-  }
-}
-
-/**
-  Returns true if the specified idle callback is currently installed.
-*/
-int Fl::has_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = first;
-  if (!p) return 0;
-  for (;; p = p->next) {
-    if (p->cb == cb && p->data == data) return 1;
-    if (p==last) return 0;
-  }
-}
-
-/**
-  Removes the specified idle callback, if it is installed.
-*/
-void Fl::remove_idle(Fl_Idle_Handler cb, void* data) {
-  idle_cb* p = first;
-  if (!p) return;
-  idle_cb* l = last;
-  for (;; p = p->next) {
-    if (p->cb == cb && p->data == data) break;
-    if (p==last) return; // not found
-    l = p;
-  }
-  if (l == p) { // only one
-    first = last = 0;
-    set_idle(0);
-  } else {
-    last = l;
-    first = l->next = p->next;
-  }
-  p->next = freelist;
-  freelist = p;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_arg.cxx
+++ /dev/null
@@ -1,545 +1,0 @@
-//
-// "$Id$"
-//
-// Optional argument initialization code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// OPTIONAL initialization code for a program using fltk.
-// You do not need to call this!  Feel free to make up your own switches.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/filename.H>
-#include <FL/fl_draw.H>
-#include <ctype.h>
-#include "flstring.h"
-
-#if defined(WIN32) || defined(__APPLE__)
-int XParseGeometry(const char*, int*, int*, unsigned int*, unsigned int*);
-#  define NoValue	0x0000
-#  define XValue  	0x0001
-#  define YValue	0x0002
-#  define WidthValue  	0x0004
-#  define HeightValue  	0x0008
-#  define AllValues 	0x000F
-#  define XNegative 	0x0010
-#  define YNegative 	0x0020
-#endif
-
-static int fl_match(const char *a, const char *s, int atleast = 1) {
-  const char *b = s;
-  while (*a && (*a == *b || tolower(*a) == *b)) {a++; b++;}
-  return !*a && b >= s+atleast;
-}
-
-// flags set by previously parsed arguments:
-extern char fl_show_iconic; // in Fl_x.cxx
-static char arg_called;
-static char return_i;
-static const char *name;
-static const char *geometry;
-static const char *title;
-// these are in Fl_get_system_colors and are set by the switches:
-extern const char *fl_fg;
-extern const char *fl_bg;
-extern const char *fl_bg2;
-
-/**
-  Parse a single switch from \p argv, starting at word \p i.
-  Returns the number of words eaten (1 or 2, or 0 if it is not
-  recognized) and adds the same value to \p i. 
-  
-  This is the default argument handler used internally by Fl::args(...),
-  but you can use this function if you prefer to step through the
-  standard FLTK switches yourself.
-  
-  All standard FLTK switches except -bg2 may be abbreviated to just
-  one letter and case is ignored:
-  
-  \li -bg color or -background color
-  <br>
-  Sets the background color using Fl::background().
-  
-  \li -bg2 color or -background2 color
-  <br>
-  Sets the secondary background color using Fl::background2().
-  
-  \li -display host:n.n
-  <br>
-  Sets the X display to use; this option is silently
-  ignored under WIN32 and MacOS.
-  
-  \li -dnd and -nodnd
-  <br>
-  Enables or disables drag and drop text operations
-  using Fl::dnd_text_ops().
-  
-  \li -fg color or -foreground color
-  <br>
-  Sets the foreground color using Fl::foreground().
-  
-  \li -geometry WxH+X+Y
-  <br>
-  Sets the initial window position and size according
-  to the standard X geometry string.
-  
-  \li -iconic
-  <br>
-  Iconifies the window using Fl_Window::iconize().
-  
-  \li -kbd and -nokbd
-  <br>
-  Enables or disables visible keyboard focus for
-  non-text widgets using Fl::visible_focus().
-  
-  \li -name string
-  <br>
-  Sets the window class using Fl_Window::xclass().
-  
-  \li -scheme string
-  <br>
-  Sets the widget scheme using Fl::scheme().
-  
-  \li -title string
-  <br>
-  Sets the window title using Fl_Window::label().
-  
-  \li -tooltips and -notooltips
-  <br>
-  Enables or disables tooltips using Fl_Tooltip::enable().
-  
-  
-  If your program requires other switches in addition to the standard
-  FLTK options, you will need to pass your own argument handler to
-  Fl::args(int,char**,int&,Fl_Args_Handler) explicitly.
-*/
-int Fl::arg(int argc, char **argv, int &i) {
-  arg_called = 1;
-  const char *s = argv[i];
-
-  if (!s) {i++; return 1;}	// something removed by calling program?
-
-  // a word that does not start with '-', or a word after a '--', or
-  // the word '-' by itself all start the "non-switch arguments" to
-  // a program.  Return 0 to indicate that we don't understand the
-  // word, but set a flag (return_i) so that args() will return at
-  // that point:
-  if (s[0] != '-' || s[1] == '-' || !s[1]) {return_i = 1; return 0;}
-  s++; // point after the dash
-
-  if (fl_match(s, "iconic")) {
-    fl_show_iconic = 1;
-    i++;
-    return 1;
-  } else if (fl_match(s, "kbd")) {
-    Fl::visible_focus(1);
-    i++;
-    return 1;
-  } else if (fl_match(s, "nokbd", 3)) {
-    Fl::visible_focus(0);
-    i++;
-    return 1;
-  } else if (fl_match(s, "dnd", 2)) {
-    Fl::dnd_text_ops(1);
-    i++;
-    return 1;
-  } else if (fl_match(s, "nodnd", 3)) {
-    Fl::dnd_text_ops(0);
-    i++;
-    return 1;
-  } else if (fl_match(s, "tooltips", 2)) {
-    Fl_Tooltip::enable();
-    i++;
-    return 1;
-  } else if (fl_match(s, "notooltips", 3)) {
-    Fl_Tooltip::disable();
-    i++;
-    return 1;
-  }
-#ifdef __APPLE__
-  // The Finder application in MacOS X passes the "-psn_N_NNNNN" option
-  // to all apps...
-  else if (strcmp(s, "NSDocumentRevisionsDebugMode") == 0) {
-    i++;
-    if (argv[i]) i++;
-    return 1;
-  } else if (strncmp(s, "psn_", 4) == 0) {
-    i++;
-    return 1;
-  }
-#endif // __APPLE__
-
-  const char *v = argv[i+1];
-  if (i >= argc-1 || !v)
-    return 0;	// all the rest need an argument, so if missing it is an error
-
-  if (fl_match(s, "geometry")) {
-
-    int flags, gx, gy; unsigned int gw, gh;
-    flags = XParseGeometry(v, &gx, &gy, &gw, &gh);
-    if (!flags) return 0;
-    geometry = v;
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  } else if (fl_match(s, "display", 2)) {
-    Fl::display(v);
-#endif
-
-  } else if (fl_match(s, "title", 2)) {
-    title = v;
-
-  } else if (fl_match(s, "name", 2)) {
-    name = v;
-
-  } else if (fl_match(s, "bg2", 3) || fl_match(s, "background2", 11)) {
-    fl_bg2 = v;
-
-  } else if (fl_match(s, "bg", 2) || fl_match(s, "background", 10)) {
-    fl_bg = v;
-
-  } else if (fl_match(s, "fg", 2) || fl_match(s, "foreground", 10)) {
-    fl_fg = v;
-
-  } else if (fl_match(s, "scheme", 1)) {
-    Fl::scheme(v);
-
-  } else return 0; // unrecognized
-
-  i += 2;
-  return 2;
-}
-
-
-/**
-  Parse command line switches using the \p cb argument handler.
-  
-  Returns 0 on error, or the number of words processed.
-  
-  FLTK provides this as an <i>entirely optional</i> command line
-  switch parser. You don't have to call it if you don't want to.
-  Everything it can do can be done with other calls to FLTK.
-  
-  To use the switch parser, call Fl::args(...) near the start
-  of your program.  This does \b not open the display, instead
-  switches that need the display open are stashed into static
-  variables. Then you \b must display your first window by calling
-  <tt>window->show(argc,argv)</tt>, which will do anything stored
-  in the static variables.
-  
-  Providing an argument handler callback \p cb lets you define
-  your own switches. It is called with the same \p argc and \p argv,
-  and with \p i set to the index of the switch to be processed.
-  The \p cb handler should return zero if the switch is unrecognized,
-  and not change \p i. It should return non-zero to indicate the
-  number of words processed if the switch is recognized, i.e. 1 for
-  just the switch, and more than 1 for the switch plus associated
-  parameters. \p i should be incremented by the same amount.
-  
-  The \p cb handler is called \b before any other tests, so
-  <i>you can also override any standard FLTK switch</i>
-  (this is why FLTK can use very short switches instead of
-  the long ones all other toolkits force you to use).
-  See Fl::arg() for descriptions of the standard switches.
- 
-  On return \p i is set to the index of the first non-switch.
-  This is either:
-  
-  \li The first word that does not start with '-'.
-  \li The word '-' (used by many programs to name stdin as a file)
-  \li The first unrecognized switch (return value is 0).
-  \li \p argc
-  
-  The return value is \p i unless an unrecognized switch is found,
-  in which case it is zero. If your program takes no arguments other
-  than switches you should produce an error if the return value is less
-  than \p argc.
-  
-  
-  A usage string is displayed if Fl::args() detects an invalid argument
-  on the command-line. You can change the message by setting the
-  Fl::help pointer.
-  
-  A very simple command line parser can be found in <tt>examples/howto-parse-args.cxx</tt>
-  
-  The simpler Fl::args(int argc, char **argv) form is useful if your program
-  does not have command line switches of its own.
-*/
-
-int Fl::args(int argc, char** argv, int& i, Fl_Args_Handler cb) {
-  arg_called = 1;
-  i = 1; // skip argv[0]
-  while (i < argc) {
-    if (cb && cb(argc,argv,i)) continue;
-    if (!arg(argc,argv,i)) return return_i ? i : 0;
-  }
-  return i;
-}
-
-// show a main window, use any parsed arguments
-void Fl_Window::show(int argc, char **argv) {
-  if (argc && !arg_called) Fl::args(argc,argv);
-
-  Fl::get_system_colors();
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  // Get defaults for drag-n-drop and focus...
-  const char *key = 0, *val;
-
-  if (Fl::first_window()) key = Fl::first_window()->xclass();
-  if (!key) key = "fltk";
-
-  val = XGetDefault(fl_display, key, "dndTextOps");
-  if (val) Fl::dnd_text_ops(strcasecmp(val, "true") == 0 ||
-                            strcasecmp(val, "on") == 0 ||
-                            strcasecmp(val, "yes") == 0);
-
-  val = XGetDefault(fl_display, key, "tooltips");
-  if (val) Fl_Tooltip::enable(strcasecmp(val, "true") == 0 ||
-                              strcasecmp(val, "on") == 0 ||
-                              strcasecmp(val, "yes") == 0);
-
-  val = XGetDefault(fl_display, key, "visibleFocus");
-  if (val) Fl::visible_focus(strcasecmp(val, "true") == 0 ||
-                             strcasecmp(val, "on") == 0 ||
-                             strcasecmp(val, "yes") == 0);
-#endif // !WIN32 && !__APPLE__
-
-  // set colors first, so background_pixel is correct:
-  static char beenhere;
-  if (!beenhere) {
-    if (geometry) {
-      int fl = 0, gx = x(), gy = y(); unsigned int gw = w(), gh = h();
-      fl = XParseGeometry(geometry, &gx, &gy, &gw, &gh);
-      if (fl & XNegative) gx = Fl::w()-w()+gx;
-      if (fl & YNegative) gy = Fl::h()-h()+gy;
-      //  int mw,mh; minsize(mw,mh);
-      //  if (mw > gw) gw = mw;
-      //  if (mh > gh) gh = mh;
-      Fl_Widget *r = resizable();
-      if (!r) resizable(this);
-      // for WIN32 we assume window is not mapped yet:
-      if (fl & (XValue | YValue))
-	x(-1), resize(gx,gy,gw,gh);
-      else
-	size(gw,gh);
-      resizable(r);
-    }
-  }
-
-  // set the class, which is used by X version of get_system_colors:
-  if (name) {xclass(name); name = 0;}
-  else if (!xclass()) xclass(fl_filename_name(argv[0]));
-
-  if (title) {label(title); title = 0;}
-  else if (!label()) label(xclass());
-
-  if (!beenhere) {
-    beenhere = 1;
-    Fl::scheme(Fl::scheme()); // opens display!  May call Fl::fatal()
-  }
-
-  // Show the window AFTER we have set the colors and scheme.
-  show();
-
-#if !defined(WIN32) && !defined(__APPLE__)
-  // set the command string, used by state-saving window managers:
-  int j;
-  int n=0; for (j=0; j<argc; j++) n += strlen(argv[j])+1;
-  char *buffer = new char[n];
-  char *p = buffer;
-  for (j=0; j<argc; j++) for (const char *q = argv[j]; (*p++ = *q++););
-  XChangeProperty(fl_display, fl_xid(this), XA_WM_COMMAND, XA_STRING, 8, 0,
-		  (unsigned char *)buffer, p-buffer-1);
-  delete[] buffer;
-#endif // !WIN32 && !__APPLE__
-}
-
-// Calls useful for simple demo programs, with automatic help message:
-
-static const char * const helpmsg =
-"options are:\n"
-" -bg2 color\n"
-" -bg color\n"
-" -di[splay] host:n.n\n"
-" -dn[d]\n"
-" -fg color\n"
-" -g[eometry] WxH+X+Y\n"
-" -i[conic]\n"
-" -k[bd]\n"
-" -na[me] classname\n"
-" -nod[nd]\n"
-" -nok[bd]\n"
-" -not[ooltips]\n"
-" -s[cheme] scheme\n"
-" -ti[tle] windowtitle\n"
-" -to[oltips]";
-
-const char * const Fl::help = helpmsg+13;
-
-/**
- Parse all command line switches matching standard FLTK options only.
- 
- It parses all the switches, and if any are not recognized it calls
- Fl::abort(Fl::help), i.e. unlike the long form, an unrecognized
- switch generates an error message and causes the program to exit.
- 
- */
-void Fl::args(int argc, char **argv) {
-  int i; if (Fl::args(argc,argv,i) < argc) Fl::error(helpmsg);
-}
-
-#if defined(WIN32) || defined(__APPLE__)
-
-/* the following function was stolen from the X sources as indicated. */
-
-/* Copyright 	Massachusetts Institute of Technology  1985, 1986, 1987 */
-/* $XConsortium: XParseGeom.c,v 11.18 91/02/21 17:23:05 rws Exp $ */
-
-/*
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of M.I.T. not be used in advertising or
-publicity pertaining to distribution of the software without specific,
-written prior permission.  M.I.T. makes no representations about the
-suitability of this software for any purpose.  It is provided "as is"
-without express or implied warranty.
-*/
-
-/*
- *    XParseGeometry parses strings of the form
- *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where
- *   width, height, xoffset, and yoffset are unsigned integers.
- *   Example:  "=80x24+300-49"
- *   The equal sign is optional.
- *   It returns a bitmask that indicates which of the four values
- *   were actually found in the string.  For each value found,
- *   the corresponding argument is updated;  for each value
- *   not found, the corresponding argument is left unchanged. 
- */
-
-static int ReadInteger(char* string, char** NextString)
-{
-  int Result = 0;
-  int Sign = 1;
-    
-  if (*string == '+')
-    string++;
-  else if (*string == '-') {
-    string++;
-    Sign = -1;
-  }
-  for (; (*string >= '0') && (*string <= '9'); string++) {
-    Result = (Result * 10) + (*string - '0');
-  }
-  *NextString = string;
-  if (Sign >= 0)
-    return (Result);
-  else
-    return (-Result);
-}
-
-int XParseGeometry(const char* string, int* x, int* y,
-		   unsigned int* width, unsigned int* height)
-{
-  int mask = NoValue;
-  char *strind;
-  unsigned int tempWidth = 0, tempHeight = 0;
-  int tempX = 0, tempY = 0;
-  char *nextCharacter;
-
-  if ( (string == NULL) || (*string == '\0')) return(mask);
-  if (*string == '=')
-    string++;  /* ignore possible '=' at beg of geometry spec */
-
-  strind = (char *)string;
-  if (*strind != '+' && *strind != '-' && *strind != 'x') {
-    tempWidth = ReadInteger(strind, &nextCharacter);
-    if (strind == nextCharacter) 
-      return (0);
-    strind = nextCharacter;
-    mask |= WidthValue;
-  }
-
-  if (*strind == 'x' || *strind == 'X') {	
-    strind++;
-    tempHeight = ReadInteger(strind, &nextCharacter);
-    if (strind == nextCharacter)
-      return (0);
-    strind = nextCharacter;
-    mask |= HeightValue;
-  }
-
-  if ((*strind == '+') || (*strind == '-')) {
-    if (*strind == '-') {
-      strind++;
-      tempX = -ReadInteger(strind, &nextCharacter);
-      if (strind == nextCharacter)
-	return (0);
-      strind = nextCharacter;
-      mask |= XNegative;
-
-    } else {
-      strind++;
-      tempX = ReadInteger(strind, &nextCharacter);
-      if (strind == nextCharacter)
-	return(0);
-      strind = nextCharacter;
-      }
-    mask |= XValue;
-    if ((*strind == '+') || (*strind == '-')) {
-      if (*strind == '-') {
-	strind++;
-	tempY = -ReadInteger(strind, &nextCharacter);
-	if (strind == nextCharacter)
-	  return(0);
-	strind = nextCharacter;
-	mask |= YNegative;
-
-      } else {
-	strind++;
-	tempY = ReadInteger(strind, &nextCharacter);
-	if (strind == nextCharacter)
-	  return(0);
-	strind = nextCharacter;
-      }
-      mask |= YValue;
-    }
-  }
-	
-  /* If strind isn't at the end of the string the it's an invalid
-     geometry specification. */
-
-  if (*strind != '\0') return (0);
-
-  if (mask & XValue)
-    *x = tempX;
-  if (mask & YValue)
-    *y = tempY;
-  if (mask & WidthValue)
-    *width = tempWidth;
-  if (mask & HeightValue)
-    *height = tempHeight;
-  return (mask);
-}
-
-#endif // ifdef WIN32
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_cocoa.mm
+++ /dev/null
@@ -1,4904 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//// From the inner edge of a MetroWerks CodeWarrior CD:
-// (without permission)
-//
-// "Three Compiles for 68Ks under the sky,
-// Seven Compiles for PPCs in their fragments of code,
-// Nine Compiles for Mortal Carbon doomed to die,
-// One Compile for Mach-O Cocoa on its Mach-O throne,
-// in the Land of MacOS X where the Drop-Shadows lie.
-// 
-// One Compile to link them all, One Compile to merge them,
-// One Compile to copy them all and in the bundle bind them,
-// in the Land of MacOS X where the Drop-Shadows lie."
-
-#ifdef __APPLE__
-
-#define CONSOLIDATE_MOTION 0
-extern "C" {
-#include <pthread.h>
-}
-
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Copy_Surface.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <math.h>
-#include <limits.h>
-#include <dlfcn.h>
-#include <string.h>
-
-#import <Cocoa/Cocoa.h>
-
-// #define DEBUG_SELECT		// UNCOMMENT FOR SELECT()/THREAD DEBUGGING
-#ifdef DEBUG_SELECT
-#include <stdio.h>		// testing
-#define DEBUGMSG(msg)		if ( msg ) fprintf(stderr, msg);
-#define DEBUGPERRORMSG(msg)	if ( msg ) perror(msg)
-#define DEBUGTEXT(txt)		txt
-#else
-#define DEBUGMSG(msg)
-#define DEBUGPERRORMSG(msg)
-#define DEBUGTEXT(txt)		NULL
-#endif /*DEBUG_SELECT*/
-
-// external functions
-extern void fl_fix_focus();
-extern unsigned short *fl_compute_macKeyLookUp();
-extern int fl_send_system_handlers(void *e);
-
-// forward definition of functions in this file
-// converting cr lf converter function
-static size_t convert_crlf(char * string, size_t len);
-static void createAppleMenu(void);
-static void cocoaMouseHandler(NSEvent *theEvent);
-static void clipboard_check(void);
-static unsigned make_current_counts = 0; // if > 0, then Fl_Window::make_current() can be called only once
-static NSBitmapImageRep* rect_to_NSBitmapImageRep(Fl_Window *win, int x, int y, int w, int h);
-
-int fl_mac_os_version = Fl_X::calc_mac_os_version();		// the version number of the running Mac OS X (e.g., 100604 for 10.6.4)
-int fl_mac_quit_early = 1; // set it to 0 so cmd-Q does not terminate app but merely terminates the event loop
-
-// public variables
-CGContextRef fl_gc = 0;
-void *fl_capture = 0;			// (NSWindow*) we need this to compensate for a missing(?) mouse capture
-bool fl_show_iconic;                    // true if called from iconize() - shows the next created window in collapsed state
-//int fl_disable_transient_for;           // secret method of removing TRANSIENT_FOR
-Window fl_window;
-Fl_Window *Fl_Window::current_;
-
-// forward declarations of variables in this file
-static int got_events = 0;
-static Fl_Window* resize_from_system;
-static int main_screen_height; // height of menubar-containing screen used to convert between Cocoa and FLTK global screen coordinates
-// through_drawRect = YES means the drawRect: message was sent to the view, 
-// thus the graphics context was prepared by the system
-static BOOL through_drawRect = NO; 
-// through_Fl_X_flush = YES means Fl_X::flush() was called
-static BOOL through_Fl_X_flush = NO;
-static BOOL views_use_CA = NO; // YES means views are layer-backed, as on macOS 10.14 when linked with SDK 10.14
-static int im_enabled = -1;
-// OS version-dependent pasteboard type names
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
-#define NSPasteboardTypeTIFF @"public.tiff"
-#define NSPasteboardTypePDF @"com.adobe.pdf"
-#define NSPasteboardTypeString @"public.utf8-plain-text"
-#endif
-static NSString *TIFF_pasteboard_type = (fl_mac_os_version >= 100600 ? NSPasteboardTypeTIFF : NSTIFFPboardType);
-static NSString *PDF_pasteboard_type = (fl_mac_os_version >= 100600 ? NSPasteboardTypePDF : NSPDFPboardType);
-static NSString *PICT_pasteboard_type = (fl_mac_os_version >= 100600 ? @"com.apple.pict" : NSPICTPboardType);
-static NSString *UTF8_pasteboard_type = (fl_mac_os_version >= 100600 ? NSPasteboardTypeString : NSStringPboardType);
-static bool in_nsapp_run = false; // true during execution of [NSApp run]
-static NSMutableArray *dropped_files_list = nil; // list of files dropped at app launch
-typedef void (*open_cb_f_type)(const char *);
-static open_cb_f_type get_open_cb();
-#if CONSOLIDATE_MOTION
-static Fl_Window* send_motion;
-extern Fl_Window* fl_xmousewin;
-#endif
-
-enum { FLTKTimerEvent = 1, FLTKDataReadyEvent };
-
-// Carbon functions and definitions
-
-typedef void *TSMDocumentID;
-
-extern "C" enum {
- kTSMDocumentEnabledInputSourcesPropertyTag = 'enis' //  from Carbon/TextServices.h
-};
-
-// Undocumented voodoo. Taken from Mozilla.
-static const int smEnableRomanKybdsOnly = -23;
-
-typedef TSMDocumentID (*TSMGetActiveDocument_type)(void);
-static TSMGetActiveDocument_type TSMGetActiveDocument;
-typedef OSStatus (*TSMSetDocumentProperty_type)(TSMDocumentID, OSType, UInt32, void*);
-static TSMSetDocumentProperty_type TSMSetDocumentProperty;
-typedef OSStatus (*TSMRemoveDocumentProperty_type)(TSMDocumentID, OSType);
-static TSMRemoveDocumentProperty_type TSMRemoveDocumentProperty;
-typedef CFArrayRef (*TISCreateASCIICapableInputSourceList_type)(void);
-static TISCreateASCIICapableInputSourceList_type TISCreateASCIICapableInputSourceList;
-
-typedef void (*KeyScript_type)(short);
-static KeyScript_type KeyScript;
-
-
-/* fltk-utf8 placekeepers */
-void fl_reset_spot()
-{
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-}
-
-/*
- * Mac keyboard lookup table
- */
-static unsigned short* macKeyLookUp = NULL;
-
-/*
- * convert the current mouse chord into the FLTK modifier state
- */
-static unsigned int mods_to_e_state( NSUInteger mods )
-{
-  long state = 0;
-  if ( mods & NSCommandKeyMask ) state |= FL_META;
-  if ( mods & NSAlternateKeyMask ) state |= FL_ALT;
-  if ( mods & NSControlKeyMask ) state |= FL_CTRL;
-  if ( mods & NSShiftKeyMask ) state |= FL_SHIFT;
-  if ( mods & NSAlphaShiftKeyMask ) state |= FL_CAPS_LOCK;
-  unsigned int ret = ( Fl::e_state & 0xff000000 ) | state;
-  Fl::e_state = ret;
-  //printf( "State 0x%08x (%04x)\n", Fl::e_state, mods );
-  return ret;
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-//
-// Select interface -- how it's implemented:
-//     When the user app configures one or more file descriptors to monitor
-//     with Fl::add_fd(), we start a separate thread to select() the  data,
-//     sending a custom OSX 'FLTK data ready event' to the parent  thread's
-//     RunApplicationLoop(), so that it triggers the data  ready  callbacks
-//     in the parent thread.                               -erco 04/04/04
-//     
-#define POLLIN  1
-#define POLLOUT 4
-#define POLLERR 8
-
-// Class to handle select() 'data ready'
-class DataReady
-{
-  struct FD
-  {
-    int fd;
-    short events;
-    void (*cb)(int, void*);
-    void* arg;
-  };
-  int nfds, fd_array_size;
-  FD *fds;
-  pthread_t tid;		// select()'s thread id
-  
-  // Data that needs to be locked (all start with '_')
-  pthread_mutex_t _datalock;	// data lock
-  fd_set _fdsets[3];		// r/w/x sets user wants to monitor
-  int _maxfd;			// max fd count to monitor
-  int _cancelpipe[2];		// pipe used to help cancel thread
-  
-public:
-  DataReady()
-  {
-    nfds = 0;
-    fd_array_size = 0;
-    fds = 0;
-    tid = 0;
-    
-    pthread_mutex_init(&_datalock, NULL);
-    FD_ZERO(&_fdsets[0]); FD_ZERO(&_fdsets[1]); FD_ZERO(&_fdsets[2]);
-    _cancelpipe[0] = _cancelpipe[1] = 0;
-    _maxfd = -1;
-  }
-  
-  ~DataReady()
-  {
-    CancelThread(DEBUGTEXT("DESTRUCTOR\n"));
-    if (fds) { free(fds); fds = 0; }
-    nfds = 0;
-  }
-  
-  // Locks
-  //    The convention for locks: volatile vars start with '_',
-  //    and must be locked before use. Locked code is prefixed 
-  //    with /*LOCK*/ to make painfully obvious esp. in debuggers. -erco
-  //
-  void DataLock() { pthread_mutex_lock(&_datalock); }
-  void DataUnlock() { pthread_mutex_unlock(&_datalock); }
-  
-  // Accessors
-  int IsThreadRunning() { return(tid ? 1 : 0); }
-  int GetNfds() { return(nfds); }
-  int GetCancelPipe(int ix) { return(_cancelpipe[ix]); }
-  fd_set GetFdset(int ix) { return(_fdsets[ix]); }
-  
-  // Methods
-  void AddFD(int n, int events, void (*cb)(int, void*), void *v);
-  void RemoveFD(int n, int events);
-  int CheckData(fd_set& r, fd_set& w, fd_set& x);
-  void HandleData(fd_set& r, fd_set& w, fd_set& x);
-  static void* DataReadyThread(void *self);
-  void StartThread(void);
-  void CancelThread(const char *reason);
-};
-
-static DataReady dataready;
-
-void DataReady::AddFD(int n, int events, void (*cb)(int, void*), void *v)
-{
-  RemoveFD(n, events);
-  int i = nfds++;
-  if (i >= fd_array_size) 
-  {
-    fl_open_display(); // necessary for NSApp to be defined and the event loop to work
-    FD *temp;
-    fd_array_size = 2*fd_array_size+1;
-    if (!fds) { temp = (FD*)malloc(fd_array_size*sizeof(FD)); }
-    else { temp = (FD*)realloc(fds, fd_array_size*sizeof(FD)); }
-    if (!temp) return;
-    fds = temp;
-  }
-  fds[i].cb  = cb;
-  fds[i].arg = v;
-  fds[i].fd  = n;
-  fds[i].events = events;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_SET(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_SET(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_SET(n, &_fdsets[2]);
-  /*LOCK*/  if (n > _maxfd) _maxfd = n;
-  DataUnlock();
-}
-
-// Remove an FD from the array
-void DataReady::RemoveFD(int n, int events)
-{
-  int i,j;
-  _maxfd = -1; // recalculate maxfd on the fly
-  for (i=j=0; i<nfds; i++) {
-    if (fds[i].fd == n) {
-      int e = fds[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fds[i].events = e;
-    }
-    if (fds[i].fd > _maxfd) _maxfd = fds[i].fd;
-    // move it down in the array if necessary:
-    if (j<i) {
-      fds[j] = fds[i];
-    }
-    j++;
-  }
-  nfds = j;
-  DataLock();
-  /*LOCK*/  if (events & POLLIN)  FD_CLR(n, &_fdsets[0]);
-  /*LOCK*/  if (events & POLLOUT) FD_CLR(n, &_fdsets[1]);
-  /*LOCK*/  if (events & POLLERR) FD_CLR(n, &_fdsets[2]);
-  DataUnlock();
-}
-
-// CHECK IF USER DATA READY, RETURNS r/w/x INDICATING WHICH IF ANY
-int DataReady::CheckData(fd_set& r, fd_set& w, fd_set& x)
-{
-  int ret;
-  DataLock();
-  /*LOCK*/  timeval t = { 0, 1 };		// quick check
-  /*LOCK*/  r = _fdsets[0], w = _fdsets[1], x = _fdsets[2];
-  /*LOCK*/  ret = ::select(_maxfd+1, &r, &w, &x, &t);
-  DataUnlock();
-  if ( ret == -1 ) {
-    DEBUGPERRORMSG("CheckData(): select()");
-  }
-  return(ret);
-}
-
-// HANDLE DATA READY CALLBACKS
-void DataReady::HandleData(fd_set& r, fd_set& w, fd_set& x)
-{
-  for (int i=0; i<nfds; i++) {
-    int f = fds[i].fd;
-    short revents = 0;
-    if (FD_ISSET(f, &r)) revents |= POLLIN;
-    if (FD_ISSET(f, &w)) revents |= POLLOUT;
-    if (FD_ISSET(f, &x)) revents |= POLLERR;
-    if (fds[i].events & revents) {
-      DEBUGMSG("DOING CALLBACK: ");
-      fds[i].cb(f, fds[i].arg);
-      DEBUGMSG("DONE\n");
-    }
-  }
-}
-
-// DATA READY THREAD
-//    This thread watches for changes in user's file descriptors.
-//    Sends a 'data ready event' to the main thread if any change.
-//
-void* DataReady::DataReadyThread(void *o)
-{
-  DataReady *self = (DataReady*)o;
-  while ( 1 ) {					// loop until thread cancel or error
-    // Thread safe local copies of data before each select()
-    self->DataLock();
-    /*LOCK*/  int maxfd = self->_maxfd;
-    /*LOCK*/  fd_set r = self->GetFdset(0);
-    /*LOCK*/  fd_set w = self->GetFdset(1);
-    /*LOCK*/  fd_set x = self->GetFdset(2);
-    /*LOCK*/  int cancelpipe = self->GetCancelPipe(0);
-    /*LOCK*/  if ( cancelpipe > maxfd ) maxfd = cancelpipe;
-    /*LOCK*/  FD_SET(cancelpipe, &r);		// add cancelpipe to fd's to watch
-    /*LOCK*/  FD_SET(cancelpipe, &x);
-    self->DataUnlock();
-    // timeval t = { 1000, 0 };	// 1000 seconds;
-    timeval t = { 2, 0 };	// HACK: 2 secs prevents 'hanging' problem
-    int ret = ::select(maxfd+1, &r, &w, &x, &t);
-    pthread_testcancel();	// OSX 10.0.4 and older: needed for parent to cancel
-    switch ( ret ) {
-      case 0:	// NO DATA
-        continue;
-      case -1:	// ERROR
-      {
-        DEBUGPERRORMSG("CHILD THREAD: select() failed");
-        return(NULL);		// error? exit thread
-      }
-      default:	// DATA READY
-      {
-        if (FD_ISSET(cancelpipe, &r) || FD_ISSET(cancelpipe, &x)) 	// cancel?
-	  { return(NULL); }						// just exit
-        DEBUGMSG("CHILD THREAD: DATA IS READY\n");
-        NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
-        NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined
-                                            location:NSMakePoint(0,0)
-                                       modifierFlags:0
-                                           timestamp:0
-                                        windowNumber:0 context:NULL subtype:FLTKDataReadyEvent data1:0 data2:0];
-        [NSApp postEvent:event atStart:NO];
-        [localPool release];
-        return(NULL);		// done with thread
-      }
-    }
-  }
-}
-
-// START 'DATA READY' THREAD RUNNING, CREATE INTER-THREAD PIPE
-void DataReady::StartThread(void)
-{
-  CancelThread(DEBUGTEXT("STARTING NEW THREAD\n"));
-  DataLock();
-  /*LOCK*/  pipe(_cancelpipe);	// pipe for sending cancel msg to thread
-  DataUnlock();
-  DEBUGMSG("*** START THREAD\n");
-  pthread_create(&tid, NULL, DataReadyThread, (void*)this);
-}
-
-// CANCEL 'DATA READY' THREAD, CLOSE PIPE
-void DataReady::CancelThread(const char *reason)
-{
-  if ( tid ) {
-    DEBUGMSG("*** CANCEL THREAD: ");
-    DEBUGMSG(reason);
-    if ( pthread_cancel(tid) == 0 ) {		// cancel first
-      DataLock();
-      /*LOCK*/  write(_cancelpipe[1], "x", 1);	// wake thread from select
-      DataUnlock();
-      pthread_join(tid, NULL);			// wait for thread to finish
-    }
-    tid = 0;
-    DEBUGMSG("(JOINED) OK\n");
-  }
-  // Close pipe if open
-  DataLock();
-  /*LOCK*/  if ( _cancelpipe[0] ) { close(_cancelpipe[0]); _cancelpipe[0] = 0; }
-  /*LOCK*/  if ( _cancelpipe[1] ) { close(_cancelpipe[1]); _cancelpipe[1] = 0; }
-  DataUnlock();
-}
-
-void Fl::add_fd( int n, int events, void (*cb)(int, void*), void *v )
-{
-  dataready.AddFD(n, events, cb, v);
-}
-
-void Fl::add_fd(int fd, void (*cb)(int, void*), void* v)
-{
-  dataready.AddFD(fd, POLLIN, cb, v);
-}
-
-void Fl::remove_fd(int n, int events)
-{
-  dataready.RemoveFD(n, events);
-}
-
-void Fl::remove_fd(int n)
-{
-  dataready.RemoveFD(n, -1);
-}
-
-/*
- * Check if there is actually a message pending
- */
-int fl_ready()
-{
-  NSEvent *retval = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0]
-				    inMode:NSDefaultRunLoopMode dequeue:NO];
-  return retval != nil;
-}
-
-
-static void processFLTKEvent(void) {
-  fl_lock_function();
-  dataready.CancelThread(DEBUGTEXT("DATA READY EVENT\n"));
-  
-  // CHILD THREAD TELLS US DATA READY
-  //     Check to see what's ready, and invoke user's cb's
-  //
-  fd_set r,w,x;
-  switch(dataready.CheckData(r,w,x)) {
-    case 0:	// NO DATA
-      break;
-    case -1:	// ERROR
-      break;
-    default:	// DATA READY
-      dataready.HandleData(r,w,x);
-      break;
-  }
-  fl_unlock_function();
-  return;
-}
-
-
-/*
- * break the current event loop
- */
-static void breakMacEventLoop()
-{  
-  NSEvent *event = [NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint(0,0)
-                                 modifierFlags:0 timestamp:0
-                                  windowNumber:0 context:NULL subtype:FLTKTimerEvent data1:0 data2:0];
-  [NSApp postEvent:event atStart:NO];
-}
-
-//
-// MacOS X timers
-//
-
-struct MacTimeout {
-  Fl_Timeout_Handler callback;
-  void* data;
-  CFRunLoopTimerRef timer;
-  char pending; 
-  CFAbsoluteTime next_timeout; // scheduled time for this timer
-};
-static MacTimeout* mac_timers;
-static int mac_timer_alloc;
-static int mac_timer_used;
-static MacTimeout* current_timer;  // the timer that triggered its callback function
-
-static void realloc_timers()
-{
-  if (mac_timer_alloc == 0) {
-    mac_timer_alloc = 8;
-    fl_open_display(); // needed because the timer creates an event
-  }
-  mac_timer_alloc *= 2;
-  MacTimeout* new_timers = new MacTimeout[mac_timer_alloc];
-  memset(new_timers, 0, sizeof(MacTimeout)*mac_timer_alloc);
-  memcpy(new_timers, mac_timers, sizeof(MacTimeout) * mac_timer_used);
-  if (current_timer) {
-    MacTimeout* newCurrent = new_timers + (current_timer - mac_timers);
-    current_timer = newCurrent;
-  }
-  MacTimeout* delete_me = mac_timers;
-  mac_timers = new_timers;
-  delete [] delete_me;
-}
-
-static void delete_timer(MacTimeout& t)
-{
-  if (t.timer) {
-    CFRunLoopRemoveTimer(CFRunLoopGetCurrent(),
-		      t.timer,
-		      kCFRunLoopDefaultMode);
-    CFRelease(t.timer);
-    memset(&t, 0, sizeof(MacTimeout));
-  }
-}
-
-static void do_timer(CFRunLoopTimerRef timer, void* data)
-{
-  fl_lock_function();
-  fl_intptr_t timerId = (fl_intptr_t)data;
-  current_timer = &mac_timers[timerId];
-  current_timer->pending = 0;
-  (current_timer->callback)(current_timer->data);
-  if (current_timer && current_timer->pending == 0)
-    delete_timer(*current_timer);
-  current_timer = NULL;
-
-  breakMacEventLoop();
-  fl_unlock_function();
-}
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  // check, if this timer slot exists already
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    // if so, simply change the fire interval
-    if (t.callback == cb  &&  t.data == data) {
-      t.next_timeout = CFAbsoluteTimeGetCurrent() + time;
-      CFRunLoopTimerSetNextFireDate(t.timer, t.next_timeout );
-      t.pending = 1;
-      return;
-    }
-  }
-  // no existing timer to use. Create a new one:
-  fl_intptr_t timer_id = -1;
-  // find an empty slot in the timer array
-  for (int i = 0; i < mac_timer_used; ++i) {
-    if ( !mac_timers[i].timer ) {
-      timer_id = i;
-      break;
-    }
-  }
-  // if there was no empty slot, append a new timer
-  if (timer_id == -1) {
-    // make space if needed
-    if (mac_timer_used == mac_timer_alloc) {
-      realloc_timers();
-    }
-    timer_id = mac_timer_used++;
-  }
-  // now install a brand new timer
-  MacTimeout& t = mac_timers[timer_id];
-  CFRunLoopTimerContext context = {0, (void*)timer_id, NULL,NULL,NULL};
-  CFRunLoopTimerRef timerRef = CFRunLoopTimerCreate(kCFAllocatorDefault, 
-						    CFAbsoluteTimeGetCurrent() + time,
-						    1E30,  
-						    0,
-						    0,
-						    do_timer,
-						    &context
-						    );
-  if (timerRef) {
-    CFRunLoopAddTimer(CFRunLoopGetCurrent(),
-		      timerRef,
-		      kCFRunLoopDefaultMode);
-    t.callback = cb;
-    t.data     = data;
-    t.timer    = timerRef;
-    t.pending  = 1;
-    t.next_timeout = CFRunLoopTimerGetNextFireDate(timerRef);
-  }
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  // k = how many times 'time' seconds after the last scheduled timeout until the future
-  double k = ceil( (CFAbsoluteTimeGetCurrent() - current_timer->next_timeout) / time);
-  if (k < 1) k = 1;
-  current_timer->next_timeout += k * time;
-  CFRunLoopTimerSetNextFireDate(current_timer->timer, current_timer->next_timeout );
-  current_timer->callback = cb;
-  current_timer->data = data;
-  current_timer->pending = 1;
-}
-
-int Fl::has_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    if (t.callback == cb  &&  t.data == data && t.pending) {
-      return 1;
-    }
-  }
-  return 0;
-}
-
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0; i < mac_timer_used; ++i) {
-    MacTimeout& t = mac_timers[i];
-    if (t.callback == cb  && ( t.data == data || data == NULL)) {
-      delete_timer(t);
-    }
-  }
-}
-
-@interface FLWindow : NSWindow {
-  Fl_Window *w;
-}
-- (FLWindow*)initWithFl_W:(Fl_Window *)flw 
-	      contentRect:(NSRect)rect 
-		styleMask:(NSUInteger)windowStyle;
-- (Fl_Window *)getFl_Window;
-- (void)recursivelySendToSubwindows:(SEL)sel;
-- (void)setSubwindowFrame;
-- (void)checkSubwindowFrame;
-- (void)waitForExpose;
-- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
-- (NSPoint)convertBaseToScreen:(NSPoint)aPoint;
-#endif
-@end
-
-
-@interface FLView : NSView <NSTextInput
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-, NSTextInputClient
-#endif
-> {
-  BOOL in_key_event; // YES means keypress is being processed by handleEvent
-  BOOL need_handle; // YES means Fl::handle(FL_KEYBOARD,) is needed after handleEvent processing
-  NSInteger identifier;
-  NSRange selectedRange;
-}
-+ (void)prepareEtext:(NSString*)aString;
-+ (void)concatEtext:(NSString*)aString;
-- (BOOL)process_keydown:(NSEvent*)theEvent;
-- (id)initWithFrame:(NSRect)frameRect;
-- (void)drawRect:(NSRect)rect;
-- (BOOL)acceptsFirstResponder;
-- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent;
-- (void)resetCursorRects;
-- (BOOL)performKeyEquivalent:(NSEvent*)theEvent;
-- (void)mouseUp:(NSEvent *)theEvent;
-- (void)rightMouseUp:(NSEvent *)theEvent;
-- (void)otherMouseUp:(NSEvent *)theEvent;
-- (void)mouseDown:(NSEvent *)theEvent;
-- (void)rightMouseDown:(NSEvent *)theEvent;
-- (void)otherMouseDown:(NSEvent *)theEvent;
-- (void)mouseMoved:(NSEvent *)theEvent;
-- (void)mouseDragged:(NSEvent *)theEvent;
-- (void)rightMouseDragged:(NSEvent *)theEvent;
-- (void)otherMouseDragged:(NSEvent *)theEvent;
-- (void)scrollWheel:(NSEvent *)theEvent;
-- (void)magnifyWithEvent:(NSEvent *)theEvent;
-- (void)keyDown:(NSEvent *)theEvent;
-- (void)keyUp:(NSEvent *)theEvent;
-- (void)flagsChanged:(NSEvent *)theEvent;
-- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender;
-- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender;
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
-- (void)draggingExited:(id < NSDraggingInfo >)sender;
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal;
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5
-- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange;
-- (void)setMarkedText:(id)aString selectedRange:(NSRange)newSelection replacementRange:(NSRange)replacementRange;
-- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;
-- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange;
-- (NSInteger)windowLevel;
-#endif
-- (BOOL)did_view_resolution_change;
-@end
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-@interface FLViewLayer : FLView // for layer-backed non-GL windows
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12
-< CALayerDelegate >
-#endif
-{
-@public
-  CGContextRef layer_data;
-}
-- (void)displayLayer:(CALayer *)layer;
-- (void)viewFrameDidChange;
-- (BOOL)wantsLayer;
-- (void)dealloc;
-- (BOOL)did_view_resolution_change;
-@end
-#endif //10_8
-
-
-@implementation FLWindow
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
-- (NSPoint)convertBaseToScreen:(NSPoint)aPoint
-{
-  if (fl_mac_os_version >= 100700) {
-    NSRect r = [self convertRectToScreen:NSMakeRect(aPoint.x, aPoint.y, 0, 0)];
-    return r.origin;
-    }
-  else {
-    // replaces return [super convertBaseToScreen:aPoint] that may trigger a compiler warning
-    typedef NSPoint (*convertIMP)(id, SEL, NSPoint);
-    static convertIMP addr = (convertIMP)[NSWindow instanceMethodForSelector:@selector(convertBaseToScreen:)];
-    return addr(self, @selector(convertBaseToScreen:), aPoint);
-    }
-}
-#endif
-
-- (FLWindow*)initWithFl_W:(Fl_Window *)flw 
-	      contentRect:(NSRect)rect 
-		styleMask:(NSUInteger)windowStyle 
-{
-  self = [super initWithContentRect:rect styleMask:windowStyle backing:NSBackingStoreBuffered defer:NO];
-  if (self) {
-    w = flw;
-    if (fl_mac_os_version >= 100700) {
-      // replaces [self setRestorable:NO] that may trigger a compiler warning
-      typedef void (*setIMP)(id, SEL, BOOL);
-      static setIMP addr = (setIMP)[NSWindow instanceMethodForSelector:@selector(setRestorable:)];
-      addr(self, @selector(setRestorable:), NO);
-      }
-  }
-  return self;
-}
-- (Fl_Window *)getFl_Window;
-{
-  return w;
-}
-
-- (BOOL)canBecomeKeyWindow
-{
-  if (Fl::modal_ && (Fl::modal_ != w))
-    return NO;	// prevent the caption to be redrawn as active on click
-		//  when another modal window is currently the key win
-  return !(w->tooltip_window() || w->menu_window() || w->parent());
-}
-
-- (BOOL)canBecomeMainWindow
-{
-  if (Fl::modal_ && (Fl::modal_ != w))
-    return NO;	// prevent the caption to be redrawn as active on click
-		//  when another modal window is currently the key win
-
-  return !(w->tooltip_window() || w->menu_window() || w->parent());
-}
-
-- (void)recursivelySendToSubwindows:(SEL)sel
-{
-  [self performSelector:sel];
-  NSEnumerator *enumerator = [[self childWindows] objectEnumerator];
-  id child;
-  while ((child = [enumerator nextObject]) != nil) {
-    if ([child isKindOfClass:[FLWindow class]]) [child recursivelySendToSubwindows:sel];
-  }
-}
-
-- (void)setSubwindowFrame { // maps a subwindow at its correct position/size
-  Fl_Window *parent = w->window();
-  if (!parent) return;
-  FLWindow *pxid = fl_xid(parent);
-  if (!pxid) return;
-  int bx = w->x(); int by = w->y();
-  while (parent) {
-    bx += parent->x();
-    by += parent->y();
-    parent = parent->window();
-  }
-  NSRect rp = NSMakeRect(bx, main_screen_height - (by + w->h()), w->w(), w->h());
-  if (!NSEqualRects(rp, [self frame])) {
-    [self setFrame:rp display:YES];
-  }
-  if (![self parentWindow]) {
-    [pxid addChildWindow:self ordered:NSWindowAbove]; // needs OS X 10.2
-    [self orderWindow:NSWindowAbove relativeTo:[pxid windowNumber]]; // necessary under 10.3
-  }
-}
-
-- (void)checkSubwindowFrame {
-  if (![self parentWindow]) return;
-  // make sure this subwindow doesn't leak out of its parent window
-  Fl_Window *from = w, *parent;
-  CGRect full = CGRectMake(0, 0, w->w(), w->h()); // full subwindow area
-  CGRect srect = full; // will become new subwindow clip
-  int fromx = 0, fromy = 0;
-  while ((parent = from->window()) != NULL) { // loop over all parent windows
-    fromx -= from->x(); // parent origin in subwindow's coordinates
-    fromy -= from->y();
-    CGRect prect = CGRectMake(fromx, fromy, parent->w(), parent->h());
-    srect = CGRectIntersection(prect, srect); // area of subwindow inside its parent
-    from = parent;
-  }
-  CGRect *r = Fl_X::i(w)->subRect();
-  CGRect current_clip = (r ? *r : full); // current subwindow clip
-  if (!CGRectEqualToRect(srect, current_clip)) { // if new clip differs from current clip
-    delete r;
-    [[Fl_X::i(w)->xid contentView] setNeedsDisplay:YES]; // subwindow needs redrawn
-    if (CGRectEqualToRect(srect, full)) r = NULL;
-    else {
-      r = new CGRect(srect);
-      if (r->size.width == 0 && r->size.height == 0) r->origin.x = r->origin.y = 0;
-    }
-    Fl_X::i(w)->subRect(r);
-  }
-}
-
--(void)waitForExpose
-{
-  if ([self getFl_Window]->shown()) {
-    // this makes freshly created windows appear on the screen, if they are not there already
-    NSModalSession session = [NSApp beginModalSessionForWindow:self];
-    [NSApp runModalSession:session];
-    [NSApp endModalSession:session];
-  }
-}
-
-/* With Mac OS 10.11 the green window button makes window fullscreen (covers system menu bar and dock).
- When there are subwindows, they are by default constrained not to cover the menu bar
- (this is arguably a Mac OS bug).
- Overriding the constrainFrameRect:toScreen: method removes this constraint.
- */
-- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
-{
-  if ([self parentWindow]) return frameRect; // do not constrain subwindows
-  return [super constrainFrameRect:frameRect toScreen:screen]; // will prevent a window from going above the menu bar
-}
-@end
-
-@interface FLApplication : NSObject
-{
-}
-+ (void)sendEvent:(NSEvent *)theEvent;
-@end
-
-/*
- * This function is the central event handler.
- * It reads events from the event queue using the given maximum time
- * Funny enough, it returns the same time that it got as the argument. 
- */
-static double do_queued_events( double time = 0.0 ) 
-{
-  got_events = 0;
-  
-  // Check for re-entrant condition
-  if ( dataready.IsThreadRunning() ) {
-    dataready.CancelThread(DEBUGTEXT("AVOID REENTRY\n"));
-  }
-  
-  // Start thread to watch for data ready
-  if ( dataready.GetNfds() ) {
-    dataready.StartThread();
-  }
-  
-  fl_unlock_function();
-  NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask 
-                                      untilDate:[NSDate dateWithTimeIntervalSinceNow:time] 
-                                         inMode:NSDefaultRunLoopMode dequeue:YES];  
-  if (event != nil) {
-    got_events = 1;
-    [FLApplication sendEvent:event]; // will then call [NSApplication sendevent:]
-  }
-  fl_lock_function();
-  
-#if CONSOLIDATE_MOTION
-  if (send_motion && send_motion == fl_xmousewin) {
-    send_motion = 0;
-    Fl::handle(FL_MOVE, fl_xmousewin);
-  }
-#endif
-  
-  return time;
-}
-
-
-/*
- * This public function handles all events. It wait a maximum of 
- * 'time' seconds for an event. This version returns 1 if events
- * other than the timeout timer were processed.
- *
- * \todo there is no socket handling in this code whatsoever
- */
-int fl_wait( double time ) 
-{
-  do_queued_events( time );
-  return (got_events);
-}
-
-static void drain_dropped_files_list() {
-  open_cb_f_type open_cb = get_open_cb();
-  if (!open_cb) {
-    [dropped_files_list removeAllObjects];
-    [dropped_files_list release];
-    dropped_files_list = nil;
-    return;
-  }
-  NSString *s = (NSString*)[dropped_files_list objectAtIndex:0];
-  char *fname = strdup([s UTF8String]);
-  [dropped_files_list removeObjectAtIndex:0];
-  if ([dropped_files_list count] == 0) {
-    [dropped_files_list release];
-    dropped_files_list = nil;
-  }
-  open_cb(fname);
-  free(fname);
-}
-
-double fl_mac_flush_and_wait(double time_to_wait) {
-  if (dropped_files_list) { // when the list of dropped files is not empty, open one and remove it from list
-    drain_dropped_files_list();
-  }
-  static int in_idle = 0;
-  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-  if (Fl::idle) {
-    if (!in_idle) {
-      in_idle = 1;
-      Fl::idle();
-      in_idle = 0;
-    }
-    // the idle function may turn off idle, we can then wait:
-    if (Fl::idle) time_to_wait = 0.0;
-  }
-  if (fl_mac_os_version < 1011) NSDisableScreenUpdates(); // 10.3 Makes updates to all windows appear as a single event
-  Fl::flush();
-  if (fl_mac_os_version < 1011) NSEnableScreenUpdates(); // 10.3
-  if (Fl::idle && !in_idle) // 'idle' may have been set within flush()
-    time_to_wait = 0.0;
-  double retval = fl_wait(time_to_wait);
-  if (fl_gc) {
-    Fl_X::q_release_context();
-    }
-  [pool release];
-  return retval;
-}
-
-
-static NSInteger max_normal_window_level(void)
-{
-  Fl_X *x;
-  NSInteger max_level;
-
-  max_level = 0;
-
-  for (x = Fl_X::first;x;x = x->next) {
-    NSInteger level;
-    FLWindow *cw = x->xid;
-    Fl_Window *win = x->w;
-    if (!win || !cw || ![cw isVisible])
-      continue;
-    if (win->modal() || win->non_modal())
-      continue;
-    level = [cw level];
-    if (level >= max_level)
-      max_level = level;
-  }
-
-  return max_level;
-}
-
-// appropriate window level for modal windows
-static NSInteger modal_window_level(void)
-{
-  NSInteger level;
-
-  level = max_normal_window_level();
-  if (level < NSModalPanelWindowLevel)
-    return NSModalPanelWindowLevel;
-
-  // Need some room for non-modal windows
-  level += 2;
-
-  // We cannot exceed this
-  if (level > CGShieldingWindowLevel())
-    return CGShieldingWindowLevel();
-
-  return level;
-}
-
-// appropriate window level for non-modal windows
-static NSInteger non_modal_window_level(void)
-{
-  NSInteger level;
-
-  level = max_normal_window_level();
-  if (level < NSFloatingWindowLevel)
-    return NSFloatingWindowLevel;
-
-  level += 1;
-
-  if (level > CGShieldingWindowLevel())
-    return CGShieldingWindowLevel();
-
-  return level;
-}
-
-// makes sure modal and non-modal windows stay on top
-static void fixup_window_levels(void)
-{
-  NSInteger modal_level, non_modal_level;
-
-  Fl_X *x;
-  FLWindow *prev_modal, *prev_non_modal;
-
-  modal_level = modal_window_level();
-  non_modal_level = non_modal_window_level();
-
-  prev_modal = NULL;
-  prev_non_modal = NULL;
-
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = x->xid;
-    Fl_Window *win = x->w;
-    if (!win || !cw || ![cw isVisible])
-      continue;
-    if (win->modal()) {
-      if ([cw level] != modal_level) {
-        [cw setLevel:modal_level];
-        // changing level puts then in front, so make sure the
-        // stacking isn't messed up
-        if (prev_modal != NULL)
-          [cw orderWindow:NSWindowBelow
-              relativeTo:[prev_modal windowNumber]];
-      }
-      prev_modal = cw;
-    } else if (win->non_modal()) {
-      if ([cw level] != non_modal_level) {
-        [cw setLevel:non_modal_level];
-        if (prev_non_modal != NULL)
-          [cw orderWindow:NSWindowBelow
-              relativeTo:[prev_non_modal windowNumber]];
-      }
-      prev_non_modal = cw;
-    }
-  }
-}
-
-
-// updates Fl::e_x, Fl::e_y, Fl::e_x_root, and Fl::e_y_root
-static void update_e_xy_and_e_xy_root(NSWindow *nsw)
-{
-  NSPoint pt;
-  pt = [nsw mouseLocationOutsideOfEventStream];
-  Fl::e_x = int(pt.x);
-  Fl::e_y = int([[nsw contentView] frame].size.height - pt.y);
-  pt = [NSEvent mouseLocation];
-  Fl::e_x_root = int(pt.x);
-  Fl::e_y_root = int(main_screen_height - pt.y);
-}
-
-
-/*
- * Cocoa Mousewheel handler
- */
-static void cocoaMouseWheelHandler(NSEvent *theEvent)
-{
-  // Handle the new "MightyMouse" mouse wheel events. Please, someone explain
-  // to me why Apple changed the API on this even though the current API
-  // supports two wheels just fine. Matthias,
-  fl_lock_function();
-  
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  if ( !window->shown() ) {
-    fl_unlock_function();
-    return;
-  }
-  Fl::first_window(window);
-  
-  // Under OSX, single mousewheel increments are 0.1,
-  // so make sure they show up as at least 1..
-  //
-  float dx = [theEvent deltaX]; if ( fabs(dx) < 1.0 ) dx = (dx > 0) ? 1.0 : -1.0;
-  float dy = [theEvent deltaY]; if ( fabs(dy) < 1.0 ) dy = (dy > 0) ? 1.0 : -1.0;
-  if ([theEvent deltaX] != 0) {
-    Fl::e_dx = (int)-dx;
-    Fl::e_dy = 0;
-    if ( Fl::e_dx) Fl::handle( FL_MOUSEWHEEL, window );
-  } else if ([theEvent deltaY] != 0) {
-    Fl::e_dx = 0;
-    Fl::e_dy = (int)-dy;
-    if ( Fl::e_dy) Fl::handle( FL_MOUSEWHEEL, window );
-  } else {
-    fl_unlock_function();
-    return;
-  }
-  
-  fl_unlock_function();
-  
-  //  return noErr;
-}
-
-/*
- * Cocoa Magnify Gesture Handler
- */
-static void cocoaMagnifyHandler(NSEvent *theEvent)
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-  fl_lock_function();
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  if ( !window->shown() ) {
-    fl_unlock_function();
-    return;
-  }
-  Fl::first_window(window);
-  Fl::e_dy = [theEvent magnification]*1000; // 10.5.2
-  if ( Fl::e_dy) {
-    NSPoint pos = [theEvent locationInWindow];
-    pos.y = window->h() - pos.y;
-    NSUInteger mods = [theEvent modifierFlags];
-    mods_to_e_state( mods );
-    update_e_xy_and_e_xy_root([theEvent window]);
-    Fl::handle( FL_ZOOM_GESTURE, window );
-  }
-  fl_unlock_function();
-#endif
-}
-
-/*
- * Cocoa Mouse Button Handler
- */
-static void cocoaMouseHandler(NSEvent *theEvent)
-{
-  static int keysym[] = { 0, FL_Button+1, FL_Button+3, FL_Button+2 };
-  static int px, py;
-  
-  fl_lock_function();
-  
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  if ( !window->shown() ) {
-    fl_unlock_function();
-    return;
-  }
-  Fl_Window *first = Fl::first_window();
-  if (first != window && !(first->modal() || first->non_modal())) Fl::first_window(window);
-  NSPoint pos = [theEvent locationInWindow];
-  pos.y = window->h() - pos.y;
-  NSInteger btn = [theEvent buttonNumber]  + 1;
-  NSUInteger mods = [theEvent modifierFlags];  
-  int sendEvent = 0;
-  
-  NSEventType etype = [theEvent type];
-  if (etype == NSLeftMouseDown || etype == NSRightMouseDown || etype == NSOtherMouseDown) {
-    if (btn == 1) Fl::e_state |= FL_BUTTON1;
-    else if (btn == 3) Fl::e_state |= FL_BUTTON2;
-    else if (btn == 2) Fl::e_state |= FL_BUTTON3;
-  }
-  else if (etype == NSLeftMouseUp || etype == NSRightMouseUp || etype == NSOtherMouseUp) {
-    if (btn == 1) Fl::e_state &= ~FL_BUTTON1;
-    else if (btn == 3) Fl::e_state &= ~FL_BUTTON2;
-    else if (btn == 2) Fl::e_state &= ~FL_BUTTON3;
-    }
-    
-  switch ( etype ) {
-    case NSLeftMouseDown:
-    case NSRightMouseDown:
-    case NSOtherMouseDown:
-      sendEvent = FL_PUSH;
-      Fl::e_is_click = 1; 
-      px = (int)pos.x; py = (int)pos.y;
-      if ([theEvent clickCount] > 1) 
-        Fl::e_clicks++;
-      else
-        Fl::e_clicks = 0;
-      // fall through
-    case NSLeftMouseUp:
-    case NSRightMouseUp:
-    case NSOtherMouseUp:
-      if ( !window ) break;
-      if ( !sendEvent ) {
-        sendEvent = FL_RELEASE; 
-      }
-      Fl::e_keysym = keysym[ btn ];
-      // fall through
-    case NSMouseMoved:
-      if ( !sendEvent ) {
-        sendEvent = FL_MOVE; 
-      }
-      // fall through
-    case NSLeftMouseDragged:
-    case NSRightMouseDragged:
-    case NSOtherMouseDragged: {
-      if ( !sendEvent ) {
-        sendEvent = FL_MOVE; // Fl::handle will convert into FL_DRAG
-        if (fabs(pos.x-px)>5 || fabs(pos.y-py)>5) 
-          Fl::e_is_click = 0;
-      }
-      mods_to_e_state( mods );
-      update_e_xy_and_e_xy_root([theEvent window]);
-      Fl::handle( sendEvent, window );
-      }
-      break;
-    default:
-      break;
-  }
-  
-  fl_unlock_function();
-  
-  return;
-}
-
-@interface FLTextView : NSTextView // this subclass is only needed under OS X < 10.6 
-{
-  BOOL isActive;
-}
-+ (void)initialize;
-+ (FLTextView*)singleInstance;
-- (void)insertText:(id)aString;
-- (void)doCommandBySelector:(SEL)aSelector;
-- (void)setActive:(BOOL)a;
-@end
-static FLTextView *fltextview_instance = nil;
-@implementation FLTextView
-+ (void)initialize {
-  NSRect rect={{0,0},{20,20}};
-  fltextview_instance = [[FLTextView alloc] initWithFrame:rect];
-}
-+ (FLTextView*)singleInstance {
-  return fltextview_instance;
-}
-- (void)insertText:(id)aString
-{
-  if (isActive) [[[NSApp keyWindow] contentView] insertText:aString];
-}
-- (void)doCommandBySelector:(SEL)aSelector
-{
-  [[[NSApp keyWindow] contentView] doCommandBySelector:aSelector];
-}
-- (void)setActive:(BOOL)a
-{
-  isActive = a;
-}
-@end
-
-
-@interface FLWindowDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSWindowDelegate>
-#endif
-+ (void)initialize;
-+ (FLWindowDelegate*)singleInstance;
-- (void)windowDidMove:(NSNotification *)notif;
-- (void)windowDidResize:(NSNotification *)notif;
-- (void)windowDidResignKey:(NSNotification *)notif;
-- (void)windowDidBecomeKey:(NSNotification *)notif;
-- (void)windowDidBecomeMain:(NSNotification *)notif;
-- (void)windowDidDeminiaturize:(NSNotification *)notif;
-- (void)fl_windowMiniaturize:(NSNotification *)notif;
-- (void)windowDidMiniaturize:(NSNotification *)notif;
-- (BOOL)windowShouldClose:(id)fl;
-- (void)anyWindowWillClose:(NSNotification *)notif;
-- (void)doNothing:(id)unused;
-@end
-
-
-/* make subwindows re-appear after appl unhide or window deminiaturize
- (not necessary with 10.5 and above)
- */
-static void orderfront_subwindows(FLWindow *xid)
-{
-  NSArray *children = [xid childWindows]; // 10.2
-  NSEnumerator *enumerator = [children objectEnumerator];
-  id child;
-  while ((child = [enumerator nextObject]) != nil) { // this undo-redo seems necessary under 10.3
-    [xid removeChildWindow:child];
-    [xid addChildWindow:child ordered:NSWindowAbove];
-    [child orderWindow:NSWindowAbove relativeTo:[xid windowNumber]];
-    orderfront_subwindows(child);
-  }
-}
-
-#if FLTK_ABI_VERSION >= 10304
-static const unsigned windowDidResize_mask = 1;
-#else
-static const unsigned long windowDidResize_mask = 1;
-#endif
-
-bool Fl_X::in_windowDidResize() {
-#if FLTK_ABI_VERSION >= 10304
-  return mapped_to_retina_ & windowDidResize_mask;
-#else
-  return (unsigned long)xidChildren & windowDidResize_mask;
-#endif
-}
-
-void Fl_X::in_windowDidResize(bool b) {
-#if FLTK_ABI_VERSION >= 10304
-  if (b) mapped_to_retina_ |= windowDidResize_mask;
-  else mapped_to_retina_ &= ~windowDidResize_mask;
-#else
-  if (b) xidChildren = (Fl_X*)((unsigned long)xidChildren | windowDidResize_mask);
-  else xidChildren = (Fl_X*)((unsigned long)xidChildren & ~windowDidResize_mask);
-#endif
-}
-
-#if FLTK_ABI_VERSION >= 10304
-static const unsigned mapped_mask = 2;
-static const unsigned changed_mask = 4;
-#else
-static const unsigned long mapped_mask = 2; // sizeof(unsigned long) = sizeof(Fl_X*)
-static const unsigned long changed_mask = 4;
-#endif
-
-bool Fl_X::mapped_to_retina() {
-#if FLTK_ABI_VERSION >= 10304
-  return mapped_to_retina_ & mapped_mask;
-#else
-  return (unsigned long)xidChildren & mapped_mask;
-#endif
-}
-
-void Fl_X::mapped_to_retina(bool b) {
-#if FLTK_ABI_VERSION >= 10304
-  if (b) mapped_to_retina_ |= mapped_mask;
-  else mapped_to_retina_ &= ~mapped_mask;
-#else
-  if (b) xidChildren = (Fl_X*)((unsigned long)xidChildren | mapped_mask);
-  else xidChildren = (Fl_X*)((unsigned long)xidChildren & ~mapped_mask);
-#endif
-}
-
-bool Fl_X::changed_resolution() {
-#if FLTK_ABI_VERSION >= 10304
-  return mapped_to_retina_ & changed_mask;
-#else
-  return (unsigned long)xidChildren & changed_mask;
-#endif
-}
-
-void Fl_X::changed_resolution(bool b) {
-#if FLTK_ABI_VERSION >= 10304
-  if (b) mapped_to_retina_ |= changed_mask;
-  else mapped_to_retina_ &= ~changed_mask;
-#else
-  if (b) xidChildren = (Fl_X*)((unsigned long)xidChildren | changed_mask);
-  else xidChildren = (Fl_X*)((unsigned long)xidChildren & ~changed_mask);
-#endif
-}
-
-
-@interface FLWindowDelegateBefore10_6 : FLWindowDelegate
-- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client;
-@end
-@implementation FLWindowDelegateBefore10_6
-- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client
-{
-  return [FLTextView singleInstance];
-}
-@end
-
-@interface FLWindowDelegateBefore10_5 : FLWindowDelegateBefore10_6
--(void)windowDidDeminiaturize:(NSNotification *)notif;
--(void)windowWillMiniaturize:(NSNotification *)notif;
-@end
-@implementation FLWindowDelegateBefore10_5
--(void)windowDidDeminiaturize:(NSNotification *)notif
-{
-  [super windowDidDeminiaturize:notif];
-  fl_lock_function();
-  orderfront_subwindows([notif object]);
-  fl_unlock_function();
-}
--(void)windowWillMiniaturize:(NSNotification *)notif
-{
-  [super fl_windowMiniaturize:notif];
-  NSArray *children = [(NSWindow*)[notif object] childWindows]; // 10.2
-  NSEnumerator *enumerator = [children objectEnumerator];
-  id child;
-  while ((child = [enumerator nextObject]) != nil) [child orderOut:self];
-}
-@end
-
-static FLWindowDelegate *flwindowdelegate_instance = nil;
-@implementation FLWindowDelegate
-+ (void)initialize
-{
-  if (self == [FLWindowDelegate self]) {
-    if (fl_mac_os_version < 100500) flwindowdelegate_instance = [FLWindowDelegateBefore10_5 alloc];
-    else if (fl_mac_os_version < 100600) flwindowdelegate_instance = [FLWindowDelegateBefore10_6 alloc];
-    else flwindowdelegate_instance = [FLWindowDelegate alloc];
-    flwindowdelegate_instance = [flwindowdelegate_instance init];
-  }
-}
-+ (FLWindowDelegate*)singleInstance {
-  return flwindowdelegate_instance;
-}
-- (void)windowDidMove:(NSNotification *)notif
-{
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  // don't process move for a subwindow of a miniaturized top window
-  if (window->parent() && [fl_xid(window->top_window()) isMiniaturized]) return;
-  fl_lock_function();
-  resize_from_system = window;
-  NSPoint pt2;
-  pt2 = [nsw convertBaseToScreen:NSMakePoint(0, [[nsw contentView] frame].size.height)];
-  update_e_xy_and_e_xy_root(nsw);
-  pt2.y = main_screen_height - pt2.y;
-  Fl_Window *parent = window->window();
-  while (parent) {
-    pt2.x -= parent->x();
-    pt2.y -= parent->y();
-    parent = parent->window();
-  }
-  window->position((int)pt2.x, (int)pt2.y);
-  if (fl_mac_os_version < 100700) { // after move, redraw parent and children of GL windows
-    parent = window->window();
-    if (parent && parent->as_gl_window()) window->redraw();
-    if (parent && window->as_gl_window()) parent->redraw();
-  }
-  resize_from_system = NULL;
-  // at least since MacOS 10.10: OS sends windowDidMove to parent window and then to children
-  // FLTK sets position of parent and children. setSubwindowFrame is no longer necessary.
-  if (fl_mac_os_version < 101000) [nsw recursivelySendToSubwindows:@selector(setSubwindowFrame)];
-  [nsw checkSubwindowFrame];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  FLView *view = (FLView*)[nsw contentView];
-  if ([view layer]) [view did_view_resolution_change];
-#endif
-  fl_unlock_function();
-}
-- (void)windowDidResize:(NSNotification *)notif
-{
-  FLWindow *nsw = (FLWindow*)[notif object];
-  if (![nsw isVisible]) return;
-  fl_lock_function();
-  Fl_Window *window = [nsw getFl_Window];
-  NSRect r; NSPoint pt2;
-  r = [[nsw contentView] frame];
-  pt2 = [nsw convertBaseToScreen:NSMakePoint(0, r.size.height)];
-  pt2.y = main_screen_height - pt2.y;
-  Fl_Window *parent = window->window();
-  while (parent) {
-    pt2.x -= parent->x();
-    pt2.y -= parent->y();
-    parent = parent->window();
-  }
-  resize_from_system = window;
-  if (window->as_gl_window() && Fl_X::i(window)) Fl_X::i(window)->in_windowDidResize(true);
-  update_e_xy_and_e_xy_root(nsw);
-  window->resize((int)pt2.x, (int)pt2.y, (int)r.size.width, (int)r.size.height);
-  [nsw recursivelySendToSubwindows:@selector(setSubwindowFrame)];
-  [nsw recursivelySendToSubwindows:@selector(checkSubwindowFrame)];
-  if (window->as_gl_window() && Fl_X::i(window)) Fl_X::i(window)->in_windowDidResize(false);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  if (views_use_CA && !window->as_gl_window()) [(FLViewLayer*)[nsw contentView] viewFrameDidChange];
-#endif
-  fl_unlock_function();
-}
-- (void)windowDidResignKey:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  /* Fullscreen windows obscure all other windows so we need to return
-   to a "normal" level when the user switches to another window,
-   unless this other window is above the fullscreen window */
-  if (window->fullscreen_active() && [NSApp keyWindow] && [[NSApp keyWindow] level] <= [nsw level]) {
-    [nsw setLevel:NSNormalWindowLevel];
-    fixup_window_levels();
-  }
-  Fl::handle( FL_UNFOCUS, window);
-  fl_unlock_function();
-}
-- (void)windowDidBecomeKey:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *w = [nsw getFl_Window];
-  /* Restore previous fullscreen level */
-  if (w->fullscreen_active()) {
-    [nsw setLevel:NSStatusWindowLevel];
-    fixup_window_levels();
-  }
-  Fl::handle( FL_FOCUS, w);
-  fl_unlock_function();
-}
-- (void)windowDidBecomeMain:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  Fl::first_window(window);
-  update_e_xy_and_e_xy_root(nsw);
-  fl_unlock_function();
-}
-- (void)windowDidDeminiaturize:(NSNotification *)notif
-{
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  if ([nsw miniwindowImage]) { [nsw setMiniwindowImage:nil]; }
-  Fl_Window *window = [nsw getFl_Window];
-  [nsw recursivelySendToSubwindows:@selector(setSubwindowFrame)];
-  Fl::handle(FL_SHOW, window);
-  update_e_xy_and_e_xy_root(nsw);
-  Fl::flush(); // Process redraws set by FL_SHOW.
-  fl_unlock_function();
-}
-- (void)fl_windowMiniaturize:(NSNotification *)notif
-{ // Same as windowWillMiniaturize before 10.5,
-  // and called by windowDidMiniaturize after 10.5.
-  // Subwindows are not captured in system-built miniature window image
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  if ([[nsw childWindows] count]) {
-    // capture the window and its subwindows and use as miniature window image
-    Fl_Window *window = [nsw getFl_Window];
-    NSBitmapImageRep *bitmap = rect_to_NSBitmapImageRep(window, 0, 0, window->w(), window->h());
-    NSImage *img = [[[NSImage alloc] initWithSize:NSMakeSize([bitmap pixelsWide], [bitmap pixelsHigh])] autorelease];
-    [img addRepresentation:bitmap];
-    [bitmap release];
-    [nsw setMiniwindowImage:img];
-  }
-  fl_unlock_function();
-}
-- (void)windowDidMiniaturize:(NSNotification *)notif
-{
-  if (fl_mac_os_version >= 100500) [self fl_windowMiniaturize:notif];
-  fl_lock_function();
-  FLWindow *nsw = (FLWindow*)[notif object];
-  Fl_Window *window = [nsw getFl_Window];
-  Fl::handle(FL_HIDE, window);
-  fl_unlock_function();
-}
-- (BOOL)windowShouldClose:(id)fl
-{
-  fl_lock_function();
-  Fl::handle( FL_CLOSE, [(FLWindow *)fl getFl_Window] ); // this might or might not close the window
-  fl_unlock_function();
-  // the system doesn't need to send [fl close] because FLTK does it when needed
-  return NO; 
-}
-- (void)anyWindowWillClose:(NSNotification *)notif
-{
-  fl_lock_function();
-  if ([[notif object] isKeyWindow]) {
-    // If the closing window is the key window,
-    // find a bordered top-level window to become the new key window
-    Fl_Window *w = Fl::first_window();
-    while (w && (w->parent() || !w->border() || !w->visible())) {
-      w = Fl::next_window(w);
-    }
-    if (w) {
-      [Fl_X::i(w)->xid makeKeyWindow];
-    }
-  }
-  fl_unlock_function();
-}
-- (void)doNothing:(id)unused
-{
-  return;
-}
-@end
-
-@interface FLAppDelegate : NSObject 
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-<NSApplicationDelegate>
-#endif
-{
-  @public
-  open_cb_f_type open_cb;
-  TSMDocumentID currentDoc;
-}
-- (void)applicationDidFinishLaunching:(NSNotification *)notification;
-- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender;
-- (void)applicationDidBecomeActive:(NSNotification *)notify;
-- (void)applicationDidChangeScreenParameters:(NSNotification *)aNotification;
-- (void)applicationDidUpdate:(NSNotification *)aNotification;
-- (void)applicationWillResignActive:(NSNotification *)notify;
-- (void)applicationWillHide:(NSNotification *)notify;
-- (void)applicationWillUnhide:(NSNotification *)notify;
-- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename;
-@end
-@implementation FLAppDelegate
-- (void)applicationDidFinishLaunching:(NSNotification *)notification
-{
-  if (fl_mac_os_version >= 101300 && [NSApp isRunning]) [NSApp stop:nil];
-}
-- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender
-{
-  fl_lock_function();
-  NSApplicationTerminateReply reply = (fl_mac_quit_early ? NSTerminateNow : NSTerminateCancel);
-  while ( Fl_X::first ) {
-    Fl_Window *win = Fl::first_window();
-    if (win->parent()) win = win->top_window();
-    Fl_Widget_Tracker wt(win); // track the window object
-    Fl::handle(FL_CLOSE, win);
-    if (wt.exists() && win->shown()) { // the user didn't close win
-      reply = NSTerminateCancel; // so we return to the main program now
-      break;
-    }
-  }
-  fl_unlock_function();
-  return reply;
-}
-- (void)applicationDidBecomeActive:(NSNotification *)notify
-{
-  fl_lock_function();
-
-  // update clipboard status
-  clipboard_check();
-
-  /**
-   * Cocoa organizes the Z depth of windows on a global priority. FLTK however
-   * expects the window manager to organize Z level by application. The trickery
-   * below will change Z order during activation and deactivation.
-   */
-  fixup_window_levels();
-
-  fl_unlock_function();
-}
-- (void)applicationDidChangeScreenParameters:(NSNotification *)unused
-{ // react to changes in screen numbers and positions
-  fl_lock_function();
-  main_screen_height = [[[NSScreen screens] objectAtIndex:0] frame].size.height;
-  Fl::call_screen_init();
-  // FLTK windows have already been notified they were moved,
-  // but they had the old main_screen_height, so they must be notified again.
-  NSArray *windows = [NSApp windows];
-  int count = [windows count];
-  for (int i = 0; i < count; i++) {
-    NSWindow *win = [windows objectAtIndex:i];
-    if ([win isKindOfClass:[FLWindow class]] && ![win parentWindow] && [win isVisible]) {
-      [[NSNotificationCenter defaultCenter] postNotificationName:NSWindowDidMoveNotification object:win];
-      }
-    }
-  Fl::handle(FL_SCREEN_CONFIGURATION_CHANGED, NULL);
-  fl_unlock_function();
-}
-- (void)applicationDidUpdate:(NSNotification *)aNotification
-{
-  if (im_enabled != -1) {
-    TSMDocumentID newDoc;
-    // It is extremely unclear when Cocoa decides to create/update
-    // the input context, but debugging reveals that it is done
-    // by NSApplication:updateWindows. So check if the input context
-    // has shifted after each such run so that we can update our
-    // input methods status.
-    newDoc = TSMGetActiveDocument();
-    if (newDoc != currentDoc) {
-      TSMDocumentID doc;
-    
-      doc = TSMGetActiveDocument();
-      
-      if (im_enabled)
-        TSMRemoveDocumentProperty(doc, kTSMDocumentEnabledInputSourcesPropertyTag);
-      else {
-        CFArrayRef inputSources;
-        
-        inputSources = TISCreateASCIICapableInputSourceList();
-        TSMSetDocumentProperty(doc, kTSMDocumentEnabledInputSourcesPropertyTag,
-                               sizeof(CFArrayRef), &inputSources);
-        CFRelease(inputSources);
-      }
-      currentDoc = newDoc;
-    }
-  }
-}
-- (void)applicationWillResignActive:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  FLWindow *top = 0;
-  // sort in all regular windows
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw) {
-      if (win->modal()) {
-      } else if (win->non_modal()) {
-      } else {
-        if (!top) top = cw;
-      }
-    }
-  }
-  // now sort in all modals
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw && [cw isVisible]) {
-      if (win->modal()) {
-        [cw setLevel:NSNormalWindowLevel];
-        if (top) [cw orderWindow:NSWindowAbove relativeTo:[top windowNumber]];
-      }
-    }
-  }
-  // finally all non-modals
-  for (x = Fl_X::first;x;x = x->next) {
-    FLWindow *cw = x->xid;
-    Fl_Window *win = x->w;
-    if (win && cw && [cw isVisible]) {
-      if (win->non_modal()) {
-        [cw setLevel:NSNormalWindowLevel];
-        if (top) [cw orderWindow:NSWindowAbove relativeTo:[top windowNumber]];
-      }
-    }
-  }
-  fl_unlock_function();
-}
-- (void)applicationWillHide:(NSNotification *)notify
-{
-  fl_lock_function();
-  Fl_X *x;
-  for (x = Fl_X::first;x;x = x->next) {
-    Fl_Window *window = x->w;
-    if ( !window->parent() ) Fl::handle( FL_HIDE, window);
-    }
-  fl_unlock_function();
-}
-- (void)applicationWillUnhide:(NSNotification *)notify
-{
-  fl_lock_function();
-  for (Fl_X *x = Fl_X::first;x;x = x->next) {
-    Fl_Window *w = x->w;
-    if ( !w->parent() && ![x->xid isMiniaturized]) {
-      Fl::handle(FL_SHOW, w);
-      }
-  }
-  fl_unlock_function();
-}
-- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
-{
-  if (fl_mac_os_version < 101300) {
-    // without the next two statements, the opening of the 1st window is delayed by several seconds
-    // under 10.8 ≤ Mac OS < 10.13 when a file is dragged on the application icon
-    Fl_Window *firstw = Fl::first_window();
-    if (firstw) firstw->wait_for_expose();
-  } else if (in_nsapp_run) { // memorize all dropped filenames
-    if (!dropped_files_list) dropped_files_list = [[NSMutableArray alloc] initWithCapacity:1];
-    [dropped_files_list addObject:filename];
-    return YES;
-  }
-  if (open_cb) {
-    fl_lock_function();
-    (*open_cb)([filename UTF8String]);
-    Fl::flush(); // useful for AppleScript that does not break the event loop
-    fl_unlock_function();
-    return YES;
-  }
-  return NO;
-}
-@end
-
-@interface FLAppDelegateBefore10_5 : FLAppDelegate
-- (void)applicationDidUnhide:(NSNotification *)notify;
-- (void)applicationDidUpdate:(NSNotification *)aNotification;
-@end
-@implementation FLAppDelegateBefore10_5
-- (void)applicationDidUnhide:(NSNotification *)notify
-{ // before 10.5, subwindows are lost when application is unhidden
-  fl_lock_function();
-  for (Fl_X *x = Fl_X::first; x; x = x->next) {
-    if (![x->xid parentWindow]) {
-      orderfront_subwindows(x->xid);
-    }
-  }
-  fl_unlock_function();
-}
-- (void)applicationDidUpdate:(NSNotification *)aNotification
-{
-}
-@end
-
-static open_cb_f_type get_open_cb() {
-  return ((FLAppDelegate*)[NSApp delegate])->open_cb;
-}
-
-/*
- * Install an open documents event handler...
- */
-void fl_open_callback(void (*cb)(const char *)) {
-  fl_open_display();
-  ((FLAppDelegate*)[NSApp delegate])->open_cb = cb;
-}
-
-@implementation FLApplication
-+ (void)sendEvent:(NSEvent *)theEvent
-{
-  if (fl_send_system_handlers(theEvent))
-    return;
-
-  NSEventType type = [theEvent type];  
-  if (type == NSLeftMouseDown) {
-    fl_lock_function();
-    Fl_Window *grab = Fl::grab();
-    if (grab) {
-      FLWindow *win = (FLWindow *)[theEvent window];
-      if ( [win isKindOfClass:[FLWindow class]] && grab != [win getFl_Window]) {
-	// a click event out of a menu window, so we should close this menu
-	// done here to catch also clicks on window title bar/resize box 
-	cocoaMouseHandler(theEvent);
-      }
-    }
-    fl_unlock_function();
-  } else if (type == NSApplicationDefined) {
-    if ([theEvent subtype] == FLTKDataReadyEvent) {
-      processFLTKEvent();
-    }
-    return;
-  } else if (type == NSKeyUp) {
-    // The default sendEvent turns key downs into performKeyEquivalent when
-    // modifiers are down, but swallows the key up if the modifiers include
-    // command.  This one makes all modifiers consistent by always sending key ups.
-    // FLView treats performKeyEquivalent to keyDown, but performKeyEquivalent is
-    // still needed for the system menu.
-    [[NSApp keyWindow] sendEvent:theEvent];
-    return;
-    }
-  [NSApp sendEvent:theEvent]; 
-}
-@end
-
-static BOOL is_bundled() {
-  static int value = 2;
-  if (value == 2) {
-    value = 1;
-    NSBundle *bundle = [NSBundle mainBundle];
-    if (bundle) {
-      NSString *exe = [[bundle executablePath] stringByStandardizingPath];
-      NSString *bpath = [bundle bundlePath];
-      NSString *exe_dir = [exe stringByDeletingLastPathComponent];
-      if ([bpath isEqualToString:exe] || [bpath isEqualToString:exe_dir]) value = 0;
-    } else value = 0;
-  }
-  return value == 1;
-}
-
-/* Prototype of undocumented function needed to support Mac OS 10.2 or earlier
- extern "C" {
- OSErr CPSEnableForegroundOperation(ProcessSerialNumber*, UInt32, UInt32, UInt32, UInt32);
- }
- */
-static void foreground_and_activate() {
-  if ( !is_bundled() ) { // only transform the application type for unbundled apps
-    ProcessSerialNumber cur_psn = { 0, kCurrentProcess };
-    TransformProcessType(&cur_psn, kProcessTransformToForegroundApplication); // needs Mac OS 10.3
-    /* support of Mac OS 10.2 or earlier used this undocumented call instead
-     err = CPSEnableForegroundOperation(&cur_psn, 0x03, 0x3C, 0x2C, 0x1103);
-     */
-  }
-  [NSApp activateIgnoringOtherApps:YES];
-}
-
-void fl_open_display() {
-  static char beenHereDoneThat = 0;
-  if ( !beenHereDoneThat ) {
-    beenHereDoneThat = 1;
-    
-    BOOL need_new_nsapp = (NSApp == nil);
-    if (need_new_nsapp) [NSApplication sharedApplication];
-    NSAutoreleasePool *localPool;
-    localPool = [[NSAutoreleasePool alloc] init]; // never released
-    FLAppDelegate *delegate = (fl_mac_os_version < 100500 ? [FLAppDelegateBefore10_5 alloc] : [FLAppDelegate alloc]);
-    [(NSApplication*)NSApp setDelegate:[delegate init]];
-    if (need_new_nsapp) {
-      if (fl_mac_os_version >= 101300 && is_bundled()) {
-        [NSApp activateIgnoringOtherApps:YES];
-        in_nsapp_run = true;
-        [NSApp run];
-        in_nsapp_run = false;
-      }
-      else [NSApp finishLaunching];
-    }
-    // empty the event queue but keep system events for drag&drop of files at launch
-    NSEvent *ign_event;
-    do ign_event = [NSApp nextEventMatchingMask:(NSAnyEventMask & ~NSSystemDefinedMask)
-					untilDate:[NSDate dateWithTimeIntervalSinceNow:0] 
-					   inMode:NSDefaultRunLoopMode 
-					  dequeue:YES];
-    while (ign_event);
-    
-    if (![NSApp isActive]) foreground_and_activate();
-    if (![NSApp servicesMenu]) createAppleMenu();
-    main_screen_height = [[[NSScreen screens] objectAtIndex:0] frame].size.height;
-    [[NSNotificationCenter defaultCenter] addObserver:[FLWindowDelegate singleInstance]
-					     selector:@selector(anyWindowWillClose:) 
-						 name:NSWindowWillCloseNotification 
-					       object:nil];
-    if (![NSThread isMultiThreaded]) {
-      // With old OS X versions, it is necessary to create one thread for secondary pthreads to be
-      // allowed to use cocoa, especially to create an NSAutoreleasePool.
-      // We create a thread that does nothing so it completes very fast:
-      [NSThread detachNewThreadSelector:@selector(doNothing:) toTarget:[FLWindowDelegate singleInstance] withObject:nil];
-    }
-  }
-}
-
-
-/*
- * get rid of allocated resources
- */
-void fl_close_display() {
-}
-
-// Force a "Roman" or "ASCII" keyboard, which both the Mozilla and
-// Safari people seem to think implies turning off advanced IME stuff
-// (see nsTSMManager::SyncKeyScript in Mozilla and enableSecureTextInput
-// in Safari/Webcore). Should be good enough for us then...
-
-static int input_method_startup()
-{
-  static int retval = -1; // -1: not initialized, 0: not usable, 1: ready for use
-  if (retval == -1) {
-    fl_open_display();
-    if (fl_mac_os_version >= 100500) {
-      TSMGetActiveDocument = (TSMGetActiveDocument_type)Fl_X::get_carbon_function("TSMGetActiveDocument");
-      TSMSetDocumentProperty = (TSMSetDocumentProperty_type)Fl_X::get_carbon_function("TSMSetDocumentProperty");
-      TSMRemoveDocumentProperty = (TSMRemoveDocumentProperty_type)Fl_X::get_carbon_function("TSMRemoveDocumentProperty");
-      TISCreateASCIICapableInputSourceList = (TISCreateASCIICapableInputSourceList_type)Fl_X::get_carbon_function("TISCreateASCIICapableInputSourceList");
-      retval = (TSMGetActiveDocument && TSMSetDocumentProperty && TSMRemoveDocumentProperty && TISCreateASCIICapableInputSourceList ? 1 : 0);
-    } else {
-      KeyScript = (KeyScript_type)Fl_X::get_carbon_function("KeyScript");
-      retval = (KeyScript? 1 : 0);
-    }
-  }
-  return retval;
-}
-
-void Fl::enable_im() {
-  if (!input_method_startup()) return;
-
-  im_enabled = 1;
-
-  if (fl_mac_os_version >= 100500) {
-    ((FLAppDelegate*)[NSApp delegate])->currentDoc = NULL;
-    [NSApp updateWindows]; // triggers [FLAppDelegate applicationDidUpdate]
-  }
-  else
-    KeyScript(smKeyEnableKybds);
-}
-
-void Fl::disable_im() {
-  if (!input_method_startup()) return;
-
-  im_enabled = 0;
-
-  if (fl_mac_os_version >= 100500) {
-    ((FLAppDelegate*)[NSApp delegate])->currentDoc = NULL;
-    [NSApp updateWindows]; // triggers [FLAppDelegate applicationDidUpdate]
-  }
-  else
-    KeyScript(smEnableRomanKybdsOnly);
-}
-
-
-// Gets the border sizes and the titlebar size
-static void get_window_frame_sizes(int &bx, int &by, int &bt) {
-  static bool first = true;
-  static int top, left, bottom;
-  if (first) {
-    first = false;
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    NSRect inside = { {20,20}, {100,100} };
-    NSRect outside = [NSWindow  frameRectForContentRect:inside styleMask:NSTitledWindowMask];
-    left = int(outside.origin.x - inside.origin.x);
-    bottom = int(outside.origin.y - inside.origin.y);
-    top = int(outside.size.height - inside.size.height) - bottom;
-    [pool release];
-    }
-  bx = left;
-  by = bottom;
-  bt = top;
-}
-
-/*
- * smallest x coordinate in screen space of work area of menubar-containing display
- */
-int Fl::x() {
-  return int([[[NSScreen screens] objectAtIndex:0] visibleFrame].origin.x);
-}
-
-
-/*
- * smallest y coordinate in screen space of work area of menubar-containing display
- */
-int Fl::y() {
-  fl_open_display();
-  NSRect visible = [[[NSScreen screens] objectAtIndex:0] visibleFrame];
-  return int(main_screen_height - (visible.origin.y + visible.size.height));
-}
-
-
-/*
- * width of work area of menubar-containing display
- */
-int Fl::w() {
-  return int([[[NSScreen screens] objectAtIndex:0] visibleFrame].size.width);
-}
-
-
-/*
- * height of work area of menubar-containing display
- */
-int Fl::h() {
-  return int([[[NSScreen screens] objectAtIndex:0] visibleFrame].size.height);
-}
-
-// computes the work area of the nth screen (screen #0 has the menubar)
-void Fl_X::screen_work_area(int &X, int &Y, int &W, int &H, int n)
-{
-  fl_open_display();
-  NSRect r = [[[NSScreen screens] objectAtIndex:n] visibleFrame];
-  X   = int(r.origin.x);
-  Y   = main_screen_height - int(r.origin.y + r.size.height);
-  W   = int(r.size.width);
-  H   = int(r.size.height);
-}
-
-/*
- * get the current mouse pointer world coordinates
- */
-void Fl::get_mouse(int &x, int &y) 
-{
-  fl_open_display();
-  NSPoint pt = [NSEvent mouseLocation];
-  x = int(pt.x);
-  y = int(main_screen_height - pt.y);
-}
-
-
-/*
- * Gets called when a window is created or resized, or moved into/out a retina display
- * (with Mac OS 10.11 also when deminiaturized)
- */    
-static void handleUpdateEvent( Fl_Window *window ) 
-{
-  if ( !window ) return;
-  Fl_X *i = Fl_X::i( window );
-  [(FLView*)[fl_xid(window) contentView] did_view_resolution_change];
-  i->wait_for_expose = 0;
-  if ( i->region ) {
-    XDestroyRegion(i->region);
-    i->region = 0;
-  }
-  window->clear_damage(FL_DAMAGE_ALL);
-  i->flush();
-  window->clear_damage();
-}     
-
-
-int Fl_X::fake_X_wm(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
-  int W, H, xoff, yoff, dx, dy;
-  int ret = bx = by = bt = 0;
-  if (w->border() && !w->parent()) {
-    if (w->maxw != w->minw || w->maxh != w->minh) {
-      ret = 2;
-    } else {
-      ret = 1;
-    }
-    get_window_frame_sizes(bx, by, bt);
-  }
-  // The coordinates of the whole window, including non-client area
-  xoff = bx;
-  yoff = by + bt;
-  dx = 2*bx;
-  dy = 2*by + bt;
-  X = w->x()-xoff;
-  Y = w->y()-yoff;
-  W = w->w()+dx;
-  H = w->h()+dy;
-  
-  if (w->parent()) return 0;
-  
-  // Proceed to positioning the window fully inside the screen, if possible
-  
-  // let's get a little elaborate here. Mac OS X puts a lot of stuff on the desk
-  // that we want to avoid when positioning our window, namely the Dock and the
-  // top menu bar (and even more stuff in 10.4 Tiger). So we will go through the
-  // list of all available screens and find the one that this window is most
-  // likely to go to, and then reposition it to fit withing the 'good' area.
-  //  Rect r;
-  // find the screen, that the center of this window will fall into
-  int R = X+W, B = Y+H; // right and bottom
-  int cx = (X+R)/2, cy = (Y+B)/2; // center of window;
-  NSScreen *gd = NULL;
-  NSArray *a = [NSScreen screens]; int count = (int)[a count]; NSRect r; int i;
-  for( i = 0; i < count; i++) {
-    r = [[a objectAtIndex:i] frame];
-    r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-    if (   cx >= r.origin.x && cx <= r.origin.x + r.size.width
-        && cy >= r.origin.y && cy <= r.origin.y + r.size.height)
-      break;
-  }
-  if (i < count) gd = [a objectAtIndex:i];
-  
-  // if the center doesn't fall on a screen, try the top left
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-      if (    X >= r.origin.x && X <= r.origin.x + r.size.width
-          && Y >= r.origin.y  && Y <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if that doesn't fall on a screen, try the top right
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-      if (    R >= r.origin.x && R <= r.origin.x + r.size.width
-          && Y >= r.origin.y  && Y <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if that doesn't fall on a screen, try the bottom left
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-      if (    X >= r.origin.x && X <= r.origin.x + r.size.width
-          && Y+H >= r.origin.y  && Y+H <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // last resort, try the bottom right
-  if (!gd) {
-    for( i = 0; i < count; i++) {
-      r = [[a objectAtIndex:i] frame];
-      r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-      if (    R >= r.origin.x && R <= r.origin.x + r.size.width
-          && Y+H >= r.origin.y  && Y+H <= r.origin.y + r.size.height)
-        break;
-    }
-    if (i < count) gd = [a objectAtIndex:i];
-  }
-  // if we still have not found a screen, we will use the main
-  // screen, the one that has the application menu bar.
-  if (!gd) gd = [a objectAtIndex:0];
-  if (gd) {
-    r = [gd visibleFrame];
-    r.origin.y = main_screen_height - (r.origin.y + r.size.height); // use FLTK's multiscreen coordinates
-    if ( R > r.origin.x + r.size.width ) X -= int(R - (r.origin.x + r.size.width));
-    if ( B > r.size.height + r.origin.y ) Y -= int(B - (r.size.height + r.origin.y));
-    if ( X < r.origin.x ) X = int(r.origin.x);
-    if ( Y < r.origin.y ) Y = int(r.origin.y);
-  }
-  
-  // Return the client area's top left corner in (X,Y)
-  X+=xoff;
-  Y+=yoff;
-  
-  return ret;
-}
-
-
-Fl_Window *fl_dnd_target_window = 0;
-
-static void  q_set_window_title(NSWindow *nsw, const char * name, const char *mininame) {
-  CFStringRef title = CFStringCreateWithCString(NULL, (name ? name : ""), kCFStringEncodingUTF8);
-  if(!title) { // fallback when name contains malformed UTF-8
-    int l = strlen(name);
-    unsigned short* utf16 = new unsigned short[l + 1];
-    l = fl_utf8toUtf16(name, l, utf16, l + 1);
-    title = CFStringCreateWithCharacters(NULL, utf16, l);
-    delete[] utf16;
-    }
-  [nsw setTitle:(NSString*)title];
-  CFRelease(title);
-  if (mininame && strlen(mininame)) {
-    CFStringRef minititle = CFStringCreateWithCString(NULL, mininame, kCFStringEncodingUTF8);
-    if (minititle) {
-      [nsw setMiniwindowTitle:(NSString*)minititle];
-      CFRelease(minititle);
-    }
-  }
-}
-
-/**                 How FLTK handles Mac OS text input
- 
- Let myview be the instance of the FLView class that has the keyboard focus. FLView is an FLTK-defined NSView subclass
- that implements the NSTextInputClient protocol to properly handle text input. It also implements the old NSTextInput
- protocol to run with OS <= 10.4. The few NSTextInput protocol methods that differ in signature from the NSTextInputClient 
- protocol transmit the received message to the corresponding NSTextInputClient method.
-
- Keyboard input sends keyDown: and performKeyEquivalent: messages to myview. The latter occurs for keys such as
- ForwardDelete, arrows and F1, and when the Ctrl or Cmd modifiers are used. Other key presses send keyDown: messages.
- The keyDown: method calls [myview process_keydown:theEvent] that is equivalent to
- [[myview inputContext] handleEvent:theEvent], and triggers system processing of keyboard events.
- The performKeyEquivalent: method directly calls Fl::handle(FL_KEYBOARD, focus-window)
- when the Ctrl or Cmd modifiers are used. If not, it also calls [[myview inputContext] handleEvent:theEvent].
- The performKeyEquivalent: method returns YES when the keystroke has been handled and NO otherwise, which allows
- shortcuts of the system menu to be processed. Three sorts of messages are then sent back by the system to myview: 
- doCommandBySelector:, setMarkedText: and insertText:. All 3 messages eventually produce Fl::handle(FL_KEYBOARD, win) calls.
- The doCommandBySelector: message allows to process events such as new-line, forward and backward delete, arrows, 
- escape, tab, F1. The message setMarkedText: is sent when marked text, that is, temporary text that gets replaced later 
- by some other text, is inserted. This happens when a dead key is pressed, and also 
- when entering complex scripts (e.g., Chinese). Fl_X::next_marked_length gives the byte
- length of marked text before the FL_KEYBOARD event is processed. Fl::compose_state gives this length after this processing.
- Message insertText: is sent to enter text in the focused widget. If there's marked text, Fl::compose_state is > 0, and this
- marked text gets replaced by the inserted text. If there's no marked text, the new text is inserted at the insertion point. 
- When the character palette is used to enter text, the system sends an insertText: message to myview. 
- The in_key_event field of the FLView class allows to differentiate keyboard from palette inputs.
- 
- During processing of the handleEvent message, inserted and marked strings are concatenated in a single string
- inserted in a single FL_KEYBOARD event after return from handleEvent. The need_handle member variable of FLView allows 
- to determine when setMarkedText or insertText strings have been sent during handleEvent processing and must trigger 
- an FL_KEYBOARD event. Concatenating two insertText operations or an insertText followed by a setMarkedText is possible. 
- In contrast, setMarkedText followed by insertText or by another setMarkedText isn't correct if concatenated in a single 
- string. Thus, in such case, the setMarkedText and the next operation produce each an FL_KEYBOARD event. 
- 
- OS >= 10.7 contains a feature where pressing and holding certain keys opens a menu window that shows a list 
- of possible accented variants of this key. The selectedRange field of the FLView class and the selectedRange, insertText:
- and setMarkedText: methods of the NSTextInputClient protocol are used to support this feature.
- The notion of selected text (!= marked text) is monitored by the selectedRange field. 
- The -(NSRange)[FLView selectedRange] method is used to control whether an FLTK widget opens accented character windows 
- by returning .location = NSNotFound to disable that, or returning the value of the selectedRange field to enable the feature.
- When selectedRange.location >= 0, the value of selectedRange.length is meaningful. 0 means no text is currently selected, 
- > 0 means this number of characters before the insertion point are selected. The insertText: method does
- selectedRange = NSMakeRange(100, 0); to indicate no text is selected. The setMarkedText: method does   
- selectedRange = NSMakeRange(100, newSelection.length); to indicate that this length of text is selected.
-
- With OS <= 10.5, the NSView class does not implement the inputContext message. [myview process_keydown:theEvent] is
- equivalent to [[FLTextInputContext singleInstance] handleEvent:theEvent].
- Method +[FLTextInputContext singleInstance] returns an instance of class FLTextInputContext that possesses
- a handleEvent: method. The class FLTextView implements the so-called view's "field editor". This editor is an instance
- of the FLTextView class allocated by the -(id)[FLWindowDelegate windowWillReturnFieldEditor: toObject:] method.
- The -(BOOL)[FLTextInputContext handleEvent:] method emulates the missing 10.6 -(BOOL)[NSTextInputContext handleEvent:]
- by sending the interpretKeyEvents: message to the FLTextView object. The system sends back doCommandBySelector: and
- insertText: messages to the FLTextView object that are transmitted unchanged to myview to be processed as with OS >= 10.6. 
- The system also sends setMarkedText: messages directly to myview.
-   
- There is furthermore an oddity of dead key processing with OS <= 10.5. It occurs when a dead key followed by a non-accented  
- key are pressed. Say, for example, that keys '^' followed by 'p' are pressed on a French or German keyboard. Resulting 
- messages are: [myview setMarkedText:@"^"], [myview insertText:@"^"], [myview insertText:@"p"], [FLTextView insertText:@"^p"]. 
- The 2nd '^' replaces the marked 1st one, followed by p^p. The resulting text in the widget is "^p^p" instead of the 
- desired "^p". To avoid that, the FLTextView object is deactivated by the insertText: message and reactivated after 
- the handleEvent: message has been processed.
-
- NSEvent's during a character composition sequence:
- - keyDown with deadkey -> [[theEvent characters] length] is 0
- - keyUp -> [theEvent characters] contains the deadkey
- - keyDown with next key -> [theEvent characters] contains the composed character
- - keyUp -> [theEvent characters] contains the standard character
- */
-
-static void cocoaKeyboardHandler(NSEvent *theEvent)
-{
-  NSUInteger mods;
-  // get the modifiers
-  mods = [theEvent modifierFlags];
-  // get the key code
-  UInt32 keyCode = 0, maskedKeyCode = 0;
-  unsigned short sym = 0;
-  keyCode = [theEvent keyCode];
-  // extended keyboards can also send sequences on key-up to generate Kanji etc. codes.
-  // Some observed prefixes are 0x81 to 0x83, followed by an 8 bit keycode.
-  // In this mode, there seem to be no key-down codes
-  // printf("%08x %08x %08x\n", keyCode, mods, key);
-  maskedKeyCode = keyCode & 0x7f;
-  mods_to_e_state( mods ); // process modifier keys
-  if (!macKeyLookUp) macKeyLookUp = fl_compute_macKeyLookUp();
-  sym = macKeyLookUp[maskedKeyCode];
-  if (sym < 0xff00) { // a "simple" key
-    // find the result of this key without modifier
-    NSString *sim = [theEvent charactersIgnoringModifiers];
-    UniChar one;
-    CFStringGetCharacters((CFStringRef)sim, CFRangeMake(0, 1), &one);
-    // charactersIgnoringModifiers doesn't ignore shift, remove it when it's on
-    if(one >= 'A' && one <= 'Z') one += 32;
-    if (one > 0 && one <= 0x7f && (sym<'0' || sym>'9') ) sym = one;
-  }
-  Fl::e_keysym = Fl::e_original_keysym = sym;
-  /*NSLog(@"cocoaKeyboardHandler: keycode=%08x keysym=%08x mods=%08x symbol=%@ (%@)",
-   keyCode, sym, mods, [theEvent characters], [theEvent charactersIgnoringModifiers]);*/
-  // If there is text associated with this key, it will be filled in later.
-  Fl::e_length = 0;
-  Fl::e_text = (char*)"";
-}
-
-@interface FLTextInputContext : NSObject // "emulates" NSTextInputContext before OS 10.6
-+ (void)initialize;
-+ (FLTextInputContext*)singleInstance;
--(BOOL)handleEvent:(NSEvent*)theEvent;
-@end
-static FLTextInputContext* fltextinputcontext_instance = nil;
-@implementation FLTextInputContext
-+ (void)initialize {
-  fltextinputcontext_instance = [[FLTextInputContext alloc] init];
-}
-+ (FLTextInputContext*)singleInstance {
-  return fltextinputcontext_instance;
-}
--(BOOL)handleEvent:(NSEvent*)theEvent {
-  FLTextView *edit = [FLTextView singleInstance];
-  [edit setActive:YES];
-  [edit interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
-  [edit setActive:YES];
-  return YES;
-}
-@end
-
-/* Implementation note for the support of layer-backed views.
- MacOS 10.14 Mojave changes the way all drawing to displays is performed:
- all NSView objects become layer-backed, that is, the drawing is done by
- Core Animation to a CALayer object whose content is then displayed by the NSView.
- The global variable views_use_CA is set to YES when such change applies,
- that is, for apps running under 10.14 and linked to SDK 10.14.
- When views_use_CA is NO, views are not supposed to be layer-backed.
- 
- Each layer-backed non-OpenGL window has a single FLViewLayer object which itself has an associated CALayer.
- FLViewLayer implements displayLayer:. Consequently, FLViewLayer objects are drawn
- by the displayLayer: method. An FLViewLayer manages also a member variable
- CGContextRef layer_data, a bitmap context the size of the view (double on Retina).
- All Quartz drawings go to this bitmap. updateLayer finishes by using an image copy
- of the bitmap as the layer's contents. That step fills the window.
- FLViewLayer implements viewFrameDidChange which deletes the bitmap and zeros layer_data.
- This ensures the bitmap is recreated when the window is resized.
- viewFrameDidChange is also called when the window flips between low/high resolution displays.
- 
- Each layer-backed OpenGL window has an associated FLGLViewLayer object, derived from FLView.
- FLGLViewLayer objects are drawn by the displayLayer: method which calls drawRect:
- which draws the GL scene.
- */
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-static CGContextRef prepare_bitmap_for_layer(int w, int h ) {
-  CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();
-  CGContextRef gc = CGBitmapContextCreate(NULL,  w,  h, 8, 4 * w, cspace, kCGImageAlphaPremultipliedFirst);
-  CGColorSpaceRelease(cspace);
-  CGContextClearRect(gc, CGRectMake(0,0,w,h));
-  return gc;
-}
-
-@interface FLGLViewLayer : FLView // for layer-backed GL windows
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_12
-< CALayerDelegate >
-#endif
-- (void)displayLayer:(CALayer *)layer;
-- (void)drawRect:(NSRect)rect;
-- (BOOL)wantsLayer;
-- (BOOL)did_view_resolution_change;
-@end
-
-@implementation FLGLViewLayer
-- (void)displayLayer:(CALayer *)layer {
-  [self drawRect:[self frame]];
-}
-- (void)drawRect:(NSRect)rect {
-  fl_lock_function();
-  Fl_Window *window = [(FLWindow*)[self window] getFl_Window];
-  Fl_X *i = Fl_X::i( window );
-  if (!Fl::use_high_res_GL() && fl_mac_os_version < 101401) [self layer].contentsScale = 1.;
-  [self did_view_resolution_change];
-  window->clear_damage(FL_DAMAGE_ALL);
-  i->flush();
-  window->clear_damage();
-  if (window->parent() && fl_mac_os_version < 101401) window->redraw(); // useful during resize of GL subwindow
-  fl_unlock_function();
-}
--(BOOL)wantsLayer {
-  return YES;
-}
-- (BOOL)did_view_resolution_change {
-  BOOL retval = [super did_view_resolution_change];
-  if (retval && Fl::use_high_res_GL()) {
-    Fl_Window *window = [(FLWindow*)[self window] getFl_Window];
-    Fl_X *i = Fl_X::i( window );
-    [self layer].contentsScale = i->mapped_to_retina() ? 2. : 1.;
-    window->redraw(); // necessary with 10.14.2 public beta 3
-  }
-  return retval;
-}
-@end
-
-
-@implementation FLViewLayer
-- (BOOL)wantsLayer {
-  return YES;
-}
-- (void)displayLayer:(CALayer *)layer {
-  // called if views are layered (but not for GL) : all drawing to window goes through this
-  Fl_Window *window = [(FLWindow*)[self window] getFl_Window];
-  Fl_X *i = Fl_X::i( window );
-  if (!layer_data) { // runs when window is created, resized, changed screen resolution
-    NSRect r = [self frame];
-    layer.bounds = NSRectToCGRect(r);
-    [self did_view_resolution_change];
-    i->wait_for_expose = 0;
-    if (i->mapped_to_retina()) {
-      r.size.width *= 2; r.size.height *= 2;
-      layer.contentsScale = 2.;
-    } else layer.contentsScale = 1.;
-    layer_data = prepare_bitmap_for_layer(r.size.width, r.size.height);
-    Fl_X *i = Fl_X::i(window);
-    if ( i->region ) {
-      XDestroyRegion(i->region);
-      i->region = 0;
-    }
-    window->clear_damage(FL_DAMAGE_ALL);
-  }
-  if (window->damage()) {
-    through_drawRect = YES;
-    i->flush();
-    Fl_X::q_release_context();
-    through_drawRect = NO;
-    window->clear_damage();
-    if (layer_data) {
-      CGImageRef cgimg = CGBitmapContextCreateImage(layer_data);  // requires 10.4
-      layer.contents = (id)cgimg;
-      CGImageRelease(cgimg);
-    }
-  }
-}
-- (BOOL)did_view_resolution_change {
-  BOOL retval = [super did_view_resolution_change];
-  if (retval) {
-    [self viewFrameDidChange];
-    [self displayLayer:[self layer]]; // useful for Mandelbrot to recreate the layer's bitmap
-  }
-  return retval;
-}
--(void)viewFrameDidChange
-{
-  CGContextRelease(layer_data);
-  layer_data = NULL;
-}
--(void)dealloc {
-  CGContextRelease(layer_data);
-  [super dealloc];
-}
-@end
-#endif //>= MAC_OS_X_VERSION_10_8
-
-@implementation FLView
-- (BOOL)did_view_resolution_change {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
-  if (fl_mac_os_version >= 100700) { // determine whether window is mapped to a retina display
-    Fl_Window *window = [(FLWindow*)[self window] getFl_Window];
-    Fl_X *i = Fl_X::i( window );
-    bool previous = i->mapped_to_retina();
-    NSSize s = [self convertSizeToBacking:NSMakeSize(10, 10)]; // 10.7
-    i->mapped_to_retina( int(s.width + 0.5) > 10 );
-    BOOL retval = (i->wait_for_expose == 0 && previous != i->mapped_to_retina());
-    if (retval) i->changed_resolution(true);
-    return retval;
-  }
-#endif
-  return NO;
-}
-
-- (BOOL)process_keydown:(NSEvent*)theEvent
-{
-  id o = fl_mac_os_version >= 100600 ? [self performSelector:@selector(inputContext)] : [FLTextInputContext singleInstance];
-  return [o handleEvent:theEvent];
-}
-- (id)initWithFrame:(NSRect)frameRect
-{
-  static NSInteger counter = 0;
-  self = [super initWithFrame:frameRect];
-  if (self) {
-    in_key_event = NO;
-    identifier = ++counter;
-    }
-  return self;
-}
-- (void)drawRect:(NSRect)rect
-{
-  fl_lock_function();
-  FLWindow *cw = (FLWindow*)[self window];
-  Fl_Window *w = [cw getFl_Window];
-  through_drawRect = YES;
-  handleUpdateEvent(w);
-  through_drawRect = NO;
-  fl_unlock_function();
-}
-
-- (BOOL)acceptsFirstResponder
-{   
-  return [[self window] parentWindow] ? NO : YES; // 10.2
-}
-- (BOOL)performKeyEquivalent:(NSEvent*)theEvent
-{   
-  //NSLog(@"performKeyEquivalent:");
-  fl_lock_function();
-  cocoaKeyboardHandler(theEvent);
-  BOOL handled;
-  NSUInteger mods = [theEvent modifierFlags];
-  Fl_Window *w = [(FLWindow*)[theEvent window] getFl_Window];
-  if ( (mods & NSControlKeyMask) || (mods & NSCommandKeyMask) ) {
-    NSString *s = [theEvent characters];
-    if ( (mods & NSShiftKeyMask) && (mods & NSCommandKeyMask) ) {
-      s = [s uppercaseString]; // US keyboards return lowercase letter in s if cmd-shift-key is hit
-      }
-    [FLView prepareEtext:s];
-    Fl::compose_state = 0;
-    handled = Fl::handle(FL_KEYBOARD, w);
-  }
-  else {
-    in_key_event = YES;
-    need_handle = NO;
-    handled = [self process_keydown:theEvent];
-    if (need_handle) handled = Fl::handle(FL_KEYBOARD, w);
-    in_key_event = NO;
-    }
-  fl_unlock_function();
-  return handled;
-}
-- (BOOL)acceptsFirstMouse:(NSEvent*)theEvent
-{   
-  Fl_Window *w = [(FLWindow*)[theEvent window] getFl_Window];
-  Fl_Window *first = Fl::first_window();
-  return (first == w || !first->modal());
-}
-- (void)resetCursorRects {
-  Fl_Window *w = [(FLWindow*)[self window] getFl_Window];
-  Fl_X *i = Fl_X::i(w);
-  if (!i) return;  // fix for STR #3128
-  // We have to have at least one cursor rect for invalidateCursorRectsForView
-  // to work, hence the "else" clause.
-  if (i->cursor)
-    [self addCursorRect:[self visibleRect] cursor:(NSCursor*)i->cursor];
-  else
-    [self addCursorRect:[self visibleRect] cursor:[NSCursor arrowCursor]];
-}
-- (void)mouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseUp:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseDown:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseMoved:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)mouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)rightMouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)otherMouseDragged:(NSEvent *)theEvent {
-  cocoaMouseHandler(theEvent);
-}
-- (void)scrollWheel:(NSEvent *)theEvent {
-  cocoaMouseWheelHandler(theEvent);
-}
-- (void)magnifyWithEvent:(NSEvent *)theEvent {
-  cocoaMagnifyHandler(theEvent);
-}
-- (void)keyDown:(NSEvent *)theEvent {
-  //NSLog(@"keyDown:%@",[theEvent characters]);
-  fl_lock_function();
-  Fl_Window *window = [(FLWindow*)[theEvent window] getFl_Window];
-  Fl::first_window(window);
-  cocoaKeyboardHandler(theEvent);
-  in_key_event = YES;
-  Fl_Widget *f = Fl::focus();
-  if (f && f->as_gl_window()) { // ignore text input methods for GL windows
-    need_handle = YES;
-    [FLView prepareEtext:[theEvent characters]];
-  } else {
-    need_handle = NO;
-    [self process_keydown:theEvent];
-  }
-  if (need_handle) Fl::handle(FL_KEYBOARD, window);
-  in_key_event = NO;
-  fl_unlock_function();
-}
-- (void)keyUp:(NSEvent *)theEvent {
-  //NSLog(@"keyUp:%@",[theEvent characters]);
-  fl_lock_function();
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  Fl::first_window(window);
-  cocoaKeyboardHandler(theEvent);
-  NSString *s = [theEvent characters];
-  if ([s length] >= 1) [FLView prepareEtext:[s substringToIndex:1]];
-  Fl::handle(FL_KEYUP,window);
-  fl_unlock_function();
-}
-- (void)flagsChanged:(NSEvent *)theEvent {
-  //NSLog(@"flagsChanged: ");
-  fl_lock_function();
-  static UInt32 prevMods = 0;
-  NSUInteger mods = [theEvent modifierFlags];
-  Fl_Window *window = (Fl_Window*)[(FLWindow*)[theEvent window] getFl_Window];
-  UInt32 tMods = prevMods ^ mods;
-  int sendEvent = 0;
-  if ( tMods )
-  {
-    unsigned short keycode = [theEvent keyCode];
-    if (!macKeyLookUp) macKeyLookUp = fl_compute_macKeyLookUp();
-    Fl::e_keysym = Fl::e_original_keysym = macKeyLookUp[keycode & 0x7f];
-    if ( Fl::e_keysym ) 
-      sendEvent = ( prevMods<mods ) ? FL_KEYBOARD : FL_KEYUP;
-    Fl::e_length = 0;
-    Fl::e_text = (char*)"";
-    prevMods = mods;
-  }
-  mods_to_e_state( mods );
-  if (sendEvent) Fl::handle(sendEvent,window);
-  fl_unlock_function();
-}
-- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  update_e_xy_and_e_xy_root([self window]);
-  fl_dnd_target_window = target;
-  int ret = Fl::handle( FL_DND_ENTER, target );
-  breakMacEventLoop();
-  fl_unlock_function();
-  Fl::flush();
-  return ret ? NSDragOperationCopy : NSDragOperationNone;
-}
-- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  update_e_xy_and_e_xy_root([self window]);
-  fl_dnd_target_window = target;
-  int ret = Fl::handle( FL_DND_DRAG, target );
-  breakMacEventLoop();
-  fl_unlock_function();
-  // if the DND started in the same application, Fl::dnd() will not return until 
-  // the the DND operation is finished. The call below causes the drop indicator
-  // to be draw correctly (a full event handling would be better...)
-  Fl::flush();
-  return ret ? NSDragOperationCopy : NSDragOperationNone;
-}
-- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender 
-{
-  static char *DragData = NULL;
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  if ( !Fl::handle( FL_DND_RELEASE, target ) ) { 
-    breakMacEventLoop();
-    fl_unlock_function();
-    return NO;
-  }
-  NSPasteboard *pboard;
-  // NSDragOperation sourceDragMask;
-  // sourceDragMask = [sender draggingSourceOperationMask];
-  pboard = [sender draggingPasteboard];
-  update_e_xy_and_e_xy_root([self window]);
-  if (DragData) { free(DragData); DragData = NULL; }
-  if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
-    CFArrayRef files = (CFArrayRef)[pboard propertyListForType:NSFilenamesPboardType];
-    CFStringRef all = CFStringCreateByCombiningStrings(NULL, files, CFSTR("\n"));
-    int l = CFStringGetMaximumSizeForEncoding(CFStringGetLength(all), kCFStringEncodingUTF8);
-    DragData = (char *)malloc(l + 1);
-    CFStringGetCString(all, DragData, l + 1, kCFStringEncodingUTF8);
-    CFRelease(all);
-  }
-  else if ( [[pboard types] containsObject:UTF8_pasteboard_type] ) {
-    NSData *data = [pboard dataForType:UTF8_pasteboard_type];
-    DragData = (char *)malloc([data length] + 1);
-    [data getBytes:DragData];
-    DragData[[data length]] = 0;
-    convert_crlf(DragData, strlen(DragData));
-  }
-  else {
-    breakMacEventLoop();
-    fl_unlock_function();
-    return NO;
-  }
-  Fl::e_text = DragData;
-  Fl::e_length = strlen(DragData);
-  int old_event = Fl::e_number;
-  Fl::belowmouse()->handle(Fl::e_number = FL_PASTE);
-  Fl::e_number = old_event;
-  if (DragData) { free(DragData); DragData = NULL; }
-  Fl::e_text = NULL;
-  Fl::e_length = 0;
-  fl_dnd_target_window = NULL;
-  breakMacEventLoop();
-  fl_unlock_function();
-  return YES;
-}
-- (void)draggingExited:(id < NSDraggingInfo >)sender
-{
-  fl_lock_function();
-  if ( fl_dnd_target_window ) {
-    Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
-    fl_dnd_target_window = 0;
-  }
-  fl_unlock_function();
-}
-- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal
-{
-  return NSDragOperationGeneric;
-}
-
-+ (void)prepareEtext:(NSString*)aString {
-  // fills Fl::e_text with UTF-8 encoded aString using an adequate memory allocation
-  static char *received_utf8 = NULL;
-  static int lreceived = 0;
-  char *p = (char*)[aString UTF8String];
-  int l = strlen(p);
-  if (l > 0) {
-    if (lreceived == 0) {
-      received_utf8 = (char*)malloc(l + 1);
-      lreceived = l;
-    }
-    else if (l > lreceived) {
-      received_utf8 = (char*)realloc(received_utf8, l + 1);
-      lreceived = l;
-    }
-    strcpy(received_utf8, p);
-    Fl::e_text = received_utf8;
-  }
-  Fl::e_length = l;
-}
-
-+ (void)concatEtext:(NSString*)aString {
-  // extends Fl::e_text with aString
-  NSString *newstring = [[NSString stringWithUTF8String:Fl::e_text] stringByAppendingString:aString];
-  [FLView prepareEtext:newstring];
-}
-
-- (void)doCommandBySelector:(SEL)aSelector {
-  NSString *s = [[NSApp currentEvent] characters];
-  //NSLog(@"doCommandBySelector:%s text='%@'",sel_getName(aSelector), s);
-  s = [s substringFromIndex:[s length] - 1];
-  [FLView prepareEtext:s]; // use the last character of the event; necessary for deadkey + Tab
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  Fl::handle(FL_KEYBOARD, target);
-}
-
-- (void)insertText:(id)aString {
-  [self insertText:aString replacementRange:NSMakeRange(NSNotFound, 0)];
-}
-
-- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange {
-  NSString *received;
-  if ([aString isKindOfClass:[NSAttributedString class]]) {
-    received = [(NSAttributedString*)aString string];
-  } else {
-    received = (NSString*)aString;
-  }
-  /*NSLog(@"insertText='%@' l=%d Fl::compose_state=%d range=%d,%d",
-	received,strlen([received UTF8String]),Fl::compose_state,replacementRange.location,replacementRange.length);*/
-  fl_lock_function();
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-  if (fl_mac_os_version >= 101400 && replacementRange.length > 0) {
-    // occurs after a key was pressed and maintained and an auxiliary window appeared
-    // prevents marking dead key from deactivation
-    [[self inputContext] discardMarkedText];
-  }
-#endif
-  while (replacementRange.length--) { // delete replacementRange.length characters before insertion point
-    int saved_keysym = Fl::e_keysym;
-    Fl::e_keysym = FL_BackSpace;
-    Fl::handle(FL_KEYBOARD, target);
-    Fl::e_keysym = saved_keysym;
-    }
-  if (in_key_event && Fl_X::next_marked_length && Fl::e_length) {
-    // if setMarkedText + insertText is sent during handleEvent, text cannot be concatenated in single FL_KEYBOARD event
-    Fl::handle(FL_KEYBOARD, target);
-    Fl::e_length = 0;
-    }
-  if (in_key_event && Fl::e_length) [FLView concatEtext:received];
-  else [FLView prepareEtext:received];
-  Fl_X::next_marked_length = 0;
-  // We can get called outside of key events (e.g., from the character palette, from CJK text input). 
-  BOOL palette = !(in_key_event || Fl::compose_state);
-  if (palette) Fl::e_keysym = 0;
-  // YES if key has text attached
-  BOOL has_text_key = Fl::e_keysym <= '~' || Fl::e_keysym == FL_Iso_Key ||
-                      (Fl::e_keysym >= FL_KP && Fl::e_keysym <= FL_KP_Last && Fl::e_keysym != FL_KP_Enter);
-  // insertText sent during handleEvent of a key without text cannot be processed in a single FL_KEYBOARD event.
-  // Occurs with deadkey followed by non-text key
-  if (!in_key_event || !has_text_key) {
-    Fl::handle(FL_KEYBOARD, target);
-    Fl::e_length = 0;
-    }
-  else need_handle = YES;
-  selectedRange = NSMakeRange(100, 0); // 100 is an arbitrary value
-  // for some reason, with the palette, the window does not redraw until the next mouse move or button push
-  // sending a 'redraw()' or 'awake()' does not solve the issue!
-  if (palette) Fl::flush();
-  if (fl_mac_os_version < 100600) [[FLTextView singleInstance] setActive:NO];
-  fl_unlock_function();
-}
-
-- (void)setMarkedText:(id)aString selectedRange:(NSRange)newSelection  {
-  [self setMarkedText:aString selectedRange:newSelection replacementRange:NSMakeRange(NSNotFound, 0)];
-}
-
-- (void)setMarkedText:(id)aString selectedRange:(NSRange)newSelection replacementRange:(NSRange)replacementRange {
-  NSString *received;
-  if ([aString isKindOfClass:[NSAttributedString class]]) {
-    received = [(NSAttributedString*)aString string];
-  } else {
-    received = (NSString*)aString;
-  }
-  fl_lock_function();
-  /*NSLog(@"setMarkedText:%@ l=%d newSelection=%d,%d Fl::compose_state=%d replacement=%d,%d", 
-	received, strlen([received UTF8String]), newSelection.location, newSelection.length, Fl::compose_state,
-	replacementRange.location, replacementRange.length);*/
-  Fl_Window *target = [(FLWindow*)[self window] getFl_Window];
-  while (replacementRange.length--) { // delete replacementRange.length characters before insertion point
-    Fl::e_keysym = FL_BackSpace;
-    Fl::compose_state = 0;
-    Fl_X::next_marked_length = 0;
-    Fl::handle(FL_KEYBOARD, target);
-    Fl::e_keysym = 'a'; // pretend a letter key was hit
-  }
-  if (in_key_event && Fl_X::next_marked_length && Fl::e_length) {
-    // if setMarkedText + setMarkedText is sent during handleEvent, text cannot be concatenated in single FL_KEYBOARD event
-    Fl::handle(FL_KEYBOARD, target);
-    Fl::e_length = 0;
-  }
-  if (in_key_event && Fl::e_length) [FLView concatEtext:received];
-  else [FLView prepareEtext:received];
-  Fl_X::next_marked_length = strlen([received UTF8String]);
-  if (!in_key_event) Fl::handle( FL_KEYBOARD, target);
-  else need_handle = YES;
-  selectedRange = NSMakeRange(100, newSelection.length);
-  fl_unlock_function();
-}
-
-- (void)unmarkText {
-  fl_lock_function();
-  Fl::reset_marked_text();
-  fl_unlock_function();
-  //NSLog(@"unmarkText");
-}
-
-- (NSRange)selectedRange {
-  Fl_Widget *w = Fl::focus();
-  if (w && w->use_accents_menu()) return selectedRange;
-  return NSMakeRange(NSNotFound, 0);
-}
-
-- (NSRange)markedRange {
-  //NSLog(@"markedRange=%d %d", Fl::compose_state > 0?0:NSNotFound, Fl::compose_state);
-  return NSMakeRange(Fl::compose_state > 0?0:NSNotFound, Fl::compose_state);
-}
-
-- (BOOL)hasMarkedText {
-  //NSLog(@"hasMarkedText %s", Fl::compose_state > 0?"YES":"NO");
-  return (Fl::compose_state > 0);
-}
-
-- (NSAttributedString *)attributedSubstringFromRange:(NSRange)aRange {
-  return [self attributedSubstringForProposedRange:aRange actualRange:NULL];
-}
-- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange {
-  //NSLog(@"attributedSubstringFromRange: %d %d",aRange.location,aRange.length);
-  return nil;
-}
-
-- (NSArray *)validAttributesForMarkedText {
-  return nil;
-}
-
-- (NSRect)firstRectForCharacterRange:(NSRange)aRange {
-  return [self firstRectForCharacterRange:aRange actualRange:NULL];
-}
-- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange {
-  //NSLog(@"firstRectForCharacterRange %d %d actualRange=%p",aRange.location, aRange.length,actualRange);
-  NSRect glyphRect;
-  fl_lock_function();
-  Fl_Widget *focus = Fl::focus();
-  Fl_Window *wfocus = [(FLWindow*)[self window] getFl_Window];
-  if (!focus) focus = wfocus;
-  glyphRect.size.width = 0;
-  
-  int x, y, height;
-  if (Fl_X::insertion_point_location(&x, &y, &height)) {
-    glyphRect.origin.x = (CGFloat)x;
-    glyphRect.origin.y = (CGFloat)y;
-  } else {
-    if (focus->as_window()) {
-      glyphRect.origin.x = 0;
-      glyphRect.origin.y = focus->h();
-      }
-    else {
-      glyphRect.origin.x = focus->x();
-      glyphRect.origin.y = focus->y() + focus->h();
-      }
-    height = 12;
-  }
-  glyphRect.size.height = height;
-  Fl_Window *win = focus->as_window();
-  if (!win) win = focus->window();
-  while (win != NULL && win != wfocus) {
-    glyphRect.origin.x += win->x();
-    glyphRect.origin.y += win->y();
-    win = win->window();
-  }
-  // Convert the rect to screen coordinates
-  glyphRect.origin.y = wfocus->h() - glyphRect.origin.y;
-  glyphRect.origin = [(FLWindow*)[self window] convertBaseToScreen:glyphRect.origin];
-  if (actualRange) *actualRange = aRange;
-  fl_unlock_function();
-  return glyphRect;
-}
-
-- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint {
-  return 0;
-}
-
-- (NSInteger)windowLevel {
-  return [[self window] level];
-}
-
-- (
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-   NSInteger
-#else
-   long
-#endif
-)conversationIdentifier {
-  return identifier;
-}
-@end
-
-
-NSOpenGLPixelFormat* Fl_X::mode_to_NSOpenGLPixelFormat(int m, const int *alistp)
-{
-  NSOpenGLPixelFormatAttribute attribs[32];
-  int n = 0;
-  // AGL-style code remains commented out for comparison
-  if (!alistp) {
-    if (m & FL_INDEX) {
-      //list[n++] = AGL_BUFFER_SIZE; list[n++] = 8;
-    } else {
-      //list[n++] = AGL_RGBA;
-      //list[n++] = AGL_GREEN_SIZE;
-      //list[n++] = (m & FL_RGB8) ? 8 : 1;
-      attribs[n++] = NSOpenGLPFAColorSize;
-      attribs[n++] = (NSOpenGLPixelFormatAttribute)((m & FL_RGB8) ? 32 : 1);
-      if (m & FL_ALPHA) {
-        //list[n++] = AGL_ALPHA_SIZE;
-        attribs[n++] = NSOpenGLPFAAlphaSize;
-        attribs[n++] = (NSOpenGLPixelFormatAttribute)((m & FL_RGB8) ? 8 : 1);
-      }
-      if (m & FL_ACCUM) {
-        //list[n++] = AGL_ACCUM_GREEN_SIZE; list[n++] = 1;
-        attribs[n++] = NSOpenGLPFAAccumSize;
-        attribs[n++] = (NSOpenGLPixelFormatAttribute)1;
-        if (m & FL_ALPHA) {
-          //list[n++] = AGL_ACCUM_ALPHA_SIZE; list[n++] = 1;
-        }
-      }
-    }
-    if (m & FL_DOUBLE) {
-      //list[n++] = AGL_DOUBLEBUFFER;
-      attribs[n++] = NSOpenGLPFADoubleBuffer;
-    }
-    if (m & FL_DEPTH) {
-      //list[n++] = AGL_DEPTH_SIZE; list[n++] = 24;
-      attribs[n++] = NSOpenGLPFADepthSize;
-      attribs[n++] = (NSOpenGLPixelFormatAttribute)24;
-    }
-    if (m & FL_STENCIL) {
-      //list[n++] = AGL_STENCIL_SIZE; list[n++] = 1;
-      attribs[n++] = NSOpenGLPFAStencilSize;
-      attribs[n++] = (NSOpenGLPixelFormatAttribute)1;
-    }
-    if (m & FL_STEREO) {
-      //list[n++] = AGL_STEREO;
-      attribs[n++] = NSOpenGLPFAStereo;
-    }
-    if ((m & FL_MULTISAMPLE) && fl_mac_os_version >= 100400) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-      attribs[n++] = NSOpenGLPFAMultisample, // 10.4
-#endif
-      attribs[n++] = NSOpenGLPFASampleBuffers; attribs[n++] = (NSOpenGLPixelFormatAttribute)1;
-      attribs[n++] = NSOpenGLPFASamples; attribs[n++] = (NSOpenGLPixelFormatAttribute)4;
-    }
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
-#define NSOpenGLPFAOpenGLProfile      (NSOpenGLPixelFormatAttribute)99
-#define kCGLPFAOpenGLProfile          NSOpenGLPFAOpenGLProfile
-#define NSOpenGLProfileVersionLegacy  (NSOpenGLPixelFormatAttribute)0x1000
-#define NSOpenGLProfileVersion3_2Core  (NSOpenGLPixelFormatAttribute)0x3200
-#define kCGLOGLPVersion_Legacy        NSOpenGLProfileVersionLegacy
-#endif
-    if (fl_mac_os_version >= 100700) {
-      attribs[n++] = NSOpenGLPFAOpenGLProfile;
-      attribs[n++] =  (m & FL_OPENGL3) ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy;
-    }
-  } else {
-    while (alistp[n] && n < 30) {
-      if (alistp[n] == kCGLPFAOpenGLProfile) {
-        if (fl_mac_os_version < 100700) {
-          if (alistp[n+1] != kCGLOGLPVersion_Legacy) return nil;
-          n += 2;
-          continue;
-        }
-      }
-      attribs[n] = (NSOpenGLPixelFormatAttribute)alistp[n];
-      n++;
-    }
-  }
-  attribs[n] = (NSOpenGLPixelFormatAttribute)0;
-  NSOpenGLPixelFormat *pixform = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
-  /*GLint color,alpha,accum,depth;
-  [pixform getValues:&color forAttribute:NSOpenGLPFAColorSize forVirtualScreen:0];
-  [pixform getValues:&alpha forAttribute:NSOpenGLPFAAlphaSize forVirtualScreen:0];
-  [pixform getValues:&accum forAttribute:NSOpenGLPFAAccumSize forVirtualScreen:0];
-  [pixform getValues:&depth forAttribute:NSOpenGLPFADepthSize forVirtualScreen:0];
-  NSLog(@"color=%d alpha=%d accum=%d depth=%d",color,alpha,accum,depth);*/
-  return pixform;
-}
-
-NSOpenGLContext* Fl_X::create_GLcontext_for_window(NSOpenGLPixelFormat *pixelformat,
-                                              NSOpenGLContext *shared_ctx, Fl_Window *window)
-{
-  NSOpenGLContext *context = [[NSOpenGLContext alloc] initWithFormat:pixelformat shareContext:shared_ctx];
-  if (context) {
-    NSView *view = [fl_xid(window) contentView];
-    if (fl_mac_os_version >= 100700 && Fl::use_high_res_GL()) {
-      //replaces  [view setWantsBestResolutionOpenGLSurface:YES]  without compiler warning
-      typedef void (*bestResolutionIMP)(id, SEL, BOOL);
-      static bestResolutionIMP addr = (bestResolutionIMP)[NSView instanceMethodForSelector:@selector(setWantsBestResolutionOpenGLSurface:)];
-      addr(view, @selector(setWantsBestResolutionOpenGLSurface:), YES);
-    }
-    [context setView:view];
-  }
-  return context;
-}
-
-void Fl_X::GLcontext_update(NSOpenGLContext* ctxt)
-{
-  [ctxt update];
-}
-
-void Fl_X::GLcontext_flushbuffer(NSOpenGLContext* ctxt)
-{
-  [ctxt flushBuffer];
-}
-
-void Fl_X::GLcontext_release(NSOpenGLContext* ctxt)
-{
-  [ctxt release];
-}
-
-void Fl_X::GL_cleardrawable(void)
-{
-  [[NSOpenGLContext currentContext] clearDrawable];
-}
-
-void Fl_X::GLcontext_makecurrent(NSOpenGLContext* ctxt)
-{
-  [ctxt makeCurrentContext];
-}
-
-void Fl_Window::fullscreen_x() {
-  _set_fullscreen();
-  if (fl_mac_os_version < 101000) {
-    // On OS X < 10.6, it is necessary to recreate the window. This is done with hide+show.
-    // The alternative procedure isn't stable until MacOS 10.10
-    hide();
-    show();
-  } else {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-    [i->xid setStyleMask:NSBorderlessWindowMask]; //10.6
-#endif
-    [i->xid setLevel:NSStatusWindowLevel];
-    int X,Y,W,H;
-    Fl::screen_xywh(X, Y, W, H, x(), y(), w(), h());
-    resize(X, Y, W, H);
-  }
-  Fl::handle(FL_FULLSCREEN, this);
-}
-
-void Fl_Window::fullscreen_off_x(int X, int Y, int W, int H) {
-  _clear_fullscreen();
-  if (fl_mac_os_version < 101000) {
-    hide();
-    resize(X, Y, W, H);
-    show();
-  } else {
-    NSUInteger winstyle = (border() ?
-                           (NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask) : NSBorderlessWindowMask);
-    if (!modal()) winstyle |= NSMiniaturizableWindowMask;
-    NSInteger level = NSNormalWindowLevel;
-    if (modal()) level = modal_window_level();
-    else if (non_modal()) level = non_modal_window_level();
-    [i->xid setLevel:level];
-    resize(X, Y, W, H);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-    [i->xid setStyleMask:winstyle]; //10.6
-#endif
-  }
-  Fl::handle(FL_FULLSCREEN, this);
-}
-
-/*
- * Initialize the given port for redraw and call the window's flush() to actually draw the content
- */ 
-void Fl_X::flush()
-{
-  if (w->as_gl_window()) {
-    w->flush();
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  } else if (views_use_CA) {
-    if (!through_drawRect) {
-      FLViewLayer *view = (FLViewLayer*)[fl_xid(w) contentView];
-      [view displayLayer:[view layer]];
-    } else
-      w->flush();
-#endif
-  } else {
-    make_current_counts = 1;
-    if (!through_drawRect) [[xid contentView] lockFocus];
-    through_Fl_X_flush = YES;
-    w->flush();
-    through_Fl_X_flush = NO;
-    if (!through_drawRect) [[xid contentView] unlockFocus];
-    make_current_counts = 0;
-    Fl_X::q_release_context();
-  }
-}
-
-/*
- * go ahead, create that (sub)window
- */
-void Fl_X::make(Fl_Window* w)
-{
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    Fl_Group::current(0);
-    fl_open_display();
-    NSInteger winlevel = NSNormalWindowLevel;
-    NSUInteger winstyle;
-    if (w->parent()) {
-      w->border(0);
-      fl_show_iconic = 0;
-    }
-    if (w->border()) winstyle = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;
-    else winstyle = NSBorderlessWindowMask;
-    if (fl_show_iconic && !w->parent()) { // prevent window from being out of work area when created iconized
-      int sx, sy, sw, sh;
-      Fl::screen_work_area (sx, sy, sw, sh, w->x(), w->y());
-      if (w->x() < sx) w->x(sx);
-      if (w->y() < sy) w->y(sy);
-    }
-    int xp = w->x();
-    int yp = w->y();
-    int wp = w->w();
-    int hp = w->h();
-    if (w->size_range_set) {
-      if ( w->minh != w->maxh || w->minw != w->maxw) {
-        if (w->border()) winstyle |= NSResizableWindowMask;
-      }
-    } else {
-      if (w->resizable()) {
-        Fl_Widget *o = w->resizable();
-        int minw = o->w(); if (minw > 100) minw = 100;
-        int minh = o->h(); if (minh > 100) minh = 100;
-        w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-        if (w->border()) winstyle |= NSResizableWindowMask;
-      } else {
-        w->size_range(w->w(), w->h(), w->w(), w->h());
-      }
-    }
-    int xwm = xp, ywm = yp, bt, bx, by;
-    
-    if (!fake_X_wm(w, xwm, ywm, bt, bx, by)) {
-      // menu windows and tooltips
-      if (w->modal()||w->tooltip_window()) {
-        winlevel = modal_window_level();
-      }
-    }
-    if (w->modal()) {
-      winstyle &= ~NSMiniaturizableWindowMask;
-      winlevel = modal_window_level();
-    }
-    else if (w->non_modal()) {
-      winlevel = non_modal_window_level();
-    }
-    
-    if (by+bt) {
-      wp += 2*bx;
-      hp += 2*by+bt;
-    }
-    if (w->force_position()) {
-      if (!Fl::grab()) {
-        xp = xwm; yp = ywm;
-        w->x(xp);w->y(yp);
-      }
-      xp -= bx;
-      yp -= by+bt;
-    }
-  
-    Fl_X* x = new Fl_X;
-    x->other_xid = 0; // room for doublebuffering image map. On OS X this is only used by overlay windows
-    x->region = 0;
-    x->subRect(0);
-    x->cursor = NULL;
-    x->gc = 0;
-    x->mapped_to_retina(false);
-    x->changed_resolution(false);
-    x->in_windowDidResize(false);
-  
-    NSRect crect;
-    if (w->fullscreen_active()) {
-      int top, bottom, left, right;
-      int sx, sy, sw, sh, X, Y, W, H;
-
-      top = w->fullscreen_screen_top;
-      bottom = w->fullscreen_screen_bottom;
-      left = w->fullscreen_screen_left;
-      right = w->fullscreen_screen_right;
-
-      if ((top < 0) || (bottom < 0) || (left < 0) || (right < 0)) {
-        top = Fl::screen_num(w->x(), w->y(), w->w(), w->h());
-        bottom = top;
-        left = top;
-        right = top;
-      }
-
-      Fl::screen_xywh(sx, sy, sw, sh, top);
-      Y = sy;
-      Fl::screen_xywh(sx, sy, sw, sh, bottom);
-      H = sy + sh - Y;
-      Fl::screen_xywh(sx, sy, sw, sh, left);
-      X = sx;
-      Fl::screen_xywh(sx, sy, sw, sh, right);
-      W = sx + sw - X;
-
-      w->resize(X, Y, W, H);
-
-      winstyle = NSBorderlessWindowMask;
-      winlevel = NSStatusWindowLevel;
-    }
-    crect.origin.x = w->x(); // correct origin set later for subwindows
-    crect.origin.y = main_screen_height - (w->y() + w->h());
-    crect.size.width=w->w(); 
-    crect.size.height=w->h();
-    FLWindow *cw = [[FLWindow alloc] initWithFl_W:w 
-				      contentRect:crect  
-					styleMask:winstyle];
-    [cw setFrameOrigin:crect.origin];
-    if (!w->parent()) {
-      [cw setHasShadow:YES];
-      [cw setAcceptsMouseMovedEvents:YES];
-    }
-    if (w->shape_data_) {
-      [cw setOpaque:NO]; // shaped windows must be non opaque
-      [cw setBackgroundColor:[NSColor clearColor]]; // and with transparent background color
-      }
-    x->xid = cw;
-    x->w = w; w->i = x;
-    x->wait_for_expose = 1;
-    if (!w->parent()) {
-      x->next = Fl_X::first;
-      Fl_X::first = x;
-    } else if (Fl_X::first) {
-      x->next = Fl_X::first->next;
-      Fl_X::first->next = x;
-    }
-    else {
-      x->next = NULL;
-      Fl_X::first = x;
-    }
-  FLView *myview;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  if (views_use_CA) {
-    myview = w->as_gl_window() ? [FLGLViewLayer alloc] : [FLViewLayer alloc];
-  } else
-#endif
-    myview = [FLView alloc];
-  myview = [myview initWithFrame:crect];
-    [cw setContentView:myview];
-    [myview release];
-    [cw setLevel:winlevel];
-    
-    q_set_window_title(cw, w->label(), w->iconlabel());
-    if (!w->force_position()) {
-      if (w->modal()) {
-        [cw center];
-      } else if (w->non_modal()) {
-        [cw center];
-      } else {
-        static NSPoint delta = NSZeroPoint;
-        delta = [cw cascadeTopLeftFromPoint:delta];
-      }
-      crect = [cw frame]; // synchronize FLTK's and the system's window coordinates
-      w->x(int(crect.origin.x));
-      w->y(int(main_screen_height - (crect.origin.y + w->h())));
-    }
-    if(w->menu_window()) { // make menu windows slightly transparent
-      [cw setAlphaValue:0.97];
-    }
-    // Install DnD handlers 
-    [myview registerForDraggedTypes:[NSArray arrayWithObjects:UTF8_pasteboard_type,  NSFilenamesPboardType, nil]];
-  
-    if (w->size_range_set) w->size_range_();
-    
-    if ( w->border() || (!w->modal() && !w->tooltip_window()) ) {
-      Fl_Tooltip::enter(0);
-    }
-
-    if (w->modal()) Fl::modal_ = w; 
-
-    w->set_visible();
-    if ( w->border() || (!w->modal() && !w->tooltip_window()) ) Fl::handle(FL_FOCUS, w);
-    [cw setDelegate:[FLWindowDelegate singleInstance]];
-  if (fl_show_iconic) {
-    fl_show_iconic = 0;
-    w->handle(FL_SHOW); // create subwindows if any
-    [cw recursivelySendToSubwindows:@selector(display)];  // draw the window and its subwindows before its icon is computed
-    [cw miniaturize:nil];
-  } else if (w->parent()) { // a subwindow
-    [cw setIgnoresMouseEvents:YES]; // needs OS X 10.2
-    // next 2 statements so a subwindow doesn't leak out of its parent window
-    [cw setOpaque:NO];
-    [cw setBackgroundColor:[NSColor clearColor]]; // transparent background color
-    [cw setSubwindowFrame];
-    // needed if top window was first displayed miniaturized
-    FLWindow *pxid = fl_xid(w->top_window());
-    [pxid makeFirstResponder:[pxid contentView]];
-  } else { // a top-level window
-    [cw makeKeyAndOrderFront:nil];
-  }
-  
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_SHOW);
-    Fl::e_number = old_event;
-    
-    // if (w->modal()) { Fl::modal_ = w; fl_fix_focus(); }
-    [pool release];
-}
-
-
-/*
- * Tell the OS what window sizes we want to allow
- */
-void Fl_Window::size_range_() {
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  size_range_set = 1;
-  NSSize minSize = NSMakeSize(minw, minh + bt);
-  NSSize maxSize = NSMakeSize(maxw?maxw:32000, maxh?maxh + bt:32000);
-  if (i && i->xid) {
-    [i->xid setMinSize:minSize];
-    [i->xid setMaxSize:maxSize];
-  }
-}
-
-void Fl_Window::wait_for_expose()
-{
-    if (fl_mac_os_version < 101300) {
-        [fl_xid(this) recursivelySendToSubwindows:@selector(waitForExpose)];
-    } else {
-      while (dropped_files_list) {
-        drain_dropped_files_list();
-      }
-      [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil
-                            inMode:NSDefaultRunLoopMode dequeue:NO];
-    }
-}
-
-/*
- * returns pointer to the filename, or null if name ends with ':'
- */
-const char *fl_filename_name( const char *name ) 
-{
-  const char *p, *q;
-  if (!name) return (0);
-  for ( p = q = name ; *p ; ) {
-    if ( ( p[0] == ':' ) && ( p[1] == ':' ) ) {
-      q = p+2;
-      p++;
-    }
-    else if (p[0] == '/') {
-      q = p + 1;
-    }
-    p++;
-  }
-  return q;
-}
-
-
-/*
- * set the window title bar name
- */
-void Fl_Window::label(const char *name, const char *mininame) {
-  Fl_Widget::label(name);
-  iconlabel_ = mininame;
-  if (shown() || i) {
-    q_set_window_title(i->xid, name, mininame);
-  }
-}
-
-
-/*
- * make a window visible
- */
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  Fl_X *top = NULL;
-  if (parent()) top = top_window()->i;
-  if (!shown() && (!parent() || (top && ![top->xid isMiniaturized]))) {
-    Fl_X::make(this);
-  } else {
-    if ( !parent() ) {
-      if ([i->xid isMiniaturized]) {
-        i->w->redraw();
-        [i->xid deminiaturize:nil];
-      }
-      if (!fl_capture) {
-        [i->xid makeKeyAndOrderFront:nil];
-      }
-    }
-    else set_visible();
-  }
-}
-
-
-/*
- * resize a window
- */
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  int bx, by, bt;
-  Fl_Window *parent;
-  if (W<=0) W = 1; // OS X does not like zero width windows
-  if (H<=0) H = 1;
-  int is_a_resize = (W != w() || H != h());
-  //  printf("Fl_Window::resize(X=%d, Y=%d, W=%d, H=%d), is_a_resize=%d, resize_from_system=%p, this=%p\n",
-  //         X, Y, W, H, is_a_resize, resize_from_system, this);
-  if (X != x() || Y != y()) set_flag(FORCE_POSITION);
-  else if (!is_a_resize) {
-    resize_from_system = 0;
-    return;
-    }
-  if ( (resize_from_system!=this) && shown()) {
-    if (is_a_resize) {
-      if (resizable()) {
-        if (W<minw) minw = W; // user request for resize takes priority
-        if (maxw && W>maxw) maxw = W; // over a previously set size_range
-        if (H<minh) minh = H;
-        if (maxh && H>maxh) maxh = H;
-        size_range(minw, minh, maxw, maxh);
-      } else {
-        size_range(W, H, W, H);
-      }
-      Fl_Group::resize(X,Y,W,H);
-      // transmit changes in FLTK coords to cocoa
-      get_window_frame_sizes(bx, by, bt);
-      bx = X; by = Y;
-      parent = window();
-      while (parent) {
-        bx += parent->x();
-        by += parent->y();
-        parent = parent->window();
-      }
-      NSRect r = NSMakeRect(bx, main_screen_height - (by + H), W, H + ( (border()&&!fullscreen_active())?bt:0 ));
-      if (visible_r()) [fl_xid(this) setFrame:r display:YES];
-    } else {
-      bx = X; by = Y;
-      parent = window();
-      while (parent) {
-        bx += parent->x();
-        by += parent->y();
-        parent = parent->window();
-      }
-      NSPoint pt = NSMakePoint(bx, main_screen_height - (by + H));
-      if (visible_r()) [fl_xid(this) setFrameOrigin:pt]; // set cocoa coords to FLTK position
-    }
-  }
-  else {
-    resize_from_system = 0;
-    if (is_a_resize) {
-      Fl_Group::resize(X,Y,W,H);
-      if (shown()) {
-        redraw();
-      }
-    } else {
-      x(X); y(Y);
-    }
-  }
-}
-
-
-/*
- * make all drawing go into this window (called by subclass flush() impl.)
- 
- This can be called in 3 different instances:
- 
- 1) When a window is created or resized.
- The system sends the drawRect: message to the window's view after having prepared the current 
- graphics context to draw to this view. Processing of drawRect: sets variable through_drawRect 
- to YES and calls handleUpdateEvent() that calls Fl_X::flush(). Fl_X::flush() sets through_Fl_X_flush 
- to YES and calls Fl_Window::flush() that calls Fl_Window::make_current() that
- uses the window's graphics context. The window's draw() function is then executed.
- 
- 2) At each round of the FLTK event loop.
- Fl::flush() is called, that calls Fl_X::flush() on each window that needs drawing. Variable 
- through_Fl_X_flush is set to YES. Fl_X::flush() locks the focus to the view and calls Fl_Window::flush()
- that calls Fl_Window::make_current() which uses the window's graphics context.
- Fl_Window::flush() then runs the window's draw() function.
- 
- 3) An FLTK application can call Fl_Window::make_current() at any time before it draws to a window.
- This occurs for instance in the idle callback function of the mandelbrot test program. Variable 
- through_Fl_X_flush is NO. Under Mac OS 10.4 and higher, the window's graphics context is obtained.
- Under Mac OS 10.3 a new graphics context adequate for the window is created. 
- Subsequent drawing requests go to this window. CAUTION: it's not possible to call Fl::wait(),
- Fl::check() nor Fl::ready() while in the draw() function of a widget. Use an idle callback instead.
- */
-void Fl_Window::make_current() 
-{
-  if (make_current_counts > 1 && !views_use_CA) return;
-  if (make_current_counts) make_current_counts++;
-  if (views_use_CA && !through_drawRect) { // detect direct calls from the app
-    damage(FL_DAMAGE_CHILD); // make next draws to this window displayed at next event loop
-  }
-  Fl_X::q_release_context();
-  fl_window = i->xid;
-  Fl_X::set_high_resolution( i->mapped_to_retina() );
-  current_ = this;
-//NSLog(@"region-count=%d damage=%u",i->region?i->region->count:0, damage());
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  if (views_use_CA) {
-    i->gc = ((FLViewLayer*)[fl_window contentView])->layer_data;
-#  ifdef FLTK_HAVE_CAIRO
-    // make sure the GC starts with an identity transformation matrix as do native Cocoa GC's
-    // because cairo may have changed it
-    CGAffineTransform mat = CGContextGetCTM(i->gc);
-    if (!CGAffineTransformIsIdentity(mat)) { // 10.4
-      CGContextConcatCTM(i->gc, CGAffineTransformInvert(mat));
-    }
-#  endif
-  } else
-#endif
-  {
-    NSGraphicsContext *nsgc;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-    if (fl_mac_os_version >= 100400)
-      nsgc = [fl_window graphicsContext]; // 10.4
-    else
-#endif
-      nsgc = through_Fl_X_flush ? [NSGraphicsContext currentContext] : [NSGraphicsContext graphicsContextWithWindow:fl_window];
-    i->gc = (CGContextRef)[nsgc graphicsPort];
-  }
-
-  fl_gc = i->gc;
-  CGContextSaveGState(fl_gc); // native context
-  if (views_use_CA && i->mapped_to_retina()) CGContextScaleCTM(fl_gc, 2,2);
-  // antialiasing must be deactivated because it applies to rectangles too
-  // and escapes even clipping!!!
-  // it gets activated when needed (e.g., draw text)
-  CGContextSetShouldAntialias(fl_gc, false);  
-  CGFloat hgt = [[fl_window contentView] frame].size.height;
-  CGContextTranslateCTM(fl_gc, 0.5, hgt-0.5f);
-  CGContextScaleCTM(fl_gc, 1.0f, -1.0f); // now 0,0 is top-left point of the window
-  // for subwindows, limit drawing to inside of parent window
-  // half pixel offset is necessary for clipping as done by fl_cgrectmake_cocoa()
-  if (i->subRect()) CGContextClipToRect(fl_gc, CGRectOffset(*(i->subRect()), -0.5, -0.5));
-  
-// this is the context with origin at top left of (sub)window
-  CGContextSaveGState(fl_gc);
-#if defined(FLTK_USE_CAIRO)
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
-#endif
-  fl_clip_region( 0 );
-  
-#if defined(FLTK_USE_CAIRO)
-  // update the cairo_t context
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
-#endif
-}
-
-// helper function to manage the current CGContext fl_gc
-extern void fl_quartz_restore_line_style_();
-
-// FLTK has only one global graphics state. This function copies the FLTK state into the
-// current Quartz context
-void Fl_X::q_fill_context() {
-  if (!fl_gc) return;
-  if ( ! fl_window) { // a bitmap context
-    CGFloat hgt = CGBitmapContextGetHeight(fl_gc);
-    CGAffineTransform at = CGContextGetCTM(fl_gc);
-    CGFloat offset = 0.5;
-    if (at.a != 1 && at.a == at.d && at.b == 0 && at.c == 0) {
-      hgt /= at.a;
-      offset /= at.a;
-    }
-    CGContextTranslateCTM(fl_gc, offset, hgt-offset);
-    CGContextScaleCTM(fl_gc, 1.0f, -1.0f); // now 0,0 is top-left point of the context
-    }
-  fl_color(fl_graphics_driver->color());
-  fl_quartz_restore_line_style_();
-}
-
-// The only way to reset clipping to its original state is to pop the current graphics
-// state and restore the global state.
-void Fl_X::q_clear_clipping() {
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc);
-  CGContextSaveGState(fl_gc);
-}
-
-// Give the Quartz context back to the system
-void Fl_X::q_release_context(Fl_X *x) {
-  if (x && x->gc!=fl_gc) return;
-  if (!fl_gc) return;
-  CGContextRestoreGState(fl_gc); // match the CGContextSaveGState's of make_current
-  CGContextRestoreGState(fl_gc);
-  Fl_X::set_high_resolution(false);
-  CGContextFlush(fl_gc);
-  fl_gc = 0;
-#if defined(FLTK_USE_CAIRO)
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0); // capture gc changes automatically to update the cairo context adequately
-#endif
-}
-
-void Fl_X::q_begin_image(CGRect &rect, int cx, int cy, int w, int h) {
-  CGContextSaveGState(fl_gc);
-  CGRect r2 = rect;
-  r2.origin.x -= 0.5f;
-  r2.origin.y -= 0.5f;
-  CGContextClipToRect(fl_gc, r2);
-  // move graphics context to origin of vertically reversed image
-  // The 0.5 here cancels the 0.5 offset present in Quartz graphics contexts.
-  // Thus, image and surface pixels are in phase if there's no scaling.
-  // Below, we handle x2 and /2 scalings that occur when drawing to
-  // a double-resolution bitmap, and when drawing a double-resolution bitmap to display.
-  CGContextTranslateCTM(fl_gc, rect.origin.x - cx - 0.5, rect.origin.y - cy + h - 0.5);
-  CGContextScaleCTM(fl_gc, 1, -1);
-  CGAffineTransform at = CGContextGetCTM(fl_gc);
-  if (at.a == at.d && at.b == 0 && at.c == 0) { // proportional scaling, no rotation
-    // phase image with display pixels
-    CGFloat deltax = 0, deltay = 0;
-    if (at.a == 2) { // make .tx and .ty have even values
-      deltax = (at.tx/2 - round(at.tx/2));
-      deltay = (at.ty/2 - round(at.ty/2));
-    } else if (at.a == 0.5) {
-      if (Fl_Display_Device::high_resolution()) { // make .tx and .ty have int or half-int values
-        deltax = -(at.tx*2 - round(at.tx*2));
-        deltay = (at.ty*2 - round(at.ty*2));
-      } else { // make .tx and .ty have integral values
-        deltax = (at.tx - round(at.tx))*2;
-        deltay = (at.ty - round(at.ty))*2;
-      }
-    }
-    CGContextTranslateCTM(fl_gc, -deltax, -deltay);
-  }
-  rect.origin.x = rect.origin.y = 0;
-  rect.size.width = w;
-  rect.size.height = h;
-}
-
-void Fl_X::q_end_image() {
-  CGContextRestoreGState(fl_gc);
-}
-
-void Fl_X::set_high_resolution(bool new_val)
-{
-  Fl_Display_Device::high_res_window_ = new_val;
-}
-
-void Fl_Copy_Surface::complete_copy_pdf_and_tiff()
-{
-  CGContextRestoreGState(gc);
-  CGContextEndPage(gc);
-  CGContextRelease(gc);
-  NSPasteboard *clip = [NSPasteboard generalPasteboard];
-  [clip declareTypes:[NSArray arrayWithObjects:PDF_pasteboard_type, TIFF_pasteboard_type, nil] owner:nil];
-  [clip setData:(NSData*)pdfdata forType:PDF_pasteboard_type];
-  //second, transform this PDF to a bitmap image and put it as tiff in clipboard
-  NSImage *image = [[NSImage alloc] initWithData:(NSData*)pdfdata];
-  CFRelease(pdfdata);
-  [clip setData:[image TIFFRepresentation] forType:TIFF_pasteboard_type];
-  [image release];
-}
-
-////////////////////////////////////////////////////////////////
-// Copy & Paste fltk implementation.
-////////////////////////////////////////////////////////////////
-
-static size_t convert_crlf(char * s, size_t len)
-{
-  // turn \r characters into \n and "\r\n" sequences into \n:
-  char *p;
-  size_t l = len;
-  while ((p = strchr(s, '\r'))) {
-    if (*(p+1) == '\n') {
-      memmove(p, p+1, l-(p-s));
-      len--; l--;
-    } else *p = '\n';
-    l -= p-s;
-    s = p + 1;
-  }
-  return len;
-}
-
-// clipboard variables definitions :
-char *fl_selection_buffer[2] = {NULL, NULL};
-int fl_selection_length[2] = {0, 0};
-static int fl_selection_buffer_length[2];
-
-extern void fl_trigger_clipboard_notify(int source);
-
-void fl_clipboard_notify_change() {
-  // No need to do anything here...
-}
-
-static void clipboard_check(void)
-{
-  static NSInteger oldcount = -1;
-  NSInteger newcount = [[NSPasteboard generalPasteboard] changeCount];
-  if (newcount == oldcount) return;
-  oldcount = newcount;
-  fl_trigger_clipboard_notify(1);
-}
-
-static void resize_selection_buffer(int len, int clipboard) {
-  if (len <= fl_selection_buffer_length[clipboard])
-    return;
-  delete[] fl_selection_buffer[clipboard];
-  fl_selection_buffer[clipboard] = new char[len+100];
-  fl_selection_buffer_length[clipboard] = len+100;
-}
-
-/*
- * create a selection
- * stuff: pointer to selected data
- * len: size of selected data
- * type: always "plain/text" for now
- */
-void Fl::copy(const char *stuff, int len, int clipboard, const char *type) {
-  if (!stuff || len<0) return;
-  if (clipboard >= 2)
-    clipboard = 1; // Only on X11 do multiple clipboards make sense.
-
-  resize_selection_buffer(len+1, clipboard);
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  if (clipboard) {
-    CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[1], len);
-    if (text==NULL) return; // there was a pb creating the object, abort.
-    NSPasteboard *clip = [NSPasteboard generalPasteboard];
-    [clip declareTypes:[NSArray arrayWithObject:UTF8_pasteboard_type] owner:nil];
-    [clip setData:(NSData*)text forType:UTF8_pasteboard_type];
-    CFRelease(text);
-  }
-}
-
-static int get_plain_text_from_clipboard(int clipboard)
-{
-  NSInteger length = 0;
-  NSPasteboard *clip = [NSPasteboard generalPasteboard];
-  NSString *found = [clip availableTypeFromArray:[NSArray arrayWithObjects:UTF8_pasteboard_type, @"public.utf16-plain-text", @"com.apple.traditional-mac-plain-text", nil]];
-  if (found) {
-    NSData *data = [clip dataForType:found];
-    if (data) {
-      NSInteger len;
-      char *aux_c = NULL;
-      if (![found isEqualToString:UTF8_pasteboard_type]) {
-	NSString *auxstring;
-	auxstring = (NSString *)CFStringCreateWithBytes(NULL, 
-							(const UInt8*)[data bytes], 
-							[data length],
-							[found isEqualToString:@"public.utf16-plain-text"] ? kCFStringEncodingUnicode : kCFStringEncodingMacRoman,
-							false);
-	aux_c = strdup([auxstring UTF8String]);
-	[auxstring release];
-	len = strlen(aux_c) + 1;
-      }
-      else len = [data length] + 1;
-      resize_selection_buffer(len, clipboard);
-      if (![found isEqualToString:UTF8_pasteboard_type]) {
-        strcpy(fl_selection_buffer[clipboard], aux_c);
-        free(aux_c);
-      }
-      else {
-        [data getBytes:fl_selection_buffer[clipboard]];
-      }
-      fl_selection_buffer[clipboard][len - 1] = 0;
-      length = convert_crlf(fl_selection_buffer[clipboard], len - 1); // turn all \r characters into \n:
-      Fl::e_clipboard_type = Fl::clipboard_plain_text;
-    }
-  }    
-  return length;
-}
-
-static Fl_Image* get_image_from_clipboard(Fl_Widget *receiver)
-{
-  NSPasteboard *clip = [NSPasteboard generalPasteboard];
-  NSArray *present = [clip types]; // types in pasteboard in order of decreasing preference
-  NSArray  *possible = [NSArray arrayWithObjects:TIFF_pasteboard_type, PDF_pasteboard_type, PICT_pasteboard_type, nil];
-  NSString *found = nil;
-  NSUInteger rank;
-  for (NSUInteger i = 0; (!found) && i < [possible count]; i++) {
-    for (rank = 0; rank < [present count]; rank++) { // find first of possible types present in pasteboard
-      if ([[present objectAtIndex:rank] isEqualToString:[possible objectAtIndex:i]]) {
-        found = [present objectAtIndex:rank];
-        break;
-      }
-    }
-  }
-  if (!found) return NULL;
-  NSData *data = [clip dataForType:found];
-  if (!data) return NULL;
-  NSBitmapImageRep *bitmap = nil;
-  if ([found isEqualToString:TIFF_pasteboard_type]) {
-    bitmap = [[NSBitmapImageRep alloc] initWithData:data];
-  }
-  else if ([found isEqualToString:PDF_pasteboard_type] || [found isEqualToString:PICT_pasteboard_type]) {
-    NSImage *nsimg = [[NSImage alloc] initWithData:data];
-    [nsimg lockFocus];
-    bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, [nsimg size].width, [nsimg size].height)];
-    [nsimg unlockFocus];
-    [nsimg release];
-  }
-  if (!bitmap) return NULL;
-  int bytesPerPixel([bitmap bitsPerPixel]/8);
-  int bpr([bitmap bytesPerRow]);
-  int bpp([bitmap bytesPerPlane]);
-  int hh(bpp/bpr);
-  int ww(bpr/bytesPerPixel);
-  uchar *imagedata = new uchar[bpr * hh];
-  memcpy(imagedata, [bitmap bitmapData], bpr * hh);
-  Fl_RGB_Image *image = new Fl_RGB_Image(imagedata, ww, hh, bytesPerPixel);
-  image->alloc_array = 1;
-  [bitmap release];
-  Fl::e_clipboard_type = Fl::clipboard_image;
-  return image;
-}
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard, const char *type) {
-  if (type[0] == 0) type = Fl::clipboard_plain_text;
-  if (clipboard) {
-    Fl::e_clipboard_type = "";
-    if (strcmp(type, Fl::clipboard_plain_text) == 0) {
-      fl_selection_length[1] = get_plain_text_from_clipboard(1);
-    }
-    else if (strcmp(type, Fl::clipboard_image) == 0) {
-      Fl::e_clipboard_data = get_image_from_clipboard(&receiver);
-      if (Fl::e_clipboard_data) {
-        int done = receiver.handle(FL_PASTE);
-        Fl::e_clipboard_type = "";
-        if (done == 0) {
-          delete (Fl_Image*)Fl::e_clipboard_data;
-          Fl::e_clipboard_data = NULL;
-        }
-      }
-      return;
-    }
-    else
-      fl_selection_length[1] = 0;
-  }
-  Fl::e_text = fl_selection_buffer[clipboard];
-  Fl::e_length = fl_selection_length[clipboard];
-  if (!Fl::e_length) Fl::e_text = (char *)"";
-  receiver.handle(FL_PASTE);
-}
-
-int Fl::clipboard_contains(const char *type) {
-  NSString *found = nil;
-  if (strcmp(type, Fl::clipboard_plain_text) == 0) {
-    found = [[NSPasteboard generalPasteboard] availableTypeFromArray:[NSArray arrayWithObjects:UTF8_pasteboard_type, @"public.utf16-plain-text", @"com.apple.traditional-mac-plain-text", nil]];
-    }
-  else if (strcmp(type, Fl::clipboard_image) == 0) {
-    found = [[NSPasteboard generalPasteboard] availableTypeFromArray:[NSArray arrayWithObjects:TIFF_pasteboard_type, PDF_pasteboard_type, PICT_pasteboard_type, nil]];
-    }
-  return found != nil;
-}
-
-void Fl_X::destroy() {
-  if (xid) {
-    [xid close];
-  }
-  delete subRect();
-}
-
-void Fl_X::map() {
-  if (w && xid && ![xid parentWindow]) { // 10.2
-    // after a subwindow has been unmapped, it has lost its parent window and its frame may be wrong
-    [xid setSubwindowFrame];
-  }
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-}
-
-void Fl_X::unmap() {
-  if (w && xid) {
-    if (w->parent()) [[xid parentWindow] removeChildWindow:xid]; // necessary with at least 10.5
-    [xid orderOut:nil];
-  }
-}
-
-// intersects current and x,y,w,h rectangle and returns result as a new Fl_Region
-Fl_Region Fl_X::intersect_region_and_rect(Fl_Region current, int x,int y,int w, int h)
-{
-  if (current == NULL) return XRectangleRegion(x,y,w,h);
-  CGRect r = fl_cgrectmake_cocoa(x, y, w, h);
-  Fl_Region outr = (Fl_Region)malloc(sizeof(*outr));
-  outr->count = current->count;
-  outr->rects =(CGRect*)malloc(outr->count * sizeof(CGRect));
-  int j = 0;
-  for(int i = 0; i < current->count; i++) {
-    CGRect test = CGRectIntersection(current->rects[i], r);
-    if (!CGRectIsEmpty(test)) outr->rects[j++] = test;
-  }
-  if (j) {
-    outr->count = j;
-    outr->rects = (CGRect*)realloc(outr->rects, outr->count * sizeof(CGRect));
-  }
-  else {
-    XDestroyRegion(outr);
-    outr = XRectangleRegion(0,0,0,0);
-  }
-  return outr;
-}
-
-void Fl_X::collapse() {
-  [xid miniaturize:nil];
-}
-
-static NSImage *CGBitmapContextToNSImage(CGContextRef c)
-// the returned NSImage is autoreleased
-{
-  NSImage* image;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-  if (fl_mac_os_version >= 100600) {
-    CGImageRef cgimg = CGBitmapContextCreateImage(c);  // requires 10.4
-    image = [[NSImage alloc] initWithCGImage:cgimg size:NSZeroSize]; // requires 10.6
-    CFRelease(cgimg);
-  }
-  else 
-#endif
-    {
-      NSBitmapImageRep *imagerep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
-									   pixelsWide:CGBitmapContextGetWidth(c)
-									   pixelsHigh:CGBitmapContextGetHeight(c)
-									bitsPerSample:8
-								      samplesPerPixel:4
-									     hasAlpha:YES
-									     isPlanar:NO
-								       colorSpaceName:NSDeviceRGBColorSpace
-									  bytesPerRow:CGBitmapContextGetBytesPerRow(c)
-									 bitsPerPixel:CGBitmapContextGetBitsPerPixel(c)];
-      memcpy([imagerep bitmapData], CGBitmapContextGetData(c), [imagerep bytesPerRow] * [imagerep pixelsHigh]);
-      image = [[NSImage alloc] initWithSize:NSMakeSize([imagerep pixelsWide], [imagerep pixelsHigh])];
-      [image addRepresentation:imagerep];
-      [imagerep release];
-    }
-  return [image autorelease];
-}
-
-int Fl_X::set_cursor(Fl_Cursor c)
-{
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-
-  switch (c) {
-  case FL_CURSOR_ARROW:   cursor = [NSCursor arrowCursor]; break;
-  case FL_CURSOR_CROSS:   cursor = [NSCursor crosshairCursor]; break;
-  case FL_CURSOR_INSERT:  cursor = [NSCursor IBeamCursor]; break;
-  case FL_CURSOR_HAND:    cursor = [NSCursor pointingHandCursor]; break;
-  case FL_CURSOR_MOVE:    cursor = [NSCursor openHandCursor]; break;
-  case FL_CURSOR_NS:      cursor = [NSCursor resizeUpDownCursor]; break;
-  case FL_CURSOR_WE:      cursor = [NSCursor resizeLeftRightCursor]; break;
-  case FL_CURSOR_N:       cursor = [NSCursor resizeUpCursor]; break;
-  case FL_CURSOR_E:       cursor = [NSCursor resizeRightCursor]; break;
-  case FL_CURSOR_W:       cursor = [NSCursor resizeLeftCursor]; break;
-  case FL_CURSOR_S:       cursor = [NSCursor resizeDownCursor]; break;
-  default:
-    return 0;
-  }
-
-  [(NSCursor*)cursor retain];
-
-  [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]];
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  if (cursor) {
-    [(NSCursor*)cursor release];
-    cursor = NULL;
-  }
-
-  if ((hotx < 0) || (hotx >= image->w()))
-    return 0;
-  if ((hoty < 0) || (hoty >= image->h()))
-    return 0;
-
-  // OS X >= 10.6 can create a NSImage from a CGImage, but we need to
-  // support older versions, hence this pesky handling.
-
-  NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc]
-                              initWithBitmapDataPlanes:NULL
-                              pixelsWide:image->w()
-                              pixelsHigh:image->h()
-                              bitsPerSample:8
-                              samplesPerPixel:image->d()
-                              hasAlpha:!(image->d() & 1)
-                              isPlanar:NO
-                              colorSpaceName:(image->d()<=2) ? NSDeviceWhiteColorSpace : NSDeviceRGBColorSpace
-                              bytesPerRow:(image->w() * image->d())
-                              bitsPerPixel:(image->d()*8)];
-
-  // Alpha needs to be premultiplied for this format
-
-  const uchar *i = (const uchar*)*image->data();
-  const int extra_data = image->ld() ? (image->ld() - image->w() * image->d()) : 0;
-  unsigned char *o = [bitmap bitmapData];
-  for (int y = 0;y < image->h();y++) {
-    if (!(image->d() & 1)) {
-      for (int x = 0;x < image->w();x++) {
-        unsigned int alpha;
-        if (image->d() == 4) {
-          alpha = i[3];
-          *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-          *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-        }
-
-        alpha = i[1];
-        *o++ = (unsigned char)((unsigned int)*i++ * alpha / 255);
-        *o++ = alpha;
-        i++;
-  }
-    } else {
-      // No alpha, so we can just copy everything directly.
-      int len = image->w() * image->d();
-      memcpy(o, i, len);
-      o += len;
-      i += len;
-    }
-    i += extra_data;
-  }
-
-  NSImage *nsimage = [[NSImage alloc]
-                      initWithSize:NSMakeSize(image->w(), image->h())];
-
-  [nsimage addRepresentation:bitmap];
-
-  cursor = [[NSCursor alloc]
-            initWithImage:nsimage
-            hotSpot:NSMakePoint(hotx, hoty)];
-
-  [(NSWindow*)xid invalidateCursorRectsForView:[(NSWindow*)xid contentView]];
-
-  [bitmap release];
-  [nsimage release];
-
-  return 1;
-}
-
-@interface FLaboutItemTarget : NSObject 
-{
-}
-- (BOOL)validateMenuItem:(NSMenuItem *)item;
-- (void)showPanel;
-- (void)printPanel;
-- (void)terminate:(id)sender;
-@end
-@implementation FLaboutItemTarget
-- (BOOL)validateMenuItem:(NSMenuItem *)item
-{ // invalidate the Quit item of the application menu when running modal
-  if (!Fl::modal() || [item action] != @selector(terminate:)) return YES;
-  return NO;
-}
-- (void)showPanel
-{
-    NSDictionary *options;
-    options = [NSDictionary dictionaryWithObjectsAndKeys:
-	       [[[NSAttributedString alloc] 
-		initWithString:[NSString stringWithFormat:@" GUI with FLTK %d.%d", 
-		FL_MAJOR_VERSION, FL_MINOR_VERSION ]] autorelease], @"Credits",
-                	     nil];
-    [NSApp orderFrontStandardAboutPanelWithOptions:options];
-}
-//#include <FL/Fl_PostScript.H>
-- (void)printPanel
-{  
-  Fl_Printer printer;
-  //Fl_PostScript_File_Device printer;
-  int w, h, ww, wh;
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  if (win->parent()) win = win->top_window();
-  if( printer.start_job(1) ) return;
-  if( printer.start_page() ) return;
-  fl_lock_function();
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  printer.printable_rect(&w, &h);
-  ww = win->decorated_w();
-  wh = win->decorated_h();
-  if (ww>w || wh>h) {
-    scale = (float)w/win->w();
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale);
-    printer.printable_rect(&w, &h);
-  }
-//#define ROTATE 1
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(20.);
-#else
-  printer.origin(w/2, h/2);
-#endif
-  printer.print_window(win, -ww/2, -wh/2);
-  //printer.print_window_part(win,0,0,win->w(),win->h(), -ww/2, -wh/2);
-  printer.end_page();
-  printer.end_job();
-  fl_unlock_function();
-}
-- (void)terminate:(id)sender
-{
-  [NSApp terminate:sender];
-}
-@end
-
-
-static void createAppleMenu(void)
-{
-  static BOOL donethat = NO;
-  if (donethat) return;
-  donethat = YES;
-  NSMenu *mainmenu, *services = nil, *appleMenu;
-  NSMenuItem *menuItem;
-  NSString *title;
-  
-  SEL infodictSEL = (fl_mac_os_version >= 100200 ? @selector(localizedInfoDictionary) : @selector(infoDictionary));
-  NSString *nsappname = [[[NSBundle mainBundle] performSelector:infodictSEL] objectForKey:@"CFBundleName"];  
-  if (nsappname == nil)
-    nsappname = [[NSProcessInfo processInfo] processName];
-  appleMenu = [[NSMenu alloc] initWithTitle:@""];
-  /* Add menu items */
-  title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::about],nil), nsappname];
-  menuItem = [appleMenu addItemWithTitle:title action:@selector(showPanel) keyEquivalent:@""];
-  FLaboutItemTarget *about = [[FLaboutItemTarget alloc] init];
-  [menuItem setTarget:about];
-  [appleMenu addItem:[NSMenuItem separatorItem]];
-  // Print front window
-  title = NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::print], nil);
-  if ([title length] > 0) {
-    menuItem = [appleMenu 
-		addItemWithTitle:title
-		action:@selector(printPanel) 
-		keyEquivalent:@""];
-    [menuItem setTarget:about];
-    [menuItem setEnabled:YES];
-    [appleMenu addItem:[NSMenuItem separatorItem]];
-    }
-  if (fl_mac_os_version >= 100400) { // services+hide+quit already in menu in OS 10.3
-    // Services Menu
-    services = [[NSMenu alloc] initWithTitle:@""];
-    menuItem = [appleMenu 
-		addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::services], nil)
-		action:nil 
-		keyEquivalent:@""];
-    [appleMenu setSubmenu:services forItem:menuItem];
-    [appleMenu addItem:[NSMenuItem separatorItem]];
-    // Hide AppName
-    title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::hide],nil), nsappname];
-    [appleMenu addItemWithTitle:title 
-			 action:@selector(hide:) 
-		  keyEquivalent:@"h"];
-    // Hide Others
-    menuItem = [appleMenu 
-		addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::hide_others] , nil)
-		action:@selector(hideOtherApplications:) 
-		keyEquivalent:@"h"];
-    [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
-    // Show All
-    [appleMenu addItemWithTitle:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::show] , nil)
-			 action:@selector(unhideAllApplications:) keyEquivalent:@""];
-    [appleMenu addItem:[NSMenuItem separatorItem]];
-    // Quit AppName
-    title = [NSString stringWithFormat:NSLocalizedString([NSString stringWithUTF8String:Fl_Mac_App_Menu::quit] , nil),
-	     nsappname];
-    menuItem = [appleMenu addItemWithTitle:title
-                                    action:@selector(terminate:)
-                             keyEquivalent:@"q"];
-    [menuItem setTarget:about];
-    }
-  /* Put menu into the menubar */
-  menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
-  [menuItem setSubmenu:appleMenu];
-  mainmenu = [[NSMenu alloc] initWithTitle:@""];
-  [mainmenu addItem:menuItem];
-  if (fl_mac_os_version < 100600) {
-    //	[NSApp setAppleMenu:appleMenu];
-    //	to avoid compiler warning raised by use of undocumented setAppleMenu	:
-    [NSApp performSelector:@selector(setAppleMenu:) withObject:appleMenu];
-  }
-  [NSApp setMainMenu:mainmenu];
-  if (services) {
-    [NSApp setServicesMenu:services];
-    [services release];
-    }
-  [mainmenu release];
-  [appleMenu release];
-  [menuItem release];
-}
-
-
-void Fl_X::set_key_window()
-{
-  [xid makeKeyWindow];
-}
-
-static NSImage *imageFromText(const char *text, int *pwidth, int *pheight)
-{
-  const char *p, *q;
-  int width = 0, height, w2, ltext = strlen(text);
-  fl_font(FL_HELVETICA, 10);
-  p = text;
-  int nl = 0;
-  while(nl < 100 && (q=strchr(p, '\n')) != NULL) { 
-    nl++; 
-    w2 = int(fl_width(p, q - p));
-    if (w2 > width) width = w2;
-    p = q + 1; 
-  }
-  if (text[ ltext - 1] != '\n') {
-    nl++;
-    w2 = int(fl_width(p));
-    if (w2 > width) width = w2;
-  }
-  height = nl * fl_height() + 3;
-  width += 6;
-  Fl_Offscreen off = Fl_Quartz_Graphics_Driver::create_offscreen_with_alpha(width, height);
-  fl_begin_offscreen(off);
-  CGContextSetRGBFillColor( (CGContextRef)off, 0,0,0,0);
-  fl_rectf(0,0,width,height);
-  fl_color(FL_BLACK);
-  p = text;
-  int y = fl_height();
-  while(TRUE) {
-    q = strchr(p, '\n');
-    if (q) {
-      fl_draw(p, q - p, 3, y);
-    } else {
-      fl_draw(p, 3, y);
-      break;
-    }
-    y += fl_height();
-    p = q + 1;
-  }
-  fl_end_offscreen();
-  NSImage* image = CGBitmapContextToNSImage( (CGContextRef)off );
-  fl_delete_offscreen( off );
-  *pwidth = width;
-  *pheight = height;
-  return image;
-}
-
-static NSImage *defaultDragImage(int *pwidth, int *pheight)
-{
-  const int version_threshold = 100700;
-  int width, height;
-  if (fl_mac_os_version >= version_threshold) {
-    width = 50; height = 40;
-    }
-  else {
-    width = 16; height = 16;
-    }
-  Fl_Offscreen off = Fl_Quartz_Graphics_Driver::create_offscreen_with_alpha(width, height);
-  fl_begin_offscreen(off);
-  if (fl_mac_os_version >= version_threshold) {
-    fl_font(FL_HELVETICA, 20);
-    fl_color(FL_BLACK);
-    char str[4];
-    int l = fl_utf8encode(0x1F69A, str); // the "Delivery truck" Unicode character from "Apple Color Emoji" font
-    fl_draw(str, l, 1, 16);
-    }
-  else { // draw two squares
-    CGContextSetRGBFillColor( (CGContextRef)off, 0,0,0,0);
-    fl_rectf(0,0,width,height);
-    CGContextSetRGBStrokeColor( (CGContextRef)off, 0,0,0,0.6);
-    fl_rect(0,0,width,height);
-    fl_rect(2,2,width-4,height-4);
-  }
-  fl_end_offscreen();
-  NSImage* image = CGBitmapContextToNSImage( (CGContextRef)off );
-  fl_delete_offscreen( off );
-  *pwidth = width;
-  *pheight = height;
-  return image;
-}
-
-int Fl::dnd()
-{
-  return Fl_X::dnd(0);
-}
-
-int Fl_X::dnd(int use_selection)
-{
-  CFDataRef text = CFDataCreate(kCFAllocatorDefault, (UInt8*)fl_selection_buffer[0], fl_selection_length[0]);
-  if (text==NULL) return false;
-  NSAutoreleasePool *localPool;
-  localPool = [[NSAutoreleasePool alloc] init]; 
-  NSPasteboard *mypasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
-  [mypasteboard declareTypes:[NSArray arrayWithObject:UTF8_pasteboard_type] owner:nil];
-  [mypasteboard setData:(NSData*)text forType:UTF8_pasteboard_type];
-  CFRelease(text);
-  Fl_Widget *w = Fl::pushed();
-  Fl_Window *win = w->top_window();
-  NSView *myview = [Fl_X::i(win)->xid contentView];
-  NSEvent *theEvent = [NSApp currentEvent];
-  
-  int width, height;
-  NSImage *image;
-  if (use_selection) {
-    fl_selection_buffer[0][ fl_selection_length[0] ] = 0;
-    image = imageFromText(fl_selection_buffer[0], &width, &height);
-  } else {
-    image = defaultDragImage(&width, &height);
-  }
-  
-  static NSSize offset={0,0};
-  NSPoint pt = [theEvent locationInWindow];
-  pt.x -= width/2;
-  pt.y -= height/2;
-  [myview dragImage:image  at:pt  offset:offset 
-              event:theEvent  pasteboard:mypasteboard  
-             source:myview  slideBack:YES];
-  if ( w ) {
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_RELEASE);
-    Fl::e_number = old_event;
-    Fl::pushed( 0 );
-  }
-  [localPool release];
-  return true;
-}
-
-// rescales an NSBitmapImageRep
-static NSBitmapImageRep *scale_nsbitmapimagerep(NSBitmapImageRep *img, float scale)
-{
-  int w = [img pixelsWide];
-  int h = [img pixelsHigh];
-  int scaled_w = int(scale * w + 0.5);
-  int scaled_h = int(scale * h + 0.5);
-  NSBitmapImageRep *scaled = [[NSBitmapImageRep alloc]  initWithBitmapDataPlanes:NULL
-                                                                      pixelsWide:scaled_w
-                                                                      pixelsHigh:scaled_h
-                                                                   bitsPerSample:8
-                                                                 samplesPerPixel:4
-                                                                        hasAlpha:YES
-                                                                        isPlanar:NO
-                                                                  colorSpaceName:NSDeviceRGBColorSpace
-                                                                     bytesPerRow:scaled_w*4
-                                                                    bitsPerPixel:32];
-  NSDictionary *dict = [NSDictionary dictionaryWithObject:scaled
-                                                   forKey:NSGraphicsContextDestinationAttributeName];
-  NSGraphicsContext *oldgc = [NSGraphicsContext currentContext];
-  [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithAttributes:dict]];
-  [[NSColor clearColor] set];
-  NSRect r = NSMakeRect(0, 0, scaled_w, scaled_h);
-  NSRectFill(r);
-  [img drawInRect:r];
-  [NSGraphicsContext setCurrentContext:oldgc];
-  [img release];
-  return scaled;
-}
-
-static void write_bitmap_inside(NSBitmapImageRep *to, int to_width, NSBitmapImageRep *from,
-                                int to_x, int to_y)
-/* Copies in bitmap "to" the bitmap "from" with its top-left angle at coordinates to_x, to_y
- On retina displays both bitmaps have double width and height
- to_width is the width in screen units of "to". On retina, its pixel width is twice that.
- */
-{
-  const uchar *from_data = [from bitmapData];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if (fl_mac_os_version >= 100400) { // 10.4 required by the bitmapFormat message
-    if (([to bitmapFormat] & NSAlphaFirstBitmapFormat) && !([from bitmapFormat] & NSAlphaFirstBitmapFormat) ) {
-      // "to" is ARGB and "from" is RGBA --> convert "from" to ARGB
-      // it is enough to read "from" starting one byte earlier, because A is always 0xFF:
-      // RGBARGBA becomes (A)RGBARGB
-      from_data--;
-    } else if ( !([to bitmapFormat] & NSAlphaFirstBitmapFormat) && ([from bitmapFormat] & NSAlphaFirstBitmapFormat) ) {
-      // "from" is ARGB and "to" is RGBA --> convert "from" to RGBA
-      // it is enough to offset reading by one byte because A is always 0xFF
-      // so ARGBARGB becomes RGBARGB(A) as needed
-      from_data++;
-    }
-  }
-#endif
-  int to_w = (int)[to pixelsWide]; // pixel width of "to"
-  int from_w = (int)[from pixelsWide]; // pixel width of "from"
-  int from_h = [from pixelsHigh]; // pixel height of "from"
-  int to_depth = [to samplesPerPixel], from_depth = [from samplesPerPixel];
-  int depth = 0;
-  if (to_depth > from_depth) depth = from_depth;
-  else if (from_depth > to_depth) depth = to_depth;
-  float factor = to_w / (float)to_width; // scaling factor is 1 for classic displays and 2 for retina
-  to_x = factor*to_x; // transform offset from screen unit to pixels
-  to_y = factor*to_y;
-  // perform the copy
-  uchar *tobytes = [to bitmapData] + to_y * to_w * to_depth + to_x * to_depth;
-  const uchar *frombytes = from_data;
-  for (int i = 0; i < from_h; i++) {
-    if (depth == 0) { // depth is always 0 in case of RGBA <-> ARGB conversion
-      if (i == 0 && from_data < [from bitmapData]) {
-        memcpy(tobytes+1, frombytes+1, from_w * from_depth-1); // avoid reading before [from bitmapData]
-        *tobytes = 0xFF; // set the very first A byte
-      } else if (i == from_h - 1 && from_data > [from bitmapData]) {
-        memcpy(tobytes, frombytes, from_w * from_depth - 1); // avoid reading after end of [from bitmapData]
-        *(tobytes + from_w * from_depth - 1) = 0xFF; // set the very last A byte
-      } else {
-        memcpy(tobytes, frombytes, from_w * from_depth);
-      }
-    } else {
-      for (int j = 0; j < from_w; j++) {
-        memcpy(tobytes + j * to_depth, frombytes + j * from_depth, depth);
-      }
-    }
-    tobytes += to_w * to_depth;
-    frombytes += from_w * from_depth;
-  }
-}
-
-
-static NSBitmapImageRep* GL_rect_to_nsbitmap(Fl_Window *win, int x, int y, int w, int h)
-// captures a rectangle from a GL window and returns it as an allocated NSBitmapImageRep
-// the capture has high res on retina
-{
-  Fl_Plugin_Manager pm("fltk:device");
-  Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
-  if (!pi) return nil;
-  Fl_RGB_Image *img = pi->rectangle_capture(win, x, y, w, h);
-  NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:img->w() pixelsHigh:img->h() bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bytesPerRow:4*img->w() bitsPerPixel:32];
-  memset([bitmap bitmapData], 0xFF, [bitmap bytesPerPlane]);
-  const uchar *from = img->array;
-  for (int r = img->h() - 1; r >= 0; r--) {
-    uchar *to = [bitmap bitmapData] + r * [bitmap bytesPerRow];
-    for (int c = 0; c < img->w(); c++) {
-      memcpy(to, from, 3);
-      from += 3;
-      to += 4;
-    }
-  }
-  delete img;
-  return bitmap;
-}
-
-static NSBitmapImageRep* rect_to_NSBitmapImageRep_layer(Fl_Window *win, int x, int y, int w, int h)
-{ // capture window data for layer-based views because initWithFocusedViewRect: does not work for them
-  NSBitmapImageRep *bitmap = nil;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  CGContextRef gc = ((FLViewLayer*)[fl_xid(win) contentView])->layer_data;
-  if (!gc || y < 0) return nil;
-  CGImageRef cgimg = CGBitmapContextCreateImage(gc);  // requires 10.4
-  Fl_X *i = Fl_X::i( win );
-  int resolution = i->mapped_to_retina() ? 2 : 1;
-  if (x || y || w != win->w() || h != win->h()) {
-    CGRect rect = CGRectMake(x * resolution, y * resolution, w * resolution, h * resolution);
-    CGImageRef cgimg2 = CGImageCreateWithImageInRect(cgimg, rect); //10.4
-    CGImageRelease(cgimg);
-    cgimg = cgimg2;
-  }
-  bitmap = [[NSBitmapImageRep alloc] initWithCGImage:cgimg];//10.5
-  CGImageRelease(cgimg);
-#endif
-  return bitmap;
-}
-
-static NSBitmapImageRep* rect_to_NSBitmapImageRep(Fl_Window *win, int x, int y, int w, int h)
-/* Captures a rectangle from a mapped window.
- On retina displays, the resulting bitmap has 2 pixels per screen unit.
- The returned value is to be released after use
- */
-{
-  NSBitmapImageRep *bitmap = nil;
-  NSRect rect;
-  if (win->as_gl_window() && y >= 0) {
-    bitmap = GL_rect_to_nsbitmap(win, x, y, w, h);
-  } else if (views_use_CA) {
-    bitmap = rect_to_NSBitmapImageRep_layer(win, x, y, w, h);
-  } else {
-    NSView *winview = nil;
-    if ( through_Fl_X_flush  && Fl_Window::current() == win ) {
-      rect = NSMakeRect(x - 0.5, y - 0.5, w, h);
-    }
-    else {
-      rect = NSMakeRect(x, win->h()-(y+h), w, h);
-      // lock focus to win's view
-      winview = [fl_xid(win) contentView];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-      if (fl_mac_os_version >= 101100) [[fl_xid(win) graphicsContext] saveGraphicsState]; // necessary under 10.11
-#endif
-      [winview lockFocus];
-    }
-    // The image depth is 3 until 10.5 and 4 with 10.6 and above
-    bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:rect];
-    if ( !( through_Fl_X_flush && Fl_Window::current() == win) ) {
-      [winview unlockFocus];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-      if (fl_mac_os_version >= 101100) [[fl_xid(win) graphicsContext] restoreGraphicsState];
-#endif
-    }
-  }
-  if (!bitmap) return nil;
-
-  // capture also subwindows
-  NSArray *children = [fl_xid(win) childWindows]; // 10.2
-  NSEnumerator *enumerator = [children objectEnumerator];
-  id child;
-  while ((child = [enumerator nextObject]) != nil) {
-    if (![child isKindOfClass:[FLWindow class]]) continue;
-    Fl_Window *sub = [(FLWindow*)child getFl_Window];
-    CGRect rsub = CGRectMake(sub->x(), win->h() -(sub->y()+sub->h()), sub->w(), sub->h());
-    CGRect clip = CGRectMake(x, win->h()-(y+h), w, h);
-    clip = CGRectIntersection(rsub, clip);
-    if (CGRectIsNull(clip)) continue;
-    NSBitmapImageRep *childbitmap = rect_to_NSBitmapImageRep(sub, clip.origin.x - sub->x(),
-                                                             win->h() - clip.origin.y - sub->y() - clip.size.height, clip.size.width, clip.size.height);
-    if (childbitmap) {
-      // if bitmap is high res and childbitmap is not, childbitmap must be rescaled
-      if ([bitmap pixelsWide] > w && [childbitmap pixelsWide] == clip.size.width) childbitmap = scale_nsbitmapimagerep(childbitmap, 2);
-      write_bitmap_inside(bitmap, w, childbitmap,
-                          clip.origin.x - x, win->h() - clip.origin.y - clip.size.height - y );
-    }
-    [childbitmap release];
-  }
-  return bitmap;
-}
-
-
-unsigned char *Fl_X::bitmap_from_window_rect(Fl_Window *win, int x, int y, int w, int h, int *bytesPerPixel)
-/* Returns a capture of a rectangle of a mapped window as a pre-multiplied RGBA array of bytes.
- Alpha values are always 1 (except for the angles of a window title bar)
- so pre-multiplication can be ignored.
- *bytesPerPixel is set to the value 3 or 4 upon return.
- delete[] the returned pointer after use
- */
-{
-  NSBitmapImageRep *bitmap = rect_to_NSBitmapImageRep(win, x, y, w, h);
-  if (bitmap == nil) return NULL;
-  *bytesPerPixel = [bitmap bitsPerPixel]/8;
-  int bpp = (int)[bitmap bytesPerPlane];
-  int bpr = (int)[bitmap bytesPerRow];
-  int hh = bpp/bpr; // sometimes hh = h-1 for unclear reason, and hh = 2*h with retina
-  int ww = bpr/(*bytesPerPixel); // sometimes ww = w-1, and ww = 2*w with retina
-  const uchar *start = [bitmap bitmapData]; // start of the bitmap data
-  bool convert = false;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if (fl_mac_os_version >= 100400 && ([bitmap bitmapFormat] & NSAlphaFirstBitmapFormat)) {
-    // bitmap is ARGB --> convert it to RGBA (ARGB happens with Mac OS 10.11)
-    // it is enough to offset reading by one byte because A is always 0xFF
-    // so ARGBARGB becomes RGBARGBA as needed
-    start++;
-    convert = true;
-  }
-#endif
-  unsigned char *data;
-  size_t tocopy;
-  if (ww > w) { // with a retina display, we have to scale the image by a factor of 2
-    uchar *data2 = [bitmap bitmapData];
-    if (convert) { // duplicate the NSBitmapImageRep data taking care not to access beyond its end
-      tocopy = ww*hh*4;
-      data2 = new uchar[tocopy];
-      memcpy(data2, start, --tocopy);
-      data2[tocopy] = 0xFF; // set the last A byte
-    }
-    Fl_RGB_Image *rgb = new Fl_RGB_Image(data2, ww, hh, 4);
-    rgb->alloc_array = (convert ? 1 : 0);
-    Fl_RGB_Scaling save_scaling = Fl_Image::RGB_scaling();
-    Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR);
-    Fl_RGB_Image *rgb2 = (Fl_RGB_Image*)rgb->copy(w, h);
-    Fl_Image::RGB_scaling(save_scaling);
-    delete rgb;
-    rgb2->alloc_array = 0;
-    data = (uchar*)rgb2->array;
-    delete rgb2;
-  }
-  else {
-    data = new unsigned char[w * h *  *bytesPerPixel];
-    if (w == ww) { // the NSBitmapImageRep data can be copied in one step
-      tocopy = w * hh * (*bytesPerPixel);
-      if (convert) { // take care not to access beyond the image end
-        data[--tocopy] = 0xFF; // set the last A byte
-      }
-      memcpy(data, start, tocopy);
-    } else {  // copy the NSBitmapImageRep data line by line
-      const uchar *p = start;
-      unsigned char *q = data;
-      tocopy = bpr;
-      for (int i = 0; i < hh; i++) {
-        if (i == hh-1 && convert) tocopy--; // take care not to access beyond the image end
-        memcpy(q, p, tocopy);
-        p += bpr;
-        q += w * (*bytesPerPixel);
-      }
-    }
-  }
-  [bitmap release];
-  return data;
-}
-
-
-static void nsbitmapProviderReleaseData (void *info, const void *data, size_t size)
-{
-  [(NSBitmapImageRep*)info release];
-}
-
-CGImageRef Fl_X::CGImage_from_window_rect(Fl_Window *win, int x, int y, int w, int h)
-/* Returns a capture of a rectangle of a mapped window as a CGImage.
- With retina displays, the returned image has twice the width and height.
- CFRelease the returned CGImageRef after use
- */
-{
-  CGImageRef img;
-  NSBitmapImageRep *bitmap = rect_to_NSBitmapImageRep(win, x, y, w, h);
-  if (fl_mac_os_version >= 100500) {
-    img = (CGImageRef)[bitmap performSelector:@selector(CGImage)]; // requires Mac OS 10.5
-    CGImageRetain(img);
-    [bitmap release];
-  } else {
-    CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB();
-    CGDataProviderRef provider = CGDataProviderCreateWithData(bitmap, [bitmap bitmapData],
-                                                              [bitmap bytesPerRow]*[bitmap pixelsHigh],
-                                                              nsbitmapProviderReleaseData);
-    img = CGImageCreate([bitmap pixelsWide], [bitmap pixelsHigh], 8, [bitmap bitsPerPixel], [bitmap bytesPerRow],
-                        cspace,
-                        [bitmap bitsPerPixel] == 32 ? kCGImageAlphaPremultipliedLast : kCGImageAlphaNone,
-                        provider, NULL, false, kCGRenderingIntentDefault);
-    CGColorSpaceRelease(cspace);
-    CGDataProviderRelease(provider);
-  }
-  return img;
-}
-
-WindowRef Fl_X::window_ref() // useless with cocoa GL windows
-{
-  return (WindowRef)[xid windowRef];
-}
-
-// so a CGRect matches exactly what is denoted x,y,w,h for clipping purposes
-CGRect fl_cgrectmake_cocoa(int x, int y, int w, int h) {
-  return CGRectMake(x - 0.5, y - 0.5, w, h);
-}
-
-Window fl_xid(const Fl_Window* w)
-{
-  Fl_X *temp = Fl_X::i(w);
-  return temp ? temp->xid : 0;
-}
-
-int Fl_Window::decorated_w()
-{
-  if (!shown() || parent() || !border() || !visible()) return w();
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  return w() + 2 * bx;
-}
-
-int Fl_Window::decorated_h()
-{
-  if (!shown() || parent() || !border() || !visible()) return h();
-  int bx, by, bt;
-  get_window_frame_sizes(bx, by, bt);
-  return h() + bt + by;
-}
-
-// clip the graphics context to rounded corners
-void Fl_X::clip_to_rounded_corners(CGContextRef gc, int w, int h) {
-  const CGFloat radius = 5;
-  CGContextMoveToPoint(gc, 0, 0);
-  CGContextAddLineToPoint(gc, 0, h - radius);
-  CGContextAddArcToPoint(gc, 0, h,  radius, h, radius);
-  CGContextAddLineToPoint(gc, w - radius, h);
-  CGContextAddArcToPoint(gc, w, h, w, h - radius, radius);
-  CGContextAddLineToPoint(gc, w, 0);
-  CGContextClip(gc);
-}
-
-
-void *Fl_X::get_titlebar_layer(Fl_Window *win)
-{
-  // a compilation warning appears with SDK 10.5, so we require SDK 10.6 instead
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-  return fl_mac_os_version >= 101000 ? [[[fl_xid(win) standardWindowButton:NSWindowCloseButton] superview] layer] : nil; // 10.5
-#else
-  return nil;
-#endif
-}
-
-
-void Fl_X::draw_layer_to_context(void *layer, CGContextRef gc, int w, int h)
-{
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
-  Fl_X::clip_to_rounded_corners(gc, w, h);
-  CGContextSetRGBFillColor(gc, .79, .79, .79, 1.); // equiv. to FL_DARK1
-  CGContextFillRect(gc, CGRectMake(0, 0, w, h));
-  CGContextSaveGState(gc);
-  CGContextSetShouldAntialias(gc, true);
-  [(CALayer*)layer renderInContext:gc]; // 10.5
-  CGContextRestoreGState(gc);
-#endif
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) {
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  int bx, by, bt, bpp;
-  get_window_frame_sizes(bx, by, bt);
-  BOOL to_quartz =  (this->driver()->class_name() == Fl_Quartz_Graphics_Driver::class_id);
-  void *layer = Fl_X::get_titlebar_layer(win);
-  if (layer) { // if title bar uses a layer
-    if (to_quartz) { // to Quartz printer
-      CGContextSaveGState(fl_gc);
-      CGContextTranslateCTM(fl_gc, x_offset - 0.5, y_offset + bt - 0.5);
-      CGContextScaleCTM(fl_gc, 1, -1);
-      Fl_X::draw_layer_to_context(layer, fl_gc, win->w(), bt);
-      CGContextRestoreGState(fl_gc);
-    }
-    else { // to PostScript
-      CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB ();
-      CGContextRef gc = CGBitmapContextCreate(NULL, win->w(), bt, 8, 0, cspace, kCGImageAlphaPremultipliedLast);
-      CGColorSpaceRelease(cspace);
-      CGContextClearRect(gc, CGRectMake(0, 0, win->w(), bt));
-      Fl_X::draw_layer_to_context(layer, gc, win->w(), bt);
-      Fl_RGB_Image *image = new Fl_RGB_Image((const uchar*)CGBitmapContextGetData(gc), win->w(), bt, 4,
-                                             CGBitmapContextGetBytesPerRow(gc)); // 10.2
-      image->draw(x_offset, y_offset); // draw title bar to PostScript
-      delete image;
-      CGContextRelease(gc);
-    }
-    this->print_widget(win, x_offset, y_offset + bt);
-    return;
-  }
-  Fl_Display_Device::display_device()->set_current(); // send win to front and make it current
-  NSString *title = [fl_xid(win) title];
-  [title retain];
-  [fl_xid(win) setTitle:@""]; // temporarily set a void window title
-  win->show();
-  fl_gc = NULL;
-  Fl::check();
-  // capture the window title bar with no title
-  CGImageRef img = NULL;
-  unsigned char *bitmap = NULL;
-  if (to_quartz)
-    img = Fl_X::CGImage_from_window_rect(win, 0, -bt, win->w(), bt);
-  else
-    bitmap = Fl_X::bitmap_from_window_rect(win, 0, -bt, win->w(), bt, &bpp);
-  [fl_xid(win) setTitle:title]; // put back the window title
-  this->set_current(); // back to the Fl_Paged_Device
-  if (img && to_quartz) { // print the title bar
-    CGRect rect = CGRectMake(x_offset, y_offset, win->w(), bt);
-    Fl_X::q_begin_image(rect, 0, 0, win->w(), bt);
-    CGContextDrawImage(fl_gc, rect, img);
-    Fl_X::q_end_image();
-    CFRelease(img);
-  }
-  else if(!to_quartz) {
-    Fl_RGB_Image *rgb = new Fl_RGB_Image(bitmap, win->w(), bt, bpp);
-    rgb->draw(x_offset, y_offset);
-    delete rgb;
-    delete[] bitmap;
-  }
-  if (win->label()) { // print the window title
-    const int skip = 65; // approx width of the zone of the 3 window control buttons
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-    if (fl_mac_os_version >= 100400 && to_quartz) { // use Cocoa string drawing with exact title bar font
-      // the exact font is LucidaGrande 13 pts (and HelveticaNeueDeskInterface-Regular with 10.10)
-      NSGraphicsContext *current = [NSGraphicsContext currentContext];
-      [NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:fl_gc flipped:YES]];//10.4
-      NSDictionary *attr = [NSDictionary dictionaryWithObject:[NSFont titleBarFontOfSize:0] 
-						       forKey:NSFontAttributeName];
-      NSSize size = [title sizeWithAttributes:attr];
-      int x = x_offset + win->w()/2 - size.width/2;
-      if (x < x_offset+skip) x = x_offset+skip;
-      NSRect r = NSMakeRect(x, y_offset+bt/2+4, win->w() - skip, bt);
-      [[NSGraphicsContext currentContext] setShouldAntialias:YES];
-      [title drawWithRect:r options:(NSStringDrawingOptions)0 attributes:attr]; // 10.4
-      [[NSGraphicsContext currentContext] setShouldAntialias:NO];
-      [NSGraphicsContext setCurrentContext:current];
-    }
-    else
-#endif
-    {
-      fl_font(FL_HELVETICA, 14);
-      fl_color(FL_BLACK);
-      int x = x_offset + win->w()/2 - fl_width(win->label())/2;
-      if (x < x_offset+skip) x = x_offset+skip;
-      fl_push_clip(x_offset, y_offset, win->w(), bt);
-      fl_draw(win->label(), x, y_offset+bt/2+4);
-      fl_pop_clip();
-    }
-  }
-  [title release];
-  this->print_widget(win, x_offset, y_offset + bt); // print the window inner part
-}
-
-void Fl_X::gl_start(NSOpenGLContext *ctxt) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  if (views_use_CA) {
-    Fl_X::q_release_context();
-    [(FLViewLayer*)[fl_window contentView] viewFrameDidChange];
-    [[fl_window contentView] layer].contentsScale = 1.;
-  }
-#endif
-  [ctxt update]; // supports window resizing
-}
-
-
-/* Returns the address of a Carbon function after dynamically loading the Carbon library if needed.
- Supports old Mac OS X versions that may use a couple of Carbon calls:
- GetKeys used by OS X 10.3 or before (in Fl::get_key())
- PMSessionPageSetupDialog and PMSessionPrintDialog used by 10.4 or before (in Fl_Printer::start_job())
- */
-void *Fl_X::get_carbon_function(const char *function_name) {
-  static void *carbon = dlopen("/System/Library/Frameworks/Carbon.framework/Carbon", RTLD_LAZY);
-  return (carbon ? dlsym(carbon, function_name) : NULL);
-}
-  
-/* Returns the version of the running Mac OS as an int such as 100802 for 10.8.2
- */
-int Fl_X::calc_mac_os_version() {
-  if (fl_mac_os_version) return fl_mac_os_version;
-  int M, m, b = 0;
-  NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10
-  if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) {
-    NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];
-    M = version.majorVersion;
-    m = version.minorVersion;
-    b = version.patchVersion;
-  }
-  else
-#endif
-  {
-    NSDictionary * sv = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"];
-    const char *s = [[sv objectForKey:@"ProductVersion"] UTF8String];
-    sscanf(s, "%d.%d.%d", &M, &m, &b);
-  }
-  [localPool release];
-  fl_mac_os_version = M*10000 + m*100 + b;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14
-  if (fl_mac_os_version >= 101400) views_use_CA = YES;
-#endif
-  //if (fl_mac_os_version >= 101300) views_use_CA = YES; // to get as with mojave
-  return fl_mac_os_version;
-}
-
-#endif // __APPLE__
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_compose.cxx
+++ /dev/null
@@ -1,152 +1,0 @@
-//
-// "$Id$"
-//
-// Character compose processing for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-\file Fl_compose.cxx
-Utility functions to support text input.
-*/
-
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-#ifndef FL_DOXYGEN
-int Fl::compose_state = 0;
-#ifdef __APPLE__
-int Fl_X::next_marked_length = 0;
-#endif
-#endif
-
-#if !defined(WIN32) && !defined(__APPLE__)
-extern XIC fl_xim_ic;
-#endif
-
-/** Any text editing widget should call this for each FL_KEYBOARD event.
- Use of this function is very simple.
- 
- <p>If <i>true</i> is returned, then it has modified the
- Fl::event_text() and Fl::event_length() to a set of <i>bytes</i> to
- insert (it may be of zero length!).  It will also set the "del"
- parameter to the number of <i>bytes</i> to the left of the cursor to
- delete, this is used to delete the results of the previous call to
- Fl::compose().
- 
- <p>If <i>false</i> is returned, the keys should be treated as function
- keys, and del is set to zero. You could insert the text anyways, if
- you don't know what else to do.
- 
- <p>On the Mac OS platform, text input can involve marked text, that is, 
- temporary text replaced by other text during the input process. This occurs,
- e.g., when using dead keys or when entering CJK characters.
- Text editing widgets should preferentially signal
- marked text, usually underlining it. Widgets can use
- <tt>int Fl::compose_state</tt> <i>after</i> having called Fl::compose(int&)
- to obtain the length in bytes of marked text that always finishes at the
- current insertion point. It's the widget's task to underline marked text.
- Widgets should also call <tt>void Fl::reset_marked_text()</tt> when processing FL_UNFOCUS
- events. Optionally, widgets can also call
- <tt>void Fl::insertion_point_location(int x, int y, int height)</tt> to indicate the window 
- coordinates of the bottom of the current insertion point and the line height. 
- This way, auxiliary windows that help choosing among alternative characters 
- appear just below the insertion point. If widgets don't do that, 
- auxiliary windows appear at the widget's bottom. The
- Fl_Input and Fl_Text_Editor widgets underline marked text.
- If none of this is done by a user-defined text editing widget,
- text input will work, but will not signal to the user what text is marked.
- Finally, text editing widgets should call <tt>set_flag(MAC_USE_ACCENTS_MENU);</tt>
- in their constructor if they want to use the feature introduced with Mac OS 10.7 "Lion"
- where pressing and holding a key on the keyboard opens an accented-character menu window.
- 
- <p>Though the current implementation returns immediately, future
- versions may take quite awhile, as they may pop up a window or do
- other user-interface things to allow characters to be selected.
- */
-int Fl::compose(int& del) {
-  int condition;
-#if defined(__APPLE__)
-  int has_text_key = Fl::compose_state || Fl::e_keysym <= '~' || Fl::e_keysym == FL_Iso_Key ||
-  (Fl::e_keysym >= FL_KP && Fl::e_keysym <= FL_KP_Last && Fl::e_keysym != FL_KP_Enter);
-  condition = Fl::e_state&(FL_META | FL_CTRL) || 
-      (Fl::e_keysym >= FL_Shift_L && Fl::e_keysym <= FL_Alt_R) || // called from flagsChanged
-      !has_text_key ;
-#else
-unsigned char ascii = (unsigned char)e_text[0];
-#if defined(WIN32)
-  condition = (e_state & (FL_ALT | FL_META)) && !(ascii & 128) ;
-#else
-  condition = (e_state & (FL_ALT | FL_META | FL_CTRL)) && !(ascii & 128) ;
-#endif // WIN32
-#endif // __APPLE__
-  if (condition) { del = 0; return 0;} // this stuff is to be treated as a function key
-  del = Fl::compose_state;
-#ifdef __APPLE__
-  Fl::compose_state = Fl_X::next_marked_length;
-#else
-  Fl::compose_state = 0;
-// Only insert non-control characters:
-  if ( (!Fl::compose_state) && ! (ascii & ~31 && ascii!=127)) { return 0; }
-#endif
-  return 1;
-}
-
-#ifdef __APPLE__
-static int insertion_point_x = 0;
-static int insertion_point_y = 0;
-static int insertion_point_height = 0;
-static bool insertion_point_location_is_valid = false;
-
-void Fl::reset_marked_text() {
-  Fl::compose_state = 0;
-  Fl_X::next_marked_length = 0;
-  insertion_point_location_is_valid = false;
-  }
-int Fl_X::insertion_point_location(int *px, int *py, int *pheight) 
-// return true if the current coordinates of the insertion point are available
-{
-  if ( ! insertion_point_location_is_valid ) return false;
-  *px = insertion_point_x;
-  *py = insertion_point_y;
-  *pheight = insertion_point_height;
-  return true;
-}
-void Fl::insertion_point_location(int x, int y, int height) {
-  insertion_point_location_is_valid = true;
-  insertion_point_x = x;
-  insertion_point_y = y;
-  insertion_point_height = height;
-}
-#endif // __APPLE__
-
-/**
- If the user moves the cursor, be sure to call Fl::compose_reset().
- The next call to Fl::compose() will start out in an initial state. In
- particular it will not set "del" to non-zero. This call is very fast
- so it is ok to call it many times and in many places.
- */
-void Fl::compose_reset()
-{
-  Fl::compose_state = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-  if (fl_xim_ic) XmbResetIC(fl_xim_ic);
-#endif
-}
-
-//
-// End of "$Id$"
-//
-
--- a/DoConfig/fltk/src/Fl_display.cxx
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// Display function for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Startup method to set what display to use.
-// Using setenv makes programs that are exec'd use the same display.
-
-#include <FL/Fl.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-/**
-    Sets the X display to use for all windows.  Actually this just sets
-    the environment variable $DISPLAY to the passed string, so this only
-    works before you show() the first window or otherwise open the display,
-    and does nothing useful under WIN32.
-*/
-void Fl::display(const char *d) {
-#if defined(__APPLE__) || defined(WIN32)
-  (void)d;
-#else
-  static char e[1024];
-  strcpy(e,"DISPLAY=");
-  strlcat(e,d,sizeof(e));
-  for (char *c = e+8; *c!=':'; c++) {
-    if (!*c) {
-      strlcat(e,":0.0",sizeof(e));
-      break;
-    }
-  }
-  putenv(e);
-#endif // __APPLE__
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_get_key.cxx
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$"
-//
-// Keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#  include "Fl_get_key_win32.cxx"
-#elif defined(__APPLE__)
-#  include "Fl_get_key_mac.cxx"
-#else
-
-// Return the current state of a key.  This is the X version.  I identify
-// keys (mostly) by the X keysym.  So this turns the keysym into a keycode
-// and looks it up in the X key bit vector, which Fl_x.cxx keeps track of.
-
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-
-extern char fl_key_vector[32]; // in Fl_x.cxx
-
-int Fl::event_key(int k) {
-  if (k > FL_Button && k <= FL_Button+8)
-    return Fl::event_state(8<<(k-FL_Button));
-  int i;
-#  ifdef __sgi
-  // get some missing PC keyboard keys:
-  if (k == FL_Meta_L) i = 147;
-  else if (k == FL_Meta_R) i = 148;
-  else if (k == FL_Menu) i = 149;
-  else
-#  endif
-    i = XKeysymToKeycode(fl_display, k);
-  if (i==0) return 0;
-  return fl_key_vector[i/8] & (1 << (i%8));
-}
-
-int Fl::get_key(int k) {
-  fl_open_display();
-  XQueryKeymap(fl_display, fl_key_vector);
-  return event_key(k);
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_get_key_mac.cxx
+++ /dev/null
@@ -1,279 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return the current state of a key.  Keys are named by fltk symbols,
-// which are actually X keysyms.  So this has to translate to macOS
-// symbols.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <config.h>
-
-// The list of Mac OS virtual keycodes appears with OS 10.5 in
-// ...../Carbon.framework/Frameworks/HIToolbox.framework/Headers/Events.h
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-#include <Carbon/Carbon.h>
-#else
-/*
- *    These constants are the virtual keycodes defined originally in
- *    Inside Mac Volume V, pg. V-191. They identify physical keys on a
- *    keyboard. Those constants with "ANSI" in the name are labeled
- *    according to the key position on an ANSI-standard US keyboard.
- *    For example, kVK_ANSI_A indicates the virtual keycode for the key
- *    with the letter 'A' in the US keyboard layout. Other keyboard
- *    layouts may have the 'A' key label on a different physical key;
- *    in this case, pressing 'A' will generate a different virtual
- *    keycode.
- */
-enum {
-  kVK_ANSI_A                    = 0x00,
-  kVK_ANSI_S                    = 0x01,
-  kVK_ANSI_D                    = 0x02,
-  kVK_ANSI_F                    = 0x03,
-  kVK_ANSI_H                    = 0x04,
-  kVK_ANSI_G                    = 0x05,
-  kVK_ANSI_Z                    = 0x06,
-  kVK_ANSI_X                    = 0x07,
-  kVK_ANSI_C                    = 0x08,
-  kVK_ANSI_V                    = 0x09,
-  kVK_ANSI_B                    = 0x0B,
-  kVK_ANSI_Q                    = 0x0C,
-  kVK_ANSI_W                    = 0x0D,
-  kVK_ANSI_E                    = 0x0E,
-  kVK_ANSI_R                    = 0x0F,
-  kVK_ANSI_Y                    = 0x10,
-  kVK_ANSI_T                    = 0x11,
-  kVK_ANSI_1                    = 0x12,
-  kVK_ANSI_2                    = 0x13,
-  kVK_ANSI_3                    = 0x14,
-  kVK_ANSI_4                    = 0x15,
-  kVK_ANSI_6                    = 0x16,
-  kVK_ANSI_5                    = 0x17,
-  kVK_ANSI_Equal                = 0x18,
-  kVK_ANSI_9                    = 0x19,
-  kVK_ANSI_7                    = 0x1A,
-  kVK_ANSI_Minus                = 0x1B,
-  kVK_ANSI_8                    = 0x1C,
-  kVK_ANSI_0                    = 0x1D,
-  kVK_ANSI_RightBracket         = 0x1E,
-  kVK_ANSI_O                    = 0x1F,
-  kVK_ANSI_U                    = 0x20,
-  kVK_ANSI_LeftBracket          = 0x21,
-  kVK_ANSI_I                    = 0x22,
-  kVK_ANSI_P                    = 0x23,
-  kVK_ANSI_L                    = 0x25,
-  kVK_ANSI_J                    = 0x26,
-  kVK_ANSI_Quote                = 0x27,
-  kVK_ANSI_K                    = 0x28,
-  kVK_ANSI_Semicolon            = 0x29,
-  kVK_ANSI_Backslash            = 0x2A,
-  kVK_ANSI_Comma                = 0x2B,
-  kVK_ANSI_Slash                = 0x2C,
-  kVK_ANSI_N                    = 0x2D,
-  kVK_ANSI_M                    = 0x2E,
-  kVK_ANSI_Period               = 0x2F,
-  kVK_ANSI_Grave                = 0x32,
-  kVK_ANSI_KeypadDecimal        = 0x41,
-  kVK_ANSI_KeypadMultiply       = 0x43,
-  kVK_ANSI_KeypadPlus           = 0x45,
-  kVK_ANSI_KeypadClear          = 0x47,
-  kVK_ANSI_KeypadDivide         = 0x4B,
-  kVK_ANSI_KeypadEnter          = 0x4C,
-  kVK_ANSI_KeypadMinus          = 0x4E,
-  kVK_ANSI_KeypadEquals         = 0x51,
-  kVK_ANSI_Keypad0              = 0x52,
-  kVK_ANSI_Keypad1              = 0x53,
-  kVK_ANSI_Keypad2              = 0x54,
-  kVK_ANSI_Keypad3              = 0x55,
-  kVK_ANSI_Keypad4              = 0x56,
-  kVK_ANSI_Keypad5              = 0x57,
-  kVK_ANSI_Keypad6              = 0x58,
-  kVK_ANSI_Keypad7              = 0x59,
-  kVK_ANSI_Keypad8              = 0x5B,
-  kVK_ANSI_Keypad9              = 0x5C
-};
-
-/* keycodes for keys that are independent of keyboard layout*/
-enum {
-  kVK_Return                    = 0x24,
-  kVK_Tab                       = 0x30,
-  kVK_Space                     = 0x31,
-  kVK_Delete                    = 0x33,
-  kVK_Escape                    = 0x35,
-  kVK_Command                   = 0x37,
-  kVK_Shift                     = 0x38,
-  kVK_CapsLock                  = 0x39,
-  kVK_Option                    = 0x3A,
-  kVK_Control                   = 0x3B,
-  kVK_RightShift                = 0x3C,
-  kVK_RightOption               = 0x3D,
-  kVK_RightControl              = 0x3E,
-  kVK_Function                  = 0x3F,
-  kVK_F17                       = 0x40,
-  kVK_VolumeUp                  = 0x48,
-  kVK_VolumeDown                = 0x49,
-  kVK_Mute                      = 0x4A,
-  kVK_F18                       = 0x4F,
-  kVK_F19                       = 0x50,
-  kVK_F20                       = 0x5A,
-  kVK_F5                        = 0x60,
-  kVK_F6                        = 0x61,
-  kVK_F7                        = 0x62,
-  kVK_F3                        = 0x63,
-  kVK_F8                        = 0x64,
-  kVK_F9                        = 0x65,
-  kVK_F11                       = 0x67,
-  kVK_F13                       = 0x69,
-  kVK_F16                       = 0x6A,
-  kVK_F14                       = 0x6B,
-  kVK_F10                       = 0x6D,
-  kVK_F12                       = 0x6F,
-  kVK_F15                       = 0x71,
-  kVK_Help                      = 0x72,
-  kVK_Home                      = 0x73,
-  kVK_PageUp                    = 0x74,
-  kVK_ForwardDelete             = 0x75,
-  kVK_F4                        = 0x76,
-  kVK_End                       = 0x77,
-  kVK_F2                        = 0x78,
-  kVK_PageDown                  = 0x79,
-  kVK_F1                        = 0x7A,
-  kVK_LeftArrow                 = 0x7B,
-  kVK_RightArrow                = 0x7C,
-  kVK_DownArrow                 = 0x7D,
-  kVK_UpArrow                   = 0x7E
-};
-
-/* ISO keyboards only*/
-enum {
-  kVK_ISO_Section               = 0x0A
-};
-
-/* JIS keyboards only*/
-enum {
-  kVK_JIS_Yen                   = 0x5D,
-  kVK_JIS_Underscore            = 0x5E,
-  kVK_JIS_KeypadComma           = 0x5F,
-  kVK_JIS_Eisu                  = 0x66,
-  kVK_JIS_Kana                  = 0x68
-};
-
-#endif
-
-// convert an FLTK (X) keysym to a MacOS symbol:
-// This table is in numeric order by FLTK symbol order for binary search.
-static const struct {unsigned short vk, fltk;} vktab[] = {
-  { kVK_Space, ' ' }, { kVK_ANSI_Quote, '\'' }, { kVK_ANSI_Comma, ',' }, { kVK_ANSI_Minus, '-' }, { kVK_ANSI_Period, '.' }, { kVK_ANSI_Slash, '/' }, 
-  { kVK_ANSI_0, '0' }, { kVK_ANSI_1, '1' }, { kVK_ANSI_2, '2' }, { kVK_ANSI_3, '3' }, 
-  { kVK_ANSI_4, '4' }, { kVK_ANSI_5, '5' }, { kVK_ANSI_6, '6' }, { kVK_ANSI_7, '7' }, 
-  { kVK_ANSI_8, '8' }, { kVK_ANSI_9, '9' }, { kVK_ANSI_Semicolon, ';' }, { kVK_ANSI_Equal, '=' },
-  { kVK_ANSI_A, 'A' }, { kVK_ANSI_B, 'B' }, { kVK_ANSI_C, 'C' }, { kVK_ANSI_D, 'D' }, 
-  { kVK_ANSI_E, 'E' }, { kVK_ANSI_F, 'F' }, { kVK_ANSI_G, 'G' }, { kVK_ANSI_H, 'H' }, 
-  { kVK_ANSI_I, 'I' }, { kVK_ANSI_J, 'J' }, { kVK_ANSI_K, 'K' }, { kVK_ANSI_L, 'L' }, 
-  { kVK_ANSI_M, 'M' }, { kVK_ANSI_N, 'N' }, { kVK_ANSI_O, 'O' }, { kVK_ANSI_P, 'P' }, 
-  { kVK_ANSI_Q, 'Q' }, { kVK_ANSI_R, 'R' }, { kVK_ANSI_S, 'S' }, { kVK_ANSI_T, 'T' }, 
-  { kVK_ANSI_U, 'U' }, { kVK_ANSI_V, 'V' }, { kVK_ANSI_W, 'W' }, { kVK_ANSI_X, 'X' }, 
-  { kVK_ANSI_Y, 'Y' }, { kVK_ANSI_Z, 'Z' }, 
-  { kVK_ANSI_LeftBracket, '[' }, { kVK_ANSI_Backslash, '\\' }, { kVK_ANSI_RightBracket, ']' }, { kVK_ANSI_Grave, '`' },  
-  { kVK_VolumeDown, FL_Volume_Down}, { kVK_Mute, FL_Volume_Mute}, { kVK_VolumeUp, FL_Volume_Up},
-  { kVK_Delete, FL_BackSpace }, { kVK_Tab, FL_Tab }, { kVK_ISO_Section, FL_Iso_Key }, { kVK_Return, FL_Enter }, /*{ 0x7F, FL_Pause },
-  { 0x7F, FL_Scroll_Lock },*/ { kVK_Escape, FL_Escape }, 
-  { kVK_JIS_Kana, FL_Kana}, { kVK_JIS_Eisu, FL_Eisu}, { kVK_JIS_Yen, FL_Yen}, { kVK_JIS_Underscore, FL_JIS_Underscore},
-  { kVK_Home, FL_Home }, { kVK_LeftArrow, FL_Left },
-  { kVK_UpArrow, FL_Up }, { kVK_RightArrow, FL_Right }, { kVK_DownArrow, FL_Down }, { kVK_PageUp, FL_Page_Up },
-  { kVK_PageDown, FL_Page_Down },  { kVK_End, FL_End }, /*{ 0x7F, FL_Print }, { 0x7F, FL_Insert },*/
-  { 0x6e, FL_Menu }, { kVK_Help, FL_Help }, { kVK_ANSI_KeypadClear, FL_Num_Lock },
-  { kVK_ANSI_KeypadEnter, FL_KP_Enter }, { kVK_ANSI_KeypadMultiply, FL_KP+'*' }, { kVK_ANSI_KeypadPlus, FL_KP+'+'}, 
-  { kVK_JIS_KeypadComma, FL_KP+',' },
-  { kVK_ANSI_KeypadMinus, FL_KP+'-' }, { kVK_ANSI_KeypadDecimal, FL_KP+'.' }, { kVK_ANSI_KeypadDivide, FL_KP+'/' }, 
-  { kVK_ANSI_Keypad0, FL_KP+'0' }, { kVK_ANSI_Keypad1, FL_KP+'1' }, { kVK_ANSI_Keypad2, FL_KP+'2' }, { kVK_ANSI_Keypad3, FL_KP+'3' }, 
-  { kVK_ANSI_Keypad4, FL_KP+'4' }, { kVK_ANSI_Keypad5, FL_KP+'5' }, { kVK_ANSI_Keypad6, FL_KP+'6' }, { kVK_ANSI_Keypad7, FL_KP+'7' }, 
-  { kVK_ANSI_Keypad8, FL_KP+'8' }, { kVK_ANSI_Keypad9, FL_KP+'9' }, { kVK_ANSI_KeypadEquals, FL_KP+'=' }, 
-  { kVK_F1, FL_F+1 }, { kVK_F2, FL_F+2 }, { kVK_F3, FL_F+3 }, { kVK_F4, FL_F+4 }, 
-  { kVK_F5, FL_F+5 }, { kVK_F6, FL_F+6 }, { kVK_F7, FL_F+7 }, { kVK_F8, FL_F+8 }, 
-  { kVK_F9, FL_F+9 }, { kVK_F10, FL_F+10 }, { kVK_F11, FL_F+11 }, { kVK_F12, FL_F+12 }, 
-  { kVK_F13, FL_F+13 }, { kVK_F14, FL_F+14 }, { kVK_F15, FL_F+15 }, { kVK_F16, FL_F+16 }, 
-  { kVK_F17, FL_F+17 }, { kVK_F18, FL_F+18 }, { kVK_F19, FL_F+19 }, { kVK_F20, FL_F+20 }, 
-  { kVK_Shift, FL_Shift_L }, { kVK_RightShift, FL_Shift_R }, { kVK_Control, FL_Control_L }, { kVK_RightControl, FL_Control_R }, 
-  { kVK_CapsLock, FL_Caps_Lock }, { kVK_Command, FL_Meta_L }, { 0x36, FL_Meta_R },
-  { kVK_Option, FL_Alt_L }, { kVK_RightOption, FL_Alt_R }, { kVK_ForwardDelete, FL_Delete }
-};
-
-// Computes the macKeyLookUp table that transforms a Mac OS virtual keycode into an FLTK keysym
-unsigned short *fl_compute_macKeyLookUp()
-{
-  static unsigned short macKeyLookUp[128];
-  memset(macKeyLookUp, 0, sizeof(macKeyLookUp));
-  for (unsigned i = 0; i < sizeof(vktab)/sizeof(*vktab); i++) {
-    macKeyLookUp[vktab[i].vk] = vktab[i].fltk;
-  }
-  return macKeyLookUp;
-}
-
-static int fltk2mac(int fltk) {
-  int a = 0;
-  int b = sizeof(vktab)/sizeof(*vktab);
-  while (a < b) {
-    int c = (a+b)/2;
-    if (vktab[c].fltk == fltk) return vktab[c].vk;
-    if (vktab[c].fltk < fltk) a = c+1; else b = c;
-  }
-  return vktab[a].vk;
-}
-
-//: returns true, if that key was pressed during the last event
-int Fl::event_key(int k) {
-  return get_key(k);
-}
-
-//: returns true, if that key is pressed right now
-int Fl::get_key(int k) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4
-  if (&CGEventSourceKeyState != NULL) {
-    return (int)CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState, fltk2mac(k) );
-    }
-  else 
-#endif
-  {
-  typedef UInt32 fl_KeyMap[4];
-  fl_KeyMap foo;
-  // use the GetKeys Carbon function
-  typedef void (*keymap_f)(fl_KeyMap);
-  static keymap_f f = NULL;
-  if (!f) f = ( keymap_f )Fl_X::get_carbon_function("GetKeys");
-  (*f)(foo);
-#ifdef MAC_TEST_FOR_KEYCODES
- static int cnt = 0;
- if (cnt++>1024) {
-  cnt = 0;
-  printf("%08x %08x %08x %08x\n", (ulong*)(foo)[3], (ulong*)(foo)[2], (ulong*)(foo)[1], (ulong*)(foo)[0]);
- }
-#endif
-  unsigned char *b = (unsigned char*)foo;
-  // KP_Enter can be at different locations for Powerbooks vs. desktop Macs
-  if (k==FL_KP_Enter) {
-    return (((b[0x34>>3]>>(0x34&7))&1)||((b[0x4c>>3]>>(0x4c&7))&1));
-  }
-  int i = fltk2mac(k);
-  return (b[i>>3]>>(i&7))&1;
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_get_key_win32.cxx
+++ /dev/null
@@ -1,130 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 keyboard state routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return the current state of a key.  Keys are named by fltk symbols,
-// which are actually X keysyms.  So this has to translate to MSWindows
-// VK_x symbols.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-// convert an Fltk (X) keysym to a MSWindows VK symbol:
-// See also the inverse converter in Fl_win32.cxx
-// This table is in numeric order by Fltk symbol order for binary search:
-
-static const struct {unsigned short vk, fltk;} vktab[] = {
-  {VK_SPACE,	' '},
-  {'1',		'!'},
-  {0xde,	'\"'},
-  {'3',		'#'},
-  {'4',		'$'},
-  {'5',		'%'},
-  {'7',		'&'},
-  {0xde,	'\''},
-  {'9',		'('},
-  {'0',		')'},
-  {'8',		'*'},
-  {0xbb,	'+'},
-  {0xbc,	','},
-  {0xbd,	'-'},
-  {0xbe,	'.'},
-  {0xbf,	'/'},
-  {0xba,	':'},
-  {0xba,	';'},
-  {0xbc,	'<'},
-  {0xbb,	'='},
-  {0xbe,	'>'},
-  {0xbf,	'?'},
-  {'2',		'@'},
-  {0xdb,	'['},
-  {0xdc,	'\\'},
-  {0xdd,	']'},
-  {'6',		'^'},
-  {0xbd,	'_'},
-  {0xc0,	'`'},
-  {0xdb,	'{'},
-  {0xdc,	'|'},
-  {0xdd,	'}'},
-  {0xc0,	'~'},
-  {VK_BACK,	FL_BackSpace},
-  {VK_TAB,	FL_Tab},
-  {VK_CLEAR,	0xff0b/*XK_Clear*/},
-  {0xe2 /*VK_OEM_102*/,	FL_Iso_Key},
-  {VK_RETURN,	FL_Enter},
-  {VK_PAUSE,	FL_Pause},
-  {VK_SCROLL,	FL_Scroll_Lock},
-  {VK_ESCAPE,	FL_Escape},
-  {VK_HOME,	FL_Home},
-  {VK_LEFT,	FL_Left},
-  {VK_UP,	FL_Up},
-  {VK_RIGHT,	FL_Right},
-  {VK_DOWN,	FL_Down},
-  {VK_PRIOR,	FL_Page_Up},
-  {VK_NEXT,	FL_Page_Down},
-  {VK_END,	FL_End},
-  {VK_SNAPSHOT,	FL_Print},
-  {VK_INSERT,	FL_Insert},
-  {VK_APPS,	FL_Menu},
-  {VK_NUMLOCK,	FL_Num_Lock},
-//{VK_???,	FL_KP_Enter},
-  {VK_MULTIPLY,	FL_KP+'*'},
-  {VK_ADD,	FL_KP+'+'},
-  {VK_SUBTRACT,	FL_KP+'-'},
-  {VK_DECIMAL,	FL_KP+'.'},
-  {VK_DIVIDE,	FL_KP+'/'},
-  {VK_LSHIFT,	FL_Shift_L},
-  {VK_RSHIFT,	FL_Shift_R},
-  {VK_LCONTROL,	FL_Control_L},
-  {VK_RCONTROL,	FL_Control_R},
-  {VK_CAPITAL,	FL_Caps_Lock},
-  {VK_LWIN,	FL_Meta_L},
-  {VK_RWIN,	FL_Meta_R},
-  {VK_LMENU,	FL_Alt_L},
-  {VK_RMENU,	FL_Alt_R},
-  {VK_DELETE,	FL_Delete}
-};
-
-static int fltk2ms(int fltk) {
-  if (fltk >= '0' && fltk <= '9') return fltk;
-  if (fltk >= 'A' && fltk <= 'Z') return fltk;
-  if (fltk >= 'a' && fltk <= 'z') return fltk-('a'-'A');
-  if (fltk > FL_F && fltk <= FL_F+16) return fltk-(FL_F-(VK_F1-1));
-  if (fltk >= FL_KP+'0' && fltk<=FL_KP+'9') return fltk-(FL_KP+'0'-VK_NUMPAD0);
-  int a = 0;
-  int b = sizeof(vktab)/sizeof(*vktab);
-  while (a < b) {
-    int c = (a+b)/2;
-    if (vktab[c].fltk == fltk) return vktab[c].vk;
-    if (vktab[c].fltk < fltk) a = c+1; else b = c;
-  }
-  return 0;
-}
-
-int Fl::event_key(int k) {
-  return GetKeyState(fltk2ms(k))&~1;
-}
-
-int Fl::get_key(int k) {
-  uchar foo[256];
-  GetKeyboardState(foo);
-  return foo[fltk2ms(k)]&~1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_get_system_colors.cxx
+++ /dev/null
@@ -1,462 +1,0 @@
-//
-// "$Id$"
-//
-// System color support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/math.h>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tiled_Image.H>
-#include "tile.xpm"
-
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#  define putenv _putenv
-#endif // WIN32 && !__CYGWIN__
-
-static char	fl_bg_set = 0;
-static char	fl_bg2_set = 0;
-static char	fl_fg_set = 0;
-
-/**
-    Changes fl_color(FL_BACKGROUND_COLOR) to the given color, 
-    and changes the gray ramp from 32 to 56 to black to white.  These are 
-    the colors used as backgrounds by almost all widgets and used to draw 
-    the edges of all the boxtypes.
-*/
-void Fl::background(uchar r, uchar g, uchar b) {
-  fl_bg_set = 1;
-
-  // replace the gray ramp so that FL_GRAY is this color
-  if (!r) r = 1; else if (r==255) r = 254;
-  double powr = log(r/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!g) g = 1; else if (g==255) g = 254;
-  double powg = log(g/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!b) b = 1; else if (b==255) b = 254;
-  double powb = log(b/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  for (int i = 0; i < FL_NUM_GRAY; i++) {
-    double gray = i/(FL_NUM_GRAY-1.0);
-    Fl::set_color(fl_gray_ramp(i),
-		  uchar(pow(gray,powr)*255+.5),
-		  uchar(pow(gray,powg)*255+.5),
-		  uchar(pow(gray,powb)*255+.5));
-  }
-}
-/** Changes fl_color(FL_FOREGROUND_COLOR). */
-void Fl::foreground(uchar r, uchar g, uchar b) {
-  fl_fg_set = 1;
-
-  Fl::set_color(FL_FOREGROUND_COLOR,r,g,b);
-}
-
-/**
-    Changes the alternative background color. This color is used as a 
-    background by Fl_Input and other text widgets.
-    <P>This call may change fl_color(FL_FOREGROUND_COLOR) if it 
-    does not provide sufficient contrast to FL_BACKGROUND2_COLOR.
-*/
-void Fl::background2(uchar r, uchar g, uchar b) {
-  fl_bg2_set = 1;
-
-  Fl::set_color(FL_BACKGROUND2_COLOR,r,g,b);
-  Fl::set_color(FL_FOREGROUND_COLOR,
-                get_color(fl_contrast(FL_FOREGROUND_COLOR,FL_BACKGROUND2_COLOR)));
-}
-
-// these are set by Fl::args() and override any system colors:
-const char *fl_fg = NULL;
-const char *fl_bg = NULL;
-const char *fl_bg2 = NULL;
-
-static void set_selection_color(uchar r, uchar g, uchar b) {
-  Fl::set_color(FL_SELECTION_COLOR,r,g,b);
-}
-
-#if defined(WIN32) || defined(__APPLE__)
-
-#  include <stdio.h>
-// simulation of XParseColor:
-int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b) {
-  if (*p == '#') p++;
-  size_t n = strlen(p);
-  size_t m = n/3;
-  const char *pattern = 0;
-  switch(m) {
-  case 1: pattern = "%1x%1x%1x"; break;
-  case 2: pattern = "%2x%2x%2x"; break;
-  case 3: pattern = "%3x%3x%3x"; break;
-  case 4: pattern = "%4x%4x%4x"; break;
-  default: return 0;
-  }
-  int R,G,B; if (sscanf(p,pattern,&R,&G,&B) != 3) return 0;
-  switch(m) {
-  case 1: R *= 0x11; G *= 0x11; B *= 0x11; break;
-  case 3: R >>= 4; G >>= 4; B >>= 4; break;
-  case 4: R >>= 8; G >>= 8; B >>= 8; break;
-  }
-  r = (uchar)R; g = (uchar)G; b = (uchar)B;
-  return 1;
-}
-#else
-// Wrapper around XParseColor...
-int fl_parse_color(const char* p, uchar& r, uchar& g, uchar& b) {
-  XColor x;
-  if (!fl_display) fl_open_display();
-  if (XParseColor(fl_display, fl_colormap, p, &x)) {
-    r = (uchar)(x.red>>8);
-    g = (uchar)(x.green>>8);
-    b = (uchar)(x.blue>>8);
-    return 1;
-  } else return 0;
-}
-#endif // WIN32 || __APPLE__
-
-
-/** \fn Fl::get_system_colors()
-    Read the user preference colors from the system and use them to call
-    Fl::foreground(), Fl::background(), and Fl::background2().
-
-    This is done by Fl_Window::show(argc,argv) before applying
-    the -fg and -bg switches.
-    
-    On X this reads some common values from the Xdefaults database.
-    KDE users can set these values by running the "krdb" program, and
-    newer versions of KDE set this automatically if you check the "apply
-    style to other X programs" switch in their control panel.
-*/
-
-#if defined(WIN32)				// --- WIN32 ---
-
-static void
-getsyscolor(int what, const char* arg, void (*func)(uchar,uchar,uchar))
-{
-  if (arg) {
-    uchar r,g,b;
-    if (!fl_parse_color(arg, r,g,b))
-      Fl::error("Unknown color: %s", arg);
-    else
-      func(r,g,b);
-  } else {
-    DWORD x = GetSysColor(what);
-    func(uchar(x&255), uchar(x>>8), uchar(x>>16));
-  }
-}
-
-void Fl::get_system_colors() {
-  if (!fl_bg2_set) getsyscolor(COLOR_WINDOW,	fl_bg2,Fl::background2);
-  if (!fl_fg_set) getsyscolor(COLOR_WINDOWTEXT,	fl_fg, Fl::foreground);
-  if (!fl_bg_set) getsyscolor(COLOR_BTNFACE,	fl_bg, Fl::background);
-  getsyscolor(COLOR_HIGHLIGHT,	0,     set_selection_color);
-}
-
-#elif defined(__APPLE__)			// --- APPLE ---
-
-// MacOS X currently supports two color schemes - Blue and Graphite.
-// Since we aren't emulating the Aqua interface (even if Apple would
-// let us), we use some defaults that are similar to both.  The
-// Fl::scheme("plastic") color/box scheme provides a usable Aqua-like
-// look-n-feel...
-void Fl::get_system_colors()
-{
-  fl_open_display();
-
-  if (!fl_bg2_set) background2(0xff, 0xff, 0xff);
-  if (!fl_fg_set) foreground(0, 0, 0);
-  if (!fl_bg_set) background(0xd8, 0xd8, 0xd8);
-  
-#if 0 
-  // this would be the correct code, but it does not run on all versions
-  // of OS X. Also, setting a bright selection color would require 
-  // some updates in Fl_Adjuster and Fl_Help_Browser
-  OSStatus err;
-  RGBColor c;
-  err = GetThemeBrushAsColor(kThemeBrushPrimaryHighlightColor, 24, true, &c);
-  if (err)
-    set_selection_color(0x00, 0x00, 0x80);
-  else
-    set_selection_color(c.red, c.green, c.blue);
-#else
-  set_selection_color(0x00, 0x00, 0x80);
-#endif
-}
-
-#else						// --- X11 ---
-
-// Read colors that KDE writes to the xrdb database.
-
-// XGetDefault does not do the expected thing: it does not like
-// periods in either word. Therefore it cannot match class.Text.background.
-// However *.Text.background is matched by pretending the program is "Text".
-// But this will also match *.background if there is no *.Text.background
-// entry, requiring users to put in both (unless they want the text fields
-// the same color as the windows).
-
-static void
-getsyscolor(const char *key1, const char* key2, const char *arg, const char *defarg, void (*func)(uchar,uchar,uchar))
-{
-  if (!arg) {
-    arg = XGetDefault(fl_display, key1, key2);
-    if (!arg) arg = defarg;
-  }
-  XColor x;
-  if (!XParseColor(fl_display, fl_colormap, arg, &x))
-    Fl::error("Unknown color: %s", arg);
-  else
-    func(x.red>>8, x.green>>8, x.blue>>8);
-}
-
-void Fl::get_system_colors()
-{
-  fl_open_display();
-  const char* key1 = 0;
-  if (Fl::first_window()) key1 = Fl::first_window()->xclass();
-  if (!key1) key1 = "fltk";
-  if (!fl_bg2_set) getsyscolor("Text","background",	fl_bg2,	"#ffffff", Fl::background2);
-  if (!fl_fg_set) getsyscolor(key1,  "foreground",	fl_fg,	"#000000", Fl::foreground);
-  if (!fl_bg_set) getsyscolor(key1,  "background",	fl_bg,	"#c0c0c0", Fl::background);
-  getsyscolor("Text", "selectBackground", 0, "#000080", set_selection_color);
-}
-
-#endif					// --- WIN32 | APPLE | X11 ---
-
-
-//// Simple implementation of 2.0 Fl::scheme() interface...
-#define D1 BORDER_WIDTH
-#define D2 (BORDER_WIDTH+BORDER_WIDTH)
-
-extern void	fl_up_box(int, int, int, int, Fl_Color);
-extern void	fl_down_box(int, int, int, int, Fl_Color);
-extern void	fl_thin_up_box(int, int, int, int, Fl_Color);
-extern void	fl_thin_down_box(int, int, int, int, Fl_Color);
-extern void	fl_round_up_box(int, int, int, int, Fl_Color);
-extern void	fl_round_down_box(int, int, int, int, Fl_Color);
-
-extern void	fl_up_frame(int, int, int, int, Fl_Color);
-extern void	fl_down_frame(int, int, int, int, Fl_Color);
-extern void	fl_thin_up_frame(int, int, int, int, Fl_Color);
-extern void	fl_thin_down_frame(int, int, int, int, Fl_Color);
-
-#ifndef FL_DOXYGEN
-const char	*Fl::scheme_ = (const char *)0;	    // current scheme 
-Fl_Image	*Fl::scheme_bg_ = (Fl_Image *)0;    // current background image for the scheme
-#endif
-
-static Fl_Pixmap	tile(tile_xpm);
-
-/**
-    Sets the current widget scheme. NULL will use the scheme defined
-    in the FLTK_SCHEME environment variable or the scheme resource
-    under X11. Otherwise, any of the following schemes can be used:
-
-        - "none" - This is the default look-n-feel which resembles old
-                   Windows (95/98/Me/NT/2000) and old GTK/KDE
-
-        - "base" - This is an alias for "none"
-
-        - "plastic" - This scheme is inspired by the Aqua user interface
-                      on Mac OS X
-
-        - "gtk+" - This scheme is inspired by the Red Hat Bluecurve theme
-
-        - "gleam" - This scheme is inspired by the Clearlooks Glossy scheme.
-                    (Colin Jones and Edmanuel Torres).
-
-    Uppercase scheme names are equivalent, but the stored scheme name will
-    always be lowercase and Fl::scheme() will return this lowercase name.
-
-    If the resulting scheme name is not defined, the default scheme will
-    be used and Fl::scheme() will return NULL.
-
-    \see Fl::is_scheme()
-*/
-int Fl::scheme(const char *s) {
-  if (!s) {
-    if ((s = getenv("FLTK_SCHEME")) == NULL) {
-#if !defined(WIN32) && !defined(__APPLE__)
-      const char* key = 0;
-      if (Fl::first_window()) key = Fl::first_window()->xclass();
-      if (!key) key = "fltk";
-      fl_open_display();
-      s = XGetDefault(fl_display, key, "scheme");
-#endif // !WIN32 && !__APPLE__
-    }
-  }
-
-  if (s) {
-    if (!fl_ascii_strcasecmp(s, "none") || !fl_ascii_strcasecmp(s, "base") || !*s) s = 0;
-    else if (!fl_ascii_strcasecmp(s, "gtk+")) s = strdup("gtk+");
-    else if (!fl_ascii_strcasecmp(s, "plastic")) s = strdup("plastic");
-    else if (!fl_ascii_strcasecmp(s, "gleam")) s = strdup("gleam");
-    else s = 0;
-  }
-  if (scheme_) free((void*)scheme_);
-  scheme_ = s;
-
-  // Save the new scheme in the FLTK_SCHEME env var so that child processes
-  // inherit it...
-  static char e[1024];
-  strcpy(e,"FLTK_SCHEME=");
-  if (s) strlcat(e,s,sizeof(e));
-  putenv(e);
-
-  // Load the scheme...
-  return reload_scheme();
-}
-
-int Fl::reload_scheme() {
-  Fl_Window *win;
-
-  if (scheme_ && !fl_ascii_strcasecmp(scheme_, "plastic")) {
-    // Update the tile image to match the background color...
-    uchar r, g, b;
-    int nr, ng, nb;
-    int i;
-//    static uchar levels[3] = { 0xff, 0xef, 0xe8 };
-    // OSX 10.3 and higher use a background with less contrast...
-    static uchar levels[3] = { 0xff, 0xf8, 0xf4 };
-
-    get_color(FL_GRAY, r, g, b);
-
-//    printf("FL_GRAY = 0x%02x 0x%02x 0x%02x\n", r, g, b);
-
-    for (i = 0; i < 3; i ++) {
-      nr = levels[i] * r / 0xe8;
-      if (nr > 255) nr = 255;
-
-      ng = levels[i] * g / 0xe8;
-      if (ng > 255) ng = 255;
-
-      nb = levels[i] * b / 0xe8;
-      if (nb > 255) nb = 255;
-
-      sprintf(tile_cmap[i], "%c c #%02x%02x%02x", "Oo."[i], nr, ng, nb);
-//      puts(tile_cmap[i]);
-    }
-
-    tile.uncache();
-
-    if (!scheme_bg_) scheme_bg_ = new Fl_Tiled_Image(&tile, 0, 0);
-
-    // Load plastic buttons, etc...
-    set_boxtype(FL_UP_FRAME,        FL_PLASTIC_UP_FRAME);
-    set_boxtype(FL_DOWN_FRAME,      FL_PLASTIC_DOWN_FRAME);
-    set_boxtype(FL_THIN_UP_FRAME,   FL_PLASTIC_UP_FRAME);
-    set_boxtype(FL_THIN_DOWN_FRAME, FL_PLASTIC_DOWN_FRAME);
-
-    set_boxtype(FL_UP_BOX,          FL_PLASTIC_UP_BOX);
-    set_boxtype(FL_DOWN_BOX,        FL_PLASTIC_DOWN_BOX);
-    set_boxtype(FL_THIN_UP_BOX,     FL_PLASTIC_THIN_UP_BOX);
-    set_boxtype(FL_THIN_DOWN_BOX,   FL_PLASTIC_THIN_DOWN_BOX);
-    set_boxtype(_FL_ROUND_UP_BOX,   FL_PLASTIC_ROUND_UP_BOX);
-    set_boxtype(_FL_ROUND_DOWN_BOX, FL_PLASTIC_ROUND_DOWN_BOX);
-
-    // Use standard size scrollbars...
-    Fl::scrollbar_size(16);
-  } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "gtk+")) {
-    // Use a GTK+ inspired look-n-feel...
-    if (scheme_bg_) {
-      delete scheme_bg_;
-      scheme_bg_ = (Fl_Image *)0;
-    }
-
-    set_boxtype(FL_UP_FRAME,        FL_GTK_UP_FRAME);
-    set_boxtype(FL_DOWN_FRAME,      FL_GTK_DOWN_FRAME);
-    set_boxtype(FL_THIN_UP_FRAME,   FL_GTK_THIN_UP_FRAME);
-    set_boxtype(FL_THIN_DOWN_FRAME, FL_GTK_THIN_DOWN_FRAME);
-
-    set_boxtype(FL_UP_BOX,          FL_GTK_UP_BOX);
-    set_boxtype(FL_DOWN_BOX,        FL_GTK_DOWN_BOX);
-    set_boxtype(FL_THIN_UP_BOX,     FL_GTK_THIN_UP_BOX);
-    set_boxtype(FL_THIN_DOWN_BOX,   FL_GTK_THIN_DOWN_BOX);
-    set_boxtype(_FL_ROUND_UP_BOX,   FL_GTK_ROUND_UP_BOX);
-    set_boxtype(_FL_ROUND_DOWN_BOX, FL_GTK_ROUND_DOWN_BOX);
-
-    // Use slightly thinner scrollbars...
-    Fl::scrollbar_size(15);
-  } else if (scheme_ && !fl_ascii_strcasecmp(scheme_, "gleam")) {
-    // Use a GTK+ inspired look-n-feel...
-    if (scheme_bg_) {
-      delete scheme_bg_;
-      scheme_bg_ = (Fl_Image *)0;
-    }
-
-    set_boxtype(FL_UP_FRAME,        FL_GLEAM_UP_FRAME);
-    set_boxtype(FL_DOWN_FRAME,      FL_GLEAM_DOWN_FRAME);
-    set_boxtype(FL_THIN_UP_FRAME,   FL_GLEAM_UP_FRAME);
-    set_boxtype(FL_THIN_DOWN_FRAME, FL_GLEAM_DOWN_FRAME);
-
-    set_boxtype(FL_UP_BOX,          FL_GLEAM_UP_BOX);
-    set_boxtype(FL_DOWN_BOX,        FL_GLEAM_DOWN_BOX);
-    set_boxtype(FL_THIN_UP_BOX,     FL_GLEAM_THIN_UP_BOX);
-    set_boxtype(FL_THIN_DOWN_BOX,   FL_GLEAM_THIN_DOWN_BOX);
-    set_boxtype(_FL_ROUND_UP_BOX,   FL_GLEAM_ROUND_UP_BOX);
-    set_boxtype(_FL_ROUND_DOWN_BOX, FL_GLEAM_ROUND_DOWN_BOX);
-
-    // Use slightly thinner scrollbars...
-    Fl::scrollbar_size(15);
-  } else {
-    // Use the standard FLTK look-n-feel...
-    if (scheme_bg_) {
-      delete scheme_bg_;
-      scheme_bg_ = (Fl_Image *)0;
-    }
-
-    set_boxtype(FL_UP_FRAME,        fl_up_frame, D1, D1, D2, D2);
-    set_boxtype(FL_DOWN_FRAME,      fl_down_frame, D1, D1, D2, D2);
-    set_boxtype(FL_THIN_UP_FRAME,   fl_thin_up_frame, 1, 1, 2, 2);
-    set_boxtype(FL_THIN_DOWN_FRAME, fl_thin_down_frame, 1, 1, 2, 2);
-
-    set_boxtype(FL_UP_BOX,          fl_up_box, D1, D1, D2, D2);
-    set_boxtype(FL_DOWN_BOX,        fl_down_box, D1, D1, D2, D2);
-    set_boxtype(FL_THIN_UP_BOX,     fl_thin_up_box, 1, 1, 2, 2);
-    set_boxtype(FL_THIN_DOWN_BOX,   fl_thin_down_box, 1, 1, 2, 2);
-    set_boxtype(_FL_ROUND_UP_BOX,   fl_round_up_box, 3, 3, 6, 6);
-    set_boxtype(_FL_ROUND_DOWN_BOX, fl_round_down_box, 3, 3, 6, 6);
-
-    // Use standard size scrollbars...
-    Fl::scrollbar_size(16);
-  }
-
-  // Set (or clear) the background tile for all windows...
-
-  // FIXME: This makes it impossible to assign a background image
-  // and/or a label to a window. IMHO we should be able to assign a
-  // background image to a window. Currently (as of FLTK 1.3.3) there
-  // is the workaround to use a group inside the window to achieve this.
-  // See also STR #3075.
-  // AlbrechtS, 01 Mar 2015
-
-  for (win = first_window(); win; win = next_window(win)) {
-    win->labeltype(scheme_bg_ ? FL_NORMAL_LABEL : FL_NO_LABEL);
-    win->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-    win->image(scheme_bg_);
-    win->redraw();
-  }
-
-  return 1;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_grab.cxx
+++ /dev/null
@@ -1,108 +1,0 @@
-//
-// "$Id$"
-//
-// Grab/release code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-////////////////////////////////////////////////////////////////
-// "Grab" is done while menu systems are up.  This has several effects:
-// Events are all sent to the "grab window", which does not even
-// have to be displayed (and in the case of Fl_Menu.cxx it isn't).
-// The system is also told to "grab" events and send them to this app.
-// This also modifies how Fl_Window::show() works, on X it turns on
-// override_redirect, it does similar things on WIN32.
-
-extern void fl_fix_focus(); // in Fl.cxx
-
-#ifdef WIN32
-// We have to keep track of whether we have captured the mouse, since
-// MSWindows shows little respect for this... Grep for fl_capture to
-// see where and how this is used.
-extern HWND fl_capture;
-#endif
-
-#ifdef __APPLE__
-extern void *fl_capture;
-#endif
-
-void Fl::grab(Fl_Window* win) {
-#ifdef USE_X11
-    Fl_Window *fullscreen_win = NULL;
-    for (Fl_Window *W = Fl::first_window(); W; W = Fl::next_window(W)) {
-      if (W->fullscreen_active()) {
-        fullscreen_win = W;
-        break;
-      }
-    }
-#endif
-  if (win) {
-    if (!grab_) {
-#ifdef WIN32
-      SetActiveWindow(fl_capture = fl_xid(first_window()));
-      SetCapture(fl_capture);
-#elif defined(__APPLE__)
-      fl_capture = Fl_X::i(first_window())->xid;
-      Fl_X::i(first_window())->set_key_window();
-#else
-      Window xid = fullscreen_win ? fl_xid(fullscreen_win) : fl_xid(first_window());
-      XGrabPointer(fl_display,
-		   xid,
-		   1,
-		   ButtonPressMask|ButtonReleaseMask|
-		   ButtonMotionMask|PointerMotionMask,
-		   GrabModeAsync,
-		   GrabModeAsync, 
-		   None,
-		   0,
-		   fl_event_time);
-      XGrabKeyboard(fl_display,
-		    xid,
-		    1,
-		    GrabModeAsync,
-		    GrabModeAsync, 
-		    fl_event_time);
-#endif
-    }
-    grab_ = win;
-  } else {
-    if (grab_) {
-#ifdef WIN32
-      fl_capture = 0;
-      ReleaseCapture();
-#elif defined(__APPLE__)
-      fl_capture = 0;
-#else
-      // We must keep the grab in the non-EWMH fullscreen case
-      if (!fullscreen_win || Fl_X::ewmh_supported()) {
-      XUngrabKeyboard(fl_display, fl_event_time);
-      }
-      XUngrabPointer(fl_display, fl_event_time);
-      // this flush is done in case the picked menu item goes into
-      // an infinite loop, so we don't leave the X server locked up:
-      XFlush(fl_display);
-#endif
-      grab_ = 0;
-      fl_fix_focus();
-    }
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_lock.cxx
+++ /dev/null
@@ -1,418 +1,0 @@
-//
-// "$Id$"
-//
-// Multi-threading support code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <config.h>
-
-#include <stdlib.h>
-
-/*
-   From Bill:
-
-   I would prefer that FLTK contain the minimal amount of extra
-   stuff for doing threads.  There are other portable thread
-   wrapper libraries out there and FLTK should not be providing
-   another.  This file is an attempt to make minimal additions
-   and make them self-contained in this source file.
-
-   From Mike:
-
-   Starting with 1.1.8, we now have a callback so that you can
-   process awake() messages as they come in.
-
-
-   The API:
-
-   Fl::lock() - recursive lock.  You must call this before the
-   first call to Fl::wait()/run() to initialize the thread
-   system. The lock is locked all the time except when
-   Fl::wait() is waiting for events.
-
-   Fl::unlock() - release the recursive lock.
-
-   Fl::awake(void*) - Causes Fl::wait() to return (with the lock
-   locked) even if there are no events ready.
-
-   Fl::awake(void (*cb)(void *), void*) - Call a function
-   in the main thread from within another thread of execution.
-
-   Fl::thread_message() - returns an argument sent to an
-   Fl::awake() call, or returns NULL if none.  WARNING: the
-   current implementation only has a one-entry queue and only
-   returns the most recent value!
-*/
-
-#ifndef FL_DOXYGEN
-Fl_Awake_Handler *Fl::awake_ring_;
-void **Fl::awake_data_;
-int Fl::awake_ring_size_;
-int Fl::awake_ring_head_;
-int Fl::awake_ring_tail_;
-#endif
-
-static const int AWAKE_RING_SIZE = 1024;
-static void lock_ring();
-static void unlock_ring();
-
-/** Adds an awake handler for use in awake(). */
-int Fl::add_awake_handler_(Fl_Awake_Handler func, void *data)
-{
-  int ret = 0;
-  lock_ring();
-  if (!awake_ring_) {
-    awake_ring_size_ = AWAKE_RING_SIZE;
-    awake_ring_ = (Fl_Awake_Handler*)malloc(awake_ring_size_*sizeof(Fl_Awake_Handler));
-    awake_data_ = (void**)malloc(awake_ring_size_*sizeof(void*));
-    // explicitly initialize the head and tail indices
-    awake_ring_head_= awake_ring_tail_ = 0;
-  }
-  // The next head index we will want (not the current index):
-  // We use this to check if the ring-buffer is full or not
-  // (and to update awake_ring_head_ if we do use the current index.)
-  int next_head = awake_ring_head_ + 1;
-  if (next_head >= awake_ring_size_) {
-    next_head = 0;
-  }
-  // check that the ring buffer is not full, and that it exists
-  if ((!awake_ring_) || (next_head == awake_ring_tail_)) {
-    // ring is non-existent or full. Return -1 as an error indicator.
-    ret = -1;
-  } else {
-    awake_ring_[awake_ring_head_] = func;
-    awake_data_[awake_ring_head_] = data;
-    awake_ring_head_ = next_head;
-  }
-  unlock_ring();
-  return ret;
-}
-
-/** Gets the last stored awake handler for use in awake(). */
-int Fl::get_awake_handler_(Fl_Awake_Handler &func, void *&data)
-{
-  int ret = 0;
-  lock_ring();
-  if ((!awake_ring_) || (awake_ring_head_ == awake_ring_tail_)) {
-    ret = -1;
-  } else {
-    func = awake_ring_[awake_ring_tail_];
-    data = awake_data_[awake_ring_tail_];
-    ++awake_ring_tail_;
-    if (awake_ring_tail_ >= awake_ring_size_) {
-      awake_ring_tail_ = 0;
-    }
-  }
-  unlock_ring();
-  return ret;
-}
-
-/**
- Let the main thread know an update is pending and have it call a specific function.
- Registers a function that will be 
- called by the main thread during the next message handling cycle. 
- Returns 0 if the callback function was registered, 
- and -1 if registration failed. Over a thousand awake callbacks can be
- registered simultaneously.
- 
- \see Fl::awake(void* message=0)
-*/
-int Fl::awake(Fl_Awake_Handler func, void *data) {
-  int ret = add_awake_handler_(func, data);
-  Fl::awake();
-  return ret;
-}
-
-////////////////////////////////////////////////////////////////
-// Windows threading...
-/** \fn int Fl::lock()
-    The lock() method blocks the current thread until it
-    can safely access FLTK widgets and data. Child threads should
-    call this method prior to updating any widgets or accessing
-    data. The main thread must call lock() to initialize
-    the threading support in FLTK. lock() will return non-zero
-    if threading is not available on the platform.
-    
-    Child threads must call unlock() when they are done
-    accessing FLTK.
-    
-    When the wait() method is waiting
-    for input or timeouts, child threads are given access to FLTK.
-    Similarly, when the main thread needs to do processing, it will
-    wait until all child threads have called unlock() before processing
-    additional data.
- 
-    \return 0 if threading is available on the platform; non-zero
-    otherwise.
-    
-    See also: \ref advanced_multithreading
-*/
-/** \fn void Fl::unlock()
-    The unlock() method releases the lock that was set
-    using the lock() method. Child
-    threads should call this method as soon as they are finished
-    accessing FLTK.
-    
-    See also: \ref advanced_multithreading
-*/
-/** \fn void Fl::awake(void* msg)
-    Sends a message pointer to the main thread, 
-    causing any pending Fl::wait() call to 
-    terminate so that the main thread can retrieve the message and any pending 
-    redraws can be processed.
-    
-    Multiple calls to Fl::awake() will queue multiple pointers 
-    for the main thread to process, up to a system-defined (typically several 
-    thousand) depth. The default message handler saves the last message which 
-    can be accessed using the 
-    Fl::thread_message() function.
-
-    In the context of a threaded application, a call to Fl::awake() with no
-    argument will trigger event loop handling in the main thread. Since
-    it is not possible to call Fl::flush() from a subsidiary thread,
-    Fl::awake() is the best (and only, really) substitute.
-    
-    See also: \ref advanced_multithreading
-*/
-#ifdef WIN32
-#  include <windows.h>
-#  include <process.h>
-#  include <FL/x.H>
-
-// These pointers are in Fl_win32.cxx:
-extern void (*fl_lock_function)();
-extern void (*fl_unlock_function)();
-
-// The main thread's ID
-static DWORD main_thread;
-
-// Microsoft's version of a MUTEX...
-CRITICAL_SECTION cs;
-CRITICAL_SECTION *cs_ring;
-
-void unlock_ring() {
-  LeaveCriticalSection(cs_ring);
-}
-
-void lock_ring() {
-  if (!cs_ring) {
-    cs_ring = (CRITICAL_SECTION*)malloc(sizeof(CRITICAL_SECTION));
-    InitializeCriticalSection(cs_ring);
-  }
-  EnterCriticalSection(cs_ring);
-}
-
-//
-// 'unlock_function()' - Release the lock.
-//
-
-static void unlock_function() {
-  LeaveCriticalSection(&cs);
-}
-
-//
-// 'lock_function()' - Get the lock.
-//
-
-static void lock_function() {
-  EnterCriticalSection(&cs);
-}
-
-int Fl::lock() {
-  if (!main_thread) InitializeCriticalSection(&cs);
-
-  lock_function();
-
-  if (!main_thread) {
-    fl_lock_function   = lock_function;
-    fl_unlock_function = unlock_function;
-    main_thread        = GetCurrentThreadId();
-  }
-  return 0;
-}
-
-void Fl::unlock() {
-  unlock_function();
-}
-
-void Fl::awake(void* msg) {
-  PostThreadMessage( main_thread, fl_wake_msg, (WPARAM)msg, 0);
-}
-
-////////////////////////////////////////////////////////////////
-// POSIX threading...
-#elif defined(HAVE_PTHREAD)
-#  include <unistd.h>
-#  include <fcntl.h>
-#  include <pthread.h>
-
-// Pipe for thread messaging via Fl::awake()...
-static int thread_filedes[2];
-
-// Mutex and state information for Fl::lock() and Fl::unlock()...
-static pthread_mutex_t fltk_mutex;
-static pthread_t owner;
-static int counter;
-
-static void lock_function_init_std() {
-  pthread_mutex_init(&fltk_mutex, NULL);
-}
-
-static void lock_function_std() {
-  if (!counter || owner != pthread_self()) {
-    pthread_mutex_lock(&fltk_mutex);
-    owner = pthread_self();
-  }
-  counter++;
-}
-
-static void unlock_function_std() {
-  if (!--counter) pthread_mutex_unlock(&fltk_mutex);
-}
-
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-static bool lock_function_init_rec() {
-  pthread_mutexattr_t attrib;
-  pthread_mutexattr_init(&attrib);
-  if (pthread_mutexattr_settype(&attrib, PTHREAD_MUTEX_RECURSIVE)) {
-    pthread_mutexattr_destroy(&attrib);
-    return true;
-  }
-
-  pthread_mutex_init(&fltk_mutex, &attrib);
-  return false;
-}
-
-static void lock_function_rec() {
-  pthread_mutex_lock(&fltk_mutex);
-}
-
-static void unlock_function_rec() {
-  pthread_mutex_unlock(&fltk_mutex);
-}
-#  endif // PTHREAD_MUTEX_RECURSIVE
-
-void Fl::awake(void* msg) {
-  if (write(thread_filedes[1], &msg, sizeof(void*))==0) { /* ignore */ }
-}
-
-static void* thread_message_;
-void* Fl::thread_message() {
-  void* r = thread_message_;
-  thread_message_ = 0;
-  return r;
-}
-
-static void thread_awake_cb(int fd, void*) {
-  if (read(fd, &thread_message_, sizeof(void*))==0) { 
-    /* This should never happen */
-  }
-  Fl_Awake_Handler func;
-  void *data;
-  while (Fl::get_awake_handler_(func, data)==0) {
-    (*func)(data);
-  }
-}
-
-// These pointers are in Fl_x.cxx:
-extern void (*fl_lock_function)();
-extern void (*fl_unlock_function)();
-
-int Fl::lock() {
-  if (!thread_filedes[1]) {
-    // Initialize thread communication pipe to let threads awake FLTK
-    // from Fl::wait()
-    if (pipe(thread_filedes)==-1) {
-      /* this should not happen */
-    }
-
-    // Make the write side of the pipe non-blocking to avoid deadlock
-    // conditions (STR #1537)
-    fcntl(thread_filedes[1], F_SETFL,
-          fcntl(thread_filedes[1], F_GETFL) | O_NONBLOCK);
-
-    // Monitor the read side of the pipe so that messages sent via
-    // Fl::awake() from a thread will "wake up" the main thread in
-    // Fl::wait().
-    Fl::add_fd(thread_filedes[0], FL_READ, thread_awake_cb);
-
-    // Set lock/unlock functions for this system, using a system-supplied
-    // recursive mutex if supported...
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-    if (!lock_function_init_rec()) {
-      fl_lock_function   = lock_function_rec;
-      fl_unlock_function = unlock_function_rec;
-    } else {
-#  endif // PTHREAD_MUTEX_RECURSIVE
-      lock_function_init_std();
-      fl_lock_function   = lock_function_std;
-      fl_unlock_function = unlock_function_std;
-#  ifdef PTHREAD_MUTEX_RECURSIVE
-    }
-#  endif // PTHREAD_MUTEX_RECURSIVE
-  }
-
-  fl_lock_function();
-  return 0;
-}
-
-void Fl::unlock() {
-  fl_unlock_function();
-}
-
-// Mutex code for the awake ring buffer
-static pthread_mutex_t *ring_mutex;
-
-void unlock_ring() {
-  pthread_mutex_unlock(ring_mutex);
-}
-
-void lock_ring() {
-  if (!ring_mutex) {
-    ring_mutex = (pthread_mutex_t*)malloc(sizeof(pthread_mutex_t));
-    pthread_mutex_init(ring_mutex, NULL);
-  }
-  pthread_mutex_lock(ring_mutex);
-}
-
-#else
-
-void unlock_ring() {
-}
-
-void lock_ring() {
-}
-
-void Fl::awake(void*) {
-}
-
-int Fl::lock() {
-  return 1;
-}
-
-void Fl::unlock() {
-}
-
-void* Fl::thread_message() {
-  return NULL;
-}
-
-#endif // WIN32
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_own_colormap.cxx
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-// Private colormap support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Using the default system colormap can be a bad idea on PseudoColor
-// visuals, since typically every application uses the default colormap and
-// you can run out of colormap entries easily.
-//
-// The solution is to always create a new colormap on PseudoColor displays
-// and copy the first 16 colors from the default colormap so that we won't
-// get huge color changes when switching windows.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-/** \fn Fl::own_colormap()
-    Makes FLTK use its <a href="fltk-colormap.png">own colormap</a>. This may make FLTK display better
-    and will reduce conflicts with other programs that want lots of colors.
-    However the colors may flash as you move the cursor between windows.
-    
-    <P>This does nothing if the current visual is not colormapped.
-*/
-#ifdef WIN32
-// There is probably something relevant to do on MSWindows 8-bit displays
-// but I don't know what it is
-
-void Fl::own_colormap() {}
-
-#elif defined(__APPLE__)
-// MacOS X always provides a TrueColor interface...
-
-void Fl::own_colormap() {}
-#else
-// X version
-
-void Fl::own_colormap() {
-  fl_open_display();
-#if USE_COLORMAP
-  switch (fl_visual->c_class) {
-  case GrayScale :
-  case PseudoColor :
-  case DirectColor :
-    break;
-  default:
-    return; // don't do anything for non-colormapped visuals
-  }
-  int i;
-  XColor colors[16];
-  // Get the first 16 colors from the default colormap...
-  for (i = 0; i < 16; i ++) colors[i].pixel = i;
-  XQueryColors(fl_display, fl_colormap, colors, 16);
-  // Create a new colormap...
-  fl_colormap = XCreateColormap(fl_display,
-				RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-  // Copy those first 16 colors to our own colormap:
-  for (i = 0; i < 16; i ++)
-    XAllocColor(fl_display, fl_colormap, colors + i);
-#endif
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_visual.cxx
+++ /dev/null
@@ -1,146 +1,0 @@
-//
-// "$Id$"
-//
-// Visual support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Set the default visual according to passed switches:
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-/** \fn  Fl::visual(int flags)
-    Selects a visual so that your graphics are drawn correctly.  This is
-    only allowed before you call show() on any windows.  This does nothing
-    if the default visual satisfies the capabilities, or if no visual
-    satisfies the capabilities, or on systems that don't have such
-    brain-dead notions.
-    
-    <P>Only the following combinations do anything useful:
-    
-    <UL>
-    <LI>Fl::visual(FL_RGB)
-    <BR>Full/true color (if there are several depths FLTK chooses  the
-    largest).  Do this if you use fl_draw_image
-    for much better (non-dithered)  output.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_RGB8)
-    <BR>Full color with at least 24 bits of color. FL_RGB will
-    always  pick this if available, but if not it will happily return a
-    less-than-24 bit deep visual.  This call fails if 24 bits are not
-    available.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_INDEX)
-    <BR>Hardware double buffering.  Call this if you are going to use 
-    Fl_Double_Window.
-    <BR>&nbsp; </LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_RGB)</LI>
-    <LI>Fl::visual(FL_DOUBLE|FL_RGB8)
-    <BR>Hardware double buffering and full color.
-    </UL>
-    
-    <P>This returns true if the system has the capabilities by default or
-    FLTK suceeded in turing them on.  Your program will still work even if
-    this returns false (it just won't look as good).
-*/
-#ifdef WIN32
-int Fl::visual(int flags) {
-  fl_GetDC(0);
-  if (flags & FL_DOUBLE) return 0;
-  if (!(flags & FL_INDEX) &&
-    GetDeviceCaps(fl_gc,BITSPIXEL) <= 8) return 0;
-  if ((flags & FL_RGB8) && GetDeviceCaps(fl_gc,BITSPIXEL)<24) return 0;
-  return 1;
-}
-#elif defined(__APPLE__)
-
-// \todo Mac : need to implement Visual flags
-int Fl::visual(int flags) {
-  (void)flags;
-  return 1;
-}
-
-#else
-
-#if USE_XDBE
-#include <X11/extensions/Xdbe.h>
-#endif
-
-static int test_visual(XVisualInfo& v, int flags) {
-  if (v.screen != fl_screen) return 0;
-#if USE_COLORMAP
-  if (!(flags & FL_INDEX)) {
-    if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
-    if (v.depth <= 8) return 0; // fltk will work better in colormap mode
-  }
-  if (flags & FL_RGB8) {
-    if (v.depth < 24) return 0;
-  }
-  // for now, fltk does not like colormaps of more than 8 bits:
-  if ((v.c_class&1) && v.depth > 8) return 0;
-#else
-  // simpler if we can't use colormapped visuals at all:
-  if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
-#endif
-#if USE_XDBE
-  if (flags & FL_DOUBLE) {
-    static XdbeScreenVisualInfo *xdbejunk;
-    if (!xdbejunk) {
-      int event_base, error_base;
-      if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
-      Drawable root = RootWindow(fl_display,fl_screen);
-      int numscreens = 1;
-      xdbejunk = XdbeGetVisualInfo(fl_display,&root,&numscreens);
-      if (!xdbejunk) return 0;
-    }
-    for (int j = 0; ; j++) {
-      if (j >= xdbejunk->count) return 0;
-      if (xdbejunk->visinfo[j].visual == v.visualid) break;
-    }
-  }
-#endif
-  return 1;
-}
-
-int Fl::visual(int flags) {
-#if USE_XDBE == 0
-  if (flags & FL_DOUBLE) return 0;
-#endif
-  fl_open_display();
-  // always use default if possible:
-  if (test_visual(*fl_visual, flags)) return 1;
-  // get all the visuals:
-  XVisualInfo vTemplate;
-  int num;
-  XVisualInfo *visualList = XGetVisualInfo(fl_display, 0, &vTemplate, &num);
-  // find all matches, use the one with greatest depth:
-  XVisualInfo *found = 0;
-  for (int i=0; i<num; i++) if (test_visual(visualList[i], flags)) {
-    if (!found || found->depth < visualList[i].depth)
-      found = &visualList[i];
-  }
-  if (!found) {XFree((void*)visualList); return 0;}
-  fl_visual = found;
-  fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-  return 1;
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_win32.cxx
+++ /dev/null
@@ -1,2898 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32-specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file contains win32-specific code for fltk which is always linked
-// in.  Search other files for "WIN32" or filenames ending in _win32.cxx
-// for other system-specific code.
-
-// This file must be #include'd in Fl.cxx and not compiled separately.
-
-#ifndef FL_DOXYGEN
-#include <FL/Fl.H>
-#include <FL/fl_utf8.h>
-#include <FL/Fl_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <FL/Fl_Tooltip.H>
-#include <FL/Fl_Paged_Device.H>
-#include "flstring.h"
-#include "Fl_Font.H"
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <time.h>
-#include <signal.h>
-#ifdef __CYGWIN__
-#  include <sys/time.h>
-#  include <unistd.h>
-#endif
-
-#if !defined(NO_TRACK_MOUSE)
-#  include <commctrl.h>	// TrackMouseEvent
-// fabien: Ms Visual Studio >= 2003 permit embedded lib reference
-// that makes fltk use easier as only fltk libs are now requested
-// This idea could be extended to fltk libs themselves, 
-// implementer should then care about DLL linkage flags ...
-#  if defined(_MSC_VER) && (_MSC_VER>=1310)
-#    pragma comment (lib, "comctl32.lib")
-#  endif
-#endif
-
-#if defined(__GNUC__)
-# include <wchar.h>
-#endif
-
-#include <ole2.h>
-#include <shellapi.h>
-
-// New versions of MinGW (as of Feb 2018) need to include winerror.h to
-// #define S_OK which used to be defined in ole2.h (STR #3454)
-
-#include <winerror.h>
-
-//
-// USE_ASYNC_SELECT - define it if you have WSAAsyncSelect()...
-// USE_ASYNC_SELECT is OBSOLETED in 1.3 for the following reasons:
-/*
-  This feature was supposed to provide an efficient alternative to the current
-  polling method, but as it has been discussed (Thanks Albrecht!) :
-  - the async mode would imply to change the socket to non blocking mode.
-    This can have unexpected side effects for 3rd party apps, especially
-    if it is set on-the-fly when socket service is really needed, as it is 
-    done today and on purpose, but still the 3rd party developer wouldn't easily
-    control the sequencing of socket operations.
-  - Finer granularity of events furthered by the async select is a plus only 
-    for socket 3rd party impl., it is simply not needed for the 'light' fltk
-    use we make of wsock, so here it would also be a bad point, because of all
-    the logic add-ons necessary for using this functionality, without a clear
-    benefit.
-
-  So async mode select would not add benefits to fltk, worse, it can slowdown
-  fltk because of this finer granularity and instrumentation code to be added
-  for async mode proper operation, not mentioning the side effects...
-*/
-
-// Internal functions
-static void fl_clipboard_notify_target(HWND wnd);
-static void fl_clipboard_notify_untarget(HWND wnd);
-
-// Internal variables
-static HWND clipboard_wnd = 0;
-static HWND next_clipboard_wnd = 0;
-
-static bool initial_clipboard = true;
-
-// dynamic wsock dll handling api:
-#if defined(__CYGWIN__) && !defined(SOCKET)
-# define SOCKET int
-#endif
-
-// note: winsock2.h has been #include'd in Fl.cxx
-#define WSCK_DLL_NAME "WS2_32.DLL"
-
-// Patch for MinGW (__MINGW32__): see STR #3454 and src/Fl.cxx
-#ifdef __MINGW32__
-typedef int(WINAPI *fl_wsk_fd_is_set_f)(unsigned int, void *);
-#else
-typedef int(WINAPI *fl_wsk_fd_is_set_f)(SOCKET, fd_set *);
-static fl_wsk_fd_is_set_f fl_wsk_fd_is_set = 0;
-#endif
-
-typedef int (WINAPI* fl_wsk_select_f)(int, fd_set*, fd_set*, fd_set*, const struct timeval*);
-
-static HMODULE s_wsock_mod = 0;
-static fl_wsk_select_f s_wsock_select = 0;
-
-#ifdef __MINGW32__
-static void * get_wsock_mod() {
-#else
-static HMODULE get_wsock_mod() {
-#endif
-  if (!s_wsock_mod) {
-    s_wsock_mod = LoadLibrary(WSCK_DLL_NAME);
-    if (s_wsock_mod==NULL)
-      Fl::fatal("FLTK Lib Error: %s file not found! Please check your winsock dll accessibility.\n",WSCK_DLL_NAME);
-    s_wsock_select = (fl_wsk_select_f) GetProcAddress(s_wsock_mod, "select");
-    fl_wsk_fd_is_set = (fl_wsk_fd_is_set_f) GetProcAddress(s_wsock_mod, "__WSAFDIsSet");
-  }
-  return s_wsock_mod;
-}
-
-/*
- * Dynamic linking of imm32.dll
- * This library is only needed for a hand full (four ATM) functions relating to 
- * international text rendering and locales. Dynamically loading reduces initial
- * size and link dependencies.
- */
-static HMODULE s_imm_module = 0;
-typedef BOOL (WINAPI* flTypeImmAssociateContextEx)(HWND, HIMC, DWORD);
-static flTypeImmAssociateContextEx flImmAssociateContextEx = 0;
-typedef HIMC (WINAPI* flTypeImmGetContext)(HWND);
-static flTypeImmGetContext flImmGetContext = 0;
-typedef BOOL (WINAPI* flTypeImmSetCompositionWindow)(HIMC, LPCOMPOSITIONFORM);
-static flTypeImmSetCompositionWindow flImmSetCompositionWindow = 0;
-typedef BOOL (WINAPI* flTypeImmReleaseContext)(HWND, HIMC);
-static flTypeImmReleaseContext flImmReleaseContext = 0;
-
-static void get_imm_module() {
-  s_imm_module = LoadLibrary("IMM32.DLL");
-  if (!s_imm_module)
-    Fl::fatal("FLTK Lib Error: IMM32.DLL file not found!\n\n"
-      "Please check your input method manager library accessibility.");
-  flImmAssociateContextEx = (flTypeImmAssociateContextEx)GetProcAddress(s_imm_module, "ImmAssociateContextEx");
-  flImmGetContext = (flTypeImmGetContext)GetProcAddress(s_imm_module, "ImmGetContext");
-  flImmSetCompositionWindow = (flTypeImmSetCompositionWindow)GetProcAddress(s_imm_module, "ImmSetCompositionWindow");
-  flImmReleaseContext = (flTypeImmReleaseContext)GetProcAddress(s_imm_module, "ImmReleaseContext");
-}
-
-// USE_TRACK_MOUSE - define NO_TRACK_MOUSE if you don't have
-// TrackMouseEvent()...
-//
-// Now (Dec. 2008) we can assume that current Cygwin/MinGW versions
-// support the TrackMouseEvent() function, but WinCE obviously doesn't
-// support it (STR 2095). Therefore, USE_TRACK_MOUSE is enabled by 
-// default, but you can disable it by defining NO_TRACK_MOUSE.
-//
-// TrackMouseEvent is only used to support window leave notifications
-// under Windows. It can be used to get FL_LEAVE events, when the
-// mouse leaves the _main_ application window (FLTK detects subwindow
-// leave events by using normal move events).
-//
-// Implementation note: If the mouse cursor leaves one subwindow and
-// enters another window, then Windows sends a WM_MOUSEMOVE message to
-// the new window before it sends a WM_MOUSELEAVE message to the old
-// (just left) window. We save the current mouse window in a static variable,
-// and if we get a WM_MOUSELEAVE event for the current mouse window, this
-// means that the top level window has been left (otherwise we would have
-// got another WM_MOUSEMOVE message before).
-
-// #define NO_TRACK_MOUSE
-
-#if !defined(NO_TRACK_MOUSE)
-# define USE_TRACK_MOUSE
-#endif // NO_TRACK_MOUSE
-
-static Fl_Window *track_mouse_win=0;	// current TrackMouseEvent() window
-
-// USE_CAPTURE_MOUSE_WIN - this must be defined for TrackMouseEvent to work
-// correctly with subwindows - otherwise a single mouse click and release
-// (without a move) would generate phantom leave events.
-// This defines, if the current mouse window (maybe a subwindow) or the 
-// main window should get mouse events after pushing (and holding) a mouse
-// button, i.e. when dragging the mouse. This is done by calling SetCapture
-// (see below).
-
-#ifdef USE_TRACK_MOUSE
-#define USE_CAPTURE_MOUSE_WIN
-#endif // USE_TRACK_MOUSE
-
-//
-// WM_SYNCPAINT is an "undocumented" message, which is finally defined in
-// VC++ 6.0.
-//
-
-#ifndef WM_SYNCPAINT
-#  define WM_SYNCPAINT 0x0088
-#endif
-
-#ifndef WM_MOUSELEAVE
-#  define WM_MOUSELEAVE 0x02a3
-#endif
-
-#ifndef WM_MOUSEWHEEL
-#  define WM_MOUSEWHEEL 0x020a
-#endif
-
-#ifndef WHEEL_DELTA
-#  define WHEEL_DELTA 120	// according to MSDN.
-#endif
-
-#ifndef SM_CXPADDEDBORDER
-#  define SM_CXPADDEDBORDER (92) // STR #3061
-#endif
-
-//
-// WM_FLSELECT is the user-defined message that we get when one of
-// the sockets has pending data, etc.
-//
-
-#define WM_FLSELECT	(WM_APP+1)	// WM_APP is used for hide-window
-
-
-////////////////////////////////////////////////////////////////
-// interface to poll/select call:
-
-// fd's are only implemented for sockets.  Microsoft Windows does not
-// have a unified IO system, so it doesn't support select() on files,
-// devices, or pipes...
-//
-// Microsoft provides the Berkeley select() call and an asynchronous
-// select function that sends a WIN32 message when the select condition
-// exists. However, we don't try to use the asynchronous WSAAsyncSelect()
-// any more for good reasons (see above).
-//
-// A.S. Dec 2009: We got reports that current winsock2.h files define
-// POLLIN, POLLOUT, and POLLERR with conflicting values WRT what we
-// used before (STR #2301).  Therefore we must not use these values
-// for our internal purposes, but use FL_READ, FL_WRITE, and
-// FL_EXCEPT, as defined for use in Fl::add_fd().
-//
-static int maxfd = 0;
-static fd_set fdsets[3];
-
-extern IDropTarget *flIDropTarget;
-
-static int nfds = 0;
-static int fd_array_size = 0;
-static struct FD {
-  int fd;
-  short events;
-  void (*cb)(FL_SOCKET, void*); // keep socket api opaque at this level to reduce multiplatform deps headaches
-  void* arg;
-} *fd = 0;
-
-extern unsigned int fl_codepage;
-
-void fl_reset_spot()
-{
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-  if (!win) return;
-  Fl_Window* tw = win;
-  while (tw->parent()) tw = tw->window(); // find top level window
-
-  if (!tw->shown())
-    return;
-
-  HIMC himc = flImmGetContext(fl_xid(tw));
-
-  if (himc) {
-    COMPOSITIONFORM cfs;
-    cfs.dwStyle = CFS_POINT;
-    cfs.ptCurrentPos.x = X;
-    cfs.ptCurrentPos.y = Y - tw->labelsize();
-    MapWindowPoints(fl_xid(win), fl_xid(tw), &cfs.ptCurrentPos, 1);
-    flImmSetCompositionWindow(himc, &cfs);
-    flImmReleaseContext(fl_xid(tw), himc);
-  }
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-}
-
-void Fl::add_fd(int n, int events, void (*cb)(FL_SOCKET, void*), void *v) {
-  remove_fd(n,events);
-  int i = nfds++;
-  if (i >= fd_array_size) {
-    fd_array_size = 2*fd_array_size+1;
-    fd = (FD*)realloc(fd, fd_array_size*sizeof(FD));
-  }
-  fd[i].fd = n;
-  fd[i].events = (short)events;
-  fd[i].cb = cb;
-  fd[i].arg = v;
-
-  if (events & FL_READ) FD_SET((unsigned)n, &fdsets[0]);
-  if (events & FL_WRITE) FD_SET((unsigned)n, &fdsets[1]);
-  if (events & FL_EXCEPT) FD_SET((unsigned)n, &fdsets[2]);
-  if (n > maxfd) maxfd = n;
-}
-
-void Fl::add_fd(int fd, void (*cb)(FL_SOCKET, void*), void* v) {
-  Fl::add_fd(fd, FL_READ, cb, v);
-}
-
-void Fl::remove_fd(int n, int events) {
-  int i,j;
-  for (i=j=0; i<nfds; i++) {
-    if (fd[i].fd == n) {
-      short e = fd[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fd[i].events = e;
-    }
-    // move it down in the array if necessary:
-    if (j<i) {
-      fd[j]=fd[i];
-    }
-    j++;
-  }
-  nfds = j;
-
-  if (events & FL_READ) FD_CLR(unsigned(n), &fdsets[0]);
-  if (events & FL_WRITE) FD_CLR(unsigned(n), &fdsets[1]);
-  if (events & FL_EXCEPT) FD_CLR(unsigned(n), &fdsets[2]);
-}
-
-void Fl::remove_fd(int n) {
-  remove_fd(n, -1);
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-static void* thread_message_;
-void* Fl::thread_message() {
-  void* r = thread_message_;
-  thread_message_ = 0;
-  return r;
-}
-
-extern int fl_send_system_handlers(void *e);
-
-MSG fl_msg;
-
-// A local helper function to flush any pending callback requests
-// from the awake ring-buffer
-static void process_awake_handler_requests(void) {
-  Fl_Awake_Handler func;
-  void *data;
-  while (Fl::get_awake_handler_(func, data) == 0) {
-    func(data);
-  }
-}
-
-// This is never called with time_to_wait < 0.0.
-// It *should* return negative on error, 0 if nothing happens before
-// timeout, and >0 if any callbacks were done.  This version only
-// returns zero if nothing happens during a 0.0 timeout, otherwise
-// it returns 1.
-int fl_wait(double time_to_wait) {
-  int have_message = 0;
-
-  run_checks();
-
-  // idle processing
-  static char in_idle;
-  if (Fl::idle && !in_idle) {
-    in_idle = 1;
-    Fl::idle();
-    in_idle = 0;
-  }
-  
-  if (nfds) {
-    // For WIN32 we need to poll for socket input FIRST, since
-    // the event queue is not something we can select() on...
-    timeval t;
-    t.tv_sec = 0;
-    t.tv_usec = 0;
-
-    fd_set fdt[3];
-    memcpy(fdt, fdsets, sizeof fdt); // one shot faster fdt init
-    if (get_wsock_mod()&& s_wsock_select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t)) {
-      // We got something - do the callback!
-      for (int i = 0; i < nfds; i ++) {
-	SOCKET f = fd[i].fd;
-	short revents = 0;
-	if (fl_wsk_fd_is_set(f, &fdt[0])) revents |= FL_READ;
-	if (fl_wsk_fd_is_set(f, &fdt[1])) revents |= FL_WRITE;
-	if (fl_wsk_fd_is_set(f, &fdt[2])) revents |= FL_EXCEPT;
-	if (fd[i].events & revents) fd[i].cb(f, fd[i].arg);
-      }
-      time_to_wait = 0.0; // just peek for any messages
-    } else {
-      // we need to check them periodically, so set a short timeout:
-      if (time_to_wait > .001) time_to_wait = .001;
-    }
-  }
-
-  if (Fl::idle || Fl::damage()) 
-    time_to_wait = 0.0;
-
-  // if there are no more windows and this timer is set
-  // to FOREVER, continue through or look up indefinitely
-  if (!Fl::first_window() && time_to_wait==1e20)
-    time_to_wait = 0.0;
-
-  fl_unlock_function();
-
-  time_to_wait = (time_to_wait > 10000 ? 10000 : time_to_wait);
-  int t_msec = (int) (time_to_wait * 1000.0 + 0.5);
-  MsgWaitForMultipleObjects(0, NULL, FALSE, t_msec, QS_ALLINPUT);
-
-  fl_lock_function();
-
-  // Execute the message we got, and all other pending messages:
-  // have_message = PeekMessage(&fl_msg, NULL, 0, 0, PM_REMOVE);
-  while ((have_message = PeekMessageW(&fl_msg, NULL, 0, 0, PM_REMOVE)) > 0) {
-    if (fl_send_system_handlers(&fl_msg))
-      continue;
-
-    // Let applications treat WM_QUIT identical to SIGTERM on *nix
-    if (fl_msg.message == WM_QUIT)
-      raise(SIGTERM);
-
-    if (fl_msg.message == fl_wake_msg) {
-      // Used for awaking wait() from another thread
-      thread_message_ = (void*)fl_msg.wParam;
-      process_awake_handler_requests();
-    }
-
-    TranslateMessage(&fl_msg);
-    DispatchMessageW(&fl_msg);
-  }
-
-  // The following conditional test:
-  //    (Fl::awake_ring_head_ != Fl::awake_ring_tail_)
-  // is a workaround / fix for STR #3143. This works, but a better solution
-  // would be to understand why the PostThreadMessage() messages are not
-  // seen by the main window if it is being dragged/ resized at the time.
-  // If a worker thread posts an awake callback to the ring buffer
-  // whilst the main window is unresponsive (if a drag or resize operation
-  // is in progress) we may miss the PostThreadMessage(). So here, we check if
-  // there is anything pending in the awake ring buffer and if so process
-  // it. This is not strictly thread safe (for speed it compares the head
-  // and tail indices without first locking the ring buffer) but is intended
-  // only as a fall-back recovery mechanism if the awake processing stalls.
-  // If the test erroneously returns true (may happen if we test the indices
-  // whilst they are being modified) we will call process_awake_handler_requests()
-  // unnecessarily, but this has no harmful consequences so is safe to do.
-  // Note also that if we miss the PostThreadMessage(), then thread_message_
-  // will not be updated, so this is not a perfect solution, but it does
-  // recover and process any pending awake callbacks.
-  // Normally the ring buffer head and tail indices will match and this
-  // comparison will do nothing. Addresses STR #3143
-  if (Fl::awake_ring_head_ != Fl::awake_ring_tail_) {
-    process_awake_handler_requests();
-  }
-
-  Fl::flush();
-
-  // This should return 0 if only timer events were handled:
-  return 1;
-}
-
-// fl_ready() is just like fl_wait(0.0) except no callbacks are done:
-int fl_ready() {
-  if (PeekMessage(&fl_msg, NULL, 0, 0, PM_NOREMOVE)) return 1;
-  if (!nfds) return 0;
-  timeval t;
-  t.tv_sec = 0;
-  t.tv_usec = 0;
-  fd_set fdt[3];
-  memcpy(fdt, fdsets, sizeof fdt);
-  return get_wsock_mod() ? s_wsock_select(0,&fdt[0],&fdt[1],&fdt[2],&t) : 0;
-}
-
-void fl_open_display() {
-  static char beenHereDoneThat = 0;
-
-  if (beenHereDoneThat)
-    return;
-
-  beenHereDoneThat = 1;
-
-  OleInitialize(0L);
-
-  get_imm_module();
-}
-
-class Fl_Win32_At_Exit {
-public:
-  Fl_Win32_At_Exit() { }
-  ~Fl_Win32_At_Exit() {
-    fl_free_fonts();        // do some WIN32 cleanup
-    fl_cleanup_pens();
-    OleUninitialize();
-    fl_brush_action(1);
-    fl_cleanup_dc_list();
-    // This is actually too late in the cleanup process to remove the
-    // clipboard notifications, but we have no earlier hook so we try
-    // to work around it anyway.
-    if (clipboard_wnd != NULL)
-      fl_clipboard_notify_untarget(clipboard_wnd);
-  }
-};
-static Fl_Win32_At_Exit win32_at_exit;
-
-static char im_enabled = 1;
-
-void Fl::enable_im() {
-  fl_open_display();
-
-  Fl_X* i = Fl_X::first;
-  while (i) {
-    flImmAssociateContextEx(i->xid, 0, IACE_DEFAULT);
-    i = i->next;
-  }
-
-  im_enabled = 1;
-}
-
-void Fl::disable_im() {
-  fl_open_display();
-
-  Fl_X* i = Fl_X::first;
-  while (i) {
-    flImmAssociateContextEx(i->xid, 0, 0);
-    i = i->next;
-  }
-
-  im_enabled = 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl::x()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.left;
-}
-
-int Fl::y()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.top;
-}
-
-int Fl::h()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.bottom - r.top;
-}
-
-int Fl::w()
-{
-  RECT r;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  return r.right - r.left;
-}
-
-void Fl::get_mouse(int &x, int &y) {
-  POINT p;
-  GetCursorPos(&p);
-  x = p.x;
-  y = p.y;
-}
-
-////////////////////////////////////////////////////////////////
-// code used for selections:
-
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-int fl_selection_buffer_length[2];
-char fl_i_own_selection[2];
-
-UINT fl_get_lcid_codepage(LCID id)
-{
-  char buf[8];
-  buf[GetLocaleInfo(id, LOCALE_IDEFAULTANSICODEPAGE, buf, 8)] = 0;
-  return atol(buf);
-}
-
-// Convert \n -> \r\n
-class Lf2CrlfConvert {
-  char *out;
-  int outlen;
-public:
-  Lf2CrlfConvert(const char *in, int inlen) {
-    outlen = 0;
-    const char *i;
-    char *o;
-    int lencount;
-    // Predict size of \r\n conversion buffer
-    for (i = in, lencount = inlen; lencount > 0; lencount--) {
-      if ( *i == '\r' && *(i+1) == '\n' && lencount >= 2 )	// leave \r\n untranslated
-	{ i+=2; outlen+=2; lencount--; }
-      else if ( *i == '\n' )			// \n by itself? leave room to insert \r
-	{ i++; outlen+=2; }
-      else
-	{ ++i; ++outlen; }
-    }
-    // Alloc conversion buffer + NULL
-    out = new char[outlen+1];
-    // Handle \n -> \r\n conversion
-    for (i = in, o=out, lencount = inlen; lencount > 0; lencount--) {
-      if ( *i == '\r' && *(i+1) == '\n' && lencount >= 2 )	// leave \r\n untranslated
-        { *o++ = *i++; *o++ = *i++; lencount--; }
-      else if ( *i == '\n' )			// \n by itself? insert \r
-        { *o++ = '\r'; *o++ = *i++; }
-      else
-        { *o++ = *i++; }
-    }
-    *o++ = 0;
-  }
-  ~Lf2CrlfConvert() {
-    delete[] out;
-  }
-  int GetLength() const { return(outlen); }
-  const char* GetValue() const { return(out); }
-};
-
-void fl_update_clipboard(void) {
-  Fl_Window *w1 = Fl::first_window();
-  if (!w1)
-    return;
-
-  HWND hwnd = fl_xid(w1);
-
-  if (!OpenClipboard(hwnd))
-    return;
-
-  EmptyClipboard();
-
-  int utf16_len = fl_utf8toUtf16(fl_selection_buffer[1],
-                                 fl_selection_length[1], 0, 0);
-
-  HGLOBAL hMem = GlobalAlloc(GHND, utf16_len * 2 + 2); // moveable and zero'ed mem alloc.
-  LPVOID memLock = GlobalLock(hMem);
-
-  fl_utf8toUtf16(fl_selection_buffer[1], fl_selection_length[1],
-                 (unsigned short*) memLock, utf16_len + 1);
-
-  GlobalUnlock(hMem);
-  SetClipboardData(CF_UNICODETEXT, hMem);
-
-  CloseClipboard();
-
-  // In case Windows managed to lob of a WM_DESTROYCLIPBOARD during
-  // the above.
-  fl_i_own_selection[1] = 1;
-}
-
-// call this when you create a selection:
-void Fl::copy(const char *stuff, int len, int clipboard, const char *type) {
-  if (!stuff || len<0) return;
-  if (clipboard >= 2)
-    clipboard = 1; // Only on X11 do multiple clipboards make sense.
-
-  // Convert \n -> \r\n (for old apps like Notepad, DOS)
-  Lf2CrlfConvert buf(stuff, len);
-  len = buf.GetLength();
-  stuff = buf.GetValue();
-
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  fl_i_own_selection[clipboard] = 1;
-  if (clipboard)
-    fl_update_clipboard();
-}
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard, const char *type) {
-  if (!clipboard || (fl_i_own_selection[clipboard] && strcmp(type, Fl::clipboard_plain_text) == 0)) {
-    // We already have it, do it quickly without window server.
-    // Notice that the text is clobbered if set_selection is
-    // called in response to FL_PASTE!
-    char *i = fl_selection_buffer[clipboard];
-    if (i==0L) {
-      Fl::e_text = 0; 
-      return;
-    }
-    char *clip_text = new char[fl_selection_length[clipboard]+1];
-    char *o = clip_text;
-    while (*i) { // Convert \r\n -> \n
-      if ( *i == '\r' && *(i+1) == '\n') i++;
-      else *o++ = *i++;
-    }
-    *o = 0;
-    Fl::e_text = clip_text;
-    Fl::e_length = (int) (o - Fl::e_text);
-    Fl::e_clipboard_type = Fl::clipboard_plain_text;
-    receiver.handle(FL_PASTE);
-    delete [] clip_text;
-    Fl::e_text = 0;
-  } else if (clipboard) {
-    HANDLE h;
-    if (!OpenClipboard(NULL)) return;
-    if (strcmp(type, Fl::clipboard_plain_text) == 0) { // we want plain text from clipboard
-      if ((h = GetClipboardData(CF_UNICODETEXT))) { // there's text in the clipboard
-	wchar_t *memLock = (wchar_t*) GlobalLock(h);
-	size_t utf16_len = wcslen(memLock);
-	char *clip_text = new char[utf16_len * 4 + 1];
-	unsigned utf8_len = fl_utf8fromwc(clip_text, (unsigned) (utf16_len * 4), memLock, (unsigned) utf16_len);
-	*(clip_text + utf8_len) = 0;
-	GlobalUnlock(h);
-	LPSTR a,b;
-	a = b = clip_text;
-	while (*a) { // strip the CRLF pairs ($%$#@^)
-	  if (*a == '\r' && a[1] == '\n') a++;
-	  else *b++ = *a++;
-	}
-	*b = 0;
-        Fl::e_text = clip_text;
-	Fl::e_length = (int) (b - Fl::e_text);
-	Fl::e_clipboard_type = Fl::clipboard_plain_text;  // indicates that the paste event is for plain UTF8 text
-	receiver.handle(FL_PASTE); // send the FL_PASTE event to the widget
-	delete[] clip_text;
-	Fl::e_text = 0;
-	}
-      }
-      else if (strcmp(type, Fl::clipboard_image) == 0) { // we want an image from clipboard
-	uchar *rgb = NULL;
-	int width = 0, height = 0, depth = 0;
-	if ( (h = GetClipboardData(CF_DIB)) ) { // if there's a DIB in clipboard
-	  LPBITMAPINFO lpBI = (LPBITMAPINFO)GlobalLock(h) ;
-	  width = lpBI->bmiHeader.biWidth; // bitmap width & height
-	  height = lpBI->bmiHeader.biHeight;
-	  if ( (lpBI->bmiHeader.biBitCount == 24 || lpBI->bmiHeader.biBitCount == 32) && 
-	      lpBI->bmiHeader.biCompression == BI_RGB &&
-	      lpBI->bmiHeader.biClrUsed == 0) { // direct use of the DIB data if it's RGB or RGBA
-	    int linewidth; // row length
-	    depth = lpBI->bmiHeader.biBitCount/8; // 3 or 4
-	    if (depth == 3) linewidth = 4 * ((3*width + 3)/4); // row length: series of groups of 3 bytes, rounded to multiple of 4 bytes
-	    else linewidth = 4*width;
-	    rgb = new uchar[width * height * depth]; // will hold the image data
-	    uchar *p = rgb, *r, rr, gg, bb;
-	    for (int i=height-1; i>=0; i--) { // for each row, from last to first
-	      r = (uchar*)(lpBI->bmiColors) + i*linewidth; // beginning of pixel data for the ith row
-	      for (int j=0; j<width; j++) { // for each pixel in a row
-		bb = *r++; // BGR is in DIB
-		gg = *r++;
-		rr = *r++;
-		*p++ = rr; // we want RGB
-		*p++ = gg;
-		*p++ = bb;
-		if (depth == 4) *p++ = *r++; // copy alpha if present
-	      }
-	    }
-	  }
-	  else { // the system will decode a complex DIB
-	    void *pDIBBits = (void*)(lpBI->bmiColors + 256); 
-	    if (lpBI->bmiHeader.biCompression == BI_BITFIELDS) pDIBBits = (void*)(lpBI->bmiColors + 3);
-	    else if (lpBI->bmiHeader.biClrUsed > 0) pDIBBits = (void*)(lpBI->bmiColors + lpBI->bmiHeader.biClrUsed);
-	    Fl_Offscreen off = fl_create_offscreen(width, height);
-	    fl_begin_offscreen(off);
-	    SetDIBitsToDevice(fl_gc, 0, 0, width, height, 0, 0, 0, height, pDIBBits, lpBI, DIB_RGB_COLORS);
-	    rgb = fl_read_image(NULL, 0, 0, width, height);
-	    depth = 3;
-	    fl_end_offscreen();
-	    fl_delete_offscreen(off);
-	  }
-	  GlobalUnlock(h);
-	}
-	else if ((h = GetClipboardData(CF_ENHMETAFILE))) { // if there's an enhanced metafile in clipboard
-	  ENHMETAHEADER header;
-	  GetEnhMetaFileHeader((HENHMETAFILE)h, sizeof(header), &header); // get structure containing metafile dimensions
-	  width = (header.rclFrame.right - header.rclFrame.left + 1); // in .01 mm units
-	  height = (header.rclFrame.bottom - header.rclFrame.top + 1);
-	  HDC hdc = GetDC(NULL); // get unit correspondance between .01 mm and screen pixels
-	  int hmm = GetDeviceCaps(hdc, HORZSIZE);
-	  int hdots = GetDeviceCaps(hdc, HORZRES);
-          int dhr = GetDeviceCaps(hdc, DESKTOPHORZRES); // true number of pixels on display
-	  ReleaseDC(NULL, hdc);
-          // Global display scaling factor: 1, 1.25, 1.5, 1.75, etc...
-          float scaling = dhr/float(hdots);
-	  float factor = (100.f * hmm) / hdots;
-	  width = (int)(width*scaling/factor); height = (int)(height*scaling/factor); // convert to screen pixel unit
-	  RECT rect = {0, 0, width, height};
-	  Fl_Offscreen off = fl_create_offscreen(width, height);
-	  fl_begin_offscreen(off);
-	  fl_color(FL_WHITE); fl_rectf(0,0,width, height); // draw white background
-	  PlayEnhMetaFile(fl_gc, (HENHMETAFILE)h, &rect); // draw metafile to offscreen buffer
-	  rgb = fl_read_image(NULL, 0, 0, width, height); // read pixels from offscreen buffer
-	  depth = 3;
-	  fl_end_offscreen();
-	  fl_delete_offscreen(off);
-	}
-	if (rgb) {
-	  Fl_RGB_Image *image = new Fl_RGB_Image(rgb, width, height, depth); // create new image from pixel data
-	  image->alloc_array = 1;
-	  Fl::e_clipboard_data = image;
-	  Fl::e_clipboard_type = Fl::clipboard_image;  // indicates that the paste event is for image data
-	  int done = receiver.handle(FL_PASTE); // send FL_PASTE event to widget
-	  Fl::e_clipboard_type = "";
-	  if (done == 0) { // if widget did not handle the event, delete the image
-	    Fl::e_clipboard_data = NULL;
-	    delete image;
-	  }
-	}
-      }
-     CloseClipboard();
-    }
-}
-
-int Fl::clipboard_contains(const char *type)
-{
-  int retval = 0;
-  if (!OpenClipboard(NULL)) return 0;
-  if (strcmp(type, Fl::clipboard_plain_text) == 0 || type[0] == 0) {
-    retval = IsClipboardFormatAvailable(CF_UNICODETEXT);
-  }
-  else if (strcmp(type, Fl::clipboard_image) == 0) {
-    retval = IsClipboardFormatAvailable(CF_DIB) || IsClipboardFormatAvailable(CF_ENHMETAFILE);
-  }
-  CloseClipboard();
-  return retval;
-}
-
-static void fl_clipboard_notify_target(HWND wnd) {
-  if (clipboard_wnd)
-    return;
-
-  // We get one fake WM_DRAWCLIPBOARD immediately, which we therefore
-  // need to ignore.
-  initial_clipboard = true;
-
-  clipboard_wnd = wnd;
-  next_clipboard_wnd = SetClipboardViewer(wnd);
-}
-
-static void fl_clipboard_notify_untarget(HWND wnd) {
-  if (wnd != clipboard_wnd)
-    return;
-
-  // We might be called late in the cleanup where Windows has already
-  // implicitly destroyed our clipboard window. At that point we need
-  // to do some extra work to manually repair the clipboard chain.
-  if (IsWindow(wnd))
-    ChangeClipboardChain(wnd, next_clipboard_wnd);
-  else {
-    HWND tmp, head;
-
-    tmp = CreateWindow("STATIC", "Temporary FLTK Clipboard Window", 0,
-                       0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL);
-    if (tmp == NULL)
-      return;
-
-    head = SetClipboardViewer(tmp);
-    if (head == NULL)
-      ChangeClipboardChain(tmp, next_clipboard_wnd);
-    else {
-      SendMessage(head, WM_CHANGECBCHAIN, (WPARAM)wnd, (LPARAM)next_clipboard_wnd);
-      ChangeClipboardChain(tmp, head);
-    }
-
-    DestroyWindow(tmp);
-  }
-
-  clipboard_wnd = next_clipboard_wnd = 0;
-}
-
-void fl_clipboard_notify_retarget(HWND wnd) {
-  // The given window is getting destroyed. If it's part of the
-  // clipboard chain then we need to unregister it and find a
-  // replacement window.
-  if (wnd != clipboard_wnd)
-    return;
-
-  fl_clipboard_notify_untarget(wnd);
-
-  if (Fl::first_window())
-    fl_clipboard_notify_target(fl_xid(Fl::first_window()));
-}
-
-void fl_clipboard_notify_change() {
-  // untarget clipboard monitor if no handlers are registered
-  if (clipboard_wnd != NULL && fl_clipboard_notify_empty()) {
-    fl_clipboard_notify_untarget(clipboard_wnd);
-    return;
-  }
-
-  // if there are clipboard notify handlers but no window targeted
-  // target first window if available
-  if (clipboard_wnd == NULL && Fl::first_window())
-    fl_clipboard_notify_target(fl_xid(Fl::first_window()));
-}
-
-////////////////////////////////////////////////////////////////
-void fl_get_codepage()
-{
-  HKL hkl = GetKeyboardLayout(0);
-  TCHAR ld[8];
-
-  GetLocaleInfo (LOWORD(hkl), LOCALE_IDEFAULTANSICODEPAGE, ld, 6);
-  DWORD ccp = atol(ld);
-  fl_codepage = ccp;
-}
-
-HWND fl_capture;
-
-static int mouse_event(Fl_Window *window, int what, int button,
-		       WPARAM wParam, LPARAM lParam)
-{
-  static int px, py, pmx, pmy;
-  POINT pt;
-  Fl::e_x = pt.x = (signed short)LOWORD(lParam);
-  Fl::e_y = pt.y = (signed short)HIWORD(lParam);
-  ClientToScreen(fl_xid(window), &pt);
-  Fl::e_x_root = pt.x;
-  Fl::e_y_root = pt.y;
-#ifdef USE_CAPTURE_MOUSE_WIN
-  Fl_Window *mouse_window = window;	// save "mouse window"
-#endif
-  while (window->parent()) {
-    Fl::e_x += window->x();
-    Fl::e_y += window->y();
-    window = window->window();
-  }
-
-  ulong state = Fl::e_state & 0xff0000; // keep shift key states
-#if 0
-  // mouse event reports some shift flags, perhaps save them?
-  if (wParam & MK_SHIFT) state |= FL_SHIFT;
-  if (wParam & MK_CONTROL) state |= FL_CTRL;
-#endif
-  if (wParam & MK_LBUTTON) state |= FL_BUTTON1;
-  if (wParam & MK_MBUTTON) state |= FL_BUTTON2;
-  if (wParam & MK_RBUTTON) state |= FL_BUTTON3;
-  Fl::e_state = state;
-
-  switch (what) {
-  case 1: // double-click
-    if (Fl::e_is_click) {Fl::e_clicks++; goto J1;}
-  case 0: // single-click
-    Fl::e_clicks = 0;
-  J1:
-#ifdef USE_CAPTURE_MOUSE_WIN
-    if (!fl_capture) SetCapture(fl_xid(mouse_window));  // use mouse window
-#else
-    if (!fl_capture) SetCapture(fl_xid(window));	// use main window
-#endif
-    Fl::e_keysym = FL_Button + button;
-    Fl::e_is_click = 1;
-    px = pmx = Fl::e_x_root; py = pmy = Fl::e_y_root;
-    return Fl::handle(FL_PUSH,window);
-
-  case 2: // release:
-    if (!fl_capture) ReleaseCapture();
-    Fl::e_keysym = FL_Button + button;
-    return Fl::handle(FL_RELEASE,window);
-
-  case 3: // move:
-  default: // avoid compiler warning
-    // MSWindows produces extra events even if mouse does not move, ignore em:
-    if (Fl::e_x_root == pmx && Fl::e_y_root == pmy) return 1;
-    pmx = Fl::e_x_root; pmy = Fl::e_y_root;
-    if (abs(Fl::e_x_root-px)>5 || abs(Fl::e_y_root-py)>5) Fl::e_is_click = 0;
-    return Fl::handle(FL_MOVE,window);
-
-  }
-}
-
-// convert a MSWindows VK_x to an Fltk (X) Keysym:
-// See also the inverse converter in Fl_get_key_win32.cxx
-// This table is in numeric order by VK:
-static const struct {unsigned short vk, fltk, extended;} vktab[] = {
-  {VK_BACK,	FL_BackSpace},
-  {VK_TAB,	FL_Tab},
-  {VK_CLEAR,	FL_KP+'5',	0xff0b/*XK_Clear*/},
-  {VK_RETURN,	FL_Enter,	FL_KP_Enter},
-  {VK_SHIFT,	FL_Shift_L,	FL_Shift_R},
-  {VK_CONTROL,	FL_Control_L,	FL_Control_R},
-  {VK_MENU,	FL_Alt_L,	FL_Alt_R},
-  {VK_PAUSE,	FL_Pause},
-  {VK_CAPITAL,	FL_Caps_Lock},
-  {VK_ESCAPE,	FL_Escape},
-  {VK_SPACE,	' '},
-  {VK_PRIOR,	FL_KP+'9',	FL_Page_Up},
-  {VK_NEXT,	FL_KP+'3',	FL_Page_Down},
-  {VK_END,	FL_KP+'1',	FL_End},
-  {VK_HOME,	FL_KP+'7',	FL_Home},
-  {VK_LEFT,	FL_KP+'4',	FL_Left},
-  {VK_UP,	FL_KP+'8',	FL_Up},
-  {VK_RIGHT,	FL_KP+'6',	FL_Right},
-  {VK_DOWN,	FL_KP+'2',	FL_Down},
-  {VK_SNAPSHOT,	FL_Print},	// does not work on NT
-  {VK_INSERT,	FL_KP+'0',	FL_Insert},
-  {VK_DELETE,	FL_KP+'.',	FL_Delete},
-  {VK_LWIN,	FL_Meta_L},
-  {VK_RWIN,	FL_Meta_R},
-  {VK_APPS,	FL_Menu},
-  {VK_SLEEP, FL_Sleep},
-  {VK_MULTIPLY,	FL_KP+'*'},
-  {VK_ADD,	FL_KP+'+'},
-  {VK_SUBTRACT,	FL_KP+'-'},
-  {VK_DECIMAL,	FL_KP+'.'},
-  {VK_DIVIDE,	FL_KP+'/'},
-  {VK_NUMLOCK,	FL_Num_Lock},
-  {VK_SCROLL,	FL_Scroll_Lock},
-# if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
-  {VK_BROWSER_BACK, FL_Back},
-  {VK_BROWSER_FORWARD, FL_Forward},
-  {VK_BROWSER_REFRESH, FL_Refresh},
-  {VK_BROWSER_STOP, FL_Stop},
-  {VK_BROWSER_SEARCH, FL_Search},
-  {VK_BROWSER_FAVORITES, FL_Favorites},
-  {VK_BROWSER_HOME, FL_Home_Page},
-  {VK_VOLUME_MUTE, FL_Volume_Mute},
-  {VK_VOLUME_DOWN, FL_Volume_Down},
-  {VK_VOLUME_UP, FL_Volume_Up},
-  {VK_MEDIA_NEXT_TRACK, FL_Media_Next},
-  {VK_MEDIA_PREV_TRACK, FL_Media_Prev},
-  {VK_MEDIA_STOP, FL_Media_Stop},
-  {VK_MEDIA_PLAY_PAUSE, FL_Media_Play},
-  {VK_LAUNCH_MAIL, FL_Mail},
-#endif
-  {0xba,	';'},
-  {0xbb,	'='},
-  {0xbc,	','},
-  {0xbd,	'-'},
-  {0xbe,	'.'},
-  {0xbf,	'/'},
-  {0xc0,	'`'},
-  {0xdb,	'['},
-  {0xdc,	'\\'},
-  {0xdd,	']'},
-  {0xde,	'\''},
-  {VK_OEM_102,	FL_Iso_Key}
-};
-static int ms2fltk(WPARAM vk, int extended) {
-  static unsigned short vklut[256];
-  static unsigned short extendedlut[256];
-  if (!vklut[1]) { // init the table
-    unsigned int i;
-    for (i = 0; i < 256; i++) vklut[i] = tolower(i);
-    for (i=VK_F1; i<=VK_F16; i++) vklut[i] = i+(FL_F-(VK_F1-1));
-    for (i=VK_NUMPAD0; i<=VK_NUMPAD9; i++) vklut[i] = i+(FL_KP+'0'-VK_NUMPAD0);
-    for (i = 0; i < sizeof(vktab)/sizeof(*vktab); i++) {
-      vklut[vktab[i].vk] = vktab[i].fltk;
-      extendedlut[vktab[i].vk] = vktab[i].extended;
-    }
-    for (i = 0; i < 256; i++) if (!extendedlut[i]) extendedlut[i] = vklut[i];
-  }
-  return extended ? extendedlut[vk] : vklut[vk];
-}
-
-#if USE_COLORMAP
-extern HPALETTE fl_select_palette(void); // in fl_color_win32.cxx
-#endif
-
-
-/////////////////////////////////////////////////////////////////////////////
-/// Win32 timers
-///
-
-struct Win32Timer
-{
-  UINT_PTR handle;
-  Fl_Timeout_Handler callback;
-  void *data;
-};
-static Win32Timer* win32_timers;
-static int win32_timer_alloc;
-static int win32_timer_used;
-static HWND s_TimerWnd;
-
-static void realloc_timers()
-{
-  if (win32_timer_alloc == 0) {
-    win32_timer_alloc = 8;
-  }
-  win32_timer_alloc *= 2;
-  Win32Timer* new_timers = new Win32Timer[win32_timer_alloc];
-  memset(new_timers, 0, sizeof(Win32Timer) * win32_timer_used);
-  memcpy(new_timers, win32_timers, sizeof(Win32Timer) * win32_timer_used);
-  Win32Timer* delete_me = win32_timers;
-  win32_timers = new_timers;
-  delete [] delete_me;
-}
-
-static void delete_timer(Win32Timer& t)
-{
-  KillTimer(s_TimerWnd, t.handle);
-  memset(&t, 0, sizeof(Win32Timer));
-}
-
-/// END TIMERS
-/////////////////////////////////////////////////////////////////////////////
-
-static Fl_Window* resize_bug_fix;
-
-extern void fl_save_pen(void);
-extern void fl_restore_pen(void);
-
-static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-  // Copy the message to fl_msg so add_handler code can see it, it is
-  // already there if this is called by DispatchMessage, but not if
-  // Windows calls this directly.
-  fl_msg.hwnd = hWnd;
-  fl_msg.message = uMsg;
-  fl_msg.wParam = wParam;
-  fl_msg.lParam = lParam;
-  //fl_msg.time = ???
-  //fl_msg.pt = ???
-  //fl_msg.lPrivate = ???
-
-  Fl_Window *window = fl_find(hWnd);
-
-  if (window) switch (uMsg) {
-
-  case WM_QUIT: // this should not happen?
-    Fl::fatal("WM_QUIT message");
-
-  case WM_CLOSE: // user clicked close box
-    Fl::handle(FL_CLOSE, window);
-    return 0;
-
-  case WM_SYNCPAINT :
-  case WM_NCPAINT :
-  case WM_ERASEBKGND :
-    // Andreas Weitl - WM_SYNCPAINT needs to be passed to DefWindowProc
-    // so that Windows can generate the proper paint messages...
-    // Similarly, WM_NCPAINT and WM_ERASEBKGND need this, too...
-    break;
-
-  case WM_PAINT: {
-    Fl_Region R;
-    Fl_X *i = Fl_X::i(window);
-    i->wait_for_expose = 0;
-    char redraw_whole_window = false;
-    if (!i->region && window->damage()) {
-      // Redraw the whole window...
-      i->region = CreateRectRgn(0, 0, window->w(), window->h());
-      redraw_whole_window = true;
-    }
-
-    // We need to merge WIN32's damage into FLTK's damage.
-    R = CreateRectRgn(0,0,0,0);
-    int r = GetUpdateRgn(hWnd,R,0);
-    if (r==NULLREGION && !redraw_whole_window) {
-      XDestroyRegion(R);
-      break;
-    }
-
-    if (i->region) {
-      // Also tell WIN32 that we are drawing someplace else as well...
-      CombineRgn(i->region, i->region, R, RGN_OR);
-      XDestroyRegion(R);
-    } else {
-      i->region = R;
-    }
-    if (window->type() == FL_DOUBLE_WINDOW) ValidateRgn(hWnd,0);
-    else ValidateRgn(hWnd,i->region);
-
-    window->clear_damage((uchar)(window->damage()|FL_DAMAGE_EXPOSE));
-    // These next two statements should not be here, so that all update
-    // is deferred until Fl::flush() is called during idle.  However WIN32
-    // apparently is very unhappy if we don't obey it and draw right now.
-    // Very annoying!
-    fl_GetDC(hWnd); // Make sure we have a DC for this window...
-    fl_save_pen();
-    i->flush();
-    fl_restore_pen();
-    window->clear_damage();
-    } return 0;
-
-  case WM_LBUTTONDOWN:  mouse_event(window, 0, 1, wParam, lParam); return 0;
-  case WM_LBUTTONDBLCLK:mouse_event(window, 1, 1, wParam, lParam); return 0;
-  case WM_LBUTTONUP:    mouse_event(window, 2, 1, wParam, lParam); return 0;
-  case WM_MBUTTONDOWN:  mouse_event(window, 0, 2, wParam, lParam); return 0;
-  case WM_MBUTTONDBLCLK:mouse_event(window, 1, 2, wParam, lParam); return 0;
-  case WM_MBUTTONUP:    mouse_event(window, 2, 2, wParam, lParam); return 0;
-  case WM_RBUTTONDOWN:  mouse_event(window, 0, 3, wParam, lParam); return 0;
-  case WM_RBUTTONDBLCLK:mouse_event(window, 1, 3, wParam, lParam); return 0;
-  case WM_RBUTTONUP:    mouse_event(window, 2, 3, wParam, lParam); return 0;
-
-  case WM_MOUSEMOVE:
-#ifdef USE_TRACK_MOUSE
-    if (track_mouse_win != window) {
-      TRACKMOUSEEVENT tme;
-      tme.cbSize    = sizeof(TRACKMOUSEEVENT);
-      tme.dwFlags   = TME_LEAVE;
-      tme.hwndTrack = hWnd;
-      _TrackMouseEvent(&tme);
-      track_mouse_win = window;
-    }
-#endif // USE_TRACK_MOUSE
-    mouse_event(window, 3, 0, wParam, lParam);
-    return 0;
-
-  case WM_MOUSELEAVE:
-    if (track_mouse_win == window) { // we left the top level window !
-      Fl_Window *tw = window;
-      while (tw->parent()) tw = tw->window(); // find top level window
-      Fl::belowmouse(0);
-      Fl::handle(FL_LEAVE, tw);
-    }
-    track_mouse_win = 0; // force TrackMouseEvent() restart
-    break;
-
-  case WM_SETFOCUS:
-    if ((Fl::modal_) && (Fl::modal_ != window)) {
-      SetFocus(fl_xid(Fl::modal_));
-      return 0;
-    }
-    Fl::handle(FL_FOCUS, window);
-    break;
-
-  case WM_KILLFOCUS:
-    Fl::handle(FL_UNFOCUS, window);
-    Fl::flush(); // it never returns to main loop when deactivated...
-    break;
-
-  case WM_SHOWWINDOW:
-    if (!window->parent()) {
-      Fl::handle(wParam ? FL_SHOW : FL_HIDE, window);
-    }
-    break;
-
-  case WM_ACTIVATEAPP:
-    // From eric@vfx.sel.sony.com, we should process WM_ACTIVATEAPP
-    // messages to restore the correct state of the shift/ctrl/alt/lock
-    // keys...  Added control, shift, alt, and meta keys, and changed
-    // to use GetAsyncKeyState and do it when wParam is 1
-    // (that means we have focus...)
-    if (wParam)
-    {
-      ulong state = 0;
-      if (GetAsyncKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK;
-      if (GetAsyncKeyState(VK_NUMLOCK)) state |= FL_NUM_LOCK;
-      if (GetAsyncKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK;
-      if (GetAsyncKeyState(VK_CONTROL)&~1) state |= FL_CTRL;
-      if (GetAsyncKeyState(VK_SHIFT)&~1) state |= FL_SHIFT;
-      if (GetAsyncKeyState(VK_MENU)) state |= FL_ALT;
-      if ((GetAsyncKeyState(VK_LWIN)|GetAsyncKeyState(VK_RWIN))&~1) state |= FL_META;
-      Fl::e_state = state;
-      return 0;
-    }
-    break;
-
-  case WM_INPUTLANGCHANGE:
-    fl_get_codepage();
-    break;
-  case WM_IME_COMPOSITION:
-//	if (!fl_is_nt4() && lParam & GCS_RESULTCLAUSE) {
-//		HIMC himc = ImmGetContext(hWnd);
-//		wlen = ImmGetCompositionStringW(himc, GCS_RESULTSTR,
-//			wbuf, sizeof(wbuf)) / sizeof(short);
-//		if (wlen < 0) wlen = 0;
-//		wbuf[wlen] = 0;
-//		ImmReleaseContext(hWnd, himc);
-//	}
-	break;
-  case WM_KEYDOWN:
-  case WM_SYSKEYDOWN:
-  case WM_KEYUP:
-  case WM_SYSKEYUP:
-    // save the keysym until we figure out the characters:
-    Fl::e_keysym = Fl::e_original_keysym = ms2fltk(wParam,lParam&(1<<24));
-    // See if TranslateMessage turned it into a WM_*CHAR message:
-    if (PeekMessageW(&fl_msg, hWnd, WM_CHAR, WM_SYSDEADCHAR, PM_REMOVE))
-    {
-      uMsg = fl_msg.message;
-      wParam = fl_msg.wParam;
-      lParam = fl_msg.lParam;
-    }
-  case WM_DEADCHAR:
-  case WM_SYSDEADCHAR:
-  case WM_CHAR:
-  case WM_SYSCHAR: {
-    ulong state = Fl::e_state & 0xff000000; // keep the mouse button state
-    // if GetKeyState is expensive we might want to comment some of these out:
-    if (GetKeyState(VK_SHIFT)&~1) state |= FL_SHIFT;
-    if (GetKeyState(VK_CAPITAL)) state |= FL_CAPS_LOCK;
-    if (GetKeyState(VK_CONTROL)&~1) state |= FL_CTRL;
-    // Alt gets reported for the Alt-GR switch on foreign keyboards.
-    // so we need to check the event as well to get it right:
-    if ((lParam&(1<<29)) //same as GetKeyState(VK_MENU)
-	&& uMsg != WM_CHAR) state |= FL_ALT;
-    if (GetKeyState(VK_NUMLOCK)) state |= FL_NUM_LOCK;
-    if ((GetKeyState(VK_LWIN)|GetKeyState(VK_RWIN))&~1) {
-      // WIN32 bug?  GetKeyState returns garbage if the user hit the
-      // meta key to pop up start menu.  Sigh.
-      if ((GetAsyncKeyState(VK_LWIN)|GetAsyncKeyState(VK_RWIN))&~1)
-	state |= FL_META;
-    }
-    if (GetKeyState(VK_SCROLL)) state |= FL_SCROLL_LOCK;
-    Fl::e_state = state;
-    static char buffer[1024];
-    if (uMsg == WM_CHAR || uMsg == WM_SYSCHAR) {
-
-      xchar u = (xchar) wParam;
-//    Fl::e_length = fl_unicode2utf(&u, 1, buffer);
-      Fl::e_length = fl_utf8fromwc(buffer, 1024, &u, 1);
-      buffer[Fl::e_length] = 0;
-
-
-    } else if (Fl::e_keysym >= FL_KP && Fl::e_keysym <= FL_KP_Last) {
-      if (state & FL_NUM_LOCK) {
-        // Convert to regular keypress...
-	buffer[0] = Fl::e_keysym-FL_KP;
-	Fl::e_length = 1;
-      } else {
-        // Convert to special keypress...
-	buffer[0] = 0;
-	Fl::e_length = 0;
-	switch (Fl::e_keysym) {
-	  case FL_KP + '0' :
-	    Fl::e_keysym = FL_Insert;
-	    break;
-	  case FL_KP + '1' :
-	    Fl::e_keysym = FL_End;
-	    break;
-	  case FL_KP + '2' :
-	    Fl::e_keysym = FL_Down;
-	    break;
-	  case FL_KP + '3' :
-	    Fl::e_keysym = FL_Page_Down;
-	    break;
-	  case FL_KP + '4' :
-	    Fl::e_keysym = FL_Left;
-	    break;
-	  case FL_KP + '6' :
-	    Fl::e_keysym = FL_Right;
-	    break;
-	  case FL_KP + '7' :
-	    Fl::e_keysym = FL_Home;
-	    break;
-	  case FL_KP + '8' :
-	    Fl::e_keysym = FL_Up;
-	    break;
-	  case FL_KP + '9' :
-	    Fl::e_keysym = FL_Page_Up;
-	    break;
-	  case FL_KP + '.' :
-	    Fl::e_keysym = FL_Delete;
-	    break;
-	  case FL_KP + '/' :
-	  case FL_KP + '*' :
-	  case FL_KP + '-' :
-	  case FL_KP + '+' :
-	    buffer[0] = Fl::e_keysym-FL_KP;
-	    Fl::e_length = 1;
-	    break;
-	}
-      }
-    } else if ((lParam & (1<<31))==0) {
-#ifdef FLTK_PREVIEW_DEAD_KEYS
-      if ((lParam & (1<<24))==0) { // clear if dead key (always?)
-        xchar u = (xchar) wParam;
-        Fl::e_length = fl_utf8fromwc(buffer, 1024, &u, 1);
-        buffer[Fl::e_length] = 0;
-      } else { // set if "extended key" (never printable?)
-        buffer[0] = 0;
-        Fl::e_length = 0;
-      }
-#else
-      buffer[0] = 0;
-      Fl::e_length = 0;
-#endif
-    }
-    Fl::e_text = buffer;
-    if (lParam & (1<<31)) { // key up events.
-      if (Fl::handle(FL_KEYUP, window)) return 0;
-      break;
-    }
-    // for (int i = lParam&0xff; i--;)
-    while (window->parent()) window = window->window();
-    if (Fl::handle(FL_KEYBOARD,window)) {
-	  if (uMsg==WM_DEADCHAR || uMsg==WM_SYSDEADCHAR)
-		Fl::compose_state = 1;
-	  return 0;
-	}
-    break;}
-
-  case WM_MOUSEWHEEL: {
-    static int delta = 0; // running total of all motion
-    delta += (SHORT)(HIWORD(wParam));
-    Fl::e_dx = 0;
-    Fl::e_dy = -delta / WHEEL_DELTA;
-    delta += Fl::e_dy * WHEEL_DELTA;
-    if (Fl::e_dy) Fl::handle(FL_MOUSEWHEEL, window);
-    return 0;
-  }
-
-// This is only defined on Vista and upwards...
-#ifndef WM_MOUSEHWHEEL
-#define WM_MOUSEHWHEEL 0x020E
-#endif
-      
-  case WM_MOUSEHWHEEL: {
-      static int delta = 0; // running total of all motion
-      delta += (SHORT)(HIWORD(wParam));
-      Fl::e_dy = 0;
-      Fl::e_dx = delta / WHEEL_DELTA;
-      delta -= Fl::e_dx * WHEEL_DELTA;
-      if (Fl::e_dx) Fl::handle(FL_MOUSEWHEEL, window);
-      return 0;
-    }
-
-  case WM_GETMINMAXINFO:
-    Fl_X::i(window)->set_minmax((LPMINMAXINFO)lParam);
-    break;
-
-  case WM_SIZE:
-    if (!window->parent()) {
-      if (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXHIDE) {
-	Fl::handle(FL_HIDE, window);
-      } else {
-	Fl::handle(FL_SHOW, window);
-	resize_bug_fix = window;
-	window->size(LOWORD(lParam), HIWORD(lParam));
-      }
-    }
-    break;
-
-  case WM_MOVE: {
-    resize_bug_fix = window;
-    int nx = LOWORD(lParam);
-    int ny = HIWORD(lParam);
-    if (nx & 0x8000) nx -= 65536;
-    if (ny & 0x8000) ny -= 65536;
-    window->position(nx, ny); }
-    break;
-
-  case WM_SETCURSOR:
-    if (LOWORD(lParam) == HTCLIENT) {
-      while (window->parent()) window = window->window();
-      SetCursor(Fl_X::i(window)->cursor);
-      return 0;
-    }
-    break;
-
-#if USE_COLORMAP
-  case WM_QUERYNEWPALETTE :
-    fl_GetDC(hWnd);
-    if (fl_select_palette()) InvalidateRect(hWnd, NULL, FALSE);
-    break;
-
-  case WM_PALETTECHANGED:
-    fl_GetDC(hWnd);
-    if ((HWND)wParam != hWnd && fl_select_palette()) UpdateColors(fl_gc);
-    break;
-
-  case WM_CREATE :
-    fl_GetDC(hWnd);
-    fl_select_palette();
-    break;
-#endif
-
-  case WM_DESTROYCLIPBOARD:
-    fl_i_own_selection[1] = 0;
-    return 1;
-
-  case WM_DISPLAYCHANGE: // occurs when screen configuration (number, position) changes
-    Fl::call_screen_init();
-    Fl::handle(FL_SCREEN_CONFIGURATION_CHANGED, NULL);
-    return 0;
-
-  case WM_CHANGECBCHAIN:
-    if ((hWnd == clipboard_wnd) && (next_clipboard_wnd == (HWND)wParam))
-      next_clipboard_wnd = (HWND)lParam;
-    else
-      SendMessage(next_clipboard_wnd, WM_CHANGECBCHAIN, wParam, lParam);
-    return 0;
-
-  case WM_DRAWCLIPBOARD:
-    // When the clipboard moves between two FLTK windows,
-    // fl_i_own_selection will temporarily be false as we are
-    // processing this message. Hence the need to use fl_find().
-    if (!initial_clipboard && !fl_find(GetClipboardOwner()))
-      fl_trigger_clipboard_notify(1);
-    initial_clipboard = false;
-
-    if (next_clipboard_wnd)
-      SendMessage(next_clipboard_wnd, WM_DRAWCLIPBOARD, wParam, lParam);
-
-    return 0;
-
-  default:
-    if (Fl::handle(0,0)) return 0;
-    break;
-  }
-
-
-  return DefWindowProcW(hWnd, uMsg, wParam, lParam);
-}
-
-////////////////////////////////////////////////////////////////
-// This function gets the dimensions of the top/left borders and
-// the title bar, if there is one, based on the FL_BORDER, FL_MODAL
-// and FL_NONMODAL flags, and on the window's size range.
-// It returns the following values:
-//
-// value | border | title bar
-//   0   |  none  |   no
-//   1   |  fix   |   yes
-//   2   |  size  |   yes
-
-static int fake_X_wm_style(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by, DWORD style, DWORD styleEx,
-                     int w_maxw, int w_minw, int w_maxh, int w_minh, uchar w_size_range_set) {
-  int W = 0, H = 0, xoff = 0, yoff = 0, dx = 0, dy = 0;
-  int ret = bx = by = bt = 0;
-
-  int fallback = 1;
-  if (!w->parent()) {
-    if (fl_xid(w) || style) {
-      // The block below calculates the window borders by requesting the
-      // required decorated window rectangle for a desired client rectangle.
-      // If any part of the function above fails, we will drop to a 
-      // fallback to get the best guess which is always available.
-      
-	 if (!style) {
-	     HWND hwnd = fl_xid(w);
-          // request the style flags of this window, as WIN32 sees them
-          style = GetWindowLong(hwnd, GWL_STYLE);
-          styleEx = GetWindowLong(hwnd, GWL_EXSTYLE);
-	 }
-
-      RECT r;
-      r.left = w->x();
-      r.top = w->y();
-      r.right = w->x()+w->w();
-      r.bottom = w->y()+w->h();
-      // get the decoration rectangle for the desired client rectangle
-      BOOL ok = AdjustWindowRectEx(&r, style, FALSE, styleEx);
-      if (ok) {
-        X = r.left;
-        Y = r.top;
-        W = r.right - r.left;
-        H = r.bottom - r.top;
-        bx = w->x() - r.left;
-        by = r.bottom - w->y() - w->h(); // height of the bottom frame
-        bt = w->y() - r.top - by; // height of top caption bar
-        xoff = bx;
-        yoff = by + bt;
-        dx = W - w->w();
-        dy = H - w->h();
-        if (w_size_range_set && (w_maxw != w_minw || w_maxh != w_minh))
-          ret = 2;
-        else
-          ret = 1;
-        fallback = 0;
-      }
-    }
-  }
-  // This is the original (pre 1.1.7) routine to calculate window border sizes.
-  if (fallback) {
-    if (w->border() && !w->parent()) {
-      if (w_size_range_set && (w_maxw != w_minw || w_maxh != w_minh)) {
-	ret = 2;
-	bx = GetSystemMetrics(SM_CXSIZEFRAME);
-	by = GetSystemMetrics(SM_CYSIZEFRAME);
-      } else {
-	ret = 1;
-	int padding = GetSystemMetrics(SM_CXPADDEDBORDER);
-	NONCLIENTMETRICS ncm;
-	ncm.cbSize = sizeof(NONCLIENTMETRICS);
-	SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
-	bx = GetSystemMetrics(SM_CXFIXEDFRAME) + (padding ? padding + ncm.iBorderWidth : 0);
-	by = GetSystemMetrics(SM_CYFIXEDFRAME) + (padding ? padding + ncm.iBorderWidth : 0);
-      }
-      bt = GetSystemMetrics(SM_CYCAPTION);
-    }
-    //The coordinates of the whole window, including non-client area
-    xoff = bx;
-    yoff = by + bt;
-    dx = 2*bx;
-    dy = 2*by + bt;
-    X = w->x()-xoff;
-    Y = w->y()-yoff;
-    W = w->w()+dx;
-    H = w->h()+dy;
-  }
-
-  //Proceed to positioning the window fully inside the screen, if possible
-  //Find screen that contains most of the window
-  //FIXME: this ought to be the "work area" instead of the entire screen !
-  int scr_x = 0, scr_y = 0, scr_w = 0, scr_h = 0;
-  Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h, X, Y, W, H);
-  //Make border's lower right corner visible
-  if (scr_x+scr_w < X+W) X = scr_x+scr_w - W;
-  if (scr_y+scr_h < Y+H) Y = scr_y+scr_h - H;
-  //Make border's upper left corner visible
-  if (X<scr_x) X = scr_x;
-  if (Y<scr_y) Y = scr_y;
-  //Make client area's lower right corner visible
-  if (scr_x+scr_w < X+dx+ w->w()) X = scr_x+scr_w - w->w() - dx;
-  if (scr_y+scr_h < Y+dy+ w->h()) Y = scr_y+scr_h - w->h() - dy;
-  //Make client area's upper left corner visible
-  if (X+xoff < scr_x) X = scr_x-xoff;
-  if (Y+yoff < scr_y) Y = scr_y-yoff;
-  //Return the client area's top left corner in (X,Y)
-  X+=xoff;
-  Y+=yoff;
-
-  if (w->fullscreen_active()) {
-    bx = by = bt = 0;
-  }
-
-  return ret;
-}
-
-int Fl_X::fake_X_wm(const Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
-  return fake_X_wm_style(w, X, Y, bt, bx, by, 0, 0, w->maxw, w->minw, w->maxh, w->minh, w->size_range_set);
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  UINT flags = SWP_NOSENDCHANGING | SWP_NOZORDER 
-             | SWP_NOACTIVATE | SWP_NOOWNERZORDER;
-  int is_a_resize = (W != w() || H != h());
-  int resize_from_program = (this != resize_bug_fix);
-  if (!resize_from_program) resize_bug_fix = 0;
-  if (X != x() || Y != y()) {
-    force_position(1);
-  } else {
-    if (!is_a_resize) return;
-    flags |= SWP_NOMOVE;
-  }
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (visible_r()) {
-      redraw(); 
-      // only wait for exposure if this window has a size - a window 
-      // with no width or height will never get an exposure event
-      if (i && W>0 && H>0)
-        i->wait_for_expose = 1;
-    }
-  } else {
-    x(X); y(Y);
-    flags |= SWP_NOSIZE;
-  }
-  if (!border()) flags |= SWP_NOACTIVATE;
-  if (resize_from_program && shown()) {
-    if (!resizable()) size_range(w(),h(),w(),h());
-    int dummy_x, dummy_y, bt, bx, by;
-    //Ignore window managing when resizing, so that windows (and more
-    //specifically menus) can be moved offscreen.
-    if (Fl_X::fake_X_wm(this, dummy_x, dummy_y, bt, bx, by)) {
-      X -= bx;
-      Y -= by+bt;
-      W += 2*bx;
-      H += 2*by+bt;
-    }
-    // avoid zero size windows. A zero sized window on Win32
-    // will cause continouly  new redraw events.
-    if (W<=0) W = 1;
-    if (H<=0) H = 1;
-    SetWindowPos(i->xid, 0, X, Y, W, H, flags);
-  }
-}
-
-void Fl_X::make_fullscreen(int X, int Y, int W, int H) {
-  int top, bottom, left, right;
-  int sx, sy, sw, sh;
-
-  top = w->fullscreen_screen_top;
-  bottom = w->fullscreen_screen_bottom;
-  left = w->fullscreen_screen_left;
-  right = w->fullscreen_screen_right;
-
-  if ((top < 0) || (bottom < 0) || (left < 0) || (right < 0)) {
-    top = Fl::screen_num(X, Y, W, H);
-    bottom = top;
-    left = top;
-    right = top;
-  }
-
-  Fl::screen_xywh(sx, sy, sw, sh, top);
-  Y = sy;
-  Fl::screen_xywh(sx, sy, sw, sh, bottom);
-  H = sy + sh - Y;
-  Fl::screen_xywh(sx, sy, sw, sh, left);
-  X = sx;
-  Fl::screen_xywh(sx, sy, sw, sh, right);
-  W = sx + sw - X;
-
-  DWORD flags = GetWindowLong(xid, GWL_STYLE);
-  flags = flags & ~(WS_THICKFRAME|WS_CAPTION);
-  SetWindowLong(xid, GWL_STYLE, flags);
-
-  // SWP_NOSENDCHANGING is so that we can override size limits
-  SetWindowPos(xid, HWND_TOP, X, Y, W, H, SWP_NOSENDCHANGING | SWP_FRAMECHANGED);
-}
-
-void Fl_Window::fullscreen_x() {
-  _set_fullscreen();
-  i->make_fullscreen(x(), y(), w(), h());
-  Fl::handle(FL_FULLSCREEN, this);
-}
-
-void Fl_Window::fullscreen_off_x(int X, int Y, int W, int H) {
-  _clear_fullscreen();
-  DWORD style = GetWindowLong(fl_xid(this), GWL_STYLE);
-  // Remove the xid temporarily so that Fl_X::fake_X_wm() behaves like it
-  // does in Fl_X::make().
-  HWND xid = fl_xid(this);
-  Fl_X::i(this)->xid = NULL;
-  int wx, wy, bt, bx, by;
-  switch (Fl_X::fake_X_wm(this, wx, wy, bt, bx, by)) {
-  case 0: 
-    break;
-  case 1: 
-    style |= WS_CAPTION; 
-    break;
-  case 2: 
-    if (border()) {
-      style |= WS_THICKFRAME | WS_CAPTION; 
-    }
-    break;
-  }
-  Fl_X::i(this)->xid = xid;
-  // Adjust for decorations (but not if that puts the decorations
-  // outside the screen)
-  if ((X != x()) || (Y != y())) {
-    X -= bx;
-    Y -= by+bt;
-  }
-  W += bx*2;
-  H += by*2+bt;
-  SetWindowLong(fl_xid(this), GWL_STYLE, style);
-  SetWindowPos(fl_xid(this), 0, X, Y, W, H,
-               SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
-  Fl::handle(FL_FULLSCREEN, this);
-}
-
-
-////////////////////////////////////////////////////////////////
-
-/*
- * This silly little class remembers the name of all window classes 
- * we register to avoid double registration. It has the added bonus 
- * of freeing everything on application close as well.
- */
-class NameList {
-public:
-  NameList() { name = (char**)malloc(sizeof(char**)); NName = 1; nName = 0; }
-  ~NameList() { 
-    int i;
-    for (i=0; i<nName; i++) free(name[i]);
-    if (name) free(name); 
-  }
-  void add_name(const char *n) {
-    if (NName==nName) {
-      NName += 5;
-      name = (char**)realloc(name, NName * sizeof(char*));
-    }
-    name[nName++] = strdup(n);
-  }
-  char has_name(const char *n) {
-    int i;
-    for (i=0; i<nName; i++) {
-      if (strcmp(name[i], n)==0) return 1;
-    }
-    return 0;
-  }
-private:
-  char **name;
-  int nName, NName;
-};
-
-void fl_fix_focus(); // in Fl.cxx
-
-char fl_show_iconic;	// hack for Fl_Window::iconic()
-// int fl_background_pixel = -1; // color to use for background
-UINT fl_wake_msg = 0;
-int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
-
-Fl_X* Fl_X::make(Fl_Window* w) {
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
-
-  fl_open_display();
-
-  // if the window is a subwindow and our parent is not mapped yet, we
-  // mark this window visible, so that mapping the parent at a later
-  // point in time will call this function again to finally map the subwindow.
-  if (w->parent() && !Fl_X::i(w->window())) {
-    w->set_visible();
-    return 0L;
-  }
-
-  static NameList class_name_list;
-  static const char *first_class_name = 0L;
-  const char *class_name = w->xclass();
-  if (!class_name) class_name = first_class_name; // reuse first class name used
-  if (!class_name) class_name = "FLTK"; // default to create a "FLTK" WNDCLASS
-  if (!first_class_name) {
-    first_class_name = class_name;
-  }
-
-  wchar_t class_namew[100]; // (limited) buffer for Windows class name
-
-  // convert UTF-8 class_name to wchar_t for RegisterClassExW and CreateWindowExW
-
-  fl_utf8toUtf16(class_name,
-		 (unsigned)strlen(class_name),		// in
-		 (unsigned short*)class_namew,		// out
-		 (unsigned)sizeof(class_namew)/sizeof(wchar_t));	// max. size
-
-  if (!class_name_list.has_name(class_name)) {
-    WNDCLASSEXW wcw;
-    memset(&wcw, 0, sizeof(wcw));
-    wcw.cbSize = sizeof(WNDCLASSEXW);
-
-    // Documentation states a device context consumes about 800 bytes
-    // of memory... so who cares? If 800 bytes per window is what it
-    // takes to speed things up, I'm game.
-    //wc.style = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC | CS_DBLCLKS;
-    wcw.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
-    wcw.lpfnWndProc = (WNDPROC)WndProc;
-    wcw.cbClsExtra = wcw.cbWndExtra = 0;
-    wcw.hInstance = fl_display;
-    if (!w->icon() && !w->icon_->count)
-      w->icon((void *)LoadIcon(NULL, IDI_APPLICATION));
-    wcw.hIcon = wcw.hIconSm = (HICON)w->icon();
-    wcw.hCursor = LoadCursor(NULL, IDC_ARROW);
-    //uchar r,g,b; Fl::get_color(FL_GRAY,r,g,b);
-    //wc.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(r,g,b));
-    wcw.hbrBackground = NULL;
-    wcw.lpszMenuName = NULL;
-    wcw.lpszClassName = class_namew;
-    RegisterClassExW(&wcw);
-    class_name_list.add_name(class_name);
-  }
-
-  const wchar_t* message_namew = L"FLTK::ThreadWakeup";
-  if (!fl_wake_msg) fl_wake_msg = RegisterWindowMessageW(message_namew);
-
-  HWND parent;
-  DWORD style = WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-  DWORD styleEx = WS_EX_LEFT;
-
-  int xp = w->x();
-  int yp = w->y();
-  int wp = w->w();
-  int hp = w->h();
-
-  int showit = 1;
-
-  if (w->parent()) {
-    style |= WS_CHILD;
-    styleEx |= WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT;
-    parent = fl_xid(w->window());
-  } else {
-    if (!w->size_range_set) {
-      if (w->resizable()) {
-	Fl_Widget *o = w->resizable();
-	int minw = o->w(); if (minw > 100) minw = 100;
-	int minh = o->h(); if (minh > 100) minh = 100;
-	w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-      } else {
-	w->size_range(w->w(), w->h(), w->w(), w->h());
-      }
-    }
-    styleEx |= WS_EX_WINDOWEDGE | WS_EX_CONTROLPARENT;
-
-    int wintype = 0;
-    if (w->border() && !w->parent()) {
-      if (w->size_range_set && (w->maxw != w->minw || w->maxh != w->minh)) wintype = 2;
-	  else wintype = 1;
-    }
-
-    switch (wintype) {
-      // No border (used for menus)
-      case 0:
-        style |= WS_POPUP;
-        styleEx |= WS_EX_TOOLWINDOW;
-	      break;
-
-      // Thin border and title bar
-      case 1:
-        style |= WS_DLGFRAME | WS_CAPTION;
-        if (!w->modal())
-          style |= WS_SYSMENU | WS_MINIMIZEBOX;
-        break;
-
-      // Thick, resizable border and title bar, with maximize button
-      case 2:
-        style |= WS_THICKFRAME | WS_SYSMENU | WS_MAXIMIZEBOX | WS_CAPTION;
-        if (!w->modal())
-          style |= WS_MINIMIZEBOX;
-        break;
-    }
-
-    int xwm = xp , ywm = yp , bt, bx, by;
-    fake_X_wm_style(w, xwm, ywm, bt, bx, by, style, styleEx, w->maxw, w->minw, w->maxh, w->minh, w->size_range_set);
-    if (by+bt) {
-      wp += 2*bx;
-      hp += 2*by+bt;
-    }
-    if (!w->force_position()) {
-      xp = yp = CW_USEDEFAULT;
-    } else {
-      if (!Fl::grab()) {
-	xp = xwm; yp = ywm;
-        w->x(xp);w->y(yp);
-      }
-      xp -= bx;
-      yp -= by+bt;
-    }
-
-    parent = 0;
-    if (w->non_modal() && Fl_X::first && !fl_disable_transient_for) {
-      // find some other window to be "transient for":
-      Fl_Window* w = Fl_X::first->w;
-      while (w->parent()) w = w->window();
-      parent = fl_xid(w);
-      if (!w->visible()) showit = 0;
-    } else if (Fl::grab()) parent = fl_xid(Fl::grab());
-  }
-
-  Fl_X* x = new Fl_X;
-  x->other_xid = 0;
-  x->setwindow(w);
-  x->region = 0;
-  x->private_dc = 0;
-  x->cursor = LoadCursor(NULL, IDC_ARROW);
-  x->custom_cursor = 0;
-  if (!fl_codepage) fl_get_codepage();
-
-  WCHAR *lab = NULL;
-  if (w->label()) {
-    size_t l = strlen(w->label());
-//  lab = (WCHAR*) malloc((l + 1) * sizeof(short));
-//  l = fl_utf2unicode((unsigned char*)w->label(), l, (xchar*)lab);
-//  lab[l] = 0;
-    unsigned wlen = fl_utf8toUtf16(w->label(), (unsigned) l, NULL, 0); // Pass NULL to query length
-    wlen++;
-    lab = (WCHAR *) malloc(sizeof(WCHAR)*wlen);
-    wlen = fl_utf8toUtf16(w->label(), (unsigned) l, (unsigned short*)lab, wlen);
-    lab[wlen] = 0;
-  }
-  x->xid = CreateWindowExW(
-    styleEx,
-    class_namew, lab, style,
-    xp, yp, wp, hp,
-    parent,
-    NULL, // menu
-    fl_display,
-    NULL // creation parameters
-  );
-  if (lab) free(lab);
-
-  x->next = Fl_X::first;
-  Fl_X::first = x;
-
-  x->set_icons();
-
-  if (w->fullscreen_active()) {
-  /* We need to make sure that the fullscreen is created on the
-     default monitor, ie the desktop where the shortcut is located
-     etc. This requires that CreateWindow is called with CW_USEDEFAULT
-     for x and y. We can then use GetWindowRect to determine which
-     monitor the window was placed on. */
-    RECT rect;
-    GetWindowRect(x->xid, &rect);
-    x->make_fullscreen(rect.left, rect.top, 
-                       rect.right - rect.left, rect.bottom - rect.top);
-  }
-
-  // Setup clipboard monitor target if there are registered handlers and
-  // no window is targeted.
-  if (!fl_clipboard_notify_empty() && clipboard_wnd == NULL)
-    fl_clipboard_notify_target(x->xid);
-
-  x->wait_for_expose = 1;
-  if (fl_show_iconic) {showit = 0; fl_show_iconic = 0;}
-  if (showit) {
-    w->set_visible();
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_SHOW); // get child windows to appear
-    Fl::e_number = old_event;
-    w->redraw(); // force draw to happen
-  }
-
-  // Needs to be done before ShowWindow() to get the correct behaviour
-  // when we get WM_SETFOCUS.
-  if (w->modal()) {Fl::modal_ = w; fl_fix_focus();}
-
-  // If we've captured the mouse, we dont want to activate any
-  // other windows from the code, or we lose the capture.
-  ShowWindow(x->xid, !showit ? SW_SHOWMINNOACTIVE :
-	     (Fl::grab() || (styleEx & WS_EX_TOOLWINDOW)) ? SW_SHOWNOACTIVATE : SW_SHOWNORMAL);
-
-  // Register all windows for potential drag'n'drop operations
-  RegisterDragDrop(x->xid, flIDropTarget);
-
-  if (!im_enabled)
-    flImmAssociateContextEx(x->xid, 0, 0);
-
-  return x;
-}
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-/// Win32 timers
-///
-
-
-static LRESULT CALLBACK s_TimerProc(HWND hwnd, UINT msg,
-                                    WPARAM wParam, LPARAM lParam)
-{
-  switch (msg) {
-  case WM_TIMER:
-    {
-      unsigned int id = (unsigned) (wParam - 1);
-      if (id < (unsigned int)win32_timer_used && win32_timers[id].handle) {
-        Fl_Timeout_Handler cb   = win32_timers[id].callback;
-        void*              data = win32_timers[id].data;
-        delete_timer(win32_timers[id]);
-        if (cb) {
-          (*cb)(data);
-        }
-      }
-    }
-    return 0;
-
-  default:
-    break;
-  }
-
-  return DefWindowProc(hwnd, msg, wParam, lParam);
-}
-
-void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  repeat_timeout(time, cb, data);
-}
-
-void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
-{
-  int timer_id = -1;
-  for (int i = 0;  i < win32_timer_used;  ++i) {
-    if ( !win32_timers[i].handle ) {
-      timer_id = i;
-      break;
-    }
-  }
-  if (timer_id == -1) {
-    if (win32_timer_used == win32_timer_alloc) {
-      realloc_timers();
-    }
-    timer_id = win32_timer_used++;
-  }
-  unsigned int elapsed = (unsigned int)(time * 1000);
-
-  if ( !s_TimerWnd ) {
-    const char* timer_class = "FLTimer";
-    WNDCLASSEX wc;
-    memset(&wc, 0, sizeof(wc));
-    wc.cbSize = sizeof (wc);
-    wc.style = CS_CLASSDC;
-    wc.lpfnWndProc = (WNDPROC)s_TimerProc;
-    wc.hInstance = fl_display;
-    wc.lpszClassName = timer_class;
-    /*ATOM atom =*/ RegisterClassEx(&wc);
-    // create a zero size window to handle timer events
-    s_TimerWnd = CreateWindowEx(WS_EX_LEFT | WS_EX_TOOLWINDOW,
-                                timer_class, "",
-                                WS_POPUP,
-                                0, 0, 0, 0,
-                                NULL, NULL, fl_display, NULL);
-    // just in case this OS won't let us create a 0x0 size window:
-    if (!s_TimerWnd)
-      s_TimerWnd = CreateWindowEx(WS_EX_LEFT | WS_EX_TOOLWINDOW,
-				  timer_class, "",
-				  WS_POPUP,
-				  0, 0, 1, 1,
-				  NULL, NULL, fl_display, NULL);
-    ShowWindow(s_TimerWnd, SW_SHOWNOACTIVATE);
-  }
-
-  win32_timers[timer_id].callback = cb;
-  win32_timers[timer_id].data     = data;
-
-  win32_timers[timer_id].handle =
-    SetTimer(s_TimerWnd, timer_id + 1, elapsed, NULL);
-}
-
-int Fl::has_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  for (int i = 0;  i < win32_timer_used;  ++i) {
-    Win32Timer& t = win32_timers[i];
-    if (t.handle  &&  t.callback == cb  &&  t.data == data) {
-      return 1;
-    }
-  }
-  return 0;
-}
-
-void Fl::remove_timeout(Fl_Timeout_Handler cb, void* data)
-{
-  int i;
-  for (i = 0;  i < win32_timer_used;  ++i) {
-    Win32Timer& t = win32_timers[i];
-    if (t.handle  &&  t.callback == cb  &&
-      (t.data == data  ||  data == NULL)) {
-      delete_timer(t);
-    }
-  }
-}
-
-/// END TIMERS
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-////////////////////////////////////////////////////////////////
-
-HINSTANCE fl_display = GetModuleHandle(NULL);
-
-void Fl_Window::size_range_() {
-  size_range_set = 1;
-}
-
-void Fl_X::set_minmax(LPMINMAXINFO minmax)
-{
-  int td, wd, hd, dummy_x, dummy_y;
-
-  fake_X_wm(w, dummy_x, dummy_y, td, wd, hd);
-  wd *= 2;
-  hd *= 2;
-  hd += td;
-
-  minmax->ptMinTrackSize.x = w->minw + wd;
-  minmax->ptMinTrackSize.y = w->minh + hd;
-  if (w->maxw) {
-    minmax->ptMaxTrackSize.x = w->maxw + wd;
-    minmax->ptMaxSize.x = w->maxw + wd;
-  }
-  if (w->maxh) {
-    minmax->ptMaxTrackSize.y = w->maxh + hd;
-    minmax->ptMaxSize.y = w->maxh + hd;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-#include <FL/filename.H> // need so FL_EXPORT fl_filename_name works
-
-// returns pointer to the filename, or null if name ends with '/'
-const char *fl_filename_name(const char *name) {
-  const char *p,*q;
-  if (!name) return (0);
-  q = name;
-  if (q[0] && q[1]==':') q += 2; // skip leading drive letter
-  for (p = q; *p; p++) if (*p == '/' || *p == '\\') q = p+1;
-  return q;
-}
-
-void Fl_Window::label(const char *name,const char *iname) {
-  Fl_Widget::label(name);
-  iconlabel_ = iname;
-  if (shown() && !parent()) {
-    if (!name) name = "";
-    size_t l = strlen(name);
-//  WCHAR *lab = (WCHAR*) malloc((l + 1) * sizeof(short));
-//  l = fl_utf2unicode((unsigned char*)name, l, (xchar*)lab);
-    unsigned wlen = fl_utf8toUtf16(name, (unsigned) l, NULL, 0); // Pass NULL to query length
-    wlen++;
-    unsigned short * lab = (unsigned short*)malloc(sizeof(unsigned short)*wlen);
-    wlen = fl_utf8toUtf16(name, (unsigned) l, lab, wlen);
-    lab[wlen] = 0;
-    SetWindowTextW(i->xid, (WCHAR *)lab);
-    free(lab);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-static HICON image_to_icon(const Fl_RGB_Image *image, bool is_icon,
-                           int hotx, int hoty) {
-  BITMAPV5HEADER bi;
-  HBITMAP bitmap, mask;
-  DWORD *bits;
-  HICON icon;
-
-  if (!is_icon) {
-    if ((hotx < 0) || (hotx >= image->w()))
-      return NULL;
-    if ((hoty < 0) || (hoty >= image->h()))
-      return NULL;
-  }
-
-  memset(&bi, 0, sizeof(BITMAPV5HEADER));
-
-  bi.bV5Size        = sizeof(BITMAPV5HEADER);
-  bi.bV5Width       = image->w();
-  bi.bV5Height      = -image->h(); // Negative for top-down
-  bi.bV5Planes      = 1;
-  bi.bV5BitCount    = 32;
-  bi.bV5Compression = BI_BITFIELDS;
-  bi.bV5RedMask     = 0x00FF0000;
-  bi.bV5GreenMask   = 0x0000FF00;
-  bi.bV5BlueMask    = 0x000000FF;
-  bi.bV5AlphaMask   = 0xFF000000;
-
-  HDC hdc;
-
-  hdc = GetDC(NULL);
-  bitmap = CreateDIBSection(hdc, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
-  ReleaseDC(NULL, hdc);
-
-  if (bits == NULL)
-    return NULL;
-
-  const uchar *i = (const uchar*)*image->data();
-  const int extra_data = image->ld() ? (image->ld()-image->w()*image->d()) : 0;
-
-  for (int y = 0; y < image->h(); y++) {
-    for (int x = 0; x < image->w(); x++) {
-      switch (image->d()) {
-      case 1:
-        *bits = (0xff<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 2:
-        *bits = (i[1]<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 3:
-        *bits = (0xff<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      case 4:
-        *bits = (i[3]<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      }
-      i += image->d();
-      bits++;
-    }
-    i += extra_data;
-  }
-
-  // A mask bitmap is still needed even though it isn't used
-  mask = CreateBitmap(image->w(),image->h(),1,1,NULL);
-  if (mask == NULL) {
-    DeleteObject(bitmap);
-    return NULL;
-  }
-
-  ICONINFO ii;
-
-  ii.fIcon    = is_icon;
-  ii.xHotspot = hotx;
-  ii.yHotspot = hoty;
-  ii.hbmMask  = mask;
-  ii.hbmColor = bitmap;
-
-  icon = CreateIconIndirect(&ii);
-
-  DeleteObject(bitmap);
-  DeleteObject(mask);
-
-  return icon;
-}
-
-////////////////////////////////////////////////////////////////
-
-static HICON default_big_icon = NULL;
-static HICON default_small_icon = NULL;
-
-static const Fl_RGB_Image *find_best_icon(int ideal_width, 
-                                          const Fl_RGB_Image *icons[],
-                                          int count) {
-  const Fl_RGB_Image *best;
-
-  best = NULL;
-
-  for (int i = 0;i < count;i++) {
-    if (best == NULL)
-      best = icons[i];
-    else {
-      if (best->w() < ideal_width) {
-        if (icons[i]->w() > best->w())
-          best = icons[i];
-      } else {
-        if ((icons[i]->w() >= ideal_width) &&
-            (icons[i]->w() < best->w()))
-          best = icons[i];
-      }
-    }
-  }
-
-  return best;
-}
-
-void Fl_X::set_default_icons(const Fl_RGB_Image *icons[], int count) {
-  const Fl_RGB_Image *best_big, *best_small;
-
-  if (default_big_icon != NULL)
-    DestroyIcon(default_big_icon);
-  if (default_small_icon != NULL)
-    DestroyIcon(default_small_icon);
-
-  default_big_icon = NULL;
-  default_small_icon = NULL;
-
-  best_big = find_best_icon(GetSystemMetrics(SM_CXICON), icons, count);
-  best_small = find_best_icon(GetSystemMetrics(SM_CXSMICON), icons, count);
-
-  if (best_big != NULL)
-    default_big_icon = image_to_icon(best_big, true, 0, 0);
-
-  if (best_small != NULL)
-    default_small_icon = image_to_icon(best_small, true, 0, 0);
-}
-
-void Fl_X::set_default_icons(HICON big_icon, HICON small_icon) {
-  if (default_big_icon != NULL)
-    DestroyIcon(default_big_icon);
-  if (default_small_icon != NULL)
-    DestroyIcon(default_small_icon);
-
-  default_big_icon = NULL;
-  default_small_icon = NULL;
-
-  if (big_icon != NULL)
-    default_big_icon = CopyIcon(big_icon);
-  if (small_icon != NULL)
-    default_small_icon = CopyIcon(small_icon);
-}
-
-void Fl_X::set_icons() {
-  HICON big_icon, small_icon;
-
-  // Windows doesn't copy the icons, so we have to "leak" them when
-  // setting, and clean up when we change to some other icons.
-  big_icon = (HICON)SendMessage(xid, WM_GETICON, ICON_BIG, 0);
-  if ((big_icon != NULL) && (big_icon != default_big_icon))
-    DestroyIcon(big_icon);
-  small_icon = (HICON)SendMessage(xid, WM_GETICON, ICON_SMALL, 0);
-  if ((small_icon != NULL) && (small_icon != default_small_icon))
-    DestroyIcon(small_icon);
-
-  big_icon = NULL;
-  small_icon = NULL;
-
-  if (w->icon_->count) {
-    const Fl_RGB_Image *best_big, *best_small;
-
-    best_big = find_best_icon(GetSystemMetrics(SM_CXICON),
-                              (const Fl_RGB_Image **)w->icon_->icons,
-                              w->icon_->count);
-    best_small = find_best_icon(GetSystemMetrics(SM_CXSMICON),
-                                (const Fl_RGB_Image **)w->icon_->icons,
-                                w->icon_->count);
-
-    if (best_big != NULL)
-      big_icon = image_to_icon(best_big, true, 0, 0);
-    if (best_small != NULL)
-      small_icon = image_to_icon(best_small, true, 0, 0);
-  } else {
-    if ((w->icon_->big_icon != NULL) || (w->icon_->small_icon != NULL)) {
-      big_icon = w->icon_->big_icon;
-      small_icon = w->icon_->small_icon;
-    } else {
-      big_icon = default_big_icon;
-      small_icon = default_small_icon;
-    }
-  }
-
-  SendMessage(xid, WM_SETICON, ICON_BIG, (LPARAM)big_icon);
-  SendMessage(xid, WM_SETICON, ICON_SMALL, (LPARAM)small_icon);
-}
-
-/** Sets the default window icons.
-
-  Convenience function to set the default icons using Windows'
-  native HICON icon handles.
-
-  The given icons are copied. You can free the icons immediately after
-  this call.
-
-  \param[in] big_icon default large icon for all windows
-                      subsequently created
-  \param[in] small_icon default small icon for all windows
-                        subsequently created
-
-  \see Fl_Window::default_icon(const Fl_RGB_Image *)
-  \see Fl_Window::default_icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::icon(const Fl_RGB_Image *)
-  \see Fl_Window::icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::icons(HICON, HICON)
- */
-void Fl_Window::default_icons(HICON big_icon, HICON small_icon) {
-  Fl_X::set_default_icons(big_icon, small_icon);
-}
-
-/** Sets the window icons.
-
-  Convenience function to set this window's icons using Windows'
-  native HICON icon handles.
-
-  The given icons are copied. You can free the icons immediately after
-  this call.
-
-  \param[in] big_icon large icon for this window
-  \param[in] small_icon small icon for this windows
-
-  \see Fl_Window::default_icon(const Fl_RGB_Image *)
-  \see Fl_Window::default_icons(const Fl_RGB_Image *[], int)
-  \see Fl_Window::default_icons(HICON, HICON)
-  \see Fl_Window::icon(const Fl_RGB_Image *)
-  \see Fl_Window::icons(const Fl_RGB_Image *[], int)
- */
-void Fl_Window::icons(HICON big_icon, HICON small_icon) {
-  free_icons();
-
-  if (big_icon != NULL)
-    icon_->big_icon = CopyIcon(big_icon);
-  if (small_icon != NULL)
-    icon_->small_icon = CopyIcon(small_icon);
-
-  if (i)
-    i->set_icons();
-}
-
-////////////////////////////////////////////////////////////////
-
-#ifndef IDC_HAND
-#  define IDC_HAND  MAKEINTRESOURCE(32649)
-#endif // !IDC_HAND
-
-int Fl_X::set_cursor(Fl_Cursor c) {
-  LPSTR n;
-  HCURSOR new_cursor;
-
-  if (c == FL_CURSOR_NONE)
-    new_cursor = NULL;
-  else {
-    switch (c) {
-    case FL_CURSOR_ARROW:   n = IDC_ARROW; break;
-    case FL_CURSOR_CROSS:   n = IDC_CROSS; break;
-    case FL_CURSOR_WAIT:    n = IDC_WAIT; break;
-    case FL_CURSOR_INSERT:  n = IDC_IBEAM; break;
-    case FL_CURSOR_HAND:    n = IDC_HAND; break;
-    case FL_CURSOR_HELP:    n = IDC_HELP; break;
-    case FL_CURSOR_MOVE:    n = IDC_SIZEALL; break;
-    case FL_CURSOR_N:
-    case FL_CURSOR_S:
-      // FIXME: Should probably have fallbacks for these instead
-    case FL_CURSOR_NS:      n = IDC_SIZENS; break;
-    case FL_CURSOR_NE:
-    case FL_CURSOR_SW:
-      // FIXME: Dito.
-    case FL_CURSOR_NESW:    n = IDC_SIZENESW; break;
-    case FL_CURSOR_E:
-    case FL_CURSOR_W:
-      // FIXME: Dito.
-    case FL_CURSOR_WE:      n = IDC_SIZEWE; break;
-    case FL_CURSOR_SE:
-    case FL_CURSOR_NW:
-      // FIXME: Dito.
-    case FL_CURSOR_NWSE:    n = IDC_SIZENWSE; break;
-    default:
-      return 0;
-    }
-
-    new_cursor = LoadCursor(NULL, n);
-    if (new_cursor == NULL)
-      return 0;
-  }
-
-  if ((cursor != NULL) && custom_cursor)
-    DestroyIcon(cursor);
-
-  cursor = new_cursor;
-  custom_cursor = 0;
-
-  SetCursor(cursor);
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  HCURSOR new_cursor;
-
-  new_cursor = image_to_icon(image, false, hotx, hoty);
-  if (new_cursor == NULL)
-    return 0;
-
-  if ((cursor != NULL) && custom_cursor)
-    DestroyIcon(cursor);
-
-  cursor = new_cursor;
-  custom_cursor = 1;
-
-  SetCursor(cursor);
-
-  return 1;
-}
-
-////////////////////////////////////////////////////////////////
-// Implement the virtual functions for the base Fl_Window class:
-
-// If the box is a filled rectangle, we can make the redisplay *look*
-// faster by using X's background pixel erasing.  We can make it
-// actually *be* faster by drawing the frame only, this is done by
-// setting fl_boxcheat, which is seen by code in fl_drawbox.cxx:
-// For WIN32 it looks like all windows share a background color, so
-// I use FL_GRAY for this and only do this cheat for windows that are
-// that color.
-// Actually it is totally disabled.
-// Fl_Widget *fl_boxcheat;
-//static inline int can_boxcheat(uchar b) {return (b==1 || (b&2) && b<=15);}
-
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown()) {
-    // if (can_boxcheat(box())) fl_background_pixel = fl_xpixel(color());
-    Fl_X::make(this);
-  } else {
-    // Once again, we would lose the capture if we activated the window.
-    if (IsIconic(i->xid)) OpenIcon(i->xid);
-    if (!fl_capture) BringWindowToTop(i->xid);
-    //ShowWindow(i->xid,fl_capture?SW_SHOWNOACTIVATE:SW_RESTORE);
-  }
-#ifdef USE_PRINT_BUTTON
-  void preparePrintFront(void);
-  preparePrintFront();
-#endif
-}
-
-Fl_Window *Fl_Window::current_;
-// the current context
-HDC fl_gc = 0;
-// the current window handle, initially set to -1 so we can correctly
-// allocate fl_GetDC(0)
-HWND fl_window = NULL;
-
-// Here we ensure only one GetDC is ever in place.
-HDC fl_GetDC(HWND w) {
-  if (fl_gc) {
-    if (w == fl_window  &&  fl_window != NULL) return fl_gc;
-    if (fl_window) fl_release_dc(fl_window, fl_gc); // ReleaseDC
-  }
-  fl_gc = GetDC(w);
-  fl_save_dc(w, fl_gc);
-  fl_window = w;
-  // calling GetDC seems to always reset these: (?)
-  SetTextAlign(fl_gc, TA_BASELINE|TA_LEFT);
-  SetBkMode(fl_gc, TRANSPARENT);
-
-  return fl_gc;
-}
-
-// make X drawing go into this window (called by subclass flush() impl.)
-void Fl_Window::make_current() {
-  fl_GetDC(fl_xid(this));
-
-#if USE_COLORMAP
-  // Windows maintains a hardware and software color palette; the
-  // SelectPalette() call updates the current soft->hard mapping
-  // for all drawing calls, so we must select it here before any
-  // code does any drawing...
-
-  fl_select_palette();
-#endif // USE_COLORMAP
-
-  current_ = this;
-  fl_clip_region(0);
-
-
-}
-
-/* Make sure that all allocated fonts are released. This works only if 
-   Fl::run() is allowed to exit by closing all windows. Calling 'exit(int)'
-   will not automatically free any fonts. */
-void fl_free_fonts(void)
-{
-// remove the Fl_Font_Descriptor chains
-  int i;
-  Fl_Fontdesc * s;
-  Fl_Font_Descriptor * f;
-  Fl_Font_Descriptor * ff;
-  for (i=0; i<FL_FREE_FONT; i++) {
-    s = fl_fonts + i;
-    for (f=s->first; f; f=ff) {
-      ff = f->next;
-      delete f;
-      s->first = ff;
-    }
-  }
-}
-
-
-///////////////////////////////////////////////////////////////////////
-//
-//  The following routines help fix a problem with the leaking of Windows
-//  Device Context (DC) objects. The 'proper' protocol is for a program to
-//  acquire a DC, save its state, do the modifications needed for drawing,
-//  perform the drawing, restore the initial state, and release the DC. In
-//  FLTK, the save and restore steps have previously been omitted and DCs are
-//  not properly released, leading to a great number of DC leaks. As some
-//  Windows "OSs" will hang when any process exceeds roughly 10,000 GDI objects,
-//  it is important to control GDI leaks, which are much more important than memory
-//  leaks. The following struct, global variable, and routines help implement
-//  the above protocol for those cases where the GetDC and RestoreDC are not in
-//  the same routine. For each GetDC, fl_save_dc is used to create an entry in 
-//  a linked list that saves the window handle, the DC handle, and the initial
-//  state. When the DC is to be released, 'fl_release_dc' is called. It restores
-//  the initial state and releases the DC. When the program exits, 'fl_cleanup_dc_list'
-//  frees any remaining nodes in the list.
-
-struct Win_DC_List {      // linked list 
-  HWND    window;         // window handle
-  HDC     dc;             // device context handle
-  int     saved_dc;       // initial state of DC
-  Win_DC_List * next;     // pointer to next item
-};
-
-static Win_DC_List * win_DC_list = 0;
-
-void fl_save_dc( HWND w, HDC dc) {
-  Win_DC_List * t;
-  t = new Win_DC_List;
-  t->window = w;
-  t->dc = dc;
-  t->saved_dc = SaveDC(dc);
-  if (win_DC_list)
-    t->next = win_DC_list;
-  else
-    t->next = NULL;
-  win_DC_list = t;
-}
-
-void fl_release_dc(HWND w, HDC dc) {
-  Win_DC_List * t= win_DC_list;
-  Win_DC_List * prev = 0;
-  if (!t)
-    return;
-  do {
-    if (t->dc == dc) {
-      RestoreDC(dc, t->saved_dc);
-      ReleaseDC(w, dc);
-      if (!prev) {
-        win_DC_list = t->next;   // delete first item
-      } else {
-        prev->next = t->next;       // one in the middle
-      }
-      delete (t);
-      return;
-    }
-    prev = t;
-    t = t->next;
-  } while (t);
-}
-
-void fl_cleanup_dc_list(void) {          // clean up the list
-  Win_DC_List * t = win_DC_list;
-  if (!t)return;
-  do {
-    RestoreDC(t->dc, t->saved_dc);
-    ReleaseDC(t->window, t->dc);
-    win_DC_list = t->next;
-    delete (t);
-    t = win_DC_list;
-  } while(t);
-}
-
-Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  if (Fl_Surface_Device::surface() == Fl_Display_Device::display_device()) return CreateRectRgn(x,y,x+w,y+h);
-  // because rotation may apply, the rectangle becomes a polygon in device coords
-  POINT pt[4] = { {x, y}, {x + w, y}, {x + w, y + h}, {x, y + h} };
-  LPtoDP(fl_gc, pt, 4);
-  return CreatePolygonRgn(pt, 4, ALTERNATE);
-}
-
-FL_EXPORT Window fl_xid_(const Fl_Window *w) {
-  Fl_X *temp = Fl_X::i(w); 
-  return temp ? temp->xid : 0;
-}
-
-static RECT border_width_title_bar_height(Fl_Window *win, int &bx, int &by, int &bt, float *pscaling=0)
-{
-  RECT r = {0,0,0,0};
-  bx = by = bt = 0;
-  float scaling = 1;
-  if (win->shown() && !win->parent() && win->border() && win->visible()) {
-    static HMODULE dwmapi_dll = LoadLibrary("dwmapi.dll");
-    typedef HRESULT (WINAPI* DwmGetWindowAttribute_type)(HWND hwnd, DWORD dwAttribute, PVOID pvAttribute, DWORD cbAttribute);
-    static DwmGetWindowAttribute_type DwmGetWindowAttribute = dwmapi_dll ?
-    (DwmGetWindowAttribute_type)GetProcAddress(dwmapi_dll, "DwmGetWindowAttribute") : NULL;
-    int need_r = 1;
-    if (DwmGetWindowAttribute) {
-      const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9;
-      if ( DwmGetWindowAttribute(fl_xid(win), DWMWA_EXTENDED_FRAME_BOUNDS, &r, sizeof(RECT)) == S_OK ) {
-        need_r = 0;
-        // Compute the global display scaling factor: 1, 1.25, 1.5, 1.75, etc...
-        // This factor can be set in Windows 10 by
-        // "Change the size of text, apps and other items" in display settings.
-        HDC hdc = GetDC(NULL);
-        int hr = GetDeviceCaps(hdc, HORZRES); // pixels visible to the app
-#ifndef DESKTOPHORZRES
-#define DESKTOPHORZRES 118
-#endif
-        int dhr = GetDeviceCaps(hdc, DESKTOPHORZRES); // true number of pixels on display
-        ReleaseDC(NULL, hdc);
-        scaling = dhr/float(hr); // display scaling factor
-        scaling = int(scaling * 100 + 0.5)/100.; // round to 2 digits after decimal point
-      }
-    }
-    if (need_r) {
-      GetWindowRect(fl_xid(win), &r);
-    }
-    bx = (r.right - r.left - int(win->w() * scaling))/2;
-    if (bx < 1) bx = 1;
-    by = bx;
-    bt = r.bottom - r.top - int(win->h() * scaling) - 2 * by;
-  }
-  if (pscaling) *pscaling = scaling;
-  return r;
-}
-
-int Fl_Window::decorated_w()
-{
-  int bt, bx, by;
-  border_width_title_bar_height(this, bx, by, bt);
-  return w() + 2 * bx;
-}
-
-int Fl_Window::decorated_h()
-{
-  int bt, bx, by;
-  float scaling;
-  border_width_title_bar_height(this, bx, by, bt, &scaling);
-  return h() + bt/scaling + 2 * by;
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  draw_decorated_window(win, x_offset, y_offset, this);
-}
-
-void Fl_Paged_Device::draw_decorated_window(Fl_Window *win, int x_offset, int y_offset, Fl_Surface_Device *toset)
-{
-  int bt, bx, by; // border width and title bar height of window
-  float scaling;
-  RECT r = border_width_title_bar_height(win, bx, by, bt, &scaling);
-  if (bt) {
-    Fl_Display_Device::display_device()->set_current(); // make window current
-    win->show();
-    Fl::check();
-    win->make_current();
-    HDC save_gc = fl_gc;
-    fl_gc = GetDC(NULL); // get the screen device context
-    int ww = win->w() + 2 * bx;
-    int wh = win->h() + bt + 2 * by;
-    // capture the 4 window sides from screen
-    Window save_win = fl_window;
-    fl_window = NULL; // force use of read_win_rectangle() by fl_read_image()
-    uchar *top_image = fl_read_image(NULL, r.left, r.top, r.right - r.left + 1, bt + by);
-    uchar *left_image = bx ? fl_read_image(NULL, r.left, r.top, bx, wh) : NULL;
-    uchar *right_image = bx ? fl_read_image(NULL, r.right - bx, r.top, bx, wh) : NULL;
-    uchar *bottom_image = by ? fl_read_image(NULL, r.left, r.bottom-by, ww, by) : NULL;
-    fl_window = save_win;
-    ReleaseDC(NULL, fl_gc);  fl_gc = save_gc;
-    toset->set_current();
-    // draw the 4 window sides
-    //fl_draw_image(top_image, x_offset, y_offset, ww, bt + by, 3);
-    Fl_RGB_Image *top_r = new Fl_RGB_Image(top_image, r.right - r.left + 1, bt + by, 3);
-    top_r->alloc_array = 1;
-    if (scaling > 1) {
-      Fl_RGB_Scaling current = Fl_Image::RGB_scaling();
-      Fl_Image::RGB_scaling(FL_RGB_SCALING_BILINEAR);
-      Fl_RGB_Image *tmp_img = (Fl_RGB_Image*)top_r->copy(ww, (bt + by)/scaling);
-      Fl_Image::RGB_scaling(current);
-      delete top_r;
-      top_r = tmp_img;
-    }
-    top_r->draw(x_offset, y_offset);
-    delete top_r;
-    
-    if (left_image) { fl_draw_image(left_image, x_offset, y_offset, bx, wh, 3); delete left_image; }
-    if (right_image) { fl_draw_image(right_image, x_offset + win->w() + bx, y_offset, bx, wh, 3); delete right_image; }
-    if (bottom_image) { fl_draw_image(bottom_image, x_offset, y_offset + win->h() + bt + by, ww, by, 3); delete bottom_image; }
-  }
-  // draw the window inner part
-  this->print_widget(win, x_offset + bx, y_offset + (bt + by)/scaling);
-}
-
-#ifdef USE_PRINT_BUTTON
-// to test the Fl_Printer class creating a "Print front window" button in a separate window
-// contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
-void printFront(Fl_Widget *o, void *data)
-{
-  Fl_Printer printer;
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  int w, h;
-  if( printer.start_job(1) ) { o->window()->show(); return; }
-  if( printer.start_page() ) { o->window()->show(); return; }
-  printer.printable_rect(&w,&h);
-  int  wh, ww;
-  wh = win->decorated_h();
-  ww = win->decorated_w();
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  if (ww > w || wh > h) {
-    scale = (float)w/ww;
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale, scale);
-  }
-// #define ROTATE 20.0
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(ROTATE);
-  printer.print_widget( win, - win->w()/2, - win->h()/2 );
-  //printer.print_window_part( win, 0,0, win->w(), win->h(), - win->w()/2, - win->h()/2 );
-#else  
-  printer.print_window(win);
-#endif
-  printer.end_page();
-  printer.end_job();
-  o->window()->show();
-}
-
-#include <FL/Fl_Copy_Surface.H>
-void copyFront(Fl_Widget *o, void *data)
-{
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if (!win) return;
-  Fl_Copy_Surface *surf = new Fl_Copy_Surface(win->decorated_w(), win->decorated_h());
-  surf->set_current();
-  surf->draw_decorated_window(win); // draw the window content
-  delete surf; // put the window on the clipboard
-  Fl_Display_Device::display_device()->set_current();
-  o->window()->show();
-}
-
-void preparePrintFront(void)
-{
-  static BOOL first=TRUE;
-  if(!first) return;
-  first=FALSE;
-  static Fl_Window w(0,0,120,60);
-  static Fl_Button bp(0,0,w.w(),30, "Print front window");
-  bp.callback(printFront);
-  static Fl_Button bc(0,30,w.w(),30, "Copy front window");
-  bc.callback(copyFront);
-  w.end();
-  w.show();
-}
-#endif // USE_PRINT_BUTTON
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Fl_x.cxx
+++ /dev/null
@@ -1,3160 +1,0 @@
-//
-// "$Id$"
-//
-// X specific code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-//#  include "Fl_win32.cxx"
-#elif defined(__APPLE__)
-//#  include "Fl_mac.cxx"	// now Fl_cocoa.mm
-#elif !defined(FL_DOXYGEN)
-
-#  define CONSOLIDATE_MOTION 1
-/**** Define this if your keyboard lacks a backspace key... ****/
-/* #define BACKSPACE_HACK 1 */
-
-#  include <config.h>
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/Fl_Window.H>
-#  include <FL/fl_utf8.h>
-#  include <FL/Fl_Tooltip.H>
-#  include <FL/fl_draw.H>
-#  include <FL/Fl_Paged_Device.H>
-#  include <FL/Fl_Shared_Image.H>
-#  include <FL/fl_ask.H>
-#  include <FL/filename.H>
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include "flstring.h"
-#  include <unistd.h>
-#  include <time.h>
-#  include <sys/time.h>
-#  include <X11/Xmd.h>
-#  include <X11/Xlocale.h>
-#  include <X11/Xlib.h>
-#  include <X11/keysym.h>
-#  include "Xutf8.h"
-#define USE_XRANDR (HAVE_DLSYM && HAVE_DLFCN_H) // means attempt to dynamically load libXrandr.so
-#if USE_XRANDR
-#include <dlfcn.h>
-#define RRScreenChangeNotifyMask  (1L << 0) // from X11/extensions/Xrandr.h
-#define RRScreenChangeNotify	0           // from X11/extensions/Xrandr.h
-typedef int (*XRRUpdateConfiguration_type)(XEvent *event);
-static XRRUpdateConfiguration_type XRRUpdateConfiguration_f;
-static int randrEventBase;                  // base of RandR-defined events
-#endif
-
-#  if HAVE_XFIXES
-#  include <X11/extensions/Xfixes.h>
-static int xfixes_event_base = 0;
-static bool have_xfixes = false;
-#  endif
-
-#  include <X11/cursorfont.h>
-
-#  if HAVE_XCURSOR
-#    include <X11/Xcursor/Xcursor.h>
-#  endif
-#  if HAVE_XRENDER
-#    include <X11/extensions/Xrender.h>
-#  endif
-
-////////////////////////////////////////////////////////////////
-// interface to poll/select call:
-
-#  if USE_POLL
-
-#    include <poll.h>
-static pollfd *pollfds = 0;
-
-#  else
-#    if HAVE_SYS_SELECT_H
-#      include <sys/select.h>
-#    endif /* HAVE_SYS_SELECT_H */
-
-// The following #define is only needed for HP-UX 9.x and earlier:
-//#define select(a,b,c,d,e) select((a),(int *)(b),(int *)(c),(int *)(d),(e))
-
-static fd_set fdsets[3];
-static int maxfd;
-#    define POLLIN 1
-#    define POLLOUT 4
-#    define POLLERR 8
-
-#  endif /* USE_POLL */
-
-static int nfds = 0;
-static int fd_array_size = 0;
-struct FD {
-#  if !USE_POLL
-  int fd;
-  short events;
-#  endif
-  void (*cb)(int, void*);
-  void* arg;
-};
-
-static FD *fd = 0;
-
-void Fl::add_fd(int n, int events, void (*cb)(int, void*), void *v) {
-  remove_fd(n,events);
-  int i = nfds++;
-  if (i >= fd_array_size) {
-    FD *temp;
-    fd_array_size = 2*fd_array_size+1;
-
-    if (!fd) temp = (FD*)malloc(fd_array_size*sizeof(FD));
-    else temp = (FD*)realloc(fd, fd_array_size*sizeof(FD));
-
-    if (!temp) return;
-    fd = temp;
-
-#  if USE_POLL
-    pollfd *tpoll;
-
-    if (!pollfds) tpoll = (pollfd*)malloc(fd_array_size*sizeof(pollfd));
-    else tpoll = (pollfd*)realloc(pollfds, fd_array_size*sizeof(pollfd));
-
-    if (!tpoll) return;
-    pollfds = tpoll;
-#  endif
-  }
-  fd[i].cb = cb;
-  fd[i].arg = v;
-#  if USE_POLL
-  pollfds[i].fd = n;
-  pollfds[i].events = events;
-#  else
-  fd[i].fd = n;
-  fd[i].events = events;
-  if (events & POLLIN) FD_SET(n, &fdsets[0]);
-  if (events & POLLOUT) FD_SET(n, &fdsets[1]);
-  if (events & POLLERR) FD_SET(n, &fdsets[2]);
-  if (n > maxfd) maxfd = n;
-#  endif
-}
-
-void Fl::add_fd(int n, void (*cb)(int, void*), void* v) {
-  Fl::add_fd(n, POLLIN, cb, v);
-}
-
-void Fl::remove_fd(int n, int events) {
-  int i,j;
-# if !USE_POLL
-  maxfd = -1; // recalculate maxfd on the fly
-# endif
-  for (i=j=0; i<nfds; i++) {
-#  if USE_POLL
-    if (pollfds[i].fd == n) {
-      int e = pollfds[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      pollfds[j].events = e;
-    }
-#  else
-    if (fd[i].fd == n) {
-      int e = fd[i].events & ~events;
-      if (!e) continue; // if no events left, delete this fd
-      fd[i].events = e;
-    }
-    if (fd[i].fd > maxfd) maxfd = fd[i].fd;
-#  endif
-    // move it down in the array if necessary:
-    if (j<i) {
-      fd[j] = fd[i];
-#  if USE_POLL
-      pollfds[j] = pollfds[i];
-#  endif
-    }
-    j++;
-  }
-  nfds = j;
-#  if !USE_POLL
-  if (events & POLLIN) FD_CLR(n, &fdsets[0]);
-  if (events & POLLOUT) FD_CLR(n, &fdsets[1]);
-  if (events & POLLERR) FD_CLR(n, &fdsets[2]);
-#  endif
-}
-
-void Fl::remove_fd(int n) {
-  remove_fd(n, -1);
-}
-
-extern int fl_send_system_handlers(void *e);
-
-#if CONSOLIDATE_MOTION
-static Fl_Window* send_motion;
-extern Fl_Window* fl_xmousewin;
-#endif
-static bool in_a_window; // true if in any of our windows, even destroyed ones
-static void do_queued_events() {
-  in_a_window = true;
-  while (XEventsQueued(fl_display,QueuedAfterReading)) {
-    XEvent xevent;
-    XNextEvent(fl_display, &xevent);
-    if (fl_send_system_handlers(&xevent))
-      continue;
-    fl_handle(xevent);
-  }
-  // we send FL_LEAVE only if the mouse did not enter some other window:
-  if (!in_a_window) Fl::handle(FL_LEAVE, 0);
-#if CONSOLIDATE_MOTION
-  else if (send_motion == fl_xmousewin) {
-    send_motion = 0;
-    Fl::handle(FL_MOVE, fl_xmousewin);
-  }
-#endif
-}
-
-// these pointers are set by the Fl::lock() function:
-static void nothing() {}
-void (*fl_lock_function)() = nothing;
-void (*fl_unlock_function)() = nothing;
-
-// This is never called with time_to_wait < 0.0:
-// It should return negative on error, 0 if nothing happens before
-// timeout, and >0 if any callbacks were done.
-int fl_wait(double time_to_wait) {
-
-  // OpenGL and other broken libraries call XEventsQueued
-  // unnecessarily and thus cause the file descriptor to not be ready,
-  // so we must check for already-read events:
-  if (fl_display && XQLength(fl_display)) {do_queued_events(); return 1;}
-
-#  if !USE_POLL
-  fd_set fdt[3];
-  fdt[0] = fdsets[0];
-  fdt[1] = fdsets[1];
-  fdt[2] = fdsets[2];
-#  endif
-  int n;
-
-  fl_unlock_function();
-
-  if (time_to_wait < 2147483.648) {
-#  if USE_POLL
-    n = ::poll(pollfds, nfds, int(time_to_wait*1000 + .5));
-#  else
-    timeval t;
-    t.tv_sec = int(time_to_wait);
-    t.tv_usec = int(1000000 * (time_to_wait-t.tv_sec));
-    n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t);
-#  endif
-  } else {
-#  if USE_POLL
-    n = ::poll(pollfds, nfds, -1);
-#  else
-    n = ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],0);
-#  endif
-  }
-
-  fl_lock_function();
-
-  if (n > 0) {
-    for (int i=0; i<nfds; i++) {
-#  if USE_POLL
-      if (pollfds[i].revents) fd[i].cb(pollfds[i].fd, fd[i].arg);
-#  else
-      int f = fd[i].fd;
-      short revents = 0;
-      if (FD_ISSET(f,&fdt[0])) revents |= POLLIN;
-      if (FD_ISSET(f,&fdt[1])) revents |= POLLOUT;
-      if (FD_ISSET(f,&fdt[2])) revents |= POLLERR;
-      if (fd[i].events & revents) fd[i].cb(f, fd[i].arg);
-#  endif
-    }
-  }
-  return n;
-}
-
-// fl_ready() is just like fl_wait(0.0) except no callbacks are done:
-int fl_ready() {
-  if (XQLength(fl_display)) return 1;
-  if (!nfds) return 0; // nothing to select or poll
-#  if USE_POLL
-  return ::poll(pollfds, nfds, 0);
-#  else
-  timeval t;
-  t.tv_sec = 0;
-  t.tv_usec = 0;
-  fd_set fdt[3];
-  fdt[0] = fdsets[0];
-  fdt[1] = fdsets[1];
-  fdt[2] = fdsets[2];
-  return ::select(maxfd+1,&fdt[0],&fdt[1],&fdt[2],&t);
-#  endif
-}
-
-// replace \r\n by \n
-static void convert_crlf(unsigned char *string, long& len) {
-  unsigned char *a, *b;
-  a = b = string;
-  while (*a) {
-    if (*a == '\r' && a[1] == '\n') { a++; len--; }
-    else *b++ = *a++;
-  }
-  *b = 0;
-}
-
-////////////////////////////////////////////////////////////////
-
-Display *fl_display;
-Window fl_message_window = 0;
-int fl_screen;
-XVisualInfo *fl_visual;
-Colormap fl_colormap;
-static XIM fl_xim_im = 0;
-XIC fl_xim_ic = 0;
-static Window fl_xim_win = 0;
-static char fl_is_over_the_spot = 0;
-static XRectangle status_area;
-
-static Atom WM_DELETE_WINDOW;
-static Atom WM_PROTOCOLS;
-static Atom fl_MOTIF_WM_HINTS;
-static Atom TARGETS;
-static Atom CLIPBOARD;
-static Atom TIMESTAMP;
-static Atom PRIMARY_TIMESTAMP;
-static Atom CLIPBOARD_TIMESTAMP;
-Atom fl_XdndAware;
-Atom fl_XdndSelection;
-Atom fl_XdndEnter;
-Atom fl_XdndTypeList;
-Atom fl_XdndPosition;
-Atom fl_XdndLeave;
-Atom fl_XdndDrop;
-Atom fl_XdndStatus;
-Atom fl_XdndActionCopy;
-Atom fl_XdndFinished;
-//Atom fl_XdndProxy;
-Atom fl_XdndURIList;
-static Atom fl_Xatextplainutf;
-static Atom fl_Xatextplainutf2;		// STR#2930 
-static Atom fl_Xatextplain;
-static Atom fl_XaText;
-static Atom fl_XaCompoundText;
-Atom fl_XaUtf8String;
-static Atom fl_XaTextUriList;
-static Atom fl_XaImageBmp;
-static Atom fl_XaImagePNG;
-static Atom fl_INCR;
-static Atom fl_NET_WM_PID;
-static Atom fl_NET_WM_NAME;			// utf8 aware window label
-static Atom fl_NET_WM_ICON_NAME;		// utf8 aware window icon name
-static Atom fl_NET_SUPPORTING_WM_CHECK;
-static Atom fl_NET_WM_STATE;
-static Atom fl_NET_WM_STATE_FULLSCREEN;
-static Atom fl_NET_WM_FULLSCREEN_MONITORS;
-static Atom fl_NET_WORKAREA;
-static Atom fl_NET_WM_ICON;
-static Atom fl_NET_ACTIVE_WINDOW;
-
-/*
-  X defines 32-bit-entities to have a format value of max. 32,
-  although sizeof(atom) can be 8 (64 bits) on a 64-bit OS.
-  See also fl_open_display() for sizeof(atom) < 4.
-  Used for XChangeProperty (see STR #2419).
-*/
-static int atom_bits = 32;
-
-static void fd_callback(int,void *) {
-  do_queued_events();
-}
-
-extern "C" {
-  static int io_error_handler(Display*) {
-    Fl::fatal("X I/O error");
-    return 0;
-  }
-
-  static int xerror_handler(Display* d, XErrorEvent* e) {
-    char buf1[128], buf2[128];
-    sprintf(buf1, "XRequest.%d", e->request_code);
-    XGetErrorDatabaseText(d,"",buf1,buf1,buf2,128);
-    XGetErrorText(d, e->error_code, buf1, 128);
-    Fl::warning("%s: %s 0x%lx", buf2, buf1, e->resourceid);
-    return 0;
-  }
-}
-
-extern char *fl_get_font_xfld(int fnum, int size);
-
-static void fl_new_ic()
-{
-  XVaNestedList preedit_attr = NULL;
-  XVaNestedList status_attr = NULL;
-  static XFontSet fs = NULL;
-  char *fnt;
-  char **missing_list = 0;
-  int missing_count = 0;
-  char *def_string;
-  static XRectangle spot;
-  int predit = 0;
-  int sarea = 0;
-  XIMStyles* xim_styles = NULL;
-
-#if USE_XFT
-
-#if defined(__GNUC__)
-// FIXME: warning XFT support here
-#endif /*__GNUC__*/
-
-  if (!fs) {
-    fnt = (char*)"-misc-fixed-*";
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-  }
-#else
-  if (!fs) {
-    bool must_free_fnt = true;
-    fnt = fl_get_font_xfld(0, 14);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-    if (must_free_fnt) free(fnt);
-  }
-#endif
-
-  if (missing_list) XFreeStringList(missing_list);
-
-  preedit_attr = XVaCreateNestedList(0,
-                                     XNSpotLocation, &spot,
-                                     XNFontSet, fs, NULL);
-  status_attr = XVaCreateNestedList(0,
-                                    XNAreaNeeded, &status_area,
-                                    XNFontSet, fs, NULL);
-
-  if (!XGetIMValues(fl_xim_im, XNQueryInputStyle,
-                    &xim_styles, NULL, NULL)) {
-    int i;
-    XIMStyle *style;
-    for (i = 0, style = xim_styles->supported_styles;
-         i < xim_styles->count_styles; i++, style++) {
-      if (*style == (XIMPreeditPosition | XIMStatusArea)) {
-        sarea = 1;
-        predit = 1;
-      } else if (*style == (XIMPreeditPosition | XIMStatusNothing)) {
-        predit = 1;
-      }
-    }
-  }
-  XFree(xim_styles);
-
-  if (sarea) {
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditPosition | XIMStatusArea),
-                          XNPreeditAttributes, preedit_attr,
-                          XNStatusAttributes, status_attr,
-                          NULL);
-  }
-
-  if (!fl_xim_ic && predit) {
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditPosition | XIMStatusNothing),
-                          XNPreeditAttributes, preedit_attr,
-                          NULL);
-  }
-  XFree(preedit_attr);
-  XFree(status_attr);
-  if (!fl_xim_ic) {
-    fl_is_over_the_spot = 0;
-    fl_xim_ic = XCreateIC(fl_xim_im,
-                          XNInputStyle, (XIMPreeditNothing | XIMStatusNothing),
-                          NULL);
-  } else {
-    fl_is_over_the_spot = 1;
-    XVaNestedList status_attr = NULL;
-    status_attr = XVaCreateNestedList(0, XNAreaNeeded, &status_area, NULL);
-
-    XGetICValues(fl_xim_ic, XNStatusAttributes, status_attr, NULL);
-    XFree(status_attr);
-  }
-}
-
-
-static XRectangle    spot;
-static int spotf = -1;
-static int spots = -1;
-
-void fl_reset_spot(void)
-{
-  spot.x = -1;
-  spot.y = -1;
-  //if (fl_xim_ic) XUnsetICFocus(fl_xim_ic);
-}
-
-void fl_set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win)
-{
-  int change = 0;
-  XVaNestedList preedit_attr;
-  static XFontSet fs = NULL;
-  char **missing_list;
-  int missing_count;
-  char *def_string;
-  char *fnt = NULL;
-  bool must_free_fnt =true;
-
-  static XIC ic = NULL;
-
-  if (!fl_xim_ic || !fl_is_over_the_spot) return;
-  //XSetICFocus(fl_xim_ic);
-  if (X != spot.x || Y != spot.y) {
-    spot.x = X;
-    spot.y = Y;
-    spot.height = H;
-    spot.width = W;
-    change = 1;
-  }
-  if (font != spotf || size != spots) {
-    spotf = font;
-    spots = size;
-    change = 1;
-    if (fs) {
-      XFreeFontSet(fl_display, fs);
-    }
-#if USE_XFT
-
-#if defined(__GNUC__)
-// FIXME: warning XFT support here
-#endif /*__GNUC__*/
-
-    fnt = NULL; // fl_get_font_xfld(font, size);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-#else
-    fnt = fl_get_font_xfld(font, size);
-    if (!fnt) {fnt = (char*)"-misc-fixed-*";must_free_fnt=false;}
-    fs = XCreateFontSet(fl_display, fnt, &missing_list,
-                        &missing_count, &def_string);
-#endif
-  }
-  if (fl_xim_ic != ic) {
-    ic = fl_xim_ic;
-    change = 1;
-  }
-
-  if (fnt && must_free_fnt) free(fnt);
-  if (!change) return;
-
-
-  preedit_attr = XVaCreateNestedList(0,
-                                     XNSpotLocation, &spot,
-                                     XNFontSet, fs, NULL);
-  XSetICValues(fl_xim_ic, XNPreeditAttributes, preedit_attr, NULL);
-  XFree(preedit_attr);
-}
-
-void fl_set_status(int x, int y, int w, int h)
-{
-  XVaNestedList status_attr;
-  status_area.x = x;
-  status_area.y = y;
-  status_area.width = w;
-  status_area.height = h;
-  if (!fl_xim_ic) return;
-  status_attr = XVaCreateNestedList(0, XNArea, &status_area, NULL);
-
-  XSetICValues(fl_xim_ic, XNStatusAttributes, status_attr, NULL);
-  XFree(status_attr);
-}
-
-static void fl_init_xim() {
-  static int xim_warning = 2;
-  if (xim_warning > 0) xim_warning--;
-
-  //XIMStyle *style;
-  XIMStyles *xim_styles;
-  if (!fl_display) return;
-  if (fl_xim_im) return;
-
-  fl_xim_im = XOpenIM(fl_display, NULL, NULL, NULL);
-  xim_styles = NULL;
-  fl_xim_ic = NULL;
-
-  if (fl_xim_im) {
-    XGetIMValues (fl_xim_im, XNQueryInputStyle,
-                  &xim_styles, NULL, NULL);
-  } else {
-    if (xim_warning)
-      Fl::warning("XOpenIM() failed");
-    // if xim_styles is allocated, free it now
-    if (xim_styles) XFree(xim_styles);
-    return;
-  }
-
-  if (xim_styles && xim_styles->count_styles) {
-    fl_new_ic();
-   } else {
-     if (xim_warning)
-       Fl::warning("No XIM style found");
-     XCloseIM(fl_xim_im);
-     fl_xim_im = NULL;
-     // if xim_styles is allocated, free it now
-     if (xim_styles) XFree(xim_styles);
-     return;
-  }
-  if (!fl_xim_ic) {
-    if (xim_warning)
-      Fl::warning("XCreateIC() failed");
-    XCloseIM(fl_xim_im);
-    fl_xim_im = NULL;
-  }
-  // if xim_styles is still allocated, free it now
-  if(xim_styles) XFree(xim_styles);
-}
-
-void fl_xim_deactivate(void);
-
-void fl_xim_activate(Window xid) {
-  if (!fl_xim_im)
-    return;
-
-  // If the focused window has changed, then use the brute force method
-  // of completely recreating the input context.
-  if (fl_xim_win != xid) {
-    fl_xim_deactivate();
-
-    fl_new_ic();
-    fl_xim_win = xid;
-
-    XSetICValues(fl_xim_ic,
-                 XNFocusWindow, fl_xim_win,
-                 XNClientWindow, fl_xim_win,
-                 NULL);
-  }
-
-  fl_set_spot(spotf, spots, spot.x, spot.y, spot.width, spot.height);
-}
-
-void fl_xim_deactivate(void) {
-  if (!fl_xim_ic)
-    return;
-
-  XDestroyIC(fl_xim_ic);
-  fl_xim_ic = NULL;
-
-  fl_xim_win = 0;
-}
-
-void Fl::enable_im() {
-  Fl_Window *win;
-
-  win = Fl::first_window();
-  if (win && win->shown()) {
-    fl_xim_activate(fl_xid(win));
-    XSetICFocus(fl_xim_ic);
-  } else {
-    fl_new_ic();
-  }
-}
-
-void Fl::disable_im() {
-  fl_xim_deactivate();
-}
-
-void fl_open_display() {
-  if (fl_display) return;
-
-  setlocale(LC_CTYPE, "");
-  XSetLocaleModifiers("@im=");
-
-  XSetIOErrorHandler(io_error_handler);
-  XSetErrorHandler(xerror_handler);
-
-  Display *d = XOpenDisplay(0);
-  if (!d) Fl::fatal("Can't open display: %s",XDisplayName(0));
-
-  fl_open_display(d);
-}
-
-
-void fl_open_display(Display* d) {
-  fl_display = d;
-
-  WM_DELETE_WINDOW      = XInternAtom(d, "WM_DELETE_WINDOW",    0);
-  WM_PROTOCOLS          = XInternAtom(d, "WM_PROTOCOLS",        0);
-  fl_MOTIF_WM_HINTS     = XInternAtom(d, "_MOTIF_WM_HINTS",     0);
-  TARGETS               = XInternAtom(d, "TARGETS",             0);
-  CLIPBOARD             = XInternAtom(d, "CLIPBOARD",           0);
-  TIMESTAMP             = XInternAtom(d, "TIMESTAMP",           0);
-  PRIMARY_TIMESTAMP     = XInternAtom(d, "PRIMARY_TIMESTAMP",   0);
-  CLIPBOARD_TIMESTAMP   = XInternAtom(d, "CLIPBOARD_TIMESTAMP", 0);
-  fl_XdndAware          = XInternAtom(d, "XdndAware",           0);
-  fl_XdndSelection      = XInternAtom(d, "XdndSelection",       0);
-  fl_XdndEnter          = XInternAtom(d, "XdndEnter",           0);
-  fl_XdndTypeList       = XInternAtom(d, "XdndTypeList",        0);
-  fl_XdndPosition       = XInternAtom(d, "XdndPosition",        0);
-  fl_XdndLeave          = XInternAtom(d, "XdndLeave",           0);
-  fl_XdndDrop           = XInternAtom(d, "XdndDrop",            0);
-  fl_XdndStatus         = XInternAtom(d, "XdndStatus",          0);
-  fl_XdndActionCopy     = XInternAtom(d, "XdndActionCopy",      0);
-  fl_XdndFinished       = XInternAtom(d, "XdndFinished",        0);
-  //fl_XdndProxy        = XInternAtom(d, "XdndProxy",           0);
-  fl_XdndEnter          = XInternAtom(d, "XdndEnter",           0);
-  fl_XdndURIList        = XInternAtom(d, "text/uri-list",       0);
-  fl_Xatextplainutf     = XInternAtom(d, "text/plain;charset=UTF-8",0);
-  fl_Xatextplainutf2    = XInternAtom(d, "text/plain;charset=utf-8",0);	// Firefox/Thunderbird needs this - See STR#2930
-  fl_Xatextplain        = XInternAtom(d, "text/plain",          0);
-  fl_XaText             = XInternAtom(d, "TEXT",                0);
-  fl_XaCompoundText     = XInternAtom(d, "COMPOUND_TEXT",       0);
-  fl_XaUtf8String       = XInternAtom(d, "UTF8_STRING",         0);
-  fl_XaTextUriList      = XInternAtom(d, "text/uri-list",       0);
-  fl_XaImageBmp         = XInternAtom(d, "image/bmp",           0);
-  fl_XaImagePNG         = XInternAtom(d, "image/png",           0);
-  fl_INCR               = XInternAtom(d, "INCR",                0);
-  fl_NET_WM_PID         = XInternAtom(d, "_NET_WM_PID",         0);
-  fl_NET_WM_NAME        = XInternAtom(d, "_NET_WM_NAME",        0);
-  fl_NET_WM_ICON_NAME   = XInternAtom(d, "_NET_WM_ICON_NAME",   0);
-  fl_NET_SUPPORTING_WM_CHECK = XInternAtom(d, "_NET_SUPPORTING_WM_CHECK", 0);
-  fl_NET_WM_STATE       = XInternAtom(d, "_NET_WM_STATE",       0);
-  fl_NET_WM_STATE_FULLSCREEN = XInternAtom(d, "_NET_WM_STATE_FULLSCREEN", 0);
-  fl_NET_WM_FULLSCREEN_MONITORS = XInternAtom(d, "_NET_WM_FULLSCREEN_MONITORS", 0);
-  fl_NET_WORKAREA       = XInternAtom(d, "_NET_WORKAREA",       0);
-  fl_NET_WM_ICON        = XInternAtom(d, "_NET_WM_ICON",        0);
-  fl_NET_ACTIVE_WINDOW  = XInternAtom(d, "_NET_ACTIVE_WINDOW",  0);
-
-  if (sizeof(Atom) < 4)
-    atom_bits = sizeof(Atom) * 8;
-
-  Fl::add_fd(ConnectionNumber(d), POLLIN, fd_callback);
-
-  fl_screen = DefaultScreen(d);
-
-  fl_message_window =
-    XCreateSimpleWindow(d, RootWindow(d,fl_screen), 0,0,1,1,0, 0, 0);
-
-// construct an XVisualInfo that matches the default Visual:
-  XVisualInfo templt; int num;
-  templt.visualid = XVisualIDFromVisual(DefaultVisual(d, fl_screen));
-  fl_visual = XGetVisualInfo(d, VisualIDMask, &templt, &num);
-  fl_colormap = DefaultColormap(d, fl_screen);
-  fl_init_xim();
-
-#if !USE_COLORMAP
-  Fl::visual(FL_RGB);
-#endif
-
-#if HAVE_XFIXES
-  int error_base;
-  if (XFixesQueryExtension(fl_display, &xfixes_event_base, &error_base))
-    have_xfixes = true;
-  else
-    have_xfixes = false;
-#endif
-
-#if USE_XRANDR
-  void *libxrandr_addr = dlopen("libXrandr.so.2", RTLD_LAZY);
-  if (!libxrandr_addr)  libxrandr_addr = dlopen("libXrandr.so", RTLD_LAZY);
-  if (libxrandr_addr) {
-    int error_base;
-    typedef Bool (*XRRQueryExtension_type)(Display*, int*, int*);
-    typedef void (*XRRSelectInput_type)(Display*, Window, int);
-    XRRQueryExtension_type XRRQueryExtension_f = (XRRQueryExtension_type)dlsym(libxrandr_addr, "XRRQueryExtension");
-    XRRSelectInput_type XRRSelectInput_f = (XRRSelectInput_type)dlsym(libxrandr_addr, "XRRSelectInput");
-    XRRUpdateConfiguration_f = (XRRUpdateConfiguration_type)dlsym(libxrandr_addr, "XRRUpdateConfiguration");
-    if (XRRQueryExtension_f && XRRSelectInput_f && XRRQueryExtension_f(d, &randrEventBase, &error_base))
-      XRRSelectInput_f(d, RootWindow(d, fl_screen), RRScreenChangeNotifyMask);
-    else XRRUpdateConfiguration_f = NULL;
-    }
-#endif
-
-  // Listen for changes to _NET_WORKAREA
-  XSelectInput(d, RootWindow(d, fl_screen), PropertyChangeMask);
-}
-
-void fl_close_display() {
-  Fl::remove_fd(ConnectionNumber(fl_display));
-  XCloseDisplay(fl_display);
-}
-
-static int fl_workarea_xywh[4] = { -1, -1, -1, -1 };
-
-static void fl_init_workarea() {
-  fl_open_display();
-
-  Atom actual;
-  unsigned long count, remaining;
-  int format;
-  long *xywh = 0;
-
-  /* If there are several screens, the _NET_WORKAREA property 
-   does not give the work area of the main screen, but that of all screens together.
-   Therefore, we use this property only when there is a single screen,
-   and fall back to the main screen full area when there are several screens.
-   */
-  if (Fl::screen_count() > 1 || XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen),
-			 fl_NET_WORKAREA, 0, 4, False,
-                         XA_CARDINAL, &actual, &format, &count, &remaining,
-                         (unsigned char **)&xywh) || !xywh || !xywh[2] ||
-                         !xywh[3])
-  {
-    Fl::screen_xywh(fl_workarea_xywh[0], 
-		    fl_workarea_xywh[1], 
-		    fl_workarea_xywh[2], 
-		    fl_workarea_xywh[3], 0);
-  }
-  else
-  {
-    fl_workarea_xywh[0] = (int)xywh[0];
-    fl_workarea_xywh[1] = (int)xywh[1];
-    fl_workarea_xywh[2] = (int)xywh[2];
-    fl_workarea_xywh[3] = (int)xywh[3];
-  }
-  if ( xywh ) { XFree(xywh); xywh = 0; }
-}
-
-int Fl::x() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[0];
-}
-
-int Fl::y() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[1];
-}
-
-int Fl::w() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[2];
-}
-
-int Fl::h() {
-  if (fl_workarea_xywh[0] < 0) fl_init_workarea();
-  return fl_workarea_xywh[3];
-}
-
-void Fl::get_mouse(int &xx, int &yy) {
-  fl_open_display();
-  Window root = RootWindow(fl_display, fl_screen);
-  Window c; int mx,my,cx,cy; unsigned int mask;
-  XQueryPointer(fl_display,root,&root,&c,&mx,&my,&cx,&cy,&mask);
-  xx = mx;
-  yy = my;
-}
-
-////////////////////////////////////////////////////////////////
-// Code used for paste and DnD into the program:
-
-Fl_Widget *fl_selection_requestor;
-char *fl_selection_buffer[2];
-int fl_selection_length[2];
-const char * fl_selection_type[2];
-int fl_selection_buffer_length[2];
-char fl_i_own_selection[2] = {0,0};
-
-// Call this when a "paste" operation happens:
-void Fl::paste(Fl_Widget &receiver, int clipboard, const char *type) {
-  if (fl_i_own_selection[clipboard]) {
-    // We already have it, do it quickly without window server.
-    // Notice that the text is clobbered if set_selection is
-    // called in response to FL_PASTE!
-    // However, for now, we only paste text in this function
-    if (fl_selection_type[clipboard] != Fl::clipboard_plain_text) return; //TODO: allow copy/paste of image within same app
-    Fl::e_text = fl_selection_buffer[clipboard];
-    Fl::e_length = fl_selection_length[clipboard];
-    if (!Fl::e_text) Fl::e_text = (char *)"";
-    receiver.handle(FL_PASTE);
-    return;
-  }
-  // otherwise get the window server to return it:
-  fl_selection_requestor = &receiver;
-  Atom property = clipboard ? CLIPBOARD : XA_PRIMARY;
-  Fl::e_clipboard_type = type;
-  XConvertSelection(fl_display, property, TARGETS, property,
-                    fl_xid(Fl::first_window()), fl_event_time);
-}
-
-int Fl::clipboard_contains(const char *type)
-{
-  XEvent event;
-  Atom actual; int format; unsigned long count, remaining, i = 0;
-  unsigned char* portion = NULL;
-  Fl_Window *win = Fl::first_window();
-  if (!win || !fl_xid(win)) return 0;
-  XConvertSelection(fl_display, CLIPBOARD, TARGETS, CLIPBOARD, fl_xid(win), CurrentTime);
-  XFlush(fl_display);
-  do  { 
-    XNextEvent(fl_display, &event); 
-    if (event.type == SelectionNotify && event.xselection.property == None) return 0;
-    i++; 
-  }
-  while (i < 50 && event.type != SelectionNotify);
-  if (i >= 50) return 0;
-  XGetWindowProperty(fl_display,
-		     event.xselection.requestor,
-		     event.xselection.property,
-		     0, 4000, 0, 0,
-		     &actual, &format, &count, &remaining, &portion);
-  if (actual != XA_ATOM) return 0;
-  Atom t;
-  int retval = 0;
-  if (strcmp(type, Fl::clipboard_plain_text) == 0) {
-    for (i = 0; i<count; i++) { // searching for text data
-      t = ((Atom*)portion)[i];
-      if (t == fl_Xatextplainutf ||
-	  t == fl_Xatextplainutf2 ||
-	  t == fl_Xatextplain ||
-	  t == fl_XaUtf8String) {
-	retval = 1;
-	break;
-      }
-    }	
-  }
-  else if (strcmp(type, Fl::clipboard_image) == 0) {
-    for (i = 0; i<count; i++) { // searching for image data
-      t = ((Atom*)portion)[i];
-      if (t == fl_XaImageBmp || t == fl_XaImagePNG) {
-	retval = 1;
-	break;
-      }
-    }	
-  }
-  XFree(portion);
-  return retval;
-}
-
-static Window fl_dnd_source_window;
-static Atom *fl_dnd_source_types; // null-terminated list of data types being supplied
-static Atom fl_dnd_type;
-static Atom fl_dnd_source_action;
-static Atom fl_dnd_action;
-
-void fl_sendClientMessage(Window window, Atom message,
-                                 unsigned long d0,
-                                 unsigned long d1=0,
-                                 unsigned long d2=0,
-                                 unsigned long d3=0,
-                                 unsigned long d4=0)
-{
-  XEvent e;
-  e.xany.type = ClientMessage;
-  e.xany.window = window;
-  e.xclient.message_type = message;
-  e.xclient.format = 32;
-  e.xclient.data.l[0] = (long)d0;
-  e.xclient.data.l[1] = (long)d1;
-  e.xclient.data.l[2] = (long)d2;
-  e.xclient.data.l[3] = (long)d3;
-  e.xclient.data.l[4] = (long)d4;
-  XSendEvent(fl_display, window, 0, 0, &e);
-}
-
-
-/*
-   Get window property value (32 bit format)
-   Returns zero on success, -1 on error
-
-   'data' should be freed with XFree() using this pattern:
-
-        unsigned long *data = 0;
-        if (0 == get_xwinprop(....., &nitems, &data) ) { ..success.. }
-        else { ..fail.. }
-        if ( data ) { XFree(data); data=0; }
-	
-    Note: 'data' can be non-zero, even if the return value is -1 (error) and
-    should hence be XFree'd *after* the if/else statement, as described above.
-*/
-static int get_xwinprop(Window wnd, Atom prop, long max_length,
-                        unsigned long *nitems, unsigned long **data) {
-  Atom actual;
-  int format;
-  unsigned long bytes_after;
-  
-  if (Success != XGetWindowProperty(fl_display, wnd, prop, 0, max_length, 
-                                    False, AnyPropertyType, &actual, &format, 
-                                    nitems, &bytes_after, (unsigned char**)data)) {
-    return -1;
-  }
-
-  if (actual == None || format != 32) {
-    return -1;
-  }
-
-  return 0;
-}
-
-
-////////////////////////////////////////////////////////////////
-// Code for copying to clipboard and DnD out of the program:
-
-void Fl::copy(const char *stuff, int len, int clipboard, const char *type) {
-  if (!stuff || len<0) return;
-
-  if (clipboard >= 2) {
-    copy(stuff, len, 0, type);
-    copy(stuff, len, 1, type);
-    return;
-  }
-
-  if (len+1 > fl_selection_buffer_length[clipboard]) {
-    delete[] fl_selection_buffer[clipboard];
-    fl_selection_buffer[clipboard] = new char[len+100];
-    fl_selection_buffer_length[clipboard] = len+100;
-  }
-  memcpy(fl_selection_buffer[clipboard], stuff, len);
-  fl_selection_buffer[clipboard][len] = 0; // needed for direct paste
-  fl_selection_length[clipboard] = len;
-  fl_i_own_selection[clipboard] = 1;
-  fl_selection_type[clipboard] = Fl::clipboard_plain_text;
-  Atom property = clipboard ? CLIPBOARD : XA_PRIMARY;
-  XSetSelectionOwner(fl_display, property, fl_message_window, fl_event_time);
-}
-
-static void write_short(unsigned char **cp,short i){
-  unsigned char *c=*cp;
-  *c++=i&0xFF;i>>=8;
-  *c++=i&0xFF;i>>=8;
-  *cp=c;
-}
-
-static void write_int(unsigned char **cp,int i){
-  unsigned char *c=*cp;
-  *c++=i&0xFF;i>>=8;
-  *c++=i&0xFF;i>>=8;
-  *c++=i&0xFF;i>>=8;
-  *c++=i&0xFF;i>>=8;
-  *cp=c;
-}
-
-static unsigned char *create_bmp(const unsigned char *data, int W, int H, int *return_size){
-  int R=(3*W+3)/4 * 4; // the number of bytes per row, rounded up to multiple of 4
-  int s=H*R;
-  int fs=14+40+s;
-  unsigned char *b=new unsigned char[fs];
-  unsigned char *c=b;
-  // BMP header
-  *c++='B';
-  *c++='M';
-  write_int(&c,fs);
-  write_int(&c,0);
-  write_int(&c,14+40);
-  // DIB header:
-  write_int(&c,40);
-  write_int(&c,W);
-  write_int(&c,H);
-  write_short(&c,1);
-  write_short(&c,24);//bits ber pixel
-  write_int(&c,0);//RGB
-  write_int(&c,s);
-  write_int(&c,0);// horizontal resolution
-  write_int(&c,0);// vertical resolution
-  write_int(&c,0);//number of colors. 0 -> 1<<bits_per_pixel
-  write_int(&c,0);
-  // Pixel data
-  data+=3*W*H;
-  for (int y=0;y<H;++y){
-    data-=3*W;
-    const unsigned char *s=data;
-    unsigned char *p=c;
-    for (int x=0;x<W;++x){
-      *p++=s[2];
-      *p++=s[1];
-      *p++=s[0];
-      s+=3;
-    }
-    c+=R;
-  }
-  *return_size = fs;
-  return b;
-}
-
-void Fl::copy_image(const unsigned char *data, int W, int H, int clipboard){
-  if(!data || W<=0 || H<=0) return;
-  delete[] fl_selection_buffer[clipboard];
-  fl_selection_buffer[clipboard] = (char *) create_bmp(data,W,H,&fl_selection_length[clipboard]);
-  fl_selection_buffer_length[clipboard] = fl_selection_length[clipboard];
-  fl_i_own_selection[clipboard] = 1;
-  fl_selection_type[clipboard] = Fl::clipboard_image;
-
-  Atom property = clipboard ? CLIPBOARD : XA_PRIMARY;
-  XSetSelectionOwner(fl_display, property, fl_message_window, fl_event_time);
-}
-
-////////////////////////////////////////////////////////////////
-// Code for tracking clipboard changes:
-
-static Time primary_timestamp = (Time)-1;
-static Time clipboard_timestamp = (Time)-1;
-
-extern bool fl_clipboard_notify_empty(void);
-extern void fl_trigger_clipboard_notify(int source);
-
-static void poll_clipboard_owner(void) {
-  Window xid;
-
-#if HAVE_XFIXES
-  // No polling needed with Xfixes
-  if (have_xfixes)
-    return;
-#endif
-
-  // No one is interested, so no point polling
-  if (fl_clipboard_notify_empty())
-    return;
-
-  // We need a window for this to work
-  if (!Fl::first_window())
-    return;
-  xid = fl_xid(Fl::first_window());
-  if (!xid)
-    return;
-
-  // Request an update of the selection time for both the primary and
-  // clipboard selections. Magic continues when we get a SelectionNotify.
-  if (!fl_i_own_selection[0])
-    XConvertSelection(fl_display, XA_PRIMARY, TIMESTAMP, PRIMARY_TIMESTAMP,
-                      xid, fl_event_time);
-  if (!fl_i_own_selection[1])
-    XConvertSelection(fl_display, CLIPBOARD, TIMESTAMP, CLIPBOARD_TIMESTAMP,
-                      xid, fl_event_time);
-}
-
-static void clipboard_timeout(void *data)
-{
-  // No one is interested, so stop polling
-  if (fl_clipboard_notify_empty())
-    return;
-
-  poll_clipboard_owner();
-
-  Fl::repeat_timeout(0.5, clipboard_timeout);
-}
-
-static void handle_clipboard_timestamp(int clipboard, Time time)
-{
-  Time *timestamp;
-
-  timestamp = clipboard ? &clipboard_timestamp : &primary_timestamp;
-
-#if HAVE_XFIXES
-  if (!have_xfixes)
-#endif
-  {
-    // Initial scan, just store the value
-    if (*timestamp == (Time)-1) {
-      *timestamp = time;
-      return;
-    }
-  }
-
-  // Same selection
-  if (time == *timestamp)
-    return;
-
-  *timestamp = time;
-
-  // The clipboard change is the event that caused us to request
-  // the clipboard data, so use that time as the latest event.
-  if (time > fl_event_time)
-    fl_event_time = time;
-
-  // Something happened! Let's tell someone!
-  fl_trigger_clipboard_notify(clipboard);
-}
-
-void fl_clipboard_notify_change() {
-  // Reset the timestamps if we've going idle so that you don't
-  // get a bogus immediate trigger next time they're activated.
-  if (fl_clipboard_notify_empty()) {
-    primary_timestamp = (Time)-1;
-    clipboard_timestamp = (Time)-1;
-  } else {
-#if HAVE_XFIXES
-    if (!have_xfixes)
-#endif
-    {
-      poll_clipboard_owner();
-
-      if (!Fl::has_timeout(clipboard_timeout))
-        Fl::add_timeout(0.5, clipboard_timeout);
-    }
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-const XEvent* fl_xevent; // the current x event
-ulong fl_event_time; // the last timestamp from an x event
-
-char fl_key_vector[32]; // used by Fl::get_key()
-
-// Record event mouse position and state from an XEvent:
-
-static int px, py;
-static ulong ptime;
-
-static void set_event_xy() {
-#  if CONSOLIDATE_MOTION
-  send_motion = 0;
-#  endif
-  Fl::e_x_root  = fl_xevent->xbutton.x_root;
-  Fl::e_x       = fl_xevent->xbutton.x;
-  Fl::e_y_root  = fl_xevent->xbutton.y_root;
-  Fl::e_y       = fl_xevent->xbutton.y;
-  Fl::e_state   = fl_xevent->xbutton.state << 16;
-  fl_event_time = fl_xevent->xbutton.time;
-#  ifdef __sgi
-  // get the meta key off PC keyboards:
-  if (fl_key_vector[18]&0x18) Fl::e_state |= FL_META;
-#  endif
-  // turn off is_click if enough time or mouse movement has passed:
-  if (abs(Fl::e_x_root-px)+abs(Fl::e_y_root-py) > 3 ||
-      fl_event_time >= ptime+1000)
-    Fl::e_is_click = 0;
-}
-
-// if this is same event as last && is_click, increment click count:
-static inline void checkdouble() {
-  if (Fl::e_is_click == Fl::e_keysym)
-    Fl::e_clicks++;
-  else {
-    Fl::e_clicks = 0;
-    Fl::e_is_click = Fl::e_keysym;
-  }
-  px = Fl::e_x_root;
-  py = Fl::e_y_root;
-  ptime = fl_event_time;
-}
-
-static Fl_Window* resize_bug_fix;
-
-////////////////////////////////////////////////////////////////
-
-static char unknown[] = "<unknown>";
-const int unknown_len = 10;
-
-extern "C" {
-
-static int xerror = 0;
-
-static int ignoreXEvents(Display *display, XErrorEvent *event) {
-  xerror = 1;
-  return 0;
-}
-
-static XErrorHandler catchXExceptions() {
-  xerror = 0;
-  return ignoreXEvents;
-}
-
-static int wasXExceptionRaised() {
-  return xerror;
-}
-
-}
-
-static bool getNextEvent(XEvent *event_return)
-{
-  time_t t = time(NULL);
-  while(!XPending(fl_display))
-  {
-    if(time(NULL) - t > 10.0)
-    {
-      //fprintf(stderr,"Error: The XNextEvent never came...\n");
-      return false; 
-    }
-  }
-  XNextEvent(fl_display, event_return);
-  return true;
-}
-
-static long getIncrData(uchar* &data, const XSelectionEvent& selevent, long lower_bound)
-{
-//fprintf(stderr,"Incremental transfer starting due to INCR property\n");
-  size_t total = 0;
-  XEvent event;
-  XDeleteProperty(fl_display, selevent.requestor, selevent.property);  
-  data = (uchar*)realloc(data, lower_bound);
-  for (;;)
-  {
-    if (!getNextEvent(&event)) break;
-    if (event.type == PropertyNotify)
-    {
-      if (event.xproperty.state != PropertyNewValue) continue;
-      Atom actual_type;
-      int actual_format;
-      unsigned long nitems;
-      unsigned long bytes_after;
-      unsigned char* prop = 0;
-      long offset = 0;
-      size_t num_bytes;
-      //size_t slice_size = 0;
-      do
-      {
-	XGetWindowProperty(fl_display, selevent.requestor, selevent.property, offset, 70000, True,
-			   AnyPropertyType, &actual_type, &actual_format, &nitems, &bytes_after, &prop);
-	num_bytes = nitems * (actual_format / 8);
-	offset += num_bytes/4;
-	//slice_size += num_bytes;
-	if (total + num_bytes > (size_t)lower_bound) data = (uchar*)realloc(data, total + num_bytes);
-	memcpy(data + total, prop, num_bytes); total += num_bytes;
-	if (prop) XFree(prop);
-      } while (bytes_after != 0);
-//fprintf(stderr,"INCR data size:%ld\n", slice_size);
-      if (num_bytes == 0) break;
-    }
-    else break;
-  }
-  XDeleteProperty(fl_display, selevent.requestor, selevent.property);
-  return (long)total;
-}
-
-/* Internal function to reduce "deprecated" warnings for XKeycodeToKeysym().
-   This way we get only one warning. The option to use XkbKeycodeToKeysym()
-   instead would not help much - see STR #2913 for more information.
-*/
-static KeySym fl_KeycodeToKeysym(Display *d, KeyCode k, unsigned i) {
-  return XKeycodeToKeysym(d, k, i);
-}
-
-int fl_handle(const XEvent& thisevent)
-{
-  XEvent xevent = thisevent;
-  fl_xevent = &thisevent;
-  Window xid = xevent.xany.window;
-
-  if (fl_xim_ic && xevent.type == DestroyNotify &&
-        xid != fl_xim_win && !fl_find(xid))
-  {
-    XIM xim_im;
-    xim_im = XOpenIM(fl_display, NULL, NULL, NULL);
-    if (!xim_im) {
-      /*  XIM server has crashed */
-      XSetLocaleModifiers("@im=");
-      fl_xim_im = NULL;
-      fl_init_xim();
-    } else {
-      XCloseIM(xim_im);	// see STR 2185 for comment
-    }
-    return 0;
-  }
-
-  if (fl_xim_ic && (xevent.type == FocusIn))
-    fl_xim_activate(xid);
-
-  if (fl_xim_ic && XFilterEvent((XEvent *)&xevent, 0))
-      return(1);
-  
-#if USE_XRANDR  
-  if( XRRUpdateConfiguration_f && xevent.type == randrEventBase + RRScreenChangeNotify) {
-    XRRUpdateConfiguration_f(&xevent);
-    Fl::call_screen_init();
-    fl_init_workarea();
-    Fl::handle(FL_SCREEN_CONFIGURATION_CHANGED, NULL);
-  }
-#endif
-
-  if (xevent.type == PropertyNotify && xevent.xproperty.atom == fl_NET_WORKAREA) {
-    fl_init_workarea();
-  }
-  
-  switch (xevent.type) {
-
-  case KeymapNotify:
-    memcpy(fl_key_vector, xevent.xkeymap.key_vector, 32);
-    return 0;
-
-  case MappingNotify:
-    XRefreshKeyboardMapping((XMappingEvent*)&xevent.xmapping);
-    return 0;
-
-  case SelectionNotify: {
-    static unsigned char* sn_buffer = 0;
-    //static const char *buffer_format = 0;
-    if (sn_buffer) {XFree(sn_buffer); sn_buffer = 0;}
-    long bytesread = 0;
-    if (fl_xevent->xselection.property) for (;;) {
-      // The Xdnd code pastes 64K chunks together, possibly to avoid
-      // bugs in X servers, or maybe to avoid an extra round-trip to
-      // get the property length.  I copy this here:
-      Atom actual; int format; unsigned long count, remaining;
-      unsigned char* portion = NULL;
-      if (XGetWindowProperty(fl_display,
-                             fl_xevent->xselection.requestor,
-                             fl_xevent->xselection.property,
-                             bytesread/4, 65536, 1, AnyPropertyType,
-                             &actual, &format, &count, &remaining,
-                             &portion)) break; // quit on error
-
-      if ((fl_xevent->xselection.property == PRIMARY_TIMESTAMP) ||
-          (fl_xevent->xselection.property == CLIPBOARD_TIMESTAMP)) {
-        if (portion && format == 32 && count == 1) {
-          Time t = *(unsigned int*)portion;
-          if (fl_xevent->xselection.property == CLIPBOARD_TIMESTAMP)
-            handle_clipboard_timestamp(1, t);
-          else
-            handle_clipboard_timestamp(0, t);
-        }
-	XFree(portion); portion = 0;
-        return true;
-      }
-
-      if (actual == TARGETS || actual == XA_ATOM) {
-/*for (unsigned i = 0; i<count; i++) {
-  fprintf(stderr," %s", XGetAtomName(fl_display, ((Atom*)portion)[i]) );
-  }
-fprintf(stderr,"\n");*/
-	Atom t, type = XA_STRING;
-	if (Fl::e_clipboard_type == Fl::clipboard_image) { // searching for image data
-	  for (unsigned i = 0; i<count; i++) { 
-	    t = ((Atom*)portion)[i];
-	    if (t == fl_XaImageBmp || t == fl_XaImagePNG) {
-	      type = t;
-	      goto found;
-	    }
-	  }
-	  XFree(portion);
-	  return true;
-	}
-	for (unsigned i = 0; i<count; i++) { // searching for text data
-	  t = ((Atom*)portion)[i];
-	  if (t == fl_Xatextplainutf ||
-	      t == fl_Xatextplainutf2 ||
-	      t == fl_Xatextplain ||
-	      t == fl_XaUtf8String) {
-	    type = t;
-	    break;
-	  }
-	  // rest are only used if no utf-8 available:
-	  if (t == fl_XaText ||
-	      t == fl_XaTextUriList ||
-	      t == fl_XaCompoundText) type = t;
-	}
-      found:
-	XFree(portion); portion = 0;
-	Atom property = xevent.xselection.property;
-	XConvertSelection(fl_display, property, type, property,
-	      fl_xid(Fl::first_window()),
-	      fl_event_time);
-	if (type == fl_XaImageBmp) {
-	  Fl::e_clipboard_type = Fl::clipboard_image;
-	  //buffer_format = "image/bmp";
-	  }
-	else if (type == fl_XaImagePNG) {
-	  Fl::e_clipboard_type = Fl::clipboard_image;
-	  //buffer_format = "image/png";
-	  }
-	else {
-	  Fl::e_clipboard_type = Fl::clipboard_plain_text;
-	  //buffer_format = Fl::clipboard_plain_text;
-	  }
-//fprintf(stderr,"used format=%s\n", buffer_format);
-	return true;
-      }
-	if (actual == fl_INCR) {
-	  bytesread = getIncrData(sn_buffer, xevent.xselection, *(long*)portion);
-	  XFree(portion);
-	  break;
-	}
-	// Make sure we got something sane...
-      if ((portion == NULL) || (format != 8) || (count == 0)) {
-	if (portion) { XFree(portion); portion = 0; }
-        return true;
-      }
-      sn_buffer = (unsigned char*)realloc(sn_buffer, bytesread+count+remaining+1);
-      memcpy(sn_buffer+bytesread, portion, count);
-      if (portion) { XFree(portion); portion = 0; }
-      bytesread += count;
-      // Cannot trust data to be null terminated
-      sn_buffer[bytesread] = '\0';
-      if (!remaining) break;
-    }
-    if (sn_buffer && Fl::e_clipboard_type == Fl::clipboard_plain_text) {
-      sn_buffer[bytesread] = 0;
-      convert_crlf(sn_buffer, bytesread);
-    }
-    if (!fl_selection_requestor) return 0;
-    if (Fl::e_clipboard_type == Fl::clipboard_image) {
-      if (bytesread == 0) return 0;
-      static char tmp_fname[21];
-      static Fl_Shared_Image *shared = 0;
-      strcpy(tmp_fname, "/tmp/clipboardXXXXXX");
-      int fd = mkstemp(tmp_fname);
-      if (fd == -1) return 0;
-      uchar *p = sn_buffer; ssize_t towrite = bytesread, written;
-      while (towrite) {
-	written = write(fd, p, towrite);
-	p += written; towrite -= written;
-	}
-      close(fd);
-      free(sn_buffer); sn_buffer = 0;
-      shared = Fl_Shared_Image::get(tmp_fname);
-      unlink(tmp_fname);
-      if (!shared) return 0;
-      uchar *rgb = new uchar[shared->w() * shared->h() * shared->d()];
-      memcpy(rgb, shared->data()[0], shared->w() * shared->h() * shared->d());
-      Fl_RGB_Image *image = new Fl_RGB_Image(rgb, shared->w(), shared->h(), shared->d());
-      shared->release();
-      image->alloc_array = 1;
-      Fl::e_clipboard_data = (void*)image;
-    }
-    else if (Fl::e_clipboard_type == Fl::clipboard_plain_text) {
-      Fl::e_text = sn_buffer ? (char*)sn_buffer : (char *)"";
-      Fl::e_length = bytesread;
-      }
-    int old_event = Fl::e_number;
-    int retval = fl_selection_requestor->handle(Fl::e_number = FL_PASTE);
-    if (!retval && Fl::e_clipboard_type == Fl::clipboard_image) {
-      delete (Fl_RGB_Image*)Fl::e_clipboard_data;
-      Fl::e_clipboard_data = NULL;
-    }
-    Fl::e_number = old_event;
-    // Detect if this paste is due to Xdnd by the property name (I use
-    // XA_SECONDARY for that) and send an XdndFinished message. It is not
-    // clear if this has to be delayed until now or if it can be done
-    // immediately after calling XConvertSelection.
-    if (fl_xevent->xselection.property == XA_SECONDARY &&
-        fl_dnd_source_window) {
-      fl_sendClientMessage(fl_dnd_source_window, fl_XdndFinished,
-                           fl_xevent->xselection.requestor);
-      fl_dnd_source_window = 0; // don't send a second time
-    }
-    return 1;}
-
-  case SelectionClear: {
-    int clipboard = fl_xevent->xselectionclear.selection == CLIPBOARD;
-    fl_i_own_selection[clipboard] = 0;
-    poll_clipboard_owner();
-    return 1;}
-
-  case SelectionRequest: {
-    XSelectionEvent e;
-    e.type = SelectionNotify;
-    e.requestor = fl_xevent->xselectionrequest.requestor;
-    e.selection = fl_xevent->xselectionrequest.selection;
-    int clipboard = e.selection == CLIPBOARD;
-    e.target = fl_xevent->xselectionrequest.target;
-    e.time = fl_xevent->xselectionrequest.time;
-    e.property = fl_xevent->xselectionrequest.property;
-    if (fl_selection_type[clipboard] == Fl::clipboard_plain_text) {
-      if (e.target == TARGETS) {
-	Atom a[3] = {fl_XaUtf8String, XA_STRING, fl_XaText};
-	XChangeProperty(fl_display, e.requestor, e.property,
-	                XA_ATOM, atom_bits, 0, (unsigned char*)a, 3);
-      } else {
-	if (/*e.target == XA_STRING &&*/ fl_selection_length[clipboard]) {
-	  if (e.target == fl_XaUtf8String ||
-	      e.target == XA_STRING ||
-	      e.target == fl_XaCompoundText ||
-	      e.target == fl_XaText ||
-	      e.target == fl_Xatextplain ||
-	      e.target == fl_Xatextplainutf ||
-	      e.target == fl_Xatextplainutf2) {
-	    // clobber the target type, this seems to make some applications
-	    // behave that insist on asking for XA_TEXT instead of UTF8_STRING
-	    // Does not change XA_STRING as that breaks xclipboard.
-	    if (e.target != XA_STRING) e.target = fl_XaUtf8String;
-	    XChangeProperty(fl_display, e.requestor, e.property,
-		            e.target, 8, 0,
-		            (unsigned char *)fl_selection_buffer[clipboard],
-		            fl_selection_length[clipboard]);
-	  }
-	} else {
-	  //    char* x = XGetAtomName(fl_display,e.target);
-	  //    fprintf(stderr,"selection request of %s\n",x);
-	  //    XFree(x);
-	  e.property = 0;
-	}
-      }
-    } else { // image in clipboard
-      if (e.target == TARGETS) {
-	Atom a[1] = {fl_XaImageBmp};
-	XChangeProperty(fl_display, e.requestor, e.property,
-	                XA_ATOM, atom_bits, 0, (unsigned char*)a, 1);
-      } else {
-	if (e.target == fl_XaImageBmp && fl_selection_length[clipboard]) {
-	    XChangeProperty(fl_display, e.requestor, e.property,
-		            e.target, 8, 0,
-		            (unsigned char *)fl_selection_buffer[clipboard],
-		            fl_selection_length[clipboard]);
-	} else {
-	  e.property = 0;
-	}
-      }
-    }
-    XSendEvent(fl_display, e.requestor, 0, 0, (XEvent *)&e);}
-    return 1;
-
-  // events where interesting window id is in a different place:
-  case CirculateNotify:
-  case CirculateRequest:
-  case ConfigureNotify:
-  case ConfigureRequest:
-  case CreateNotify:
-  case DestroyNotify:
-  case GravityNotify:
-  case MapNotify:
-  case MapRequest:
-  case ReparentNotify:
-  case UnmapNotify:
-    xid = xevent.xmaprequest.window;
-    break;
-  }
-
-  int event = 0;
-  Fl_Window* window = fl_find(xid);
-
-  if (window) switch (xevent.type) {
-
-    case DestroyNotify: { // an X11 window was closed externally from the program
-      Fl::handle(FL_CLOSE, window);
-      Fl_X* X = Fl_X::i(window);
-      if (X) { // indicates the FLTK window was not closed
-	X->xid = (Window)0; // indicates the X11 window was already destroyed
-	window->hide();
-	int oldx = window->x(), oldy = window->y();
-	window->position(0, 0);
-	window->position(oldx, oldy);
-	window->show(); // recreate the X11 window in support of the FLTK window
-	}
-      return 1;
-    }
-  case ClientMessage: {
-    Atom message = fl_xevent->xclient.message_type;
-    const long* data = fl_xevent->xclient.data.l;
-    if ((Atom)(data[0]) == WM_DELETE_WINDOW) {
-      event = FL_CLOSE;
-    } else if (message == fl_XdndEnter) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      // version number is data[1]>>24
-//      printf("XdndEnter, version %ld\n", data[1] >> 24);
-      if (data[1]&1) {
-        // get list of data types:
-        Atom actual; int format; unsigned long count, remaining;
-        unsigned char *cm_buffer = 0;
-        XGetWindowProperty(fl_display, fl_dnd_source_window, fl_XdndTypeList,
-                           0, 0x8000000L, False, XA_ATOM, &actual, &format,
-                           &count, &remaining, &cm_buffer);
-        if (actual != XA_ATOM || format != 32 || count<4 || !cm_buffer) {
-          if ( cm_buffer ) { XFree(cm_buffer); cm_buffer = 0; }
-          goto FAILED;
-	}
-        delete [] fl_dnd_source_types;
-        fl_dnd_source_types = new Atom[count+1];
-        for (unsigned i = 0; i < count; i++) {
-          fl_dnd_source_types[i] = ((Atom*)cm_buffer)[i];
-        }
-        fl_dnd_source_types[count] = 0;
-        XFree(cm_buffer); cm_buffer = 0;
-      } else {
-      FAILED:
-        // less than four data types, or if the above messes up:
-        if (!fl_dnd_source_types) fl_dnd_source_types = new Atom[4];
-        fl_dnd_source_types[0] = data[2];
-        fl_dnd_source_types[1] = data[3];
-        fl_dnd_source_types[2] = data[4];
-        fl_dnd_source_types[3] = 0;
-      }
-
-      // Loop through the source types and pick the first text type...
-      unsigned i;
-      Atom type = ((Atom*)fl_dnd_source_types)[0];
-      for (i = 0; fl_dnd_source_types[i]; i ++) {
-        Atom t = ((Atom*)fl_dnd_source_types)[i];
-        //printf("fl_dnd_source_types[%d]=%ld(%s)\n",i,t,XGetAtomName(fl_display,t));
-        if (t == fl_Xatextplainutf ||		// "text/plain;charset=UTF-8"
-            t == fl_Xatextplainutf2 ||		// "text/plain;charset=utf-8" -- See STR#2930
-            t == fl_Xatextplain ||		// "text/plain"
-            t == fl_XaUtf8String) {		// "UTF8_STRING"
-          type = t;
-          break;
-	}
-        // rest are only used if no utf-8 available:
-        if (t == fl_XaText ||			// "TEXT"
-            t == fl_XaTextUriList ||		// "text/uri-list"
-            t == fl_XaCompoundText) type = t;	// "COMPOUND_TEXT"
-      }
-      fl_dnd_type = type;
-
-      event = FL_DND_ENTER;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      break;
-
-    } else if (message == fl_XdndPosition) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      Fl::e_x_root = data[2]>>16;
-      Fl::e_y_root = data[2]&0xFFFF;
-      if (window) {
-        Fl::e_x = Fl::e_x_root-window->x();
-        Fl::e_y = Fl::e_y_root-window->y();
-      }
-      fl_event_time = data[3];
-      fl_dnd_source_action = data[4];
-      fl_dnd_action = fl_XdndActionCopy;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      int accept = Fl::handle(FL_DND_DRAG, window);
-      fl_sendClientMessage(data[0], fl_XdndStatus,
-                           fl_xevent->xclient.window,
-                           accept ? 1 : 0,
-                           0, // used for xy rectangle to not send position inside
-                           0, // used for width+height of rectangle
-                           accept ? fl_dnd_action : None);
-      return 1;
-
-    } else if (message == fl_XdndLeave) {
-      fl_dnd_source_window = 0; // don't send a finished message to it
-      event = FL_DND_LEAVE;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      break;
-
-    } else if (message == fl_XdndDrop) {
-      fl_xmousewin = window;
-      in_a_window = true;
-      fl_dnd_source_window = data[0];
-      fl_event_time = data[2];
-      Window to_window = fl_xevent->xclient.window;
-      Fl::e_text = unknown;
-      Fl::e_length = unknown_len;
-      if (Fl::handle(FL_DND_RELEASE, window)) {
-        fl_selection_requestor = Fl::belowmouse();
-        Fl::e_clipboard_type = Fl::clipboard_plain_text;
-        XConvertSelection(fl_display, fl_XdndSelection,
-                          fl_dnd_type, XA_SECONDARY,
-                          to_window, fl_event_time);
-      } else {
-        // Send the finished message if I refuse the drop.
-        // It is not clear whether I can just send finished always,
-        // or if I have to wait for the SelectionNotify event as the
-        // code is currently doing.
-        fl_sendClientMessage(fl_dnd_source_window, fl_XdndFinished, to_window);
-        fl_dnd_source_window = 0;
-      }
-      return 1;
-
-    }
-    break;}
-
-  case UnmapNotify:
-    event = FL_HIDE;
-    break;
-
-  case Expose:
-    Fl_X::i(window)->wait_for_expose = 0;
-#  if 0
-    // try to keep windows on top even if WM_TRANSIENT_FOR does not work:
-    // opaque move/resize window managers do not like this, so I disabled it.
-    if (Fl::first_window()->non_modal() && window != Fl::first_window())
-      Fl::first_window()->show();
-#  endif
-
-  case GraphicsExpose:
-    window->damage(FL_DAMAGE_EXPOSE, xevent.xexpose.x, xevent.xexpose.y,
-                   xevent.xexpose.width, xevent.xexpose.height);
-    return 1;
-
-  case FocusIn:
-    if (fl_xim_ic) XSetICFocus(fl_xim_ic);
-    event = FL_FOCUS;
-    // If the user has toggled from another application to this one,
-    // then it's a good time to check for clipboard changes.
-    poll_clipboard_owner();
-    break;
-
-  case FocusOut:
-    if (fl_xim_ic) XUnsetICFocus(fl_xim_ic);
-    event = FL_UNFOCUS;
-    break;
-
-  case KeyPress:
-  case KeyRelease: {
-  KEYPRESS:
-    int keycode = xevent.xkey.keycode;
-    fl_key_vector[keycode/8] |= (1 << (keycode%8));
-    static char *kp_buffer = NULL;
-    static int kp_buffer_len = 0;
-    int len=0;
-    KeySym keysym;
-    if (kp_buffer_len == 0) {
-      kp_buffer_len = 4096;
-      kp_buffer = (char*) malloc(kp_buffer_len);
-    }
-    if (xevent.type == KeyPress) {
-      event = FL_KEYDOWN;
-      len = 0;
-
-      if (fl_xim_ic) {
-	Status status;
-	len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey,
-			     kp_buffer, kp_buffer_len, &keysym, &status);
-
-	while (status == XBufferOverflow && kp_buffer_len < 50000) {
-	  kp_buffer_len = kp_buffer_len * 5 + 1;
-	  kp_buffer = (char*)realloc(kp_buffer, kp_buffer_len);
-	  len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey,
-			     kp_buffer, kp_buffer_len, &keysym, &status);
-	}
-	keysym = fl_KeycodeToKeysym(fl_display, keycode, 0);
-      } else {
-        //static XComposeStatus compose;
-        len = XLookupString((XKeyEvent*)&(xevent.xkey),
-                             kp_buffer, kp_buffer_len, &keysym, 0/*&compose*/);
-        if (keysym && keysym < 0x400) { // a character in latin-1,2,3,4 sets
-          // force it to type a character (not sure if this ever is needed):
-          // if (!len) {kp_buffer[0] = char(keysym); len = 1;}
-          len = fl_utf8encode(XKeysymToUcs(keysym), kp_buffer);
-          if (len < 1) len = 1;
-          // ignore all effects of shift on the keysyms, which makes it a lot
-          // easier to program shortcuts and is Windoze-compatible:
-          keysym = fl_KeycodeToKeysym(fl_display, keycode, 0);
-        }
-      }
-      kp_buffer[len] = 0;
-      Fl::e_text = kp_buffer;
-      Fl::e_length = len;
-    } else {
-      // Stupid X sends fake key-up events when a repeating key is held
-      // down, probably due to some back compatibility problem. Fortunately
-      // we can detect this because the repeating KeyPress event is in
-      // the queue, get it and execute it instead:
-
-      // Bool XkbSetDetectableAutoRepeat ( display, detectable, supported_rtrn )
-      // Display * display ;
-      // Bool detectable ;
-      // Bool * supported_rtrn ;
-      // ...would be the easy way to correct this issue. Unfortunately, this call is also
-      // broken on many Unix distros including Ubuntu and Solaris (as of Dec 2009)
-
-      // Bogus KeyUp events are generated by repeated KeyDown events. One
-      // necessary condition is an identical key event pending right after
-      // the bogus KeyUp.
-      // The new code introduced Dec 2009 differs in that it only checks the very
-      // next event in the queue, not the entire queue of events.
-      // This function wrongly detects a repeat key if a software keyboard
-      // sends a burst of events containing two consecutive equal keys. However,
-      // in every non-gaming situation, this is no problem because both KeyPress
-      // events will cause the expected behavior.
-      XEvent peekevent;
-      if (XPending(fl_display)) {
-        XPeekEvent(fl_display, &peekevent);
-        if (   (peekevent.type == KeyPress) // must be a KeyPress event
-            && (peekevent.xkey.keycode == xevent.xkey.keycode) // must be the same key
-            && (peekevent.xkey.time == xevent.xkey.time) // must be sent at the exact same time
-            ) {
-          XNextEvent(fl_display, &xevent);
-          goto KEYPRESS;
-        }
-      }
-
-      event = FL_KEYUP;
-      fl_key_vector[keycode/8] &= ~(1 << (keycode%8));
-      // keyup events just get the unshifted keysym:
-      keysym = fl_KeycodeToKeysym(fl_display, keycode, 0);
-    }
-#  ifdef __sgi
-    // You can plug a microsoft keyboard into an sgi but the extra shift
-    // keys are not translated.  Make them translate like XFree86 does:
-    if (!keysym) switch(keycode) {
-    case 147: keysym = FL_Meta_L; break;
-    case 148: keysym = FL_Meta_R; break;
-    case 149: keysym = FL_Menu; break;
-    }
-#  endif
-#  ifdef BACKSPACE_HACK
-    // Attempt to fix keyboards that send "delete" for the key in the
-    // upper-right corner of the main keyboard.  But it appears that
-    // very few of these remain?
-    static int got_backspace = 0;
-    if (!got_backspace) {
-      if (keysym == FL_Delete) keysym = FL_BackSpace;
-      else if (keysym == FL_BackSpace) got_backspace = 1;
-    }
-#  endif
-    // For the first few years, there wasn't a good consensus on what the
-    // Windows keys should be mapped to for X11. So we need to help out a
-    // bit and map all variants to the same FLTK key...
-    switch (keysym) {
-	case XK_Meta_L:
-	case XK_Hyper_L:
-	case XK_Super_L:
-	  keysym = FL_Meta_L;
-	  break;
-	case XK_Meta_R:
-	case XK_Hyper_R:
-	case XK_Super_R:
-	  keysym = FL_Meta_R;
-	  break;
-      }
-    // Convert the multimedia keys to safer, portable values
-    switch (keysym) { // XF names come from X11/XF86keysym.h
-      case 0x1008FF11: // XF86XK_AudioLowerVolume:
-	keysym = FL_Volume_Down;
-	break;
-      case 0x1008FF12: // XF86XK_AudioMute:
-	keysym = FL_Volume_Mute;
-	break;
-      case 0x1008FF13: // XF86XK_AudioRaiseVolume:
-	keysym = FL_Volume_Up;
-	break;
-      case 0x1008FF14: // XF86XK_AudioPlay:
-	keysym = FL_Media_Play;
-	break;
-      case 0x1008FF15: // XF86XK_AudioStop:
-	keysym = FL_Media_Stop;
-	break;
-      case 0x1008FF16: // XF86XK_AudioPrev:
-	keysym = FL_Media_Prev;
-	break;
-      case 0x1008FF17: // XF86XK_AudioNext:
-	keysym = FL_Media_Next;
-	break;
-      case 0x1008FF18: // XF86XK_HomePage:
-	keysym = FL_Home_Page;
-	break;
-      case 0x1008FF19: // XF86XK_Mail:
-	keysym = FL_Mail;
-	break;
-      case 0x1008FF1B: // XF86XK_Search:
-	keysym = FL_Search;
-	break;
-      case 0x1008FF26: // XF86XK_Back:
-	keysym = FL_Back;
-	break;
-      case 0x1008FF27: // XF86XK_Forward:
-	keysym = FL_Forward;
-	break;
-      case 0x1008FF28: // XF86XK_Stop:
-	keysym = FL_Stop;
-	break;
-      case 0x1008FF29: // XF86XK_Refresh:
-	keysym = FL_Refresh;
-	break;
-      case 0x1008FF2F: // XF86XK_Sleep:
-	keysym = FL_Sleep;
-	break;
-      case 0x1008FF30: // XF86XK_Favorites:
-	keysym = FL_Favorites;
-	break;
-    }
-    // We have to get rid of the XK_KP_function keys, because they are
-    // not produced on Windoze and thus case statements tend not to check
-    // for them.  There are 15 of these in the range 0xff91 ... 0xff9f
-    if (keysym >= 0xff91 && keysym <= 0xff9f) {
-      // Map keypad keysym to character or keysym depending on
-      // numlock state...
-      unsigned long keysym1 = fl_KeycodeToKeysym(fl_display, keycode, 1);
-      if (keysym1 <= 0x7f || (keysym1 > 0xff9f && keysym1 <= FL_KP_Last))
-        Fl::e_original_keysym = (int)(keysym1 | FL_KP);
-      if ((xevent.xkey.state & Mod2Mask) &&
-          (keysym1 <= 0x7f || (keysym1 > 0xff9f && keysym1 <= FL_KP_Last))) {
-        // Store ASCII numeric keypad value...
-        keysym = keysym1 | FL_KP;
-        kp_buffer[0] = char(keysym1) & 0x7F;
-        len = 1;
-      } else {
-        // Map keypad to special key...
-        static const unsigned short table[15] = {
-          FL_F+1, FL_F+2, FL_F+3, FL_F+4,
-          FL_Home, FL_Left, FL_Up, FL_Right,
-          FL_Down, FL_Page_Up, FL_Page_Down, FL_End,
-          0xff0b/*XK_Clear*/, FL_Insert, FL_Delete};
-        keysym = table[keysym-0xff91];
-      }
-    } else {
-      // Store this so we can later know if the KP was used
-      Fl::e_original_keysym = (int)keysym;
-    }
-    Fl::e_keysym = int(keysym);
-
-    // replace XK_ISO_Left_Tab (Shift-TAB) with FL_Tab (modifier flags are set correctly by X11)
-    if (Fl::e_keysym == 0xfe20) Fl::e_keysym = FL_Tab;
-
-    set_event_xy();
-    Fl::e_is_click = 0; }
-    break;
-  
-  case ButtonPress:
-    Fl::e_keysym = FL_Button + xevent.xbutton.button;
-    set_event_xy();
-    Fl::e_dx = Fl::e_dy = 0;
-    if (xevent.xbutton.button == Button4) {
-      Fl::e_dy = -1; // Up
-      event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == Button5) {
-      Fl::e_dy = +1; // Down
-      event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == 6) {
-	Fl::e_dx = -1; // Left
-	event = FL_MOUSEWHEEL;
-    } else if (xevent.xbutton.button == 7) {
-	Fl::e_dx = +1; // Right
-	event = FL_MOUSEWHEEL;
-    } else {
-      Fl::e_state |= (FL_BUTTON1 << (xevent.xbutton.button-1));
-      event = FL_PUSH;
-      checkdouble();
-    }
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-
-  case PropertyNotify:
-    if (xevent.xproperty.atom == fl_NET_WM_STATE) {
-      int fullscreen_state = 0;
-      if (xevent.xproperty.state != PropertyDelete) {
-        unsigned long nitems;
-        unsigned long *words = 0;
-        if (0 == get_xwinprop(xid, fl_NET_WM_STATE, 64, &nitems, &words) ) { 
-          for (unsigned long item = 0; item < nitems; item++) {
-            if (words[item] == fl_NET_WM_STATE_FULLSCREEN) {
-              fullscreen_state = 1;
-            }
-          }
-        }
-	if ( words ) { XFree(words); words = 0; }
-      }
-      if (window->fullscreen_active() && !fullscreen_state) {
-        window->_clear_fullscreen();
-        event = FL_FULLSCREEN;
-      }
-      if (!window->fullscreen_active() && fullscreen_state) {
-        window->_set_fullscreen();
-        event = FL_FULLSCREEN;
-      }
-    }
-    break;
-
-  case MotionNotify:
-    set_event_xy();
-#  if CONSOLIDATE_MOTION
-    send_motion = fl_xmousewin = window;
-    in_a_window = true;
-    return 0;
-#  else
-    event = FL_MOVE;
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-#  endif
-
-  case ButtonRelease:
-    Fl::e_keysym = FL_Button + xevent.xbutton.button;
-    set_event_xy();
-    Fl::e_state &= ~(FL_BUTTON1 << (xevent.xbutton.button-1));
-    if (xevent.xbutton.button == Button4 ||
-        xevent.xbutton.button == Button5) return 0;
-    event = FL_RELEASE;
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    break;
-
-  case EnterNotify:
-    if (xevent.xcrossing.detail == NotifyInferior) break;
-    // XInstallColormap(fl_display, Fl_X::i(window)->colormap);
-    set_event_xy();
-    Fl::e_state = xevent.xcrossing.state << 16;
-    event = FL_ENTER;
-
-    fl_xmousewin = window;
-    in_a_window = true;
-    { XIMStyles *xim_styles = NULL;
-      if(!fl_xim_im || XGetIMValues(fl_xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL)) {
-	fl_init_xim();
-      }
-      if (xim_styles) XFree(xim_styles);
-    }
-    break;
-
-  case LeaveNotify:
-    if (xevent.xcrossing.detail == NotifyInferior) break;
-    set_event_xy();
-    Fl::e_state = xevent.xcrossing.state << 16;
-    fl_xmousewin = 0;
-    in_a_window = false; // make do_queued_events produce FL_LEAVE event
-    return 0;
-
-  // We cannot rely on the x,y position in the configure notify event.
-  // I now think this is an unavoidable problem with X: it is impossible
-  // for a window manager to prevent the "real" notify event from being
-  // sent when it resizes the contents, even though it can send an
-  // artificial event with the correct position afterwards (and some
-  // window managers do not send this fake event anyway)
-  // So anyway, do a round trip to find the correct x,y:
-  case MapNotify:
-    event = FL_SHOW;
-
-  case ConfigureNotify: {
-    if (window->parent()) break; // ignore child windows
-
-    // figure out where OS really put window
-    XWindowAttributes actual;
-    XGetWindowAttributes(fl_display, fl_xid(window), &actual);
-    Window cr; int X, Y, W = actual.width, H = actual.height;
-    XTranslateCoordinates(fl_display, fl_xid(window), actual.root,
-                          0, 0, &X, &Y, &cr);
-
-    // tell Fl_Window about it and set flag to prevent echoing:
-    resize_bug_fix = window;
-    window->resize(X, Y, W, H);
-    break; // allow add_handler to do something too
-    }
-
-  case ReparentNotify: {
-    int xpos, ypos;
-    Window junk;
-
-    // on some systems, the ReparentNotify event is not handled as we would expect.
-    XErrorHandler oldHandler = XSetErrorHandler(catchXExceptions());
-
-    //ReparentNotify gives the new position of the window relative to
-    //the new parent. FLTK cares about the position on the root window.
-    XTranslateCoordinates(fl_display, xevent.xreparent.parent,
-                          XRootWindow(fl_display, fl_screen),
-                          xevent.xreparent.x, xevent.xreparent.y,
-                          &xpos, &ypos, &junk);
-    XSetErrorHandler(oldHandler);
-
-    // tell Fl_Window about it and set flag to prevent echoing:
-    if ( !wasXExceptionRaised() ) {
-      resize_bug_fix = window;
-      window->position(xpos, ypos);
-    }
-    break;
-    }
-  }
-
-#if HAVE_XFIXES
-  switch (xevent.type - xfixes_event_base) {
-  case XFixesSelectionNotify: {
-    // Someone feeding us bogus events?
-    if (!have_xfixes)
-      return true;
-
-    XFixesSelectionNotifyEvent *selection_notify = (XFixesSelectionNotifyEvent *)&xevent;
-
-    if ((selection_notify->selection == XA_PRIMARY) && !fl_i_own_selection[0])
-      handle_clipboard_timestamp(0, selection_notify->selection_timestamp);
-    else if ((selection_notify->selection == CLIPBOARD) && !fl_i_own_selection[1])
-      handle_clipboard_timestamp(1, selection_notify->selection_timestamp);
-
-    return true;
-    }
-  }
-#endif
-
-  return Fl::handle(event, window);
-}
-
-////////////////////////////////////////////////////////////////
-
-void Fl_Window::resize(int X,int Y,int W,int H) {
-  int is_a_move = (X != x() || Y != y());
-  int is_a_resize = (W != w() || H != h());
-  int resize_from_program = (this != resize_bug_fix);
-  if (!resize_from_program) resize_bug_fix = 0;
-  if (is_a_move && resize_from_program) set_flag(FORCE_POSITION);
-  else if (!is_a_resize && !is_a_move) return;
-  if (is_a_resize) {
-    Fl_Group::resize(X,Y,W,H);
-    if (shown()) {redraw();}
-  } else {
-    x(X); y(Y);
-  }
-
-  if (resize_from_program && is_a_resize && !resizable()) {
-    size_range(w(), h(), w(), h());
-  }
-
-  if (resize_from_program && shown()) {
-    if (is_a_resize) {
-      if (!resizable()) size_range(w(),h(),w(),h());
-      if (is_a_move) {
-        XMoveResizeWindow(fl_display, i->xid, X, Y, W>0 ? W : 1, H>0 ? H : 1);
-      } else {
-        XResizeWindow(fl_display, i->xid, W>0 ? W : 1, H>0 ? H : 1);
-      }
-    } else
-      XMoveWindow(fl_display, i->xid, X, Y);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-#define _NET_WM_STATE_REMOVE        0  /* remove/unset property */
-#define _NET_WM_STATE_ADD           1  /* add/set property */
-#define _NET_WM_STATE_TOGGLE        2  /* toggle property  */
-
-static void send_wm_event(Window wnd, Atom message,
-                          unsigned long d0, unsigned long d1=0,
-                          unsigned long d2=0, unsigned long d3=0,
-                          unsigned long d4=0) {
-  XEvent e;
-  e.xany.type = ClientMessage;
-  e.xany.window = wnd;
-  e.xclient.message_type = message;
-  e.xclient.format = 32;
-  e.xclient.data.l[0] = d0;
-  e.xclient.data.l[1] = d1;
-  e.xclient.data.l[2] = d2;
-  e.xclient.data.l[3] = d3;
-  e.xclient.data.l[4] = d4;
-  XSendEvent(fl_display, RootWindow(fl_display, fl_screen),
-             0, SubstructureNotifyMask | SubstructureRedirectMask,
-             &e);
-}
-
-static void send_wm_state_event(Window wnd, int add, Atom prop) {
-  send_wm_event(wnd, fl_NET_WM_STATE,
-                add ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE, prop);
-}
-
-int Fl_X::ewmh_supported() {
-  static int result = -1;
-
-  if (result == -1) {
-    fl_open_display();
-    result = 0;
-    unsigned long nitems;
-    unsigned long *words = 0;
-    if (0 == get_xwinprop(XRootWindow(fl_display, fl_screen), fl_NET_SUPPORTING_WM_CHECK, 64,
-                          &nitems, &words) && nitems == 1) {
-      Window child = words[0];
-      if ( words ) { XFree(words); words = 0; }
-      if (0 == get_xwinprop(child, fl_NET_SUPPORTING_WM_CHECK, 64,
-                           &nitems, &words) ) {
-        if ( nitems == 1) result = (child == words[0]);
-      }
-    }
-    if ( words ) { XFree(words); words = 0; }
-  }
-
-  return result;
-}
-
-int Fl_X::xrender_supported() {
-#if HAVE_XRENDER
-  static int result = -1;
-
-  if (result == -1) {
-    fl_open_display();
-
-    int nop1, nop2;
-    result = XRenderQueryExtension(fl_display, &nop1, &nop2);
-  }
-
-  return result;
-#else
-  return 0;
-#endif
-}
-
-extern Fl_Window *fl_xfocus;
-
-void Fl_X::activate_window(Window w) {
-  if (!ewmh_supported())
-    return;
-
-  Window prev = 0;
-
-  if (fl_xfocus) {
-    Fl_X *x = Fl_X::i(fl_xfocus);
-    if (!x)
-      return;
-    prev = x->xid;
-  }
-
-  send_wm_event(w, fl_NET_ACTIVE_WINDOW, 1 /* application */,
-                0 /* timestamp */, prev /* previously active window */);
-}
-
-/* Change an existing window to fullscreen */
-void Fl_Window::fullscreen_x() {
-  if (Fl_X::ewmh_supported()) {
-    int top, bottom, left, right;
-
-    top = fullscreen_screen_top;
-    bottom = fullscreen_screen_bottom;
-    left = fullscreen_screen_left;
-    right = fullscreen_screen_right;
-
-    if ((top < 0) || (bottom < 0) || (left < 0) || (right < 0)) {
-      top = Fl::screen_num(x(), y(), w(), h());
-      bottom = top;
-      left = top;
-      right = top;
-    }
-
-    send_wm_event(fl_xid(this), fl_NET_WM_FULLSCREEN_MONITORS,
-                  top, bottom, left, right);
-    send_wm_state_event(fl_xid(this), 1, fl_NET_WM_STATE_FULLSCREEN);
-  } else {
-    _set_fullscreen();
-    hide();
-    show();
-    /* We want to grab the window, not a widget, so we cannot use Fl::grab */
-    XGrabKeyboard(fl_display, fl_xid(this), 1, GrabModeAsync, GrabModeAsync, fl_event_time);
-    Fl::handle(FL_FULLSCREEN, this);
-  }
-}
-
-void Fl_Window::fullscreen_off_x(int X, int Y, int W, int H) {
-  if (Fl_X::ewmh_supported()) {
-    send_wm_state_event(fl_xid(this), 0, fl_NET_WM_STATE_FULLSCREEN);
-  } else {
-    _clear_fullscreen();
-    /* The grab will be lost when the window is destroyed */
-    hide();
-    resize(X,Y,W,H);
-    show();
-    Fl::handle(FL_FULLSCREEN, this);
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-// A subclass of Fl_Window may call this to associate an X window it
-// creates with the Fl_Window:
-
-void fl_fix_focus(); // in Fl.cxx
-
-Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
-  Fl_X* xp = new Fl_X;
-  xp->xid = winxid;
-  xp->other_xid = 0;
-  xp->setwindow(win);
-  xp->next = Fl_X::first;
-  xp->region = 0;
-  xp->wait_for_expose = 1;
-  xp->backbuffer_bad = 1;
-  Fl_X::first = xp;
-  if (win->modal()) {Fl::modal_ = win; fl_fix_focus();}
-  return xp;
-}
-
-// More commonly a subclass calls this, because it hides the really
-// ugly parts of X and sets all the stuff for a window that is set
-// normally.  The global variables like fl_show_iconic are so that
-// subclasses of *that* class may change the behavior...
-
-char fl_show_iconic;    // hack for iconize()
-int fl_background_pixel = -1; // hack to speed up bg box drawing
-int fl_disable_transient_for; // secret method of removing TRANSIENT_FOR
-
-static const int childEventMask = ExposureMask;
-
-static const int XEventMask =
-ExposureMask|StructureNotifyMask
-|KeyPressMask|KeyReleaseMask|KeymapStateMask|FocusChangeMask
-|ButtonPressMask|ButtonReleaseMask
-|EnterWindowMask|LeaveWindowMask
-|PropertyChangeMask
-|PointerMotionMask;
-
-void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
-{
-  Fl_Group::current(0); // get rid of very common user bug: forgot end()
-
-  int X = win->x();
-  int Y = win->y();
-  int W = win->w();
-  if (W <= 0) W = 1; // X don't like zero...
-  int H = win->h();
-  if (H <= 0) H = 1; // X don't like zero...
-  if (!win->parent() && !Fl::grab()) {
-    // center windows in case window manager does not do anything:
-#ifdef FL_CENTER_WINDOWS
-    if (!win->force_position()) {
-      win->x(X = scr_x+(scr_w-W)/2);
-      win->y(Y = scr_y+(scr_h-H)/2);
-    }
-#endif // FL_CENTER_WINDOWS
-
-    // force the window to be on-screen.  Usually the X window manager
-    // does this, but a few don't, so we do it here for consistency:
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h, X, Y, W, H);
-
-    if (win->border()) {
-      // ensure border is on screen:
-      // (assume extremely minimal dimensions for this border)
-      const int top = 20;
-      const int left = 1;
-      const int right = 1;
-      const int bottom = 1;
-      if (X+W+right > scr_x+scr_w) X = scr_x+scr_w-right-W;
-      if (X-left < scr_x) X = scr_x+left;
-      if (Y+H+bottom > scr_y+scr_h) Y = scr_y+scr_h-bottom-H;
-      if (Y-top < scr_y) Y = scr_y+top;
-    }
-    // now insure contents are on-screen (more important than border):
-    if (X+W > scr_x+scr_w) X = scr_x+scr_w-W;
-    if (X < scr_x) X = scr_x;
-    if (Y+H > scr_y+scr_h) Y = scr_y+scr_h-H;
-    if (Y < scr_y) Y = scr_y;
-  }
-
-  // if the window is a subwindow and our parent is not mapped yet, we
-  // mark this window visible, so that mapping the parent at a later
-  // point in time will call this function again to finally map the subwindow.
-  if (win->parent() && !Fl_X::i(win->window())) {
-    win->set_visible();
-    return;
-  }
-
-  // Compute which screen(s) we should be on if we want to go fullscreen
-  int fullscreen_top, fullscreen_bottom, fullscreen_left, fullscreen_right;
-
-  fullscreen_top = win->fullscreen_screen_top;
-  fullscreen_bottom = win->fullscreen_screen_bottom;
-  fullscreen_left = win->fullscreen_screen_left;
-  fullscreen_right = win->fullscreen_screen_right;
-
-  if ((fullscreen_top < 0) || (fullscreen_bottom < 0) ||
-      (fullscreen_left < 0) || (fullscreen_right < 0)) {
-    fullscreen_top = Fl::screen_num(X, Y, W, H);
-    fullscreen_bottom = fullscreen_top;
-    fullscreen_left = fullscreen_top;
-    fullscreen_right = fullscreen_top;
-  }
-
-
-  ulong root = win->parent() ?
-    fl_xid(win->window()) : RootWindow(fl_display, fl_screen);
-
-  XSetWindowAttributes attr;
-  int mask = CWBorderPixel|CWColormap|CWEventMask|CWBitGravity;
-  attr.event_mask = win->parent() ? childEventMask : XEventMask;
-  attr.colormap = colormap;
-  attr.border_pixel = 0;
-  attr.bit_gravity = 0; // StaticGravity;
-  if (win->override()) {
-    attr.override_redirect = 1;
-    attr.save_under = 1;
-    mask |= CWOverrideRedirect | CWSaveUnder;
-  } else attr.override_redirect = 0;
-  if (Fl::grab()) {
-    attr.save_under = 1; mask |= CWSaveUnder;
-    if (!win->border()) {attr.override_redirect = 1; mask |= CWOverrideRedirect;}
-  }
-  // For the non-EWMH fullscreen case, we cannot use the code above,
-  // since we do not want save_under, do not want to turn off the
-  // border, and cannot grab without an existing window. Besides, 
-  // there is no clear_override(). 
-  if (win->fullscreen_active() && !Fl_X::ewmh_supported()) {
-    int sx, sy, sw, sh;
-    attr.override_redirect = 1;
-    mask |= CWOverrideRedirect;
-    Fl::screen_xywh(sx, sy, sw, sh, fullscreen_left);
-    X = sx;
-    Fl::screen_xywh(sx, sy, sw, sh, fullscreen_right);
-    W = sx + sw - X;
-    Fl::screen_xywh(sx, sy, sw, sh, fullscreen_top);
-    Y = sy;
-    Fl::screen_xywh(sx, sy, sw, sh, fullscreen_bottom);
-    H = sy + sh - Y;
-  }
-
-  if (fl_background_pixel >= 0) {
-    attr.background_pixel = fl_background_pixel;
-    fl_background_pixel = -1;
-    mask |= CWBackPixel;
-  }
-
-  Fl_X* xp =
-    set_xid(win, XCreateWindow(fl_display,
-                               root,
-                               X, Y, W, H,
-                               0, // borderwidth
-                               visual->depth,
-                               InputOutput,
-                               visual->visual,
-                               mask, &attr));
-  int showit = 1;
-
-  // Set WM_CLIENT_MACHINE and WM_LOCALE_NAME
-  XSetWMProperties(fl_display, xp->xid, NULL, NULL, NULL, 0, NULL, NULL, NULL);
-
-  // Set _NET_WM_PID
-  long pid;
-  pid = getpid();
-  XChangeProperty(fl_display, xp->xid, fl_NET_WM_PID,
-		  XA_CARDINAL, 32, 0, (unsigned char *)&pid, 1);
-
-  if (!win->parent() && !attr.override_redirect) {
-    // Communicate all kinds 'o junk to the X Window Manager:
-
-    win->label(win->label(), win->iconlabel());
-
-    XChangeProperty(fl_display, xp->xid, WM_PROTOCOLS,
-                    XA_ATOM, 32, 0, (uchar*)&WM_DELETE_WINDOW, 1);
-
-    // send size limits and border:
-    xp->sendxjunk();
-
-    // set the class property, which controls the icon used:
-    if (win->xclass()) {
-      char buffer[1024];
-      const char *xclass = win->xclass();
-      const int len = strlen(xclass);
-      // duplicate the xclass string for use as XA_WM_CLASS
-      strcpy(buffer, xclass);
-      strcpy(buffer + len + 1, xclass);
-      // create the capitalized version:
-      buffer[len + 1] = toupper(buffer[len + 1]);
-      if (buffer[len + 1] == 'X')
-        buffer[len + 2] = toupper(buffer[len + 2]);
-      XChangeProperty(fl_display, xp->xid, XA_WM_CLASS, XA_STRING, 8, 0,
-                      (unsigned char *)buffer, len * 2 + 2);
-    }
-
-    if (win->non_modal() && xp->next && !fl_disable_transient_for) {
-      // find some other window to be "transient for":
-      Fl_Window* wp = xp->next->w;
-      while (wp->parent()) wp = wp->window();
-      XSetTransientForHint(fl_display, xp->xid, fl_xid(wp));
-      if (!wp->visible()) showit = 0; // guess that wm will not show it
-      if (win->modal()) {
-        Atom net_wm_state = XInternAtom (fl_display, "_NET_WM_STATE", 0);
-        Atom net_wm_state_skip_taskbar = XInternAtom (fl_display, "_NET_WM_STATE_MODAL", 0);
-        XChangeProperty (fl_display, xp->xid, net_wm_state, XA_ATOM, 32,
-            PropModeAppend, (unsigned char*) &net_wm_state_skip_taskbar, 1);
-      }
-    }
-
-    // Make sure that borderless windows do not show in the task bar
-    if (!win->border()) {
-      Atom net_wm_state = XInternAtom (fl_display, "_NET_WM_STATE", 0);
-      Atom net_wm_state_skip_taskbar = XInternAtom (fl_display, "_NET_WM_STATE_SKIP_TASKBAR", 0);
-      XChangeProperty (fl_display, xp->xid, net_wm_state, XA_ATOM, 32,
-          PropModeAppend, (unsigned char*) &net_wm_state_skip_taskbar, 1);
-    }
-
-    // If asked for, create fullscreen
-    if (win->fullscreen_active() && Fl_X::ewmh_supported()) {
-      unsigned long data[4];
-      data[0] = fullscreen_top;
-      data[1] = fullscreen_bottom;
-      data[2] = fullscreen_left;
-      data[3] = fullscreen_right;
-      XChangeProperty (fl_display, xp->xid, fl_NET_WM_FULLSCREEN_MONITORS, XA_ATOM, 32,
-                       PropModeReplace, (unsigned char*) data, 4);
-      XChangeProperty (fl_display, xp->xid, fl_NET_WM_STATE, XA_ATOM, 32,
-                       PropModeAppend, (unsigned char*) &fl_NET_WM_STATE_FULLSCREEN, 1);
-    }
-
-    // Make it receptive to DnD:
-    long version = 4;
-    XChangeProperty(fl_display, xp->xid, fl_XdndAware,
-                    XA_ATOM, sizeof(int)*8, 0, (unsigned char*)&version, 1);
-
-    XWMHints *hints = XAllocWMHints();
-    hints->input = True;
-    hints->flags = InputHint;
-    if (fl_show_iconic) {
-      hints->flags |= StateHint;
-      hints->initial_state = IconicState;
-      fl_show_iconic = 0;
-      showit = 0;
-    }
-    if (win->icon_->legacy_icon) {
-      hints->icon_pixmap = (Pixmap)win->icon_->legacy_icon;
-      hints->flags       |= IconPixmapHint;
-    }
-    XSetWMHints(fl_display, xp->xid, hints);
-    XFree(hints);
-
-    xp->set_icons();
-  }
-
-  // set the window type for menu and tooltip windows to avoid animations (compiz)
-  if (win->menu_window() || win->tooltip_window()) {
-    Atom net_wm_type = XInternAtom(fl_display, "_NET_WM_WINDOW_TYPE", False);
-    Atom net_wm_type_kind = XInternAtom(fl_display, "_NET_WM_WINDOW_TYPE_MENU", False);
-    XChangeProperty(fl_display, xp->xid, net_wm_type, XA_ATOM, 32, PropModeReplace, (unsigned char*)&net_wm_type_kind, 1);
-  }
-
-#if HAVE_XFIXES
-  // register for clipboard change notifications
-  if (have_xfixes && !win->parent()) {
-    XFixesSelectSelectionInput(fl_display, xp->xid, XA_PRIMARY,
-                               XFixesSetSelectionOwnerNotifyMask);
-    XFixesSelectSelectionInput(fl_display, xp->xid, CLIPBOARD,
-                               XFixesSetSelectionOwnerNotifyMask);
-  }
-#endif
-
-  if (win->shape_data_) {
-    win->combine_mask();
-    }
-  XMapWindow(fl_display, xp->xid);
-  if (showit) {
-    win->set_visible();
-    int old_event = Fl::e_number;
-    win->handle(Fl::e_number = FL_SHOW); // get child windows to appear
-    Fl::e_number = old_event;
-    win->redraw();
-  }
-
-  // non-EWMH fullscreen case, need grab
-  if (win->fullscreen_active() && !Fl_X::ewmh_supported()) {
-    XGrabKeyboard(fl_display, xp->xid, 1, GrabModeAsync, GrabModeAsync, fl_event_time);
-  }
-
-}
-
-////////////////////////////////////////////////////////////////
-// Send X window stuff that can be changed over time:
-
-void Fl_X::sendxjunk() {
-  if (w->parent() || w->override()) return; // it's not a window manager window!
-
-  if (!w->size_range_set) { // default size_range based on resizable():
-    if (w->resizable()) {
-      Fl_Widget *o = w->resizable();
-      int minw = o->w(); if (minw > 100) minw = 100;
-      int minh = o->h(); if (minh > 100) minh = 100;
-      w->size_range(w->w() - o->w() + minw, w->h() - o->h() + minh, 0, 0);
-    } else {
-      w->size_range(w->w(), w->h(), w->w(), w->h());
-    }
-    return; // because this recursively called here
-  }
-
-  XSizeHints *hints = XAllocSizeHints();
-  // memset(&hints, 0, sizeof(hints)); jreiser suggestion to fix purify?
-  hints->min_width = w->minw;
-  hints->min_height = w->minh;
-  hints->max_width = w->maxw;
-  hints->max_height = w->maxh;
-  hints->width_inc = w->dw;
-  hints->height_inc = w->dh;
-  hints->win_gravity = StaticGravity;
-
-  // see the file /usr/include/X11/Xm/MwmUtil.h:
-  // fill all fields to avoid bugs in kwm and perhaps other window managers:
-  // 0, MWM_FUNC_ALL, MWM_DECOR_ALL
-  long prop[5] = {0, 1, 1, 0, 0};
-
-  if (hints->min_width != hints->max_width ||
-      hints->min_height != hints->max_height) { // resizable
-    hints->flags = PMinSize|PWinGravity;
-    if (hints->max_width >= hints->min_width ||
-        hints->max_height >= hints->min_height) {
-      hints->flags = PMinSize|PMaxSize|PWinGravity;
-      // unfortunately we can't set just one maximum size.  Guess a
-      // value for the other one.  Some window managers will make the
-      // window fit on screen when maximized, others will put it off screen:
-      if (hints->max_width < hints->min_width) hints->max_width = Fl::w();
-      if (hints->max_height < hints->min_height) hints->max_height = Fl::h();
-    }
-    if (hints->width_inc && hints->height_inc) hints->flags |= PResizeInc;
-    if (w->aspect) {
-      // stupid X!  It could insist that the corner go on the
-      // straight line between min and max...
-      hints->min_aspect.x = hints->max_aspect.x = hints->min_width;
-      hints->min_aspect.y = hints->max_aspect.y = hints->min_height;
-      hints->flags |= PAspect;
-    }
-  } else { // not resizable:
-    hints->flags = PMinSize|PMaxSize|PWinGravity;
-    prop[0] = 1; // MWM_HINTS_FUNCTIONS
-    prop[1] = 1|2|16; // MWM_FUNC_ALL | MWM_FUNC_RESIZE | MWM_FUNC_MAXIMIZE
-  }
-
-  if (w->force_position()) {
-    hints->flags |= USPosition;
-    hints->x = w->x();
-    hints->y = w->y();
-  }
-
-  if (!w->border()) {
-    prop[0] |= 2; // MWM_HINTS_DECORATIONS
-    prop[2] = 0; // no decorations
-  }
-
-  XSetWMNormalHints(fl_display, xid, hints);
-  XChangeProperty(fl_display, xid,
-                  fl_MOTIF_WM_HINTS, fl_MOTIF_WM_HINTS,
-                  32, 0, (unsigned char *)prop, 5);
-  XFree(hints);
-}
-
-void Fl_Window::size_range_() {
-  size_range_set = 1;
-  if (shown()) i->sendxjunk();
-}
-
-////////////////////////////////////////////////////////////////
-
-static unsigned long *default_net_wm_icons = 0L;
-static size_t default_net_wm_icons_size = 0;
-
-// Note: icons[] *must* contain at least <count> valid image pointers (!NULL),
-//  but: <count> *may* be 0
-static void icons_to_property(const Fl_RGB_Image *icons[], int count,
-                              unsigned long **property, size_t *len) {
-  size_t sz;
-  unsigned long *data;
-
-  sz = 0;
-  for (int i = 0;i < count;i++)
-    sz += 2 + icons[i]->w() * icons[i]->h();
-
-  // FIXME: Might want to sort the icons
-
-  *property = data = new unsigned long[sz];
-  *len = sz;
-
-  for (int i = 0;i < count;i++) {
-    const Fl_RGB_Image *image;
-
-    image = icons[i];
-
-    data[0] = image->w();
-    data[1] = image->h();
-    data += 2;
-
-    const int extra_data = image->ld() ? (image->ld()-image->w()*image->d()) : 0;
-
-    const uchar *in = (const uchar*)*image->data();
-    for (int y = 0; y < image->h(); y++) {
-      for (int x = 0; x < image->w(); x++) {
-        switch (image->d()) {
-        case 1:
-          *data = ( 0xff<<24) | (in[0]<<16) | (in[0]<<8) | in[0];
-          break;
-        case 2:
-          *data = (in[1]<<24) | (in[0]<<16) | (in[0]<<8) | in[0];
-          break;
-        case 3:
-          *data = ( 0xff<<24) | (in[0]<<16) | (in[1]<<8) | in[2];
-          break;
-        case 4:
-          *data = (in[3]<<24) | (in[0]<<16) | (in[1]<<8) | in[2];
-          break;
-        }
-        in += image->d();
-        data++;
-      }
-      in += extra_data;
-    }
-  }
-}
-
-void Fl_X::set_default_icons(const Fl_RGB_Image *icons[], int count) {
-  if (default_net_wm_icons) {
-    delete [] default_net_wm_icons;
-    default_net_wm_icons = 0L;
-    default_net_wm_icons_size = 0;
-  }
-
-  if (count > 0)
-    icons_to_property(icons, count,
-                      &default_net_wm_icons, &default_net_wm_icons_size);
-}
-
-void Fl_X::set_icons() {
-  unsigned long *net_wm_icons;
-  size_t net_wm_icons_size;
-
-  if (w->icon_->count) {
-    icons_to_property((const Fl_RGB_Image **)w->icon_->icons, w->icon_->count,
-                      &net_wm_icons, &net_wm_icons_size);
-  } else {
-    net_wm_icons = default_net_wm_icons;
-    net_wm_icons_size = default_net_wm_icons_size;
-  }
-
-  XChangeProperty (fl_display, xid, fl_NET_WM_ICON, XA_CARDINAL, 32,
-      PropModeReplace, (unsigned char*) net_wm_icons, net_wm_icons_size);
-
-  if (w->icon_->count) {
-    delete [] net_wm_icons;
-    net_wm_icons = 0L;
-    net_wm_icons_size = 0;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-
-int Fl_X::set_cursor(Fl_Cursor c) {
-
-  /* The cursors are cached, because creating one takes 0.5ms including
-     opening, reading, and closing theme files. They are kept until program
-     exit by design, which valgrind will note as reachable. */
-  static Cursor xc_arrow = None;
-  static Cursor xc_cross = None;
-  static Cursor xc_wait = None;
-  static Cursor xc_insert = None;
-  static Cursor xc_hand = None;
-  static Cursor xc_help = None;
-  static Cursor xc_move = None;
-  static Cursor xc_ns = None;
-  static Cursor xc_we = None;
-  static Cursor xc_ne = None;
-  static Cursor xc_n = None;
-  static Cursor xc_nw = None;
-  static Cursor xc_e = None;
-  static Cursor xc_w = None;
-  static Cursor xc_se = None;
-  static Cursor xc_s = None;
-  static Cursor xc_sw = None;
-
-  Cursor xc;
-
-#define cache_cursor(name, var) if (var == None) { \
-                                  var = XCreateFontCursor(fl_display, name); \
-                                } \
-                                xc = var
-
-  switch (c) {
-  case FL_CURSOR_ARROW:   cache_cursor(XC_left_ptr, xc_arrow); break;
-  case FL_CURSOR_CROSS:   cache_cursor(XC_tcross, xc_cross); break;
-  case FL_CURSOR_WAIT:    cache_cursor(XC_watch, xc_wait); break;
-  case FL_CURSOR_INSERT:  cache_cursor(XC_xterm, xc_insert); break;
-  case FL_CURSOR_HAND:    cache_cursor(XC_hand2, xc_hand); break;
-  case FL_CURSOR_HELP:    cache_cursor(XC_question_arrow, xc_help); break;
-  case FL_CURSOR_MOVE:    cache_cursor(XC_fleur, xc_move); break;
-  case FL_CURSOR_NS:      cache_cursor(XC_sb_v_double_arrow, xc_ns); break;
-  case FL_CURSOR_WE:      cache_cursor(XC_sb_h_double_arrow, xc_we); break;
-  case FL_CURSOR_NE:      cache_cursor(XC_top_right_corner, xc_ne); break;
-  case FL_CURSOR_N:       cache_cursor(XC_top_side, xc_n); break;
-  case FL_CURSOR_NW:      cache_cursor(XC_top_left_corner, xc_nw); break;
-  case FL_CURSOR_E:       cache_cursor(XC_right_side, xc_e); break;
-  case FL_CURSOR_W:       cache_cursor(XC_left_side, xc_w); break;
-  case FL_CURSOR_SE:      cache_cursor(XC_bottom_right_corner, xc_se); break;
-  case FL_CURSOR_S:       cache_cursor(XC_bottom_side, xc_s); break;
-  case FL_CURSOR_SW:      cache_cursor(XC_bottom_left_corner, xc_sw); break;
-  default:
-    return 0;
-  }
-
-#undef cache_cursor
-
-  XDefineCursor(fl_display, xid, xc);
-
-  return 1;
-}
-
-int Fl_X::set_cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-#if ! HAVE_XCURSOR
-  return 0;
-#else
-  XcursorImage *cursor;
-  Cursor xc;
-
-  if ((hotx < 0) || (hotx >= image->w()))
-    return 0;
-  if ((hoty < 0) || (hoty >= image->h()))
-    return 0;
-
-  cursor = XcursorImageCreate(image->w(), image->h());
-  if (!cursor)
-    return 0;
-
-  const int extra_data = image->ld() ? (image->ld()-image->w()*image->d()) : 0;
-  const uchar *i = (const uchar*)*image->data();
-  XcursorPixel *o = cursor->pixels;
-  for (int y = 0;y < image->h();y++) {
-    for (int x = 0;x < image->w();x++) {
-      switch (image->d()) {
-      case 1:
-        *o = (0xff<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 2:
-        *o = (i[1]<<24) | (i[0]<<16) | (i[0]<<8) | i[0];
-        break;
-      case 3:
-        *o = (0xff<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      case 4:
-        *o = (i[3]<<24) | (i[0]<<16) | (i[1]<<8) | i[2];
-        break;
-      }
-      i += image->d();
-      o++;
-    }
-    i += extra_data;
-  }
-
-  cursor->xhot = hotx;
-  cursor->yhot = hoty;
-
-  xc = XcursorImageLoadCursor(fl_display, cursor);
-  XDefineCursor(fl_display, xid, xc);
-  XFreeCursor(fl_display, xc);
-
-  XcursorImageDestroy(cursor);
-
-  return 1;
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-// returns pointer to the filename, or null if name ends with '/'
-const char *fl_filename_name(const char *name) {
-  const char *p,*q;
-  if (!name) return (0);
-  for (p=q=name; *p;) if (*p++ == '/') q = p;
-  return q;
-}
-
-void Fl_Window::label(const char *name,const char *iname) {
-  Fl_Widget::label(name);
-  iconlabel_ = iname;
-  if (shown() && !parent()) {
-    if (!name) name = "";
-    int namelen = strlen(name);
-    if (!iname) iname = fl_filename_name(name);
-    int inamelen = strlen(iname);
-    XChangeProperty(fl_display, i->xid, fl_NET_WM_NAME,      fl_XaUtf8String, 8, 0, (uchar*)name,  namelen);	// utf8
-    XChangeProperty(fl_display, i->xid, XA_WM_NAME,          XA_STRING,       8, 0, (uchar*)name,  namelen);	// non-utf8
-    XChangeProperty(fl_display, i->xid, fl_NET_WM_ICON_NAME, fl_XaUtf8String, 8, 0, (uchar*)iname, inamelen);	// utf8
-    XChangeProperty(fl_display, i->xid, XA_WM_ICON_NAME,     XA_STRING,       8, 0, (uchar*)iname, inamelen);	// non-utf8
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// Implement the virtual functions for the base Fl_Window class:
-
-// If the box is a filled rectangle, we can make the redisplay *look*
-// faster by using X's background pixel erasing.  We can make it
-// actually *be* faster by drawing the frame only, this is done by
-// setting fl_boxcheat, which is seen by code in fl_drawbox.cxx:
-//
-// On XFree86 (and prehaps all X's) this has a problem if the window
-// is resized while a save-behind window is atop it.  The previous
-// contents are restored to the area, but this assumes the area
-// is cleared to background color.  So this is disabled in this version.
-// Fl_Window *fl_boxcheat;
-static inline int can_boxcheat(uchar b) {return (b==1 || ((b&2) && b<=15));}
-
-void Fl_Window::show() {
-  image(Fl::scheme_bg_);
-  if (Fl::scheme_bg_) {
-    labeltype(FL_NORMAL_LABEL);
-    align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
-  } else {
-    labeltype(FL_NO_LABEL);
-  }
-  Fl_Tooltip::exit(this);
-  if (!shown()) {
-    fl_open_display();
-    // Don't set background pixel for double-buffered windows...
-    if (type() != FL_DOUBLE_WINDOW && can_boxcheat(box())) {
-      fl_background_pixel = int(fl_xpixel(color()));
-    }
-    Fl_X::make_xid(this);
-  } else {
-    XMapRaised(fl_display, i->xid);
-  }
-#ifdef USE_PRINT_BUTTON
-void preparePrintFront(void);
-preparePrintFront();
-#endif
-}
-
-Window fl_window;
-Fl_Window *Fl_Window::current_;
-GC fl_gc;
-
-// make X drawing go into this window (called by subclass flush() impl.)
-void Fl_Window::make_current() {
-  static GC gc; // the GC used by all X windows
-  if (!shown()) {
-    fl_alert("Fl_Window::make_current(), but window is not shown().");
-    Fl::fatal("Fl_Window::make_current(), but window is not shown().");
-  }
-  if (!gc) gc = XCreateGC(fl_display, i->xid, 0, 0);
-  fl_window = i->xid;
-  fl_gc = gc;
-  current_ = this;
-  fl_clip_region(0);
-
-#ifdef FLTK_USE_CAIRO
-  // update the cairo_t context
-  if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
-#endif
-}
-
-FL_EXPORT Window fl_xid_(const Fl_Window *w) {
-  Fl_X *temp = Fl_X::i(w);
-  return temp ? temp->xid : 0;
-}
-
-static void decorated_win_size(Fl_Window *win, int &w, int &h)
-{
-  w = win->w();
-  h = win->h();
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) return;
-  Window root, parent, *children;
-  unsigned n = 0;
-  Status status = XQueryTree(fl_display, Fl_X::i(win)->xid, &root, &parent, &children, &n); 
-  if (status != 0 && n) XFree(children);
-  // when compiz is used, root and parent are the same window 
-  // and I don't know where to find the window decoration
-  if (status == 0 || root == parent) return; 
-  XWindowAttributes attributes;
-  XGetWindowAttributes(fl_display, parent, &attributes);
-  w = attributes.width;
-  h = attributes.height;
-}
-
-int Fl_Window::decorated_h()
-{
-  int w, h;
-  decorated_win_size(this, w, h);
-  return h;
-}
-
-int Fl_Window::decorated_w()
-{
-  int w, h;
-  decorated_win_size(this, w, h);
-  return w;
-}
-
-void Fl_Paged_Device::print_window(Fl_Window *win, int x_offset, int y_offset)
-{
-  if (!win->shown() || win->parent() || !win->border() || !win->visible()) {
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  draw_decorated_window(win, x_offset, y_offset, this);
-}
-
-void Fl_Paged_Device::draw_decorated_window(Fl_Window *win, int x_offset, int y_offset, Fl_Surface_Device *toset)
-{
-  Fl_Display_Device::display_device()->set_current();
-  win->show();
-  Fl::check();
-  win->make_current();
-  Window root, parent, *children, child_win, from;
-  unsigned n = 0;
-  int bx, bt, do_it;
-  from = fl_window;
-  do_it = (XQueryTree(fl_display, fl_window, &root, &parent, &children, &n) != 0 && 
-	   XTranslateCoordinates(fl_display, fl_window, parent, 0, 0, &bx, &bt, &child_win) == True);
-  if (n) XFree(children);
-  // hack to bypass STR #2648: when compiz is used, root and parent are the same window 
-  // and I don't know where to find the window decoration
-  if (do_it && root == parent) do_it = 0; 
-  if (!do_it) {
-    toset->set_current();
-    this->print_widget(win, x_offset, y_offset);
-    return;
-  }
-  fl_window = parent;
-  uchar *top_image = 0, *left_image = 0, *right_image = 0, *bottom_image = 0;
-  top_image = fl_read_image(NULL, 0, 0, - (win->w() + 2 * bx), bt);
-  if (bx) {
-    left_image = fl_read_image(NULL, 0, bt, -bx, win->h() + bx);
-    right_image = fl_read_image(NULL, win->w() + bx, bt, -bx, win->h() + bx);
-    bottom_image = fl_read_image(NULL, 0, bt + win->h(), -(win->w() + 2*bx), bx);
-  }
-  fl_window = from;
-  toset->set_current();
-  if (top_image) {
-    fl_draw_image(top_image, x_offset, y_offset, win->w() + 2 * bx, bt, 3);
-    delete[] top_image;
-  }
-  if (bx) {
-    if (left_image) fl_draw_image(left_image, x_offset, y_offset + bt, bx, win->h() + bx, 3);
-    if (right_image) fl_draw_image(right_image, x_offset + win->w() + bx, y_offset + bt, bx, win->h() + bx, 3);
-    if (bottom_image) fl_draw_image(bottom_image, x_offset, y_offset + bt + win->h(), win->w() + 2*bx, bx, 3);
-    if (left_image) delete[] left_image;
-    if (right_image) delete[] right_image;
-    if (bottom_image) delete[] bottom_image;
-  }
-  this->print_widget( win, x_offset + bx, y_offset + bt );
-}
-
-#ifdef USE_PRINT_BUTTON
-// to test the Fl_Printer class creating a "Print front window" button in a separate window
-// contains also preparePrintFront call above
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Button.H>
-void printFront(Fl_Widget *o, void *data)
-{
-  Fl_Printer printer;
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  int w, h;
-  if( printer.start_job(1) ) { o->window()->show(); return; }
-  if( printer.start_page() ) { o->window()->show(); return; }
-  printer.printable_rect(&w,&h);
-  // scale the printer device so that the window fits on the page
-  float scale = 1;
-  int ww = win->decorated_w();
-  int wh = win->decorated_h();
-  if (ww > w || wh > h) {
-    scale = (float)w/ww;
-    if ((float)h/wh < scale) scale = (float)h/wh;
-    printer.scale(scale, scale);
-  }
-
-// #define ROTATE 20.0
-#ifdef ROTATE
-  printer.scale(scale * 0.8, scale * 0.8);
-  printer.printable_rect(&w, &h);
-  printer.origin(w/2, h/2 );
-  printer.rotate(ROTATE);
-  printer.print_widget( win, - win->w()/2, - win->h()/2 );
-  //printer.print_window_part( win, 0,0, win->w(), win->h(), - win->w()/2, - win->h()/2 );
-#else  
-  printer.print_window(win);
-#endif
-
-  printer.end_page();
-  printer.end_job();
-  o->window()->show();
-}
-
-#include <FL/Fl_Copy_Surface.H>
-void copyFront(Fl_Widget *o, void *data)
-{
-  o->window()->hide();
-  Fl_Window *win = Fl::first_window();
-  if (!win) return;
-  Fl_Copy_Surface *surf = new Fl_Copy_Surface(win->decorated_w(), win->decorated_h());
-  surf->set_current();
-  surf->draw_decorated_window(win); // draw the window content
-  delete surf; // put the window on the clipboard
-  o->window()->show();
-}
-
-void preparePrintFront(void)
-{
-  static int first=1;
-  if(!first) return;
-  first=0;
-  static Fl_Window w(0,0,140,60);
-  static Fl_Button bp(0,0,w.w(),30, "Print front window");
-  bp.callback(printFront);
-  static Fl_Button bc(0,30,w.w(),30, "Copy front window");
-  bc.callback(copyFront);
-  w.end();
-  w.show();
-}
-#endif // USE_PRINT_BUTTON
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/Makefile
+++ /dev/null
@@ -1,809 +1,0 @@
-#
-# "$Id$"
-#
-# Library makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2014 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-# Note:	see ../configure.in and/or ../makeinclude for definition of
-#	FL_VERSION (x.y.z), FL_ABI_VERSION (x.y.0), and FL_DSO_VERSION (x.y)
-
-CPPFILES = \
-	Fl.cxx \
-	Fl_Adjuster.cxx \
-	Fl_Bitmap.cxx \
-	Fl_Browser.cxx \
-	Fl_Browser_.cxx \
-	Fl_Browser_load.cxx \
-	Fl_Box.cxx \
-	Fl_Button.cxx \
-	Fl_Chart.cxx \
-	Fl_Check_Browser.cxx \
-	Fl_Check_Button.cxx \
-	Fl_Choice.cxx \
-	Fl_Clock.cxx \
-	Fl_Color_Chooser.cxx \
-	Fl_Copy_Surface.cxx \
-	Fl_Counter.cxx \
-	Fl_Dial.cxx \
-	Fl_Device.cxx \
-	Fl_Double_Window.cxx \
-	Fl_File_Browser.cxx \
-	Fl_File_Chooser.cxx \
-	Fl_File_Chooser2.cxx \
-	Fl_File_Icon.cxx \
-	Fl_File_Input.cxx \
-	Fl_Group.cxx \
-	Fl_Help_View.cxx \
-	Fl_Image.cxx \
-	Fl_Image_Surface.cxx \
-	Fl_Input.cxx \
-	Fl_Input_.cxx \
-	Fl_Light_Button.cxx \
-	Fl_Menu.cxx \
-	Fl_Menu_.cxx \
-	Fl_Menu_Bar.cxx \
-	Fl_Menu_Button.cxx \
-	Fl_Menu_Window.cxx \
-	Fl_Menu_add.cxx \
-	Fl_Menu_global.cxx \
-	Fl_Multi_Label.cxx \
-	Fl_Native_File_Chooser.cxx \
-	Fl_Overlay_Window.cxx \
-	Fl_Pack.cxx \
-	Fl_Paged_Device.cxx \
-	Fl_Pixmap.cxx \
-	Fl_PostScript.cxx \
-	Fl_Positioner.cxx \
-	Fl_Preferences.cxx \
-	Fl_Printer.cxx \
-	Fl_Progress.cxx \
-	Fl_Repeat_Button.cxx \
-	Fl_Return_Button.cxx \
-	Fl_Roller.cxx \
-	Fl_Round_Button.cxx \
-	Fl_Scroll.cxx \
-	Fl_Scrollbar.cxx \
-	Fl_Shared_Image.cxx \
-	Fl_Single_Window.cxx \
-	Fl_Slider.cxx \
-	Fl_Table.cxx \
-	Fl_Table_Row.cxx \
-	Fl_Tabs.cxx \
-	Fl_Text_Buffer.cxx \
-	Fl_Text_Display.cxx \
-	Fl_Text_Editor.cxx \
-	Fl_Tile.cxx \
-	Fl_Tiled_Image.cxx \
-	Fl_Tree.cxx \
-	Fl_Tree_Item.cxx \
-	Fl_Tree_Item_Array.cxx \
-	Fl_Tree_Prefs.cxx \
-	Fl_Tooltip.cxx \
-	Fl_Valuator.cxx \
-	Fl_Value_Input.cxx \
-	Fl_Value_Output.cxx \
-	Fl_Value_Slider.cxx \
-	Fl_Widget.cxx \
-	Fl_Window.cxx \
-	Fl_Window_fullscreen.cxx \
-	Fl_Window_hotspot.cxx \
-	Fl_Window_iconize.cxx \
-	Fl_Window_shape.cxx \
-	Fl_Wizard.cxx \
-	Fl_XBM_Image.cxx \
-	Fl_XPM_Image.cxx \
-	Fl_abort.cxx \
-	Fl_add_idle.cxx \
-	Fl_arg.cxx \
-	Fl_compose.cxx \
-	Fl_display.cxx \
-	Fl_get_key.cxx \
-	Fl_get_system_colors.cxx \
-	Fl_grab.cxx \
-	Fl_lock.cxx \
-	Fl_own_colormap.cxx \
-	Fl_visual.cxx \
-	Fl_x.cxx \
-	filename_absolute.cxx \
-	filename_expand.cxx \
-	filename_ext.cxx \
-	filename_isdir.cxx \
-	filename_list.cxx \
-	filename_match.cxx \
-	filename_setext.cxx \
-	fl_arc.cxx \
-	fl_arci.cxx \
-	fl_ask.cxx \
-	fl_boxtype.cxx \
-	fl_color.cxx \
-	fl_cursor.cxx \
-	fl_curve.cxx \
-	fl_diamond_box.cxx \
-	fl_dnd.cxx \
-	fl_draw.cxx \
-	fl_draw_image.cxx \
-	fl_draw_pixmap.cxx \
-	fl_encoding_latin1.cxx \
-	fl_encoding_mac_roman.cxx \
-	fl_engraved_label.cxx \
-	fl_file_dir.cxx \
-	fl_font.cxx \
-	fl_gleam.cxx \
-	fl_gtk.cxx \
-	fl_labeltype.cxx \
-	fl_line_style.cxx \
-	fl_open_uri.cxx \
-	fl_oval_box.cxx \
-	fl_overlay.cxx \
-	fl_overlay_visual.cxx \
-	fl_plastic.cxx \
-	fl_read_image.cxx \
-	fl_rect.cxx \
-	fl_round_box.cxx \
-	fl_rounded_box.cxx \
-	fl_set_font.cxx \
-	fl_set_fonts.cxx \
-	fl_scroll_area.cxx \
-	fl_shadow_box.cxx \
-	fl_shortcut.cxx \
-	fl_show_colormap.cxx \
-	fl_symbols.cxx \
-	fl_vertex.cxx \
-	screen_xywh.cxx \
-	fl_utf8.cxx \
-	ps_image.cxx
-
-OBJCPPFILES = \
-    Fl_cocoa.mm \
-    Fl_Quartz_Printer.mm \
-    Fl_Native_File_Chooser_MAC.mm \
-    Fl_Sys_Menu_Bar.mm
-
-FLCPPFILES = \
-	forms_compatability.cxx \
-	forms_bitmap.cxx \
-	forms_free.cxx \
-	forms_fselect.cxx \
-	forms_pixmap.cxx \
-	forms_timer.cxx
-
-GLCPPFILES = \
-	Fl_Gl_Choice.cxx \
-	Fl_Gl_Overlay.cxx \
-	Fl_Gl_Device_Plugin.cxx \
-	Fl_Gl_Window.cxx \
-	freeglut_geometry.cxx \
-	freeglut_stroke_mono_roman.cxx \
-	freeglut_stroke_roman.cxx \
-	freeglut_teapot.cxx \
-	gl_draw.cxx \
-	gl_start.cxx \
-	glut_compatability.cxx \
-	glut_font.cxx
-
-IMGCPPFILES = \
-	fl_images_core.cxx \
-	Fl_BMP_Image.cxx \
-	Fl_File_Icon2.cxx \
-	Fl_GIF_Image.cxx \
-	Fl_Help_Dialog.cxx \
-	Fl_JPEG_Image.cxx \
-	Fl_PNG_Image.cxx \
-	Fl_PNM_Image.cxx
-
-
-CFILES = fl_call_main.c flstring.c scandir.c numericsort.c vsnprintf.c fl_utf.c
-
-UTF8CFILES = \
-	xutf8/case.c \
-	xutf8/is_right2left.c \
-	xutf8/is_spacing.c \
-	xutf8/keysym2Ucs.c \
-	xutf8/utf8Input.c \
-	xutf8/utf8Utils.c \
-	xutf8/utf8Wrap.c
-
-################################################################
-FLTKFLAGS = -DFL_LIBRARY
-include ../makeinclude
-
-MMFILES = $(shell if test $(USEMMFILES) = Yes; then echo $(OBJCPPFILES); fi)
-
-OBJECTS =  $(MMFILES:.mm=.o) $(CPPFILES:.cxx=.o) $(CFILES:.c=.o) $(UTF8CFILES:.c=.o)
-GLOBJECTS = $(GLCPPFILES:.cxx=.o)
-FLOBJECTS = $(FLCPPFILES:.cxx=.o)
-IMGOBJECTS = $(IMGCPPFILES:.cxx=.o)
-
-all:	$(LIBNAME) $(DSONAME) \
-	$(FLLIBNAME) $(FLDSONAME) \
-	$(GLLIBNAME) $(GLDSONAME) \
-	$(IMGLIBNAME) $(IMGDSONAME) 
-
-$(LIBNAME): $(OBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(OBJECTS)
-	$(RANLIB) $@
-
-libfltk.so.$(FL_DSO_VERSION): $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(OBJECTS) $(LDLIBS)
-	$(RM) libfltk.so
-	$(LN) libfltk.so.$(FL_DSO_VERSION) libfltk.so
-
-libfltk.sl.$(FL_DSO_VERSION): $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(OBJECTS)
-	$(RM) libfltk.sl
-	$(LN) libfltk.sl.$(FL_DSO_VERSION) libfltk.sl
-
-libfltk.$(FL_DSO_VERSION).dylib: $(OBJECTS)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version $(FL_VERSION) \
-		-compatibility_version $(FL_DSO_VERSION).0 \
-		$(OBJECTS) $(LDLIBS)
-	$(RM) libfltk.dylib
-	$(LN) libfltk.$(FL_DSO_VERSION).dylib libfltk.dylib
-
-libfltk_s.a: $(OBJECTS)
-	echo $(DSOCOMMAND) libfltk_s.o ...
-	$(DSOCOMMAND) libfltk_s.o $(OBJECTS) $(IMAGELIBS)
-	echo $(LIBCOMMAND) libfltk_s.a libfltk_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_s.a libfltk_s.o
-	$(CHMOD) +x libfltk_s.a
-
-$(FLLIBNAME): $(FLOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(FLOBJECTS)
-	$(RANLIB) $@
-
-libfltk_forms.so.$(FL_DSO_VERSION): $(FLOBJECTS) libfltk.so.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(FLOBJECTS) -L. -lfltk $(LDLIBS)
-	$(RM) libfltk_forms.so
-	$(LN) libfltk_forms.so.$(FL_DSO_VERSION) libfltk_forms.so
-
-libfltk_forms.sl.$(FL_DSO_VERSION): $(FLOBJECTS) libfltk.sl.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(FLOBJECTS) -L. -lfltk
-	$(RM) libfltk_forms.sl
-	$(LN) libfltk_forms.sl.$(FL_DSO_VERSION) libfltk_forms.sl
-
-libfltk_forms.$(FL_DSO_VERSION).dylib: $(FLOBJECTS) libfltk.$(FL_DSO_VERSION).dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version $(FL_VERSION) \
-		-compatibility_version $(FL_ABI_VERSION) \
-		$(FLOBJECTS) -L. $(LDLIBS) -lfltk
-	$(RM) libfltk_forms.dylib
-	$(LN) libfltk_forms.$(FL_DSO_VERSION).dylib libfltk_forms.dylib
-
-libfltk_forms_s.a: $(FLOBJECTS)
-	echo $(DSOCOMMAND) libfltk_forms_s.o ...
-	$(DSOCOMMAND) libfltk_forms_s.o $(FLOBJECTS)
-	echo $(LIBCOMMAND) libfltk_forms_s.a libfltk_forms_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_forms_s.a libfltk_forms_s.o
-	$(CHMOD) +x libfltk_forms_s.a
-
-$(GLLIBNAME): $(GLOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(GLOBJECTS)
-	$(RANLIB) $@
-
-libfltk_gl.so.$(FL_DSO_VERSION): $(GLOBJECTS) libfltk.so.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(GLOBJECTS) -L. -lfltk $(LDLIBS) $(GLDLIBS)
-	$(RM) libfltk_gl.so
-	$(LN) libfltk_gl.so.$(FL_DSO_VERSION) libfltk_gl.so
-
-libfltk_gl.sl.$(FL_DSO_VERSION): $(GLOBJECTS) libfltk.sl.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(GLOBJECTS) -L. -lfltk
-	$(RM) libfltk_gl.sl
-	$(LN) libfltk_gl.sl.$(FL_DSO_VERSION) libfltk_gl.sl
-
-libfltk_gl.$(FL_DSO_VERSION).dylib: $(GLOBJECTS) libfltk.$(FL_DSO_VERSION).dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version $(FL_VERSION) \
-		-compatibility_version $(FL_ABI_VERSION) \
-		$(GLOBJECTS) -L. $(GLDLIBS) -lfltk
-	$(RM) libfltk_gl.dylib
-	$(LN) libfltk_gl.$(FL_DSO_VERSION).dylib libfltk_gl.dylib
-
-libfltk_gl_s.a: $(GLOBJECTS)
-	echo $(DSOCOMMAND) libfltk_gl_s.o ...
-	$(DSOCOMMAND) libfltk_gl_s.o $(GLOBJECTS)
-	echo $(LIBCOMMAND) libfltk_gl_s.a libfltk_gl_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_gl_s.a libfltk_gl_s.o
-	$(CHMOD) +x libfltk_gl_s.a
-
-$(IMGLIBNAME): $(IMGOBJECTS)
-	echo $(LIBCOMMAND) $@ ...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(IMGOBJECTS)
-	$(RANLIB) $@
-
-libfltk_images.so.$(FL_DSO_VERSION): $(IMGOBJECTS) libfltk.so.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(IMGOBJECTS) -L. $(IMAGELIBS) -lfltk $(LDLIBS)
-	$(RM) libfltk_images.so
-	$(LN) libfltk_images.so.$(FL_DSO_VERSION) libfltk_images.so
-
-libfltk_images.sl.$(FL_DSO_VERSION): $(IMGOBJECTS) libfltk.sl.$(FL_DSO_VERSION)
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ $(IMGOBJECTS) -L. $(IMAGELIBS) -lfltk
-	$(RM) libfltk_images.sl
-	$(LN) libfltk_images.sl.$(FL_DSO_VERSION) libfltk_images.sl
-
-libfltk_images.$(FL_DSO_VERSION).dylib: $(IMGOBJECTS) libfltk.$(FL_DSO_VERSION).dylib
-	echo $(DSOCOMMAND) $@ ...
-	$(DSOCOMMAND) $@ \
-		-install_name $(libdir)/$@ \
-		-current_version $(FL_VERSION) \
-		-compatibility_version $(FL_ABI_VERSION) \
-		$(IMGOBJECTS)  -L. $(LDLIBS) $(IMAGELIBS) -lfltk
-	$(RM) libfltk_images.dylib
-	$(LN) libfltk_images.$(FL_DSO_VERSION).dylib libfltk_images.dylib
-
-libfltk_images_s.a: $(IMGOBJECTS)
-	echo $(DSOCOMMAND) libfltk_images_s.o ...
-	$(DSOCOMMAND) libfltk_images_s.o $(IMGOBJECTS)
-	echo $(LIBCOMMAND) libfltk_images_s.a libfltk_images_s.o
-	$(RM) $@
-	$(LIBCOMMAND) libfltk_images_s.a libfltk_images_s.o
-	$(CHMOD) +x libfltk_images_s.a
-
-#-----------------------------------------------------------------
-# - the import libraries libfltk*.dll.a and the .dll files
-#   are created from the libfltk*.a files. They are built
-#   into the src dir.
-# - The _images, _gl, _forms and dlls must be linked
-#   against the import libraries in the src dir.
-#-----------------------------------------------------------------
-
-#-----------------------------------------------------------------
-# cygwin GDI shared libraries
-#-----------------------------------------------------------------
-
-cygfltknox-$(FL_DSO_VERSION).dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-cygfltknox_forms-$(FL_DSO_VERSION).dll: $(FLLIBNAME) cygfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-cygfltknox_gl-$(FL_DSO_VERSION).dll: $(GLLIBNAME) cygfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-cygfltknox_images-$(FL_DSO_VERSION).dll: $(IMGLIBNAME) cygfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-#-----------------------------------------------------------------
-# cygwin X11 shared libraries
-#-----------------------------------------------------------------
-
-cygfltk-$(FL_DSO_VERSION).dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-cygfltk_forms-$(FL_DSO_VERSION).dll: $(FLLIBNAME) cygfltk-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-cygfltk_gl-$(FL_DSO_VERSION).dll: $(GLLIBNAME) cygfltk-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-cygfltk_images-$(FL_DSO_VERSION).dll: $(IMGLIBNAME) cygfltk-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-mgwfltknox-$(FL_DSO_VERSION).dll: $(LIBNAME)
-	echo $(DSOCOMMAND) $(LIBNAME) ...
-	$(DSOCOMMAND) $(LIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk.dll.a $(LDLIBS)
-
-mgwfltknox_forms-$(FL_DSO_VERSION).dll: $(FLLIBNAME) mgwfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(FLLIBNAME) ...
-	$(DSOCOMMAND) $(FLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_forms.dll.a \
-		-L. -lfltk $(LDLIBS)
-
-mgwfltknox_gl-$(FL_DSO_VERSION).dll: $(GLLIBNAME) mgwfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(GLLIBNAME) ...
-	$(DSOCOMMAND) $(GLLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_gl.dll.a \
-		-L. -lfltk $(GLDLIBS)
-
-#-----------------------------------------------------
-# See STR #1585 for --exclude-libs
-#-----------------------------------------------------
-
-mgwfltknox_images-$(FL_DSO_VERSION).dll: $(IMGLIBNAME) mgwfltknox-$(FL_DSO_VERSION).dll
-	echo $(DSOCOMMAND) $(IMGLIBNAME) ...
-	$(DSOCOMMAND) $(IMGLIBNAME) -Wl,--no-whole-archive \
-		-Wl,--out-implib=libfltk_images.dll.a \
-		-L. -lfltk -Wl,--exclude-libs -Wl,libfltk_png.a \
-			$(IMAGELIBS) $(LDLIBS)
-
-clean:
-	-$(RM) *.o xutf8/*.o *.dll.a core.* *~ *.bak *.bck
-	-$(RM) $(DSONAME) $(FLDSONAME) $(GLDSONAME) $(IMGDSONAME) \
-		$(LIBNAME) $(FLLIBNAME) $(GLLIBNAME) \
-		$(IMGLIBNAME) \
-		libfltk.so libfltk_forms.so libfltk_gl.so libfltk_images.so \
-		libfltk.sl libfltk_forms.sl libfltk_gl.sl libfltk_images.sl \
-		libfltk.dylib libfltk_forms.dylib \
-		libfltk_gl.dylib libfltk_images.dylib \
-		cmap core
-
-depend:	$(CPPFILES) $(MMFILES) $(FLCPPFILES) $(GLCPPFILES) $(IMGCPPFILES) $(CFILES) $(UTF8CFILES)
-	makedepend -Y -I.. -f makedepend $(CPPFILES) $(MMFILES) $(FLCPPFILES) \
-		$(GLCPPFILES) $(IMGCPPFILES) $(CFILES) $(UTF8CFILES)
-
-# Automatically generated dependencies... generated on a Linux/Unix host !
-include makedepend
-
-# These dependencies aren't part of the makedepend file since
-# they are part of the WIN32 and MacOS code base...
-# Please add only non-Linux/Unix files or such that are optional
-# (like "*xft*") here:
-Fl_get_key.o:	Fl_get_key_mac.cxx Fl_get_key_win32.cxx
-Fl_Native_File_Chooser.o : Fl_Native_File_Chooser_WIN32.cxx
-Fl_Native_File_Chooser_MAC.o:	Fl_Native_File_Chooser_MAC.mm
-Fl.o:		Fl_win32.cxx
-Fl_cocoa.o:	Fl_cocoa.mm
-fl_color.o:	fl_color_mac.cxx fl_color_win32.cxx
-fl_dnd.o:	fl_dnd_win32.cxx fl_dnd_x.cxx
-fl_draw_image.o: fl_draw_image_mac.cxx fl_draw_image_win32.cxx
-fl_font.o:	fl_font_mac.cxx fl_font_x.cxx fl_font_xft.cxx fl_font_win32.cxx
-fl_read_image.o: fl_read_image_mac.cxx fl_read_image_win32.cxx
-fl_set_fonts.o:	fl_set_fonts_mac.cxx fl_set_fonts_x.cxx \
-		fl_set_fonts_xft.cxx fl_set_fonts_win32.cxx
-Fl_Printer.o: Fl_GDI_Printer.cxx Fl_PostScript.cxx
-Fl_Quartz_Printer.o:	Fl_Quartz_Printer.mm
-fl_arci.o:	../FL/mac.H ../FL/win32.H
-Fl_arg.o:	../FL/mac.H ../FL/win32.H
-fl_ask.o:	../FL/mac.H ../FL/win32.H
-Fl_Bitmap.o:	../FL/mac.H ../FL/win32.H
-fl_color.o:	../FL/mac.H ../FL/win32.H
-fl_cursor.o:	../FL/mac.H ../FL/win32.H
-fl_dnd.o:	../FL/mac.H ../FL/win32.H
-Fl.o:	../FL/mac.H ../FL/win32.H
-Fl_Double_Window.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image_mac.o:	../FL/mac.H ../FL/win32.H
-fl_draw_image_win32.o:	../FL/mac.H ../FL/win32.H
-fl_draw_pixmap.o:	../FL/mac.H ../FL/win32.H
-fl_encoding_latin1.o:	../FL/mac.H ../FL/win32.H
-fl_encoding_mac_roman.o:   ../FL/mac.H ../FL/win32.H
-Fl_File_Chooser2.o:	../FL/mac.H ../FL/win32.H
-fl_font.o:	../FL/mac.H ../FL/win32.H
-Fl_get_key.o:	../FL/mac.H ../FL/win32.H
-Fl_get_system_colors.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Choice.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Overlay.o:	../FL/mac.H ../FL/win32.H
-Fl_Gl_Window.o:	../FL/mac.H ../FL/win32.H
-Fl_grab.o:	../FL/mac.H ../FL/win32.H
-Fl_Image.o:	../FL/mac.H ../FL/win32.H
-fl_line_style.o:	../FL/mac.H ../FL/win32.H
-Fl_Menu_Window.o:	../FL/mac.H ../FL/win32.H
-fl_overlay.o:	../FL/mac.H ../FL/win32.H
-fl_overlay_visual.o:	../FL/mac.H ../FL/win32.H
-Fl_Overlay_Window.o:	../FL/mac.H ../FL/win32.H
-Fl_own_colormap.o:	../FL/mac.H ../FL/win32.H
-Fl_Pixmap.o:	../FL/mac.H ../FL/win32.H
-Fl_Printer.o:  ../FL/mac.H ../FL/win32.H
-fl_read_image.o:	../FL/mac.H ../FL/win32.H
-fl_read_image_mac.o:	../FL/mac.H ../FL/win32.H
-fl_read_image_win32.o:	../FL/mac.H ../FL/win32.H
-fl_rect.o:	../FL/mac.H ../FL/win32.H
-fl_scroll_area.o:	../FL/mac.H ../FL/win32.H
-fl_set_font.o:	../FL/mac.H ../FL/win32.H
-fl_set_fonts.o:	../FL/mac.H ../FL/win32.H
-fl_shortcut.o:	../FL/mac.H ../FL/win32.H
-fl_vertex.o:	../FL/mac.H ../FL/win32.H
-Fl_visual.o:	../FL/mac.H ../FL/win32.H
-Fl_Window_fullscreen.o:	../FL/mac.H ../FL/win32.H
-Fl_Window_iconize.o:	../FL/mac.H ../FL/win32.H
-Fl_x.o:	../FL/mac.H ../FL/win32.H
-gl_draw.o:	../FL/mac.H ../FL/win32.H
-gl_start.o:	../FL/mac.H ../FL/win32.H
-
-################################################################
-
-install: $(LIBNAME) $(DSONAME) \
-	$(FLLIBNAME) $(FLDSONAME) \
-	$(GLLIBNAME) $(GLDSONAME) \
-	$(IMGLIBNAME) $(IMGDSONAME) 
-	echo "Installing libraries in $(DESTDIR)$(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	-$(INSTALL_DIR) $(DESTDIR)$(bindir)
-	$(RM) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	$(INSTALL_LIB) $(LIBNAME) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(FLLIBNAME) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(IMGLIBNAME) $(DESTDIR)$(libdir)
-	$(RANLIB) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	$(RANLIB) $(DESTDIR)$(libdir)/$(FLLIBBASENAME)
-	if test x$(GLLIBNAME) != x; then \
-		$(INSTALL_LIB) $(GLLIBNAME) $(DESTDIR)$(libdir); \
-		$(RANLIB) $(DESTDIR)$(libdir)/$(GLLIBBASENAME); \
-	fi
-	$(RANLIB) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME)
-	if test x$(DSONAME) = xlibfltk.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.so*;\
-		$(INSTALL_LIB) libfltk.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk.so;\
-	fi
-	if test x$(DSONAME) = xlibfltk.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.sl*;\
-		$(INSTALL_LIB) libfltk.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk.sl;\
-	fi
-	if test x$(DSONAME) = xlibfltk.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.*dylib;\
-		$(INSTALL_LIB) libfltk.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir)/libfltk.dylib;\
-	fi
-	if test x$(DSONAME) = xlibfltk_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_s.a;\
-		$(INSTALL_LIB) libfltk_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(DSONAME) = xcygfltknox-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME);\
-		$(INSTALL_LIB) $(DSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-		$(INSTALL_LIB) libfltk.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(DSONAME) = xmgwfltknox-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME);\
-		$(INSTALL_LIB) $(DSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-		$(INSTALL_LIB) libfltk.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.so*;\
-		$(INSTALL_LIB) libfltk_forms.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_forms.so;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.sl*;\
-		$(INSTALL_LIB) libfltk_forms.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_forms.sl;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.*dylib;\
-		$(INSTALL_LIB) libfltk_forms.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_forms.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir)/libfltk_forms.dylib;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms_s.a;\
-		$(INSTALL_LIB) libfltk_forms_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xcygfltknox_forms-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME);\
-		$(INSTALL_LIB) $(FLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-		$(INSTALL_LIB) libfltk_forms.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(FLDSONAME) = xmgwfltknox_forms-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME);\
-		$(INSTALL_LIB) $(FLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-		$(INSTALL_LIB) libfltk_forms.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.so*;\
-		$(INSTALL_LIB) libfltk_gl.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_gl.so;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.sl*;\
-		$(INSTALL_LIB) libfltk_gl.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_gl.sl;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.*dylib;\
-		$(INSTALL_LIB) libfltk_gl.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_gl.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir)/libfltk_gl.dylib;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl_s.a;\
-		$(INSTALL_LIB) libfltk_gl_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xcygfltknox_gl-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME);\
-		$(INSTALL_LIB) $(GLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-		$(INSTALL_LIB) libfltk_gl.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(GLDSONAME) = xmgwfltknox_gl-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME);\
-		$(INSTALL_LIB) $(GLDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-		$(INSTALL_LIB) libfltk_gl.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.so*;\
-		$(INSTALL_LIB) libfltk_images.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.so.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_images.so;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.sl*;\
-		$(INSTALL_LIB) libfltk_images.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.sl.$(FL_DSO_VERSION) $(DESTDIR)$(libdir)/libfltk_images.sl;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.*dylib;\
-		$(INSTALL_LIB) libfltk_images.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir); \
-		$(LN) libfltk_images.$(FL_DSO_VERSION).dylib $(DESTDIR)$(libdir)/libfltk_images.dylib;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images_s.a;\
-		$(INSTALL_LIB) libfltk_images_s.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xcygfltknox_images-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(INSTALL_LIB) $(IMGDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-		$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
-	fi
-	if test x$(IMGDSONAME) = xmgwfltknox_images-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(INSTALL_LIB) $(IMGDSONAME) $(DESTDIR)$(bindir); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-		$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
-	fi
-
-
-uninstall:
-	echo "Uninstalling libraries..."
-	$(RM) $(DESTDIR)$(libdir)/$(LIBBASENAME)
-	if test x$(DSONAME) = xlibfltk.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.so*;\
-	fi
-	if test x$(DSONAME) = xlibfltk.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.sl*;\
-	fi
-	if test x$(DSONAME) = xlibfltk.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk.*dylib;\
-	fi
-	if test x$(DSONAME) = xlibfltk_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_s.a;\
-	fi
-	if test x$(DSONAME) = xcygfltknox-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	if test x$(DSONAME) = xcygfltk-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	if test x$(DSONAME) = xmgwfltknox-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(DSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk.dll.a;\
-	fi
-	$(RM) $(DESTDIR)$(libdir)/$(FLLIBBASENAME);
-	if test x$(FLDSONAME) = xlibfltk_forms.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.so*;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.sl*;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.*dylib;\
-	fi
-	if test x$(FLDSONAME) = xlibfltk_forms_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms_s.a;\
-	fi
-	if test x$(FLDSONAME) = xcygfltknox_forms-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(FLDSONAME) = xcygfltk_forms-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(FLDSONAME) = xmgwfltknox_forms-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(FLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_forms.dll.a;\
-	fi
-	if test x$(GLLIBNAME) != x; then\
-		$(RM) $(DESTDIR)$(libdir)/$(GLLIBBASENAME);\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.so*;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.sl*;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.*dylib;\
-	fi
-	if test x$(GLDSONAME) = xlibfltk_gl_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl_s.a;\
-	fi
-	if test x$(GLDSONAME) = xcygfltknox_gl-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(GLDSONAME) = xcygfltk_gl-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(GLDSONAME) = xmgwfltknox_gl-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(GLDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_gl.dll.a;\
-	fi
-	if test x$(IMGLIBNAME) != x; then\
-		$(RM) $(DESTDIR)$(libdir)/$(IMGLIBBASENAME);\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.so.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.so*;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.sl.$(FL_DSO_VERSION); then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.sl*;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images.$(FL_DSO_VERSION).dylib; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.*dylib;\
-	fi
-	if test x$(IMGDSONAME) = xlibfltk_images_s.a; then\
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images_s.a;\
-	fi
-	if test x$(IMGDSONAME) = xcygfltknox_images-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-	if test x$(IMGDSONAME) = xcygfltk_images-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-	if test x$(IMGDSONAME) = xmgwfltknox_images-$(FL_DSO_VERSION).dll; then\
-		$(RM) $(DESTDIR)$(bindir)/$(IMGDSONAME); \
-		$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
-	fi
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/src/Xutf8.h
+++ /dev/null
@@ -1,185 +1,0 @@
-/* "$Id$"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#if ! ( defined(_Xutf8_h) || defined(FL_DOXYGEN) )
-#define _Xutf8_h
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif
-
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xlocale.h>
-#include <X11/Xutil.h>
-#include <FL/Fl_Export.H>
-
-typedef struct {
-	int nb_font;
-	char **font_name_list;
-	int *encodings;
-	XFontStruct **fonts;
-	Font fid;
-	int ascent;
-	int descent;
-	int *ranges;
-} XUtf8FontStruct;
-
-XUtf8FontStruct *
-XCreateUtf8FontStruct (
-	Display         *dpy,
-	const char      *base_font_name_list);
-
-void
-XUtf8DrawString(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	x,
-        int             	y,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8_measure_extents(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	*xx,
-        int             	*yy,
-        int             	*ww,
-        int             	*hh,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8DrawRtlString(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	x,
-        int             	y,
-        const char      	*string,
-        int             	num_bytes);
-
-void
-XUtf8DrawImageString(
-        Display         *display,
-        Drawable        d,
-        XUtf8FontStruct         *font_set,
-        GC              gc,
-        int             x,
-        int             y,
-        const char      *string,
-        int             num_bytes);
-
-int
-XUtf8TextWidth(
-        XUtf8FontStruct  *font_set,
-        const char      	*string,
-        int             	num_bytes);
-int
-XUtf8UcsWidth(
-	XUtf8FontStruct  *font_set,
-	unsigned int            ucs);
-
-FL_EXPORT int
-fl_XGetUtf8FontAndGlyph(
-        XUtf8FontStruct  *font_set,
-        unsigned int            ucs,
-        XFontStruct     **fnt,
-        unsigned short  *id);
-
-void
-XFreeUtf8FontStruct(
-        Display         	*dpy,
-        XUtf8FontStruct 	*font_set);
-
-
-int
-XConvertUtf8ToUcs(
-	const unsigned char 	*buf,
-	int 			len,
-	unsigned int 		*ucs);
-
-int
-XConvertUcsToUtf8(
-	unsigned int 		ucs,
-	char 			*buf);
-
-int
-XUtf8CharByteLen(
-	const unsigned char 	*buf,
-	int 			len);
-
-int
-XCountUtf8Char(
-	const unsigned char *buf,
-	int len);
-
-int
-XFastConvertUtf8ToUcs(
-	const unsigned char 	*buf,
-	int 			len,
-	unsigned int 		*ucs);
-
-long
-XKeysymToUcs(
-	KeySym 	keysym);
-
-#ifdef X_HAVE_UTF8_STRING
-#define XUtf8LookupString Xutf8LookupString
-#else
-int
-XUtf8LookupString(
-    XIC                 ic,
-    XKeyPressedEvent*   event,
-    char*               buffer_return,
-    int                 bytes_buffer,
-    KeySym*             keysym,
-    Status*             status_return);
-#endif
-
-unsigned short
-XUtf8IsNonSpacing(
-	unsigned int ucs);
-
-unsigned short
-XUtf8IsRightToLeft(
-        unsigned int ucs);
-
-
-int
-XUtf8Tolower(
-        int ucs);
-
-int
-XUtf8Toupper(
-        int ucs);
-
-
-#  ifdef __cplusplus
-}
-#  endif
-
-#endif
-
-/*
- *  End of "$Id$".
- */
--- a/DoConfig/fltk/src/allfiles.xbm
+++ /dev/null
@@ -1,6 +1,0 @@
-#define allfiles_width 16
-#define allfiles_height 16
-static unsigned char allfiles_bits[] = {
-   0xfc, 0x3f, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x84, 0x21, 0xa4, 0x25,
-   0xc4, 0x23, 0xf4, 0x2f, 0xf4, 0x2f, 0xc4, 0x23, 0xa4, 0x25, 0x84, 0x21,
-   0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0xfc, 0x3f};
--- a/DoConfig/fltk/src/cgdebug.h
+++ /dev/null
@@ -1,206 +1,0 @@
-//
-// "$Id$"
-//
-// OS X Core Graphics debugging help for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file allows easier debugging of Mac OS X Core Graphics 
-// code. This file is normally not included into any FLTK builds,
-// but since it has proven to be tremendously useful in debugging
-// the FLTK port to "Quartz", I decided to add this file in case
-// more bugs show up.
-//
-// This header is activated by adding the following
-// line to "config.h"
-//   #include "src/cgdebug.h"
-//
-// Running "./configure" will remove this line from "config.h".
-//
-// When used erreanously, Core Graphics prints warnings to 
-// stderr. This is helpful, however it is not possible to 
-// associate a line number or source file with the warning message.
-// This headr file outputs a trace of CG calls, interweaveing
-// them with CG warnings.
-//
-// Matthias
-
-#ifndef CGDEBUG
-#define CGDEBUG
-
-#include <stdio.h>
-#include <Carbon/Carbon.h>
-
-//+BitmapContextCreate
-//+BitmapContextGetData
-// ClipCGContextToRegion
-// QDBeginCGContext
-// QDEndCGContext
-
-//+AddArc
-//+AddLineToPoint
-// ClipToRect
-// ClosePath
-//+ConcatCTM
-//+DrawImage
-// FillPath
-// FillRect
-// Flush
-//+GetCTM
-// MoveToPoint
-//+Release
-// RestoreGState
-// SaveGState
-//+ScaleCTM
-//+SetLineCap
-//+SetLineDash
-//+SetLineJoin
-//+SetLineWidth
-//+SetRGBFillColor
-//+SetRGBStrokeColor
-//+SetShouldAntialias
-//+SetTextMatrix
-//+StrokePath
-//+TranslateCTM
-
-inline OSStatus dbgLocation(const char *file, int line) 
-{
-  fprintf(stderr, "%s:%d ", file, line);
-  return 0;
-}
-
-inline OSStatus dbgEndl()     
-{
-  fprintf(stderr, "\n");
-  return 0;
-}
-
-
-inline void dbgCGContextClipToRect(CGContextRef a, CGRect b)
-{
-  CGContextClipToRect(a, b);
-}
-
-#define CGContextClipToRect(a, b) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextClipToRect(a, b); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFillRect(CGContextRef a, CGRect b)
-{
-  CGContextFillRect(a, b);
-}
-
-#define CGContextFillRect(a, b) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFillRect(a, b); \
-  fprintf(stderr, "\n"); }
-
-inline OSStatus dbgQDEndCGContext(CGrafPtr a, CGContextRef *b) 
-{
-  return QDEndCGContext(a, b);
-}
-
-#define QDEndCGContext(a, b) ( \
-  dbgLocation(__FILE__, __LINE__) + \
-  dbgQDEndCGContext(a, b) + \
-  dbgEndl() )
-
-inline OSStatus dbgQDBeginCGContext(CGrafPtr a, CGContextRef *b) 
-{
-  return QDBeginCGContext(a, b);
-}
-
-#define QDBeginCGContext(a, b) ( \
-  dbgLocation(__FILE__, __LINE__) + \
-  dbgQDBeginCGContext(a, b) + \
-  dbgEndl() )
-
-inline void dbgClipCGContextToRegion(CGContextRef a, const Rect *b, RgnHandle c) 
-{
-  ClipCGContextToRegion(a, b, c);
-}
-
-#define ClipCGContextToRegion(a, b, c) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgClipCGContextToRegion(a, b, c); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextMoveToPoint(CGContextRef context, float x, float y)
-{
-  CGContextMoveToPoint(context, x, y);
-}
-
-#define CGContextMoveToPoint(a, b, c) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextMoveToPoint(a, b, c); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFillPath(CGContextRef context)
-{ 
-  CGContextFillPath(context);
-}
-
-#define CGContextFillPath(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFillPath(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextClosePath(CGContextRef context)
-{ 
-  CGContextClosePath(context);
-}
-
-#define CGContextClosePath(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextClosePath(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextFlush(CGContextRef context)
-{ 
-  CGContextFlush(context);
-}
-
-#define CGContextFlush(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextFlush(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextSaveGState(CGContextRef context)
-{ 
-  CGContextSaveGState(context);
-}
-
-#define CGContextSaveGState(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextSaveGState(a); \
-  fprintf(stderr, "\n"); }
-
-inline void dbgCGContextRestoreGState(CGContextRef context)
-{ 
-  CGContextRestoreGState(context);
-}
-
-#define CGContextRestoreGState(a) { \
-  fprintf(stderr, "%s:%d ", __FILE__, __LINE__); \
-  dbgCGContextRestoreGState(a); \
-  fprintf(stderr, "\n"); }
-
-
-#endif
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/src/cmap.cxx
+++ /dev/null
@@ -1,172 +1,0 @@
-//
-// "$Id$"
-//
-// Colormap generation program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This program produces the contents of "fl_cmap.h" as stdout
-
-// #include <gl/gl.h>
-#include <stdio.h>
-
-// This table is initialized with color values I got by reading the
-// colormap on an IRIX 4.3 machine:
-
-// "full intensity colors" have been turned down some to make white
-// background less intense by default.  The hope is that this will make
-// fltk programs more friendly on color-adjusted screens.  If you want
-// pure colors you should get them out of the colormap.
-
-//#define III 244 // maximum intensity of the basic colors
-
-// that results in errors and unshared colormap entries, so full intensity:
-#define III 255 // maximum intensity of the basic colors
-
-static short cmap[256][3] = {
-// 3-bit colormap:
-  {  0,  0,  0},	// black
-  {III,  0,  0},	// red
-  {  0,III,  0},	// green
-  {III,III,  0},	// yellow
-  {  0,  0,III},	// blue
-  {III,  0,III},	// magenta
-  {  0,III,III},	// cyan
-  {III,III,III},	// white
-// pastel versions of those colors, from SGI's standard color map:
-  { 85, 85, 85},	// 1/3 gray
-  {198,113,113},	// salmon? pale red?
-  {113,198,113},	// pale green
-  {142,142, 56},	// khaki
-  {113,113,198},	// pale blue
-  {142, 56,142},	// purple, orchid, pale magenta
-  { 56,142,142},	// cadet blue, aquamarine, pale cyan
-// The next location is used for FL_SELECTION_COLOR. It formerly was 2/3 gray
-// but this is changed to be the Windows blue color. This allows the default
-// behavior on both X and Windows to match:
-  {  0,  0,128},
-//{170,170,170},	// old 2/3 gray color
-// These next 16 are the FL_FREE_COLOR area. In some versions of fltk
-// these were filled with random colors that a Irix 5.3 machine placed
-// in these locations. Other versions of fltk filled this with the 1/3
-// gray above to discourage their use. This newest version uses colors
-// that NewTek has assigned for their GUI:
-#if 0
-  // The Irix 5.3 colors:
-  { 16, 16, 16},
-  {128, 40,128},
-  {198, 30, 30},
-  { 66, 30, 30},
-  {176,140,140},
-  {  0, 20, 20},
-  { 20, 10, 10},
-  { 40, 20, 20},
-  { 60, 30, 30},
-  {  0, 80, 80},
-  {  0, 40, 40},
-  { 20, 20,  0},
-  { 40, 40,  0},
-  { 80, 80, 10},
-  {150,150, 20},
-  {160, 10, 10},
-#else
-  // The NewTek colors: (from George Yohng)
-  {168,168,152},
-  {232,232,216},
-  {104,104, 88},
-  {152,168,168},
-  {216,232,232},
-  { 88,104,104},
-  {156,156,168},
-  {220,220,232},
-  { 92, 92,104},
-  {156,168,156},
-  {220,232,220},
-  { 92,104, 92},
-  {144,144,144},
-  {192,192,192},
-  { 80, 80, 80},
-  {160,160,160},
-#endif
-// The rest of the colormap is a gray ramp and table, filled in below:
-};
-
-// This is Fl::background from Fl_get_system_colors.cxx, with modifications:
-
-#define FL_GRAY_RAMP 32
-#define FL_NUM_GRAY  24
-#define FL_GRAY 49 // old value is 47
-typedef unsigned char uchar;
-#include <math.h>
-
-void background(uchar r, uchar g, uchar b) {
-  // replace the gray ramp so that color 47 (by default 2/3) is this color
-  if (!r) r = 1; else if (r==255) r = 254;
-  double powr = log(r/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!g) g = 1; else if (g==255) g = 254;
-  double powg = log(g/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  if (!b) b = 1; else if (b==255) b = 254;
-  double powb = log(b/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0));
-  for (int i = 0; i < FL_NUM_GRAY; i++) {
-    double gray = i/(FL_NUM_GRAY-1.0);
-    cmap[i+FL_GRAY_RAMP][0] = uchar(pow(gray,powr)*255+.5);
-    cmap[i+FL_GRAY_RAMP][1] = uchar(pow(gray,powg)*255+.5);
-    cmap[i+FL_GRAY_RAMP][2] = uchar(pow(gray,powb)*255+.5);
-  }
-}
-
-int main() {
-  int i,r,g,b;
-#if 0
-  /* Read colormap colors into internal table */
-  long cmwin;
-  noport();
-  cmwin = winopen("CM");
-  for (i=0; i<256; i++)
-    getmcolor(i,&cmap[i][0],&cmap[i][1],&cmap[i][2]);
-  winclose(cmwin);
-#endif
-// overwrite the X allocation area with one color so people are
-// discouraged from using it:
-  //for (i=16; i<32; i++) {cmap[i][0]=cmap[i][1]=cmap[i][2] = 85;}
-
-  // fill in the gray ramp:
-  background(0xc0, 0xc0, 0xc0); // microsoft colors
-  // background(170, 170, 170); // old fltk colors
-  // copy the 1/3 and 2/3 gray to the closest locations in gray ramp:
-  cmap[39][0] = cmap[39][1] = cmap[39][2] = 85;
-  cmap[47][0] = cmap[47][1] = cmap[47][2] = 170;
-
-  // fill in the color cube
-  i = 56;
-  for (b=0; b<5; b++)
-    for (r=0; r<5; r++)
-      for (g=0; g<8; g++) {
-	cmap[i][0] = r*255/4;
-	cmap[i][1] = g*255/7;
-	cmap[i][2] = b*255/4;
-	i++;
-      }
-
-  for (i=0; i<256; i++) {
-    printf("\t0x%02x%02x%02x00",cmap[i][0],cmap[i][1],cmap[i][2]);
-    if (i < 255) printf(",\n");
-  }
-  printf("\n");
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/d1.xbm
+++ /dev/null
@@ -1,6 +1,0 @@
-#define d1_width 16
-#define d1_height 16
-static unsigned char d1_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x38, 0x00, 0x78, 0x00,
-   0xe8, 0x00, 0xc0, 0x01, 0x80, 0x03, 0x00, 0x17, 0x00, 0x1e, 0x00, 0x1c,
-   0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- a/DoConfig/fltk/src/d1_mask.xbm
+++ /dev/null
@@ -1,6 +1,0 @@
-#define d1_mask_width 16
-#define d1_mask_height 16
-static unsigned char d1_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x7c, 0x00, 0xfc, 0x00,
-   0xfc, 0x01, 0xec, 0x03, 0xc0, 0x37, 0x80, 0x3f, 0x00, 0x3f, 0x00, 0x3e,
-   0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00};
--- a/DoConfig/fltk/src/dump_compose.c
+++ /dev/null
@@ -1,26 +1,0 @@
-/* write out the documentation for the compose key */
-
-/* copy the string from Fl_Input.C */
-static const char* const compose_pairs =
-"  ! @ # $ y=| & : c a <<~ - r _ * +-2 3 ' u p . , 1 o >>141234? "
-"A`A'A^A~A:A*AEC,E`E'E^E:I`I'I^I:D-N~O`O'O^O~O:x O/U`U'U^U:Y'DDss"
-"a`a'a^a~a:a*aec,e`e'e^e:i`i'i^i:d-n~o`o'o^o~o:-:o/u`u'u^u:y'ddy:";
-
-#include <stdio.h>
-
-int main() {
-  int x,y;
-  for (x = 0; x<16; x++) {
-    for (y = 0; y<6; y++) {
-      const char *p = compose_pairs + (16*y+x)*2;
-      if (p[1] == ' ')
-	printf("<td><code>%c&nbsp</code>&nbsp&nbsp&nbsp%c\n",
-	       p[0],(p-compose_pairs)/2+0xA0);
-      else
-	printf("<td><code>%c%c</code>&nbsp&nbsp&nbsp%c\n",
-	       p[0],p[1],(p-compose_pairs)/2+0xA0);
-    }
-    printf("<tr>");
-  }
-  return 0;
-}
--- a/DoConfig/fltk/src/ew.xbm
+++ /dev/null
@@ -1,8 +1,0 @@
-#define ew_width 16
-#define ew_height 16
-#define ew_x_hot 8
-#define ew_y_hot 8
-static unsigned char ew_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
-   0x0c, 0x30, 0xfe, 0x7f, 0xfe, 0x7f, 0x0c, 0x30, 0x08, 0x10, 0x00, 0x00,
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- a/DoConfig/fltk/src/ew_mask.xbm
+++ /dev/null
@@ -1,8 +1,0 @@
-#define ew_mask_width 16
-#define ew_mask_height 16
-#define ew_mask_x_hot 8
-#define ew_mask_y_hot 8
-static unsigned char ew_mask_bits[] = {
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1c, 0x38,
-   0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0x1c, 0x38, 0x18, 0x18,
-   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
--- a/DoConfig/fltk/src/fastarrow.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#define fastarrow_width 16
-#define fastarrow_height 16
-static const unsigned char fastarrow_bits[] = {
-   0x00, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xfc, 0x03, 0xff, 0xff, 0xfc, 0x03,
-   0xe0, 0x07, 0x00, 0x07, 0xe0, 0x00, 0xe0, 0x07, 0xc0, 0x3f, 0xff, 0xff,
-   0xc0, 0x3f, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0x00};
--- a/DoConfig/fltk/src/filename_absolute.cxx
+++ /dev/null
@@ -1,263 +1,0 @@
-//
-// "$Id$"
-//
-// Filename expansion routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* expand a file name by prepending current directory, deleting . and
-   .. (not really correct for symbolic links) between the prepended
-   current directory.  Use $PWD if it exists.
-   Returns true if any changes were made.
-*/
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include <stdlib.h>
-#include "flstring.h"
-#include <ctype.h>
-#if defined(WIN32) && !defined(__CYGWIN__)
-# include <direct.h>
-#else
-#  include <unistd.h>
-#endif
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-/** Makes a filename absolute from a relative filename.
-    \code
-    #include <FL/filename.H>
-    [..]
-    chdir("/var/tmp");
-    fl_filename_absolute(out, sizeof(out), "foo.txt");         // out="/var/tmp/foo.txt"
-    fl_filename_absolute(out, sizeof(out), "./foo.txt");       // out="/var/tmp/foo.txt"
-    fl_filename_absolute(out, sizeof(out), "../log/messages"); // out="/var/log/messages"
-    \endcode
-    \param[out] to resulting absolute filename
-    \param[in]  tolen size of the absolute filename buffer 
-    \param[in]  from relative filename
-    \return 0 if no change, non zero otherwise
- */
-int fl_filename_absolute(char *to, int tolen, const char *from) {
-  if (isdirsep(*from) || *from == '|'
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      || from[1]==':'
-#endif
-      ) {
-    strlcpy(to, from, tolen);
-    return 0;
-  }
-
-  char *a;
-  char *temp = new char[tolen];
-  const char *start = from;
-
-  a = fl_getcwd(temp, tolen);
-  if (!a) {
-    strlcpy(to, from, tolen);
-    delete[] temp;
-    return 0;
-  }
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-  for (a = temp; *a; a++) if (*a=='\\') *a = '/'; // ha ha
-#else
-  a = temp+strlen(temp);
-#endif
-  if (isdirsep(*(a-1))) a--;
-  /* remove intermediate . and .. names: */
-  while (*start == '.') {
-    if (start[1]=='.' && isdirsep(start[2])) {
-      char *b;
-      for (b = a-1; b >= temp && !isdirsep(*b); b--) {/*empty*/}
-      if (b < temp) break;
-      a = b;
-      start += 3;
-    } else if (isdirsep(start[1])) {
-      start += 2;
-    } else if (!start[1]) {
-      start ++; // Skip lone "."
-      break;
-    } else
-      break;
-  }
-
-  *a++ = '/';
-  strlcpy(a,start,tolen - (a - temp));
-
-  strlcpy(to, temp, tolen);
-
-  delete[] temp;
-
-  return 1;
-}
-
-/** Makes a filename relative to the current working directory.
-    \code
-    #include <FL/filename.H>
-    [..]
-    chdir("/var/tmp/somedir");       // set cwd to /var/tmp/somedir
-    [..]
-    char out[FL_PATH_MAX];
-    fl_filename_relative(out, sizeof(out), "/var/tmp/somedir/foo.txt");  // out="foo.txt",    return=1
-    fl_filename_relative(out, sizeof(out), "/var/tmp/foo.txt");          // out="../foo.txt", return=1
-    fl_filename_relative(out, sizeof(out), "foo.txt");                   // out="foo.txt",    return=0 (no change)
-    fl_filename_relative(out, sizeof(out), "./foo.txt");                 // out="./foo.txt",  return=0 (no change)
-    fl_filename_relative(out, sizeof(out), "../foo.txt");                // out="../foo.txt", return=0 (no change)
-    \endcode
-    \param[out] to resulting relative filename
-    \param[in]  tolen size of the relative filename buffer 
-    \param[in]  from absolute filename
-    \return 0 if no change, non zero otherwise
- */
-int					// O - 0 if no change, 1 if changed
-fl_filename_relative(char       *to,	// O - Relative filename
-                     int        tolen,	// I - Size of "to" buffer
-                     const char *from)  // I - Absolute filename
-{
-  char cwd_buf[FL_PATH_MAX];	// Current directory
-  // get the current directory and return if we can't
-  if (!fl_getcwd(cwd_buf, sizeof(cwd_buf))) {
-    strlcpy(to, from, tolen);
-    return 0;
-  }
-  return fl_filename_relative(to, tolen, from, cwd_buf);
-}
-
-
-/** Makes a filename relative to any other directory.
- \param[out] to resulting relative filename
- \param[in]  tolen size of the relative filename buffer 
- \param[in]  from absolute filename
- \param[in]  base relative to this absolute path
- \return 0 if no change, non zero otherwise
- */
-int					// O - 0 if no change, 1 if changed
-fl_filename_relative(char       *to,	// O - Relative filename
-                     int        tolen,	// I - Size of "to" buffer
-                     const char *from,  // I - Absolute filename
-                     const char *base) { // I - Find path relative to this path
-  
-  char          *newslash;		// Directory separator
-  const char	*slash;			// Directory separator
-  char          *cwd = 0L, *cwd_buf = 0L;
-  if (base) cwd = cwd_buf = strdup(base);
-  
-  // return if "from" is not an absolute path
-#if defined(WIN32) || defined(__EMX__)
-  if (from[0] == '\0' ||
-      (!isdirsep(*from) && !isalpha(*from) && from[1] != ':' &&
-       !isdirsep(from[2]))) {
-#else
-  if (from[0] == '\0' || !isdirsep(*from)) {
-#endif // WIN32 || __EMX__
-    strlcpy(to, from, tolen);
-    if (cwd_buf) free(cwd_buf);
-    return 0;
-  }
-        
-  // return if "cwd" is not an absolute path
-#if defined(WIN32) || defined(__EMX__)
-  if (!cwd || cwd[0] == '\0' ||
-      (!isdirsep(*cwd) && !isalpha(*cwd) && cwd[1] != ':' &&
-       !isdirsep(cwd[2]))) {
-#else
-  if (!cwd || cwd[0] == '\0' || !isdirsep(*cwd)) {
-#endif // WIN32 || __EMX__
-    strlcpy(to, from, tolen);
-    if (cwd_buf) free(cwd_buf);
-    return 0;
-  }
-              
-#if defined(WIN32) || defined(__EMX__)
-  // convert all backslashes into forward slashes
-  for (newslash = strchr(cwd, '\\'); newslash; newslash = strchr(newslash + 1, '\\'))
-    *newslash = '/';
-
-  // test for the exact same string and return "." if so
-  if (!strcasecmp(from, cwd)) {
-    strlcpy(to, ".", tolen);
-    free(cwd_buf);
-    return (1);
-  }
-
-  // test for the same drive. Return the absolute path if not
-  if (tolower(*from & 255) != tolower(*cwd & 255)) {
-    // Not the same drive...
-    strlcpy(to, from, tolen);
-    free(cwd_buf);
-    return 0;
-  }
-
-  // compare the path name without the drive prefix
-  from += 2; cwd += 2;
-#else
-  // test for the exact same string and return "." if so
-  if (!strcmp(from, cwd)) {
-    strlcpy(to, ".", tolen);
-    free(cwd_buf);
-    return (1);
-  }
-#endif // WIN32 || __EMX__
-
-  // compare both path names until we find a difference
-  for (slash = from, newslash = cwd;
-      *slash != '\0' && *newslash != '\0';
-       slash ++, newslash ++)
-    if (isdirsep(*slash) && isdirsep(*newslash)) continue;
-#if defined(WIN32) || defined(__EMX__) || defined(__APPLE__)
-    else if (tolower(*slash & 255) != tolower(*newslash & 255)) break;
-#else
-    else if (*slash != *newslash) break;
-#endif // WIN32 || __EMX__ || __APPLE__
-
-  // skip over trailing slashes
-  if ( *newslash == '\0' && *slash != '\0' && !isdirsep(*slash)
-     &&(newslash==cwd || !isdirsep(newslash[-1])) )
-    newslash--;
-
-  // now go back to the first character of the first differing paths segment
-  while (!isdirsep(*slash) && slash > from) slash --;
-  if (isdirsep(*slash)) slash ++;
-
-  // do the same for the current dir
-  if (isdirsep(*newslash)) newslash --;
-  if (*newslash != '\0')
-    while (!isdirsep(*newslash) && newslash > cwd) newslash --;
-
-  // prepare the destination buffer
-  to[0]         = '\0';
-  to[tolen - 1] = '\0';
-
-  // now add a "previous dir" sequence for every following slash in the cwd
-  while (*newslash != '\0') {
-    if (isdirsep(*newslash)) strlcat(to, "../", tolen);
-
-    newslash ++;
-  }
-
-  // finally add the differing path from "from"
-  strlcat(to, slash, tolen);
-
-  free(cwd_buf);
-  return 1;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_expand.cxx
+++ /dev/null
@@ -1,125 +1,0 @@
-//
-// "$Id$"
-//
-// Filename expansion routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* expand a file name by substuting environment variables and
-   home directories.  Returns true if any changes were made.
-   to & from may be the same buffer.
-*/
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include <stdlib.h>
-#include "flstring.h"
-#if defined(WIN32) && !defined(__CYGWIN__)
-#include <windows.h>
-#else
-# include <unistd.h>
-# include <pwd.h>
-#endif
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-static inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-/** Expands a filename containing shell variables and tilde (~).
-    Currently handles these variants:
-    \code
-    "~username"               // if 'username' does not exist, result will be unchanged
-    "~/file"
-    "$VARNAME"                // does NOT handle ${VARNAME}
-    \endcode
-
-    \b Examples:
-    \code
-    #include <FL/filename.H>
-    [..]
-    putenv("TMPDIR=/var/tmp");
-    fl_filename_expand(out, sizeof(out), "~fred/.cshrc");     // out="/usr/fred/.cshrc"
-    fl_filename_expand(out, sizeof(out), "~/.cshrc");         // out="/usr/<yourname>/.cshrc"
-    fl_filename_expand(out, sizeof(out), "$TMPDIR/foo.txt");  // out="/var/tmp/foo.txt"
-    \endcode
-    \param[out] to resulting expanded filename
-    \param[in]  tolen size of the expanded filename buffer 
-    \param[in]  from filename containing shell variables
-    \return 0 if no change, non zero otherwise
- */
-int fl_filename_expand(char *to,int tolen, const char *from) {
-
-  char *temp = new char[tolen];
-  strlcpy(temp,from, tolen);
-  char *start = temp;
-  char *end = temp+strlen(temp);
-
-  int ret = 0;
-
-  for (char *a=temp; a<end; ) {	// for each slash component
-    char *e; for (e=a; e<end && !isdirsep(*e); e++) {/*empty*/} // find next slash
-    const char *value = 0; // this will point at substitute value
-    switch (*a) {
-    case '~':	// a home directory name
-      if (e <= a+1) {	// current user's directory
-        value = fl_getenv("HOME");
-#ifndef WIN32
-      } else {	// another user's directory
-	struct passwd *pwd;
-	char t = *e; *(char *)e = 0; 
-        pwd = getpwnam(a+1); 
-        *(char *)e = t;
-	    if (pwd) value = pwd->pw_dir;
-#endif
-      }
-      break;
-    case '$':		/* an environment variable */
-      {char t = *e; *(char *)e = 0; value = fl_getenv(a+1); *(char *)e = t;}
-      break;
-    }
-    if (value) {
-      // substitutions that start with slash delete everything before them:
-      if (isdirsep(value[0])) start = a;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      // also if it starts with "A:"
-      if (value[0] && value[1]==':') start = a;
-#endif
-      int t = (int) strlen(value); if (isdirsep(value[t-1])) t--;
-      if ((end+1-e+t) >= tolen) end += tolen - (end+1-e+t);
-      memmove(a+t, e, end+1-e);
-      end = a+t+(end-e);
-      *end = '\0';
-      memcpy(a, value, t);
-      ret++;
-    } else {
-      a = e+1;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-      if (*e == '\\') {*e = '/'; ret++;} // ha ha!
-#endif
-    }
-  }
-
-  strlcpy(to, start, tolen);
-
-  delete[] temp;
-
-  return ret;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_ext.cxx
+++ /dev/null
@@ -1,49 +1,0 @@
-//
-// "$Id$"
-//
-// Filename extension routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// returns pointer to the last '.' or to the null if none:
-
-#include <FL/filename.H>
-
-/** Gets the extensions of a filename.
-   \code
-   #include <FL/filename.H>
-   [..]
-   const char *out;
-   out = fl_filename_ext("/some/path/foo.txt");        // result: ".txt"
-   out = fl_filename_ext("/some/path/foo");            // result: NULL
-   \endcode
-   \param[in] buf the filename to be parsed
-   \return a pointer to the extension (including '.') if any or NULL otherwise
- */
-const char *fl_filename_ext(const char *buf) {
-  const char *q = 0;
-  const char *p = buf;
-  for (p=buf; *p; p++) {
-    if (*p == '/') q = 0;
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-    else if (*p == '\\') q = 0;
-#endif
-    else if (*p == '.') q = p;
-  }
-  return q ? q : p;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_isdir.cxx
+++ /dev/null
@@ -1,94 +1,0 @@
-//
-// "$Id$"
-//
-// Directory detection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Used by fl_file_chooser
-
-#include "flstring.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-
-
-#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
-static inline int isdirsep(char c) {return c=='/' || c=='\\';}
-#else
-#define isdirsep(c) ((c)=='/')
-#endif
-
-int _fl_filename_isdir_quick(const char* n) {
-  // Do a quick optimization for filenames with a trailing slash...
-  if (*n && isdirsep(n[strlen(n) - 1])) return 1;
-  return fl_filename_isdir(n);
-}
-
-/**
-   Determines if a file exists and is a directory from its filename.
-   \code
-   #include <FL/filename.H>
-   [..]
-   fl_filename_isdir("/etc");		// returns non-zero
-   fl_filename_isdir("/etc/hosts");	// returns 0
-   \endcode
-   \param[in] n the filename to parse
-   \return non zero if file exists and is a directory, zero otherwise
-*/
-int fl_filename_isdir(const char* n) {
-  struct stat	s;
-  char		fn[FL_PATH_MAX];
-  int		length;
-
-  length = (int) strlen(n);
-
-#ifdef WIN32
-  // This workaround brought to you by the fine folks at Microsoft!
-  // (read lots of sarcasm in that...)
-  if (length < (int)(sizeof(fn) - 1)) {
-    if (length < 4 && isalpha(n[0]) && n[1] == ':' &&
-        (isdirsep(n[2]) || !n[2])) {
-      // Always use D:/ for drive letters
-      fn[0] = n[0];
-      strcpy(fn + 1, ":/");
-      n = fn;
-    } else if (length > 0 && isdirsep(n[length - 1])) {
-      // Strip trailing slash from name...
-      length --;
-      memcpy(fn, n, length);
-      fn[length] = '\0';
-      n = fn;
-    }
-  }
-#else
-  // Matt: Just in case, we strip the slash for other operating
-  // systems as well, avoid bugs by sloppy implementations
-  // of "stat".
-  if (length > 1 && isdirsep(n[length - 1])) {
-    length --;
-    memcpy(fn, n, length);
-    fn[length] = '\0';
-    n = fn;
-  }
-#endif
-
-  return !fl_stat(n, &s) && (s.st_mode&0170000)==0040000;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_list.cxx
+++ /dev/null
@@ -1,205 +1,0 @@
-//
-// "$Id$"
-//
-// Filename list routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Wrapper for scandir with const-correct function prototypes.
-
-#include <FL/filename.H>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdlib.h>
-#ifdef __APPLE__
-#include <FL/x.H>
-#endif
-
-extern "C" {
-#ifndef HAVE_SCANDIR
-  int fl_scandir (const char *dir, dirent ***namelist,
-	          int (*select)(dirent *),
-	          int (*compar)(dirent **, dirent **));
-#endif
-}
-
-int fl_alphasort(struct dirent **a, struct dirent **b) {
-  return strcmp((*a)->d_name, (*b)->d_name);
-}
-
-int fl_casealphasort(struct dirent **a, struct dirent **b) {
-  return strcasecmp((*a)->d_name, (*b)->d_name);
-}
-
-
-/**
-   Portable and const-correct wrapper for the scandir() function. 
-   For each file in that directory a "dirent" structure is created. 
-   The only portable thing about a dirent is that dirent.d_name is the nul-terminated file name. 
-   An pointers array to these dirent's is created and a pointer to the array is returned in *list.
-   The number of entries is given as a return value. 
-   If there is an error reading the directory a number less than zero is returned, 
-   and errno has the reason; errno does not work under WIN32. 
-
-   \b Include:
-   \code
-   #include <FL/filename.H>
-   \endcode
-
-   \param[in] d the name of the directory to list.  It does not matter if it has a trailing slash.
-   \param[out] list table containing the resulting directory listing
-   \param[in] sort sorting functor:
-    - fl_alphasort: The files are sorted in ascending alphabetical order; 
-        upper and lowercase letters are compared according to their ASCII ordering  uppercase before lowercase.
-    - fl_casealphasort: The files are sorted in ascending alphabetical order; 
-        upper and lowercase letters are compared equally case is not significant.
-    - fl_casenumericsort: The files are sorted in ascending "alphanumeric" order, where an attempt is made 
-        to put unpadded numbers in consecutive order; upper and lowercase letters 
-        are compared equally case is not significant.
-    - fl_numericsort: The files are sorted in ascending "alphanumeric" order, where an attempt is made 
-        to put unpadded numbers in consecutive order; upper and lowercase letters are compared 
-        according to their ASCII ordering - uppercase before lowercase. 
-   \return the number of entries if no error, a negative value otherwise.
-*/
-int fl_filename_list(const char *d, dirent ***list,
-                     Fl_File_Sort_F *sort) {
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(HAVE_SCANDIR)
-  // For Windows we have a special scandir implementation that uses
-  // the Win32 "wide" functions for lookup, avoiding the code page mess
-  // entirely. It also fixes up the trailing '/'.
-  return fl_scandir(d, list, 0, sort);
-
-#else // WIN32
-
-  int dirlen;
-  char *dirloc;
-
-  // Assume that locale encoding is no less dense than UTF-8
-  dirlen = strlen(d);
-#ifdef __APPLE__
-  dirloc = (char *)d;
-#else
-  dirloc = (char *)malloc(dirlen + 1);
-  fl_utf8to_mb(d, dirlen, dirloc, dirlen + 1);
-#endif
-
-#ifndef HAVE_SCANDIR
-  // This version is when we define our own scandir
-  int n = fl_scandir(dirloc, list, 0, sort);
-#elif defined(HAVE_SCANDIR_POSIX) && !defined(__APPLE__)
-  // POSIX (2008) defines the comparison function like this:
-  int n = scandir(dirloc, list, 0, (int(*)(const dirent **, const dirent **))sort);
-#elif defined(__osf__)
-  // OSF, DU 4.0x
-  int n = scandir(dirloc, list, 0, (int(*)(dirent **, dirent **))sort);
-#elif defined(_AIX)
-  // AIX is almost standard...
-  int n = scandir(dirloc, list, 0, (int(*)(void*, void*))sort);
-#elif defined(__sgi)
-  int n = scandir(dirloc, list, 0, sort);
-#elif defined(__APPLE__)
-# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
-  int n = scandir(dirloc, list, 0, (int(*)(const struct dirent**,const struct dirent**))sort);
-# else
-  int n = scandir(dirloc, list, 0, (int(*)(const void*,const void*))sort);
-# endif
-#else
-  // The vast majority of UNIX systems want the sort function to have this
-  // prototype, most likely so that it can be passed to qsort without any
-  // changes:
-  int n = scandir(dirloc, list, 0, (int(*)(const void*,const void*))sort);
-#endif
-
-#ifndef __APPLE__
-  free(dirloc);
-#endif
-
-  // convert every filename to utf-8, and append a '/' to all
-  // filenames that are directories
-  int i;
-  char *fullname = (char*)malloc(dirlen+FL_PATH_MAX+3); // Add enough extra for two /'s and a nul
-  // Use memcpy for speed since we already know the length of the string...
-  memcpy(fullname, d, dirlen+1);
-
-  char *name = fullname + dirlen;
-  if (name!=fullname && name[-1]!='/')
-    *name++ = '/';
-
-  for (i=0; i<n; i++) {
-    int newlen;
-    dirent *de = (*list)[i];
-    int len = strlen(de->d_name);
-#ifdef __APPLE__
-    newlen = len;
-#else
-    newlen = fl_utf8from_mb(NULL, 0, de->d_name, len);
-#endif
-    dirent *newde = (dirent*)malloc(de->d_name - (char*)de + newlen + 2); // Add space for a / and a nul
-
-    // Conversion to UTF-8
-    memcpy(newde, de, de->d_name - (char*)de);
-#ifdef __APPLE__
-    strcpy(newde->d_name, de->d_name);
-#else
-    fl_utf8from_mb(newde->d_name, newlen + 1, de->d_name, len);
-#endif
-
-    // Check if dir (checks done on "old" name as we need to interact with
-    // the underlying OS)
-    if (de->d_name[len-1]!='/' && len<=FL_PATH_MAX) {
-      // Use memcpy for speed since we already know the length of the string...
-      memcpy(name, de->d_name, len+1);
-      if (fl_filename_isdir(fullname)) {
-        char *dst = newde->d_name + newlen;
-        *dst++ = '/';
-        *dst = 0;
-      }
-    }
-
-    free(de);
-    (*list)[i] = newde;
-  }
-  free(fullname);
-
-  return n;
-
-#endif // WIN32
-}
-
-/**
- \brief Free the list of filenames that is generated by fl_filename_list().
- 
- Free everything that was allocated by a previous call to fl_filename_list().
- Use the return values as parameters for this function.
- 
- \param[in,out] list table containing the resulting directory listing
- \param[in] n number of entries in the list
- */
-void fl_filename_free_list(struct dirent ***list, int n)
-{
-  if (n<0) return;
-  
-  int i;
-  for (i = 0; i < n; i ++) {
-    if ((*list)[i])
-      free((*list)[i]);
-  }  
-  free(*list);
-  *list = 0;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_match.cxx
+++ /dev/null
@@ -1,119 +1,0 @@
-//
-// "$Id$"
-//
-// Pattern matching routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* Adapted from Rich Salz. */
-#include <FL/filename.H>
-#include <ctype.h>
-
-/**
-    Checks if a string \p s matches a pattern \p p. 
-    The following syntax is used for the pattern:
-    - * matches any sequence of 0 or more characters.
-    - ? matches any single character.
-    - [set] matches any character in the set. Set can contain any single characters, or a-z to represent a range. 
-      To match ] or - they must be the first characters. To match ^ or ! they must not be the first characters.
-    - [^set] or [!set] matches any character not in the set.
-    - {X|Y|Z} or {X,Y,Z} matches any one of the subexpressions literally.
-    - \\x quotes the character x so it has no special meaning.
-    - x all other characters must be matched exactly.
-
-    \b Include:
-    \code
-    #include <FL/filename.H>
-    \endcode
-
-    \param[in] s the string to check for a match
-    \param[in] p the string pattern 
-    \return non zero if the string matches the pattern
-*/
-int fl_filename_match(const char *s, const char *p) {
-  int matched;
-
-  for (;;) {
-    switch(*p++) {
-
-    case '?' :	// match any single character
-      if (!*s++) return 0;
-      break;
-
-    case '*' :	// match 0-n of any characters
-      if (!*p) return 1; // do trailing * quickly
-      while (!fl_filename_match(s, p)) if (!*s++) return 0;
-      return 1;
-
-    case '[': {	// match one character in set of form [abc-d] or [^a-b]
-      if (!*s) return 0;
-      int reverse = (*p=='^' || *p=='!'); if (reverse) p++;
-      matched = 0;
-      char last = 0;
-      while (*p) {
-	if (*p=='-' && last) {
-	  if (*s <= *++p && *s >= last ) matched = 1;
-	  last = 0;
-	} else {
-	  if (*s == *p) matched = 1;
-	}
-	last = *p++;
-	if (*p==']') break;
-      }
-      if (matched == reverse) return 0;
-      s++; p++;}
-    break;
-
-    case '{' : // {pattern1|pattern2|pattern3}
-    NEXTCASE:
-    if (fl_filename_match(s,p)) return 1;
-    for (matched = 0;;) {
-      switch (*p++) {
-      case '\\': if (*p) p++; break;
-      case '{': matched++; break;
-      case '}': if (!matched--) return 0; break;
-      case '|': case ',': if (matched==0) goto NEXTCASE;
-      case 0: return 0;
-      }
-    }
-    case '|':	// skip rest of |pattern|pattern} when called recursively
-    case ',':
-      for (matched = 0; *p && matched >= 0;) {
-	switch (*p++) {
-	case '\\': if (*p) p++; break;
-	case '{': matched++; break;
-	case '}': matched--; break;
-	}
-      }
-      break;
-    case '}':
-      break;
-
-    case 0:	// end of pattern
-      return !*s;
-
-    case '\\':	// quote next character
-      if (*p) p++;
-      /* FALLTHROUGH */
-    default:
-      if (tolower(*s) != tolower(*(p-1))) return 0;
-      s++;
-      break;
-    }
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/filename_setext.cxx
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// "$Id$"
-//
-// Filename extension routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Replace .ext with new extension
-
-#include <FL/filename.H>
-#include "flstring.h"
-
-/**
-   Replaces the extension in \p buf of max.<br>
-   size \p buflen with the extension in \p ext.<br>
-   If there's no '.' in \p buf, \p ext is appended.<br>
-   If \p ext is NULL, behaves as if it were an empty string ("").
-
-   \b Example
-   \code
-   #include <FL/filename.H>
-   [..]
-   char buf[FL_PATH_MAX] = "/path/myfile.cxx";
-   fl_filename_setext(buf, sizeof(buf), ".txt");      // buf[] becomes "/path/myfile.txt"
-   \endcode
-
-   \return buf itself for calling convenience.
-*/
-char *fl_filename_setext(char *buf, int buflen, const char *ext) {
-  char *q = (char *)fl_filename_ext(buf);
-  if (ext) {
-    strlcpy(q,ext,buflen - (q - buf));
-  } else *q = 0;
-  return(buf);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_arc.cxx
+++ /dev/null
@@ -1,82 +1,0 @@
-//
-// "$Id$"
-//
-// Arc functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_arc.cxx
-  \brief Utility functions for drawing arcs and circles.
-*/
-
-// Utility for drawing arcs and circles.  They are added to
-// the current fl_begin/fl_vertex/fl_end path.
-// Incremental math implementation:
-
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-
-// avoid problems with some platforms that don't 
-// implement hypot.
-static double _fl_hypot(double x, double y) {
-  return sqrt(x*x + y*y);
-}
-
-void Fl_Graphics_Driver::arc(double x, double y, double r, double start, double end) {
-
-  // draw start point accurately:
-  
-  double A = start*(M_PI/180);		// Initial angle (radians)
-  double X =  r*cos(A);			// Initial displacement, (X,Y)
-  double Y = -r*sin(A);			//   from center to initial point
-  fl_vertex(x+X,y+Y);			// Insert initial point
-
-  // Maximum arc length to approximate with chord with error <= 0.125
-  
-  double epsilon; {
-    double r1 = _fl_hypot(fl_transform_dx(r,0), // Horizontal "radius"
-		          fl_transform_dy(r,0));
-    double r2 = _fl_hypot(fl_transform_dx(0,r), // Vertical "radius"
-		          fl_transform_dy(0,r));
-		      
-    if (r1 > r2) r1 = r2;		// r1 = minimum "radius"
-    if (r1 < 2.) r1 = 2.;		// radius for circa 9 chords/circle
-    
-    epsilon = 2*acos(1.0 - 0.125/r1);	// Maximum arc angle
-  }
-  A = end*(M_PI/180) - A;		// Displacement angle (radians)
-  int i = int(ceil(fabs(A)/epsilon));	// Segments in approximation
-  
-  if (i) {
-    epsilon = A/i;			// Arc length for equal-size steps
-    double cos_e = cos(epsilon);	// Rotation coefficients
-    double sin_e = sin(epsilon);
-    do {
-      double Xnew =  cos_e*X + sin_e*Y;
-		Y = -sin_e*X + cos_e*Y;
-      fl_vertex(x + (X=Xnew), y + Y);
-    } while (--i);
-  }
-}
-
-#if 0 // portable version.  X-specific one in fl_vertex.cxx
-void fl_circle(double x,double y,double r) {
-  _fl_arc(x, y, r, r, 0, 360);
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_arci.cxx
+++ /dev/null
@@ -1,123 +1,0 @@
-//
-// "$Id$"
-//
-// Arc (integer) drawing functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_arci.cxx
-  \brief Utility functions for drawing circles using integers
-*/
-
-// "integer" circle drawing functions.  These draw the limited
-// circle types provided by X and NT graphics.  The advantage of
-// these is that small ones draw quite nicely (probably due to stored
-// hand-drawn bitmaps of small circles!) and may be implemented by
-// hardware and thus are fast.
-
-// Probably should add fl_chord.
-
-// 3/10/98: created
-
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#ifdef WIN32
-#  include <FL/math.h>
-#endif
-#include <config.h>
-
-void Fl_Graphics_Driver::arc(int x,int y,int w,int h,double a1,double a2) {
-  if (w <= 0 || h <= 0) return;
-
-#if defined(USE_X11)
-  XDrawArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-#elif defined(WIN32)
-  int xa = x+w/2+int(w*cos(a1/180.0*M_PI));
-  int ya = y+h/2-int(h*sin(a1/180.0*M_PI));
-  int xb = x+w/2+int(w*cos(a2/180.0*M_PI));
-  int yb = y+h/2-int(h*sin(a2/180.0*M_PI));
-  if (fabs(a1 - a2) < 90) {
-    if (xa == xb && ya == yb) SetPixel(fl_gc, xa, ya, fl_RGB());
-    else Arc(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-  } else Arc(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-#elif defined(__APPLE_QUARTZ__)
-  a1 = (-a1)/180.0f*M_PI; a2 = (-a2)/180.0f*M_PI;
-  float cx = x + 0.5f*w - 0.5f, cy = y + 0.5f*h - 0.5f;
-  CGContextSetShouldAntialias(fl_gc, true);
-  if (w!=h) {
-    CGContextSaveGState(fl_gc);
-    CGContextTranslateCTM(fl_gc, cx, cy);
-    CGContextScaleCTM(fl_gc, w-1.0f, h-1.0f);
-    CGContextAddArc(fl_gc, 0, 0, 0.5, a1, a2, 1);
-    CGContextRestoreGState(fl_gc);
-  } else {
-    float r = (w+h)*0.25f-0.5f;
-    CGContextAddArc(fl_gc, cx, cy, r, a1, a2, 1);
-  }
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::pie(int x,int y,int w,int h,double a1,double a2) {
-  if (w <= 0 || h <= 0) return;
-
-#if defined(USE_X11)
-  XDrawArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-  XFillArc(fl_display, fl_window, fl_gc, x,y,w-1,h-1, int(a1*64),int((a2-a1)*64));
-#elif defined(WIN32)
-  if (a1 == a2) return;
-  int xa = x+w/2+int(w*cos(a1/180.0*M_PI));
-  int ya = y+h/2-int(h*sin(a1/180.0*M_PI));
-  int xb = x+w/2+int(w*cos(a2/180.0*M_PI));
-  int yb = y+h/2-int(h*sin(a2/180.0*M_PI));
-  SelectObject(fl_gc, fl_brush());
-  if (fabs(a1 - a2) < 90) {
-    if (xa == xb && ya == yb) {
-      MoveToEx(fl_gc, x+w/2, y+h/2, 0L); 
-      LineTo(fl_gc, xa, ya);
-      SetPixel(fl_gc, xa, ya, fl_RGB());
-    } else Pie(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb);
-  } else Pie(fl_gc, x, y, x+w, y+h, xa, ya, xb, yb); 
-#elif defined(__APPLE_QUARTZ__)
-  a1 = (-a1)/180.0f*M_PI; a2 = (-a2)/180.0f*M_PI;
-  float cx = x + 0.5f*w - 0.5f, cy = y + 0.5f*h - 0.5f;
-  CGContextSetShouldAntialias(fl_gc, true);
-  if (w!=h) {
-    CGContextSaveGState(fl_gc);
-    CGContextTranslateCTM(fl_gc, cx, cy);
-    CGContextScaleCTM(fl_gc, w, h);
-    CGContextAddArc(fl_gc, 0, 0, 0.5, a1, a2, 1);
-    CGContextAddLineToPoint(fl_gc, 0, 0);
-    CGContextClosePath(fl_gc);
-    CGContextRestoreGState(fl_gc);
-  } else {
-    float r = (w+h)*0.25f;
-    CGContextAddArc(fl_gc, cx, cy, r, a1, a2, 1);
-    CGContextAddLineToPoint(fl_gc, cx, cy);
-    CGContextClosePath(fl_gc);
-  }
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_ask.cxx
+++ /dev/null
@@ -1,620 +1,0 @@
-//
-// "$Id$"
-//
-// Standard dialog functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
- \file fl_ask.cxx
- \brief Utility functions for common dialogs.
- */
-
-// Implementation of fl_message, fl_ask, fl_choice, fl_input
-// The three-message fl_show_x functions are for forms compatibility
-// mostly.  In most cases it is easier to get a multi-line message
-// by putting newlines in the message.
-
-#include <stdio.h>
-#include <stdarg.h>
-#include "flstring.h"
-
-#include <FL/Fl.H>
-
-#include <FL/fl_ask.H>
-
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Secret_Input.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static Fl_Window *message_form;
-static Fl_Box *message;
-static Fl_Box *icon;
-static Fl_Button *button[3];
-static Fl_Input *input;
-static int ret_val;
-static const char *iconlabel = "?";
-static const char *message_title_default;
-Fl_Font fl_message_font_ = FL_HELVETICA;
-Fl_Fontsize fl_message_size_ = -1;
-static int enableHotspot = 1;
-#ifdef __APPLE__
-extern "C" void NSBeep(void);
-#endif
-
-static char avoidRecursion = 0;
-
-// Sets the global return value (ret_val) and closes the window.
-// Note: this is used for the button callbacks and the window
-// callback (closing the window with the close button or menu).
-// The first argument (Fl_Widget *) can either be an Fl_Button*
-// pointer to one of the buttons or an Fl_Window* pointer to the
-// message window (message_form).
-static void button_cb(Fl_Widget *, long val) {
-  ret_val = (int) val;
-  message_form->hide();
-}
-
-static Fl_Window *makeform() {
- if (message_form) {
-   return message_form;
- }
- // make sure that the dialog does not become the child of some
- // current group
- Fl_Group *previously_current_group = Fl_Group::current();
- Fl_Group::current(0);
- // create a new top level window
- Fl_Window *w = message_form = new Fl_Window(410,103);
-  message_form->callback(button_cb);
- // w->clear_border();
- // w->box(FL_UP_BOX);
- (message = new Fl_Box(60, 25, 340, 20))
-   ->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
- (input = new Fl_Input(60, 37, 340, 23))->hide();
- {Fl_Box* o = icon = new Fl_Box(10, 10, 50, 50);
-  o->box(FL_THIN_UP_BOX);
-  o->labelfont(FL_TIMES_BOLD);
-  o->labelsize(34);
-  o->color(FL_WHITE);
-  o->labelcolor(FL_BLUE);
- }
- w->end(); // don't add the buttons automatically
- // create the buttons (right to left)
- {
-   for (int b=0, x=310; b<3; b++, x -= 100) {
-     if (b==1)
-       button[b] = new Fl_Return_Button(x, 70, 90, 23);
-     else
-       button[b] = new Fl_Button(x, 70, 90, 23);
-     button[b]->align(FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-     button[b]->callback(button_cb, b);
-   }
- }
- button[0]->shortcut(FL_Escape);
- // add the buttons (left to right)
- {
-   for (int b=2; b>=0; b--)
-     w->add(button[b]);
- }
- w->begin();
- w->resizable(new Fl_Box(60,10,110-60,27));
- w->end();
- w->set_modal();
- Fl_Group::current(previously_current_group);
- return w;
-}
-
-/*
- * 'resizeform()' - Resize the form and widgets so that they hold everything
- *                  that is asked of them...
- */
-
-static void resizeform() {
-  int	i;
-  int	message_w, message_h;
-  int	text_height;
-  int	button_w[3], button_h[3];
-  int	x, w, h, max_w, max_h;
-	const int icon_size = 50;
-
-  message_form->size(410,103);
-
-  fl_font(message->labelfont(), message->labelsize());
-  message_w = message_h = 0;
-  fl_measure(message->label(), message_w, message_h);
-
-  message_w += 10;
-  message_h += 10;
-  if (message_w < 340)
-    message_w = 340;
-  if (message_h < 30)
-    message_h = 30;
-
-  fl_font(button[0]->labelfont(), button[0]->labelsize());
-
-  memset(button_w, 0, sizeof(button_w));
-  memset(button_h, 0, sizeof(button_h));
-
-  for (max_h = 25, i = 0; i < 3; i ++)
-    if (button[i]->visible())
-    {
-      fl_measure(button[i]->label(), button_w[i], button_h[i]);
-
-      if (i == 1)
-        button_w[1] += 20;
-
-      button_w[i] += 30;
-      button_h[i] += 10;
-
-      if (button_h[i] > max_h)
-        max_h = button_h[i];
-    }
-
-  if (input->visible()) text_height = message_h + 25;
-  else text_height = message_h;
-
-  max_w = message_w + 10 + icon_size;
-  w     = button_w[0] + button_w[1] + button_w[2] - 10;
-
-  if (w > max_w)
-    max_w = w;
-
-  message_w = max_w - 10 - icon_size;
-
-  w = max_w + 20;
-  h = max_h + 30 + text_height;
-
-  message_form->size(w, h);
-  message_form->size_range(w, h, w, h);
-
-  message->resize(20 + icon_size, 10, message_w, message_h);
-  icon->resize(10, 10, icon_size, icon_size);
-  icon->labelsize(icon_size - 10);
-  input->resize(20 + icon_size, 10 + message_h, message_w, 25);
-
-  for (x = w, i = 0; i < 3; i ++)
-    if (button_w[i])
-    {
-      x -= button_w[i];
-      button[i]->resize(x, h - 10 - max_h, button_w[i] - 10, max_h);
-
-//      printf("button %d (%s) is %dx%d+%d,%d\n", i, button[i]->label(),
-//             button[i]->w(), button[i]->h(),
-//	     button[i]->x(), button[i]->y());
-    }
-}
-
-static int innards(const char* fmt, va_list ap,
-  const char *b0,
-  const char *b1,
-  const char *b2)
-{
-  Fl::pushed(0); // stop dragging (STR #2159)
-
-  avoidRecursion = 1;
-
-  makeform();
-  message_form->size(410,103);
-  char buffer[1024];
-  if (!strcmp(fmt,"%s")) {
-    message->label(va_arg(ap, const char*));
-  } else {
-    ::vsnprintf(buffer, 1024, fmt, ap);
-    message->label(buffer);
-  }
-
-  message->labelfont(fl_message_font_);
-  if (fl_message_size_ == -1)
-    message->labelsize(FL_NORMAL_SIZE);
-  else
-    message->labelsize(fl_message_size_);
-  if (b0) {button[0]->show(); button[0]->label(b0); button[1]->position(210,70);}
-  else {button[0]->hide(); button[1]->position(310,70);}
-  if (b1) {button[1]->show(); button[1]->label(b1);}
-  else button[1]->hide();
-  if (b2) {button[2]->show(); button[2]->label(b2);}
-  else button[2]->hide();
-  const char* prev_icon_label = icon->label();
-  if (!prev_icon_label) icon->label(iconlabel);
-
-  resizeform();
-
-  if (button[1]->visible() && !input->visible())
-    button[1]->take_focus();
-  if (enableHotspot)
-    message_form->hotspot(button[0]);
-  if (b0 && Fl_Widget::label_shortcut(b0))
-    button[0]->shortcut(0);
-  else
-    button[0]->shortcut(FL_Escape);
-
-  // set default window title, if defined and a specific title is not set
-  if (!message_form->label() && message_title_default)
-    message_form->label(message_title_default);
-
-  // deactivate Fl::grab(), because it is incompatible with modal windows
-  Fl_Window* g = Fl::grab();
-  if (g) Fl::grab(0);
-  Fl_Group *current_group = Fl_Group::current(); // make sure the dialog does not interfere with any active group
-  message_form->show();
-  Fl_Group::current(current_group);
-  while (message_form->shown()) Fl::wait();
-  if (g) // regrab the previous popup menu, if there was one
-    Fl::grab(g);
-  icon->label(prev_icon_label);
-  message_form->label(0); // reset window title
-
-  avoidRecursion = 0;
-  return ret_val;
-}
-
- /** \addtogroup group_comdlg
-    @{ */
-
-// pointers you can use to change FLTK to another language:
-const char* fl_no = "No";        ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_yes= "Yes";       ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_ok = "OK";        ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_cancel= "Cancel"; ///< string pointer used in common dialogs, you can change it to another language
-const char* fl_close= "Close";   ///< string pointer used in common dialogs, you can change it to another language
-
-// fltk functions:
-/**
-   Emits a system beep message.
- \param[in] type   The beep type from the \ref Fl_Beep enumeration.
-   \note \#include <FL/fl_ask.H>
- */
-void fl_beep(int type) {
-#ifdef WIN32
-  switch (type) {
-    case FL_BEEP_QUESTION :
-    case FL_BEEP_PASSWORD :
-      MessageBeep(MB_ICONQUESTION);
-      break;
-    case FL_BEEP_MESSAGE :
-      MessageBeep(MB_ICONASTERISK);
-      break;
-    case FL_BEEP_NOTIFICATION :
-      MessageBeep(MB_ICONASTERISK);
-      break;
-    case FL_BEEP_ERROR :
-      MessageBeep(MB_ICONERROR);
-      break;
-    default :
-      MessageBeep(0xFFFFFFFF);
-      break;
-  }
-#elif defined(__APPLE__)
-  switch (type) {
-    case FL_BEEP_DEFAULT :
-    case FL_BEEP_ERROR :
-      NSBeep();
-      break;
-    default :
-      break;
-  }
-#else
-  switch (type) {
-    case FL_BEEP_DEFAULT :
-    case FL_BEEP_ERROR :
-      if (!fl_display) fl_open_display();
-
-      XBell(fl_display, 100);
-      break;
-    default :
-      if (!fl_display) fl_open_display();
-
-      XBell(fl_display, 50);
-      break;
-  }
-#endif // WIN32
-}
-
-/** Shows an information message dialog box.
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
- */
-void fl_message(const char *fmt, ...) {
-
-  if (avoidRecursion) return;
-
-  va_list ap;
-
-  // fl_beep(FL_BEEP_MESSAGE);
-
-  va_start(ap, fmt);
-  iconlabel = "i";
-  innards(fmt, ap, 0, fl_close, 0);
-  va_end(ap);
-  iconlabel = "?";
-}
-
-/** Shows an alert message dialog box
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
- */
-void fl_alert(const char *fmt, ...) {
-
-  if (avoidRecursion) return;
-
-  va_list ap;
-
-  // fl_beep(FL_BEEP_ERROR);
-
-  va_start(ap, fmt);
-  iconlabel = "!";
-  innards(fmt, ap, 0, fl_close, 0);
-  va_end(ap);
-  iconlabel = "?";
-}
-/** Shows a dialog displaying the \p fmt message,
-    this dialog features 2 yes/no buttons
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \retval 0 if the no button is selected or another dialog box is still open
-   \retval 1 if yes is selected
-
-   \deprecated fl_ask() is deprecated since it uses "Yes" and "No" for the buttons which
-               does not conform to the current FLTK Human Interface Guidelines.
-               Use fl_choice() with the appropriate verbs instead.
- */
-int fl_ask(const char *fmt, ...) {
-
-  if (avoidRecursion) return 0;
-
-  va_list ap;
-
-  // fl_beep(FL_BEEP_QUESTION);
-
-  va_start(ap, fmt);
-  int r = innards(fmt, ap, fl_no, fl_yes, 0);
-  va_end(ap);
-
-  return r;
-}
-
-/** Shows a dialog displaying the printf style \p fmt message,
-    this dialog features up to 3 customizable choice buttons
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-    can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   Three choices with printf() style formatting:
-   \code
-       int num_msgs = GetNumberOfMessages();
-       switch ( fl_choice("What to do with %d messages?", "Send", "Save", "Delete", num_msgs) ) {
-         case 0: .. // Send
-         case 1: .. // Save (default)
-         case 2: .. // Delete
-         ..
-       }
-   \endcode
-
-   Three choice example:
-   \image html  fl_choice_three.png
-   \image latex fl_choice_three.png  "fl_choice() three choices" width=4cm
-   \code
-       switch ( fl_choice("How many musketeers?", "One", "Two", "Three") ) {
-         case 0: .. // One
-         case 1: .. // Two (default)
-         case 2: .. // Three
-       }
-   \endcode
-
-   Two choice example:
-   \image html  fl_choice_two.png
-   \image latex fl_choice_two.png  "fl_choice() two choices" width=4cm
-   \code
-       switch ( fl_choice("Empty trash?", "Yes", "No", 0) ) {
-         case 0: .. // Yes
-         case 1: .. // No (default)
-       }
-   \endcode
-
-   One choice example:
-   \image html  fl_choice_one.png
-   \image latex fl_choice_one.png  "fl_choice() one choice" width=4cm
-   \code
-       fl_choice("All hope is lost.", "OK", 0, 0);   // "OK" default
-   \endcode
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] b0 text label of button 0
-   \param[in] b1 text label of button 1 (can be 0)
-   \param[in] b2 text label of button 2 (can be 0)
-   \retval 0 if the first button with \p b0 text is pushed or another dialog box is still open
-   \retval 1 if the second button with \p b1 text is pushed
-   \retval 2 if the third button with \p b2 text is pushed
- */
-int fl_choice(const char*fmt,const char *b0,const char *b1,const char *b2,...){
-
-  if (avoidRecursion) return 0;
-
-  va_list ap;
-
-  // fl_beep(FL_BEEP_QUESTION);
-
-  va_start(ap, b2);
-  int r = innards(fmt, ap, b0, b1, b2);
-  va_end(ap);
-  return r;
-}
-/** Gets the Fl_Box icon container of the current default dialog used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password()
-    \note \#include <FL/fl_ask.H>
-*/
-Fl_Widget *fl_message_icon() {makeform(); return icon;}
-
-static const char* input_innards(const char* fmt, va_list ap,
-				 const char* defstr, uchar type) {
-  makeform();
-  message_form->size(410,103);
-  message->position(60,10);
-  input->type(type);
-  input->show();
-  input->value(defstr);
-  input->take_focus();
-
-  int r = innards(fmt, ap, fl_cancel, fl_ok, 0);
-  input->hide();
-  message->position(60,25);
-  return r ? input->value() : 0;
-}
-
-/** Shows an input dialog displaying the \p fmt message
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] defstr defines the default returned string if no text is entered
-   \return the user string input if OK was pushed, NULL if Cancel was pushed or another dialog box was still open
- */
-const char* fl_input(const char *fmt, const char *defstr, ...) {
-
-  if (avoidRecursion) return 0;
-
-  // fl_beep(FL_BEEP_QUESTION);
-
-  va_list ap;
-  va_start(ap, defstr);
-  const char* r = input_innards(fmt, ap, defstr, FL_NORMAL_INPUT);
-  va_end(ap);
-  return r;
-}
-
-/** Shows an input dialog displaying the \p fmt message.
-
-    Like fl_input() except the input text is not shown,
-    '*' characters are displayed instead.
-
-   \note Common dialog boxes are application modal. No more than one common dialog box
-   can be open at any time. Requests for additional dialog boxes are ignored.
-   \note \#include <FL/fl_ask.H>
-
-   \param[in] fmt can be used as an sprintf-like format and variables for the message text
-   \param[in] defstr defines the default returned string if no text is entered
-   \return the user string input if OK was pushed, NULL if Cancel was pushed or aother dialog box was still open
- */
-const char *fl_password(const char *fmt, const char *defstr, ...) {
-
-  if (avoidRecursion) return 0;
-
-  // fl_beep(FL_BEEP_PASSWORD);
-
-  va_list ap;
-  va_start(ap, defstr);
-  const char* r = input_innards(fmt, ap, defstr, FL_SECRET_INPUT);
-  va_end(ap);
-  return r;
-}
-
-/** Sets whether or not to move the common message box used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password() to follow
-    the mouse pointer.
-
-    The default is \e enabled, so that the default button is the
-    hotspot and appears at the mouse position.
-    \note \#include <FL/fl_ask.H>
-    \param[in]	enable	non-zero enables hotspot behavior,
-			0 disables hotspot
- */
-void fl_message_hotspot(int enable) {
-  enableHotspot = enable ? 1 : 0;
-}
-
-/** Gets whether or not to move the common message box used in
-    many common dialogs like fl_message(), fl_alert(),
-    fl_ask(), fl_choice(), fl_input(), fl_password() to follow
-    the mouse pointer.
-    \note \#include <FL/fl_ask.H>
-    \return	0 if disable, non-zero otherwise
-    \see fl_message_hotspot(int)
- */
-int fl_message_hotspot(void) {
-  return enableHotspot;
-}
-
-/** Sets the title of the dialog window used in many common dialogs.
-
-    This window \p title will be used in the next call of one of the
-    common dialogs like fl_message(), fl_alert(), fl_ask(), fl_choice(),
-    fl_input(), fl_password().
-
-    The \p title string is copied internally, so that you can use a
-    local variable or free the string immediately after this call. It
-    applies only to the \b next call of one of the common dialogs and
-    will be reset to an empty title (the default for all dialogs) after
-    that call.
-
-    \note \#include <FL/fl_ask.H>
-    \param[in] title	window label, string copied internally
-*/
-void fl_message_title(const char *title) {
-  makeform();
-  message_form->copy_label(title);
-}
-
-/** Sets the default title of the dialog window used in many common dialogs.
-
-    This window \p title will be used in all subsequent calls of one of the
-    common dialogs like fl_message(), fl_alert(), fl_ask(), fl_choice(),
-    fl_input(), fl_password(), unless a specific title has been set
-    with fl_message_title(const char *title).
-    
-    The default is no title. You can override the default title for a
-    single dialog with fl_message_title(const char *title).
-
-    The \p title string is copied internally, so that you can use a
-    local variable or free the string immediately after this call.
-
-    \note \#include <FL/fl_ask.H>
-    \param[in] title	default window label, string copied internally
-*/
-void fl_message_title_default(const char *title) {
-  if (message_title_default) {
-    free ((void *)message_title_default);
-    message_title_default = 0;
-  }
-  if (title)
-    message_title_default = strdup(title);
-}
-
-/** @} */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_boxtype.cxx
+++ /dev/null
@@ -1,470 +1,0 @@
-//
-// "$Id$"
-//
-// Box drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_boxtype.cxx
-  \brief drawing code for common box types.
-*/
-
-// Box drawing code for the common box types and the table of
-// boxtypes.  Other box types are in separate files so they are not
-// linked in if not used.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-#include <config.h>
-
-////////////////////////////////////////////////////////////////
-
-static const uchar active_ramp[24] = {
-  FL_GRAY_RAMP+0, FL_GRAY_RAMP+1, FL_GRAY_RAMP+2, FL_GRAY_RAMP+3,
-  FL_GRAY_RAMP+4, FL_GRAY_RAMP+5, FL_GRAY_RAMP+6, FL_GRAY_RAMP+7,
-  FL_GRAY_RAMP+8, FL_GRAY_RAMP+9, FL_GRAY_RAMP+10,FL_GRAY_RAMP+11,
-  FL_GRAY_RAMP+12,FL_GRAY_RAMP+13,FL_GRAY_RAMP+14,FL_GRAY_RAMP+15,
-  FL_GRAY_RAMP+16,FL_GRAY_RAMP+17,FL_GRAY_RAMP+18,FL_GRAY_RAMP+19,
-  FL_GRAY_RAMP+20,FL_GRAY_RAMP+21,FL_GRAY_RAMP+22,FL_GRAY_RAMP+23};
-static const uchar inactive_ramp[24] = {
-  43, 43, 44, 44,
-  44, 45, 45, 46,
-  46, 46, 47, 47,
-  48, 48, 48, 49,
-  49, 49, 50, 50,
-  51, 51, 52, 52};
-static int draw_it_active = 1;
-
-/**
-  Determines if the currently drawn box is active or inactive.
-
-  If inactive, the box color should be changed to the inactive color.
-
-  \see Fl::box_color(Fl_Color c)
-*/
-int Fl::draw_box_active() { return draw_it_active; }
-
-const uchar *fl_gray_ramp() {return (draw_it_active?active_ramp:inactive_ramp)-'A';}
-
-/**
-  Gets the drawing color to be used for the background of a box.
-
-  This method is only useful inside box drawing code. It returns the
-  color to be used, either fl_inactive(c) if the widget is inactive_r()
-  or \p c otherwise.
-*/
-Fl_Color Fl::box_color(Fl_Color c) {
-  return (draw_it_active ? c : fl_inactive(c));
-}
-
-/**
-  Sets the drawing color for the box that is currently drawn.
-
-  This method sets the current drawing color fl_color() depending on
-  the widget's state to either \p c or fl_inactive(c).
-
-  It should be used whenever a box background is drawn in the box (type)
-  drawing code instead of calling fl_color(Fl_Color bg) with the
-  background color \p bg, usually Fl_Widget::color().
-
-  This method is only useful inside box drawing code. Whenever a box is
-  drawn with one of the standard box drawing methods, a static variable
-  is set depending on the widget's current state - if the widget is
-  inactive_r() then the internal variable is false (0), otherwise it
-  is true (1). This is faster than calling Fl_Widget::active_r()
-  because the state is cached.
-
-  \see Fl::draw_box_active()
-  \see Fl::box_color(Fl_Color)
-*/
-void Fl::set_box_color(Fl_Color c) { fl_color(box_color(c)); }
-
-/**
-  Draws a series of line segments around the given box.
-  The string \p s must contain groups of 4 letters which specify one of 24
-  standard grayscale values, where 'A' is black and 'X' is white.
-  The order of each set of 4 characters is: top, left, bottom, right.
-  The result of calling fl_frame() with a string that is not a multiple
-  of 4 characters in length is undefined.
-  The only difference between this function and fl_frame2() is the order
-  of the line segments.
-  \param[in] s sets of 4 grayscale values in top, left, bottom, right order
-  \param[in] x, y, w, h position and size
-*/
-void fl_frame(const char* s, int x, int y, int w, int h) {
-  const uchar *g = fl_gray_ramp();
-  if (h > 0 && w > 0) for (;*s;) {
-    // draw top line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y, x+w-1);
-    y++; if (--h <= 0) break;
-    // draw left line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x, y+h-1, y);
-    x++; if (--w <= 0) break;
-    // draw bottom line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y+h-1, x+w-1);
-    if (--h <= 0) break;
-    // draw right line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x+w-1, y+h-1, y);
-    if (--w <= 0) break;
-  }
-}
-
-/**
-  Draws a series of line segments around the given box.
-  The string \p s must contain groups of 4 letters which specify one of 24
-  standard grayscale values, where 'A' is black and 'X' is white.
-  The order of each set of 4 characters is: bottom, right, top, left.
-  The result of calling fl_frame2() with a string that is not a multiple
-  of 4 characters in length is undefined.
-  The only difference between this function and fl_frame() is the order
-  of the line segments.
-  \param[in] s sets of 4 grayscale values in bottom, right, top, left order
-  \param[in] x, y, w, h position and size
-*/
-void fl_frame2(const char* s, int x, int y, int w, int h) {
-  const uchar *g = fl_gray_ramp();
-  if (h > 0 && w > 0) for (;*s;) {
-    // draw bottom line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y+h-1, x+w-1);
-    if (--h <= 0) break;
-    // draw right line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x+w-1, y+h-1, y);
-    if (--w <= 0) break;
-    // draw top line:
-    fl_color(g[(int)*s++]);
-    fl_xyline(x, y, x+w-1);
-    y++; if (--h <= 0) break;
-    // draw left line:
-    fl_color(g[(int)*s++]);
-    fl_yxline(x, y+h-1, y);
-    x++; if (--w <= 0) break;
-  }
-}
-
-/** Draws a box of type FL_NO_BOX */
-void fl_no_box(int, int, int, int, Fl_Color) {}
-
-/** Draws a box of type FL_FLAT_BOX */
-void fl_flat_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_rectf(x, y, w, h, Fl::box_color(c));
-}
-
-/** Draws a frame of type FL_THIN_DOWN_FRAME */
-void fl_thin_down_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame2("WWHH",x,y,w,h);
-}
-
-/** Draws a box of type FL_THIN_DOWN_BOX */
-void fl_thin_down_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_thin_down_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-
-/** Draws a frame of type FL_THIN_UP_FRAME */
-void fl_thin_up_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame2("HHWW",x,y,w,h);
-}
-
-/** Draws a box of type FL_THIN_UP_BOX */
-void fl_thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_thin_up_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-
-/** Draws a frame of type FL_UP_FRAME */
-void fl_up_frame(int x, int y, int w, int h, Fl_Color) {
-#if BORDER_WIDTH == 1
-  fl_frame2("HHWW",x,y,w,h);
-#else
-#if BORDER_WIDTH == 2
-  fl_frame2("AAWWMMTT",x,y,w,h);
-#else
-  fl_frame("AAAAWWJJUTNN",x,y,w,h);
-#endif
-#endif
-}
-
-#define D1 BORDER_WIDTH
-#define D2 (BORDER_WIDTH+BORDER_WIDTH)
-
-/** Draws a box of type FL_UP_BOX */
-void fl_up_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_up_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+D1, y+D1, w-D2, h-D2);
-}
-
-/** Draws a frame of type FL_DOWN_FRAME */
-void fl_down_frame(int x, int y, int w, int h, Fl_Color) {
-#if BORDER_WIDTH == 1
-  fl_frame2("WWHH",x,y,w,h);
-#else
-#if BORDER_WIDTH == 2
-  fl_frame2("WWMMPPAA",x,y,w,h);
-#else
-  fl_frame("NNTUJJWWAAAA",x,y,w,h);
-#endif
-#endif
-}
-
-/** Draws a box of type FL_DOWN_BOX */
-void fl_down_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_down_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+D1, y+D1, w-D2, h-D2);
-}
-
-/** Draws a frame of type FL_ENGRAVED_FRAME */
-void fl_engraved_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame("HHWWWWHH",x,y,w,h);
-}
-
-/** Draws a box of type FL_ENGRAVED_BOX */
-void fl_engraved_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_engraved_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+2, y+2, w-4, h-4);
-}
-
-/** Draws a frame of type FL_EMBOSSED_FRAME */
-void fl_embossed_frame(int x, int y, int w, int h, Fl_Color) {
-  fl_frame("WWHHHHWW",x,y,w,h);
-}
-
-/** Draws a box of type FL_EMBOSSED_BOX */
-void fl_embossed_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_embossed_frame(x,y,w,h,c);
-  Fl::set_box_color(c);
-  fl_rectf(x+2, y+2, w-4, h-4);
-}
-
-/**
-  Draws a bounded rectangle with a given position, size and color.
-  Equivalent to drawing a box of type FL_BORDER_BOX.
-*/
-void fl_rectbound(int x, int y, int w, int h, Fl_Color bgcolor) {
-  Fl::set_box_color(FL_BLACK);
-  fl_rect(x, y, w, h);
-  Fl::set_box_color(bgcolor);
-  fl_rectf(x+1, y+1, w-2, h-2);
-}
-#define fl_border_box fl_rectbound	/**< allow consistent naming */
-
-/**
-  Draws a frame of type FL_BORDER_FRAME.
-*/
-void fl_border_frame(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  fl_rect(x, y, w, h);
-}
-
-////////////////////////////////////////////////////////////////
-
-static struct {
-  Fl_Box_Draw_F *f;
-  uchar dx, dy, dw, dh;
-  int set;
-} fl_box_table[256] = {
-// must match list in Enumerations.H!!!
-  {fl_no_box,		0,0,0,0,1},
-  {fl_flat_box,		0,0,0,0,1}, // FL_FLAT_BOX
-  {fl_up_box,		D1,D1,D2,D2,1},
-  {fl_down_box,		D1,D1,D2,D2,1},
-  {fl_up_frame,		D1,D1,D2,D2,1},
-  {fl_down_frame,	D1,D1,D2,D2,1},
-  {fl_thin_up_box,	1,1,2,2,1},
-  {fl_thin_down_box,	1,1,2,2,1},
-  {fl_thin_up_frame,	1,1,2,2,1},
-  {fl_thin_down_frame,	1,1,2,2,1},
-  {fl_engraved_box,	2,2,4,4,1},
-  {fl_embossed_box,	2,2,4,4,1},
-  {fl_engraved_frame,	2,2,4,4,1},
-  {fl_embossed_frame,	2,2,4,4,1},
-  {fl_border_box,	1,1,2,2,1},
-  {fl_border_box,	1,1,5,5,0}, // _FL_SHADOW_BOX
-  {fl_border_frame,	1,1,2,2,1},
-  {fl_border_frame,	1,1,5,5,0}, // _FL_SHADOW_FRAME
-  {fl_border_box,	1,1,2,2,0}, // _FL_ROUNDED_BOX
-  {fl_border_box,	1,1,2,2,0}, // _FL_RSHADOW_BOX
-  {fl_border_frame,	1,1,2,2,0}, // _FL_ROUNDED_FRAME
-  {fl_flat_box,		0,0,0,0,0}, // _FL_RFLAT_BOX
-  {fl_up_box,		3,3,6,6,0}, // _FL_ROUND_UP_BOX
-  {fl_down_box,		3,3,6,6,0}, // _FL_ROUND_DOWN_BOX
-  {fl_up_box,		0,0,0,0,0}, // _FL_DIAMOND_UP_BOX
-  {fl_down_box,		0,0,0,0,0}, // _FL_DIAMOND_DOWN_BOX
-  {fl_border_box,	1,1,2,2,0}, // _FL_OVAL_BOX
-  {fl_border_box,	1,1,2,2,0}, // _FL_OVAL_SHADOW_BOX
-  {fl_border_frame,	1,1,2,2,0}, // _FL_OVAL_FRAME
-  {fl_flat_box,		0,0,0,0,0}, // _FL_OVAL_FLAT_BOX
-  {fl_up_box,		4,4,8,8,0}, // _FL_PLASTIC_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_DOWN_BOX
-  {fl_up_frame,		2,2,4,4,0}, // _FL_PLASTIC_UP_FRAME
-  {fl_down_frame,	2,2,4,4,0}, // _FL_PLASTIC_DOWN_FRAME
-  {fl_up_box,		2,2,4,4,0}, // _FL_PLASTIC_THIN_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_THIN_DOWN_BOX
-  {fl_up_box,		2,2,4,4,0}, // _FL_PLASTIC_ROUND_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_PLASTIC_ROUND_DOWN_BOX
-  {fl_up_box,		2,2,4,4,0}, // _FL_GTK_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_GTK_DOWN_BOX
-  {fl_up_frame,		2,2,4,4,0}, // _FL_GTK_UP_FRAME
-  {fl_down_frame,	2,2,4,4,0}, // _FL_GTK_DOWN_FRAME
-  {fl_up_frame,		1,1,2,2,0}, // _FL_GTK_THIN_UP_FRAME
-  {fl_down_frame,	1,1,2,2,0}, // _FL_GTK_THIN_DOWN_FRAME
-  {fl_up_box,		1,1,2,2,0}, // _FL_GTK_THIN_ROUND_UP_BOX
-  {fl_down_box,		1,1,2,2,0}, // _FL_GTK_THIN_ROUND_DOWN_BOX
-  {fl_up_box,		2,2,4,4,0}, // _FL_GTK_ROUND_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_GTK_ROUND_DOWN_BOX
-  {fl_up_box,		2,2,4,4,0}, // _FL_GLEAM_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_DOWN_BOX
-  {fl_up_frame,		2,2,4,4,0}, // _FL_GLEAM_UP_FRAME
-  {fl_down_frame,	2,2,4,4,0}, // _FL_GLEAM_DOWN_FRAME
-  {fl_up_box,		2,2,4,4,0}, // _FL_GLEAM_THIN_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_THIN_DOWN_BOX
-  {fl_up_box,	       	2,2,4,4,0}, // _FL_GLEAM_ROUND_UP_BOX
-  {fl_down_box,		2,2,4,4,0}, // _FL_GLEAM_ROUND_DOWN_BOX
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+0
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+1
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+2
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+3
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+4
-  {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+5
-  {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+6
-  {fl_down_box,		3,3,6,6,0}  // FL_FREE_BOX+7
-};
-
-/**
-  Returns the X offset for the given boxtype.
-  \see box_dy()
-*/
-int Fl::box_dx(Fl_Boxtype t) {return fl_box_table[t].dx;}
-
-/**
-    Returns the Y offset for the given boxtype.
-
-    These functions return the offset values necessary for a given
-    boxtype, useful for computing the area inside a box's borders, to
-    prevent overdrawing the borders.
-
-    For instance, in the case of a boxtype like FL_DOWN_BOX
-    where the border width might be 2 pixels all around, the above
-    functions would return 2, 2, 4, and 4 for box_dx,
-    box_dy, box_dw, and box_dh respectively.
-
-    An example to compute the area inside a widget's box():
-    \code
-         int X = yourwidget->x() + Fl::box_dx(yourwidget->box());
-         int Y = yourwidget->y() + Fl::box_dy(yourwidget->box());
-         int W = yourwidget->w() - Fl::box_dw(yourwidget->box());
-         int H = yourwidget->h() - Fl::box_dh(yourwidget->box());
-    \endcode
-    These functions are mainly useful in the draw() code
-    for deriving custom widgets, where one wants to avoid drawing
-    over the widget's own border box().
-*/
-int Fl::box_dy(Fl_Boxtype t) {return fl_box_table[t].dy;}
-
-/**
-  Returns the width offset for the given boxtype.
-  \see box_dy().
-*/
-int Fl::box_dw(Fl_Boxtype t) {return fl_box_table[t].dw;}
-
-/**
-  Returns the height offset for the given boxtype.
-  \see box_dy().
-*/
-int Fl::box_dh(Fl_Boxtype t) {return fl_box_table[t].dh;}
-
-/**
-  Sets the drawing function for a given box type.
-  \param[in] t box type
-  \param[in] f box drawing function
-*/
-void fl_internal_boxtype(Fl_Boxtype t, Fl_Box_Draw_F* f) {
-  if (!fl_box_table[t].set) {
-    fl_box_table[t].f   = f;
-    fl_box_table[t].set = 1;
-  }
-}
-
-/** Gets the current box drawing function for the specified box type. */
-Fl_Box_Draw_F *Fl::get_boxtype(Fl_Boxtype t) {
-  return fl_box_table[t].f;
-}
-/** Sets the function to call to draw a specific boxtype. */
-void Fl::set_boxtype(Fl_Boxtype t, Fl_Box_Draw_F* f,
-		      uchar a, uchar b, uchar c, uchar d) {
-  fl_box_table[t].f   = f;
-  fl_box_table[t].set = 1;
-  fl_box_table[t].dx  = a;
-  fl_box_table[t].dy  = b;
-  fl_box_table[t].dw  = c;
-  fl_box_table[t].dh  = d;
-}
-/** Copies the from boxtype. */
-void Fl::set_boxtype(Fl_Boxtype to, Fl_Boxtype from) {
-  fl_box_table[to] = fl_box_table[from];
-}
-
-/**
-  Draws a box using given type, position, size and color.
-  \param[in] t box type
-  \param[in] x, y, w, h position and size
-  \param[in] c color
-*/
-void fl_draw_box(Fl_Boxtype t, int x, int y, int w, int h, Fl_Color c) {
-  if (t && fl_box_table[t].f) fl_box_table[t].f(x,y,w,h,c);
-}
-
-//extern Fl_Widget *fl_boxcheat; // hack set by Fl_Window.cxx
-/** Draws the widget box according its box style */
-void Fl_Widget::draw_box() const {
-  if (box_) draw_box((Fl_Boxtype)box_, x_, y_, w_, h_, color_);
-  draw_backdrop();
-}
-/** If FL_ALIGN_IMAGE_BACKDROP is set, the image or deimage will be drawn */
-void Fl_Widget::draw_backdrop() const {
-  if (align() & FL_ALIGN_IMAGE_BACKDROP) {
-    const Fl_Image *img = image();
-    // if there is no image, we will not draw the deimage either
-    if (img && deimage() && !active_r())
-      img = deimage();
-    if (img)
-      ((Fl_Image*)img)->draw(x_+(w_-img->w())/2, y_+(h_-img->h())/2);
-  }
-}
-/** Draws a box of type t, of color c at the widget's position and size. */
-void Fl_Widget::draw_box(Fl_Boxtype t, Fl_Color c) const {
-  draw_box(t, x_, y_, w_, h_, c);
-}
-/** Draws a box of type t, of color c at the position X,Y and size W,H. */
-void Fl_Widget::draw_box(Fl_Boxtype t, int X, int Y, int W, int H, Fl_Color c) const {
-  draw_it_active = active_r();
-  fl_box_table[t].f(X, Y, W, H, c);
-  draw_it_active = 1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_call_main.c
+++ /dev/null
@@ -1,134 +1,0 @@
-/*
- * "$Id$"
- *
- * Copyright 1998-2010 by Bill Spitzak and others.
- *
- * fl_call_main() calls main() for you Windows people.  Needs to be done in C
- * because Borland C++ won't let you call main() from C++.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This WinMain() function can be overridden by an application and
- * is provided for compatibility with programs written for other
- * operating systems that conform to the ANSI standard entry point
- * "main()".  This will allow you to build a WIN32 Application
- * without any special settings.
- *
- * Because of problems with the Microsoft Visual C++ header files
- * and/or compiler, you cannot have a WinMain function in a DLL.
- * I don't know why.  Thus, this nifty feature is only available
- * if you link to the static library.
- *
- * Currently the debug version of this library will create a
- * console window for your application so you can put printf()
- * statements for debugging or informational purposes.  Ultimately
- * we want to update this to always use the parent's console,
- * but at present we have not identified a function or API in
- * Microsoft(r) Windows(r) that allows for it.
- */
-
-#if defined(WIN32) && !defined(FL_DLL) && !defined (__GNUC__)
-
-#  include <windows.h>
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include <FL/fl_utf8.h>
-
-extern int main(int, char *[]);
-
-#  ifdef BORLAND5
-#    define __argc _argc
-#    define __argv _argv
-#  endif /* BORLAND5 */
-
-/* static int mbcs2utf(const char *s, int l, char *dst, unsigned dstlen) */
-static int mbcs2utf(const char *s, int l, char *dst)
-{
-  static xchar *mbwbuf;
-  unsigned dstlen = 0;
-  if (!s) return 0;
-  dstlen = (l * 6) + 6;
-  mbwbuf = (xchar*)malloc(dstlen * sizeof(xchar));
-  l = (int) mbstowcs(mbwbuf, s, l);
-/* l = fl_unicode2utf(mbwbuf, l, dst); */
-  l = fl_utf8fromwc(dst, dstlen, mbwbuf, l);
-  dst[l] = 0;
-  free(mbwbuf);
-  return l;
-}
-
-int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
-                             LPSTR lpCmdLine, int nCmdShow) {
-  int rc, i;
-  char **ar;
-
-#  ifdef _DEBUG
- /*
-  * If we are using compiling in debug mode, open a console window so
-  * we can see any printf's, etc...
-  *
-  * While we can detect if the program was run from the command-line -
-  * look at the CMDLINE environment variable, it will be "WIN" for
-  * programs started from the GUI - the shell seems to run all WIN32
-  * applications in the background anyways...
-  */
-
-  AllocConsole();
-  freopen("conin$", "r", stdin);
-  freopen("conout$", "w", stdout);
-  freopen("conout$", "w", stderr);
-#  endif /* _DEBUG */
-
-  ar = (char**) malloc(sizeof(char*) * (__argc + 1));
-  i = 0;
-  while (i < __argc) {
-    int l;
-    unsigned dstlen;
-    if (__wargv ) {
-      for (l = 0; __wargv[i] && __wargv[i][l]; l++) {}; /* is this just wstrlen??? */
-      dstlen = (l * 5) + 1;
-      ar[i] = (char*) malloc(dstlen);
-/*    ar[i][fl_unicode2utf(__wargv[i], l, ar[i])] = 0; */
-      dstlen = fl_utf8fromwc(ar[i], dstlen, __wargv[i], l);
-      ar[i][dstlen] = 0;
-    } else {
-      for (l = 0; __argv[i] && __argv[i][l]; l++) {};
-      dstlen = (l * 5) + 1;
-      ar[i] = (char*) malloc(dstlen);
-/*      ar[i][mbcs2utf(__argv[i], l, ar[i], dstlen)] = 0; */
-      ar[i][mbcs2utf(__argv[i], l, ar[i])] = 0;
-    }
-    i++;
-  }
-  ar[__argc] = 0;
-  /* Run the standard main entry point function... */
-  rc = main(__argc, ar);
-
-#  ifdef _DEBUG
-  fclose(stdin);
-  fclose(stdout);
-  fclose(stderr);
-#  endif /* _DEBUG */
-
-  return rc;
-}
-
-#else
-/* STR# 2973: solves "empty translation unit" error (Sun, HP-UX..) */
-typedef int dummy;
-#endif /* WIN32 && !FL_DLL && !__GNUC__ */
-
-/*
- * End of "$Id$".
- */
-
--- a/DoConfig/fltk/src/fl_cmap.h
+++ /dev/null
@@ -1,256 +1,0 @@
-	0x00000000,
-	0xff000000,
-	0x00ff0000,
-	0xffff0000,
-	0x0000ff00,
-	0xff00ff00,
-	0x00ffff00,
-	0xffffff00,
-	0x55555500,
-	0xc6717100,
-	0x71c67100,
-	0x8e8e3800,
-	0x7171c600,
-	0x8e388e00,
-	0x388e8e00,
-	0x00008000,
-	0xa8a89800,
-	0xe8e8d800,
-	0x68685800,
-	0x98a8a800,
-	0xd8e8e800,
-	0x58686800,
-	0x9c9ca800,
-	0xdcdce800,
-	0x5c5c6800,
-	0x9ca89c00,
-	0xdce8dc00,
-	0x5c685c00,
-	0x90909000,
-	0xc0c0c000,
-	0x50505000,
-	0xa0a0a000,
-	0x00000000,
-	0x0d0d0d00,
-	0x1a1a1a00,
-	0x26262600,
-	0x31313100,
-	0x3d3d3d00,
-	0x48484800,
-	0x55555500,
-	0x5f5f5f00,
-	0x6a6a6a00,
-	0x75757500,
-	0x80808000,
-	0x8a8a8a00,
-	0x95959500,
-	0xa0a0a000,
-	0xaaaaaa00,
-	0xb5b5b500,
-	0xc0c0c000,
-	0xcbcbcb00,
-	0xd5d5d500,
-	0xe0e0e000,
-	0xeaeaea00,
-	0xf5f5f500,
-	0xffffff00,
-	0x00000000,
-	0x00240000,
-	0x00480000,
-	0x006d0000,
-	0x00910000,
-	0x00b60000,
-	0x00da0000,
-	0x00ff0000,
-	0x3f000000,
-	0x3f240000,
-	0x3f480000,
-	0x3f6d0000,
-	0x3f910000,
-	0x3fb60000,
-	0x3fda0000,
-	0x3fff0000,
-	0x7f000000,
-	0x7f240000,
-	0x7f480000,
-	0x7f6d0000,
-	0x7f910000,
-	0x7fb60000,
-	0x7fda0000,
-	0x7fff0000,
-	0xbf000000,
-	0xbf240000,
-	0xbf480000,
-	0xbf6d0000,
-	0xbf910000,
-	0xbfb60000,
-	0xbfda0000,
-	0xbfff0000,
-	0xff000000,
-	0xff240000,
-	0xff480000,
-	0xff6d0000,
-	0xff910000,
-	0xffb60000,
-	0xffda0000,
-	0xffff0000,
-	0x00003f00,
-	0x00243f00,
-	0x00483f00,
-	0x006d3f00,
-	0x00913f00,
-	0x00b63f00,
-	0x00da3f00,
-	0x00ff3f00,
-	0x3f003f00,
-	0x3f243f00,
-	0x3f483f00,
-	0x3f6d3f00,
-	0x3f913f00,
-	0x3fb63f00,
-	0x3fda3f00,
-	0x3fff3f00,
-	0x7f003f00,
-	0x7f243f00,
-	0x7f483f00,
-	0x7f6d3f00,
-	0x7f913f00,
-	0x7fb63f00,
-	0x7fda3f00,
-	0x7fff3f00,
-	0xbf003f00,
-	0xbf243f00,
-	0xbf483f00,
-	0xbf6d3f00,
-	0xbf913f00,
-	0xbfb63f00,
-	0xbfda3f00,
-	0xbfff3f00,
-	0xff003f00,
-	0xff243f00,
-	0xff483f00,
-	0xff6d3f00,
-	0xff913f00,
-	0xffb63f00,
-	0xffda3f00,
-	0xffff3f00,
-	0x00007f00,
-	0x00247f00,
-	0x00487f00,
-	0x006d7f00,
-	0x00917f00,
-	0x00b67f00,
-	0x00da7f00,
-	0x00ff7f00,
-	0x3f007f00,
-	0x3f247f00,
-	0x3f487f00,
-	0x3f6d7f00,
-	0x3f917f00,
-	0x3fb67f00,
-	0x3fda7f00,
-	0x3fff7f00,
-	0x7f007f00,
-	0x7f247f00,
-	0x7f487f00,
-	0x7f6d7f00,
-	0x7f917f00,
-	0x7fb67f00,
-	0x7fda7f00,
-	0x7fff7f00,
-	0xbf007f00,
-	0xbf247f00,
-	0xbf487f00,
-	0xbf6d7f00,
-	0xbf917f00,
-	0xbfb67f00,
-	0xbfda7f00,
-	0xbfff7f00,
-	0xff007f00,
-	0xff247f00,
-	0xff487f00,
-	0xff6d7f00,
-	0xff917f00,
-	0xffb67f00,
-	0xffda7f00,
-	0xffff7f00,
-	0x0000bf00,
-	0x0024bf00,
-	0x0048bf00,
-	0x006dbf00,
-	0x0091bf00,
-	0x00b6bf00,
-	0x00dabf00,
-	0x00ffbf00,
-	0x3f00bf00,
-	0x3f24bf00,
-	0x3f48bf00,
-	0x3f6dbf00,
-	0x3f91bf00,
-	0x3fb6bf00,
-	0x3fdabf00,
-	0x3fffbf00,
-	0x7f00bf00,
-	0x7f24bf00,
-	0x7f48bf00,
-	0x7f6dbf00,
-	0x7f91bf00,
-	0x7fb6bf00,
-	0x7fdabf00,
-	0x7fffbf00,
-	0xbf00bf00,
-	0xbf24bf00,
-	0xbf48bf00,
-	0xbf6dbf00,
-	0xbf91bf00,
-	0xbfb6bf00,
-	0xbfdabf00,
-	0xbfffbf00,
-	0xff00bf00,
-	0xff24bf00,
-	0xff48bf00,
-	0xff6dbf00,
-	0xff91bf00,
-	0xffb6bf00,
-	0xffdabf00,
-	0xffffbf00,
-	0x0000ff00,
-	0x0024ff00,
-	0x0048ff00,
-	0x006dff00,
-	0x0091ff00,
-	0x00b6ff00,
-	0x00daff00,
-	0x00ffff00,
-	0x3f00ff00,
-	0x3f24ff00,
-	0x3f48ff00,
-	0x3f6dff00,
-	0x3f91ff00,
-	0x3fb6ff00,
-	0x3fdaff00,
-	0x3fffff00,
-	0x7f00ff00,
-	0x7f24ff00,
-	0x7f48ff00,
-	0x7f6dff00,
-	0x7f91ff00,
-	0x7fb6ff00,
-	0x7fdaff00,
-	0x7fffff00,
-	0xbf00ff00,
-	0xbf24ff00,
-	0xbf48ff00,
-	0xbf6dff00,
-	0xbf91ff00,
-	0xbfb6ff00,
-	0xbfdaff00,
-	0xbfffff00,
-	0xff00ff00,
-	0xff24ff00,
-	0xff48ff00,
-	0xff6dff00,
-	0xff91ff00,
-	0xffb6ff00,
-	0xffdaff00,
-	0xffffff00
--- a/DoConfig/fltk/src/fl_color.cxx
+++ /dev/null
@@ -1,462 +1,0 @@
-//
-// "$Id$"
-//
-// Color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_color.cxx
-  \brief Color handling
-*/
-
-// Implementation of fl_color(i), fl_color(r,g,b).
-
-#ifdef WIN32
-#  include "fl_color_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_color_mac.cxx"
-#else
-
-// Also code to look at the X visual and figure out the best way to turn
-// a color into a pixel value.
-
-// SGI compiler seems to have problems with unsigned char arguments
-// being used to index arrays.  So I always copy them to an integer
-// before use.
-
-#  include "Fl_XColor.H"
-#  include <FL/Fl.H>
-#  include <FL/x.H>
-#  include <FL/fl_draw.H>
-
-////////////////////////////////////////////////////////////////
-// figure_out_visual() calculates masks & shifts for generating
-// pixels in true-color visuals:
-
-uchar fl_redmask;	/**< color mask used in current color map handling */
-uchar fl_greenmask;	/**< color mask used in current color map handling */
-uchar fl_bluemask;	/**< color mask used in current color map handling */
-
-int fl_redshift;	/**< color shift used in current color map handling */
-int fl_greenshift;	/**< color shift used in current color map handling */
-int fl_blueshift;	/**< color shift used in current color map handling */
-int fl_extrashift;	/**< color shift used in current color map handling */
-
-static uchar beenhere;
-
-static void figure_out_visual() {
-  beenhere = 1;
-  if (!fl_visual->red_mask || !fl_visual->green_mask || !fl_visual->blue_mask){
-#  if USE_COLORMAP
-    fl_redmask = 0;
-    return;
-#  else
-    Fl::fatal("Requires true color visual");
-#  endif
-  }
-
-  // get the bit masks into a more useful form:
-  int i,j,m;
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->red_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->red_mask & m)) break;
-  fl_redshift = j-8;
-  fl_redmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->green_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->green_mask & m)) break;
-  fl_greenshift = j-8;
-  fl_greenmask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  for (i = 0, m = 1; m; i++, m<<=1) if (fl_visual->blue_mask & m) break;
-  for (j = i; m; j++, m<<=1) if (!(fl_visual->blue_mask & m)) break;
-  fl_blueshift = j-8;
-  fl_bluemask = (j-i >= 8) ? 0xFF : 0xFF-(255>>(j-i));
-
-  i = fl_redshift;
-  if (fl_greenshift < i) i = fl_greenshift;
-  if (fl_blueshift < i) i = fl_blueshift;
-  if (i < 0) {
-    fl_extrashift = -i;
-    fl_redshift -= i; fl_greenshift -= i; fl_blueshift -= i;
-  } else
-    fl_extrashift = 0;
-
-}
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-#  if HAVE_OVERLAY
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[2][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-uchar fl_overlay;
-Colormap fl_overlay_colormap;
-XVisualInfo* fl_overlay_visual;
-ulong fl_transparent_pixel;
-#  else
-/** HAVE_OVERLAY determines whether fl_xmap is one or two planes */
-Fl_XColor fl_xmap[1][256];
-/** HAVE_OVERLAY determines whether fl_overlay is variable or defined as 0 */
-#    define fl_overlay 0
-#  endif
-
-void Fl_Xlib_Graphics_Driver::color(Fl_Color i) {
-  if (i & 0xffffff00) {
-    unsigned rgb = (unsigned)i;
-    fl_color((uchar)(rgb >> 24), (uchar)(rgb >> 16), (uchar)(rgb >> 8));
-  } else {
-    Fl_Graphics_Driver::color(i);
-    if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
-    XSetForeground(fl_display, fl_gc, fl_xpixel(i));
-  }
-}
-
-void Fl_Xlib_Graphics_Driver::color(uchar r,uchar g,uchar b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  if(!fl_gc) return; // don't get a default gc if current window is not yet created/valid
-  XSetForeground(fl_display, fl_gc, fl_xpixel(r,g,b));
-}
-
-/** \addtogroup  fl_attributes
-    @{ */
-////////////////////////////////////////////////////////////////
-// Get an rgb color.  This is easy for a truecolor visual.  For
-// colormapped it picks the closest color out of the cube in the
-// fltk colormap.  However if this color cube entry has been
-// requested before, you will get the earlier requested color, and
-// even this may be approximated if the X colormap was full.
-
-/**
-  Returns the X pixel number used to draw the given rgb color.
-  This is the X pixel that fl_color() would use.
-  \param[in] r,g,b color components
-  \return X pixel number
-*/
-ulong fl_xpixel(uchar r,uchar g,uchar b) {
-  if (!beenhere) figure_out_visual();
-#  if USE_COLORMAP
-  if (!fl_redmask) {
-    // find closest entry in the colormap:
-    Fl_Color i =
-      fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor &xmap = fl_xmap[fl_overlay][i];
-    if (xmap.mapped) return xmap.pixel;
-    // if not black or white, change the entry to be an exact match:
-    if (i != FL_COLOR_CUBE && i != 0xFF)
-      fl_cmap[i] = (r<<24)|(g<<16)|(b<<8);
-    return fl_xpixel(i); // allocate an X color
-  }
-#  endif
-  return
-    (((r&fl_redmask) << fl_redshift)+
-     ((g&fl_greenmask)<<fl_greenshift)+
-     ((b&fl_bluemask)<< fl_blueshift)
-     ) >> fl_extrashift;
-}
-
-////////////////////////////////////////////////////////////////
-// Get a color out of the fltk colormap.  Again for truecolor
-// visuals this is easy.  For colormap this actually tries to allocate
-// an X color, and does a least-squares match to find the closest
-// color if X cannot allocate that color.
-
-// calculate what color is actually on the screen for a mask:
-static inline uchar realcolor(uchar color, uchar mask) {
-#  if 0
-  // accurate version if the display has linear gamma, but fl_draw_image
-  // works better with the simpler version on most screens...
-  uchar m = mask;
-  uchar result = color&m;
-  for (;;) {
-    while (m&mask) {m>>=1; color>>=1;}
-    if (!m) break;
-    mask = m;
-    result |= color&m;
-  }
-  return result;
-#  else
-  return (color&mask) | ( (~mask)&(mask>>1) );
-#  endif
-}
-
-/**
-  Returns the X pixel number used to draw the given FLTK color index.
-  This is the X pixel that fl_color() would use.
-  \param[in] i color index
-  \return X pixel number
-*/
-ulong fl_xpixel(Fl_Color i) {
-  if (i & 0xffffff00) {
-    return fl_xpixel((i >> 24) & 255, (i >> 16) & 255, (i >> 8) & 255);
-  }
-
-  Fl_XColor &xmap = fl_xmap[fl_overlay][i];
-  if (xmap.mapped) return xmap.pixel;
-
-  if (!beenhere) figure_out_visual();
-
-  uchar r,g,b;
-  {unsigned c = fl_cmap[i]; r=uchar(c>>24); g=uchar(c>>16); b=uchar(c>>8);}
-
-#  if USE_COLORMAP
-  Colormap colormap = fl_colormap;
-#    if HAVE_OVERLAY
-  if (fl_overlay) colormap = fl_overlay_colormap; else
-#    endif
-  if (fl_redmask) {
-#  endif
-    // return color for a truecolor visual:
-    xmap.mapped = 2; // 2 prevents XFreeColor from being called
-    xmap.r = realcolor(r, fl_redmask);
-    xmap.g = realcolor(g, fl_greenmask);
-    xmap.b = realcolor(b, fl_bluemask);
-    return xmap.pixel = 
-      (((r&fl_redmask) << fl_redshift)+
-       ((g&fl_greenmask)<<fl_greenshift)+
-       ((b&fl_bluemask)<< fl_blueshift)
-       ) >> fl_extrashift;
-#  if USE_COLORMAP
-  }
-#    if HAVE_OVERLAY
-  static XColor* ac[2];
-  XColor*& allcolors = ac[fl_overlay];
-  static int nc[2];
-  int& numcolors = nc[fl_overlay];
-#    else
-  static XColor *allcolors;
-  static int numcolors;
-#    endif
-
-  // I don't try to allocate colors with XAllocColor once it fails
-  // with any color.  It is possible that it will work, since a color
-  // may have been freed, but some servers are extremely slow and this
-  // avoids one round trip:
-  if (!numcolors) { // don't try after a failure
-    XColor xcol;
-    xcol.red = r<<8; xcol.green = g<<8; xcol.blue = b<<8;
-    if (XAllocColor(fl_display, colormap, &xcol)) {
-      xmap.mapped = 1;
-      xmap.r = xcol.red>>8;
-      xmap.g = xcol.green>>8;
-      xmap.b = xcol.blue>>8;
-      return xmap.pixel = xcol.pixel;
-    }
-
-    // I only read the colormap once.  Again this is due to the slowness
-    // of round-trips to the X server, even though other programs may alter
-    // the colormap after this and make decisions here wrong.
-#    if HAVE_OVERLAY
-    if (fl_overlay) numcolors = fl_overlay_visual->colormap_size; else
-#    endif
-      numcolors = fl_visual->colormap_size;
-    if (!allcolors) allcolors = new XColor[numcolors];
-    for (int p = numcolors; p--;) allcolors[p].pixel = p;
-    XQueryColors(fl_display, colormap, allcolors, numcolors);
-  }
-
-  // find least-squares match:
-  int mindist = 0x7FFFFFFF;
-  unsigned int bestmatch = 0;
-  for (unsigned int n = numcolors; n--;) {
-#    if HAVE_OVERLAY
-    if (fl_overlay && n == fl_transparent_pixel) continue;
-#    endif
-    XColor &a = allcolors[n];
-    int d, t;
-    t = int(r)-int(a.red>>8); d = t*t;
-    t = int(g)-int(a.green>>8); d += t*t;
-    t = int(b)-int(a.blue>>8); d += t*t;
-    if (d <= mindist) {bestmatch = n; mindist = d;}
-  }
-  XColor &p = allcolors[bestmatch];
-
-  // It appears to "work" to not call this XAllocColor, which will
-  // avoid another round-trip to the server.  But then X does not
-  // know that this program "owns" this value, and can (and will)
-  // change it when the program that did allocate it exits:
-  if (XAllocColor(fl_display, colormap, &p)) {
-    xmap.mapped = 1;
-    xmap.pixel = p.pixel;
-  } else {
-    // However, if that XAllocColor fails, I have to give up and
-    // assume the pixel is ok for the duration of the program.  This
-    // is due to bugs (?) in the Solaris X and some X terminals
-    // where XAllocColor *always* fails when the colormap is full,
-    // even if we ask for a color already in it...
-    xmap.mapped = 2; // 2 prevents XFreeColor from being called
-    xmap.pixel = bestmatch;
-  }
-  xmap.r = p.red>>8;
-  xmap.g = p.green>>8;
-  xmap.b = p.blue>>8;
-  return xmap.pixel;
-#  endif
-}
-
-/**
-  Free color \p i if used, and clear mapping table entry.
-  \param[in] i color index
-  \param[in] overlay 0 for normal, 1 for overlay color
-*/
-void Fl::free_color(Fl_Color i, int overlay) {
-#  if HAVE_OVERLAY
-#  else
-  if (overlay) return;
-#  endif
-  if (fl_xmap[overlay][i].mapped) {
-#  if USE_COLORMAP
-#    if HAVE_OVERLAY
-    Colormap colormap = overlay ? fl_overlay_colormap : fl_colormap;
-#    else
-    Colormap colormap = fl_colormap;
-#    endif
-    if (fl_xmap[overlay][i].mapped == 1)
-      XFreeColors(fl_display, colormap, &(fl_xmap[overlay][i].pixel), 1, 0);
-#  endif
-    fl_xmap[overlay][i].mapped = 0;
-  }
-}
-
-/**
-  Set color mapping table entry \p i to color \p c
-  \param[in] i color index
-  \param[in] c color
-*/
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    free_color(i,0);
-#  if HAVE_OVERLAY
-    free_color(i,1);
-#  endif
-    fl_cmap[i] = c;
-  }
-}
-
-#endif // end of X-specific code
-/**
-    Returns the RGB value(s) for the given FLTK color index.
-    
-    This form returns the RGB values packed in a 32-bit unsigned
-    integer with the red value in the upper 8 bits, the green value
-    in the next 8 bits, and the blue value in bits 8-15.  The lower
-    8 bits will always be 0.
-*/
-unsigned Fl::get_color(Fl_Color i) {
-  if (i & 0xffffff00) return (i);
-  else return fl_cmap[i];
-}
-/**
-    Sets an entry in the fl_color index table.  You can set it to
-    any 8-bit RGB color.  The color is not allocated until fl_color(i)
-    is used.
-*/
-void Fl::set_color(Fl_Color i, uchar red, uchar green, uchar blue) {
-  Fl::set_color((Fl_Color)(i & 255),
-	((unsigned)red<<24)+((unsigned)green<<16)+((unsigned)blue<<8));
-}
-/**
-    Returns the RGB value(s) for the given FLTK color index. 
-    
-    This form returns the red, green, and blue values
-    separately in referenced variables.
-
-    See also unsigned get_color(Fl_Color c)
- */
-void Fl::get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue) {
-  unsigned c;
-
-  if (i & 0xffffff00) c = (unsigned)i;
-  else c = fl_cmap[i];
-
-  red   = uchar(c>>24);
-  green = uchar(c>>16);
-  blue  = uchar(c>>8);
-}
-
-/**
-  Returns the weighted average color between the two given colors.
-  The red, green and blue values are averages using the following formula:
-  \code
-  color = color1 * weight  + color2 * (1 - weight)
-  \endcode
-  Thus, a \p weight value of 1.0 will return the first color, while a
-  value of 0.0 will return the second color.
-  \param[in] color1, color2 boundary colors
-  \param[in] weight weighting factor
-*/
-Fl_Color fl_color_average(Fl_Color color1, Fl_Color color2, float weight) {
-  unsigned rgb1;
-  unsigned rgb2;
-  uchar r, g, b;
-
-  if (color1 & 0xffffff00) rgb1 = color1;
-  else rgb1 = fl_cmap[color1 & 255];
-
-  if (color2 & 0xffffff00) rgb2 = color2;
-  else rgb2 = fl_cmap[color2 & 255];
-
-  r = (uchar)(((uchar)(rgb1>>24))*weight + ((uchar)(rgb2>>24))*(1-weight));
-  g = (uchar)(((uchar)(rgb1>>16))*weight + ((uchar)(rgb2>>16))*(1-weight));
-  b = (uchar)(((uchar)(rgb1>>8))*weight + ((uchar)(rgb2>>8))*(1-weight));
-
-  return fl_rgb_color(r, g, b);
-}
-
-/**
-  Returns the inactive, dimmed version of the given color
-*/
-Fl_Color fl_inactive(Fl_Color c) {
-  return fl_color_average(c, FL_GRAY, .33f);
-}
-
-/**
-  Returns a color that contrasts with the background color.
-  This will be the foreground color if it contrasts sufficiently with the
-  background color. Otherwise, returns \p FL_WHITE or \p FL_BLACK depending
-  on which color provides the best contrast.
-  \param[in] fg,bg foreground and background colors
-  \return contrasting color
-*/
-Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) {
-  unsigned c1, c2;	// RGB colors
-  int l1, l2;		// Luminosities
-
-
-  // Get the RGB values for each color...
-  if (fg & 0xffffff00) c1 = (unsigned)fg;
-  else c1 = fl_cmap[fg];
-
-  if (bg & 0xffffff00) c2 = (unsigned)bg;
-  else c2 = fl_cmap[bg];
-
-  // Compute the luminosity...
-  l1 = ((c1 >> 24) * 30 + ((c1 >> 16) & 255) * 59 + ((c1 >> 8) & 255) * 11) / 100;
-  l2 = ((c2 >> 24) * 30 + ((c2 >> 16) & 255) * 59 + ((c2 >> 8) & 255) * 11) / 100;
-
-  // Compare and return the contrasting color...
-  if ((l1 - l2) > 99) return fg;
-  else if ((l2 - l1) > 99) return fg;
-  else if (l2 > 127) return FL_BLACK;
-  else return FL_WHITE;
-}
-/**
-   @}
-*/
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_color_mac.cxx
+++ /dev/null
@@ -1,79 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The fltk "colormap".  This allows ui colors to be stored in 8-bit
-// locations, and provides a level of indirection so that global color
-// changes can be made.  Not to be confused with the X colormap, which
-// I try to hide completely.
-
-// matt: Neither Quartz nor Quickdraw support colormaps in this implementation
-// matt: Quartz support done
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-void Fl_Quartz_Graphics_Driver::color(Fl_Color i) {
-  Fl_Graphics_Driver::color(i);
-  int index;
-  uchar r, g, b;
-  if (i & 0xFFFFFF00) {
-    // translate rgb colors into color index
-    r = i>>24;
-    g = i>>16;
-    b = i>> 8;
-  } else {
-    // translate index into rgb:
-    index = i;
-    unsigned c = fl_cmap[i];
-    r = c>>24;
-    g = c>>16;
-    b = c>> 8;
-  }
-  if (!fl_gc) return; // no context yet? We will assign the color later.
-  float fr = r/255.0f;
-  float fg = g/255.0f;
-  float fb = b/255.0f;
-  CGContextSetRGBFillColor(fl_gc, fr, fg, fb, 1.0f);
-  CGContextSetRGBStrokeColor(fl_gc, fr, fg, fb, 1.0f);
-}
-
-void Fl_Quartz_Graphics_Driver::color(uchar r, uchar g, uchar b) {
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  float fr = r/255.0f;
-  float fg = g/255.0f;
-  float fb = b/255.0f;
-  if (!fl_gc) return; // no context yet? We will assign the color later.
-  CGContextSetRGBFillColor(fl_gc, fr, fg, fb, 1.0f);
-  CGContextSetRGBStrokeColor(fl_gc, fr, fg, fb, 1.0f);
-}
-
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    fl_cmap[i] = c;
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_color_win32.cxx
+++ /dev/null
@@ -1,243 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 color functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// The fltk "colormap".  This allows ui colors to be stored in 8-bit
-// locations, and provides a level of indirection so that global color
-// changes can be made.  Not to be confused with the X colormap, which
-// I try to hide completely.
-
-// SGI compiler seems to have problems with unsigned char arguments
-// being used to index arrays.  So I always copy them to an integer
-// before use.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-static unsigned fl_cmap[256] = {
-#include "fl_cmap.h" // this is a file produced by "cmap.cxx":
-};
-
-// Translations to win32 data structures:
-Fl_XMap fl_xmap[256];
-
-Fl_XMap* fl_current_xmap;
-
-HPALETTE fl_palette;
-static HGDIOBJ tmppen=0;
-static HPEN savepen=0;
-
-void fl_cleanup_pens(void) {
-  for (int i=0; i<256; i++) {
-    if (fl_xmap[i].pen) DeleteObject(fl_xmap[i].pen);
-  }
-}
-
-void fl_save_pen(void) {
-    if(!tmppen) tmppen = CreatePen(PS_SOLID, 1, 0);
-    savepen = (HPEN)SelectObject(fl_gc, tmppen);
-}
-
-void fl_restore_pen(void) {
-    if (savepen) SelectObject(fl_gc, savepen);
-    DeleteObject(tmppen);
-    tmppen = 0;
-    savepen = 0;
-}
-
-static void clear_xmap(Fl_XMap& xmap) {
-  if (xmap.pen) {
-    HGDIOBJ tmppen = GetStockObject(BLACK_PEN);
-    HGDIOBJ oldpen = SelectObject(fl_gc, tmppen);       // Push out the current pen of the gc
-    if(oldpen != xmap.pen) SelectObject(fl_gc, oldpen); // Put it back if it is not the one we are about to delete
-    DeleteObject((HGDIOBJ)(xmap.pen));
-    xmap.pen = 0;
-    xmap.brush = -1;
-  }
-}
-
-static void set_xmap(Fl_XMap& xmap, COLORREF c) {
-  xmap.rgb = c;
-  if (xmap.pen) {
-      HGDIOBJ oldpen = SelectObject(fl_gc,GetStockObject(BLACK_PEN)); // replace current pen with safe one
-      if (oldpen != xmap.pen)SelectObject(fl_gc,oldpen);              // if old one not xmap.pen, need to put it back
-      DeleteObject(xmap.pen);                                         // delete pen
-  }
-  xmap.pen = CreatePen(PS_SOLID, 1, xmap.rgb);                        // get a pen into xmap.pen
-  xmap.brush = -1;
-}
-
-void Fl_GDI_Graphics_Driver::color(Fl_Color i) {
-  if (i & 0xffffff00) {
-    unsigned rgb = (unsigned)i;
-    fl_color((uchar)(rgb >> 24), (uchar)(rgb >> 16), (uchar)(rgb >> 8));
-  } else {
-    Fl_Graphics_Driver::color(i);
-    Fl_XMap &xmap = fl_xmap[i];
-    if (!xmap.pen) {
-#if USE_COLORMAP
-      if (fl_palette) {
-	set_xmap(xmap, PALETTEINDEX(i));
-      } else {
-#endif
-	unsigned c = fl_cmap[i];
-	set_xmap(xmap, RGB(uchar(c>>24), uchar(c>>16), uchar(c>>8)));
-#if USE_COLORMAP
-      }
-#endif
-    }
-    fl_current_xmap = &xmap;
-    SelectObject(fl_gc, (HGDIOBJ)(xmap.pen));
-  }
-}
-
-void Fl_GDI_Graphics_Driver::color(uchar r, uchar g, uchar b) {
-  static Fl_XMap xmap;
-  COLORREF c = RGB(r,g,b);
-  Fl_Graphics_Driver::color( fl_rgb_color(r, g, b) );
-  if (!xmap.pen || c != xmap.rgb) {
-    clear_xmap(xmap);
-    set_xmap(xmap, c);
-  }
-  fl_current_xmap = &xmap;
-  SelectObject(fl_gc, (HGDIOBJ)(xmap.pen));
-}
-
-HBRUSH fl_brush() {
-  return fl_brush_action(0);
-}
-
-HBRUSH fl_brush_action(int action) {
-  Fl_XMap *xmap = fl_current_xmap;
-  // Wonko: we use some statistics to cache only a limited number
-  // of brushes:
-#define FL_N_BRUSH 16
-  static struct Fl_Brush {
-    HBRUSH brush;
-    unsigned short usage;
-    Fl_XMap* backref;
-  } brushes[FL_N_BRUSH];
-
-  if (action) {
-    SelectObject(fl_gc, GetStockObject(BLACK_BRUSH));  // Load stock object
-    for (int i=0; i<FL_N_BRUSH; i++) {
-      if (brushes[i].brush)
-        DeleteObject(brushes[i].brush); // delete all brushes in array
-    }
-    return NULL;
-  }
-
-  int i = xmap->brush; // find the associated brush
-  if (i != -1) { // if the brush was allready allocated
-    if (brushes[i].brush == NULL) goto CREATE_BRUSH;
-    if ( (++brushes[i].usage) > 32000 ) { // keep a usage statistic
-      for (int j=0; j<FL_N_BRUSH; j++) {
-	if (brushes[j].usage>16000)
-	  brushes[j].usage -= 16000;
-	else 
-	  brushes[j].usage = 0;
-      }
-    }
-    return brushes[i].brush;
-  } else {
-    int umin = 32000, imin = 0;
-    for (i=0; i<FL_N_BRUSH; i++) {
-      if (brushes[i].brush == NULL) goto CREATE_BRUSH;
-      if (brushes[i].usage<umin) {
-	umin = brushes[i].usage;
-	imin = i;
-      }
-    }
-    i = imin;
-    HGDIOBJ tmpbrush = GetStockObject(BLACK_BRUSH);  // get a stock brush
-    HGDIOBJ oldbrush = SelectObject(fl_gc,tmpbrush); // load in into current context
-    if (oldbrush != brushes[i].brush) SelectObject(fl_gc,oldbrush);  // reload old one
-    DeleteObject(brushes[i].brush);      // delete the one in list
-    brushes[i].brush = NULL;
-    brushes[i].backref->brush = -1;
-  }
-CREATE_BRUSH:
-  brushes[i].brush = CreateSolidBrush(xmap->rgb);
-  brushes[i].usage = 0;
-  brushes[i].backref = xmap;
-  xmap->brush = i;
-  return brushes[i].brush;
-}
-
-void Fl::free_color(Fl_Color i, int overlay) {
-  if (overlay) return; // do something about GL overlay?
-  clear_xmap(fl_xmap[i]);
-}
-
-void Fl::set_color(Fl_Color i, unsigned c) {
-  if (fl_cmap[i] != c) {
-    clear_xmap(fl_xmap[i]);
-    fl_cmap[i] = c;
-  }
-}
-
-#if USE_COLORMAP
-
-// 'fl_select_palette()' - Make a color palette for 8-bit displays if necessary
-// Thanks to Michael Sweet @ Easy Software Products for this
-
-HPALETTE
-fl_select_palette(void)
-{
-  static char beenhere;
-  if (!beenhere) {
-    beenhere = 1;
-
-    //if (GetDeviceCaps(fl_gc, BITSPIXEL) > 8) return NULL;
-    int nColors = GetDeviceCaps(fl_gc, SIZEPALETTE);
-    if (nColors <= 0 || nColors > 256) return NULL;
-    // this will try to work on < 256 color screens, but will probably
-    // come out quite badly.
-
-    // I lamely try to get this variable-sized object allocated on stack:
-    ulong foo[(sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY))/sizeof(ulong)+1];
-    LOGPALETTE *pPal = (LOGPALETTE*)foo;
-
-    pPal->palVersion    = 0x300;
-    pPal->palNumEntries = nColors;
-
-    // Build 256 colors from the standard FLTK colormap...
-
-    for (int i = 0; i < nColors; i ++) {
-      pPal->palPalEntry[i].peRed   = (fl_cmap[i] >> 24) & 255;
-      pPal->palPalEntry[i].peGreen = (fl_cmap[i] >> 16) & 255;
-      pPal->palPalEntry[i].peBlue  = (fl_cmap[i] >>  8) & 255;
-      pPal->palPalEntry[i].peFlags = 0;
-    };
-
-    // Create the palette:
-    fl_palette = CreatePalette(pPal);
-  }
-  if (fl_palette) {
-    SelectPalette(fl_gc, fl_palette, FALSE);
-    RealizePalette(fl_gc);
-  }
-  return fl_palette;
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_cursor.cxx
+++ /dev/null
@@ -1,196 +1,0 @@
-//
-// "$Id$"
-//
-// Mouse cursor support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Change the current cursor.
-// Under X the cursor is attached to the X window.  I tried to hide
-// this and pretend that changing the cursor is a drawing function.
-// This avoids a field in the Fl_Window, and I suspect is more
-// portable to other systems.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_RGB_Image.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-#include "fl_cursor_wait.xpm"
-#include "fl_cursor_help.xpm"
-#include "fl_cursor_nwse.xpm"
-#include "fl_cursor_nesw.xpm"
-#include "fl_cursor_none.xpm"
-
-/**
-  Sets the cursor for the current window to the specified shape and colors.
-  The cursors are defined in the <FL/Enumerations.H> header file. 
-  */
-void fl_cursor(Fl_Cursor c) {
-  if (Fl::first_window()) Fl::first_window()->cursor(c);
-}
-
-/* For back compatibility only. */
-void fl_cursor(Fl_Cursor c, Fl_Color fg, Fl_Color bg) {
-  fl_cursor(c);
-}
-
-
-/** 
-    Sets the default window cursor. This is the cursor that will be used
-    after the mouse pointer leaves a widget with a custom cursor set.
-
-    \see cursor(const Fl_RGB_Image*, int, int), default_cursor()
-*/
-void Fl_Window::default_cursor(Fl_Cursor c) {
-  cursor_default = c;
-  cursor(c);
-}
-
-
-static void fallback_cursor(Fl_Window *w, Fl_Cursor c) {
-  const char **xpm;
-  int hotx, hoty;
-
-  // The standard arrow is our final fallback, so something is broken
-  // if we get called back here with that as an argument.
-  if (c == FL_CURSOR_ARROW)
-    return;
-
-  switch (c) {
-  case FL_CURSOR_WAIT:
-    xpm = (const char**)fl_cursor_wait_xpm;
-    hotx = 7;
-    hoty = 9;
-    break;
-  case FL_CURSOR_HELP:
-    xpm = (const char**)fl_cursor_help_xpm;
-    hotx = 1;
-    hoty = 3;
-    break;
-  case FL_CURSOR_NWSE:
-    xpm = (const char**)fl_cursor_nwse_xpm;
-    hotx = 7;
-    hoty = 7;
-    break;
-  case FL_CURSOR_NESW:
-    xpm = (const char**)fl_cursor_nesw_xpm;
-    hotx = 7;
-    hoty = 7;
-    break;
-  case FL_CURSOR_NONE:
-    xpm = (const char**)fl_cursor_none_xpm;
-    hotx = 0;
-    hoty = 0;
-    break;
-  default:
-    w->cursor(FL_CURSOR_ARROW);
-    return;
-  }
-
-  Fl_Pixmap pxm(xpm);
-  Fl_RGB_Image image(&pxm);
-
-  w->cursor(&image, hotx, hoty);
-}
-
-
-void Fl_Window::cursor(Fl_Cursor c) {
-  int ret;
-
-  // the cursor must be set for the top level window, not for subwindows
-  Fl_Window *w = window(), *toplevel = this;
-
-  while (w) {
-    toplevel = w;
-    w = w->window();
-  }
-
-  if (toplevel != this) {
-    toplevel->cursor(c);
-    return;
-  }
-
-  if (c == FL_CURSOR_DEFAULT)
-    c = cursor_default;
-
-  if (!i)
-    return;
-
-  ret = i->set_cursor(c);
-  if (ret)
-    return;
-
-  fallback_cursor(this, c);
-}
-
-/**
-  Changes the cursor for this window.  This always calls the system, if
-  you are changing the cursor a lot you may want to keep track of how
-  you set it in a static variable and call this only if the new cursor
-  is different.
-
-  The default cursor will be used if the provided image cannot be used
-  as a cursor.
-
-  \see cursor(Fl_Cursor), default_cursor()
-*/
-void Fl_Window::cursor(const Fl_RGB_Image *image, int hotx, int hoty) {
-  int ret;
-
-  // the cursor must be set for the top level window, not for subwindows
-  Fl_Window *w = window(), *toplevel = this;
-
-  while (w) {
-    toplevel = w;
-    w = w->window();
-  }
-
-  if (toplevel != this) {
-    toplevel->cursor(image, hotx, hoty);
-    return;
-  }
-
-  if (!i)
-    return;
-
-  ret = i->set_cursor(image, hotx, hoty);
-  if (ret)
-    return;
-
-  cursor(FL_CURSOR_DEFAULT);
-}
-
-/**
- For back compatibility only.
- Same as Fl_Window::cursor(Fl_Cursor) 
-*/
-void Fl_Window::cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
-  cursor(c);
-};
-
-/** 
- For back compatibility only.
- same as Fl_Window::default_cursor(Fl_Cursor) 
-*/
-void Fl_Window::default_cursor(Fl_Cursor c, Fl_Color, Fl_Color) {
-  default_cursor(c);
-};
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_cursor_help.xpm
+++ /dev/null
@@ -1,39 +1,0 @@
-/* XPM */
-static const char * const fl_cursor_help_xpm[] = {
-"16 27 9 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #DBDBDB",
-"@	c #242424",
-"#	c #000000",
-"$	c #494949",
-"%	c #6D6D6D",
-"&	c #929292",
-"*	c #B6B6B6",
-"                ",
-".               ",
-".+              ",
-".@+             ",
-".#@+            ",
-".##@.           ",
-".###@.          ",
-".####@.         ",
-".#####$.        ",
-".######$.       ",
-".#######$.      ",
-".#####@@@%.     ",
-".#####+.....    ",
-".##$%#%.        ",
-".#$..@#.        ",
-".$. .&#%.       ",
-"..   .##. ....  ",
-".    .&#.+%$%&. ",
-"      ...*#@##%.",
-"         ++.*#@.",
-"           .%#$.",
-"          .%#@. ",
-"          .##+  ",
-"          .++.  ",
-"          +##.  ",
-"          +##.  ",
-"          ....  "};
--- a/DoConfig/fltk/src/fl_cursor_nesw.xpm
+++ /dev/null
@@ -1,46 +1,0 @@
-/* XPM */
-static const char * const fl_cursor_nesw_xpm[] = {
-"15 15 28 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #767676",
-"@	c #000000",
-"#	c #4E4E4E",
-"$	c #0C0C0C",
-"%	c #494949",
-"&	c #4D4D4D",
-"*	c #1B1B1B",
-"=	c #515151",
-"-	c #646464",
-";	c #363636",
-">	c #6A6A6A",
-",	c #545454",
-"'	c #585858",
-")	c #242424",
-"!	c #797979",
-"~	c #2E2E2E",
-"{	c #444444",
-"]	c #3B3B3B",
-"^	c #0A0A0A",
-"/	c #595959",
-"(	c #F7F7F7",
-"_	c #080808",
-":	c #6B6B6B",
-"<	c #FDFDFD",
-"[	c #FCFCFC",
-"}	c #FEFEFE",
-"     ..........",
-"      .+@@@@@@.",
-"       .#@@@@@.",
-"        .$@@@@.",
-"       .%@@@@@.",
-".     .&@@@*@@.",
-"..   .=@@@-.;@.",
-".>. .,@@@'. .).",
-".@!.'@@@#.   ..",
-".@@~@@@{.     .",
-".@@@@@].       ",
-".@@@@^.        ",
-".@@@@@/(       ",
-".______:(      ",
-"<[[[[[[[[}     "};
--- a/DoConfig/fltk/src/fl_cursor_none.xpm
+++ /dev/null
@@ -1,19 +1,0 @@
-/* XPM */
-static const char * const fl_cursor_none_xpm[] = {
-"15 15 1 1",
-" 	c None",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               ",
-"               "};
--- a/DoConfig/fltk/src/fl_cursor_nwse.xpm
+++ /dev/null
@@ -1,46 +1,0 @@
-/* XPM */
-static const char * const fl_cursor_nwse_xpm[] = {
-"15 15 28 1",
-" 	c None",
-".	c #FFFFFF",
-"+	c #000000",
-"@	c #767676",
-"#	c #4E4E4E",
-"$	c #0C0C0C",
-"%	c #494949",
-"&	c #1B1B1B",
-"*	c #4D4D4D",
-"=	c #363636",
-"-	c #646464",
-";	c #515151",
-">	c #242424",
-",	c #585858",
-"'	c #545454",
-")	c #6A6A6A",
-"!	c #797979",
-"~	c #444444",
-"{	c #2E2E2E",
-"]	c #3B3B3B",
-"^	c #0A0A0A",
-"/	c #F7F7F7",
-"(	c #595959",
-"_	c #6B6B6B",
-":	c #080808",
-"<	c #FEFEFE",
-"[	c #FCFCFC",
-"}	c #FDFDFD",
-"..........     ",
-".++++++@.      ",
-".+++++#.       ",
-".++++$.        ",
-".+++++%.       ",
-".++&+++*.     .",
-".+=.-+++;.   ..",
-".>. .,+++'. .).",
-"..   .#+++,.!+.",
-".     .~+++{++.",
-"       .]+++++.",
-"        .^++++.",
-"       /(+++++.",
-"      /_::::::.",
-"     <[[[[[[[[}"};
--- a/DoConfig/fltk/src/fl_cursor_wait.xpm
+++ /dev/null
@@ -1,28 +1,0 @@
-/* XPM */
-static const char * const fl_cursor_wait_xpm[] = {
-/* width height ncolors chars_per_pixel */
-"13 18 3 1",
-/* colors */
-"  c None",
-". c #FFFFFF",
-"B c #000000",
-/* pixels */
-"  ........   ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-" .B......B.  ",
-".B....B...B. ",
-".B....B...B. ",
-".B....B...BB.",
-".B.BBBB...BB.",
-".B........B. ",
-".B........B. ",
-" .B......B.  ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-"  .BBBBBB.   ",
-"  ........   ",
-};
--- a/DoConfig/fltk/src/fl_curve.cxx
+++ /dev/null
@@ -1,101 +1,0 @@
-//
-// "$Id$"
-//
-// Bezier curve functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_curve.cxx
-  \brief Utility for drawing Bezier curves, adding the points to the
-         current fl_begin/fl_vertex/fl_end path.
-
-  Incremental math implementation:
-  I very much doubt this is optimal!  From Foley/vanDam page 511.
-  If anybody has a better algorithm, please send it!
-*/
-
-#include <FL/fl_draw.H>
-#include <math.h>
-
-void Fl_Graphics_Driver::curve(double X0, double Y0,
-	      double X1, double Y1,
-	      double X2, double Y2,
-	      double X3, double Y3) {
-
-  double x = fl_transform_x(X0,Y0);
-  double y = fl_transform_y(X0,Y0);
-
-  // draw point 0:
-  fl_transformed_vertex(x,y);
-
-  double x1 = fl_transform_x(X1,Y1);
-  double yy1 = fl_transform_y(X1,Y1);
-  double x2 = fl_transform_x(X2,Y2);
-  double y2 = fl_transform_y(X2,Y2);
-  double x3 = fl_transform_x(X3,Y3);
-  double y3 = fl_transform_y(X3,Y3);
-
-  // find the area:
-  double a = fabs((x-x2)*(y3-yy1)-(y-y2)*(x3-x1));
-  double b = fabs((x-x3)*(y2-yy1)-(y-y3)*(x2-x1));
-  if (b > a) a = b;
-
-  // use that to guess at the number of segments:
-  int n = int(sqrt(a)/4);
-  if (n > 1) {
-    if (n > 100) n = 100; // make huge curves not hang forever
-
-    double e = 1.0/n;
-
-    // calculate the coefficients of 3rd order equation:
-    double xa = (x3-3*x2+3*x1-x);
-    double xb = 3*(x2-2*x1+x);
-    double xc = 3*(x1-x);
-    // calculate the forward differences:
-    double dx1 = ((xa*e+xb)*e+xc)*e;
-    double dx3 = 6*xa*e*e*e;
-    double dx2 = dx3 + 2*xb*e*e;
-
-    // calculate the coefficients of 3rd order equation:
-    double ya = (y3-3*y2+3*yy1-y);
-    double yb = 3*(y2-2*yy1+y);
-    double yc = 3*(yy1-y);
-    // calculate the forward differences:
-    double dy1 = ((ya*e+yb)*e+yc)*e;
-    double dy3 = 6*ya*e*e*e;
-    double dy2 = dy3 + 2*yb*e*e;
-
-    // draw points 1 .. n-2:
-    for (int m=2; m<n; m++) {
-      x += dx1;
-      dx1 += dx2;
-      dx2 += dx3;
-      y += dy1;
-      dy1 += dy2;
-      dy2 += dy3;
-      fl_transformed_vertex(x,y);
-    }
-
-    // draw point n-1:
-    fl_transformed_vertex(x+dx1, y+dy1);
-  }
-
-  // draw point n:
-  fl_transformed_vertex(x3,y3);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_diamond_box.cxx
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Diamond box code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-// The diamond box draws best if the area is square!
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-extern const uchar* fl_gray_ramp();
-
-static void fl_diamond_up_box(int x,int y,int w,int h,Fl_Color bgcolor) {
-  w &= -2;
-  h &= -2;
-  int x1 = x+w/2;
-  int y1 = y+h/2;
-  Fl::set_box_color(bgcolor);
-  fl_polygon(x+3, y1, x1,y+3, x+w-3,y1, x1,y+h-3);
-  const uchar *g = fl_gray_ramp();
-  fl_color(g[(int)'W']); fl_line(x+1, y1, x1, y+1, x+w-1, y1);
-  fl_color(g[(int)'U']); fl_line(x+2, y1, x1, y+2, x+w-2, y1);
-  fl_color(g[(int)'S']); fl_line(x+3, y1, x1, y+3, x+w-3, y1);
-  fl_color(g[(int)'P']); fl_line(x+3, y1, x1, y+h-3, x+w-3, y1);
-  fl_color(g[(int)'N']); fl_line(x+2, y1, x1, y+h-2, x+w-2, y1);
-  fl_color(g[(int)'H']); fl_line(x+1, y1, x1, y+h-1, x+w-1, y1);
-  fl_color(g[(int)'A']); fl_loop(x, y1, x1, y, x+w, y1, x1, y+h);
-}
-
-static void fl_diamond_down_box(int x,int y,int w,int h,Fl_Color bgcolor) {
-  w &= -2;
-  h &= -2;
-  int x1 = x+w/2;
-  int y1 = y+h/2;
-  const uchar *g = fl_gray_ramp();
-  fl_color(g[(int)'P']); fl_line(x+0, y1, x1, y+0, x+w-0, y1);
-  fl_color(g[(int)'N']); fl_line(x+1, y1, x1, y+1, x+w-1, y1);
-  fl_color(g[(int)'H']); fl_line(x+2, y1, x1, y+2, x+w-2, y1);
-  fl_color(g[(int)'W']); fl_line(x+2, y1, x1, y+h-2, x+w-2, y1);
-  fl_color(g[(int)'U']); fl_line(x+1, y1, x1, y+h-1, x+w-1, y1);
-  fl_color(g[(int)'S']); fl_line(x+0, y1, x1, y+h-0, x+w-0, y1);
-  Fl::set_box_color(bgcolor);
-  fl_polygon(x+3, y1, x1,y+3, x+w-3,y1, x1,y+h-3);
-  fl_color(g[(int)'A']); fl_loop(x+3, y1, x1, y+3, x+w-3, y1, x1, y+h-3);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_DIAMOND_BOX() {
-  fl_internal_boxtype(_FL_DIAMOND_DOWN_BOX, fl_diamond_down_box);
-  fl_internal_boxtype(_FL_DIAMOND_UP_BOX,fl_diamond_up_box);
-  return _FL_DIAMOND_UP_BOX;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_dnd.cxx
+++ /dev/null
@@ -1,29 +1,0 @@
-//
-// "$Id$"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-#  include "fl_dnd_win32.cxx"
-#elif defined(__APPLE__)
-//#  include "fl_dnd_mac.cxx"
-#else
-#  include "fl_dnd_x.cxx"
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_dnd_win32.cxx
+++ /dev/null
@@ -1,564 +1,0 @@
-//
-// "$Id$"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This file contains win32-specific code for fltk which is always linked
-// in.  Search other files for "WIN32" or filenames ending in _win32.cxx
-// for other system-specific code.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_utf8.h>
-#include "flstring.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <objidl.h>
-#include <time.h>
-#if defined(__CYGWIN__)
-#include <sys/time.h>
-#include <unistd.h>
-#endif
-
-extern char *fl_selection_buffer[2];
-extern int fl_selection_length[2];
-extern int fl_selection_buffer_length[2];
-extern char fl_i_own_selection[2];
-extern char *fl_locale2utf8(const char *s, UINT codepage = 0);
-extern unsigned int fl_codepage;
-
-Fl_Window *fl_dnd_target_window = 0;
-
-#include <ole2.h>
-#include <shellapi.h>
-#include <shlobj.h>
-
-
-/**
- * subclass the IDropTarget to receive data from DnD operations
- */
-class FLDropTarget : public IDropTarget
-{
-  DWORD m_cRefCount;
-  DWORD lastEffect;
-  int px, py;
-public:
-  FLDropTarget() : m_cRefCount(0) { } // initialize
-  virtual ~FLDropTarget() { }
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDropTarget==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  HRESULT STDMETHODCALLTYPE DragEnter( IDataObject *pDataObj, DWORD /*grfKeyState*/, POINTL pt, DWORD *pdwEffect) {
-    if( !pDataObj ) return E_INVALIDARG;
-    /* Tricky point here: Not DPI-aware applications use different units for the 'POINTL pt' argument
-     of the DragEnter, DragOver, and Drop member functions.
-     DragEnter receives the mouse coordinates in unscaled screen units,
-     whereas DragOver and Drop receive the mouse coordinates in scaled units.
-     This looks like a Windows bug because these apps are supposed to always receive
-     scaled units from the OS.
-     Therefore, we ask here for the mouse coordinates.
-    */
-    POINT mp;
-    GetCursorPos(&mp);
-    pt.x = mp.x; pt.y = mp.y;
-    
-    // set e_modifiers here from grfKeyState, set e_x and e_root_x
-    // check if FLTK handles this drag and return if it can't (i.e. BMP drag without filename)
-    POINT ppt;
-    Fl::e_x_root = ppt.x = pt.x;
-    Fl::e_y_root = ppt.y = pt.y;
-    HWND hWnd = WindowFromPoint( ppt );
-    Fl_Window *target = fl_find( hWnd );
-    if (target) {
-      Fl::e_x = Fl::e_x_root-target->x();
-      Fl::e_y = Fl::e_y_root-target->y();
-    }
-    fl_dnd_target_window = target;
-    px = pt.x; py = pt.y;
-    if (fillCurrentDragData(pDataObj)) {
-      // FLTK has no mechanism yet for the different drop effects, so we allow move and copy
-      if ( target && Fl::handle( FL_DND_ENTER, target ) )
-        *pdwEffect = DROPEFFECT_MOVE|DROPEFFECT_COPY; //|DROPEFFECT_LINK;
-      else
-        *pdwEffect = DROPEFFECT_NONE;
-    } else {
-      *pdwEffect = DROPEFFECT_NONE;
-    }
-    lastEffect = *pdwEffect;
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE DragOver( DWORD /*grfKeyState*/, POINTL pt, DWORD *pdwEffect) {
-    if ( px==pt.x && py==pt.y )
-    {
-      *pdwEffect = lastEffect;
-      return S_OK;
-    }
-    if ( !fl_dnd_target_window )
-    {
-      *pdwEffect = lastEffect = DROPEFFECT_NONE;
-      return S_OK;
-    }
-    // set e_modifiers here from grfKeyState, set e_x and e_root_x
-    Fl::e_x_root = pt.x;
-    Fl::e_y_root = pt.y;
-    if (fl_dnd_target_window) {
-      Fl::e_x = Fl::e_x_root-fl_dnd_target_window->x();
-      Fl::e_y = Fl::e_y_root-fl_dnd_target_window->y();
-    }
-    if (fillCurrentDragData(0)) {
-      // Fl_Group will change DND_DRAG into DND_ENTER and DND_LEAVE if needed
-      if ( Fl::handle( FL_DND_DRAG, fl_dnd_target_window ) )
-        *pdwEffect = DROPEFFECT_MOVE|DROPEFFECT_COPY; //|DROPEFFECT_LINK;
-      else
-        *pdwEffect = DROPEFFECT_NONE;
-    } else {
-      *pdwEffect = DROPEFFECT_NONE;
-    }
-    px = pt.x; py = pt.y;
-    lastEffect = *pdwEffect;
-    // show insert position if dnd'ing in the same window/process (STR #3209)
-    Fl::flush();
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE DragLeave() {
-    if ( fl_dnd_target_window && fillCurrentDragData(0))
-    {
-      Fl::handle( FL_DND_LEAVE, fl_dnd_target_window );
-      fl_dnd_target_window = 0;
-      clearCurrentDragData();
-    }
-    return S_OK;
-  }
-  HRESULT STDMETHODCALLTYPE Drop( IDataObject *data, DWORD /*grfKeyState*/, POINTL pt, DWORD* /*pdwEffect*/) {
-    if ( !fl_dnd_target_window )
-      return S_OK;
-    Fl_Window *target = fl_dnd_target_window;
-    fl_dnd_target_window = 0;
-    Fl::e_x_root = pt.x;
-    Fl::e_y_root = pt.y;
-    if (target) {
-      Fl::e_x = Fl::e_x_root-target->x();
-      Fl::e_y = Fl::e_y_root-target->y();
-    }
-    // tell FLTK that the user released an object on this widget
-    if ( !Fl::handle( FL_DND_RELEASE, target ) )
-      return S_OK;
-
-    Fl_Widget *w = target;
-    while (w->parent()) w = w->window();
-    HWND hwnd = fl_xid( (Fl_Window*)w );
-    if (fillCurrentDragData(data)) {
-      int old_event = Fl::e_number;
-      char *a, *b;
-      a = b = currDragData;
-      while (*a) { // strip the CRLF pairs
-	if (*a == '\r' && a[1] == '\n') a++;
-	else *b++ = *a++;
-      }
-      *b = 0;
-      Fl::e_text = currDragData;
-      Fl::e_length = (int) (b - currDragData);
-      Fl::belowmouse()->handle(Fl::e_number = FL_PASTE); // e_text will be invalid after this call
-      Fl::e_number = old_event;
-      SetForegroundWindow( hwnd );
-      clearCurrentDragData();
-      return S_OK;
-    }
-    return S_OK;
-  }
-private:
-
-  static IDataObject *currDragRef;
-  static char *currDragData;
-  static int currDragSize;
-  static char currDragResult;
-
-  static void clearCurrentDragData() {
-    currDragRef = 0;
-    if (currDragData) free(currDragData);
-    currDragData = 0;
-    currDragSize = 0;
-    currDragResult = 0;
-  }
-  static char fillCurrentDragData(IDataObject *data) {
-    // shortcut through this whole procedure if there is no fresh data
-    if (!data) 
-      return currDragResult;
-    // shortcut through this whole procedure if this is still the same drag event
-    // (* this is safe, because 'currDragRef' is cleared on Leave and Drop events)
-    if (data==currDragRef)
-      return currDragResult;
-
-    // clear currDrag* for a new drag event
-    clearCurrentDragData();
-    
-    currDragRef = data;
-    // fill currDrag* with UTF-8 data, if available
-    FORMATETC fmt = { 0 };
-    STGMEDIUM medium = { 0 };
-    fmt.tymed = TYMED_HGLOBAL;
-    fmt.dwAspect = DVASPECT_CONTENT;
-    fmt.lindex = -1;
-    fmt.cfFormat = CF_UNICODETEXT;
-    // if it is UNICODE text, return a UTF-8-converted copy of it
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      void *stuff = GlobalLock( medium.hGlobal );
-      unsigned srclen = 0;
-      const wchar_t *wstuff = (const wchar_t *)stuff;
-      while (*wstuff++) srclen++;
-      wstuff = (const wchar_t *)stuff;
-      unsigned utf8len = fl_utf8fromwc(NULL, 0, wstuff, srclen);
-      currDragSize = utf8len;
-      currDragData = (char*)malloc(utf8len + 1);
-      fl_utf8fromwc(currDragData, currDragSize+1, wstuff, srclen+1); // include null-byte
-      GlobalUnlock( medium.hGlobal );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    fmt.cfFormat = CF_TEXT;
-    // if it is CP1252 text, return a UTF-8-converted copy of it
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      int len;
-      char *p, *q, *last;
-      unsigned u;
-      void *stuff = GlobalLock( medium.hGlobal );
-      currDragData = (char*)malloc(3 * strlen((char*)stuff) + 10);
-      p = (char*)stuff; 
-      last = p + strlen(p);
-      q = currDragData;
-      while (p < last) {
-	u = fl_utf8decode(p, last, &len);
-	p += len;
-	len = fl_utf8encode(u, q);
-	q += len;
-	}
-      *q = 0;
-      currDragSize = (int) (q - currDragData);
-      currDragData = (char*)realloc(currDragData, currDragSize + 1);
-      GlobalUnlock( medium.hGlobal );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    // else fill currDrag* with filenames, if possible
-    memset(&fmt, 0, sizeof(fmt));
-    fmt.tymed = TYMED_HGLOBAL;
-    fmt.dwAspect = DVASPECT_CONTENT;
-    fmt.lindex = -1;
-    fmt.cfFormat = CF_HDROP;
-    // if it is a pathname list, send an FL_PASTE with a \n separated list of filepaths
-    if ( data->GetData( &fmt, &medium )==S_OK )
-    {
-      HDROP hdrop = (HDROP)medium.hGlobal;
-      int i, n, nn = 0, nf = DragQueryFileW( hdrop, (UINT)-1, 0, 0 );
-        for ( i=0; i<nf; i++ ) nn += DragQueryFileW( hdrop, i, 0, 0 );
-      nn += nf;
-        xchar *dst = (xchar *)malloc(nn * sizeof(xchar));
-        xchar *bu = dst;
-      for ( i=0; i<nf; i++ ) {
-          n = DragQueryFileW( hdrop, i, (WCHAR*)dst, nn );
-          dst += n;
-          if ( i<nf-1 ) {
-            *dst++ = L'\n';
-          }
-        }
-         *dst=0;
-
-        currDragData = (char*) malloc(nn * 5 + 1);
-//      Fl::e_length = fl_unicode2utf(bu, nn, Fl::e_text);
-        currDragSize = fl_utf8fromwc(currDragData, (nn*5+1), bu, nn);
-        currDragData[currDragSize] = 0;
-        free(bu);
-
-//    Fl::belowmouse()->handle(FL_DROP);
-//      free( Fl::e_text );
-      ReleaseStgMedium( &medium );
-      currDragResult = 1;
-      return currDragResult;
-    }
-    currDragResult = 0;
-    return currDragResult;
-  }
-} flDropTarget;
-
-IDropTarget *flIDropTarget = &flDropTarget;
-
-IDataObject *FLDropTarget::currDragRef = 0;
-char *FLDropTarget::currDragData = 0;
-int FLDropTarget::currDragSize = 0;
-char FLDropTarget::currDragResult = 0;
-
-/**
- * this class is needed to allow FLTK apps to be a DnD source
- */
-class FLDropSource : public IDropSource
-{
-  DWORD m_cRefCount;
-public:
-  FLDropSource() { m_cRefCount = 0; }
-  virtual ~FLDropSource() { }
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDropSource==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  STDMETHODIMP GiveFeedback( DWORD ) { return DRAGDROP_S_USEDEFAULTCURSORS; }
-  STDMETHODIMP QueryContinueDrag( BOOL esc, DWORD keyState ) {
-    if ( esc )
-      return DRAGDROP_S_CANCEL;
-    if ( !(keyState & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON)) )
-      return DRAGDROP_S_DROP;
-    return S_OK;
-  }
-};
-class FLEnum : public IEnumFORMATETC
-{
-public:
-  int n;
-  LONG m_lRefCount;
-
-  ULONG __stdcall AddRef(void) {
-    return InterlockedIncrement(&m_lRefCount);
-  }
-
-  ULONG __stdcall Release(void) {
-    LONG count = InterlockedDecrement(&m_lRefCount);
-    if(count == 0) {
-      delete this;
-      return 0;
-    } else {
-      return count;
-    }
-  }
-
-
-  HRESULT __stdcall QueryInterface(REFIID iid, void **ppvObject) {
-    if(iid == IID_IEnumFORMATETC || iid == IID_IUnknown) {
-       AddRef();
-       *ppvObject = this;
-       return S_OK;
-    } else {
-        *ppvObject = 0;
-        return E_NOINTERFACE;
-    }
-  }
-
-  HRESULT __stdcall Next(ULONG celt, FORMATETC * rgelt, ULONG *pceltFetched) {
-    if (n > 0) return S_FALSE;
-    for (ULONG i = 0; i < celt; i++) {
-      n++;
-      rgelt->cfFormat = CF_HDROP;
-      rgelt->dwAspect = DVASPECT_CONTENT;
-      rgelt->lindex = -1;
-      rgelt->ptd = NULL;
-      rgelt->tymed = TYMED_HGLOBAL;
-    }
-    if (pceltFetched) *pceltFetched = celt;
-    return S_OK;
-  }
-
-  HRESULT __stdcall Skip(ULONG celt) {
-    n += celt;
-    return  (n == 0) ? S_OK : S_FALSE;
-  }
-
-  HRESULT __stdcall Reset(void) {
-	n = 0;
-	return S_OK;
-  }
-
-  HRESULT __stdcall Clone(IEnumFORMATETC  **ppenum){
-    *ppenum = new FLEnum();
-    return S_OK;
-  }
-
-  FLEnum(void) {
-    m_lRefCount   = 1;
-    n = 0;
-  }
-
-  virtual ~FLEnum(void) {
-    n = 0;
-  }
-};
-
-
-/**
-  This is the actual object that FLTK can drop somewhere.
-
-  The implementation is minimal, but it should work with all decent Win32 drop targets
-*/
-class FLDataObject : public IDataObject
-{
-  DWORD m_cRefCount;
-  FLEnum *m_EnumF;
-public:
-  FLDataObject() { m_cRefCount = 1; }// m_EnumF = new FLEnum();}
-  virtual ~FLDataObject() { }
-  HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, LPVOID *ppvObject ) {
-    if (IID_IUnknown==riid || IID_IDataObject==riid)
-    {
-      *ppvObject=this;
-      ((LPUNKNOWN)*ppvObject)->AddRef();
-      return S_OK;
-    }
-    *ppvObject = NULL;
-    return E_NOINTERFACE;
-  }
-  ULONG STDMETHODCALLTYPE AddRef() { return ++m_cRefCount; }
-  ULONG STDMETHODCALLTYPE Release() {
-    long nTemp;
-    nTemp = --m_cRefCount;
-    if(nTemp==0)
-      delete this;
-    return nTemp;
-  }
-  // GetData currently allows UNICODE text through Global Memory only
-  HRESULT STDMETHODCALLTYPE GetData( FORMATETC *pformatetcIn, STGMEDIUM *pmedium ) {
-    if ((pformatetcIn->dwAspect & DVASPECT_CONTENT) &&
-        (pformatetcIn->tymed & TYMED_HGLOBAL) &&
-        (pformatetcIn->cfFormat == CF_UNICODETEXT))
-    {
-      int utf16_len = fl_utf8toUtf16(fl_selection_buffer[0], fl_selection_length[0], 0, 0);
-      HGLOBAL gh = GlobalAlloc( GHND, utf16_len * 2 + 2 );
-      char *pMem = (char*)GlobalLock( gh );
-      fl_utf8toUtf16(fl_selection_buffer[0], fl_selection_length[0], (unsigned short*)pMem, utf16_len + 1);
-//      HGLOBAL gh = GlobalAlloc( GHND| GMEM_SHARE,
-//                            (fl_selection_length[0]+4) * sizeof(short)
-//                            + sizeof(DROPFILES));
-//      unsigned char *pMem = (unsigned char*)GlobalLock( gh );
-//      if (!pMem) {
-//        GlobalFree(gh);
-//        return DV_E_FORMATETC;
-//      }
-//      DROPFILES *df =(DROPFILES*) pMem;
-//      int l;
-//      df->pFiles = sizeof(DROPFILES);
-//      df->pt.x = 0;
-//      df->pt.y = 0;
-//      df->fNC = FALSE;
-//      for (int i = 0; i < fl_selection_length[0]; i++) {
-//        if (fl_selection_buffer[0][i] == '\n') {
-//          fl_selection_buffer[0][i] = '\0';
-//        }
-//      }
-//
-//        df->fWide = TRUE;
-//        l = fl_utf2unicode((unsigned char*)fl_selection_buffer[0],
-//                             fl_selection_length[0], (xchar*)(((char*)pMem)
-//                              + sizeof(DROPFILES)));
-//
-//      pMem[l * sizeof(WCHAR) + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 1 + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 2 + sizeof(DROPFILES)] = 0;
-//      pMem[l * sizeof(WCHAR) + 3 + sizeof(DROPFILES)] = 0;
-      pmedium->tymed	      = TYMED_HGLOBAL;
-      pmedium->hGlobal	      = gh;
-      pmedium->pUnkForRelease = NULL;
-      GlobalUnlock( gh );
-      return S_OK;
-    }
-    return DV_E_FORMATETC;
-  }
-  HRESULT STDMETHODCALLTYPE QueryGetData( FORMATETC *pformatetc )
-  {
-    if ((pformatetc->dwAspect & DVASPECT_CONTENT) &&
-        (pformatetc->tymed & TYMED_HGLOBAL) &&
-        (pformatetc->cfFormat == CF_UNICODETEXT))
-      return S_OK;
-    return DV_E_FORMATETC;
-  }
-//  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD dir, IEnumFORMATETC** ppenumFormatEtc) {
-//	*ppenumFormatEtc = m_EnumF;
-//	return S_OK;
-//  }
-
-  // all the following methods are not really needed for a DnD object
-  HRESULT STDMETHODCALLTYPE GetDataHere( FORMATETC* /*pformatetcIn*/, STGMEDIUM* /*pmedium*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc( FORMATETC* /*in*/, FORMATETC* /*out*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE SetData( FORMATETC* /*pformatetc*/, STGMEDIUM* /*pmedium*/, BOOL /*fRelease*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD /*dir*/, IEnumFORMATETC** /*ppenumFormatEtc*/) { return E_NOTIMPL; }
-//  HRESULT STDMETHODCALLTYPE EnumFormatEtc( DWORD dir, IEnumFORMATETC** ppenumFormatEtc) {*ppenumFormatEtc = m_EnumF; return S_OK;}
-  HRESULT STDMETHODCALLTYPE DAdvise( FORMATETC* /*pformatetc*/, DWORD /*advf*/,
-      IAdviseSink* /*pAdvSink*/, DWORD* /*pdwConnection*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE DUnadvise( DWORD /*dwConnection*/) { return E_NOTIMPL; }
-  HRESULT STDMETHODCALLTYPE EnumDAdvise( IEnumSTATDATA** /*ppenumAdvise*/) { return E_NOTIMPL; }
-};
-
-
-int Fl::dnd()
-{
-  DWORD dropEffect;
-  ReleaseCapture();
-
-  FLDataObject *fdo = new FLDataObject;
-  fdo->AddRef();
-  FLDropSource *fds = new FLDropSource;
-  fds->AddRef();
-
-  HRESULT ret = DoDragDrop( fdo, fds, DROPEFFECT_MOVE|DROPEFFECT_LINK|DROPEFFECT_COPY, &dropEffect );
-
-  fdo->Release();
-  fds->Release();
-
-  Fl_Widget *w = Fl::pushed();
-  if ( w )
-  {
-    int old_event = Fl::e_number;
-    w->handle(Fl::e_number = FL_RELEASE);
-    Fl::e_number = old_event;
-    Fl::pushed( 0 );
-  }
-  if ( ret==DRAGDROP_S_DROP ) return 1; // or DD_S_CANCEL
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_dnd_x.cxx
+++ /dev/null
@@ -1,195 +1,0 @@
-//
-// "$Id$"
-//
-// Drag & Drop code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include "flstring.h"
-
-
-extern Atom fl_XdndAware;
-extern Atom fl_XdndSelection;
-extern Atom fl_XdndEnter;
-extern Atom fl_XdndTypeList;
-extern Atom fl_XdndPosition;
-extern Atom fl_XdndLeave;
-extern Atom fl_XdndDrop;
-extern Atom fl_XdndStatus;
-extern Atom fl_XdndActionCopy;
-extern Atom fl_XdndFinished;
-//extern Atom fl_XdndProxy;
-extern Atom fl_XdndURIList;
-extern Atom fl_XaUtf8String;
-
-extern char fl_i_own_selection[2];
-extern char *fl_selection_buffer[2];
-
-extern void fl_sendClientMessage(Window window, Atom message,
-                                 unsigned long d0,
-                                 unsigned long d1=0,
-                                 unsigned long d2=0,
-                                 unsigned long d3=0,
-                                 unsigned long d4=0);
-
-// return version # of Xdnd this window supports.  Also change the
-// window to the proxy if it uses a proxy:
-static int dnd_aware(Window& window) {
-  Atom actual; int format; unsigned long count, remaining;
-  unsigned char *data = 0;
-  XGetWindowProperty(fl_display, window, fl_XdndAware,
-		     0, 4, False, XA_ATOM,
-		     &actual, &format,
-		     &count, &remaining, &data);
-  int ret = 0;
-  if (actual == XA_ATOM && format==32 && count && data)
-    ret = int(*(Atom*)data);
-  if (data) { XFree(data); data = 0; }
-  return ret;
-}
-
-static int grabfunc(int event) {
-  if (event == FL_RELEASE) Fl::pushed(0);
-  return 0;
-}
-
-extern int (*fl_local_grab)(int); // in Fl.cxx
-
-// send an event to an fltk window belonging to this program:
-static int local_handle(int event, Fl_Window* window) {
-  fl_local_grab = 0;
-  Fl::e_x = Fl::e_x_root-window->x();
-  Fl::e_y = Fl::e_y_root-window->y();
-  int ret = Fl::handle(event,window);
-  fl_local_grab = grabfunc;
-  return ret;
-}
-
-int Fl::dnd() {
-  Fl_Window *source_fl_win = Fl::first_window();
-  Fl::first_window()->cursor(FL_CURSOR_MOVE);
-  Window source_window = fl_xid(Fl::first_window());
-  fl_local_grab = grabfunc;
-  Window target_window = 0;
-  Fl_Window* local_window = 0;
-  int dndversion = 4; int dest_x, dest_y;
-  XSetSelectionOwner(fl_display, fl_XdndSelection, fl_message_window, fl_event_time);
-
-  while (Fl::pushed()) {
-
-    // figure out what window we are pointing at:
-    Window new_window = 0; int new_version = 0;
-    Fl_Window* new_local_window = 0;
-    for (Window child = RootWindow(fl_display, fl_screen);;) {
-      Window root; unsigned int junk3;
-      XQueryPointer(fl_display, child, &root, &child,
-		    &e_x_root, &e_y_root, &dest_x, &dest_y, &junk3);
-      if (!child) {
-	if (!new_window && (new_version = dnd_aware(root))) new_window = root;
-	break;
-      }
-      new_window = child;
-      if ((new_local_window = fl_find(child))) break;
-      if ((new_version = dnd_aware(new_window))) break;
-    }
-
-    if (new_window != target_window) {
-      if (local_window) {
-	local_handle(FL_DND_LEAVE, local_window);
-      } else if (dndversion) {
-	fl_sendClientMessage(target_window, fl_XdndLeave, source_window);
-      }
-      dndversion = new_version;
-      target_window = new_window;
-      local_window = new_local_window;
-      if (local_window) {
-	local_handle(FL_DND_ENTER, local_window);
-      } else if (dndversion) {
-        // Send an X-DND message to the target window.  In order to
-	// support dragging of files/URLs as well as arbitrary text,
-	// we look at the selection buffer - if the buffer starts
-	// with a common URI scheme, does not contain spaces, and
-	// contains at least one CR LF, then we flag the data as
-	// both a URI list (MIME media type "text/uri-list") and
-	// plain text.  Otherwise, we just say it is plain text.
-        if ((!strncmp(fl_selection_buffer[0], "file:///", 8) ||
-	     !strncmp(fl_selection_buffer[0], "ftp://", 6) ||
-	     !strncmp(fl_selection_buffer[0], "http://", 7) ||
-	     !strncmp(fl_selection_buffer[0], "https://", 8) ||
-	     !strncmp(fl_selection_buffer[0], "ipp://", 6) ||
-	     !strncmp(fl_selection_buffer[0], "ldap:", 5) ||
-	     !strncmp(fl_selection_buffer[0], "mailto:", 7) ||
-	     !strncmp(fl_selection_buffer[0], "news:", 5) ||
-	     !strncmp(fl_selection_buffer[0], "smb://", 6)) &&
-	    !strchr(fl_selection_buffer[0], ' ') &&
-	    strstr(fl_selection_buffer[0], "\r\n")) {
-	  // Send file/URI list...
-	  fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
-			       dndversion<<24, fl_XdndURIList, XA_STRING, 0);
-        } else {
-	  // Send plain text...
-	  fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
-			       dndversion<<24, fl_XaUtf8String, 0, 0);
-	}
-      }
-    }
-    if (local_window) {
-      local_handle(FL_DND_DRAG, local_window);
-    } else if (dndversion) {
-      fl_sendClientMessage(target_window, fl_XdndPosition, source_window,
-			   0, (e_x_root<<16)|e_y_root, fl_event_time,
-			   fl_XdndActionCopy);
-    }
-    Fl::wait();
-  }
-
-  if (local_window) {
-    fl_i_own_selection[0] = 1;
-    if (local_handle(FL_DND_RELEASE, local_window)) paste(*belowmouse(), 0);
-  } else if (dndversion) {
-    fl_sendClientMessage(target_window, fl_XdndDrop, source_window,
-			 0, fl_event_time);
-  } else if (target_window) {
-    // fake a drop by clicking the middle mouse button:
-    XButtonEvent msg;
-    msg.type = ButtonPress;
-    msg.window = target_window;
-    msg.root = RootWindow(fl_display, fl_screen);
-    msg.subwindow = 0;
-    msg.time = fl_event_time+1;
-    msg.x = dest_x;
-    msg.y = dest_y;
-    msg.x_root = Fl::e_x_root;
-    msg.y_root = Fl::e_y_root;
-    msg.state = 0x0;
-    msg.button = Button2;
-    XSendEvent(fl_display, target_window, False, 0L, (XEvent*)&msg);
-    msg.time++;
-    msg.state = 0x200;
-    msg.type = ButtonRelease;
-    XSendEvent(fl_display, target_window, False, 0L, (XEvent*)&msg);
-  }
-
-  fl_local_grab = 0;
-  source_fl_win->cursor(FL_CURSOR_DEFAULT);
-  return 1;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_draw.cxx
+++ /dev/null
@@ -1,460 +1,0 @@
-//
-// "$Id$"
-//
-// Label drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Implementation of fl_draw(const char*,int,int,int,int,Fl_Align)
-// Used to draw all the labels and text, this routine:
-// Word wraps the labels to fit into their bounding box.
-// Breaks them into lines at the newlines.
-// Expands all unprintable characters to ^X or \nnn notation
-// Aligns them against the inside of the box.
-
-#include <FL/fl_utf8.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
-
-#include "flstring.h"
-#include <ctype.h>
-#include <math.h>
-
-
-char fl_draw_shortcut;	// set by fl_labeltypes.cxx
-
-static char* underline_at;
-
-/* If called with maxbuf==0, use an internally allocated buffer and enlarge it as needed.
- Otherwise, use buf as buffer but don't go beyond its length of maxbuf.
- */
-static const char* expand_text_(const char* from, char*& buf, int maxbuf, double maxw, int& n,
-	       double &width, int wrap, int draw_symbols) {
-  char* e = buf+(maxbuf-4);
-  underline_at = 0;
-  double w = 0;
-  static int l_local_buff = 500;
-  static char *local_buf = (char*)malloc(l_local_buff); // initial buffer allocation
-  if (maxbuf == 0) {
-    buf = local_buf;
-    e = buf + l_local_buff - 4;
-    }
-  char* o = buf;
-  char* word_end = o;
-  const char* word_start = from;
-
-  const char* p = from;
-  for (;; p++) {
-
-    int c = *p & 255;
-
-    if (!c || c == ' ' || c == '\n') {
-      // test for word-wrap:
-      if (word_start < p && wrap) {
-	double newwidth = w + fl_width(word_end, (int) (o-word_end) );
-	if (word_end > buf && newwidth > maxw) { // break before this word
-	  o = word_end;
-	  p = word_start;
-	  break;
-	}
-	word_end = o;
-	w = newwidth;
-      }
-      if (!c) break;
-      else if (c == '\n') {p++; break;}
-      word_start = p+1;
-    }
-
-    if (o > e) {
-      if (maxbuf) break; // don't overflow buffer
-      l_local_buff += (o - e) + 200; // enlarge buffer
-      buf = (char*)realloc(local_buf, l_local_buff);
-      e = buf + l_local_buff - 4; // update pointers to buffer content
-      o = buf + (o - local_buf);
-      word_end = buf + (word_end - local_buf);
-      local_buf = buf;
-    }
-
-    if (c == '\t') {
-      for (c = fl_utf_nb_char((uchar*)buf, (int) (o-buf) )%8; c<8 && o<e; c++)
-           *o++ = ' ';
-    } else if (c == '&' && fl_draw_shortcut && *(p+1)) {
-      if (*(p+1) == '&') {p++; *o++ = '&';}
-      else if (fl_draw_shortcut != 2) underline_at = o;
-    } else if (c < ' ' || c == 127) { // ^X
-      *o++ = '^';
-      *o++ = c ^ 0x40;
-/* This is in fact not useful: the point is that a valid UTF-8 sequence for a non-ascii char contains no ascii char,
- thus no tab, space, control, & or @ we want to process differently.
- Also, invalid UTF-8 sequences are copied unchanged by this procedure.
- Therefore, checking for tab, space, control, & or @, and copying the byte otherwise, is enough.
- } else  if (handle_utf8_seq(p, o)) { // figure out if we have an utf8 valid sequence before we determine the nbsp test validity:
-#ifdef __APPLE__
-    } else if (c == 0xCA) { // non-breaking space in MacRoman
-#else
-    } else if (c == 0xA0) { // non-breaking space in ISO 8859
-#endif
-      *o++ = ' ';*/
-    } else if (c == '@' && draw_symbols) { // Symbol???
-      if (p[1] && p[1] != '@')  break;
-      *o++ = c;
-      if (p[1]) p++;
-    } else {
-      *o++ = c;
-    }
-  }
-
-  width = w + fl_width(word_end, (int) (o-word_end));
-  *o = 0;
-  n = (int) (o-buf);
-  return p;
-}
-
-/**
- Copy \p from to \p buf, replacing control characters with ^X.
-
- Stop at a newline or if \p maxbuf characters written to buffer.
- Also word-wrap if width exceeds maxw.
- Returns a pointer to the start of the next line of characters.
- Sets n to the number of characters put into the buffer.
- Sets width to the width of the string in the \ref drawing_fl_font "current font".
- */
-const char*
-fl_expand_text(const char* from, char* buf, int maxbuf, double maxw, int& n,
-	       double &width, int wrap, int draw_symbols) {
-  return expand_text_(from,  buf, maxbuf, maxw,  n, width,  wrap,  draw_symbols);
-}
-
-/**
-  The same as fl_draw(const char*,int,int,int,int,Fl_Align,Fl_Image*,int) with
-  the addition of the \p callthis parameter, which is a pointer to a text drawing
-  function such as fl_draw(const char*, int, int, int) to do the real work
-*/
-void fl_draw(
-    const char* str,	// the (multi-line) string
-    int x, int y, int w, int h,	// bounding box
-    Fl_Align align,
-    void (*callthis)(const char*,int,int,int),
-    Fl_Image* img, int draw_symbols)
-{
-  char *linebuf = NULL;
-  const char* p;
-  const char* e;
-  int buflen;
-  char symbol[2][255], *symptr;
-  int symwidth[2], symoffset, symtotal, imgtotal;
-
-  // count how many lines and put the last one into the buffer:
-  int lines;
-  double width;
-
-  // if the image is set as a backdrop, ignore it here
-  if (img && (align & FL_ALIGN_IMAGE_BACKDROP)) img = 0;
-
-  symbol[0][0] = '\0';
-  symwidth[0]  = 0;
-
-  symbol[1][0] = '\0';
-  symwidth[1]  = 0;
-
-  if (draw_symbols) {
-    if (str && str[0] == '@' && str[1] && str[1] != '@') {
-      // Start with a symbol...
-      for (symptr = symbol[0];
-           *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 1);
-           *symptr++ = *str++) {/*empty*/}
-      *symptr = '\0';
-      if (isspace(*str)) str++;
-      symwidth[0] = (w < h ? w : h);
-    }
-
-    if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1] != '@') {
-      strlcpy(symbol[1], p, sizeof(symbol[1]));
-      symwidth[1] = (w < h ? w : h);
-    }
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-  imgtotal = (img && (align&FL_ALIGN_IMAGE_NEXT_TO_TEXT)) ? img->w() : 0;
-
-  int strw = 0;
-  int strh;
-
-  if (str) {
-    for (p = str, lines=0; p;) {
-      e = expand_text_(p, linebuf, 0, w - symtotal - imgtotal, buflen, width,
-                         align&FL_ALIGN_WRAP, draw_symbols);
-      if (strw<width) strw = (int)width;
-      lines++;
-      if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break;
-      p = e;
-    }
-  } else lines = 0;
-
-  if ((symwidth[0] || symwidth[1]) && lines) {
-    if (symwidth[0]) symwidth[0] = lines * fl_height();
-    if (symwidth[1]) symwidth[1] = lines * fl_height();
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-  strh = lines * fl_height();
-
-  // figure out vertical position of the first line:
-  int xpos;
-  int ypos;
-  int height = fl_height();
-  int imgvert = ((align&FL_ALIGN_IMAGE_NEXT_TO_TEXT)==0);
-  int imgh = img && imgvert ? img->h() : 0;
-  int imgw[2] = {0, 0};
-
-  symoffset = 0;
-
-  if (align & FL_ALIGN_BOTTOM) ypos = y+h-(lines-1)*height-imgh;
-  else if (align & FL_ALIGN_TOP) ypos = y+height;
-  else ypos = y+(h-lines*height-imgh)/2+height;
-
-  // draw the image unless the "text over image" alignment flag is set...
-  if (img && imgvert && !(align & FL_ALIGN_TEXT_OVER_IMAGE)) {
-    if (img->w() > symoffset) symoffset = img->w();
-
-    if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - img->w() - symwidth[1];
-    else xpos = x + (w - img->w() - symtotal) / 2 + symwidth[0];
-
-    img->draw(xpos, ypos - height);
-    ypos += img->h();
-  }
-
-  // draw the image to the side of the text
-  if (img && !imgvert /* && (align & !FL_ALIGN_TEXT_NEXT_TO_IMAGE)*/ ) {
-    if (align & FL_ALIGN_TEXT_OVER_IMAGE) { // image is right of text
-      imgw[1] = img->w();
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] + strw + 1;
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1] - imgw[1] + 1;
-      else xpos = x + (w - strw - symtotal - imgw[1]) / 2 + symwidth[0] + strw + 1;
-    } else { // image is to the left of the text
-      imgw[0] = img->w();
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] - 1;
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1] - strw - imgw[0] - 1;
-      else xpos = x + (w - strw - symtotal - imgw[0]) / 2 - 1;
-    }
-    int yimg = ypos - height;
-    if (align & FL_ALIGN_TOP) ;
-    else if (align & FL_ALIGN_BOTTOM) yimg += strh - img->h() - 1;
-    else yimg += (strh - img->h() - 1) / 2;
-    img->draw(xpos, yimg);
-  }
-
-  // now draw all the lines:
-  if (str) {
-    int desc = fl_descent();
-    for (p=str; ; ypos += height) {
-      if (lines>1) e = expand_text_(p, linebuf, 0, w - symtotal - imgtotal, buflen,
-				width, align&FL_ALIGN_WRAP, draw_symbols);
-      else e = "";
-
-      if (width > symoffset) symoffset = (int)(width + 0.5);
-
-      if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0] + imgw[0];
-      else if (align & FL_ALIGN_RIGHT) xpos = x + w - (int)(width + .5) - symwidth[1] - imgw[1];
-      else xpos = x + (w - (int)(width + .5) - symtotal - imgw[0] - imgw[1]) / 2 + symwidth[0] + imgw[0];
-
-      callthis(linebuf,buflen,xpos,ypos-desc);
-
-      if (underline_at && underline_at >= linebuf && underline_at < (linebuf + buflen))
-	callthis("_",1,xpos+int(fl_width(linebuf,(int) (underline_at-linebuf))),ypos-desc);
-
-      if (!*e || (*e == '@' && e[1] != '@')) break;
-      p = e;
-    }
-  }
-
-  // draw the image if the "text over image" alignment flag is set...
-  if (img && imgvert && (align & FL_ALIGN_TEXT_OVER_IMAGE)) {
-    if (img->w() > symoffset) symoffset = img->w();
-
-    if (align & FL_ALIGN_LEFT) xpos = x + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - img->w() - symwidth[1];
-    else xpos = x + (w - img->w() - symtotal) / 2 + symwidth[0];
-
-    img->draw(xpos, ypos);
-  }
-
-  // draw the symbols, if any...
-  if (symwidth[0]) {
-    // draw to the left
-    if (align & FL_ALIGN_LEFT) xpos = x;
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - symtotal - symoffset;
-    else xpos = x + (w - symoffset - symtotal) / 2;
-
-    if (align & FL_ALIGN_BOTTOM) ypos = y + h - symwidth[0];
-    else if (align & FL_ALIGN_TOP) ypos = y;
-    else ypos = y + (h - symwidth[0]) / 2;
-
-    fl_draw_symbol(symbol[0], xpos, ypos, symwidth[0], symwidth[0], fl_color());
-  }
-
-  if (symwidth[1]) {
-    // draw to the right
-    if (align & FL_ALIGN_LEFT) xpos = x + symoffset + symwidth[0];
-    else if (align & FL_ALIGN_RIGHT) xpos = x + w - symwidth[1];
-    else xpos = x + (w - symoffset - symtotal) / 2 + symoffset + symwidth[0];
-
-    if (align & FL_ALIGN_BOTTOM) ypos = y + h - symwidth[1];
-    else if (align & FL_ALIGN_TOP) ypos = y;
-    else ypos = y + (h - symwidth[1]) / 2;
-
-    fl_draw_symbol(symbol[1], xpos, ypos, symwidth[1], symwidth[1], fl_color());
-  }
-}
-
-/**
-  Fancy string drawing function which is used to draw all the labels.
-
-  The string is formatted and aligned inside the passed box.
-  Handles '\\t' and '\\n', expands all other control characters to '^X',
-  and aligns inside or against the edges of the box.
-  See Fl_Widget::align() for values of \p align. The value FL_ALIGN_INSIDE
-  is ignored, as this function always prints inside the box.
-  If \p img is provided and is not \p NULL, the image is drawn above or
-  below the text as specified by the \p align value.
-  The \p draw_symbols argument specifies whether or not to look for symbol
-  names starting with the '\@' character'
-*/
-void fl_draw(
-  const char* str,
-  int x, int y, int w, int h,
-  Fl_Align align,
-  Fl_Image* img,
-  int draw_symbols)
-{
-  if ((!str || !*str) && !img) return;
-  if (w && h && !fl_not_clipped(x, y, w, h) && (align & FL_ALIGN_INSIDE)) return;
-  if (align & FL_ALIGN_CLIP)
-    fl_push_clip(x, y, w, h);
-  fl_draw(str, x, y, w, h, align, fl_draw, img, draw_symbols);
-  if (align & FL_ALIGN_CLIP)
-    fl_pop_clip();
-}
-
-/**
-  Measure how wide and tall the string will be when printed by the
-  fl_draw() function with \p align parameter. If the incoming \p w
-  is non-zero it will wrap to that width.
-
-  The \ref drawing_fl_font "current font" is used to do the width/height
-  calculations, so unless its value is known at the time fl_measure() is
-  called, it is advised to first set the current font with fl_font().
-  With event-driven GUI programming you can never be sure which
-  widget was exposed and redrawn last, nor which font it used.
-  If you have not called fl_font() explicitly in your own code,
-  the width and height may be set to unexpected values, even zero!
-
-  \b Note: In the general use case, it's a common error to forget to set
-  \p w to 0 before calling fl_measure() when wrap behavior isn't needed.
-
-  \param[in] str nul-terminated string
-  \param[out] w,h width and height of string in current font
-  \param[in] draw_symbols non-zero to enable @@symbol handling [default=1]
-
-  \code
-  // Example: Common use case for fl_measure()
-  const char *s = "This is a test";
-  int wi=0, hi=0;              // initialize to zero before calling fl_measure()
-  fl_font(FL_HELVETICA, 14);   // set current font face/size to be used for measuring
-  fl_measure(s, wi, hi);       // returns pixel width/height of string in current font
-  \endcode
-*/
-void fl_measure(const char* str, int& w, int& h, int draw_symbols) {
-  if (!str || !*str) {w = 0; h = 0; return;}
-  h = fl_height();
-  char *linebuf = NULL;
-  const char* p;
-  const char* e;
-  int buflen;
-  int lines;
-  double width=0;
-  int W = 0;
-  int symwidth[2], symtotal;
-
-  symwidth[0] = 0;	// size of symbol at beginning of string (if any)
-  symwidth[1] = 0;	// size of symbol at end of string (if any)
-
-  if (draw_symbols) {
-    // Symbol at beginning of string?
-    const char *sym2 = (str[0]=='@' && str[1]=='@') ? str+2 : str;	// sym2 check will skip leading @@
-    if (str[0] == '@' && str[1] != '@') {
-      while (*str && !isspace(*str)) { ++str; }		// skip over symbol
-      if (isspace(*str)) ++str;				// skip over trailing space
-      sym2 = str;					// sym2 check will skip leading symbol
-      symwidth[0] = h;
-    }
-    // Symbol at end of string?
-    if ((p=strchr(sym2,'@')) != NULL && p[1] != '@') {
-      symwidth[1] = h;
-    }
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-
-  for (p = str, lines=0; p;) {
-//    e = expand(p, linebuf, w - symtotal, buflen, width, w != 0, draw_symbols);
-    e = expand_text_(p, linebuf, 0, w - symtotal, buflen, width,
-			w != 0, draw_symbols);
-    if ((int)ceil(width) > W) W = (int)ceil(width);
-    lines++;
-    if (!*e || (*e == '@' && e[1] != '@' && draw_symbols)) break;
-    p = e;
-  }
-
-  if ((symwidth[0] || symwidth[1]) && lines) {
-    if (symwidth[0]) symwidth[0] = lines * fl_height();
-    if (symwidth[1]) symwidth[1] = lines * fl_height();
-  }
-
-  symtotal = symwidth[0] + symwidth[1];
-
-  w = W + symtotal;
-  h = lines*h;
-}
-
-/**
-  This function returns the actual height of the specified \p font
-  and \p size. Normally the font height should always be 'size',
-  but with the advent of XFT, there are (currently) complexities
-  that seem to only be solved by asking the font what its actual
-  font height is. (See STR#2115)
-
-  This function was originally undocumented in 1.1.x, and was used
-  only by Fl_Text_Display. We're now documenting it in 1.3.x so that
-  apps that need precise height info can get it with this function.
-
-  \returns the height of the font in pixels.
-
-  \todo  In the future, when the XFT issues are resolved, this function
-         should simply return the 'size' value.
-*/
-int fl_height(int font, int size) {
-    if ( font == fl_font() && size == fl_size() ) return(fl_height());
-    int tf = fl_font(), ts = fl_size();   // save
-    fl_font(font,size);
-    int height = fl_height();
-    fl_font(tf,ts);                       // restore
-    return(height);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_draw_image.cxx
+++ /dev/null
@@ -1,617 +1,0 @@
-//
-// "$Id$"
-//
-// Image drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// I hope a simple and portable method of drawing color and monochrome
-// images.  To keep this simple, only a single storage type is
-// supported: 8 bit unsigned data, byte order RGB, and pixels are
-// stored packed into rows with the origin at the top-left.  It is
-// possible to alter the size of pixels with the "delta" argument, to
-// add alpha or other information per pixel.  It is also possible to
-// change the origin and direction of the image data by messing with
-// the "delta" and "linedelta", making them negative, though this may
-// defeat some of the shortcuts in translating the image for X.
-
-#ifdef WIN32
-#  include "fl_draw_image_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_draw_image_mac.cxx"
-#else
-
-// A list of assumptions made about the X display:
-
-// bits_per_pixel must be one of 8, 16, 24, 32.
-
-// scanline_pad must be a power of 2 and greater or equal to 8.
-
-// PsuedoColor visuals must have 8 bits_per_pixel (although the depth
-// may be less than 8).  This is the only limitation that affects any
-// modern X displays, you can't use 12 or 16 bit colormaps.
-
-// The mask bits in TrueColor visuals for each color are
-// contiguous and have at least one bit of each color.  This
-// is not checked for.
-
-// For 24 and 32 bit visuals there must be at least 8 bits of each color.
-
-////////////////////////////////////////////////////////////////
-
-#  include <FL/Fl.H>
-#  include <FL/fl_draw.H>
-#  include <FL/x.H>
-#  include "Fl_XColor.H"
-#  include "flstring.h"
-
-static XImage xi;	// template used to pass info to X
-static int bytes_per_pixel;
-static int scanline_add;
-static int scanline_mask;
-
-static void (*converter)(const uchar *from, uchar *to, int w, int delta);
-static void (*mono_converter)(const uchar *from, uchar *to, int w, int delta);
-
-static int dir;		// direction-alternator
-static int ri,gi,bi;	// saved error-diffusion value
-
-#  if USE_COLORMAP
-////////////////////////////////////////////////////////////////
-// 8-bit converter with error diffusion
-
-static void color8_converter(const uchar *from, uchar *to, int w, int delta) {
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    g += from[1]; if (g < 0) g = 0; else if (g>255) g = 255;
-    b += from[2]; if (b < 0) b = 0; else if (b>255) b = 255;
-    Fl_Color i = fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor& xmap = fl_xmap[0][i];
-    if (!xmap.mapped) {if (!fl_redmask) fl_xpixel(r,g,b); else fl_xpixel(i);}
-    r -= xmap.r;
-    g -= xmap.g;
-    b -= xmap.b;
-    *to = uchar(xmap.pixel);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void mono8_converter(const uchar *from, uchar *to, int w, int delta) {
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    g += from[0]; if (g < 0) g = 0; else if (g>255) g = 255;
-    b += from[0]; if (b < 0) b = 0; else if (b>255) b = 255;
-    Fl_Color i = fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
-    Fl_XColor& xmap = fl_xmap[0][i];
-    if (!xmap.mapped) {if (!fl_redmask) fl_xpixel(r,g,b); else fl_xpixel(i);}
-    r -= xmap.r;
-    g -= xmap.g;
-    b -= xmap.b;
-    *to = uchar(xmap.pixel);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-#  endif
-
-////////////////////////////////////////////////////////////////
-// 16 bit TrueColor converters with error diffusion
-// Cray computers have no 16-bit type, so we use character pointers
-// (which may be slow)
-
-#  ifdef U16
-#    define OUTTYPE U16
-#    define OUTSIZE 1
-#    define OUTASSIGN(v) *t = v
-#  else
-#    define OUTTYPE uchar
-#    define OUTSIZE 2
-#    define OUTASSIGN(v) int tt=v; t[0] = uchar(tt>>8); t[1] = uchar(tt)
-#  endif
-
-static void color16_converter(const uchar *from, uchar *to, int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri, g=gi, b=bi;
-  for (; w--; from += d, t += td) {
-    r = (r&~fl_redmask)  +from[0]; if (r>255) r = 255;
-    g = (g&~fl_greenmask)+from[1]; if (g>255) g = 255;
-    b = (b&~fl_bluemask) +from[2]; if (b>255) b = 255;
-    OUTASSIGN((
-      ((r&fl_redmask)<<fl_redshift)+
-      ((g&fl_greenmask)<<fl_greenshift)+
-      ((b&fl_bluemask)<<fl_blueshift)
-      ) >> fl_extrashift);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void mono16_converter(const uchar *from,uchar *to,int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  uchar mask = fl_redmask & fl_greenmask & fl_bluemask;
-  int r=ri;
-  for (; w--; from += d, t += td) {
-    r = (r&~mask) + *from; if (r > 255) r = 255;
-    uchar m = r&mask;
-    OUTASSIGN((
-      (m<<fl_redshift)+
-      (m<<fl_greenshift)+
-      (m<<fl_blueshift)
-      ) >> fl_extrashift);
-  }
-  ri = r;
-}
-
-// special-case the 5r6g5b layout used by XFree86:
-
-static void c565_converter(const uchar *from, uchar *to, int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri, g=gi, b=bi;
-  for (; w--; from += d, t += td) {
-    r = (r&7)+from[0]; if (r>255) r = 255;
-    g = (g&3)+from[1]; if (g>255) g = 255;
-    b = (b&7)+from[2]; if (b>255) b = 255;
-    OUTASSIGN(((r&0xf8)<<8) + ((g&0xfc)<<3) + (b>>3));
-  }
-  ri = r; gi = g; bi = b;
-}
-
-static void m565_converter(const uchar *from,uchar *to,int w, int delta) {
-  OUTTYPE *t = (OUTTYPE *)to;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    t = t+(w-1)*OUTSIZE;
-    d = -delta;
-    td = -OUTSIZE;
-  } else {
-    dir = 1;
-    d = delta;
-    td = OUTSIZE;
-  }
-  int r=ri;
-  for (; w--; from += d, t += td) {
-    r = (r&7) + *from; if (r > 255) r = 255;
-    OUTASSIGN((r>>3) * 0x841);
-  }
-  ri = r;
-}
-
-////////////////////////////////////////////////////////////////
-// 24bit TrueColor converters:
-
-static void rgb_converter(const uchar *from, uchar *to, int w, int delta) {
-  int d = delta-3;
-  for (; w--; from += d) {
-    *to++ = *from++;
-    *to++ = *from++;
-    *to++ = *from++;
-  }
-}
-
-static void bgr_converter(const uchar *from, uchar *to, int w, int delta) {
-  for (; w--; from += delta) {
-    uchar r = from[0];
-    uchar g = from[1];
-    *to++ = from[2];
-    *to++ = g;
-    *to++ = r;
-  }
-}
-
-static void rrr_converter(const uchar *from, uchar *to, int w, int delta) {
-  for (; w--; from += delta) {
-    *to++ = *from;
-    *to++ = *from;
-    *to++ = *from;
-  }
-}
-
-////////////////////////////////////////////////////////////////
-// 32bit TrueColor converters on a 32 or 64-bit machine:
-
-#  ifdef U64
-#    define STORETYPE U64
-#    if WORDS_BIGENDIAN
-#      define INNARDS32(f) \
-  U64 *t = (U64*)to; \
-  int w1 = w/2; \
-  for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = (i<<32)|(f);} \
-  if (w&1) *t++ = (U64)(f)<<32;
-#    else
-#      define INNARDS32(f) \
-  U64 *t = (U64*)to; \
-  int w1 = w/2; \
-  for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = ((U64)(f)<<32)|i;} \
-  if (w&1) *t++ = (U64)(f);
-#    endif
-#  else
-#    define STORETYPE U32
-#    define INNARDS32(f) \
-  U32 *t = (U32*)to; for (; w--; from += delta) *t++ = f
-#  endif
-
-static void rgbx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((unsigned(from[0])<<24)+(from[1]<<16)+(from[2]<<8));
-}
-
-static void xbgr_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0])+(from[1]<<8)+(from[2]<<16));
-}
-
-static void xrgb_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0]<<16)+(from[1]<<8)+(from[2]));
-}
-
-static void argb_premul_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((unsigned(from[3]) << 24) +
-             (((from[0] * from[3]) / 255) << 16) +
-             (((from[1] * from[3]) / 255) << 8) +
-             ((from[2] * from[3]) / 255));
-}
-
-static void bgrx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32((from[0]<<8)+(from[1]<<16)+(unsigned(from[2])<<24));
-}
-
-static void rrrx_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(unsigned(*from) * 0x1010100U);
-}
-
-static void xrrr_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(*from * 0x10101U);
-}
-
-static void
-color32_converter(const uchar *from, uchar *to, int w, int delta) {
-  INNARDS32(
-    (from[0]<<fl_redshift)+(from[1]<<fl_greenshift)+(from[2]<<fl_blueshift));
-}
-
-static void
-mono32_converter(const uchar *from,uchar *to,int w, int delta) {
-  INNARDS32(
-    (*from << fl_redshift)+(*from << fl_greenshift)+(*from << fl_blueshift));
-}
-
-////////////////////////////////////////////////////////////////
-
-static void figure_out_visual() {
-
-  fl_xpixel(FL_BLACK); // setup fl_redmask, etc, in fl_color.cxx
-  fl_xpixel(FL_WHITE); // also make sure white is allocated
-
-  static XPixmapFormatValues *pfvlist;
-  static int FL_NUM_pfv;
-  if (!pfvlist) pfvlist = XListPixmapFormats(fl_display,&FL_NUM_pfv);
-  XPixmapFormatValues *pfv;
-  for (pfv = pfvlist; pfv < pfvlist+FL_NUM_pfv; pfv++)
-    if (pfv->depth == fl_visual->depth) break;
-  xi.format = ZPixmap;
-  xi.byte_order = ImageByteOrder(fl_display);
-//i.bitmap_unit = 8;
-//i.bitmap_bit_order = MSBFirst;
-//i.bitmap_pad = 8;
-  xi.depth = fl_visual->depth;
-  xi.bits_per_pixel = pfv->bits_per_pixel;
-
-  if (xi.bits_per_pixel & 7) bytes_per_pixel = 0; // produce fatal error
-  else bytes_per_pixel = xi.bits_per_pixel/8;
-
-  unsigned int n = pfv->scanline_pad/8;
-  if (pfv->scanline_pad & 7 || (n&(n-1)))
-    Fl::fatal("Can't do scanline_pad of %d",pfv->scanline_pad);
-  if (n < sizeof(STORETYPE)) n = sizeof(STORETYPE);
-  scanline_add = n-1;
-  scanline_mask = -n;
-
-#  if USE_COLORMAP
-  if (bytes_per_pixel == 1) {
-    converter = color8_converter;
-    mono_converter = mono8_converter;
-    return;
-  }
-  if (!fl_visual->red_mask)
-    Fl::fatal("Can't do %d bits_per_pixel colormap",xi.bits_per_pixel);
-#  endif
-
-  // otherwise it is a TrueColor visual:
-
-  int rs = fl_redshift;
-  int gs = fl_greenshift;
-  int bs = fl_blueshift;
-
-  switch (bytes_per_pixel) {
-
-  case 2:
-    // All 16-bit TrueColor visuals are supported on any machine with
-    // 24 or more bits per integer.
-#  ifdef U16
-    xi.byte_order = WORDS_BIGENDIAN;
-#  else
-    xi.byte_order = 1;
-#  endif
-    if (rs == 11 && gs == 6 && bs == 0 && fl_extrashift == 3) {
-      converter = c565_converter;
-      mono_converter = m565_converter;
-    } else {
-      converter = color16_converter;
-      mono_converter = mono16_converter;
-    }
-    break;
-
-  case 3:
-    if (xi.byte_order) {rs = 16-rs; gs = 16-gs; bs = 16-bs;}
-    if (rs == 0 && gs == 8 && bs == 16) {
-      converter = rgb_converter;
-      mono_converter = rrr_converter;
-    } else if (rs == 16 && gs == 8 && bs == 0) {
-      converter = bgr_converter;
-      mono_converter = rrr_converter;
-    } else {
-      Fl::fatal("Can't do arbitrary 24bit color");
-    }
-    break;
-
-  case 4:
-    if ((xi.byte_order!=0) != WORDS_BIGENDIAN)
-      {rs = 24-rs; gs = 24-gs; bs = 24-bs;}
-    if (rs == 0 && gs == 8 && bs == 16) {
-      converter = xbgr_converter;
-      mono_converter = xrrr_converter;
-    } else if (rs == 24 && gs == 16 && bs == 8) {
-      converter = rgbx_converter;
-      mono_converter = rrrx_converter;
-    } else if (rs == 8 && gs == 16 && bs == 24) {
-      converter = bgrx_converter;
-      mono_converter = rrrx_converter;
-    } else if (rs == 16 && gs == 8 && bs == 0) {
-      converter = xrgb_converter;
-      mono_converter = xrrr_converter;
-    } else {
-      xi.byte_order = WORDS_BIGENDIAN;
-      converter = color32_converter;
-      mono_converter = mono32_converter;
-    }
-    break;
-
-  default:
-    Fl::fatal("Can't do %d bits_per_pixel",xi.bits_per_pixel);
-  }
-
-}
-
-#  define MAXBUFFER 0x40000 // 256k
-
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int mono,
-		    Fl_Draw_Image_Cb cb, void* userdata,
-		    const bool alpha)
-{
-  if (!linedelta) linedelta = W*abs(delta);
-
-  int dx, dy, w, h;
-  fl_clip_box(X,Y,W,H,dx,dy,w,h);
-  if (w<=0 || h<=0) return;
-  dx -= X;
-  dy -= Y;
-
-  if (!bytes_per_pixel) figure_out_visual();
-  const unsigned oldbpp = bytes_per_pixel;
-  const GC oldgc = fl_gc;
-  static GC gc32 = None;
-  xi.width = w;
-  xi.height = h;
-
-  void (*conv)(const uchar *from, uchar *to, int w, int delta) = converter;
-  if (mono) conv = mono_converter;
-  if (alpha) {
-    // This flag states the destination format is ARGB32 (big-endian), pre-multiplied.
-    bytes_per_pixel = 4;
-    conv = argb_premul_converter;
-    xi.depth = 32;
-    xi.bits_per_pixel = 32;
-
-    // Do we need a new GC?
-    if (fl_visual->depth != 32) {
-      if (gc32 == None)
-        gc32 = XCreateGC(fl_display, fl_window, 0, NULL);
-      fl_gc = gc32;
-    }
-  }
-
-  // See if the data is already in the right format.  Unfortunately
-  // some 32-bit x servers (XFree86) care about the unknown 8 bits
-  // and they must be zero.  I can't confirm this for user-supplied
-  // data, so the 32-bit shortcut is disabled...
-  // This can set bytes_per_line negative if image is bottom-to-top
-  // I tested it on Linux, but it may fail on other Xlib implementations:
-  if (buf && (
-#  if 0	// set this to 1 to allow 32-bit shortcut
-      delta == 4 &&
-#    if WORDS_BIGENDIAN
-      conv == rgbx_converter
-#    else
-      conv == xbgr_converter
-#    endif
-      ||
-#  endif
-      conv == rgb_converter && delta==3
-      ) && !(linedelta&scanline_add)) {
-    xi.data = (char *)(buf+delta*dx+linedelta*dy);
-    xi.bytes_per_line = linedelta;
-
-  } else {
-    int linesize = ((w*bytes_per_pixel+scanline_add)&scanline_mask)/sizeof(STORETYPE);
-    int blocking = h;
-    static STORETYPE *buffer;	// our storage, always word aligned
-    static long buffer_size;
-    {int size = linesize*h;
-    if (size > MAXBUFFER) {
-      size = MAXBUFFER;
-      blocking = MAXBUFFER/linesize;
-    }
-    if (size > buffer_size) {
-      delete[] buffer;
-      buffer_size = size;
-      buffer = new STORETYPE[size];
-    }}
-    xi.data = (char *)buffer;
-    xi.bytes_per_line = linesize*sizeof(STORETYPE);
-    if (buf) {
-      buf += delta*dx+linedelta*dy;
-      for (int j=0; j<h; ) {
-	STORETYPE *to = buffer;
-	int k;
-	for (k = 0; j<h && k<blocking; k++, j++) {
-	  conv(buf, (uchar*)to, w, delta);
-	  buf += linedelta;
-	  to += linesize;
-	}
-	XPutImage(fl_display,fl_window,fl_gc, &xi, 0, 0, X+dx, Y+dy+j-k, w, k);
-      }
-    } else {
-      STORETYPE* linebuf = new STORETYPE[(W*delta+(sizeof(STORETYPE)-1))/sizeof(STORETYPE)];
-      for (int j=0; j<h; ) {
-	STORETYPE *to = buffer;
-	int k;
-	for (k = 0; j<h && k<blocking; k++, j++) {
-	  cb(userdata, dx, dy+j, w, (uchar*)linebuf);
-	  conv((uchar*)linebuf, (uchar*)to, w, delta);
-	  to += linesize;
-	}
-	XPutImage(fl_display,fl_window,fl_gc, &xi, 0, 0, X+dx, Y+dy+j-k, w, k);
-      }
-
-      delete[] linebuf;
-    }
-  }
-
-  if (alpha) {
-    bytes_per_pixel = oldbpp;
-    xi.depth = fl_visual->depth;
-    xi.bits_per_pixel = oldbpp * 8;
-
-    if (fl_visual->depth != 32) {
-      fl_gc = oldgc;
-    }
-  }
-}
-
-void Fl_Xlib_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-
-  const bool alpha = !!(abs(d) & FL_IMAGE_WITH_ALPHA);
-  if (alpha) d ^= FL_IMAGE_WITH_ALPHA;
-  const int mono = (d>-3 && d<3);
-
-  innards(buf,x,y,w,h,d,l,mono,0,0,alpha);
-}
-
-void Fl_Xlib_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-
-  const bool alpha = !!(abs(d) & FL_IMAGE_WITH_ALPHA);
-  if (alpha) d ^= FL_IMAGE_WITH_ALPHA;
-  const int mono = (d>-3 && d<3);
-
-  innards(0,x,y,w,h,d,0,mono,cb,data,alpha);
-}
-
-void Fl_Xlib_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,1,0,0,0);
-}
-
-void Fl_Xlib_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,1,cb,data,0);
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-  if (fl_visual->depth > 16) {
-    fl_color(r,g,b);
-    fl_rectf(x,y,w,h);
-  } else {
-    uchar c[3];
-    c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0,0);
-  }
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_draw_image_mac.cxx
+++ /dev/null
@@ -1,179 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-////////////////////////////////////////////////////////////////
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Printer.H>
-#include <FL/x.H>
-
-#define MAXBUFFER 0x40000 // 256k
-
-static void dataReleaseCB(void *info, const void *data, size_t size)
-{
-  delete[] (uchar *)data;
-}
-
-/*
- * draw an image based on the input parameters
- *
- * buf:       image source data
- * X, Y:      position (in buffer?!)
- * W, H:      size of picture (in pixel?)
- * delta:     distance from pixel to pixel in buf in bytes
- * linedelta: distance from line to line in buf in bytes
- * mono:      if set, pixel is one byte - if zero, pixel is 3 byte
- * cb:        callback to copy image data into (RGB?) buffer
- *   buf:       pointer to first byte in image source
- *   x, y:      position in buffer
- *   w:         width (in bytes?)
- *   dst:       destination buffer
- * userdata:  ?
- */
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int mono,
-		    Fl_Draw_Image_Cb cb, void* userdata)
-{
-  if (!linedelta) linedelta = W*abs(delta);
-
-  uchar *tmpBuf = 0;
-  if (!cb) {
-    if (delta < 0) buf -= (W-1)*(-delta);
-    if (linedelta < 0) buf -= (H-1)*(-linedelta);
-  }
-  const void *array = buf;
-  if (cb || Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) {
-    tmpBuf = new uchar[ H*W*abs(delta) ];
-    if (cb) {
-      for (int i=0; i<H; i++) {
-	cb(userdata, 0, i, W, tmpBuf+i*W*abs(delta));
-      }
-    } else {
-      uchar *p = tmpBuf;
-      for (int i=0; i<H; i++) {
-	memcpy(p, buf+i*abs(linedelta), W*abs(delta));
-	p += W*abs(delta);
-	}
-    }
-    array = (void*)tmpBuf;
-    linedelta = W*abs(delta);
-  }
-  // create an image context
-  CGColorSpaceRef   lut = 0;
-  if (abs(delta) <= 2)
-    lut = CGColorSpaceCreateDeviceGray();
-  else
-    lut = CGColorSpaceCreateDeviceRGB();
-  // a release callback is necessary when the fl_gc is a print context because the image data
-  // must be kept until the page is closed. Thus tmpBuf can't be deleted here. It's too early.
-  CGDataProviderRef src = CGDataProviderCreateWithData( 0L, array, abs(linedelta)*H,
-						       tmpBuf ? dataReleaseCB : NULL
-						       );
-  CGImageRef        img = CGImageCreate( W, H, 8, 8*abs(delta), abs(linedelta),
-                            lut, abs(delta)&1?kCGImageAlphaNone:kCGImageAlphaNoneSkipLast,
-                            //lut, delta&1?kCGImageAlphaNone:kCGImageAlphaLast,
-                            src, 0L, false, kCGRenderingIntentDefault);
-  // draw the image into the destination context
-  if (img) {
-    CGRect rect = CGRectMake( X, Y,  W, H);
-    Fl_X::q_begin_image(rect, 0, 0, W, H);
-    if (linedelta < 0) {
-      CGContextTranslateCTM(fl_gc, 0, H);
-      CGContextScaleCTM(fl_gc, 1, -1);
-    }
-    if (delta < 0) {
-      CGContextTranslateCTM(fl_gc, W, 0);
-      CGContextScaleCTM(fl_gc, -1, 1);
-    }
-    CGContextDrawImage(fl_gc, rect, img);
-    Fl_X::q_end_image();
-    // release all allocated resources
-    CGImageRelease(img);
-  }
-  CGColorSpaceRelease(lut);
-  CGDataProviderRelease(src);
-  if (img) return; // else fall through to slow mode
-  // following the very save (and very slow) way to write the image into the give port
-  CGContextSetShouldAntialias(fl_gc, false);
-  if ( cb )
-  {
-    uchar *tmpBuf = new uchar[ W*4 ];
-    for ( int i=0; i<H; i++ )
-    {
-      uchar *src = tmpBuf;
-      cb( userdata, 0, i, W, tmpBuf );
-      for ( int j=0; j<W; j++ )
-      {
-        if ( mono )
-          { fl_color( src[0], src[0], src[0] ); }
-        else
-          { fl_color( src[0], src[1], src[2] ); }
-        CGContextMoveToPoint(fl_gc, X+j, Y+i);
-        CGContextAddLineToPoint(fl_gc, X+j, Y+i);
-        CGContextStrokePath(fl_gc);
-        src+=delta;
-      }
-    }
-    delete[] tmpBuf;
-  }
-  else
-  {
-    for ( int i=0; i<H; i++ )
-    {
-      const uchar *src = buf+i*linedelta;
-      for ( int j=0; j<W; j++ )
-      {
-        if ( mono )
-          fl_color( src[0], src[0], src[0] );
-        else
-          fl_color( src[0], src[1], src[2] );
-        CGContextMoveToPoint(fl_gc, X+j, Y+i);
-        CGContextAddLineToPoint(fl_gc, X+j, Y+i);
-        CGContextStrokePath(fl_gc);
-        src += delta;
-      }
-    }
-  }
-  CGContextSetShouldAntialias(fl_gc, true);
-}
-
-void Fl_Quartz_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
-}
-void Fl_Quartz_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-}
-void Fl_Quartz_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,1,0,0);
-}
-void Fl_Quartz_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,1,cb,data);
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-  fl_color(r,g,b);
-  fl_rectf(x,y,w,h);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_draw_image_win32.cxx
+++ /dev/null
@@ -1,337 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 image drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// I hope a simple and portable method of drawing color and monochrome
-// images.  To keep this simple, only a single storage type is
-// supported: 8 bit unsigned data, byte order RGB, and pixels are
-// stored packed into rows with the origin at the top-left.  It is
-// possible to alter the size of pixels with the "delta" argument, to
-// add alpha or other information per pixel.  It is also possible to
-// change the origin and direction of the image data by messing with
-// the "delta" and "linedelta", making them negative, though this may
-// defeat some of the shortcuts in translating the image for X.
-
-// Unbelievably (since it conflicts with how most PC software works)
-// Micro$oft picked a bottom-up and BGR storage format for their
-// DIB images.  I'm pretty certain there is a way around this, but
-// I can't find any other than the brute-force method of drawing
-// each line as a separate image.  This may also need to be done
-// if the delta is any amount other than 1, 3, or 4.
-
-////////////////////////////////////////////////////////////////
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Printer.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-#define MAXBUFFER 0x40000 // 256k
-
-#if USE_COLORMAP
-
-// error-diffusion dither into the FLTK colormap
-static void dither(uchar* to, const uchar* from, int w, int delta) {
-  static int ri, gi, bi, dir;
-  int r=ri, g=gi, b=bi;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += from[0]; if (r < 0) r = 0; else if (r>255) r = 255;
-    int rr = r*FL_NUM_RED/256;
-    r -= rr*255/(FL_NUM_RED-1);
-    g += from[1]; if (g < 0) g = 0; else if (g>255) g = 255;
-    int gg = g*FL_NUM_GREEN/256;
-    g -= gg*255/(FL_NUM_GREEN-1);
-    b += from[2]; if (b < 0) b = 0; else if (b>255) b = 255;
-    int bb = b*FL_NUM_BLUE/256;
-    b -= bb*255/(FL_NUM_BLUE-1);
-    *to = uchar(FL_COLOR_CUBE+(bb*FL_NUM_RED+rr)*FL_NUM_GREEN+gg);
-  }
-  ri = r; gi = g; bi = b;
-}
-
-// error-diffusion dither into the FLTK colormap
-static void monodither(uchar* to, const uchar* from, int w, int delta) {
-  static int ri,dir;
-  int r=ri;
-  int d, td;
-  if (dir) {
-    dir = 0;
-    from = from+(w-1)*delta;
-    to = to+(w-1);
-    d = -delta;
-    td = -1;
-  } else {
-    dir = 1;
-    d = delta;
-    td = 1;
-  }
-  for (; w--; from += d, to += td) {
-    r += *from; if (r < 0) r = 0; else if (r>255) r = 255;
-    int rr = r*FL_NUM_GRAY/256;
-    r -= rr*255/(FL_NUM_GRAY-1);
-    *to = uchar(FL_GRAY_RAMP+rr);
-  }
-  ri = r;
-}
-
-#endif // USE_COLORMAP
-
-static int fl_abs(int v) { return v<0 ? -v : v; }
-
-static void innards(const uchar *buf, int X, int Y, int W, int H,
-		    int delta, int linedelta, int depth,
-		    Fl_Draw_Image_Cb cb, void* userdata)
-{
-  char indexed = 0;
-
-#if USE_COLORMAP
-  indexed = (fl_palette != 0);
-#endif
-
-  if (depth==0) depth = 3;
-  if (indexed || !fl_can_do_alpha_blending()) 
-    depth = (depth-1)|1;
-
-  if (!linedelta) linedelta = W*fl_abs(delta);
-
-  int x, y, w, h;
-  fl_clip_box(X,Y,W,H,x,y,w,h);
-  if (w<=0 || h<=0) return;
-  if (buf) buf += (x-X)*delta + (y-Y)*linedelta;
-
-  static U32 bmibuffer[256+12];
-  BITMAPINFO &bmi = *((BITMAPINFO*)bmibuffer);
-  if (!bmi.bmiHeader.biSize) {
-    bmi.bmiHeader.biSize = sizeof(bmi)-4; // does it use this to determine type?
-    bmi.bmiHeader.biPlanes = 1;
-    bmi.bmiHeader.biCompression = BI_RGB;
-    bmi.bmiHeader.biXPelsPerMeter = 0;
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-    bmi.bmiHeader.biClrUsed = 0;
-    bmi.bmiHeader.biClrImportant = 0;
-  }
-#if USE_COLORMAP
-  if (indexed) {
-    for (short i=0; i<256; i++) {
-      *((short*)(bmi.bmiColors)+i) = i;
-    }
-  } else
-#endif
-  if (depth<3) {
-    RGBQUAD *bmi_colors = &bmi.bmiColors[0];	// suppress warning (STR #3199)
-    for (int i=0; i<256; i++) {
-      bmi_colors[i].rgbBlue = (uchar)i;		// bmi.bmiColors[i]...
-      bmi_colors[i].rgbGreen = (uchar)i;
-      bmi_colors[i].rgbRed = (uchar)i;
-      bmi_colors[i].rgbReserved = (uchar)0; // must be zero
-    }
-  }
-  bmi.bmiHeader.biWidth = w;
-#if USE_COLORMAP
-  bmi.bmiHeader.biBitCount = indexed ? 8 : depth*8;
-  int pixelsize = indexed ? 1 : depth;
-#else
-  bmi.bmiHeader.biBitCount = depth*8;
-  int pixelsize = depth;
-#endif
-  if (depth==2) { // special case: gray with alpha
-    bmi.bmiHeader.biBitCount = 32;
-    pixelsize = 4;
-  }
-  int linesize = (pixelsize*w+3)&~3;
-  
-  static U32* buffer;
-  static long buffer_size;
-  int blocking = h;
-  {int size = linesize*h;
-  // when printing, don't limit buffer size not to get a crash in StretchDIBits
-  if (size > MAXBUFFER && Fl_Surface_Device::surface() == Fl_Display_Device::display_device()) {
-    size = MAXBUFFER;
-    blocking = MAXBUFFER/linesize;
-  }
-  if (size > buffer_size) {
-    delete[] buffer;
-    buffer_size = size;
-    buffer = new U32[(size+3)/4];
-  }}
-  bmi.bmiHeader.biHeight = blocking;
-  static U32* line_buffer;
-  if (!buf) {
-    int size = W*delta;
-    static int line_buf_size;
-    if (size > line_buf_size) {
-      delete[] line_buffer;
-      line_buf_size = size;
-      line_buffer = new U32[(size+3)/4];
-    }
-  }
-  for (int j=0; j<h; ) {
-    int k;
-    for (k = 0; j<h && k<blocking; k++, j++) {
-      const uchar* from;
-      if (!buf) { // run the converter:
-	cb(userdata, x-X, y-Y+j, w, (uchar*)line_buffer);
-	from = (uchar*)line_buffer;
-      } else {
-	from = buf;
-	buf += linedelta;
-      }
-      uchar *to = (uchar*)buffer+(blocking-k-1)*linesize;
-#if USE_COLORMAP
-      if (indexed) {
-	if (depth<3)
-	  monodither(to, from, w, delta);
-	else 
-	  dither(to, from, w, delta);
-	to += w;
-      } else
-#endif
-      {
-        int i;
-        switch (depth) {
-          case 1: 
-            for (i=w; i--; from += delta) *to++ = *from;
-            break;
-          case 2:
-	    for (i=w; i--; from += delta, to += 4) {
-	      uchar a = from[1];
-	      uchar gray = (from[0]*a)>>8;
-	      to[0] = gray;
-	      to[1] = gray;
-	      to[2] = gray;
-	      to[3] = a;
-            }
-            break;
-          case 3:
-	    for (i=w; i--; from += delta, to += 3) {
-	      uchar r = from[0];
-	      to[0] = from[2];
-	      to[1] = from[1];
-	      to[2] = r;
-            }
-            break;          
-          case 4:
-	    for (i=w; i--; from += delta, to += 4) {
-              uchar a = from[3];
-	      uchar r = from[0];
-	      to[0] = (from[2]*a)>>8;
-	      to[1] = (from[1]*a)>>8;
-	      to[2] = (r*a)>>8;
-	      to[3] = from[3];
-            }
-            break;          
-        }            
-      }
-    }
-    if (Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) {
-      // if print context, device and logical units are not equal, so SetDIBitsToDevice
-      // does not do the expected job, whereas StretchDIBits does it.
-      StretchDIBits(fl_gc, x, y+j-k, w, k, 0, 0, w, k,
-		    (LPSTR)((uchar*)buffer+(blocking-k)*linesize),
-		    &bmi,
-#if USE_COLORMAP
-		    indexed ? DIB_PAL_COLORS : DIB_RGB_COLORS
-#else
-		    DIB_RGB_COLORS
-#endif
-		    , SRCCOPY );
-      delete[] buffer;
-      buffer = NULL;
-      buffer_size = 0;
-    }
-    else {
-      SetDIBitsToDevice(fl_gc, x, y+j-k, w, k, 0, 0, 0, k,
-			(LPSTR)((uchar*)buffer+(blocking-k)*linesize),
-			&bmi,
-#if USE_COLORMAP
-			indexed ? DIB_PAL_COLORS : DIB_RGB_COLORS
-#else
-			DIB_RGB_COLORS
-#endif
-			);
-      }
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(buf,x,y,w,h,d,l,fl_abs(d),0,0);
-  } else {
-    innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-  } else {
-    innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image_mono(const uchar* buf, int x, int y, int w, int h, int d, int l){
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(buf,x,y,w,h,d,l,1,0,0);
-  } else {
-    innards(buf,x,y,w,h,d,l,1,0,0);
-  }
-}
-
-void Fl_GDI_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb cb, void* data,
-		   int x, int y, int w, int h,int d) {
-  if (fl_abs(d)&FL_IMAGE_WITH_ALPHA) {
-    d ^= FL_IMAGE_WITH_ALPHA;
-    innards(0,x,y,w,h,d,0,1,cb,data);
-  } else {
-    innards(0,x,y,w,h,d,0,1,cb,data);
-  }
-}
-
-void fl_rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
-#if USE_COLORMAP
-  // use the error diffusion dithering code to produce a much nicer block:
-  if (fl_palette) {
-    uchar c[3];
-    c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0);
-    return;
-  }
-#endif
-  fl_color(r,g,b);
-  fl_rectf(x,y,w,h);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_draw_pixmap.cxx
+++ /dev/null
@@ -1,295 +1,0 @@
-//
-// "$Id$"
-//
-// Pixmap drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// NOTE: I believe many of the following comments (between the dash markers)
-// are no longer accurate:
-// --------------------------------------------------------------------
-// Implemented without using the xpm library (which I can't use because
-// it interferes with the color cube used by fl_draw_image).
-// Current implementation is cheap and slow, and works best on a full-color
-// display.  Transparency is not handled, and colors are dithered to
-// the color cube.  Color index is achieved by adding the id
-// characters together!  Also mallocs a lot of temporary memory!
-// Notice that there is no pixmap file interface.  This is on purpose,
-// as I want to discourage programs that require support files to work.
-// All data needed by a program ui should be compiled in!!!
-// --------------------------------------------------------------------
-// The above comments were checked in as r2, and much has changed since then;
-// transparency added, color cube not required, etc.      -erco Oct 20 2013
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include "flstring.h"
-
-static int ncolors, chars_per_pixel;
-
-/**
-  Get the dimensions of a pixmap.
-  An XPM image contains the dimensions in its data. This function
-  returns the width and height.
-  \param[in]  data pointer to XPM image data.
-  \param[out] w,h  width and height of image
-  \returns non-zero if the dimensions were parsed OK
-  \returns 0 if there were any problems
-  */
-int fl_measure_pixmap(/*const*/ char* const* data, int &w, int &h) {
-  return fl_measure_pixmap((const char*const*)data,w,h);
-}
-
-/**
-  Get the dimensions of a pixmap.
-  \see fl_measure_pixmap(char* const* data, int &w, int &h)
-  */
-int fl_measure_pixmap(const char * const *cdata, int &w, int &h) {
-  int i = sscanf(cdata[0],"%d%d%d%d",&w,&h,&ncolors,&chars_per_pixel);
-  if (i<4 || w<=0 || h<=0 ||
-      (chars_per_pixel!=1 && chars_per_pixel!=2) ) return w=0;
-  return 1;
-}
-
-uchar **fl_mask_bitmap; // if non-zero, create bitmap and store pointer here
-
-/**
-  Draw XPM image data, with the top-left corner at the given position.
-  The image is dithered on 8-bit displays so you won't lose color
-  space for programs displaying both images and pixmaps.
-  \param[in] data pointer to XPM image data
-  \param[in] x,y  position of top-left corner
-  \param[in] bg   background color
-  \returns 0 if there was any error decoding the XPM data.
-  */
-int fl_draw_pixmap(/*const*/ char* const* data, int x,int y,Fl_Color bg) {
-  return fl_draw_pixmap((const char*const*)data,x,y,bg);
-}
-
-#ifdef WIN32
-// to compute an unused color to be used for the pixmap background
-FL_EXPORT UINT win_pixmap_bg_color; // the RGB() of the pixmap background color
-static int     color_count; 	    // # of non-transparent colors used in pixmap
-typedef struct { uchar r; uchar g; uchar b; } UsedColor;
-static UsedColor *used_colors;
-
-// Makes an RGB triplet different from all the colors used in the pixmap
-// and compute win_pixmap_bg_color from this triplet
-static void make_unused_color(uchar &r, uchar &g, uchar &b) {
-  int i;
-  r = 2; g = 3; b = 4;
-  while (1) {
-    for ( i=0; i<color_count; i++ )
-      if ( used_colors[i].r == r &&
-           used_colors[i].g == g &&
-           used_colors[i].b == b )
-	break;
-    if (i >= color_count) {
-      free((void*)used_colors); used_colors = NULL;
-      win_pixmap_bg_color = RGB(r, g, b);
-      return;
-    }
-    if (r < 255) {
-      r++;
-    } else {
-      r = 0;
-      if (g < 255) {
-        g++;
-      } else {
-	g = 0;
-	b++;
-      }
-    }
-  }
-}
-#endif
-
-int fl_convert_pixmap(const char*const* cdata, uchar* out, Fl_Color bg) {
-  int w, h;
-  const uchar*const* data = (const uchar*const*)(cdata+1);
-
-  if (!fl_measure_pixmap(cdata, w, h))
-    return 0;
-
-  if ((chars_per_pixel < 1) || (chars_per_pixel > 2))
-    return 0;
-
-  typedef uchar uchar4[4];
-  uchar4 *colors = new uchar4[1<<(chars_per_pixel*8)];
-
-#ifdef WIN32
-  uchar *transparent_c = (uchar *)0; // such that transparent_c[0,1,2] are the RGB of the transparent color
-  color_count = 0;
-  used_colors = (UsedColor*)malloc(abs(ncolors) * sizeof(UsedColor));
-#endif
-
-  if (ncolors < 0) {	// FLTK (non standard) compressed colormap
-    ncolors = -ncolors;
-    const uchar *p = *data++;
-    // if first color is ' ' it is transparent (put it later to make
-    // it not be transparent):
-    if (*p == ' ') {
-      uchar* c = colors[(int)' '];
-      Fl::get_color(bg, c[0], c[1], c[2]); c[3] = 0;
-#ifdef WIN32
-      transparent_c = c;
-#endif
-      p += 4;
-      ncolors--;
-    }
-    // read all the rest of the colors:
-    for (int i=0; i < ncolors; i++) {
-      uchar* c = colors[*p++];
-#ifdef WIN32
-      used_colors[color_count].r = *(p+0);
-      used_colors[color_count].g = *(p+1);
-      used_colors[color_count].b = *(p+2);
-      color_count++;
-#endif
-      *c++ = *p++;
-      *c++ = *p++;
-      *c++ = *p++;
-      *c = 255;
-    }
-  } else {	// normal XPM colormap with names
-    for (int i=0; i<ncolors; i++) {
-      const uchar *p = *data++;
-      // the first 1 or 2 characters are the color index:
-      int ind = *p++;
-      uchar* c;
-      if (chars_per_pixel>1)
-	ind = (ind<<8)|*p++;
-      c = colors[ind];
-      // look for "c word", or last word if none:
-      const uchar *previous_word = p;
-      for (;;) {
-	while (*p && isspace(*p)) p++;
-	uchar what = *p++;
-	while (*p && !isspace(*p)) p++;
-	while (*p && isspace(*p)) p++;
-	if (!*p) {p = previous_word; break;}
-	if (what == 'c') break;
-	previous_word = p;
-	while (*p && !isspace(*p)) p++;
-      }
-      int parse = fl_parse_color((const char*)p, c[0], c[1], c[2]);
-      c[3] = 255;
-      if (parse) {
-#ifdef WIN32
-        used_colors[color_count].r = c[0];
-        used_colors[color_count].g = c[1];
-        used_colors[color_count].b = c[2];
-	color_count++;
-#endif
-      } else {
-        // assume "None" or "#transparent" for any errors
-	// "bg" should be transparent...
-	Fl::get_color(bg, c[0], c[1], c[2]);
-        c[3] = 0;
-#ifdef WIN32
-	transparent_c = c;
-#endif
-      } // if parse
-    } // for ncolors
-  } // if ncolors
-#ifdef WIN32
-  if (transparent_c) {
-    make_unused_color(transparent_c[0], transparent_c[1], transparent_c[2]);
-  } else {
-    uchar r, g, b;
-    make_unused_color(r, g, b);
-  }
-#endif
-
-  U32 *q = (U32*)out;
-  for (int Y = 0; Y < h; Y++) {
-      const uchar* p = data[Y];
-      if (chars_per_pixel <= 1) {
-      for (int X = 0; X < w; X++)
-        memcpy(q++, colors[*p++], 4);
-      } else {
-      for (int X = 0; X < w; X++) {
-        int ind = (*p++)<<8;
-        ind |= *p++;
-        memcpy(q++, colors[ind], 4);
-	}
-      }
-    }
-  delete[] colors;
-  return 1;
-}
-
-/**
-  Draw XPM image data, with the top-left corner at the given position.
-  \see fl_draw_pixmap(char* const* data, int x, int y, Fl_Color bg)
-  */
-int fl_draw_pixmap(const char*const* cdata, int x, int y, Fl_Color bg) {
-  int w, h;
-
-  if (!fl_measure_pixmap(cdata, w, h))
-    return 0;
-
-  uchar *buffer = new uchar[w*h*4];
-
-  if (!fl_convert_pixmap(cdata, buffer, bg)) {
-    delete[] buffer;
-    return 0;
-  }
-
-  // FIXME: Hack until fl_draw_image() supports alpha properly
-#ifdef  __APPLE_QUARTZ__
-  if (Fl_Surface_Device::surface() == Fl_Display_Device::display_device()) {
-    Fl_RGB_Image* rgb = new Fl_RGB_Image(buffer, w, h, 4);
-    rgb->alloc_array = 1;
-    rgb->draw(x, y);
-    delete rgb;
-    return 1;
-  } else {
-#endif // __APPLE_QUARTZ__
-  // build the mask bitmap used by Fl_Pixmap:
-  if (fl_mask_bitmap) {
-    int W = (w+7)/8;
-    uchar* bitmap = new uchar[W * h];
-    *fl_mask_bitmap = bitmap;
-    const uchar *p = &buffer[3];
-    uchar b = 0;
-    for (int Y = 0; Y < h; Y++) {
-      b = 0;
-      for (int X = 0, bit = 1; X < w; X++, p += 4) {
-        if (*p > 127)
-          b |= bit;
-	    bit <<= 1;
-        if (bit > 0x80 || X == w-1) {
-	    *bitmap++ = b;
-          bit = 1;
-	    b = 0;
-	  }
-      } // if chars_per_pixel
-    } // for Y
-  }
-
-  fl_draw_image(buffer, x, y, w, h, 4);
-
-#ifdef __APPLE_QUARTZ__
-  }
-#endif
-  delete[] buffer;
-  return 1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_encoding_latin1.cxx
+++ /dev/null
@@ -1,128 +1,0 @@
-//
-// "$Id$"
-//
-// Convert MSWindows-1252 (Latin-1) encoded text to the local encoding.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-#ifdef __APPLE__
- 
-// These function assume a western code page. If you need to support 
-// scripts that are not part of this code page, you might want to
-// take a look at FLTK2, which uses utf8 for text encoding.
-//
-// By keeping these conversion tables in their own module, they will not
-// be statically linked (by a smart linker) unless actually used.
-//
-// On MS-Windows, nothing need to be converted. We simply return the 
-// original pointer.
-//
-// Most X11 implementations seem to default to Latin-1 as a code since it
-// is a superset of ISO 8859-1, the original wetsern codepage on X11.
-//
-// Apple's OS X however renders text in MacRoman for western settings. The
-// lookup tables below will convert all common character codes and replace
-// unknown characters with an upsidedown question mark.
-
-// This table converts MSWindows-1252/Latin 1 into MacRoman encoding
-static uchar latin2roman[128] = {
-0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0, 
-0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9, 
-0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8, 
-0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 
-0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 
-0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7, 
-0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 
-0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8
-};
-
-// This table converts MacRoman into MSWindows-1252/Latin 1
-static uchar roman2latin[128] = {
-0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8, 
-0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc, 
-0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8, 
-0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8, 
-0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c, 
-0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf, 
-0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4, 
-0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf
-};
-
-static char *buf = 0;
-static int n_buf = 0;
-
-const char *fl_latin1_to_local(const char *t, int n)  
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127) 
-      *dst = latin2roman[c-128];
-    else
-      *dst = c;
-  }
-  //*dst = 0; // this would be wrong!
-  return buf;
-}
-
-const char *fl_local_to_latin1(const char *t, int n)
-{
-  if (n==-1) n = strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127)
-      *dst++ = roman2latin[c-128];
-    else
-      *dst++ = c;
-  }
-  //*dst = 0; // this would be wrong
-  return buf;
-}
-
-#else 
-
-const char *fl_latin1_to_local(const char *t, int) 
-{
-  return t;
-}
-
-const char *fl_local_to_latin1(const char *t, int)
-{
-  return t;
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_encoding_mac_roman.cxx
+++ /dev/null
@@ -1,125 +1,0 @@
-//
-// "$Id$"
-//
-// Convert Mac Roman encoded text to the local encoding.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/fl_draw.H>
-#include <FL/Enumerations.H>
-#include <stdlib.h>
-#include "flstring.h"
-
-// These function assume a western code page. If you need to support 
-// scripts that are not part of this code page, you might want to
-// take a look at FLTK2, which uses utf8 for text encoding.
-//
-// By keeping these conversion tables in their own module, they will not
-// be statically linked (by a smart linker) unless actually used.
-//
-// On Mac OS X, nothing need to be converted. We simply return the 
-// original pointer.
-//
-// MSWindows and X11 render text in ISO or Latin-1 for western settings. The
-// lookup tables below will convert all common character codes and replace
-// unknown characters with an upsidedown question mark.
-
-#ifdef __APPLE__
-
-const char *fl_mac_roman_to_local(const char *t, int)
-{
-  return t;
-}
-
-const char *fl_local_to_mac_roman(const char *t, int)
-{
-  return t;
-}
-
-#else
-
-// This table converts MSWindows-1252/Latin 1 into MacRoman encoding
-static uchar latin2roman[128] = {
-0xdb, 0xc0, 0xe2, 0xc4, 0xe3, 0xc9, 0xa0, 0xe0, 0xf6, 0xe4, 0xc0, 0xdc, 0xce, 0xc0, 0xc0, 0xc0, 
-0xc0, 0xd4, 0xd5, 0xd2, 0xd3, 0xa5, 0xd0, 0xd1, 0xf7, 0xaa, 0xc0, 0xdd, 0xcf, 0xc0, 0xc0, 0xd9, 
-0xca, 0xc1, 0xa2, 0xa3, 0xc0, 0xb4, 0xc0, 0xa4, 0xac, 0xa9, 0xbb, 0xc7, 0xc2, 0xc0, 0xa8, 0xf8, 
-0xa1, 0xb1, 0xc0, 0xc0, 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xc0, 0xbc, 0xc8, 0xc0, 0xc0, 0xc0, 0xc0, 
-0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 
-0xc0, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xc0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, 0xc0, 0xc0, 0xa7, 
-0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 
-0xc0, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc0, 0xc0, 0xd8
-};
-
-// This table converts MacRoman into MSWindows-1252/Latin 1
-static uchar roman2latin[128] = {
-0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1, 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8, 
-0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3, 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc, 
-0x86, 0xb0, 0xa2, 0xa3, 0xa7, 0x95, 0xb6, 0xdf, 0xae, 0xa9, 0x99, 0xb4, 0xa8, 0xbf, 0xc6, 0xd8, 
-0xbf, 0xb1, 0xbf, 0xbf, 0xa5, 0xb5, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xaa, 0xba, 0xbf, 0xe6, 0xf8, 
-0xbf, 0xa1, 0xac, 0xbf, 0x83, 0xbf, 0xbf, 0xab, 0xbb, 0x85, 0xa0, 0xc0, 0xc3, 0xd5, 0x8c, 0x9c, 
-0x96, 0x97, 0x93, 0x94, 0x91, 0x92, 0xf7, 0xbf, 0xff, 0x9f, 0xbf, 0x80, 0x8b, 0x9b, 0xbf, 0xbf, 
-0x87, 0xb7, 0x82, 0x84, 0x89, 0xc2, 0xca, 0xc1, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4, 
-0xbf, 0xd2, 0xda, 0xdb, 0xd9, 0xbf, 0x88, 0x98, 0xaf, 0xbf, 0xbf, 0xbf, 0xb8, 0xbf, 0xbf, 0xbf
-};
-
-static char *buf = 0;
-static int n_buf = 0;
-
-const char *fl_local_to_mac_roman(const char *t, int n)  
-{
-  if (n==-1) n = (int) strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src;
-    if (c>127) 
-      *dst = latin2roman[c-128];
-    else
-      *dst = c;
-  }
-  //*dst = 0; // this would be wrong!
-  return buf;
-}
-
-const char *fl_mac_roman_to_local(const char *t, int n)
-{
-  if (n==-1) n = (int) strlen(t);
-  if (n<=n_buf) {
-    n_buf = (n + 257) & 0x7fffff00;
-    if (buf) free(buf);
-    buf = (char*)malloc(n_buf);
-  }
-  const uchar *src = (const uchar*)t;
-  uchar *dst = (uchar*)buf;
-  for ( ; n>0; n--) {
-    uchar c = *src++;
-    if (c>127)
-      *dst++ = roman2latin[c-128];
-    else
-      *dst++ = c;
-  }
-  //*dst = 0; // this would be wrong
-  return buf;
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_engraved_label.cxx
+++ /dev/null
@@ -1,84 +1,0 @@
-//
-// "$Id$"
-//
-// Engraved label drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing code for XForms style engraved & embossed labels
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/fl_draw.H>
-
-// data[] is dx, dy, color triples
-
-static void innards(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align,
-    const int data[][3], int n)
-{
-  Fl_Align a1 = align;
-  if (a1 & FL_ALIGN_CLIP) {
-    fl_push_clip(X, Y, W, H); a1 = (Fl_Align)(a1&~FL_ALIGN_CLIP);}
-  fl_font((Fl_Font)o->font, o->size);
-  for (int i = 0; i < n; i++) {
-    fl_color((Fl_Color)(i < n-1 ? data[i][2] : o->color));
-    fl_draw(o->value, X+data[i][0], Y+data[i][1], W, H, a1);
-  }
-  if (align & FL_ALIGN_CLIP) fl_pop_clip();
-}
-
-static void fl_shadow_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static const int data[2][3] = {{2,2,FL_DARK3},{0,0,0}};
-  innards(o, X, Y, W, H, align, data, 2);
-}
-
-static void fl_engraved_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static const int data[7][3] = {
-    {1,0,FL_LIGHT3},{1,1,FL_LIGHT3},{0,1,FL_LIGHT3},
-    {-1,0,FL_DARK3},{-1,-1,FL_DARK3},{0,-1,FL_DARK3},
-    {0,0,0}};
-  innards(o, X, Y, W, H, align, data, 7);
-}
-
-static void fl_embossed_label(
-    const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  static const int data[7][3] = {
-    {-1,0,FL_LIGHT3},{-1,-1,FL_LIGHT3},{0,-1,FL_LIGHT3},
-    {1,0,FL_DARK3},{1,1,FL_DARK3},{0,1,FL_DARK3},
-    {0,0,0}};
-  innards(o, X, Y, W, H, align, data, 7);
-}
-
-Fl_Labeltype fl_define_FL_SHADOW_LABEL() {
-  Fl::set_labeltype(_FL_SHADOW_LABEL, fl_shadow_label, 0);
-  return _FL_SHADOW_LABEL;
-}
-Fl_Labeltype fl_define_FL_ENGRAVED_LABEL() {
-  Fl::set_labeltype(_FL_ENGRAVED_LABEL, fl_engraved_label, 0);
-  return _FL_ENGRAVED_LABEL;
-}
-Fl_Labeltype fl_define_FL_EMBOSSED_LABEL() {
-  Fl::set_labeltype(_FL_EMBOSSED_LABEL, fl_embossed_label, 0);
-  return _FL_EMBOSSED_LABEL;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_file_dir.cxx
+++ /dev/null
@@ -1,200 +1,0 @@
-//
-// "$Id$"
-//
-// File chooser widget for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "flstring.h"
-#include <FL/filename.H>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_ask.H>
-
-
-static Fl_File_Chooser	*fc = (Fl_File_Chooser *)0;
-static void		(*current_callback)(const char*) = 0;
-static const char	*current_label = fl_ok;
-
-
-// Do a file chooser callback...
-static void callback(Fl_File_Chooser *, void*) {
-  if (current_callback && fc->value())
-    (*current_callback)(fc->value());
-}
-
-// Pop up a file chooser dialog window and wait until it is closed...
-static void popup(Fl_File_Chooser *fc) {
-  fc->show();
-
-  // deactivate Fl::grab(), because it is incompatible with modal windows
-  Fl_Window* g = Fl::grab();
-  if (g) Fl::grab(0);
-
-  while (fc->shown())
-    Fl::wait();
-
-  if (g) // regrab the previous popup menu, if there was one
-    Fl::grab(g);
-}
-
-
-/** \addtogroup  group_comdlg 
-    @{ */
-
-/** 
-    Set the file chooser callback
-    \note \#include <FL/Fl_File_Chooser.H>
-    \relates Fl_File_Chooser
-*/
-void fl_file_chooser_callback(void (*cb)(const char*)) {
-  current_callback = cb;
-}
-
-
-/** 
-    Set the "OK" button label
-    \note \#include <FL/Fl_File_Chooser.H>
-    \relates Fl_File_Chooser
-*/
-void fl_file_chooser_ok_label(const char *l) {
-  if (l) current_label = l;
-  else current_label = fl_ok;
-}
-
-/** 
-    Shows a file chooser dialog and gets a filename. 
-    \note \#include <FL/Fl_File_Chooser.H>
-    \image html Fl_File_Chooser.jpg 
-    \image latex  Fl_File_Chooser.jpg "Fl_File_Chooser" width=12cm
-    \param[in] message text in title bar
-    \param[in] pat filename pattern filter
-    \param[in] fname initial/default filename selection
-    \param[in] relative 0 for absolute path name, relative path name otherwise
-    \return the user selected filename, in absolute or relative format 
-            or NULL if user cancels
-    \relates Fl_File_Chooser
-*/
-char *					// O - Filename or NULL
-fl_file_chooser(const char *message,	// I - Message in titlebar
-                const char *pat,	// I - Filename pattern
-		const char *fname,	// I - Initial filename selection
-		int        relative) {	// I - 0 for absolute path
-  static char	retname[FL_PATH_MAX];		// Returned filename
-
-  if (!fc) {
-    if (!fname || !*fname) fname = ".";
-
-    fc = new Fl_File_Chooser(fname, pat, Fl_File_Chooser::CREATE, message);
-    fc->callback(callback, 0);
-  } else {
-    fc->type(Fl_File_Chooser::CREATE);
-    // see, if we use the same pattern between calls
-    char same_pattern = 0;
-    const char *fcf = fc->filter();
-    if ( fcf && pat && strcmp(fcf, pat)==0)
-      same_pattern = 1;
-    else if ( (fcf==0L || *fcf==0) && (pat==0L || *pat==0) )
-      same_pattern = 1;
-    // now set the pattern to the new pattern (even if they are the same)
-    fc->filter(pat);
-    fc->label(message);
-
-    if (!fname) { // null pointer reuses same filename if pattern didn't change
-      if (!same_pattern && fc->value()) {
-	// if pattern is different, remove name but leave old directory:
-	strlcpy(retname, fc->value(), sizeof(retname));
-
-	char *p = strrchr(retname, '/');
-
-        if (p) {
-	  // If the filename is "/foo", then the directory will be "/", not
-	  // ""...
-	  if (p == retname)
-	    retname[1] = '\0';
-	  else
-	    *p = '\0';
-	}
-	// Set the directory...
-	fc->value(retname);
-      } else {
-        // re-use the previously selected name
-      }
-    } else if (!*fname) { // empty filename reuses directory with empty name
-      const char *fcv = fc->value();
-      if (fcv) 
-        strlcpy(retname, fc->value(), sizeof(retname));
-      else 
-        *retname = 0;
-      const char *n = fl_filename_name(retname);
-      if (n) *((char*)n) = 0;
-      fc->value("");
-      fc->directory(retname);
-    } else {
-       fc->value(fname);
-    }
-  }
-
-  fc->ok_label(current_label);
-  popup(fc);
-  if (fc->value() && relative) {
-    fl_filename_relative(retname, sizeof(retname), fc->value());
-
-    return retname;
-  } else if (fc->value()) return (char *)fc->value();
-  else return 0;
-}
-
-/** Shows a file chooser dialog and gets a directory.
-    \note \#include <FL/Fl_File_Chooser.H>
-    \param[in] message title bar text
-    \param[in] fname initial/default directory name
-    \param[in] relative 0 for absolute path return, relative otherwise
-    \return the directory path string chosen by the user or NULL if user cancels
-    \relates Fl_File_Chooser
-*/
-char *					// O - Directory or NULL
-fl_dir_chooser(const char *message,	// I - Message for titlebar
-               const char *fname,	// I - Initial directory name
-	       int        relative)	// I - 0 for absolute
-{
-  static char	retname[FL_PATH_MAX];		// Returned directory name
-
-  if (!fc) {
-    if (!fname || !*fname) fname = ".";
-
-    fc = new Fl_File_Chooser(fname, "*", Fl_File_Chooser::CREATE |
-                                         Fl_File_Chooser::DIRECTORY, message);
-    fc->callback(callback, 0);
-  } else {
-    fc->type(Fl_File_Chooser::CREATE | Fl_File_Chooser::DIRECTORY);
-    fc->filter("*");
-    if (fname && *fname) fc->value(fname);
-    fc->label(message);
-  }
-
-  popup(fc);
-
-  if (fc->value() && relative) {
-    fl_filename_relative(retname, sizeof(retname), fc->value());
-
-    return retname;
-  } else if (fc->value()) return (char *)fc->value();
-  else return 0;
-}
-/** @} */
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_font.cxx
+++ /dev/null
@@ -1,96 +1,0 @@
-//
-// "$Id$"
-//
-// Font selection code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifdef WIN32
-# ifndef WIN32_LEAN_AND_MEAN
-#  define WIN32_LEAN_AND_MEAN
-# endif
-/* We require Windows 2000 features such as GetGlyphIndices */
-# if !defined(WINVER) || (WINVER < 0x0500)
-#  ifdef WINVER
-#   undef WINVER
-#  endif
-#  define WINVER 0x0500
-# endif
-# if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0500)
-#  ifdef _WIN32_WINNT
-#   undef _WIN32_WINNT
-#  endif
-#  define _WIN32_WINNT 0x0500
-# endif
-#endif
-
-// Select fonts from the FLTK font table.
-#include "flstring.h"
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include "Fl_Font.H"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include "fl_font_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_font_mac.cxx"
-#elif USE_XFT
-#  include "fl_font_xft.cxx"
-#else
-#  include "fl_font_x.cxx"
-#endif // WIN32
-
-#if ! (defined(WIN32) || defined(__APPLE__))
-XFontStruct *fl_X_core_font()
-{
-  return fl_xfont.value();
-}
-#endif
-
-double fl_width(const char* c) {
-  if (c) return fl_width(c, (int) strlen(c));
-  else return 0.0f;
-}
-
-void fl_draw(const char* str, int x, int y) {
-  fl_draw(str, (int) strlen(str), x, y);
-}
-
-void fl_draw(int angle, const char* str, int x, int y) {
-  fl_draw(angle, str, (int) strlen(str), x, y);//must be fixed!
-}
-
-void fl_text_extents(const char *c, int &dx, int &dy, int &w, int &h) {
-  if (c)  fl_text_extents(c, (int) strlen(c), dx, dy, w, h);
-  else {
-    w = 0; h = 0;
-    dx = 0; dy = 0;
-  }
-} // fl_text_extents
-
-
-void fl_draw(const char* str, int l, float x, float y) {
-#ifdef __APPLE__
-  fl_graphics_driver->draw(str, l, x, y);
-#else
-  fl_draw(str, l, (int)x, (int)y);
-#endif
-}
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_font_mac.cxx
+++ /dev/null
@@ -1,586 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS font selection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <math.h>
-
-Fl_Fontdesc* fl_fonts = NULL;
-
-/* from fl_utf.c */
-extern unsigned fl_utf8toUtf16(const char* src, unsigned srclen, unsigned short* dst, unsigned dstlen);
-
-static CGAffineTransform font_mx = { 1, 0, 0, -1, 0, 0 };
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static CFMutableDictionaryRef attributes = NULL;
-#endif
-
-const int Fl_X::CoreText_threshold = 100500; // this represents Mac OS 10.5
-// condition when the ATSU API is available at compile time
-#define HAS_ATSU (!__LP64__) && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize Size) {
-  next = 0;
-#  if HAVE_GL
-  listbase = 0;
-#  endif
-
-//  knowWidths = 0;
-    // OpenGL needs those for its font handling
-  size = Size;
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= Fl_X::CoreText_threshold) {
-  CFStringRef str = CFStringCreateWithCString(NULL, name, kCFStringEncodingUTF8);
-  fontref = CTFontCreateWithName(str, size, NULL);
-  CGGlyph glyph[2];
-  const UniChar A[2]={'W','.'};
-  CTFontGetGlyphsForCharacters(fontref, A, glyph, 2);
-  CGSize advances[2];
-  double w;
-  CTFontGetAdvancesForGlyphs(fontref, kCTFontHorizontalOrientation, glyph, advances, 2);
-  w = advances[0].width;
-  if ( fabs(advances[0].width - advances[1].width) < 1E-2 ) {//this is a fixed-width font
-    // slightly rescale fixed-width fonts so the character width has an integral value
-    CFRelease(fontref);
-    CGFloat fsize = size / ( w/floor(w + 0.5) );
-    fontref = CTFontCreateWithName(str, fsize, NULL);
-    w = CTFontGetAdvancesForGlyphs(fontref, kCTFontHorizontalOrientation, glyph, NULL, 1);
-  }
-  CFRelease(str);
-  ascent = (short)(CTFontGetAscent(fontref) + 0.5);
-  descent = (short)(CTFontGetDescent(fontref) + 0.5);
-  q_width = w + 0.5;
-  for (unsigned i = 0; i < sizeof(width)/sizeof(float*); i++) width[i] = NULL;
-  if (!attributes) {
-    static CFNumberRef zero_ref;
-    float zero = 0.;
-    zero_ref = CFNumberCreate(NULL, kCFNumberFloat32Type, &zero);
-    // deactivate kerning for all fonts, so that string width = sum of character widths
-    // which allows fast fl_width() implementation.
-    attributes = CFDictionaryCreateMutable(kCFAllocatorDefault,
-					   3,
-					   &kCFTypeDictionaryKeyCallBacks,
-					   &kCFTypeDictionaryValueCallBacks);
-    CFDictionarySetValue (attributes, kCTKernAttributeName, zero_ref);
-  }
-  if (ascent == 0) { // this may happen with some third party fonts
-    CFDictionarySetValue (attributes, kCTFontAttributeName, fontref);
-    CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR("Wj"), attributes);
-    CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-    CFRelease(mastr);
-    CGFloat fascent, fdescent;
-    CTLineGetTypographicBounds(ctline, &fascent, &fdescent, NULL);
-    CFRelease(ctline);
-    ascent = (short)(fascent + 0.5);
-    descent = (short)(fdescent + 0.5);
-    }
-}
-else {
-#endif
-#if HAS_ATSU
-  OSStatus err;
-    // fill our structure with a few default values
-  ascent = Size*3/4.;
-  descent = Size-ascent;
-  q_width = Size*2/3.;
-    // now we allocate everything needed to render text in this font later
-    // get us the default layout and style
-  err = ATSUCreateTextLayout(&layout);
-  UniChar mTxt[2] = { 65, 0 };
-  err = ATSUSetTextPointerLocation(layout, mTxt, kATSUFromTextBeginning, 1, 1);
-  err = ATSUCreateStyle(&style);
-  err = ATSUSetRunStyle(layout, style, kATSUFromTextBeginning, kATSUToTextEnd);
-    // now set the actual font, size and attributes. We also set the font matrix to
-    // render our font up-side-down, so when rendered through our inverted CGContext,
-    // text will appear normal again.
-  Fixed fsize = IntToFixed(Size);
-  ATSUFontID fontID;
-  ATSUFindFontFromName(name, strlen(name), kFontFullName, kFontMacintoshPlatform, kFontNoScriptCode, kFontEnglishLanguage, &fontID);
-
-  // draw the font upside-down... Compensate for fltk/OSX origin differences
-  ATSUAttributeTag sTag[] = { kATSUFontTag, kATSUSizeTag, kATSUFontMatrixTag };
-  ByteCount sBytes[] = { sizeof(ATSUFontID), sizeof(Fixed), sizeof(CGAffineTransform) };
-  ATSUAttributeValuePtr sAttr[] = { &fontID, &fsize, &font_mx };
-  if (fontID != kATSUInvalidFontID) err = ATSUSetAttributes(style, 1, sTag, sBytes, sAttr); // set the font attribute
-  err = ATSUSetAttributes(style, 2, sTag + 1, sBytes + 1, sAttr + 1); // then the size and matrix attributes
-    // next, make sure that Quartz will only render at integer coordinates
-  ATSLineLayoutOptions llo = kATSLineUseDeviceMetrics | kATSLineDisableAllLayoutOperations;
-  ATSUAttributeTag aTag[] = { kATSULineLayoutOptionsTag };
-  ByteCount aBytes[] = { sizeof(ATSLineLayoutOptions) };
-  ATSUAttributeValuePtr aAttr[] = { &llo };
-  err = ATSUSetLineControls (layout, kATSUFromTextBeginning, 1, aTag, aBytes, aAttr);
-    // now we are finally ready to measure some letter to get the bounding box
-  Fixed bBefore, bAfter, bAscent, bDescent;
-  err = ATSUGetUnjustifiedBounds(layout, kATSUFromTextBeginning, 1, &bBefore, &bAfter, &bAscent, &bDescent);
-    // Requesting a certain height font on Mac does not guarantee that ascent+descent
-    // equal the requested height. fl_height will reflect the actual height that we got.
-    // The font "Apple Chancery" is a pretty extreme example of overlapping letters.
-  float fa = -FixedToFloat(bAscent), fd = -FixedToFloat(bDescent);
-  if (fa>0.0f && fd>0.0f) {
-    //float f = Size/(fa+fd);
-    ascent = int(fa); //int(fa*f+0.5f);
-    descent = int(fd); //Size - ascent;
-  }
-  int w = FixedToInt(bAfter);
-  if (w)
-    q_width = FixedToInt(bAfter);
-
-# define ENABLE_TRANSIENT_FONTS  1
-
-# ifdef ENABLE_TRANSIENT_FONTS
-  // Now, by way of experiment, try enabling Transient Font Matching, this will
-  // cause ATSU to find a suitable font to render any chars the current font can't do...
-  ATSUSetTransientFontMatching (layout, true);
-# endif
-#endif//HAS_ATSU
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-/*
-#if HAVE_GL
- // ++ todo: remove OpenGL font alocations
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#endif
-  */
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (fl_mac_os_version >= Fl_X::CoreText_threshold)  {
-    CFRelease(fontref);
-    for (unsigned i = 0; i < sizeof(width)/sizeof(float*); i++) {
-      if (width[i]) free(width[i]);
-      }
-  }
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static Fl_Fontdesc built_in_table_PS[] = { // PostScript font names preferred when Mac OS ≥ 10.5
-{"ArialMT"},
-{"Arial-BoldMT"},
-{"Arial-ItalicMT"},
-{"Arial-BoldItalicMT"},
-{"Courier"},
-{"Courier-Bold"},
-{"Courier-Oblique"},
-{"Courier-BoldOblique"},
-{"TimesNewRomanPSMT"},
-{"TimesNewRomanPS-BoldMT"},
-{"TimesNewRomanPS-ItalicMT"},
-{"TimesNewRomanPS-BoldItalicMT"},
-{"Symbol"},
-{"Monaco"},
-{"AndaleMono"}, // there is no bold Monaco font on standard Mac
-{"ZapfDingbatsITC"}
-};
-#endif
-
-static Fl_Fontdesc built_in_table_full[] = { // full font names used before 10.5
-  {"Arial"},
-  {"Arial Bold"},
-  {"Arial Italic"},
-  {"Arial Bold Italic"},
-  {"Courier"},
-  {"Courier Bold"},
-  {"Courier New Italic"},
-  {"Courier New Bold Italic"},
-  {"Times New Roman"},
-  {"Times New Roman Bold"},
-  {"Times New Roman Italic"},
-  {"Times New Roman Bold Italic"},
-  {"Symbol"},
-  {"Monaco"},
-  {"Andale Mono"}, // there is no bold Monaco font on standard Mac
-  {"Webdings"}
-};
-
-static UniChar *utfWbuf = 0;
-static unsigned utfWlen = 0;
-
-static UniChar *mac_Utf8_to_Utf16(const char *txt, int len, int *new_len)
-{
-  unsigned wlen = fl_utf8toUtf16(txt, len, (unsigned short*)utfWbuf, utfWlen);
-  if (wlen >= utfWlen)
-  {
-    utfWlen = wlen + 100;
-	if (utfWbuf) free(utfWbuf);
-    utfWbuf = (UniChar*)malloc((utfWlen)*sizeof(UniChar));
-	wlen = fl_utf8toUtf16(txt, len, (unsigned short*)utfWbuf, utfWlen);
-  }
-  *new_len = wlen;
-  return utfWbuf;
-} // mac_Utf8_to_Utf16
-
-Fl_Fontdesc* Fl_X::calc_fl_fonts(void)
-{
-  if (!fl_mac_os_version) fl_mac_os_version = calc_mac_os_version();
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  return (fl_mac_os_version >= Fl_X::CoreText_threshold ? built_in_table_PS : built_in_table_full);
-#else
-  return built_in_table_full;
-#endif
-}
-
-static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size) {
-  if (!fl_fonts) fl_fonts = Fl_X::calc_fl_fonts();
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use 0 if fnum undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size) return f;
-  f = new Fl_Font_Descriptor(s->name, size);
-  f->next = s->first;
-  s->first = f;
-  return f;
-}
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-void Fl_Quartz_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  if (fnum==-1) {
-    Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  Fl_Graphics_Driver::font(fnum, size);
-  this->font_descriptor( find(fnum, size) );
-}
-
-int Fl_Quartz_Graphics_Driver::height() {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  return fl_fontsize->ascent + fl_fontsize->descent;
-}
-
-int Fl_Quartz_Graphics_Driver::descent() {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  return fl_fontsize->descent+1;
-}
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-// returns width of a pair of UniChar's in the surrogate range
-static CGFloat surrogate_width(const UniChar *txt, Fl_Font_Descriptor *fl_fontsize)
-{
-  CTFontRef font2 = fl_fontsize->fontref;
-  bool must_release = false;
-  CGGlyph glyphs[2];
-  bool b = CTFontGetGlyphsForCharacters(font2, txt, glyphs, 2);
-  CGSize a;
-  if(!b) { // the current font doesn't contain this char
-    CFStringRef str = CFStringCreateWithCharactersNoCopy(NULL, txt, 2, kCFAllocatorNull);
-    // find a font that contains it
-    font2 = CTFontCreateForString(font2, str, CFRangeMake(0,2));
-    must_release = true;
-    CFRelease(str);
-    b = CTFontGetGlyphsForCharacters(font2, txt, glyphs, 2);
-  }
-  if (b) CTFontGetAdvancesForGlyphs(font2, kCTFontHorizontalOrientation, glyphs, &a, 1);
-  else a.width = fl_fontsize->q_width;
-  if(must_release) CFRelease(font2);
-  return a.width;
-}
-
-static CGFloat variation_selector_width(CFStringRef str16, Fl_Font_Descriptor *fl_fontsize)
-{
-  CGFloat retval;
-  CFDictionarySetValue(attributes, kCTFontAttributeName, fl_fontsize->fontref);
-  CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, str16, attributes);
-  CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-  CFRelease(mastr);
-  retval = CTLineGetOffsetForStringIndex(ctline, 2, NULL);
-  CFRelease(ctline);
-  return retval;
-}
-#endif
-
-static double fl_mac_width(const UniChar* txt, int n, Fl_Font_Descriptor *fl_fontsize) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= Fl_X::CoreText_threshold) {
-  double retval = 0;
-  UniChar uni;
-  int i;
-  for (i = 0; i < n; i++) { // loop over txt
-    uni = txt[i];
-    if (uni >= 0xD800 && uni <= 0xDBFF) { // handles the surrogate range
-      retval += surrogate_width(&txt[i], fl_fontsize);
-      i++; // because a pair of UniChar's represent a single character
-      continue;
-    }
-    if (i+1 < n && txt[i+1] >= 0xFE00 && txt[i+1] <= 0xFE0F) { // handles variation selectors
-      CFStringRef substr = CFStringCreateWithCharacters(NULL, txt + i, 2);
-      retval += variation_selector_width(substr, fl_fontsize);
-      CFRelease(substr);
-      i++;
-      continue;
-    }
-    const int block = 0x10000 / (sizeof(fl_fontsize->width)/sizeof(float*)); // block size
-    // r: index of the character block containing uni
-    unsigned int r = uni >> 7; // change 7 if sizeof(width) is changed
-    if (!fl_fontsize->width[r]) { // this character block has not been hit yet
-      //fprintf(stderr,"r=%d size=%d name=%s\n",r,fl_fontsize->size,fl_fonts[fl_font()].name);
-      // allocate memory to hold width of each character in the block
-      fl_fontsize->width[r] = (float*) malloc(sizeof(float) * block);
-      UniChar ii = r * block;
-      CGSize advance_size;
-      CGGlyph glyph;
-      for (int j = 0; j < block; j++) { // loop over the block
-	// ii spans all characters of this block
-	bool b = CTFontGetGlyphsForCharacters(fl_fontsize->fontref, &ii, &glyph, 1);
-	if (b) 
-	  CTFontGetAdvancesForGlyphs(fl_fontsize->fontref, kCTFontHorizontalOrientation, &glyph, &advance_size, 1);
-	else 
-	  advance_size.width = -1e9; // calculate this later
-	// the width of one character of this block of characters
-	fl_fontsize->width[r][j] = advance_size.width;
-	ii++;
-      }
-    }
-    // sum the widths of all characters of txt
-    double wdt = fl_fontsize->width[r][uni & (block-1)];
-    if (wdt == -1e9) {
-      CGSize advance_size;
-      CGGlyph glyph;
-      CTFontRef font2 = fl_fontsize->fontref;
-      bool must_release = false;
-      bool b = CTFontGetGlyphsForCharacters(font2, &uni, &glyph, 1);
-      if (!b) { // the current font doesn't contain this char
-	CFStringRef str = CFStringCreateWithCharactersNoCopy(NULL, &uni, 1, kCFAllocatorNull);
-	// find a font that contains it
-	font2 = CTFontCreateForString(font2, str, CFRangeMake(0,1));
-	must_release = true;
-	CFRelease(str);
-	b = CTFontGetGlyphsForCharacters(font2, &uni, &glyph, 1);
-      }
-      if (b) CTFontGetAdvancesForGlyphs(font2, kCTFontHorizontalOrientation, &glyph, &advance_size, 1);
-      else advance_size.width = 0.;
-      // the width of the 'uni' character
-      wdt = fl_fontsize->width[r][uni & (block-1)] = advance_size.width;
-      if (must_release) CFRelease(font2);
-    }
-    retval += wdt;
-  }
-  return retval;
-} else {
-#endif
-#if HAS_ATSU
-  OSStatus err;
-  Fixed bBefore, bAfter, bAscent, bDescent;
-  ATSUTextLayout layout;
-  ByteCount iSize;
-  ATSUAttributeTag iTag;
-  ATSUAttributeValuePtr iValuePtr;
-
-  // Here's my ATSU text measuring attempt... This seems to do the Right Thing
-  // now collect our ATSU resources and measure our text string
-  layout = fl_fontsize->layout;
-  // activate the current GC
-  iSize = sizeof(CGContextRef);
-  iTag = kATSUCGContextTag;
-  iValuePtr = &fl_gc;
-  ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-  // now measure the bounding box
-  err = ATSUSetTextPointerLocation(layout, txt, kATSUFromTextBeginning, n, n);
-  err = ATSUGetUnjustifiedBounds(layout, kATSUFromTextBeginning, n, &bBefore, &bAfter, &bAscent, &bDescent);
-  // If err is OK then return length, else return 0. Or something...
-  int len = FixedToInt(bAfter);
-  return len;
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return 0;
-}
-
-double Fl_Quartz_Graphics_Driver::width(const char* txt, int n) {
-  int wc_len = n;
-  UniChar *uniStr = mac_Utf8_to_Utf16(txt, n, &wc_len);
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  return fl_mac_width(uniStr, wc_len, font_descriptor());
-}
-
-double Fl_Quartz_Graphics_Driver::width(unsigned int wc) {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-
-  UniChar utf16[3];
-  int l = 1;
-  if (wc <= 0xFFFF) {
-    *utf16 = wc;
-  }
-  else {
-//    char buf[4];
-//    l = fl_utf8encode(wc, buf);
-//    l = (int)fl_utf8toUtf16(buf, l, utf16, 3);
-    l = (int)fl_ucs_to_Utf16(wc, utf16, 3);
-  }
-  return fl_mac_width(utf16, l, font_descriptor());
-}
-
-// text extent calculation
-void Fl_Quartz_Graphics_Driver::text_extents(const char *str8, int n, int &dx, int &dy, int &w, int &h) {
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  UniChar *txt = mac_Utf8_to_Utf16(str8, n, &n);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if (fl_mac_os_version >= Fl_X::CoreText_threshold) {
-  CFStringRef str16 = CFStringCreateWithCharactersNoCopy(NULL, txt, n,  kCFAllocatorNull);
-  CFDictionarySetValue (attributes, kCTFontAttributeName, fl_fontsize->fontref);
-  CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, str16, attributes);
-  CFRelease(str16);
-  CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-  CFRelease(mastr);
-  CGContextSetTextPosition(fl_gc, 0, 0);
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGRect rect = CTLineGetImageBounds(ctline, fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-  CFRelease(ctline);
-  dx = floor(rect.origin.x + 0.5);
-  dy = floor(- rect.origin.y - rect.size.height + 0.5);
-  w = rect.size.width + 0.5;
-  h = rect.size.height + 0.5;
-  }
-else {
-#endif
-#if HAS_ATSU
-  OSStatus err;
-  ATSUTextLayout layout;
-  ByteCount iSize;
-  ATSUAttributeTag iTag;
-  ATSUAttributeValuePtr iValuePtr;
-
-// Here's my ATSU text measuring attempt... This seems to do the Right Thing
-  // now collect our ATSU resources and measure our text string
-  layout = fl_fontsize->layout;
-        // activate the current GC
-  iSize = sizeof(CGContextRef);
-  iTag = kATSUCGContextTag;
-  iValuePtr = &fl_gc;
-      ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-        // now measure the bounding box
-  err = ATSUSetTextPointerLocation(layout, txt, kATSUFromTextBeginning, n, n);
-  Rect bbox;
-  err = ATSUMeasureTextImage(layout, kATSUFromTextBeginning, n, 0, 0, &bbox);
-  w = bbox.right - bbox.left;
-  h = bbox.bottom - bbox.top;
-  dx = bbox.left;
-  dy = -bbox.bottom;
-//printf("r: %d l: %d t: %d b: %d w: %d h: %d\n", bbox.right, bbox.left, bbox.top, bbox.bottom, w, h);
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return;
-} // fl_text_extents
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-static CGColorRef flcolortocgcolor(Fl_Color i)
-{
-  uchar r, g, b;
-  Fl::get_color(i, r, g, b);
-  CGFloat components[4] = {r/255.0f, g/255.0f, b/255.0f, 1.};
-  static CGColorSpaceRef cspace = NULL;
-  if (cspace == NULL) {
-    cspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
-    }
-  return CGColorCreate(cspace, components);
-}
-#endif
-
-static void fl_mac_draw(const char *str, int n, float x, float y, Fl_Graphics_Driver *driver) {
-  // convert to UTF-16 first
-  UniChar *uniStr = mac_Utf8_to_Utf16(str, n, &n);
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (fl_mac_os_version >= Fl_X::CoreText_threshold) {
-    CFMutableStringRef str16 = CFStringCreateMutableWithExternalCharactersNoCopy(NULL, uniStr, n,  n, kCFAllocatorNull);
-    if (str16 == NULL) return; // shd not happen
-    CGColorRef color = flcolortocgcolor(driver->color());
-    CFDictionarySetValue (attributes, kCTFontAttributeName, driver->font_descriptor()->fontref);
-    CFDictionarySetValue (attributes, kCTForegroundColorAttributeName, color);
-    CFAttributedStringRef mastr = CFAttributedStringCreate(kCFAllocatorDefault, str16, attributes);
-    CFRelease(str16);
-    CFRelease(color);
-    CTLineRef ctline = CTLineCreateWithAttributedString(mastr);
-    CFRelease(mastr);
-    CGContextSetTextMatrix(fl_gc, font_mx);
-    CGContextSetTextPosition(fl_gc, x, y);
-    CGContextSetShouldAntialias(fl_gc, true);
-    CTLineDraw(ctline, fl_gc);
-    CGContextSetShouldAntialias(fl_gc, false);
-    CFRelease(ctline);
-  } else {
-#endif
-#if HAS_ATSU
-  OSStatus err;
-  // now collect our ATSU resources
-  ATSUTextLayout layout = driver->font_descriptor()->layout;
-
-  ByteCount iSize = sizeof(CGContextRef);
-  ATSUAttributeTag iTag = kATSUCGContextTag;
-  ATSUAttributeValuePtr iValuePtr=&fl_gc;
-  ATSUSetLayoutControls(layout, 1, &iTag, &iSize, &iValuePtr);
-
-  err = ATSUSetTextPointerLocation(layout, uniStr, kATSUFromTextBeginning, n, n);
-  CGContextSetShouldAntialias(fl_gc, true);
-  err = ATSUDrawText(layout, kATSUFromTextBeginning, n, FloatToFixed(x), FloatToFixed(y));
-  CGContextSetShouldAntialias(fl_gc, false);
-#endif
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-}
-
-void Fl_Quartz_Graphics_Driver::draw(const char *str, int n, float x, float y) {
-  // avoid a crash if no font has been selected by user yet !
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  fl_mac_draw(str, n, x, y, this);
-}
-
-void Fl_Quartz_Graphics_Driver::draw(const char* str, int n, int x, int y) {
-  // avoid a crash if no font has been selected by user yet !
-  if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-  fl_mac_draw(str, n, (float)x-0.0f, (float)y+0.5f, this);
-}
-
-void Fl_Quartz_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  CGContextSaveGState(fl_gc);
-  CGContextTranslateCTM(fl_gc, x, y);
-  CGContextRotateCTM(fl_gc, - angle*(M_PI/180) );
-  draw(str, n, 0, 0);
-  CGContextRestoreGState(fl_gc);
-}
-
-void Fl_Quartz_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  int dx, dy, w, h;
-  text_extents(c, n, dx, dy, w, h);
-  draw(c, n, x - w - dx, y);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_font_win32.cxx
+++ /dev/null
@@ -1,448 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 font selection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Printer.H>
-
-static int fl_angle_ = 0;
-
-#ifndef FL_DOXYGEN
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize) {
-  int weight = FW_NORMAL;
-  int italic = 0;
-  switch (*name++) {
-  case 'I': italic = 1; break;
-  case 'P': italic = 1;
-  case 'B': weight = FW_BOLD; break;
-  case ' ': break;
-  default: name--;
-  }
-  fid = CreateFont(
-    -fsize, // negative makes it use "char size"
-    0,	            // logical average character width
-    fl_angle_*10,	            // angle of escapement
-    fl_angle_*10,	            // base-line orientation angle
-    weight,
-    italic,
-    FALSE,	        // underline attribute flag
-    FALSE,	        // strikeout attribute flag
-    DEFAULT_CHARSET,    // character set identifier
-    OUT_DEFAULT_PRECIS,	// output precision
-    CLIP_DEFAULT_PRECIS,// clipping precision
-    DEFAULT_QUALITY,	// output quality
-    DEFAULT_PITCH,	// pitch and family
-    name	        // pointer to typeface name string
-    );
-  angle = fl_angle_;
-  if (!fl_gc) fl_GetDC(0);
-  SelectObject(fl_gc, fid);
-  GetTextMetrics(fl_gc, &metr);
-//  BOOL ret = GetCharWidthFloat(fl_gc, metr.tmFirstChar, metr.tmLastChar, font->width+metr.tmFirstChar);
-// ...would be the right call, but is not implemented into Window95! (WinNT?)
-  //GetCharWidth(fl_gc, 0, 255, width);
-  int i;
-  memset(width, 0, 64 * sizeof(int*));
-#if HAVE_GL
-  listbase = 0;
-  for (i = 0; i < 64; i++) glok[i] = 0;
-#endif
-  size = fsize;
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-#if HAVE_GL
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#endif
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-  DeleteObject(fid);
-  for (int i = 0; i < 64; i++) {
-    if ( width[i] ) free(width[i]);
-    }
-}
-
-////////////////////////////////////////////////////////////////
-
-// WARNING: if you add to this table, you must redefine FL_FREE_FONT
-// in Enumerations.H & recompile!!
-static Fl_Fontdesc built_in_table[] = {
-{" Arial"},
-{"BArial"},
-{"IArial"},
-{"PArial"},
-{" Courier New"},
-{"BCourier New"},
-{"ICourier New"},
-{"PCourier New"},
-{" Times New Roman"},
-{"BTimes New Roman"},
-{"ITimes New Roman"},
-{"PTimes New Roman"},
-{" Symbol"},
-{" Terminal"},
-{"BTerminal"},
-{" Wingdings"},
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-static Fl_Font_Descriptor* find(Fl_Font fnum, Fl_Fontsize size, int angle) {
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use 0 if fnum undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size && f->angle == angle) return f;
-  f = new Fl_Font_Descriptor(s->name, size);
-  f->next = s->first;
-  s->first = f;
-  return f;
-}
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-static void fl_font(Fl_Graphics_Driver *driver, Fl_Font fnum, Fl_Fontsize size, int angle) {
-  if (fnum==-1) { // just make sure that we will load a new font next time
-    fl_angle_ = 0;
-    driver->Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  if (fnum == driver->Fl_Graphics_Driver::font() && size == driver->size() && angle == fl_angle_) return;
-  fl_angle_ = angle;
-  driver->Fl_Graphics_Driver::font(fnum, size);
-  driver->font_descriptor( find(fnum, size, angle) );
-}
-
-void Fl_GDI_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  fl_font(this, fnum, size, 0);
-}
-
-int Fl_GDI_Graphics_Driver::height() {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (fl_fontsize) return (fl_fontsize->metr.tmAscent + fl_fontsize->metr.tmDescent);
-  else return -1;
-}
-
-int Fl_GDI_Graphics_Driver::descent() {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (fl_fontsize) return fl_fontsize->metr.tmDescent;
-  else return -1;
-}
-
-// Unicode string buffer
-static unsigned short *wstr = NULL;
-static int wstr_len    = 0;
-
-
-double Fl_GDI_Graphics_Driver::width(const char* c, int n) {
-  int i = 0;
-  if (!font_descriptor()) return -1.0;
-  double w = 0.0;
-  char *end = (char *)&c[n];
-  while (i < n) {
-    unsigned int ucs;
-    int l;
-    ucs = fl_utf8decode((const char*)(c + i), end, &l);
-//  if (l < 1) l = 1;
-    i += l;
-    if (!fl_nonspacing(ucs)) {
-      w += width(ucs);
-    }
-  }
-  return w;
-}
-
-double Fl_GDI_Graphics_Driver::width(unsigned int c) {
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  unsigned int r;
-  SIZE s;
-  // Special Case Handling of Unicode points over U+FFFF.
-  // The logic (below) computes a lookup table for char widths
-  // on-the-fly, but the table only covers codepoints up to
-  // U+FFFF, which covers the basic multilingual plane, but
-  // not any higher plane, or glyphs that require surrogate-pairs
-  // to encode them in WinXX, which is UTF16.
-  // This code assumes that these glyphs are rarely used and simply
-  // measures them explicitly if they occur - This will be slow...
-  if(c > 0x0000FFFF) { // UTF16 surrogate pair is needed
-    if (!fl_gc) { // We have no valid gc, so nothing to measure - bail out
-      return 0.0;
-    }
-    int cc; // cell count
-    unsigned short u16[4]; // Array for UTF16 representation of c
-    // Creates a UTF16 string from a UCS code point.
-    cc = fl_ucs_to_Utf16(c, u16, 4);
-    // Make sure the current font is selected before we make the measurement
-    SelectObject(fl_gc, fl_fontsize->fid);
-    // measure the glyph width
-    GetTextExtentPoint32W(fl_gc, (WCHAR*)u16, cc, &s);
-    return (double)s.cx;
-  }
-  // else - this falls through to the lookup-table for glyph widths
-  // in the basic multilingual plane
-  r = (c & 0xFC00) >> 10;
-  if (!fl_fontsize->width[r]) {
-    fl_fontsize->width[r] = (int*) malloc(sizeof(int) * 0x0400);
-    for (int i = 0; i < 0x0400; i++) fl_fontsize->width[r][i] = -1;
-  } else {
-    if ( fl_fontsize->width[r][c&0x03FF] >= 0 ) { // already cached
-	return (double) fl_fontsize->width[r][c & 0x03FF];
-    }
-  }
-  unsigned short ii = r * 0x400;
-  // The following code makes a best effort attempt to obtain a valid fl_gc.
-  // If no fl_gc is available at the time we call fl_width(), then we first
-  // try to obtain a gc from the first fltk window.
-  // If that is null then we attempt to obtain the gc from the current screen
-  // using (GetDC(NULL)).
-  // This should resolve STR #2086
-  HDC gc = fl_gc;
-  HWND hWnd = 0;
-  if (!gc) { // We have no valid gc, try and obtain one
-    // Use our first fltk window, or fallback to using the screen via GetDC(NULL)
-    hWnd = Fl::first_window() ? fl_xid(Fl::first_window()) : NULL;
-    gc = GetDC(hWnd);
-  }
-  if (!gc) Fl::fatal("Invalid graphic context: fl_width() failed because no valid HDC was found!");
-  SelectObject(gc, fl_fontsize->fid);
-  ii += c &0x03FF;
-  GetTextExtentPoint32W(gc, (WCHAR*)&ii, 1, &s);
-  fl_fontsize->width[r][c&0x03FF] = s.cx;
-  if (gc && gc!=fl_gc) ReleaseDC(hWnd, gc);
-  return (double) fl_fontsize->width[r][c & 0x03FF];
-}
-
-/* Add function pointer to allow us to access GetGlyphIndicesW on systems that have it,
- * without crashing on systems that do not. */
-/* DWORD WINAPI GetGlyphIndicesW(HDC,LPCWSTR,int,LPWORD,DWORD) */
-typedef DWORD (WINAPI* fl_GetGlyphIndices_func)(HDC,LPCWSTR,int,LPWORD,DWORD);
-
-static fl_GetGlyphIndices_func fl_GetGlyphIndices = NULL; // used to hold a proc pointer for GetGlyphIndicesW
-static int have_loaded_GetGlyphIndices = 0; // Set this non-zero once we have tried to load GetGlyphIndices
-
-// Function that tries to dynamically load GetGlyphIndicesW at runtime
-static void GetGlyphIndices_init() {
-  // Since not all versions of Windows include GetGlyphIndicesW support,
-  // we do a run-time check for the required function.
-  HMODULE hMod = GetModuleHandle("GDI32.DLL");
-  if (hMod) {
-    // check that GetGlyphIndicesW is available
-    fl_GetGlyphIndices = (fl_GetGlyphIndices_func)GetProcAddress(hMod, "GetGlyphIndicesW");
-  }
-  have_loaded_GetGlyphIndices = -1; // set this non-zero when we have attempted to load GetGlyphIndicesW
-} // GetGlyphIndices_init function
-
-static void on_printer_extents_update(int &dx, int &dy, int &w, int &h)
-// converts text extents from device coords to logical coords
-{
-  POINT pt[3] = { {0, 0}, {dx, dy}, {dx+w, dy+h} };
-  DPtoLP(fl_gc, pt, 3);
-  w = pt[2].x - pt[1].x;
-  h = pt[2].y - pt[1].y;
-  dx = pt[1].x - pt[0].x;
-  dy = pt[1].y - pt[0].y;
-}
-
-// if printer context, extents shd be converted to logical coords
-#define EXTENTS_UPDATE(x,y,w,h) \
-  if (Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) { on_printer_extents_update(x,y,w,h); }
-
-// Function to determine the extent of the "inked" area of the glyphs in a string
-void Fl_GDI_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-
-  Fl_Font_Descriptor *fl_fontsize = font_descriptor();
-  if (!fl_fontsize) { // no valid font, nothing to measure
-    w = 0; h = 0;
-    dx = dy = 0;
-    return;
-  }
-
-  static unsigned short *ext_buff = NULL; // UTF-16 converted version of input UTF-8 string
-  static WORD  *w_buff = NULL; // glyph indices array
-  static unsigned wc_len = 0;  // current string buffer dimensions
-  static const MAT2 matrix = { { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 1 } }; // identity mat for GetGlyphOutlineW
-  GLYPHMETRICS metrics;
-  int maxw = 0, maxh = 0, dh;
-  int minx = 0, miny = -999999;
-  unsigned len = 0, idx = 0;
-  HWND hWnd = 0;
-  HDC gc = fl_gc; // local copy of current gc - make a copy in case we change it...
-  int has_surrogates; // will be set if the string contains surrogate pairs
-
-  // Have we loaded the GetGlyphIndicesW function yet?
-  if (have_loaded_GetGlyphIndices == 0) {
-    GetGlyphIndices_init();
-  }
-  // Do we have a usable GetGlyphIndices function?
-  if(!fl_GetGlyphIndices) goto exit_error; // No GetGlyphIndices function, use fallback mechanism instead
-
-  // The following code makes a best effort attempt to obtain a valid fl_gc.
-  // See description in fl_width() above for an explanation.
-  if (!gc) { // We have no valid gc, try and obtain one
-    // Use our first fltk window, or fallback to using the screen via GetDC(NULL)
-    hWnd = Fl::first_window() ? fl_xid(Fl::first_window()) : NULL;
-    gc = GetDC(hWnd);
-  }
-  if (!gc) goto exit_error; // no valid gc, attempt to use fallback measure
-
-  // now convert the string to WCHAR and measure it
-  len = fl_utf8toUtf16(c, n, ext_buff, wc_len);
-  if(len >= wc_len) {
-    if(ext_buff) {delete [] ext_buff;}
-    if(w_buff) {delete [] w_buff;}
-    wc_len = len + 64;
-    ext_buff = new unsigned short[wc_len];
-    w_buff = new WORD[wc_len];
-    len = fl_utf8toUtf16(c, n, ext_buff, wc_len);
-  }
-  SelectObject(gc, fl_fontsize->fid);
-
-  // Are there surrogate-pairs in this string? If so GetGlyphIndicesW will fail
-  // since it can only handle the BMP range.
-  // We ideally want to use GetGlyphIndicesW, as it is the Right Thing, but it
-  // only works for the BMP, so we leverage GetCharacterPlacementW instead, which
-  // is not ideal, but works adequately well, and does handle surrogate pairs.
-  has_surrogates = 0;
-  for(unsigned ll = 0; ll < len; ll++) {
-    if((ext_buff[ll] >= 0xD800) && (ext_buff[ll] < 0xE000)) {
-      has_surrogates = -1;
-      break;
-    }
-  }
-  if (has_surrogates) {
-    // GetGlyphIndices will not work - use GetCharacterPlacementW() instead
-    GCP_RESULTSW gcp_res;
-    memset(w_buff, 0, (sizeof(WORD) * wc_len));
-    memset(&gcp_res, 0, sizeof(GCP_RESULTSW));
-    gcp_res.lpGlyphs = (LPWSTR)w_buff;
-    gcp_res.nGlyphs = wc_len;
-    gcp_res.lStructSize = sizeof(gcp_res);
-
-    DWORD dr = GetCharacterPlacementW(gc, (WCHAR*)ext_buff, len, 0, &gcp_res, GCP_GLYPHSHAPE);
-    if(dr) {
-      len = gcp_res.nGlyphs;
-    } else goto exit_error;
-  } else {
-    if (fl_GetGlyphIndices(gc, (WCHAR*)ext_buff, len, w_buff, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR) {
-      // some error occured here - just return fl_measure values
-      goto exit_error;
-    }
-  }
-
-  // now we have the glyph array we measure each glyph in turn...
-  for(idx = 0; idx < len; idx++){
-    if (GetGlyphOutlineW (gc, w_buff[idx], GGO_METRICS | GGO_GLYPH_INDEX,
-                          &metrics, 0, NULL, &matrix) == GDI_ERROR) {
-      goto exit_error;
-    }
-    maxw += metrics.gmCellIncX;
-    if(idx == 0) minx = metrics.gmptGlyphOrigin.x;
-    dh = metrics.gmBlackBoxY - metrics.gmptGlyphOrigin.y;
-    if(dh > maxh) maxh = dh;
-    if(miny < metrics.gmptGlyphOrigin.y) miny = metrics.gmptGlyphOrigin.y;
-  }
-  // for the last cell, we only want the bounding X-extent, not the glyphs increment step
-  maxw = maxw - metrics.gmCellIncX + metrics.gmBlackBoxX + metrics.gmptGlyphOrigin.x;
-  w = maxw - minx;
-  h = maxh + miny;
-  dx = minx;
-  dy = -miny;
-  EXTENTS_UPDATE(dx, dy, w, h);
-  return; // normal exit
-
-exit_error:
-  // some error here - just return fl_measure values
-  w = (int)width(c, n);
-  h = height();
-  dx = 0;
-  dy = descent() - h;
-  EXTENTS_UPDATE(dx, dy, w, h);
-  return;
-} // fl_text_extents
-
-void Fl_GDI_Graphics_Driver::draw(const char* str, int n, int x, int y) {
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  // avoid crash if no font has been set yet
-  if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-  SelectObject(fl_gc, font_descriptor()->fid);
-  int wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  if(wn >= wstr_len) {
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  }
-  TextOutW(fl_gc, x, y, (WCHAR*)wstr, wn);
-  SetTextColor(fl_gc, oldColor); // restore initial state
-}
-
-void Fl_GDI_Graphics_Driver::draw(int angle, const char* str, int n, int x, int y) {
-  fl_font(this, Fl_Graphics_Driver::font(), size(), angle);
-  int wn = 0; // count of UTF16 cells to render full string
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  SelectObject(fl_gc, font_descriptor()->fid);
-  wn = fl_utf8toUtf16(str, n, wstr, wstr_len);
-  if(wn >= wstr_len) { // Array too small
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(str, n, wstr, wstr_len); // respin the translation
-  }
-  TextOutW(fl_gc, x, y, (WCHAR*)wstr, wn);
-  SetTextColor(fl_gc, oldColor);
-  fl_font(this, Fl_Graphics_Driver::font(), size(), 0);
-}
-
-void Fl_GDI_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  int wn;
-  wn = fl_utf8toUtf16(c, n, wstr, wstr_len);
-  if(wn >= wstr_len) {
-    wstr = (unsigned short*) realloc(wstr, sizeof(unsigned short) * (wn + 1));
-    wstr_len = wn + 1;
-    wn = fl_utf8toUtf16(c, n, wstr, wstr_len);
-  }
-
-  COLORREF oldColor = SetTextColor(fl_gc, fl_RGB());
-  SelectObject(fl_gc, font_descriptor()->fid);
-#ifdef RTL_CHAR_BY_CHAR
-  int i = 0;
-  int lx = 0;
-  while (i < wn) { // output char by char is very bad for Arabic but coherent with fl_width()
-    lx = (int) width(wstr[i]);
-    x -= lx;
-    TextOutW(fl_gc, x, y, (WCHAR*)wstr + i, 1);
-    if (fl_nonspacing(wstr[i])) {
-      x += lx;
-    }
-    i++;
-  }
-#else
-  UINT old_align = SetTextAlign(fl_gc, TA_RIGHT | TA_RTLREADING);
-  TextOutW(fl_gc, x, y - height() + descent(), (WCHAR*)wstr, wn);
-  SetTextAlign(fl_gc, old_align);
-#endif
-  SetTextColor(fl_gc, oldColor);
-}
-#endif
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_font_x.cxx
+++ /dev/null
@@ -1,341 +1,0 @@
-//
-// "$Id$"
-//
-// Standard X11 font selection code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#ifndef FL_DOXYGEN
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name) {
-  font = XCreateUtf8FontStruct(fl_display, name);
-  if (!font) {
-    Fl::warning("bad font: %s", name);
-    font = XCreateUtf8FontStruct(fl_display, "fixed");
-  }
-#  if HAVE_GL
-  listbase = 0;
-  for (int u = 0; u < 64; u++) glok[u] = 0;
-#  endif
-}
-
-Fl_XFont_On_Demand fl_xfont;
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-#  if HAVE_GL
-// Delete list created by gl_draw().  This is not done by this code
-// as it will link in GL unnecessarily.  There should be some kind
-// of "free" routine pointer, or a subclass?
-// if (listbase) {
-//  int base = font->min_char_or_byte2;
-//  int size = font->max_char_or_byte2-base+1;
-//  int base = 0; int size = 256;
-//  glDeleteLists(listbase+base,size);
-// }
-#  endif
-  if (this == fl_graphics_driver->font_descriptor()) {
-    fl_graphics_driver->font_descriptor(NULL);
-    fl_xfont = 0;
-  }
-  XFreeUtf8FontStruct(fl_display, font);
-}
-
-////////////////////////////////////////////////////////////////
-
-// WARNING: if you add to this table, you must redefine FL_FREE_FONT
-// in Enumerations.H & recompile!!
-static Fl_Fontdesc built_in_table[] = {
-{"-*-helvetica-medium-r-normal--*"},
-{"-*-helvetica-bold-r-normal--*"},
-{"-*-helvetica-medium-o-normal--*"},
-{"-*-helvetica-bold-o-normal--*"},
-{"-*-courier-medium-r-normal--*"},
-{"-*-courier-bold-r-normal--*"},
-{"-*-courier-medium-o-normal--*"},
-{"-*-courier-bold-o-normal--*"},
-{"-*-times-medium-r-normal--*"},
-{"-*-times-bold-r-normal--*"},
-{"-*-times-medium-i-normal--*"},
-{"-*-times-bold-i-normal--*"},
-{"-*-symbol-*"},
-{"-*-lucidatypewriter-medium-r-normal-sans-*"},
-{"-*-lucidatypewriter-bold-r-normal-sans-*"},
-{"-*-*zapf dingbats-*"}
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-#define MAXSIZE 32767
-
-// return dash number N, or pointer to ending null if none:
-const char* fl_font_word(const char* p, int n) {
-  while (*p) {if (*p=='-') {if (!--n) break;} p++;}
-  return p;
-}
-
-// return a pointer to a number we think is "point size":
-char* fl_find_fontsize(char* name) {
-  char* c = name;
-  // for standard x font names, try after 7th dash:
-  if (*c == '-') {
-    c = (char*)fl_font_word(c,7);
-    if (*c++ && isdigit(*c)) return c;
-    return 0; // malformed x font name?
-  }
-  char* r = 0;
-  // find last set of digits:
-  for (c++;* c; c++)
-    if (isdigit(*c) && !isdigit(*(c-1))) r = c;
-  return r;
-}
-
-//const char* fl_encoding = "iso8859-1";
-const char* fl_encoding = "iso10646-1";
-
-// return true if this matches fl_encoding:
-int fl_correct_encoding(const char* name) {
-  if (*name != '-') return 0;
-  const char* c = fl_font_word(name,13);
-  return (*c++ && !strcmp(c,fl_encoding));
-}
-
-static const char *find_best_font(const char *fname, int size) {
-  int cnt;
-  static char **list = NULL;
-// locate or create an Fl_Font_Descriptor for a given Fl_Fontdesc and size:
-  if (list) XFreeFontNames(list);
-  list = XListFonts(fl_display, fname, 100, &cnt);
-  if (!list) return "fixed";
-
-  // search for largest <= font size:
-  char* name = list[0]; int ptsize = 0;     // best one found so far
-  int matchedlength = 32767;
-  char namebuffer[1024];        // holds scalable font name
-  int found_encoding = 0;
-  int m = cnt; if (m<0) m = -m;
-  for (int n=0; n < m; n++) {
-    char* thisname = list[n];
-    if (fl_correct_encoding(thisname)) {
-      if (!found_encoding) ptsize = 0; // force it to choose this
-      found_encoding = 1;
-    } else {
-      if (found_encoding) continue;
-    }
-    char* c = (char*)fl_find_fontsize(thisname);
-    int thissize = c ? atoi(c) : MAXSIZE;
-    int thislength = strlen(thisname);
-    if (thissize == size && thislength < matchedlength) {
-      // exact match, use it:
-      name = thisname;
-      ptsize = size;
-      matchedlength = thislength;
-    } else if (!thissize && ptsize!=size) {
-      // whoa!  A scalable font!  Use unless exact match found:
-      int l = c-thisname;
-      memcpy(namebuffer,thisname,l);
-      l += sprintf(namebuffer+l,"%d",size);
-      while (*c == '0') c++;
-      strcpy(namebuffer+l,c);
-      name = namebuffer;
-      ptsize = size;
-    } else if (!ptsize ||	// no fonts yet
-	       (thissize < ptsize && ptsize > size) || // current font too big
-	       (thissize > ptsize && thissize <= size) // current too small
-      ) {
-      name = thisname;
-      ptsize = thissize;
-      matchedlength = thislength;
-    }
-  }
-
-//  if (ptsize != size) { // see if we already found this unscalable font:
-//    for (f = s->first; f; f = f->next) {
-//      if (f->minsize <= ptsize && f->maxsize >= ptsize) {
-//	if (f->minsize > size) f->minsize = size;
-//	if (f->maxsize < size) f->maxsize = size;
-//	return f;
-//      }
-//    }
-//  }
-//
-//  // okay, we definately have some name, make the font:
-//  f = new Fl_Font_Descriptor(name);
-//  if (ptsize < size) {f->minsize = ptsize; f->maxsize = size;}
-//  else {f->minsize = size; f->maxsize = ptsize;}
-//  f->next = s->first;
-//  s->first = f;
-//  return f;
-
-  return name;
-}
-
-static char *put_font_size(const char *n, int size)
-{
-        int i = 0;
-        char *buf;
-        const char *ptr;
-        const char *f;
-        char *name;
-        int nbf = 1;
-        name = strdup(n);
-        while (name[i]) {
-                if (name[i] == ',') {nbf++; name[i] = '\0';}
-                i++;
-        }
-
-        buf = (char*) malloc(nbf * 256);
-        buf[0] = '\0';
-        ptr = name;
-        i = 0;
-        while (ptr && nbf > 0) {
-                f = find_best_font(ptr, size);
-                while (*f) {
-                        buf[i] = *f;
-                        f++; i++;
-                }
-                nbf--;
-                while (*ptr) ptr++;
-                if (nbf) {
-                        ptr++;
-                        buf[i] = ',';
-                        i++;
-                }
-                while(isspace(*ptr)) ptr++;
-        }
-        buf[i] = '\0';
-        free(name);
-        return buf;
-}
-
-
-char *fl_get_font_xfld(int fnum, int size) {
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use font 0 if still undefined
-  fl_open_display();
-  return put_font_size(s->name, size);
-}
-
-// locate or create an Fl_Font_Descriptor for a given Fl_Fontdesc and size:
-static Fl_Font_Descriptor* find(int fnum, int size) {
-  char *name;
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // use font 0 if still undefined
-  Fl_Font_Descriptor* f;
-  for (f = s->first; f; f = f->next)
-    if (f->size == size) return f;
-  fl_open_display();
-
-  name = put_font_size(s->name, size);
-  f = new Fl_Font_Descriptor(name);
-  f->size = size;
-  f->next = s->first;
-  s->first = f;
-  free(name);
-  return f;
-}
-
-
-////////////////////////////////////////////////////////////////
-// Public interface:
-
-void *fl_xftfont = 0;
-static GC font_gc;
-
-XFontStruct* Fl_XFont_On_Demand::value() {
-  return ptr;
-}
-
-void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  if (fnum==-1) {
-    Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  if (fnum == Fl_Graphics_Driver::font() && size == Fl_Graphics_Driver::size()) return;
-  Fl_Graphics_Driver::font(fnum, size);
-  Fl_Font_Descriptor* f = find(fnum, size);
-  if (f != this->font_descriptor()) {
-    this->font_descriptor(f);
-    fl_xfont = f->font->fonts[0];
-    font_gc = 0;
-  }
-}
-
-int Fl_Xlib_Graphics_Driver::height() {
-  if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent;
-  else return -1;
-}
-
-int Fl_Xlib_Graphics_Driver::descent() {
-  if (font_descriptor()) return font_descriptor()->font->descent;
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(const char* c, int n) {
-  if (font_descriptor()) return (double) XUtf8TextWidth(font_descriptor()->font, c, n);
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(unsigned int c) {
-  if (font_descriptor()) return (double) XUtf8UcsWidth(font_descriptor()->font, c);
-  else return -1;
-}
-
-void Fl_Xlib_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &W, int &H) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-    XSetFont(fl_display, fl_gc, font_descriptor()->font->fid);
-  }
-  int xx, yy, ww, hh;
-  xx = yy = ww = hh = 0;
-  if (fl_gc) XUtf8_measure_extents(fl_display, fl_window, font_descriptor()->font, fl_gc, &xx, &yy, &ww, &hh, c, n);
-
-  W = ww; H = hh; dx = xx; dy = yy;
-// This is the safe but mostly wrong thing we used to do...
-//  W = 0; H = 0;
-//  fl_measure(c, W, H, 0);
-//  dx = 0;
-//  dy = fl_descent() - H;
-}
-
-void Fl_Xlib_Graphics_Driver::draw(const char* c, int n, int x, int y) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-    XSetFont(fl_display, fl_gc, font_descriptor()->font->fid);
-  }
-  if (fl_gc) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n);
-}
-
-void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  static char warning = 0; // issue warning only once
-  if (!warning && angle != 0) {
-    warning = 1;
-    fprintf(stderr,
-	    "libfltk: rotated text not implemented by X backend.\n"
-	    "  You should use the Xft backend. Check USE_XFT in config.h.\n");
-  }
-  this->draw(str, n, (int)x, (int)y);
-}
-
-void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-  if (font_gc != fl_gc) {
-    if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-    font_gc = fl_gc;
-  }
-  if (fl_gc) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n);
-}
-#endif // FL_DOXYGEN
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_font_xft.cxx
+++ /dev/null
@@ -1,704 +1,0 @@
-//
-// "$Id$"
-//
-// Xft font code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2001-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Draw fonts using Keith Packard's Xft library to provide anti-
-// aliased text. Yow!
-//
-// Many thanks to Carl for making the original version of this.
-//
-// This font code only requires libXft to work.  Contrary to popular
-// belief there is no need to have FreeType, or the Xrender extension
-// available to use this code.  You will just get normal Xlib fonts
-// (Xft calls them "core" fonts) The Xft algorithms for choosing
-// these is about as good as the FLTK ones (I hope to fix it so it is
-// exactly as good...), plus it can cache its results and share them
-// between programs, so using this should be a win in all cases. Also
-// it should be obvious by comparing this file and fl_font_x.cxx that
-// it is a lot easier to program with Xft than with Xlib.
-//
-// Also, Xft supports UTF-8 text rendering directly, which will allow
-// us to support UTF-8 on all platforms more easily.
-//
-// To actually get antialiasing you need the following:
-//
-//     1. You have XFree86 4
-//     2. You have the XRender extension
-//     3. Your X device driver supports the render extension
-//     4. You have libXft
-//     5. Your libXft has FreeType2 support compiled in
-//     6. You have the FreeType2 library
-//
-// Distributions that have XFree86 4.0.3 or later should have all of this...
-//
-// Unlike some other Xft packages, I tried to keep this simple and not
-// to work around the current problems in Xft by making the "patterns"
-// complicated. I believe doing this defeats our ability to improve Xft
-// itself. You should edit the ~/.xftconfig file to "fix" things, there
-// are several web pages of information on how to do this.
-//
-#ifndef FL_DOXYGEN
-
-#include <X11/Xft/Xft.h>
-
-#include <math.h>
-
-#define USE_OVERLAY 0
-
-// The predefined fonts that FLTK has:
-static Fl_Fontdesc built_in_table[] = {
-#if 1
-{" sans"},
-{"Bsans"},
-{"Isans"},
-{"Psans"},
-{" mono"},
-{"Bmono"},
-{"Imono"},
-{"Pmono"},
-{" serif"},
-{"Bserif"},
-{"Iserif"},
-{"Pserif"},
-{" symbol"},
-{" screen"},
-{"Bscreen"},
-{" zapf dingbats"},
-#else
-{" helvetica"},
-{"Bhelvetica"},
-{"Ihelvetica"},
-{"Phelvetica"},
-{" courier"},
-{"Bcourier"},
-{"Icourier"},
-{"Pcourier"},
-{" times"},
-{"Btimes"},
-{"Itimes"},
-{"Ptimes"},
-{" symbol"},
-{" lucidatypewriter"},
-{"Blucidatypewriter"},
-{" zapf dingbats"},
-#endif
-};
-
-Fl_Fontdesc* fl_fonts = built_in_table;
-
-Fl_XFont_On_Demand fl_xfont;
-void *fl_xftfont = 0;
-//static const char* fl_encoding_ = "iso8859-1";
-static const char* fl_encoding_ = "iso10646-1";
-
-static void fl_xft_font(Fl_Xlib_Graphics_Driver *driver, Fl_Font fnum, Fl_Fontsize size, int angle) {
-  if (fnum==-1) { // special case to stop font caching
-    driver->Fl_Graphics_Driver::font(0, 0);
-    return;
-  }
-  Fl_Font_Descriptor* f = driver->font_descriptor();
-  if (fnum == driver->Fl_Graphics_Driver::font() && size == driver->size() && f && f->angle == angle)
-    return;
-  driver->Fl_Graphics_Driver::font(fnum, size);
-  Fl_Fontdesc *font = fl_fonts + fnum;
-  // search the fontsizes we have generated already
-  for (f = font->first; f; f = f->next) {
-    if (f->size == size && f->angle == angle)// && !strcasecmp(f->encoding, fl_encoding_))
-      break;
-  }
-  if (!f) {
-    f = new Fl_Font_Descriptor(font->name, size, angle);
-    f->next = font->first;
-    font->first = f;
-  }
-  driver->font_descriptor(f);
-#if XFT_MAJOR < 2
-  fl_xfont    = f->font->u.core.font;
-#else
-  fl_xfont    = NULL; // invalidate
-#endif // XFT_MAJOR < 2
-  fl_xftfont = (void*)f->font;
-}
-
-void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
-  fl_xft_font(this,fnum,size,0);
-}
-
-static XftFont* fontopen(const char* name, Fl_Fontsize size, bool core, int angle) {
-  // Check: does it look like we have been passed an old-school XLFD fontname?
-  bool is_xlfd = false;
-  int hyphen_count = 0;
-  int comma_count = 0;
-  unsigned len = strlen(name);
-  if (len > 512) len = 512; // ensure we are not passed an unbounded font name
-  for(unsigned idx = 0; idx < len; idx++) {
-    if(name[idx] == '-') hyphen_count++; // check for XLFD hyphens
-    if(name[idx] == ',') comma_count++;  // are there multiple names?
-  }
-  if(hyphen_count >= 14) is_xlfd = true; // Not a robust check, but good enough?
-
-  fl_open_display();
-
-  if(!is_xlfd) { // Not an XLFD - open as a XFT style name
-    XftFont *the_font = NULL; // the font we will return;
-    XftPattern *fnt_pat = XftPatternCreate(); // the pattern we will use for matching
-    int slant = XFT_SLANT_ROMAN;
-    int weight = XFT_WEIGHT_MEDIUM;
-
-    /* This "converts" FLTK-style font names back into "regular" names, extracting
-     * the BOLD and ITALIC codes as it does so - all FLTK font names are prefixed
-     * by 'I' (italic) 'B' (bold) 'P' (bold italic) or ' ' (regular) modifiers.
-     * This gives a fairly limited font selection ability, but is retained for
-     * compatibility reasons. If you really need a more complex choice, you are best
-     * calling Fl::set_fonts(*) then selecting the font by font-index rather than by
-     * name anyway. Probably.
-     * If you want to load a font who's name does actually begin with I, B or P, you
-     * MUST use a leading space OR simply use lowercase for the name...
-     */
-    /* This may be efficient, but it is non-obvious. */
-    switch (*name++) {
-    case 'I': slant = XFT_SLANT_ITALIC; break; // italic
-    case 'P': slant = XFT_SLANT_ITALIC;        // bold-italic (falls-through)
-    case 'B': weight = XFT_WEIGHT_BOLD; break; // bold
-    case ' ': break;                           // regular
-    default: name--;                           // no prefix, restore name
-    }
-
-    if(comma_count) { // multiple comma-separated names were passed
-      char *local_name = strdup(name); // duplicate the full name so we can edit the copy
-      char *curr = local_name; // points to first name in string
-      char *nxt; // next name in string
-      do {
-        nxt = strchr(curr, ','); // find comma separator
-        if (nxt) {
-          *nxt = 0; // terminate first name
-          nxt++; // first char of next name
-        }
-
-	// Add the current name to the match pattern
-	XftPatternAddString(fnt_pat, XFT_FAMILY, curr);
-
-        if(nxt) curr = nxt; // move onto next name (if it exists)
-	// Now do a cut-down version of the FLTK name conversion.
-	// NOTE: we only use the slant and weight of the first name,
-	// subsequent names we ignore this for... But we still need to do the check.
-        switch (*curr++) {
-        case 'I': break; // italic
-        case 'P':        // bold-italic (falls-through)
-        case 'B': break; // bold
-        case ' ': break; // regular
-        default: curr--; // no prefix, restore name
-        }
-
-        comma_count--; // decrement name sections count
-      } while (comma_count >= 0);
-      free(local_name); // release our local copy of font names
-    }
-    else { // single name was passed - add it directly
-      XftPatternAddString(fnt_pat, XFT_FAMILY, name);
-    }
-
-    // Construct a match pattern for the font we want...
-    XftPatternAddInteger(fnt_pat, XFT_WEIGHT, weight);
-    XftPatternAddInteger(fnt_pat, XFT_SLANT, slant);
-    XftPatternAddDouble (fnt_pat, XFT_PIXEL_SIZE, (double)size);
-    XftPatternAddString (fnt_pat, XFT_ENCODING, fl_encoding_);
-
-    // rotate font if angle!=0
-    if (angle !=0) {
-      XftMatrix m;
-      XftMatrixInit(&m);
-      XftMatrixRotate(&m,cos(M_PI*angle/180.),sin(M_PI*angle/180.));
-      XftPatternAddMatrix (fnt_pat, XFT_MATRIX,&m);
-    }
-
-    if (core) {
-      XftPatternAddBool(fnt_pat, XFT_CORE, FcTrue);
-      XftPatternAddBool(fnt_pat, XFT_RENDER, FcFalse);
-    }
-
-    XftPattern *match_pat;  // the best available match on the system
-    XftResult match_result; // the result of our matching attempt
-
-    // query the system to find a match for this font
-    match_pat = XftFontMatch(fl_display, fl_screen, fnt_pat, &match_result);
-
-#if 0 // the XftResult never seems to get set to anything... abandon this code?
-    switch(match_result) { // how good a match is this font for our request?
-      case XftResultMatch:
-	puts("Object exists with the specified ID");
-	break;
-
-      case XftResultTypeMismatch:
-	puts("Object exists, but the type does not match");
-	break;
-
-      case XftResultNoId:
-	puts("Object exists, but has fewer values than specified");
-	break;
-
-      case FcResultOutOfMemory:
-	puts("FcResult: Malloc failed");
-	break;
-
-      case XftResultNoMatch:
-	puts("Object does not exist at all");
-	break;
-
-      default:
-	printf("Invalid XftResult status %d \n", match_result);
-	break;
-    }
-#endif
-
-#if 0 // diagnostic to print the "full name" of the font we matched. This works.
-    FcChar8 *picked_name =  FcNameUnparse(match_pat);
-    printf("Match: %s\n", picked_name);
-    free(picked_name);
-#endif
-
-    // open the matched font
-    if (match_pat) the_font = XftFontOpenPattern(fl_display, match_pat);
-
-    if (!match_pat || !the_font) {
-      // last chance, just open any font in the right size
-      the_font = XftFontOpen (fl_display, fl_screen,
-                        XFT_FAMILY, XftTypeString, "sans",
-                        XFT_SIZE, XftTypeDouble, (double)size,
-                        NULL);
-      XftPatternDestroy(fnt_pat);
-      if (!the_font) {
-        Fl::error("Unable to find fonts. Check your FontConfig configuration.\n");
-        exit(1);
-      }
-      return the_font;
-    }
-
-#if 0 // diagnostic to print the "full name" of the font we actually opened. This works.
-    FcChar8 *picked_name2 =  FcNameUnparse(the_font->pattern);
-    printf("Open : %s\n", picked_name2);
-    free(picked_name2);
-#endif
-
-    XftPatternDestroy(fnt_pat);
-//  XftPatternDestroy(match_pat); // FontConfig will destroy this resource for us. We must not!
-
-    return the_font;
-  }
-  else { // We were passed a font name in XLFD format
-    /* OksiD's X font code could handle being passed a comma separated list
-     * of XLFD's. It then attempted to find which font was "best" from this list.
-     * But XftFontOpenXlfd can not do this, so if a list is passed, we just
-     * terminate it at the first comma.
-     * A "better" solution might be to use XftXlfdParse() on each of the passed
-     * XLFD's to construct a "super-pattern" that incorporates attributes from all
-     * XLFD's and use that to perform a XftFontMatch(). Maybe...
-     */
-    char *local_name = strdup(name);
-    if(comma_count) { // This means we were passed multiple XLFD's
-      char *pc = strchr(local_name, ',');
-      *pc = 0; // terminate the XLFD at the first comma
-    }
-    XftFont *the_font = XftFontOpenXlfd(fl_display, fl_screen, local_name);
-    free(local_name);
-#if 0 // diagnostic to print the "full name" of the font we actually opened. This works.
-puts("Font Opened"); fflush(stdout);
-    FcChar8 *picked_name2 =  FcNameUnparse(the_font->pattern);
-    printf("Open : %s\n", picked_name2); fflush(stdout);
-    free(picked_name2);
-#endif
-   return the_font;
-  }
-} // end of fontopen
-
-Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) {
-//  encoding = fl_encoding_;
-  size = fsize;
-  angle = fangle;
-#if HAVE_GL
-  listbase = 0;
-#endif // HAVE_GL
-  font = fontopen(name, fsize, false, angle);
-}
-
-Fl_Font_Descriptor::~Fl_Font_Descriptor() {
-  if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL);
-//  XftFontClose(fl_display, font);
-}
-
-/* decodes the input UTF-8 string into a series of wchar_t characters.
- n is set upon return to the number of characters.
- Don't deallocate the returned memory.
- */
-static const wchar_t *utf8reformat(const char *str, int& n)
-{
-  static const wchar_t empty[] = {0};
-  static wchar_t *buffer;
-  static int lbuf = 0;
-  int newn;
-  if (n == 0) return empty;
-  newn = fl_utf8towc(str, n, (wchar_t*)buffer, lbuf);
-  if (newn >= lbuf) {
-    lbuf = newn + 100;
-    if (buffer) free(buffer);
-    buffer = (wchar_t*)malloc(lbuf * sizeof(wchar_t));
-    n = fl_utf8towc(str, n, (wchar_t*)buffer, lbuf);
-  } else {
-    n = newn;
-  }
-  return buffer;
-}
-
-static void utf8extents(Fl_Font_Descriptor *desc, const char *str, int n, XGlyphInfo *extents)
-{
-  memset(extents, 0, sizeof(XGlyphInfo));
-  const wchar_t *buffer = utf8reformat(str, n);
-#ifdef __CYGWIN__
-    XftTextExtents16(fl_display, desc->font, (XftChar16 *)buffer, n, extents);
-#else
-    XftTextExtents32(fl_display, desc->font, (XftChar32 *)buffer, n, extents);
-#endif
-}
-
-int Fl_Xlib_Graphics_Driver::height() {
-  if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent;
-  else return -1;
-}
-
-int Fl_Xlib_Graphics_Driver::descent() {
-  if (font_descriptor()) return font_descriptor()->font->descent;
-  else return -1;
-}
-
-double Fl_Xlib_Graphics_Driver::width(const char* str, int n) {
-  if (!font_descriptor()) return -1.0;
-  XGlyphInfo i;
-  utf8extents(font_descriptor(), str, n, &i);
-  return i.xOff;
-}
-
-/*double fl_width(uchar c) {
-  return fl_graphics_driver->width((const char *)(&c), 1);
-}*/
-
-static double fl_xft_width(Fl_Font_Descriptor *desc, FcChar32 *str, int n) {
-  if (!desc) return -1.0;
-  XGlyphInfo i;
-  XftTextExtents32(fl_display, desc->font, str, n, &i);
-  return i.xOff;
-}
-
-double Fl_Xlib_Graphics_Driver::width(unsigned int c) {
-  return fl_xft_width(font_descriptor(), (FcChar32 *)(&c), 1);
-}
-
-void Fl_Xlib_Graphics_Driver::text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
-  if (!font_descriptor()) {
-    w = h = 0;
-    dx = dy = 0;
-    return;
-  }
-  XGlyphInfo gi;
-  utf8extents(font_descriptor(), c, n, &gi);
-
-  w = gi.width;
-  h = gi.height;
-  dx = -gi.x;
-  dy = -gi.y;
-} // fl_text_extents
-
-
-/* This code is used (mainly by opengl) to get a bitmapped font. The
- * original XFT-1 code used XFT's "core" fonts methods to load an XFT
- * font that was actually a X-bitmap font, that could then be readily
- * used with GL.  But XFT-2 does not provide that ability, and there
- * is no easy method to use an XFT font directly with GL. So...
-*/
-
-#  if XFT_MAJOR > 1
-// This function attempts, on XFT2 systems, to find a suitable "core" Xfont
-// for GL or other bitmap font needs (we dont have an XglUseXftFont(...) function.)
-// There's probably a better way to do this. I can't believe it is this hard...
-// Anyway... This code attempts to make an XLFD out of the fltk-style font
-// name it is passed, then tries to load that font. Surprisingly, this quite
-// often works - boxes that have XFT generally also have a fontserver that
-// can serve TTF and other fonts to X, and so the font name that fltk makes
-// from the XFT name often also "exists" as an "core" X font...
-// If this code fails to load the requested font, it falls back through a
-// series of tried 'n tested alternatives, ultimately resorting to what the
-// original fltk code did.
-// NOTE: On my test boxes (FC6, FC7, FC8, ubuntu8.04, 9.04, 9.10) this works 
-//       well for the fltk "built-in" font names.
-static XFontStruct* load_xfont_for_xft2(Fl_Graphics_Driver *driver) {
-  XFontStruct* xgl_font = 0;
-  int size = driver->size();
-  int fnum = driver->font();
-  const char *wt_med = "medium";
-  const char *wt_bold = "bold";
-  const char *weight = wt_med; // no specifc weight requested - accept any
-  char slant = 'r';   // regular non-italic by default
-  char xlfd[128];     // we will put our synthetic XLFD in here
-  char *pc = strdup(fl_fonts[fnum].name); // what font were we asked for?
-  const char *name = pc;    // keep a handle to the original name for freeing later
-  // Parse the "fltk-name" of the font
-  switch (*name++) {
-  case 'I': slant = 'i'; break;       // italic
-  case 'P': slant = 'i';              // bold-italic (falls-through)
-  case 'B': weight = wt_bold; break;  // bold
-  case ' ': break;                    // regular
-  default: name--;                    // no prefix, restore name
-  }
-
-  // first, we do a query with no prefered size, to see if the font exists at all
-  snprintf(xlfd, 128, "-*-%s-%s-%c-*--*-*-*-*-*-*-*-*", name, weight, slant); // make up xlfd style name
-  xgl_font = XLoadQueryFont(fl_display, xlfd);
-  if(xgl_font) { // the face exists, but can we get it in a suitable size?
-    XFreeFont(fl_display, xgl_font); // release the non-sized version
-    snprintf(xlfd, 128, "-*-%s-%s-%c-*--*-%d-*-*-*-*-*-*", name, weight, slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd); // attempt to load the font at the right size
-  }
-//puts(xlfd);
-
-  // try alternative names
-  if (!xgl_font) {
-    if (!strcmp(name, "sans")) {
-      name = "helvetica";
-    } else if (!strcmp(name, "mono")) {
-      name = "courier";
-    } else if (!strcmp(name, "serif")) {
-      name = "times";
-    } else if (!strcmp(name, "screen")) {
-      name = "lucidatypewriter";
-    } else if (!strcmp(name, "dingbats")) {
-      name = "zapf dingbats";
-    }
-    snprintf(xlfd, 128, "-*-*%s*-%s-%c-*--*-%d-*-*-*-*-*-*", name, weight, slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }  
-  free(pc); // release our copy of the font name
-  
-  // if we have nothing loaded, try a generic proportional font
-  if(!xgl_font) {
-    snprintf(xlfd, 128, "-*-helvetica-*-%c-*--*-%d-*-*-*-*-*-*", slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }
-  // If that still didn't work, try courier with resquested weight and slant
-  if(!xgl_font && weight != wt_med) {
-    snprintf(xlfd, 128, "-*-courier*-%s-%c-*--*-%d-*-*-*-*-*-*", weight, slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }
-  // If that still didn't work, try this instead
-  if(!xgl_font) {
-    snprintf(xlfd, 128, "-*-courier*-medium-%c-*--*-%d-*-*-*-*-*-*", slant, (size*10));
-    xgl_font = XLoadQueryFont(fl_display, xlfd);
-  }
-//printf("glf: %d\n%s\n%s\n", size, xlfd, fl_fonts[fl_font_].name);
-//if(xgl_font) puts("ok");
-
-  // Last chance fallback - this usually loads something...
-  if (!xgl_font) xgl_font = XLoadQueryFont(fl_display, "fixed");
-
-  return xgl_font;
-} // end of load_xfont_for_xft2
-#  endif
-
-static XFontStruct* fl_xxfont(Fl_Graphics_Driver *driver) {
-#  if XFT_MAJOR > 1
-  // kludge! XFT 2 and later does not provide core fonts for us to use with GL
-  // try to load a bitmap X font instead
-  static XFontStruct* xgl_font = 0;
-  static int glsize = 0;
-  static int glfont = -1;
-  // Do we need to load a new font?
-  if ((!xgl_font) || (glsize != driver->size()) || (glfont != driver->font())) {
-    // create a dummy XLFD for some font of the appropriate size...
-    if (xgl_font) XFreeFont(fl_display, xgl_font); // font already loaded, free it - this *might* be a Bad Idea
-    glsize = driver->size(); // record current font size
-    glfont = driver->font(); // and face
-    xgl_font = load_xfont_for_xft2(driver);
-  }
-  return xgl_font;
-#  else // XFT-1 provides a means to load a "core" font directly
-  if (driver->font_descriptor()->font->core) {
-    return driver->font_descriptor()->font->u.core.font; // is the current font a "core" font? If so, use it.
-    }
-  static XftFont* xftfont;
-  if (xftfont) XftFontClose (fl_display, xftfont);
-  xftfont = fontopen(fl_fonts[driver->font()].name, driver->size(), true, 0); // else request XFT to load a suitable "core" font instead.
-  return xftfont->u.core.font;
-#  endif // XFT_MAJOR > 1
-}
-
-XFontStruct* Fl_XFont_On_Demand::value() {
-  if (!ptr) ptr = fl_xxfont(fl_graphics_driver);
-  return ptr;
-}
-
-#if USE_OVERLAY
-// Currently Xft does not work with colormapped visuals, so this probably
-// does not work unless you have a true-color overlay.
-extern bool fl_overlay;
-extern Colormap fl_overlay_colormap;
-extern XVisualInfo* fl_overlay_visual;
-#endif
-
-// For some reason Xft produces errors if you destroy a window whose id
-// still exists in an XftDraw structure. It would be nice if this is not
-// true, a lot of junk is needed to try to stop this:
-
-static XftDraw* draw_;
-static Window draw_window;
-#if USE_OVERLAY
-static XftDraw* draw_overlay;
-static Window draw_overlay_window;
-#endif
-
-void fl_destroy_xft_draw(Window id) {
-  if (id == draw_window)
-    XftDrawChange(draw_, draw_window = fl_message_window);
-#if USE_OVERLAY
-  if (id == draw_overlay_window)
-    XftDrawChange(draw_overlay, draw_overlay_window = fl_message_window);
-#endif
-}
-
-void Fl_Xlib_Graphics_Driver::draw(const char *str, int n, int x, int y) {
-  if ( !this->font_descriptor() ) {
-    this->font(FL_HELVETICA, FL_NORMAL_SIZE);
-  }
-#if USE_OVERLAY
-  XftDraw*& draw_ = fl_overlay ? draw_overlay : ::draw_;
-  if (fl_overlay) {
-    if (!draw_)
-      draw_ = XftDrawCreate(fl_display, draw_overlay_window = fl_window,
-			   fl_overlay_visual->visual, fl_overlay_colormap);
-    else //if (draw_overlay_window != fl_window)
-      XftDrawChange(draw_, draw_overlay_window = fl_window);
-  } else
-#endif
-  if (!draw_)
-    draw_ = XftDrawCreate(fl_display, draw_window = fl_window,
-			 fl_visual->visual, fl_colormap);
-  else //if (draw_window != fl_window)
-    XftDrawChange(draw_, draw_window = fl_window);
-
-  Region region = fl_clip_region();
-  if (region && XEmptyRegion(region)) return;
-  XftDrawSetClip(draw_, region);
-
-  // Use fltk's color allocator, copy the results to match what
-  // XftCollorAllocValue returns:
-  XftColor color;
-  color.pixel = fl_xpixel(Fl_Graphics_Driver::color());
-  uchar r,g,b; Fl::get_color(Fl_Graphics_Driver::color(), r,g,b);
-  color.color.red   = ((int)r)*0x101;
-  color.color.green = ((int)g)*0x101;
-  color.color.blue  = ((int)b)*0x101;
-  color.color.alpha = 0xffff;
-  
-  const wchar_t *buffer = utf8reformat(str, n);
-#ifdef __CYGWIN__
-  XftDrawString16(draw_, &color, font_descriptor()->font, x, y, (XftChar16 *)buffer, n);
-#else
-  XftDrawString32(draw_, &color, font_descriptor()->font, x, y, (XftChar32 *)buffer, n);
-#endif
-}
-
-void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
-  fl_xft_font(this, this->Fl_Graphics_Driver::font(), this->size(), angle);
-  this->draw(str, n, (int)x, (int)y);
-  fl_xft_font(this, this->Fl_Graphics_Driver::font(), this->size(), 0);
-}
-
-static void fl_drawUCS4(Fl_Graphics_Driver *driver, const FcChar32 *str, int n, int x, int y) {
-#if USE_OVERLAY
-  XftDraw*& draw_ = fl_overlay ? draw_overlay : ::draw_;
-  if (fl_overlay) {
-    if (!draw_)
-      draw_ = XftDrawCreate(fl_display, draw_overlay_window = fl_window,
-			   fl_overlay_visual->visual, fl_overlay_colormap);
-    else //if (draw_overlay_window != fl_window)
-      XftDrawChange(draw_, draw_overlay_window = fl_window);
-  } else
-#endif
-  if (!draw_)
-    draw_ = XftDrawCreate(fl_display, draw_window = fl_window,
-			 fl_visual->visual, fl_colormap);
-  else //if (draw_window != fl_window)
-    XftDrawChange(draw_, draw_window = fl_window);
-
-  Region region = fl_clip_region();
-  if (region && XEmptyRegion(region)) return;
-  XftDrawSetClip(draw_, region);
-
-  // Use fltk's color allocator, copy the results to match what
-  // XftCollorAllocValue returns:
-  XftColor color;
-  color.pixel = fl_xpixel(driver->color());
-  uchar r,g,b; Fl::get_color(driver->color(), r,g,b);
-  color.color.red   = ((int)r)*0x101;
-  color.color.green = ((int)g)*0x101;
-  color.color.blue  = ((int)b)*0x101;
-  color.color.alpha = 0xffff;
-
-  XftDrawString32(draw_, &color, driver->font_descriptor()->font, x, y, (FcChar32 *)str, n);
-}
-
-
-void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) {
-
-#if defined(__GNUC__)
-// FIXME: warning Need to improve this XFT right to left draw function
-#endif /*__GNUC__*/
-
-// This actually draws LtoR, but aligned to R edge with the glyph order reversed...
-// but you can't just byte-rev a UTF-8 string, that isn't valid.
-// You can reverse a UCS4 string though...
-  int num_chars, wid, utf_len = strlen(c);
-  FcChar8 *u8 = (FcChar8 *)c;
-  FcBool valid = FcUtf8Len(u8, utf_len, &num_chars, &wid);
-  if (!valid)
-  {
-    // badly formed Utf-8 input string
-    return;
-  }
-  if (num_chars < n) n = num_chars; // limit drawing to usable characters in input array
-  FcChar32 *ucs_txt = new FcChar32[n+1];
-  FcChar32* pu;
-  int out, sz;
-  ucs_txt[n] = 0;
-  out = n-1;
-  while ((out >= 0) && (utf_len > 0))
-  {
-    pu = &ucs_txt[out];
-    sz = FcUtf8ToUcs4(u8, pu, utf_len);
-    utf_len = utf_len - sz;
-    u8 = u8 + sz;
-    out = out - 1;
-  }
-  // Now we have a UCS4 version of the input text, reversed, in ucs_txt
-  int offs = (int)fl_xft_width(font_descriptor(), ucs_txt, n);
-  fl_drawUCS4(this, ucs_txt, n, (x-offs), y);
-
-  delete[] ucs_txt;
-}
-#endif
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/src/fl_gleam.cxx
+++ /dev/null
@@ -1,186 +1,0 @@
-//
-// "$Id$"
-//
-// "Gleam" scheme box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// These box types provide a sort of Clearlooks Glossy scheme
-// for FLTK.
-//
-// Copyright 2001-2005 by Colin Jones.
-//
-// Modified 2012-2013 by Edmanuel Torres
-// This is a new version of the fl_gleam. The gradients are on the top
-// and the bottom, the text area looks like in the classic FLTK way.
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-/*
-  Implementation notes:
-
-  All box types have 2 pixel wide borders, there is no distinction
-  of "thin" box types, hence Fl::box_dx() = Fl::box_dy() = 2,
-  Fl::box_dw() = Fl::box_dh() = 4 for all box types.
-
-  All coordinates of function calls (x, y, w, h) describe the full
-  box size with borders, i.e. the original box coordinates.
-  The interior (background) of the box is drawn with reduced size.
-  This is adjusted only in function shade_rect_top_bottom().
-
-  Note: There is one pixel "leaking" out of the box border at each
-  corner which is currently not drawn in a full box redraw.
-*/
-
-// Standard box drawing code
-
-static void gleam_color(Fl_Color c) {
-  Fl::set_box_color(c);
-}
-
-/* Draw the shaded background of the box.
-
-  This is called before the box frame (border) is drawn.
-  The interior of the box (shaded background) should be inset by two
-  pixels, hence width and height should be reduced by 4 (border size).
-  Since not all pixels of the border are drawn (border lines are shorter
-  by one or two pixels on each side) setting other offsets (+1, -2 instead
-  of +2, -4) would leak the box background color instead of the parent
-  widget's background color.
-  Note: the original implementation was maybe equivalent to using +1 and -2
-  for offset and width, respectively instead of +2 and -4. It is not clear
-  whether this was intended or by accident.
-*/
-
-static void shade_rect_top_bottom(int x, int y, int w, int h, Fl_Color fg1, Fl_Color fg2, float th) {
-  // calculate background size w/o borders
-  x += 2; y += 2; w -= 4; h -= 4;
-  // draw the shiny background using maximum limits
-  int h_top    = ((h/2) < (20) ? (h/2) : (20)); // min(h/2, 20);
-  int h_bottom = ((h/6) < (15) ? (h/6) : (15)); // min(h/6, 15);
-  int h_flat = h - h_top - h_bottom;
-  float step_size_top = h_top > 1 ? (0.999f/float(h_top)) : 1;
-  float step_size_bottom = h_bottom > 1 ? (0.999f/float(h_bottom)) : 1;
-  // draw the gradient at the top of the widget
-  float k = 1;
-  for (int i = 0; i < h_top; i++, k -= step_size_top) {
-    gleam_color(fl_color_average(fl_color_average(fg1, fg2, th), fg1, k));
-    fl_xyline(x, y+i, x+w-1);
-  }
-
-  // draw a "flat" rectangle in the middle area of the box
-  gleam_color(fg1);
-  fl_rectf(x, y + h_top, w, h_flat);
-
-  // draw the gradient at the bottom of the widget
-  k = 1;
-  for (int i = 0; i < h_bottom; i++, k -= step_size_bottom) {
-    gleam_color(fl_color_average(fg1, fl_color_average(fg1, fg2, th), k));
-    fl_xyline(x, y+h_top+h_flat+i, x+w-1);
-  }
-}
-
-// See shade_rect_top_bottom()
-static void shade_rect_top_bottom_up(int x, int y, int w, int h, Fl_Color bc, float th) {
-  shade_rect_top_bottom(x, y, w, h, bc, FL_WHITE, th);
-}
-
-// See shade_rect_top_bottom()
-static void shade_rect_top_bottom_down(int x, int y, int w, int h, Fl_Color bc, float th) {
-  shade_rect_top_bottom(x, y, w, h, bc, FL_BLACK, th);
-}
-
-// Draw box borders. Color arguments:
-// - fg1: outer border line (left, right, top, bottom)
-// - fg2: inner border line (left, right)
-// - lc : inner border line (top, bottom)
-
-static void frame_rect(int x, int y, int w, int h, Fl_Color fg1, Fl_Color fg2, Fl_Color lc) {
-  // outer border line:
-  gleam_color(fg1);
-  fl_xyline(x+1,   y,     x+w-2);   // top
-  fl_yxline(x+w-1, y+1,   y+h-2);   // right
-  fl_xyline(x+1,   y+h-1, x+w-2);   // bottom
-  fl_yxline(x,     y+1,   y+h-2);   // left
-
-  // inner border line (left, right):
-  gleam_color(fg2);
-  fl_yxline(x+1,   y+2,   y+h-3);   // left
-  fl_yxline(x+w-2, y+2,   y+h-3);   // right
-
-  // inner border line (top, bottom):
-  gleam_color(lc);
-  fl_xyline(x+2,   y+1,   x+w-3);   // top
-  fl_xyline(x+2,   y+h-2, x+w-3);   // bottom
-}
-
-// Draw box borders with different colors (up/down effect).
-
-static void frame_rect_up(int x, int y, int w, int h, Fl_Color bc, Fl_Color lc, float th1, float th2) {
-  frame_rect(x, y, w, h, fl_color_average(fl_darker(bc), FL_BLACK, th1), fl_color_average(bc, FL_WHITE, th2), lc);
-}
-
-static void frame_rect_down(int x, int y, int w, int h, Fl_Color bc, Fl_Color lc, float th1, float th2) {
-  frame_rect(x,y,w,h,fl_color_average(bc, FL_WHITE, th1), fl_color_average(FL_BLACK, bc, th2), lc);
-}
-
-// Draw the different box types. These are the actual box drawing functions.
-
-static void up_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect_up(x, y, w, h, c, fl_color_average(c, FL_WHITE, .25f), .55f, .05f);
-}
-
-static void up_box(int x, int y, int w, int h, Fl_Color c) {
-  shade_rect_top_bottom_up(x, y, w, h, c, .15f);
-  frame_rect_up(x, y, w, h, c, fl_color_average(c, FL_WHITE, .05f), .15f, .05f);
-}
-
-static void thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-  shade_rect_top_bottom_up(x, y, w, h, c, .25f);
-  frame_rect_up(x, y, w, h, c, fl_color_average(c, FL_WHITE, .45f), .25f, .15f);
-}
-
-static void down_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect_down(x, y, w, h, fl_darker(c), fl_darker(c), .25f, .95f);
-}
-
-static void down_box(int x, int y, int w, int h, Fl_Color c) {
-  shade_rect_top_bottom_down(x, y, w, h, c, .65f);
-  frame_rect_down(x, y, w, h, c, fl_color_average(c, FL_BLACK, .05f), .05f, .95f);
-}
-
-static void thin_down_box(int x, int y, int w, int h, Fl_Color c) {
-  shade_rect_top_bottom_down(x, y, w, h, c, .85f);
-  frame_rect_down(x, y, w, h, c, fl_color_average(c, FL_BLACK, .45f), .35f, 0.85f);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-Fl_Boxtype fl_define_FL_GLEAM_UP_BOX() {
-  fl_internal_boxtype(_FL_GLEAM_UP_BOX, up_box);
-  fl_internal_boxtype(_FL_GLEAM_DOWN_BOX, down_box);
-  fl_internal_boxtype(_FL_GLEAM_UP_FRAME, up_frame);
-  fl_internal_boxtype(_FL_GLEAM_DOWN_FRAME, down_frame);
-  fl_internal_boxtype(_FL_GLEAM_THIN_UP_BOX, thin_up_box);
-  fl_internal_boxtype(_FL_GLEAM_THIN_DOWN_BOX, thin_down_box);
-  fl_internal_boxtype(_FL_GLEAM_ROUND_UP_BOX, up_box);
-  fl_internal_boxtype(_FL_GLEAM_ROUND_DOWN_BOX, down_box);
-  return _FL_GLEAM_UP_BOX;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_gtk.cxx
+++ /dev/null
@@ -1,293 +1,0 @@
-//
-// "$Id$"
-//
-// "GTK" drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// These box types provide a GTK+ look, based on Red Hat's Bluecurve
-// theme...
-//
-// Copyright 2006-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-
-static void gtk_color(Fl_Color c) {
-  Fl::set_box_color(c);
-}
-
-static void gtk_up_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5));
-  fl_xyline(x + 2, y + 1, x + w - 3);
-  fl_yxline(x + 1, y + 2, y + h - 3);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5));
-  fl_begin_loop();
-    fl_vertex(x, y + 2);
-    fl_vertex(x + 2, y);
-    fl_vertex(x + w - 3, y);
-    fl_vertex(x + w - 1, y + 2);
-    fl_vertex(x + w - 1, y + h - 3);
-    fl_vertex(x + w - 3, y + h - 1);
-    fl_vertex(x + 2, y + h - 1);
-    fl_vertex(x, y + h - 3);
-  fl_end_loop();
-}
-
-
-static void gtk_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_up_frame(x, y, w, h, c);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  fl_xyline(x + 2, y + 2, x + w - 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  fl_xyline(x + 2, y + 3, x + w - 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  fl_xyline(x + 2, y + 4, x + w - 3);
-  gtk_color(c);
-  fl_rectf(x + 2, y + 5, w - 4, h - 7);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  fl_xyline(x + 2, y + h - 4, x + w - 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_xyline(x + 2, y + h - 3, x + w - 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 2, y + h - 2, x + w - 3);
-  fl_yxline(x + w - 2, y + 2, y + h - 3);
-}
-
-
-static void gtk_down_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5));
-  fl_begin_loop();
-    fl_vertex(x, y + 2);
-    fl_vertex(x + 2, y);
-    fl_vertex(x + w - 3, y);
-    fl_vertex(x + w - 1, y + 2);
-    fl_vertex(x + w - 1, y + h - 3);
-    fl_vertex(x + w - 3, y + h - 1);
-    fl_vertex(x + 2, y + h - 1);
-    fl_vertex(x, y + h - 3);
-  fl_end_loop();
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 2, y + 1, x + w - 3);
-  fl_yxline(x + 1, y + 2, y + h - 3);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_yxline(x + 2, y + h - 2, y + 2, x + w - 2);
-}
-
-
-static void gtk_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_down_frame(x, y, w, h, c);
-
-  gtk_color(c);
-  fl_rectf(x + 3, y + 3, w - 5, h - 4);
-  fl_yxline(x + w - 2, y + 3, y + h - 3);
-}
-
-
-static void gtk_thin_up_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_WHITE, c, 0.6f));
-  fl_xyline(x + 1, y, x + w - 2);
-  fl_yxline(x, y + 1, y + h - 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.4f));
-  fl_xyline(x + 1, y + h - 1, x + w - 2);
-  fl_yxline(x + w - 1, y + 1, y + h - 2);
-}
-
-
-static void gtk_thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_thin_up_frame(x, y, w, h, c);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  fl_xyline(x + 1, y + 1, x + w - 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  fl_xyline(x + 1, y + 2, x + w - 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  fl_xyline(x + 1, y + 3, x + w - 2);
-  gtk_color(c);
-  fl_rectf(x + 1, y + 4, w - 2, h - 8);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  fl_xyline(x + 1, y + h - 4, x + w - 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  fl_xyline(x + 1, y + h - 3, x + w - 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  fl_xyline(x + 1, y + h - 2, x + w - 2);
-}
-
-
-static void gtk_thin_down_frame(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(fl_color_average(FL_BLACK, c, 0.4f));
-  fl_xyline(x + 1, y, x + w - 2);
-  fl_yxline(x, y + 1, y + h - 2);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.6f));
-  fl_xyline(x + 1, y + h - 1, x + w - 2);
-  fl_yxline(x + w - 1, y + 1, y + h - 2);
-}
-
-
-static void gtk_thin_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_thin_down_frame(x, y, w, h, c);
-
-  gtk_color(c);
-  fl_rectf(x + 1, y + 1, w - 2, h - 2);
-}
-
-//------------------------
-// new GTK+ style for round buttons
-#if 1
-
-static void fl_arc_i(int x,int y,int w,int h,double a1,double a2) {
-  fl_arc(x,y,w,h,a1,a2);
-}
-
-enum {UPPER_LEFT, LOWER_RIGHT, CLOSED, FILL};
-
-static void draw(int which, int x,int y,int w,int h, int inset)
-{
-  if (inset*2 >= w) inset = (w-1)/2;
-  if (inset*2 >= h) inset = (h-1)/2;
-  x += inset;
-  y += inset;
-  w -= 2*inset;
-  h -= 2*inset;
-  int d = w <= h ? w : h;
-  if (d <= 1) return;
-  void (*f)(int,int,int,int,double,double);
-  f = (which==FILL) ? fl_pie : fl_arc_i;
-  if (which >= CLOSED) {
-    f(x+w-d, y, d, d, w<=h ? 0 : -90, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, w<=h ? 360 : 270);
-  } else if (which == UPPER_LEFT) {
-    f(x+w-d, y, d, d, 45, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, 225);
-  } else { // LOWER_RIGHT
-    f(x, y+h-d, d, d, 225, w<=h ? 360 : 270);
-    f(x+w-d, y, d, d, w<=h ? 360 : 270, 360+45);
-  }
-  if (which == FILL) {
-    if (w < h)
-      fl_rectf(x, y+d/2, w, h-(d&-2));
-    else if (w > h)
-      fl_rectf(x+d/2, y, w-(d&-2), h);
-  } else {
-    if (w < h) {
-      if (which != UPPER_LEFT) fl_yxline(x+w-1, y+d/2-1, y+h-d/2+1);
-      if (which != LOWER_RIGHT) fl_yxline(x, y+d/2-1, y+h-d/2+1);
-    } else if (w > h) {
-      if (which != UPPER_LEFT) fl_xyline(x+d/2-1, y+h-1, x+w-d/2+1);
-      if (which != LOWER_RIGHT) fl_xyline(x+d/2-1, y, x+w-d/2+1);
-    }
-  }
-}
-
-static void gtk_round_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  draw(FILL,	    x,   y, w,   h, 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.025f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 2);
-  draw(LOWER_RIGHT, x,   y, w,   h, 3);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1);
-  draw(LOWER_RIGHT, x,   y, w,   h, 2);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1);
-
-  gtk_color(fl_color_average(FL_WHITE, c, 0.1f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 4);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 3);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.2f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 3);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 2);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.4f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 2);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 1);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  draw(CLOSED,	    x,   y, w,   h, 0);
-}
-
-static void gtk_round_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  draw(FILL,	    x,   y, w,   h, 2);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.05f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 2);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.1f));
-  draw(UPPER_LEFT,  x,   y, w,   h, 1);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0);
-
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  draw(CLOSED,	    x,   y, w,   h, 0);
-}
-
-#else
-
-static void gtk_round_up_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  fl_pie(x, y, w, h, 0.0, 360.0);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.5f));
-  fl_arc(x, y, w, h, 45.0, 180.0);
-  gtk_color(fl_color_average(FL_WHITE, c, 0.25f));
-  fl_arc(x, y, w, h, 180.0, 405.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.5f));
-  fl_arc(x, y, w, h, 225.0, 360.0);
-}
-
-
-static void gtk_round_down_box(int x, int y, int w, int h, Fl_Color c) {
-  gtk_color(c);
-  fl_pie(x, y, w, h, 0.0, 360.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.2));
-  fl_arc(x + 1, y, w, h, 90.0, 210.0);
-  gtk_color(fl_color_average(FL_BLACK, c, 0.6));
-  fl_arc(x, y, w, h, 0.0, 360.0);
-}
-
-#endif
-
-Fl_Boxtype fl_define_FL_GTK_UP_BOX() {
-  fl_internal_boxtype(_FL_GTK_UP_BOX, gtk_up_box);
-  fl_internal_boxtype(_FL_GTK_DOWN_BOX, gtk_down_box);
-  fl_internal_boxtype(_FL_GTK_UP_FRAME, gtk_up_frame);
-  fl_internal_boxtype(_FL_GTK_DOWN_FRAME, gtk_down_frame);
-  fl_internal_boxtype(_FL_GTK_THIN_UP_BOX, gtk_thin_up_box);
-  fl_internal_boxtype(_FL_GTK_THIN_DOWN_BOX, gtk_thin_down_box);
-  fl_internal_boxtype(_FL_GTK_THIN_UP_FRAME, gtk_thin_up_frame);
-  fl_internal_boxtype(_FL_GTK_THIN_DOWN_FRAME, gtk_thin_down_frame);
-  fl_internal_boxtype(_FL_GTK_ROUND_UP_BOX, gtk_round_up_box);
-  fl_internal_boxtype(_FL_GTK_ROUND_DOWN_BOX, gtk_round_down_box);
-
-  return _FL_GTK_UP_BOX;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_images_core.cxx
+++ /dev/null
@@ -1,97 +1,0 @@
-//
-// "$Id$"
-//
-// FLTK images library core.
-//
-// Copyright 1997-2010 by Easy Software Products.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   fl_register_images() - Register the image formats.
-//   fl_check_images()    - Check for a supported image format.
-//
-
-//
-// Include necessary header files...
-//
-
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_BMP_Image.H>
-#include <FL/Fl_GIF_Image.H>
-#include <FL/Fl_JPEG_Image.H>
-#include <FL/Fl_PNG_Image.H>
-#include <FL/Fl_PNM_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include "flstring.h"
-
-
-//
-// Define a simple global image registration function that registers
-// the extra image formats that aren't part of the core FLTK library.
-//
-
-static Fl_Image	*fl_check_images(const char *name, uchar *header, int headerlen);
-
-
-/**
-\brief Register the image formats.
- *
- This function is provided in the fltk_images library and 
- registers all of the "extra" image file formats that are not part
- of the core FLTK library.
-*/
-void fl_register_images() {
-  Fl_Shared_Image::add_handler(fl_check_images);
-}
-
-
-//
-// 'fl_check_images()' - Check for a supported image format.
-//
-
-Fl_Image *					// O - Image, if found
-fl_check_images(const char *name,		// I - Filename
-                uchar      *header,		// I - Header data from file
-		int) {				// I - Amount of data (not used)
-  if (memcmp(header, "GIF87a", 6) == 0 ||
-      memcmp(header, "GIF89a", 6) == 0)	// GIF file
-    return new Fl_GIF_Image(name);
-
-  if (memcmp(header, "BM", 2) == 0)	// BMP file
-    return new Fl_BMP_Image(name);
-
-  if (header[0] == 'P' && header[1] >= '1' && header[1] <= '7')
-					// Portable anymap
-    return new Fl_PNM_Image(name);
-
-#ifdef HAVE_LIBPNG
-  if (memcmp(header, "\211PNG", 4) == 0)// PNG file
-    return new Fl_PNG_Image(name);
-#endif // HAVE_LIBPNG
-
-#ifdef HAVE_LIBJPEG
-  if (memcmp(header, "\377\330\377", 3) == 0 &&
-					// Start-of-Image
-      header[3] >= 0xc0 && header[3] <= 0xef)
-	   				// APPn for JPEG file
-    return new Fl_JPEG_Image(name);
-#endif // HAVE_LIBJPEG
-
-  return 0;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_labeltype.cxx
+++ /dev/null
@@ -1,135 +1,0 @@
-//
-// "$Id$"
-//
-// Label drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing code for the (one) common label types.
-// Other label types (symbols) are in their own source files
-// to avoid linking if not used.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Group.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Image.H>
-
-void
-fl_no_label(const Fl_Label*,int,int,int,int,Fl_Align) {}
-
-void
-fl_normal_label(const Fl_Label* o, int X, int Y, int W, int H, Fl_Align align)
-{
-  fl_font(o->font, o->size);
-  fl_color((Fl_Color)o->color);
-  fl_draw(o->value, X, Y, W, H, align, o->image);
-}
-
-void
-fl_normal_measure(const Fl_Label* o, int& W, int& H) {
-  fl_font(o->font, o->size);
-  fl_measure(o->value, W, H);
-  if (o->image) {
-    if (o->image->w() > W) W = o->image->w();
-    H += o->image->h();
-  }
-}
-
-#define MAX_LABELTYPE 16
-
-static Fl_Label_Draw_F* table[MAX_LABELTYPE] = {
-  fl_normal_label,
-  fl_no_label,
-  fl_normal_label,	// _FL_SHADOW_LABEL,
-  fl_normal_label,	// _FL_ENGRAVED_LABEL,
-  fl_normal_label,	// _FL_EMBOSSED_LABEL,
-  fl_no_label,		// _FL_MULTI_LABEL,
-  fl_no_label,		// _FL_ICON_LABEL,
-  // FL_FREE_LABELTYPE+n:
-  fl_no_label, fl_no_label, fl_no_label,
-  fl_no_label, fl_no_label, fl_no_label,
-  fl_no_label, fl_no_label, fl_no_label
-};
-
-static Fl_Label_Measure_F* measure[MAX_LABELTYPE];
-
-/** Sets the functions to call to draw and measure a specific labeltype. */
-void Fl::set_labeltype(Fl_Labeltype t,Fl_Label_Draw_F* f,Fl_Label_Measure_F*m) 
-{
-  table[t] = f; measure[t] = m;
-}
-
-////////////////////////////////////////////////////////////////
-
-/** Draws a label with arbitrary alignment in an arbitrary box. */
-void Fl_Label::draw(int X, int Y, int W, int H, Fl_Align align) const {
-  if (!value && !image) return;
-  table[type](this, X, Y, W, H, align);
-}
-/** 
-    Measures the size of the label.
-    \param[in,out] W, H : this is the requested size for the label text plus image;
-         on return, this will contain the size needed to fit the label
-*/
-void Fl_Label::measure(int& W, int& H) const {
-  if (!value && !image) {
-    W = H = 0;
-    return;
-  }
-
-  Fl_Label_Measure_F* f = ::measure[type]; if (!f) f = fl_normal_measure;
-  f(this, W, H);
-}
-
-/** Draws the widget's label at the defined label position.
-    This is the normal call for a widget's draw() method.
- */
-void Fl_Widget::draw_label() const {
-  int X = x_+Fl::box_dx(box());
-  int W = w_-Fl::box_dw(box());
-  if (W > 11 && align()&(FL_ALIGN_LEFT|FL_ALIGN_RIGHT)) {X += 3; W -= 6;}
-  draw_label(X, y_+Fl::box_dy(box()), W, h_-Fl::box_dh(box()));
-}
-
-/** Draws the label in an arbitrary bounding box.
-    draw() can use this instead of draw_label(void) to change the bounding box
- */
-void Fl_Widget::draw_label(int X, int Y, int W, int H) const {
-  // quit if we are not drawing a label inside the widget:
-  if ((align()&15) && !(align() & FL_ALIGN_INSIDE)) return;
-  draw_label(X,Y,W,H,align());
-}
-
-/** Draws the label in an arbitrary bounding box with an arbitrary alignment.
-    Anybody can call this to force the label to draw anywhere.
- */
-void Fl_Widget::draw_label(int X, int Y, int W, int H, Fl_Align a) const {
-  if (flags()&SHORTCUT_LABEL) fl_draw_shortcut = 1;
-  Fl_Label l1 = label_;
-  if (!active_r()) {
-    l1.color = fl_inactive((Fl_Color)l1.color);
-    if (l1.deimage) l1.image = l1.deimage;
-  }
-  l1.draw(X,Y,W,H,a);
-  fl_draw_shortcut = 0;
-}
-
-// include these vars here so they can be referenced without including
-// Fl_Input_ code:
-#include <FL/Fl_Input_.H>
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_line_style.cxx
+++ /dev/null
@@ -1,165 +1,0 @@
-//
-// "$Id$"
-//
-// Line style code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_line_style.cxx
-  \brief Line style drawing utility hiding different platforms.
-*/
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl_Printer.H>
-#include "flstring.h"
-#include <stdio.h>
-
-// We save the current line width (absolute value) here.
-// This is currently used only for X11 clipping, see src/fl_rect.cxx.
-// FIXME: this would probably better be in class Fl::
-int fl_line_width_ = 0;
-
-#ifdef __APPLE_QUARTZ__
-float fl_quartz_line_width_ = 1.0f;
-static /*enum*/ CGLineCap fl_quartz_line_cap_ = kCGLineCapButt;
-static /*enum*/ CGLineJoin fl_quartz_line_join_ = kCGLineJoinMiter;
-static CGFloat *fl_quartz_line_pattern = 0;
-static int fl_quartz_line_pattern_size = 0;
-void fl_quartz_restore_line_style_() {
-  CGContextSetLineWidth(fl_gc, fl_quartz_line_width_);
-  CGContextSetLineCap(fl_gc, fl_quartz_line_cap_);
-  CGContextSetLineJoin(fl_gc, fl_quartz_line_join_);
-  CGContextSetLineDash(fl_gc, 0, fl_quartz_line_pattern, fl_quartz_line_pattern_size);
-}
-#endif
-
-void Fl_Graphics_Driver::line_style(int style, int width, char* dashes) {
-
-  // save line width in global variable for X11 clipping
-  if (width == 0) fl_line_width_ = 1;
-  else fl_line_width_ = width>0 ? width : -width;
-
-#if defined(USE_X11)
-  int ndashes = dashes ? strlen(dashes) : 0;
-  // emulate the WIN32 dash patterns on X
-  char buf[7];
-  if (!ndashes && (style&0xff)) {
-    int w = width ? width : 1;
-    char dash, dot, gap;
-    // adjust lengths to account for cap:
-    if (style & 0x200) {
-      dash = char(2*w);
-      dot = 1; // unfortunately 0 does not work
-      gap = char(2*w-1);
-    } else {
-      dash = char(3*w);
-      dot = gap = char(w);
-    }
-    char* p = dashes = buf;
-    switch (style & 0xff) {
-    case FL_DASH:	*p++ = dash; *p++ = gap; break;
-    case FL_DOT:	*p++ = dot; *p++ = gap; break;
-    case FL_DASHDOT:	*p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOTDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    }
-    ndashes = p-buf;
-  }
-  static int Cap[4] = {CapButt, CapButt, CapRound, CapProjecting};
-  static int Join[4] = {JoinMiter, JoinMiter, JoinRound, JoinBevel};
-  XSetLineAttributes(fl_display, fl_gc, width, 
-		     ndashes ? LineOnOffDash : LineSolid,
-		     Cap[(style>>8)&3], Join[(style>>12)&3]);
-  if (ndashes) XSetDashes(fl_display, fl_gc, 0, dashes, ndashes);
-#elif defined(WIN32)
-  // According to Bill, the "default" cap and join should be the
-  // "fastest" mode supported for the platform.  I don't know why
-  // they should be different (same graphics cards, etc., right?) MRS
-  static DWORD Cap[4]= {PS_ENDCAP_FLAT, PS_ENDCAP_FLAT, PS_ENDCAP_ROUND, PS_ENDCAP_SQUARE};
-  static DWORD Join[4]={PS_JOIN_ROUND, PS_JOIN_MITER, PS_JOIN_ROUND, PS_JOIN_BEVEL};
-  int s1 = PS_GEOMETRIC | Cap[(style>>8)&3] | Join[(style>>12)&3];
-  DWORD a[16]; int n = 0;
-  if (dashes && dashes[0]) {
-    s1 |= PS_USERSTYLE;
-    for (n = 0; n < 16 && *dashes; n++) a[n] = *dashes++;
-  } else {
-    s1 |= style & 0xff; // allow them to pass any low 8 bits for style
-  }
-  if ((style || n) && !width) width = 1; // fix cards that do nothing for 0?
-  LOGBRUSH penbrush = {BS_SOLID,fl_RGB(),0}; // can this be fl_brush()?
-  HPEN newpen = ExtCreatePen(s1, width, &penbrush, n, n ? a : 0);
-  if (!newpen) {
-    Fl::error("fl_line_style(): Could not create GDI pen object.");
-    return;
-  }
-  HPEN oldpen = (HPEN)SelectObject(fl_gc, newpen);
-  DeleteObject(oldpen);
-  DeleteObject(fl_current_xmap->pen);
-  fl_current_xmap->pen = newpen;
-#elif defined(__APPLE_QUARTZ__)
-  static /*enum*/ CGLineCap Cap[4] = { kCGLineCapButt, kCGLineCapButt,
-                                   kCGLineCapRound, kCGLineCapSquare };
-  static /*enum*/ CGLineJoin Join[4] = { kCGLineJoinMiter, kCGLineJoinMiter, 
-                                    kCGLineJoinRound, kCGLineJoinBevel };
-  if (width<1) width = 1;
-  fl_quartz_line_width_ = (float)width; 
-  fl_quartz_line_cap_ = Cap[(style>>8)&3];
-  // when printing kCGLineCapSquare seems better for solid lines
-  if ( Fl_Surface_Device::surface() != Fl_Display_Device::display_device() && style == FL_SOLID && dashes == NULL ) {
-    fl_quartz_line_cap_ = kCGLineCapSquare;
-    }
-  fl_quartz_line_join_ = Join[(style>>12)&3];
-  char *d = dashes; 
-  static CGFloat pattern[16];
-  if (d && *d) {
-	CGFloat *p = pattern;
-    while (*d) { *p++ = (float)*d++; }
-    fl_quartz_line_pattern = pattern;
-    fl_quartz_line_pattern_size = d-dashes;
-  } else if (style & 0xff) {
-    char dash, dot, gap;
-    // adjust lengths to account for cap:
-    if (style & 0x200) {
-      dash = char(2*width);
-      dot = 1; 
-      gap = char(2*width-1);
-    } else {
-      dash = char(3*width);
-      dot = gap = char(width);
-    }
-	CGFloat *p = pattern;
-    switch (style & 0xff) {
-    case FL_DASH:       *p++ = dash; *p++ = gap; break;
-    case FL_DOT:        *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOT:    *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    case FL_DASHDOTDOT: *p++ = dash; *p++ = gap; *p++ = dot; *p++ = gap; *p++ = dot; *p++ = gap; break;
-    }
-    fl_quartz_line_pattern_size = p-pattern;
-    fl_quartz_line_pattern = pattern;
-  } else {
-    fl_quartz_line_pattern = 0; 
-		fl_quartz_line_pattern_size = 0;
-  }
-  fl_quartz_restore_line_style_();
-#else
-# error unsupported platform
-#endif
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_open_uri.cxx
+++ /dev/null
@@ -1,407 +1,0 @@
-//
-// "$Id$"
-//
-// fl_open_uri() code for FLTK.
-//
-// Test with:
-//
-//    gcc -I/fltk/dir -I/fltk/dir/src -DTEST -o fl_open_uri fl_open_uri.cxx -lfltk
-//
-// Copyright 2003-2010 by Michael R Sweet
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Include necessary headers...
-//
-
-#include <FL/filename.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <sys/types.h>
-#include "flstring.h"
-#ifdef WIN32
-#  include <windows.h>
-#  include <shellapi.h>
-#else
-#  include <sys/wait.h>
-#  include <signal.h>
-#  include <fcntl.h>
-#  include <unistd.h>
-#endif // WIN32
-
-
-//
-// Local functions...
-//
-
-#if !defined(WIN32) && !defined(__APPLE__)
-static char	*path_find(const char *program, char *filename, int filesize);
-#endif // !WIN32 && !__APPLE__
-#ifndef WIN32
-static int	run_program(const char *program, char **argv, char *msg, int msglen);
-#endif // !WIN32
-
-/** \addtogroup filenames
- @{ */
-
-/**
- * Opens the specified Uniform Resource Identifier (URI).
- * Uses an operating-system dependent program or interface. For URIs
- * using the "ftp", "http", or "https" schemes, the system default web
- * browser is used to open the URI, while "mailto" and "news" URIs are
- * typically opened using the system default mail reader and "file" URIs
- * are opened using the file system navigator.
- *
- * On success, the (optional) msg buffer is filled with the command that
- * was run to open the URI; on Windows, this will always be "open uri".
- *
- * On failure, the msg buffer is filled with an English error message.
- *
- * \note
- * \b Platform \b Specific \b Issues: \b Windows \n
- * With "file:" based URIs on Windows, you may encounter issues with
- * anchors being ignored. Example: "file:///c:/some/index.html#anchor"
- * may open in the browser without the "#anchor" suffix. The behavior
- * seems to vary across different Windows versions. Workaround: open a link
- * to a separate html file that redirects to the desired "file:" URI.
- *
- * \b Example
- * \code
- * #include <FL/filename.H>
- * [..]
- * char errmsg[512];
- * if ( !fl_open_uri("http://google.com/", errmsg, sizeof(errmsg)) ) {
- *     char warnmsg[768];
- *     sprintf(warnmsg, "Error: %s", errmsg);
- *     fl_alert(warnmsg);
- * }
- * \endcode
- *
- * @param uri The URI to open
- * @param msg Optional buffer which contains the command or error message
- * @param msglen Length of optional buffer
- * @return 1 on success, 0 on failure
- */
-
-int
-fl_open_uri(const char *uri, char *msg, int msglen) {
-  // Supported URI schemes...
-  static const char * const schemes[] = {
-    "file://",
-    "ftp://",
-    "http://",
-    "https://",
-    "mailto:",
-    "news://",
-    NULL
-  };
-
-  // Validate the URI scheme...
-  int i;
-  for (i = 0; schemes[i]; i ++)
-    if (!strncmp(uri, schemes[i], strlen(schemes[i])))
-      break;
-
-  if (!schemes[i]) {
-    if (msg) {
-      char scheme[255];
-      if (sscanf(uri, "%254[^:]", scheme) == 1) {
-        snprintf(msg, msglen, "URI scheme \"%s\" not supported.", scheme);
-      } else {
-        snprintf(msg, msglen, "Bad URI \"%s\"", uri);
-      }
-    }
-
-    return 0;
-  }
-
-#ifdef WIN32
-  if (msg) snprintf(msg, msglen, "open %s", uri);
-
-  return (int)(ShellExecute(HWND_DESKTOP, "open", uri, NULL, NULL, SW_SHOW) > (void *)32);
-
-#elif defined(__APPLE__)
-  char	*argv[3];			// Command-line arguments
-
-  argv[0] = (char*)"open";
-  argv[1] = (char*)uri;
-  argv[2] = (char*)0;
-
-  if (msg) snprintf(msg, msglen, "open %s", uri);
-
-  return run_program("/usr/bin/open", argv, msg, msglen) != 0;
-
-#else // !WIN32 && !__APPLE__
-  // Run any of several well-known commands to open the URI.
-  //
-  // We give preference to the Portland group's xdg-utils
-  // programs which run the user's preferred web browser, etc.
-  // based on the current desktop environment in use.  We fall
-  // back on older standards and then finally test popular programs
-  // until we find one we can use.
-  //
-  // Note that we specifically do not support the MAILER and
-  // BROWSER environment variables because we have no idea whether
-  // we need to run the listed commands in a terminal program.
-
-  char	command[FL_PATH_MAX],		// Command to run...
-	*argv[4],			// Command-line arguments
-	remote[1024];			// Remote-mode command...
-  const char * const *commands;		// Array of commands to check...
-  static const char * const browsers[] = {
-    "xdg-open", // Portland
-    "htmlview", // Freedesktop.org
-    "firefox",
-    "mozilla",
-    "netscape",
-    "konqueror", // KDE
-    "opera",
-    "hotjava", // Solaris
-    "mosaic",
-    NULL
-  };
-  static const char * const readers[] = {
-    "xdg-email", // Portland
-    "thunderbird",
-    "mozilla",
-    "netscape",
-    "evolution", // GNOME
-    "kmailservice", // KDE
-    NULL
-  };
-  static const char * const managers[] = {
-    "xdg-open", // Portland
-    "fm", // IRIX
-    "dtaction", // CDE
-    "nautilus", // GNOME
-    "konqueror", // KDE
-    NULL
-  };
-
-  // Figure out which commands to check for...
-  if (!strncmp(uri, "file://", 7)) commands = managers;
-  else if (!strncmp(uri, "mailto:", 7) ||
-           !strncmp(uri, "news:", 5)) commands = readers;
-  else commands = browsers;
-
-  // Find the command to run...
-  for (i = 0; commands[i]; i ++)
-    if (path_find(commands[i], command, sizeof(command))) break;
-
-  if (!commands[i]) {
-    if (msg) {
-      snprintf(msg, msglen, "No helper application found for \"%s\"", uri);
-    }
-
-    return 0;
-  }
-
-  // Handle command-specific arguments...
-  argv[0] = (char *)commands[i];
-
-  if (!strcmp(commands[i], "firefox") ||
-      !strcmp(commands[i], "mozilla") ||
-      !strcmp(commands[i], "netscape") ||
-      !strcmp(commands[i], "thunderbird")) {
-    // program -remote openURL(uri)
-    snprintf(remote, sizeof(remote), "openURL(%s)", uri);
-
-    argv[1] = (char *)"-remote";
-    argv[2] = remote;
-    argv[3] = 0;
-  } else if (!strcmp(commands[i], "dtaction")) {
-    // dtaction open uri
-    argv[1] = (char *)"open";
-    argv[2] = (char *)uri;
-    argv[3] = 0;
-  } else {
-    // program uri
-    argv[1] = (char *)uri;
-    argv[2] = 0;
-  }
-
-  if (msg) {
-    strlcpy(msg, argv[0], msglen);
-
-    for (i = 1; argv[i]; i ++) {
-      strlcat(msg, " ", msglen);
-      strlcat(msg, argv[i], msglen);
-    }
-  }
-
-  return run_program(command, argv, msg, msglen) != 0;
-#endif // WIN32
-}
-
-/** Decodes a URL-encoded string.
- 
- In a Uniform Resource Identifier (URI), all non-ASCII bytes and several others (e.g., '<', '%', ' ')
- are URL-encoded using 3 bytes by "%XY" where XY is the hexadecimal value of the byte. This function
- decodes the URI restoring its original UTF-8 encoded content. Decoding is done in-place.
- */
-void fl_decode_uri(char *uri)
-{
-  char *last = uri + strlen(uri);
-  while (uri < last-2) {
-    if (*uri == '%') {
-      int h;
-      if ( sscanf(uri+1, "%2X", &h) != 1 ) break;
-      *uri = h;
-      memmove(uri+1, uri+3, last - (uri+2));
-      last -= 2;
-    }
-    uri++;
-  }
-}
-
-/**   @} */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-// Find a program in the path...
-static char *path_find(const char *program, char *filename, int filesize) {
-  const char	*path;			// Search path
-  char		*ptr,			// Pointer into filename
-		*end;			// End of filename buffer
-
-
-  if ((path = getenv("PATH")) == NULL) path = "/bin:/usr/bin";
-
-  for (ptr = filename, end = filename + filesize - 1; *path; path ++) {
-    if (*path == ':') {
-      if (ptr > filename && ptr[-1] != '/' && ptr < end) *ptr++ = '/';
-
-      strlcpy(ptr, program, end - ptr + 1);
-
-      if (!access(filename, X_OK)) return filename;
-
-      ptr = filename;
-    } else if (ptr < end) *ptr++ = *path;
-  }
-
-  if (ptr > filename) {
-    if (ptr[-1] != '/' && ptr < end) *ptr++ = '/';
-
-    strlcpy(ptr, program, end - ptr + 1);
-
-    if (!access(filename, X_OK)) return filename;
-  }
-
-  return 0;
-}
-#endif // !WIN32 && !__APPLE__
-
-
-#ifndef WIN32
-// Run the specified program, returning 1 on success and 0 on failure
-static int
-run_program(const char *program, char **argv, char *msg, int msglen) {
-  pid_t	pid;				// Process ID of first child
-  int status;				// Exit status from first child
-  sigset_t set, oldset;			// Signal masks
-
-
-  // Block SIGCHLD while we run the program...
-  //
-  // Note that I only use the POSIX signal APIs, however older operating
-  // systems may either not support POSIX signals or have side effects.
-  // IRIX, for example, provides three separate and incompatible signal
-  // APIs, so it is possible that an application setting a signal handler
-  // via signal() or sigset() will not have its SIGCHLD signals blocked...
-
-  sigemptyset(&set);
-  sigaddset(&set, SIGCHLD);
-  sigprocmask(SIG_BLOCK, &set, &oldset);
-
-  // Create child processes that actually run the program for us...
-  if ((pid = fork()) == 0) {
-    // First child comes here, fork a second child and exit...
-    if (!fork()) {
-      // Second child comes here, redirect stdin/out/err to /dev/null...
-      close(0);
-      open("/dev/null", O_RDONLY);
-
-      close(1);
-      open("/dev/null", O_WRONLY);
-
-      close(2);
-      open("/dev/null", O_WRONLY);
-
-      // Detach from the current process group...
-      setsid();
-
-      // Run the program...
-      execv(program, argv);
-      _exit(0);
-    } else {
-      // First child gets here, exit immediately...
-      _exit(0);
-    }
-  } else if (pid < 0) {
-    // Restore signal handling...
-    sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-    // Return indicating failure...
-    return 0;
-  }
-
-  // Wait for the first child to exit...
-  while (waitpid(pid, &status, 0) < 0) {
-    if (errno != EINTR) {
-      // Someone else grabbed the child status...
-      if (msg) snprintf(msg, msglen, "waitpid(%ld) failed: %s", (long)pid,
-                        strerror(errno));
-
-      // Restore signal handling...
-      sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-      // Return indicating failure...
-      return 0;
-    }
-  }
-
-  // Restore signal handling...
-  sigprocmask(SIG_SETMASK, &oldset, NULL);
-
-  // Return indicating success...
-  return 1;
-}
-#endif // !WIN32
-
-
-#ifdef TEST
-//
-// Test code...
-//
-
-// Open the URI on the command-line...
-int main(int argc, char **argv) {
-  char msg[1024];
-
-
-  if (argc != 2) {
-    puts("Usage: fl_open_uri URI");
-    return 1;
-  }
-
-  if (!fl_open_uri(argv[1], msg, sizeof(msg))) {
-    puts(msg);
-    return 1;
-  } else return 0;
-}
-#endif // TEST
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_oval_box.cxx
+++ /dev/null
@@ -1,57 +1,0 @@
-//
-// "$Id$"
-//
-// Oval box drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-// Less-used box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-static void fl_oval_flat_box(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  fl_pie(x, y, w, h, 0, 360);
-}
-
-static void fl_oval_frame(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  fl_arc(x, y, w, h, 0, 360);
-}
-
-static void fl_oval_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_oval_flat_box(x,y,w,h,c);
-  fl_oval_frame(x,y,w,h,FL_BLACK);
-}
-
-static void fl_oval_shadow_box(int x, int y, int w, int h, Fl_Color c) {
-  fl_oval_flat_box(x+3,y+3,w,h,FL_DARK3);
-  fl_oval_box(x,y,w,h,c);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_OVAL_BOX() {
-  fl_internal_boxtype(_FL_OSHADOW_BOX,fl_oval_shadow_box);
-  fl_internal_boxtype(_FL_OVAL_FRAME,fl_oval_frame);
-  fl_internal_boxtype(_FL_OFLAT_BOX,fl_oval_flat_box);
-  fl_internal_boxtype(_FL_OVAL_BOX,fl_oval_box);
-  return _FL_OVAL_BOX;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_overlay.cxx
+++ /dev/null
@@ -1,120 +1,0 @@
-//
-// "$Id$"
-//
-// Overlay support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Extremely limited "overlay" support.  You can use this to drag out
-// a rectangle in response to mouse events.  It is your responsibility
-// to erase the overlay before drawing anything that might intersect
-// it.
-
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#ifdef __APPLE__
-#include <config.h>
-#endif
-
-//#define USE_XOR
-
-static int px,py,pw,ph;
-
-#ifndef USE_XOR
-#include <stdlib.h>
-static uchar *bgN = 0L, *bgS = 0L, *bgE = 0L, *bgW = 0L;
-static int bgx, bgy, bgw, bgh;
-#endif
-
-static void draw_current_rect() {
-#ifdef USE_XOR
-# if defined(USE_X11)
-  XSetFunction(fl_display, fl_gc, GXxor);
-  XSetForeground(fl_display, fl_gc, 0xffffffff);
-  XDrawRectangle(fl_display, fl_window, fl_gc, px, py, pw, ph);
-  XSetFunction(fl_display, fl_gc, GXcopy);
-# elif defined(WIN32)
-  int old = SetROP2(fl_gc, R2_NOT);
-  fl_rect(px, py, pw, ph);
-  SetROP2(fl_gc, old);
-# elif defined(__APPLE_QUARTZ__)
-  // warning: Quartz does not support xor drawing
-  // Use the Fl_Overlay_Window instead.
-  fl_color(FL_WHITE);
-  fl_rect(px, py, pw, ph);
-# else
-#  error unsupported platform
-# endif
-#else
-  if (bgN) { free(bgN); bgN = 0L; }
-  if (bgS) { free(bgS); bgS = 0L; }
-  if (bgE) { free(bgE); bgE = 0L; }
-  if (bgW) { free(bgW); bgW = 0L; }
-  if (pw>0 && ph>0) {
-    bgE = fl_read_image(0L, px+pw-1, py, 1, ph);
-    bgW = fl_read_image(0L, px, py, 1, ph);
-    bgS = fl_read_image(0L, px, py+ph-1, pw, 1);
-    bgN = fl_read_image(0L, px, py, pw, 1);
-    bgx = px; bgy = py;
-    bgw = pw; bgh = ph;
-  }
-  fl_color(FL_WHITE);
-  fl_line_style(FL_SOLID);
-  fl_rect(px, py, pw, ph);
-  fl_color(FL_BLACK);
-  fl_line_style(FL_DOT);
-  fl_rect(px, py, pw, ph);
-  fl_line_style(FL_SOLID);
-#endif
-}
-
-static void erase_current_rect() {
-#ifdef USE_XOR
-# ifdef __APPLE_QUARTZ__
-  fl_rect(px, py, pw, ph);
-# else
-  draw_current_rect();
-# endif
-#else
-  if (bgN) fl_draw_image(bgN, bgx, bgy, bgw, 1);
-  if (bgS) fl_draw_image(bgS, bgx, bgy+bgh-1, bgw, 1);
-  if (bgW) fl_draw_image(bgW, bgx, bgy, 1, bgh);
-  if (bgE) fl_draw_image(bgE, bgx+bgw-1, bgy, 1, bgh);
-#endif
-}
-
-/**
-  Erase a selection rectangle without drawing a new one
-  */
-void fl_overlay_clear() {
-  if (pw > 0) {erase_current_rect(); pw = 0;}
-}
-
-/**
-  Draws a selection rectangle, erasing a previous one by XOR'ing it first.
-  */
-void fl_overlay_rect(int x, int y, int w, int h) {
-  if (w < 0) {x += w; w = -w;} else if (!w) w = 1;
-  if (h < 0) {y += h; h = -h;} else if (!h) h = 1;
-  if (pw > 0) {
-    if (x==px && y==py && w==pw && h==ph) return;
-    erase_current_rect();
-  }
-  px = x; py = y; pw = w; ph = h;
-  draw_current_rect();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_overlay_visual.cxx
+++ /dev/null
@@ -1,96 +1,0 @@
-//
-// "$Id$"
-//
-// X overlay support for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Return an overlay visual, if any.  Also allocate a colormap and
-// record the depth for fl_color() to use.
-// Another disgusting X interface, based on code extracted and
-// purified with great difficulty from XLayerUtil.cxx:
-
-#include <config.h>
-#if HAVE_OVERLAY
-#include <FL/Fl.H>
-#include <FL/x.H>
-
-// SERVER_OVERLAY_VISUALS property element:
-struct OverlayInfo {
-  long overlay_visual;
-  long transparent_type;
-  long value;
-  long layer;
-};
-
-extern Colormap fl_overlay_colormap;
-extern XVisualInfo* fl_overlay_visual;
-extern ulong fl_transparent_pixel;
-
-XVisualInfo *fl_find_overlay_visual() {
-  static char beenhere;
-  if (beenhere) return fl_overlay_visual;
-  beenhere = 1;
-
-  fl_open_display();
-  Atom overlayVisualsAtom =
-    XInternAtom(fl_display,"SERVER_OVERLAY_VISUALS",1);
-  if (!overlayVisualsAtom) return 0;
-  OverlayInfo *overlayInfo;
-  ulong sizeData, bytesLeft;
-  Atom actualType;
-  int actualFormat;
-  if (XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen),
-			 overlayVisualsAtom, 0L, 10000L, False,
-			 overlayVisualsAtom, &actualType, &actualFormat,
-			 &sizeData, &bytesLeft,
-			 (unsigned char **) &overlayInfo)) return 0;
-
-  if (actualType == overlayVisualsAtom && actualFormat == 32) {
-    int n = int(sizeData/4);
-    XVisualInfo* v = 0;
-    // find the greatest depth that has a transparent pixel:
-    for (int i = 0; i < n; i++) {
-      if (overlayInfo[i].transparent_type != 1) continue;
-      if (overlayInfo[i].layer <= 0) continue;
-      XVisualInfo templt;
-      templt.visualid = overlayInfo[i].overlay_visual;
-      int num;
-      XVisualInfo *v1=XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
-      if (v1->screen == fl_screen && v1->c_class == PseudoColor
-	  && (!v || v1->depth > v->depth && v1->depth <= 8)) {
-	if (v) XFree((char*)v);
-	v = v1;
-	fl_transparent_pixel = overlayInfo[i].value;
-      } else {
-	XFree((char*)v1);
-      }
-    }
-    if (v) {
-      fl_overlay_visual = v;
-      fl_overlay_colormap = 
-	XCreateColormap(fl_display, RootWindow(fl_display, fl_screen),
-			v->visual, AllocNone);
-    }
-  }
-  XFree((char*)overlayInfo);
-  //printf("overlay visual %ld selected\n", fl_overlay_visual->visualid);
-  return fl_overlay_visual;
-}
-
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_plastic.cxx
+++ /dev/null
@@ -1,372 +1,0 @@
-//
-// "$Id$"
-//
-// "Plastic" drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// These box types provide a cross between Aqua and KDE buttons; kindof
-// like translucent plastic buttons...
-//
-// Copyright 2001-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-//
-// Uncomment the following line to restore the old plastic box type
-// appearance.
-//
-
-//#define USE_OLD_PLASTIC_BOX
-#define USE_OLD_PLASTIC_COLOR
-
-extern const uchar *fl_gray_ramp();
-
-inline Fl_Color shade_color(uchar gc, Fl_Color bc) {
-#ifdef USE_OLD_PLASTIC_COLOR
-  return fl_color_average((Fl_Color)gc, bc, 0.75f);
-#else
-  unsigned	grgb = Fl::get_color((Fl_Color)gc),
-		brgb = Fl::get_color(bc);
-  int		red, green, blue, gray;
-
-
-  gray  = ((grgb >> 24) & 255);
-  red   = gray * ((brgb >> 24) & 255) / 255 + gray * gray / 510;
-  gray  = ((grgb >> 16) & 255);
-  green = gray * ((brgb >> 16) & 255) / 255 + gray * gray / 510;
-  gray  = ((grgb >> 8) & 255);
-  blue  = gray * ((brgb >> 8) & 255) / 255 + gray * gray / 510;
-
-  if (red > 255)
-    red = 255;
-
-  if (green > 255)
-    green = 255;
-
-  if (blue > 255)
-    blue = 255;
-
-  if (Fl::draw_box_active())
-    return fl_rgb_color(red, green, blue);
-  else
-    return fl_color_average(FL_GRAY, fl_rgb_color(red, green, blue), 0.75f);
-#endif // USE_OLD_PLASTIC_COLOR
-}
-
-
-static void frame_rect(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  const uchar *g = fl_gray_ramp();
-  int b = ((int) strlen(c)) / 4 + 1;
-
-  for (x += b, y += b, w -= 2 * b, h -= 2 * b; b > 1; b --)
-  {
-    // Draw lines around the perimeter of the button, 4 colors per
-    // circuit.
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x, y + h + b, x + w - 1, y + h + b, x + w + b - 1, y + h);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x + w + b - 1, y + h, x + w + b - 1, y, x + w - 1, y - b);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x + w - 1, y - b, x, y - b, x - b, y);
-    fl_color(shade_color(g[(int)*c++], bc));
-    fl_line(x - b, y, x - b, y + h, x, y + h + b);
-  }
-}
-
-
-static void frame_round(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  const uchar *g = fl_gray_ramp();
-  size_t b = strlen(c) / 4 + 1;
-
-  if (w==h) {
-    for (; b > 1; b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 45.0, 135.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 315.0, 405.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 225.0, 315.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, h, 135.0, 225.0);
-    }
-  } else if (w>h) {
-    int d = h/2;
-    for (; b > 1; d--, b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, h, h, 90.0, 135.0);
-      fl_xyline(x+d, y, x+w-d);
-      fl_arc(x+w-h, y, h, h, 45.0, 90.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x+w-h, y, h, h, 315.0, 405.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x+w-h, y, h, h, 270.0, 315.0);
-      fl_xyline(x+d, y+h-1, x+w-d);
-      fl_arc(x, y, h, h, 225.0, 270.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, h, h, 135.0, 225.0);
-    }
-  } else if (w<h) {
-    int d = w/2;
-    for (; b > 1; d--, b --, x ++, y ++, w -= 2, h -= 2)
-    {
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, w, 45.0, 135.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y, w, w, 0.0, 45.0);
-      fl_yxline(x+w-1, y+d, y+h-d);
-      fl_arc(x, y+h-w, w, w, 315.0, 360.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y+h-w, w, w, 225.0, 315.0);
-      fl_color(shade_color(g[(int)*c++], bc));
-      fl_arc(x, y+h-w, w, w, 180.0, 225.0);
-      fl_yxline(x, y+d, y+h-d);
-      fl_arc(x, y, w, w, 135.0, 180.0);
-    }
-  }
-}
-
-
-static void shade_rect(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  const uchar *g = fl_gray_ramp();
-  int	i, j;
-  int	clen = (int) strlen(c) - 1;
-  int	chalf = clen / 2;
-  int	cstep = 1;
-
-  if (h < (w * 2)) {
-    // Horizontal shading...
-    if (clen >= h) cstep = 2;
-
-    for (i = 0, j = 0; j < chalf; i ++, j += cstep) {
-      // Draw the top line and points...
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_xyline(x + 1, y + i, x + w - 2);
-
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_point(x, y + i + 1);
-      fl_point(x + w - 1, y + i + 1);
-
-      // Draw the bottom line and points...
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_xyline(x + 1, y + h - i, x + w - 2);
-
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_point(x, y + h - i);
-      fl_point(x + w - 1, y + h - i);
-    }
-
-    // Draw the interior and sides...
-    i = chalf / cstep;
-
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x + 1, y + i, w - 2, h - 2 * i + 1);
-
-    fl_color(shade_color(g[c[chalf] - 2], bc));
-    fl_yxline(x, y + i, y + h - i);
-    fl_yxline(x + w - 1, y + i, y + h - i);
-  } else {
-    // Vertical shading...
-    if (clen >= w) cstep = 2;
-
-    for (i = 0, j = 0; j < chalf; i ++, j += cstep) {
-      // Draw the left line and points...
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_yxline(x + i, y + 1, y + h - 1);
-
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_point(x + i + 1, y);
-      fl_point(x + i + 1, y + h);
-
-      // Draw the right line and points...
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_yxline(x + w - 1 - i, y + 1, y + h - 1);
-
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_point(x + w - 2 - i, y);
-      fl_point(x + w - 2 - i, y + h);
-    }
-
-    // Draw the interior, top, and bottom...
-    i = chalf / cstep;
-
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x + i, y + 1, w - 2 * i, h - 1);
-
-    fl_color(shade_color(g[c[chalf] - 2], bc));
-    fl_xyline(x + i, y, x + w - i);
-    fl_xyline(x + i, y + h, x + w - i);
-  }
-}
-
-static void shade_round(int x, int y, int w, int h, const char *c, Fl_Color bc) {
-  const uchar *g = fl_gray_ramp();
-  int	i;
-  int 	clen = (int) (strlen(c) - 1);
-  int 	chalf = clen / 2;
-
-  if (w>h) {
-    int d = h/2;
-    const int na = 8;
-    for (i=0; i<chalf; i++, d--, x++, y++, w-=2, h-=2)
-    {
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_pie(x, y, h, h, 90.0, 135.0+i*na);
-      fl_xyline(x+d, y, x+w-d);
-      fl_pie(x+w-h, y, h, h, 45.0+i*na, 90.0);
-      fl_color(shade_color(g[(int)c[i] - 2], bc));
-      fl_pie(x+w-h, y, h, h, 315.0+i*na, 405.0+i*na);
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_pie(x+w-h, y, h, h, 270.0, 315.0+i*na);
-      fl_xyline(x+d, y+h-1, x+w-d);
-      fl_pie(x, y, h, h, 225.0+i*na, 270.0);
-      fl_color(shade_color(g[c[(int)clen - i] - 2], bc));
-      fl_pie(x, y, h, h, 135.0+i*na, 225.0+i*na);
-    }
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x+d, y, w-h+1, h+1);
-    fl_pie(x, y, h, h, 90.0, 270.0);
-    fl_pie(x+w-h, y, h, h, 270.0, 90.0);
-  } else {
-    int d = w/2;
-    const int na = 8;
-    for (i=0; i<chalf; i++, d--, x++, y++, w-=2, h-=2)
-    {
-      fl_color(shade_color(g[(int)c[i]], bc));
-      fl_pie(x, y, w, w, 45.0+i*na, 135.0+i*na);
-      fl_color(shade_color(g[c[i] - 2], bc));
-      fl_pie(x, y, w, w, 0.0, 45.0+i*na);
-      fl_yxline(x+w-1, y+d, y+h-d);
-      fl_pie(x, y+h-w, w, w, 315.0+i*na, 360.0);
-      fl_color(shade_color(g[(int)c[clen - i]], bc));
-      fl_pie(x, y+h-w, w, w, 225.0+i*na, 315.0+i*na);
-      fl_color(shade_color(g[c[clen - i] - 2], bc));
-      fl_pie(x, y+h-w, w, w, 180.0, 225.0+i*na);
-      fl_yxline(x, y+d, y+h-d);
-      fl_pie(x, y, w, w, 135.0+i*na, 180.0);
-    }
-    fl_color(shade_color(g[(int)c[chalf]], bc));
-    fl_rectf(x, y+d, w+1, h-w+1);
-    fl_pie(x, y, w, w, 0.0, 180.0);
-    fl_pie(x, y+h-w, w, w, 180.0, 360.0);
-  }
-}
-
-
-static void up_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect(x, y, w, h - 1, "KLDIIJLM", c);
-}
-
-
-static void narrow_thin_box(int x, int y, int w, int h, Fl_Color c) {
-  if (h<=0 || w<=0) return;
-  const uchar *g = fl_gray_ramp();
-  fl_color(shade_color(g[(int)'R'], c));
-  fl_rectf(x+1, y+1, w-2, h-2);
-  fl_color(shade_color(g[(int)'I'], c));
-  if (w > 1) {
-    fl_xyline(x+1, y, x+w-2);
-    fl_xyline(x+1, y+h-1, x+w-2);
-  }
-  if (h > 1) {
-    fl_yxline(x, y+1, y+h-2);
-    fl_yxline(x+w-1, y+1, y+h-2);
-  }
-}
-
-
-static void thin_up_box(int x, int y, int w, int h, Fl_Color c) {
-#ifdef USE_OLD_PLASTIC_BOX
-  shade_rect(x + 2, y + 2, w - 4, h - 5, "RVQNOPQRSTUVWVQ", c);
-  up_frame(x, y, w, h, c);
-#else
-  if (w > 4 && h > 4) {
-    shade_rect(x + 1, y + 1, w - 2, h - 3, "RQOQSUWQ", c);
-    frame_rect(x, y, w, h - 1, "IJLM", c);
-  } else {
-    narrow_thin_box(x, y, w, h, c);
-  }
-#endif // USE_OLD_PLASTIC_BOX
-}
-
-
-static void up_box(int x, int y, int w, int h, Fl_Color c) {
-#ifdef USE_OLD_PLASTIC_BOX
-  shade_rect(x + 2, y + 2, w - 4, h - 5, "RVQNOPQRSTUVWVQ", c);
-  up_frame(x, y, w, h, c);
-#else
-  if (w > 8 && h > 8) {
-    shade_rect(x + 1, y + 1, w - 2, h - 3, "RVQNOPQRSTUVWVQ", c);
-    frame_rect(x, y, w, h - 1, "IJLM", c);
-  } else {
-    thin_up_box(x, y, w, h, c);
-  }
-#endif // USE_OLD_PLASTIC_BOX
-}
-
-
-static void up_round(int x, int y, int w, int h, Fl_Color c) {
-  shade_round(x, y, w, h, "RVQNOPQRSTUVWVQ", c);
-  frame_round(x, y, w, h, "IJLM", c);
-}
-
-
-static void down_frame(int x, int y, int w, int h, Fl_Color c) {
-  frame_rect(x, y, w, h - 1, "LLLLTTRR", c);
-}
-
-
-static void down_box(int x, int y, int w, int h, Fl_Color c) {
-  if (w > 6 && h > 6) {
-    shade_rect(x + 2, y + 2, w - 4, h - 5, "STUVWWWVT", c);
-    down_frame(x, y, w, h, c);
-  }
-  else {
-    narrow_thin_box(x, y, w, h, c);
-  }
-}
-
-
-static void down_round(int x, int y, int w, int h, Fl_Color c) {
-  shade_round(x, y, w, h, "STUVWWWVT", c);
-  frame_round(x, y, w, h, "IJLM", c);
-}
-
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-
-Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX() {
-  fl_internal_boxtype(_FL_PLASTIC_UP_BOX, up_box);
-  fl_internal_boxtype(_FL_PLASTIC_DOWN_BOX, down_box);
-  fl_internal_boxtype(_FL_PLASTIC_UP_FRAME, up_frame);
-  fl_internal_boxtype(_FL_PLASTIC_DOWN_FRAME, down_frame);
-  fl_internal_boxtype(_FL_PLASTIC_THIN_UP_BOX, thin_up_box);
-  fl_internal_boxtype(_FL_PLASTIC_THIN_DOWN_BOX, down_box);
-  fl_internal_boxtype(_FL_PLASTIC_ROUND_UP_BOX, up_round);
-  fl_internal_boxtype(_FL_PLASTIC_ROUND_DOWN_BOX, down_round);
-
-  return _FL_PLASTIC_UP_BOX;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_read_image.cxx
+++ /dev/null
@@ -1,635 +1,0 @@
-//
-// "$Id$"
-//
-// X11 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-
-#ifdef DEBUG
-#  include <stdio.h>
-#endif // DEBUG
-
-#if defined(__APPLE__)
-#  include "fl_read_image_mac.cxx"
-#else
-#  include <FL/Fl_RGB_Image.H>
-#  include <FL/Fl_Window.H>
-#  include <FL/Fl_Plugin.H>
-#  include <FL/Fl_Device.H>
-
-static uchar *read_win_rectangle(uchar *p, int X, int Y, int w, int h, int alpha);
-
-
-static void write_image_inside(Fl_RGB_Image *to, Fl_RGB_Image *from, int to_x, int to_y)
-/* Copy the image "from" inside image "to" with its top-left angle at coordinates to_x, to_y.
- Also, exchange top and bottom of "from". Image depth can differ between "to" and "from".
- */
-{
-  int to_ld = (to->ld() == 0? to->w() * to->d() : to->ld());
-  int from_ld = (from->ld() == 0? from->w() * from->d() : from->ld());
-  uchar *tobytes = (uchar*)to->array + to_y * to_ld + to_x * to->d();
-  const uchar *frombytes = from->array + (from->h() - 1) * from_ld;
-  for (int i = from->h() - 1; i >= 0; i--) {
-    if (from->d() == to->d()) memcpy(tobytes, frombytes, from->w() * from->d());
-    else {
-      for (int j = 0; j < from->w(); j++) {
-        memcpy(tobytes + j * to->d(), frombytes + j * from->d(), from->d());
-      }
-    }
-    tobytes += to_ld;
-    frombytes -= from_ld;
-  }
-}
-
-/* Captures rectangle x,y,w,h from a mapped window or GL window.
- All sub-GL-windows that intersect x,y,w,h, and their subwindows, are also captured.
- 
- Arguments when this function is initially called:
- g: a window or GL window
- p: as in fl_read_image()
- x,y,w,h: a rectangle in window g's coordinates
- alpha: as in fl_read_image()
- full_img: NULL
- 
- Arguments when this function recursively calls itself:
- g: an Fl_Group
- p: as above
- x,y,w,h: a rectangle in g's coordinates if g is a window, or in g's parent window coords if g is a group
- alpha: as above
- full_img: NULL, or a previously captured image that encompasses the x,y,w,h rectangle and that
- will be partially overwritten with the new capture
- 
- Return value:
- An Fl_RGB_Image* of depth 4 if alpha>0 or 3 if alpha = 0 containing the captured pixels.
- */
-static Fl_RGB_Image *traverse_to_gl_subwindows(Fl_Group *g, uchar *p, int x, int y, int w, int h, int alpha,
-                                               Fl_RGB_Image *full_img)
-{
-  if ( g->as_gl_window() ) {
-    Fl_Plugin_Manager pm("fltk:device");
-    Fl_Device_Plugin *pi = (Fl_Device_Plugin*)pm.plugin("opengl.device.fltk.org");
-    if (!pi) return full_img;
-    Fl_RGB_Image *img = pi->rectangle_capture(g, x, y, w, h); // bottom to top image
-    if (full_img) full_img = img; // top and bottom will be exchanged later
-    else { // exchange top and bottom to get a proper FLTK image
-      uchar *data = ( p ? p : new uchar[img->w() * img->h() * (alpha?4:3)] );
-      full_img = new Fl_RGB_Image(data, img->w(), img->h(), alpha?4:3);
-      if (!p) full_img->alloc_array = 1;
-      if (alpha) memset(data, alpha, img->w() * img->h() * 4);
-      write_image_inside(full_img, img, 0, 0);
-      delete img;
-    }
-  }
-  else if ( g->as_window() && (!full_img || (g->window() && g->window()->as_gl_window())) ) {
-    // the starting window or one inside a GL window
-    if (full_img) g->as_window()->make_current();
-    uchar *image_data;
-    int alloc_img = (full_img != NULL || p == NULL); // false means use p, don't alloc new memory for image
-#ifdef __APPLE_CC__
-    // on Darwin + X11, read_win_rectangle() sometimes returns NULL when there are subwindows
-    do image_data = read_win_rectangle( (alloc_img ? NULL : p), x, y, w, h, alpha); while (!image_data);
-#else
-    image_data = read_win_rectangle( (alloc_img ? NULL : p), x, y, w, h, alpha);
-#endif
-    full_img = new Fl_RGB_Image(image_data, w, h, alpha?4:3);
-    if (alloc_img) full_img->alloc_array = 1;
-  }
-  int n = g->children();
-  for (int i = 0; i < n; i++) {
-    Fl_Widget *c = g->child(i);
-    if ( !c->visible() || !c->as_group()) continue;
-    if ( c->as_window() ) {
-      int origin_x = x; // compute intersection of x,y,w,h and the c window
-      if (x < c->x()) origin_x = c->x();
-      int origin_y = y;
-      if (y < c->y()) origin_y = c->y();
-      int width = c->w();
-      if (origin_x + width > c->x() + c->w()) width = c->x() + c->w() - origin_x;
-      if (origin_x + width > x + w) width = x + w - origin_x;
-      int height = c->w();
-      if (origin_y + height > c->y() + c->h()) height = c->y() + c->h() - origin_y;
-      if (origin_y + height > y + h) height = y + h - origin_y;
-      if (width > 0 && height > 0) {
-        Fl_RGB_Image *img = traverse_to_gl_subwindows(c->as_window(), p, origin_x - c->x(),
-                                                      origin_y - c->y(), width, height, alpha, full_img);
-        if (img == full_img) continue;
-        int top;
-        if (c->as_gl_window()) {
-          top = origin_y - y;
-        } else {
-          top = full_img->h() - (origin_y - y + img->h());
-        }
-        write_image_inside(full_img, img, origin_x - x, top);
-        delete img;
-      }
-    }
-    else traverse_to_gl_subwindows(c->as_group(), p, x, y, w, h, alpha, full_img);
-  }
-  return full_img;
-}
-
-//
-// 'fl_read_image()' - Read an image from the current window or off-screen buffer
-// this is the version for X11 and WIN32. The mac version is in fl_read_image_mac.cxx
-
-uchar *				// O - Pixel buffer or NULL if failed
-fl_read_image(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   X,		// I - Left position
-              int   Y,		// I - Top position
-              int   w,		// I - Width of area to read
-              // negative allows capture of window title bar and frame (X11 only)
-              int   h,		// I - Height of area to read
-              int   alpha)// I - Alpha value for image (0 for none)
-{
-  if (w < 0 || fl_find(fl_window) == 0) { // read from off_screen buffer or title bar and frame
-    return read_win_rectangle(p, X, Y, w, h, alpha); // this function has an X11 and a WIN32 version
-  }
-  Fl_RGB_Image *img = traverse_to_gl_subwindows(Fl_Window::current(), p, X, Y, w, h, alpha, NULL);
-  uchar *image_data = (uchar*)img->array;
-  img->alloc_array = 0;
-  delete img;
-  return image_data;
-}
-
-#ifdef WIN32
-#  include "fl_read_image_win32.cxx" // gives the WIN32 version of read_win_rectangle()
-#else
-#  include <X11/Xutil.h>
-#  ifdef __sgi
-#    include <X11/extensions/readdisplay.h>
-#  else
-#    include <stdlib.h>
-#  endif // __sgi
-
-// Defined in fl_color.cxx
-extern uchar fl_redmask, fl_greenmask, fl_bluemask;
-extern int fl_redshift, fl_greenshift, fl_blueshift, fl_extrashift;
-
-//
-// 'fl_subimage_offsets()' - Calculate subimage offsets for an axis
-static inline int
-fl_subimage_offsets(int a, int aw, int b, int bw, int &obw)
-{
-  int off;
-  int ob;
-
-  if (b >= a) {
-    ob = b;
-    off = 0;
-  } else {
-    ob = a;
-    off = a - b;
-  }
-
-  bw -= off;
-
-  if (ob + bw <= a + aw) {
-    obw = bw;
-  } else {
-    obw = (a + aw) - ob;
-  }
-
-  return off;
-}
-
-// this handler will catch and ignore exceptions during XGetImage
-// to avoid an application crash
-extern "C" {
-  static int xgetimageerrhandler(Display *display, XErrorEvent *error) {
-    return 0;
-  }
-}
-
-
-static uchar *read_win_rectangle(uchar *p, int X, int Y, int w, int h, int alpha)
-{
-  XImage	*image;		// Captured image
-  int		i, maxindex;	// Looping vars
-  int           x, y;		// Current X & Y in image
-  int		d;		// Depth of image
-  unsigned char *line,		// Array to hold image row
-		*line_ptr;	// Pointer to current line image
-  unsigned char	*pixel;		// Current color value
-  XColor	colors[4096];	// Colors from the colormap...
-  unsigned char	cvals[4096][3];	// Color values from the colormap...
-  unsigned	index_mask,
-		index_shift,
-		red_mask,
-		red_shift,
-		green_mask,
-		green_shift,
-		blue_mask,
-		blue_shift;
-
-
-  //
-  // Under X11 we have the option of the XGetImage() interface or SGI's
-  // ReadDisplay extension which does all of the really hard work for
-  // us...
-  //
-  int allow_outside = w < 0;    // negative w allows negative X or Y, that is, window frame
-  if (w < 0) w = - w;
-
-#  ifdef __sgi
-  if (XReadDisplayQueryExtension(fl_display, &i, &i)) {
-    image = XReadDisplay(fl_display, fl_window, X, Y, w, h, 0, NULL);
-  } else
-#  else
-  image = 0;
-#  endif // __sgi
-
-  if (!image) {
-    // fetch absolute coordinates
-    int dx, dy, sx, sy, sw, sh;
-    Window child_win;
-    
-    Fl_Window *win;
-    if (allow_outside) win = (Fl_Window*)1;
-    else win = fl_find(fl_window);
-    if (win) {
-      XTranslateCoordinates(fl_display, fl_window,
-          RootWindow(fl_display, fl_screen), X, Y, &dx, &dy, &child_win);
-      // screen dimensions
-      Fl::screen_xywh(sx, sy, sw, sh, fl_screen);
-    }
-    if (!win || (dx >= sx && dy >= sy && dx + w <= sx+sw && dy + h <= sy+sh)) {
-      // the image is fully contained, we can use the traditional method
-      // however, if the window is obscured etc. the function will still fail. Make sure we
-      // catch the error and continue, otherwise an exception will be thrown.
-      XErrorHandler old_handler = XSetErrorHandler(xgetimageerrhandler);
-      image = XGetImage(fl_display, fl_window, X, Y, w, h, AllPlanes, ZPixmap);
-      XSetErrorHandler(old_handler);
-    } else {
-      // image is crossing borders, determine visible region
-      int nw, nh, noffx, noffy;
-      noffx = fl_subimage_offsets(sx, sw, dx, w, nw);
-      noffy = fl_subimage_offsets(sy, sh, dy, h, nh);
-      if (nw <= 0 || nh <= 0) return 0;
-
-      // allocate the image
-      int bpp = fl_visual->depth + ((fl_visual->depth / 8) % 2) * 8;
-      char* buf = (char*)malloc(bpp / 8 * w * h);
-      image = XCreateImage(fl_display, fl_visual->visual,
-	  fl_visual->depth, ZPixmap, 0, buf, w, h, bpp, 0);
-      if (!image) {
-	if (buf) free(buf);
-	return 0;
-      }
-
-      XErrorHandler old_handler = XSetErrorHandler(xgetimageerrhandler);
-      XImage *subimg = XGetSubImage(fl_display, fl_window, X + noffx, Y + noffy,
-                                    nw, nh, AllPlanes, ZPixmap, image, noffx, noffy);
-      XSetErrorHandler(old_handler);
-      if (!subimg) {
-        XDestroyImage(image);
-        return 0;
-      }
-    }
-  }
-
-  if (!image) return 0;
-
-#ifdef DEBUG
-  printf("width            = %d\n", image->width);
-  printf("height           = %d\n", image->height);
-  printf("xoffset          = %d\n", image->xoffset);
-  printf("format           = %d\n", image->format);
-  printf("data             = %p\n", image->data);
-  printf("byte_order       = %d\n", image->byte_order);
-  printf("bitmap_unit      = %d\n", image->bitmap_unit);
-  printf("bitmap_bit_order = %d\n", image->bitmap_bit_order);
-  printf("bitmap_pad       = %d\n", image->bitmap_pad);
-  printf("depth            = %d\n", image->depth);
-  printf("bytes_per_line   = %d\n", image->bytes_per_line);
-  printf("bits_per_pixel   = %d\n", image->bits_per_pixel);
-  printf("red_mask         = %08x\n", image->red_mask);
-  printf("green_mask       = %08x\n", image->green_mask);
-  printf("blue_mask        = %08x\n", image->blue_mask);
-  printf("map_entries      = %d\n", fl_visual->visual->map_entries);
-#endif // DEBUG
-
-  d = alpha ? 4 : 3;
-
-  // Allocate the image data array as needed...
-  if (!p) p = new uchar[w * h * d];
-
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-
-  // Check that we have valid mask/shift values...
-  if (!image->red_mask && image->bits_per_pixel > 12) {
-    // Greater than 12 bits must be TrueColor...
-    image->red_mask   = fl_visual->visual->red_mask;
-    image->green_mask = fl_visual->visual->green_mask;
-    image->blue_mask  = fl_visual->visual->blue_mask;
-
-#ifdef DEBUG
-    puts("\n---- UPDATED ----");
-    printf("fl_redmask       = %08x\n", fl_redmask);
-    printf("fl_redshift      = %d\n", fl_redshift);
-    printf("fl_greenmask     = %08x\n", fl_greenmask);
-    printf("fl_greenshift    = %d\n", fl_greenshift);
-    printf("fl_bluemask      = %08x\n", fl_bluemask);
-    printf("fl_blueshift     = %d\n", fl_blueshift);
-    printf("red_mask         = %08x\n", image->red_mask);
-    printf("green_mask       = %08x\n", image->green_mask);
-    printf("blue_mask        = %08x\n", image->blue_mask);
-#endif // DEBUG
-  }
-
-  // Check if we have colormap image...
-  if (!image->red_mask) {
-    // Get the colormap entries for this window...
-    maxindex = fl_visual->visual->map_entries;
-
-    for (i = 0; i < maxindex; i ++) colors[i].pixel = i;
-
-    XQueryColors(fl_display, fl_colormap, colors, maxindex);
-
-    for (i = 0; i < maxindex; i ++) {
-      cvals[i][0] = colors[i].red >> 8;
-      cvals[i][1] = colors[i].green >> 8;
-      cvals[i][2] = colors[i].blue >> 8;
-    }
-
-    // Read the pixels and output an RGB image...
-    for (y = 0; y < image->height; y ++) {
-      pixel = (unsigned char *)(image->data + y * image->bytes_per_line);
-      line  = p + y * w * d;
-
-      switch (image->bits_per_pixel) {
-        case 1 :
-	  for (x = image->width, line_ptr = line, index_mask = 128;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (*pixel & index_mask) {
-	      line_ptr[0] = cvals[1][0];
-	      line_ptr[1] = cvals[1][1];
-	      line_ptr[2] = cvals[1][2];
-            } else {
-	      line_ptr[0] = cvals[0][0];
-	      line_ptr[1] = cvals[0][1];
-	      line_ptr[2] = cvals[0][2];
-            }
-
-            if (index_mask > 1) {
-	      index_mask >>= 1;
-	    } else {
-              index_mask = 128;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 2 :
-	  for (x = image->width, line_ptr = line, index_shift = 6;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    i = (*pixel >> index_shift) & 3;
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift > 0) {
-              index_mask >>= 2;
-              index_shift -= 2;
-            } else {
-              index_mask  = 192;
-              index_shift = 6;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 4 :
-	  for (x = image->width, line_ptr = line, index_shift = 4;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 4) i = (*pixel >> 4) & 15;
-	    else i = *pixel & 15;
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift > 0) {
-              index_shift = 0;
-	    } else {
-              index_shift = 4;
-              pixel ++;
-            }
-	  }
-          break;
-
-        case 8 :
-	  for (x = image->width, line_ptr = line;
-	       x > 0;
-	       x --, line_ptr += d, pixel ++) {
-	    line_ptr[0] = cvals[*pixel][0];
-	    line_ptr[1] = cvals[*pixel][1];
-	    line_ptr[2] = cvals[*pixel][2];
-	  }
-          break;
-
-        case 12 :
-	  for (x = image->width, line_ptr = line, index_shift = 0;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 0) {
-	      i = ((pixel[0] << 4) | (pixel[1] >> 4)) & 4095;
-	    } else {
-	      i = ((pixel[1] << 8) | pixel[2]) & 4095;
-	    }
-
-	    line_ptr[0] = cvals[i][0];
-	    line_ptr[1] = cvals[i][1];
-	    line_ptr[2] = cvals[i][2];
-
-            if (index_shift == 0) {
-              index_shift = 4;
-            } else {
-              index_shift = 0;
-              pixel += 3;
-            }
-	  }
-          break;
-      }
-    }
-  } else {
-    // RGB(A) image, so figure out the shifts & masks...
-    red_mask  = image->red_mask;
-    red_shift = 0;
-
-    while ((red_mask & 1) == 0) {
-      red_mask >>= 1;
-      red_shift ++;
-    }
-
-    green_mask  = image->green_mask;
-    green_shift = 0;
-
-    while ((green_mask & 1) == 0) {
-      green_mask >>= 1;
-      green_shift ++;
-    }
-
-    blue_mask  = image->blue_mask;
-    blue_shift = 0;
-
-    while ((blue_mask & 1) == 0) {
-      blue_mask >>= 1;
-      blue_shift ++;
-    }
-
-    // Read the pixels and output an RGB image...
-    for (y = 0; y < image->height; y ++) {
-      pixel = (unsigned char *)(image->data + y * image->bytes_per_line);
-      line  = p + y * w * d;
-
-      switch (image->bits_per_pixel) {
-        case 8 :
-	  for (x = image->width, line_ptr = line;
-	       x > 0;
-	       x --, line_ptr += d, pixel ++) {
-	    i = *pixel;
-
-	    line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	    line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	    line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	  }
-          break;
-
-        case 12 :
-	  for (x = image->width, line_ptr = line, index_shift = 0;
-	       x > 0;
-	       x --, line_ptr += d) {
-	    if (index_shift == 0) {
-	      i = ((pixel[0] << 4) | (pixel[1] >> 4)) & 4095;
-	    } else {
-	      i = ((pixel[1] << 8) | pixel[2]) & 4095;
-            }
-
-	    line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	    line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	    line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-
-            if (index_shift == 0) {
-              index_shift = 4;
-            } else {
-              index_shift = 0;
-              pixel += 3;
-            }
-	  }
-          break;
-
-        case 16 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 2) {
-	      i = (pixel[1] << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 2) {
-	      i = (pixel[0] << 8) | pixel[1];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-
-        case 24 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 3) {
-	      i = (((pixel[2] << 8) | pixel[1]) << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 3) {
-	      i = (((pixel[0] << 8) | pixel[1]) << 8) | pixel[2];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-
-        case 32 :
-          if (image->byte_order == LSBFirst) {
-            // Little-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 4) {
-	      i = (((((pixel[3] << 8) | pixel[2]) << 8) | pixel[1]) << 8) | pixel[0];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  } else {
-            // Big-endian...
-	    for (x = image->width, line_ptr = line;
-	         x > 0;
-	         x --, line_ptr += d, pixel += 4) {
-	      i = (((((pixel[0] << 8) | pixel[1]) << 8) | pixel[2]) << 8) | pixel[3];
-
-	      line_ptr[0] = 255 * ((i >> red_shift) & red_mask) / red_mask;
-	      line_ptr[1] = 255 * ((i >> green_shift) & green_mask) / green_mask;
-	      line_ptr[2] = 255 * ((i >> blue_shift) & blue_mask) / blue_mask;
-	    }
-	  }
-          break;
-      }
-    }
-  }
-
-  // Destroy the X image we've read and return the RGB(A) image...
-  XDestroyImage(image);
-
-  return p;
-}
-
-#endif // !WIN32
-
-#endif // !__APPLE__
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_read_image_mac.cxx
+++ /dev/null
@@ -1,72 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-//
-// 'fl_read_image()' - Read an image from the current window or off-screen buffer.
-//
-
-uchar *				// O - Pixel buffer or NULL if failed
-fl_read_image(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   x,		// I - Left position
-	      int   y,		// I - Top position
-	      int   w,		// I - Width of area to read
-	      int   h,		// I - Height of area to read
-	      int   alpha) {	// I - Alpha value for image (0 for none)
-  uchar *base;
-  int rowBytes, delta;
-  if(fl_window == NULL) { // reading from an offscreen buffer
-    CGContextRef src = (CGContextRef)fl_gc;   // get bitmap context
-    base = (uchar *)CGBitmapContextGetData(src);  // get data
-    if(!base) return NULL;
-    int sw = CGBitmapContextGetWidth(src);
-    int sh = CGBitmapContextGetHeight(src);
-    rowBytes = CGBitmapContextGetBytesPerRow(src);
-    delta = CGBitmapContextGetBitsPerPixel(src)/8;
-    if( (sw - x < w) || (sh - y < h) )  return NULL;
-    }
-  else { // reading from current window
-    base = Fl_X::bitmap_from_window_rect(Fl_Window::current(),x,y,w,h,&delta);
-    if (!base) return NULL;
-    rowBytes = delta*w;
-    x = y = 0;
-    }
-  // Allocate the image data array as needed...
-  int d = alpha ? 4 : 3;
-  if (!p) p = new uchar[w * h * d];
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-  // Copy the image from the off-screen buffer to the memory buffer.
-  int           idx, idy;	// Current X & Y in image
-  uchar *pdst, *psrc;
-  for (idy = y, pdst = p; idy < h + y; idy ++) {
-    for (idx = 0, psrc = base + idy * rowBytes + x * delta; idx < w; idx ++, psrc += delta, pdst += d) {
-      pdst[0] = psrc[0];  // R
-      pdst[1] = psrc[1];  // G
-      pdst[2] = psrc[2];  // B
-    }
-  }
-  if(fl_window != NULL) delete[] base;
-  return p;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_read_image_win32.cxx
+++ /dev/null
@@ -1,120 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 image reading routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2014 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-static uchar *				// O - Pixel buffer or NULL if failed
-read_win_rectangle(uchar *p,		// I - Pixel buffer or NULL to allocate
-              int   X,		// I - Left position
-	      int   Y,		// I - Top position
-	      int   w,		// I - Width of area to read
-	      int   h,		// I - Height of area to read
-	      int   alpha) {	// I - Alpha value for image (0 for none)
-
-  int	d;			// Depth of image
-
-  // Allocate the image data array as needed...
-  d = alpha ? 4 : 3;
-
-  if (!p) p = new uchar[w * h * d];
-
-  // Initialize the default colors/alpha in the whole image...
-  memset(p, alpha, w * h * d);
-
-  // Grab all of the pixels in the image...
-
-  // Assure that we are not trying to read non-existing data. If it is so, the
-  // function should still work, but the out-of-bounds part of the image is
-  // untouched (initialized with the alpha value or 0 (black), resp.).
-
-  int ww = w; // We need the original width for output data line size
-
-  int shift_x = 0; // X target shift if X modified
-  int shift_y = 0; // Y target shift if X modified
-
-  if (X < 0) {
-    shift_x = -X;
-    w += X;
-    X = 0;
-  }
-  if (Y < 0) {
-    shift_y = -Y;
-    h += Y;
-    Y = 0;
-  }
-
-  if (h < 1 || w < 1) return p;		// nothing to copy
-
-  int line_size = ((3*w+3)/4) * 4;	// each line is aligned on a DWORD (4 bytes)
-  uchar *dib = new uchar[line_size*h];	// create temporary buffer to read DIB
-
-  // fill in bitmap info for GetDIBits
-
-  BITMAPINFO   bi;
-  bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
-  bi.bmiHeader.biWidth = w;
-  bi.bmiHeader.biHeight = -h;		// negative => top-down DIB
-  bi.bmiHeader.biPlanes = 1;
-  bi.bmiHeader.biBitCount = 24;		// 24 bits RGB
-  bi.bmiHeader.biCompression = BI_RGB;
-  bi.bmiHeader.biSizeImage = 0;
-  bi.bmiHeader.biXPelsPerMeter = 0;
-  bi.bmiHeader.biYPelsPerMeter = 0;
-  bi.bmiHeader.biClrUsed = 0;
-  bi.bmiHeader.biClrImportant = 0;
-
-  // copy bitmap from original DC (Window, Fl_Offscreen, ...)
-
-  HDC hdc = CreateCompatibleDC(fl_gc);
-  HBITMAP hbm = CreateCompatibleBitmap(fl_gc,w,h);
-
-  int save_dc = SaveDC(hdc);			// save context for cleanup
-  SelectObject(hdc,hbm);			// select bitmap
-  BitBlt(hdc,0,0,w,h,fl_gc,X,Y,SRCCOPY);	// copy image section to DDB
-
-  // copy RGB image data to the allocated DIB
-
-  GetDIBits(hdc, hbm, 0, h, dib, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
-
-  // finally copy the image data to the user buffer
-
-  for (int j = 0; j<h; j++) {
-    const uchar *src = dib + j * line_size;			// source line
-    uchar *tg = p + (j + shift_y) * d * ww + shift_x * d;	// target line
-    for (int i = 0; i<w; i++) {
-      uchar b = *src++;
-      uchar g = *src++;
-      *tg++ = *src++;	// R
-      *tg++ = g;	// G
-      *tg++ = b;	// B
-      if (alpha)
-	*tg++ = alpha;	// alpha
-    }
-  }
-
-  // free used GDI and other structures
-
-  RestoreDC(hdc,save_dc);	// reset DC
-  DeleteDC(hdc);
-  DeleteObject(hbm);
-  delete[] dib;		// delete DIB temporary buffer
-
-  return p;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_rect.cxx
+++ /dev/null
@@ -1,735 +1,0 @@
-//
-// "$Id$"
-//
-// Rectangle drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2012 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_rect.cxx
-  \brief Drawing and clipping routines for rectangles.
-*/
-
-// These routines from fl_draw.H are used by the standard boxtypes
-// and thus are always linked into an fltk program.
-// Also all fl_clip routines, since they are always linked in so
-// that minimal update works.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Printer.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-
-// fl_line_width_ must contain the absolute value of the current
-// line width to be used for X11 clipping (see below).
-// This is defined in src/fl_line_style.cxx
-extern int fl_line_width_;
-
-#ifdef __APPLE_QUARTZ__
-extern float fl_quartz_line_width_;
-#define USINGQUARTZPRINTER  (Fl_Surface_Device::surface()->class_name() == Fl_Printer::class_id)
-#endif
-
-#ifdef USE_X11
-
-#ifndef SHRT_MAX
-#define SHRT_MAX (32767)
-#endif
-
-/*
-  We need to check some coordinates for areas for clipping before we
-  use X functions, because X can't handle coordinates outside the 16-bit
-  range. Since all windows use relative coordinates > 0, we do also
-  check for negative values. X11 only, see also STR #2304.
-  
-  Note that this is only necessary for large objects, where only a
-  part of the object is visible. The draw() functions (e.g. box
-  drawing) must be clipped correctly. This is usually only a matter
-  for large container widgets. The individual child widgets will be
-  clipped completely.
-
-  We define the usable X coordinate space as [ -LW : SHRT_MAX - LW ]
-  where LW = current line width for drawing. This is done so that
-  horizontal and vertical line drawing works correctly, even in real
-  border cases, e.g. drawing a rectangle slightly outside the top left
-  window corner, but with a line width so that a part of the line should
-  be visible (in this case 2 of 5 pixels):
-
-    fl_line_style (FL_SOLID,5);	// line width = 5
-    fl_rect (-1,-1,100,100);	// top/left: 2 pixels visible
-  
-  In this example case, no clipping would be done, because X can
-  handle it and clip unneeded pixels.
-  
-  Note that we must also take care of the case where fl_line_width_
-  is zero (maybe unitialized). If this is the case, we assume a line
-  width of 1.
-
-  Todo: Arbitrary line drawings (e.g. polygons) and clip regions
-  are not yet done.
-
-  Note:
-
-  We could use max. screen coordinates instead of SHRT_MAX, but that
-  would need more work and would probably be slower. We assume that
-  all window coordinates are >= 0 and that no window extends up to
-  32767 - LW (where LW = current line width). Thus it is safe to clip
-  all coordinates to this range before calling X functions. If this
-  is not true, then clip_to_short() and clip_x() must be redefined.
-
-  It would be somewhat easier if we had fl_clip_w and fl_clip_h, as
-  defined in FLTK 2.0 (for the upper clipping bounds)...
-*/
-
-/*
-  clip_to_short() returns 1, if the area is invisible (clipped),
-  because ...
-
-    (a) w or h are <= 0		i.e. nothing is visible
-    (b) x+w or y+h are < kmin	i.e. left of or above visible area
-    (c) x or y are > kmax	i.e. right of or below visible area
-
-  kmin and kmax are the minimal and maximal X coordinate values,
-  as defined above. In this case x, y, w, and h are not changed.
-
-  It returns 0, if the area is potentially visible and X can handle
-  clipping. x, y, w, and h may have been adjusted to fit into the
-  X coordinate space.
-
-  Use this for clipping rectangles, as used in fl_rect() and
-  fl_rectf().
-*/
-
-static int clip_to_short(int &x, int &y, int &w, int &h) {
-
-  int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
-  int kmin = -lw;
-  int kmax = SHRT_MAX - lw;
-
-  if (w <= 0 || h <= 0) return 1;		// (a)
-  if (x+w < kmin || y+h < kmin) return 1;	// (b)
-  if (x > kmax || y > kmax) return 1;		// (c)
-
-  if (x < kmin) { w -= (kmin-x); x = kmin; }
-  if (y < kmin) { h -= (kmin-y); y = kmin; }
-  if (x+w > kmax) w = kmax - x;
-  if (y+h > kmax) h = kmax - y;
-
-  return 0;
-}
-
-/*
-  clip_x() returns a coordinate value clipped to the 16-bit coordinate
-  space (see above). This can be used to draw horizontal and vertical
-  lines that can be handled by X11. Each single coordinate value can
-  be clipped individually, and the result can be used directly, e.g.
-  in fl_xyline() and fl_yxline(). Note that this can't be used for
-  arbitrary lines (not horizontal or vertical).
-*/
-static int clip_x (int x) {
-
-  int lw = (fl_line_width_ > 0) ? fl_line_width_ : 1;
-  int kmin = -lw;
-  int kmax = SHRT_MAX - lw;
-
-  if (x < kmin)
-    x = kmin;
-  else if (x > kmax)
-    x = kmax;
-  return x;
-}
-
-#endif	// USE_X11
-
-
-void Fl_Graphics_Driver::rect(int x, int y, int w, int h) {
-
-  if (w<=0 || h<=0) return;
-#if defined(USE_X11)
-  if (!clip_to_short(x, y, w, h))
-    XDrawRectangle(fl_display, fl_window, fl_gc, x, y, w-1, h-1);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x+w-1, y);
-  LineTo(fl_gc, x+w-1, y+h-1);
-  LineTo(fl_gc, x, y+h-1);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  if ( (!USINGQUARTZPRINTER) && fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGRect rect = CGRectMake(x, y, w-1, h-1);
-  CGContextStrokeRect(fl_gc, rect);
-  if ( (!USINGQUARTZPRINTER) && fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::rectf(int x, int y, int w, int h) {
-  if (w<=0 || h<=0) return;
-#if defined(USE_X11)
-  if (!clip_to_short(x, y, w, h))
-    XFillRectangle(fl_display, fl_window, fl_gc, x, y, w, h);
-#elif defined(WIN32)
-  RECT rect;
-  rect.left = x; rect.top = y;  
-  rect.right = x + w; rect.bottom = y + h;
-  FillRect(fl_gc, &rect, fl_brush());
-#elif defined(__APPLE_QUARTZ__)
-  CGRect  rect = CGRectMake(x - 0.5, y - 0.5, w , h);
-  CGContextFillRect(fl_gc, rect);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x1), clip_x(y));
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x1+1, y);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    /* On retina displays, all xyline() and yxline() functions produce lines that are half-unit
-     (or one pixel) too short at both ends. This is corrected by filling at both ends rectangles
-     of size one unit by line-width.
-     */
-    CGContextFillRect(fl_gc, CGRectMake(x-0.5 , y  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-    CGContextFillRect(fl_gc, CGRectMake(x1-0.5 , y  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1, int y2) {
-#if defined (USE_X11)
-  XPoint p[3];
-  p[0].x = clip_x(x);  p[0].y = p[1].y = clip_x(y);
-  p[1].x = p[2].x = clip_x(x1); p[2].y = clip_x(y2);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  if (y2 < y) y2--;
-  else y2++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y);
-  LineTo(fl_gc, x1, y2);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextAddLineToPoint(fl_gc, x1, y2);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    CGContextFillRect(fl_gc, CGRectMake(x-0.5, y  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-    CGContextFillRect(fl_gc, CGRectMake(x1  -  fl_quartz_line_width_/2, y2-0.5, fl_quartz_line_width_, 1));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-#error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = clip_x(x);  p[0].y = p[1].y = clip_x(y);
-  p[1].x = p[2].x = clip_x(x1); p[2].y = p[3].y = clip_x(y2);
-  p[3].x = clip_x(x3);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  if(x3 < x1) x3--;
-  else x3++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y);
-  LineTo(fl_gc, x1, y2);
-  LineTo(fl_gc, x3, y2);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y);
-  CGContextAddLineToPoint(fl_gc, x1, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y2);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    CGContextFillRect(fl_gc, CGRectMake(x-0.5, y  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-    CGContextFillRect(fl_gc, CGRectMake(x3-0.5, y2  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y), clip_x(x), clip_x(y1));
-#elif defined(WIN32)
-  if (y1 < y) y1--;
-  else y1++;
-  MoveToEx(fl_gc, x, y, 0L); LineTo(fl_gc, x, y1);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    CGContextFillRect(fl_gc, CGRectMake(x  -  fl_quartz_line_width_/2, y-0.5, fl_quartz_line_width_, 1));
-    CGContextFillRect(fl_gc, CGRectMake(x  -  fl_quartz_line_width_/2, y1-0.5, fl_quartz_line_width_, 1));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1, int x2) {
-#if defined(USE_X11)
-  XPoint p[3];
-  p[0].x = p[1].x = clip_x(x);  p[0].y = clip_x(y);
-  p[1].y = p[2].y = clip_x(y1); p[2].x = clip_x(x2);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  if (x2 > x) x2++;
-  else x2--;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x, y1);
-  LineTo(fl_gc, x2, y1);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y1);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    CGContextFillRect(fl_gc, CGRectMake(x  -  fl_quartz_line_width_/2, y-0.5, fl_quartz_line_width_, 1));
-    CGContextFillRect(fl_gc, CGRectMake(x2-0.5, y1  - fl_quartz_line_width_/2, 1 , fl_quartz_line_width_));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = p[1].x = clip_x(x);  p[0].y = clip_x(y);
-  p[1].y = p[2].y = clip_x(y1); p[2].x = p[3].x = clip_x(x2);
-  p[3].y = clip_x(y3);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  if(y3<y1) y3--;
-  else y3++;
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x, y1);
-  LineTo(fl_gc, x2, y1);
-  LineTo(fl_gc, x2, y3);
-#elif defined(__APPLE_QUARTZ__)
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y3);
-  CGContextStrokePath(fl_gc);
-  if (Fl_Display_Device::high_resolution()) {
-    CGContextFillRect(fl_gc, CGRectMake(x  -  fl_quartz_line_width_/2, y-0.5, fl_quartz_line_width_, 1));
-    CGContextFillRect(fl_gc, CGRectMake(x2  -  fl_quartz_line_width_/2, y3-0.5, fl_quartz_line_width_, 1));
-  }
-  if (USINGQUARTZPRINTER || fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::line(int x, int y, int x1, int y1) {
-#if defined(USE_X11)
-  XDrawLine(fl_display, fl_window, fl_gc, x, y, x1, y1);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  // Draw the last point *again* because the GDI line drawing
-  // functions will not draw the last point ("it's a feature!"...)
-  SetPixel(fl_gc, x1, y1, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextStrokePath(fl_gc);
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::line(int x, int y, int x1, int y1, int x2, int y2) {
-#if defined(USE_X11)
-  XPoint p[3];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 3, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  // Draw the last point *again* because the GDI line drawing
-  // functions will not draw the last point ("it's a feature!"...)
-  SetPixel(fl_gc, x2, y2, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextStrokePath(fl_gc);
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2) {
-#if defined(USE_X11)
-  XPoint p[4];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x;  p[3].y = y;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextClosePath(fl_gc);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::loop(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
-#if defined(USE_X11)
-  XPoint p[5];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x3; p[3].y = y3;
-  p[4].x = x;  p[4].y = y;
-  XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#elif defined(WIN32)
-  MoveToEx(fl_gc, x, y, 0L); 
-  LineTo(fl_gc, x1, y1);
-  LineTo(fl_gc, x2, y2);
-  LineTo(fl_gc, x3, y3);
-  LineTo(fl_gc, x, y);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y3);
-  CGContextClosePath(fl_gc);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2) {
-  XPoint p[4];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-#if defined (USE_X11)
-  p[3].x = x;  p[3].y = y;
-  XFillPolygon(fl_display, fl_window, fl_gc, p, 3, Convex, 0);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 4, 0);
-#elif defined(WIN32)
-  SelectObject(fl_gc, fl_brush());
-  Polygon(fl_gc, p, 3);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) {
-  XPoint p[5];
-  p[0].x = x;  p[0].y = y;
-  p[1].x = x1; p[1].y = y1;
-  p[2].x = x2; p[2].y = y2;
-  p[3].x = x3; p[3].y = y3;
-#if defined(USE_X11)
-  p[4].x = x;  p[4].y = y;
-  XFillPolygon(fl_display, fl_window, fl_gc, p, 4, Convex, 0);
-  XDrawLines(fl_display, fl_window, fl_gc, p, 5, 0);
-#elif defined(WIN32)
-  SelectObject(fl_gc, fl_brush());
-  Polygon(fl_gc, p, 4);
-#elif defined(__APPLE_QUARTZ__)
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, x, y);
-  CGContextAddLineToPoint(fl_gc, x1, y1);
-  CGContextAddLineToPoint(fl_gc, x2, y2);
-  CGContextAddLineToPoint(fl_gc, x3, y3);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::point(int x, int y) {
-#if defined(USE_X11)
-  XDrawPoint(fl_display, fl_window, fl_gc, clip_x(x), clip_x(y));
-#elif defined(WIN32)
-  SetPixel(fl_gc, x, y, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  CGContextFillRect(fl_gc, CGRectMake(x - 0.5, y - 0.5, 1, 1) );
-#else
-# error unsupported platform
-#endif
-}
-
-////////////////////////////////////////////////////////////////
-
-#if !defined(WIN32) && !defined(__APPLE__)
-// Missing X call: (is this the fastest way to init a 1-rectangle region?)
-// MSWindows equivalent exists, implemented inline in win32.H
-Fl_Region XRectangleRegion(int x, int y, int w, int h) {
-  XRectangle R;
-  clip_to_short(x, y, w, h);
-  R.x = x; R.y = y; R.width = w; R.height = h;
-  Fl_Region r = XCreateRegion();
-  XUnionRectWithRegion(&R, r, r);
-  return r;
-}
-#endif
-
-void Fl_Graphics_Driver::restore_clip() {
-  fl_clip_state_number++;
-  if (!fl_gc) return;
-  Fl_Region r = rstack[rstackptr];
-#if defined(USE_X11)
-  if (r) XSetRegion(fl_display, fl_gc, r);
-  else XSetClipMask(fl_display, fl_gc, 0);
-#elif defined(WIN32)
-  SelectClipRgn(fl_gc, r); //if r is NULL, clip is automatically cleared
-#elif defined(__APPLE_QUARTZ__)
-  if ( fl_window || fl_gc ) { // clipping for a true window or an offscreen buffer
-    Fl_X::q_clear_clipping();
-    Fl_X::q_fill_context();//flip coords if bitmap context
-    //apply program clip
-    if (r) {
-      CGContextClipToRects(fl_gc, r->rects, r->count);
-    }
-  }
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::clip_region(Fl_Region r) {
-  Fl_Region oldr = rstack[rstackptr];
-  if (oldr) XDestroyRegion(oldr);
-  rstack[rstackptr] = r;
-  fl_restore_clip();
-}
-
-Fl_Region Fl_Graphics_Driver::clip_region() {
-  return rstack[rstackptr];
-}
-
-void Fl_Graphics_Driver::push_clip(int x, int y, int w, int h) {
-  Fl_Region r;
-  if (w > 0 && h > 0) {
-    r = XRectangleRegion(x,y,w,h);
-    Fl_Region current = rstack[rstackptr];
-    if (current) {
-#if defined(USE_X11)
-      Fl_Region temp = XCreateRegion();
-      XIntersectRegion(current, r, temp);
-      XDestroyRegion(r);
-      r = temp;
-#elif defined(WIN32)
-      CombineRgn(r,r,current,RGN_AND);
-#elif defined(__APPLE_QUARTZ__)
-      XDestroyRegion(r);
-      r = Fl_X::intersect_region_and_rect(current, x,y,w,h);
-#else
-# error unsupported platform
-#endif
-    }
-  } else { // make empty clip region:
-#if defined(USE_X11)
-    r = XCreateRegion();
-#elif defined(WIN32)
-    r = CreateRectRgn(0,0,0,0);
-#elif defined(__APPLE_QUARTZ__)
-    r = XRectangleRegion(0,0,0,0);
-#else
-# error unsupported platform
-#endif
-  }
-  if (rstackptr < region_stack_max) rstack[++rstackptr] = r;
-  else Fl::warning("fl_push_clip: clip stack overflow!\n");
-  fl_restore_clip();
-}
-
-// make there be no clip (used by fl_begin_offscreen() only!)
-void Fl_Graphics_Driver::push_no_clip() {
-  if (rstackptr < region_stack_max) rstack[++rstackptr] = 0;
-  else Fl::warning("fl_push_no_clip: clip stack overflow!\n");
-  fl_restore_clip();
-}
-
-// pop back to previous clip:
-void Fl_Graphics_Driver::pop_clip() {
-  if (rstackptr > 0) {
-    Fl_Region oldr = rstack[rstackptr--];
-    if (oldr) XDestroyRegion(oldr);
-  } else Fl::warning("fl_pop_clip: clip stack underflow!\n");
-  fl_restore_clip();
-}
-
-int Fl_Graphics_Driver::not_clipped(int x, int y, int w, int h) {
-  if (x+w <= 0 || y+h <= 0) return 0;
-  Fl_Region r = rstack[rstackptr];
-  if (!r) return 1;
-#if defined (USE_X11)
-  // get rid of coordinates outside the 16-bit range the X calls take.
-  if (clip_to_short(x,y,w,h)) return 0;	// clipped
-  return XRectInRegion(r, x, y, w, h);
-#elif defined(WIN32)
-  RECT rect;
-  if (Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) { // in case of print context, convert coords from logical to device
-    POINT pt[2] = { {x, y}, {x + w, y + h} };
-    LPtoDP(fl_gc, pt, 2);
-    rect.left = pt[0].x; rect.top = pt[0].y; rect.right = pt[1].x; rect.bottom = pt[1].y;
-  } else {
-    rect.left = x; rect.top = y; rect.right = x+w; rect.bottom = y+h;
-  }
-  return RectInRegion(r,&rect);
-#elif defined(__APPLE_QUARTZ__)
-  CGRect arg = fl_cgrectmake_cocoa(x, y, w, h);
-  for (int i = 0; i < r->count; i++) {
-    CGRect test = CGRectIntersection(r->rects[i], arg);
-    if (!CGRectIsEmpty(test)) return 1;
-  }
-  return 0;
-#else
-# error unsupported platform
-#endif
-}
-
-// return rectangle surrounding intersection of this rectangle and clip:
-int Fl_Graphics_Driver::clip_box(int x, int y, int w, int h, int& X, int& Y, int& W, int& H){
-  X = x; Y = y; W = w; H = h;
-  Fl_Region r = rstack[rstackptr];
-  if (!r) return 0;
-#if defined(USE_X11)
-  switch (XRectInRegion(r, x, y, w, h)) {
-  case 0: // completely outside
-    W = H = 0;
-    return 2;
-  case 1: // completely inside:
-    return 0;
-  default: // partial:
-    break;
-  }
-  Fl_Region rr = XRectangleRegion(x,y,w,h);
-  Fl_Region temp = XCreateRegion();
-  XIntersectRegion(r, rr, temp);
-  XRectangle rect;
-  XClipBox(temp, &rect);
-  X = rect.x; Y = rect.y; W = rect.width; H = rect.height;
-  XDestroyRegion(temp);
-  XDestroyRegion(rr);
-  return 1;
-#elif defined(WIN32)
-// The win32 API makes no distinction between partial and complete
-// intersection, so we have to check for partial intersection ourselves.
-// However, given that the regions may be composite, we have to do
-// some voodoo stuff...
-  Fl_Region rr = XRectangleRegion(x,y,w,h);
-  Fl_Region temp = CreateRectRgn(0,0,0,0);
-  int ret;
-  if (CombineRgn(temp, rr, r, RGN_AND) == NULLREGION) { // disjoint
-    W = H = 0;
-    ret = 2;
-  } else if (EqualRgn(temp, rr)) { // complete
-    ret = 0;
-  } else {	// partial intersection
-    RECT rect;
-    GetRgnBox(temp, &rect);
-    if (Fl_Surface_Device::surface() != Fl_Display_Device::display_device()) { // if print context, convert coords from device to logical
-      POINT pt[2] = { {rect.left, rect.top}, {rect.right, rect.bottom} };
-      DPtoLP(fl_gc, pt, 2);
-      X = pt[0].x; Y = pt[0].y; W = pt[1].x - X; H = pt[1].y - Y;
-    }
-    else {
-      X = rect.left; Y = rect.top; W = rect.right - X; H = rect.bottom - Y;
-      }
-    ret = 1;
-  }
-  DeleteObject(temp);
-  DeleteObject(rr);
-  return ret;
-#elif defined(__APPLE_QUARTZ__)
-  CGRect arg = fl_cgrectmake_cocoa(x, y, w, h);
-  CGRect u = CGRectMake(0,0,0,0);
-  CGRect test;
-  for(int i = 0; i < r->count; i++) {
-    test = CGRectIntersection(r->rects[i], arg);
-    if( ! CGRectIsEmpty(test) ) {
-      if(CGRectIsEmpty(u)) u = test;
-      else u = CGRectUnion(u, test);
-    }
-  }
-  X = int(u.origin.x + 0.5); // reverse offset introduced by fl_cgrectmake_cocoa()
-  Y = int(u.origin.y + 0.5);
-  W = int(u.size.width + 0.5); // round to nearest integer
-  H = int(u.size.height + 0.5);
-  if(CGRectIsEmpty(u)) W = H = 0;
-  return ! CGRectEqualToRect(arg, u);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_round_box.cxx
+++ /dev/null
@@ -1,113 +1,0 @@
-//
-// "$Id$"
-//
-// Round box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Box drawing code for an obscure box type.
-// These box types are in separate files so they are not linked
-// in if not used.
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-// A compiler from a certain very large software company will not compile
-// the function pointer assignment due to the name conflict with fl_arc.
-// This function is to fix that:
-static void fl_arc_i(int x,int y,int w,int h,double a1,double a2) {
-  fl_arc(x,y,w,h,a1,a2);
-}
-
-enum {UPPER_LEFT, LOWER_RIGHT, CLOSED, FILL};
-
-static void draw(int which, int x,int y,int w,int h, int inset, Fl_Color color)
-{
-  if (inset*2 >= w) inset = (w-1)/2;
-  if (inset*2 >= h) inset = (h-1)/2;
-  x += inset;
-  y += inset;
-  w -= 2*inset;
-  h -= 2*inset;
-  int d = w <= h ? w : h;
-  if (d <= 1) return;
-  fl_color(color);
-  void (*f)(int,int,int,int,double,double);
-  f = (which==FILL) ? fl_pie : fl_arc_i;
-  if (which >= CLOSED) {
-    f(x+w-d, y, d, d, w<=h ? 0 : -90, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, w<=h ? 360 : 270);
-  } else if (which == UPPER_LEFT) {
-    f(x+w-d, y, d, d, 45, w<=h ? 180 : 90);
-    f(x, y+h-d, d, d, w<=h ? 180 : 90, 225);
-  } else { // LOWER_RIGHT
-    f(x, y+h-d, d, d, 225, w<=h ? 360 : 270);
-    f(x+w-d, y, d, d, w<=h ? 360 : 270, 360+45);
-  }
-  if (which == FILL) {
-    if (w < h)
-      fl_rectf(x, y+d/2, w, h-(d&-2));
-    else if (w > h)
-      fl_rectf(x+d/2, y, w-(d&-2), h);
-  } else {
-    if (w < h) {
-      if (which != UPPER_LEFT) fl_yxline(x+w-1, y+d/2-1, y+h-d/2+1);
-      if (which != LOWER_RIGHT) fl_yxline(x, y+d/2-1, y+h-d/2+1);
-    } else if (w > h) {
-      if (which != UPPER_LEFT) fl_xyline(x+d/2-1, y+h-1, x+w-d/2+1);
-      if (which != LOWER_RIGHT) fl_xyline(x+d/2-1, y, x+w-d/2+1);
-    }
-  }
-}
-
-extern const uchar* fl_gray_ramp();
-
-void fl_round_down_box(int x, int y, int w, int h, Fl_Color bgcolor) {
-  const uchar *g = fl_gray_ramp();
-  draw(FILL,	    x,   y, w,   h, 2, Fl::box_color(bgcolor));
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0, (Fl_Color)g[(int)'N']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1, (Fl_Color)g[(int)'H']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 0, (Fl_Color)g[(int)'N']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 1, (Fl_Color)g[(int)'H']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 0, (Fl_Color)g[(int)'S']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0, (Fl_Color)g[(int)'U']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1, (Fl_Color)g[(int)'U']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1, (Fl_Color)g[(int)'W']);
-  draw(CLOSED,	    x,   y, w,   h, 2, (Fl_Color)g[(int)'A']);
-}
-
-void fl_round_up_box(int x, int y, int w, int h, Fl_Color bgcolor) {
-  const uchar *g = fl_gray_ramp();
-  draw(FILL,	    x,   y, w,   h, 2, Fl::box_color(bgcolor));
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 0, (Fl_Color)g[(int)'H']);
-  draw(LOWER_RIGHT, x+1, y, w-2, h, 1, (Fl_Color)g[(int)'N']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 1, (Fl_Color)g[(int)'H']);
-  draw(LOWER_RIGHT, x,   y, w,   h, 2, (Fl_Color)g[(int)'N']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 2, (Fl_Color)g[(int)'U']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 1, (Fl_Color)g[(int)'S']);
-  draw(UPPER_LEFT,  x,   y, w,   h, 1, (Fl_Color)g[(int)'W']);
-  draw(UPPER_LEFT,  x+1, y, w-2, h, 0, (Fl_Color)g[(int)'U']);
-  draw(CLOSED,	    x,   y, w,   h, 0, (Fl_Color)g[(int)'A']);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_ROUND_UP_BOX() {
-  fl_internal_boxtype(_FL_ROUND_DOWN_BOX, fl_round_down_box);
-  fl_internal_boxtype(_FL_ROUND_UP_BOX, fl_round_up_box);
-  return _FL_ROUND_UP_BOX;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_rounded_box.cxx
+++ /dev/null
@@ -1,104 +1,0 @@
-//
-// "$Id$"
-//
-// Rounded box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-// Constants for rounded corner drawing algorithm:
-//
-//  RN = number of segments per corner (must match offset array size)
-//  RS = max. corner radius
-//  BW = box shadow width
-
-#define RN	5
-#define RS	15
-#define BW	3
-
-static double offset[RN] = { 0.0, 0.07612, 0.29289, 0.61732, 1.0};
-
-static inline void fl_vertex_r(double x, double y) {
-  fl_vertex(x + 0.5, y + 0.5);
-}
-
-static void rbox(int fill, int x, int y, int w, int h) {
-  int i;
-  int rs, rsy;
-  rs = w*2/5; rsy = h*2/5;
-  if (rs > rsy) rs = rsy; // use smaller radius
-  if (rs > RS) rs = RS;
-  if (rs == 5) rs = 4;	// use only even sizes for small corners (STR #2943)
-  if (rs == 7) rs = 8;	// note: 8 is better than 6 (really)
-
-  if (fill) fl_begin_polygon(); else fl_begin_loop();
-  for (i=0; i<RN; i++)
-    fl_vertex_r(x + offset[RN-i-1]*rs, y + offset[i] * rs);
-  for (i=0; i<RN; i++)
-    fl_vertex_r(x + offset[i]*rs, y + h-1 - offset[RN-i-1] * rs);
-  for (i=0; i<RN; i++)
-    fl_vertex_r(x + w-1 - offset[RN-i-1]*rs, y + h-1 - offset[i] * rs);
-  for (i=0; i<RN; i++)
-    fl_vertex_r(x + w-1 - offset[i]*rs, y + offset[RN-i-1] * rs);
-  if (fill) fl_end_polygon(); else fl_end_loop();
-}
-
-static void fl_rflat_box(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  rbox(1, x, y, w, h); rbox(0, x, y, w, h);
-}
-
-static void fl_rounded_frame(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  rbox(0, x, y, w, h);
-}
-
-static void fl_rounded_box(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  rbox(1, x, y, w, h);
-  fl_color(FL_BLACK); rbox(0, x, y, w, h);
-}
-
-static void fl_rshadow_box(int x, int y, int w, int h, Fl_Color c) {
-  // draw shadow:
-  fl_color(FL_DARK3);
-  rbox(1, x+BW, y+BW, w, h);
-  rbox(0, x+BW, y+BW, w, h);
-  // draw the box:
-  fl_rounded_box(x, y, w, h, c);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-
-Fl_Boxtype fl_define_FL_ROUNDED_BOX() {
-  fl_internal_boxtype(_FL_ROUNDED_FRAME, fl_rounded_frame);
-  fl_internal_boxtype(_FL_ROUNDED_BOX, fl_rounded_box);
-  return _FL_ROUNDED_BOX;
-}
-
-Fl_Boxtype fl_define_FL_RFLAT_BOX() {
-  fl_internal_boxtype(_FL_RFLAT_BOX, fl_rflat_box);
-  return _FL_RFLAT_BOX;
-}
-
-Fl_Boxtype fl_define_FL_RSHADOW_BOX() {
-  fl_internal_boxtype(_FL_RSHADOW_BOX, fl_rshadow_box);
-  return _FL_RSHADOW_BOX;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_scroll_area.cxx
+++ /dev/null
@@ -1,162 +1,0 @@
-//
-// "$Id$"
-//
-// Scrolling routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Drawing function to move the contents of a rectangle.  This is passed
-// a "callback" which is called to draw rectangular areas that are moved
-// into the drawing area.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-// scroll a rectangle and redraw the newly exposed portions:
-/**
-  Scroll a rectangle and draw the newly exposed portions.
-  \param[in] X,Y       position of top-left of rectangle
-  \param[in] W,H       size of rectangle
-  \param[in] dx,dy     pixel offsets for shifting rectangle
-  \param[in] draw_area callback function to draw rectangular areas
-  \param[in] data      pointer to user data for callback
-  The contents of the rectangular area is first shifted by \p dx
-  and \p dy pixels. The \p draw_area callback is then called for
-  every newly exposed rectangular area.
-  */
-void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
-               void (*draw_area)(void*, int,int,int,int), void* data)
-{
-  if (!dx && !dy) return;
-  if (dx <= -W || dx >= W || dy <= -H || dy >= H) {
-    // no intersection of old an new scroll
-    draw_area(data,X,Y,W,H);
-    return;
-  }
-  int src_x, src_w, dest_x, clip_x, clip_w;
-  if (dx > 0) {
-    src_x = X;
-    dest_x = X+dx;
-    src_w = W-dx;
-    clip_x = X;
-    clip_w = dx;
-  } else {
-    src_x = X-dx;
-    dest_x = X;
-    src_w = W+dx;
-    clip_x = X+src_w;
-    clip_w = W-src_w;
-  }
-  int src_y, src_h, dest_y, clip_y, clip_h;
-  if (dy > 0) {
-    src_y = Y;
-    dest_y = Y+dy;
-    src_h = H-dy;
-    clip_y = Y;
-    clip_h = dy;
-  } else {
-    src_y = Y-dy;
-    dest_y = Y;
-    src_h = H+dy;
-    clip_y = Y+src_h;
-    clip_h = H-src_h;
-  }
-
-#if defined(USE_X11)
-  XCopyArea(fl_display, fl_window, fl_window, fl_gc,
-	    src_x, src_y, src_w, src_h, dest_x, dest_y);
-  // we have to sync the display and get the GraphicsExpose events! (sigh)
-  for (;;) {
-    XEvent e; XWindowEvent(fl_display, fl_window, ExposureMask, &e);
-    if (e.type == NoExpose) break;
-    // otherwise assume it is a GraphicsExpose event:
-    draw_area(data, e.xexpose.x, e.xexpose.y,
-	      e.xexpose.width, e.xexpose.height);
-    if (!e.xgraphicsexpose.count) break;
-  }
-#elif defined(WIN32)
-  typedef int (WINAPI* fl_GetRandomRgn_func)(HDC, HRGN, INT);
-  static fl_GetRandomRgn_func fl_GetRandomRgn = 0L;
-  static char first_time = 1;
-
-  // We will have to do some Region magic now, so let's see if the 
-  // required function is available (and it should be staring w/Win95)
-  if (first_time) {
-    HMODULE hMod = GetModuleHandle("GDI32.DLL");
-    if (hMod) {
-      fl_GetRandomRgn = (fl_GetRandomRgn_func)GetProcAddress(hMod, "GetRandomRgn");
-    }
-    first_time = 0;
-  }
-
-  // Now check if the source scrolling area is fully visible.
-  // If it is, we will do a quick scroll and just update the 
-  // newly exposed area. If it is not, we go the safe route and 
-  // re-render the full area instead.
-  // Note 1: we could go and find the areas that are actually
-  // obscured and recursively call fl_scroll for the newly found
-  // rectangles. However, this practice would rely on the 
-  // elements of the undocumented Rgn structure.
-  // Note 2: although this method should take care of most 
-  // multi-screen solutions, it will not solve issues scrolling
-  // from a different resolution screen onto another.
-  // Note 3: this has been tested with image maps, too.
-  if (fl_GetRandomRgn) {
-    // get the DC region minus all overlapping windows
-    HRGN sys_rgn = CreateRectRgn(0, 0, 0, 0);
-    fl_GetRandomRgn(fl_gc, sys_rgn, 4);
-    // now get the source scrolling rectangle 
-    HRGN src_rgn = CreateRectRgn(src_x, src_y, src_x+src_w, src_y+src_h);
-    POINT offset = { 0, 0 };
-    if (GetDCOrgEx(fl_gc, &offset)) {
-      OffsetRgn(src_rgn, offset.x, offset.y);
-    }
-    // see if all source pixels are available in the system region
-    // Note: we could be a bit more merciful and subtract the 
-    // scroll destination region as well.
-    HRGN dst_rgn = CreateRectRgn(0, 0, 0, 0);
-    int r = CombineRgn(dst_rgn, src_rgn, sys_rgn, RGN_DIFF);
-    DeleteObject(dst_rgn);
-    DeleteObject(src_rgn);
-    DeleteObject(sys_rgn);
-    if (r!=NULLREGION) {
-      draw_area(data,X,Y,W,H);
-      return;
-    }
-  }
-
-  // Great, we can do an accelerated scroll instead of re-rendering
-  BitBlt(fl_gc, dest_x, dest_y, src_w, src_h, fl_gc, src_x, src_y,SRCCOPY);
-
-#elif defined(__APPLE_QUARTZ__)
-  CGImageRef img = Fl_X::CGImage_from_window_rect(Fl_Window::current(), src_x, src_y, src_w, src_h);
-  if (img) {
-    CGRect rect = CGRectMake(dest_x, dest_y, src_w, src_h);
-    Fl_X::q_begin_image(rect, 0, 0, src_w, src_h);
-    CGContextDrawImage(fl_gc, rect, img);
-    Fl_X::q_end_image();
-    CFRelease(img);
-    }
-#else
-# error unsupported platform
-#endif
-  if (dx) draw_area(data, clip_x, dest_y, clip_w, src_h);
-  if (dy) draw_area(data, X, clip_y, W, clip_h);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_font.cxx
+++ /dev/null
@@ -1,96 +1,0 @@
-//
-// "$Id$"
-//
-// Font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Add a font to the internal table.
-// Also see fl_set_fonts.cxx which adds all possible fonts.
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include "flstring.h"
-#include "Fl_Font.H"
-#include <stdlib.h>
-
-static int table_size;
-/**
-  Changes a face.  The string pointer is simply stored,
-  the string is not copied, so the string must be in static memory.
-*/    
-void Fl::set_font(Fl_Font fnum, const char* name) {
-#ifdef __APPLE__
-  if (!fl_fonts) fl_fonts = Fl_X::calc_fl_fonts();
-#endif
-  while (fnum >= table_size) {
-    int i = table_size;
-    if (!i) {	// don't realloc the built-in table
-      table_size = 2*FL_FREE_FONT;
-      i = FL_FREE_FONT;
-      Fl_Fontdesc* t = (Fl_Fontdesc*)malloc(table_size*sizeof(Fl_Fontdesc));
-      memcpy(t, fl_fonts, FL_FREE_FONT*sizeof(Fl_Fontdesc));
-      fl_fonts = t;
-    } else {
-      table_size = 2*table_size;
-      fl_fonts=(Fl_Fontdesc*)realloc(fl_fonts, table_size*sizeof(Fl_Fontdesc));
-    }
-    for (; i < table_size; i++) {
-      fl_fonts[i].fontname[0] = 0;
-      fl_fonts[i].name = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-      fl_fonts[i].xlist = 0;
-      fl_fonts[i].n = 0;
-#endif // !WIN32 && !__APPLE__
-    }
-  }
-  Fl_Fontdesc* s = fl_fonts+fnum;
-  if (s->name) {
-    if (!strcmp(s->name, name)) {s->name = name; return;}
-#if !defined(WIN32) && !defined(__APPLE__)
-    if (s->xlist && s->n >= 0) XFreeFontNames(s->xlist);
-#endif
-    for (Fl_Font_Descriptor* f = s->first; f;) {
-      Fl_Font_Descriptor* n = f->next; delete f; f = n;
-    }
-    s->first = 0;
-  }
-  s->name = name;
-  s->fontname[0] = 0;
-#if !defined(WIN32) && !defined(__APPLE__)
-  s->xlist = 0;
-#endif
-  s->first = 0;
-  Fl_Display_Device::display_device()->driver()->font(-1, 0);
-}
-/** Copies one face to another. */
-void Fl::set_font(Fl_Font fnum, Fl_Font from) {
-  Fl::set_font(fnum, get_font(from));
-}
-/**
-    Gets the string for this face.  This string is different for each
-    face. Under X this value is passed to XListFonts to get all the sizes
-    of this face.
-*/
-const char* Fl::get_font(Fl_Font fnum) {
-#ifdef __APPLE__
-  if (!fl_fonts) fl_fonts = Fl_X::calc_fl_fonts();
-#endif
-  return fl_fonts[fnum].name;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_fonts.cxx
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// More font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include "Fl_Font.H"
-#include "flstring.h"
-#include <stdlib.h>
-
-#ifdef WIN32
-#  include "fl_set_fonts_win32.cxx"
-#elif defined(__APPLE__)
-#  include "fl_set_fonts_mac.cxx"
-#elif USE_XFT
-#  include "fl_set_fonts_xft.cxx"
-#else
-#  include "fl_set_fonts_x.cxx"
-#endif // WIN32
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_fonts_mac.cxx
+++ /dev/null
@@ -1,199 +1,0 @@
-//
-// "$Id$"
-//
-// MacOS font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-// #inclde <SFNTTypes.h>
-
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER  sizeof(fl_fonts->fontname)-1
-
-// turn a stored font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  if (!fl_fonts) fl_fonts = Fl_X::calc_fl_fonts();
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-    if (fl_mac_os_version >= Fl_X::CoreText_threshold) {
-      CFStringRef cfname = CFStringCreateWithCString(NULL, f->name, kCFStringEncodingUTF8);
-      CTFontRef ctfont = CTFontCreateWithName(cfname, 0, NULL);
-      CFRelease(cfname);
-      cfname = CTFontCopyFullName(ctfont);
-      CFRelease(ctfont);
-      CFStringGetCString(cfname, f->fontname, ENDOFBUFFER, kCFStringEncodingUTF8);
-      CFRelease(cfname);
-      }
-    else 
-#endif
-      strlcpy(f->fontname, f->name, ENDOFBUFFER);
-    const char* p = f->name;
-    if (!p || !*p) {if (ap) *ap = 0; return "";}
-    int type = 0;
-    if (strstr(f->name, "Bold")) type |= FL_BOLD;
-    if (strstr(f->name, "Italic") || strstr(f->name, "Oblique")) type |= FL_ITALIC;
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-
-static char *skip(char *p, int& derived)
-{
-  if (memcmp(p, "-BoldItalic", 11) == 0) { p += 11; derived = 3; }
-  else if (memcmp(p, "-BoldOblique", 12) == 0) { p += 12; derived = 3; }
-  else if (memcmp(p, "-Bold", 5) == 0) {p += 5; derived = 1; }
-  else if (memcmp(p, "-Italic", 7) == 0) {p += 7; derived = 2; }
-  else if (memcmp(p, "-Oblique", 8) == 0) {p += 8; derived = 2; }
-  else if (memcmp(p, "-Regular", 8) == 0) {p += 8; }
-  else if (memcmp(p, "-Roman", 6) == 0) {p += 6; }
-  return p;
-}
-
-static int name_compare(const void *a, const void *b)
-{
-  /* Compare PostScript font names. 
-   First compare font family names ignoring bold, italic and oblique qualifiers.
-   When families are identical, order them according to regular, bold, italic, bolditalic.
-   */
-  char *n1 = *(char**)a;
-  char *n2 = *(char**)b;
-  int derived1 = 0;
-  int derived2 = 0;
-  while (true) {
-    if (*n1 == '-') n1 = skip(n1, derived1);
-    if (*n2 == '-') n2 = skip(n2, derived2);
-    if (*n1 < *n2) return -1;
-    if (*n1 > *n2) return +1;
-    if (*n1 == 0) {
-      return derived1 - derived2;
-      }
-    n1++; n2++;
-    }
-}
-#endif
-
-static int fl_free_font = FL_FREE_FONT;
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-#pragma unused ( xstarname )
-if (fl_free_font > FL_FREE_FONT) return (Fl_Font)fl_free_font; // if already called
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-if(fl_mac_os_version >= Fl_X::CoreText_threshold) {
-  int value[1] = {1};
-  CFDictionaryRef dict = CFDictionaryCreate(NULL, 
-					    (const void **)kCTFontCollectionRemoveDuplicatesOption, 
-					    (const void **)&value, 1, NULL, NULL);
-  CTFontCollectionRef fcref = CTFontCollectionCreateFromAvailableFonts(dict);
-  CFRelease(dict);
-  CFArrayRef arrayref = CTFontCollectionCreateMatchingFontDescriptors(fcref);
-  CFRelease(fcref);
-  CFIndex count = CFArrayGetCount(arrayref);
-  CFIndex i;
-  char **tabfontnames = new char*[count];
-  for (i = 0; i < count; i++) {
-	CTFontDescriptorRef fdesc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(arrayref, i);
-	CTFontRef font = CTFontCreateWithFontDescriptor(fdesc, 0., NULL);
-        CFStringRef cfname = CTFontCopyPostScriptName(font);
-	CFRelease(font);
-	static char fname[200];
-	CFStringGetCString(cfname, fname, sizeof(fname), kCFStringEncodingUTF8);
-	tabfontnames[i] = strdup(fname); // never free'ed
-	CFRelease(cfname);
-	}
-  CFRelease(arrayref);
-  qsort(tabfontnames, count, sizeof(char*), name_compare);
-  for (i = 0; i < count; i++) {
-    Fl::set_font((Fl_Font)(fl_free_font++), tabfontnames[i]);
-    }
-  delete[] tabfontnames;
-  return (Fl_Font)fl_free_font;
-}
-else {
-#endif
-#if (!defined(__LP64__) || !__LP64__) && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11
-  ItemCount oFontCount, oCountAgain;
-  ATSUFontID *oFontIDs;
-  // How many fonts?
-  ATSUFontCount (&oFontCount);
-  // now allocate space for them...
-  oFontIDs = (ATSUFontID *)malloc((oFontCount+1) * sizeof(ATSUFontID));
-  ATSUGetFontIDs (oFontIDs, oFontCount, &oCountAgain);
-  // Now oFontIDs should contain a list of all the available Unicode fonts
-  // Iterate through the list to get each font name
-  for (ItemCount idx = 0; idx < oFontCount; idx++)
-  {
-//  ByteCount actualLength = 0;
-//	Ptr oName;
-    // How to get the name - Apples docs say call this twice, once to get the length, then again 
-	// to get the actual name...
-//    ATSUFindFontName (oFontIDs[idx], kFontFullName, kFontMacintoshPlatform, kFontRomanScript, kFontEnglishLanguage,
-//                      0, NULL, &actualLength, NULL);
-    // Now actualLength tells us the length of buffer we need
-//	oName = (Ptr)malloc(actualLength + 8);
-// But who's got time for that nonsense? Let's just hard code a fixed buffer (urgh!)
-    ByteCount actualLength = 511;
-	char oName[512];
-    ATSUFindFontName (oFontIDs[idx], kFontFullName, kFontMacintoshPlatform, kFontRomanScript, kFontEnglishLanguage,
-                      actualLength, oName, &actualLength, &oCountAgain);
-    // bounds check and terminate the returned name
-    if(actualLength > 511)
-      oName[511] = 0;
-    else
-      oName[actualLength] = 0;
-	Fl::set_font((Fl_Font)(fl_free_font++), strdup(oName));
-//	free(oName);
-  }
-  free(oFontIDs);
-  return (Fl_Font)fl_free_font;
-#endif //__LP64__
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  }
-#endif
-  return 0;
-}
-
-static int array[128];
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  if (!fl_fonts) fl_fonts = Fl_X::calc_fl_fonts();
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-  int cnt = 0;
-
-  // ATS supports all font size 
-  array[0] = 0;
-  sizep = array;
-  cnt = 1;
-
-  return cnt;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_fonts_win32.cxx
+++ /dev/null
@@ -1,164 +1,0 @@
-//
-// "$Id$"
-//
-// WIN32 font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This function fills in the FLTK font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-#include <FL/fl_utf8.h>
-#ifdef __CYGWIN__
-# include <wchar.h>
-#endif
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    const char* p = f->name;
-    if (!p || !*p) {if (ap) *ap = 0; return "";}
-    int type;
-    switch (*p) {
-    case 'B': type = FL_BOLD; break;
-    case 'I': type = FL_ITALIC; break;
-    case 'P': type = FL_BOLD | FL_ITALIC; break;
-    default:  type = 0; break;
-    }
-    strlcpy(f->fontname, p+1, ENDOFBUFFER);
-    if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-    if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-static int fl_free_font = FL_FREE_FONT;
-
-static int CALLBACK
-enumcbw(CONST LOGFONTW    *lpelf,
-        CONST TEXTMETRICW * /*lpntm*/,
-       DWORD            /*FontType*/,
-       LPARAM           p) {
-  if (!p && lpelf->lfCharSet != ANSI_CHARSET) return 1;
-  char *n = NULL;
-  size_t l = wcslen(lpelf->lfFaceName);
-  unsigned dstlen = fl_utf8fromwc(n, 0, (xchar*)lpelf->lfFaceName, (unsigned) l) + 1; // measure the string
-  n = (char*) malloc(dstlen);
-//n[fl_unicode2utf((xchar*)lpelf->lfFaceName, l, n)] = 0;
-  dstlen = fl_utf8fromwc(n, dstlen, (xchar*)lpelf->lfFaceName, (unsigned) l); // convert the string
-  n[dstlen] = 0;
-  for (int i=0; i<FL_FREE_FONT; i++) // skip if one of our built-in fonts
-    if (!strcmp(Fl::get_font_name((Fl_Font)i),n)) {free(n);return 1;}
-  char buffer[LF_FACESIZE + 1];
-  strcpy(buffer+1, n);
-  buffer[0] = ' '; Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  if (lpelf->lfWeight <= 400)
-    buffer[0] = 'B', Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  buffer[0] = 'I'; Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  if (lpelf->lfWeight <= 400)
-    buffer[0] = 'P', Fl::set_font((Fl_Font)(fl_free_font++), strdup(buffer));
-  free(n);
-  return 1;
-} /* enumcbw */
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-  if (fl_free_font == FL_FREE_FONT) {// if not already been called
-    if (!fl_gc) fl_GetDC(0);
-
-    EnumFontFamiliesW(fl_gc, NULL, (FONTENUMPROCW)enumcbw, xstarname != 0);
-
-  }
-  return (Fl_Font)fl_free_font;
-}
-
-
-static int nbSize;
-static int cyPerInch;
-static int sizes[128];
-static int CALLBACK
-
-EnumSizeCbW(CONST LOGFONTW    * /*lpelf*/,
-           CONST TEXTMETRICW *lpntm,
-           DWORD            fontType,
-           LPARAM           /*p*/) {
-  if ((fontType & RASTER_FONTTYPE) == 0) {
-    sizes[0] = 0;
-    nbSize = 1;
-
-    // Scalable font
-    return 0;
-  }
-
-  int add = lpntm->tmHeight - lpntm->tmInternalLeading;
-  add = MulDiv(add, 72, cyPerInch);
-
-  int start = 0;
-  while ((start < nbSize) && (sizes[start] < add)) {
-    start++;
-  }
-
-  if ((start < nbSize) && (sizes[start] == add)) {
-    return 1;
-  }
-
-  for (int i=nbSize; i>start; i--) sizes[i] = sizes[i - 1];
-
-  sizes[start] = add;
-  nbSize++;
-
-  // Stop enum if buffer overflow
-  return nbSize < 128;
-}
-
-
-int
-Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  nbSize = 0;
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-
-  if (!fl_gc) fl_GetDC(0);
-  cyPerInch = GetDeviceCaps(fl_gc, LOGPIXELSY);
-  if (cyPerInch < 1) cyPerInch = 1;
-
-//  int l = fl_utf_nb_char((unsigned char*)s->name+1, strlen(s->name+1));
-//  unsigned short *b = (unsigned short*) malloc((l + 1) * sizeof(short));
-//  fl_utf2unicode((unsigned char*)s->name+1, l, (xchar*)b);
-  const char *nm = (const char*)s->name+1;
-  size_t len = strlen(s->name+1);
-  unsigned l = fl_utf8toUtf16(nm, (unsigned) len, NULL, 0); // Pass NULL to query length required
-  unsigned short *b = (unsigned short*) malloc((l + 1) * sizeof(short));
-  l = fl_utf8toUtf16(nm, (unsigned) len, b, (l+1)); // Now do the conversion
-  b[l] = 0;
-  EnumFontFamiliesW(fl_gc, (WCHAR*)b, (FONTENUMPROCW)EnumSizeCbW, 0);
-  free(b);
-
-  sizep = sizes;
-  return nbSize;
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_fonts_x.cxx
+++ /dev/null
@@ -1,341 +1,0 @@
-//
-// "$Id$"
-//
-// X11 font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-// Standard X fonts are matched by a pattern that is always of
-// this form, and this pattern is put in the table:
-// "-*-family-weight-slant-width1-style-*-registry-encoding"
-
-// Non-standard font names (those not starting with '-') are matched
-// by a pattern of the form "prefix*suffix", where the '*' is where
-// fltk thinks the point size is, or by the actual font name if no
-// point size is found.
-
-// Fltk knows how to pull an "attribute" out of a font name, such as
-// bold or italic, by matching known x font field values.  All words
-// that don't match a known attribute are combined into the "name"
-// of the font.  Names are compared before attributes for sorting, this
-// makes the bold and plain version of a font come out next to each
-// other despite the poor X font naming scheme.
-
-// By default fl_set_fonts() only does iso8859-1 encoded fonts.  You can
-// do all normal X fonts by passing "-*" or every possible font with "*".
-
-// Fl::set_font will take strings other than the ones this stores
-// and can identify any font on X that way.  You may want to write your
-// own system of font management and not use this code.
-
-// turn word N of a X font name into either some attribute bits
-// (right now 0, FL_BOLD, or FL_ITALIC), or into -1 indicating that
-// the word should be put into the name:
-
-static int attribute(int n, const char *p) {
-  // don't put blank things into name:
-  if (!*p || *p=='-' || *p=='*') return 0;
-  if (n == 3) { // weight
-    if (!strncmp(p,"normal",6) ||
-	!strncmp(p,"light",5) ||
-	!strncmp(p,"medium",6) ||
-	!strncmp(p,"book",4)) return 0;
-    if (!strncmp(p,"bold",4) || !strncmp(p,"demi",4)) return FL_BOLD;
-  } else if (n == 4) { // slant
-    if (*p == 'r') return 0;
-    if (*p == 'i' || *p == 'o') return FL_ITALIC;
-  } else if (n == 5) { // sWidth
-    if (!strncmp(p,"normal",6)) return 0;
-  }
-  return -1;
-}
-
-// return non-zero if the registry-encoding should be used:
-extern const char* fl_encoding;
-static int use_registry(const char *p) {
-  return *p && *p!='*' && strcmp(p,fl_encoding);
-}
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored (with *'s) X font name into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    int type = 0;
-    const char* p = f->name;
-    if (!p) {
-      if (ap) *ap = 0;
-      return "";
-    }
-    char *o = f->fontname;
-
-    if (*p != '-') { // non-standard font, just replace * with spaces:
-      if (strstr(p,"bold")) type = FL_BOLD;
-      if (strstr(p,"ital")) type |= FL_ITALIC;
-      for (;*p; p++) {
-	if (*p == '*' || *p == ' ' || *p == '-') {
-	  do p++; while (*p == '*' || *p == ' ' || *p == '-');
-	  if (!*p) break;
-	  if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = ' ';
-	}
-	if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = *p;
-      }
-      *o = 0;
-
-    } else { // standard dash-separated font:
-
-      // get the family:
-      const char *x = fl_font_word(p,2); if (*x) x++; if (*x=='*') x++;
-      if (!*x) {
-	if (ap) *ap = 0;
-	return p;
-      }
-      const char *e = fl_font_word(x,1);
-      if ((e - x) < (int)(ENDOFBUFFER - 1)) {
-	// MRS: we want strncpy here, not strlcpy...
-	strncpy(o,x,e-x);
-	o += e-x;
-      } else {
-	strlcpy(f->fontname, x, ENDOFBUFFER);
-	o = f->fontname+ENDOFBUFFER-1;
-      }
-
-      // collect all the attribute words:
-      for (int n = 3; n <= 6; n++) {
-	// get the next word:
-	if (*e) e++; x = e; e = fl_font_word(x,1);
-	int t = attribute(n,x);
-	if (t < 0) {
-	  if (o < (f->fontname + ENDOFBUFFER - 1)) *o++ = ' ';
-	  if ((e - x) < (int)(ENDOFBUFFER - (o - f->fontname) - 1)) {
-	    // MRS: we want strncpy here, not strlcpy...
-	    strncpy(o,x,e-x);
-	    o += e-x;
-	  } else {
-	    strlcpy(o,x, ENDOFBUFFER - (o - f->fontname) - 1);
-	    o = f->fontname+ENDOFBUFFER-1;
-	  }
-	} else type |= t;
-      }
-
-      // skip over the '*' for the size and get the registry-encoding:
-      x = fl_font_word(e,2);
-      if (*x) {x++; *o++ = '('; while (*x) *o++ = *x++; *o++ = ')';}
-
-      *o = 0;
-      if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-      if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    }
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-extern "C" {
-// sort raw (non-'*') X font names into perfect order:
-
-static int ultrasort(const void *aa, const void *bb) {
-  const char *a = *(char **)aa;
-  const char *b = *(char **)bb;
-
-  // sort all non x-fonts at the end:
-  if (*a != '-') {
-    if (*b == '-') return 1;
-    // 2 non-x fonts are matched by "numeric sort"
-    int ret = 0;
-    for (;;) {
-      if (isdigit(*a) && isdigit(*b)) {
-	int na = strtol(a, (char **)&a, 10);
-	int nb = strtol(b, (char **)&b, 10);
-	if (!ret) ret = na-nb;
-      } else if (*a != *b) {
-	return (*a-*b);
-      } else if (!*a) {
-	return ret;
-      } else {
-	a++; b++;
-      }
-    }
-  } else {
-    if (*b != '-') return -1;
-  }
-
-  // skip the foundry (assume equal):
-  for (a++; *a && *a++!='-';);
-  for (b++; *b && *b++!='-';);
-
-  // compare the family and all the attribute words:
-  int atype = 0;
-  int btype = 0;
-  for (int n = 2; n <= 6; n++) {
-    int at = attribute(n,a);
-    int bt = attribute(n,b);
-    if (at < 0) {
-      if (bt >= 0) return 1;
-      for (;;) {if (*a!=*b) return *a-*b; b++; if (!*a || *a++=='-') break;}
-    } else {
-      if (bt < 0) return -1;
-      a = fl_font_word(a,1); if (*a) a++;
-      b = fl_font_word(b,1); if (*b) b++;
-      atype |= at; btype |= bt;
-    }
-  }
-
-  // remember the pixel size:
-  int asize = atoi(a);
-  int bsize = atoi(b);
-
-  // compare the registry/encoding:
-  a = fl_font_word(a,6); if (*a) a++;
-  b = fl_font_word(b,6); if (*b) b++;
-  if (use_registry(a)) {
-    if (!use_registry(b)) return 1;
-    int r = strcmp(a,b); if (r) return r;
-  } else {
-    if (use_registry(b)) return -1;
-  }
-
-  if (atype != btype) return atype-btype;
-  if (asize != bsize) return asize-bsize;
-
-  // something wrong, just do a string compare...
-  return strcmp(*(char**)aa, *(char**)bb);
-}
-}
-
-// converts a X font name to a standard starname, returns point size:
-static int to_canonical(char *to, const char *from, size_t tolen) {
-  char* c = fl_find_fontsize((char*)from);
-  if (!c) return -1; // no point size found...
-  const char* endptr;
-  int size = strtol(c,(char**)&endptr,10);
-  if (from[0] == '-') {
-    // replace the "foundry" with -*-:
-    *to++ = '-'; *to++ = '*';
-    for (from++; *from && *from != '-'; from++);
-    // skip to the registry-encoding:
-    endptr = (char*)fl_font_word(endptr,6);
-    if (*endptr && !use_registry(endptr+1)) endptr = "";
-  }
-  int n = c-from;
-  // MRS: we want strncpy here, not strlcpy...
-  if (n > (int)(tolen - 1)) return -1;
-  strncpy(to,from,n);
-  to[n++] = '*';
-  strlcpy(to+n,endptr, tolen - n);
-  return size;
-}
-
-static unsigned int fl_free_font = FL_FREE_FONT;
-
-Fl_Font Fl::set_fonts(const char* xstarname) {
-  if (fl_free_font > (unsigned)FL_FREE_FONT) // already been here
-    return (Fl_Font)fl_free_font;
-  fl_open_display();
-  int xlistsize;
-  char buf[20];
-  if (!xstarname) {
-    strcpy(buf,"-*-"); strcpy(buf+3,fl_encoding);
-    xstarname = buf;
-  }
-  char **xlist = XListFonts(fl_display, xstarname, 10000, &xlistsize);
-  if (!xlist) return (Fl_Font)fl_free_font;
-  qsort(xlist, xlistsize, sizeof(*xlist), ultrasort);
-  int used_xlist = 0;
-  for (int i=0; i<xlistsize;) {
-    int first_xlist = i;
-    const char *p = xlist[i++];
-    char canon[1024];
-    int size = to_canonical(canon, p, sizeof(canon));
-    if (size >= 0) {
-      for (;;) { // find all matching fonts:
-	if (i >= xlistsize) break;
-	const char *q = xlist[i];
-	char this_canon[1024];
-	if (to_canonical(this_canon, q, sizeof(this_canon)) < 0) break;
-	if (strcmp(canon, this_canon)) break;
-	i++;
-      }
-      /*if (*p=='-' || i > first_xlist+1)*/ p = canon;
-    }
-    unsigned int j;
-    for (j = 0;; j++) {
-      /*if (j < FL_FREE_FONT) {
-	// see if it is one of our built-in fonts:
-	// if so, set the list of x fonts, since we have it anyway
-	if (fl_fonts[j].name && !strcmp(fl_fonts[j].name, p)) break;
-      } else */{
-	j = fl_free_font++;
-	if (p == canon) p = strdup(p); else used_xlist = 1;
-	Fl::set_font((Fl_Font)j, p);
-	break;
-      }
-    }
-    if (!fl_fonts[j].xlist) {
-      fl_fonts[j].xlist = xlist+first_xlist;
-      fl_fonts[j].n = -(i-first_xlist);
-      used_xlist = 1;
-    }
-  }
-  if (!used_xlist) XFreeFontNames(xlist);
-  return (Fl_Font)fl_free_font;
-}
-
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-  if (!s->xlist) {
-    fl_open_display();
-    s->xlist = XListFonts(fl_display, s->name, 100, &(s->n));
-    if (!s->xlist) return 0;
-  }
-  int listsize = s->n; if (listsize<0) listsize = -listsize;
-  static int sizes[128];
-  int numsizes = 0;
-  for (int i = 0; i < listsize; i++) {
-    char *q = s->xlist[i];
-    char *d = fl_find_fontsize(q);
-    if (!d) continue;
-    int s = strtol(d,0,10);
-    if (!numsizes || sizes[numsizes-1] < s) {
-      sizes[numsizes++] = s;
-    } else {
-      // insert-sort the new size into list:
-      int n;
-      for (n = numsizes-1; n > 0; n--) if (sizes[n-1] < s) break;
-      if (sizes[n] != s) {
-	for (int m = numsizes; m > n; m--) sizes[m] = sizes[m-1];
-	sizes[n] = s;
-	numsizes++;
-      }
-    }
-  }
-  sizep = sizes;
-  return numsizes;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_set_fonts_xft.cxx
+++ /dev/null
@@ -1,384 +1,0 @@
-//
-// "$Id$"
-//
-// More font utilities for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <X11/Xft/Xft.h>
-
-// This function fills in the fltk font table with all the fonts that
-// are found on the X server.  It tries to place the fonts into families
-// and to sort them so the first 4 in a family are normal, bold, italic,
-// and bold italic.
-
-// Bug: older versions calculated the value for *ap as a side effect of
-// making the name, and then forgot about it. To avoid having to change
-// the header files I decided to store this value in the last character
-// of the font name array.
-#define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1
-
-// turn a stored font name in "fltk format" into a pretty name:
-const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
-  Fl_Fontdesc *f = fl_fonts + fnum;
-  if (!f->fontname[0]) {
-    const char* p = f->name;
-    int type;
-    switch (p[0]) {
-    case 'B': type = FL_BOLD; break;
-    case 'I': type = FL_ITALIC; break;
-    case 'P': type = FL_BOLD | FL_ITALIC; break;
-    default:  type = 0; break;
-    }
-
-  // NOTE: This can cause duplications in fonts that already have Bold or Italic in
-  // their "name". Maybe we need to find a cleverer way?
-    strlcpy(f->fontname, p+1, ENDOFBUFFER);
-    if (type & FL_BOLD) strlcat(f->fontname, " bold", ENDOFBUFFER);
-    if (type & FL_ITALIC) strlcat(f->fontname, " italic", ENDOFBUFFER);
-    f->fontname[ENDOFBUFFER] = (char)type;
-  }
-  if (ap) *ap = f->fontname[ENDOFBUFFER];
-  return f->fontname;
-}
-
-///////////////////////////////////////////////////////////
-#define LOCAL_RAW_NAME_MAX 256
-
-extern "C" {
-// sort returned fontconfig font names
-static int name_sort(const void *aa, const void *bb) {
-  // What should we do here? Just do a string compare for now...
-  // NOTE: This yeilds some oddities - in particular a Blah Bold font will be
-  // listed before Blah...
-  // Also - the fontconfig listing returns some faces that are effectively duplicates
-  // as far as fltk is concerned, e.g. where there are ko or ja variants that we
-  // can't distinguish (since we are not yet fully UTF-*) - should we strip them here?
-  return fl_ascii_strcasecmp(*(char**)aa, *(char**)bb);
-} // end of name_sort
-} // end of extern C section
-
-
-// Read the "pretty" name we have derived from fontconfig then convert
-// it into the format fltk uses internally for Xft names...
-// This is just a mess - I should have tokenised the strings and gone from there,
-// but I really thought this would be easier!
-static void make_raw_name(char *raw, char *pretty)
-{
-  // Input name will be "Some Name:style = Bold Italic" or whatever
-  // The plan is this:
-  // - the first char in the "raw" name becomes either I, B, P or " " for
-  //   italic, bold, bold italic or normal - this seems to be the fltk way...
-
-  char *style = strchr(pretty, ':');
-
-  if (style)
-  {
-    *style = 0; // Terminate "name" string
-    style ++;   // point to start of style section
-  }
-
-  // It is still possible that the "pretty" name has multiple comma separated entries
-  // I've seen this often in CJK fonts, for example... Keep only the first one... This
-  // is not ideal, the CJK fonts often have the name in utf8 in several languages. What
-  // we ought to do is use fontconfig to query the available languages and pick one... But which?
-#if 0 // loop to keep the LAST name entry...
-  char *nm1 = pretty;
-  char *nm2 = strchr(nm1, ',');
-  while(nm2) {
-    nm1 = nm2 + 1;
-    nm2 = strchr(nm1, ',');
-  }
-  raw[0] = ' '; raw[1] = 0; // Default start of "raw name" text
-  strncat(raw, nm1, LOCAL_RAW_NAME_MAX-1); // only copy MAX-1 chars, we have already set cell 0
-  // Ensure raw is terminated, just in case the given name is infeasibly long...
-  raw[LOCAL_RAW_NAME_MAX-1] = 0;
-#else // keep the first remaining name entry
-  char *nm2 = strchr(pretty, ',');
-  if(nm2) *nm2 = 0; // terminate name after first entry
-  raw[0] = ' '; raw[1] = 0; // Default start of "raw name" text
-  strncat(raw, pretty, LOCAL_RAW_NAME_MAX-1); // only copy MAX-1 chars, we have already set cell 0
-  // Ensure raw is terminated, just in case the given name is infeasibly long...
-  raw[LOCAL_RAW_NAME_MAX-1] = 0;
-#endif
-  // At this point, the name is "marked" as regular...
-  if (style)
-  {
-#define PLAIN   0
-#define BOLD    1
-#define ITALIC  2
-#define BITALIC (BOLD | ITALIC)
-
-    int mods = PLAIN;
-    char *last = style + strlen(style) - 2;
-
-    // Now try and parse the style string - look for the "=" sign
-    style = strchr(style, '=');
-    while ((style) && (style < last))
-    {
-      int type;
-      while ((*style == '=') || (*style == ' ') || (*style == '\t') || (*style == ','))
-      {
-        style++; // Start of Style string
-        if ((style >= last) || (*style == 0)) continue;
-      }
-      type = toupper(style[0]);
-      switch (type)
-      {
-      // Things we might see: Regular Normal Bold Italic Oblique (??what??) Medium
-      // Roman Light Demi Sans SemiCondensed SuperBold Book... etc...
-      // Things we actually care about: Bold Italic Oblique SuperBold - Others???
-      case 'I':
-        if (strncasecmp(style, "Italic", 6) == 0)
-        {
-          mods |= ITALIC;
-        }
-        goto NEXT_STYLE;
-
-      case 'B':
-        if (strncasecmp(style, "Bold", 4) == 0)
-        {
-          mods |= BOLD;
-        }
-        goto NEXT_STYLE;
-
-      case 'O':
-        if (strncasecmp(style, "Oblique", 7) == 0)
-        {
-          mods |= ITALIC;
-        }
-        goto NEXT_STYLE;
-
-      case 'S':
-        if (strncasecmp(style, "SuperBold", 9) == 0)
-        {
-          mods |= BOLD;
-        }
-        goto NEXT_STYLE;
-
-      default: // find the next gap
-        goto NEXT_STYLE;
-      } // switch end
-NEXT_STYLE:
-      while ((*style != ' ') && (*style != '\t') && (*style != ','))
-      {
-        style++;
-        if ((style >= last) || (*style == 0)) goto STYLE_DONE;
-      }
-    }
-STYLE_DONE:
-    // Set the "modifier" character in the raw string
-    switch(mods)
-    {
-    case BOLD: raw[0] = 'B';
-      break;
-    case ITALIC: raw[0] = 'I';
-      break;
-    case BITALIC: raw[0] = 'P';
-      break;
-    default: raw[0] = ' ';
-      break;
-    }
-  }
-} // make_raw_name
-
-///////////////////////////////////////////////////////////
-
-static int fl_free_font = FL_FREE_FONT;
-
-// Uses the fontconfig lib to construct a list of all installed fonts.
-// I tried using XftListFonts for this, but the API is tricky - and when
-// I looked at the XftList* code, it calls the Fc* functions anyway, so...
-//
-// Also, for now I'm ignoring the "pattern_name" and just getting everything...
-// AND I don't try and skip the fonts we've already loaded in the defaults.
-// Blimey! What a hack!
-Fl_Font Fl::set_fonts(const char* pattern_name)
-{
-  FcFontSet  *fnt_set;     // Will hold the list of fonts we find
-  FcPattern   *fnt_pattern; // Holds the generic "match all names" pattern
-  FcObjectSet *fnt_obj_set = 0; // Holds the generic "match all objects"
-
-  int j; // loop iterator variable
-  int font_count; // Total number of fonts found to process
-  char **full_list; // The list of font names we build
-
-  if (fl_free_font > FL_FREE_FONT) // already been here
-    return (Fl_Font)fl_free_font;
-
-  fl_open_display(); // Just in case...
-
-  // Make sure fontconfig is ready... is this necessary? The docs say it is
-  // safe to call it multiple times, so just go for it anyway!
-  if (!FcInit())
-  {
-    // What to do? Just return defaults...
-    return FL_FREE_FONT;
-  }
-
-  // Create a search pattern that will match every font name - I think this
-  // does the Right Thing, but am not certain...
-  //
-  // This could possibly be "enhanced" to pay attention to the requested
-  // "pattern_name"?
-  fnt_pattern = FcPatternCreate();
-  fnt_obj_set = FcObjectSetBuild(FC_FAMILY, FC_STYLE, (void *)0);
-
-  // Hopefully, this is a set of all the fonts...
-  fnt_set = FcFontList(0, fnt_pattern, fnt_obj_set);
-
-  // We don't need the fnt_pattern and fnt_obj_set any more, release them
-  FcPatternDestroy(fnt_pattern);
-  FcObjectSetDestroy(fnt_obj_set);
-
-  // Now, if we got any fonts, iterate through them...
-  if (fnt_set)
-  {
-    char *stop;
-    char *start;
-    char *first;
-
-    font_count = fnt_set->nfont; // How many fonts?
-
-    // Allocate array of char*'s to hold the name strings
-    full_list = (char **)malloc(sizeof(char *) * font_count);
-
-    // iterate through all the font patterns and get the names out...
-      for (j = 0; j < font_count; j++)
-      {
-      // NOTE: FcChar8 is a typedef of "unsigned char"...
-      FcChar8 *font; // String to hold the font's name
-
-      // Convert from fontconfig internal pattern to human readable name
-      // NOTE: This WILL malloc storage, so we need to free it later...
-      font = FcNameUnparse(fnt_set->fonts[j]);
-
-      // The returned strings look like this...
-      // Century Schoolbook:style=Bold Italic,fed kursiv,Fett Kursiv,...
-      // So the bit we want is up to the first comma - BUT some strings have
-      // more than one name, separated by, guess what?, a comma...
-      stop = start = first = 0;
-      stop = strchr((char *)font, ',');
-      start = strchr((char *)font, ':');
-      if ((stop) && (start) && (stop < start))
-      {
-        first = stop + 1; // discard first version of name
-        // find first comma *after* the end of the name
-        stop = strchr((char *)start, ',');
-      }
-      else
-      {
-        first = (char *)font; // name is just what was returned
-      }
-      // Truncate the name after the (english) modifiers description
-      // Matt: Actually, there is no guarantee that the *first* description is the English one.
-      // Matt: So we keep the entire description, just in case.
-      //if (stop)
-      //{
-      //  *stop = 0; // Terminate the string at the first comma, if there is one
-      //}
-
-      // Copy the font description into our list
-      if (first == (char *)font)
-      { // The listed name is still OK
-        full_list[j] = (char *)font;
-      }
-      else
-      { // The listed name has been modified
-        full_list[j] = strdup(first);
-        // Free the font name storage
-        free (font);
-      }
-      // replace "style=Regular" so strcmp sorts it first
-      if (start) {
-        char *reg = strstr(full_list[j], "=Regular");
-        if (reg) reg[1]='.';
-      }
-    }
-
-    // Release the fnt_set - we don't need it any more
-    FcFontSetDestroy(fnt_set);
-
-    // Sort the list into alphabetic order
-    qsort(full_list, font_count, sizeof(*full_list), name_sort);
-
-    // Now let us add the names we got to fltk's font list...
-    for (j = 0; j < font_count; j++)
-    {
-      if (full_list[j])
-      {
-        char xft_name[LOCAL_RAW_NAME_MAX];
-        char *stored_name;
-        // Parse the strings into FLTK-XFT style..
-        make_raw_name(xft_name, full_list[j]);
-        // NOTE: This just adds on AFTER the default fonts - no attempt is made
-        // to identify already loaded fonts. Is this bad?
-        stored_name = strdup(xft_name);
-        Fl::set_font((Fl_Font)(j + FL_FREE_FONT), stored_name);
-        fl_free_font ++;
-
-        free(full_list[j]); // release that name from our internal array
-      }
-    }
-    // Now we are done with the list, release it fully
-    free(full_list);
-  }
-  return (Fl_Font)fl_free_font;
-} // ::set_fonts
-////////////////////////////////////////////////////////////////
-
-
-extern "C" {
-static int int_sort(const void *aa, const void *bb) {
-  return (*(int*)aa)-(*(int*)bb);
-}
-}
-
-////////////////////////////////////////////////////////////////
-
-// Return all the point sizes supported by this font:
-// Suprisingly enough Xft works exactly like fltk does and returns
-// the same list. Except there is no way to tell if the font is scalable.
-int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
-  Fl_Fontdesc *s = fl_fonts+fnum;
-  if (!s->name) s = fl_fonts; // empty slot in table, use entry 0
-
-  fl_open_display();
-  XftFontSet* fs = XftListFonts(fl_display, fl_screen,
-                                XFT_FAMILY, XftTypeString, s->name+1,
-				(void *)0,
-                                XFT_PIXEL_SIZE,
-				(void *)0);
-  static int* array = 0;
-  static int array_size = 0;
-  if (fs->nfont >= array_size) {
-    delete[] array;
-    array = new int[array_size = fs->nfont+1];
-  }
-  array[0] = 0; int j = 1; // claim all fonts are scalable
-  for (int i = 0; i < fs->nfont; i++) {
-    double v;
-    if (XftPatternGetDouble(fs->fonts[i], XFT_PIXEL_SIZE, 0, &v) == XftResultMatch) {
-      array[j++] = int(v);
-    }
-  }
-  qsort(array+1, j-1, sizeof(int), int_sort);
-  XftFontSetDestroy(fs);
-  sizep = array;
-  return j;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_shadow_box.cxx
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Shadow box drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-
-#define BW 3
-
-static void fl_shadow_frame(int x, int y, int w, int h, Fl_Color c) {
-  fl_color(FL_DARK3);
-  fl_rectf(x+BW, y+h-BW,  w - BW, BW);
-  fl_rectf(x+w-BW,  y+BW, BW,  h - BW);
-  Fl::set_box_color(c);
-  fl_rect(x,y,w-BW,h-BW);
-}
-
-static void fl_shadow_box(int x, int y, int w, int h, Fl_Color c) {
-  Fl::set_box_color(c);
-  fl_rectf(x+1,y+1,w-2-BW,h-2-BW);
-  fl_shadow_frame(x,y,w,h,FL_GRAY0);
-}
-
-extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
-Fl_Boxtype fl_define_FL_SHADOW_BOX() {
-  fl_internal_boxtype(_FL_SHADOW_FRAME, fl_shadow_frame);
-  fl_internal_boxtype(_FL_SHADOW_BOX, fl_shadow_box);
-  return _FL_SHADOW_BOX;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_shortcut.cxx
+++ /dev/null
@@ -1,501 +1,0 @@
-//
-// "$Id$"
-//
-// Shortcut support routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Code to test and parse fltk shortcut numbers.
-//
-// A shortcut is a keysym or'd with shift flags.  In the simplest
-// sense a shortcut is matched if the shift state is exactly as
-// given and the key returning that keysym is pressed.
-//
-// To make it easier to match some things it is more complex:
-//
-// Only FL_META, FL_ALT, FL_SHIFT, and FL_CTRL must be "off".  A
-// zero in the other shift flags indicates "don't care".
-//
-// It also checks against the first character of Fl::event_text(),
-// and zero for FL_SHIFT means "don't care".
-// This allows punctuation shortcuts like "#" to work (rather than
-// calling it "shift+3" on a US keyboard)
-
-#include <FL/Fl.H>
-#include <FL/Fl_Widget.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_draw.H>
-#include <stdlib.h>
-#include <ctype.h>
-#include "flstring.h"
-#if !defined(WIN32) && !defined(__APPLE__)
-#include <FL/x.H>
-#endif
-
-/**
-  Tests the current event, which must be an FL_KEYBOARD or
-  FL_SHORTCUT, against a shortcut value (described in Fl_Button).
-
-  Not to be confused with Fl_Widget::test_shortcut().
-
-  \return non-zero if there is a match.
-*/
-int Fl::test_shortcut(unsigned int shortcut) {
-  if (!shortcut) return 0;
-
-  unsigned int v = shortcut & FL_KEY_MASK;
-  if (((unsigned)fl_tolower(v))!=v) {
-    shortcut |= FL_SHIFT;
-  }
-
-  int shift = Fl::event_state();
-  // see if any required shift flags are off:
-  if ((shortcut&shift) != (shortcut&0x7fff0000)) return 0;
-  // record shift flags that are wrong:
-  int mismatch = (shortcut^shift)&0x7fff0000;
-  // these three must always be correct:
-  if (mismatch&(FL_META|FL_ALT|FL_CTRL)) return 0;
-
-  unsigned int key = shortcut & FL_KEY_MASK;
-
-  // if shift is also correct, check for exactly equal keysyms:
-  if (!(mismatch&(FL_SHIFT)) && key == (unsigned)Fl::event_key()) return 1;
-
-  // try matching utf8, ignore shift:
-  unsigned int firstChar = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0);
-  if ( ! (FL_CAPS_LOCK&shift) && key==firstChar) return 1;
-
-  // kludge so that Ctrl+'_' works (as opposed to Ctrl+'^_'):
-  if ((shift&FL_CTRL) && key >= 0x3f && key <= 0x5F
-      && firstChar==(key^0x40)) return 1; // firstChar should be within a-z
-  return 0;
-}
-
-// This table must be in numeric order by fltk (X) keysym number:
-struct Keyname {unsigned int key; const char* name;};
-#if defined(WIN32)
-static Keyname table[] = {
-  {' ', "Space"},
-  {FL_BackSpace, "Backspace"},
-  {FL_Tab,	"Tab"},
-  {0xff0b/*XK_Clear*/, "Clear"},
-  {FL_Enter,	"Enter"}, // X says "Enter"
-  {FL_Pause,	"Pause"},
-  {FL_Scroll_Lock, "Scroll_Lock"},
-  {FL_Escape,	"Escape"},
-  {FL_Home,	"Home"},
-  {FL_Left,	"Left"},
-  {FL_Up,	"Up"},
-  {FL_Right,	"Right"},
-  {FL_Down,	"Down"},
-  {FL_Page_Up,	"Page_Up"}, // X says "Prior"
-  {FL_Page_Down,"Page_Down"}, // X says "Next"
-  {FL_End,	"End"},
-  {FL_Print,	"Print"},
-  {FL_Insert,	"Insert"},
-  {FL_Menu,	"Menu"},
-  {FL_Num_Lock,	"Num_Lock"},
-  {FL_KP_Enter,	"KP_Enter"},
-  {FL_Shift_L,	"Shift_L"},
-  {FL_Shift_R,	"Shift_R"},
-  {FL_Control_L,"Control_L"},
-  {FL_Control_R,"Control_R"},
-  {FL_Caps_Lock,"Caps_Lock"},
-  {FL_Meta_L,	"Meta_L"},
-  {FL_Meta_R,	"Meta_R"},
-  {FL_Alt_L,	"Alt_L"},
-  {FL_Alt_R,	"Alt_R"},
-  {FL_Delete,	"Delete"}
-};
-#elif defined(__APPLE__) 
-static Keyname table[] = {
-  //             v - this column may contain UTF-8 characters
-  {' ',         "Space"},
-  {FL_BackSpace,"\xe2\x8c\xab"}, // erase to the left
-  {FL_Tab,	"\xe2\x87\xa5"}, // rightwards arrow to bar
-  {0xff0b,      "\xe2\x8c\xa6"}, // erase to the right
-  {FL_Enter,	"\xe2\x86\xa9"}, // leftwards arrow with hook
-  {FL_Pause,	"Pause"},
-  {FL_Scroll_Lock, "Scroll_Lock"},
-  {FL_Escape,	"\xe2\x90\x9b"},
-  {FL_Home,	"\xe2\x86\x96"}, // north west arrow
-  {FL_Left,	"\xe2\x86\x90"}, // leftwards arrow
-  {FL_Up,	"\xe2\x86\x91"}, // upwards arrow
-  {FL_Right,	"\xe2\x86\x92"}, // rightwards arrow
-  {FL_Down,	"\xe2\x86\x93"}, // downwards arrow
-  {FL_Page_Up,	"\xe2\x87\x9e"}, // upwards arrow with double stroke
-  {FL_Page_Down,"\xe2\x87\x9f"}, // downwards arrow with double stroke
-  {FL_End,	"\xe2\x86\x98"}, // south east arrow
-  {FL_Print,	"Print"},
-  {FL_Insert,	"Insert"},
-  {FL_Menu,	"Menu"},
-  {FL_Num_Lock,	"Num_Lock"},
-  {FL_KP_Enter,	"\xe2\x8c\xa4"}, // up arrow head between two horizontal bars
-  {FL_Shift_L,	"Shift_L"},
-  {FL_Shift_R,	"Shift_R"},
-  {FL_Control_L,"Control_L"},
-  {FL_Control_R,"Control_R"},
-  {FL_Caps_Lock,"\xe2\x87\xaa"}, // upwards white arrow from bar
-  {FL_Meta_L,	"Meta_L"},
-  {FL_Meta_R,	"Meta_R"},
-  {FL_Alt_L,	"Alt_L"},
-  {FL_Alt_R,	"Alt_R"},
-  {FL_Delete,	"\xe2\x8c\xa7"}  // x in a rectangle box
-};
-#endif
-
-/**
-  Get a human-readable string from a shortcut value.
-
-  Unparse a shortcut value as used by Fl_Button or Fl_Menu_Item into
-  a human-readable string like "Alt+N". This only works if the shortcut
-  is a character key or a numbered function key. If the shortcut is
-  zero then an empty string is returned. The return value points at
-  a static buffer that is overwritten with each call.
-
-  \since FLTK 1.3.4 modifier key names can be localized, but key names
-    can not yet be localized. This may be added to a future FLTK version.
-
-  Modifier key names (human-readable shortcut names) can be defined
-  with the following global const char * pointer variables:
-
-   - fl_local_ctrl  => name of FL_CTRL
-   - fl_local_alt   => name of FL_ALT
-   - fl_local_shift => name of FL_SHIFT
-   - fl_local_meta  => name of FL_META
-
-  \code
-    fl_local_ctrl = "Strg";      // German for "Ctrl"
-    fl_local_shift = "Umschalt"; // German for "Shift"
-  \endcode
-
-  The shortcut name will be constructed by adding all modifier names in the
-  order defined above plus the name of the key. A '+' character is added to
-  each modifier name unless it has a trailing '\' or a trailing '+'.
-
-  Example:
-
-    Ctrl+Alt+Shift+Meta+F12
-
-  The default values for modifier key names are as given above for all
-  platforms except Mac OS X. Mac OS X uses graphical characters that represent
-  the typical OS X modifier names in menus, e.g. cloverleaf, saucepan, etc.
-  You may, however, redefine Mac OS X modifier names as well.
-
-  \param [in] shortcut the integer value containing the ascii character or extended keystroke plus modifiers
-  \return a pointer to a static buffer containing human readable text for the shortcut
-  */
-const char* fl_shortcut_label(unsigned int shortcut) {
-  return fl_shortcut_label(shortcut, 0L);
-}
-
-/*
-  This static function adds a modifier key name to a character
-  buffer and returns the pointer behind the modifier name and a
-  trailing '+' character.
-
-  Exceptions:
-   (1) Last character = '\' : remove it, done (don't add '+')
-   (2) Last character = '+' : user added '+', don't add another one
-
-  In case of buffer overflow the modifier key name is replaced with "..."
-  if that fits or not added at all. This should rarely (never) happen.
-*/
-
-static char *add_modifier_key(char *p, const char *end, const char *name) {
-  int ln = strlen(name);
-  if (p+ln > end) {		// string too long
-    if (p+4 <= end) {		// can replace with "..." ?
-      strcpy(p,"...");
-      p += 3;
-    } else
-      return p;
-  } else {
-    strcpy(p,name);
-    p += ln;
-  }
-  if (p[-1] == '\\')		// remove (last) '\' character
-    p--;
-  else if (p[-1] == '+')	// don't add another '+' character
-    {/*empty*/}
-  else				// not a '\' or '+'
-    *p++ = '+';			// add a '+' character
-  return p;
-}
-
-/** 
-  Get a human-readable string from a shortcut value.
-
-  \param [in] shortcut the integer value containing the ascii character or extended keystroke plus modifiers
-  \param [in] eom if this pointer is set, it will receive a pointer to the end of the modifier text
-  \return a pointer to a static buffer containing human readable text for the shortcut
-
-  \see fl_shortcut_label(unsigned int shortcut)
-*/
-
-const char* fl_shortcut_label(unsigned int shortcut, const char **eom) {
-  static char buf[80];
-  char *p = buf;
-  char *end = &buf[sizeof(buf)-20]; // account for key name (max. ~10 + x)
-  if (eom) *eom = p;
-  if (!shortcut) {*p = 0; return buf;}
-  // fix upper case shortcuts
-  unsigned int key = shortcut & FL_KEY_MASK;
-  if (((unsigned)fl_tolower(key)) != key) {
-    shortcut |= FL_SHIFT;
-  }
-
-  // Add modifier key names.
-  // Note: if necessary we could change the order here depending on the platform.
-  // However, as discussed in fltk.development, the order appears to be the
-  // same on all platforms, with exceptions in _some_ Linux applications.
-
-  if (shortcut & FL_CTRL)  {p = add_modifier_key(p, end, fl_local_ctrl);}
-  if (shortcut & FL_ALT)   {p = add_modifier_key(p, end, fl_local_alt);}
-  if (shortcut & FL_SHIFT) {p = add_modifier_key(p, end, fl_local_shift);}
-  if (shortcut & FL_META)  {p = add_modifier_key(p, end, fl_local_meta);}
-  if (eom) *eom = p;
-
-  // add key name
-#if defined(WIN32) || defined(__APPLE__) // if not X
-  if (key >= FL_F && key <= FL_F_Last) {
-    *p++ = 'F';
-    if (key > FL_F+9) *p++ = (key-FL_F)/10+'0';
-    *p++ = (key-FL_F)%10 + '0';
-  } else {
-    // binary search the table for a match:
-    int a = 0;
-    int b = sizeof(table)/sizeof(*table);
-    while (a < b) {
-      int c = (a+b)/2;
-      if (table[c].key == key) {
-        if (p > buf) {
-          strcpy(p,table[c].name); 
-          return buf;
-        } else {
-          const char *sp = table[c].name;
-          if (eom) *eom = sp;
-          return sp;
-        }
-      }
-      if (table[c].key < key) a = c+1;
-      else b = c;
-    }
-    if (key >= FL_KP && key <= FL_KP_Last) {
-      // mark keypad keys with KP_ prefix
-      strcpy(p,"KP_"); p += 3;
-      *p++ = uchar(key & 127);
-    } else {
-      // if none found, use the keystroke as a match:
-      p += fl_utf8encode(fl_toupper(key), p); 
-    }
-  }
-  *p = 0;
-  return buf;
-#else
-  const char* q;
-  if (key == FL_Enter || key == '\r') q="Enter";  // don't use Xlib's "Return":
-  else if (key > 32 && key < 0x100) q = 0;
-  else q = XKeysymToString(key);
-  if (!q) {
-    p += fl_utf8encode(fl_toupper(key), p); 
-    *p = 0; 
-    return buf;
-  }
-  if (p > buf) {
-    strcpy(p,q); 
-    return buf;
-  } else {
-    if (eom) *eom = q;
-    return q;
-  }
-#endif
-}
-
-// Emulation of XForms named shortcuts
-/**
-  Emulation of XForms named shortcuts.
-
-  Converts ascii shortcut specifications (eg. "^c") 
-  into the FLTK integer equivalent (eg. FL_CTRL+'c')
-
-  These ascii characters are used to specify the various keyboard modifier keys:
-  \verbatim
-   # - Alt
-   + - Shift
-   ^ - Control
-   ! - Meta
-   @ - Command (Ctrl on linux/win, Meta on OSX)
-  \endverbatim
-
-  These special characters can be combined to form chords of modifier
-  keys. (See 'Remarks' below)
-
-  After the optional modifier key prefixes listed above, one can either
-  specify a single keyboard character to use as the shortcut, or a
-  numeric sequence in hex, decimal or octal.
-
-  Examples:
-  \verbatim
-   "c"      -- Uses 'c' as the shortcut
-   "#^c"    -- Same as FL_ALT|FL_CTRL|'c'
-   "#^!c"   -- Same as FL_ALT|FL_CTRL|FL_META|'c'
-   "@c"     -- Same as FL_COMMAND|'c' (see FL_COMMAND for platform specific behavior)
-   "0x63"   -- Same as "c" (hex 63=='c')
-   "99"     -- Same as "c" (dec 99=='c')
-   "0143"   -- Same as "c" (octal 0143=='c')
-   "^0x63"  -- Same as (FL_CTRL|'c'), or (FL_CTRL|0x63)
-   "^99"    -- Same as (FL_CTRL|'c'), or (FL_CTRL|99)
-   "^0143"  -- Same as (FL_CTRL|'c'), or (FL_CTRL|0143)
-  \endverbatim
-
-  \remarks
-      Due to XForms legacy, there are some odd things to consider
-      when using the modifier characters.
-  \remarks
-      (1) You can use the special modifier keys for chords *only*
-      if the modifiers are provided in this order: #, +, ^, !, \@.
-      Other ordering can yield undefined results.
-  \remarks
-      So for instance, Ctrl-Alt-c must be specified as "#^c" (and not
-      "^#c"), due to the above ordering rule.
-  \remarks
-      (2) If you want to make a shortcut that uses one of the special
-      modifier characters (as the character being modified), then to
-      avoid confusion, specify the numeric equivalent, e.g.
-  \remarks
-  \verbatim
-   If you want..                    Then use..
-   -----------------------------    ------------------------------
-   '#' as the shortcut..            "0x23"  (instead of just "#").
-   '+' as the shortcut..            "0x2b"  (instead of just "+").
-   '^' as the shortcut..            "0x5e"  (instead of just "^").
-   Alt-+ as the shortcut..          "#0x2b" (instead of "#+").
-   Alt-^ as the shortcut..          "#0x5e" (instead of "#^").
-   ..etc..
-  \endverbatim
-  \remarks
-      As a general rule that's easy to remember, unless the shortcut
-      key to be modified is a single alpha-numeric character [A-Z,a-z,0-9),
-      it's probably best to use the numeric equivalents.
-
-  \todo Fix these silly legacy issues in a future release
-        to support more predictable behavior for the modifier keys.
-*/
-unsigned int fl_old_shortcut(const char* s) {
-  if (!s || !*s) return 0;
-  if (s[1]==0 && strchr("@!",s[0])) return s[0]; // maintain legacy behavior for "!" and "@"
-  unsigned int n = 0;
-  if (*s == '#') {n |= FL_ALT; s++;}
-  if (*s == '+') {n |= FL_SHIFT; s++;}
-  if (*s == '^') {n |= FL_CTRL; s++;}
-  if (*s == '!') {n |= FL_META; s++;} 	 // added in 1.3.3
-  if (*s == '@') {n |= FL_COMMAND; s++;} // added in 1.3.3
-  if (*s && s[1]) return n | (int)strtol(s,0,0); // allow 0xf00 to get any key
-  return n | *s;
-}
-
-// Tests for &x shortcuts in button labels:
-
-/** Returns the Unicode value of the '&x' shortcut in a given text.
-
-  The given text \p t (usually a widget's label or a menu text) is
-  searched for a '&x' shortcut label, and if found, the Unicode
-  value (code point) of the '&x' shortcut is returned.
-
-  \param t text or label to search for '&x' shortcut.
-
-  \return Unicode (UCS-4) value of shortcut in \p t or 0.
-
-  \note Internal use only.
-*/
-unsigned int Fl_Widget::label_shortcut(const char *t) {
-  if (!t) return 0;
-  for (;;) {
-    if (*t==0) return 0;
-    if (*t=='&') {
-      unsigned int s = fl_utf8decode(t+1, 0, 0);
-      if (s==0) return 0;
-      else if (s==(unsigned int)'&') t++;
-      else return s;
-    }
-    t++;
-  }
-}
-
-/** Returns true if the given text \p t contains the entered '&x' shortcut.
-
-  This method must only be called in handle() methods or callbacks after
-  a keypress event (usually FL_KEYDOWN or FL_SHORTCUT). The given text
-  \p t (usually a widget's label or menu text) is searched for a '&x'
-  shortcut, and if found, this is compared with the entered key value.
-
-  Fl::event_text() is used to get the entered key value.
-  Fl::event_state() is used to get the Alt modifier, if \p require_alt
-  is true.
-
-  \param t text or label to search for '&x' shortcut.
-  \param require_alt if true: match only if Alt key is pressed.
-
-  \return true, if the entered text matches the '&x' shortcut in \p t
-	  false (0) otherwise.
-
-  \note Internal use only.
-*/
-int Fl_Widget::test_shortcut(const char *t, const bool require_alt) {
-  if (!t) return 0;
-  // for menubars etc. shortcuts must work only if the Alt modifier is pressed
-  if (require_alt && Fl::event_state(FL_ALT)==0) return 0;
-  unsigned int c = fl_utf8decode(Fl::event_text(), Fl::event_text()+Fl::event_length(), 0);
-#ifdef __APPLE__
-  // this line makes underline shortcuts work the same way they do on MSWindow
-  // and Linux. 
-  if (c && Fl::event_state(FL_ALT)) 
-    c = Fl::event_key();
-#endif
-  if (!c) return 0;
-  unsigned int ls = label_shortcut(t);
-  if (c == ls)
-    return 1;
-#ifdef __APPLE__
-  // On OS X, we need to simulate the upper case keystroke as well
-  if (Fl::event_state(FL_ALT) && c<128 && isalpha(c) && (unsigned)toupper(c)==ls)
-    return 1;
-#endif
-  return 0;
-}
-
-/** Returns true if the widget's label contains the entered '&x' shortcut.
-
-  This method must only be called in handle() methods or callbacks after
-  a keypress event (usually FL_KEYDOWN or FL_SHORTCUT).
-  The widget's label is searched for a '&x'
-  shortcut, and if found, this is compared with the entered key value.
-
-  Fl::event_text() is used to get the entered key value.
-
-  \return true, if the entered text matches the widget's'&x' shortcut,
-	  false (0) otherwise.
-
-  \note Internal use only.
-*/
-
-int Fl_Widget::test_shortcut() {
-  if (!(flags()&SHORTCUT_LABEL)) return 0;
-  return test_shortcut(label());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_show_colormap.cxx
+++ /dev/null
@@ -1,153 +1,0 @@
-//
-// "$Id$"
-//
-// Colormap color selection dialog for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Single_Window.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_show_colormap.H>
-#include <config.h>
-
-#define BOXSIZE 14
-#define BORDER 4
-
-/** 
- This widget creates a modal window for selecting a color from the colormap.
- Pretty much unchanged from Forms.
-*/
-class ColorMenu : public Fl_Window {
-  Fl_Color initial;
-  Fl_Color which, previous;
-  int done;
-  void drawbox(Fl_Color);
-  void draw();
-  int handle(int);
-public:
-  ColorMenu(Fl_Color oldcol);
-  Fl_Color run();
-};
-
-ColorMenu::ColorMenu(Fl_Color oldcol) :
-  Fl_Window(BOXSIZE*8+1+2*BORDER, BOXSIZE*32+1+2*BORDER) {
-  clear_border();
-  set_modal();
-  initial = which = oldcol;
-}
-
-void ColorMenu::drawbox(Fl_Color c) {
-  if (c > 255) return;
-  int X = (c%8)*BOXSIZE+BORDER;
-  int Y = (c/8)*BOXSIZE+BORDER;
-#if BORDER_WIDTH < 3
-  if (c == which) fl_draw_box(FL_DOWN_BOX, X+1, Y+1, BOXSIZE-1, BOXSIZE-1, c);
-  else fl_draw_box(FL_BORDER_BOX, X, Y, BOXSIZE+1, BOXSIZE+1, c);
-#else
-  fl_draw_box(c == which ? FL_DOWN_BOX : FL_BORDER_BOX,
-	      X, Y, BOXSIZE+1, BOXSIZE+1, c);
-#endif
-}
-
-void ColorMenu::draw() {
-  if (damage() != FL_DAMAGE_CHILD) {
-    fl_draw_box(FL_UP_BOX,0,0,w(),h(),color());
-    for (int c = 0; c < 256; c++) drawbox((Fl_Color)c);
-  } else {
-    drawbox(previous);
-    drawbox(which);
-  }
-  previous = which;
-}
-
-int ColorMenu::handle(int e) {
-  Fl_Color c = which;
-  switch (e) {
-  case FL_PUSH:
-  case FL_DRAG: {
-    int X = (Fl::event_x_root() - x() - BORDER);
-    if (X >= 0) X = X/BOXSIZE;
-    int Y = (Fl::event_y_root() - y() - BORDER);
-    if (Y >= 0) Y = Y/BOXSIZE;
-    if (X >= 0 && X < 8 && Y >= 0 && Y < 32)
-      c = 8*Y + X;
-    else
-      c = initial;
-    } break;
-  case FL_RELEASE:
-    done = 1;
-    return 1;
-  case FL_KEYBOARD:
-    switch (Fl::event_key()) {
-    case FL_Up: if (c > 7) c -= 8; break;
-    case FL_Down: if (c < 256-8) c += 8; break;
-    case FL_Left: if (c > 0) c--; break;
-    case FL_Right: if (c < 255) c++; break;
-    case FL_Escape: which = initial; done = 1; return 1;
-    case FL_KP_Enter:
-    case FL_Enter: done = 1; return 1;
-    default: return 0;
-    }
-    break;
-  default:
-    return 0;
-  }
-  if (c != which) {
-    which = (Fl_Color)c; damage(FL_DAMAGE_CHILD);
-    int bx = (c%8)*BOXSIZE+BORDER;
-    int by = (c/8)*BOXSIZE+BORDER;
-    int px = x();
-    int py = y();
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-    if (px < scr_x) px = scr_x;
-    if (px+bx+BOXSIZE+BORDER >= scr_x+scr_w) px = scr_x+scr_w-bx-BOXSIZE-BORDER;
-    if (py < scr_y) py = scr_y;
-    if (py+by+BOXSIZE+BORDER >= scr_y+scr_h) py = scr_y+scr_h-by-BOXSIZE-BORDER;
-    if (px+bx < BORDER) px = BORDER-bx;
-    if (py+by < BORDER) py = BORDER-by;
-    position(px,py);
-  }
-  return 1;
-}
-
-extern char fl_override_redirect; // hack for menus
-
-#ifdef _MSC_VER
-#pragma optimize("a",off) // needed to get the done check to work
-#endif
-Fl_Color ColorMenu::run() {
-  if (which > 255) {
-    position(Fl::event_x_root()-w()/2, Fl::event_y_root()-y()/2);
-  } else {
-    position(Fl::event_x_root()-(initial%8)*BOXSIZE-BOXSIZE/2-BORDER,
-	     Fl::event_y_root()-(initial/8)*BOXSIZE-BOXSIZE/2-BORDER);
-  }
-  show();
-  Fl::grab(*this);
-  done = 0;
-  while (!done) Fl::wait();
-  Fl::grab(0);
-  return which;
-}
-
-Fl_Color fl_show_colormap(Fl_Color oldcol) {
-  ColorMenu m(oldcol);
-  return m.run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_symbols.cxx
+++ /dev/null
@@ -1,705 +1,0 @@
-//
-// "$Id$"
-//
-// Symbol drawing code for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// These are small graphics drawn by the normal label-drawing
-// code when the string starts with an '@' sign.
-
-// Adapted from original code written by:
-
-// Written by Mark Overmars
-// Version 2.1 a
-// Date: Oct  2, 1992
-
-#include <FL/Fl.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-#include "flstring.h"
-
-typedef struct {
-  const char *name;
-  void (*drawit)(Fl_Color);
-  char scalable;
-  char notempty;
-} SYMBOL;
-
-#define MAXSYMBOL       211
-   /* Maximal number of symbols in table. Only half of them are
-      used. Should be prime. */
-
-static SYMBOL symbols[MAXSYMBOL];      /* The symbols */
-static int symbnumb = -1;              /* Their number */
-
-static int find(const char *name) {
-// returns hash entry if it exists, or first empty slot:
-  int pos = name[0] ? (
-    name[1] ? (
-      name[2] ? 71*name[0]+31*name[1]+name[2] : 31*name[0]+name[1]
-    ) :
-      name[0]
-  ) : 0;
-  pos %= MAXSYMBOL;
-  int hh2 = name[0] ? (
-    (name[1]) ? 51*name[0]+3*name[1] : 3*name[0]
-    ) : 1;
-  hh2 %= MAXSYMBOL; if (!hh2) hh2 = 1;
-  for (;;) {
-    if (!symbols[pos].notempty) return pos;
-    if (!strcmp(symbols[pos].name,name)) return pos;
-    pos = (pos + hh2) % MAXSYMBOL;
-  }
-}
-
-static void fl_init_symbols(void);
-
-/**************** The routines seen by the user *************************/
-
-/**
-  Adds a symbol to the system.
-  \param[in] name     name of symbol (without the "@")
-  \param[in] drawit   function to draw symbol
-  \param[in] scalable set to 1 if \p drawit uses scalable vector drawing
-  \returns 1 on success, 0 on failure
-  */
-int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable)
-{
-  fl_init_symbols();
-  int pos;
-  if (symbnumb > MAXSYMBOL / 2) return 0;	// table is full
-  pos = find(name);
-  symbols[pos].name = name;
-  symbols[pos].drawit = drawit;
-  symbols[pos].notempty = 1;
-  symbols[pos].scalable = scalable;
-  symbnumb++;
-  return 1;
-}
-
-int fl_return_arrow(int x,int y,int w,int h);
-
-/**
-  Draw the named symbol in the given rectangle using the given color
-  \param[in] label name of symbol
-  \param[in] x,y   position of symbol
-  \param[in] w,h   size of symbol
-  \param[in] col   color of symbox
-  \returns 1 on success, 0 on failure
-  */
-// provided for back compatibility:
-int fl_draw_symbol(const char *label,int x,int y,int w,int h,Fl_Color col) {  
-  const char *p = label;
-  if (*p++ != '@') return 0;
-  fl_init_symbols();
-  int equalscale = 0;
-  if (*p == '#') {equalscale = 1; p++;}
-  if (*p == '-' && p[1]>='1' && p[1]<='9') {
-    int n = p[1]-'0';
-    x += n; y += n; w -= 2*n; h -= 2*n;
-    p += 2;
-  } else if (*p == '+' && p[1]>='1' && p[1]<='9') {
-    int n = p[1]-'0';
-    x -= n; y -= n; w += 2*n; h += 2*n;
-    p += 2;
-  }
-  if (w < 10) {x -= (10-w)/2; w = 10;}
-  if (h < 10) {y -= (10-h)/2; h = 10;}
-  w = (w-1)|1; h = (h-1)|1;
-  char flip_x = 0, flip_y = 0;
-  if (*p=='$') {
-    flip_x = 1;
-    p++;
-  }
-  if (*p=='%') {
-    flip_y = 1;
-    p++;
-  }
-  int rotangle;
-  switch (*p++) {
-  case '0':
-    rotangle = 1000*(p[1]-'0') + 100*(p[2]-'0') + 10*(p[3]-'0');
-    p += 4;
-    break;
-  case '1': rotangle = 2250; break;
-  case '2': rotangle = 2700; break;
-  case '3': rotangle = 3150; break;
-  case '4': rotangle = 1800; break;
-  case '5':
-  case '6': rotangle = 0; break;
-  case '7': rotangle = 1350; break;
-  case '8': rotangle =  900; break;
-  case '9': rotangle =  450; break;
-  default: rotangle = 0; p--; break;
-  }
-  int pos = find(p);
-  if (!symbols[pos].notempty) return 0;
-  if (symbols[pos].scalable == 3) { // kludge to detect return arrow
-    fl_return_arrow(x,y,w,h);
-    return 1;
-  }
-  fl_push_matrix();
-  fl_translate(x+w/2,y+h/2);
-  if (symbols[pos].scalable) {
-    if (equalscale) {if (w<h) h = w; else w = h;}
-    fl_scale(0.5*w, 0.5*h);
-    fl_rotate(rotangle/10.0);
-    if (flip_x) fl_scale(-1.0, 1.0);
-    if (flip_y) fl_scale(1.0, -1.0);
-  }
-  (symbols[pos].drawit)(col);
-  fl_pop_matrix();
-  return 1;
-}
-
-/******************** THE DEFAULT SYMBOLS ****************************/
-
-/* Some help stuff */
-
-#define BP fl_begin_polygon()
-#define EP fl_end_polygon()
-#define BCP fl_begin_complex_polygon()
-#define ECP fl_end_complex_polygon()
-#define BL fl_begin_line()
-#define EL fl_end_line()
-#define BC fl_begin_loop()
-#define EC fl_end_loop()
-#define vv(x,y) fl_vertex(x,y)
-
-//for the outline color
-static void set_outline_color(Fl_Color c) {
-  fl_color(fl_darker(c));
-}
-
-static void rectangle(double x,double y,double x2,double y2,Fl_Color col) {
-  fl_color(col);
-  BP; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EP;
-  set_outline_color(col);
-  BC; vv(x,y); vv(x2,y); vv(x2,y2); vv(x,y2); EC;
-}
-
-/* The drawing routines */
-
-static void draw_fltk(Fl_Color col) 
-{
-  fl_color(col);
-  // F fill
-  BCP; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
-  vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
-  vv(-1.8, 0.5); vv(-2.0, 0.5); ECP;
-  // L fill
-  BCP; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
-  vv(0.0, 0.5); vv(-1.0, 0.5); ECP;
-  // T outline
-  BCP; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
-  vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); ECP;
-  // K outline
-  BCP; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
-  vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
-  vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); ECP;
-  set_outline_color(col);
-  // F outline
-  BC; vv(-2.0, -0.5); vv(-1.0, -0.5); vv(-1.0, -0.3); vv(-1.8, -0.3);
-  vv(-1.8, -0.1); vv(-1.2, -0.1); vv(-1.2, 0.1); vv(-1.8, 0.1);
-  vv(-1.8, 0.5); vv(-2.0, 0.5); EC;
-  // L outline
-  BC; vv(-1.0, -0.5); vv(-0.8, -0.5); vv(-0.8, 0.3); vv(0.0, 0.3);
-  vv(0.0, 0.5); vv(-1.0, 0.5); EC;
-  // T outline
-  BC; vv(-0.1, -0.5); vv(1.1, -0.5); vv(1.1, -0.3); vv(0.6, -0.3);
-  vv(0.6, 0.5); vv(0.4, 0.5); vv(0.4, -0.3); vv(-0.1, -0.3); EC;
-  // K outline
-  BC; vv(1.1, -0.5); vv(1.3, -0.5); vv(1.3, -0.15); vv(1.70, -0.5);
-  vv(2.0, -0.5); vv(1.43, 0.0); vv(2.0, 0.5); vv(1.70, 0.5);
-  vv(1.3, 0.15); vv(1.3, 0.5); vv(1.1, 0.5); EC;
-}
-
-static void draw_search(Fl_Color col) 
-{
-  fl_color(col);
-  BP; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EP;
-  set_outline_color(col);
-  fl_line_style(FL_SOLID, 3, 0);
-  BC; fl_circle(.2, -.2, .6); EC;
-  fl_line_style(FL_SOLID, 1, 0);
-  BC; vv(-.4, .13); vv(-1.0, .73); vv(-.73, 1.0); vv(-.13, .4); EC;
-}
-
-static void draw_arrow1(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,-0.4); EP;
-  BP; vv(0.0,0.8); vv(0.8,0.0); vv(0.0,-0.8); vv(0.0,-0.4); vv(0.0,0.4); EP;
-  set_outline_color(col);
-  BC; vv(-0.8,-0.4); vv(-0.8,0.4); vv(0.0,0.4); vv(0.0,0.8); vv(0.8,0.0);
-      vv(0.0,-0.8); vv(0.0,-0.4); EC;
-}
-
-static void draw_arrow1bar(Fl_Color col)
-{
-  draw_arrow1(col);
-  rectangle(.6,-.8,.9,.8,col);
-}
-
-static void draw_arrow2(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(-0.3,0.8); vv(0.50,0.0); vv(-0.3,-0.8); EC;
-}
-
-static void draw_arrow3(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
-  BP; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
-  BC; vv(-0.7,0.8); vv(0.1,0.0); vv(-0.7,-0.8); EC;
-}
-
-static void draw_arrowbar(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EP;
-  BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
-}
-
-static void draw_arrowbox(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EP;
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  set_outline_color(col);
-  BC; vv(0.2,0.8); vv(0.6,0.8); vv(0.6,-0.8); vv(0.2,-0.8); EC;
-  BC; vv(-0.6,0.8); vv(0.2,0.0); vv(-0.6,-0.8); EC;
-}
-
-static void draw_bararrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EP;
-  BP; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(0.1,0.8); vv(0.9,0.0); vv(0.1,-0.8); EC;
-  BC; vv(-0.5,0.8); vv(-0.1,0.8); vv(-0.1,-0.8); vv(-0.5,-0.8); EC;
-}
-
-static void draw_doublebar(Fl_Color col) { 
-  rectangle(-0.6,-0.8,-.1,.8,col);
-  rectangle(.1,-0.8,.6,.8,col); 
-}
-
-static void draw_arrow01(Fl_Color col)
-  { fl_rotate(180); draw_arrow1(col); }
-
-static void draw_arrow02(Fl_Color col)
-  { fl_rotate(180); draw_arrow2(col); }
-
-static void draw_arrow03(Fl_Color col)
-  { fl_rotate(180); draw_arrow3(col); }
-
-static void draw_0arrowbar(Fl_Color col)
-  { fl_rotate(180); draw_arrowbar(col); }
-
-static void draw_0arrowbox(Fl_Color col)
-  { fl_rotate(180); draw_arrowbox(col); }
-
-static void draw_0bararrow(Fl_Color col)
-  { fl_rotate(180); draw_bararrow(col); }
-
-static void draw_doublearrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.35,-0.4); vv(-0.35,0.4); vv(0.35,0.4); vv(0.35,-0.4); EP;
-  BP; vv(0.15,0.8); vv(0.95,0.0); vv(0.15,-0.8); EP;
-  BP; vv(-0.15,0.8); vv(-0.95,0.0); vv(-0.15,-0.8); EP;
-  set_outline_color(col);
-  BC; vv(-0.15,0.4); vv(0.15,0.4); vv(0.15,0.8); vv(0.95,0.0);
-      vv(0.15,-0.8); vv(0.15,-0.4); vv(-0.15,-0.4); vv(-0.15,-0.8);
-      vv(-0.95,0.0); vv(-0.15,0.8); EC;
-}
-
-static void draw_arrow(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EP;
-  BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
-  set_outline_color(col);
-  BL; vv(-1.0,0.0); vv(0.65,0.0); EL;
-  BC; vv(0.65,0.1); vv(1.0,0.0); vv(0.65,-0.1); EC;
-}
-
-static void draw_square(Fl_Color col)
-  { rectangle(-1,-1,1,1,col); }
-
-static void draw_circle(Fl_Color col) {
-  fl_color(col); BP; fl_circle(0,0,1); EP;
-  set_outline_color(col);
-  BC; fl_circle(0,0,1); EC;
-}
-
-static void draw_line(Fl_Color col)
-  { fl_color(col); BL; vv(-1.0,0.0); vv(1.0,0.0); EL; }
-
-static void draw_plus(Fl_Color col)
-{
-  fl_color(col);
-  BP; vv(-0.9,-0.15); vv(-0.9,0.15); vv(0.9,0.15); vv(0.9,-0.15); EP;
-  BP; vv(-0.15,-0.9); vv(-0.15,0.9); vv(0.15,0.9); vv(0.15,-0.9); EP;
-  set_outline_color(col);
-  BC;
-  vv(-0.9,-0.15); vv(-0.9,0.15); vv(-0.15,0.15); vv(-0.15,0.9);
-  vv(0.15,0.9); vv(0.15,0.15); vv(0.9,0.15); vv(0.9,-0.15);
-  vv(0.15,-0.15); vv(0.15,-0.9); vv(-0.15,-0.9); vv(-0.15,-0.15);
-  EC;
-}
-
-static void draw_uparrow(Fl_Color) {
-  fl_color(FL_LIGHT3);
-  BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
-  fl_color(FL_DARK3);
-  BL; vv(-.8,.8); vv(.8, 0); EL;
-}
-
-static void draw_downarrow(Fl_Color) {
-  fl_color(FL_DARK3);
-  BL; vv(-.8,.8); vv(-.8,-.8); vv(.8,0); EL;
-  fl_color(FL_LIGHT3);
-  BL; vv(-.8,.8); vv(.8, 0); EL;
-}
-
-static void draw_menu(Fl_Color col)
-{
-  rectangle(-0.65, 0.85, 0.65, -0.25, col);
-  rectangle(-0.65, -0.6, 0.65, -1.0, col);
-}
-
-// Standard UI icons...
-static void draw_filenew(Fl_Color c) {
-  fl_color(c);
-  BCP;
-    vv(-0.7, -1.0);
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  ECP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.7, -1.0);
-    vv(0.1, -1.0);
-    vv(0.1, -0.4);
-    vv(0.7, -0.4);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  EC;
-
-  BL;
-    vv(0.1, -1.0);
-    vv(0.7, -0.4);
-  EL;
-}
-
-static void draw_fileopen(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-1.0, -0.7);
-    vv(-0.9, -0.8);
-    vv(-0.4, -0.8);
-    vv(-0.3, -0.7);
-    vv(0.6, -0.7);
-    vv(0.6, 0.7);
-    vv(-1.0, 0.7);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-1.0, -0.7);
-    vv(-0.9, -0.8);
-    vv(-0.4, -0.8);
-    vv(-0.3, -0.7);
-    vv(0.6, -0.7);
-    vv(0.6, 0.7);
-    vv(-1.0, 0.7);
-  EC;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-1.0, 0.7);
-    vv(-0.6, -0.3);
-    vv(1.0, -0.3);
-    vv(0.6, 0.7);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-1.0, 0.7);
-    vv(-0.6, -0.3);
-    vv(1.0, -0.3);
-    vv(0.6, 0.7);
-  EC;
-}
-
-static void draw_filesave(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-0.9, -1.0);
-    vv(0.9, -1.0);
-    vv(1.0, -0.9);
-    vv(1.0, 0.9);
-    vv(0.9, 1.0);
-    vv(-0.9, 1.0);
-    vv(-1.0, 0.9);
-    vv(-1.0, -0.9);
-  EP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-0.7, -1.0);
-    vv(0.7, -1.0);
-    vv(0.7, -0.4);
-    vv(-0.7, -0.4);
-  EP;
-
-  BP;
-    vv(-0.7, 0.0);
-    vv(0.7, 0.0);
-    vv(0.7, 1.0);
-    vv(-0.7, 1.0);
-  EP;
-
-  fl_color(c);
-  BP;
-    vv(-0.5, -0.9);
-    vv(-0.3, -0.9);
-    vv(-0.3, -0.5);
-    vv(-0.5, -0.5);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.9, -1.0);
-    vv(0.9, -1.0);
-    vv(1.0, -0.9);
-    vv(1.0, 0.9);
-    vv(0.9, 1.0);
-    vv(-0.9, 1.0);
-    vv(-1.0, 0.9);
-    vv(-1.0, -0.9);
-  EC;
-}
-
-static void draw_filesaveas(Fl_Color c) {
-  draw_filesave(c);
-
-  fl_color(fl_color_average(c, FL_WHITE, 0.25f));
-  BP;
-    vv(0.6, -0.8);
-    vv(1.0, -0.4);
-    vv(0.0, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.2);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(0.6, -0.8);
-    vv(1.0, -0.4);
-    vv(0.0, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.2);
-  EC;
-
-  BP;
-    vv(-0.1, 0.6);
-    vv(-0.4, 0.6);
-    vv(-0.4, 0.3);
-  EP;
-}
-
-static void draw_fileprint(Fl_Color c) {
-  fl_color(c);
-  BP;
-    vv(-0.8, 0.0);
-    vv(0.8, 0.0);
-    vv(1.0, 0.2);
-    vv(1.0, 1.0);
-    vv(-1.0, 1.0);
-    vv(-1.0, 0.2);
-  EP;
-
-  fl_color(fl_color_average(c, FL_WHITE, 0.25f));
-  BP;
-    vv(-0.6, 0.0);
-    vv(-0.6, -1.0);
-    vv(0.6, -1.0);
-    vv(0.6, 0.0);
-  EP;
-
-  fl_color(fl_lighter(c));
-  BP;
-    vv(-0.6, 0.6);
-    vv(0.6, 0.6);
-    vv(0.6, 1.0);
-    vv(-0.6, 1.0);
-  EP;
-
-  fl_color(fl_darker(c));
-  BC;
-    vv(-0.8, 0.0);
-    vv(-0.6, 0.0);
-    vv(-0.6, -1.0);
-    vv(0.6, -1.0);
-    vv(0.6, 0.0);
-    vv(0.8, 0.0);
-    vv(1.0, 0.2);
-    vv(1.0, 1.0);
-    vv(-1.0, 1.0);
-    vv(-1.0, 0.2);
-  EC;
-
-  BC;
-    vv(-0.6, 0.6);
-    vv(0.6, 0.6);
-    vv(0.6, 1.0);
-    vv(-0.6, 1.0);
-  EC;
-}
-
-static void draw_round_arrow(Fl_Color c, float da=5.0) {
-  double a, r, dr1=0.005, dr2=0.015;
-  int i, j;
-  for (j=0; j<2; j++) {
-    if (j&1) {
-      fl_color(c);
-      set_outline_color(c);
-      BC;
-    } else {
-      fl_color(c);
-      BCP;
-    }
-    vv(-0.1, 0.0);
-    vv(-1.0, 0.0);
-    vv(-1.0, 0.9);
-    for (i=27, a=140.0, r=1.0; i>0; i--, a-=da, r-=dr1) {
-      double ar = a/180.0 * M_PI;
-      vv(cos(ar)*r, sin(ar)*r);
-    }
-    for (i=27; i>=0; a+=da, i--, r-=dr2) {
-      double ar = a/180.0 * M_PI;
-      vv(cos(ar)*r, sin(ar)*r);
-    }
-    if (j&1) {
-      EC;
-    } else {
-      ECP;
-    }
-  }
-}
-
-static void draw_refresh(Fl_Color c) {
-  draw_round_arrow(c);
-  fl_rotate(180.0);
-  draw_round_arrow(c);
-  fl_rotate(-180.0);
-}
-
-static void draw_reload(Fl_Color c) {
-  fl_rotate(-135.0);
-  draw_round_arrow(c, 10);
-  fl_rotate(135.0);
-}
-
-static void draw_undo(Fl_Color c) {
-  fl_translate(0.0, 0.2);
-  fl_scale(1.0, -1.0);
-  draw_round_arrow(c, 6);
-  fl_scale(1.0, -1.0);
-  fl_translate(0.0, -0.2);
-}
-
-static void draw_redo(Fl_Color c) {
-  fl_scale(-1.0, 1.0);
-  draw_undo(c);
-  fl_scale(-1.0, 1.0);
-}
-
-static void fl_init_symbols(void) {
-  static char beenhere;
-  if (beenhere) return;
-  beenhere = 1;
-  symbnumb = 0;
-
-  fl_add_symbol("",		draw_arrow1,		1);
-  fl_add_symbol("->",		draw_arrow1,		1);
-  fl_add_symbol(">",		draw_arrow2,		1);
-  fl_add_symbol(">>",		draw_arrow3,		1);
-  fl_add_symbol(">|",		draw_arrowbar,		1);
-  fl_add_symbol(">[]",		draw_arrowbox,		1);
-  fl_add_symbol("|>",		draw_bararrow,		1);
-  fl_add_symbol("<-",		draw_arrow01,		1);
-  fl_add_symbol("<",		draw_arrow02,		1);
-  fl_add_symbol("<<",		draw_arrow03,		1);
-  fl_add_symbol("|<",		draw_0arrowbar,		1);
-  fl_add_symbol("[]<",		draw_0arrowbox,		1);
-  fl_add_symbol("<|",		draw_0bararrow,		1);
-  fl_add_symbol("<->",		draw_doublearrow,	1);
-  fl_add_symbol("-->",		draw_arrow,		1);
-  fl_add_symbol("+",		draw_plus,		1);
-  fl_add_symbol("->|",		draw_arrow1bar,		1);
-  fl_add_symbol("arrow",	draw_arrow,		1);
-  fl_add_symbol("returnarrow",	0,			3);
-  fl_add_symbol("square",	draw_square,		1);
-  fl_add_symbol("circle",	draw_circle,		1);
-  fl_add_symbol("line",		draw_line,		1);
-  fl_add_symbol("plus",		draw_plus,		1);
-  fl_add_symbol("menu",		draw_menu,		1);
-  fl_add_symbol("UpArrow",	draw_uparrow,		1);
-  fl_add_symbol("DnArrow",	draw_downarrow,		1);
-  fl_add_symbol("||",		draw_doublebar,		1);
-  fl_add_symbol("search",       draw_search,            1);
-  fl_add_symbol("FLTK",         draw_fltk,              1);
-
-  fl_add_symbol("filenew",      draw_filenew,           1);
-  fl_add_symbol("fileopen",     draw_fileopen,          1);
-  fl_add_symbol("filesave",     draw_filesave,          1);
-  fl_add_symbol("filesaveas",   draw_filesaveas,        1);
-  fl_add_symbol("fileprint",    draw_fileprint,         1);
-
-  fl_add_symbol("refresh",      draw_refresh,           1);
-  fl_add_symbol("reload",       draw_reload,            1);
-  fl_add_symbol("undo",         draw_undo,              1);
-  fl_add_symbol("redo",         draw_redo,              1);
-
-//  fl_add_symbol("file",      draw_file,           1);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_utf.c
+++ /dev/null
@@ -1,992 +1,0 @@
-/*
- * "$Id$"
- *
- * This is the utf.c file from fltk2 adapted for use in my fltk1.1 port
- */
-/* Copyright 2006-2015 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* Modified to obey rfc3629, which limits unicode to 0-0x10ffff */
-
-#include <FL/fl_utf8.h>
-#include <string.h>
-#include <stdlib.h>
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-
-#if 0
-  /**
-   \defgroup fl_unichar Unicode Character Functions
-   Global Functions Handling Single Unicode Characters
-   @{ */
-
-  /**
-   Converts a Unicode character into a utf-8 sequence.
-   \param[in] uc Unicode character
-   \param[out] text utf-8 sequence will be written here; if this pointer is
-   \c NULL, only the length of the utf-8 sequence is calculated
-   \return length of the sequence in bytes
-   */
-  /* FL_EXPORT int fl_unichar_to_utf8(unsigned int uc, char *text); */
-
-  /** @} */
-
-  /**
-   \defgroup fl_utf8 Unicode String Functions
-   Global Functions Handling Unicode Text
-   @{ */
-
-  /**
-   Calculate the size of a utf-8 sequence for a Unicode character.
-   \param[in] uc Unicode character
-   \return length of the sequence in bytes
-   */
-  /* FL_EXPORT int fl_utf8_size(unsigned int uc); */
-
-  /** @} */
-#endif /* 0 */
-
-/*!Set to 1 to turn bad UTF-8 bytes into ISO-8859-1. If this is zero
-   they are instead turned into the Unicode REPLACEMENT CHARACTER, of
-   value 0xfffd.
-   If this is on fl_utf8decode() will correctly map most (perhaps all)
-   human-readable text that is in ISO-8859-1. This may allow you
-   to completely ignore character sets in your code because virtually
-   everything is either ISO-8859-1 or UTF-8.
-*/
-#ifndef ERRORS_TO_ISO8859_1
-# define ERRORS_TO_ISO8859_1 1
-#endif
-
-/*!Set to 1 to turn bad UTF-8 bytes in the 0x80-0x9f range into the
-   Unicode index for Microsoft's CP1252 character set. You should
-   also set ERRORS_TO_ISO8859_1. With this a huge amount of more
-   available text (such as all web pages) are correctly converted
-   to Unicode.
-*/
-#ifndef ERRORS_TO_CP1252
-# define ERRORS_TO_CP1252 1
-#endif
-
-/*!A number of Unicode code points are in fact illegal and should not
-   be produced by a UTF-8 converter. Turn this on will replace the
-   bytes in those encodings with errors. If you do this then converting
-   arbitrary 16-bit data to UTF-8 and then back is not an identity,
-   which will probably break a lot of software.
-*/
-#ifndef STRICT_RFC3629
-# define STRICT_RFC3629 0
-#endif
-
-#if ERRORS_TO_CP1252
-/* Codes 0x80..0x9f from the Microsoft CP1252 character set, translated
- * to Unicode:
- */
-static unsigned short cp1252[32] = {
-  0x20ac, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x017d, 0x008f,
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x017e, 0x0178
-};
-#endif
-
-/*! Decode a single UTF-8 encoded character starting at \e p. The
-    resulting Unicode value (in the range 0-0x10ffff) is returned,
-    and \e len is set to the number of bytes in the UTF-8 encoding
-    (adding \e len to \e p will point at the next character).
-
-    If \p p points at an illegal UTF-8 encoding, including one that
-    would go past \e end, or where a code uses more bytes than
-    necessary, then *(unsigned char*)p is translated as though it is
-    in the Microsoft CP1252 character set and \e len is set to 1.
-    Treating errors this way allows this to decode almost any
-    ISO-8859-1 or CP1252 text that has been mistakenly placed where
-    UTF-8 is expected, and has proven very useful.
-
-    If you want errors to be converted to error characters (as the
-    standards recommend), adding a test to see if the length is
-    unexpectedly 1 will work:
-
-    \code
-    if (*p & 0x80) {              // what should be a multibyte encoding
-      code = fl_utf8decode(p,end,&len);
-      if (len<2) code = 0xFFFD;   // Turn errors into REPLACEMENT CHARACTER
-    } else {                      // handle the 1-byte UTF-8 encoding:
-      code = *p;
-      len = 1;
-    }
-    \endcode
-
-    Direct testing for the 1-byte case (as shown above) will also
-    speed up the scanning of strings where the majority of characters
-    are ASCII.
-*/
-unsigned fl_utf8decode(const char* p, const char* end, int* len)
-{
-  unsigned char c = *(const unsigned char*)p;
-  if (c < 0x80) {
-    if (len) *len = 1;
-    return c;
-#if ERRORS_TO_CP1252
-  } else if (c < 0xa0) {
-    if (len) *len = 1;
-    return cp1252[c-0x80];
-#endif
-  } else if (c < 0xc2) {
-    goto FAIL;
-  }
-  if ( (end && p+1 >= end) || (p[1]&0xc0) != 0x80) goto FAIL;
-  if (c < 0xe0) {
-    if (len) *len = 2;
-    return
-      ((p[0] & 0x1f) << 6) +
-      ((p[1] & 0x3f));
-  } else if (c == 0xe0) {
-    if (((const unsigned char*)p)[1] < 0xa0) goto FAIL;
-    goto UTF8_3;
-#if STRICT_RFC3629
-  } else if (c == 0xed) {
-    /* RFC 3629 says surrogate chars are illegal. */
-    if (((const unsigned char*)p)[1] >= 0xa0) goto FAIL;
-    goto UTF8_3;
-  } else if (c == 0xef) {
-    /* 0xfffe and 0xffff are also illegal characters */
-    if (((const unsigned char*)p)[1]==0xbf &&
-	((const unsigned char*)p)[2]>=0xbe) goto FAIL;
-    goto UTF8_3;
-#endif
-  } else if (c < 0xf0) {
-  UTF8_3:
-    if ( (end && p+2 >= end) || (p[2]&0xc0) != 0x80) goto FAIL;
-    if (len) *len = 3;
-    return
-      ((p[0] & 0x0f) << 12) +
-      ((p[1] & 0x3f) << 6) +
-      ((p[2] & 0x3f));
-  } else if (c == 0xf0) {
-    if (((const unsigned char*)p)[1] < 0x90) goto FAIL;
-    goto UTF8_4;
-  } else if (c < 0xf4) {
-  UTF8_4:
-    if ( (end && p+3 >= end) || (p[2]&0xc0) != 0x80 || (p[3]&0xc0) != 0x80) goto FAIL;
-    if (len) *len = 4;
-#if STRICT_RFC3629
-    /* RFC 3629 says all codes ending in fffe or ffff are illegal: */
-    if ((p[1]&0xf)==0xf &&
-	((const unsigned char*)p)[2] == 0xbf &&
-	((const unsigned char*)p)[3] >= 0xbe) goto FAIL;
-#endif
-    return
-      ((p[0] & 0x07) << 18) +
-      ((p[1] & 0x3f) << 12) +
-      ((p[2] & 0x3f) << 6) +
-      ((p[3] & 0x3f));
-  } else if (c == 0xf4) {
-    if (((const unsigned char*)p)[1] > 0x8f) goto FAIL; /* after 0x10ffff */
-    goto UTF8_4;
-  } else {
-  FAIL:
-    if (len) *len = 1;
-#if ERRORS_TO_ISO8859_1
-    return c;
-#else
-    return 0xfffd; /* Unicode REPLACEMENT CHARACTER */
-#endif
-  }
-}
-
-/*! Move \p p forward until it points to the start of a UTF-8
-  character. If it already points at the start of one then it
-  is returned unchanged. Any UTF-8 errors are treated as though each
-  byte of the error is an individual character.
-
-  \e start is the start of the string and is used to limit the
-  backwards search for the start of a UTF-8 character.
-
-  \e end is the end of the string and is assumed to be a break
-  between characters. It is assumed to be greater than p.
-
-  This function is for moving a pointer that was jumped to the
-  middle of a string, such as when doing a binary search for
-  a position. You should use either this or fl_utf8back() depending
-  on which direction your algorithm can handle the pointer
-  moving. Do not use this to scan strings, use fl_utf8decode()
-  instead.
-*/
-const char* fl_utf8fwd(const char* p, const char* start, const char* end)
-{
-  const char* a;
-  int len;
-  /* if we are not pointing at a continuation character, we are done: */
-  if ((*p&0xc0) != 0x80) return p;
-  /* search backwards for a 0xc0 starting the character: */
-  for (a = p-1; ; --a) {
-    if (a < start) return p;
-    if (!(a[0]&0x80)) return p;
-    if ((a[0]&0x40)) break;
-  }
-  fl_utf8decode(a,end,&len);
-  a += len;
-  if (a > p) return a;
-  return p;
-}
-
-/*! Move \p p backward until it points to the start of a UTF-8
-  character. If it already points at the start of one then it
-  is returned unchanged. Any UTF-8 errors are treated as though each
-  byte of the error is an individual character.
-
-  \e start is the start of the string and is used to limit the
-  backwards search for the start of a UTF-8 character.
-
-  \e end is the end of the string and is assumed to be a break
-  between characters. It is assumed to be greater than p.
-
-  If you wish to decrement a UTF-8 pointer, pass p-1 to this.
-*/
-const char* fl_utf8back(const char* p, const char* start, const char* end)
-{
-  const char* a;
-  int len;
-  /* if we are not pointing at a continuation character, we are done: */
-  if ((*p&0xc0) != 0x80) return p;
-  /* search backwards for a 0xc0 starting the character: */
-  for (a = p-1; ; --a) {
-    if (a < start) return p;
-    if (!(a[0]&0x80)) return p;
-    if ((a[0]&0x40)) break;
-  }
-  fl_utf8decode(a,end,&len);
-  if (a+len > p) return a;
-  return p;
-}
-
-/*! Returns number of bytes that utf8encode() will use to encode the
-  character \p ucs. */
-int fl_utf8bytes(unsigned ucs) {
-  if (ucs < 0x000080U) {
-    return 1;
-  } else if (ucs < 0x000800U) {
-    return 2;
-  } else if (ucs < 0x010000U) {
-    return 3;
-  } else if (ucs <= 0x10ffffU) {
-    return 4;
-  } else {
-    return 3; /* length of the illegal character encoding */
-  }
-}
-
-/*! Write the UTF-8 encoding of \e ucs into \e buf and return the
-    number of bytes written. Up to 4 bytes may be written. If you know
-    that \p ucs is less than 0x10000 then at most 3 bytes will be written.
-    If you wish to speed this up, remember that anything less than 0x80
-    is written as a single byte.
-
-    If ucs is greater than 0x10ffff this is an illegal character
-    according to RFC 3629. These are converted as though they are
-    0xFFFD (REPLACEMENT CHARACTER).
-
-    RFC 3629 also says many other values for \p ucs are illegal (in
-    the range 0xd800 to 0xdfff, or ending with 0xfffe or
-    0xffff). However I encode these as though they are legal, so that
-    utf8encode/fl_utf8decode will be the identity for all codes between 0
-    and 0x10ffff.
-*/
-int fl_utf8encode(unsigned ucs, char* buf) {
-  if (ucs < 0x000080U) {
-    buf[0] = ucs;
-    return 1;
-  } else if (ucs < 0x000800U) {
-    buf[0] = 0xc0 | (ucs >> 6);
-    buf[1] = 0x80 | (ucs & 0x3F);
-    return 2;
-  } else if (ucs < 0x010000U) {
-    buf[0] = 0xe0 | (ucs >> 12);
-    buf[1] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[2] = 0x80 | (ucs & 0x3F);
-    return 3;
-  } else if (ucs <= 0x0010ffffU) {
-    buf[0] = 0xf0 | (ucs >> 18);
-    buf[1] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[3] = 0x80 | (ucs & 0x3F);
-    return 4;
-  } else {
-    /* encode 0xfffd: */
-    buf[0] = (char)0xef;
-    buf[1] = (char)0xbf;
-    buf[2] = (char)0xbd;
-    return 3;
-  }
-}
-
-/*! Convert a single 32-bit Unicode codepoint into an array of 16-bit
-    characters. These are used by some system calls, especially on Windows.
-
-    \p ucs is the value to convert.
-
-    \p dst points at an array to write, and \p dstlen is the number of
-    locations in this array. At most \p dstlen words will be
-    written, and a 0 terminating word will be added if \p dstlen is
-    large enough. Thus this function will never overwrite the buffer
-    and will attempt return a zero-terminated string if space permits.
-    If \p dstlen is zero then \p dst can be set to NULL and no data
-    is written, but the length is returned.
-
-    The return value is the number of 16-bit words that \e would be written
-    to \p dst if it is large enough, not counting any terminating
-    zero.
-
-    If the return value is greater than \p dstlen it indicates truncation,
-    you should then allocate a new array of size return+1 and call this again.
-
-    Unicode characters in the range 0x10000 to 0x10ffff are converted to
-    "surrogate pairs" which take two words each (in UTF-16 encoding).
-    Typically, setting \p dstlen to 2 will ensure that any valid Unicode
-    value can be converted, and setting \p dstlen to 3 or more will allow
-    a NULL terminated sequence to be returned.
-*/
-unsigned fl_ucs_to_Utf16(const unsigned ucs, unsigned short *dst, const unsigned dstlen)
-{
-  /* The rule for direct conversion from UCS to UTF16 is:
-   * - if UCS >  0x0010FFFF then UCS is invalid
-   * - if UCS >= 0xD800 && UCS <= 0xDFFF UCS is invalid
-   * - if UCS <= 0x0000FFFF then U16 = UCS, len = 1
-   * - else
-   * -- U16[0] = ((UCS - 0x00010000) >> 10) & 0x3FF + 0xD800
-   * -- U16[1] = (UCS & 0x3FF) + 0xDC00
-   * -- len = 2;
-   */
-  unsigned count;        /* Count of converted UTF16 cells */
-  unsigned short u16[4]; /* Alternate buffer if dst is not set */
-  unsigned short *out;   /* points to the active buffer */
-  /* Ensure we have a valid buffer to write to */
-  if((!dstlen) || (!dst)) {
-    out = u16;
-  } else {
-    out = dst;
-  }
-  /* Convert from UCS to UTF16 */
-  if((ucs > 0x0010FFFF) || /* UCS is too large */
-  ((ucs > 0xD7FF) && (ucs < 0xE000))) { /* UCS in invalid range */
-    out[0] = 0xFFFD; /* REPLACEMENT CHARACTER */
-    count = 1;
-  } else if(ucs < 0x00010000) {
-    out[0] = (unsigned short)ucs;
-    count = 1;
-  } else if(dstlen < 2) { /* dst is too small for the result */
-    out[0] = 0xFFFD; /* REPLACEMENT CHARACTER */
-    count = 2;
-  } else {
-    out[0] = (((ucs - 0x00010000) >> 10) & 0x3FF) + 0xD800;
-    out[1] = (ucs & 0x3FF) + 0xDC00;
-    count = 2;
-  }
-  /* NULL terminate the output, if there is space */
-  if(count < dstlen) { out[count] = 0; }
-  return count;
-} /* fl_ucs_to_Utf16 */
-
-/*! Convert a UTF-8 sequence into an array of 16-bit characters. These
-    are used by some system calls, especially on Windows.
-
-    \p src points at the UTF-8, and \p srclen is the number of bytes to
-    convert.
-
-    \p dst points at an array to write, and \p dstlen is the number of
-    locations in this array. At most \p dstlen-1 words will be
-    written there, plus a 0 terminating word. Thus this function
-    will never overwrite the buffer and will always return a
-    zero-terminated string. If \p dstlen is zero then \p dst can be
-    null and no data is written, but the length is returned.
-
-    The return value is the number of 16-bit words that \e would be written
-    to \p dst if it were long enough, not counting the terminating
-    zero. If the return value is greater or equal to \p dstlen it
-    indicates truncation, you can then allocate a new array of size
-    return+1 and call this again.
-
-    Errors in the UTF-8 are converted as though each byte in the
-    erroneous string is in the Microsoft CP1252 encoding. This allows
-    ISO-8859-1 text mistakenly identified as UTF-8 to be printed
-    correctly.
-
-    Unicode characters in the range 0x10000 to 0x10ffff are converted to
-    "surrogate pairs" which take two words each (this is called UTF-16
-    encoding).
-*/
-unsigned fl_utf8toUtf16(const char* src, unsigned srclen,
-		  unsigned short* dst, unsigned dstlen)
-{
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    if (p >= e) {dst[count] = 0; return count;}
-    if (!(*p & 0x80)) { /* ascii */
-      dst[count] = *p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs < 0x10000) {
-	dst[count] = ucs;
-      } else {
-	/* make a surrogate pair: */
-	if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-	dst[count] = (((ucs-0x10000u)>>10)&0x3ff) | 0xd800;
-	dst[++count] = (ucs&0x3ff) | 0xdc00;
-      }
-    }
-    if (++count == dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs >= 0x10000) ++count;
-    }
-    ++count;
-  }
-  return count;
-}
-
-
-/**
-  Converts a UTF-8 string into a wide character string.
-
-  This function generates 32-bit wchar_t (e.g. "ucs4" as it were) except
-  on Windows where it is equivalent to fl_utf8toUtf16 and returns
-  UTF-16.
-
-  \p src points at the UTF-8, and \p srclen is the number of bytes to
-  convert.
-
-  \p dst points at an array to write, and \p dstlen is the number of
-  locations in this array. At most \p dstlen-1 wchar_t will be
-  written there, plus a 0 terminating wchar_t.
-
-  The return value is the number of wchar_t that \e would be written
-  to \p dst if it were long enough, not counting the terminating
-  zero. If the return value is greater or equal to \p dstlen it
-  indicates truncation, you can then allocate a new array of size
-  return+1 and call this again.
-
-  Notice that sizeof(wchar_t) is 2 on Windows and is 4 on Linux
-  and most other systems. Where wchar_t is 16 bits, Unicode
-  characters in the range 0x10000 to 0x10ffff are converted to
-  "surrogate pairs" which take two words each (this is called UTF-16
-  encoding). If wchar_t is 32 bits this rather nasty problem is
-  avoided.
-
-  Note that Windows includes Cygwin, i.e. compiled with Cygwin's POSIX
-  layer (cygwin1.dll, --enable-cygwin), either native (GDI) or X11.
-  */
-unsigned fl_utf8towc(const char* src, unsigned srclen,
-		  wchar_t* dst, unsigned dstlen)
-{
-#if defined(WIN32) || defined(__CYGWIN__)
-  return fl_utf8toUtf16(src, srclen, (unsigned short*)dst, dstlen);
-#else
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    if (p >= e) {
-      dst[count] = 0;
-      return count;
-    }
-    if (!(*p & 0x80)) { /* ascii */
-      dst[count] = *p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      dst[count] = (wchar_t)ucs;
-    }
-    if (++count == dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len; fl_utf8decode(p,e,&len);
-      p += len;
-    }
-    ++count;
-  }
-  return count;
-#endif
-}
-
-/*! Convert a UTF-8 sequence into an array of 1-byte characters.
-
-    If the UTF-8 decodes to a character greater than 0xff then it is
-    replaced with '?'.
-
-    Errors in the UTF-8 sequence are converted as individual bytes, same as
-    fl_utf8decode() does. This allows ISO-8859-1 text mistakenly identified
-    as UTF-8 to be printed correctly (and possibly CP1252 on Windows).
-
-    \p src points at the UTF-8 sequence, and \p srclen is the number of
-    bytes to convert.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-*/
-unsigned fl_utf8toa(const char* src, unsigned srclen,
-		 char* dst, unsigned dstlen)
-{
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned char c;
-    if (p >= e) {dst[count] = 0; return count;}
-    c = *(const unsigned char*)p;
-    if (c < 0xC2) { /* ascii or bad code */
-      dst[count] = c;
-      p++;
-    } else {
-      int len; unsigned ucs = fl_utf8decode(p,e,&len);
-      p += len;
-      if (ucs < 0x100) dst[count] = ucs;
-      else dst[count] = '?';
-    }
-    if (++count >= dstlen) {dst[count-1] = 0; break;}
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    if (!(*p & 0x80)) p++;
-    else {
-      int len;
-      fl_utf8decode(p,e,&len);
-      p += len;
-    }
-    ++count;
-  }
-  return count;
-}
-
-/*! Turn "wide characters" as returned by some system calls
-    (especially on Windows) into UTF-8.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    \p srclen is the number of words in \p src to convert. On Windows
-    this is not necessarily the number of characters, due to there
-    possibly being "surrogate pairs" in the UTF-16 encoding used.
-    On Unix wchar_t is 32 bits and each location is a character.
-
-    On Unix if a \p src word is greater than 0x10ffff then this is an
-    illegal character according to RFC 3629. These are converted as
-    though they are 0xFFFD (REPLACEMENT CHARACTER). Characters in the
-    range 0xd800 to 0xdfff, or ending with 0xfffe or 0xffff are also
-    illegal according to RFC 3629. However I encode these as though
-    they are legal, so that fl_utf8towc will return the original data.
-
-    On Windows "surrogate pairs" are converted to a single character
-    and UTF-8 encoded (as 4 bytes). Mismatched halves of surrogate
-    pairs are converted as though they are individual characters.
-*/
-unsigned fl_utf8fromwc(char* dst, unsigned dstlen,
-		    const wchar_t* src, unsigned srclen) {
-  unsigned i = 0;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned ucs;
-    if (i >= srclen) {dst[count] = 0; return count;}
-    ucs = src[i++];
-    if (ucs < 0x80U) {
-      dst[count++] = ucs;
-      if (count >= dstlen) {dst[count-1] = 0; break;}
-    } else if (ucs < 0x800U) { /* 2 bytes */
-      if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-      dst[count++] = 0xc0 | (ucs >> 6);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-#if defined(WIN32) || defined(__CYGWIN__)
-    } else if (ucs >= 0xd800 && ucs <= 0xdbff && i < srclen &&
-	       src[i] >= 0xdc00 && src[i] <= 0xdfff) {
-      /* surrogate pair */
-      unsigned ucs2 = src[i++];
-      ucs = 0x10000U + ((ucs&0x3ff)<<10) + (ucs2&0x3ff);
-      /* all surrogate pairs turn into 4-byte UTF-8 */
-#else
-    } else if (ucs >= 0x10000) {
-      if (ucs > 0x10ffff) {
-	ucs = 0xfffd;
-	goto J1;
-      }
-#endif
-      if (count+4 >= dstlen) {dst[count] = 0; count += 4; break;}
-      dst[count++] = 0xf0 | (ucs >> 18);
-      dst[count++] = 0x80 | ((ucs >> 12) & 0x3F);
-      dst[count++] = 0x80 | ((ucs >> 6) & 0x3F);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    } else {
-#if !(defined(WIN32) || defined(__CYGWIN__))
-    J1:
-#endif
-      /* all others are 3 bytes: */
-      if (count+3 >= dstlen) {dst[count] = 0; count += 3; break;}
-      dst[count++] = 0xe0 | (ucs >> 12);
-      dst[count++] = 0x80 | ((ucs >> 6) & 0x3F);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    }
-  }
-  /* we filled dst, measure the rest: */
-  while (i < srclen) {
-    unsigned ucs = src[i++];
-    if (ucs < 0x80U) {
-      count++;
-    } else if (ucs < 0x800U) { /* 2 bytes */
-      count += 2;
-#if defined(WIN32) || defined(__CYGWIN__)
-    } else if (ucs >= 0xd800 && ucs <= 0xdbff && i < srclen-1 &&
-	       src[i+1] >= 0xdc00 && src[i+1] <= 0xdfff) {
-      /* surrogate pair */
-      ++i;
-#else
-    } else if (ucs >= 0x10000 && ucs <= 0x10ffff) {
-#endif
-      count += 4;
-    } else {
-      count += 3;
-    }
-  }
-  return count;
-}
-
-/*! Convert an ISO-8859-1 (ie normal c-string) byte stream to UTF-8.
-
-    It is possible this should convert Microsoft's CP1252 to UTF-8
-    instead. This would translate the codes in the range 0x80-0x9f
-    to different characters. Currently it does not do this.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    \p srclen is the number of bytes in \p src to convert.
-
-    If the return value equals \p srclen then this indicates that
-    no conversion is necessary, as only ASCII characters are in the
-    string.
-*/
-unsigned fl_utf8froma(char* dst, unsigned dstlen,
-		   const char* src, unsigned srclen) {
-  const char* p = src;
-  const char* e = src+srclen;
-  unsigned count = 0;
-  if (dstlen) for (;;) {
-    unsigned char ucs;
-    if (p >= e) {dst[count] = 0; return count;}
-    ucs = *(const unsigned char*)p++;
-    if (ucs < 0x80U) {
-      dst[count++] = ucs;
-      if (count >= dstlen) {dst[count-1] = 0; break;}
-    } else { /* 2 bytes (note that CP1252 translate could make 3 bytes!) */
-      if (count+2 >= dstlen) {dst[count] = 0; count += 2; break;}
-      dst[count++] = 0xc0 | (ucs >> 6);
-      dst[count++] = 0x80 | (ucs & 0x3F);
-    }
-  }
-  /* we filled dst, measure the rest: */
-  while (p < e) {
-    unsigned char ucs = *(const unsigned char*)p++;
-    if (ucs < 0x80U) {
-      count++;
-    } else {
-      count += 2;
-    }
-  }
-  return count;
-}
-
-#ifdef WIN32
-# include <windows.h>
-#endif
-
-/*! Return true if the "locale" seems to indicate that UTF-8 encoding
-    is used. If true the fl_utf8to_mb and fl_utf8from_mb don't do anything
-    useful.
-
-    <i>It is highly recommended that you change your system so this
-    does return true.</i> On Windows this is done by setting the
-    "codepage" to CP_UTF8.  On Unix this is done by setting $LC_CTYPE
-    to a string containing the letters "utf" or "UTF" in it, or by
-    deleting all $LC* and $LANG environment variables. In the future
-    it is likely that all non-Asian Unix systems will return true,
-    due to the compatibility of UTF-8 with ISO-8859-1.
-*/
-int fl_utf8locale(void) {
-  static int ret = 2;
-  if (ret == 2) {
-#ifdef WIN32
-    ret = GetACP() == CP_UTF8;
-#else
-    char* s;
-    ret = 1; /* assume UTF-8 if no locale */
-    if (((s = getenv("LC_CTYPE")) && *s) ||
-	((s = getenv("LC_ALL"))   && *s) ||
-	((s = getenv("LANG"))     && *s)) {
-      ret = (strstr(s,"utf") || strstr(s,"UTF"));
-    }
-#endif
-  }
-  return ret;
-}
-
-/*! Convert the UTF-8 used by FLTK to the locale-specific encoding
-    used for filenames (and sometimes used for data in files).
-    Unfortunately due to stupid design you will have to do this as
-    needed for filenames. This is a bug on both Unix and Windows.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    If fl_utf8locale() returns true then this does not change the data.
-*/
-unsigned fl_utf8to_mb(const char* src, unsigned srclen,
-		  char* dst, unsigned dstlen)
-{
-  if (!fl_utf8locale()) {
-#ifdef WIN32
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length = fl_utf8towc(src, srclen, buf, 1024);
-    unsigned ret;
-    if (length >= 1024) {
-      buf = (wchar_t*)(malloc((length+1)*sizeof(wchar_t)));
-      fl_utf8towc(src, srclen, buf, length+1);
-    }
-    if (dstlen) {
-      /* apparently this does not null-terminate, even though msdn
-       * documentation claims it does:
-       */
-      ret =
-        WideCharToMultiByte(GetACP(), 0, buf, length, dst, dstlen, 0, 0);
-      dst[ret] = 0;
-    }
-    /* if it overflows or measuring length, get the actual length: */
-    if (dstlen==0 || ret >= dstlen-1)
-      ret =
-	WideCharToMultiByte(GetACP(), 0, buf, length, 0, 0, 0, 0);
-    if (buf != lbuf) free((void*)buf);
-    return ret;
-#else
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length = fl_utf8towc(src, srclen, buf, 1024);
-    int ret; /* note: wcstombs() returns unsigned(length) or unsigned(-1) */
-    if (length >= 1024) {
-      buf = (wchar_t*)(malloc((length+1)*sizeof(wchar_t)));
-      fl_utf8towc(src, srclen, buf, length+1);
-    }
-    if (dstlen) {
-      ret = wcstombs(dst, buf, dstlen);
-      if (ret >= (int)dstlen-1) ret = wcstombs(0,buf,0);
-    } else {
-      ret = wcstombs(0,buf,0);
-    }
-    if (buf != lbuf) free((void*)buf);
-    if (ret >= 0) return (unsigned)ret;
-    /* on any errors we return the UTF-8 as raw text...*/
-#endif
-  }
-  /* identity transform: */
-  if (srclen < dstlen) {
-    memcpy(dst, src, srclen);
-    dst[srclen] = 0;
-  } else {
-    /* Buffer insufficent or buffer query */
-  }
-  return srclen;
-}
-
-/*! Convert a filename from the locale-specific multibyte encoding
-    used by Windows to UTF-8 as used by FLTK.
-
-    Up to \p dstlen bytes are written to \p dst, including a null
-    terminator. The return value is the number of bytes that would be
-    written, not counting the null terminator. If greater or equal to
-    \p dstlen then if you malloc a new array of size n+1 you will have
-    the space needed for the entire string. If \p dstlen is zero then
-    nothing is written and this call just measures the storage space
-    needed.
-
-    On Unix or on Windows when a UTF-8 locale is in effect, this
-    does not change the data.
-    You may also want to check if fl_utf8test() returns non-zero, so that
-    the filesystem can store filenames in UTF-8 encoding regardless of
-    the locale.
-*/
-unsigned fl_utf8from_mb(char* dst, unsigned dstlen,
-		    const char* src, unsigned srclen)
-{
-  if (!fl_utf8locale()) {
-#ifdef WIN32
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    unsigned length;
-    unsigned ret;
-    length = MultiByteToWideChar(GetACP(), 0, src, srclen, buf, 1024);
-    if ((length == 0)&&(GetLastError()==ERROR_INSUFFICIENT_BUFFER)) {
-      length = MultiByteToWideChar(GetACP(), 0, src, srclen, 0, 0);
-      buf = (wchar_t*)(malloc(length*sizeof(wchar_t)));
-      MultiByteToWideChar(GetACP(), 0, src, srclen, buf, length);
-    }
-    ret = fl_utf8fromwc(dst, dstlen, buf, length);
-    if (buf != lbuf) free((void*)buf);
-    return ret;
-#else
-    wchar_t lbuf[1024];
-    wchar_t* buf = lbuf;
-    int length;
-    unsigned ret;
-    length = mbstowcs(buf, src, 1024);
-    if (length >= 1024) {
-      length = mbstowcs(0, src, 0)+1;
-      buf = (wchar_t*)(malloc(length*sizeof(wchar_t)));
-      mbstowcs(buf, src, length);
-    }
-    if (length >= 0) {
-      ret = fl_utf8fromwc(dst, dstlen, buf, length);
-      if (buf != lbuf) free((void*)buf);
-      return ret;
-    }
-    /* errors in conversion return the UTF-8 unchanged */
-#endif
-  }
-  /* identity transform: */
-  if (srclen < dstlen) {
-    memcpy(dst, src, srclen);
-    dst[srclen] = 0;
-  } else {
-    /* Buffer insufficent or buffer query */
-  }
-  return srclen;
-}
-
-/*! Examines the first \p srclen bytes in \p src and returns a verdict
-    on whether it is UTF-8 or not.
-    - Returns 0 if there is any illegal UTF-8 sequences, using the
-      same rules as fl_utf8decode(). Note that some UCS values considered
-      illegal by RFC 3629, such as 0xffff, are considered legal by this.
-    - Returns 1 if there are only single-byte characters (ie no bytes
-      have the high bit set). This is legal UTF-8, but also indicates
-      plain ASCII. It also returns 1 if \p srclen is zero.
-    - Returns 2 if there are only characters less than 0x800.
-    - Returns 3 if there are only characters less than 0x10000.
-    - Returns 4 if there are characters in the 0x10000 to 0x10ffff range.
-
-    Because there are many illegal sequences in UTF-8, it is almost
-    impossible for a string in another encoding to be confused with
-    UTF-8. This is very useful for transitioning Unix to UTF-8
-    filenames, you can simply test each filename with this to decide
-    if it is UTF-8 or in the locale encoding. My hope is that if
-    this is done we will be able to cleanly transition to a locale-less
-    encoding.
-*/
-int fl_utf8test(const char* src, unsigned srclen) {
-  int ret = 1;
-  const char* p = src;
-  const char* e = src+srclen;
-  while (p < e) {
-    if (*p & 0x80) {
-      int len; fl_utf8decode(p,e,&len);
-      if (len < 2) return 0;
-      if (len > ret) ret = len;
-      p += len;
-    } else {
-      p++;
-    }
-  }
-  return ret;
-}
-
-/* forward declare mk_wcwidth() as static so the name is not visible.
- */
- static int mk_wcwidth(unsigned int ucs);
-
- /* include the c source directly so it's contents are only visible here
-  */
-#include "xutf8/mk_wcwidth.c"
-
-/** wrapper to adapt Markus Kuhn's implementation of wcwidth() for FLTK
-    \param [in] ucs Unicode character value
-    \returns width of character in columns
-
-    See http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c for Markus Kuhn's
-    original implementation of wcwidth() and wcswidth()
-    (defined in IEEE Std 1002.1-2001) for Unicode.
-
-    \b WARNING: this function returns widths for "raw" Unicode characters.
-    It does not even try to map C1 control characters (0x80 to 0x9F) to
-    CP1252, and C0/C1 control characters and DEL will return -1.
-    You are advised to use fl_width(const char* src) instead.
- */
-int fl_wcwidth_(unsigned int ucs) {
-  return mk_wcwidth(ucs);
-}
-
-/** extended wrapper around  fl_wcwidth_(unsigned int ucs) function.
-    \param[in] src pointer to start of UTF-8 byte sequence
-    \returns width of character in columns
-
-    Depending on build options, this function may map C1 control
-    characters (0x80 to 0x9f) to CP1252, and return the width of
-    that character instead. This is not the same behaviour as
-    fl_wcwidth_(unsigned int ucs) .
-
-    Note that other control characters and DEL will still return -1,
-    so if you want different behaviour, you need to test for those
-    characters before calling fl_wcwidth(), and handle them separately.
- */
-int fl_wcwidth(const char* src) {
-  int len = fl_utf8len(*src);
-  int ret = 0;
-  unsigned int ucs = fl_utf8decode(src, src+len, &ret);
-  int width = fl_wcwidth_(ucs);
-  return width;
-}
-
-/** @} */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/fl_utf8.cxx
+++ /dev/null
@@ -1,895 +1,0 @@
-//
-// "$Id$"
-//
-// Unicode to UTF-8 conversion functions.
-//
-// Author: Jean-Marc Lienher ( http://oksid.ch )
-// Copyright 2000-2010 by O'ksi'D.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/filename.H>
-#include <stdarg.h>
-
-#if defined(WIN32) || defined(__CYGWIN__)
-# include <ctype.h>
-# include <io.h>
-# include <windows.h>
-# include <winbase.h>
-# include <process.h>
-# ifdef __CYGWIN__
-#  include  <wchar.h>
-#  include <sys/types.h>
-#  include <sys/stat.h>
-#  include <fcntl.h>
-#  include <unistd.h>
-# else
-#  include  <direct.h>
-# endif
-extern "C" {
-  int XUtf8Tolower(int ucs);
-  unsigned short XUtf8IsNonSpacing(unsigned int ucs);
-};
-#elif defined(__APPLE__)
-# include <stdio.h>
-# include <time.h>
-//# include <unix.h>
-# include <fcntl.h>
-# include <unistd.h>
-# include <wchar.h>
-# include <stdlib.h>
-#   include <sys/types.h>
-# include <sys/stat.h>
-
-extern "C" {
-  int XUtf8Tolower(int ucs);
-  unsigned short XUtf8IsNonSpacing(unsigned int ucs);
-}
-
-#else // X-windows platform
-
-# include "Xutf8.h"
-# include <sys/types.h>
-# include <sys/stat.h>
-# include <fcntl.h>
-# include <unistd.h>
-#endif // WIN32
-
-#include <FL/fl_utf8.h>
-#include <string.h>
-#include <stdlib.h>
-
-#undef fl_open
-
-/** \addtogroup fl_unicode
-    @{
-*/
-
-// *** NOTE : All functions are LIMITED to 24 bits Unicode values !!! ***
-// ***        But only 16 bits are really used under Linux and win32  ***
-
-
-#define NBC 0xFFFF + 1
-
-static int Toupper(int ucs) {
-  long i;
-  static unsigned short *table = NULL;
-
-  if (!table) {
-    table = (unsigned short*) malloc(
-	    sizeof(unsigned short) * (NBC));
-    for (i = 0; i < NBC; i++) {
-      table[i] = (unsigned short) i;
-    }
-    for (i = 0; i < NBC; i++) {
-      int l;
-      l = XUtf8Tolower(i);
-      if (l != i) table[l] = (unsigned short) i;
-    }
-  }
-  if (ucs >= NBC || ucs < 0) return ucs;
-  return table[ucs];
-}
-
-/**
-  Returns the byte length of the UTF-8 sequence with first byte \p c,
-  or -1 if \p c is not valid.
-
-  This function is helpful for finding faulty UTF-8 sequences.
-  \see fl_utf8len1
-*/
-int fl_utf8len(char c)
-{
-  if (!(c & 0x80)) return 1;
-  if (c & 0x40) {
-    if (c & 0x20) {
-      if (c & 0x10) {
-        if (c & 0x08) {
-          if (c & 0x04) {
-            return 6;
-          }
-          return 5;
-        }
-        return 4;
-      }
-      return 3;
-    }
-    return 2;
-  }
-  return -1;
-} // fl_utf8len
-
-
-/**
-  Returns the byte length of the UTF-8 sequence with first byte \p c,
-  or 1 if \p c is not valid.
-
-  This function can be used to scan faulty UTF-8 sequences, albeit
-  ignoring invalid codes.
-  \see fl_utf8len
-*/
-int fl_utf8len1(char c)
-{
-  if (!(c & 0x80)) return 1;
-  if (c & 0x40) {
-    if (c & 0x20) {
-      if (c & 0x10) {
-        if (c & 0x08) {
-          if (c & 0x04) {
-            return 6;
-          }
-          return 5;
-        }
-        return 4;
-      }
-      return 3;
-    }
-    return 2;
-  }
-  return 1;
-} // fl_utf8len1
-
-
-/**
-  Returns the number of Unicode chars in the UTF-8 string.
-*/
-int
-fl_utf_nb_char(
-	const unsigned char 	*buf,
-	int 			len)
-{
-  int i = 0;
-  int nbc = 0;
-  while (i < len) {
-    int cl = fl_utf8len((buf+i)[0]);
-    if (cl < 1) cl = 1;
-    nbc++;
-    i += cl;
-  }
-  return nbc;
-}
-
-
-/**
-  UTF-8 aware strncasecmp - converts to lower case Unicode and tests.
-
-  \param s1, s2 the UTF-8 strings to compare
-  \param n the maximum number of UTF-8 characters to compare
-  \return result of comparison
-  \retval 0 if the strings are equal
-  \retval >0 if s1 is greater than s2
-  \retval <0 if s1 is less than s2
-*/
-int fl_utf_strncasecmp(const char *s1, const char *s2, int n)
-{
-  int i;
-  for (i = 0; i < n; i++) {
-    int l1, l2;
-    unsigned int u1, u2;
-
-    if (*s1==0 && *s2==0) return 0; // all compared equal, return 0
-
-    u1 = fl_utf8decode(s1, 0, &l1);
-    u2 = fl_utf8decode(s2, 0, &l2);
-    int res = XUtf8Tolower(u1) - XUtf8Tolower(u2);
-    if (res) return res;
-    s1 += l1;
-    s2 += l2;
-  }
-  return 0;
-}
-
-
-/**
-  UTF-8 aware strcasecmp - converts to Unicode and tests.
-
-  \return result of comparison
-  \retval 0 if the strings are equal
-  \retval 1 if s1 is greater than s2
-  \retval -1 if s1 is less than s2
-*/
-int fl_utf_strcasecmp(const char *s1, const char *s2)
-{
-  return fl_utf_strncasecmp(s1, s2, 0x7fffffff);
-}
-
-/**
-  Returns the Unicode lower case value of \p ucs.
-*/
-int fl_tolower(unsigned int ucs)
-{
-  return XUtf8Tolower(ucs);
-}
-
-/**
-  Returns the Unicode upper case value of \p ucs.
-*/
-int fl_toupper(unsigned int ucs)
-{
-  return Toupper(ucs);
-}
-
-/**
-  Converts the string \p str to its lower case equivalent into buf.
-  Warning: to be safe buf length must be at least 3 * len [for 16-bit Unicode]
-*/
-int fl_utf_tolower(const unsigned char *str, int len, char *buf)
-{
-  int i;
-  int l = 0;
-  char *end = (char *)&str[len];
-  for (i = 0; i < len;) {
-    int l1, l2;
-    unsigned int u1;
-
-    u1 = fl_utf8decode((const char*)(str + i), end, &l1);
-    l2 = fl_utf8encode((unsigned int) XUtf8Tolower(u1), buf + l);
-    if (l1 < 1) {
-      i += 1;
-    } else {
-      i += l1;
-    }
-    if (l2 < 1) {
-      l += 1;
-    } else {
-      l += l2;
-    }
-  }
-  return l;
-}
-
-/**
-  Converts the string \p str to its upper case equivalent into buf.
-  Warning: to be safe buf length must be at least 3 * len [for 16-bit Unicode]
-*/
-int fl_utf_toupper(const unsigned char *str, int len, char *buf)
-{
-  int i;
-  int l = 0;
-  char *end = (char *)&str[len];
-  for (i = 0; i < len;) {
-    int l1, l2;
-    unsigned int u1;
-
-    u1 = fl_utf8decode((const char*)(str + i), end, &l1);
-    l2 = fl_utf8encode((unsigned int) Toupper(u1), buf + l);
-    if (l1 < 1) {
-      i += 1;
-    } else {
-      i += l1;
-    }
-    if (l2 < 1) {
-      l += 1;
-    } else {
-      l += l2;
-    }
-  }
-  return l;
-}
-
-
-/**
-  Returns true if the Unicode character \p ucs is non-spacing.
-
-  Non-spacing characters in Unicode are typically combining marks like
-  tilde (~), diaeresis (¨), or other marks that are added to a base
-  character, for instance 'a' (base character) + '¨' (combining mark) = 'ä'
-  (German Umlaut).
-
-  - http://unicode.org/glossary/#base_character
-  - http://unicode.org/glossary/#nonspacing_mark
-  - http://unicode.org/glossary/#combining_character
-*/
-unsigned int fl_nonspacing(unsigned int ucs)
-{
-  return (unsigned int) XUtf8IsNonSpacing(ucs);
-}
-
-#ifdef WIN32
-unsigned int fl_codepage = 0;
-#endif
-
-#if defined (WIN32) && !defined(__CYGWIN__)
-
-// For Win32 platforms, we frequently need to translate between
-// Windows 16-bit wide characters (usually UTF-16) and our
-// native UTF-8 strings. To this end, we maintain a number of
-// character buffers to support the conversions.
-// NOTE: Our re-use of these buffers means this code is not
-// going to be thread-safe.
-static xchar *mbwbuf = NULL;
-static xchar *wbuf = NULL;
-static xchar *wbuf1 = NULL;
-static char *buf = NULL;
-static int buf_len = 0;
-static unsigned short *wbufa = NULL;
-
-// FIXME: This should *maybe* return 'const char *' instead of 'char *'
-char *fl_utf8_to_locale(const char *s, int len, UINT codepage)
-{
-  if (!s) return (char *)"";
-  int l = 0;
-  unsigned wn = fl_utf8toUtf16(s, len, NULL, 0); // Query length
-  wn = wn * 2 + 1;
-  if (wn >= (unsigned)buf_len) {
-    buf_len = wn;
-    buf = (char*) realloc(buf, buf_len);
-    wbufa = (unsigned short*) realloc(wbufa, buf_len * sizeof(short));
-  }
-  if (codepage < 1) codepage = fl_codepage;
-  l = fl_utf8toUtf16(s, len, wbufa, wn); // Convert string
-  wbufa[l] = 0;
-  buf[l] = 0;
-  l = WideCharToMultiByte(codepage, 0, (WCHAR*)wbufa, l, buf, buf_len, NULL, NULL);
-  if (l < 0) l = 0;
-  buf[l] = 0;
-  return buf;
-}
-
-// FIXME: This should maybe return 'const char *' instead of 'char *'
-char *fl_locale_to_utf8(const char *s, int len, UINT codepage)
-{
-  if (!s) return (char *)"";
-  int l = 0;
-  if (buf_len < len * 5 + 1) {
-    buf_len = len * 5 + 1;
-    buf = (char*) realloc(buf, buf_len);
-    wbufa = (unsigned short*) realloc(wbufa, buf_len * sizeof(short));
-  }
-  if (codepage < 1) codepage = fl_codepage;
-  buf[l] = 0;
-
-  l = MultiByteToWideChar(codepage, 0, s, len, (WCHAR*)wbufa, buf_len);
-  if (l < 0) l = 0;
-  wbufa[l] = 0;
-  l = fl_utf8fromwc(buf, buf_len, (xchar*)wbufa, l);
-  buf[l] = 0;
-  return buf;
-}
-#endif
-
-/**
-  Converts UTF-8 string \p s to a local multi-byte character string.
-*/
-char * fl_utf2mbcs(const char *s)
-{
-  if (!s) return NULL;
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-
-  size_t l = strlen(s);
-  static char *buf = NULL;
-
-  unsigned wn = fl_utf8toUtf16(s, (unsigned) l, NULL, 0) + 7; // Query length
-  mbwbuf = (xchar*)realloc(mbwbuf, sizeof(xchar)*wn);
-  l = fl_utf8toUtf16(s, (unsigned) l, (unsigned short *)mbwbuf, wn); // Convert string
-  mbwbuf[l] = 0;
-
-  buf = (char*)realloc(buf, (unsigned) (l * 6 + 1));
-  l = (unsigned) wcstombs(buf, mbwbuf, (unsigned) l * 6);
-  buf[l] = 0;
-  return buf;
-#else
-  return (char*) s;
-#endif
-}
-
-/** Cross-platform function to get environment variables with a UTF-8 encoded
-  name or value.
-
-  This function is especially useful under the MSWindows platform where
-  non-ASCII environment variables are encoded as wide characters.
-  The returned value of the variable is encoded in UTF-8 as well.
-
-  On platforms other than MSWindows this function calls getenv directly.
-  The return value is returned as-is.
-
-  \param[in] v the UTF-8 encoded environment variable
-  \return  the environment variable in UTF-8 encoding, or NULL in case of error.
-*/
-
-char *fl_getenv(const char* v) {
-
-#if defined (WIN32) && !defined(__CYGWIN__)
-
-  size_t l =  strlen(v);
-  unsigned wn = fl_utf8toUtf16(v, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(v, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  xchar *ret = _wgetenv(wbuf);
-  static char *buf = NULL;
-  if (ret) {
-    l = (unsigned) wcslen(ret);
-    wn = fl_utf8fromwc(NULL, 0, ret, (unsigned) l) + 1; // query length
-    buf = (char*) realloc(buf, wn);
-    wn = fl_utf8fromwc(buf, wn, ret, (unsigned) l); // convert string
-    buf[wn] = 0;
-    return buf;
-  } else {
-    return NULL;
-  }
-
-#else
-
-  return getenv(v);
-
-#endif
-
-} // fl_getenv()
-
-
-/** Cross-platform function to open files with a UTF-8 encoded name.
-
- This function is especially useful under the MSWindows platform where the
- standard open() function fails with UTF-8 encoded non-ASCII filenames.
- \param f  the UTF-8 encoded filename
- \param oflags  other arguments are as in the standard open() function
- \return  a file descriptor upon successful completion, or -1 in case of error.
- \sa fl_fopen().
- */
-int fl_open(const char* f, int oflags, ...)
-{
-  int pmode;
-  va_list ap;
-  va_start(ap, oflags);
-  pmode = va_arg (ap, int);
-  va_end(ap);
-
-#if defined (WIN32) && !defined(__CYGWIN__)
-
-  unsigned l = (unsigned) strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  if (pmode == -1) return _wopen(wbuf, oflags);
-  else return _wopen(wbuf, oflags, pmode);
-
-#else
-
-  if (pmode == -1) return open(f, oflags);
-  else return open(f, oflags, pmode);
-
-#endif
-
-} // fl_open()
-
-
-/** Cross-platform function to open files with a UTF-8 encoded name.
-
-  This function is especially useful under the MSWindows platform where the
-  standard fopen() function fails with UTF-8 encoded non-ASCII filenames.
-  \param f  the UTF-8 encoded filename
-  \param mode  same as the second argument of the standard fopen() function
-  \return  a FILE pointer upon successful completion, or NULL in case of error.
-  \sa fl_open().
-*/
-FILE *fl_fopen(const char* f, const char *mode) {
-
-#if  defined (WIN32) && !defined(__CYGWIN__)
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  l = strlen(mode);
-  wn = fl_utf8toUtf16(mode, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf1 = (xchar*)realloc(wbuf1, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(mode, (unsigned) l, (unsigned short *)wbuf1, wn); // Convert string
-  wbuf1[wn] = 0;
-  return _wfopen(wbuf, wbuf1);
-
-#else
-
-  return fopen(f, mode);
-
-#endif
-
-} // fl_fopen()
-
-
-/** Cross-platform function to run a system command with a UTF-8 encoded string.
-
-  This function is especially useful under the MSWindows platform where
-  non-ASCII program (file) names must be encoded as wide characters.
-
-  On platforms other than MSWindows this function calls system() directly.
-
-  \param[in] cmd the UTF-8 encoded command string
-  \return the return value of _wsystem() on Windows or system() on other platforms.
-*/
-
-int fl_system(const char* cmd)
-{
-#if defined(WIN32) && !defined(__CYGWIN__)
-
-# ifdef __MINGW32__
-  return system(fl_utf2mbcs(cmd));
-# else
-  size_t l = strlen(cmd);
-  unsigned wn = fl_utf8toUtf16(cmd, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(cmd, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wsystem(wbuf);
-# endif
-
-#else
-  return system(cmd);
-#endif
-}
-
-int fl_execvp(const char *file, char *const *argv)
-{
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-# ifdef __MINGW32__
-  return _execvp(fl_utf2mbcs(file), argv);
-# else
-  size_t l = strlen(file);
-  int i, n;
-  xchar **ar;
-  unsigned wn = fl_utf8toUtf16(file, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(file, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-
-  i = 0; n = 0;
-  while (argv[i]) {i++; n++;}
-  ar = (xchar**) malloc(sizeof(xchar*) * (n + 1));
-  i = 0;
-  while (i <= n) {
-    unsigned wn;
-    l = strlen(argv[i]);
-    wn = fl_utf8toUtf16(argv[i], (unsigned) l, NULL, 0) + 1; // Query length
-    ar[i] = (xchar *)malloc(sizeof(xchar)*wn);
-    wn = fl_utf8toUtf16(argv[i], (unsigned) l, (unsigned short *)ar[i], wn); // Convert string
-    ar[i][wn] = 0;
-    i++;
-  }
-  ar[n] = NULL;
-  _wexecvp(wbuf, ar);	// STR #3040
-  i = 0;
-  while (i <= n) {
-    free(ar[i]);
-    i++;
-  }
-  free(ar);
-  return -1;		// STR #3040
-# endif
-
-#else			// other platforms
-  return execvp(file, argv);
-#endif
-
-}
-
-/** Cross-platform function to set a files mode() with a UTF-8 encoded
-  name or value.
-
- This function is especially useful under the MSWindows platform where the
- standard chmod() function fails with UTF-8 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename
-  \param[in] mode the mode to set
-  \return    the return value of _wchmod() on Windows or chmod() on other platforms.
-*/
-int fl_chmod(const char* f, int mode) {
-
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wchmod(wbuf, mode);
-
-#else // other platforms
-
-  return chmod(f, mode);
-
-#endif
-
-} // fl_chmod()
-
-
-/** Cross-platform function to test a files access() with a UTF-8 encoded
-  name or value.
-
- This function is especially useful under the MSWindows platform where the
- standard access() function fails with UTF-8 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename
-  \param[in] mode the mode to test
-  \return    the return value of _waccess() on Windows or access() on other platforms.
-*/
-int fl_access(const char* f, int mode) {
-
-#if defined (WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _waccess(wbuf, mode);
-
-#else // other platforms
-
-  return access(f, mode);
-
-#endif
-
-} // fl_access()
-
-
-/** Cross-platform function to stat() a file using a UTF-8 encoded
-  name or value.
-
- This function is especially useful under the MSWindows platform where the
- standard stat() function fails with UTF-8 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename
-  \param     b the stat struct to populate
-  \return    the return value of _wstat() on Windows or stat() on other platforms.
-*/
-int fl_stat(const char* f, struct stat *b) {
-
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wstat(wbuf, (struct _stat*)b);
-
-#else // other platforms
-
-  return stat(f, b);
-
-#endif
-
-} // fl_stat()
-
-
-/** Cross-platform function to get the current working directory
-    as a UTF-8 encoded value.
-
- This function is especially useful under the MSWindows platform where the
- standard _wgetcwd() function returns UTF-16 encoded non-ASCII filenames.
-
-  \param     b the buffer to populate
-  \param     l the length of the buffer
-  \return    the CWD encoded as UTF-8.
-*/
-char *fl_getcwd(char* b, int l) {
-
-  if (b == NULL) {
-    b = (char*) malloc(l+1);
-  }
-
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-  static xchar *wbuf = NULL;
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar) * (l+1));
-  xchar *ret = _wgetcwd(wbuf, l);
-  if (ret) {
-    unsigned dstlen = l;
-    l = (int) wcslen(wbuf);
-    dstlen = fl_utf8fromwc(b, dstlen, wbuf, (unsigned) l);
-    b[dstlen] = 0;
-    return b;
-  } else {
-    return NULL;
-  }
-
-#else // other platforms
-
-  return getcwd(b, l);
-
-#endif
-
-} // fl_getcwd()
-
-
-/** Cross-platform function to unlink() (that is, delete) a file using
-    a UTF-8 encoded filename.
-
- This function is especially useful under the MSWindows platform where the
- standard function expects UTF-16 encoded non-ASCII filenames.
-
-  \param     f the filename to unlink
-  \return    the return value of _wunlink() on Windows or unlink() on other platforms.
-*/
-int fl_unlink(const char* f) {
-
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wunlink(wbuf);
-
-#else // other platforms
-
-  return unlink(f);
-
-#endif
-
-} // fl_unlink()
-
-
-/** Cross-platform function to create a directory with a UTF-8 encoded
-  name.
-
- This function is especially useful on the MSWindows platform where the
- standard _wmkdir() function expects UTF-16 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename
-  \param[in] mode the mode of the directory
-  \return    the return value of _wmkdir() on Windows or mkdir() on other platforms.
-*/
-int fl_mkdir(const char* f, int mode) {
-
-#if defined(WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wmkdir(wbuf);
-
-#else // other platforms
-
-  return mkdir(f, mode);
-
-#endif
-
-} // fl_mkdir()
-
-
-/** Cross-platform function to remove a directory with a UTF-8 encoded
-  name.
-
- This function is especially useful on the MSWindows platform where the
- standard _wrmdir() function expects UTF-16 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename to remove
-  \return    the return value of _wrmdir() on Windows or rmdir() on other platforms.
-*/
-int fl_rmdir(const char* f) {
-
-#if defined (WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  return _wrmdir(wbuf);
-
-#else
-
-  return rmdir(f);
-
-#endif
-
-} // fl_rmdir()
-
-
-/** Cross-platform function to rename a filesystem object using
-    UTF-8 encoded names.
-
- This function is especially useful on the MSWindows platform where the
- standard _wrename() function expects UTF-16 encoded non-ASCII filenames.
-
-  \param[in] f the UTF-8 encoded filename to change
-  \param[in] n the new UTF-8 encoded filename to set
-  \return    the return value of _wrename() on Windows or rename() on other platforms.
-*/
-int fl_rename(const char* f, const char *n) {
-
-#if defined (WIN32) && !defined(__CYGWIN__) // Windows
-
-  size_t l = strlen(f);
-  unsigned wn = fl_utf8toUtf16(f, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf = (xchar*)realloc(wbuf, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(f, (unsigned) l, (unsigned short *)wbuf, wn); // Convert string
-  wbuf[wn] = 0;
-  l = strlen(n);
-  wn = fl_utf8toUtf16(n, (unsigned) l, NULL, 0) + 1; // Query length
-  wbuf1 = (xchar*)realloc(wbuf1, sizeof(xchar)*wn);
-  wn = fl_utf8toUtf16(n, (unsigned) l, (unsigned short *)wbuf1, wn); // Convert string
-  wbuf1[wn] = 0;
-  return _wrename(wbuf, wbuf1);
-
-#else
-
-  return rename(f, n);
-
-#endif
-
-} // fl_rename()
-
-
-/** Cross-platform function to recursively create a path in the file system.
-
-  This function creates a \p path in the file system by recursively creating
-  all directories.
-*/
-char fl_make_path( const char *path ) {
-  if (fl_access(path, 0)) {
-    const char *s = strrchr( path, '/' );
-    if ( !s ) return 0;
-    size_t len = (size_t) (s-path);
-    char *p = (char*)malloc( len+1 );
-    memcpy( p, path, len );
-    p[len] = 0;
-    fl_make_path( p );
-    free( p );
-    fl_mkdir(path, 0700);
-  }
-  return 1;
-}
-
-/** Cross-platform function to create a path for the file in the file system.
-
-  This function strips the filename from the given \p path and creates
-  a path in the file system by recursively creating all directories.
-*/
-
-void fl_make_path_for_file( const char *path ) {
-
-  const char *s = strrchr( path, '/' );
-  if ( !s ) return;
-  size_t len =  (s-path);
-  char *p = (char*)malloc( len+1 );
-  memcpy( p, path, len );
-  p[len] = 0;
-  fl_make_path( p );
-  free( p );
-
-} // fl_make_path_for_file()
-
-/** @} */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/fl_vertex.cxx
+++ /dev/null
@@ -1,277 +1,0 @@
-//
-// "$Id$"
-//
-// Portable drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2011 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/**
-  \file fl_vertex.cxx
-  \brief  Portable drawing code for drawing arbitrary shapes with
-          simple 2D transformations.
-*/
-
-// Portable drawing code for drawing arbitrary shapes with
-// simple 2D transformations.  See also fl_arc.cxx
-
-// matt: the Quartz implementation purposely doesn't use the Quartz matrix
-//       operations for reasons of compatibility and maintainability
-
-#include <config.h>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <FL/Fl.H>
-#include <FL/math.h>
-#include <stdlib.h>
-
-void Fl_Graphics_Driver::push_matrix() {
-  if (sptr==matrix_stack_size)
-    Fl::error("fl_push_matrix(): matrix stack overflow.");
-  else
-    stack[sptr++] = m;
-}
-
-void Fl_Graphics_Driver::pop_matrix() {
-  if (sptr==0)
-    Fl::error("fl_pop_matrix(): matrix stack underflow.");
-  else 
-    m = stack[--sptr];
-}
-
-void Fl_Graphics_Driver::mult_matrix(double a, double b, double c, double d, double x, double y) {
-  matrix o;
-  o.a = a*m.a + b*m.c;
-  o.b = a*m.b + b*m.d;
-  o.c = c*m.a + d*m.c;
-  o.d = c*m.b + d*m.d;
-  o.x = x*m.a + y*m.c + m.x;
-  o.y = x*m.b + y*m.d + m.y;
-  m = o;
-}
-
-void Fl_Graphics_Driver::rotate(double d) {
-  if (d) {
-    double s, c;
-    if (d == 0) {s = 0; c = 1;}
-    else if (d == 90) {s = 1; c = 0;}
-    else if (d == 180) {s = 0; c = -1;}
-    else if (d == 270 || d == -90) {s = -1; c = 0;}
-    else {s = sin(d*M_PI/180); c = cos(d*M_PI/180);}
-    mult_matrix(c,-s,s,c,0,0);
-  }
-}
-
-void Fl_Graphics_Driver::begin_points() {n = 0; what = POINT_;}
-
-void Fl_Graphics_Driver::begin_line() {n = 0; what = LINE;}
-
-void Fl_Graphics_Driver::begin_loop() {n = 0; what = LOOP;}
-
-void Fl_Graphics_Driver::begin_polygon() {n = 0; what = POLYGON;}
-
-double Fl_Graphics_Driver::transform_x(double x, double y) {return x*m.a + y*m.c + m.x;}
-
-double Fl_Graphics_Driver::transform_y(double x, double y) {return x*m.b + y*m.d + m.y;}
-
-double Fl_Graphics_Driver::transform_dx(double x, double y) {return x*m.a + y*m.c;}
-
-double Fl_Graphics_Driver::transform_dy(double x, double y) {return x*m.b + y*m.d;}
-
-void Fl_Graphics_Driver::transformed_vertex0(COORD_T x, COORD_T y) {
-  if (!n || x != p[n-1].x || y != p[n-1].y) {
-    if (n >= p_size) {
-      p_size = p ? 2*p_size : 16;
-      p = (XPOINT*)realloc((void*)p, p_size*sizeof(*p));
-    }
-    p[n].x = x;
-    p[n].y = y;
-    n++;
-  }
-}
-
-void Fl_Graphics_Driver::transformed_vertex(double xf, double yf) {
-#ifdef __APPLE_QUARTZ__
-  transformed_vertex0(COORD_T(xf), COORD_T(yf));
-#else
-  transformed_vertex0(COORD_T(rint(xf)), COORD_T(rint(yf)));
-#endif
-}
-
-void Fl_Graphics_Driver::vertex(double x,double y) {
-  transformed_vertex0(COORD_T(x*m.a + y*m.c + m.x), COORD_T(x*m.b + y*m.d + m.y));
-}
-
-void Fl_Graphics_Driver::end_points() {
-#if defined(USE_X11)
-  if (n>1) XDrawPoints(fl_display, fl_window, fl_gc, p, n, 0);
-#elif defined(WIN32)
-  for (int i=0; i<n; i++) SetPixel(fl_gc, p[i].x, p[i].y, fl_RGB());
-#elif defined(__APPLE_QUARTZ__)
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, true);
-  for (int i=0; i<n; i++) { 
-    CGContextMoveToPoint(fl_gc, p[i].x, p[i].y);
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-    CGContextStrokePath(fl_gc);
-  }
-  if (fl_quartz_line_width_ > 1.5f) CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::end_line() {
-  if (n < 2) {
-    end_points();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>1) XDrawLines(fl_display, fl_window, fl_gc, p, n, 0);
-#elif defined(WIN32)
-  if (n>1) Polyline(fl_gc, p, n);
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++)
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextStrokePath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::fixloop() {  // remove equal points from closed path
-  while (n>2 && p[n-1].x == p[0].x && p[n-1].y == p[0].y) n--;
-}
-
-void Fl_Graphics_Driver::end_loop() {
-  fixloop();
-  if (n>2) transformed_vertex((COORD_T)p[0].x, (COORD_T)p[0].y);
-  end_line();
-}
-
-void Fl_Graphics_Driver::end_polygon() {
-  fixloop();
-  if (n < 3) {
-    end_line();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, Convex, 0);
-#elif defined(WIN32)
-  if (n>2) {
-    SelectObject(fl_gc, fl_brush());
-    Polygon(fl_gc, p, n);
-  }
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++) 
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-void Fl_Graphics_Driver::begin_complex_polygon() {
-  begin_polygon();
-  gap_ = 0;
-#if defined(WIN32)
-  numcount = 0;
-#endif
-}
-
-void Fl_Graphics_Driver::gap() {
-  while (n>gap_+2 && p[n-1].x == p[gap_].x && p[n-1].y == p[gap_].y) n--;
-  if (n > gap_+2) {
-    transformed_vertex((COORD_T)p[gap_].x, (COORD_T)p[gap_].y);
-#if defined(WIN32)
-    counts[numcount++] = n-gap_;
-#endif
-    gap_ = n;
-  } else {
-    n = gap_;
-  }
-}
-
-void Fl_Graphics_Driver::end_complex_polygon() {
-  gap();
-  if (n < 3) {
-    end_line();
-    return;
-  }
-#if defined(USE_X11)
-  if (n>2) XFillPolygon(fl_display, fl_window, fl_gc, p, n, 0, 0);
-#elif defined(WIN32)
-  if (n>2) {
-    SelectObject(fl_gc, fl_brush());
-    PolyPolygon(fl_gc, p, counts, numcount);
-  }
-#elif defined(__APPLE_QUARTZ__)
-  if (n<=1) return;
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextMoveToPoint(fl_gc, p[0].x, p[0].y);
-  for (int i=1; i<n; i++)
-    CGContextAddLineToPoint(fl_gc, p[i].x, p[i].y);
-  CGContextClosePath(fl_gc);
-  CGContextFillPath(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-// shortcut the closed circles so they use XDrawArc:
-// warning: these do not draw rotated ellipses correctly!
-// See fl_arc.c for portable version.
-
-void Fl_Graphics_Driver::circle(double x, double y,double r) {
-  double xt = transform_x(x,y);
-  double yt = transform_y(x,y);
-  double rx = r * (m.c ? sqrt(m.a*m.a+m.c*m.c) : fabs(m.a));
-  double ry = r * (m.b ? sqrt(m.b*m.b+m.d*m.d) : fabs(m.d));
-  int llx = (int)rint(xt-rx);
-  int w = (int)rint(xt+rx)-llx;
-  int lly = (int)rint(yt-ry);
-  int h = (int)rint(yt+ry)-lly;
-
-#if defined(USE_X11)
-  (what == POLYGON ? XFillArc : XDrawArc)
-    (fl_display, fl_window, fl_gc, llx, lly, w, h, 0, 360*64);
-#elif defined(WIN32)
-  if (what==POLYGON) {
-    SelectObject(fl_gc, fl_brush());
-    Pie(fl_gc, llx, lly, llx+w, lly+h, 0,0, 0,0); 
-  } else
-    Arc(fl_gc, llx, lly, llx+w, lly+h, 0,0, 0,0); 
-#elif defined(__APPLE_QUARTZ__)
-  // Quartz warning: circle won't scale to current matrix!
-  // Last argument must be 0 (counter-clockwise) or it draws nothing under __LP64__ !!!!
-  CGContextSetShouldAntialias(fl_gc, true);
-  CGContextAddArc(fl_gc, xt, yt, (w+h)*0.25f, 0, 2.0f*M_PI, 0);
-  (what == POLYGON ? CGContextFillPath : CGContextStrokePath)(fl_gc);
-  CGContextSetShouldAntialias(fl_gc, false);
-#else
-# error unsupported platform
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/flstring.c
+++ /dev/null
@@ -1,115 +1,0 @@
-/*
- * "$Id$"
- *
- * BSD string functions for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include "flstring.h"
-
-
-/*
- * 'fl_strlcat()' - Safely concatenate two strings.
- */
-
-size_t				/* O - Length of string */
-fl_strlcat(char       *dst,	/* O - Destination string */
-           const char *src,	/* I - Source string */
-	   size_t     size) {	/* I - Size of destination string buffer */
-  size_t	srclen;		/* Length of source string */
-  size_t	dstlen;		/* Length of destination string */
-
-
- /*
-  * Figure out how much room is left...
-  */
-
-  dstlen = strlen(dst);
-  size   -= dstlen + 1;
-
-  if (!size) return (dstlen);	/* No room, return immediately... */
-
- /*
-  * Figure out how much room is needed...
-  */
-
-  srclen = strlen(src);
-
- /*
-  * Copy the appropriate amount...
-  */
-
-  if (srclen > size) srclen = size;
-
-  memcpy(dst + dstlen, src, srclen);
-  dst[dstlen + srclen] = '\0';
-
-  return (dstlen + srclen);
-}
-
-
-/*
- * 'fl_strlcpy()' - Safely copy two strings.
- */
-
-size_t				/* O - Length of string */
-fl_strlcpy(char       *dst,	/* O - Destination string */
-           const char *src,	/* I - Source string */
-	   size_t      size) {	/* I - Size of destination string buffer */
-  size_t	srclen;		/* Length of source string */
-
-
- /*
-  * Figure out how much room is needed...
-  */
-
-  size --;
-
-  srclen = strlen(src);
-
- /*
-  * Copy the appropriate amount...
-  */
-
-  if (srclen > size) srclen = size;
-
-  memcpy(dst, src, srclen);
-  dst[srclen] = '\0';
-
-  return (srclen);
-}
-
-#define C_RANGE(c,l,r) ( (c) >= (l) && (c) <= (r) )
-
-/**
- * locale independent ascii oriented case cmp
- * returns 0 if string successfully compare, -1 if s<t, +1 if s>t
- */
-int fl_ascii_strcasecmp(const char *s, const char *t) {
-  if (!s || !t) return (s==t ? 0 : (!s ? -1 : +1));
-  
-  for(;*s && *t; s++,t++) {
-    if (*s == *t) continue;
-    if (*s < *t) {
-      if ( (*s+0x20)!=*t || !C_RANGE(*s,'A','Z') ) return -1;
-    } else { 	/* (*s > *t) */
-      if ( (*s-0x20)!=*t || !C_RANGE(*s,'a','z') ) return +1;
-    }
-  }
-  return (*s==*t) ? 0 : (*t ? -1 : +1);
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/flstring.h
+++ /dev/null
@@ -1,101 +1,0 @@
-/*
- * "$Id$"
- *
- * Common string header file for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef flstring_h
-#  define flstring_h
-
-#  include <FL/Fl_Export.H>
-#  include <config.h>
-#  include <stdio.h>
-#  include <stdarg.h>
-#  include <string.h>
-#  ifdef HAVE_STRINGS_H
-#    include <strings.h>
-#  endif /* HAVE_STRINGS_H */
-#  include <ctype.h>
-
-/*
- * Apparently Unixware defines "index" to strchr (!) rather than
- * providing a proper entry point or not providing the (obsolete)
- * BSD function.  Make sure index is not defined...
- */
-
-#  ifdef index
-#    undef index
-#  endif /* index */
-
-#  if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
-#    define strcasecmp(s,t)	_stricmp((s), (t))
-#    define strncasecmp(s,t,n)	_strnicmp((s), (t), (n))
-/* Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
- * on Windows, which is supposed to be POSIX compliant...  Some of these
- * functions are also defined in ISO C99...
- */
-#    ifndef __WATCOMC__
-#      define strdup _strdup
-#      define unlink _unlink
-#    endif /* !__WATCOMC__ */
-#  elif defined(__EMX__)
-#    define strcasecmp(s,t)	stricmp((s), (t))
-#    define strncasecmp(s,t,n)	strnicmp((s), (t), (n))
-#  endif /* WIN32 */
-
-#  ifdef __cplusplus
-extern "C" {
-#  endif /* __cplusplus */
-
-FL_EXPORT extern int fl_snprintf(char *, size_t, const char *, ...);
-#  ifndef HAVE_SNPRINTF
-#    define snprintf fl_snprintf
-#  endif /* !HAVE_SNPRINTF */
-
-FL_EXPORT extern int fl_vsnprintf(char *, size_t, const char *, va_list ap);
-#  ifndef HAVE_VSNPRINTF
-#    define vsnprintf fl_vsnprintf
-#  endif /* !HAVE_VSNPRINTF */
-
-/*
- * strlcpy() and strlcat() are some really useful BSD string functions
- * that work the way strncpy() and strncat() *should* have worked.
- */
-
-FL_EXPORT extern size_t fl_strlcat(char *, const char *, size_t);
-#  ifndef HAVE_STRLCAT
-#    define strlcat fl_strlcat
-#  endif /* !HAVE_STRLCAT */
-
-FL_EXPORT extern size_t fl_strlcpy(char *, const char *, size_t);
-#  ifndef HAVE_STRLCPY
-#    define strlcpy fl_strlcpy
-#  endif /* !HAVE_STRLCPY */
-
-/*
- * locale independent ascii compare, does not introduce locale 
- * pbs as w/  case cmp 
- */
-FL_EXPORT extern int fl_ascii_strcasecmp(const char *s, const char *t);
-
-#  ifdef __cplusplus
-}
-#  endif /* __cplusplus */
-
-#endif /* !flstring_h */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/forms_bitmap.cxx
+++ /dev/null
@@ -1,44 +1,0 @@
-//
-// "$Id$"
-//
-// Forms compatible bitmap function for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/forms.H>
-/** Creates a bitmap widget from a box type, position, size and optional label specification */
-Fl_FormsBitmap::Fl_FormsBitmap(
-  Fl_Boxtype t, int X, int Y, int W, int H, const char* l)
-: Fl_Widget(X, Y, W, H, l) {
-  box(t);
-  b = 0;
-  color(FL_BLACK);
-  align(FL_ALIGN_BOTTOM);
-}
-/** Sets a new bitmap bits with size W,H. Deletes the previous one.*/
-void Fl_FormsBitmap::set(int W, int H, const uchar *bits) {
-  delete b;
-  bitmap(new Fl_Bitmap(bits, W, H));
-}
-
-/** Draws the bitmap and its associated box. */
-void Fl_FormsBitmap::draw() {
-  draw_box(box(), selection_color());
-  if (b) {fl_color(color()); b->draw(x(), y(), w(), h());}
-  draw_label();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/forms_compatability.cxx
+++ /dev/null
@@ -1,204 +1,0 @@
-//
-// "$Id$"
-//
-// Forms compatibility functions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Forms library compatibility functions.
-// Many more functions are defined as inlines in forms.h!
-
-#include <FL/forms.H>
-#include <stdlib.h>
-
-char fl_flip = 2;
-void fl_end_form() {
-  while (Fl_Group::current()) Fl_Group::current()->forms_end();
-}
-void Fl_Group::forms_end() {
-  // set the dimensions of a group to surround contents
-  if (children() && !w()) {
-    Fl_Widget*const* a = array();
-    Fl_Widget* o = *a++;
-    int rx = o->x();
-    int ry = o->y();
-    int rw = rx+o->w();
-    int rh = ry+o->h();
-    for (int i=children_-1; i--;) {
-      o = *a++;
-      if (o->x() < rx) rx = o->x();
-      if (o->y() < ry) ry = o->y();
-      if (o->x()+o->w() > rw) rw = o->x()+o->w();
-      if (o->y()+o->h() > rh) rh = o->y()+o->h();
-    }
-    x(rx);
-    y(ry);
-    w(rw-rx);
-    h(rh-ry);
-  }
-  // flip all the children's coordinate systems:
-  if (fl_flip) {
-    Fl_Widget* o = (type()>=FL_WINDOW) ? this : window();
-    int Y = o->h();
-    Fl_Widget*const* a = array();
-    for (int i=children(); i--;) {
-      Fl_Widget* ow = *a++;
-      int newy = Y-ow->y()-ow->h();
-      ow->y(newy);
-    }
-  }
-  end();
-}
-
-static int initargc;
-static char **initargv;
-
-void fl_initialize(int *argc, char **argv, const char *, FL_CMD_OPT *, int) {
-  initargc = *argc;
-  initargv = new char*[*argc+1];
-  int i,j;
-  for (i=0; i<=*argc; i++) initargv[i] = argv[i];
-  for (i=j=1; i<*argc; ) {
-    if (Fl::arg(*argc,argv,i));
-    else argv[j++] = argv[i++];
-  }
-  argv[j] = 0;
-  *argc = j;
-  if (fl_flip==2) fl_flip = 0;
-}
-
-char fl_modal_next; // set by fl_freeze_forms()
-
-void fl_show_form(Fl_Window *f,int place,int b,const char *n) {
-
-  f->label(n);
-  if (!b) f->clear_border();
-  if (fl_modal_next || b==FL_TRANSIENT) {f->set_modal(); fl_modal_next = 0;}
-
-  if (place & FL_PLACE_MOUSE) f->hotspot(f);
-
-  if (place & FL_PLACE_CENTER) {
-    int scr_x, scr_y, scr_w, scr_h;
-    Fl::screen_xywh(scr_x, scr_y, scr_w, scr_h);
-    f->position(scr_x+(scr_w-f->w())/2, scr_y+(scr_h-f->h())/2);
-  }
-
-  if (place & FL_PLACE_FULLSCREEN)
-    f->fullscreen();
-
-  if (place & (FL_PLACE_POSITION | FL_PLACE_GEOMETRY))
-    f->position(
-      (f->x() < 0) ? Fl::w()-f->w()+f->x()-1 : f->x(),
-      (f->y() < 0) ? Fl::h()-f->h()+f->y()-1 : f->y());
-
-// if (place & FL_PLACE_ASPECT) {
-// this is not yet implemented
-// it can be done by setting size_range().
-
-  if (place == FL_PLACE_FREE || place == FL_PLACE_SIZE)
-    f->free_position();
-
-  if (place == FL_PLACE_FREE || place & FL_FREE_SIZE)
-    if (!f->resizable()) f->resizable(f);
-
-  if (initargc) {f->show(initargc,initargv); initargc = 0;}
-  else f->show();
-}
-
-Fl_Widget *fl_do_forms(void) {
-  Fl_Widget *obj;
-  while (!(obj = Fl::readqueue())) if (!Fl::wait()) exit(0);
-  return obj;
-}
-
-Fl_Widget *fl_check_forms() {
-  Fl::check();
-  return Fl::readqueue();
-}
-
-void fl_set_graphics_mode(int /*r*/,int /*d*/) {}
-
-#ifndef FL_DOXYGEN // FIXME: suppress doxygen warning
-void Fl_FormsText::draw() {
-  draw_box();
-  align(align()|FL_ALIGN_INSIDE); // questionable method of compatibility
-  draw_label();
-}
-#endif
-
-// Create a forms button by selecting correct fltk subclass:
-
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Repeat_Button.H>
-
-Fl_Button *fl_add_button(uchar t,int x,int y,int w,int h,const char *l) {
-  Fl_Button *b;
-  switch (t) {
-  case FL_RETURN_BUTTON:
-  case FL_HIDDEN_RET_BUTTON:
-    b = new Fl_Return_Button(x,y,w,h,l);
-    break;
-  case FL_TOUCH_BUTTON:
-    b = new Fl_Repeat_Button(x,y,w,h,l);
-    break;
-  default:
-    b = new Fl_Button(x,y,w,h,l);
-  }
-  switch (t) {
-  case FL_TOGGLE_BUTTON:
-  case FL_RADIO_BUTTON:
-    b->type(t);
-    break;
-  case FL_HIDDEN_BUTTON:
-  case FL_HIDDEN_RET_BUTTON:
-    b->type(FL_HIDDEN_BUTTON);
-    break;
-  case FL_INOUT_BUTTON:
-    b->when(FL_WHEN_CHANGED);
-    break;
-  }
-  return b;
-}
-
-void fl_show_message(const char *q1,const char *q2,const char *q3) {
-  fl_message("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"");
-}
-
-void fl_show_alert(const char *q1,const char *q2,const char *q3,int) {
-  fl_alert("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"");
-}
-
-int fl_show_question(const char *q1,const char *q2,const char *q3) {
-  return fl_choice("%s\n%s\n%s", "No", "Yes", 0L, q1?q1:"", q2?q2:"", q3?q3:"");
-}
-
-int fl_show_choice(
-  const char *q1,
-  const char *q2,
-  const char *q3,
-  int, // number of buttons, ignored
-  const char *b0,
-  const char *b1,
-  const char *b2) {
-  return fl_choice("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"", b0,b1,b2)+1;
-}
-
-char *fl_show_simple_input(const char *str1, const char *defstr) {
-  const char *r = fl_input("%s", defstr, str1);
-  return (char *)(r ? r : defstr);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/forms_free.cxx
+++ /dev/null
@@ -1,105 +1,0 @@
-//
-// "$Id$"
-//
-// Forms free widget routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulation of the Forms "free" widget.
-// This emulation allows the free demo to run, and has allowed
-// me to port several other programs, but it is in no way
-// complete.
-
-#include <FL/Fl.H>
-#include <FL/Fl_Free.H>
-
-void Fl_Free::step(void *v) {
-  Fl_Free *f = (Fl_Free *)v;
-  int old_event = Fl::e_number;
-  f->handle(Fl::e_number == FL_STEP);
-  Fl::e_number = old_event;
-  Fl::add_timeout(.01,step,v);
-}
-
-/**
-  Create a new Fl_Free widget with type, position, size, label and handler.
-  \param[in] t type
-  \param[in] X, Y, W, H position and size
-  \param[in] L widget label
-  \param[in] hdl handler function
-
-  The constructor takes both the type and the handle function. The handle
-  function should be declared as follows:
-  \code
-  int handle_function(Fl_Widget *w,
-                      int       event,
-     	              float     event_x,
-    		      float     event_y,
-    		      char      key)
-  \endcode
-  This function is called from the handle() method in response to most
-  events, and is called by the draw() method.
-
-  The event argument contains the event type:
-  \code
-  // old event names for compatibility:
-  #define FL_MOUSE		FL_DRAG
-  #define FL_DRAW		0
-  #define FL_STEP		9
-  #define FL_FREEMEM		12
-  #define FL_FREEZE		FL_UNMAP
-  #define FL_THAW		FL_MAP
-  \endcode
-*/
-Fl_Free::Fl_Free(uchar t,int X, int Y, int W, int H,const char *L,
-		 FL_HANDLEPTR hdl) :
-Fl_Widget(X,Y,W,H,L) {
-  type(t);
-  hfunc = hdl;
-  if (t == FL_SLEEPING_FREE) set_flag(INACTIVE);
-  if (t == FL_CONTINUOUS_FREE || t == FL_ALL_FREE)
-    Fl::add_timeout(.01,step,this);
-}
-
-/**
-  The destructor will call the handle function with the event FL_FREE_MEM.
-*/
-Fl_Free::~Fl_Free() {
-  Fl::remove_timeout(step,this);
-  hfunc(this,FL_FREEMEM,0,0,0);
-}
-
-void Fl_Free::draw() {hfunc(this,FL_DRAW,0,0,0);}
-
-int Fl_Free::handle(int e) {
-  char key = Fl::event_key();
-  switch (e) {
-  case FL_FOCUS:
-    if (type()!=FL_INPUT_FREE && type()!=FL_ALL_FREE) return 0;
-    break;
-  case FL_PUSH:
-  case FL_DRAG:
-  case FL_RELEASE:
-    key = 4-Fl::event_button();
-    break;
-  case FL_SHORTCUT:
-    return 0;
-  }
-  if (hfunc(this, e, float(Fl::event_x()), float(Fl::event_y()), key)) do_callback();
-  return 1;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/forms_fselect.cxx
+++ /dev/null
@@ -1,58 +1,0 @@
-//
-// "$Id$"
-//
-// Forms file selection routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulate the Forms file chooser using the fltk file chooser.
-
-#include <FL/forms.H>
-#include "flstring.h"
-
-static char fl_directory[FL_PATH_MAX];
-static const char *fl_pattern;  // assumed passed value is static
-static char fl_filename[FL_PATH_MAX];
-
-char* fl_show_file_selector(const char *message,const char *dir,
-			    const char *pat,const char *fname) {
-  if (dir && dir[0]) strlcpy(fl_directory,dir,sizeof(fl_directory));
-  if (pat && pat[0]) fl_pattern = pat;
-  if (fname && fname[0]) strlcpy(fl_filename,fname,sizeof(fl_filename));
-  char *p = fl_directory+strlen(fl_directory);
-  if (p > fl_directory && *(p-1)!='/'
-#ifdef WIN32
-      && *(p-1)!='\\' && *(p-1)!=':'
-#endif
-      ) *p++ = '/';
-  strlcpy(p,fl_filename,sizeof(fl_directory) - (p - fl_directory));
-  const char *q = fl_file_chooser(message,fl_pattern,fl_directory);
-  if (!q) return 0;
-  strlcpy(fl_directory, q, sizeof(fl_directory));
-  p = (char *)fl_filename_name(fl_directory);
-  strlcpy(fl_filename, p, sizeof(fl_filename));
-  if (p > fl_directory+1) p--;
-  *p = 0;
-  return (char *)q;
-}
-
-char*	fl_get_directory() {return fl_directory;}
-
-char*	fl_get_pattern() {return (char *)fl_pattern;}
-
-char*	fl_get_filename() {return fl_filename;}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/forms_pixmap.cxx
+++ /dev/null
@@ -1,54 +1,0 @@
-//
-// "$Id$"
-//
-// Forms pixmap drawing routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/forms.H>
-
-/**
-  Creates a new Fl_FormsPixmap widget using the given box type, position,
-  size and label string.
-  \param[in] t box type
-  \param[in] X, Y, W, H position and size
-  \param[in] L widget label, default is no label
-*/
-Fl_FormsPixmap::Fl_FormsPixmap(
-  Fl_Boxtype t, int X, int Y, int W, int H, const char* L)
-: Fl_Widget(X, Y, W, H, L) {
-  box(t);
-  b = 0;
-  color(FL_BLACK);
-  align(FL_ALIGN_BOTTOM);
-}
-
-/**
-  Set/create the internal pixmap using raw data.
-  \param[in] bits raw data
-*/
-void Fl_FormsPixmap::set(char*const* bits) {
-  delete b;
-  b = new Fl_Pixmap(bits);
-}
-
-void Fl_FormsPixmap::draw() {
-  draw_box(box(), selection_color());
-  if (b) {fl_color(color()); b->draw(x(), y(), w(), h());}
-  draw_label();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/forms_timer.cxx
+++ /dev/null
@@ -1,178 +1,0 @@
-//
-// "$Id$"
-//
-// Forms timer object for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulate the Forms Timer object
-// You don't want to use this if you just want a timeout, call
-// Fl::add_timeout directly!
-
-#include <FL/Fl.H>
-#include <FL/Fl_Timer.H>
-#include <FL/fl_draw.H>
-#include <FL/forms.H>
-#ifdef WIN32
-#  ifdef __MWERKS__
-#    include <time.h>
-#  else
-#    include <sys/types.h> 
-#    include <sys/timeb.h>
-#  endif
-#else
-#  include <time.h>
-#  include <sys/time.h>
-#endif
-#include <stdio.h>
-
-#define FL_TIMER_BLINKRATE	0.2
-
-void fl_gettime(long* sec, long* usec) {
-#ifdef WIN32
-# ifdef __MWERKS__
-  time_t localTime = time(NULL);
-  struct tm *now = localtime(&localTime);
-  *sec = now->tm_sec + 60*now->tm_min + 3600*now->tm_hour + 24*3600*now->tm_yday;
-  *usec = 0;
-# else
-  struct timeb tp;
-  ftime(&tp);
-  *sec = (long) tp.time;
-  *usec = tp.millitm * 1000;
-# endif
-#else
-  struct timeval tp;
-  struct timezone tzp;
-  gettimeofday(&tp, &tzp);
-  *sec = tp.tv_sec;
-  *usec = tp.tv_usec;
-#endif
-}
-
-void Fl_Timer::draw() {
-  int tt;
-  Fl_Color col;
-  char str[32];
-  if (!on || delay>0.0)
-    col = color();
-  else if ((int) (delay / FL_TIMER_BLINKRATE) % 2)
-    col = color();
-  else
-    col = selection_color();
-  draw_box(box(), col);
-  if (type() == FL_VALUE_TIMER && delay>0.0) {
-    double d = direction_ ? total-delay : delay;
-    if (d < 60.0)
-      sprintf(str, "%.1f", d);
-    else {
-      tt = (int) ((d+0.05) / 60.0);
-      sprintf(str, "%d:%04.1f", tt, d - 60.0 * tt);
-    }
-    fl_font(labelfont(), labelsize());
-    fl_color(labelcolor());
-    fl_draw(str, x(), y(), w(), h(), FL_ALIGN_CENTER);
-  } else
-    draw_label();
-}
-
-void Fl_Timer::stepcb(void* v) {
-  ((Fl_Timer*)v)->step();
-}
-
-void Fl_Timer::step() {
-  if (!on) return;
-  double lastdelay = delay;
-  long sec, usec; fl_gettime(&sec, &usec);
-  delay -= (double) (sec - lastsec) + (double) (usec - lastusec) / 1000000.0;
-  lastsec = sec; lastusec = usec;
-  if (lastdelay > 0.0 && delay <= 0.0) {
-    if (type() == FL_HIDDEN_TIMER) {
-      on = 0;
-      delay = 0;
-    } else {
-      redraw();
-      Fl::add_timeout(FL_TIMER_BLINKRATE, stepcb, this);
-    }
-    set_changed();
-    do_callback();
-  } else {
-    if (type() == FL_VALUE_TIMER) redraw();
-    Fl::add_timeout(FL_TIMER_BLINKRATE, stepcb, this);
-  }
-}
-
-int Fl_Timer::handle(int event) {
-  if (event == FL_RELEASE && delay <= 0) value(0.0);
-  return 0;
-}
-
-/**
- Destroys the timer and removes the timeout.
-*/
-Fl_Timer::~Fl_Timer() {
-  Fl::remove_timeout(stepcb, this);
-}
-
-/**
-  Creates a new Fl_Timer widget using the given type, position,
-  size, and label string. The type parameter can be any of the
-  following symbolic constants:
-
-  \li	FL_NORMAL_TIMER - The timer just does the callback and
-	displays the string "Timer" in the widget.
-  \li	FL_VALUE_TIMER - The timer does the callback and displays
-	the current timer value in the widget.
-  \li	FL_HIDDEN_TIMER - The timer just does the callback and
-	does not display anything.
-*/
-Fl_Timer::Fl_Timer(uchar t, int X, int Y, int W, int H, const char* l)
-
-: Fl_Widget(X, Y, W, H, l) {
-  box(FL_DOWN_BOX);
-  selection_color(FL_RED);
-  delay = 0;
-  on = 0;
-  direction_ = 0;
-  type(t);
-  if (t == FL_HIDDEN_TIMER) clear_visible();
-  if (t == FL_VALUE_TIMER) align(FL_ALIGN_LEFT);
-}
-/** Sets the current timer value */
-void Fl_Timer::value(double d) {
-  delay = total = d;
-  on = (d > 0.0);
-  fl_gettime(&(lastsec), &(lastusec));
-  if (type() != FL_HIDDEN_TIMER) redraw();
-  Fl::remove_timeout(stepcb, this);
-  if (on) Fl::add_timeout(FL_TIMER_BLINKRATE, stepcb, this);
-}
-
-/** Gets or sets whether the timer is suspended.*/
-void Fl_Timer::suspended(char d) {
-  if (!d) {
-    if (on) return;
-    on = (delay > 0.0);
-    fl_gettime(&(lastsec), &(lastusec));
-    if (on) Fl::add_timeout(FL_TIMER_BLINKRATE, stepcb, this);
-  } else {
-    if (!on) return;
-    on = 0;
-    Fl::remove_timeout(stepcb, this);
-  }
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/freeglut_geometry.cxx
+++ /dev/null
@@ -1,1110 +1,0 @@
-/*
- * freeglut_geometry.c
- *
- * Freeglut geometry rendering methods.
- *
- * Copyright (c) 1999-2010 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 3 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include <FL/glut.H>
-#include <FL/math.h>
-#include <stdlib.h>
-
-/*
- * TODO BEFORE THE STABLE RELEASE:
- *
- * Following functions have been contributed by Andreas Umbach.
- *
- *      glutWireCube()          -- looks OK
- *      glutSolidCube()         -- OK
- *
- * Those functions have been implemented by John Fay.
- *
- *      glutWireTorus()         -- looks OK
- *      glutSolidTorus()        -- looks OK
- *      glutWireDodecahedron()  -- looks OK
- *      glutSolidDodecahedron() -- looks OK
- *      glutWireOctahedron()    -- looks OK
- *      glutSolidOctahedron()   -- looks OK
- *      glutWireTetrahedron()   -- looks OK
- *      glutSolidTetrahedron()  -- looks OK
- *      glutWireIcosahedron()   -- looks OK
- *      glutSolidIcosahedron()  -- looks OK
- *
- *  The Following functions have been updated by Nigel Stewart, based
- *  on FreeGLUT 2.0.0 implementations:
- *
- *      glutWireSphere()        -- looks OK
- *      glutSolidSphere()       -- looks OK
- *      glutWireCone()          -- looks OK
- *      glutSolidCone()         -- looks OK
- */
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Draws a wireframed cube. Code contributed by Andreas Umbach <marvin@dataway.ch>
- */
-void glutWireCube( GLdouble dSize )
-{
-    double size = dSize * 0.5;
-
-#   define V(a,b,c) glVertex3d( a size, b size, c size );
-#   define N(a,b,c) glNormal3d( a, b, c );
-
-    /* PWO: I dared to convert the code to use macros... */
-    glBegin( GL_LINE_LOOP ); N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+); glEnd();
-    glBegin( GL_LINE_LOOP ); N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-); glEnd();
-
-#   undef V
-#   undef N
-}
-
-/*
- * Draws a solid cube. Code contributed by Andreas Umbach <marvin@dataway.ch>
- */
-void glutSolidCube( GLdouble dSize )
-{
-    double size = dSize * 0.5;
-
-#   define V(a,b,c) glVertex3d( a size, b size, c size );
-#   define N(a,b,c) glNormal3d( a, b, c );
-
-    /* PWO: Again, I dared to convert the code to use macros... */
-    glBegin( GL_QUADS );
-        N( 1.0, 0.0, 0.0); V(+,-,+); V(+,-,-); V(+,+,-); V(+,+,+);
-        N( 0.0, 1.0, 0.0); V(+,+,+); V(+,+,-); V(-,+,-); V(-,+,+);
-        N( 0.0, 0.0, 1.0); V(+,+,+); V(-,+,+); V(-,-,+); V(+,-,+);
-        N(-1.0, 0.0, 0.0); V(-,-,+); V(-,+,+); V(-,+,-); V(-,-,-);
-        N( 0.0,-1.0, 0.0); V(-,-,+); V(-,-,-); V(+,-,-); V(+,-,+);
-        N( 0.0, 0.0,-1.0); V(-,-,-); V(-,+,-); V(+,+,-); V(+,-,-);
-    glEnd();
-
-#   undef V
-#   undef N
-}
-
-/*
- * Compute lookup table of cos and sin values forming a cirle
- *
- * Notes:
- *    It is the responsibility of the caller to free these tables
- *    The size of the table is (n+1) to form a connected loop
- *    The last entry is exactly the same as the first
- *    The sign of n can be flipped to get the reverse loop
- */
-
-static void fghCircleTable(double **sint,double **cost,const int n)
-{
-    int i;
-
-    /* Table size, the sign of n flips the circle direction */
-
-    const int size = abs(n);
-
-    /* Determine the angle between samples */
-
-    const double angle = 2*M_PI/(double)( ( n == 0 ) ? 1 : n );
-
-    /* Allocate memory for n samples, plus duplicate of first entry at the end */
-
-    *sint = (double *) calloc(sizeof(double), size+1);
-    *cost = (double *) calloc(sizeof(double), size+1);
-
-    /* Bail out if memory allocation fails, fgError never returns */
-
-    if (!(*sint) || !(*cost))
-    {
-      if (*sint) free(*sint);
-      if (*cost) free(*cost);
-      return;
-    }
-
-    /* Compute cos and sin around the circle */
-
-    (*sint)[0] = 0.0;
-    (*cost)[0] = 1.0;
-
-    for (i=1; i<size; i++)
-    {
-        (*sint)[i] = sin(angle*i);
-        (*cost)[i] = cos(angle*i);
-    }
-
-    /* Last sample is duplicate of the first */
-
-    (*sint)[size] = (*sint)[0];
-    (*cost)[size] = (*cost)[0];
-}
-
-/*
- * Draws a solid sphere
- */
-void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Adjust z and radius as stacks are drawn. */
-
-    double z0,z1;
-    double r0,r1;
-
-    /* Pre-computed circle */
-
-    double *sint1,*cost1;
-    double *sint2,*cost2;
-
-    fghCircleTable(&sint1,&cost1,-slices);
-    fghCircleTable(&sint2,&cost2,stacks*2);
-
-    /* The top stack is covered with a triangle fan */
-
-    z0 = 1.0;
-    z1 = cost2[(stacks>0)?1:0];
-    r0 = 0.0;
-    r1 = sint2[(stacks>0)?1:0];
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0,0,1);
-        glVertex3d(0,0,radius);
-
-        for (j=slices; j>=0; j--)
-        {
-            glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );
-            glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);
-        }
-
-    glEnd();
-
-    /* Cover each stack with a quad strip, except the top and bottom stacks */
-
-    for( i=1; i<stacks-1; i++ )
-    {
-        z0 = z1; z1 = cost2[i+1];
-        r0 = r1; r1 = sint2[i+1];
-
-        glBegin(GL_QUAD_STRIP);
-
-            for(j=0; j<=slices; j++)
-            {
-                glNormal3d(cost1[j]*r1,        sint1[j]*r1,        z1       );
-                glVertex3d(cost1[j]*r1*radius, sint1[j]*r1*radius, z1*radius);
-                glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );
-                glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);
-            }
-
-        glEnd();
-    }
-
-    /* The bottom stack is covered with a triangle fan */
-
-    z0 = z1;
-    r0 = r1;
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0,0,-1);
-        glVertex3d(0,0,-radius);
-
-        for (j=0; j<=slices; j++)
-        {
-            glNormal3d(cost1[j]*r0,        sint1[j]*r0,        z0       );
-            glVertex3d(cost1[j]*r0*radius, sint1[j]*r0*radius, z0*radius);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint1);
-    free(cost1);
-    free(sint2);
-    free(cost2);
-}
-
-/*
- * Draws a wire sphere
- */
-void glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Adjust z and radius as stacks and slices are drawn. */
-
-    double r;
-    double x,y,z;
-
-    /* Pre-computed circle */
-
-    double *sint1,*cost1;
-    double *sint2,*cost2;
-
-    fghCircleTable(&sint1,&cost1,-slices  );
-    fghCircleTable(&sint2,&cost2, stacks*2);
-
-    /* Draw a line loop for each stack */
-
-    for (i=1; i<stacks; i++)
-    {
-        z = cost2[i];
-        r = sint2[i];
-
-        glBegin(GL_LINE_LOOP);
-
-            for(j=0; j<=slices; j++)
-            {
-                x = cost1[j];
-                y = sint1[j];
-
-                glNormal3d(x,y,z);
-                glVertex3d(x*r*radius,y*r*radius,z*radius);
-            }
-
-        glEnd();
-    }
-
-    /* Draw a line loop for each slice */
-
-    for (i=0; i<slices; i++)
-    {
-        glBegin(GL_LINE_STRIP);
-
-            for(j=0; j<=stacks; j++)
-            {
-                x = cost1[i]*sint2[j];
-                y = sint1[i]*sint2[j];
-                z = cost2[j];
-
-                glNormal3d(x,y,z);
-                glVertex3d(x*radius,y*radius,z*radius);
-            }
-
-        glEnd();
-    }
-
-    /* Release sin and cos tables */
-
-    free(sint1);
-    free(cost1);
-    free(sint2);
-    free(cost2);
-}
-
-/*
- * Draws a solid cone
- */
-void glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks )
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z0,z1;
-    double r0,r1;
-
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Scaling factors for vertex normals */
-
-    const double cosn = ( height / sqrt ( height * height + base * base ));
-    const double sinn = ( base   / sqrt ( height * height + base * base ));
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Cover the circular base with a triangle fan... */
-
-    z0 = 0.0;
-    z1 = zStep;
-
-    r0 = base;
-    r1 = r0 - rStep;
-
-    glBegin(GL_TRIANGLE_FAN);
-
-        glNormal3d(0.0,0.0,-1.0);
-        glVertex3d(0.0,0.0, z0 );
-
-        for (j=0; j<=slices; j++)
-            glVertex3d(cost[j]*r0, sint[j]*r0, z0);
-
-    glEnd();
-
-    /* Cover each stack with a quad strip, except the top stack */
-
-    for( i=0; i<stacks-1; i++ )
-    {
-        glBegin(GL_QUAD_STRIP);
-
-            for(j=0; j<=slices; j++)
-            {
-                glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn);
-                glVertex3d(cost[j]*r0,   sint[j]*r0,   z0  );
-                glVertex3d(cost[j]*r1,   sint[j]*r1,   z1  );
-            }
-
-            z0 = z1; z1 += zStep;
-            r0 = r1; r1 -= rStep;
-
-        glEnd();
-    }
-
-    /* The top stack is covered with individual triangles */
-
-    glBegin(GL_TRIANGLES);
-
-        glNormal3d(cost[0]*sinn, sint[0]*sinn, cosn);
-
-        for (j=0; j<slices; j++)
-        {
-            glVertex3d(cost[j+0]*r0,   sint[j+0]*r0,   z0    );
-            glVertex3d(0,              0,              height);
-            glNormal3d(cost[j+1]*sinn, sint[j+1]*sinn, cosn  );
-            glVertex3d(cost[j+1]*r0,   sint[j+1]*r0,   z0    );
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire cone
- */
-void glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z = 0.0;
-    double r = base;
-
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-    const double rStep = base / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Scaling factors for vertex normals */
-
-    const double cosn = ( height / sqrt ( height * height + base * base ));
-    const double sinn = ( base   / sqrt ( height * height + base * base ));
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Draw the stacks... */
-
-    for (i=0; i<stacks; i++)
-    {
-        glBegin(GL_LINE_LOOP);
-
-            for( j=0; j<slices; j++ )
-            {
-                glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn);
-                glVertex3d(cost[j]*r,    sint[j]*r,    z   );
-            }
-
-        glEnd();
-
-        z += zStep;
-        r -= rStep;
-    }
-
-    /* Draw the slices */
-
-    r = base;
-
-    glBegin(GL_LINES);
-
-        for (j=0; j<slices; j++)
-        {
-            glNormal3d(cost[j]*sinn, sint[j]*sinn, cosn  );
-            glVertex3d(cost[j]*r,    sint[j]*r,    0.0   );
-            glVertex3d(0.0,          0.0,          height);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-
-/*
- * Draws a solid cylinder
- */
-void glutSolidCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-    double z0,z1;
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Cover the base and top */
-
-    glBegin(GL_TRIANGLE_FAN);
-        glNormal3d(0.0, 0.0, -1.0 );
-        glVertex3d(0.0, 0.0,  0.0 );
-        for (j=0; j<=slices; j++)
-          glVertex3d(cost[j]*radius, sint[j]*radius, 0.0);
-    glEnd();
-
-    glBegin(GL_TRIANGLE_FAN);
-        glNormal3d(0.0, 0.0, 1.0   );
-        glVertex3d(0.0, 0.0, height);
-        for (j=slices; j>=0; j--)
-          glVertex3d(cost[j]*radius, sint[j]*radius, height);
-    glEnd();
-
-    /* Do the stacks */
-
-    z0 = 0.0;
-    z1 = zStep;
-
-    for (i=1; i<=stacks; i++)
-    {
-        if (i==stacks)
-            z1 = height;
-
-        glBegin(GL_QUAD_STRIP);
-            for (j=0; j<=slices; j++ )
-            {
-                glNormal3d(cost[j],        sint[j],        0.0 );
-                glVertex3d(cost[j]*radius, sint[j]*radius, z0  );
-                glVertex3d(cost[j]*radius, sint[j]*radius, z1  );
-            }
-        glEnd();
-
-        z0 = z1; z1 += zStep;
-    }
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire cylinder
- */
-void glutWireCylinder(GLdouble radius, GLdouble height, GLint slices, GLint stacks)
-{
-    int i,j;
-
-    /* Step in z and radius as stacks are drawn. */
-
-          double z = 0.0;
-    const double zStep = height / ( ( stacks > 0 ) ? stacks : 1 );
-
-    /* Pre-computed circle */
-
-    double *sint,*cost;
-
-    fghCircleTable(&sint,&cost,-slices);
-
-    /* Draw the stacks... */
-
-    for (i=0; i<=stacks; i++)
-    {
-        if (i==stacks)
-            z = height;
-
-        glBegin(GL_LINE_LOOP);
-
-            for( j=0; j<slices; j++ )
-            {
-                glNormal3d(cost[j],        sint[j],        0.0);
-                glVertex3d(cost[j]*radius, sint[j]*radius, z  );
-            }
-
-        glEnd();
-
-        z += zStep;
-    }
-
-    /* Draw the slices */
-
-    glBegin(GL_LINES);
-
-        for (j=0; j<slices; j++)
-        {
-            glNormal3d(cost[j],        sint[j],        0.0   );
-            glVertex3d(cost[j]*radius, sint[j]*radius, 0.0   );
-            glVertex3d(cost[j]*radius, sint[j]*radius, height);
-        }
-
-    glEnd();
-
-    /* Release sin and cos tables */
-
-    free(sint);
-    free(cost);
-}
-
-/*
- * Draws a wire torus
- */
-void glutWireTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )
-{
-  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;
-  double *vertex, *normal;
-  int    i, j;
-  double spsi, cpsi, sphi, cphi ;
-
-  if ( nSides < 1 ) nSides = 1;
-  if ( nRings < 1 ) nRings = 1;
-
-  /* Allocate the vertices array */
-  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-
-  glPushMatrix();
-
-  dpsi =  2.0 * M_PI / (double)nRings ;
-  dphi = -2.0 * M_PI / (double)nSides ;
-  psi  = 0.0;
-
-  for( j=0; j<nRings; j++ )
-  {
-    cpsi = cos ( psi ) ;
-    spsi = sin ( psi ) ;
-    phi = 0.0;
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      cphi = cos ( phi ) ;
-      sphi = sin ( phi ) ;
-      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 2) =                    sphi * iradius  ;
-      *(normal + offset + 0) = cpsi * cphi ;
-      *(normal + offset + 1) = spsi * cphi ;
-      *(normal + offset + 2) =        sphi ;
-      phi += dphi;
-    }
-
-    psi += dpsi;
-  }
-
-  for( i=0; i<nSides; i++ )
-  {
-    glBegin( GL_LINE_LOOP );
-
-    for( j=0; j<nRings; j++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-    }
-
-    glEnd();
-  }
-
-  for( j=0; j<nRings; j++ )
-  {
-    glBegin(GL_LINE_LOOP);
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-    }
-
-    glEnd();
-  }
-
-  free ( vertex ) ;
-  free ( normal ) ;
-  glPopMatrix();
-}
-
-/*
- * Draws a solid torus
- */
-void glutSolidTorus( GLdouble dInnerRadius, GLdouble dOuterRadius, GLint nSides, GLint nRings )
-{
-  double  iradius = dInnerRadius, oradius = dOuterRadius, phi, psi, dpsi, dphi;
-  double *vertex, *normal;
-  int    i, j;
-  double spsi, cpsi, sphi, cphi ;
-
-  if ( nSides < 1 ) nSides = 1;
-  if ( nRings < 1 ) nRings = 1;
-
-  /* Increment the number of sides and rings to allow for one more point than surface */
-  nSides ++ ;
-  nRings ++ ;
-
-  /* Allocate the vertices array */
-  vertex = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-  normal = (double *)calloc( sizeof(double), 3 * nSides * nRings );
-
-  glPushMatrix();
-
-  dpsi =  2.0 * M_PI / (double)(nRings - 1) ;
-  dphi = -2.0 * M_PI / (double)(nSides - 1) ;
-  psi  = 0.0;
-
-  for( j=0; j<nRings; j++ )
-  {
-    cpsi = cos ( psi ) ;
-    spsi = sin ( psi ) ;
-    phi = 0.0;
-
-    for( i=0; i<nSides; i++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      cphi = cos ( phi ) ;
-      sphi = sin ( phi ) ;
-      *(vertex + offset + 0) = cpsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 1) = spsi * ( oradius + cphi * iradius ) ;
-      *(vertex + offset + 2) =                    sphi * iradius  ;
-      *(normal + offset + 0) = cpsi * cphi ;
-      *(normal + offset + 1) = spsi * cphi ;
-      *(normal + offset + 2) =        sphi ;
-      phi += dphi;
-    }
-
-    psi += dpsi;
-  }
-
-    glBegin( GL_QUADS );
-  for( i=0; i<nSides-1; i++ )
-  {
-    for( j=0; j<nRings-1; j++ )
-    {
-      int offset = 3 * ( j * nSides + i ) ;
-      glNormal3dv( normal + offset );
-      glVertex3dv( vertex + offset );
-      glNormal3dv( normal + offset + 3 );
-      glVertex3dv( vertex + offset + 3 );
-      glNormal3dv( normal + offset + 3 * nSides + 3 );
-      glVertex3dv( vertex + offset + 3 * nSides + 3 );
-      glNormal3dv( normal + offset + 3 * nSides );
-      glVertex3dv( vertex + offset + 3 * nSides );
-    }
-  }
-
-  glEnd();
-
-  free ( vertex ) ;
-  free ( normal ) ;
-  glPopMatrix();
-}
-
-/*
- *
- */
-void glutWireDodecahedron( void )
-{
-  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of
-   * of a cube.  The coordinates of the points are:
-   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )
-   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2  or
-   *       x = 0.61803398875 and z = 1.61803398875.
-   */
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_LINE_LOOP ) ;
-  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-}
-
-/*
- *
- */
-void glutSolidDodecahedron( void )
-{
-  /* Magic Numbers:  It is possible to create a dodecahedron by attaching two pentagons to each face of
-   * of a cube.  The coordinates of the points are:
-   *   (+-x,0, z); (+-1, 1, 1); (0, z, x )
-   * where x = (-1 + sqrt(5))/2, z = (1 + sqrt(5))/2 or
-   *       x = 0.61803398875 and z = 1.61803398875.
-   */
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0,  0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0,  0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0, -0.525731112119,  0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -0.61803398875, 0.0,  1.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.0, -0.525731112119, -0.850650808354 ) ; glVertex3d (  0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  0.61803398875, 0.0, -1.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.850650808354,  0.0,  0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0,  1.61803398875 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d (  0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d (  1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.850650808354,  0.0, -0.525731112119 ) ; glVertex3d ( -0.61803398875,  0.0, -1.61803398875 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875, 0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875, 0.0 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d (  1.0,  1.0, -1.0 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d (  1.0,  1.0,  1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d (  0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d (  1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d (  1.0, -1.0,  1.0 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d (  1.0, -1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.525731112119,  0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875,  0.61803398875,  0.0 ) ; glVertex3d ( -1.0,  1.0,  1.0 ) ; glVertex3d ( 0.0,  1.61803398875,  0.61803398875 ) ; glVertex3d ( 0.0,  1.61803398875, -0.61803398875 ) ; glVertex3d ( -1.0,  1.0, -1.0 ) ;
-  glEnd () ;
-  glBegin ( GL_POLYGON ) ;
-  glNormal3d ( -0.525731112119, -0.850650808354,  0.0 ) ; glVertex3d ( -1.61803398875, -0.61803398875,  0.0 ) ; glVertex3d ( -1.0, -1.0, -1.0 ) ; glVertex3d ( 0.0, -1.61803398875, -0.61803398875 ) ; glVertex3d ( 0.0, -1.61803398875,  0.61803398875 ) ; glVertex3d ( -1.0, -1.0,  1.0 ) ;
-  glEnd () ;
-}
-
-/*
- *
- */
-void glutWireOctahedron( void )
-{
-#define RADIUS    1.0f
-  glBegin( GL_LINE_LOOP );
-    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-  glEnd();
-#undef RADIUS
-}
-
-/*
- *
- */
-void glutSolidOctahedron( void )
-{
-#define RADIUS    1.0f
-  glBegin( GL_TRIANGLES );
-    glNormal3d( 0.577350269189, 0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d( 0.577350269189, 0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189, 0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-    glNormal3d( 0.577350269189,-0.577350269189,-0.577350269189); glVertex3d( RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189, 0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS ); glVertex3d( 0.0, RADIUS, 0.0 );
-    glNormal3d(-0.577350269189, 0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, RADIUS, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189, 0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0,-RADIUS, 0.0 ); glVertex3d( 0.0, 0.0, RADIUS );
-    glNormal3d(-0.577350269189,-0.577350269189,-0.577350269189); glVertex3d(-RADIUS, 0.0, 0.0 ); glVertex3d( 0.0, 0.0,-RADIUS ); glVertex3d( 0.0,-RADIUS, 0.0 );
-  glEnd();
-#undef RADIUS
-}
-
-/* Magic Numbers:  r0 = ( 1, 0, 0 )
- *                 r1 = ( -1/3, 2 sqrt(2) / 3, 0 )
- *                 r2 = ( -1/3, -sqrt(2) / 3, sqrt(6) / 3 )
- *                 r3 = ( -1/3, -sqrt(2) / 3, -sqrt(6) / 3 )
- * |r0| = |r1| = |r2| = |r3| = 1
- * Distance between any two points is 2 sqrt(6) / 3
- *
- * Normals:  The unit normals are simply the negative of the coordinates of the point not on the surface.
- */
-
-#define NUM_TETR_FACES     4
-
-static GLdouble tet_r[4][3] = { {             1.0,             0.0,             0.0 },
-                                { -0.333333333333,  0.942809041582,             0.0 },
-                                { -0.333333333333, -0.471404520791,  0.816496580928 },
-                                { -0.333333333333, -0.471404520791, -0.816496580928 } } ;
-
-static GLint tet_i[4][3] =  /* Vertex indices */
-{
-  { 1, 3, 2 }, { 0, 2, 3 }, { 0, 3, 1 }, { 0, 1, 2 }
-} ;
-
-/*
- *
- */
-void glutWireTetrahedron( void )
-{
-  glBegin( GL_LINE_LOOP ) ;
-    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;
-    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;
-    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;
-    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;
-  glEnd() ;
-}
-
-/*
- *
- */
-void glutSolidTetrahedron( void )
-{
-  glBegin( GL_TRIANGLES ) ;
-    glNormal3d ( -tet_r[0][0], -tet_r[0][1], -tet_r[0][2] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[2] ) ;
-    glNormal3d ( -tet_r[1][0], -tet_r[1][1], -tet_r[1][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[2] ) ; glVertex3dv ( tet_r[3] ) ;
-    glNormal3d ( -tet_r[2][0], -tet_r[2][1], -tet_r[2][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[3] ) ; glVertex3dv ( tet_r[1] ) ;
-    glNormal3d ( -tet_r[3][0], -tet_r[3][1], -tet_r[3][2] ) ; glVertex3dv ( tet_r[0] ) ; glVertex3dv ( tet_r[1] ) ; glVertex3dv ( tet_r[2] ) ;
-  glEnd() ;
-}
-
-/*
- *
- */
-double icos_r[12][3] = { { 1.0, 0.0, 0.0 },
-  {  0.447213595500,  0.894427191000, 0.0 }, {  0.447213595500,  0.276393202252, 0.850650808354 }, {  0.447213595500, -0.723606797748, 0.525731112119 }, {  0.447213595500, -0.723606797748, -0.525731112119 }, {  0.447213595500,  0.276393202252, -0.850650808354 },
-  { -0.447213595500, -0.894427191000, 0.0 }, { -0.447213595500, -0.276393202252, 0.850650808354 }, { -0.447213595500,  0.723606797748, 0.525731112119 }, { -0.447213595500,  0.723606797748, -0.525731112119 }, { -0.447213595500, -0.276393202252, -0.850650808354 },
-  { -1.0, 0.0, 0.0 } } ;
-int icos_v [20][3] = { { 0, 1, 2 }, { 0, 2, 3 }, { 0, 3, 4 }, { 0, 4, 5 }, { 0, 5, 1 },
-                       { 1, 8, 2 }, { 2, 7, 3 }, { 3, 6, 4 }, { 4, 10, 5 }, { 5, 9, 1 },
-                       { 1, 9, 8 }, { 2, 8, 7 }, { 3, 7, 6 }, { 4, 6, 10 }, { 5, 10, 9 },
-                       { 11, 9, 10 }, { 11, 8, 9 }, { 11, 7, 8 }, { 11, 6, 7 }, { 11, 10, 6 } } ;
-
-void glutWireIcosahedron( void )
-{
-  int i ;
-
-  for ( i = 0; i < 20; i++ )
-  {
-    double normal[3] ;
-    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;
-    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;
-    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;
-    glBegin ( GL_LINE_LOOP ) ;
-      glNormal3dv ( normal ) ;
-      glVertex3dv ( icos_r[icos_v[i][0]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][1]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][2]] ) ;
-    glEnd () ;
-  }
-}
-
-/*
- *
- */
-void glutSolidIcosahedron( void )
-{
-  int i ;
-
-  glBegin ( GL_TRIANGLES ) ;
-  for ( i = 0; i < 20; i++ )
-  {
-    double normal[3] ;
-    normal[0] = ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) - ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) ;
-    normal[1] = ( icos_r[icos_v[i][1]][2] - icos_r[icos_v[i][0]][2] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) - ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][2] - icos_r[icos_v[i][0]][2] ) ;
-    normal[2] = ( icos_r[icos_v[i][1]][0] - icos_r[icos_v[i][0]][0] ) * ( icos_r[icos_v[i][2]][1] - icos_r[icos_v[i][0]][1] ) - ( icos_r[icos_v[i][1]][1] - icos_r[icos_v[i][0]][1] ) * ( icos_r[icos_v[i][2]][0] - icos_r[icos_v[i][0]][0] ) ;
-      glNormal3dv ( normal ) ;
-      glVertex3dv ( icos_r[icos_v[i][0]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][1]] ) ;
-      glVertex3dv ( icos_r[icos_v[i][2]] ) ;
-  }
-
-  glEnd () ;
-}
-
-/*
- *
- */
-double rdod_r[14][3] = { { 0.0, 0.0, 1.0 },
-  {  0.707106781187,  0.000000000000,  0.5 }, {  0.000000000000,  0.707106781187,  0.5 }, { -0.707106781187,  0.000000000000,  0.5 }, {  0.000000000000, -0.707106781187,  0.5 },
-  {  0.707106781187,  0.707106781187,  0.0 }, { -0.707106781187,  0.707106781187,  0.0 }, { -0.707106781187, -0.707106781187,  0.0 }, {  0.707106781187, -0.707106781187,  0.0 },
-  {  0.707106781187,  0.000000000000, -0.5 }, {  0.000000000000,  0.707106781187, -0.5 }, { -0.707106781187,  0.000000000000, -0.5 }, {  0.000000000000, -0.707106781187, -0.5 },
-  {  0.0, 0.0, -1.0 } } ;
-int rdod_v [12][4] = { { 0,  1,  5,  2 }, { 0,  2,  6,  3 }, { 0,  3,  7,  4 }, { 0,  4,  8, 1 },
-                       { 5, 10,  6,  2 }, { 6, 11,  7,  3 }, { 7, 12,  8,  4 }, { 8,  9,  5, 1 },
-                       { 5,  9, 13, 10 }, { 6, 10, 13, 11 }, { 7, 11, 13, 12 }, { 8, 12, 13, 9 } } ;
-double rdod_n[12][3] = {
-  {  0.353553390594,  0.353553390594,  0.5 }, { -0.353553390594,  0.353553390594,  0.5 }, { -0.353553390594, -0.353553390594,  0.5 }, {  0.353553390594, -0.353553390594,  0.5 },
-  {  0.000000000000,  1.000000000000,  0.0 }, { -1.000000000000,  0.000000000000,  0.0 }, {  0.000000000000, -1.000000000000,  0.0 }, {  1.000000000000,  0.000000000000,  0.0 },
-  {  0.353553390594,  0.353553390594, -0.5 }, { -0.353553390594,  0.353553390594, -0.5 }, { -0.353553390594, -0.353553390594, -0.5 }, {  0.353553390594, -0.353553390594, -0.5 }
-  } ;
-
-void glutWireRhombicDodecahedron( void )
-{
-  int i ;
-
-  for ( i = 0; i < 12; i++ )
-  {
-    glBegin ( GL_LINE_LOOP ) ;
-      glNormal3dv ( rdod_n[i] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;
-    glEnd () ;
-  }
-}
-
-/*
- *
- */
-void glutSolidRhombicDodecahedron( void )
-{
-  int i ;
-
-  glBegin ( GL_QUADS ) ;
-  for ( i = 0; i < 12; i++ )
-  {
-      glNormal3dv ( rdod_n[i] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][0]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][1]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][2]] ) ;
-      glVertex3dv ( rdod_r[rdod_v[i][3]] ) ;
-  }
-
-  glEnd () ;
-}
-
-void glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
-{
-  int i, j ;
-
-  if ( num_levels == 0 )
-  {
-
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      glBegin ( GL_LINE_LOOP ) ;
-      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;
-      for ( j = 0; j < 3; j++ )
-      {
-        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;
-        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;
-        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;
-        glVertex3d ( x, y, z ) ;
-      }
-
-      glEnd () ;
-    }
-  }
-  else
-  {
-    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */
-    num_levels -- ;
-    scale /= 2.0 ;
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      local_offset[0] = offset[0] + scale * tet_r[i][0] ;
-      local_offset[1] = offset[1] + scale * tet_r[i][1] ;
-      local_offset[2] = offset[2] + scale * tet_r[i][2] ;
-      glutWireSierpinskiSponge ( num_levels, local_offset, scale ) ;
-    }
-  }
-}
-
-void glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale )
-{
-  int i, j ;
-
-  if ( num_levels == 0 )
-  {
-    glBegin ( GL_TRIANGLES ) ;
-
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      glNormal3d ( -tet_r[i][0], -tet_r[i][1], -tet_r[i][2] ) ;
-      for ( j = 0; j < 3; j++ )
-      {
-        double x = offset[0] + scale * tet_r[tet_i[i][j]][0] ;
-        double y = offset[1] + scale * tet_r[tet_i[i][j]][1] ;
-        double z = offset[2] + scale * tet_r[tet_i[i][j]][2] ;
-        glVertex3d ( x, y, z ) ;
-      }
-    }
-
-    glEnd () ;
-  }
-  else
-  {
-    GLdouble local_offset[3] ;  /* Use a local variable to avoid buildup of roundoff errors */
-    num_levels -- ;
-    scale /= 2.0 ;
-    for ( i = 0 ; i < NUM_TETR_FACES ; i++ )
-    {
-      local_offset[0] = offset[0] + scale * tet_r[i][0] ;
-      local_offset[1] = offset[1] + scale * tet_r[i][1] ;
-      local_offset[2] = offset[2] + scale * tet_r[i][2] ;
-      glutSolidSierpinskiSponge ( num_levels, local_offset, scale ) ;
-    }
-  }
-}
-
-/*** END OF FILE ***/
--- a/DoConfig/fltk/src/freeglut_stroke_mono_roman.cxx
+++ /dev/null
@@ -1,2848 +1,0 @@
-/*
- * freeglut_stroke_mono_roman.c
- *
- * freeglut Monospace Roman stroke font definition
- *
- * Copyright (c) 1999-2010 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/* This file has been automatically generated by the genstroke utility. */
-
-#include <FL/glut.H>
-
-/* char: 0x20 */
-
-static const Fl_Glut_StrokeStrip ch32st[] =
-{
-  { 0, 0 }
-};
-
-static const Fl_Glut_StrokeChar ch32 = {104.762f,0,ch32st};
-
-/* char: 0x21 */
-
-static const Fl_Glut_StrokeVertex ch33st0[] =
-{
- {52.381f,100.0f},
- {52.381f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch33st1[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch33st[] =
-{
- {2,ch33st0},
- {5,ch33st1}
-};
-
-static const Fl_Glut_StrokeChar ch33 = {104.762f,2,ch33st};
-
-/* char: 0x22 */
-
-static const Fl_Glut_StrokeVertex ch34st0[] =
-{
- {33.3334f,100.0f},
- {33.3334f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch34st1[] =
-{
- {71.4286f,100.0f},
- {71.4286f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch34st[] =
-{
- {2,ch34st0},
- {2,ch34st1}
-};
-
-static const Fl_Glut_StrokeChar ch34 = {104.762f,2,ch34st};
-
-/* char: 0x23 */
-
-static const Fl_Glut_StrokeVertex ch35st0[] =
-{
- {54.7619f,119.048f},
- {21.4286f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st1[] =
-{
- {83.3334f,119.048f},
- {50.0f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st2[] =
-{
- {21.4286f,57.1429f},
- {88.0952f,57.1429f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st3[] =
-{
- {16.6667f,28.5714f},
- {83.3334f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch35st[] =
-{
- {2,ch35st0},
- {2,ch35st1},
- {2,ch35st2},
- {2,ch35st3}
-};
-
-static const Fl_Glut_StrokeChar ch35 = {104.762f,4,ch35st};
-
-/* char: 0x24 */
-
-static const Fl_Glut_StrokeVertex ch36st0[] =
-{
- {42.8571f,119.048f},
- {42.8571f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch36st1[] =
-{
- {61.9047f,119.048f},
- {61.9047f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch36st2[] =
-{
- {85.7143f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {19.0476f,85.7143f},
- {19.0476f,76.1905f},
- {23.8095f,66.6667f},
- {28.5714f,61.9048f},
- {38.0952f,57.1429f},
- {66.6666f,47.619f},
- {76.1905f,42.8571f},
- {80.9524f,38.0952f},
- {85.7143f,28.5714f},
- {85.7143f,14.2857f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {19.0476f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch36st[] =
-{
- {2,ch36st0},
- {2,ch36st1},
- {20,ch36st2}
-};
-
-static const Fl_Glut_StrokeChar ch36 = {104.762f,3,ch36st};
-
-/* char: 0x25 */
-
-static const Fl_Glut_StrokeVertex ch37st0[] =
-{
- {95.2381f,100.0f},
- {9.5238f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch37st1[] =
-{
- {33.3333f,100.0f},
- {42.8571f,90.4762f},
- {42.8571f,80.9524f},
- {38.0952f,71.4286f},
- {28.5714f,66.6667f},
- {19.0476f,66.6667f},
- {9.5238f,76.1905f},
- {9.5238f,85.7143f},
- {14.2857f,95.2381f},
- {23.8095f,100.0f},
- {33.3333f,100.0f},
- {42.8571f,95.2381f},
- {57.1428f,90.4762f},
- {71.4286f,90.4762f},
- {85.7143f,95.2381f},
- {95.2381f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch37st2[] =
-{
- {76.1905f,33.3333f},
- {66.6667f,28.5714f},
- {61.9048f,19.0476f},
- {61.9048f,9.5238f},
- {71.4286f,0.0f},
- {80.9524f,0.0f},
- {90.4762f,4.7619f},
- {95.2381f,14.2857f},
- {95.2381f,23.8095f},
- {85.7143f,33.3333f},
- {76.1905f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch37st[] =
-{
- {2,ch37st0},
- {16,ch37st1},
- {11,ch37st2}
-};
-
-static const Fl_Glut_StrokeChar ch37 = {104.762f,3,ch37st};
-
-/* char: 0x26 */
-
-static const Fl_Glut_StrokeVertex ch38st0[] =
-{
- {100.0f,57.1429f},
- {100.0f,61.9048f},
- {95.2381f,66.6667f},
- {90.4762f,66.6667f},
- {85.7143f,61.9048f},
- {80.9524f,52.381f},
- {71.4286f,28.5714f},
- {61.9048f,14.2857f},
- {52.3809f,4.7619f},
- {42.8571f,0.0f},
- {23.8095f,0.0f},
- {14.2857f,4.7619f},
- {9.5238f,9.5238f},
- {4.7619f,19.0476f},
- {4.7619f,28.5714f},
- {9.5238f,38.0952f},
- {14.2857f,42.8571f},
- {47.619f,61.9048f},
- {52.3809f,66.6667f},
- {57.1429f,76.1905f},
- {57.1429f,85.7143f},
- {52.3809f,95.2381f},
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {28.5714f,85.7143f},
- {28.5714f,76.1905f},
- {33.3333f,61.9048f},
- {42.8571f,47.619f},
- {66.6667f,14.2857f},
- {76.1905f,4.7619f},
- {85.7143f,0.0f},
- {95.2381f,0.0f},
- {100.0f,4.7619f},
- {100.0f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch38st[] =
-{
- {34,ch38st0}
-};
-
-static const Fl_Glut_StrokeChar ch38 = {104.762f,1,ch38st};
-
-/* char: 0x27 */
-
-static const Fl_Glut_StrokeVertex ch39st0[] =
-{
- {52.381f,100.0f},
- {52.381f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch39st[] =
-{
- {2,ch39st0}
-};
-
-static const Fl_Glut_StrokeChar ch39 = {104.762f,1,ch39st};
-
-/* char: 0x28 */
-
-static const Fl_Glut_StrokeVertex ch40st0[] =
-{
- {69.0476f,119.048f},
- {59.5238f,109.524f},
- {50.0f,95.2381f},
- {40.4762f,76.1905f},
- {35.7143f,52.381f},
- {35.7143f,33.3333f},
- {40.4762f,9.5238f},
- {50.0f,-9.5238f},
- {59.5238f,-23.8095f},
- {69.0476f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch40st[] =
-{
- {10,ch40st0}
-};
-
-static const Fl_Glut_StrokeChar ch40 = {104.762f,1,ch40st};
-
-/* char: 0x29 */
-
-static const Fl_Glut_StrokeVertex ch41st0[] =
-{
- {35.7143f,119.048f},
- {45.2381f,109.524f},
- {54.7619f,95.2381f},
- {64.2857f,76.1905f},
- {69.0476f,52.381f},
- {69.0476f,33.3333f},
- {64.2857f,9.5238f},
- {54.7619f,-9.5238f},
- {45.2381f,-23.8095f},
- {35.7143f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch41st[] =
-{
- {10,ch41st0}
-};
-
-static const Fl_Glut_StrokeChar ch41 = {104.762f,1,ch41st};
-
-/* char: 0x2a */
-
-static const Fl_Glut_StrokeVertex ch42st0[] =
-{
- {52.381f,71.4286f},
- {52.381f,14.2857f}
-};
-
-static const Fl_Glut_StrokeVertex ch42st1[] =
-{
- {28.5715f,57.1429f},
- {76.1905f,28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch42st2[] =
-{
- {76.1905f,57.1429f},
- {28.5715f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch42st[] =
-{
- {2,ch42st0},
- {2,ch42st1},
- {2,ch42st2}
-};
-
-static const Fl_Glut_StrokeChar ch42 = {104.762f,3,ch42st};
-
-/* char: 0x2b */
-
-static const Fl_Glut_StrokeVertex ch43st0[] =
-{
- {52.3809f,85.7143f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch43st1[] =
-{
- {9.5238f,42.8571f},
- {95.2381f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch43st[] =
-{
- {2,ch43st0},
- {2,ch43st1}
-};
-
-static const Fl_Glut_StrokeChar ch43 = {104.762f,2,ch43st};
-
-/* char: 0x2c */
-
-static const Fl_Glut_StrokeVertex ch44st0[] =
-{
- {57.1429f,4.7619f},
- {52.381f,0.0f},
- {47.6191f,4.7619f},
- {52.381f,9.5238f},
- {57.1429f,4.7619f},
- {57.1429f,-4.7619f},
- {52.381f,-14.2857f},
- {47.6191f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch44st[] =
-{
- {8,ch44st0}
-};
-
-static const Fl_Glut_StrokeChar ch44 = {104.762f,1,ch44st};
-
-/* char: 0x2d */
-
-static const Fl_Glut_StrokeVertex ch45st0[] =
-{
- {9.5238f,42.8571f},
- {95.2381f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch45st[] =
-{
- {2,ch45st0}
-};
-
-static const Fl_Glut_StrokeChar ch45 = {104.762f,1,ch45st};
-
-/* char: 0x2e */
-
-static const Fl_Glut_StrokeVertex ch46st0[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch46st[] =
-{
- {5,ch46st0}
-};
-
-static const Fl_Glut_StrokeChar ch46 = {104.762f,1,ch46st};
-
-/* char: 0x2f */
-
-static const Fl_Glut_StrokeVertex ch47st0[] =
-{
- {19.0476f,-14.2857f},
- {85.7143f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch47st[] =
-{
- {2,ch47st0}
-};
-
-static const Fl_Glut_StrokeChar ch47 = {104.762f,1,ch47st};
-
-/* char: 0x30 */
-
-static const Fl_Glut_StrokeVertex ch48st0[] =
-{
- {47.619f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,80.9524f},
- {19.0476f,57.1429f},
- {19.0476f,42.8571f},
- {23.8095f,19.0476f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,19.0476f},
- {85.7143f,42.8571f},
- {85.7143f,57.1429f},
- {80.9524f,80.9524f},
- {71.4286f,95.2381f},
- {57.1428f,100.0f},
- {47.619f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch48st[] =
-{
- {17,ch48st0}
-};
-
-static const Fl_Glut_StrokeChar ch48 = {104.762f,1,ch48st};
-
-/* char: 0x31 */
-
-static const Fl_Glut_StrokeVertex ch49st0[] =
-{
- {40.4762f,80.9524f},
- {50.0f,85.7143f},
- {64.2857f,100.0f},
- {64.2857f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch49st[] =
-{
- {4,ch49st0}
-};
-
-static const Fl_Glut_StrokeChar ch49 = {104.762f,1,ch49st};
-
-/* char: 0x32 */
-
-static const Fl_Glut_StrokeVertex ch50st0[] =
-{
- {23.8095f,76.1905f},
- {23.8095f,80.9524f},
- {28.5714f,90.4762f},
- {33.3333f,95.2381f},
- {42.8571f,100.0f},
- {61.9047f,100.0f},
- {71.4286f,95.2381f},
- {76.1905f,90.4762f},
- {80.9524f,80.9524f},
- {80.9524f,71.4286f},
- {76.1905f,61.9048f},
- {66.6666f,47.619f},
- {19.0476f,0.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch50st[] =
-{
- {14,ch50st0}
-};
-
-static const Fl_Glut_StrokeChar ch50 = {104.762f,1,ch50st};
-
-/* char: 0x33 */
-
-static const Fl_Glut_StrokeVertex ch51st0[] =
-{
- {28.5714f,100.0f},
- {80.9524f,100.0f},
- {52.3809f,61.9048f},
- {66.6666f,61.9048f},
- {76.1905f,57.1429f},
- {80.9524f,52.381f},
- {85.7143f,38.0952f},
- {85.7143f,28.5714f},
- {80.9524f,14.2857f},
- {71.4286f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch51st[] =
-{
- {15,ch51st0}
-};
-
-static const Fl_Glut_StrokeChar ch51 = {104.762f,1,ch51st};
-
-/* char: 0x34 */
-
-static const Fl_Glut_StrokeVertex ch52st0[] =
-{
- {64.2857f,100.0f},
- {16.6667f,33.3333f},
- {88.0952f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch52st1[] =
-{
- {64.2857f,100.0f},
- {64.2857f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch52st[] =
-{
- {3,ch52st0},
- {2,ch52st1}
-};
-
-static const Fl_Glut_StrokeChar ch52 = {104.762f,2,ch52st};
-
-/* char: 0x35 */
-
-static const Fl_Glut_StrokeVertex ch53st0[] =
-{
- {76.1905f,100.0f},
- {28.5714f,100.0f},
- {23.8095f,57.1429f},
- {28.5714f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {71.4286f,61.9048f},
- {80.9524f,52.381f},
- {85.7143f,38.0952f},
- {85.7143f,28.5714f},
- {80.9524f,14.2857f},
- {71.4286f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch53st[] =
-{
- {17,ch53st0}
-};
-
-static const Fl_Glut_StrokeChar ch53 = {104.762f,1,ch53st};
-
-/* char: 0x36 */
-
-static const Fl_Glut_StrokeVertex ch54st0[] =
-{
- {78.5714f,85.7143f},
- {73.8096f,95.2381f},
- {59.5238f,100.0f},
- {50.0f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,80.9524f},
- {21.4286f,57.1429f},
- {21.4286f,33.3333f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {50.0f,0.0f},
- {54.7619f,0.0f},
- {69.0476f,4.7619f},
- {78.5714f,14.2857f},
- {83.3334f,28.5714f},
- {83.3334f,33.3333f},
- {78.5714f,47.619f},
- {69.0476f,57.1429f},
- {54.7619f,61.9048f},
- {50.0f,61.9048f},
- {35.7143f,57.1429f},
- {26.1905f,47.619f},
- {21.4286f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch54st[] =
-{
- {23,ch54st0}
-};
-
-static const Fl_Glut_StrokeChar ch54 = {104.762f,1,ch54st};
-
-/* char: 0x37 */
-
-static const Fl_Glut_StrokeVertex ch55st0[] =
-{
- {85.7143f,100.0f},
- {38.0952f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch55st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch55st[] =
-{
- {2,ch55st0},
- {2,ch55st1}
-};
-
-static const Fl_Glut_StrokeChar ch55 = {104.762f,2,ch55st};
-
-/* char: 0x38 */
-
-static const Fl_Glut_StrokeVertex ch56st0[] =
-{
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {23.8095f,85.7143f},
- {23.8095f,76.1905f},
- {28.5714f,66.6667f},
- {38.0952f,61.9048f},
- {57.1428f,57.1429f},
- {71.4286f,52.381f},
- {80.9524f,42.8571f},
- {85.7143f,33.3333f},
- {85.7143f,19.0476f},
- {80.9524f,9.5238f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {23.8095f,9.5238f},
- {19.0476f,19.0476f},
- {19.0476f,33.3333f},
- {23.8095f,42.8571f},
- {33.3333f,52.381f},
- {47.619f,57.1429f},
- {66.6666f,61.9048f},
- {76.1905f,66.6667f},
- {80.9524f,76.1905f},
- {80.9524f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch56st[] =
-{
- {29,ch56st0}
-};
-
-static const Fl_Glut_StrokeChar ch56 = {104.762f,1,ch56st};
-
-/* char: 0x39 */
-
-static const Fl_Glut_StrokeVertex ch57st0[] =
-{
- {83.3334f,66.6667f},
- {78.5714f,52.381f},
- {69.0476f,42.8571f},
- {54.7619f,38.0952f},
- {50.0f,38.0952f},
- {35.7143f,42.8571f},
- {26.1905f,52.381f},
- {21.4286f,66.6667f},
- {21.4286f,71.4286f},
- {26.1905f,85.7143f},
- {35.7143f,95.2381f},
- {50.0f,100.0f},
- {54.7619f,100.0f},
- {69.0476f,95.2381f},
- {78.5714f,85.7143f},
- {83.3334f,66.6667f},
- {83.3334f,42.8571f},
- {78.5714f,19.0476f},
- {69.0476f,4.7619f},
- {54.7619f,0.0f},
- {45.2381f,0.0f},
- {30.9524f,4.7619f},
- {26.1905f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch57st[] =
-{
- {23,ch57st0}
-};
-
-static const Fl_Glut_StrokeChar ch57 = {104.762f,1,ch57st};
-
-/* char: 0x3a */
-
-static const Fl_Glut_StrokeVertex ch58st0[] =
-{
- {52.381f,66.6667f},
- {47.6191f,61.9048f},
- {52.381f,57.1429f},
- {57.1429f,61.9048f},
- {52.381f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch58st1[] =
-{
- {52.381f,9.5238f},
- {47.6191f,4.7619f},
- {52.381f,0.0f},
- {57.1429f,4.7619f},
- {52.381f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch58st[] =
-{
- {5,ch58st0},
- {5,ch58st1}
-};
-
-static const Fl_Glut_StrokeChar ch58 = {104.762f,2,ch58st};
-
-/* char: 0x3b */
-
-static const Fl_Glut_StrokeVertex ch59st0[] =
-{
- {52.381f,66.6667f},
- {47.6191f,61.9048f},
- {52.381f,57.1429f},
- {57.1429f,61.9048f},
- {52.381f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch59st1[] =
-{
- {57.1429f,4.7619f},
- {52.381f,0.0f},
- {47.6191f,4.7619f},
- {52.381f,9.5238f},
- {57.1429f,4.7619f},
- {57.1429f,-4.7619f},
- {52.381f,-14.2857f},
- {47.6191f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch59st[] =
-{
- {5,ch59st0},
- {8,ch59st1}
-};
-
-static const Fl_Glut_StrokeChar ch59 = {104.762f,2,ch59st};
-
-/* char: 0x3c */
-
-static const Fl_Glut_StrokeVertex ch60st0[] =
-{
- {90.4762f,85.7143f},
- {14.2857f,42.8571f},
- {90.4762f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch60st[] =
-{
- {3,ch60st0}
-};
-
-static const Fl_Glut_StrokeChar ch60 = {104.762f,1,ch60st};
-
-/* char: 0x3d */
-
-static const Fl_Glut_StrokeVertex ch61st0[] =
-{
- {9.5238f,57.1429f},
- {95.2381f,57.1429f}
-};
-
-static const Fl_Glut_StrokeVertex ch61st1[] =
-{
- {9.5238f,28.5714f},
- {95.2381f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch61st[] =
-{
- {2,ch61st0},
- {2,ch61st1}
-};
-
-static const Fl_Glut_StrokeChar ch61 = {104.762f,2,ch61st};
-
-/* char: 0x3e */
-
-static const Fl_Glut_StrokeVertex ch62st0[] =
-{
- {14.2857f,85.7143f},
- {90.4762f,42.8571f},
- {14.2857f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch62st[] =
-{
- {3,ch62st0}
-};
-
-static const Fl_Glut_StrokeChar ch62 = {104.762f,1,ch62st};
-
-/* char: 0x3f */
-
-static const Fl_Glut_StrokeVertex ch63st0[] =
-{
- {23.8095f,76.1905f},
- {23.8095f,80.9524f},
- {28.5714f,90.4762f},
- {33.3333f,95.2381f},
- {42.8571f,100.0f},
- {61.9047f,100.0f},
- {71.4285f,95.2381f},
- {76.1905f,90.4762f},
- {80.9524f,80.9524f},
- {80.9524f,71.4286f},
- {76.1905f,61.9048f},
- {71.4285f,57.1429f},
- {52.3809f,47.619f},
- {52.3809f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch63st1[] =
-{
- {52.3809f,9.5238f},
- {47.619f,4.7619f},
- {52.3809f,0.0f},
- {57.1428f,4.7619f},
- {52.3809f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch63st[] =
-{
- {14,ch63st0},
- {5,ch63st1}
-};
-
-static const Fl_Glut_StrokeChar ch63 = {104.762f,2,ch63st};
-
-/* char: 0x40 */
-
-static const Fl_Glut_StrokeVertex ch64st0[] =
-{
- {64.2857f,52.381f},
- {54.7619f,57.1429f},
- {45.2381f,57.1429f},
- {40.4762f,47.619f},
- {40.4762f,42.8571f},
- {45.2381f,33.3333f},
- {54.7619f,33.3333f},
- {64.2857f,38.0952f}
-};
-
-static const Fl_Glut_StrokeVertex ch64st1[] =
-{
- {64.2857f,57.1429f},
- {64.2857f,38.0952f},
- {69.0476f,33.3333f},
- {78.5714f,33.3333f},
- {83.3334f,42.8571f},
- {83.3334f,47.619f},
- {78.5714f,61.9048f},
- {69.0476f,71.4286f},
- {54.7619f,76.1905f},
- {50.0f,76.1905f},
- {35.7143f,71.4286f},
- {26.1905f,61.9048f},
- {21.4286f,47.619f},
- {21.4286f,42.8571f},
- {26.1905f,28.5714f},
- {35.7143f,19.0476f},
- {50.0f,14.2857f},
- {54.7619f,14.2857f},
- {69.0476f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch64st[] =
-{
- {8,ch64st0},
- {19,ch64st1}
-};
-
-static const Fl_Glut_StrokeChar ch64 = {104.762f,2,ch64st};
-
-/* char: 0x41 */
-
-static const Fl_Glut_StrokeVertex ch65st0[] =
-{
- {52.3809f,100.0f},
- {14.2857f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch65st1[] =
-{
- {52.3809f,100.0f},
- {90.4762f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch65st2[] =
-{
- {28.5714f,33.3333f},
- {76.1905f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch65st[] =
-{
- {2,ch65st0},
- {2,ch65st1},
- {2,ch65st2}
-};
-
-static const Fl_Glut_StrokeChar ch65 = {104.762f,3,ch65st};
-
-/* char: 0x42 */
-
-static const Fl_Glut_StrokeVertex ch66st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch66st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,71.4286f},
- {80.9524f,61.9048f},
- {76.1905f,57.1429f},
- {61.9047f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch66st2[] =
-{
- {19.0476f,52.381f},
- {61.9047f,52.381f},
- {76.1905f,47.619f},
- {80.9524f,42.8571f},
- {85.7143f,33.3333f},
- {85.7143f,19.0476f},
- {80.9524f,9.5238f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch66st[] =
-{
- {2,ch66st0},
- {9,ch66st1},
- {10,ch66st2}
-};
-
-static const Fl_Glut_StrokeChar ch66 = {104.762f,3,ch66st};
-
-/* char: 0x43 */
-
-static const Fl_Glut_StrokeVertex ch67st0[] =
-{
- {88.0952f,76.1905f},
- {83.3334f,85.7143f},
- {73.8096f,95.2381f},
- {64.2857f,100.0f},
- {45.2381f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,85.7143f},
- {21.4286f,76.1905f},
- {16.6667f,61.9048f},
- {16.6667f,38.0952f},
- {21.4286f,23.8095f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {64.2857f,0.0f},
- {73.8096f,4.7619f},
- {83.3334f,14.2857f},
- {88.0952f,23.8095f}
-};
-
-static const Fl_Glut_StrokeStrip ch67st[] =
-{
- {18,ch67st0}
-};
-
-static const Fl_Glut_StrokeChar ch67 = {104.762f,1,ch67st};
-
-/* char: 0x44 */
-
-static const Fl_Glut_StrokeVertex ch68st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch68st1[] =
-{
- {19.0476f,100.0f},
- {52.3809f,100.0f},
- {66.6666f,95.2381f},
- {76.1905f,85.7143f},
- {80.9524f,76.1905f},
- {85.7143f,61.9048f},
- {85.7143f,38.0952f},
- {80.9524f,23.8095f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {52.3809f,0.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch68st[] =
-{
- {2,ch68st0},
- {12,ch68st1}
-};
-
-static const Fl_Glut_StrokeChar ch68 = {104.762f,2,ch68st};
-
-/* char: 0x45 */
-
-static const Fl_Glut_StrokeVertex ch69st0[] =
-{
- {21.4286f,100.0f},
- {21.4286f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st1[] =
-{
- {21.4286f,100.0f},
- {83.3334f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st2[] =
-{
- {21.4286f,52.381f},
- {59.5238f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st3[] =
-{
- {21.4286f,0.0f},
- {83.3334f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch69st[] =
-{
- {2,ch69st0},
- {2,ch69st1},
- {2,ch69st2},
- {2,ch69st3}
-};
-
-static const Fl_Glut_StrokeChar ch69 = {104.762f,4,ch69st};
-
-/* char: 0x46 */
-
-static const Fl_Glut_StrokeVertex ch70st0[] =
-{
- {21.4286f,100.0f},
- {21.4286f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch70st1[] =
-{
- {21.4286f,100.0f},
- {83.3334f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch70st2[] =
-{
- {21.4286f,52.381f},
- {59.5238f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch70st[] =
-{
- {2,ch70st0},
- {2,ch70st1},
- {2,ch70st2}
-};
-
-static const Fl_Glut_StrokeChar ch70 = {104.762f,3,ch70st};
-
-/* char: 0x47 */
-
-static const Fl_Glut_StrokeVertex ch71st0[] =
-{
- {88.0952f,76.1905f},
- {83.3334f,85.7143f},
- {73.8096f,95.2381f},
- {64.2857f,100.0f},
- {45.2381f,100.0f},
- {35.7143f,95.2381f},
- {26.1905f,85.7143f},
- {21.4286f,76.1905f},
- {16.6667f,61.9048f},
- {16.6667f,38.0952f},
- {21.4286f,23.8095f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {64.2857f,0.0f},
- {73.8096f,4.7619f},
- {83.3334f,14.2857f},
- {88.0952f,23.8095f},
- {88.0952f,38.0952f}
-};
-
-static const Fl_Glut_StrokeVertex ch71st1[] =
-{
- {64.2857f,38.0952f},
- {88.0952f,38.0952f}
-};
-
-static const Fl_Glut_StrokeStrip ch71st[] =
-{
- {19,ch71st0},
- {2,ch71st1}
-};
-
-static const Fl_Glut_StrokeChar ch71 = {104.762f,2,ch71st};
-
-/* char: 0x48 */
-
-static const Fl_Glut_StrokeVertex ch72st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch72st1[] =
-{
- {85.7143f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch72st2[] =
-{
- {19.0476f,52.381f},
- {85.7143f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch72st[] =
-{
- {2,ch72st0},
- {2,ch72st1},
- {2,ch72st2}
-};
-
-static const Fl_Glut_StrokeChar ch72 = {104.762f,3,ch72st};
-
-/* char: 0x49 */
-
-static const Fl_Glut_StrokeVertex ch73st0[] =
-{
- {52.381f,100.0f},
- {52.381f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch73st[] =
-{
- {2,ch73st0}
-};
-
-static const Fl_Glut_StrokeChar ch73 = {104.762f,1,ch73st};
-
-/* char: 0x4a */
-
-static const Fl_Glut_StrokeVertex ch74st0[] =
-{
- {76.1905f,100.0f},
- {76.1905f,23.8095f},
- {71.4286f,9.5238f},
- {66.6667f,4.7619f},
- {57.1429f,0.0f},
- {47.6191f,0.0f},
- {38.0953f,4.7619f},
- {33.3334f,9.5238f},
- {28.5715f,23.8095f},
- {28.5715f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch74st[] =
-{
- {10,ch74st0}
-};
-
-static const Fl_Glut_StrokeChar ch74 = {104.762f,1,ch74st};
-
-/* char: 0x4b */
-
-static const Fl_Glut_StrokeVertex ch75st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch75st1[] =
-{
- {85.7143f,100.0f},
- {19.0476f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch75st2[] =
-{
- {42.8571f,57.1429f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch75st[] =
-{
- {2,ch75st0},
- {2,ch75st1},
- {2,ch75st2}
-};
-
-static const Fl_Glut_StrokeChar ch75 = {104.762f,3,ch75st};
-
-/* char: 0x4c */
-
-static const Fl_Glut_StrokeVertex ch76st0[] =
-{
- {23.8095f,100.0f},
- {23.8095f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch76st1[] =
-{
- {23.8095f,0.0f},
- {80.9524f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch76st[] =
-{
- {2,ch76st0},
- {2,ch76st1}
-};
-
-static const Fl_Glut_StrokeChar ch76 = {104.762f,2,ch76st};
-
-/* char: 0x4d */
-
-static const Fl_Glut_StrokeVertex ch77st0[] =
-{
- {14.2857f,100.0f},
- {14.2857f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st1[] =
-{
- {14.2857f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st2[] =
-{
- {90.4762f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st3[] =
-{
- {90.4762f,100.0f},
- {90.4762f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch77st[] =
-{
- {2,ch77st0},
- {2,ch77st1},
- {2,ch77st2},
- {2,ch77st3}
-};
-
-static const Fl_Glut_StrokeChar ch77 = {104.762f,4,ch77st};
-
-/* char: 0x4e */
-
-static const Fl_Glut_StrokeVertex ch78st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch78st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch78st2[] =
-{
- {85.7143f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch78st[] =
-{
- {2,ch78st0},
- {2,ch78st1},
- {2,ch78st2}
-};
-
-static const Fl_Glut_StrokeChar ch78 = {104.762f,3,ch78st};
-
-/* char: 0x4f */
-
-static const Fl_Glut_StrokeVertex ch79st0[] =
-{
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,85.7143f},
- {19.0476f,76.1905f},
- {14.2857f,61.9048f},
- {14.2857f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {42.8571f,0.0f},
- {61.9047f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,23.8095f},
- {90.4762f,38.0952f},
- {90.4762f,61.9048f},
- {85.7143f,76.1905f},
- {80.9524f,85.7143f},
- {71.4286f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch79st[] =
-{
- {21,ch79st0}
-};
-
-static const Fl_Glut_StrokeChar ch79 = {104.762f,1,ch79st};
-
-/* char: 0x50 */
-
-static const Fl_Glut_StrokeVertex ch80st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch80st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,66.6667f},
- {80.9524f,57.1429f},
- {76.1905f,52.381f},
- {61.9047f,47.619f},
- {19.0476f,47.619f}
-};
-
-static const Fl_Glut_StrokeStrip ch80st[] =
-{
- {2,ch80st0},
- {10,ch80st1}
-};
-
-static const Fl_Glut_StrokeChar ch80 = {104.762f,2,ch80st};
-
-/* char: 0x51 */
-
-static const Fl_Glut_StrokeVertex ch81st0[] =
-{
- {42.8571f,100.0f},
- {33.3333f,95.2381f},
- {23.8095f,85.7143f},
- {19.0476f,76.1905f},
- {14.2857f,61.9048f},
- {14.2857f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {42.8571f,0.0f},
- {61.9047f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,23.8095f},
- {90.4762f,38.0952f},
- {90.4762f,61.9048f},
- {85.7143f,76.1905f},
- {80.9524f,85.7143f},
- {71.4286f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch81st1[] =
-{
- {57.1428f,19.0476f},
- {85.7143f,-9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch81st[] =
-{
- {21,ch81st0},
- {2,ch81st1}
-};
-
-static const Fl_Glut_StrokeChar ch81 = {104.762f,2,ch81st};
-
-/* char: 0x52 */
-
-static const Fl_Glut_StrokeVertex ch82st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch82st1[] =
-{
- {19.0476f,100.0f},
- {61.9047f,100.0f},
- {76.1905f,95.2381f},
- {80.9524f,90.4762f},
- {85.7143f,80.9524f},
- {85.7143f,71.4286f},
- {80.9524f,61.9048f},
- {76.1905f,57.1429f},
- {61.9047f,52.381f},
- {19.0476f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch82st2[] =
-{
- {52.3809f,52.381f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch82st[] =
-{
- {2,ch82st0},
- {10,ch82st1},
- {2,ch82st2}
-};
-
-static const Fl_Glut_StrokeChar ch82 = {104.762f,3,ch82st};
-
-/* char: 0x53 */
-
-static const Fl_Glut_StrokeVertex ch83st0[] =
-{
- {85.7143f,85.7143f},
- {76.1905f,95.2381f},
- {61.9047f,100.0f},
- {42.8571f,100.0f},
- {28.5714f,95.2381f},
- {19.0476f,85.7143f},
- {19.0476f,76.1905f},
- {23.8095f,66.6667f},
- {28.5714f,61.9048f},
- {38.0952f,57.1429f},
- {66.6666f,47.619f},
- {76.1905f,42.8571f},
- {80.9524f,38.0952f},
- {85.7143f,28.5714f},
- {85.7143f,14.2857f},
- {76.1905f,4.7619f},
- {61.9047f,0.0f},
- {42.8571f,0.0f},
- {28.5714f,4.7619f},
- {19.0476f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch83st[] =
-{
- {20,ch83st0}
-};
-
-static const Fl_Glut_StrokeChar ch83 = {104.762f,1,ch83st};
-
-/* char: 0x54 */
-
-static const Fl_Glut_StrokeVertex ch84st0[] =
-{
- {52.3809f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch84st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch84st[] =
-{
- {2,ch84st0},
- {2,ch84st1}
-};
-
-static const Fl_Glut_StrokeChar ch84 = {104.762f,2,ch84st};
-
-/* char: 0x55 */
-
-static const Fl_Glut_StrokeVertex ch85st0[] =
-{
- {19.0476f,100.0f},
- {19.0476f,28.5714f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,28.5714f},
- {85.7143f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch85st[] =
-{
- {10,ch85st0}
-};
-
-static const Fl_Glut_StrokeChar ch85 = {104.762f,1,ch85st};
-
-/* char: 0x56 */
-
-static const Fl_Glut_StrokeVertex ch86st0[] =
-{
- {14.2857f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch86st1[] =
-{
- {90.4762f,100.0f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch86st[] =
-{
- {2,ch86st0},
- {2,ch86st1}
-};
-
-static const Fl_Glut_StrokeChar ch86 = {104.762f,2,ch86st};
-
-/* char: 0x57 */
-
-static const Fl_Glut_StrokeVertex ch87st0[] =
-{
- {4.7619f,100.0f},
- {28.5714f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st1[] =
-{
- {52.3809f,100.0f},
- {28.5714f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st2[] =
-{
- {52.3809f,100.0f},
- {76.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st3[] =
-{
- {100.0f,100.0f},
- {76.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch87st[] =
-{
- {2,ch87st0},
- {2,ch87st1},
- {2,ch87st2},
- {2,ch87st3}
-};
-
-static const Fl_Glut_StrokeChar ch87 = {104.762f,4,ch87st};
-
-/* char: 0x58 */
-
-static const Fl_Glut_StrokeVertex ch88st0[] =
-{
- {19.0476f,100.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch88st1[] =
-{
- {85.7143f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch88st[] =
-{
- {2,ch88st0},
- {2,ch88st1}
-};
-
-static const Fl_Glut_StrokeChar ch88 = {104.762f,2,ch88st};
-
-/* char: 0x59 */
-
-static const Fl_Glut_StrokeVertex ch89st0[] =
-{
- {14.2857f,100.0f},
- {52.3809f,52.381f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch89st1[] =
-{
- {90.4762f,100.0f},
- {52.3809f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch89st[] =
-{
- {3,ch89st0},
- {2,ch89st1}
-};
-
-static const Fl_Glut_StrokeChar ch89 = {104.762f,2,ch89st};
-
-/* char: 0x5a */
-
-static const Fl_Glut_StrokeVertex ch90st0[] =
-{
- {85.7143f,100.0f},
- {19.0476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch90st1[] =
-{
- {19.0476f,100.0f},
- {85.7143f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch90st2[] =
-{
- {19.0476f,0.0f},
- {85.7143f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch90st[] =
-{
- {2,ch90st0},
- {2,ch90st1},
- {2,ch90st2}
-};
-
-static const Fl_Glut_StrokeChar ch90 = {104.762f,3,ch90st};
-
-/* char: 0x5b */
-
-static const Fl_Glut_StrokeVertex ch91st0[] =
-{
- {35.7143f,119.048f},
- {35.7143f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st1[] =
-{
- {40.4762f,119.048f},
- {40.4762f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st2[] =
-{
- {35.7143f,119.048f},
- {69.0476f,119.048f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st3[] =
-{
- {35.7143f,-33.3333f},
- {69.0476f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch91st[] =
-{
- {2,ch91st0},
- {2,ch91st1},
- {2,ch91st2},
- {2,ch91st3}
-};
-
-static const Fl_Glut_StrokeChar ch91 = {104.762f,4,ch91st};
-
-/* char: 0x5c */
-
-static const Fl_Glut_StrokeVertex ch92st0[] =
-{
- {19.0476f,100.0f},
- {85.7143f,-14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch92st[] =
-{
- {2,ch92st0}
-};
-
-static const Fl_Glut_StrokeChar ch92 = {104.762f,1,ch92st};
-
-/* char: 0x5d */
-
-static const Fl_Glut_StrokeVertex ch93st0[] =
-{
- {64.2857f,119.048f},
- {64.2857f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st1[] =
-{
- {69.0476f,119.048f},
- {69.0476f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st2[] =
-{
- {35.7143f,119.048f},
- {69.0476f,119.048f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st3[] =
-{
- {35.7143f,-33.3333f},
- {69.0476f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch93st[] =
-{
- {2,ch93st0},
- {2,ch93st1},
- {2,ch93st2},
- {2,ch93st3}
-};
-
-static const Fl_Glut_StrokeChar ch93 = {104.762f,4,ch93st};
-
-/* char: 0x5e */
-
-static const Fl_Glut_StrokeVertex ch94st0[] =
-{
- {52.3809f,109.524f},
- {14.2857f,42.8571f}
-};
-
-static const Fl_Glut_StrokeVertex ch94st1[] =
-{
- {52.3809f,109.524f},
- {90.4762f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch94st[] =
-{
- {2,ch94st0},
- {2,ch94st1}
-};
-
-static const Fl_Glut_StrokeChar ch94 = {104.762f,2,ch94st};
-
-/* char: 0x5f */
-
-static const Fl_Glut_StrokeVertex ch95st0[] =
-{
- {0,-33.3333f},
- {104.762f,-33.3333f},
- {104.762f,-28.5714f},
- {0,-28.5714f},
- {0,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch95st[] =
-{
- {5,ch95st0}
-};
-
-static const Fl_Glut_StrokeChar ch95 = {104.762f,1,ch95st};
-
-/* char: 0x60 */
-
-static const Fl_Glut_StrokeVertex ch96st0[] =
-{
- {42.8572f,100.0f},
- {66.6667f,71.4286f}
-};
-
-static const Fl_Glut_StrokeVertex ch96st1[] =
-{
- {42.8572f,100.0f},
- {38.0953f,95.2381f},
- {66.6667f,71.4286f}
-};
-
-static const Fl_Glut_StrokeStrip ch96st[] =
-{
- {2,ch96st0},
- {3,ch96st1}
-};
-
-static const Fl_Glut_StrokeChar ch96 = {104.762f,2,ch96st};
-
-/* char: 0x61 */
-
-static const Fl_Glut_StrokeVertex ch97st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch97st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch97st[] =
-{
- {2,ch97st0},
- {14,ch97st1}
-};
-
-static const Fl_Glut_StrokeChar ch97 = {104.762f,2,ch97st};
-
-/* char: 0x62 */
-
-static const Fl_Glut_StrokeVertex ch98st0[] =
-{
- {23.8095f,100.0f},
- {23.8095f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch98st1[] =
-{
- {23.8095f,52.381f},
- {33.3333f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {66.6666f,61.9048f},
- {76.1905f,52.381f},
- {80.9524f,38.0952f},
- {80.9524f,28.5714f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {33.3333f,4.7619f},
- {23.8095f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch98st[] =
-{
- {2,ch98st0},
- {14,ch98st1}
-};
-
-static const Fl_Glut_StrokeChar ch98 = {104.762f,2,ch98st};
-
-/* char: 0x63 */
-
-static const Fl_Glut_StrokeVertex ch99st0[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch99st[] =
-{
- {14,ch99st0}
-};
-
-static const Fl_Glut_StrokeChar ch99 = {104.762f,1,ch99st};
-
-/* char: 0x64 */
-
-static const Fl_Glut_StrokeVertex ch100st0[] =
-{
- {80.9524f,100.0f},
- {80.9524f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch100st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch100st[] =
-{
- {2,ch100st0},
- {14,ch100st1}
-};
-
-static const Fl_Glut_StrokeChar ch100 = {104.762f,2,ch100st};
-
-/* char: 0x65 */
-
-static const Fl_Glut_StrokeVertex ch101st0[] =
-{
- {23.8095f,38.0952f},
- {80.9524f,38.0952f},
- {80.9524f,47.619f},
- {76.1905f,57.1429f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch101st[] =
-{
- {17,ch101st0}
-};
-
-static const Fl_Glut_StrokeChar ch101 = {104.762f,1,ch101st};
-
-/* char: 0x66 */
-
-static const Fl_Glut_StrokeVertex ch102st0[] =
-{
- {71.4286f,100.0f},
- {61.9048f,100.0f},
- {52.381f,95.2381f},
- {47.6191f,80.9524f},
- {47.6191f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch102st1[] =
-{
- {33.3334f,66.6667f},
- {66.6667f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch102st[] =
-{
- {5,ch102st0},
- {2,ch102st1}
-};
-
-static const Fl_Glut_StrokeChar ch102 = {104.762f,2,ch102st};
-
-/* char: 0x67 */
-
-static const Fl_Glut_StrokeVertex ch103st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,-9.5238f},
- {76.1905f,-23.8095f},
- {71.4285f,-28.5714f},
- {61.9047f,-33.3333f},
- {47.619f,-33.3333f},
- {38.0952f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch103st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch103st[] =
-{
- {7,ch103st0},
- {14,ch103st1}
-};
-
-static const Fl_Glut_StrokeChar ch103 = {104.762f,2,ch103st};
-
-/* char: 0x68 */
-
-static const Fl_Glut_StrokeVertex ch104st0[] =
-{
- {26.1905f,100.0f},
- {26.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch104st1[] =
-{
- {26.1905f,47.619f},
- {40.4762f,61.9048f},
- {50.0f,66.6667f},
- {64.2857f,66.6667f},
- {73.8095f,61.9048f},
- {78.5715f,47.619f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch104st[] =
-{
- {2,ch104st0},
- {7,ch104st1}
-};
-
-static const Fl_Glut_StrokeChar ch104 = {104.762f,2,ch104st};
-
-/* char: 0x69 */
-
-static const Fl_Glut_StrokeVertex ch105st0[] =
-{
- {47.6191f,100.0f},
- {52.381f,95.2381f},
- {57.1429f,100.0f},
- {52.381f,104.762f},
- {47.6191f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch105st1[] =
-{
- {52.381f,66.6667f},
- {52.381f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch105st[] =
-{
- {5,ch105st0},
- {2,ch105st1}
-};
-
-static const Fl_Glut_StrokeChar ch105 = {104.762f,2,ch105st};
-
-/* char: 0x6a */
-
-static const Fl_Glut_StrokeVertex ch106st0[] =
-{
- {57.1429f,100.0f},
- {61.9048f,95.2381f},
- {66.6667f,100.0f},
- {61.9048f,104.762f},
- {57.1429f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch106st1[] =
-{
- {61.9048f,66.6667f},
- {61.9048f,-14.2857f},
- {57.1429f,-28.5714f},
- {47.6191f,-33.3333f},
- {38.0953f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch106st[] =
-{
- {5,ch106st0},
- {5,ch106st1}
-};
-
-static const Fl_Glut_StrokeChar ch106 = {104.762f,2,ch106st};
-
-/* char: 0x6b */
-
-static const Fl_Glut_StrokeVertex ch107st0[] =
-{
- {26.1905f,100.0f},
- {26.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch107st1[] =
-{
- {73.8095f,66.6667f},
- {26.1905f,19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch107st2[] =
-{
- {45.2381f,38.0952f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch107st[] =
-{
- {2,ch107st0},
- {2,ch107st1},
- {2,ch107st2}
-};
-
-static const Fl_Glut_StrokeChar ch107 = {104.762f,3,ch107st};
-
-/* char: 0x6c */
-
-static const Fl_Glut_StrokeVertex ch108st0[] =
-{
- {52.381f,100.0f},
- {52.381f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch108st[] =
-{
- {2,ch108st0}
-};
-
-static const Fl_Glut_StrokeChar ch108 = {104.762f,1,ch108st};
-
-/* char: 0x6d */
-
-static const Fl_Glut_StrokeVertex ch109st0[] =
-{
- {0,66.6667f},
- {0,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch109st1[] =
-{
- {0,47.619f},
- {14.2857f,61.9048f},
- {23.8095f,66.6667f},
- {38.0952f,66.6667f},
- {47.619f,61.9048f},
- {52.381f,47.619f},
- {52.381f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch109st2[] =
-{
- {52.381f,47.619f},
- {66.6667f,61.9048f},
- {76.1905f,66.6667f},
- {90.4762f,66.6667f},
- {100.0f,61.9048f},
- {104.762f,47.619f},
- {104.762f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch109st[] =
-{
- {2,ch109st0},
- {7,ch109st1},
- {7,ch109st2}
-};
-
-static const Fl_Glut_StrokeChar ch109 = {104.762f,3,ch109st};
-
-/* char: 0x6e */
-
-static const Fl_Glut_StrokeVertex ch110st0[] =
-{
- {26.1905f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch110st1[] =
-{
- {26.1905f,47.619f},
- {40.4762f,61.9048f},
- {50.0f,66.6667f},
- {64.2857f,66.6667f},
- {73.8095f,61.9048f},
- {78.5715f,47.619f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch110st[] =
-{
- {2,ch110st0},
- {7,ch110st1}
-};
-
-static const Fl_Glut_StrokeChar ch110 = {104.762f,2,ch110st};
-
-/* char: 0x6f */
-
-static const Fl_Glut_StrokeVertex ch111st0[] =
-{
- {45.2381f,66.6667f},
- {35.7143f,61.9048f},
- {26.1905f,52.381f},
- {21.4286f,38.0952f},
- {21.4286f,28.5714f},
- {26.1905f,14.2857f},
- {35.7143f,4.7619f},
- {45.2381f,0.0f},
- {59.5238f,0.0f},
- {69.0476f,4.7619f},
- {78.5714f,14.2857f},
- {83.3334f,28.5714f},
- {83.3334f,38.0952f},
- {78.5714f,52.381f},
- {69.0476f,61.9048f},
- {59.5238f,66.6667f},
- {45.2381f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch111st[] =
-{
- {17,ch111st0}
-};
-
-static const Fl_Glut_StrokeChar ch111 = {104.762f,1,ch111st};
-
-/* char: 0x70 */
-
-static const Fl_Glut_StrokeVertex ch112st0[] =
-{
- {23.8095f,66.6667f},
- {23.8095f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch112st1[] =
-{
- {23.8095f,52.381f},
- {33.3333f,61.9048f},
- {42.8571f,66.6667f},
- {57.1428f,66.6667f},
- {66.6666f,61.9048f},
- {76.1905f,52.381f},
- {80.9524f,38.0952f},
- {80.9524f,28.5714f},
- {76.1905f,14.2857f},
- {66.6666f,4.7619f},
- {57.1428f,0.0f},
- {42.8571f,0.0f},
- {33.3333f,4.7619f},
- {23.8095f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch112st[] =
-{
- {2,ch112st0},
- {14,ch112st1}
-};
-
-static const Fl_Glut_StrokeChar ch112 = {104.762f,2,ch112st};
-
-/* char: 0x71 */
-
-static const Fl_Glut_StrokeVertex ch113st0[] =
-{
- {80.9524f,66.6667f},
- {80.9524f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch113st1[] =
-{
- {80.9524f,52.381f},
- {71.4285f,61.9048f},
- {61.9047f,66.6667f},
- {47.619f,66.6667f},
- {38.0952f,61.9048f},
- {28.5714f,52.381f},
- {23.8095f,38.0952f},
- {23.8095f,28.5714f},
- {28.5714f,14.2857f},
- {38.0952f,4.7619f},
- {47.619f,0.0f},
- {61.9047f,0.0f},
- {71.4285f,4.7619f},
- {80.9524f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch113st[] =
-{
- {2,ch113st0},
- {14,ch113st1}
-};
-
-static const Fl_Glut_StrokeChar ch113 = {104.762f,2,ch113st};
-
-/* char: 0x72 */
-
-static const Fl_Glut_StrokeVertex ch114st0[] =
-{
- {33.3334f,66.6667f},
- {33.3334f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch114st1[] =
-{
- {33.3334f,38.0952f},
- {38.0953f,52.381f},
- {47.6191f,61.9048f},
- {57.1429f,66.6667f},
- {71.4286f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch114st[] =
-{
- {2,ch114st0},
- {5,ch114st1}
-};
-
-static const Fl_Glut_StrokeChar ch114 = {104.762f,2,ch114st};
-
-/* char: 0x73 */
-
-static const Fl_Glut_StrokeVertex ch115st0[] =
-{
- {78.5715f,52.381f},
- {73.8095f,61.9048f},
- {59.5238f,66.6667f},
- {45.2381f,66.6667f},
- {30.9524f,61.9048f},
- {26.1905f,52.381f},
- {30.9524f,42.8571f},
- {40.4762f,38.0952f},
- {64.2857f,33.3333f},
- {73.8095f,28.5714f},
- {78.5715f,19.0476f},
- {78.5715f,14.2857f},
- {73.8095f,4.7619f},
- {59.5238f,0.0f},
- {45.2381f,0.0f},
- {30.9524f,4.7619f},
- {26.1905f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch115st[] =
-{
- {17,ch115st0}
-};
-
-static const Fl_Glut_StrokeChar ch115 = {104.762f,1,ch115st};
-
-/* char: 0x74 */
-
-static const Fl_Glut_StrokeVertex ch116st0[] =
-{
- {47.6191f,100.0f},
- {47.6191f,19.0476f},
- {52.381f,4.7619f},
- {61.9048f,0.0f},
- {71.4286f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch116st1[] =
-{
- {33.3334f,66.6667f},
- {66.6667f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch116st[] =
-{
- {5,ch116st0},
- {2,ch116st1}
-};
-
-static const Fl_Glut_StrokeChar ch116 = {104.762f,2,ch116st};
-
-/* char: 0x75 */
-
-static const Fl_Glut_StrokeVertex ch117st0[] =
-{
- {26.1905f,66.6667f},
- {26.1905f,19.0476f},
- {30.9524f,4.7619f},
- {40.4762f,0.0f},
- {54.7619f,0.0f},
- {64.2857f,4.7619f},
- {78.5715f,19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch117st1[] =
-{
- {78.5715f,66.6667f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch117st[] =
-{
- {7,ch117st0},
- {2,ch117st1}
-};
-
-static const Fl_Glut_StrokeChar ch117 = {104.762f,2,ch117st};
-
-/* char: 0x76 */
-
-static const Fl_Glut_StrokeVertex ch118st0[] =
-{
- {23.8095f,66.6667f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch118st1[] =
-{
- {80.9524f,66.6667f},
- {52.3809f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch118st[] =
-{
- {2,ch118st0},
- {2,ch118st1}
-};
-
-static const Fl_Glut_StrokeChar ch118 = {104.762f,2,ch118st};
-
-/* char: 0x77 */
-
-static const Fl_Glut_StrokeVertex ch119st0[] =
-{
- {14.2857f,66.6667f},
- {33.3333f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st1[] =
-{
- {52.3809f,66.6667f},
- {33.3333f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st2[] =
-{
- {52.3809f,66.6667f},
- {71.4286f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st3[] =
-{
- {90.4762f,66.6667f},
- {71.4286f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch119st[] =
-{
- {2,ch119st0},
- {2,ch119st1},
- {2,ch119st2},
- {2,ch119st3}
-};
-
-static const Fl_Glut_StrokeChar ch119 = {104.762f,4,ch119st};
-
-/* char: 0x78 */
-
-static const Fl_Glut_StrokeVertex ch120st0[] =
-{
- {26.1905f,66.6667f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch120st1[] =
-{
- {78.5715f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch120st[] =
-{
- {2,ch120st0},
- {2,ch120st1}
-};
-
-static const Fl_Glut_StrokeChar ch120 = {104.762f,2,ch120st};
-
-/* char: 0x79 */
-
-static const Fl_Glut_StrokeVertex ch121st0[] =
-{
- {26.1905f,66.6667f},
- {54.7619f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch121st1[] =
-{
- {83.3334f,66.6667f},
- {54.7619f,0.0f},
- {45.2381f,-19.0476f},
- {35.7143f,-28.5714f},
- {26.1905f,-33.3333f},
- {21.4286f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch121st[] =
-{
- {2,ch121st0},
- {6,ch121st1}
-};
-
-static const Fl_Glut_StrokeChar ch121 = {104.762f,2,ch121st};
-
-/* char: 0x7a */
-
-static const Fl_Glut_StrokeVertex ch122st0[] =
-{
- {78.5715f,66.6667f},
- {26.1905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch122st1[] =
-{
- {26.1905f,66.6667f},
- {78.5715f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch122st2[] =
-{
- {26.1905f,0.0f},
- {78.5715f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch122st[] =
-{
- {2,ch122st0},
- {2,ch122st1},
- {2,ch122st2}
-};
-
-static const Fl_Glut_StrokeChar ch122 = {104.762f,3,ch122st};
-
-/* char: 0x7b */
-
-static const Fl_Glut_StrokeVertex ch123st0[] =
-{
- {64.2857f,119.048f},
- {54.7619f,114.286f},
- {50.0f,109.524f},
- {45.2381f,100.0f},
- {45.2381f,90.4762f},
- {50.0f,80.9524f},
- {54.7619f,76.1905f},
- {59.5238f,66.6667f},
- {59.5238f,57.1429f},
- {50.0f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch123st1[] =
-{
- {54.7619f,114.286f},
- {50.0f,104.762f},
- {50.0f,95.2381f},
- {54.7619f,85.7143f},
- {59.5238f,80.9524f},
- {64.2857f,71.4286f},
- {64.2857f,61.9048f},
- {59.5238f,52.381f},
- {40.4762f,42.8571f},
- {59.5238f,33.3333f},
- {64.2857f,23.8095f},
- {64.2857f,14.2857f},
- {59.5238f,4.7619f},
- {54.7619f,0.0f},
- {50.0f,-9.5238f},
- {50.0f,-19.0476f},
- {54.7619f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch123st2[] =
-{
- {50.0f,38.0952f},
- {59.5238f,28.5714f},
- {59.5238f,19.0476f},
- {54.7619f,9.5238f},
- {50.0f,4.7619f},
- {45.2381f,-4.7619f},
- {45.2381f,-14.2857f},
- {50.0f,-23.8095f},
- {54.7619f,-28.5714f},
- {64.2857f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch123st[] =
-{
- {10,ch123st0},
- {17,ch123st1},
- {10,ch123st2}
-};
-
-static const Fl_Glut_StrokeChar ch123 = {104.762f,3,ch123st};
-
-/* char: 0x7c */
-
-static const Fl_Glut_StrokeVertex ch124st0[] =
-{
- {52.381f,119.048f},
- {52.381f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch124st[] =
-{
- {2,ch124st0}
-};
-
-static const Fl_Glut_StrokeChar ch124 = {104.762f,1,ch124st};
-
-/* char: 0x7d */
-
-static const Fl_Glut_StrokeVertex ch125st0[] =
-{
- {40.4762f,119.048f},
- {50.0f,114.286f},
- {54.7619f,109.524f},
- {59.5238f,100.0f},
- {59.5238f,90.4762f},
- {54.7619f,80.9524f},
- {50.0f,76.1905f},
- {45.2381f,66.6667f},
- {45.2381f,57.1429f},
- {54.7619f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch125st1[] =
-{
- {50.0f,114.286f},
- {54.7619f,104.762f},
- {54.7619f,95.2381f},
- {50.0f,85.7143f},
- {45.2381f,80.9524f},
- {40.4762f,71.4286f},
- {40.4762f,61.9048f},
- {45.2381f,52.381f},
- {64.2857f,42.8571f},
- {45.2381f,33.3333f},
- {40.4762f,23.8095f},
- {40.4762f,14.2857f},
- {45.2381f,4.7619f},
- {50.0f,0.0f},
- {54.7619f,-9.5238f},
- {54.7619f,-19.0476f},
- {50.0f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch125st2[] =
-{
- {54.7619f,38.0952f},
- {45.2381f,28.5714f},
- {45.2381f,19.0476f},
- {50.0f,9.5238f},
- {54.7619f,4.7619f},
- {59.5238f,-4.7619f},
- {59.5238f,-14.2857f},
- {54.7619f,-23.8095f},
- {50.0f,-28.5714f},
- {40.4762f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch125st[] =
-{
- {10,ch125st0},
- {17,ch125st1},
- {10,ch125st2}
-};
-
-static const Fl_Glut_StrokeChar ch125 = {104.762f,3,ch125st};
-
-/* char: 0x7e */
-
-static const Fl_Glut_StrokeVertex ch126st0[] =
-{
- {9.5238f,28.5714f},
- {9.5238f,38.0952f},
- {14.2857f,52.381f},
- {23.8095f,57.1429f},
- {33.3333f,57.1429f},
- {42.8571f,52.381f},
- {61.9048f,38.0952f},
- {71.4286f,33.3333f},
- {80.9524f,33.3333f},
- {90.4762f,38.0952f},
- {95.2381f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch126st1[] =
-{
- {9.5238f,38.0952f},
- {14.2857f,47.619f},
- {23.8095f,52.381f},
- {33.3333f,52.381f},
- {42.8571f,47.619f},
- {61.9048f,33.3333f},
- {71.4286f,28.5714f},
- {80.9524f,28.5714f},
- {90.4762f,33.3333f},
- {95.2381f,47.619f},
- {95.2381f,57.1429f}
-};
-
-static const Fl_Glut_StrokeStrip ch126st[] =
-{
- {11,ch126st0},
- {11,ch126st1}
-};
-
-static const Fl_Glut_StrokeChar ch126 = {104.762f,2,ch126st};
-
-/* char: 0x7f */
-
-static const Fl_Glut_StrokeVertex ch127st0[] =
-{
- {71.4286f,100.0f},
- {33.3333f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch127st1[] =
-{
- {47.619f,66.6667f},
- {33.3333f,61.9048f},
- {23.8095f,52.381f},
- {19.0476f,38.0952f},
- {19.0476f,23.8095f},
- {23.8095f,14.2857f},
- {33.3333f,4.7619f},
- {47.619f,0.0f},
- {57.1428f,0.0f},
- {71.4286f,4.7619f},
- {80.9524f,14.2857f},
- {85.7143f,28.5714f},
- {85.7143f,42.8571f},
- {80.9524f,52.381f},
- {71.4286f,61.9048f},
- {57.1428f,66.6667f},
- {47.619f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch127st[] =
-{
- {2,ch127st0},
- {17,ch127st1}
-};
-
-static const Fl_Glut_StrokeChar ch127 = {104.762f,2,ch127st};
-
-static const Fl_Glut_StrokeChar *chars[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
- &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
- &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
- &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
- &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
- &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
- &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
- &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
- &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
- &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
- &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
- &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
-};
-
-Fl_Glut_StrokeFont glutStrokeMonoRoman = {(char *)"MonoRoman",128,152.381f,chars};
--- a/DoConfig/fltk/src/freeglut_stroke_roman.cxx
+++ /dev/null
@@ -1,2848 +1,0 @@
-/*
- * freeglut_stroke_roman.c
- *
- * freeglut Roman stroke font definition
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Thu Dec 16 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-/* This file has been automatically generated by the genstroke utility. */
-
-#include <FL/glut.H>
-
-/* char: 0x20 */
-
-static const Fl_Glut_StrokeStrip ch32st[] =
-{
-  { 0, 0 }
-};
-
-static const Fl_Glut_StrokeChar ch32 = {104.762f,0,ch32st};
-
-/* char: 0x21 */
-
-static const Fl_Glut_StrokeVertex ch33st0[] =
-{
- {13.3819f,100.0f},
- {13.3819f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch33st1[] =
-{
- {13.3819f,9.5238f},
- {8.62f,4.7619f},
- {13.3819f,0.0f},
- {18.1438f,4.7619f},
- {13.3819f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch33st[] =
-{
- {2,ch33st0},
- {5,ch33st1}
-};
-
-static const Fl_Glut_StrokeChar ch33 = {26.6238f,2,ch33st};
-
-/* char: 0x22 */
-
-static const Fl_Glut_StrokeVertex ch34st0[] =
-{
- {4.02f,100.0f},
- {4.02f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch34st1[] =
-{
- {42.1152f,100.0f},
- {42.1152f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch34st[] =
-{
- {2,ch34st0},
- {2,ch34st1}
-};
-
-static const Fl_Glut_StrokeChar ch34 = {51.4352f,2,ch34st};
-
-/* char: 0x23 */
-
-static const Fl_Glut_StrokeVertex ch35st0[] =
-{
- {41.2952f,119.048f},
- {7.9619f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st1[] =
-{
- {69.8667f,119.048f},
- {36.5333f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st2[] =
-{
- {7.9619f,57.1429f},
- {74.6286f,57.1429f}
-};
-
-static const Fl_Glut_StrokeVertex ch35st3[] =
-{
- {3.2f,28.5714f},
- {69.8667f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch35st[] =
-{
- {2,ch35st0},
- {2,ch35st1},
- {2,ch35st2},
- {2,ch35st3}
-};
-
-static const Fl_Glut_StrokeChar ch35 = {79.4886f,4,ch35st};
-
-/* char: 0x24 */
-
-static const Fl_Glut_StrokeVertex ch36st0[] =
-{
- {28.6295f,119.048f},
- {28.6295f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch36st1[] =
-{
- {47.6771f,119.048f},
- {47.6771f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch36st2[] =
-{
- {71.4867f,85.7143f},
- {61.9629f,95.2381f},
- {47.6771f,100.0f},
- {28.6295f,100.0f},
- {14.3438f,95.2381f},
- {4.82f,85.7143f},
- {4.82f,76.1905f},
- {9.5819f,66.6667f},
- {14.3438f,61.9048f},
- {23.8676f,57.1429f},
- {52.439f,47.619f},
- {61.9629f,42.8571f},
- {66.7248f,38.0952f},
- {71.4867f,28.5714f},
- {71.4867f,14.2857f},
- {61.9629f,4.7619f},
- {47.6771f,0.0f},
- {28.6295f,0.0f},
- {14.3438f,4.7619f},
- {4.82f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch36st[] =
-{
- {2,ch36st0},
- {2,ch36st1},
- {20,ch36st2}
-};
-
-static const Fl_Glut_StrokeChar ch36 = {76.2067f,3,ch36st};
-
-/* char: 0x25 */
-
-static const Fl_Glut_StrokeVertex ch37st0[] =
-{
- {92.0743f,100.0f},
- {6.36f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch37st1[] =
-{
- {30.1695f,100.0f},
- {39.6933f,90.4762f},
- {39.6933f,80.9524f},
- {34.9314f,71.4286f},
- {25.4076f,66.6667f},
- {15.8838f,66.6667f},
- {6.36f,76.1905f},
- {6.36f,85.7143f},
- {11.1219f,95.2381f},
- {20.6457f,100.0f},
- {30.1695f,100.0f},
- {39.6933f,95.2381f},
- {53.979f,90.4762f},
- {68.2648f,90.4762f},
- {82.5505f,95.2381f},
- {92.0743f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch37st2[] =
-{
- {73.0267f,33.3333f},
- {63.5029f,28.5714f},
- {58.741f,19.0476f},
- {58.741f,9.5238f},
- {68.2648f,0.0f},
- {77.7886f,0.0f},
- {87.3124f,4.7619f},
- {92.0743f,14.2857f},
- {92.0743f,23.8095f},
- {82.5505f,33.3333f},
- {73.0267f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch37st[] =
-{
- {2,ch37st0},
- {16,ch37st1},
- {11,ch37st2}
-};
-
-static const Fl_Glut_StrokeChar ch37 = {96.5743f,3,ch37st};
-
-/* char: 0x26 */
-
-static const Fl_Glut_StrokeVertex ch38st0[] =
-{
- {101.218f,57.1429f},
- {101.218f,61.9048f},
- {96.4562f,66.6667f},
- {91.6943f,66.6667f},
- {86.9324f,61.9048f},
- {82.1705f,52.381f},
- {72.6467f,28.5714f},
- {63.1229f,14.2857f},
- {53.599f,4.7619f},
- {44.0752f,0.0f},
- {25.0276f,0.0f},
- {15.5038f,4.7619f},
- {10.7419f,9.5238f},
- {5.98f,19.0476f},
- {5.98f,28.5714f},
- {10.7419f,38.0952f},
- {15.5038f,42.8571f},
- {48.8371f,61.9048f},
- {53.599f,66.6667f},
- {58.361f,76.1905f},
- {58.361f,85.7143f},
- {53.599f,95.2381f},
- {44.0752f,100.0f},
- {34.5514f,95.2381f},
- {29.7895f,85.7143f},
- {29.7895f,76.1905f},
- {34.5514f,61.9048f},
- {44.0752f,47.619f},
- {67.8848f,14.2857f},
- {77.4086f,4.7619f},
- {86.9324f,0.0f},
- {96.4562f,0.0f},
- {101.218f,4.7619f},
- {101.218f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch38st[] =
-{
- {34,ch38st0}
-};
-
-static const Fl_Glut_StrokeChar ch38 = {101.758f,1,ch38st};
-
-/* char: 0x27 */
-
-static const Fl_Glut_StrokeVertex ch39st0[] =
-{
- {4.44f,100.0f},
- {4.44f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch39st[] =
-{
- {2,ch39st0}
-};
-
-static const Fl_Glut_StrokeChar ch39 = {13.62f,1,ch39st};
-
-/* char: 0x28 */
-
-static const Fl_Glut_StrokeVertex ch40st0[] =
-{
- {40.9133f,119.048f},
- {31.3895f,109.524f},
- {21.8657f,95.2381f},
- {12.3419f,76.1905f},
- {7.58f,52.381f},
- {7.58f,33.3333f},
- {12.3419f,9.5238f},
- {21.8657f,-9.5238f},
- {31.3895f,-23.8095f},
- {40.9133f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch40st[] =
-{
- {10,ch40st0}
-};
-
-static const Fl_Glut_StrokeChar ch40 = {47.1733f,1,ch40st};
-
-/* char: 0x29 */
-
-static const Fl_Glut_StrokeVertex ch41st0[] =
-{
- {5.28f,119.048f},
- {14.8038f,109.524f},
- {24.3276f,95.2381f},
- {33.8514f,76.1905f},
- {38.6133f,52.381f},
- {38.6133f,33.3333f},
- {33.8514f,9.5238f},
- {24.3276f,-9.5238f},
- {14.8038f,-23.8095f},
- {5.28f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch41st[] =
-{
- {10,ch41st0}
-};
-
-static const Fl_Glut_StrokeChar ch41 = {47.5333f,1,ch41st};
-
-/* char: 0x2a */
-
-static const Fl_Glut_StrokeVertex ch42st0[] =
-{
- {30.7695f,71.4286f},
- {30.7695f,14.2857f}
-};
-
-static const Fl_Glut_StrokeVertex ch42st1[] =
-{
- {6.96f,57.1429f},
- {54.579f,28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch42st2[] =
-{
- {54.579f,57.1429f},
- {6.96f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch42st[] =
-{
- {2,ch42st0},
- {2,ch42st1},
- {2,ch42st2}
-};
-
-static const Fl_Glut_StrokeChar ch42 = {59.439f,3,ch42st};
-
-/* char: 0x2b */
-
-static const Fl_Glut_StrokeVertex ch43st0[] =
-{
- {48.8371f,85.7143f},
- {48.8371f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch43st1[] =
-{
- {5.98f,42.8571f},
- {91.6943f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch43st[] =
-{
- {2,ch43st0},
- {2,ch43st1}
-};
-
-static const Fl_Glut_StrokeChar ch43 = {97.2543f,2,ch43st};
-
-/* char: 0x2c */
-
-static const Fl_Glut_StrokeVertex ch44st0[] =
-{
- {18.2838f,4.7619f},
- {13.5219f,0.0f},
- {8.76f,4.7619f},
- {13.5219f,9.5238f},
- {18.2838f,4.7619f},
- {18.2838f,-4.7619f},
- {13.5219f,-14.2857f},
- {8.76f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch44st[] =
-{
- {8,ch44st0}
-};
-
-static const Fl_Glut_StrokeChar ch44 = {26.0638f,1,ch44st};
-
-/* char: 0x2d */
-
-static const Fl_Glut_StrokeVertex ch45st0[] =
-{
- {7.38f,42.8571f},
- {93.0943f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch45st[] =
-{
- {2,ch45st0}
-};
-
-static const Fl_Glut_StrokeChar ch45 = {100.754f,1,ch45st};
-
-/* char: 0x2e */
-
-static const Fl_Glut_StrokeVertex ch46st0[] =
-{
- {13.1019f,9.5238f},
- {8.34f,4.7619f},
- {13.1019f,0.0f},
- {17.8638f,4.7619f},
- {13.1019f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch46st[] =
-{
- {5,ch46st0}
-};
-
-static const Fl_Glut_StrokeChar ch46 = {26.4838f,1,ch46st};
-
-/* char: 0x2f */
-
-static const Fl_Glut_StrokeVertex ch47st0[] =
-{
- {7.24f,-14.2857f},
- {73.9067f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch47st[] =
-{
- {2,ch47st0}
-};
-
-static const Fl_Glut_StrokeChar ch47 = {82.1067f,1,ch47st};
-
-/* char: 0x30 */
-
-static const Fl_Glut_StrokeVertex ch48st0[] =
-{
- {33.5514f,100.0f},
- {19.2657f,95.2381f},
- {9.7419f,80.9524f},
- {4.98f,57.1429f},
- {4.98f,42.8571f},
- {9.7419f,19.0476f},
- {19.2657f,4.7619f},
- {33.5514f,0.0f},
- {43.0752f,0.0f},
- {57.361f,4.7619f},
- {66.8848f,19.0476f},
- {71.6467f,42.8571f},
- {71.6467f,57.1429f},
- {66.8848f,80.9524f},
- {57.361f,95.2381f},
- {43.0752f,100.0f},
- {33.5514f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch48st[] =
-{
- {17,ch48st0}
-};
-
-static const Fl_Glut_StrokeChar ch48 = {77.0667f,1,ch48st};
-
-/* char: 0x31 */
-
-static const Fl_Glut_StrokeVertex ch49st0[] =
-{
- {11.82f,80.9524f},
- {21.3438f,85.7143f},
- {35.6295f,100.0f},
- {35.6295f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch49st[] =
-{
- {4,ch49st0}
-};
-
-static const Fl_Glut_StrokeChar ch49 = {66.5295f,1,ch49st};
-
-/* char: 0x32 */
-
-static const Fl_Glut_StrokeVertex ch50st0[] =
-{
- {10.1819f,76.1905f},
- {10.1819f,80.9524f},
- {14.9438f,90.4762f},
- {19.7057f,95.2381f},
- {29.2295f,100.0f},
- {48.2771f,100.0f},
- {57.801f,95.2381f},
- {62.5629f,90.4762f},
- {67.3248f,80.9524f},
- {67.3248f,71.4286f},
- {62.5629f,61.9048f},
- {53.039f,47.619f},
- {5.42f,0.0f},
- {72.0867f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch50st[] =
-{
- {14,ch50st0}
-};
-
-static const Fl_Glut_StrokeChar ch50 = {77.6467f,1,ch50st};
-
-/* char: 0x33 */
-
-static const Fl_Glut_StrokeVertex ch51st0[] =
-{
- {14.5238f,100.0f},
- {66.9048f,100.0f},
- {38.3333f,61.9048f},
- {52.619f,61.9048f},
- {62.1429f,57.1429f},
- {66.9048f,52.381f},
- {71.6667f,38.0952f},
- {71.6667f,28.5714f},
- {66.9048f,14.2857f},
- {57.381f,4.7619f},
- {43.0952f,0.0f},
- {28.8095f,0.0f},
- {14.5238f,4.7619f},
- {9.7619f,9.5238f},
- {5.0f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch51st[] =
-{
- {15,ch51st0}
-};
-
-static const Fl_Glut_StrokeChar ch51 = {77.0467f,1,ch51st};
-
-/* char: 0x34 */
-
-static const Fl_Glut_StrokeVertex ch52st0[] =
-{
- {51.499f,100.0f},
- {3.88f,33.3333f},
- {75.3086f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch52st1[] =
-{
- {51.499f,100.0f},
- {51.499f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch52st[] =
-{
- {3,ch52st0},
- {2,ch52st1}
-};
-
-static const Fl_Glut_StrokeChar ch52 = {80.1686f,2,ch52st};
-
-/* char: 0x35 */
-
-static const Fl_Glut_StrokeVertex ch53st0[] =
-{
- {62.0029f,100.0f},
- {14.3838f,100.0f},
- {9.6219f,57.1429f},
- {14.3838f,61.9048f},
- {28.6695f,66.6667f},
- {42.9552f,66.6667f},
- {57.241f,61.9048f},
- {66.7648f,52.381f},
- {71.5267f,38.0952f},
- {71.5267f,28.5714f},
- {66.7648f,14.2857f},
- {57.241f,4.7619f},
- {42.9552f,0.0f},
- {28.6695f,0.0f},
- {14.3838f,4.7619f},
- {9.6219f,9.5238f},
- {4.86f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch53st[] =
-{
- {17,ch53st0}
-};
-
-static const Fl_Glut_StrokeChar ch53 = {77.6867f,1,ch53st};
-
-/* char: 0x36 */
-
-static const Fl_Glut_StrokeVertex ch54st0[] =
-{
- {62.7229f,85.7143f},
- {57.961f,95.2381f},
- {43.6752f,100.0f},
- {34.1514f,100.0f},
- {19.8657f,95.2381f},
- {10.3419f,80.9524f},
- {5.58f,57.1429f},
- {5.58f,33.3333f},
- {10.3419f,14.2857f},
- {19.8657f,4.7619f},
- {34.1514f,0.0f},
- {38.9133f,0.0f},
- {53.199f,4.7619f},
- {62.7229f,14.2857f},
- {67.4848f,28.5714f},
- {67.4848f,33.3333f},
- {62.7229f,47.619f},
- {53.199f,57.1429f},
- {38.9133f,61.9048f},
- {34.1514f,61.9048f},
- {19.8657f,57.1429f},
- {10.3419f,47.619f},
- {5.58f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch54st[] =
-{
- {23,ch54st0}
-};
-
-static const Fl_Glut_StrokeChar ch54 = {73.8048f,1,ch54st};
-
-/* char: 0x37 */
-
-static const Fl_Glut_StrokeVertex ch55st0[] =
-{
- {72.2267f,100.0f},
- {24.6076f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch55st1[] =
-{
- {5.56f,100.0f},
- {72.2267f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch55st[] =
-{
- {2,ch55st0},
- {2,ch55st1}
-};
-
-static const Fl_Glut_StrokeChar ch55 = {77.2267f,2,ch55st};
-
-/* char: 0x38 */
-
-static const Fl_Glut_StrokeVertex ch56st0[] =
-{
- {29.4095f,100.0f},
- {15.1238f,95.2381f},
- {10.3619f,85.7143f},
- {10.3619f,76.1905f},
- {15.1238f,66.6667f},
- {24.6476f,61.9048f},
- {43.6952f,57.1429f},
- {57.981f,52.381f},
- {67.5048f,42.8571f},
- {72.2667f,33.3333f},
- {72.2667f,19.0476f},
- {67.5048f,9.5238f},
- {62.7429f,4.7619f},
- {48.4571f,0.0f},
- {29.4095f,0.0f},
- {15.1238f,4.7619f},
- {10.3619f,9.5238f},
- {5.6f,19.0476f},
- {5.6f,33.3333f},
- {10.3619f,42.8571f},
- {19.8857f,52.381f},
- {34.1714f,57.1429f},
- {53.219f,61.9048f},
- {62.7429f,66.6667f},
- {67.5048f,76.1905f},
- {67.5048f,85.7143f},
- {62.7429f,95.2381f},
- {48.4571f,100.0f},
- {29.4095f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch56st[] =
-{
- {29,ch56st0}
-};
-
-static const Fl_Glut_StrokeChar ch56 = {77.6667f,1,ch56st};
-
-/* char: 0x39 */
-
-static const Fl_Glut_StrokeVertex ch57st0[] =
-{
- {68.5048f,66.6667f},
- {63.7429f,52.381f},
- {54.219f,42.8571f},
- {39.9333f,38.0952f},
- {35.1714f,38.0952f},
- {20.8857f,42.8571f},
- {11.3619f,52.381f},
- {6.6f,66.6667f},
- {6.6f,71.4286f},
- {11.3619f,85.7143f},
- {20.8857f,95.2381f},
- {35.1714f,100.0f},
- {39.9333f,100.0f},
- {54.219f,95.2381f},
- {63.7429f,85.7143f},
- {68.5048f,66.6667f},
- {68.5048f,42.8571f},
- {63.7429f,19.0476f},
- {54.219f,4.7619f},
- {39.9333f,0.0f},
- {30.4095f,0.0f},
- {16.1238f,4.7619f},
- {11.3619f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch57st[] =
-{
- {23,ch57st0}
-};
-
-static const Fl_Glut_StrokeChar ch57 = {74.0648f,1,ch57st};
-
-/* char: 0x3a */
-
-static const Fl_Glut_StrokeVertex ch58st0[] =
-{
- {14.0819f,66.6667f},
- {9.32f,61.9048f},
- {14.0819f,57.1429f},
- {18.8438f,61.9048f},
- {14.0819f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch58st1[] =
-{
- {14.0819f,9.5238f},
- {9.32f,4.7619f},
- {14.0819f,0.0f},
- {18.8438f,4.7619f},
- {14.0819f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch58st[] =
-{
- {5,ch58st0},
- {5,ch58st1}
-};
-
-static const Fl_Glut_StrokeChar ch58 = {26.2238f,2,ch58st};
-
-/* char: 0x3b */
-
-static const Fl_Glut_StrokeVertex ch59st0[] =
-{
- {12.9619f,66.6667f},
- {8.2f,61.9048f},
- {12.9619f,57.1429f},
- {17.7238f,61.9048f},
- {12.9619f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch59st1[] =
-{
- {17.7238f,4.7619f},
- {12.9619f,0.0f},
- {8.2f,4.7619f},
- {12.9619f,9.5238f},
- {17.7238f,4.7619f},
- {17.7238f,-4.7619f},
- {12.9619f,-14.2857f},
- {8.2f,-19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch59st[] =
-{
- {5,ch59st0},
- {8,ch59st1}
-};
-
-static const Fl_Glut_StrokeChar ch59 = {26.3038f,2,ch59st};
-
-/* char: 0x3c */
-
-static const Fl_Glut_StrokeVertex ch60st0[] =
-{
- {79.2505f,85.7143f},
- {3.06f,42.8571f},
- {79.2505f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch60st[] =
-{
- {3,ch60st0}
-};
-
-static const Fl_Glut_StrokeChar ch60 = {81.6105f,1,ch60st};
-
-/* char: 0x3d */
-
-static const Fl_Glut_StrokeVertex ch61st0[] =
-{
- {5.7f,57.1429f},
- {91.4143f,57.1429f}
-};
-
-static const Fl_Glut_StrokeVertex ch61st1[] =
-{
- {5.7f,28.5714f},
- {91.4143f,28.5714f}
-};
-
-static const Fl_Glut_StrokeStrip ch61st[] =
-{
- {2,ch61st0},
- {2,ch61st1}
-};
-
-static const Fl_Glut_StrokeChar ch61 = {97.2543f,2,ch61st};
-
-/* char: 0x3e */
-
-static const Fl_Glut_StrokeVertex ch62st0[] =
-{
- {2.78f,85.7143f},
- {78.9705f,42.8571f},
- {2.78f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch62st[] =
-{
- {3,ch62st0}
-};
-
-static const Fl_Glut_StrokeChar ch62 = {81.6105f,1,ch62st};
-
-/* char: 0x3f */
-
-static const Fl_Glut_StrokeVertex ch63st0[] =
-{
- {8.42f,76.1905f},
- {8.42f,80.9524f},
- {13.1819f,90.4762f},
- {17.9438f,95.2381f},
- {27.4676f,100.0f},
- {46.5152f,100.0f},
- {56.039f,95.2381f},
- {60.801f,90.4762f},
- {65.5629f,80.9524f},
- {65.5629f,71.4286f},
- {60.801f,61.9048f},
- {56.039f,57.1429f},
- {36.9914f,47.619f},
- {36.9914f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch63st1[] =
-{
- {36.9914f,9.5238f},
- {32.2295f,4.7619f},
- {36.9914f,0.0f},
- {41.7533f,4.7619f},
- {36.9914f,9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch63st[] =
-{
- {14,ch63st0},
- {5,ch63st1}
-};
-
-static const Fl_Glut_StrokeChar ch63 = {73.9029f,2,ch63st};
-
-/* char: 0x40 */
-
-static const Fl_Glut_StrokeVertex ch64st0[] =
-{
- {49.2171f,52.381f},
- {39.6933f,57.1429f},
- {30.1695f,57.1429f},
- {25.4076f,47.619f},
- {25.4076f,42.8571f},
- {30.1695f,33.3333f},
- {39.6933f,33.3333f},
- {49.2171f,38.0952f}
-};
-
-static const Fl_Glut_StrokeVertex ch64st1[] =
-{
- {49.2171f,57.1429f},
- {49.2171f,38.0952f},
- {53.979f,33.3333f},
- {63.5029f,33.3333f},
- {68.2648f,42.8571f},
- {68.2648f,47.619f},
- {63.5029f,61.9048f},
- {53.979f,71.4286f},
- {39.6933f,76.1905f},
- {34.9314f,76.1905f},
- {20.6457f,71.4286f},
- {11.1219f,61.9048f},
- {6.36f,47.619f},
- {6.36f,42.8571f},
- {11.1219f,28.5714f},
- {20.6457f,19.0476f},
- {34.9314f,14.2857f},
- {39.6933f,14.2857f},
- {53.979f,19.0476f}
-};
-
-static const Fl_Glut_StrokeStrip ch64st[] =
-{
- {8,ch64st0},
- {19,ch64st1}
-};
-
-static const Fl_Glut_StrokeChar ch64 = {74.3648f,2,ch64st};
-
-/* char: 0x41 */
-
-static const Fl_Glut_StrokeVertex ch65st0[] =
-{
- {40.5952f,100.0f},
- {2.5f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch65st1[] =
-{
- {40.5952f,100.0f},
- {78.6905f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch65st2[] =
-{
- {16.7857f,33.3333f},
- {64.4048f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch65st[] =
-{
- {2,ch65st0},
- {2,ch65st1},
- {2,ch65st2}
-};
-
-static const Fl_Glut_StrokeChar ch65 = {80.4905f,3,ch65st};
-
-/* char: 0x42 */
-
-static const Fl_Glut_StrokeVertex ch66st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch66st1[] =
-{
- {11.42f,100.0f},
- {54.2771f,100.0f},
- {68.5629f,95.2381f},
- {73.3248f,90.4762f},
- {78.0867f,80.9524f},
- {78.0867f,71.4286f},
- {73.3248f,61.9048f},
- {68.5629f,57.1429f},
- {54.2771f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch66st2[] =
-{
- {11.42f,52.381f},
- {54.2771f,52.381f},
- {68.5629f,47.619f},
- {73.3248f,42.8571f},
- {78.0867f,33.3333f},
- {78.0867f,19.0476f},
- {73.3248f,9.5238f},
- {68.5629f,4.7619f},
- {54.2771f,0.0f},
- {11.42f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch66st[] =
-{
- {2,ch66st0},
- {9,ch66st1},
- {10,ch66st2}
-};
-
-static const Fl_Glut_StrokeChar ch66 = {83.6267f,3,ch66st};
-
-/* char: 0x43 */
-
-static const Fl_Glut_StrokeVertex ch67st0[] =
-{
- {78.0886f,76.1905f},
- {73.3267f,85.7143f},
- {63.8029f,95.2381f},
- {54.279f,100.0f},
- {35.2314f,100.0f},
- {25.7076f,95.2381f},
- {16.1838f,85.7143f},
- {11.4219f,76.1905f},
- {6.66f,61.9048f},
- {6.66f,38.0952f},
- {11.4219f,23.8095f},
- {16.1838f,14.2857f},
- {25.7076f,4.7619f},
- {35.2314f,0.0f},
- {54.279f,0.0f},
- {63.8029f,4.7619f},
- {73.3267f,14.2857f},
- {78.0886f,23.8095f}
-};
-
-static const Fl_Glut_StrokeStrip ch67st[] =
-{
- {18,ch67st0}
-};
-
-static const Fl_Glut_StrokeChar ch67 = {84.4886f,1,ch67st};
-
-/* char: 0x44 */
-
-static const Fl_Glut_StrokeVertex ch68st0[] =
-{
- {11.96f,100.0f},
- {11.96f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch68st1[] =
-{
- {11.96f,100.0f},
- {45.2933f,100.0f},
- {59.579f,95.2381f},
- {69.1029f,85.7143f},
- {73.8648f,76.1905f},
- {78.6267f,61.9048f},
- {78.6267f,38.0952f},
- {73.8648f,23.8095f},
- {69.1029f,14.2857f},
- {59.579f,4.7619f},
- {45.2933f,0.0f},
- {11.96f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch68st[] =
-{
- {2,ch68st0},
- {12,ch68st1}
-};
-
-static const Fl_Glut_StrokeChar ch68 = {85.2867f,2,ch68st};
-
-/* char: 0x45 */
-
-static const Fl_Glut_StrokeVertex ch69st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st1[] =
-{
- {11.42f,100.0f},
- {73.3248f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st2[] =
-{
- {11.42f,52.381f},
- {49.5152f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch69st3[] =
-{
- {11.42f,0.0f},
- {73.3248f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch69st[] =
-{
- {2,ch69st0},
- {2,ch69st1},
- {2,ch69st2},
- {2,ch69st3}
-};
-
-static const Fl_Glut_StrokeChar ch69 = {78.1848f,4,ch69st};
-
-/* char: 0x46 */
-
-static const Fl_Glut_StrokeVertex ch70st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch70st1[] =
-{
- {11.42f,100.0f},
- {73.3248f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch70st2[] =
-{
- {11.42f,52.381f},
- {49.5152f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch70st[] =
-{
- {2,ch70st0},
- {2,ch70st1},
- {2,ch70st2}
-};
-
-static const Fl_Glut_StrokeChar ch70 = {78.7448f,3,ch70st};
-
-/* char: 0x47 */
-
-static const Fl_Glut_StrokeVertex ch71st0[] =
-{
- {78.4886f,76.1905f},
- {73.7267f,85.7143f},
- {64.2029f,95.2381f},
- {54.679f,100.0f},
- {35.6314f,100.0f},
- {26.1076f,95.2381f},
- {16.5838f,85.7143f},
- {11.8219f,76.1905f},
- {7.06f,61.9048f},
- {7.06f,38.0952f},
- {11.8219f,23.8095f},
- {16.5838f,14.2857f},
- {26.1076f,4.7619f},
- {35.6314f,0.0f},
- {54.679f,0.0f},
- {64.2029f,4.7619f},
- {73.7267f,14.2857f},
- {78.4886f,23.8095f},
- {78.4886f,38.0952f}
-};
-
-static const Fl_Glut_StrokeVertex ch71st1[] =
-{
- {54.679f,38.0952f},
- {78.4886f,38.0952f}
-};
-
-static const Fl_Glut_StrokeStrip ch71st[] =
-{
- {19,ch71st0},
- {2,ch71st1}
-};
-
-static const Fl_Glut_StrokeChar ch71 = {89.7686f,2,ch71st};
-
-/* char: 0x48 */
-
-static const Fl_Glut_StrokeVertex ch72st0[] =
-{
- {11.42f,100.0f},
- {11.42f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch72st1[] =
-{
- {78.0867f,100.0f},
- {78.0867f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch72st2[] =
-{
- {11.42f,52.381f},
- {78.0867f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch72st[] =
-{
- {2,ch72st0},
- {2,ch72st1},
- {2,ch72st2}
-};
-
-static const Fl_Glut_StrokeChar ch72 = {89.0867f,3,ch72st};
-
-/* char: 0x49 */
-
-static const Fl_Glut_StrokeVertex ch73st0[] =
-{
- {10.86f,100.0f},
- {10.86f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch73st[] =
-{
- {2,ch73st0}
-};
-
-static const Fl_Glut_StrokeChar ch73 = {21.3f,1,ch73st};
-
-/* char: 0x4a */
-
-static const Fl_Glut_StrokeVertex ch74st0[] =
-{
- {50.119f,100.0f},
- {50.119f,23.8095f},
- {45.3571f,9.5238f},
- {40.5952f,4.7619f},
- {31.0714f,0.0f},
- {21.5476f,0.0f},
- {12.0238f,4.7619f},
- {7.2619f,9.5238f},
- {2.5f,23.8095f},
- {2.5f,33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch74st[] =
-{
- {10,ch74st0}
-};
-
-static const Fl_Glut_StrokeChar ch74 = {59.999f,1,ch74st};
-
-/* char: 0x4b */
-
-static const Fl_Glut_StrokeVertex ch75st0[] =
-{
- {11.28f,100.0f},
- {11.28f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch75st1[] =
-{
- {77.9467f,100.0f},
- {11.28f,33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch75st2[] =
-{
- {35.0895f,57.1429f},
- {77.9467f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch75st[] =
-{
- {2,ch75st0},
- {2,ch75st1},
- {2,ch75st2}
-};
-
-static const Fl_Glut_StrokeChar ch75 = {79.3267f,3,ch75st};
-
-/* char: 0x4c */
-
-static const Fl_Glut_StrokeVertex ch76st0[] =
-{
- {11.68f,100.0f},
- {11.68f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch76st1[] =
-{
- {11.68f,0.0f},
- {68.8229f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch76st[] =
-{
- {2,ch76st0},
- {2,ch76st1}
-};
-
-static const Fl_Glut_StrokeChar ch76 = {71.3229f,2,ch76st};
-
-/* char: 0x4d */
-
-static const Fl_Glut_StrokeVertex ch77st0[] =
-{
- {10.86f,100.0f},
- {10.86f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st1[] =
-{
- {10.86f,100.0f},
- {48.9552f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st2[] =
-{
- {87.0505f,100.0f},
- {48.9552f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch77st3[] =
-{
- {87.0505f,100.0f},
- {87.0505f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch77st[] =
-{
- {2,ch77st0},
- {2,ch77st1},
- {2,ch77st2},
- {2,ch77st3}
-};
-
-static const Fl_Glut_StrokeChar ch77 = {97.2105f,4,ch77st};
-
-/* char: 0x4e */
-
-static const Fl_Glut_StrokeVertex ch78st0[] =
-{
- {11.14f,100.0f},
- {11.14f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch78st1[] =
-{
- {11.14f,100.0f},
- {77.8067f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch78st2[] =
-{
- {77.8067f,100.0f},
- {77.8067f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch78st[] =
-{
- {2,ch78st0},
- {2,ch78st1},
- {2,ch78st2}
-};
-
-static const Fl_Glut_StrokeChar ch78 = {88.8067f,3,ch78st};
-
-/* char: 0x4f */
-
-static const Fl_Glut_StrokeVertex ch79st0[] =
-{
- {34.8114f,100.0f},
- {25.2876f,95.2381f},
- {15.7638f,85.7143f},
- {11.0019f,76.1905f},
- {6.24f,61.9048f},
- {6.24f,38.0952f},
- {11.0019f,23.8095f},
- {15.7638f,14.2857f},
- {25.2876f,4.7619f},
- {34.8114f,0.0f},
- {53.859f,0.0f},
- {63.3829f,4.7619f},
- {72.9067f,14.2857f},
- {77.6686f,23.8095f},
- {82.4305f,38.0952f},
- {82.4305f,61.9048f},
- {77.6686f,76.1905f},
- {72.9067f,85.7143f},
- {63.3829f,95.2381f},
- {53.859f,100.0f},
- {34.8114f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch79st[] =
-{
- {21,ch79st0}
-};
-
-static const Fl_Glut_StrokeChar ch79 = {88.8305f,1,ch79st};
-
-/* char: 0x50 */
-
-static const Fl_Glut_StrokeVertex ch80st0[] =
-{
- {12.1f,100.0f},
- {12.1f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch80st1[] =
-{
- {12.1f,100.0f},
- {54.9571f,100.0f},
- {69.2429f,95.2381f},
- {74.0048f,90.4762f},
- {78.7667f,80.9524f},
- {78.7667f,66.6667f},
- {74.0048f,57.1429f},
- {69.2429f,52.381f},
- {54.9571f,47.619f},
- {12.1f,47.619f}
-};
-
-static const Fl_Glut_StrokeStrip ch80st[] =
-{
- {2,ch80st0},
- {10,ch80st1}
-};
-
-static const Fl_Glut_StrokeChar ch80 = {85.6667f,2,ch80st};
-
-/* char: 0x51 */
-
-static const Fl_Glut_StrokeVertex ch81st0[] =
-{
- {33.8714f,100.0f},
- {24.3476f,95.2381f},
- {14.8238f,85.7143f},
- {10.0619f,76.1905f},
- {5.3f,61.9048f},
- {5.3f,38.0952f},
- {10.0619f,23.8095f},
- {14.8238f,14.2857f},
- {24.3476f,4.7619f},
- {33.8714f,0.0f},
- {52.919f,0.0f},
- {62.4429f,4.7619f},
- {71.9667f,14.2857f},
- {76.7286f,23.8095f},
- {81.4905f,38.0952f},
- {81.4905f,61.9048f},
- {76.7286f,76.1905f},
- {71.9667f,85.7143f},
- {62.4429f,95.2381f},
- {52.919f,100.0f},
- {33.8714f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch81st1[] =
-{
- {48.1571f,19.0476f},
- {76.7286f,-9.5238f}
-};
-
-static const Fl_Glut_StrokeStrip ch81st[] =
-{
- {21,ch81st0},
- {2,ch81st1}
-};
-
-static const Fl_Glut_StrokeChar ch81 = {88.0905f,2,ch81st};
-
-/* char: 0x52 */
-
-static const Fl_Glut_StrokeVertex ch82st0[] =
-{
- {11.68f,100.0f},
- {11.68f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch82st1[] =
-{
- {11.68f,100.0f},
- {54.5371f,100.0f},
- {68.8229f,95.2381f},
- {73.5848f,90.4762f},
- {78.3467f,80.9524f},
- {78.3467f,71.4286f},
- {73.5848f,61.9048f},
- {68.8229f,57.1429f},
- {54.5371f,52.381f},
- {11.68f,52.381f}
-};
-
-static const Fl_Glut_StrokeVertex ch82st2[] =
-{
- {45.0133f,52.381f},
- {78.3467f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch82st[] =
-{
- {2,ch82st0},
- {10,ch82st1},
- {2,ch82st2}
-};
-
-static const Fl_Glut_StrokeChar ch82 = {82.3667f,3,ch82st};
-
-/* char: 0x53 */
-
-static const Fl_Glut_StrokeVertex ch83st0[] =
-{
- {74.6667f,85.7143f},
- {65.1429f,95.2381f},
- {50.8571f,100.0f},
- {31.8095f,100.0f},
- {17.5238f,95.2381f},
- {8.0f,85.7143f},
- {8.0f,76.1905f},
- {12.7619f,66.6667f},
- {17.5238f,61.9048f},
- {27.0476f,57.1429f},
- {55.619f,47.619f},
- {65.1429f,42.8571f},
- {69.9048f,38.0952f},
- {74.6667f,28.5714f},
- {74.6667f,14.2857f},
- {65.1429f,4.7619f},
- {50.8571f,0.0f},
- {31.8095f,0.0f},
- {17.5238f,4.7619f},
- {8.0f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch83st[] =
-{
- {20,ch83st0}
-};
-
-static const Fl_Glut_StrokeChar ch83 = {80.8267f,1,ch83st};
-
-/* char: 0x54 */
-
-static const Fl_Glut_StrokeVertex ch84st0[] =
-{
- {35.6933f,100.0f},
- {35.6933f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch84st1[] =
-{
- {2.36f,100.0f},
- {69.0267f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch84st[] =
-{
- {2,ch84st0},
- {2,ch84st1}
-};
-
-static const Fl_Glut_StrokeChar ch84 = {71.9467f,2,ch84st};
-
-/* char: 0x55 */
-
-static const Fl_Glut_StrokeVertex ch85st0[] =
-{
- {11.54f,100.0f},
- {11.54f,28.5714f},
- {16.3019f,14.2857f},
- {25.8257f,4.7619f},
- {40.1114f,0.0f},
- {49.6352f,0.0f},
- {63.921f,4.7619f},
- {73.4448f,14.2857f},
- {78.2067f,28.5714f},
- {78.2067f,100.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch85st[] =
-{
- {10,ch85st0}
-};
-
-static const Fl_Glut_StrokeChar ch85 = {89.4867f,1,ch85st};
-
-/* char: 0x56 */
-
-static const Fl_Glut_StrokeVertex ch86st0[] =
-{
- {2.36f,100.0f},
- {40.4552f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch86st1[] =
-{
- {78.5505f,100.0f},
- {40.4552f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch86st[] =
-{
- {2,ch86st0},
- {2,ch86st1}
-};
-
-static const Fl_Glut_StrokeChar ch86 = {81.6105f,2,ch86st};
-
-/* char: 0x57 */
-
-static const Fl_Glut_StrokeVertex ch87st0[] =
-{
- {2.22f,100.0f},
- {26.0295f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st1[] =
-{
- {49.839f,100.0f},
- {26.0295f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st2[] =
-{
- {49.839f,100.0f},
- {73.6486f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch87st3[] =
-{
- {97.4581f,100.0f},
- {73.6486f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch87st[] =
-{
- {2,ch87st0},
- {2,ch87st1},
- {2,ch87st2},
- {2,ch87st3}
-};
-
-static const Fl_Glut_StrokeChar ch87 = {100.518f,4,ch87st};
-
-/* char: 0x58 */
-
-static const Fl_Glut_StrokeVertex ch88st0[] =
-{
- {2.5f,100.0f},
- {69.1667f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch88st1[] =
-{
- {69.1667f,100.0f},
- {2.5f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch88st[] =
-{
- {2,ch88st0},
- {2,ch88st1}
-};
-
-static const Fl_Glut_StrokeChar ch88 = {72.3667f,2,ch88st};
-
-/* char: 0x59 */
-
-static const Fl_Glut_StrokeVertex ch89st0[] =
-{
- {1.52f,100.0f},
- {39.6152f,52.381f},
- {39.6152f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch89st1[] =
-{
- {77.7105f,100.0f},
- {39.6152f,52.381f}
-};
-
-static const Fl_Glut_StrokeStrip ch89st[] =
-{
- {3,ch89st0},
- {2,ch89st1}
-};
-
-static const Fl_Glut_StrokeChar ch89 = {79.6505f,2,ch89st};
-
-/* char: 0x5a */
-
-static const Fl_Glut_StrokeVertex ch90st0[] =
-{
- {69.1667f,100.0f},
- {2.5f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch90st1[] =
-{
- {2.5f,100.0f},
- {69.1667f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch90st2[] =
-{
- {2.5f,0.0f},
- {69.1667f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch90st[] =
-{
- {2,ch90st0},
- {2,ch90st1},
- {2,ch90st2}
-};
-
-static const Fl_Glut_StrokeChar ch90 = {73.7467f,3,ch90st};
-
-/* char: 0x5b */
-
-static const Fl_Glut_StrokeVertex ch91st0[] =
-{
- {7.78f,119.048f},
- {7.78f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st1[] =
-{
- {12.5419f,119.048f},
- {12.5419f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st2[] =
-{
- {7.78f,119.048f},
- {41.1133f,119.048f}
-};
-
-static const Fl_Glut_StrokeVertex ch91st3[] =
-{
- {7.78f,-33.3333f},
- {41.1133f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch91st[] =
-{
- {2,ch91st0},
- {2,ch91st1},
- {2,ch91st2},
- {2,ch91st3}
-};
-
-static const Fl_Glut_StrokeChar ch91 = {46.1133f,4,ch91st};
-
-/* char: 0x5c */
-
-static const Fl_Glut_StrokeVertex ch92st0[] =
-{
- {5.84f,100.0f},
- {72.5067f,-14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch92st[] =
-{
- {2,ch92st0}
-};
-
-static const Fl_Glut_StrokeChar ch92 = {78.2067f,1,ch92st};
-
-/* char: 0x5d */
-
-static const Fl_Glut_StrokeVertex ch93st0[] =
-{
- {33.0114f,119.048f},
- {33.0114f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st1[] =
-{
- {37.7733f,119.048f},
- {37.7733f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st2[] =
-{
- {4.44f,119.048f},
- {37.7733f,119.048f}
-};
-
-static const Fl_Glut_StrokeVertex ch93st3[] =
-{
- {4.44f,-33.3333f},
- {37.7733f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch93st[] =
-{
- {2,ch93st0},
- {2,ch93st1},
- {2,ch93st2},
- {2,ch93st3}
-};
-
-static const Fl_Glut_StrokeChar ch93 = {46.3933f,4,ch93st};
-
-/* char: 0x5e */
-
-static const Fl_Glut_StrokeVertex ch94st0[] =
-{
- {44.0752f,109.524f},
- {5.98f,42.8571f}
-};
-
-static const Fl_Glut_StrokeVertex ch94st1[] =
-{
- {44.0752f,109.524f},
- {82.1705f,42.8571f}
-};
-
-static const Fl_Glut_StrokeStrip ch94st[] =
-{
- {2,ch94st0},
- {2,ch94st1}
-};
-
-static const Fl_Glut_StrokeChar ch94 = {90.2305f,2,ch94st};
-
-/* char: 0x5f */
-
-static const Fl_Glut_StrokeVertex ch95st0[] =
-{
- {-1.1f,-33.3333f},
- {103.662f,-33.3333f},
- {103.662f,-28.5714f},
- {-1.1f,-28.5714f},
- {-1.1f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch95st[] =
-{
- {5,ch95st0}
-};
-
-static const Fl_Glut_StrokeChar ch95 = {104.062f,1,ch95st};
-
-/* char: 0x60 */
-
-static const Fl_Glut_StrokeVertex ch96st0[] =
-{
- {33.0219f,100.0f},
- {56.8314f,71.4286f}
-};
-
-static const Fl_Glut_StrokeVertex ch96st1[] =
-{
- {33.0219f,100.0f},
- {28.26f,95.2381f},
- {56.8314f,71.4286f}
-};
-
-static const Fl_Glut_StrokeStrip ch96st[] =
-{
- {2,ch96st0},
- {3,ch96st1}
-};
-
-static const Fl_Glut_StrokeChar ch96 = {83.5714f,2,ch96st};
-
-/* char: 0x61 */
-
-static const Fl_Glut_StrokeVertex ch97st0[] =
-{
- {63.8229f,66.6667f},
- {63.8229f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch97st1[] =
-{
- {63.8229f,52.381f},
- {54.299f,61.9048f},
- {44.7752f,66.6667f},
- {30.4895f,66.6667f},
- {20.9657f,61.9048f},
- {11.4419f,52.381f},
- {6.68f,38.0952f},
- {6.68f,28.5714f},
- {11.4419f,14.2857f},
- {20.9657f,4.7619f},
- {30.4895f,0.0f},
- {44.7752f,0.0f},
- {54.299f,4.7619f},
- {63.8229f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch97st[] =
-{
- {2,ch97st0},
- {14,ch97st1}
-};
-
-static const Fl_Glut_StrokeChar ch97 = {66.6029f,2,ch97st};
-
-/* char: 0x62 */
-
-static const Fl_Glut_StrokeVertex ch98st0[] =
-{
- {8.76f,100.0f},
- {8.76f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch98st1[] =
-{
- {8.76f,52.381f},
- {18.2838f,61.9048f},
- {27.8076f,66.6667f},
- {42.0933f,66.6667f},
- {51.6171f,61.9048f},
- {61.141f,52.381f},
- {65.9029f,38.0952f},
- {65.9029f,28.5714f},
- {61.141f,14.2857f},
- {51.6171f,4.7619f},
- {42.0933f,0.0f},
- {27.8076f,0.0f},
- {18.2838f,4.7619f},
- {8.76f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch98st[] =
-{
- {2,ch98st0},
- {14,ch98st1}
-};
-
-static const Fl_Glut_StrokeChar ch98 = {70.4629f,2,ch98st};
-
-/* char: 0x63 */
-
-static const Fl_Glut_StrokeVertex ch99st0[] =
-{
- {62.6629f,52.381f},
- {53.139f,61.9048f},
- {43.6152f,66.6667f},
- {29.3295f,66.6667f},
- {19.8057f,61.9048f},
- {10.2819f,52.381f},
- {5.52f,38.0952f},
- {5.52f,28.5714f},
- {10.2819f,14.2857f},
- {19.8057f,4.7619f},
- {29.3295f,0.0f},
- {43.6152f,0.0f},
- {53.139f,4.7619f},
- {62.6629f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch99st[] =
-{
- {14,ch99st0}
-};
-
-static const Fl_Glut_StrokeChar ch99 = {68.9229f,1,ch99st};
-
-/* char: 0x64 */
-
-static const Fl_Glut_StrokeVertex ch100st0[] =
-{
- {61.7829f,100.0f},
- {61.7829f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch100st1[] =
-{
- {61.7829f,52.381f},
- {52.259f,61.9048f},
- {42.7352f,66.6667f},
- {28.4495f,66.6667f},
- {18.9257f,61.9048f},
- {9.4019f,52.381f},
- {4.64f,38.0952f},
- {4.64f,28.5714f},
- {9.4019f,14.2857f},
- {18.9257f,4.7619f},
- {28.4495f,0.0f},
- {42.7352f,0.0f},
- {52.259f,4.7619f},
- {61.7829f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch100st[] =
-{
- {2,ch100st0},
- {14,ch100st1}
-};
-
-static const Fl_Glut_StrokeChar ch100 = {70.2629f,2,ch100st};
-
-/* char: 0x65 */
-
-static const Fl_Glut_StrokeVertex ch101st0[] =
-{
- {5.72f,38.0952f},
- {62.8629f,38.0952f},
- {62.8629f,47.619f},
- {58.101f,57.1429f},
- {53.339f,61.9048f},
- {43.8152f,66.6667f},
- {29.5295f,66.6667f},
- {20.0057f,61.9048f},
- {10.4819f,52.381f},
- {5.72f,38.0952f},
- {5.72f,28.5714f},
- {10.4819f,14.2857f},
- {20.0057f,4.7619f},
- {29.5295f,0.0f},
- {43.8152f,0.0f},
- {53.339f,4.7619f},
- {62.8629f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch101st[] =
-{
- {17,ch101st0}
-};
-
-static const Fl_Glut_StrokeChar ch101 = {68.5229f,1,ch101st};
-
-/* char: 0x66 */
-
-static const Fl_Glut_StrokeVertex ch102st0[] =
-{
- {38.7752f,100.0f},
- {29.2514f,100.0f},
- {19.7276f,95.2381f},
- {14.9657f,80.9524f},
- {14.9657f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch102st1[] =
-{
- {0.68f,66.6667f},
- {34.0133f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch102st[] =
-{
- {5,ch102st0},
- {2,ch102st1}
-};
-
-static const Fl_Glut_StrokeChar ch102 = {38.6552f,2,ch102st};
-
-/* char: 0x67 */
-
-static const Fl_Glut_StrokeVertex ch103st0[] =
-{
- {62.5029f,66.6667f},
- {62.5029f,-9.5238f},
- {57.741f,-23.8095f},
- {52.979f,-28.5714f},
- {43.4552f,-33.3333f},
- {29.1695f,-33.3333f},
- {19.6457f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch103st1[] =
-{
- {62.5029f,52.381f},
- {52.979f,61.9048f},
- {43.4552f,66.6667f},
- {29.1695f,66.6667f},
- {19.6457f,61.9048f},
- {10.1219f,52.381f},
- {5.36f,38.0952f},
- {5.36f,28.5714f},
- {10.1219f,14.2857f},
- {19.6457f,4.7619f},
- {29.1695f,0.0f},
- {43.4552f,0.0f},
- {52.979f,4.7619f},
- {62.5029f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch103st[] =
-{
- {7,ch103st0},
- {14,ch103st1}
-};
-
-static const Fl_Glut_StrokeChar ch103 = {70.9829f,2,ch103st};
-
-/* char: 0x68 */
-
-static const Fl_Glut_StrokeVertex ch104st0[] =
-{
- {9.6f,100.0f},
- {9.6f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch104st1[] =
-{
- {9.6f,47.619f},
- {23.8857f,61.9048f},
- {33.4095f,66.6667f},
- {47.6952f,66.6667f},
- {57.219f,61.9048f},
- {61.981f,47.619f},
- {61.981f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch104st[] =
-{
- {2,ch104st0},
- {7,ch104st1}
-};
-
-static const Fl_Glut_StrokeChar ch104 = {71.021f,2,ch104st};
-
-/* char: 0x69 */
-
-static const Fl_Glut_StrokeVertex ch105st0[] =
-{
- {10.02f,100.0f},
- {14.7819f,95.2381f},
- {19.5438f,100.0f},
- {14.7819f,104.762f},
- {10.02f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch105st1[] =
-{
- {14.7819f,66.6667f},
- {14.7819f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch105st[] =
-{
- {5,ch105st0},
- {2,ch105st1}
-};
-
-static const Fl_Glut_StrokeChar ch105 = {28.8638f,2,ch105st};
-
-/* char: 0x6a */
-
-static const Fl_Glut_StrokeVertex ch106st0[] =
-{
- {17.3876f,100.0f},
- {22.1495f,95.2381f},
- {26.9114f,100.0f},
- {22.1495f,104.762f},
- {17.3876f,100.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch106st1[] =
-{
- {22.1495f,66.6667f},
- {22.1495f,-14.2857f},
- {17.3876f,-28.5714f},
- {7.8638f,-33.3333f},
- {-1.66f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch106st[] =
-{
- {5,ch106st0},
- {5,ch106st1}
-};
-
-static const Fl_Glut_StrokeChar ch106 = {36.2314f,2,ch106st};
-
-/* char: 0x6b */
-
-static const Fl_Glut_StrokeVertex ch107st0[] =
-{
- {9.6f,100.0f},
- {9.6f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch107st1[] =
-{
- {57.219f,66.6667f},
- {9.6f,19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch107st2[] =
-{
- {28.6476f,38.0952f},
- {61.981f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch107st[] =
-{
- {2,ch107st0},
- {2,ch107st1},
- {2,ch107st2}
-};
-
-static const Fl_Glut_StrokeChar ch107 = {62.521f,3,ch107st};
-
-/* char: 0x6c */
-
-static const Fl_Glut_StrokeVertex ch108st0[] =
-{
- {10.02f,100.0f},
- {10.02f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch108st[] =
-{
- {2,ch108st0}
-};
-
-static const Fl_Glut_StrokeChar ch108 = {19.34f,1,ch108st};
-
-/* char: 0x6d */
-
-static const Fl_Glut_StrokeVertex ch109st0[] =
-{
- {9.6f,66.6667f},
- {9.6f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch109st1[] =
-{
- {9.6f,47.619f},
- {23.8857f,61.9048f},
- {33.4095f,66.6667f},
- {47.6952f,66.6667f},
- {57.219f,61.9048f},
- {61.981f,47.619f},
- {61.981f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch109st2[] =
-{
- {61.981f,47.619f},
- {76.2667f,61.9048f},
- {85.7905f,66.6667f},
- {100.076f,66.6667f},
- {109.6f,61.9048f},
- {114.362f,47.619f},
- {114.362f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch109st[] =
-{
- {2,ch109st0},
- {7,ch109st1},
- {7,ch109st2}
-};
-
-static const Fl_Glut_StrokeChar ch109 = {123.962f,3,ch109st};
-
-/* char: 0x6e */
-
-static const Fl_Glut_StrokeVertex ch110st0[] =
-{
- {9.18f,66.6667f},
- {9.18f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch110st1[] =
-{
- {9.18f,47.619f},
- {23.4657f,61.9048f},
- {32.9895f,66.6667f},
- {47.2752f,66.6667f},
- {56.799f,61.9048f},
- {61.561f,47.619f},
- {61.561f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch110st[] =
-{
- {2,ch110st0},
- {7,ch110st1}
-};
-
-static const Fl_Glut_StrokeChar ch110 = {70.881f,2,ch110st};
-
-/* char: 0x6f */
-
-static const Fl_Glut_StrokeVertex ch111st0[] =
-{
- {28.7895f,66.6667f},
- {19.2657f,61.9048f},
- {9.7419f,52.381f},
- {4.98f,38.0952f},
- {4.98f,28.5714f},
- {9.7419f,14.2857f},
- {19.2657f,4.7619f},
- {28.7895f,0.0f},
- {43.0752f,0.0f},
- {52.599f,4.7619f},
- {62.1229f,14.2857f},
- {66.8848f,28.5714f},
- {66.8848f,38.0952f},
- {62.1229f,52.381f},
- {52.599f,61.9048f},
- {43.0752f,66.6667f},
- {28.7895f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch111st[] =
-{
- {17,ch111st0}
-};
-
-static const Fl_Glut_StrokeChar ch111 = {71.7448f,1,ch111st};
-
-/* char: 0x70 */
-
-static const Fl_Glut_StrokeVertex ch112st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch112st1[] =
-{
- {9.46f,52.381f},
- {18.9838f,61.9048f},
- {28.5076f,66.6667f},
- {42.7933f,66.6667f},
- {52.3171f,61.9048f},
- {61.841f,52.381f},
- {66.6029f,38.0952f},
- {66.6029f,28.5714f},
- {61.841f,14.2857f},
- {52.3171f,4.7619f},
- {42.7933f,0.0f},
- {28.5076f,0.0f},
- {18.9838f,4.7619f},
- {9.46f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch112st[] =
-{
- {2,ch112st0},
- {14,ch112st1}
-};
-
-static const Fl_Glut_StrokeChar ch112 = {70.8029f,2,ch112st};
-
-/* char: 0x71 */
-
-static const Fl_Glut_StrokeVertex ch113st0[] =
-{
- {61.9829f,66.6667f},
- {61.9829f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch113st1[] =
-{
- {61.9829f,52.381f},
- {52.459f,61.9048f},
- {42.9352f,66.6667f},
- {28.6495f,66.6667f},
- {19.1257f,61.9048f},
- {9.6019f,52.381f},
- {4.84f,38.0952f},
- {4.84f,28.5714f},
- {9.6019f,14.2857f},
- {19.1257f,4.7619f},
- {28.6495f,0.0f},
- {42.9352f,0.0f},
- {52.459f,4.7619f},
- {61.9829f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch113st[] =
-{
- {2,ch113st0},
- {14,ch113st1}
-};
-
-static const Fl_Glut_StrokeChar ch113 = {70.7429f,2,ch113st};
-
-/* char: 0x72 */
-
-static const Fl_Glut_StrokeVertex ch114st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch114st1[] =
-{
- {9.46f,38.0952f},
- {14.2219f,52.381f},
- {23.7457f,61.9048f},
- {33.2695f,66.6667f},
- {47.5552f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch114st[] =
-{
- {2,ch114st0},
- {5,ch114st1}
-};
-
-static const Fl_Glut_StrokeChar ch114 = {49.4952f,2,ch114st};
-
-/* char: 0x73 */
-
-static const Fl_Glut_StrokeVertex ch115st0[] =
-{
- {57.081f,52.381f},
- {52.319f,61.9048f},
- {38.0333f,66.6667f},
- {23.7476f,66.6667f},
- {9.4619f,61.9048f},
- {4.7f,52.381f},
- {9.4619f,42.8571f},
- {18.9857f,38.0952f},
- {42.7952f,33.3333f},
- {52.319f,28.5714f},
- {57.081f,19.0476f},
- {57.081f,14.2857f},
- {52.319f,4.7619f},
- {38.0333f,0.0f},
- {23.7476f,0.0f},
- {9.4619f,4.7619f},
- {4.7f,14.2857f}
-};
-
-static const Fl_Glut_StrokeStrip ch115st[] =
-{
- {17,ch115st0}
-};
-
-static const Fl_Glut_StrokeChar ch115 = {62.321f,1,ch115st};
-
-/* char: 0x74 */
-
-static const Fl_Glut_StrokeVertex ch116st0[] =
-{
- {14.8257f,100.0f},
- {14.8257f,19.0476f},
- {19.5876f,4.7619f},
- {29.1114f,0.0f},
- {38.6352f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch116st1[] =
-{
- {0.54f,66.6667f},
- {33.8733f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch116st[] =
-{
- {5,ch116st0},
- {2,ch116st1}
-};
-
-static const Fl_Glut_StrokeChar ch116 = {39.3152f,2,ch116st};
-
-/* char: 0x75 */
-
-static const Fl_Glut_StrokeVertex ch117st0[] =
-{
- {9.46f,66.6667f},
- {9.46f,19.0476f},
- {14.2219f,4.7619f},
- {23.7457f,0.0f},
- {38.0314f,0.0f},
- {47.5552f,4.7619f},
- {61.841f,19.0476f}
-};
-
-static const Fl_Glut_StrokeVertex ch117st1[] =
-{
- {61.841f,66.6667f},
- {61.841f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch117st[] =
-{
- {7,ch117st0},
- {2,ch117st1}
-};
-
-static const Fl_Glut_StrokeChar ch117 = {71.161f,2,ch117st};
-
-/* char: 0x76 */
-
-static const Fl_Glut_StrokeVertex ch118st0[] =
-{
- {1.8f,66.6667f},
- {30.3714f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch118st1[] =
-{
- {58.9429f,66.6667f},
- {30.3714f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch118st[] =
-{
- {2,ch118st0},
- {2,ch118st1}
-};
-
-static const Fl_Glut_StrokeChar ch118 = {60.6029f,2,ch118st};
-
-/* char: 0x77 */
-
-static const Fl_Glut_StrokeVertex ch119st0[] =
-{
- {2.5f,66.6667f},
- {21.5476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st1[] =
-{
- {40.5952f,66.6667f},
- {21.5476f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st2[] =
-{
- {40.5952f,66.6667f},
- {59.6429f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch119st3[] =
-{
- {78.6905f,66.6667f},
- {59.6429f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch119st[] =
-{
- {2,ch119st0},
- {2,ch119st1},
- {2,ch119st2},
- {2,ch119st3}
-};
-
-static const Fl_Glut_StrokeChar ch119 = {80.4905f,4,ch119st};
-
-/* char: 0x78 */
-
-static const Fl_Glut_StrokeVertex ch120st0[] =
-{
- {1.66f,66.6667f},
- {54.041f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch120st1[] =
-{
- {54.041f,66.6667f},
- {1.66f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch120st[] =
-{
- {2,ch120st0},
- {2,ch120st1}
-};
-
-static const Fl_Glut_StrokeChar ch120 = {56.401f,2,ch120st};
-
-/* char: 0x79 */
-
-static const Fl_Glut_StrokeVertex ch121st0[] =
-{
- {6.5619f,66.6667f},
- {35.1333f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch121st1[] =
-{
- {63.7048f,66.6667f},
- {35.1333f,0.0f},
- {25.6095f,-19.0476f},
- {16.0857f,-28.5714f},
- {6.5619f,-33.3333f},
- {1.8f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch121st[] =
-{
- {2,ch121st0},
- {6,ch121st1}
-};
-
-static const Fl_Glut_StrokeChar ch121 = {66.0648f,2,ch121st};
-
-/* char: 0x7a */
-
-static const Fl_Glut_StrokeVertex ch122st0[] =
-{
- {56.821f,66.6667f},
- {4.44f,0.0f}
-};
-
-static const Fl_Glut_StrokeVertex ch122st1[] =
-{
- {4.44f,66.6667f},
- {56.821f,66.6667f}
-};
-
-static const Fl_Glut_StrokeVertex ch122st2[] =
-{
- {4.44f,0.0f},
- {56.821f,0.0f}
-};
-
-static const Fl_Glut_StrokeStrip ch122st[] =
-{
- {2,ch122st0},
- {2,ch122st1},
- {2,ch122st2}
-};
-
-static const Fl_Glut_StrokeChar ch122 = {61.821f,3,ch122st};
-
-/* char: 0x7b */
-
-static const Fl_Glut_StrokeVertex ch123st0[] =
-{
- {31.1895f,119.048f},
- {21.6657f,114.286f},
- {16.9038f,109.524f},
- {12.1419f,100.0f},
- {12.1419f,90.4762f},
- {16.9038f,80.9524f},
- {21.6657f,76.1905f},
- {26.4276f,66.6667f},
- {26.4276f,57.1429f},
- {16.9038f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch123st1[] =
-{
- {21.6657f,114.286f},
- {16.9038f,104.762f},
- {16.9038f,95.2381f},
- {21.6657f,85.7143f},
- {26.4276f,80.9524f},
- {31.1895f,71.4286f},
- {31.1895f,61.9048f},
- {26.4276f,52.381f},
- {7.38f,42.8571f},
- {26.4276f,33.3333f},
- {31.1895f,23.8095f},
- {31.1895f,14.2857f},
- {26.4276f,4.7619f},
- {21.6657f,0.0f},
- {16.9038f,-9.5238f},
- {16.9038f,-19.0476f},
- {21.6657f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch123st2[] =
-{
- {16.9038f,38.0952f},
- {26.4276f,28.5714f},
- {26.4276f,19.0476f},
- {21.6657f,9.5238f},
- {16.9038f,4.7619f},
- {12.1419f,-4.7619f},
- {12.1419f,-14.2857f},
- {16.9038f,-23.8095f},
- {21.6657f,-28.5714f},
- {31.1895f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch123st[] =
-{
- {10,ch123st0},
- {17,ch123st1},
- {10,ch123st2}
-};
-
-static const Fl_Glut_StrokeChar ch123 = {41.6295f,3,ch123st};
-
-/* char: 0x7c */
-
-static const Fl_Glut_StrokeVertex ch124st0[] =
-{
- {11.54f,119.048f},
- {11.54f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch124st[] =
-{
- {2,ch124st0}
-};
-
-static const Fl_Glut_StrokeChar ch124 = {23.78f,1,ch124st};
-
-/* char: 0x7d */
-
-static const Fl_Glut_StrokeVertex ch125st0[] =
-{
- {9.18f,119.048f},
- {18.7038f,114.286f},
- {23.4657f,109.524f},
- {28.2276f,100.0f},
- {28.2276f,90.4762f},
- {23.4657f,80.9524f},
- {18.7038f,76.1905f},
- {13.9419f,66.6667f},
- {13.9419f,57.1429f},
- {23.4657f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch125st1[] =
-{
- {18.7038f,114.286f},
- {23.4657f,104.762f},
- {23.4657f,95.2381f},
- {18.7038f,85.7143f},
- {13.9419f,80.9524f},
- {9.18f,71.4286f},
- {9.18f,61.9048f},
- {13.9419f,52.381f},
- {32.9895f,42.8571f},
- {13.9419f,33.3333f},
- {9.18f,23.8095f},
- {9.18f,14.2857f},
- {13.9419f,4.7619f},
- {18.7038f,0.0f},
- {23.4657f,-9.5238f},
- {23.4657f,-19.0476f},
- {18.7038f,-28.5714f}
-};
-
-static const Fl_Glut_StrokeVertex ch125st2[] =
-{
- {23.4657f,38.0952f},
- {13.9419f,28.5714f},
- {13.9419f,19.0476f},
- {18.7038f,9.5238f},
- {23.4657f,4.7619f},
- {28.2276f,-4.7619f},
- {28.2276f,-14.2857f},
- {23.4657f,-23.8095f},
- {18.7038f,-28.5714f},
- {9.18f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeStrip ch125st[] =
-{
- {10,ch125st0},
- {17,ch125st1},
- {10,ch125st2}
-};
-
-static const Fl_Glut_StrokeChar ch125 = {41.4695f,3,ch125st};
-
-/* char: 0x7e */
-
-static const Fl_Glut_StrokeVertex ch126st0[] =
-{
- {2.92f,28.5714f},
- {2.92f,38.0952f},
- {7.6819f,52.381f},
- {17.2057f,57.1429f},
- {26.7295f,57.1429f},
- {36.2533f,52.381f},
- {55.301f,38.0952f},
- {64.8248f,33.3333f},
- {74.3486f,33.3333f},
- {83.8724f,38.0952f},
- {88.6343f,47.619f}
-};
-
-static const Fl_Glut_StrokeVertex ch126st1[] =
-{
- {2.92f,38.0952f},
- {7.6819f,47.619f},
- {17.2057f,52.381f},
- {26.7295f,52.381f},
- {36.2533f,47.619f},
- {55.301f,33.3333f},
- {64.8248f,28.5714f},
- {74.3486f,28.5714f},
- {83.8724f,33.3333f},
- {88.6343f,47.619f},
- {88.6343f,57.1429f}
-};
-
-static const Fl_Glut_StrokeStrip ch126st[] =
-{
- {11,ch126st0},
- {11,ch126st1}
-};
-
-static const Fl_Glut_StrokeChar ch126 = {91.2743f,2,ch126st};
-
-/* char: 0x7f */
-
-static const Fl_Glut_StrokeVertex ch127st0[] =
-{
- {52.381f,100.0f},
- {14.2857f,-33.3333f}
-};
-
-static const Fl_Glut_StrokeVertex ch127st1[] =
-{
- {28.5714f,66.6667f},
- {14.2857f,61.9048f},
- {4.7619f,52.381f},
- {0.0f,38.0952f},
- {0.0f,23.8095f},
- {4.7619f,14.2857f},
- {14.2857f,4.7619f},
- {28.5714f,0.0f},
- {38.0952f,0.0f},
- {52.381f,4.7619f},
- {61.9048f,14.2857f},
- {66.6667f,28.5714f},
- {66.6667f,42.8571f},
- {61.9048f,52.381f},
- {52.381f,61.9048f},
- {38.0952f,66.6667f},
- {28.5714f,66.6667f}
-};
-
-static const Fl_Glut_StrokeStrip ch127st[] =
-{
- {2,ch127st0},
- {17,ch127st1}
-};
-
-static const Fl_Glut_StrokeChar ch127 = {66.6667f,2,ch127st};
-
-static const Fl_Glut_StrokeChar *chars[] =
-{
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- &ch32, &ch33, &ch34, &ch35, &ch36, &ch37, &ch38, &ch39,
- &ch40, &ch41, &ch42, &ch43, &ch44, &ch45, &ch46, &ch47,
- &ch48, &ch49, &ch50, &ch51, &ch52, &ch53, &ch54, &ch55,
- &ch56, &ch57, &ch58, &ch59, &ch60, &ch61, &ch62, &ch63,
- &ch64, &ch65, &ch66, &ch67, &ch68, &ch69, &ch70, &ch71,
- &ch72, &ch73, &ch74, &ch75, &ch76, &ch77, &ch78, &ch79,
- &ch80, &ch81, &ch82, &ch83, &ch84, &ch85, &ch86, &ch87,
- &ch88, &ch89, &ch90, &ch91, &ch92, &ch93, &ch94, &ch95,
- &ch96, &ch97, &ch98, &ch99, &ch100, &ch101, &ch102, &ch103,
- &ch104, &ch105, &ch106, &ch107, &ch108, &ch109, &ch110, &ch111,
- &ch112, &ch113, &ch114, &ch115, &ch116, &ch117, &ch118, &ch119,
- &ch120, &ch121, &ch122, &ch123, &ch124, &ch125, &ch126, &ch127
-};
-
-Fl_Glut_StrokeFont glutStrokeRoman = {(char *)"Roman",128,152.381f,chars};
--- a/DoConfig/fltk/src/freeglut_teapot.cxx
+++ /dev/null
@@ -1,164 +1,0 @@
-/*
- * freeglut_teapot.c
- *
- * Teapot(tm) rendering code.
- *
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>
- * Creation date: Fri Dec 24 1999
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * Original teapot code copyright follows:
- */
-
-/*
- * (c) Copyright 1993, Silicon Graphics, Inc.
- *
- * ALL RIGHTS RESERVED
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that
- * both the copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Silicon
- * Graphics, Inc. not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
- * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
- * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
- * EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
- * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
- * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
- * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
- * NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- *
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer
- * Software clause at DFARS 252.227-7013 and/or in similar or
- * successor clauses in the FAR or the DOD or NASA FAR
- * Supplement.  Unpublished-- rights reserved under the copyright
- * laws of the United States.  Contractor/manufacturer is Silicon
- * Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
- * 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-
-#include <FL/glut.H>
-#include "freeglut_teapot_data.h"
-
-/* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
-
-
-static void fghTeapot( GLint grid, GLdouble scale, GLenum type )
-{
-    double p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3];
-    long i, j, k, l;
-
-    glPushAttrib( GL_ENABLE_BIT | GL_EVAL_BIT );
-    glEnable( GL_AUTO_NORMAL );
-    glEnable( GL_NORMALIZE );
-    glEnable( GL_MAP2_VERTEX_3 );
-    glEnable( GL_MAP2_TEXTURE_COORD_2 );
-
-    glPushMatrix();
-    glRotated( 270.0, 1.0, 0.0, 0.0 );
-    glScaled( 0.5 * scale, 0.5 * scale, 0.5 * scale );
-    glTranslated( 0.0, 0.0, -1.5 );
-
-    for (i = 0; i < 10; i++) {
-      for (j = 0; j < 4; j++) {
-        for (k = 0; k < 4; k++) {
-          for (l = 0; l < 3; l++) {
-            p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-            q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-            if (l == 1)
-              q[j][k][l] *= -1.0;
-            if (i < 6) {
-              r[j][k][l] =
-                cpdata[patchdata[i][j * 4 + (3 - k)]][l];
-              if (l == 0)
-                r[j][k][l] *= -1.0;
-              s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l];
-              if (l == 0)
-                s[j][k][l] *= -1.0;
-              if (l == 1)
-                s[j][k][l] *= -1.0;
-            }
-          }
-        }
-      }
-
-      glMap2d(GL_MAP2_TEXTURE_COORD_2, 0.0, 1.0, 2, 2, 0.0, 1.0, 4, 2,
-        &tex[0][0][0]);
-      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-        &p[0][0][0]);
-      glMapGrid2d(grid, 0.0, 1.0, grid, 0.0, 1.0);
-      glEvalMesh2(type, 0, grid, 0, grid);
-      glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-        &q[0][0][0]);
-      glEvalMesh2(type, 0, grid, 0, grid);
-      if (i < 6) {
-        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-          &r[0][0][0]);
-        glEvalMesh2(type, 0, grid, 0, grid);
-        glMap2d(GL_MAP2_VERTEX_3, 0.0, 1.0, 3, 4, 0.0, 1.0, 12, 4,
-          &s[0][0][0]);
-        glEvalMesh2(type, 0, grid, 0, grid);
-      }
-    }
-
-    glPopMatrix();
-    glPopAttrib();
-}
-
-
-/* -- INTERFACE FUNCTIONS -------------------------------------------------- */
-
-/*
- * Renders a beautiful wired teapot...
- */
-void glutWireTeapot( GLdouble size )
-{
-    /* We will use the general teapot rendering code */
-    fghTeapot( 10, size, GL_LINE );
-}
-
-/*
- * Renders a beautiful filled teapot...
- */
-void glutSolidTeapot( GLdouble size )
-{
-    /* We will use the general teapot rendering code */
-    fghTeapot( 7, size, GL_FILL );
-}
-
-/*** END OF FILE ***/
--- a/DoConfig/fltk/src/freeglut_teapot_data.h
+++ /dev/null
@@ -1,145 +1,0 @@
-/*
- * freeglut_teapot_data.h
- *
- * The freeglut library teapot data include file.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef  FREEGLUT_TEAPOT_DATA_H
-#define  FREEGLUT_TEAPOT_DATA_H
-
-/*
- * Original teapot code copyright follows:
- */
-
-/*
- * (c) Copyright 1993, Silicon Graphics, Inc.
- *
- * ALL RIGHTS RESERVED
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that
- * both the copyright notice and this permission notice appear in
- * supporting documentation, and that the name of Silicon
- * Graphics, Inc. not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
- * "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
- * OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN NO
- * EVENT SHALL SILICON GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE
- * ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
- * INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
- * SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
- * NOT SILICON GRAPHICS, INC.  HAS BEEN ADVISED OF THE POSSIBILITY
- * OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- *
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer
- * Software clause at DFARS 252.227-7013 and/or in similar or
- * successor clauses in the FAR or the DOD or NASA FAR
- * Supplement.  Unpublished-- rights reserved under the copyright
- * laws of the United States.  Contractor/manufacturer is Silicon
- * Graphics, Inc., 2011 N.  Shoreline Blvd., Mountain View, CA
- * 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-
-/*
- * Rim, body, lid, and bottom data must be reflected in x and y;
- * handle and spout data across the y axis only.
- */
-static int patchdata[][16] =
-{
-    { 102, 103, 104, 105,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15 }, /* rim    */
-    {  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27 }, /* body   */
-    {  24,  25,  26,  27,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40 },
-    {  96,  96,  96,  96,  97,  98,  99, 100, 101, 101, 101, 101,   0,   1,   2,   3 }, /* lid    */
-    {   0,   1,   2,   3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117 },
-    { 118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120,  40,  39,  38,  37 }, /* bottom */
-    {  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56 }, /* handle */
-    {  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  28,  65,  66,  67 },
-    {  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83 }, /* spout  */
-    {  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95 }
-};
-
-static double cpdata[][3] =
-{
-    {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0,
-    -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125},
-    {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375,
-    0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375,
-    2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84,
-    2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875},
-    {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75,
-    1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35},
-    {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2,
-    0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12,
-    0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225},
-    {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225},
-    {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0,
-    -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5,
-    -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3,
-    2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0,
-    2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0,
-    2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8},
-    {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3,
-    -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3,
-    1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2,
-    -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0,
-    1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0,
-    0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66,
-    0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1},
-    {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7,
-    -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0,
-    2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375},
-    {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475},
-    {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4},
-    {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0,
-    3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8,
-    3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4,
-    -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0,
-    2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4,
-    2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3,
-    2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4},
-    {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425,
-    -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425,
-    0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075},
-    {0.84, -1.5, 0.075}
-};
-
-static double tex[2][2][2] =
-{
-    { {0.0, 0.0}, {1.0, 0.0} },
-    { {0.0, 1.0}, {1.0, 1.0} }
-};
-
-
-#endif  /* FREEGLUT_TEAPOT_DATA_H */
-
--- a/DoConfig/fltk/src/gl_draw.cxx
+++ /dev/null
@@ -1,589 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL drawing support routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2018 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Functions from <FL/gl.h>
-// See also Fl_Gl_Window and gl_start.cxx
-
-#include "flstring.h"
-#if HAVE_GL || defined(FL_DOXYGEN)
-
-#include <FL/Fl.H>
-#include <FL/gl.h>
-#include <FL/gl_draw.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Device.H>
-#include "Fl_Gl_Choice.H"
-#include "Fl_Font.H"
-#include <FL/fl_utf8.h>
-
-#if !defined(WIN32) && !defined(__APPLE__)
-#include "Xutf8.h"
-#endif
-
-#if defined(__APPLE__)
-
-#if !defined(kCGBitmapByteOrder32Host) // doc says available 10.4 but some 10.4 don't have it
-#  define kCGBitmapByteOrder32Host 0
-#endif
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4
-#  include <OpenGL/glext.h>
-#  define GL_TEXTURE_RECTANGLE_ARB GL_TEXTURE_RECTANGLE_EXT
-#  include <FL/Fl_Gl_Window.H>
-#endif // < MAC_OS_X_VERSION_10_4
-
-#endif // __APPLE__
-
-/** Returns the current font's height */
-int   gl_height() {return fl_height();}
-/** Returns the current font's descent */
-int   gl_descent() {return fl_descent();}
-/** Returns the width of the string in the current fnt */
-double gl_width(const char* s) {return fl_width(s);}
-/** Returns the width of n characters of the string in the current font */
-double gl_width(const char* s, int n) {return fl_width(s,n);}
-/** Returns the width of the character in the current font */
-double gl_width(uchar c) {return fl_width(c);}
-
-static Fl_Font_Descriptor *gl_fontsize;
-
-#define GENLISTSIZE 256
-#ifndef __APPLE__
-#  define USE_OksiD_style_GL_font_selection 1  // Most hosts except OSX
-#endif
-
-#if USE_XFT
-#  undef USE_OksiD_style_GL_font_selection  // turn this off for XFT also
-#endif
-
-/**
-  Sets the current OpenGL font to the same font as calling fl_font()
-  */
-void  gl_font(int fontid, int size) {
-  fl_font(fontid, size);
-  Fl_Font_Descriptor *fl_fontsize = fl_graphics_driver->font_descriptor();
-#ifndef __APPLE__
-  if (!fl_fontsize->listbase) {
-
-#ifdef  USE_OksiD_style_GL_font_selection
-#undef GENLISTSIZE
-#define GENLISTSIZE 0x10000
-    fl_fontsize->listbase = glGenLists(GENLISTSIZE);
-#else // Fltk-1.1.8 style GL font selection
-
-#if defined (USE_X11) // X-windows options follow, either XFT or "plain" X
-// FIXME:  warning Ideally, for XFT, we really need a glXUseXftFont implementation here...
-// FIXME:  warning GL font selection is basically wrong here
-/* OksiD had a fairly sophisticated scheme for storing multiple X fonts in a XUtf8FontStruct,
- * then sorting through them at draw time (for normal X rendering) to find which one can
- * render the current glyph... But for now, just use the first font in the list for GL...
- */
-    XFontStruct *font = fl_X_core_font();
-    int base = font->min_char_or_byte2;
-    int count = font->max_char_or_byte2-base+1;
-    fl_fontsize->listbase = glGenLists(GENLISTSIZE);
-    glXUseXFont(font->fid, base, count, fl_fontsize->listbase+base);
-# elif defined(WIN32)
-    // this is unused because USE_OksiD_style_GL_font_selection == 1
-    int base = fl_fontsize->metr.tmFirstChar;
-    int count = fl_fontsize->metr.tmLastChar-base+1;
-    HFONT oldFid = (HFONT)SelectObject(fl_gc, fl_fontsize->fid);
-    fl_fontsize->listbase = glGenLists(GENLISTSIZE);
-    wglUseFontBitmaps(fl_gc, base, count, fl_fontsize->listbase+base);
-    SelectObject(fl_gc, oldFid);
-# endif
-
-#endif // USE_OksiD_style_GL_font_selection
-  }
-  glListBase(fl_fontsize->listbase);
-#endif // !__APPLE__
-  gl_fontsize = fl_fontsize;
-}
-
-#ifndef __APPLE__
-static void get_list(int r) {
-  gl_fontsize->glok[r] = 1;
-#if defined(USE_X11)
-# if USE_XFT
-// FIXME
-# else
-  unsigned int ii = r * 0x400;
-  for (int i = 0; i < 0x400; i++) {
-    XFontStruct *font = NULL;
-    unsigned short id;
-    fl_XGetUtf8FontAndGlyph(gl_fontsize->font, ii, &font, &id);
-    if (font) glXUseXFont(font->fid, id, 1, gl_fontsize->listbase+ii);
-    ii++;
-   }
-# endif
-#elif defined(WIN32)
-  unsigned int ii = r * 0x400;
-  HFONT oldFid = (HFONT)SelectObject(fl_gc, gl_fontsize->fid);
-  wglUseFontBitmapsW(fl_gc, ii, 0x400, gl_fontsize->listbase+ii);
-  SelectObject(fl_gc, oldFid);
-#else
-#  error unsupported platform
-#endif
-} // get_list
-#endif
-
-void gl_remove_displaylist_fonts()
-{
-# if HAVE_GL
-
-  // clear variables used mostly in fl_font
-  fl_graphics_driver->font(0, 0);
-
-  for (int j = 0 ; j < FL_FREE_FONT ; ++j)
-  {
-    Fl_Font_Descriptor* past = 0;
-    Fl_Fontdesc* s    = fl_fonts + j ;
-    Fl_Font_Descriptor* f    = s->first;
-    while (f != 0) {
-      if(f->listbase) {
-        if(f == s->first) {
-          s->first = f->next;
-        }
-        else {
-          past->next = f->next;
-        }
-
-        // It would be nice if this next line was in a destructor somewhere
-        glDeleteLists(f->listbase, GENLISTSIZE);
-
-        Fl_Font_Descriptor* tmp = f;
-        f = f->next;
-        delete tmp;
-      }
-      else {
-        past = f;
-        f = f->next;
-      }
-    }
-  }
-
-#endif
-}
-
-#ifdef __APPLE__
-static void gl_draw_textures(const char* str, int n);
-#endif
-
-/**
-  Draws an array of n characters of the string in the current font
-  at the current position.
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str, int n) {
-#ifdef __APPLE__  
-  gl_draw_textures(str, n);
-#else
-  static unsigned short *buf = NULL;
-  static unsigned l = 0;
-  unsigned wn = fl_utf8toUtf16(str, n, buf, l);
-  if (wn >= l) {
-    buf = (unsigned short*) realloc(buf, sizeof(unsigned short) * (wn + 1));
-    l = wn + 1;
-    wn = fl_utf8toUtf16(str, n, buf, l);
-  }
-
-#if !( defined(USE_X11) || USE_XFT )
-  for (unsigned i = 0; i < wn; i++) {
-    unsigned int r;
-    r = (buf[i] & 0xFC00) >> 10;
-    if (!gl_fontsize->glok[r]) get_list(r);
-  }
-#endif
-  glCallLists(wn, GL_UNSIGNED_SHORT, buf);
-#endif
-}
-
-/**
-  Draws n characters of the string in the current font at the given position 
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str, int n, int x, int y) {
-  glRasterPos2i(x, y);
-  gl_draw(str, n);
-}
-
-/**
-  Draws n characters of the string in the current font at the given position 
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str, int n, float x, float y) {
-  glRasterPos2f(x, y);
-  gl_draw(str, n);
-}
-
-/**
-  Draws a nul-terminated string in the current font at the current position
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str) {
-  gl_draw(str, strlen(str));
-}
-
-/**
-  Draws a nul-terminated string in the current font at the given position 
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str, int x, int y) {
-  gl_draw(str, strlen(str), x, y);
-}
-
-/**
-  Draws a nul-terminated string in the current font at the given position 
- \see On the Mac OS X platform, see gl_texture_pile_height(int)
-  */
-void gl_draw(const char* str, float x, float y) {
-  gl_draw(str, strlen(str), x, y);
-}
-
-static void gl_draw_invert(const char* str, int n, int x, int y) {
-  glRasterPos2i(x, -y);
-  gl_draw(str, n);
-}
-
-/**
-  Draws a string formatted into a box, with newlines and tabs expanded,
-  other control characters changed to ^X. and aligned with the edges or
-  center. Exactly the same output as fl_draw().
-  */
-void gl_draw(
-  const char* str, 	// the (multi-line) string
-  int x, int y, int w, int h, 	// bounding box
-  Fl_Align align) {
-  fl_draw(str, x, -y-h, w, h, align, gl_draw_invert, NULL, 0);
-}
-
-/** Measure how wide and tall the string will be when drawn by the gl_draw() function */
-void gl_measure(const char* str, int& x, int& y) {
-  fl_measure(str,x,y,0);
-}
-
-/**
-  Outlines the given rectangle with the current color.
-  If Fl_Gl_Window::ortho() has been called, then the rectangle will
-  exactly fill the given pixel rectangle.
-  */
-void gl_rect(int x, int y, int w, int h) {
-  if (w < 0) {w = -w; x = x-w;}
-  if (h < 0) {h = -h; y = y-h;}
-  glBegin(GL_LINE_STRIP);
-  glVertex2i(x+w-1, y+h-1);
-  glVertex2i(x+w-1, y);
-  glVertex2i(x, y);
-  glVertex2i(x, y+h-1);
-  glVertex2i(x+w, y+h-1);
-  glEnd();
-}
-
-#if HAVE_GL_OVERLAY
-extern uchar fl_overlay;
-extern int fl_overlay_depth;
-#endif
-
-/**
-  Sets the curent OpenGL color to an FLTK color.
-
-  For color-index modes it will use fl_xpixel(c), which is only
-  right if the window uses the default colormap!
-  */
-void gl_color(Fl_Color i) {
-#if HAVE_GL_OVERLAY
-#if defined(WIN32)
-  if (fl_overlay && fl_overlay_depth) {
-    if (fl_overlay_depth < 8) {
-      // only black & white produce the expected colors.  This could
-      // be improved by fixing the colormap set in Fl_Gl_Overlay.cxx
-      int size = 1<<fl_overlay_depth;
-      if (!i) glIndexi(size-2);
-      else if (i >= size-2) glIndexi(size-1);
-      else glIndexi(i);
-    } else {
-      glIndexi(i ? i : FL_GRAY_RAMP);
-    }
-    return;
-  }
-#else
-  if (fl_overlay) {glIndexi(int(fl_xpixel(i))); return;}
-#endif
-#endif
-  uchar red, green, blue;
-  Fl::get_color(i, red, green, blue);
-  glColor3ub(red, green, blue);
-}
-
-void gl_draw_image(const uchar* b, int x, int y, int w, int h, int d, int ld) {
-  if (!ld) ld = w*d;
-  glPixelStorei(GL_UNPACK_ROW_LENGTH, ld/d);
-  glRasterPos2i(x,y);
-  glDrawPixels(w,h,d<4?GL_RGB:GL_RGBA,GL_UNSIGNED_BYTE,(const ulong*)b);
-}
-
-#if defined(__APPLE__) || defined(FL_DOXYGEN)
-/* Text drawing to an OpenGL scene under Mac OS X is implemented using textures, as recommended by Apple.
- This allows to use any font at any size, and any Unicode character.
- Some old Apple hardware doesn't implement the required GL_EXT_texture_rectangle extension.
- For these, glutStrokeString() is used to draw text. In that case, it's possible to vary text size,
- but not text font, and only ASCII characters can be drawn.
- */
-
-static int gl_scale = 1; // set to 2 for high resolution Fl_Gl_Window
-static int has_texture_rectangle = 0; // true means GL_EXT_texture_rectangle is available
-
-#include <FL/glu.h>  // for gluUnProject() and gluCheckExtension()
-#include <FL/glut.H> // for glutStrokeString() and glutStrokeLength()
-
-// manages a fifo pile of pre-computed string textures
-class gl_texture_fifo {
-  friend void gl_draw_textures(const char *, int);
-private:
-  typedef struct { // information for a pre-computed texture
-    GLuint texName; // its name
-    char *utf8; //its text
-    Fl_Font_Descriptor *fdesc; // its font
-    int width; // its width
-    float ratio; // used without rectangle texture
-    int scale; // 1 or 2 for low/high resolution
-  } data;
-  data *fifo; // array of pile elements
-  int size_; // pile height
-  int current; // the oldest texture to have entered the pile
-  int last; // pile top
-  int textures_generated; // true after glGenTextures has been called
-  void display_texture(int rank);
-  int compute_texture(const char* str, int n);
-  int already_known(const char *str, int n);
-public:
-  gl_texture_fifo(int max = 100); // 100 = default height of texture pile
-  inline int size(void) {return size_; };
-  ~gl_texture_fifo(void);
-};
-
-gl_texture_fifo::gl_texture_fifo(int max)
-{
-  size_ = max;
-  last = current = -1;
-  textures_generated = 0;
-  fifo = (data*)calloc(size_, sizeof(data));
-}
-
-gl_texture_fifo::~gl_texture_fifo()
-{
-  for (int i = 0; i < size_; i++) {
-    if (fifo[i].utf8) free(fifo[i].utf8);
-    if (textures_generated) glDeleteTextures(1, &fifo[i].texName);
-    }
-  free(fifo);
-}
-
-// displays a pre-computed texture on the GL scene
-void gl_texture_fifo::display_texture(int rank)
-{
-  //setup matrices
-  GLint matrixMode;
-  glGetIntegerv (GL_MATRIX_MODE, &matrixMode);
-  glMatrixMode (GL_PROJECTION);
-  glPushMatrix();
-  glLoadIdentity ();
-  glMatrixMode (GL_MODELVIEW);
-  glPushMatrix();
-  glLoadIdentity ();
-  float winw = gl_scale * Fl_Window::current()->w();
-  float winh = gl_scale * Fl_Window::current()->h();
-  // GL_COLOR_BUFFER_BIT for glBlendFunc, GL_ENABLE_BIT for glEnable / glDisable
-  glPushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT | GL_COLOR_BUFFER_BIT); 
-  glDisable (GL_DEPTH_TEST); // ensure text is not removed by depth buffer test.
-  glEnable (GL_BLEND); // for text fading
-  glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); // ditto
-  glDisable(GL_LIGHTING);
-  GLfloat pos[4];
-  glGetFloatv(GL_CURRENT_RASTER_POSITION, pos);
-  float R = 2;
-  if (!has_texture_rectangle) {
-    R *= fifo[rank].ratio;
-  }
-  glScalef (R/winw, R/winh, 1.0f);
-  glTranslatef (-winw/R, -winh/R, 0.0f);
-  if (has_texture_rectangle) {
-    glEnable (GL_TEXTURE_RECTANGLE_ARB);
-    glBindTexture (GL_TEXTURE_RECTANGLE_ARB, fifo[rank].texName);
-    GLint height;
-    glGetTexLevelParameteriv(GL_TEXTURE_RECTANGLE_ARB, 0, GL_TEXTURE_HEIGHT, &height);
-    CGRect bounds = CGRectMake (pos[0], pos[1] - gl_scale*fl_descent(), fifo[rank].width, height);
-    //write the texture on screen
-    glBegin (GL_QUADS);
-    glTexCoord2f (0.0f, 0.0f); // draw lower left in world coordinates
-    glVertex2f (bounds.origin.x, bounds.origin.y);
-    
-    glTexCoord2f (0.0f, height); // draw upper left in world coordinates
-    glVertex2f (bounds.origin.x, bounds.origin.y + bounds.size.height);
-    
-    glTexCoord2f (fifo[rank].width, height); // draw upper right in world coordinates
-    glVertex2f (bounds.origin.x + bounds.size.width, bounds.origin.y + bounds.size.height);
-    
-    glTexCoord2f (fifo[rank].width, 0.0f); // draw lower right in world coordinates
-    glVertex2f (bounds.origin.x + bounds.size.width, bounds.origin.y);
-    glEnd ();
-  } else {
-    glTranslatef(pos[0]*2/R, pos[1]*2/R, 0.0);
-    glutStrokeString(GLUT_STROKE_ROMAN, (uchar*)fifo[rank].utf8);
-  }
-  glPopAttrib();
-  
-  // reset original matrices
-  glPopMatrix(); // GL_MODELVIEW
-  glMatrixMode (GL_PROJECTION);
-  glPopMatrix();
-  glMatrixMode (matrixMode);
-  
-  //set the raster position to end of string
-  pos[0] += fifo[rank].width;
-  GLdouble modelmat[16];
-  glGetDoublev (GL_MODELVIEW_MATRIX, modelmat);
-  GLdouble projmat[16];
-  glGetDoublev (GL_PROJECTION_MATRIX, projmat);
-  GLdouble objX, objY, objZ;
-  GLint viewport[4];
-  glGetIntegerv (GL_VIEWPORT, viewport);
-  gluUnProject(pos[0], pos[1], pos[2], modelmat, projmat, viewport, &objX, &objY, &objZ);
-  glRasterPos2d(objX, objY);
-}
-
-// pre-computes a string texture
-int gl_texture_fifo::compute_texture(const char* str, int n)
-{
-  current = (current + 1) % size_;
-  if (current > last) last = current;
-  if ( fifo[current].utf8 ) free(fifo[current].utf8);
-  fifo[current].utf8 = (char *)malloc(n + 1);
-  memcpy(fifo[current].utf8, str, n);
-  fifo[current].utf8[n] = 0;
-  fl_graphics_driver->font_descriptor(gl_fontsize);
-  int h;
-  fl_measure(fifo[current].utf8, fifo[current].width, h, 0);
-  fifo[current].width *= gl_scale;
-  h *= gl_scale;
-  fifo[current].scale = gl_scale;
-  fifo[current].fdesc = gl_fontsize;
-  if (has_texture_rectangle) {
-    //write str to a bitmap just big enough
-    CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
-    void *base = NULL;
-    if (fl_mac_os_version < 100600) base = calloc(4*fifo[current].width, h);
-    CGContextRef save_gc = fl_gc;
-    fl_gc = CGBitmapContextCreate(base, fifo[current].width, h, 8, fifo[current].width*4, lut,
-                                  (CGBitmapInfo)(kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
-    CGColorSpaceRelease(lut);
-    GLfloat colors[4];
-    glGetFloatv(GL_CURRENT_COLOR, colors);
-    fl_color((uchar)(colors[0]*255), (uchar)(colors[1]*255), (uchar)(colors[2]*255));
-    CGContextTranslateCTM(fl_gc, 0, h - gl_scale*fl_descent());
-    CGContextScaleCTM(fl_gc, gl_scale, gl_scale);
-    fl_draw(str, n, 0, 0);
-    //put this bitmap in a texture
-    glPushAttrib(GL_TEXTURE_BIT);
-    glBindTexture (GL_TEXTURE_RECTANGLE_ARB, fifo[current].texName);
-    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    glPixelStorei(GL_UNPACK_ROW_LENGTH, fifo[current].width);
-    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, fifo[current].width, h, 0,  GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, CGBitmapContextGetData(fl_gc));
-    glPopAttrib();
-    CGContextRelease(fl_gc);
-    fl_gc = save_gc;
-    if (base) free(base);
-  } else {
-    fifo[current].ratio = float(fifo[current].width)/glutStrokeLength(GLUT_STROKE_ROMAN, (uchar*)fifo[current].utf8);
-  }
-  return current;
-}
-
-// returns rank of pre-computed texture for a string if it exists
-int gl_texture_fifo::already_known(const char *str, int n)
-{
-  int rank;
-  for ( rank = 0; rank <= last; rank++) {
-    if ( memcmp(str, fifo[rank].utf8, n) == 0 && fifo[rank].utf8[n] == 0 &&
-      fifo[rank].fdesc == gl_fontsize && fifo[rank].scale == gl_scale) return rank;
-  }
-  return -1;
-}
-
-static gl_texture_fifo *gl_fifo = NULL; // points to the texture pile class instance
-
-// draws a utf8 string using pre-computed texture if available
-static void gl_draw_textures(const char* str, int n) 
-{
-  Fl_Gl_Window *gwin = Fl_Window::current()->as_gl_window();
-  gl_scale = (gwin ? gwin->pixels_per_unit() : 1);
-  //fprintf(stderr,"gl_scale=%d\n",gl_scale);
-  if (! gl_fifo) gl_fifo = new gl_texture_fifo();
-  if (!gl_fifo->textures_generated) {
-    has_texture_rectangle = gluCheckExtension((GLubyte*)"GL_EXT_texture_rectangle", glGetString(GL_EXTENSIONS));
-    if (has_texture_rectangle) for (int i = 0; i < gl_fifo->size_; i++) glGenTextures(1, &(gl_fifo->fifo[i].texName));
-    gl_fifo->textures_generated = 1;
-  }
-  int rank = gl_fifo->already_known(str, n);
-  if (rank == -1) {
-    rank = gl_fifo->compute_texture(str, n);
-  }
-  gl_fifo->display_texture(rank);
-}
-
-/** \addtogroup group_macosx
- @{ */
-
-/**
- \brief Returns the current height of the pile of pre-computed string textures
- *
- The default value is 100
- */
-int gl_texture_pile_height(void)
-{
-  if (! gl_fifo) gl_fifo = new gl_texture_fifo();
-  return gl_fifo->size();
-}
-
-/**
- \brief Changes the height of the pile of pre-computed string textures
- *
- Strings that are often re-displayed can be processed much faster if
- this pile is set high enough to hold all of them.
- \param max Height of the texture pile
- */
-void gl_texture_pile_height(int max)
-{
-  if (gl_fifo) delete gl_fifo;
-  gl_fifo = new gl_texture_fifo(max);
-}
-
-/** @} */
-
-void gl_texture_reset()
-{
-  if (gl_fifo) gl_texture_pile_height(gl_texture_pile_height());
-}
-#endif // __APPLE__
-
-#endif // HAVE_GL
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/gl_start.cxx
+++ /dev/null
@@ -1,124 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL context routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// You MUST use gl_visual() to select the default visual before doing
-// show() of any windows.  Mesa will crash if you try to use a visual
-// not returned by glxChooseVisual.
-
-// This does not work with Fl_Double_Window's!  It will try to draw
-// into the front buffer.  Depending on the system this will either
-// crash or do nothing (when pixmaps are being used as back buffer
-// and GL is being done by hardware), work correctly (when GL is done
-// with software, such as Mesa), or draw into the front buffer and
-// be erased when the buffers are swapped (when double buffer hardware
-// is being used)
-
-#include <config.h>
-#if HAVE_GL
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/gl.h>
-#include "Fl_Gl_Choice.H"
-
-static GLContext context;
-static int clip_state_number=-1;
-static int pw, ph;
-
-#ifdef WIN32
-static Fl_Gl_Choice* gl_choice;
-#endif
-
-#ifdef __APPLE__
-static Fl_Gl_Choice* gl_choice;
-#endif
-
-Fl_Region XRectangleRegion(int x, int y, int w, int h); // in fl_rect.cxx
-
-/** Creates an OpenGL context */
-void gl_start() {
-  if (!context) {
-#if defined(USE_X11)
-    context = fl_create_gl_context(fl_visual);
-#elif defined(WIN32)
-    if (!gl_choice) Fl::gl_visual(0);
-    context = fl_create_gl_context(Fl_Window::current(), gl_choice);
-#elif defined(__APPLE_QUARTZ__)
-    context = fl_create_gl_context(Fl_Window::current(), gl_choice);
-#else
-#  error Unsupported platform
-#endif
-  }
-  fl_set_gl_context(Fl_Window::current(), context);
-#ifdef __APPLE__
-  Fl_X::gl_start(context);
-#elif !defined(WIN32)
-  glXWaitX();
-#endif
-  if (pw != Fl_Window::current()->w() || ph != Fl_Window::current()->h()) {
-    pw = Fl_Window::current()->w();
-    ph = Fl_Window::current()->h();
-    glLoadIdentity();
-    glViewport(0, 0, pw, ph);
-    glOrtho(0, pw, 0, ph, -1, 1);
-    glDrawBuffer(GL_FRONT);
-  }
-  if (clip_state_number != fl_graphics_driver->fl_clip_state_number) {
-    clip_state_number = fl_graphics_driver->fl_clip_state_number;
-    int x, y, w, h;
-    if (fl_clip_box(0, 0, Fl_Window::current()->w(), Fl_Window::current()->h(),
-		    x, y, w, h)) {
-      fl_clip_region(XRectangleRegion(x,y,w,h));
-      glScissor(x, Fl_Window::current()->h()-(y+h), w, h);
-      glEnable(GL_SCISSOR_TEST);
-    } else {
-      glDisable(GL_SCISSOR_TEST);
-    }
-  }
-}
-
-/** Releases an OpenGL context */
-void gl_finish() {
-  glFlush();
-#if !defined(WIN32) && !defined(__APPLE__)
-  glXWaitGL();
-#endif
-}
-
-int Fl::gl_visual(int mode, int *alist) {
-  Fl_Gl_Choice *c = Fl_Gl_Choice::find(mode,alist);
-  if (!c) return 0;
-#if defined(USE_X11)
-  fl_visual = c->vis;
-  fl_colormap = c->colormap;
-#elif defined(WIN32)
-  gl_choice = c;
-#elif defined(__APPLE_QUARTZ__)
-  gl_choice = c;
-#else
-#  error Unsupported platform
-#endif
-  return 1;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/glut_compatability.cxx
+++ /dev/null
@@ -1,519 +1,0 @@
-//
-// "$Id$"
-//
-// GLUT emulation routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Emulation of Glut using fltk.
-
-// GLUT is Copyright (c) Mark J. Kilgard, 1994, 1995, 1996.
-// "This program is freely distributable without licensing fees  and is
-// provided without guarantee or warrantee expressed or  implied. This
-// program is -not- in the public domain."
-
-// Although I have copied the GLUT API, none of my code is based on
-// any Glut implementation details and is therefore covered by the LGPL.
-
-#include "flstring.h"
-#if HAVE_GL
-
-#  include <FL/glut.H>
-#  ifdef HAVE_GLXGETPROCADDRESSARB
-#    define GLX_GLXEXT_LEGACY
-#    include <GL/glx.h>
-#  endif // HAVE_GLXGETPROCADDRESSARB
-#  if HAVE_DLFCN_H
-#    include <dlfcn.h>
-#  endif // HAVE_DLFCN_H
-#  define MAXWINDOWS 32
-#  ifdef __APPLE__
-#    include <FL/x.H>
-#  endif
-static Fl_Glut_Window *windows[MAXWINDOWS+1];
-
-static void (*glut_idle_func)() = 0; // global glut idle function
-
-Fl_Glut_Window *glut_window;
-int glut_menu;
-void (*glut_menustate_function)(int);
-void (*glut_menustatus_function)(int,int,int);
-
-static void default_reshape(int w, int h) {glViewport(0,0,w,h);}
-static void default_display() {}
-
-void Fl_Glut_Window::make_current() {
-  glut_window = this;
-  if (shown()) Fl_Gl_Window::make_current();
-}
-
-static int indraw;
-void Fl_Glut_Window::draw() {
-  glut_window = this;
-  indraw = 1;
-  if (!valid()) {reshape(pixel_w(),pixel_h()); valid(1);}
-  display();
-  indraw = 0;
-}
-
-void glutSwapBuffers() {
-  if (!indraw) glut_window->swap_buffers();
-}
-
-void Fl_Glut_Window::draw_overlay() {
-  glut_window = this;
-  if (!valid()) {reshape(pixel_w(),pixel_h()); valid(1);}
-  overlaydisplay();
-}
-
-static void domenu(int, int, int);
-
-int Fl_Glut_Window::handle(int event) {
-  make_current();
-  int ex = Fl::event_x();
-  int ey = Fl::event_y();
-  float factor = pixels_per_unit();
-  ex = int(ex * factor + 0.5);
-  ey = int(ey * factor + 0.5);
-  int button;
-  switch (event) {
-
-  case FL_PUSH:
-    if (keyboard || special) Fl::focus(this);
-    button = Fl::event_button()-1;
-    if (button<0) button = 0;
-    if (button>2) button = 2;
-    if (menu[button]) {domenu(menu[button],ex,ey); return 1;}
-    mouse_down |= 1<<button;
-    if (mouse) {mouse(button,GLUT_DOWN,ex,ey); return 1;}
-    if (motion) return 1;
-    break;
-
-  case FL_MOUSEWHEEL:
-    button = Fl::event_dy();
-    while (button < 0) {if (mouse) mouse(3,GLUT_DOWN,ex,ey); ++button;}
-    while (button > 0) {if (mouse) mouse(4,GLUT_DOWN,ex,ey); --button;}
-    return 1;
-
-  case FL_RELEASE:
-    for (button = 0; button < 3; button++) if (mouse_down & (1<<button)) {
-      if (mouse) mouse(button,GLUT_UP,ex,ey);
-    }
-    mouse_down = 0;
-    return 1;
-
-  case FL_ENTER:
-    if (entry) {entry(GLUT_ENTERED); return 1;}
-    if (passivemotion) return 1;
-    break;
-
-  case FL_LEAVE:
-    if (entry) {entry(GLUT_LEFT); return 1;}
-    if (passivemotion) return 1;
-    break;
-
-  case FL_DRAG:
-    if (motion) {motion(ex, ey); return 1;}
-    break;
-
-  case FL_MOVE:
-    if (passivemotion) {passivemotion(ex, ey); return 1;}
-    break;
-
-  case FL_FOCUS:
-    if (keyboard || special) return 1;
-    break;
-
-  case FL_SHORTCUT:
-    if (!keyboard && !special) break;
-
-  case FL_KEYBOARD:
-    if (Fl::event_text()[0]) {
-      if (keyboard) {keyboard(Fl::event_text()[0],ex,ey); return 1;}
-      break;
-    } else {
-      if (special) {
-	int k = Fl::event_key();
-	if (k > FL_F && k <= FL_F_Last) k -= FL_F;
-	special(k,ex,ey);
-	return 1;
-      }
-      break;
-    }
-
-  case FL_HIDE:
-    if (visibility) visibility(GLUT_NOT_VISIBLE);
-    break;
-
-  case FL_SHOW:
-    if (visibility) visibility(GLUT_VISIBLE);
-    break;
-  }
-
-  return Fl_Gl_Window::handle(event);
-}
-
-static int glut_mode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
-
-void Fl_Glut_Window::_init() {
-  for (number=1; number<MAXWINDOWS; number++) if (!windows[number]) break;
-  windows[number] = this;
-  menu[0] = menu[1] = menu[2] = 0;
-  reshape = default_reshape;
-  display = default_display;
-  overlaydisplay = default_display;
-  keyboard = 0;
-  mouse = 0;
-  motion = 0;
-  passivemotion = 0;
-  entry = 0;
-  visibility = 0;
-  special = 0;
-  mouse_down = 0;
-  mode(glut_mode);
-}
-
-/** Creates a glut window, registers to the glut windows list.*/
-Fl_Glut_Window::Fl_Glut_Window(int W, int H, const char *t) :
-  Fl_Gl_Window(W,H,t) {_init();}
-
-/** Creates a glut window, registers to the glut windows list.*/
-Fl_Glut_Window::Fl_Glut_Window(int X,int Y,int W,int H, const char *t) :
-  Fl_Gl_Window(X,Y,W,H,t) {_init();}
-
-static int initargc;
-static char **initargv;
-
-void glutInit(int *argc, char **argv) {
-  initargc = *argc;
-  initargv = new char*[*argc+1];
-  int i,j;
-  for (i=0; i<=*argc; i++) initargv[i] = argv[i];
-  for (i=j=1; i<*argc; ) {
-    if (Fl::arg(*argc,argv,i));
-    else argv[j++] = argv[i++];
-  }
-  argv[j] = 0;
-  *argc = j;
-}
-
-void glutInitDisplayMode(unsigned int mode) {
-  glut_mode = mode;
-}
-
-void glutMainLoop() {Fl::run();}
-
-////////////////////////////////////////////////////////////////
-
-static int initx=0, inity=0, initw=300, inith=300, initpos=0;
-
-void glutInitWindowPosition(int x, int y) {
-  initx = x; inity = y; initpos = 1;
-}
-
-void glutInitWindowSize(int w, int h) {
-  initw = w; inith = h;
-}
-
-int glutCreateWindow(char *title) {
-  return glutCreateWindow((const char*)title);
-}
-
-int glutCreateWindow(const char *title) {
-  Fl_Glut_Window *W;
-  if (initpos) {
-    W = new Fl_Glut_Window(initx,inity,initw,inith,title);
-    initpos = 0;
-  } else {
-    W = new Fl_Glut_Window(initw,inith,title);
-  }
-  W->resizable(W);
-  if (initargc) {
-    W->show(initargc,initargv);
-    initargc = 0;
-  } else {
-    W->show();
-  }
-  W->valid(0);
-  W->context_valid(0);
-  W->make_current();
-  return W->number;
-}
-
-int glutCreateSubWindow(int win, int x, int y, int w, int h) {
-  Fl_Glut_Window *W = new Fl_Glut_Window(x,y,w,h,0);
-  windows[win]->add(W);
-  if (windows[win]->shown()) W->show();
-  W->make_current();
-  return W->number;
-}
-/** Destroys the glut window, first unregister it from the glut windows list */
-Fl_Glut_Window::~Fl_Glut_Window() {
-  if (glut_window == this) glut_window = 0;
-  windows[number] = 0;
-}
-
-void glutDestroyWindow(int win) {
-  // should destroy children!!!
-  delete windows[win];
-}
-
-void glutPostWindowRedisplay(int win) {
-  windows[win]->redraw();
-}
-
-void glutSetWindow(int win) {
-  windows[win]->make_current();
-}
-
-////////////////////////////////////////////////////////////////
-#include <FL/Fl_Menu_Item.H>
-
-struct menu {
-  void (*cb)(int);
-  Fl_Menu_Item *m;
-  int size;
-  int alloc;
-};
-
-#define MAXMENUS 32
-static menu menus[MAXMENUS+1];
-
-static void domenu(int n, int ex, int ey) {
-  glut_menu = n;
-  menu *m = &menus[n];
-  if (glut_menustate_function) glut_menustate_function(1);
-  if (glut_menustatus_function) glut_menustatus_function(1,ex,ey);
-  const Fl_Menu_Item* g = m->m->popup(Fl::event_x(), Fl::event_y(), 0);
-  if (g && g->callback_) ((void (*)(int))(g->callback_))(int(g->argument()));
-  if (glut_menustatus_function) glut_menustatus_function(0,ex,ey);
-  if (glut_menustate_function) glut_menustate_function(0);
-}
-
-int glutCreateMenu(void (*cb)(int)) {
-  int i;
-  for (i=1; i<MAXMENUS; i++) if (!menus[i].cb) break;
-  menu *m = &menus[i];
-  m->cb = cb;
-  return glut_menu = i;
-}
-
-void glutDestroyMenu(int n) {
-  menu *m = &menus[n];
-  delete[] m->m;
-  m->m = 0;
-  m->cb = 0;
-  m->size = m->alloc = 0;
-}
-
-static Fl_Menu_Item* additem(menu *m) {
-  if (m->size+1 >= m->alloc) {
-    m->alloc = m->size*2+10;
-    Fl_Menu_Item* nm = new Fl_Menu_Item[m->alloc];
-    for (int i=0; i<m->size; i++) nm[i] = m->m[i];
-    delete[] m->m;
-    m->m = nm;
-  }
-  int n = m->size++;
-  m->m[n+1].text = 0;
-  Fl_Menu_Item* i = &(m->m[n]);
-  i->shortcut_ = 0;
-  i->flags = 0;
-  i->labeltype_ = i->labelfont_ = i->labelsize_ = i->labelcolor_ = 0;
-  return i;
-}
-
-void glutAddMenuEntry(char *label, int value) {
-  menu *m = &menus[glut_menu];
-  Fl_Menu_Item* i = additem(m);
-  i->text = label;
-  i->callback_ = (Fl_Callback*)(m->cb);
-  i->argument(value);
-}
-
-void glutAddSubMenu(char *label, int submenu) {
-  menu *m = &menus[glut_menu];
-  Fl_Menu_Item* i = additem(m);
-  i->text = label;
-  i->callback_ = 0;
-  i->user_data_ = (void *)(menus[submenu].m);
-  i->flags = FL_PUP_SUBMENU;
-}
-
-void glutChangeToMenuEntry(int item, char *label, int value) {
-  menu *m = &menus[glut_menu];
-  Fl_Menu_Item* i = &m->m[item-1];
-  i->text = label;
-  i->callback_ = (Fl_Callback*)(m->cb);
-  i->argument(value);
-  i->flags = 0;
-}
-
-void glutChangeToSubMenu(int item, char *label, int submenu) {
-  menu *m = &menus[glut_menu];
-  Fl_Menu_Item* i = &m->m[item-1];
-  i->text = label;
-  i->callback_ = 0;
-  i->user_data_ = (void *)(menus[submenu].m);
-  i->flags = FL_PUP_SUBMENU;
-}
-
-void glutRemoveMenuItem(int item) {
-  menu *m = &menus[glut_menu];
-  if (item > m->size || item < 1) return;
-  for (int i = item-1; i <= m->size; i++) m->m[i] = m->m[i+1];
-  m->size--;
-}
-
-////////////////////////////////////////////////////////////////
-
-int glutGet(GLenum type) {
-  switch (type) {
-  case GLUT_RETURN_ZERO: return 0;
-  case GLUT_WINDOW_X: return glut_window->x();
-  case GLUT_WINDOW_Y: return glut_window->y();
-  case GLUT_WINDOW_WIDTH: return glut_window->pixel_w();
-  case GLUT_WINDOW_HEIGHT: return glut_window->pixel_h();
-  case GLUT_WINDOW_PARENT:
-    if (glut_window->parent())
-      return ((Fl_Glut_Window *)(glut_window->parent()))->number;
-    else
-      return 0;
-//case GLUT_WINDOW_NUM_CHILDREN:
-//case GLUT_WINDOW_CURSOR: return 
-  case GLUT_SCREEN_WIDTH: return Fl::w();
-  case GLUT_SCREEN_HEIGHT: return Fl::h();
-//case GLUT_SCREEN_WIDTH_MM:
-//case GLUT_SCREEN_HEIGHT_MM:
-  case GLUT_MENU_NUM_ITEMS: return menus[glut_menu].size;
-  case GLUT_DISPLAY_MODE_POSSIBLE: return Fl_Gl_Window::can_do(glut_mode);
-  case GLUT_INIT_WINDOW_X: return initx;
-  case GLUT_INIT_WINDOW_Y: return inity;
-  case GLUT_INIT_WINDOW_WIDTH: return initw;
-  case GLUT_INIT_WINDOW_HEIGHT: return inith;
-  case GLUT_INIT_DISPLAY_MODE: return glut_mode;
-//case GLUT_ELAPSED_TIME:
-  case GLUT_WINDOW_BUFFER_SIZE:
-    if (glutGet(GLUT_WINDOW_RGBA))
-      return glutGet(GLUT_WINDOW_RED_SIZE)+
-	glutGet(GLUT_WINDOW_GREEN_SIZE)+
-	glutGet(GLUT_WINDOW_BLUE_SIZE)+
-	glutGet(GLUT_WINDOW_ALPHA_SIZE);
-    else
-      return glutGet(GLUT_WINDOW_COLORMAP_SIZE);
-  case GLUT_VERSION: return 20400;
-  default: {GLint p; glGetIntegerv(type, &p); return p;}
-  }
-}
-
-int glutLayerGet(GLenum type) {
-  switch (type) {
-  case GLUT_OVERLAY_POSSIBLE: return glut_window->can_do_overlay();
-//case GLUT_LAYER_IN_USE:
-//case GLUT_HAS_OVERLAY:
-  case GLUT_TRANSPARENT_INDEX: return 0; // true for SGI
-  case GLUT_NORMAL_DAMAGED: return glut_window->damage();
-  case GLUT_OVERLAY_DAMAGED: return 1; // kind of works...
-  default: return 0;
-  }
-}
-
-int glutDeviceGet(GLenum type) {
-  switch (type) {
-    case GLUT_HAS_KEYBOARD : return 1;
-    case GLUT_HAS_MOUSE : return 1;
-    case GLUT_NUM_MOUSE_BUTTONS : return 3;
-    default : return 0;
-  }
-}
-
-// Get extension function address...
-GLUTproc glutGetProcAddress(const char *procName) {
-#  ifdef WIN32
-  return (GLUTproc)wglGetProcAddress((LPCSTR)procName);
-
-#  elif (HAVE_DLSYM && HAVE_DLFCN_H)
-  char symbol[1024];
-
-  snprintf(symbol, sizeof(symbol), "_%s", procName);
-
-#    ifdef RTLD_DEFAULT
-  return (GLUTproc)dlsym(RTLD_DEFAULT, symbol);
-
-#    else // No RTLD_DEFAULT support, so open the current a.out symbols...
-  static void *rtld_default = 0;
-
-  if (!rtld_default) rtld_default = dlopen(0, RTLD_LAZY);
-
-  if (rtld_default) return (GLUTproc)dlsym(rtld_default, symbol);
-  else return 0;
-
-#    endif // RTLD_DEFAULT
-
-#  elif defined(HAVE_GLXGETPROCADDRESSARB)
-  return (GLUTproc)glXGetProcAddressARB((const GLubyte *)procName);
-
-#  else
-  return (GLUTproc)0;
-#  endif // WIN32
-}
-
-// Parse the GL_EXTENSIONS string to see if the named extension is
-// supported.
-//
-// This code was copied from FreeGLUT 2.4.0 which carries the
-// following notice:
-//
-//     Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
-int glutExtensionSupported( const char* extension )
-{
-  if (!extension || strchr(extension, ' ')) return 0;
-
-  const char *extensions, *start;
-  const int len = strlen( extension );
-  
-  start = extensions = (const char *) glGetString(GL_EXTENSIONS);
-
-  if (!extensions) return 0;
-
-  for (;;) {
-    const char *p = strstr(extensions, extension);
-    if (!p) return 0;  /* not found */
-    /* check that the match isn't a super string */
-    if ((p == start || p[-1] == ' ') &&
-        (p[len] == ' ' || p[len] == 0)) return 1;
-    /* skip the false match and continue */
-    extensions = p + len;
-  }
-}
-
-// Add a mechanism to handle adding/removing the glut idle function
-// without depending on the (deprecated) set_idle method.
-void glutIdleFunc(void (*f)())
-{
-  // no change
-  if(glut_idle_func == f) return;
-  // remove current idle
-  if(glut_idle_func) Fl::remove_idle((void (*)(void *))glut_idle_func);
-  // install new idle func - if one was passed
-  if(f) Fl::add_idle((void (*)(void *))f);
-  // record new idle func - even if it is NULL
-  glut_idle_func = f;
-} // glutIdleFunc
-
-#endif // HAVE_GL
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/glut_font.cxx
+++ /dev/null
@@ -1,189 +1,0 @@
-//
-// "$Id$"
-//
-// GLUT font routines for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// The stroked text code was copied from FreeGLUT 2.4.0 which carries
-// the following notice:
-//
-//     Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
-//
-
-// (sort of) emulation of Glut's bitmap drawing functions, using FL's
-// font stuff.  Not all the fonts match!
-
-#include <config.h>
-#if HAVE_GL
-#  include <FL/glut.H>
-
-Fl_Glut_Bitmap_Font glutBitmap9By15 = {FL_SCREEN, 15};
-Fl_Glut_Bitmap_Font glutBitmap8By13 = {FL_SCREEN, 13};
-Fl_Glut_Bitmap_Font glutBitmapTimesRoman10 = {FL_TIMES, 10};
-Fl_Glut_Bitmap_Font glutBitmapTimesRoman24 = {FL_TIMES, 24};
-Fl_Glut_Bitmap_Font glutBitmapHelvetica10 = {FL_HELVETICA, 10};
-Fl_Glut_Bitmap_Font glutBitmapHelvetica12 = {FL_HELVETICA, 12};
-Fl_Glut_Bitmap_Font glutBitmapHelvetica18 = {FL_HELVETICA, 18};
-
-void glutBitmapCharacter(void* font, int character) {
-  gl_font(((Fl_Glut_Bitmap_Font *)font)->font,((Fl_Glut_Bitmap_Font *)font)->size);
-  char a[1]; a[0] = character;
-  gl_draw(a,1);
-}
-
-int glutBitmapHeight(void* font) {
-  gl_font(((Fl_Glut_Bitmap_Font *)font)->font,((Fl_Glut_Bitmap_Font *)font)->size);
-  return gl_height();
-}
-
-int glutBitmapLength(void *font, const unsigned char *string) {
-  gl_font(((Fl_Glut_Bitmap_Font *)font)->font,((Fl_Glut_Bitmap_Font *)font)->size);
-  const char *s = (const char*)string;
-  return int(gl_width(s)+.5);
-}
-
-void glutBitmapString(void *font, const unsigned char *string) {
-  gl_font(((Fl_Glut_Bitmap_Font *)font)->font,((Fl_Glut_Bitmap_Font *)font)->size);
-  const char *s = (const char*)string;
-  gl_draw(s);
-}
-
-int glutBitmapWidth(void* font, int character) {
-  gl_font(((Fl_Glut_Bitmap_Font *)font)->font,((Fl_Glut_Bitmap_Font *)font)->size);
-  return int(gl_width(character)+.5);
-}
-
-
-/*
- * Draw a stroke character
- */
-void glutStrokeCharacter(void* fontID, int character) {
-  const Fl_Glut_StrokeChar *schar;
-  const Fl_Glut_StrokeStrip *strip;
-  int i, j;
-  Fl_Glut_StrokeFont* font = (Fl_Glut_StrokeFont *)fontID;
-
-  if (character < 0 || character >= font->Quantity) return;
-
-  schar = font->Characters[character];
-  if (!schar) return;
-
-  strip = schar->Strips;
-  
-  for (i = 0; i < schar->Number; i++, strip++)
-  {
-    glBegin(GL_LINE_STRIP);
-    for (j = 0; j < strip->Number; j++)
-      glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y);
-    glEnd();
-  }
-
-  glTranslatef(schar->Right, 0.0, 0.0);
-}
-
-void glutStrokeString(void* fontID, const unsigned char *string) {
-  unsigned char c;
-  int i, j;
-  float length = 0.0;
-  Fl_Glut_StrokeFont* font = (Fl_Glut_StrokeFont *)fontID;
-
-  if (!string || ! *string) return;
-  
- /*
-  * Step through the string, drawing each character.
-  * A newline will simply translate the next character's insertion
-  * point back to the start of the line and down one line.
-  */
-  while ((c = *string++) != 0) {
-    if (c < font->Quantity) {
-      if (c == '\n') {
-	glTranslatef(-length, -(float)(font->Height), 0.0);
-	length = 0.0;
-      } else  {
-        /* Not an EOL, draw the bitmap character */
-	const Fl_Glut_StrokeChar *schar = font->Characters[c];
-	if (schar) {
-	  const Fl_Glut_StrokeStrip *strip = schar->Strips;
-
-	  for (i = 0; i < schar->Number; i++, strip++) {
-	    glBegin(GL_LINE_STRIP);
-	    for (j = 0; j < strip->Number; j++)
-	      glVertex2f(strip->Vertices[j].X, strip->Vertices[j].Y);
-	    glEnd();
-	  }
-
-	  length += schar->Right;
-	  glTranslatef(schar->Right, 0.0, 0.0);
-	}
-      }
-    }
-  }
-}
-
-/*
- * Return the width in pixels of a stroke character
- */
-int glutStrokeWidth( void* fontID, int character )
-{
-  const Fl_Glut_StrokeChar *schar;
-  Fl_Glut_StrokeFont* font = (Fl_Glut_StrokeFont *)fontID;
-  if (character < 0 || character >= font->Quantity) return 0;
-  schar = font->Characters[ character ];
-
-  return schar ? (int)(schar->Right + 0.5) : 0;
-}
-
-/*
- * Return the width of a string drawn using a stroke font
- */
-int glutStrokeLength(void* fontID, const unsigned char* string) {
-  unsigned char c;
-  float length = 0.0;
-  float this_line_length = 0.0;
-  Fl_Glut_StrokeFont* font = (Fl_Glut_StrokeFont *)fontID;
-
-  if (!string || ! *string) return 0;
-
-  while ((c = *string++) != 0) {
-    if (c < font->Quantity) {
-      if (c == '\n') {
-        /* EOL; reset the length of this line */
-	if (length < this_line_length) length = this_line_length;
-	this_line_length = 0.0;
-      } else {
-        /* Not an EOL, increment the length of this line */
-	const Fl_Glut_StrokeChar *schar = font->Characters[c];
-	if (schar) this_line_length += schar->Right;
-      }
-    }
-  }
-
-  if (length < this_line_length) length = this_line_length;
-
-  return (int)(length + 0.5);
-}
-
-/*
- * Returns the height of a stroke font
- */
-GLfloat glutStrokeHeight(void* fontID) {
-  Fl_Glut_StrokeFont* font = (Fl_Glut_StrokeFont *)fontID;
-  return font->Height;
-}
-
-#endif // HAVE_GL
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/makedepend
+++ /dev/null
@@ -1,1387 +1,0 @@
-# DO NOT DELETE
-
-Fl.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Tooltip.H
-Fl.o: ../FL/Fl_Widget.H ../FL/x.H ../FL/Fl_Window.H flstring.h
-Fl.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Device.H
-Fl.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Adjuster.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Adjuster.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Adjuster.o: ../FL/Fl_Adjuster.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Adjuster.o: ../FL/Fl_Bitmap.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Adjuster.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Adjuster.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Adjuster.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Adjuster.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H fastarrow.h
-Fl_Adjuster.o: mediumarrow.h slowarrow.h
-Fl_Bitmap.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Bitmap.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Bitmap.o: ../FL/x.H ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/Enumerations.H
-Fl_Bitmap.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Bitmap.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Bitmap.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Bitmap.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Bitmap.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Printer.H
-Fl_Bitmap.o: ../FL/Fl_Paged_Device.H ../FL/Fl_PostScript.H flstring.h
-Fl_Bitmap.o: ../config.h
-Fl_Browser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Browser.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Browser.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Group.H
-Fl_Browser.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Browser.o: ../FL/Fl_Valuator.H ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H
-Fl_Browser.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Browser.o: ../FL/Fl_Bitmap.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Browser.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Browser.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h ../config.h
-Fl_Browser.o: ../FL/Fl_Hold_Browser.H ../FL/Fl_Browser.H
-Fl_Browser.o: ../FL/Fl_Multi_Browser.H ../FL/Fl_Select_Browser.H
-Fl_Browser_.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Browser_.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Browser_.o: ../FL/Fl_Widget.H ../FL/Fl_Browser_.H ../FL/Fl_Group.H
-Fl_Browser_.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Browser_.o: ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-Fl_Browser_.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Browser_.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Browser_.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Browser_.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Browser_load.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Browser_load.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Browser_load.o: ../FL/abi-version.h ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-Fl_Browser_load.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H
-Fl_Browser_load.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Image.H
-Fl_Browser_load.o: ../FL/fl_utf8.h
-Fl_Box.o: ../FL/Fl_Widget.H ../FL/Fl_Box.H ../FL/Fl_Widget.H
-Fl_Box.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Export.H
-Fl_Box.o: ../FL/fl_types.h
-Fl_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Button.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Button.o: ../FL/Fl_Button.H ../FL/Fl_Widget.H ../FL/Fl_Group.H
-Fl_Button.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Button.o: ../FL/Fl_Image.H ../FL/Fl_Radio_Button.H ../FL/Fl_Button.H
-Fl_Button.o: ../FL/Fl_Toggle_Button.H
-Fl_Chart.o: ../FL/math.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Chart.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Chart.o: ../FL/abi-version.h ../FL/Fl_Chart.H ../FL/Fl_Widget.H
-Fl_Chart.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Chart.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Chart.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Chart.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Chart.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h ../config.h
-Fl_Check_Browser.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/fl_draw.H
-Fl_Check_Browser.o: ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Check_Browser.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-Fl_Check_Browser.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Check_Browser.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Check_Browser.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Check_Browser.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Check_Browser.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Check_Browser.o: ../FL/Fl_Check_Browser.H ../FL/Fl.H ../FL/fl_utf8.h
-Fl_Check_Browser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-Fl_Check_Browser.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl.H
-Fl_Check_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Check_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Check_Button.o: ../FL/abi-version.h ../FL/Fl_Check_Button.H
-Fl_Check_Button.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_Choice.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Choice.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Choice.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Widget.H
-Fl_Choice.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H
-Fl_Choice.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Choice.o: ../FL/Fl_Group.H ../FL/Fl_Bitmap.H ../FL/Fl_Device.H
-Fl_Choice.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Choice.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Choice.o: flstring.h ../config.h
-Fl_Clock.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Clock.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Clock.o: ../FL/Fl_Clock.H ../FL/Fl_Widget.H ../FL/Fl_Round_Clock.H
-Fl_Clock.o: ../FL/Fl_Clock.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Clock.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Clock.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Clock.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Clock.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Color_Chooser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Color_Chooser.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Color_Chooser.o: ../FL/abi-version.h ../FL/Fl_Color_Chooser.H
-Fl_Color_Chooser.o: ../FL/Fl_Group.H ../FL/Fl_Box.H ../FL/Fl_Widget.H
-Fl_Color_Chooser.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-Fl_Color_Chooser.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-Fl_Color_Chooser.o: ../FL/Fl_Image.H ../FL/Fl_Value_Input.H
-Fl_Color_Chooser.o: ../FL/Fl_Valuator.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_Color_Chooser.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Color_Chooser.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Color_Chooser.o: ../FL/Fl_Bitmap.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Color_Chooser.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Color_Chooser.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/math.h
-Fl_Copy_Surface.o: ../FL/Fl_Copy_Surface.H ../FL/Fl_Paged_Device.H
-Fl_Copy_Surface.o: ../FL/Fl_Device.H ../FL/x.H ../FL/Enumerations.H
-Fl_Copy_Surface.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Copy_Surface.o: ../FL/Fl_Window.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Copy_Surface.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Copy_Surface.o: ../FL/Fl_Image.H ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H
-Fl_Copy_Surface.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Copy_Surface.o: ../FL/Fl_Printer.H ../FL/fl_draw.H ../FL/Enumerations.H
-Fl_Copy_Surface.o: ../FL/Fl_PostScript.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Copy_Surface.o: ../FL/fl_utf8.h
-Fl_Counter.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Counter.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Counter.o: ../FL/Fl_Counter.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Counter.o: ../FL/Fl_Simple_Counter.H ../FL/Fl_Counter.H ../FL/fl_draw.H
-Fl_Counter.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Counter.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Counter.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Counter.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Counter.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Dial.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Dial.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Dial.o: ../FL/Fl_Dial.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Dial.o: ../FL/Fl_Fill_Dial.H ../FL/Fl_Dial.H ../FL/Fl_Line_Dial.H
-Fl_Dial.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Dial.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Dial.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Dial.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Dial.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/math.h
-Fl_Device.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Device.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Device.o: ../FL/Fl_Device.H ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Plugin.H
-Fl_Device.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Device.o: ../FL/Fl_Pixmap.H ../FL/Fl_Image.H ../FL/Fl_RGB_Image.H
-Fl_Double_Window.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Double_Window.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Double_Window.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H
-Fl_Double_Window.o: ../FL/Fl_Window.H ../FL/Fl_Overlay_Window.H
-Fl_Double_Window.o: ../FL/Fl_Double_Window.H ../FL/Fl_Printer.H ../FL/x.H
-Fl_Double_Window.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-Fl_Double_Window.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Double_Window.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-Fl_Double_Window.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Double_Window.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/fl_draw.H
-Fl_Double_Window.o: ../FL/Enumerations.H ../FL/Fl_PostScript.H
-Fl_File_Browser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_File_Browser.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_File_Browser.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_File_Browser.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/filename.H
-Fl_File_Browser.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_File_Browser.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_File_Browser.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_File_Browser.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_File_Browser.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_File_Browser.o: ../FL/Fl_RGB_Image.H ../FL/filename.H flstring.h
-Fl_File_Browser.o: ../config.h
-Fl_File_Chooser.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_File_Chooser.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_File_Chooser.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_File_Chooser.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-Fl_File_Chooser.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-Fl_File_Chooser.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-Fl_File_Chooser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H
-Fl_File_Chooser.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_Group.H
-Fl_File_Chooser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_File_Chooser.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-Fl_File_Chooser.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_File_Chooser.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_File_Chooser.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_File_Chooser.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H ../FL/fl_draw.H
-Fl_File_Chooser.o: ../FL/x.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_File_Chooser.o: ../FL/Fl_Bitmap.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_File_Chooser.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_File_Chooser.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_File_Chooser2.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_File_Chooser2.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_File_Chooser2.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_File_Chooser2.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-Fl_File_Chooser2.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-Fl_File_Chooser2.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-Fl_File_Chooser2.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H
-Fl_File_Chooser2.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_Group.H
-Fl_File_Chooser2.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_File_Chooser2.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-Fl_File_Chooser2.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_File_Chooser2.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_File_Chooser2.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_File_Chooser2.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H ../FL/filename.H
-Fl_File_Chooser2.o: ../FL/x.H ../FL/Fl_Shared_Image.H ../FL/fl_draw.H
-Fl_File_Chooser2.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-Fl_File_Chooser2.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_File_Chooser2.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_File_Chooser2.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h
-Fl_File_Chooser2.o: ../config.h
-Fl_File_Icon.o: ../FL/fl_utf8.h flstring.h ../FL/Fl_Export.H ../config.h
-Fl_File_Icon.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/fl_utf8.h
-Fl_File_Icon.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_File_Icon.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_File_Icon.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_File_Icon.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_File_Icon.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_File_Icon.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_File_Icon.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_File_Icon.o: ../FL/filename.H
-Fl_File_Input.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_File_Input.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_File_Input.o: ../FL/abi-version.h ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-Fl_File_Input.o: ../FL/Fl_Input_.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_File_Input.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_File_Input.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_File_Input.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_File_Input.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_File_Input.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/filename.H
-Fl_File_Input.o: flstring.h ../config.h
-Fl_Group.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Group.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Group.o: ../FL/Fl_Group.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Group.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Group.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Group.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Group.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Group.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Input_Choice.H ../FL/Fl_Input.H
-Fl_Group.o: ../FL/Fl_Input_.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-Fl_Group.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Spinner.H ../FL/Fl_Repeat_Button.H
-Fl_Group.o: ../FL/Fl.H ../FL/Fl_Button.H
-Fl_Help_View.o: ../FL/Fl_Help_View.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Help_View.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Help_View.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Group.H
-Fl_Help_View.o: ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Help_View.o: ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-Fl_Help_View.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Help_View.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Help_View.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Help_View.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Help_View.o: ../FL/Fl_Shared_Image.H ../FL/filename.H ../FL/fl_utf8.h
-Fl_Help_View.o: ../FL/filename.H flstring.h ../config.h
-Fl_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Image.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Image.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Image.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Image.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Image.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Image.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Image.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Printer.H
-Fl_Image.o: ../FL/Fl_Paged_Device.H ../FL/Fl_PostScript.H flstring.h
-Fl_Image.o: ../config.h
-Fl_Image_Surface.o: ../FL/Fl_Image_Surface.H ../FL/Fl_Copy_Surface.H
-Fl_Image_Surface.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H ../FL/x.H
-Fl_Image_Surface.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Image_Surface.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-Fl_Image_Surface.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Image_Surface.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-Fl_Image_Surface.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Image_Surface.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Printer.H
-Fl_Image_Surface.o: ../FL/fl_draw.H ../FL/Enumerations.H
-Fl_Image_Surface.o: ../FL/Fl_PostScript.H ../FL/Fl_Shared_Image.H ../FL/Fl.H
-Fl_Image_Surface.o: ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Input.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Input.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Input.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Input.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Input.H
-Fl_Input.o: ../FL/Fl_Input_.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Input.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Input.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Input.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/fl_ask.H flstring.h
-Fl_Input.o: ../config.h ../FL/Fl_Float_Input.H ../FL/Fl_Input.H
-Fl_Input.o: ../FL/Fl_Int_Input.H ../FL/Fl_Multiline_Input.H ../FL/Fl_Output.H
-Fl_Input.o: ../FL/Fl_Multiline_Output.H ../FL/Fl_Output.H
-Fl_Input.o: ../FL/Fl_Secret_Input.H
-Fl_Input_.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Input_.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Input_.o: ../FL/Fl_Input_.H ../FL/Fl_Widget.H ../FL/Fl_Window.H
-Fl_Input_.o: ../FL/Fl_Group.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Input_.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Input_.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Input_.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Input_.o: ../FL/Fl_RGB_Image.H ../FL/fl_ask.H ../FL/fl_utf8.h flstring.h
-Fl_Input_.o: ../config.h
-Fl_Light_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Light_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Light_Button.o: ../FL/abi-version.h ../FL/Fl_Light_Button.H
-Fl_Light_Button.o: ../FL/Fl_Button.H ../FL/Fl_Radio_Light_Button.H
-Fl_Light_Button.o: ../FL/Fl_Light_Button.H ../FL/fl_draw.H ../FL/x.H
-Fl_Light_Button.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Light_Button.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Light_Button.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Light_Button.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Light_Button.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h
-Fl_Light_Button.o: ../config.h
-Fl_Menu.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Menu.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Menu.o: ../FL/Fl_Menu_Window.H ../FL/Fl_Single_Window.H ../FL/Fl_Window.H
-Fl_Menu.o: ../FL/Fl_Menu_.H ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H
-Fl_Menu.o: ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-Fl_Menu.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Menu.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Menu.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Menu.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h
-Fl_Menu_.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Menu_.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Menu_.o: ../FL/Fl_Menu_.H ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H
-Fl_Menu_.o: ../FL/Fl_Image.H flstring.h ../config.h
-Fl_Menu_Bar.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Menu_Bar.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Menu_Bar.o: ../FL/Fl_Menu_Bar.H ../FL/Fl_Menu_.H ../FL/Fl_Widget.H
-Fl_Menu_Bar.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H ../FL/fl_draw.H
-Fl_Menu_Bar.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Menu_Bar.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Menu_Bar.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Menu_Bar.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Menu_Bar.o: ../FL/Fl_RGB_Image.H
-Fl_Menu_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Menu_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Menu_Button.o: ../FL/abi-version.h ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-Fl_Menu_Button.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-Fl_Menu_Button.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Menu_Button.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Menu_Button.o: ../FL/Fl_Bitmap.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Menu_Button.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Menu_Button.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Menu_Window.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Menu_Window.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Menu_Window.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_Menu_Window.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Menu_Window.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Menu_Window.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Menu_Window.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Menu_Window.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Menu_Window.o: ../FL/Fl_Menu_Window.H ../FL/Fl_Single_Window.H
-Fl_Menu_add.o: ../FL/Fl_Menu_.H ../FL/Fl_Widget.H ../FL/Enumerations.H
-Fl_Menu_add.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Menu_add.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H flstring.h
-Fl_Menu_add.o: ../FL/Fl_Export.H ../config.h
-Fl_Menu_global.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Menu_global.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Menu_global.o: ../FL/abi-version.h ../FL/Fl_Menu_.H ../FL/Fl_Widget.H
-Fl_Menu_global.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-Fl_Multi_Label.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Multi_Label.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Multi_Label.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H
-Fl_Multi_Label.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H ../FL/Fl_Multi_Label.H
-Fl_Native_File_Chooser.o: Fl_Native_File_Chooser_FLTK.cxx ../config.h
-Fl_Native_File_Chooser.o: ../FL/Fl_Native_File_Chooser.H
-Fl_Native_File_Chooser.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Native_File_Chooser.o: ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Native_File_Chooser.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Image.H ../FL/Fl_Menu_Button.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Tile.H ../FL/Fl_Group.H
-Fl_Native_File_Chooser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_Native_File_Chooser.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_Native_File_Chooser.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-Fl_Native_File_Chooser.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-Fl_Native_File_Chooser.o: ../FL/fl_ask.H ../FL/Fl_File_Icon.H
-Fl_Native_File_Chooser.o: Fl_Native_File_Chooser_common.cxx
-Fl_Native_File_Chooser.o: ../FL/Enumerations.H Fl_Native_File_Chooser_GTK.cxx
-Fl_Native_File_Chooser.o: ../FL/x.H
-Fl_Overlay_Window.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Overlay_Window.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Overlay_Window.o: ../FL/abi-version.h ../FL/Fl_Overlay_Window.H
-Fl_Overlay_Window.o: ../FL/Fl_Double_Window.H ../FL/fl_draw.H ../FL/x.H
-Fl_Overlay_Window.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Overlay_Window.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Overlay_Window.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Overlay_Window.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Overlay_Window.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Pack.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Pack.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Pack.o: ../FL/Fl_Pack.H ../FL/Fl_Group.H ../FL/fl_draw.H ../FL/x.H
-Fl_Pack.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Pack.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Pack.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Pack.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Pack.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Paged_Device.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H ../FL/x.H
-Fl_Paged_Device.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Export.H
-Fl_Paged_Device.o: ../FL/fl_types.h ../FL/Fl_Window.H ../FL/Fl_Plugin.H
-Fl_Paged_Device.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Paged_Device.o: ../FL/Fl_Pixmap.H ../FL/Fl_Image.H ../FL/Fl_RGB_Image.H
-Fl_Paged_Device.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Paged_Device.o: ../FL/Fl_Bitmap.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Paged_Device.o: ../FL/fl_utf8.h ../FL/fl_draw.H ../FL/Enumerations.H
-Fl_Pixmap.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Pixmap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Pixmap.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Pixmap.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Pixmap.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Pixmap.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Pixmap.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Pixmap.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H
-Fl_Pixmap.o: ../FL/Fl_Printer.H ../FL/Fl_Paged_Device.H ../FL/Fl_PostScript.H
-Fl_Pixmap.o: flstring.h
-Fl_PostScript.o: ../FL/Fl_Printer.H ../FL/x.H ../FL/Enumerations.H
-Fl_PostScript.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_PostScript.o: ../FL/Fl_Window.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-Fl_PostScript.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_PostScript.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-Fl_PostScript.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_PostScript.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/fl_draw.H
-Fl_PostScript.o: ../FL/Enumerations.H ../FL/Fl_PostScript.H ../config.h
-Fl_PostScript.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/fl_ask.H
-Fl_PostScript.o: ../FL/Fl_Native_File_Chooser.H ../FL/Fl_File_Chooser.H
-Fl_PostScript.o: ../FL/Fl_Double_Window.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-Fl_PostScript.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Menu_Button.H
-Fl_PostScript.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-Fl_PostScript.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-Fl_PostScript.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-Fl_PostScript.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-Fl_PostScript.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_PostScript.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-Fl_PostScript.o: ../FL/Fl_Return_Button.H Fl_Font.H print_panel.cxx
-Fl_PostScript.o: print_panel.h ../FL/Fl_Round_Button.H ../FL/Fl_Spinner.H
-Fl_PostScript.o: ../FL/Fl_Repeat_Button.H ../FL/Fl_Progress.H
-Fl_PostScript.o: ../src/flstring.h ../FL/Fl_Int_Input.H ../FL/Fl_Input.H
-Fl_Positioner.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Positioner.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Positioner.o: ../FL/abi-version.h ../FL/Fl_Positioner.H ../FL/Fl_Widget.H
-Fl_Positioner.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Positioner.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Positioner.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Positioner.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Positioner.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Preferences.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Preferences.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Preferences.o: ../FL/abi-version.h ../FL/Fl_Preferences.H
-Fl_Preferences.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/filename.H
-Fl_Preferences.o: ../FL/fl_utf8.h flstring.h ../config.h
-Fl_Printer.o: ../FL/Fl_Printer.H ../FL/x.H ../FL/Enumerations.H
-Fl_Printer.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Printer.o: ../FL/Fl_Window.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-Fl_Printer.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Printer.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-Fl_Printer.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Printer.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/fl_draw.H
-Fl_Printer.o: ../FL/Enumerations.H ../FL/Fl_PostScript.H
-Fl_Progress.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Progress.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Progress.o: ../FL/Fl_Progress.H ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_Progress.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Progress.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Progress.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Progress.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Progress.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Repeat_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Repeat_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Repeat_Button.o: ../FL/abi-version.h ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-Fl_Repeat_Button.o: ../FL/Fl_Button.H
-Fl_Return_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Return_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Return_Button.o: ../FL/abi-version.h ../FL/Fl_Return_Button.H
-Fl_Return_Button.o: ../FL/Fl_Button.H ../FL/fl_draw.H ../FL/x.H
-Fl_Return_Button.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Return_Button.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Return_Button.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Return_Button.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Return_Button.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Roller.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Roller.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Roller.o: ../FL/Fl_Roller.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Roller.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Roller.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Roller.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Roller.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Roller.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Round_Button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Round_Button.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Round_Button.o: ../FL/abi-version.h ../FL/Fl_Round_Button.H
-Fl_Round_Button.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-Fl_Round_Button.o: ../FL/Fl_Radio_Round_Button.H ../FL/Fl_Round_Button.H
-Fl_Scroll.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Scroll.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Scroll.o: ../FL/Fl_Tiled_Image.H ../FL/Fl_Image.H ../FL/Fl_Scroll.H
-Fl_Scroll.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Scrollbar.H
-Fl_Scroll.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-Fl_Scroll.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Scroll.o: ../FL/Fl_Bitmap.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Scroll.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Scroll.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Scrollbar.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Scrollbar.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Scrollbar.o: ../FL/abi-version.h ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Scrollbar.o: ../FL/Fl_Valuator.H ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_Scrollbar.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Scrollbar.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Scrollbar.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Scrollbar.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Scrollbar.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h ../config.h
-Fl_Shared_Image.o: ../FL/fl_utf8.h flstring.h ../FL/Fl_Export.H ../config.h
-Fl_Shared_Image.o: ../FL/Fl.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Shared_Image.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Shared_Image.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Image.H
-Fl_Shared_Image.o: ../FL/Fl_XBM_Image.H ../FL/Fl_Bitmap.H
-Fl_Shared_Image.o: ../FL/Fl_XPM_Image.H ../FL/Fl_Pixmap.H
-Fl_Shared_Image.o: ../FL/Fl_Preferences.H ../FL/fl_draw.H ../FL/x.H
-Fl_Shared_Image.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Shared_Image.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Device.H
-Fl_Shared_Image.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Shared_Image.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Single_Window.o: ../FL/Fl_Single_Window.H ../FL/Fl_Window.H
-Fl_Slider.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Slider.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Slider.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Slider.o: ../FL/Fl_Fill_Slider.H ../FL/Fl_Slider.H ../FL/Fl_Hor_Slider.H
-Fl_Slider.o: ../FL/Fl_Hor_Fill_Slider.H ../FL/Fl_Hor_Nice_Slider.H
-Fl_Slider.o: ../FL/Fl_Nice_Slider.H ../FL/fl_draw.H ../FL/x.H
-Fl_Slider.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Slider.o: ../FL/Fl_Group.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Slider.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Slider.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Slider.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h
-Fl_Table.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-Fl_Table.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Table.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Table.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Table.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Table.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Table.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Table.H
-Fl_Table.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Group.H
-Fl_Table.o: ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-Fl_Table.o: ../FL/Fl_Valuator.H ../FL/Fl_Box.H ../FL/Fl_Scrollbar.H
-Fl_Table_Row.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Table_Row.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Table_Row.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-Fl_Table_Row.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Table_Row.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Table_Row.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Table_Row.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Table_Row.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Table_Row.H
-Fl_Table_Row.o: ../FL/Fl_Table.H ../FL/Fl_Group.H ../FL/Fl_Scroll.H
-Fl_Table_Row.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Table_Row.o: ../FL/Fl_Box.H ../FL/Fl_Scrollbar.H
-Fl_Tabs.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Tabs.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Tabs.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_Tabs.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Tabs.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Tabs.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Tabs.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Tabs.o: ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H
-Fl_Text_Buffer.o: ../FL/fl_utf8.h flstring.h ../FL/Fl_Export.H ../config.h
-Fl_Text_Buffer.o: ../FL/Fl.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Text_Buffer.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Text_Buffer.o: ../FL/Fl_Text_Buffer.H ../FL/fl_ask.H
-Fl_Text_Display.o: ../FL/fl_utf8.h flstring.h ../FL/Fl_Export.H ../config.h
-Fl_Text_Display.o: ../FL/Fl.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Text_Display.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Text_Display.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-Fl_Text_Display.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Text_Display.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Text_Display.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Text_Display.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Text_Display.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Text_Display.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Scrollbar.H
-Fl_Text_Display.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Text_Display.o: ../FL/Fl_Text_Buffer.H
-Fl_Text_Editor.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
-Fl_Text_Editor.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Text_Editor.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Window.H
-Fl_Text_Editor.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Text_Editor.o: ../FL/Fl_Image.H ../FL/Fl_Text_Editor.H
-Fl_Text_Editor.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/x.H
-Fl_Text_Editor.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Device.H
-Fl_Text_Editor.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Text_Editor.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Text_Editor.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Text_Editor.o: ../FL/Fl_Text_Buffer.H ../FL/fl_ask.H
-Fl_Tile.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Tile.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Tile.o: ../FL/Fl_Tile.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Tile.o: ../FL/Fl_Window.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Tiled_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Tiled_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Tiled_Image.o: ../FL/abi-version.h ../FL/Fl_Tiled_Image.H ../FL/Fl_Image.H
-Fl_Tiled_Image.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Tiled_Image.o: ../FL/Fl_Bitmap.H ../FL/fl_draw.H ../FL/x.H
-Fl_Tiled_Image.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Device.H
-Fl_Tiled_Image.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Tiled_Image.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Tree.o: ../FL/Fl_Tree.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Tree.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Tree.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Scrollbar.H
-Fl_Tree.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Tree.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Tree.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Tree.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Tree.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Tree.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Tree_Item.H
-Fl_Tree.o: ../FL/Fl_Widget.H ../FL/Fl_Tree_Item_Array.H ../FL/Fl_Tree_Prefs.H
-Fl_Tree.o: ../FL/Fl_Preferences.H
-Fl_Tree_Item.o: ../FL/Fl_Widget.H ../FL/Fl_Tree_Item.H ../FL/Fl.H
-Fl_Tree_Item.o: ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Tree_Item.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Tree_Item.o: ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Tree_Item.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Tree_Item.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Tree_Item.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Tree_Item.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Tree_Item.o: ../FL/Fl_Tree_Item_Array.H ../FL/Fl_Tree_Prefs.H
-Fl_Tree_Item.o: ../FL/Fl_Tree.H ../FL/Fl_Group.H ../FL/Fl_Scrollbar.H
-Fl_Tree_Item.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Tree_Item_Array.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Tree_Item_Array.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Tree_Item_Array.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Tree_Item_Array.o: ../FL/Fl_Tree_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-Fl_Tree_Item_Array.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Tree_Item_Array.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Preferences.H ../FL/Fl_Bitmap.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Tree_Item_Array.o: ../FL/Fl_Tree_Prefs.H
-Fl_Tree_Prefs.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Tree_Prefs.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Tree_Prefs.o: ../FL/abi-version.h ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-Fl_Tree_Prefs.o: ../FL/Fl_Tree_Prefs.H
-Fl_Tooltip.o: ../FL/Fl_Tooltip.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Tooltip.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Tooltip.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/fl_draw.H ../FL/x.H
-Fl_Tooltip.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Tooltip.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Tooltip.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Tooltip.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Tooltip.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Menu_Window.H
-Fl_Tooltip.o: ../FL/Fl_Single_Window.H
-Fl_Valuator.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Valuator.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Valuator.o: ../FL/Fl_Valuator.H ../FL/Fl_Widget.H ../FL/math.h flstring.h
-Fl_Valuator.o: ../config.h
-Fl_Value_Input.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Value_Input.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Value_Input.o: ../FL/abi-version.h ../FL/Fl_Value_Input.H
-Fl_Value_Input.o: ../FL/Fl_Valuator.H ../FL/Fl_Widget.H ../FL/Fl_Input.H
-Fl_Value_Input.o: ../FL/Fl_Input_.H ../FL/Fl_Group.H ../FL/math.h
-Fl_Value_Output.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Value_Output.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Value_Output.o: ../FL/abi-version.h ../FL/Fl_Value_Output.H
-Fl_Value_Output.o: ../FL/Fl_Valuator.H ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_Value_Output.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Value_Output.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-Fl_Value_Output.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Value_Output.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Value_Output.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Value_Slider.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Value_Slider.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Value_Slider.o: ../FL/abi-version.h ../FL/Fl_Value_Slider.H
-Fl_Value_Slider.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Widget.H
-Fl_Value_Slider.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H
-Fl_Value_Slider.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_Value_Slider.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Value_Slider.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Value_Slider.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Value_Slider.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Widget.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_Widget.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Widget.o: ../FL/Fl_Widget.H ../FL/Fl_Group.H ../FL/Fl_Tooltip.H
-Fl_Widget.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-Fl_Widget.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Widget.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Widget.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Widget.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Widget.o: flstring.h ../config.h
-Fl_Window.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Window.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Window.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_Window.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Image.H ../FL/Fl_Window.H
-Fl_Window.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H flstring.h
-Fl_Window_fullscreen.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Window_fullscreen.o: ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Window_fullscreen.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/x.H
-Fl_Window_fullscreen.o: ../FL/Fl_Window.H ../config.h
-Fl_Window_hotspot.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Window_hotspot.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Window_hotspot.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Window_hotspot.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_Window_hotspot.o: ../FL/x.H ../FL/Fl_Window.H
-Fl_Window_iconize.o: ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Window_iconize.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-Fl_Window_shape.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Window_shape.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Window_shape.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-Fl_Window_shape.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Window_shape.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_Window_shape.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_Window_shape.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_Window_shape.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Wizard.o: ../FL/Fl_Wizard.H ../FL/Fl_Group.H ../FL/Fl_Window.H
-Fl_Wizard.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Enumerations.H
-Fl_Wizard.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Wizard.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H
-Fl_Wizard.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Device.H
-Fl_Wizard.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Wizard.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_XBM_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_XBM_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_XBM_Image.o: ../FL/abi-version.h ../FL/Fl_XBM_Image.H ../FL/Fl_Bitmap.H
-Fl_XBM_Image.o: ../FL/Fl_Image.H ../FL/fl_utf8.h flstring.h ../config.h
-Fl_XPM_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_XPM_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_XPM_Image.o: ../FL/abi-version.h ../FL/Fl_XPM_Image.H ../FL/Fl_Pixmap.H
-Fl_XPM_Image.o: ../FL/Fl_Image.H ../FL/fl_utf8.h flstring.h ../config.h
-Fl_abort.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_abort.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_abort.o: flstring.h ../config.h
-Fl_add_idle.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_add_idle.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_arg.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_arg.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h ../FL/x.H
-Fl_arg.o: ../FL/Fl_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_arg.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_arg.o: ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H ../FL/filename.H
-Fl_arg.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Device.H
-Fl_arg.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_arg.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h
-Fl_arg.o: ../config.h
-Fl_compose.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_compose.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_compose.o: ../FL/x.H ../FL/Fl_Window.H
-Fl_display.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_display.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_display.o: flstring.h ../config.h
-Fl_get_key.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_get_key.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_get_key.o: ../FL/x.H ../FL/Fl_Window.H
-Fl_get_system_colors.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_get_system_colors.o: ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_get_system_colors.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_get_system_colors.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-Fl_get_system_colors.o: ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_get_system_colors.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_get_system_colors.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_get_system_colors.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_get_system_colors.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_get_system_colors.o: ../FL/Fl_RGB_Image.H ../FL/math.h ../FL/fl_utf8.h
-Fl_get_system_colors.o: flstring.h ../config.h ../FL/Fl_Tiled_Image.H
-Fl_get_system_colors.o: tile.xpm
-Fl_grab.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_grab.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_grab.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_lock.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-Fl_lock.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-Fl_lock.o: ../config.h
-Fl_own_colormap.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_own_colormap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_own_colormap.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_visual.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_visual.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_visual.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_x.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_x.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_x.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Window.H
-Fl_x.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-Fl_x.o: ../FL/fl_utf8.h ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H ../FL/fl_draw.H
-Fl_x.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-Fl_x.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-Fl_x.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Paged_Device.H
-Fl_x.o: ../FL/Fl_Shared_Image.H ../FL/fl_ask.H ../FL/filename.H flstring.h
-Fl_x.o: Xutf8.h
-filename_absolute.o: ../FL/filename.H ../FL/fl_utf8.h flstring.h
-filename_absolute.o: ../FL/Fl_Export.H ../config.h
-filename_expand.o: ../FL/filename.H ../FL/fl_utf8.h flstring.h
-filename_expand.o: ../FL/Fl_Export.H ../config.h
-filename_ext.o: ../FL/filename.H
-filename_isdir.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/filename.H
-filename_isdir.o: ../FL/fl_utf8.h
-filename_list.o: ../FL/filename.H ../FL/fl_utf8.h flstring.h
-filename_list.o: ../FL/Fl_Export.H ../config.h
-filename_match.o: ../FL/filename.H
-filename_setext.o: ../FL/filename.H flstring.h ../FL/Fl_Export.H ../config.h
-fl_arc.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-fl_arc.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-fl_arc.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_arc.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_arc.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_arc.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_arc.o: ../FL/Fl_RGB_Image.H ../FL/math.h
-fl_arci.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-fl_arci.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-fl_arci.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_arci.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_arci.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_arci.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_arci.o: ../FL/Fl_RGB_Image.H ../config.h
-fl_ask.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H ../FL/fl_utf8.h
-fl_ask.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_ask.o: ../FL/abi-version.h ../FL/fl_ask.H ../FL/Fl_Box.H ../FL/Fl_Widget.H
-fl_ask.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-fl_ask.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Bitmap.H
-fl_ask.o: ../FL/Fl_Image.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-fl_ask.o: ../FL/Fl_Secret_Input.H ../FL/Fl_Input.H ../FL/x.H
-fl_ask.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/Enumerations.H
-fl_ask.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_ask.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_ask.o: ../FL/Fl_RGB_Image.H
-fl_boxtype.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_boxtype.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_boxtype.o: ../FL/Fl_Widget.H ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_boxtype.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_boxtype.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_boxtype.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_boxtype.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_boxtype.o: ../FL/Fl_RGB_Image.H ../config.h
-fl_color.o: Fl_XColor.H ../config.h ../FL/Enumerations.H ../FL/Fl.H
-fl_color.o: ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_color.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_color.o: ../FL/x.H ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/Fl_Window.H
-fl_color.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_color.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_color.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_color.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H fl_cmap.h
-fl_cursor.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_cursor.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_cursor.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-fl_cursor.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Pixmap.H
-fl_cursor.o: ../FL/Fl_RGB_Image.H ../FL/x.H ../FL/Fl_Window.H ../FL/fl_draw.H
-fl_cursor.o: ../FL/Enumerations.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_cursor.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_cursor.o: fl_cursor_wait.xpm fl_cursor_help.xpm fl_cursor_nwse.xpm
-fl_cursor.o: fl_cursor_nesw.xpm fl_cursor_none.xpm
-fl_curve.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-fl_curve.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-fl_curve.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_curve.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_curve.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_curve.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_curve.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_diamond_box.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_diamond_box.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_diamond_box.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_diamond_box.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_diamond_box.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_diamond_box.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_diamond_box.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_diamond_box.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_dnd.o: fl_dnd_x.cxx ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_dnd.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_dnd.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_dnd.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/x.H
-fl_dnd.o: ../FL/Fl_Window.H flstring.h ../config.h
-fl_draw.o: ../FL/fl_utf8.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_draw.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_draw.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_draw.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_draw.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_draw.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_draw.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_draw.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h
-fl_draw_image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_draw_image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_draw_image.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_draw_image.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_draw_image.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_draw_image.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_draw_image.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_draw_image.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H Fl_XColor.H
-fl_draw_image.o: ../config.h flstring.h
-fl_draw_pixmap.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_draw_pixmap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_draw_pixmap.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_draw_pixmap.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_draw_pixmap.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_draw_pixmap.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_draw_pixmap.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_draw_pixmap.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H flstring.h
-fl_draw_pixmap.o: ../config.h
-fl_encoding_latin1.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-fl_encoding_latin1.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-fl_encoding_latin1.o: ../FL/Fl_Window.H ../FL/Enumerations.H
-fl_encoding_latin1.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-fl_encoding_latin1.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-fl_encoding_latin1.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_encoding_latin1.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_encoding_latin1.o: ../FL/Fl_RGB_Image.H flstring.h ../FL/Fl_Export.H
-fl_encoding_latin1.o: ../config.h
-fl_encoding_mac_roman.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-fl_encoding_mac_roman.o: ../FL/abi-version.h ../FL/Fl_Export.H
-fl_encoding_mac_roman.o: ../FL/fl_types.h ../FL/Fl_Window.H
-fl_encoding_mac_roman.o: ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_encoding_mac_roman.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_encoding_mac_roman.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_encoding_mac_roman.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fl_encoding_mac_roman.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_encoding_mac_roman.o: ../FL/Fl_RGB_Image.H flstring.h ../FL/Fl_Export.H
-fl_encoding_mac_roman.o: ../config.h
-fl_engraved_label.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_engraved_label.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_engraved_label.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/fl_draw.H
-fl_engraved_label.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-fl_engraved_label.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-fl_engraved_label.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-fl_engraved_label.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_engraved_label.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_engraved_label.o: ../FL/Fl_RGB_Image.H
-fl_file_dir.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/filename.H
-fl_file_dir.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/fl_utf8.h
-fl_file_dir.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_file_dir.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-fl_file_dir.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-fl_file_dir.o: ../FL/Fl_Widget.H ../FL/Fl_Menu_Item.H ../FL/Fl_Image.H
-fl_file_dir.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H
-fl_file_dir.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_Group.H
-fl_file_dir.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-fl_file_dir.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-fl_file_dir.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-fl_file_dir.o: ../FL/Fl_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-fl_file_dir.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-fl_font.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
-fl_font.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-fl_font.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_font.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_font.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_font.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_font.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_font.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H Fl_Font.H fl_font_xft.cxx
-fl_gleam.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_gleam.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_gleam.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-fl_gleam.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-fl_gleam.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-fl_gleam.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fl_gleam.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_gtk.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_gtk.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_gtk.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H ../FL/Enumerations.H
-fl_gtk.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-fl_gtk.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-fl_gtk.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fl_gtk.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_labeltype.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_labeltype.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_labeltype.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/Fl_Group.H
-fl_labeltype.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_labeltype.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_labeltype.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_labeltype.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_labeltype.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_labeltype.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Input_.H
-fl_line_style.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_line_style.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_line_style.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_line_style.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_line_style.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_line_style.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_line_style.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_line_style.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Printer.H
-fl_line_style.o: ../FL/Fl_Paged_Device.H ../FL/Fl_PostScript.H flstring.h
-fl_line_style.o: ../config.h
-fl_open_uri.o: ../FL/filename.H flstring.h ../FL/Fl_Export.H ../config.h
-fl_oval_box.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_oval_box.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_oval_box.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_oval_box.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_oval_box.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_oval_box.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_oval_box.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_oval_box.o: ../FL/Fl_RGB_Image.H
-fl_overlay.o: ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-fl_overlay.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-fl_overlay.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_overlay.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_overlay.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_overlay.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_overlay.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_overlay_visual.o: ../config.h
-fl_plastic.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_plastic.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_plastic.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_plastic.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_plastic.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_plastic.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_plastic.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_plastic.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h
-fl_read_image.o: ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-fl_read_image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-fl_read_image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/fl_draw.H
-fl_read_image.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_read_image.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_read_image.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_read_image.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_read_image.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h
-fl_rect.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_rect.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_rect.o: ../FL/abi-version.h ../FL/Fl_Widget.H ../FL/Fl_Printer.H ../FL/x.H
-fl_rect.o: ../FL/Fl_Window.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-fl_rect.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fl_rect.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-fl_rect.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_rect.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/fl_draw.H
-fl_rect.o: ../FL/Enumerations.H ../FL/Fl_PostScript.H
-fl_round_box.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_round_box.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_round_box.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_round_box.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_round_box.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_round_box.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_round_box.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_round_box.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_rounded_box.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_rounded_box.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_rounded_box.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_rounded_box.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_rounded_box.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_rounded_box.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_rounded_box.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_rounded_box.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_set_font.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_set_font.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_set_font.o: ../FL/x.H ../FL/Fl_Window.H ../FL/fl_draw.H
-fl_set_font.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_set_font.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_set_font.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_set_font.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_set_font.o: ../FL/Fl_RGB_Image.H flstring.h ../config.h Fl_Font.H
-fl_set_fonts.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_set_fonts.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_set_fonts.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H Fl_Font.H
-fl_set_fonts.o: ../config.h flstring.h fl_set_fonts_xft.cxx
-fl_scroll_area.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_scroll_area.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_scroll_area.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-fl_scroll_area.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_scroll_area.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_scroll_area.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_scroll_area.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_scroll_area.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_shadow_box.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_shadow_box.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_shadow_box.o: ../FL/abi-version.h ../FL/fl_draw.H ../FL/x.H
-fl_shadow_box.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_shadow_box.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_shadow_box.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_shadow_box.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_shadow_box.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_shortcut.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_shortcut.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_shortcut.o: ../FL/Fl_Widget.H ../FL/Fl_Button.H ../FL/Fl_Widget.H
-fl_shortcut.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_shortcut.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_shortcut.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-fl_shortcut.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-fl_shortcut.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_shortcut.o: flstring.h ../config.h
-fl_show_colormap.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fl_show_colormap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fl_show_colormap.o: ../FL/abi-version.h ../FL/Fl_Single_Window.H
-fl_show_colormap.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/x.H
-fl_show_colormap.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_show_colormap.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_show_colormap.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_show_colormap.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_show_colormap.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-fl_show_colormap.o: ../FL/fl_show_colormap.H ../config.h
-fl_symbols.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fl_symbols.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fl_symbols.o: ../FL/fl_draw.H ../FL/x.H ../FL/Fl_Window.H
-fl_symbols.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fl_symbols.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-fl_symbols.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-fl_symbols.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-fl_symbols.o: ../FL/Fl_RGB_Image.H ../FL/math.h flstring.h ../config.h
-fl_vertex.o: ../config.h ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-fl_vertex.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-fl_vertex.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-fl_vertex.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fl_vertex.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-fl_vertex.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-fl_vertex.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl.H
-fl_vertex.o: ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/math.h
-screen_xywh.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-screen_xywh.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-screen_xywh.o: ../FL/x.H ../FL/Fl_Window.H ../config.h
-fl_utf8.o: ../config.h ../FL/filename.H Xutf8.h ../FL/Fl_Export.H
-fl_utf8.o: ../FL/fl_utf8.h
-ps_image.o: ../FL/Fl_PostScript.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-ps_image.o: ../FL/x.H ../FL/Enumerations.H ../FL/abi-version.h
-ps_image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-ps_image.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-ps_image.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Image.H
-ps_image.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-ps_image.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/fl_draw.H
-ps_image.o: ../FL/Enumerations.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-forms_compatability.o: ../FL/forms.H ../FL/Fl.H ../FL/Fl_Export.H
-forms_compatability.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-forms_compatability.o: ../FL/Enumerations.H ../FL/abi-version.h
-forms_compatability.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Window.H
-forms_compatability.o: ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-forms_compatability.o: ../FL/Fl_Window.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-forms_compatability.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-forms_compatability.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-forms_compatability.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-forms_compatability.o: ../FL/Fl_RGB_Image.H ../FL/Fl_FormsBitmap.H
-forms_compatability.o: ../FL/Fl_FormsPixmap.H ../FL/Fl_Pixmap.H
-forms_compatability.o: ../FL/Fl_Box.H ../FL/Fl_Browser.H ../FL/Fl_Button.H
-forms_compatability.o: ../FL/Fl_Light_Button.H ../FL/Fl_Round_Button.H
-forms_compatability.o: ../FL/Fl_Check_Button.H ../FL/Fl_Chart.H
-forms_compatability.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-forms_compatability.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H
-forms_compatability.o: ../FL/Fl_Counter.H ../FL/Fl_Dial.H ../FL/Fl_Free.H
-forms_compatability.o: ../FL/fl_ask.H ../FL/fl_show_colormap.H
-forms_compatability.o: ../FL/filename.H ../FL/Fl_File_Chooser.H ../FL/Fl.H
-forms_compatability.o: ../FL/Fl_Double_Window.H ../FL/Fl_Group.H
-forms_compatability.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-forms_compatability.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H
-forms_compatability.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-forms_compatability.o: ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
-forms_compatability.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H
-forms_compatability.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H
-forms_compatability.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-forms_compatability.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
-forms_compatability.o: ../FL/Fl_Positioner.H ../FL/Fl_Slider.H
-forms_compatability.o: ../FL/Fl_Valuator.H ../FL/Fl_Value_Slider.H
-forms_compatability.o: ../FL/Fl_Timer.H ../FL/Fl_Repeat_Button.H
-forms_bitmap.o: ../FL/forms.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-forms_bitmap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-forms_bitmap.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Widget.H
-forms_bitmap.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/x.H
-forms_bitmap.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-forms_bitmap.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-forms_bitmap.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-forms_bitmap.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_FormsBitmap.H
-forms_bitmap.o: ../FL/Fl_FormsPixmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Box.H
-forms_bitmap.o: ../FL/Fl_Browser.H ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-forms_bitmap.o: ../FL/Fl_Round_Button.H ../FL/Fl_Check_Button.H
-forms_bitmap.o: ../FL/Fl_Chart.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-forms_bitmap.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H ../FL/Fl_Counter.H
-forms_bitmap.o: ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
-forms_bitmap.o: ../FL/fl_show_colormap.H ../FL/filename.H
-forms_bitmap.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Double_Window.H
-forms_bitmap.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-forms_bitmap.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-forms_bitmap.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
-forms_bitmap.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H
-forms_bitmap.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-forms_bitmap.o: ../FL/fl_ask.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
-forms_bitmap.o: ../FL/Fl_Positioner.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-forms_bitmap.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H
-forms_free.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-forms_free.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-forms_free.o: ../FL/Fl_Free.H ../FL/Fl_Widget.H
-forms_fselect.o: ../FL/forms.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-forms_fselect.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-forms_fselect.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Widget.H
-forms_fselect.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/x.H
-forms_fselect.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-forms_fselect.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-forms_fselect.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-forms_fselect.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-forms_fselect.o: ../FL/Fl_FormsBitmap.H ../FL/Fl_FormsPixmap.H
-forms_fselect.o: ../FL/Fl_Pixmap.H ../FL/Fl_Box.H ../FL/Fl_Browser.H
-forms_fselect.o: ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-forms_fselect.o: ../FL/Fl_Round_Button.H ../FL/Fl_Check_Button.H
-forms_fselect.o: ../FL/Fl_Chart.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-forms_fselect.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H ../FL/Fl_Counter.H
-forms_fselect.o: ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
-forms_fselect.o: ../FL/fl_show_colormap.H ../FL/filename.H
-forms_fselect.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Double_Window.H
-forms_fselect.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-forms_fselect.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-forms_fselect.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
-forms_fselect.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H
-forms_fselect.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-forms_fselect.o: ../FL/fl_ask.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
-forms_fselect.o: ../FL/Fl_Positioner.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-forms_fselect.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H flstring.h
-forms_fselect.o: ../config.h
-forms_pixmap.o: ../FL/forms.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-forms_pixmap.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-forms_pixmap.o: ../FL/abi-version.h ../FL/Fl_Group.H ../FL/Fl_Widget.H
-forms_pixmap.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/x.H
-forms_pixmap.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-forms_pixmap.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-forms_pixmap.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-forms_pixmap.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_FormsBitmap.H
-forms_pixmap.o: ../FL/Fl_FormsPixmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Box.H
-forms_pixmap.o: ../FL/Fl_Browser.H ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-forms_pixmap.o: ../FL/Fl_Round_Button.H ../FL/Fl_Check_Button.H
-forms_pixmap.o: ../FL/Fl_Chart.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-forms_pixmap.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H ../FL/Fl_Counter.H
-forms_pixmap.o: ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
-forms_pixmap.o: ../FL/fl_show_colormap.H ../FL/filename.H
-forms_pixmap.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Double_Window.H
-forms_pixmap.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-forms_pixmap.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-forms_pixmap.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
-forms_pixmap.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H
-forms_pixmap.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H
-forms_pixmap.o: ../FL/fl_ask.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
-forms_pixmap.o: ../FL/Fl_Positioner.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-forms_pixmap.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Timer.H
-forms_timer.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-forms_timer.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-forms_timer.o: ../FL/Fl_Timer.H ../FL/Fl_Widget.H ../FL/fl_draw.H ../FL/x.H
-forms_timer.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-forms_timer.o: ../FL/Fl_Group.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-forms_timer.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-forms_timer.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-forms_timer.o: ../FL/Fl_RGB_Image.H ../FL/forms.H ../FL/Fl.H ../FL/fl_draw.H
-forms_timer.o: ../FL/Fl_FormsBitmap.H ../FL/Fl_FormsPixmap.H
-forms_timer.o: ../FL/Fl_Pixmap.H ../FL/Fl_Box.H ../FL/Fl_Browser.H
-forms_timer.o: ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-forms_timer.o: ../FL/Fl_Round_Button.H ../FL/Fl_Check_Button.H
-forms_timer.o: ../FL/Fl_Chart.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-forms_timer.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Clock.H ../FL/Fl_Counter.H
-forms_timer.o: ../FL/Fl_Dial.H ../FL/Fl_Free.H ../FL/fl_ask.H
-forms_timer.o: ../FL/fl_show_colormap.H ../FL/filename.H
-forms_timer.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Double_Window.H
-forms_timer.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H
-forms_timer.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-forms_timer.o: ../FL/Fl_File_Browser.H ../FL/Fl_File_Icon.H ../FL/Fl_Box.H
-forms_timer.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-forms_timer.o: ../FL/Fl_Input_.H ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-forms_timer.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H ../FL/Fl_Positioner.H
-forms_timer.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Value_Slider.H
-forms_timer.o: ../FL/Fl_Timer.H
-Fl_Gl_Choice.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Gl_Choice.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Gl_Choice.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_Gl_Choice.o: Fl_Gl_Choice.H ../FL/gl_draw.H ../FL/gl.h flstring.h
-Fl_Gl_Choice.o: ../FL/fl_utf8.h
-Fl_Gl_Overlay.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_Gl_Overlay.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_Gl_Overlay.o: ../FL/abi-version.h ../FL/x.H ../FL/Fl_Window.H
-Fl_Gl_Overlay.o: Fl_Gl_Choice.H ../FL/Fl_Gl_Window.H
-Fl_Gl_Device_Plugin.o: ../config.h ../FL/Fl_Printer.H ../FL/x.H
-Fl_Gl_Device_Plugin.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl_Window.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Image.H ../FL/Fl_RGB_Image.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_Bitmap.H ../FL/fl_draw.H ../FL/Enumerations.H
-Fl_Gl_Device_Plugin.o: ../FL/Fl_PostScript.H ../FL/Fl_Gl_Window.H
-Fl_Gl_Device_Plugin.o: Fl_Gl_Choice.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Gl_Device_Plugin.o: ../FL/fl_utf8.h
-Fl_Gl_Window.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
-Fl_Gl_Window.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Gl_Window.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/x.H
-Fl_Gl_Window.o: ../FL/Fl_Window.H Fl_Gl_Choice.H ../FL/Fl_Gl_Window.H
-Fl_Gl_Window.o: ../FL/fl_utf8.h
-freeglut_geometry.o: ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-freeglut_geometry.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-freeglut_geometry.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-freeglut_geometry.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H ../FL/math.h
-freeglut_stroke_mono_roman.o: ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-freeglut_stroke_mono_roman.o: ../FL/abi-version.h ../FL/Fl_Export.H
-freeglut_stroke_mono_roman.o: ../FL/fl_types.h ../FL/Fl.H ../FL/Fl_Export.H
-freeglut_stroke_mono_roman.o: ../FL/fl_utf8.h ../FL/Fl_Gl_Window.H
-freeglut_stroke_mono_roman.o: ../FL/Fl_Window.H
-freeglut_stroke_roman.o: ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-freeglut_stroke_roman.o: ../FL/abi-version.h ../FL/Fl_Export.H
-freeglut_stroke_roman.o: ../FL/fl_types.h ../FL/Fl.H ../FL/Fl_Export.H
-freeglut_stroke_roman.o: ../FL/fl_utf8.h ../FL/Fl_Gl_Window.H
-freeglut_stroke_roman.o: ../FL/Fl_Window.H
-freeglut_teapot.o: ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-freeglut_teapot.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-freeglut_teapot.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-freeglut_teapot.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H
-freeglut_teapot.o: freeglut_teapot_data.h
-gl_draw.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/Fl.H
-gl_draw.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-gl_draw.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/gl.h
-gl_draw.o: ../FL/gl_draw.H ../FL/gl.h ../FL/x.H ../FL/Fl_Window.H
-gl_draw.o: ../FL/fl_draw.H ../FL/Enumerations.H ../FL/Fl_Window.H
-gl_draw.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-gl_draw.o: ../FL/Fl_Image.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-gl_draw.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-gl_draw.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H Fl_Gl_Choice.H Fl_Font.H
-gl_draw.o: ../FL/fl_utf8.h Xutf8.h
-gl_start.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-gl_start.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-gl_start.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Group.H
-gl_start.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/x.H
-gl_start.o: ../FL/Fl_Window.H ../FL/fl_draw.H ../FL/Enumerations.H
-gl_start.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-gl_start.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-gl_start.o: ../FL/Fl_RGB_Image.H ../FL/gl.h Fl_Gl_Choice.H
-glut_compatability.o: flstring.h ../FL/Fl_Export.H ../config.h ../FL/glut.H
-glut_compatability.o: ../FL/gl.h ../FL/Enumerations.H ../FL/abi-version.h
-glut_compatability.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl.H
-glut_compatability.o: ../FL/fl_utf8.h ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H
-glut_compatability.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-glut_font.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-glut_font.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-glut_font.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-glut_font.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H
-fl_images_core.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Image.H
-fl_images_core.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Export.H
-fl_images_core.o: ../FL/fl_types.h ../FL/Fl_BMP_Image.H ../FL/Fl_GIF_Image.H
-fl_images_core.o: ../FL/Fl_Pixmap.H ../FL/Fl_JPEG_Image.H
-fl_images_core.o: ../FL/Fl_PNG_Image.H ../FL/Fl_PNM_Image.H flstring.h
-fl_images_core.o: ../FL/Fl_Export.H ../config.h
-Fl_BMP_Image.o: ../FL/Fl_BMP_Image.H ../FL/Fl_Image.H ../FL/Enumerations.H
-Fl_BMP_Image.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_BMP_Image.o: ../FL/fl_utf8.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_BMP_Image.o: ../config.h
-Fl_File_Icon2.o: ../FL/fl_utf8.h flstring.h ../FL/Fl_Export.H ../config.h
-Fl_File_Icon2.o: ../FL/math.h ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/fl_utf8.h
-Fl_File_Icon2.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_File_Icon2.o: ../FL/abi-version.h ../FL/Fl_Shared_Image.H ../FL/Fl_Image.H
-Fl_File_Icon2.o: ../FL/Fl_Widget.H ../FL/fl_draw.H ../FL/x.H
-Fl_File_Icon2.o: ../FL/Fl_Window.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_File_Icon2.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-Fl_File_Icon2.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-Fl_File_Icon2.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-Fl_File_Icon2.o: ../FL/Fl_RGB_Image.H ../FL/filename.H
-Fl_GIF_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_GIF_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_GIF_Image.o: ../FL/abi-version.h ../FL/Fl_GIF_Image.H ../FL/Fl_Pixmap.H
-Fl_GIF_Image.o: ../FL/Fl_Image.H ../FL/fl_utf8.h flstring.h ../config.h
-Fl_Help_Dialog.o: ../FL/Fl_Help_Dialog.H ../FL/Fl.H ../FL/Fl_Export.H
-Fl_Help_Dialog.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_Help_Dialog.o: ../FL/Enumerations.H ../FL/abi-version.h
-Fl_Help_Dialog.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-Fl_Help_Dialog.o: ../FL/Fl_Button.H ../FL/Fl_Widget.H ../FL/Fl_Input.H
-Fl_Help_Dialog.o: ../FL/Fl_Input_.H ../FL/Fl_Box.H ../FL/Fl_Help_View.H
-Fl_Help_Dialog.o: ../FL/Fl.H ../FL/Fl_Group.H ../FL/Fl_Scrollbar.H
-Fl_Help_Dialog.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H
-Fl_Help_Dialog.o: ../FL/x.H ../FL/Enumerations.H ../FL/Fl_Window.H
-Fl_Help_Dialog.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Device.H
-Fl_Help_Dialog.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-Fl_Help_Dialog.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-Fl_Help_Dialog.o: ../FL/Fl_Shared_Image.H ../FL/filename.H flstring.h
-Fl_Help_Dialog.o: ../config.h ../FL/fl_ask.H
-Fl_JPEG_Image.o: ../FL/Fl_JPEG_Image.H ../FL/Fl_Image.H ../FL/Enumerations.H
-Fl_JPEG_Image.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-Fl_JPEG_Image.o: ../FL/Fl_Shared_Image.H ../FL/fl_utf8.h ../FL/Fl.H
-Fl_JPEG_Image.o: ../FL/Fl_Export.H ../FL/fl_utf8.h ../config.h
-Fl_PNG_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_PNG_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_PNG_Image.o: ../FL/abi-version.h ../FL/Fl_PNG_Image.H ../FL/Fl_Image.H
-Fl_PNG_Image.o: ../FL/Fl_Shared_Image.H ../config.h ../FL/fl_utf8.h
-Fl_PNM_Image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-Fl_PNM_Image.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-Fl_PNM_Image.o: ../FL/abi-version.h ../FL/Fl_PNM_Image.H ../FL/Fl_Image.H
-Fl_PNM_Image.o: ../FL/fl_utf8.h flstring.h ../config.h
-flstring.o: flstring.h ../FL/Fl_Export.H ../config.h
-scandir.o: ../config.h
-numericsort.o: ../config.h ../FL/filename.H
-vsnprintf.o: flstring.h ../FL/Fl_Export.H ../config.h
-fl_utf.o: ../FL/fl_utf8.h xutf8/mk_wcwidth.c
-xutf8/case.o: Xutf8.h ../FL/Fl_Export.H xutf8/headers/case.h
-xutf8/is_right2left.o: Xutf8.h ../FL/Fl_Export.H
-xutf8/is_spacing.o: Xutf8.h ../FL/Fl_Export.H xutf8/headers/spacing.h
-xutf8/keysym2Ucs.o: Xutf8.h ../FL/Fl_Export.H xutf8/imKStoUCS.c
-xutf8/keysym2Ucs.o: xutf8/Xlibint.h xutf8/Ximint.h
-xutf8/utf8Input.o: ../config.h Xutf8.h ../FL/Fl_Export.H
-xutf8/utf8Input.o: xutf8/lcUniConv/big5.h xutf8/lcUniConv/gb2312.h
-xutf8/utf8Input.o: xutf8/lcUniConv/cp936ext.h xutf8/lcUniConv/jisx0201.h
-xutf8/utf8Input.o: xutf8/lcUniConv/jisx0208.h xutf8/lcUniConv/jisx0212.h
-xutf8/utf8Input.o: xutf8/lcUniConv/ksc5601.h
-xutf8/utf8Utils.o: Xutf8.h ../FL/Fl_Export.H
-xutf8/utf8Wrap.o: Xutf8.h ../FL/Fl_Export.H xutf8/ucs2fontmap.c
-xutf8/utf8Wrap.o: xutf8/lcUniConv/cp936ext.h xutf8/lcUniConv/big5.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/gb2312.h xutf8/lcUniConv/iso8859_10.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_11.h xutf8/lcUniConv/iso8859_13.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_14.h xutf8/lcUniConv/iso8859_15.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_2.h xutf8/lcUniConv/iso8859_3.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_4.h xutf8/lcUniConv/iso8859_5.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_6.h xutf8/lcUniConv/iso8859_7.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/iso8859_8.h xutf8/lcUniConv/iso8859_9.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/jisx0201.h xutf8/lcUniConv/jisx0208.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/jisx0212.h xutf8/lcUniConv/koi8_r.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/koi8_u.h xutf8/lcUniConv/ksc5601.h
-xutf8/utf8Wrap.o: xutf8/lcUniConv/cp1251.h xutf8/headers/symbol_.h
-xutf8/utf8Wrap.o: xutf8/headers/dingbats_.h
--- a/DoConfig/fltk/src/mediumarrow.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#define mediumarrow_width 16
-#define mediumarrow_height 16
-static const unsigned char mediumarrow_bits[] = {
-   0x40, 0x00, 0x60, 0x00, 0x70, 0x00, 0x78, 0x00, 0xfc, 0x3f, 0x78, 0x00,
-   0x70, 0x00, 0x60, 0x02, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x1e, 0xfc, 0x3f,
-   0x00, 0x1e, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x02};
--- a/DoConfig/fltk/src/new.xbm
+++ /dev/null
@@ -1,6 +1,0 @@
-#define new_width 16
-#define new_height 16
-static unsigned char new_bits[] = {
-   0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0x02, 0x01, 0x01, 0xfe, 0x01, 0x80,
-   0x31, 0x80, 0x31, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x31, 0x80, 0x31, 0x80,
-   0x01, 0x80, 0x01, 0x80, 0xff, 0xff, 0x00, 0x00};
--- a/DoConfig/fltk/src/ns.xbm
+++ /dev/null
@@ -1,8 +1,0 @@
-#define ns_width 16
-#define ns_height 16
-#define ns_x_hot 8
-#define ns_y_hot 8
-static unsigned char ns_bits[] = {
-   0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0x80, 0x01, 0x80, 0x01,
-   0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
-   0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00};
--- a/DoConfig/fltk/src/ns_mask.xbm
+++ /dev/null
@@ -1,8 +1,0 @@
-#define ns_mask_width 16
-#define ns_mask_height 16
-#define ns_mask_x_hot 8
-#define ns_mask_y_hot 8
-static unsigned char ns_mask_bits[] = {
-   0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xc0, 0x03,
-   0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xf0, 0x0f,
-   0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01};
--- a/DoConfig/fltk/src/numericsort.c
+++ /dev/null
@@ -1,102 +1,0 @@
-/*
- * "$Id$"
- *
- * Numeric sorting routine for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2016 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* My own scandir sorting function, useful for the film industry where
-   we have many files with numbers in their names: */
-
-#include <config.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <sys/types.h>
-
-#if !defined(WIN32) || defined(__CYGWIN__)
-#  ifdef HAVE_DIRENT_H
-#    include <dirent.h>
-#  else
-#    define dirent direct
-#    ifdef HAVE_SYS_NDIR_H
-#      include <sys/ndir.h>
-#    endif /* HAVE_SYS_NDIR_H */
-#    ifdef HAVE_SYS_DIR_H
-#      include <sys/dir.h>
-#    endif /* HAVE_SYS_DIR_H */
-#    ifdef HAVE_NDIR_H
-#      include <ndir.h>
-#    endif /* HAVE_NDIR_H */
-#  endif /* HAVE_DIRENT_H */
-#endif /* !WIN32 || __CYGWIN__ */
-
-#include <FL/filename.H>
-
-/*
- * 'numericsort()' - Compare two directory entries, possibly with
- *                   a case-insensitive comparison...
- */
-
-static int numericsort(struct dirent **A, struct dirent **B, int cs) {
-  const char* a = (*A)->d_name;
-  const char* b = (*B)->d_name;
-  int ret = 0;
-  for (;;) {
-    if (isdigit(*a & 255) && isdigit(*b & 255)) {
-      int diff,magdiff;
-      while (*a == '0') a++;
-      while (*b == '0') b++;
-      while (isdigit(*a & 255) && *a == *b) {a++; b++;}
-      diff = (isdigit(*a & 255) && isdigit(*b & 255)) ? *a - *b : 0;
-      magdiff = 0;
-      while (isdigit(*a & 255)) {magdiff++; a++;}
-      while (isdigit(*b & 255)) {magdiff--; b++;}
-      if (magdiff) {ret = magdiff; break;} /* compare # of significant digits*/
-      if (diff) {ret = diff; break;}	/* compare first non-zero digit */
-    } else {
-      if (cs) {
-      	/* compare case-sensitive */
-	if ((ret = *a-*b)) break;
-      } else {
-	/* compare case-insensitve */
-	if ((ret = tolower(*a & 255)-tolower(*b & 255))) break;
-      }
-
-      if (!*a) break;
-      a++; b++;
-    }
-  }
-  if (!ret) return 0;
-  else return (ret < 0) ? -1 : 1;
-}
-
-/*
- * 'fl_casenumericsort()' - Compare directory entries with case-sensitivity.
- */
-
-int fl_casenumericsort(struct dirent **A, struct dirent **B) {
-  return numericsort(A, B, 0);
-}
-
-/*
- * 'fl_numericsort()' - Compare directory entries with case-sensitivity.
- */
-
-int fl_numericsort(struct dirent **A, struct dirent **B) {
-  return numericsort(A, B, 1);
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/print_panel.cxx
+++ /dev/null
@@ -1,624 +1,0 @@
-//
-// "$Id$"
-//
-// Print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// This file is "work in progress".  The main parts have been copied
-// from fluid's print_panel{.fl|.h|.cxx} and hand-edited to produce
-// a working version w/o global variables.  The intention is to move
-// all static variables into an own class, and to name this class
-// Fl_Printer_Chooser or similar...
-//
-// Todo:
-//
-//   -	Currently preferences can't be saved, and there are options that
-//	are not yet used for printing.
-//   -	This file can only be used as an include file in Fl_PS_Printer.cxx
-//   -	The use of static variables should be avoided.
-//   -	Probably much more ...
-//
-
-#include "print_panel.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Int_Input.H>
-
-static Fl_Preferences print_prefs(Fl_Preferences::USER, "fltk.org", "printers");
-static Fl_Double_Window *print_panel=(Fl_Double_Window *)0;
-static Fl_Group *print_panel_controls=(Fl_Group *)0;
-static Fl_Choice *print_choice=(Fl_Choice *)0;
-static Fl_Button *print_properties=(Fl_Button *)0;
-static Fl_Box *print_status=(Fl_Box *)0;
-static Fl_Round_Button *print_all=(Fl_Round_Button *)0;
-static Fl_Round_Button *print_pages=(Fl_Round_Button *)0;
-static Fl_Round_Button *print_selection=(Fl_Round_Button *)0;
-static Fl_Check_Button *print_collate_button=(Fl_Check_Button *)0;
-static Fl_Group *print_collate_group[2]={(Fl_Group *)0};
-static Fl_Progress *print_progress=(Fl_Progress *)0;
-static Fl_Double_Window *print_properties_panel=(Fl_Double_Window *)0;
-static Fl_Choice *print_page_size=(Fl_Choice *)0;
-static Fl_Int_Input *print_from=(Fl_Int_Input *)0;
-static Fl_Int_Input *print_to=(Fl_Int_Input *)0;
-static Fl_Spinner *print_copies=(Fl_Spinner *)0;
-
-static int print_start = 0;	// 1 if print_okay has been clicked
-
-static void cb_print_choice(Fl_Choice*, void*) {
-  print_update_status();
-}
-
-static void cb_print_properties(Fl_Button*, void*) {
-  print_properties_panel->show();
-}
-
-static void cb_print_all(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-  print_to->deactivate();
-}
-
-static void cb_print_pages(Fl_Round_Button*, void*) {
-  print_from->activate();
-  print_to->activate();
-}
-
-static void cb_print_selection(Fl_Round_Button*, void*) {
-  print_from->deactivate();
-  print_to->deactivate();
-}
-
-static void cb_print_copies(Fl_Spinner*, void*) {
-  if (print_copies->value() == 1) {
-    print_collate_button->deactivate();
-    print_collate_group[0]->deactivate();
-    print_collate_group[1]->deactivate();
-  } else {
-/*    print_collate_button->activate(); // TODO: manage collate options
-    print_collate_group[0]->activate();
-    print_collate_group[1]->activate(); */
-  };
-}
-
-static void cb_print_collate_button(Fl_Check_Button*, void*) {
-  int i = print_collate_button->value() != 0;
-  print_collate_group[i]->show();
-  print_collate_group[1 - i]->hide();
-}
-
-static void cb_Cancel(Fl_Button*, void*) {
-  print_start = 0;
-  print_panel->hide();
-}
-
-static void cb_print_properties_panel(Fl_Double_Window*, void*) {
-  print_properties_panel->hide();
-  print_update_status();
-}
-
-static const Fl_Menu_Item menu_print_page_size[] = {
-  {"Letter", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"A4", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"Legal", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"Executive", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"A3", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"A5", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"B5", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"Com10", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
-  {"DL", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
- {0,0,0,0,0,0,0,0,0}
-};
-
-#include <FL/Fl_Pixmap.H>
-static const char * const idata_print_color[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #FFFF00",
-"+\tc #C8FF00",
-"@\tc #00FF00",
-"#\tc #FFC800",
-"$\tc #FF0000",
-"%\tc #00FFFF",
-"&\tc #000000",
-"*\tc #FF00FF",
-"=\tc #00FFC8",
-"-\tc #FF00C8",
-";\tc #00C800",
-">\tc #C80000",
-",\tc #0000C8",
-"\'\tc #0000FF",
-")\tc #00C8FF",
-"!\tc #C800FF",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Pixmap image_print_color(idata_print_color);
-
-static const char * const idata_print_gray[] = {
-"24 24 17 1",
-" \tc None",
-".\tc #E3E3E3",
-"+\tc #D2D2D2",
-"@\tc #969696",
-"#\tc #C2C2C2",
-"$\tc #4C4C4C",
-"%\tc #B2B2B2",
-"&\tc #000000",
-"*\tc #696969",
-"=\tc #ACACAC",
-"-\tc #626262",
-";\tc #767676",
-">\tc #3C3C3C",
-",\tc #161616",
-"\'\tc #1C1C1C",
-")\tc #929292",
-"!\tc #585858",
-"         ......         ",
-"       ..........       ",
-"      ............      ",
-"     ..............     ",
-"     ..............     ",
-"    ................    ",
-"    ................    ",
-"    ................    ",
-"    +@@@@@@+#$$$$$$#    ",
-"   %@@@@@@@&&$$$$$$$*   ",
-"  %%@@@@@@&&&&$$$$$$**  ",
-" %%%=@@@@&&&&&&$$$$-*** ",
-" %%%%@@@;&&&&&&>$$$**** ",
-"%%%%%%@@&&&&&&&&$$******",
-"%%%%%%%@&&&&&&&&$*******",
-"%%%%%%%%,&&&&&&,********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-"%%%%%%%%\'\'\'\'\'\'\'\'********",
-" %%%%%%%)\'\'\'\'\'\'!******* ",
-" %%%%%%%%\'\'\'\'\'\'******** ",
-"  %%%%%%%%\'\'\'\'********  ",
-"   %%%%%%%%\'\'********   ",
-"     %%%%%%  ******     "
-};
-static Fl_Pixmap image_print_gray(idata_print_gray);
-
-static Fl_Button *print_output_mode[4]={(Fl_Button *)0};
-
-static void cb_Save(Fl_Return_Button*, void*) {
-  print_properties_panel->hide();
-
-  char name[1024];
-  int val;
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-  snprintf(name, sizeof(name), "%s/page_size", printer == NULL ? "" : printer);
-  print_prefs.set(name, print_page_size->value());
-
-  snprintf(name, sizeof(name), "%s/output_mode", printer == NULL ? "" : printer);
-  for (val = 0; val < 4; val ++) {
-    if (print_output_mode[val]->value()) break;
-  }
-  print_prefs.set(name, val);
-}
-
-static void cb_Cancel1(Fl_Button*, void*) {
-  print_properties_panel->hide();
-  print_update_status();
-}
-
-static void cb_Use(Fl_Button*, void*) {
-  print_properties_panel->hide();
-}
-
-Fl_Double_Window* make_print_panel() {
-  { print_panel = new Fl_Double_Window(465, 235, Fl_Printer::dialog_title);
-    { print_panel_controls = new Fl_Group(10, 10, 447, 216);
-      { print_choice = new Fl_Choice(133, 10, 181, 25, Fl_Printer::dialog_printer);
-        print_choice->down_box(FL_BORDER_BOX);
-        print_choice->labelfont(1);
-        print_choice->callback((Fl_Callback*)cb_print_choice);
-        print_choice->when(FL_WHEN_CHANGED);
-      } // Fl_Choice* print_choice
-      { print_properties = new Fl_Button(314, 10, 115, 25, Fl_Printer::dialog_properties);
-        print_properties->callback((Fl_Callback*)cb_print_properties);
-      } // Fl_Button* print_properties
-      { print_status = new Fl_Box(0, 41, print_panel_controls->w(), 17, "printer/job status");
-        print_status->align(Fl_Align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE|FL_ALIGN_LEFT));
-      } // Fl_Box* print_status
-      { Fl_Group* o = new Fl_Group(10, 86, 227, 105, Fl_Printer::dialog_range);
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_all = new Fl_Round_Button(20, 96, 38, 25, Fl_Printer::dialog_all);
-          print_all->type(102);
-          print_all->down_box(FL_ROUND_DOWN_BOX);
-          print_all->value(1);
-          print_all->callback((Fl_Callback*)cb_print_all);
-        } // Fl_Round_Button* print_all
-        { print_pages = new Fl_Round_Button(20, 126, 64, 25, Fl_Printer::dialog_pages);
-          print_pages->type(102);
-          print_pages->down_box(FL_ROUND_DOWN_BOX);
-          print_pages->callback((Fl_Callback*)cb_print_pages);
-        } // Fl_Round_Button* print_pages
-        { print_selection = new Fl_Round_Button(20, 156, 82, 25, "Selection");
-          print_selection->type(102);
-          print_selection->down_box(FL_ROUND_DOWN_BOX);
-          print_selection->callback((Fl_Callback*)cb_print_selection);
-        } // Fl_Round_Button* print_selection
-        { print_from = new Fl_Int_Input(136, 126, 28, 25, Fl_Printer::dialog_from);
-          print_from->type(2);
-          print_from->textfont(4);
-          print_from->deactivate();
-        } // Fl_Int_Input* print_from
-        { print_to = new Fl_Int_Input(199, 126, 28, 25, Fl_Printer::dialog_to);
-          print_to->type(2);
-          print_to->textfont(4);
-          print_to->deactivate();
-        } // Fl_Int_Input* print_to
-        o->end();
-      } // Fl_Group* o
-      { Fl_Group* o = new Fl_Group(247, 86, 210, 105, Fl_Printer::dialog_copies);
-        o->box(FL_THIN_DOWN_BOX);
-        o->labelfont(1);
-        o->align(Fl_Align(FL_ALIGN_TOP_LEFT));
-        { print_copies = new Fl_Spinner(321, 96, 45, 25, Fl_Printer::dialog_copyNo);
-          print_copies->callback((Fl_Callback*)cb_print_copies);
-          print_copies->when(FL_WHEN_CHANGED);
-        } // Fl_Spinner* print_copies
-        { print_collate_button = new Fl_Check_Button(376, 96, 64, 25, "Collate");
-          print_collate_button->down_box(FL_DOWN_BOX);
-          print_collate_button->callback((Fl_Callback*)cb_print_collate_button);
-          print_collate_button->when(FL_WHEN_CHANGED);
-          print_collate_button->deactivate();
-        } // Fl_Check_Button* print_collate_button
-        { print_collate_group[0] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[0]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-            o->deactivate();
-          } // Fl_Box* o
-          print_collate_group[0]->end();
-        } // Fl_Group* print_collate_group[0]
-        { print_collate_group[1] = new Fl_Group(257, 131, 191, 50);
-          print_collate_group[1]->hide();
-          print_collate_group[1]->deactivate();
-          { Fl_Box* o = new Fl_Box(287, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(272, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(257, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(352, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(337, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(322, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(417, 141, 30, 40, "3");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(402, 136, 30, 40, "2");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          { Fl_Box* o = new Fl_Box(387, 131, 30, 40, "1");
-            o->box(FL_BORDER_BOX);
-            o->color(FL_BACKGROUND2_COLOR);
-            o->labelsize(11);
-            o->align(Fl_Align(FL_ALIGN_BOTTOM_RIGHT|FL_ALIGN_INSIDE));
-          } // Fl_Box* o
-          print_collate_group[1]->end();
-        } // Fl_Group* print_collate_group[1]
-        o->end();
-      } // Fl_Group* o
-      { Fl_Return_Button* o = new Fl_Return_Button(279, 201, 100, 25, Fl_Printer::dialog_print_button);
-        o->callback((Fl_Callback*)print_cb);
-      } // Fl_Return_Button* o
-      { Fl_Button* o = new Fl_Button(389, 201, 68, 25, Fl_Printer::dialog_cancel_button);
-        o->callback((Fl_Callback*)cb_Cancel);
-      } // Fl_Button* o
-      print_panel_controls->end();
-    } // Fl_Group* print_panel_controls
-    { print_progress = new Fl_Progress(10, 203, 289, 21);
-      print_progress->selection_color((Fl_Color)4);
-      print_progress->hide();
-    } // Fl_Progress* print_progress
-    print_panel->set_modal();
-    print_panel->end();
-  } // Fl_Double_Window* print_panel
-  { print_properties_panel = new Fl_Double_Window(290, 130, Fl_Printer::property_title);
-    print_properties_panel->callback((Fl_Callback*)cb_print_properties_panel);
-    { print_page_size = new Fl_Choice(150, 10, 80, 25, Fl_Printer::property_pagesize);
-      print_page_size->down_box(FL_BORDER_BOX);
-      print_page_size->labelfont(FL_HELVETICA);
-      print_page_size->menu(menu_print_page_size);
-    } // Fl_Choice* print_page_size
-    { Fl_Group* o = new Fl_Group(110, 45, 170, 40, Fl_Printer::property_mode);
-      o->labelfont(FL_HELVETICA);
-      o->align(Fl_Align(FL_ALIGN_LEFT));
-      { print_output_mode[0] = new Fl_Button(110, 45, 30, 40);
-        print_output_mode[0]->type(102);
-        print_output_mode[0]->box(FL_BORDER_BOX);
-        print_output_mode[0]->down_box(FL_BORDER_BOX);
-        print_output_mode[0]->value(1);
-        print_output_mode[0]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[0]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[0]->image(image_print_color);
-      } // Fl_Button* print_output_mode[0]
-      { print_output_mode[1] = new Fl_Button(150, 50, 40, 30);
-        print_output_mode[1]->type(102);
-        print_output_mode[1]->box(FL_BORDER_BOX);
-        print_output_mode[1]->down_box(FL_BORDER_BOX);
-        print_output_mode[1]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[1]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[1]->image(image_print_color);
-      } // Fl_Button* print_output_mode[1]
-      { print_output_mode[2] = new Fl_Button(200, 45, 30, 40);
-        print_output_mode[2]->type(102);
-        print_output_mode[2]->box(FL_BORDER_BOX);
-        print_output_mode[2]->down_box(FL_BORDER_BOX);
-        print_output_mode[2]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[2]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[2]->image(image_print_gray);
-      } // Fl_Button* print_output_mode[2]
-      { print_output_mode[3] = new Fl_Button(240, 50, 40, 30);
-        print_output_mode[3]->type(102);
-        print_output_mode[3]->box(FL_BORDER_BOX);
-        print_output_mode[3]->down_box(FL_BORDER_BOX);
-        print_output_mode[3]->color(FL_BACKGROUND2_COLOR);
-        print_output_mode[3]->selection_color(FL_FOREGROUND_COLOR);
-        print_output_mode[3]->image(image_print_gray);
-      } // Fl_Button* print_output_mode[3]
-      o->end();
-    } // Fl_Group* o
-    { Fl_Return_Button* o = new Fl_Return_Button(93, 95, 99, 25, Fl_Printer::property_save);
-      o->callback((Fl_Callback*)cb_Save);
-    } // Fl_Return_Button* o
-    { Fl_Button* o = new Fl_Button(202, 95, 78, 25, Fl_Printer::property_cancel);
-      o->callback((Fl_Callback*)cb_Cancel1);
-    } // Fl_Button* o
-    { Fl_Button* o = new Fl_Button(10, 95, 73, 25, Fl_Printer::property_use);
-      o->callback((Fl_Callback*)cb_Use);
-    } // Fl_Button* o
-    print_properties_panel->set_modal();
-    print_properties_panel->end();
-  } // Fl_Double_Window* print_properties_panel
-  return print_properties_panel;
-}
-
-void print_cb(Fl_Return_Button *, void *) {
-  print_start = 1;
-  print_panel->hide();
-}
-
-printing_style print_load() { // return whether SystemV or BSD printing style is used
-  FILE *lpstat;
-  char line[1024], name[1024], *nptr, qname[2048], *qptr, defname[1024], *p;
-  int i;
-  printing_style style = SystemV;
-
-  if (print_choice->size() > 1) {
-    for (i = 1; print_choice->text(i); i ++) {
-      free(print_choice->menu()[i].user_data());
-    }
-  }
-
-  print_choice->clear();
-  print_choice->add(Fl_Printer::dialog_print_to_file, 0, 0, 0, FL_MENU_DIVIDER);
-  print_choice->value(0);
-  
-  print_start = 0;
-
-  defname[0] = '\0';
-// get names of all printers and of default one
-  if ((lpstat = popen("LC_MESSAGES=C LANG=C /bin/sh -c '(lpstat -p -d ) 2>&-'", "r")) != NULL) { // try first with SystemV printing system
-    while (fgets(line, sizeof(line), lpstat)) {
-      if (!strncmp(line, "printer ", 8) &&
-          sscanf(line + 8, "%s", name) == 1) {
-        for (nptr = name, qptr = qname; *nptr; *qptr++ = *nptr++) {
-          if (*nptr == '/') *qptr++ = '\\';
-        }
-        *qptr = '\0';
-
-        print_choice->add(qname, 0, 0, (void *)strdup(name), 0);
-      } else if (!strncmp(line, "system default destination: ", 28)) {
-        if (sscanf(line + 28, "%s", defname) != 1) defname[0] = '\0';
-      }
-    }
-    pclose(lpstat);
-  }
-  
-  if (print_choice->size() == 2 && (lpstat = fopen("/etc/printcap", "r"))) { // try next with BSD printing system
-    while (fgets(line, sizeof(line),lpstat)) { // get names of all known printers
-      if (*line == '#' || (p = strchr(line, '|')) == NULL) continue;
-      *p = 0;
-      print_choice->add(line, 0, 0, (void *)strdup(line), 0);
-      style = BSD;
-      *p = '|';
-      while (1) {
-        p = line + strlen(line) - 1;
-        if (*p == '\n' && p > line) p--;
-        if (*p != '\\') break;
-        if (fgets(line, sizeof(line),lpstat)==0) { /* ignore */ }
-      }
-    }
-    fclose(lpstat);
-    p = getenv("PRINTER"); // get name of default printer
-    if (p == NULL) p = (char*)"lp";
-    strcpy(defname, p);
-  }
-
-  if (print_choice->size() > 2) print_choice->value(1);
-  if (defname[0]) { // select default printer in menu
-    for (i = 1; print_choice->text(i); i ++) {
-      if (!strcmp((char *)print_choice->menu()[i].user_data(), defname)) {
-        print_choice->value(i);
-        break;
-      }
-    }
-  }
-
-  print_update_status();
-  return style;
-} // print_load()
-
-void print_update_status() {
-  FILE *lpstat;
-  char command[1024];
-  static char status[1024];
-  const char *printer = (const char *)print_choice->menu()[print_choice->value()].user_data();
-
-  status[0] = 0;
-  if (print_choice->value()) {
-    strcpy(status, "printer status unavailable");
-    snprintf(command, sizeof(command), "/bin/sh -c \"(lpstat -p '%s' ) 2>&-\" ", printer); // try first with SystemV printing system
-    if ((lpstat = popen(command, "r")) !=  NULL) {
-      if (fgets(status, sizeof(status), lpstat) == 0) { // if no reply
-        pclose(lpstat);
-        snprintf(command, sizeof(command), "lpq -P%s 2>&-", printer); // try next with BSD printing system
-        if ((lpstat = popen(command, "r")) !=  NULL) {
-          if (fgets(status, sizeof(status), lpstat)==0) { /* ignore */ }
-        }
-      }
-    pclose(lpstat);
-    }
-  }
-  print_status->label(status);
-
-  char name[1024];
-  int val;
-
-  snprintf(name, sizeof(name), "%s/page_size", printer == NULL ? "" : printer);
-  print_prefs.get(name, val, 1);
-  print_page_size->value(val);
-
-  snprintf(name, sizeof(name), "%s/output_mode", printer == NULL ? "" : printer);
-  print_prefs.get(name, val, 0);
-  print_output_mode[val]->setonly();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/print_panel.h
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Print panel for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// This is a temporary file.  It is only for development and will
-// probably be removed later.
-//
-
-#ifndef print_panel_h
-#define print_panel_h
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Spinner.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Progress.H>
-enum printing_style {SystemV, BSD};
-static Fl_Double_Window* make_print_panel();
-static void print_cb(Fl_Return_Button *, void *); 
-static printing_style print_load();
-static void print_update_status();
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/ps_image.cxx
+++ /dev/null
@@ -1,676 +1,0 @@
-//
-// "$Id: image.cxx 4324 2005-05-09 21:47:22Z rokan $"
-//
-// Postscript image drawing implementation for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef FL_DOXYGEN
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-#include <FL/Fl_PostScript.H>
-#include <FL/Fl.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Bitmap.H>
-
-
-//
-// Implementation of the /ASCII85Encode PostScript filter
-// as described in "PostScript LANGUAGE REFERENCE third edition" p. 131
-//
-struct struct85 {
-  uchar bytes4[4]; // holds up to 4 input bytes
-  int l4;          // # of unencoded input bytes
-  int blocks;      // counter to insert newlines after 80 output characters
-  uchar chars5[5]; // holds 5 output characters
-};
-
-
-void *Fl_PostScript_Graphics_Driver::prepare85() // prepare to produce ASCII85-encoded output
-{
-  struct85 *big = new struct85;
-  big->l4 = 0;
-  big->blocks = 0;
-  return big;
-}
-
-// ASCII85-encodes 4 input bytes from bytes4 into chars5 array
-// returns # of output chars
-static int convert85(const uchar *bytes4, uchar *chars5)
-{
-  if (bytes4[0] == 0 && bytes4[1] == 0 && bytes4[2] == 0 && bytes4[3] == 0) {
-    chars5[0] = 'z';
-    return 1;
-  }
-  unsigned val = bytes4[0]*(256*256*256) + bytes4[1]*(256*256) + bytes4[2]*256 + bytes4[3];
-  chars5[0] = val / 52200625 + 33; // 52200625 = 85 to the 4th
-  val = val % 52200625;
-  chars5[1] = val / 614125 + 33;   // 614125 = 85 cube
-  val = val % 614125;
-  chars5[2] = val / 7225 + 33;     // 7225 = 85 squared
-  val = val % 7225;
-  chars5[3] = val / 85 + 33;
-  chars5[4] = val % 85 + 33;
-  return 5;
-}
-
-
-void Fl_PostScript_Graphics_Driver::write85(void *data, const uchar *p, int len) // sends len input bytes for ASCII85 encoding
-{
-  struct85 *big = (struct85 *)data;
-  const uchar *last = p + len;
-  while (p < last) {
-    int c = 4 - big->l4;
-    if (last-p < c) c = last-p;
-    memcpy(big->bytes4 + big->l4, p, c);
-    p += c;
-    big->l4 += c;
-    if (big->l4 == 4) {
-      c = convert85(big->bytes4, big->chars5);
-      fwrite(big->chars5, c, 1, output);
-      big->l4 = 0;
-      if (++big->blocks >= 16) { fputc('\n', output); big->blocks = 0; }
-    }
-  }
-}
-
-
-void Fl_PostScript_Graphics_Driver::close85(void *data)  // stops ASCII85-encoding after processing remaining unencoded input bytes, if any
-{
-  struct85 *big = (struct85 *)data;
-  int l;
-  if (big->l4) { // # of remaining unencoded input bytes
-    l = big->l4;
-    while (l < 4) big->bytes4[l++] = 0; // complete them with 0s
-    l = convert85(big->bytes4, big->chars5); // encode them
-    if (l == 1) memset(big->chars5, '!', 5);
-    fwrite(big->chars5, big->l4 + 1, 1, output);
-  }
-  fputs("~>", output); // write EOD mark
-  delete big;
-}
-
-//
-// End of implementation of the /ASCII85Encode PostScript filter
-//
-
-//
-// Implementation of the /RunLengthEncode + /ASCII85Encode PostScript filter
-// as described in "PostScript LANGUAGE REFERENCE third edition" p. 142
-//
-
-struct struct_rle85 {
-  struct85 *data85;  // aux data for ASCII85 encoding
-  uchar buffer[128]; // holds non-run data
-  int count;  // current buffer length
-  int run_length; // current length of run
-};
-
-void *Fl_PostScript_Graphics_Driver::prepare_rle85() // prepare to produce RLE+ASCII85-encoded output
-{
-  struct_rle85 *rle = new struct_rle85;
-  rle->count = 0;
-  rle->run_length = 0;
-  rle->data85 = (struct85*)prepare85();
-  return rle;
-}
-
-
-void Fl_PostScript_Graphics_Driver::write_rle85(uchar b, void *data) // sends one input byte to RLE+ASCII85 encoding
-{
-  struct_rle85 *rle = (struct_rle85 *)data;
-  uchar c;
-  if (rle->run_length > 0) { // if within a run
-    if (b == rle->buffer[0] &&  rle->run_length < 128) { // the run can be extended
-      rle->run_length++;
-      return;
-    } else { // output the run
-      c = (uchar)(257 - rle->run_length);
-      write85(rle->data85, &c, 1); // the run-length info
-      write85(rle->data85, rle->buffer, 1); // the byte of the run
-      rle->run_length = 0;
-    }
-  }
-  if (rle->count >= 2 && b == rle->buffer[rle->count-1] && b == rle->buffer[rle->count-2]) {
-    // about to begin a run
-    if (rle->count > 2) { // there is non-run data before the run in the buffer
-      c = (uchar)(rle->count-2 - 1);
-      write85(rle->data85, &c, 1); // length of non-run data
-      write85(rle->data85, rle->buffer, rle->count-2); // non-run data
-    }
-    rle->run_length = 3;
-    rle->buffer[0] = b;
-    rle->count = 0;
-    return;
-  }
-  if (rle->count >= 128) { // the non-run buffer is full, output it
-    c = (uchar)(rle->count - 1);
-    write85(rle->data85, &c, 1); // length of non-run data
-    write85(rle->data85, rle->buffer, rle->count); // non-run data
-    rle->count = 0;
-  }
-  rle->buffer[rle->count++] = b; // add byte to end of non-run buffer
-}
-
-
-void Fl_PostScript_Graphics_Driver::close_rle85(void *data) // stop doing RLE+ASCII85 encoding
-{
-  struct_rle85 *rle = (struct_rle85 *)data;
-  uchar c;
-  if (rle->run_length > 0) { // if within a run, output it
-    c = (uchar)(257 - rle->run_length);
-    write85(rle->data85, &c, 1);
-    write85(rle->data85, rle->buffer, 1);
-  } else if (rle->count) { // output the non-run buffer, if not empty
-    c = (uchar)(rle->count - 1);
-    write85(rle->data85, &c, 1);
-    write85(rle->data85, rle->buffer, rle->count);
-  }
-  c = (uchar)128;
-  write85(rle->data85, &c, 1); // output EOD mark
-  close85(rle->data85); // close ASCII85 encoding process
-  delete rle;
-}
-
-//
-// End of implementation of the /RunLengthEncode + /ASCII85Encode PostScript filter
-//
-
- 
-int Fl_PostScript_Graphics_Driver::alpha_mask(const uchar * data, int w, int h, int D, int LD){
-
-  mask = 0;
-  if ((D/2)*2 != D){ //no mask info
-    return 0;
-  }
-  int xx;
-  int i,j, k, l;
-  LD += w*D;
-  int V255=0;
-  int V0 =0;
-  int V_=0;
-  for (j=0;j<h;j++){
-    for (i=0;i<w;i++)
-      switch(data[j*LD+D*i+D-1]){
-        case 255: V255 = 1; break;
-        case 0: V0 = 1; break;
-        default: V_= 1;
-      }
-    if (V_) break;
-  };
-  if (!V_){
-    if (V0)
-      if (V255){// not true alpha, only masking
-        xx = (w+7)/8;
-        mask = new uchar[h * xx];
-        for (i=0;i<h * xx;i++) mask[i]=0;
-        for (j=0;j<h;j++)
-          for (i=0;i<w;i++)
-            if (data[j*LD+D*i+D-1])
-              mask[j*xx+i/8] |= 1 << (i % 8);
-        mx = w;
-        my = h; //mask imensions
-        return 0;
-      } else {
-        mask=0;
-        return 1; //everything masked
-      }
-    else
-      return 0;
-  }
-
-
-
-  /////   Alpha dither, generating (4*w) * 4 mask area       /////
-  /////         with Floyd-Steinberg error diffusion         /////
-
-  mask = new uchar[((w+1)/2) * h * 4];
-
-  for (i = 0; i<((w+1)/2) * h * 4; i++) mask[i] = 0; //cleaning
-
-
-
-  mx= w*4;
-  my=h*4; // mask dimensions
-
-  xx = (w+1)/2;                //  mask line width in bytes
-
-  short * errors1 = new short [w*4+2]; //  two rows of dither errors
-  short * errors2 = new short [w*4+2]; //  two rows of dither errors
-
-  for (i=0; i<w*4+2; i++) errors2[i] = 0; // cleaning,after first swap will become current
-  for (i=0; i<w*4+2; i++) errors1[i] = 0; // cleaning,after first swap will become current
-
-  short * current = errors1;
-  short * next = errors2;
-  short * swap;
-
-  for (j=0; j<h; j++){
-    for (l=0; l<4; ){           // generating 4 rows of mask lines for 1 RGB line
-      int jj = j*4+l;
-
-      /// mask row index
-      swap = next;
-      next = current;
-      current = swap;
-      *(next+1) = 0;          // must clean the first cell, next are overriden by *1
-      for (i=0; i<w; i++){
-        for (k=0; k<4; k++){   // generating 4 x-pixels for 1 RGB
-          short error, o1, o2, o3;
-          int ii = i*4+k;   // mask cell index
-          short val = data[j*LD+D*i+D-1] + current[1+ii];
-          if (val>127){
-            mask[jj*xx+ii/8]  |= 1 << (ii % 8); //set mask bit
-            error =  val-255;
-          }else
-            error = val;
-
-          ////// error spreading /////
-          if (error >0){
-            next[ii] +=  o1 = (error * 3 + 8)/16;
-            current[ii+2] += o2 = (error * 7 + 8)/16;
-            next[ii+2] = o3 =(error + 8)/16;  // *1 - ok replacing (cleaning)
-          } else {
-            next[ii] += o1 = (error * 3 - 8)/16;
-            current[ii+2] += o2 = (error * 7 - 8)/16;
-            next[ii+2] = o3 = (error - 8)/16;
-          }
-          next[1+ii] += error - o1 - o2 - o3;
-        }
-      }
-      l++;
-
-      ////// backward
-
-      jj = j*4+l;
-      swap = next;
-      next = current;
-      current = swap;
-      *(next+1) = 0;          // must clean the first cell, next are overriden by *1
-
-      for (i = w-1; i >= 0; i--){
-
-        for (k=3; k>=0; k--){   // generating 4 x-pixels for 1 RGB
-          short error, o1, o2, o3;
-
-          int ii = i*4+k;   // mask cell index
-          short val = data[j*LD+D*i+D-1] + current[1+ii];
-          if (val>127){
-
-            mask[jj*xx+ii/8]  |= 1 << (ii % 8); //set mask bit
-            error =  val-255;
-          } else
-            error = val;
-
-          ////// error spreading /////
-          if (error >0){
-            next[ii+2] +=  o1 = (error * 3 + 8)/16;
-            current[ii] += o2 = (error * 7 + 8)/16;
-            next[ii] = o3 =(error + 8)/16;  // *1 - ok replacing (cleaning)
-          } else {
-            next[ii+2] += o1 = (error * 3 - 8)/16;
-
-            current[ii] += o2 = (error * 7 - 8)/16;
-            next[ii] = o3 = (error - 8)/16;
-          }
-          next[1+ii] += error - o1 - o2 - o3;
-        }
-      }
-      l++;
-    }
-  }
-  delete[] errors1;
-  delete[] errors2;
-  return 0;
-}
-
-// bitwise inversion of all 4-bit quantities
-static const unsigned char swapped[16] = {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15};
-
-// bitwise inversion of a byte
-static inline uchar swap_byte(const uchar b) {
-  return (swapped[b & 0xF] << 4) | swapped[b >> 4];
-}
-
-
-extern uchar **fl_mask_bitmap;
-
-struct callback_data {
-  const uchar *data;
-  int D, LD;
-};
-
-
-static void draw_image_cb(void *data, int x, int y, int w, uchar *buf) {
-  struct callback_data *cb_data;
-  const uchar *curdata;
-
-  cb_data = (struct callback_data*)data;
-  curdata = cb_data->data + x*cb_data->D + y*cb_data->LD;
-
-  memcpy(buf, curdata, w*cb_data->D);
-}
-
-
-void Fl_PostScript_Graphics_Driver::draw_image(const uchar *data, int ix, int iy, int iw, int ih, int D, int LD) {
-  if (D<3){ //mono
-    draw_image_mono(data, ix, iy, iw, ih, D, LD);
-    return;
-  }
-
-  struct callback_data cb_data;
-
-  if (!LD) LD = iw*D;
-
-  cb_data.data = data;
-  cb_data.D = D;
-  cb_data.LD = LD;
-
-  draw_image(draw_image_cb, &cb_data, ix, iy, iw, ih, D);
-}
-
-void Fl_PostScript_Graphics_Driver::draw_image(Fl_Draw_Image_Cb call, void *data, int ix, int iy, int iw, int ih, int D) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  int level2_mask = 0;
-  fprintf(output,"save\n");
-  int i,j,k;
-  const char * interpol;
-  if (lang_level_ > 1) {
-    if (interpolate_) interpol="true";
-    else interpol="false";
-    if (mask && lang_level_ > 2) {
-      fprintf(output, "%g %g %g %g %i %i %i %i %s CIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    }
-    else if (mask && lang_level_ == 2) {
-      level2_mask = 1; // use method for drawing masked color image with PostScript level 2
-      fprintf(output, " %g %g %g %g %d %d pixmap_plot\n", x, y, w, h, iw, ih);
-    }
-    else {
-      fprintf(output, "%g %g %g %g %i %i %s CII\n", x , y+h , w , -h , iw , ih, interpol);
-    }
-  } else {
-    fprintf(output , "%g %g %g %g %i %i CI", x , y+h , w , -h , iw , ih);
-  }
-  
-  int LD=iw*D;
-  uchar *rgbdata=new uchar[LD];
-  uchar *curmask=mask;
-  void *big = prepare_rle85();
-  
-  if (level2_mask) {
-    for (j = ih - 1; j >= 0; j--) { // output full image data
-      call(data, 0, j, iw, rgbdata);
-      uchar *curdata = rgbdata;
-      for (i=0 ; i<iw ; i++) {
-        write_rle85(curdata[0], big); write_rle85(curdata[1], big); write_rle85(curdata[2], big);
-        curdata += D;
-      }
-    }
-    close_rle85(big); fputc('\n', output);
-    big = prepare_rle85();
-    for (j = ih - 1; j >= 0; j--) { // output mask data
-      curmask = mask + j * (my/ih) * ((mx+7)/8);
-      for (k=0; k < my/ih; k++) {
-        for (i=0; i < ((mx+7)/8); i++) {
-          write_rle85(swap_byte(*curmask), big);
-          curmask++;
-        }
-      }
-    }
-  }
-  else {
-    for (j=0; j<ih;j++) {
-      if (mask && lang_level_ > 2) {  // InterleaveType 2 mask data
-        for (k=0; k<my/ih;k++) { //for alpha pseudo-masking
-          for (i=0; i<((mx+7)/8);i++) {
-            write_rle85(swap_byte(*curmask), big);
-            curmask++;
-          }
-        }
-      }
-      call(data,0,j,iw,rgbdata);
-      uchar *curdata=rgbdata;
-      for (i=0 ; i<iw ; i++) {
-        uchar r = curdata[0];
-        uchar g =  curdata[1];
-        uchar b =  curdata[2];
-        
-        if (lang_level_<3 && D>3) { //can do  mixing using bg_* colors)
-          unsigned int a2 = curdata[3]; //must be int
-          unsigned int a = 255-a2;
-          r = (a2 * r + bg_r * a)/255;
-          g = (a2 * g + bg_g * a)/255;
-          b = (a2 * b + bg_b * a)/255;
-        }
-        
-        write_rle85(r, big); write_rle85(g, big); write_rle85(b, big);
-        curdata +=D;
-      }
-      
-    }
-  }
-  close_rle85(big);
-  fprintf(output,"\nrestore\n");
-  delete[] rgbdata;
-}
-
-void Fl_PostScript_Graphics_Driver::draw_image_mono(const uchar *data, int ix, int iy, int iw, int ih, int D, int LD) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  fprintf(output,"save\n");
-
-  int i,j, k;
-
-  const char * interpol;
-  if (lang_level_>1){
-    if (interpolate_)
-      interpol="true";
-    else
-      interpol="false";
-    if (mask && lang_level_>2)
-      fprintf(output, "%g %g %g %g %i %i %i %i %s GIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    else
-      fprintf(output, "%g %g %g %g %i %i %s GII\n", x , y+h , w , -h , iw , ih, interpol);
-  }else
-    fprintf(output , "%g %g %g %g %i %i GI", x , y+h , w , -h , iw , ih);
-
-
-  if (!LD) LD = iw*D;
-
-
-  int bg = (bg_r + bg_g + bg_b)/3;
-
-  uchar *curmask=mask;
-  void *big = prepare_rle85();
-  for (j=0; j<ih;j++){
-    if (mask){
-      for (k=0;k<my/ih;k++){
-        for (i=0; i<((mx+7)/8);i++){
-          write_rle85(swap_byte(*curmask), big);
-          curmask++;
-        }
-      }
-    }
-    const uchar *curdata=data+j*LD;
-    for (i=0 ; i<iw ; i++) {
-      uchar r = curdata[0];
-      if (lang_level_<3 && D>1) { //can do  mixing
-
-        unsigned int a2 = curdata[1]; //must be int
-        unsigned int a = 255-a2;
-        r = (a2 * r + bg * a)/255;
-      }
-      write_rle85(r, big);
-      curdata +=D;
-    }
-
-  }
-  close_rle85(big);
-  fprintf(output,"restore\n");
-}
-
-
-
-void Fl_PostScript_Graphics_Driver::draw_image_mono(Fl_Draw_Image_Cb call, void *data, int ix, int iy, int iw, int ih, int D) {
-  double x = ix, y = iy, w = iw, h = ih;
-
-  fprintf(output,"save\n");
-  int i,j,k;
-  const char * interpol;
-  if (lang_level_>1){
-    if (interpolate_) interpol="true";
-    else interpol="false";
-    if (mask && lang_level_>2)
-      fprintf(output, "%g %g %g %g %i %i %i %i %s GIM\n", x , y+h , w , -h , iw , ih, mx, my, interpol);
-    else
-      fprintf(output, "%g %g %g %g %i %i %s GII\n", x , y+h , w , -h , iw , ih, interpol);
-  } else
-    fprintf(output , "%g %g %g %g %i %i GI", x , y+h , w , -h , iw , ih);
-
-  int LD=iw*D;
-  uchar *rgbdata=new uchar[LD];
-  uchar *curmask=mask;
-  void *big = prepare_rle85();
-  for (j=0; j<ih;j++){
-
-    if (mask && lang_level_>2){  // InterleaveType 2 mask data
-      for (k=0; k<my/ih;k++){ //for alpha pseudo-masking
-        for (i=0; i<((mx+7)/8);i++){
-          write_rle85(swap_byte(*curmask), big);
-          curmask++;
-        }
-      }
-    }
-    call(data,0,j,iw,rgbdata);
-    uchar *curdata=rgbdata;
-    for (i=0 ; i<iw ; i++) {
-      write_rle85(curdata[0], big);
-      curdata +=D;
-    }
-  }
-  close_rle85(big);
-  fprintf(output,"restore\n");
-  delete[] rgbdata;
-}
-
-
-////////////////////////////// Image classes //////////////////////
-
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_Pixmap * pxm,int XP, int YP, int WP, int HP, int cx, int cy){
-  const char * const * di =pxm->data();
-  int w,h;
-  if (!fl_measure_pixmap(di, w, h)) return;
-  mask=0;
-  fl_mask_bitmap=&mask;
-  mx = WP;
-  my = HP;
-  push_clip(XP, YP, WP, HP);
-  fl_draw_pixmap(di,XP -cx, YP -cy, FL_BLACK );
-  pop_clip();
-  delete[] mask;
-  mask=0;
-  fl_mask_bitmap=0;
-}
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_RGB_Image * rgb,int XP, int YP, int WP, int HP, int cx, int cy){
-  const uchar  * di = rgb->array;
-  int w = rgb->w();
-  int h = rgb->h();
-  mask=0;
-  if (lang_level_>2) //when not true, not making alphamask, mixing colors instead...
-  if (alpha_mask(di, w, h, rgb->d(),rgb->ld())) return; //everthing masked, no need for painting!
-  push_clip(XP, YP, WP, HP);
-  draw_image(di, XP + cx, YP + cy, w, h, rgb->d(), rgb->ld());
-  pop_clip();
-  delete[]mask;
-  mask=0;
-}
-
-int Fl_PostScript_Graphics_Driver::draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP){
-  int X, Y, W, H;
-  clip_box(XP,YP,WP,HP,X,Y,W,H); // X,Y,W,H will give the unclipped area of XP,YP,WP,HP
-  if (W == 0 || H == 0) return 1;
-  push_no_clip(); // remove the FLTK clip that can't be rescaled
-  clocale_printf("%d %d %i %i CL\n", X, Y, W, H);
-  clocale_printf("GS %d %d TR  %f %f SC GS\n", XP, YP, float(WP)/img->w(), float(HP)/img->h());
-  img->draw(0, 0, img->w(), img->h(), 0, 0);
-  clocale_printf("GR GR\n");
-  pop_clip(); // restore FLTK's clip
-  return 1;
-}
-
-void Fl_PostScript_Graphics_Driver::draw(Fl_Bitmap * bitmap,int XP, int YP, int WP, int HP, int cx, int cy){
-  const uchar  * di = bitmap->array;
-  int w,h;
-  int LD=(bitmap->w()+7)/8;
-  int xx;
-
-  if (WP> bitmap->w() - cx){// to assure that it does not go out of bounds;
-     w = bitmap->w() - cx;
-     xx = (bitmap->w()+7)/8 - cx/8; //length of mask in bytes
-  }else{
-    w =WP;
-    xx = (w+7)/8 - cx/8;
-  }
-  if ( HP > bitmap->h()-cy)
-    h = bitmap->h() - cy;
-  else
-    h = HP;
-
-  di += cy*LD + cx/8;
-  int si = cx % 8; // small shift to be clipped, it is simpler than shifting whole mask
-
-  int i,j;
-  push_clip(XP, YP, WP, HP);
-  fprintf(output , "%i %i %i %i %i %i MI\n", XP - si, YP + HP , WP , -HP , w , h);
-
-  void *rle85 = prepare_rle85();
-  for (j=0; j<HP; j++){
-    for (i=0; i<xx; i++){
-      write_rle85(swap_byte(*di), rle85);
-      di++;
-    }
-  }
-  close_rle85(rle85); fputc('\n', output);
-  pop_clip();
-}
-
-#endif // FL_DOXYGEN
-
-//
-// End of "$Id: image.cxx 4324 2005-05-09 21:47:22Z rokan $"
-//
-
-
-
-
-
-
-
-
-
-
-  
-
-
-
-
-
-
-
--- a/DoConfig/fltk/src/scandir.c
+++ /dev/null
@@ -1,35 +1,0 @@
-/*
- * "$Id$"
- *
- * This is a placekeeper stub that pulls in scandir implementations for host
- * systems that do not provide a compatible one natively
- *
- * Copyright 1998-2013 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include "scandir_win32.c"
-#else
-#  include <config.h>
-#  ifndef HAVE_SCANDIR
-#   include "scandir_posix.c"
-#  endif /* HAVE_SCANDIR */
-#endif
-
-/* Avoid "ISO C forbids an empty translation unit" warning */
-typedef int dummy;
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/scandir_posix.c
+++ /dev/null
@@ -1,205 +1,0 @@
-/*
- * "$Id$"
- *
- * This implementation of 'scandir()' is intended to be POSIX.1-2008 compliant.
- * A POSIX.1-1990 compliant system is required as minimum base.
- * Note:
- * The 'const' declarations were removed to match FLTK 1.3 wrapper (STR #2931)
- *
- * Copyright (c) 2013 by Michael Baeuerle
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- *
- * It is required that 'SIZE_MAX' is at least 'INT_MAX'.
- * Don't use a C++ compiler to build this module.
- *
- * The build system must define 'HAVE_PTHREAD' and link against a potentially
- * required library to switch this implementation into thread-safe mode.
- * The POSIX.1c-1995 extension is required if 'HAVE_PTHREAD' is defined.
- *
- * Note:
- * In theory, a system that provide threads should also provide 'readdir_r()',
- * a thread-safe version of 'readdir()'. In reality this is not always the case.
- * In addition there may be a race condition that can lead to a buffer overflow:
- * http://womble.decadent.org.uk/readdir_r-advisory.html
- */
-
-#ifndef HAVE_PTHREAD
-   /* Switch system headers into POSIX.1-1990 mode */
-#  define _POSIX_SOURCE
-#else  /* HAVE_PTHREAD */
-   /* Switch system headers into POSIX.1c-1995 mode */
-#  define _POSIX_C_SOURCE  199506L
-#endif  /* HAVE_PTHREAD */
-
-#include <sys/types.h>        /* XPG2 require this for '*dir()' functions */
-#include <dirent.h>
-#include <errno.h>
-#include <stdlib.h>           /* For 'malloc()', 'realloc()' and 'qsort()' */
-#include <stddef.h>           /* For 'offsetof()', 'NULL' and 'size_t' */
-#include <limits.h>           /* For 'INT_MAX' */
-#include <string.h>           /* For 'memcpy()' */
-#if defined(HAVE_PTHREAD) && defined(HAVE_PTHREAD_H)
-#  include <pthread.h>
-#endif  /* HAVE_PTHREAD */
-
-
-/* ========================================================================== */
-/* At startup allocate memory for this number of result array elements */
-#define ENTRIES_MIN  (size_t) 32
-
-
-/* ========================================================================== */
-#ifdef HAVE_PTHREAD
-static pthread_mutex_t scandir_mutex = PTHREAD_MUTEX_INITIALIZER;
-#endif  /* HAVE_PTHREAD */
-
-
-/* ========================================================================== */
-/*
- * This function reads the next entry from the directory referenced by 'dirp',
- * allocate a buffer for the entry and copy it into this buffer.
- * A pointer to this buffer is written to 'entryp' and the size of the buffer is
- * written to 'len'.
- * Success and a NULL pointer is returned for 'entryp' if there are no more
- * entries in the directory.
- * On sucess zero is returned and the caller is responsible for 'free()'ing the
- * buffer after use.
- * On error the return value is nonzero, 'entryp' and 'len' are invalid.
- *
- * Should be declared as 'static inline' if the compiler support that.
- */
-static int
-readentry(DIR *dirp, struct dirent **entryp, size_t *len)
-{
-  int result = -1;
-  struct dirent *e;
-
-#ifdef HAVE_PTHREAD
-  if (!pthread_mutex_lock(&scandir_mutex))
-  {
-    /* Ensure that there is no code path that bypass the '_unlock()' call! */
-#endif  /* HAVE_PTHREAD */
-    errno = 0;
-    e = readdir(dirp);
-    if (NULL == e)
-    {
-      if (!errno)
-      {
-        /* No more entries in directory */
-        *entryp = NULL;
-        *len = 0;
-        result = 0;
-      }
-    }
-    else
-    {
-      /* Entry found, allocate local buffer */
-      *len = offsetof(struct dirent, d_name) + strlen(e->d_name) + (size_t) 1;
-      *entryp = (struct dirent *) malloc(*len);
-      if (NULL != *entryp)
-      {
-        memcpy((void *) *entryp, (void *) e, *len);
-        /* Force NUL termination at end of buffer */
-        ((char *) *entryp)[*len - (size_t) 1] = 0;
-        result = 0;
-      }
-    }
-#ifdef HAVE_PTHREAD
-    /*
-     * In a multithreading environment the systems dirent buffer may be shared
-     * between all threads. Therefore the mutex must stay locked until we have
-     * copied the data to our thread local buffer.
-     */
-    pthread_mutex_unlock(&scandir_mutex);
-  }
-#endif  /* HAVE_PTHREAD */
-
-  return result;
-}
-
-
-/* ========================================================================== */
-int
-fl_scandir(const char *dir, struct dirent ***namelist,
-           int (*sel)(struct dirent *),
-           int (*compar)(struct dirent **, struct dirent **))
-{
-  int result = -1;
-  DIR *dirp;
-  size_t len, num = 0, max = ENTRIES_MIN;
-  struct dirent *entryp, **entries, **p;
-
-  entries = (struct dirent **) malloc(sizeof(*entries) * max);
-  if (NULL != entries)
-  {
-    /* Open directory 'dir' (and verify that it really is a directory) */
-    dirp = opendir(dir);
-    if (NULL != dirp)
-    {
-      /* Read next directory entry */
-      while (!readentry(dirp, &entryp, &len))
-      {
-        if (NULL == entryp)
-        {
-          /* EOD => Return number of directory entries */
-          result = (int) num;
-          break;
-        }
-        /* Apply select function if there is one provided */
-        if (NULL != sel)  { if (!sel(entryp))  continue; }
-        entries[num++] = entryp;
-        if (num >= max)
-        {
-          /* Allocate exponentially increasing sized memory chunks */
-          if (INT_MAX / 2 >= (int) max)  { max *= (size_t) 2; }
-          else
-          {
-            errno = ENOMEM;
-            break;
-          }
-          p = (struct dirent **) realloc((void *) entries,
-                                         sizeof(*entries) * max);
-          if (NULL != p)  { entries = p; }
-          else  break;
-        }
-      }
-      closedir(dirp);
-      /*
-       * A standard compliant 'closedir()' is allowed to fail with 'EINTR', but
-       * the state of the directory structure is undefined in this case.
-       * Therefore we ignore the return value because we can't call 'closedir()'
-       * again and must hope that the system has released all ressources.
-       */
-    }
-    /* Sort entries in array if there is a compare function provided */
-    if (NULL != compar)
-    {
-      qsort((void *) entries, num, sizeof(*entries),
-            (int (*)(const void *, const void *)) compar);
-    }
-    *namelist = entries;
-  }
-
-  /* Check for error */
-  if (-1 == result)
-  {
-    /* Free all memory we have allocated */
-    while (num--)  { free(entries[num]); }
-    free(entries);
-  }
-
-  return result;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/scandir_win32.c
+++ /dev/null
@@ -1,126 +1,0 @@
-/*
- * "$Id$"
- *
- * WIN32 scandir function for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#ifndef __CYGWIN__
-/* Emulation of posix scandir() call */
-#include <FL/fl_utf8.h>
-#include <FL/filename.H>
-#include "flstring.h"
-#include <windows.h>
-#include <stdlib.h>
-
-int fl_scandir(const char *dirname, struct dirent ***namelist,
-	       int (*select)(struct dirent *),
-	       int (*compar)(struct dirent **, struct dirent **)) {
-  int len;
-  char *findIn, *d, is_dir = 0;
-  WIN32_FIND_DATAW findw;
-  HANDLE h;
-  int nDir = 0, NDir = 0;
-  struct dirent **dir = 0, *selectDir;
-  unsigned long ret;
-
-  len    = (int) strlen(dirname);
-  findIn = (char *)malloc((size_t)(len+10));
-  if (!findIn) return -1;
-  strcpy(findIn, dirname);
-
-  /* #if defined(__GNUC__) */
-  /* #warning FIXME This probably needs to be MORE UTF8 aware now */
-  /* #endif */
-  for (d = findIn; *d; d++) if (*d=='/') *d='\\';
-  if (len==0) { strcpy(findIn, ".\\*"); }
-  if ((len==2)&&findIn[1]==':'&&isalpha(findIn[0])) { *d++ = '\\'; *d = 0; }
-  if ((len==1)&& (d[-1]=='.')) { strcpy(findIn, ".\\*"); is_dir = 1; }
-  if ((len>0) && (d[-1]=='\\')) { *d++ = '*'; *d = 0; is_dir = 1; }
-  if ((len>1) && (d[-1]=='.') && (d[-2]=='\\')) { d[-1] = '*'; is_dir = 1; }
-  if (!is_dir) { /* this file may still be a directory that we need to list */
-    DWORD attr = GetFileAttributes(findIn);
-    if (attr&FILE_ATTRIBUTE_DIRECTORY)
-      strcpy(d, "\\*");
-  }
-  { /* Create a block to limit the scope while we find the initial "wide" filename */
-     /* unsigned short * wbuf = (unsigned short*)malloc(sizeof(short) *(len + 10)); */
-     /* wbuf[fl_utf2unicode(findIn, strlen(findIn), wbuf)] = 0; */
-	unsigned short *wbuf = NULL;
-	unsigned wlen = fl_utf8toUtf16(findIn, (unsigned) strlen(findIn), NULL, 0); /* Pass NULL to query length */
-	wlen++; /* add a little extra for termination etc. */
-	wbuf = (unsigned short*)malloc(sizeof(unsigned short)*wlen);
-	wlen = fl_utf8toUtf16(findIn, (unsigned) strlen(findIn), wbuf, wlen); /* actually convert the filename */
-	wbuf[wlen] = 0; /* NULL terminate the resultant string */
-	h = FindFirstFileW(wbuf, &findw); /* get a handle to the first filename in the search */
-	free(wbuf); /* release the "wide" buffer before the pointer goes out of scope */
-  }
-  if (h==INVALID_HANDLE_VALUE) {
-    free(findIn);
-    ret = GetLastError();
-    if (ret != ERROR_NO_MORE_FILES) {
-      nDir = -1;
-    }
-    *namelist = dir;
-    return nDir;
-  }
-  do {
-	int l = (int) wcslen(findw.cFileName);
-	int dstlen = l * 5 + 1;
-	selectDir=(struct dirent*)malloc(sizeof(struct dirent)+dstlen);
-
-     /* l = fl_unicode2utf(findw.cFileName, l, selectDir->d_name); */
-	l = fl_utf8fromwc(selectDir->d_name, dstlen, findw.cFileName, l);
-
-	selectDir->d_name[l] = 0;
-	if (findw.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
-		/* Append a trailing slash to directory names... */
-		strcat(selectDir->d_name, "/");
-	}
-	if (!select || (*select)(selectDir)) {
-		if (nDir==NDir) {
-	struct dirent **tempDir = (struct dirent **)calloc(sizeof(struct dirent*), (size_t)(NDir+33));
-	if (NDir) memcpy(tempDir, dir, sizeof(struct dirent*)*NDir);
-	if (dir) free(dir);
-	dir = tempDir;
-	NDir += 32;
-		}
-		dir[nDir] = selectDir;
-		nDir++;
-		dir[nDir] = 0;
-	} else {
-		free(selectDir);
-	}
-   } while (FindNextFileW(h, &findw));
-  ret = GetLastError();
-  if (ret != ERROR_NO_MORE_FILES) {
-    /* don't return an error code, because the dir list may still be valid
-       up to this point */
-  }
-  FindClose(h);
-
-  free (findIn);
-
-  if (compar) qsort(dir, (size_t)nDir, sizeof(*dir),
-		    (int(*)(const void*, const void*))compar);
-
-  *namelist = dir;
-  return nDir;
-}
-
-#endif
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/screen_xywh.cxx
+++ /dev/null
@@ -1,461 +1,0 @@
-//
-// "$Id$"
-//
-// Screen/monitor bounding box API for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/x.H>
-#include <config.h>
-
-#define MAX_SCREENS 16
-
-// Number of screens returned by multi monitor aware API; -1 before init
-static int num_screens = -1;
-
-#ifdef WIN32
-#  if !defined(HMONITOR_DECLARED) && (_WIN32_WINNT < 0x0500)
-#    define COMPILE_MULTIMON_STUBS
-#    include <multimon.h>
-#  endif // !HMONITOR_DECLARED && _WIN32_WINNT < 0x0500
-
-// We go the much more difficult route of individually picking some multi-screen
-// functions from the USER32.DLL . If these functions are not available, we
-// will gracefully fall back to single monitor support.
-//
-// If we were to insist on the existence of "EnumDisplayMonitors" and
-// "GetMonitorInfoA", it would be impossible to use FLTK on Windows 2000
-// before SP2 or earlier.
-
-// BOOL EnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM)
-typedef BOOL (WINAPI* fl_edm_func)(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
-// BOOL GetMonitorInfo(HMONITOR, LPMONITORINFO)
-typedef BOOL (WINAPI* fl_gmi_func)(HMONITOR, LPMONITORINFO);
-
-static fl_gmi_func fl_gmi = NULL; // used to get a proc pointer for GetMonitorInfoA
-
-static RECT screens[16];
-static RECT work_area[16];
-static float dpi[16][2];
-
-static BOOL CALLBACK screen_cb(HMONITOR mon, HDC, LPRECT r, LPARAM) {
-  if (num_screens >= 16) return TRUE;
-
-  MONITORINFOEX mi;
-  mi.cbSize = sizeof(mi);
-
-//  GetMonitorInfo(mon, &mi);
-//  (but we use our self-acquired function pointer instead)
-  if (fl_gmi(mon, &mi)) {
-    screens[num_screens] = mi.rcMonitor;
-// If we also want to record the work area, we would also store mi.rcWork at this point
-    work_area[num_screens] = mi.rcWork;
-/*fl_alert("screen %d %d,%d,%d,%d work %d,%d,%d,%d",num_screens,
-	 screens[num_screens].left,screens[num_screens].right,screens[num_screens].top,screens[num_screens].bottom,
-    work_area[num_screens].left,work_area[num_screens].right,work_area[num_screens].top,work_area[num_screens].bottom);
-*/
-    // find the pixel size
-    if (mi.cbSize == sizeof(mi)) {
-      HDC screen = CreateDC(mi.szDevice, NULL, NULL, NULL);
-      if (screen) {
-        dpi[num_screens][0] = (float)GetDeviceCaps(screen, LOGPIXELSX);
-        dpi[num_screens][1] = (float)GetDeviceCaps(screen, LOGPIXELSY);
-      }
-      DeleteDC(screen);
-    }
-
-    num_screens ++;
-  }
-  return TRUE;
-}
-
-static void screen_init() {
-  // Since not all versions of Windows include multiple monitor support,
-  // we do a run-time check for the required functions...
-  HMODULE hMod = GetModuleHandle("USER32.DLL");
-
-  if (hMod) {
-    // check that EnumDisplayMonitors is available
-    fl_edm_func fl_edm = (fl_edm_func)GetProcAddress(hMod, "EnumDisplayMonitors");
-
-    if (fl_edm) {
-      // we have EnumDisplayMonitors - do we also have GetMonitorInfoA ?
-      fl_gmi = (fl_gmi_func)GetProcAddress(hMod, "GetMonitorInfoA");
-      if (fl_gmi) {
-        // We have GetMonitorInfoA, enumerate all the screens...
-//      EnumDisplayMonitors(0,0,screen_cb,0);
-//      (but we use our self-acquired function pointer instead)
-//      NOTE: num_screens is incremented in screen_cb so we must first reset it here...
-        num_screens = 0;
-        fl_edm(0, 0, screen_cb, 0);
-        return;
-      }
-    }
-  }
-
-  // If we get here, assume we have 1 monitor...
-  num_screens = 1;
-  screens[0].top      = 0;
-  screens[0].left      = 0;
-  screens[0].right  = GetSystemMetrics(SM_CXSCREEN);
-  screens[0].bottom = GetSystemMetrics(SM_CYSCREEN);
-  work_area[0] = screens[0];
-}
-#elif defined(__APPLE__)
-static XRectangle screens[16];
-static float dpi_h[16];
-static float dpi_v[16];
-
-static void screen_init() {
-  CGDirectDisplayID displays[16];
-  CGDisplayCount count, i;
-  CGRect r;
-  CGGetActiveDisplayList(16, displays, &count);
-  for( i = 0; i < count; i++) {
-    r = CGDisplayBounds(displays[i]);
-    screens[i].x      = int(r.origin.x);
-    screens[i].y      = int(r.origin.y);
-    screens[i].width  = int(r.size.width);
-    screens[i].height = int(r.size.height);
-//fprintf(stderr,"screen %d %dx%dx%dx%d\n",i,screens[i].x,screens[i].y,screens[i].width,screens[i].height);
-    if (&CGDisplayScreenSize != NULL) {
-      CGSize s = CGDisplayScreenSize(displays[i]); // from 10.3
-      dpi_h[i] = screens[i].width / (s.width/25.4);
-      dpi_v[i] = screens[i].height / (s.height/25.4);
-    } else {
-      dpi_h[i] = dpi_v[i] = 75.;
-    }
-  }
-  num_screens = count;
-}
-
-#else // X11
-
-#if HAVE_XINERAMA
-#  include <X11/extensions/Xinerama.h>
-#endif
-typedef struct {
-  short x_org;
-  short y_org;
-  short width;
-  short height;
-} FLScreenInfo;
-static FLScreenInfo screens[MAX_SCREENS];
-static float dpi[MAX_SCREENS][2];
-
-#define USE_XRANDR (HAVE_DLSYM && HAVE_DLFCN_H) // means attempt to dynamically load libXrandr.so
-#if USE_XRANDR
-#include <dlfcn.h>
-typedef struct {
-  int    width, height;
-  int    mwidth, mheight;
-} XRRScreenSize;
-typedef XRRScreenSize* (*XRRSizes_type)(Display *dpy, int screen, int *nsizes);
-#endif // USE_XRANDR
-
-static void screen_init() {
-  if (!fl_display) fl_open_display();
-
-  int dpi_by_randr = 0;
-  float dpih = 0.0f, dpiv = 0.0f;
-
-#if USE_XRANDR
-
-  static XRRSizes_type XRRSizes_f = NULL;
-  if (!XRRSizes_f) {
-    void *libxrandr_addr = dlopen("libXrandr.so.2", RTLD_LAZY);
-    if (!libxrandr_addr) libxrandr_addr = dlopen("libXrandr.so", RTLD_LAZY);
-#   ifdef __APPLE_CC__ // allows testing on Darwin + X11
-    if (!libxrandr_addr) libxrandr_addr = dlopen("/opt/X11/lib/libXrandr.dylib", RTLD_LAZY);
-#   endif
-    if (libxrandr_addr) XRRSizes_f = (XRRSizes_type)dlsym(libxrandr_addr, "XRRSizes");
-  }
-  if (XRRSizes_f) {
-    int nscreens;
-    XRRScreenSize *ssize = XRRSizes_f(fl_display, fl_screen, &nscreens);
-
-    //for (int i=0; i<nscreens; i++)
-    //  printf("width=%d height=%d mwidth=%d mheight=%d\n",
-    //         ssize[i].width,ssize[i].height,ssize[i].mwidth,ssize[i].mheight);
-
-    if (nscreens > 0) { // Note: XRRSizes() *may* return nscreens == 0, see docs
-      int mm = ssize[0].mwidth;
-      dpih = mm ? ssize[0].width*25.4f/mm : 0.0f;
-      mm = ssize[0].mheight;
-      dpiv = mm ? ssize[0].height*25.4f/mm : 0.0f;
-      dpi_by_randr = 1;
-    }
-  }
-
-#endif // USE_XRANDR
-
-#if HAVE_XINERAMA
-
-  if (XineramaIsActive(fl_display)) {
-    XineramaScreenInfo *xsi = XineramaQueryScreens(fl_display, &num_screens);
-    if (num_screens > MAX_SCREENS) num_screens = MAX_SCREENS;
-
-    /* There's no way to use different DPI for different Xinerama screens. */
-    for (int i=0; i<num_screens; i++) {
-      screens[i].x_org = xsi[i].x_org;
-      screens[i].y_org = xsi[i].y_org;
-      screens[i].width = xsi[i].width;
-      screens[i].height = xsi[i].height;
-
-      if (dpi_by_randr) {
-	dpi[i][0] = dpih;
-	dpi[i][1] = dpiv;
-      } else {
-        int mm = DisplayWidthMM(fl_display, fl_screen);
-        dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f;
-        mm = DisplayHeightMM(fl_display, fl_screen);
-        dpi[i][1] = mm ? screens[i].height*25.4f/mm : 0.0f;
-      }
-    }
-    if (xsi) XFree(xsi);
-  } else
-
-#endif // HAVE_XINERAMA
-
-  { // ! HAVE_XINERAMA || ! XineramaIsActive()
-    num_screens = ScreenCount(fl_display);
-    if (num_screens > MAX_SCREENS) num_screens = MAX_SCREENS;
-
-    for (int i=0; i<num_screens; i++) {
-      screens[i].x_org = 0;
-      screens[i].y_org = 0;
-      screens[i].width = DisplayWidth(fl_display, i);
-      screens[i].height = DisplayHeight(fl_display, i);
-
-      if (dpi_by_randr) {
-	dpi[i][0] = dpih;
-	dpi[i][1] = dpiv;
-      } else {
-	int mm = DisplayWidthMM(fl_display, i);
-	dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f;
-	mm = DisplayHeightMM(fl_display, fl_screen);
-	dpi[i][1] = mm ? screens[i].height*25.4f/mm : 0.0f;
-      }
-    }
-  }
-}
-
-#endif // ( WIN32 || __APPLE__ || ) X11
-
-#ifndef FL_DOXYGEN
-void Fl::call_screen_init() {
-  screen_init();
-}
-#endif
-
-/**
-  Gets the number of available screens.
-*/
-int Fl::screen_count() {
-  if (num_screens < 0) screen_init();
-
-  return num_screens ? num_screens : 1;
-}
-
-/**
-  Gets the bounding box of a screen
-  that contains the specified screen position \p mx, \p my
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] mx, my the absolute screen position
-*/
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my) {
-  screen_xywh(X, Y, W, H, screen_num(mx, my));
-}
-
-
-/**
- Gets the bounding box of the work area of a screen
- that contains the specified screen position \p mx, \p my
- \param[out]  X,Y,W,H the work area bounding box
- \param[in] mx, my the absolute screen position
- */
-void Fl::screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my) {
-  screen_work_area(X, Y, W, H, screen_num(mx, my));
-}
-
-/**
- Gets the bounding box of the work area of the given screen.
- \param[out]  X,Y,W,H the work area bounding box
- \param[in] n the screen number (0 to Fl::screen_count() - 1)
- \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my)
-*/
-void Fl::screen_work_area(int &X, int &Y, int &W, int &H, int n) {
-  if (num_screens < 0) screen_init();
-  if (n < 0 || n >= num_screens) n = 0;
-#ifdef WIN32
-  X = work_area[n].left;
-  Y = work_area[n].top;
-  W = work_area[n].right - X;
-  H = work_area[n].bottom - Y;
-#elif defined(__APPLE__)
-  Fl_X::screen_work_area(X, Y, W, H, n);
-#else
-  if (n == 0) { // for the main screen, these return the work area
-    X = Fl::x();
-    Y = Fl::y();
-    W = Fl::w();
-    H = Fl::h();
-  } else { // for other screens, work area is full screen,
-    screen_xywh(X, Y, W, H, n);
-  }
-#endif
-}
-
-/**
-  Gets the screen bounding rect for the given screen.
-  Under MSWindows, Mac OS X, and the Gnome desktop, screen #0 contains the menubar/taskbar
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] n the screen number (0 to Fl::screen_count() - 1)
-  \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my)
-*/
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int n) {
-  if (num_screens < 0) screen_init();
-
-  if ((n < 0) || (n >= num_screens))
-    n = 0;
-
-#ifdef WIN32
-  if (num_screens > 0) {
-    X = screens[n].left;
-    Y = screens[n].top;
-    W = screens[n].right - screens[n].left;
-    H = screens[n].bottom - screens[n].top;
-  } else {
-    /* Fallback if something is broken... */
-    X = 0;
-    Y = 0;
-    W = GetSystemMetrics(SM_CXSCREEN);
-    H = GetSystemMetrics(SM_CYSCREEN);
-  }
-#elif defined(__APPLE__)
-  X = screens[n].x;
-  Y = screens[n].y;
-  W = screens[n].width;
-  H = screens[n].height;
-#else
-  if (num_screens > 0) {
-    X = screens[n].x_org;
-    Y = screens[n].y_org;
-    W = screens[n].width;
-    H = screens[n].height;
-  }
-#endif // WIN32
-}
-
-/**
-  Gets the screen bounding rect for the screen
-  which intersects the most with the rectangle
-  defined by \p mx, \p my, \p mw, \p mh.
-  \param[out]  X,Y,W,H the corresponding screen bounding box
-  \param[in] mx, my, mw, mh the rectangle to search for intersection with
-  \see void screen_xywh(int &X, int &Y, int &W, int &H, int n)
-  */
-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh) {
-  screen_xywh(X, Y, W, H, screen_num(mx, my, mw, mh));
-}
-
-/**
-  Gets the screen number of a screen
-  that contains the specified screen position \p x, \p y
-  \param[in] x, y the absolute screen position
-*/
-int Fl::screen_num(int x, int y) {
-  int screen = 0;
-  if (num_screens < 0) screen_init();
-  
-  for (int i = 0; i < num_screens; i ++) {
-    int sx = 0, sy = 0, sw = 0, sh = 0;
-    Fl::screen_xywh(sx, sy, sw, sh, i);
-    if ((x >= sx) && (x < (sx+sw)) && (y >= sy) && (y < (sy+sh))) {
-      screen = i;
-      break;
-    }
-  }
-  return screen;
-}
-
-// Return the number of pixels common to the two rectangular areas
-static inline float fl_intersection(int x1, int y1, int w1, int h1,
-                                    int x2, int y2, int w2, int h2) {
-  if(x1+w1 < x2 || x2+w2 < x1 || y1+h1 < y2 || y2+h2 < y1)
-    return 0.;
-  int int_left = x1 > x2 ? x1 : x2;
-  int int_right = x1+w1 > x2+w2 ? x2+w2 : x1+w1;
-  int int_top = y1 > y2 ? y1 : y2;
-  int int_bottom = y1+h1 > y2+h2 ? y2+h2 : y1+h1;
-  return (float)(int_right - int_left) * (int_bottom - int_top);
-}
-
-/**
-  Gets the screen number for the screen
-  which intersects the most with the rectangle
-  defined by \p x, \p y, \p w, \p h.
-  \param[in] x, y, w, h the rectangle to search for intersection with
-  */
-int Fl::screen_num(int x, int y, int w, int h) {
-  int best_screen = 0;
-  float best_intersection = 0.;
-  for (int i = 0; i < Fl::screen_count(); i++) {
-    int sx = 0, sy = 0, sw = 0, sh = 0;
-    Fl::screen_xywh(sx, sy, sw, sh, i);
-    float sintersection = fl_intersection(x, y, w, h, sx, sy, sw, sh);
-    if (sintersection > best_intersection) {
-      best_screen = i;
-      best_intersection = sintersection;
-    }
-  }
-  return best_screen;
-}
-
-/**
- Gets the screen resolution in dots-per-inch for the given screen.
- \param[out]  h, v  horizontal and vertical resolution
- \param[in]   n     the screen number (0 to Fl::screen_count() - 1)
- \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my)
- */
-void Fl::screen_dpi(float &h, float &v, int n)
-{
-  if (num_screens < 0) screen_init();
-  h = v = 0.0f;
-
-#ifdef WIN32
-  if (n >= 0 && n < num_screens) {
-    h = float(dpi[n][0]);
-    v = float(dpi[n][1]);
-  }
-#elif defined(__APPLE__)
-  if (n >= 0 && n < num_screens) {
-    h = dpi_h[n];
-    v = dpi_v[n];
-  }
-#else
-  if (n >= 0 && n < num_screens) {
-    h = dpi[n][0];
-    v = dpi[n][1];
-  }
-#endif // WIN32
-}
-
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/src/slowarrow.h
+++ /dev/null
@@ -1,6 +1,0 @@
-#define slowarrow_width 16
-#define slowarrow_height 16
-static const unsigned char slowarrow_bits[] = {
-   0x40, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0xf0, 0x0f, 0x60, 0x00,
-   0x60, 0x00, 0x40, 0x02, 0x40, 0x02, 0x00, 0x06, 0x00, 0x06, 0xf0, 0x0f,
-   0x00, 0x06, 0x00, 0x06, 0x00, 0x02, 0x00, 0x02};
--- a/DoConfig/fltk/src/tile.xpm
+++ /dev/null
@@ -1,91 +1,0 @@
-/* XPM */
-static char	tile_cmap[3][32] = {
-"O c #FFFFFF",
-"o c #EFEFEF",
-". c #E8E8E8"
-};
-static const char * const tile_xpm[] = {
-"64 64 3 1",
-tile_cmap[0],
-tile_cmap[1],
-tile_cmap[2],
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
-
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"................................................................",
-"oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
-"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"};
--- a/DoConfig/fltk/src/up.xbm
+++ /dev/null
@@ -1,6 +1,0 @@
-#define up_width 16
-#define up_height 16
-static unsigned char up_bits[] = {
-   0x00, 0x00, 0x78, 0x00, 0x84, 0x00, 0x02, 0x01, 0x31, 0xfe, 0x79, 0x80,
-   0xfd, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80, 0x31, 0x80,
-   0x01, 0x80, 0x01, 0x80, 0xff, 0xff, 0x00, 0x00};
--- a/DoConfig/fltk/src/vsnprintf.c
+++ /dev/null
@@ -1,276 +1,0 @@
-/*
- * "$Id$"
- *
- * snprintf() and vsnprintf() functions for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include <stdio.h>
-#include "flstring.h"
-
-#ifdef HAVE_SYS_STDTYPES_H
-#  include <sys/stdtypes.h>
-#endif /* HAVE_SYS_STDTYPES_H */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int fl_vsnprintf(char* buffer, size_t bufsize, const char* format, va_list ap) {
-#if defined(HAVE_VSNPRINTF) && defined(__linux__)
-  return vsnprintf(buffer, bufsize, format, ap);
-#else
-  char		*bufptr,		/* Pointer to position in buffer */
-		*bufend,		/* Pointer to end of buffer */
-		sign,			/* Sign of format width */
-		size,			/* Size character (h, l, L) */
-		type;			/* Format type character */
-  int		width,			/* Width of field */
-		prec;			/* Number of characters of precision */
-  char		tformat[100],		/* Temporary format string for sprintf() */
-		*tptr,			/* Pointer into temporary format */
-		temp[1024];		/* Buffer for formatted numbers */
-  char		*s;			/* Pointer to string */
-  int		slen;			/* Length of string */
-  int		bytes;			/* Total number of bytes needed */
-
-
- /*
-  * Loop through the format string, formatting as needed...
-  */
-
-  bufptr = buffer;
-  bufend = buffer + bufsize - 1;
-  bytes  = 0;
-
-  while (*format) {
-    if (*format == '%') {
-      tptr = tformat;
-      *tptr++ = *format++;
-
-      if (*format == '%') {
-        if (bufptr && bufptr < bufend) *bufptr++ = *format;
-        bytes ++;
-        format ++;
-	continue;
-      } else if (strchr(" -+#\'", *format)) {
-        *tptr++ = *format;
-        sign = *format++;
-      } else sign = 0;
-
-      if (*format == '*') {
-        /* Get width from argument... */
-	format ++;
-	width = va_arg(ap, int);
-	snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", width);
-	tptr += strlen(tptr);
-      } else {
-	width = 0;
-	while (isdigit(*format & 255)) {
-	  if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-	  width = width * 10 + *format++ - '0';
-	}
-      }
-
-      if (*format == '.') {
-	if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-        format ++;
-
-        if (*format == '*') {
-          /* Get precision from argument... */
-	  format ++;
-	  prec = va_arg(ap, int);
-	  snprintf(tptr, sizeof(tformat) - (tptr - tformat), "%d", prec);
-	  tptr += strlen(tptr);
-	} else {
-	  prec = 0;
-	  while (isdigit(*format & 255)) {
-	    if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-	    prec = prec * 10 + *format++ - '0';
-	  }
-	}
-      } else prec = -1;
-
-      size = '\0';
-
-      if (*format == 'l' && format[1] == 'l') {
-        size = 'L';
-	if (tptr < (tformat + sizeof(tformat) - 2)) {
-	  *tptr++ = 'l';
-	  *tptr++ = 'l';
-	}
-	format += 2;
-      } else if (*format == 'h' || *format == 'l' || *format == 'L') {
-	if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-        size = *format++;
-      }
-
-      if (!*format) break;
-
-      if (tptr < (tformat + sizeof(tformat) - 1)) *tptr++ = *format;
-      type  = *format++;
-      *tptr = '\0';
-
-      switch (type) {
-	case 'E' : /* Floating point formats */
-	case 'G' :
-	case 'e' :
-	case 'f' :
-	case 'g' :
-	  if ((width + 2) > (int)sizeof(temp)) break;
-
-	  sprintf(temp, tformat, va_arg(ap, double));
-
-          bytes += (int) strlen(temp);
-
-          if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-
-        case 'B' : /* Integer formats */
-	case 'X' :
-	case 'b' :
-        case 'd' :
-	case 'i' :
-	case 'o' :
-	case 'u' :
-	case 'x' :
-	  if ((width + 2) > (int)sizeof(temp)) break;
-
-#ifdef HAVE_LONG_LONG
-	  if (size == 'L')
-	    sprintf(temp, tformat, va_arg(ap, long long));
-	  else
-#endif /* HAVE_LONG_LONG */
-	  if (size == 'l')
-	    sprintf(temp, tformat, va_arg(ap, long));
-	  else
-	    sprintf(temp, tformat, va_arg(ap, int));
-
-          bytes += (int) strlen(temp);
-
-	  if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-	    
-	case 'p' : /* Pointer value */
-	  if ((width + 2) > (int)sizeof(temp)) break;
-
-	  sprintf(temp, tformat, va_arg(ap, void *));
-
-          bytes += (int) strlen(temp);
-
-	  if (bufptr) {
-	    if ((bufptr + strlen(temp)) > bufend) {
-	      strncpy(bufptr, temp, (size_t)(bufend - bufptr));
-	      bufptr = bufend;
-	    } else {
-	      strcpy(bufptr, temp);
-	      bufptr += strlen(temp);
-	    }
-	  }
-	  break;
-
-        case 'c' : /* Character or character array */
-	  bytes += width;
-
-	  if (bufptr) {
-	    if (width <= 1) *bufptr++ = va_arg(ap, int);
-	    else {
-	      if ((bufptr + width) > bufend) width = (int) (bufend - bufptr);
-
-	      memcpy(bufptr, va_arg(ap, char *), (size_t)width);
-	      bufptr += width;
-	    }
-	  }
-	  break;
-
-	case 's' : /* String */
-	  if ((s = va_arg(ap, char *)) == NULL) s = "(null)";
-
-	  slen = (int) strlen(s);
-	  if (slen > width && prec != width) width = slen;
-
-          bytes += width;
-
-	  if (bufptr) {
-	    if ((bufptr + width) > bufend) width = (int) (bufend - bufptr);
-
-            if (slen > width) slen = width;
-
-	    if (sign == '-') {
-	      strncpy(bufptr, s, (size_t)slen);
-	      memset(bufptr + slen, ' ', (size_t)(width - slen));
-	    } else {
-	      memset(bufptr, ' ', (size_t)(width - slen));
-	      strncpy(bufptr + width - slen, s, (size_t)slen);
-	    }
-
-	    bufptr += width;
-	  }
-	  break;
-
-	case 'n' : /* Output number of chars so far */
-	  *(va_arg(ap, int *)) = bytes;
-	  break;
-      }
-    } else {
-      bytes ++;
-
-      if (bufptr && bufptr < bufend) *bufptr++ = *format;
-      format ++;
-    }
-  }
-
- /*
-  * Nul-terminate the string and return the number of characters needed.
-  */
-
-  if (bufptr) *bufptr = '\0';
-
-  return (bytes);
-#endif /* HAVE_VSNPRINTF */
-}
-
-int fl_snprintf(char* str, size_t size, const char* fmt, ...) {
-  int ret;
-  va_list ap;
-  va_start(ap, fmt);
-  ret = vsnprintf(str, size, fmt, ap);
-  va_end(ap);
-  return ret;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-/*
- * End of "$Id$".
- */
-
--- a/DoConfig/fltk/src/xutf8/COPYING
+++ /dev/null
@@ -1,41 +1,0 @@
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
-
-
-		lcUniConv directory: 
-
-Copyright (c) 1999-2000  Free Software Foundation, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the Free Software Foundation
-shall not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization from the
-Free Software Foundation.
-
-
--- a/DoConfig/fltk/src/xutf8/README
+++ /dev/null
@@ -1,57 +1,0 @@
----------------------------------------------------------------------------
-Important note: this file is outdated (as of FLTK 1.3.x, 2012 and later).
-Many things have been changed meanwhile.
-Use all information with care!
----------------------------------------------------------------------------
-
-
-
-supported encodings :
----------------------
-iso10646-1
-iso8859-1
-iso8859-2
-iso8859-3
-iso8859-4
-iso8859-5
-iso8859-6
-iso8859-7
-iso8859-8
-iso8859-9
-iso8859-10
-iso8859-11
-iso8859-13
-iso8859-14
-iso8859-15
-koi8-r
-koi8-u
-big5-0
-gbk
-gb2312.1980-0
-jisx0201.1976-0
-jisx0208.1983-0
-jisx0212.1990-0
-ksc5601.1987-0
-symbol
-dingbats
-
-
-
-ORIGINAL FILES :
-================
-
-The directory lcUniConv is copied from the xfree project cvs system.
-(
-export CVS_RSH=ssh
-export CVSROOT=anoncvs@anoncvs.xfree86.org:/cvs
-cvs checkout xc/lib/X11/lcUniConv
-password: anoncvs
-)
-
-The file imKStoUCS.c is copied from the xfree project cvs system.
-(
-export CVS_RSH=ssh
-export CVSROOT=anoncvs@anoncvs.xfree86.org:/cvs
-cvs checkout xc/lib/X11
-password: anoncvs
-)
--- a/DoConfig/fltk/src/xutf8/case.c
+++ /dev/null
@@ -1,121 +1,0 @@
-/*
- * "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for UTF-8 support
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-#  include "../Xutf8.h"
-#endif /* !defined(WIN32) && !defined(__APPLE__) */
-
-#include "headers/case.h"
-#include <stdlib.h>
-
-int 
-XUtf8Tolower(int ucs) {
-  int ret;
-  if (ucs <= 0x02B6) {
-    if (ucs >= 0x0041) {
-      ret = ucs_table_0041[ucs - 0x0041];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x0556) {
-    if (ucs >= 0x0386) {
-      ret = ucs_table_0386[ucs - 0x0386];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x10C5) {
-    if (ucs >= 0x10A0) {
-      ret = ucs_table_10A0[ucs - 0x10A0];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x1FFC) {
-    if (ucs >= 0x1E00) {
-      ret = ucs_table_1E00[ucs - 0x1E00];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x2133) {
-    if (ucs >= 0x2102) {
-      ret = ucs_table_2102[ucs - 0x2102];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x24CF) {
-    if (ucs >= 0x24B6) {
-      ret = ucs_table_24B6[ucs - 0x24B6];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0x33CE) {
-    if (ucs >= 0x33CE) {
-      ret = ucs_table_33CE[ucs - 0x33CE];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  if (ucs <= 0xFF3A) {
-    if (ucs >= 0xFF21) {
-      ret = ucs_table_FF21[ucs - 0xFF21];
-      if (ret > 0) return ret;
-    }
-    return ucs;
-  }
-
-  return ucs;
-}
-
-int 
-XUtf8Toupper(int ucs) {
-  int i;
-  static unsigned short *table = NULL;
-
-  if (!table) {
-    table = (unsigned short*) malloc(sizeof(unsigned short) * 0x10000);
-    for (i = 0; i < 0x10000; i++) {
-      table[i] = (unsigned short) i;
-    }
-    for (i = 0; i < 0x10000; i++) {
-      int l;
-      l = XUtf8Tolower(i);
-      if (l != i) table[l] = (unsigned short) i;
-    }
-  }
-  if (ucs >= 0x10000 || ucs < 0) return ucs;
-  return table[ucs];
-}
-
-/*
-* End of "$Id$".
-*/
--- a/DoConfig/fltk/src/xutf8/fl_wcwidth.c
+++ /dev/null
@@ -1,44 +1,0 @@
-/*
- * "$Id$"
- *
- * wrapper(s) around Markus Kuhn's wcwidth() implementation.
- *
- * Copyright 2006-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/* include Markus Kuhn's wcwidth() implementation.
- * Note: only the filename has been changes at the moment.
- * forward declare the routines as static to avoid name leakage.
- */
-
-#if 0
-#include <stdio.h>              /* for size_t only */
-#endif
-
-static int mk_wcwidth(unsigned int ucs);
-#if 0
-static int mk_wcswidth(const unsigned int *pwcs, size_t n);
-static int mk_wcwidth_cjk(unsigned int ucs);
-static int mk_wcswidth_cjk(const unsigned int *pwcs, size_t n);
-#endif
-
-#include "mk_wcwidth.c"
-
-int fl_wcwidth(unsigned int ucs) {
-  /* warning: we have problems if sizeof(wchar_t) == 2 and ucs > 0xffff */
-  return mk_wcwidth(ucs);
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/headers/case.h
+++ /dev/null
@@ -1,1770 +1,0 @@
-/* spacing */
-
-static const unsigned short ucs_table_0041[] = {
-/* U+0041 */ 0x0061,
-/* U+0042 */ 0x0062,
-/* U+0043 */ 0x0063,
-/* U+0044 */ 0x0064,
-/* U+0045 */ 0x0065,
-/* U+0046 */ 0x0066,
-/* U+0047 */ 0x0067,
-/* U+0048 */ 0x0068,
-/* U+0049 */ 0x0069,
-/* U+004A */ 0x006A,
-/* U+004B */ 0x006B,
-/* U+004C */ 0x006C,
-/* U+004D */ 0x006D,
-/* U+004E */ 0x006E,
-/* U+004F */ 0x006F,
-/* U+0050 */ 0x0070,
-/* U+0051 */ 0x0071,
-/* U+0052 */ 0x0072,
-/* U+0053 */ 0x0073,
-/* U+0054 */ 0x0074,
-/* U+0055 */ 0x0075,
-/* U+0056 */ 0x0076,
-/* U+0057 */ 0x0077,
-/* U+0058 */ 0x0078,
-/* U+0059 */ 0x0079,
-/* U+005A */ 0x007A,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00C0 */ 0x00E0,
-/* U+00C1 */ 0x00E1,
-/* U+00C2 */ 0x00E2,
-/* U+00C3 */ 0x00E3,
-/* U+00C4 */ 0x00E4,
-/* U+00C5 */ 0x00E5,
-/* U+00C6 */ 0x00E6,
-/* U+00C7 */ 0x00E7,
-/* U+00C8 */ 0x00E8,
-/* U+00C9 */ 0x00E9,
-/* U+00CA */ 0x00EA,
-/* U+00CB */ 0x00EB,
-/* U+00CC */ 0x00EC,
-/* U+00CD */ 0x00ED,
-/* U+00CE */ 0x00EE,
-/* U+00CF */ 0x00EF,
-/* U+00D0 */ 0x00F0,
-/* U+00D1 */ 0x00F1,
-/* U+00D2 */ 0x00F2,
-/* U+00D3 */ 0x00F3,
-/* U+00D4 */ 0x00F4,
-/* U+00D5 */ 0x00F5,
-/* U+00D6 */ 0x00F6,
-0x00,
-/* U+00D8 */ 0x00F8,
-/* U+00D9 */ 0x00F9,
-/* U+00DA */ 0x00FA,
-/* U+00DB */ 0x00FB,
-/* U+00DC */ 0x00FC,
-/* U+00DD */ 0x00FD,
-/* U+00DE */ 0x00FE,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0100 */ 0x0101,
-0x00,
-/* U+0102 */ 0x0103,
-0x00,
-/* U+0104 */ 0x0105,
-0x00,
-/* U+0106 */ 0x0107,
-0x00,
-/* U+0108 */ 0x0109,
-0x00,
-/* U+010A */ 0x010B,
-0x00,
-/* U+010C */ 0x010D,
-0x00,
-/* U+010E */ 0x010F,
-0x00,
-/* U+0110 */ 0x0111,
-0x00,
-/* U+0112 */ 0x0113,
-0x00,
-/* U+0114 */ 0x0115,
-0x00,
-/* U+0116 */ 0x0117,
-0x00,
-/* U+0118 */ 0x0119,
-0x00,
-/* U+011A */ 0x011B,
-0x00,
-/* U+011C */ 0x011D,
-0x00,
-/* U+011E */ 0x011F,
-0x00,
-/* U+0120 */ 0x0121,
-0x00,
-/* U+0122 */ 0x0123,
-0x00,
-/* U+0124 */ 0x0125,
-0x00,
-/* U+0126 */ 0x0127,
-0x00,
-/* U+0128 */ 0x0129,
-0x00,
-/* U+012A */ 0x012B,
-0x00,
-/* U+012C */ 0x012D,
-0x00,
-/* U+012E */ 0x012F,
-0x00,
-/* U+0130 */ 0x0,
-0x00,
-/* U+0132 */ 0x0133,
-0x00,
-/* U+0134 */ 0x0135,
-0x00,
-/* U+0136 */ 0x0137,
-0x00,
-0x00,
-/* U+0139 */ 0x013A,
-0x00,
-/* U+013B */ 0x013C,
-0x00,
-/* U+013D */ 0x013E,
-0x00,
-/* U+013F */ 0x0140,
-0x00,
-/* U+0141 */ 0x0142,
-0x00,
-/* U+0143 */ 0x0144,
-0x00,
-/* U+0145 */ 0x0146,
-0x00,
-/* U+0147 */ 0x0148,
-0x00,
-0x00,
-/* U+014A */ 0x014B,
-0x00,
-/* U+014C */ 0x014D,
-0x00,
-/* U+014E */ 0x014F,
-0x00,
-/* U+0150 */ 0x0151,
-0x00,
-/* U+0152 */ 0x0153,
-0x00,
-/* U+0154 */ 0x0155,
-0x00,
-/* U+0156 */ 0x0157,
-0x00,
-/* U+0158 */ 0x0159,
-0x00,
-/* U+015A */ 0x015B,
-0x00,
-/* U+015C */ 0x015D,
-0x00,
-/* U+015E */ 0x015F,
-0x00,
-/* U+0160 */ 0x0161,
-0x00,
-/* U+0162 */ 0x0163,
-0x00,
-/* U+0164 */ 0x0165,
-0x00,
-/* U+0166 */ 0x0167,
-0x00,
-/* U+0168 */ 0x0169,
-0x00,
-/* U+016A */ 0x016B,
-0x00,
-/* U+016C */ 0x016D,
-0x00,
-/* U+016E */ 0x016F,
-0x00,
-/* U+0170 */ 0x0171,
-0x00,
-/* U+0172 */ 0x0173,
-0x00,
-/* U+0174 */ 0x0175,
-0x00,
-/* U+0176 */ 0x0177,
-0x00,
-/* U+0178 */ 0x00FF,
-/* U+0179 */ 0x017A,
-0x00,
-/* U+017B */ 0x017C,
-0x00,
-/* U+017D */ 0x017E,
-0x00,
-0x00,
-0x00,
-/* U+0181 */ 0x0253,
-/* U+0182 */ 0x0183,
-0x00,
-/* U+0184 */ 0x0185,
-0x00,
-/* U+0186 */ 0x0254,
-/* U+0187 */ 0x0188,
-0x00,
-/* U+0189 */ 0x0,
-/* U+018A */ 0x0257,
-/* U+018B */ 0x018C,
-0x00,
-0x00,
-/* U+018E */ 0x0258,
-/* U+018F */ 0x0259,
-/* U+0190 */ 0x025B,
-/* U+0191 */ 0x0192,
-0x00,
-/* U+0193 */ 0x0260,
-/* U+0194 */ 0x0263,
-0x00,
-/* U+0196 */ 0x0269,
-/* U+0197 */ 0x0268,
-/* U+0198 */ 0x0199,
-0x00,
-0x00,
-0x00,
-/* U+019C */ 0x026F,
-/* U+019D */ 0x0272,
-0x00,
-/* U+019F */ 0x0,
-/* U+01A0 */ 0x01A1,
-0x00,
-/* U+01A2 */ 0x01A3,
-0x00,
-/* U+01A4 */ 0x01A5,
-0x00,
-0x00,
-/* U+01A7 */ 0x01A8,
-0x00,
-/* U+01A9 */ 0x0283,
-0x00,
-0x00,
-/* U+01AC */ 0x01AD,
-0x00,
-/* U+01AE */ 0x0288,
-/* U+01AF */ 0x01B0,
-0x00,
-/* U+01B1 */ 0x028A,
-/* U+01B2 */ 0x028B,
-/* U+01B3 */ 0x01B4,
-0x00,
-/* U+01B5 */ 0x01B6,
-0x00,
-/* U+01B7 */ 0x0292,
-/* U+01B8 */ 0x01B9,
-0x00,
-0x00,
-0x00,
-/* U+01BC */ 0x01BD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+01C4 */ 0x01C6,
-/* U+01C5 */ 0x0,
-0x00,
-/* U+01C7 */ 0x01C9,
-/* U+01C8 */ 0x0,
-0x00,
-/* U+01CA */ 0x01CC,
-/* U+01CB */ 0x0,
-0x00,
-/* U+01CD */ 0x01CE,
-0x00,
-/* U+01CF */ 0x01D0,
-0x00,
-/* U+01D1 */ 0x01D2,
-0x00,
-/* U+01D3 */ 0x01D4,
-0x00,
-/* U+01D5 */ 0x01D6,
-0x00,
-/* U+01D7 */ 0x01D8,
-0x00,
-/* U+01D9 */ 0x01DA,
-0x00,
-/* U+01DB */ 0x01DC,
-0x00,
-0x00,
-/* U+01DE */ 0x01DF,
-0x00,
-/* U+01E0 */ 0x01E1,
-0x00,
-/* U+01E2 */ 0x01E3,
-0x00,
-/* U+01E4 */ 0x01E5,
-0x00,
-/* U+01E6 */ 0x01E7,
-0x00,
-/* U+01E8 */ 0x01E9,
-0x00,
-/* U+01EA */ 0x01EB,
-0x00,
-/* U+01EC */ 0x01ED,
-0x00,
-/* U+01EE */ 0x01EF,
-0x00,
-0x00,
-/* U+01F1 */ 0x01F3,
-/* U+01F2 */ 0x0,
-0x00,
-/* U+01F4 */ 0x01F5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+01FA */ 0x01FB,
-0x00,
-/* U+01FC */ 0x01FD,
-0x00,
-/* U+01FE */ 0x01FF,
-0x00,
-/* U+0200 */ 0x0201,
-0x00,
-/* U+0202 */ 0x0203,
-0x00,
-/* U+0204 */ 0x0205,
-0x00,
-/* U+0206 */ 0x0207,
-0x00,
-/* U+0208 */ 0x0209,
-0x00,
-/* U+020A */ 0x020B,
-0x00,
-/* U+020C */ 0x020D,
-0x00,
-/* U+020E */ 0x020F,
-0x00,
-/* U+0210 */ 0x0211,
-0x00,
-/* U+0212 */ 0x0213,
-0x00,
-/* U+0214 */ 0x0215,
-0x00,
-/* U+0216 */ 0x0217,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0262 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+026A */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0274 */ 0x0,
-0x00,
-/* U+0276 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0280 */ 0x0,
-/* U+0281 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+028F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0299 */ 0x0,
-0x00,
-/* U+029B */ 0x0,
-/* U+029C */ 0x0,
-0x00,
-0x00,
-/* U+029F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+02B6 */ 0x0,
-};
-
-static const unsigned short ucs_table_0386[] = {
-/* U+0386 */ 0x03AC,
-0x00,
-/* U+0388 */ 0x03AD,
-/* U+0389 */ 0x03AE,
-/* U+038A */ 0x03AF,
-0x00,
-/* U+038C */ 0x03CC,
-0x00,
-/* U+038E */ 0x03CD,
-/* U+038F */ 0x03CE,
-0x00,
-/* U+0391 */ 0x03B1,
-/* U+0392 */ 0x03B2,
-/* U+0393 */ 0x03B3,
-/* U+0394 */ 0x03B4,
-/* U+0395 */ 0x03B5,
-/* U+0396 */ 0x03B6,
-/* U+0397 */ 0x03B7,
-/* U+0398 */ 0x03B8,
-/* U+0399 */ 0x03B9,
-/* U+039A */ 0x03BA,
-/* U+039B */ 0x03BB,
-/* U+039C */ 0x03BC,
-/* U+039D */ 0x03BD,
-/* U+039E */ 0x03BE,
-/* U+039F */ 0x03BF,
-/* U+03A0 */ 0x03C0,
-/* U+03A1 */ 0x03C1,
-0x00,
-/* U+03A3 */ 0x03C3,
-/* U+03A4 */ 0x03C4,
-/* U+03A5 */ 0x03C5,
-/* U+03A6 */ 0x03C6,
-/* U+03A7 */ 0x03C7,
-/* U+03A8 */ 0x03C8,
-/* U+03A9 */ 0x03C9,
-/* U+03AA */ 0x03CA,
-/* U+03AB */ 0x03CB,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03D2 */ 0x03D2,
-/* U+03D3 */ 0x03D3,
-/* U+03D4 */ 0x03D4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03DA */ 0x03DA,
-0x00,
-/* U+03DC */ 0x03DC,
-0x00,
-/* U+03DE */ 0x03DE,
-0x00,
-/* U+03E0 */ 0x03E0,
-0x00,
-/* U+03E2 */ 0x03E3,
-0x00,
-/* U+03E4 */ 0x03E5,
-0x00,
-/* U+03E6 */ 0x03E7,
-0x00,
-/* U+03E8 */ 0x03E9,
-0x00,
-/* U+03EA */ 0x03EB,
-0x00,
-/* U+03EC */ 0x03ED,
-0x00,
-/* U+03EE */ 0x03EF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0401 */ 0x0451,
-/* U+0402 */ 0x0452,
-/* U+0403 */ 0x0453,
-/* U+0404 */ 0x0454,
-/* U+0405 */ 0x0455,
-/* U+0406 */ 0x0456,
-/* U+0407 */ 0x0457,
-/* U+0408 */ 0x0458,
-/* U+0409 */ 0x0459,
-/* U+040A */ 0x045A,
-/* U+040B */ 0x045B,
-/* U+040C */ 0x045C,
-0x00,
-/* U+040E */ 0x045E,
-/* U+040F */ 0x045F,
-/* U+0410 */ 0x0430,
-/* U+0411 */ 0x0431,
-/* U+0412 */ 0x0432,
-/* U+0413 */ 0x0433,
-/* U+0414 */ 0x0434,
-/* U+0415 */ 0x0435,
-/* U+0416 */ 0x0436,
-/* U+0417 */ 0x0437,
-/* U+0418 */ 0x0438,
-/* U+0419 */ 0x0439,
-/* U+041A */ 0x043A,
-/* U+041B */ 0x043B,
-/* U+041C */ 0x043C,
-/* U+041D */ 0x043D,
-/* U+041E */ 0x043E,
-/* U+041F */ 0x043F,
-/* U+0420 */ 0x0440,
-/* U+0421 */ 0x0441,
-/* U+0422 */ 0x0442,
-/* U+0423 */ 0x0443,
-/* U+0424 */ 0x0444,
-/* U+0425 */ 0x0445,
-/* U+0426 */ 0x0446,
-/* U+0427 */ 0x0447,
-/* U+0428 */ 0x0448,
-/* U+0429 */ 0x0449,
-/* U+042A */ 0x044A,
-/* U+042B */ 0x044B,
-/* U+042C */ 0x044C,
-/* U+042D */ 0x044D,
-/* U+042E */ 0x044E,
-/* U+042F */ 0x044F,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0460 */ 0x0461,
-0x00,
-/* U+0462 */ 0x0463,
-0x00,
-/* U+0464 */ 0x0465,
-0x00,
-/* U+0466 */ 0x0467,
-0x00,
-/* U+0468 */ 0x0469,
-0x00,
-/* U+046A */ 0x046B,
-0x00,
-/* U+046C */ 0x046D,
-0x00,
-/* U+046E */ 0x046F,
-0x00,
-/* U+0470 */ 0x0471,
-0x00,
-/* U+0472 */ 0x0473,
-0x00,
-/* U+0474 */ 0x0475,
-0x00,
-/* U+0476 */ 0x0477,
-0x00,
-/* U+0478 */ 0x0479,
-0x00,
-/* U+047A */ 0x047B,
-0x00,
-/* U+047C */ 0x047D,
-0x00,
-/* U+047E */ 0x047F,
-0x00,
-/* U+0480 */ 0x0481,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0490 */ 0x0491,
-0x00,
-/* U+0492 */ 0x0493,
-0x00,
-/* U+0494 */ 0x0495,
-0x00,
-/* U+0496 */ 0x0497,
-0x00,
-/* U+0498 */ 0x0499,
-0x00,
-/* U+049A */ 0x049B,
-0x00,
-/* U+049C */ 0x049D,
-0x00,
-/* U+049E */ 0x049F,
-0x00,
-/* U+04A0 */ 0x04A1,
-0x00,
-/* U+04A2 */ 0x04A3,
-0x00,
-/* U+04A4 */ 0x04A5,
-0x00,
-/* U+04A6 */ 0x04A7,
-0x00,
-/* U+04A8 */ 0x04A9,
-0x00,
-/* U+04AA */ 0x04AB,
-0x00,
-/* U+04AC */ 0x04AD,
-0x00,
-/* U+04AE */ 0x04AF,
-0x00,
-/* U+04B0 */ 0x04B1,
-0x00,
-/* U+04B2 */ 0x04B3,
-0x00,
-/* U+04B4 */ 0x04B5,
-0x00,
-/* U+04B6 */ 0x04B7,
-0x00,
-/* U+04B8 */ 0x04B9,
-0x00,
-/* U+04BA */ 0x04BB,
-0x00,
-/* U+04BC */ 0x04BD,
-0x00,
-/* U+04BE */ 0x04BF,
-0x00,
-0x00,
-/* U+04C1 */ 0x04C2,
-0x00,
-/* U+04C3 */ 0x04C4,
-0x00,
-0x00,
-0x00,
-/* U+04C7 */ 0x04C8,
-0x00,
-0x00,
-0x00,
-/* U+04CB */ 0x04CC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+04D0 */ 0x04D1,
-0x00,
-/* U+04D2 */ 0x04D3,
-0x00,
-/* U+04D4 */ 0x04D5,
-0x00,
-/* U+04D6 */ 0x04D7,
-0x00,
-/* U+04D8 */ 0x04D9,
-0x00,
-/* U+04DA */ 0x04DB,
-0x00,
-/* U+04DC */ 0x04DD,
-0x00,
-/* U+04DE */ 0x04DF,
-0x00,
-/* U+04E0 */ 0x04E1,
-0x00,
-/* U+04E2 */ 0x04E3,
-0x00,
-/* U+04E4 */ 0x04E5,
-0x00,
-/* U+04E6 */ 0x04E7,
-0x00,
-/* U+04E8 */ 0x04E9,
-0x00,
-/* U+04EA */ 0x04EB,
-0x00,
-0x00,
-0x00,
-/* U+04EE */ 0x04EF,
-0x00,
-/* U+04F0 */ 0x04F1,
-0x00,
-/* U+04F2 */ 0x04F3,
-0x00,
-/* U+04F4 */ 0x04F5,
-0x00,
-0x00,
-0x00,
-/* U+04F8 */ 0x04F9,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0531 */ 0x0561,
-/* U+0532 */ 0x0562,
-/* U+0533 */ 0x0563,
-/* U+0534 */ 0x0564,
-/* U+0535 */ 0x0565,
-/* U+0536 */ 0x0566,
-/* U+0537 */ 0x0567,
-/* U+0538 */ 0x0568,
-/* U+0539 */ 0x0569,
-/* U+053A */ 0x056A,
-/* U+053B */ 0x056B,
-/* U+053C */ 0x056C,
-/* U+053D */ 0x056D,
-/* U+053E */ 0x056E,
-/* U+053F */ 0x056F,
-/* U+0540 */ 0x0570,
-/* U+0541 */ 0x0571,
-/* U+0542 */ 0x0572,
-/* U+0543 */ 0x0573,
-/* U+0544 */ 0x0574,
-/* U+0545 */ 0x0575,
-/* U+0546 */ 0x0576,
-/* U+0547 */ 0x0577,
-/* U+0548 */ 0x0578,
-/* U+0549 */ 0x0579,
-/* U+054A */ 0x057A,
-/* U+054B */ 0x057B,
-/* U+054C */ 0x057C,
-/* U+054D */ 0x057D,
-/* U+054E */ 0x057E,
-/* U+054F */ 0x057F,
-/* U+0550 */ 0x0580,
-/* U+0551 */ 0x0581,
-/* U+0552 */ 0x0582,
-/* U+0553 */ 0x0583,
-/* U+0554 */ 0x0584,
-/* U+0555 */ 0x0585,
-/* U+0556 */ 0x0586,
-};
-
-static const unsigned short ucs_table_10A0[] = {
-/* U+10A0 */ 0x10D0,
-/* U+10A1 */ 0x10D1,
-/* U+10A2 */ 0x10D2,
-/* U+10A3 */ 0x10D3,
-/* U+10A4 */ 0x10D4,
-/* U+10A5 */ 0x10D5,
-/* U+10A6 */ 0x10D6,
-/* U+10A7 */ 0x10D7,
-/* U+10A8 */ 0x10D8,
-/* U+10A9 */ 0x10D9,
-/* U+10AA */ 0x10DA,
-/* U+10AB */ 0x10DB,
-/* U+10AC */ 0x10DC,
-/* U+10AD */ 0x10DD,
-/* U+10AE */ 0x10DE,
-/* U+10AF */ 0x10DF,
-/* U+10B0 */ 0x10E0,
-/* U+10B1 */ 0x10E1,
-/* U+10B2 */ 0x10E2,
-/* U+10B3 */ 0x10E3,
-/* U+10B4 */ 0x10E4,
-/* U+10B5 */ 0x10E5,
-/* U+10B6 */ 0x10E6,
-/* U+10B7 */ 0x10E7,
-/* U+10B8 */ 0x10E8,
-/* U+10B9 */ 0x10E9,
-/* U+10BA */ 0x10EA,
-/* U+10BB */ 0x10EB,
-/* U+10BC */ 0x10EC,
-/* U+10BD */ 0x10ED,
-/* U+10BE */ 0x10EE,
-/* U+10BF */ 0x10EF,
-/* U+10C0 */ 0x10F0,
-/* U+10C1 */ 0x10F1,
-/* U+10C2 */ 0x10F2,
-/* U+10C3 */ 0x10F3,
-/* U+10C4 */ 0x10F4,
-/* U+10C5 */ 0x10F5,
-};
-
-static const unsigned short ucs_table_1E00[] = {
-/* U+1E00 */ 0x1E01,
-0x00,
-/* U+1E02 */ 0x1E03,
-0x00,
-/* U+1E04 */ 0x1E05,
-0x00,
-/* U+1E06 */ 0x1E07,
-0x00,
-/* U+1E08 */ 0x1E09,
-0x00,
-/* U+1E0A */ 0x1E0B,
-0x00,
-/* U+1E0C */ 0x1E0D,
-0x00,
-/* U+1E0E */ 0x1E0F,
-0x00,
-/* U+1E10 */ 0x1E11,
-0x00,
-/* U+1E12 */ 0x1E13,
-0x00,
-/* U+1E14 */ 0x1E15,
-0x00,
-/* U+1E16 */ 0x1E17,
-0x00,
-/* U+1E18 */ 0x1E19,
-0x00,
-/* U+1E1A */ 0x1E1B,
-0x00,
-/* U+1E1C */ 0x1E1D,
-0x00,
-/* U+1E1E */ 0x1E1F,
-0x00,
-/* U+1E20 */ 0x1E21,
-0x00,
-/* U+1E22 */ 0x1E23,
-0x00,
-/* U+1E24 */ 0x1E25,
-0x00,
-/* U+1E26 */ 0x1E27,
-0x00,
-/* U+1E28 */ 0x1E29,
-0x00,
-/* U+1E2A */ 0x1E2B,
-0x00,
-/* U+1E2C */ 0x1E2D,
-0x00,
-/* U+1E2E */ 0x1E2F,
-0x00,
-/* U+1E30 */ 0x1E31,
-0x00,
-/* U+1E32 */ 0x1E33,
-0x00,
-/* U+1E34 */ 0x1E35,
-0x00,
-/* U+1E36 */ 0x1E37,
-0x00,
-/* U+1E38 */ 0x1E39,
-0x00,
-/* U+1E3A */ 0x1E3B,
-0x00,
-/* U+1E3C */ 0x1E3D,
-0x00,
-/* U+1E3E */ 0x1E3F,
-0x00,
-/* U+1E40 */ 0x1E41,
-0x00,
-/* U+1E42 */ 0x1E43,
-0x00,
-/* U+1E44 */ 0x1E45,
-0x00,
-/* U+1E46 */ 0x1E47,
-0x00,
-/* U+1E48 */ 0x1E49,
-0x00,
-/* U+1E4A */ 0x1E4B,
-0x00,
-/* U+1E4C */ 0x1E4D,
-0x00,
-/* U+1E4E */ 0x1E4F,
-0x00,
-/* U+1E50 */ 0x1E51,
-0x00,
-/* U+1E52 */ 0x1E53,
-0x00,
-/* U+1E54 */ 0x1E55,
-0x00,
-/* U+1E56 */ 0x1E57,
-0x00,
-/* U+1E58 */ 0x1E59,
-0x00,
-/* U+1E5A */ 0x1E5B,
-0x00,
-/* U+1E5C */ 0x1E5D,
-0x00,
-/* U+1E5E */ 0x1E5F,
-0x00,
-/* U+1E60 */ 0x1E61,
-0x00,
-/* U+1E62 */ 0x1E63,
-0x00,
-/* U+1E64 */ 0x1E65,
-0x00,
-/* U+1E66 */ 0x1E67,
-0x00,
-/* U+1E68 */ 0x1E69,
-0x00,
-/* U+1E6A */ 0x1E6B,
-0x00,
-/* U+1E6C */ 0x1E6D,
-0x00,
-/* U+1E6E */ 0x1E6F,
-0x00,
-/* U+1E70 */ 0x1E71,
-0x00,
-/* U+1E72 */ 0x1E73,
-0x00,
-/* U+1E74 */ 0x1E75,
-0x00,
-/* U+1E76 */ 0x1E77,
-0x00,
-/* U+1E78 */ 0x1E79,
-0x00,
-/* U+1E7A */ 0x1E7B,
-0x00,
-/* U+1E7C */ 0x1E7D,
-0x00,
-/* U+1E7E */ 0x1E7F,
-0x00,
-/* U+1E80 */ 0x1E81,
-0x00,
-/* U+1E82 */ 0x1E83,
-0x00,
-/* U+1E84 */ 0x1E85,
-0x00,
-/* U+1E86 */ 0x1E87,
-0x00,
-/* U+1E88 */ 0x1E89,
-0x00,
-/* U+1E8A */ 0x1E8B,
-0x00,
-/* U+1E8C */ 0x1E8D,
-0x00,
-/* U+1E8E */ 0x1E8F,
-0x00,
-/* U+1E90 */ 0x1E91,
-0x00,
-/* U+1E92 */ 0x1E93,
-0x00,
-/* U+1E94 */ 0x1E95,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1EA0 */ 0x1EA1,
-0x00,
-/* U+1EA2 */ 0x1EA3,
-0x00,
-/* U+1EA4 */ 0x1EA5,
-0x00,
-/* U+1EA6 */ 0x1EA7,
-0x00,
-/* U+1EA8 */ 0x1EA9,
-0x00,
-/* U+1EAA */ 0x1EAB,
-0x00,
-/* U+1EAC */ 0x1EAD,
-0x00,
-/* U+1EAE */ 0x1EAF,
-0x00,
-/* U+1EB0 */ 0x1EB1,
-0x00,
-/* U+1EB2 */ 0x1EB3,
-0x00,
-/* U+1EB4 */ 0x1EB5,
-0x00,
-/* U+1EB6 */ 0x1EB7,
-0x00,
-/* U+1EB8 */ 0x1EB9,
-0x00,
-/* U+1EBA */ 0x1EBB,
-0x00,
-/* U+1EBC */ 0x1EBD,
-0x00,
-/* U+1EBE */ 0x1EBF,
-0x00,
-/* U+1EC0 */ 0x1EC1,
-0x00,
-/* U+1EC2 */ 0x1EC3,
-0x00,
-/* U+1EC4 */ 0x1EC5,
-0x00,
-/* U+1EC6 */ 0x1EC7,
-0x00,
-/* U+1EC8 */ 0x1EC9,
-0x00,
-/* U+1ECA */ 0x1ECB,
-0x00,
-/* U+1ECC */ 0x1ECD,
-0x00,
-/* U+1ECE */ 0x1ECF,
-0x00,
-/* U+1ED0 */ 0x1ED1,
-0x00,
-/* U+1ED2 */ 0x1ED3,
-0x00,
-/* U+1ED4 */ 0x1ED5,
-0x00,
-/* U+1ED6 */ 0x1ED7,
-0x00,
-/* U+1ED8 */ 0x1ED9,
-0x00,
-/* U+1EDA */ 0x1EDB,
-0x00,
-/* U+1EDC */ 0x1EDD,
-0x00,
-/* U+1EDE */ 0x1EDF,
-0x00,
-/* U+1EE0 */ 0x1EE1,
-0x00,
-/* U+1EE2 */ 0x1EE3,
-0x00,
-/* U+1EE4 */ 0x1EE5,
-0x00,
-/* U+1EE6 */ 0x1EE7,
-0x00,
-/* U+1EE8 */ 0x1EE9,
-0x00,
-/* U+1EEA */ 0x1EEB,
-0x00,
-/* U+1EEC */ 0x1EED,
-0x00,
-/* U+1EEE */ 0x1EEF,
-0x00,
-/* U+1EF0 */ 0x1EF1,
-0x00,
-/* U+1EF2 */ 0x1EF3,
-0x00,
-/* U+1EF4 */ 0x1EF5,
-0x00,
-/* U+1EF6 */ 0x1EF7,
-0x00,
-/* U+1EF8 */ 0x1EF9,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F08 */ 0x1F00,
-/* U+1F09 */ 0x1F01,
-/* U+1F0A */ 0x1F02,
-/* U+1F0B */ 0x1F03,
-/* U+1F0C */ 0x1F04,
-/* U+1F0D */ 0x1F05,
-/* U+1F0E */ 0x1F06,
-/* U+1F0F */ 0x1F07,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F18 */ 0x1F10,
-/* U+1F19 */ 0x1F11,
-/* U+1F1A */ 0x1F12,
-/* U+1F1B */ 0x1F13,
-/* U+1F1C */ 0x1F14,
-/* U+1F1D */ 0x1F15,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F28 */ 0x1F20,
-/* U+1F29 */ 0x1F21,
-/* U+1F2A */ 0x1F22,
-/* U+1F2B */ 0x1F23,
-/* U+1F2C */ 0x1F24,
-/* U+1F2D */ 0x1F25,
-/* U+1F2E */ 0x1F26,
-/* U+1F2F */ 0x1F27,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F38 */ 0x1F30,
-/* U+1F39 */ 0x1F31,
-/* U+1F3A */ 0x1F32,
-/* U+1F3B */ 0x1F33,
-/* U+1F3C */ 0x1F34,
-/* U+1F3D */ 0x1F35,
-/* U+1F3E */ 0x1F36,
-/* U+1F3F */ 0x1F37,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F48 */ 0x1F40,
-/* U+1F49 */ 0x1F41,
-/* U+1F4A */ 0x1F42,
-/* U+1F4B */ 0x1F43,
-/* U+1F4C */ 0x1F44,
-/* U+1F4D */ 0x1F45,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F59 */ 0x1F51,
-0x00,
-/* U+1F5B */ 0x1F53,
-0x00,
-/* U+1F5D */ 0x1F55,
-0x00,
-/* U+1F5F */ 0x1F57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F68 */ 0x1F60,
-/* U+1F69 */ 0x1F61,
-/* U+1F6A */ 0x1F62,
-/* U+1F6B */ 0x1F63,
-/* U+1F6C */ 0x1F64,
-/* U+1F6D */ 0x1F65,
-/* U+1F6E */ 0x1F66,
-/* U+1F6F */ 0x1F67,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F88 */ 0x0,
-/* U+1F89 */ 0x0,
-/* U+1F8A */ 0x0,
-/* U+1F8B */ 0x0,
-/* U+1F8C */ 0x0,
-/* U+1F8D */ 0x0,
-/* U+1F8E */ 0x0,
-/* U+1F8F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1F98 */ 0x0,
-/* U+1F99 */ 0x0,
-/* U+1F9A */ 0x0,
-/* U+1F9B */ 0x0,
-/* U+1F9C */ 0x0,
-/* U+1F9D */ 0x0,
-/* U+1F9E */ 0x0,
-/* U+1F9F */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FA8 */ 0x0,
-/* U+1FA9 */ 0x0,
-/* U+1FAA */ 0x0,
-/* U+1FAB */ 0x0,
-/* U+1FAC */ 0x0,
-/* U+1FAD */ 0x0,
-/* U+1FAE */ 0x0,
-/* U+1FAF */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FB8 */ 0x1FB0,
-/* U+1FB9 */ 0x1FB1,
-/* U+1FBA */ 0x1F70,
-/* U+1FBB */ 0x1F71,
-/* U+1FBC */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FC8 */ 0x1F72,
-/* U+1FC9 */ 0x1F73,
-/* U+1FCA */ 0x1F74,
-/* U+1FCB */ 0x1F75,
-/* U+1FCC */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FD8 */ 0x1FD0,
-/* U+1FD9 */ 0x1FD1,
-/* U+1FDA */ 0x1F76,
-/* U+1FDB */ 0x1F77,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FE8 */ 0x1FE0,
-/* U+1FE9 */ 0x1FE1,
-/* U+1FEA */ 0x1F7A,
-/* U+1FEB */ 0x1F7B,
-/* U+1FEC */ 0x1FE5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+1FF8 */ 0x1F78,
-/* U+1FF9 */ 0x1F79,
-/* U+1FFA */ 0x1F7C,
-/* U+1FFB */ 0x1F7D,
-/* U+1FFC */ 0x0,
-};
-
-static const unsigned short ucs_table_2102[] = {
-/* U+2102 */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+210B */ 0x0,
-/* U+210C */ 0x0,
-/* U+210D */ 0x0,
-0x00,
-0x00,
-/* U+2110 */ 0x0,
-/* U+2111 */ 0x0,
-/* U+2112 */ 0x2113,
-0x00,
-0x00,
-/* U+2115 */ 0x0,
-0x00,
-0x00,
-/* U+2118 */ 0x0,
-/* U+2119 */ 0x0,
-/* U+211A */ 0x0,
-/* U+211B */ 0x0,
-/* U+211C */ 0x0,
-/* U+211D */ 0x0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2124 */ 0x0,
-0x00,
-0x00,
-0x00,
-/* U+2128 */ 0x0,
-0x00,
-0x00,
-0x00,
-/* U+212C */ 0x0,
-/* U+212D */ 0x0,
-0x00,
-0x00,
-/* U+2130 */ 0x212F,
-/* U+2131 */ 0x0,
-/* U+2132 */ 0x0,
-/* U+2133 */ 0x0,
-};
-
-static const unsigned short ucs_table_24B6[] = {
-/* U+24B6 */ 0x24D0,
-/* U+24B7 */ 0x24D1,
-/* U+24B8 */ 0x24D2,
-/* U+24B9 */ 0x24D3,
-/* U+24BA */ 0x24D4,
-/* U+24BB */ 0x24D5,
-/* U+24BC */ 0x24D6,
-/* U+24BD */ 0x24D7,
-/* U+24BE */ 0x24D8,
-/* U+24BF */ 0x24D9,
-/* U+24C0 */ 0x24DA,
-/* U+24C1 */ 0x24DB,
-/* U+24C2 */ 0x24DC,
-/* U+24C3 */ 0x24DD,
-/* U+24C4 */ 0x24DE,
-/* U+24C5 */ 0x24DF,
-/* U+24C6 */ 0x24E0,
-/* U+24C7 */ 0x24E1,
-/* U+24C8 */ 0x24E2,
-/* U+24C9 */ 0x24E3,
-/* U+24CA */ 0x24E4,
-/* U+24CB */ 0x24E5,
-/* U+24CC */ 0x24E6,
-/* U+24CD */ 0x24E7,
-/* U+24CE */ 0x24E8,
-/* U+24CF */ 0x24E9,
-};
-
-static const unsigned short ucs_table_33CE[] = {
-/* U+33CE */ 0x0,
-};
-
-static const unsigned short ucs_table_FF21[] = {
-/* U+FF21 */ 0xFF41,
-/* U+FF22 */ 0xFF42,
-/* U+FF23 */ 0xFF43,
-/* U+FF24 */ 0xFF44,
-/* U+FF25 */ 0xFF45,
-/* U+FF26 */ 0xFF46,
-/* U+FF27 */ 0xFF47,
-/* U+FF28 */ 0xFF48,
-/* U+FF29 */ 0xFF49,
-/* U+FF2A */ 0xFF4A,
-/* U+FF2B */ 0xFF4B,
-/* U+FF2C */ 0xFF4C,
-/* U+FF2D */ 0xFF4D,
-/* U+FF2E */ 0xFF4E,
-/* U+FF2F */ 0xFF4F,
-/* U+FF30 */ 0xFF50,
-/* U+FF31 */ 0xFF51,
-/* U+FF32 */ 0xFF52,
-/* U+FF33 */ 0xFF53,
-/* U+FF34 */ 0xFF54,
-/* U+FF35 */ 0xFF55,
-/* U+FF36 */ 0xFF56,
-/* U+FF37 */ 0xFF57,
-/* U+FF38 */ 0xFF58,
-/* U+FF39 */ 0xFF59,
-/* U+FF3A */ 0xFF5A,
-};
--- a/DoConfig/fltk/src/xutf8/headers/case_tbl.txt
+++ /dev/null
@@ -1,8 +1,0 @@
-ucs_table_0041[]; 	/* end: U+02B6 */
-ucs_table_0386[]; 	/* end: U+0556 */
-ucs_table_10A0[]; 	/* end: U+10C5 */
-ucs_table_1E00[]; 	/* end: U+1FFC */
-ucs_table_2102[]; 	/* end: U+2133 */
-ucs_table_24B6[]; 	/* end: U+24CF */
-ucs_table_33CE[]; 	/* end: U+33CE */
-ucs_table_FF21[]; 	/* end: U+FF3A */
--- a/DoConfig/fltk/src/xutf8/headers/dingbats_.h
+++ /dev/null
@@ -1,565 +1,0 @@
-/* dingbats */
-
-static const char unicode_to_dingbats_1b_0020[] = {
-/* U+0020 */ 0x20,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00A0 */ 0x20,
-};
-
-static const char unicode_to_dingbats_1b_2192[] = {
-/* U+2192 */ (char)0xD5,
-0x00,
-/* U+2194 */ (char)0xD6,
-/* U+2195 */ (char)0xD7,
-};
-
-static const char unicode_to_dingbats_1b_2460[] = {
-/* U+2460 */ (char)0xAC,
-/* U+2461 */ (char)0xAD,
-/* U+2462 */ (char)0xAE,
-/* U+2463 */ (char)0xAF,
-/* U+2464 */ (char)0xB0,
-/* U+2465 */ (char)0xB1,
-/* U+2466 */ (char)0xB2,
-/* U+2467 */ (char)0xB3,
-/* U+2468 */ (char)0xB4,
-/* U+2469 */ (char)0xB5,
-};
-
-static const char unicode_to_dingbats_1b_25A0[] = {
-/* U+25A0 */ 0x6E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25B2 */ 0x73,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25BC */ 0x74,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25C6 */ 0x75,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25CF */ 0x6C,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+25D7 */ 0x77,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2605 */ 0x48,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+260E */ 0x25,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+261B */ 0x2A,
-0x00,
-0x00,
-/* U+261E */ 0x2B,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2660 */ (char)0xAB,
-0x00,
-0x00,
-/* U+2663 */ (char)0xA8,
-0x00,
-/* U+2665 */ (char)0xAA,
-/* U+2666 */ (char)0xA9,
-};
-
-static const char unicode_to_dingbats_1b_2701[] = {
-/* U+2701 */ 0x21,
-/* U+2702 */ 0x22,
-/* U+2703 */ 0x23,
-/* U+2704 */ 0x24,
-0x00,
-/* U+2706 */ 0x26,
-/* U+2707 */ 0x27,
-/* U+2708 */ 0x28,
-/* U+2709 */ 0x29,
-0x00,
-0x00,
-/* U+270C */ 0x2C,
-/* U+270D */ 0x2D,
-/* U+270E */ 0x2E,
-/* U+270F */ 0x2F,
-/* U+2710 */ 0x30,
-/* U+2711 */ 0x31,
-/* U+2712 */ 0x32,
-/* U+2713 */ 0x33,
-/* U+2714 */ 0x34,
-/* U+2715 */ 0x35,
-/* U+2716 */ 0x36,
-/* U+2717 */ 0x37,
-/* U+2718 */ 0x38,
-/* U+2719 */ 0x39,
-/* U+271A */ 0x3A,
-/* U+271B */ 0x3B,
-/* U+271C */ 0x3C,
-/* U+271D */ 0x3D,
-/* U+271E */ 0x3E,
-/* U+271F */ 0x3F,
-/* U+2720 */ 0x40,
-/* U+2721 */ 0x41,
-/* U+2722 */ 0x42,
-/* U+2723 */ 0x43,
-/* U+2724 */ 0x44,
-/* U+2725 */ 0x45,
-/* U+2726 */ 0x46,
-/* U+2727 */ 0x47,
-0x00,
-/* U+2729 */ 0x49,
-/* U+272A */ 0x4A,
-/* U+272B */ 0x4B,
-/* U+272C */ 0x4C,
-/* U+272D */ 0x4D,
-/* U+272E */ 0x4E,
-/* U+272F */ 0x4F,
-/* U+2730 */ 0x50,
-/* U+2731 */ 0x51,
-/* U+2732 */ 0x52,
-/* U+2733 */ 0x53,
-/* U+2734 */ 0x54,
-/* U+2735 */ 0x55,
-/* U+2736 */ 0x56,
-/* U+2737 */ 0x57,
-/* U+2738 */ 0x58,
-/* U+2739 */ 0x59,
-/* U+273A */ 0x5A,
-/* U+273B */ 0x5B,
-/* U+273C */ 0x5C,
-/* U+273D */ 0x5D,
-/* U+273E */ 0x5E,
-/* U+273F */ 0x5F,
-/* U+2740 */ 0x60,
-/* U+2741 */ 0x61,
-/* U+2742 */ 0x62,
-/* U+2743 */ 0x63,
-/* U+2744 */ 0x64,
-/* U+2745 */ 0x65,
-/* U+2746 */ 0x66,
-/* U+2747 */ 0x67,
-/* U+2748 */ 0x68,
-/* U+2749 */ 0x69,
-/* U+274A */ 0x6A,
-/* U+274B */ 0x6B,
-0x00,
-/* U+274D */ 0x6D,
-0x00,
-/* U+274F */ 0x6F,
-/* U+2750 */ 0x70,
-/* U+2751 */ 0x71,
-/* U+2752 */ 0x72,
-0x00,
-0x00,
-0x00,
-/* U+2756 */ 0x76,
-0x00,
-/* U+2758 */ 0x78,
-/* U+2759 */ 0x79,
-/* U+275A */ 0x7A,
-/* U+275B */ 0x7B,
-/* U+275C */ 0x7C,
-/* U+275D */ 0x7D,
-/* U+275E */ 0x7E,
-0x00,
-0x00,
-/* U+2761 */ (char)0xA1,
-/* U+2762 */ (char)0xA2,
-/* U+2763 */ (char)0xA3,
-/* U+2764 */ (char)0xA4,
-/* U+2765 */ (char)0xA5,
-/* U+2766 */ (char)0xA6,
-/* U+2767 */ (char)0xA7,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2776 */ (char)0xB6,
-/* U+2777 */ (char)0xB7,
-/* U+2778 */ (char)0xB8,
-/* U+2779 */ (char)0xB9,
-/* U+277A */ (char)0xBA,
-/* U+277B */ (char)0xBB,
-/* U+277C */ (char)0xBC,
-/* U+277D */ (char)0xBD,
-/* U+277E */ (char)0xBE,
-/* U+277F */ (char)0xBF,
-/* U+2780 */ (char)0xC0,
-/* U+2781 */ (char)0xC1,
-/* U+2782 */ (char)0xC2,
-/* U+2783 */ (char)0xC3,
-/* U+2784 */ (char)0xC4,
-/* U+2785 */ (char)0xC5,
-/* U+2786 */ (char)0xC6,
-/* U+2787 */ (char)0xC7,
-/* U+2788 */ (char)0xC8,
-/* U+2789 */ (char)0xC9,
-/* U+278A */ (char)0xCA,
-/* U+278B */ (char)0xCB,
-/* U+278C */ (char)0xCC,
-/* U+278D */ (char)0xCD,
-/* U+278E */ (char)0xCE,
-/* U+278F */ (char)0xCF,
-/* U+2790 */ (char)0xD0,
-/* U+2791 */ (char)0xD1,
-/* U+2792 */ (char)0xD2,
-/* U+2793 */ (char)0xD3,
-/* U+2794 */ (char)0xD4,
-0x00,
-0x00,
-0x00,
-/* U+2798 */ (char)0xD8,
-/* U+2799 */ (char)0xD9,
-/* U+279A */ (char)0xDA,
-/* U+279B */ (char)0xDB,
-/* U+279C */ (char)0xDC,
-/* U+279D */ (char)0xDD,
-/* U+279E */ (char)0xDE,
-/* U+279F */ (char)0xDF,
-/* U+27A0 */ (char)0xE0,
-/* U+27A1 */ (char)0xE1,
-/* U+27A2 */ (char)0xE2,
-/* U+27A3 */ (char)0xE3,
-/* U+27A4 */ (char)0xE4,
-/* U+27A5 */ (char)0xE5,
-/* U+27A6 */ (char)0xE6,
-/* U+27A7 */ (char)0xE7,
-/* U+27A8 */ (char)0xE8,
-/* U+27A9 */ (char)0xE9,
-/* U+27AA */ (char)0xEA,
-/* U+27AB */ (char)0xEB,
-/* U+27AC */ (char)0xEC,
-/* U+27AD */ (char)0xED,
-/* U+27AE */ (char)0xEE,
-/* U+27AF */ (char)0xEF,
-0x00,
-/* U+27B1 */ (char)0xF1,
-/* U+27B2 */ (char)0xF2,
-/* U+27B3 */ (char)0xF3,
-/* U+27B4 */ (char)0xF4,
-/* U+27B5 */ (char)0xF5,
-/* U+27B6 */ (char)0xF6,
-/* U+27B7 */ (char)0xF7,
-/* U+27B8 */ (char)0xF8,
-/* U+27B9 */ (char)0xF9,
-/* U+27BA */ (char)0xFA,
-/* U+27BB */ (char)0xFB,
-/* U+27BC */ (char)0xFC,
-/* U+27BD */ (char)0xFD,
-/* U+27BE */ (char)0xFE,
-};
-
-static const char unicode_to_dingbats_1b_F8D7[] = {
-/* U+F8D7 */ (char)0x80,
-/* U+F8D8 */ (char)0x81,
-/* U+F8D9 */ (char)0x82,
-/* U+F8DA */ (char)0x83,
-/* U+F8DB */ (char)0x84,
-/* U+F8DC */ (char)0x85,
-/* U+F8DD */ (char)0x86,
-/* U+F8DE */ (char)0x87,
-/* U+F8DF */ (char)0x88,
-/* U+F8E0 */ (char)0x89,
-/* U+F8E1 */ (char)0x8A,
-/* U+F8E2 */ (char)0x8B,
-/* U+F8E3 */ (char)0x8C,
-/* U+F8E4 */ (char)0x8D,
-};
--- a/DoConfig/fltk/src/xutf8/headers/spacing.h
+++ /dev/null
@@ -1,1978 +1,0 @@
-/* spacing */
-
-static const unsigned short ucs_table_0300[] = {
-/* U+0300 */ 0x0060,
-/* U+0301 */ 0x00B4,
-/* U+0302 */ 0x005E,
-/* U+0303 */ 0x02DC,
-/* U+0304 */ 0x00AF,
-/* U+0305 */ 0x203E,
-/* U+0306 */ 0x02D8,
-/* U+0307 */ 0x02D9,
-/* U+0308 */ 0x00A8,
-/* U+0309 */ 0x0309,
-/* U+030A */ 0x02DA,
-/* U+030B */ 0x02DD,
-/* U+030C */ 0x030C,
-/* U+030D */ 0x030D,
-/* U+030E */ 0x030E,
-/* U+030F */ 0x030F,
-/* U+0310 */ 0x0310,
-/* U+0311 */ 0x0311,
-/* U+0312 */ 0x0312,
-/* U+0313 */ 0x1FBD,
-/* U+0314 */ 0x1FFE,
-/* U+0315 */ 0x0315,
-/* U+0316 */ 0x0316,
-/* U+0317 */ 0x0317,
-/* U+0318 */ 0x0318,
-/* U+0319 */ 0x0319,
-/* U+031A */ 0x031A,
-/* U+031B */ 0x031B,
-/* U+031C */ 0x031C,
-/* U+031D */ 0x031D,
-/* U+031E */ 0x031E,
-/* U+031F */ 0x031F,
-/* U+0320 */ 0x0320,
-/* U+0321 */ 0x0321,
-/* U+0322 */ 0x0322,
-/* U+0323 */ 0x0323,
-/* U+0324 */ 0x0324,
-/* U+0325 */ 0x0325,
-/* U+0326 */ 0x0326,
-/* U+0327 */ 0x00B8,
-/* U+0328 */ 0x02DB,
-/* U+0329 */ 0x0329,
-/* U+032A */ 0x032A,
-/* U+032B */ 0x032B,
-/* U+032C */ 0x032C,
-/* U+032D */ 0x032D,
-/* U+032E */ 0x032E,
-/* U+032F */ 0x032F,
-/* U+0330 */ 0x0330,
-/* U+0331 */ 0x0331,
-/* U+0332 */ 0x005F,
-/* U+0333 */ 0x2017,
-/* U+0334 */ 0x0334,
-/* U+0335 */ 0x0335,
-/* U+0336 */ 0x0336,
-/* U+0337 */ 0x0337,
-/* U+0338 */ 0x0338,
-/* U+0339 */ 0x0339,
-/* U+033A */ 0x033A,
-/* U+033B */ 0x033B,
-/* U+033C */ 0x033C,
-/* U+033D */ 0x033D,
-/* U+033E */ 0x033E,
-/* U+033F */ 0x033F,
-/* U+0340 */ 0x0340,
-/* U+0341 */ 0x0341,
-/* U+0342 */ 0x1FC0,
-/* U+0343 */ 0x0343,
-/* U+0344 */ 0x0344,
-/* U+0345 */ 0x037A,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0360 */ 0x0360,
-/* U+0361 */ 0x0361,
-};
-
-static const unsigned short ucs_table_0483[] = {
-/* U+0483 */ 0x0483,
-/* U+0484 */ 0x0484,
-/* U+0485 */ 0x0485,
-/* U+0486 */ 0x0486,
-};
-
-static const unsigned short ucs_table_0591[] = {
-/* U+0591 */ 0x0591,
-/* U+0592 */ 0x0592,
-/* U+0593 */ 0x0593,
-/* U+0594 */ 0x0594,
-/* U+0595 */ 0x0595,
-/* U+0596 */ 0x0596,
-/* U+0597 */ 0x0597,
-/* U+0598 */ 0x0598,
-/* U+0599 */ 0x0599,
-/* U+059A */ 0x059A,
-/* U+059B */ 0x059B,
-/* U+059C */ 0x059C,
-/* U+059D */ 0x059D,
-/* U+059E */ 0x059E,
-/* U+059F */ 0x059F,
-/* U+05A0 */ 0x05A0,
-/* U+05A1 */ 0x05A1,
-0x00,
-/* U+05A3 */ 0x05A3,
-/* U+05A4 */ 0x05A4,
-/* U+05A5 */ 0x05A5,
-/* U+05A6 */ 0x05A6,
-/* U+05A7 */ 0x05A7,
-/* U+05A8 */ 0x05A8,
-/* U+05A9 */ 0x05A9,
-/* U+05AA */ 0x05AA,
-/* U+05AB */ 0x05AB,
-/* U+05AC */ 0x05AC,
-/* U+05AD */ 0x05AD,
-/* U+05AE */ 0x05AE,
-/* U+05AF */ 0x05AF,
-/* U+05B0 */ 0x05B0,
-/* U+05B1 */ 0x05B1,
-/* U+05B2 */ 0x05B2,
-/* U+05B3 */ 0x05B3,
-/* U+05B4 */ 0x05B4,
-/* U+05B5 */ 0x05B5,
-/* U+05B6 */ 0x05B6,
-/* U+05B7 */ 0x05B7,
-/* U+05B8 */ 0x05B8,
-/* U+05B9 */ 0x05B9,
-0x00,
-/* U+05BB */ 0x05BB,
-/* U+05BC */ 0x05BC,
-/* U+05BD */ 0x05BD,
-0x00,
-/* U+05BF */ 0x05BF,
-0x00,
-/* U+05C1 */ 0x05C1,
-/* U+05C2 */ 0x05C2,
-0x00,
-/* U+05C4 */ 0x05C4,
-};
-
-static const unsigned short ucs_table_064B[] = {
-/* U+064B */ 0xFE70,
-/* U+064C */ 0xFE72,
-/* U+064D */ 0xFE74,
-/* U+064E */ 0xFE76,
-/* U+064F */ 0xFE78,
-/* U+0650 */ 0xFE7A,
-/* U+0651 */ 0xFE7C,
-/* U+0652 */ 0xFE7E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0670 */ 0x0670,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+06D6 */ 0x06D6,
-/* U+06D7 */ 0x06D7,
-/* U+06D8 */ 0x06D8,
-/* U+06D9 */ 0x06D9,
-/* U+06DA */ 0x06DA,
-/* U+06DB */ 0x06DB,
-/* U+06DC */ 0x06DC,
-0x00,
-0x00,
-/* U+06DF */ 0x06DF,
-/* U+06E0 */ 0x06E0,
-/* U+06E1 */ 0x06E1,
-/* U+06E2 */ 0x06E2,
-/* U+06E3 */ 0x06E3,
-/* U+06E4 */ 0x06E4,
-0x00,
-0x00,
-/* U+06E7 */ 0x06E7,
-/* U+06E8 */ 0x06E8,
-0x00,
-/* U+06EA */ 0x06EA,
-/* U+06EB */ 0x06EB,
-/* U+06EC */ 0x06EC,
-/* U+06ED */ 0x06ED,
-};
-
-static const unsigned short ucs_table_0901[] = {
-/* U+0901 */ 0x0901,
-/* U+0902 */ 0x0902,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+093C */ 0x093C,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0941 */ 0x0941,
-/* U+0942 */ 0x0942,
-/* U+0943 */ 0x0943,
-/* U+0944 */ 0x0944,
-/* U+0945 */ 0x0945,
-/* U+0946 */ 0x0946,
-/* U+0947 */ 0x0947,
-/* U+0948 */ 0x0948,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+094D */ 0x094D,
-0x00,
-0x00,
-0x00,
-/* U+0951 */ 0x0951,
-/* U+0952 */ 0x0952,
-/* U+0953 */ 0x0953,
-/* U+0954 */ 0x0954,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0962 */ 0x0962,
-/* U+0963 */ 0x0963,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0981 */ 0x0981,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09BC */ 0x09BC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09C1 */ 0x09C1,
-/* U+09C2 */ 0x09C2,
-/* U+09C3 */ 0x09C3,
-/* U+09C4 */ 0x09C4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09CD */ 0x09CD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+09E2 */ 0x09E2,
-/* U+09E3 */ 0x09E3,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A02 */ 0x0A02,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A3C */ 0x0A3C,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A41 */ 0x0A41,
-/* U+0A42 */ 0x0A42,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A47 */ 0x0A47,
-/* U+0A48 */ 0x0A48,
-0x00,
-0x00,
-/* U+0A4B */ 0x0A4B,
-/* U+0A4C */ 0x0A4C,
-/* U+0A4D */ 0x0A4D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A70 */ 0x0A70,
-/* U+0A71 */ 0x0A71,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0A81 */ 0x0A81,
-/* U+0A82 */ 0x0A82,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0ABC */ 0x0ABC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0AC1 */ 0x0AC1,
-/* U+0AC2 */ 0x0AC2,
-/* U+0AC3 */ 0x0AC3,
-/* U+0AC4 */ 0x0AC4,
-/* U+0AC5 */ 0x0AC5,
-0x00,
-/* U+0AC7 */ 0x0AC7,
-/* U+0AC8 */ 0x0AC8,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0ACD */ 0x0ACD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B01 */ 0x0B01,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B3C */ 0x0B3C,
-0x00,
-0x00,
-/* U+0B3F */ 0x0B3F,
-0x00,
-/* U+0B41 */ 0x0B41,
-/* U+0B42 */ 0x0B42,
-/* U+0B43 */ 0x0B43,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B4D */ 0x0B4D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B56 */ 0x0B56,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0B82 */ 0x0B82,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0BC0 */ 0x0BC0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0BCD */ 0x0BCD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C3E */ 0x0C3E,
-/* U+0C3F */ 0x0C3F,
-/* U+0C40 */ 0x0C40,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C46 */ 0x0C46,
-/* U+0C47 */ 0x0C47,
-/* U+0C48 */ 0x0C48,
-0x00,
-/* U+0C4A */ 0x0C4A,
-/* U+0C4B */ 0x0C4B,
-/* U+0C4C */ 0x0C4C,
-/* U+0C4D */ 0x0C4D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0C55 */ 0x0C55,
-/* U+0C56 */ 0x0C56,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CBF */ 0x0CBF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CC6 */ 0x0CC6,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0CCC */ 0x0CCC,
-/* U+0CCD */ 0x0CCD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0D41 */ 0x0D41,
-/* U+0D42 */ 0x0D42,
-/* U+0D43 */ 0x0D43,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0D4D */ 0x0D4D,
-};
-
-static const unsigned short ucs_table_0E31[] = {
-/* U+0E31 */ 0x0E31,
-0x00,
-0x00,
-/* U+0E34 */ 0x0E34,
-/* U+0E35 */ 0x0E35,
-/* U+0E36 */ 0x0E36,
-/* U+0E37 */ 0x0E37,
-/* U+0E38 */ 0x0E38,
-/* U+0E39 */ 0x0E39,
-/* U+0E3A */ 0x0E3A,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0E47 */ 0x0E47,
-/* U+0E48 */ 0x0E48,
-/* U+0E49 */ 0x0E49,
-/* U+0E4A */ 0x0E4A,
-/* U+0E4B */ 0x0E4B,
-/* U+0E4C */ 0x0E4C,
-/* U+0E4D */ 0x0E4D,
-/* U+0E4E */ 0x0E4E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0EB1 */ 0x0EB1,
-0x00,
-0x00,
-/* U+0EB4 */ 0x0EB4,
-/* U+0EB5 */ 0x0EB5,
-/* U+0EB6 */ 0x0EB6,
-/* U+0EB7 */ 0x0EB7,
-/* U+0EB8 */ 0x0EB8,
-/* U+0EB9 */ 0x0EB9,
-0x00,
-/* U+0EBB */ 0x0EBB,
-/* U+0EBC */ 0x0EBC,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0EC8 */ 0x0EC8,
-/* U+0EC9 */ 0x0EC9,
-/* U+0ECA */ 0x0ECA,
-/* U+0ECB */ 0x0ECB,
-/* U+0ECC */ 0x0ECC,
-/* U+0ECD */ 0x0ECD,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0F18 */ 0x0F18,
-/* U+0F19 */ 0x0F19,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0F35 */ 0x0F35,
-0x00,
-/* U+0F37 */ 0x0F37,
-0x00,
-/* U+0F39 */ 0x0F39,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0F71 */ 0x0F71,
-/* U+0F72 */ 0x0F72,
-/* U+0F73 */ 0x0F73,
-/* U+0F74 */ 0x0F74,
-/* U+0F75 */ 0x0F75,
-/* U+0F76 */ 0x0F76,
-/* U+0F77 */ 0x0F77,
-/* U+0F78 */ 0x0F78,
-/* U+0F79 */ 0x0F79,
-/* U+0F7A */ 0x0F7A,
-/* U+0F7B */ 0x0F7B,
-/* U+0F7C */ 0x0F7C,
-/* U+0F7D */ 0x0F7D,
-/* U+0F7E */ 0x0F7E,
-0x00,
-/* U+0F80 */ 0x0F80,
-/* U+0F81 */ 0x0F81,
-/* U+0F82 */ 0x0F82,
-/* U+0F83 */ 0x0F83,
-/* U+0F84 */ 0x0F84,
-0x00,
-/* U+0F86 */ 0x0F86,
-/* U+0F87 */ 0x0F87,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+0F90 */ 0x0F90,
-/* U+0F91 */ 0x0F91,
-/* U+0F92 */ 0x0F92,
-/* U+0F93 */ 0x0F93,
-/* U+0F94 */ 0x0F94,
-/* U+0F95 */ 0x0F95,
-0x00,
-/* U+0F97 */ 0x0F97,
-0x00,
-/* U+0F99 */ 0x0F99,
-/* U+0F9A */ 0x0F9A,
-/* U+0F9B */ 0x0F9B,
-/* U+0F9C */ 0x0F9C,
-/* U+0F9D */ 0x0F9D,
-/* U+0F9E */ 0x0F9E,
-/* U+0F9F */ 0x0F9F,
-/* U+0FA0 */ 0x0FA0,
-/* U+0FA1 */ 0x0FA1,
-/* U+0FA2 */ 0x0FA2,
-/* U+0FA3 */ 0x0FA3,
-/* U+0FA4 */ 0x0FA4,
-/* U+0FA5 */ 0x0FA5,
-/* U+0FA6 */ 0x0FA6,
-/* U+0FA7 */ 0x0FA7,
-/* U+0FA8 */ 0x0FA8,
-/* U+0FA9 */ 0x0FA9,
-/* U+0FAA */ 0x0FAA,
-/* U+0FAB */ 0x0FAB,
-/* U+0FAC */ 0x0FAC,
-/* U+0FAD */ 0x0FAD,
-0x00,
-0x00,
-0x00,
-/* U+0FB1 */ 0x0FB1,
-/* U+0FB2 */ 0x0FB2,
-/* U+0FB3 */ 0x0FB3,
-/* U+0FB4 */ 0x0FB4,
-/* U+0FB5 */ 0x0FB5,
-/* U+0FB6 */ 0x0FB6,
-/* U+0FB7 */ 0x0FB7,
-0x00,
-/* U+0FB9 */ 0x0FB9,
-};
-
-static const unsigned short ucs_table_20D0[] = {
-/* U+20D0 */ 0x20D0,
-/* U+20D1 */ 0x20D1,
-/* U+20D2 */ 0x20D2,
-/* U+20D3 */ 0x20D3,
-/* U+20D4 */ 0x20D4,
-/* U+20D5 */ 0x20D5,
-/* U+20D6 */ 0x20D6,
-/* U+20D7 */ 0x20D7,
-/* U+20D8 */ 0x20D8,
-/* U+20D9 */ 0x20D9,
-/* U+20DA */ 0x20DA,
-/* U+20DB */ 0x20DB,
-/* U+20DC */ 0x20DC,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+20E1 */ 0x20E1,
-};
-
-static const unsigned short ucs_table_302A[] = {
-/* U+302A */ 0x302A,
-/* U+302B */ 0x302B,
-/* U+302C */ 0x302C,
-/* U+302D */ 0x302D,
-/* U+302E */ 0x302E,
-/* U+302F */ 0x302F,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+3099 */ 0x309B,
-/* U+309A */ 0x309C,
-};
-
-static const unsigned short ucs_table_FB1E[] = {
-/* U+FB1E */ 0xFB1E,
-};
-
-static const unsigned short ucs_table_FE20[] = {
-/* U+FE20 */ 0xFE20,
-/* U+FE21 */ 0xFE21,
-/* U+FE22 */ 0xFE22,
-/* U+FE23 */ 0xFE23,
-};
--- a/DoConfig/fltk/src/xutf8/headers/spacing_tbl.txt
+++ /dev/null
@@ -1,10 +1,0 @@
-ucs_table_0300[]; 	/* end: U+0361 */
-ucs_table_0483[]; 	/* end: U+0486 */
-ucs_table_0591[]; 	/* end: U+05C4 */
-ucs_table_064B[]; 	/* end: U+06ED */
-ucs_table_0901[]; 	/* end: U+0D4D */
-ucs_table_0E31[]; 	/* end: U+0FB9 */
-ucs_table_20D0[]; 	/* end: U+20E1 */
-ucs_table_302A[]; 	/* end: U+309A */
-ucs_table_FB1E[]; 	/* end: U+FB1E */
-ucs_table_FE20[]; 	/* end: U+FE23 */
--- a/DoConfig/fltk/src/xutf8/headers/symbol_.h
+++ /dev/null
@@ -1,1126 +1,0 @@
-/* symbol */
-
-static const char unicode_to_symbol_1b_0020[] = {
-/* U+0020 */ 0x20,
-/* U+0021 */ 0x21,
-0x00,
-/* U+0023 */ 0x23,
-0x00,
-/* U+0025 */ 0x25,
-/* U+0026 */ 0x26,
-0x00,
-/* U+0028 */ 0x28,
-/* U+0029 */ 0x29,
-0x00,
-/* U+002B */ 0x2B,
-/* U+002C */ 0x2C,
-0x00,
-/* U+002E */ 0x2E,
-/* U+002F */ 0x2F,
-/* U+0030 */ 0x30,
-/* U+0031 */ 0x31,
-/* U+0032 */ 0x32,
-/* U+0033 */ 0x33,
-/* U+0034 */ 0x34,
-/* U+0035 */ 0x35,
-/* U+0036 */ 0x36,
-/* U+0037 */ 0x37,
-/* U+0038 */ 0x38,
-/* U+0039 */ 0x39,
-/* U+003A */ 0x3A,
-/* U+003B */ 0x3B,
-/* U+003C */ 0x3C,
-/* U+003D */ 0x3D,
-/* U+003E */ 0x3E,
-/* U+003F */ 0x3F,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+005B */ 0x5B,
-0x00,
-/* U+005D */ 0x5D,
-0x00,
-/* U+005F */ 0x5F,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+007B */ 0x7B,
-/* U+007C */ 0x7C,
-/* U+007D */ 0x7D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00A0 */ 0x20,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00AC */ (char)0xD8,
-0x00,
-0x00,
-0x00,
-/* U+00B0 */ (char)0xB0,
-/* U+00B1 */ (char)0xB1,
-0x00,
-0x00,
-0x00,
-/* U+00B5 */ 0x6D,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00D7 */ (char)0xB4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+00F7 */ (char)0xB8,
-};
-
-static const char unicode_to_symbol_1b_0192[] = {
-/* U+0192 */ (char)0xA6,
-};
-
-static const char unicode_to_symbol_1b_0391[] = {
-/* U+0391 */ 0x41,
-/* U+0392 */ 0x42,
-/* U+0393 */ 0x47,
-/* U+0394 */ 0x44,
-/* U+0395 */ 0x45,
-/* U+0396 */ 0x5A,
-/* U+0397 */ 0x48,
-/* U+0398 */ 0x51,
-/* U+0399 */ 0x49,
-/* U+039A */ 0x4B,
-/* U+039B */ 0x4C,
-/* U+039C */ 0x4D,
-/* U+039D */ 0x4E,
-/* U+039E */ 0x58,
-/* U+039F */ 0x4F,
-/* U+03A0 */ 0x50,
-/* U+03A1 */ 0x52,
-0x00,
-/* U+03A3 */ 0x53,
-/* U+03A4 */ 0x54,
-/* U+03A5 */ 0x55,
-/* U+03A6 */ 0x46,
-/* U+03A7 */ 0x43,
-/* U+03A8 */ 0x59,
-/* U+03A9 */ 0x57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03B1 */ 0x61,
-/* U+03B2 */ 0x62,
-/* U+03B3 */ 0x67,
-/* U+03B4 */ 0x64,
-/* U+03B5 */ 0x65,
-/* U+03B6 */ 0x7A,
-/* U+03B7 */ 0x68,
-/* U+03B8 */ 0x71,
-/* U+03B9 */ 0x69,
-/* U+03BA */ 0x6B,
-/* U+03BB */ 0x6C,
-/* U+03BC */ 0x6D,
-/* U+03BD */ 0x6E,
-/* U+03BE */ 0x78,
-/* U+03BF */ 0x6F,
-/* U+03C0 */ 0x70,
-/* U+03C1 */ 0x72,
-/* U+03C2 */ 0x56,
-/* U+03C3 */ 0x73,
-/* U+03C4 */ 0x74,
-/* U+03C5 */ 0x75,
-/* U+03C6 */ 0x66,
-/* U+03C7 */ 0x63,
-/* U+03C8 */ 0x79,
-/* U+03C9 */ 0x77,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+03D1 */ 0x4A,
-/* U+03D2 */ (char)0xA1,
-0x00,
-0x00,
-/* U+03D5 */ 0x6A,
-/* U+03D6 */ 0x76,
-};
-
-static const char unicode_to_symbol_1b_2022[] = {
-/* U+2022 */ (char)0xB7,
-0x00,
-0x00,
-0x00,
-/* U+2026 */ (char)0xBC,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2032 */ (char)0xA2,
-/* U+2033 */ (char)0xB2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2044 */ (char)0xA4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+20AC */ (char)0xA0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2111 */ (char)0xC1,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2118 */ (char)0xC3,
-0x00,
-0x00,
-0x00,
-/* U+211C */ (char)0xC2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2126 */ 0x57,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2135 */ (char)0xC0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2190 */ (char)0xAC,
-/* U+2191 */ (char)0xAD,
-/* U+2192 */ (char)0xAE,
-/* U+2193 */ (char)0xAF,
-/* U+2194 */ (char)0xAB,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+21B5 */ (char)0xBF,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+21D0 */ (char)0xDC,
-/* U+21D1 */ (char)0xDD,
-/* U+21D2 */ (char)0xDE,
-/* U+21D3 */ (char)0xDF,
-/* U+21D4 */ (char)0xDB,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2200 */ 0x22,
-0x00,
-/* U+2202 */ (char)0xB6,
-/* U+2203 */ 0x24,
-0x00,
-/* U+2205 */ (char)0xC6,
-/* U+2206 */ 0x44,
-/* U+2207 */ (char)0xD1,
-/* U+2208 */ (char)0xCE,
-/* U+2209 */ (char)0xCF,
-0x00,
-/* U+220B */ 0x27,
-0x00,
-0x00,
-0x00,
-/* U+220F */ (char)0xD5,
-0x00,
-/* U+2211 */ (char)0xE5,
-/* U+2212 */ 0x2D,
-0x00,
-0x00,
-/* U+2215 */ (char)0xA4,
-0x00,
-/* U+2217 */ 0x2A,
-0x00,
-0x00,
-/* U+221A */ (char)0xD6,
-0x00,
-0x00,
-/* U+221D */ (char)0xB5,
-/* U+221E */ (char)0xA5,
-0x00,
-/* U+2220 */ (char)0xD0,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2227 */ (char)0xD9,
-/* U+2228 */ (char)0xDA,
-/* U+2229 */ (char)0xC7,
-/* U+222A */ (char)0xC8,
-/* U+222B */ (char)0xF2,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2234 */ 0x5C,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+223C */ 0x7E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2245 */ 0x40,
-0x00,
-0x00,
-/* U+2248 */ (char)0xBB,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2260 */ (char)0xB9,
-/* U+2261 */ (char)0xBA,
-0x00,
-0x00,
-/* U+2264 */ (char)0xA3,
-/* U+2265 */ (char)0xB3,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2282 */ (char)0xCC,
-/* U+2283 */ (char)0xC9,
-/* U+2284 */ (char)0xCB,
-0x00,
-/* U+2286 */ (char)0xCD,
-/* U+2287 */ (char)0xCA,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2295 */ (char)0xC5,
-0x00,
-/* U+2297 */ (char)0xC4,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+22A5 */ 0x5E,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+22C5 */ (char)0xD7,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2320 */ (char)0xF3,
-/* U+2321 */ (char)0xF5,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-0x00,
-/* U+2329 */ (char)0xE1,
-/* U+232A */ (char)0xF1,
-};
-
-static const char unicode_to_symbol_1b_25CA[] = {
-/* U+25CA */ (char)0xE0,
-};
-
-static const char unicode_to_symbol_1b_2660[] = {
-/* U+2660 */ (char)0xAA,
-0x00,
-0x00,
-/* U+2663 */ (char)0xA7,
-0x00,
-/* U+2665 */ (char)0xA9,
-/* U+2666 */ (char)0xA8,
-};
-
-static const char unicode_to_symbol_1b_F6D9[] = {
-/* U+F6D9 */ (char)0xD3,
-/* U+F6DA */ (char)0xD2,
-/* U+F6DB */ (char)0xD4,
-};
-
-static const char unicode_to_symbol_1b_F8E5[] = {
-/* U+F8E5 */ 0x60,
-/* U+F8E6 */ (char)0xBD,
-/* U+F8E7 */ (char)0xBE,
-/* U+F8E8 */ (char)0xE2,
-/* U+F8E9 */ (char)0xE3,
-/* U+F8EA */ (char)0xE4,
-/* U+F8EB */ (char)0xE6,
-/* U+F8EC */ (char)0xE7,
-/* U+F8ED */ (char)0xE8,
-/* U+F8EE */ (char)0xE9,
-/* U+F8EF */ (char)0xEA,
-/* U+F8F0 */ (char)0xEB,
-/* U+F8F1 */ (char)0xEC,
-/* U+F8F2 */ (char)0xED,
-/* U+F8F3 */ (char)0xEE,
-/* U+F8F4 */ (char)0xEF,
-/* U+F8F5 */ (char)0xF4,
-/* U+F8F6 */ (char)0xF6,
-/* U+F8F7 */ (char)0xF7,
-/* U+F8F8 */ (char)0xF8,
-/* U+F8F9 */ (char)0xF9,
-/* U+F8FA */ (char)0xFA,
-/* U+F8FB */ (char)0xFB,
-/* U+F8FC */ (char)0xFC,
-/* U+F8FD */ (char)0xFD,
-/* U+F8FE */ (char)0xFE,
-};
--- a/DoConfig/fltk/src/xutf8/headers/tbl.txt
+++ /dev/null
@@ -1,122 +1,0 @@
-unicode_to_iso8859_1_1b_0001[]; 	/* end: U+00FF */
-unicode_to_iso8859_2_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_2_1b_02C7[]; 	/* end: U+02DD */
-unicode_to_iso8859_3_1b_0001[]; 	/* end: U+017C */
-unicode_to_iso8859_3_1b_02D8[]; 	/* end: U+02D9 */
-unicode_to_iso8859_4_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_4_1b_02C7[]; 	/* end: U+02DB */
-unicode_to_iso8859_5_1b_0001[]; 	/* end: U+00AD */
-unicode_to_iso8859_5_1b_0401[]; 	/* end: U+045F */
-unicode_to_iso8859_5_1b_2116[]; 	/* end: U+2116 */
-unicode_to_iso8859_6_1b_0001[]; 	/* end: U+00AD */
-unicode_to_iso8859_6_1b_060C[]; 	/* end: U+0652 */
-unicode_to_iso8859_7_1b_0001[]; 	/* end: U+00BD */
-unicode_to_iso8859_7_1b_0384[]; 	/* end: U+03CE */
-unicode_to_iso8859_7_1b_2015[]; 	/* end: U+2019 */
-unicode_to_iso8859_8_1b_0001[]; 	/* end: U+00F7 */
-unicode_to_iso8859_8_1b_05D0[]; 	/* end: U+05EA */
-unicode_to_iso8859_8_1b_200E[]; 	/* end: U+2017 */
-unicode_to_iso8859_9_1b_0001[]; 	/* end: U+015F */
-unicode_to_iso8859_10_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_10_1b_2015[]; 	/* end: U+2015 */
-unicode_to_iso8859_13_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_13_1b_2019[]; 	/* end: U+201E */
-unicode_to_iso8859_14_1b_0001[]; 	/* end: U+0178 */
-unicode_to_iso8859_14_1b_1E02[]; 	/* end: U+1EF3 */
-unicode_to_iso8859_15_1b_0001[]; 	/* end: U+017E */
-unicode_to_iso8859_15_1b_20AC[]; 	/* end: U+20AC */
-unicode_to_koi8_1_1b_0001[]; 	/* end: U+00F7 */
-unicode_to_koi8_1_1b_0401[]; 	/* end: U+0451 */
-unicode_to_koi8_1_1b_2219[]; 	/* end: U+2265 */
-unicode_to_koi8_1_1b_2320[]; 	/* end: U+2321 */
-unicode_to_koi8_1_1b_2500[]; 	/* end: U+25A0 */
-unicode_to_big5_0_2b_00A2[]; 	/* end: U+00F7 */
-unicode_to_big5_0_2b_02C7[]; 	/* end: U+02D9 */
-unicode_to_big5_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_big5_0_2b_2013[]; 	/* end: U+203E */
-unicode_to_big5_0_2b_2103[]; 	/* end: U+2199 */
-unicode_to_big5_0_2b_221A[]; 	/* end: U+22BF */
-unicode_to_big5_0_2b_2460[]; 	/* end: U+247D */
-unicode_to_big5_0_2b_2500[]; 	/* end: U+2642 */
-unicode_to_big5_0_2b_3000[]; 	/* end: U+3129 */
-unicode_to_big5_0_2b_32A3[]; 	/* end: U+32A3 */
-unicode_to_big5_0_2b_338E[]; 	/* end: U+33D5 */
-unicode_to_big5_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_big5_0_2b_7F36[]; 	/* end: U+8B9F */
-unicode_to_big5_0_2b_8C37[]; 	/* end: U+9483 */
-unicode_to_big5_0_2b_9577[]; 	/* end: U+9FA4 */
-unicode_to_big5_0_2b_FA0C[]; 	/* end: U+FA0D */
-unicode_to_big5_0_2b_FE30[]; 	/* end: U+FE6B */
-unicode_to_big5_0_2b_FF01[]; 	/* end: U+FF64 */
-unicode_to_big5_0_2b_FFFD[]; 	/* end: U+FFFD */
-unicode_to_ksc5601_1987_0_2b_00A1[]; 	/* end: U+0167 */
-unicode_to_ksc5601_1987_0_2b_02C7[]; 	/* end: U+02DD */
-unicode_to_ksc5601_1987_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_ksc5601_1987_0_2b_2015[]; 	/* end: U+2312 */
-unicode_to_ksc5601_1987_0_2b_2460[]; 	/* end: U+266D */
-unicode_to_ksc5601_1987_0_2b_3000[]; 	/* end: U+327F */
-unicode_to_ksc5601_1987_0_2b_3380[]; 	/* end: U+33DD */
-unicode_to_ksc5601_1987_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_ksc5601_1987_0_2b_7F36[]; 	/* end: U+8B9A */
-unicode_to_ksc5601_1987_0_2b_8C37[]; 	/* end: U+947F */
-unicode_to_ksc5601_1987_0_2b_9577[]; 	/* end: U+9C57 */
-unicode_to_ksc5601_1987_0_2b_9CE5[]; 	/* end: U+9F9C */
-unicode_to_ksc5601_1987_0_2b_AC00[]; 	/* end: U+D79D */
-unicode_to_ksc5601_1987_0_2b_F900[]; 	/* end: U+FA0B */
-unicode_to_ksc5601_1987_0_2b_FF01[]; 	/* end: U+FF5E */
-unicode_to_ksc5601_1987_0_2b_FFE0[]; 	/* end: U+FFE6 */
-unicode_to_gb2312_1980_0_2b_00A4[]; 	/* end: U+01DC */
-unicode_to_gb2312_1980_0_2b_02C7[]; 	/* end: U+02C9 */
-unicode_to_gb2312_1980_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_gb2312_1980_0_2b_2015[]; 	/* end: U+203B */
-unicode_to_gb2312_1980_0_2b_2103[]; 	/* end: U+2312 */
-unicode_to_gb2312_1980_0_2b_2460[]; 	/* end: U+2642 */
-unicode_to_gb2312_1980_0_2b_3000[]; 	/* end: U+3129 */
-unicode_to_gb2312_1980_0_2b_3220[]; 	/* end: U+3229 */
-unicode_to_gb2312_1980_0_2b_4E00[]; 	/* end: U+7DAE */
-unicode_to_gb2312_1980_0_2b_7E3B[]; 	/* end: U+8C98 */
-unicode_to_gb2312_1980_0_2b_8D1D[]; 	/* end: U+8ECE */
-unicode_to_gb2312_1980_0_2b_8F66[]; 	/* end: U+91DC */
-unicode_to_gb2312_1980_0_2b_9274[]; 	/* end: U+99A8 */
-unicode_to_gb2312_1980_0_2b_9A6C[]; 	/* end: U+9B54 */
-unicode_to_gb2312_1980_0_2b_9C7C[]; 	/* end: U+9CE2 */
-unicode_to_gb2312_1980_0_2b_9E1F[]; 	/* end: U+9FA0 */
-unicode_to_gb2312_1980_0_2b_FF01[]; 	/* end: U+FF5E */
-unicode_to_gb2312_1980_0_2b_FFE0[]; 	/* end: U+FFE5 */
-unicode_to_jisx0201_1976_0_1b_0020[]; 	/* end: U+00A5 */
-unicode_to_jisx0201_1976_0_1b_203E[]; 	/* end: U+203E */
-unicode_to_jisx0201_1976_0_1b_FF61[]; 	/* end: U+FF9F */
-unicode_to_jisx0208_1983_0_2b_005C[]; 	/* end: U+00F7 */
-unicode_to_jisx0208_1983_0_2b_0391[]; 	/* end: U+0451 */
-unicode_to_jisx0208_1983_0_2b_2010[]; 	/* end: U+203B */
-unicode_to_jisx0208_1983_0_2b_2103[]; 	/* end: U+2312 */
-unicode_to_jisx0208_1983_0_2b_2500[]; 	/* end: U+266F */
-unicode_to_jisx0208_1983_0_2b_3000[]; 	/* end: U+30FE */
-unicode_to_jisx0208_1983_0_2b_4E00[]; 	/* end: U+7E9C */
-unicode_to_jisx0208_1983_0_2b_7F36[]; 	/* end: U+8B9A */
-unicode_to_jisx0208_1983_0_2b_8C37[]; 	/* end: U+9481 */
-unicode_to_jisx0208_1983_0_2b_9577[]; 	/* end: U+9FA0 */
-unicode_to_jisx0208_1983_0_2b_FF01[]; 	/* end: U+FF5D */
-unicode_to_jisx0208_1983_0_2b_FFE3[]; 	/* end: U+FFE5 */
-unicode_to_jisx0212_1990_0_2b_007E[]; 	/* end: U+01F5 */
-unicode_to_jisx0212_1990_0_2b_02C7[]; 	/* end: U+02DD */
-unicode_to_jisx0212_1990_0_2b_0384[]; 	/* end: U+045F */
-unicode_to_jisx0212_1990_0_2b_2116[]; 	/* end: U+2122 */
-unicode_to_jisx0212_1990_0_2b_4E02[]; 	/* end: U+7E9E */
-unicode_to_jisx0212_1990_0_2b_7F3B[]; 	/* end: U+8B9F */
-unicode_to_jisx0212_1990_0_2b_8C38[]; 	/* end: U+9484 */
-unicode_to_jisx0212_1990_0_2b_9578[]; 	/* end: U+9FA5 */
-unicode_to_symbol_1b_0020[]; 	/* end: U+00F7 */
-unicode_to_symbol_1b_0192[]; 	/* end: U+0192 */
-unicode_to_symbol_1b_0391[]; 	/* end: U+03D6 */
-unicode_to_symbol_1b_2022[]; 	/* end: U+232A */
-unicode_to_symbol_1b_25CA[]; 	/* end: U+25CA */
-unicode_to_symbol_1b_2660[]; 	/* end: U+2666 */
-unicode_to_symbol_1b_F6D9[]; 	/* end: U+F6DB */
-unicode_to_symbol_1b_F8E5[]; 	/* end: U+F8FE */
-unicode_to_dingbats_1b_0020[]; 	/* end: U+00A0 */
-unicode_to_dingbats_1b_2192[]; 	/* end: U+2195 */
-unicode_to_dingbats_1b_2460[]; 	/* end: U+2469 */
-unicode_to_dingbats_1b_25A0[]; 	/* end: U+2666 */
-unicode_to_dingbats_1b_2701[]; 	/* end: U+27BE */
-unicode_to_dingbats_1b_F8D7[]; 	/* end: U+F8E4 */
--- a/DoConfig/fltk/src/xutf8/imKStoUCS.c
+++ /dev/null
@@ -1,324 +1,0 @@
-/* $XFree86: xc/lib/X11/imKStoUCS.c,v 1.5 2003/11/17 22:20:11 dawes Exp $ */
-
-#include "Xlibint.h"
-#include "Ximint.h"
-
-static unsigned short const keysym_to_unicode_1a1_1ff[] = {
-            0x0104, 0x02d8, 0x0141, 0x0000, 0x013d, 0x015a, 0x0000, /* 0x01a0-0x01a7 */
-    0x0000, 0x0160, 0x015e, 0x0164, 0x0179, 0x0000, 0x017d, 0x017b, /* 0x01a8-0x01af */
-    0x0000, 0x0105, 0x02db, 0x0142, 0x0000, 0x013e, 0x015b, 0x02c7, /* 0x01b0-0x01b7 */
-    0x0000, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, /* 0x01b8-0x01bf */
-    0x0154, 0x0000, 0x0000, 0x0102, 0x0000, 0x0139, 0x0106, 0x0000, /* 0x01c0-0x01c7 */
-    0x010c, 0x0000, 0x0118, 0x0000, 0x011a, 0x0000, 0x0000, 0x010e, /* 0x01c8-0x01cf */
-    0x0110, 0x0143, 0x0147, 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, /* 0x01d0-0x01d7 */
-    0x0158, 0x016e, 0x0000, 0x0170, 0x0000, 0x0000, 0x0162, 0x0000, /* 0x01d8-0x01df */
-    0x0155, 0x0000, 0x0000, 0x0103, 0x0000, 0x013a, 0x0107, 0x0000, /* 0x01e0-0x01e7 */
-    0x010d, 0x0000, 0x0119, 0x0000, 0x011b, 0x0000, 0x0000, 0x010f, /* 0x01e8-0x01ef */
-    0x0111, 0x0144, 0x0148, 0x0000, 0x0000, 0x0151, 0x0000, 0x0000, /* 0x01f0-0x01f7 */
-    0x0159, 0x016f, 0x0000, 0x0171, 0x0000, 0x0000, 0x0163, 0x02d9  /* 0x01f8-0x01ff */
-};
-
-static unsigned short const keysym_to_unicode_2a1_2fe[] = {
-            0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0000, /* 0x02a0-0x02a7 */
-    0x0000, 0x0130, 0x0000, 0x011e, 0x0134, 0x0000, 0x0000, 0x0000, /* 0x02a8-0x02af */
-    0x0000, 0x0127, 0x0000, 0x0000, 0x0000, 0x0000, 0x0125, 0x0000, /* 0x02b0-0x02b7 */
-    0x0000, 0x0131, 0x0000, 0x011f, 0x0135, 0x0000, 0x0000, 0x0000, /* 0x02b8-0x02bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010a, 0x0108, 0x0000, /* 0x02c0-0x02c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02c8-0x02cf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, 0x0000, 0x0000, /* 0x02d0-0x02d7 */
-    0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x016c, 0x015c, 0x0000, /* 0x02d8-0x02df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010b, 0x0109, 0x0000, /* 0x02e0-0x02e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02e8-0x02ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, /* 0x02f0-0x02f7 */
-    0x011d, 0x0000, 0x0000, 0x0000, 0x0000, 0x016d, 0x015d          /* 0x02f8-0x02ff */
-};
-
-static unsigned short const keysym_to_unicode_3a2_3fe[] = {
-                    0x0138, 0x0156, 0x0000, 0x0128, 0x013b, 0x0000, /* 0x03a0-0x03a7 */
-    0x0000, 0x0000, 0x0112, 0x0122, 0x0166, 0x0000, 0x0000, 0x0000, /* 0x03a8-0x03af */
-    0x0000, 0x0000, 0x0000, 0x0157, 0x0000, 0x0129, 0x013c, 0x0000, /* 0x03b0-0x03b7 */
-    0x0000, 0x0000, 0x0113, 0x0123, 0x0167, 0x014a, 0x0000, 0x014b, /* 0x03b8-0x03bf */
-    0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012e, /* 0x03c0-0x03c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0000, 0x0000, 0x012a, /* 0x03c8-0x03cf */
-    0x0000, 0x0145, 0x014c, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03d0-0x03d7 */
-    0x0000, 0x0172, 0x0000, 0x0000, 0x0000, 0x0168, 0x016a, 0x0000, /* 0x03d8-0x03df */
-    0x0101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012f, /* 0x03e0-0x03e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x012b, /* 0x03e8-0x03ef */
-    0x0000, 0x0146, 0x014d, 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03f0-0x03f7 */
-    0x0000, 0x0173, 0x0000, 0x0000, 0x0000, 0x0169, 0x016b          /* 0x03f8-0x03ff */
-};
-
-static unsigned short const keysym_to_unicode_4a1_4df[] = {
-            0x3002, 0x3008, 0x3009, 0x3001, 0x30fb, 0x30f2, 0x30a1, /* 0x04a0-0x04a7 */
-    0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, /* 0x04a8-0x04af */
-    0x30fc, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, /* 0x04b0-0x04b7 */
-    0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, /* 0x04b8-0x04bf */
-    0x30bf, 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, /* 0x04c0-0x04c7 */
-    0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, /* 0x04c8-0x04cf */
-    0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, /* 0x04d0-0x04d7 */
-    0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x309b, 0x309c  /* 0x04d8-0x04df */
-};
-
-static unsigned short const keysym_to_unicode_590_5fe[] = {
-    0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7, /* 0x0590-0x0597 */
-    0x06f8, 0x06f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0598-0x059f */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x066a, 0x0670, 0x0679, /* 0x05a0-0x05a7 */
-	
-    0x067e, 0x0686, 0x0688, 0x0691, 0x060c, 0x0000, 0x06d4, 0x0000, /* 0x05ac-0x05af */
-    0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, /* 0x05b0-0x05b7 */
-    0x0668, 0x0669, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, /* 0x05b8-0x05bf */
-    0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0x05c0-0x05c7 */
-    0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0x05c8-0x05cf */
-    0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, /* 0x05d0-0x05d7 */
-    0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x05d8-0x05df */
-    0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0x05e0-0x05e7 */
-    0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, /* 0x05e8-0x05ef */
-    0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, 0x0698, 0x06a4, /* 0x05f0-0x05f7 */
-    0x06a9, 0x06af, 0x06ba, 0x06be, 0x06cc, 0x06d2, 0x06c1          /* 0x05f8-0x05fe */
-};
-
-static unsigned short keysym_to_unicode_680_6ff[] = {
-    0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2, /* 0x0680-0x0687 */
-    0x04b6, 0x04b8, 0x04ba, 0x0000, 0x04d8, 0x04e2, 0x04e8, 0x04ee, /* 0x0688-0x068f */
-    0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3, /* 0x0690-0x0697 */
-    0x04b7, 0x04b9, 0x04bb, 0x0000, 0x04d9, 0x04e3, 0x04e9, 0x04ef, /* 0x0698-0x069f */
-    0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x06a0-0x06a7 */
-    0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f, /* 0x06a8-0x06af */
-    0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, /* 0x06b0-0x06b7 */
-    0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f, /* 0x06b8-0x06bf */
-    0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0x06c0-0x06c7 */
-    0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0x06c8-0x06cf */
-    0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0x06d0-0x06d7 */
-    0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0x06d8-0x06df */
-    0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0x06e0-0x06e7 */
-    0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0x06e8-0x06ef */
-    0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0x06f0-0x06f7 */
-    0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a  /* 0x06f8-0x06ff */
-};
-
-static unsigned short const keysym_to_unicode_7a1_7f9[] = {
-            0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, /* 0x07a0-0x07a7 */
-    0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, /* 0x07a8-0x07af */
-    0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, /* 0x07b0-0x07b7 */
-    0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07b8-0x07bf */
-    0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x07c0-0x07c7 */
-    0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, /* 0x07c8-0x07cf */
-    0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, /* 0x07d0-0x07d7 */
-    0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07d8-0x07df */
-    0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, /* 0x07e0-0x07e7 */
-    0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, /* 0x07e8-0x07ef */
-    0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, /* 0x07f0-0x07f7 */
-    0x03c8, 0x03c9                                                  /* 0x07f8-0x07ff */
-};
-
-static unsigned short const keysym_to_unicode_8a4_8fe[] = {
-                                    0x2320, 0x2321, 0x0000, 0x231c, /* 0x08a0-0x08a7 */
-    0x231d, 0x231e, 0x231f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08a8-0x08af */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08b0-0x08b7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222b, /* 0x08b8-0x08bf */
-    0x2234, 0x0000, 0x221e, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, /* 0x08c0-0x08c7 */
-    0x2245, 0x2246, 0x0000, 0x0000, 0x0000, 0x0000, 0x22a2, 0x0000, /* 0x08c8-0x08cf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221a, 0x0000, /* 0x08d0-0x08d7 */
-    0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222a, 0x2227, 0x2228, /* 0x08d8-0x08df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08e0-0x08e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08e8-0x08ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, /* 0x08f0-0x08f7 */
-    0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193          /* 0x08f8-0x08ff */
-};
-
-static unsigned short const keysym_to_unicode_9df_9f8[] = {
-                                                            0x2422, /* 0x09d8-0x09df */
-    0x2666, 0x25a6, 0x2409, 0x240c, 0x240d, 0x240a, 0x0000, 0x0000, /* 0x09e0-0x09e7 */
-    0x240a, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x2500, /* 0x09e8-0x09ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x251c, 0x2524, 0x2534, 0x252c, /* 0x09f0-0x09f7 */
-    0x2502                                                          /* 0x09f8-0x09ff */
-};
-
-static unsigned short const keysym_to_unicode_aa1_afe[] = {
-            0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, /* 0x0aa0-0x0aa7 */
-    0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, /* 0x0aa8-0x0aaf */
-    0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, /* 0x0ab0-0x0ab7 */
-    0x2105, 0x0000, 0x0000, 0x2012, 0x2039, 0x2024, 0x203a, 0x0000, /* 0x0ab8-0x0abf */
-    0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, /* 0x0ac0-0x0ac7 */
-    0x0000, 0x2122, 0x2120, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25ad, /* 0x0ac8-0x0acf */
-    0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, /* 0x0ad0-0x0ad7 */
-    0x0000, 0x271d, 0x0000, 0x220e, 0x25c2, 0x2023, 0x25cf, 0x25ac, /* 0x0ad8-0x0adf */
-    0x25e6, 0x25ab, 0x25ae, 0x25b5, 0x25bf, 0x2606, 0x2022, 0x25aa, /* 0x0ae0-0x0ae7 */
-    0x25b4, 0x25be, 0x261a, 0x261b, 0x2663, 0x2666, 0x2665, 0x0000, /* 0x0ae8-0x0aef */
-    0x2720, 0x2020, 0x2021, 0x2713, 0x2612, 0x266f, 0x266d, 0x2642, /* 0x0af0-0x0af7 */
-    0x2640, 0x2121, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e          /* 0x0af8-0x0aff */
-};
-
-/* none of the APL keysyms match the Unicode characters */
-
-static unsigned short const keysym_to_unicode_cdf_cfa[] = {
-                                                            0x2017, /* 0x0cd8-0x0cdf */
-    0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, /* 0x0ce0-0x0ce7 */
-    0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0x0ce8-0x0cef */
-    0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, /* 0x0cf0-0x0cf7 */
-    0x05e8, 0x05e9, 0x05ea                                          /* 0x0cf8-0x0cff */
-};
-
-static unsigned short const keysym_to_unicode_da1_df9[] = {
-            0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, /* 0x0da0-0x0da7 */
-    0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0x0da8-0x0daf */
-    0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, /* 0x0db0-0x0db7 */
-    0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0x0db8-0x0dbf */
-    0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, /* 0x0dc0-0x0dc7 */
-    0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0x0dc8-0x0dcf */
-    0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, /* 0x0dd0-0x0dd7 */
-    0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0e3e, 0x0e3f, /* 0x0dd8-0x0ddf */
-    0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, /* 0x0de0-0x0de7 */
-    0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0000, 0x0000, /* 0x0de8-0x0def */
-    0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, /* 0x0df0-0x0df7 */
-    0x0e58, 0x0e59                                                  /* 0x0df8-0x0dff */
-};
-
-static unsigned short const keysym_to_unicode_ea0_eff[] = {
-    0x0000, 0x1101, 0x1101, 0x11aa, 0x1102, 0x11ac, 0x11ad, 0x1103, /* 0x0ea0-0x0ea7 */
-    0x1104, 0x1105, 0x11b0, 0x11b1, 0x11b2, 0x11b3, 0x11b4, 0x11b5, /* 0x0ea8-0x0eaf */
-    0x11b6, 0x1106, 0x1107, 0x1108, 0x11b9, 0x1109, 0x110a, 0x110b, /* 0x0eb0-0x0eb7 */
-    0x110c, 0x110d, 0x110e, 0x110f, 0x1110, 0x1111, 0x1112, 0x1161, /* 0x0eb8-0x0ebf */
-    0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, /* 0x0ec0-0x0ec7 */
-    0x116a, 0x116b, 0x116c, 0x116d, 0x116e, 0x116f, 0x1170, 0x1171, /* 0x0ec8-0x0ecf */
-    0x1172, 0x1173, 0x1174, 0x1175, 0x11a8, 0x11a9, 0x11aa, 0x11ab, /* 0x0ed0-0x0ed7 */
-    0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, /* 0x0ed8-0x0edf */
-    0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, /* 0x0ee0-0x0ee7 */
-    0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x0000, /* 0x0ee8-0x0eef */
-    0x0000, 0x0000, 0x1140, 0x0000, 0x0000, 0x1159, 0x119e, 0x0000, /* 0x0ef0-0x0ef7 */
-    0x11eb, 0x0000, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9, /* 0x0ef8-0x0eff */
-};
-
-static unsigned short keysym_to_unicode_12a1_12fe[] = {
-            0x1e02, 0x1e03, 0x0000, 0x0000, 0x0000, 0x1e0a, 0x0000, /* 0x12a0-0x12a7 */
-    0x1e80, 0x0000, 0x1e82, 0x1e0b, 0x1ef2, 0x0000, 0x0000, 0x0000, /* 0x12a8-0x12af */
-    0x1e1e, 0x1e1f, 0x0000, 0x0000, 0x1e40, 0x1e41, 0x0000, 0x1e56, /* 0x12b0-0x12b7 */
-    0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, /* 0x12b8-0x12bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c0-0x12c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c8-0x12cf */
-    0x0174, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6a, /* 0x12d0-0x12d7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0176, 0x0000, /* 0x12d8-0x12df */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e0-0x12e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e8-0x12ef */
-    0x0175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6b, /* 0x12f0-0x12f7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0177          /* 0x12f0-0x12ff */
-};
-		
-static unsigned short const keysym_to_unicode_13bc_13be[] = {
-                                    0x0152, 0x0153, 0x0178          /* 0x13b8-0x13bf */
-};
-
-static unsigned short keysym_to_unicode_14a1_14ff[] = {
-            0x2741, 0x00a7, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, /* 0x14a0-0x14a7 */
-    0x2014, 0x002e, 0x055d, 0x002c, 0x2013, 0x058a, 0x2026, 0x055c, /* 0x14a8-0x14af */
-    0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, /* 0x14b0-0x14b7 */
-    0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, /* 0x14b8-0x14bf */
-    0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, /* 0x14c0-0x14c7 */
-    0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, /* 0x14c8-0x14cf */
-    0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, /* 0x14d0-0x14d7 */
-    0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, /* 0x14d8-0x14df */
-    0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, /* 0x14e0-0x14e7 */
-    0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, /* 0x14e8-0x14ef */
-    0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, /* 0x14f0-0x14f7 */
-    0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x2019, 0x0027, /* 0x14f8-0x14ff */
-};
-
-static unsigned short keysym_to_unicode_15d0_15f6[] = {
-    0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, /* 0x15d0-0x15d7 */
-    0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, /* 0x15d8-0x15df */
-    0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, /* 0x15e0-0x15e7 */
-    0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, /* 0x15e8-0x15ef */
-    0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6          /* 0x15f0-0x15f7 */
-};
-
-static unsigned short keysym_to_unicode_16a0_16f6[] = {
-    0x0000, 0x0000, 0xf0a2, 0x1e8a, 0x0000, 0xf0a5, 0x012c, 0xf0a7, /* 0x16a0-0x16a7 */
-    0xf0a8, 0x01b5, 0x01e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x019f, /* 0x16a8-0x16af */
-    0x0000, 0x0000, 0xf0b2, 0x1e8b, 0x01d1, 0xf0b5, 0x012d, 0xf0b7, /* 0x16b0-0x16b7 */
-    0xf0b8, 0x01b6, 0x01e7, 0x0000, 0x0000, 0x01d2, 0x0000, 0x0275, /* 0x16b8-0x16bf */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018f, 0x0000, /* 0x16c0-0x16c7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16c8-0x16cf */
-    0x0000, 0x1e36, 0xf0d2, 0xf0d3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d0-0x16d7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d8-0x16df */
-    0x0000, 0x1e37, 0xf0e2, 0xf0e3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e0-0x16e7 */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e8-0x16ef */
-    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0259          /* 0x16f0-0x16f6 */
-};
-
-static unsigned short const keysym_to_unicode_1e9f_1eff[] = {
-                                                            0x0303,
-    0x1ea0, 0x1ea1, 0x1ea2, 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, /* 0x1ea0-0x1ea7 */
-    0x1ea8, 0x1ea9, 0x1eaa, 0x1eab, 0x1eac, 0x1ead, 0x1eae, 0x1eaf, /* 0x1ea8-0x1eaf */
-    0x1eb0, 0x1eb1, 0x1eb2, 0x1eb3, 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, /* 0x1eb0-0x1eb7 */
-    0x1eb8, 0x1eb9, 0x1eba, 0x1ebb, 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, /* 0x1eb8-0x1ebf */
-    0x1ec0, 0x1ec1, 0x1ec2, 0x1ec3, 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, /* 0x1ec0-0x1ec7 */
-    0x1ec8, 0x1ec9, 0x1eca, 0x1ecb, 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, /* 0x1ec8-0x1ecf */
-    0x1ed0, 0x1ed1, 0x1ed2, 0x1ed3, 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, /* 0x1ed0-0x1ed7 */
-    0x1ed8, 0x1ed9, 0x1eda, 0x1edb, 0x1edc, 0x1edd, 0x1ede, 0x1edf, /* 0x1ed8-0x1edf */
-    0x1ee0, 0x1ee1, 0x1ee2, 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, /* 0x1ee0-0x1ee7 */
-    0x1ee8, 0x1ee9, 0x1eea, 0x1eeb, 0x1eec, 0x1eed, 0x1eee, 0x1eef, /* 0x1ee8-0x1eef */
-    0x1ef0, 0x1ef1, 0x0300, 0x0301, 0x1ef4, 0x1ef5, 0x1ef6, 0x1ef7, /* 0x1ef0-0x1ef7 */
-    0x1ef8, 0x1ef9, 0x01a0, 0x01a1, 0x01af, 0x01b0, 0x0309, 0x0323  /* 0x1ef8-0x1eff */
-};
-
-static unsigned short const keysym_to_unicode_20a0_20ac[] = {
-    0x20a0, 0x20a1, 0x20a2, 0x20a3, 0x20a4, 0x20a5, 0x20a6, 0x20a7, /* 0x20a0-0x20a7 */
-    0x20a8, 0x20a9, 0x20aa, 0x20ab, 0x20ac                          /* 0x20a8-0x20af */
-};
-
-static unsigned int
-KeySymToUcs4(KeySym keysym)
-{
-    /* 'Unicode keysym' */
-    if ((keysym & 0xff000000) == 0x01000000)
-        return (keysym & 0x00ffffff);
-
-    if (keysym > 0 && keysym < 0x100)
-	return keysym;
-    else if (keysym > 0x1a0 && keysym < 0x200)
-	return keysym_to_unicode_1a1_1ff[keysym - 0x1a1];
-    else if (keysym > 0x2a0 && keysym < 0x2ff)
-	return keysym_to_unicode_2a1_2fe[keysym - 0x2a1];
-    else if (keysym > 0x3a1 && keysym < 0x3ff)
-	return keysym_to_unicode_3a2_3fe[keysym - 0x3a2];
-    else if (keysym > 0x4a0 && keysym < 0x4e0)
-	return keysym_to_unicode_4a1_4df[keysym - 0x4a1];
-    else if (keysym > 0x589 && keysym < 0x5ff)
-	return keysym_to_unicode_590_5fe[keysym - 0x590];
-    else if (keysym > 0x67f && keysym < 0x700)
-	return keysym_to_unicode_680_6ff[keysym - 0x680];
-    else if (keysym > 0x7a0 && keysym < 0x7fa)
-	return keysym_to_unicode_7a1_7f9[keysym - 0x7a1];
-    else if (keysym > 0x8a3 && keysym < 0x8ff)
-	return keysym_to_unicode_8a4_8fe[keysym - 0x8a4];
-    else if (keysym > 0x9de && keysym < 0x9f9)
-	return keysym_to_unicode_9df_9f8[keysym - 0x9df];
-    else if (keysym > 0xaa0 && keysym < 0xaff)
-	return keysym_to_unicode_aa1_afe[keysym - 0xaa1];
-    else if (keysym > 0xcde && keysym < 0xcfb)
-	return keysym_to_unicode_cdf_cfa[keysym - 0xcdf];
-    else if (keysym > 0xda0 && keysym < 0xdfa)
-	return keysym_to_unicode_da1_df9[keysym - 0xda1];
-    else if (keysym > 0xe9f && keysym < 0xf00)
-	return keysym_to_unicode_ea0_eff[keysym - 0xea0];
-    else if (keysym > 0x12a0 && keysym < 0x12ff)
-	return keysym_to_unicode_12a1_12fe[keysym - 0x12a1];
-    else if (keysym > 0x13bb && keysym < 0x13bf)
-	return keysym_to_unicode_13bc_13be[keysym - 0x13bc];
-    else if (keysym > 0x14a0 && keysym < 0x1500)
-        return keysym_to_unicode_14a1_14ff[keysym - 0x14a1];
-    else if (keysym > 0x15cf && keysym < 0x15f7)
-	return keysym_to_unicode_15d0_15f6[keysym - 0x15d0];
-    else if (keysym > 0x169f && keysym < 0x16f7)
-	return keysym_to_unicode_16a0_16f6[keysym - 0x16a0];
-    else if (keysym > 0x1e9e && keysym < 0x1f00)
-	return keysym_to_unicode_1e9f_1eff[keysym - 0x1e9f];
-    else if (keysym > 0x209f && keysym < 0x20ad)
-	return keysym_to_unicode_20a0_20ac[keysym - 0x20a0];
-    else 
-	return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/is_right2left.c
+++ /dev/null
@@ -1,79 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for utf8 support
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-#  include "../Xutf8.h"
-#endif /* !defined(WIN32) && !defined(__APPLE__) */
-
-unsigned short
-XUtf8IsRightToLeft(unsigned int ucs) {
-
-#if 0
-  /* for debug only */
-  if (ucs <= 0x005A) {
-    if (ucs >= 0x0041) return 1;
-    return 0;
-  }
-#endif
-
-  /* HEBREW */
-  if (ucs <= 0x05F4) {
-    if (ucs >= 0x0591) return 1;
-    return 0;
-  }
-
-  /* ARABIC */
-  if (ucs <= 0x06ED) {
-    if (ucs >= 0x060C)  return 1;
-    return 0;
-  }
-
-  if (ucs <= 0x06F9) {
-    if (ucs >= 0x06F0) return 1;
-    return 0;
-  }
-
-  if (ucs == 0x200F) return 1;
-
-  if (ucs == 0x202B) return 1;
-
-  if (ucs == 0x202E) return 1;
-
-  if (ucs <= 0xFB4F) {
-    if (ucs >= 0xFB1E) return 1;
-    return 0;
-  }
-
-  if (ucs <= 0xFDFB) {
-    if (ucs >= 0xFB50) return 1;
-    return 0;
-  }
-
-  if (ucs <= 0xFEFC) {
-    if (ucs >= 0xFE70) return 1;
-    return 0;
-  }
-
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/is_spacing.c
+++ /dev/null
@@ -1,85 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2010 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * This file is required on all platforms for utf8 support
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-#  include "../Xutf8.h"
-#endif /* !defined(WIN32) && !defined(__APPLE__) */
-
-#include "headers/spacing.h"
-
-unsigned short 
-XUtf8IsNonSpacing(unsigned int ucs) {
-
-  if (ucs <= 0x0361) {
-    if (ucs >= 0x0300) return ucs_table_0300[ucs - 0x0300];
-    return 0;
-  }
-
-  if (ucs <= 0x0486) {
-    if (ucs >= 0x0483) return ucs_table_0483[ucs - 0x0483];
-    return 0;
-  }
-
-  if (ucs <= 0x05C4) {
-    if (ucs >= 0x0591) return ucs_table_0591[ucs - 0x0591];
-    return 0;
-  }
-
-  if (ucs <= 0x06ED) {
-    if (ucs >= 0x064B) return ucs_table_064B[ucs - 0x064B];
-    return 0;
-  }
-
-  if (ucs <= 0x0D4D) {
-    if (ucs >= 0x0901) return ucs_table_0901[ucs - 0x0901];
-    return 0;
-  }
-
-  if (ucs <= 0x0FB9) {
-    if (ucs >= 0x0E31) return ucs_table_0E31[ucs - 0x0E31];
-    return 0;
-  }
-
-  if (ucs <= 0x20E1) {
-    if (ucs >= 0x20D0) return ucs_table_20D0[ucs - 0x20D0];
-    return 0;
-  }
-
-  if (ucs <= 0x309A) {
-    if (ucs >= 0x302A) return ucs_table_302A[ucs - 0x302A];
-    return 0;
-  }
-
-  if (ucs <= 0xFB1E) {
-    if (ucs >= 0xFB1E) return ucs_table_FB1E[ucs - 0xFB1E];
-    return 0;
-  }
-
-  if (ucs <= 0xFE23) {
-    if (ucs >= 0xFE20) return ucs_table_FE20[ucs - 0xFE20];
-    return 0;
-  }
-
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/keysym2Ucs.c
+++ /dev/null
@@ -1,32 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#define KEYSYM2UCS_INCLUDED
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../Xutf8.h"
-#include "imKStoUCS.c"
-
-long XKeysymToUcs(KeySym keysym) {
-  return (long) KeySymToUcs4(keysym);
-}
-
-#endif /* X11 only */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/8bit_tab_to_h.c
+++ /dev/null
@@ -1,536 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/8bit_tab_to_h.c,v 1.3 2001/02/09 00:02:54 dawes Exp $ */
-
-/*
- * Generates an 8-bit character set table from a .TXT table as found on
- * ftp.unicode.org or from a table containing the 256 Unicode values as
- * hexadecimal integers.
- * Examples:
- *
- *   ./8bit_tab_to_h ISO-8859-1 iso8859_1 < tab8859_1
- *   ./8bit_tab_to_h ISO-8859-2 iso8859_2 < tab8859_2
- *   ./8bit_tab_to_h ISO-8859-3 iso8859_3 < tab8859_3
- *   ./8bit_tab_to_h ISO-8859-4 iso8859_4 < tab8859_4
- *   ./8bit_tab_to_h ISO-8859-5 iso8859_5 < tab8859_5
- *   ./8bit_tab_to_h ISO-8859-6 iso8859_6 < tab8859_6
- *   ./8bit_tab_to_h ISO-8859-7 iso8859_7 < tab8859_7
- *   ./8bit_tab_to_h ISO-8859-8 iso8859_8 < tab8859_8
- *   ./8bit_tab_to_h ISO-8859-9 iso8859_9 < tab8859_9
- *   ./8bit_tab_to_h ISO-8859-10 iso8859_10 < tab8859_10
- *   ./8bit_tab_to_h ISO-8859-14 iso8859_14 < tab8859_14
- *   ./8bit_tab_to_h ISO-8859-15 iso8859_15 < tab8859_15
- *   ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < jis0201
- *   ./8bit_tab_to_h TIS620-0 tis620 < tabtis620
- *   ./8bit_tab_to_h KOI8-R koi8_r < tabkoi8_r
- *   ./8bit_tab_to_h KOI8-U koi8_u < tabkoi8_u
- *   ./8bit_tab_to_h ARMSCII-8 armscii_8 < tabarmscii_8
- *   ./8bit_tab_to_h CP1133 cp1133 < tabibm_cp1133
- *   ./8bit_tab_to_h MULELAO-1 mulelao < tabmulelao_1
- *   ./8bit_tab_to_h VISCII1.1-1 viscii1 < tabviscii
- *   ./8bit_tab_to_h TCVN-5712 tcvn < tabtcvn
- *   ./8bit_tab_to_h GEORGIAN-ACADEMY georgian_ac < tabgeorgian_academy
- *   ./8bit_tab_to_h GEORGIAN-PS georgian_ps < tabgeorgian_ps
- *
- *   ./8bit_tab_to_h ISO-8859-1 iso8859_1 < 8859-1.TXT
- *   ./8bit_tab_to_h ISO-8859-2 iso8859_2 < 8859-2.TXT
- *   ./8bit_tab_to_h ISO-8859-3 iso8859_3 < 8859-3.TXT
- *   ./8bit_tab_to_h ISO-8859-4 iso8859_4 < 8859-4.TXT
- *   ./8bit_tab_to_h ISO-8859-5 iso8859_5 < 8859-5.TXT
- *   ./8bit_tab_to_h ISO-8859-6 iso8859_6 < 8859-6.TXT
- *   ./8bit_tab_to_h ISO-8859-7 iso8859_7 < 8859-7.TXT
- *   ./8bit_tab_to_h ISO-8859-8 iso8859_8 < 8859-8.TXT
- *   ./8bit_tab_to_h ISO-8859-9 iso8859_9 < 8859-9.TXT
- *   ./8bit_tab_to_h ISO-8859-10 iso8859_10 < 8859-10.TXT
- *   ./8bit_tab_to_h ISO-8859-14 iso8859_14 < 8859-14.TXT
- *   ./8bit_tab_to_h ISO-8859-15 iso8859_15 < 8859-15.TXT
- *   ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < JIS0201.TXT
- *   ./8bit_tab_to_h KOI8-R koi8_r < KOI8-R.TXT
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* c_charsetname;
-  const char* filename;
-  const char* directory;
-  int charset2uni[0x100];
-
-  if (argc != 3 && argc != 4 && argc != 5)
-    exit(1);
-  charsetname = argv[1];
-  c_charsetname = argv[2];
-  if (argc > 3) {
-    filename = argv[3];
-  } else {
-    char* s = (char*) malloc(strlen(c_charsetname)+strlen(".h")+1);
-    strcpy(s,c_charsetname); strcat(s,".h");
-    filename = s;
-  }
-  directory = (argc > 4 ? argv[4] : "");
-
-  fprintf(stderr, "Creating %s%s\n", directory, filename);
-
-  {
-    int i, c;
-    c = getc(stdin);
-    ungetc(c,stdin);
-    if (c == '#') {
-      /* Read a unicode.org style .TXT file. */
-      for (i = 0; i < 0x100; i++)
-        charset2uni[i] = 0xfffd;
-      for (;;) {
-        c = getc(stdin);
-        if (c == EOF)
-          break;
-        if (c == '\n' || c == ' ' || c == '\t')
-          continue;
-        if (c == '#') {
-          do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-          continue;
-        }
-        ungetc(c,stdin);
-        if (scanf("0x%x", &i) != 1 || !(i >= 0 && i < 0x100))
-          exit(1);
-        do { c = getc(stdin); } while (c == ' ' || c == '\t');
-        if (c != EOF)
-          ungetc(c,stdin);
-        if (c == '\n' || c == '#')
-          continue;
-        if (scanf("0x%x", &charset2uni[i]) != 1)
-          exit(1);
-      }
-    } else {
-      /* Read a table of hexadecimal Unicode values. */
-      for (i = 0; i < 0x100; i++) {
-        if (scanf("%x", &charset2uni[i]) != 1)
-          exit(1);
-        if (charset2uni[i] < 0 || charset2uni[i] == 0xffff)
-          charset2uni[i] = 0xfffd;
-      }
-      if (scanf("%x", &i) != EOF)
-        exit(1);
-    }
-  }
-
-  /* Write the output file. */
-  {
-    FILE* f;
-
-    {
-      char* fname = malloc(strlen(directory)+strlen(filename)+1);
-      strcpy(fname,directory); strcat(fname,filename);
-      f = fopen(fname,"w");
-      if (f == NULL)
-        exit(1);
-    }
-
-    fprintf(f, "\n");
-    fprintf(f, "/*\n");
-    fprintf(f, " * %s\n", charsetname);
-    fprintf(f, " */\n");
-    fprintf(f, "\n");
-
-    {
-      int i, i1, i2, i3;
-      int line[16];
-      int tableno;
-      struct { int minline; int maxline; } tables[16];
-      bool some_invalid;
-      bool final_ret_reached;
-
-      for (i1 = 0; i1 < 16; i1++) {
-        bool all_invalid = true;
-        bool all_identity = true;
-        for (i2 = 0; i2 < 16; i2++) {
-          i = 16*i1+i2;
-          if (charset2uni[i] != 0xfffd)
-            all_invalid = false;
-          if (charset2uni[i] != i)
-            all_identity = false;
-        }
-        if (all_invalid)
-          line[i1] = -2;
-        else if (all_identity)
-          line[i1] = -1;
-        else
-          line[i1] = 0;
-      }
-      tableno = 0;
-      for (i1 = 0; i1 < 16; i1++) {
-        if (line[i1] >= 0) {
-          if (i1 > 0 && tableno > 0 && line[i1-1] == tableno-1) {
-            line[i1] = tableno-1;
-            tables[tableno-1].maxline = i1;
-          } else {
-            tableno++;
-            line[i1] = tableno-1;
-            tables[tableno-1].minline = tables[tableno-1].maxline = i1;
-          }
-        }
-      }
-      some_invalid = false;
-      for (i = 0; i < 0x100; i++)
-        if (charset2uni[i] == 0xfffd)
-          some_invalid = true;
-      if (tableno > 0) {
-        int t;
-        for (t = 0; t < tableno; t++) {
-          fprintf(f, "static const unsigned short %s_2uni", c_charsetname);
-          if (tableno > 1)
-            fprintf(f, "_%d", t+1);
-          fprintf(f, "[%d] = {\n", 16*(tables[t].maxline-tables[t].minline+1));
-          for (i1 = tables[t].minline; i1 <= tables[t].maxline; i1++) {
-            fprintf(f, "  /* 0x%02x */\n", 16*i1);
-            for (i2 = 0; i2 < 2; i2++) {
-              fprintf(f, " ");
-              for (i3 = 0; i3 < 8; i3++) {
-                i = 16*i1+8*i2+i3;
-                fprintf(f, " 0x%04x,", charset2uni[i]);
-              }
-              fprintf(f, "\n");
-            }
-          }
-          fprintf(f, "};\n");
-        }
-        fprintf(f, "\n");
-      }
-      final_ret_reached = false;
-      fprintf(f, "static int\n%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", c_charsetname);
-      fprintf(f, "{\n");
-      fprintf(f, "  unsigned char c = *s;\n");
-      if (some_invalid) {
-        for (i1 = 0; i1 < 16;) {
-          int t = line[i1];
-          const char* indent;
-          for (i2 = i1; i2 < 16 && line[i2] == t; i2++);
-          indent = (i1 == 0 && i2 == 16 ? "  " : "    ");
-          if (i1 == 0) {
-            if (i2 == 16) {
-            } else {
-              fprintf(f, "  if (c < 0x%02x) {\n", 16*i2);
-            }
-          } else {
-            if (i2 == 16) {
-              fprintf(f, "  else {\n");
-            } else {
-              fprintf(f, "  else if (c < 0x%02x) {\n", 16*i2);
-            }
-          }
-          if (t == -2) {
-            final_ret_reached = true;
-          } else if (t == -1) {
-            fprintf(f, "%s*pwc = (ucs4_t) c;\n", indent);
-            fprintf(f, "%sreturn 1;\n", indent);
-          } else {
-            fprintf(f, "%s", indent);
-            some_invalid = false;
-            for (i = 16*i1; i < 16*i2; i++)
-              if (charset2uni[i] == 0xfffd)
-                some_invalid = true;
-            if (some_invalid)
-              fprintf(f, "unsigned short wc = ");
-            else
-              fprintf(f, "*pwc = (ucs4_t) ");
-            fprintf(f, "%s_2uni", c_charsetname);
-            if (tableno > 1)
-              fprintf(f, "_%d", t+1);
-            fprintf(f, "[c");
-            if (tables[t].minline > 0)
-              fprintf(f, "-0x%02x", 16*tables[t].minline);
-            fprintf(f, "];\n");
-            if (some_invalid) {
-              fprintf(f, "%sif (wc != 0xfffd) {\n", indent);
-              fprintf(f, "%s  *pwc = (ucs4_t) wc;\n", indent);
-              fprintf(f, "%s  return 1;\n", indent);
-              fprintf(f, "%s}\n", indent);
-              final_ret_reached = true;
-            } else {
-              fprintf(f, "%sreturn 1;\n", indent);
-            }
-          }
-          if (!(i1 == 0 && i2 == 16))
-            fprintf(f, "  }\n");
-          i1 = i2;
-        }
-        if (final_ret_reached)
-          fprintf(f, "  return RET_ILSEQ;\n");
-      } else {
-        for (i1 = 0; i1 < 16;) {
-          int t = line[i1];
-          for (i2 = i1; i2 < 16 && line[i2] == t; i2++);
-          if (i1 == 0) {
-            if (i2 == 16) {
-              fprintf(f, "  ");
-            } else {
-              fprintf(f, "  if (c < 0x%02x)\n    ", 16*i2);
-            }
-          } else {
-            if (i2 == 16) {
-              fprintf(f, "  else\n    ");
-            } else {
-              fprintf(f, "  else if (c < 0x%02x)\n    ", 16*i2);
-            }
-          }
-          if (t == -1)
-            fprintf(f, "*pwc = (ucs4_t) c;\n");
-          else {
-            fprintf(f, "*pwc = (ucs4_t) %s_2uni", c_charsetname);
-            if (tableno > 1)
-              fprintf(f, "_%d", t+1);
-            fprintf(f, "[c");
-            if (tables[t].minline > 0)
-              fprintf(f, "-0x%02x", 16*tables[t].minline);
-            fprintf(f, "];\n");
-          }
-          i1 = i2;
-        }
-        fprintf(f, "  return 1;\n");
-      }
-      fprintf(f, "}\n");
-
-    }
-
-    fprintf(f, "\n");
-
-    {
-      int uni2charset[0x10000];
-      bool pages[0x100];
-      int line[0x2000];
-      int tableno;
-      struct { int minline; int maxline; int usecount; const char* suffix; } tables[0x2000];
-      bool need_c;
-      bool fix_0000;
-      int i, j, p, j1, j2, t;
-
-      for (j = 0; j < 0x10000; j++)
-        uni2charset[j] = 0;
-      for (p = 0; p < 0x100; p++)
-        pages[p] = false;
-      for (i = 0; i < 0x100; i++) {
-        j = charset2uni[i];
-        if (j != 0xfffd) {
-          uni2charset[j] = i;
-          pages[j>>8] = true;
-        }
-      }
-      for (j1 = 0; j1 < 0x2000; j1++) {
-        bool all_invalid = true;
-        bool all_identity = true;
-        for (j2 = 0; j2 < 8; j2++) {
-          j = 8*j1+j2;
-          if (uni2charset[j] != 0)
-            all_invalid = false;
-          if (uni2charset[j] != j)
-            all_identity = false;
-        }
-        if (all_invalid)
-          line[j1] = -2;
-        else if (all_identity)
-          line[j1] = -1;
-        else
-          line[j1] = 0;
-      }
-      tableno = 0;
-      for (j1 = 0; j1 < 0x2000; j1++) {
-        if (line[j1] >= 0) {
-          if (tableno > 0
-              && ((j1 > 0 && line[j1-1] == tableno-1)
-                  || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                      && j1 - tables[tableno-1].maxline <= 8))) {
-            line[j1] = tableno-1;
-            tables[tableno-1].maxline = j1;
-          } else {
-            tableno++;
-            line[j1] = tableno-1;
-            tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-          }
-        }
-      }
-      for (t = 0; t < tableno; t++) {
-        tables[t].usecount = 0;
-        j1 = 8*tables[t].minline;
-        j2 = 8*(tables[t].maxline+1);
-        for (j = j1; j < j2; j++)
-          if (uni2charset[j] != 0)
-            tables[t].usecount++;
-      }
-      for (t = 0, p = -1, i = 0; t < tableno; t++) {
-        if (tables[t].usecount > 1) {
-          char* s;
-          if (p == tables[t].minline >> 5) {
-            s = (char*) malloc(5+1);
-            sprintf(s, "%02x_%d", p, ++i);
-          } else {
-            p = tables[t].minline >> 5;
-            s = (char*) malloc(2+1);
-            sprintf(s, "%02x", p);
-          }
-          tables[t].suffix = s;
-        } else
-          tables[t].suffix = NULL;
-      }
-      {
-        p = -1;
-        for (t = 0; t < tableno; t++)
-          if (tables[t].usecount > 1) {
-            p = 0;
-            fprintf(f, "static const unsigned char %s_page%s[%d] = {\n", c_charsetname, tables[t].suffix, 8*(tables[t].maxline-tables[t].minline+1));
-            for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-              if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-                fprintf(f, "  /* 0x%04x */\n", 8*j1);
-              fprintf(f, " ");
-              for (j2 = 0; j2 < 8; j2++) {
-                j = 8*j1+j2;
-                fprintf(f, " 0x%02x,", uni2charset[j]);
-              }
-              fprintf(f, " /* 0x%02x-0x%02x */\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-            }
-            fprintf(f, "};\n");
-          }
-        if (p >= 0)
-          fprintf(f, "\n");
-      }
-      need_c = false;
-      for (j1 = 0; j1 < 0x2000;) {
-        t = line[j1];
-        for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-        if (t >= 0)
-          j2 = tables[t].maxline+1;
-        if (!(t == -2 || (t == -1 && j1 == 0)))
-          need_c = true;
-        j1 = j2;
-      }
-      fix_0000 = false;
-      fprintf(f, "static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", c_charsetname);
-      fprintf(f, "{\n");
-      if (need_c)
-        fprintf(f, "  unsigned char c = 0;\n");
-      for (j1 = 0; j1 < 0x2000;) {
-        t = line[j1];
-        for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-        if (t >= 0) {
-          if (j1 != tables[t].minline) abort();
-          if (j2 > tables[t].maxline+1) abort();
-          j2 = tables[t].maxline+1;
-        }
-        if (t == -2) {
-        } else {
-          if (j1 == 0)
-            fprintf(f, "  ");
-          else
-            fprintf(f, "  else ");
-          if (t >= 0 && tables[t].usecount == 0) abort();
-          if (t >= 0 && tables[t].usecount == 1) {
-            if (j2 != j1+1) abort();
-            for (j = 8*j1; j < 8*j2; j++)
-              if (uni2charset[j] != 0) {
-                fprintf(f, "if (wc == 0x%04x)\n    c = 0x%02x;\n", j, uni2charset[j]);
-                break;
-              }
-          } else {
-            if (j1 == 0) {
-              fprintf(f, "if (wc < 0x%04x)", 8*j2);
-            } else {
-              fprintf(f, "if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-            }
-            if (t == -1) {
-              if (j1 == 0)
-                /* If wc == 0, the function must return 1, not -1. */
-                fprintf(f, " {\n    *r = wc;\n    return 1;\n  }\n");
-              else
-                fprintf(f, "\n    c = wc;\n");
-            } else {
-              fprintf(f, "\n    c = %s_page%s[wc", c_charsetname, tables[t].suffix);
-              if (tables[t].minline > 0)
-                fprintf(f, "-0x%04x", 8*j1);
-              fprintf(f, "];\n");
-              if (j1 == 0 && uni2charset[0] == 0)
-                /* If wc == 0, the function must return 1, not -1. */
-                fix_0000 = true;
-            }
-          }
-        }
-        j1 = j2;
-      }
-      if (need_c) {
-        if (fix_0000)
-          fprintf(f, "  if (c != 0 || wc == 0) {\n");
-        else
-          fprintf(f, "  if (c != 0) {\n");
-        fprintf(f, "    *r = c;\n");
-        fprintf(f, "    return 1;\n");
-        fprintf(f, "  }\n");
-      }
-      fprintf(f, "  return RET_ILSEQ;\n");
-      fprintf(f, "}\n");
-
-    }
-
-    if (ferror(f) || fclose(f))
-      exit(1);
-  }
-
-#if 0
-
-    int i1, i2, i3, i1_min, i1_max, j1, j2;
-
-  i1_min = 16;
-  i1_max = -1;
-  for (i1 = 0; i1 < 16; i1++)
-    for (i2 = 0; i2 < 16; i2++)
-      if (charset2uni[16*i1+i2] != 0xfffd) {
-        if (i1_min > i1) i1_min = i1;
-        if (i1_max < i1) i1_max = i1;
-      }
-  printf("static const unsigned short %s_2uni[%d] = {\n",
-         name, 16*(i1_max-i1_min+1));
-  for (i1 = i1_min; i1 <= i1_max; i1++) {
-    printf("  /""* 0x%02x *""/\n", 16*i1);
-    for (i2 = 0; i2 < 2; i2++) {
-      printf("  ");
-      for (i3 = 0; i3 < 8; i3++) {
-        if (i3 > 0) printf(" ");
-        printf("0x%04x,", charset2uni[16*i1+8*i2+i3]);
-      }
-      printf("\n");
-    }
-  }
-  printf("};\n");
-  printf("\n");
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = 0;
-  for (i = 0; i < 0x100; i++)
-    if (charset2uni[i] != 0xfffd)
-      pages[charset2uni[i]>>8] = 1;
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      int j1_min = 32;
-      int j1_max = -1;
-      for (j1 = 0; j1 < 32; j1++)
-        for (j2 = 0; j2 < 8; j2++)
-          if (uni2charset[256*p+8*j1+j2] != 0) {
-            if (j1_min > j1) j1_min = j1;
-            if (j1_max < j1) j1_max = j1;
-          }
-      printf("static const unsigned char %s_page%02x[%d] = {\n",
-             name, p, 8*(j1_max-j1_min+1));
-      for (j1 = j1_min; j1 <= j1_max; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%02x, ", uni2charset[256*p+8*j1+j2]);
-        printf("/""* 0x%02x-0x%02x *""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-
-}
-#endif
-
-  exit(0);
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/COPYRIGHT
+++ /dev/null
@@ -1,39 +1,0 @@
-This notice applies to the files in this directory. They are taken from
-the libiconv-1.1 package, which is covered by the LGPL license. The files
-in this directory have been placed under the following copyright, with
-permission from the Free Software Foundation.
-
-
-Copyright (c) 1999-2000  Free Software Foundation, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-FREE SOFTWARE FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of the Free Software Foundation
-shall not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization from the
-Free Software Foundation.
-
-
-Notes:
-
-1. This copyright applies only to the files in this directory, and not to
-the remaining files in libiconv.
-
-2. The Free Software Foundation does not encourage the use of the above
-license for newly written software.
-
--- a/DoConfig/fltk/src/xutf8/lcUniConv/README
+++ /dev/null
@@ -1,12 +1,0 @@
-$XFree86: xc/lib/X11/lcUniConv/README,v 1.3 2003/10/24 15:34:01 tsi Exp $
-
-The files in this directory are taken from the libiconv-1.1 package.
-
-The *.h files were generated from tables (mostly from ftp.unicode.org) using
-the programs '8bit_tab_to_h.c', 'cjk_tab_to_h.c' and 'gbk_tab_to_h.c'. On some of them, further
-optimizations were applied by hand.
-
-If you find a bug in these files, instead of modifying them in XFree86
-and let it diverge from libiconv, please notify the libiconv maintainer
-(currently <bruno@clisp.org>) so he can fix both in synch.
-
--- a/DoConfig/fltk/src/xutf8/lcUniConv/armscii_8.h
+++ /dev/null
@@ -1,98 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/armscii_8.h,v 1.4 2003/07/15 17:33:45 pascal Exp $ */
-
-/*
- * ARMSCII-8
- */
-
-static const unsigned short armscii_8_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab,
-  0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c,
-  /* 0xb0 */
-  0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563,
-  0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567,
-  /* 0xc0 */
-  0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b,
-  0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f,
-  /* 0xd0 */
-  0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573,
-  0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577,
-  /* 0xe0 */
-  0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b,
-  0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f,
-  /* 0xf0 */
-  0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583,
-  0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd,
-};
-
-static int
-armscii_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = armscii_8_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char armscii_8_page00[8] = {
-  0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f, /* 0x28-0x2f */
-};
-static const unsigned char armscii_8_page00_1[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char armscii_8_page05[96] = {
-  0x00, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, /* 0x30-0x37 */
-  0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, /* 0x38-0x3f */
-  0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, /* 0x40-0x47 */
-  0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, /* 0x48-0x4f */
-  0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0xfe, 0xb0, 0xaf, 0xaa, 0xb1, 0x00, /* 0x58-0x5f */
-  0x00, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xbd, 0xbf, /* 0x60-0x67 */
-  0xc1, 0xc3, 0xc5, 0xc7, 0xc9, 0xcb, 0xcd, 0xcf, /* 0x68-0x6f */
-  0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, /* 0x70-0x77 */
-  0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, /* 0x78-0x7f */
-  0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0xa2, /* 0x80-0x87 */
-  0x00, 0xa3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-};
-static const unsigned char armscii_8_page20[24] = {
-  0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, /* 0x20-0x27 */
-};
-
-static int
-armscii_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0028) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0028 && wc < 0x0030)
-    c = armscii_8_page00[wc-0x0028];
-  else if (wc >= 0x0030 && wc < 0x00a0)
-    c = wc;
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = armscii_8_page00_1[wc-0x00a0];
-  else if (wc >= 0x0530 && wc < 0x0590)
-    c = armscii_8_page05[wc-0x0530];
-  else if (wc >= 0x2010 && wc < 0x2028)
-    c = armscii_8_page20[wc-0x2010];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/ascii.h
+++ /dev/null
@@ -1,26 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/ascii.h,v 1.3 2000/11/29 17:40:28 dawes Exp $ */
-
-/*
- * ASCII
- */
-
-static int
-ascii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-
-static int
-ascii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/big5.h
+++ /dev/null
@@ -1,4145 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/big5.h,v 1.2 2003/05/27 22:26:28 tsi Exp $ */
-
-/*
- * BIG5
- */
-#ifdef NEED_TOWC
-static const unsigned short big5_2uni_pagea1[6121] = {
-  /* 0xa1 */
-  0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2022, 0xff1b, 0xff1a,
-  0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xff64, 0xfe52,
-  0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31,
-  0x2014, 0xfe33, 0xfffd, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35,
-  0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39,
-  0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d,
-  0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41,
-  0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b,
-  0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d,
-  0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7,
-  0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605,
-  0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105,
-  0x203e, 0xfffd, 0xff3f, 0xfffd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e,
-  0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7,
-  0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267,
-  0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65,
-  0xfe66, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf,
-  0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642,
-  0x2641, 0x2609, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197,
-  0x2199, 0x2198, 0x2225, 0x2223, 0xfffd,
-  /* 0xa2 */
-  0xfffd, 0xff0f, 0xff3c, 0xff04, 0x00a5, 0x3012, 0x00a2, 0x00a3,
-  0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5,
-  0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4,
-  0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7,
-  0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586,
-  0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a,
-  0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500,
-  0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e,
-  0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3,
-  0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12,
-  0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160,
-  0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
-  0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027,
-  0x3028, 0x3029, 0xfffd, 0x5344, 0xfffd, 0xff21, 0xff22, 0xff23,
-  0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b,
-  0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33,
-  0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41,
-  0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49,
-  0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51,
-  0xff52, 0xff53, 0xff54, 0xff55, 0xff56,
-  /* 0xa3 */
-  0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394,
-  0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c,
-  0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5,
-  0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4,
-  0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
-  0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5,
-  0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa4 */
-  0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c,
-  0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b,
-  0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a,
-  0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e,
-  0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f,
-  0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8,
-  0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2,
-  0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11,
-  0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88,
-  0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3,
-  0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141,
-  0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207,
-  0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347,
-  0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929,
-  0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f,
-  0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236,
-  0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5,
-  0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4,
-  0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247,
-  0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19,
-  /* 0xa5 */
-  0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e,
-  0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4,
-  0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9,
-  0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317,
-  0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e,
-  0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8,
-  0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1,
-  0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x592e,
-  0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7,
-  0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17,
-  0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6,
-  0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11,
-  0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389,
-  0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531,
-  0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db,
-  0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f,
-  0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff,
-  0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f,
-  0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b,
-  0x5149, 0x5147, 0x5146, 0x5148, 0x5168,
-  /* 0xa6 */
-  0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216,
-  0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f,
-  0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d,
-  0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd,
-  0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919,
-  0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979,
-  0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89,
-  0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f,
-  0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263,
-  0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2,
-  0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64,
-  0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50,
-  0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d,
-  0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001,
-  0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c,
-  0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e,
-  0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621,
-  0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34,
-  0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38,
-  0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63,
-  /* 0xa7 */
-  0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48,
-  0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225,
-  0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac,
-  0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426,
-  0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b,
-  0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436,
-  0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea,
-  0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747,
-  0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d,
-  0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4,
-  0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c,
-  0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90,
-  0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a,
-  0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8,
-  0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212,
-  0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d,
-  0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298,
-  0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538,
-  0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c,
-  0x6756, 0x675e, 0x6749, 0x6746, 0x6760,
-  /* 0xa8 */
-  0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81,
-  0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70,
-  0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e,
-  0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076,
-  0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2,
-  0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3,
-  0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093,
-  0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x828b,
-  0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d,
-  0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2,
-  0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6,
-  0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a,
-  0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab,
-  0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b,
-  0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b,
-  0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155,
-  0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238,
-  0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb,
-  0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379,
-  0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475,
-  /* 0xa9 */
-  0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492,
-  0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462,
-  0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a,
-  0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947,
-  0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae,
-  0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af,
-  0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a,
-  0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46,
-  0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18,
-  0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97,
-  0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80,
-  0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff,
-  0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021,
-  0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e,
-  0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9,
-  0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8,
-  0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da,
-  0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e,
-  0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602,
-  0x660e, 0x6600, 0x660f, 0x6615, 0x660a,
-  /* 0xaa */
-  0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c,
-  0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f,
-  0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a,
-  0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3,
-  0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe,
-  0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9,
-  0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1,
-  0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x7095,
-  0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248,
-  0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9,
-  0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a,
-  0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940,
-  0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54,
-  0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1,
-  0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d,
-  0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1,
-  0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7,
-  0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1,
-  0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580,
-  0x961c, 0x9640, 0x963f, 0x963b, 0x9644,
-  /* 0xab */
-  0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae,
-  0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd,
-  0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0,
-  0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192,
-  0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b,
-  0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b,
-  0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8,
-  0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4,
-  0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf,
-  0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae,
-  0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8,
-  0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6,
-  0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5,
-  0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7,
-  0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08,
-  0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c,
-  0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d,
-  0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a,
-  0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301,
-  0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7,
-  /* 0xac */
-  0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545,
-  0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f,
-  0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1,
-  0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef,
-  0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de,
-  0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83,
-  0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32,
-  0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x6d3b,
-  0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38,
-  0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3,
-  0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272,
-  0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb,
-  0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c,
-  0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678,
-  0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701,
-  0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc,
-  0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947,
-  0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff,
-  0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04,
-  0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004,
-  /* 0xad */
-  0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3,
-  0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd,
-  0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6,
-  0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301,
-  0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306,
-  0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4,
-  0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4,
-  0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed,
-  0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b,
-  0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762,
-  0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df,
-  0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef,
-  0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f,
-  0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1,
-  0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a,
-  0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd,
-  0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d,
-  0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501,
-  0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9,
-  0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea,
-  /* 0xae */
-  0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2,
-  0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a,
-  0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20,
-  0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0,
-  0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04,
-  0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8,
-  0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab,
-  0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063,
-  0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f,
-  0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3,
-  0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346,
-  0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328,
-  0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642,
-  0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8,
-  0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853,
-  0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851,
-  0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845,
-  0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27,
-  0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87,
-  0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93,
-  /* 0xaf */
-  0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a,
-  0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9,
-  0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8,
-  0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de,
-  0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7,
-  0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b,
-  0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728,
-  0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x7825,
-  0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f,
-  0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7,
-  0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06,
-  0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22,
-  0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b,
-  0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015,
-  0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105,
-  0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a,
-  0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b,
-  0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338,
-  0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336,
-  0x8317, 0x8340, 0x8331, 0x8328, 0x8343,
-  /* 0xb0 */
-  0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3,
-  0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18,
-  0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16,
-  0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77,
-  0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7,
-  0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095,
-  0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd,
-  0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b,
-  0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8,
-  0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c,
-  0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e,
-  0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d,
-  0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8,
-  0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3,
-  0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543,
-  0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538,
-  0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708,
-  0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4,
-  0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36,
-  0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40,
-  /* 0xb1 */
-  0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5,
-  0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60,
-  0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22,
-  0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2,
-  0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5,
-  0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97,
-  0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3,
-  0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5,
-  0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df,
-  0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7,
-  0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa,
-  0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384,
-  0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b,
-  0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557,
-  0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac,
-  0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668,
-  0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2,
-  0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0,
-  0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8,
-  0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba,
-  /* 0xb2 */
-  0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2,
-  0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb,
-  0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5,
-  0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea,
-  0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf,
-  0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d,
-  0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405,
-  0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7,
-  0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4,
-  0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db,
-  0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843,
-  0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20,
-  0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92,
-  0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c,
-  0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31,
-  0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a,
-  0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124,
-  0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398,
-  0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393,
-  0x8389, 0x83a0, 0x8377, 0x837b, 0x837c,
-  /* 0xb3 */
-  0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4,
-  0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e,
-  0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f,
-  0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b,
-  0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa,
-  0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019,
-  0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015,
-  0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8,
-  0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7,
-  0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670,
-  0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0,
-  0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5,
-  0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096,
-  0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269,
-  0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7,
-  0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594,
-  0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2,
-  0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599,
-  0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821,
-  0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960,
-  /* 0xb4 */
-  0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71,
-  0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c,
-  0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43,
-  0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9,
-  0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c,
-  0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1,
-  0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3,
-  0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2,
-  0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4,
-  0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562,
-  0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676,
-  0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f,
-  0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df,
-  0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb,
-  0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb,
-  0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e,
-  0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67,
-  0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24,
-  0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a,
-  0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb,
-  /* 0xb5 */
-  0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f,
-  0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c,
-  0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a,
-  0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f,
-  0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2,
-  0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c,
-  0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c,
-  0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97,
-  0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52,
-  0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e,
-  0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66,
-  0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052,
-  0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146,
-  0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403,
-  0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1,
-  0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2,
-  0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df,
-  0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0,
-  0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b,
-  0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41,
-  /* 0xb6 */
-  0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56,
-  0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb,
-  0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85,
-  0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb,
-  0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031,
-  0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163,
-  0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d,
-  0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593,
-  0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686,
-  0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7,
-  0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea,
-  0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd,
-  0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be,
-  0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d,
-  0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8,
-  0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4,
-  0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712,
-  0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b,
-  0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1,
-  0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc,
-  /* 0xb7 */
-  0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9,
-  0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148,
-  0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c,
-  0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137,
-  0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d,
-  0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417,
-  0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688,
-  0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a,
-  0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968,
-  0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b,
-  0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf,
-  0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5,
-  0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4,
-  0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164,
-  0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e,
-  0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f,
-  0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f,
-  0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601,
-  0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df,
-  0x775b, 0x776b, 0x7766, 0x775e, 0x7763,
-  /* 0xb8 */
-  0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee,
-  0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891,
-  0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c,
-  0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77,
-  0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93,
-  0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a,
-  0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084,
-  0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179,
-  0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431,
-  0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435,
-  0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f,
-  0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702,
-  0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc,
-  0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3,
-  0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c,
-  0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c,
-  0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca,
-  0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1,
-  0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6,
-  0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a,
-  /* 0xb9 */
-  0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c,
-  0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e,
-  0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237,
-  0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264,
-  0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a,
-  0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca,
-  0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810,
-  0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd,
-  0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e,
-  0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da,
-  0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3,
-  0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617,
-  0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616,
-  0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e,
-  0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925,
-  0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7,
-  0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5,
-  0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84,
-  0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6,
-  0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147,
-  /* 0xba */
-  0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158,
-  0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f,
-  0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1,
-  0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995,
-  0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab,
-  0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3,
-  0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4,
-  0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff,
-  0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b,
-  0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7,
-  0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292,
-  0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d,
-  0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1,
-  0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7,
-  0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31,
-  0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75,
-  0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9,
-  0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0,
-  0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5,
-  0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac,
-  /* 0xbb */
-  0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150,
-  0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa,
-  0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4,
-  0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3,
-  0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722,
-  0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902,
-  0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6,
-  0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa,
-  0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d,
-  0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc,
-  0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c,
-  0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118,
-  0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285,
-  0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291,
-  0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c,
-  0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817,
-  0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1,
-  0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3,
-  0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9,
-  0x5102, 0x5108, 0x5109, 0x5105, 0x51dc,
-  /* 0xbc */
-  0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e,
-  0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e,
-  0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e,
-  0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb,
-  0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb,
-  0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2,
-  0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7,
-  0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x617c,
-  0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac,
-  0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479,
-  0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495,
-  0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499,
-  0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4,
-  0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd,
-  0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11,
-  0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84,
-  0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e,
-  0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f,
-  0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b,
-  0x734e, 0x7357, 0x7469, 0x748b, 0x7483,
-  /* 0xbd */
-  0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626,
-  0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c,
-  0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5,
-  0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b,
-  0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7,
-  0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb,
-  0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9,
-  0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9,
-  0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517,
-  0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523,
-  0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774,
-  0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c,
-  0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915,
-  0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8,
-  0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6,
-  0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6,
-  0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1,
-  0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f,
-  0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f,
-  0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e,
-  /* 0xbe */
-  0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d,
-  0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb,
-  0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2,
-  0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707,
-  0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c,
-  0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df,
-  0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef,
-  0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x9d03,
-  0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114,
-  0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3,
-  0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668,
-  0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be,
-  0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e,
-  0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be,
-  0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc,
-  0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4,
-  0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8,
-  0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44,
-  0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59,
-  0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1,
-  /* 0xbf */
-  0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6,
-  0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8,
-  0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368,
-  0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d,
-  0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f,
-  0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e,
-  0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4,
-  0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11,
-  0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79,
-  0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8,
-  0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568,
-  0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f,
-  0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b,
-  0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00,
-  0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed,
-  0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44,
-  0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38,
-  0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c,
-  0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f,
-  0x9322, 0x92fc, 0x932b, 0x9304, 0x931a,
-  /* 0xc0 */
-  0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7,
-  0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713,
-  0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b,
-  0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b,
-  0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb,
-  0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12,
-  0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121,
-  0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x568f,
-  0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a,
-  0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c,
-  0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234,
-  0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1,
-  0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94,
-  0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90,
-  0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf,
-  0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1,
-  0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6,
-  0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370,
-  0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c,
-  0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac,
-  /* 0xc1 */
-  0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901,
-  0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7,
-  0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9,
-  0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b,
-  0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35,
-  0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070,
-  0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf,
-  0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584,
-  0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8,
-  0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab,
-  0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938,
-  0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20,
-  0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd,
-  0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a,
-  0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084,
-  0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d,
-  0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e,
-  0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc,
-  0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0,
-  0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01,
-  /* 0xc2 */
-  0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b,
-  0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2,
-  0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233,
-  0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7,
-  0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2,
-  0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe,
-  0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8,
-  0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x7652,
-  0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62,
-  0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23,
-  0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52,
-  0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf,
-  0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba,
-  0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2,
-  0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59,
-  0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d,
-  0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a,
-  0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a,
-  0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9,
-  0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6,
-  /* 0xc3 */
-  0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba,
-  0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03,
-  0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8,
-  0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133,
-  0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2,
-  0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5,
-  0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d,
-  0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a,
-  0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7,
-  0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d,
-  0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85,
-  0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea,
-  0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9,
-  0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58,
-  0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a,
-  0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54,
-  0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1,
-  0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd,
-  0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a,
-  0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e,
-  /* 0xc4 */
-  0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d,
-  0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a,
-  0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7,
-  0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6,
-  0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727,
-  0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662,
-  0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c,
-  0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82,
-  0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa,
-  0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba,
-  0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f,
-  0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418,
-  0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8,
-  0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5,
-  0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1,
-  0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d,
-  0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c,
-  0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f,
-  0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821,
-  0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74,
-  /* 0xc5 */
-  0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf,
-  0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b,
-  0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957,
-  0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d,
-  0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19,
-  0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9,
-  0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61,
-  0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x79b3,
-  0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc,
-  0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444,
-  0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955,
-  0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b,
-  0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6,
-  0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca,
-  0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638,
-  0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464,
-  0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4,
-  0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1,
-  0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88,
-  0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92,
-  /* 0xc6 */
-  0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744,
-  0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa,
-  0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063,
-  0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470,
-  0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a,
-  0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5,
-  0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f,
-  0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x30fe,
-  0x309d, 0x309e, 0x3005, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045,
-  0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d,
-  0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055,
-  0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d,
-  0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065,
-  0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d,
-  0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075,
-  0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d,
-  0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085,
-  0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d,
-  0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2,
-  0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7,
-  /* 0xc7 */
-  0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af,
-  0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
-  0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf,
-  0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7,
-  0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf,
-  0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7,
-  0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df,
-  0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7,
-  0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef,
-  0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0414,
-  0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b,
-  0x041c, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429,
-  0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431,
-  0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438,
-  0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440,
-  0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448,
-  0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x2460,
-  0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468,
-  0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a,
-  0x247b, 0x247c, 0x247d,
-};
-static const unsigned short big5_2uni_pagec9[7652] = {
-  /* 0xc9 */
-  0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47,
-  0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e,
-  0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c,
-  0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3,
-  0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9,
-  0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723,
-  0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73,
-  0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36,
-  0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a,
-  0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00,
-  0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04,
-  0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322,
-  0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a,
-  0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977,
-  0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e,
-  0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4,
-  0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259,
-  0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738,
-  0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52,
-  0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b,
-  /* 0xca */
-  0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f,
-  0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d,
-  0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624,
-  0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64,
-  0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33,
-  0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad,
-  0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437,
-  0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x543d,
-  0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5,
-  0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940,
-  0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f,
-  0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f,
-  0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95,
-  0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d,
-  0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed,
-  0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef,
-  0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e,
-  0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281,
-  0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4,
-  0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747,
-  /* 0xcb */
-  0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b,
-  0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b,
-  0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95,
-  0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a,
-  0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5,
-  0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594,
-  0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092,
-  0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a,
-  0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5,
-  0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33,
-  0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74,
-  0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79,
-  0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82,
-  0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232,
-  0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392,
-  0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b,
-  0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f,
-  0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9,
-  0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780,
-  0x5775, 0x577b, 0x5773, 0x5774, 0x5762,
-  /* 0xcc */
-  0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce,
-  0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1,
-  0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93,
-  0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf,
-  0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7,
-  0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19,
-  0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d,
-  0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034,
-  0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d,
-  0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214,
-  0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca,
-  0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d,
-  0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb,
-  0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6,
-  0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798,
-  0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791,
-  0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25,
-  0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee,
-  0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2,
-  0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2,
-  /* 0xcd */
-  0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0,
-  0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1,
-  0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096,
-  0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9,
-  0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1,
-  0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8,
-  0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1,
-  0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7,
-  0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd,
-  0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220,
-  0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7,
-  0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9,
-  0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d,
-  0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5,
-  0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d,
-  0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9,
-  0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb,
-  0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249,
-  0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398,
-  0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf,
-  /* 0xce */
-  0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6,
-  0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0,
-  0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b,
-  0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4,
-  0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd,
-  0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db,
-  0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8,
-  0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde,
-  0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf,
-  0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22,
-  0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3,
-  0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054,
-  0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c,
-  0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e,
-  0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303,
-  0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313,
-  0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa,
-  0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622,
-  0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f,
-  0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba,
-  /* 0xcf */
-  0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb,
-  0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee,
-  0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc,
-  0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9,
-  0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6,
-  0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d,
-  0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04,
-  0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x6d01,
-  0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c,
-  0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1,
-  0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a,
-  0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb,
-  0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8,
-  0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7,
-  0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e,
-  0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703,
-  0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8,
-  0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809,
-  0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5,
-  0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80,
-  /* 0xd0 */
-  0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f,
-  0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d,
-  0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7,
-  0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9,
-  0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd,
-  0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8,
-  0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1,
-  0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4,
-  0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673,
-  0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07,
-  0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf,
-  0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3,
-  0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005,
-  0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033,
-  0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027,
-  0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca,
-  0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e,
-  0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2,
-  0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504,
-  0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1,
-  /* 0xd1 */
-  0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b,
-  0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6,
-  0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9,
-  0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15,
-  0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad,
-  0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1,
-  0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa,
-  0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x6041,
-  0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095,
-  0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2,
-  0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4,
-  0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358,
-  0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338,
-  0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4,
-  0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f,
-  0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816,
-  0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844,
-  0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d,
-  0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34,
-  0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4,
-  /* 0xd2 */
-  0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64,
-  0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f,
-  0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60,
-  0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68,
-  0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d,
-  0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39,
-  0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5,
-  0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277,
-  0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb,
-  0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3,
-  0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7,
-  0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b,
-  0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6,
-  0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712,
-  0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823,
-  0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821,
-  0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c,
-  0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed,
-  0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b,
-  0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10,
-  /* 0xd3 */
-  0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09,
-  0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85,
-  0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f,
-  0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d,
-  0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e,
-  0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100,
-  0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351,
-  0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x8342,
-  0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324,
-  0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353,
-  0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2,
-  0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686,
-  0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695,
-  0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d,
-  0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883,
-  0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4,
-  0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3,
-  0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6,
-  0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8,
-  0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150,
-  /* 0xd4 */
-  0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc,
-  0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e,
-  0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041,
-  0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b,
-  0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051,
-  0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d,
-  0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a,
-  0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c,
-  0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540,
-  0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc,
-  0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3,
-  0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1,
-  0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9,
-  0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67,
-  0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c,
-  0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b,
-  0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69,
-  0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1,
-  0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c,
-  0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f,
-  /* 0xd5 */
-  0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1,
-  0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96,
-  0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3,
-  0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db,
-  0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365,
-  0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397,
-  0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375,
-  0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x6378,
-  0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665,
-  0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887,
-  0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f,
-  0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877,
-  0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e,
-  0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b,
-  0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38,
-  0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab,
-  0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6,
-  0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5,
-  0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0,
-  0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9,
-  /* 0xd6 */
-  0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb,
-  0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104,
-  0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8,
-  0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f,
-  0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff,
-  0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401,
-  0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b,
-  0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb,
-  0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f,
-  0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b,
-  0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826,
-  0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b,
-  0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94,
-  0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24,
-  0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f,
-  0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3,
-  0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29,
-  0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63,
-  0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0,
-  0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f,
-  /* 0xd7 */
-  0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119,
-  0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127,
-  0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232,
-  0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4,
-  0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9,
-  0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e,
-  0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387,
-  0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2,
-  0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8,
-  0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852,
-  0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1,
-  0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac,
-  0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30,
-  0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d,
-  0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf,
-  0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1,
-  0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea,
-  0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9,
-  0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1,
-  0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea,
-  /* 0xd8 */
-  0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c,
-  0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5,
-  0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083,
-  0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087,
-  0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8,
-  0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f,
-  0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6,
-  0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x5819,
-  0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c,
-  0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d,
-  0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2,
-  0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae,
-  0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b,
-  0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd,
-  0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37,
-  0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e,
-  0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42,
-  0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45,
-  0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9,
-  0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114,
-  /* 0xd9 */
-  0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc,
-  0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104,
-  0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8,
-  0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5,
-  0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4,
-  0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0,
-  0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568,
-  0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c,
-  0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701,
-  0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1,
-  0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910,
-  0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911,
-  0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8,
-  0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6,
-  0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7,
-  0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95,
-  0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47,
-  0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b,
-  0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40,
-  0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e,
-  /* 0xda */
-  0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b,
-  0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64,
-  0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a,
-  0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125,
-  0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a,
-  0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330,
-  0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323,
-  0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x741a,
-  0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420,
-  0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1,
-  0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da,
-  0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b,
-  0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d,
-  0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862,
-  0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c,
-  0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48,
-  0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8,
-  0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a,
-  0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51,
-  0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65,
-  /* 0xdb */
-  0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050,
-  0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d,
-  0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204,
-  0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423,
-  0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410,
-  0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5,
-  0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9,
-  0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5,
-  0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee,
-  0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8,
-  0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb,
-  0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856,
-  0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6,
-  0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998,
-  0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59,
-  0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51,
-  0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe,
-  0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3,
-  0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8,
-  0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa,
-  /* 0xdc */
-  0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6,
-  0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f,
-  0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb,
-  0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f,
-  0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226,
-  0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204,
-  0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216,
-  0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689,
-  0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c,
-  0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83,
-  0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca,
-  0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb,
-  0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c,
-  0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0,
-  0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5,
-  0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714,
-  0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855,
-  0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871,
-  0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5,
-  0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6,
-  /* 0xdd */
-  0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90,
-  0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a,
-  0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0,
-  0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6,
-  0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a,
-  0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f,
-  0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5,
-  0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433,
-  0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423,
-  0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a,
-  0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e,
-  0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695,
-  0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966,
-  0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a,
-  0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935,
-  0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969,
-  0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c,
-  0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952,
-  0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48,
-  0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc,
-  /* 0xde */
-  0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0,
-  0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2,
-  0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6,
-  0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92,
-  0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca,
-  0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160,
-  0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142,
-  0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144,
-  0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e,
-  0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444,
-  0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450,
-  0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe,
-  0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603,
-  0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6,
-  0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f,
-  0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759,
-  0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895,
-  0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896,
-  0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19,
-  0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13,
-  /* 0xdf */
-  0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64,
-  0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70,
-  0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88,
-  0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b,
-  0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d,
-  0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb,
-  0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b,
-  0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144,
-  0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1,
-  0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451,
-  0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459,
-  0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434,
-  0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b,
-  0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c,
-  0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433,
-  0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450,
-  0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d,
-  0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6,
-  0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0,
-  0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4,
-  /* 0xe0 */
-  0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f,
-  0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81,
-  0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66,
-  0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c,
-  0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0,
-  0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2,
-  0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00,
-  0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044,
-  0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114,
-  0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a,
-  0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246,
-  0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261,
-  0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253,
-  0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692,
-  0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5,
-  0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac,
-  0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab,
-  0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4,
-  0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3,
-  0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0,
-  /* 0xe1 */
-  0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627,
-  0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613,
-  0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c,
-  0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a,
-  0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894,
-  0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea,
-  0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec,
-  0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3,
-  0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77,
-  0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f,
-  0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc,
-  0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6,
-  0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153,
-  0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165,
-  0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b,
-  0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d,
-  0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b,
-  0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459,
-  0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705,
-  0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9,
-  /* 0xe2 */
-  0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999,
-  0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4,
-  0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3,
-  0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2,
-  0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f,
-  0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03,
-  0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19,
-  0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36,
-  0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35,
-  0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39,
-  0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21,
-  0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b,
-  0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293,
-  0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475,
-  0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590,
-  0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8,
-  0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e,
-  0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab,
-  0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a,
-  0x798b, 0x7996, 0x7995, 0x7994, 0x7993,
-  /* 0xe3 */
-  0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f,
-  0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c,
-  0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e,
-  0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf,
-  0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1,
-  0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc,
-  0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9,
-  0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024,
-  0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c,
-  0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce,
-  0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd,
-  0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2,
-  0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6,
-  0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db,
-  0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740,
-  0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741,
-  0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712,
-  0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724,
-  0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa,
-  0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb,
-  /* 0xe4 */
-  0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9,
-  0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96,
-  0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09,
-  0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06,
-  0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d,
-  0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124,
-  0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4,
-  0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6,
-  0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e,
-  0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286,
-  0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b,
-  0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e,
-  0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce,
-  0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d,
-  0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7,
-  0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f,
-  0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8,
-  0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a,
-  0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635,
-  0x5641, 0x564a, 0x5649, 0x5646, 0x5658,
-  /* 0xe5 */
-  0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a,
-  0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af,
-  0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7,
-  0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05,
-  0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93,
-  0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d,
-  0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2,
-  0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b,
-  0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d,
-  0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485,
-  0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f,
-  0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2,
-  0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af,
-  0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4,
-  0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27,
-  0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6,
-  0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25,
-  0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5,
-  0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41,
-  0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92,
-  /* 0xe6 */
-  0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96,
-  0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57,
-  0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67,
-  0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77,
-  0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a,
-  0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa,
-  0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e,
-  0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x7362,
-  0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488,
-  0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619,
-  0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d,
-  0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb,
-  0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4,
-  0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76,
-  0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac,
-  0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc,
-  0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03,
-  0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76,
-  0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6,
-  0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f,
-  /* 0xe7 */
-  0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253,
-  0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500,
-  0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c,
-  0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2,
-  0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9,
-  0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e,
-  0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9,
-  0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756,
-  0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b,
-  0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750,
-  0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c,
-  0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a,
-  0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906,
-  0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed,
-  0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4,
-  0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3,
-  0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf,
-  0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1,
-  0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b,
-  0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27,
-  /* 0xe8 */
-  0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c,
-  0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073,
-  0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a,
-  0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182,
-  0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6,
-  0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc,
-  0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd,
-  0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x92b5,
-  0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0,
-  0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a,
-  0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829,
-  0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911,
-  0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3,
-  0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc,
-  0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43,
-  0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68,
-  0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07,
-  0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3,
-  0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de,
-  0x5334, 0x53e1, 0x5670, 0x5660, 0x566e,
-  /* 0xe9 */
-  0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c,
-  0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc,
-  0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10,
-  0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1,
-  0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2,
-  0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9,
-  0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8,
-  0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x61bf,
-  0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd,
-  0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c,
-  0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd,
-  0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67,
-  0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51,
-  0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50,
-  0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56,
-  0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7,
-  0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad,
-  0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4,
-  0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba,
-  0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8,
-  /* 0xea */
-  0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5,
-  0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4,
-  0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da,
-  0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365,
-  0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495,
-  0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633,
-  0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d,
-  0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797,
-  0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1,
-  0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47,
-  0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7,
-  0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea,
-  0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7,
-  0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20,
-  0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f,
-  0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c,
-  0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6,
-  0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2,
-  0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545,
-  0x856b, 0x854d, 0x8553, 0x8561, 0x8558,
-  /* 0xeb */
-  0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547,
-  0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555,
-  0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c,
-  0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792,
-  0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785,
-  0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789,
-  0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922,
-  0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2,
-  0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0,
-  0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91,
-  0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c,
-  0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45,
-  0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36,
-  0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079,
-  0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190,
-  0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306,
-  0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301,
-  0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325,
-  0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329,
-  0x9339, 0x9335, 0x932a, 0x9314, 0x930c,
-  /* 0xec */
-  0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd,
-  0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9,
-  0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0,
-  0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929,
-  0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea,
-  0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa,
-  0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e,
-  0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d,
-  0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d,
-  0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87,
-  0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126,
-  0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c,
-  0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681,
-  0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23,
-  0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2,
-  0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc,
-  0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9,
-  0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da,
-  0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b,
-  0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e,
-  /* 0xed */
-  0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a,
-  0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9,
-  0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde,
-  0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2,
-  0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2,
-  0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510,
-  0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647,
-  0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4,
-  0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc,
-  0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c,
-  0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1,
-  0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4,
-  0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd,
-  0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c,
-  0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47,
-  0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45,
-  0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4,
-  0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a,
-  0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b,
-  0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e,
-  /* 0xee */
-  0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e,
-  0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582,
-  0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668,
-  0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5,
-  0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af,
-  0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de,
-  0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937,
-  0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18,
-  0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15,
-  0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f,
-  0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f,
-  0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40,
-  0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f,
-  0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356,
-  0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351,
-  0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355,
-  0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363,
-  0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3,
-  0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718,
-  0x971d, 0x9719, 0x979a, 0x97a1, 0x979c,
-  /* 0xef */
-  0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a,
-  0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933,
-  0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1,
-  0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb,
-  0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01,
-  0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1,
-  0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41,
-  0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45,
-  0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d,
-  0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff,
-  0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e,
-  0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c,
-  0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed,
-  0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff,
-  0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db,
-  0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6,
-  0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9,
-  0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e,
-  0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201,
-  0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376,
-  /* 0xf0 */
-  0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2,
-  0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657,
-  0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c,
-  0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac,
-  0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d,
-  0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56,
-  0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53,
-  0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0,
-  0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3,
-  0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8,
-  0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be,
-  0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5,
-  0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8,
-  0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd,
-  0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949,
-  0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f,
-  0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e,
-  0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98,
-  0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60,
-  0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67,
-  /* 0xf1 */
-  0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47,
-  0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5,
-  0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b,
-  0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395,
-  0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4,
-  0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3,
-  0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722,
-  0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x97a2,
-  0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851,
-  0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09,
-  0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0,
-  0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c,
-  0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8,
-  0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f,
-  0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52,
-  0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01,
-  0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c,
-  0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad,
-  0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912,
-  0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70,
-  /* 0xf2 */
-  0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e,
-  0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1,
-  0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd,
-  0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016,
-  0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c,
-  0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6,
-  0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516,
-  0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921,
-  0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c,
-  0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78,
-  0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b,
-  0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7,
-  0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9,
-  0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8,
-  0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de,
-  0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c,
-  0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962,
-  0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959,
-  0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40,
-  0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55,
-  /* 0xf3 */
-  0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a,
-  0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d,
-  0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51,
-  0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad,
-  0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec,
-  0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3,
-  0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da,
-  0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x97b3,
-  0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d,
-  0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943,
-  0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b,
-  0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2,
-  0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0,
-  0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec,
-  0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81,
-  0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b,
-  0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85,
-  0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68,
-  0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d,
-  0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2,
-  /* 0xf4 */
-  0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef,
-  0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df,
-  0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9,
-  0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034,
-  0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b,
-  0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba,
-  0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd,
-  0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2,
-  0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47,
-  0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff,
-  0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff,
-  0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605,
-  0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816,
-  0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68,
-  0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84,
-  0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143,
-  0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb,
-  0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419,
-  0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412,
-  0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff,
-  /* 0xf5 */
-  0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df,
-  0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862,
-  0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c,
-  0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36,
-  0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10,
-  0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8,
-  0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f,
-  0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0,
-  0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8,
-  0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99,
-  0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e,
-  0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139,
-  0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb,
-  0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8,
-  0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046,
-  0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d,
-  0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88,
-  0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618,
-  0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e,
-  0x8621, 0x8620, 0x8629, 0x861e, 0x8625,
-  /* 0xf6 */
-  0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a,
-  0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45,
-  0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e,
-  0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b,
-  0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437,
-  0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a,
-  0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956,
-  0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f,
-  0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b,
-  0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21,
-  0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe,
-  0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac,
-  0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a,
-  0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31,
-  0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb,
-  0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520,
-  0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056,
-  0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5,
-  0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71,
-  0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a,
-  /* 0xf7 */
-  0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634,
-  0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826,
-  0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84,
-  0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a,
-  0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c,
-  0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449,
-  0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b,
-  0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49,
-  0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55,
-  0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c,
-  0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde,
-  0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9,
-  0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35,
-  0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299,
-  0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201,
-  0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12,
-  0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383,
-  0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640,
-  0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e,
-  0x8833, 0x8976, 0x8974, 0x8973, 0x89fe,
-  /* 0xf8 */
-  0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64,
-  0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4,
-  0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52,
-  0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c,
-  0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4,
-  0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec,
-  0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3,
-  0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71,
-  0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d,
-  0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223,
-  0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97,
-  0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94,
-  0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2,
-  0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7,
-  0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62,
-  0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05,
-  0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e,
-  0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18,
-  0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9,
-  0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a,
-  /* 0xf9 */
-  0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648,
-  0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5,
-  0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749,
-  0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10,
-  0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78,
-  0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2,
-  0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74,
-  0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4,
-  0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e,
-  0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961,
-  0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48,
-  0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481,
-  0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483,
-  0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a,
-  0x9ea4, 0x9f7e, 0x9f49, 0x9f98,
-};
-
-static int
-big5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if ((c1 >= 0xa1 && c1 <= 0xc7) || (c1 >= 0xc9 && c1 <= 0xf9)) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) {
-        unsigned int i = 157 * (c1 - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40));
-        unsigned short wc = 0xfffd;
-        if (i < 6280) {
-          if (i < 6121)
-            wc = big5_2uni_pagea1[i];
-        } else {
-          if (i < 13932)
-            wc = big5_2uni_pagec9[i-6280];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned short big5_2charset[13703] = {
-  0xa246, 0xa247, 0xa244, 0xa1b1, 0xa258, 0xa1d3, 0xa150, 0xa1d1,
-  0xa1d2, 0xa3be, 0xa3bc, 0xa3bd, 0xa3bf, 0xa3bb, 0xa344, 0xa345,
-  0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d,
-  0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355,
-  0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d,
-  0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365,
-  0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d,
-  0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, 0xc7b3, 0xc7b1,
-  0xc7b2, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba,
-  0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2,
-  0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca,
-  0xc7cb, 0xc7cc, 0xc7cd, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3,
-  0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db,
-  0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3,
-  0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7ce, 0xa156, 0xa158,
-  0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa145, 0xa14c, 0xa14b, 0xa1ac,
-  0xa1ab, 0xa1b0, 0xa1c2, 0xa24a, 0xa1c1, 0xa24b, 0xa2b9, 0xa2ba,
-  0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2,
-  0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1f8, 0xa1f9, 0xa1fb, 0xa1fa,
-  0xa1d4, 0xa1db, 0xa1e8, 0xa1e7, 0xa1fd, 0xa1fc, 0xa1e4, 0xa1e5,
-  0xa1ec, 0xa1ed, 0xa1ef, 0xa1ee, 0xa1e3, 0xa1dc, 0xa1da, 0xa1dd,
-  0xa1d8, 0xa1d9, 0xa1e6, 0xa1e9, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec,
-  0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4,
-  0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc,
-  0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa275, 0xa274,
-  0xa273, 0xa272, 0xa271, 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa27e,
-  0xa2a1, 0xa2a3, 0xa2a2, 0xa2ac, 0xa2ad, 0xa2ae, 0xa262, 0xa263,
-  0xa264, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, 0xa270, 0xa26f,
-  0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, 0xa276, 0xa279, 0xa1bd,
-  0xa1bc, 0xa1b6, 0xa1b5, 0xa1bf, 0xa1be, 0xa1bb, 0xa1ba, 0xa1b3,
-  0xa1b7, 0xa1b4, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0xa1b9, 0xa1b8,
-  0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa140, 0xa142, 0xa143, 0xa1b2,
-  0xc6a4, 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179,
-  0xa17a, 0xa169, 0xa16a, 0xa245, 0xa165, 0xa166, 0xa1a9, 0xa1aa,
-  0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca,
-  0xa2cb, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab,
-  0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3,
-  0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb,
-  0xc6bc, 0xc6bd, 0xc6be, 0xc6bf, 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3,
-  0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb,
-  0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3,
-  0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da, 0xc6db,
-  0xc6dc, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3,
-  0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb,
-  0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3,
-  0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6a2, 0xc6a3, 0xc6f8, 0xc6f9,
-  0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742,
-  0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a,
-  0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752,
-  0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a,
-  0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762,
-  0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a,
-  0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772,
-  0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a,
-  0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4,
-  0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac,
-  0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc6a1, 0xa374, 0xa375, 0xa376,
-  0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e,
-  0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8,
-  0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0,
-  0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8,
-  0xa3b9, 0xa3ba, 0xa1c0, 0xa255, 0xa256, 0xa250, 0xa251, 0xa252,
-  0xa254, 0xa257, 0xa253, 0xa1eb, 0xa1ea, 0xa24f, 0xa440, 0xa442,
-  0xa443, 0xc945, 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3,
-  0xc94f, 0xc94d, 0xa4a2, 0xa4a1, 0xa542, 0xa541, 0xa540, 0xa543,
-  0xa4fe, 0xa5e0, 0xa5e1, 0xa8c3, 0xa458, 0xa4a4, 0xc950, 0xa4a5,
-  0xc963, 0xa6ea, 0xcbb1, 0xa459, 0xa4a6, 0xa544, 0xc964, 0xc940,
-  0xa444, 0xa45b, 0xc947, 0xa45c, 0xa4a7, 0xa545, 0xa547, 0xa546,
-  0xa5e2, 0xa5e3, 0xa8c4, 0xadbc, 0xa441, 0xc941, 0xa445, 0xa45e,
-  0xa45d, 0xa5e4, 0xa8c5, 0xb0ae, 0xd44b, 0xb6c3, 0xdcb1, 0xdcb2,
-  0xa446, 0xa4a9, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0xa4aa, 0xa4ac,
-  0xc951, 0xa4ad, 0xa4ab, 0xa5e5, 0xa8c7, 0xa8c8, 0xab45, 0xa460,
-  0xa4ae, 0xa5e6, 0xa5e8, 0xa5e7, 0xa6eb, 0xa8c9, 0xa8ca, 0xab46,
-  0xab47, 0xadbd, 0xdcb3, 0xf6d6, 0xa448, 0xa4b0, 0xa4af, 0xc952,
-  0xa4b1, 0xa4b7, 0xa4b2, 0xa4b3, 0xc954, 0xc953, 0xa4b5, 0xa4b6,
-  0xa4b4, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa549, 0xa550, 0xc96a,
-  0xc966, 0xc969, 0xa551, 0xa561, 0xc968, 0xa54e, 0xa54f, 0xa548,
-  0xc965, 0xc967, 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae,
-  0xa5f3, 0xc9b2, 0xa5f4, 0xa5f7, 0xa5e9, 0xc9b1, 0xa5f8, 0xc9b5,
-  0xc9b9, 0xc9b6, 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0xa5ee, 0xc9ab,
-  0xa5f1, 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0xc9ac,
-  0xa5eb, 0xc9b4, 0xc9b7, 0xc9ad, 0xca66, 0xa742, 0xa6f4, 0xca67,
-  0xa6f1, 0xa744, 0xa6f9, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60,
-  0xca68, 0xca64, 0xa6fa, 0xa6fd, 0xa6ee, 0xa747, 0xca5d, 0xcbbd,
-  0xa6ec, 0xa743, 0xa6ed, 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb,
-  0xa6f3, 0xca5a, 0xa6ef, 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740,
-  0xa746, 0xa6f0, 0xca63, 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f,
-  0xca61, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0xcbcc, 0xa8cb, 0xa8d5,
-  0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, 0xcbc3, 0xcbc1, 0xa8de,
-  0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, 0xcbb6, 0xcbc2, 0xcbc9,
-  0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, 0xa8d7, 0xcbba, 0xa8d2,
-  0xa8cd, 0xa8dc, 0xcbc4, 0xa8dd, 0xcbc8, 0xcbc6, 0xcbca, 0xa8da,
-  0xcbbe, 0xcbb2, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0xab56,
-  0xab4a, 0xcde0, 0xcde8, 0xab49, 0xab51, 0xab5d, 0xcdee, 0xcdec,
-  0xcde7, 0xab4b, 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde,
-  0xcdea, 0xcde1, 0xab54, 0xcde2, 0xcddd, 0xab5b, 0xab4e, 0xab57,
-  0xab4d, 0xcddf, 0xcde4, 0xcdeb, 0xab55, 0xab52, 0xcde6, 0xab5a,
-  0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, 0xab4c, 0xab48, 0xcdef,
-  0xadd7, 0xadc1, 0xadd1, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5,
-  0xadc4, 0xadcd, 0xadda, 0xadce, 0xd0c9, 0xadc7, 0xd0ca, 0xaddc,
-  0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, 0xadcc, 0xadcb, 0xd0cb,
-  0xadcf, 0xd45b, 0xadc6, 0xd0d6, 0xadd5, 0xadd4, 0xadca, 0xd0ce,
-  0xd0d7, 0xd0c8, 0xadc9, 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0xadc3,
-  0xadc2, 0xd0d9, 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8,
-  0xd0db, 0xd0cd, 0xd0dc, 0xd0d1, 0xd0da, 0xd0d2, 0xadc8, 0xd463,
-  0xd457, 0xb0b3, 0xd45c, 0xd462, 0xb0b2, 0xd455, 0xb0b6, 0xd459,
-  0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, 0xd467, 0xd451, 0xb0ba,
-  0xd466, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, 0xd450,
-  0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0xd85b, 0xd45e, 0xd44d,
-  0xd45f, 0xb0c1, 0xd464, 0xb0c0, 0xd44c, 0xd454, 0xd465, 0xb0bc,
-  0xb0bb, 0xb0b8, 0xb0bd, 0xb0af, 0xb0b0, 0xb3c8, 0xd85e, 0xd857,
-  0xb3c5, 0xd85f, 0xd855, 0xd858, 0xb3c4, 0xd859, 0xb3c7, 0xd85d,
-  0xd853, 0xd852, 0xb3c9, 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c,
-  0xd85a, 0xd854, 0xb3c3, 0xd856, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd,
-  0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb,
-  0xdcc4, 0xdcbf, 0xb6cc, 0xdcb4, 0xb6c9, 0xdcb5, 0xdcbe, 0xdcbc,
-  0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1,
-  0xb9b6, 0xb9b3, 0xb9b4, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2,
-  0xb9b1, 0xe0f5, 0xe0f7, 0xe0fe, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0,
-  0xb9ac, 0xe0f3, 0xb9b7, 0xe0f6, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc,
-  0xe0fb, 0xb9b5, 0xe0f4, 0xbbf8, 0xe4ec, 0xe4e9, 0xbbf9, 0xbbf7,
-  0xe4f0, 0xe4ed, 0xe4e6, 0xbbf6, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd,
-  0xe4ea, 0xe4eb, 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0xbeaa,
-  0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0xe8f6, 0xbea8, 0xe8f7,
-  0xe8f4, 0xc076, 0xecbd, 0xc077, 0xecbb, 0xecbc, 0xecba, 0xecb9,
-  0xecbe, 0xc075, 0xefb8, 0xefb9, 0xe4e8, 0xefb7, 0xc078, 0xc35f,
-  0xf1eb, 0xf1ec, 0xc4d7, 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b,
-  0xf7d0, 0xa449, 0xa461, 0xa4b9, 0xa4b8, 0xa553, 0xa552, 0xa5fc,
-  0xa5fb, 0xa5fd, 0xa5fa, 0xa74a, 0xa749, 0xa74b, 0xa8e0, 0xa8df,
-  0xa8e1, 0xab5e, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b,
-  0xd860, 0xa25d, 0xb9b8, 0xa25e, 0xa44a, 0xa4ba, 0xa5fe, 0xa8e2,
-  0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0xa640, 0xa74c, 0xa8e4, 0xa8e3,
-  0xa8e5, 0xaddd, 0xbeac, 0xc94e, 0xa554, 0xa555, 0xa641, 0xca6a,
-  0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0xa4be, 0xc955, 0xcbcd,
-  0xab61, 0xade0, 0xadde, 0xaddf, 0xbead, 0xa556, 0xa642, 0xc9bc,
-  0xa74d, 0xa74e, 0xca6b, 0xcbce, 0xa8e6, 0xcbcf, 0xd0e2, 0xd0e3,
-  0xade3, 0xd0e4, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0xd468,
-  0xd861, 0xdcc5, 0xe140, 0xbbfe, 0xbeae, 0xe8f9, 0xa44c, 0xa45a,
-  0xb0c4, 0xb3cd, 0xb9b9, 0xc942, 0xa4bf, 0xa559, 0xa557, 0xa558,
-  0xa8e7, 0xa44d, 0xa44e, 0xa462, 0xa4c0, 0xa4c1, 0xa4c2, 0xc9be,
-  0xa55a, 0xc96b, 0xa646, 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0xa647,
-  0xa643, 0xca6c, 0xaaec, 0xca6d, 0xca6e, 0xa750, 0xa74f, 0xa753,
-  0xa751, 0xa752, 0xa8ed, 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0xcbd0,
-  0xa8ee, 0xa8ea, 0xa8e9, 0xa8eb, 0xa8e8, 0xa8ef, 0xab63, 0xcdf0,
-  0xcbd3, 0xab68, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62,
-  0xd0e8, 0xade7, 0xd0eb, 0xade5, 0xd0e7, 0xade8, 0xade6, 0xade9,
-  0xd0e9, 0xd0ea, 0xd0e6, 0xd0ec, 0xb3d1, 0xb0c5, 0xd469, 0xd46b,
-  0xd46a, 0xd46c, 0xb0c6, 0xb3ce, 0xb3cf, 0xb3d0, 0xb6d0, 0xdcc7,
-  0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0xb6cf, 0xe141, 0xe142, 0xb9bb,
-  0xb9ba, 0xe35a, 0xbc40, 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3,
-  0xbc43, 0xbeaf, 0xbeb0, 0xf1ed, 0xf5c3, 0xf5c2, 0xf7d1, 0xa44f,
-  0xa55c, 0xa55b, 0xa648, 0xc9c0, 0xa755, 0xa756, 0xa754, 0xa757,
-  0xca6f, 0xca70, 0xa8f1, 0xcbd5, 0xa8f0, 0xcdf2, 0xab6c, 0xcdf3,
-  0xab6b, 0xab69, 0xab6a, 0xd0ed, 0xb0c7, 0xd46e, 0xb0ca, 0xd46d,
-  0xb1e5, 0xb0c9, 0xb0c8, 0xb3d4, 0xb3d3, 0xb3d2, 0xb6d2, 0xb6d5,
-  0xb6d6, 0xb6d4, 0xb6d3, 0xe143, 0xe144, 0xe4f5, 0xbc45, 0xe4f4,
-  0xbeb1, 0xecbf, 0xc079, 0xf1ee, 0xc455, 0xa463, 0xa4c3, 0xc956,
-  0xa4c4, 0xa4c5, 0xa55d, 0xa55e, 0xa649, 0xca71, 0xcbd6, 0xcbd7,
-  0xab6d, 0xd0ee, 0xb0cc, 0xb0cb, 0xd863, 0xd862, 0xa450, 0xa4c6,
-  0xa55f, 0xb0cd, 0xc943, 0xc96c, 0xa560, 0xc9c2, 0xa64b, 0xa64a,
-  0xc9c1, 0xa758, 0xadea, 0xd46f, 0xb6d7, 0xe145, 0xb9bc, 0xe8fa,
-  0xf3fd, 0xa4c7, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, 0xb0cf, 0xa451,
-  0xa464, 0xa2cd, 0xa4ca, 0xa4c9, 0xa4c8, 0xa563, 0xa562, 0xc96d,
-  0xc9c3, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0xab6e, 0xb3d5, 0xa452,
-  0xa4cb, 0xa565, 0xa564, 0xca72, 0xa8f6, 0xc957, 0xa567, 0xa566,
-  0xa64c, 0xa64d, 0xca73, 0xa759, 0xa75a, 0xa8f7, 0xa8f8, 0xa8f9,
-  0xab6f, 0xcdf5, 0xadeb, 0xc944, 0xa4cc, 0xc9c4, 0xca74, 0xca75,
-  0xcbd9, 0xcbda, 0xcdf7, 0xcdf6, 0xcdf9, 0xcdf8, 0xab70, 0xd470,
-  0xaded, 0xd0ef, 0xadec, 0xd864, 0xb3d6, 0xd865, 0xe146, 0xb9bd,
-  0xbc46, 0xf1ef, 0xc958, 0xa568, 0xb0d1, 0xa453, 0xa465, 0xa4ce,
-  0xa4cd, 0xa4cf, 0xa8fb, 0xa8fa, 0xa8fc, 0xab71, 0xadee, 0xe8fb,
-  0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0xa56f, 0xa56e, 0xa575,
-  0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, 0xa578, 0xa577, 0xa576,
-  0xa56b, 0xa572, 0xa571, 0xa57b, 0xa570, 0xa653, 0xa659, 0xa655,
-  0xa65b, 0xc9c5, 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657,
-  0xa65a, 0xa64f, 0xa652, 0xa656, 0xa65c, 0xca7e, 0xca7b, 0xa767,
-  0xca7c, 0xa75b, 0xa75d, 0xa775, 0xa770, 0xcaa5, 0xca7d, 0xa75f,
-  0xa761, 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d,
-  0xca76, 0xa773, 0xa764, 0xa76e, 0xa76f, 0xca77, 0xa76c, 0xa76a,
-  0xa76b, 0xa771, 0xcaa1, 0xa75e, 0xa772, 0xcaa3, 0xa766, 0xa763,
-  0xca7a, 0xa762, 0xcaa6, 0xa765, 0xa769, 0xa760, 0xcaa2, 0xca79,
-  0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee,
-  0xa950, 0xcbe1, 0xcbe5, 0xcbe9, 0xce49, 0xa94b, 0xce4d, 0xa8fd,
-  0xcbe6, 0xa8fe, 0xa94c, 0xa945, 0xa941, 0xcbe2, 0xa944, 0xa949,
-  0xa952, 0xcbe3, 0xcbdc, 0xa943, 0xcbdd, 0xcbdf, 0xa946, 0xa948,
-  0xcbdb, 0xcbe0, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0xa94a, 0xcbde,
-  0xa947, 0xa942, 0xa940, 0xcbec, 0xa94e, 0xce48, 0xcdfb, 0xce4b,
-  0xcdfd, 0xab78, 0xaba8, 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72,
-  0xcdfc, 0xce43, 0xaba3, 0xce4f, 0xaba5, 0xab79, 0xce45, 0xce42,
-  0xab77, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, 0xab73,
-  0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, 0xaba2,
-  0xab76, 0xab75, 0xcdfe, 0xce44, 0xce4e, 0xd144, 0xadfb, 0xd0f1,
-  0xd0f6, 0xadf4, 0xae40, 0xd0f4, 0xadef, 0xadf9, 0xadfe, 0xd0fb,
-  0xadfa, 0xadfd, 0xd0fe, 0xadf5, 0xd0f5, 0xd142, 0xd143, 0xadf7,
-  0xd141, 0xadf3, 0xae43, 0xd0f8, 0xadf1, 0xd146, 0xd0f9, 0xd0fd,
-  0xadf6, 0xae42, 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0xd145,
-  0xae44, 0xadf0, 0xd0fc, 0xd0f3, 0xadf8, 0xd0f2, 0xd0f7, 0xd0f0,
-  0xae41, 0xd477, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, 0xd47c, 0xb0db,
-  0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, 0xb0e1, 0xd4a5,
-  0xd4a8, 0xd473, 0xb3e8, 0xd4a9, 0xb0e7, 0xb0d9, 0xb0d6, 0xd47e,
-  0xb0d3, 0xd4a6, 0xb0da, 0xd4aa, 0xd474, 0xd4a4, 0xb0dd, 0xd475,
-  0xd478, 0xd47d, 0xb0de, 0xb0dc, 0xb0e8, 0xb0e3, 0xb0d7, 0xb1d2,
-  0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0xb0d4, 0xd471,
-  0xd472, 0xd86a, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, 0xb3d8,
-  0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0xb3e2, 0xd86e, 0xb3ef, 0xb3db,
-  0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, 0xd866, 0xd873, 0xd86d,
-  0xb3e1, 0xd879, 0xb3dd, 0xb3f1, 0xb3ea, 0xb3df, 0xb3dc, 0xb3e7,
-  0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, 0xd867,
-  0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0xb3ed, 0xb3e9, 0xb3e5,
-  0xd870, 0xb3eb, 0xdcd5, 0xdcd1, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5,
-  0xb6e6, 0xb6de, 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde,
-  0xb6dc, 0xdcd8, 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9,
-  0xdcdb, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0xb6d8, 0xb6e4,
-  0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, 0xb6d9, 0xdcd4,
-  0xb6e2, 0xdcdd, 0xb9cd, 0xb9c8, 0xe155, 0xe151, 0xe14b, 0xb9c2,
-  0xb9be, 0xe154, 0xb9bf, 0xe14e, 0xe150, 0xe153, 0xb9c4, 0xb9cb,
-  0xb9c5, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, 0xb9cc, 0xe14a, 0xe14f,
-  0xb9c3, 0xe148, 0xb9c9, 0xb9c1, 0xb9c0, 0xe14d, 0xe152, 0xb9ca,
-  0xe147, 0xbc4d, 0xe547, 0xe544, 0xbc47, 0xbc53, 0xbc54, 0xbc4a,
-  0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0xe546, 0xbc49, 0xe548, 0xbc48,
-  0xe543, 0xe545, 0xbc4b, 0xe541, 0xe4fa, 0xe4f7, 0xd86b, 0xe4fd,
-  0xe4f6, 0xe4fc, 0xe4fb, 0xe4f8, 0xbc4f, 0xbc4e, 0xbc50, 0xe4fe,
-  0xbeb2, 0xe540, 0xe945, 0xe8fd, 0xbebe, 0xe942, 0xbeb6, 0xbeba,
-  0xe941, 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe,
-  0xbebc, 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0xbebf, 0xe946,
-  0xbeb7, 0xbeb4, 0xecc6, 0xecc8, 0xc07b, 0xecc9, 0xecc7, 0xecc5,
-  0xecc4, 0xc07d, 0xecc3, 0xc07e, 0xecc1, 0xecc2, 0xc07a, 0xc0a1,
-  0xc07c, 0xecc0, 0xc250, 0xefbc, 0xefba, 0xefbf, 0xefbd, 0xefbb,
-  0xefbe, 0xc360, 0xf1f2, 0xf1f3, 0xc456, 0xf1f4, 0xf1f0, 0xf1f5,
-  0xf1f1, 0xc251, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457,
-  0xc45a, 0xf5c5, 0xf5c6, 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0xf6d8,
-  0xf6d7, 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0xc5f1,
-  0xf8a5, 0xf8ee, 0xc949, 0xa57d, 0xa57c, 0xa65f, 0xa65e, 0xc9c7,
-  0xa65d, 0xc9c6, 0xa779, 0xcaa9, 0xcaa8, 0xa777, 0xa77a, 0xcaa7,
-  0xa778, 0xcbf0, 0xcbf1, 0xa954, 0xabaa, 0xd148, 0xd149, 0xae45,
-  0xae46, 0xd4ac, 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2,
-  0xb6e9, 0xb6ea, 0xdce1, 0xb9cf, 0xb9ce, 0xe549, 0xe948, 0xe947,
-  0xf96b, 0xa467, 0xc959, 0xc96e, 0xc96f, 0xa662, 0xa666, 0xc9c9,
-  0xa664, 0xa663, 0xc9c8, 0xa665, 0xa661, 0xa660, 0xc9ca, 0xa7a6,
-  0xa7a3, 0xa77d, 0xcaaa, 0xcaab, 0xa7a1, 0xcaad, 0xa77b, 0xcaae,
-  0xcaac, 0xa77e, 0xa7a2, 0xa7a5, 0xa7a4, 0xa77c, 0xcaaf, 0xa959,
-  0xcbfe, 0xa95b, 0xa95a, 0xcc40, 0xa958, 0xa957, 0xcbf5, 0xcbf4,
-  0xcbf2, 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8,
-  0xa956, 0xcbfb, 0xa95c, 0xcc41, 0xcbf9, 0xabab, 0xa955, 0xabac,
-  0xce54, 0xce5a, 0xabb2, 0xce58, 0xce5e, 0xce55, 0xce59, 0xce5b,
-  0xce5d, 0xce57, 0xce56, 0xce51, 0xce52, 0xabad, 0xabaf, 0xabae,
-  0xce53, 0xce5c, 0xabb1, 0xce50, 0xd153, 0xd152, 0xd157, 0xd14e,
-  0xd151, 0xd150, 0xd154, 0xd158, 0xae47, 0xae4a, 0xd14f, 0xd155,
-  0xae49, 0xd14a, 0xabb0, 0xd4ba, 0xd156, 0xd14d, 0xae48, 0xd14c,
-  0xd4b1, 0xb0ec, 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf,
-  0xd4c5, 0xd4c9, 0xd4c0, 0xd4b4, 0xd4bc, 0xd4ca, 0xd4c8, 0xd4be,
-  0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, 0xd4b7, 0xb0f6, 0xb0f2,
-  0xd4ad, 0xd4c3, 0xd4b5, 0xd4b3, 0xd4c6, 0xb0f3, 0xd4cc, 0xb0ed,
-  0xb0ef, 0xd4bb, 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb,
-  0xd4c2, 0xd4c4, 0xd4ae, 0xd8a1, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2,
-  0xb3fb, 0xb3f9, 0xd8a4, 0xb3f6, 0xd8a8, 0xd8a3, 0xd8a5, 0xd87d,
-  0xb3f4, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, 0xb3f7, 0xb3f8, 0xd14b,
-  0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, 0xd8b0, 0xd8af, 0xd8b3,
-  0xdcef, 0xd8ac, 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6,
-  0xdcea, 0xdce5, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0xb6ee,
-  0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0xdceb, 0xb6eb, 0xb6f5, 0xdcf0,
-  0xdce4, 0xdced, 0xdce3, 0xb6f1, 0xb6f3, 0xdce8, 0xdcf1, 0xe15d,
-  0xb9d0, 0xe163, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1,
-  0xe15c, 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0xb9d6, 0xe15a, 0xe160,
-  0xe165, 0xe156, 0xb9d4, 0xe15e, 0xe162, 0xe168, 0xe158, 0xe161,
-  0xb9d3, 0xe167, 0xe159, 0xbc59, 0xe54b, 0xbc57, 0xbc56, 0xe54d,
-  0xe552, 0xe54e, 0xe551, 0xbc5c, 0xbea5, 0xbc5b, 0xe54a, 0xe550,
-  0xbc5a, 0xe54f, 0xe54c, 0xbc58, 0xe94d, 0xe94f, 0xe94a, 0xbec1,
-  0xe94c, 0xbec0, 0xe94e, 0xbec3, 0xe950, 0xbec2, 0xe949, 0xe94b,
-  0xc0a5, 0xeccc, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca,
-  0xc253, 0xc252, 0xf1f6, 0xf1f8, 0xf1f7, 0xc361, 0xc362, 0xc363,
-  0xf442, 0xc45b, 0xf7d3, 0xf7d2, 0xc5f2, 0xa468, 0xa4d0, 0xa7a7,
-  0xce5f, 0xb3fc, 0xb3fd, 0xdcf2, 0xb9d8, 0xe169, 0xe553, 0xc95a,
-  0xcab0, 0xcc42, 0xce60, 0xd159, 0xae4c, 0xf1f9, 0xc4dc, 0xa469,
-  0xa57e, 0xc970, 0xa667, 0xa668, 0xa95d, 0xb0f7, 0xb9da, 0xb9db,
-  0xb9d9, 0xa46a, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1,
-  0xc971, 0xa5a2, 0xa669, 0xa66a, 0xc9cb, 0xa7a8, 0xcab1, 0xa961,
-  0xcc43, 0xa95f, 0xa960, 0xa95e, 0xd15a, 0xabb6, 0xabb5, 0xabb7,
-  0xabb4, 0xce61, 0xa962, 0xabb3, 0xae4d, 0xae4e, 0xae4f, 0xd4cd,
-  0xb3fe, 0xd8b4, 0xb0f8, 0xb6f8, 0xb9dd, 0xb9dc, 0xe16a, 0xbc5d,
-  0xbec4, 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0xa5a4, 0xc9d1,
-  0xa66c, 0xa66f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, 0xc9cc,
-  0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0xa7b3, 0xa7b0, 0xcab6,
-  0xcab9, 0xcab8, 0xa7aa, 0xa7b2, 0xa7af, 0xcab5, 0xcab3, 0xa7ae,
-  0xa7a9, 0xa7ac, 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4,
-  0xcab2, 0xcaba, 0xa7ab, 0xa967, 0xa96f, 0xcc4f, 0xcc48, 0xa970,
-  0xcc53, 0xcc44, 0xcc4b, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50,
-  0xa963, 0xcc51, 0xcc4a, 0xcc4d, 0xa972, 0xa969, 0xcc54, 0xcc52,
-  0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, 0xa96a, 0xa968,
-  0xa971, 0xa96d, 0xa965, 0xcc4e, 0xabb9, 0xabc0, 0xce6f, 0xabb8,
-  0xce67, 0xce63, 0xce73, 0xce62, 0xabbb, 0xce6c, 0xabbe, 0xabc1,
-  0xabbc, 0xce70, 0xabbf, 0xae56, 0xce76, 0xce64, 0xce66, 0xce6d,
-  0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, 0xce68, 0xabc3, 0xce6a,
-  0xce69, 0xce74, 0xabba, 0xce65, 0xabc2, 0xabbd, 0xae5c, 0xd162,
-  0xae5b, 0xd160, 0xae50, 0xae55, 0xd15f, 0xd15c, 0xd161, 0xae51,
-  0xd15b, 0xae54, 0xae52, 0xd163, 0xae53, 0xae57, 0xae58, 0xae5a,
-  0xae59, 0xd15d, 0xd15e, 0xd164, 0xd4d4, 0xb0f9, 0xd8c2, 0xd4d3,
-  0xd4e6, 0xb140, 0xd4e4, 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0,
-  0xb143, 0xd4ea, 0xd4e2, 0xb0fb, 0xb144, 0xd4e7, 0xd4e5, 0xd4d6,
-  0xd4eb, 0xd4df, 0xd4da, 0xd4d0, 0xd4ec, 0xd4dc, 0xd4cf, 0xb142,
-  0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, 0xd4ce, 0xb141, 0xd4db,
-  0xd4d8, 0xb0fc, 0xd4d1, 0xd4e9, 0xb0fd, 0xd4d9, 0xd4d5, 0xd4e8,
-  0xb440, 0xd8bb, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0xb442, 0xd8c6,
-  0xd8c3, 0xd8c4, 0xd8c7, 0xd8cb, 0xd4e3, 0xd8cd, 0xdd47, 0xb443,
-  0xd8ce, 0xd8b6, 0xd8c0, 0xd8c5, 0xb441, 0xb444, 0xd8cc, 0xd8cf,
-  0xd8ba, 0xd8b7, 0xd8b9, 0xd8be, 0xd8bc, 0xb445, 0xd8c8, 0xd8bf,
-  0xd8c1, 0xd8b5, 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9,
-  0xdd44, 0xdd40, 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd,
-  0xb6fc, 0xdcfb, 0xdd41, 0xb6f9, 0xb741, 0xdcf4, 0xdcfe, 0xdcf3,
-  0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0xe16e, 0xb9e2,
-  0xb9e1, 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178,
-  0xe17c, 0xe175, 0xb9de, 0xe174, 0xb9e4, 0xe16d, 0xb9df, 0xe17b,
-  0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0xe173, 0xe555,
-  0xbc61, 0xe558, 0xe557, 0xe55a, 0xe55c, 0xbc5f, 0xe556, 0xe554,
-  0xe55d, 0xe55b, 0xe559, 0xe55f, 0xe55e, 0xbc63, 0xbc5e, 0xbc60,
-  0xbc62, 0xe560, 0xe957, 0xe956, 0xe955, 0xe958, 0xe951, 0xe952,
-  0xe95a, 0xe953, 0xbec5, 0xe95c, 0xe95b, 0xe954, 0xecd1, 0xc0a8,
-  0xeccf, 0xecd4, 0xecd3, 0xe959, 0xc0a7, 0xecd2, 0xecce, 0xecd6,
-  0xecd5, 0xc0a6, 0xecd0, 0xbec6, 0xc254, 0xefc1, 0xf1fa, 0xf1fb,
-  0xf1fc, 0xc45c, 0xc45d, 0xf443, 0xf5c8, 0xf5c7, 0xf6db, 0xf6dc,
-  0xf7d5, 0xf8a7, 0xa46c, 0xa46d, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3,
-  0xa672, 0xa673, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0xa973, 0xcc55,
-  0xa975, 0xa974, 0xcc56, 0xabc4, 0xae5d, 0xd165, 0xd4f0, 0xb145,
-  0xb447, 0xd4ef, 0xb446, 0xb9e5, 0xe17d, 0xbec7, 0xc0a9, 0xecd7,
-  0xc45e, 0xc570, 0xc972, 0xa5a6, 0xc973, 0xa676, 0xa674, 0xa675,
-  0xa677, 0xa7ba, 0xa7b9, 0xcabc, 0xa7bb, 0xcabd, 0xcc57, 0xcc58,
-  0xa976, 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0xabc8, 0xabc5,
-  0xabc7, 0xabc9, 0xabc6, 0xd166, 0xce77, 0xd168, 0xd167, 0xae63,
-  0xae5f, 0xae60, 0xae62, 0xae64, 0xae61, 0xae66, 0xae65, 0xb14a,
-  0xd4f2, 0xd4f1, 0xb149, 0xb148, 0xb147, 0xb14b, 0xb146, 0xd8d5,
-  0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0xb44b, 0xd8d4, 0xb448, 0xb44a,
-  0xd8d3, 0xdd48, 0xdd49, 0xdd4a, 0xb9e6, 0xb9ee, 0xe17e, 0xb9e8,
-  0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, 0xb9eb, 0xbc66,
-  0xd8d0, 0xbc67, 0xbc65, 0xbc64, 0xe95d, 0xbec8, 0xecd8, 0xecd9,
-  0xc364, 0xc45f, 0xa46f, 0xa678, 0xabca, 0xd169, 0xae67, 0xb14e,
-  0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470,
-  0xc95c, 0xa4d6, 0xc974, 0xc9d4, 0xa679, 0xa97c, 0xdd4b, 0xa471,
-  0xa4d7, 0xc9d5, 0xcabe, 0xcabf, 0xa7bc, 0xd8d8, 0xb44e, 0xdd4c,
-  0xc0aa, 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0xa7c0, 0xa7bf,
-  0xa7bd, 0xa7be, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, 0xa97d, 0xabce,
-  0xce78, 0xabcd, 0xabcb, 0xabcc, 0xae6a, 0xae68, 0xd16b, 0xae69,
-  0xd16a, 0xae5e, 0xd4f3, 0xb150, 0xb151, 0xb14f, 0xb9f0, 0xe1a2,
-  0xbc68, 0xbc69, 0xe561, 0xc0ab, 0xefc2, 0xefc3, 0xc4dd, 0xf8a8,
-  0xc94b, 0xa4d9, 0xa473, 0xc977, 0xc976, 0xa67a, 0xc9d7, 0xc9d8,
-  0xc9d6, 0xc9d9, 0xcac7, 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4,
-  0xcac0, 0xcac1, 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9,
-  0xcc68, 0xcc62, 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69,
-  0xcc6c, 0xcc67, 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64,
-  0xcc5b, 0xcc5f, 0xcc6b, 0xa9a7, 0xa9a8, 0xcc5e, 0xcc6a, 0xa9a2,
-  0xa9a4, 0xceab, 0xcea4, 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b,
-  0xceac, 0xcea9, 0xce79, 0xabd0, 0xcea7, 0xcea8, 0xcea6, 0xce7c,
-  0xce7a, 0xabcf, 0xcea2, 0xce7e, 0xcea1, 0xcead, 0xae6f, 0xae6e,
-  0xd16c, 0xae6b, 0xd16e, 0xae70, 0xd16f, 0xae73, 0xae71, 0xd170,
-  0xceae, 0xd172, 0xae6d, 0xae6c, 0xd16d, 0xd171, 0xae72, 0xb153,
-  0xb152, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, 0xb158, 0xd541,
-  0xb15a, 0xb156, 0xb15e, 0xb15b, 0xd4f7, 0xb155, 0xd4f6, 0xd4f4,
-  0xd543, 0xd4f8, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d,
-  0xd4fa, 0xb159, 0xd544, 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451,
-  0xd8df, 0xd8ef, 0xd8d9, 0xd8ec, 0xd8ea, 0xd8e4, 0xd8ed, 0xd8e6,
-  0xd8de, 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0xd8f1, 0xb452, 0xd8eb,
-  0xdd4f, 0xd8dd, 0xb44f, 0xd8e1, 0xb450, 0xd8e0, 0xd8e5, 0xd8e2,
-  0xd8e8, 0xdd53, 0xdd56, 0xdd4e, 0xdd50, 0xdd55, 0xdd54, 0xb743,
-  0xd8db, 0xdd52, 0xb744, 0xdd4d, 0xdd51, 0xe1a9, 0xe1b0, 0xe1a7,
-  0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, 0xe1a4, 0xe1a8, 0xe1a3, 0xb9f1,
-  0xe1a6, 0xb9f2, 0xe1ac, 0xe1ab, 0xe1aa, 0xe1af, 0xe565, 0xe567,
-  0xbc6b, 0xe568, 0xe563, 0xe562, 0xe56c, 0xe56a, 0xbc6a, 0xe56d,
-  0xe564, 0xe569, 0xe56b, 0xe566, 0xe961, 0xe966, 0xe960, 0xe965,
-  0xe95e, 0xe968, 0xe964, 0xe969, 0xe963, 0xe95f, 0xe967, 0xe96a,
-  0xe962, 0xecda, 0xc0af, 0xc0ad, 0xc0ac, 0xc0ae, 0xefc4, 0xf172,
-  0xf1fd, 0xf444, 0xf445, 0xc460, 0xf5c9, 0xc4de, 0xf5ca, 0xf6de,
-  0xc572, 0xc571, 0xf6dd, 0xc5c9, 0xf7d6, 0xa474, 0xa67b, 0xc9da,
-  0xcaca, 0xa8b5, 0xb15f, 0xa475, 0xa5aa, 0xa5a9, 0xa5a8, 0xa7c5,
-  0xae74, 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0xabd1, 0xceaf,
-  0xb453, 0xa479, 0xc95d, 0xa5ab, 0xa5ac, 0xc978, 0xa67c, 0xcacb,
-  0xa7c6, 0xcacc, 0xa9ae, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, 0xa9a9,
-  0xcc6f, 0xa9aa, 0xa9ad, 0xabd2, 0xabd4, 0xceb3, 0xceb0, 0xceb1,
-  0xceb2, 0xceb4, 0xabd3, 0xd174, 0xd173, 0xae76, 0xae75, 0xb162,
-  0xd546, 0xb161, 0xb163, 0xb160, 0xb455, 0xd545, 0xb456, 0xd8f3,
-  0xb457, 0xd8f2, 0xb454, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59,
-  0xdd58, 0xe1b4, 0xb9f7, 0xb9f5, 0xb9f6, 0xe1b2, 0xe1b3, 0xb9f3,
-  0xe571, 0xe56f, 0xbc6d, 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0xe96d,
-  0xe96b, 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6,
-  0xe96e, 0xf1fe, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0xa9af,
-  0xb746, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0xc979, 0xc97a, 0xc9dc,
-  0xa7c8, 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0xa7c7,
-  0xa9b3, 0xa9b4, 0xa9b1, 0xa9b0, 0xceb8, 0xa9b2, 0xabd6, 0xceb7,
-  0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, 0xd175, 0xd177, 0xae77,
-  0xd178, 0xae78, 0xd176, 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548,
-  0xb167, 0xb166, 0xb164, 0xb165, 0xd549, 0xb168, 0xb45a, 0xb45b,
-  0xb45c, 0xdd5d, 0xdd5f, 0xdd61, 0xb748, 0xb747, 0xb459, 0xdd60,
-  0xdd5e, 0xe1b8, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9,
-  0xe1b7, 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574,
-  0xbc71, 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0xe973, 0xe971, 0xe970,
-  0xe972, 0xe96f, 0xc366, 0xf446, 0xf447, 0xf5cb, 0xf6df, 0xc655,
-  0xa9b5, 0xa7ca, 0xabd8, 0xa47b, 0xa4dc, 0xa5af, 0xc9dd, 0xa7cb,
-  0xcad2, 0xcebb, 0xabd9, 0xb9fa, 0xa47c, 0xa6a1, 0xb749, 0xa47d,
-  0xa4dd, 0xa4de, 0xa5b1, 0xa5b0, 0xc9de, 0xa6a2, 0xcad3, 0xa7cc,
-  0xcc71, 0xcc72, 0xcc73, 0xa9b6, 0xa9b7, 0xcc70, 0xa9b8, 0xabda,
-  0xcebc, 0xd17a, 0xae7a, 0xd179, 0xb169, 0xd54c, 0xb16a, 0xd54d,
-  0xb45d, 0xdd62, 0xe1bf, 0xe1be, 0xb9fb, 0xbc75, 0xe576, 0xbeca,
-  0xe974, 0xc0b1, 0xc573, 0xf7d8, 0xcc74, 0xcebd, 0xb16b, 0xd8f4,
-  0xb74a, 0xc255, 0xa7ce, 0xa7cd, 0xabdb, 0xd17b, 0xb16d, 0xb343,
-  0xb16e, 0xb16c, 0xb45e, 0xe1c0, 0xb9fc, 0xbc76, 0xc94c, 0xc9df,
-  0xcad5, 0xa7cf, 0xcad4, 0xa7d0, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb,
-  0xa9b9, 0xa9ba, 0xcc75, 0xabdd, 0xcebe, 0xabe0, 0xabdc, 0xabe2,
-  0xabde, 0xabdf, 0xabe1, 0xae7d, 0xae7c, 0xae7b, 0xd54f, 0xb16f,
-  0xb172, 0xb170, 0xd54e, 0xb175, 0xb171, 0xd550, 0xb174, 0xb173,
-  0xd8f6, 0xd8f5, 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64,
-  0xb74c, 0xdd63, 0xe577, 0xbc78, 0xe1c1, 0xbc77, 0xb9fd, 0xecde,
-  0xe975, 0xc0b2, 0xecdd, 0xf240, 0xf448, 0xf449, 0xa4df, 0xa5b2,
-  0xc97b, 0xa7d2, 0xa7d4, 0xc9e2, 0xcad8, 0xcad7, 0xcad6, 0xc9e1,
-  0xc9e0, 0xa6a4, 0xa7d3, 0xa7d1, 0xa6a3, 0xa9bd, 0xcc78, 0xa9be,
-  0xcadd, 0xcadf, 0xcade, 0xcc79, 0xcada, 0xa7d8, 0xa7d6, 0xcad9,
-  0xcadb, 0xcae1, 0xa7d5, 0xcadc, 0xcae5, 0xa9c0, 0xcae2, 0xa7d7,
-  0xcae0, 0xcae3, 0xa9bf, 0xa9c1, 0xcae4, 0xccaf, 0xcca2, 0xcc7e,
-  0xccae, 0xcca9, 0xabe7, 0xa9c2, 0xccaa, 0xccad, 0xabe3, 0xccac,
-  0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0,
-  0xabe4, 0xcca6, 0xabe5, 0xa9c9, 0xcca8, 0xcecd, 0xabe6, 0xcc7b,
-  0xa9ca, 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab,
-  0xa9c4, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0xcebf, 0xcec0, 0xceca,
-  0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, 0xcec7,
-  0xcec9, 0xabe9, 0xaea3, 0xcec5, 0xcec1, 0xaea4, 0xcecf, 0xae7e,
-  0xd17d, 0xcec8, 0xd17c, 0xcec3, 0xcecc, 0xabec, 0xaea1, 0xabf2,
-  0xaea2, 0xced0, 0xd17e, 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef,
-  0xaea5, 0xced1, 0xaea7, 0xabea, 0xcec2, 0xb176, 0xd1a4, 0xd1a6,
-  0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, 0xd1a3, 0xb178, 0xd551,
-  0xaead, 0xaeab, 0xd1ae, 0xd552, 0xd1a5, 0xaeac, 0xd1a9, 0xaeaf,
-  0xd1ab, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0xaea9, 0xb179, 0xd1a2,
-  0xb177, 0xb17a, 0xd555, 0xd55e, 0xb464, 0xb17c, 0xb1a3, 0xb465,
-  0xd560, 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554,
-  0xd562, 0xd565, 0xd949, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac,
-  0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559,
-  0xb462, 0xd557, 0xd558, 0xb1a7, 0xb1a6, 0xd55b, 0xb1ab, 0xd55f,
-  0xb1a4, 0xd55c, 0xb1a9, 0xb466, 0xb463, 0xd8fb, 0xd55a, 0xb17d,
-  0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65,
-  0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0xd948, 0xd94e, 0xb473,
-  0xb754, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0xb755, 0xb472, 0xd941,
-  0xd950, 0xb75d, 0xb470, 0xb74e, 0xd94d, 0xb474, 0xd945, 0xd8fe,
-  0xb46a, 0xd942, 0xd94b, 0xb74d, 0xb752, 0xb467, 0xd94c, 0xb750,
-  0xb468, 0xb75c, 0xe1c3, 0xdd70, 0xdd68, 0xe1c2, 0xdd6c, 0xdd6e,
-  0xdd6b, 0xb75b, 0xdd6a, 0xb75f, 0xe1d2, 0xb75a, 0xba40, 0xdd71,
-  0xe1c4, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, 0xb74f, 0xdd66, 0xdd67,
-  0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, 0xe1c8, 0xe1c9, 0xe1ce,
-  0xbc7d, 0xe1d5, 0xba47, 0xba46, 0xe1d0, 0xbc7c, 0xe1c5, 0xba45,
-  0xe1d4, 0xba43, 0xba44, 0xe1d1, 0xe5aa, 0xbc7a, 0xb46e, 0xe1d3,
-  0xbca3, 0xe1cb, 0xbc7b, 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd,
-  0xba48, 0xbc79, 0xba42, 0xe57a, 0xe1cf, 0xbca1, 0xbca4, 0xe1cc,
-  0xbc7e, 0xe579, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8,
-  0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0xe978, 0xbcaa, 0xe5a1,
-  0xe976, 0xe5a5, 0xe5a8, 0xe57d, 0xbcab, 0xbca5, 0xe977, 0xbecd,
-  0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, 0xe57c, 0xe57b,
-  0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0xe9a2, 0xe97e, 0xece1,
-  0xbed1, 0xe9a1, 0xe97c, 0xc0b4, 0xecdf, 0xe979, 0xe97b, 0xc0b5,
-  0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0xefcf, 0xefc7,
-  0xece7, 0xefc8, 0xece3, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2,
-  0xece6, 0xefd0, 0xefcc, 0xefce, 0xefc9, 0xefca, 0xefcd, 0xefcb,
-  0xc367, 0xc36a, 0xc369, 0xc368, 0xc461, 0xf44a, 0xc462, 0xf241,
-  0xc4df, 0xf5cc, 0xc4e0, 0xc574, 0xc5ca, 0xf7d9, 0xf7da, 0xf7db,
-  0xf9ba, 0xa4e0, 0xc97c, 0xa5b3, 0xa6a6, 0xa6a7, 0xa6a5, 0xa6a8,
-  0xa7da, 0xa7d9, 0xccb1, 0xa9cf, 0xa9ce, 0xd1af, 0xb1ad, 0xb1ae,
-  0xb475, 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0xe1d7,
-  0xe1d6, 0xba49, 0xe1d8, 0xe5ac, 0xbcae, 0xbed4, 0xc0b8, 0xc257,
-  0xc0b9, 0xa4e1, 0xcae6, 0xccb2, 0xa9d1, 0xa9d0, 0xa9d2, 0xabf3,
-  0xced2, 0xced3, 0xd1b0, 0xaeb0, 0xb1af, 0xb476, 0xd951, 0xa4e2,
-  0xa47e, 0xa4e3, 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0xa6ab,
-  0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0xc9e4, 0xc9ea, 0xc9e6, 0xc9e8,
-  0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0xa7e1, 0xa7ea, 0xa7e8, 0xcaf0,
-  0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0xa7df, 0xcaf3, 0xa7e5, 0xcaef,
-  0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, 0xa7de, 0xcaf1, 0xcae7,
-  0xa7db, 0xa7ee, 0xcaec, 0xcaf2, 0xa7e0, 0xa7e2, 0xcae8, 0xcae9,
-  0xcaea, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc,
-  0xa7e9, 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba,
-  0xccbc, 0xccbf, 0xa9ea, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0xccc0,
-  0xa9d9, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, 0xa9d8, 0xa9d6,
-  0xa9ee, 0xa9e6, 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7,
-  0xa9f0, 0xced4, 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0xa9ec,
-  0xa9ed, 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0xceda, 0xac41,
-  0xabf8, 0xabfa, 0xac40, 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43,
-  0xced7, 0xcedf, 0xabfe, 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7,
-  0xabfb, 0xac42, 0xaeb3, 0xcee0, 0xabf9, 0xac45, 0xced9, 0xabfc,
-  0xaeb2, 0xabf6, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, 0xd1b2,
-  0xac44, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0xaec1, 0xd1be, 0xaebf,
-  0xaec0, 0xd1b4, 0xd1c4, 0xaeb6, 0xd566, 0xd1c6, 0xd1c0, 0xd1b7,
-  0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0xd1cb,
-  0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, 0xd1cc,
-  0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, 0xaebd,
-  0xd1c8, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, 0xd1c1, 0xd1c3, 0xd1c7,
-  0xd567, 0xb1b7, 0xb1cb, 0xb1ca, 0xb1bf, 0xd579, 0xd575, 0xd572,
-  0xd5a6, 0xb1ba, 0xb1b2, 0xd577, 0xb4a8, 0xb1b6, 0xd5a1, 0xb1cc,
-  0xb1c9, 0xd57b, 0xd56a, 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1,
-  0xd5a2, 0xd573, 0xb1c2, 0xb1bc, 0xd568, 0xb478, 0xd5a5, 0xd571,
-  0xb1c7, 0xd574, 0xd5a4, 0xb1c6, 0xd952, 0xb1b3, 0xd56f, 0xb1b8,
-  0xb1c3, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, 0xb1b0, 0xb1c4,
-  0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0xb1b1, 0xb1c0, 0xb1bb, 0xb1b9,
-  0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, 0xd954, 0xd953, 0xd56b,
-  0xd964, 0xb47a, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b,
-  0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479,
-  0xb4a3, 0xb4a1, 0xd969, 0xd95f, 0xb4a5, 0xd970, 0xd968, 0xd971,
-  0xb4ad, 0xb4ab, 0xd966, 0xd965, 0xd963, 0xd95d, 0xb4a4, 0xb4a2,
-  0xd1b9, 0xd956, 0xddb7, 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0xb4a6,
-  0xb4a7, 0xd958, 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961,
-  0xd95e, 0xb4ae, 0xb770, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c,
-  0xddbb, 0xb769, 0xdd7a, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e,
-  0xb76f, 0xdda5, 0xddb2, 0xddb8, 0xb76a, 0xb764, 0xdda3, 0xdd7d,
-  0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, 0xddad,
-  0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, 0xddac, 0xdda1,
-  0xba53, 0xddaf, 0xb76d, 0xdda7, 0xdda6, 0xb767, 0xb763, 0xe1ee,
-  0xddb3, 0xddae, 0xdda2, 0xe1e9, 0xe1da, 0xe1e5, 0xe1ec, 0xba51,
-  0xb4ac, 0xe1ea, 0xba4c, 0xba4b, 0xe1f1, 0xe1db, 0xe1e8, 0xe1dc,
-  0xe1e7, 0xba4f, 0xe1eb, 0xd962, 0xe1f2, 0xe1e3, 0xba52, 0xe5ba,
-  0xbcaf, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, 0xe5ae, 0xe1df,
-  0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, 0xba4e, 0xbcb1, 0xba50,
-  0xba55, 0xe1e1, 0xe1ed, 0xe1e6, 0xe5b1, 0xba4a, 0xbcb4, 0xe9aa,
-  0xe5b6, 0xe5b5, 0xe5b7, 0xe5b4, 0xbcb5, 0xbcbb, 0xbcb8, 0xbcb9,
-  0xe5af, 0xe5b2, 0xe5bc, 0xbcc1, 0xbcbf, 0xe5b3, 0xd95a, 0xbcb2,
-  0xe5b9, 0xe5b0, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0xbcba,
-  0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3,
-  0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, 0xbed6, 0xbedd, 0xe9ab,
-  0xbedb, 0xbed5, 0xbedc, 0xe9a8, 0xc0bb, 0xbed7, 0xbede, 0xc0ba,
-  0xe9a7, 0xe9a6, 0xbee0, 0xbee1, 0xe9a5, 0xe9a4, 0xc0bc, 0xe9ae,
-  0xbeda, 0xe9ac, 0xc0bd, 0xc0c2, 0xecea, 0xecec, 0xc0bf, 0xeced,
-  0xece9, 0xeceb, 0xc0c0, 0xc0c3, 0xece8, 0xc0be, 0xc0c1, 0xc259,
-  0xe9ad, 0xc258, 0xc25e, 0xefd4, 0xc25c, 0xc25d, 0xefd7, 0xefd3,
-  0xc25a, 0xefd1, 0xc36b, 0xefd5, 0xefd6, 0xefd2, 0xc25b, 0xf242,
-  0xf245, 0xf246, 0xf244, 0xf247, 0xc36c, 0xf243, 0xf44e, 0xc464,
-  0xf44d, 0xf44c, 0xf44b, 0xc463, 0xc465, 0xf5cd, 0xc4e2, 0xc4e1,
-  0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0xf7dc,
-  0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, 0xd972, 0xe9af,
-  0xa6ac, 0xcaf7, 0xa7f1, 0xa7ef, 0xa7f0, 0xccc1, 0xa9f1, 0xac46,
-  0xcee7, 0xcee8, 0xac47, 0xd1ce, 0xaec4, 0xaec5, 0xd1cd, 0xb1d3,
-  0xb1cf, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, 0xb1d4, 0xb1d0,
-  0xd976, 0xb1cd, 0xb4af, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0,
-  0xd973, 0xd977, 0xd974, 0xb771, 0xddbc, 0xba56, 0xe1f4, 0xbee3,
-  0xbcc4, 0xe5bd, 0xbcc5, 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1,
-  0xe9b0, 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0xa4e5, 0xd979,
-  0xb4b4, 0xb4b3, 0xddbd, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, 0xaec6,
-  0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, 0xe1f5, 0xba57, 0xe9b2,
-  0xa4e7, 0xa5b8, 0xa9f2, 0xccc2, 0xcee9, 0xac48, 0xb1d9, 0xd97c,
-  0xb4b5, 0xb773, 0xe5c1, 0xe5c2, 0xecf0, 0xc25f, 0xf8f0, 0xa4e8,
-  0xccc3, 0xa9f3, 0xac49, 0xceea, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1,
-  0xaec8, 0xd1cf, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, 0xd97d,
-  0xd97e, 0xddbe, 0xba59, 0xba58, 0xecf1, 0xefd9, 0xf24a, 0xf249,
-  0xf44f, 0xc95e, 0xac4a, 0xa4e9, 0xa5b9, 0xa6ae, 0xa6ad, 0xa6af,
-  0xa6b0, 0xc9ee, 0xc9ed, 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9,
-  0xcafc, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0xa9fb, 0xa9f9, 0xccca,
-  0xccc6, 0xcccd, 0xa9f8, 0xaa40, 0xccc8, 0xccc4, 0xa9fe, 0xcccb,
-  0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, 0xccd0, 0xcccf, 0xccc7, 0xa9f6,
-  0xa9f5, 0xa9fd, 0xceef, 0xcef5, 0xac50, 0xac4d, 0xceec, 0xcef1,
-  0xac53, 0xac4b, 0xcef0, 0xac4e, 0xac51, 0xcef3, 0xac4c, 0xcef8,
-  0xac4f, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0xcef7,
-  0xcef4, 0xaed0, 0xaec9, 0xaecc, 0xaecf, 0xd1d5, 0xaeca, 0xd1d3,
-  0xaece, 0xaecb, 0xd1d6, 0xaecd, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad,
-  0xb1de, 0xb1e3, 0xd1d4, 0xd5aa, 0xd5ae, 0xb1e0, 0xd5a9, 0xb1e2,
-  0xb1e1, 0xd9a7, 0xd9a2, 0xb4b6, 0xb4ba, 0xb4b7, 0xd9a5, 0xd9a8,
-  0xb4b8, 0xb4b9, 0xb4be, 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1,
-  0xb4bd, 0xd9a4, 0xb779, 0xddbf, 0xb776, 0xb777, 0xb775, 0xddc4,
-  0xddc3, 0xddc0, 0xb77b, 0xddc2, 0xb4bb, 0xddc6, 0xddc1, 0xb778,
-  0xb774, 0xb77a, 0xddc5, 0xba5c, 0xe1f8, 0xe1f7, 0xe1f6, 0xba5a,
-  0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0xbcc7, 0xe5c9, 0xe5c4, 0xbcca,
-  0xe5c6, 0xbcc9, 0xe5c3, 0xe5c7, 0xbee9, 0xbee6, 0xe9bb, 0xe9ba,
-  0xe9b9, 0xe9b4, 0xe9b5, 0xbee7, 0xbee4, 0xbee8, 0xe9b3, 0xbee5,
-  0xe9b6, 0xe9b7, 0xe9bc, 0xe9b8, 0xecf2, 0xc0c7, 0xefdc, 0xc0c6,
-  0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0xc36d, 0xf451, 0xf452,
-  0xc466, 0xf450, 0xc4e4, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0xa4ea,
-  0xa6b1, 0xa6b2, 0xa7f3, 0xccd1, 0xac54, 0xaed1, 0xb1e4, 0xb0d2,
-  0xb4bf, 0xb4c0, 0xb3cc, 0xd9a9, 0xb77c, 0xe1fa, 0xe1f9, 0xa4eb,
-  0xa6b3, 0xccd2, 0xaa42, 0xaa41, 0xcef9, 0xcefa, 0xd1d7, 0xd1d8,
-  0xaed2, 0xaed3, 0xaed4, 0xd5af, 0xb1e6, 0xb4c2, 0xb4c1, 0xddc8,
-  0xdf7a, 0xe1fb, 0xe9bd, 0xc261, 0xc467, 0xa4ec, 0xa5bc, 0xa5bd,
-  0xa5bb, 0xa5be, 0xa5ba, 0xa6b6, 0xc9f6, 0xa6b5, 0xa6b7, 0xc9f1,
-  0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, 0xcafd,
-  0xa7fd, 0xcafe, 0xcb43, 0xa7fc, 0xcb47, 0xcb42, 0xcb45, 0xa7f5,
-  0xa7f6, 0xa7f7, 0xa7f8, 0xa840, 0xcb41, 0xa7fa, 0xa841, 0xcb40,
-  0xcb46, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, 0xa7fe, 0xaa57, 0xccd4,
-  0xaa43, 0xaa4d, 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53,
-  0xccd7, 0xaa49, 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4,
-  0xaa51, 0xaa4f, 0xcce5, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a,
-  0xaa50, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0xaa52, 0xcce1, 0xccd6,
-  0xaa55, 0xcce8, 0xaa45, 0xaa4c, 0xccd9, 0xcce2, 0xaa54, 0xaa47,
-  0xaa4b, 0xcce0, 0xcf5b, 0xac5c, 0xac69, 0xcf56, 0xcf4c, 0xac62,
-  0xcf4a, 0xac5b, 0xcf45, 0xac65, 0xcf52, 0xcefe, 0xcf41, 0xcf44,
-  0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0xcefd, 0xcf5f,
-  0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, 0xac59, 0xac61,
-  0xac6d, 0xac56, 0xac58, 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40,
-  0xac6c, 0xac67, 0xcf49, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c,
-  0xcf54, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f,
-  0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d,
-  0xcf42, 0xcf5e, 0xcf57, 0xac55, 0xd1ec, 0xaeea, 0xd1ed, 0xd1e1,
-  0xaedf, 0xaeeb, 0xd1da, 0xd1e3, 0xd1eb, 0xd1d9, 0xd1f4, 0xaed5,
-  0xd1f3, 0xd1ee, 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0xd1e6, 0xd1f0,
-  0xd1e7, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0xaed6, 0xaeda,
-  0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0xaee5, 0xaeec, 0xaedb, 0xaee7,
-  0xd1e9, 0xaee9, 0xaed8, 0xaed7, 0xd1db, 0xd1df, 0xaee0, 0xd1f1,
-  0xd1e8, 0xd1e0, 0xaee4, 0xaee1, 0xaed9, 0xaedc, 0xd5c4, 0xd5b4,
-  0xd5b5, 0xd5b9, 0xd5c8, 0xd5c5, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1,
-  0xd5d0, 0xd5b0, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, 0xd5c7,
-  0xb1e7, 0xb1fc, 0xb1f2, 0xb1f6, 0xb1f5, 0xd5b1, 0xd5ce, 0xd5d4,
-  0xd5cc, 0xd5d3, 0xd5c0, 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7,
-  0xd5cb, 0xb1f0, 0xd5ca, 0xd5b3, 0xb1f8, 0xb1fa, 0xd5cd, 0xb1fb,
-  0xb1e9, 0xd5ba, 0xd5cf, 0xb1ef, 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7,
-  0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, 0xb1f1, 0xb1ee, 0xd5bf, 0xaede,
-  0xd9c0, 0xb1eb, 0xb1f3, 0xd9c3, 0xd9d9, 0xd9ce, 0xb4d6, 0xb4d1,
-  0xd9bd, 0xb4d2, 0xd9cd, 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5,
-  0xb4c4, 0xd9b3, 0xb4c7, 0xb4c6, 0xb4d7, 0xd9ad, 0xd9cf, 0xd9d0,
-  0xb4c9, 0xb4c5, 0xd9bb, 0xb4d0, 0xd9b6, 0xd9d1, 0xb4cc, 0xd9c9,
-  0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0xb4cb, 0xd9c2, 0xddde, 0xd9b1,
-  0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, 0xd9c5, 0xb4cd,
-  0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc,
-  0xd9be, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, 0xd9b9,
-  0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0xd9cc, 0xd9d8, 0xd9ae,
-  0xddf2, 0xb7a6, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0xddec, 0xddcb,
-  0xddd2, 0xddea, 0xddf4, 0xdddc, 0xddcf, 0xdde2, 0xdde7, 0xddd3,
-  0xdde4, 0xddd0, 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0xddcc,
-  0xddee, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0xd5b8, 0xddd4, 0xdde6,
-  0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, 0xb7a3,
-  0xddcd, 0xb7b0, 0xdddd, 0xddc9, 0xb7a9, 0xdde1, 0xddd1, 0xb7aa,
-  0xddda, 0xb77e, 0xb4d8, 0xdde3, 0xd9bf, 0xddce, 0xdde8, 0xb7a5,
-  0xdde5, 0xb7a2, 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0xb7a7, 0xdec6,
-  0xb7ae, 0xe24a, 0xe248, 0xe25e, 0xe246, 0xe258, 0xb77d, 0xba5f,
-  0xe242, 0xe25d, 0xe247, 0xe255, 0xba64, 0xba5d, 0xe25b, 0xe240,
-  0xe25a, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, 0xba5e, 0xe24b,
-  0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, 0xe243, 0xe1fc,
-  0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, 0xe253, 0xba66, 0xe245,
-  0xe250, 0xe24c, 0xe24e, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0xe262,
-  0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, 0xba69,
-  0xba62, 0xe252, 0xe25c, 0xe5d5, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de,
-  0xbccd, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0xe5d0, 0xe5da, 0xbcd5,
-  0xe5ee, 0xe5eb, 0xe5dd, 0xe5ce, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8,
-  0xe5d3, 0xe5ca, 0xbcce, 0xbcd6, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed,
-  0xe5e0, 0xe5e6, 0xbcd4, 0xe5e3, 0xe5ea, 0xbcd9, 0xbcd3, 0xe5dc,
-  0xe5cf, 0xe5ef, 0xe5cc, 0xe5e8, 0xbcd0, 0xe5d6, 0xe5d7, 0xbccf,
-  0xbccc, 0xe5d2, 0xbcd2, 0xbccb, 0xe5e9, 0xe5ec, 0xe5d9, 0xe9ca,
-  0xe9c2, 0xe9be, 0xbef6, 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7,
-  0xbeea, 0xe9c4, 0xe9cd, 0xe5df, 0xe9ce, 0xbef1, 0xe9dd, 0xbef5,
-  0xbef8, 0xe9c0, 0xbef4, 0xe9db, 0xe9dc, 0xe9d2, 0xe9d1, 0xe9c9,
-  0xe9d3, 0xe9da, 0xe9d9, 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0xe9c5,
-  0xe9d8, 0xbef7, 0xe9d6, 0xbef3, 0xbef2, 0xe9d0, 0xe9bf, 0xe9c1,
-  0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0xe9c6, 0xe9d4, 0xe9c7, 0xc0cf,
-  0xed45, 0xc0c8, 0xecf5, 0xed41, 0xc0ca, 0xed48, 0xecfc, 0xecf7,
-  0xed49, 0xecf3, 0xecfe, 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9,
-  0xed40, 0xecf4, 0xc0d0, 0xed47, 0xecf9, 0xc0cc, 0xecfb, 0xecf8,
-  0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0xed42,
-  0xc263, 0xefe7, 0xc268, 0xc269, 0xc262, 0xefe6, 0xefe3, 0xefe4,
-  0xc266, 0xefde, 0xefe2, 0xc265, 0xefdf, 0xc267, 0xc264, 0xefdd,
-  0xefe1, 0xefe5, 0xf251, 0xf24e, 0xf257, 0xf256, 0xf254, 0xf24f,
-  0xc372, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252,
-  0xf24d, 0xefe0, 0xc36f, 0xf24c, 0xf456, 0xf455, 0xf255, 0xc468,
-  0xf459, 0xf45a, 0xf454, 0xf458, 0xf453, 0xf5d1, 0xf457, 0xc4e7,
-  0xc4e5, 0xf5cf, 0xf5d2, 0xf5ce, 0xf5d0, 0xc4e6, 0xf6e5, 0xf6e6,
-  0xc576, 0xf6e4, 0xf7e2, 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0xc656,
-  0xf8f3, 0xf8f1, 0xf8f2, 0xf8f4, 0xf9bb, 0xa4ed, 0xa6b8, 0xaa59,
-  0xcce9, 0xcf64, 0xd1f5, 0xd1f7, 0xd1f6, 0xd1f8, 0xb1fd, 0xd5d7,
-  0xd1f9, 0xd5d6, 0xd5d8, 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd,
-  0xb4dc, 0xb4da, 0xd9dc, 0xddfa, 0xddf8, 0xddf7, 0xddf6, 0xddf5,
-  0xb7b2, 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb,
-  0xbcda, 0xe5f0, 0xe9df, 0xe9de, 0xe9e0, 0xbef9, 0xed4b, 0xc0d3,
-  0xefe8, 0xc26a, 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842,
-  0xaa5a, 0xaa5b, 0xac6e, 0xd1fa, 0xb7b3, 0xe6d1, 0xbefa, 0xc26b,
-  0xa4ef, 0xa6ba, 0xcceb, 0xaa5c, 0xccea, 0xcf65, 0xac6f, 0xcf66,
-  0xac70, 0xd1fc, 0xaeee, 0xaeed, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db,
-  0xd5da, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, 0xb4dd, 0xd9e0, 0xddfb,
-  0xe266, 0xe267, 0xe268, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4,
-  0xe9e1, 0xe9e2, 0xe9e3, 0xed4c, 0xc0d4, 0xc26c, 0xf25a, 0xc4e8,
-  0xc95f, 0xac71, 0xcf67, 0xaeef, 0xb1fe, 0xb4df, 0xd9e2, 0xb7b5,
-  0xb7b4, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, 0xe9e4, 0xefe9,
-  0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0xa843, 0xcb48, 0xac72, 0xb7b6,
-  0xa4f1, 0xcf68, 0xac73, 0xcf69, 0xc0d5, 0xa4f2, 0xccec, 0xcf6a,
-  0xd242, 0xd241, 0xd1fe, 0xd1fd, 0xd243, 0xd240, 0xb240, 0xb241,
-  0xb4e0, 0xd9e3, 0xd9e4, 0xd9e5, 0xde41, 0xde42, 0xde40, 0xddfd,
-  0xddfe, 0xb7b7, 0xe26b, 0xe5f7, 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7,
-  0xe9e6, 0xbefb, 0xe9e8, 0xc0d6, 0xed4d, 0xefea, 0xf25b, 0xf6e7,
-  0xa4f3, 0xa5c2, 0xa5c1, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0xc9f7,
-  0xcb49, 0xcb4a, 0xaa5e, 0xcced, 0xac74, 0xcf6b, 0xcf6c, 0xaef0,
-  0xaef4, 0xd244, 0xaef3, 0xaef1, 0xaef2, 0xd5df, 0xb242, 0xb4e3,
-  0xb4e1, 0xb4e2, 0xd9e6, 0xba72, 0xa4f4, 0xc9a1, 0xa5c3, 0xc9a4,
-  0xa5c6, 0xc9a3, 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0xc9f8, 0xc9fc,
-  0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, 0xa6c1, 0xc9f9, 0xc9fd,
-  0xa6c2, 0xa6bd, 0xa6be, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf,
-  0xa6c0, 0xa6c3, 0xcb5b, 0xcb59, 0xcb4c, 0xa851, 0xcb53, 0xa84c,
-  0xcb4d, 0xcb55, 0xcb52, 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858,
-  0xa85a, 0xcb4b, 0xa84d, 0xcb5c, 0xa854, 0xa857, 0xcd45, 0xa847,
-  0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, 0xa848, 0xa849,
-  0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, 0xa84e, 0xa853,
-  0xccee, 0xa85c, 0xcb57, 0xa852, 0xa85d, 0xa846, 0xcb54, 0xa84b,
-  0xcb58, 0xcd44, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0xcd4b, 0xaa62,
-  0xaa65, 0xcd42, 0xccf3, 0xccf7, 0xaa6d, 0xaa6f, 0xccfa, 0xaa76,
-  0xaa68, 0xaa66, 0xaa67, 0xaa75, 0xcd47, 0xaa70, 0xccf9, 0xccfb,
-  0xaa6e, 0xaa73, 0xccfc, 0xcd4a, 0xac75, 0xaa79, 0xaa63, 0xcd49,
-  0xcd4d, 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d,
-  0xaa72, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0xaa7e,
-  0xaa77, 0xaa69, 0xaa5f, 0xaa64, 0xccf6, 0xaa60, 0xcd4e, 0xccf0,
-  0xccef, 0xccfd, 0xccf1, 0xaa7b, 0xaef5, 0xaa74, 0xccfe, 0xaa61,
-  0xaca6, 0xcd4c, 0xcf7c, 0xcfa1, 0xcfa4, 0xcf77, 0xcfa7, 0xcfaa,
-  0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, 0xcfad,
-  0xcf7b, 0xcf73, 0xd264, 0xac7e, 0xcfa2, 0xcf78, 0xcf7a, 0xaca5,
-  0xcf7d, 0xac7d, 0xcf70, 0xcfa8, 0xcfab, 0xac7a, 0xaca8, 0xcf6d,
-  0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, 0xcd48,
-  0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, 0xaca9,
-  0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, 0xcfa6,
-  0xac79, 0xcf7e, 0xd24c, 0xaefd, 0xaf43, 0xd255, 0xd25b, 0xd257,
-  0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, 0xd25f,
-  0xaf45, 0xaef6, 0xaf40, 0xd24e, 0xaf42, 0xd24f, 0xd259, 0xaf44,
-  0xd268, 0xd248, 0xaefc, 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a,
-  0xd267, 0xd261, 0xd253, 0xd262, 0xd25c, 0xd265, 0xd263, 0xaf49,
-  0xd254, 0xaef9, 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251,
-  0xb243, 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0xd258,
-  0xd25d, 0xb265, 0xd5e1, 0xd5e5, 0xb252, 0xb250, 0xb247, 0xd5e3,
-  0xd5e2, 0xb25b, 0xd5e8, 0xb255, 0xd5fa, 0xd647, 0xb244, 0xd5f7,
-  0xd5f0, 0xb267, 0xd5e0, 0xd5fc, 0xb264, 0xb258, 0xb263, 0xb24e,
-  0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0xd5fd, 0xd640,
-  0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, 0xb25e,
-  0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, 0xd5ed,
-  0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0xb262, 0xd5e6,
-  0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, 0xd5f9, 0xb260,
-  0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, 0xb254, 0xb24c,
-  0xb24b, 0xd9e7, 0xd643, 0xd5eb, 0xd9fc, 0xb24d, 0xb541, 0xb25a,
-  0xb4ee, 0xd9f6, 0xb4fc, 0xd9ea, 0xb4eb, 0xb4e7, 0xda49, 0xb4ed,
-  0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, 0xda44, 0xd9f1, 0xb4fa, 0xb4f4,
-  0xd9fd, 0xb4e4, 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55,
-  0xda56, 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd,
-  0xd9f2, 0xd9f9, 0xd9f3, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9,
-  0xd9eb, 0xb4ea, 0xd9f8, 0xb4f8, 0xb542, 0xd9fa, 0xda53, 0xda4b,
-  0xb4e6, 0xda51, 0xb4f2, 0xb4f0, 0xda57, 0xb4ef, 0xda41, 0xd9f4,
-  0xd9fe, 0xb547, 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c,
-  0xda54, 0xb4e9, 0xda40, 0xb546, 0xda47, 0xb4f3, 0xb4f6, 0xda46,
-  0xb545, 0xd9f5, 0xd5e4, 0xda50, 0xda4e, 0xda52, 0xd9ec, 0xb540,
-  0xde61, 0xde60, 0xde46, 0xb7bd, 0xde5f, 0xde49, 0xde4a, 0xb7c7,
-  0xde68, 0xb7c2, 0xde5e, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48,
-  0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc,
-  0xb7cb, 0xb7c5, 0xde69, 0xb7b9, 0xde55, 0xde4c, 0xde59, 0xde65,
-  0xb7cd, 0xb7bb, 0xde54, 0xde4d, 0xb7c4, 0xb7c3, 0xde50, 0xde5a,
-  0xde64, 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e,
-  0xb7bf, 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c,
-  0xde58, 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44,
-  0xde5d, 0xde5c, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, 0xe26e,
-  0xbaaf, 0xba77, 0xe26d, 0xe2b0, 0xbab1, 0xe271, 0xe2a3, 0xe273,
-  0xe2b3, 0xe2af, 0xba75, 0xbaa1, 0xe653, 0xbaae, 0xba7d, 0xe26f,
-  0xe2ae, 0xbaa3, 0xe2ab, 0xe2b8, 0xe275, 0xe27e, 0xe2b6, 0xe2ac,
-  0xba7c, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0xe27a, 0xe277, 0xe278,
-  0xe2b2, 0xe2b7, 0xe2b5, 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0xe270,
-  0xe5fa, 0xe279, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274,
-  0xbaaa, 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0xe2a9, 0xe2a1, 0xe272,
-  0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0xba79, 0xbcdf, 0xe2a6,
-  0xe5f9, 0xe2ad, 0xe276, 0xe644, 0xe64e, 0xbce2, 0xe64d, 0xe659,
-  0xbce4, 0xe64b, 0xe64f, 0xbcef, 0xe646, 0xbce7, 0xe652, 0xe9f0,
-  0xbcf3, 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0xbce3, 0xe657,
-  0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, 0xbcec,
-  0xe64c, 0xe2a2, 0xe648, 0xe65f, 0xbce8, 0xbceb, 0xe661, 0xbce0,
-  0xe656, 0xe5fb, 0xe65c, 0xc0df, 0xe64a, 0xbce1, 0xe645, 0xbce5,
-  0xe5fc, 0xbaab, 0xe641, 0xe65a, 0xe642, 0xe640, 0xbcea, 0xe658,
-  0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, 0xe9f3, 0xbf49,
-  0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, 0xe9f5,
-  0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, 0xea46,
-  0xbefd, 0xea45, 0xbf44, 0xbf4a, 0xbf47, 0xe9fe, 0xbf46, 0xe9f9,
-  0xe9ed, 0xe9f2, 0xe9fd, 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1,
-  0xe5fd, 0xe9ec, 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43,
-  0xe9ee, 0xe9fc, 0xed51, 0xc0e3, 0xc0d7, 0xc0db, 0xed53, 0xed59,
-  0xed57, 0xc0d9, 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0xed56,
-  0xed55, 0xed5b, 0xc0e2, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de,
-  0xc0e5, 0xc0d8, 0xed58, 0xed50, 0xeff7, 0xc271, 0xeff4, 0xeff6,
-  0xc26f, 0xeff2, 0xeff3, 0xefee, 0xe9f6, 0xefef, 0xc270, 0xefeb,
-  0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, 0xc272,
-  0xeff0, 0xc378, 0xf25f, 0xf265, 0xc379, 0xf25c, 0xc376, 0xc373,
-  0xf267, 0xc377, 0xc374, 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266,
-  0xeff5, 0xf25d, 0xc375, 0xf264, 0xf268, 0xf260, 0xf45d, 0xc46a,
-  0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0xf45e, 0xf462, 0xf465,
-  0xf464, 0xf467, 0xf45b, 0xc469, 0xf463, 0xf466, 0xf469, 0xf461,
-  0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0xf5d6, 0xf5d7, 0xf5d5, 0xc4e9,
-  0xc578, 0xf6eb, 0xf6e8, 0xf6e9, 0xf6ea, 0xc579, 0xf7e5, 0xf7e4,
-  0xf8af, 0xc5f4, 0xf8ad, 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665,
-  0xf9a3, 0xf96c, 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0xa6c7, 0xca41,
-  0xcb5e, 0xa85f, 0xa862, 0xcb5f, 0xa860, 0xa861, 0xcd58, 0xcd5a,
-  0xcd55, 0xcd52, 0xcd54, 0xaaa4, 0xaaa2, 0xcd56, 0xaaa3, 0xcd53,
-  0xcd50, 0xaaa1, 0xcd57, 0xcd51, 0xaaa5, 0xcd59, 0xcfaf, 0xcfb3,
-  0xacb7, 0xcfb6, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, 0xcfb2,
-  0xcfb1, 0xacb1, 0xcfb4, 0xcfb5, 0xcfae, 0xacb5, 0xacb0, 0xcfb0,
-  0xd277, 0xd278, 0xd279, 0xaf50, 0xaf4c, 0xd26e, 0xd276, 0xd27b,
-  0xaf51, 0xd26c, 0xd272, 0xd26b, 0xd275, 0xd271, 0xaf4d, 0xaf4f,
-  0xd27a, 0xd26a, 0xd26d, 0xd273, 0xd274, 0xd27c, 0xd270, 0xaf4e,
-  0xb26d, 0xd64e, 0xd650, 0xd64c, 0xd658, 0xd64a, 0xd657, 0xb269,
-  0xd648, 0xda5b, 0xd652, 0xb26c, 0xd653, 0xd656, 0xd65a, 0xd64f,
-  0xd654, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0xd651,
-  0xd655, 0xd64b, 0xb548, 0xb549, 0xda65, 0xb54f, 0xda59, 0xda62,
-  0xda58, 0xb54c, 0xda60, 0xda5e, 0xda5f, 0xb54a, 0xda63, 0xda5c,
-  0xda5a, 0xb54b, 0xda5d, 0xda61, 0xb54d, 0xda64, 0xde70, 0xde77,
-  0xde79, 0xdea1, 0xb7da, 0xde6b, 0xb7d2, 0xde7a, 0xb7d7, 0xdea2,
-  0xb7ce, 0xde7d, 0xde6d, 0xde7e, 0xde6c, 0xb7dc, 0xde78, 0xb7cf,
-  0xdea3, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, 0xde6f, 0xde76, 0xde72,
-  0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, 0xb7db, 0xb7d0, 0xde75,
-  0xb7d5, 0xb54e, 0xde7b, 0xde73, 0xde74, 0xe2c1, 0xbab4, 0xe2bd,
-  0xe2c3, 0xe2bf, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, 0xe2bc, 0xbab5,
-  0xe2c0, 0xe2bb, 0xbab7, 0xbab2, 0xe2c4, 0xbab3, 0xe667, 0xe664,
-  0xe670, 0xe66a, 0xe66c, 0xbcf4, 0xe666, 0xe66e, 0xe66d, 0xe66b,
-  0xe671, 0xbcf7, 0xe668, 0xe66f, 0xbcf5, 0xe663, 0xe665, 0xbcf6,
-  0xe662, 0xe672, 0xe669, 0xea4a, 0xbf51, 0xea55, 0xea53, 0xbf4b,
-  0xea49, 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56,
-  0xea51, 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0xbf52, 0xea52, 0xbf4d,
-  0xbf4e, 0xea4f, 0xbf50, 0xea4b, 0xea54, 0xbf53, 0xea57, 0xea58,
-  0xbf54, 0xc0e7, 0xc0ee, 0xed5c, 0xed62, 0xed60, 0xc0ea, 0xc0e9,
-  0xc0e6, 0xed5e, 0xc0ec, 0xc0eb, 0xc0e8, 0xed61, 0xed5d, 0xed5f,
-  0xc0ed, 0xc277, 0xeffb, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa,
-  0xeff9, 0xf26c, 0xeffc, 0xf26d, 0xc37a, 0xf26b, 0xf26a, 0xf269,
-  0xc37b, 0xc46c, 0xf46a, 0xf46b, 0xf5dc, 0xf5db, 0xc4ea, 0xf5da,
-  0xf6ec, 0xf6ed, 0xf7e6, 0xf8b1, 0xf8f6, 0xf9bc, 0xc679, 0xf9c6,
-  0xa4f6, 0xaaa6, 0xaaa7, 0xacb8, 0xc0ef, 0xa4f7, 0xaaa8, 0xaf52,
-  0xb7dd, 0xa4f8, 0xb26e, 0xbab8, 0xc962, 0xcfb7, 0xd27d, 0xe2c5,
-  0xc0f0, 0xa4f9, 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0xdea4,
-  0xb7de, 0xe2c6, 0xbcf8, 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0xa6c9,
-  0xca42, 0xa6c8, 0xa865, 0xa864, 0xa863, 0xcb60, 0xaaaa, 0xaaab,
-  0xcd5b, 0xcfba, 0xcfbd, 0xacba, 0xcfbb, 0xacb9, 0xcfbc, 0xacbb,
-  0xd2a2, 0xd2a1, 0xd27e, 0xaf53, 0xd65d, 0xd65e, 0xb26f, 0xd65c,
-  0xd65f, 0xb552, 0xb270, 0xb551, 0xda6b, 0xda6a, 0xda68, 0xda69,
-  0xda6c, 0xdea6, 0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xbab9, 0xe2c9,
-  0xe2c8, 0xbaba, 0xe2c7, 0xe673, 0xe674, 0xbcf9, 0xea59, 0xea5a,
-  0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, 0xf46c,
-  0xf6ee, 0xf8f7, 0xa4fc, 0xc9a5, 0xa5c7, 0xc9a6, 0xca43, 0xca44,
-  0xcb66, 0xcb62, 0xcb61, 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866,
-  0xcb67, 0xcb64, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0xaaad, 0xaab0,
-  0xcd65, 0xcd61, 0xcd62, 0xcd5c, 0xaaaf, 0xcd5e, 0xaaae, 0xcd63,
-  0xcd60, 0xcfc2, 0xacbd, 0xacbe, 0xcfc5, 0xcfbf, 0xcfc4, 0xcfc0,
-  0xacbc, 0xcfc3, 0xcfc1, 0xd2a8, 0xd2a5, 0xd2a7, 0xaf58, 0xaf57,
-  0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, 0xd2a3,
-  0xd2aa, 0xd662, 0xd666, 0xd665, 0xda6e, 0xda79, 0xd668, 0xd663,
-  0xda6d, 0xb274, 0xb273, 0xd661, 0xd664, 0xb275, 0xb272, 0xb271,
-  0xd660, 0xd669, 0xda70, 0xda77, 0xb554, 0xda76, 0xda73, 0xb556,
-  0xda75, 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553,
-  0xb7df, 0xdead, 0xdeac, 0xdeaa, 0xb7e2, 0xb7e1, 0xdeae, 0xdeab,
-  0xe2ca, 0xbabb, 0xb7e0, 0xdeb0, 0xdeaf, 0xe2cd, 0xe2cb, 0xbcfa,
-  0xbabc, 0xe2cc, 0xe676, 0xbcfb, 0xe675, 0xe67e, 0xe67d, 0xe67b,
-  0xe67a, 0xe677, 0xe678, 0xe679, 0xe67c, 0xe6a1, 0xea5f, 0xea5c,
-  0xea5d, 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0xed64, 0xed65,
-  0xc0f1, 0xc0f2, 0xed63, 0xc279, 0xeffe, 0xc278, 0xc37e, 0xc3a1,
-  0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, 0xc57a, 0xf7e8, 0xf7e7,
-  0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, 0xd66a, 0xa5c9, 0xc9a7,
-  0xa4fd, 0xca45, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69,
-  0xcd6d, 0xaab3, 0xcd6b, 0xcd67, 0xcd6a, 0xcd66, 0xaab5, 0xcd69,
-  0xaab2, 0xaab1, 0xaab4, 0xcd6c, 0xcd68, 0xacc2, 0xacc5, 0xcfce,
-  0xcfcd, 0xcfcc, 0xacbf, 0xcfd5, 0xcfcb, 0xacc1, 0xd2af, 0xcfd2,
-  0xcfd0, 0xacc4, 0xcfc8, 0xcfd3, 0xcfca, 0xcfd4, 0xcfd1, 0xcfc9,
-  0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0xd2b4, 0xd2ab, 0xd2b6, 0xd2ae,
-  0xd2b9, 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f,
-  0xaf5d, 0xd2b1, 0xd2ad, 0xd2b0, 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf,
-  0xaf5a, 0xaf5c, 0xd678, 0xd66d, 0xd66b, 0xd66c, 0xd673, 0xd674,
-  0xd670, 0xb27b, 0xd675, 0xd672, 0xd66f, 0xb279, 0xd66e, 0xb277,
-  0xb27a, 0xd671, 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c,
-  0xda7e, 0xdaa1, 0xb560, 0xdaa7, 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6,
-  0xdaa5, 0xb55b, 0xb561, 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b,
-  0xdaa3, 0xda7a, 0xb55f, 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e,
-  0xb55c, 0xb55d, 0xb557, 0xb7e9, 0xdeb7, 0xb7e8, 0xdebb, 0xdeb1,
-  0xdebc, 0xdeb2, 0xdeb3, 0xdebd, 0xdeba, 0xdeb8, 0xdeb9, 0xdeb5,
-  0xdeb4, 0xdebe, 0xb7e5, 0xdeb6, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec,
-  0xb7e7, 0xb7e6, 0xe2ce, 0xbabe, 0xbabd, 0xe2d3, 0xbcfc, 0xbabf,
-  0xbac1, 0xe2d4, 0xb7e3, 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0xe2d1,
-  0xe6ab, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, 0xbd41, 0xe6a6, 0xbcfe,
-  0xe6a8, 0xe6a5, 0xe6a2, 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0xed69,
-  0xea66, 0xea65, 0xea67, 0xed66, 0xbf5a, 0xea63, 0xbf58, 0xbf5c,
-  0xbf5b, 0xea64, 0xea68, 0xbf59, 0xed6d, 0xc0f5, 0xc27a, 0xc0f6,
-  0xc0f3, 0xed6a, 0xed68, 0xed6b, 0xed6e, 0xc0f4, 0xed6c, 0xed67,
-  0xf042, 0xf045, 0xf275, 0xf040, 0xf46f, 0xf046, 0xc3a2, 0xf044,
-  0xc27b, 0xf041, 0xf043, 0xf047, 0xf276, 0xf274, 0xc3a3, 0xf273,
-  0xc46e, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, 0xf6f0, 0xf6f2, 0xc5d0,
-  0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, 0xb27d, 0xdebf, 0xbf5d,
-  0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0xcd6f, 0xa260, 0xcfd7, 0xcfd8,
-  0xd2be, 0xd2bf, 0xb27e, 0xb2a1, 0xdaab, 0xdec2, 0xdec1, 0xdec0,
-  0xe2d5, 0xe2d6, 0xe2d7, 0xbac2, 0xe6ad, 0xe6ac, 0xea69, 0xbf5e,
-  0xbf5f, 0xed72, 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c,
-  0xf277, 0xf5de, 0xa5cc, 0xacc6, 0xb2a2, 0xdec3, 0xa5cd, 0xd2c0,
-  0xb2a3, 0xb563, 0xb564, 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869,
-  0xacc7, 0xcfd9, 0xdaac, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa86b,
-  0xa86c, 0xcb6e, 0xcb6d, 0xaab6, 0xcd72, 0xcd70, 0xcd71, 0xcfda,
-  0xcfdb, 0xaccb, 0xacc9, 0xacca, 0xacc8, 0xaf60, 0xaf64, 0xaf63,
-  0xd2c1, 0xaf62, 0xaf61, 0xd2c2, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4,
-  0xb2a5, 0xb566, 0xb565, 0xdaae, 0xdaad, 0xb2a7, 0xb7ed, 0xdec5,
-  0xb7ee, 0xdec4, 0xe2d8, 0xe6ae, 0xbd42, 0xea6a, 0xed73, 0xc3a6,
-  0xc3a5, 0xc57c, 0xa5d4, 0xcd73, 0xb2a8, 0xe2d9, 0xbac3, 0xcb6f,
-  0xcb70, 0xcd74, 0xaab8, 0xaab9, 0xaab7, 0xaccf, 0xacd0, 0xaccd,
-  0xacce, 0xcfdc, 0xcfdd, 0xaccc, 0xd2c3, 0xaf68, 0xaf69, 0xb2ab,
-  0xd2c9, 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65,
-  0xd2c8, 0xd2c7, 0xd2c4, 0xaf6d, 0xd2c6, 0xaf66, 0xaf67, 0xb2ac,
-  0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, 0xd6a4, 0xd6a3, 0xd67d,
-  0xb2a9, 0xb2aa, 0xdab6, 0xb56b, 0xb56a, 0xdab0, 0xb568, 0xdab3,
-  0xb56c, 0xdab4, 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0xdab2,
-  0xdaaf, 0xded2, 0xdec7, 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6,
-  0xded3, 0xded1, 0xdeca, 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc,
-  0xded4, 0xdecb, 0xb7f5, 0xb7ef, 0xb7f1, 0xdec9, 0xe2db, 0xbac7,
-  0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0xdec8, 0xdecf, 0xe2de, 0xbac8,
-  0xe2e0, 0xe2dd, 0xe2da, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2,
-  0xe6b0, 0xbd45, 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af,
-  0xbd47, 0xbac4, 0xe6b6, 0xbd44, 0xea6c, 0xea6b, 0xea73, 0xea6d,
-  0xea72, 0xea6f, 0xbf60, 0xea71, 0xbf61, 0xbf62, 0xea70, 0xea6e,
-  0xc0f8, 0xed74, 0xc0f7, 0xed77, 0xed75, 0xed76, 0xc0f9, 0xf04d,
-  0xc2a1, 0xf04e, 0xc27d, 0xf04f, 0xc27e, 0xf04c, 0xf050, 0xf04a,
-  0xc3a7, 0xf278, 0xc3a8, 0xc46f, 0xf04b, 0xc470, 0xc4ee, 0xf5df,
-  0xc57e, 0xf6f4, 0xc57d, 0xf7ea, 0xc5f5, 0xc5f6, 0xf9cc, 0xacd1,
-  0xcfde, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, 0xcb71, 0xa86d,
-  0xaaba, 0xacd2, 0xacd3, 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0xb2ae,
-  0xd6a5, 0xdab8, 0xb571, 0xdab7, 0xb570, 0xded5, 0xbd4a, 0xe6bb,
-  0xe6b8, 0xe6b9, 0xe6ba, 0xed78, 0xf051, 0xf471, 0xf470, 0xf6f5,
-  0xa5d6, 0xcd75, 0xaf70, 0xb572, 0xded6, 0xe2e1, 0xbd4b, 0xea74,
-  0xf052, 0xf472, 0xa5d7, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6,
-  0xacd5, 0xd2cc, 0xaf71, 0xaf72, 0xaf73, 0xb2b0, 0xd6a7, 0xb2af,
-  0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, 0xbac9, 0xbaca,
-  0xbd4c, 0xbf64, 0xea75, 0xbf63, 0xed79, 0xc0fa, 0xf053, 0xf473,
-  0xa5d8, 0xa86e, 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79,
-  0xcfe5, 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0xacde, 0xacd9,
-  0xcfe1, 0xcfe2, 0xcfe3, 0xace0, 0xcfe0, 0xacdc, 0xcfe4, 0xacdd,
-  0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2ce,
-  0xd2cd, 0xaf75, 0xaf76, 0xd2d7, 0xd2d2, 0xd6b0, 0xd2d8, 0xaf77,
-  0xaf74, 0xd6aa, 0xd6a9, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2,
-  0xb2b5, 0xb2b2, 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af,
-  0xb2b3, 0xdabc, 0xdabe, 0xdaba, 0xdabb, 0xdabf, 0xdac1, 0xdac2,
-  0xdabd, 0xdac0, 0xb574, 0xdedb, 0xdee0, 0xded8, 0xdedc, 0xdee1,
-  0xdedd, 0xb7fa, 0xb843, 0xb7fd, 0xded9, 0xdeda, 0xbace, 0xb846,
-  0xb7fe, 0xb844, 0xb7fc, 0xdedf, 0xb845, 0xdede, 0xb841, 0xb7fb,
-  0xb842, 0xdee2, 0xe2e6, 0xe2e8, 0xb840, 0xe2e3, 0xbacc, 0xe2e9,
-  0xbacd, 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0xbd4e,
-  0xe6bf, 0xe6be, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, 0xbd50,
-  0xea7d, 0xeaa1, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66,
-  0xbf67, 0xbf65, 0xea78, 0xea7b, 0xea7c, 0xbf68, 0xc140, 0xeda3,
-  0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0xc0fd, 0xeda2, 0xed7c, 0xc0fb,
-  0xeda1, 0xed7a, 0xed7e, 0xed7d, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2,
-  0xc2a3, 0xf054, 0xf27b, 0xc3a9, 0xf279, 0xf27a, 0xf474, 0xf477,
-  0xf475, 0xf476, 0xf5e0, 0xc4ef, 0xf7eb, 0xf8b4, 0xc5f7, 0xf8f8,
-  0xf8f9, 0xc666, 0xa5d9, 0xace1, 0xdac3, 0xdee3, 0xa5da, 0xa86f,
-  0xaabe, 0xcfe8, 0xcfe9, 0xaf78, 0xdac4, 0xb575, 0xb847, 0xc142,
-  0xeda4, 0xf27c, 0xf478, 0xa5db, 0xcda1, 0xcd7a, 0xcd7c, 0xcd7e,
-  0xcd7d, 0xcd7b, 0xaabf, 0xace2, 0xcff2, 0xcfed, 0xcfea, 0xcff1,
-  0xace4, 0xace5, 0xcff0, 0xcfef, 0xcfee, 0xcfeb, 0xcfec, 0xcff3,
-  0xace3, 0xaf7c, 0xafa4, 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0xafa1,
-  0xd6b9, 0xaf7a, 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2,
-  0xd2df, 0xd2dd, 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc,
-  0xaf7e, 0xaf7b, 0xb2b9, 0xd6ba, 0xd6b3, 0xd6b5, 0xd6b7, 0xd6b8,
-  0xd6b6, 0xb2ba, 0xd6bb, 0xd6b4, 0xdac8, 0xb576, 0xdad0, 0xdac5,
-  0xdad1, 0xdac6, 0xdac7, 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577,
-  0xdac9, 0xdacc, 0xb578, 0xdacd, 0xdaca, 0xdeee, 0xdef2, 0xb84e,
-  0xe2f0, 0xb851, 0xdef0, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4,
-  0xb84d, 0xb84c, 0xb848, 0xdee7, 0xb84f, 0xb850, 0xdee6, 0xdee9,
-  0xdef1, 0xb84a, 0xb84b, 0xdeef, 0xdee5, 0xe2f2, 0xbad0, 0xe2f4,
-  0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0xbad1, 0xe2ef, 0xbad3,
-  0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0xb849, 0xe2eb, 0xbad2, 0xe2ed,
-  0xbd54, 0xe6c1, 0xbd58, 0xbd56, 0xbacf, 0xe6c8, 0xe6c9, 0xbd53,
-  0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2,
-  0xbd59, 0xe6c4, 0xe6c6, 0xbd57, 0xbf6a, 0xeaa8, 0xeaa2, 0xeaa6,
-  0xeaac, 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0xeaa4, 0xbf6c, 0xbf69,
-  0xeaa3, 0xeaa5, 0xbf6b, 0xeaab, 0xc146, 0xedaa, 0xeda5, 0xc145,
-  0xc143, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056,
-  0xc147, 0xeda7, 0xedae, 0xedab, 0xf05a, 0xf057, 0xc2a6, 0xf05b,
-  0xf05d, 0xf05c, 0xf058, 0xf059, 0xf2a3, 0xc3aa, 0xf27e, 0xf2a2,
-  0xf27d, 0xf2a4, 0xf2a1, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b,
-  0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0xf5e3, 0xf5e2,
-  0xf6f6, 0xf8b5, 0xf8fa, 0xa5dc, 0xcb72, 0xaac0, 0xcda3, 0xaac1,
-  0xaac2, 0xcda2, 0xcff8, 0xcff7, 0xace6, 0xace9, 0xace8, 0xace7,
-  0xcff4, 0xcff6, 0xcff5, 0xd2e8, 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea,
-  0xd2e6, 0xafa6, 0xafaa, 0xafad, 0xafae, 0xd2e7, 0xd2e9, 0xafac,
-  0xafab, 0xafa9, 0xafa8, 0xd6c2, 0xd6c0, 0xd6bc, 0xb2bb, 0xd6bd,
-  0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0xb2bd, 0xdad5, 0xdad4, 0xdad3,
-  0xdad2, 0xdef6, 0xb852, 0xdef3, 0xdef5, 0xb853, 0xb854, 0xdef4,
-  0xe341, 0xe2f9, 0xe2fa, 0xbad7, 0xbad5, 0xbad6, 0xe343, 0xe342,
-  0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, 0xe2f8, 0xe6cb, 0xe6d0,
-  0xe6ce, 0xe6cd, 0xe6cc, 0xe6cf, 0xeaae, 0xbf6d, 0xc148, 0xedb0,
-  0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0xf2a5, 0xc3ab, 0xf4a1,
-  0xc5a1, 0xf6f7, 0xf8b7, 0xf8b6, 0xc9a8, 0xacea, 0xaceb, 0xd6c3,
-  0xb856, 0xa5dd, 0xa872, 0xa871, 0xa870, 0xcda4, 0xaac4, 0xaac3,
-  0xacee, 0xcffa, 0xcffd, 0xcffb, 0xacec, 0xaced, 0xcff9, 0xcffc,
-  0xafb5, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, 0xd2ef, 0xafb0, 0xafaf,
-  0xafb3, 0xafb1, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0,
-  0xd6c6, 0xd6c7, 0xd6c5, 0xd6c4, 0xb2be, 0xb57d, 0xdad6, 0xdad8,
-  0xdada, 0xb57c, 0xb57a, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0xdf41,
-  0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0xdefb, 0xdef8, 0xdef9,
-  0xb858, 0xdf40, 0xb857, 0xb85c, 0xb85b, 0xb859, 0xdefd, 0xe349,
-  0xe348, 0xe344, 0xbad8, 0xe347, 0xe346, 0xbad9, 0xbd5e, 0xe6d2,
-  0xbd5f, 0xbd5b, 0xbd5d, 0xbd5a, 0xbd5c, 0xeaaf, 0xbf70, 0xeab1,
-  0xeab0, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0xedb5, 0xedb3,
-  0xc14a, 0xedb4, 0xedb6, 0xedb2, 0xedb1, 0xf060, 0xc2aa, 0xc2a8,
-  0xc2a9, 0xf2a6, 0xf2a7, 0xc3ad, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2,
-  0xf6f8, 0xf6f9, 0xa5de, 0xca48, 0xa873, 0xcda5, 0xaac6, 0xaac5,
-  0xcda6, 0xd040, 0xacef, 0xcffe, 0xacf0, 0xafb6, 0xd2f8, 0xd2f6,
-  0xd2fc, 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0xd6c8, 0xd6ca,
-  0xb2bf, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, 0xb57e, 0xdadb, 0xdf44,
-  0xb85d, 0xb85e, 0xdf43, 0xdf42, 0xe34a, 0xbadb, 0xbada, 0xe34b,
-  0xe34c, 0xbd61, 0xbd60, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4,
-  0xeab2, 0xeab6, 0xeab3, 0xbf73, 0xedb7, 0xc14b, 0xedb8, 0xedb9,
-  0xc2ab, 0xc2ac, 0xc475, 0xc5d1, 0xa5df, 0xd041, 0xd2fd, 0xafb8,
-  0xb3ba, 0xb3b9, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0xdf45, 0xbadc,
-  0xe34d, 0xbadd, 0xc476, 0xf4a5, 0xa6cb, 0xaac7, 0xcda7, 0xacf2,
-  0xacf1, 0xd042, 0xd043, 0xd340, 0xd342, 0xafb9, 0xd344, 0xd347,
-  0xd345, 0xd346, 0xd343, 0xd2fe, 0xafba, 0xd348, 0xd341, 0xd6d3,
-  0xb2c6, 0xd6dc, 0xb2c3, 0xd6d5, 0xb2c7, 0xb2c1, 0xd6d0, 0xd6dd,
-  0xd6d1, 0xd6ce, 0xb2c5, 0xb2c2, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8,
-  0xb2c8, 0xd6d9, 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb,
-  0xd6db, 0xdadf, 0xdae4, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, 0xdae1,
-  0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, 0xb5a8,
-  0xb5ae, 0xb5a9, 0xb5aa, 0xb5a6, 0xdae5, 0xb861, 0xdf50, 0xdf53,
-  0xdf47, 0xdf4c, 0xdf46, 0xb863, 0xdf4a, 0xdf48, 0xb862, 0xdf4f,
-  0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, 0xdf51,
-  0xe35d, 0xbae8, 0xe358, 0xbae7, 0xe34e, 0xe350, 0xbae0, 0xe355,
-  0xe354, 0xe357, 0xbae5, 0xe352, 0xe351, 0xbae4, 0xbadf, 0xe353,
-  0xbae2, 0xe359, 0xe35b, 0xe356, 0xe34f, 0xbae3, 0xbd69, 0xbade,
-  0xe35c, 0xe6d9, 0xbd62, 0xe6db, 0xbd63, 0xbd65, 0xe6de, 0xe6d6,
-  0xbae6, 0xe6dc, 0xe6d8, 0xb860, 0xbd68, 0xbd64, 0xbd66, 0xbd67,
-  0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0xe6da, 0xeac0, 0xeabb, 0xeac5,
-  0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, 0xc151,
-  0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, 0xeabe,
-  0xbf7a, 0xeac1, 0xeac4, 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1,
-  0xc14f, 0xedc8, 0xeabf, 0xedbf, 0xedc9, 0xc14e, 0xedbe, 0xedbd,
-  0xedc7, 0xedc4, 0xedc6, 0xedba, 0xedca, 0xc14c, 0xedc5, 0xedce,
-  0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, 0xedcd, 0xbf75, 0xf063,
-  0xf061, 0xf067, 0xc2b0, 0xf065, 0xf064, 0xc2b2, 0xf06a, 0xc2b1,
-  0xf06b, 0xf068, 0xc2ae, 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab,
-  0xf066, 0xf06c, 0xf2a8, 0xc3b2, 0xc3b0, 0xf2aa, 0xf2ac, 0xf2a9,
-  0xc3b1, 0xc3ae, 0xc3af, 0xc3b3, 0xc478, 0xf4aa, 0xf4a9, 0xf4a7,
-  0xf4a6, 0xf4a8, 0xc477, 0xc479, 0xc4f0, 0xf5e5, 0xf5e4, 0xf6fa,
-  0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0xc5a3, 0xc5a2, 0xc5d3, 0xc5d2,
-  0xc5d4, 0xf7ed, 0xf7ec, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0xc659,
-  0xf96d, 0xc67e, 0xa6cc, 0xcda8, 0xd045, 0xd046, 0xd044, 0xacf3,
-  0xd047, 0xd048, 0xd049, 0xd349, 0xd34f, 0xd34d, 0xafbb, 0xd34b,
-  0xd34c, 0xd34e, 0xd34a, 0xb2c9, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca,
-  0xd6df, 0xdae8, 0xb5af, 0xdaea, 0xdae7, 0xd6e1, 0xb5b0, 0xdae9,
-  0xdf56, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0xbae9, 0xe361,
-  0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, 0xe6df, 0xe6e0, 0xbd6b,
-  0xe6e2, 0xe6e1, 0xa261, 0xeaca, 0xeacb, 0xeac7, 0xeac8, 0xbf7c,
-  0xbf7d, 0xeac9, 0xc157, 0xc153, 0xc158, 0xc154, 0xc156, 0xc152,
-  0xc155, 0xc2b3, 0xedcf, 0xf2ae, 0xf2ad, 0xf4ab, 0xc47a, 0xc47b,
-  0xf741, 0xf5e6, 0xf740, 0xf8fd, 0xf9a4, 0xa6cd, 0xa874, 0xcda9,
-  0xaac8, 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa,
-  0xacf8, 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353,
-  0xd359, 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355,
-  0xafbd, 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350,
-  0xd357, 0xafc0, 0xafbc, 0xafc1, 0xd6f0, 0xd6e9, 0xb5b5, 0xd6e8,
-  0xb2cf, 0xb2d6, 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0xd6e2, 0xd6e5,
-  0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed,
-  0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb,
-  0xd6ee, 0xdafb, 0xdaf2, 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7,
-  0xb5b4, 0xdaef, 0xdaeb, 0xb86c, 0xdaf4, 0xb5b1, 0xdafa, 0xb5b8,
-  0xb5ba, 0xdaed, 0xb5b9, 0xdaf0, 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5,
-  0xdaf3, 0xb5b6, 0xdaec, 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0xb868,
-  0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0xdf5b, 0xdf59, 0xb86a, 0xdf60,
-  0xdf64, 0xdf5c, 0xdf58, 0xdf57, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b,
-  0xb869, 0xdf66, 0xb867, 0xdf63, 0xe372, 0xbaee, 0xe36a, 0xbd78,
-  0xe374, 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0xe375, 0xe362, 0xe377,
-  0xe366, 0xbafe, 0xbafb, 0xe376, 0xe370, 0xbaed, 0xbaf5, 0xbaf4,
-  0xbaf3, 0xbaf9, 0xe363, 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373,
-  0xbaef, 0xbaf0, 0xbaf8, 0xe368, 0xe367, 0xe364, 0xe36c, 0xe369,
-  0xe36d, 0xbafd, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0xe36b, 0xbafc,
-  0xe6e7, 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0xbd72, 0xbd76, 0xe6f0,
-  0xbd6c, 0xe6e8, 0xbd74, 0xe6eb, 0xe6e6, 0xbd73, 0xbd77, 0xe6e5,
-  0xbd71, 0xe6ef, 0xbd6e, 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d,
-  0xe6ec, 0xe6e3, 0xbd7b, 0xe6ea, 0xbd6f, 0xe6e9, 0xbfa2, 0xbfa7,
-  0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, 0xbfa8, 0xbfa1,
-  0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, 0xead6, 0xbfa3,
-  0xead4, 0xbfa6, 0xbfa5, 0xead0, 0xead1, 0xeacd, 0xead7, 0xbfa4,
-  0xeade, 0xeadd, 0xedda, 0xedd6, 0xc15f, 0xedd0, 0xc159, 0xc169,
-  0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c,
-  0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168,
-  0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9,
-  0xc166, 0xedd7, 0xeddb, 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4,
-  0xc2b5, 0xf06f, 0xf076, 0xf071, 0xc2ba, 0xc2b7, 0xf06d, 0xc2b6,
-  0xf073, 0xf075, 0xc2b8, 0xf072, 0xf070, 0xf2b8, 0xc3b7, 0xc3b8,
-  0xc3b4, 0xc3b5, 0xf2b4, 0xf2b2, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0,
-  0xf2af, 0xf2b3, 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d,
-  0xf4ad, 0xf4af, 0xf4ae, 0xc4a1, 0xf5eb, 0xf5e8, 0xf5e9, 0xf5e7,
-  0xf5ea, 0xc4f2, 0xf5ec, 0xc4f1, 0xf742, 0xc5d5, 0xc5d7, 0xf7ee,
-  0xc5d6, 0xf8b9, 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0xa6ce,
-  0xacfb, 0xd26f, 0xafca, 0xb2da, 0xdafc, 0xdafd, 0xeadf, 0xc16a,
-  0xede1, 0xc2bb, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0xf743, 0xc5f8,
-  0xca49, 0xaac9, 0xa875, 0xd04d, 0xd360, 0xd35b, 0xd35f, 0xd35d,
-  0xafcb, 0xd35e, 0xd35c, 0xd6f1, 0xdafe, 0xdb40, 0xdf69, 0xdf6a,
-  0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0xbb40, 0xb870,
-  0xe37a, 0xbd7c, 0xe6f1, 0xbd7d, 0xbfa9, 0xeae2, 0xeae0, 0xeae1,
-  0xede4, 0xede3, 0xede2, 0xf2bb, 0xc3b9, 0xf2bc, 0xf744, 0xc5f9,
-  0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0xd04e, 0xd362,
-  0xafcc, 0xd6f2, 0xd361, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db,
-  0xdb42, 0xdb43, 0xdb41, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, 0xb872,
-  0xb871, 0xe6f2, 0xe6f4, 0xbd7e, 0xe6f3, 0xeae3, 0xbfaa, 0xf079,
-  0xf078, 0xc3bb, 0xf2bd, 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3,
-  0xa6d0, 0xd050, 0xacfd, 0xd365, 0xafce, 0xd364, 0xd363, 0xafcd,
-  0xd6fb, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc,
-  0xd6f9, 0xd6fa, 0xb2df, 0xb5be, 0xb5bf, 0xdb44, 0xdf6f, 0xdf70,
-  0xe37e, 0xbb43, 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0xe37d, 0xe6f9,
-  0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4,
-  0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0xf07a, 0xf07b,
-  0xc2bc, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, 0xc4a3, 0xa6d1,
-  0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, 0xb5c0, 0xa6d3, 0xad41,
-  0xd052, 0xd053, 0xad40, 0xad42, 0xa6d4, 0xd054, 0xafd1, 0xd366,
-  0xafd3, 0xafd0, 0xafd2, 0xd741, 0xb2e0, 0xd740, 0xd6fe, 0xdf71,
-  0xe3a1, 0xbda2, 0xbfae, 0xeae6, 0xeae5, 0xede7, 0xf5ef, 0xa6d5,
-  0xcb73, 0xcdaa, 0xad43, 0xd055, 0xd368, 0xafd4, 0xd367, 0xafd5,
-  0xd743, 0xb2e2, 0xd742, 0xd744, 0xb2e1, 0xdb46, 0xdb47, 0xdb45,
-  0xb5c1, 0xb874, 0xb875, 0xbb45, 0xe3a3, 0xe3a2, 0xbb44, 0xe6fb,
-  0xe6fc, 0xeae7, 0xc170, 0xc16f, 0xc16d, 0xc16e, 0xc171, 0xf07c,
-  0xc2bf, 0xc2be, 0xf2c0, 0xf4b2, 0xc5a5, 0xc5a4, 0xa6d6, 0xd1fb,
-  0xb877, 0xb5c2, 0xb876, 0xbb46, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9,
-  0xcdab, 0xcb76, 0xcb77, 0xa877, 0xcb74, 0xa876, 0xa879, 0xcb75,
-  0xa87b, 0xa87a, 0xcb78, 0xa878, 0xaad1, 0xaacf, 0xcdad, 0xaace,
-  0xaad3, 0xaad5, 0xaad2, 0xcdb0, 0xcdac, 0xaad6, 0xaad0, 0xa87c,
-  0xaad4, 0xcdaf, 0xcdae, 0xaacd, 0xd05b, 0xad47, 0xad48, 0xd05d,
-  0xd057, 0xd05a, 0xd063, 0xd061, 0xad49, 0xd067, 0xad4c, 0xd064,
-  0xd05c, 0xd059, 0xdb49, 0xd062, 0xad44, 0xd065, 0xd056, 0xd05f,
-  0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0xd058, 0xad4a, 0xd05e,
-  0xad4e, 0xad45, 0xd066, 0xafda, 0xafe3, 0xafd8, 0xafd6, 0xd36a,
-  0xafde, 0xafdb, 0xd36c, 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2,
-  0xafe0, 0xdb48, 0xd36f, 0xd36d, 0xafd7, 0xafd9, 0xafdc, 0xafdf,
-  0xafe1, 0xd74e, 0xb2e4, 0xd745, 0xd747, 0xd748, 0xd750, 0xd74c,
-  0xd74a, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0xd74f, 0xb2e7,
-  0xb2e6, 0xd74b, 0xd749, 0xb2e3, 0xb2e8, 0xb5c8, 0xdb51, 0xdb4f,
-  0xb5ca, 0xdb4a, 0xdfa1, 0xb5c9, 0xdb4e, 0xdb4b, 0xb5c5, 0xb5cb,
-  0xdb50, 0xb5c7, 0xdb4d, 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4,
-  0xb5c3, 0xdf77, 0xdf75, 0xdf7b, 0xdf73, 0xdfa2, 0xdf78, 0xdf72,
-  0xb87b, 0xb8a3, 0xdf7d, 0xdf76, 0xb87e, 0xb87c, 0xdf7e, 0xb879,
-  0xb878, 0xdf79, 0xb87d, 0xb5cd, 0xdf7c, 0xdf74, 0xb87a, 0xb8a1,
-  0xb8a2, 0xbb4c, 0xbb48, 0xbb4d, 0xe3a6, 0xe3a5, 0xe3a7, 0xbb4a,
-  0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0xbb49, 0xe741, 0xe744,
-  0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe,
-  0xbda6, 0xe742, 0xe6fd, 0xeae9, 0xeaf3, 0xbfb1, 0xbfb0, 0xeaed,
-  0xeaef, 0xeaea, 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec,
-  0xeaf2, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177,
-  0xc176, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, 0xc179,
-  0xedeb, 0xedea, 0xc2c0, 0xc2c1, 0xf0a1, 0xf07d, 0xf07e, 0xf2c2,
-  0xf2c1, 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0xf5f0, 0xf745, 0xc5a6,
-  0xf943, 0xf944, 0xc5d8, 0xa6da, 0xaad7, 0xdb52, 0xbb4e, 0xc17b,
-  0xedef, 0xa6db, 0xafe5, 0xafe4, 0xdb53, 0xeaf4, 0xa6dc, 0xad50,
-  0xdb54, 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0xaad8, 0xd068,
-  0xafe6, 0xd370, 0xb2ea, 0xdb57, 0xb8a4, 0xbb50, 0xbfb3, 0xc17c,
-  0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0xafe7, 0xd752, 0xb5ce, 0xbb51,
-  0xe3ab, 0xe745, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, 0xcdb1,
-  0xd069, 0xad51, 0xd372, 0xafea, 0xafe8, 0xafe9, 0xafeb, 0xd371,
-  0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, 0xd753, 0xb2ee,
-  0xd755, 0xdb58, 0xdb59, 0xdb5a, 0xdfa6, 0xdfa7, 0xdfa5, 0xdfa8,
-  0xb8a5, 0xdfa4, 0xbb53, 0xe74a, 0xe746, 0xe749, 0xe74b, 0xe748,
-  0xe747, 0xeaf5, 0xeaf6, 0xeaf7, 0xbfb4, 0xbfb5, 0xedf1, 0xedf0,
-  0xedf2, 0xf0a3, 0xf0a2, 0xf2c4, 0xf2c5, 0xf2c3, 0xc4a5, 0xf4b6,
-  0xf4b7, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, 0xc17d, 0xa6e2,
-  0xd758, 0xdb5b, 0xc641, 0xca4a, 0xca4b, 0xca4d, 0xa6e3, 0xca4e,
-  0xca4c, 0xcba2, 0xcba3, 0xcb7b, 0xcba1, 0xa8a1, 0xa8a2, 0xcb7c,
-  0xcb7a, 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0xcdb6, 0xaadc,
-  0xcdb5, 0xcdb7, 0xaadb, 0xcdbc, 0xaadf, 0xcdb2, 0xcdc0, 0xcdc6,
-  0xaae6, 0xcdc3, 0xaae3, 0xcdb9, 0xcdbf, 0xcdc1, 0xcdb4, 0xaae2,
-  0xaadd, 0xcdba, 0xaae4, 0xaae7, 0xaae1, 0xaada, 0xcdbe, 0xcdb8,
-  0xcdc5, 0xaae9, 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade,
-  0xaae8, 0xcdb3, 0xcdc2, 0xcdc4, 0xad62, 0xad5c, 0xad64, 0xad61,
-  0xd071, 0xd074, 0xad5d, 0xd06b, 0xad56, 0xad60, 0xad63, 0xad65,
-  0xd0a2, 0xd077, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, 0xd06f,
-  0xd07e, 0xd073, 0xd076, 0xd0a5, 0xad66, 0xd07d, 0xad5e, 0xd078,
-  0xd0a4, 0xd075, 0xd079, 0xd07c, 0xd06d, 0xd0a3, 0xd07b, 0xd06c,
-  0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e,
-  0xd3a5, 0xad5b, 0xd07a, 0xce41, 0xd3a8, 0xaffa, 0xd376, 0xd3a3,
-  0xd37d, 0xd3b2, 0xd3aa, 0xd37e, 0xd3a9, 0xd378, 0xd37c, 0xd3b5,
-  0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0xd3ac, 0xaffc,
-  0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, 0xaff1, 0xaff8,
-  0xd072, 0xdb5c, 0xd3a6, 0xd37a, 0xaffb, 0xd37b, 0xd3a1, 0xaffe,
-  0xd375, 0xd3af, 0xd3ae, 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0,
-  0xd3a7, 0xd3a2, 0xaff6, 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef,
-  0xd379, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, 0xb2f2, 0xd75d,
-  0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, 0xd762, 0xd769, 0xb340,
-  0xd777, 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef,
-  0xd761, 0xd759, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773,
-  0xb2f1, 0xd764, 0xd77a, 0xd76c, 0xd76b, 0xb2f0, 0xb2fb, 0xb2f3,
-  0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, 0xd75b, 0xd767, 0xd76d,
-  0xb2f6, 0xd778, 0xd771, 0xd774, 0xb2f5, 0xdb6c, 0xdb60, 0xb5d7,
-  0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, 0xdb69, 0xdb77,
-  0xb5e2, 0xdb73, 0xb5df, 0xdb74, 0xdb5d, 0xdba4, 0xb5e8, 0xdba1,
-  0xdb75, 0xdbac, 0xdb70, 0xdfc8, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a,
-  0xb5e9, 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0xdb63,
-  0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0xdba9, 0xb5d8, 0xb5dd,
-  0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0xb5d2, 0xdb5e,
-  0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, 0xdb6d, 0xb5d1,
-  0xb5e5, 0xdb7c, 0xb5e7, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3,
-  0xb5e4, 0xdb79, 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0xdbae, 0xdb5f,
-  0xdfc7, 0xdfdd, 0xb855, 0xdfcc, 0xdfca, 0xdfb5, 0xb8a9, 0xdfc5,
-  0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, 0xb5e3, 0xdfcf, 0xdfc0,
-  0xdfd6, 0xb8b0, 0xb8a8, 0xdfaa, 0xdfb2, 0xdfcb, 0xdfc3, 0xdfdc,
-  0xdfc6, 0xb8b6, 0xdfd7, 0xb8ad, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0,
-  0xdfe1, 0xdfb1, 0xdfd2, 0xdfdf, 0xdfab, 0xb5db, 0xdfb9, 0xdfb8,
-  0xb8af, 0xdfbc, 0xdfbe, 0xdfcd, 0xdfde, 0xb8b2, 0xb8b3, 0xdfb0,
-  0xb8ab, 0xdfb4, 0xdfda, 0xb8b4, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0,
-  0xdfd3, 0xdfce, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, 0xdfc4,
-  0xdfad, 0xdfc2, 0xdfb7, 0xdfdb, 0xb8a6, 0xdfb3, 0xdfaf, 0xdfd5,
-  0xdfae, 0xbb60, 0xe3d3, 0xe3c2, 0xe3ac, 0xe3ca, 0xbb58, 0xe3bb,
-  0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, 0xe3cd, 0xe3ae, 0xe3c1,
-  0xe3ad, 0xe3bf, 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0xe3b4,
-  0xe3c7, 0xe3d2, 0xe3bc, 0xbb5a, 0xe3b7, 0xe3cb, 0xbb5d, 0xe3b6,
-  0xe3b0, 0xe3c0, 0xbb61, 0xbb55, 0xbb5e, 0xe3b8, 0xe3b2, 0xbb57,
-  0xdfd4, 0xbb56, 0xe3c3, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9,
-  0xe3b1, 0xe3cc, 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0xe3c9,
-  0xe3ce, 0xe3d1, 0xe773, 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4,
-  0xbdac, 0xe776, 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0xe770,
-  0xe761, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6,
-  0xe74f, 0xe76d, 0xbdb7, 0xdfbd, 0xe75b, 0xe752, 0xe755, 0xe77b,
-  0xe75c, 0xe753, 0xe751, 0xe74e, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3,
-  0xe760, 0xe768, 0xbda9, 0xe778, 0xe77c, 0xbdab, 0xe757, 0xe76b,
-  0xe76f, 0xe754, 0xe779, 0xbdb2, 0xbdb1, 0xe74c, 0xbdb5, 0xe772,
-  0xe756, 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c,
-  0xe77d, 0xe77a, 0xe771, 0xe74d, 0xbdaa, 0xeb49, 0xeb40, 0xeb43,
-  0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, 0xbfb8, 0xbfbc, 0xbfb6,
-  0xeafb, 0xeb4c, 0xeb46, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46,
-  0xeafe, 0xbfb7, 0xeb4a, 0xeb54, 0xbfbf, 0xeb51, 0xeafd, 0xeb44,
-  0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, 0xbfb9, 0xbfba, 0xbfbe,
-  0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0xeb4b, 0xeb4e, 0xee53, 0xee40,
-  0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0xc1a2, 0xedf4, 0xee4d,
-  0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, 0xee50, 0xee42,
-  0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, 0xee55, 0xc1a4,
-  0xc1a5, 0xedf7, 0xee48, 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3,
-  0xee4c, 0xedfe, 0xee56, 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc,
-  0xc2cb, 0xedf6, 0xc1a9, 0xc2c4, 0xc17e, 0xc1a6, 0xc2c8, 0xf0b3,
-  0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, 0xf0b7, 0xc2ca, 0xc2c9,
-  0xf0ab, 0xf0b9, 0xf0ae, 0xf0a6, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2,
-  0xf0a5, 0xf0ac, 0xf0b1, 0xc2c7, 0xf0af, 0xc2c5, 0xf0b0, 0xc2c3,
-  0xc2c6, 0xf2d5, 0xf0b5, 0xc3c2, 0xf2cd, 0xf2d1, 0xf2c9, 0xf2cc,
-  0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3,
-  0xc3c4, 0xf2d7, 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8,
-  0xf2d8, 0xf2d6, 0xf2c7, 0xf2cf, 0xf4be, 0xc3c5, 0xf2d0, 0xc4a7,
-  0xc4a9, 0xc4a6, 0xf4c3, 0xf4bb, 0xf4b9, 0xf4bd, 0xf4ba, 0xf4bf,
-  0xf4c1, 0xc4aa, 0xc4ac, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0xc4a8,
-  0xc4f4, 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0xf5fd, 0xf5f4,
-  0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8,
-  0xf5fc, 0xf5f2, 0xf74a, 0xc4f5, 0xf5f9, 0xf7f4, 0xf74b, 0xf749,
-  0xf747, 0xf748, 0xf74c, 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3,
-  0xf7f6, 0xc5da, 0xf7f1, 0xf8bc, 0xf945, 0xf946, 0xf947, 0xf9c7,
-  0xf9bd, 0xca4f, 0xaaea, 0xad68, 0xd3b8, 0xd3b7, 0xb040, 0xb342,
-  0xd77c, 0xd77b, 0xb5ea, 0xb8b8, 0xb8b7, 0xb8b9, 0xe3d4, 0xe77e,
-  0xeb58, 0xeb5a, 0xeb59, 0xc1ab, 0xee57, 0xf0ba, 0xf9a5, 0xa6e4,
-  0xcdc9, 0xcdca, 0xcdc8, 0xcdc7, 0xaaeb, 0xd0a9, 0xd0a7, 0xd0a6,
-  0xad69, 0xad6b, 0xad6a, 0xd0a8, 0xd3c4, 0xd3c1, 0xd3bf, 0xb041,
-  0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0xd3cd, 0xd3bd, 0xb043, 0xd3ce,
-  0xd3c9, 0xd3bb, 0xd3c0, 0xd3ca, 0xd3c6, 0xd3c3, 0xb048, 0xd3cc,
-  0xd3be, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0xd3c8, 0xd3ba,
-  0xb045, 0xb042, 0xb34c, 0xd7a5, 0xb34b, 0xd7a8, 0xd7ab, 0xb348,
-  0xb346, 0xd77e, 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af,
-  0xd7b0, 0xd77d, 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3,
-  0xb349, 0xb344, 0xd7a6, 0xb34d, 0xb34a, 0xd7aa, 0xb5f1, 0xdbbf,
-  0xdbb4, 0xb5ee, 0xdfe7, 0xdbbd, 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef,
-  0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, 0xdbb2, 0xdbb5, 0xb5f0, 0xdbb3,
-  0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0xdfe8, 0xdfee,
-  0xdfe4, 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0xb8bf, 0xb8be, 0xdfed,
-  0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, 0xb8bc, 0xdfec,
-  0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0xe3f4, 0xe3e9, 0xb8bb,
-  0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0xe3db, 0xe3e4, 0xe3dc,
-  0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, 0xe3d7, 0xbb6d,
-  0xe3e6, 0xe3e0, 0xe3e7, 0xe3da, 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5,
-  0xbb69, 0xe3ec, 0xbb6c, 0xe3f0, 0xe3ea, 0xbb66, 0xe3e8, 0xe3e2,
-  0xbb64, 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0xe3e3, 0xbdc1, 0xdfe9,
-  0xe7b2, 0xe7bb, 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b,
-  0xe7a1, 0xbdc0, 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4,
-  0xe7ae, 0xe7b3, 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba,
-  0xbdbc, 0xe7bf, 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af,
-  0xe7b8, 0xe7b5, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, 0xbdbd,
-  0xeb64, 0xe7b7, 0xe7bc, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67,
-  0xeb65, 0xeb60, 0xeb6f, 0xbfc4, 0xeb5c, 0xeb68, 0xeb69, 0xeb5f,
-  0xeb5e, 0xeb6c, 0xeb62, 0xeb5d, 0xeb63, 0xeb6e, 0xeb5b, 0xeb6d,
-  0xeb6a, 0xbfc2, 0xbfc1, 0xbfc3, 0xeb66, 0xf0cb, 0xee59, 0xc1b1,
-  0xee5d, 0xee5a, 0xee61, 0xee67, 0xee5c, 0xee70, 0xc1ae, 0xee6a,
-  0xee5f, 0xee6b, 0xee66, 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60,
-  0xee6e, 0xee58, 0xee6c, 0xc1ac, 0xee64, 0xee63, 0xee68, 0xee5b,
-  0xc1b0, 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0xc1ad, 0xc1af,
-  0xf0c7, 0xf0c5, 0xf0cc, 0xf0c9, 0xf0cd, 0xf0be, 0xf0c6, 0xf0d1,
-  0xee6f, 0xf0c2, 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1,
-  0xf0bc, 0xf0bb, 0xf0d0, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0xc2cc,
-  0xc2ce, 0xf0c3, 0xf0cf, 0xf2de, 0xf2df, 0xc3c9, 0xf2dc, 0xc3c6,
-  0xf2e4, 0xc3ca, 0xf2e6, 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0xc3c7,
-  0xf2e3, 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0xf4c5,
-  0xf4c6, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, 0xf4c4, 0xf642,
-  0xf645, 0xf641, 0xc4fa, 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644,
-  0xf751, 0xf74f, 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0xf7f9,
-  0xf7d7, 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0xf8bf, 0xc5fa, 0xf8be,
-  0xf8bd, 0xc5fb, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, 0xa6e5,
-  0xd0aa, 0xd3cf, 0xd3d0, 0xdbc0, 0xf647, 0xf8c0, 0xa6e6, 0xad6c,
-  0xd0ab, 0xd7b1, 0xb34e, 0xdbc2, 0xdbc1, 0xb5f3, 0xb8c5, 0xe7c1,
-  0xbdc3, 0xbdc4, 0xbfc5, 0xc5fc, 0xa6e7, 0xd0ac, 0xaaed, 0xd0ae,
-  0xd0ad, 0xad6d, 0xd3d1, 0xd3d8, 0xb049, 0xd3d6, 0xd3d4, 0xd3db,
-  0xd3d2, 0xd3d3, 0xb04a, 0xb04e, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7,
-  0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0xb350, 0xd7b2, 0xb355, 0xd7c2,
-  0xb354, 0xd7c4, 0xd7b8, 0xb352, 0xd7c3, 0xd7b3, 0xb353, 0xd7bf,
-  0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0xb34f, 0xd7ba, 0xd7b9, 0xd7b5,
-  0xd7c0, 0xd7bc, 0xd7b4, 0xd7b6, 0xb351, 0xd7c1, 0xb5f6, 0xdbcd,
-  0xdbc9, 0xdbcb, 0xdbc6, 0xdbc5, 0xdbc3, 0xdbca, 0xdbcc, 0xdbc8,
-  0xdbc7, 0xb5f4, 0xb5f5, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3,
-  0xdff4, 0xdff9, 0xb8cf, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, 0xb8ca,
-  0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, 0xb8cc,
-  0xe3f6, 0xbb74, 0xe442, 0xe441, 0xe3fb, 0xbb76, 0xe440, 0xe3f7,
-  0xe3f8, 0xbb6e, 0xbb70, 0xe3fd, 0xe3f5, 0xbb72, 0xbb71, 0xe3f9,
-  0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0xdbce, 0xbb6f, 0xe7c2, 0xe7c9,
-  0xbdc6, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0xe7cc, 0xbdc5, 0xe7cb,
-  0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, 0xe7c7, 0xe7c8,
-  0xbb75, 0xeb70, 0xeb7c, 0xbfca, 0xeb77, 0xeb79, 0xbfc8, 0xeb71,
-  0xeb75, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a,
-  0xeb72, 0xeb76, 0xbfc7, 0xee72, 0xee71, 0xc1b7, 0xee77, 0xc1b9,
-  0xc1b6, 0xee73, 0xc1ba, 0xee74, 0xee75, 0xee78, 0xc1b8, 0xf0d6,
-  0xf0d9, 0xf0d3, 0xf0d5, 0xf0d4, 0xf0d7, 0xf0d8, 0xee76, 0xf0d2,
-  0xc3cd, 0xf2ec, 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0,
-  0xc3ce, 0xc3cc, 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0xf4cb,
-  0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, 0xf752,
-  0xc5a7, 0xf7fd, 0xf7fc, 0xf7fb, 0xf948, 0xf949, 0xf94b, 0xf94a,
-  0xca50, 0xa6e8, 0xad6e, 0xd7c5, 0xb5f7, 0xdffa, 0xc2d0, 0xf2f2,
-  0xa8a3, 0xb357, 0xb356, 0xdbd0, 0xb5f8, 0xdbd2, 0xdbd1, 0xdffb,
-  0xb8d0, 0xe443, 0xe446, 0xe445, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf,
-  0xbfcc, 0xbfcb, 0xc1bb, 0xee79, 0xee7b, 0xee7a, 0xc2d1, 0xf2f4,
-  0xf2f3, 0xf4cc, 0xc4b1, 0xc4fd, 0xf754, 0xf753, 0xc65b, 0xa8a4,
-  0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043,
-  0xdbd3, 0xdffc, 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd,
-  0xe044, 0xe449, 0xe447, 0xe448, 0xe7d3, 0xe7d1, 0xe7d2, 0xeb7d,
-  0xee7c, 0xee7d, 0xc2d2, 0xf2f5, 0xf4cd, 0xc4b2, 0xf64c, 0xf755,
-  0xc5a9, 0xf7fe, 0xf94c, 0xa8a5, 0xad71, 0xad72, 0xd0b0, 0xd0b1,
-  0xad70, 0xb054, 0xb052, 0xb051, 0xb058, 0xb050, 0xb059, 0xd3dd,
-  0xb056, 0xb053, 0xb057, 0xb055, 0xb04f, 0xb35f, 0xb359, 0xd7cc,
-  0xb35e, 0xb360, 0xb35a, 0xb35b, 0xd7ca, 0xb358, 0xd7cb, 0xb35d,
-  0xd7c9, 0xb35c, 0xb644, 0xb646, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd,
-  0xb8e4, 0xe049, 0xdbda, 0xb5fe, 0xdbdd, 0xdbde, 0xb643, 0xdbe0,
-  0xdbe2, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, 0xb642, 0xdbe1, 0xdbdf,
-  0xb640, 0xb5fb, 0xb647, 0xdbdb, 0xdbdc, 0xdbd9, 0xb641, 0xb5fc,
-  0xb5fa, 0xe048, 0xb8df, 0xb8da, 0xb8d5, 0xb8e5, 0xb8d6, 0xb8d2,
-  0xb8e1, 0xb8de, 0xb8e0, 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050,
-  0xe04d, 0xe045, 0xe04a, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0xe047,
-  0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, 0xe44c,
-  0xbb78, 0xbb7b, 0xe44e, 0xbba5, 0xe44d, 0xbb7d, 0xbdcf, 0xe44f,
-  0xbba4, 0xe44b, 0xbba6, 0xbb79, 0xb8db, 0xbb7c, 0xbb7a, 0xbb7e,
-  0xbba2, 0xbb77, 0xbba7, 0xbba3, 0xbba1, 0xe44a, 0xbdd6, 0xbdd2,
-  0xbdd9, 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd,
-  0xbdd5, 0xe7de, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd,
-  0xebaa, 0xbdd3, 0xbdd0, 0xbdd8, 0xe7d4, 0xe7d8, 0xbdcc, 0xe7d7,
-  0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, 0xe7e0, 0xe7e4, 0xbddb, 0xbfd2,
-  0xeba5, 0xebab, 0xeba8, 0xeb7e, 0xebac, 0xeba1, 0xeba7, 0xbfcd,
-  0xbfd3, 0xebad, 0xbfcf, 0xbfd9, 0xbfd4, 0xebaf, 0xeba9, 0xbfd0,
-  0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, 0xbdd1, 0xbfce,
-  0xebb0, 0xbfdc, 0xbfd5, 0xebae, 0xbfd1, 0xbfd6, 0xbfd7, 0xc1c3,
-  0xeea4, 0xeead, 0xeeaa, 0xeeac, 0xc1c0, 0xeea5, 0xeeab, 0xc1bc,
-  0xeea7, 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2,
-  0xc1bd, 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e,
-  0xc1c1, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, 0xc2d3,
-  0xf0da, 0xc2d6, 0xc2d5, 0xf0e9, 0xf0e1, 0xf0de, 0xf0e4, 0xf0dd,
-  0xf0df, 0xf0e8, 0xf0e6, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec,
-  0xf0e3, 0xf2f9, 0xc3cf, 0xf341, 0xf64f, 0xc3d6, 0xf0e0, 0xf2f7,
-  0xc3d2, 0xf2f8, 0xf2fd, 0xc3d4, 0xc3d5, 0xf2f6, 0xf340, 0xf342,
-  0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, 0xc3d1, 0xc3d7, 0xc3d3,
-  0xc3d0, 0xf4d0, 0xc4b7, 0xf4ce, 0xf4d2, 0xf4d3, 0xc4b5, 0xf4d4,
-  0xf4d1, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0xc4b6, 0xc4b3, 0xc4fe,
-  0xc540, 0xf64e, 0xf64d, 0xf650, 0xf651, 0xc541, 0xf756, 0xf75b,
-  0xc5aa, 0xf758, 0xf757, 0xf75a, 0xf759, 0xf843, 0xc5dc, 0xf842,
-  0xf840, 0xf841, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0xf94d,
-  0xf94e, 0xc667, 0xc66d, 0xf9a9, 0xf9c8, 0xa8a6, 0xd7cd, 0xd7ce,
-  0xe052, 0xe450, 0xe7e5, 0xc1c6, 0xc1c5, 0xf0ee, 0xf344, 0xf844,
-  0xa8a7, 0xd3de, 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6,
-  0xbddd, 0xeeb1, 0xc2d7, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, 0xb362,
-  0xd7cf, 0xd7d0, 0xdbe5, 0xb648, 0xb8e6, 0xe056, 0xe055, 0xe057,
-  0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0xeeb5, 0xeeb2,
-  0xeeb4, 0xeeb3, 0xc1c7, 0xf0ef, 0xf346, 0xf345, 0xcba4, 0xb05c,
-  0xb05b, 0xd3e0, 0xd7d1, 0xdbe7, 0xdbe6, 0xb649, 0xe059, 0xe05a,
-  0xe058, 0xb8e8, 0xb8e7, 0xbbaa, 0xbba9, 0xe7e7, 0xebb3, 0xebb1,
-  0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0xf0f2, 0xf0f1, 0xf0f0, 0xf347,
-  0xf9aa, 0xa8a9, 0xad73, 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1,
-  0xd7d2, 0xb368, 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0xb64a,
-  0xdbea, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, 0xb655,
-  0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, 0xb650,
-  0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0xb8ea, 0xb8eb, 0xb8e9,
-  0xe05b, 0xe454, 0xbbac, 0xbbad, 0xbbab, 0xe453, 0xe455, 0xe7ea,
-  0xe7ec, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, 0xbddf, 0xbde9, 0xbde5,
-  0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, 0xe7eb, 0xbde8, 0xbde3,
-  0xbde4, 0xebb5, 0xebb7, 0xebb6, 0xebb8, 0xbfe0, 0xebb4, 0xc1cb,
-  0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0xf0f6, 0xf0f5,
-  0xf0f4, 0xc2d8, 0xf348, 0xf349, 0xc3d8, 0xf34a, 0xc3d9, 0xc4ba,
-  0xc4b9, 0xf652, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, 0xf845,
-  0xc642, 0xa8aa, 0xb36a, 0xb369, 0xe05c, 0xe05d, 0xbbae, 0xebb9,
-  0xbdea, 0xebba, 0xeeb9, 0xa8ab, 0xd0b2, 0xad76, 0xad75, 0xd3e3,
-  0xb05f, 0xd3e4, 0xd7d5, 0xd7d4, 0xd7d3, 0xdbee, 0xb658, 0xdbed,
-  0xb657, 0xdbef, 0xb656, 0xe05f, 0xe062, 0xe060, 0xe061, 0xe065,
-  0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0xbbaf, 0xe7f2,
-  0xe7f0, 0xbdeb, 0xe7ef, 0xe7f1, 0xbdec, 0xebbb, 0xebbc, 0xc1cd,
-  0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, 0xf96f, 0xa8ac,
-  0xad77, 0xd3e5, 0xd3e7, 0xd3e6, 0xd7d8, 0xb36c, 0xd7d6, 0xb36b,
-  0xd7d9, 0xd7da, 0xd7d7, 0xdbfb, 0xb660, 0xdbf3, 0xdbf9, 0xb65b,
-  0xb65e, 0xdbf2, 0xb659, 0xdbf6, 0xe06c, 0xb65d, 0xdbf1, 0xdbf7,
-  0xdbf4, 0xdbfa, 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a,
-  0xb8f2, 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0xb8f9, 0xe070,
-  0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0xe06b, 0xb8f4, 0xe067,
-  0xe06a, 0xe071, 0xb8f5, 0xe073, 0xb8f6, 0xbbb1, 0xe45b, 0xe461,
-  0xe459, 0xe462, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e,
-  0xe457, 0xe45c, 0xe45a, 0xbdf1, 0xbdee, 0xe7fb, 0xe841, 0xe843,
-  0xe840, 0xe7f8, 0xe7fa, 0xe845, 0xe842, 0xe7fc, 0xe846, 0xe7f9,
-  0xe844, 0xbdef, 0xbdf5, 0xbdf3, 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4,
-  0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, 0xbdf2, 0xbded, 0xe7f7, 0xebc6,
-  0xbfe2, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0xebbf, 0xbfe5, 0xebc3,
-  0xebc4, 0xebbe, 0xebc7, 0xebc0, 0xebc5, 0xbfe4, 0xbfe1, 0xebc1,
-  0xeebf, 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba,
-  0xeebd, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, 0xc2d9, 0xf141,
-  0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, 0xf0f9, 0xf142, 0xf0f8,
-  0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, 0xf144, 0xf352, 0xc3de,
-  0xf34f, 0xf353, 0xc3db, 0xf351, 0xc3e0, 0xc3dd, 0xf350, 0xc3df,
-  0xf354, 0xc3da, 0xc4bc, 0xc4be, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc,
-  0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0xf761,
-  0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, 0xf846,
-  0xf75f, 0xf8c6, 0xf8c3, 0xf8c4, 0xf8c5, 0xc65c, 0xf951, 0xf950,
-  0xf94f, 0xf970, 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0xb8fa,
-  0xbdf6, 0xebc8, 0xc2df, 0xf355, 0xf9ac, 0xa8ae, 0xaaee, 0xad79,
-  0xad78, 0xb063, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0xd7df, 0xd7db,
-  0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, 0xd7e0, 0xd7e1, 0xdc43,
-  0xdc41, 0xdc45, 0xdc46, 0xdc4c, 0xdc48, 0xdc4a, 0xdc42, 0xdbfc,
-  0xdc49, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, 0xb662, 0xdc40, 0xdbfe,
-  0xb661, 0xb663, 0xb8fd, 0xe075, 0xe077, 0xe076, 0xe07b, 0xb8fb,
-  0xe078, 0xe074, 0xe079, 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0xe467,
-  0xe466, 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d,
-  0xe84e, 0xe849, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9,
-  0xe84b, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0xbdfa, 0xbdfc, 0xe847,
-  0xebca, 0xbfe8, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce,
-  0xbfe9, 0xebcd, 0xbfe7, 0xc1d3, 0xc1d6, 0xeec1, 0xc1d4, 0xeec0,
-  0xc1d2, 0xc1d5, 0xf146, 0xf147, 0xf148, 0xc2e0, 0xf149, 0xc2e1,
-  0xc3e2, 0xf358, 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd,
-  0xf4db, 0xf4dc, 0xf4de, 0xf4da, 0xf4df, 0xf658, 0xf659, 0xf657,
-  0xc546, 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0xa8af, 0xb664,
-  0xb940, 0xbbb6, 0xbfec, 0xbfeb, 0xc3e3, 0xc47c, 0xc547, 0xa8b0,
-  0xb064, 0xb941, 0xf35b, 0xcba6, 0xa8b1, 0xa8b4, 0xa8b3, 0xa8b2,
-  0xcba5, 0xcdcd, 0xcdcf, 0xaaef, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0,
-  0xcdd1, 0xcdd0, 0xcdd2, 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3,
-  0xad7e, 0xad7b, 0xada4, 0xad7d, 0xada2, 0xada1, 0xd0b5, 0xad7a,
-  0xb06a, 0xd3eb, 0xd3f1, 0xb067, 0xb06e, 0xb069, 0xd3ee, 0xd3f0,
-  0xb06c, 0xd3ea, 0xd3ed, 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef,
-  0xb06d, 0xb066, 0xd7e3, 0xd7e6, 0xb370, 0xb37a, 0xb376, 0xd7e4,
-  0xb37e, 0xb377, 0xb37c, 0xb372, 0xb36f, 0xb371, 0xb37d, 0xd7e5,
-  0xb375, 0xb378, 0xb374, 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2,
-  0xdc4d, 0xb665, 0xdc4f, 0xb667, 0xb669, 0xdc4e, 0xb666, 0xb66a,
-  0xb668, 0xb947, 0xe0a3, 0xb94f, 0xe07e, 0xb950, 0xb945, 0xe0a1,
-  0xb94a, 0xe0a2, 0xb943, 0xb942, 0xb94d, 0xb94c, 0xb94b, 0xb949,
-  0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0xbbb8, 0xbbbb, 0xbbbf,
-  0xbbb9, 0xbbbe, 0xbbbc, 0xbbb7, 0xbbbd, 0xbbba, 0xe852, 0xbe43,
-  0xbe41, 0xe853, 0xbe44, 0xbe42, 0xe851, 0xe850, 0xbff0, 0xe84f,
-  0xbfee, 0xbfed, 0xebd0, 0xbe45, 0xbfef, 0xebd1, 0xbff2, 0xebd2,
-  0xbff1, 0xc1d8, 0xeec3, 0xc1d7, 0xc1dc, 0xc1da, 0xc1db, 0xc2e3,
-  0xc1d9, 0xeec2, 0xebd3, 0xc2e2, 0xc2e4, 0xc3e4, 0xc3e5, 0xf4e0,
-  0xc5de, 0xc5dd, 0xa8b6, 0xca55, 0xb06f, 0xca52, 0xca53, 0xca51,
-  0xca54, 0xcbaa, 0xcba7, 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0xcba9,
-  0xa8b9, 0xcbab, 0xa8b8, 0xcdd5, 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6,
-  0xcdd4, 0xaaf2, 0xaaf5, 0xaaf3, 0xd0b8, 0xd0bc, 0xd0b9, 0xada7,
-  0xada8, 0xd0bb, 0xd0bd, 0xd0bf, 0xada5, 0xd0be, 0xada6, 0xd7ee,
-  0xd0ba, 0xd3f2, 0xd3fb, 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc,
-  0xb071, 0xd3f7, 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8,
-  0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0xd7e8, 0xd7ea,
-  0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0xdc56, 0xebd4, 0xdc57,
-  0xdc54, 0xb3a3, 0xb66e, 0xdc53, 0xdc59, 0xdc58, 0xb66b, 0xdc5c,
-  0xdc52, 0xdc5b, 0xdc50, 0xdc5a, 0xdc55, 0xb66d, 0xe0aa, 0xe0a5,
-  0xe0ab, 0xe0a6, 0xe0a4, 0xe0a7, 0xb951, 0xe0a9, 0xe0a8, 0xb952,
-  0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c,
-  0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0xe859, 0xbe48, 0xf14a,
-  0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, 0xbe46,
-  0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0xeec4, 0xc1dd,
-  0xf14b, 0xf14c, 0xf14d, 0xf35d, 0xf35c, 0xf4e2, 0xf4e1, 0xf65b,
-  0xf65c, 0xf65a, 0xf766, 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075,
-  0xb074, 0xd440, 0xd441, 0xd3fe, 0xb073, 0xd7f5, 0xd7f6, 0xd7f2,
-  0xb3a4, 0xd7f3, 0xd7f4, 0xdc5f, 0xdc61, 0xdc5d, 0xdc60, 0xb66f,
-  0xdc5e, 0xb670, 0xdd73, 0xb955, 0xb954, 0xb953, 0xe0ac, 0xe0ad,
-  0xe473, 0xe475, 0xbbc6, 0xbbc3, 0xbbc5, 0xbbc4, 0xe474, 0xe472,
-  0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a,
-  0xbe4b, 0xe85d, 0xbe4c, 0xebdb, 0xebdc, 0xebd9, 0xebda, 0xbff4,
-  0xebd8, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9,
-  0xeecc, 0xeeca, 0xeec6, 0xc1de, 0xf14f, 0xf150, 0xf14e, 0xf152,
-  0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, 0xf35e, 0xc3e6, 0xf4e5,
-  0xf4e6, 0xc4bf, 0xf4e4, 0xf4e3, 0xf65d, 0xc548, 0xf849, 0xf8c8,
-  0xf8c7, 0xc643, 0xc65d, 0xf8c9, 0xf971, 0xc66f, 0xa8bc, 0xaaf6,
-  0xb956, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, 0xc2e7, 0xaaf7,
-  0xd0c1, 0xd0c0, 0xd442, 0xb078, 0xb076, 0xb07a, 0xd444, 0xb079,
-  0xb077, 0xd443, 0xb3a8, 0xd7fc, 0xb3a7, 0xb3a9, 0xd842, 0xb3ab,
-  0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0xd7f9, 0xd7fa, 0xd7f8,
-  0xb3a6, 0xd841, 0xd7fb, 0xd7fd, 0xdc6d, 0xdc6c, 0xdc6a, 0xdc62,
-  0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, 0xb675, 0xdc63,
-  0xdc69, 0xb677, 0xdc68, 0xb678, 0xb67a, 0xdc6b, 0xb672, 0xb673,
-  0xdc77, 0xdc75, 0xdc74, 0xdc66, 0xdc72, 0xb676, 0xb674, 0xdc73,
-  0xdc64, 0xdc67, 0xdc70, 0xe4ba, 0xe0b7, 0xe0b0, 0xe0c3, 0xe0cc,
-  0xe0b3, 0xb961, 0xe0c0, 0xb957, 0xb959, 0xb965, 0xe0b1, 0xb95a,
-  0xb95c, 0xb966, 0xb95b, 0xb964, 0xe0b9, 0xe0ae, 0xb962, 0xe0b8,
-  0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, 0xe0c6, 0xb960, 0xe0af,
-  0xe0c9, 0xe0c4, 0xe0cb, 0xb958, 0xb967, 0xb95d, 0xe0b5, 0xe0bd,
-  0xe0c1, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, 0xe0bb, 0xe0ba,
-  0xe0bf, 0xe0c2, 0xe0c7, 0xe478, 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc,
-  0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, 0xbbc8, 0xe4aa, 0xe0b6, 0xbbc9,
-  0xe4b1, 0xe4b6, 0xe4ae, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9,
-  0xbbd1, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, 0xbbca, 0xe4b3,
-  0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0xe47b, 0xe4af, 0xe4ac, 0xe4a7,
-  0xe477, 0xe476, 0xe4a1, 0xe4b4, 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3,
-  0xbe52, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, 0xbe4f,
-  0xbe56, 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3,
-  0xbe58, 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875,
-  0xe868, 0xe862, 0xe87d, 0xbe57, 0xe87e, 0xe878, 0xe86d, 0xe86b,
-  0xe866, 0xe86e, 0xe87b, 0xe86a, 0xe87a, 0xe8a2, 0xbe53, 0xe876,
-  0xe87c, 0xe872, 0xe86c, 0xbe51, 0xe4a8, 0xe870, 0xbe59, 0xe869,
-  0xebf4, 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0xec41, 0xebf8,
-  0xec43, 0xebe9, 0xebf6, 0xbffd, 0xebe1, 0xebdf, 0xec42, 0xec40,
-  0xebfe, 0xebed, 0xebec, 0xebe2, 0xc040, 0xebe8, 0xebf2, 0xebfd,
-  0xc043, 0xec45, 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0xebef, 0xebde,
-  0xebe0, 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041,
-  0xebdd, 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0xebeb, 0xc044, 0xbff9,
-  0xbff8, 0xebf5, 0xebfb, 0xbff6, 0xebe4, 0xebfa, 0xebe5, 0xebea,
-  0xeed2, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3,
-  0xeed8, 0xeed9, 0xeee2, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, 0xeed4,
-  0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0xeee8, 0xeeda, 0xeee7, 0xeee9,
-  0xeed0, 0xc1e6, 0xeeea, 0xeede, 0xc1ea, 0xeedb, 0xc1ec, 0xeee4,
-  0xc1e4, 0xeed6, 0xeee5, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0xc1e9,
-  0xeeeb, 0xc1e2, 0xeece, 0xf160, 0xf159, 0xc2e9, 0xf154, 0xf163,
-  0xf15b, 0xeedc, 0xf165, 0xf155, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2,
-  0xc2f0, 0xf161, 0xc2f1, 0xf157, 0xf158, 0xf15d, 0xf162, 0xeecd,
-  0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, 0xf168, 0xf36a,
-  0xf15c, 0xc2ee, 0xc2ed, 0xeecf, 0xc2ef, 0xf164, 0xf166, 0xc2ec,
-  0xf169, 0xf153, 0xf156, 0xf373, 0xf363, 0xc3eb, 0xf371, 0xf361,
-  0xc3ec, 0xf36c, 0xf368, 0xc3f1, 0xf372, 0xf362, 0xf365, 0xc3e9,
-  0xf374, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, 0xc3f2, 0xf369, 0xf364,
-  0xc3ed, 0xc3ee, 0xf360, 0xc3ea, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3,
-  0xf36b, 0xf375, 0xc3f5, 0xf367, 0xf36e, 0xf4f3, 0xf542, 0xf4f5,
-  0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe,
-  0xf4f4, 0xc4c2, 0xf544, 0xf4f6, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541,
-  0xf4f2, 0xf4f7, 0xf4eb, 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec,
-  0xf4ee, 0xf4f8, 0xc4c1, 0xf4f1, 0xf4ea, 0xf4f0, 0xf661, 0xf666,
-  0xc54f, 0xf668, 0xc549, 0xf664, 0xf66a, 0xc54e, 0xc54a, 0xc54b,
-  0xf660, 0xf667, 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662,
-  0xf65e, 0xf669, 0xc5b1, 0xf76d, 0xf770, 0xf76c, 0xf76e, 0xf76f,
-  0xf769, 0xf76a, 0xf767, 0xf76b, 0xf768, 0xc5b2, 0xc5b3, 0xf84b,
-  0xf84d, 0xf84c, 0xf84e, 0xc5e0, 0xf84a, 0xc5df, 0xc5e1, 0xf8cb,
-  0xf8cc, 0xc644, 0xf8ca, 0xf953, 0xf952, 0xf954, 0xc65f, 0xf955,
-  0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, 0xf973, 0xc672,
-  0xc670, 0xc671, 0xc677, 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0xaaf8,
-  0xd844, 0xdc78, 0xe8a5, 0xf376, 0xaaf9, 0xadac, 0xb07b, 0xd845,
-  0xd846, 0xb3ac, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, 0xdc7b,
-  0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0xb968, 0xe0d0, 0xe0ce, 0xe0cf,
-  0xe0cd, 0xbbd2, 0xbbd5, 0xbbd7, 0xbbd6, 0xbbd3, 0xbbd4, 0xe8a7,
-  0xe8a6, 0xbe5b, 0xe8a8, 0xe8a9, 0xbe5c, 0xec4d, 0xec4b, 0xeef3,
-  0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, 0xeeef,
-  0xeef1, 0xeef2, 0xc1f3, 0xeeee, 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0,
-  0xc1f1, 0xec47, 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6,
-  0xc2f4, 0xf377, 0xf378, 0xc3f6, 0xf545, 0xf547, 0xf546, 0xc4c4,
-  0xc550, 0xf66d, 0xf66c, 0xf66b, 0xaafa, 0xc9aa, 0xca58, 0xa6e9,
-  0xca56, 0xca59, 0xca57, 0xcbae, 0xa8c1, 0xa8c2, 0xcbb0, 0xa8bf,
-  0xcbaf, 0xcbad, 0xa8c0, 0xa8be, 0xcdd8, 0xcddb, 0xaafd, 0xcdda,
-  0xcdd9, 0xaafc, 0xaafb, 0xab40, 0xcddc, 0xaafe, 0xd0c6, 0xadae,
-  0xadaf, 0xadb0, 0xd0c7, 0xd0c3, 0xadad, 0xd0c4, 0xd0c5, 0xd0c2,
-  0xb0a4, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, 0xb07e, 0xb07c,
-  0xb07d, 0xb0a3, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0xd84b, 0xb3b1,
-  0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, 0xb3b0,
-  0xd847, 0xb6a7, 0xdc7d, 0xdca3, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9,
-  0xdc7c, 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0xb6aa, 0xb6a5, 0xe0d3,
-  0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0xe0d4, 0xb969, 0xbbd8, 0xbbda,
-  0xbbd9, 0xe4bb, 0xe4bc, 0xe8ab, 0xe8aa, 0xc047, 0xc048, 0xec4f,
-  0xc049, 0xeef6, 0xeef4, 0xeef5, 0xc1f4, 0xf16f, 0xc3f7, 0xc1f5,
-  0xab41, 0xb0a6, 0xd447, 0xd84c, 0xb3b6, 0xb6ad, 0xdca4, 0xdca6,
-  0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, 0xdca5, 0xb96e, 0xb96f, 0xb96d,
-  0xbbdb, 0xb96c, 0xe0d5, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6,
-  0xf170, 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb,
-  0xf173, 0xf379, 0xc2f7, 0xc3f8, 0xf8cd, 0xab42, 0xb3b8, 0xb3b7,
-  0xb6b2, 0xdca8, 0xdca7, 0xb6b3, 0xe0d9, 0xb973, 0xb970, 0xe0d8,
-  0xb972, 0xe0d6, 0xb971, 0xe0d7, 0xe4bd, 0xbbdd, 0xe8af, 0xbe5d,
-  0xe8ad, 0xbe5e, 0xbe5f, 0xe8ae, 0xbe60, 0xec51, 0xc04e, 0xc04b,
-  0xc050, 0xec53, 0xc04c, 0xec52, 0xc04f, 0xc04d, 0xeef9, 0xeefb,
-  0xc1f7, 0xeefa, 0xc1f8, 0xeef8, 0xeef7, 0xf177, 0xf176, 0xc2fc,
-  0xf178, 0xf37e, 0xc3fa, 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c,
-  0xf548, 0xf549, 0xc4c5, 0xc553, 0xf66e, 0xc551, 0xc552, 0xf66f,
-  0xc5b4, 0xc5b5, 0xf771, 0xc645, 0xf8cf, 0xc647, 0xf8ce, 0xf8d0,
-  0xc646, 0xf957, 0xf9ad, 0xab43, 0xb974, 0xe4be, 0xe8b0, 0xc051,
-  0xc052, 0xab44, 0xbe61, 0xc3fb, 0xadb1, 0xc053, 0xc5e2, 0xadb2,
-  0xd84d, 0xdca9, 0xdcab, 0xdcaa, 0xe0dd, 0xe0da, 0xb975, 0xb976,
-  0xe0db, 0xe0dc, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8,
-  0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0xe8b3, 0xe8b1,
-  0xbe63, 0xbe62, 0xe8b2, 0xbe64, 0xec56, 0xec55, 0xc054, 0xec54,
-  0xeefc, 0xeefe, 0xef41, 0xef40, 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd,
-  0xf17d, 0xf1a2, 0xc2fe, 0xf17b, 0xf17e, 0xf17c, 0xf179, 0xc340,
-  0xf17a, 0xf3a1, 0xf3a3, 0xf3a2, 0xf54a, 0xf54b, 0xf670, 0xc5b7,
-  0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, 0xc669, 0xadb3, 0xb6b4,
-  0xe4ca, 0xe4c9, 0xe8b5, 0xe8b4, 0xc1fa, 0xef43, 0xef42, 0xf1a5,
-  0xf1a3, 0xf1a6, 0xf1a4, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, 0xf671,
-  0xf772, 0xf8d2, 0xadb4, 0xec57, 0xef44, 0xadb5, 0xbbe0, 0xec58,
-  0xc341, 0xf1a7, 0xc3fd, 0xf54c, 0xf54d, 0xc554, 0xf851, 0xadb6,
-  0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, 0xb6b7, 0xb97a,
-  0xb97c, 0xe0df, 0xe0e0, 0xe0de, 0xb977, 0xb978, 0xb97b, 0xb979,
-  0xe4cb, 0xbbe1, 0xbbe2, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0xe8bb,
-  0xbe65, 0xc05b, 0xe8b8, 0xe8bd, 0xe8ba, 0xe8b9, 0xbe66, 0xc059,
-  0xec5a, 0xc055, 0xec5b, 0xec59, 0xc058, 0xc056, 0xc05a, 0xc057,
-  0xef45, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0xedd4, 0xef48, 0xef47,
-  0xc344, 0xc342, 0xc345, 0xc343, 0xf1a8, 0xf1a9, 0xf1aa, 0xc346,
-  0xf3aa, 0xc440, 0xf3a8, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551,
-  0xf54e, 0xf54f, 0xf550, 0xf672, 0xc556, 0xc555, 0xf774, 0xf773,
-  0xc5b8, 0xc5e3, 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0xadb7,
-  0xdcad, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, 0xbbe4, 0xe8be, 0xbe68,
-  0xc1fc, 0xf1ab, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab,
-  0xf675, 0xf552, 0xf553, 0xc4c6, 0xf674, 0xf673, 0xf775, 0xf9b0,
-  0xadb8, 0xadb9, 0xb0a7, 0xd448, 0xd84f, 0xb6b8, 0xb6bb, 0xb6b9,
-  0xdcae, 0xb6bd, 0xb6ba, 0xb6bc, 0xb97e, 0xe0e2, 0xe0e3, 0xe8c0,
-  0xb97d, 0xb9a1, 0xb9a2, 0xe4cf, 0xe4ce, 0xbbe5, 0xbbe6, 0xe4d0,
-  0xe8bf, 0xbbe8, 0xbe69, 0xbbe7, 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a,
-  0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, 0xbe6c, 0xc061, 0xc05f, 0xc05e,
-  0xec5d, 0xc060, 0xec5c, 0xef4b, 0xec5e, 0xc05d, 0xec5f, 0xef4e,
-  0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, 0xef54, 0xef53, 0xef50,
-  0xef4f, 0xc1fd, 0xf1ae, 0xf1ad, 0xc34a, 0xc348, 0xc349, 0xf1ac,
-  0xf3b1, 0xc443, 0xf3b0, 0xf3af, 0xc444, 0xf558, 0xf557, 0xf555,
-  0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557,
-  0xf676, 0xf556, 0xf777, 0xc5e4, 0xc661, 0xf959, 0xf9b1, 0xadba,
-  0xd850, 0xef55, 0xadbb, 0xe4d2, 0xe4d1, 0xec60, 0xef57, 0xef56,
-  0xc34c, 0xf3b2, 0xf3b3, 0xc4c9, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be,
-  0xe0e4, 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0xe4d4,
-  0xe4d6, 0xe4d5, 0xe4d8, 0xbbe9, 0xe4d7, 0xe4d3, 0xe4d9, 0xe8cc,
-  0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, 0xbe6e, 0xbe71, 0xbe73,
-  0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, 0xe8ce, 0xbe74, 0xbe70,
-  0xe8c6, 0xbe6d, 0xbe6f, 0xc063, 0xec66, 0xec64, 0xec63, 0xec69,
-  0xec68, 0xec67, 0xec62, 0xc062, 0xec61, 0xec65, 0xc064, 0xef5a,
-  0xef5e, 0xef5b, 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60,
-  0xef61, 0xc240, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8,
-  0xf1b7, 0xf1b1, 0xf1b5, 0xf1b0, 0xf1b2, 0xc34d, 0xf1af, 0xf1b4,
-  0xf3c0, 0xf3b5, 0xc445, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7,
-  0xf3be, 0xf3bb, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0xf3bc, 0xf560,
-  0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0xc4cb, 0xf55c, 0xf55a,
-  0xf55b, 0xc4cd, 0xf55f, 0xc4cc, 0xf562, 0xf678, 0xf67e, 0xf679,
-  0xc55b, 0xf6a1, 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558,
-  0xf67a, 0xf77d, 0xf7a1, 0xf77e, 0xf77b, 0xc5bb, 0xf778, 0xf77c,
-  0xf7a3, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, 0xf853,
-  0xc5e5, 0xc5e6, 0xf8d3, 0xc64a, 0xf976, 0xc66a, 0xf9b3, 0xc66b,
-  0xf9b4, 0xf9b5, 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0xb0a9, 0xe0e9,
-  0xe0e8, 0xbbea, 0xbbeb, 0xe4da, 0xe8d2, 0xec6c, 0xbe75, 0xc065,
-  0xec6a, 0xec6d, 0xc066, 0xef64, 0xec6b, 0xf1b9, 0xc34e, 0xf3c1,
-  0xf566, 0xf564, 0xf565, 0xf6a2, 0xc55c, 0xf7a4, 0xc5ea, 0xc5bc,
-  0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0xb0aa, 0xf1ba, 0xd449, 0xb9a6,
-  0xe4db, 0xbbec, 0xe4dc, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77,
-  0xe8d7, 0xe8d6, 0xe8d5, 0xec6e, 0xec71, 0xec70, 0xec6f, 0xc067,
-  0xef68, 0xef66, 0xef65, 0xef67, 0xc34f, 0xf1bc, 0xf1bd, 0xc350,
-  0xf1bb, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0xf567, 0xf569,
-  0xf568, 0xf6a3, 0xf6a6, 0xf6a4, 0xf6a5, 0xf7a5, 0xc5bd, 0xf854,
-  0xf855, 0xf856, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0xbe78, 0xc069,
-  0xf1be, 0xf7a6, 0xf9c4, 0xd44a, 0xc67b, 0xb0ac, 0xec72, 0xf1bf,
-  0xf3c6, 0xf6a7, 0xf7a7, 0xb0ad, 0xe4dd, 0xe4de, 0xbbed, 0xbbee,
-  0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0xef69, 0xf1c0, 0xf1c2, 0xf1c1,
-  0xc353, 0xc352, 0xc351, 0xc55e, 0xf6a8, 0xc55d, 0xf7a9, 0xf7a8,
-  0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0xe4e1, 0xe4df, 0xe4e0, 0xe8e2,
-  0xe8dd, 0xe8da, 0xe8e1, 0xe8e3, 0xbe7c, 0xe8e0, 0xe8dc, 0xe8db,
-  0xe8df, 0xe8de, 0xbe7b, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77,
-  0xec73, 0xec79, 0xec74, 0xef72, 0xec75, 0xeca2, 0xec7c, 0xc06a,
-  0xec7b, 0xec7a, 0xec7e, 0xef6a, 0xef6d, 0xef6c, 0xef74, 0xef6f,
-  0xef73, 0xef71, 0xef70, 0xef6e, 0xef6b, 0xc243, 0xc242, 0xc244,
-  0xc241, 0xef75, 0xf1c8, 0xf1cb, 0xf1c9, 0xf1cd, 0xf1ce, 0xf1c6,
-  0xc358, 0xf1c7, 0xf1c5, 0xf1cc, 0xf1c4, 0xf1c3, 0xc357, 0xc355,
-  0xc354, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, 0xf3d3, 0xf3d7,
-  0xc44b, 0xf3d2, 0xf3ca, 0xf3c9, 0xf3d6, 0xf3cd, 0xf3cb, 0xf3d4,
-  0xf3cc, 0xc449, 0xc448, 0xf3c7, 0xf3c8, 0xf3d1, 0xf3ce, 0xf56c,
-  0xf56f, 0xc356, 0xf56d, 0xf573, 0xf571, 0xf56b, 0xf576, 0xf56a,
-  0xc4cf, 0xf572, 0xf56e, 0xc4ce, 0xf575, 0xf574, 0xf6ab, 0xf6aa,
-  0xf6b1, 0xf6ad, 0xf6b0, 0xc560, 0xf6ae, 0xf6af, 0xf6a9, 0xf6ac,
-  0xc55f, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0xf7b6, 0xf7b2, 0xf7ae,
-  0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, 0xf570, 0xf7b0, 0xf7ad,
-  0xf7aa, 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860,
-  0xf859, 0xf857, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, 0xf858, 0xf85e,
-  0xf8da, 0xc64d, 0xf8db, 0xf8d9, 0xf8d6, 0xf8d8, 0xf8d7, 0xf95a,
-  0xf95c, 0xf95b, 0xf979, 0xf978, 0xf977, 0xf97a, 0xc673, 0xc674,
-  0xf9ca, 0xf9ce, 0xb3be, 0xdcaf, 0xe0ed, 0xb9a7, 0xe0eb, 0xe0ec,
-  0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, 0xe8eb,
-  0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0xe8e7, 0xe8ea, 0xbea1, 0xe8ef,
-  0xe8ee, 0xbe7d, 0xe8e9, 0xe8ed, 0xbe7e, 0xecac, 0xc06f, 0xeca7,
-  0xc06b, 0xeca4, 0xecaa, 0xecad, 0xc070, 0xeca9, 0xeca6, 0xecae,
-  0xeca5, 0xecab, 0xc06c, 0xeca3, 0xc06d, 0xc06e, 0xeca8, 0xefa9,
-  0xef7a, 0xef7b, 0xef7e, 0xef7c, 0xef76, 0xef79, 0xefa5, 0xef7d,
-  0xc245, 0xefa7, 0xefa4, 0xc246, 0xefa6, 0xef77, 0xefa2, 0xefa3,
-  0xefa1, 0xf1d2, 0xf1d4, 0xf1d7, 0xf1d1, 0xc359, 0xf1d9, 0xf1d0,
-  0xf1da, 0xf1d6, 0xf1d8, 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf,
-  0xc35a, 0xf1db, 0xc35b, 0xc44d, 0xef78, 0xf3f1, 0xf3e8, 0xc44f,
-  0xf3e4, 0xc450, 0xf3ed, 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5,
-  0xf3e6, 0xf3d8, 0xf3df, 0xf3ee, 0xf3eb, 0xf3e3, 0xf3ef, 0xf3de,
-  0xf3d9, 0xf3ec, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, 0xf3dc, 0xc44c,
-  0xf3da, 0xf3e1, 0xf3e2, 0xf57d, 0xf57b, 0xf5a2, 0xf5ae, 0xf5a5,
-  0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577,
-  0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0xf5af, 0xf5b0, 0xf5a9,
-  0xf5ad, 0xf5a4, 0xf6c1, 0xf6c4, 0xc561, 0xf6c3, 0xf6c8, 0xf6c6,
-  0xc562, 0xf6bd, 0xf6b3, 0xf6b2, 0xc564, 0xf6bf, 0xf6c0, 0xf6bc,
-  0xf6b4, 0xf6b9, 0xf5ac, 0xf6b5, 0xc563, 0xf6bb, 0xf6ba, 0xf6b6,
-  0xf6c2, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, 0xf7bc,
-  0xf7be, 0xf7b8, 0xc5c2, 0xf7c5, 0xf7c3, 0xc5c3, 0xf7c2, 0xf7c1,
-  0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, 0xf869, 0xf86e,
-  0xf864, 0xf867, 0xc5ee, 0xf86b, 0xf872, 0xf7c0, 0xf865, 0xf86f,
-  0xf873, 0xf86a, 0xf863, 0xf86d, 0xf86c, 0xf871, 0xf870, 0xf7c4,
-  0xf868, 0xf862, 0xf866, 0xc64e, 0xc64f, 0xf861, 0xf8e6, 0xf8dd,
-  0xf8e5, 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0,
-  0xf8de, 0xf8e4, 0xf95d, 0xf95e, 0xf960, 0xf95f, 0xf962, 0xf961,
-  0xf97c, 0xf97b, 0xf9b7, 0xf9b8, 0xf9c5, 0xc678, 0xc67c, 0xf9cf,
-  0xc67d, 0xb3bf, 0xc4d0, 0xf6c9, 0xc650, 0xc651, 0xb3c0, 0xe0ee,
-  0xb9a8, 0xe8f0, 0xecb0, 0xecb1, 0xecaf, 0xefab, 0xefaa, 0xc247,
-  0xf1df, 0xefac, 0xf1de, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0xc452,
-  0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0xc5ef, 0xf8e8, 0xf963,
-  0xf9d2, 0xb3c1, 0xe4e5, 0xbea2, 0xecb3, 0xecb2, 0xefad, 0xc454,
-  0xc4d1, 0xf7c7, 0xf9cb, 0xb3c2, 0xbbf2, 0xbea3, 0xf3f4, 0xf874,
-  0xb6c0, 0xefae, 0xc664, 0xb6c1, 0xbea4, 0xc248, 0xf875, 0xb6c2,
-  0xe8f1, 0xc072, 0xecb4, 0xecb5, 0xc071, 0xefaf, 0xc24c, 0xc24a,
-  0xc24b, 0xc249, 0xf1e0, 0xc35c, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6,
-  0xc4d2, 0xf6cb, 0xf6cd, 0xf6cc, 0xc566, 0xf7c8, 0xf876, 0xf877,
-  0xc5f0, 0xf964, 0xf97d, 0xc675, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5,
-  0xe0ef, 0xefb1, 0xf1e2, 0xf1e1, 0xf878, 0xc652, 0xf965, 0xf97e,
-  0xb9a9, 0xe8f2, 0xe8f3, 0xecb7, 0xb9aa, 0xc35d, 0xf1e3, 0xf6cf,
-  0xc567, 0xf6d0, 0xf6ce, 0xf879, 0xf8e9, 0xb9ab, 0xefb4, 0xefb3,
-  0xefb2, 0xf1e4, 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6,
-  0xf5b9, 0xc4d3, 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9,
-  0xf87c, 0xf87b, 0xf87a, 0xbbf3, 0xecb8, 0xc24d, 0xf3f7, 0xf3f8,
-  0xf7cc, 0xf87d, 0xf8ea, 0xf966, 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e,
-  0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, 0xbea6, 0xefb5, 0xf1ea, 0xf3fa,
-  0xf3fb, 0xf3fc, 0xf5be, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4,
-  0xf5bb, 0xc4d6, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, 0xc5c6,
-  0xf7cd, 0xc5c5, 0xf8a3, 0xf8a4, 0xf8a2, 0xf8a1, 0xc654, 0xf8eb,
-  0xf8ec, 0xf8ed, 0xc653, 0xf967, 0xf96a, 0xf969, 0xf968, 0xf9d3,
-  0xc073, 0xc365, 0xf5bf, 0xf6d5, 0xc5c7, 0xf7ce, 0xf9d5, 0xc074,
-  0xefb6, 0xf7cf, 0xf9a1, 0xc94a, 0xddfc, 0xa14a, 0xa157, 0xa159,
-  0xa15b, 0xa15f, 0xa160, 0xa163, 0xa164, 0xa167, 0xa168, 0xa16b,
-  0xa16c, 0xa16f, 0xa170, 0xa173, 0xa174, 0xa177, 0xa178, 0xa17b,
-  0xa17c, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c,
-  0xa14d, 0xa14f, 0xa151, 0xa152, 0xa153, 0xa154, 0xa17d, 0xa17e,
-  0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1de,
-  0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0xa24c, 0xa24d, 0xa24e, 0xa149,
-  0xa1ad, 0xa243, 0xa248, 0xa1ae, 0xa15d, 0xa15e, 0xa1af, 0xa1cf,
-  0xa141, 0xa1d0, 0xa144, 0xa241, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2,
-  0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa147, 0xa146,
-  0xa1d5, 0xa1d7, 0xa1d6, 0xa148, 0xa249, 0xa2cf, 0xa2d0, 0xa2d1,
-  0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9,
-  0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, 0xa2e1,
-  0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa242,
-  0xa1c4, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef,
-  0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7,
-  0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340,
-  0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa14e,
-};
-
-static const Summary16 big5_uni2indx_page00[16] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x00ac }, {    4, 0x0083 },
-  {    7, 0x0000 }, {    7, 0x0080 }, {    8, 0x0000 }, {    8, 0x0080 },
-};
-static const Summary16 big5_uni2indx_page02[38] = {
-  /* 0x0200 */
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 }, {    9, 0x0000 },
-  {    9, 0x0e80 }, {   13, 0x0200 }, {   14, 0x0000 }, {   14, 0x0000 },
-  /* 0x0300 */
-  {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 },
-  {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 }, {   14, 0x0000 },
-  {   14, 0x0000 }, {   14, 0xfffe }, {   29, 0x03fb }, {   38, 0xfffe },
-  {   53, 0x03fb }, {   62, 0x0000 }, {   62, 0x0000 }, {   62, 0x0000 },
-  /* 0x0400 */
-  {   62, 0x0002 }, {   63, 0x1ff0 }, {   72, 0xfff8 }, {   85, 0xffff },
-  {  101, 0xffff }, {  117, 0x0002 },
-};
-static const Summary16 big5_uni2indx_page20[44] = {
-  /* 0x2000 */
-  {  118, 0x0000 }, {  118, 0x3318 }, {  124, 0x0064 }, {  127, 0x4824 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 }, {  131, 0x0000 },
-  /* 0x2100 */
-  {  131, 0x0228 }, {  134, 0x0000 }, {  134, 0x0000 }, {  134, 0x0000 },
-  {  134, 0x0000 }, {  134, 0x0000 }, {  134, 0x03ff }, {  144, 0x0000 },
-  {  144, 0x0000 }, {  144, 0x03cf }, {  152, 0x0000 }, {  152, 0x0000 },
-  {  152, 0x0000 }, {  152, 0x0000 }, {  152, 0x0000 }, {  152, 0x0000 },
-  /* 0x2200 */
-  {  152, 0x0000 }, {  152, 0xc400 }, {  155, 0x4e29 }, {  162, 0x1030 },
-  {  165, 0x0000 }, {  165, 0x0004 }, {  166, 0x00c3 }, {  170, 0x0000 },
-  {  170, 0x0000 }, {  170, 0x0000 }, {  170, 0x0020 }, {  171, 0x8000 },
-};
-static const Summary16 big5_uni2indx_page24[37] = {
-  /* 0x2400 */
-  {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x0000 },
-  {  172, 0x0000 }, {  172, 0x0000 }, {  172, 0x03ff }, {  182, 0x3ff0 },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  /* 0x2500 */
-  {  192, 0x1005 }, {  195, 0x1111 }, {  199, 0x1010 }, {  201, 0x1010 },
-  {  203, 0x0000 }, {  203, 0x4001 }, {  205, 0xe402 }, {  210, 0x000f },
-  {  214, 0xfffe }, {  229, 0x0030 }, {  231, 0x0003 }, {  233, 0x300c },
-  {  237, 0xc8c0 }, {  242, 0x0000 }, {  242, 0x003c }, {  246, 0x0000 },
-  /* 0x2600 */
-  {  246, 0x0260 }, {  249, 0x0000 }, {  249, 0x0000 }, {  249, 0x0000 },
-  {  249, 0x0007 },
-};
-static const Summary16 big5_uni2indx_page30[62] = {
-  /* 0x3000 */
-  {  252, 0xff2f }, {  265, 0x6037 }, {  272, 0x03fe }, {  281, 0x0000 },
-  {  281, 0xfffe }, {  296, 0xffff }, {  312, 0xffff }, {  328, 0xffff },
-  {  344, 0xffff }, {  360, 0x600f }, {  366, 0xfffe }, {  381, 0xffff },
-  {  397, 0xffff }, {  413, 0xffff }, {  429, 0xffff }, {  445, 0x407f },
-  /* 0x3100 */
-  {  453, 0xffe0 }, {  464, 0xffff }, {  480, 0x03ff }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  /* 0x3200 */
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0000 },
-  {  490, 0x0000 }, {  490, 0x0000 }, {  490, 0x0008 }, {  491, 0x0000 },
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  /* 0x3300 */
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 }, {  491, 0x0000 },
-  {  491, 0xc000 }, {  493, 0x7000 }, {  496, 0x0002 }, {  497, 0x0000 },
-  {  497, 0x4010 }, {  499, 0x0026 },
-};
-static const Summary16 big5_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  502, 0xff8b }, {  514, 0xc373 }, {  523, 0x6840 }, {  527, 0x1b0f },
-  {  535, 0xe9ac }, {  544, 0xf34c }, {  553, 0x0200 }, {  554, 0xc008 },
-  {  557, 0x795c }, {  566, 0xca3e }, {  575, 0x7976 }, {  585, 0x0648 },
-  {  589, 0x2fdf }, {  601, 0xf7f0 }, {  612, 0x033a }, {  618, 0xa8ff },
-  /* 0x4f00 */
-  {  629, 0xef37 }, {  641, 0x233f }, {  650, 0xb004 }, {  654, 0xfd59 },
-  {  665, 0xf3ca }, {  675, 0xffff }, {  691, 0xde9f }, {  703, 0xfff9 },
-  {  717, 0xabff }, {  730, 0x7df7 }, {  743, 0xc000 }, {  745, 0x8eec },
-  {  754, 0xeebf }, {  767, 0xffdb }, {  781, 0xd003 }, {  786, 0x45fa },
-  /* 0x5000 */
-  {  795, 0xfae1 }, {  805, 0xdffe }, {  819, 0xbfef }, {  833, 0x10ab },
-  {  839, 0xffeb }, {  853, 0xfcaa }, {  863, 0xef3f }, {  876, 0x24fd },
-  {  885, 0x78ad }, {  894, 0x7f76 }, {  906, 0xf00c }, {  912, 0xedff },
-  {  926, 0xcff6 }, {  938, 0x2cfa }, {  947, 0xf7f9 }, {  960, 0xeb6b },
-  /* 0x5100 */
-  {  971, 0x1ffd }, {  983, 0x95bf }, {  994, 0x6677 }, { 1004, 0xbfbf },
-  { 1018, 0x3bfb }, { 1030, 0xfeb4 }, { 1041, 0x7bae }, { 1052, 0x11e2 },
-  { 1058, 0xa681 }, { 1064, 0x41be }, { 1072, 0x1435 }, { 1078, 0x72c3 },
-  { 1086, 0x7d70 }, { 1095, 0x7191 }, { 1102, 0x0003 }, { 1104, 0x276b },
-  /* 0x5200 */
-  { 1113, 0x57cb }, { 1123, 0x70cf }, { 1132, 0x4732 }, { 1139, 0x0def },
-  { 1149, 0x7eda }, { 1160, 0xfc74 }, { 1170, 0xfe06 }, { 1179, 0xbdb4 },
-  { 1189, 0x3f9f }, { 1201, 0x8bca }, { 1209, 0x7e49 }, { 1218, 0x5800 },
-  { 1221, 0x228f }, { 1228, 0xebec }, { 1239, 0x8a5c }, { 1246, 0xddbb },
-  /* 0x5300 */
-  { 1258, 0xef60 }, { 1267, 0xb6e7 }, { 1278, 0xa40f }, { 1285, 0xf293 },
-  { 1294, 0x37bb }, { 1305, 0x549e }, { 1313, 0xd04b }, { 1320, 0x9baf },
-  { 1331, 0xc414 }, { 1336, 0xf7d4 }, { 1347, 0x30b0 }, { 1352, 0x0a14 },
-  { 1356, 0x2f08 }, { 1362, 0x88d0 }, { 1367, 0xff7e }, { 1381, 0x192f },
-  /* 0x5400 */
-  { 1389, 0xffda }, { 1402, 0xfb07 }, { 1412, 0x7ff1 }, { 1424, 0x7beb },
-  { 1436, 0xc5ef }, { 1447, 0x0010 }, { 1448, 0x99ff }, { 1460, 0xfdff },
-  { 1475, 0x79d7 }, { 1486, 0x0567 }, { 1493, 0xffe7 }, { 1507, 0xfdcb },
-  { 1519, 0xc3ff }, { 1531, 0x4040 }, { 1533, 0x6ff7 }, { 1546, 0xbd8e },
-  /* 0x5500 */
-  { 1556, 0xdffa }, { 1569, 0x0497 }, { 1575, 0xf4c0 }, { 1582, 0x5bff },
-  { 1595, 0xed7b }, { 1607, 0xd0e7 }, { 1616, 0x047e }, { 1623, 0xf8e0 },
-  { 1631, 0xff9f }, { 1645, 0xb73e }, { 1656, 0x7dfe }, { 1669, 0x882e },
-  { 1675, 0xfffd }, { 1690, 0xbe7f }, { 1703, 0x83fe }, { 1713, 0xf6c4 },
-  /* 0x5600 */
-  { 1722, 0xf357 }, { 1733, 0xb8fd }, { 1744, 0xd680 }, { 1750, 0xef7d },
-  { 1763, 0x5767 }, { 1773, 0x4788 }, { 1779, 0xff7d }, { 1793, 0xc3df },
-  { 1804, 0xf0ff }, { 1816, 0x37a9 }, { 1825, 0x7de0 }, { 1834, 0x70fc },
-  { 1843, 0x3f6f }, { 1855, 0xec9a }, { 1864, 0x4cb3 }, { 1872, 0x8681 },
-  /* 0x5700 */
-  { 1877, 0x3f9e }, { 1888, 0xdd5c }, { 1898, 0xf70d }, { 1908, 0x4819 },
-  { 1913, 0xfea3 }, { 1924, 0x0007 }, { 1927, 0xaf56 }, { 1937, 0x38ff },
-  { 1948, 0x980d }, { 1954, 0xefb8 }, { 1965, 0x403d }, { 1971, 0xb760 },
-  { 1979, 0xd8ce }, { 1988, 0x9035 }, { 1994, 0x72bf }, { 2005, 0x3fff },
-  /* 0x5800 */
-  { 2019, 0x7ff7 }, { 2033, 0x7a11 }, { 2040, 0xf7bb }, { 2053, 0xabff },
-  { 2066, 0xff00 }, { 2074, 0x6fbe }, { 2086, 0xa93c }, { 2094, 0xfe72 },
-  { 2105, 0xcfef }, { 2118, 0xf11b }, { 2127, 0xdb6b }, { 2138, 0xf40a },
-  { 2145, 0xc3e6 }, { 2154, 0xef7e }, { 2167, 0x9b9c }, { 2176, 0xf610 },
-  /* 0x5900 */
-  { 2183, 0xf048 }, { 2189, 0x16f4 }, { 2197, 0xfeb5 }, { 2209, 0x5182 },
-  { 2214, 0xc7b1 }, { 2223, 0x15bb }, { 2232, 0x6e87 }, { 2241, 0xfbdf },
-  { 2255, 0xe43f }, { 2265, 0x63cd }, { 2274, 0xc1ff }, { 2285, 0x7e7e },
-  { 2297, 0xfdeb }, { 2310, 0x7d5f }, { 2322, 0x777b }, { 2334, 0xfcfe },
-  /* 0x5a00 */
-  { 2347, 0x960b }, { 2354, 0xdbea }, { 2365, 0x6229 }, { 2371, 0x53e8 },
-  { 2379, 0x37df }, { 2391, 0xfdef }, { 2405, 0x36f5 }, { 2415, 0xbd81 },
-  { 2423, 0xdc18 }, { 2430, 0xfcbd }, { 2442, 0xd2e4 }, { 2450, 0xffff },
-  { 2466, 0x3fd7 }, { 2478, 0xffe0 }, { 2489, 0x7f6f }, { 2502, 0xabf8 },
-  /* 0x5b00 */
-  { 2512, 0x9bae }, { 2522, 0x6ed9 }, { 2532, 0xf5fb }, { 2545, 0xf115 },
-  { 2553, 0x79a9 }, { 2562, 0xbdfb }, { 2575, 0x5a3c }, { 2583, 0xadaf },
-  { 2594, 0xdbba }, { 2605, 0x1fac }, { 2614, 0x71fc }, { 2624, 0x8379 },
-  { 2632, 0x7cf7 }, { 2644, 0xc35f }, { 2654, 0xdfff }, { 2669, 0x0567 },
-  /* 0x5c00 */
-  { 2676, 0xff9a }, { 2688, 0x8467 }, { 2695, 0x1534 }, { 2701, 0xdf8b },
-  { 2712, 0xf9f3 }, { 2724, 0x3373 }, { 2733, 0xf7bd }, { 2746, 0x5e1a },
-  { 2754, 0xbf40 }, { 2762, 0xa03f }, { 2770, 0xffff }, { 2786, 0x01eb },
-  { 2793, 0xdfc0 }, { 2802, 0xcfdd }, { 2814, 0x7500 }, { 2819, 0xabd3 },
-  /* 0x5d00 */
-  { 2829, 0xf8c3 }, { 2838, 0xeed6 }, { 2849, 0x43fd }, { 2859, 0xb7ff },
-  { 2873, 0x5eaf }, { 2884, 0x4227 }, { 2890, 0x9bac }, { 2899, 0xf686 },
-  { 2908, 0x27d7 }, { 2918, 0xf6bc }, { 2929, 0xf787 }, { 2940, 0x35b7 },
-  { 2950, 0xaacd }, { 2959, 0xe176 }, { 2968, 0x49e7 }, { 2977, 0xe29f },
-  /* 0x5e00 */
-  { 2987, 0x545c }, { 2994, 0xaff2 }, { 3005, 0x2b3f }, { 3015, 0x61d8 },
-  { 3022, 0xfc3b }, { 3033, 0xbbb8 }, { 3043, 0xffcf }, { 3057, 0x7b7d },
-  { 3069, 0xbf95 }, { 3080, 0x1ce0 }, { 3086, 0x7dfd }, { 3099, 0x43ff },
-  { 3110, 0x5ff6 }, { 3122, 0xfffe }, { 3137, 0xd3ef }, { 3149, 0xc4ce },
-  /* 0x5f00 */
-  { 3157, 0x8db6 }, { 3166, 0xadbc }, { 3176, 0x63dc }, { 3185, 0x11eb },
-  { 3193, 0xdf59 }, { 3204, 0x23d0 }, { 3210, 0xbeb4 }, { 3220, 0xf3db },
-  { 3232, 0x1fe7 }, { 3243, 0xdbc7 }, { 3254, 0xff63 }, { 3266, 0xfae4 },
-  { 3276, 0xb22b }, { 3284, 0x63f7 }, { 3295, 0xed3b }, { 3306, 0xadba },
-  /* 0x6000 */
-  { 3316, 0xfe01 }, { 3324, 0x7eff }, { 3338, 0xfff7 }, { 3353, 0x02bc },
-  { 3359, 0x32ff }, { 3370, 0xef39 }, { 3381, 0xfffc }, { 3395, 0x8005 },
-  { 3398, 0x77fb }, { 3411, 0xbcf5 }, { 3422, 0x010d }, { 3426, 0xfff7 },
-  { 3441, 0xfffb }, { 3456, 0xbf3a }, { 3467, 0x0057 }, { 3472, 0xdfff },
-  /* 0x6100 */
-  { 3487, 0xef7b }, { 3500, 0xbd7d }, { 3512, 0xdb88 }, { 3520, 0xc8d4 },
-  { 3527, 0xfff3 }, { 3541, 0xed7c }, { 3552, 0x5dee }, { 3563, 0x56ff },
-  { 3575, 0x7e0d }, { 3584, 0xac5f }, { 3594, 0xff96 }, { 3606, 0xd57f },
-  { 3618, 0x3fee }, { 3630, 0xc140 }, { 3634, 0x6ff9 }, { 3646, 0xffe7 },
-  /* 0x6200 */
-  { 3660, 0x779b }, { 3671, 0x8e77 }, { 3681, 0x6ebf }, { 3693, 0xe45d },
-  { 3702, 0x6fcf }, { 3714, 0x5f1f }, { 3725, 0xe07f }, { 3735, 0xfedf },
-  { 3749, 0xd7db }, { 3761, 0x01fe }, { 3769, 0xff00 }, { 3777, 0xfb7b },
-  { 3790, 0xffd4 }, { 3802, 0x1fdf }, { 3814, 0xf800 }, { 3819, 0xffff },
-  /* 0x6300 */
-  { 3835, 0xfb8f }, { 3847, 0x007b }, { 3853, 0xbf00 }, { 3860, 0x7f5c },
-  { 3871, 0xffff }, { 3887, 0x07f3 }, { 3896, 0xeba0 }, { 3904, 0x3de7 },
-  { 3915, 0xf7bf }, { 3929, 0xfbd7 }, { 3942, 0xffbf }, { 3957, 0x6003 },
-  { 3961, 0xfffd }, { 3976, 0xbfed }, { 3989, 0xefbb }, { 4002, 0x027f },
-  /* 0x6400 */
-  { 4010, 0xfe40 }, { 4018, 0xddfd }, { 4031, 0xfdff }, { 4046, 0xe2f9 },
-  { 4056, 0x680b }, { 4062, 0xfb1f }, { 4074, 0xfbe3 }, { 4086, 0xaffd },
-  { 4099, 0x9fa4 }, { 4108, 0xf7ed }, { 4121, 0x7a7d }, { 4132, 0xf80f },
-  { 4141, 0xeebe }, { 4153, 0x0fd5 }, { 4162, 0xbb5d }, { 4173, 0xfd9f },
-  /* 0x6500 */
-  { 4186, 0xf2db }, { 4197, 0x3bf9 }, { 4208, 0xfe7f }, { 4222, 0xebcc },
-  { 4232, 0x876a }, { 4240, 0x73fa }, { 4251, 0x95fc }, { 4261, 0x9ffc },
-  { 4273, 0x109f }, { 4280, 0xfaf7 }, { 4293, 0xddb7 }, { 4305, 0xbbcd },
-  { 4316, 0xf87e }, { 4327, 0xeccd }, { 4337, 0xf366 }, { 4347, 0x3c3f },
-  /* 0x6600 */
-  { 4357, 0xfffd }, { 4372, 0xb03f }, { 4381, 0xe9f7 }, { 4393, 0x067e },
-  { 4401, 0x96ae }, { 4410, 0xfe06 }, { 4419, 0xd576 }, { 4429, 0x5fd7 },
-  { 4441, 0x3fd1 }, { 4451, 0xa3f3 }, { 4461, 0xcf07 }, { 4470, 0x6fb7 },
-  { 4482, 0x9fd1 }, { 4492, 0x7f44 }, { 4501, 0x7b59 }, { 4511, 0xd3dd },
-  /* 0x6700 */
-  { 4522, 0xaf3b }, { 4533, 0xa9bd }, { 4543, 0x7dcf }, { 4555, 0xff3a },
-  { 4567, 0xfbe0 }, { 4577, 0xf6eb }, { 4589, 0xb401 }, { 4594, 0xffff },
-  { 4610, 0x7afa }, { 4621, 0xb7bf }, { 4634, 0xc000 }, { 4636, 0x0ffd },
-  { 4647, 0xff7f }, { 4662, 0xff1f }, { 4675, 0xfefc }, { 4688, 0x95ff },
-  /* 0x6800 */
-  { 4700, 0x0000 }, { 4700, 0xb5dc }, { 4710, 0xef63 }, { 4721, 0x3f3e },
-  { 4732, 0xfb7f }, { 4746, 0x001b }, { 4750, 0xe800 }, { 4754, 0xfbf6 },
-  { 4767, 0x9eef }, { 4779, 0xb8df }, { 4790, 0xff9f }, { 4804, 0x003f },
-  { 4810, 0x7bd0 }, { 4819, 0xf5ff }, { 4833, 0xdfdb }, { 4846, 0x3fff },
-  /* 0x6900 */
-  { 4860, 0xfdf0 }, { 4871, 0x00bf }, { 4878, 0x8420 }, { 4881, 0xbbbd },
-  { 4893, 0xdf37 }, { 4905, 0xffde }, { 4919, 0xff6d }, { 4932, 0x0ff3 },
-  { 4942, 0x604c }, { 4947, 0x5efb }, { 4959, 0xfffb }, { 4974, 0xfafb },
-  { 4987, 0xfe5e }, { 4999, 0x0219 }, { 5003, 0x79f4 }, { 5013, 0xf9de },
-  /* 0x6a00 */
-  { 5025, 0xa7f7 }, { 5037, 0xebfa }, { 5049, 0x01eb }, { 5056, 0xff34 },
-  { 5067, 0xebd3 }, { 5078, 0xef73 }, { 5090, 0xafd7 }, { 5102, 0xc040 },
-  { 5105, 0x72bb }, { 5115, 0xdcff }, { 5128, 0xf17f }, { 5140, 0x2fd8 },
-  { 5149, 0xb8ec }, { 5158, 0xfe0b }, { 5168, 0xdda3 }, { 5178, 0x1f0b },
-  /* 0x6b00 */
-  { 5186, 0x8f1d }, { 5195, 0x47cf }, { 5205, 0xb12b }, { 5213, 0xffde },
-  { 5227, 0x7fee }, { 5240, 0xda73 }, { 5250, 0x24ff }, { 5260, 0xcbc4 },
-  { 5268, 0xf75d }, { 5280, 0xcbf2 }, { 5290, 0xecfd }, { 5302, 0xb4ed },
-  { 5312, 0xbff9 }, { 5325, 0x4ddd }, { 5335, 0x99dd }, { 5345, 0xfb8d },
-  /* 0x6c00 */
-  { 5356, 0xbb7f }, { 5369, 0xaf7b }, { 5381, 0xddfb }, { 5394, 0xc959 },
-  { 5402, 0xfc4f }, { 5413, 0xfab5 }, { 5424, 0xafe3 }, { 5435, 0x6d5f },
-  { 5446, 0xffff }, { 5462, 0x3f7d }, { 5474, 0x7800 }, { 5478, 0xffdb },
-  { 5492, 0xb6ff }, { 5505, 0x7eff }, { 5519, 0xfbaf }, { 5532, 0x022f },
-  /* 0x6d00 */
-  { 5538, 0xff9b }, { 5551, 0xefc7 }, { 5563, 0xffa5 }, { 5575, 0xffff },
-  { 5591, 0x0007 }, { 5594, 0xc700 }, { 5599, 0xf7ff }, { 5614, 0xfff1 },
-  { 5627, 0x7ffd }, { 5641, 0x01bf }, { 5649, 0xdc00 }, { 5654, 0xfdbc },
-  { 5666, 0xbff5 }, { 5679, 0xffff }, { 5695, 0xff7f }, { 5710, 0x3eff },
-  /* 0x6e00 */
-  { 5723, 0x0029 }, { 5726, 0xbe00 }, { 5732, 0xf9ff }, { 5746, 0xff7f },
-  { 5761, 0x6efb }, { 5773, 0xfd7e }, { 5786, 0xcbff }, { 5799, 0x039e },
-  { 5806, 0xe300 }, { 5811, 0xfbdd }, { 5824, 0xccff }, { 5836, 0xf6df },
-  { 5849, 0xffff }, { 5865, 0x117f }, { 5874, 0xf800 }, { 5879, 0xfbf6 },
-  /* 0x6f00 */
-  { 5892, 0xe7ef }, { 5905, 0xd73c }, { 5915, 0xfeef }, { 5929, 0xdfef },
-  { 5943, 0xc00b }, { 5948, 0xedbf }, { 5961, 0xfedf }, { 5975, 0xfdcd },
-  { 5987, 0x7bf5 }, { 5999, 0x40fd }, { 6007, 0xffff }, { 6023, 0xb75f },
-  { 6035, 0xffdf }, { 6050, 0xf930 }, { 6058, 0xfbdf }, { 6072, 0xdc97 },
-  /* 0x7000 */
-  { 6082, 0xfef3 }, { 6095, 0xbff2 }, { 6107, 0x8fdf }, { 6119, 0xdfbf },
-  { 6133, 0x177f }, { 6144, 0xede6 }, { 6155, 0x0f7f }, { 6166, 0x3553 },
-  { 6174, 0x447c }, { 6181, 0x877e }, { 6191, 0xfa12 }, { 6199, 0x45bb },
-  { 6208, 0xede0 }, { 6217, 0x779e }, { 6228, 0x8017 }, { 6233, 0xbfd9 },
-  /* 0x7100 */
-  { 6245, 0x7e55 }, { 6255, 0xde89 }, { 6264, 0xc16f }, { 6273, 0x0447 },
-  { 6278, 0x7ade }, { 6289, 0xf75d }, { 6301, 0x57ff }, { 6314, 0x2905 },
-  { 6319, 0x86f7 }, { 6329, 0xfe95 }, { 6340, 0x97b3 }, { 6350, 0xf32f },
-  { 6361, 0xcfff }, { 6375, 0x9f75 }, { 6386, 0x71f7 }, { 6397, 0xfb17 },
-  /* 0x7200 */
-  { 6408, 0x34ee }, { 6417, 0xee19 }, { 6426, 0x37cc }, { 6435, 0xef61 },
-  { 6445, 0x9fd6 }, { 6456, 0xef4c }, { 6466, 0xd68f }, { 6476, 0xfbdd },
-  { 6489, 0x7b73 }, { 6500, 0x6def }, { 6512, 0xd7fe }, { 6525, 0xa431 },
-  { 6531, 0x5e7f }, { 6543, 0x97d7 }, { 6554, 0x0f5b }, { 6563, 0xffd8 },
-  /* 0x7300 */
-  { 6575, 0x9d83 }, { 6583, 0x7bce }, { 6594, 0x22ec }, { 6601, 0xdcff },
-  { 6614, 0x763d }, { 6624, 0xef87 }, { 6635, 0xdfe7 }, { 6648, 0xfded },
-  { 6661, 0x4fff }, { 6674, 0xa0fc }, { 6682, 0x3b77 }, { 6693, 0xdbfc },
-  { 6705, 0x3ded }, { 6716, 0x7fdc }, { 6728, 0x6fa9 }, { 6738, 0xf570 },
-  /* 0x7400 */
-  { 6747, 0x3ffb }, { 6760, 0x2c40 }, { 6764, 0xff7f }, { 6779, 0x847f },
-  { 6788, 0xec57 }, { 6798, 0xdeb7 }, { 6810, 0xe69c }, { 6819, 0xf22f },
-  { 6829, 0x0feb }, { 6839, 0xd5b5 }, { 6849, 0xafeb }, { 6861, 0xede7 },
-  { 6873, 0x8c2f }, { 6881, 0xfff0 }, { 6893, 0x537f }, { 6904, 0xe8f0 },
-  /* 0x7500 */
-  { 6912, 0xb99d }, { 6922, 0xb5ff }, { 6935, 0xff66 }, { 6947, 0xe78f },
-  { 6958, 0xd981 }, { 6965, 0xbe10 }, { 6972, 0x9c7c }, { 6981, 0xe3c1 },
-  { 6989, 0x9cd1 }, { 6997, 0x2733 }, { 7005, 0x0cbc }, { 7012, 0xff6d },
-  { 7025, 0xfcb7 }, { 7037, 0xefb7 }, { 7050, 0xa0df }, { 7059, 0xffff },
-  /* 0x7600 */
-  { 7075, 0xbf0b }, { 7085, 0xfe7b }, { 7098, 0xa3ff }, { 7110, 0x353f },
-  { 7120, 0x13cc }, { 7127, 0x97cd }, { 7137, 0x7637 }, { 7147, 0xfb27 },
-  { 7158, 0xcfd6 }, { 7169, 0x7e6c }, { 7179, 0xec50 }, { 7186, 0xed31 },
-  { 7195, 0x677c }, { 7205, 0xfc1c }, { 7214, 0xf6fa }, { 7226, 0x5fbf },
-  /* 0x7700 */
-  { 7239, 0x0fba }, { 7248, 0xae2f }, { 7258, 0xa3ad }, { 7267, 0x7ffe },
-  { 7281, 0xfcf0 }, { 7291, 0xde74 }, { 7301, 0xffef }, { 7316, 0xf200 },
-  { 7321, 0xfbbf }, { 7335, 0xfea2 }, { 7345, 0x3daf }, { 7356, 0xbcff },
-  { 7369, 0xf694 }, { 7378, 0x5fb9 }, { 7389, 0xf3ad }, { 7400, 0x3f8f },
-  /* 0x7800 */
-  { 7411, 0xf26c }, { 7420, 0xa01f }, { 7427, 0xffef }, { 7442, 0x01bf },
-  { 7450, 0x7728 }, { 7458, 0x7005 }, { 7463, 0xff35 }, { 7475, 0xda03 },
-  { 7482, 0xd2f9 }, { 7492, 0xc7fa }, { 7503, 0x3fbf }, { 7516, 0x5c1d },
-  { 7524, 0xff3a }, { 7536, 0xec33 }, { 7545, 0xb7af }, { 7557, 0xfe9c },
-  /* 0x7900 */
-  { 7568, 0x5236 }, { 7575, 0x7a9f }, { 7586, 0xbffa }, { 7599, 0xe722 },
-  { 7607, 0x9ff7 }, { 7620, 0xfcff }, { 7634, 0x2fbb }, { 7645, 0xb61d },
-  { 7654, 0xed06 }, { 7662, 0x1dfd }, { 7673, 0x7dd7 }, { 7685, 0xefdf },
-  { 7699, 0xeb23 }, { 7708, 0xf166 }, { 7717, 0x7ed9 }, { 7728, 0x0dc0 },
-  /* 0x7a00 */
-  { 7733, 0x3d3d }, { 7743, 0xdfbf }, { 7757, 0xc945 }, { 7764, 0xba83 },
-  { 7772, 0x7dd1 }, { 7782, 0x9dd0 }, { 7790, 0x7b87 }, { 7800, 0xcf73 },
-  { 7811, 0x9ff3 }, { 7823, 0xc3f5 }, { 7833, 0xdf0d }, { 7843, 0xc5fe },
-  { 7854, 0x0cb3 }, { 7861, 0x8302 }, { 7865, 0xe879 }, { 7874, 0xaec0 },
-  /* 0x7b00 */
-  { 7881, 0xc773 }, { 7891, 0x6f0f }, { 7901, 0xfd7d }, { 7914, 0x093f },
-  { 7922, 0xfff1 }, { 7935, 0x0157 }, { 7941, 0x62fb }, { 7951, 0x01ff },
-  { 7960, 0xfdb4 }, { 7971, 0x3bf3 }, { 7982, 0xb013 }, { 7988, 0x43b2 },
-  { 7995, 0x5ed3 }, { 8005, 0xff30 }, { 8015, 0x0fff }, { 8027, 0xeb9f },
-  /* 0x7c00 */
-  { 8039, 0xfeef }, { 8053, 0xf203 }, { 8060, 0x3fef }, { 8073, 0xfb89 },
-  { 8083, 0x37a9 }, { 8092, 0x9e99 }, { 8101, 0xdef9 }, { 8113, 0xa72c },
-  { 8121, 0x3733 }, { 8130, 0xc1f6 }, { 8139, 0x812e }, { 8145, 0xfe3e },
-  { 8157, 0x5d20 }, { 8163, 0xf2f7 }, { 8175, 0xd585 }, { 8183, 0x69d7 },
-  /* 0x7d00 */
-  { 8193, 0xffff }, { 8209, 0xffff }, { 8225, 0xdb07 }, { 8234, 0xff6f },
-  { 8248, 0xc4ff }, { 8259, 0xd97f }, { 8271, 0xefce }, { 8283, 0xbe0f },
-  { 8293, 0xf17b }, { 8304, 0xf05e }, { 8313, 0xf6cf }, { 8325, 0xffb7 },
-  { 8339, 0x5ef7 }, { 8351, 0xef84 }, { 8360, 0xd7cb }, { 8371, 0x0edf },
-  /* 0x7e00 */
-  { 8381, 0xff08 }, { 8390, 0xfcff }, { 8404, 0xee3f }, { 8416, 0xffff },
-  { 8432, 0x13ff }, { 8443, 0xd7ff }, { 8457, 0xaf0f }, { 8467, 0x7ffd },
-  { 8481, 0xbdc7 }, { 8492, 0x1ffa }, { 8503, 0x0000 }, { 8503, 0x0000 },
-  { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 },
-  /* 0x7f00 */
-  { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0xe740 },
-  { 8510, 0xbd38 }, { 8519, 0xf933 }, { 8529, 0x7feb }, { 8542, 0xfeed },
-  { 8555, 0x7fe8 }, { 8566, 0x7c76 }, { 8576, 0xb3f7 }, { 8588, 0xffef },
-  { 8603, 0xfeaf }, { 8616, 0xd8b7 }, { 8626, 0xff6f }, { 8640, 0xfbbf },
-  /* 0x8000 */
-  { 8654, 0xf8fb }, { 8666, 0xdbf7 }, { 8679, 0x1752 }, { 8686, 0xe2f9 },
-  { 8696, 0x85c8 }, { 8702, 0x7547 }, { 8711, 0x9090 }, { 8715, 0xe3ef },
-  { 8727, 0x9ef4 }, { 8737, 0x3f6d }, { 8748, 0xee2e }, { 8758, 0x0536 },
-  { 8764, 0xf7bc }, { 8776, 0x7ff3 }, { 8789, 0xa07b }, { 8797, 0x7f3f },
-  /* 0x8100 */
-  { 8810, 0x0567 }, { 8817, 0xeb60 }, { 8825, 0xbabe }, { 8836, 0x6601 },
-  { 8841, 0xfcd8 }, { 8851, 0x583f }, { 8860, 0xcaf7 }, { 8871, 0x87df },
-  { 8882, 0xbfcd }, { 8894, 0xffa0 }, { 8904, 0x5bcd }, { 8914, 0xfebf },
-  { 8928, 0xb6fd }, { 8940, 0xefa7 }, { 8952, 0x77ef }, { 8965, 0xdf9c },
-  /* 0x8200 */
-  { 8976, 0x3fb7 }, { 8988, 0xf877 }, { 8999, 0x9d27 }, { 9008, 0xb7fc },
-  { 9020, 0xcab5 }, { 9029, 0xdfef }, { 9043, 0xfb5a }, { 9054, 0xf1b6 },
-  { 9064, 0xec39 }, { 9073, 0xef1f }, { 9085, 0xfbbf }, { 9099, 0x7ffb },
-  { 9113, 0x000d }, { 9116, 0xdafe }, { 9128, 0xbdfb }, { 9141, 0x4e7f },
-  /* 0x8300 */
-  { 9152, 0x33ff }, { 9164, 0x5ac0 }, { 9170, 0xbff5 }, { 9183, 0x9ffe },
-  { 9196, 0xffbf }, { 9211, 0x005f }, { 9217, 0x0000 }, { 9217, 0xfdf8 },
-  { 9229, 0xffca }, { 9241, 0x6ffd }, { 9254, 0xcffd }, { 9267, 0xa001 },
-  { 9270, 0xdfff }, { 9285, 0xfbf2 }, { 9297, 0xdfbf }, { 9311, 0xff7f },
-  /* 0x8400 */
-  { 9326, 0xfeda }, { 9338, 0x080f }, { 9343, 0xba08 }, { 9349, 0xbfff },
-  { 9364, 0x7afd }, { 9376, 0xeed7 }, { 9388, 0xfbeb }, { 9401, 0x67f9 },
-  { 9412, 0xe044 }, { 9417, 0xff93 }, { 9429, 0xdf97 }, { 9441, 0x9f57 },
-  { 9452, 0xfef7 }, { 9466, 0x08df }, { 9474, 0xdf80 }, { 9482, 0xfedf },
-  /* 0x8500 */
-  { 9496, 0xffc5 }, { 9508, 0xf7fe }, { 9522, 0xfffb }, { 9537, 0x6803 },
-  { 9542, 0x67fb }, { 9554, 0x6bfa }, { 9565, 0x7fff }, { 9580, 0x5fe2 },
-  { 9590, 0xffff }, { 9606, 0xff73 }, { 9619, 0x87df }, { 9630, 0xe7fb },
-  { 9643, 0xebfd }, { 9656, 0xf7a7 }, { 9668, 0xbf7e }, { 9681, 0xefc7 },
-  /* 0x8600 */
-  { 9693, 0x1ef3 }, { 9703, 0xdf82 }, { 9712, 0x76ff }, { 9725, 0xdf7e },
-  { 9738, 0x79c9 }, { 9747, 0xda7d }, { 9758, 0xefbe }, { 9771, 0x1e9b },
-  { 9780, 0x7ce0 }, { 9788, 0x77fb }, { 9801, 0x87be }, { 9811, 0xfffb },
-  { 9826, 0x1bff }, { 9838, 0xffdb }, { 9852, 0x3f5c }, { 9862, 0x4fe0 },
-  /* 0x8700 */
-  { 9870, 0x7fff }, { 9885, 0x5f0e }, { 9894, 0x77ff }, { 9908, 0xddbf },
-  { 9921, 0xf04f }, { 9930, 0xffff }, { 9946, 0xffff }, { 9962, 0x0ff8 },
-  { 9971, 0xa3be }, { 9981, 0xfddf }, { 9995, 0xfc1c }, { 10004, 0xfffd },
-  { 10019, 0x1f7d }, { 10030, 0xfb9e }, { 10042, 0xbdff }, { 10056, 0xdedc },
-  /* 0x8800 */
-  { 10067, 0x3f6f }, { 10079, 0xbafb }, { 10091, 0xdf7f }, { 10105, 0xfbef },
-  { 10119, 0x7d1b }, { 10129, 0x2eec }, { 10138, 0xaf8e }, { 10148, 0xf2f7 },
-  { 10160, 0x7b0f }, { 10170, 0xcfee }, { 10182, 0x1d96 }, { 10190, 0x77c6 },
-  { 10200, 0x7e07 }, { 10209, 0xfff5 }, { 10223, 0xd982 }, { 10230, 0x7fdf },
-  /* 0x8900 */
-  { 10244, 0x5ee6 }, { 10254, 0xc7ff }, { 10267, 0xfeee }, { 10280, 0x79ef },
-  { 10292, 0x9a56 }, { 10300, 0xffcf }, { 10314, 0xfe5f }, { 10327, 0xde5e },
-  { 10338, 0x896e }, { 10346, 0xf9e8 }, { 10356, 0xf45e }, { 10366, 0xe6c4 },
-  { 10374, 0x0001 }, { 10375, 0xbe7c }, { 10386, 0x3b7f }, { 10398, 0xdddf },
-  /* 0x8a00 */
-  { 10411, 0xd59d }, { 10421, 0xe9ef }, { 10433, 0x34ac }, { 10440, 0xde53 },
-  { 10450, 0xf573 }, { 10461, 0x4bf7 }, { 10472, 0x7b4f }, { 10483, 0x9eff },
-  { 10496, 0xb8fe }, { 10507, 0x476e }, { 10516, 0x0dfb }, { 10526, 0xff45 },
-  { 10537, 0xabfd }, { 10549, 0xfbfe }, { 10563, 0xe9d7 }, { 10574, 0xddff },
-  /* 0x8b00 */
-  { 10588, 0xedf7 }, { 10601, 0x7fff }, { 10616, 0xddfd }, { 10629, 0x7eeb },
-  { 10641, 0xcfe7 }, { 10653, 0xb7ff }, { 10667, 0xbde9 }, { 10678, 0xef91 },
-  { 10688, 0x5d75 }, { 10698, 0xd77c }, { 10709, 0x0000 }, { 10709, 0x0000 },
-  { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 },
-  /* 0x8c00 */
-  { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0xfa80 },
-  { 10716, 0xffee }, { 10730, 0xb4f1 }, { 10739, 0xbf76 }, { 10751, 0x2fef },
-  { 10763, 0xb677 }, { 10774, 0x77bf }, { 10787, 0x9fbf }, { 10800, 0xfffd },
-  { 10815, 0x95bf }, { 10826, 0xf6ae }, { 10837, 0x75ff }, { 10850, 0x7f3b },
-  /* 0x8d00 */
-  { 10862, 0xa7f5 }, { 10873, 0x0af9 }, { 10881, 0x0000 }, { 10881, 0x0000 },
-  { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0xfbd0 }, { 10891, 0x2bdd },
-  { 10901, 0xf633 }, { 10911, 0x9a7f }, { 10922, 0xfdab }, { 10934, 0xd6fc },
-  { 10945, 0xf9e6 }, { 10956, 0xbfeb }, { 10969, 0xdfdf }, { 10983, 0xf41f },
-  /* 0x8e00 */
-  { 10993, 0xa6fd }, { 11004, 0xffff }, { 11020, 0x4aff }, { 11031, 0xf37b },
-  { 11043, 0x7fb7 }, { 11056, 0xfef9 }, { 11069, 0xb6ff }, { 11082, 0x1d5c },
-  { 11090, 0x7ff6 }, { 11103, 0xe5ff }, { 11116, 0x1f7b }, { 11127, 0x2404 },
-  { 11130, 0xbe05 }, { 11138, 0xf99e }, { 11149, 0xdbe3 }, { 11160, 0xdff2 },
-  /* 0x8f00 */
-  { 11172, 0x6fef }, { 11185, 0xfdff }, { 11200, 0xd679 }, { 11210, 0xcbfc },
-  { 11221, 0xebfd }, { 11234, 0xefff }, { 11249, 0x001f }, { 11254, 0x0000 },
-  { 11254, 0x0000 }, { 11254, 0x9800 }, { 11257, 0xe148 }, { 11263, 0x8017 },
-  { 11268, 0x6a74 }, { 11276, 0x00fe }, { 11283, 0x6d7f }, { 11295, 0xfdf1 },
-  /* 0x9000 */
-  { 11307, 0xb87f }, { 11318, 0xfef3 }, { 11331, 0xe01f }, { 11339, 0xf176 },
-  { 11349, 0xee96 }, { 11359, 0x7b3f }, { 11371, 0xeb8d }, { 11381, 0xfffd },
-  { 11396, 0xadff }, { 11409, 0xcbb3 }, { 11419, 0x84ef }, { 11428, 0xe17f },
-  { 11439, 0x4daa }, { 11447, 0xbff0 }, { 11458, 0xbf3f }, { 11471, 0xfe3f },
-  /* 0x9100 */
-  { 11484, 0xebff }, { 11498, 0xffd7 }, { 11512, 0xffdf }, { 11527, 0xcf7f },
-  { 11540, 0xfffb }, { 11555, 0x85ed }, { 11564, 0xd73f }, { 11576, 0x07bc },
-  { 11584, 0xaeff }, { 11597, 0xfe0f }, { 11608, 0xfdaf }, { 11621, 0x76bf },
-  { 11633, 0xfaef }, { 11646, 0x37bb }, { 11657, 0x7fdc }, { 11669, 0xa3ba },
-  /* 0x9200 */
-  { 11678, 0xb6ff }, { 11691, 0x56f7 }, { 11702, 0x60f8 }, { 11709, 0xe7df },
-  { 11722, 0xff61 }, { 11733, 0x4cdf }, { 11743, 0xb0fb }, { 11753, 0xff45 },
-  { 11764, 0x7ded }, { 11776, 0x3ffa }, { 11788, 0x1fff }, { 11801, 0x18fc },
-  { 11809, 0xffff }, { 11825, 0xe3af }, { 11836, 0xc7d3 }, { 11846, 0xdf83 },
-  /* 0x9300 */
-  { 11856, 0xfb57 }, { 11868, 0xef7d }, { 11881, 0xefff }, { 11896, 0x1378 },
-  { 11903, 0xfec0 }, { 11912, 0x5ff7 }, { 11925, 0x34bb }, { 11934, 0x5ee3 },
-  { 11944, 0xf70d }, { 11954, 0xeff6 }, { 11967, 0xd7fe }, { 11980, 0x00bf },
-  { 11987, 0xf59d }, { 11998, 0xf7f7 }, { 12012, 0x51de }, { 12021, 0xffe0 },
-  /* 0x9400 */
-  { 12032, 0xfec9 }, { 12043, 0x037f }, { 12052, 0x5f01 }, { 12059, 0xbfef },
-  { 12073, 0x9ff1 }, { 12084, 0x60a7 }, { 12091, 0xef1d }, { 12102, 0xf1ff },
-  { 12115, 0x000f }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  /* 0x9500 */
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 },
-  { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x3c80 },
-  { 12124, 0xfb4d }, { 12135, 0xd91f }, { 12145, 0x7b3a }, { 12155, 0xfee3 },
-  { 12167, 0x3fe9 }, { 12178, 0xdc7f }, { 12190, 0x003f }, { 12196, 0x0000 },
-  /* 0x9600 */
-  { 12196, 0x0000 }, { 12196, 0x5000 }, { 12198, 0xf51f }, { 12209, 0xbe07 },
-  { 12218, 0xfc1d }, { 12228, 0xf91b }, { 12238, 0xbc1e }, { 12247, 0x71ff },
-  { 12259, 0x6ff9 }, { 12271, 0x5bbe }, { 12282, 0x5796 }, { 12291, 0x9b1b },
-  { 12300, 0x7fff }, { 12315, 0xfffc }, { 12329, 0x872e }, { 12337, 0xafe7 },
-  /* 0x9700 */
-  { 12349, 0xebf5 }, { 12361, 0xf34f }, { 12372, 0xdffd }, { 12386, 0xe725 },
-  { 12395, 0x0bdc }, { 12403, 0x5d44 }, { 12410, 0x5747 }, { 12419, 0xfddd },
-  { 12432, 0xed3f }, { 12444, 0x7790 }, { 12452, 0x7d7f }, { 12465, 0x8ac8 },
-  { 12471, 0xfafa }, { 12483, 0xf3f9 }, { 12495, 0x202a }, { 12499, 0xef4b },
-  /* 0x9800 */
-  { 12510, 0xf5ff }, { 12524, 0x79cf }, { 12535, 0xabd3 }, { 12545, 0x0ba5 },
-  { 12552, 0xf77a }, { 12564, 0xfb8f }, { 12576, 0x8ebd }, { 12586, 0x001f },
-  { 12591, 0x0000 }, { 12591, 0x0000 }, { 12591, 0xf300 }, { 12597, 0xfd4e },
-  { 12608, 0x1a57 }, { 12616, 0x8800 }, { 12618, 0xaeac }, { 12627, 0x7654 },
-  /* 0x9900 */
-  { 12635, 0x17ad }, { 12644, 0xcdff }, { 12657, 0xffb2 }, { 12669, 0xf42f },
-  { 12679, 0x5baa }, { 12688, 0xdbff }, { 12702, 0x0002 }, { 12703, 0x0000 },
-  { 12703, 0x0000 }, { 12703, 0x73c0 }, { 12710, 0xf9ea }, { 12721, 0x2e3f },
-  { 12731, 0xfa8e }, { 12741, 0xbbff }, { 12755, 0x76bc }, { 12765, 0xffd3 },
-  /* 0x9a00 */
-  { 12778, 0xeefe }, { 12791, 0x7e72 }, { 12801, 0x7ebd }, { 12813, 0xe7f7 },
-  { 12826, 0xf77f }, { 12840, 0xcefd }, { 12852, 0x0ff5 }, { 12862, 0x0000 },
-  { 12862, 0x0000 }, { 12862, 0x0000 }, { 12862, 0xa900 }, { 12866, 0xdb9b },
-  { 12877, 0xa4c7 }, { 12885, 0x917f }, { 12895, 0xf8ca }, { 12904, 0x7ece },
-  /* 0x9b00 */
-  { 12915, 0x7d7a }, { 12926, 0xc7e7 }, { 12937, 0xcbbd }, { 12948, 0xdcae },
-  { 12958, 0xfd7e }, { 12971, 0x8f76 }, { 12981, 0x91d3 }, { 12989, 0x7cf3 },
-  { 13000, 0x01e5 }, { 13006, 0x4c2f }, { 13014, 0xed77 }, { 13026, 0xa360 },
-  { 13032, 0x07db }, { 13041, 0x5ef8 }, { 13051, 0x1df7 }, { 13062, 0x2181 },
-  /* 0x9c00 */
-  { 13066, 0x6be0 }, { 13074, 0x309c }, { 13080, 0x3b3a }, { 13089, 0xfade },
-  { 13101, 0x7f53 }, { 13112, 0xc3f5 }, { 13122, 0x61cd }, { 13130, 0x07ba },
-  { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 },
-  { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x26e0 }, { 13144, 0xbefe },
-  /* 0x9d00 */
-  { 13157, 0x03f9 }, { 13165, 0xebb5 }, { 13176, 0xe36d }, { 13186, 0xe9cb },
-  { 13196, 0x9c2f }, { 13205, 0xbfde }, { 13218, 0x9f83 }, { 13227, 0xabbf },
-  { 13239, 0x1ff7 }, { 13251, 0xffd5 }, { 13264, 0xb7df }, { 13277, 0xdffe },
-  { 13291, 0xfdae }, { 13303, 0xffef }, { 13318, 0xfb7e }, { 13331, 0xeffd },
-  /* 0x9e00 */
-  { 13345, 0xaaff }, { 13357, 0x6ebf }, { 13369, 0x0000 }, { 13369, 0x0000 },
-  { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0xb620 },
-  { 13375, 0x7fcd }, { 13387, 0xbe9e }, { 13398, 0x62b3 }, { 13406, 0x58f1 },
-  { 13414, 0xf10d }, { 13422, 0xfd7b }, { 13435, 0xe9f1 }, { 13445, 0xbefd },
-  /* 0x9f00 */
-  { 13458, 0xc6c3 }, { 13466, 0x5f6d }, { 13477, 0xff3d }, { 13490, 0x69ff },
-  { 13502, 0xffcf }, { 13516, 0xfbf4 }, { 13528, 0xdcfb }, { 13540, 0x4ff7 },
-  { 13552, 0x2000 }, { 13553, 0x1137 }, { 13560, 0x0015 },
-};
-static const Summary16 big5_uni2indx_pagefa[1] = {
-  /* 0xfa00 */
-  { 13563, 0x3000 },
-};
-static const Summary16 big5_uni2indx_pagefe[23] = {
-  /* 0xfe00 */
-  { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0xfffb },
-  { 13580, 0xfe1f }, { 13592, 0xfef5 }, { 13605, 0x0e7f }, { 13615, 0x0000 },
-  { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 },
-  { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 },
-  /* 0xff00 */
-  { 13615, 0xff7a }, { 13628, 0xffff }, { 13644, 0xffff }, { 13660, 0x97ff },
-  { 13673, 0xfffe }, { 13688, 0x3fff }, { 13702, 0x0010 },
-};
-
-static int
-big5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0100)
-      summary = &big5_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x0200 && wc < 0x0460)
-      summary = &big5_uni2indx_page02[(wc>>4)-0x020];
-    else if (wc >= 0x2000 && wc < 0x22c0)
-      summary = &big5_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x2400 && wc < 0x2650)
-      summary = &big5_uni2indx_page24[(wc>>4)-0x240];
-    else if (wc >= 0x3000 && wc < 0x33e0)
-      summary = &big5_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &big5_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xfa00 && wc < 0xfa10)
-      summary = &big5_uni2indx_pagefa[(wc>>4)-0xfa0];
-    else if (wc >= 0xfe00 && wc < 0xff70)
-      summary = &big5_uni2indx_pagefe[(wc>>4)-0xfe0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = big5_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/big5_emacs.h
+++ /dev/null
@@ -1,164 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/big5_emacs.h,v 1.1 2000/11/28 18:50:06 dawes Exp $ */
-
-/*
- * BIG5-0 and BIG5-1
- */
-
-/*
-   BIG5 with its 13494 characters doesn't fit in a single 94x94 or 96x96
-   block. Therefore Emacs/Mule developers, in a typically Japanese way of
-   thinking, have developed an alternative encoding of BIG5 in two 94x94
-   planes, very similar to the SHIFT_JIS encoding for JISX0208.
-
-   Conversion between BIG5 codes (s1,s2) and BIG5-0 codes (c1,c2):
-   Example. (s1,s2) = 0xA140, (c1,c2) = 0x2121.
-   0xA1 <= s1 <= 0xC7, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE,
-   0x21 <= c1 <= 0x62, 0x21 <= c2 <= 0x7E.
-   Invariant:
-     157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     = 94*(c1-0x21)+(c2-0x21)
-   Conversion (s1,s2) -> (c1,c2):
-     t := 157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     c1 := (t div 94) + 0x21
-     c2 := (t mod 94) + 0x21
-   Conversion (c1,c2) -> (s1,s2):
-     t := 94*(c1-0x21)+(c2-0x21)
-     t2 := t mod 157
-     s1 := (t div 157) + 0xA1
-     s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62)
-
-   Conversion between BIG5 codes (s1,s2) and BIG5-1 codes (c1,c2):
-   Example. (s1,s2) = 0xC940, (c1,c2) = 0x2121.
-   0xC9 <= s1 <= 0xF9, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE,
-   0x21 <= c1 <= 0x72, 0x21 <= c2 <= 0x7E.
-   Invariant:
-     157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     = 94*(c1-0x21)+(c2-0x21)
-   Conversion (s1,s2) -> (c1,c2):
-     t := 157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62)
-     c1 := (t div 94) + 0x21
-     c2 := (t mod 94) + 0x21
-   Conversion (c1,c2) -> (s1,s2):
-     t := 94*(c1-0x21)+(c2-0x21)
-     t2 := t mod 157
-     s1 := (t div 157) + 0xC9
-     s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62)
- */
-
-static int
-big5_0_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if (c1 >= 0x21 && c1 <= 0x62) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if (c2 >= 0x21 && c2 <= 0x7e) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        if (0) {
-          /* Unoptimized. */
-          unsigned char buf[2];
-          buf[0] = (i / 157) + 0xa1;
-          i = i % 157;
-          buf[1] = i + (i < 0x3f ? 0x40 : 0x62);
-          return big5_mbtowc(conv,pwc,buf,2);
-        } else {
-          /* Inline the implementation of big5_mbtowc. */
-          if (i < 6121) {
-            unsigned short wc = big5_2uni_pagea1[i];
-            if (wc != 0xfffd) {
-              *pwc = (ucs4_t) wc;
-              return 2;
-            }
-          }
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-
-static int
-big5_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if (c1 >= 0x21 && c1 <= 0x72) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if (c2 >= 0x21 && c2 <= 0x7e) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        if (0) {
-          /* Unoptimized. */
-          unsigned char buf[2];
-          buf[0] = (i / 157) + 0xc9;
-          i = i % 157;
-          buf[1] = i + (i < 0x3f ? 0x40 : 0x62);
-          return big5_mbtowc(conv,pwc,buf,2);
-        } else {
-          /* Inline the implementation of big5_mbtowc. */
-          if (i < 7652) {
-            unsigned short wc = big5_2uni_pagec9[i];
-            if (wc != 0xfffd) {
-              *pwc = (ucs4_t) wc;
-              return 2;
-            }
-          }
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-
-static int
-big5_0_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned char buf[2];
-    int ret = big5_wctomb(conv,buf,wc,2);
-    if (ret != RET_ILSEQ) {
-      unsigned char s1, s2;
-      if (ret != 2) abort();
-      s1 = buf[0];
-      s2 = buf[1];
-      if (!(s1 >= 0xa1)) abort();
-      if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort();
-      if (s1 < 0xc9) {
-        unsigned int t = 157 * (s1 - 0xa1) + s2 - (s2 < 0x80 ? 0x40 : 0x62);
-        r[0] = (t / 94) + 0x21;
-        r[1] = (t % 94) + 0x21;
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-
-static int
-big5_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned char buf[2];
-    int ret = big5_wctomb(conv,buf,wc,2);
-    if (ret != RET_ILSEQ) {
-      unsigned char s1, s2;
-      if (ret != 2) abort();
-      s1 = buf[0];
-      s2 = buf[1];
-      if (!(s1 <= 0xf9)) abort();
-      if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort();
-      if (s1 >= 0xc9) {
-        unsigned int t = 157 * (s1 - 0xc9) + s2 - (s2 < 0x80 ? 0x40 : 0x62);
-        r[0] = (t / 94) + 0x21;
-        r[1] = (t % 94) + 0x21;
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cjk_tab_to_h.c
+++ /dev/null
@@ -1,1025 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cjk_tab_to_h.c,v 1.2 2000/12/04 18:49:31 dawes Exp $ */
-
-/*
- * Generates a CJK character set table from a .TXT table as found on
- * ftp.unicode.org or in the X nls directory.
- * Examples:
- *
- *   ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < gb2312
- *   ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < jis0208
- *   ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < ksc5601
- *
- *   ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < GB2312.TXT
- *   ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < JIS0208.TXT
- *   ./cjk_tab_to_h JISX0212.1990-0 jisx0212 > jisx0212.h < JIS0212.TXT
- *   ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < KSC5601.TXT
- *   ./cjk_tab_to_h KSX1001.1992-0 ksc5601 > ksc5601.h < KSX1001.TXT
- *
- *   ./cjk_tab_to_h BIG5 big5 > big5.h < BIG5.TXT
- *
- *   ./cjk_tab_to_h JOHAB johab > johab.h < JOHAB.TXT
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-typedef struct {
-  int start;
-  int end;
-} Block;
-
-typedef struct {
-  int rows;    /* number of possible values for the 1st byte */
-  int cols;    /* number of possible values for the 2nd byte */
-  int (*row_byte) (int row); /* returns the 1st byte value for a given row */
-  int (*col_byte) (int col); /* returns the 2nd byte value for a given col */
-  int (*byte_row) (int byte); /* converts a 1st byte value to a row, else -1 */
-  int (*byte_col) (int byte); /* converts a 2nd byte value to a col, else -1 */
-  const char* check_row_expr; /* format string for 1st byte value checking */
-  const char* check_col_expr; /* format string for 2nd byte value checking */
-  const char* byte_row_expr; /* format string for 1st byte value to row */
-  const char* byte_col_expr; /* format string for 2nd byte value to col */
-  int** charset2uni; /* charset2uni[0..rows-1][0..cols-1] is valid */
-  /* You'll understand the terms "row" and "col" when you buy Ken Lunde's book.
-     Once a row is fixed, choosing a "col" is the same as choosing a "cell". */
-  int* charsetpage; /* charsetpage[0..rows]: how large is a page for a row */
-  int ncharsetblocks;
-  Block* charsetblocks; /* blocks[0..nblocks-1] */
-  int* uni2charset; /* uni2charset[0x0000..0xffff] */
-} Encoding;
-
-/*
- * Outputs the file title.
- */
-static void output_title (const char *charsetname)
-{
-  printf("\n");
-  printf("/*\n");
-  printf(" * %s\n", charsetname);
-  printf(" */\n");
-  printf("\n");
-}
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      if (scanf(" 0x%x", &enc->charset2uni[row][col]) != 1)
-        exit(1);
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 32; i1 < 132; i1++)
-      for (i2 = 32; i2 < 132; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-/*
- * Computes the charsetpage[0..rows] array.
- */
-static void find_charset2uni_pages (Encoding* enc)
-{
-  int row, col;
-
-  enc->charsetpage = (int*) malloc((enc->rows+1)*sizeof(int));
-
-  for (row = 0; row <= enc->rows; row++)
-    enc->charsetpage[row] = 0;
-
-  for (row = 0; row < enc->rows; row++) {
-    int used = 0;
-    for (col = 0; col < enc->cols; col++)
-      if (enc->charset2uni[row][col] != 0xfffd)
-        used = col+1;
-    enc->charsetpage[row] = used;
-  }
-}
-
-/*
- * Fills in nblocks and blocks.
- */
-static void find_charset2uni_blocks (Encoding* enc)
-{
-  int n, row, lastrow;
-
-  enc->charsetblocks = (Block*) malloc(enc->rows*sizeof(Block));
-
-  n = 0;
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0 && (row == 0 || enc->charsetpage[row-1] == 0)) {
-      for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-      enc->charsetblocks[n].start = row * enc->cols;
-      enc->charsetblocks[n].end = lastrow * enc->cols + enc->charsetpage[lastrow];
-      n++;
-    }
-  enc->ncharsetblocks = n;
-}
-
-/*
- * Outputs the charset to unicode table and function.
- */
-static void output_charset2uni (const char* name, Encoding* enc)
-{
-  int row, col, lastrow, col_max, i, i1_min, i1_max;
-
-  find_charset2uni_pages(enc);
-
-  find_charset2uni_blocks(enc);
-
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0) {
-      if (row == 0 || enc->charsetpage[row-1] == 0) {
-        /* Start a new block. */
-        for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-        printf("static const unsigned short %s_2uni_page%02x[%d] = {\n",
-               name, enc->row_byte(row),
-               (lastrow-row) * enc->cols + enc->charsetpage[lastrow]);
-      }
-      printf("  /""* 0x%02x *""/\n ", enc->row_byte(row));
-      col_max = (enc->charsetpage[row+1] > 0 ? enc->cols : enc->charsetpage[row]);
-      for (col = 0; col < col_max; col++) {
-        printf(" 0x%04x,", enc->charset2uni[row][col]);
-        if ((col % 8) == 7 && (col+1 < col_max)) printf("\n ");
-      }
-      printf("\n");
-      if (enc->charsetpage[row+1] == 0) {
-        /* End a block. */
-        printf("};\n");
-      }
-    }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", name);
-  printf("{\n");
-  printf("  unsigned char c1 = s[0];\n");
-  printf("  if (");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    i1_min = enc->row_byte(enc->charsetblocks[i].start / enc->cols);
-    i1_max = enc->row_byte((enc->charsetblocks[i].end-1) / enc->cols);
-    if (i > 0)
-      printf(" || ");
-    if (i1_min == i1_max)
-      printf("(c1 == 0x%02x)", i1_min);
-    else
-      printf("(c1 >= 0x%02x && c1 <= 0x%02x)", i1_min, i1_max);
-  }
-  printf(") {\n");
-  printf("    if (n >= 2) {\n");
-  printf("      unsigned char c2 = s[1];\n");
-  printf("      if (");
-  printf(enc->check_col_expr, "c2");
-  printf(") {\n");
-  printf("        unsigned int i = %d * (", enc->cols);
-  printf(enc->byte_row_expr, "c1");
-  printf(") + (");
-  printf(enc->byte_col_expr, "c2");
-  printf(");\n");
-  printf("        unsigned short wc = 0xfffd;\n");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    printf("        ");
-    if (i > 0)
-      printf("} else ");
-    if (i < enc->ncharsetblocks-1)
-      printf("if (i < %d) ", enc->charsetblocks[i+1].start);
-    printf("{\n");
-    printf("          if (i < %d)\n", enc->charsetblocks[i].end);
-    printf("            wc = %s_2uni_page%02x[i", name, enc->row_byte(enc->charsetblocks[i].start / enc->cols));
-    if (enc->charsetblocks[i].start > 0)
-      printf("-%d", enc->charsetblocks[i].start);
-    printf("];\n");
-  }
-  printf("        }\n");
-  printf("        if (wc != 0xfffd) {\n");
-  printf("          *pwc = (ucs4_t) wc;\n");
-  printf("          return 2;\n");
-  printf("        }\n");
-  printf("      }\n");
-  printf("      return RET_ILSEQ;\n");
-  printf("    }\n");
-  printf("    return RET_TOOFEW(0);\n");
-  printf("  }\n");
-  printf("  return RET_ILSEQ;\n");
-  printf("}\n");
-  printf("\n");
-}
-
-/*
- * Computes the uni2charset[0x0000..0xffff] array.
- */
-static void invert (Encoding* enc)
-{
-  int row, col, j;
-
-  enc->uni2charset = (int*) malloc(0x10000*sizeof(int));
-
-  for (j = 0; j < 0x10000; j++)
-    enc->uni2charset[j] = 0;
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        enc->uni2charset[j] = 0x100 * enc->row_byte(row) + enc->col_byte(col);
-    }
-}
-
-/*
- * Outputs the unicode to charset table and function, using a linear array.
- * (Suitable if the table is dense.)
- */
-static void output_uni2charset_dense (const char* name, Encoding* enc)
-{
-  /* Like in 8bit_tab_to_h.c */
-  bool pages[0x100];
-  int line[0x2000];
-  int tableno;
-  struct { int minline; int maxline; int usecount; } tables[0x2000];
-  bool first;
-  int row, col, j, p, j1, j2, t;
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    bool all_invalid = true;
-    for (j2 = 0; j2 < 8; j2++) {
-      j = 8*j1+j2;
-      if (enc->uni2charset[j] != 0)
-        all_invalid = false;
-    }
-    if (all_invalid)
-      line[j1] = -1;
-    else
-      line[j1] = 0;
-  }
-  tableno = 0;
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    if (line[j1] >= 0) {
-      if (tableno > 0
-          && ((j1 > 0 && line[j1-1] == tableno-1)
-              || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                  && j1 - tables[tableno-1].maxline <= 8))) {
-        line[j1] = tableno-1;
-        tables[tableno-1].maxline = j1;
-      } else {
-        tableno++;
-        line[j1] = tableno-1;
-        tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-      }
-    }
-  }
-  for (t = 0; t < tableno; t++) {
-    tables[t].usecount = 0;
-    j1 = 8*tables[t].minline;
-    j2 = 8*(tables[t].maxline+1);
-    for (j = j1; j < j2; j++)
-      if (enc->uni2charset[j] != 0)
-        tables[t].usecount++;
-  }
-  {
-    p = -1;
-    for (t = 0; t < tableno; t++)
-      if (tables[t].usecount > 1) {
-        p = tables[t].minline >> 5;
-        printf("static const unsigned short %s_page%02x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1));
-        for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-          if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-            printf("  /* 0x%04x */\n", 8*j1);
-          printf(" ");
-          for (j2 = 0; j2 < 8; j2++) {
-            j = 8*j1+j2;
-            printf(" 0x%04x,", enc->uni2charset[j]);
-          }
-          printf(" /*0x%02x-0x%02x*/\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-        }
-        printf("};\n");
-      }
-    if (p >= 0)
-      printf("\n");
-  }
-  printf("static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    unsigned short c = 0;\n");
-  first = true;
-  for (j1 = 0; j1 < 0x2000;) {
-    t = line[j1];
-    for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-    if (t >= 0) {
-      if (j1 != tables[t].minline) abort();
-      if (j2 > tables[t].maxline+1) abort();
-      j2 = tables[t].maxline+1;
-      if (first)
-        printf("    ");
-      else
-        printf("    else ");
-      first = false;
-      if (tables[t].usecount == 0) abort();
-      if (tables[t].usecount == 1) {
-        if (j2 != j1+1) abort();
-        for (j = 8*j1; j < 8*j2; j++)
-          if (enc->uni2charset[j] != 0) {
-            printf("if (wc == 0x%04x)\n      c = 0x%02x;\n", j, enc->uni2charset[j]);
-            break;
-          }
-      } else {
-        if (j1 == 0) {
-          printf("if (wc < 0x%04x)", 8*j2);
-        } else {
-          printf("if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-        }
-        printf("\n      c = %s_page%02x[wc", name, j1 >> 5);
-        if (tables[t].minline > 0)
-          printf("-0x%04x", 8*j1);
-        printf("];\n");
-      }
-    }
-    j1 = j2;
-  }
-  printf("    if (c != 0) {\n");
-  printf("      r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("      return 2;\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/*
- * Outputs the unicode to charset table and function, using a packed array.
- * (Suitable if the table is sparse.)
- */
-static void output_uni2charset_sparse (const char* name, Encoding* enc)
-{
-  bool pages[0x100];
-  Block pageblocks[0x100]; int npageblocks;
-  int indx2charset[0x10000];
-  int summary_indx[0x1000];
-  int summary_used[0x1000];
-  int i, row, col, j, p, j1, j2, indx;
-
-  /* Fill pages[0x100]. */
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-
-#if 0
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      printf("static const unsigned short %s_page%02x[256] = {\n", name, p);
-      for (j1 = 0; j1 < 32; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%04x, ", enc->uni2charset[256*p+8*j1+j2]);
-        printf("/""*0x%02x-0x%02x*""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-#endif
-
-  /* Fill summary_indx[] and summary_used[]. */
-  indx = 0;
-  for (j1 = 0; j1 < 0x1000; j1++) {
-    summary_indx[j1] = indx;
-    summary_used[j1] = 0;
-    for (j2 = 0; j2 < 16; j2++) {
-      j = 16*j1+j2;
-      if (enc->uni2charset[j] != 0) {
-        indx2charset[indx++] = enc->uni2charset[j];
-        summary_used[j1] |= (1 << j2);
-      }
-    }
-  }
-
-  /* Fill npageblocks and pageblocks[]. */
-  npageblocks = 0;
-  for (p = 0; p < 0x100; ) {
-    if (pages[p] && (p == 0 || !pages[p-1])) {
-      pageblocks[npageblocks].start = 16*p;
-      do p++; while (p < 0x100 && pages[p]);
-      j1 = 16*p;
-      while (summary_used[j1-1] == 0) j1--;
-      pageblocks[npageblocks].end = j1;
-      npageblocks++;
-    } else
-      p++;
-  }
-
-  printf("static const unsigned short %s_2charset[%d] = {\n", name, indx);
-  for (i = 0; i < indx; ) {
-    if ((i % 8) == 0) printf(" ");
-    printf(" 0x%04x,", indx2charset[i]);
-    i++;
-    if ((i % 8) == 0 || i == indx) printf("\n");
-  }
-  printf("};\n");
-  printf("\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("static const Summary16 %s_uni2indx_page%02x[%d] = {\n", name,
-           pageblocks[i].start/16, pageblocks[i].end-pageblocks[i].start);
-    for (j1 = pageblocks[i].start; j1 < pageblocks[i].end; ) {
-      if (((16*j1) % 0x100) == 0) printf("  /""* 0x%04x *""/\n", 16*j1);
-      if ((j1 % 4) == 0) printf(" ");
-      printf(" { %4d, 0x%04x },", summary_indx[j1], summary_used[j1]);
-      j1++;
-      if ((j1 % 4) == 0 || j1 == pageblocks[i].end) printf("\n");
-    }
-    printf("};\n");
-  }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    const Summary16 *summary = NULL;\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("    ");
-    if (i > 0)
-      printf("else ");
-    printf("if (wc >= 0x%04x && wc < 0x%04x)\n",
-           16*pageblocks[i].start, 16*pageblocks[i].end);
-    printf("      summary = &%s_uni2indx_page%02x[(wc>>4)", name,
-           pageblocks[i].start/16);
-    if (pageblocks[i].start > 0)
-      printf("-0x%03x", pageblocks[i].start);
-    printf("];\n");
-  }
-  printf("    if (summary) {\n");
-  printf("      unsigned short used = summary->used;\n");
-  printf("      unsigned int i = wc & 0x0f;\n");
-  printf("      if (used & ((unsigned short) 1 << i)) {\n");
-  printf("        unsigned short c;\n");
-  printf("        /* Keep in `used' only the bits 0..i-1. */\n");
-  printf("        used &= ((unsigned short) 1 << i) - 1;\n");
-  printf("        /* Add `summary->indx' and the number of bits set in `used'. */\n");
-  printf("        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);\n");
-  printf("        used = (used & 0x3333) + ((used & 0xcccc) >> 2);\n");
-  printf("        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);\n");
-  printf("        used = (used & 0x00ff) + (used >> 8);\n");
-  printf("        c = %s_2charset[summary->indx + used];\n", name);
-  printf("        r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("        return 2;\n");
-  printf("      }\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/* ISO-2022/EUC specifics */
-
-static int row_byte_normal (int row) { return 0x21+row; }
-static int col_byte_normal (int col) { return 0x21+col; }
-static int byte_row_normal (int byte) { return byte-0x21; }
-static int byte_col_normal (int byte) { return byte-0x21; }
-
-static void do_normal (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Note: On first sight, the jisx0212_2charset[] table seems to be in order,
-   starting from the charset=0x3021/uni=0x4e02 pair. But it's only mostly in
-   order. There are 75 out-of-order values, scattered all throughout the table.
- */
-
-static void do_normal_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-/* CNS 11643 specifics - trick to put two tables into one */
-
-static int row_byte_cns11643 (int row) {
-  return 0x100 * (row / 94) + (row % 94) + 0x21;
-}
-static int byte_row_cns11643 (int byte) {
-  return (byte >= 0x100 && byte < 0x200 ? byte-0x121 :
-          byte >= 0x200 && byte < 0x300 ? byte-0x221+94 :
-          byte >= 0x300 && byte < 0x400 ? byte-0x321+2*94 :
-          -1);
-}
-
-static void do_cns11643_only_uni2charset (const char* name)
-{
-  Encoding enc;
-  int j, x;
-
-  enc.rows = 3*94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_cns11643;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_cns11643;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  invert(&enc);
-  /* Move the 2 plane bits into the unused bits 15 and 7. */
-  for (j = 0; j < 0x10000; j++) {
-    x = enc.uni2charset[j];
-    if (x != 0) {
-      if (x & 0x8080) abort();
-      switch (x >> 16) {
-        case 0: /* plane 1 */ x = (x & 0xffff) | 0x0000; break;
-        case 1: /* plane 2 */ x = (x & 0xffff) | 0x0080; break;
-        case 2: /* plane 3 */ x = (x & 0xffff) | 0x8000; break;
-        default: abort();
-      }
-      enc.uni2charset[j] = x;
-    }
-  }
-  output_uni2charset_sparse(name,&enc);
-}
-
-/* GBK specifics */
-
-static int row_byte_gbk1 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk1 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk1 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk1 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xff)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk1 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-static void do_gbk1_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static int row_byte_gbk2 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk2 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk2 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk2 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xa1)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk2_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 96;
-  enc.row_byte = row_byte_gbk2;
-  enc.col_byte = col_byte_gbk2;
-  enc.byte_row = byte_row_gbk2;
-  enc.byte_col = byte_col_gbk2;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xa1)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static void do_gbk1_only_uni2charset (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* KSC 5601 specifics */
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table_ksc5601 (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      if (scanf(" 0x%x", &j) != 1)
-        exit(1);
-      /* Take only the range covered by KS C 5601.1987-0 = KS C 5601.1989-0
-         = KS X 1001.1992, ignore the rest. */
-      if (!(i1 >= 128+33 && i1 < 128+127 && i2 >= 128+33 && i2 < 128+127))
-        continue;  /* KSC5601 specific */
-      i1 &= 0x7f;  /* KSC5601 specific */
-      i2 &= 0x7f;  /* KSC5601 specific */
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      enc->charset2uni[row][col] = j;
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 33; i1 < 127; i1++)
-      for (i2 = 33; i2 < 127; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-static void do_ksc5601 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table_ksc5601(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Big5 specifics */
-
-static int row_byte_big5 (int row) {
-  return 0xa1+row;
-}
-static int col_byte_big5 (int col) {
-  return (col >= 0x3f ? 0x62 : 0x40) + col;
-}
-static int byte_row_big5 (int byte) {
-  if (byte >= 0xa1 && byte < 0xff)
-    return byte-0xa1;
-  else
-    return -1;
-}
-static int byte_col_big5 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0xa1 && byte < 0xff)
-    return byte-0x62;
-  else
-    return -1;
-}
-
-static void do_big5 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 157;
-  enc.row_byte = row_byte_big5;
-  enc.col_byte = col_byte_big5;
-  enc.byte_row = byte_row_big5;
-  enc.byte_col = byte_col_big5;
-  enc.check_row_expr = "%1$s >= 0xa1 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0xa1";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Johab Hangul specifics */
-
-static int row_byte_johab_hangul (int row) {
-  return 0x84+row;
-}
-static int col_byte_johab_hangul (int col) {
-  return (col >= 0x3e ? 0x43 : 0x41) + col;
-}
-static int byte_row_johab_hangul (int byte) {
-  if (byte >= 0x84 && byte < 0xd4)
-    return byte-0x84;
-  else
-    return -1;
-}
-static int byte_col_johab_hangul (int byte) {
-  if (byte >= 0x41 && byte < 0x7f)
-    return byte-0x41;
-  else if (byte >= 0x81 && byte < 0xff)
-    return byte-0x43;
-  else
-    return -1;
-}
-
-static void do_johab_hangul (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 80;
-  enc.cols = 188;
-  enc.row_byte = row_byte_johab_hangul;
-  enc.col_byte = col_byte_johab_hangul;
-  enc.byte_row = byte_row_johab_hangul;
-  enc.byte_col = byte_col_johab_hangul;
-  enc.check_row_expr = "%1$s >= 0x84 && %1$s < 0xd4";
-  enc.check_col_expr = "(%1$s >= 0x41 && %1$s < 0x7f) || (%1$s >= 0x81 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x84";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x81 ? 0x43 : 0x41)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-/* SJIS specifics */
-
-static int row_byte_sjis (int row) {
-  return (row >= 0x1f ? 0xc1 : 0x81) + row;
-}
-static int col_byte_sjis (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_sjis (int byte) {
-  if (byte >= 0x81 && byte < 0xa0)
-    return byte-0x81;
-  else if (byte >= 0xe0)
-    return byte-0xc1;
-  else
-    return -1;
-}
-static int byte_col_sjis (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xfd)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_sjis (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 188;
-  enc.row_byte = row_byte_sjis;
-  enc.col_byte = col_byte_sjis;
-  enc.byte_row = byte_row_sjis;
-  enc.byte_col = byte_col_sjis;
-  enc.check_row_expr = "(%1$s >= 0x81 && %1$s < 0xa0) || (%1$s >= 0xe0)";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xfd)";
-  enc.byte_row_expr = "%1$s - (%1$s >= 0xe0 ? 0xc1 : 0x81)";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Main program */
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* name;
-
-  if (argc != 3)
-    exit(1);
-  charsetname = argv[1];
-  name = argv[2];
-
-  output_title(charsetname);
-
-  if (!strcmp(name,"gb2312") || !strcmp(name,"gb12345ext")
-      || !strcmp(name,"jisx0208") || !strcmp(name,"jisx0212"))
-    do_normal(name);
-  else if (!strcmp(name,"cns11643_1") || !strcmp(name,"cns11643_2")
-           || !strcmp(name,"cns11643_3"))
-    do_normal_only_charset2uni(name);
-  else if (!strcmp(name,"cns11643_inv"))
-    do_cns11643_only_uni2charset(name);
-  else if (!strcmp(name,"gbkext1"))
-    do_gbk1_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext2"))
-    do_gbk2_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext_inv"))
-    do_gbk1_only_uni2charset(name);
-  else if (!strcmp(name,"cp936ext"))
-    do_gbk1(name);
-  else if (!strcmp(name,"ksc5601"))
-    do_ksc5601(name);
-  else if (!strcmp(name,"big5") || !strcmp(name,"cp950ext"))
-    do_big5(name);
-  else if (!strcmp(name,"johab_hangul"))
-    do_johab_hangul(name);
-  else if (!strcmp(name,"cp932ext"))
-    do_sjis(name);
-  else
-    exit(1);
-
-  return 0;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cp1133.h
+++ /dev/null
@@ -1,92 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1133.h,v 1.3 2000/11/29 17:40:28 dawes Exp $ */
-
-/*
- * IBM-CP1133
- */
-
-static const unsigned short cp1133_2uni_1[64] = {
-  /* 0xa0 */
-  0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, 0x0e8a,
-  0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, 0x0e9a, 0x0e9b,
-  /* 0xb0 */
-  0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, 0x0ea2, 0x0ea3, 0x0ea5,
-  0x0ea7, 0x0eab, 0x0ead, 0x0eae, 0xfffd, 0xfffd, 0xfffd, 0x0eaf,
-  /* 0xc0 */
-  0x0eb0, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8,
-  0x0eb9, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd0 */
-  0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0ec8, 0x0ec9, 0x0eca,
-  0x0ecb, 0x0ecc, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0x20ad,
-};
-static const unsigned short cp1133_2uni_2[16] = {
-  /* 0xf0 */
-  0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
-  0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x00a2, 0x00ac, 0x00a6, 0xfffd,
-};
-
-static int
-cp1133_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xe0) {
-    unsigned short wc = cp1133_2uni_1[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  else if (c < 0xf0) {
-  }
-  else {
-    unsigned short wc = cp1133_2uni_2[c-0xf0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char cp1133_page00[16] = {
-  0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char cp1133_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0x00, 0xa3, 0x00, 0x00, 0xa4, /* 0x80-0x87 */
-  0xa5, 0x00, 0xa7, 0x00, 0x00, 0xa8, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0xa9, 0xaa, 0xab, 0xac, /* 0x90-0x97 */
-  0x00, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, /* 0x98-0x9f */
-  0x00, 0xb4, 0xb5, 0xb6, 0x00, 0xb7, 0x00, 0xb8, /* 0xa0-0xa7 */
-  0x00, 0x00, 0xa6, 0xb9, 0x00, 0xba, 0xbb, 0xbf, /* 0xa8-0xaf */
-  0xc0, 0xca, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, /* 0xb0-0xb7 */
-  0xc7, 0xc8, 0x00, 0xcb, 0xc9, 0xcc, 0x00, 0x00, /* 0xb8-0xbf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */
-  0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, /* 0xc8-0xcf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */
-  0xf8, 0xf9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-cp1133_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = cp1133_page00[wc-0x00a0];
-  else if (wc >= 0x0e80 && wc < 0x0ee0)
-    c = cp1133_page0e[wc-0x0e80];
-  else if (wc == 0x20ad)
-    c = 0xdf;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cp1251.h
+++ /dev/null
@@ -1,117 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1251.h,v 1.1 2000/12/04 18:49:32 dawes Exp $ */
-
-/*
- * CP1251
- */
-#ifdef NEED_TOWC
-
-static const unsigned short cp1251_2uni[128] = {
-  /* 0x80 */
-  0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f,
-  /* 0x90 */
-  0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f,
-  /* 0xa0 */
-  0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
-  0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
-  0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
-  /* 0xc0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xd0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xe0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xf0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-};
-
-static int
-cp1251_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = cp1251_2uni[c-0x80];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char cp1251_page00[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char cp1251_page04[152] = {
-  0x00, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */
-  0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0x00, 0xa1, 0x8f, /* 0x08-0x0f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
-  0x00, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */
-  0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0x00, 0xa2, 0x9f, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char cp1251_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1251_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = cp1251_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0498)
-    c = cp1251_page04[wc-0x0400];
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = cp1251_page20[wc-0x2010];
-  else if (wc == 0x20ac)
-    c = 0x88;
-  else if (wc == 0x2116)
-    c = 0xb9;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cp1255.h
+++ /dev/null
@@ -1,121 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1255.h,v 1.1 2000/12/04 18:49:33 dawes Exp $ */
-
-/*
- * CP1255
- */
-
-static const unsigned short cp1255_2uni[128] = {
-  /* 0x80 */
-  0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x90 */
-  0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa0 */
-  0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
-  /* 0xc0 */
-  0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7,
-  0x05b8, 0x05b9, 0xfffd, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf,
-  /* 0xd0 */
-  0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3,
-  0x05f4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
-  0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
-  /* 0xf0 */
-  0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
-  0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd,
-};
-
-static int
-cp1255_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = cp1255_2uni[c-0x80];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char cp1255_page00[88] = {
-  0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */
-};
-static const unsigned char cp1255_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char cp1255_page05[72] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xb0-0xb7 */
-  0xc8, 0xc9, 0x00, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xb8-0xbf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */
-  0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-static const unsigned char cp1255_page20[56] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1255_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = cp1255_page00[wc-0x00a0];
-  else if (wc == 0x0192)
-    c = 0x83;
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = cp1255_page02[wc-0x02c0];
-  else if (wc >= 0x05b0 && wc < 0x05f8)
-    c = cp1255_page05[wc-0x05b0];
-  else if (wc >= 0x2008 && wc < 0x2040)
-    c = cp1255_page20[wc-0x2008];
-  else if (wc == 0x20aa)
-    c = 0xa4;
-  else if (wc == 0x20ac)
-    c = 0x80;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cp1256.h
+++ /dev/null
@@ -1,135 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cp1256.h,v 1.1 2000/12/04 18:49:34 dawes Exp $ */
-
-/*
- * CP1256
- */
-
-static const unsigned short cp1256_2uni[128] = {
-  /* 0x80 */
-  0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
-  /* 0x90 */
-  0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba,
-  /* 0xa0 */
-  0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f,
-  /* 0xc0 */
-  0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-  0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
-  /* 0xd0 */
-  0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7,
-  0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643,
-  /* 0xe0 */
-  0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7,
-  0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2,
-};
-
-static int
-cp1256_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) cp1256_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char cp1256_page00[96] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0xe0, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0x00, 0x00, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-static const unsigned char cp1256_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char cp1256_page06[208] = {
-  0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, /* 0x30-0x37 */
-  0xd9, 0xda, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, /* 0x40-0x47 */
-  0xe6, 0xec, 0xed, 0xf0, 0xf1, 0xf2, 0xf3, 0xf5, /* 0x48-0x4f */
-  0xf6, 0xf8, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, /* 0x80-0x87 */
-  0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xaa, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-};
-static const unsigned char cp1256_page20[56] = {
-  0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-cp1256_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = cp1256_page00[wc-0x00a0];
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = cp1256_page01[wc-0x0150];
-  else if (wc == 0x02c6)
-    c = 0x88;
-  else if (wc >= 0x0608 && wc < 0x06d8)
-    c = cp1256_page06[wc-0x0608];
-  else if (wc >= 0x2008 && wc < 0x2040)
-    c = cp1256_page20[wc-0x2008];
-  else if (wc == 0x20ac)
-    c = 0x80;
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/cp936ext.h
+++ /dev/null
@@ -1,6250 +1,0 @@
-/*
- * "$Id$"
- *
- * Character encoding support for the Fast Light Tool Kit (FLTK).
- *
- * Copyright 1998-2010 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
- * file is missing or damaged, see the license at:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#ifndef CP936
-#ifdef NEED_TOWC
-static int
-cp936ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  return 0;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static int
-cp936ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  return 0;
-}
-#endif /* NEED_TOMB */
-
-#else
-/*
- * CP936EXT
- */
-#ifdef NEED_TOWC
-
-static const unsigned short cp936ext_2uni_page81[23766] = {
-  /* 0x81 */
-  0x4e02, 0x4e04, 0x4e05, 0x4e06, 0x4e0f, 0x4e12, 0x4e17, 0x4e1f,
-  0x4e20, 0x4e21, 0x4e23, 0x4e26, 0x4e29, 0x4e2e, 0x4e2f, 0x4e31,
-  0x4e33, 0x4e35, 0x4e37, 0x4e3c, 0x4e40, 0x4e41, 0x4e42, 0x4e44,
-  0x4e46, 0x4e4a, 0x4e51, 0x4e55, 0x4e57, 0x4e5a, 0x4e5b, 0x4e62,
-  0x4e63, 0x4e64, 0x4e65, 0x4e67, 0x4e68, 0x4e6a, 0x4e6b, 0x4e6c,
-  0x4e6d, 0x4e6e, 0x4e6f, 0x4e72, 0x4e74, 0x4e75, 0x4e76, 0x4e77,
-  0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7f, 0x4e80,
-  0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e87, 0x4e8a, 0x4e90,
-  0x4e96, 0x4e97, 0x4e99, 0x4e9c, 0x4e9d, 0x4e9e, 0x4ea3, 0x4eaa,
-  0x4eaf, 0x4eb0, 0x4eb1, 0x4eb4, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9,
-  0x4ebc, 0x4ebd, 0x4ebe, 0x4ec8, 0x4ecc, 0x4ecf, 0x4ed0, 0x4ed2,
-  0x4eda, 0x4edb, 0x4edc, 0x4ee0, 0x4ee2, 0x4ee6, 0x4ee7, 0x4ee9,
-  0x4eed, 0x4eee, 0x4eef, 0x4ef1, 0x4ef4, 0x4ef8, 0x4ef9, 0x4efa,
-  0x4efc, 0x4efe, 0x4f00, 0x4f02, 0x4f03, 0x4f04, 0x4f05, 0x4f06,
-  0x4f07, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f13, 0x4f14, 0x4f15,
-  0x4f16, 0x4f1c, 0x4f1d, 0x4f21, 0x4f23, 0x4f28, 0x4f29, 0x4f2c,
-  0x4f2d, 0x4f2e, 0x4f31, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b,
-  0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f44, 0x4f45, 0x4f47,
-  0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56,
-  0x4f61, 0x4f62, 0x4f66, 0x4f68, 0x4f6a, 0x4f6b, 0x4f6d, 0x4f6e,
-  0x4f71, 0x4f72, 0x4f75, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d,
-  0x4f80, 0x4f81, 0x4f82, 0x4f85, 0x4f86, 0x4f87, 0x4f8a, 0x4f8c,
-  0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f95, 0x4f96, 0x4f98, 0x4f99,
-  0x4f9a, 0x4f9c, 0x4f9e, 0x4f9f, 0x4fa1, 0x4fa2,
-  /* 0x82 */
-  0x4fa4, 0x4fab, 0x4fad, 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4,
-  0x4fb6, 0x4fb7, 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd,
-  0x4fbe, 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc6, 0x4fc7, 0x4fc8, 0x4fc9,
-  0x4fcb, 0x4fcc, 0x4fcd, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6,
-  0x4fd9, 0x4fdb, 0x4fe0, 0x4fe2, 0x4fe4, 0x4fe5, 0x4fe7, 0x4feb,
-  0x4fec, 0x4ff0, 0x4ff2, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7, 0x4ff9,
-  0x4ffb, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5002, 0x5003,
-  0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500a, 0x500b,
-  0x500e, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, 0x501b,
-  0x501d, 0x501e, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, 0x502b,
-  0x502f, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036,
-  0x5037, 0x5038, 0x5039, 0x503b, 0x503d, 0x503f, 0x5040, 0x5041,
-  0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504a, 0x504b, 0x504d,
-  0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, 0x5058,
-  0x5059, 0x505b, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, 0x5062,
-  0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, 0x506b,
-  0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074,
-  0x5075, 0x5078, 0x5079, 0x507a, 0x507c, 0x507d, 0x5081, 0x5082,
-  0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508a, 0x508b, 0x508c,
-  0x508e, 0x508f, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095,
-  0x5096, 0x5097, 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, 0x509d,
-  0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50a4, 0x50a6, 0x50aa,
-  0x50ab, 0x50ad, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, 0x50b4,
-  0x50b5, 0x50b6, 0x50b7, 0x50b8, 0x50b9, 0x50bc,
-  /* 0x83 */
-  0x50bd, 0x50be, 0x50bf, 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4,
-  0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc,
-  0x50cd, 0x50ce, 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5,
-  0x50d7, 0x50d8, 0x50d9, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df,
-  0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e8, 0x50e9,
-  0x50ea, 0x50eb, 0x50ef, 0x50f0, 0x50f1, 0x50f2, 0x50f4, 0x50f6,
-  0x50f7, 0x50f8, 0x50f9, 0x50fa, 0x50fc, 0x50fd, 0x50fe, 0x50ff,
-  0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0x5109,
-  0x510a, 0x510c, 0x510d, 0x510e, 0x510f, 0x5110, 0x5111, 0x5113,
-  0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511a, 0x511b,
-  0x511c, 0x511d, 0x511e, 0x511f, 0x5120, 0x5122, 0x5123, 0x5124,
-  0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, 0x512c,
-  0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, 0x5134,
-  0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, 0x513c,
-  0x513d, 0x513e, 0x5142, 0x5147, 0x514a, 0x514c, 0x514e, 0x514f,
-  0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515b, 0x515d,
-  0x515e, 0x515f, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, 0x5167,
-  0x5169, 0x516a, 0x516f, 0x5172, 0x517a, 0x517e, 0x517f, 0x5183,
-  0x5184, 0x5186, 0x5187, 0x518a, 0x518b, 0x518e, 0x518f, 0x5190,
-  0x5191, 0x5193, 0x5194, 0x5198, 0x519a, 0x519d, 0x519e, 0x519f,
-  0x51a1, 0x51a3, 0x51a6, 0x51a7, 0x51a8, 0x51a9, 0x51aa, 0x51ad,
-  0x51ae, 0x51b4, 0x51b8, 0x51b9, 0x51ba, 0x51be, 0x51bf, 0x51c1,
-  0x51c2, 0x51c3, 0x51c5, 0x51c8, 0x51ca, 0x51cd, 0x51ce, 0x51d0,
-  0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7,
-  /* 0x84 */
-  0x51d8, 0x51d9, 0x51da, 0x51dc, 0x51de, 0x51df, 0x51e2, 0x51e3,
-  0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, 0x51ea, 0x51ec, 0x51ee,
-  0x51f1, 0x51f2, 0x51f4, 0x51f7, 0x51fe, 0x5204, 0x5205, 0x5209,
-  0x520b, 0x520c, 0x520f, 0x5210, 0x5213, 0x5214, 0x5215, 0x521c,
-  0x521e, 0x521f, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227,
-  0x522a, 0x522c, 0x522f, 0x5231, 0x5232, 0x5234, 0x5235, 0x523c,
-  0x523e, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524b,
-  0x524e, 0x524f, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0x5259,
-  0x525a, 0x525b, 0x525d, 0x525f, 0x5260, 0x5262, 0x5263, 0x5264,
-  0x5266, 0x5268, 0x526b, 0x526c, 0x526d, 0x526e, 0x5270, 0x5271,
-  0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, 0x527a,
-  0x527b, 0x527c, 0x527e, 0x5280, 0x5283, 0x5284, 0x5285, 0x5286,
-  0x5287, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, 0x528f,
-  0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, 0x5299,
-  0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52ae, 0x52af,
-  0x52b0, 0x52b4, 0x52b5, 0x52b6, 0x52b7, 0x52b8, 0x52b9, 0x52ba,
-  0x52bb, 0x52bc, 0x52bd, 0x52c0, 0x52c1, 0x52c2, 0x52c4, 0x52c5,
-  0x52c6, 0x52c8, 0x52ca, 0x52cc, 0x52cd, 0x52ce, 0x52cf, 0x52d1,
-  0x52d3, 0x52d4, 0x52d5, 0x52d7, 0x52d9, 0x52da, 0x52db, 0x52dc,
-  0x52dd, 0x52de, 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e5, 0x52e6,
-  0x52e7, 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, 0x52ee,
-  0x52ef, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, 0x52f7,
-  0x52f8, 0x52fb, 0x52fc, 0x52fd, 0x5301, 0x5302, 0x5303, 0x5304,
-  0x5307, 0x5309, 0x530a, 0x530b, 0x530c, 0x530e,
-  /* 0x85 */
-  0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531b, 0x531c, 0x531e,
-  0x531f, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b,
-  0x532c, 0x532d, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334,
-  0x5335, 0x5336, 0x5337, 0x5338, 0x533c, 0x533d, 0x5340, 0x5342,
-  0x5344, 0x5346, 0x534b, 0x534c, 0x534d, 0x5350, 0x5354, 0x5358,
-  0x5359, 0x535b, 0x535d, 0x5365, 0x5368, 0x536a, 0x536c, 0x536d,
-  0x5372, 0x5376, 0x5379, 0x537b, 0x537c, 0x537d, 0x537e, 0x5380,
-  0x5381, 0x5383, 0x5387, 0x5388, 0x538a, 0x538e, 0x538f, 0x5390,
-  0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, 0x539b,
-  0x539c, 0x539e, 0x53a0, 0x53a1, 0x53a4, 0x53a7, 0x53aa, 0x53ab,
-  0x53ac, 0x53ad, 0x53af, 0x53b0, 0x53b1, 0x53b2, 0x53b3, 0x53b4,
-  0x53b5, 0x53b7, 0x53b8, 0x53b9, 0x53ba, 0x53bc, 0x53bd, 0x53be,
-  0x53c0, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, 0x53ce, 0x53cf,
-  0x53d0, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dc, 0x53dd, 0x53de,
-  0x53e1, 0x53e2, 0x53e7, 0x53f4, 0x53fa, 0x53fe, 0x53ff, 0x5400,
-  0x5402, 0x5405, 0x5407, 0x540b, 0x5414, 0x5418, 0x5419, 0x541a,
-  0x541c, 0x5422, 0x5424, 0x5425, 0x542a, 0x5430, 0x5433, 0x5436,
-  0x5437, 0x543a, 0x543d, 0x543f, 0x5441, 0x5442, 0x5444, 0x5445,
-  0x5447, 0x5449, 0x544c, 0x544d, 0x544e, 0x544f, 0x5451, 0x545a,
-  0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5463, 0x5465, 0x5467,
-  0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f, 0x5470,
-  0x5474, 0x5479, 0x547a, 0x547e, 0x547f, 0x5481, 0x5483, 0x5485,
-  0x5487, 0x5488, 0x5489, 0x548a, 0x548d, 0x5491, 0x5493, 0x5497,
-  0x5498, 0x549c, 0x549e, 0x549f, 0x54a0, 0x54a1,
-  /* 0x86 */
-  0x54a2, 0x54a5, 0x54ae, 0x54b0, 0x54b2, 0x54b5, 0x54b6, 0x54b7,
-  0x54b9, 0x54ba, 0x54bc, 0x54be, 0x54c3, 0x54c5, 0x54ca, 0x54cb,
-  0x54d6, 0x54d8, 0x54db, 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4,
-  0x54eb, 0x54ec, 0x54ef, 0x54f0, 0x54f1, 0x54f4, 0x54f5, 0x54f6,
-  0x54f7, 0x54f8, 0x54f9, 0x54fb, 0x54fe, 0x5500, 0x5502, 0x5503,
-  0x5504, 0x5505, 0x5508, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e,
-  0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551a,
-  0x551c, 0x551d, 0x551e, 0x551f, 0x5521, 0x5525, 0x5526, 0x5528,
-  0x5529, 0x552b, 0x552d, 0x5532, 0x5534, 0x5535, 0x5536, 0x5538,
-  0x5539, 0x553a, 0x553b, 0x553d, 0x5540, 0x5542, 0x5545, 0x5547,
-  0x5548, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5551, 0x5552,
-  0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, 0x555d,
-  0x555e, 0x555f, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, 0x556b,
-  0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, 0x557a,
-  0x557d, 0x557f, 0x5585, 0x5586, 0x558c, 0x558d, 0x558e, 0x5590,
-  0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559a, 0x559b, 0x559e,
-  0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, 0x55a8,
-  0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af, 0x55b0,
-  0x55b2, 0x55b4, 0x55b6, 0x55b8, 0x55ba, 0x55bc, 0x55bf, 0x55c0,
-  0x55c1, 0x55c2, 0x55c3, 0x55c6, 0x55c7, 0x55c8, 0x55ca, 0x55cb,
-  0x55ce, 0x55cf, 0x55d0, 0x55d5, 0x55d7, 0x55d8, 0x55d9, 0x55da,
-  0x55db, 0x55de, 0x55e0, 0x55e2, 0x55e7, 0x55e9, 0x55ed, 0x55ee,
-  0x55f0, 0x55f1, 0x55f4, 0x55f6, 0x55f8, 0x55f9, 0x55fa, 0x55fb,
-  0x55fc, 0x55ff, 0x5602, 0x5603, 0x5604, 0x5605,
-  /* 0x87 */
-  0x5606, 0x5607, 0x560a, 0x560b, 0x560d, 0x5610, 0x5611, 0x5612,
-  0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561a, 0x561c,
-  0x561d, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629,
-  0x562a, 0x562b, 0x562e, 0x562f, 0x5630, 0x5633, 0x5635, 0x5637,
-  0x5638, 0x563a, 0x563c, 0x563d, 0x563e, 0x5640, 0x5641, 0x5642,
-  0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564a,
-  0x564b, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656,
-  0x565a, 0x565b, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5663,
-  0x5665, 0x5666, 0x5667, 0x566d, 0x566e, 0x566f, 0x5670, 0x5672,
-  0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567a, 0x567d,
-  0x567e, 0x567f, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, 0x5687,
-  0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x5690, 0x5691,
-  0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, 0x569a,
-  0x569b, 0x569c, 0x569d, 0x569e, 0x569f, 0x56a0, 0x56a1, 0x56a2,
-  0x56a4, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56aa, 0x56ab,
-  0x56ac, 0x56ad, 0x56ae, 0x56b0, 0x56b1, 0x56b2, 0x56b3, 0x56b4,
-  0x56b5, 0x56b6, 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bd, 0x56be,
-  0x56bf, 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, 0x56c6,
-  0x56c7, 0x56c8, 0x56c9, 0x56cb, 0x56cc, 0x56cd, 0x56ce, 0x56cf,
-  0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d5, 0x56d6, 0x56d8, 0x56d9,
-  0x56dc, 0x56e3, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, 0x56ea,
-  0x56ec, 0x56ee, 0x56ef, 0x56f2, 0x56f3, 0x56f6, 0x56f7, 0x56f8,
-  0x56fb, 0x56fc, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, 0x570b,
-  0x570c, 0x570d, 0x570e, 0x570f, 0x5710, 0x5711,
-  /* 0x88 */
-  0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719,
-  0x571a, 0x571b, 0x571d, 0x571e, 0x5720, 0x5721, 0x5722, 0x5724,
-  0x5725, 0x5726, 0x5727, 0x572b, 0x5731, 0x5732, 0x5734, 0x5735,
-  0x5736, 0x5737, 0x5738, 0x573c, 0x573d, 0x573f, 0x5741, 0x5743,
-  0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574b, 0x5752, 0x5753,
-  0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765,
-  0x5767, 0x576c, 0x576e, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775,
-  0x5778, 0x5779, 0x577a, 0x577d, 0x577e, 0x577f, 0x5780, 0x5781,
-  0x5787, 0x5788, 0x5789, 0x578a, 0x578d, 0x578e, 0x578f, 0x5790,
-  0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, 0x579a,
-  0x579c, 0x579d, 0x579e, 0x579f, 0x57a5, 0x57a8, 0x57aa, 0x57ac,
-  0x57af, 0x57b0, 0x57b1, 0x57b3, 0x57b5, 0x57b6, 0x57b7, 0x57b9,
-  0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf, 0x57c0, 0x57c1,
-  0x57c4, 0x57c5, 0x57c6, 0x57c7, 0x57c8, 0x57c9, 0x57ca, 0x57cc,
-  0x57cd, 0x57d0, 0x57d1, 0x57d3, 0x57d6, 0x57d7, 0x57db, 0x57dc,
-  0x57de, 0x57e1, 0x57e2, 0x57e3, 0x57e5, 0x57e6, 0x57e7, 0x57e8,
-  0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57f0, 0x57f1, 0x57f2,
-  0x57f3, 0x57f5, 0x57f6, 0x57f7, 0x57fb, 0x57fc, 0x57fe, 0x57ff,
-  0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580a, 0x580c,
-  0x580e, 0x580f, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, 0x5817,
-  0x5818, 0x581a, 0x581b, 0x581c, 0x581d, 0x581f, 0x5822, 0x5823,
-  0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582b, 0x582c, 0x582d,
-  0x582e, 0x582f, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, 0x5837,
-  0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d,
-  /* 0x89 */
-  0x583e, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846,
-  0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584e, 0x584f, 0x5850,
-  0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585a, 0x585b,
-  0x585c, 0x585d, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864,
-  0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586d, 0x586e, 0x586f,
-  0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877,
-  0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587f, 0x5882,
-  0x5884, 0x5886, 0x5887, 0x5888, 0x588a, 0x588b, 0x588c, 0x588d,
-  0x588e, 0x588f, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, 0x5897,
-  0x5898, 0x589b, 0x589c, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a3,
-  0x58a4, 0x58a5, 0x58a6, 0x58a7, 0x58aa, 0x58ab, 0x58ac, 0x58ad,
-  0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, 0x58b5,
-  0x58b6, 0x58b7, 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bd, 0x58be,
-  0x58bf, 0x58c0, 0x58c2, 0x58c3, 0x58c4, 0x58c6, 0x58c7, 0x58c8,
-  0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf, 0x58d0,
-  0x58d2, 0x58d3, 0x58d4, 0x58d6, 0x58d7, 0x58d8, 0x58d9, 0x58da,
-  0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df, 0x58e0, 0x58e1, 0x58e2,
-  0x58e3, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, 0x58ea, 0x58ed,
-  0x58ef, 0x58f1, 0x58f2, 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa,
-  0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff, 0x5900, 0x5901, 0x5903,
-  0x5905, 0x5906, 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, 0x590e,
-  0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591b, 0x591d,
-  0x591e, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, 0x592c,
-  0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593b,
-  /* 0x8a */
-  0x593d, 0x593e, 0x593f, 0x5940, 0x5943, 0x5945, 0x5946, 0x594a,
-  0x594c, 0x594d, 0x5950, 0x5952, 0x5953, 0x5959, 0x595b, 0x595c,
-  0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967,
-  0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f,
-  0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597a, 0x597b, 0x597c,
-  0x597e, 0x597f, 0x5980, 0x5985, 0x5989, 0x598b, 0x598c, 0x598e,
-  0x598f, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599a, 0x599b,
-  0x599c, 0x599d, 0x599f, 0x59a0, 0x59a1, 0x59a2, 0x59a6, 0x59a7,
-  0x59ac, 0x59ad, 0x59b0, 0x59b1, 0x59b3, 0x59b4, 0x59b5, 0x59b6,
-  0x59b7, 0x59b8, 0x59ba, 0x59bc, 0x59bd, 0x59bf, 0x59c0, 0x59c1,
-  0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c7, 0x59c8, 0x59c9, 0x59cc,
-  0x59cd, 0x59ce, 0x59cf, 0x59d5, 0x59d6, 0x59d9, 0x59db, 0x59de,
-  0x59df, 0x59e0, 0x59e1, 0x59e2, 0x59e4, 0x59e6, 0x59e7, 0x59e9,
-  0x59ea, 0x59eb, 0x59ed, 0x59ee, 0x59ef, 0x59f0, 0x59f1, 0x59f2,
-  0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7, 0x59f8, 0x59fa, 0x59fc,
-  0x59fd, 0x59fe, 0x5a00, 0x5a02, 0x5a0a, 0x5a0b, 0x5a0d, 0x5a0e,
-  0x5a0f, 0x5a10, 0x5a12, 0x5a14, 0x5a15, 0x5a16, 0x5a17, 0x5a19,
-  0x5a1a, 0x5a1b, 0x5a1d, 0x5a1e, 0x5a21, 0x5a22, 0x5a24, 0x5a26,
-  0x5a27, 0x5a28, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f,
-  0x5a30, 0x5a33, 0x5a35, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, 0x5a3b,
-  0x5a3d, 0x5a3e, 0x5a3f, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45,
-  0x5a47, 0x5a48, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50,
-  0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a56, 0x5a57, 0x5a58, 0x5a59,
-  0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60,
-  /* 0x8b */
-  0x5a61, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a68, 0x5a69, 0x5a6b,
-  0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73,
-  0x5a78, 0x5a79, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a80, 0x5a81,
-  0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89,
-  0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91,
-  0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97, 0x5a98, 0x5a99, 0x5a9c,
-  0x5a9d, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4,
-  0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, 0x5aab, 0x5aac, 0x5aad,
-  0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab4, 0x5ab6, 0x5ab7, 0x5ab9,
-  0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abf, 0x5ac0, 0x5ac3, 0x5ac4,
-  0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5aca, 0x5acb, 0x5acd, 0x5ace,
-  0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, 0x5ad5, 0x5ad7, 0x5ad9, 0x5ada,
-  0x5adb, 0x5add, 0x5ade, 0x5adf, 0x5ae2, 0x5ae4, 0x5ae5, 0x5ae7,
-  0x5ae8, 0x5aea, 0x5aec, 0x5aed, 0x5aee, 0x5aef, 0x5af0, 0x5af2,
-  0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7, 0x5af8, 0x5af9, 0x5afa,
-  0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff, 0x5b00, 0x5b01, 0x5b02,
-  0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b0a, 0x5b0b,
-  0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b12, 0x5b13,
-  0x5b14, 0x5b15, 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, 0x5b1d,
-  0x5b1e, 0x5b1f, 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25,
-  0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d,
-  0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, 0x5b35, 0x5b36, 0x5b38,
-  0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b41,
-  0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47,
-  /* 0x8c */
-  0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f,
-  0x5b52, 0x5b56, 0x5b5e, 0x5b60, 0x5b61, 0x5b67, 0x5b68, 0x5b6b,
-  0x5b6d, 0x5b6e, 0x5b6f, 0x5b72, 0x5b74, 0x5b76, 0x5b77, 0x5b78,
-  0x5b79, 0x5b7b, 0x5b7c, 0x5b7e, 0x5b7f, 0x5b82, 0x5b86, 0x5b8a,
-  0x5b8d, 0x5b8e, 0x5b90, 0x5b91, 0x5b92, 0x5b94, 0x5b96, 0x5b9f,
-  0x5ba7, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5bae, 0x5baf, 0x5bb1,
-  0x5bb2, 0x5bb7, 0x5bba, 0x5bbb, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bc3,
-  0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcd, 0x5bce, 0x5bcf, 0x5bd1,
-  0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5bdb,
-  0x5bdc, 0x5be0, 0x5be2, 0x5be3, 0x5be6, 0x5be7, 0x5be9, 0x5bea,
-  0x5beb, 0x5bec, 0x5bed, 0x5bef, 0x5bf1, 0x5bf2, 0x5bf3, 0x5bf4,
-  0x5bf5, 0x5bf6, 0x5bf7, 0x5bfd, 0x5bfe, 0x5c00, 0x5c02, 0x5c03,
-  0x5c05, 0x5c07, 0x5c08, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, 0x5c10,
-  0x5c12, 0x5c13, 0x5c17, 0x5c19, 0x5c1b, 0x5c1e, 0x5c1f, 0x5c20,
-  0x5c21, 0x5c23, 0x5c26, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2d,
-  0x5c2e, 0x5c2f, 0x5c30, 0x5c32, 0x5c33, 0x5c35, 0x5c36, 0x5c37,
-  0x5c43, 0x5c44, 0x5c46, 0x5c47, 0x5c4c, 0x5c4d, 0x5c52, 0x5c53,
-  0x5c54, 0x5c56, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d,
-  0x5c5f, 0x5c62, 0x5c64, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b,
-  0x5c6c, 0x5c6d, 0x5c70, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76,
-  0x5c77, 0x5c78, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c80, 0x5c83,
-  0x5c84, 0x5c85, 0x5c86, 0x5c87, 0x5c89, 0x5c8a, 0x5c8b, 0x5c8e,
-  0x5c8f, 0x5c92, 0x5c93, 0x5c95, 0x5c9d, 0x5c9e, 0x5c9f, 0x5ca0,
-  0x5ca1, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7, 0x5ca8,
-  /* 0x8d */
-  0x5caa, 0x5cae, 0x5caf, 0x5cb0, 0x5cb2, 0x5cb4, 0x5cb6, 0x5cb9,
-  0x5cba, 0x5cbb, 0x5cbc, 0x5cbe, 0x5cc0, 0x5cc2, 0x5cc3, 0x5cc5,
-  0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, 0x5cca, 0x5ccc, 0x5ccd, 0x5cce,
-  0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7,
-  0x5cd8, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf, 0x5ce0,
-  0x5ce2, 0x5ce3, 0x5ce7, 0x5ce9, 0x5ceb, 0x5cec, 0x5cee, 0x5cef,
-  0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7, 0x5cf8,
-  0x5cf9, 0x5cfa, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff, 0x5d00, 0x5d01,
-  0x5d04, 0x5d05, 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0d,
-  0x5d0f, 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d15, 0x5d17, 0x5d18,
-  0x5d19, 0x5d1a, 0x5d1c, 0x5d1d, 0x5d1f, 0x5d20, 0x5d21, 0x5d22,
-  0x5d23, 0x5d25, 0x5d28, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2f, 0x5d30,
-  0x5d31, 0x5d32, 0x5d33, 0x5d35, 0x5d36, 0x5d37, 0x5d38, 0x5d39,
-  0x5d3a, 0x5d3b, 0x5d3c, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, 0x5d43,
-  0x5d44, 0x5d45, 0x5d46, 0x5d48, 0x5d49, 0x5d4d, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57,
-  0x5d59, 0x5d5a, 0x5d5c, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, 0x5d62,
-  0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d6a, 0x5d6d,
-  0x5d6e, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d75, 0x5d76, 0x5d77,
-  0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5d7f,
-  0x5d80, 0x5d81, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, 0x5d88,
-  0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f, 0x5d90,
-  0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97, 0x5d98,
-  0x5d9a, 0x5d9b, 0x5d9c, 0x5d9e, 0x5d9f, 0x5da0,
-  /* 0x8e */
-  0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7, 0x5da8,
-  0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf, 0x5db0,
-  0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db8, 0x5db9,
-  0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf, 0x5dc0, 0x5dc1,
-  0x5dc2, 0x5dc3, 0x5dc4, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, 0x5dca,
-  0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3,
-  0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7, 0x5dd8, 0x5dd9, 0x5dda, 0x5ddc,
-  0x5ddf, 0x5de0, 0x5de3, 0x5de4, 0x5dea, 0x5dec, 0x5ded, 0x5df0,
-  0x5df5, 0x5df6, 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, 0x5dff,
-  0x5e00, 0x5e04, 0x5e07, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0d, 0x5e0e,
-  0x5e12, 0x5e13, 0x5e17, 0x5e1e, 0x5e1f, 0x5e20, 0x5e21, 0x5e22,
-  0x5e23, 0x5e24, 0x5e25, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c,
-  0x5e2f, 0x5e30, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e39,
-  0x5e3a, 0x5e3e, 0x5e3f, 0x5e40, 0x5e41, 0x5e43, 0x5e46, 0x5e47,
-  0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4d, 0x5e4e, 0x5e4f, 0x5e50,
-  0x5e51, 0x5e52, 0x5e53, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a,
-  0x5e5c, 0x5e5d, 0x5e5f, 0x5e60, 0x5e63, 0x5e64, 0x5e65, 0x5e66,
-  0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e,
-  0x5e6f, 0x5e70, 0x5e71, 0x5e75, 0x5e77, 0x5e79, 0x5e7e, 0x5e81,
-  0x5e82, 0x5e83, 0x5e85, 0x5e88, 0x5e89, 0x5e8c, 0x5e8d, 0x5e8e,
-  0x5e92, 0x5e98, 0x5e9b, 0x5e9d, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4,
-  0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, 0x5eb0,
-  0x5eb1, 0x5eb2, 0x5eb4, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, 0x5ebf,
-  0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5,
-  /* 0x8f */
-  0x5ec6, 0x5ec7, 0x5ec8, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf,
-  0x5ed0, 0x5ed4, 0x5ed5, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edc,
-  0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4,
-  0x5ee5, 0x5ee6, 0x5ee7, 0x5ee9, 0x5eeb, 0x5eec, 0x5eed, 0x5eee,
-  0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef5, 0x5ef8, 0x5ef9,
-  0x5efb, 0x5efc, 0x5efd, 0x5f05, 0x5f06, 0x5f07, 0x5f09, 0x5f0c,
-  0x5f0d, 0x5f0e, 0x5f10, 0x5f12, 0x5f14, 0x5f16, 0x5f19, 0x5f1a,
-  0x5f1c, 0x5f1d, 0x5f1e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28,
-  0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f32, 0x5f33, 0x5f34, 0x5f35,
-  0x5f36, 0x5f37, 0x5f38, 0x5f3b, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f41,
-  0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49,
-  0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f51, 0x5f54,
-  0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5e, 0x5f5f, 0x5f60, 0x5f63,
-  0x5f65, 0x5f67, 0x5f68, 0x5f6b, 0x5f6e, 0x5f6f, 0x5f72, 0x5f74,
-  0x5f75, 0x5f76, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f7f, 0x5f83,
-  0x5f86, 0x5f8d, 0x5f8e, 0x5f8f, 0x5f91, 0x5f93, 0x5f94, 0x5f96,
-  0x5f9a, 0x5f9b, 0x5f9d, 0x5f9e, 0x5f9f, 0x5fa0, 0x5fa2, 0x5fa3,
-  0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa9, 0x5fab, 0x5fac, 0x5faf,
-  0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb6, 0x5fb8, 0x5fb9,
-  0x5fba, 0x5fbb, 0x5fbe, 0x5fbf, 0x5fc0, 0x5fc1, 0x5fc2, 0x5fc7,
-  0x5fc8, 0x5fca, 0x5fcb, 0x5fce, 0x5fd3, 0x5fd4, 0x5fd5, 0x5fda,
-  0x5fdb, 0x5fdc, 0x5fde, 0x5fdf, 0x5fe2, 0x5fe3, 0x5fe5, 0x5fe6,
-  0x5fe8, 0x5fe9, 0x5fec, 0x5fef, 0x5ff0, 0x5ff2, 0x5ff3, 0x5ff4,
-  0x5ff6, 0x5ff7, 0x5ff9, 0x5ffa, 0x5ffc, 0x6007,
-  /* 0x90 */
-  0x6008, 0x6009, 0x600b, 0x600c, 0x6010, 0x6011, 0x6013, 0x6017,
-  0x6018, 0x601a, 0x601e, 0x601f, 0x6022, 0x6023, 0x6024, 0x602c,
-  0x602d, 0x602e, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036,
-  0x6037, 0x6038, 0x6039, 0x603a, 0x603d, 0x603e, 0x6040, 0x6044,
-  0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604c, 0x604e,
-  0x604f, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605b,
-  0x605c, 0x605e, 0x605f, 0x6060, 0x6061, 0x6065, 0x6066, 0x606e,
-  0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607e, 0x6080, 0x6081,
-  0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608a, 0x608b, 0x608e,
-  0x608f, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, 0x6099,
-  0x609c, 0x609e, 0x60a1, 0x60a2, 0x60a4, 0x60a5, 0x60a7, 0x60a9,
-  0x60aa, 0x60ae, 0x60b0, 0x60b3, 0x60b5, 0x60b6, 0x60b7, 0x60b9,
-  0x60ba, 0x60bd, 0x60be, 0x60bf, 0x60c0, 0x60c1, 0x60c2, 0x60c3,
-  0x60c4, 0x60c7, 0x60c8, 0x60c9, 0x60cc, 0x60cd, 0x60ce, 0x60cf,
-  0x60d0, 0x60d2, 0x60d3, 0x60d4, 0x60d6, 0x60d7, 0x60d9, 0x60db,
-  0x60de, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60ea, 0x60f1,
-  0x60f2, 0x60f5, 0x60f7, 0x60f8, 0x60fb, 0x60fc, 0x60fd, 0x60fe,
-  0x60ff, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610a, 0x610b,
-  0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117,
-  0x6118, 0x6119, 0x611b, 0x611c, 0x611d, 0x611e, 0x6121, 0x6122,
-  0x6125, 0x6128, 0x6129, 0x612a, 0x612c, 0x612d, 0x612e, 0x612f,
-  0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137,
-  0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x6140,
-  0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146,
-  /* 0x91 */
-  0x6147, 0x6149, 0x614b, 0x614d, 0x614f, 0x6150, 0x6152, 0x6153,
-  0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c,
-  0x615e, 0x615f, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166,
-  0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6171,
-  0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617a, 0x617b,
-  0x617c, 0x617d, 0x617e, 0x617f, 0x6180, 0x6181, 0x6182, 0x6183,
-  0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618c,
-  0x618d, 0x618f, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0x6196,
-  0x6197, 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619e, 0x619f,
-  0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, 0x61aa,
-  0x61ab, 0x61ad, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b2, 0x61b3,
-  0x61b4, 0x61b5, 0x61b6, 0x61b8, 0x61b9, 0x61ba, 0x61bb, 0x61bc,
-  0x61bd, 0x61bf, 0x61c0, 0x61c1, 0x61c3, 0x61c4, 0x61c5, 0x61c6,
-  0x61c7, 0x61c9, 0x61cc, 0x61cd, 0x61ce, 0x61cf, 0x61d0, 0x61d3,
-  0x61d5, 0x61d6, 0x61d7, 0x61d8, 0x61d9, 0x61da, 0x61db, 0x61dc,
-  0x61dd, 0x61de, 0x61df, 0x61e0, 0x61e1, 0x61e2, 0x61e3, 0x61e4,
-  0x61e5, 0x61e7, 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, 0x61ed,
-  0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, 0x61f6,
-  0x61f7, 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, 0x61fe,
-  0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, 0x6209,
-  0x6213, 0x6214, 0x6219, 0x621c, 0x621d, 0x621e, 0x6220, 0x6223,
-  0x6226, 0x6227, 0x6228, 0x6229, 0x622b, 0x622d, 0x622f, 0x6230,
-  0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623a, 0x623b,
-  0x623c, 0x6242, 0x6244, 0x6245, 0x6246, 0x624a,
-  /* 0x92 */
-  0x624f, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625a, 0x625c,
-  0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265,
-  0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627a,
-  0x627b, 0x627d, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287,
-  0x6288, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f, 0x6290, 0x6294,
-  0x6299, 0x629c, 0x629d, 0x629e, 0x62a3, 0x62a6, 0x62a7, 0x62a9,
-  0x62aa, 0x62ad, 0x62ae, 0x62af, 0x62b0, 0x62b2, 0x62b3, 0x62b4,
-  0x62b6, 0x62b7, 0x62b8, 0x62ba, 0x62be, 0x62c0, 0x62c1, 0x62c3,
-  0x62cb, 0x62cf, 0x62d1, 0x62d5, 0x62dd, 0x62de, 0x62e0, 0x62e1,
-  0x62e4, 0x62ea, 0x62eb, 0x62f0, 0x62f2, 0x62f5, 0x62f8, 0x62f9,
-  0x62fa, 0x62fb, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, 0x630a,
-  0x630b, 0x630c, 0x630d, 0x630f, 0x6310, 0x6312, 0x6313, 0x6314,
-  0x6315, 0x6317, 0x6318, 0x6319, 0x631c, 0x6326, 0x6327, 0x6329,
-  0x632c, 0x632d, 0x632e, 0x6330, 0x6331, 0x6333, 0x6334, 0x6335,
-  0x6336, 0x6337, 0x6338, 0x633b, 0x633c, 0x633e, 0x633f, 0x6340,
-  0x6341, 0x6344, 0x6347, 0x6348, 0x634a, 0x6351, 0x6352, 0x6353,
-  0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c,
-  0x635d, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636a, 0x636b,
-  0x636c, 0x636f, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, 0x6378,
-  0x6379, 0x637c, 0x637d, 0x637e, 0x637f, 0x6381, 0x6383, 0x6384,
-  0x6385, 0x6386, 0x638b, 0x638d, 0x6391, 0x6393, 0x6394, 0x6395,
-  0x6397, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, 0x639f,
-  0x63a1, 0x63a4, 0x63a6, 0x63ab, 0x63af, 0x63b1, 0x63b2, 0x63b5,
-  0x63b6, 0x63b9, 0x63bb, 0x63bd, 0x63bf, 0x63c0,
-  /* 0x93 */
-  0x63c1, 0x63c2, 0x63c3, 0x63c5, 0x63c7, 0x63c8, 0x63ca, 0x63cb,
-  0x63cc, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63d9,
-  0x63da, 0x63db, 0x63dc, 0x63dd, 0x63df, 0x63e2, 0x63e4, 0x63e5,
-  0x63e6, 0x63e7, 0x63e8, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0,
-  0x63f1, 0x63f3, 0x63f5, 0x63f7, 0x63f9, 0x63fa, 0x63fb, 0x63fc,
-  0x63fe, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640a,
-  0x640d, 0x640e, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418,
-  0x6419, 0x641a, 0x641d, 0x641f, 0x6422, 0x6423, 0x6424, 0x6425,
-  0x6427, 0x6428, 0x6429, 0x642b, 0x642e, 0x642f, 0x6430, 0x6431,
-  0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, 0x643b,
-  0x643c, 0x643e, 0x6440, 0x6442, 0x6443, 0x6449, 0x644b, 0x644c,
-  0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, 0x6455, 0x6456,
-  0x6457, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460,
-  0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, 0x646a,
-  0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473,
-  0x6474, 0x6475, 0x6476, 0x6477, 0x647b, 0x647c, 0x647d, 0x647e,
-  0x647f, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, 0x648a,
-  0x648b, 0x648c, 0x648d, 0x648e, 0x648f, 0x6490, 0x6493, 0x6494,
-  0x6497, 0x6498, 0x649a, 0x649b, 0x649c, 0x649d, 0x649f, 0x64a0,
-  0x64a1, 0x64a2, 0x64a3, 0x64a5, 0x64a6, 0x64a7, 0x64a8, 0x64aa,
-  0x64ab, 0x64af, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b6, 0x64b9,
-  0x64bb, 0x64bd, 0x64be, 0x64bf, 0x64c1, 0x64c3, 0x64c4, 0x64c6,
-  0x64c7, 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cf, 0x64d1,
-  0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d9, 0x64da,
-  /* 0x94 */
-  0x64db, 0x64dc, 0x64dd, 0x64df, 0x64e0, 0x64e1, 0x64e3, 0x64e5,
-  0x64e7, 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee,
-  0x64ef, 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6,
-  0x64f7, 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe,
-  0x64ff, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507,
-  0x6508, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f, 0x6510,
-  0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651a,
-  0x651b, 0x651c, 0x651d, 0x651e, 0x651f, 0x6520, 0x6521, 0x6522,
-  0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, 0x652c,
-  0x652d, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653a, 0x653c,
-  0x653d, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, 0x6547,
-  0x654a, 0x654b, 0x654d, 0x654e, 0x6550, 0x6552, 0x6553, 0x6554,
-  0x6557, 0x6558, 0x655a, 0x655c, 0x655f, 0x6560, 0x6561, 0x6564,
-  0x6565, 0x6567, 0x6568, 0x6569, 0x656a, 0x656d, 0x656e, 0x656f,
-  0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657a, 0x657b,
-  0x657c, 0x657d, 0x657e, 0x657f, 0x6580, 0x6581, 0x6582, 0x6583,
-  0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658a, 0x658d, 0x658e,
-  0x658f, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659a, 0x659d,
-  0x659e, 0x65a0, 0x65a2, 0x65a3, 0x65a6, 0x65a8, 0x65aa, 0x65ac,
-  0x65ae, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, 0x65b7,
-  0x65b8, 0x65ba, 0x65bb, 0x65be, 0x65bf, 0x65c0, 0x65c2, 0x65c7,
-  0x65c8, 0x65c9, 0x65ca, 0x65cd, 0x65d0, 0x65d1, 0x65d3, 0x65d4,
-  0x65d5, 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, 0x65de,
-  0x65df, 0x65e1, 0x65e3, 0x65e4, 0x65ea, 0x65eb,
-  /* 0x95 */
-  0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f8, 0x65f9, 0x65fb, 0x65fc,
-  0x65fd, 0x65fe, 0x65ff, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608,
-  0x6609, 0x660b, 0x660d, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617,
-  0x6618, 0x661a, 0x661b, 0x661c, 0x661e, 0x6621, 0x6622, 0x6623,
-  0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630,
-  0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663d,
-  0x663f, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648,
-  0x6649, 0x664a, 0x664d, 0x664e, 0x6650, 0x6651, 0x6658, 0x6659,
-  0x665b, 0x665c, 0x665d, 0x665e, 0x6660, 0x6662, 0x6663, 0x6665,
-  0x6667, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x6671, 0x6672,
-  0x6673, 0x6675, 0x6678, 0x6679, 0x667b, 0x667c, 0x667d, 0x667f,
-  0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, 0x668a,
-  0x668b, 0x668d, 0x668e, 0x668f, 0x6690, 0x6692, 0x6693, 0x6694,
-  0x6695, 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669e, 0x669f,
-  0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, 0x66a9,
-  0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66af, 0x66b0, 0x66b1, 0x66b2,
-  0x66b3, 0x66b5, 0x66b6, 0x66b7, 0x66b8, 0x66ba, 0x66bb, 0x66bc,
-  0x66bd, 0x66bf, 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, 0x66c5,
-  0x66c6, 0x66c7, 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, 0x66cd,
-  0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, 0x66d5,
-  0x66d6, 0x66d7, 0x66d8, 0x66da, 0x66de, 0x66df, 0x66e0, 0x66e1,
-  0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e7, 0x66e8, 0x66ea, 0x66eb,
-  0x66ec, 0x66ed, 0x66ee, 0x66ef, 0x66f1, 0x66f5, 0x66f6, 0x66f8,
-  0x66fa, 0x66fb, 0x66fd, 0x6701, 0x6702, 0x6703,
-  /* 0x96 */
-  0x6704, 0x6705, 0x6706, 0x6707, 0x670c, 0x670e, 0x670f, 0x6711,
-  0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671a, 0x671c, 0x671e,
-  0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729,
-  0x672e, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739,
-  0x673b, 0x673c, 0x673e, 0x673f, 0x6741, 0x6744, 0x6745, 0x6747,
-  0x674a, 0x674b, 0x674d, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758,
-  0x6759, 0x675a, 0x675b, 0x675d, 0x6762, 0x6763, 0x6764, 0x6766,
-  0x6767, 0x676b, 0x676c, 0x676e, 0x6771, 0x6774, 0x6776, 0x6778,
-  0x6779, 0x677a, 0x677b, 0x677d, 0x6780, 0x6782, 0x6783, 0x6785,
-  0x6786, 0x6788, 0x678a, 0x678c, 0x678d, 0x678e, 0x678f, 0x6791,
-  0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679b, 0x679f, 0x67a0,
-  0x67a1, 0x67a4, 0x67a6, 0x67a9, 0x67ac, 0x67ae, 0x67b1, 0x67b2,
-  0x67b4, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, 0x67bf,
-  0x67c0, 0x67c2, 0x67c5, 0x67c6, 0x67c7, 0x67c8, 0x67c9, 0x67ca,
-  0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67d5, 0x67d6, 0x67d7, 0x67db,
-  0x67df, 0x67e1, 0x67e3, 0x67e4, 0x67e6, 0x67e7, 0x67e8, 0x67ea,
-  0x67eb, 0x67ed, 0x67ee, 0x67f2, 0x67f5, 0x67f6, 0x67f7, 0x67f8,
-  0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fe, 0x6801, 0x6802, 0x6803,
-  0x6804, 0x6806, 0x680d, 0x6810, 0x6812, 0x6814, 0x6815, 0x6818,
-  0x6819, 0x681a, 0x681b, 0x681c, 0x681e, 0x681f, 0x6820, 0x6822,
-  0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682b, 0x682c,
-  0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6834, 0x6835, 0x6836,
-  0x683a, 0x683b, 0x683f, 0x6847, 0x684b, 0x684d, 0x684f, 0x6852,
-  0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b,
-  /* 0x97 */
-  0x685c, 0x685d, 0x685e, 0x685f, 0x686a, 0x686c, 0x686d, 0x686e,
-  0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879,
-  0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f, 0x6880, 0x6882,
-  0x6884, 0x6887, 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d,
-  0x688e, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898,
-  0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f, 0x68a0,
-  0x68a1, 0x68a3, 0x68a4, 0x68a5, 0x68a9, 0x68aa, 0x68ab, 0x68ac,
-  0x68ae, 0x68b1, 0x68b2, 0x68b4, 0x68b6, 0x68b7, 0x68b8, 0x68b9,
-  0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf, 0x68c1, 0x68c3,
-  0x68c4, 0x68c5, 0x68c6, 0x68c7, 0x68c8, 0x68ca, 0x68cc, 0x68ce,
-  0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d4, 0x68d6, 0x68d7, 0x68d9,
-  0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df, 0x68e1, 0x68e2, 0x68e4,
-  0x68e5, 0x68e6, 0x68e7, 0x68e8, 0x68e9, 0x68ea, 0x68eb, 0x68ec,
-  0x68ed, 0x68ef, 0x68f2, 0x68f3, 0x68f4, 0x68f6, 0x68f7, 0x68f8,
-  0x68fb, 0x68fd, 0x68fe, 0x68ff, 0x6900, 0x6902, 0x6903, 0x6904,
-  0x6906, 0x6907, 0x6908, 0x6909, 0x690a, 0x690c, 0x690f, 0x6911,
-  0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, 0x691a,
-  0x691b, 0x691c, 0x691d, 0x691e, 0x6921, 0x6922, 0x6923, 0x6925,
-  0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692e,
-  0x692f, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, 0x6938,
-  0x693a, 0x693b, 0x693c, 0x693e, 0x6940, 0x6941, 0x6943, 0x6944,
-  0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694b, 0x694c,
-  0x694d, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, 0x6955,
-  0x6956, 0x6958, 0x6959, 0x695b, 0x695c, 0x695f,
-  /* 0x98 */
-  0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696a,
-  0x696c, 0x696d, 0x696f, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975,
-  0x6976, 0x697a, 0x697b, 0x697d, 0x697e, 0x697f, 0x6981, 0x6983,
-  0x6985, 0x698a, 0x698b, 0x698c, 0x698e, 0x698f, 0x6990, 0x6991,
-  0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699a, 0x699d, 0x699e,
-  0x699f, 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6,
-  0x69a9, 0x69aa, 0x69ac, 0x69ae, 0x69af, 0x69b0, 0x69b2, 0x69b3,
-  0x69b5, 0x69b6, 0x69b8, 0x69b9, 0x69ba, 0x69bc, 0x69bd, 0x69be,
-  0x69bf, 0x69c0, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, 0x69c7,
-  0x69c8, 0x69c9, 0x69cb, 0x69cd, 0x69cf, 0x69d1, 0x69d2, 0x69d3,
-  0x69d5, 0x69d6, 0x69d7, 0x69d8, 0x69d9, 0x69da, 0x69dc, 0x69dd,
-  0x69de, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, 0x69e7,
-  0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ee, 0x69ef, 0x69f0,
-  0x69f1, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7, 0x69f8, 0x69f9,
-  0x69fa, 0x69fb, 0x69fc, 0x69fe, 0x6a00, 0x6a01, 0x6a02, 0x6a03,
-  0x6a04, 0x6a05, 0x6a06, 0x6a07, 0x6a08, 0x6a09, 0x6a0b, 0x6a0c,
-  0x6a0d, 0x6a0e, 0x6a0f, 0x6a10, 0x6a11, 0x6a12, 0x6a13, 0x6a14,
-  0x6a15, 0x6a16, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, 0x6a1e,
-  0x6a20, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a29,
-  0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a30, 0x6a32, 0x6a33, 0x6a34,
-  0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3f,
-  0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a45, 0x6a46, 0x6a48, 0x6a49,
-  0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a51, 0x6a52,
-  0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a5a,
-  /* 0x99 */
-  0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a62, 0x6a63, 0x6a64,
-  0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d,
-  0x6a6e, 0x6a6f, 0x6a70, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76,
-  0x6a77, 0x6a78, 0x6a7a, 0x6a7b, 0x6a7d, 0x6a7e, 0x6a7f, 0x6a81,
-  0x6a82, 0x6a83, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, 0x6a8a,
-  0x6a8b, 0x6a8c, 0x6a8d, 0x6a8f, 0x6a92, 0x6a93, 0x6a94, 0x6a95,
-  0x6a96, 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e,
-  0x6a9f, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x6aa7,
-  0x6aa8, 0x6aaa, 0x6aad, 0x6aae, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab2,
-  0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, 0x6aba,
-  0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf, 0x6ac0, 0x6ac1, 0x6ac2,
-  0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, 0x6aca,
-  0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf, 0x6ad0, 0x6ad1, 0x6ad2,
-  0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7, 0x6ad8, 0x6ad9, 0x6ada,
-  0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf, 0x6ae0, 0x6ae1, 0x6ae2,
-  0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7, 0x6ae8, 0x6ae9, 0x6aea,
-  0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef, 0x6af0, 0x6af1, 0x6af2,
-  0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7, 0x6af8, 0x6af9, 0x6afa,
-  0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff, 0x6b00, 0x6b01, 0x6b02,
-  0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, 0x6b08, 0x6b09, 0x6b0a,
-  0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f, 0x6b10, 0x6b11, 0x6b12,
-  0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17, 0x6b18, 0x6b19, 0x6b1a,
-  0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f, 0x6b25, 0x6b26, 0x6b28,
-  0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e,
-  /* 0x9a */
-  0x6b2f, 0x6b30, 0x6b31, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b38,
-  0x6b3b, 0x6b3c, 0x6b3d, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b44,
-  0x6b45, 0x6b48, 0x6b4a, 0x6b4b, 0x6b4d, 0x6b4e, 0x6b4f, 0x6b50,
-  0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58,
-  0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f, 0x6b60, 0x6b61,
-  0x6b68, 0x6b69, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b70,
-  0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77, 0x6b78,
-  0x6b7a, 0x6b7d, 0x6b7e, 0x6b7f, 0x6b80, 0x6b85, 0x6b88, 0x6b8c,
-  0x6b8e, 0x6b8f, 0x6b90, 0x6b91, 0x6b94, 0x6b95, 0x6b97, 0x6b98,
-  0x6b99, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3,
-  0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, 0x6ba8, 0x6ba9, 0x6bab, 0x6bac,
-  0x6bad, 0x6bae, 0x6baf, 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb6, 0x6bb8,
-  0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bc0, 0x6bc3,
-  0x6bc4, 0x6bc6, 0x6bc7, 0x6bc8, 0x6bc9, 0x6bca, 0x6bcc, 0x6bce,
-  0x6bd0, 0x6bd1, 0x6bd8, 0x6bda, 0x6bdc, 0x6bdd, 0x6bde, 0x6bdf,
-  0x6be0, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7, 0x6be8,
-  0x6be9, 0x6bec, 0x6bed, 0x6bee, 0x6bf0, 0x6bf1, 0x6bf2, 0x6bf4,
-  0x6bf6, 0x6bf7, 0x6bf8, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfe, 0x6bff,
-  0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c08, 0x6c09, 0x6c0a,
-  0x6c0b, 0x6c0c, 0x6c0e, 0x6c12, 0x6c17, 0x6c1c, 0x6c1d, 0x6c1e,
-  0x6c20, 0x6c23, 0x6c25, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c31, 0x6c33,
-  0x6c36, 0x6c37, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3e, 0x6c3f,
-  0x6c43, 0x6c44, 0x6c45, 0x6c48, 0x6c4b, 0x6c4c, 0x6c4d, 0x6c4e,
-  0x6c4f, 0x6c51, 0x6c52, 0x6c53, 0x6c56, 0x6c58,
-  /* 0x9b */
-  0x6c59, 0x6c5a, 0x6c62, 0x6c63, 0x6c65, 0x6c66, 0x6c67, 0x6c6b,
-  0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c71, 0x6c73, 0x6c75, 0x6c77,
-  0x6c78, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7f, 0x6c80, 0x6c84, 0x6c87,
-  0x6c8a, 0x6c8b, 0x6c8d, 0x6c8e, 0x6c91, 0x6c92, 0x6c95, 0x6c96,
-  0x6c97, 0x6c98, 0x6c9a, 0x6c9c, 0x6c9d, 0x6c9e, 0x6ca0, 0x6ca2,
-  0x6ca8, 0x6cac, 0x6caf, 0x6cb0, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7,
-  0x6cba, 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc6, 0x6cc7, 0x6cc8,
-  0x6ccb, 0x6ccd, 0x6cce, 0x6ccf, 0x6cd1, 0x6cd2, 0x6cd8, 0x6cd9,
-  0x6cda, 0x6cdc, 0x6cdd, 0x6cdf, 0x6ce4, 0x6ce6, 0x6ce7, 0x6ce9,
-  0x6cec, 0x6ced, 0x6cf2, 0x6cf4, 0x6cf9, 0x6cff, 0x6d00, 0x6d02,
-  0x6d03, 0x6d05, 0x6d06, 0x6d08, 0x6d09, 0x6d0a, 0x6d0d, 0x6d0f,
-  0x6d10, 0x6d11, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d18, 0x6d1c,
-  0x6d1d, 0x6d1f, 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d26,
-  0x6d28, 0x6d29, 0x6d2c, 0x6d2d, 0x6d2f, 0x6d30, 0x6d34, 0x6d36,
-  0x6d37, 0x6d38, 0x6d3a, 0x6d3f, 0x6d40, 0x6d42, 0x6d44, 0x6d49,
-  0x6d4c, 0x6d50, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d5b, 0x6d5d,
-  0x6d5f, 0x6d61, 0x6d62, 0x6d64, 0x6d65, 0x6d67, 0x6d68, 0x6d6b,
-  0x6d6c, 0x6d6d, 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d75, 0x6d76,
-  0x6d79, 0x6d7a, 0x6d7b, 0x6d7d, 0x6d7e, 0x6d7f, 0x6d80, 0x6d81,
-  0x6d83, 0x6d84, 0x6d86, 0x6d87, 0x6d8a, 0x6d8b, 0x6d8d, 0x6d8f,
-  0x6d90, 0x6d92, 0x6d96, 0x6d97, 0x6d98, 0x6d99, 0x6d9a, 0x6d9c,
-  0x6da2, 0x6da5, 0x6dac, 0x6dad, 0x6db0, 0x6db1, 0x6db3, 0x6db4,
-  0x6db6, 0x6db7, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, 0x6dbe,
-  0x6dc1, 0x6dc2, 0x6dc3, 0x6dc8, 0x6dc9, 0x6dca,
-  /* 0x9c */
-  0x6dcd, 0x6dce, 0x6dcf, 0x6dd0, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5,
-  0x6dd7, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddf, 0x6de2, 0x6de3, 0x6de5,
-  0x6de7, 0x6de8, 0x6de9, 0x6dea, 0x6ded, 0x6def, 0x6df0, 0x6df2,
-  0x6df4, 0x6df5, 0x6df6, 0x6df8, 0x6dfa, 0x6dfd, 0x6dfe, 0x6dff,
-  0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e06, 0x6e07, 0x6e08,
-  0x6e09, 0x6e0b, 0x6e0f, 0x6e12, 0x6e13, 0x6e15, 0x6e18, 0x6e19,
-  0x6e1b, 0x6e1c, 0x6e1e, 0x6e1f, 0x6e22, 0x6e26, 0x6e27, 0x6e28,
-  0x6e2a, 0x6e2c, 0x6e2e, 0x6e30, 0x6e31, 0x6e33, 0x6e35, 0x6e36,
-  0x6e37, 0x6e39, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f, 0x6e40,
-  0x6e41, 0x6e42, 0x6e45, 0x6e46, 0x6e47, 0x6e48, 0x6e49, 0x6e4a,
-  0x6e4b, 0x6e4c, 0x6e4f, 0x6e50, 0x6e51, 0x6e52, 0x6e55, 0x6e57,
-  0x6e59, 0x6e5a, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e60, 0x6e61, 0x6e62,
-  0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a,
-  0x6e6c, 0x6e6d, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e73, 0x6e74,
-  0x6e75, 0x6e76, 0x6e77, 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, 0x6e7c,
-  0x6e7d, 0x6e80, 0x6e81, 0x6e82, 0x6e84, 0x6e87, 0x6e88, 0x6e8a,
-  0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e91, 0x6e92, 0x6e93, 0x6e94,
-  0x6e95, 0x6e96, 0x6e97, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9d, 0x6e9e,
-  0x6ea0, 0x6ea1, 0x6ea3, 0x6ea4, 0x6ea6, 0x6ea8, 0x6ea9, 0x6eab,
-  0x6eac, 0x6ead, 0x6eae, 0x6eb0, 0x6eb3, 0x6eb5, 0x6eb8, 0x6eb9,
-  0x6ebc, 0x6ebe, 0x6ebf, 0x6ec0, 0x6ec3, 0x6ec4, 0x6ec5, 0x6ec6,
-  0x6ec8, 0x6ec9, 0x6eca, 0x6ecc, 0x6ecd, 0x6ece, 0x6ed0, 0x6ed2,
-  0x6ed6, 0x6ed8, 0x6ed9, 0x6edb, 0x6edc, 0x6edd, 0x6ee3, 0x6ee7,
-  0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef,
-  /* 0x9d */
-  0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef5, 0x6ef6, 0x6ef7, 0x6ef8,
-  0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff, 0x6f00, 0x6f01,
-  0x6f03, 0x6f04, 0x6f05, 0x6f07, 0x6f08, 0x6f0a, 0x6f0b, 0x6f0c,
-  0x6f0d, 0x6f0e, 0x6f10, 0x6f11, 0x6f12, 0x6f16, 0x6f17, 0x6f18,
-  0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f, 0x6f21,
-  0x6f22, 0x6f23, 0x6f25, 0x6f26, 0x6f27, 0x6f28, 0x6f2c, 0x6f2e,
-  0x6f30, 0x6f32, 0x6f34, 0x6f35, 0x6f37, 0x6f38, 0x6f39, 0x6f3a,
-  0x6f3b, 0x6f3c, 0x6f3d, 0x6f3f, 0x6f40, 0x6f41, 0x6f42, 0x6f43,
-  0x6f44, 0x6f45, 0x6f48, 0x6f49, 0x6f4a, 0x6f4c, 0x6f4e, 0x6f4f,
-  0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, 0x6f57,
-  0x6f59, 0x6f5a, 0x6f5b, 0x6f5d, 0x6f5f, 0x6f60, 0x6f61, 0x6f63,
-  0x6f64, 0x6f65, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c,
-  0x6f6f, 0x6f70, 0x6f71, 0x6f73, 0x6f75, 0x6f76, 0x6f77, 0x6f79,
-  0x6f7b, 0x6f7d, 0x6f7e, 0x6f7f, 0x6f80, 0x6f81, 0x6f82, 0x6f83,
-  0x6f85, 0x6f86, 0x6f87, 0x6f8a, 0x6f8b, 0x6f8f, 0x6f90, 0x6f91,
-  0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97, 0x6f98, 0x6f99,
-  0x6f9a, 0x6f9b, 0x6f9d, 0x6f9e, 0x6f9f, 0x6fa0, 0x6fa2, 0x6fa3,
-  0x6fa4, 0x6fa5, 0x6fa6, 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, 0x6fac,
-  0x6fad, 0x6fae, 0x6faf, 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb4, 0x6fb5,
-  0x6fb7, 0x6fb8, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, 0x6fbf,
-  0x6fc1, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, 0x6fc8, 0x6fca,
-  0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf, 0x6fd0, 0x6fd3, 0x6fd4,
-  0x6fd5, 0x6fd6, 0x6fd7, 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, 0x6fdc,
-  0x6fdd, 0x6fdf, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5,
-  /* 0x9e */
-  0x6fe6, 0x6fe7, 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed,
-  0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7,
-  0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff,
-  0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007,
-  0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f,
-  0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018,
-  0x7019, 0x701c, 0x701d, 0x701e, 0x701f, 0x7020, 0x7021, 0x7022,
-  0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702a, 0x702b,
-  0x702c, 0x702d, 0x702e, 0x702f, 0x7030, 0x7031, 0x7032, 0x7033,
-  0x7034, 0x7036, 0x7037, 0x7038, 0x703a, 0x703b, 0x703c, 0x703d,
-  0x703e, 0x703f, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, 0x7045,
-  0x7046, 0x7047, 0x7048, 0x7049, 0x704a, 0x704b, 0x704d, 0x704e,
-  0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7057,
-  0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705f, 0x7060,
-  0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, 0x7068,
-  0x7069, 0x706a, 0x706e, 0x7071, 0x7072, 0x7073, 0x7074, 0x7077,
-  0x7079, 0x707a, 0x707b, 0x707d, 0x7081, 0x7082, 0x7083, 0x7084,
-  0x7086, 0x7087, 0x7088, 0x708b, 0x708c, 0x708d, 0x708f, 0x7090,
-  0x7091, 0x7093, 0x7097, 0x7098, 0x709a, 0x709b, 0x709e, 0x709f,
-  0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, 0x70a7,
-  0x70a8, 0x70a9, 0x70aa, 0x70b0, 0x70b2, 0x70b4, 0x70b5, 0x70b6,
-  0x70ba, 0x70be, 0x70bf, 0x70c4, 0x70c5, 0x70c6, 0x70c7, 0x70c9,
-  0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf, 0x70d0, 0x70d1, 0x70d2,
-  0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7, 0x70da,
-  /* 0x9f */
-  0x70dc, 0x70dd, 0x70de, 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e5,
-  0x70ea, 0x70ee, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5,
-  0x70f6, 0x70f8, 0x70fa, 0x70fb, 0x70fc, 0x70fe, 0x70ff, 0x7100,
-  0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108,
-  0x710b, 0x710c, 0x710d, 0x710e, 0x710f, 0x7111, 0x7112, 0x7114,
-  0x7117, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f, 0x7120, 0x7121,
-  0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712a,
-  0x712b, 0x712c, 0x712d, 0x712e, 0x7132, 0x7133, 0x7134, 0x7135,
-  0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, 0x713e,
-  0x713f, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, 0x7147,
-  0x7148, 0x7149, 0x714b, 0x714d, 0x714f, 0x7150, 0x7151, 0x7152,
-  0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, 0x715a,
-  0x715b, 0x715d, 0x715f, 0x7160, 0x7161, 0x7162, 0x7163, 0x7165,
-  0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716f, 0x7170, 0x7171,
-  0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717b, 0x717c, 0x717e,
-  0x717f, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, 0x7187,
-  0x7188, 0x7189, 0x718b, 0x718c, 0x718d, 0x718e, 0x7190, 0x7191,
-  0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719a, 0x719b, 0x719c,
-  0x719d, 0x719e, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, 0x71a6,
-  0x71a7, 0x71a9, 0x71aa, 0x71ab, 0x71ad, 0x71ae, 0x71af, 0x71b0,
-  0x71b1, 0x71b2, 0x71b4, 0x71b6, 0x71b7, 0x71b8, 0x71ba, 0x71bb,
-  0x71bc, 0x71bd, 0x71be, 0x71bf, 0x71c0, 0x71c1, 0x71c2, 0x71c4,
-  0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, 0x71ca, 0x71cb, 0x71cc,
-  0x71cd, 0x71cf, 0x71d0, 0x71d1, 0x71d2, 0x71d3,
-  /* 0xa0 */
-  0x71d6, 0x71d7, 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd,
-  0x71de, 0x71df, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e6, 0x71e8,
-  0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ef, 0x71f0, 0x71f1,
-  0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7, 0x71f8, 0x71fa,
-  0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff, 0x7200, 0x7201, 0x7202,
-  0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720a, 0x720b,
-  0x720c, 0x720d, 0x720e, 0x720f, 0x7210, 0x7211, 0x7212, 0x7213,
-  0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721a, 0x721b,
-  0x721c, 0x721e, 0x721f, 0x7220, 0x7221, 0x7222, 0x7223, 0x7224,
-  0x7225, 0x7226, 0x7227, 0x7229, 0x722b, 0x722d, 0x722e, 0x722f,
-  0x7232, 0x7233, 0x7234, 0x723a, 0x723c, 0x723e, 0x7240, 0x7241,
-  0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724a, 0x724b,
-  0x724e, 0x724f, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, 0x7257,
-  0x7258, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7264, 0x7265,
-  0x7268, 0x726a, 0x726b, 0x726c, 0x726d, 0x7270, 0x7271, 0x7273,
-  0x7274, 0x7276, 0x7277, 0x7278, 0x727b, 0x727c, 0x727d, 0x7282,
-  0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728c, 0x728e,
-  0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, 0x7298,
-  0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x72a0, 0x72a1,
-  0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7, 0x72a8, 0x72a9,
-  0x72aa, 0x72ab, 0x72ae, 0x72b1, 0x72b2, 0x72b3, 0x72b5, 0x72ba,
-  0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf, 0x72c0, 0x72c5, 0x72c6,
-  0x72c7, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cf, 0x72d1, 0x72d3,
-  0x72d4, 0x72d5, 0x72d6, 0x72d8, 0x72da, 0x72db,
-  /* 0xa1 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x3000, 0x3001, 0x3002, 0x00b7, 0x02c9, 0x02c7, 0x00a8, 0x3003,
-  0x3005, 0x2014, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1,
-  0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a,
-  0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312,
-  0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d,
-  0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4,
-  0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb,
-  0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2,
-  0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,
-  /* 0xa2 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-  0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f,
-  0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497,
-  0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477,
-  0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f,
-  0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487,
-  0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
-  0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223,
-  0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd,
-  0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
-  0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd,
-  /* 0xa3 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0xa4 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa5 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa6 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfe35,
-  0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41,
-  0xfe42, 0xfe43, 0xfe44, 0xfffd, 0xfffd, 0xfe3b, 0xfe3c, 0xfe37,
-  0xfe38, 0xfe31, 0xfffd, 0xfe33, 0xfe34, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa7 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa8 */
-  0x02ca, 0x02cb, 0x02d9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105,
-  0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221f, 0x2223,
-  0x2252, 0x2266, 0x2267, 0x22bf, 0x2550, 0x2551, 0x2552, 0x2553,
-  0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b,
-  0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563,
-  0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b,
-  0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573,
-  0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588,
-  0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f, 0x2593,
-  0x2594, 0x2595, 0x25bc, 0x25bd, 0x25e2, 0x25e3, 0x25e4, 0x25e5,
-  0x2609, 0x2295, 0x3012, 0x301d, 0x301e, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8,
-  0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2,
-  0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc,
-  0x00fc, 0x00ea, 0x0251, 0xfffd, 0x0144, 0x0148, 0xfffd, 0x0261,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xa9 */
-  0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028,
-  0x3029, 0x32a3, 0x338e, 0x338f, 0x339c, 0x339d, 0x339e, 0x33a1,
-  0x33c4, 0x33ce, 0x33d1, 0x33d2, 0x33d5, 0xfe30, 0xffe2, 0xffe4,
-  0xfffd, 0x2121, 0x3231, 0xfffd, 0x2010, 0xfffd, 0xfffd, 0xfffd,
-  0x30fc, 0x309b, 0x309c, 0x30fd, 0x30fe, 0x3006, 0x309d, 0x309e,
-  0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50,
-  0xfe51, 0xfe52, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe59, 0xfe5a,
-  0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0xfe62,
-  0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe68, 0xfe69, 0xfe6a, 0xfe6b,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3007, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504,
-  0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c,
-  0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514,
-  0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c,
-  0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524,
-  0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c,
-  0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c,
-  0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544,
-  0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xaa */
-  0x72dc, 0x72dd, 0x72df, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6,
-  0x72e7, 0x72ea, 0x72eb, 0x72f5, 0x72f6, 0x72f9, 0x72fd, 0x72fe,
-  0x72ff, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308,
-  0x7309, 0x730b, 0x730c, 0x730d, 0x730f, 0x7310, 0x7311, 0x7312,
-  0x7314, 0x7318, 0x7319, 0x731a, 0x731f, 0x7320, 0x7323, 0x7324,
-  0x7326, 0x7327, 0x7328, 0x732d, 0x732f, 0x7330, 0x7332, 0x7333,
-  0x7335, 0x7336, 0x733a, 0x733b, 0x733c, 0x733d, 0x7340, 0x7341,
-  0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0x7349,
-  0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7351, 0x7353, 0x7354,
-  0x7355, 0x7356, 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, 0x735d,
-  0x735e, 0x735f, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366,
-  0x7367, 0x7368, 0x7369, 0x736a, 0x736b, 0x736e, 0x7370, 0x7371,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xab */
-  0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379,
-  0x737a, 0x737b, 0x737c, 0x737d, 0x737f, 0x7380, 0x7381, 0x7382,
-  0x7383, 0x7385, 0x7386, 0x7388, 0x738a, 0x738c, 0x738d, 0x738f,
-  0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399,
-  0x739a, 0x739c, 0x739d, 0x739e, 0x73a0, 0x73a1, 0x73a3, 0x73a4,
-  0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73aa, 0x73ac, 0x73ad, 0x73b1,
-  0x73b4, 0x73b5, 0x73b6, 0x73b8, 0x73b9, 0x73bc, 0x73bd, 0x73be,
-  0x73bf, 0x73c1, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, 0x73cb,
-  0x73cc, 0x73ce, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, 0x73d7,
-  0x73d8, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73df, 0x73e1, 0x73e2,
-  0x73e3, 0x73e4, 0x73e6, 0x73e8, 0x73ea, 0x73eb, 0x73ec, 0x73ee,
-  0x73ef, 0x73f0, 0x73f1, 0x73f3, 0x73f4, 0x73f5, 0x73f6, 0x73f7,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xac */
-  0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff,
-  0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740b, 0x740c,
-  0x740d, 0x740e, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416,
-  0x7417, 0x7418, 0x7419, 0x741c, 0x741d, 0x741e, 0x741f, 0x7420,
-  0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742b, 0x742d, 0x742f,
-  0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743a, 0x743b, 0x743d,
-  0x743e, 0x743f, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446,
-  0x7447, 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x744e,
-  0x744f, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, 0x7458,
-  0x745d, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, 0x7466,
-  0x7467, 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746e, 0x746f,
-  0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747a,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xad */
-  0x747b, 0x747c, 0x747d, 0x747f, 0x7482, 0x7484, 0x7485, 0x7486,
-  0x7488, 0x7489, 0x748a, 0x748c, 0x748d, 0x748f, 0x7491, 0x7492,
-  0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749a,
-  0x749b, 0x749d, 0x749f, 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4,
-  0x74a5, 0x74a6, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af,
-  0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7,
-  0x74b8, 0x74b9, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf, 0x74c0,
-  0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, 0x74c8,
-  0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf, 0x74d0,
-  0x74d1, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7, 0x74d8, 0x74d9,
-  0x74da, 0x74db, 0x74dd, 0x74df, 0x74e1, 0x74e5, 0x74e7, 0x74e8,
-  0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74f0, 0x74f1, 0x74f2,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xae */
-  0x74f3, 0x74f5, 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd,
-  0x74fe, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507,
-  0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750e, 0x7510, 0x7512,
-  0x7514, 0x7515, 0x7516, 0x7517, 0x751b, 0x751d, 0x751e, 0x7520,
-  0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752a, 0x752e,
-  0x7534, 0x7536, 0x7539, 0x753c, 0x753d, 0x753f, 0x7541, 0x7542,
-  0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754a, 0x754d, 0x7550,
-  0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0x755d,
-  0x755e, 0x755f, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, 0x7567,
-  0x7568, 0x7569, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f, 0x7570,
-  0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757a, 0x757b, 0x757c,
-  0x757d, 0x757e, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, 0x7587,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xaf */
-  0x7588, 0x7589, 0x758a, 0x758c, 0x758d, 0x758e, 0x7590, 0x7593,
-  0x7595, 0x7598, 0x759b, 0x759c, 0x759e, 0x75a2, 0x75a6, 0x75a7,
-  0x75a8, 0x75a9, 0x75aa, 0x75ad, 0x75b6, 0x75b7, 0x75ba, 0x75bb,
-  0x75bf, 0x75c0, 0x75c1, 0x75c6, 0x75cb, 0x75cc, 0x75ce, 0x75cf,
-  0x75d0, 0x75d1, 0x75d3, 0x75d7, 0x75d9, 0x75da, 0x75dc, 0x75dd,
-  0x75df, 0x75e0, 0x75e1, 0x75e5, 0x75e9, 0x75ec, 0x75ed, 0x75ee,
-  0x75ef, 0x75f2, 0x75f3, 0x75f5, 0x75f6, 0x75f7, 0x75f8, 0x75fa,
-  0x75fb, 0x75fd, 0x75fe, 0x7602, 0x7604, 0x7606, 0x7607, 0x7608,
-  0x7609, 0x760b, 0x760d, 0x760e, 0x760f, 0x7611, 0x7612, 0x7613,
-  0x7614, 0x7616, 0x761a, 0x761c, 0x761d, 0x761e, 0x7621, 0x7623,
-  0x7627, 0x7628, 0x762c, 0x762e, 0x762f, 0x7631, 0x7632, 0x7636,
-  0x7637, 0x7639, 0x763a, 0x763b, 0x763d, 0x7641, 0x7642, 0x7644,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764b, 0x764e,
-  0x764f, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658,
-  0x7659, 0x765a, 0x765b, 0x765d, 0x765f, 0x7660, 0x7661, 0x7662,
-  0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766c,
-  0x766d, 0x766e, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675,
-  0x7676, 0x7677, 0x7679, 0x767a, 0x767c, 0x767f, 0x7680, 0x7681,
-  0x7683, 0x7685, 0x7689, 0x768a, 0x768c, 0x768d, 0x768f, 0x7690,
-  0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x769c,
-  0x769d, 0x769e, 0x769f, 0x76a0, 0x76a1, 0x76a2, 0x76a3, 0x76a5,
-  0x76a6, 0x76a7, 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, 0x76ad,
-  0x76af, 0x76b0, 0x76b3, 0x76b5, 0x76b6, 0x76b7, 0x76b8, 0x76b9,
-  0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76c0, 0x76c1, 0x76c3,
-  0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691,
-  0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d,
-  0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848,
-  0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884,
-  0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed,
-  0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776,
-  0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf,
-  0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed,
-  0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc,
-  0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886,
-  0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d,
-  0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265,
-  /* 0xb1 */
-  0x76c4, 0x76c7, 0x76c9, 0x76cb, 0x76cc, 0x76d3, 0x76d5, 0x76d9,
-  0x76da, 0x76dc, 0x76dd, 0x76de, 0x76e0, 0x76e1, 0x76e2, 0x76e3,
-  0x76e4, 0x76e6, 0x76e7, 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec,
-  0x76ed, 0x76f0, 0x76f3, 0x76f5, 0x76f6, 0x76f7, 0x76fa, 0x76fb,
-  0x76fd, 0x76ff, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770a,
-  0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714,
-  0x7715, 0x7716, 0x7717, 0x7718, 0x771b, 0x771c, 0x771d, 0x771e,
-  0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772a, 0x772b, 0x772c,
-  0x772e, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, 0x773b,
-  0x773d, 0x773e, 0x773f, 0x7742, 0x7744, 0x7745, 0x7746, 0x7748,
-  0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f, 0x7752,
-  0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, 0x775c,
-  0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5,
-  0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351,
-  0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907,
-  0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29,
-  0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4,
-  0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9,
-  0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5,
-  0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16,
-  0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab,
-  0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b,
-  0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175,
-  0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3,
-  /* 0xb2 */
-  0x775d, 0x775e, 0x775f, 0x7760, 0x7764, 0x7767, 0x7769, 0x776a,
-  0x776d, 0x776e, 0x776f, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774,
-  0x7775, 0x7776, 0x7777, 0x7778, 0x777a, 0x777b, 0x777c, 0x7781,
-  0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778a, 0x778b,
-  0x778f, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798,
-  0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x77a1, 0x77a3,
-  0x77a4, 0x77a6, 0x77a8, 0x77ab, 0x77ad, 0x77ae, 0x77af, 0x77b1,
-  0x77b2, 0x77b4, 0x77b6, 0x77b7, 0x77b8, 0x77b9, 0x77ba, 0x77bc,
-  0x77be, 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, 0x77c6,
-  0x77c7, 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77ce, 0x77cf,
-  0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, 0x77d8,
-  0x77d9, 0x77da, 0x77dd, 0x77de, 0x77df, 0x77e0, 0x77e1, 0x77e4,
-  0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2,
-  0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236,
-  0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa,
-  0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016,
-  0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29,
-  0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b,
-  0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf,
-  0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7,
-  0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336,
-  0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6,
-  0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20,
-  0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316,
-  /* 0xb3 */
-  0x77e6, 0x77e8, 0x77ea, 0x77ef, 0x77f0, 0x77f1, 0x77f2, 0x77f4,
-  0x77f5, 0x77f7, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x7803, 0x7804,
-  0x7805, 0x7806, 0x7807, 0x7808, 0x780a, 0x780b, 0x780e, 0x780f,
-  0x7810, 0x7813, 0x7815, 0x7819, 0x781b, 0x781e, 0x7820, 0x7821,
-  0x7822, 0x7824, 0x7828, 0x782a, 0x782b, 0x782e, 0x782f, 0x7831,
-  0x7832, 0x7833, 0x7835, 0x7836, 0x783d, 0x783f, 0x7841, 0x7842,
-  0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784a, 0x784b, 0x784d,
-  0x784f, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785a, 0x785b,
-  0x785c, 0x785e, 0x785f, 0x7860, 0x7861, 0x7862, 0x7863, 0x7864,
-  0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786f, 0x7870, 0x7871,
-  0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, 0x787a,
-  0x787b, 0x787d, 0x787e, 0x787f, 0x7880, 0x7881, 0x7882, 0x7883,
-  0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e,
-  0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632,
-  0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3,
-  0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1,
-  0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59,
-  0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f,
-  0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60,
-  0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64,
-  0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0,
-  0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7,
-  0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8,
-  0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a,
-  /* 0xb4 */
-  0x7884, 0x7885, 0x7886, 0x7888, 0x788a, 0x788b, 0x788f, 0x7890,
-  0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789d, 0x789e, 0x78a0,
-  0x78a2, 0x78a4, 0x78a6, 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac,
-  0x78ad, 0x78ae, 0x78af, 0x78b5, 0x78b6, 0x78b7, 0x78b8, 0x78ba,
-  0x78bb, 0x78bc, 0x78bd, 0x78bf, 0x78c0, 0x78c2, 0x78c3, 0x78c4,
-  0x78c6, 0x78c7, 0x78c8, 0x78cc, 0x78cd, 0x78ce, 0x78cf, 0x78d1,
-  0x78d2, 0x78d3, 0x78d6, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dc,
-  0x78dd, 0x78de, 0x78df, 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x78e4,
-  0x78e5, 0x78e6, 0x78e7, 0x78e9, 0x78ea, 0x78eb, 0x78ed, 0x78ee,
-  0x78ef, 0x78f0, 0x78f1, 0x78f3, 0x78f5, 0x78f6, 0x78f8, 0x78f9,
-  0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff, 0x7900, 0x7902, 0x7903,
-  0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790a, 0x790b, 0x790c,
-  0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd,
-  0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97,
-  0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524,
-  0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822,
-  0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148,
-  0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471,
-  0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07,
-  0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106,
-  0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb,
-  0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54,
-  0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26,
-  0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e,
-  /* 0xb5 */
-  0x790d, 0x790e, 0x790f, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915,
-  0x7916, 0x7917, 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d,
-  0x791f, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927,
-  0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f,
-  0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938,
-  0x7939, 0x793d, 0x793f, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947,
-  0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f, 0x7950, 0x7951,
-  0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0x7964,
-  0x7966, 0x7969, 0x796a, 0x796b, 0x796c, 0x796e, 0x7970, 0x7971,
-  0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797b, 0x797c,
-  0x797d, 0x797e, 0x797f, 0x7982, 0x7983, 0x7986, 0x7987, 0x7988,
-  0x7989, 0x798b, 0x798c, 0x798d, 0x798e, 0x7990, 0x7991, 0x7992,
-  0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6,
-  0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb,
-  0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48,
-  0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053,
-  0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49,
-  0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c,
-  0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730,
-  0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382,
-  0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43,
-  0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc,
-  0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc,
-  0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0,
-  /* 0xb6 */
-  0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799b,
-  0x799c, 0x799d, 0x799e, 0x799f, 0x79a0, 0x79a1, 0x79a2, 0x79a3,
-  0x79a4, 0x79a5, 0x79a6, 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac,
-  0x79ad, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b2, 0x79b4, 0x79b5,
-  0x79b6, 0x79b7, 0x79b8, 0x79bc, 0x79bf, 0x79c2, 0x79c4, 0x79c5,
-  0x79c7, 0x79c8, 0x79ca, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d3,
-  0x79d4, 0x79d6, 0x79d7, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd,
-  0x79de, 0x79e0, 0x79e1, 0x79e2, 0x79e5, 0x79e8, 0x79ea, 0x79ec,
-  0x79ee, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, 0x79f7,
-  0x79f9, 0x79fa, 0x79fc, 0x79fe, 0x79ff, 0x7a01, 0x7a04, 0x7a05,
-  0x7a07, 0x7a08, 0x7a09, 0x7a0a, 0x7a0c, 0x7a0f, 0x7a10, 0x7a11,
-  0x7a12, 0x7a13, 0x7a15, 0x7a16, 0x7a18, 0x7a19, 0x7a1b, 0x7a1c,
-  0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a,
-  0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b,
-  0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661,
-  0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec,
-  0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6,
-  0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e,
-  0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566,
-  0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a,
-  0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0,
-  0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25,
-  0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c,
-  0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c,
-  /* 0xb7 */
-  0x7a1d, 0x7a1f, 0x7a21, 0x7a22, 0x7a24, 0x7a25, 0x7a26, 0x7a27,
-  0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f,
-  0x7a30, 0x7a31, 0x7a32, 0x7a34, 0x7a35, 0x7a36, 0x7a38, 0x7a3a,
-  0x7a3e, 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a47,
-  0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f,
-  0x7a50, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a58, 0x7a59,
-  0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f, 0x7a60, 0x7a61,
-  0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x7a69,
-  0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f, 0x7a71, 0x7a72,
-  0x7a73, 0x7a75, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a82, 0x7a85,
-  0x7a87, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, 0x7a90,
-  0x7a93, 0x7a94, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9e, 0x7aa1, 0x7aa2,
-  0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5,
-  0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492,
-  0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af,
-  0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632,
-  0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561,
-  0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8,
-  0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f,
-  0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa,
-  0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af,
-  0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b,
-  0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90,
-  0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d,
-  /* 0xb8 */
-  0x7aa3, 0x7aa4, 0x7aa7, 0x7aa9, 0x7aaa, 0x7aab, 0x7aae, 0x7aaf,
-  0x7ab0, 0x7ab1, 0x7ab2, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7, 0x7ab8,
-  0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7ac0, 0x7ac1,
-  0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9,
-  0x7aca, 0x7acc, 0x7acd, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad2,
-  0x7ad3, 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7adc,
-  0x7add, 0x7ae1, 0x7ae2, 0x7ae4, 0x7ae7, 0x7ae8, 0x7ae9, 0x7aea,
-  0x7aeb, 0x7aec, 0x7aee, 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x7af4,
-  0x7af5, 0x7af6, 0x7af7, 0x7af8, 0x7afb, 0x7afc, 0x7afe, 0x7b00,
-  0x7b01, 0x7b02, 0x7b05, 0x7b07, 0x7b09, 0x7b0c, 0x7b0d, 0x7b0e,
-  0x7b10, 0x7b12, 0x7b13, 0x7b16, 0x7b17, 0x7b18, 0x7b1a, 0x7b1c,
-  0x7b1d, 0x7b1f, 0x7b21, 0x7b22, 0x7b23, 0x7b27, 0x7b29, 0x7b2d,
-  0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85,
-  0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74,
-  0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236,
-  0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490,
-  0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89,
-  0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f,
-  0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b,
-  0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f,
-  0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c,
-  0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b,
-  0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9,
-  0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9,
-  /* 0xb9 */
-  0x7b2f, 0x7b30, 0x7b32, 0x7b34, 0x7b35, 0x7b36, 0x7b37, 0x7b39,
-  0x7b3b, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44,
-  0x7b46, 0x7b48, 0x7b4a, 0x7b4d, 0x7b4e, 0x7b53, 0x7b55, 0x7b57,
-  0x7b59, 0x7b5c, 0x7b5e, 0x7b5f, 0x7b61, 0x7b63, 0x7b64, 0x7b65,
-  0x7b66, 0x7b67, 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d,
-  0x7b6f, 0x7b70, 0x7b73, 0x7b74, 0x7b76, 0x7b78, 0x7b7a, 0x7b7c,
-  0x7b7d, 0x7b7f, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b86, 0x7b87,
-  0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x7b91,
-  0x7b92, 0x7b93, 0x7b96, 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, 0x7b9e,
-  0x7b9f, 0x7ba0, 0x7ba3, 0x7ba4, 0x7ba5, 0x7bae, 0x7baf, 0x7bb0,
-  0x7bb2, 0x7bb3, 0x7bb5, 0x7bb6, 0x7bb7, 0x7bb9, 0x7bba, 0x7bbb,
-  0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf, 0x7bc0, 0x7bc2, 0x7bc3, 0x7bc4,
-  0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a,
-  0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1,
-  0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2,
-  0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30,
-  0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37,
-  0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250,
-  0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173,
-  0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c,
-  0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845,
-  0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842,
-  0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505,
-  0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8,
-  /* 0xba */
-  0x7bc5, 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcd, 0x7bce, 0x7bcf,
-  0x7bd0, 0x7bd2, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7, 0x7bd8, 0x7bdb,
-  0x7bdc, 0x7bde, 0x7bdf, 0x7be0, 0x7be2, 0x7be3, 0x7be4, 0x7be7,
-  0x7be8, 0x7be9, 0x7beb, 0x7bec, 0x7bed, 0x7bef, 0x7bf0, 0x7bf2,
-  0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb,
-  0x7bfd, 0x7bff, 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05,
-  0x7c06, 0x7c08, 0x7c09, 0x7c0a, 0x7c0d, 0x7c0e, 0x7c10, 0x7c11,
-  0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c19, 0x7c1a,
-  0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c20, 0x7c21, 0x7c22, 0x7c23,
-  0x7c24, 0x7c25, 0x7c28, 0x7c29, 0x7c2b, 0x7c2c, 0x7c2d, 0x7c2e,
-  0x7c2f, 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, 0x7c36,
-  0x7c37, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, 0x7c42,
-  0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163,
-  0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a,
-  0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a,
-  0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a,
-  0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d,
-  0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2,
-  0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a,
-  0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8,
-  0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f,
-  0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c,
-  0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6,
-  0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56,
-  /* 0xbb */
-  0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, 0x7c4a,
-  0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c52, 0x7c53,
-  0x7c54, 0x7c55, 0x7c56, 0x7c57, 0x7c58, 0x7c59, 0x7c5a, 0x7c5b,
-  0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f, 0x7c60, 0x7c61, 0x7c62, 0x7c63,
-  0x7c64, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, 0x7c6a, 0x7c6b,
-  0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c72, 0x7c75,
-  0x7c76, 0x7c77, 0x7c78, 0x7c79, 0x7c7a, 0x7c7e, 0x7c7f, 0x7c80,
-  0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, 0x7c88,
-  0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f, 0x7c90, 0x7c93,
-  0x7c94, 0x7c96, 0x7c99, 0x7c9a, 0x7c9b, 0x7ca0, 0x7ca1, 0x7ca3,
-  0x7ca6, 0x7ca7, 0x7ca8, 0x7ca9, 0x7cab, 0x7cac, 0x7cad, 0x7caf,
-  0x7cb0, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7, 0x7cb8, 0x7cba, 0x7cbb,
-  0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1,
-  0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd,
-  0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853,
-  0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115,
-  0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757,
-  0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d,
-  0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de,
-  0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd,
-  0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f,
-  0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b,
-  0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e,
-  0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95,
-  /* 0xbc */
-  0x7cbf, 0x7cc0, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc6, 0x7cc9, 0x7ccb,
-  0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd8,
-  0x7cda, 0x7cdb, 0x7cdd, 0x7cde, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4,
-  0x7ce5, 0x7ce6, 0x7ce7, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced,
-  0x7cee, 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6,
-  0x7cf7, 0x7cf9, 0x7cfa, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff, 0x7d00,
-  0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, 0x7d08,
-  0x7d09, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f, 0x7d10, 0x7d11,
-  0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17, 0x7d18, 0x7d19,
-  0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f, 0x7d21, 0x7d23,
-  0x7d24, 0x7d25, 0x7d26, 0x7d28, 0x7d29, 0x7d2a, 0x7d2c, 0x7d2d,
-  0x7d2e, 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, 0x7d36,
-  0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9,
-  0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca,
-  0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0,
-  0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d,
-  0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2,
-  0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939,
-  0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be,
-  0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1,
-  0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270,
-  0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3,
-  0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274,
-  0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6,
-  /* 0xbd */
-  0x7d37, 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e,
-  0x7d3f, 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46,
-  0x7d47, 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e,
-  0x7d4f, 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56,
-  0x7d57, 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e,
-  0x7d5f, 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66,
-  0x7d67, 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6f,
-  0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x7d78,
-  0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f, 0x7d80,
-  0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, 0x7d88,
-  0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f, 0x7d90,
-  0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97, 0x7d98,
-  0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa,
-  0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868,
-  0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901,
-  0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc,
-  0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a,
-  0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb,
-  0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a,
-  0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01,
-  0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f,
-  0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1,
-  0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb,
-  0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78,
-  /* 0xbe */
-  0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0,
-  0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da7, 0x7da8, 0x7da9,
-  0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7daf, 0x7db0, 0x7db1, 0x7db2,
-  0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7, 0x7db8, 0x7db9, 0x7dba,
-  0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf, 0x7dc0, 0x7dc1, 0x7dc2,
-  0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, 0x7dca,
-  0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd2,
-  0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7, 0x7dd8, 0x7dd9, 0x7dda,
-  0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf, 0x7de0, 0x7de1, 0x7de2,
-  0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, 0x7dea,
-  0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def, 0x7df0, 0x7df1, 0x7df2,
-  0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7, 0x7df8, 0x7df9, 0x7dfa,
-  0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8,
-  0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f,
-  0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756,
-  0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0,
-  0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551,
-  0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8,
-  0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9,
-  0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd,
-  0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350,
-  0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b,
-  0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd,
-  0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb,
-  /* 0xbf */
-  0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff, 0x7e00, 0x7e01, 0x7e02,
-  0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, 0x7e08, 0x7e09, 0x7e0a,
-  0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, 0x7e10, 0x7e11, 0x7e12,
-  0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17, 0x7e18, 0x7e19, 0x7e1a,
-  0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f, 0x7e20, 0x7e21, 0x7e22,
-  0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, 0x7e2a,
-  0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e32,
-  0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37, 0x7e38, 0x7e39, 0x7e3a,
-  0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f, 0x7e40, 0x7e42, 0x7e43, 0x7e44,
-  0x7e45, 0x7e46, 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4d,
-  0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, 0x7e55,
-  0x7e56, 0x7e57, 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, 0x7e5d,
-  0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361,
-  0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a,
-  0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b,
-  0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777,
-  0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3,
-  0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543,
-  0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7,
-  0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6,
-  0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef,
-  0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50,
-  0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4,
-  0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080,
-  /* 0xc0 */
-  0x7e5e, 0x7e5f, 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65,
-  0x7e66, 0x7e67, 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d,
-  0x7e6e, 0x7e6f, 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75,
-  0x7e76, 0x7e77, 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d,
-  0x7e7e, 0x7e7f, 0x7e80, 0x7e81, 0x7e83, 0x7e84, 0x7e85, 0x7e86,
-  0x7e87, 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e,
-  0x7e8f, 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96,
-  0x7e97, 0x7e98, 0x7e99, 0x7e9a, 0x7e9c, 0x7e9d, 0x7e9e, 0x7eae,
-  0x7eb4, 0x7ebb, 0x7ebc, 0x7ed6, 0x7ee4, 0x7eec, 0x7ef9, 0x7f0a,
-  0x7f10, 0x7f1e, 0x7f37, 0x7f39, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e,
-  0x7f3f, 0x7f40, 0x7f41, 0x7f43, 0x7f46, 0x7f47, 0x7f48, 0x7f49,
-  0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f, 0x7f52, 0x7f53,
-  0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec,
-  0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a,
-  0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f,
-  0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8,
-  0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca,
-  0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c,
-  0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d,
-  0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b,
-  0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece,
-  0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4,
-  0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1,
-  0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0,
-  /* 0xc1 */
-  0x7f56, 0x7f59, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f60, 0x7f63,
-  0x7f64, 0x7f65, 0x7f66, 0x7f67, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6f,
-  0x7f70, 0x7f73, 0x7f75, 0x7f76, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b,
-  0x7f7c, 0x7f7d, 0x7f7f, 0x7f80, 0x7f82, 0x7f83, 0x7f84, 0x7f85,
-  0x7f86, 0x7f87, 0x7f88, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90,
-  0x7f91, 0x7f92, 0x7f93, 0x7f95, 0x7f96, 0x7f97, 0x7f98, 0x7f99,
-  0x7f9b, 0x7f9c, 0x7fa0, 0x7fa2, 0x7fa3, 0x7fa5, 0x7fa6, 0x7fa8,
-  0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7fb1, 0x7fb3,
-  0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7, 0x7fba, 0x7fbb, 0x7fbe, 0x7fc0,
-  0x7fc2, 0x7fc3, 0x7fc4, 0x7fc6, 0x7fc7, 0x7fc8, 0x7fc9, 0x7fcb,
-  0x7fcd, 0x7fcf, 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd6, 0x7fd7,
-  0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fe2, 0x7fe3,
-  0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9,
-  0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f,
-  0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae,
-  0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e,
-  0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5,
-  0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217,
-  0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716,
-  0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce,
-  0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc,
-  0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409,
-  0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3,
-  0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf,
-  /* 0xc2 */
-  0x7fe4, 0x7fe7, 0x7fe8, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fef,
-  0x7ff2, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffa,
-  0x7ffd, 0x7ffe, 0x7fff, 0x8002, 0x8007, 0x8008, 0x8009, 0x800a,
-  0x800e, 0x800f, 0x8011, 0x8013, 0x801a, 0x801b, 0x801d, 0x801e,
-  0x801f, 0x8021, 0x8023, 0x8024, 0x802b, 0x802c, 0x802d, 0x802e,
-  0x802f, 0x8030, 0x8032, 0x8034, 0x8039, 0x803a, 0x803c, 0x803e,
-  0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804e,
-  0x804f, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0x8059,
-  0x805b, 0x805c, 0x805d, 0x805e, 0x805f, 0x8060, 0x8061, 0x8062,
-  0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806b, 0x806c,
-  0x806d, 0x806e, 0x806f, 0x8070, 0x8072, 0x8073, 0x8074, 0x8075,
-  0x8076, 0x8077, 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, 0x807d,
-  0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3,
-  0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3,
-  0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42,
-  0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415,
-  0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f,
-  0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6,
-  0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1,
-  0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523,
-  0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988,
-  0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417,
-  0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992,
-  0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b,
-  /* 0xc3 */
-  0x807e, 0x8081, 0x8082, 0x8085, 0x8088, 0x808a, 0x808d, 0x808e,
-  0x808f, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099,
-  0x809e, 0x80a3, 0x80a6, 0x80a7, 0x80a8, 0x80ac, 0x80b0, 0x80b3,
-  0x80b5, 0x80b6, 0x80b8, 0x80b9, 0x80bb, 0x80c5, 0x80c7, 0x80c8,
-  0x80c9, 0x80ca, 0x80cb, 0x80cf, 0x80d0, 0x80d1, 0x80d2, 0x80d3,
-  0x80d4, 0x80d5, 0x80d8, 0x80df, 0x80e0, 0x80e2, 0x80e3, 0x80e6,
-  0x80ee, 0x80f5, 0x80f7, 0x80f9, 0x80fb, 0x80fe, 0x80ff, 0x8100,
-  0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810b, 0x810c,
-  0x8115, 0x8117, 0x8119, 0x811b, 0x811c, 0x811d, 0x811f, 0x8120,
-  0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, 0x8128,
-  0x8129, 0x812a, 0x812b, 0x812d, 0x812e, 0x8130, 0x8133, 0x8134,
-  0x8135, 0x8137, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, 0x813f,
-  0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b,
-  0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192,
-  0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176,
-  0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e,
-  0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c,
-  0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f,
-  0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8,
-  0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5,
-  0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf,
-  0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d,
-  0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f,
-  0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478,
-  /* 0xc4 */
-  0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149,
-  0x814d, 0x814e, 0x814f, 0x8152, 0x8156, 0x8157, 0x8158, 0x815b,
-  0x815c, 0x815d, 0x815e, 0x815f, 0x8161, 0x8162, 0x8163, 0x8164,
-  0x8166, 0x8168, 0x816a, 0x816b, 0x816c, 0x816f, 0x8172, 0x8173,
-  0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185,
-  0x8186, 0x8187, 0x8189, 0x818b, 0x818c, 0x818d, 0x818e, 0x8190,
-  0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819a,
-  0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, 0x81a4, 0x81a5, 0x81a7,
-  0x81a9, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1,
-  0x81b2, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81bc,
-  0x81bd, 0x81be, 0x81bf, 0x81c4, 0x81c5, 0x81c7, 0x81c8, 0x81c9,
-  0x81cb, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, 0x81d3,
-  0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9,
-  0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c,
-  0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd,
-  0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766,
-  0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c,
-  0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537,
-  0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462,
-  0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5,
-  0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b,
-  0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f,
-  0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d,
-  0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81,
-  /* 0xc5 */
-  0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db,
-  0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e4,
-  0x81e5, 0x81e6, 0x81e8, 0x81e9, 0x81eb, 0x81ee, 0x81ef, 0x81f0,
-  0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa,
-  0x81fd, 0x81ff, 0x8203, 0x8207, 0x8208, 0x8209, 0x820a, 0x820b,
-  0x820e, 0x820f, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218,
-  0x8219, 0x821a, 0x821d, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227,
-  0x8229, 0x822e, 0x8232, 0x823a, 0x823c, 0x823d, 0x823f, 0x8240,
-  0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824a, 0x824c,
-  0x824d, 0x824e, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255,
-  0x8256, 0x8257, 0x8259, 0x825b, 0x825c, 0x825d, 0x825e, 0x8260,
-  0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, 0x8269,
-  0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53,
-  0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650,
-  0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25,
-  0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c,
-  0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43,
-  0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224,
-  0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486,
-  0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9,
-  0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6,
-  0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c,
-  0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812,
-  0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7,
-  /* 0xc6 */
-  0x826a, 0x826b, 0x826c, 0x826d, 0x8271, 0x8275, 0x8276, 0x8277,
-  0x8278, 0x827b, 0x827c, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286,
-  0x8287, 0x8289, 0x828c, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296,
-  0x829a, 0x829b, 0x829e, 0x82a0, 0x82a2, 0x82a3, 0x82a7, 0x82b2,
-  0x82b5, 0x82b6, 0x82ba, 0x82bb, 0x82bc, 0x82bf, 0x82c0, 0x82c2,
-  0x82c3, 0x82c5, 0x82c6, 0x82c9, 0x82d0, 0x82d6, 0x82d9, 0x82da,
-  0x82dd, 0x82e2, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82ec, 0x82ed,
-  0x82ee, 0x82f0, 0x82f2, 0x82f3, 0x82f5, 0x82f6, 0x82f8, 0x82fa,
-  0x82fc, 0x82fd, 0x82fe, 0x82ff, 0x8300, 0x830a, 0x830b, 0x830d,
-  0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831d, 0x831e,
-  0x831f, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326,
-  0x8329, 0x832a, 0x832e, 0x8330, 0x8332, 0x8337, 0x833b, 0x833d,
-  0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41,
-  0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2,
-  0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058,
-  0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4,
-  0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb,
-  0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9,
-  0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd,
-  0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4,
-  0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566,
-  0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77,
-  0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14,
-  0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390,
-  /* 0xc7 */
-  0x833e, 0x833f, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834a,
-  0x834b, 0x834c, 0x834d, 0x834e, 0x8353, 0x8355, 0x8356, 0x8357,
-  0x8358, 0x8359, 0x835d, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373,
-  0x8374, 0x8375, 0x8376, 0x8379, 0x837a, 0x837e, 0x837f, 0x8380,
-  0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838a, 0x838b,
-  0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396,
-  0x8397, 0x8399, 0x839a, 0x839d, 0x839f, 0x83a1, 0x83a2, 0x83a3,
-  0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83ac, 0x83ad, 0x83ae, 0x83af,
-  0x83b5, 0x83bb, 0x83be, 0x83bf, 0x83c2, 0x83c3, 0x83c4, 0x83c6,
-  0x83c8, 0x83c9, 0x83cb, 0x83cd, 0x83ce, 0x83d0, 0x83d1, 0x83d2,
-  0x83d3, 0x83d5, 0x83d7, 0x83d9, 0x83da, 0x83db, 0x83de, 0x83e2,
-  0x83e3, 0x83e4, 0x83e6, 0x83e7, 0x83e8, 0x83eb, 0x83ec, 0x83ed,
-  0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1,
-  0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d,
-  0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49,
-  0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2,
-  0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8,
-  0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207,
-  0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6,
-  0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752,
-  0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30,
-  0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18,
-  0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a,
-  0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20,
-  /* 0xc8 */
-  0x83ee, 0x83ef, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83fa,
-  0x83fb, 0x83fc, 0x83fe, 0x83ff, 0x8400, 0x8402, 0x8405, 0x8407,
-  0x8408, 0x8409, 0x840a, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415,
-  0x8416, 0x8417, 0x8419, 0x841a, 0x841b, 0x841e, 0x841f, 0x8420,
-  0x8421, 0x8422, 0x8423, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d,
-  0x842e, 0x842f, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436,
-  0x8437, 0x8439, 0x843a, 0x843b, 0x843e, 0x843f, 0x8440, 0x8441,
-  0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a,
-  0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8452, 0x8453,
-  0x8454, 0x8455, 0x8456, 0x8458, 0x845d, 0x845e, 0x845f, 0x8460,
-  0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846a, 0x846e,
-  0x846f, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847b, 0x847c,
-  0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743,
-  0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d,
-  0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0,
-  0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4,
-  0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed,
-  0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203,
-  0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9,
-  0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9,
-  0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1,
-  0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e,
-  0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428,
-  0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1,
-  /* 0xc9 */
-  0x847d, 0x847e, 0x847f, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485,
-  0x8486, 0x848a, 0x848d, 0x848f, 0x8490, 0x8491, 0x8492, 0x8493,
-  0x8494, 0x8495, 0x8496, 0x8498, 0x849a, 0x849b, 0x849d, 0x849e,
-  0x849f, 0x84a0, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7,
-  0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84b0,
-  0x84b1, 0x84b3, 0x84b5, 0x84b6, 0x84b7, 0x84bb, 0x84bc, 0x84be,
-  0x84c0, 0x84c2, 0x84c3, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84cb,
-  0x84cc, 0x84ce, 0x84cf, 0x84d2, 0x84d4, 0x84d5, 0x84d7, 0x84d8,
-  0x84d9, 0x84da, 0x84db, 0x84dc, 0x84de, 0x84e1, 0x84e2, 0x84e4,
-  0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ed, 0x84ee, 0x84ef,
-  0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8,
-  0x84f9, 0x84fa, 0x84fb, 0x84fd, 0x84fe, 0x8500, 0x8501, 0x8502,
-  0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b,
-  0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802,
-  0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b,
-  0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b,
-  0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247,
-  0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a,
-  0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6,
-  0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c,
-  0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe,
-  0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5,
-  0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17,
-  0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3,
-  /* 0xca */
-  0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850a,
-  0x850b, 0x850d, 0x850e, 0x850f, 0x8510, 0x8512, 0x8514, 0x8515,
-  0x8516, 0x8518, 0x8519, 0x851b, 0x851c, 0x851d, 0x851e, 0x8520,
-  0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529,
-  0x852a, 0x852d, 0x852e, 0x852f, 0x8530, 0x8531, 0x8532, 0x8533,
-  0x8534, 0x8535, 0x8536, 0x853e, 0x853f, 0x8540, 0x8541, 0x8542,
-  0x8544, 0x8545, 0x8546, 0x8547, 0x854b, 0x854c, 0x854d, 0x854e,
-  0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8557,
-  0x8558, 0x855a, 0x855b, 0x855c, 0x855d, 0x855f, 0x8560, 0x8561,
-  0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856a, 0x856b,
-  0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, 0x8575,
-  0x8576, 0x8577, 0x8578, 0x857c, 0x857d, 0x857f, 0x8580, 0x8581,
-  0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee,
-  0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe,
-  0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2,
-  0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16,
-  0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc,
-  0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02,
-  0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88,
-  0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2,
-  0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f,
-  0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72,
-  0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f,
-  0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31,
-  /* 0xcb */
-  0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858a, 0x858b, 0x858c,
-  0x858d, 0x858e, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595,
-  0x8596, 0x8597, 0x8598, 0x8599, 0x859a, 0x859d, 0x859e, 0x859f,
-  0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a5, 0x85a6, 0x85a7, 0x85a9,
-  0x85ab, 0x85ac, 0x85ad, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5,
-  0x85b6, 0x85b8, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf,
-  0x85c0, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8,
-  0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85d1, 0x85d2, 0x85d4,
-  0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dd, 0x85de,
-  0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e5, 0x85e6, 0x85e7,
-  0x85e8, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0,
-  0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8,
-  0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813,
-  0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e,
-  0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1,
-  0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b,
-  0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3,
-  0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5,
-  0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20,
-  0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083,
-  0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3,
-  0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f,
-  0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501,
-  0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854,
-  /* 0xcc */
-  0x85f9, 0x85fa, 0x85fc, 0x85fd, 0x85fe, 0x8600, 0x8601, 0x8602,
-  0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860a, 0x860b,
-  0x860c, 0x860d, 0x860e, 0x860f, 0x8610, 0x8612, 0x8613, 0x8614,
-  0x8615, 0x8617, 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d,
-  0x861e, 0x861f, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625,
-  0x8626, 0x8628, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f,
-  0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637,
-  0x8639, 0x863a, 0x863b, 0x863d, 0x863e, 0x863f, 0x8640, 0x8641,
-  0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649,
-  0x864a, 0x864b, 0x864c, 0x8652, 0x8653, 0x8655, 0x8656, 0x8657,
-  0x8658, 0x8659, 0x865b, 0x865c, 0x865d, 0x865f, 0x8660, 0x8661,
-  0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a,
-  0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0,
-  0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a,
-  0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08,
-  0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64,
-  0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018,
-  0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6,
-  0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279,
-  0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511,
-  0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5,
-  0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c,
-  0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3,
-  0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3,
-  /* 0xcd */
-  0x866d, 0x866f, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676,
-  0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688,
-  0x8689, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696,
-  0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869e, 0x869f, 0x86a0,
-  0x86a1, 0x86a2, 0x86a5, 0x86a6, 0x86ab, 0x86ad, 0x86ae, 0x86b2,
-  0x86b3, 0x86b7, 0x86b8, 0x86b9, 0x86bb, 0x86bc, 0x86bd, 0x86be,
-  0x86bf, 0x86c1, 0x86c2, 0x86c3, 0x86c5, 0x86c8, 0x86cc, 0x86cd,
-  0x86d2, 0x86d3, 0x86d5, 0x86d6, 0x86d7, 0x86da, 0x86dc, 0x86dd,
-  0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e5, 0x86e6, 0x86e7, 0x86e8,
-  0x86ea, 0x86eb, 0x86ec, 0x86ef, 0x86f5, 0x86f6, 0x86f7, 0x86fa,
-  0x86fb, 0x86fc, 0x86fd, 0x86ff, 0x8701, 0x8704, 0x8705, 0x8706,
-  0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8714, 0x8716,
-  0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a,
-  0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876,
-  0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f,
-  0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60,
-  0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f,
-  0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258,
-  0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3,
-  0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c,
-  0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38,
-  0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b,
-  0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51,
-  0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01,
-  /* 0xce */
-  0x8719, 0x871b, 0x871d, 0x871f, 0x8720, 0x8724, 0x8726, 0x8727,
-  0x8728, 0x872a, 0x872b, 0x872c, 0x872d, 0x872f, 0x8730, 0x8732,
-  0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873a, 0x873c, 0x873d,
-  0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874a,
-  0x874b, 0x874d, 0x874f, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755,
-  0x8756, 0x8758, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f,
-  0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b,
-  0x876c, 0x876d, 0x876f, 0x8771, 0x8772, 0x8773, 0x8775, 0x8777,
-  0x8778, 0x8779, 0x877a, 0x877f, 0x8780, 0x8781, 0x8784, 0x8786,
-  0x8787, 0x8789, 0x878a, 0x878c, 0x878e, 0x878f, 0x8790, 0x8791,
-  0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879a, 0x879b,
-  0x879c, 0x879d, 0x879e, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4,
-  0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f,
-  0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f,
-  0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3,
-  0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b,
-  0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33,
-  0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1,
-  0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c,
-  0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7,
-  0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e,
-  0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff,
-  0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852,
-  0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a,
-  /* 0xcf */
-  0x87a5, 0x87a6, 0x87a7, 0x87a9, 0x87aa, 0x87ae, 0x87b0, 0x87b1,
-  0x87b2, 0x87b4, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87bb, 0x87bc,
-  0x87be, 0x87bf, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c7,
-  0x87c8, 0x87c9, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d4,
-  0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87dc, 0x87dd,
-  0x87de, 0x87df, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e6, 0x87e7,
-  0x87e8, 0x87e9, 0x87eb, 0x87ec, 0x87ed, 0x87ef, 0x87f0, 0x87f1,
-  0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87fa,
-  0x87fb, 0x87fc, 0x87fd, 0x87ff, 0x8800, 0x8801, 0x8802, 0x8804,
-  0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880b, 0x880c, 0x880d,
-  0x880e, 0x880f, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, 0x8818,
-  0x8819, 0x881a, 0x881c, 0x881d, 0x881e, 0x881f, 0x8820, 0x8823,
-  0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184,
-  0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60,
-  0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6,
-  0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0,
-  0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148,
-  0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2,
-  0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf,
-  0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8,
-  0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4,
-  0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61,
-  0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee,
-  0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653,
-  /* 0xd0 */
-  0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882a, 0x882b,
-  0x882c, 0x882d, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, 0x8834,
-  0x8835, 0x8836, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883e,
-  0x883f, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849,
-  0x884a, 0x884b, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853,
-  0x8855, 0x8856, 0x8858, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e,
-  0x885f, 0x8860, 0x8866, 0x8867, 0x886a, 0x886d, 0x886f, 0x8871,
-  0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887a, 0x887b,
-  0x887c, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888a, 0x888c,
-  0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, 0x8897,
-  0x8898, 0x8899, 0x889a, 0x889b, 0x889d, 0x889e, 0x889f, 0x88a0,
-  0x88a1, 0x88a3, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, 0x88aa,
-  0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954,
-  0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa,
-  0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8,
-  0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23,
-  0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165,
-  0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c,
-  0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8,
-  0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d,
-  0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700,
-  0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9,
-  0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed,
-  0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384,
-  /* 0xd1 */
-  0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b2, 0x88b3, 0x88b4, 0x88b5,
-  0x88b6, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bd, 0x88be, 0x88bf,
-  0x88c0, 0x88c3, 0x88c4, 0x88c7, 0x88c8, 0x88ca, 0x88cb, 0x88cc,
-  0x88cd, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d6, 0x88d7, 0x88da,
-  0x88db, 0x88dc, 0x88dd, 0x88de, 0x88e0, 0x88e1, 0x88e6, 0x88e7,
-  0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f2,
-  0x88f5, 0x88f6, 0x88f7, 0x88fa, 0x88fb, 0x88fd, 0x88ff, 0x8900,
-  0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0x8909,
-  0x890b, 0x890c, 0x890d, 0x890e, 0x890f, 0x8911, 0x8914, 0x8915,
-  0x8916, 0x8917, 0x8918, 0x891c, 0x891d, 0x891e, 0x891f, 0x8920,
-  0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, 0x892c,
-  0x892d, 0x892e, 0x892f, 0x8931, 0x8932, 0x8933, 0x8935, 0x8937,
-  0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74,
-  0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb,
-  0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5,
-  0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259,
-  0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6,
-  0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814,
-  0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf,
-  0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5,
-  0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a,
-  0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f,
-  0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b,
-  0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476,
-  /* 0xd2 */
-  0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f,
-  0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949,
-  0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951,
-  0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959,
-  0x895a, 0x895b, 0x895c, 0x895d, 0x8960, 0x8961, 0x8962, 0x8963,
-  0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c,
-  0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974,
-  0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897c, 0x897d,
-  0x897e, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, 0x8989,
-  0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991,
-  0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999,
-  0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1,
-  0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200,
-  0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce,
-  0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b,
-  0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d,
-  0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0,
-  0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a,
-  0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091,
-  0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6,
-  0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3,
-  0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335,
-  0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6,
-  0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690,
-  /* 0xd3 */
-  0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9,
-  0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1,
-  0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9,
-  0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c3,
-  0x89cd, 0x89d3, 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89d9, 0x89db,
-  0x89dd, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e4, 0x89e7, 0x89e8,
-  0x89e9, 0x89ea, 0x89ec, 0x89ed, 0x89ee, 0x89f0, 0x89f1, 0x89f2,
-  0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x89fb,
-  0x89fc, 0x89fd, 0x89fe, 0x89ff, 0x8a01, 0x8a02, 0x8a03, 0x8a04,
-  0x8a05, 0x8a06, 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0d,
-  0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15,
-  0x8a16, 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, 0x8a1d,
-  0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9,
-  0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71,
-  0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8,
-  0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38,
-  0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24,
-  0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709,
-  0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2,
-  0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59,
-  0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88,
-  0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd,
-  0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea,
-  0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89,
-  /* 0xd4 */
-  0x8a1e, 0x8a1f, 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25,
-  0x8a26, 0x8a27, 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d,
-  0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35,
-  0x8a36, 0x8a37, 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d,
-  0x8a3f, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46,
-  0x8a47, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f,
-  0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57,
-  0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f,
-  0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67,
-  0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f,
-  0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77,
-  0x8a78, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f, 0x8a80,
-  0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a,
-  0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed,
-  0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f,
-  0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3,
-  0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300,
-  0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55,
-  0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d,
-  0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f,
-  0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1,
-  0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23,
-  0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe,
-  0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67,
-  /* 0xd5 */
-  0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, 0x8a88,
-  0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92,
-  0x8a94, 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b,
-  0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3,
-  0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab,
-  0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3,
-  0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb,
-  0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3,
-  0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb,
-  0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3,
-  0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb,
-  0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3,
-  0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8,
-  0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb,
-  0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d,
-  0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd,
-  0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756,
-  0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db,
-  0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087,
-  0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517,
-  0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827,
-  0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707,
-  0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0,
-  0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f,
-  /* 0xd6 */
-  0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb,
-  0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3,
-  0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb,
-  0x8afc, 0x8afd, 0x8afe, 0x8aff, 0x8b00, 0x8b01, 0x8b02, 0x8b03,
-  0x8b04, 0x8b05, 0x8b06, 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c,
-  0x8b0d, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14,
-  0x8b15, 0x8b16, 0x8b17, 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c,
-  0x8b1d, 0x8b1e, 0x8b1f, 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x8b24,
-  0x8b25, 0x8b27, 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2d,
-  0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, 0x8b35,
-  0x8b36, 0x8b37, 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, 0x8b3d,
-  0x8b3e, 0x8b3f, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45,
-  0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431,
-  0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c,
-  0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307,
-  0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7,
-  0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9,
-  0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d,
-  0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd,
-  0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5,
-  0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4,
-  0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010,
-  0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457,
-  0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51,
-  /* 0xd7 */
-  0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d,
-  0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55,
-  0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d,
-  0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65,
-  0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6d, 0x8b6e, 0x8b6f,
-  0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77,
-  0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f,
-  0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x8b87,
-  0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, 0x8b8f,
-  0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, 0x8b97,
-  0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, 0x8b9f,
-  0x8bac, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bd0, 0x8bea, 0x8c09, 0x8c1e,
-  0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13,
-  0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5,
-  0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58,
-  0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c,
-  0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179,
-  0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4,
-  0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5,
-  0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f,
-  0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b,
-  0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a,
-  0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750,
-  0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd8 */
-  0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f,
-  0x8c40, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c48, 0x8c4a, 0x8c4b,
-  0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54,
-  0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e,
-  0x8c5f, 0x8c60, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68,
-  0x8c69, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72,
-  0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e,
-  0x8c7f, 0x8c80, 0x8c81, 0x8c83, 0x8c84, 0x8c86, 0x8c87, 0x8c88,
-  0x8c8b, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93,
-  0x8c95, 0x8c96, 0x8c97, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d,
-  0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5,
-  0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad,
-  0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98,
-  0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315,
-  0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997,
-  0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69,
-  0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d,
-  0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326,
-  0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e,
-  0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c,
-  0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54,
-  0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede,
-  0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09,
-  0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d,
-  /* 0xd9 */
-  0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5,
-  0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd,
-  0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5,
-  0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd,
-  0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5,
-  0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd,
-  0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5,
-  0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced,
-  0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5,
-  0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd,
-  0x8cfe, 0x8cff, 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, 0x8d05,
-  0x8d06, 0x8d07, 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0d,
-  0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89,
-  0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94,
-  0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1,
-  0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e,
-  0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043,
-  0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9,
-  0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107,
-  0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46,
-  0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9,
-  0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156,
-  0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34,
-  0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc,
-  /* 0xda */
-  0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15,
-  0x8d16, 0x8d17, 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d20,
-  0x8d51, 0x8d52, 0x8d57, 0x8d5f, 0x8d65, 0x8d68, 0x8d69, 0x8d6a,
-  0x8d6c, 0x8d6e, 0x8d6f, 0x8d71, 0x8d72, 0x8d78, 0x8d79, 0x8d7a,
-  0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f, 0x8d80, 0x8d82, 0x8d83,
-  0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f,
-  0x8d90, 0x8d92, 0x8d93, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99,
-  0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8da0, 0x8da1, 0x8da2,
-  0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab,
-  0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db2, 0x8db6, 0x8db7,
-  0x8db9, 0x8dbb, 0x8dbd, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc5, 0x8dc7,
-  0x8dc8, 0x8dc9, 0x8dca, 0x8dcd, 0x8dd0, 0x8dd2, 0x8dd3, 0x8dd4,
-  0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa,
-  0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce,
-  0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf,
-  0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6,
-  0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c,
-  0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b,
-  0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a,
-  0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369,
-  0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c,
-  0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674,
-  0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099,
-  0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba,
-  /* 0xdb */
-  0x8dd5, 0x8dd8, 0x8dd9, 0x8ddc, 0x8de0, 0x8de1, 0x8de2, 0x8de5,
-  0x8de6, 0x8de7, 0x8de9, 0x8ded, 0x8dee, 0x8df0, 0x8df1, 0x8df2,
-  0x8df4, 0x8df6, 0x8dfc, 0x8dfe, 0x8dff, 0x8e00, 0x8e01, 0x8e02,
-  0x8e03, 0x8e04, 0x8e06, 0x8e07, 0x8e08, 0x8e0b, 0x8e0d, 0x8e0e,
-  0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e15, 0x8e16, 0x8e17, 0x8e18,
-  0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e20, 0x8e21, 0x8e24, 0x8e25,
-  0x8e26, 0x8e27, 0x8e28, 0x8e2b, 0x8e2d, 0x8e30, 0x8e32, 0x8e33,
-  0x8e34, 0x8e36, 0x8e37, 0x8e38, 0x8e3b, 0x8e3c, 0x8e3e, 0x8e3f,
-  0x8e43, 0x8e45, 0x8e46, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50,
-  0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e5a, 0x8e5b,
-  0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63,
-  0x8e64, 0x8e65, 0x8e67, 0x8e68, 0x8e6a, 0x8e6b, 0x8e6e, 0x8e71,
-  0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7,
-  0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef,
-  0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139,
-  0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be,
-  0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4,
-  0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c,
-  0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c,
-  0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742,
-  0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d,
-  0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7,
-  0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2,
-  0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd,
-  /* 0xdc */
-  0x8e73, 0x8e75, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7d,
-  0x8e7e, 0x8e80, 0x8e82, 0x8e83, 0x8e84, 0x8e86, 0x8e88, 0x8e89,
-  0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e91, 0x8e92, 0x8e93,
-  0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9d,
-  0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6,
-  0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8ead, 0x8eae, 0x8eb0, 0x8eb1,
-  0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8ebb,
-  0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3,
-  0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb,
-  0x8ecc, 0x8ecd, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4,
-  0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc,
-  0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4,
-  0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844,
-  0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8,
-  0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8,
-  0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be,
-  0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb,
-  0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4,
-  0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307,
-  0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311,
-  0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351,
-  0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b,
-  0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317,
-  0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365,
-  /* 0xdd */
-  0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec,
-  0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4,
-  0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc,
-  0x8efd, 0x8efe, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04,
-  0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c,
-  0x8f0d, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14,
-  0x8f15, 0x8f16, 0x8f17, 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c,
-  0x8f1d, 0x8f1e, 0x8f1f, 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x8f24,
-  0x8f25, 0x8f26, 0x8f27, 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, 0x8f2c,
-  0x8f2d, 0x8f2e, 0x8f2f, 0x8f30, 0x8f31, 0x8f32, 0x8f33, 0x8f34,
-  0x8f35, 0x8f36, 0x8f37, 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, 0x8f3c,
-  0x8f3d, 0x8f3e, 0x8f3f, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44,
-  0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0,
-  0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385,
-  0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e,
-  0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807,
-  0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411,
-  0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea,
-  0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a,
-  0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c,
-  0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1,
-  0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba,
-  0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c,
-  0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a,
-  /* 0xde */
-  0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c,
-  0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54,
-  0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c,
-  0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64,
-  0x8f65, 0x8f6a, 0x8f80, 0x8f8c, 0x8f92, 0x8f9d, 0x8fa0, 0x8fa1,
-  0x8fa2, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8faa, 0x8fac, 0x8fad,
-  0x8fae, 0x8faf, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8,
-  0x8fba, 0x8fbb, 0x8fbc, 0x8fbf, 0x8fc0, 0x8fc3, 0x8fc6, 0x8fc9,
-  0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fcf, 0x8fd2, 0x8fd6, 0x8fd7,
-  0x8fda, 0x8fe0, 0x8fe1, 0x8fe3, 0x8fe7, 0x8fec, 0x8fef, 0x8ff1,
-  0x8ff2, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffe,
-  0x8fff, 0x9007, 0x9008, 0x900c, 0x900e, 0x9013, 0x9015, 0x9018,
-  0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564,
-  0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8,
-  0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7,
-  0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629,
-  0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955,
-  0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c,
-  0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322,
-  0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a,
-  0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc,
-  0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452,
-  0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c,
-  0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496,
-  /* 0xdf */
-  0x9019, 0x901c, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029,
-  0x902a, 0x902b, 0x902c, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034,
-  0x9037, 0x9039, 0x903a, 0x903d, 0x903f, 0x9040, 0x9043, 0x9045,
-  0x9046, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904e, 0x9054,
-  0x9055, 0x9056, 0x9059, 0x905a, 0x905c, 0x905d, 0x905e, 0x905f,
-  0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906a, 0x906b,
-  0x906c, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077,
-  0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907e, 0x9081, 0x9084,
-  0x9085, 0x9086, 0x9087, 0x9089, 0x908a, 0x908c, 0x908d, 0x908e,
-  0x908f, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909a, 0x909c,
-  0x909e, 0x909f, 0x90a0, 0x90a4, 0x90a5, 0x90a7, 0x90a8, 0x90a9,
-  0x90ab, 0x90ad, 0x90b2, 0x90b7, 0x90bc, 0x90bd, 0x90bf, 0x90c0,
-  0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7,
-  0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519,
-  0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412,
-  0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443,
-  0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477,
-  0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d,
-  0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3,
-  0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9,
-  0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de,
-  0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523,
-  0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549,
-  0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c,
-  /* 0xe0 */
-  0x90c2, 0x90c3, 0x90c6, 0x90c8, 0x90c9, 0x90cb, 0x90cc, 0x90cd,
-  0x90d2, 0x90d4, 0x90d5, 0x90d6, 0x90d8, 0x90d9, 0x90da, 0x90de,
-  0x90df, 0x90e0, 0x90e3, 0x90e4, 0x90e5, 0x90e9, 0x90ea, 0x90ec,
-  0x90ee, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f5, 0x90f6, 0x90f7,
-  0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90ff, 0x9100, 0x9101, 0x9103,
-  0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910a, 0x910b, 0x910c,
-  0x910d, 0x910e, 0x910f, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114,
-  0x9115, 0x9116, 0x9117, 0x9118, 0x911a, 0x911b, 0x911c, 0x911d,
-  0x911f, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, 0x9128,
-  0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x9130, 0x9132,
-  0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913a, 0x913b,
-  0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x9141, 0x9142, 0x9144,
-  0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c,
-  0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f,
-  0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594,
-  0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec,
-  0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3,
-  0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608,
-  0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d,
-  0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c,
-  0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c,
-  0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5,
-  0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f,
-  0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c,
-  /* 0xe1 */
-  0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156,
-  0x9158, 0x9159, 0x915b, 0x915c, 0x915f, 0x9160, 0x9166, 0x9167,
-  0x9168, 0x916b, 0x916d, 0x9173, 0x917a, 0x917b, 0x917c, 0x9180,
-  0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918a, 0x918e,
-  0x918f, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199,
-  0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a4, 0x91a5,
-  0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91ab, 0x91ac, 0x91b0, 0x91b1,
-  0x91b2, 0x91b3, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91bb, 0x91bc,
-  0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4,
-  0x91c5, 0x91c6, 0x91c8, 0x91cb, 0x91d0, 0x91d2, 0x91d3, 0x91d4,
-  0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dd,
-  0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5,
-  0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a,
-  0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a,
-  0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3,
-  0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02,
-  0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b,
-  0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d,
-  0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d,
-  0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89,
-  0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc,
-  0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3,
-  0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2,
-  0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa,
-  /* 0xe2 */
-  0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed,
-  0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5,
-  0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd,
-  0x91fe, 0x91ff, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205,
-  0x9206, 0x9207, 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d,
-  0x920e, 0x920f, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215,
-  0x9216, 0x9217, 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d,
-  0x921e, 0x921f, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x9225,
-  0x9226, 0x9227, 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, 0x922d,
-  0x922e, 0x922f, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, 0x9235,
-  0x9236, 0x9237, 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, 0x923d,
-  0x923e, 0x923f, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245,
-  0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315,
-  0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d,
-  0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7,
-  0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b,
-  0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a,
-  0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91,
-  0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3,
-  0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4,
-  0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4,
-  0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035,
-  0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f,
-  0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042,
-  /* 0xe3 */
-  0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d,
-  0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255,
-  0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d,
-  0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265,
-  0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d,
-  0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276,
-  0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e,
-  0x927f, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286,
-  0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928f,
-  0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, 0x9297,
-  0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f,
-  0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7,
-  0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092,
-  0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6,
-  0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100,
-  0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7,
-  0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3,
-  0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608,
-  0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616,
-  0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54,
-  0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68,
-  0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad,
-  0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa,
-  0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe,
-  /* 0xe4 */
-  0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92af, 0x92b0,
-  0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8,
-  0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0,
-  0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c9,
-  0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1,
-  0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9,
-  0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1,
-  0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9,
-  0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1,
-  0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9,
-  0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0x9300, 0x9301,
-  0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, 0x9309,
-  0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19,
-  0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52,
-  0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93,
-  0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5,
-  0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9,
-  0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b,
-  0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44,
-  0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7,
-  0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2,
-  0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f,
-  0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d,
-  0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1,
-  /* 0xe5 */
-  0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f, 0x9310, 0x9311,
-  0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319,
-  0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f, 0x9320, 0x9321,
-  0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329,
-  0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f, 0x9330, 0x9331,
-  0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339,
-  0x933a, 0x933b, 0x933c, 0x933d, 0x933f, 0x9340, 0x9341, 0x9342,
-  0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a,
-  0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9352,
-  0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935a,
-  0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, 0x9362,
-  0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x936b,
-  0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde,
-  0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f,
-  0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f,
-  0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07,
-  0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6,
-  0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d,
-  0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051,
-  0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074,
-  0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56,
-  0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66,
-  0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e,
-  0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3,
-  /* 0xe6 */
-  0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373,
-  0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b,
-  0x937c, 0x937d, 0x937e, 0x937f, 0x9380, 0x9381, 0x9382, 0x9383,
-  0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b,
-  0x938c, 0x938d, 0x938e, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394,
-  0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c,
-  0x939d, 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4,
-  0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac,
-  0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4,
-  0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc,
-  0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4,
-  0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93cb, 0x93cc, 0x93cd,
-  0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af,
-  0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8,
-  0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13,
-  0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec,
-  0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2,
-  0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8,
-  0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15,
-  0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75,
-  0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85,
-  0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b,
-  0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7,
-  0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9,
-  /* 0xe7 */
-  0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5,
-  0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de,
-  0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6,
-  0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee,
-  0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6,
-  0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe,
-  0x93ff, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406,
-  0x9407, 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x940e,
-  0x940f, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, 0x9416,
-  0x9417, 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, 0x941e,
-  0x941f, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426,
-  0x9427, 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, 0x942e,
-  0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb,
-  0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8,
-  0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa,
-  0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b,
-  0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b,
-  0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
-  0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32,
-  0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e,
-  0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7,
-  0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a,
-  0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b,
-  0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c,
-  /* 0xe8 */
-  0x942f, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436,
-  0x9437, 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943f,
-  0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447,
-  0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f,
-  0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457,
-  0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f,
-  0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467,
-  0x9468, 0x9469, 0x946a, 0x946c, 0x946d, 0x946e, 0x946f, 0x9470,
-  0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478,
-  0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f, 0x9480,
-  0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, 0x94c7,
-  0x94cf, 0x94d3, 0x94d4, 0x94da, 0x94e6, 0x94fb, 0x951c, 0x9520,
-  0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477,
-  0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b,
-  0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea,
-  0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5,
-  0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e,
-  0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a,
-  0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd,
-  0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832,
-  0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883,
-  0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a,
-  0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b,
-  0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9,
-  /* 0xe9 */
-  0x9527, 0x9533, 0x953d, 0x9543, 0x9548, 0x954b, 0x9555, 0x955a,
-  0x9560, 0x956e, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957a,
-  0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, 0x9583,
-  0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b,
-  0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, 0x9593,
-  0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, 0x959b,
-  0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, 0x95a3,
-  0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab,
-  0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, 0x95b3,
-  0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb,
-  0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, 0x95c3,
-  0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, 0x95cb,
-  0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971,
-  0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998,
-  0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966,
-  0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4,
-  0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff,
-  0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e,
-  0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28,
-  0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337,
-  0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d,
-  0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72,
-  0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c,
-  0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b,
-  /* 0xea */
-  0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3,
-  0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, 0x95db,
-  0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3,
-  0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95ec, 0x95ff, 0x9607, 0x9613,
-  0x9618, 0x961b, 0x961e, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626,
-  0x9627, 0x9628, 0x9629, 0x962b, 0x962c, 0x962d, 0x962f, 0x9630,
-  0x9637, 0x9638, 0x9639, 0x963a, 0x963e, 0x9641, 0x9643, 0x964a,
-  0x964e, 0x964f, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0x9658,
-  0x9659, 0x965a, 0x965c, 0x965d, 0x965e, 0x9660, 0x9663, 0x9665,
-  0x9666, 0x966b, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9673,
-  0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x967f,
-  0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968a,
-  0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217,
-  0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7,
-  0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee,
-  0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600,
-  0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006,
-  0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677,
-  0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6,
-  0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45,
-  0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7,
-  0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e,
-  0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b,
-  0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0,
-  /* 0xeb */
-  0x968c, 0x968e, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969a,
-  0x969b, 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3,
-  0x96a4, 0x96a5, 0x96a6, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac,
-  0x96ad, 0x96ae, 0x96af, 0x96b1, 0x96b2, 0x96b4, 0x96b5, 0x96b7,
-  0x96b8, 0x96ba, 0x96bb, 0x96bf, 0x96c2, 0x96c3, 0x96c8, 0x96ca,
-  0x96cb, 0x96d0, 0x96d1, 0x96d3, 0x96d4, 0x96d6, 0x96d7, 0x96d8,
-  0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e1,
-  0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96eb, 0x96ec,
-  0x96ed, 0x96ee, 0x96f0, 0x96f1, 0x96f2, 0x96f4, 0x96f5, 0x96f8,
-  0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96ff, 0x9702, 0x9703, 0x9705,
-  0x970a, 0x970b, 0x970c, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715,
-  0x9717, 0x9718, 0x9719, 0x971a, 0x971b, 0x971d, 0x971f, 0x9720,
-  0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9,
-  0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a,
-  0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b,
-  0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c,
-  0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4,
-  0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4,
-  0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4,
-  0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a,
-  0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153,
-  0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d,
-  0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5,
-  0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb,
-  /* 0xec */
-  0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728,
-  0x9729, 0x972b, 0x972c, 0x972e, 0x972f, 0x9731, 0x9733, 0x9734,
-  0x9735, 0x9736, 0x9737, 0x973a, 0x973b, 0x973c, 0x973d, 0x973f,
-  0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747,
-  0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f,
-  0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975a, 0x975c,
-  0x975d, 0x975f, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976a,
-  0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772,
-  0x9775, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977d, 0x977e,
-  0x977f, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, 0x9787,
-  0x9788, 0x9789, 0x978a, 0x978c, 0x978e, 0x978f, 0x9790, 0x9793,
-  0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d,
-  0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59,
-  0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40,
-  0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4,
-  0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096,
-  0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca,
-  0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168,
-  0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5,
-  0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228,
-  0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248,
-  0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953,
-  0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985,
-  0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0,
-  /* 0xed */
-  0x979e, 0x979f, 0x97a1, 0x97a2, 0x97a4, 0x97a5, 0x97a6, 0x97a7,
-  0x97a8, 0x97a9, 0x97aa, 0x97ac, 0x97ae, 0x97b0, 0x97b1, 0x97b3,
-  0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc,
-  0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4,
-  0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc,
-  0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4,
-  0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc,
-  0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4,
-  0x97e5, 0x97e8, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f4,
-  0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe,
-  0x97ff, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, 0x9806,
-  0x9807, 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, 0x980e,
-  0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab,
-  0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206,
-  0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800,
-  0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d,
-  0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823,
-  0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847,
-  0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1,
-  0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec,
-  0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b,
-  0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707,
-  0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738,
-  0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768,
-  /* 0xee */
-  0x980f, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816,
-  0x9817, 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e,
-  0x981f, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826,
-  0x9827, 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e,
-  0x982f, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836,
-  0x9837, 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e,
-  0x983f, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846,
-  0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e,
-  0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856,
-  0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e,
-  0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866,
-  0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e,
-  0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791,
-  0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e,
-  0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61,
-  0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e,
-  0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a,
-  0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a,
-  0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac,
-  0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9,
-  0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca,
-  0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5,
-  0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0,
-  0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea,
-  /* 0xef */
-  0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988b, 0x988e,
-  0x9892, 0x9895, 0x9899, 0x98a3, 0x98a8, 0x98a9, 0x98aa, 0x98ab,
-  0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3,
-  0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb,
-  0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3,
-  0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb,
-  0x98cc, 0x98cd, 0x98cf, 0x98d0, 0x98d4, 0x98d6, 0x98d7, 0x98db,
-  0x98dc, 0x98dd, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5,
-  0x98e6, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef,
-  0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7,
-  0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x98ff,
-  0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, 0x9907,
-  0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7,
-  0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507,
-  0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514,
-  0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522,
-  0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536,
-  0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544,
-  0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553,
-  0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f,
-  0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568,
-  0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573,
-  0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb,
-  0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14,
-  /* 0xf0 */
-  0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9911,
-  0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919,
-  0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f, 0x9920, 0x9921,
-  0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929,
-  0x992a, 0x992b, 0x992c, 0x992d, 0x992f, 0x9930, 0x9931, 0x9932,
-  0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993a,
-  0x993b, 0x993c, 0x993d, 0x993e, 0x993f, 0x9940, 0x9941, 0x9942,
-  0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a,
-  0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9952,
-  0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c,
-  0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9964, 0x9966,
-  0x9973, 0x9978, 0x9979, 0x997b, 0x997e, 0x9982, 0x9983, 0x9989,
-  0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e,
-  0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22,
-  0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36,
-  0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44,
-  0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51,
-  0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66,
-  0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d,
-  0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3,
-  0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2,
-  0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7,
-  0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c,
-  0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619,
-  /* 0xf1 */
-  0x998c, 0x998e, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f,
-  0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a6, 0x99a7, 0x99a9,
-  0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1,
-  0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9,
-  0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1,
-  0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9,
-  0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1,
-  0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9,
-  0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1,
-  0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9,
-  0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1,
-  0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9,
-  0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f,
-  0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c,
-  0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80,
-  0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad,
-  0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2,
-  0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5,
-  0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919,
-  0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966,
-  0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014,
-  0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029,
-  0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052,
-  0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883,
-  /* 0xf2 */
-  0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff, 0x9a00, 0x9a01,
-  0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09,
-  0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11,
-  0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17, 0x9a18, 0x9a19,
-  0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f, 0x9a20, 0x9a21,
-  0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29,
-  0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31,
-  0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37, 0x9a38, 0x9a39,
-  0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f, 0x9a40, 0x9a41,
-  0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49,
-  0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51,
-  0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59,
-  0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e,
-  0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c,
-  0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b,
-  0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6,
-  0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9,
-  0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0,
-  0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707,
-  0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e,
-  0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729,
-  0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760,
-  0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764,
-  0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2,
-  /* 0xf3 */
-  0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61,
-  0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69,
-  0x9a6a, 0x9a6b, 0x9a72, 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a94,
-  0x9a95, 0x9a99, 0x9aa6, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad,
-  0x9aae, 0x9aaf, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab9, 0x9abb,
-  0x9abd, 0x9abe, 0x9abf, 0x9ac3, 0x9ac4, 0x9ac6, 0x9ac7, 0x9ac8,
-  0x9ac9, 0x9aca, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad2, 0x9ad4,
-  0x9ad5, 0x9ad6, 0x9ad7, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add,
-  0x9ade, 0x9ae0, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae8,
-  0x9ae9, 0x9aea, 0x9aec, 0x9aee, 0x9af0, 0x9af1, 0x9af2, 0x9af3,
-  0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9afa, 0x9afc, 0x9afd,
-  0x9afe, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b04, 0x9b05, 0x9b06,
-  0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5,
-  0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0,
-  0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe,
-  0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44,
-  0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15,
-  0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e,
-  0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58,
-  0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b,
-  0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac,
-  0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4,
-  0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea,
-  0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b,
-  /* 0xf4 */
-  0x9b07, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10,
-  0x9b11, 0x9b12, 0x9b14, 0x9b15, 0x9b16, 0x9b17, 0x9b18, 0x9b19,
-  0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b20, 0x9b21, 0x9b22,
-  0x9b24, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2b,
-  0x9b2c, 0x9b2d, 0x9b2e, 0x9b30, 0x9b31, 0x9b33, 0x9b34, 0x9b35,
-  0x9b36, 0x9b37, 0x9b38, 0x9b39, 0x9b3a, 0x9b3d, 0x9b3e, 0x9b3f,
-  0x9b40, 0x9b46, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b50, 0x9b52,
-  0x9b53, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b,
-  0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63,
-  0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b,
-  0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73,
-  0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b,
-  0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201,
-  0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d,
-  0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e,
-  0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e,
-  0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7,
-  0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c,
-  0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc,
-  0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf,
-  0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3,
-  0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4,
-  0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47,
-  0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164,
-  /* 0xf5 */
-  0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f, 0x9b80, 0x9b81, 0x9b82, 0x9b83,
-  0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b,
-  0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93,
-  0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b,
-  0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3,
-  0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab,
-  0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3,
-  0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb,
-  0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3,
-  0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb,
-  0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3,
-  0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb,
-  0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172,
-  0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2,
-  0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba,
-  0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5,
-  0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde,
-  0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3,
-  0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f,
-  0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35,
-  0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a,
-  0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94,
-  0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98,
-  0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc,
-  /* 0xf6 */
-  0x9bdc, 0x9bdd, 0x9bde, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3,
-  0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb,
-  0x9bec, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3,
-  0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb,
-  0x9bfc, 0x9bfd, 0x9bfe, 0x9bff, 0x9c00, 0x9c01, 0x9c02, 0x9c03,
-  0x9c04, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, 0x9c0a, 0x9c0b,
-  0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c12, 0x9c13,
-  0x9c14, 0x9c15, 0x9c16, 0x9c17, 0x9c18, 0x9c19, 0x9c1a, 0x9c1b,
-  0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, 0x9c23,
-  0x9c24, 0x9c25, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c2b,
-  0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f, 0x9c30, 0x9c31, 0x9c32, 0x9c33,
-  0x9c34, 0x9c35, 0x9c36, 0x9c37, 0x9c38, 0x9c39, 0x9c3a, 0x9c3b,
-  0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3,
-  0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d,
-  0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88,
-  0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc,
-  0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8,
-  0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82,
-  0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90,
-  0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f,
-  0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8,
-  0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3,
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd,
-  0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb,
-  /* 0xf7 */
-  0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f, 0x9c40, 0x9c41, 0x9c42, 0x9c43,
-  0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b,
-  0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0x9c53,
-  0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b,
-  0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0x9c62, 0x9c63,
-  0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b,
-  0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73,
-  0x9c74, 0x9c75, 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b,
-  0x9c7d, 0x9c7e, 0x9c80, 0x9c83, 0x9c84, 0x9c89, 0x9c8a, 0x9c8c,
-  0x9c8f, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9c9d, 0x9caa,
-  0x9cac, 0x9caf, 0x9cb9, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2,
-  0x9cc8, 0x9cc9, 0x9cd1, 0x9cd2, 0x9cda, 0x9cdb, 0x9ce0, 0x9ce1,
-  0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5,
-  0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c,
-  0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2,
-  0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc,
-  0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45,
-  0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d,
-  0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb,
-  0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23,
-  0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92,
-  0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf,
-  0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c,
-  0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44,
-  /* 0xf8 */
-  0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea,
-  0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2,
-  0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa,
-  0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x9d00, 0x9d01, 0x9d02,
-  0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, 0x9d0a,
-  0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d12,
-  0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17, 0x9d18, 0x9d19, 0x9d1a,
-  0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f, 0x9d20, 0x9d21, 0x9d22,
-  0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27, 0x9d28, 0x9d29, 0x9d2a,
-  0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d31, 0x9d32,
-  0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37, 0x9d38, 0x9d39, 0x9d3a,
-  0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f, 0x9d40, 0x9d41, 0x9d42,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xf9 */
-  0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a,
-  0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52,
-  0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a,
-  0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62,
-  0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a,
-  0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72,
-  0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a,
-  0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x9d82,
-  0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a,
-  0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92,
-  0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a,
-  0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfa */
-  0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa,
-  0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2,
-  0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba,
-  0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2,
-  0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca,
-  0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2,
-  0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda,
-  0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2,
-  0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea,
-  0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2,
-  0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa,
-  0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff, 0x9e00, 0x9e01, 0x9e02,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfb */
-  0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, 0x9e08, 0x9e09, 0x9e0a,
-  0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f, 0x9e10, 0x9e11, 0x9e12,
-  0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17, 0x9e18, 0x9e19, 0x9e1a,
-  0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e24, 0x9e27, 0x9e2e, 0x9e30,
-  0x9e34, 0x9e3b, 0x9e3c, 0x9e40, 0x9e4d, 0x9e50, 0x9e52, 0x9e53,
-  0x9e54, 0x9e56, 0x9e59, 0x9e5d, 0x9e5f, 0x9e60, 0x9e61, 0x9e62,
-  0x9e65, 0x9e6e, 0x9e6f, 0x9e72, 0x9e74, 0x9e75, 0x9e76, 0x9e77,
-  0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e80, 0x9e81,
-  0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e89, 0x9e8a, 0x9e8c, 0x9e8d,
-  0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e94, 0x9e95, 0x9e96, 0x9e97,
-  0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9e, 0x9ea0, 0x9ea1,
-  0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfc */
-  0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2,
-  0x9eb3, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb9, 0x9eba, 0x9ebc, 0x9ebf,
-  0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8,
-  0x9eca, 0x9ecb, 0x9ecc, 0x9ed0, 0x9ed2, 0x9ed3, 0x9ed5, 0x9ed6,
-  0x9ed7, 0x9ed9, 0x9eda, 0x9ede, 0x9ee1, 0x9ee3, 0x9ee4, 0x9ee6,
-  0x9ee8, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2,
-  0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9efa, 0x9efd,
-  0x9eff, 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x9f06,
-  0x9f07, 0x9f08, 0x9f09, 0x9f0a, 0x9f0c, 0x9f0f, 0x9f11, 0x9f12,
-  0x9f14, 0x9f15, 0x9f16, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1c, 0x9f1d,
-  0x9f1e, 0x9f1f, 0x9f21, 0x9f23, 0x9f24, 0x9f25, 0x9f26, 0x9f27,
-  0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2d, 0x9f2e, 0x9f30, 0x9f31,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfd */
-  0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f38, 0x9f3a, 0x9f3c,
-  0x9f3f, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f45, 0x9f46, 0x9f47,
-  0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f,
-  0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59,
-  0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0x9f60, 0x9f61,
-  0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69,
-  0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71,
-  0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79,
-  0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f81, 0x9f82, 0x9f8d,
-  0x9f8e, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95,
-  0x9f96, 0x9f97, 0x9f98, 0x9f9c, 0x9f9d, 0x9f9e, 0x9fa1, 0x9fa2,
-  0x9fa3, 0x9fa4, 0x9fa5, 0xf92c, 0xf979, 0xf995, 0xf9e7, 0xf9f1,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xfe */
-  0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa18,
-  0xfa1f, 0xfa20, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29,
-};
-
-static int
-cp936ext_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = s[0];
-  if ((c1 >= 0x81 && c1 <= 0xfe)) {
-    if (n >= 2) {
-      unsigned char c2 = s[1];
-      if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) {
-        unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40));
-        unsigned short wc = 0xfffd;
-        {
-          if (i < 23766)
-            wc = cp936ext_2uni_page81[i];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-
-static const unsigned short cp936ext_page0014[208] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa1e8, 0x0000, 0x0000, 0xa1ec, /*0xa0-0xa7*/
-  0xa1a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0xa1e3, 0xa1c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a4, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c1, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-  0xa8a4, 0xa8a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe0-0xe7*/
-  0xa8a8, 0xa8a6, 0xa8ba, 0x0000, 0xa8ac, 0xa8aa, 0x0000, 0x0000, /*0xe8-0xef*/
-  0x0000, 0x0000, 0xa8b0, 0xa8ae, 0x0000, 0x0000, 0x0000, 0xa1c2, /*0xf0-0xf7*/
-  0x0000, 0xa8b4, 0xa8b2, 0x0000, 0xa8b9, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/
-  /* 0x0100 */
-  0x0000, 0xa8a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0xa8a5, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0xa8a7, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0xa8a9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8ad, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0xa8b1, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-};
-static const unsigned short cp936ext_page0039[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8a3, 0x0000, /*0xc8-0xcf*/
-  0xa8ab, 0x0000, 0xa8af, 0x0000, 0xa8b3, 0x0000, 0xa8b5, 0x0000, /*0xd0-0xd7*/
-  0xa8b6, 0x0000, 0xa8b7, 0x0000, 0xa8b8, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-};
-static const unsigned short cp936ext_page004a[24] = {
-  0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/
-};
-static const unsigned short cp936ext_page0058[32] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a6, /*0xc0-0xc7*/
-  0x0000, 0xa1a5, 0xa840, 0xa841, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0xa842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-};
-static const unsigned short cp936ext_page0072[64] = {
-  0x0000, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7, /*0x90-0x97*/
-  0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af, /*0x98-0x9f*/
-  0xa6b0, 0xa6b1, 0x0000, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, /*0xa0-0xa7*/
-  0xa6b7, 0xa6b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, /*0xb0-0xb7*/
-  0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, /*0xb8-0xbf*/
-  0xa6d0, 0xa6d1, 0x0000, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, /*0xc0-0xc7*/
-  0xa6d7, 0xa6d8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/
-};
-static const unsigned short cp936ext_page0080[88] = {
-  0x0000, 0xa7a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, /*0x10-0x17*/
-  0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, /*0x18-0x1f*/
-  0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, /*0x20-0x27*/
-  0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, /*0x28-0x2f*/
-  0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, /*0x30-0x37*/
-  0xa7da, 0xa7db, 0xa7dc, 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, /*0x38-0x3f*/
-  0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, /*0x40-0x47*/
-  0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, /*0x48-0x4f*/
-  0x0000, 0xa7d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-};
-static const unsigned short cp936ext_page0402[48] = {
-  0xa95c, 0x0000, 0x0000, 0xa843, 0xa1aa, 0xa844, 0xa1ac, 0x0000, /*0x10-0x17*/
-  0xa1ae, 0xa1af, 0x0000, 0x0000, 0xa1b0, 0xa1b1, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa845, 0xa1ad, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0xa1eb, 0x0000, 0xa1e4, 0xa1e5, 0x0000, 0xa846, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0xa1f9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-};
-static const unsigned short cp936ext_page0420[160] = {
-  0x0000, 0x0000, 0x0000, 0xa1e6, 0x0000, 0xa847, 0x0000, 0x0000, /*0x00-0x07*/
-  0x0000, 0xa848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ed, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0xa959, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, /*0x60-0x67*/
-  0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8, /*0x70-0x77*/
-  0xa2a9, 0xa2aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0xa1fb, 0xa1fc, 0xa1fa, 0xa1fd, 0x0000, 0x0000, 0xa849, 0xa84a, /*0x90-0x97*/
-  0xa84b, 0xa84c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-};
-static const unsigned short cp936ext_page0441[184] = {
-  0xa1ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c7, /*0x08-0x0f*/
-  0x0000, 0xa1c6, 0x0000, 0x0000, 0x0000, 0xa84d, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0xa1cc, 0x0000, 0x0000, 0xa1d8, 0xa1de, 0xa84e, /*0x18-0x1f*/
-  0xa1cf, 0x0000, 0x0000, 0xa84f, 0x0000, 0xa1ce, 0x0000, 0xa1c4, /*0x20-0x27*/
-  0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0x0000, 0x0000, 0xa1d3, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1d7, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0xa1d6, 0x0000, 0x0000, 0x0000, 0xa1d5, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0x0000, 0x0000, 0xa850, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/
-  0xa1d9, 0xa1d4, 0x0000, 0x0000, 0xa1dc, 0xa1dd, 0xa851, 0xa852, /*0x60-0x67*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1da, 0xa1db, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa892, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0xa1d1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1cd, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa853, /*0xb8-0xbf*/
-};
-static const unsigned short cp936ext_page048c[64] = {
-  0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, /*0x60-0x67*/
-  0xa2e1, 0xa2e2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, /*0x70-0x77*/
-  0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, /*0x78-0x7f*/
-  0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, /*0x80-0x87*/
-  0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, /*0x88-0x8f*/
-  0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, /*0x90-0x97*/
-  0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-};
-static const unsigned short cp936ext_page04a0[232] = {
-  0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, 0xa9aa, 0xa9ab, /*0x00-0x07*/
-  0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, 0xa9b2, 0xa9b3, /*0x08-0x0f*/
-  0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, /*0x10-0x17*/
-  0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1, 0xa9c2, 0xa9c3, /*0x18-0x1f*/
-  0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, /*0x20-0x27*/
-  0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d2, 0xa9d3, /*0x28-0x2f*/
-  0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, 0xa9da, 0xa9db, /*0x30-0x37*/
-  0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1, 0xa9e2, 0xa9e3, /*0x38-0x3f*/
-  0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, 0xa9ea, 0xa9eb, /*0x40-0x47*/
-  0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/
-  0xa854, 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, /*0x50-0x57*/
-  0xa85c, 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, /*0x58-0x5f*/
-  0xa864, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, /*0x60-0x67*/
-  0xa86c, 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, /*0x68-0x6f*/
-  0xa874, 0xa875, 0xa876, 0xa877, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, 0xa87d, 0xa87e, /*0x80-0x87*/
-  0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0xa888, 0xa889, 0xa88a, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/
-  0xa1f6, 0xa1f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0xa1f8, 0xa1f7, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa88b, 0xa88c, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1f4, 0xa1f3, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0xa1f0, 0x0000, 0x0000, 0xa1f2, 0xa1f1, /*0xc8-0xcf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/
-  0x0000, 0x0000, 0xa88d, 0xa88e, 0xa88f, 0xa890, 0x0000, 0x0000, /*0xe0-0xe7*/
-};
-static const unsigned short cp936ext_page04c0[72] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ef, 0xa1ee, 0x0000, /*0x00-0x07*/
-  0x0000, 0xa891, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0xa1e2, 0x0000, 0xa1e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-};
-static const unsigned short cp936ext_page0600[304] = {
-  0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0x0000, 0xa1a9, 0xa965, 0xa996, /*0x00-0x07*/
-  0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, /*0x08-0x0f*/
-  0xa1be, 0xa1bf, 0xa893, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, /*0x10-0x17*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa894, 0xa895, 0x0000, /*0x18-0x1f*/
-  0x0000, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, /*0x20-0x27*/
-  0xa947, 0xa948, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/
-  0x0000, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, /*0x40-0x47*/
-  0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, /*0x48-0x4f*/
-  0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, /*0x50-0x57*/
-  0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, /*0x58-0x5f*/
-  0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, /*0x60-0x67*/
-  0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, /*0x68-0x6f*/
-  0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, /*0x70-0x77*/
-  0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, /*0x78-0x7f*/
-  0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, /*0x80-0x87*/
-  0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, /*0x88-0x8f*/
-  0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0xa961, 0xa962, 0xa966, 0xa967, 0x0000, /*0x98-0x9f*/
-  0x0000, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, /*0xa0-0xa7*/
-  0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af, /*0xa8-0xaf*/
-  0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, /*0xb0-0xb7*/
-  0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf, /*0xb8-0xbf*/
-  0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, /*0xc0-0xc7*/
-  0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, /*0xc8-0xcf*/
-  0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, /*0xd0-0xd7*/
-  0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df, /*0xd8-0xdf*/
-  0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, /*0xe0-0xe7*/
-  0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, /*0xe8-0xef*/
-  0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0x0000, /*0xf0-0xf7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa960, 0xa963, 0xa964, 0x0000, /*0xf8-0xff*/
-  /* 0x3100 */
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8c5, 0xa8c6, 0xa8c7, /*0x00-0x07*/
-  0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, /*0x08-0x0f*/
-  0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, /*0x10-0x17*/
-  0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, 0xa8dd, 0xa8de, 0xa8df, /*0x18-0x1f*/
-  0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, /*0x20-0x27*/
-  0xa8e8, 0xa8e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-};
-static const unsigned short cp936ext_page0644[24] = {
-  0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, /*0x20-0x27*/
-  0xa2ed, 0xa2ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-  0x0000, 0xa95a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/
-};
-static const unsigned short cp936ext_page0671[80] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa94a, 0xa94b, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa94c, 0xa94d, 0xa94e, 0x0000, /*0x98-0x9f*/
-  0x0000, 0xa94f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0xa950, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa951, 0x0000, /*0xc8-0xcf*/
-  0x0000, 0xa952, 0xa953, 0x0000, 0x0000, 0xa954, 0x0000, 0x0000, /*0xd0-0xd7*/
-};
-static const unsigned short cp936ext_page09c0[20904] = {
-  0xd2bb, 0xb6a1, 0x8140, 0xc6df, 0x8141, 0x8142, 0x8143, 0xcdf2, /*0x00-0x07*/
-  0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2, 0xd8a2, 0xb2bb, 0xd3eb, 0x8144, /*0x08-0x0f*/
-  0xd8a4, 0xb3f3, 0x8145, 0xd7a8, 0xc7d2, 0xd8a7, 0xcac0, 0x8146, /*0x10-0x17*/
-  0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9, 0x8147, /*0x18-0x1f*/
-  0x8148, 0x8149, 0xb6aa, 0x814a, 0xc1bd, 0xd1cf, 0x814b, 0xc9a5, /*0x20-0x27*/
-  0xd8ad, 0x814c, 0xb8f6, 0xd1be, 0xe3dc, 0xd6d0, 0x814d, 0x814e, /*0x28-0x2f*/
-  0xb7e1, 0x814f, 0xb4ae, 0x8150, 0xc1d9, 0x8151, 0xd8bc, 0x8152, /*0x30-0x37*/
-  0xcde8, 0xb5a4, 0xceaa, 0xd6f7, 0x8153, 0xc0f6, 0xbed9, 0xd8af, /*0x38-0x3f*/
-  0x8154, 0x8155, 0x8156, 0xc4cb, 0x8157, 0xbec3, 0x8158, 0xd8b1, /*0x40-0x47*/
-  0xc3b4, 0xd2e5, 0x8159, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, /*0x48-0x4f*/
-  0xc0d6, 0x815a, 0xc6b9, 0xc5d2, 0xc7c7, 0x815b, 0xb9d4, 0x815c, /*0x50-0x57*/
-  0xb3cb, 0xd2d2, 0x815d, 0x815e, 0xd8bf, 0xbec5, 0xc6f2, 0xd2b2, /*0x58-0x5f*/
-  0xcfb0, 0xcfe7, 0x815f, 0x8160, 0x8161, 0x8162, 0xcae9, 0x8163, /*0x60-0x67*/
-  0x8164, 0xd8c0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816a, /*0x68-0x6f*/
-  0xc2f2, 0xc2d2, 0x816b, 0xc8e9, 0x816c, 0x816d, 0x816e, 0x816f, /*0x70-0x77*/
-  0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xc7ac, 0x8176, /*0x78-0x7f*/
-  0x8177, 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0xc1cb, 0x817d, /*0x80-0x87*/
-  0xd3e8, 0xd5f9, 0x817e, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da, 0xbff7, /*0x88-0x8f*/
-  0x8180, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0x8181, 0x8182, /*0x90-0x97*/
-  0xd8a8, 0x8183, 0xd1c7, 0xd0a9, 0x8184, 0x8185, 0x8186, 0xd8bd, /*0x98-0x9f*/
-  0xd9ef, 0xcdf6, 0xbfba, 0x8187, 0xbdbb, 0xbaa5, 0xd2e0, 0xb2fa, /*0xa0-0xa7*/
-  0xbae0, 0xc4b6, 0x8188, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0x8189, /*0xa8-0xaf*/
-  0x818a, 0x818b, 0xc7d7, 0xd9f1, 0x818c, 0xd9f4, 0x818d, 0x818e, /*0xb0-0xb7*/
-  0x818f, 0x8190, 0xc8cb, 0xd8e9, 0x8191, 0x8192, 0x8193, 0xd2da, /*0xb8-0xbf*/
-  0xcab2, 0xc8ca, 0xd8ec, 0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, /*0xc0-0xc7*/
-  0x8194, 0xd8eb, 0xbdf1, 0xbde9, 0x8195, 0xc8d4, 0xb4d3, 0x8196, /*0xc8-0xcf*/
-  0x8197, 0xc2d8, 0x8198, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc, /*0xd0-0xd7*/
-  0xb8b6, 0xcfc9, 0x8199, 0x819a, 0x819b, 0xd9da, 0xd8f0, 0xc7aa, /*0xd8-0xdf*/
-  0x819c, 0xd8ee, 0x819d, 0xb4fa, 0xc1ee, 0xd2d4, 0x819e, 0x819f, /*0xe0-0xe7*/
-  0xd8ed, 0x81a0, 0xd2c7, 0xd8ef, 0xc3c7, 0x81a1, 0x81a2, 0x81a3, /*0xe8-0xef*/
-  0xd1f6, 0x81a4, 0xd6d9, 0xd8f2, 0x81a5, 0xd8f5, 0xbcfe, 0xbcdb, /*0xf0-0xf7*/
-  0x81a6, 0x81a7, 0x81a8, 0xc8ce, 0x81a9, 0xb7dd, 0x81aa, 0xb7c2, /*0xf8-0xff*/
-  /* 0x4f00 */
-  0x81ab, 0xc6f3, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, /*0x00-0x07*/
-  0x81b2, 0xd8f8, 0xd2c1, 0x81b3, 0x81b4, 0xcee9, 0xbcbf, 0xb7fc, /*0x08-0x0f*/
-  0xb7a5, 0xd0dd, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0xd6da, /*0x10-0x17*/
-  0xd3c5, 0xbbef, 0xbbe1, 0xd8f1, 0x81ba, 0x81bb, 0xc9a1, 0xceb0, /*0x18-0x1f*/
-  0xb4ab, 0x81bc, 0xd8f3, 0x81bd, 0xc9cb, 0xd8f6, 0xc2d7, 0xd8f7, /*0x20-0x27*/
-  0x81be, 0x81bf, 0xceb1, 0xd8f9, 0x81c0, 0x81c1, 0x81c2, 0xb2ae, /*0x28-0x2f*/
-  0xb9c0, 0x81c3, 0xd9a3, 0x81c4, 0xb0e9, 0x81c5, 0xc1e6, 0x81c6, /*0x30-0x37*/
-  0xc9ec, 0x81c7, 0xcbc5, 0x81c8, 0xcbc6, 0xd9a4, 0x81c9, 0x81ca, /*0x38-0x3f*/
-  0x81cb, 0x81cc, 0x81cd, 0xb5e8, 0x81ce, 0x81cf, 0xb5ab, 0x81d0, /*0x40-0x47*/
-  0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0xcebb, 0xb5cd, 0xd7a1, /*0x48-0x4f*/
-  0xd7f4, 0xd3d3, 0x81d6, 0xcce5, 0x81d7, 0xbace, 0x81d8, 0xd9a2, /*0x50-0x57*/
-  0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1, /*0x58-0x5f*/
-  0xc4e3, 0x81d9, 0x81da, 0xd3b6, 0xd8f4, 0xd9dd, 0x81db, 0xd8fb, /*0x60-0x67*/
-  0x81dc, 0xc5e5, 0x81dd, 0x81de, 0xc0d0, 0x81df, 0x81e0, 0xd1f0, /*0x68-0x6f*/
-  0xb0db, 0x81e1, 0x81e2, 0xbcd1, 0xd9a6, 0x81e3, 0xd9a5, 0x81e4, /*0x70-0x77*/
-  0x81e5, 0x81e6, 0x81e7, 0xd9ac, 0xd9ae, 0x81e8, 0xd9ab, 0xcab9, /*0x78-0x7f*/
-  0x81e9, 0x81ea, 0x81eb, 0xd9a9, 0xd6b6, 0x81ec, 0x81ed, 0x81ee, /*0x80-0x87*/
-  0xb3de, 0xd9a8, 0x81ef, 0xc0fd, 0x81f0, 0xcacc, 0x81f1, 0xd9aa, /*0x88-0x8f*/
-  0x81f2, 0xd9a7, 0x81f3, 0x81f4, 0xd9b0, 0x81f5, 0x81f6, 0xb6b1, /*0x90-0x97*/
-  0x81f7, 0x81f8, 0x81f9, 0xb9a9, 0x81fa, 0xd2c0, 0x81fb, 0x81fc, /*0x98-0x9f*/
-  0xcfc0, 0x81fd, 0x81fe, 0xc2c2, 0x8240, 0xbdc4, 0xd5ec, 0xb2e0, /*0xa0-0xa7*/
-  0xc7c8, 0xbfeb, 0xd9ad, 0x8241, 0xd9af, 0x8242, 0xceea, 0xbaee, /*0xa8-0xaf*/
-  0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xc7d6, 0x8248, 0x8249, /*0xb0-0xb7*/
-  0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0xb1e3, /*0xb8-0xbf*/
-  0x8251, 0x8252, 0x8253, 0xb4d9, 0xb6ed, 0xd9b4, 0x8254, 0x8255, /*0xc0-0xc7*/
-  0x8256, 0x8257, 0xbfa1, 0x8258, 0x8259, 0x825a, 0xd9de, 0xc7ce, /*0xc8-0xcf*/
-  0xc0fe, 0xd9b8, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f, 0xcbd7, /*0xd0-0xd7*/
-  0xb7fd, 0x8260, 0xd9b5, 0x8261, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9, /*0xd8-0xdf*/
-  0x8262, 0xd0c5, 0x8263, 0xd9b6, 0x8264, 0x8265, 0xd9b1, 0x8266, /*0xe0-0xe7*/
-  0xd9b2, 0xc1a9, 0xd9b3, 0x8267, 0x8268, 0xbcf3, 0xd0de, 0xb8a9, /*0xe8-0xef*/
-  0x8269, 0xbee3, 0x826a, 0xd9bd, 0x826b, 0x826c, 0x826d, 0x826e, /*0xf0-0xf7*/
-  0xd9ba, 0x826f, 0xb0b3, 0x8270, 0x8271, 0x8272, 0xd9c2, 0x8273, /*0xf8-0xff*/
-  /* 0x5000 */
-  0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, /*0x00-0x07*/
-  0x827c, 0x827d, 0x827e, 0x8280, 0xd9c4, 0xb1b6, 0x8281, 0xd9bf, /*0x08-0x0f*/
-  0x8282, 0x8283, 0xb5b9, 0x8284, 0xbef3, 0x8285, 0x8286, 0x8287, /*0x10-0x17*/
-  0xccc8, 0xbaf2, 0xd2d0, 0x8288, 0xd9c3, 0x8289, 0x828a, 0xbde8, /*0x18-0x1f*/
-  0x828b, 0xb3ab, 0x828c, 0x828d, 0x828e, 0xd9c5, 0xbeeb, 0x828f, /*0x20-0x27*/
-  0xd9c6, 0xd9bb, 0xc4df, 0x8290, 0xd9be, 0xd9c1, 0xd9c0, 0x8291, /*0x28-0x2f*/
-  0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, /*0x30-0x37*/
-  0x829a, 0x829b, 0xd5ae, 0x829c, 0xd6b5, 0x829d, 0xc7e3, 0x829e, /*0x38-0x3f*/
-  0x829f, 0x82a0, 0x82a1, 0xd9c8, 0x82a2, 0x82a3, 0x82a4, 0xbcd9, /*0x40-0x47*/
-  0xd9ca, 0x82a5, 0x82a6, 0x82a7, 0xd9bc, 0x82a8, 0xd9cb, 0xc6ab, /*0x48-0x4f*/
-  0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0xd9c9, 0x82ae, 0x82af, /*0x50-0x57*/
-  0x82b0, 0x82b1, 0xd7f6, 0x82b2, 0xcda3, 0x82b3, 0x82b4, 0x82b5, /*0x58-0x5f*/
-  0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0xbda1, 0x82bb, 0x82bc, /*0x60-0x67*/
-  0x82bd, 0x82be, 0x82bf, 0x82c0, 0xd9cc, 0x82c1, 0x82c2, 0x82c3, /*0x68-0x6f*/
-  0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0xc5bc, 0xcdb5, /*0x70-0x77*/
-  0x82ca, 0x82cb, 0x82cc, 0xd9cd, 0x82cd, 0x82ce, 0xd9c7, 0xb3a5, /*0x78-0x7f*/
-  0xbffe, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0xb8b5, 0x82d3, 0x82d4, /*0x80-0x87*/
-  0xc0fc, 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0xb0f8, 0x82d9, 0x82da, /*0x88-0x8f*/
-  0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, /*0x90-0x97*/
-  0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, /*0x98-0x9f*/
-  0x82eb, 0x82ec, 0x82ed, 0xb4f6, 0x82ee, 0xd9ce, 0x82ef, 0xd9cf, /*0xa0-0xa7*/
-  0xb4a2, 0xd9d0, 0x82f0, 0x82f1, 0xb4df, 0x82f2, 0x82f3, 0x82f4, /*0xa8-0xaf*/
-  0x82f5, 0x82f6, 0xb0c1, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, /*0xb0-0xb7*/
-  0x82fc, 0x82fd, 0xd9d1, 0xc9b5, 0x82fe, 0x8340, 0x8341, 0x8342, /*0xb8-0xbf*/
-  0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, /*0xc0-0xc7*/
-  0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0xcff1, /*0xc8-0xcf*/
-  0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xd9d2, 0x8358, /*0xd0-0xd7*/
-  0x8359, 0x835a, 0xc1c5, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, /*0xd8-0xdf*/
-  0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xd9d6, 0xc9ae, /*0xe0-0xe7*/
-  0x8366, 0x8367, 0x8368, 0x8369, 0xd9d5, 0xd9d4, 0xd9d7, 0x836a, /*0xe8-0xef*/
-  0x836b, 0x836c, 0x836d, 0xcbdb, 0x836e, 0xbda9, 0x836f, 0x8370, /*0xf0-0xf7*/
-  0x8371, 0x8372, 0x8373, 0xc6a7, 0x8374, 0x8375, 0x8376, 0x8377, /*0xf8-0xff*/
-  /* 0x5100 */
-  0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0xd9d3, 0xd9d8, /*0x00-0x07*/
-  0x837e, 0x8380, 0x8381, 0xd9d9, 0x8382, 0x8383, 0x8384, 0x8385, /*0x08-0x0f*/
-  0x8386, 0x8387, 0xc8e5, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, /*0x10-0x17*/
-  0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, /*0x18-0x1f*/
-  0x8395, 0xc0dc, 0x8396, 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, /*0x20-0x27*/
-  0x839c, 0x839d, 0x839e, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, /*0x28-0x2f*/
-  0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, /*0x30-0x37*/
-  0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0xb6f9, /*0x38-0x3f*/
-  0xd8a3, 0xd4ca, 0x83b3, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7, 0x83b4, /*0x40-0x47*/
-  0xcfc8, 0xb9e2, 0x83b5, 0xbfcb, 0x83b6, 0xc3e2, 0x83b7, 0x83b8, /*0x48-0x4f*/
-  0x83b9, 0xb6d2, 0x83ba, 0x83bb, 0xcdc3, 0xd9ee, 0xd9f0, 0x83bc, /*0x50-0x57*/
-  0x83bd, 0x83be, 0xb5b3, 0x83bf, 0xb6b5, 0x83c0, 0x83c1, 0x83c2, /*0x58-0x5f*/
-  0x83c3, 0x83c4, 0xbea4, 0x83c5, 0x83c6, 0xc8eb, 0x83c7, 0x83c8, /*0x60-0x67*/
-  0xc8ab, 0x83c9, 0x83ca, 0xb0cb, 0xb9ab, 0xc1f9, 0xd9e2, 0x83cb, /*0x68-0x6f*/
-  0xc0bc, 0xb9b2, 0x83cc, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf, /*0x70-0x77*/
-  0xb5e4, 0xd7c8, 0x83cd, 0xd1f8, 0xbce6, 0xcade, 0x83ce, 0x83cf, /*0x78-0x7f*/
-  0xbcbd, 0xd9e6, 0xd8e7, 0x83d0, 0x83d1, 0xc4da, 0x83d2, 0x83d3, /*0x80-0x87*/
-  0xb8d4, 0xc8bd, 0x83d4, 0x83d5, 0xb2e1, 0xd4d9, 0x83d6, 0x83d7, /*0x88-0x8f*/
-  0x83d8, 0x83d9, 0xc3b0, 0x83da, 0x83db, 0xc3e1, 0xdaa2, 0xc8df, /*0x90-0x97*/
-  0x83dc, 0xd0b4, 0x83dd, 0xbefc, 0xc5a9, 0x83de, 0x83df, 0x83e0, /*0x98-0x9f*/
-  0xb9da, 0x83e1, 0xdaa3, 0x83e2, 0xd4a9, 0xdaa4, 0x83e3, 0x83e4, /*0xa0-0xa7*/
-  0x83e5, 0x83e6, 0x83e7, 0xd9fb, 0xb6ac, 0x83e8, 0x83e9, 0xb7eb, /*0xa8-0xaf*/
-  0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0x83ea, 0xbff6, 0xd2b1, 0xc0e4, /*0xb0-0xb7*/
-  0x83eb, 0x83ec, 0x83ed, 0xb6b3, 0xd9fe, 0xd9fd, 0x83ee, 0x83ef, /*0xb8-0xbf*/
-  0xbebb, 0x83f0, 0x83f1, 0x83f2, 0xc6e0, 0x83f3, 0xd7bc, 0xdaa1, /*0xc0-0xc7*/
-  0x83f4, 0xc1b9, 0x83f5, 0xb5f2, 0xc1e8, 0x83f6, 0x83f7, 0xbcf5, /*0xc8-0xcf*/
-  0x83f8, 0xb4d5, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, /*0xd0-0xd7*/
-  0x8440, 0x8441, 0x8442, 0xc1dd, 0x8443, 0xc4fd, 0x8444, 0x8445, /*0xd8-0xdf*/
-  0xbcb8, 0xb7b2, 0x8446, 0x8447, 0xb7ef, 0x8448, 0x8449, 0x844a, /*0xe0-0xe7*/
-  0x844b, 0x844c, 0x844d, 0xd9ec, 0x844e, 0xc6be, 0x844f, 0xbfad, /*0xe8-0xef*/
-  0xbbcb, 0x8450, 0x8451, 0xb5ca, 0x8452, 0xdbc9, 0xd0d7, 0x8453, /*0xf0-0xf7*/
-  0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf, 0x8454, 0xd4e4, /*0xf8-0xff*/
-  /* 0x5200 */
-  0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0x8455, 0x8456, 0xb7d6, 0xc7d0, /*0x00-0x07*/
-  0xd8d7, 0x8457, 0xbfaf, 0x8458, 0x8459, 0xdbbb, 0xd8d8, 0x845a, /*0x08-0x0f*/
-  0x845b, 0xd0cc, 0xbbae, 0x845c, 0x845d, 0x845e, 0xebbe, 0xc1d0, /*0x10-0x17*/
-  0xc1f5, 0xd4f2, 0xb8d5, 0xb4b4, 0x845f, 0xb3f5, 0x8460, 0x8461, /*0x18-0x1f*/
-  0xc9be, 0x8462, 0x8463, 0x8464, 0xc5d0, 0x8465, 0x8466, 0x8467, /*0x20-0x27*/
-  0xc5d9, 0xc0fb, 0x8468, 0xb1f0, 0x8469, 0xd8d9, 0xb9ce, 0x846a, /*0x28-0x2f*/
-  0xb5bd, 0x846b, 0x846c, 0xd8da, 0x846d, 0x846e, 0xd6c6, 0xcba2, /*0x30-0x37*/
-  0xc8af, 0xc9b2, 0xb4cc, 0xbfcc, 0x846f, 0xb9f4, 0x8470, 0xd8db, /*0x38-0x3f*/
-  0xd8dc, 0xb6e7, 0xbcc1, 0xccea, 0x8471, 0x8472, 0x8473, 0x8474, /*0x40-0x47*/
-  0x8475, 0x8476, 0xcff7, 0x8477, 0xd8dd, 0xc7b0, 0x8478, 0x8479, /*0x48-0x4f*/
-  0xb9d0, 0xbda3, 0x847a, 0x847b, 0xccde, 0x847c, 0xc6ca, 0x847d, /*0x50-0x57*/
-  0x847e, 0x8480, 0x8481, 0x8482, 0xd8e0, 0x8483, 0xd8de, 0x8484, /*0x58-0x5f*/
-  0x8485, 0xd8df, 0x8486, 0x8487, 0x8488, 0xb0fe, 0x8489, 0xbee7, /*0x60-0x67*/
-  0x848a, 0xcaa3, 0xbcf4, 0x848b, 0x848c, 0x848d, 0x848e, 0xb8b1, /*0x68-0x6f*/
-  0x848f, 0x8490, 0xb8ee, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, /*0x70-0x77*/
-  0x8496, 0x8497, 0x8498, 0x8499, 0x849a, 0xd8e2, 0x849b, 0xbdcb, /*0x78-0x7f*/
-  0x849c, 0xd8e4, 0xd8e3, 0x849d, 0x849e, 0x849f, 0x84a0, 0x84a1, /*0x80-0x87*/
-  0xc5fc, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, /*0x88-0x8f*/
-  0xd8e5, 0x84a9, 0x84aa, 0xd8e6, 0x84ab, 0x84ac, 0x84ad, 0x84ae, /*0x90-0x97*/
-  0x84af, 0x84b0, 0x84b1, 0xc1a6, 0x84b2, 0xc8b0, 0xb0ec, 0xb9a6, /*0x98-0x9f*/
-  0xbcd3, 0xcef1, 0xdbbd, 0xc1d3, 0x84b3, 0x84b4, 0x84b5, 0x84b6, /*0xa0-0xa7*/
-  0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0x84b7, 0x84b8, /*0xa8-0xaf*/
-  0x84b9, 0xc0f8, 0xbea2, 0xc0cd, 0x84ba, 0x84bb, 0x84bc, 0x84bd, /*0xb0-0xb7*/
-  0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0xdbc0, 0xcac6, /*0xb8-0xbf*/
-  0x84c4, 0x84c5, 0x84c6, 0xb2aa, 0x84c7, 0x84c8, 0x84c9, 0xd3c2, /*0xc0-0xc7*/
-  0x84ca, 0xc3e3, 0x84cb, 0xd1ab, 0x84cc, 0x84cd, 0x84ce, 0x84cf, /*0xc8-0xcf*/
-  0xdbc2, 0x84d0, 0xc0d5, 0x84d1, 0x84d2, 0x84d3, 0xdbc3, 0x84d4, /*0xd0-0xd7*/
-  0xbfb1, 0x84d5, 0x84d6, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0xc4bc, /*0xd8-0xdf*/
-  0x84db, 0x84dc, 0x84dd, 0x84de, 0xc7da, 0x84df, 0x84e0, 0x84e1, /*0xe0-0xe7*/
-  0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, /*0xe8-0xef*/
-  0xdbc4, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, /*0xf0-0xf7*/
-  0x84f1, 0xd9e8, 0xc9d7, 0x84f2, 0x84f3, 0x84f4, 0xb9b4, 0xcef0, /*0xf8-0xff*/
-  /* 0x5300 */
-  0xd4c8, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0xb0fc, 0xb4d2, 0x84f9, /*0x00-0x07*/
-  0xd0d9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0xd9e9, 0x84fe, 0xdecb, /*0x08-0x0f*/
-  0xd9eb, 0x8540, 0x8541, 0x8542, 0x8543, 0xd8b0, 0xbbaf, 0xb1b1, /*0x10-0x17*/
-  0x8544, 0xb3d7, 0xd8ce, 0x8545, 0x8546, 0xd4d1, 0x8547, 0x8548, /*0x18-0x1f*/
-  0xbdb3, 0xbfef, 0x8549, 0xcfbb, 0x854a, 0x854b, 0xd8d0, 0x854c, /*0x20-0x27*/
-  0x854d, 0x854e, 0xb7cb, 0x854f, 0x8550, 0x8551, 0xd8d1, 0x8552, /*0x28-0x2f*/
-  0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855a, /*0x30-0x37*/
-  0x855b, 0xc6a5, 0xc7f8, 0xd2bd, 0x855c, 0x855d, 0xd8d2, 0xc4e4, /*0x38-0x3f*/
-  0x855e, 0xcaae, 0x855f, 0xc7a7, 0x8560, 0xd8a6, 0x8561, 0xc9fd, /*0x40-0x47*/
-  0xcee7, 0xbbdc, 0xb0eb, 0x8562, 0x8563, 0x8564, 0xbbaa, 0xd0ad, /*0x48-0x4f*/
-  0x8565, 0xb1b0, 0xd7e4, 0xd7bf, 0x8566, 0xb5a5, 0xc2f4, 0xc4cf, /*0x50-0x57*/
-  0x8567, 0x8568, 0xb2a9, 0x8569, 0xb2b7, 0x856a, 0xb1e5, 0xdfb2, /*0x58-0x5f*/
-  0xd5bc, 0xbfa8, 0xc2ac, 0xd8d5, 0xc2b1, 0x856b, 0xd8d4, 0xced4, /*0x60-0x67*/
-  0x856c, 0xdae0, 0x856d, 0xcec0, 0x856e, 0x856f, 0xd8b4, 0xc3ae, /*0x68-0x6f*/
-  0xd3a1, 0xcea3, 0x8570, 0xbcb4, 0xc8b4, 0xc2d1, 0x8571, 0xbeed, /*0x70-0x77*/
-  0xd0b6, 0x8572, 0xdae1, 0x8573, 0x8574, 0x8575, 0x8576, 0xc7e4, /*0x78-0x7f*/
-  0x8577, 0x8578, 0xb3a7, 0x8579, 0xb6f2, 0xccfc, 0xc0fa, 0x857a, /*0x80-0x87*/
-  0x857b, 0xc0f7, 0x857c, 0xd1b9, 0xd1e1, 0xd8c7, 0x857d, 0x857e, /*0x88-0x8f*/
-  0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xb2de, 0x8585, 0x8586, /*0x90-0x97*/
-  0xc0e5, 0x8587, 0xbaf1, 0x8588, 0x8589, 0xd8c8, 0x858a, 0xd4ad, /*0x98-0x9f*/
-  0x858b, 0x858c, 0xcfe1, 0xd8c9, 0x858d, 0xd8ca, 0xcfc3, 0x858e, /*0xa0-0xa7*/
-  0xb3f8, 0xbec7, 0x858f, 0x8590, 0x8591, 0x8592, 0xd8cb, 0x8593, /*0xa8-0xaf*/
-  0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xdbcc, 0x859a, /*0xb0-0xb7*/
-  0x859b, 0x859c, 0x859d, 0xc8a5, 0x859e, 0x859f, 0x85a0, 0xcfd8, /*0xb8-0xbf*/
-  0x85a1, 0xc8fe, 0xb2ce, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, /*0xc0-0xc7*/
-  0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4, 0x85a7, 0x85a8, /*0xc8-0xcf*/
-  0x85a9, 0xb7a2, 0x85aa, 0x85ab, 0xcae5, 0x85ac, 0xc8a1, 0xcadc, /*0xd0-0xd7*/
-  0xb1e4, 0xd0f0, 0x85ad, 0xc5d1, 0x85ae, 0x85af, 0x85b0, 0xdbc5, /*0xd8-0xdf*/
-  0xb5fe, 0x85b1, 0x85b2, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0x85b3, /*0xe0-0xe7*/
-  0xdfb6, 0xdfb5, 0xd6bb, 0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, /*0xe8-0xef*/
-  0xcca8, 0xdfb3, 0xcab7, 0xd3d2, 0x85b4, 0xd8cf, 0xd2b6, 0xbac5, /*0xf0-0xf7*/
-  0xcbbe, 0xccbe, 0x85b5, 0xdfb7, 0xb5f0, 0xdfb4, 0x85b6, 0x85b7, /*0xf8-0xff*/
-  /* 0x5400 */
-  0x85b8, 0xd3f5, 0x85b9, 0xb3d4, 0xb8f7, 0x85ba, 0xdfba, 0x85bb, /*0x00-0x07*/
-  0xbacf, 0xbcaa, 0xb5f5, 0x85bc, 0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, /*0x08-0x0f*/
-  0xcdc2, 0xcff2, 0xdfb8, 0xcfc5, 0x85bd, 0xc2c0, 0xdfb9, 0xc2f0, /*0x10-0x17*/
-  0x85be, 0x85bf, 0x85c0, 0xbefd, 0x85c1, 0xc1df, 0xcdcc, 0xd2f7, /*0x18-0x1f*/
-  0xb7cd, 0xdfc1, 0x85c2, 0xdfc4, 0x85c3, 0x85c4, 0xb7f1, 0xb0c9, /*0x20-0x27*/
-  0xb6d6, 0xb7d4, 0x85c5, 0xbaac, 0xccfd, 0xbfd4, 0xcbb1, 0xc6f4, /*0x28-0x2f*/
-  0x85c6, 0xd6a8, 0xdfc5, 0x85c7, 0xcee2, 0xb3b3, 0x85c8, 0x85c9, /*0x30-0x37*/
-  0xcefc, 0xb4b5, 0x85ca, 0xcec7, 0xbaf0, 0x85cb, 0xcee1, 0x85cc, /*0x38-0x3f*/
-  0xd1bd, 0x85cd, 0x85ce, 0xdfc0, 0x85cf, 0x85d0, 0xb4f4, 0x85d1, /*0x40-0x47*/
-  0xb3ca, 0x85d2, 0xb8e6, 0xdfbb, 0x85d3, 0x85d4, 0x85d5, 0x85d6, /*0x48-0x4f*/
-  0xc4c5, 0x85d7, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf, 0xdfc2, /*0x50-0x57*/
-  0xd4b1, 0xdfc3, 0x85d8, 0xc7ba, 0xced8, 0x85d9, 0x85da, 0x85db, /*0x58-0x5f*/
-  0x85dc, 0x85dd, 0xc4d8, 0x85de, 0xdfca, 0x85df, 0xdfcf, 0x85e0, /*0x60-0x67*/
-  0xd6dc, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, /*0x68-0x6f*/
-  0x85e8, 0xdfc9, 0xdfda, 0xceb6, 0x85e9, 0xbac7, 0xdfce, 0xdfc8, /*0x70-0x77*/
-  0xc5de, 0x85ea, 0x85eb, 0xc9eb, 0xbaf4, 0xc3fc, 0x85ec, 0x85ed, /*0x78-0x7f*/
-  0xbed7, 0x85ee, 0xdfc6, 0x85ef, 0xdfcd, 0x85f0, 0xc5d8, 0x85f1, /*0x80-0x87*/
-  0x85f2, 0x85f3, 0x85f4, 0xd5a6, 0xbacd, 0x85f5, 0xbecc, 0xd3bd, /*0x88-0x8f*/
-  0xb8c0, 0x85f6, 0xd6e4, 0x85f7, 0xdfc7, 0xb9be, 0xbfa7, 0x85f8, /*0x90-0x97*/
-  0x85f9, 0xc1fc, 0xdfcb, 0xdfcc, 0x85fa, 0xdfd0, 0x85fb, 0x85fc, /*0x98-0x9f*/
-  0x85fd, 0x85fe, 0x8640, 0xdfdb, 0xdfe5, 0x8641, 0xdfd7, 0xdfd6, /*0xa0-0xa7*/
-  0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0x8642, 0xbfa9, /*0xa8-0xaf*/
-  0x8643, 0xd4db, 0x8644, 0xbfc8, 0xdfd4, 0x8645, 0x8646, 0x8647, /*0xb0-0xb7*/
-  0xcfcc, 0x8648, 0x8649, 0xdfdd, 0x864a, 0xd1ca, 0x864b, 0xdfde, /*0xb8-0xbf*/
-  0xb0a7, 0xc6b7, 0xdfd3, 0x864c, 0xbae5, 0x864d, 0xb6df, 0xcddb, /*0xc0-0xc7*/
-  0xb9fe, 0xd4d5, 0x864e, 0x864f, 0xdfdf, 0xcfec, 0xb0a5, 0xdfe7, /*0xc8-0xcf*/
-  0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc, 0x8650, 0xbba9, /*0xd0-0xd7*/
-  0x8651, 0xdfe0, 0xdfe1, 0x8652, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, /*0xd8-0xdf*/
-  0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xb8e7, 0xc5b6, 0xdfea, /*0xe0-0xe7*/
-  0xc9da, 0xc1a8, 0xc4c4, 0x8658, 0x8659, 0xbfde, 0xcff8, 0x865a, /*0xe8-0xef*/
-  0x865b, 0x865c, 0xd5dc, 0xdfee, 0x865d, 0x865e, 0x865f, 0x8660, /*0xf0-0xf7*/
-  0x8661, 0x8662, 0xb2b8, 0x8663, 0xbadf, 0xdfec, 0x8664, 0xdbc1, /*0xf8-0xff*/
-  /* 0x5500 */
-  0x8665, 0xd1e4, 0x8666, 0x8667, 0x8668, 0x8669, 0xcbf4, 0xb4bd, /*0x00-0x07*/
-  0x866a, 0xb0a6, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f, 0xdff1, /*0x08-0x0f*/
-  0xccc6, 0xdff2, 0x8670, 0x8671, 0xdfed, 0x8672, 0x8673, 0x8674, /*0x10-0x17*/
-  0x8675, 0x8676, 0x8677, 0xdfe9, 0x8678, 0x8679, 0x867a, 0x867b, /*0x18-0x1f*/
-  0xdfeb, 0x867c, 0xdfef, 0xdff0, 0xbbbd, 0x867d, 0x867e, 0xdff3, /*0x20-0x27*/
-  0x8680, 0x8681, 0xdff4, 0x8682, 0xbba3, 0x8683, 0xcadb, 0xcea8, /*0x28-0x2f*/
-  0xe0a7, 0xb3aa, 0x8684, 0xe0a6, 0x8685, 0x8686, 0x8687, 0xe0a1, /*0x30-0x37*/
-  0x8688, 0x8689, 0x868a, 0x868b, 0xdffe, 0x868c, 0xcdd9, 0xdffc, /*0x38-0x3f*/
-  0x868d, 0xdffa, 0x868e, 0xbfd0, 0xd7c4, 0x868f, 0xc9cc, 0x8690, /*0x40-0x47*/
-  0x8691, 0xdff8, 0xb0a1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, /*0x48-0x4f*/
-  0xdffd, 0x8697, 0x8698, 0x8699, 0x869a, 0xdffb, 0xe0a2, 0x869b, /*0x50-0x57*/
-  0x869c, 0x869d, 0x869e, 0x869f, 0xe0a8, 0x86a0, 0x86a1, 0x86a2, /*0x58-0x5f*/
-  0x86a3, 0xb7c8, 0x86a4, 0x86a5, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, /*0x60-0x67*/
-  0x86a6, 0x86a7, 0xc5be, 0x86a8, 0xd8c4, 0xdff9, 0xc4f6, 0x86a9, /*0x68-0x6f*/
-  0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0xe0a3, 0xe0a4, 0xe0a5, /*0x70-0x77*/
-  0xd0a5, 0x86af, 0x86b0, 0xe0b4, 0xcce4, 0x86b1, 0xe0b1, 0x86b2, /*0x78-0x7f*/
-  0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0x86b3, 0x86b4, 0xc0ae, /*0x80-0x87*/
-  0xe0ae, 0xbaed, 0xbab0, 0xe0a9, 0x86b5, 0x86b6, 0x86b7, 0xdff6, /*0x88-0x8f*/
-  0x86b8, 0xe0b3, 0x86b9, 0x86ba, 0xe0b8, 0x86bb, 0x86bc, 0x86bd, /*0x90-0x97*/
-  0xb4ad, 0xe0b9, 0x86be, 0x86bf, 0xcfb2, 0xbac8, 0x86c0, 0xe0b0, /*0x98-0x9f*/
-  0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, 0xd0fa, /*0xa0-0xa7*/
-  0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf, /*0xa8-0xaf*/
-  0x86d0, 0xe0ac, 0x86d1, 0xd4fb, 0x86d2, 0xdff7, 0x86d3, 0xc5e7, /*0xb0-0xb7*/
-  0x86d4, 0xe0ad, 0x86d5, 0xd3f7, 0x86d6, 0xe0b6, 0xe0b7, 0x86d7, /*0xb8-0xbf*/
-  0x86d8, 0x86d9, 0x86da, 0x86db, 0xe0c4, 0xd0e1, 0x86dc, 0x86dd, /*0xc0-0xc7*/
-  0x86de, 0xe0bc, 0x86df, 0x86e0, 0xe0c9, 0xe0ca, 0x86e1, 0x86e2, /*0xc8-0xcf*/
-  0x86e3, 0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0x86e4, 0xe0b2, 0x86e5, /*0xd0-0xd7*/
-  0x86e6, 0x86e7, 0x86e8, 0x86e9, 0xcac8, 0xe0c3, 0x86ea, 0xe0b5, /*0xd8-0xdf*/
-  0x86eb, 0xcecb, 0x86ec, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0x86ed, /*0xe0-0xe7*/
-  0xe0cb, 0x86ee, 0xe0ba, 0xe0bf, 0xe0c0, 0x86ef, 0x86f0, 0xe0c5, /*0xe8-0xef*/
-  0x86f1, 0x86f2, 0xe0c7, 0xe0c8, 0x86f3, 0xe0cc, 0x86f4, 0xe0bb, /*0xf0-0xf7*/
-  0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0xcbd4, 0xe0d5, 0x86fa, /*0xf8-0xff*/
-  /* 0x5600 */
-  0xe0d6, 0xe0d2, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x8740, 0x8741, /*0x00-0x07*/
-  0xe0d0, 0xbcce, 0x8742, 0x8743, 0xe0d1, 0x8744, 0xb8c2, 0xd8c5, /*0x08-0x0f*/
-  0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, /*0x10-0x17*/
-  0xd0ea, 0x874d, 0x874e, 0xc2ef, 0x874f, 0x8750, 0xe0cf, 0xe0bd, /*0x18-0x1f*/
-  0x8751, 0x8752, 0x8753, 0xe0d4, 0xe0d3, 0x8754, 0x8755, 0xe0d7, /*0x20-0x27*/
-  0x8756, 0x8757, 0x8758, 0x8759, 0xe0dc, 0xe0d8, 0x875a, 0x875b, /*0x28-0x2f*/
-  0x875c, 0xd6f6, 0xb3b0, 0x875d, 0xd7ec, 0x875e, 0xcbbb, 0x875f, /*0x30-0x37*/
-  0x8760, 0xe0da, 0x8761, 0xcefb, 0x8762, 0x8763, 0x8764, 0xbad9, /*0x38-0x3f*/
-  0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, /*0x40-0x47*/
-  0x876d, 0x876e, 0x876f, 0x8770, 0xe0e1, 0xe0dd, 0xd2ad, 0x8771, /*0x48-0x4f*/
-  0x8772, 0x8773, 0x8774, 0x8775, 0xe0e2, 0x8776, 0x8777, 0xe0db, /*0x50-0x57*/
-  0xe0d9, 0xe0df, 0x8778, 0x8779, 0xe0e0, 0x877a, 0x877b, 0x877c, /*0x58-0x5f*/
-  0x877d, 0x877e, 0xe0de, 0x8780, 0xe0e4, 0x8781, 0x8782, 0x8783, /*0x60-0x67*/
-  0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0x8784, 0x8785, 0x8786, /*0x68-0x6f*/
-  0x8787, 0xe0e5, 0x8788, 0x8789, 0x878a, 0x878b, 0xb8c1, 0x878c, /*0x70-0x77*/
-  0x878d, 0x878e, 0x878f, 0xe0e7, 0xe0e8, 0x8790, 0x8791, 0x8792, /*0x78-0x7f*/
-  0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xe0e9, 0xe0e3, 0x8798, /*0x80-0x87*/
-  0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0xbabf, 0xcce7, /*0x88-0x8f*/
-  0x879f, 0x87a0, 0x87a1, 0xe0ea, 0x87a2, 0x87a3, 0x87a4, 0x87a5, /*0x90-0x97*/
-  0x87a6, 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, /*0x98-0x9f*/
-  0x87ae, 0x87af, 0x87b0, 0xcff9, 0x87b1, 0x87b2, 0x87b3, 0x87b4, /*0xa0-0xa7*/
-  0x87b5, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0xe0eb, /*0xa8-0xaf*/
-  0x87bc, 0x87bd, 0x87be, 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0xc8c2, /*0xb0-0xb7*/
-  0x87c3, 0x87c4, 0x87c5, 0x87c6, 0xbdc0, 0x87c7, 0x87c8, 0x87c9, /*0xb8-0xbf*/
-  0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d1, /*0xc0-0xc7*/
-  0x87d2, 0x87d3, 0xc4d2, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, /*0xc8-0xcf*/
-  0x87d9, 0x87da, 0x87db, 0x87dc, 0xe0ec, 0x87dd, 0x87de, 0xe0ed, /*0xd0-0xd7*/
-  0x87df, 0x87e0, 0xc7f4, 0xcbc4, 0x87e1, 0xe0ee, 0xbbd8, 0xd8b6, /*0xd8-0xdf*/
-  0xd2f2, 0xe0ef, 0xcdc5, 0x87e2, 0xb6da, 0x87e3, 0x87e4, 0x87e5, /*0xe0-0xe7*/
-  0x87e6, 0x87e7, 0x87e8, 0xe0f1, 0x87e9, 0xd4b0, 0x87ea, 0x87eb, /*0xe8-0xef*/
-  0xc0a7, 0xb4d1, 0x87ec, 0x87ed, 0xcea7, 0xe0f0, 0x87ee, 0x87ef, /*0xf0-0xf7*/
-  0x87f0, 0xe0f2, 0xb9cc, 0x87f1, 0x87f2, 0xb9fa, 0xcdbc, 0xe0f3, /*0xf8-0xff*/
-  /* 0x5700 */
-  0x87f3, 0x87f4, 0x87f5, 0xc6d4, 0xe0f4, 0x87f6, 0xd4b2, 0x87f7, /*0x00-0x07*/
-  0xc8a6, 0xe0f6, 0xe0f5, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, /*0x08-0x0f*/
-  0x87fd, 0x87fe, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, /*0x10-0x17*/
-  0x8846, 0x8847, 0x8848, 0x8849, 0xe0f7, 0x884a, 0x884b, 0xcdc1, /*0x18-0x1f*/
-  0x884c, 0x884d, 0x884e, 0xcaa5, 0x884f, 0x8850, 0x8851, 0x8852, /*0x20-0x27*/
-  0xd4da, 0xdbd7, 0xdbd9, 0x8853, 0xdbd8, 0xb9e7, 0xdbdc, 0xdbdd, /*0x28-0x2f*/
-  0xb5d8, 0x8854, 0x8855, 0xdbda, 0x8856, 0x8857, 0x8858, 0x8859, /*0x30-0x37*/
-  0x885a, 0xdbdb, 0xb3a1, 0xdbdf, 0x885b, 0x885c, 0xbbf8, 0x885d, /*0x38-0x3f*/
-  0xd6b7, 0x885e, 0xdbe0, 0x885f, 0x8860, 0x8861, 0x8862, 0xbef9, /*0x40-0x47*/
-  0x8863, 0x8864, 0xb7bb, 0x8865, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5, /*0x48-0x4f*/
-  0xd7f8, 0xbfd3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0xbfe9, /*0x50-0x57*/
-  0x886b, 0x886c, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb, 0xb7d8, /*0x58-0x5f*/
-  0xd7b9, 0xc6c2, 0x886d, 0x886e, 0xc0a4, 0x886f, 0xccb9, 0x8870, /*0x60-0x67*/
-  0xdbe7, 0xdbe1, 0xc6ba, 0xdbe3, 0x8871, 0xdbe8, 0x8872, 0xc5f7, /*0x68-0x6f*/
-  0x8873, 0x8874, 0x8875, 0xdbea, 0x8876, 0x8877, 0xdbe9, 0xbfc0, /*0x70-0x77*/
-  0x8878, 0x8879, 0x887a, 0xdbe6, 0xdbe5, 0x887b, 0x887c, 0x887d, /*0x78-0x7f*/
-  0x887e, 0x8880, 0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0x8881, /*0x80-0x87*/
-  0x8882, 0x8883, 0x8884, 0xd0cd, 0xdbed, 0x8885, 0x8886, 0x8887, /*0x88-0x8f*/
-  0x8888, 0x8889, 0xc0dd, 0xdbf2, 0x888a, 0x888b, 0x888c, 0x888d, /*0x90-0x97*/
-  0x888e, 0x888f, 0x8890, 0xb6e2, 0x8891, 0x8892, 0x8893, 0x8894, /*0x98-0x9f*/
-  0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0x8895, 0xbfd1, 0xdbf0, /*0xa0-0xa7*/
-  0x8896, 0xdbd1, 0x8897, 0xb5e6, 0x8898, 0xdbeb, 0xbfe5, 0x8899, /*0xa8-0xaf*/
-  0x889a, 0x889b, 0xdbee, 0x889c, 0xdbf1, 0x889d, 0x889e, 0x889f, /*0xb0-0xb7*/
-  0xdbf9, 0x88a0, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, /*0xb8-0xbf*/
-  0x88a7, 0x88a8, 0xb9a1, 0xb0a3, 0x88a9, 0x88aa, 0x88ab, 0x88ac, /*0xc0-0xc7*/
-  0x88ad, 0x88ae, 0x88af, 0xc2f1, 0x88b0, 0x88b1, 0xb3c7, 0xdbef, /*0xc8-0xcf*/
-  0x88b2, 0x88b3, 0xdbf8, 0x88b4, 0xc6d2, 0xdbf4, 0x88b5, 0x88b6, /*0xd0-0xd7*/
-  0xdbf5, 0xdbf7, 0xdbf6, 0x88b7, 0x88b8, 0xdbfe, 0x88b9, 0xd3f2, /*0xd8-0xdf*/
-  0xb2ba, 0x88ba, 0x88bb, 0x88bc, 0xdbfd, 0x88bd, 0x88be, 0x88bf, /*0xe0-0xe7*/
-  0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0xdca4, 0x88c5, 0xdbfb, /*0xe8-0xef*/
-  0x88c6, 0x88c7, 0x88c8, 0x88c9, 0xdbfa, 0x88ca, 0x88cb, 0x88cc, /*0xf0-0xf7*/
-  0xdbfc, 0xc5e0, 0xbbf9, 0x88cd, 0x88ce, 0xdca3, 0x88cf, 0x88d0, /*0xf8-0xff*/
-  /* 0x5800 */
-  0xdca5, 0x88d1, 0xccc3, 0x88d2, 0x88d3, 0x88d4, 0xb6d1, 0xddc0, /*0x00-0x07*/
-  0x88d5, 0x88d6, 0x88d7, 0xdca1, 0x88d8, 0xdca2, 0x88d9, 0x88da, /*0x08-0x0f*/
-  0x88db, 0xc7b5, 0x88dc, 0x88dd, 0x88de, 0xb6e9, 0x88df, 0x88e0, /*0x10-0x17*/
-  0x88e1, 0xdca7, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0xdca6, 0x88e6, /*0x18-0x1f*/
-  0xdca9, 0xb1a4, 0x88e7, 0x88e8, 0xb5cc, 0x88e9, 0x88ea, 0x88eb, /*0x20-0x27*/
-  0x88ec, 0x88ed, 0xbfb0, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, /*0x28-0x2f*/
-  0xd1df, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0xb6c2, 0x88f7, 0x88f8, /*0x30-0x37*/
-  0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, /*0x38-0x3f*/
-  0x8942, 0x8943, 0x8944, 0x8945, 0xdca8, 0x8946, 0x8947, 0x8948, /*0x40-0x47*/
-  0x8949, 0x894a, 0x894b, 0x894c, 0xcbfa, 0xebf3, 0x894d, 0x894e, /*0x48-0x4f*/
-  0x894f, 0xcbdc, 0x8950, 0x8951, 0xcbfe, 0x8952, 0x8953, 0x8954, /*0x50-0x57*/
-  0xccc1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xc8fb, 0x895a, /*0x58-0x5f*/
-  0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0xdcaa, 0x8960, 0x8961, /*0x60-0x67*/
-  0x8962, 0x8963, 0x8964, 0xccee, 0xdcab, 0x8965, 0x8966, 0x8967, /*0x68-0x6f*/
-  0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, /*0x70-0x77*/
-  0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xdbd3, 0x8976, /*0x78-0x7f*/
-  0xdcaf, 0xdcac, 0x8977, 0xbeb3, 0x8978, 0xcafb, 0x8979, 0x897a, /*0x80-0x87*/
-  0x897b, 0xdcad, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, /*0x88-0x8f*/
-  0x8983, 0x8984, 0xc9ca, 0xc4b9, 0x8985, 0x8986, 0x8987, 0x8988, /*0x90-0x97*/
-  0x8989, 0xc7bd, 0xdcae, 0x898a, 0x898b, 0x898c, 0xd4f6, 0xd0e6, /*0x98-0x9f*/
-  0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, /*0xa0-0xa7*/
-  0xc4ab, 0xb6d5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, /*0xa8-0xaf*/
-  0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, /*0xb0-0xb7*/
-  0x89a3, 0x89a4, 0x89a5, 0x89a6, 0xdbd4, 0x89a7, 0x89a8, 0x89a9, /*0xb8-0xbf*/
-  0x89aa, 0xb1da, 0x89ab, 0x89ac, 0x89ad, 0xdbd5, 0x89ae, 0x89af, /*0xc0-0xc7*/
-  0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, /*0xc8-0xcf*/
-  0x89b8, 0xdbd6, 0x89b9, 0x89ba, 0x89bb, 0xbabe, 0x89bc, 0x89bd, /*0xd0-0xd7*/
-  0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, /*0xd8-0xdf*/
-  0x89c6, 0x89c7, 0x89c8, 0x89c9, 0xc8c0, 0x89ca, 0x89cb, 0x89cc, /*0xe0-0xe7*/
-  0x89cd, 0x89ce, 0x89cf, 0xcabf, 0xc8c9, 0x89d0, 0xd7b3, 0x89d1, /*0xe8-0xef*/
-  0xc9f9, 0x89d2, 0x89d3, 0xbfc7, 0x89d4, 0x89d5, 0xbaf8, 0x89d6, /*0xf0-0xf7*/
-  0x89d7, 0xd2bc, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, /*0xf8-0xff*/
-  /* 0x5900 */
-  0x89de, 0x89df, 0xe2ba, 0x89e0, 0xb4a6, 0x89e1, 0x89e2, 0xb1b8, /*0x00-0x07*/
-  0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0xb8b4, 0x89e8, 0xcfc4, /*0x08-0x0f*/
-  0x89e9, 0x89ea, 0x89eb, 0x89ec, 0xd9e7, 0xcfa6, 0xcde2, 0x89ed, /*0x10-0x17*/
-  0x89ee, 0xd9ed, 0xb6e0, 0x89ef, 0xd2b9, 0x89f0, 0x89f1, 0xb9bb, /*0x18-0x1f*/
-  0x89f2, 0x89f3, 0x89f4, 0x89f5, 0xe2b9, 0xe2b7, 0x89f6, 0xb4f3, /*0x20-0x27*/
-  0x89f7, 0xccec, 0xccab, 0xb7f2, 0x89f8, 0xd8b2, 0xd1eb, 0xbabb, /*0x28-0x2f*/
-  0x89f9, 0xcaa7, 0x89fa, 0x89fb, 0xcdb7, 0x89fc, 0x89fd, 0xd2c4, /*0x30-0x37*/
-  0xbfe4, 0xbcd0, 0xb6e1, 0x89fe, 0xdec5, 0x8a40, 0x8a41, 0x8a42, /*0x38-0x3f*/
-  0x8a43, 0xdec6, 0xdbbc, 0x8a44, 0xd1d9, 0x8a45, 0x8a46, 0xc6e6, /*0x40-0x47*/
-  0xc4ce, 0xb7ee, 0x8a47, 0xb7dc, 0x8a48, 0x8a49, 0xbffc, 0xd7e0, /*0x48-0x4f*/
-  0x8a4a, 0xc6f5, 0x8a4b, 0x8a4c, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, /*0x50-0x57*/
-  0xdeca, 0x8a4d, 0xdec9, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, /*0x58-0x5f*/
-  0xb5ec, 0x8a53, 0xc9dd, 0x8a54, 0x8a55, 0xb0c2, 0x8a56, 0x8a57, /*0x60-0x67*/
-  0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, /*0x68-0x6f*/
-  0x8a60, 0x8a61, 0x8a62, 0xc5ae, 0xc5ab, 0x8a63, 0xc4cc, 0x8a64, /*0x70-0x77*/
-  0xbce9, 0xcbfd, 0x8a65, 0x8a66, 0x8a67, 0xbac3, 0x8a68, 0x8a69, /*0x78-0x7f*/
-  0x8a6a, 0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0x8a6b, 0xd7b1, 0xb8be, /*0x80-0x87*/
-  0xc2e8, 0x8a6c, 0xc8d1, 0x8a6d, 0x8a6e, 0xe5fb, 0x8a6f, 0x8a70, /*0x88-0x8f*/
-  0x8a71, 0x8a72, 0xb6ca, 0xbccb, 0x8a73, 0x8a74, 0xd1fd, 0xe6a1, /*0x90-0x97*/
-  0x8a75, 0xc3ee, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0xe6a4, 0x8a7a, /*0x98-0x9f*/
-  0x8a7b, 0x8a7c, 0x8a7d, 0xe5fe, 0xe6a5, 0xcdd7, 0x8a7e, 0x8a80, /*0xa0-0xa7*/
-  0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0x8a81, 0x8a82, 0xc4dd, 0xe6a8, /*0xa8-0xaf*/
-  0x8a83, 0x8a84, 0xe6a7, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, /*0xb0-0xb7*/
-  0x8a8a, 0xc3c3, 0x8a8b, 0xc6de, 0x8a8c, 0x8a8d, 0xe6aa, 0x8a8e, /*0xb8-0xbf*/
-  0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, 0xc4b7, 0x8a95, /*0xc0-0xc7*/
-  0x8a96, 0x8a97, 0xe6a2, 0xcabc, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, /*0xc8-0xcf*/
-  0xbde3, 0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0x8a9c, 0x8a9d, 0xe6a9, /*0xd0-0xd7*/
-  0xe6b0, 0x8a9e, 0xd2a6, 0x8a9f, 0xbdaa, 0xe6ad, 0x8aa0, 0x8aa1, /*0xd8-0xdf*/
-  0x8aa2, 0x8aa3, 0x8aa4, 0xe6af, 0x8aa5, 0xc0d1, 0x8aa6, 0x8aa7, /*0xe0-0xe7*/
-  0xd2cc, 0x8aa8, 0x8aa9, 0x8aaa, 0xbca7, 0x8aab, 0x8aac, 0x8aad, /*0xe8-0xef*/
-  0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, /*0xf0-0xf7*/
-  0x8ab6, 0xe6b1, 0x8ab7, 0xd2f6, 0x8ab8, 0x8ab9, 0x8aba, 0xd7cb, /*0xf8-0xff*/
-  /* 0x5a00 */
-  0x8abb, 0xcdfe, 0x8abc, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, /*0x00-0x07*/
-  0xe6ae, 0xe6b3, 0x8abd, 0x8abe, 0xe6b2, 0x8abf, 0x8ac0, 0x8ac1, /*0x08-0x0f*/
-  0x8ac2, 0xe6b6, 0x8ac3, 0xe6b8, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, /*0x10-0x17*/
-  0xc4ef, 0x8ac8, 0x8ac9, 0x8aca, 0xc4c8, 0x8acb, 0x8acc, 0xbeea, /*0x18-0x1f*/
-  0xc9ef, 0x8acd, 0x8ace, 0xe6b7, 0x8acf, 0xb6f0, 0x8ad0, 0x8ad1, /*0x20-0x27*/
-  0x8ad2, 0xc3e4, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, /*0x28-0x2f*/
-  0x8ad9, 0xd3e9, 0xe6b4, 0x8ada, 0xe6b5, 0x8adb, 0xc8a2, 0x8adc, /*0x30-0x37*/
-  0x8add, 0x8ade, 0x8adf, 0x8ae0, 0xe6bd, 0x8ae1, 0x8ae2, 0x8ae3, /*0x38-0x3f*/
-  0xe6b9, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0xc6c5, 0x8ae9, /*0x40-0x47*/
-  0x8aea, 0xcdf1, 0xe6bb, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, /*0x48-0x4f*/
-  0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0xe6bc, 0x8af5, 0x8af6, /*0x50-0x57*/
-  0x8af7, 0x8af8, 0xbbe9, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, /*0x58-0x5f*/
-  0x8afe, 0x8b40, 0xe6be, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0xe6ba, /*0x60-0x67*/
-  0x8b45, 0x8b46, 0xc0b7, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, /*0x68-0x6f*/
-  0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, /*0x70-0x77*/
-  0x8b50, 0x8b51, 0xe6c4, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0xd0f6, /*0x78-0x7f*/
-  0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, /*0x80-0x87*/
-  0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, /*0x88-0x8f*/
-  0x8b66, 0x8b67, 0xc3bd, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, /*0x90-0x97*/
-  0x8b6d, 0x8b6e, 0xc3c4, 0xe6c2, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, /*0x98-0x9f*/
-  0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, /*0xa0-0xa7*/
-  0x8b7b, 0x8b7c, 0xe6c1, 0x8b7d, 0x8b7e, 0x8b80, 0x8b81, 0x8b82, /*0xa8-0xaf*/
-  0x8b83, 0x8b84, 0xe6c7, 0xcfb1, 0x8b85, 0xebf4, 0x8b86, 0x8b87, /*0xb0-0xb7*/
-  0xe6ca, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0xe6c5, 0x8b8d, /*0xb8-0xbf*/
-  0x8b8e, 0xbcde, 0xc9a9, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, /*0xc0-0xc7*/
-  0x8b94, 0xbcb5, 0x8b95, 0x8b96, 0xcfd3, 0x8b97, 0x8b98, 0x8b99, /*0xc8-0xcf*/
-  0x8b9a, 0x8b9b, 0xe6c8, 0x8b9c, 0xe6c9, 0x8b9d, 0xe6ce, 0x8b9e, /*0xd0-0xd7*/
-  0xe6d0, 0x8b9f, 0x8ba0, 0x8ba1, 0xe6d1, 0x8ba2, 0x8ba3, 0x8ba4, /*0xd8-0xdf*/
-  0xe6cb, 0xb5d5, 0x8ba5, 0xe6cc, 0x8ba6, 0x8ba7, 0xe6cf, 0x8ba8, /*0xe0-0xe7*/
-  0x8ba9, 0xc4db, 0x8baa, 0xe6c6, 0x8bab, 0x8bac, 0x8bad, 0x8bae, /*0xe8-0xef*/
-  0x8baf, 0xe6cd, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, /*0xf0-0xf7*/
-  0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, /*0xf8-0xff*/
-  /* 0x5b00 */
-  0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, /*0x00-0x07*/
-  0x8bc6, 0xe6d2, 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, /*0x08-0x0f*/
-  0x8bcd, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0xe6d4, 0xe6d3, /*0x10-0x17*/
-  0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, /*0x18-0x1f*/
-  0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, /*0x20-0x27*/
-  0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8bea, /*0x28-0x2f*/
-  0x8beb, 0x8bec, 0xe6d5, 0x8bed, 0xd9f8, 0x8bee, 0x8bef, 0xe6d6, /*0x30-0x37*/
-  0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, /*0x38-0x3f*/
-  0xe6d7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, /*0x40-0x47*/
-  0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, /*0x48-0x4f*/
-  0xd7d3, 0xe6dd, 0x8c48, 0xe6de, 0xbfd7, 0xd4d0, 0x8c49, 0xd7d6, /*0x50-0x57*/
-  0xb4e6, 0xcbef, 0xe6da, 0xd8c3, 0xd7ce, 0xd0a2, 0x8c4a, 0xc3cf, /*0x58-0x5f*/
-  0x8c4b, 0x8c4c, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7, 0x8c4d, /*0x60-0x67*/
-  0x8c4e, 0xbaa2, 0xc2cf, 0x8c4f, 0xd8ab, 0x8c50, 0x8c51, 0x8c52, /*0x68-0x6f*/
-  0xcaeb, 0xe5ee, 0x8c53, 0xe6dc, 0x8c54, 0xb7f5, 0x8c55, 0x8c56, /*0x70-0x77*/
-  0x8c57, 0x8c58, 0xc8e6, 0x8c59, 0x8c5a, 0xc4f5, 0x8c5b, 0x8c5c, /*0x78-0x7f*/
-  0xe5b2, 0xc4fe, 0x8c5d, 0xcbfc, 0xe5b3, 0xd5ac, 0x8c5e, 0xd3ee, /*0x80-0x87*/
-  0xcad8, 0xb0b2, 0x8c5f, 0xcbce, 0xcdea, 0x8c60, 0x8c61, 0xbaea, /*0x88-0x8f*/
-  0x8c62, 0x8c63, 0x8c64, 0xe5b5, 0x8c65, 0xe5b4, 0x8c66, 0xd7da, /*0x90-0x97*/
-  0xb9d9, 0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0x8c67, /*0x98-0x9f*/
-  0xb3e8, 0xc9f3, 0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0x8c68, /*0xa0-0xa7*/
-  0x8c69, 0x8c6a, 0xcfdc, 0xb9ac, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, /*0xa8-0xaf*/
-  0xd4d7, 0x8c6f, 0x8c70, 0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0x8c71, /*0xb0-0xb7*/
-  0xe5b7, 0xc8dd, 0x8c72, 0x8c73, 0x8c74, 0xbfed, 0xb1f6, 0xcbde, /*0xb8-0xbf*/
-  0x8c75, 0x8c76, 0xbcc5, 0x8c77, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, /*0xc0-0xc7*/
-  0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0xb8bb, 0x8c7c, 0x8c7d, 0x8c7e, /*0xc8-0xcf*/
-  0xc3c2, 0x8c80, 0xbaae, 0xd4a2, 0x8c81, 0x8c82, 0x8c83, 0x8c84, /*0xd0-0xd7*/
-  0x8c85, 0x8c86, 0x8c87, 0x8c88, 0x8c89, 0xc7de, 0xc4af, 0xb2ec, /*0xd8-0xdf*/
-  0x8c8a, 0xb9d1, 0x8c8b, 0x8c8c, 0xe5bb, 0xc1c8, 0x8c8d, 0x8c8e, /*0xe0-0xe7*/
-  0xd5af, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0xe5bc, 0x8c94, /*0xe8-0xef*/
-  0xe5be, 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, /*0xf0-0xf7*/
-  0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc, 0x8c9c, 0x8c9d, 0xcad9, /*0xf8-0xff*/
-  /* 0x5c00 */
-  0x8c9e, 0xb7e2, 0x8c9f, 0x8ca0, 0xc9e4, 0x8ca1, 0xbdab, 0x8ca2, /*0x00-0x07*/
-  0x8ca3, 0xcebe, 0xd7f0, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0xd0a1, /*0x08-0x0f*/
-  0x8ca8, 0xc9d9, 0x8ca9, 0x8caa, 0xb6fb, 0xe6d8, 0xbce2, 0x8cab, /*0x10-0x17*/
-  0xb3be, 0x8cac, 0xc9d0, 0x8cad, 0xe6d9, 0xb3a2, 0x8cae, 0x8caf, /*0x18-0x1f*/
-  0x8cb0, 0x8cb1, 0xdecc, 0x8cb2, 0xd3c8, 0xdecd, 0x8cb3, 0xd2a2, /*0x20-0x27*/
-  0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0xdece, 0x8cb8, 0x8cb9, 0x8cba, /*0x28-0x2f*/
-  0x8cbb, 0xbecd, 0x8cbc, 0x8cbd, 0xdecf, 0x8cbe, 0x8cbf, 0x8cc0, /*0x30-0x37*/
-  0xcaac, 0xd2fc, 0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, /*0x38-0x3f*/
-  0xbed6, 0xc6a8, 0xb2e3, 0x8cc1, 0x8cc2, 0xbed3, 0x8cc3, 0x8cc4, /*0x40-0x47*/
-  0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0x8cc5, 0x8cc6, 0xcaba, 0xc6c1, /*0x48-0x4f*/
-  0xe5ec, 0xd0bc, 0x8cc7, 0x8cc8, 0x8cc9, 0xd5b9, 0x8cca, 0x8ccb, /*0x50-0x57*/
-  0x8ccc, 0xe5ed, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0xcaf4, 0x8cd1, /*0x58-0x5f*/
-  0xcdc0, 0xc2c5, 0x8cd2, 0xe5ef, 0x8cd3, 0xc2c4, 0xe5f0, 0x8cd4, /*0x60-0x67*/
-  0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0xe5f8, 0xcdcd, /*0x68-0x6f*/
-  0x8cdb, 0xc9bd, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, /*0x70-0x77*/
-  0x8ce2, 0xd2d9, 0xe1a8, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0xd3ec, /*0x78-0x7f*/
-  0x8ce7, 0xcbea, 0xc6f1, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, /*0x80-0x87*/
-  0xe1ac, 0x8ced, 0x8cee, 0x8cef, 0xe1a7, 0xe1a9, 0x8cf0, 0x8cf1, /*0x88-0x8f*/
-  0xe1aa, 0xe1af, 0x8cf2, 0x8cf3, 0xb2ed, 0x8cf4, 0xe1ab, 0xb8da, /*0x90-0x97*/
-  0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0x8cf5, 0x8cf6, 0x8cf7, /*0x98-0x9f*/
-  0x8cf8, 0x8cf9, 0xe1b3, 0xe1b8, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, /*0xa0-0xa7*/
-  0x8cfe, 0xd1d2, 0x8d40, 0xe1b6, 0xe1b5, 0xc1eb, 0x8d41, 0x8d42, /*0xa8-0xaf*/
-  0x8d43, 0xe1b7, 0x8d44, 0xd4c0, 0x8d45, 0xe1b2, 0x8d46, 0xe1ba, /*0xb0-0xb7*/
-  0xb0b6, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0xe1b4, 0x8d4b, 0xbff9, /*0xb8-0xbf*/
-  0x8d4c, 0xe1b9, 0x8d4d, 0x8d4e, 0xe1bb, 0x8d4f, 0x8d50, 0x8d51, /*0xc0-0xc7*/
-  0x8d52, 0x8d53, 0x8d54, 0xe1be, 0x8d55, 0x8d56, 0x8d57, 0x8d58, /*0xc8-0xcf*/
-  0x8d59, 0x8d5a, 0xe1bc, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, /*0xd0-0xd7*/
-  0x8d60, 0xd6c5, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, /*0xd8-0xdf*/
-  0x8d67, 0xcfbf, 0x8d68, 0x8d69, 0xe1bd, 0xe1bf, 0xc2cd, 0x8d6a, /*0xe0-0xe7*/
-  0xb6eb, 0x8d6b, 0xd3f8, 0x8d6c, 0x8d6d, 0xc7cd, 0x8d6e, 0x8d6f, /*0xe8-0xef*/
-  0xb7e5, 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, /*0xf0-0xf7*/
-  0x8d77, 0x8d78, 0x8d79, 0xbefe, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, /*0xf8-0xff*/
-  /* 0x5d00 */
-  0x8d7e, 0x8d80, 0xe1c0, 0xe1c1, 0x8d81, 0x8d82, 0xe1c7, 0xb3e7, /*0x00-0x07*/
-  0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0xc6e9, 0x8d89, /*0x08-0x0f*/
-  0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0xb4de, 0x8d8e, 0xd1c2, 0x8d8f, /*0x10-0x17*/
-  0x8d90, 0x8d91, 0x8d92, 0xe1c8, 0x8d93, 0x8d94, 0xe1c6, 0x8d95, /*0x18-0x1f*/
-  0x8d96, 0x8d97, 0x8d98, 0x8d99, 0xe1c5, 0x8d9a, 0xe1c3, 0xe1c2, /*0x20-0x27*/
-  0x8d9b, 0xb1c0, 0x8d9c, 0x8d9d, 0x8d9e, 0xd5b8, 0xe1c4, 0x8d9f, /*0x28-0x2f*/
-  0x8da0, 0x8da1, 0x8da2, 0x8da3, 0xe1cb, 0x8da4, 0x8da5, 0x8da6, /*0x30-0x37*/
-  0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0xe1cc, 0xe1ca, 0x8dac, /*0x38-0x3f*/
-  0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0xeffa, /*0x40-0x47*/
-  0x8db4, 0x8db5, 0xe1d3, 0xe1d2, 0xc7b6, 0x8db6, 0x8db7, 0x8db8, /*0x48-0x4f*/
-  0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, /*0x50-0x57*/
-  0xe1c9, 0x8dc1, 0x8dc2, 0xe1ce, 0x8dc3, 0xe1d0, 0x8dc4, 0x8dc5, /*0x58-0x5f*/
-  0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, /*0x60-0x67*/
-  0x8dce, 0xe1d4, 0x8dcf, 0xe1d1, 0xe1cd, 0x8dd0, 0x8dd1, 0xe1cf, /*0x68-0x6f*/
-  0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0xe1d5, 0x8dd6, 0x8dd7, 0x8dd8, /*0x70-0x77*/
-  0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, /*0x78-0x7f*/
-  0x8de1, 0x8de2, 0xe1d6, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, /*0x80-0x87*/
-  0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, /*0x88-0x8f*/
-  0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, /*0x90-0x97*/
-  0x8df8, 0xe1d7, 0x8df9, 0x8dfa, 0x8dfb, 0xe1d8, 0x8dfc, 0x8dfd, /*0x98-0x9f*/
-  0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, /*0xa0-0xa7*/
-  0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, /*0xa8-0xaf*/
-  0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0xe1da, /*0xb0-0xb7*/
-  0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, /*0xb8-0xbf*/
-  0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0xe1db, 0x8e63, 0x8e64, /*0xc0-0xc7*/
-  0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0xcea1, 0x8e6a, 0x8e6b, /*0xc8-0xcf*/
-  0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, /*0xd0-0xd7*/
-  0x8e74, 0x8e75, 0x8e76, 0xe7dd, 0x8e77, 0xb4a8, 0xd6dd, 0x8e78, /*0xd8-0xdf*/
-  0x8e79, 0xd1b2, 0xb3b2, 0x8e7a, 0x8e7b, 0xb9a4, 0xd7f3, 0xc7c9, /*0xe0-0xe7*/
-  0xbede, 0xb9ae, 0x8e7c, 0xced7, 0x8e7d, 0x8e7e, 0xb2ee, 0xdbcf, /*0xe8-0xef*/
-  0x8e80, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0x8e81, 0x8e82, 0xcfef, /*0xf0-0xf7*/
-  0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0xd9e3, 0xbded, 0x8e88, /*0xf8-0xff*/
-  /* 0x5e00 */
-  0x8e89, 0xb1d2, 0xcad0, 0xb2bc, 0x8e8a, 0xcba7, 0xb7ab, 0x8e8b, /*0x00-0x07*/
-  0xcaa6, 0x8e8c, 0x8e8d, 0x8e8e, 0xcfa3, 0x8e8f, 0x8e90, 0xe0f8, /*0x08-0x0f*/
-  0xd5ca, 0xe0fb, 0x8e91, 0x8e92, 0xe0fa, 0xc5c1, 0xccfb, 0x8e93, /*0x10-0x17*/
-  0xc1b1, 0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0x8e94, 0x8e95, /*0x18-0x1f*/
-  0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0xb4f8, 0xd6a1, /*0x20-0x27*/
-  0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0xcfaf, 0xb0ef, 0x8ea1, /*0x28-0x2f*/
-  0x8ea2, 0xe0fc, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0xe1a1, /*0x30-0x37*/
-  0xb3a3, 0x8ea8, 0x8ea9, 0xe0fd, 0xe0fe, 0xc3b1, 0x8eaa, 0x8eab, /*0x38-0x3f*/
-  0x8eac, 0x8ead, 0xc3dd, 0x8eae, 0xe1a2, 0xb7f9, 0x8eaf, 0x8eb0, /*0x40-0x47*/
-  0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0xbbcf, 0x8eb5, 0x8eb6, 0x8eb7, /*0x48-0x4f*/
-  0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0xe1a3, 0xc4bb, 0x8ebc, 0x8ebd, /*0x50-0x57*/
-  0x8ebe, 0x8ebf, 0x8ec0, 0xe1a4, 0x8ec1, 0x8ec2, 0xe1a5, 0x8ec3, /*0x58-0x5f*/
-  0x8ec4, 0xe1a6, 0xb4b1, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, /*0x60-0x67*/
-  0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, /*0x68-0x6f*/
-  0x8ed2, 0x8ed3, 0xb8c9, 0xc6bd, 0xc4ea, 0x8ed4, 0xb2a2, 0x8ed5, /*0x70-0x77*/
-  0xd0d2, 0x8ed6, 0xe7db, 0xbbc3, 0xd3d7, 0xd3c4, 0x8ed7, 0xb9e3, /*0x78-0x7f*/
-  0xe2cf, 0x8ed8, 0x8ed9, 0x8eda, 0xd7af, 0x8edb, 0xc7ec, 0xb1d3, /*0x80-0x87*/
-  0x8edc, 0x8edd, 0xb4b2, 0xe2d1, 0x8ede, 0x8edf, 0x8ee0, 0xd0f2, /*0x88-0x8f*/
-  0xc2ae, 0xe2d0, 0x8ee1, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2, 0xb5ea, /*0x90-0x97*/
-  0x8ee2, 0xc3ed, 0xb8fd, 0x8ee3, 0xb8ae, 0x8ee4, 0xc5d3, 0xb7cf, /*0x98-0x9f*/
-  0xe2d4, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0xe2d3, 0xb6c8, 0xd7f9, /*0xa0-0xa7*/
-  0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0xcda5, 0x8eee, 0x8eef, /*0xa8-0xaf*/
-  0x8ef0, 0x8ef1, 0x8ef2, 0xe2d8, 0x8ef3, 0xe2d6, 0xcafc, 0xbfb5, /*0xb0-0xb7*/
-  0xd3b9, 0xe2d5, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0xe2d7, 0x8ef8, /*0xb8-0xbf*/
-  0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f40, 0x8f41, /*0xc0-0xc7*/
-  0x8f42, 0xc1ae, 0xc0c8, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, /*0xc8-0xcf*/
-  0x8f48, 0xe2db, 0xe2da, 0xc0aa, 0x8f49, 0x8f4a, 0xc1ce, 0x8f4b, /*0xd0-0xd7*/
-  0x8f4c, 0x8f4d, 0x8f4e, 0xe2dc, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, /*0xd8-0xdf*/
-  0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, /*0xe0-0xe7*/
-  0xe2dd, 0x8f5b, 0xe2de, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, /*0xe8-0xef*/
-  0x8f61, 0x8f62, 0x8f63, 0x8f64, 0xdbc8, 0x8f65, 0xd1d3, 0xcda2, /*0xf0-0xf7*/
-  0x8f66, 0x8f67, 0xbda8, 0x8f68, 0x8f69, 0x8f6a, 0xdec3, 0xd8a5, /*0xf8-0xff*/
-  /* 0x5f00 */
-  0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0x8f6b, 0x8f6c, 0x8f6d, /*0x00-0x07*/
-  0xdec4, 0x8f6e, 0xb1d7, 0xdfae, 0x8f6f, 0x8f70, 0x8f71, 0xcabd, /*0x08-0x0f*/
-  0x8f72, 0xdfb1, 0x8f73, 0xb9ad, 0x8f74, 0xd2fd, 0x8f75, 0xb8a5, /*0x10-0x17*/
-  0xbaeb, 0x8f76, 0x8f77, 0xb3da, 0x8f78, 0x8f79, 0x8f7a, 0xb5dc, /*0x18-0x1f*/
-  0xd5c5, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0xc3d6, 0xcfd2, 0xbba1, /*0x20-0x27*/
-  0x8f80, 0xe5f3, 0xe5f2, 0x8f81, 0x8f82, 0xe5f4, 0x8f83, 0xcde4, /*0x28-0x2f*/
-  0x8f84, 0xc8f5, 0x8f85, 0x8f86, 0x8f87, 0x8f88, 0x8f89, 0x8f8a, /*0x30-0x37*/
-  0x8f8b, 0xb5af, 0xc7bf, 0x8f8c, 0xe5f6, 0x8f8d, 0x8f8e, 0x8f8f, /*0x38-0x3f*/
-  0xecb0, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, /*0x40-0x47*/
-  0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, /*0x48-0x4f*/
-  0xe5e6, 0x8f9f, 0xb9e9, 0xb5b1, 0x8fa0, 0xc2bc, 0xe5e8, 0xe5e7, /*0x50-0x57*/
-  0xe5e9, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0xd2cd, 0x8fa5, 0x8fa6, /*0x58-0x5f*/
-  0x8fa7, 0xe1ea, 0xd0ce, 0x8fa8, 0xcdae, 0x8fa9, 0xd1e5, 0x8faa, /*0x60-0x67*/
-  0x8fab, 0xb2ca, 0xb1eb, 0x8fac, 0xb1f2, 0xc5ed, 0x8fad, 0x8fae, /*0x68-0x6f*/
-  0xd5c3, 0xd3b0, 0x8faf, 0xe1dc, 0x8fb0, 0x8fb1, 0x8fb2, 0xe1dd, /*0x70-0x77*/
-  0x8fb3, 0xd2db, 0x8fb4, 0xb3b9, 0xb1cb, 0x8fb5, 0x8fb6, 0x8fb7, /*0x78-0x7f*/
-  0xcdf9, 0xd5f7, 0xe1de, 0x8fb8, 0xbeb6, 0xb4fd, 0x8fb9, 0xe1df, /*0x80-0x87*/
-  0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1, 0x8fba, 0x8fbb, 0x8fbc, /*0x88-0x8f*/
-  0xd0ec, 0x8fbd, 0xcdbd, 0x8fbe, 0x8fbf, 0xe1e2, 0x8fc0, 0xb5c3, /*0x90-0x97*/
-  0xc5c7, 0xe1e3, 0x8fc1, 0x8fc2, 0xe1e4, 0x8fc3, 0x8fc4, 0x8fc5, /*0x98-0x9f*/
-  0x8fc6, 0xd3f9, 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, /*0xa0-0xa7*/
-  0xe1e5, 0x8fcd, 0xd1ad, 0x8fce, 0x8fcf, 0xe1e6, 0xcea2, 0x8fd0, /*0xa8-0xaf*/
-  0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0xe1e7, 0x8fd6, 0xb5c2, /*0xb0-0xb7*/
-  0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0xe1e8, 0xbbd5, 0x8fdb, 0x8fdc, /*0xb8-0xbf*/
-  0x8fdd, 0x8fde, 0x8fdf, 0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0x8fe0, /*0xc0-0xc7*/
-  0x8fe1, 0xe2e1, 0x8fe2, 0x8fe3, 0xbcc9, 0xc8cc, 0x8fe4, 0xe2e3, /*0xc8-0xcf*/
-  0xecfe, 0xecfd, 0xdfaf, 0x8fe5, 0x8fe6, 0x8fe7, 0xe2e2, 0xd6be, /*0xd0-0xd7*/
-  0xcdfc, 0xc3a6, 0x8fe8, 0x8fe9, 0x8fea, 0xe3c3, 0x8feb, 0x8fec, /*0xd8-0xdf*/
-  0xd6d2, 0xe2e7, 0x8fed, 0x8fee, 0xe2e8, 0x8fef, 0x8ff0, 0xd3c7, /*0xe0-0xe7*/
-  0x8ff1, 0x8ff2, 0xe2ec, 0xbfec, 0x8ff3, 0xe2ed, 0xe2e5, 0x8ff4, /*0xe8-0xef*/
-  0x8ff5, 0xb3c0, 0x8ff6, 0x8ff7, 0x8ff8, 0xc4ee, 0x8ff9, 0x8ffa, /*0xf0-0xf7*/
-  0xe2ee, 0x8ffb, 0x8ffc, 0xd0c3, 0x8ffd, 0xbaf6, 0xe2e9, 0xb7de, /*0xf8-0xff*/
-  /* 0x6000 */
-  0xbbb3, 0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0x8ffe, /*0x00-0x07*/
-  0x9040, 0x9041, 0xe2f7, 0x9042, 0x9043, 0xe2f4, 0xd4f5, 0xe2f3, /*0x08-0x0f*/
-  0x9044, 0x9045, 0xc5ad, 0x9046, 0xd5fa, 0xc5c2, 0xb2c0, 0x9047, /*0x10-0x17*/
-  0x9048, 0xe2ef, 0x9049, 0xe2f2, 0xc1af, 0xcbbc, 0x904a, 0x904b, /*0x18-0x1f*/
-  0xb5a1, 0xe2f9, 0x904c, 0x904d, 0x904e, 0xbcb1, 0xe2f1, 0xd0d4, /*0x20-0x27*/
-  0xd4b9, 0xe2f5, 0xb9d6, 0xe2f6, 0x904f, 0x9050, 0x9051, 0xc7d3, /*0x28-0x2f*/
-  0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xe2f0, 0x9057, 0x9058, /*0x30-0x37*/
-  0x9059, 0x905a, 0x905b, 0xd7dc, 0xeda1, 0x905c, 0x905d, 0xe2f8, /*0x38-0x3f*/
-  0x905e, 0xeda5, 0xe2fe, 0xcad1, 0x905f, 0x9060, 0x9061, 0x9062, /*0x40-0x47*/
-  0x9063, 0x9064, 0x9065, 0xc1b5, 0x9066, 0xbbd0, 0x9067, 0x9068, /*0x48-0x4f*/
-  0xbfd6, 0x9069, 0xbae3, 0x906a, 0x906b, 0xcba1, 0x906c, 0x906d, /*0x50-0x57*/
-  0x906e, 0xeda6, 0xeda3, 0x906f, 0x9070, 0xeda2, 0x9071, 0x9072, /*0x58-0x5f*/
-  0x9073, 0x9074, 0xbbd6, 0xeda7, 0xd0f4, 0x9075, 0x9076, 0xeda4, /*0x60-0x67*/
-  0xbade, 0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0x9077, 0xcfa2, /*0x68-0x6f*/
-  0xc7a1, 0x9078, 0x9079, 0xbfd2, 0x907a, 0x907b, 0xb6f1, 0x907c, /*0x70-0x77*/
-  0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0x907d, 0xd3c1, /*0x78-0x7f*/
-  0x907e, 0x9080, 0x9081, 0xe3a7, 0xc7c4, 0x9082, 0x9083, 0x9084, /*0x80-0x87*/
-  0x9085, 0xcfa4, 0x9086, 0x9087, 0xe3a9, 0xbab7, 0x9088, 0x9089, /*0x88-0x8f*/
-  0x908a, 0x908b, 0xe3a8, 0x908c, 0xbbda, 0x908d, 0xe3a3, 0x908e, /*0x90-0x97*/
-  0x908f, 0x9090, 0xe3a4, 0xe3aa, 0x9091, 0xe3a6, 0x9092, 0xcef2, /*0x98-0x9f*/
-  0xd3c6, 0x9093, 0x9094, 0xbbbc, 0x9095, 0x9096, 0xd4c3, 0x9097, /*0xa0-0xa7*/
-  0xc4fa, 0x9098, 0x9099, 0xeda8, 0xd0fc, 0xe3a5, 0x909a, 0xc3f5, /*0xa8-0xaf*/
-  0x909b, 0xe3ad, 0xb1af, 0x909c, 0xe3b2, 0x909d, 0x909e, 0x909f, /*0xb0-0xb7*/
-  0xbcc2, 0x90a0, 0x90a1, 0xe3ac, 0xb5bf, 0x90a2, 0x90a3, 0x90a4, /*0xb8-0xbf*/
-  0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, 0xc7e9, 0xe3b0, 0x90aa, /*0xc0-0xc7*/
-  0x90ab, 0x90ac, 0xbeaa, 0xcdef, 0x90ad, 0x90ae, 0x90af, 0x90b0, /*0xc8-0xcf*/
-  0x90b1, 0xbbf3, 0x90b2, 0x90b3, 0x90b4, 0xcce8, 0x90b5, 0x90b6, /*0xd0-0xd7*/
-  0xe3af, 0x90b7, 0xe3b1, 0x90b8, 0xcfa7, 0xe3ae, 0x90b9, 0xcea9, /*0xd8-0xdf*/
-  0xbbdd, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0xb5eb, 0xbee5, /*0xe0-0xe7*/
-  0xb2d2, 0xb3cd, 0x90bf, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, /*0xe8-0xef*/
-  0xb6e8, 0x90c0, 0x90c1, 0xcfeb, 0xe3b7, 0x90c2, 0xbbcc, 0x90c3, /*0xf0-0xf7*/
-  0x90c4, 0xc8c7, 0xd0ca, 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, /*0xf8-0xff*/
-  /* 0x6100 */
-  0xe3b8, 0xb3ee, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0xeda9, 0x90ce, /*0x00-0x07*/
-  0xd3fa, 0xd3e4, 0x90cf, 0x90d0, 0x90d1, 0xedaa, 0xe3b9, 0xd2e2, /*0x08-0x0f*/
-  0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0xe3b5, 0x90d7, 0x90d8, /*0x10-0x17*/
-  0x90d9, 0x90da, 0xd3de, 0x90db, 0x90dc, 0x90dd, 0x90de, 0xb8d0, /*0x18-0x1f*/
-  0xe3b3, 0x90df, 0x90e0, 0xe3b6, 0xb7df, 0x90e1, 0xe3b4, 0xc0a2, /*0x20-0x27*/
-  0x90e2, 0x90e3, 0x90e4, 0xe3ba, 0x90e5, 0x90e6, 0x90e7, 0x90e8, /*0x28-0x2f*/
-  0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, /*0x30-0x37*/
-  0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0xd4b8, /*0x38-0x3f*/
-  0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, /*0x40-0x47*/
-  0xb4c8, 0x9141, 0xe3bb, 0x9142, 0xbbc5, 0x9143, 0xc9f7, 0x9144, /*0x48-0x4f*/
-  0x9145, 0xc9e5, 0x9146, 0x9147, 0x9148, 0xc4bd, 0x9149, 0x914a, /*0x50-0x57*/
-  0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0xedab, 0x9150, 0x9151, /*0x58-0x5f*/
-  0x9152, 0x9153, 0xc2fd, 0x9154, 0x9155, 0x9156, 0x9157, 0xbbdb, /*0x60-0x67*/
-  0xbfae, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, /*0x68-0x6f*/
-  0xcebf, 0x915f, 0x9160, 0x9161, 0x9162, 0xe3bc, 0x9163, 0xbfb6, /*0x70-0x77*/
-  0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, /*0x78-0x7f*/
-  0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172, 0x9173, /*0x80-0x87*/
-  0x9174, 0x9175, 0x9176, 0xb1ef, 0x9177, 0x9178, 0xd4f7, 0x9179, /*0x88-0x8f*/
-  0x917a, 0x917b, 0x917c, 0x917d, 0xe3be, 0x917e, 0x9180, 0x9181, /*0x90-0x97*/
-  0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xedad, 0x9187, 0x9188, /*0x98-0x9f*/
-  0x9189, 0x918a, 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0xe3bf, /*0xa0-0xa7*/
-  0xbaa9, 0xedac, 0x9190, 0x9191, 0xe3bd, 0x9192, 0x9193, 0x9194, /*0xa8-0xaf*/
-  0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, 0x919b, 0xe3c0, /*0xb0-0xb7*/
-  0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0xbab6, 0x91a2, /*0xb8-0xbf*/
-  0x91a3, 0x91a4, 0xb6ae, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, /*0xc0-0xc7*/
-  0xd0b8, 0x91aa, 0xb0c3, 0xedae, 0x91ab, 0x91ac, 0x91ad, 0x91ae, /*0xc8-0xcf*/
-  0x91af, 0xedaf, 0xc0c1, 0x91b0, 0xe3c1, 0x91b1, 0x91b2, 0x91b3, /*0xd0-0xd7*/
-  0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, 0x91bb, /*0xd8-0xdf*/
-  0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0xc5b3, 0x91c2, /*0xe0-0xe7*/
-  0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, /*0xe8-0xef*/
-  0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0xe3c2, 0x91d0, 0x91d1, /*0xf0-0xf7*/
-  0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0xdcb2, /*0xf8-0xff*/
-  /* 0x6200 */
-  0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0xedb0, 0x91df, /*0x00-0x07*/
-  0xb8ea, 0x91e0, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7, /*0x08-0x0f*/
-  0xb3c9, 0xced2, 0xbde4, 0x91e1, 0x91e2, 0xe3de, 0xbbf2, 0xeaa8, /*0x10-0x17*/
-  0xd5bd, 0x91e3, 0xc6dd, 0xeaa9, 0x91e4, 0x91e5, 0x91e6, 0xeaaa, /*0x18-0x1f*/
-  0x91e7, 0xeaac, 0xeaab, 0x91e8, 0xeaae, 0xeaad, 0x91e9, 0x91ea, /*0x20-0x27*/
-  0x91eb, 0x91ec, 0xbdd8, 0x91ed, 0xeaaf, 0x91ee, 0xc2be, 0x91ef, /*0x28-0x2f*/
-  0x91f0, 0x91f1, 0x91f2, 0xb4c1, 0xb4f7, 0x91f3, 0x91f4, 0xbba7, /*0x30-0x37*/
-  0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0xece6, 0xece5, 0xb7bf, /*0x38-0x3f*/
-  0xcbf9, 0xb1e2, 0x91fa, 0xece7, 0x91fb, 0x91fc, 0x91fd, 0xc9c8, /*0x40-0x47*/
-  0xece8, 0xece9, 0x91fe, 0xcad6, 0xded0, 0xb2c5, 0xd4fa, 0x9240, /*0x48-0x4f*/
-  0x9241, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0x9242, 0x9243, 0x9244, /*0x50-0x57*/
-  0xcdd0, 0x9245, 0x9246, 0xbfb8, 0x9247, 0x9248, 0x9249, 0x924a, /*0x58-0x5f*/
-  0x924b, 0x924c, 0x924d, 0xbfdb, 0x924e, 0x924f, 0xc7a4, 0xd6b4, /*0x60-0x67*/
-  0x9250, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7, 0xb3b6, /*0x68-0x6f*/
-  0xc8c5, 0x9251, 0x9252, 0xb0e2, 0x9253, 0x9254, 0xb7f6, 0x9255, /*0x70-0x77*/
-  0x9256, 0xc5fa, 0x9257, 0x9258, 0xb6f3, 0x9259, 0xd5d2, 0xb3d0, /*0x78-0x7f*/
-  0xbcbc, 0x925a, 0x925b, 0x925c, 0xb3ad, 0x925d, 0x925e, 0x925f, /*0x80-0x87*/
-  0x9260, 0xbef1, 0xb0d1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /*0x88-0x8f*/
-  0x9266, 0xd2d6, 0xcae3, 0xd7a5, 0x9267, 0xcdb6, 0xb6b6, 0xbfb9, /*0x90-0x97*/
-  0xd5db, 0x9268, 0xb8a7, 0xc5d7, 0x9269, 0x926a, 0x926b, 0xded2, /*0x98-0x9f*/
-  0xbfd9, 0xc2d5, 0xc7c0, 0x926c, 0xbba4, 0xb1a8, 0x926d, 0x926e, /*0xa0-0xa7*/
-  0xc5ea, 0x926f, 0x9270, 0xc5fb, 0xcca7, 0x9271, 0x9272, 0x9273, /*0xa8-0xaf*/
-  0x9274, 0xb1a7, 0x9275, 0x9276, 0x9277, 0xb5d6, 0x9278, 0x9279, /*0xb0-0xb7*/
-  0x927a, 0xc4a8, 0x927b, 0xded3, 0xd1ba, 0xb3e9, 0x927c, 0xc3f2, /*0xb8-0xbf*/
-  0x927d, 0x927e, 0xb7f7, 0x9280, 0xd6f4, 0xb5a3, 0xb2f0, 0xc4b4, /*0xc0-0xc7*/
-  0xc4e9, 0xc0ad, 0xded4, 0x9281, 0xb0e8, 0xc5c4, 0xc1e0, 0x9282, /*0xc8-0xcf*/
-  0xb9d5, 0x9283, 0xbedc, 0xcdd8, 0xb0ce, 0x9284, 0xcdcf, 0xded6, /*0xd0-0xd7*/
-  0xbed0, 0xd7be, 0xded5, 0xd5d0, 0xb0dd, 0x9285, 0x9286, 0xc4e2, /*0xd8-0xdf*/
-  0x9287, 0x9288, 0xc2a3, 0xbcf0, 0x9289, 0xd3b5, 0xc0b9, 0xc5a1, /*0xe0-0xe7*/
-  0xb2a6, 0xd4f1, 0x928a, 0x928b, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, /*0xe8-0xef*/
-  0x928c, 0xb9b0, 0x928d, 0xc8ad, 0xcba9, 0x928e, 0xded9, 0xbfbd, /*0xf0-0xf7*/
-  0x928f, 0x9290, 0x9291, 0x9292, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3, /*0xf8-0xff*/
-  /* 0x6300 */
-  0x9293, 0xb3d6, 0xb9d2, 0x9294, 0x9295, 0x9296, 0x9297, 0xd6b8, /*0x00-0x07*/
-  0xeafc, 0xb0b4, 0x9298, 0x9299, 0x929a, 0x929b, 0xbfe6, 0x929c, /*0x08-0x0f*/
-  0x929d, 0xccf4, 0x929e, 0x929f, 0x92a0, 0x92a1, 0xcdda, 0x92a2, /*0x10-0x17*/
-  0x92a3, 0x92a4, 0xd6bf, 0xc2ce, 0x92a5, 0xcece, 0xcca2, 0xd0ae, /*0x18-0x1f*/
-  0xc4d3, 0xb5b2, 0xded8, 0xd5f5, 0xbcb7, 0xbbd3, 0x92a6, 0x92a7, /*0x20-0x27*/
-  0xb0a4, 0x92a8, 0xc5b2, 0xb4ec, 0x92a9, 0x92aa, 0x92ab, 0xd5f1, /*0x28-0x2f*/
-  0x92ac, 0x92ad, 0xeafd, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, /*0x30-0x37*/
-  0x92b3, 0xdeda, 0xcda6, 0x92b4, 0x92b5, 0xcdec, 0x92b6, 0x92b7, /*0x38-0x3f*/
-  0x92b8, 0x92b9, 0xcee6, 0xdedc, 0x92ba, 0xcdb1, 0xc0a6, 0x92bb, /*0x40-0x47*/
-  0x92bc, 0xd7bd, 0x92bd, 0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, /*0x48-0x4f*/
-  0xbee8, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0xb2b6, 0x92c2, 0x92c3, /*0x50-0x57*/
-  0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0xc0cc, 0xcbf0, /*0x58-0x5f*/
-  0x92ca, 0xbcf1, 0xbbbb, 0xb5b7, 0x92cb, 0x92cc, 0x92cd, 0xc5f5, /*0x60-0x67*/
-  0x92ce, 0xdee6, 0x92cf, 0x92d0, 0x92d1, 0xdee3, 0xbedd, 0x92d2, /*0x68-0x6f*/
-  0x92d3, 0xdedf, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0xb4b7, 0xbddd, /*0x70-0x77*/
-  0x92d8, 0x92d9, 0xdee0, 0xc4ed, 0x92da, 0x92db, 0x92dc, 0x92dd, /*0x78-0x7f*/
-  0xcfc6, 0x92de, 0xb5e0, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0xb6de, /*0x80-0x87*/
-  0xcada, 0xb5f4, 0xdee5, 0x92e3, 0xd5c6, 0x92e4, 0xdee1, 0xcccd, /*0x88-0x8f*/
-  0xc6fe, 0x92e5, 0xc5c5, 0x92e6, 0x92e7, 0x92e8, 0xd2b4, 0x92e9, /*0x90-0x97*/
-  0xbef2, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, /*0x98-0x9f*/
-  0xc2d3, 0x92f1, 0xccbd, 0xb3b8, 0x92f2, 0xbdd3, 0x92f3, 0xbfd8, /*0xa0-0xa7*/
-  0xcdc6, 0xd1da, 0xb4eb, 0x92f4, 0xdee4, 0xdedd, 0xdee7, 0x92f5, /*0xa8-0xaf*/
-  0xeafe, 0x92f6, 0x92f7, 0xc2b0, 0xdee2, 0x92f8, 0x92f9, 0xd6c0, /*0xb0-0xb7*/
-  0xb5a7, 0x92fa, 0xb2f4, 0x92fb, 0xdee8, 0x92fc, 0xdef2, 0x92fd, /*0xb8-0xbf*/
-  0x92fe, 0x9340, 0x9341, 0x9342, 0xdeed, 0x9343, 0xdef1, 0x9344, /*0xc0-0xc7*/
-  0x9345, 0xc8e0, 0x9346, 0x9347, 0x9348, 0xd7e1, 0xdeef, 0xc3e8, /*0xc8-0xcf*/
-  0xcce1, 0x9349, 0xb2e5, 0x934a, 0x934b, 0x934c, 0xd2be, 0x934d, /*0xd0-0xd7*/
-  0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0xdeee, 0x9354, /*0xd8-0xdf*/
-  0xdeeb, 0xced5, 0x9355, 0xb4a7, 0x9356, 0x9357, 0x9358, 0x9359, /*0xe0-0xe7*/
-  0x935a, 0xbfab, 0xbebe, 0x935b, 0x935c, 0xbdd2, 0x935d, 0x935e, /*0xe8-0xef*/
-  0x935f, 0x9360, 0xdee9, 0x9361, 0xd4ae, 0x9362, 0xdede, 0x9363, /*0xf0-0xf7*/
-  0xdeea, 0x9364, 0x9365, 0x9366, 0x9367, 0xc0bf, 0x9368, 0xdeec, /*0xf8-0xff*/
-  /* 0x6400 */
-  0xb2f3, 0xb8e9, 0xc2a7, 0x9369, 0x936a, 0xbdc1, 0x936b, 0x936c, /*0x00-0x07*/
-  0x936d, 0x936e, 0x936f, 0xdef5, 0xdef8, 0x9370, 0x9371, 0xb2ab, /*0x08-0x0f*/
-  0xb4a4, 0x9372, 0x9373, 0xb4ea, 0xc9a6, 0x9374, 0x9375, 0x9376, /*0x10-0x17*/
-  0x9377, 0x9378, 0x9379, 0xdef6, 0xcbd1, 0x937a, 0xb8e3, 0x937b, /*0x18-0x1f*/
-  0xdef7, 0xdefa, 0x937c, 0x937d, 0x937e, 0x9380, 0xdef9, 0x9381, /*0x20-0x27*/
-  0x9382, 0x9383, 0xccc2, 0x9384, 0xb0e1, 0xb4ee, 0x9385, 0x9386, /*0x28-0x2f*/
-  0x9387, 0x9388, 0x9389, 0x938a, 0xe5ba, 0x938b, 0x938c, 0x938d, /*0x30-0x37*/
-  0x938e, 0x938f, 0xd0af, 0x9390, 0x9391, 0xb2eb, 0x9392, 0xeba1, /*0x38-0x3f*/
-  0x9393, 0xdef4, 0x9394, 0x9395, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, /*0x40-0x47*/
-  0xb1f7, 0x9396, 0xccaf, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, /*0x48-0x4f*/
-  0x939c, 0x939d, 0xdef0, 0x939e, 0xcba4, 0x939f, 0x93a0, 0x93a1, /*0x50-0x57*/
-  0xd5aa, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0xdefb, 0x93a7, /*0x58-0x5f*/
-  0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0xb4dd, /*0x60-0x67*/
-  0x93af, 0xc4a6, 0x93b0, 0x93b1, 0x93b2, 0xdefd, 0x93b3, 0x93b4, /*0x68-0x6f*/
-  0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, /*0x70-0x77*/
-  0xc3fe, 0xc4a1, 0xdfa1, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, /*0x78-0x7f*/
-  0x93c2, 0x93c3, 0xc1cc, 0x93c4, 0xdefc, 0xbeef, 0x93c5, 0xc6b2, /*0x80-0x87*/
-  0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, /*0x88-0x8f*/
-  0x93ce, 0xb3c5, 0xc8f6, 0x93cf, 0x93d0, 0xcbba, 0xdefe, 0x93d1, /*0x90-0x97*/
-  0x93d2, 0xdfa4, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0xd7b2, 0x93d7, /*0x98-0x9f*/
-  0x93d8, 0x93d9, 0x93da, 0x93db, 0xb3b7, 0x93dc, 0x93dd, 0x93de, /*0xa0-0xa7*/
-  0x93df, 0xc1c3, 0x93e0, 0x93e1, 0xc7cb, 0xb2a5, 0xb4e9, 0x93e2, /*0xa8-0xaf*/
-  0xd7ab, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0xc4ec, 0x93e7, 0xdfa2, /*0xb0-0xb7*/
-  0xdfa3, 0x93e8, 0xdfa5, 0x93e9, 0xbab3, 0x93ea, 0x93eb, 0x93ec, /*0xb8-0xbf*/
-  0xdfa6, 0x93ed, 0xc0de, 0x93ee, 0x93ef, 0xc9c3, 0x93f0, 0x93f1, /*0xc0-0xc7*/
-  0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0xb2d9, 0xc7e6, 0x93f7, /*0xc8-0xcf*/
-  0xdfa7, 0x93f8, 0xc7dc, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0xdfa8, /*0xd0-0xd7*/
-  0xeba2, 0x93fd, 0x93fe, 0x9440, 0x9441, 0x9442, 0xcbd3, 0x9443, /*0xd8-0xdf*/
-  0x9444, 0x9445, 0xdfaa, 0x9446, 0xdfa9, 0x9447, 0xb2c1, 0x9448, /*0xe0-0xe7*/
-  0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, /*0xe8-0xef*/
-  0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, /*0xf0-0xf7*/
-  0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, /*0xf8-0xff*/
-  /* 0x6500 */
-  0xc5ca, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /*0x00-0x07*/
-  0x9468, 0xdfab, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, /*0x08-0x0f*/
-  0x946f, 0x9470, 0xd4dc, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, /*0x10-0x17*/
-  0xc8c1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, /*0x18-0x1f*/
-  0x947d, 0x947e, 0x9480, 0x9481, 0x9482, 0xdfac, 0x9483, 0x9484, /*0x20-0x27*/
-  0x9485, 0x9486, 0x9487, 0xbef0, 0x9488, 0x9489, 0xdfad, 0xd6a7, /*0x28-0x2f*/
-  0x948a, 0x948b, 0x948c, 0x948d, 0xeab7, 0xebb6, 0xcad5, 0x948e, /*0x30-0x37*/
-  0xd8fc, 0xb8c4, 0x948f, 0xb9a5, 0x9490, 0x9491, 0xb7c5, 0xd5fe, /*0x38-0x3f*/
-  0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xb9ca, 0x9497, 0x9498, /*0x40-0x47*/
-  0xd0a7, 0xf4cd, 0x9499, 0x949a, 0xb5d0, 0x949b, 0x949c, 0xc3f4, /*0x48-0x4f*/
-  0x949d, 0xbec8, 0x949e, 0x949f, 0x94a0, 0xebb7, 0xb0bd, 0x94a1, /*0x50-0x57*/
-  0x94a2, 0xbdcc, 0x94a3, 0xc1b2, 0x94a4, 0xb1d6, 0xb3a8, 0x94a5, /*0x58-0x5f*/
-  0x94a6, 0x94a7, 0xb8d2, 0xc9a2, 0x94a8, 0x94a9, 0xb6d8, 0x94aa, /*0x60-0x67*/
-  0x94ab, 0x94ac, 0x94ad, 0xebb8, 0xbeb4, 0x94ae, 0x94af, 0x94b0, /*0x68-0x6f*/
-  0xcafd, 0x94b1, 0xc7c3, 0x94b2, 0xd5fb, 0x94b3, 0x94b4, 0xb7f3, /*0x70-0x77*/
-  0x94b5, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, /*0x78-0x7f*/
-  0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0xcec4, /*0x80-0x87*/
-  0x94c4, 0x94c5, 0x94c6, 0xd5ab, 0xb1f3, 0x94c7, 0x94c8, 0x94c9, /*0x88-0x8f*/
-  0xecb3, 0xb0df, 0x94ca, 0xecb5, 0x94cb, 0x94cc, 0x94cd, 0xb6b7, /*0x90-0x97*/
-  0x94ce, 0xc1cf, 0x94cf, 0xf5fa, 0xd0b1, 0x94d0, 0x94d1, 0xd5e5, /*0x98-0x9f*/
-  0x94d2, 0xced3, 0x94d3, 0x94d4, 0xbdef, 0xb3e2, 0x94d5, 0xb8ab, /*0xa0-0xa7*/
-  0x94d6, 0xd5b6, 0x94d7, 0xedbd, 0x94d8, 0xb6cf, 0x94d9, 0xcbb9, /*0xa8-0xaf*/
-  0xd0c2, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, /*0xb0-0xb7*/
-  0x94e1, 0xb7bd, 0x94e2, 0x94e3, 0xecb6, 0xcaa9, 0x94e4, 0x94e5, /*0xb8-0xbf*/
-  0x94e6, 0xc5d4, 0x94e7, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0x94e8, /*0xc0-0xc7*/
-  0x94e9, 0x94ea, 0x94eb, 0xd0fd, 0xecba, 0x94ec, 0xecbb, 0xd7e5, /*0xc8-0xcf*/
-  0x94ed, 0x94ee, 0xecbc, 0x94ef, 0x94f0, 0x94f1, 0xecbd, 0xc6ec, /*0xd0-0xd7*/
-  0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, /*0xd8-0xdf*/
-  0xcede, 0x94fa, 0xbcc8, 0x94fb, 0x94fc, 0xc8d5, 0xb5a9, 0xbec9, /*0xe0-0xe7*/
-  0xd6bc, 0xd4e7, 0x94fd, 0x94fe, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9, /*0xe8-0xef*/
-  0xeaba, 0xbab5, 0x9540, 0x9541, 0x9542, 0x9543, 0xcab1, 0xbff5, /*0xf0-0xf7*/
-  0x9544, 0x9545, 0xcdfa, 0x9546, 0x9547, 0x9548, 0x9549, 0x954a, /*0xf8-0xff*/
-  /* 0x6600 */
-  0xeac0, 0x954b, 0xb0ba, 0xeabe, 0x954c, 0x954d, 0xc0a5, 0x954e, /*0x00-0x07*/
-  0x954f, 0x9550, 0xeabb, 0x9551, 0xb2fd, 0x9552, 0xc3f7, 0xbbe8, /*0x08-0x0f*/
-  0x9553, 0x9554, 0x9555, 0xd2d7, 0xcef4, 0xeabf, 0x9556, 0x9557, /*0x10-0x17*/
-  0x9558, 0xeabc, 0x9559, 0x955a, 0x955b, 0xeac3, 0x955c, 0xd0c7, /*0x18-0x1f*/
-  0xd3b3, 0x955d, 0x955e, 0x955f, 0x9560, 0xb4ba, 0x9561, 0xc3c1, /*0x20-0x27*/
-  0xd7f2, 0x9562, 0x9563, 0x9564, 0x9565, 0xd5d1, 0x9566, 0xcac7, /*0x28-0x2f*/
-  0x9567, 0xeac5, 0x9568, 0x9569, 0xeac4, 0xeac7, 0xeac6, 0x956a, /*0x30-0x37*/
-  0x956b, 0x956c, 0x956d, 0x956e, 0xd6e7, 0x956f, 0xcfd4, 0x9570, /*0x38-0x3f*/
-  0x9571, 0xeacb, 0x9572, 0xbbce, 0x9573, 0x9574, 0x9575, 0x9576, /*0x40-0x47*/
-  0x9577, 0x9578, 0x9579, 0xbdfa, 0xc9ce, 0x957a, 0x957b, 0xeacc, /*0x48-0x4f*/
-  0x957c, 0x957d, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce, 0xeacd, 0xeacf, /*0x50-0x57*/
-  0x957e, 0x9580, 0xcded, 0x9581, 0x9582, 0x9583, 0x9584, 0xeac9, /*0x58-0x5f*/
-  0x9585, 0xeace, 0x9586, 0x9587, 0xceee, 0x9588, 0xbbde, 0x9589, /*0x60-0x67*/
-  0xb3bf, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0xc6d5, 0xbeb0, /*0x68-0x6f*/
-  0xcefa, 0x958f, 0x9590, 0x9591, 0xc7e7, 0x9592, 0xbea7, 0xead0, /*0x70-0x77*/
-  0x9593, 0x9594, 0xd6c7, 0x9595, 0x9596, 0x9597, 0xc1c0, 0x9598, /*0x78-0x7f*/
-  0x9599, 0x959a, 0xd4dd, 0x959b, 0xead1, 0x959c, 0x959d, 0xcfbe, /*0x80-0x87*/
-  0x959e, 0x959f, 0x95a0, 0x95a1, 0xead2, 0x95a2, 0x95a3, 0x95a4, /*0x88-0x8f*/
-  0x95a5, 0xcaee, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0xc5af, 0xb0b5, /*0x90-0x97*/
-  0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0xead4, 0x95af, 0x95b0, /*0x98-0x9f*/
-  0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0xead3, /*0xa0-0xa7*/
-  0xf4df, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0xc4ba, 0x95bd, /*0xa8-0xaf*/
-  0x95be, 0x95bf, 0x95c0, 0x95c1, 0xb1a9, 0x95c2, 0x95c3, 0x95c4, /*0xb0-0xb7*/
-  0x95c5, 0xe5df, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0xead5, 0x95ca, /*0xb8-0xbf*/
-  0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, /*0xc0-0xc7*/
-  0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, /*0xc8-0xcf*/
-  0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, /*0xd0-0xd7*/
-  0x95e3, 0xcaef, 0x95e4, 0xead6, 0xead7, 0xc6d8, 0x95e5, 0x95e6, /*0xd8-0xdf*/
-  0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0xead8, 0x95ed, /*0xe0-0xe7*/
-  0x95ee, 0xead9, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, /*0xe8-0xef*/
-  0xd4bb, 0x95f5, 0xc7fa, 0xd2b7, 0xb8fc, 0x95f6, 0x95f7, 0xeac2, /*0xf0-0xf7*/
-  0x95f8, 0xb2dc, 0x95f9, 0x95fa, 0xc2fc, 0x95fb, 0xd4f8, 0xcce6, /*0xf8-0xff*/
-  /* 0x6700 */
-  0xd7ee, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, /*0x00-0x07*/
-  0xd4c2, 0xd3d0, 0xebc3, 0xc5f3, 0x9644, 0xb7fe, 0x9645, 0x9646, /*0x08-0x0f*/
-  0xebd4, 0x9647, 0x9648, 0x9649, 0xcbb7, 0xebde, 0x964a, 0xc0ca, /*0x10-0x17*/
-  0x964b, 0x964c, 0x964d, 0xcdfb, 0x964e, 0xb3af, 0x964f, 0xc6da, /*0x18-0x1f*/
-  0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xebfc, 0x9656, /*0x20-0x27*/
-  0xc4be, 0x9657, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd, 0x9658, 0xcaf5, /*0x28-0x2f*/
-  0x9659, 0xd6ec, 0x965a, 0x965b, 0xc6d3, 0xb6e4, 0x965c, 0x965d, /*0x30-0x37*/
-  0x965e, 0x965f, 0xbbfa, 0x9660, 0x9661, 0xd0e0, 0x9662, 0x9663, /*0x38-0x3f*/
-  0xc9b1, 0x9664, 0xd4d3, 0xc8a8, 0x9665, 0x9666, 0xb8cb, 0x9667, /*0x40-0x47*/
-  0xe8be, 0xc9bc, 0x9668, 0x9669, 0xe8bb, 0x966a, 0xc0ee, 0xd0d3, /*0x48-0x4f*/
-  0xb2c4, 0xb4e5, 0x966b, 0xe8bc, 0x966c, 0x966d, 0xd5c8, 0x966e, /*0x50-0x57*/
-  0x966f, 0x9670, 0x9671, 0x9672, 0xb6c5, 0x9673, 0xe8bd, 0xcaf8, /*0x58-0x5f*/
-  0xb8dc, 0xccf5, 0x9674, 0x9675, 0x9676, 0xc0b4, 0x9677, 0x9678, /*0x60-0x67*/
-  0xd1ee, 0xe8bf, 0xe8c2, 0x9679, 0x967a, 0xbabc, 0x967b, 0xb1ad, /*0x68-0x6f*/
-  0xbddc, 0x967c, 0xeabd, 0xe8c3, 0x967d, 0xe8c6, 0x967e, 0xe8cb, /*0x70-0x77*/
-  0x9680, 0x9681, 0x9682, 0x9683, 0xe8cc, 0x9684, 0xcbc9, 0xb0e5, /*0x78-0x7f*/
-  0x9685, 0xbcab, 0x9686, 0x9687, 0xb9b9, 0x9688, 0x9689, 0xe8c1, /*0x80-0x87*/
-  0x968a, 0xcdf7, 0x968b, 0xe8ca, 0x968c, 0x968d, 0x968e, 0x968f, /*0x88-0x8f*/
-  0xcef6, 0x9690, 0x9691, 0x9692, 0x9693, 0xd5ed, 0x9694, 0xc1d6, /*0x90-0x97*/
-  0xe8c4, 0x9695, 0xc3b6, 0x9696, 0xb9fb, 0xd6a6, 0xe8c8, 0x9697, /*0x98-0x9f*/
-  0x9698, 0x9699, 0xcae0, 0xd4e6, 0x969a, 0xe8c0, 0x969b, 0xe8c5, /*0xa0-0xa7*/
-  0xe8c7, 0x969c, 0xc7b9, 0xb7e3, 0x969d, 0xe8c9, 0x969e, 0xbfdd, /*0xa8-0xaf*/
-  0xe8d2, 0x969f, 0x96a0, 0xe8d7, 0x96a1, 0xe8d5, 0xbcdc, 0xbccf, /*0xb0-0xb7*/
-  0xe8db, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, /*0xb8-0xbf*/
-  0x96a9, 0xe8de, 0x96aa, 0xe8da, 0xb1fa, 0x96ab, 0x96ac, 0x96ad, /*0xc0-0xc7*/
-  0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0xb0d8, /*0xc8-0xcf*/
-  0xc4b3, 0xb8cc, 0xc6e2, 0xc8be, 0xc8e1, 0x96b5, 0x96b6, 0x96b7, /*0xd0-0xd7*/
-  0xe8cf, 0xe8d4, 0xe8d6, 0x96b8, 0xb9f1, 0xe8d8, 0xd7f5, 0x96b9, /*0xd8-0xdf*/
-  0xc4fb, 0x96ba, 0xe8dc, 0x96bb, 0x96bc, 0xb2e9, 0x96bd, 0x96be, /*0xe0-0xe7*/
-  0x96bf, 0xe8d1, 0x96c0, 0x96c1, 0xbced, 0x96c2, 0x96c3, 0xbfc2, /*0xe8-0xef*/
-  0xe8cd, 0xd6f9, 0x96c4, 0xc1f8, 0xb2f1, 0x96c5, 0x96c6, 0x96c7, /*0xf0-0xf7*/
-  0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0xe8df, 0x96cd, 0xcac1, /*0xf8-0xff*/
-  /* 0x6800 */
-  0xe8d9, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0xd5a4, 0x96d2, 0xb1ea, /*0x00-0x07*/
-  0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0x96d3, 0xe8dd, 0xc0b8, /*0x08-0x0f*/
-  0x96d4, 0xcaf7, 0x96d5, 0xcba8, 0x96d6, 0x96d7, 0xc6dc, 0xc0f5, /*0x10-0x17*/
-  0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0xe8e9, 0x96dd, 0x96de, /*0x18-0x1f*/
-  0x96df, 0xd0a3, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, /*0x20-0x27*/
-  0x96e6, 0xe8f2, 0xd6ea, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, /*0x28-0x2f*/
-  0x96ec, 0x96ed, 0xe8e0, 0xe8e1, 0x96ee, 0x96ef, 0x96f0, 0xd1f9, /*0x30-0x37*/
-  0xbacb, 0xb8f9, 0x96f1, 0x96f2, 0xb8f1, 0xd4d4, 0xe8ef, 0x96f3, /*0x38-0x3f*/
-  0xe8ee, 0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0x96f4, /*0x40-0x47*/
-  0xb0b8, 0xe8f1, 0xe8f0, 0x96f5, 0xd7c0, 0x96f6, 0xe8e4, 0x96f7, /*0x48-0x4f*/
-  0xcda9, 0xc9a3, 0x96f8, 0xbbb8, 0xbddb, 0xe8ea, 0x96f9, 0x96fa, /*0x50-0x57*/
-  0x96fb, 0x96fc, 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, /*0x58-0x5f*/
-  0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed, /*0x60-0x67*/
-  0xbdb0, 0xd7ae, 0x9744, 0xe8f8, 0x9745, 0x9746, 0x9747, 0x9748, /*0x68-0x6f*/
-  0x9749, 0x974a, 0x974b, 0x974c, 0xe8f5, 0x974d, 0xcdb0, 0xe8f6, /*0x70-0x77*/
-  0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, /*0x78-0x7f*/
-  0x9756, 0xc1ba, 0x9757, 0xe8e8, 0x9758, 0xc3b7, 0xb0f0, 0x9759, /*0x80-0x87*/
-  0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f, 0x9760, 0xe8f4, /*0x88-0x8f*/
-  0x9761, 0x9762, 0x9763, 0xe8f7, 0x9764, 0x9765, 0x9766, 0xb9a3, /*0x90-0x97*/
-  0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, /*0x98-0x9f*/
-  0x976f, 0x9770, 0xc9d2, 0x9771, 0x9772, 0x9773, 0xc3ce, 0xcee0, /*0xa0-0xa7*/
-  0xc0e6, 0x9774, 0x9775, 0x9776, 0x9777, 0xcbf3, 0x9778, 0xccdd, /*0xa8-0xaf*/
-  0xd0b5, 0x9779, 0x977a, 0xcae1, 0x977b, 0xe8f3, 0x977c, 0x977d, /*0xb0-0xb7*/
-  0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, /*0xb8-0xbf*/
-  0xbcec, 0x9787, 0xe8f9, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, /*0xc0-0xc7*/
-  0x978d, 0xc3de, 0x978e, 0xc6e5, 0x978f, 0xb9f7, 0x9790, 0x9791, /*0xc8-0xcf*/
-  0x9792, 0x9793, 0xb0f4, 0x9794, 0x9795, 0xd7d8, 0x9796, 0x9797, /*0xd0-0xd7*/
-  0xbcac, 0x9798, 0xc5ef, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, /*0xd8-0xdf*/
-  0xccc4, 0x979e, 0x979f, 0xe9a6, 0x97a0, 0x97a1, 0x97a2, 0x97a3, /*0xe0-0xe7*/
-  0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0xc9ad, 0x97aa, /*0xe8-0xef*/
-  0xe9a2, 0xc0e2, 0x97ab, 0x97ac, 0x97ad, 0xbfc3, 0x97ae, 0x97af, /*0xf0-0xf7*/
-  0x97b0, 0xe8fe, 0xb9d7, 0x97b1, 0xe8fb, 0x97b2, 0x97b3, 0x97b4, /*0xf8-0xff*/
-  /* 0x6900 */
-  0x97b5, 0xe9a4, 0x97b6, 0x97b7, 0x97b8, 0xd2ce, 0x97b9, 0x97ba, /*0x00-0x07*/
-  0x97bb, 0x97bc, 0x97bd, 0xe9a3, 0x97be, 0xd6b2, 0xd7b5, 0x97bf, /*0x08-0x0f*/
-  0xe9a7, 0x97c0, 0xbdb7, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, /*0x10-0x17*/
-  0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0xe8fc, /*0x18-0x1f*/
-  0xe8fd, 0x97cd, 0x97ce, 0x97cf, 0xe9a1, 0x97d0, 0x97d1, 0x97d2, /*0x20-0x27*/
-  0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0xcdd6, 0x97d8, 0x97d9, /*0x28-0x2f*/
-  0xd2ac, 0x97da, 0x97db, 0x97dc, 0xe9b2, 0x97dd, 0x97de, 0x97df, /*0x30-0x37*/
-  0x97e0, 0xe9a9, 0x97e1, 0x97e2, 0x97e3, 0xb4aa, 0x97e4, 0xb4bb, /*0x38-0x3f*/
-  0x97e5, 0x97e6, 0xe9ab, 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, /*0x40-0x47*/
-  0x97ec, 0x97ed, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, /*0x48-0x4f*/
-  0x97f4, 0x97f5, 0x97f6, 0x97f7, 0xd0a8, 0x97f8, 0x97f9, 0xe9a5, /*0x50-0x57*/
-  0x97fa, 0x97fb, 0xb3fe, 0x97fc, 0x97fd, 0xe9ac, 0xc0e3, 0x97fe, /*0x58-0x5f*/
-  0xe9aa, 0x9840, 0x9841, 0xe9b9, 0x9842, 0x9843, 0xe9b8, 0x9844, /*0x60-0x67*/
-  0x9845, 0x9846, 0x9847, 0xe9ae, 0x9848, 0x9849, 0xe8fa, 0x984a, /*0x68-0x6f*/
-  0x984b, 0xe9a8, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0xbfac, /*0x70-0x77*/
-  0xe9b1, 0xe9ba, 0x9851, 0x9852, 0xc2a5, 0x9853, 0x9854, 0x9855, /*0x78-0x7f*/
-  0xe9af, 0x9856, 0xb8c5, 0x9857, 0xe9ad, 0x9858, 0xd3dc, 0xe9b4, /*0x80-0x87*/
-  0xe9b5, 0xe9b7, 0x9859, 0x985a, 0x985b, 0xe9c7, 0x985c, 0x985d, /*0x88-0x8f*/
-  0x985e, 0x985f, 0x9860, 0x9861, 0xc0c6, 0xe9c5, 0x9862, 0x9863, /*0x90-0x97*/
-  0xe9b0, 0x9864, 0x9865, 0xe9bb, 0xb0f1, 0x9866, 0x9867, 0x9868, /*0x98-0x9f*/
-  0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0xe9bc, /*0xa0-0xa7*/
-  0xd5a5, 0x9870, 0x9871, 0xe9be, 0x9872, 0xe9bf, 0x9873, 0x9874, /*0xa8-0xaf*/
-  0x9875, 0xe9c1, 0x9876, 0x9877, 0xc1f1, 0x9878, 0x9879, 0xc8b6, /*0xb0-0xb7*/
-  0x987a, 0x987b, 0x987c, 0xe9bd, 0x987d, 0x987e, 0x9880, 0x9881, /*0xb8-0xbf*/
-  0x9882, 0xe9c2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, /*0xc0-0xc7*/
-  0x9889, 0x988a, 0xe9c3, 0x988b, 0xe9b3, 0x988c, 0xe9b6, 0x988d, /*0xc8-0xcf*/
-  0xbbb1, 0x988e, 0x988f, 0x9890, 0xe9c0, 0x9891, 0x9892, 0x9893, /*0xd0-0xd7*/
-  0x9894, 0x9895, 0x9896, 0xbcf7, 0x9897, 0x9898, 0x9899, 0xe9c4, /*0xd8-0xdf*/
-  0xe9c6, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, /*0xe0-0xe7*/
-  0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0xe9ca, 0x98a6, 0x98a7, /*0xe8-0xef*/
-  0x98a8, 0x98a9, 0xe9ce, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, /*0xf0-0xf7*/
-  0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0xb2db, 0x98b4, 0xe9c8, /*0xf8-0xff*/
-  /* 0x6a00 */
-  0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, /*0x00-0x07*/
-  0x98bd, 0x98be, 0xb7ae, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, /*0x08-0x0f*/
-  0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0xe9cb, /*0x10-0x17*/
-  0xe9cc, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0xd5c1, /*0x18-0x1f*/
-  0x98d1, 0xc4a3, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, /*0x20-0x27*/
-  0xe9d8, 0x98d8, 0xbae1, 0x98d9, 0x98da, 0x98db, 0x98dc, 0xe9c9, /*0x28-0x2f*/
-  0x98dd, 0xd3a3, 0x98de, 0x98df, 0x98e0, 0xe9d4, 0x98e1, 0x98e2, /*0x30-0x37*/
-  0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0xe9d7, 0xe9d0, 0x98e8, /*0x38-0x3f*/
-  0x98e9, 0x98ea, 0x98eb, 0x98ec, 0xe9cf, 0x98ed, 0x98ee, 0xc7c1, /*0x40-0x47*/
-  0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, /*0x48-0x4f*/
-  0xe9d2, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, /*0x50-0x57*/
-  0xe9d9, 0xb3c8, 0x98fe, 0xe9d3, 0x9940, 0x9941, 0x9942, 0x9943, /*0x58-0x5f*/
-  0x9944, 0xcff0, 0x9945, 0x9946, 0x9947, 0xe9cd, 0x9948, 0x9949, /*0x60-0x67*/
-  0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, /*0x68-0x6f*/
-  0x9952, 0xb3f7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, /*0x70-0x77*/
-  0x9959, 0xe9d6, 0x995a, 0x995b, 0xe9da, 0x995c, 0x995d, 0x995e, /*0x78-0x7f*/
-  0xccb4, 0x995f, 0x9960, 0x9961, 0xcfad, 0x9962, 0x9963, 0x9964, /*0x80-0x87*/
-  0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996a, 0xe9d5, 0x996b, /*0x88-0x8f*/
-  0xe9dc, 0xe9db, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0xe9de, /*0x90-0x97*/
-  0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, /*0x98-0x9f*/
-  0xe9d1, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, /*0xa0-0xa7*/
-  0x9981, 0xe9dd, 0x9982, 0xe9df, 0xc3ca, 0x9983, 0x9984, 0x9985, /*0xa8-0xaf*/
-  0x9986, 0x9987, 0x9988, 0x9989, 0x998a, 0x998b, 0x998c, 0x998d, /*0xb0-0xb7*/
-  0x998e, 0x998f, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, /*0xb8-0xbf*/
-  0x9996, 0x9997, 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, /*0xc0-0xc7*/
-  0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, /*0xc8-0xcf*/
-  0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, /*0xd0-0xd7*/
-  0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, /*0xd8-0xdf*/
-  0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, /*0xe0-0xe7*/
-  0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, /*0xe8-0xef*/
-  0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, /*0xf0-0xf7*/
-  0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, /*0xf8-0xff*/
-  /* 0x6b00 */
-  0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, /*0x00-0x07*/
-  0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, /*0x08-0x0f*/
-  0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, /*0x10-0x17*/
-  0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, /*0x18-0x1f*/
-  0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3, 0x99f6, 0x99f7, 0xc5b7, /*0x20-0x27*/
-  0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, /*0x28-0x2f*/
-  0x9a41, 0x9a42, 0xd3fb, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0xeca4, /*0x30-0x37*/
-  0x9a47, 0xeca5, 0xc6db, 0x9a48, 0x9a49, 0x9a4a, 0xbfee, 0x9a4b, /*0x38-0x3f*/
-  0x9a4c, 0x9a4d, 0x9a4e, 0xeca6, 0x9a4f, 0x9a50, 0xeca7, 0xd0aa, /*0x40-0x47*/
-  0x9a51, 0xc7b8, 0x9a52, 0x9a53, 0xb8e8, 0x9a54, 0x9a55, 0x9a56, /*0x48-0x4f*/
-  0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, /*0x50-0x57*/
-  0x9a5f, 0xeca8, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, /*0x58-0x5f*/
-  0x9a66, 0x9a67, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd, 0xcee4, 0xc6e7, /*0x60-0x67*/
-  0x9a68, 0x9a69, 0xcde1, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, /*0x68-0x6f*/
-  0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, /*0x70-0x77*/
-  0x9a77, 0xb4f5, 0x9a78, 0xcbc0, 0xbcdf, 0x9a79, 0x9a7a, 0x9a7b, /*0x78-0x7f*/
-  0x9a7c, 0xe9e2, 0xe9e3, 0xd1ea, 0xe9e5, 0x9a7d, 0xb4f9, 0xe9e4, /*0x80-0x87*/
-  0x9a7e, 0xd1b3, 0xcae2, 0xb2d0, 0x9a80, 0xe9e8, 0x9a81, 0x9a82, /*0x88-0x8f*/
-  0x9a83, 0x9a84, 0xe9e6, 0xe9e7, 0x9a85, 0x9a86, 0xd6b3, 0x9a87, /*0x90-0x97*/
-  0x9a88, 0x9a89, 0xe9e9, 0xe9ea, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8d, /*0x98-0x9f*/
-  0x9a8e, 0xe9eb, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, /*0xa0-0xa7*/
-  0x9a95, 0x9a96, 0xe9ec, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, /*0xa8-0xaf*/
-  0x9a9c, 0x9a9d, 0x9a9e, 0xecaf, 0xc5b9, 0xb6ce, 0x9a9f, 0xd2f3, /*0xb0-0xb7*/
-  0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0xb5ee, /*0xb8-0xbf*/
-  0x9aa7, 0xbbd9, 0xecb1, 0x9aa8, 0x9aa9, 0xd2e3, 0x9aaa, 0x9aab, /*0xc0-0xc7*/
-  0x9aac, 0x9aad, 0x9aae, 0xcee3, 0x9aaf, 0xc4b8, 0x9ab0, 0xc3bf, /*0xc8-0xcf*/
-  0x9ab1, 0x9ab2, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe, /*0xd0-0xd7*/
-  0x9ab3, 0xb1d0, 0x9ab4, 0xc3ab, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, /*0xd8-0xdf*/
-  0x9ab9, 0xd5b1, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf, /*0xe0-0xe7*/
-  0x9ac0, 0x9ac1, 0xeba4, 0xbac1, 0x9ac2, 0x9ac3, 0x9ac4, 0xccba, /*0xe8-0xef*/
-  0x9ac5, 0x9ac6, 0x9ac7, 0xeba5, 0x9ac8, 0xeba7, 0x9ac9, 0x9aca, /*0xf0-0xf7*/
-  0x9acb, 0xeba8, 0x9acc, 0x9acd, 0x9ace, 0xeba6, 0x9acf, 0x9ad0, /*0xf8-0xff*/
-  /* 0x6c00 */
-  0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0xeba9, 0xebab, 0xebaa, /*0x00-0x07*/
-  0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0xebac, 0x9adb, 0xcacf, /*0x08-0x0f*/
-  0xd8b5, 0xc3f1, 0x9adc, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0x9add, /*0x10-0x17*/
-  0xebae, 0xebaf, 0xebb0, 0xb7d5, 0x9ade, 0x9adf, 0x9ae0, 0xb7fa, /*0x18-0x1f*/
-  0x9ae1, 0xebb1, 0xc7e2, 0x9ae2, 0xebb3, 0x9ae3, 0xbaa4, 0xd1f5, /*0x20-0x27*/
-  0xb0b1, 0xebb2, 0xebb4, 0x9ae4, 0x9ae5, 0x9ae6, 0xb5aa, 0xc2c8, /*0x28-0x2f*/
-  0xc7e8, 0x9ae7, 0xebb5, 0x9ae8, 0xcbae, 0xe3df, 0x9ae9, 0x9aea, /*0x30-0x37*/
-  0xd3c0, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0xd9db, 0x9aef, 0x9af0, /*0x38-0x3f*/
-  0xcda1, 0xd6ad, 0xc7f3, 0x9af1, 0x9af2, 0x9af3, 0xd9e0, 0xbbe3, /*0x40-0x47*/
-  0x9af4, 0xbaba, 0xe3e2, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, /*0x48-0x4f*/
-  0xcfab, 0x9afa, 0x9afb, 0x9afc, 0xe3e0, 0xc9c7, 0x9afd, 0xbab9, /*0x50-0x57*/
-  0x9afe, 0x9b40, 0x9b41, 0xd1b4, 0xe3e1, 0xc8ea, 0xb9af, 0xbdad, /*0x58-0x5f*/
-  0xb3d8, 0xcedb, 0x9b42, 0x9b43, 0xccc0, 0x9b44, 0x9b45, 0x9b46, /*0x60-0x67*/
-  0xe3e8, 0xe3e9, 0xcdf4, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, /*0x68-0x6f*/
-  0xccad, 0x9b4c, 0xbcb3, 0x9b4d, 0xe3ea, 0x9b4e, 0xe3eb, 0x9b4f, /*0x70-0x77*/
-  0x9b50, 0xd0da, 0x9b51, 0x9b52, 0x9b53, 0xc6fb, 0xb7da, 0x9b54, /*0x78-0x7f*/
-  0x9b55, 0xc7df, 0xd2ca, 0xced6, 0x9b56, 0xe3e4, 0xe3ec, 0x9b57, /*0x80-0x87*/
-  0xc9f2, 0xb3c1, 0x9b58, 0x9b59, 0xe3e7, 0x9b5a, 0x9b5b, 0xc6e3, /*0x88-0x8f*/
-  0xe3e5, 0x9b5c, 0x9b5d, 0xedb3, 0xe3e6, 0x9b5e, 0x9b5f, 0x9b60, /*0x90-0x97*/
-  0x9b61, 0xc9b3, 0x9b62, 0xc5e6, 0x9b63, 0x9b64, 0x9b65, 0xb9b5, /*0x98-0x9f*/
-  0x9b66, 0xc3bb, 0x9b67, 0xe3e3, 0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, /*0xa0-0xa7*/
-  0x9b68, 0xe3ed, 0xbba6, 0xc4ad, 0x9b69, 0xe3f0, 0xbeda, 0x9b6a, /*0xa8-0xaf*/
-  0x9b6b, 0xe3fb, 0xe3f5, 0xbad3, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, /*0xb0-0xb7*/
-  0xb7d0, 0xd3cd, 0x9b70, 0xd6ce, 0xd5d3, 0xb9c1, 0xd5b4, 0xd1d8, /*0xb8-0xbf*/
-  0x9b71, 0x9b72, 0x9b73, 0x9b74, 0xd0b9, 0xc7f6, 0x9b75, 0x9b76, /*0xc0-0xc7*/
-  0x9b77, 0xc8aa, 0xb2b4, 0x9b78, 0xc3da, 0x9b79, 0x9b7a, 0x9b7b, /*0xc8-0xcf*/
-  0xe3ee, 0x9b7c, 0x9b7d, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, /*0xd0-0xd7*/
-  0x9b7e, 0x9b80, 0x9b81, 0xb7ba, 0x9b82, 0x9b83, 0xc5a2, 0x9b84, /*0xd8-0xdf*/
-  0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0x9b85, 0xc4e0, 0x9b86, 0x9b87, /*0xe0-0xe7*/
-  0xd7a2, 0x9b88, 0xc0e1, 0xe3f9, 0x9b89, 0x9b8a, 0xe3fa, 0xe3fd, /*0xe8-0xef*/
-  0xcca9, 0xe3f3, 0x9b8b, 0xd3be, 0x9b8c, 0xb1c3, 0xedb4, 0xe3f1, /*0xf0-0xf7*/
-  0xe3f2, 0x9b8d, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0x9b8e, /*0xf8-0xff*/
-  /* 0x6d00 */
-  0x9b8f, 0xbde0, 0x9b90, 0x9b91, 0xe4a7, 0x9b92, 0x9b93, 0xe4a6, /*0x00-0x07*/
-  0x9b94, 0x9b95, 0x9b96, 0xd1f3, 0xe4a3, 0x9b97, 0xe4a9, 0x9b98, /*0x08-0x0f*/
-  0x9b99, 0x9b9a, 0xc8f7, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0xcfb4, /*0x10-0x17*/
-  0x9b9f, 0xe4a8, 0xe4ae, 0xc2e5, 0x9ba0, 0x9ba1, 0xb6b4, 0x9ba2, /*0x18-0x1f*/
-  0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0xbdf2, 0x9ba8, 0xe4a2, /*0x20-0x27*/
-  0x9ba9, 0x9baa, 0xbae9, 0xe4aa, 0x9bab, 0x9bac, 0xe4ac, 0x9bad, /*0x28-0x2f*/
-  0x9bae, 0xb6fd, 0xd6de, 0xe4b2, 0x9baf, 0xe4ad, 0x9bb0, 0x9bb1, /*0x30-0x37*/
-  0x9bb2, 0xe4a1, 0x9bb3, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9, 0x9bb4, /*0x38-0x3f*/
-  0x9bb5, 0xc1f7, 0x9bb6, 0xe4a4, 0x9bb7, 0xc7b3, 0xbdac, 0xbdbd, /*0x40-0x47*/
-  0xe4a5, 0x9bb8, 0xd7c7, 0xb2e2, 0x9bb9, 0xe4ab, 0xbcc3, 0xe4af, /*0x48-0x4f*/
-  0x9bba, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0x9bbb, 0x9bbc, 0x9bbd, /*0x50-0x57*/
-  0x9bbe, 0xd5e3, 0xbfa3, 0x9bbf, 0xe4ba, 0x9bc0, 0xe4b7, 0x9bc1, /*0x58-0x5f*/
-  0xe4bb, 0x9bc2, 0x9bc3, 0xe4bd, 0x9bc4, 0x9bc5, 0xc6d6, 0x9bc6, /*0x60-0x67*/
-  0x9bc7, 0xbac6, 0xc0cb, 0x9bc8, 0x9bc9, 0x9bca, 0xb8a1, 0xe4b4, /*0x68-0x6f*/
-  0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0xd4a1, 0x9bcf, 0x9bd0, 0xbaa3, /*0x70-0x77*/
-  0xbdfe, 0x9bd1, 0x9bd2, 0x9bd3, 0xe4bc, 0x9bd4, 0x9bd5, 0x9bd6, /*0x78-0x7f*/
-  0x9bd7, 0x9bd8, 0xcdbf, 0x9bd9, 0x9bda, 0xc4f9, 0x9bdb, 0x9bdc, /*0x80-0x87*/
-  0xcffb, 0xc9e6, 0x9bdd, 0x9bde, 0xd3bf, 0x9bdf, 0xcfd1, 0x9be0, /*0x88-0x8f*/
-  0x9be1, 0xe4b3, 0x9be2, 0xe4b8, 0xe4b9, 0xcce9, 0x9be3, 0x9be4, /*0x90-0x97*/
-  0x9be5, 0x9be6, 0x9be7, 0xccce, 0x9be8, 0xc0d4, 0xe4b5, 0xc1b0, /*0x98-0x9f*/
-  0xe4b6, 0xced0, 0x9be9, 0xbbc1, 0xb5d3, 0x9bea, 0xc8f3, 0xbda7, /*0xa0-0xa7*/
-  0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0x9beb, 0x9bec, 0xe4cc, 0xd1c4, /*0xa8-0xaf*/
-  0x9bed, 0x9bee, 0xd2ba, 0x9bef, 0x9bf0, 0xbaad, 0x9bf1, 0x9bf2, /*0xb0-0xb7*/
-  0xbad4, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0xe4c3, /*0xb8-0xbf*/
-  0xb5ed, 0x9bf9, 0x9bfa, 0x9bfb, 0xd7cd, 0xe4c0, 0xcffd, 0xe4bf, /*0xc0-0xc7*/
-  0x9bfc, 0x9bfd, 0x9bfe, 0xc1dc, 0xccca, 0x9c40, 0x9c41, 0x9c42, /*0xc8-0xcf*/
-  0x9c43, 0xcae7, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0xc4d7, 0x9c48, /*0xd0-0xd7*/
-  0xccd4, 0xe4c8, 0x9c49, 0x9c4a, 0x9c4b, 0xe4c7, 0xe4c1, 0x9c4c, /*0xd8-0xdf*/
-  0xe4c4, 0xb5ad, 0x9c4d, 0x9c4e, 0xd3d9, 0x9c4f, 0xe4c6, 0x9c50, /*0xe0-0xe7*/
-  0x9c51, 0x9c52, 0x9c53, 0xd2f9, 0xb4e3, 0x9c54, 0xbbb4, 0x9c55, /*0xe8-0xef*/
-  0x9c56, 0xc9ee, 0x9c57, 0xb4be, 0x9c58, 0x9c59, 0x9c5a, 0xbbec, /*0xf0-0xf7*/
-  0x9c5b, 0xd1cd, 0x9c5c, 0xcced, 0xedb5, 0x9c5d, 0x9c5e, 0x9c5f, /*0xf8-0xff*/
-  /* 0x6e00 */
-  0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0xc7e5, 0x9c65, 0x9c66, /*0x00-0x07*/
-  0x9c67, 0x9c68, 0xd4a8, 0x9c69, 0xe4cb, 0xd7d5, 0xe4c2, 0x9c6a, /*0x08-0x0f*/
-  0xbda5, 0xe4c5, 0x9c6b, 0x9c6c, 0xd3e6, 0x9c6d, 0xe4c9, 0xc9f8, /*0x10-0x17*/
-  0x9c6e, 0x9c6f, 0xe4be, 0x9c70, 0x9c71, 0xd3e5, 0x9c72, 0x9c73, /*0x18-0x1f*/
-  0xc7fe, 0xb6c9, 0x9c74, 0xd4fc, 0xb2b3, 0xe4d7, 0x9c75, 0x9c76, /*0x20-0x27*/
-  0x9c77, 0xcec2, 0x9c78, 0xe4cd, 0x9c79, 0xcebc, 0x9c7a, 0xb8db, /*0x28-0x2f*/
-  0x9c7b, 0x9c7c, 0xe4d6, 0x9c7d, 0xbfca, 0x9c7e, 0x9c80, 0x9c81, /*0x30-0x37*/
-  0xd3ce, 0x9c82, 0xc3ec, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, /*0x38-0x3f*/
-  0x9c88, 0x9c89, 0x9c8a, 0xc5c8, 0xe4d8, 0x9c8b, 0x9c8c, 0x9c8d, /*0x40-0x47*/
-  0x9c8e, 0x9c8f, 0x9c90, 0x9c91, 0x9c92, 0xcdc4, 0xe4cf, 0x9c93, /*0x48-0x4f*/
-  0x9c94, 0x9c95, 0x9c96, 0xe4d4, 0xe4d5, 0x9c97, 0xbafe, 0x9c98, /*0x50-0x57*/
-  0xcfe6, 0x9c99, 0x9c9a, 0xd5bf, 0x9c9b, 0x9c9c, 0x9c9d, 0xe4d2, /*0x58-0x5f*/
-  0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, /*0x60-0x67*/
-  0x9ca6, 0x9ca7, 0x9ca8, 0xe4d0, 0x9ca9, 0x9caa, 0xe4ce, 0x9cab, /*0x68-0x6f*/
-  0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, /*0x70-0x77*/
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0xcde5, 0xcaaa, /*0x78-0x7f*/
-  0x9cba, 0x9cbb, 0x9cbc, 0xc0a3, 0x9cbd, 0xbda6, 0xe4d3, 0x9cbe, /*0x80-0x87*/
-  0x9cbf, 0xb8c8, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0xe4e7, /*0x88-0x8f*/
-  0xd4b4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, /*0x90-0x97*/
-  0xe4db, 0x9ccc, 0x9ccd, 0x9cce, 0xc1ef, 0x9ccf, 0x9cd0, 0xe4e9, /*0x98-0x9f*/
-  0x9cd1, 0x9cd2, 0xd2e7, 0x9cd3, 0x9cd4, 0xe4df, 0x9cd5, 0xe4e0, /*0xa0-0xa7*/
-  0x9cd6, 0x9cd7, 0xcfaa, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0xcbdd, /*0xa8-0xaf*/
-  0x9cdc, 0xe4da, 0xe4d1, 0x9cdd, 0xe4e5, 0x9cde, 0xc8dc, 0xe4e3, /*0xb0-0xb7*/
-  0x9cdf, 0x9ce0, 0xc4e7, 0xe4e2, 0x9ce1, 0xe4e1, 0x9ce2, 0x9ce3, /*0xb8-0xbf*/
-  0x9ce4, 0xb3fc, 0xe4e8, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0xb5e1, /*0xc0-0xc7*/
-  0x9ce9, 0x9cea, 0x9ceb, 0xd7cc, 0x9cec, 0x9ced, 0x9cee, 0xe4e6, /*0xc8-0xcf*/
-  0x9cef, 0xbbac, 0x9cf0, 0xd7d2, 0xcccf, 0xebf8, 0x9cf1, 0xe4e4, /*0xd0-0xd7*/
-  0x9cf2, 0x9cf3, 0xb9f6, 0x9cf4, 0x9cf5, 0x9cf6, 0xd6cd, 0xe4d9, /*0xd8-0xdf*/
-  0xe4dc, 0xc2fa, 0xe4de, 0x9cf7, 0xc2cb, 0xc0c4, 0xc2d0, 0x9cf8, /*0xe0-0xe7*/
-  0xb1f5, 0xccb2, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, /*0xe8-0xef*/
-  0x9d40, 0x9d41, 0x9d42, 0x9d43, 0xb5ce, 0x9d44, 0x9d45, 0x9d46, /*0xf0-0xf7*/
-  0x9d47, 0xe4ef, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, /*0xf8-0xff*/
-  /* 0x6f00 */
-  0x9d4e, 0x9d4f, 0xc6af, 0x9d50, 0x9d51, 0x9d52, 0xc6e1, 0x9d53, /*0x00-0x07*/
-  0x9d54, 0xe4f5, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0xc2a9, /*0x08-0x0f*/
-  0x9d5a, 0x9d5b, 0x9d5c, 0xc0ec, 0xd1dd, 0xe4ee, 0x9d5d, 0x9d5e, /*0x10-0x17*/
-  0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, /*0x18-0x1f*/
-  0xc4ae, 0x9d67, 0x9d68, 0x9d69, 0xe4ed, 0x9d6a, 0x9d6b, 0x9d6c, /*0x20-0x27*/
-  0x9d6d, 0xe4f6, 0xe4f4, 0xc2fe, 0x9d6e, 0xe4dd, 0x9d6f, 0xe4f0, /*0x28-0x2f*/
-  0x9d70, 0xcafe, 0x9d71, 0xd5c4, 0x9d72, 0x9d73, 0xe4f1, 0x9d74, /*0x30-0x37*/
-  0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0xd1fa, 0x9d7b, /*0x38-0x3f*/
-  0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, 0xe4eb, 0xe4ec, /*0x40-0x47*/
-  0x9d83, 0x9d84, 0x9d85, 0xe4f2, 0x9d86, 0xceab, 0x9d87, 0x9d88, /*0x48-0x4f*/
-  0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, /*0x50-0x57*/
-  0xc5cb, 0x9d91, 0x9d92, 0x9d93, 0xc7b1, 0x9d94, 0xc2ba, 0x9d95, /*0x58-0x5f*/
-  0x9d96, 0x9d97, 0xe4ea, 0x9d98, 0x9d99, 0x9d9a, 0xc1ca, 0x9d9b, /*0x60-0x67*/
-  0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0xccb6, 0xb3b1, 0x9da1, /*0x68-0x6f*/
-  0x9da2, 0x9da3, 0xe4fb, 0x9da4, 0xe4f3, 0x9da5, 0x9da6, 0x9da7, /*0x70-0x77*/
-  0xe4fa, 0x9da8, 0xe4fd, 0x9da9, 0xe4fc, 0x9daa, 0x9dab, 0x9dac, /*0x78-0x7f*/
-  0x9dad, 0x9dae, 0x9daf, 0x9db0, 0xb3ce, 0x9db1, 0x9db2, 0x9db3, /*0x80-0x87*/
-  0xb3ba, 0xe4f7, 0x9db4, 0x9db5, 0xe4f9, 0xe4f8, 0xc5ec, 0x9db6, /*0x88-0x8f*/
-  0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, /*0x90-0x97*/
-  0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0xc0bd, 0x9dc3, 0x9dc4, 0x9dc5, /*0x98-0x9f*/
-  0x9dc6, 0xd4e8, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0xe5a2, /*0xa0-0xa7*/
-  0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, /*0xa8-0xaf*/
-  0x9dd4, 0x9dd5, 0x9dd6, 0xb0c4, 0x9dd7, 0x9dd8, 0xe5a4, 0x9dd9, /*0xb0-0xb7*/
-  0x9dda, 0xe5a3, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, /*0xb8-0xbf*/
-  0xbca4, 0x9de1, 0xe5a5, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, /*0xc0-0xc7*/
-  0x9de7, 0xe5a1, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, /*0xc8-0xcf*/
-  0x9dee, 0xe4fe, 0xb1f4, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, /*0xd0-0xd7*/
-  0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0xe5a8, 0x9dfa, /*0xd8-0xdf*/
-  0xe5a9, 0xe5a6, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, /*0xe0-0xe7*/
-  0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0xe5a7, 0xe5aa, /*0xe8-0xef*/
-  0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, /*0xf0-0xf7*/
-  0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, /*0xf8-0xff*/
-  /* 0x7000 */
-  0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, /*0x00-0x07*/
-  0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67, /*0x08-0x0f*/
-  0x9e68, 0xc6d9, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, /*0x10-0x17*/
-  0x9e6f, 0x9e70, 0xe5ab, 0xe5ad, 0x9e71, 0x9e72, 0x9e73, 0x9e74, /*0x18-0x1f*/
-  0x9e75, 0x9e76, 0x9e77, 0xe5ac, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, /*0x20-0x27*/
-  0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, /*0x28-0x2f*/
-  0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0xe5af, 0x9e8a, 0x9e8b, /*0x30-0x37*/
-  0x9e8c, 0xe5ae, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, /*0x38-0x3f*/
-  0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, /*0x40-0x47*/
-  0x9e9b, 0x9e9c, 0x9e9d, 0x9e9e, 0xb9e0, 0x9e9f, 0x9ea0, 0xe5b0, /*0x48-0x4f*/
-  0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, /*0x50-0x57*/
-  0x9ea9, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0xe5b1, 0x9eaf, /*0x58-0x5f*/
-  0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7, /*0x60-0x67*/
-  0x9eb8, 0x9eb9, 0x9eba, 0xbbf0, 0xece1, 0xc3f0, 0x9ebb, 0xb5c6, /*0x68-0x6f*/
-  0xbbd2, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0xc1e9, 0xd4ee, 0x9ec0, /*0x70-0x77*/
-  0xbec4, 0x9ec1, 0x9ec2, 0x9ec3, 0xd7c6, 0x9ec4, 0xd4d6, 0xb2d3, /*0x78-0x7f*/
-  0xecbe, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0xeac1, 0x9ec9, 0x9eca, /*0x80-0x87*/
-  0x9ecb, 0xc2af, 0xb4b6, 0x9ecc, 0x9ecd, 0x9ece, 0xd1d7, 0x9ecf, /*0x88-0x8f*/
-  0x9ed0, 0x9ed1, 0xb3b4, 0x9ed2, 0xc8b2, 0xbfbb, 0xecc0, 0x9ed3, /*0x90-0x97*/
-  0x9ed4, 0xd6cb, 0x9ed5, 0x9ed6, 0xecbf, 0xecc1, 0x9ed7, 0x9ed8, /*0x98-0x9f*/
-  0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf, 0x9ee0, /*0xa0-0xa7*/
-  0x9ee1, 0x9ee2, 0x9ee3, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, /*0xa8-0xaf*/
-  0x9ee4, 0xecc6, 0x9ee5, 0xb1fe, 0x9ee6, 0x9ee7, 0x9ee8, 0xecc4, /*0xb0-0xb7*/
-  0xd5a8, 0xb5e3, 0x9ee9, 0xecc2, 0xc1b6, 0xb3e3, 0x9eea, 0x9eeb, /*0xb8-0xbf*/
-  0xecc3, 0xcbb8, 0xc0c3, 0xccfe, 0x9eec, 0x9eed, 0x9eee, 0x9eef, /*0xc0-0xc7*/
-  0xc1d2, 0x9ef0, 0xecc8, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, /*0xc8-0xcf*/
-  0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd, /*0xd0-0xd7*/
-  0xbae6, 0xc0d3, 0x9efe, 0xd6f2, 0x9f40, 0x9f41, 0x9f42, 0xd1cc, /*0xd8-0xdf*/
-  0x9f43, 0x9f44, 0x9f45, 0x9f46, 0xbfbe, 0x9f47, 0xb7b3, 0xc9d5, /*0xe0-0xe7*/
-  0xecc7, 0xbbe2, 0x9f48, 0xcccc, 0xbdfd, 0xc8c8, 0x9f49, 0xcfa9, /*0xe8-0xef*/
-  0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0xcde9, /*0xf0-0xf7*/
-  0x9f51, 0xc5eb, 0x9f52, 0x9f53, 0x9f54, 0xb7e9, 0x9f55, 0x9f56, /*0xf8-0xff*/
-  /* 0x7100 */
-  0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, /*0x00-0x07*/
-  0x9f5f, 0xd1c9, 0xbab8, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, /*0x08-0x0f*/
-  0xecc9, 0x9f65, 0x9f66, 0xecca, 0x9f67, 0xbbc0, 0xeccb, 0x9f68, /*0x10-0x17*/
-  0xece2, 0xb1ba, 0xb7d9, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, /*0x18-0x1f*/
-  0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0xbdb9, 0x9f74, /*0x20-0x27*/
-  0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0xeccc, /*0x28-0x2f*/
-  0xd1e6, 0xeccd, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f80, 0xc8bb, 0x9f81, /*0x30-0x37*/
-  0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, /*0x38-0x3f*/
-  0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0xecd1, 0x9f8f, 0x9f90, /*0x40-0x47*/
-  0x9f91, 0x9f92, 0xecd3, 0x9f93, 0xbbcd, 0x9f94, 0xbce5, 0x9f95, /*0x48-0x4f*/
-  0x9f96, 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, /*0x50-0x57*/
-  0x9f9e, 0x9f9f, 0x9fa0, 0x9fa1, 0xeccf, 0x9fa2, 0xc9b7, 0x9fa3, /*0x58-0x5f*/
-  0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7, 0xc3ba, 0x9fa8, 0xece3, 0xd5d5, /*0x60-0x67*/
-  0xecd0, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0xd6f3, 0x9fae, /*0x68-0x6f*/
-  0x9faf, 0x9fb0, 0xecd2, 0xecce, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, /*0x70-0x77*/
-  0xecd4, 0x9fb5, 0xecd5, 0x9fb6, 0x9fb7, 0xc9bf, 0x9fb8, 0x9fb9, /*0x78-0x7f*/
-  0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0xcfa8, 0x9fbe, 0x9fbf, 0x9fc0, /*0x80-0x87*/
-  0x9fc1, 0x9fc2, 0xd0dc, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0xd1ac, /*0x88-0x8f*/
-  0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0xc8db, 0x9fcb, 0x9fcc, 0x9fcd, /*0x90-0x97*/
-  0xecd6, 0xcef5, 0x9fce, 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0xcaec, /*0x98-0x9f*/
-  0xecda, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, 0x9fd7, 0x9fd8, 0x9fd9, /*0xa0-0xa7*/
-  0xecd9, 0x9fda, 0x9fdb, 0x9fdc, 0xb0be, 0x9fdd, 0x9fde, 0x9fdf, /*0xa8-0xaf*/
-  0x9fe0, 0x9fe1, 0x9fe2, 0xecd7, 0x9fe3, 0xecd8, 0x9fe4, 0x9fe5, /*0xb0-0xb7*/
-  0x9fe6, 0xece4, 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, /*0xb8-0xbf*/
-  0x9fed, 0x9fee, 0x9fef, 0xc8bc, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, /*0xc0-0xc7*/
-  0x9ff4, 0x9ff5, 0x9ff6, 0x9ff7, 0x9ff8, 0x9ff9, 0xc1c7, 0x9ffa, /*0xc8-0xcf*/
-  0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, 0xecdc, 0xd1e0, 0xa040, 0xa041, /*0xd0-0xd7*/
-  0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, /*0xd8-0xdf*/
-  0xecdb, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xd4ef, 0xa04e, 0xecdd, /*0xe0-0xe7*/
-  0xa04f, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xdbc6, 0xa055, /*0xe8-0xef*/
-  0xa056, 0xa057, 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, /*0xf0-0xf7*/
-  0xa05e, 0xecde, 0xa05f, 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, /*0xf8-0xff*/
-  /* 0x7200 */
-  0xa065, 0xa066, 0xa067, 0xa068, 0xa069, 0xa06a, 0xb1ac, 0xa06b, /*0x00-0x07*/
-  0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa072, 0xa073, /*0x08-0x0f*/
-  0xa074, 0xa075, 0xa076, 0xa077, 0xa078, 0xa079, 0xa07a, 0xa07b, /*0x10-0x17*/
-  0xa07c, 0xa07d, 0xa07e, 0xa080, 0xa081, 0xecdf, 0xa082, 0xa083, /*0x18-0x1f*/
-  0xa084, 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, 0xa08a, 0xa08b, /*0x20-0x27*/
-  0xece0, 0xa08c, 0xd7a6, 0xa08d, 0xc5c0, 0xa08e, 0xa08f, 0xa090, /*0x28-0x2f*/
-  0xebbc, 0xb0ae, 0xa091, 0xa092, 0xa093, 0xbef4, 0xb8b8, 0xd2af, /*0x30-0x37*/
-  0xb0d6, 0xb5f9, 0xa094, 0xd8b3, 0xa095, 0xcbac, 0xa096, 0xe3dd, /*0x38-0x3f*/
-  0xa097, 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xc6ac, /*0x40-0x47*/
-  0xb0e6, 0xa09e, 0xa09f, 0xa0a0, 0xc5c6, 0xebb9, 0xa0a1, 0xa0a2, /*0x48-0x4f*/
-  0xa0a3, 0xa0a4, 0xebba, 0xa0a5, 0xa0a6, 0xa0a7, 0xebbb, 0xa0a8, /*0x50-0x57*/
-  0xa0a9, 0xd1c0, 0xa0aa, 0xc5a3, 0xa0ab, 0xeaf2, 0xa0ac, 0xc4b2, /*0x58-0x5f*/
-  0xa0ad, 0xc4b5, 0xc0ce, 0xa0ae, 0xa0af, 0xa0b0, 0xeaf3, 0xc4c1, /*0x60-0x67*/
-  0xa0b1, 0xceef, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xeaf0, 0xeaf4, /*0x68-0x6f*/
-  0xa0b6, 0xa0b7, 0xc9fc, 0xa0b8, 0xa0b9, 0xc7a3, 0xa0ba, 0xa0bb, /*0x70-0x77*/
-  0xa0bc, 0xccd8, 0xcefe, 0xa0bd, 0xa0be, 0xa0bf, 0xeaf5, 0xeaf6, /*0x78-0x7f*/
-  0xcfac, 0xc0e7, 0xa0c0, 0xa0c1, 0xeaf7, 0xa0c2, 0xa0c3, 0xa0c4, /*0x80-0x87*/
-  0xa0c5, 0xa0c6, 0xb6bf, 0xeaf8, 0xa0c7, 0xeaf9, 0xa0c8, 0xeafa, /*0x88-0x8f*/
-  0xa0c9, 0xa0ca, 0xeafb, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, /*0x90-0x97*/
-  0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xeaf1, /*0x98-0x9f*/
-  0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, /*0xa0-0xa7*/
-  0xa0df, 0xa0e0, 0xa0e1, 0xa0e2, 0xc8ae, 0xe1eb, 0xa0e3, 0xb7b8, /*0xa8-0xaf*/
-  0xe1ec, 0xa0e4, 0xa0e5, 0xa0e6, 0xe1ed, 0xa0e7, 0xd7b4, 0xe1ee, /*0xb0-0xb7*/
-  0xe1ef, 0xd3cc, 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, /*0xb8-0xbf*/
-  0xa0ee, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xa0ef, 0xa0f0, 0xa0f1, /*0xc0-0xc7*/
-  0xb1b7, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xe1f3, 0xe1f2, 0xa0f6, /*0xc8-0xcf*/
-  0xbafc, 0xa0f7, 0xe1f4, 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xb9b7, /*0xd0-0xd7*/
-  0xa0fc, 0xbed1, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, 0xc4fc, 0xaa42, /*0xd8-0xdf*/
-  0xbadd, 0xbdc6, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, /*0xe0-0xe7*/
-  0xe1f5, 0xe1f7, 0xaa49, 0xaa4a, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, /*0xe8-0xef*/
-  0xd5f8, 0xd3fc, 0xe1f8, 0xe1fc, 0xe1f9, 0xaa4b, 0xaa4c, 0xe1fa, /*0xf0-0xf7*/
-  0xc0ea, 0xaa4d, 0xe1fe, 0xe2a1, 0xc0c7, 0xaa4e, 0xaa4f, 0xaa50, /*0xf8-0xff*/
-  /* 0x7300 */
-  0xaa51, 0xe1fb, 0xaa52, 0xe1fd, 0xaa53, 0xaa54, 0xaa55, 0xaa56, /*0x00-0x07*/
-  0xaa57, 0xaa58, 0xe2a5, 0xaa59, 0xaa5a, 0xaa5b, 0xc1d4, 0xaa5c, /*0x08-0x0f*/
-  0xaa5d, 0xaa5e, 0xaa5f, 0xe2a3, 0xaa60, 0xe2a8, 0xb2fe, 0xe2a2, /*0x10-0x17*/
-  0xaa61, 0xaa62, 0xaa63, 0xc3cd, 0xb2c2, 0xe2a7, 0xe2a6, 0xaa64, /*0x18-0x1f*/
-  0xaa65, 0xe2a4, 0xe2a9, 0xaa66, 0xaa67, 0xe2ab, 0xaa68, 0xaa69, /*0x20-0x27*/
-  0xaa6a, 0xd0c9, 0xd6ed, 0xc3a8, 0xe2ac, 0xaa6b, 0xcfd7, 0xaa6c, /*0x28-0x2f*/
-  0xaa6d, 0xe2ae, 0xaa6e, 0xaa6f, 0xbaef, 0xaa70, 0xaa71, 0xe9e0, /*0x30-0x37*/
-  0xe2ad, 0xe2aa, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xbbab, 0xd4b3, /*0x38-0x3f*/
-  0xaa76, 0xaa77, 0xaa78, 0xaa79, 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, /*0x40-0x47*/
-  0xaa7e, 0xaa80, 0xaa81, 0xaa82, 0xaa83, 0xe2b0, 0xaa84, 0xaa85, /*0x48-0x4f*/
-  0xe2af, 0xaa86, 0xe9e1, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xe2b1, /*0x50-0x57*/
-  0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, /*0x58-0x5f*/
-  0xe2b2, 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, /*0x60-0x67*/
-  0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d, 0xe2b3, 0xcca1, 0xaa9e, 0xe2b4, /*0x68-0x6f*/
-  0xaa9f, 0xaaa0, 0xab40, 0xab41, 0xab42, 0xab43, 0xab44, 0xab45, /*0x70-0x77*/
-  0xab46, 0xab47, 0xab48, 0xab49, 0xab4a, 0xab4b, 0xe2b5, 0xab4c, /*0x78-0x7f*/
-  0xab4d, 0xab4e, 0xab4f, 0xab50, 0xd0fe, 0xab51, 0xab52, 0xc2ca, /*0x80-0x87*/
-  0xab53, 0xd3f1, 0xab54, 0xcdf5, 0xab55, 0xab56, 0xe7e0, 0xab57, /*0x88-0x8f*/
-  0xab58, 0xe7e1, 0xab59, 0xab5a, 0xab5b, 0xab5c, 0xbec1, 0xab5d, /*0x90-0x97*/
-  0xab5e, 0xab5f, 0xab60, 0xc2ea, 0xab61, 0xab62, 0xab63, 0xe7e4, /*0x98-0x9f*/
-  0xab64, 0xab65, 0xe7e3, 0xab66, 0xab67, 0xab68, 0xab69, 0xab6a, /*0xa0-0xa7*/
-  0xab6b, 0xcde6, 0xab6c, 0xc3b5, 0xab6d, 0xab6e, 0xe7e2, 0xbbb7, /*0xa8-0xaf*/
-  0xcfd6, 0xab6f, 0xc1e1, 0xe7e9, 0xab70, 0xab71, 0xab72, 0xe7e8, /*0xb0-0xb7*/
-  0xab73, 0xab74, 0xe7f4, 0xb2a3, 0xab75, 0xab76, 0xab77, 0xab78, /*0xb8-0xbf*/
-  0xe7ea, 0xab79, 0xe7e6, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, /*0xc0-0xc7*/
-  0xe7ec, 0xe7eb, 0xc9ba, 0xab80, 0xab81, 0xd5e4, 0xab82, 0xe7e5, /*0xc8-0xcf*/
-  0xb7a9, 0xe7e7, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, /*0xd0-0xd7*/
-  0xab89, 0xe7ee, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xe7f3, 0xab8e, /*0xd8-0xdf*/
-  0xd6e9, 0xab8f, 0xab90, 0xab91, 0xab92, 0xe7ed, 0xab93, 0xe7f2, /*0xe0-0xe7*/
-  0xab94, 0xe7f1, 0xab95, 0xab96, 0xab97, 0xb0e0, 0xab98, 0xab99, /*0xe8-0xef*/
-  0xab9a, 0xab9b, 0xe7f5, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, /*0xf0-0xf7*/
-  0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, /*0xf8-0xff*/
-  /* 0x7400 */
-  0xac48, 0xac49, 0xac4a, 0xc7f2, 0xac4b, 0xc0c5, 0xc0ed, 0xac4c, /*0x00-0x07*/
-  0xac4d, 0xc1f0, 0xe7f0, 0xac4e, 0xac4f, 0xac50, 0xac51, 0xe7f6, /*0x08-0x0f*/
-  0xcbf6, 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, /*0x10-0x17*/
-  0xac59, 0xac5a, 0xe8a2, 0xe8a1, 0xac5b, 0xac5c, 0xac5d, 0xac5e, /*0x18-0x1f*/
-  0xac5f, 0xac60, 0xd7c1, 0xac61, 0xac62, 0xe7fa, 0xe7f9, 0xac63, /*0x20-0x27*/
-  0xe7fb, 0xac64, 0xe7f7, 0xac65, 0xe7fe, 0xac66, 0xe7fd, 0xac67, /*0x28-0x2f*/
-  0xe7fc, 0xac68, 0xac69, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xac6a, /*0x30-0x37*/
-  0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xc7ed, 0xac6f, 0xac70, 0xac71, /*0x38-0x3f*/
-  0xac72, 0xe8a3, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, /*0x40-0x47*/
-  0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, /*0x48-0x4f*/
-  0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xe8a6, 0xac87, 0xe8a5, /*0x50-0x57*/
-  0xac88, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xac89, 0xc8f0, 0xc9aa, /*0x58-0x5f*/
-  0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, /*0x60-0x67*/
-  0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xe8a9, 0xac97, 0xac98, /*0x68-0x6f*/
-  0xb9e5, 0xac99, 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xd1fe, 0xe8a8, /*0x70-0x77*/
-  0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, 0xad42, 0xe8aa, 0xad43, /*0x78-0x7f*/
-  0xe8ad, 0xe8ae, 0xad44, 0xc1a7, 0xad45, 0xad46, 0xad47, 0xe8af, /*0x80-0x87*/
-  0xad48, 0xad49, 0xad4a, 0xe8b0, 0xad4b, 0xad4c, 0xe8ac, 0xad4d, /*0x88-0x8f*/
-  0xe8b4, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, /*0x90-0x97*/
-  0xad55, 0xad56, 0xad57, 0xad58, 0xe8ab, 0xad59, 0xe8b1, 0xad5a, /*0x98-0x9f*/
-  0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, 0xe8b5, /*0xa0-0xa7*/
-  0xe8b2, 0xe8b3, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, /*0xa8-0xaf*/
-  0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, /*0xb0-0xb7*/
-  0xad70, 0xad71, 0xe8b7, 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, /*0xb8-0xbf*/
-  0xad77, 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, /*0xc0-0xc7*/
-  0xad80, 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, /*0xc8-0xcf*/
-  0xad88, 0xad89, 0xe8b6, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, /*0xd0-0xd7*/
-  0xad8f, 0xad90, 0xad91, 0xad92, 0xb9cf, 0xad93, 0xf0ac, 0xad94, /*0xd8-0xdf*/
-  0xf0ad, 0xad95, 0xc6b0, 0xb0ea, 0xc8bf, 0xad96, 0xcddf, 0xad97, /*0xe0-0xe7*/
-  0xad98, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xcecd, 0xeab1, /*0xe8-0xef*/
-  0xad9e, 0xad9f, 0xada0, 0xae40, 0xeab2, 0xae41, 0xc6bf, 0xb4c9, /*0xf0-0xf7*/
-  0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xeab3, /*0xf8-0xff*/
-  /* 0x7500 */
-  0xae49, 0xae4a, 0xae4b, 0xae4c, 0xd5e7, 0xae4d, 0xae4e, 0xae4f, /*0x00-0x07*/
-  0xae50, 0xae51, 0xae52, 0xae53, 0xae54, 0xddf9, 0xae55, 0xeab4, /*0x08-0x0f*/
-  0xae56, 0xeab5, 0xae57, 0xeab6, 0xae58, 0xae59, 0xae5a, 0xae5b, /*0x10-0x17*/
-  0xb8ca, 0xdfb0, 0xc9f5, 0xae5c, 0xccf0, 0xae5d, 0xae5e, 0xc9fa, /*0x18-0x1f*/
-  0xae5f, 0xae60, 0xae61, 0xae62, 0xae63, 0xc9fb, 0xae64, 0xae65, /*0x20-0x27*/
-  0xd3c3, 0xcba6, 0xae66, 0xb8a6, 0xf0ae, 0xb1c2, 0xae67, 0xe5b8, /*0x28-0x2f*/
-  0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xae68, 0xb5e7, 0xae69, 0xc4d0, /*0x30-0x37*/
-  0xb5e9, 0xae6a, 0xeeae, 0xbbad, 0xae6b, 0xae6c, 0xe7de, 0xae6d, /*0x38-0x3f*/
-  0xeeaf, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xb3a9, 0xae72, 0xae73, /*0x40-0x47*/
-  0xeeb2, 0xae74, 0xae75, 0xeeb1, 0xbde7, 0xae76, 0xeeb0, 0xceb7, /*0x48-0x4f*/
-  0xae77, 0xae78, 0xae79, 0xae7a, 0xc5cf, 0xae7b, 0xae7c, 0xae7d, /*0x50-0x57*/
-  0xae7e, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xae80, 0xae81, 0xae82, /*0x58-0x5f*/
-  0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xc2d4, 0xc6e8, 0xae88, /*0x60-0x67*/
-  0xae89, 0xae8a, 0xb7ac, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, /*0x68-0x6f*/
-  0xae90, 0xae91, 0xeeb4, 0xae92, 0xb3eb, 0xae93, 0xae94, 0xae95, /*0x70-0x77*/
-  0xbbfb, 0xeeb5, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, 0xe7dc, /*0x78-0x7f*/
-  0xae9b, 0xae9c, 0xae9d, 0xeeb6, 0xae9e, 0xae9f, 0xbdae, 0xaea0, /*0x80-0x87*/
-  0xaf40, 0xaf41, 0xaf42, 0xf1e2, 0xaf43, 0xaf44, 0xaf45, 0xcae8, /*0x88-0x8f*/
-  0xaf46, 0xd2c9, 0xf0da, 0xaf47, 0xf0db, 0xaf48, 0xf0dc, 0xc1c6, /*0x90-0x97*/
-  0xaf49, 0xb8ed, 0xbece, 0xaf4a, 0xaf4b, 0xf0de, 0xaf4c, 0xc5b1, /*0x98-0x9f*/
-  0xf0dd, 0xd1f1, 0xaf4d, 0xf0e0, 0xb0cc, 0xbdea, 0xaf4e, 0xaf4f, /*0xa0-0xa7*/
-  0xaf50, 0xaf51, 0xaf52, 0xd2df, 0xf0df, 0xaf53, 0xb4af, 0xb7e8, /*0xa8-0xaf*/
-  0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1, 0xf0e2, 0xb4c3, 0xaf54, 0xaf55, /*0xb0-0xb7*/
-  0xf0e3, 0xd5ee, 0xaf56, 0xaf57, 0xccdb, 0xbed2, 0xbcb2, 0xaf58, /*0xb8-0xbf*/
-  0xaf59, 0xaf5a, 0xf0e8, 0xf0e7, 0xf0e4, 0xb2a1, 0xaf5b, 0xd6a2, /*0xc0-0xc7*/
-  0xd3b8, 0xbeb7, 0xc8ac, 0xaf5c, 0xaf5d, 0xf0ea, 0xaf5e, 0xaf5f, /*0xc8-0xcf*/
-  0xaf60, 0xaf61, 0xd1f7, 0xaf62, 0xd6cc, 0xbadb, 0xf0e9, 0xaf63, /*0xd0-0xd7*/
-  0xb6bb, 0xaf64, 0xaf65, 0xcdb4, 0xaf66, 0xaf67, 0xc6a6, 0xaf68, /*0xd8-0xdf*/
-  0xaf69, 0xaf6a, 0xc1a1, 0xf0eb, 0xf0ee, 0xaf6b, 0xf0ed, 0xf0f0, /*0xe0-0xe7*/
-  0xf0ec, 0xaf6c, 0xbbbe, 0xf0ef, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, /*0xe8-0xef*/
-  0xccb5, 0xf0f2, 0xaf71, 0xaf72, 0xb3d5, 0xaf73, 0xaf74, 0xaf75, /*0xf0-0xf7*/
-  0xaf76, 0xb1d4, 0xaf77, 0xaf78, 0xf0f3, 0xaf79, 0xaf7a, 0xf0f4, /*0xf8-0xff*/
-  /* 0x7600 */
-  0xf0f6, 0xb4e1, 0xaf7b, 0xf0f1, 0xaf7c, 0xf0f7, 0xaf7d, 0xaf7e, /*0x00-0x07*/
-  0xaf80, 0xaf81, 0xf0fa, 0xaf82, 0xf0f8, 0xaf83, 0xaf84, 0xaf85, /*0x08-0x0f*/
-  0xf0f5, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xf0fd, 0xaf8a, 0xf0f9, /*0x10-0x17*/
-  0xf0fc, 0xf0fe, 0xaf8b, 0xf1a1, 0xaf8c, 0xaf8d, 0xaf8e, 0xcec1, /*0x18-0x1f*/
-  0xf1a4, 0xaf8f, 0xf1a3, 0xaf90, 0xc1f6, 0xf0fb, 0xcadd, 0xaf91, /*0x20-0x27*/
-  0xaf92, 0xb4f1, 0xb1f1, 0xccb1, 0xaf93, 0xf1a6, 0xaf94, 0xaf95, /*0x28-0x2f*/
-  0xf1a7, 0xaf96, 0xaf97, 0xf1ac, 0xd5ce, 0xf1a9, 0xaf98, 0xaf99, /*0x30-0x37*/
-  0xc8b3, 0xaf9a, 0xaf9b, 0xaf9c, 0xf1a2, 0xaf9d, 0xf1ab, 0xf1a8, /*0x38-0x3f*/
-  0xf1a5, 0xaf9e, 0xaf9f, 0xf1aa, 0xafa0, 0xb040, 0xb041, 0xb042, /*0x40-0x47*/
-  0xb043, 0xb044, 0xb045, 0xb046, 0xb0a9, 0xf1ad, 0xb047, 0xb048, /*0x48-0x4f*/
-  0xb049, 0xb04a, 0xb04b, 0xb04c, 0xf1af, 0xb04d, 0xf1b1, 0xb04e, /*0x50-0x57*/
-  0xb04f, 0xb050, 0xb051, 0xb052, 0xf1b0, 0xb053, 0xf1ae, 0xb054, /*0x58-0x5f*/
-  0xb055, 0xb056, 0xb057, 0xd1a2, 0xb058, 0xb059, 0xb05a, 0xb05b, /*0x60-0x67*/
-  0xb05c, 0xb05d, 0xb05e, 0xf1b2, 0xb05f, 0xb060, 0xb061, 0xf1b3, /*0x68-0x6f*/
-  0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, /*0x70-0x77*/
-  0xb9ef, 0xb06a, 0xb06b, 0xb5c7, 0xb06c, 0xb0d7, 0xb0d9, 0xb06d, /*0x78-0x7f*/
-  0xb06e, 0xb06f, 0xd4ed, 0xb070, 0xb5c4, 0xb071, 0xbdd4, 0xbbca, /*0x80-0x87*/
-  0xf0a7, 0xb072, 0xb073, 0xb8de, 0xb074, 0xb075, 0xf0a8, 0xb076, /*0x88-0x8f*/
-  0xb077, 0xb0a8, 0xb078, 0xf0a9, 0xb079, 0xb07a, 0xcdee, 0xb07b, /*0x90-0x97*/
-  0xb07c, 0xf0aa, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, 0xb083, /*0x98-0x9f*/
-  0xb084, 0xb085, 0xb086, 0xb087, 0xf0ab, 0xb088, 0xb089, 0xb08a, /*0xa0-0xa7*/
-  0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xc6a4, 0xb091, /*0xa8-0xaf*/
-  0xb092, 0xd6e5, 0xf1e4, 0xb093, 0xf1e5, 0xb094, 0xb095, 0xb096, /*0xb0-0xb7*/
-  0xb097, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xc3f3, /*0xb8-0xbf*/
-  0xb09e, 0xb09f, 0xd3db, 0xb0a0, 0xb140, 0xd6d1, 0xc5e8, 0xb141, /*0xc0-0xc7*/
-  0xd3af, 0xb142, 0xd2e6, 0xb143, 0xb144, 0xeec1, 0xb0bb, 0xd5b5, /*0xc8-0xcf*/
-  0xd1ce, 0xbce0, 0xbad0, 0xb145, 0xbff8, 0xb146, 0xb8c7, 0xb5c1, /*0xd0-0xd7*/
-  0xc5cc, 0xb147, 0xb148, 0xcaa2, 0xb149, 0xb14a, 0xb14b, 0xc3cb, /*0xd8-0xdf*/
-  0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xeec2, 0xb151, 0xb152, /*0xe0-0xe7*/
-  0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xc4bf, 0xb6a2, /*0xe8-0xef*/
-  0xb159, 0xedec, 0xc3a4, 0xb15a, 0xd6b1, 0xb15b, 0xb15c, 0xb15d, /*0xf0-0xf7*/
-  0xcfe0, 0xedef, 0xb15e, 0xb15f, 0xc5ce, 0xb160, 0xb6dc, 0xb161, /*0xf8-0xff*/
-  /* 0x7700 */
-  0xb162, 0xcaa1, 0xb163, 0xb164, 0xeded, 0xb165, 0xb166, 0xedf0, /*0x00-0x07*/
-  0xedf1, 0xc3bc, 0xb167, 0xbfb4, 0xb168, 0xedee, 0xb169, 0xb16a, /*0x08-0x0f*/
-  0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, 0xb172, /*0x10-0x17*/
-  0xb173, 0xedf4, 0xedf2, 0xb174, 0xb175, 0xb176, 0xb177, 0xd5e6, /*0x18-0x1f*/
-  0xc3df, 0xb178, 0xedf3, 0xb179, 0xb17a, 0xb17b, 0xedf6, 0xb17c, /*0x20-0x27*/
-  0xd5a3, 0xd1a3, 0xb17d, 0xb17e, 0xb180, 0xedf5, 0xb181, 0xc3d0, /*0x28-0x2f*/
-  0xb182, 0xb183, 0xb184, 0xb185, 0xb186, 0xedf7, 0xbff4, 0xbeec, /*0x30-0x37*/
-  0xedf8, 0xb187, 0xccf7, 0xb188, 0xd1db, 0xb189, 0xb18a, 0xb18b, /*0x38-0x3f*/
-  0xd7c5, 0xd5f6, 0xb18c, 0xedfc, 0xb18d, 0xb18e, 0xb18f, 0xedfb, /*0x40-0x47*/
-  0xb190, 0xb191, 0xb192, 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, /*0x48-0x4f*/
-  0xedf9, 0xedfa, 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d, /*0x50-0x57*/
-  0xb19e, 0xb19f, 0xedfd, 0xbea6, 0xb1a0, 0xb240, 0xb241, 0xb242, /*0x58-0x5f*/
-  0xb243, 0xcbaf, 0xeea1, 0xb6bd, 0xb244, 0xeea2, 0xc4c0, 0xb245, /*0x60-0x67*/
-  0xedfe, 0xb246, 0xb247, 0xbdde, 0xb2c7, 0xb248, 0xb249, 0xb24a, /*0x68-0x6f*/
-  0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb252, /*0x70-0x77*/
-  0xb253, 0xb6c3, 0xb254, 0xb255, 0xb256, 0xeea5, 0xd8ba, 0xeea3, /*0x78-0x7f*/
-  0xeea6, 0xb257, 0xb258, 0xb259, 0xc3e9, 0xb3f2, 0xb25a, 0xb25b, /*0x80-0x87*/
-  0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xeea7, 0xeea4, 0xcfb9, 0xb260, /*0x88-0x8f*/
-  0xb261, 0xeea8, 0xc2f7, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, /*0x90-0x97*/
-  0xb267, 0xb268, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xeea9, /*0x98-0x9f*/
-  0xeeaa, 0xb26e, 0xdeab, 0xb26f, 0xb270, 0xc6b3, 0xb271, 0xc7c6, /*0xa0-0xa7*/
-  0xb272, 0xd6f5, 0xb5c9, 0xb273, 0xcbb2, 0xb274, 0xb275, 0xb276, /*0xa8-0xaf*/
-  0xeeab, 0xb277, 0xb278, 0xcdab, 0xb279, 0xeeac, 0xb27a, 0xb27b, /*0xb0-0xb7*/
-  0xb27c, 0xb27d, 0xb27e, 0xd5b0, 0xb280, 0xeead, 0xb281, 0xf6c4, /*0xb8-0xbf*/
-  0xb282, 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, /*0xc0-0xc7*/
-  0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xdbc7, 0xb28f, 0xb290, /*0xc8-0xcf*/
-  0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb4a3, /*0xd0-0xd7*/
-  0xb298, 0xb299, 0xb29a, 0xc3ac, 0xf1e6, 0xb29b, 0xb29c, 0xb29d, /*0xd8-0xdf*/
-  0xb29e, 0xb29f, 0xcab8, 0xd2d3, 0xb2a0, 0xd6aa, 0xb340, 0xeff2, /*0xe0-0xe7*/
-  0xb341, 0xbed8, 0xb342, 0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xb343, /*0xe8-0xef*/
-  0xb344, 0xb345, 0xb346, 0xcaaf, 0xb347, 0xb348, 0xedb6, 0xb349, /*0xf0-0xf7*/
-  0xedb7, 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xcef9, 0xb7af, 0xbff3, /*0xf8-0xff*/
-  /* 0x7800 */
-  0xedb8, 0xc2eb, 0xc9b0, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, /*0x00-0x07*/
-  0xb353, 0xedb9, 0xb354, 0xb355, 0xc6f6, 0xbfb3, 0xb356, 0xb357, /*0x08-0x0f*/
-  0xb358, 0xedbc, 0xc5f8, 0xb359, 0xd1d0, 0xb35a, 0xd7a9, 0xedba, /*0x10-0x17*/
-  0xedbb, 0xb35b, 0xd1e2, 0xb35c, 0xedbf, 0xedc0, 0xb35d, 0xedc4, /*0x18-0x1f*/
-  0xb35e, 0xb35f, 0xb360, 0xedc8, 0xb361, 0xedc6, 0xedce, 0xd5e8, /*0x20-0x27*/
-  0xb362, 0xedc9, 0xb363, 0xb364, 0xedc7, 0xedbe, 0xb365, 0xb366, /*0x28-0x2f*/
-  0xc5e9, 0xb367, 0xb368, 0xb369, 0xc6c6, 0xb36a, 0xb36b, 0xc9e9, /*0x30-0x37*/
-  0xd4d2, 0xedc1, 0xedc2, 0xedc3, 0xedc5, 0xb36c, 0xc0f9, 0xb36d, /*0x38-0x3f*/
-  0xb4a1, 0xb36e, 0xb36f, 0xb370, 0xb371, 0xb9e8, 0xb372, 0xedd0, /*0x40-0x47*/
-  0xb373, 0xb374, 0xb375, 0xb376, 0xedd1, 0xb377, 0xedca, 0xb378, /*0x48-0x4f*/
-  0xedcf, 0xb379, 0xcef8, 0xb37a, 0xb37b, 0xcbb6, 0xedcc, 0xedcd, /*0x50-0x57*/
-  0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xcff5, 0xb382, 0xb383, /*0x58-0x5f*/
-  0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, /*0x60-0x67*/
-  0xb38c, 0xb38d, 0xedd2, 0xc1f2, 0xd3b2, 0xedcb, 0xc8b7, 0xb38e, /*0x68-0x6f*/
-  0xb38f, 0xb390, 0xb391, 0xb392, 0xb393, 0xb394, 0xb395, 0xbcef, /*0x70-0x77*/
-  0xb396, 0xb397, 0xb398, 0xb399, 0xc5f0, 0xb39a, 0xb39b, 0xb39c, /*0x78-0x7f*/
-  0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, 0xb442, 0xedd6, /*0x80-0x87*/
-  0xb443, 0xb5ef, 0xb444, 0xb445, 0xc2b5, 0xb0ad, 0xcbe9, 0xb446, /*0x88-0x8f*/
-  0xb447, 0xb1ae, 0xb448, 0xedd4, 0xb449, 0xb44a, 0xb44b, 0xcdeb, /*0x90-0x97*/
-  0xb5e2, 0xb44c, 0xedd5, 0xedd3, 0xedd7, 0xb44d, 0xb44e, 0xb5fa, /*0x98-0x9f*/
-  0xb44f, 0xedd8, 0xb450, 0xedd9, 0xb451, 0xeddc, 0xb452, 0xb1cc, /*0xa0-0xa7*/
-  0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, 0xb45a, /*0xa8-0xaf*/
-  0xc5f6, 0xbcee, 0xedda, 0xccbc, 0xb2ea, 0xb45b, 0xb45c, 0xb45d, /*0xb0-0xb7*/
-  0xb45e, 0xeddb, 0xb45f, 0xb460, 0xb461, 0xb462, 0xc4eb, 0xb463, /*0xb8-0xbf*/
-  0xb464, 0xb4c5, 0xb465, 0xb466, 0xb467, 0xb0f5, 0xb468, 0xb469, /*0xc0-0xc7*/
-  0xb46a, 0xeddf, 0xc0da, 0xb4e8, 0xb46b, 0xb46c, 0xb46d, 0xb46e, /*0xc8-0xcf*/
-  0xc5cd, 0xb46f, 0xb470, 0xb471, 0xeddd, 0xbfc4, 0xb472, 0xb473, /*0xd0-0xd7*/
-  0xb474, 0xedde, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a, /*0xd8-0xdf*/
-  0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, 0xb483, /*0xe0-0xe7*/
-  0xc4a5, 0xb484, 0xb485, 0xb486, 0xede0, 0xb487, 0xb488, 0xb489, /*0xe8-0xef*/
-  0xb48a, 0xb48b, 0xede1, 0xb48c, 0xede3, 0xb48d, 0xb48e, 0xc1d7, /*0xf0-0xf7*/
-  0xb48f, 0xb490, 0xbbc7, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, /*0xf8-0xff*/
-  /* 0x7900 */
-  0xb496, 0xbdb8, 0xb497, 0xb498, 0xb499, 0xede2, 0xb49a, 0xb49b, /*0x00-0x07*/
-  0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, 0xb542, /*0x08-0x0f*/
-  0xb543, 0xb544, 0xb545, 0xede4, 0xb546, 0xb547, 0xb548, 0xb549, /*0x10-0x17*/
-  0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xede6, 0xb550, /*0x18-0x1f*/
-  0xb551, 0xb552, 0xb553, 0xb554, 0xede5, 0xb555, 0xb556, 0xb557, /*0x20-0x27*/
-  0xb558, 0xb559, 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, /*0x28-0x2f*/
-  0xb560, 0xb561, 0xb562, 0xb563, 0xede7, 0xb564, 0xb565, 0xb566, /*0x30-0x37*/
-  0xb567, 0xb568, 0xcabe, 0xecea, 0xc0f1, 0xb569, 0xc9e7, 0xb56a, /*0x38-0x3f*/
-  0xeceb, 0xc6ee, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xecec, 0xb56f, /*0x40-0x47*/
-  0xc6ed, 0xeced, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, /*0x48-0x4f*/
-  0xb576, 0xb577, 0xb578, 0xecf0, 0xb579, 0xb57a, 0xd7e6, 0xecf3, /*0x50-0x57*/
-  0xb57b, 0xb57c, 0xecf1, 0xecee, 0xecef, 0xd7a3, 0xc9f1, 0xcbee, /*0x58-0x5f*/
-  0xecf4, 0xb57d, 0xecf2, 0xb57e, 0xb580, 0xcfe9, 0xb581, 0xecf6, /*0x60-0x67*/
-  0xc6b1, 0xb582, 0xb583, 0xb584, 0xb585, 0xbcc0, 0xb586, 0xecf5, /*0x68-0x6f*/
-  0xb587, 0xb588, 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb5bb, /*0x70-0x77*/
-  0xbbf6, 0xb58e, 0xecf7, 0xb58f, 0xb590, 0xb591, 0xb592, 0xb593, /*0x78-0x7f*/
-  0xd9f7, 0xbdfb, 0xb594, 0xb595, 0xc2bb, 0xecf8, 0xb596, 0xb597, /*0x80-0x87*/
-  0xb598, 0xb599, 0xecf9, 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb8a3, /*0x88-0x8f*/
-  0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, 0xb642, 0xb643, 0xb644, /*0x90-0x97*/
-  0xb645, 0xb646, 0xecfa, 0xb647, 0xb648, 0xb649, 0xb64a, 0xb64b, /*0x98-0x9f*/
-  0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, 0xecfb, /*0xa0-0xa7*/
-  0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, /*0xa8-0xaf*/
-  0xb65b, 0xb65c, 0xb65d, 0xecfc, 0xb65e, 0xb65f, 0xb660, 0xb661, /*0xb0-0xb7*/
-  0xb662, 0xd3ed, 0xd8ae, 0xc0eb, 0xb663, 0xc7dd, 0xbacc, 0xb664, /*0xb8-0xbf*/
-  0xd0e3, 0xcbbd, 0xb665, 0xcdba, 0xb666, 0xb667, 0xb8d1, 0xb668, /*0xc0-0xc7*/
-  0xb669, 0xb1fc, 0xb66a, 0xc7ef, 0xb66b, 0xd6d6, 0xb66c, 0xb66d, /*0xc8-0xcf*/
-  0xb66e, 0xbfc6, 0xc3eb, 0xb66f, 0xb670, 0xeff5, 0xb671, 0xb672, /*0xd0-0xd7*/
-  0xc3d8, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xd7e2, /*0xd8-0xdf*/
-  0xb679, 0xb67a, 0xb67b, 0xeff7, 0xb3d3, 0xb67c, 0xc7d8, 0xd1ed, /*0xe0-0xe7*/
-  0xb67d, 0xd6c8, 0xb67e, 0xeff8, 0xb680, 0xeff6, 0xb681, 0xbbfd, /*0xe8-0xef*/
-  0xb3c6, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, /*0xf0-0xf7*/
-  0xbdd5, 0xb689, 0xb68a, 0xd2c6, 0xb68b, 0xbbe0, 0xb68c, 0xb68d, /*0xf8-0xff*/
-  /* 0x7a00 */
-  0xcfa1, 0xb68e, 0xeffc, 0xeffb, 0xb68f, 0xb690, 0xeff9, 0xb691, /*0x00-0x07*/
-  0xb692, 0xb693, 0xb694, 0xb3cc, 0xb695, 0xc9d4, 0xcbb0, 0xb696, /*0x08-0x0f*/
-  0xb697, 0xb698, 0xb699, 0xb69a, 0xeffe, 0xb69b, 0xb69c, 0xb0de, /*0x10-0x17*/
-  0xb69d, 0xb69e, 0xd6c9, 0xb69f, 0xb6a0, 0xb740, 0xeffd, 0xb741, /*0x18-0x1f*/
-  0xb3ed, 0xb742, 0xb743, 0xf6d5, 0xb744, 0xb745, 0xb746, 0xb747, /*0x20-0x27*/
-  0xb748, 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, /*0x28-0x2f*/
-  0xb750, 0xb751, 0xb752, 0xcec8, 0xb753, 0xb754, 0xb755, 0xf0a2, /*0x30-0x37*/
-  0xb756, 0xf0a1, 0xb757, 0xb5be, 0xbcda, 0xbbfc, 0xb758, 0xb8e5, /*0x38-0x3f*/
-  0xb759, 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xc4c2, 0xb75f, /*0x40-0x47*/
-  0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, /*0x48-0x4f*/
-  0xb768, 0xf0a3, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xcbeb, /*0x50-0x57*/
-  0xb76e, 0xb76f, 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, /*0x58-0x5f*/
-  0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d, /*0x60-0x67*/
-  0xb77e, 0xb780, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, /*0x68-0x6f*/
-  0xf0a6, 0xb787, 0xb788, 0xb789, 0xd1a8, 0xb78a, 0xbebf, 0xc7ee, /*0x70-0x77*/
-  0xf1b6, 0xf1b7, 0xbfd5, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb4a9, /*0x78-0x7f*/
-  0xf1b8, 0xcdbb, 0xb78f, 0xc7d4, 0xd5ad, 0xb790, 0xf1b9, 0xb791, /*0x80-0x87*/
-  0xf1ba, 0xb792, 0xb793, 0xb794, 0xb795, 0xc7cf, 0xb796, 0xb797, /*0x88-0x8f*/
-  0xb798, 0xd2a4, 0xd6cf, 0xb799, 0xb79a, 0xf1bb, 0xbdd1, 0xb4b0, /*0x90-0x97*/
-  0xbebd, 0xb79b, 0xb79c, 0xb79d, 0xb4dc, 0xced1, 0xb79e, 0xbfdf, /*0x98-0x9f*/
-  0xf1bd, 0xb79f, 0xb7a0, 0xb840, 0xb841, 0xbffa, 0xf1bc, 0xb842, /*0xa0-0xa7*/
-  0xf1bf, 0xb843, 0xb844, 0xb845, 0xf1be, 0xf1c0, 0xb846, 0xb847, /*0xa8-0xaf*/
-  0xb848, 0xb849, 0xb84a, 0xf1c1, 0xb84b, 0xb84c, 0xb84d, 0xb84e, /*0xb0-0xb7*/
-  0xb84f, 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xc1fe, /*0xb8-0xbf*/
-  0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0xb85c, 0xb85d, /*0xc0-0xc7*/
-  0xb85e, 0xb85f, 0xb860, 0xc1a2, 0xb861, 0xb862, 0xb863, 0xb864, /*0xc8-0xcf*/
-  0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a, 0xcafa, 0xb86b, /*0xd0-0xd7*/
-  0xb86c, 0xd5be, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xbeba, 0xbeb9, /*0xd8-0xdf*/
-  0xd5c2, 0xb871, 0xb872, 0xbfa2, 0xb873, 0xcdaf, 0xf1b5, 0xb874, /*0xe0-0xe7*/
-  0xb875, 0xb876, 0xb877, 0xb878, 0xb879, 0xbddf, 0xb87a, 0xb6cb, /*0xe8-0xef*/
-  0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, 0xb883, /*0xf0-0xf7*/
-  0xb884, 0xd6f1, 0xf3c3, 0xb885, 0xb886, 0xf3c4, 0xb887, 0xb8cd, /*0xf8-0xff*/
-  /* 0x7b00 */
-  0xb888, 0xb889, 0xb88a, 0xf3c6, 0xf3c7, 0xb88b, 0xb0ca, 0xb88c, /*0x00-0x07*/
-  0xf3c5, 0xb88d, 0xf3c9, 0xcbf1, 0xb88e, 0xb88f, 0xb890, 0xf3cb, /*0x08-0x0f*/
-  0xb891, 0xd0a6, 0xb892, 0xb893, 0xb1ca, 0xf3c8, 0xb894, 0xb895, /*0x10-0x17*/
-  0xb896, 0xf3cf, 0xb897, 0xb5d1, 0xb898, 0xb899, 0xf3d7, 0xb89a, /*0x18-0x1f*/
-  0xf3d2, 0xb89b, 0xb89c, 0xb89d, 0xf3d4, 0xf3d3, 0xb7fb, 0xb89e, /*0x20-0x27*/
-  0xb1bf, 0xb89f, 0xf3ce, 0xf3ca, 0xb5da, 0xb8a0, 0xf3d0, 0xb940, /*0x28-0x2f*/
-  0xb941, 0xf3d1, 0xb942, 0xf3d5, 0xb943, 0xb944, 0xb945, 0xb946, /*0x30-0x37*/
-  0xf3cd, 0xb947, 0xbce3, 0xb948, 0xc1fd, 0xb949, 0xf3d6, 0xb94a, /*0x38-0x3f*/
-  0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xf3da, 0xb950, 0xf3cc, /*0x40-0x47*/
-  0xb951, 0xb5c8, 0xb952, 0xbdee, 0xf3dc, 0xb953, 0xb954, 0xb7a4, /*0x48-0x4f*/
-  0xbff0, 0xd6fe, 0xcdb2, 0xb955, 0xb4f0, 0xb956, 0xb2df, 0xb957, /*0x50-0x57*/
-  0xf3d8, 0xb958, 0xf3d9, 0xc9b8, 0xb959, 0xf3dd, 0xb95a, 0xb95b, /*0x58-0x5f*/
-  0xf3de, 0xb95c, 0xf3e1, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, /*0x60-0x67*/
-  0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xf3df, 0xb968, /*0x68-0x6f*/
-  0xb969, 0xf3e3, 0xf3e2, 0xb96a, 0xb96b, 0xf3db, 0xb96c, 0xbfea, /*0x70-0x77*/
-  0xb96d, 0xb3ef, 0xb96e, 0xf3e0, 0xb96f, 0xb970, 0xc7a9, 0xb971, /*0x78-0x7f*/
-  0xbcf2, 0xb972, 0xb973, 0xb974, 0xb975, 0xf3eb, 0xb976, 0xb977, /*0x80-0x87*/
-  0xb978, 0xb979, 0xb97a, 0xb97b, 0xb97c, 0xb9bf, 0xb97d, 0xb97e, /*0x88-0x8f*/
-  0xf3e4, 0xb980, 0xb981, 0xb982, 0xb2ad, 0xbbfe, 0xb983, 0xcbe3, /*0x90-0x97*/
-  0xb984, 0xb985, 0xb986, 0xb987, 0xf3ed, 0xf3e9, 0xb988, 0xb989, /*0x98-0x9f*/
-  0xb98a, 0xb9dc, 0xf3ee, 0xb98b, 0xb98c, 0xb98d, 0xf3e5, 0xf3e6, /*0xa0-0xa7*/
-  0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8, 0xbcfd, 0xb98e, 0xb98f, /*0xa8-0xaf*/
-  0xb990, 0xcfe4, 0xb991, 0xb992, 0xf3f0, 0xb993, 0xb994, 0xb995, /*0xb0-0xb7*/
-  0xf3e7, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, /*0xb8-0xbf*/
-  0xb99d, 0xf3f2, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xd7ad, 0xc6aa, /*0xc0-0xc7*/
-  0xba41, 0xba42, 0xba43, 0xba44, 0xf3f3, 0xba45, 0xba46, 0xba47, /*0xc8-0xcf*/
-  0xba48, 0xf3f1, 0xba49, 0xc2a8, 0xba4a, 0xba4b, 0xba4c, 0xba4d, /*0xd0-0xd7*/
-  0xba4e, 0xb8dd, 0xf3f5, 0xba4f, 0xba50, 0xf3f4, 0xba51, 0xba52, /*0xd8-0xdf*/
-  0xba53, 0xb4db, 0xba54, 0xba55, 0xba56, 0xf3f6, 0xf3f7, 0xba57, /*0xe0-0xe7*/
-  0xba58, 0xba59, 0xf3f8, 0xba5a, 0xba5b, 0xba5c, 0xc0ba, 0xba5d, /*0xe8-0xef*/
-  0xba5e, 0xc0e9, 0xba5f, 0xba60, 0xba61, 0xba62, 0xba63, 0xc5f1, /*0xf0-0xf7*/
-  0xba64, 0xba65, 0xba66, 0xba67, 0xf3fb, 0xba68, 0xf3fa, 0xba69, /*0xf8-0xff*/
-  /* 0x7c00 */
-  0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xb4d8, /*0x00-0x07*/
-  0xba71, 0xba72, 0xba73, 0xf3fe, 0xf3f9, 0xba74, 0xba75, 0xf3fc, /*0x08-0x0f*/
-  0xba76, 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xf3fd, 0xba7c, /*0x10-0x17*/
-  0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, 0xba83, 0xba84, 0xf4a1, /*0x18-0x1f*/
-  0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xf4a3, 0xbbc9, /*0x20-0x27*/
-  0xba8b, 0xba8c, 0xf4a2, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, /*0x28-0x2f*/
-  0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, /*0x30-0x37*/
-  0xf4a4, 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xb2be, /*0x38-0x3f*/
-  0xf4a6, 0xf4a5, 0xbaa0, 0xbb40, 0xbb41, 0xbb42, 0xbb43, 0xbb44, /*0x40-0x47*/
-  0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, 0xbcae, 0xbb4a, 0xbb4b, /*0x48-0x4f*/
-  0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb52, 0xbb53, /*0x50-0x57*/
-  0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, /*0x58-0x5f*/
-  0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, 0xbb62, 0xbb63, /*0x60-0x67*/
-  0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, /*0x68-0x6f*/
-  0xbb6c, 0xbb6d, 0xbb6e, 0xc3d7, 0xd9e1, 0xbb6f, 0xbb70, 0xbb71, /*0x70-0x77*/
-  0xbb72, 0xbb73, 0xbb74, 0xc0e0, 0xf4cc, 0xd7d1, 0xbb75, 0xbb76, /*0x78-0x7f*/
-  0xbb77, 0xbb78, 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, /*0x80-0x87*/
-  0xbb80, 0xb7db, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, /*0x88-0x8f*/
-  0xbb87, 0xf4ce, 0xc1a3, 0xbb88, 0xbb89, 0xc6c9, 0xbb8a, 0xb4d6, /*0x90-0x97*/
-  0xd5b3, 0xbb8b, 0xbb8c, 0xbb8d, 0xf4d0, 0xf4cf, 0xf4d1, 0xcbda, /*0x98-0x9f*/
-  0xbb8e, 0xbb8f, 0xf4d2, 0xbb90, 0xd4c1, 0xd6e0, 0xbb91, 0xbb92, /*0xa0-0xa7*/
-  0xbb93, 0xbb94, 0xb7e0, 0xbb95, 0xbb96, 0xbb97, 0xc1b8, 0xbb98, /*0xa8-0xaf*/
-  0xbb99, 0xc1bb, 0xf4d3, 0xbeac, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, /*0xb0-0xb7*/
-  0xbb9e, 0xb4e2, 0xbb9f, 0xbba0, 0xf4d4, 0xf4d5, 0xbeab, 0xbc40, /*0xb8-0xbf*/
-  0xbc41, 0xf4d6, 0xbc42, 0xbc43, 0xbc44, 0xf4db, 0xbc45, 0xf4d7, /*0xc0-0xc7*/
-  0xf4da, 0xbc46, 0xbafd, 0xbc47, 0xf4d8, 0xf4d9, 0xbc48, 0xbc49, /*0xc8-0xcf*/
-  0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xb8e2, 0xccc7, 0xf4dc, /*0xd0-0xd7*/
-  0xbc4f, 0xb2da, 0xbc50, 0xbc51, 0xc3d3, 0xbc52, 0xbc53, 0xd4e3, /*0xd8-0xdf*/
-  0xbfb7, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a, /*0xe0-0xe7*/
-  0xf4dd, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xc5b4, /*0xe8-0xef*/
-  0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, /*0xf0-0xf7*/
-  0xf4e9, 0xbc69, 0xbc6a, 0xcfb5, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, /*0xf8-0xff*/
-  /* 0x7d00 */
-  0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, /*0x00-0x07*/
-  0xbc77, 0xbc78, 0xcec9, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, /*0x08-0x0f*/
-  0xbc7e, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, /*0x10-0x17*/
-  0xbc87, 0xbc88, 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, /*0x18-0x1f*/
-  0xcbd8, 0xbc8f, 0xcbf7, 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbdf4, /*0x20-0x27*/
-  0xbc94, 0xbc95, 0xbc96, 0xd7cf, 0xbc97, 0xbc98, 0xbc99, 0xc0db, /*0x28-0x2f*/
-  0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, /*0x30-0x37*/
-  0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, /*0x38-0x3f*/
-  0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, /*0x40-0x47*/
-  0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, /*0x48-0x4f*/
-  0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, /*0x50-0x57*/
-  0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, /*0x58-0x5f*/
-  0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, /*0x60-0x67*/
-  0xbd71, 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xd0f5, 0xbd77, /*0x68-0x6f*/
-  0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xf4ea, /*0x70-0x77*/
-  0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, /*0x78-0x7f*/
-  0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, /*0x80-0x87*/
-  0xbd90, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, /*0x88-0x8f*/
-  0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, /*0x90-0x97*/
-  0xbda0, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, /*0x98-0x9f*/
-  0xbe47, 0xbe48, 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xf4eb, 0xbe4d, /*0xa0-0xa7*/
-  0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xf4ec, 0xbe54, /*0xa8-0xaf*/
-  0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xbe5c, /*0xb0-0xb7*/
-  0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, /*0xb8-0xbf*/
-  0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, /*0xc0-0xc7*/
-  0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, 0xbe72, 0xbe73, 0xbe74, /*0xc8-0xcf*/
-  0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, /*0xd0-0xd7*/
-  0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, /*0xd8-0xdf*/
-  0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, /*0xe0-0xe7*/
-  0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, 0xbe93, 0xbe94, 0xbe95, /*0xe8-0xef*/
-  0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, /*0xf0-0xf7*/
-  0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, /*0xf8-0xff*/
-  /* 0x7e00 */
-  0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, /*0x00-0x07*/
-  0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, 0xbf52, 0xbf53, 0xbf54, /*0x08-0x0f*/
-  0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0xbf5c, /*0x10-0x17*/
-  0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62, 0xbf63, 0xbf64, /*0x18-0x1f*/
-  0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, /*0x20-0x27*/
-  0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xbf74, /*0x28-0x2f*/
-  0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, /*0x30-0x37*/
-  0xbf7d, 0xbf7e, 0xbf80, 0xf7e3, 0xbf81, 0xbf82, 0xbf83, 0xbf84, /*0x38-0x3f*/
-  0xbf85, 0xb7b1, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, 0xf4ed, /*0x40-0x47*/
-  0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, /*0x48-0x4f*/
-  0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, /*0x50-0x57*/
-  0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, /*0x58-0x5f*/
-  0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, /*0x60-0x67*/
-  0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, /*0x68-0x6f*/
-  0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, /*0x70-0x77*/
-  0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, /*0x78-0x7f*/
-  0xc062, 0xc063, 0xd7eb, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, /*0x80-0x87*/
-  0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, /*0x88-0x8f*/
-  0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, /*0x90-0x97*/
-  0xc079, 0xc07a, 0xc07b, 0xf4ee, 0xc07c, 0xc07d, 0xc07e, 0xe6f9, /*0x98-0x9f*/
-  0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc, 0xbcb6, /*0xa0-0xa7*/
-  0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xc080, 0xb4bf, /*0xa8-0xaf*/
-  0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xc081, 0xd7dd, 0xc2da, 0xb7d7, /*0xb0-0xb7*/
-  0xd6bd, 0xcec6, 0xb7c4, 0xc082, 0xc083, 0xc5a6, 0xe7a3, 0xcfdf, /*0xb8-0xbf*/
-  0xe7a4, 0xe7a5, 0xe7a6, 0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, /*0xc0-0xc7*/
-  0xd6d5, 0xe7a7, 0xb0ed, 0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, /*0xc8-0xcf*/
-  0xe7aa, 0xb0f3, 0xc8de, 0xbde1, 0xe7ab, 0xc8c6, 0xc084, 0xe7ac, /*0xd0-0xd7*/
-  0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad, 0xc2e7, 0xbef8, 0xbdca, 0xcdb3, /*0xd8-0xdf*/
-  0xe7ae, 0xe7af, 0xbeee, 0xd0e5, 0xc085, 0xcbe7, 0xccd0, 0xbccc, /*0xe0-0xe7*/
-  0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xc086, 0xd0f8, 0xe7b2, 0xe7b3, /*0xe8-0xef*/
-  0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0, 0xe7b7, 0xb1c1, /*0xf0-0xf7*/
-  0xb3f1, 0xc087, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba, 0xc2cc, /*0xf8-0xff*/
-  /* 0x7f00 */
-  0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2, 0xe7be, /*0x00-0x07*/
-  0xe7bf, 0xbca9, 0xc088, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2, /*0x08-0x0f*/
-  0xc089, 0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, /*0x10-0x17*/
-  0xd4b5, 0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xc08a, 0xe7c9, /*0x18-0x1f*/
-  0xb2f8, 0xe7ca, 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, /*0x20-0x27*/
-  0xd3a7, 0xcbf5, 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, /*0x28-0x2f*/
-  0xe7d6, 0xe7d7, 0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xc08b, /*0x30-0x37*/
-  0xb8d7, 0xc08c, 0xc8b1, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, /*0x38-0x3f*/
-  0xc092, 0xc093, 0xf3bf, 0xc094, 0xf3c0, 0xf3c1, 0xc095, 0xc096, /*0x40-0x47*/
-  0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e, /*0x48-0x4f*/
-  0xb9de, 0xcdf8, 0xc09f, 0xc0a0, 0xd8e8, 0xbab1, 0xc140, 0xc2de, /*0x50-0x57*/
-  0xeeb7, 0xc141, 0xb7a3, 0xc142, 0xc143, 0xc144, 0xc145, 0xeeb9, /*0x58-0x5f*/
-  0xc146, 0xeeb8, 0xb0d5, 0xc147, 0xc148, 0xc149, 0xc14a, 0xc14b, /*0x60-0x67*/
-  0xeebb, 0xd5d6, 0xd7ef, 0xc14c, 0xc14d, 0xc14e, 0xd6c3, 0xc14f, /*0x68-0x6f*/
-  0xc150, 0xeebd, 0xcaf0, 0xc151, 0xeebc, 0xc152, 0xc153, 0xc154, /*0x70-0x77*/
-  0xc155, 0xeebe, 0xc156, 0xc157, 0xc158, 0xc159, 0xeec0, 0xc15a, /*0x78-0x7f*/
-  0xc15b, 0xeebf, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, /*0x80-0x87*/
-  0xc162, 0xc163, 0xd1f2, 0xc164, 0xc7bc, 0xc165, 0xc3c0, 0xc166, /*0x88-0x8f*/
-  0xc167, 0xc168, 0xc169, 0xc16a, 0xb8e1, 0xc16b, 0xc16c, 0xc16d, /*0x90-0x97*/
-  0xc16e, 0xc16f, 0xc1e7, 0xc170, 0xc171, 0xf4c6, 0xd0df, 0xf4c7, /*0x98-0x9f*/
-  0xc172, 0xcfdb, 0xc173, 0xc174, 0xc8ba, 0xc175, 0xc176, 0xf4c8, /*0xa0-0xa7*/
-  0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xf4c9, /*0xa8-0xaf*/
-  0xf4ca, 0xc17e, 0xf4cb, 0xc180, 0xc181, 0xc182, 0xc183, 0xc184, /*0xb0-0xb7*/
-  0xd9fa, 0xb8fe, 0xc185, 0xc186, 0xe5f1, 0xd3f0, 0xc187, 0xf4e0, /*0xb8-0xbf*/
-  0xc188, 0xcecc, 0xc189, 0xc18a, 0xc18b, 0xb3e1, 0xc18c, 0xc18d, /*0xc0-0xc7*/
-  0xc18e, 0xc18f, 0xf1b4, 0xc190, 0xd2ee, 0xc191, 0xf4e1, 0xc192, /*0xc8-0xcf*/
-  0xc193, 0xc194, 0xc195, 0xc196, 0xcfe8, 0xf4e2, 0xc197, 0xc198, /*0xd0-0xd7*/
-  0xc7cc, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xb5d4, /*0xd8-0xdf*/
-  0xb4e4, 0xf4e4, 0xc19f, 0xc1a0, 0xc240, 0xf4e3, 0xf4e5, 0xc241, /*0xe0-0xe7*/
-  0xc242, 0xf4e6, 0xc243, 0xc244, 0xc245, 0xc246, 0xf4e7, 0xc247, /*0xe8-0xef*/
-  0xbab2, 0xb0bf, 0xc248, 0xf4e8, 0xc249, 0xc24a, 0xc24b, 0xc24c, /*0xf0-0xf7*/
-  0xc24d, 0xc24e, 0xc24f, 0xb7ad, 0xd2ed, 0xc250, 0xc251, 0xc252, /*0xf8-0xff*/
-  /* 0x8000 */
-  0xd2ab, 0xc0cf, 0xc253, 0xbfbc, 0xeba3, 0xd5df, 0xeac8, 0xc254, /*0x00-0x07*/
-  0xc255, 0xc256, 0xc257, 0xf1f3, 0xb6f8, 0xcba3, 0xc258, 0xc259, /*0x08-0x0f*/
-  0xc4cd, 0xc25a, 0xf1e7, 0xc25b, 0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, /*0x10-0x17*/
-  0xd4c5, 0xb0d2, 0xc25c, 0xc25d, 0xf1ea, 0xc25e, 0xc25f, 0xc260, /*0x18-0x1f*/
-  0xf1eb, 0xc261, 0xf1ec, 0xc262, 0xc263, 0xf1ed, 0xf1ee, 0xf1ef, /*0x20-0x27*/
-  0xf1f1, 0xf1f0, 0xc5d5, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, /*0x28-0x2f*/
-  0xc269, 0xf1f2, 0xc26a, 0xb6fa, 0xc26b, 0xf1f4, 0xd2ae, 0xdec7, /*0x30-0x37*/
-  0xcbca, 0xc26c, 0xc26d, 0xb3dc, 0xc26e, 0xb5a2, 0xc26f, 0xb9a2, /*0x38-0x3f*/
-  0xc270, 0xc271, 0xc4f4, 0xf1f5, 0xc272, 0xc273, 0xf1f6, 0xc274, /*0x40-0x47*/
-  0xc275, 0xc276, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xc277, 0xc278, /*0x48-0x4f*/
-  0xc279, 0xc27a, 0xf1f8, 0xc27b, 0xc1aa, 0xc27c, 0xc27d, 0xc27e, /*0x50-0x57*/
-  0xc6b8, 0xc280, 0xbedb, 0xc281, 0xc282, 0xc283, 0xc284, 0xc285, /*0x58-0x5f*/
-  0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, /*0x60-0x67*/
-  0xc28e, 0xf1f9, 0xb4cf, 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, /*0x68-0x6f*/
-  0xc294, 0xf1fa, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, /*0x70-0x77*/
-  0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xedb2, /*0x78-0x7f*/
-  0xedb1, 0xc341, 0xc342, 0xcbe0, 0xd2de, 0xc343, 0xcbc1, 0xd5d8, /*0x80-0x87*/
-  0xc344, 0xc8e2, 0xc345, 0xc0df, 0xbca1, 0xc346, 0xc347, 0xc348, /*0x88-0x8f*/
-  0xc349, 0xc34a, 0xc34b, 0xebc1, 0xc34c, 0xc34d, 0xd0a4, 0xc34e, /*0x90-0x97*/
-  0xd6e2, 0xc34f, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xc350, 0xebbf, /*0x98-0x9f*/
-  0xb3a6, 0xb9c9, 0xd6ab, 0xc351, 0xb7f4, 0xb7ca, 0xc352, 0xc353, /*0xa0-0xa7*/
-  0xc354, 0xbce7, 0xb7be, 0xebc6, 0xc355, 0xebc7, 0xb0b9, 0xbfcf, /*0xa8-0xaf*/
-  0xc356, 0xebc5, 0xd3fd, 0xc357, 0xebc8, 0xc358, 0xc359, 0xebc9, /*0xb0-0xb7*/
-  0xc35a, 0xc35b, 0xb7ce, 0xc35c, 0xebc2, 0xebc4, 0xc9f6, 0xd6d7, /*0xb8-0xbf*/
-  0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0, 0xc35d, 0xb5a8, 0xc35e, /*0xc0-0xc7*/
-  0xc35f, 0xc360, 0xc361, 0xc362, 0xb1b3, 0xebd2, 0xcca5, 0xc363, /*0xc8-0xcf*/
-  0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, 0xc5d6, 0xebd3, /*0xd0-0xd7*/
-  0xc36a, 0xebd1, 0xc5df, 0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xc36b, /*0xd8-0xdf*/
-  0xc36c, 0xbafa, 0xc36d, 0xc36e, 0xd8b7, 0xf1e3, 0xc36f, 0xebca, /*0xe0-0xe7*/
-  0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xc370, 0xbfe8, /*0xe8-0xef*/
-  0xd2c8, 0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xc371, 0xbdba, 0xc372, /*0xf0-0xf7*/
-  0xd0d8, 0xc373, 0xb0b7, 0xc374, 0xebdd, 0xc4dc, 0xc375, 0xc376, /*0xf8-0xff*/
-  /* 0x8100 */
-  0xc377, 0xc378, 0xd6ac, 0xc379, 0xc37a, 0xc37b, 0xb4e0, 0xc37c, /*0x00-0x07*/
-  0xc37d, 0xc2f6, 0xbcb9, 0xc37e, 0xc380, 0xebda, 0xebdb, 0xd4e0, /*0x08-0x0f*/
-  0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xc381, 0xb2b1, 0xc382, /*0x10-0x17*/
-  0xebe4, 0xc383, 0xbdc5, 0xc384, 0xc385, 0xc386, 0xebe2, 0xc387, /*0x18-0x1f*/
-  0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, /*0x20-0x27*/
-  0xc390, 0xc391, 0xc392, 0xc393, 0xebe3, 0xc394, 0xc395, 0xb8ac, /*0x28-0x2f*/
-  0xc396, 0xcdd1, 0xebe5, 0xc397, 0xc398, 0xc399, 0xebe1, 0xc39a, /*0x30-0x37*/
-  0xc1b3, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc6a2, 0xc3a0, /*0x38-0x3f*/
-  0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xccf3, 0xc446, /*0x40-0x47*/
-  0xebe6, 0xc447, 0xc0b0, 0xd2b8, 0xebe7, 0xc448, 0xc449, 0xc44a, /*0x48-0x4f*/
-  0xb8af, 0xb8ad, 0xc44b, 0xebe8, 0xc7bb, 0xcdf3, 0xc44c, 0xc44d, /*0x50-0x57*/
-  0xc44e, 0xebea, 0xebeb, 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, /*0x58-0x5f*/
-  0xebed, 0xc454, 0xc455, 0xc456, 0xc457, 0xd0c8, 0xc458, 0xebf2, /*0x60-0x67*/
-  0xc459, 0xebee, 0xc45a, 0xc45b, 0xc45c, 0xebf1, 0xc8f9, 0xc45d, /*0x68-0x6f*/
-  0xd1fc, 0xebec, 0xc45e, 0xc45f, 0xebe9, 0xc460, 0xc461, 0xc462, /*0x70-0x77*/
-  0xc463, 0xb8b9, 0xcfd9, 0xc4e5, 0xebef, 0xebf0, 0xccda, 0xcdc8, /*0x78-0x7f*/
-  0xb0f2, 0xc464, 0xebf6, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, /*0x80-0x87*/
-  0xebf5, 0xc46a, 0xb2b2, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xb8e0, /*0x88-0x8f*/
-  0xc46f, 0xebf7, 0xc470, 0xc471, 0xc472, 0xc473, 0xc474, 0xc475, /*0x90-0x97*/
-  0xb1ec, 0xc476, 0xc477, 0xccc5, 0xc4a4, 0xcfa5, 0xc478, 0xc479, /*0x98-0x9f*/
-  0xc47a, 0xc47b, 0xc47c, 0xebf9, 0xc47d, 0xc47e, 0xeca2, 0xc480, /*0xa0-0xa7*/
-  0xc5f2, 0xc481, 0xebfa, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, /*0xa8-0xaf*/
-  0xc487, 0xc488, 0xc489, 0xc9c5, 0xc48a, 0xc48b, 0xc48c, 0xc48d, /*0xb0-0xb7*/
-  0xc48e, 0xc48f, 0xe2df, 0xebfe, 0xc490, 0xc491, 0xc492, 0xc493, /*0xb8-0xbf*/
-  0xcdce, 0xeca1, 0xb1db, 0xd3b7, 0xc494, 0xc495, 0xd2dc, 0xc496, /*0xc0-0xc7*/
-  0xc497, 0xc498, 0xebfd, 0xc499, 0xebfb, 0xc49a, 0xc49b, 0xc49c, /*0xc8-0xcf*/
-  0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, 0xc542, 0xc543, /*0xd0-0xd7*/
-  0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a, 0xc54b, /*0xd8-0xdf*/
-  0xc54c, 0xc54d, 0xc54e, 0xb3bc, 0xc54f, 0xc550, 0xc551, 0xeab0, /*0xe0-0xe7*/
-  0xc552, 0xc553, 0xd7d4, 0xc554, 0xf4ab, 0xb3f4, 0xc555, 0xc556, /*0xe8-0xef*/
-  0xc557, 0xc558, 0xc559, 0xd6c1, 0xd6c2, 0xc55a, 0xc55b, 0xc55c, /*0xf0-0xf7*/
-  0xc55d, 0xc55e, 0xc55f, 0xd5e9, 0xbeca, 0xc560, 0xf4a7, 0xc561, /*0xf8-0xff*/
-  /* 0x8200 */
-  0xd2a8, 0xf4a8, 0xf4a9, 0xc562, 0xf4aa, 0xbecb, 0xd3df, 0xc563, /*0x00-0x07*/
-  0xc564, 0xc565, 0xc566, 0xc567, 0xc9e0, 0xc9e1, 0xc568, 0xc569, /*0x08-0x0f*/
-  0xf3c2, 0xc56a, 0xcae6, 0xc56b, 0xccf2, 0xc56c, 0xc56d, 0xc56e, /*0x10-0x17*/
-  0xc56f, 0xc570, 0xc571, 0xe2b6, 0xcbb4, 0xc572, 0xcee8, 0xd6db, /*0x18-0x1f*/
-  0xc573, 0xf4ad, 0xf4ae, 0xf4af, 0xc574, 0xc575, 0xc576, 0xc577, /*0x20-0x27*/
-  0xf4b2, 0xc578, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xc579, 0xf4b1, /*0x28-0x2f*/
-  0xbda2, 0xb2d5, 0xc57a, 0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, /*0x30-0x37*/
-  0xf4b4, 0xb4ac, 0xc57b, 0xf4b5, 0xc57c, 0xc57d, 0xf4b8, 0xc57e, /*0x38-0x3f*/
-  0xc580, 0xc581, 0xc582, 0xc583, 0xf4b9, 0xc584, 0xc585, 0xcda7, /*0x40-0x47*/
-  0xc586, 0xf4ba, 0xc587, 0xf4bb, 0xc588, 0xc589, 0xc58a, 0xf4bc, /*0x48-0x4f*/
-  0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, /*0x50-0x57*/
-  0xcbd2, 0xc593, 0xf4bd, 0xc594, 0xc595, 0xc596, 0xc597, 0xf4be, /*0x58-0x5f*/
-  0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, /*0x60-0x67*/
-  0xf4bf, 0xc5a0, 0xc640, 0xc641, 0xc642, 0xc643, 0xf4de, 0xc1bc, /*0x68-0x6f*/
-  0xbce8, 0xc644, 0xc9ab, 0xd1de, 0xe5f5, 0xc645, 0xc646, 0xc647, /*0x70-0x77*/
-  0xc648, 0xdcb3, 0xd2d5, 0xc649, 0xc64a, 0xdcb4, 0xb0ac, 0xdcb5, /*0x78-0x7f*/
-  0xc64b, 0xc64c, 0xbdda, 0xc64d, 0xdcb9, 0xc64e, 0xc64f, 0xc650, /*0x80-0x87*/
-  0xd8c2, 0xc651, 0xdcb7, 0xd3f3, 0xc652, 0xc9d6, 0xdcba, 0xdcb6, /*0x88-0x8f*/
-  0xc653, 0xdcbb, 0xc3a2, 0xc654, 0xc655, 0xc656, 0xc657, 0xdcbc, /*0x90-0x97*/
-  0xdcc5, 0xdcbd, 0xc658, 0xc659, 0xcedf, 0xd6a5, 0xc65a, 0xdccf, /*0x98-0x9f*/
-  0xc65b, 0xdccd, 0xc65c, 0xc65d, 0xdcd2, 0xbde6, 0xc2ab, 0xc65e, /*0xa0-0xa7*/
-  0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7, 0xd0be, /*0xa8-0xaf*/
-  0xdcc1, 0xbba8, 0xc65f, 0xb7bc, 0xdccc, 0xc660, 0xc661, 0xdcc6, /*0xb0-0xb7*/
-  0xdcbf, 0xc7db, 0xc662, 0xc663, 0xc664, 0xd1bf, 0xdcc0, 0xc665, /*0xb8-0xbf*/
-  0xc666, 0xdcca, 0xc667, 0xc668, 0xdcd0, 0xc669, 0xc66a, 0xcead, /*0xc0-0xc7*/
-  0xdcc2, 0xc66b, 0xdcc3, 0xdcc8, 0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, /*0xc8-0xcf*/
-  0xc66c, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6, 0xdce6, 0xc66d, 0xc3e7, /*0xd0-0xd7*/
-  0xdcdc, 0xc66e, 0xc66f, 0xbfc1, 0xdcd9, 0xc670, 0xb0fa, 0xb9b6, /*0xd8-0xdf*/
-  0xdce5, 0xdcd3, 0xc671, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc672, /*0xe0-0xe7*/
-  0xc673, 0xc674, 0xc675, 0xc9bb, 0xc676, 0xc677, 0xc678, 0xb1bd, /*0xe8-0xef*/
-  0xc679, 0xd3a2, 0xc67a, 0xc67b, 0xdcda, 0xc67c, 0xc67d, 0xdcd5, /*0xf0-0xf7*/
-  0xc67e, 0xc6bb, 0xc680, 0xdcde, 0xc681, 0xc682, 0xc683, 0xc684, /*0xf8-0xff*/
-  /* 0x8300 */
-  0xc685, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1, 0xc3a9, 0xdce2, 0xdcd8, /*0x00-0x07*/
-  0xdceb, 0xdcd4, 0xc686, 0xc687, 0xdcdd, 0xc688, 0xbea5, 0xdcd7, /*0x08-0x0f*/
-  0xc689, 0xdce0, 0xc68a, 0xc68b, 0xdce3, 0xdce4, 0xc68c, 0xdcf8, /*0x10-0x17*/
-  0xc68d, 0xc68e, 0xdce1, 0xdda2, 0xdce7, 0xc68f, 0xc690, 0xc691, /*0x18-0x1f*/
-  0xc692, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xbceb, /*0x20-0x27*/
-  0xb4c4, 0xc699, 0xc69a, 0xc3a3, 0xb2e7, 0xdcfa, 0xc69b, 0xdcf2, /*0x28-0x2f*/
-  0xc69c, 0xdcef, 0xc69d, 0xdcfc, 0xdcee, 0xd2f0, 0xb2e8, 0xc69e, /*0x30-0x37*/
-  0xc8d7, 0xc8e3, 0xdcfb, 0xc69f, 0xdced, 0xc6a0, 0xc740, 0xc741, /*0x38-0x3f*/
-  0xdcf7, 0xc742, 0xc743, 0xdcf5, 0xc744, 0xc745, 0xbea3, 0xdcf4, /*0x40-0x47*/
-  0xc746, 0xb2dd, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xdcf3, /*0x48-0x4f*/
-  0xbcf6, 0xdce8, 0xbbc4, 0xc74c, 0xc0f3, 0xc74d, 0xc74e, 0xc74f, /*0x50-0x57*/
-  0xc750, 0xc751, 0xbcd4, 0xdce9, 0xdcea, 0xc752, 0xdcf1, 0xdcf6, /*0x58-0x5f*/
-  0xdcf9, 0xb5b4, 0xc753, 0xc8d9, 0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, /*0x60-0x67*/
-  0xdda1, 0xdda3, 0xdda5, 0xd2f1, 0xdda4, 0xdda6, 0xdda7, 0xd2a9, /*0x68-0x6f*/
-  0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xbac9, /*0x70-0x77*/
-  0xdda9, 0xc75b, 0xc75c, 0xddb6, 0xddb1, 0xddb4, 0xc75d, 0xc75e, /*0x78-0x7f*/
-  0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xddb0, 0xc6ce, 0xc764, /*0x80-0x87*/
-  0xc765, 0xc0f2, 0xc766, 0xc767, 0xc768, 0xc769, 0xc9af, 0xc76a, /*0x88-0x8f*/
-  0xc76b, 0xc76c, 0xdcec, 0xddae, 0xc76d, 0xc76e, 0xc76f, 0xc770, /*0x90-0x97*/
-  0xddb7, 0xc771, 0xc772, 0xdcf0, 0xddaf, 0xc773, 0xddb8, 0xc774, /*0x98-0x9f*/
-  0xddac, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, /*0xa0-0xa7*/
-  0xddb9, 0xddb3, 0xddad, 0xc4aa, 0xc77c, 0xc77d, 0xc77e, 0xc780, /*0xa8-0xaf*/
-  0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xc781, 0xddb2, 0xbbf1, /*0xb0-0xb7*/
-  0xddb5, 0xd3a8, 0xddba, 0xc782, 0xddbb, 0xc3a7, 0xc783, 0xc784, /*0xb8-0xbf*/
-  0xddd2, 0xddbc, 0xc785, 0xc786, 0xc787, 0xddd1, 0xc788, 0xb9bd, /*0xc0-0xc7*/
-  0xc789, 0xc78a, 0xbed5, 0xc78b, 0xbefa, 0xc78c, 0xc78d, 0xbaca, /*0xc8-0xcf*/
-  0xc78e, 0xc78f, 0xc790, 0xc791, 0xddca, 0xc792, 0xddc5, 0xc793, /*0xd0-0xd7*/
-  0xddbf, 0xc794, 0xc795, 0xc796, 0xb2cb, 0xddc3, 0xc797, 0xddcb, /*0xd8-0xdf*/
-  0xb2a4, 0xddd5, 0xc798, 0xc799, 0xc79a, 0xddbe, 0xc79b, 0xc79c, /*0xe0-0xe7*/
-  0xc79d, 0xc6d0, 0xddd0, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, /*0xe8-0xef*/
-  0xddd4, 0xc1e2, 0xb7c6, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, /*0xf0-0xf7*/
-  0xddce, 0xddcf, 0xc847, 0xc848, 0xc849, 0xddc4, 0xc84a, 0xc84b, /*0xf8-0xff*/
-  /* 0x8400 */
-  0xc84c, 0xddbd, 0xc84d, 0xddcd, 0xccd1, 0xc84e, 0xddc9, 0xc84f, /*0x00-0x07*/
-  0xc850, 0xc851, 0xc852, 0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, /*0x08-0x0f*/
-  0xc853, 0xddc8, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, /*0x10-0x17*/
-  0xddc1, 0xc85a, 0xc85b, 0xc85c, 0xddc6, 0xc2dc, 0xc85d, 0xc85e, /*0x18-0x1f*/
-  0xc85f, 0xc860, 0xc861, 0xc862, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, /*0x20-0x27*/
-  0xc8f8, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, /*0x28-0x2f*/
-  0xc86a, 0xdde6, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, /*0x30-0x37*/
-  0xddc7, 0xc871, 0xc872, 0xc873, 0xdde0, 0xc2e4, 0xc874, 0xc875, /*0x38-0x3f*/
-  0xc876, 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xdde1, 0xc87c, /*0x40-0x47*/
-  0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885, /*0x48-0x4f*/
-  0xc886, 0xddd7, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0xd6f8, /*0x50-0x57*/
-  0xc88c, 0xddd9, 0xddd8, 0xb8f0, 0xddd6, 0xc88d, 0xc88e, 0xc88f, /*0x58-0x5f*/
-  0xc890, 0xc6cf, 0xc891, 0xb6ad, 0xc892, 0xc893, 0xc894, 0xc895, /*0x60-0x67*/
-  0xc896, 0xdde2, 0xc897, 0xbaf9, 0xd4e1, 0xdde7, 0xc898, 0xc899, /*0x68-0x6f*/
-  0xc89a, 0xb4d0, 0xc89b, 0xddda, 0xc89c, 0xbffb, 0xdde3, 0xc89d, /*0x70-0x77*/
-  0xdddf, 0xc89e, 0xdddd, 0xc89f, 0xc8a0, 0xc940, 0xc941, 0xc942, /*0x78-0x7f*/
-  0xc943, 0xc944, 0xb5d9, 0xc945, 0xc946, 0xc947, 0xc948, 0xdddb, /*0x80-0x87*/
-  0xdddc, 0xddde, 0xc949, 0xbdaf, 0xdde4, 0xc94a, 0xdde5, 0xc94b, /*0x88-0x8f*/
-  0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, 0xc952, 0xddf5, /*0x90-0x97*/
-  0xc953, 0xc3c9, 0xc954, 0xc955, 0xcbe2, 0xc956, 0xc957, 0xc958, /*0x98-0x9f*/
-  0xc959, 0xddf2, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, /*0xa0-0xa7*/
-  0xc960, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xd8e1, /*0xa8-0xaf*/
-  0xc967, 0xc968, 0xc6d1, 0xc969, 0xddf4, 0xc96a, 0xc96b, 0xc96c, /*0xb0-0xb7*/
-  0xd5f4, 0xddf3, 0xddf0, 0xc96d, 0xc96e, 0xddec, 0xc96f, 0xddef, /*0xb8-0xbf*/
-  0xc970, 0xdde8, 0xc971, 0xc972, 0xd0ee, 0xc973, 0xc974, 0xc975, /*0xc0-0xc7*/
-  0xc976, 0xc8d8, 0xddee, 0xc977, 0xc978, 0xdde9, 0xc979, 0xc97a, /*0xc8-0xcf*/
-  0xddea, 0xcbf2, 0xc97b, 0xdded, 0xc97c, 0xc97d, 0xb1cd, 0xc97e, /*0xd0-0xd7*/
-  0xc980, 0xc981, 0xc982, 0xc983, 0xc984, 0xc0b6, 0xc985, 0xbcbb, /*0xd8-0xdf*/
-  0xddf1, 0xc986, 0xc987, 0xddf7, 0xc988, 0xddf6, 0xddeb, 0xc989, /*0xe0-0xe7*/
-  0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc5ee, 0xc98e, 0xc98f, 0xc990, /*0xe8-0xef*/
-  0xddfb, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, /*0xf0-0xf7*/
-  0xc998, 0xc999, 0xc99a, 0xc99b, 0xdea4, 0xc99c, 0xc99d, 0xdea3, /*0xf8-0xff*/
-  /* 0x8500 */
-  0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, /*0x00-0x07*/
-  0xca45, 0xca46, 0xca47, 0xca48, 0xddf8, 0xca49, 0xca4a, 0xca4b, /*0x08-0x0f*/
-  0xca4c, 0xc3ef, 0xca4d, 0xc2fb, 0xca4e, 0xca4f, 0xca50, 0xd5e1, /*0x10-0x17*/
-  0xca51, 0xca52, 0xceb5, 0xca53, 0xca54, 0xca55, 0xca56, 0xddfd, /*0x18-0x1f*/
-  0xca57, 0xb2cc, 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d, /*0x20-0x27*/
-  0xca5e, 0xca5f, 0xca60, 0xc4e8, 0xcadf, 0xca61, 0xca62, 0xca63, /*0x28-0x2f*/
-  0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, 0xca6a, 0xc7be, /*0x30-0x37*/
-  0xddfa, 0xddfc, 0xddfe, 0xdea2, 0xb0aa, 0xb1ce, 0xca6b, 0xca6c, /*0x38-0x3f*/
-  0xca6d, 0xca6e, 0xca6f, 0xdeac, 0xca70, 0xca71, 0xca72, 0xca73, /*0x40-0x47*/
-  0xdea6, 0xbdb6, 0xc8ef, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, /*0x48-0x4f*/
-  0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xdea1, 0xca80, /*0x50-0x57*/
-  0xca81, 0xdea5, 0xca82, 0xca83, 0xca84, 0xca85, 0xdea9, 0xca86, /*0x58-0x5f*/
-  0xca87, 0xca88, 0xca89, 0xca8a, 0xdea8, 0xca8b, 0xca8c, 0xca8d, /*0x60-0x67*/
-  0xdea7, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, /*0x68-0x6f*/
-  0xca95, 0xca96, 0xdead, 0xca97, 0xd4cc, 0xca98, 0xca99, 0xca9a, /*0x70-0x77*/
-  0xca9b, 0xdeb3, 0xdeaa, 0xdeae, 0xca9c, 0xca9d, 0xc0d9, 0xca9e, /*0x78-0x7f*/
-  0xca9f, 0xcaa0, 0xcb40, 0xcb41, 0xb1a1, 0xdeb6, 0xcb42, 0xdeb1, /*0x80-0x87*/
-  0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, 0xdeb2, /*0x88-0x8f*/
-  0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, /*0x90-0x97*/
-  0xcb52, 0xcb53, 0xcb54, 0xd1a6, 0xdeb5, 0xcb55, 0xcb56, 0xcb57, /*0x98-0x9f*/
-  0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xdeaf, 0xcb5c, 0xcb5d, 0xcb5e, /*0xa0-0xa7*/
-  0xdeb0, 0xcb5f, 0xd0bd, 0xcb60, 0xcb61, 0xcb62, 0xdeb4, 0xcaed, /*0xa8-0xaf*/
-  0xdeb9, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xdeb8, /*0xb0-0xb7*/
-  0xcb69, 0xdeb7, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, /*0xb8-0xbf*/
-  0xcb70, 0xdebb, 0xcb71, 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, /*0xc0-0xc7*/
-  0xcb77, 0xbde5, 0xcb78, 0xcb79, 0xcb7a, 0xcb7b, 0xcb7c, 0xb2d8, /*0xc8-0xcf*/
-  0xc3ea, 0xcb7d, 0xcb7e, 0xdeba, 0xcb80, 0xc5ba, 0xcb81, 0xcb82, /*0xd0-0xd7*/
-  0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xdebc, 0xcb87, 0xcb88, 0xcb89, /*0xd8-0xdf*/
-  0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xccd9, 0xcb8e, 0xcb8f, 0xcb90, /*0xe0-0xe7*/
-  0xcb91, 0xb7aa, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, /*0xe8-0xef*/
-  0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, /*0xf0-0xf7*/
-  0xcba0, 0xcc40, 0xcc41, 0xd4e5, 0xcc42, 0xcc43, 0xcc44, 0xdebd, /*0xf8-0xff*/
-  /* 0x8600 */
-  0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xdebf, 0xcc4a, 0xcc4b, /*0x00-0x07*/
-  0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52, 0xcc53, /*0x08-0x0f*/
-  0xcc54, 0xc4a2, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xdec1, 0xcc59, /*0x10-0x17*/
-  0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, /*0x18-0x1f*/
-  0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xdebe, /*0x20-0x27*/
-  0xcc69, 0xdec0, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, /*0x28-0x2f*/
-  0xcc70, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, /*0x30-0x37*/
-  0xd5ba, 0xcc78, 0xcc79, 0xcc7a, 0xdec2, 0xcc7b, 0xcc7c, 0xcc7d, /*0x38-0x3f*/
-  0xcc7e, 0xcc80, 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, /*0x40-0x47*/
-  0xcc87, 0xcc88, 0xcc89, 0xcc8a, 0xcc8b, 0xf2ae, 0xbba2, 0xc2b2, /*0x48-0x4f*/
-  0xc5b0, 0xc2c7, 0xcc8c, 0xcc8d, 0xf2af, 0xcc8e, 0xcc8f, 0xcc90, /*0x50-0x57*/
-  0xcc91, 0xcc92, 0xd0e9, 0xcc93, 0xcc94, 0xcc95, 0xd3dd, 0xcc96, /*0x58-0x5f*/
-  0xcc97, 0xcc98, 0xebbd, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, /*0x60-0x67*/
-  0xcc9e, 0xcc9f, 0xcca0, 0xb3e6, 0xf2b0, 0xcd40, 0xf2b1, 0xcd41, /*0x68-0x6f*/
-  0xcd42, 0xcaad, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, /*0x70-0x77*/
-  0xcd49, 0xbae7, 0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, /*0x78-0x7f*/
-  0xcab4, 0xd2cf, 0xc2ec, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, /*0x80-0x87*/
-  0xcd4f, 0xcd50, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xcd51, 0xcd52, /*0x88-0x8f*/
-  0xcd53, 0xcd54, 0xcd55, 0xf2be, 0xcd56, 0xb2cf, 0xcd57, 0xcd58, /*0x90-0x97*/
-  0xcd59, 0xcd5a, 0xcd5b, 0xcd5c, 0xd1c1, 0xf2ba, 0xcd5d, 0xcd5e, /*0x98-0x9f*/
-  0xcd5f, 0xcd60, 0xcd61, 0xf2bc, 0xd4e9, 0xcd62, 0xcd63, 0xf2bb, /*0xa0-0xa7*/
-  0xf2b6, 0xf2bf, 0xf2bd, 0xcd64, 0xf2b9, 0xcd65, 0xcd66, 0xf2c7, /*0xa8-0xaf*/
-  0xf2c4, 0xf2c6, 0xcd67, 0xcd68, 0xf2ca, 0xf2c2, 0xf2c0, 0xcd69, /*0xb0-0xb7*/
-  0xcd6a, 0xcd6b, 0xf2c5, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, /*0xb8-0xbf*/
-  0xd6fb, 0xcd71, 0xcd72, 0xcd73, 0xf2c1, 0xcd74, 0xc7f9, 0xc9df, /*0xc0-0xc7*/
-  0xcd75, 0xf2c8, 0xb9c6, 0xb5b0, 0xcd76, 0xcd77, 0xf2c3, 0xf2c9, /*0xc8-0xcf*/
-  0xf2d0, 0xf2d6, 0xcd78, 0xcd79, 0xbbd7, 0xcd7a, 0xcd7b, 0xcd7c, /*0xd0-0xd7*/
-  0xf2d5, 0xcddc, 0xcd7d, 0xd6eb, 0xcd7e, 0xcd80, 0xf2d2, 0xf2d4, /*0xd8-0xdf*/
-  0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xb8f2, 0xcd85, 0xcd86, 0xcd87, /*0xe0-0xe7*/
-  0xcd88, 0xf2cb, 0xcd89, 0xcd8a, 0xcd8b, 0xf2ce, 0xc2f9, 0xcd8c, /*0xe8-0xef*/
-  0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf, 0xf2d3, 0xcd8d, 0xcd8e, 0xcd8f, /*0xf0-0xf7*/
-  0xf2d9, 0xd3bc, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0xb6ea, 0xcd94, /*0xf8-0xff*/
-  /* 0x8700 */
-  0xcaf1, 0xcd95, 0xb7e4, 0xf2d7, 0xcd96, 0xcd97, 0xcd98, 0xf2d8, /*0x00-0x07*/
-  0xf2da, 0xf2dd, 0xf2db, 0xcd99, 0xcd9a, 0xf2dc, 0xcd9b, 0xcd9c, /*0x08-0x0f*/
-  0xcd9d, 0xcd9e, 0xd1d1, 0xf2d1, 0xcd9f, 0xcdc9, 0xcda0, 0xcecf, /*0x10-0x17*/
-  0xd6a9, 0xce40, 0xf2e3, 0xce41, 0xc3db, 0xce42, 0xf2e0, 0xce43, /*0x18-0x1f*/
-  0xce44, 0xc0af, 0xf2ec, 0xf2de, 0xce45, 0xf2e1, 0xce46, 0xce47, /*0x20-0x27*/
-  0xce48, 0xf2e8, 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xf2e2, 0xce4d, /*0x28-0x2f*/
-  0xce4e, 0xf2e7, 0xce4f, 0xce50, 0xf2e6, 0xce51, 0xce52, 0xf2e9, /*0x30-0x37*/
-  0xce53, 0xce54, 0xce55, 0xf2df, 0xce56, 0xce57, 0xf2e4, 0xf2ea, /*0x38-0x3f*/
-  0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xd3ac, /*0x40-0x47*/
-  0xf2e5, 0xb2f5, 0xce5f, 0xce60, 0xf2f2, 0xce61, 0xd0ab, 0xce62, /*0x48-0x4f*/
-  0xce63, 0xce64, 0xce65, 0xf2f5, 0xce66, 0xce67, 0xce68, 0xbbc8, /*0x50-0x57*/
-  0xce69, 0xf2f9, 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, /*0x58-0x5f*/
-  0xf2f0, 0xce70, 0xce71, 0xf2f6, 0xf2f8, 0xf2fa, 0xce72, 0xce73, /*0x60-0x67*/
-  0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xf2f3, 0xce7a, /*0x68-0x6f*/
-  0xf2f1, 0xce7b, 0xce7c, 0xce7d, 0xbafb, 0xce7e, 0xb5fb, 0xce80, /*0x70-0x77*/
-  0xce81, 0xce82, 0xce83, 0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xce84, /*0x78-0x7f*/
-  0xce85, 0xce86, 0xf2eb, 0xf3a6, 0xce87, 0xf3a3, 0xce88, 0xce89, /*0x80-0x87*/
-  0xf3a2, 0xce8a, 0xce8b, 0xf2f4, 0xce8c, 0xc8da, 0xce8d, 0xce8e, /*0x88-0x8f*/
-  0xce8f, 0xce90, 0xce91, 0xf2fb, 0xce92, 0xce93, 0xce94, 0xf3a5, /*0x90-0x97*/
-  0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xc3f8, /*0x98-0x9f*/
-  0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, 0xcf42, /*0xa0-0xa7*/
-  0xf2fd, 0xcf43, 0xcf44, 0xf3a7, 0xf3a9, 0xf3a4, 0xcf45, 0xf2fc, /*0xa8-0xaf*/
-  0xcf46, 0xcf47, 0xcf48, 0xf3ab, 0xcf49, 0xf3aa, 0xcf4a, 0xcf4b, /*0xb0-0xb7*/
-  0xcf4c, 0xcf4d, 0xc2dd, 0xcf4e, 0xcf4f, 0xf3ae, 0xcf50, 0xcf51, /*0xb8-0xbf*/
-  0xf3b0, 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xf3a1, 0xcf57, /*0xc0-0xc7*/
-  0xcf58, 0xcf59, 0xf3b1, 0xf3ac, 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, /*0xc8-0xcf*/
-  0xcf5e, 0xf3af, 0xf2fe, 0xf3ad, 0xcf5f, 0xcf60, 0xcf61, 0xcf62, /*0xd0-0xd7*/
-  0xcf63, 0xcf64, 0xcf65, 0xf3b2, 0xcf66, 0xcf67, 0xcf68, 0xcf69, /*0xd8-0xdf*/
-  0xf3b4, 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xf3a8, 0xcf6e, 0xcf6f, /*0xe0-0xe7*/
-  0xcf70, 0xcf71, 0xf3b3, 0xcf72, 0xcf73, 0xcf74, 0xf3b5, 0xcf75, /*0xe8-0xef*/
-  0xcf76, 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, /*0xf0-0xf7*/
-  0xcf7e, 0xd0b7, 0xcf80, 0xcf81, 0xcf82, 0xcf83, 0xf3b8, 0xcf84, /*0xf8-0xff*/
-  /* 0x8800 */
-  0xcf85, 0xcf86, 0xcf87, 0xd9f9, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, /*0x00-0x07*/
-  0xcf8c, 0xcf8d, 0xf3b9, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, /*0x08-0x0f*/
-  0xcf93, 0xcf94, 0xcf95, 0xf3b7, 0xcf96, 0xc8e4, 0xf3b6, 0xcf97, /*0x10-0x17*/
-  0xcf98, 0xcf99, 0xcf9a, 0xf3ba, 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, /*0x18-0x1f*/
-  0xcf9f, 0xf3bb, 0xb4c0, 0xcfa0, 0xd040, 0xd041, 0xd042, 0xd043, /*0x20-0x27*/
-  0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, 0xd04a, 0xd04b, /*0x28-0x2f*/
-  0xd04c, 0xd04d, 0xeec3, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd052, /*0x30-0x37*/
-  0xd053, 0xf3bc, 0xd054, 0xd055, 0xf3bd, 0xd056, 0xd057, 0xd058, /*0x38-0x3f*/
-  0xd1aa, 0xd059, 0xd05a, 0xd05b, 0xf4ac, 0xd0c6, 0xd05c, 0xd05d, /*0x40-0x47*/
-  0xd05e, 0xd05f, 0xd060, 0xd061, 0xd0d0, 0xd1dc, 0xd062, 0xd063, /*0x48-0x4f*/
-  0xd064, 0xd065, 0xd066, 0xd067, 0xcfce, 0xd068, 0xd069, 0xbdd6, /*0x50-0x57*/
-  0xd06a, 0xd1c3, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, /*0x58-0x5f*/
-  0xd071, 0xbae2, 0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xd072, 0xd073, /*0x60-0x67*/
-  0xb1ed, 0xf1c3, 0xd074, 0xc9c0, 0xb3c4, 0xd075, 0xd9f2, 0xd076, /*0x68-0x6f*/
-  0xcba5, 0xd077, 0xf1c4, 0xd078, 0xd079, 0xd07a, 0xd07b, 0xd6d4, /*0x70-0x77*/
-  0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xf1c5, 0xf4c0, 0xf1c6, /*0x78-0x7f*/
-  0xd082, 0xd4ac, 0xf1c7, 0xd083, 0xb0c0, 0xf4c1, 0xd084, 0xd085, /*0x80-0x87*/
-  0xf4c2, 0xd086, 0xd087, 0xb4fc, 0xd088, 0xc5db, 0xd089, 0xd08a, /*0x88-0x8f*/
-  0xd08b, 0xd08c, 0xccbb, 0xd08d, 0xd08e, 0xd08f, 0xd0e4, 0xd090, /*0x90-0x97*/
-  0xd091, 0xd092, 0xd093, 0xd094, 0xcde0, 0xd095, 0xd096, 0xd097, /*0x98-0x9f*/
-  0xd098, 0xd099, 0xf1c8, 0xd09a, 0xd9f3, 0xd09b, 0xd09c, 0xd09d, /*0xa0-0xa7*/
-  0xd09e, 0xd09f, 0xd0a0, 0xb1bb, 0xd140, 0xcfae, 0xd141, 0xd142, /*0xa8-0xaf*/
-  0xd143, 0xb8a4, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xf1ca, /*0xb0-0xb7*/
-  0xd149, 0xd14a, 0xd14b, 0xd14c, 0xf1cb, 0xd14d, 0xd14e, 0xd14f, /*0xb8-0xbf*/
-  0xd150, 0xb2c3, 0xc1d1, 0xd151, 0xd152, 0xd7b0, 0xf1c9, 0xd153, /*0xc0-0xc7*/
-  0xd154, 0xf1cc, 0xd155, 0xd156, 0xd157, 0xd158, 0xf1ce, 0xd159, /*0xc8-0xcf*/
-  0xd15a, 0xd15b, 0xd9f6, 0xd15c, 0xd2e1, 0xd4a3, 0xd15d, 0xd15e, /*0xd0-0xd7*/
-  0xf4c3, 0xc8b9, 0xd15f, 0xd160, 0xd161, 0xd162, 0xd163, 0xf4c4, /*0xd8-0xdf*/
-  0xd164, 0xd165, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0, 0xd166, 0xd167, /*0xe0-0xe7*/
-  0xf1d4, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, /*0xe8-0xef*/
-  0xf1d6, 0xf1d1, 0xd16f, 0xc9d1, 0xc5e1, 0xd170, 0xd171, 0xd172, /*0xf0-0xf7*/
-  0xc2e3, 0xb9fc, 0xd173, 0xd174, 0xf1d3, 0xd175, 0xf1d5, 0xd176, /*0xf8-0xff*/
-  /* 0x8900 */
-  0xd177, 0xd178, 0xb9d3, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d, /*0x00-0x07*/
-  0xd17e, 0xd180, 0xf1db, 0xd181, 0xd182, 0xd183, 0xd184, 0xd185, /*0x08-0x0f*/
-  0xbad6, 0xd186, 0xb0fd, 0xf1d9, 0xd187, 0xd188, 0xd189, 0xd18a, /*0x10-0x17*/
-  0xd18b, 0xf1d8, 0xf1d2, 0xf1da, 0xd18c, 0xd18d, 0xd18e, 0xd18f, /*0x18-0x1f*/
-  0xd190, 0xf1d7, 0xd191, 0xd192, 0xd193, 0xc8ec, 0xd194, 0xd195, /*0x20-0x27*/
-  0xd196, 0xd197, 0xcdca, 0xf1dd, 0xd198, 0xd199, 0xd19a, 0xd19b, /*0x28-0x2f*/
-  0xe5bd, 0xd19c, 0xd19d, 0xd19e, 0xf1dc, 0xd19f, 0xf1de, 0xd1a0, /*0x30-0x37*/
-  0xd240, 0xd241, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, /*0x38-0x3f*/
-  0xd248, 0xf1df, 0xd249, 0xd24a, 0xcfe5, 0xd24b, 0xd24c, 0xd24d, /*0x40-0x47*/
-  0xd24e, 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, /*0x48-0x4f*/
-  0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d, /*0x50-0x57*/
-  0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0xf4c5, 0xbdf3, /*0x58-0x5f*/
-  0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xf1e0, 0xd26a, /*0x60-0x67*/
-  0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272, /*0x68-0x6f*/
-  0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, 0xd27a, /*0x70-0x77*/
-  0xd27b, 0xd27c, 0xd27d, 0xf1e1, 0xd27e, 0xd280, 0xd281, 0xcef7, /*0x78-0x7f*/
-  0xd282, 0xd2aa, 0xd283, 0xf1fb, 0xd284, 0xd285, 0xb8b2, 0xd286, /*0x80-0x87*/
-  0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e, /*0x88-0x8f*/
-  0xd28f, 0xd290, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295, 0xd296, /*0x90-0x97*/
-  0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d, 0xd29e, /*0x98-0x9f*/
-  0xd29f, 0xd2a0, 0xd340, 0xd341, 0xd342, 0xd343, 0xd344, 0xd345, /*0xa0-0xa7*/
-  0xd346, 0xd347, 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c, 0xd34d, /*0xa8-0xaf*/
-  0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, /*0xb0-0xb7*/
-  0xd356, 0xd357, 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, /*0xb8-0xbf*/
-  0xd35e, 0xbcfb, 0xb9db, 0xd35f, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8, /*0xc0-0xc7*/
-  0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xd360, 0xeaec, 0xeaed, /*0xc8-0xcf*/
-  0xeaee, 0xeaef, 0xbdc7, 0xd361, 0xd362, 0xd363, 0xf5fb, 0xd364, /*0xd0-0xd7*/
-  0xd365, 0xd366, 0xf5fd, 0xd367, 0xf5fe, 0xd368, 0xf5fc, 0xd369, /*0xd8-0xdf*/
-  0xd36a, 0xd36b, 0xd36c, 0xbde2, 0xd36d, 0xf6a1, 0xb4a5, 0xd36e, /*0xe0-0xe7*/
-  0xd36f, 0xd370, 0xd371, 0xf6a2, 0xd372, 0xd373, 0xd374, 0xf6a3, /*0xe8-0xef*/
-  0xd375, 0xd376, 0xd377, 0xecb2, 0xd378, 0xd379, 0xd37a, 0xd37b, /*0xf0-0xf7*/
-  0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, 0xd383, 0xd384, /*0xf8-0xff*/
-  /* 0x8a00 */
-  0xd1d4, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, 0xd9ea, /*0x00-0x07*/
-  0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, /*0x08-0x0f*/
-  0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, /*0x10-0x17*/
-  0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, /*0x18-0x1f*/
-  0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, /*0x20-0x27*/
-  0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, /*0x28-0x2f*/
-  0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, /*0x30-0x37*/
-  0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xf6a4, 0xd460, /*0x38-0x3f*/
-  0xd461, 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, /*0x40-0x47*/
-  0xeeba, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, /*0x48-0x4f*/
-  0xd470, 0xd471, 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, /*0x50-0x57*/
-  0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, /*0x58-0x5f*/
-  0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, /*0x60-0x67*/
-  0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, /*0x68-0x6f*/
-  0xd491, 0xd492, 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, /*0x70-0x77*/
-  0xd499, 0xd5b2, 0xd49a, 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, /*0x78-0x7f*/
-  0xd4a0, 0xd540, 0xd541, 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, /*0x80-0x87*/
-  0xd547, 0xd3fe, 0xccdc, 0xd548, 0xd549, 0xd54a, 0xd54b, 0xd54c, /*0x88-0x8f*/
-  0xd54d, 0xd54e, 0xd54f, 0xcac4, 0xd550, 0xd551, 0xd552, 0xd553, /*0x90-0x97*/
-  0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, 0xd55a, 0xd55b, /*0x98-0x9f*/
-  0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, /*0xa0-0xa7*/
-  0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, 0xd56a, 0xd56b, /*0xa8-0xaf*/
-  0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, /*0xb0-0xb7*/
-  0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a, 0xd57b, /*0xb8-0xbf*/
-  0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, 0xd583, 0xd584, /*0xc0-0xc7*/
-  0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, 0xd58b, 0xd58c, /*0xc8-0xcf*/
-  0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, /*0xd0-0xd7*/
-  0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, /*0xd8-0xdf*/
-  0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, 0xd642, 0xd643, /*0xe0-0xe7*/
-  0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, 0xd64a, 0xd64b, /*0xe8-0xef*/
-  0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, /*0xf0-0xf7*/
-  0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a, 0xd65b, /*0xf8-0xff*/
-  /* 0x8b00 */
-  0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662, 0xe5c0, /*0x00-0x07*/
-  0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, 0xd66a, /*0x08-0x0f*/
-  0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, 0xd672, /*0x10-0x17*/
-  0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, 0xd67a, /*0x18-0x1f*/
-  0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xf6a5, 0xd682, /*0x20-0x27*/
-  0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, /*0x28-0x2f*/
-  0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, /*0x30-0x37*/
-  0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, /*0x38-0x3f*/
-  0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, /*0x40-0x47*/
-  0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, /*0x48-0x4f*/
-  0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, /*0x50-0x57*/
-  0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, /*0x58-0x5f*/
-  0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xbeaf, 0xd760, /*0x60-0x67*/
-  0xd761, 0xd762, 0xd763, 0xd764, 0xc6a9, 0xd765, 0xd766, 0xd767, /*0x68-0x6f*/
-  0xd768, 0xd769, 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, /*0x70-0x77*/
-  0xd770, 0xd771, 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, /*0x78-0x7f*/
-  0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, /*0x80-0x87*/
-  0xd781, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, /*0x88-0x8f*/
-  0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, /*0x90-0x97*/
-  0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, /*0x98-0x9f*/
-  0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7, /*0xa0-0xa7*/
-  0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd799, 0xd1b5, 0xd2e9, 0xd1b6, /*0xa8-0xaf*/
-  0xbcc7, 0xd79a, 0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, /*0xb0-0xb7*/
-  0xd0ed, 0xb6ef, 0xc2db, 0xd79b, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, /*0xb8-0xbf*/
-  0xbef7, 0xd6a4, 0xdaac, 0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd79c, /*0xc0-0xc7*/
-  0xd5a9, 0xcbdf, 0xd5ef, 0xdaae, 0xd6df, 0xb4ca, 0xdab0, 0xdaaf, /*0xc8-0xcf*/
-  0xd79d, 0xd2eb, 0xdab1, 0xdab2, 0xdab3, 0xcad4, 0xdab4, 0xcaab, /*0xd0-0xd7*/
-  0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7, 0xbbb0, 0xb5ae, 0xdab8, /*0xd8-0xdf*/
-  0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba, 0xb8c3, 0xcfea, 0xb2ef, /*0xe0-0xe7*/
-  0xdabb, 0xdabc, 0xd79e, 0xbdeb, 0xcedc, 0xd3ef, 0xdabd, 0xcef3, /*0xe8-0xef*/
-  0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0, 0xdac0, 0xc7eb, /*0xf0-0xf7*/
-  0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc, 0xbfce, 0xdac3, /*0xf8-0xff*/
-  /* 0x8c00 */
-  0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2, 0xd7bb, 0xdac7, /*0x00-0x07*/
-  0xccb8, 0xd79f, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1, 0xdac9, /*0x08-0x0f*/
-  0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace, 0xb2f7, /*0x10-0x17*/
-  0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xd7a0, 0xdad3, /*0x18-0x1f*/
-  0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7, /*0x20-0x27*/
-  0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb, /*0x28-0x2f*/
-  0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8, /*0x30-0x37*/
-  0xd840, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, /*0x38-0x3f*/
-  0xd848, 0xbbed, 0xd849, 0xd84a, 0xd84b, 0xd84c, 0xb6b9, 0xf4f8, /*0x40-0x47*/
-  0xd84d, 0xf4f9, 0xd84e, 0xd84f, 0xcde3, 0xd850, 0xd851, 0xd852, /*0x48-0x4f*/
-  0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xf5b9, 0xd858, 0xd859, /*0x50-0x57*/
-  0xd85a, 0xd85b, 0xebe0, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, /*0x58-0x5f*/
-  0xd861, 0xcff3, 0xbbbf, 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, /*0x60-0x67*/
-  0xd867, 0xd868, 0xbac0, 0xd4a5, 0xd869, 0xd86a, 0xd86b, 0xd86c, /*0x68-0x6f*/
-  0xd86d, 0xd86e, 0xd86f, 0xe1d9, 0xd870, 0xd871, 0xd872, 0xd873, /*0x70-0x77*/
-  0xf5f4, 0xb1aa, 0xb2f2, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, /*0x78-0x7f*/
-  0xd879, 0xd87a, 0xf5f5, 0xd87b, 0xd87c, 0xf5f7, 0xd87d, 0xd87e, /*0x80-0x87*/
-  0xd880, 0xbad1, 0xf5f6, 0xd881, 0xc3b2, 0xd882, 0xd883, 0xd884, /*0x88-0x8f*/
-  0xd885, 0xd886, 0xd887, 0xd888, 0xf5f9, 0xd889, 0xd88a, 0xd88b, /*0x90-0x97*/
-  0xf5f8, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, /*0x98-0x9f*/
-  0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, /*0xa0-0xa7*/
-  0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, /*0xa8-0xaf*/
-  0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, /*0xb0-0xb7*/
-  0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, /*0xb8-0xbf*/
-  0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, /*0xc0-0xc7*/
-  0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, /*0xc8-0xcf*/
-  0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, /*0xd0-0xd7*/
-  0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, /*0xd8-0xdf*/
-  0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, /*0xe0-0xe7*/
-  0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, /*0xe8-0xef*/
-  0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, /*0xf0-0xf7*/
-  0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, /*0xf8-0xff*/
-  /* 0x8d00 */
-  0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, /*0x00-0x07*/
-  0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, /*0x08-0x0f*/
-  0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, /*0x10-0x17*/
-  0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xb1b4, 0xd5ea, 0xb8ba, /*0x18-0x1f*/
-  0xda4f, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5, /*0x20-0x27*/
-  0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1, /*0x28-0x2f*/
-  0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb, /*0x30-0x37*/
-  0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf, /*0x38-0x3f*/
-  0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4, /*0x40-0x47*/
-  0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd, /*0x48-0x4f*/
-  0xb4cd, 0xda50, 0xda51, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xda52, /*0x50-0x57*/
-  0xd7b8, 0xeae7, 0xd7ac, 0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xda53, /*0x58-0x5f*/
-  0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3, 0xb3e0, 0xda54, 0xc9e2, 0xf4f6, /*0x60-0x67*/
-  0xda55, 0xda56, 0xda57, 0xbad5, 0xda58, 0xf4f7, 0xda59, 0xda5a, /*0x68-0x6f*/
-  0xd7df, 0xda5b, 0xda5c, 0xf4f1, 0xb8b0, 0xd5d4, 0xb8cf, 0xc6f0, /*0x70-0x77*/
-  0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, /*0x78-0x7f*/
-  0xda65, 0xb3c3, 0xda66, 0xda67, 0xf4f2, 0xb3ac, 0xda68, 0xda69, /*0x80-0x87*/
-  0xda6a, 0xda6b, 0xd4bd, 0xc7f7, 0xda6c, 0xda6d, 0xda6e, 0xda6f, /*0x88-0x8f*/
-  0xda70, 0xf4f4, 0xda71, 0xda72, 0xf4f3, 0xda73, 0xda74, 0xda75, /*0x90-0x97*/
-  0xda76, 0xda77, 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xcccb, /*0x98-0x9f*/
-  0xda7d, 0xda7e, 0xda80, 0xc8a4, 0xda81, 0xda82, 0xda83, 0xda84, /*0xa0-0xa7*/
-  0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, 0xda8b, 0xda8c, /*0xa8-0xaf*/
-  0xda8d, 0xf4f5, 0xda8e, 0xd7e3, 0xc5bf, 0xf5c0, 0xda8f, 0xda90, /*0xb0-0xb7*/
-  0xf5bb, 0xda91, 0xf5c3, 0xda92, 0xf5c2, 0xda93, 0xd6ba, 0xf5c1, /*0xb8-0xbf*/
-  0xda94, 0xda95, 0xda96, 0xd4be, 0xf5c4, 0xda97, 0xf5cc, 0xda98, /*0xc0-0xc7*/
-  0xda99, 0xda9a, 0xda9b, 0xb0cf, 0xb5f8, 0xda9c, 0xf5c9, 0xf5ca, /*0xc8-0xcf*/
-  0xda9d, 0xc5dc, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xf5c5, 0xf5c6, /*0xd0-0xd7*/
-  0xdb41, 0xdb42, 0xf5c7, 0xf5cb, 0xdb43, 0xbee0, 0xf5c8, 0xb8fa, /*0xd8-0xdf*/
-  0xdb44, 0xdb45, 0xdb46, 0xf5d0, 0xf5d3, 0xdb47, 0xdb48, 0xdb49, /*0xe0-0xe7*/
-  0xbfe7, 0xdb4a, 0xb9f2, 0xf5bc, 0xf5cd, 0xdb4b, 0xdb4c, 0xc2b7, /*0xe8-0xef*/
-  0xdb4d, 0xdb4e, 0xdb4f, 0xccf8, 0xdb50, 0xbcf9, 0xdb51, 0xf5ce, /*0xf0-0xf7*/
-  0xf5cf, 0xf5d1, 0xb6e5, 0xf5d2, 0xdb52, 0xf5d5, 0xdb53, 0xdb54, /*0xf8-0xff*/
-  /* 0x8e00 */
-  0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, 0xf5bd, 0xdb5a, 0xdb5b, /*0x00-0x07*/
-  0xdb5c, 0xf5d4, 0xd3bb, 0xdb5d, 0xb3ec, 0xdb5e, 0xdb5f, 0xcca4, /*0x08-0x0f*/
-  0xdb60, 0xdb61, 0xdb62, 0xdb63, 0xf5d6, 0xdb64, 0xdb65, 0xdb66, /*0x10-0x17*/
-  0xdb67, 0xdb68, 0xdb69, 0xdb6a, 0xdb6b, 0xf5d7, 0xbee1, 0xf5d8, /*0x18-0x1f*/
-  0xdb6c, 0xdb6d, 0xccdf, 0xf5db, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, /*0x20-0x27*/
-  0xdb72, 0xb2c8, 0xd7d9, 0xdb73, 0xf5d9, 0xdb74, 0xf5da, 0xf5dc, /*0x28-0x2f*/
-  0xdb75, 0xf5e2, 0xdb76, 0xdb77, 0xdb78, 0xf5e0, 0xdb79, 0xdb7a, /*0x30-0x37*/
-  0xdb7b, 0xf5df, 0xf5dd, 0xdb7c, 0xdb7d, 0xf5e1, 0xdb7e, 0xdb80, /*0x38-0x3f*/
-  0xf5de, 0xf5e4, 0xf5e5, 0xdb81, 0xcce3, 0xdb82, 0xdb83, 0xe5bf, /*0x40-0x47*/
-  0xb5b8, 0xf5e3, 0xf5e8, 0xcca3, 0xdb84, 0xdb85, 0xdb86, 0xdb87, /*0x48-0x4f*/
-  0xdb88, 0xf5e6, 0xf5e7, 0xdb89, 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8d, /*0x50-0x57*/
-  0xdb8e, 0xf5be, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, 0xdb93, 0xdb94, /*0x58-0x5f*/
-  0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, 0xb1c4, 0xdb9b, /*0x60-0x67*/
-  0xdb9c, 0xf5bf, 0xdb9d, 0xdb9e, 0xb5c5, 0xb2e4, 0xdb9f, 0xf5ec, /*0x68-0x6f*/
-  0xf5e9, 0xdba0, 0xb6d7, 0xdc40, 0xf5ed, 0xdc41, 0xf5ea, 0xdc42, /*0x70-0x77*/
-  0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xf5eb, 0xdc47, 0xdc48, 0xb4da, /*0x78-0x7f*/
-  0xdc49, 0xd4ea, 0xdc4a, 0xdc4b, 0xdc4c, 0xf5ee, 0xdc4d, 0xb3f9, /*0x80-0x87*/
-  0xdc4e, 0xdc4f, 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xf5ef, /*0x88-0x8f*/
-  0xf5f1, 0xdc55, 0xdc56, 0xdc57, 0xf5f0, 0xdc58, 0xdc59, 0xdc5a, /*0x90-0x97*/
-  0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xf5f2, 0xdc5f, 0xf5f3, 0xdc60, /*0x98-0x9f*/
-  0xdc61, 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, /*0xa0-0xa7*/
-  0xdc69, 0xdc6a, 0xdc6b, 0xc9ed, 0xb9aa, 0xdc6c, 0xdc6d, 0xc7fb, /*0xa8-0xaf*/
-  0xdc6e, 0xdc6f, 0xb6e3, 0xdc70, 0xdc71, 0xdc72, 0xdc73, 0xdc74, /*0xb0-0xb7*/
-  0xdc75, 0xdc76, 0xccc9, 0xdc77, 0xdc78, 0xdc79, 0xdc7a, 0xdc7b, /*0xb8-0xbf*/
-  0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, 0xdc83, 0xdc84, /*0xc0-0xc7*/
-  0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, 0xeaa6, 0xdc8b, /*0xc8-0xcf*/
-  0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, 0xdc93, /*0xd0-0xd7*/
-  0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, 0xdc9b, /*0xd8-0xdf*/
-  0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, 0xdd42, /*0xe0-0xe7*/
-  0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, 0xdd4a, /*0xe8-0xef*/
-  0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd52, /*0xf0-0xf7*/
-  0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, 0xdd5a, /*0xf8-0xff*/
-  /* 0x8f00 */
-  0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, 0xdd62, /*0x00-0x07*/
-  0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, 0xdd6a, /*0x08-0x0f*/
-  0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, 0xdd72, /*0x10-0x17*/
-  0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, 0xdd7a, /*0x18-0x1f*/
-  0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, 0xdd83, /*0x20-0x27*/
-  0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, 0xdd8b, /*0x28-0x2f*/
-  0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, 0xdd93, /*0x30-0x37*/
-  0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, 0xdd9b, /*0x38-0x3f*/
-  0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, 0xde42, /*0x40-0x47*/
-  0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, 0xde4a, /*0x48-0x4f*/
-  0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, 0xde52, /*0x50-0x57*/
-  0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, 0xde5a, /*0x58-0x5f*/
-  0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xb3b5, 0xd4fe, /*0x60-0x67*/
-  0xb9ec, 0xd0f9, 0xde61, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, /*0x68-0x6f*/
-  0xbae4, 0xe9ef, 0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, /*0x70-0x77*/
-  0xe9f4, 0xe9f6, 0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, /*0x78-0x7f*/
-  0xde62, 0xe9fa, 0xe9fb, 0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, /*0x80-0x87*/
-  0xb1b2, 0xbbd4, 0xb9f5, 0xe9fe, 0xde63, 0xeaa1, 0xeaa2, 0xeaa3, /*0x88-0x8f*/
-  0xb7f8, 0xbcad, 0xde64, 0xcae4, 0xe0ce, 0xd4af, 0xcfbd, 0xd5b7, /*0x90-0x97*/
-  0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc, 0xde65, 0xb4c7, 0xb1d9, /*0x98-0x9f*/
-  0xde66, 0xde67, 0xde68, 0xc0b1, 0xde69, 0xde6a, 0xde6b, 0xde6c, /*0xa0-0xa7*/
-  0xb1e6, 0xb1e7, 0xde6d, 0xb1e8, 0xde6e, 0xde6f, 0xde70, 0xde71, /*0xa8-0xaf*/
-  0xb3bd, 0xc8e8, 0xde72, 0xde73, 0xde74, 0xde75, 0xe5c1, 0xde76, /*0xb0-0xb7*/
-  0xde77, 0xb1df, 0xde78, 0xde79, 0xde7a, 0xc1c9, 0xb4ef, 0xde7b, /*0xb8-0xbf*/
-  0xde7c, 0xc7a8, 0xd3d8, 0xde7d, 0xc6f9, 0xd1b8, 0xde7e, 0xb9fd, /*0xc0-0xc7*/
-  0xc2f5, 0xde80, 0xde81, 0xde82, 0xde83, 0xde84, 0xd3ad, 0xde85, /*0xc8-0xcf*/
-  0xd4cb, 0xbdfc, 0xde86, 0xe5c2, 0xb7b5, 0xe5c3, 0xde87, 0xde88, /*0xd0-0xd7*/
-  0xbbb9, 0xd5e2, 0xde89, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, /*0xd8-0xdf*/
-  0xde8a, 0xde8b, 0xccf6, 0xde8c, 0xe5c6, 0xe5c4, 0xe5c8, 0xde8d, /*0xe0-0xe7*/
-  0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xde8e, 0xb5fc, 0xe5c5, 0xde8f, /*0xe8-0xef*/
-  0xcaf6, 0xde90, 0xde91, 0xe5c9, 0xde92, 0xde93, 0xde94, 0xc3d4, /*0xf0-0xf7*/
-  0xb1c5, 0xbca3, 0xde95, 0xde96, 0xde97, 0xd7b7, 0xde98, 0xde99, /*0xf8-0xff*/
-  /* 0x9000 */
-  0xcdcb, 0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xde9a, /*0x00-0x07*/
-  0xde9b, 0xd1a1, 0xd1b7, 0xe5cd, 0xde9c, 0xe5d0, 0xde9d, 0xcdb8, /*0x08-0x0f*/
-  0xd6f0, 0xe5cf, 0xb5dd, 0xde9e, 0xcdbe, 0xde9f, 0xe5d1, 0xb6ba, /*0x10-0x17*/
-  0xdea0, 0xdf40, 0xcda8, 0xb9e4, 0xdf41, 0xcac5, 0xb3d1, 0xcbd9, /*0x18-0x1f*/
-  0xd4ec, 0xe5d2, 0xb7ea, 0xdf42, 0xdf43, 0xdf44, 0xe5ce, 0xdf45, /*0x20-0x27*/
-  0xdf46, 0xdf47, 0xdf48, 0xdf49, 0xdf4a, 0xe5d5, 0xb4fe, 0xe5d6, /*0x28-0x2f*/
-  0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xe5d3, 0xe5d4, 0xdf50, /*0x30-0x37*/
-  0xd2dd, 0xdf51, 0xdf52, 0xc2df, 0xb1c6, 0xdf53, 0xd3e2, 0xdf54, /*0x38-0x3f*/
-  0xdf55, 0xb6dd, 0xcbec, 0xdf56, 0xe5d7, 0xdf57, 0xdf58, 0xd3f6, /*0x40-0x47*/
-  0xdf59, 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xb1e9, 0xdf5e, 0xb6f4, /*0x48-0x4f*/
-  0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xdf5f, 0xdf60, 0xdf61, 0xd2c5, /*0x50-0x57*/
-  0xe5dc, 0xdf62, 0xdf63, 0xe5de, 0xdf64, 0xdf65, 0xdf66, 0xdf67, /*0x58-0x5f*/
-  0xdf68, 0xdf69, 0xe5dd, 0xc7b2, 0xdf6a, 0xd2a3, 0xdf6b, 0xdf6c, /*0x60-0x67*/
-  0xe5db, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xd4e2, 0xd5da, 0xdf71, /*0x68-0x6f*/
-  0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xe5e0, 0xd7f1, 0xdf76, 0xdf77, /*0x70-0x77*/
-  0xdf78, 0xdf79, 0xdf7a, 0xdf7b, 0xdf7c, 0xe5e1, 0xdf7d, 0xb1dc, /*0x78-0x7f*/
-  0xd1fb, 0xdf7e, 0xe5e2, 0xe5e4, 0xdf80, 0xdf81, 0xdf82, 0xdf83, /*0x80-0x87*/
-  0xe5e3, 0xdf84, 0xdf85, 0xe5e5, 0xdf86, 0xdf87, 0xdf88, 0xdf89, /*0x88-0x8f*/
-  0xdf8a, 0xd2d8, 0xdf8b, 0xb5cb, 0xdf8c, 0xe7df, 0xdf8d, 0xdaf5, /*0x90-0x97*/
-  0xdf8e, 0xdaf8, 0xdf8f, 0xdaf6, 0xdf90, 0xdaf7, 0xdf91, 0xdf92, /*0x98-0x9f*/
-  0xdf93, 0xdafa, 0xd0cf, 0xc4c7, 0xdf94, 0xdf95, 0xb0ee, 0xdf96, /*0xa0-0xa7*/
-  0xdf97, 0xdf98, 0xd0b0, 0xdf99, 0xdaf9, 0xdf9a, 0xd3ca, 0xbaaa, /*0xa8-0xaf*/
-  0xdba2, 0xc7f1, 0xdf9b, 0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdf9c, /*0xb0-0xb7*/
-  0xdba1, 0xd7de, 0xdafe, 0xc1da, 0xdf9d, 0xdf9e, 0xdba5, 0xdf9f, /*0xb8-0xbf*/
-  0xdfa0, 0xd3f4, 0xe040, 0xe041, 0xdba7, 0xdba4, 0xe042, 0xdba8, /*0xc0-0xc7*/
-  0xe043, 0xe044, 0xbdbc, 0xe045, 0xe046, 0xe047, 0xc0c9, 0xdba3, /*0xc8-0xcf*/
-  0xdba6, 0xd6a3, 0xe048, 0xdba9, 0xe049, 0xe04a, 0xe04b, 0xdbad, /*0xd0-0xd7*/
-  0xe04c, 0xe04d, 0xe04e, 0xdbae, 0xdbac, 0xbac2, 0xe04f, 0xe050, /*0xd8-0xdf*/
-  0xe051, 0xbfa4, 0xdbab, 0xe052, 0xe053, 0xe054, 0xdbaa, 0xd4c7, /*0xe0-0xe7*/
-  0xb2bf, 0xe055, 0xe056, 0xdbaf, 0xe057, 0xb9f9, 0xe058, 0xdbb0, /*0xe8-0xef*/
-  0xe059, 0xe05a, 0xe05b, 0xe05c, 0xb3bb, 0xe05d, 0xe05e, 0xe05f, /*0xf0-0xf7*/
-  0xb5a6, 0xe060, 0xe061, 0xe062, 0xe063, 0xb6bc, 0xdbb1, 0xe064, /*0xf8-0xff*/
-  /* 0x9100 */
-  0xe065, 0xe066, 0xb6f5, 0xe067, 0xdbb2, 0xe068, 0xe069, 0xe06a, /*0x00-0x07*/
-  0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, 0xe072, /*0x08-0x0f*/
-  0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, 0xe07a, /*0x10-0x17*/
-  0xe07b, 0xb1c9, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xdbb4, 0xe081, /*0x18-0x1f*/
-  0xe082, 0xe083, 0xdbb3, 0xdbb5, 0xe084, 0xe085, 0xe086, 0xe087, /*0x20-0x27*/
-  0xe088, 0xe089, 0xe08a, 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xdbb7, /*0x28-0x2f*/
-  0xe08f, 0xdbb6, 0xe090, 0xe091, 0xe092, 0xe093, 0xe094, 0xe095, /*0x30-0x37*/
-  0xe096, 0xdbb8, 0xe097, 0xe098, 0xe099, 0xe09a, 0xe09b, 0xe09c, /*0x38-0x3f*/
-  0xe09d, 0xe09e, 0xe09f, 0xdbb9, 0xe0a0, 0xe140, 0xdbba, 0xe141, /*0x40-0x47*/
-  0xe142, 0xd3cf, 0xf4fa, 0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, /*0x48-0x4f*/
-  0xf4fb, 0xe143, 0xbec6, 0xe144, 0xe145, 0xe146, 0xe147, 0xd0ef, /*0x50-0x57*/
-  0xe148, 0xe149, 0xb7d3, 0xe14a, 0xe14b, 0xd4cd, 0xccaa, 0xe14c, /*0x58-0x5f*/
-  0xe14d, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6, 0xe14e, 0xe14f, /*0x60-0x67*/
-  0xe150, 0xf5a4, 0xc0d2, 0xe151, 0xb3ea, 0xe152, 0xcdaa, 0xf5a5, /*0x68-0x6f*/
-  0xf5a3, 0xbdb4, 0xf5a8, 0xe153, 0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, /*0x70-0x77*/
-  0xcbe1, 0xf5aa, 0xe154, 0xe155, 0xe156, 0xf5a6, 0xf5a7, 0xc4f0, /*0x78-0x7f*/
-  0xe157, 0xe158, 0xe159, 0xe15a, 0xe15b, 0xf5ac, 0xe15c, 0xb4bc, /*0x80-0x87*/
-  0xe15d, 0xd7ed, 0xe15e, 0xb4d7, 0xf5ab, 0xf5ae, 0xe15f, 0xe160, /*0x88-0x8f*/
-  0xf5ad, 0xf5af, 0xd0d1, 0xe161, 0xe162, 0xe163, 0xe164, 0xe165, /*0x90-0x97*/
-  0xe166, 0xe167, 0xc3d1, 0xc8a9, 0xe168, 0xe169, 0xe16a, 0xe16b, /*0x98-0x9f*/
-  0xe16c, 0xe16d, 0xf5b0, 0xf5b1, 0xe16e, 0xe16f, 0xe170, 0xe171, /*0xa0-0xa7*/
-  0xe172, 0xe173, 0xf5b2, 0xe174, 0xe175, 0xf5b3, 0xf5b4, 0xf5b5, /*0xa8-0xaf*/
-  0xe176, 0xe177, 0xe178, 0xe179, 0xf5b7, 0xf5b6, 0xe17a, 0xe17b, /*0xb0-0xb7*/
-  0xe17c, 0xe17d, 0xf5b8, 0xe17e, 0xe180, 0xe181, 0xe182, 0xe183, /*0xb8-0xbf*/
-  0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, 0xb2c9, /*0xc0-0xc7*/
-  0xe18b, 0xd3d4, 0xcacd, 0xe18c, 0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, /*0xc8-0xcf*/
-  0xe18d, 0xbdf0, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, 0xe193, /*0xd0-0xd7*/
-  0xe194, 0xe195, 0xe196, 0xe197, 0xb8aa, 0xe198, 0xe199, 0xe19a, /*0xd8-0xdf*/
-  0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, /*0xe0-0xe7*/
-  0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, /*0xe8-0xef*/
-  0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, /*0xf0-0xf7*/
-  0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, /*0xf8-0xff*/
-  /* 0x9200 */
-  0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, /*0x00-0x07*/
-  0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, /*0x08-0x0f*/
-  0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, /*0x10-0x17*/
-  0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, /*0x18-0x1f*/
-  0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, /*0x20-0x27*/
-  0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, /*0x28-0x2f*/
-  0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, /*0x30-0x37*/
-  0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, /*0x38-0x3f*/
-  0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, /*0x40-0x47*/
-  0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, /*0x48-0x4f*/
-  0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, /*0x50-0x57*/
-  0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, /*0x58-0x5f*/
-  0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, /*0x60-0x67*/
-  0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, /*0x68-0x6f*/
-  0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xbcf8, 0xe36e, 0xe36f, 0xe370, /*0x70-0x77*/
-  0xe371, 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, /*0x78-0x7f*/
-  0xe379, 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, /*0x80-0x87*/
-  0xe382, 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xf6c6, 0xe388, /*0x88-0x8f*/
-  0xe389, 0xe38a, 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, /*0x90-0x97*/
-  0xe391, 0xe392, 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, /*0x98-0x9f*/
-  0xe399, 0xe39a, 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, /*0xa0-0xa7*/
-  0xe440, 0xe441, 0xe442, 0xe443, 0xe444, 0xe445, 0xf6c7, 0xe446, /*0xa8-0xaf*/
-  0xe447, 0xe448, 0xe449, 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, /*0xb0-0xb7*/
-  0xe44f, 0xe450, 0xe451, 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, /*0xb8-0xbf*/
-  0xe457, 0xe458, 0xe459, 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, /*0xc0-0xc7*/
-  0xf6c8, 0xe45f, 0xe460, 0xe461, 0xe462, 0xe463, 0xe464, 0xe465, /*0xc8-0xcf*/
-  0xe466, 0xe467, 0xe468, 0xe469, 0xe46a, 0xe46b, 0xe46c, 0xe46d, /*0xd0-0xd7*/
-  0xe46e, 0xe46f, 0xe470, 0xe471, 0xe472, 0xe473, 0xe474, 0xe475, /*0xd8-0xdf*/
-  0xe476, 0xe477, 0xe478, 0xe479, 0xe47a, 0xe47b, 0xe47c, 0xe47d, /*0xe0-0xe7*/
-  0xe47e, 0xe480, 0xe481, 0xe482, 0xe483, 0xe484, 0xe485, 0xe486, /*0xe8-0xef*/
-  0xe487, 0xe488, 0xe489, 0xe48a, 0xe48b, 0xe48c, 0xe48d, 0xe48e, /*0xf0-0xf7*/
-  0xe48f, 0xe490, 0xe491, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, /*0xf8-0xff*/
-  /* 0x9300 */
-  0xe497, 0xe498, 0xe499, 0xe49a, 0xe49b, 0xe49c, 0xe49d, 0xe49e, /*0x00-0x07*/
-  0xe49f, 0xe4a0, 0xe540, 0xe541, 0xe542, 0xe543, 0xe544, 0xe545, /*0x08-0x0f*/
-  0xe546, 0xe547, 0xe548, 0xe549, 0xe54a, 0xe54b, 0xe54c, 0xe54d, /*0x10-0x17*/
-  0xe54e, 0xe54f, 0xe550, 0xe551, 0xe552, 0xe553, 0xe554, 0xe555, /*0x18-0x1f*/
-  0xe556, 0xe557, 0xe558, 0xe559, 0xe55a, 0xe55b, 0xe55c, 0xe55d, /*0x20-0x27*/
-  0xe55e, 0xe55f, 0xe560, 0xe561, 0xe562, 0xe563, 0xe564, 0xe565, /*0x28-0x2f*/
-  0xe566, 0xe567, 0xe568, 0xe569, 0xe56a, 0xe56b, 0xe56c, 0xe56d, /*0x30-0x37*/
-  0xe56e, 0xe56f, 0xe570, 0xe571, 0xe572, 0xe573, 0xf6c9, 0xe574, /*0x38-0x3f*/
-  0xe575, 0xe576, 0xe577, 0xe578, 0xe579, 0xe57a, 0xe57b, 0xe57c, /*0x40-0x47*/
-  0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, 0xe583, 0xe584, 0xe585, /*0x48-0x4f*/
-  0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, 0xe58b, 0xe58c, 0xe58d, /*0x50-0x57*/
-  0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, 0xe593, 0xe594, 0xe595, /*0x58-0x5f*/
-  0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, 0xe59b, 0xe59c, 0xe59d, /*0x60-0x67*/
-  0xe59e, 0xe59f, 0xf6ca, 0xe5a0, 0xe640, 0xe641, 0xe642, 0xe643, /*0x68-0x6f*/
-  0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, 0xe64a, 0xe64b, /*0x70-0x77*/
-  0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, 0xe652, 0xe653, /*0x78-0x7f*/
-  0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, 0xe65a, 0xe65b, /*0x80-0x87*/
-  0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, 0xe662, 0xf6cc, /*0x88-0x8f*/
-  0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, 0xe66a, /*0x90-0x97*/
-  0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, 0xe672, /*0x98-0x9f*/
-  0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, 0xe67a, /*0xa0-0xa7*/
-  0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, 0xe683, /*0xa8-0xaf*/
-  0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, 0xe68b, /*0xb0-0xb7*/
-  0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, 0xe693, /*0xb8-0xbf*/
-  0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, 0xe69b, /*0xc0-0xc7*/
-  0xe69c, 0xe69d, 0xf6cb, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, /*0xc8-0xcf*/
-  0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xf7e9, 0xe748, /*0xd0-0xd7*/
-  0xe749, 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, /*0xd8-0xdf*/
-  0xe751, 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, /*0xe0-0xe7*/
-  0xe759, 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, /*0xe8-0xef*/
-  0xe761, 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, /*0xf0-0xf7*/
-  0xe769, 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, /*0xf8-0xff*/
-  /* 0x9400 */
-  0xe771, 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, /*0x00-0x07*/
-  0xe779, 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, /*0x08-0x0f*/
-  0xe782, 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, /*0x10-0x17*/
-  0xe78a, 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, /*0x18-0x1f*/
-  0xe792, 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, /*0x20-0x27*/
-  0xe79a, 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, /*0x28-0x2f*/
-  0xe841, 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, /*0x30-0x37*/
-  0xe849, 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xf6cd, 0xe84f, /*0x38-0x3f*/
-  0xe850, 0xe851, 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, /*0x40-0x47*/
-  0xe858, 0xe859, 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, /*0x48-0x4f*/
-  0xe860, 0xe861, 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, /*0x50-0x57*/
-  0xe868, 0xe869, 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, /*0x58-0x5f*/
-  0xe870, 0xe871, 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, /*0x60-0x67*/
-  0xe878, 0xe879, 0xe87a, 0xf6ce, 0xe87b, 0xe87c, 0xe87d, 0xe87e, /*0x68-0x6f*/
-  0xe880, 0xe881, 0xe882, 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, /*0x70-0x77*/
-  0xe888, 0xe889, 0xe88a, 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, /*0x78-0x7f*/
-  0xe890, 0xe891, 0xe892, 0xe893, 0xe894, 0xeec4, 0xeec5, 0xeec6, /*0x80-0x87*/
-  0xd5eb, 0xb6a4, 0xeec8, 0xeec7, 0xeec9, 0xeeca, 0xc7a5, 0xeecb, /*0x88-0x8f*/
-  0xeecc, 0xe895, 0xb7b0, 0xb5f6, 0xeecd, 0xeecf, 0xe896, 0xeece, /*0x90-0x97*/
-  0xe897, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae, 0xd6d3, /*0x98-0x9f*/
-  0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5, 0xbefb, /*0xa0-0xa7*/
-  0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5, 0xeed9, /*0xa8-0xaf*/
-  0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd, 0xeede, /*0xb0-0xb7*/
-  0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8, 0xeee4, /*0xb8-0xbf*/
-  0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad, 0xe898, /*0xc0-0xc7*/
-  0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xe899, /*0xc8-0xcf*/
-  0xeeed, 0xeeee, 0xeeef, 0xe89a, 0xe89b, 0xeef0, 0xeef1, 0xeef2, /*0xd0-0xd7*/
-  0xeef4, 0xeef3, 0xe89c, 0xeef5, 0xcdad, 0xc2c1, 0xeef6, 0xeef7, /*0xd8-0xdf*/
-  0xeef8, 0xd5a1, 0xeef9, 0xcfb3, 0xeefa, 0xeefb, 0xe89d, 0xeefc, /*0xe0-0xe7*/
-  0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5, 0xc3fa, 0xefa3, 0xefa4, /*0xe8-0xef*/
-  0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6, 0xefa7, 0xd2f8, 0xefa8, /*0xf0-0xf7*/
-  0xd6fd, 0xefa9, 0xc6cc, 0xe89e, 0xefaa, 0xefab, 0xc1b4, 0xefac, /*0xf8-0xff*/
-  /* 0x9500 */
-  0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8, 0xefaf, 0xefb0, /*0x00-0x07*/
-  0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3, 0xefb4, 0xefb5, /*0x08-0x0f*/
-  0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba, 0xd5e0, /*0x10-0x17*/
-  0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xe89f, 0xefbd, 0xefbe, 0xefbf, /*0x18-0x1f*/
-  0xe8a0, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xe940, /*0x20-0x27*/
-  0xcfc7, 0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, /*0x28-0x2f*/
-  0xc3cc, 0xefc5, 0xefc6, 0xe941, 0xefc7, 0xefcf, 0xefc8, 0xefc9, /*0x30-0x37*/
-  0xefca, 0xc7c2, 0xeff1, 0xb6cd, 0xefcb, 0xe942, 0xefcc, 0xefcd, /*0x38-0x3f*/
-  0xb6c6, 0xc3be, 0xefce, 0xe943, 0xefd0, 0xefd1, 0xefd2, 0xd5f2, /*0x40-0x47*/
-  0xe944, 0xefd3, 0xc4f7, 0xe945, 0xefd4, 0xc4f8, 0xefd5, 0xefd6, /*0x48-0x4f*/
-  0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xe946, 0xefda, 0xefdb, /*0x50-0x57*/
-  0xefdc, 0xefdd, 0xe947, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0, /*0x58-0x5f*/
-  0xe948, 0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, /*0x60-0x67*/
-  0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xe949, 0xefed, /*0x68-0x6f*/
-  0xc1ad, 0xefee, 0xefef, 0xeff0, 0xe94a, 0xe94b, 0xcfe2, 0xe94c, /*0x70-0x77*/
-  0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe952, 0xe953, 0xb3a4, /*0x78-0x7f*/
-  0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, 0xe95a, 0xe95b, /*0x80-0x87*/
-  0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, 0xe962, 0xe963, /*0x88-0x8f*/
-  0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, 0xe96a, 0xe96b, /*0x90-0x97*/
-  0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, 0xe972, 0xe973, /*0x98-0x9f*/
-  0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, 0xe97a, 0xe97b, /*0xa0-0xa7*/
-  0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, 0xe983, 0xe984, /*0xa8-0xaf*/
-  0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, 0xe98b, 0xe98c, /*0xb0-0xb7*/
-  0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, 0xe993, 0xe994, /*0xb8-0xbf*/
-  0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, 0xe99b, 0xe99c, /*0xc0-0xc7*/
-  0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, 0xea42, 0xea43, /*0xc8-0xcf*/
-  0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, 0xea4a, 0xea4b, /*0xd0-0xd7*/
-  0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, 0xea52, 0xea53, /*0xd8-0xdf*/
-  0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, 0xea5a, 0xea5b, /*0xe0-0xe7*/
-  0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6, 0xea5c, 0xb1d5, 0xceca, 0xb4b3, /*0xe8-0xef*/
-  0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4, 0xe3c9, 0xe3ca, 0xc3c6, /*0xf0-0xf7*/
-  0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb, 0xc3f6, 0xe3cc, 0xea5d, /*0xf8-0xff*/
-  /* 0x9600 */
-  0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4, 0xe3cf, 0xea5e, /*0x00-0x07*/
-  0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6, 0xe3d5, /*0x08-0x0f*/
-  0xb2fb, 0xc0bb, 0xe3d6, 0xea5f, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9, /*0x10-0x17*/
-  0xea60, 0xe3da, 0xe3db, 0xea61, 0xb8b7, 0xdae2, 0xea62, 0xb6d3, /*0x18-0x1f*/
-  0xea63, 0xdae4, 0xdae3, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, /*0x20-0x27*/
-  0xea69, 0xea6a, 0xdae6, 0xea6b, 0xea6c, 0xea6d, 0xc8ee, 0xea6e, /*0x28-0x2f*/
-  0xea6f, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xea70, /*0x30-0x37*/
-  0xea71, 0xea72, 0xea73, 0xd7e8, 0xdae8, 0xdae7, 0xea74, 0xb0a2, /*0x38-0x3f*/
-  0xcdd3, 0xea75, 0xdae9, 0xea76, 0xb8bd, 0xbcca, 0xc2bd, 0xc2a4, /*0x40-0x47*/
-  0xb3c2, 0xdaea, 0xea77, 0xc2aa, 0xc4b0, 0xbdb5, 0xea78, 0xea79, /*0x48-0x4f*/
-  0xcfde, 0xea7a, 0xea7b, 0xea7c, 0xdaeb, 0xc9c2, 0xea7d, 0xea7e, /*0x50-0x57*/
-  0xea80, 0xea81, 0xea82, 0xb1dd, 0xea83, 0xea84, 0xea85, 0xdaec, /*0x58-0x5f*/
-  0xea86, 0xb6b8, 0xd4ba, 0xea87, 0xb3fd, 0xea88, 0xea89, 0xdaed, /*0x60-0x67*/
-  0xd4c9, 0xcfd5, 0xc5e3, 0xea8a, 0xdaee, 0xea8b, 0xea8c, 0xea8d, /*0x68-0x6f*/
-  0xea8e, 0xea8f, 0xdaef, 0xea90, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd, /*0x70-0x77*/
-  0xea91, 0xea92, 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, /*0x78-0x7f*/
-  0xea99, 0xea9a, 0xea9b, 0xea9c, 0xea9d, 0xd3e7, 0xc2a1, 0xea9e, /*0x80-0x87*/
-  0xdaf1, 0xea9f, 0xeaa0, 0xcbe5, 0xeb40, 0xdaf2, 0xeb41, 0xcbe6, /*0x88-0x8f*/
-  0xd2fe, 0xeb42, 0xeb43, 0xeb44, 0xb8f4, 0xeb45, 0xeb46, 0xdaf3, /*0x90-0x97*/
-  0xb0af, 0xcfb6, 0xeb47, 0xeb48, 0xd5cf, 0xeb49, 0xeb4a, 0xeb4b, /*0x98-0x9f*/
-  0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, 0xeb52, 0xcbed, /*0xa0-0xa7*/
-  0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, 0xeb5a, /*0xa8-0xaf*/
-  0xdaf4, 0xeb5b, 0xeb5c, 0xe3c4, 0xeb5d, 0xeb5e, 0xc1a5, 0xeb5f, /*0xb0-0xb7*/
-  0xeb60, 0xf6bf, 0xeb61, 0xeb62, 0xf6c0, 0xf6c1, 0xc4d1, 0xeb63, /*0xb8-0xbf*/
-  0xc8b8, 0xd1e3, 0xeb64, 0xeb65, 0xd0db, 0xd1c5, 0xbcaf, 0xb9cd, /*0xc0-0xc7*/
-  0xeb66, 0xeff4, 0xeb67, 0xeb68, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, /*0xc8-0xcf*/
-  0xeb69, 0xeb6a, 0xf6c3, 0xeb6b, 0xeb6c, 0xb5f1, 0xeb6d, 0xeb6e, /*0xd0-0xd7*/
-  0xeb6f, 0xeb70, 0xeb71, 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, /*0xd8-0xdf*/
-  0xf6c5, 0xeb77, 0xeb78, 0xeb79, 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, /*0xe0-0xe7*/
-  0xd3ea, 0xf6a7, 0xd1a9, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, 0xf6a9, /*0xe8-0xef*/
-  0xeb83, 0xeb84, 0xeb85, 0xf6a8, 0xeb86, 0xeb87, 0xc1e3, 0xc0d7, /*0xf0-0xf7*/
-  0xeb88, 0xb1a2, 0xeb89, 0xeb8a, 0xeb8b, 0xeb8c, 0xceed, 0xeb8d, /*0xf8-0xff*/
-  /* 0x9700 */
-  0xd0e8, 0xf6ab, 0xeb8e, 0xeb8f, 0xcff6, 0xeb90, 0xf6aa, 0xd5f0, /*0x00-0x07*/
-  0xf6ac, 0xc3b9, 0xeb91, 0xeb92, 0xeb93, 0xbbf4, 0xf6ae, 0xf6ad, /*0x08-0x0f*/
-  0xeb94, 0xeb95, 0xeb96, 0xc4de, 0xeb97, 0xeb98, 0xc1d8, 0xeb99, /*0x10-0x17*/
-  0xeb9a, 0xeb9b, 0xeb9c, 0xeb9d, 0xcbaa, 0xeb9e, 0xcfbc, 0xeb9f, /*0x18-0x1f*/
-  0xeba0, 0xec40, 0xec41, 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, /*0x20-0x27*/
-  0xec47, 0xec48, 0xf6af, 0xec49, 0xec4a, 0xf6b0, 0xec4b, 0xec4c, /*0x28-0x2f*/
-  0xf6b1, 0xec4d, 0xc2b6, 0xec4e, 0xec4f, 0xec50, 0xec51, 0xec52, /*0x30-0x37*/
-  0xb0d4, 0xc5f9, 0xec53, 0xec54, 0xec55, 0xec56, 0xf6b2, 0xec57, /*0x38-0x3f*/
-  0xec58, 0xec59, 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, /*0x40-0x47*/
-  0xec60, 0xec61, 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, /*0x48-0x4f*/
-  0xec68, 0xec69, 0xc7e0, 0xf6a6, 0xec6a, 0xec6b, 0xbeb8, 0xec6c, /*0x50-0x57*/
-  0xec6d, 0xbeb2, 0xec6e, 0xb5e5, 0xec6f, 0xec70, 0xb7c7, 0xec71, /*0x58-0x5f*/
-  0xbfbf, 0xc3d2, 0xc3e6, 0xec72, 0xec73, 0xd8cc, 0xec74, 0xec75, /*0x60-0x67*/
-  0xec76, 0xb8ef, 0xec77, 0xec78, 0xec79, 0xec7a, 0xec7b, 0xec7c, /*0x68-0x6f*/
-  0xec7d, 0xec7e, 0xec80, 0xbdf9, 0xd1a5, 0xec81, 0xb0d0, 0xec82, /*0x70-0x77*/
-  0xec83, 0xec84, 0xec85, 0xec86, 0xf7b0, 0xec87, 0xec88, 0xec89, /*0x78-0x7f*/
-  0xec8a, 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xf7b1, 0xec8f, 0xec90, /*0x80-0x87*/
-  0xec91, 0xec92, 0xec93, 0xd0ac, 0xec94, 0xb0b0, 0xec95, 0xec96, /*0x88-0x8f*/
-  0xec97, 0xf7b2, 0xf7b3, 0xec98, 0xf7b4, 0xec99, 0xec9a, 0xec9b, /*0x90-0x97*/
-  0xc7ca, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, /*0x98-0x9f*/
-  0xbecf, 0xed42, 0xed43, 0xf7b7, 0xed44, 0xed45, 0xed46, 0xed47, /*0xa0-0xa7*/
-  0xed48, 0xed49, 0xed4a, 0xf7b6, 0xed4b, 0xb1de, 0xed4c, 0xf7b5, /*0xa8-0xaf*/
-  0xed4d, 0xed4e, 0xf7b8, 0xed4f, 0xf7b9, 0xed50, 0xed51, 0xed52, /*0xb0-0xb7*/
-  0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, 0xed5a, /*0xb8-0xbf*/
-  0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, 0xed62, /*0xc0-0xc7*/
-  0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, 0xed6a, /*0xc8-0xcf*/
-  0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, 0xed72, /*0xd0-0xd7*/
-  0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, 0xed7a, /*0xd8-0xdf*/
-  0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xcea4, 0xc8cd, /*0xe0-0xe7*/
-  0xed82, 0xbaab, 0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xed83, 0xed84, /*0xe8-0xef*/
-  0xed85, 0xed86, 0xed87, 0xd2f4, 0xed88, 0xd4cf, 0xc9d8, 0xed89, /*0xf0-0xf7*/
-  0xed8a, 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, /*0xf8-0xff*/
-  /* 0x9800 */
-  0xed92, 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, /*0x00-0x07*/
-  0xed9a, 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, /*0x08-0x0f*/
-  0xee41, 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, /*0x10-0x17*/
-  0xee49, 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, /*0x18-0x1f*/
-  0xee51, 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, /*0x20-0x27*/
-  0xee59, 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, /*0x28-0x2f*/
-  0xee61, 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, /*0x30-0x37*/
-  0xee69, 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, /*0x38-0x3f*/
-  0xee71, 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, /*0x40-0x47*/
-  0xee79, 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, /*0x48-0x4f*/
-  0xee82, 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, /*0x50-0x57*/
-  0xee8a, 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, /*0x58-0x5f*/
-  0xee92, 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, /*0x60-0x67*/
-  0xee9a, 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, /*0x68-0x6f*/
-  0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xd2b3, 0xb6a5, 0xc7ea, /*0x70-0x77*/
-  0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7, 0xb9cb, 0xb6d9, /*0x78-0x7f*/
-  0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad, 0xc1ec, 0xc6c4, /*0x80-0x87*/
-  0xbeb1, 0xf2a1, 0xbcd5, 0xef46, 0xf2a2, 0xf2a3, 0xef47, 0xf2a4, /*0x88-0x8f*/
-  0xd2c3, 0xc6b5, 0xef48, 0xcdc7, 0xf2a5, 0xef49, 0xd3b1, 0xbfc5, /*0x90-0x97*/
-  0xcce2, 0xef4a, 0xf2a6, 0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, /*0x98-0x9f*/
-  0xb5df, 0xf2aa, 0xf2ab, 0xef4b, 0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, /*0xa0-0xa7*/
-  0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, /*0xa8-0xaf*/
-  0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, /*0xb0-0xb7*/
-  0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, /*0xb8-0xbf*/
-  0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, /*0xc0-0xc7*/
-  0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xb7e7, 0xef72, /*0xc8-0xcf*/
-  0xef73, 0xeca9, 0xecaa, 0xecab, 0xef74, 0xecac, 0xef75, 0xef76, /*0xd0-0xd7*/
-  0xc6ae, 0xecad, 0xecae, 0xef77, 0xef78, 0xef79, 0xb7c9, 0xcab3, /*0xd8-0xdf*/
-  0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xe2b8, /*0xe0-0xe7*/
-  0xf7cf, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, /*0xe8-0xef*/
-  0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, /*0xf0-0xf7*/
-  0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, /*0xf8-0xff*/
-  /* 0x9900 */
-  0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, /*0x00-0x07*/
-  0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf7d0, 0xf045, 0xf046, /*0x08-0x0f*/
-  0xb2cd, 0xf047, 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, /*0x10-0x17*/
-  0xf04e, 0xf04f, 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, /*0x18-0x1f*/
-  0xf056, 0xf057, 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, /*0x20-0x27*/
-  0xf05e, 0xf05f, 0xf060, 0xf061, 0xf062, 0xf063, 0xf7d1, 0xf064, /*0x28-0x2f*/
-  0xf065, 0xf066, 0xf067, 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, /*0x30-0x37*/
-  0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, /*0x38-0x3f*/
-  0xf075, 0xf076, 0xf077, 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, /*0x40-0x47*/
-  0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, /*0x48-0x4f*/
-  0xf086, 0xf087, 0xf088, 0xf089, 0xf7d3, 0xf7d2, 0xf08a, 0xf08b, /*0x50-0x57*/
-  0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, /*0x58-0x5f*/
-  0xf094, 0xf095, 0xf096, 0xe2bb, 0xf097, 0xbca2, 0xf098, 0xe2bc, /*0x60-0x67*/
-  0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4, /*0x68-0x6f*/
-  0xcace, 0xb1a5, 0xcbc7, 0xf099, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, /*0x70-0x77*/
-  0xf09a, 0xf09b, 0xbdc8, 0xf09c, 0xb1fd, 0xe2c4, 0xf09d, 0xb6f6, /*0x78-0x7f*/
-  0xe2c5, 0xc4d9, 0xf09e, 0xf09f, 0xe2c6, 0xcfda, 0xb9dd, 0xe2c7, /*0x80-0x87*/
-  0xc0a1, 0xf0a0, 0xe2c8, 0xb2f6, 0xf140, 0xe2c9, 0xf141, 0xc1f3, /*0x88-0x8f*/
-  0xe2ca, 0xe2cb, 0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, /*0x90-0x97*/
-  0xd9e5, 0xcfe3, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, /*0x98-0x9f*/
-  0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf0a5, 0xf14d, 0xf14e, /*0xa0-0xa7*/
-  0xdcb0, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, /*0xa8-0xaf*/
-  0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, /*0xb0-0xb7*/
-  0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, /*0xb8-0xbf*/
-  0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, /*0xc0-0xc7*/
-  0xf16e, 0xf16f, 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, /*0xc8-0xcf*/
-  0xf176, 0xf177, 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, /*0xd0-0xd7*/
-  0xf17e, 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, /*0xd8-0xdf*/
-  0xf187, 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, /*0xe0-0xe7*/
-  0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, /*0xe8-0xef*/
-  0xf197, 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, /*0xf0-0xf7*/
-  0xf19f, 0xf1a0, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, /*0xf8-0xff*/
-  /* 0x9a00 */
-  0xf246, 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, /*0x00-0x07*/
-  0xf24e, 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, /*0x08-0x0f*/
-  0xf256, 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, /*0x10-0x17*/
-  0xf25e, 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, /*0x18-0x1f*/
-  0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, /*0x20-0x27*/
-  0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, /*0x28-0x2f*/
-  0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, /*0x30-0x37*/
-  0xf27e, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, /*0x38-0x3f*/
-  0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, /*0x40-0x47*/
-  0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, /*0x48-0x4f*/
-  0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, /*0x50-0x57*/
-  0xf29f, 0xf2a0, 0xf340, 0xf341, 0xf342, 0xf343, 0xf344, 0xf345, /*0x58-0x5f*/
-  0xf346, 0xf347, 0xf348, 0xf349, 0xf34a, 0xf34b, 0xf34c, 0xf34d, /*0x60-0x67*/
-  0xf34e, 0xf34f, 0xf350, 0xf351, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, /*0x68-0x6f*/
-  0xb3db, 0xc7fd, 0xf352, 0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, /*0x70-0x77*/
-  0xe6e2, 0xbed4, 0xe6e3, 0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, /*0x78-0x7f*/
-  0xe6e6, 0xe6e7, 0xc2ee, 0xf353, 0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, /*0x80-0x87*/
-  0xe6e9, 0xf354, 0xe6ea, 0xb3d2, 0xd1e9, 0xf355, 0xf356, 0xbfa5, /*0x88-0x8f*/
-  0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xf357, 0xf358, 0xe6ee, 0xc6ad, /*0x90-0x97*/
-  0xe6ef, 0xf359, 0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, /*0x98-0x9f*/
-  0xe6f4, 0xc2e2, 0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xf35a, 0xe6f8, /*0xa0-0xa7*/
-  0xb9c7, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, /*0xa8-0xaf*/
-  0xf7bb, 0xf7ba, 0xf362, 0xf363, 0xf364, 0xf365, 0xf7be, 0xf7bc, /*0xb0-0xb7*/
-  0xbaa1, 0xf366, 0xf7bf, 0xf367, 0xf7c0, 0xf368, 0xf369, 0xf36a, /*0xb8-0xbf*/
-  0xf7c2, 0xf7c1, 0xf7c4, 0xf36b, 0xf36c, 0xf7c3, 0xf36d, 0xf36e, /*0xc0-0xc7*/
-  0xf36f, 0xf370, 0xf371, 0xf7c5, 0xf7c6, 0xf372, 0xf373, 0xf374, /*0xc8-0xcf*/
-  0xf375, 0xf7c7, 0xf376, 0xcbe8, 0xf377, 0xf378, 0xf379, 0xf37a, /*0xd0-0xd7*/
-  0xb8df, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf7d4, /*0xd8-0xdf*/
-  0xf382, 0xf7d5, 0xf383, 0xf384, 0xf385, 0xf386, 0xf7d6, 0xf387, /*0xe0-0xe7*/
-  0xf388, 0xf389, 0xf38a, 0xf7d8, 0xf38b, 0xf7da, 0xf38c, 0xf7d7, /*0xe8-0xef*/
-  0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, /*0xf0-0xf7*/
-  0xf395, 0xf7db, 0xf396, 0xf7d9, 0xf397, 0xf398, 0xf399, 0xf39a, /*0xf8-0xff*/
-  /* 0x9b00 */
-  0xf39b, 0xf39c, 0xf39d, 0xd7d7, 0xf39e, 0xf39f, 0xf3a0, 0xf440, /*0x00-0x07*/
-  0xf7dc, 0xf441, 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf7dd, /*0x08-0x0f*/
-  0xf447, 0xf448, 0xf449, 0xf7de, 0xf44a, 0xf44b, 0xf44c, 0xf44d, /*0x10-0x17*/
-  0xf44e, 0xf44f, 0xf450, 0xf451, 0xf452, 0xf453, 0xf454, 0xf7df, /*0x18-0x1f*/
-  0xf455, 0xf456, 0xf457, 0xf7e0, 0xf458, 0xf459, 0xf45a, 0xf45b, /*0x20-0x27*/
-  0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xdbcb, /*0x28-0x2f*/
-  0xf463, 0xf464, 0xd8aa, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, /*0x30-0x37*/
-  0xf46a, 0xf46b, 0xf46c, 0xe5f7, 0xb9ed, 0xf46d, 0xf46e, 0xf46f, /*0x38-0x3f*/
-  0xf470, 0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf471, 0xf7ca, /*0x40-0x47*/
-  0xf7cc, 0xf7cb, 0xf472, 0xf473, 0xf474, 0xf7cd, 0xf475, 0xceba, /*0x48-0x4f*/
-  0xf476, 0xf7ce, 0xf477, 0xf478, 0xc4a7, 0xf479, 0xf47a, 0xf47b, /*0x50-0x57*/
-  0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, 0xf483, 0xf484, /*0x58-0x5f*/
-  0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, 0xf48b, 0xf48c, /*0x60-0x67*/
-  0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, 0xf493, 0xf494, /*0x68-0x6f*/
-  0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, 0xf49b, 0xf49c, /*0x70-0x77*/
-  0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, 0xf542, 0xf543, /*0x78-0x7f*/
-  0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, 0xf54a, 0xf54b, /*0x80-0x87*/
-  0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, 0xf552, 0xf553, /*0x88-0x8f*/
-  0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, 0xf55a, 0xf55b, /*0x90-0x97*/
-  0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, 0xf562, 0xf563, /*0x98-0x9f*/
-  0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, 0xf56a, 0xf56b, /*0xa0-0xa7*/
-  0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, 0xf572, 0xf573, /*0xa8-0xaf*/
-  0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, 0xf57a, 0xf57b, /*0xb0-0xb7*/
-  0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, 0xf583, 0xf584, /*0xb8-0xbf*/
-  0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, 0xf58b, 0xf58c, /*0xc0-0xc7*/
-  0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, 0xf593, 0xf594, /*0xc8-0xcf*/
-  0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, 0xf59b, 0xf59c, /*0xd0-0xd7*/
-  0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, 0xf642, 0xf643, /*0xd8-0xdf*/
-  0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, 0xf64a, 0xf64b, /*0xe0-0xe7*/
-  0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, 0xf652, 0xf653, /*0xe8-0xef*/
-  0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, 0xf65a, 0xf65b, /*0xf0-0xf7*/
-  0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, 0xf662, 0xf663, /*0xf8-0xff*/
-  /* 0x9c00 */
-  0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, 0xf66a, 0xf66b, /*0x00-0x07*/
-  0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, 0xf672, 0xf673, /*0x08-0x0f*/
-  0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, 0xf67a, 0xf67b, /*0x10-0x17*/
-  0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, 0xf683, 0xf684, /*0x18-0x1f*/
-  0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, 0xf68b, 0xf68c, /*0x20-0x27*/
-  0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, 0xf693, 0xf694, /*0x28-0x2f*/
-  0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, 0xf69b, 0xf69c, /*0x30-0x37*/
-  0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, 0xf742, 0xf743, /*0x38-0x3f*/
-  0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, 0xf74a, 0xf74b, /*0x40-0x47*/
-  0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, 0xf752, 0xf753, /*0x48-0x4f*/
-  0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, 0xf75a, 0xf75b, /*0x50-0x57*/
-  0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, 0xf762, 0xf763, /*0x58-0x5f*/
-  0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, 0xf76a, 0xf76b, /*0x60-0x67*/
-  0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, 0xf772, 0xf773, /*0x68-0x6f*/
-  0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, 0xf77a, 0xf77b, /*0x70-0x77*/
-  0xf77c, 0xf77d, 0xf77e, 0xf780, 0xd3e3, 0xf781, 0xf782, 0xf6cf, /*0x78-0x7f*/
-  0xf783, 0xc2b3, 0xf6d0, 0xf784, 0xf785, 0xf6d1, 0xf6d2, 0xf6d3, /*0x80-0x87*/
-  0xf6d4, 0xf786, 0xf787, 0xf6d6, 0xf788, 0xb1ab, 0xf6d7, 0xf789, /*0x88-0x8f*/
-  0xf6d8, 0xf6d9, 0xf6da, 0xf78a, 0xf6db, 0xf6dc, 0xf78b, 0xf78c, /*0x90-0x97*/
-  0xf78d, 0xf78e, 0xf6dd, 0xf6de, 0xcfca, 0xf78f, 0xf6df, 0xf6e0, /*0x98-0x9f*/
-  0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6, 0xf6e7, /*0xa0-0xa7*/
-  0xf6e8, 0xf6e9, 0xf790, 0xf6ea, 0xf791, 0xf6eb, 0xf6ec, 0xf792, /*0xa8-0xaf*/
-  0xf6ed, 0xf6ee, 0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, /*0xb0-0xb7*/
-  0xbea8, 0xf793, 0xf6f5, 0xf6f6, 0xf6f7, 0xf6f8, 0xf794, 0xf795, /*0xb8-0xbf*/
-  0xf796, 0xf797, 0xf798, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, /*0xc0-0xc7*/
-  0xf799, 0xf79a, 0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, /*0xc8-0xcf*/
-  0xf7a5, 0xf79b, 0xf79c, 0xf7a6, 0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, /*0xd0-0xd7*/
-  0xf7aa, 0xf7ab, 0xf79d, 0xf79e, 0xf7ac, 0xf7ad, 0xc1db, 0xf7ae, /*0xd8-0xdf*/
-  0xf79f, 0xf7a0, 0xf7af, 0xf840, 0xf841, 0xf842, 0xf843, 0xf844, /*0xe0-0xe7*/
-  0xf845, 0xf846, 0xf847, 0xf848, 0xf849, 0xf84a, 0xf84b, 0xf84c, /*0xe8-0xef*/
-  0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf852, 0xf853, 0xf854, /*0xf0-0xf7*/
-  0xf855, 0xf856, 0xf857, 0xf858, 0xf859, 0xf85a, 0xf85b, 0xf85c, /*0xf8-0xff*/
-  /* 0x9d00 */
-  0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, 0xf862, 0xf863, 0xf864, /*0x00-0x07*/
-  0xf865, 0xf866, 0xf867, 0xf868, 0xf869, 0xf86a, 0xf86b, 0xf86c, /*0x08-0x0f*/
-  0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf872, 0xf873, 0xf874, /*0x10-0x17*/
-  0xf875, 0xf876, 0xf877, 0xf878, 0xf879, 0xf87a, 0xf87b, 0xf87c, /*0x18-0x1f*/
-  0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, 0xf883, 0xf884, 0xf885, /*0x20-0x27*/
-  0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, 0xf88b, 0xf88c, 0xf88d, /*0x28-0x2f*/
-  0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, 0xf893, 0xf894, 0xf895, /*0x30-0x37*/
-  0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, 0xf89b, 0xf89c, 0xf89d, /*0x38-0x3f*/
-  0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, 0xf942, 0xf943, 0xf944, /*0x40-0x47*/
-  0xf945, 0xf946, 0xf947, 0xf948, 0xf949, 0xf94a, 0xf94b, 0xf94c, /*0x48-0x4f*/
-  0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf952, 0xf953, 0xf954, /*0x50-0x57*/
-  0xf955, 0xf956, 0xf957, 0xf958, 0xf959, 0xf95a, 0xf95b, 0xf95c, /*0x58-0x5f*/
-  0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, 0xf962, 0xf963, 0xf964, /*0x60-0x67*/
-  0xf965, 0xf966, 0xf967, 0xf968, 0xf969, 0xf96a, 0xf96b, 0xf96c, /*0x68-0x6f*/
-  0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, 0xf972, 0xf973, 0xf974, /*0x70-0x77*/
-  0xf975, 0xf976, 0xf977, 0xf978, 0xf979, 0xf97a, 0xf97b, 0xf97c, /*0x78-0x7f*/
-  0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, 0xf983, 0xf984, 0xf985, /*0x80-0x87*/
-  0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, 0xf98b, 0xf98c, 0xf98d, /*0x88-0x8f*/
-  0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, 0xf993, 0xf994, 0xf995, /*0x90-0x97*/
-  0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, 0xf99b, 0xf99c, 0xf99d, /*0x98-0x9f*/
-  0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, /*0xa0-0xa7*/
-  0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, /*0xa8-0xaf*/
-  0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, /*0xb0-0xb7*/
-  0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, /*0xb8-0xbf*/
-  0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, /*0xc0-0xc7*/
-  0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, /*0xc8-0xcf*/
-  0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, /*0xd0-0xd7*/
-  0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, /*0xd8-0xdf*/
-  0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, 0xfa83, 0xfa84, 0xfa85, /*0xe0-0xe7*/
-  0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, /*0xe8-0xef*/
-  0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, 0xfa93, 0xfa94, 0xfa95, /*0xf0-0xf7*/
-  0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, 0xfa9b, 0xfa9c, 0xfa9d, /*0xf8-0xff*/
-  /* 0x9e00 */
-  0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, 0xfb42, 0xfb43, 0xfb44, /*0x00-0x07*/
-  0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, /*0x08-0x0f*/
-  0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, /*0x10-0x17*/
-  0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xc4f1, /*0x18-0x1f*/
-  0xf0af, 0xbca6, 0xf0b0, 0xc3f9, 0xfb5c, 0xc5b8, 0xd1bb, 0xfb5d, /*0x20-0x27*/
-  0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc, 0xfb5e, 0xd1ec, /*0x28-0x2f*/
-  0xfb5f, 0xf0b7, 0xf0b6, 0xd4a7, 0xfb60, 0xcdd2, 0xf0b8, 0xf0ba, /*0x30-0x37*/
-  0xf0b9, 0xf0bb, 0xf0bc, 0xfb61, 0xfb62, 0xb8eb, 0xf0bd, 0xbae8, /*0x38-0x3f*/
-  0xfb63, 0xf0be, 0xf0bf, 0xbee9, 0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, /*0x40-0x47*/
-  0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5, 0xf0c6, 0xfb64, 0xf0c7, 0xc5f4, /*0x48-0x4f*/
-  0xfb65, 0xf0c8, 0xfb66, 0xfb67, 0xfb68, 0xf0c9, 0xfb69, 0xf0ca, /*0x50-0x57*/
-  0xf7bd, 0xfb6a, 0xf0cb, 0xf0cc, 0xf0cd, 0xfb6b, 0xf0ce, 0xfb6c, /*0x58-0x5f*/
-  0xfb6d, 0xfb6e, 0xfb6f, 0xf0cf, 0xbad7, 0xfb70, 0xf0d0, 0xf0d1, /*0x60-0x67*/
-  0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xfb71, 0xfb72, /*0x68-0x6f*/
-  0xd3a5, 0xf0d7, 0xfb73, 0xf0d9, 0xfb74, 0xfb75, 0xfb76, 0xfb77, /*0x70-0x77*/
-  0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xf5ba, 0xc2b9, /*0x78-0x7f*/
-  0xfb7e, 0xfb80, 0xf7e4, 0xfb81, 0xfb82, 0xfb83, 0xfb84, 0xf7e5, /*0x80-0x87*/
-  0xf7e6, 0xfb85, 0xfb86, 0xf7e7, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, /*0x88-0x8f*/
-  0xfb8b, 0xfb8c, 0xf7e8, 0xc2b4, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, /*0x90-0x97*/
-  0xfb91, 0xfb92, 0xfb93, 0xfb94, 0xfb95, 0xf7ea, 0xfb96, 0xf7eb, /*0x98-0x9f*/
-  0xfb97, 0xfb98, 0xfb99, 0xfb9a, 0xfb9b, 0xfb9c, 0xc2f3, 0xfb9d, /*0xa0-0xa7*/
-  0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, /*0xa8-0xaf*/
-  0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xf4f0, 0xfc49, 0xfc4a, 0xfc4b, /*0xb0-0xb7*/
-  0xf4ef, 0xfc4c, 0xfc4d, 0xc2e9, 0xfc4e, 0xf7e1, 0xf7e2, 0xfc4f, /*0xb8-0xbf*/
-  0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xbbc6, 0xfc54, 0xfc55, 0xfc56, /*0xc0-0xc7*/
-  0xfc57, 0xd9e4, 0xfc58, 0xfc59, 0xfc5a, 0xcaf2, 0xc0e8, 0xf0a4, /*0xc8-0xcf*/
-  0xfc5b, 0xbada, 0xfc5c, 0xfc5d, 0xc7ad, 0xfc5e, 0xfc5f, 0xfc60, /*0xd0-0xd7*/
-  0xc4ac, 0xfc61, 0xfc62, 0xf7ec, 0xf7ed, 0xf7ee, 0xfc63, 0xf7f0, /*0xd8-0xdf*/
-  0xf7ef, 0xfc64, 0xf7f1, 0xfc65, 0xfc66, 0xf7f4, 0xfc67, 0xf7f3, /*0xe0-0xe7*/
-  0xfc68, 0xf7f2, 0xf7f5, 0xfc69, 0xfc6a, 0xfc6b, 0xfc6c, 0xf7f6, /*0xe8-0xef*/
-  0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, /*0xf0-0xf7*/
-  0xfc75, 0xede9, 0xfc76, 0xedea, 0xedeb, 0xfc77, 0xf6bc, 0xfc78, /*0xf8-0xff*/
-  /* 0x9f00 */
-  0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, /*0x00-0x07*/
-  0xfc82, 0xfc83, 0xfc84, 0xf6bd, 0xfc85, 0xf6be, 0xb6a6, 0xfc86, /*0x08-0x0f*/
-  0xd8be, 0xfc87, 0xfc88, 0xb9c4, 0xfc89, 0xfc8a, 0xfc8b, 0xd8bb, /*0x10-0x17*/
-  0xfc8c, 0xdcb1, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, /*0x18-0x1f*/
-  0xcaf3, 0xfc93, 0xf7f7, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, /*0x20-0x27*/
-  0xfc99, 0xfc9a, 0xfc9b, 0xfc9c, 0xf7f8, 0xfc9d, 0xfc9e, 0xf7f9, /*0x28-0x2f*/
-  0xfc9f, 0xfca0, 0xfd40, 0xfd41, 0xfd42, 0xfd43, 0xfd44, 0xf7fb, /*0x30-0x37*/
-  0xfd45, 0xf7fa, 0xfd46, 0xb1c7, 0xfd47, 0xf7fc, 0xf7fd, 0xfd48, /*0x38-0x3f*/
-  0xfd49, 0xfd4a, 0xfd4b, 0xfd4c, 0xf7fe, 0xfd4d, 0xfd4e, 0xfd4f, /*0x40-0x47*/
-  0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, /*0x48-0x4f*/
-  0xc6eb, 0xecb4, 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, /*0x50-0x57*/
-  0xfd5e, 0xfd5f, 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, /*0x58-0x5f*/
-  0xfd66, 0xfd67, 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, /*0x60-0x67*/
-  0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, /*0x68-0x6f*/
-  0xfd76, 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, /*0x70-0x77*/
-  0xfd7e, 0xfd80, 0xfd81, 0xfd82, 0xfd83, 0xfd84, 0xfd85, 0xb3dd, /*0x78-0x7f*/
-  0xf6b3, 0xfd86, 0xfd87, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6, 0xf6b7, /*0x80-0x87*/
-  0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xfd88, 0xfd89, 0xfd8a, /*0x88-0x8f*/
-  0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, /*0x90-0x97*/
-  0xfd93, 0xc1fa, 0xb9a8, 0xede8, 0xfd94, 0xfd95, 0xfd96, 0xb9ea, /*0x98-0x9f*/
-  0xd9df, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, 0xfd9b, 0x0000, 0x0000, /*0xa0-0xa7*/
-};
-static const unsigned short cp936ext_page1f2f[32] = {
-  0x0000, 0xfd9d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9e, 0x0000, 0x0000, /*0x90-0x97*/
-};
-static const unsigned short cp936ext_page1f3c[24] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9f, /*0xe0-0xe7*/
-  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe8-0xef*/
-  0x0000, 0xfda0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf0-0xf7*/
-};
-static const unsigned short cp936ext_page1f41[40] = {
-  0x0000, 0x0000, 0x0000, 0x0000, 0xfe40, 0xfe41, 0xfe42, 0xfe43, /*0x08-0x0f*/
-  0x0000, 0xfe44, 0x0000, 0xfe45, 0xfe46, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/
-  0xfe47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe48, /*0x18-0x1f*/
-  0xfe49, 0xfe4a, 0x0000, 0xfe4b, 0xfe4c, 0x0000, 0x0000, 0xfe4d, /*0x20-0x27*/
-  0xfe4e, 0xfe4f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/
-};
-static const unsigned short cp936ext_page1fc6[64] = {
-  0xa955, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/
-  0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/
-  0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/
-  0x0000, 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, /*0x48-0x4f*/
-  0xa96f, 0xa970, 0xa971, 0x0000, 0xa972, 0xa973, 0xa974, 0xa975, /*0x50-0x57*/
-  0x0000, 0xa976, 0xa977, 0xa978, 0xa979, 0xa97a, 0xa97b, 0xa97c, /*0x58-0x5f*/
-  0xa97d, 0xa97e, 0xa980, 0xa981, 0xa982, 0xa983, 0xa984, 0x0000, /*0x60-0x67*/
-  0xa985, 0xa986, 0xa987, 0xa988, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/
-};
-static const unsigned short cp936ext_page1fe0[96] = {
-  0x0000, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5, 0xa3a6, 0xa3a7, /*0x00-0x07*/
-  0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, /*0x08-0x0f*/
-  0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, /*0x10-0x17*/
-  0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf, /*0x18-0x1f*/
-  0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, /*0x20-0x27*/
-  0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, /*0x28-0x2f*/
-  0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, /*0x30-0x37*/
-  0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, 0xa3de, 0xa3df, /*0x38-0x3f*/
-  0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, /*0x40-0x47*/
-  0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, /*0x48-0x4f*/
-  0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, /*0x50-0x57*/
-  0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa1ab, 0x0000, /*0x58-0x5f*/
-};
-static const unsigned short cp936ext_page1ffc[8] = {
-  0xa1e9, 0xa1ea, 0xa956, 0xa3fe, 0xa957, 0xa3a4, 0x0000, 0x0000, /*0xe0-0xe7*/
-};
-
-static int
-cp936ext_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    unsigned short c = 0;
-    if (wc >= 0x00a0 && wc < 0x0170)
-      c = cp936ext_page0014[wc-0x00a0];
-    else if (wc >= 0x01c8 && wc < 0x01e0)
-      c = cp936ext_page0039[wc-0x01c8];
-    else if (wc >= 0x0250 && wc < 0x0268)
-      c = cp936ext_page004a[wc-0x0250];
-    else if (wc >= 0x02c0 && wc < 0x02e0)
-      c = cp936ext_page0058[wc-0x02c0];
-    else if (wc >= 0x0390 && wc < 0x03d0)
-      c = cp936ext_page0072[wc-0x0390];
-    else if (wc >= 0x0400 && wc < 0x0458)
-      c = cp936ext_page0080[wc-0x0400];
-    else if (wc >= 0x2010 && wc < 0x2040)
-      c = cp936ext_page0402[wc-0x2010];
-    else if (wc >= 0x2100 && wc < 0x21a0)
-      c = cp936ext_page0420[wc-0x2100];
-    else if (wc >= 0x2208 && wc < 0x22c0)
-      c = cp936ext_page0441[wc-0x2208];
-    else if (wc == 0x2312)
-      c = 0xa1d0;
-    else if (wc >= 0x2460 && wc < 0x24a0)
-      c = cp936ext_page048c[wc-0x2460];
-    else if (wc >= 0x2500 && wc < 0x25e8)
-      c = cp936ext_page04a0[wc-0x2500];
-    else if (wc >= 0x2600 && wc < 0x2648)
-      c = cp936ext_page04c0[wc-0x2600];
-    else if (wc >= 0x3000 && wc < 0x3130)
-      c = cp936ext_page0600[wc-0x3000];
-    else if (wc >= 0x3220 && wc < 0x3238)
-      c = cp936ext_page0644[wc-0x3220];
-    else if (wc == 0x32a3)
-      c = 0xa949;
-    else if (wc >= 0x3388 && wc < 0x33d8)
-      c = cp936ext_page0671[wc-0x3388];
-    else if (wc >= 0x4e00 && wc < 0x9fa8)
-      c = cp936ext_page09c0[wc-0x4e00];
-    else if (wc == 0xf92c)
-      c = 0xfd9c;
-    else if (wc >= 0xf978 && wc < 0xf998)
-      c = cp936ext_page1f2f[wc-0xf978];
-    else if (wc >= 0xf9e0 && wc < 0xf9f8)
-      c = cp936ext_page1f3c[wc-0xf9e0];
-    else if (wc >= 0xfa08 && wc < 0xfa30)
-      c = cp936ext_page1f41[wc-0xfa08];
-    else if (wc >= 0xfe30 && wc < 0xfe70)
-      c = cp936ext_page1fc6[wc-0xfe30];
-    else if (wc >= 0xff00 && wc < 0xff60)
-      c = cp936ext_page1fe0[wc-0xff00];
-    else if (wc >= 0xffe0 && wc < 0xffe8)
-      c = cp936ext_page1ffc[wc-0xffe0];
-    if (c != 0) {
-      r[0] = (c >> 8); r[1] = (c & 0xff);
-      return 2;
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
-
-#endif /* CP936 */
-
-#endif /* __APPLE__  WIN32 */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/gb2312.h
+++ /dev/null
@@ -1,2556 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/gb2312.h,v 1.5 2003/05/27 22:26:29 tsi Exp $ */
-
-/*
- * GB2312.1980-0
- */
-#ifdef NEED_TOWC
-static const unsigned short gb2312_2uni_page21[831] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0x30fb, 0x02c9, 0x02c7, 0x00a8, 0x3003,
-  0x3005, 0x2015, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1,
-  0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a,
-  0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312,
-  0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d,
-  0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4,
-  0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb,
-  0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2,
-  0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013,
-  /* 0x22 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f,
-  0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497,
-  0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477,
-  0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f,
-  0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487,
-  0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467,
-  0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223,
-  0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd,
-  0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167,
-  0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd,
-  /* 0x23 */
-  0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0x24 */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x25 */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8,
-  0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2,
-  0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc,
-  0x00fc, 0x00ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108,
-  0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110,
-  0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118,
-  0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x29 */
-  0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504,
-  0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c,
-  0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514,
-  0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c,
-  0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524,
-  0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c,
-  0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c,
-  0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544,
-  0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b,
-};
-static const unsigned short gb2312_2uni_page30[6768] = {
-  /* 0x30 */
-  0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691,
-  0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d,
-  0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848,
-  0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884,
-  0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed,
-  0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776,
-  0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf,
-  0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed,
-  0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc,
-  0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886,
-  0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d,
-  0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265,
-  /* 0x31 */
-  0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5,
-  0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351,
-  0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907,
-  0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29,
-  0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4,
-  0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9,
-  0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5,
-  0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16,
-  0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab,
-  0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b,
-  0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175,
-  0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3,
-  /* 0x32 */
-  0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2,
-  0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236,
-  0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa,
-  0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016,
-  0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29,
-  0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b,
-  0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf,
-  0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7,
-  0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336,
-  0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6,
-  0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20,
-  0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316,
-  /* 0x33 */
-  0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e,
-  0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632,
-  0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3,
-  0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1,
-  0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59,
-  0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f,
-  0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60,
-  0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64,
-  0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0,
-  0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7,
-  0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8,
-  0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a,
-  /* 0x34 */
-  0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd,
-  0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97,
-  0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524,
-  0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822,
-  0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148,
-  0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471,
-  0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07,
-  0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106,
-  0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb,
-  0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54,
-  0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26,
-  0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e,
-  /* 0x35 */
-  0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6,
-  0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb,
-  0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48,
-  0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053,
-  0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49,
-  0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c,
-  0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730,
-  0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382,
-  0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43,
-  0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc,
-  0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc,
-  0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0,
-  /* 0x36 */
-  0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a,
-  0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b,
-  0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661,
-  0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec,
-  0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6,
-  0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e,
-  0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566,
-  0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a,
-  0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0,
-  0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25,
-  0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c,
-  0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c,
-  /* 0x37 */
-  0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5,
-  0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492,
-  0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af,
-  0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632,
-  0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561,
-  0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8,
-  0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f,
-  0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa,
-  0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af,
-  0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b,
-  0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90,
-  0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d,
-  /* 0x38 */
-  0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85,
-  0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74,
-  0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236,
-  0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490,
-  0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89,
-  0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f,
-  0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b,
-  0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f,
-  0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c,
-  0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b,
-  0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9,
-  0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9,
-  /* 0x39 */
-  0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a,
-  0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1,
-  0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2,
-  0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30,
-  0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37,
-  0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250,
-  0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173,
-  0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c,
-  0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845,
-  0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842,
-  0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505,
-  0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8,
-  /* 0x3a */
-  0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163,
-  0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a,
-  0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a,
-  0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a,
-  0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d,
-  0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2,
-  0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a,
-  0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8,
-  0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f,
-  0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c,
-  0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6,
-  0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56,
-  /* 0x3b */
-  0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1,
-  0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd,
-  0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853,
-  0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115,
-  0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757,
-  0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d,
-  0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de,
-  0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd,
-  0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f,
-  0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b,
-  0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e,
-  0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95,
-  /* 0x3c */
-  0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9,
-  0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca,
-  0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0,
-  0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d,
-  0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2,
-  0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939,
-  0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be,
-  0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1,
-  0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270,
-  0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3,
-  0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274,
-  0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6,
-  /* 0x3d */
-  0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa,
-  0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868,
-  0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901,
-  0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc,
-  0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a,
-  0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb,
-  0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a,
-  0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01,
-  0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f,
-  0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1,
-  0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb,
-  0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78,
-  /* 0x3e */
-  0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8,
-  0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f,
-  0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756,
-  0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0,
-  0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551,
-  0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8,
-  0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9,
-  0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd,
-  0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350,
-  0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b,
-  0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd,
-  0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb,
-  /* 0x3f */
-  0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361,
-  0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a,
-  0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b,
-  0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777,
-  0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3,
-  0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543,
-  0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7,
-  0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6,
-  0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef,
-  0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50,
-  0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4,
-  0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080,
-  /* 0x40 */
-  0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec,
-  0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a,
-  0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f,
-  0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8,
-  0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca,
-  0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c,
-  0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d,
-  0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b,
-  0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece,
-  0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4,
-  0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1,
-  0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0,
-  /* 0x41 */
-  0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9,
-  0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f,
-  0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae,
-  0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e,
-  0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5,
-  0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217,
-  0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716,
-  0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce,
-  0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc,
-  0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409,
-  0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3,
-  0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf,
-  /* 0x42 */
-  0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3,
-  0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3,
-  0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42,
-  0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415,
-  0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f,
-  0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6,
-  0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1,
-  0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523,
-  0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988,
-  0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417,
-  0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992,
-  0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b,
-  /* 0x43 */
-  0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b,
-  0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192,
-  0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176,
-  0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e,
-  0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c,
-  0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f,
-  0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8,
-  0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5,
-  0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf,
-  0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d,
-  0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f,
-  0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478,
-  /* 0x44 */
-  0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9,
-  0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c,
-  0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd,
-  0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766,
-  0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c,
-  0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537,
-  0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462,
-  0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5,
-  0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b,
-  0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f,
-  0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d,
-  0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81,
-  /* 0x45 */
-  0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53,
-  0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650,
-  0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25,
-  0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c,
-  0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43,
-  0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224,
-  0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486,
-  0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9,
-  0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6,
-  0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c,
-  0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812,
-  0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7,
-  /* 0x46 */
-  0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41,
-  0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2,
-  0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058,
-  0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4,
-  0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb,
-  0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9,
-  0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd,
-  0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4,
-  0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566,
-  0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77,
-  0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14,
-  0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390,
-  /* 0x47 */
-  0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1,
-  0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d,
-  0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49,
-  0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2,
-  0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8,
-  0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207,
-  0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6,
-  0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752,
-  0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30,
-  0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18,
-  0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a,
-  0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20,
-  /* 0x48 */
-  0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743,
-  0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d,
-  0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0,
-  0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4,
-  0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed,
-  0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203,
-  0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9,
-  0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9,
-  0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1,
-  0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e,
-  0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428,
-  0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1,
-  /* 0x49 */
-  0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b,
-  0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802,
-  0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b,
-  0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b,
-  0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247,
-  0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a,
-  0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6,
-  0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c,
-  0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe,
-  0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5,
-  0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17,
-  0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3,
-  /* 0x4a */
-  0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee,
-  0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe,
-  0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2,
-  0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16,
-  0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc,
-  0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02,
-  0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88,
-  0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2,
-  0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f,
-  0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72,
-  0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f,
-  0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31,
-  /* 0x4b */
-  0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813,
-  0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e,
-  0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1,
-  0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b,
-  0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3,
-  0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5,
-  0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20,
-  0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083,
-  0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3,
-  0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f,
-  0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501,
-  0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854,
-  /* 0x4c */
-  0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0,
-  0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a,
-  0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08,
-  0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64,
-  0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018,
-  0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6,
-  0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279,
-  0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511,
-  0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5,
-  0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c,
-  0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3,
-  0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3,
-  /* 0x4d */
-  0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a,
-  0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876,
-  0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f,
-  0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60,
-  0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f,
-  0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258,
-  0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3,
-  0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c,
-  0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38,
-  0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b,
-  0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51,
-  0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01,
-  /* 0x4e */
-  0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f,
-  0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f,
-  0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3,
-  0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b,
-  0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33,
-  0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1,
-  0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c,
-  0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7,
-  0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e,
-  0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff,
-  0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852,
-  0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a,
-  /* 0x4f */
-  0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184,
-  0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60,
-  0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6,
-  0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0,
-  0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148,
-  0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2,
-  0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf,
-  0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8,
-  0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4,
-  0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61,
-  0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee,
-  0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653,
-  /* 0x50 */
-  0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954,
-  0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa,
-  0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8,
-  0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23,
-  0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165,
-  0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c,
-  0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8,
-  0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d,
-  0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700,
-  0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9,
-  0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed,
-  0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384,
-  /* 0x51 */
-  0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74,
-  0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb,
-  0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5,
-  0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259,
-  0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6,
-  0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814,
-  0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf,
-  0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5,
-  0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a,
-  0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f,
-  0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b,
-  0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476,
-  /* 0x52 */
-  0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200,
-  0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce,
-  0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b,
-  0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d,
-  0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0,
-  0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a,
-  0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091,
-  0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6,
-  0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3,
-  0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335,
-  0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6,
-  0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690,
-  /* 0x53 */
-  0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9,
-  0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71,
-  0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8,
-  0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38,
-  0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24,
-  0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709,
-  0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2,
-  0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59,
-  0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88,
-  0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd,
-  0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea,
-  0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89,
-  /* 0x54 */
-  0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a,
-  0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed,
-  0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f,
-  0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3,
-  0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300,
-  0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55,
-  0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d,
-  0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f,
-  0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1,
-  0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23,
-  0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe,
-  0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67,
-  /* 0x55 */
-  0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8,
-  0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb,
-  0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d,
-  0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd,
-  0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756,
-  0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db,
-  0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087,
-  0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517,
-  0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827,
-  0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707,
-  0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0,
-  0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f,
-  /* 0x56 */
-  0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431,
-  0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c,
-  0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307,
-  0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7,
-  0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9,
-  0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d,
-  0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd,
-  0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5,
-  0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4,
-  0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010,
-  0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457,
-  0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51,
-  /* 0x57 */
-  0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13,
-  0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5,
-  0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58,
-  0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c,
-  0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179,
-  0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4,
-  0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5,
-  0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f,
-  0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b,
-  0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a,
-  0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750,
-  0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x58 */
-  0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98,
-  0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315,
-  0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997,
-  0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69,
-  0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d,
-  0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326,
-  0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e,
-  0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c,
-  0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54,
-  0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede,
-  0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09,
-  0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d,
-  /* 0x59 */
-  0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89,
-  0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94,
-  0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1,
-  0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e,
-  0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043,
-  0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9,
-  0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107,
-  0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46,
-  0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9,
-  0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156,
-  0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34,
-  0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc,
-  /* 0x5a */
-  0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa,
-  0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce,
-  0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf,
-  0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6,
-  0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c,
-  0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b,
-  0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a,
-  0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369,
-  0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c,
-  0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674,
-  0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099,
-  0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba,
-  /* 0x5b */
-  0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7,
-  0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef,
-  0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139,
-  0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be,
-  0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4,
-  0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c,
-  0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c,
-  0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742,
-  0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d,
-  0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7,
-  0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2,
-  0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd,
-  /* 0x5c */
-  0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844,
-  0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8,
-  0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8,
-  0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be,
-  0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb,
-  0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4,
-  0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307,
-  0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311,
-  0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351,
-  0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b,
-  0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317,
-  0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365,
-  /* 0x5d */
-  0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0,
-  0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385,
-  0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e,
-  0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807,
-  0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411,
-  0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea,
-  0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a,
-  0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c,
-  0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1,
-  0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba,
-  0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c,
-  0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a,
-  /* 0x5e */
-  0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564,
-  0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8,
-  0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7,
-  0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629,
-  0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955,
-  0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c,
-  0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322,
-  0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a,
-  0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc,
-  0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452,
-  0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c,
-  0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496,
-  /* 0x5f */
-  0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7,
-  0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519,
-  0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412,
-  0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443,
-  0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477,
-  0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d,
-  0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3,
-  0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9,
-  0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de,
-  0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523,
-  0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549,
-  0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c,
-  /* 0x60 */
-  0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c,
-  0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f,
-  0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594,
-  0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec,
-  0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3,
-  0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608,
-  0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d,
-  0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c,
-  0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c,
-  0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5,
-  0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f,
-  0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c,
-  /* 0x61 */
-  0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a,
-  0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a,
-  0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3,
-  0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02,
-  0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b,
-  0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d,
-  0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d,
-  0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89,
-  0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc,
-  0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3,
-  0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2,
-  0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa,
-  /* 0x62 */
-  0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315,
-  0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d,
-  0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7,
-  0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b,
-  0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a,
-  0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91,
-  0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3,
-  0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4,
-  0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4,
-  0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035,
-  0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f,
-  0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042,
-  /* 0x63 */
-  0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092,
-  0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6,
-  0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100,
-  0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7,
-  0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3,
-  0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608,
-  0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616,
-  0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54,
-  0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68,
-  0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad,
-  0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa,
-  0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe,
-  /* 0x64 */
-  0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19,
-  0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52,
-  0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93,
-  0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5,
-  0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9,
-  0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b,
-  0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44,
-  0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7,
-  0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2,
-  0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f,
-  0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d,
-  0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1,
-  /* 0x65 */
-  0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde,
-  0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f,
-  0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f,
-  0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07,
-  0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6,
-  0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d,
-  0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051,
-  0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074,
-  0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56,
-  0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66,
-  0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e,
-  0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3,
-  /* 0x66 */
-  0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af,
-  0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8,
-  0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13,
-  0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec,
-  0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2,
-  0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8,
-  0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15,
-  0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75,
-  0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85,
-  0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b,
-  0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7,
-  0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9,
-  /* 0x67 */
-  0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb,
-  0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8,
-  0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa,
-  0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b,
-  0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b,
-  0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27,
-  0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32,
-  0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e,
-  0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7,
-  0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a,
-  0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b,
-  0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c,
-  /* 0x68 */
-  0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477,
-  0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b,
-  0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea,
-  0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5,
-  0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e,
-  0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a,
-  0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd,
-  0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832,
-  0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883,
-  0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a,
-  0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b,
-  0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9,
-  /* 0x69 */
-  0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971,
-  0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998,
-  0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966,
-  0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4,
-  0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff,
-  0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e,
-  0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28,
-  0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337,
-  0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d,
-  0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72,
-  0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c,
-  0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b,
-  /* 0x6a */
-  0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217,
-  0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7,
-  0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee,
-  0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600,
-  0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006,
-  0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677,
-  0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6,
-  0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45,
-  0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7,
-  0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e,
-  0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b,
-  0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0,
-  /* 0x6b */
-  0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9,
-  0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a,
-  0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b,
-  0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c,
-  0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4,
-  0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4,
-  0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4,
-  0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a,
-  0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153,
-  0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d,
-  0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5,
-  0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb,
-  /* 0x6c */
-  0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59,
-  0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40,
-  0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4,
-  0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096,
-  0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca,
-  0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168,
-  0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5,
-  0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228,
-  0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248,
-  0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953,
-  0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985,
-  0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0,
-  /* 0x6d */
-  0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab,
-  0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206,
-  0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800,
-  0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d,
-  0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823,
-  0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847,
-  0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1,
-  0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec,
-  0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b,
-  0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707,
-  0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738,
-  0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768,
-  /* 0x6e */
-  0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791,
-  0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e,
-  0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61,
-  0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e,
-  0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a,
-  0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a,
-  0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac,
-  0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9,
-  0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca,
-  0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5,
-  0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0,
-  0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea,
-  /* 0x6f */
-  0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7,
-  0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507,
-  0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514,
-  0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522,
-  0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536,
-  0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544,
-  0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553,
-  0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f,
-  0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568,
-  0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573,
-  0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb,
-  0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14,
-  /* 0x70 */
-  0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e,
-  0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22,
-  0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36,
-  0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44,
-  0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51,
-  0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66,
-  0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d,
-  0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3,
-  0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2,
-  0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7,
-  0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c,
-  0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619,
-  /* 0x71 */
-  0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f,
-  0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c,
-  0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80,
-  0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad,
-  0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2,
-  0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5,
-  0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919,
-  0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966,
-  0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014,
-  0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029,
-  0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052,
-  0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883,
-  /* 0x72 */
-  0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e,
-  0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c,
-  0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b,
-  0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6,
-  0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9,
-  0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0,
-  0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707,
-  0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e,
-  0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729,
-  0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760,
-  0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764,
-  0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2,
-  /* 0x73 */
-  0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5,
-  0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0,
-  0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe,
-  0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44,
-  0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15,
-  0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e,
-  0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58,
-  0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b,
-  0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac,
-  0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4,
-  0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea,
-  0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b,
-  /* 0x74 */
-  0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201,
-  0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d,
-  0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e,
-  0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e,
-  0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7,
-  0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c,
-  0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc,
-  0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf,
-  0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3,
-  0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4,
-  0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47,
-  0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164,
-  /* 0x75 */
-  0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172,
-  0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2,
-  0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba,
-  0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5,
-  0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde,
-  0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3,
-  0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f,
-  0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35,
-  0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a,
-  0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94,
-  0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98,
-  0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc,
-  /* 0x76 */
-  0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3,
-  0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d,
-  0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88,
-  0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc,
-  0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8,
-  0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82,
-  0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90,
-  0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f,
-  0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8,
-  0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3,
-  0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd,
-  0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb,
-  /* 0x77 */
-  0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5,
-  0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c,
-  0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2,
-  0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc,
-  0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45,
-  0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d,
-  0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb,
-  0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23,
-  0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92,
-  0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf,
-  0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c,
-  0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44,
-};
-
-static int
-gb2312_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x29) || (c1 >= 0x30 && c1 <= 0x77)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 831)
-            wc = gb2312_2uni_page21[i];
-        } else {
-          if (i < 8178)
-            wc = gb2312_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short gb2312_2charset[7445] = {
-  0x2168, 0x216c, 0x2127, 0x2163, 0x2140, 0x2141, 0x2824, 0x2822,
-  0x2828, 0x2826, 0x283a, 0x282c, 0x282a, 0x2830, 0x282e, 0x2142,
-  0x2834, 0x2832, 0x2839, 0x2821, 0x2825, 0x2827, 0x2829, 0x282d,
-  0x2831, 0x2823, 0x282b, 0x282f, 0x2833, 0x2835, 0x2836, 0x2837,
-  0x2838, 0x2126, 0x2125, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625,
-  0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d,
-  0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635,
-  0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645,
-  0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d,
-  0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655,
-  0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724,
-  0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d,
-  0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735,
-  0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d,
-  0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754,
-  0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d,
-  0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765,
-  0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d,
-  0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x212a, 0x212c, 0x212e,
-  0x212f, 0x2130, 0x2131, 0x212d, 0x216b, 0x2164, 0x2165, 0x2179,
-  0x2166, 0x216d, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 0x2276,
-  0x2277, 0x2278, 0x2279, 0x227a, 0x227b, 0x227c, 0x217b, 0x217c,
-  0x217a, 0x217d, 0x214a, 0x2147, 0x2146, 0x214c, 0x2158, 0x215e,
-  0x214f, 0x214e, 0x2144, 0x2145, 0x2149, 0x2148, 0x2152, 0x2153,
-  0x2160, 0x215f, 0x2143, 0x214b, 0x2157, 0x2156, 0x2155, 0x2159,
-  0x2154, 0x215c, 0x215d, 0x215a, 0x215b, 0x2151, 0x214d, 0x2150,
-  0x2259, 0x225a, 0x225b, 0x225c, 0x225d, 0x225e, 0x225f, 0x2260,
-  0x2261, 0x2262, 0x2245, 0x2246, 0x2247, 0x2248, 0x2249, 0x224a,
-  0x224b, 0x224c, 0x224d, 0x224e, 0x224f, 0x2250, 0x2251, 0x2252,
-  0x2253, 0x2254, 0x2255, 0x2256, 0x2257, 0x2258, 0x2231, 0x2232,
-  0x2233, 0x2234, 0x2235, 0x2236, 0x2237, 0x2238, 0x2239, 0x223a,
-  0x223b, 0x223c, 0x223d, 0x223e, 0x223f, 0x2240, 0x2241, 0x2242,
-  0x2243, 0x2244, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929,
-  0x292a, 0x292b, 0x292c, 0x292d, 0x292e, 0x292f, 0x2930, 0x2931,
-  0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939,
-  0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941,
-  0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949,
-  0x294a, 0x294b, 0x294c, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951,
-  0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959,
-  0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961,
-  0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969,
-  0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f, 0x2176, 0x2175,
-  0x2178, 0x2177, 0x2174, 0x2173, 0x2170, 0x2172, 0x2171, 0x216f,
-  0x216e, 0x2162, 0x2161, 0x2121, 0x2122, 0x2123, 0x2128, 0x2129,
-  0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b,
-  0x213e, 0x213f, 0x217e, 0x2132, 0x2133, 0x213c, 0x213d, 0x2421,
-  0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429,
-  0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431,
-  0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439,
-  0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441,
-  0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449,
-  0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451,
-  0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459,
-  0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471,
-  0x2472, 0x2473, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526,
-  0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e,
-  0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536,
-  0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e,
-  0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546,
-  0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e,
-  0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
-  0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566,
-  0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e,
-  0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576,
-  0x2124, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b,
-  0x284c, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853,
-  0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b,
-  0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863,
-  0x2864, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, 0x2265, 0x2266,
-  0x2267, 0x2268, 0x2269, 0x226a, 0x226b, 0x226c, 0x226d, 0x226e,
-  0x523b, 0x3621, 0x465f, 0x4d72, 0x5549, 0x487d, 0x494f, 0x4f42,
-  0x5822, 0x323b, 0x536b, 0x5824, 0x3373, 0x5728, 0x4752, 0x5827,
-  0x4a40, 0x4770, 0x317b, 0x5235, 0x3454, 0x362b, 0x4b3f, 0x5829,
-  0x362a, 0x413d, 0x514f, 0x4925, 0x582d, 0x3876, 0x513e, 0x635c,
-  0x5650, 0x3761, 0x342e, 0x4159, 0x583c, 0x4d68, 0x3524, 0x4e2a,
-  0x5677, 0x4076, 0x3e59, 0x582f, 0x444b, 0x3e43, 0x5831, 0x4334,
-  0x5265, 0x562e, 0x4e5a, 0x5527, 0x3a75, 0x3726, 0x4056, 0x4639,
-  0x4552, 0x4747, 0x3954, 0x334b, 0x5252, 0x583f, 0x3e45, 0x4672,
-  0x5232, 0x4f30, 0x4f67, 0x4a69, 0x5840, 0x4272, 0x4252, 0x4869,
-  0x472c, 0x414b, 0x5368, 0x5579, 0x4a42, 0x367e, 0x5821, 0x535a,
-  0x3f77, 0x5446, 0x3b25, 0x5841, 0x4e65, 0x3e2e, 0x5828, 0x5147,
-  0x5029, 0x583d, 0x596f, 0x4d76, 0x3f3a, 0x3d3b, 0x3a25, 0x5260,
-  0x327a, 0x3a60, 0x4436, 0x4f6d, 0x3e29, 0x4d24, 0x4141, 0x4757,
-  0x5971, 0x5974, 0x484b, 0x5869, 0x525a, 0x4a32, 0x484a, 0x586c,
-  0x586a, 0x5846, 0x3d76, 0x464d, 0x3370, 0x586b, 0x3d71, 0x3d69,
-  0x4854, 0x3453, 0x4258, 0x3256, 0x5750, 0x4a4b, 0x4b7b, 0x554c,
-  0x3836, 0x4f49, 0x595a, 0x5870, 0x472a, 0x586e, 0x347a, 0x416e,
-  0x5254, 0x586d, 0x5247, 0x586f, 0x4347, 0x5176, 0x5659, 0x5872,
-  0x5875, 0x3c7e, 0x3c5b, 0x484e, 0x375d, 0x3742, 0x4673, 0x5878,
-  0x5241, 0x4e69, 0x3c3f, 0x377c, 0x3725, 0x505d, 0x565a, 0x5345,
-  0x3b6f, 0x3b61, 0x5871, 0x4921, 0x4e30, 0x342b, 0x5873, 0x494b,
-  0x5876, 0x4257, 0x5877, 0x4e31, 0x5879, 0x322e, 0x3940, 0x5923,
-  0x3069, 0x4166, 0x496c, 0x4b45, 0x4b46, 0x5924, 0x3568, 0x352b,
-  0x4e3b, 0x354d, 0x5721, 0x5774, 0x5353, 0x4c65, 0x3a4e, 0x5922,
-  0x595c, 0x5360, 0x587d, 0x3770, 0x5777, 0x587e, 0x587a, 0x5921,
-  0x4463, 0x5336, 0x5874, 0x595d, 0x587b, 0x4565, 0x4050, 0x5170,
-  0x305b, 0x3c51, 0x5926, 0x5925, 0x592c, 0x592e, 0x592b, 0x4a39,
-  0x5929, 0x5636, 0x335e, 0x5928, 0x407d, 0x4a4c, 0x592a, 0x5927,
-  0x5930, 0x3631, 0x3929, 0x5240, 0x4f40, 0x4242, 0x3d44, 0x556c,
-  0x3260, 0x4748, 0x3f6b, 0x592d, 0x592f, 0x4e6a, 0x3a6e, 0x4756,
-  0x3163, 0x3459, 0x366d, 0x5934, 0x3f21, 0x595e, 0x474e, 0x407e,
-  0x5938, 0x4b57, 0x377d, 0x5935, 0x5937, 0x3123, 0x5361, 0x5939,
-  0x5045, 0x5936, 0x5931, 0x5932, 0x4129, 0x5933, 0x3c73, 0x505e,
-  0x3829, 0x3e63, 0x593d, 0x593a, 0x3033, 0x5942, 0x5944, 0x3136,
-  0x593f, 0x3539, 0x3e73, 0x4c48, 0x3a72, 0x5250, 0x5943, 0x3d68,
-  0x332b, 0x5945, 0x3e6b, 0x5946, 0x593b, 0x445f, 0x593e, 0x5941,
-  0x5940, 0x552e, 0x5635, 0x4763, 0x5948, 0x3c59, 0x594a, 0x593c,
-  0x594b, 0x462b, 0x5949, 0x5776, 0x4d23, 0x3d21, 0x594c, 0x453c,
-  0x4d35, 0x594d, 0x5947, 0x3325, 0x3f7e, 0x3835, 0x407c, 0x3078,
-  0x3476, 0x594e, 0x594f, 0x3422, 0x5950, 0x345f, 0x3041, 0x5951,
-  0x4935, 0x4f71, 0x5952, 0x4145, 0x5956, 0x492e, 0x5955, 0x5954,
-  0x5957, 0x4b5b, 0x3d29, 0x4627, 0x5953, 0x5958, 0x5959, 0x4865,
-  0x405c, 0x3679, 0x5823, 0x544a, 0x542a, 0x5056, 0x3364, 0x5557,
-  0x4f48, 0x3962, 0x3f4b, 0x4362, 0x3652, 0x4d43, 0x596e, 0x5970,
-  0x3533, 0x3635, 0x3e24, 0x486b, 0x482b, 0x304b, 0x392b, 0x4179,
-  0x5962, 0x403c, 0x3932, 0x3958, 0x504b, 0x3178, 0x4664, 0x3e5f,
-  0x3564, 0x5748, 0x5178, 0x3c66, 0x4a5e, 0x3c3d, 0x5966, 0x5867,
-  0x445a, 0x3854, 0x483d, 0x3261, 0x5459, 0x4330, 0x4361, 0x5a22,
-  0x485f, 0x5034, 0x3e7c, 0x4529, 0x395a, 0x5a23, 0x5429, 0x5a24,
-  0x597b, 0x362c, 0x376b, 0x3179, 0x597c, 0x3365, 0x3e76, 0x3f76,
-  0x5231, 0x4064, 0x3633, 0x597e, 0x597d, 0x3e3b, 0x4660, 0x573c,
-  0x5a21, 0x4139, 0x3572, 0x4168, 0x3c75, 0x3455, 0x415d, 0x447d,
-  0x3c38, 0x3732, 0x376f, 0x596c, 0x463e, 0x3f2d, 0x3b4b, 0x354a,
-  0x5b49, 0x5057, 0x4d39, 0x303c, 0x3376, 0x3b77, 0x5b4a, 0x3a2f,
-  0x5464, 0x3536, 0x3573, 0x5856, 0x4850, 0x3756, 0x4750, 0x5857,
-  0x3f2f, 0x5b3b, 0x5858, 0x504c, 0x3b2e, 0x6b3e, 0x4150, 0x4175,
-  0x5472, 0x3855, 0x3434, 0x3375, 0x493e, 0x4550, 0x4559, 0x407b,
-  0x3170, 0x5859, 0x394e, 0x353d, 0x585a, 0x5646, 0x4b22, 0x482f,
-  0x4932, 0x344c, 0x3f4c, 0x3974, 0x585b, 0x585c, 0x3667, 0x3c41,
-  0x4c6a, 0x4f77, 0x585d, 0x4730, 0x3950, 0x3d23, 0x4c5e, 0x464a,
-  0x5860, 0x585e, 0x585f, 0x307e, 0x3e67, 0x4a23, 0x3c74, 0x3831,
-  0x386e, 0x5862, 0x3d4b, 0x5864, 0x5863, 0x457c, 0x5865, 0x5866,
-  0x4126, 0x4830, 0x306c, 0x3926, 0x3c53, 0x4e71, 0x5b3d, 0x4153,
-  0x362f, 0x567a, 0x452c, 0x3d59, 0x5b3e, 0x5b3f, 0x4078, 0x3e22,
-  0x404d, 0x5b40, 0x4a46, 0x322a, 0x5342, 0x4363, 0x512b, 0x5b42,
-  0x4055, 0x5b43, 0x3f31, 0x443c, 0x475a, 0x5b44, 0x5968, 0x4957,
-  0x3934, 0x4e70, 0x5448, 0x307c, 0x3452, 0x5059, 0x5969, 0x5e4b,
-  0x596b, 0x5830, 0x3b2f, 0x3131, 0x3357, 0x584e, 0x5451, 0x3d33,
-  0x3f6f, 0x4f3b, 0x5850, 0x374b, 0x5851, 0x4625, 0x4778, 0x523d,
-  0x5852, 0x4464, 0x4a2e, 0x4727, 0x5826, 0x497d, 0x4e67, 0x3b5c,
-  0x306b, 0x3b2a, 0x502d, 0x3130, 0x5764, 0x573f, 0x3525, 0x4274,
-  0x444f, 0x3229, 0x3237, 0x3165, 0x5f32, 0x553c, 0x3f28, 0x422c,
-  0x5855, 0x4231, 0x5854, 0x4e54, 0x5a60, 0x4e40, 0x5834, 0x432e,
-  0x5321, 0x4e23, 0x3c34, 0x4834, 0x4251, 0x3e6d, 0x5036, 0x5a61,
-  0x4764, 0x3327, 0x3672, 0x4c7c, 0x407a, 0x4077, 0x5139, 0x5161,
-  0x5847, 0x325e, 0x4065, 0x3a71, 0x5848, 0x542d, 0x4f61, 0x5849,
-  0x584a, 0x4f43, 0x3378, 0x3e47, 0x584b, 0x5b4c, 0x4825, 0x4f58,
-  0x487e, 0x324e, 0x5356, 0x3266, 0x3c30, 0x5351, 0x4b2b, 0x3734,
-  0x3722, 0x4a65, 0x4821, 0x4a5c, 0x3164, 0x5070, 0x4551, 0x5b45,
-  0x357e, 0x3f5a, 0x3945, 0x3e64, 0x416d, 0x5f36, 0x5f35, 0x563b,
-  0x3d50, 0x5559, 0x3048, 0x3623, 0x3f49, 0x4c28, 0x5f33, 0x4a37,
-  0x5352, 0x584f, 0x5236, 0x3a45, 0x4b3e, 0x4c3e, 0x5f37, 0x3570,
-  0x5f34, 0x5375, 0x3354, 0x3877, 0x5f3a, 0x3a4f, 0x3c2a, 0x3575,
-  0x4d2c, 0x437b, 0x3a73, 0x4074, 0x4d42, 0x4f72, 0x5f38, 0x4f45,
-  0x4240, 0x5f39, 0x4270, 0x3e7d, 0x415f, 0x4d4c, 0x5277, 0x374d,
-  0x5f41, 0x5f44, 0x3771, 0x3049, 0x3656, 0x3754, 0x3a2c, 0x4c7d,
-  0x3f54, 0x4b31, 0x4674, 0x5628, 0x5f45, 0x4e62, 0x3333, 0x4e7c,
-  0x3435, 0x4e47, 0x3a70, 0x4e61, 0x513d, 0x5f40, 0x3474, 0x334a,
-  0x3866, 0x5f3b, 0x4445, 0x5f3c, 0x5f3d, 0x5f3e, 0x453b, 0x5f3f,
-  0x5f42, 0x5431, 0x5f43, 0x473a, 0x4e58, 0x4458, 0x5f4a, 0x5f4f,
-  0x565c, 0x5f49, 0x5f5a, 0x4e36, 0x3a47, 0x5f4e, 0x5f48, 0x455e,
-  0x496b, 0x3a74, 0x437c, 0x3e57, 0x5f46, 0x5f4d, 0x4558, 0x5526,
-  0x3a4d, 0x3e4c, 0x533d, 0x3840, 0x5664, 0x5f47, 0x393e, 0x3f27,
-  0x417c, 0x5f4b, 0x5f4c, 0x5f50, 0x5f5b, 0x5f65, 0x5f57, 0x5f56,
-  0x5749, 0x5f63, 0x5f64, 0x656b, 0x5227, 0x5f52, 0x3f29, 0x545b,
-  0x3f48, 0x5f54, 0x4f4c, 0x5f5d, 0x514a, 0x5f5e, 0x3027, 0x4637,
-  0x5f53, 0x3a65, 0x365f, 0x4d5b, 0x397e, 0x5455, 0x5f5f, 0x4f6c,
-  0x3025, 0x5f67, 0x5f51, 0x5146, 0x5f55, 0x5f58, 0x5f59, 0x5f5c,
-  0x3b29, 0x5f60, 0x5f61, 0x5f62, 0x5f66, 0x5f68, 0x5334, 0x3867,
-  0x4536, 0x5f6a, 0x495a, 0x4128, 0x4444, 0x3f5e, 0x4f78, 0x555c,
-  0x5f6e, 0x3238, 0x3a5f, 0x5f6c, 0x5b41, 0x5164, 0x4b74, 0x343d,
-  0x3026, 0x5f71, 0x4c46, 0x5f72, 0x5f6d, 0x5f69, 0x5f6b, 0x5f6f,
-  0x5f70, 0x3b3d, 0x5f73, 0x5f74, 0x3b23, 0x4a5b, 0x4e28, 0x6027,
-  0x332a, 0x6026, 0x6021, 0x5f7e, 0x4d59, 0x5f7c, 0x5f7a, 0x3f50,
-  0x5744, 0x494c, 0x5f78, 0x3021, 0x5f7d, 0x5f7b, 0x6022, 0x6028,
-  0x3748, 0x4621, 0x4936, 0x4032, 0x5f75, 0x453e, 0x5844, 0x5f79,
-  0x4476, 0x6023, 0x6024, 0x6025, 0x5025, 0x6034, 0x4c64, 0x6031,
-  0x3f26, 0x602f, 0x4e39, 0x602b, 0x4946, 0x402e, 0x602e, 0x3a6d,
-  0x3a30, 0x6029, 0x5f76, 0x6033, 0x6038, 0x342d, 0x6039, 0x4f32,
-  0x3a48, 0x6030, 0x507a, 0x602c, 0x547b, 0x5f77, 0x4567, 0x602d,
-  0x5377, 0x6036, 0x6037, 0x6044, 0x5061, 0x603c, 0x6049, 0x604a,
-  0x603e, 0x602a, 0x4924, 0x6041, 0x6032, 0x4a48, 0x6043, 0x6035,
-  0x4e4b, 0x4b43, 0x604d, 0x6046, 0x6042, 0x604b, 0x603a, 0x603f,
-  0x6040, 0x6045, 0x6047, 0x6048, 0x604c, 0x603b, 0x4b54, 0x6055,
-  0x6056, 0x6052, 0x6050, 0x3c4e, 0x6051, 0x3842, 0x5845, 0x506a,
-  0x426f, 0x604f, 0x603d, 0x6054, 0x6053, 0x6057, 0x605c, 0x6058,
-  0x5676, 0x3330, 0x576c, 0x4b3b, 0x605a, 0x4e7b, 0x3a59, 0x6061,
-  0x605d, 0x522d, 0x6062, 0x605b, 0x6059, 0x605f, 0x6060, 0x605e,
-  0x6064, 0x4677, 0x582c, 0x546b, 0x6066, 0x4a49, 0x6065, 0x3841,
-  0x6067, 0x6068, 0x6069, 0x6063, 0x3a3f, 0x4c67, 0x606a, 0x4f79,
-  0x606b, 0x4842, 0x3d40, 0x4452, 0x606c, 0x606d, 0x4774, 0x4b44,
-  0x606e, 0x3b58, 0x5836, 0x5272, 0x606f, 0x4d45, 0x365a, 0x6071,
-  0x5430, 0x4027, 0x3451, 0x4e27, 0x6070, 0x6072, 0x394c, 0x397a,
-  0x4d3c, 0x6073, 0x4654, 0x6074, 0x5432, 0x4826, 0x6076, 0x6075,
-  0x6077, 0x4d41, 0x4a25, 0x545a, 0x5b57, 0x5b59, 0x5b58, 0x3967,
-  0x5b5c, 0x5b5d, 0x3558, 0x5b5a, 0x5b5b, 0x3321, 0x5b5f, 0x3b78,
-  0x5637, 0x5b60, 0x3e79, 0x373b, 0x5b50, 0x4c2e, 0x3f32, 0x3b35,
-  0x5778, 0x3f53, 0x3f69, 0x3c61, 0x4c33, 0x5b5e, 0x3053, 0x4e6b,
-  0x3758, 0x5739, 0x4642, 0x4024, 0x4c39, 0x5b67, 0x5b61, 0x463a,
-  0x5b63, 0x5b68, 0x4577, 0x5b6a, 0x5b69, 0x3f40, 0x5b66, 0x5b65,
-  0x3439, 0x402c, 0x4222, 0x5b62, 0x5b64, 0x504d, 0x5b6d, 0x405d,
-  0x5b72, 0x3662, 0x5b73, 0x5b52, 0x3938, 0x542b, 0x5b6c, 0x3f51,
-  0x5b70, 0x5b51, 0x3566, 0x5b6b, 0x3f65, 0x5b6e, 0x5b71, 0x5b79,
-  0x3921, 0x3023, 0x4271, 0x3347, 0x5b6f, 0x5b78, 0x4652, 0x5b74,
-  0x5b75, 0x5b77, 0x5b76, 0x5b7e, 0x5372, 0x323a, 0x5b7d, 0x5c24,
-  0x5b7b, 0x5b7a, 0x5b7c, 0x4560, 0x3b79, 0x5c23, 0x5c25, 0x4c43,
-  0x3651, 0x5d40, 0x5c21, 0x5c22, 0x4735, 0x3669, 0x5c27, 0x5c26,
-  0x5c29, 0x3124, 0x354c, 0x3f30, 0x515f, 0x3642, 0x5c28, 0x4b7a,
-  0x6b73, 0x4b5c, 0x4b7e, 0x4c41, 0x487b, 0x5c2a, 0x4c6e, 0x5c2b,
-  0x5b53, 0x5c2f, 0x5c2c, 0x3e33, 0x4a7b, 0x5c2d, 0x494a, 0x4439,
-  0x473d, 0x5c2e, 0x5476, 0x5066, 0x442b, 0x3655, 0x5b54, 0x315a,
-  0x5b55, 0x5b56, 0x3a3e, 0x4840, 0x4a3f, 0x4849, 0x5733, 0x4979,
-  0x3f47, 0x3a78, 0x523c, 0x623a, 0x3426, 0x3138, 0x3834, 0x4f44,
-  0x5967, 0x4f26, 0x4d62, 0x596d, 0x3660, 0x5239, 0x393b, 0x6239,
-  0x6237, 0x3473, 0x4c6c, 0x4c2b, 0x3772, 0x5832, 0x516b, 0x3a3b,
-  0x4a27, 0x4d37, 0x5244, 0x3f64, 0x3c50, 0x3661, 0x5e45, 0x5e46,
-  0x5b3c, 0x5159, 0x4666, 0x444e, 0x376e, 0x375c, 0x3f7c, 0x5760,
-  0x4675, 0x313c, 0x5e48, 0x3d31, 0x4c57, 0x5e4a, 0x5e49, 0x356c,
-  0x495d, 0x3042, 0x452e, 0x452b, 0x444c, 0x3c69, 0x4b7d, 0x3a43,
-  0x6579, 0x4867, 0x657a, 0x4d7d, 0x5731, 0x383e, 0x4268, 0x4851,
-  0x657b, 0x364a, 0x3c4b, 0x517d, 0x6621, 0x436e, 0x6624, 0x657e,
-  0x6625, 0x4d57, 0x3741, 0x657c, 0x657d, 0x6623, 0x445d, 0x6628,
-  0x6627, 0x4343, 0x465e, 0x662a, 0x4437, 0x6622, 0x4a3c, 0x3d63,
-  0x3943, 0x6626, 0x5055, 0x4e2f, 0x6629, 0x6630, 0x5226, 0x3d2a,
-  0x662d, 0x662f, 0x4051, 0x524c, 0x3c27, 0x6631, 0x5276, 0x574b,
-  0x4d7e, 0x4d5e, 0x4226, 0x662b, 0x662c, 0x3d3f, 0x662e, 0x6633,
-  0x6632, 0x6636, 0x6638, 0x446f, 0x4448, 0x3e6a, 0x496f, 0x6637,
-  0x3670, 0x4364, 0x5369, 0x6634, 0x6635, 0x4822, 0x663d, 0x6639,
-  0x4645, 0x4d71, 0x663b, 0x663c, 0x3b69, 0x663e, 0x663a, 0x4037,
-  0x5324, 0x663f, 0x4974, 0x6643, 0x6644, 0x5076, 0x433d, 0x4344,
-  0x6642, 0x6641, 0x6647, 0x4f31, 0x6b74, 0x664a, 0x6645, 0x3c5e,
-  0x4929, 0x3c35, 0x4f53, 0x6648, 0x6649, 0x664e, 0x6650, 0x6651,
-  0x664b, 0x3555, 0x664c, 0x664f, 0x445b, 0x6646, 0x664d, 0x6652,
-  0x6654, 0x6653, 0x6655, 0x5978, 0x6656, 0x6657, 0x5753, 0x665d,
-  0x665e, 0x3f57, 0x5450, 0x5756, 0x3466, 0x4b6f, 0x665a, 0x5843,
-  0x574e, 0x5022, 0x434f, 0x665f, 0x3c3e, 0x3942, 0x665b, 0x5127,
-  0x3a22, 0x424f, 0x582b, 0x4a6b, 0x656e, 0x665c, 0x3775, 0x4866,
-  0x4475, 0x6532, 0x447e, 0x4b7c, 0x6533, 0x552c, 0x536e, 0x4a58,
-  0x3032, 0x4b4e, 0x4d6a, 0x3a6a, 0x6535, 0x6534, 0x575a, 0x3959,
-  0x5666, 0x3628, 0x4d70, 0x524b, 0x3126, 0x4a35, 0x3368, 0x4973,
-  0x3f4d, 0x507b, 0x4a52, 0x6536, 0x3b42, 0x4f5c, 0x392c, 0x5457,
-  0x3a26, 0x5167, 0x4f7c, 0x3c52, 0x6537, 0x485d, 0x3f6d, 0x3176,
-  0x4b5e, 0x3c45, 0x3c44, 0x527a, 0x435c, 0x3f5c, 0x383b, 0x4342,
-  0x3a2e, 0x5422, 0x475e, 0x442f, 0x326c, 0x3951, 0x653b, 0x4148,
-  0x552f, 0x653c, 0x653e, 0x3467, 0x3654, 0x4b42, 0x5130, 0x353c,
-  0x4a59, 0x3762, 0x4964, 0x3d2b, 0x4e3e, 0x5770, 0x5021, 0x4959,
-  0x367b, 0x6658, 0x3c62, 0x333e, 0x4950, 0x6659, 0x3322, 0x5e4c,
-  0x5348, 0x5e4d, 0x5222, 0x5e4e, 0x3e4d, 0x5e4f, 0x4a2c, 0x527c,
-  0x335f, 0x656a, 0x4461, 0x3e21, 0x4e32, 0x4472, 0x3e56, 0x4628,
-  0x3263, 0x3e53, 0x477c, 0x4c6b, 0x3d6c, 0x4e5d, 0x4a3a, 0x4641,
-  0x656c, 0x503c, 0x5539, 0x656d, 0x4a74, 0x4d40, 0x4245, 0x656f,
-  0x4244, 0x6570, 0x6578, 0x4d4d, 0x493d, 0x5259, 0x6128, 0x536c,
-  0x4b6a, 0x4671, 0x612c, 0x6127, 0x6129, 0x612a, 0x612f, 0x326d,
-  0x612b, 0x385a, 0x612d, 0x612e, 0x6130, 0x353a, 0x6131, 0x6133,
-  0x6138, 0x5152, 0x6136, 0x6135, 0x416b, 0x6137, 0x5440, 0x6132,
-  0x613a, 0x3036, 0x6134, 0x3f79, 0x6139, 0x613b, 0x613e, 0x613c,
-  0x5645, 0x4f3f, 0x613d, 0x613f, 0x424d, 0x366b, 0x5378, 0x474d,
-  0x3765, 0x3e7e, 0x6140, 0x6141, 0x6147, 0x3367, 0x4669, 0x345e,
-  0x5142, 0x6148, 0x6146, 0x6145, 0x6143, 0x6142, 0x3140, 0x5538,
-  0x6144, 0x614b, 0x614c, 0x614a, 0x6f7a, 0x6153, 0x6152, 0x4736,
-  0x6149, 0x614e, 0x6150, 0x6154, 0x6151, 0x614d, 0x614f, 0x6155,
-  0x6156, 0x6157, 0x6158, 0x615a, 0x615b, 0x4e21, 0x675d, 0x3428,
-  0x565d, 0x5132, 0x3332, 0x3924, 0x5773, 0x4749, 0x3e5e, 0x392e,
-  0x4e57, 0x326e, 0x5b4f, 0x3c3a, 0x5251, 0x4b48, 0x304d, 0x4f6f,
-  0x5963, 0x3d6d, 0x3152, 0x4a50, 0x323c, 0x4b27, 0x372b, 0x4a26,
-  0x4f23, 0x6078, 0x554a, 0x607b, 0x607a, 0x4541, 0x4c7b, 0x4131,
-  0x6079, 0x5663, 0x322f, 0x5644, 0x355b, 0x3478, 0x5621, 0x4f2f,
-  0x306f, 0x607c, 0x6121, 0x3323, 0x607d, 0x607e, 0x4331, 0x435d,
-  0x6122, 0x3779, 0x3b4f, 0x6123, 0x443b, 0x6124, 0x6125, 0x6126,
-  0x3431, 0x3849, 0x463d, 0x446a, 0x3222, 0x5052, 0x675b, 0x3b43,
-  0x5357, 0x5344, 0x3963, 0x624f, 0x572f, 0x476c, 0x3153, 0x3432,
-  0x6251, 0x5072, 0x422e, 0x6250, 0x3f62, 0x5326, 0x3557, 0x6252,
-  0x356a, 0x436d, 0x387d, 0x382e, 0x4553, 0x374f, 0x6254, 0x6253,
-  0x3648, 0x5779, 0x4d25, 0x6258, 0x6256, 0x4a7c, 0x3f35, 0x5339,
-  0x6255, 0x6257, 0x412e, 0x4048, 0x625b, 0x625a, 0x402a, 0x414e,
-  0x625c, 0x625d, 0x625e, 0x5b48, 0x5153, 0x4d22, 0x3d28, 0x5e43,
-  0x5825, 0x3f2a, 0x5b4d, 0x526c, 0x467a, 0x452a, 0x5e44, 0x3157,
-  0x5f2e, 0x4a3d, 0x5f31, 0x392d, 0x527d, 0x3825, 0x3a6b, 0x335a,
-  0x355c, 0x5545, 0x4356, 0x4f52, 0x3b21, 0x6573, 0x6572, 0x6574,
-  0x4d64, 0x4875, 0x352f, 0x473f, 0x6576, 0x6c30, 0x6566, 0x3969,
-  0x3531, 0x423c, 0x6568, 0x6567, 0x6569, 0x524d, 0x616a, 0x504e,
-  0x4d2e, 0x5165, 0x324a, 0x316b, 0x3172, 0x456d, 0x5543, 0x5330,
-  0x615c, 0x615d, 0x525b, 0x3339, 0x314b, 0x4d79, 0x5577, 0x615e,
-  0x3e36, 0x347d, 0x615f, 0x3a5c, 0x6160, 0x3b32, 0x4249, 0x6161,
-  0x506c, 0x4d3d, 0x6162, 0x3543, 0x4547, 0x6163, 0x6164, 0x5379,
-  0x6165, 0x512d, 0x6166, 0x4e22, 0x6167, 0x3542, 0x6168, 0x3b55,
-  0x5044, 0x6260, 0x3158, 0x5264, 0x6261, 0x3c49, 0x484c, 0x6263,
-  0x6c7e, 0x6c7d, 0x5f2f, 0x6262, 0x563e, 0x4d7c, 0x4326, 0x6343,
-  0x5652, 0x6267, 0x6268, 0x5347, 0x626c, 0x3f6c, 0x626d, 0x6265,
-  0x3340, 0x446e, 0x626e, 0x5043, 0x3a76, 0x6269, 0x375e, 0x3b33,
-  0x4c2c, 0x4b4b, 0x6264, 0x6266, 0x626a, 0x626b, 0x6277, 0x6274,
-  0x5475, 0x6273, 0x452d, 0x557a, 0x4542, 0x3240, 0x626f, 0x6272,
-  0x412f, 0x4b3c, 0x3521, 0x6279, 0x3c31, 0x6271, 0x5054, 0x5439,
-  0x6275, 0x3956, 0x6276, 0x4753, 0x6270, 0x575c, 0x6d21, 0x6278,
-  0x6d25, 0x627e, 0x4a51, 0x4135, 0x3b50, 0x3f56, 0x3a63, 0x4b21,
-  0x6d26, 0x6d23, 0x6d22, 0x3b56, 0x6d27, 0x5074, 0x6d24, 0x3a5e,
-  0x3677, 0x6321, 0x3632, 0x4c71, 0x3927, 0x4f22, 0x4721, 0x3f52,
-  0x3671, 0x627a, 0x627b, 0x627d, 0x627c, 0x4455, 0x6322, 0x5341,
-  0x6327, 0x4744, 0x4f24, 0x6329, 0x3a37, 0x6328, 0x3b5a, 0x6323,
-  0x6324, 0x632a, 0x6326, 0x4e72, 0x5346, 0x3b3c, 0x5443, 0x447a,
-  0x6d28, 0x507c, 0x6325, 0x4375, 0x632d, 0x312f, 0x6332, 0x3c42,
-  0x632c, 0x353f, 0x4769, 0x6330, 0x3e2a, 0x4d6f, 0x3b73, 0x4c68,
-  0x632f, 0x6331, 0x4f27, 0x632e, 0x4e29, 0x3b5d, 0x356b, 0x3e65,
-  0x3252, 0x334d, 0x3139, 0x632b, 0x3251, 0x352c, 0x395f, 0x3668,
-  0x4f6b, 0x6337, 0x3b4c, 0x4847, 0x504a, 0x6338, 0x336e, 0x6d29,
-  0x537a, 0x5364, 0x6d2a, 0x6339, 0x5262, 0x6335, 0x535e, 0x3850,
-  0x6333, 0x6336, 0x375f, 0x6334, 0x4022, 0x633a, 0x5438, 0x3448,
-  0x633b, 0x3b45, 0x4977, 0x4965, 0x443d, 0x6d2b, 0x427d, 0x3b5b,
-  0x3f2e, 0x4e3f, 0x633c, 0x3f36, 0x316f, 0x5477, 0x633e, 0x6d2d,
-  0x633f, 0x3a29, 0x6d2c, 0x633d, 0x6340, 0x3a36, 0x362e, 0x5038,
-  0x3043, 0x6d2e, 0x6d2f, 0x4041, 0x6341, 0x4533, 0x6342, 0x5c32,
-  0x6d30, 0x386a, 0x4e6c, 0x6a27, 0x5067, 0x4a79, 0x4856, 0x4f37,
-  0x3349, 0x4e52, 0x3d64, 0x635e, 0x3b72, 0x6a28, 0x553d, 0x465d,
-  0x6a29, 0x6a2a, 0x6a2c, 0x6a2b, 0x6a2e, 0x6a2d, 0x3d58, 0x6a2f,
-  0x423e, 0x3441, 0x3477, 0x3b27, 0x6c66, 0x6c65, 0x373f, 0x4b79,
-  0x3162, 0x6c67, 0x4948, 0x6c68, 0x6c69, 0x4a56, 0x5e50, 0x3245,
-  0x547a, 0x464b, 0x3047, 0x3472, 0x4853, 0x4d50, 0x3f38, 0x3f5b,
-  0x4724, 0x5634, 0x4029, 0x5e51, 0x4928, 0x516f, 0x4524, 0x3067,
-  0x3336, 0x4845, 0x3062, 0x3776, 0x457a, 0x3673, 0x5552, 0x3350,
-  0x3c3c, 0x332d, 0x3e71, 0x3051, 0x5256, 0x4a63, 0x5725, 0x4d36,
-  0x3636, 0x3f39, 0x555b, 0x3827, 0x4557, 0x5e52, 0x3f59, 0x4255,
-  0x4740, 0x3b24, 0x3128, 0x456a, 0x457b, 0x4c27, 0x3127, 0x3556,
-  0x4428, 0x5e53, 0x513a, 0x3369, 0x4372, 0x3777, 0x5674, 0x3523,
-  0x3270, 0x4434, 0x4469, 0x402d, 0x5e54, 0x3068, 0x4544, 0x4160,
-  0x3955, 0x3e5c, 0x4d58, 0x304e, 0x4d4f, 0x5e56, 0x3e50, 0x573e,
-  0x5e55, 0x5550, 0x305d, 0x4462, 0x4223, 0x3c70, 0x5335, 0x4039,
-  0x4521, 0x3226, 0x5471, 0x4028, 0x4a43, 0x5e57, 0x557c, 0x3930,
-  0x482d, 0x4b29, 0x5e59, 0x3f3d, 0x4634, 0x5727, 0x4a30, 0x4443,
-  0x3356, 0x3952, 0x5638, 0x6a7c, 0x3034, 0x3f66, 0x4c74, 0x4d5a,
-  0x563f, 0x424e, 0x4e4e, 0x4c22, 0x502e, 0x4453, 0x3532, 0x5e58,
-  0x5575, 0x3c37, 0x3b53, 0x3024, 0x4532, 0x346c, 0x5571, 0x6a7d,
-  0x5e5a, 0x4d26, 0x4d6c, 0x4e66, 0x5e5c, 0x4d31, 0x4026, 0x573d,
-  0x5e5b, 0x3046, 0x3a34, 0x4953, 0x4473, 0x3e68, 0x3236, 0x404c,
-  0x4b70, 0x3c71, 0x3b3b, 0x3537, 0x4575, 0x5e66, 0x5e63, 0x3e5d,
-  0x5e5f, 0x3437, 0x3d5d, 0x5e60, 0x446d, 0x4f46, 0x3560, 0x365e,
-  0x4a5a, 0x3574, 0x5e65, 0x5546, 0x5e61, 0x4c4d, 0x467e, 0x4545,
-  0x5234, 0x3e72, 0x4253, 0x4c3d, 0x3338, 0x3d53, 0x3f58, 0x4d46,
-  0x515a, 0x346b, 0x5e64, 0x5e5d, 0x5e67, 0x6a7e, 0x4230, 0x5e62,
-  0x5640, 0x3527, 0x3274, 0x5e68, 0x5e72, 0x5e6d, 0x5e71, 0x4860,
-  0x5761, 0x5e6f, 0x4368, 0x4c61, 0x3265, 0x523e, 0x5e6e, 0x5e6b,
-  0x4e55, 0x3427, 0x3f2b, 0x3e3e, 0x3d52, 0x5e69, 0x542e, 0x5e5e,
-  0x5e6a, 0x403f, 0x5e6c, 0x3273, 0x3869, 0x4227, 0x3d41, 0x5e75,
-  0x5e78, 0x322b, 0x3424, 0x346a, 0x4926, 0x5e76, 0x4b51, 0x3863,
-  0x5e77, 0x5e7a, 0x5e79, 0x4c42, 0x3061, 0x346e, 0x653a, 0x502f,
-  0x326b, 0x6b21, 0x5e74, 0x4963, 0x5e73, 0x305a, 0x5221, 0x3177,
-  0x4c2f, 0x5e70, 0x4b24, 0x552a, 0x5e7b, 0x345d, 0x4426, 0x5e7d,
-  0x437e, 0x4421, 0x5f21, 0x414c, 0x5e7c, 0x3e6f, 0x4632, 0x3345,
-  0x4876, 0x4b3a, 0x5e7e, 0x5f24, 0x5732, 0x3337, 0x4143, 0x474b,
-  0x3225, 0x3469, 0x572b, 0x446c, 0x5f22, 0x5f23, 0x5f25, 0x3a33,
-  0x5f26, 0x405e, 0x4943, 0x3259, 0x4766, 0x5f27, 0x475c, 0x5f28,
-  0x6b22, 0x4b53, 0x5f2a, 0x5f29, 0x3241, 0x454a, 0x5f2b, 0x545c,
-  0x4841, 0x5f2c, 0x3e70, 0x5f2d, 0x5627, 0x6a37, 0x6b36, 0x4a55,
-  0x587c, 0x3844, 0x3925, 0x3745, 0x557e, 0x394a, 0x5027, 0x744d,
-  0x3550, 0x4374, 0x3e48, 0x6b37, 0x303d, 0x3d4c, 0x4132, 0x3156,
-  0x3328, 0x3852, 0x4922, 0x3658, 0x6b38, 0x3e34, 0x4a7d, 0x4743,
-  0x557b, 0x3773, 0x4e44, 0x552b, 0x3173, 0x6c33, 0x305f, 0x6c35,
-  0x3637, 0x414f, 0x757a, 0x5031, 0x5565, 0x4e53, 0x3d6f, 0x3362,
-  0x382b, 0x5536, 0x6d3d, 0x364f, 0x4b39, 0x5042, 0x373d, 0x6c36,
-  0x4a29, 0x4554, 0x6c39, 0x6c38, 0x4243, 0x6c37, 0x507d, 0x6c3a,
-  0x6c3b, 0x5765, 0x6c3c, 0x6c3d, 0x466c, 0x4e5e, 0x3c48, 0x4855,
-  0x3529, 0x3e49, 0x563c, 0x5467, 0x512e, 0x5071, 0x6a38, 0x6a39,
-  0x6a3a, 0x3a35, 0x4a31, 0x3f75, 0x4d7a, 0x6a40, 0x303a, 0x6a3e,
-  0x4025, 0x6a3b, 0x327d, 0x4377, 0x3b68, 0x5257, 0x4e74, 0x6a3f,
-  0x6a3c, 0x6a43, 0x5047, 0x5333, 0x343a, 0x4341, 0x5772, 0x5551,
-  0x4a47, 0x6a45, 0x6a44, 0x6a47, 0x6a46, 0x5667, 0x4f54, 0x6a4b,
-  0x3b4e, 0x3d7a, 0x494e, 0x6a4c, 0x4939, 0x4f7e, 0x6a4a, 0x544e,
-  0x6a4d, 0x6a4f, 0x4d6d, 0x6a49, 0x6a4e, 0x4e6e, 0x3b5e, 0x333f,
-  0x4655, 0x3e30, 0x4e7a, 0x4767, 0x3e27, 0x6a50, 0x5647, 0x4140,
-  0x545d, 0x6a51, 0x4f3e, 0x6a52, 0x4a6e, 0x452f, 0x3035, 0x6a54,
-  0x6a53, 0x745f, 0x443a, 0x3129, 0x655f, 0x6a55, 0x4a6f, 0x6a56,
-  0x6a57, 0x4658, 0x6a58, 0x6a59, 0x543b, 0x477a, 0x5237, 0x387c,
-  0x6a42, 0x325c, 0x427c, 0x5478, 0x4c66, 0x576e, 0x5442, 0x5350,
-  0x6b43, 0x4573, 0x377e, 0x6b54, 0x4b37, 0x6b5e, 0x404a, 0x4d7b,
-  0x332f, 0x465a, 0x6b7c, 0x443e, 0x4e34, 0x4429, 0x313e, 0x547d,
-  0x4a75, 0x566c, 0x4653, 0x3664, 0x3b7a, 0x5060, 0x4931, 0x5453,
-  0x4828, 0x384b, 0x683e, 0x493c, 0x683b, 0x406e, 0x5053, 0x3244,
-  0x3465, 0x683c, 0x5548, 0x3645, 0x683d, 0x4a78, 0x385c, 0x4c75,
-  0x4034, 0x516e, 0x683f, 0x6842, 0x3a3c, 0x312d, 0x3d5c, 0x6a3d,
-  0x6843, 0x6846, 0x684b, 0x684c, 0x4b49, 0x3065, 0x3c2b, 0x3939,
-  0x6841, 0x4d77, 0x684a, 0x4e76, 0x556d, 0x4156, 0x6844, 0x4336,
-  0x397b, 0x5626, 0x6848, 0x4a60, 0x5466, 0x6840, 0x6845, 0x6847,
-  0x4739, 0x3763, 0x6849, 0x3f5d, 0x6852, 0x6857, 0x6855, 0x3c5c,
-  0x3c4f, 0x685b, 0x685e, 0x685a, 0x317a, 0x3058, 0x4433, 0x384c,
-  0x4662, 0x483e, 0x4861, 0x684f, 0x6854, 0x6856, 0x3971, 0x6858,
-  0x5775, 0x447b, 0x685c, 0x3269, 0x6851, 0x3c6d, 0x3f42, 0x684d,
-  0x5679, 0x4178, 0x3271, 0x685f, 0x4a41, 0x6859, 0x5524, 0x316a,
-  0x553b, 0x684e, 0x6850, 0x3630, 0x6853, 0x685d, 0x4038, 0x4a77,
-  0x4b28, 0x465c, 0x4075, 0x6869, 0x5023, 0x6872, 0x566a, 0x6860,
-  0x6861, 0x5179, 0x3a4b, 0x3879, 0x3871, 0x5454, 0x686f, 0x686e,
-  0x686c, 0x3970, 0x4c52, 0x6866, 0x4e26, 0x3f72, 0x3038, 0x6871,
-  0x6870, 0x5740, 0x6864, 0x4d29, 0x4923, 0x3b38, 0x3d5b, 0x686a,
-  0x6862, 0x6863, 0x6865, 0x3535, 0x6867, 0x4745, 0x686b, 0x686d,
-  0x3d30, 0x572e, 0x6878, 0x6875, 0x4d30, 0x6876, 0x413a, 0x6868,
-  0x4337, 0x3070, 0x6874, 0x6877, 0x3923, 0x4952, 0x434e, 0x4e60,
-  0x4066, 0x4b73, 0x4c5d, 0x5035, 0x4a61, 0x6873, 0x3c6c, 0x6879,
-  0x435e, 0x4665, 0x3977, 0x3074, 0x5758, 0x3c2c, 0x456f, 0x4c44,
-  0x6926, 0x492d, 0x6922, 0x4062, 0x3f43, 0x687e, 0x3957, 0x687b,
-  0x6924, 0x524e, 0x6923, 0x5632, 0x5735, 0x6927, 0x3d37, 0x687c,
-  0x687d, 0x6921, 0x4d56, 0x522c, 0x6932, 0x6929, 0x342a, 0x343b,
-  0x692b, 0x5028, 0x6925, 0x337e, 0x692c, 0x4063, 0x692a, 0x6939,
-  0x6938, 0x692e, 0x687a, 0x6928, 0x3f2c, 0x6931, 0x693a, 0x4225,
-  0x692f, 0x3845, 0x692d, 0x535c, 0x6934, 0x6935, 0x6937, 0x6947,
-  0x4046, 0x6945, 0x6930, 0x693b, 0x3071, 0x693c, 0x5525, 0x693e,
-  0x693f, 0x6941, 0x4171, 0x4836, 0x693d, 0x6942, 0x6943, 0x6933,
-  0x6936, 0x3b31, 0x6940, 0x3c77, 0x6944, 0x6946, 0x694a, 0x694e,
-  0x325b, 0x6948, 0x372e, 0x694b, 0x694c, 0x5541, 0x4423, 0x6958,
-  0x3a61, 0x6949, 0x5323, 0x6954, 0x6957, 0x6950, 0x694f, 0x4741,
-  0x6952, 0x6959, 0x3348, 0x6953, 0x4f70, 0x694d, 0x3377, 0x6956,
-  0x695a, 0x4c34, 0x4f2d, 0x6955, 0x695c, 0x695b, 0x695e, 0x6951,
-  0x695d, 0x695f, 0x434a, 0x4737, 0x344e, 0x3b36, 0x5040, 0x6c23,
-  0x4537, 0x537b, 0x6c24, 0x6c25, 0x465b, 0x3f6e, 0x6c26, 0x6c27,
-  0x502a, 0x4738, 0x3868, 0x6c28, 0x5639, 0x557d, 0x344b, 0x323d,
-  0x4e64, 0x4667, 0x4d61, 0x3475, 0x4b40, 0x3c5f, 0x6962, 0x6963,
-  0x516a, 0x6965, 0x3479, 0x6964, 0x5133, 0x4a62, 0x3250, 0x6968,
-  0x6966, 0x6967, 0x5633, 0x6969, 0x696a, 0x696b, 0x696c, 0x6c2f,
-  0x4539, 0x364e, 0x5273, 0x356e, 0x3b59, 0x6c31, 0x5263, 0x4e63,
-  0x4438, 0x433f, 0x363e, 0x5839, 0x3148, 0x314f, 0x3151, 0x457e,
-  0x3150, 0x432b, 0x5531, 0x6b24, 0x3a41, 0x4c3a, 0x6b25, 0x6b27,
-  0x6b28, 0x6b26, 0x6b29, 0x6b2b, 0x6b2a, 0x6b2c, 0x4a4f, 0x5835,
-  0x4371, 0x4325, 0x4678, 0x6b2d, 0x444a, 0x6b2e, 0x6b2f, 0x6b30,
-  0x3755, 0x377a, 0x6b31, 0x4762, 0x6b33, 0x3a24, 0x5175, 0x3031,
-  0x6b32, 0x6b34, 0x352a, 0x4248, 0x4768, 0x6b35, 0x4b2e, 0x635f,
-  0x5340, 0x595b, 0x4d21, 0x562d, 0x4773, 0x5960, 0x3b63, 0x3a3a,
-  0x6362, 0x4f2b, 0x6360, 0x4947, 0x3a39, 0x5134, 0x6361, 0x486a,
-  0x392f, 0x3d2d, 0x3358, 0x4e5b, 0x4c40, 0x6368, 0x6369, 0x4d74,
-  0x4c2d, 0x3c33, 0x636a, 0x636b, 0x505a, 0x467b, 0x375a, 0x475f,
-  0x524a, 0x4e56, 0x6364, 0x636c, 0x4972, 0x3341, 0x6367, 0x4663,
-  0x6365, 0x6d33, 0x6366, 0x4933, 0x4566, 0x3935, 0x433b, 0x6363,
-  0x453d, 0x4124, 0x4259, 0x3257, 0x636d, 0x3b26, 0x442d, 0x6370,
-  0x3e5a, 0x637b, 0x6375, 0x3a53, 0x3750, 0x534d, 0x564e, 0x5553,
-  0x3941, 0x5534, 0x5158, 0x5039, 0x4776, 0x482a, 0x3234, 0x435a,
-  0x636e, 0x637c, 0x636f, 0x3728, 0x6377, 0x6374, 0x373a, 0x4522,
-  0x6376, 0x455d, 0x3228, 0x467c, 0x4460, 0x5722, 0x4061, 0x6379,
-  0x637a, 0x637d, 0x4c29, 0x6373, 0x533e, 0x3143, 0x6d34, 0x6371,
-  0x6372, 0x6378, 0x503a, 0x4643, 0x5473, 0x637e, 0x3d60, 0x6427,
-  0x6426, 0x5173, 0x6423, 0x6429, 0x4877, 0x4f34, 0x6428, 0x642e,
-  0x4265, 0x3634, 0x3d72, 0x6422, 0x3a69, 0x642a, 0x642c, 0x367d,
-  0x565e, 0x6432, 0x642d, 0x6421, 0x3b6e, 0x4d5d, 0x4722, 0x4549,
-  0x4177, 0x6424, 0x4733, 0x3d2c, 0x3d3d, 0x6425, 0x5747, 0x3262,
-  0x642b, 0x3c43, 0x642f, 0x3b6b, 0x6430, 0x4528, 0x6431, 0x5563,
-  0x3f23, 0x643a, 0x6437, 0x643b, 0x643d, 0x4656, 0x3a46, 0x404b,
-  0x3821, 0x6434, 0x5421, 0x3a23, 0x3d7e, 0x643c, 0x4d3f, 0x4479,
-  0x4f7b, 0x4966, 0x533f, 0x4f51, 0x6433, 0x6438, 0x6439, 0x4c69,
-  0x4c4e, 0x4054, 0x6435, 0x4130, 0x6436, 0x4e50, 0x3b41, 0x3553,
-  0x4873, 0x3d27, 0x5547, 0x492c, 0x3822, 0x644a, 0x644c, 0x5144,
-  0x523a, 0x3a2d, 0x3a54, 0x6443, 0x356d, 0x574d, 0x6440, 0x4f7d,
-  0x643f, 0x415c, 0x4c4a, 0x4a67, 0x4457, 0x4c54, 0x6448, 0x6447,
-  0x6441, 0x6444, 0x352d, 0x5359, 0x6446, 0x5279, 0x3463, 0x3b34,
-  0x496e, 0x343e, 0x3b6c, 0x514d, 0x4c6d, 0x6d35, 0x4765, 0x5428,
-  0x644b, 0x5755, 0x6442, 0x3d25, 0x6445, 0x5366, 0x6449, 0x4978,
-  0x643e, 0x5365, 0x477e, 0x3649, 0x547c, 0x3233, 0x6457, 0x4e42,
-  0x644d, 0x4e3c, 0x385b, 0x6456, 0x3f4a, 0x534e, 0x436c, 0x4548,
-  0x6458, 0x4d44, 0x644f, 0x6454, 0x6455, 0x3a7e, 0x4f66, 0x553f,
-  0x6452, 0x6450, 0x644e, 0x4d65, 0x4a2a, 0x4023, 0x3d26, 0x6453,
-  0x3848, 0x6467, 0x5434, 0x645b, 0x416f, 0x6469, 0x5267, 0x645f,
-  0x6460, 0x4f2a, 0x4b5d, 0x645a, 0x6451, 0x6465, 0x485c, 0x6463,
-  0x4467, 0x6462, 0x6461, 0x337c, 0x6468, 0x3561, 0x574c, 0x6466,
-  0x3b2c, 0x5752, 0x4c4f, 0x6b78, 0x6464, 0x3976, 0x564d, 0x6459,
-  0x645c, 0x427a, 0x645e, 0x424b, 0x4044, 0x4250, 0x3175, 0x4c32,
-  0x354e, 0x646f, 0x462f, 0x4661, 0x6475, 0x4229, 0x406c, 0x515d,
-  0x646e, 0x442e, 0x646d, 0x6476, 0x6474, 0x427e, 0x645d, 0x6470,
-  0x4a7e, 0x5544, 0x6471, 0x517a, 0x646b, 0x646c, 0x6472, 0x4e2b,
-  0x454b, 0x4731, 0x423a, 0x646a, 0x414a, 0x4c36, 0x3331, 0x647b,
-  0x6473, 0x647a, 0x647d, 0x647c, 0x334e, 0x333a, 0x6477, 0x6479,
-  0x6478, 0x456c, 0x403d, 0x5468, 0x6522, 0x3044, 0x6524, 0x6523,
-  0x3c24, 0x6525, 0x6521, 0x647e, 0x3174, 0x6528, 0x6529, 0x6526,
-  0x6527, 0x652a, 0x4659, 0x652b, 0x652d, 0x652c, 0x652f, 0x652e,
-  0x3960, 0x6530, 0x6531, 0x3b70, 0x6c61, 0x4370, 0x3546, 0x3b52,
-  0x4169, 0x546e, 0x3e44, 0x5746, 0x5456, 0x3253, 0x6c3e, 0x6a41,
-  0x422f, 0x3436, 0x5157, 0x3334, 0x4832, 0x3f3b, 0x6c40, 0x564b,
-  0x6c3f, 0x6c41, 0x6c45, 0x3e66, 0x4c3f, 0x455a, 0x3e3c, 0x6c46,
-  0x317e, 0x6c44, 0x5528, 0x3563, 0x6c42, 0x4136, 0x3363, 0x6c43,
-  0x4b38, 0x4043, 0x4c7e, 0x4152, 0x6c48, 0x3a66, 0x4053, 0x5672,
-  0x514c, 0x3f3e, 0x3733, 0x4955, 0x6c47, 0x3b62, 0x4c4c, 0x3d7d,
-  0x4848, 0x4f29, 0x4d69, 0x456b, 0x3769, 0x5149, 0x3a38, 0x6c49,
-  0x6c4a, 0x3b40, 0x6c4b, 0x6c62, 0x313a, 0x3759, 0x3d39, 0x6c4c,
-  0x5166, 0x6c4d, 0x483b, 0x6c51, 0x6c53, 0x3b4d, 0x3c65, 0x6c4f,
-  0x4937, 0x433a, 0x6c63, 0x5555, 0x6c50, 0x5673, 0x6c52, 0x6c4e,
-  0x6c54, 0x6c55, 0x493f, 0x4f28, 0x505c, 0x512c, 0x485b, 0x6c56,
-  0x4e75, 0x4a6c, 0x6c5a, 0x6c59, 0x303e, 0x6c57, 0x6c58, 0x6c64,
-  0x483c, 0x4147, 0x6c5c, 0x5160, 0x6c5b, 0x546f, 0x6c5d, 0x5b46,
-  0x6c5e, 0x312c, 0x6c5f, 0x6c60, 0x5726, 0x4540, 0x6b3c, 0x302e,
-  0x3e74, 0x3838, 0x522f, 0x3056, 0x3579, 0x5833, 0x4b2c, 0x635d,
-  0x462c, 0x3066, 0x4546, 0x6b39, 0x6b3a, 0x6b3b, 0x5140, 0x4523,
-  0x6a72, 0x4432, 0x4435, 0x404e, 0x6a73, 0x4441, 0x4e6f, 0x6a70,
-  0x6a74, 0x497c, 0x4723, 0x4c58, 0x4e7e, 0x6a75, 0x6a76, 0x4f2c,
-  0x4067, 0x6a77, 0x363f, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a71,
-  0x482e, 0x616b, 0x3738, 0x616c, 0x616d, 0x5734, 0x616e, 0x616f,
-  0x534c, 0x6171, 0x3f71, 0x6170, 0x3552, 0x3137, 0x6173, 0x6172,
-  0x3a7c, 0x6174, 0x3937, 0x3e51, 0x447c, 0x3a5d, 0x3d46, 0x6175,
-  0x6177, 0x3640, 0x4f41, 0x4a28, 0x6176, 0x5578, 0x537c, 0x6178,
-  0x617c, 0x6179, 0x617a, 0x406a, 0x617e, 0x6221, 0x4047, 0x617b,
-  0x617d, 0x6225, 0x4154, 0x6223, 0x6228, 0x327e, 0x6222, 0x434d,
-  0x3242, 0x6227, 0x6226, 0x6224, 0x6229, 0x622b, 0x5049, 0x566d,
-  0x4328, 0x622c, 0x4f57, 0x622e, 0x3a6f, 0x6960, 0x622d, 0x622a,
-  0x3b2b, 0x5433, 0x6230, 0x622f, 0x6961, 0x6231, 0x6232, 0x6233,
-  0x4c21, 0x6234, 0x6235, 0x507e, 0x424a, 0x5371, 0x4d75, 0x6760,
-  0x6761, 0x3e41, 0x426a, 0x6764, 0x6763, 0x4d66, 0x4335, 0x6762,
-  0x3b37, 0x4f56, 0x4161, 0x6769, 0x6768, 0x6774, 0x3223, 0x676a,
-  0x6766, 0x676c, 0x676b, 0x493a, 0x5564, 0x6765, 0x3729, 0x6767,
-  0x676e, 0x6773, 0x5669, 0x676d, 0x6772, 0x6771, 0x3060, 0x6775,
-  0x4772, 0x4045, 0x406d, 0x4170, 0x6770, 0x6776, 0x4b76, 0x6822,
-  0x6821, 0x5741, 0x677a, 0x6779, 0x677b, 0x6777, 0x677e, 0x677d,
-  0x677c, 0x4155, 0x4759, 0x457d, 0x4543, 0x476d, 0x6823, 0x6826,
-  0x6825, 0x6827, 0x3a77, 0x6778, 0x6824, 0x4870, 0x492a, 0x6829,
-  0x3965, 0x517e, 0x6828, 0x682a, 0x682d, 0x682e, 0x4127, 0x682f,
-  0x6830, 0x682c, 0x6834, 0x682b, 0x6831, 0x6835, 0x6832, 0x6833,
-  0x6837, 0x6836, 0x394f, 0x702c, 0x702d, 0x4630, 0x306a, 0x483f,
-  0x4d5f, 0x4e4d, 0x6a31, 0x6a32, 0x463f, 0x3449, 0x6a33, 0x5567,
-  0x5d79, 0x6a34, 0x6a35, 0x6a36, 0x384a, 0x5f30, 0x4975, 0x4c70,
-  0x497a, 0x497b, 0x5343, 0x4b26, 0x3826, 0x702e, 0x3142, 0x6538,
-  0x4c6f, 0x5349, 0x3c57, 0x496a, 0x3567, 0x4450, 0x3569, 0x6e2e,
-  0x3b2d, 0x675e, 0x6e2f, 0x3329, 0x6e32, 0x6e31, 0x3d67, 0x6e30,
-  0x4e37, 0x454f, 0x4174, 0x5b4e, 0x6e33, 0x5073, 0x4254, 0x4668,
-  0x372c, 0x6e34, 0x336b, 0x3b7b, 0x6e35, 0x675c, 0x6e36, 0x3d2e,
-  0x7162, 0x4a68, 0x5249, 0x705a, 0x705b, 0x705c, 0x4146, 0x386d,
-  0x3e4e, 0x705e, 0x4531, 0x705d, 0x5171, 0x7060, 0x304c, 0x3d6a,
-  0x525f, 0x705f, 0x342f, 0x3768, 0x7066, 0x7065, 0x4623, 0x7061,
-  0x7062, 0x3443, 0x7063, 0x556e, 0x4c5b, 0x3e52, 0x3c32, 0x7068,
-  0x7067, 0x7064, 0x3221, 0x5622, 0x5338, 0x3e37, 0x482c, 0x706a,
-  0x5177, 0x564c, 0x3a5b, 0x7069, 0x363b, 0x4d34, 0x4626, 0x4121,
-  0x706b, 0x706e, 0x706d, 0x7070, 0x706c, 0x3b3e, 0x706f, 0x4c35,
-  0x7072, 0x3355, 0x3154, 0x7073, 0x7074, 0x7076, 0x3461, 0x7071,
-  0x7077, 0x707a, 0x7078, 0x7075, 0x707d, 0x7079, 0x707c, 0x707e,
-  0x7121, 0x4e41, 0x7124, 0x7123, 0x4176, 0x707b, 0x4a5d, 0x3471,
-  0x3171, 0x4c31, 0x7126, 0x7127, 0x712c, 0x554e, 0x7129, 0x4833,
-  0x7122, 0x712b, 0x7128, 0x7125, 0x712a, 0x3029, 0x712d, 0x712f,
-  0x7131, 0x7130, 0x712e, 0x5122, 0x7132, 0x7133, 0x396f, 0x3547,
-  0x3057, 0x3059, 0x546d, 0x3544, 0x3d54, 0x3b4a, 0x7027, 0x385e,
-  0x7028, 0x3028, 0x7029, 0x4d6e, 0x702a, 0x702b, 0x4624, 0x5665,
-  0x7164, 0x7165, 0x4373, 0x535b, 0x5651, 0x4568, 0x532f, 0x5266,
-  0x6e41, 0x303b, 0x5535, 0x514e, 0x3c60, 0x3a50, 0x3f78, 0x3847,
-  0x3541, 0x454c, 0x4a22, 0x434b, 0x6e42, 0x443f, 0x3622, 0x6d6c,
-  0x4324, 0x5631, 0x4f60, 0x6d6f, 0x454e, 0x365c, 0x4a21, 0x6d6d,
-  0x6d70, 0x6d71, 0x433c, 0x3f34, 0x6d6e, 0x6d74, 0x6d72, 0x5566,
-  0x435f, 0x6d73, 0x6d76, 0x5523, 0x5123, 0x6d75, 0x4350, 0x6d77,
-  0x3f74, 0x3e6c, 0x6d78, 0x4c77, 0x515b, 0x5745, 0x5576, 0x6d7c,
-  0x6d7b, 0x6d79, 0x6d7a, 0x6d7d, 0x3e26, 0x4b2f, 0x6e21, 0x363d,
-  0x6e22, 0x4440, 0x6d7e, 0x3d5e, 0x3247, 0x3643, 0x6e25, 0x583a,
-  0x6e23, 0x6e26, 0x4369, 0x3372, 0x6e27, 0x6e24, 0x4f39, 0x6e28,
-  0x4277, 0x6e29, 0x6e2a, 0x5e2b, 0x4633, 0x4746, 0x5675, 0x3549,
-  0x4b32, 0x6e2b, 0x4d2b, 0x6e2c, 0x5530, 0x6e2d, 0x7644, 0x5b47,
-  0x3423, 0x432c, 0x7166, 0x4a38, 0x5253, 0x562a, 0x6f72, 0x3e58,
-  0x3d43, 0x6f73, 0x364c, 0x302b, 0x4a2f, 0x6d36, 0x6d37, 0x4e79,
-  0x372f, 0x3f73, 0x6d38, 0x426b, 0x4930, 0x6d39, 0x4676, 0x3f33,
-  0x6d3c, 0x4578, 0x5150, 0x5729, 0x6d3a, 0x6d3b, 0x5162, 0x6d3f,
-  0x6d40, 0x6d44, 0x6d48, 0x6d46, 0x6d4e, 0x5568, 0x6d49, 0x6d47,
-  0x6d3e, 0x4569, 0x4646, 0x4969, 0x5452, 0x6d41, 0x6d42, 0x6d43,
-  0x6d45, 0x4079, 0x3421, 0x3968, 0x6d50, 0x6d51, 0x6d4a, 0x6d4f,
-  0x4e78, 0x4b36, 0x6d4c, 0x6d4d, 0x4f75, 0x6d52, 0x4172, 0x5332,
-  0x6d4b, 0x4837, 0x3c6f, 0x4570, 0x6d56, 0x356f, 0x4235, 0x302d,
-  0x4b69, 0x312e, 0x6d54, 0x4d6b, 0x3562, 0x6d55, 0x6d53, 0x6d57,
-  0x357a, 0x6d58, 0x6d59, 0x6d5c, 0x314c, 0x4576, 0x3c6e, 0x6d5a,
-  0x4c3c, 0x326a, 0x6d5b, 0x446b, 0x3445, 0x3075, 0x6d5f, 0x405a,
-  0x3468, 0x454d, 0x6d5d, 0x3f44, 0x6d5e, 0x4425, 0x6d60, 0x6d61,
-  0x6d63, 0x4157, 0x3b47, 0x3d38, 0x6d62, 0x6d64, 0x6d66, 0x6d65,
-  0x6d67, 0x4a3e, 0x6c6a, 0x4071, 0x4967, 0x6c6b, 0x466e, 0x6c6c,
-  0x466d, 0x6c6d, 0x6c70, 0x5766, 0x6c73, 0x6c71, 0x6c6e, 0x6c6f,
-  0x5723, 0x4971, 0x4b6e, 0x6c74, 0x6c72, 0x4f69, 0x6c76, 0x4631,
-  0x3c40, 0x6c75, 0x353b, 0x3b76, 0x6c77, 0x5977, 0x3d7b, 0x423b,
-  0x6c78, 0x6c79, 0x3823, 0x6c7a, 0x6c7b, 0x6c7c, 0x536d, 0x582e,
-  0x406b, 0x475d, 0x3a4c, 0x5063, 0x4b3d, 0x4d3a, 0x3851, 0x317c,
-  0x476f, 0x5656, 0x3f46, 0x436b, 0x6f75, 0x4358, 0x5762, 0x6f77,
-  0x3353, 0x4758, 0x516d, 0x5648, 0x6f78, 0x6f76, 0x3b7d, 0x3346,
-  0x3d55, 0x5246, 0x3b60, 0x4f21, 0x6f7c, 0x6f7b, 0x6f79, 0x334c,
-  0x4954, 0x4b30, 0x6f7e, 0x305e, 0x5649, 0x6f7d, 0x336d, 0x7655,
-  0x4e48, 0x7022, 0x7021, 0x353e, 0x3c5a, 0x3b7c, 0x3865, 0x4442,
-  0x7023, 0x4b6b, 0x7026, 0x5128, 0x3e3f, 0x476e, 0x7136, 0x7137,
-  0x3f55, 0x3429, 0x7138, 0x4d3b, 0x4754, 0x552d, 0x7139, 0x713a,
-  0x474f, 0x5224, 0x564f, 0x713b, 0x3d51, 0x3430, 0x3e3d, 0x345c,
-  0x4e51, 0x3f5f, 0x713d, 0x3f7a, 0x713c, 0x713f, 0x713e, 0x7140,
-  0x7141, 0x417e, 0x4122, 0x4a7a, 0x553e, 0x3e3a, 0x3e39, 0x5542,
-  0x3f22, 0x4d2f, 0x7135, 0x3d5f, 0x364b, 0x5671, 0x7343, 0x7344,
-  0x384d, 0x7346, 0x7347, 0x304a, 0x7345, 0x7349, 0x4b71, 0x734b,
-  0x5026, 0x314a, 0x7348, 0x734f, 0x3551, 0x7357, 0x7352, 0x7354,
-  0x7353, 0x377b, 0x313f, 0x734e, 0x734a, 0x355a, 0x7350, 0x7351,
-  0x7355, 0x734d, 0x3c63, 0x417d, 0x7356, 0x735a, 0x734c, 0x3548,
-  0x3d6e, 0x735c, 0x3724, 0x3f70, 0x567e, 0x4d32, 0x3470, 0x325f,
-  0x7358, 0x7359, 0x4938, 0x735d, 0x735e, 0x7361, 0x735f, 0x7363,
-  0x7362, 0x735b, 0x3f6a, 0x336f, 0x7360, 0x4729, 0x3c72, 0x736b,
-  0x393f, 0x7364, 0x322d, 0x3b7e, 0x4b63, 0x736d, 0x7369, 0x395c,
-  0x736e, 0x7365, 0x7366, 0x736a, 0x4261, 0x736c, 0x736f, 0x7368,
-  0x3c7d, 0x4f64, 0x7370, 0x7367, 0x7372, 0x572d, 0x462a, 0x7373,
-  0x7371, 0x4228, 0x385d, 0x7375, 0x7374, 0x345b, 0x7376, 0x7377,
-  0x7378, 0x403a, 0x4069, 0x4571, 0x737b, 0x737a, 0x3458, 0x737e,
-  0x7379, 0x737c, 0x737d, 0x7421, 0x7423, 0x3b49, 0x7422, 0x7424,
-  0x323e, 0x7426, 0x7425, 0x3c2e, 0x4357, 0x5961, 0x4060, 0x744c,
-  0x5751, 0x375b, 0x744e, 0x4123, 0x4649, 0x3456, 0x5533, 0x7450,
-  0x744f, 0x7451, 0x4b5a, 0x7452, 0x5441, 0x5660, 0x3760, 0x4138,
-  0x413b, 0x7453, 0x3e2c, 0x3462, 0x7454, 0x7455, 0x3e2b, 0x7456,
-  0x745b, 0x7457, 0x745a, 0x3a7d, 0x7458, 0x7459, 0x3862, 0x4c47,
-  0x745c, 0x325a, 0x4353, 0x5463, 0x3f37, 0x745d, 0x4534, 0x7469,
-  0x4f35, 0x4e49, 0x4b58, 0x4b77, 0x3d74, 0x574f, 0x405b, 0x5075,
-  0x746a, 0x746b, 0x746c, 0x7763, 0x3731, 0x746d, 0x576b, 0x746e,
-  0x6679, 0x3e40, 0x667a, 0x3a6c, 0x667b, 0x4f4b, 0x667c, 0x543c,
-  0x3c36, 0x667d, 0x667e, 0x3c4d, 0x4852, 0x4e33, 0x6721, 0x343f,
-  0x6722, 0x4934, 0x3859, 0x4449, 0x575d, 0x425a, 0x3757, 0x563d,
-  0x4e46, 0x3744, 0x4526, 0x6723, 0x4f5f, 0x6724, 0x6725, 0x6726,
-  0x4137, 0x5769, 0x4970, 0x4f38, 0x562f, 0x5655, 0x6727, 0x306d,
-  0x6728, 0x6729, 0x495c, 0x526f, 0x3e2d, 0x672a, 0x3073, 0x485e,
-  0x3d61, 0x672b, 0x4846, 0x672c, 0x3b66, 0x3878, 0x5124, 0x672d,
-  0x4267, 0x3e78, 0x3d4a, 0x4d33, 0x672e, 0x672f, 0x3e6e, 0x5065,
-  0x4b67, 0x4c50, 0x3c4c, 0x6730, 0x3c28, 0x5077, 0x6731, 0x5078,
-  0x6732, 0x6733, 0x3442, 0x6734, 0x6735, 0x497e, 0x4e2c, 0x4360,
-  0x6737, 0x3141, 0x3371, 0x6738, 0x6739, 0x575b, 0x5540, 0x673a,
-  0x424c, 0x573a, 0x673b, 0x673c, 0x673d, 0x3c6a, 0x4365, 0x4042,
-  0x673e, 0x673f, 0x3c29, 0x6740, 0x6741, 0x6736, 0x3650, 0x6742,
-  0x6743, 0x6744, 0x3b3a, 0x355e, 0x4246, 0x3160, 0x6745, 0x5435,
-  0x6746, 0x383f, 0x6748, 0x6747, 0x376c, 0x6749, 0x3278, 0x674a,
-  0x674b, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x5327, 0x4b75,
-  0x6751, 0x6752, 0x6753, 0x6754, 0x4949, 0x6755, 0x6756, 0x6757,
-  0x6758, 0x6759, 0x3d49, 0x675a, 0x733e, 0x3857, 0x4831, 0x733f,
-  0x7340, 0x7341, 0x395e, 0x4d78, 0x5868, 0x3a31, 0x425e, 0x6e37,
-  0x3723, 0x6e39, 0x6e38, 0x3055, 0x6e3b, 0x5556, 0x576f, 0x5643,
-  0x6e3d, 0x4a70, 0x6e3c, 0x6e3e, 0x6e40, 0x6e3f, 0x5172, 0x473c,
-  0x4340, 0x3861, 0x4167, 0x7446, 0x505f, 0x7447, 0x4f5b, 0x483a,
-  0x7448, 0x7449, 0x744a, 0x744b, 0x597a, 0x387e, 0x6571, 0x5370,
-  0x7460, 0x4e4c, 0x3361, 0x7134, 0x526e, 0x7461, 0x4f68, 0x7462,
-  0x474c, 0x3554, 0x3464, 0x7464, 0x7463, 0x7465, 0x7466, 0x7467,
-  0x3a32, 0x303f, 0x7468, 0x372d, 0x526d, 0x522b, 0x404f, 0x3f3c,
-  0x6b23, 0x555f, 0x6a48, 0x7173, 0x3678, 0x4b23, 0x444d, 0x7167,
-  0x7168, 0x387b, 0x7169, 0x3a44, 0x5445, 0x3052, 0x716a, 0x716b,
-  0x716c, 0x716d, 0x716e, 0x716f, 0x7171, 0x7170, 0x4555, 0x7172,
-  0x367a, 0x7174, 0x522e, 0x5e47, 0x4b4a, 0x335c, 0x3522, 0x3922,
-  0x4474, 0x7175, 0x7176, 0x4144, 0x417b, 0x5630, 0x7177, 0x7178,
-  0x412a, 0x4638, 0x3e5b, 0x7179, 0x344f, 0x717a, 0x6d32, 0x6d31,
-  0x4b60, 0x525e, 0x4b41, 0x5558, 0x4862, 0x405f, 0x3c21, 0x6b41,
-  0x5024, 0x5662, 0x3647, 0x3858, 0x6b40, 0x384e, 0x6b3f, 0x3326,
-  0x3949, 0x562b, 0x3774, 0x374a, 0x3c67, 0x373e, 0x6b46, 0x6b47,
-  0x3039, 0x3f4f, 0x6b45, 0x537d, 0x6b48, 0x6b49, 0x374e, 0x6b42,
-  0x6b44, 0x4976, 0x5657, 0x554d, 0x5032, 0x6b4f, 0x4e38, 0x6b50,
-  0x3528, 0x3133, 0x6b52, 0x4c25, 0x4556, 0x6b53, 0x6b51, 0x455f,
-  0x6b4e, 0x4a24, 0x6b55, 0x307b, 0x3a7a, 0x5837, 0x7163, 0x6b4a,
-  0x6b4b, 0x6b4c, 0x6b4d, 0x6b56, 0x6640, 0x6b59, 0x3f68, 0x5248,
-  0x6b57, 0x6b5c, 0x386c, 0x6b58, 0x3d3a, 0x5058, 0x3037, 0x6b5d,
-  0x445c, 0x562c, 0x3460, 0x4276, 0x3c39, 0x6b5a, 0x6b5b, 0x5460,
-  0x466a, 0x4454, 0x6b5f, 0x4527, 0x5975, 0x3231, 0x6b64, 0x3d45,
-  0x6b62, 0x6b63, 0x382c, 0x4d51, 0x6b65, 0x6b61, 0x4133, 0x4622,
-  0x4c73, 0x6b66, 0x4030, 0x5238, 0x6b67, 0x382f, 0x382d, 0x6b68,
-  0x473b, 0x4d73, 0x6b6a, 0x6b6b, 0x6b6d, 0x5048, 0x6b72, 0x6b6e,
-  0x6b71, 0x4879, 0x517c, 0x6b6c, 0x6b69, 0x3839, 0x4f59, 0x4465,
-  0x6b6f, 0x6b70, 0x4c5a, 0x4d48, 0x3072, 0x6b76, 0x6b75, 0x3232,
-  0x3860, 0x6b77, 0x316c, 0x4c45, 0x4424, 0x4f25, 0x6b79, 0x6c22,
-  0x4572, 0x6b7a, 0x4945, 0x625f, 0x6b7e, 0x4d4e, 0x6c21, 0x315b,
-  0x5337, 0x525c, 0x6b7d, 0x6b7b, 0x333c, 0x6a30, 0x5754, 0x742b,
-  0x3374, 0x5641, 0x5642, 0x5569, 0x3e4a, 0x7427, 0x5228, 0x7428,
-  0x7429, 0x742a, 0x3e4b, 0x535f, 0x4960, 0x4961, 0x7342, 0x4a66,
-  0x4c72, 0x6236, 0x4b34, 0x4e68, 0x565b, 0x742d, 0x742e, 0x742f,
-  0x7432, 0x3a3d, 0x7433, 0x3063, 0x7430, 0x7431, 0x3d22, 0x3255,
-  0x7436, 0x7437, 0x3666, 0x3230, 0x4f4f, 0x7434, 0x342c, 0x7435,
-  0x7438, 0x7439, 0x4d27, 0x743a, 0x743b, 0x743c, 0x4b52, 0x743d,
-  0x743e, 0x743f, 0x745e, 0x413c, 0x3c68, 0x492b, 0x515e, 0x6575,
-  0x5c33, 0x5255, 0x5c34, 0x302c, 0x5c35, 0x3d5a, 0x5c39, 0x5842,
-  0x5c37, 0x5373, 0x4956, 0x5c3a, 0x5c36, 0x5c3b, 0x4322, 0x5c3c,
-  0x5c45, 0x5c3d, 0x4e5f, 0x5625, 0x5c4f, 0x5c4d, 0x5c52, 0x3d66,
-  0x422b, 0x5c38, 0x5c4b, 0x5c4e, 0x5c3e, 0x3752, 0x3045, 0x5c47,
-  0x503e, 0x5c41, 0x3b28, 0x373c, 0x5c4c, 0x5c46, 0x5c3f, 0x475b,
-  0x513f, 0x5c40, 0x5c4a, 0x5c50, 0x4e2d, 0x5c42, 0x5c43, 0x5c48,
-  0x5c49, 0x3254, 0x5c51, 0x4b55, 0x5437, 0x5c5b, 0x5c5f, 0x4c26,
-  0x5c66, 0x4367, 0x5c5c, 0x3f41, 0x5c59, 0x307a, 0x3936, 0x5c65,
-  0x5c53, 0x5c44, 0x5c56, 0x4874, 0x3f60, 0x493b, 0x313d, 0x5322,
-  0x5c5a, 0x5c55, 0x463b, 0x5c5e, 0x5742, 0x432f, 0x3736, 0x4751,
-  0x4329, 0x5c62, 0x5c58, 0x5c6b, 0x5c54, 0x5c5d, 0x3e25, 0x5c57,
-  0x5c60, 0x5c63, 0x5c64, 0x5c78, 0x5c61, 0x5d22, 0x5c67, 0x3c6b,
-  0x3444, 0x4323, 0x3267, 0x5c7a, 0x5c72, 0x5c6f, 0x5c7c, 0x5c6e,
-  0x5270, 0x3268, 0x4857, 0x4863, 0x5c7b, 0x5c6d, 0x5c77, 0x5c75,
-  0x3e23, 0x5c74, 0x325d, 0x5c73, 0x3c76, 0x5c68, 0x3b44, 0x4073,
-  0x3c54, 0x5c69, 0x5c6a, 0x5c71, 0x5c76, 0x5c79, 0x3534, 0x4859,
-  0x3b67, 0x5c7e, 0x5c7d, 0x532b, 0x5d21, 0x5d23, 0x5d25, 0x5271,
-  0x5d24, 0x5d26, 0x5d27, 0x5229, 0x3a49, 0x5d29, 0x5d36, 0x5d31,
-  0x5d34, 0x5d30, 0x464e, 0x4072, 0x492f, 0x5c6c, 0x5d2e, 0x5d37,
-  0x5c70, 0x5d2f, 0x5d38, 0x5d2c, 0x5d39, 0x5d33, 0x5d2d, 0x442a,
-  0x5d28, 0x4033, 0x412b, 0x5d2a, 0x5d2b, 0x5d32, 0x3b71, 0x5d35,
-  0x5328, 0x5d3a, 0x5d3b, 0x4327, 0x5d52, 0x5d3c, 0x5d51, 0x393d,
-  0x3e55, 0x3e7a, 0x3a4a, 0x5d4a, 0x5d45, 0x5d3f, 0x324b, 0x5d43,
-  0x5d4b, 0x3224, 0x5d55, 0x5d3e, 0x4650, 0x5d50, 0x5d54, 0x4162,
-  0x3746, 0x5d4e, 0x5d4f, 0x5d44, 0x5d3d, 0x5d4d, 0x4c51, 0x5d49,
-  0x5d42, 0x4348, 0x463c, 0x4e2e, 0x5d4c, 0x5d48, 0x5d41, 0x5d46,
-  0x425c, 0x5329, 0x532a, 0x5d53, 0x4f74, 0x4878, 0x5d66, 0x5d47,
-  0x5d60, 0x4264, 0x5d61, 0x5d57, 0x5678, 0x5d59, 0x5d58, 0x3870,
-  0x5d56, 0x464f, 0x362d, 0x5d62, 0x3a79, 0x5461, 0x5d67, 0x3450,
-  0x5d5a, 0x3f7b, 0x5d63, 0x5d5f, 0x5d5d, 0x3559, 0x5d5b, 0x5d5c,
-  0x5d5e, 0x3d2f, 0x5d64, 0x5d65, 0x5d75, 0x4349, 0x4b62, 0x5d72,
-  0x5861, 0x4651, 0x5d74, 0x5574, 0x5d73, 0x5d70, 0x5d6c, 0x5d6f,
-  0x5d68, 0x506e, 0x4858, 0x5d6e, 0x5d69, 0x5d6a, 0x4b72, 0x5d6d,
-  0x314d, 0x4036, 0x3c3b, 0x5d71, 0x5d77, 0x5d76, 0x5d6b, 0x456e,
-  0x5d7b, 0x5e24, 0x5e23, 0x5d78, 0x436f, 0x427b, 0x5561, 0x4e35,
-  0x5d7d, 0x324c, 0x4468, 0x4a5f, 0x473e, 0x5d7a, 0x5d7c, 0x5d7e,
-  0x5e22, 0x302a, 0x314e, 0x5e2c, 0x5e26, 0x3d36, 0x486f, 0x5e21,
-  0x5e25, 0x5e29, 0x5e28, 0x5e27, 0x5e2d, 0x544c, 0x5e33, 0x5e2a,
-  0x5e2e, 0x4059, 0x3121, 0x5e36, 0x5e31, 0x5e32, 0x5126, 0x5e35,
-  0x5e2f, 0x5e30, 0x503d, 0x5e34, 0x4a6d, 0x5e39, 0x5e38, 0x5e37,
-  0x5e3b, 0x3d65, 0x3258, 0x436a, 0x5e3a, 0x453a, 0x5e3c, 0x4c59,
-  0x372a, 0x5465, 0x5e3d, 0x5e3f, 0x4422, 0x5e41, 0x5e3e, 0x5e40,
-  0x553a, 0x5e42, 0x722e, 0x3b22, 0x4232, 0x4530, 0x4247, 0x722f,
-  0x5069, 0x535d, 0x6b3d, 0x3366, 0x7230, 0x7231, 0x4a2d, 0x3a67,
-  0x7233, 0x7235, 0x7234, 0x4b64, 0x4f3a, 0x7232, 0x4a34, 0x524f,
-  0x426c, 0x4e43, 0x7238, 0x3076, 0x7237, 0x723e, 0x324f, 0x5141,
-  0x723a, 0x723c, 0x5469, 0x723b, 0x7236, 0x723f, 0x723d, 0x7239,
-  0x7247, 0x7244, 0x7246, 0x724a, 0x7242, 0x7240, 0x7245, 0x567b,
-  0x7241, 0x4779, 0x495f, 0x7248, 0x3946, 0x3530, 0x7243, 0x7249,
-  0x7250, 0x7256, 0x3b57, 0x7255, 0x4d5c, 0x566b, 0x7252, 0x7254,
-  0x3872, 0x724b, 0x724e, 0x4279, 0x555d, 0x724c, 0x724d, 0x724f,
-  0x7253, 0x7259, 0x533c, 0x366a, 0x4a71, 0x3764, 0x7257, 0x7258,
-  0x725a, 0x725d, 0x725b, 0x725c, 0x5151, 0x7251, 0x4d49, 0x4e4f,
-  0x5629, 0x7263, 0x435b, 0x7260, 0x402f, 0x726c, 0x725e, 0x7261,
-  0x7268, 0x7262, 0x7267, 0x7266, 0x7269, 0x725f, 0x7264, 0x726a,
-  0x532c, 0x7265, 0x3275, 0x7272, 0x502b, 0x7275, 0x3b48, 0x7279,
-  0x7270, 0x7276, 0x7278, 0x727a, 0x7273, 0x7271, 0x3a7b, 0x357b,
-  0x726f, 0x7277, 0x726d, 0x726e, 0x726b, 0x7326, 0x7323, 0x7322,
-  0x7274, 0x485a, 0x727b, 0x7325, 0x4378, 0x727d, 0x7327, 0x7329,
-  0x7324, 0x727c, 0x732b, 0x732a, 0x425d, 0x732e, 0x7330, 0x7321,
-  0x7331, 0x732c, 0x732f, 0x727e, 0x732d, 0x7332, 0x7334, 0x7328,
-  0x7333, 0x7335, 0x5037, 0x7338, 0x5979, 0x7339, 0x7337, 0x4864,
-  0x7336, 0x733a, 0x733b, 0x3440, 0x6e43, 0x733c, 0x733d, 0x512a,
-  0x742c, 0x5046, 0x5050, 0x515c, 0x4f4e, 0x3d56, 0x5143, 0x3a62,
-  0x6169, 0x5242, 0x7142, 0x3239, 0x316d, 0x7143, 0x4940, 0x3344,
-  0x5972, 0x4b25, 0x7144, 0x5654, 0x7145, 0x7440, 0x7146, 0x542c,
-  0x7147, 0x3040, 0x7441, 0x7442, 0x347c, 0x455b, 0x4c3b, 0x5064,
-  0x4d60, 0x7148, 0x5973, 0x313b, 0x4f2e, 0x3824, 0x714a, 0x714b,
-  0x3243, 0x4151, 0x5730, 0x7149, 0x714c, 0x714e, 0x5976, 0x5261,
-  0x5423, 0x7443, 0x4839, 0x7444, 0x714d, 0x714f, 0x3f63, 0x7150,
-  0x7154, 0x7156, 0x7151, 0x4951, 0x4561, 0x4263, 0x397c, 0x7153,
-  0x7155, 0x3953, 0x715b, 0x3a56, 0x307d, 0x7159, 0x7158, 0x7152,
-  0x715a, 0x7157, 0x486c, 0x4d4a, 0x715d, 0x653d, 0x715c, 0x715e,
-  0x715f, 0x4f65, 0x7445, 0x3d73, 0x7160, 0x7161, 0x4e77, 0x522a,
-  0x717b, 0x3832, 0x3c7b, 0x395b, 0x3966, 0x4359, 0x4a53, 0x6a68,
-  0x4040, 0x3e75, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e,
-  0x6a6f, 0x3d47, 0x757b, 0x757d, 0x757e, 0x757c, 0x3d62, 0x7621,
-  0x3425, 0x7622, 0x7623, 0x6c32, 0x5154, 0x596a, 0x7624, 0x6e3a,
-  0x5532, 0x537e, 0x4c5c, 0x4a44, 0x6540, 0x7625, 0x3e2f, 0x4629,
-  0x5a25, 0x3c46, 0x3629, 0x383c, 0x484f, 0x3c25, 0x5a26, 0x5a27,
-  0x4c56, 0x4843, 0x5a28, 0x467d, 0x5135, 0x5269, 0x5136, 0x3c47,
-  0x3d32, 0x3b64, 0x5a29, 0x5a2a, 0x5148, 0x5a2b, 0x506d, 0x366f,
-  0x425b, 0x4b4f, 0x376d, 0x4968, 0x3743, 0x3e77, 0x5624, 0x5a2c,
-  0x5a2d, 0x4640, 0x5767, 0x4a36, 0x5529, 0x4b5f, 0x556f, 0x5a2e,
-  0x565f, 0x344a, 0x5a30, 0x5a2f, 0x526b, 0x5a31, 0x5a32, 0x5a33,
-  0x4a54, 0x5a34, 0x4a2b, 0x5a35, 0x5a36, 0x334f, 0x566f, 0x5a37,
-  0x3b30, 0x352e, 0x5a38, 0x5a39, 0x396e, 0x512f, 0x5268, 0x5a3a,
-  0x3843, 0x4f6a, 0x326f, 0x5a3b, 0x5a3c, 0x3d6b, 0x4e5c, 0x536f,
-  0x5a3d, 0x4e73, 0x5a3e, 0x5355, 0x3b65, 0x5a3f, 0x4b35, 0x4b50,
-  0x5a40, 0x476b, 0x566e, 0x5a41, 0x4535, 0x3641, 0x5a42, 0x374c,
-  0x3f4e, 0x5a43, 0x5a44, 0x4b2d, 0x5a45, 0x3577, 0x5a46, 0x4142,
-  0x573b, 0x5a47, 0x4c38, 0x526a, 0x4431, 0x5a48, 0x357d, 0x3b51,
-  0x5a49, 0x5033, 0x5a4a, 0x5a4b, 0x4e3d, 0x5a4c, 0x5a4d, 0x5a4e,
-  0x3277, 0x5a51, 0x5a4f, 0x5168, 0x5a50, 0x4355, 0x5a52, 0x5a53,
-  0x5a54, 0x5a55, 0x503b, 0x5225, 0x3079, 0x5a56, 0x472b, 0x5a57,
-  0x3d77, 0x4321, 0x5a58, 0x5a59, 0x437d, 0x4c37, 0x5a5a, 0x5a5b,
-  0x403e, 0x4657, 0x5a5c, 0x5a5d, 0x4734, 0x5a5e, 0x5a5f, 0x3948,
-  0x3b6d, 0x3639, 0x7478, 0x7479, 0x4d63, 0x7539, 0x6b60, 0x4f73,
-  0x3b3f, 0x3a40, 0x5425, 0x6159, 0x7574, 0x312a, 0x3272, 0x7575,
-  0x7577, 0x3a51, 0x7576, 0x4332, 0x7579, 0x7578, 0x3134, 0x556a,
-  0x383a, 0x3931, 0x3246, 0x5470, 0x4f4d, 0x305c, 0x554b, 0x3b75,
-  0x564a, 0x3737, 0x4c30, 0x4636, 0x3161, 0x393a, 0x567c, 0x3961,
-  0x3721, 0x3c7a, 0x6a5a, 0x6a5b, 0x4c79, 0x3973, 0x6a5c, 0x347b,
-  0x4333, 0x3751, 0x3a58, 0x6a5d, 0x5474, 0x6a5e, 0x3c56, 0x3b5f,
-  0x6a5f, 0x415e, 0x4238, 0x545f, 0x574a, 0x6a60, 0x6a61, 0x6a64,
-  0x6a62, 0x6a63, 0x495e, 0x3833, 0x3644, 0x6a65, 0x4a6a, 0x494d,
-  0x344d, 0x6259, 0x4562, 0x6a66, 0x4035, 0x5738, 0x6a67, 0x572c,
-  0x487c, 0x5853, 0x584d, 0x545e, 0x5479, 0x4944, 0x532e, 0x3853,
-  0x3360, 0x4962, 0x7476, 0x3a55, 0x7477, 0x575f, 0x7471, 0x3830,
-  0x5554, 0x384f, 0x4670, 0x3343, 0x7472, 0x332c, 0x543d, 0x4777,
-  0x7474, 0x7473, 0x4c4b, 0x4824, 0x7475, 0x5763, 0x453f, 0x7540,
-  0x753b, 0x7543, 0x7542, 0x563a, 0x7541, 0x543e, 0x7544, 0x754c,
-  0x304f, 0x3578, 0x7549, 0x754a, 0x455c, 0x7545, 0x7546, 0x7547,
-  0x754b, 0x3e60, 0x7548, 0x387a, 0x7550, 0x7553, 0x3f67, 0x3972,
-  0x753c, 0x754d, 0x4237, 0x4c78, 0x3c79, 0x754e, 0x754f, 0x7551,
-  0x3665, 0x7552, 0x7555, 0x753d, 0x7554, 0x533b, 0x336c, 0x4c24,
-  0x7556, 0x7557, 0x3e61, 0x7558, 0x4c5f, 0x755b, 0x3248, 0x5759,
-  0x7559, 0x755a, 0x755c, 0x7562, 0x7560, 0x755f, 0x755d, 0x7561,
-  0x755e, 0x7564, 0x7565, 0x4c63, 0x653f, 0x3538, 0x7563, 0x7568,
-  0x4c23, 0x7566, 0x7567, 0x753e, 0x3144, 0x753f, 0x3545, 0x3264,
-  0x756c, 0x7569, 0x3657, 0x756d, 0x756a, 0x756b, 0x345a, 0x546a,
-  0x756e, 0x3379, 0x756f, 0x7571, 0x7570, 0x7572, 0x7573, 0x496d,
-  0x392a, 0x477b, 0x3663, 0x4c49, 0x6a26, 0x3335, 0x547e, 0x396c,
-  0x5079, 0x696d, 0x572a, 0x696e, 0x4256, 0x486d, 0x3a64, 0x696f,
-  0x6970, 0x6971, 0x5661, 0x6972, 0x6973, 0x6975, 0x6974, 0x6976,
-  0x6977, 0x4761, 0x6978, 0x5458, 0x6979, 0x3d4e, 0x697a, 0x697b,
-  0x3d4f, 0x697c, 0x3828, 0x413e, 0x697d, 0x3132, 0x3b54, 0x3975,
-  0x697e, 0x6a21, 0x6a22, 0x6a23, 0x3778, 0x3c2d, 0x4a64, 0x604e,
-  0x542f, 0x4f3d, 0x5537, 0x6a24, 0x555e, 0x6a25, 0x5041, 0x393c,
-  0x3447, 0x3159, 0x4031, 0x3166, 0x3167, 0x3168, 0x333d, 0x4868,
-  0x6541, 0x315f, 0x4149, 0x346f, 0x4728, 0x5358, 0x4679, 0x5138,
-  0x397d, 0x4275, 0x532d, 0x544b, 0x3d7c, 0x6542, 0x3735, 0x6543,
-  0x3b39, 0x5562, 0x3d78, 0x5436, 0x4e25, 0x412c, 0x3359, 0x4c76,
-  0x6546, 0x6544, 0x6548, 0x654a, 0x6547, 0x354f, 0x4648, 0x357c,
-  0x6545, 0x4a76, 0x6549, 0x4354, 0x3145, 0x3c23, 0x5737, 0x4d4b,
-  0x4b4d, 0x4a4a, 0x4c53, 0x654c, 0x654b, 0x4466, 0x5121, 0x5137,
-  0x654d, 0x6550, 0x4d38, 0x5670, 0x654f, 0x355d, 0x4d3e, 0x6551,
-  0x363a, 0x4d28, 0x3964, 0x4a45, 0x3351, 0x4b59, 0x546c, 0x6552,
-  0x376a, 0x654e, 0x6555, 0x347e, 0x6556, 0x6553, 0x6554, 0x525d,
-  0x425f, 0x3146, 0x5362, 0x365d, 0x4b6c, 0x6557, 0x5376, 0x3169,
-  0x3674, 0x655a, 0x6558, 0x6559, 0x3540, 0x5245, 0x655c, 0x655e,
-  0x655d, 0x4732, 0x5223, 0x655b, 0x5462, 0x555a, 0x6560, 0x5771,
-  0x6561, 0x315c, 0x517b, 0x6562, 0x6564, 0x6563, 0x6565, 0x5258,
-  0x354b, 0x675f, 0x5a75, 0x5a78, 0x5a76, 0x5a77, 0x5a7a, 0x504f,
-  0x4447, 0x306e, 0x5030, 0x5a79, 0x534a, 0x3a2a, 0x5b22, 0x4771,
-  0x5a7c, 0x5a7b, 0x495b, 0x5a7d, 0x5b21, 0x575e, 0x5a7e, 0x415a,
-  0x5b25, 0x5374, 0x5b27, 0x5b24, 0x5b28, 0x3d3c, 0x4049, 0x5b23,
-  0x5b26, 0x5623, 0x5b29, 0x5b2d, 0x5b2e, 0x5b2c, 0x3a42, 0x3f24,
-  0x5b2b, 0x5b2a, 0x5447, 0x323f, 0x5b2f, 0x3979, 0x5b30, 0x333b,
-  0x3526, 0x363c, 0x5b31, 0x3675, 0x5b32, 0x3149, 0x5b34, 0x5b33,
-  0x5b35, 0x5b37, 0x5b36, 0x5b38, 0x5b39, 0x5b3a, 0x534f, 0x747a,
-  0x4775, 0x5743, 0x4564, 0x747c, 0x747d, 0x747b, 0x3e46, 0x506f,
-  0x3753, 0x544d, 0x4c2a, 0x7522, 0x7521, 0x3a28, 0x747e, 0x4b56,
-  0x7524, 0x4052, 0x336a, 0x4d2a, 0x7525, 0x7523, 0x3d34, 0x7528,
-  0x7529, 0x3d4d, 0x4338, 0x3f61, 0x4b61, 0x752a, 0x7526, 0x7527,
-  0x4470, 0x752c, 0x343c, 0x576d, 0x3457, 0x752b, 0x752e, 0x752d,
-  0x752f, 0x5051, 0x4351, 0x4829, 0x7530, 0x7531, 0x7532, 0x7533,
-  0x7534, 0x7535, 0x7537, 0x7536, 0x7538, 0x3249, 0x5354, 0x4a4d,
-  0x406f, 0x5658, 0x5230, 0x413f, 0x3d70, 0x382a, 0x3c78, 0x7646,
-  0x7647, 0x7648, 0x7649, 0x764a, 0x764c, 0x764b, 0x7769, 0x764d,
-  0x764e, 0x6e44, 0x6e45, 0x6e46, 0x556b, 0x3624, 0x6e48, 0x6e47,
-  0x6e49, 0x6e4a, 0x4725, 0x6e4b, 0x6e4c, 0x3730, 0x3576, 0x6e4d,
-  0x6e4f, 0x6e4e, 0x3846, 0x6e50, 0x6e51, 0x6e52, 0x365b, 0x332e,
-  0x5653, 0x4446, 0x3135, 0x3856, 0x6e53, 0x6e54, 0x543f, 0x4755,
-  0x3e7b, 0x4e59, 0x3933, 0x6e56, 0x6e55, 0x6e58, 0x6e57, 0x4525,
-  0x6e59, 0x6e5a, 0x472e, 0x6e5b, 0x472f, 0x6e5c, 0x3227, 0x6e5d,
-  0x6e5e, 0x6e5f, 0x6e60, 0x6e61, 0x576a, 0x6e62, 0x6e63, 0x3c58,
-  0x6e64, 0x534b, 0x4c7a, 0x322c, 0x4165, 0x6e65, 0x4726, 0x432d,
-  0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, 0x6e6b, 0x6e6c, 0x6e6d,
-  0x6e6e, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e74, 0x6e73, 0x6e75,
-  0x4d2d, 0x4241, 0x6e76, 0x6e77, 0x6e78, 0x5521, 0x6e79, 0x4f33,
-  0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6f21, 0x6e7e, 0x6f22, 0x3875,
-  0x437a, 0x6f23, 0x6f24, 0x3d42, 0x523f, 0x3279, 0x6f25, 0x6f26,
-  0x6f27, 0x5278, 0x6f28, 0x567d, 0x6f29, 0x464c, 0x6f2a, 0x6f2b,
-  0x4134, 0x6f2c, 0x4f7a, 0x4b78, 0x6f2e, 0x6f2d, 0x337a, 0x3978,
-  0x6f2f, 0x6f30, 0x5062, 0x6f31, 0x6f32, 0x3766, 0x503f, 0x6f33,
-  0x6f34, 0x6f35, 0x4871, 0x4c60, 0x6f36, 0x6f37, 0x6f38, 0x6f39,
-  0x6f3a, 0x5560, 0x6f3b, 0x346d, 0x432a, 0x6f3c, 0x6f3d, 0x6f3e,
-  0x6f3f, 0x4e7d, 0x6f40, 0x4260, 0x3438, 0x5736, 0x3d75, 0x4f47,
-  0x6f43, 0x6f41, 0x6f42, 0x6f44, 0x3627, 0x3c7c, 0x3e62, 0x434c,
-  0x6f45, 0x6f46, 0x6f47, 0x6f4f, 0x6f48, 0x6f49, 0x6f4a, 0x4742,
-  0x6f71, 0x364d, 0x6f4b, 0x6f4c, 0x6f4d, 0x3646, 0x433e, 0x6f4e,
-  0x6f50, 0x6f51, 0x6f52, 0x5572, 0x6f53, 0x4477, 0x6f54, 0x4478,
-  0x6f55, 0x6f56, 0x3864, 0x3077, 0x6f57, 0x6f58, 0x6f59, 0x6f5a,
-  0x6f5b, 0x6f5c, 0x6f5d, 0x6f5e, 0x3e35, 0x6f61, 0x6f5f, 0x6f60,
-  0x6f62, 0x6f63, 0x414d, 0x6f64, 0x6f65, 0x6f66, 0x6f67, 0x6f68,
-  0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x4058, 0x6f6d, 0x412d, 0x6f6e,
-  0x6f6f, 0x6f70, 0x4f62, 0x3324, 0x4345, 0x6345, 0x4941, 0x6346,
-  0x3155, 0x4e4a, 0x3433, 0x4872, 0x6347, 0x4f50, 0x6348, 0x3c64,
-  0x6349, 0x634a, 0x4346, 0x5522, 0x4456, 0x396b, 0x4e45, 0x634b,
-  0x4376, 0x634c, 0x3727, 0x3873, 0x3a52, 0x634d, 0x634e, 0x5444,
-  0x634f, 0x6350, 0x514b, 0x6351, 0x6352, 0x6353, 0x6354, 0x5156,
-  0x6355, 0x327b, 0x403b, 0x6356, 0x402b, 0x6357, 0x6358, 0x6359,
-  0x635a, 0x635b, 0x3837, 0x5a62, 0x3653, 0x5a64, 0x5a63, 0x5a66,
-  0x486e, 0x5a65, 0x3740, 0x5174, 0x5275, 0x5573, 0x3d57, 0x5768,
-  0x5a68, 0x5a67, 0x3022, 0x4d53, 0x5a69, 0x383d, 0x3c4a, 0x423d,
-  0x4224, 0x3342, 0x5a6a, 0x422a, 0x4430, 0x3d35, 0x4f5e, 0x5a6b,
-  0x4942, 0x315d, 0x5a6c, 0x3638, 0x543a, 0x337d, 0x5a6d, 0x5449,
-  0x4f55, 0x4563, 0x5a6e, 0x5a6f, 0x5a70, 0x416a, 0x4c55, 0x4f5d,
-  0x5367, 0x4221, 0x5a71, 0x4b65, 0x5a72, 0x4b66, 0x527e, 0x3874,
-  0x5a73, 0x302f, 0x4f36, 0x554f, 0x4b6d, 0x5a74, 0x6344, 0x4125,
-  0x763f, 0x7640, 0x7641, 0x4451, 0x4838, 0x5163, 0x505b, 0x5145,
-  0x3c2f, 0x394d, 0x6f74, 0x3446, 0x533a, 0x7642, 0x337b, 0x7643,
-  0x3571, 0x7645, 0x536a, 0x7627, 0x5129, 0x7629, 0x7628, 0x4163,
-  0x4057, 0x3122, 0x4e6d, 0x5068, 0x762b, 0x4f76, 0x762a, 0x5570,
-  0x762c, 0x4339, 0x3b74, 0x762e, 0x762d, 0x445e, 0x4158, 0x4b2a,
-  0x4f3c, 0x762f, 0x7630, 0x7631, 0x4236, 0x3054, 0x4579, 0x7632,
-  0x4760, 0x7626, 0x3e38, 0x3e32, 0x3565, 0x3747, 0x3f3f, 0x4352,
-  0x4366, 0x584c, 0x386f, 0x3d79, 0x5125, 0x3050, 0x7730, 0x7731,
-  0x502c, 0x3030, 0x7732, 0x7733, 0x7734, 0x474a, 0x3e4f, 0x7737,
-  0x7736, 0x315e, 0x7735, 0x7738, 0x7739, 0x4e24, 0x484d, 0x3a2b,
-  0x6838, 0x6839, 0x683a, 0x3e42, 0x5274, 0x544f, 0x4958, 0x5233,
-  0x3625, 0x476a, 0x717c, 0x4f6e, 0x4b33, 0x506b, 0x676f, 0x4d67,
-  0x394b, 0x3659, 0x717d, 0x3064, 0x4b4c, 0x717e, 0x5424, 0x422d,
-  0x416c, 0x4644, 0x3e31, 0x7221, 0x3c55, 0x7222, 0x7223, 0x7224,
-  0x5243, 0x4635, 0x4d47, 0x7225, 0x5331, 0x3f45, 0x4c62, 0x7226,
-  0x7227, 0x5155, 0x366e, 0x7228, 0x7229, 0x355f, 0x722a, 0x722b,
-  0x327c, 0x722c, 0x722d, 0x4827, 0x3767, 0x6c29, 0x6c2a, 0x6c2b,
-  0x6c2c, 0x462e, 0x6c2d, 0x6c2e, 0x3749, 0x4a33, 0x6238, 0x774f,
-  0x7750, 0x324d, 0x7751, 0x7753, 0x7752, 0x623b, 0x3c22, 0x623c,
-  0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x3739, 0x527b, 0x3d24,
-  0x4a4e, 0x3125, 0x4b47, 0x6242, 0x367c, 0x4844, 0x6243, 0x3d48,
-  0x317d, 0x6244, 0x3676, 0x6245, 0x4459, 0x6246, 0x4f5a, 0x395d,
-  0x6247, 0x4021, 0x6248, 0x3276, 0x6249, 0x4173, 0x624a, 0x624b,
-  0x4278, 0x624c, 0x624d, 0x624e, 0x4a57, 0x5838, 0x5965, 0x4f63,
-  0x7025, 0x5c30, 0x426d, 0x5426, 0x4d54, 0x5131, 0x335b, 0x477d,
-  0x3235, 0x423f, 0x6660, 0x4a3b, 0x6661, 0x6662, 0x3e54, 0x6663,
-  0x5724, 0x4d55, 0x6665, 0x3c5d, 0x6664, 0x6666, 0x6667, 0x426e,
-  0x3d3e, 0x6668, 0x4266, 0x3a27, 0x6669, 0x666a, 0x3352, 0x5169,
-  0x3f25, 0x666b, 0x466f, 0x666c, 0x666d, 0x666e, 0x462d, 0x666f,
-  0x4927, 0x6670, 0x6671, 0x6672, 0x6539, 0x6673, 0x6674, 0x4262,
-  0x6675, 0x6676, 0x5668, 0x6677, 0x6678, 0x3947, 0x773b, 0x773a,
-  0x773e, 0x773c, 0x3a21, 0x773f, 0x7740, 0x7742, 0x7741, 0x7744,
-  0x7743, 0x7745, 0x7746, 0x7747, 0x4b68, 0x385f, 0x7754, 0x7755,
-  0x7756, 0x7758, 0x775a, 0x7757, 0x775b, 0x7759, 0x5757, 0x775c,
-  0x775d, 0x775e, 0x775f, 0x7760, 0x5b4b, 0x582a, 0x6577, 0x396d,
-  0x3f7d, 0x3b6a, 0x7749, 0x4647, 0x7748, 0x774a, 0x774c, 0x774b,
-  0x774d, 0x4e3a, 0x774e, 0x4427, 0x5363, 0x764f, 0x4233, 0x7650,
-  0x7651, 0x7652, 0x7653, 0x7654, 0x7656, 0x312b, 0x7657, 0x7658,
-  0x7659, 0x765a, 0x765b, 0x765c, 0x765d, 0x765e, 0x4f4a, 0x765f,
-  0x7660, 0x7661, 0x7662, 0x7663, 0x7664, 0x4070, 0x7665, 0x7666,
-  0x7667, 0x7668, 0x7669, 0x766a, 0x766b, 0x766c, 0x766d, 0x766e,
-  0x766f, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x3e28, 0x7675,
-  0x7676, 0x7677, 0x7678, 0x487a, 0x7679, 0x767a, 0x767b, 0x767c,
-  0x767d, 0x767e, 0x7721, 0x7722, 0x7723, 0x7724, 0x7725, 0x7726,
-  0x7727, 0x7728, 0x316e, 0x7729, 0x772a, 0x772b, 0x772c, 0x772d,
-  0x415b, 0x772e, 0x772f, 0x4471, 0x702f, 0x3c26, 0x7030, 0x4379,
-  0x4538, 0x513b, 0x7031, 0x7032, 0x7033, 0x7034, 0x7035, 0x513c,
-  0x516c, 0x7037, 0x7036, 0x5427, 0x4d52, 0x7038, 0x703a, 0x7039,
-  0x703b, 0x703c, 0x386b, 0x703d, 0x3a68, 0x703e, 0x703f, 0x3e69,
-  0x7040, 0x366c, 0x7041, 0x7042, 0x7043, 0x7044, 0x4835, 0x7045,
-  0x7046, 0x7047, 0x4574, 0x7048, 0x7049, 0x704a, 0x773d, 0x704b,
-  0x704c, 0x704d, 0x704e, 0x704f, 0x3a57, 0x7050, 0x7051, 0x7052,
-  0x7053, 0x7054, 0x7055, 0x7056, 0x7058, 0x5325, 0x7057, 0x7059,
-  0x753a, 0x4239, 0x7764, 0x7765, 0x7766, 0x7767, 0x7768, 0x4234,
-  0x776a, 0x776b, 0x4273, 0x7470, 0x746f, 0x4269, 0x7761, 0x7762,
-  0x3b46, 0x5964, 0x4a72, 0x4068, 0x7024, 0x3a5a, 0x472d, 0x442c,
-  0x776c, 0x776d, 0x776e, 0x7770, 0x776f, 0x7771, 0x7774, 0x7773,
-  0x7772, 0x7775, 0x7776, 0x6d69, 0x6d6a, 0x6d6b, 0x763c, 0x763d,
-  0x763e, 0x3626, 0x583e, 0x3944, 0x583b, 0x5c31, 0x4a73, 0x7777,
-  0x7778, 0x7779, 0x777b, 0x777a, 0x3147, 0x777c, 0x777d, 0x777e,
-  0x466b, 0x6c34, 0x335d, 0x7633, 0x7634, 0x4164, 0x7635, 0x7636,
-  0x7637, 0x7638, 0x7639, 0x763a, 0x4823, 0x763b, 0x417a, 0x3928,
-  0x6d68, 0x396a, 0x595f, 0x2321, 0x2322, 0x2323, 0x2167, 0x2325,
-  0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d,
-  0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335,
-  0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d,
-  0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345,
-  0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d,
-  0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355,
-  0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x235c, 0x235d,
-  0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365,
-  0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d,
-  0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375,
-  0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d,
-  0x212b, 0x2169, 0x216a, 0x237e, 0x2324,
-};
-
-static const Summary16 gb2312_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0190 }, {    3, 0x0003 },
-  {    5, 0x0000 }, {    5, 0x0080 }, {    6, 0x3703 }, {   13, 0x168c },
-  /* 0x0100 */
-  {   19, 0x0002 }, {   20, 0x0808 }, {   22, 0x0800 }, {   23, 0x0000 },
-  {   23, 0x2000 }, {   24, 0x0000 }, {   24, 0x0800 }, {   25, 0x0000 },
-  {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 }, {   25, 0x0000 },
-  {   25, 0x4000 }, {   26, 0x1555 }, {   33, 0x0000 }, {   33, 0x0000 },
-  /* 0x0200 */
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 }, {   33, 0x0000 },
-  {   33, 0x0280 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  /* 0x0300 */
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 }, {   35, 0x0000 },
-  {   35, 0x0000 }, {   35, 0xfffe }, {   50, 0x03fb }, {   59, 0xfffe },
-  {   74, 0x03fb }, {   83, 0x0000 }, {   83, 0x0000 }, {   83, 0x0000 },
-  /* 0x0400 */
-  {   83, 0x0002 }, {   84, 0xffff }, {  100, 0xffff }, {  116, 0xffff },
-  {  132, 0xffff }, {  148, 0x0002 },
-};
-static const Summary16 gb2312_uni2indx_page20[101] = {
-  /* 0x2000 */
-  {  149, 0x0000 }, {  149, 0x3360 }, {  155, 0x0040 }, {  156, 0x080d },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 }, {  160, 0x0000 },
-  /* 0x2100 */
-  {  160, 0x0008 }, {  161, 0x0040 }, {  162, 0x0000 }, {  162, 0x0000 },
-  {  162, 0x0000 }, {  162, 0x0000 }, {  162, 0x0fff }, {  174, 0x0000 },
-  {  174, 0x0000 }, {  174, 0x000f }, {  178, 0x0000 }, {  178, 0x0000 },
-  {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 }, {  178, 0x0000 },
-  /* 0x2200 */
-  {  178, 0x8100 }, {  180, 0x6402 }, {  184, 0x4fa1 }, {  192, 0x20f0 },
-  {  197, 0x1100 }, {  199, 0x0000 }, {  199, 0xc033 }, {  205, 0x0000 },
-  {  205, 0x0000 }, {  205, 0x0200 }, {  206, 0x0020 }, {  207, 0x0000 },
-  {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 }, {  207, 0x0000 },
-  /* 0x2300 */
-  {  207, 0x0000 }, {  207, 0x0004 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  /* 0x2400 */
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x0000 },
-  {  208, 0x0000 }, {  208, 0x0000 }, {  208, 0x03ff }, {  218, 0xfff0 },
-  {  230, 0xffff }, {  246, 0x0fff }, {  258, 0x0000 }, {  258, 0x0000 },
-  {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 }, {  258, 0x0000 },
-  /* 0x2500 */
-  {  258, 0xffff }, {  274, 0xffff }, {  290, 0xffff }, {  306, 0xffff },
-  {  322, 0x0fff }, {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0000 },
-  {  334, 0x0000 }, {  334, 0x0000 }, {  334, 0x0003 }, {  336, 0x000c },
-  {  338, 0xc8c0 }, {  343, 0x0000 }, {  343, 0x0000 }, {  343, 0x0000 },
-  /* 0x2600 */
-  {  343, 0x0060 }, {  345, 0x0000 }, {  345, 0x0000 }, {  345, 0x0000 },
-  {  345, 0x0005 },
-};
-static const Summary16 gb2312_uni2indx_page30[35] = {
-  /* 0x3000 */
-  {  347, 0xff2f }, {  360, 0x00fb }, {  367, 0x0000 }, {  367, 0x0000 },
-  {  367, 0xfffe }, {  382, 0xffff }, {  398, 0xffff }, {  414, 0xffff },
-  {  430, 0xffff }, {  446, 0x000f }, {  450, 0xfffe }, {  465, 0xffff },
-  {  481, 0xffff }, {  497, 0xffff }, {  513, 0xffff }, {  529, 0x087f },
-  /* 0x3100 */
-  {  537, 0xffe0 }, {  548, 0xffff }, {  564, 0x03ff }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x0000 },
-  /* 0x3200 */
-  {  574, 0x0000 }, {  574, 0x0000 }, {  574, 0x03ff },
-};
-static const Summary16 gb2312_uni2indx_page4e[1263] = {
-  /* 0x4e00 */
-  {  584, 0x7f8b }, {  595, 0x7f7b }, {  608, 0x3db4 }, {  617, 0xef55 },
-  {  628, 0xfba8 }, {  638, 0xf35d }, {  649, 0x0243 }, {  653, 0x400b },
-  {  657, 0xfb40 }, {  665, 0x8d3e }, {  674, 0x7bf7 }, {  687, 0x8c2c },
-  {  693, 0x6eff }, {  706, 0xe3fa }, {  717, 0x1d3a }, {  725, 0xa8ed },
-  /* 0x4f00 */
-  {  734, 0xe602 }, {  740, 0xcf83 }, {  749, 0x8cf5 }, {  758, 0x3555 },
-  {  766, 0xe048 }, {  771, 0xffab }, {  784, 0x92b9 }, {  792, 0xd859 },
-  {  800, 0xab18 }, {  807, 0x2892 }, {  812, 0xd7e9 }, {  823, 0x8020 },
-  {  825, 0xc438 }, {  831, 0xf583 }, {  840, 0xe74a }, {  849, 0x450a },
-  /* 0x5000 */
-  {  854, 0xb000 }, {  857, 0x9714 }, {  864, 0x7762 }, {  873, 0x5400 },
-  {  876, 0xd188 }, {  882, 0x1420 }, {  885, 0x1020 }, {  887, 0xc8c0 },
-  {  892, 0x2121 }, {  896, 0x0000 }, {  896, 0x13a8 }, {  902, 0x0c04 },
-  {  905, 0x8000 }, {  906, 0x0440 }, {  908, 0x70c0 }, {  913, 0x0828 },
-  /* 0x5100 */
-  {  916, 0x08c0 }, {  919, 0x0004 }, {  920, 0x0002 }, {  921, 0x8000 },
-  {  922, 0x2b7b }, {  932, 0x1472 }, {  938, 0x7924 }, {  945, 0x3bfb },
-  {  957, 0x3327 }, {  965, 0x1ae4 }, {  972, 0x9835 }, {  979, 0x38ef },
-  {  989, 0x9ad1 }, {  997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 },
-  /* 0x5200 */
-  { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 },
-  { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 },
-  { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e },
-  { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 },
-  /* 0x5300 */
-  { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 },
-  { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb },
-  { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 },
-  { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef },
-  /* 0x5400 */
-  { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 },
-  { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee },
-  { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a },
-  { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c },
-  /* 0x5500 */
-  { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b },
-  { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 },
-  { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa },
-  { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac },
-  /* 0x5600 */
-  { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 },
-  { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 },
-  { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 },
-  { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 },
-  /* 0x5700 */
-  { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 },
-  { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 },
-  { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 },
-  { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 },
-  /* 0x5800 */
-  { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 },
-  { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 },
-  { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 },
-  { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 },
-  /* 0x5900 */
-  { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 },
-  { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 },
-  { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 },
-  { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 },
-  /* 0x5a00 */
-  { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 },
-  { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 },
-  { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c },
-  { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 },
-  /* 0x5b00 */
-  { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 },
-  { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b },
-  { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 },
-  { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 },
-  /* 0x5c00 */
-  { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 },
-  { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 },
-  { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa },
-  { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 },
-  /* 0x5d00 */
-  { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 },
-  { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 },
-  { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 },
-  { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e },
-  /* 0x5e00 */
-  { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 },
-  { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c },
-  { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 },
-  { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 },
-  /* 0x5f00 */
-  { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 },
-  { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b },
-  { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 },
-  { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 },
-  /* 0x6000 */
-  { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 },
-  { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 },
-  { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 },
-  { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 },
-  /* 0x6100 */
-  { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 },
-  { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 },
-  { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 },
-  { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 },
-  /* 0x6200 */
-  { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 },
-  { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 },
-  { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 },
-  { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da },
-  /* 0x6300 */
-  { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 },
-  { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 },
-  { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 },
-  { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 },
-  /* 0x6400 */
-  { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 },
-  { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 },
-  { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 },
-  { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 },
-  /* 0x6500 */
-  { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 },
-  { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 },
-  { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 },
-  { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 },
-  /* 0x6600 */
-  { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 },
-  { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 },
-  { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 },
-  { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d },
-  /* 0x6700 */
-  { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 },
-  { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad },
-  { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 },
-  { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b },
-  /* 0x6800 */
-  { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c },
-  { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 },
-  { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 },
-  { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 },
-  /* 0x6900 */
-  { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 },
-  { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 },
-  { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 },
-  { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 },
-  /* 0x6a00 */
-  { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 },
-  { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 },
-  { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 },
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 },
-  /* 0x6b00 */
-  { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 },
-  { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 },
-  { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 },
-  { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 },
-  /* 0x6c00 */
-  { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 },
-  { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 },
-  { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e },
-  { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb },
-  /* 0x6d00 */
-  { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e },
-  { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 },
-  { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 },
-  { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a },
-  /* 0x6e00 */
-  { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 },
-  { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 },
-  { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 },
-  { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 },
-  /* 0x6f00 */
-  { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a },
-  { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 },
-  { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 },
-  { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 },
-  /* 0x7000 */
-  { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 },
-  { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 },
-  { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a },
-  { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 },
-  /* 0x7100 */
-  { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 },
-  { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c },
-  { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 },
-  { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 },
-  /* 0x7200 */
-  { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 },
-  { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 },
-  { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 },
-  { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f },
-  /* 0x7300 */
-  { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 },
-  { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 },
-  { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d },
-  { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 },
-  /* 0x7400 */
-  { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 },
-  { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 },
-  { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 },
-  { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 },
-  /* 0x7500 */
-  { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf },
-  { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 },
-  { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f },
-  { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 },
-  /* 0x7600 */
-  { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 },
-  { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 },
-  { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 },
-  { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 },
-  /* 0x7700 */
-  { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 },
-  { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 },
-  { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 },
-  { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 },
-  /* 0x7800 */
-  { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 },
-  { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 },
-  { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f },
-  { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 },
-  /* 0x7900 */
-  { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 },
-  { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 },
-  { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 },
-  { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 },
-  /* 0x7a00 */
-  { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 },
-  { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 },
-  { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 },
-  { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 },
-  /* 0x7b00 */
-  { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a },
-  { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 },
-  { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 },
-  { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 },
-  /* 0x7c00 */
-  { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 },
-  { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 },
-  { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e },
-  { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 },
-  /* 0x7d00 */
-  { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 },
-  { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 },
-  { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 },
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 },
-  /* 0x7e00 */
-  { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 },
-  { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 },
-  { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef },
-  { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff },
-  /* 0x7f00 */
-  { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f },
-  { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 },
-  { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 },
-  { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b },
-  /* 0x8000 */
-  { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea },
-  { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 },
-  { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 },
-  { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f },
-  /* 0x8100 */
-  { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 },
-  { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 },
-  { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 },
-  { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 },
-  /* 0x8200 */
-  { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb },
-  { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d },
-  { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b },
-  { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 },
-  /* 0x8300 */
-  { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a },
-  { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 },
-  { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df },
-  { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 },
-  /* 0x8400 */
-  { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 },
-  { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a },
-  { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 },
-  { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 },
-  /* 0x8500 */
-  { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 },
-  { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 },
-  { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 },
-  { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 },
-  /* 0x8600 */
-  { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 },
-  { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 },
-  { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 },
-  { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f },
-  /* 0x8700 */
-  { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 },
-  { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 },
-  { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 },
-  { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 },
-  /* 0x8800 */
-  { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 },
-  { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 },
-  { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 },
-  { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b },
-  /* 0x8900 */
-  { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 },
-  { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 },
-  { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 },
-  { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 },
-  /* 0x8a00 */
-  { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 },
-  { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 },
-  { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  /* 0x8b00 */
-  { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 },
-  { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 },
-  { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd },
-  { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff },
-  /* 0x8c00 */
-  { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff },
-  { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 },
-  { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 },
-  /* 0x8d00 */
-  { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff },
-  { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 },
-  { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a },
-  { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 },
-  /* 0x8e00 */
-  { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 },
-  { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 },
-  { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 },
-  { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  /* 0x8f00 */
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 },
-  { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff },
-  { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 },
-  { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 },
-  /* 0x9000 */
-  { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 },
-  { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 },
-  { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b },
-  { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 },
-  /* 0x9100 */
-  { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 },
-  { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 },
-  { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 },
-  { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  /* 0x9200 */
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 },
-  { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 },
-  { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 },
-  { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 },
-  /* 0x9300 */
-  { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 },
-  { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 },
-  { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 },
-  { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 },
-  /* 0x9400 */
-  { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 },
-  { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 },
-  { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff },
-  { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff },
-  /* 0x9500 */
-  { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 },
-  { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 },
-  { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff },
-  /* 0x9600 */
-  { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e },
-  { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 },
-  { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 },
-  { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 },
-  /* 0x9700 */
-  { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 },
-  { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 },
-  { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 },
-  { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 },
-  /* 0x9800 */
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 },
-  { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 },
-  { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 },
-  { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 },
-  /* 0x9900 */
-  { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 },
-  { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 },
-  { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  /* 0x9a00 */
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 },
-  { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb },
-  { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 },
-  { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 },
-  /* 0x9b00 */
-  { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 },
-  { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  /* 0x9c00 */
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 },
-  { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 },
-  { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff },
-  { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 },
-};
-static const Summary16 gb2312_uni2indx_page9e[27] = {
-  /* 0x9e00 */
-  { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee },
-  { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b },
-  { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 },
-  { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 },
-  /* 0x9f00 */
-  { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 },
-  { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 },
-  { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 },
-};
-static const Summary16 gb2312_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff },
-  { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 },
-  { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b },
-};
-
-static int
-gb2312_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &gb2312_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2000 && wc < 0x2650)
-      summary = &gb2312_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x3000 && wc < 0x3230)
-      summary = &gb2312_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9cf0)
-      summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0x9e00 && wc < 0x9fb0)
-      summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = gb2312_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/gbk_tab_to_h.c
+++ /dev/null
@@ -1,1020 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/cjk_tab_to_h.c,v 1.2 2000/12/04 18:49:31 dawes Exp $ */
-
-/* 2009-02-17 <sparkaround@gmail.com>: Create gbk_tab_to_h.c from 
- * cjk_tab_to_h.c to generate GBK(cp936ext) table correctly.
- *
- *
- * Generates a CJK character set table from a .TXT table as found on
- * ftp.unicode.org or in the X nls directory.
- * Examples:
- *
- *   ./gbk_tab_to_h CP936EXT cp936ext > cp936ext.h < CP936EXT.TXT
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-
-typedef struct {
-  int start;
-  int end;
-} Block;
-
-typedef struct {
-  int rows;    /* number of possible values for the 1st byte */
-  int cols;    /* number of possible values for the 2nd byte */
-  int (*row_byte) (int row); /* returns the 1st byte value for a given row */
-  int (*col_byte) (int col); /* returns the 2nd byte value for a given col */
-  int (*byte_row) (int byte); /* converts a 1st byte value to a row, else -1 */
-  int (*byte_col) (int byte); /* converts a 2nd byte value to a col, else -1 */
-  const char* check_row_expr; /* format string for 1st byte value checking */
-  const char* check_col_expr; /* format string for 2nd byte value checking */
-  const char* byte_row_expr; /* format string for 1st byte value to row */
-  const char* byte_col_expr; /* format string for 2nd byte value to col */
-  int** charset2uni; /* charset2uni[0..rows-1][0..cols-1] is valid */
-  /* You'll understand the terms "row" and "col" when you buy Ken Lunde's book.
-     Once a row is fixed, choosing a "col" is the same as choosing a "cell". */
-  int* charsetpage; /* charsetpage[0..rows]: how large is a page for a row */
-  int ncharsetblocks;
-  Block* charsetblocks; /* blocks[0..nblocks-1] */
-  int* uni2charset; /* uni2charset[0x0000..0xffff] */
-} Encoding;
-
-/*
- * Outputs the file title.
- */
-static void output_title (const char *charsetname)
-{
-  printf("\n");
-  printf("/*\n");
-  printf(" * %s\n", charsetname);
-  printf(" */\n");
-  printf("\n");
-}
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      if (scanf(" 0x%x", &enc->charset2uni[row][col]) != 1)
-        exit(1);
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 32; i1 < 132; i1++)
-      for (i2 = 32; i2 < 132; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-/*
- * Computes the charsetpage[0..rows] array.
- */
-static void find_charset2uni_pages (Encoding* enc)
-{
-  int row, col;
-
-  enc->charsetpage = (int*) malloc((enc->rows+1)*sizeof(int));
-
-  for (row = 0; row <= enc->rows; row++)
-    enc->charsetpage[row] = 0;
-
-  for (row = 0; row < enc->rows; row++) {
-    int used = 0;
-    for (col = 0; col < enc->cols; col++)
-      if (enc->charset2uni[row][col] != 0xfffd)
-        used = col+1;
-    enc->charsetpage[row] = used;
-  }
-}
-
-/*
- * Fills in nblocks and blocks.
- */
-static void find_charset2uni_blocks (Encoding* enc)
-{
-  int n, row, lastrow;
-
-  enc->charsetblocks = (Block*) malloc(enc->rows*sizeof(Block));
-
-  n = 0;
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0 && (row == 0 || enc->charsetpage[row-1] == 0)) {
-      for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-      enc->charsetblocks[n].start = row * enc->cols;
-      enc->charsetblocks[n].end = lastrow * enc->cols + enc->charsetpage[lastrow];
-      n++;
-    }
-  enc->ncharsetblocks = n;
-}
-
-/*
- * Outputs the charset to unicode table and function.
- */
-static void output_charset2uni (const char* name, Encoding* enc)
-{
-  int row, col, lastrow, col_max, i, i1_min, i1_max;
-
-  find_charset2uni_pages(enc);
-
-  find_charset2uni_blocks(enc);
-
-  for (row = 0; row < enc->rows; row++)
-    if (enc->charsetpage[row] > 0) {
-      if (row == 0 || enc->charsetpage[row-1] == 0) {
-        /* Start a new block. */
-        for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++);
-        printf("static const unsigned short %s_2uni_page%02x[%d] = {\n",
-               name, enc->row_byte(row),
-               (lastrow-row) * enc->cols + enc->charsetpage[lastrow]);
-      }
-      printf("  /""* 0x%02x *""/\n ", enc->row_byte(row));
-      col_max = (enc->charsetpage[row+1] > 0 ? enc->cols : enc->charsetpage[row]);
-      for (col = 0; col < col_max; col++) {
-        printf(" 0x%04x,", enc->charset2uni[row][col]);
-        if ((col % 8) == 7 && (col+1 < col_max)) printf("\n ");
-      }
-      printf("\n");
-      if (enc->charsetpage[row+1] == 0) {
-        /* End a block. */
-        printf("};\n");
-      }
-    }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", name);
-  printf("{\n");
-  printf("  unsigned char c1 = s[0];\n");
-  printf("  if (");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    i1_min = enc->row_byte(enc->charsetblocks[i].start / enc->cols);
-    i1_max = enc->row_byte((enc->charsetblocks[i].end-1) / enc->cols);
-    if (i > 0)
-      printf(" || ");
-    if (i1_min == i1_max)
-      printf("(c1 == 0x%02x)", i1_min);
-    else
-      printf("(c1 >= 0x%02x && c1 <= 0x%02x)", i1_min, i1_max);
-  }
-  printf(") {\n");
-  printf("    if (n >= 2) {\n");
-  printf("      unsigned char c2 = s[1];\n");
-  printf("      if (");
-  printf(enc->check_col_expr, "c2");
-  printf(") {\n");
-  printf("        unsigned int i = %d * (", enc->cols);
-  printf(enc->byte_row_expr, "c1");
-  printf(") + (");
-  printf(enc->byte_col_expr, "c2");
-  printf(");\n");
-  printf("        unsigned short wc = 0xfffd;\n");
-  for (i = 0; i < enc->ncharsetblocks; i++) {
-    printf("        ");
-    if (i > 0)
-      printf("} else ");
-    if (i < enc->ncharsetblocks-1)
-      printf("if (i < %d) ", enc->charsetblocks[i+1].start);
-    printf("{\n");
-    printf("          if (i < %d)\n", enc->charsetblocks[i].end);
-    printf("            wc = %s_2uni_page%02x[i", name, enc->row_byte(enc->charsetblocks[i].start / enc->cols));
-    if (enc->charsetblocks[i].start > 0)
-      printf("-%d", enc->charsetblocks[i].start);
-    printf("];\n");
-  }
-  printf("        }\n");
-  printf("        if (wc != 0xfffd) {\n");
-  printf("          *pwc = (ucs4_t) wc;\n");
-  printf("          return 2;\n");
-  printf("        }\n");
-  printf("      }\n");
-  printf("      return RET_ILSEQ;\n");
-  printf("    }\n");
-  printf("    return RET_TOOFEW(0);\n");
-  printf("  }\n");
-  printf("  return RET_ILSEQ;\n");
-  printf("}\n");
-  printf("\n");
-}
-
-/*
- * Computes the uni2charset[0x0000..0xffff] array.
- */
-static void invert (Encoding* enc)
-{
-  int row, col, j;
-
-  enc->uni2charset = (int*) malloc(0x10000*sizeof(int));
-
-  for (j = 0; j < 0x10000; j++)
-    enc->uni2charset[j] = 0;
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        enc->uni2charset[j] = 0x100 * enc->row_byte(row) + enc->col_byte(col);
-    }
-}
-
-/*
- * Outputs the unicode to charset table and function, using a linear array.
- * (Suitable if the table is dense.)
- */
-static void output_uni2charset_dense (const char* name, Encoding* enc)
-{
-  /* Like in 8bit_tab_to_h.c */
-  bool pages[0x100];
-  int line[0x2000];
-  int tableno;
-  struct { int minline; int maxline; int usecount; } tables[0x2000];
-  bool first;
-  int row, col, j, p, j1, j2, t;
-
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    bool all_invalid = true;
-    for (j2 = 0; j2 < 8; j2++) {
-      j = 8*j1+j2;
-      if (enc->uni2charset[j] != 0)
-        all_invalid = false;
-    }
-    if (all_invalid)
-      line[j1] = -1;
-    else
-      line[j1] = 0;
-  }
-  tableno = 0;
-  for (j1 = 0; j1 < 0x2000; j1++) {
-    if (line[j1] >= 0) {
-      if (tableno > 0
-          && ((j1 > 0 && line[j1-1] == tableno-1)
-              || ((tables[tableno-1].maxline >> 5) == (j1 >> 5)
-                  && j1 - tables[tableno-1].maxline <= 8))) {
-        line[j1] = tableno-1;
-        tables[tableno-1].maxline = j1;
-      } else {
-        tableno++;
-        line[j1] = tableno-1;
-        tables[tableno-1].minline = tables[tableno-1].maxline = j1;
-      }
-    }
-  }
-  for (t = 0; t < tableno; t++) {
-    tables[t].usecount = 0;
-    j1 = 8*tables[t].minline;
-    j2 = 8*(tables[t].maxline+1);
-    for (j = j1; j < j2; j++)
-      if (enc->uni2charset[j] != 0)
-        tables[t].usecount++;
-  }
-  {
-    p = -1;
-    for (t = 0; t < tableno; t++)
-      if (tables[t].usecount > 1) {
-        /* p = tables[t].minline >> 5; */
-        p = tables[t].minline ;
-        /* printf("static const unsigned short %s_page%02x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1)); */
-        printf("static const unsigned short %s_page%04x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1));
-        for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) {
-          if ((j1 % 0x20) == 0 && j1 > tables[t].minline)
-            printf("  /* 0x%04x */\n", 8*j1);
-          printf(" ");
-          for (j2 = 0; j2 < 8; j2++) {
-            j = 8*j1+j2;
-            printf(" 0x%04x,", enc->uni2charset[j]);
-          }
-          printf(" /*0x%02x-0x%02x*/\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7);
-        }
-        printf("};\n");
-      }
-    if (p >= 0)
-      printf("\n");
-  }
-  printf("static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    unsigned short c = 0;\n");
-  first = true;
-  for (j1 = 0; j1 < 0x2000;) {
-    t = line[j1];
-    for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++);
-    if (t >= 0) {
-      if (j1 != tables[t].minline) abort();
-      if (j2 > tables[t].maxline+1) abort();
-      j2 = tables[t].maxline+1;
-      if (first)
-        printf("    ");
-      else
-        printf("    else ");
-      first = false;
-      if (tables[t].usecount == 0) abort();
-      if (tables[t].usecount == 1) {
-        if (j2 != j1+1) abort();
-        for (j = 8*j1; j < 8*j2; j++)
-          if (enc->uni2charset[j] != 0) {
-            printf("if (wc == 0x%04x)\n      c = 0x%02x;\n", j, enc->uni2charset[j]);
-            break;
-          }
-      } else {
-        if (j1 == 0) {
-          printf("if (wc < 0x%04x)", 8*j2);
-        } else {
-          printf("if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2);
-        }
-        /* printf("\n      c = %s_page%02x[wc", name, j1 >> 5); */
-        printf("\n      c = %s_page%04x[wc", name, j1);
-        if (tables[t].minline > 0)
-          printf("-0x%04x", 8*j1);
-        printf("];\n");
-      }
-    }
-    j1 = j2;
-  }
-  printf("    if (c != 0) {\n");
-  printf("      r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("      return 2;\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/*
- * Outputs the unicode to charset table and function, using a packed array.
- * (Suitable if the table is sparse.)
- */
-static void output_uni2charset_sparse (const char* name, Encoding* enc)
-{
-  bool pages[0x100];
-  Block pageblocks[0x100]; int npageblocks;
-  int indx2charset[0x10000];
-  int summary_indx[0x1000];
-  int summary_used[0x1000];
-  int i, row, col, j, p, j1, j2, indx;
-
-  /* Fill pages[0x100]. */
-  for (p = 0; p < 0x100; p++)
-    pages[p] = false;
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++) {
-      j = enc->charset2uni[row][col];
-      if (j != 0xfffd)
-        pages[j>>8] = true;
-    }
-
-#if 0
-  for (p = 0; p < 0x100; p++)
-    if (pages[p]) {
-      printf("static const unsigned short %s_page%02x[256] = {\n", name, p);
-      for (j1 = 0; j1 < 32; j1++) {
-        printf("  ");
-        for (j2 = 0; j2 < 8; j2++)
-          printf("0x%04x, ", enc->uni2charset[256*p+8*j1+j2]);
-        printf("/""*0x%02x-0x%02x*""/\n", 8*j1, 8*j1+7);
-      }
-      printf("};\n");
-    }
-  printf("\n");
-#endif
-
-  /* Fill summary_indx[] and summary_used[]. */
-  indx = 0;
-  for (j1 = 0; j1 < 0x1000; j1++) {
-    summary_indx[j1] = indx;
-    summary_used[j1] = 0;
-    for (j2 = 0; j2 < 16; j2++) {
-      j = 16*j1+j2;
-      if (enc->uni2charset[j] != 0) {
-        indx2charset[indx++] = enc->uni2charset[j];
-        summary_used[j1] |= (1 << j2);
-      }
-    }
-  }
-
-  /* Fill npageblocks and pageblocks[]. */
-  npageblocks = 0;
-  for (p = 0; p < 0x100; ) {
-    if (pages[p] && (p == 0 || !pages[p-1])) {
-      pageblocks[npageblocks].start = 16*p;
-      do p++; while (p < 0x100 && pages[p]);
-      j1 = 16*p;
-      while (summary_used[j1-1] == 0) j1--;
-      pageblocks[npageblocks].end = j1;
-      npageblocks++;
-    } else
-      p++;
-  }
-
-  printf("static const unsigned short %s_2charset[%d] = {\n", name, indx);
-  for (i = 0; i < indx; ) {
-    if ((i % 8) == 0) printf(" ");
-    printf(" 0x%04x,", indx2charset[i]);
-    i++;
-    if ((i % 8) == 0 || i == indx) printf("\n");
-  }
-  printf("};\n");
-  printf("\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("static const Summary16 %s_uni2indx_page%02x[%d] = {\n", name,
-           pageblocks[i].start/16, pageblocks[i].end-pageblocks[i].start);
-    for (j1 = pageblocks[i].start; j1 < pageblocks[i].end; ) {
-      if (((16*j1) % 0x100) == 0) printf("  /""* 0x%04x *""/\n", 16*j1);
-      if ((j1 % 4) == 0) printf(" ");
-      printf(" { %4d, 0x%04x },", summary_indx[j1], summary_used[j1]);
-      j1++;
-      if ((j1 % 4) == 0 || j1 == pageblocks[i].end) printf("\n");
-    }
-    printf("};\n");
-  }
-  printf("\n");
-
-  printf("static int\n");
-  printf("%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name);
-  printf("{\n");
-  printf("  if (n >= 2) {\n");
-  printf("    const Summary16 *summary = NULL;\n");
-  for (i = 0; i < npageblocks; i++) {
-    printf("    ");
-    if (i > 0)
-      printf("else ");
-    printf("if (wc >= 0x%04x && wc < 0x%04x)\n",
-           16*pageblocks[i].start, 16*pageblocks[i].end);
-    printf("      summary = &%s_uni2indx_page%02x[(wc>>4)", name,
-           pageblocks[i].start/16);
-    if (pageblocks[i].start > 0)
-      printf("-0x%03x", pageblocks[i].start);
-    printf("];\n");
-  }
-  printf("    if (summary) {\n");
-  printf("      unsigned short used = summary->used;\n");
-  printf("      unsigned int i = wc & 0x0f;\n");
-  printf("      if (used & ((unsigned short) 1 << i)) {\n");
-  printf("        unsigned short c;\n");
-  printf("        /* Keep in `used' only the bits 0..i-1. */\n");
-  printf("        used &= ((unsigned short) 1 << i) - 1;\n");
-  printf("        /* Add `summary->indx' and the number of bits set in `used'. */\n");
-  printf("        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);\n");
-  printf("        used = (used & 0x3333) + ((used & 0xcccc) >> 2);\n");
-  printf("        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);\n");
-  printf("        used = (used & 0x00ff) + (used >> 8);\n");
-  printf("        c = %s_2charset[summary->indx + used];\n", name);
-  printf("        r[0] = (c >> 8); r[1] = (c & 0xff);\n");
-  printf("        return 2;\n");
-  printf("      }\n");
-  printf("    }\n");
-  printf("    return RET_ILSEQ;\n");
-  printf("  }\n");
-  printf("  return RET_TOOSMALL;\n");
-  printf("}\n");
-}
-
-/* ISO-2022/EUC specifics */
-
-static int row_byte_normal (int row) { return 0x21+row; }
-static int col_byte_normal (int col) { return 0x21+col; }
-static int byte_row_normal (int byte) { return byte-0x21; }
-static int byte_col_normal (int byte) { return byte-0x21; }
-
-static void do_normal (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Note: On first sight, the jisx0212_2charset[] table seems to be in order,
-   starting from the charset=0x3021/uni=0x4e02 pair. But it's only mostly in
-   order. There are 75 out-of-order values, scattered all throughout the table.
- */
-
-static void do_normal_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-/* CNS 11643 specifics - trick to put two tables into one */
-
-static int row_byte_cns11643 (int row) {
-  return 0x100 * (row / 94) + (row % 94) + 0x21;
-}
-static int byte_row_cns11643 (int byte) {
-  return (byte >= 0x100 && byte < 0x200 ? byte-0x121 :
-          byte >= 0x200 && byte < 0x300 ? byte-0x221+94 :
-          byte >= 0x300 && byte < 0x400 ? byte-0x321+2*94 :
-          -1);
-}
-
-static void do_cns11643_only_uni2charset (const char* name)
-{
-  Encoding enc;
-  int j, x;
-
-  enc.rows = 3*94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_cns11643;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_cns11643;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table(&enc);
-  invert(&enc);
-  /* Move the 2 plane bits into the unused bits 15 and 7. */
-  for (j = 0; j < 0x10000; j++) {
-    x = enc.uni2charset[j];
-    if (x != 0) {
-      if (x & 0x8080) abort();
-      switch (x >> 16) {
-        case 0: /* plane 1 */ x = (x & 0xffff) | 0x0000; break;
-        case 1: /* plane 2 */ x = (x & 0xffff) | 0x0080; break;
-        case 2: /* plane 3 */ x = (x & 0xffff) | 0x8000; break;
-        default: abort();
-      }
-      enc.uni2charset[j] = x;
-    }
-  }
-  output_uni2charset_sparse(name,&enc);
-}
-
-/* GBK specifics */
-
-static int row_byte_gbk1 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk1 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk1 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk1 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xff)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk1 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-static void do_gbk1_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static int row_byte_gbk2 (int row) {
-  return 0x81+row;
-}
-static int col_byte_gbk2 (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_gbk2 (int byte) {
-  if (byte >= 0x81 && byte < 0xff)
-    return byte-0x81;
-  else
-    return -1;
-}
-static int byte_col_gbk2 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xa1)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_gbk2_only_charset2uni (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 96;
-  enc.row_byte = row_byte_gbk2;
-  enc.col_byte = col_byte_gbk2;
-  enc.byte_row = byte_row_gbk2;
-  enc.byte_col = byte_col_gbk2;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xa1)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-}
-
-static void do_gbk1_only_uni2charset (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 126;
-  enc.cols = 190;
-  enc.row_byte = row_byte_gbk1;
-  enc.col_byte = col_byte_gbk1;
-  enc.byte_row = byte_row_gbk1;
-  enc.byte_col = byte_col_gbk1;
-  enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x81";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* KSC 5601 specifics */
-
-/*
- * Reads the charset2uni table from standard input.
- */
-static void read_table_ksc5601 (Encoding* enc)
-{
-  int row, col, i, i1, i2, c, j;
-
-  enc->charset2uni = (int**) malloc(enc->rows*sizeof(int*));
-  for (row = 0; row < enc->rows; row++)
-    enc->charset2uni[row] = (int*) malloc(enc->cols*sizeof(int));
-
-  for (row = 0; row < enc->rows; row++)
-    for (col = 0; col < enc->cols; col++)
-      enc->charset2uni[row][col] = 0xfffd;
-
-  c = getc(stdin);
-  ungetc(c,stdin);
-  if (c == '#') {
-    /* Read a unicode.org style .TXT file. */
-    for (;;) {
-      c = getc(stdin);
-      if (c == EOF)
-        break;
-      if (c == '\n' || c == ' ' || c == '\t')
-        continue;
-      if (c == '#') {
-        do { c = getc(stdin); } while (!(c == EOF || c == '\n'));
-        continue;
-      }
-      ungetc(c,stdin);
-      if (scanf("0x%x", &j) != 1)
-        exit(1);
-      i1 = j >> 8;
-      i2 = j & 0xff;
-      if (scanf(" 0x%x", &j) != 1)
-        exit(1);
-      /* Take only the range covered by KS C 5601.1987-0 = KS C 5601.1989-0
-         = KS X 1001.1992, ignore the rest. */
-      if (!(i1 >= 128+33 && i1 < 128+127 && i2 >= 128+33 && i2 < 128+127))
-        continue;  /* KSC5601 specific */
-      i1 &= 0x7f;  /* KSC5601 specific */
-      i2 &= 0x7f;  /* KSC5601 specific */
-      row = enc->byte_row(i1);
-      col = enc->byte_col(i2);
-      if (row < 0 || col < 0) {
-        fprintf(stderr, "lost entry for %02x %02x\n", i1, i2);
-        exit(1);
-      }
-      enc->charset2uni[row][col] = j;
-    }
-  } else {
-    /* Read a table of hexadecimal Unicode values. */
-    for (i1 = 33; i1 < 127; i1++)
-      for (i2 = 33; i2 < 127; i2++) {
-        i = scanf("%x", &j);
-        if (i == EOF)
-          goto read_done;
-        if (i != 1)
-          exit(1);
-        if (j < 0 || j == 0xffff)
-          j = 0xfffd;
-        if (j != 0xfffd) {
-          if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) {
-            fprintf(stderr, "lost entry at %02x %02x\n", i1, i2);
-            exit (1);
-          }
-          enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j;
-        }
-      }
-   read_done: ;
-  }
-}
-
-static void do_ksc5601 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 94;
-  enc.row_byte = row_byte_normal;
-  enc.col_byte = col_byte_normal;
-  enc.byte_row = byte_row_normal;
-  enc.byte_col = byte_col_normal;
-  enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f";
-  enc.byte_row_expr = "%1$s - 0x21";
-  enc.byte_col_expr = "%1$s - 0x21";
-
-  read_table_ksc5601(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Big5 specifics */
-
-static int row_byte_big5 (int row) {
-  return 0xa1+row;
-}
-static int col_byte_big5 (int col) {
-  return (col >= 0x3f ? 0x62 : 0x40) + col;
-}
-static int byte_row_big5 (int byte) {
-  if (byte >= 0xa1 && byte < 0xff)
-    return byte-0xa1;
-  else
-    return -1;
-}
-static int byte_col_big5 (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0xa1 && byte < 0xff)
-    return byte-0x62;
-  else
-    return -1;
-}
-
-static void do_big5 (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 157;
-  enc.row_byte = row_byte_big5;
-  enc.col_byte = col_byte_big5;
-  enc.byte_row = byte_row_big5;
-  enc.byte_col = byte_col_big5;
-  enc.check_row_expr = "%1$s >= 0xa1 && %1$s < 0xff";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0xa1";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Johab Hangul specifics */
-
-static int row_byte_johab_hangul (int row) {
-  return 0x84+row;
-}
-static int col_byte_johab_hangul (int col) {
-  return (col >= 0x3e ? 0x43 : 0x41) + col;
-}
-static int byte_row_johab_hangul (int byte) {
-  if (byte >= 0x84 && byte < 0xd4)
-    return byte-0x84;
-  else
-    return -1;
-}
-static int byte_col_johab_hangul (int byte) {
-  if (byte >= 0x41 && byte < 0x7f)
-    return byte-0x41;
-  else if (byte >= 0x81 && byte < 0xff)
-    return byte-0x43;
-  else
-    return -1;
-}
-
-static void do_johab_hangul (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 80;
-  enc.cols = 188;
-  enc.row_byte = row_byte_johab_hangul;
-  enc.col_byte = col_byte_johab_hangul;
-  enc.byte_row = byte_row_johab_hangul;
-  enc.byte_col = byte_col_johab_hangul;
-  enc.check_row_expr = "%1$s >= 0x84 && %1$s < 0xd4";
-  enc.check_col_expr = "(%1$s >= 0x41 && %1$s < 0x7f) || (%1$s >= 0x81 && %1$s < 0xff)";
-  enc.byte_row_expr = "%1$s - 0x84";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x81 ? 0x43 : 0x41)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_dense(name,&enc);
-}
-
-/* SJIS specifics */
-
-static int row_byte_sjis (int row) {
-  return (row >= 0x1f ? 0xc1 : 0x81) + row;
-}
-static int col_byte_sjis (int col) {
-  return (col >= 0x3f ? 0x41 : 0x40) + col;
-}
-static int byte_row_sjis (int byte) {
-  if (byte >= 0x81 && byte < 0xa0)
-    return byte-0x81;
-  else if (byte >= 0xe0)
-    return byte-0xc1;
-  else
-    return -1;
-}
-static int byte_col_sjis (int byte) {
-  if (byte >= 0x40 && byte < 0x7f)
-    return byte-0x40;
-  else if (byte >= 0x80 && byte < 0xfd)
-    return byte-0x41;
-  else
-    return -1;
-}
-
-static void do_sjis (const char* name)
-{
-  Encoding enc;
-
-  enc.rows = 94;
-  enc.cols = 188;
-  enc.row_byte = row_byte_sjis;
-  enc.col_byte = col_byte_sjis;
-  enc.byte_row = byte_row_sjis;
-  enc.byte_col = byte_col_sjis;
-  enc.check_row_expr = "(%1$s >= 0x81 && %1$s < 0xa0) || (%1$s >= 0xe0)";
-  enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xfd)";
-  enc.byte_row_expr = "%1$s - (%1$s >= 0xe0 ? 0xc1 : 0x81)";
-  enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)";
-
-  read_table(&enc);
-  output_charset2uni(name,&enc);
-  invert(&enc); output_uni2charset_sparse(name,&enc);
-}
-
-/* Main program */
-
-int main (int argc, char *argv[])
-{
-  const char* charsetname;
-  const char* name;
-
-  if (argc != 3)
-    exit(1);
-  charsetname = argv[1];
-  name = argv[2];
-
-  output_title(charsetname);
-
-  if (!strcmp(name,"gb2312") || !strcmp(name,"gb12345ext")
-      || !strcmp(name,"jisx0208") || !strcmp(name,"jisx0212"))
-    do_normal(name);
-  else if (!strcmp(name,"cns11643_1") || !strcmp(name,"cns11643_2")
-           || !strcmp(name,"cns11643_3"))
-    do_normal_only_charset2uni(name);
-  else if (!strcmp(name,"cns11643_inv"))
-    do_cns11643_only_uni2charset(name);
-  else if (!strcmp(name,"gbkext1"))
-    do_gbk1_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext2"))
-    do_gbk2_only_charset2uni(name);
-  else if (!strcmp(name,"gbkext_inv"))
-    do_gbk1_only_uni2charset(name);
-  else if (!strcmp(name,"cp936ext"))
-    do_gbk1(name);
-  else if (!strcmp(name,"ksc5601"))
-    do_ksc5601(name);
-  else if (!strcmp(name,"big5") || !strcmp(name,"cp950ext"))
-    do_big5(name);
-  else if (!strcmp(name,"johab_hangul"))
-    do_johab_hangul(name);
-  else if (!strcmp(name,"cp932ext"))
-    do_sjis(name);
-  else
-    exit(1);
-
-  return 0;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/georgian_academy.h
+++ /dev/null
@@ -1,88 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/georgian_academy.h,v 1.3 2000/11/29 17:40:29 dawes Exp $ */
-
-/*
- * GEORGIAN-ACADEMY
- */
-
-static const unsigned short georgian_academy_2uni[32] = {
-  /* 0x80 */
-  0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
-  /* 0x90 */
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
-};
-
-static int
-georgian_academy_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0x80 && c < 0xa0)
-    *pwc = (ucs4_t) georgian_academy_2uni[c-0x80];
-  else if (c >= 0xc0 && c < 0xe7)
-    *pwc = (ucs4_t) c + 0x1010;
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char georgian_academy_page00[32] = {
-  0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
-  0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */
-};
-static const unsigned char georgian_academy_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char georgian_academy_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char georgian_academy_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-georgian_academy_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0080 && wc < 0x00a0)
-    c = georgian_academy_page00[wc-0x0080];
-  else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e7 && wc < 0x0100))
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = georgian_academy_page01[wc-0x0150];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = georgian_academy_page02[wc-0x02c0];
-  else if (wc >= 0x10d0 && wc < 0x10f7)
-    c = wc-0x1010;
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = georgian_academy_page20[wc-0x2010];
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/georgian_ps.h
+++ /dev/null
@@ -1,105 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/georgian_ps.h,v 1.3 2000/11/29 17:40:29 dawes Exp $ */
-
-/*
- * GEORGIAN-PS
- */
-
-static const unsigned short georgian_ps_2uni_1[32] = {
-  /* 0x80 */
-  0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f,
-  /* 0x90 */
-  0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-  0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178,
-};
-static const unsigned short georgian_ps_2uni_2[39] = {
-  /* 0xc0 */
-  0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1,
-  0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd,
-  /* 0xd0 */
-  0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4,
-  0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec,
-  /* 0xe0 */
-  0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5,
-};
-
-static int
-georgian_ps_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0x80 && c < 0xa0)
-    *pwc = (ucs4_t) georgian_ps_2uni_1[c-0x80];
-  else if (c >= 0xc0 && c < 0xe6)
-    *pwc = (ucs4_t) georgian_ps_2uni_2[c-0xc0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char georgian_ps_page00[32] = {
-  0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
-  0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */
-};
-static const unsigned char georgian_ps_page01[72] = {
-  0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char georgian_ps_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-static const unsigned char georgian_ps_page10[40] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, /* 0xd0-0xd7 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcf, 0xd0, 0xd1, /* 0xd8-0xdf */
-  0xd2, 0xd3, 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, /* 0xe0-0xe7 */
-  0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe3, /* 0xe8-0xef */
-  0xe4, 0xc7, 0xce, 0xd5, 0xe2, 0xe5, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-static const unsigned char georgian_ps_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-
-static int
-georgian_ps_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0080 && wc < 0x00a0)
-    c = georgian_ps_page00[wc-0x0080];
-  else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e6 && wc < 0x0100))
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0198)
-    c = georgian_ps_page01[wc-0x0150];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = georgian_ps_page02[wc-0x02c0];
-  else if (wc >= 0x10d0 && wc < 0x10f8)
-    c = georgian_ps_page10[wc-0x10d0];
-  else if (wc >= 0x2010 && wc < 0x2040)
-    c = georgian_ps_page20[wc-0x2010];
-  else if (wc == 0x2122)
-    c = 0x99;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_1.h
+++ /dev/null
@@ -1,23 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_1.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-1
- */
-
-static int
-iso8859_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static int
-iso8859_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0100) {
-    *r = wc;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_10.h
+++ /dev/null
@@ -1,92 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_10.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-10
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_10_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7,
-  0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7,
-  0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b,
-  /* 0xc0 */
-  0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168,
-  0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
-  /* 0xe0 */
-  0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169,
-  0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138,
-};
-
-static int
-iso8859_10_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_10_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_10_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0xd0, 0x00, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0xd8, 0x00, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0xf0, 0x00, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0xa9, 0xb9, 0xa2, 0xb2, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */
-  0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xa5, 0xb5, 0xa4, 0xb4, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, /* 0x30-0x37 */
-  0xff, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xaf, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0xab, 0xbb, /* 0x60-0x67 */
-  0xd7, 0xf7, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0x00, /* 0x78-0x7f */
-};
-
-static int
-iso8859_10_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_10_page00[wc-0x00a0];
-  else if (wc == 0x2015)
-    c = 0xbd;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_11.h
+++ /dev/null
@@ -1,82 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_11.h,v 1.2 2002/10/09 16:38:19 tsi Exp $ */
-
-/*
- * ISO8859-11
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_11_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
-  0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
-  /* 0xb0 */
-  0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
-  0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
-  /* 0xc0 */
-  0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
-  0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
-  /* 0xd0 */
-  0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
-  0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f,
-  /* 0xe0 */
-  0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
-  0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
-  /* 0xf0 */
-  0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
-  0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-iso8859_11_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xa0) {
-  }
-  else {
-    unsigned short wc = iso8859_11_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_11_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-};
-
-static int
-iso8859_11_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 || wc == 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0e00 && wc < 0x0e60)
-    c = iso8859_11_page0e[wc-0x0e00];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_13.h
+++ /dev/null
@@ -1,95 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_13.h,v 1.2 2000/11/28 16:10:26 dawes Exp $ */
-
-/*
- * ISO-8859-13
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_13_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7,
-  0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7,
-  0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
-  /* 0xc0 */
-  0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112,
-  0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
-  /* 0xd0 */
-  0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7,
-  0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df,
-  /* 0xe0 */
-  0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113,
-  0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
-  /* 0xf0 */
-  0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7,
-  0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019,
-};
-
-static int
-iso8859_13_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_13_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_13_page00[224] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */
-  0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */
-  0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_13_page20[8] = {
-  0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_13_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_13_page00[wc-0x00a0];
-  else if (wc >= 0x2018 && wc < 0x2020)
-    c = iso8859_13_page20[wc-0x2018];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_14.h
+++ /dev/null
@@ -1,113 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_14.h,v 1.3 2000/11/29 17:40:30 dawes Exp $ */
-
-/*
- * ISO-8859-14
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_14_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
-  0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
-  /* 0xb0 */
-  0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
-  0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
-  0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
-  0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff,
-};
-
-static int
-iso8859_14_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0)
-    *pwc = (ucs4_t) iso8859_14_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_14_page00[96] = {
-  0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_14_page01_0[32] = {
-  0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char iso8859_14_page01_1[16] = {
-  0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */
-  0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_14_page1e_0[136] = {
-  0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */
-};
-static const unsigned char iso8859_14_page1e_1[8] = {
-  0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */
-};
-
-static int
-iso8859_14_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_14_page00[wc-0x00a0];
-  else if (wc >= 0x0108 && wc < 0x0128)
-    c = iso8859_14_page01_0[wc-0x0108];
-  else if (wc >= 0x0170 && wc < 0x0180)
-    c = iso8859_14_page01_1[wc-0x0170];
-  else if (wc >= 0x1e00 && wc < 0x1e88)
-    c = iso8859_14_page1e_0[wc-0x1e00];
-  else if (wc >= 0x1ef0 && wc < 0x1ef8)
-    c = iso8859_14_page1e_1[wc-0x1ef0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_15.h
+++ /dev/null
@@ -1,67 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_15.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-15
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_15_2uni[32] = {
-  /* 0xa0 */
-  0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7,
-  0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7,
-  0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf,
-};
-
-static int
-iso8859_15_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0 && c < 0xc0)
-    *pwc = (ucs4_t) iso8859_15_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_15_page00[32] = {
-  0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */
-};
-static const unsigned char iso8859_15_page01[48] = {
-  0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */
-};
-
-static int
-iso8859_15_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = iso8859_15_page00[wc-0x00a0];
-  else if (wc >= 0x00c0 && wc < 0x0100)
-    c = wc;
-  else if (wc >= 0x0150 && wc < 0x0180)
-    c = iso8859_15_page01[wc-0x0150];
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_16.h
+++ /dev/null
@@ -1,98 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_16.h,v 1.4 2003/07/15 17:33:45 pascal Exp $ */
-
-/*
- * ISO-8859-16
- */
-
-static const unsigned short iso8859_16_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7,
-  0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7,
-  0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a,
-  0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b,
-  0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff,
-};
-
-static int
-iso8859_16_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_16_2uni[c-0xa0];
-  return 1;
-}
-
-static const unsigned char iso8859_16_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0xc6, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0x00, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0x00, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xb2, 0xb9, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xd5, 0xf5, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_16_page02[8] = {
-  0xaa, 0xba, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-};
-static const unsigned char iso8859_16_page20[8] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xa5, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_16_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_16_page00[wc-0x00a0];
-  else if (wc >= 0x0218 && wc < 0x0220)
-    c = iso8859_16_page02[wc-0x0218];
-  else if (wc >= 0x2018 && wc < 0x2020)
-    c = iso8859_16_page20[wc-0x2018];
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_2.h
+++ /dev/null
@@ -1,100 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_2.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-2
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_2_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
-  0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
-  0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
-  /* 0xc0 */
-  0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
-  /* 0xd0 */
-  0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
-  0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
-  /* 0xe0 */
-  0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
-  /* 0xf0 */
-  0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
-  0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
-};
-
-static int
-iso8859_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_2_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_2_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x38-0x3f */
-  0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */
-  0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */
-  0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */
-  0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */
-  0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_2_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-/*
-static int
-iso8859_2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_2_page00[wc-0x00a0];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = iso8859_2_page02[wc-0x02c0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-*/
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_3.h
+++ /dev/null
@@ -1,104 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_3.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-3
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_3_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xfffd, 0x0124, 0x00a7,
-  0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xfffd, 0x017b,
-  /* 0xb0 */
-  0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
-  0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xfffd, 0x017c,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0xfffd, 0x00c4, 0x010a, 0x0108, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0xfffd, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
-  0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0xfffd, 0x00e4, 0x010b, 0x0109, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0xfffd, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
-  0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
-};
-
-static int
-iso8859_3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_3_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_3_page00[96] = {
-  0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_3_page01[120] = {
-  0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb, /* 0x18-0x1f */
-  0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_3_page02[8] = {
-  0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-iso8859_3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_3_page00[wc-0x00a0];
-  else if (wc >= 0x0108 && wc < 0x0180)
-    c = iso8859_3_page01[wc-0x0108];
-  else if (wc >= 0x02d8 && wc < 0x02e0)
-    c = iso8859_3_page02[wc-0x02d8];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_4.h
+++ /dev/null
@@ -1,98 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_4.h,v 1.3 2000/11/29 17:40:31 dawes Exp $ */
-
-/*
- * ISO-8859-4
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_4_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
-  0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
-  0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
-  /* 0xc0 */
-  0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
-  0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
-  /* 0xd0 */
-  0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
-  0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
-  /* 0xe0 */
-  0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
-  0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
-  /* 0xf0 */
-  0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
-  0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9,
-};
-
-static int
-iso8859_4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_4_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_4_page00[224] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */
-  0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */
-  0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */
-  0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, /* 0x30-0x37 */
-  0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, /* 0x60-0x67 */
-  0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */
-};
-static const unsigned char iso8859_4_page02[32] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-iso8859_4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0180)
-    c = iso8859_4_page00[wc-0x00a0];
-  else if (wc >= 0x02c0 && wc < 0x02e0)
-    c = iso8859_4_page02[wc-0x02c0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_5.h
+++ /dev/null
@@ -1,81 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_5.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-5
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_5_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
-  0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
-  /* 0xb0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xc0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xd0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xe0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-  /* 0xf0 */
-  0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
-  0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f,
-};
-
-static int
-iso8859_5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) iso8859_5_2uni[c-0xa0];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_5_page00[16] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char iso8859_5_page04[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */
-};
-
-static int
-iso8859_5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = iso8859_5_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0460)
-    c = iso8859_5_page04[wc-0x0400];
-  else if (wc == 0x2116)
-    c = 0xf0;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_6.h
+++ /dev/null
@@ -1,84 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_6.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-6
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_6_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0xfffd, 0xfffd, 0x00a4, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0x00ad, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f,
-  /* 0xc0 */
-  0xfffd, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
-  0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
-  /* 0xd0 */
-  0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
-  0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
-  0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
-  /* 0xf0 */
-  0x0650, 0x0651, 0x0652, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-iso8859_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_6_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_6_page00[16] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-};
-static const unsigned char iso8859_6_page06[80] = {
-  0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */
-  0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-};
-
-static int
-iso8859_6_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00b0)
-    c = iso8859_6_page00[wc-0x00a0];
-  else if (wc >= 0x0608 && wc < 0x0658)
-    c = iso8859_6_page06[wc-0x0608];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_7.h
+++ /dev/null
@@ -1,92 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_7.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-7
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_7_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x2018, 0x2019, 0x00a3, 0xfffd, 0xfffd, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0xfffd, 0x2015,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
-  0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
-  /* 0xc0 */
-  0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
-  0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
-  /* 0xd0 */
-  0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
-  0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
-  /* 0xe0 */
-  0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
-  0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
-  /* 0xf0 */
-  0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
-  0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd,
-};
-
-static int
-iso8859_7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = iso8859_7_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_7_page00[32] = {
-  0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char iso8859_7_page03[80] = {
-  0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, /* 0x80-0x87 */
-  0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */
-  0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */
-};
-static const unsigned char iso8859_7_page20[16] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, /* 0x10-0x17 */
-  0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-};
-
-static int
-iso8859_7_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00c0)
-    c = iso8859_7_page00[wc-0x00a0];
-  else if (wc >= 0x0380 && wc < 0x03d0)
-    c = iso8859_7_page03[wc-0x0380];
-  else if (wc >= 0x2010 && wc < 0x2020)
-    c = iso8859_7_page20[wc-0x2010];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_8.h
+++ /dev/null
@@ -1,93 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_8.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-8
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_8_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
-  0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
-  0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0xfffd,
-  /* 0xc0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0xd0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2017,
-  /* 0xe0 */
-  0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
-  0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
-  /* 0xf0 */
-  0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
-  0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd,
-};
-
-static int
-iso8859_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0) {
-    unsigned short wc = iso8859_8_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  else {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_8_page00[88] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */
-};
-static const unsigned char iso8859_8_page05[32] = {
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */
-  0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-};
-static const unsigned char iso8859_8_page20[16] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x10-0x17 */
-};
-
-static int
-iso8859_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = iso8859_8_page00[wc-0x00a0];
-  else if (wc >= 0x05d0 && wc < 0x05f0)
-    c = iso8859_8_page05[wc-0x05d0];
-  else if (wc >= 0x2008 && wc < 0x2018)
-    c = iso8859_8_page20[wc-0x2008];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_9.h
+++ /dev/null
@@ -1,71 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_9.h,v 1.3 2000/11/29 17:40:32 dawes Exp $ */
-
-/*
- * ISO-8859-9
- */
-
-#ifdef NEED_TOWC
-static const unsigned short iso8859_9_2uni[48] = {
-  /* 0xd0 */
-  0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
-  0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
-  0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
-};
-
-static int
-iso8859_9_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xd0)
-    *pwc = (ucs4_t) iso8859_9_2uni[c-0xd0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char iso8859_9_page00[48] = {
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_9_page01[72] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */
-};
-
-static int
-iso8859_9_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00d0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00d0 && wc < 0x0100)
-    c = iso8859_9_page00[wc-0x00d0];
-  else if (wc >= 0x0118 && wc < 0x0160)
-    c = iso8859_9_page01[wc-0x0118];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/iso8859_9e.h
+++ /dev/null
@@ -1,103 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/iso8859_9e.h,v 1.3 2000/11/28 16:10:28 dawes Exp $ */
-
-/*
- * ISO-8859-9E
- */
-
-static const unsigned short iso8859_9e_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x017d, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x012c, 0x00a7,
-  0x016c, 0x00a9, 0x01e6, 0x00ab, 0x014a, 0x00ad, 0x00ae, 0x01d1,
-  /* 0xb0 */
-  0x00b0, 0x017e, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x012d, 0x00b7,
-  0x016d, 0x00b9, 0x01e7, 0x00bb, 0x014b, 0x00bd, 0x0178, 0x01d2,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x018f, 0x00c7,
-  0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
-  /* 0xd0 */
-  0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00dd,
-  0x019f, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x0259, 0x00e7,
-  0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
-  /* 0xf0 */
-  0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00fd,
-  0x0275, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
-};
-
-static int
-iso8859_9e_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c >= 0xa0)
-    *pwc = (ucs4_t) iso8859_9e_2uni[c-0xa0];
-  else
-    *pwc = (ucs4_t) c;
-  return 1;
-}
-
-static const unsigned char iso8859_9e_page00[96] = {
-  0xa0, 0x00, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0xb9, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x00, 0xc7, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
-  0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0xdb, 0xdc, 0xd7, 0x00, 0xdf, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x00, 0xe7, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
-  0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0xf7, 0x00, 0xff, /* 0xf8-0xff */
-};
-static const unsigned char iso8859_9e_page01[136] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, /* 0x28-0x2f */
-  0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0xbe, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xb1, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, /* 0x98-0x9f */
-};
-static const unsigned char iso8859_9e_page01_d[24] = {
-  0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0xe0-0xe7 */
-};
-  
-static int
-iso8859_9e_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x0100)
-    c = iso8859_9e_page00[wc-0x00a0];
-  else if (wc >= 0x0118 && wc < 0x01a0)
-    c = iso8859_9e_page01[wc-0x0118];
-  else if (wc >= 0x01d0 && wc < 0x01e8)
-    c = iso8859_9e_page01_d[wc-0x01d0];
-  else if (wc == 0x0259)
-    c = 0xe6;
-  else if (wc == 0x0275)
-    c = 0xf8;
-  else if (wc == 0x20ac)
-    c = 0xa4;
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/jisx0201.h
+++ /dev/null
@@ -1,53 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0201.h,v 1.3 2000/11/29 17:40:33 dawes Exp $ */
-
-/*
- * JISX0201.1976-0
- */
-#ifdef NEED_TOWC
-
-static int
-jisx0201_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    if (c == 0x5c)
-      *pwc = (ucs4_t) 0x00a5;
-    else if (c == 0x7e)
-      *pwc = (ucs4_t) 0x203e;
-    else
-      *pwc = (ucs4_t) c;
-    return 1;
-  } else {
-    if (c >= 0xa1 && c < 0xe0) {
-      *pwc = (ucs4_t) c + 0xfec0;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-
-static int
-jisx0201_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) {
-    *r = wc;
-    return 1;
-  }
-  if (wc == 0x00a5) {
-    *r = 0x5c;
-    return 1;
-  }
-  if (wc == 0x203e) {
-    *r = 0x7e;
-    return 1;
-  }
-  if (wc >= 0xff61 && wc < 0xffa0) {
-    *r = wc - 0xfec0;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/jisx0208.h
+++ /dev/null
@@ -1,2401 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0208.h,v 1.6 2003/05/27 22:26:31 tsi Exp $ */
-
-/*
- * JISX0208.1990-0
- */
-#ifdef NEED_TOWC
-
-static const unsigned short jisx0208_2uni_page21[690] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b,
-  0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e,
-  0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd,
-  0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c,
-  0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c,
-  0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b,
-  0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e,
-  0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7,
-  0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234,
-  0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04,
-  0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7,
-  0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7,
-  /* 0x22 */
-  0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b,
-  0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a,
-  0x2229, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, 0x2203,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207,
-  0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235,
-  0x222b, 0x222c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021,
-  0x00b6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x25ef,
-  /* 0x23 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x24 */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x25 */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c,
-  0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b,
-  0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f,
-  0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542,
-};
-static const unsigned short jisx0208_2uni_page30[6398] = {
-  /* 0x30 */
-  0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6,
-  0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed,
-  0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b,
-  0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f,
-  0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d,
-  0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937,
-  0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905,
-  0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e,
-  0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df,
-  0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32,
-  0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0,
-  0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d,
-  /* 0x31 */
-  0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf,
-  0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893,
-  0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5,
-  0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2,
-  0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3,
-  0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834,
-  0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5,
-  0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712,
-  0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf,
-  0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276,
-  0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a,
-  0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc,
-  /* 0x32 */
-  0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956,
-  0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b,
-  0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069,
-  0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d,
-  0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6,
-  0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b,
-  0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304,
-  0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6,
-  0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b,
-  0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb,
-  0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a,
-  0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539,
-  /* 0x33 */
-  0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75,
-  0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916,
-  0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb,
-  0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3,
-  0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1,
-  0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a,
-  0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66,
-  0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x6a7f,
-  0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, 0x6d3b,
-  0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, 0x53f6,
-  0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, 0x91dc,
-  0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431,
-  /* 0x34 */
-  0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2,
-  0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c,
-  0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be,
-  0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57,
-  0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff,
-  0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e,
-  0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2,
-  0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc,
-  0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811,
-  0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa,
-  0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee,
-  0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4,
-  /* 0x35 */
-  0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63,
-  0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc,
-  0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993,
-  0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947,
-  0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409,
-  0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd,
-  0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7,
-  0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d,
-  0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08,
-  0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8,
-  0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8,
-  0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac,
-  /* 0x36 */
-  0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354,
-  0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a,
-  0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2,
-  0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1,
-  0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d,
-  0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4,
-  0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981,
-  0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39,
-  0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a,
-  0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2,
-  0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047,
-  0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48,
-  /* 0x37 */
-  0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688,
-  0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab,
-  0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2,
-  0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951,
-  0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a,
-  0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c,
-  0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63,
-  0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x5287,
-  0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, 0x6c7a,
-  0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, 0x5039,
-  0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, 0x5805,
-  0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372,
-  /* 0x38 */
-  0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79,
-  0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375,
-  0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b,
-  0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00,
-  0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1,
-  0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56,
-  0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87,
-  0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d,
-  0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7,
-  0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e,
-  0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c,
-  0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411,
-  /* 0x39 */
-  0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f,
-  0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18,
-  0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643,
-  0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69,
-  0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05,
-  0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154,
-  0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc,
-  0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805,
-  0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5,
-  0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a,
-  0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170,
-  0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc,
-  /* 0x3a */
-  0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068,
-  0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a,
-  0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6,
-  0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df,
-  0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9,
-  0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73,
-  0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e,
-  0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750,
-  0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4,
-  0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b,
-  0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f,
-  0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237,
-  /* 0x3b */
-  0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1,
-  0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09,
-  0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6,
-  0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178,
-  0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f,
-  0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9,
-  0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307,
-  0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x6b7b,
-  0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, 0x80a2,
-  0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, 0x8aee,
-  0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d,
-  0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642,
-  /* 0x3c */
-  0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a,
-  0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f,
-  0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1,
-  0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be,
-  0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61,
-  0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c,
-  0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7,
-  0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c,
-  0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6,
-  0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b,
-  0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388,
-  0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468,
-  /* 0x3d */
-  0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0,
-  0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846,
-  0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6,
-  0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4,
-  0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919,
-  0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa,
-  0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c,
-  0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96,
-  0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6,
-  0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72,
-  0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f,
-  0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f,
-  /* 0x3e */
-  0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617,
-  0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a,
-  0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c,
-  0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f,
-  0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167,
-  0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11,
-  0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3,
-  0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266,
-  0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57,
-  0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5,
-  0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8,
-  0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe,
-  /* 0x3f */
-  0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6,
-  0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507,
-  0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b,
-  0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e,
-  0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab,
-  0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875,
-  0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663,
-  0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x9017,
-  0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, 0x7c8b,
-  0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, 0x745e,
-  0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, 0x636e,
-  0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe,
-  /* 0x40 */
-  0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4,
-  0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574,
-  0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f,
-  0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93,
-  0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106,
-  0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3,
-  0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f,
-  0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83,
-  0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148,
-  0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247,
-  0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c,
-  0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda,
-  /* 0x41 */
-  0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce,
-  0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d,
-  0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce,
-  0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9,
-  0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44,
-  0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc,
-  0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64,
-  0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd,
-  0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89,
-  0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349,
-  0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d,
-  0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e,
-  /* 0x42 */
-  0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373,
-  0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e,
-  0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58,
-  0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a,
-  0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1,
-  0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe,
-  0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff,
-  0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000,
-  0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c,
-  0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85,
-  0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438,
-  0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea,
-  /* 0x43 */
-  0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea,
-  0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39,
-  0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1,
-  0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6,
-  0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696,
-  0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b,
-  0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718,
-  0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x9010,
-  0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, 0x5b99,
-  0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, 0x8a3b,
-  0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, 0x8457,
-  0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5,
-  /* 0x44 */
-  0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2,
-  0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074,
-  0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a,
-  0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88,
-  0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc,
-  0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb,
-  0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f,
-  0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3,
-  0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448,
-  0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c,
-  0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b,
-  0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013,
-  /* 0x45 */
-  0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575,
-  0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9,
-  0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55,
-  0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9,
-  0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835,
-  0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b,
-  0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa,
-  0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd,
-  0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b,
-  0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7,
-  0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977,
-  0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230,
-  /* 0x46 */
-  0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003,
-  0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5,
-  0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5,
-  0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97,
-  0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec,
-  0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6,
-  0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566,
-  0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948,
-  0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a,
-  0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf,
-  0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1,
-  0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165,
-  /* 0x47 */
-  0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1,
-  0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5,
-  0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc,
-  0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2,
-  0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2,
-  0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3,
-  0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc,
-  0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x6973,
-  0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, 0x877f,
-  0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, 0x67cf,
-  0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, 0x66dd,
-  0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6,
-  /* 0x48 */
-  0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61,
-  0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197,
-  0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a,
-  0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db,
-  0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af,
-  0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6,
-  0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0,
-  0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c,
-  0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2,
-  0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9,
-  0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e,
-  0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e,
-  /* 0x49 */
-  0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d,
-  0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867,
-  0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19,
-  0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf,
-  0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed,
-  0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3,
-  0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66,
-  0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7,
-  0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c,
-  0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66,
-  0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a,
-  0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d,
-  /* 0x4a */
-  0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8,
-  0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4,
-  0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587,
-  0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a,
-  0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb,
-  0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f,
-  0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf,
-  0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703,
-  0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893,
-  0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8,
-  0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29,
-  0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b,
-  /* 0x4b */
-  0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c,
-  0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd,
-  0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8,
-  0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2,
-  0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e,
-  0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2,
-  0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86,
-  0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x6469,
-  0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, 0x6bce,
-  0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, 0x9c52,
-  0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, 0x8fc4,
-  0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80,
-  /* 0x4c */
-  0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac,
-  0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d,
-  0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727,
-  0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e,
-  0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d,
-  0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302,
-  0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499,
-  0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24,
-  0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301,
-  0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2,
-  0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3,
-  0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652,
-  /* 0x4d */
-  0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5,
-  0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c,
-  0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091,
-  0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89,
-  0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da,
-  0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194,
-  0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21,
-  0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83,
-  0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765,
-  0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71,
-  0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229,
-  0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483,
-  /* 0x4e */
-  0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387,
-  0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409,
-  0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e,
-  0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee,
-  0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7,
-  0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1,
-  0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a,
-  0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e,
-  0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2,
-  0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62,
-  0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b,
-  0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f,
-  /* 0x4f */
-  0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2,
-  0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c,
-  0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e,
-  0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6,
-  0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0,
-  0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900,
-  0x6e7e, 0x7897, 0x8155, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x50 */
-  0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f,
-  0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212,
-  0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3,
-  0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede,
-  0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d,
-  0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69,
-  0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf,
-  0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5,
-  0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6,
-  0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043,
-  0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c,
-  0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2,
-  /* 0x51 */
-  0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed,
-  0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116,
-  0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b,
-  0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169,
-  0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f,
-  0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9,
-  0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd,
-  0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0,
-  0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a,
-  0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e,
-  0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d,
-  0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8,
-  /* 0x52 */
-  0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7,
-  0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8,
-  0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315,
-  0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346,
-  0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e,
-  0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5,
-  0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc,
-  0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440,
-  0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e,
-  0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492,
-  0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2,
-  0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8,
-  /* 0x53 */
-  0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6,
-  0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539,
-  0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557,
-  0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f,
-  0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9,
-  0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4,
-  0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9,
-  0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x566b,
-  0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, 0x56a0,
-  0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, 0x56bc,
-  0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, 0x56d7,
-  0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709,
-  /* 0x54 */
-  0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c,
-  0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769,
-  0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3,
-  0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3,
-  0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821,
-  0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885,
-  0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae,
-  0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc,
-  0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd,
-  0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d,
-  0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a,
-  0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969,
-  /* 0x55 */
-  0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6,
-  0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11,
-  0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36,
-  0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd,
-  0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c,
-  0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43,
-  0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69,
-  0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83,
-  0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4,
-  0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3,
-  0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28,
-  0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53,
-  /* 0x56 */
-  0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79,
-  0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc,
-  0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa,
-  0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f,
-  0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c,
-  0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84,
-  0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7,
-  0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb,
-  0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36,
-  0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f,
-  0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f,
-  0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf,
-  /* 0x57 */
-  0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8,
-  0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe,
-  0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29,
-  0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51,
-  0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83,
-  0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99,
-  0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4,
-  0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x6019,
-  0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, 0x6026,
-  0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, 0x604a,
-  0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, 0x606b,
-  0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a,
-  /* 0x58 */
-  0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1,
-  0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5,
-  0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4,
-  0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147,
-  0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134,
-  0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a,
-  0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153,
-  0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a,
-  0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8,
-  0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3,
-  0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200,
-  0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b,
-  /* 0x59 */
-  0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241,
-  0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282,
-  0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294,
-  0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8,
-  0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c,
-  0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350,
-  0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab,
-  0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369,
-  0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6,
-  0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d,
-  0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a,
-  0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc,
-  /* 0x5a */
-  0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1,
-  0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c,
-  0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c,
-  0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536,
-  0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e,
-  0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f,
-  0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2,
-  0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603,
-  0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644,
-  0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f,
-  0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698,
-  0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc,
-  /* 0x5b */
-  0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9,
-  0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727,
-  0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
-  0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9,
-  0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7,
-  0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de,
-  0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c,
-  0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x68b3,
-  0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, 0x68ad,
-  0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, 0x68b5,
-  0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, 0x6908,
-  0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd,
-  /* 0x5c */
-  0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3,
-  0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923,
-  0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954,
-  0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961,
-  0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf,
-  0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb,
-  0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4,
-  0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2,
-  0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a,
-  0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36,
-  0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22,
-  0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3,
-  /* 0x5d */
-  0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac,
-  0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05,
-  0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37,
-  0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59,
-  0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80,
-  0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa,
-  0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6,
-  0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe,
-  0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55,
-  0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e,
-  0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd,
-  0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe,
-  /* 0x5e */
-  0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36,
-  0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c,
-  0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95,
-  0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6,
-  0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5,
-  0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e,
-  0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b,
-  0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff,
-  0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3,
-  0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5,
-  0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe,
-  0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc,
-  /* 0x5f */
-  0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80,
-  0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e,
-  0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9,
-  0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1,
-  0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f,
-  0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030,
-  0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1,
-  0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x70d9,
-  0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166,
-  0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, 0x7195,
-  0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, 0x71d4,
-  0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc,
-  /* 0x60 */
-  0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c,
-  0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b,
-  0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296,
-  0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce,
-  0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317,
-  0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325,
-  0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370,
-  0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb,
-  0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425,
-  0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441,
-  0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b,
-  0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1,
-  /* 0x61 */
-  0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1,
-  0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d,
-  0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d,
-  0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567,
-  0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a,
-  0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2,
-  0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd,
-  0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc,
-  0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609,
-  0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
-  0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662,
-  0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670,
-  /* 0x62 */
-  0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b,
-  0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8,
-  0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1,
-  0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704,
-  0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738,
-  0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e,
-  0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6,
-  0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7,
-  0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926,
-  0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a,
-  0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb,
-  0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec,
-  /* 0x63 */
-  0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919,
-  0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955,
-  0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa,
-  0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec,
-  0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f,
-  0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49,
-  0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88,
-  0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6,
-  0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, 0x7acf,
-  0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, 0x7ae6,
-  0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, 0x7b18,
-  0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50,
-  /* 0x64 */
-  0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65,
-  0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98,
-  0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d,
-  0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd,
-  0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07,
-  0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27,
-  0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54,
-  0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65,
-  0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab,
-  0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd,
-  0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b,
-  0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06,
-  /* 0x65 */
-  0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32,
-  0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68,
-  0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d,
-  0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab,
-  0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8,
-  0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a,
-  0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22,
-  0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32,
-  0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79,
-  0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae,
-  0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94,
-  0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a,
-  /* 0x66 */
-  0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54,
-  0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82,
-  0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d,
-  0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8,
-  0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6,
-  0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012,
-  0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a,
-  0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073,
-  0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086,
-  0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db,
-  0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef,
-  0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b,
-  /* 0x67 */
-  0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e,
-  0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182,
-  0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0,
-  0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9,
-  0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0,
-  0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207,
-  0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233,
-  0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x8262,
-  0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, 0x827e,
-  0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, 0x82e3,
-  0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, 0x82fb,
-  0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9,
-  /* 0x68 */
-  0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
-  0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa,
-  0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c,
-  0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413,
-  0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7,
-  0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438,
-  0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477,
-  0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f,
-  0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9,
-  0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1,
-  0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515,
-  0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548,
-  /* 0x69 */
-  0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591,
-  0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c,
-  0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0,
-  0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b,
-  0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d,
-  0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9,
-  0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0,
-  0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df,
-  0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb,
-  0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737,
-  0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c,
-  0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759,
-  /* 0x6a */
-  0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af,
-  0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3,
-  0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d,
-  0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815,
-  0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844,
-  0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e,
-  0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892,
-  0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1,
-  0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902,
-  0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913,
-  0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b,
-  0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e,
-  /* 0x6b */
-  0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e,
-  0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6,
-  0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da,
-  0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10,
-  0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52,
-  0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82,
-  0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3,
-  0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4,
-  0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, 0x8b0c,
-  0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, 0x8b33,
-  0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, 0x8b4f,
-  0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b,
-  /* 0x6c */
-  0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e,
-  0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f,
-  0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78,
-  0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94,
-  0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3,
-  0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd,
-  0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d,
-  0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d,
-  0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf,
-  0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf,
-  0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10,
-  0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a,
-  /* 0x6d */
-  0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60,
-  0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87,
-  0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99,
-  0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5,
-  0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe,
-  0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f,
-  0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42,
-  0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62,
-  0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7,
-  0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005,
-  0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016,
-  0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8,
-  /* 0x6e */
-  0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056,
-  0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082,
-  0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af,
-  0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112,
-  0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165,
-  0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab,
-  0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9,
-  0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5,
-  0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e,
-  0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b,
-  0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9,
-  0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e,
-  /* 0x6f */
-  0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c,
-  0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394,
-  0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd,
-  0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407,
-  0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452,
-  0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470,
-  0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f,
-  0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x95a0,
-  0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, 0x95ca,
-  0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, 0x95dc,
-  0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, 0x9642,
-  0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e,
-  /* 0x70 */
-  0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695,
-  0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6,
-  0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc,
-  0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e,
-  0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739,
-  0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c,
-  0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779,
-  0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790,
-  0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6,
-  0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6,
-  0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d,
-  0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870,
-  /* 0x71 */
-  0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4,
-  0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914,
-  0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e,
-  0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951,
-  0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae,
-  0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee,
-  0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2,
-  0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e,
-  0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64,
-  0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf,
-  0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6,
-  0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7,
-  /* 0x72 */
-  0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25,
-  0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44,
-  0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93,
-  0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4,
-  0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3,
-  0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0,
-  0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12,
-  0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30,
-  0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76,
-  0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03,
-  0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15,
-  0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48,
-  /* 0x73 */
-  0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89,
-  0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2,
-  0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2,
-  0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a,
-  0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b,
-  0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8,
-  0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4,
-  0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4,
-  0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, 0x9f08,
-  0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, 0x9f54,
-  0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, 0x9f6a,
-  0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0,
-  /* 0x74 */
-  0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199,
-};
-
-static int
-jisx0208_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x28) || (c1 >= 0x30 && c1 <= 0x74)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 690)
-            wc = jisx0208_2uni_page21[i];
-        } else {
-          if (i < 7808)
-            wc = jisx0208_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short jisx0208_2charset[6879] = {
-  0x2140, 0x2171, 0x2172, 0x2178, 0x212f, 0x224c, 0x216b, 0x215e,
-  0x212d, 0x2279, 0x215f, 0x2160, 0x2621, 0x2622, 0x2623, 0x2624,
-  0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c,
-  0x262d, 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634,
-  0x2635, 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644,
-  0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c,
-  0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654,
-  0x2655, 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723,
-  0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c,
-  0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734,
-  0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c,
-  0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753,
-  0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c,
-  0x275d, 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764,
-  0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c,
-  0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x213e, 0x213d,
-  0x2142, 0x2146, 0x2147, 0x2148, 0x2149, 0x2277, 0x2278, 0x2145,
-  0x2144, 0x2273, 0x216c, 0x216d, 0x2228, 0x216e, 0x2272, 0x222b,
-  0x222c, 0x222a, 0x222d, 0x224d, 0x224e, 0x224f, 0x225f, 0x2250,
-  0x2260, 0x223a, 0x223b, 0x215d, 0x2265, 0x2267, 0x2167, 0x225c,
-  0x224a, 0x224b, 0x2241, 0x2240, 0x2269, 0x226a, 0x2168, 0x2268,
-  0x2266, 0x2262, 0x2162, 0x2261, 0x2165, 0x2166, 0x2263, 0x2264,
-  0x223e, 0x223f, 0x223c, 0x223d, 0x225d, 0x225e, 0x2821, 0x282c,
-  0x2822, 0x282d, 0x2823, 0x282e, 0x2824, 0x282f, 0x2826, 0x2831,
-  0x2825, 0x2830, 0x2827, 0x283c, 0x2837, 0x2832, 0x2829, 0x283e,
-  0x2839, 0x2834, 0x2828, 0x2838, 0x283d, 0x2833, 0x282a, 0x283a,
-  0x283f, 0x2835, 0x282b, 0x283b, 0x2840, 0x2836, 0x2223, 0x2222,
-  0x2225, 0x2224, 0x2227, 0x2226, 0x2221, 0x217e, 0x217b, 0x217d,
-  0x217c, 0x227e, 0x217a, 0x2179, 0x216a, 0x2169, 0x2276, 0x2275,
-  0x2274, 0x2121, 0x2122, 0x2123, 0x2137, 0x2139, 0x213a, 0x213b,
-  0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159,
-  0x215a, 0x215b, 0x2229, 0x222e, 0x214c, 0x214d, 0x2141, 0x2421,
-  0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429,
-  0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431,
-  0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439,
-  0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441,
-  0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449,
-  0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451,
-  0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459,
-  0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471,
-  0x2472, 0x2473, 0x212b, 0x212c, 0x2135, 0x2136, 0x2521, 0x2522,
-  0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a,
-  0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532,
-  0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a,
-  0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542,
-  0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a,
-  0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552,
-  0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a,
-  0x255b, 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562,
-  0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a,
-  0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572,
-  0x2573, 0x2574, 0x2575, 0x2576, 0x2126, 0x213c, 0x2133, 0x2134,
-  0x306c, 0x437a, 0x3c37, 0x4b7c, 0x3e66, 0x3b30, 0x3e65, 0x323c,
-  0x4954, 0x4d3f, 0x5022, 0x312f, 0x336e, 0x5023, 0x4024, 0x5242,
-  0x3556, 0x4a3a, 0x3e67, 0x4e3e, 0x4a42, 0x5024, 0x4366, 0x5025,
-  0x367a, 0x5026, 0x345d, 0x4330, 0x3c67, 0x5027, 0x5028, 0x5029,
-  0x4735, 0x3557, 0x4737, 0x4663, 0x3843, 0x4b33, 0x6949, 0x502a,
-  0x3e68, 0x502b, 0x3235, 0x3665, 0x3870, 0x4c69, 0x5626, 0x4d70,
-  0x467d, 0x3425, 0x3535, 0x502c, 0x502d, 0x4e3b, 0x4d3d, 0x4168,
-  0x502f, 0x3b76, 0x4673, 0x5032, 0x313e, 0x385f, 0x385e, 0x3066,
-  0x4f4b, 0x4f4a, 0x3a33, 0x3021, 0x5033, 0x5034, 0x5035, 0x4b34,
-  0x5036, 0x3872, 0x3067, 0x4b72, 0x357c, 0x357d, 0x357e, 0x4462,
-  0x4e3c, 0x5037, 0x5038, 0x5039, 0x3f4d, 0x3d3a, 0x3f4e, 0x503e,
-  0x503c, 0x503d, 0x3558, 0x3a23, 0x3270, 0x503b, 0x503a, 0x4a29,
-  0x3b46, 0x3b45, 0x423e, 0x503f, 0x4955, 0x4067, 0x2138, 0x5040,
-  0x5042, 0x4265, 0x4e61, 0x304a, 0x5041, 0x323e, 0x3644, 0x4367,
-  0x376f, 0x5043, 0x4724, 0x346b, 0x5044, 0x304b, 0x3860, 0x346c,
-  0x497a, 0x4832, 0x3559, 0x3271, 0x5067, 0x4541, 0x476c, 0x5046,
-  0x483c, 0x4e62, 0x3f2d, 0x3b47, 0x3b77, 0x3240, 0x4451, 0x4322,
-  0x504a, 0x304c, 0x4463, 0x3d3b, 0x3a34, 0x4d24, 0x424e, 0x323f,
-  0x5049, 0x4d3e, 0x5045, 0x5047, 0x3a6e, 0x5048, 0x5524, 0x5050,
-  0x5053, 0x5051, 0x3242, 0x4a3b, 0x504b, 0x504f, 0x3873, 0x3b48,
-  0x3426, 0x5054, 0x504c, 0x4e63, 0x3b78, 0x504d, 0x5052, 0x5055,
-  0x504e, 0x3621, 0x304d, 0x3622, 0x3241, 0x5525, 0x4b79, 0x496e,
-  0x3874, 0x3f2f, 0x4e37, 0x4a58, 0x3738, 0x4225, 0x3264, 0x3d53,
-  0x5059, 0x505e, 0x505c, 0x5057, 0x422f, 0x505a, 0x505d, 0x505b,
-  0x4a5d, 0x5058, 0x3f2e, 0x4b73, 0x505f, 0x5060, 0x3d24, 0x506d,
-  0x4750, 0x4936, 0x5068, 0x4a70, 0x3236, 0x506c, 0x5066, 0x506f,
-  0x4152, 0x3844, 0x475c, 0x6047, 0x506e, 0x455d, 0x5063, 0x3876,
-  0x3875, 0x5061, 0x3c5a, 0x5069, 0x4a6f, 0x434d, 0x5065, 0x3771,
-  0x5062, 0x506a, 0x5064, 0x4e51, 0x506b, 0x4f41, 0x3666, 0x3770,
-  0x5070, 0x5071, 0x5075, 0x304e, 0x4a50, 0x5074, 0x5073, 0x5077,
-  0x5076, 0x4464, 0x3772, 0x5078, 0x3c45, 0x4226, 0x4465, 0x3676,
-  0x5079, 0x3536, 0x507a, 0x507c, 0x4b35, 0x3766, 0x3b31, 0x4877,
-  0x507b, 0x3a45, 0x4d43, 0x507e, 0x5123, 0x507d, 0x3a44, 0x3d7d,
-  0x3739, 0x5124, 0x364f, 0x5121, 0x5122, 0x462f, 0x417c, 0x3623,
-  0x4b4d, 0x5125, 0x4e3d, 0x5126, 0x5129, 0x5127, 0x414e, 0x5128,
-  0x512a, 0x512c, 0x512b, 0x4a48, 0x3537, 0x512e, 0x512f, 0x322f,
-  0x512d, 0x3c74, 0x5132, 0x5131, 0x5130, 0x5056, 0x5133, 0x3d7e,
-  0x5134, 0x4d25, 0x4c59, 0x5136, 0x5135, 0x5138, 0x5137, 0x5139,
-  0x513a, 0x3074, 0x3835, 0x373b, 0x3d3c, 0x437b, 0x3624, 0x4068,
-  0x3877, 0x396e, 0x513c, 0x4c48, 0x4546, 0x3b79, 0x513b, 0x513d,
-  0x455e, 0x3375, 0x513e, 0x467e, 0x4134, 0x5140, 0x5141, 0x482c,
-  0x3878, 0x4f3b, 0x5142, 0x3626, 0x4a3c, 0x4236, 0x3671, 0x4535,
-  0x3773, 0x5143, 0x5144, 0x4662, 0x315f, 0x5147, 0x3a7d, 0x5146,
-  0x3a46, 0x5148, 0x666e, 0x5149, 0x4b41, 0x514a, 0x514b, 0x514c,
-  0x3e69, 0x3c4c, 0x3427, 0x514f, 0x514d, 0x4c3d, 0x514e, 0x495a,
-  0x5150, 0x5151, 0x5152, 0x455f, 0x5156, 0x5154, 0x5155, 0x5153,
-  0x3a63, 0x5157, 0x4c6a, 0x4e64, 0x5158, 0x4028, 0x5159, 0x3d5a,
-  0x515a, 0x437c, 0x4e3f, 0x4560, 0x5245, 0x515b, 0x7425, 0x3645,
-  0x515c, 0x4b5e, 0x3d68, 0x427c, 0x515e, 0x4664, 0x515f, 0x5160,
-  0x332e, 0x5161, 0x3627, 0x464c, 0x317a, 0x3d50, 0x4821, 0x5162,
-  0x4561, 0x3f4f, 0x5163, 0x4a2c, 0x405a, 0x3422, 0x3429, 0x5164,
-  0x5166, 0x373a, 0x5165, 0x4e73, 0x3d69, 0x483d, 0x4a4c, 0x5167,
-  0x4d78, 0x5168, 0x5169, 0x457e, 0x516a, 0x4029, 0x3a7e, 0x3774,
-  0x516b, 0x3b49, 0x396f, 0x4466, 0x516d, 0x4227, 0x3a6f, 0x516e,
-  0x516f, 0x4130, 0x516c, 0x5171, 0x4b36, 0x3964, 0x5170, 0x3775,
-  0x3a5e, 0x476d, 0x5174, 0x5172, 0x497b, 0x3e6a, 0x517b, 0x3364,
-  0x5175, 0x5173, 0x414f, 0x5177, 0x5176, 0x3344, 0x3760, 0x517c,
-  0x4e2d, 0x5178, 0x517d, 0x517a, 0x5179, 0x4e4f, 0x3879, 0x3243,
-  0x4e74, 0x3d75, 0x4558, 0x3965, 0x5222, 0x5223, 0x4e65, 0x4f2b,
-  0x5225, 0x387a, 0x5224, 0x332f, 0x5226, 0x4b56, 0x443c, 0x4d26,
-  0x4a59, 0x5227, 0x7055, 0x4630, 0x5228, 0x342a, 0x4c33, 0x3e21,
-  0x5229, 0x4a67, 0x522d, 0x402a, 0x522a, 0x3650, 0x522b, 0x342b,
-  0x372e, 0x522e, 0x522f, 0x5230, 0x5231, 0x3c5b, 0x387b, 0x4c5e,
-  0x4c68, 0x4677, 0x4a71, 0x5232, 0x5233, 0x5235, 0x5237, 0x5236,
-  0x5238, 0x323d, 0x4b4c, 0x3a7c, 0x5239, 0x4159, 0x3e22, 0x3629,
-  0x523a, 0x485b, 0x523b, 0x523c, 0x523d, 0x523e, 0x4924, 0x3668,
-  0x3065, 0x463f, 0x523f, 0x3d3d, 0x4069, 0x5241, 0x5240, 0x3e23,
-  0x3861, 0x5243, 0x483e, 0x5244, 0x485c, 0x4234, 0x426e, 0x3628,
-  0x466e, 0x4331, 0x476e, 0x4b4e, 0x5246, 0x406a, 0x3735, 0x5247,
-  0x5248, 0x312c, 0x3075, 0x346d, 0x4228, 0x3551, 0x4d71, 0x524b,
-  0x3237, 0x524a, 0x362a, 0x524c, 0x4c71, 0x524d, 0x4e52, 0x387c,
-  0x3836, 0x524e, 0x5250, 0x524f, 0x3f5f, 0x3139, 0x315e, 0x5251,
-  0x5252, 0x3837, 0x5253, 0x356e, 0x3b32, 0x5254, 0x4b74, 0x3a35,
-  0x355a, 0x4d27, 0x4150, 0x483f, 0x3c7d, 0x3d47, 0x3c68, 0x3c75,
-  0x3d76, 0x4840, 0x5257, 0x3143, 0x4151, 0x387d, 0x3845, 0x3667,
-  0x525b, 0x4321, 0x427e, 0x362b, 0x3e24, 0x525c, 0x525a, 0x3244,
-  0x4266, 0x3c38, 0x3b4b, 0x3126, 0x3370, 0x3966, 0x3b4a, 0x525d,
-  0x525e, 0x3549, 0x3346, 0x3967, 0x3548, 0x445f, 0x3125, 0x4631,
-  0x4c3e, 0x3921, 0x4d79, 0x4547, 0x387e, 0x372f, 0x5267, 0x3663,
-  0x4b4a, 0x485d, 0x5266, 0x345e, 0x5261, 0x5262, 0x5264, 0x5265,
-  0x355b, 0x3f61, 0x4a2d, 0x5263, 0x525f, 0x3863, 0x5260, 0x4f24,
-  0x4a72, 0x4468, 0x3862, 0x3970, 0x5268, 0x465d, 0x526c, 0x3c7e,
-  0x3c76, 0x526f, 0x526d, 0x4c23, 0x526a, 0x5273, 0x526e, 0x5271,
-  0x3846, 0x4c3f, 0x5272, 0x5274, 0x5276, 0x3a70, 0x4f42, 0x526b,
-  0x5269, 0x5275, 0x5270, 0x5278, 0x5323, 0x527a, 0x527e, 0x5321,
-  0x527b, 0x533e, 0x3a69, 0x3331, 0x5279, 0x5325, 0x3076, 0x5324,
-  0x3025, 0x494a, 0x5322, 0x527c, 0x5277, 0x527d, 0x3a48, 0x5326,
-  0x3077, 0x532f, 0x5327, 0x5328, 0x3e25, 0x4b69, 0x532d, 0x532c,
-  0x452f, 0x532e, 0x532b, 0x3134, 0x3a36, 0x3f30, 0x5329, 0x4562,
-  0x532a, 0x3022, 0x5334, 0x4d23, 0x3e27, 0x533a, 0x5339, 0x5330,
-  0x4243, 0x5331, 0x426f, 0x5336, 0x3e26, 0x5333, 0x4c64, 0x373c,
-  0x5337, 0x5338, 0x5335, 0x533b, 0x5332, 0x5341, 0x5346, 0x5342,
-  0x533d, 0x5347, 0x4131, 0x5349, 0x3922, 0x533f, 0x437d, 0x5343,
-  0x533c, 0x342d, 0x346e, 0x3365, 0x5344, 0x5340, 0x3776, 0x534a,
-  0x5348, 0x4153, 0x354a, 0x362c, 0x5345, 0x3674, 0x3144, 0x534e,
-  0x534c, 0x5427, 0x5351, 0x534b, 0x534f, 0x534d, 0x3b4c, 0x5350,
-  0x5353, 0x5358, 0x5356, 0x5355, 0x4332, 0x3245, 0x5352, 0x5354,
-  0x3e28, 0x3133, 0x5357, 0x325e, 0x5362, 0x3e7c, 0x535e, 0x535c,
-  0x535d, 0x535f, 0x313d, 0x4139, 0x5359, 0x535a, 0x337a, 0x5361,
-  0x346f, 0x5364, 0x5360, 0x5363, 0x4a2e, 0x4655, 0x4838, 0x5366,
-  0x5365, 0x3345, 0x5367, 0x536a, 0x5369, 0x5368, 0x4739, 0x536b,
-  0x536c, 0x536e, 0x536d, 0x5370, 0x5373, 0x5371, 0x536f, 0x5372,
-  0x5374, 0x5375, 0x5376, 0x5377, 0x5378, 0x5145, 0x3c7c, 0x3b4d,
-  0x3273, 0x3078, 0x4344, 0x5379, 0x3a24, 0x304f, 0x3f5e, 0x537a,
-  0x3847, 0x3971, 0x537c, 0x537b, 0x4a60, 0x537d, 0x5421, 0x537e,
-  0x5422, 0x5423, 0x3777, 0x3160, 0x5424, 0x5426, 0x5425, 0x5428,
-  0x455a, 0x5429, 0x3035, 0x3a5f, 0x373d, 0x434f, 0x542a, 0x542b,
-  0x542d, 0x542e, 0x3a64, 0x3651, 0x4b37, 0x542c, 0x542f, 0x3a41,
-  0x3923, 0x5433, 0x3a25, 0x4333, 0x5430, 0x445a, 0x5434, 0x3f62,
-  0x5432, 0x5435, 0x373f, 0x5436, 0x5437, 0x3924, 0x3340, 0x5439,
-  0x543a, 0x543b, 0x5438, 0x5431, 0x543c, 0x543d, 0x4b64, 0x3e6b,
-  0x543f, 0x5440, 0x543e, 0x5442, 0x4738, 0x3068, 0x4956, 0x5443,
-  0x3e7d, 0x3c39, 0x475d, 0x3470, 0x3a6b, 0x4b59, 0x4632, 0x3778,
-  0x424f, 0x5441, 0x5444, 0x4244, 0x5445, 0x5446, 0x5448, 0x4469,
-  0x342e, 0x7421, 0x3161, 0x4a73, 0x3e6c, 0x4548, 0x3a66, 0x544e,
-  0x4a3d, 0x4e5d, 0x3274, 0x544a, 0x413a, 0x544d, 0x4563, 0x4549,
-  0x4564, 0x4839, 0x444d, 0x3a49, 0x5449, 0x3176, 0x4536, 0x544b,
-  0x5447, 0x3f50, 0x544f, 0x3d4e, 0x362d, 0x5450, 0x4a68, 0x417d,
-  0x4446, 0x5452, 0x4b4f, 0x5453, 0x5458, 0x4a2f, 0x5457, 0x5451,
-  0x5454, 0x5456, 0x3a26, 0x4a49, 0x5459, 0x4345, 0x3275, 0x3e6d,
-  0x545b, 0x545a, 0x3968, 0x545c, 0x545e, 0x545d, 0x5460, 0x5455,
-  0x5462, 0x5461, 0x545f, 0x3b4e, 0x3f51, 0x4154, 0x5463, 0x403c,
-  0x306d, 0x4764, 0x445b, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468,
-  0x5469, 0x4a51, 0x546a, 0x3246, 0x546b, 0x4d3c, 0x3330, 0x5249,
-  0x3d48, 0x423f, 0x546c, 0x4c6b, 0x4c34, 0x546e, 0x4267, 0x4537,
-  0x4240, 0x4957, 0x546f, 0x5470, 0x317b, 0x3c3a, 0x5471, 0x3050,
-  0x5472, 0x5473, 0x3162, 0x3471, 0x4660, 0x4a74, 0x5477, 0x4155,
-  0x5476, 0x3740, 0x4b5b, 0x5475, 0x4565, 0x5479, 0x5478, 0x547b,
-  0x547a, 0x317c, 0x547c, 0x3e29, 0x547e, 0x4325, 0x547d, 0x4a33,
-  0x3d77, 0x455b, 0x5521, 0x3925, 0x5522, 0x4721, 0x485e, 0x4c51,
-  0x4725, 0x552b, 0x3538, 0x4d45, 0x4c2f, 0x562c, 0x5523, 0x5526,
-  0x4245, 0x4b38, 0x454a, 0x5527, 0x4b65, 0x3a4a, 0x3e2a, 0x5528,
-  0x3b50, 0x3b4f, 0x3039, 0x3848, 0x402b, 0x3051, 0x552c, 0x552d,
-  0x552a, 0x3138, 0x342f, 0x5529, 0x4c45, 0x4931, 0x3028, 0x3079,
-  0x3b51, 0x3052, 0x3023, 0x5532, 0x5530, 0x4c3c, 0x5533, 0x5531,
-  0x552f, 0x3f31, 0x552e, 0x4a5a, 0x3864, 0x5537, 0x5538, 0x3e2b,
-  0x5534, 0x4f2c, 0x474c, 0x5536, 0x3a27, 0x5539, 0x4958, 0x553a,
-  0x5535, 0x4c3b, 0x475e, 0x553b, 0x4932, 0x553c, 0x5540, 0x553d,
-  0x3247, 0x553f, 0x3c3b, 0x553e, 0x3779, 0x554c, 0x5545, 0x5542,
-  0x4364, 0x5541, 0x5543, 0x5544, 0x5546, 0x5547, 0x3472, 0x5549,
-  0x5548, 0x554a, 0x3e6e, 0x554d, 0x445c, 0x3145, 0x554b, 0x554e,
-  0x554f, 0x5552, 0x5550, 0x5551, 0x3b52, 0x5553, 0x3926, 0x5554,
-  0x3b7a, 0x4238, 0x5555, 0x5556, 0x3b5a, 0x3927, 0x4c52, 0x3528,
-  0x3849, 0x5557, 0x3358, 0x5558, 0x4239, 0x5559, 0x5623, 0x555a,
-  0x555b, 0x555c, 0x555e, 0x555f, 0x5560, 0x4270, 0x3127, 0x3c69,
-  0x3042, 0x4157, 0x3430, 0x3c35, 0x3928, 0x4566, 0x3d21, 0x3431,
-  0x4368, 0x446a, 0x3038, 0x3539, 0x4a75, 0x3c42, 0x3552, 0x406b,
-  0x3c3c, 0x4d28, 0x5561, 0x355c, 0x3a4b, 0x3332, 0x3163, 0x3e2c,
-  0x3248, 0x5562, 0x4d46, 0x3d49, 0x3c64, 0x5563, 0x3473, 0x4652,
-  0x4c29, 0x5564, 0x5565, 0x4959, 0x5567, 0x3428, 0x3677, 0x5566,
-  0x3432, 0x3f32, 0x556b, 0x3b21, 0x3249, 0x556a, 0x5568, 0x556c,
-  0x5569, 0x472b, 0x5c4d, 0x3f33, 0x556d, 0x4e40, 0x556e, 0x5570,
-  0x437e, 0x556f, 0x4023, 0x3b7b, 0x4250, 0x3c77, 0x4975, 0x406c,
-  0x3c4d, 0x5571, 0x3e2d, 0x5572, 0x5573, 0x3053, 0x423a, 0x3f52,
-  0x5574, 0x4633, 0x3e2e, 0x3e2f, 0x5575, 0x406d, 0x3e30, 0x5576,
-  0x5577, 0x4c60, 0x5578, 0x3646, 0x3d22, 0x5579, 0x557a, 0x3c5c,
-  0x3f2c, 0x4674, 0x3f54, 0x4878, 0x4722, 0x3649, 0x557b, 0x356f,
-  0x557c, 0x367e, 0x464f, 0x3230, 0x3b53, 0x557d, 0x5622, 0x5621,
-  0x367d, 0x557e, 0x4538, 0x4230, 0x454b, 0x3c48, 0x4158, 0x4d7a,
-  0x5624, 0x5625, 0x4656, 0x3b33, 0x5627, 0x5628, 0x5629, 0x3474,
-  0x562a, 0x562b, 0x322c, 0x413b, 0x3464, 0x562d, 0x4c28, 0x4252,
-  0x3359, 0x562f, 0x5631, 0x345f, 0x562e, 0x5630, 0x5633, 0x5632,
-  0x5634, 0x5635, 0x463d, 0x362e, 0x3265, 0x5636, 0x563b, 0x5639,
-  0x4a77, 0x4a76, 0x4567, 0x5638, 0x3d54, 0x5637, 0x3f72, 0x563c,
-  0x3a6a, 0x5642, 0x5643, 0x563d, 0x3333, 0x563e, 0x5647, 0x5646,
-  0x5645, 0x5641, 0x5640, 0x5644, 0x4a78, 0x564b, 0x5648, 0x564a,
-  0x4d72, 0x5649, 0x563f, 0x3f73, 0x564c, 0x3a37, 0x564d, 0x564e,
-  0x5651, 0x5650, 0x564f, 0x4568, 0x563a, 0x5657, 0x5653, 0x5652,
-  0x5654, 0x5655, 0x5658, 0x4e66, 0x5659, 0x5656, 0x565a, 0x3460,
-  0x565b, 0x565d, 0x565c, 0x565e, 0x565f, 0x406e, 0x3d23, 0x3d64,
-  0x4163, 0x3929, 0x3a38, 0x392a, 0x3570, 0x5660, 0x3a39, 0x384a,
-  0x5661, 0x4c26, 0x4743, 0x5662, 0x392b, 0x342c, 0x4327, 0x3652,
-  0x3b54, 0x495b, 0x4841, 0x5663, 0x3475, 0x5666, 0x4421, 0x5665,
-  0x5664, 0x5667, 0x446b, 0x3f63, 0x3b55, 0x404a, 0x4253, 0x3522,
-  0x4422, 0x5668, 0x5669, 0x3e6f, 0x4b39, 0x566c, 0x566b, 0x566a,
-  0x497d, 0x5673, 0x4b5a, 0x566d, 0x566f, 0x4b6b, 0x566e, 0x5670,
-  0x4828, 0x5671, 0x4a3e, 0x5672, 0x3433, 0x4a3f, 0x472f, 0x5674,
-  0x5675, 0x392c, 0x3434, 0x5676, 0x3838, 0x4d44, 0x4d29, 0x3476,
-  0x5678, 0x4423, 0x392d, 0x3e31, 0x485f, 0x3e32, 0x3d78, 0x446c,
-  0x4a79, 0x4539, 0x392e, 0x495c, 0x5679, 0x4559, 0x3a42, 0x384b,
-  0x446d, 0x3043, 0x3d6e, 0x392f, 0x4d47, 0x567a, 0x567b, 0x4751,
-  0x567c, 0x4e77, 0x4f2d, 0x567e, 0x567d, 0x3347, 0x5721, 0x5724,
-  0x5725, 0x5723, 0x4940, 0x3e33, 0x5727, 0x5726, 0x5722, 0x5728,
-  0x5729, 0x572a, 0x572d, 0x572b, 0x572c, 0x572e, 0x3164, 0x446e,
-  0x572f, 0x377a, 0x3276, 0x4736, 0x5730, 0x467b, 0x4a5b, 0x5731,
-  0x4f2e, 0x5732, 0x4a40, 0x5735, 0x5021, 0x5031, 0x3c30, 0x4675,
-  0x5736, 0x355d, 0x4424, 0x307a, 0x5737, 0x4a26, 0x3930, 0x4350,
-  0x446f, 0x4c6f, 0x3839, 0x384c, 0x5738, 0x5739, 0x573f, 0x3c65,
-  0x4425, 0x362f, 0x573a, 0x492b, 0x4346, 0x573b, 0x573c, 0x3630,
-  0x573d, 0x573e, 0x5740, 0x4576, 0x5741, 0x5742, 0x5743, 0x5734,
-  0x5733, 0x5744, 0x3741, 0x4927, 0x3a4c, 0x4937, 0x4426, 0x494b,
-  0x5745, 0x3e34, 0x3146, 0x5746, 0x5747, 0x4c72, 0x4860, 0x574a,
-  0x317d, 0x402c, 0x5749, 0x5748, 0x3742, 0x4254, 0x574e, 0x574c,
-  0x574b, 0x4e27, 0x3865, 0x3d79, 0x574d, 0x454c, 0x3d3e, 0x4640,
-  0x5751, 0x5750, 0x574f, 0x5752, 0x3866, 0x5753, 0x497c, 0x3d5b,
-  0x5754, 0x4879, 0x4641, 0x4427, 0x4530, 0x5755, 0x352b, 0x3f34,
-  0x492c, 0x3477, 0x4726, 0x5756, 0x3b56, 0x4b3a, 0x4b3b, 0x317e,
-  0x575b, 0x4369, 0x5758, 0x3277, 0x582d, 0x575a, 0x4730, 0x5759,
-  0x5757, 0x397a, 0x575d, 0x5763, 0x5769, 0x5761, 0x455c, 0x5766,
-  0x495d, 0x5760, 0x5765, 0x4e67, 0x3b57, 0x4255, 0x575e, 0x355e,
-  0x5768, 0x402d, 0x3165, 0x5762, 0x3278, 0x5767, 0x3631, 0x5764,
-  0x576a, 0x576c, 0x5776, 0x5774, 0x5771, 0x5770, 0x4e78, 0x5772,
-  0x3632, 0x3931, 0x3d7a, 0x5779, 0x576b, 0x576f, 0x575f, 0x327a,
-  0x5773, 0x5775, 0x4351, 0x3a28, 0x3238, 0x576d, 0x5778, 0x5777,
-  0x3633, 0x4229, 0x3366, 0x3743, 0x576e, 0x577a, 0x577d, 0x5821,
-  0x3c3d, 0x5827, 0x4470, 0x577b, 0x5825, 0x3279, 0x5823, 0x5824,
-  0x577e, 0x5822, 0x3867, 0x4d2a, 0x3435, 0x3159, 0x5826, 0x473a,
-  0x302d, 0x4861, 0x575c, 0x582c, 0x5830, 0x4c65, 0x5829, 0x4569,
-  0x582e, 0x3e70, 0x582f, 0x4657, 0x4f47, 0x582b, 0x5831, 0x397b,
-  0x404b, 0x3054, 0x582a, 0x5828, 0x415a, 0x577c, 0x3b34, 0x4246,
-  0x583d, 0x415b, 0x5838, 0x5835, 0x5836, 0x3c66, 0x5839, 0x583c,
-  0x5837, 0x3d25, 0x583a, 0x5834, 0x4c7c, 0x4c7b, 0x583e, 0x583f,
-  0x3055, 0x5833, 0x3672, 0x3026, 0x3436, 0x583b, 0x5843, 0x5842,
-  0x5847, 0x5848, 0x5846, 0x5849, 0x5841, 0x5845, 0x584a, 0x584b,
-  0x5840, 0x3b7c, 0x5844, 0x4256, 0x3932, 0x5832, 0x3f35, 0x5858,
-  0x4a69, 0x584e, 0x584f, 0x5850, 0x5857, 0x5856, 0x4b7d, 0x3437,
-  0x5854, 0x3745, 0x3334, 0x5851, 0x4e38, 0x5853, 0x3056, 0x5855,
-  0x584c, 0x5852, 0x5859, 0x3744, 0x584d, 0x4d5d, 0x4d2b, 0x585c,
-  0x5860, 0x417e, 0x4e79, 0x5861, 0x585e, 0x585b, 0x585a, 0x585f,
-  0x4a30, 0x4634, 0x3746, 0x5862, 0x585d, 0x5863, 0x377b, 0x3231,
-  0x586b, 0x3438, 0x5869, 0x586a, 0x3a29, 0x5868, 0x5866, 0x5865,
-  0x586c, 0x5864, 0x586e, 0x327b, 0x5870, 0x586f, 0x4428, 0x5873,
-  0x5871, 0x5867, 0x377c, 0x5872, 0x5876, 0x5875, 0x5877, 0x5874,
-  0x5878, 0x5879, 0x587a, 0x4a6a, 0x587c, 0x587b, 0x3d3f, 0x402e,
-  0x3266, 0x327c, 0x587d, 0x303f, 0x404c, 0x587e, 0x6c43, 0x5921,
-  0x3761, 0x5922, 0x406f, 0x5923, 0x5924, 0x353a, 0x5925, 0x5926,
-  0x5927, 0x4257, 0x384d, 0x4c61, 0x4b3c, 0x3d6a, 0x5928, 0x4070,
-  0x6e3d, 0x4862, 0x3c6a, 0x3a4d, 0x5929, 0x4247, 0x4a27, 0x4271,
-  0x592c, 0x592a, 0x592d, 0x592b, 0x592e, 0x4a31, 0x3037, 0x495e,
-  0x4863, 0x592f, 0x5932, 0x3e35, 0x353b, 0x5930, 0x5937, 0x3e36,
-  0x5931, 0x4744, 0x4d5e, 0x5933, 0x5934, 0x5938, 0x456a, 0x5935,
-  0x3933, 0x405e, 0x5946, 0x4834, 0x4272, 0x4864, 0x5a2d, 0x4a7a,
-  0x4471, 0x4b75, 0x593b, 0x3221, 0x436a, 0x5944, 0x4334, 0x593e,
-  0x5945, 0x5940, 0x5947, 0x5943, 0x5942, 0x476f, 0x593c, 0x327d,
-  0x593a, 0x3571, 0x4273, 0x5936, 0x5939, 0x3934, 0x405b, 0x3e37,
-  0x5941, 0x4752, 0x3572, 0x3348, 0x3367, 0x3f21, 0x5949, 0x594e,
-  0x594a, 0x377d, 0x594f, 0x3b22, 0x3969, 0x3d26, 0x593d, 0x3b7d,
-  0x594c, 0x3b58, 0x594d, 0x3044, 0x5948, 0x4429, 0x3573, 0x3634,
-  0x594b, 0x3027, 0x3a43, 0x3f36, 0x4472, 0x4854, 0x5951, 0x415e,
-  0x422a, 0x3b2b, 0x5952, 0x5954, 0x5950, 0x4a61, 0x443d, 0x415c,
-  0x4a7b, 0x3c4e, 0x5960, 0x595f, 0x3f78, 0x377e, 0x5959, 0x3e39,
-  0x4668, 0x4731, 0x5957, 0x415d, 0x3c78, 0x595c, 0x3e38, 0x5956,
-  0x595b, 0x4753, 0x5955, 0x3721, 0x335d, 0x595d, 0x4e2b, 0x3a4e,
-  0x4335, 0x595a, 0x405c, 0x3935, 0x3f64, 0x3166, 0x413c, 0x5958,
-  0x3545, 0x3747, 0x444f, 0x595e, 0x415f, 0x5961, 0x5963, 0x4237,
-  0x5969, 0x5964, 0x5966, 0x4941, 0x4473, 0x5967, 0x4d2c, 0x4d48,
-  0x3439, 0x302e, 0x5965, 0x5962, 0x3478, 0x3167, 0x5968, 0x4d49,
-  0x596c, 0x423b, 0x5973, 0x596d, 0x596a, 0x5971, 0x5953, 0x596e,
-  0x5972, 0x4842, 0x456b, 0x596b, 0x596f, 0x3748, 0x3a71, 0x405d,
-  0x5977, 0x4526, 0x5974, 0x4b60, 0x5975, 0x5976, 0x4c4e, 0x4022,
-  0x3762, 0x597d, 0x3b35, 0x597a, 0x5979, 0x4732, 0x4635, 0x4531,
-  0x597b, 0x597c, 0x496f, 0x4745, 0x3b23, 0x4071, 0x4b50, 0x3349,
-  0x5a25, 0x597e, 0x4d4a, 0x5a27, 0x5a23, 0x5a24, 0x4160, 0x5a22,
-  0x593f, 0x5a26, 0x5a21, 0x5a2b, 0x5a2c, 0x4527, 0x5a2e, 0x3b24,
-  0x5a29, 0x353c, 0x5a2f, 0x5a28, 0x5a33, 0x5a32, 0x5a31, 0x5a34,
-  0x5a36, 0x3e71, 0x5a35, 0x5a39, 0x5a37, 0x5a38, 0x5970, 0x5a3b,
-  0x5a3a, 0x5978, 0x5a3c, 0x5a30, 0x3b59, 0x5a3d, 0x5a3e, 0x5a40,
-  0x5a3f, 0x5a41, 0x327e, 0x3936, 0x4a7c, 0x402f, 0x384e, 0x5a43,
-  0x5a46, 0x4952, 0x355f, 0x5a45, 0x5a44, 0x4754, 0x5a47, 0x3635,
-  0x5a49, 0x5a48, 0x343a, 0x3b36, 0x4658, 0x3749, 0x3f74, 0x5a4a,
-  0x4030, 0x4528, 0x495f, 0x5a4b, 0x5a4c, 0x5a4d, 0x4a38, 0x555d,
-  0x4046, 0x494c, 0x3a58, 0x4865, 0x4843, 0x454d, 0x4e41, 0x5a4f,
-  0x3c50, 0x5a50, 0x3036, 0x3654, 0x404d, 0x4960, 0x5a51, 0x3b42,
-  0x4347, 0x3b5b, 0x3f37, 0x5a52, 0x4a7d, 0x3177, 0x3b5c, 0x5a55,
-  0x5a53, 0x5a56, 0x4e39, 0x5a54, 0x407b, 0x5a57, 0x4232, 0x5a58,
-  0x347a, 0x5a5a, 0x5a59, 0x5a5b, 0x5a5c, 0x347b, 0x467c, 0x4336,
-  0x356c, 0x3b5d, 0x4161, 0x3d5c, 0x3030, 0x5a5d, 0x3222, 0x5a61,
-  0x3937, 0x5a60, 0x3a2b, 0x3e3a, 0x5a5f, 0x3e3b, 0x4c40, 0x3a2a,
-  0x3057, 0x404e, 0x5a66, 0x4031, 0x3147, 0x3d55, 0x4b66, 0x3a72,
-  0x3e3c, 0x4027, 0x5a65, 0x5a63, 0x5a64, 0x436b, 0x5b26, 0x5a6a,
-  0x3b7e, 0x3938, 0x5a68, 0x5a69, 0x3f38, 0x5a67, 0x3b2f, 0x5a6c,
-  0x5a6b, 0x5a70, 0x5a71, 0x5a6d, 0x3322, 0x5a6e, 0x5a6f, 0x4855,
-  0x4961, 0x374a, 0x5a72, 0x4032, 0x3e3d, 0x4352, 0x3647, 0x5a73,
-  0x5a77, 0x324b, 0x5a74, 0x5a76, 0x5a75, 0x3d6b, 0x4348, 0x3045,
-  0x5a78, 0x5a79, 0x442a, 0x4e71, 0x3b43, 0x4a6b, 0x4b3d, 0x5b22,
-  0x5a7b, 0x5a7e, 0x5a7d, 0x5a7a, 0x5b21, 0x465e, 0x5a7c, 0x5b23,
-  0x3d6c, 0x5b24, 0x4d4b, 0x4778, 0x5b25, 0x5b27, 0x5b28, 0x5b29,
-  0x364a, 0x3148, 0x3939, 0x5b2a, 0x5b2b, 0x3d71, 0x4162, 0x5258,
-  0x413e, 0x413d, 0x4258, 0x3a47, 0x5072, 0x376e, 0x4d2d, 0x4a7e,
-  0x497e, 0x5b2c, 0x3a73, 0x443f, 0x5b2d, 0x4f2f, 0x4b3e, 0x442b,
-  0x5b2e, 0x347c, 0x5b2f, 0x5b30, 0x4c5a, 0x4c24, 0x4b76, 0x4b5c,
-  0x3b25, 0x5b32, 0x3c6b, 0x4b51, 0x5b34, 0x5b37, 0x5b36, 0x3479,
-  0x3560, 0x5b33, 0x5b35, 0x5b38, 0x3f79, 0x4d7b, 0x3049, 0x3a60,
-  0x423c, 0x3c5d, 0x3e73, 0x5b3b, 0x454e, 0x5b39, 0x422b, 0x5b3a,
-  0x3e72, 0x4c5d, 0x5b3c, 0x5b3d, 0x4d68, 0x5b42, 0x393a, 0x4755,
-  0x5b3f, 0x456c, 0x5a5e, 0x5a62, 0x354f, 0x4747, 0x5b41, 0x3e3e,
-  0x4844, 0x5b47, 0x487a, 0x5b3e, 0x5b44, 0x5b43, 0x404f, 0x4b6d,
-  0x4e53, 0x4b67, 0x324c, 0x3b5e, 0x4f48, 0x5b46, 0x3f75, 0x5b45,
-  0x5b40, 0x384f, 0x5b4c, 0x5b4a, 0x324d, 0x5b48, 0x5b4e, 0x5b54,
-  0x4248, 0x4a41, 0x5b56, 0x4922, 0x5b55, 0x4770, 0x4b3f, 0x343b,
-  0x4077, 0x3d40, 0x4453, 0x4d2e, 0x5b51, 0x5b50, 0x5b52, 0x5b4f,
-  0x5b57, 0x5b4d, 0x5b4b, 0x5b53, 0x5b49, 0x436c, 0x4c78, 0x3c46,
-  0x3a74, 0x3a3a, 0x4b6f, 0x3341, 0x444e, 0x464a, 0x3149, 0x4072,
-  0x4034, 0x372a, 0x5b59, 0x393b, 0x337c, 0x5b5b, 0x3374, 0x5b61,
-  0x5b5e, 0x4073, 0x334b, 0x3a2c, 0x334a, 0x3a4f, 0x5b5c, 0x3765,
-  0x374b, 0x456d, 0x5b5a, 0x3046, 0x5b5d, 0x5b5f, 0x364d, 0x372c,
-  0x343c, 0x354b, 0x5b62, 0x3a79, 0x4b71, 0x3b37, 0x5b63, 0x4930,
-  0x5b6f, 0x3233, 0x5b64, 0x5b75, 0x5b65, 0x4e42, 0x5b6c, 0x475f,
-  0x5b74, 0x5b67, 0x3034, 0x5b69, 0x393c, 0x5b6b, 0x5b6a, 0x5b66,
-  0x5b71, 0x3e3f, 0x546d, 0x3868, 0x4d7c, 0x5b68, 0x4474, 0x3323,
-  0x3a2d, 0x5b60, 0x5b70, 0x3361, 0x5b6e, 0x5b72, 0x456e, 0x347e,
-  0x5c32, 0x4c49, 0x5b77, 0x347d, 0x5b7e, 0x4b40, 0x5c21, 0x5c23,
-  0x5c27, 0x5b79, 0x432a, 0x456f, 0x5c2b, 0x5b7c, 0x5c28, 0x5c22,
-  0x3f39, 0x5c2c, 0x4033, 0x5c2a, 0x343d, 0x4f50, 0x5b76, 0x5c26,
-  0x3058, 0x5b78, 0x4c3a, 0x5b7d, 0x3f22, 0x4447, 0x5b73, 0x5c25,
-  0x3f7a, 0x5c2f, 0x3371, 0x3821, 0x5c31, 0x5b7a, 0x5c30, 0x5c29,
-  0x5b7b, 0x5c2d, 0x5c2e, 0x5c3f, 0x464e, 0x5c24, 0x5c3b, 0x5c3d,
-  0x4458, 0x4d4c, 0x4976, 0x5c38, 0x424a, 0x5c3e, 0x413f, 0x5c35,
-  0x5c42, 0x5c41, 0x466f, 0x5c40, 0x466a, 0x5c44, 0x5c37, 0x3648,
-  0x5c3a, 0x3d5d, 0x4760, 0x5c3c, 0x364b, 0x5c34, 0x5c36, 0x5c33,
-  0x4f30, 0x335a, 0x5c39, 0x5c43, 0x3335, 0x3a67, 0x315d, 0x5c54,
-  0x4f31, 0x5c57, 0x3f3a, 0x5c56, 0x5c55, 0x5c52, 0x5c46, 0x5c63,
-  0x5c45, 0x5c58, 0x5c50, 0x5c4b, 0x5c48, 0x5c49, 0x5c51, 0x7422,
-  0x5c4e, 0x393d, 0x4448, 0x4164, 0x5c4c, 0x5c47, 0x5c4a, 0x4d4d,
-  0x4b6a, 0x5c4f, 0x5c59, 0x5c61, 0x5c5a, 0x5c67, 0x5c65, 0x5c60,
-  0x5c5f, 0x4450, 0x4165, 0x5c5d, 0x5c5b, 0x5c62, 0x5c68, 0x4875,
-  0x5c6e, 0x5c69, 0x5c6c, 0x5c66, 0x4374, 0x4938, 0x5c5c, 0x5c64,
-  0x3e40, 0x4c4f, 0x5c78, 0x5c6b, 0x3822, 0x3223, 0x335f, 0x5c53,
-  0x3e41, 0x5c70, 0x5c77, 0x3c79, 0x3372, 0x432e, 0x5c6d, 0x5c72,
-  0x5c76, 0x3636, 0x354c, 0x5c74, 0x3521, 0x464b, 0x5c73, 0x5c75,
-  0x5c6f, 0x5c71, 0x3360, 0x4349, 0x5c7c, 0x5c7a, 0x3869, 0x5c79,
-  0x5d21, 0x5b58, 0x5c7b, 0x5c7d, 0x5c7e, 0x5d2c, 0x5d28, 0x5b6d,
-  0x5d27, 0x5d26, 0x5d23, 0x5c6a, 0x5d25, 0x5d24, 0x5d2a, 0x4f26,
-  0x5d2d, 0x367b, 0x5d29, 0x5d2b, 0x4827, 0x5d2e, 0x5d32, 0x5d2f,
-  0x4d73, 0x5d30, 0x5c5e, 0x5d33, 0x5d34, 0x3135, 0x5d36, 0x3767,
-  0x3c21, 0x3655, 0x3224, 0x4d5f, 0x5d38, 0x5d37, 0x5d3a, 0x353d,
-  0x3656, 0x343e, 0x5d3d, 0x5d3c, 0x5d3e, 0x324e, 0x4337, 0x5d3f,
-  0x343f, 0x5d41, 0x5d40, 0x5d42, 0x5d43, 0x5d44, 0x3b5f, 0x4035,
-  0x3a21, 0x4970, 0x4a62, 0x4f44, 0x3b75, 0x3a50, 0x4e72, 0x5d45,
-  0x5d46, 0x3b60, 0x5d47, 0x5d48, 0x5d4a, 0x5d49, 0x4b58, 0x3d5e,
-  0x3c6c, 0x3b44, 0x5d4b, 0x5d4d, 0x3f23, 0x5d4c, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d54, 0x5d53, 0x5d55, 0x3225, 0x434a,
-  0x5d56, 0x3b26, 0x334c, 0x5d57, 0x4542, 0x544c, 0x3523, 0x5d58,
-  0x5d59, 0x4a6c, 0x4b68, 0x4647, 0x5d5a, 0x4866, 0x487b, 0x4c53,
-  0x5d5b, 0x5d5d, 0x5d5c, 0x5d5f, 0x5d5e, 0x5d61, 0x3b61, 0x4c31,
-  0x5d62, 0x5d63, 0x3524, 0x5d64, 0x5d66, 0x5d65, 0x3f65, 0x4939,
-  0x314a, 0x4845, 0x4475, 0x3d41, 0x3561, 0x4846, 0x3c2e, 0x5d68,
-  0x3440, 0x3178, 0x4672, 0x5d67, 0x393e, 0x4353, 0x5d69, 0x5d71,
-  0x5d6a, 0x4241, 0x3562, 0x5d72, 0x3768, 0x3525, 0x5d70, 0x5d6e,
-  0x5d6b, 0x4d60, 0x4440, 0x4659, 0x5d6c, 0x5d74, 0x5d73, 0x3723,
-  0x322d, 0x3a3b, 0x5d6d, 0x5d6f, 0x4b57, 0x4274, 0x4b77, 0x5d7c,
-  0x5d7d, 0x324f, 0x4a28, 0x4c7d, 0x5e21, 0x3c23, 0x3e42, 0x5d78,
-  0x5d7e, 0x3168, 0x3637, 0x5d75, 0x5d7a, 0x4074, 0x4771, 0x4867,
-  0x5d77, 0x4b21, 0x5d79, 0x5e24, 0x5e22, 0x5d7b, 0x4b22, 0x4748,
-  0x3563, 0x4525, 0x436d, 0x5e25, 0x5e23, 0x4259, 0x5d76, 0x314b,
-  0x4d4e, 0x5e30, 0x5e2f, 0x4076, 0x5e2c, 0x4d6c, 0x4636, 0x5e26,
-  0x4445, 0x314c, 0x393f, 0x5e29, 0x3d27, 0x5e2e, 0x5e2d, 0x5e28,
-  0x5e2b, 0x3368, 0x5e2a, 0x4749, 0x4e2e, 0x3e74, 0x4075, 0x5e36,
-  0x5e34, 0x494d, 0x5e31, 0x5e33, 0x313a, 0x3940, 0x4f32, 0x333d,
-  0x4962, 0x4d61, 0x3324, 0x3f3b, 0x5e35, 0x5e3a, 0x3e43, 0x4d30,
-  0x5e37, 0x5e32, 0x5e38, 0x4e5e, 0x4573, 0x4642, 0x3336, 0x3155,
-  0x5e3e, 0x5e41, 0x4e43, 0x4d64, 0x5e48, 0x5e42, 0x5e3f, 0x4e54,
-  0x5e45, 0x3d4a, 0x5e47, 0x5e4c, 0x4571, 0x5e4a, 0x5e44, 0x4338,
-  0x5e4b, 0x5e40, 0x5e46, 0x5e4d, 0x307c, 0x5e43, 0x5e4e, 0x3f3c,
-  0x3d5f, 0x4a25, 0x3a2e, 0x5e3b, 0x5e49, 0x453a, 0x4036, 0x3369,
-  0x3a51, 0x3e44, 0x5e3d, 0x3d42, 0x374c, 0x5e3c, 0x5e52, 0x3d6d,
-  0x383a, 0x5e61, 0x5e5b, 0x3574, 0x454f, 0x5e56, 0x5e5f, 0x302f,
-  0x3132, 0x3239, 0x5e58, 0x422c, 0x5e4f, 0x5e51, 0x3941, 0x5e62,
-  0x5e5d, 0x5e55, 0x5e5c, 0x4c2b, 0x5e5a, 0x5e5e, 0x3850, 0x3e45,
-  0x4339, 0x5e54, 0x4d2f, 0x5e57, 0x5e50, 0x4572, 0x5e53, 0x5e59,
-  0x4f51, 0x3c3e, 0x4b7e, 0x5e63, 0x482e, 0x5e6f, 0x383b, 0x3d60,
-  0x5e65, 0x4e2f, 0x3942, 0x5e72, 0x306e, 0x5e70, 0x5e64, 0x5e6a,
-  0x5e6c, 0x4d4f, 0x5e67, 0x452e, 0x5e69, 0x5e71, 0x5e6b, 0x4c47,
-  0x5e66, 0x3c22, 0x5e7e, 0x336a, 0x5e68, 0x5e6d, 0x5e6e, 0x426c,
-  0x425a, 0x5e76, 0x5e7c, 0x5e7a, 0x4529, 0x5f23, 0x5e77, 0x5e78,
-  0x5e60, 0x3579, 0x493a, 0x3c3f, 0x3977, 0x4f33, 0x5e74, 0x5f22,
-  0x3169, 0x4166, 0x4779, 0x3441, 0x4e7a, 0x4c21, 0x4452, 0x5e7b,
-  0x5e7d, 0x4132, 0x5f21, 0x5e79, 0x5e73, 0x3443, 0x3769, 0x5f2f,
-  0x5f2a, 0x4078, 0x3363, 0x3d61, 0x5f33, 0x5f2c, 0x442c, 0x5f29,
-  0x4459, 0x5f4c, 0x5f26, 0x5f25, 0x5f2e, 0x5f28, 0x5f27, 0x5f2d,
-  0x4021, 0x5f24, 0x5f30, 0x5f31, 0x3442, 0x5f36, 0x5f35, 0x5f37,
-  0x5f3a, 0x4543, 0x5f34, 0x5f38, 0x3763, 0x4279, 0x5f32, 0x473b,
-  0x5f39, 0x5f3e, 0x5f3c, 0x5f3f, 0x5f42, 0x5f3b, 0x396a, 0x4728,
-  0x5e39, 0x4d74, 0x5f3d, 0x5f41, 0x4275, 0x5f40, 0x5f2b, 0x6f69,
-  0x5f45, 0x5f49, 0x5f47, 0x5f43, 0x5f44, 0x5f48, 0x5f46, 0x494e,
-  0x5f4e, 0x5f4b, 0x5f4a, 0x5f4d, 0x4654, 0x5f4f, 0x4375, 0x426d,
-  0x4025, 0x5f50, 0x5f52, 0x5f51, 0x5e75, 0x5f53, 0x4667, 0x5f54,
-  0x3250, 0x4574, 0x3325, 0x3564, 0x3c5e, 0x3a52, 0x4f27, 0x3f66,
-  0x316a, 0x5f56, 0x5f55, 0x5f59, 0x433a, 0x5f5c, 0x5f57, 0x5f5b,
-  0x5f5a, 0x4540, 0x3059, 0x4e75, 0x5f5e, 0x3128, 0x5f60, 0x5f5f,
-  0x5f5d, 0x5f58, 0x4b23, 0x5f62, 0x5f61, 0x316b, 0x5f64, 0x4a32,
-  0x5f63, 0x4c35, 0x3e47, 0x4133, 0x3e46, 0x4e7b, 0x5f6a, 0x4079,
-  0x5f66, 0x5f6b, 0x316c, 0x5f69, 0x4761, 0x5f65, 0x5f68, 0x3e48,
-  0x4851, 0x5f6c, 0x3c51, 0x407a, 0x5f6f, 0x5f67, 0x3727, 0x5f6d,
-  0x4d50, 0x5f70, 0x7426, 0x3d4f, 0x5f71, 0x5f72, 0x472e, 0x5f74,
-  0x5f75, 0x4733, 0x4575, 0x5f77, 0x5f79, 0x4e55, 0x5f76, 0x5f78,
-  0x316d, 0x5f73, 0x535b, 0x5f7a, 0x4167, 0x3b38, 0x5f7c, 0x5f7b,
-  0x3f24, 0x5259, 0x5f7d, 0x6021, 0x5f6e, 0x5f7e, 0x6022, 0x477a,
-  0x6023, 0x6024, 0x6025, 0x6026, 0x445e, 0x6028, 0x6027, 0x6029,
-  0x602a, 0x3c5f, 0x4963, 0x4c6c, 0x602b, 0x602c, 0x4156, 0x3c24,
-  0x602d, 0x602e, 0x602f, 0x4a52, 0x4847, 0x6030, 0x4757, 0x442d,
-  0x6031, 0x3267, 0x356d, 0x4c46, 0x4c36, 0x3234, 0x4f34, 0x4b52,
-  0x4a2a, 0x4037, 0x6032, 0x4643, 0x3823, 0x6033, 0x3a54, 0x6035,
-  0x6034, 0x6036, 0x6037, 0x6038, 0x353e, 0x6039, 0x603a, 0x3824,
-  0x4848, 0x603c, 0x3e75, 0x603b, 0x3638, 0x603d, 0x603f, 0x603e,
-  0x6040, 0x3851, 0x6041, 0x3669, 0x4140, 0x397d, 0x6043, 0x6044,
-  0x6042, 0x3c6d, 0x4648, 0x3639, 0x6046, 0x432c, 0x6045, 0x4f35,
-  0x4762, 0x6049, 0x604b, 0x6048, 0x4c54, 0x604a, 0x604c, 0x4e44,
-  0x6050, 0x604f, 0x4376, 0x472d, 0x3825, 0x604e, 0x604d, 0x4d31,
-  0x4d32, 0x6051, 0x316e, 0x3976, 0x3b62, 0x6052, 0x6053, 0x6055,
-  0x3d43, 0x6057, 0x6056, 0x6058, 0x334d, 0x605a, 0x6059, 0x605c,
-  0x605b, 0x383c, 0x4e28, 0x364c, 0x3226, 0x366a, 0x3461, 0x4e68,
-  0x605e, 0x6060, 0x6061, 0x3251, 0x605d, 0x3b39, 0x4441, 0x605f,
-  0x6064, 0x3c6e, 0x6062, 0x373e, 0x4849, 0x6063, 0x607e, 0x6069,
-  0x383d, 0x3565, 0x6066, 0x4d7d, 0x4e30, 0x4276, 0x6068, 0x606a,
-  0x4e56, 0x3657, 0x487c, 0x474a, 0x606b, 0x606d, 0x6070, 0x606c,
-  0x606f, 0x386a, 0x314d, 0x6071, 0x3f70, 0x606e, 0x4e5c, 0x6074,
-  0x7424, 0x6072, 0x6075, 0x6067, 0x6073, 0x3a3c, 0x6076, 0x6077,
-  0x4d7e, 0x6078, 0x6079, 0x6065, 0x607a, 0x3444, 0x3c25, 0x607b,
-  0x607c, 0x607d, 0x313b, 0x6121, 0x493b, 0x6122, 0x3424, 0x6123,
-  0x6124, 0x6125, 0x6127, 0x6128, 0x6126, 0x4953, 0x612a, 0x6129,
-  0x612c, 0x612b, 0x612d, 0x612e, 0x6130, 0x612f, 0x3979, 0x6132,
-  0x6131, 0x3445, 0x3f53, 0x453c, 0x6133, 0x4038, 0x3b3a, 0x3179,
-  0x6134, 0x4d51, 0x4a63, 0x6135, 0x4544, 0x4d33, 0x3943, 0x3f3d,
-  0x434b, 0x5234, 0x442e, 0x3268, 0x6136, 0x6137, 0x613c, 0x613a,
-  0x6139, 0x5a42, 0x3326, 0x6138, 0x305a, 0x482a, 0x484a, 0x4e31,
-  0x613d, 0x613b, 0x435c, 0x4026, 0x482b, 0x492d, 0x613f, 0x4e2c,
-  0x374d, 0x6140, 0x613e, 0x4856, 0x6141, 0x6142, 0x305b, 0x3e76,
-  0x6147, 0x6144, 0x466d, 0x6143, 0x3526, 0x614a, 0x6145, 0x6146,
-  0x6149, 0x6148, 0x4925, 0x4142, 0x4141, 0x353f, 0x614b, 0x614c,
-  0x614d, 0x614f, 0x614e, 0x3156, 0x6157, 0x4868, 0x6151, 0x6153,
-  0x6155, 0x3f3e, 0x6156, 0x6154, 0x3c40, 0x6150, 0x6152, 0x4942,
-  0x3e49, 0x6159, 0x6158, 0x615a, 0x3c26, 0x3a2f, 0x4577, 0x615b,
-  0x444b, 0x615d, 0x4e21, 0x615c, 0x4169, 0x6162, 0x6164, 0x6165,
-  0x4354, 0x6163, 0x6160, 0x615e, 0x615f, 0x6161, 0x6168, 0x6166,
-  0x6167, 0x6169, 0x616b, 0x616c, 0x616d, 0x616e, 0x616a, 0x6170,
-  0x616f, 0x6171, 0x4e45, 0x6174, 0x6172, 0x6173, 0x3462, 0x4c7e,
-  0x4a4a, 0x6176, 0x6175, 0x6177, 0x6178, 0x617c, 0x6179, 0x617a,
-  0x617b, 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, 0x482f, 0x4550,
-  0x6224, 0x4772, 0x4934, 0x6225, 0x6226, 0x452a, 0x3327, 0x3944,
-  0x6227, 0x6228, 0x6229, 0x3b29, 0x622b, 0x622a, 0x622c, 0x622d,
-  0x4869, 0x622e, 0x622f, 0x7369, 0x6230, 0x6231, 0x6232, 0x3b2e,
-  0x6233, 0x4756, 0x4b5f, 0x314e, 0x3157, 0x6234, 0x6236, 0x6235,
-  0x4570, 0x4039, 0x5d39, 0x6237, 0x4c41, 0x6238, 0x3446, 0x4857,
-  0x6239, 0x623a, 0x623b, 0x4c5c, 0x4c55, 0x443e, 0x416a, 0x623d,
-  0x3d62, 0x3e4a, 0x6240, 0x623f, 0x623e, 0x487d, 0x3447, 0x3829,
-  0x6246, 0x6243, 0x3f3f, 0x4c32, 0x6242, 0x6244, 0x6245, 0x6241,
-  0x6247, 0x6248, 0x442f, 0x3463, 0x4365, 0x6249, 0x624a, 0x624d,
-  0x3f67, 0x4644, 0x624e, 0x4b53, 0x624b, 0x624c, 0x6251, 0x6250,
-  0x624f, 0x6253, 0x6252, 0x6254, 0x6256, 0x6255, 0x4a4d, 0x3d56,
-  0x4e46, 0x6257, 0x4637, 0x6258, 0x6259, 0x625d, 0x625b, 0x625c,
-  0x625a, 0x625e, 0x625f, 0x6260, 0x6261, 0x4c37, 0x6262, 0x4c70,
-  0x6263, 0x434e, 0x476a, 0x366b, 0x433b, 0x6264, 0x363a, 0x4050,
-  0x6265, 0x3a3d, 0x6266, 0x6267, 0x3826, 0x3a55, 0x6269, 0x4556,
-  0x3a56, 0x354e, 0x4b24, 0x474b, 0x4557, 0x395c, 0x626b, 0x3e4b,
-  0x4e32, 0x3945, 0x3827, 0x4823, 0x626d, 0x626f, 0x386b, 0x626e,
-  0x4476, 0x6271, 0x3337, 0x626c, 0x486a, 0x3130, 0x3a6c, 0x4f52,
-  0x6270, 0x6272, 0x4a4b, 0x4059, 0x6274, 0x6275, 0x6273, 0x334e,
-  0x627b, 0x627a, 0x3c27, 0x627c, 0x6277, 0x627d, 0x6278, 0x4858,
-  0x6276, 0x6279, 0x6322, 0x6321, 0x4b61, 0x627e, 0x306b, 0x6324,
-  0x6323, 0x3e4c, 0x6325, 0x4143, 0x6327, 0x6326, 0x6328, 0x6268,
-  0x626a, 0x632a, 0x6329, 0x3c28, 0x4e69, 0x3c52, 0x632b, 0x3737,
-  0x3540, 0x3527, 0x3b63, 0x4d34, 0x6331, 0x6330, 0x4144, 0x632d,
-  0x632f, 0x3d4b, 0x3f40, 0x632e, 0x632c, 0x472a, 0x3e4d, 0x493c,
-  0x3a57, 0x4578, 0x6332, 0x6333, 0x6349, 0x3658, 0x4f3d, 0x4135,
-  0x6334, 0x3252, 0x4477, 0x4a21, 0x6335, 0x357a, 0x6336, 0x6338,
-  0x6339, 0x4729, 0x633a, 0x633b, 0x633c, 0x3659, 0x3253, 0x4645,
-  0x3d28, 0x3b64, 0x633d, 0x3d29, 0x324a, 0x4943, 0x633e, 0x486b,
-  0x4145, 0x6341, 0x6342, 0x4769, 0x3f41, 0x633f, 0x4361, 0x6340,
-  0x3e4e, 0x305c, 0x3529, 0x6343, 0x4478, 0x6344, 0x4047, 0x4c2d,
-  0x4923, 0x6345, 0x6346, 0x4355, 0x4e47, 0x6348, 0x6347, 0x3c6f,
-  0x634a, 0x3070, 0x634d, 0x634b, 0x3254, 0x374e, 0x634c, 0x3946,
-  0x3972, 0x4a66, 0x634e, 0x4b54, 0x6350, 0x4051, 0x314f, 0x323a,
-  0x302c, 0x634f, 0x6351, 0x6352, 0x3e77, 0x6353, 0x334f, 0x6355,
-  0x376a, 0x3566, 0x6356, 0x3675, 0x6357, 0x407c, 0x464d, 0x4060,
-  0x3a75, 0x6358, 0x4362, 0x416b, 0x635a, 0x635c, 0x6359, 0x635b,
-  0x3722, 0x635d, 0x3726, 0x3567, 0x4d52, 0x635f, 0x6360, 0x312e,
-  0x6363, 0x3376, 0x6362, 0x6361, 0x6365, 0x635e, 0x6366, 0x4e29,
-  0x6367, 0x6368, 0x5474, 0x636a, 0x6369, 0x636b, 0x636c, 0x4e35,
-  0x636d, 0x706f, 0x3e4f, 0x636e, 0x636f, 0x3d57, 0x4638, 0x6370,
-  0x4328, 0x6371, 0x433c, 0x6372, 0x3625, 0x513f, 0x435d, 0x3c33,
-  0x3448, 0x6373, 0x6422, 0x6376, 0x3568, 0x6375, 0x6424, 0x6374,
-  0x3e50, 0x6378, 0x6379, 0x452b, 0x637a, 0x335e, 0x3f5a, 0x4964,
-  0x637c, 0x4268, 0x6377, 0x637b, 0x637d, 0x3a7b, 0x6426, 0x492e,
-  0x4826, 0x4579, 0x365a, 0x6425, 0x6423, 0x4835, 0x637e, 0x435e,
-  0x457b, 0x457a, 0x3a76, 0x6438, 0x6428, 0x642a, 0x642d, 0x642e,
-  0x642b, 0x642c, 0x6429, 0x6427, 0x6421, 0x4a4f, 0x3255, 0x6435,
-  0x6432, 0x6437, 0x6436, 0x4773, 0x4c27, 0x3b3b, 0x6430, 0x6439,
-  0x6434, 0x6433, 0x642f, 0x6431, 0x3449, 0x433d, 0x407d, 0x4822,
-  0x643e, 0x4824, 0x4061, 0x643b, 0x484f, 0x643f, 0x4a53, 0x435b,
-  0x643a, 0x643c, 0x643d, 0x6440, 0x3c44, 0x4646, 0x6445, 0x6444,
-  0x6441, 0x4f36, 0x644a, 0x644e, 0x644b, 0x6447, 0x6448, 0x644d,
-  0x6442, 0x5255, 0x6449, 0x6443, 0x644c, 0x6452, 0x344a, 0x644f,
-  0x6450, 0x6451, 0x6454, 0x6453, 0x4876, 0x6455, 0x4e7c, 0x4a6d,
-  0x645a, 0x6457, 0x6456, 0x4052, 0x6459, 0x645b, 0x6458, 0x645f,
-  0x645c, 0x645d, 0x6446, 0x645e, 0x6460, 0x6461, 0x4a46, 0x6462,
-  0x4c62, 0x364e, 0x3729, 0x6463, 0x4a34, 0x3f68, 0x4c30, 0x6464,
-  0x4e33, 0x4774, 0x4146, 0x4734, 0x3d4d, 0x3040, 0x6469, 0x6467,
-  0x6465, 0x3421, 0x3e51, 0x646a, 0x6468, 0x6466, 0x646e, 0x646d,
-  0x646c, 0x646b, 0x646f, 0x6470, 0x403a, 0x6471, 0x6473, 0x6472,
-  0x3852, 0x4138, 0x6475, 0x457c, 0x6474, 0x6476, 0x4a35, 0x416c,
-  0x3947, 0x6477, 0x4e48, 0x6479, 0x647a, 0x647b, 0x647c, 0x3b65,
-  0x647d, 0x374f, 0x356a, 0x352a, 0x6521, 0x4c73, 0x3948, 0x647e,
-  0x6524, 0x4c66, 0x473c, 0x4933, 0x3d63, 0x6523, 0x3c53, 0x3949,
-  0x3b66, 0x3569, 0x4a36, 0x6522, 0x4147, 0x4b42, 0x3a77, 0x3b67,
-  0x445d, 0x6527, 0x4e5f, 0x3a59, 0x6528, 0x3f42, 0x652a, 0x3e52,
-  0x3a30, 0x6529, 0x3d2a, 0x383e, 0x4148, 0x6525, 0x652b, 0x6526,
-  0x3750, 0x652e, 0x6532, 0x376b, 0x652d, 0x6536, 0x394a, 0x4d6d,
-  0x303c, 0x6533, 0x356b, 0x6530, 0x6531, 0x457d, 0x652f, 0x652c,
-  0x3328, 0x4064, 0x3828, 0x6538, 0x6535, 0x6537, 0x6534, 0x3751,
-  0x4233, 0x6539, 0x416e, 0x6546, 0x6542, 0x653c, 0x6540, 0x3c7a,
-  0x305d, 0x653b, 0x6543, 0x6547, 0x394b, 0x4c56, 0x4456, 0x653d,
-  0x6545, 0x653a, 0x433e, 0x653f, 0x303d, 0x4c4a, 0x653e, 0x365b,
-  0x486c, 0x416d, 0x4e50, 0x3d6f, 0x656e, 0x6548, 0x407e, 0x6544,
-  0x6549, 0x654b, 0x4479, 0x654e, 0x654a, 0x4a54, 0x344b, 0x4c4b,
-  0x305e, 0x654d, 0x4e7d, 0x654c, 0x316f, 0x466c, 0x654f, 0x6556,
-  0x6550, 0x6557, 0x6553, 0x477b, 0x3c4a, 0x6555, 0x6552, 0x6558,
-  0x6551, 0x3d44, 0x4b25, 0x3d4c, 0x6554, 0x6560, 0x655c, 0x655f,
-  0x655d, 0x6561, 0x655b, 0x6541, 0x4053, 0x484b, 0x655e, 0x6559,
-  0x4121, 0x3752, 0x3d2b, 0x3f25, 0x4136, 0x6564, 0x6566, 0x6567,
-  0x6563, 0x6565, 0x655a, 0x6562, 0x656a, 0x6569, 0x4b7a, 0x372b,
-  0x6568, 0x656c, 0x656b, 0x656f, 0x6571, 0x3b3c, 0x656d, 0x6572,
-  0x6573, 0x6574, 0x657a, 0x453b, 0x6576, 0x6575, 0x6577, 0x6578,
-  0x6579, 0x657b, 0x657c, 0x344c, 0x657d, 0x657e, 0x6621, 0x6622,
-  0x6623, 0x6624, 0x6625, 0x6626, 0x6628, 0x6627, 0x6629, 0x662a,
-  0x662b, 0x662e, 0x662c, 0x662d, 0x3a61, 0x3753, 0x4356, 0x4833,
-  0x3d70, 0x474d, 0x486d, 0x662f, 0x586d, 0x6630, 0x6632, 0x4d65,
-  0x6631, 0x6634, 0x6633, 0x4d53, 0x6635, 0x487e, 0x6636, 0x6639,
-  0x6638, 0x6637, 0x663a, 0x3732, 0x4122, 0x3541, 0x663e, 0x663b,
-  0x663c, 0x663f, 0x6640, 0x663d, 0x3129, 0x3227, 0x6642, 0x6643,
-  0x6644, 0x4d62, 0x3d2c, 0x6646, 0x6645, 0x3f69, 0x6647, 0x6648,
-  0x6649, 0x3465, 0x344d, 0x664a, 0x664b, 0x4b5d, 0x4d63, 0x4d54,
-  0x4f37, 0x394d, 0x664e, 0x3c54, 0x664d, 0x664f, 0x3c29, 0x4251,
-  0x6650, 0x394c, 0x4c57, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655,
-  0x3c2a, 0x4c6d, 0x6657, 0x433f, 0x6656, 0x6659, 0x6658, 0x665a,
-  0x403b, 0x665b, 0x665c, 0x4a39, 0x665d, 0x416f, 0x665e, 0x665f,
-  0x4e7e, 0x6662, 0x6661, 0x6660, 0x4430, 0x6663, 0x3f26, 0x6664,
-  0x6665, 0x4f38, 0x6666, 0x6667, 0x6669, 0x6668, 0x4825, 0x4679,
-  0x4f3e, 0x4829, 0x666b, 0x3e53, 0x492a, 0x666c, 0x666a, 0x344e,
-  0x3854, 0x3b68, 0x486e, 0x382a, 0x4b43, 0x666f, 0x666d, 0x394e,
-  0x394f, 0x3069, 0x3a68, 0x4759, 0x305f, 0x6674, 0x4340, 0x4758,
-  0x425b, 0x6676, 0x6672, 0x6675, 0x6670, 0x6673, 0x4b26, 0x3855,
-  0x307d, 0x6671, 0x6678, 0x6679, 0x4639, 0x363b, 0x6726, 0x473d,
-  0x3b69, 0x363c, 0x4048, 0x4f46, 0x4c2e, 0x6677, 0x4054, 0x3553,
-  0x667a, 0x667c, 0x667b, 0x667d, 0x4326, 0x473e, 0x4431, 0x6723,
-  0x6722, 0x667e, 0x3f55, 0x4965, 0x6725, 0x6724, 0x3950, 0x4f53,
-  0x6735, 0x6729, 0x672a, 0x3c70, 0x6728, 0x3978, 0x6727, 0x672b,
-  0x4432, 0x4a22, 0x4123, 0x425c, 0x672f, 0x6730, 0x672c, 0x672d,
-  0x672e, 0x3951, 0x6736, 0x6732, 0x4966, 0x4b6c, 0x4928, 0x6731,
-  0x6734, 0x6733, 0x4b44, 0x6737, 0x6738, 0x4137, 0x6739, 0x673b,
-  0x673f, 0x673c, 0x673a, 0x473f, 0x673d, 0x673e, 0x3232, 0x6745,
-  0x6740, 0x6741, 0x6742, 0x4221, 0x6744, 0x6743, 0x6746, 0x6747,
-  0x6748, 0x3f43, 0x3269, 0x6749, 0x4e57, 0x3c2b, 0x3d2d, 0x3b6a,
-  0x4357, 0x674a, 0x674b, 0x3131, 0x674c, 0x674d, 0x674e, 0x674f,
-  0x6750, 0x363d, 0x5a2a, 0x6751, 0x4065, 0x6752, 0x3c4b, 0x6753,
-  0x5030, 0x6754, 0x4a5e, 0x345c, 0x4124, 0x3d58, 0x4971, 0x3d2e,
-  0x6755, 0x3952, 0x6756, 0x484c, 0x6764, 0x6758, 0x4249, 0x4775,
-  0x383f, 0x6757, 0x4125, 0x6759, 0x447a, 0x675b, 0x675a, 0x675d,
-  0x675c, 0x675e, 0x6760, 0x675f, 0x344f, 0x6761, 0x6762, 0x6763,
-  0x3a31, 0x4e49, 0x6765, 0x3f27, 0x3170, 0x6766, 0x6767, 0x6768,
-  0x3072, 0x6769, 0x676a, 0x4967, 0x3c47, 0x676c, 0x3329, 0x3032,
-  0x676b, 0x676e, 0x474e, 0x3f44, 0x3256, 0x4b27, 0x375d, 0x365c,
-  0x676d, 0x326a, 0x3423, 0x3171, 0x6772, 0x4e6a, 0x425d, 0x4944,
-  0x677e, 0x3257, 0x677c, 0x677a, 0x6771, 0x676f, 0x6770, 0x3c63,
-  0x366c, 0x4377, 0x4651, 0x3151, 0x6774, 0x6773, 0x6779, 0x6775,
-  0x6778, 0x4c50, 0x6777, 0x3258, 0x337d, 0x677b, 0x677d, 0x3754,
-  0x6823, 0x682c, 0x682d, 0x302b, 0x6834, 0x3071, 0x682b, 0x682a,
-  0x6825, 0x6824, 0x6822, 0x6821, 0x4363, 0x427b, 0x6827, 0x6826,
-  0x6829, 0x4170, 0x3755, 0x3141, 0x6828, 0x3953, 0x4171, 0x683a,
-  0x683b, 0x3259, 0x322e, 0x6838, 0x682e, 0x6836, 0x683d, 0x6837,
-  0x6835, 0x6776, 0x6833, 0x682f, 0x3450, 0x6831, 0x683c, 0x6832,
-  0x683e, 0x6830, 0x477c, 0x4d69, 0x6839, 0x684f, 0x6847, 0x3f7b,
-  0x3546, 0x365d, 0x6842, 0x325b, 0x3e54, 0x6845, 0x3a5a, 0x4551,
-  0x684a, 0x4a6e, 0x6841, 0x325a, 0x3856, 0x4929, 0x684b, 0x683f,
-  0x6848, 0x6852, 0x6843, 0x6844, 0x463a, 0x6849, 0x6846, 0x4b28,
-  0x684c, 0x3060, 0x6840, 0x684e, 0x684d, 0x476b, 0x6854, 0x685f,
-  0x337e, 0x6862, 0x6850, 0x6855, 0x4d6e, 0x685e, 0x4d55, 0x4e2a,
-  0x4378, 0x336b, 0x4972, 0x6864, 0x4621, 0x3031, 0x685d, 0x6859,
-  0x4172, 0x6853, 0x685b, 0x6860, 0x472c, 0x302a, 0x6858, 0x6861,
-  0x4978, 0x685c, 0x6857, 0x3e55, 0x3d2f, 0x3c2c, 0x4c58, 0x4947,
-  0x6867, 0x6870, 0x685a, 0x3377, 0x3e78, 0x6865, 0x686a, 0x4173,
-  0x6866, 0x686d, 0x435f, 0x686e, 0x4d56, 0x6863, 0x3338, 0x6869,
-  0x686c, 0x4c2c, 0x686f, 0x6868, 0x686b, 0x4b29, 0x4f21, 0x6873,
-  0x687a, 0x6872, 0x3c43, 0x6851, 0x4a4e, 0x4c22, 0x6879, 0x6878,
-  0x6874, 0x6875, 0x3136, 0x6877, 0x6871, 0x4455, 0x6876, 0x307e,
-  0x4222, 0x4a43, 0x687b, 0x6921, 0x4859, 0x687e, 0x3e56, 0x3c49,
-  0x6923, 0x363e, 0x6924, 0x4979, 0x687d, 0x6856, 0x687c, 0x4f4f,
-  0x4622, 0x4973, 0x692b, 0x6931, 0x6932, 0x6925, 0x4776, 0x692f,
-  0x6927, 0x6929, 0x6933, 0x6928, 0x692c, 0x3172, 0x4665, 0x692d,
-  0x6930, 0x6926, 0x4126, 0x692a, 0x3b27, 0x3f45, 0x3730, 0x4c74,
-  0x4c79, 0x3d72, 0x6937, 0x6935, 0x4f4e, 0x6934, 0x4d75, 0x6936,
-  0x6938, 0x6939, 0x693c, 0x693a, 0x4623, 0x693b, 0x484d, 0x692e,
-  0x3d73, 0x693d, 0x6942, 0x4174, 0x6941, 0x6922, 0x6943, 0x4149,
-  0x693e, 0x6940, 0x693f, 0x5d31, 0x5d22, 0x6945, 0x6944, 0x4d76,
-  0x623c, 0x6946, 0x6947, 0x6948, 0x3857, 0x3554, 0x694a, 0x515d,
-  0x3575, 0x4e3a, 0x3673, 0x694b, 0x694c, 0x436e, 0x694d, 0x467a,
-  0x303a, 0x3263, 0x6952, 0x6953, 0x694e, 0x3b3d, 0x694f, 0x4742,
-  0x6950, 0x6951, 0x695b, 0x6955, 0x6958, 0x6954, 0x6956, 0x6957,
-  0x3c58, 0x6959, 0x4341, 0x3756, 0x3342, 0x695c, 0x333f, 0x6961,
-  0x695d, 0x6960, 0x483a, 0x695e, 0x695f, 0x4948, 0x485a, 0x6962,
-  0x427d, 0x696c, 0x6968, 0x326b, 0x6966, 0x4b2a, 0x6967, 0x6964,
-  0x6965, 0x696a, 0x696d, 0x696b, 0x6969, 0x6963, 0x4358, 0x6974,
-  0x4c2a, 0x6972, 0x6973, 0x696e, 0x6970, 0x6971, 0x696f, 0x4066,
-  0x4f39, 0x6978, 0x6979, 0x6a21, 0x3f2a, 0x697b, 0x697e, 0x6976,
-  0x6975, 0x6a22, 0x325c, 0x697c, 0x6a23, 0x697d, 0x697a, 0x4433,
-  0x6977, 0x4768, 0x6a27, 0x4d3b, 0x6a26, 0x6a25, 0x6a2e, 0x6a28,
-  0x6a30, 0x4d66, 0x6a33, 0x6a2a, 0x6a2b, 0x6a2f, 0x6a32, 0x6a31,
-  0x6a29, 0x6a2c, 0x6a3d, 0x6a36, 0x6a34, 0x6a35, 0x6a3a, 0x6a3b,
-  0x332a, 0x3542, 0x6a39, 0x6a24, 0x6a38, 0x6a3c, 0x6a37, 0x6a3e,
-  0x6a40, 0x6a3f, 0x6a42, 0x6a41, 0x695a, 0x6a46, 0x6a43, 0x6a44,
-  0x6a45, 0x6a47, 0x376c, 0x6a49, 0x6a48, 0x3d30, 0x3954, 0x5e27,
-  0x6a4a, 0x3d51, 0x3339, 0x6a4b, 0x3152, 0x3e57, 0x6a4c, 0x3955,
-  0x6a4d, 0x3061, 0x493d, 0x6a4e, 0x3f6a, 0x6a55, 0x6a52, 0x436f,
-  0x6a53, 0x6a50, 0x365e, 0x6a4f, 0x6a56, 0x3736, 0x425e, 0x6a5c,
-  0x6a58, 0x4235, 0x6a57, 0x6a5a, 0x6a51, 0x6a5b, 0x6a5d, 0x486f,
-  0x6a59, 0x6a5e, 0x6a60, 0x3853, 0x6a54, 0x3041, 0x6a5f, 0x3a5b,
-  0x4e76, 0x6a61, 0x6a62, 0x4175, 0x4e22, 0x6a63, 0x4d35, 0x6a64,
-  0x6a65, 0x4a64, 0x6a66, 0x3a40, 0x4e23, 0x6a6b, 0x6a6c, 0x3e58,
-  0x6a6a, 0x4d67, 0x6a67, 0x6a69, 0x403d, 0x3f7e, 0x6a68, 0x6a6d,
-  0x4a23, 0x6a6f, 0x6a6e, 0x336c, 0x4b2b, 0x6a70, 0x6a7c, 0x6a72,
-  0x6a73, 0x6a74, 0x6a75, 0x6a79, 0x6a7a, 0x6a78, 0x6a76, 0x6a71,
-  0x6a77, 0x6a7b, 0x7037, 0x3228, 0x6a7e, 0x365f, 0x6a7d, 0x6b22,
-  0x6b21, 0x6b24, 0x6b23, 0x6b25, 0x3d31, 0x6b26, 0x6b27, 0x6b28,
-  0x403e, 0x4d57, 0x6b29, 0x4a24, 0x4746, 0x6b2a, 0x6b2b, 0x382b,
-  0x352c, 0x6b2c, 0x3b6b, 0x4741, 0x6b2d, 0x3350, 0x6b2e, 0x6b30,
-  0x4d77, 0x6b2f, 0x3f46, 0x6b31, 0x6b32, 0x6b33, 0x3451, 0x6b34,
-  0x6b35, 0x6b36, 0x6b37, 0x3351, 0x6b38, 0x6b39, 0x6b3a, 0x3272,
-  0x3f28, 0x6b3b, 0x6b3c, 0x6b3d, 0x3840, 0x447b, 0x6b3e, 0x3757,
-  0x3f56, 0x6b41, 0x4624, 0x6b40, 0x3731, 0x6b3f, 0x4277, 0x352d,
-  0x6b42, 0x6b43, 0x3e59, 0x376d, 0x6b44, 0x4b2c, 0x405f, 0x3576,
-  0x4c75, 0x414a, 0x6b45, 0x3f47, 0x4370, 0x3e5a, 0x6b46, 0x6b49,
-  0x6b4a, 0x3a3e, 0x4242, 0x6b48, 0x3e5b, 0x493e, 0x6b47, 0x3b6c,
-  0x3153, 0x6b4e, 0x3758, 0x3b6e, 0x3b6d, 0x4f4d, 0x6b4d, 0x6b4c,
-  0x4127, 0x354d, 0x4f43, 0x333a, 0x3e5c, 0x6b4b, 0x6b50, 0x6b51,
-  0x6b4f, 0x3858, 0x4d40, 0x3b6f, 0x4727, 0x6b54, 0x4040, 0x4342,
-  0x4d36, 0x6b57, 0x386c, 0x403f, 0x6b53, 0x6b58, 0x386d, 0x6b55,
-  0x6b56, 0x6b52, 0x4062, 0x4649, 0x432f, 0x325d, 0x4870, 0x3543,
-  0x4434, 0x6b5b, 0x6b59, 0x434c, 0x4041, 0x3452, 0x6b5a, 0x3f5b,
-  0x4e4a, 0x4f40, 0x6b5c, 0x6b67, 0x4435, 0x6b66, 0x6b63, 0x6b6b,
-  0x6b64, 0x6b60, 0x447c, 0x6b5f, 0x6b5d, 0x4d21, 0x3b70, 0x6b61,
-  0x6b5e, 0x6b65, 0x3d74, 0x3841, 0x427a, 0x4b45, 0x315a, 0x3062,
-  0x4625, 0x6b69, 0x6b68, 0x4666, 0x6b6d, 0x6b62, 0x6b6c, 0x6b6e,
-  0x382c, 0x6b6a, 0x3956, 0x3c55, 0x6b6f, 0x4d58, 0x6b72, 0x6b75,
-  0x6b73, 0x4935, 0x6b70, 0x3660, 0x6b74, 0x6b76, 0x6b7a, 0x6b77,
-  0x6b79, 0x6b78, 0x6b7b, 0x3c31, 0x6b7d, 0x6b7c, 0x4968, 0x6c21,
-  0x3759, 0x6b7e, 0x6c22, 0x6c23, 0x3544, 0x6641, 0x3e79, 0x6c24,
-  0x386e, 0x6c25, 0x6c26, 0x3b3e, 0x5a4e, 0x6c27, 0x6c28, 0x3d32,
-  0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x432b, 0x6c2e, 0x6c30,
-  0x6c2f, 0x4626, 0x6c31, 0x4b2d, 0x6c32, 0x6c33, 0x6c34, 0x6c35,
-  0x465a, 0x3e5d, 0x6c36, 0x396b, 0x502e, 0x6c37, 0x6c38, 0x493f,
-  0x6c39, 0x6c41, 0x6c3a, 0x6c3c, 0x6c3b, 0x6c3d, 0x4b46, 0x6c3e,
-  0x6c3f, 0x6c40, 0x6c42, 0x332d, 0x4467, 0x4969, 0x3a62, 0x3957,
-  0x494f, 0x325f, 0x484e, 0x6c45, 0x3453, 0x4055, 0x6c44, 0x6c49,
-  0x4379, 0x4c63, 0x6c47, 0x6c48, 0x352e, 0x6c4a, 0x4763, 0x425f,
-  0x4871, 0x453d, 0x6c46, 0x4b47, 0x326c, 0x6c4c, 0x4f28, 0x4442,
-  0x4f45, 0x3b71, 0x6c4b, 0x4231, 0x6c5c, 0x4128, 0x4678, 0x4950,
-  0x6c4f, 0x3b3f, 0x3b72, 0x3e5e, 0x4765, 0x382d, 0x6c4e, 0x6c4d,
-  0x496a, 0x3c41, 0x4552, 0x6c51, 0x6c52, 0x3958, 0x6c50, 0x6c53,
-  0x6c54, 0x6c56, 0x4223, 0x6c55, 0x3466, 0x6c58, 0x6c57, 0x6c59,
-  0x6c5b, 0x6c5d, 0x6c5e, 0x4056, 0x3c4f, 0x6c5f, 0x3352, 0x6c60,
-  0x4176, 0x6c61, 0x6c62, 0x496b, 0x352f, 0x6c63, 0x4436, 0x315b,
-  0x6c64, 0x3c71, 0x3f76, 0x422d, 0x6c67, 0x6c66, 0x6c65, 0x6c6d,
-  0x6c6b, 0x6c68, 0x6c6a, 0x6c69, 0x6c6c, 0x3577, 0x6c70, 0x4057,
-  0x6c71, 0x3859, 0x6c6e, 0x6c6f, 0x4f29, 0x4437, 0x4129, 0x6c72,
-  0x6c75, 0x6c73, 0x6c74, 0x4d59, 0x4627, 0x6c78, 0x6c76, 0x6c77,
-  0x6c79, 0x6d29, 0x6c7c, 0x6c7d, 0x6c7b, 0x6c7a, 0x447d, 0x6d21,
-  0x6d25, 0x6d22, 0x6c7e, 0x6d23, 0x6d24, 0x6d2b, 0x6d26, 0x4058,
-  0x6d28, 0x6d2a, 0x6d27, 0x6d2d, 0x3d33, 0x6d2c, 0x6d2e, 0x6d2f,
-  0x6d32, 0x6d31, 0x6d30, 0x6d34, 0x6d33, 0x4c76, 0x6d36, 0x6d35,
-  0x6d37, 0x6d38, 0x6d3a, 0x6d39, 0x3f48, 0x6d3b, 0x366d, 0x6d3c,
-  0x6d3e, 0x6d3f, 0x6d40, 0x6d3d, 0x6d41, 0x3c56, 0x6d42, 0x3530,
-  0x3733, 0x382e, 0x6d43, 0x4670, 0x453e, 0x6d44, 0x6d47, 0x3c34,
-  0x6d46, 0x6d45, 0x375a, 0x6d48, 0x3353, 0x6d4a, 0x3a5c, 0x6d49,
-  0x6d52, 0x6d4c, 0x6d4e, 0x4a65, 0x6d4b, 0x6d4d, 0x6d51, 0x6d4f,
-  0x3531, 0x6d50, 0x6d53, 0x475a, 0x4e58, 0x3d34, 0x6d54, 0x4d22,
-  0x6d56, 0x6d55, 0x6d59, 0x4d41, 0x6d58, 0x336d, 0x6d57, 0x6d5c,
-  0x6d5b, 0x6d5a, 0x4532, 0x6d5d, 0x6d5e, 0x6d5f, 0x396c, 0x3725,
-  0x6d60, 0x6d61, 0x6d62, 0x3f49, 0x6d63, 0x3c2d, 0x6d64, 0x6d65,
-  0x5221, 0x517e, 0x6d66, 0x6570, 0x6d67, 0x4324, 0x3f2b, 0x4740,
-  0x6d68, 0x4a55, 0x4454, 0x397e, 0x4329, 0x312a, 0x4b78, 0x3f57,
-  0x375e, 0x3661, 0x4a56, 0x6d69, 0x6d6b, 0x6d6a, 0x3260, 0x4676,
-  0x6d6c, 0x4777, 0x4533, 0x6d6d, 0x3d52, 0x6d6f, 0x4c42, 0x6d7e,
-  0x6d71, 0x6d72, 0x4449, 0x4260, 0x4177, 0x4628, 0x6d70, 0x3555,
-  0x6d79, 0x6d76, 0x6e25, 0x4629, 0x4360, 0x6d73, 0x447e, 0x4553,
-  0x6d74, 0x6d78, 0x3f60, 0x4767, 0x444c, 0x4042, 0x6d77, 0x422e,
-  0x4224, 0x6d75, 0x3029, 0x4f22, 0x6d7a, 0x4261, 0x3d35, 0x3f4a,
-  0x6d7c, 0x6d7b, 0x306f, 0x6d7d, 0x492f, 0x6e27, 0x465b, 0x3f6b,
-  0x4359, 0x3678, 0x6e26, 0x4d37, 0x313f, 0x4a57, 0x3261, 0x6e21,
-  0x6e22, 0x6e23, 0x6e24, 0x463b, 0x4323, 0x3063, 0x6e28, 0x6e29,
-  0x7423, 0x423d, 0x6e2a, 0x3173, 0x414c, 0x382f, 0x4d5a, 0x6e2b,
-  0x452c, 0x4178, 0x3c57, 0x6e2c, 0x6e2f, 0x3d65, 0x6e2d, 0x412b,
-  0x412a, 0x3064, 0x4e4b, 0x6e31, 0x4872, 0x6e33, 0x6e32, 0x6e30,
-  0x6364, 0x3454, 0x6d6e, 0x6e35, 0x6e34, 0x6e36, 0x4d38, 0x4661,
-  0x4b2e, 0x6e37, 0x3c59, 0x6e38, 0x6e39, 0x6e3a, 0x4521, 0x306a,
-  0x3959, 0x4f3a, 0x6e3e, 0x3734, 0x6e3b, 0x6e3c, 0x4974, 0x3354,
-  0x4d39, 0x363f, 0x4554, 0x6e3f, 0x6e40, 0x6e41, 0x4522, 0x6e43,
-  0x6e42, 0x4653, 0x6e44, 0x3d36, 0x3c60, 0x475b, 0x4371, 0x3c72,
-  0x3f6c, 0x6e45, 0x6e46, 0x3f5d, 0x6e47, 0x6e48, 0x6e49, 0x4d6f,
-  0x3d37, 0x6e4b, 0x6e4a, 0x395a, 0x3973, 0x3b40, 0x6e4e, 0x3d66,
-  0x6e4d, 0x6e4c, 0x4269, 0x386f, 0x4043, 0x4830, 0x3d39, 0x6e4f,
-  0x3e5f, 0x6e52, 0x6e50, 0x6e51, 0x6e54, 0x6e53, 0x3e7a, 0x6e55,
-  0x6e56, 0x6e57, 0x4850, 0x3a53, 0x3c61, 0x6e58, 0x6e59, 0x4e24,
-  0x3d45, 0x4c6e, 0x4e4c, 0x6e5a, 0x3662, 0x6e5b, 0x4523, 0x6e5e,
-  0x3378, 0x3f4b, 0x6e5c, 0x6e5d, 0x4460, 0x4b55, 0x367c, 0x6e60,
-  0x6e61, 0x6e5f, 0x6e63, 0x465f, 0x3343, 0x6e67, 0x6e64, 0x6e66,
-  0x6e62, 0x6f4f, 0x6e65, 0x4e6b, 0x385a, 0x6e6f, 0x4534, 0x6e6a,
-  0x6e6d, 0x6e6b, 0x6e70, 0x6e71, 0x6e69, 0x6e76, 0x3174, 0x6e68,
-  0x482d, 0x6e6c, 0x3e60, 0x395b, 0x4b48, 0x3664, 0x3d46, 0x463c,
-  0x412d, 0x6e74, 0x6e6e, 0x6e73, 0x4c43, 0x4438, 0x6e75, 0x6e72,
-  0x412c, 0x6e79, 0x6e78, 0x6e77, 0x4b2f, 0x3d7b, 0x6e7a, 0x4a5f,
-  0x3154, 0x4946, 0x4372, 0x3578, 0x6e7c, 0x395d, 0x3b2c, 0x6e7b,
-  0x3f6d, 0x3f6e, 0x6f21, 0x6f23, 0x3e7b, 0x6f22, 0x6f24, 0x3653,
-  0x4945, 0x3c62, 0x4f23, 0x6e7e, 0x3a78, 0x4f3f, 0x6f26, 0x6f25,
-  0x6f27, 0x6e7d, 0x4669, 0x4555, 0x4457, 0x6f2c, 0x4343, 0x6f28,
-  0x6f29, 0x372d, 0x6f2b, 0x3830, 0x6f2a, 0x3e61, 0x3379, 0x6f30,
-  0x3a3f, 0x4179, 0x444a, 0x333b, 0x6f2e, 0x6f2f, 0x4443, 0x6f2d,
-  0x6f31, 0x6f37, 0x6f3a, 0x6f39, 0x452d, 0x6f32, 0x6f33, 0x6f36,
-  0x6f38, 0x3640, 0x6f3b, 0x6f35, 0x6f34, 0x6f3f, 0x6f40, 0x6f41,
-  0x6f3e, 0x6f3d, 0x3e62, 0x462a, 0x6f3c, 0x6f45, 0x6f43, 0x6f44,
-  0x6f42, 0x4278, 0x6f46, 0x6f47, 0x6f49, 0x3455, 0x6f48, 0x4c7a,
-  0x6f54, 0x6f4a, 0x6f4d, 0x6f4b, 0x6f4c, 0x6f4e, 0x6f50, 0x6f51,
-  0x6f52, 0x6f55, 0x6f53, 0x6f56, 0x6f58, 0x6f57, 0x4439, 0x4c67,
-  0x6f59, 0x412e, 0x6f5a, 0x4a44, 0x6f5b, 0x332b, 0x313c, 0x3457,
-  0x3456, 0x6f5c, 0x6f5d, 0x6f5e, 0x6f5f, 0x6f60, 0x3458, 0x3355,
-  0x395e, 0x4836, 0x6f62, 0x6f61, 0x6f63, 0x315c, 0x6f66, 0x6f65,
-  0x6f64, 0x6f67, 0x6f6a, 0x3047, 0x6f68, 0x6f6c, 0x6f6b, 0x6f6e,
-  0x6f6d, 0x6f6f, 0x462e, 0x6f70, 0x6f71, 0x6f73, 0x6f72, 0x496c,
-  0x6f74, 0x6f75, 0x3a65, 0x6f76, 0x6f77, 0x4b49, 0x414b, 0x3024,
-  0x424b, 0x6f78, 0x496d, 0x6f7b, 0x6f79, 0x395f, 0x6f7a, 0x3842,
-  0x4a45, 0x6f7d, 0x7021, 0x6f7e, 0x7022, 0x3121, 0x3f58, 0x3d7c,
-  0x3459, 0x7023, 0x4766, 0x7025, 0x3122, 0x7024, 0x4444, 0x4e4d,
-  0x462b, 0x6f7c, 0x4e26, 0x3831, 0x4d5b, 0x3679, 0x4e34, 0x3728,
-  0x4262, 0x6721, 0x7026, 0x332c, 0x3f6f, 0x3356, 0x7028, 0x7029,
-  0x7027, 0x3764, 0x3a5d, 0x3e63, 0x3123, 0x4e59, 0x702b, 0x6e2e,
-  0x702a, 0x702e, 0x702c, 0x702d, 0x702f, 0x7030, 0x4e6c, 0x7031,
-  0x7032, 0x4049, 0x483b, 0x3f7d, 0x3467, 0x4d3a, 0x326d, 0x3d38,
-  0x385b, 0x7035, 0x7034, 0x3b73, 0x7036, 0x7033, 0x3b28, 0x703a,
-  0x6a2d, 0x5256, 0x3f77, 0x7038, 0x4e25, 0x4671, 0x312b, 0x4063,
-  0x3c36, 0x4a37, 0x3140, 0x4e6d, 0x4d6b, 0x703b, 0x4545, 0x3c7b,
-  0x703c, 0x703d, 0x3f4c, 0x703e, 0x4e6e, 0x7039, 0x7040, 0x7042,
-  0x7041, 0x703f, 0x7043, 0x7044, 0x417a, 0x3262, 0x7045, 0x4c38,
-  0x7046, 0x7047, 0x4f2a, 0x5b31, 0x7048, 0x7049, 0x704a, 0x704e,
-  0x704b, 0x704c, 0x704d, 0x704f, 0x4044, 0x4c77, 0x4045, 0x7050,
-  0x4873, 0x7051, 0x7353, 0x4c4c, 0x7052, 0x7053, 0x7054, 0x3357,
-  0x7056, 0x3f59, 0x7057, 0x3724, 0x7058, 0x705c, 0x705a, 0x705b,
-  0x3373, 0x7059, 0x705d, 0x705e, 0x3048, 0x705f, 0x7060, 0x3e64,
-  0x7061, 0x3547, 0x7064, 0x7063, 0x7062, 0x6b71, 0x4a5c, 0x7065,
-  0x7066, 0x7067, 0x7068, 0x7069, 0x706a, 0x345a, 0x706b, 0x706c,
-  0x4723, 0x706e, 0x323b, 0x7071, 0x7070, 0x3124, 0x3641, 0x4a47,
-  0x443a, 0x3a22, 0x3960, 0x3d67, 0x3f5c, 0x7073, 0x7072, 0x4d42,
-  0x3468, 0x4852, 0x465c, 0x3f7c, 0x4e4e, 0x375b, 0x7076, 0x7075,
-  0x4b4b, 0x462c, 0x3150, 0x7077, 0x7074, 0x4951, 0x4d6a, 0x7078,
-  0x7079, 0x707b, 0x426a, 0x335b, 0x335c, 0x707a, 0x3469, 0x3832,
-  0x346a, 0x453f, 0x4e60, 0x385c, 0x707c, 0x707d, 0x707e, 0x7121,
-  0x7123, 0x7122, 0x4977, 0x7124, 0x7125, 0x7126, 0x7127, 0x7129,
-  0x7128, 0x712a, 0x4874, 0x664c, 0x3f29, 0x3532, 0x712b, 0x712c,
-  0x522c, 0x5d3b, 0x4853, 0x307b, 0x303b, 0x3b74, 0x4b30, 0x3e7e,
-  0x712d, 0x4c5f, 0x712e, 0x4d5c, 0x3142, 0x3b41, 0x712f, 0x326e,
-  0x7130, 0x7131, 0x7133, 0x7134, 0x7136, 0x7132, 0x7135, 0x345b,
-  0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713d, 0x713c, 0x713f,
-  0x7142, 0x713e, 0x7140, 0x7141, 0x7143, 0x3642, 0x3c73, 0x7144,
-  0x7145, 0x3961, 0x7146, 0x333e, 0x474f, 0x7147, 0x7148, 0x435a,
-  0x466b, 0x7149, 0x477d, 0x424c, 0x3158, 0x366e, 0x366f, 0x4373,
-  0x714e, 0x3670, 0x326f, 0x714d, 0x714b, 0x714c, 0x714a, 0x7158,
-  0x714f, 0x7150, 0x7151, 0x7152, 0x7154, 0x7153, 0x3d59, 0x7155,
-  0x7157, 0x3533, 0x7156, 0x417b, 0x3833, 0x7159, 0x424d, 0x715a,
-  0x462d, 0x715b, 0x7160, 0x715e, 0x715d, 0x715f, 0x715c, 0x7162,
-  0x7161, 0x7164, 0x3643, 0x7163, 0x7165, 0x7166, 0x7168, 0x7167,
-  0x7169, 0x716b, 0x716a, 0x397c, 0x716c, 0x716d, 0x333c, 0x716e,
-  0x716f, 0x3f71, 0x7170, 0x7171, 0x7172, 0x7173, 0x3962, 0x7174,
-  0x7175, 0x7176, 0x7177, 0x7178, 0x4831, 0x717a, 0x4926, 0x717b,
-  0x7179, 0x717d, 0x717c, 0x717e, 0x7221, 0x7222, 0x7223, 0x7224,
-  0x7225, 0x7226, 0x7227, 0x7228, 0x7229, 0x722a, 0x722b, 0x722c,
-  0x722d, 0x722e, 0x5d35, 0x722f, 0x6478, 0x3534, 0x3321, 0x3a32,
-  0x7231, 0x7230, 0x4c25, 0x7233, 0x7234, 0x7232, 0x7235, 0x4b62,
-  0x7236, 0x357b, 0x4f25, 0x7237, 0x7239, 0x303e, 0x723a, 0x4a2b,
-  0x7238, 0x723b, 0x723c, 0x723d, 0x723e, 0x723f, 0x4b6e, 0x3b2d,
-  0x3a7a, 0x412f, 0x7240, 0x7243, 0x7241, 0x7244, 0x3871, 0x7242,
-  0x7245, 0x7246, 0x7247, 0x724b, 0x3b2a, 0x4264, 0x724c, 0x7249,
-  0x7248, 0x724a, 0x375f, 0x7250, 0x724f, 0x724e, 0x3033, 0x725a,
-  0x7256, 0x7257, 0x7253, 0x7259, 0x7255, 0x3362, 0x4f4c, 0x7258,
-  0x7254, 0x7252, 0x7251, 0x725c, 0x725f, 0x725e, 0x725d, 0x4949,
-  0x725b, 0x3073, 0x7260, 0x7262, 0x336f, 0x724d, 0x3137, 0x7264,
-  0x7263, 0x7261, 0x432d, 0x4b70, 0x4e5a, 0x7265, 0x7266, 0x7267,
-  0x7268, 0x7269, 0x443b, 0x726a, 0x4837, 0x726f, 0x726b, 0x726c,
-  0x4b31, 0x4c44, 0x4650, 0x7270, 0x7271, 0x463e, 0x726e, 0x726d,
-  0x322a, 0x7279, 0x7278, 0x3175, 0x7276, 0x7275, 0x7273, 0x337b,
-  0x7272, 0x3c32, 0x3229, 0x3963, 0x727c, 0x727b, 0x727a, 0x7277,
-  0x727d, 0x727e, 0x7325, 0x7324, 0x7326, 0x312d, 0x7321, 0x7322,
-  0x3974, 0x4c39, 0x7323, 0x4b32, 0x732b, 0x7327, 0x732c, 0x7329,
-  0x7328, 0x375c, 0x732d, 0x732e, 0x732f, 0x732a, 0x7274, 0x7330,
-  0x4461, 0x7334, 0x7335, 0x7333, 0x7332, 0x7338, 0x7331, 0x7336,
-  0x7337, 0x733a, 0x7339, 0x733c, 0x733d, 0x733e, 0x4f49, 0x733b,
-  0x426b, 0x3a6d, 0x733f, 0x7340, 0x7341, 0x7342, 0x7343, 0x3834,
-  0x7344, 0x7345, 0x3c2f, 0x7346, 0x7347, 0x7348, 0x7349, 0x734c,
-  0x734a, 0x4f3c, 0x734b, 0x4e6f, 0x734d, 0x4e5b, 0x734e, 0x477e,
-  0x734f, 0x7351, 0x7352, 0x7350, 0x396d, 0x4c4d, 0x4b63, 0x5677,
-  0x5d60, 0x4b7b, 0x322b, 0x7354, 0x3550, 0x7355, 0x7356, 0x7357,
-  0x3975, 0x7358, 0x6054, 0x4c5b, 0x4263, 0x7359, 0x735b, 0x735a,
-  0x735c, 0x735d, 0x735e, 0x735f, 0x7360, 0x7361, 0x7362, 0x7363,
-  0x7364, 0x7365, 0x7366, 0x7367, 0x7368, 0x4524, 0x385d, 0x736a,
-  0x414d, 0x736b, 0x736c, 0x4921, 0x736d, 0x736e, 0x6337, 0x6c5a,
-  0x706d, 0x736f, 0x7370, 0x7372, 0x7373, 0x7374, 0x4e70, 0x7371,
-  0x7375, 0x7376, 0x7378, 0x7377, 0x737a, 0x737b, 0x7379, 0x4e36,
-  0x737c, 0x737d, 0x6354, 0x737e, 0x212a, 0x2174, 0x2170, 0x2173,
-  0x2175, 0x214a, 0x214b, 0x2176, 0x215c, 0x2124, 0x2125, 0x213f,
-  0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337,
-  0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129,
-  0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347,
-  0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f,
-  0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357,
-  0x2358, 0x2359, 0x235a, 0x214e, 0x214f, 0x2130, 0x2132, 0x212e,
-  0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368,
-  0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370,
-  0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378,
-  0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2131, 0x216f,
-};
-
-static const Summary16 jisx0208_uni2indx_page00[16] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x1000 }, {    1, 0x0000 }, {    1, 0x0000 },
-  {    1, 0x0000 }, {    1, 0x0000 }, {    1, 0x118c }, {    6, 0x0053 },
-  {   10, 0x0000 }, {   10, 0x0080 }, {   11, 0x0000 }, {   11, 0x0080 },
-};
-static const Summary16 jisx0208_uni2indx_page03[22] = {
-  /* 0x0300 */
-  {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
-  {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 }, {   12, 0x0000 },
-  {   12, 0x0000 }, {   12, 0xfffe }, {   27, 0x03fb }, {   36, 0xfffe },
-  {   51, 0x03fb }, {   60, 0x0000 }, {   60, 0x0000 }, {   60, 0x0000 },
-  /* 0x0400 */
-  {   60, 0x0002 }, {   61, 0xffff }, {   77, 0xffff }, {   93, 0xffff },
-  {  109, 0xffff }, {  125, 0x0002 },
-};
-static const Summary16 jisx0208_uni2indx_page20[50] = {
-  /* 0x2000 */
-  {  126, 0x0000 }, {  126, 0x3361 }, {  133, 0x0063 }, {  137, 0x080d },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 }, {  141, 0x0000 },
-  /* 0x2100 */
-  {  141, 0x0008 }, {  142, 0x0000 }, {  142, 0x0800 }, {  143, 0x0000 },
-  {  143, 0x0000 }, {  143, 0x0000 }, {  143, 0x0000 }, {  143, 0x0000 },
-  {  143, 0x0000 }, {  143, 0x000f }, {  147, 0x0000 }, {  147, 0x0000 },
-  {  147, 0x0000 }, {  147, 0x0014 }, {  149, 0x0000 }, {  149, 0x0000 },
-  /* 0x2200 */
-  {  149, 0x098d }, {  155, 0x6404 }, {  159, 0x1f81 }, {  166, 0x2030 },
-  {  169, 0x0000 }, {  169, 0x0004 }, {  170, 0x0cc3 }, {  176, 0x0000 },
-  {  176, 0x00cc }, {  180, 0x0000 }, {  180, 0x0020 }, {  181, 0x0000 },
-  {  181, 0x0000 }, {  181, 0x0000 }, {  181, 0x0000 }, {  181, 0x0000 },
-  /* 0x2300 */
-  {  181, 0x0000 }, {  181, 0x0004 },
-};
-static const Summary16 jisx0208_uni2indx_page25[23] = {
-  /* 0x2500 */
-  {  182, 0x900f }, {  188, 0x3999 }, {  196, 0x9939 }, {  204, 0x9999 },
-  {  212, 0x0804 }, {  214, 0x0000 }, {  214, 0x0000 }, {  214, 0x0000 },
-  {  214, 0x0000 }, {  214, 0x0000 }, {  214, 0x0003 }, {  216, 0x300c },
-  {  220, 0xc8c0 }, {  225, 0x0000 }, {  225, 0x8000 }, {  226, 0x0000 },
-  /* 0x2600 */
-  {  226, 0x0060 }, {  228, 0x0000 }, {  228, 0x0000 }, {  228, 0x0000 },
-  {  228, 0x0005 }, {  230, 0x0000 }, {  230, 0xa400 },
-};
-static const Summary16 jisx0208_uni2indx_page30[16] = {
-  /* 0x3000 */
-  {  233, 0xffef }, {  248, 0x103f }, {  255, 0x0000 }, {  255, 0x0000 },
-  {  255, 0xfffe }, {  270, 0xffff }, {  286, 0xffff }, {  302, 0xffff },
-  {  318, 0xffff }, {  334, 0x780f }, {  342, 0xfffe }, {  357, 0xffff },
-  {  373, 0xffff }, {  389, 0xffff }, {  405, 0xffff }, {  421, 0x787f },
-};
-static const Summary16 jisx0208_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  432, 0x6f8b }, {  442, 0x43f3 }, {  451, 0x2442 }, {  455, 0x9b46 },
-  {  463, 0xe82c }, {  470, 0xe3e0 }, {  478, 0x0004 }, {  479, 0x400a },
-  {  482, 0x5f65 }, {  492, 0xdb36 }, {  502, 0x7977 }, {  513, 0x0449 },
-  {  517, 0xecd7 }, {  528, 0xe3f0 }, {  537, 0x6038 }, {  542, 0x08c5 },
-  /* 0x4f00 */
-  {  547, 0xe602 }, {  553, 0x3403 }, {  558, 0x8000 }, {  559, 0x3551 },
-  {  566, 0xe0c8 }, {  572, 0x7eab }, {  583, 0x8200 }, {  585, 0x9869 },
-  {  592, 0xa948 }, {  598, 0x2942 }, {  603, 0xe803 }, {  609, 0x8060 },
-  {  612, 0x441c }, {  617, 0xad93 }, {  626, 0xc03a }, {  632, 0x4568 },
-  /* 0x5000 */
-  {  638, 0xaa60 }, {  644, 0x8656 }, {  651, 0x3f7a }, {  662, 0x0240 },
-  {  664, 0x8388 }, {  669, 0x1461 }, {  674, 0x1020 }, {  676, 0x2174 },
-  {  682, 0x2021 }, {  685, 0x0702 }, {  689, 0x3000 }, {  691, 0x40bc },
-  {  697, 0xa624 }, {  703, 0x4462 }, {  708, 0x60a8 }, {  713, 0x0a20 },
-  /* 0x5100 */
-  {  716, 0x0217 }, {  721, 0x8574 }, {  728, 0x0402 }, {  730, 0x9c84 },
-  {  736, 0x7bfb }, {  749, 0x1415 }, {  754, 0x7f24 }, {  763, 0x11e2 },
-  {  769, 0xb665 }, {  778, 0x02ef }, {  786, 0x1f75 }, {  796, 0x20ff },
-  {  805, 0x3a70 }, {  812, 0x3840 }, {  816, 0x26c3 }, {  823, 0x6763 },
-  /* 0x5200 */
-  {  832, 0x4dd9 }, {  841, 0x2092 }, {  845, 0x46b0 }, {  851, 0x0fc9 },
-  {  859, 0xbc98 }, {  867, 0x4850 }, {  871, 0x8638 }, {  877, 0xa03f },
-  {  885, 0x2388 }, {  890, 0x8816 }, {  895, 0x3e09 }, {  902, 0x5232 },
-  {  908, 0x22aa }, {  914, 0xe3a4 }, {  922, 0x00dd }, {  928, 0xc72c },
-  /* 0x5300 */
-  {  936, 0xa166 }, {  943, 0x26e1 }, {  950, 0x840b }, {  955, 0x8f0a },
-  {  962, 0x27eb }, {  972, 0x559e }, {  981, 0xc241 }, {  986, 0x89bb },
-  {  995, 0x0014 }, {  997, 0x8540 }, { 1001, 0x6361 }, { 1008, 0x0849 },
-  { 1012, 0x7f0c }, { 1021, 0x8ad0 }, { 1027, 0xff3e }, { 1040, 0x05cf },
-  /* 0x5400 */
-  { 1048, 0xff1a }, { 1059, 0xa803 }, { 1064, 0x7a41 }, { 1071, 0x7b40 },
-  { 1078, 0x4745 }, { 1085, 0x8002 }, { 1087, 0x0500 }, { 1089, 0x38eb },
-  { 1098, 0xd851 }, { 1105, 0x0005 }, { 1107, 0x9934 }, { 1114, 0x710c },
-  { 1120, 0x0397 }, { 1127, 0x0100 }, { 1128, 0x6366 }, { 1136, 0x2404 },
-  /* 0x5500 */
-  { 1139, 0x80d0 }, { 1143, 0x0051 }, { 1146, 0xc000 }, { 1148, 0x430a },
-  { 1153, 0x9071 }, { 1159, 0x30c8 }, { 1164, 0x0008 }, { 1165, 0x5800 },
-  { 1168, 0x0e99 }, { 1175, 0xf700 }, { 1182, 0x5f80 }, { 1189, 0x0041 },
-  { 1191, 0x00b0 }, { 1194, 0x9410 }, { 1198, 0x0018 }, { 1200, 0x6280 },
-  /* 0x5600 */
-  { 1204, 0x0240 }, { 1206, 0x09d0 }, { 1211, 0x8200 }, { 1213, 0x0156 },
-  { 1218, 0x5004 }, { 1221, 0x0801 }, { 1223, 0x1d10 }, { 1228, 0x0510 },
-  { 1231, 0x84c1 }, { 1236, 0x0010 }, { 1237, 0x4025 }, { 1241, 0x1050 },
-  { 1244, 0x410f }, { 1250, 0x4d8a }, { 1257, 0x4009 }, { 1260, 0xa60d },
-  /* 0x5700 */
-  { 1267, 0xab19 }, { 1275, 0x914c }, { 1281, 0x21c0 }, { 1285, 0x0981 },
-  { 1289, 0xc485 }, { 1295, 0x0003 }, { 1297, 0x0652 }, { 1302, 0x8000 },
-  { 1303, 0x0b04 }, { 1307, 0x0008 }, { 1308, 0x041d }, { 1313, 0x0009 },
-  { 1315, 0x4849 }, { 1320, 0x905c }, { 1326, 0x0009 }, { 1328, 0x1690 },
-  /* 0x5800 */
-  { 1333, 0x0c65 }, { 1339, 0x2220 }, { 1342, 0x8412 }, { 1346, 0x2433 },
-  { 1352, 0x0c03 }, { 1356, 0x4796 }, { 1364, 0x0a04 }, { 1367, 0x4225 },
-  { 1372, 0x0028 }, { 1374, 0x9088 }, { 1378, 0x4900 }, { 1381, 0x4f08 },
-  { 1387, 0x14a2 }, { 1392, 0xd3aa }, { 1401, 0xd830 }, { 1407, 0x3e87 },
-  /* 0x5900 */
-  { 1416, 0x8604 }, { 1420, 0x1f61 }, { 1428, 0x7ea4 }, { 1437, 0x4186 },
-  { 1442, 0xc390 }, { 1448, 0x05b3 }, { 1455, 0x57a5 }, { 1464, 0x2118 },
-  { 1468, 0x241e }, { 1474, 0x2a48 }, { 1479, 0x1128 }, { 1483, 0x4a04 },
-  { 1487, 0x0a40 }, { 1490, 0x161b }, { 1497, 0x0d60 }, { 1502, 0x8840 },
-  /* 0x5a00 */
-  { 1505, 0x020a }, { 1508, 0x9502 }, { 1513, 0x8221 }, { 1517, 0x1060 },
-  { 1520, 0x0243 }, { 1524, 0x0400 }, { 1525, 0x1444 }, { 1529, 0x8000 },
-  { 1530, 0x0000 }, { 1530, 0x0c04 }, { 1533, 0x0000 }, { 1533, 0x7000 },
-  { 1536, 0x1a06 }, { 1541, 0x00c1 }, { 1544, 0x024a }, { 1548, 0x0c00 },
-  /* 0x5b00 */
-  { 1550, 0x1a00 }, { 1553, 0x0040 }, { 1554, 0x1404 }, { 1557, 0x4045 },
-  { 1561, 0x0029 }, { 1564, 0xbdb3 }, { 1575, 0x0a78 }, { 1581, 0x052b },
-  { 1587, 0xbba9 }, { 1597, 0xbfa0 }, { 1606, 0x407c }, { 1612, 0x8379 },
-  { 1620, 0x12fc }, { 1628, 0xe81d }, { 1636, 0x4bf6 }, { 1646, 0xc569 },
-  /* 0x5c00 */
-  { 1654, 0xeff6 }, { 1667, 0x044a }, { 1671, 0x2115 }, { 1676, 0xff02 },
-  { 1685, 0xed63 }, { 1695, 0x402b }, { 1700, 0xd033 }, { 1707, 0x0242 },
-  { 1710, 0x1000 }, { 1711, 0x0013 }, { 1714, 0x1b02 }, { 1719, 0x59ca },
-  { 1727, 0x00a0 }, { 1729, 0x0200 }, { 1730, 0xa703 }, { 1737, 0x2c41 },
-  /* 0x5d00 */
-  { 1742, 0x4880 }, { 1745, 0x8ff2 }, { 1755, 0x0204 }, { 1757, 0x0000 },
-  { 1757, 0x5800 }, { 1760, 0x1005 }, { 1763, 0x9200 }, { 1766, 0x0048 },
-  { 1768, 0x1894 }, { 1773, 0x2001 }, { 1775, 0x5004 }, { 1778, 0x3480 },
-  { 1782, 0x3200 }, { 1785, 0x684c }, { 1791, 0x49ea }, { 1799, 0x68be },
-  /* 0x5e00 */
-  { 1808, 0x184c }, { 1813, 0x2e42 }, { 1819, 0xa820 }, { 1823, 0x21c9 },
-  { 1829, 0x50b9 }, { 1836, 0x80b0 }, { 1840, 0x001e }, { 1844, 0xff7c },
-  { 1857, 0x849a }, { 1863, 0x14e0 }, { 1868, 0x28c1 }, { 1873, 0x01e0 },
-  { 1877, 0x870e }, { 1884, 0xac49 }, { 1891, 0x130f }, { 1898, 0xdddb },
-  /* 0x5f00 */
-  { 1910, 0xbe1a }, { 1919, 0x89fb }, { 1929, 0xa2e0 }, { 1935, 0x51a2 },
-  { 1941, 0x5502 }, { 1946, 0x32ca }, { 1953, 0x3e46 }, { 1961, 0x928b },
-  { 1968, 0x1dbf }, { 1979, 0x438f }, { 1987, 0x6703 }, { 1994, 0x3218 },
-  { 1999, 0x3028 }, { 2003, 0x33c0 }, { 2009, 0x0811 }, { 2012, 0xa923 },
-  /* 0x6000 */
-  { 2019, 0xc000 }, { 2021, 0x3a65 }, { 2029, 0x8fe3 }, { 2039, 0x0402 },
-  { 2041, 0x2c4e }, { 2048, 0x8625 }, { 2054, 0xbf3d }, { 2066, 0x00a1 },
-  { 2069, 0x3a1a }, { 2076, 0x8cd4 }, { 2083, 0x06c9 }, { 2089, 0x317c },
-  { 2097, 0x00e0 }, { 2100, 0x950a }, { 2106, 0x018b }, { 2111, 0x0edb },
-  /* 0x6100 */
-  { 2120, 0xe34b }, { 2129, 0x8c20 }, { 2133, 0x1182 }, { 2137, 0xf010 },
-  { 2142, 0x7d94 }, { 2151, 0xa728 }, { 2158, 0xc9ac }, { 2166, 0x40fb },
-  { 2174, 0x4484 }, { 2178, 0x0653 }, { 2184, 0x5a90 }, { 2190, 0x4444 },
-  { 2194, 0x3fc8 }, { 2203, 0x0001 }, { 2204, 0x0048 }, { 2206, 0xf5d4 },
-  /* 0x6200 */
-  { 2216, 0x7701 }, { 2223, 0xec57 }, { 2233, 0xc442 }, { 2238, 0x891d },
-  { 2245, 0x6b83 }, { 2253, 0x4928 }, { 2258, 0x4109 }, { 2262, 0xd242 },
-  { 2268, 0x061d }, { 2274, 0x59fe }, { 2285, 0x1800 }, { 2287, 0x3a22 },
-  { 2293, 0xb7e4 }, { 2303, 0x3b9f }, { 2314, 0xf003 }, { 2320, 0xc0ea },
-  /* 0x6300 */
-  { 2327, 0x1386 }, { 2333, 0x8202 }, { 2336, 0x8980 }, { 2340, 0xe400 },
-  { 2344, 0xb200 }, { 2348, 0x10a1 }, { 2352, 0x4b80 }, { 2357, 0x0cc4 },
-  { 2362, 0xd309 }, { 2369, 0x8944 }, { 2374, 0x1faf }, { 2385, 0x4834 },
-  { 2390, 0x8259 }, { 2396, 0x0c45 }, { 2401, 0x420a }, { 2405, 0x0450 },
-  /* 0x6400 */
-  { 2408, 0xa040 }, { 2411, 0x10c8 }, { 2415, 0x3140 }, { 2419, 0x4450 },
-  { 2423, 0x4004 }, { 2425, 0x0100 }, { 2426, 0x8280 }, { 2429, 0x0540 },
-  { 2432, 0x0108 }, { 2434, 0x442c }, { 2439, 0x6a30 }, { 2445, 0x1a05 },
-  { 2450, 0x20a6 }, { 2455, 0x0514 }, { 2459, 0x90cf }, { 2467, 0x6456 },
-  /* 0x6500 */
-  { 2474, 0x0021 }, { 2476, 0x3100 }, { 2479, 0x9c18 }, { 2485, 0xcbf0 },
-  { 2494, 0xa120 }, { 2498, 0x63e2 }, { 2506, 0x104c }, { 2510, 0x01b5 },
-  { 2516, 0x538c }, { 2523, 0x9a83 }, { 2530, 0xb8b2 }, { 2538, 0x3281 },
-  { 2543, 0x987a }, { 2551, 0x0a84 }, { 2555, 0x33e7 }, { 2565, 0x0c02 },
-  /* 0x6600 */
-  { 2568, 0xd4cc }, { 2576, 0x9018 }, { 2580, 0xa1a1 }, { 2586, 0x9070 },
-  { 2591, 0x8a1e }, { 2598, 0xe004 }, { 2602, 0xc3d4 }, { 2610, 0x0451 },
-  { 2614, 0x439a }, { 2621, 0x21c2 }, { 2626, 0x4844 }, { 2630, 0x5310 },
-  { 2635, 0x0292 }, { 2639, 0x3640 }, { 2644, 0x0241 }, { 2647, 0xf3bd },
-  /* 0x6700 */
-  { 2659, 0xab09 }, { 2666, 0xe8f0 }, { 2674, 0x7dc0 }, { 2682, 0xa5d2 },
-  { 2690, 0xc242 }, { 2695, 0xd24b }, { 2703, 0xa43f }, { 2712, 0xd0af },
-  { 2721, 0x1aa0 }, { 2726, 0x34a1 }, { 2732, 0x8247 }, { 2738, 0x03d8 },
-  { 2744, 0xc452 }, { 2750, 0x651b }, { 2758, 0xd294 }, { 2765, 0xc83a },
-  /* 0x6800 */
-  { 2772, 0x001c }, { 2775, 0x40c8 }, { 2779, 0x0e06 }, { 2784, 0x3314 },
-  { 2790, 0x614f }, { 2798, 0xb21b }, { 2806, 0x0088 }, { 2808, 0xc0d0 },
-  { 2813, 0xa02a }, { 2818, 0xa898 }, { 2824, 0xa1c5 }, { 2831, 0x166b },
-  { 2839, 0x2e50 }, { 2845, 0x85b4 }, { 2852, 0xc08b }, { 2858, 0x0604 },
-  /* 0x6900 */
-  { 2861, 0xf933 }, { 2871, 0x1e04 }, { 2876, 0x056e }, { 2883, 0xa251 },
-  { 2889, 0x0400 }, { 2890, 0x7638 }, { 2898, 0xec07 }, { 2906, 0x73b8 },
-  { 2915, 0x4406 }, { 2919, 0x1832 }, { 2924, 0x4081 }, { 2927, 0xc816 },
-  { 2933, 0x7c8a }, { 2941, 0x6309 }, { 2947, 0x2980 }, { 2951, 0xaa04 },
-  /* 0x6a00 */
-  { 2956, 0x1c24 }, { 2961, 0xca9c }, { 2969, 0x4e0e }, { 2976, 0x2760 },
-  { 2982, 0x0990 }, { 2986, 0x8300 }, { 2989, 0x0046 }, { 2992, 0x8104 },
-  { 2995, 0x6011 }, { 2999, 0x1081 }, { 3002, 0x540d }, { 3008, 0x0908 },
-  { 3011, 0x000e }, { 3014, 0xcc0a }, { 3020, 0x0500 }, { 3022, 0x0c00 },
-  /* 0x6b00 */
-  { 3024, 0x0430 }, { 3027, 0xa044 }, { 3031, 0x008b }, { 3035, 0x6784 },
-  { 3042, 0x5288 }, { 3047, 0x8a19 }, { 3053, 0x865e }, { 3061, 0x8b18 },
-  { 3067, 0x2e59 }, { 3075, 0x4160 }, { 3079, 0x8c10 }, { 3083, 0x9cbe },
-  { 3093, 0x6861 }, { 3099, 0x891c }, { 3105, 0x9800 }, { 3108, 0x0008 },
-  /* 0x6c00 */
-  { 3109, 0x8100 }, { 3111, 0x089a }, { 3116, 0x0018 }, { 3118, 0x4190 },
-  { 3122, 0x4007 }, { 3126, 0xe4a1 }, { 3133, 0x0505 }, { 3137, 0x640d },
-  { 3143, 0x310e }, { 3149, 0x0e4d }, { 3156, 0x4806 }, { 3160, 0xff0a },
-  { 3170, 0x1632 }, { 3176, 0x2aa8 }, { 3182, 0x852e }, { 3189, 0x000b },
-  /* 0x6d00 */
-  { 3192, 0x1800 }, { 3194, 0xca84 }, { 3200, 0x0e20 }, { 3204, 0x696c },
-  { 3212, 0x0032 }, { 3215, 0x1600 }, { 3218, 0x5658 }, { 3225, 0x0390 },
-  { 3229, 0x5120 }, { 3233, 0x1a28 }, { 3238, 0x8000 }, { 3239, 0x1124 },
-  { 3243, 0x18e1 }, { 3249, 0x4326 }, { 3255, 0x5d52 }, { 3263, 0x0eaa },
-  /* 0x6e00 */
-  { 3270, 0x0fa0 }, { 3276, 0xae28 }, { 3283, 0xfa7b }, { 3295, 0x4500 },
-  { 3298, 0x6408 }, { 3302, 0x8940 }, { 3306, 0xc880 }, { 3310, 0xc044 },
-  { 3314, 0x9005 }, { 3318, 0xb141 }, { 3324, 0x8424 }, { 3328, 0x24c4 },
-  { 3333, 0x1a34 }, { 3339, 0x603a }, { 3345, 0x9000 }, { 3347, 0xc194 },
-  /* 0x6f00 */
-  { 3353, 0x8246 }, { 3358, 0x003a }, { 3362, 0x180d }, { 3367, 0xc106 },
-  { 3372, 0x0022 }, { 3374, 0x9910 }, { 3379, 0xe050 }, { 3384, 0x1511 },
-  { 3389, 0x4057 }, { 3395, 0x0082 }, { 3397, 0x041a }, { 3401, 0x020a },
-  { 3404, 0x004f }, { 3409, 0x8930 }, { 3414, 0xd813 }, { 3421, 0x444a },
-  /* 0x7000 */
-  { 3426, 0x8a02 }, { 3430, 0xed22 }, { 3438, 0x10c0 }, { 3441, 0x4005 },
-  { 3444, 0x1000 }, { 3445, 0x0102 }, { 3447, 0x8808 }, { 3450, 0x3101 },
-  { 3454, 0x4600 }, { 3457, 0x0204 }, { 3459, 0xf000 }, { 3463, 0x0708 },
-  { 3467, 0x8900 }, { 3470, 0xa200 }, { 3473, 0x0000 }, { 3473, 0x2202 },
-  /* 0x7100 */
-  { 3476, 0x0200 }, { 3477, 0x1610 }, { 3481, 0x0042 }, { 3483, 0x1040 },
-  { 3485, 0x5200 }, { 3488, 0x0260 }, { 3491, 0x52f4 }, { 3499, 0x2000 },
-  { 3500, 0x8510 }, { 3504, 0x8230 }, { 3508, 0x1100 }, { 3510, 0x4202 },
-  { 3513, 0x4308 }, { 3517, 0x80b5 }, { 3523, 0x70e1 }, { 3530, 0x9a20 },
-  /* 0x7200 */
-  { 3535, 0x2040 }, { 3537, 0x0801 }, { 3539, 0x3500 }, { 3543, 0xfc65 },
-  { 3553, 0x19c1 }, { 3559, 0xab04 }, { 3565, 0x0286 }, { 3569, 0x6214 },
-  { 3574, 0x0087 }, { 3578, 0x0044 }, { 3580, 0x9085 }, { 3585, 0x0244 },
-  { 3588, 0x405c }, { 3593, 0x0a85 }, { 3598, 0x3207 }, { 3604, 0x3380 },
-  /* 0x7300 */
-  { 3609, 0x0400 }, { 3610, 0xb8c0 }, { 3616, 0xce20 }, { 3622, 0xc0d0 },
-  { 3627, 0xc030 }, { 3631, 0x0080 }, { 3632, 0x0508 }, { 3635, 0x0d25 },
-  { 3641, 0x0a90 }, { 3645, 0x0040 }, { 3646, 0x0200 }, { 3647, 0x080c },
-  { 3650, 0x6505 }, { 3656, 0x4000 }, { 3657, 0x6421 }, { 3662, 0x4102 },
-  /* 0x7400 */
-  { 3665, 0x0268 }, { 3669, 0x0000 }, { 3669, 0x0024 }, { 3671, 0x847c },
-  { 3678, 0x0002 }, { 3679, 0xde20 }, { 3686, 0x8619 }, { 3692, 0x4049 },
-  { 3696, 0x0808 }, { 3698, 0x4000 }, { 3699, 0x0084 }, { 3701, 0x2001 },
-  { 3703, 0x8400 }, { 3705, 0x1010 }, { 3707, 0x42cd }, { 3714, 0x01c7 },
-  /* 0x7500 */
-  { 3720, 0x7038 }, { 3726, 0xd52a }, { 3734, 0x1968 }, { 3740, 0x1d8f },
-  { 3749, 0xbe50 }, { 3757, 0x3e12 }, { 3764, 0x2ef5 }, { 3774, 0x81d9 },
-  { 3781, 0xcec4 }, { 3789, 0x2412 }, { 3793, 0x0828 }, { 3796, 0x732e },
-  { 3805, 0x24ac }, { 3811, 0x4b34 }, { 3818, 0x020c }, { 3821, 0xd41d },
-  /* 0x7600 */
-  { 3829, 0x2a02 }, { 3833, 0x8000 }, { 3834, 0x0097 }, { 3839, 0x0811 },
-  { 3842, 0x11c4 }, { 3847, 0x1144 }, { 3851, 0x1786 }, { 3858, 0x7d45 },
-  { 3867, 0x49d9 }, { 3875, 0x0649 }, { 3880, 0x4000 }, { 3881, 0x8791 },
-  { 3888, 0x254c }, { 3894, 0xd8c4 }, { 3901, 0x44ba }, { 3908, 0x4914 },
-  /* 0x7700 */
-  { 3913, 0x1b92 }, { 3920, 0xc800 }, { 3923, 0x0271 }, { 3928, 0x1580 },
-  { 3932, 0x0081 }, { 3934, 0x0c00 }, { 3936, 0x096a }, { 3942, 0xc200 },
-  { 3945, 0x4800 }, { 3947, 0x4002 }, { 3949, 0x3021 }, { 3953, 0xba49 },
-  { 3961, 0x2080 }, { 3963, 0x1c80 }, { 3967, 0xe2ac }, { 3975, 0x1008 },
-  /* 0x7800 */
-  { 3977, 0x1004 }, { 3979, 0x0034 }, { 3982, 0x00e1 }, { 3986, 0x8414 },
-  { 3990, 0x0020 }, { 3991, 0x2000 }, { 3992, 0x9800 }, { 3995, 0x1014 },
-  { 3998, 0x70c2 }, { 4004, 0x04aa }, { 4009, 0x8688 }, { 4014, 0x5420 },
-  { 4018, 0x0c62 }, { 4023, 0x0413 }, { 4027, 0x9180 }, { 4031, 0x2010 },
-  /* 0x7900 */
-  { 4033, 0x4082 }, { 4036, 0x0206 }, { 4039, 0x1c40 }, { 4043, 0x5400 },
-  { 4046, 0x0383 }, { 4051, 0xe4e9 }, { 4060, 0x2125 }, { 4065, 0x8480 },
-  { 4068, 0xe433 }, { 4076, 0x2000 }, { 4077, 0x44c0 }, { 4081, 0xe609 },
-  { 4088, 0x0a03 }, { 4092, 0x8126 }, { 4097, 0x12da }, { 4104, 0x0801 },
-  /* 0x7a00 */
-  { 4106, 0x6901 }, { 4111, 0x9790 }, { 4118, 0x4001 }, { 4120, 0xf886 },
-  { 4128, 0xe24d }, { 4136, 0x0081 }, { 4138, 0x0a0e }, { 4143, 0xa651 },
-  { 4150, 0x011a }, { 4154, 0x81ec }, { 4161, 0xc600 }, { 4165, 0x8441 },
-  { 4169, 0xadb8 }, { 4178, 0xb62c }, { 4186, 0xa46f }, { 4195, 0x8741 },
-  /* 0x7b00 */
-  { 4201, 0x8d54 }, { 4208, 0x4b02 }, { 4213, 0x1161 }, { 4218, 0x0268 },
-  { 4222, 0xbb60 }, { 4230, 0x2057 }, { 4236, 0x50a0 }, { 4240, 0x0433 },
-  { 4245, 0xa8c0 }, { 4250, 0xb7b4 }, { 4260, 0x2402 }, { 4263, 0x0112 },
-  { 4266, 0x9ad3 }, { 4275, 0x2000 }, { 4276, 0x2271 }, { 4282, 0x00c8 },
-  /* 0x7c00 */
-  { 4285, 0x2081 }, { 4288, 0x809e }, { 4294, 0x0c8a }, { 4299, 0xe180 },
-  { 4304, 0xb009 }, { 4309, 0x8151 }, { 4314, 0x1031 }, { 4318, 0x4028 },
-  { 4321, 0x2a0e }, { 4327, 0x89a5 }, { 4334, 0x69b6 }, { 4343, 0x620e },
-  { 4349, 0x4425 }, { 4354, 0xd144 }, { 4360, 0x8085 }, { 4364, 0x4d54 },
-  /* 0x7d00 */
-  { 4371, 0x2c75 }, { 4379, 0x1fb1 }, { 4388, 0xd807 }, { 4395, 0x862d },
-  { 4402, 0xd87c }, { 4411, 0x4841 }, { 4415, 0x414e }, { 4421, 0x226e },
-  { 4428, 0x8200 }, { 4430, 0x9e08 }, { 4436, 0xf80c }, { 4443, 0xed37 },
-  { 4454, 0x8c80 }, { 4458, 0x7526 }, { 4466, 0x9313 }, { 4473, 0x0814 },
-  /* 0x7e00 */
-  { 4476, 0x0e32 }, { 4482, 0xc804 }, { 4486, 0x484e }, { 4492, 0x6ea6 },
-  { 4501, 0x2c4a }, { 4507, 0x6670 }, { 4514, 0x26c0 }, { 4519, 0xba01 },
-  { 4525, 0xd30c }, { 4532, 0x185d }, { 4539, 0x0000 }, { 4539, 0x0000 },
-  { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 },
-  /* 0x7f00 */
-  { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0540 },
-  { 4542, 0x7020 }, { 4546, 0x8133 }, { 4552, 0x4f81 }, { 4559, 0x03a5 },
-  { 4565, 0x55ec }, { 4574, 0x6410 }, { 4578, 0xc318 }, { 4584, 0x2344 },
-  { 4589, 0x1462 }, { 4594, 0x0034 }, { 4597, 0x0a43 }, { 4602, 0x1a09 },
-  /* 0x8000 */
-  { 4607, 0x187b }, { 4615, 0x13a5 }, { 4622, 0x0102 }, { 4624, 0xa848 },
-  { 4629, 0x0440 }, { 4631, 0xc544 }, { 4637, 0x8106 }, { 4641, 0xe2dd },
-  { 4651, 0x1af0 }, { 4658, 0x2d48 }, { 4664, 0xb626 }, { 4672, 0x0416 },
-  { 4676, 0x5058 }, { 4681, 0x6e40 }, { 4687, 0x8032 }, { 4691, 0x3112 },
-  /* 0x8100 */
-  { 4696, 0x07e4 }, { 4703, 0x0c00 }, { 4705, 0x8208 }, { 4708, 0x420a },
-  { 4712, 0x4840 }, { 4715, 0x803b }, { 4721, 0x4860 }, { 4725, 0x8713 },
-  { 4732, 0x850d }, { 4738, 0x3428 }, { 4743, 0x0319 }, { 4748, 0xe529 },
-  { 4756, 0x2345 }, { 4762, 0x870a }, { 4768, 0x25a9 }, { 4775, 0x5c18 },
-  /* 0x8200 */
-  { 4781, 0x77a6 }, { 4791, 0xd9c5 }, { 4800, 0x5e00 }, { 4805, 0x03e8 },
-  { 4811, 0x0081 }, { 4813, 0xa700 }, { 4818, 0xcd54 }, { 4826, 0x41c6 },
-  { 4832, 0x2800 }, { 4834, 0xa204 }, { 4838, 0xb860 }, { 4844, 0x2b0a },
-  { 4850, 0x0020 }, { 4851, 0xda9e }, { 4861, 0x08ea }, { 4867, 0x0e1a },
-  /* 0x8300 */
-  { 4873, 0x427c }, { 4880, 0x11c0 }, { 4884, 0x8908 }, { 4888, 0x0376 },
-  { 4895, 0x8621 }, { 4900, 0x0105 }, { 4903, 0x0000 }, { 4903, 0x18a8 },
-  { 4908, 0x46a0 }, { 4913, 0xc448 }, { 4918, 0x0d05 }, { 4923, 0x2022 },
-  { 4926, 0x5422 }, { 4931, 0x9148 }, { 4936, 0x8a01 }, { 4940, 0x2897 },
-  /* 0x8400 */
-  { 4947, 0x7898 }, { 4954, 0x0008 }, { 4955, 0x1605 }, { 4960, 0x3122 },
-  { 4965, 0x4240 }, { 4968, 0x0880 }, { 4970, 0xfa4e }, { 4980, 0x06a2 },
-  { 4985, 0x0814 }, { 4988, 0x9211 }, { 4993, 0x2002 }, { 4995, 0x9b04 },
-  { 5001, 0x2e52 }, { 5008, 0x0643 }, { 5013, 0x5000 }, { 5015, 0x9010 },
-  /* 0x8500 */
-  { 5018, 0x0041 }, { 5020, 0x85ba }, { 5028, 0x3042 }, { 5032, 0x2020 },
-  { 5034, 0x4f0b }, { 5042, 0x05a0 }, { 5046, 0x2708 }, { 5051, 0x4080 },
-  { 5053, 0x0591 }, { 5058, 0x1a93 }, { 5065, 0xdf50 }, { 5074, 0x0600 },
-  { 5076, 0xa202 }, { 5080, 0x3021 }, { 5084, 0x0630 }, { 5088, 0x4e80 },
-  /* 0x8600 */
-  { 5093, 0x0cc4 }, { 5098, 0x04c8 }, { 5102, 0xa004 }, { 5105, 0x8001 },
-  { 5107, 0x6000 }, { 5109, 0xd431 }, { 5116, 0x0880 }, { 5118, 0x0a02 },
-  { 5121, 0x1c00 }, { 5124, 0x0028 }, { 5126, 0x8e18 }, { 5132, 0x0041 },
-  { 5134, 0x6ad0 }, { 5141, 0xca10 }, { 5146, 0xf210 }, { 5152, 0x4b00 },
-  /* 0x8700 */
-  { 5156, 0x274d }, { 5164, 0x1506 }, { 5169, 0x0220 }, { 5171, 0x8890 },
-  { 5175, 0x5a00 }, { 5179, 0x82a8 }, { 5184, 0x4549 }, { 5190, 0x8150 },
-  { 5194, 0x2004 }, { 5196, 0x8000 }, { 5197, 0x8804 }, { 5200, 0x2c08 },
-  { 5204, 0x08d1 }, { 5209, 0x0005 }, { 5211, 0x8001 }, { 5213, 0x4ac4 },
-  /* 0x8800 */
-  { 5219, 0xe020 }, { 5223, 0x0062 }, { 5226, 0x008e }, { 5230, 0x0a42 },
-  { 5234, 0x3055 }, { 5240, 0x6a8c }, { 5247, 0x090e }, { 5252, 0xe0a5 },
-  { 5259, 0x2906 }, { 5264, 0x42c4 }, { 5269, 0x4814 }, { 5273, 0x80b3 },
-  { 5279, 0x803e }, { 5285, 0xb330 }, { 5292, 0x0102 }, { 5294, 0x731c },
-  /* 0x8900 */
-  { 5302, 0x1494 }, { 5307, 0x600d }, { 5312, 0x0c20 }, { 5315, 0x0940 },
-  { 5318, 0x301a }, { 5323, 0xc040 }, { 5326, 0xa451 }, { 5332, 0xc094 },
-  { 5337, 0x8dca }, { 5345, 0x05c8 }, { 5350, 0x96c2 }, { 5357, 0xa40c },
-  { 5362, 0x0001 }, { 5363, 0x3404 }, { 5367, 0x00c8 }, { 5370, 0x0110 },
-  /* 0x8a00 */
-  { 5372, 0x550d }, { 5379, 0xa9c9 }, { 5387, 0x2428 }, { 5391, 0x1c5a },
-  { 5398, 0x0142 }, { 5401, 0x4837 }, { 5408, 0x7a4d }, { 5417, 0x100f },
-  { 5422, 0x32b4 }, { 5429, 0x452a }, { 5435, 0x317b }, { 5444, 0x9205 },
-  { 5449, 0xb894 }, { 5456, 0x5c44 }, { 5462, 0x68d7 }, { 5471, 0x458a },
-  /* 0x8b00 */
-  { 5477, 0x5097 }, { 5484, 0x2ed1 }, { 5492, 0x1943 }, { 5498, 0x4208 },
-  { 5501, 0xd202 }, { 5506, 0x9d40 }, { 5512, 0x9840 }, { 5516, 0x2097 },
-  { 5522, 0x5409 }, { 5527, 0x064d }, { 5533, 0x0000 }, { 5533, 0x0000 },
-  { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 },
-  /* 0x8c00 */
-  { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x8480 },
-  { 5536, 0x5542 }, { 5542, 0x0421 }, { 5545, 0x1c06 }, { 5550, 0x1700 },
-  { 5554, 0x7624 }, { 5561, 0x6110 }, { 5565, 0xff87 }, { 5577, 0xb9dd },
-  { 5588, 0x659f }, { 5598, 0x5c0a }, { 5604, 0x245d }, { 5611, 0x3c00 },
-  /* 0x8d00 */
-  { 5615, 0xadb0 }, { 5623, 0x0059 }, { 5627, 0x0000 }, { 5627, 0x0000 },
-  { 5627, 0x0000 }, { 5627, 0x0000 }, { 5627, 0x28d0 }, { 5632, 0x009b },
-  { 5637, 0x0422 }, { 5640, 0x0200 }, { 5641, 0x0108 }, { 5643, 0x4408 },
-  { 5646, 0x9804 }, { 5650, 0xac40 }, { 5655, 0x8d0a }, { 5661, 0x9028 },
-  /* 0x8e00 */
-  { 5665, 0x8700 }, { 5669, 0xe001 }, { 5673, 0x0400 }, { 5674, 0x0031 },
-  { 5677, 0x1794 }, { 5684, 0x8221 }, { 5688, 0x0019 }, { 5691, 0x1054 },
-  { 5695, 0x2cb2 }, { 5702, 0x021a }, { 5706, 0x9c02 }, { 5711, 0x4003 },
-  { 5714, 0x3d60 }, { 5721, 0x8804 }, { 5724, 0x080c }, { 5727, 0x7900 },
-  /* 0x8f00 */
-  { 5732, 0x1628 }, { 5737, 0xba3c }, { 5746, 0x8640 }, { 5750, 0xcb08 },
-  { 5756, 0x7274 }, { 5764, 0x9080 }, { 5767, 0x001e }, { 5771, 0x0000 },
-  { 5771, 0x0000 }, { 5771, 0xd800 }, { 5775, 0xe188 }, { 5781, 0x9c87 },
-  { 5789, 0x4034 }, { 5793, 0x0412 }, { 5796, 0xae64 }, { 5804, 0x2791 },
-  /* 0x9000 */
-  { 5811, 0xe86b }, { 5820, 0xe6fb }, { 5832, 0x408f }, { 5838, 0x5366 },
-  { 5846, 0xeea6 }, { 5856, 0x537f }, { 5867, 0xe32b }, { 5876, 0xb5e4 },
-  { 5885, 0x869f }, { 5894, 0x0002 }, { 5895, 0x8548 }, { 5900, 0x0122 },
-  { 5903, 0x4402 }, { 5906, 0x0800 }, { 5907, 0x2116 }, { 5912, 0x20a0 },
-  /* 0x9100 */
-  { 5915, 0x0004 }, { 5916, 0x0204 }, { 5918, 0x2000 }, { 5919, 0x0005 },
-  { 5921, 0x7e00 }, { 5927, 0x0154 }, { 5931, 0x162c }, { 5937, 0x01ac },
-  { 5942, 0x2a84 }, { 5947, 0x1085 }, { 5951, 0x8c14 }, { 5956, 0x0530 },
-  { 5960, 0xfbc3 }, { 5971, 0xb943 }, { 5979, 0x00ca }, { 5983, 0x9060 },
-  /* 0x9200 */
-  { 5987, 0x6000 }, { 5989, 0x4032 }, { 5993, 0x1200 }, { 5995, 0x8090 },
-  { 5998, 0x0b30 }, { 6003, 0x4c81 }, { 6008, 0x0054 }, { 6011, 0x4002 },
-  { 6013, 0x0029 }, { 6016, 0x1d6a }, { 6024, 0x2000 }, { 6025, 0x0280 },
-  { 6027, 0x8000 }, { 6028, 0x0004 }, { 6029, 0x2610 }, { 6033, 0x150c },
-  /* 0x9300 */
-  { 6038, 0x8040 }, { 6040, 0x0701 }, { 6044, 0xd94d }, { 6053, 0x0c24 },
-  { 6057, 0x2810 }, { 6060, 0x1850 }, { 6064, 0x5001 }, { 6067, 0x5020 },
-  { 6070, 0x1000 }, { 6071, 0x04d0 }, { 6075, 0x7080 }, { 6079, 0x0201 },
-  { 6081, 0x0108 }, { 6083, 0x21c3 }, { 6089, 0x0132 }, { 6093, 0x0000 },
-  /* 0x9400 */
-  { 6093, 0x0088 }, { 6095, 0x0719 }, { 6101, 0x0802 }, { 6103, 0x0560 },
-  { 6107, 0x0012 }, { 6109, 0x4c0e }, { 6115, 0x0405 }, { 6118, 0xf0a1 },
-  { 6125, 0x0002 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  /* 0x9500 */
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 },
-  { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0080 },
-  { 6127, 0x8e8d }, { 6135, 0x035a }, { 6141, 0x21bd }, { 6149, 0x5a04 },
-  { 6154, 0x3488 }, { 6159, 0x1170 }, { 6164, 0x0026 }, { 6167, 0x0000 },
-  /* 0x9600 */
-  { 6167, 0x0000 }, { 6167, 0x1000 }, { 6168, 0xc502 }, { 6173, 0x8804 },
-  { 6176, 0xb815 }, { 6183, 0xf801 }, { 6189, 0x147c }, { 6196, 0x25ed },
-  { 6205, 0xed60 }, { 6213, 0x1bb0 }, { 6220, 0x0589 }, { 6225, 0x1bd7 },
-  { 6235, 0x7af3 }, { 6246, 0x1a62 }, { 6252, 0x0d0c }, { 6257, 0x0ac5 },
-  /* 0x9700 */
-  { 6263, 0xe5d1 }, { 6272, 0x524a }, { 6278, 0x0490 }, { 6281, 0x6305 },
-  { 6287, 0x0354 }, { 6292, 0x5244 }, { 6297, 0x2b57 }, { 6306, 0x1612 },
-  { 6311, 0xa872 }, { 6318, 0x1101 }, { 6321, 0x2949 }, { 6327, 0x0018 },
-  { 6329, 0x0948 }, { 6333, 0x1008 }, { 6335, 0x6000 }, { 6337, 0x886c },
-  /* 0x9800 */
-  { 6343, 0x916e }, { 6351, 0x058f }, { 6358, 0x3012 }, { 6362, 0x3990 },
-  { 6368, 0xf840 }, { 6374, 0x4930 }, { 6379, 0x8880 }, { 6382, 0x001b },
-  { 6386, 0x0000 }, { 6386, 0x0000 }, { 6386, 0x8500 }, { 6389, 0x0042 },
-  { 6391, 0x0058 }, { 6394, 0x9800 }, { 6397, 0xea04 }, { 6403, 0x7014 },
-  /* 0x9900 */
-  { 6408, 0x1628 }, { 6413, 0x611d }, { 6420, 0x5113 }, { 6426, 0x6000 },
-  { 6428, 0x1a24 }, { 6433, 0x00a7 }, { 6438, 0x0000 }, { 6438, 0x0000 },
-  { 6438, 0x0000 }, { 6438, 0x03c0 }, { 6442, 0x7120 }, { 6447, 0x1018 },
-  { 6450, 0x0172 }, { 6455, 0xa927 }, { 6463, 0x6004 }, { 6466, 0x8906 },
-  /* 0x9a00 */
-  { 6471, 0xc022 }, { 6475, 0x020c }, { 6478, 0x0900 }, { 6480, 0x4081 },
-  { 6483, 0x202d }, { 6488, 0x8ca0 }, { 6493, 0x0e34 }, { 6499, 0x0000 },
-  { 6499, 0x0000 }, { 6499, 0x0000 }, { 6499, 0x2100 }, { 6501, 0x1101 },
-  { 6504, 0x8011 }, { 6507, 0xc11a }, { 6513, 0xec4c }, { 6521, 0x0892 },
-  /* 0x9b00 */
-  { 6525, 0x0040 }, { 6526, 0x8500 }, { 6529, 0xc7ac }, { 6538, 0x1806 },
-  { 6542, 0xe03e }, { 6550, 0x0512 }, { 6554, 0x8000 }, { 6555, 0x0010 },
-  { 6556, 0x4008 }, { 6558, 0x80ce }, { 6564, 0x6d01 }, { 6570, 0x0210 },
-  { 6572, 0x8641 }, { 6577, 0x0856 }, { 6582, 0x011e }, { 6587, 0x0027 },
-  /* 0x9c00 */
-  { 6591, 0x3750 }, { 6598, 0x083d }, { 6604, 0xe032 }, { 6610, 0x4e05 },
-  { 6616, 0x01c0 }, { 6619, 0x0484 }, { 6622, 0x0081 }, { 6624, 0x0140 },
-  { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 },
-  { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x1aa0 }, { 6631, 0x0059 },
-  /* 0x9d00 */
-  { 6635, 0x43c8 }, { 6641, 0x8824 }, { 6645, 0x1d48 }, { 6651, 0xc800 },
-  { 6654, 0x0152 }, { 6658, 0x7203 }, { 6664, 0x9013 }, { 6669, 0x0404 },
-  { 6671, 0x8280 }, { 6674, 0x0400 }, { 6675, 0x8a10 }, { 6679, 0x0d14 },
-  { 6684, 0x8056 }, { 6689, 0x0208 }, { 6691, 0xa040 }, { 6694, 0x2704 },
-  /* 0x9e00 */
-  { 6699, 0x0000 }, { 6699, 0x4c00 }, { 6702, 0x0000 }, { 6702, 0x0000 },
-  { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0xa320 },
-  { 6707, 0x1902 }, { 6711, 0xa0ae }, { 6718, 0x2660 }, { 6723, 0xdf00 },
-  { 6730, 0xf010 }, { 6735, 0x7b15 }, { 6744, 0x8121 }, { 6748, 0x3ad0 },
-  /* 0x9f00 */
-  { 6755, 0x4180 }, { 6758, 0x0028 }, { 6760, 0x1003 }, { 6763, 0x4800 },
-  { 6765, 0xcc00 }, { 6769, 0x8014 }, { 6772, 0x14cf }, { 6780, 0x00c4 },
-  { 6783, 0x2000 }, { 6784, 0x3020 }, { 6787, 0x0001 },
-};
-static const Summary16 jisx0208_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 6788, 0xdf7a }, { 6800, 0xffff }, { 6816, 0xffff }, { 6832, 0xefff },
-  { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 },
-  { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 },
-};
-
-static int
-jisx0208_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0100)
-      summary = &jisx0208_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x0300 && wc < 0x0460)
-      summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030];
-    else if (wc >= 0x2000 && wc < 0x2320)
-      summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x2500 && wc < 0x2670)
-      summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250];
-    else if (wc >= 0x3000 && wc < 0x3100)
-      summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = jisx0208_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/jisx0212.h
+++ /dev/null
@@ -1,2168 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/jisx0212.h,v 1.5 2003/05/27 22:26:31 tsi Exp $ */
-
-/*
- * JISX0212.1990-0
- */
-#ifdef NEED_TOWC
-
-static const unsigned short jisx0212_2uni_page22[81] = {
-  /* 0x22 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x02d8, 0x02c7,
-  0x00b8, 0x02d9, 0x02dd, 0x00af, 0x02db, 0x02da, 0x007e, 0x0384,
-  0x0385, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x00a1, 0x00a6, 0x00bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4,
-  0x2116,
-};
-static const unsigned short jisx0212_2uni_page26[188] = {
-  /* 0x26 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0xfffd, 0x038c, 0xfffd,
-  0x038e, 0x03ab, 0xfffd, 0x038f, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2,
-  0x03cd, 0x03cb, 0x03b0, 0x03ce, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408,
-  0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
-  0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f,
-};
-static const unsigned short jisx0212_2uni_page29[275] = {
-  /* 0x29 */
-  0x00c6, 0x0110, 0xfffd, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x0141,
-  0x013f, 0xfffd, 0x014a, 0x00d8, 0x0152, 0xfffd, 0x0166, 0x00de,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142,
-  0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2a */
-  0x00c1, 0x00c0, 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104,
-  0x00c5, 0x00c3, 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e,
-  0x00c9, 0x00c8, 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118,
-  0xfffd, 0x011c, 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc,
-  0x00cf, 0x00ce, 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134,
-  0x0136, 0x0139, 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1,
-  0x00d3, 0x00d2, 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5,
-  0x0154, 0x0158, 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164,
-  0x0162, 0x00da, 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170,
-  0x016a, 0x0172, 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5,
-  0x0174, 0x00dd, 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2b */
-  0x00e1, 0x00e0, 0x00e4, 0x00e2, 0x0103, 0x01ce, 0x0101, 0x0105,
-  0x00e5, 0x00e3, 0x0107, 0x0109, 0x010d, 0x00e7, 0x010b, 0x010f,
-  0x00e9, 0x00e8, 0x00eb, 0x00ea, 0x011b, 0x0117, 0x0113, 0x0119,
-  0x01f5, 0x011d, 0x011f, 0xfffd, 0x0121, 0x0125, 0x00ed, 0x00ec,
-  0x00ef, 0x00ee, 0x01d0, 0xfffd, 0x012b, 0x012f, 0x0129, 0x0135,
-  0x0137, 0x013a, 0x013e, 0x013c, 0x0144, 0x0148, 0x0146, 0x00f1,
-  0x00f3, 0x00f2, 0x00f6, 0x00f4, 0x01d2, 0x0151, 0x014d, 0x00f5,
-  0x0155, 0x0159, 0x0157, 0x015b, 0x015d, 0x0161, 0x015f, 0x0165,
-  0x0163, 0x00fa, 0x00f9, 0x00fc, 0x00fb, 0x016d, 0x01d4, 0x0171,
-  0x016b, 0x0173, 0x016f, 0x0169, 0x01d8, 0x01dc, 0x01da, 0x01d6,
-  0x0175, 0x00fd, 0x00ff, 0x0177, 0x017a, 0x017e, 0x017c,
-};
-static const unsigned short jisx0212_2uni_page30[5801] = {
-  /* 0x30 */
-  0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f, 0x4e23, 0x4e24,
-  0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35, 0x4e40, 0x4e41,
-  0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63, 0x4e68, 0x4e69,
-  0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96, 0x4e97, 0x4e9d,
-  0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb, 0x4ee0, 0x4ee1,
-  0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5, 0x4efd, 0x4efe,
-  0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12,
-  0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31, 0x4f60, 0x4f33,
-  0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40, 0x4f42, 0x4f48,
-  0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f58, 0x4f5f,
-  0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77, 0x4f78, 0x4f79,
-  0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84,
-  /* 0x31 */
-  0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93,
-  0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7,
-  0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5,
-  0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2,
-  0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff,
-  0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010,
-  0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022,
-  0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041,
-  0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052,
-  0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066,
-  0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083,
-  0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090,
-  /* 0x32 */
-  0x5092, 0x5093, 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f,
-  0x50a0, 0x50a1, 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba,
-  0x50bd, 0x50c0, 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0,
-  0x50d3, 0x50d4, 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4,
-  0x50e6, 0x50e8, 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe,
-  0x5103, 0x5106, 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e,
-  0x50f2, 0x5110, 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e,
-  0x5123, 0x5127, 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133,
-  0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153,
-  0x5155, 0x5157, 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183,
-  0x5184, 0x518b, 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad,
-  0x51b8, 0x51ba, 0x51bc, 0x51be, 0x51bf, 0x51c2,
-  /* 0x33 */
-  0x51c8, 0x51cf, 0x51d1, 0x51d2, 0x51d3, 0x51d5, 0x51d8, 0x51de,
-  0x51e2, 0x51e5, 0x51ee, 0x51f2, 0x51f3, 0x51f4, 0x51f7, 0x5201,
-  0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222,
-  0x5228, 0x5231, 0x5232, 0x5235, 0x523c, 0x5245, 0x5249, 0x5255,
-  0x5257, 0x5258, 0x525a, 0x525c, 0x525f, 0x5260, 0x5261, 0x5266,
-  0x526e, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, 0x528a,
-  0x528c, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529a, 0x529c,
-  0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52af, 0x52b0, 0x52b6, 0x52b7,
-  0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52c0, 0x52c4, 0x52c6, 0x52c8,
-  0x52cc, 0x52cf, 0x52d1, 0x52d4, 0x52d6, 0x52db, 0x52dc, 0x52e1,
-  0x52e5, 0x52e8, 0x52e9, 0x52ea, 0x52ec, 0x52f0, 0x52f1, 0x52f4,
-  0x52f6, 0x52f7, 0x5300, 0x5303, 0x530a, 0x530b,
-  /* 0x34 */
-  0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f,
-  0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x5330,
-  0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342, 0x534c, 0x534b,
-  0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c, 0x536d, 0x5372,
-  0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e, 0x5393, 0x5394,
-  0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab, 0x53af, 0x53b2,
-  0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd, 0x53c0, 0x53c5,
-  0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd, 0x53de, 0x53e0,
-  0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a, 0x5421, 0x5427,
-  0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444,
-  0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464, 0x5466, 0x5467,
-  0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f,
-  /* 0x35 */
-  0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495,
-  0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa,
-  0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf,
-  0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef,
-  0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508,
-  0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532,
-  0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549,
-  0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e,
-  0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586,
-  0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597,
-  0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6,
-  0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2,
-  /* 0x36 */
-  0x55d3, 0x55d7, 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6,
-  0x55ff, 0x5605, 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610,
-  0x5611, 0x5612, 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637,
-  0x5639, 0x563b, 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643,
-  0x5644, 0x5646, 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e,
-  0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f,
-  0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c,
-  0x5695, 0x5699, 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7,
-  0x56a8, 0x56a9, 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7,
-  0x56be, 0x56c5, 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc,
-  0x56cd, 0x56d9, 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5,
-  0x56e6, 0x56e7, 0x56e8, 0x56f1, 0x56eb, 0x56ed,
-  /* 0x37 */
-  0x56f6, 0x56f7, 0x5701, 0x5702, 0x5707, 0x570a, 0x570c, 0x5711,
-  0x5715, 0x571a, 0x571b, 0x571d, 0x5720, 0x5722, 0x5723, 0x5724,
-  0x5725, 0x5729, 0x572a, 0x572c, 0x572e, 0x572f, 0x5733, 0x5734,
-  0x573d, 0x573e, 0x573f, 0x5745, 0x5746, 0x574c, 0x574d, 0x5752,
-  0x5762, 0x5765, 0x5767, 0x5768, 0x576b, 0x576d, 0x576e, 0x576f,
-  0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, 0x577a,
-  0x577b, 0x577c, 0x577e, 0x5781, 0x5783, 0x578c, 0x5794, 0x5797,
-  0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a1, 0x5795,
-  0x57a7, 0x57a8, 0x57a9, 0x57ac, 0x57b8, 0x57bd, 0x57c7, 0x57c8,
-  0x57cc, 0x57cf, 0x57d5, 0x57dd, 0x57de, 0x57e4, 0x57e6, 0x57e7,
-  0x57e9, 0x57ed, 0x57f0, 0x57f5, 0x57f6, 0x57f8, 0x57fd, 0x57fe,
-  0x57ff, 0x5803, 0x5804, 0x5808, 0x5809, 0x57e1,
-  /* 0x38 */
-  0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820, 0x5826, 0x5827,
-  0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c, 0x584d, 0x584f,
-  0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878,
-  0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, 0x588a,
-  0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896, 0x589d, 0x58a0,
-  0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2, 0x58c4, 0x58bc,
-  0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2, 0x58d4, 0x58d6,
-  0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3, 0x5905, 0x5906,
-  0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641, 0x591d, 0x5921,
-  0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933, 0x5935, 0x5936,
-  0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595b, 0x595d,
-  0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d,
-  /* 0x39 */
-  0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b,
-  0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7,
-  0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc,
-  0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd,
-  0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1,
-  0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e,
-  0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a,
-  0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50,
-  0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a,
-  0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c,
-  0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2,
-  0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf,
-  /* 0x3a */
-  0x5ac4, 0x5ac6, 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5,
-  0x5aea, 0x5aee, 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08,
-  0x5b17, 0x5b34, 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d,
-  0x5b38, 0x5b41, 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68,
-  0x5b6e, 0x5b6f, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84,
-  0x5b86, 0x5b8a, 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96,
-  0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7,
-  0x5bba, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7,
-  0x5bd8, 0x5bd9, 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd,
-  0x5c0c, 0x5c17, 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b,
-  0x5c2c, 0x5c2e, 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a,
-  0x5c5c, 0x5c62, 0x5c63, 0x5c67, 0x5c68, 0x5c69,
-  /* 0x3b */
-  0x5c6d, 0x5c70, 0x5c74, 0x5c75, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d,
-  0x5c87, 0x5c88, 0x5c8a, 0x5c8f, 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0,
-  0x5ca2, 0x5ca3, 0x5ca6, 0x5caa, 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba,
-  0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd, 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2,
-  0x5cf4, 0x5d01, 0x5d06, 0x5d0d, 0x5d12, 0x5d2b, 0x5d23, 0x5d24,
-  0x5d26, 0x5d27, 0x5d31, 0x5d34, 0x5d39, 0x5d3d, 0x5d3f, 0x5d42,
-  0x5d43, 0x5d46, 0x5d48, 0x5d55, 0x5d51, 0x5d59, 0x5d4a, 0x5d5f,
-  0x5d60, 0x5d61, 0x5d62, 0x5d64, 0x5d6a, 0x5d6d, 0x5d70, 0x5d79,
-  0x5d7a, 0x5d7e, 0x5d7f, 0x5d81, 0x5d83, 0x5d88, 0x5d8a, 0x5d92,
-  0x5d93, 0x5d94, 0x5d95, 0x5d99, 0x5d9b, 0x5d9f, 0x5da0, 0x5da7,
-  0x5dab, 0x5db0, 0x5db4, 0x5db8, 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb,
-  0x5dd0, 0x5dce, 0x5dd8, 0x5dd9, 0x5de0, 0x5de4,
-  /* 0x3c */
-  0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d, 0x5e12, 0x5e14,
-  0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28, 0x5e32, 0x5e35,
-  0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56, 0x5e58, 0x5e5b,
-  0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e,
-  0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4, 0x5ea5, 0x5ea8,
-  0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe, 0x5ebf, 0x5ec6,
-  0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4, 0x5ed5, 0x5edc,
-  0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07, 0x5f08, 0x5f0e,
-  0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28,
-  0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36, 0x5f3b, 0x5f3d,
-  0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d, 0x5f50, 0x5f54,
-  0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67,
-  /* 0x3d */
-  0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e,
-  0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7,
-  0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4,
-  0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3,
-  0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec,
-  0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc,
-  0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a,
-  0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048,
-  0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061,
-  0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a,
-  0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2,
-  0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7,
-  /* 0x3e */
-  0x60bb, 0x60be, 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb,
-  0x60ce, 0x60cf, 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de,
-  0x60e2, 0x60e5, 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102,
-  0x6107, 0x610a, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114,
-  0x6116, 0x6117, 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b,
-  0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145,
-  0x6146, 0x6149, 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b,
-  0x617c, 0x617f, 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d,
-  0x6192, 0x6193, 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0,
-  0x61a5, 0x61a8, 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0,
-  0x61c1, 0x61c2, 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de,
-  0x61df, 0x61e1, 0x61e2, 0x61e7, 0x61e9, 0x61e5,
-  /* 0x3f */
-  0x61ec, 0x61ed, 0x61ef, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213,
-  0x6215, 0x621c, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622b,
-  0x6239, 0x623d, 0x6242, 0x6243, 0x6244, 0x6246, 0x624c, 0x6250,
-  0x6251, 0x6252, 0x6254, 0x6256, 0x625a, 0x625c, 0x6264, 0x626d,
-  0x626f, 0x6273, 0x627a, 0x627d, 0x628d, 0x628e, 0x628f, 0x6290,
-  0x62a6, 0x62a8, 0x62b3, 0x62b6, 0x62b7, 0x62ba, 0x62be, 0x62bf,
-  0x62c4, 0x62ce, 0x62d5, 0x62d6, 0x62da, 0x62ea, 0x62f2, 0x62f4,
-  0x62fc, 0x62fd, 0x6303, 0x6304, 0x630a, 0x630b, 0x630d, 0x6310,
-  0x6313, 0x6316, 0x6318, 0x6329, 0x632a, 0x632d, 0x6335, 0x6336,
-  0x6339, 0x633c, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634a,
-  0x634b, 0x634e, 0x6352, 0x6353, 0x6354, 0x6358, 0x635b, 0x6365,
-  0x6366, 0x636c, 0x636d, 0x6371, 0x6374, 0x6375,
-  /* 0x40 */
-  0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384, 0x6387, 0x638a,
-  0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e, 0x63a4, 0x63a6,
-  0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5, 0x63c8, 0x63ce,
-  0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0, 0x63e5, 0x63ea,
-  0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9, 0x6409, 0x640a,
-  0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420, 0x6422, 0x6424,
-  0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435, 0x643d, 0x643f,
-  0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454, 0x645a, 0x645b,
-  0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463, 0x646d, 0x6473,
-  0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f, 0x6490, 0x6491,
-  0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1, 0x64a3, 0x64a6,
-  0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf,
-  /* 0x41 */
-  0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1,
-  0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0,
-  0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509,
-  0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e,
-  0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c,
-  0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f,
-  0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a,
-  0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae,
-  0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce,
-  0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4,
-  0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609,
-  0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d,
-  /* 0x42 */
-  0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a,
-  0x662b, 0x662c, 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637,
-  0x6640, 0x6645, 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657,
-  0x6658, 0x6659, 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a,
-  0x666b, 0x666c, 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678,
-  0x6679, 0x667b, 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690,
-  0x6692, 0x6699, 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4,
-  0x66ad, 0x66b1, 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2,
-  0x66c3, 0x66c8, 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df,
-  0x66e8, 0x66eb, 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e,
-  0x6713, 0x6719, 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745,
-  0x6747, 0x6748, 0x674c, 0x6754, 0x6755, 0x675d,
-  /* 0x43 */
-  0x6766, 0x676c, 0x676e, 0x6774, 0x6776, 0x677b, 0x6781, 0x6784,
-  0x678e, 0x678f, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679b,
-  0x67b0, 0x67b1, 0x67b2, 0x67b5, 0x67bb, 0x67bc, 0x67bd, 0x67f9,
-  0x67c0, 0x67c2, 0x67c3, 0x67c5, 0x67c8, 0x67c9, 0x67d2, 0x67d7,
-  0x67d9, 0x67dc, 0x67e1, 0x67e6, 0x67f0, 0x67f2, 0x67f6, 0x67f7,
-  0x6852, 0x6814, 0x6819, 0x681d, 0x681f, 0x6828, 0x6827, 0x682c,
-  0x682d, 0x682f, 0x6830, 0x6831, 0x6833, 0x683b, 0x683f, 0x6844,
-  0x6845, 0x684a, 0x684c, 0x6855, 0x6857, 0x6858, 0x685b, 0x686b,
-  0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687a,
-  0x687b, 0x687c, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898,
-  0x689a, 0x689c, 0x68a1, 0x68a3, 0x68a5, 0x68a9, 0x68aa, 0x68ae,
-  0x68b2, 0x68bb, 0x68c5, 0x68c8, 0x68cc, 0x68cf,
-  /* 0x44 */
-  0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc, 0x68dd, 0x68e5,
-  0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0, 0x68f1, 0x68f5,
-  0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909, 0x690a, 0x6910,
-  0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, 0x6938,
-  0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957, 0x695b, 0x6963,
-  0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c, 0x6970, 0x6971,
-  0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d, 0x6992, 0x6996,
-  0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab, 0x69ad, 0x69af,
-  0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8, 0x69d1, 0x69d6,
-  0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1, 0x69f3, 0x69f5,
-  0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11, 0x6a15, 0x6a1a,
-  0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32,
-  /* 0x45 */
-  0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49,
-  0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b,
-  0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83,
-  0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e,
-  0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd,
-  0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4,
-  0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0,
-  0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07,
-  0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24,
-  0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f,
-  0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60,
-  0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d,
-  /* 0x46 */
-  0x6b7e, 0x6b82, 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2,
-  0x6ba3, 0x6ba8, 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8,
-  0x6bb9, 0x6bbd, 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6,
-  0x6bda, 0x6be1, 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7,
-  0x6bf9, 0x6bff, 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e,
-  0x6c10, 0x6c12, 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c,
-  0x6c2e, 0x6c33, 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a,
-  0x6c4b, 0x6c4d, 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c,
-  0x6c6b, 0x6c6d, 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b,
-  0x6c85, 0x6c86, 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98,
-  0x6c9c, 0x6c9f, 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd,
-  0x6ccf, 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6,
-  /* 0x47 */
-  0x6cda, 0x6cdc, 0x6ce0, 0x6ce7, 0x6ce9, 0x6ceb, 0x6cec, 0x6cee,
-  0x6cf2, 0x6cf4, 0x6d04, 0x6d07, 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11,
-  0x6d13, 0x6d1a, 0x6d26, 0x6d27, 0x6d28, 0x6c67, 0x6d2e, 0x6d2f,
-  0x6d31, 0x6d39, 0x6d3c, 0x6d3f, 0x6d57, 0x6d5e, 0x6d5f, 0x6d61,
-  0x6d65, 0x6d67, 0x6d6f, 0x6d70, 0x6d7c, 0x6d82, 0x6d87, 0x6d91,
-  0x6d92, 0x6d94, 0x6d96, 0x6d97, 0x6d98, 0x6daa, 0x6dac, 0x6db4,
-  0x6db7, 0x6db9, 0x6dbd, 0x6dbf, 0x6dc4, 0x6dc8, 0x6dca, 0x6dce,
-  0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd, 0x6ddf, 0x6de0, 0x6de2, 0x6de5,
-  0x6de9, 0x6def, 0x6df0, 0x6df4, 0x6df6, 0x6dfc, 0x6e00, 0x6e04,
-  0x6e1e, 0x6e22, 0x6e27, 0x6e32, 0x6e36, 0x6e39, 0x6e3b, 0x6e3c,
-  0x6e44, 0x6e45, 0x6e48, 0x6e49, 0x6e4b, 0x6e4f, 0x6e51, 0x6e52,
-  0x6e53, 0x6e54, 0x6e57, 0x6e5c, 0x6e5d, 0x6e5e,
-  /* 0x48 */
-  0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d, 0x6e8d, 0x6e93,
-  0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1, 0x6eb3, 0x6ebb,
-  0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8, 0x6eca, 0x6ecd,
-  0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9, 0x6efb, 0x6efd,
-  0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16, 0x6f18, 0x6f1a,
-  0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30, 0x6f33, 0x6f36,
-  0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52, 0x6f53, 0x6f57,
-  0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62, 0x6f68, 0x6f6c,
-  0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b, 0x6f8c, 0x6f8d,
-  0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a, 0x6f9f, 0x6fa0,
-  0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf, 0x6fb0, 0x6fb5,
-  0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca,
-  /* 0x49 */
-  0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc,
-  0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020,
-  0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044,
-  0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e,
-  0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e,
-  0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098,
-  0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca,
-  0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4,
-  0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c,
-  0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131,
-  0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150,
-  0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160,
-  /* 0x4a */
-  0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a,
-  0x719b, 0x71a0, 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba,
-  0x71bf, 0x71c0, 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6,
-  0x71d9, 0x71da, 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208,
-  0x7209, 0x7213, 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b,
-  0x722f, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245,
-  0x724e, 0x724f, 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c,
-  0x725e, 0x7260, 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271,
-  0x7277, 0x7278, 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d,
-  0x728e, 0x7293, 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4,
-  0x72be, 0x72c1, 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8,
-  0x72df, 0x72e5, 0x72f3, 0x72f4, 0x72fa, 0x72fb,
-  /* 0x4b */
-  0x72fe, 0x7302, 0x7304, 0x7305, 0x7307, 0x730b, 0x730d, 0x7312,
-  0x7313, 0x7318, 0x7319, 0x731e, 0x7322, 0x7324, 0x7327, 0x7328,
-  0x732c, 0x7331, 0x7332, 0x7335, 0x733a, 0x733b, 0x733d, 0x7343,
-  0x734d, 0x7350, 0x7352, 0x7356, 0x7358, 0x735d, 0x735e, 0x735f,
-  0x7360, 0x7366, 0x7367, 0x7369, 0x736b, 0x736c, 0x736e, 0x736f,
-  0x7371, 0x7377, 0x7379, 0x737c, 0x7380, 0x7381, 0x7383, 0x7385,
-  0x7386, 0x738e, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, 0x739c,
-  0x739e, 0x739f, 0x73a0, 0x73a2, 0x73a5, 0x73a6, 0x73aa, 0x73ab,
-  0x73ad, 0x73b5, 0x73b7, 0x73b9, 0x73bc, 0x73bd, 0x73bf, 0x73c5,
-  0x73c6, 0x73c9, 0x73cb, 0x73cc, 0x73cf, 0x73d2, 0x73d3, 0x73d6,
-  0x73d9, 0x73dd, 0x73e1, 0x73e3, 0x73e6, 0x73e7, 0x73e9, 0x73f4,
-  0x73f5, 0x73f7, 0x73f9, 0x73fa, 0x73fb, 0x73fd,
-  /* 0x4c */
-  0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a, 0x7411, 0x741a,
-  0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a, 0x742b, 0x742c,
-  0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443,
-  0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451, 0x7452, 0x7457,
-  0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b, 0x746d, 0x746e,
-  0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, 0x7489,
-  0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749a, 0x749c,
-  0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8, 0x74a9, 0x74aa,
-  0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5, 0x74b9, 0x74bb,
-  0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3, 0x74d8, 0x74da,
-  0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea, 0x74eb, 0x74ef,
-  0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506,
-  /* 0x4d */
-  0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529,
-  0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540,
-  0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e,
-  0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c,
-  0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595,
-  0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0,
-  0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc,
-  0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef,
-  0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608,
-  0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619,
-  0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629,
-  0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639,
-  /* 0x4e */
-  0x763a, 0x763c, 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645,
-  0x7649, 0x764b, 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d,
-  0x766e, 0x766f, 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d,
-  0x7695, 0x769b, 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3,
-  0x76a4, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd,
-  0x76c1, 0x76c5, 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9,
-  0x76e0, 0x76e6, 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9,
-  0x76fc, 0x7700, 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715,
-  0x7717, 0x7719, 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e,
-  0x772f, 0x7734, 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742,
-  0x7745, 0x7746, 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756,
-  0x7757, 0x775c, 0x775e, 0x775f, 0x7760, 0x7762,
-  /* 0x4f */
-  0x7764, 0x7767, 0x776a, 0x776c, 0x7770, 0x7772, 0x7773, 0x7774,
-  0x777a, 0x777d, 0x7780, 0x7784, 0x778c, 0x778d, 0x7794, 0x7795,
-  0x7796, 0x779a, 0x779f, 0x77a2, 0x77a7, 0x77aa, 0x77ae, 0x77af,
-  0x77b1, 0x77b5, 0x77be, 0x77c3, 0x77c9, 0x77d1, 0x77d2, 0x77d5,
-  0x77d9, 0x77de, 0x77df, 0x77e0, 0x77e4, 0x77e6, 0x77ea, 0x77ec,
-  0x77f0, 0x77f1, 0x77f4, 0x77f8, 0x77fb, 0x7805, 0x7806, 0x7809,
-  0x780d, 0x780e, 0x7811, 0x781d, 0x7821, 0x7822, 0x7823, 0x782d,
-  0x782e, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, 0x7848,
-  0x784c, 0x784e, 0x7852, 0x785c, 0x785e, 0x7860, 0x7861, 0x7863,
-  0x7864, 0x7868, 0x786a, 0x786e, 0x787a, 0x787e, 0x788a, 0x788f,
-  0x7894, 0x7898, 0x78a1, 0x789d, 0x789e, 0x789f, 0x78a4, 0x78a8,
-  0x78ac, 0x78ad, 0x78b0, 0x78b1, 0x78b2, 0x78b3,
-  /* 0x50 */
-  0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9, 0x78cc, 0x78ce,
-  0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db, 0x78df, 0x78e0,
-  0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900, 0x78f6, 0x78f7,
-  0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910, 0x791a, 0x791c,
-  0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929, 0x792d, 0x7931,
-  0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944, 0x7945, 0x7946,
-  0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958, 0x795b, 0x795c,
-  0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b, 0x797c, 0x797e,
-  0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998,
-  0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab, 0x79af, 0x79b1,
-  0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7, 0x79c8, 0x79ca,
-  0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de,
-  /* 0x51 */
-  0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8,
-  0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11,
-  0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f,
-  0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45,
-  0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d,
-  0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78,
-  0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90,
-  0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5,
-  0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1,
-  0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb,
-  0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29,
-  0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30,
-  /* 0x52 */
-  0x7b31, 0x7b34, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e,
-  0x7b55, 0x7b60, 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f,
-  0x7b72, 0x7b73, 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91,
-  0x7b96, 0x7b9b, 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0,
-  0x7bb2, 0x7bb5, 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2,
-  0x7bc5, 0x7bc8, 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda,
-  0x7bdb, 0x7be8, 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9,
-  0x7bfa, 0x7bfc, 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06,
-  0x7c09, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20,
-  0x7c25, 0x7c26, 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36,
-  0x7c39, 0x7c3a, 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53,
-  0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e,
-  /* 0x53 */
-  0x7c61, 0x7c63, 0x7c67, 0x7c69, 0x7c6d, 0x7c6e, 0x7c70, 0x7c72,
-  0x7c79, 0x7c7c, 0x7c7d, 0x7c86, 0x7c87, 0x7c8f, 0x7c94, 0x7c9e,
-  0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6, 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc,
-  0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8, 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3,
-  0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9, 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9,
-  0x7ceb, 0x7cf5, 0x7d03, 0x7d07, 0x7d08, 0x7d09, 0x7d0f, 0x7d11,
-  0x7d12, 0x7d13, 0x7d16, 0x7d1d, 0x7d1e, 0x7d23, 0x7d26, 0x7d2a,
-  0x7d2d, 0x7d31, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d40, 0x7d41, 0x7d47,
-  0x7d48, 0x7d4d, 0x7d51, 0x7d53, 0x7d57, 0x7d59, 0x7d5a, 0x7d5c,
-  0x7d5d, 0x7d65, 0x7d67, 0x7d6a, 0x7d70, 0x7d78, 0x7d7a, 0x7d7b,
-  0x7d7f, 0x7d81, 0x7d82, 0x7d83, 0x7d85, 0x7d86, 0x7d88, 0x7d8b,
-  0x7d8c, 0x7d8d, 0x7d91, 0x7d96, 0x7d97, 0x7d9d,
-  /* 0x54 */
-  0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6, 0x7db7, 0x7db9,
-  0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc, 0x7dcd, 0x7dce,
-  0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6, 0x7dea, 0x7deb,
-  0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa, 0x7e08, 0x7e10,
-  0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20, 0x7e27, 0x7e28,
-  0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f, 0x7e44, 0x7e45,
-  0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f, 0x7e61, 0x7e62,
-  0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78, 0x7e7e, 0x7e81,
-  0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95, 0x7e98, 0x7e9a,
-  0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f43,
-  0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b, 0x7f5c, 0x7f5d,
-  0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d,
-  /* 0x55 */
-  0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f,
-  0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6,
-  0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8,
-  0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec,
-  0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007,
-  0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014,
-  0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c,
-  0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c,
-  0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071,
-  0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7,
-  0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4,
-  0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee,
-  /* 0x56 */
-  0x80f0, 0x80f2, 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103,
-  0x810b, 0x8116, 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124,
-  0x8127, 0x812c, 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147,
-  0x814a, 0x814c, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168,
-  0x8169, 0x816d, 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185,
-  0x8186, 0x818b, 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2,
-  0x81ae, 0x81b2, 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca,
-  0x81ce, 0x81cf, 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1,
-  0x81e4, 0x81eb, 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6,
-  0x81f8, 0x81f9, 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213,
-  0x8214, 0x8219, 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232,
-  0x8234, 0x823a, 0x8243, 0x8244, 0x8245, 0x8246,
-  /* 0x57 */
-  0x824b, 0x824e, 0x824f, 0x8251, 0x8256, 0x825c, 0x8260, 0x8263,
-  0x8267, 0x826d, 0x8274, 0x827b, 0x827d, 0x827f, 0x8280, 0x8281,
-  0x8283, 0x8284, 0x8287, 0x8289, 0x828a, 0x828e, 0x8291, 0x8294,
-  0x8296, 0x8298, 0x829a, 0x829b, 0x82a0, 0x82a1, 0x82a3, 0x82a4,
-  0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ae, 0x82b0, 0x82b2, 0x82b4,
-  0x82b7, 0x82ba, 0x82bc, 0x82be, 0x82bf, 0x82c6, 0x82d0, 0x82d5,
-  0x82da, 0x82e0, 0x82e2, 0x82e4, 0x82e8, 0x82ea, 0x82ed, 0x82ef,
-  0x82f6, 0x82f7, 0x82fd, 0x82fe, 0x8300, 0x8301, 0x8307, 0x8308,
-  0x830a, 0x830b, 0x8354, 0x831b, 0x831d, 0x831e, 0x831f, 0x8321,
-  0x8322, 0x832c, 0x832d, 0x832e, 0x8330, 0x8333, 0x8337, 0x833a,
-  0x833c, 0x833d, 0x8342, 0x8343, 0x8344, 0x8347, 0x834d, 0x834e,
-  0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378,
-  /* 0x58 */
-  0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386, 0x838d, 0x8392,
-  0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c, 0x839d, 0x83a6,
-  0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0, 0x83c7, 0x83c9,
-  0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353, 0x83e8, 0x83ea,
-  0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406, 0x840a, 0x840f,
-  0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439, 0x8445, 0x8447,
-  0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452, 0x8456, 0x8458,
-  0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465, 0x8467, 0x846a,
-  0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c, 0x847d, 0x8481,
-  0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6, 0x84a8, 0x84a9,
-  0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd, 0x84be, 0x84c0,
-  0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3,
-  /* 0x59 */
-  0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7,
-  0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c,
-  0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525,
-  0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f,
-  0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559,
-  0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564,
-  0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581,
-  0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598,
-  0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6,
-  0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7,
-  0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0,
-  0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc,
-  /* 0x5a */
-  0x85ff, 0x8600, 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611,
-  0x8612, 0x8618, 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629,
-  0x8636, 0x8638, 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646,
-  0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660,
-  0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675,
-  0x8676, 0x8677, 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a,
-  0x869c, 0x86a1, 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3,
-  0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1,
-  0x86c3, 0x86c5, 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc,
-  0x86e0, 0x86e3, 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd,
-  0x8704, 0x8705, 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713,
-  0x8714, 0x8719, 0x871e, 0x871f, 0x8721, 0x8723,
-  /* 0x5b */
-  0x8728, 0x872e, 0x872f, 0x8731, 0x8732, 0x8739, 0x873a, 0x873c,
-  0x873d, 0x873e, 0x8740, 0x8743, 0x8745, 0x874d, 0x8758, 0x875d,
-  0x8761, 0x8764, 0x8765, 0x876f, 0x8771, 0x8772, 0x877b, 0x8783,
-  0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878b, 0x878c,
-  0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879e, 0x87a0,
-  0x87a3, 0x87a7, 0x87ac, 0x87ad, 0x87ae, 0x87b1, 0x87b5, 0x87be,
-  0x87bf, 0x87c1, 0x87c8, 0x87c9, 0x87ca, 0x87ce, 0x87d5, 0x87d6,
-  0x87d9, 0x87da, 0x87dc, 0x87df, 0x87e2, 0x87e3, 0x87e4, 0x87ea,
-  0x87eb, 0x87ed, 0x87f1, 0x87f3, 0x87f8, 0x87fa, 0x87ff, 0x8801,
-  0x8803, 0x8806, 0x8809, 0x880a, 0x880b, 0x8810, 0x8819, 0x8812,
-  0x8813, 0x8814, 0x8818, 0x881a, 0x881b, 0x881c, 0x881e, 0x881f,
-  0x8828, 0x882d, 0x882e, 0x8830, 0x8832, 0x8835,
-  /* 0x5c */
-  0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884a,
-  0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858, 0x885a, 0x885c,
-  0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887b, 0x8880,
-  0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0, 0x88a8, 0x88aa,
-  0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb, 0x88cc, 0x88cd,
-  0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de, 0x88e7, 0x88ef,
-  0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906, 0x890d, 0x890e,
-  0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a, 0x891c, 0x8920,
-  0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939,
-  0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894f,
-  0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961, 0x8962, 0x8963,
-  0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a,
-  /* 0x5d */
-  0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995,
-  0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5,
-  0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8,
-  0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9,
-  0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12,
-  0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b,
-  0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43,
-  0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57,
-  0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76,
-  0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83,
-  0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99,
-  0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3,
-  /* 0x5e */
-  0x8ab6, 0x8ab7, 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9,
-  0x8aca, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf,
-  0x8aec, 0x8af0, 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05,
-  0x8b06, 0x8b0b, 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d,
-  0x8b30, 0x8b37, 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46,
-  0x8b48, 0x8b52, 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63,
-  0x8b6d, 0x8b76, 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84,
-  0x8b85, 0x8b8b, 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e,
-  0x8b9f, 0x8c38, 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49,
-  0x8c4b, 0x8c4f, 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b,
-  0x8c5d, 0x8c59, 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d,
-  0x8c73, 0x8c75, 0x8c76, 0x8c7b, 0x8c7e, 0x8c86,
-  /* 0x5f */
-  0x8c87, 0x8c8b, 0x8c90, 0x8c92, 0x8c93, 0x8c99, 0x8c9b, 0x8c9c,
-  0x8ca4, 0x8cb9, 0x8cba, 0x8cc5, 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf,
-  0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd, 0x8ce1, 0x8ce8, 0x8cec, 0x8cef,
-  0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfe, 0x8cff, 0x8d01,
-  0x8d03, 0x8d09, 0x8d12, 0x8d17, 0x8d1b, 0x8d65, 0x8d69, 0x8d6c,
-  0x8d6e, 0x8d7f, 0x8d82, 0x8d84, 0x8d88, 0x8d8d, 0x8d90, 0x8d91,
-  0x8d95, 0x8d9e, 0x8d9f, 0x8da0, 0x8da6, 0x8dab, 0x8dac, 0x8daf,
-  0x8db2, 0x8db5, 0x8db7, 0x8db9, 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6,
-  0x8dc7, 0x8dc8, 0x8dca, 0x8dce, 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7,
-  0x8dd9, 0x8de4, 0x8de5, 0x8de7, 0x8dec, 0x8df0, 0x8dbc, 0x8df1,
-  0x8df2, 0x8df4, 0x8dfd, 0x8e01, 0x8e04, 0x8e05, 0x8e06, 0x8e0b,
-  0x8e11, 0x8e14, 0x8e16, 0x8e20, 0x8e21, 0x8e22,
-  /* 0x60 */
-  0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36, 0x8e37, 0x8e38,
-  0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d, 0x8e4e, 0x8e4f,
-  0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61, 0x8e62, 0x8e69,
-  0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79, 0x8e7a, 0x8e7b,
-  0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95, 0x8e9a, 0x8e9b,
-  0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead, 0x8eae, 0x8eb3,
-  0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3, 0x8ec4, 0x8ec7,
-  0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee, 0x8ef0, 0x8ef1,
-  0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02, 0x8f07, 0x8f08,
-  0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e, 0x8f20, 0x8f21,
-  0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f34,
-  0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41,
-  /* 0x61 */
-  0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55,
-  0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4,
-  0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1,
-  0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5,
-  0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6,
-  0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b,
-  0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034,
-  0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062,
-  0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088,
-  0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099,
-  0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3,
-  0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3,
-  /* 0x62 */
-  0x90c4, 0x90c5, 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9,
-  0x90dc, 0x90dd, 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef,
-  0x90f0, 0x90f4, 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106,
-  0x9108, 0x910d, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a,
-  0x911c, 0x911e, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129,
-  0x912e, 0x912f, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a,
-  0x913c, 0x913d, 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157,
-  0x9159, 0x915a, 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174,
-  0x9179, 0x917a, 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a,
-  0x918e, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1,
-  0x91a6, 0x91a8, 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2,
-  0x91b3, 0x91b6, 0x91bb, 0x91bc, 0x91bd, 0x91bf,
-  /* 0x63 */
-  0x91c2, 0x91c3, 0x91c5, 0x91d3, 0x91d4, 0x91d7, 0x91d9, 0x91da,
-  0x91de, 0x91e4, 0x91e5, 0x91e9, 0x91ea, 0x91ec, 0x91ed, 0x91ee,
-  0x91ef, 0x91f0, 0x91f1, 0x91f7, 0x91f9, 0x91fb, 0x91fd, 0x9200,
-  0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920a, 0x920c,
-  0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921c, 0x921d, 0x9223,
-  0x9224, 0x9225, 0x9226, 0x9228, 0x922e, 0x922f, 0x9230, 0x9233,
-  0x9235, 0x9236, 0x9238, 0x9239, 0x923a, 0x923c, 0x923e, 0x9240,
-  0x9242, 0x9243, 0x9246, 0x9247, 0x924a, 0x924d, 0x924e, 0x924f,
-  0x9251, 0x9258, 0x9259, 0x925c, 0x925d, 0x9260, 0x9261, 0x9265,
-  0x9267, 0x9268, 0x9269, 0x926e, 0x926f, 0x9270, 0x9275, 0x9276,
-  0x9277, 0x9278, 0x9279, 0x927b, 0x927c, 0x927d, 0x927f, 0x9288,
-  0x9289, 0x928a, 0x928d, 0x928e, 0x9292, 0x9297,
-  /* 0x64 */
-  0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7, 0x92a8, 0x92ab,
-  0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb, 0x92bc, 0x92bd,
-  0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5, 0x92c6, 0x92c7,
-  0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0, 0x92d3, 0x92d5,
-  0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df, 0x92e0, 0x92e1,
-  0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee, 0x92f0, 0x92f9,
-  0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d, 0x9311, 0x9314,
-  0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321, 0x9324, 0x9325,
-  0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347,
-  0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358,
-  0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369, 0x936a, 0x936d,
-  0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376,
-  /* 0x65 */
-  0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a,
-  0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e,
-  0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5,
-  0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7,
-  0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc,
-  0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8,
-  0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409,
-  0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e,
-  0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d,
-  0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c,
-  0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f,
-  0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579,
-  /* 0x66 */
-  0x957e, 0x9584, 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e,
-  0x959f, 0x95a1, 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6,
-  0x95ba, 0x95bd, 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0,
-  0x95d1, 0x95d2, 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df,
-  0x95e0, 0x95e4, 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625,
-  0x9626, 0x962c, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a,
-  0x963c, 0x963d, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658,
-  0x9661, 0x966e, 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681,
-  0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d,
-  0x969f, 0x96a4, 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3,
-  0x96ba, 0x96ca, 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de,
-  0x96df, 0x96e9, 0x96ef, 0x96f1, 0x96fa, 0x9702,
-  /* 0x67 */
-  0x9703, 0x9705, 0x9709, 0x971a, 0x971b, 0x971d, 0x9721, 0x9722,
-  0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974a, 0x974e,
-  0x974f, 0x9755, 0x9757, 0x9758, 0x975a, 0x975b, 0x9763, 0x9767,
-  0x976a, 0x976e, 0x9773, 0x9776, 0x9777, 0x9778, 0x977b, 0x977d,
-  0x977f, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a,
-  0x979e, 0x979f, 0x97a2, 0x97ac, 0x97ae, 0x97b1, 0x97b2, 0x97b5,
-  0x97b6, 0x97b8, 0x97b9, 0x97ba, 0x97bc, 0x97be, 0x97bf, 0x97c1,
-  0x97c4, 0x97c5, 0x97c7, 0x97c9, 0x97ca, 0x97cc, 0x97cd, 0x97ce,
-  0x97d0, 0x97d1, 0x97d4, 0x97d7, 0x97d8, 0x97d9, 0x97dd, 0x97de,
-  0x97e0, 0x97db, 0x97e1, 0x97e4, 0x97ef, 0x97f1, 0x97f4, 0x97f7,
-  0x97f8, 0x97fa, 0x9807, 0x980a, 0x9819, 0x980d, 0x980e, 0x9814,
-  0x9816, 0x981c, 0x981e, 0x9820, 0x9823, 0x9826,
-  /* 0x68 */
-  0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825,
-  0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852, 0x9853, 0x9856,
-  0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865, 0x9866, 0x986a,
-  0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4, 0x98b7, 0x98b8,
-  0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8, 0x98cc, 0x98e1,
-  0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3, 0x98f6, 0x9902,
-  0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991a, 0x991b,
-  0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b, 0x9931, 0x9932,
-  0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b, 0x993c, 0x9940,
-  0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e, 0x9954, 0x9958,
-  0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960, 0x999b, 0x999d,
-  0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5,
-  /* 0x69 */
-  0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4,
-  0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec,
-  0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03,
-  0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20,
-  0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35,
-  0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c,
-  0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae,
-  0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe,
-  0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2,
-  0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5,
-  0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa,
-  0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03,
-  /* 0x6a */
-  0x9b04, 0x9b05, 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e,
-  0x9b10, 0x9b12, 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26,
-  0x9b2b, 0x9b2d, 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a,
-  0x9b3d, 0x9b48, 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b,
-  0x9b5e, 0x9b61, 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b,
-  0x9b6c, 0x9b6d, 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79,
-  0x9b7f, 0x9b80, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a,
-  0x9b8b, 0x9b8d, 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e,
-  0x9ba6, 0x9ba7, 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7,
-  0x9bb8, 0x9bbb, 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8,
-  0x9bce, 0x9bd0, 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7,
-  0x9bea, 0x9beb, 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8,
-  /* 0x6b */
-  0x9bf9, 0x9bfa, 0x9bfd, 0x9bff, 0x9c00, 0x9c02, 0x9c0b, 0x9c0f,
-  0x9c11, 0x9c16, 0x9c18, 0x9c19, 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22,
-  0x9c23, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c31, 0x9c35,
-  0x9c36, 0x9c37, 0x9c3d, 0x9c41, 0x9c43, 0x9c44, 0x9c45, 0x9c49,
-  0x9c4a, 0x9c4e, 0x9c4f, 0x9c50, 0x9c53, 0x9c54, 0x9c56, 0x9c58,
-  0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c63, 0x9c69, 0x9c6a, 0x9c5c,
-  0x9c6b, 0x9c68, 0x9c6e, 0x9c70, 0x9c72, 0x9c75, 0x9c77, 0x9c7b,
-  0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9, 0x9d0b, 0x9d02, 0x9d11, 0x9d17,
-  0x9d18, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d2f, 0x9d30, 0x9d32, 0x9d33,
-  0x9d34, 0x9d3a, 0x9d3c, 0x9d45, 0x9d3d, 0x9d42, 0x9d43, 0x9d47,
-  0x9d4a, 0x9d53, 0x9d54, 0x9d5f, 0x9d63, 0x9d62, 0x9d65, 0x9d69,
-  0x9d6a, 0x9d6b, 0x9d70, 0x9d76, 0x9d77, 0x9d7b,
-  /* 0x6c */
-  0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a, 0x9d8d, 0x9d8e,
-  0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9da1, 0x9daa,
-  0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc, 0x9dbf, 0x9dc3,
-  0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dda,
-  0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9, 0x9deb, 0x9dee,
-  0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02, 0x9e07, 0x9e0e,
-  0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19, 0x9e1c, 0x9e1d,
-  0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83, 0x9e84, 0x9e85,
-  0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b, 0x9e9e, 0x9ea4,
-  0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3, 0x9eb4, 0x9eb5,
-  0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4, 0x9ee7, 0x9eec,
-  0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5,
-  /* 0x6d */
-  0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11,
-  0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f,
-  0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34,
-  0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43,
-  0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57,
-  0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e,
-  0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f,
-  0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1,
-  0x9fa2, 0x9fa3, 0x9fa5,
-};
-
-static int
-jisx0212_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 == 0x22) || (c1 >= 0x26 && c1 <= 0x27) || (c1 >= 0x29 && c1 <= 0x2b) || (c1 >= 0x30 && c1 <= 0x6d)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 470) {
-          if (i < 175)
-            wc = jisx0212_2uni_page22[i-94];
-        } else if (i < 752) {
-          if (i < 658)
-            wc = jisx0212_2uni_page26[i-470];
-        } else if (i < 1410) {
-          if (i < 1027)
-            wc = jisx0212_2uni_page29[i-752];
-        } else {
-          if (i < 7211)
-            wc = jisx0212_2uni_page30[i-1410];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short jisx0212_2charset[6067] = {
-  0x2237, 0x2242, 0x2270, 0x2243, 0x226d, 0x226c, 0x226e, 0x2234,
-  0x2231, 0x226b, 0x2244, 0x2a22, 0x2a21, 0x2a24, 0x2a2a, 0x2a23,
-  0x2a29, 0x2921, 0x2a2e, 0x2a32, 0x2a31, 0x2a34, 0x2a33, 0x2a40,
-  0x2a3f, 0x2a42, 0x2a41, 0x2a50, 0x2a52, 0x2a51, 0x2a54, 0x2a58,
-  0x2a53, 0x292c, 0x2a63, 0x2a62, 0x2a65, 0x2a64, 0x2a72, 0x2930,
-  0x294e, 0x2b22, 0x2b21, 0x2b24, 0x2b2a, 0x2b23, 0x2b29, 0x2941,
-  0x2b2e, 0x2b32, 0x2b31, 0x2b34, 0x2b33, 0x2b40, 0x2b3f, 0x2b42,
-  0x2b41, 0x2943, 0x2b50, 0x2b52, 0x2b51, 0x2b54, 0x2b58, 0x2b53,
-  0x294c, 0x2b63, 0x2b62, 0x2b65, 0x2b64, 0x2b72, 0x2950, 0x2b73,
-  0x2a27, 0x2b27, 0x2a25, 0x2b25, 0x2a28, 0x2b28, 0x2a2b, 0x2b2b,
-  0x2a2c, 0x2b2c, 0x2a2f, 0x2b2f, 0x2a2d, 0x2b2d, 0x2a30, 0x2b30,
-  0x2922, 0x2942, 0x2a37, 0x2b37, 0x2a36, 0x2b36, 0x2a38, 0x2b38,
-  0x2a35, 0x2b35, 0x2a3a, 0x2b3a, 0x2a3b, 0x2b3b, 0x2a3d, 0x2b3d,
-  0x2a3c, 0x2a3e, 0x2b3e, 0x2924, 0x2944, 0x2a47, 0x2b47, 0x2a45,
-  0x2b45, 0x2a46, 0x2b46, 0x2a44, 0x2945, 0x2926, 0x2946, 0x2a48,
-  0x2b48, 0x2a49, 0x2b49, 0x2947, 0x2a4a, 0x2b4a, 0x2a4c, 0x2b4c,
-  0x2a4b, 0x2b4b, 0x2929, 0x2949, 0x2928, 0x2948, 0x2a4d, 0x2b4d,
-  0x2a4f, 0x2b4f, 0x2a4e, 0x2b4e, 0x294a, 0x292b, 0x294b, 0x2a57,
-  0x2b57, 0x2a56, 0x2b56, 0x292d, 0x294d, 0x2a59, 0x2b59, 0x2a5b,
-  0x2b5b, 0x2a5a, 0x2b5a, 0x2a5c, 0x2b5c, 0x2a5d, 0x2b5d, 0x2a5f,
-  0x2b5f, 0x2a5e, 0x2b5e, 0x2a61, 0x2b61, 0x2a60, 0x2b60, 0x292f,
-  0x294f, 0x2a6c, 0x2b6c, 0x2a69, 0x2b69, 0x2a66, 0x2b66, 0x2a6b,
-  0x2b6b, 0x2a68, 0x2b68, 0x2a6a, 0x2b6a, 0x2a71, 0x2b71, 0x2a74,
-  0x2b74, 0x2a73, 0x2a75, 0x2b75, 0x2a77, 0x2b77, 0x2a76, 0x2b76,
-  0x2a26, 0x2b26, 0x2a43, 0x2b43, 0x2a55, 0x2b55, 0x2a67, 0x2b67,
-  0x2a70, 0x2b70, 0x2a6d, 0x2b6d, 0x2a6f, 0x2b6f, 0x2a6e, 0x2b6e,
-  0x2b39, 0x2230, 0x222f, 0x2232, 0x2236, 0x2235, 0x2233, 0x2238,
-  0x2239, 0x2661, 0x2662, 0x2663, 0x2664, 0x2667, 0x2669, 0x266c,
-  0x2676, 0x2665, 0x266a, 0x2671, 0x2672, 0x2673, 0x2674, 0x267b,
-  0x2678, 0x2675, 0x267a, 0x2677, 0x2679, 0x267c, 0x2742, 0x2743,
-  0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b,
-  0x274c, 0x274d, 0x274e, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776,
-  0x2777, 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e,
-  0x2271, 0x226f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026,
-  0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e,
-  0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036,
-  0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e,
-  0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
-  0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
-  0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
-  0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
-  0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067,
-  0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f,
-  0x3070, 0x305f, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
-  0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130,
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x3176, 0x315f,
-  0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167,
-  0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f,
-  0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222,
-  0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a,
-  0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232,
-  0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a,
-  0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242,
-  0x3243, 0x3244, 0x3245, 0x3251, 0x3246, 0x3247, 0x3248, 0x3249,
-  0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3252,
-  0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a,
-  0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262,
-  0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a,
-  0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272,
-  0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a,
-  0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324,
-  0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c,
-  0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334,
-  0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c,
-  0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344,
-  0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c,
-  0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354,
-  0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c,
-  0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364,
-  0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c,
-  0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374,
-  0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c,
-  0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426,
-  0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e,
-  0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436,
-  0x3438, 0x3437, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e,
-  0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446,
-  0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e,
-  0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456,
-  0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e,
-  0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466,
-  0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e,
-  0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476,
-  0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e,
-  0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528,
-  0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530,
-  0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538,
-  0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540,
-  0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548,
-  0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550,
-  0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558,
-  0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560,
-  0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568,
-  0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570,
-  0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578,
-  0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622,
-  0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a,
-  0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632,
-  0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a,
-  0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642,
-  0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a,
-  0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652,
-  0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a,
-  0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662,
-  0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a,
-  0x366b, 0x366c, 0x366d, 0x3670, 0x3671, 0x366e, 0x366f, 0x3672,
-  0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a,
-  0x367b, 0x367d, 0x367e, 0x367c, 0x3721, 0x3722, 0x3723, 0x3724,
-  0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c,
-  0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
-  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
-  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
-  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
-  0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754,
-  0x3755, 0x3756, 0x3757, 0x3760, 0x3758, 0x3759, 0x375a, 0x375b,
-  0x375c, 0x375d, 0x375e, 0x375f, 0x3761, 0x3762, 0x3763, 0x3764,
-  0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c,
-  0x376d, 0x377e, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773,
-  0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b,
-  0x377c, 0x377d, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826,
-  0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e,
-  0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836,
-  0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e,
-  0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846,
-  0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e,
-  0x3850, 0x3851, 0x384f, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856,
-  0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e,
-  0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3867,
-  0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f,
-  0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877,
-  0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x3921,
-  0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929,
-  0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930, 0x3931,
-  0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939,
-  0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940, 0x3941,
-  0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949,
-  0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951,
-  0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959,
-  0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961,
-  0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969,
-  0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970, 0x3971,
-  0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978, 0x3979,
-  0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22, 0x3a23,
-  0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a, 0x3a2b,
-  0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a33, 0x3a34,
-  0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a32, 0x3a39, 0x3a3a, 0x3a3b,
-  0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43,
-  0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b,
-  0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53,
-  0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b,
-  0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62, 0x3a63,
-  0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a, 0x3a6b,
-  0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72, 0x3a73,
-  0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a, 0x3a7b,
-  0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25,
-  0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d,
-  0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35,
-  0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3d, 0x3b3c,
-  0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45,
-  0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b46, 0x3b4b, 0x3b4c, 0x3b4d,
-  0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b57, 0x3b55,
-  0x3b54, 0x3b56, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d,
-  0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65,
-  0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d,
-  0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x6674, 0x3b73, 0x3b74,
-  0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b7a, 0x3b79, 0x3b7b, 0x3b7c,
-  0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26,
-  0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2e, 0x3c2d,
-  0x3c2f, 0x3c30, 0x3c31, 0x3c34, 0x3c32, 0x3c33, 0x3c35, 0x3c36,
-  0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e,
-  0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46,
-  0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e,
-  0x3c4f, 0x3c50, 0x3c52, 0x3c51, 0x3c53, 0x3c54, 0x3c55, 0x3c56,
-  0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e,
-  0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66,
-  0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e,
-  0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76,
-  0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e,
-  0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28,
-  0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d32,
-  0x3d30, 0x3d31, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38,
-  0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40,
-  0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48,
-  0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50,
-  0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58,
-  0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60,
-  0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68,
-  0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70,
-  0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78,
-  0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22,
-  0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a,
-  0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32,
-  0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a,
-  0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42,
-  0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a,
-  0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52,
-  0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a,
-  0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62,
-  0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a,
-  0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72,
-  0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a,
-  0x3e7b, 0x3e7e, 0x3e7c, 0x3e7d, 0x3f21, 0x3f22, 0x3f23, 0x3f24,
-  0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c,
-  0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34,
-  0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c,
-  0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44,
-  0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c,
-  0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54,
-  0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c,
-  0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64,
-  0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c,
-  0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74,
-  0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c,
-  0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026,
-  0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e,
-  0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036,
-  0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e,
-  0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046,
-  0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e,
-  0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056,
-  0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e,
-  0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066,
-  0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e,
-  0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076,
-  0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e,
-  0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128,
-  0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130,
-  0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138,
-  0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140,
-  0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148,
-  0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150,
-  0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158,
-  0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160,
-  0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168,
-  0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170,
-  0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178,
-  0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222,
-  0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a,
-  0x422b, 0x422c, 0x422d, 0x422e, 0x4230, 0x422f, 0x4231, 0x4232,
-  0x4233, 0x4234, 0x4235, 0x4237, 0x4236, 0x4238, 0x4239, 0x423a,
-  0x423b, 0x423c, 0x423d, 0x423e, 0x4240, 0x4241, 0x4242, 0x4244,
-  0x4245, 0x4247, 0x4248, 0x4249, 0x424a, 0x424c, 0x4243, 0x4246,
-  0x424b, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252, 0x4253,
-  0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a, 0x425b,
-  0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262, 0x4263,
-  0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a, 0x426b,
-  0x426c, 0x426d, 0x423f, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272,
-  0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a,
-  0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324,
-  0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c,
-  0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334,
-  0x4335, 0x4336, 0x4337, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d,
-  0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345,
-  0x4346, 0x4347, 0x4348, 0x4338, 0x434a, 0x434b, 0x434c, 0x434d,
-  0x434f, 0x434e, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355,
-  0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x4349, 0x435c,
-  0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364,
-  0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c,
-  0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374,
-  0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c,
-  0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426,
-  0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e,
-  0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436,
-  0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e,
-  0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446,
-  0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e,
-  0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456,
-  0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e,
-  0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466,
-  0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e,
-  0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476,
-  0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e,
-  0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528,
-  0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530,
-  0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538,
-  0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540,
-  0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548,
-  0x4549, 0x454a, 0x454b, 0x454d, 0x454c, 0x454e, 0x454f, 0x4550,
-  0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558,
-  0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560,
-  0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568,
-  0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570,
-  0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578,
-  0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622,
-  0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a,
-  0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632,
-  0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a,
-  0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642,
-  0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a,
-  0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652,
-  0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a,
-  0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4736, 0x4661,
-  0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669,
-  0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671,
-  0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679,
-  0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723,
-  0x4724, 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b,
-  0x472c, 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733,
-  0x4734, 0x4735, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c,
-  0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744,
-  0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c,
-  0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754,
-  0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c,
-  0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764,
-  0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c,
-  0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774,
-  0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c,
-  0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826,
-  0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e,
-  0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836,
-  0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e,
-  0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846,
-  0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x4853, 0x484d,
-  0x484e, 0x484f, 0x4850, 0x4851, 0x4852, 0x4854, 0x4855, 0x4856,
-  0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e,
-  0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866,
-  0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e,
-  0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876,
-  0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e,
-  0x4921, 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927, 0x4928,
-  0x4929, 0x492a, 0x492b, 0x492c, 0x492d, 0x492e, 0x492f, 0x4930,
-  0x4931, 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938,
-  0x4939, 0x493a, 0x493b, 0x493c, 0x4941, 0x493d, 0x493e, 0x493f,
-  0x4940, 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 0x4947, 0x4948,
-  0x4949, 0x494a, 0x494b, 0x494c, 0x494d, 0x494e, 0x494f, 0x4950,
-  0x4951, 0x4952, 0x4953, 0x4954, 0x4955, 0x4956, 0x4957, 0x4958,
-  0x4959, 0x495a, 0x495b, 0x495c, 0x495d, 0x495e, 0x495f, 0x4960,
-  0x4961, 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, 0x4967, 0x4968,
-  0x4969, 0x496a, 0x496b, 0x496c, 0x496d, 0x496e, 0x496f, 0x4970,
-  0x4971, 0x4972, 0x4973, 0x4974, 0x4975, 0x4976, 0x4977, 0x4978,
-  0x4979, 0x497a, 0x497b, 0x497c, 0x497d, 0x497e, 0x4a21, 0x4a22,
-  0x4a23, 0x4a24, 0x4a25, 0x4a26, 0x4a27, 0x4a28, 0x4a29, 0x4a2a,
-  0x4a2b, 0x4a2c, 0x4a2d, 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a32,
-  0x4a33, 0x4a34, 0x4a35, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a,
-  0x4a3b, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a42,
-  0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a47, 0x4a48, 0x4a49, 0x4a4a,
-  0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, 0x4a50, 0x4a51, 0x4a52,
-  0x4a53, 0x4a54, 0x4a55, 0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a5a,
-  0x4a5b, 0x4a5c, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62,
-  0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a67, 0x4a68, 0x4a69, 0x4a6a,
-  0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6f, 0x4a70, 0x4a71, 0x4a72,
-  0x4a73, 0x4a74, 0x4a75, 0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a,
-  0x4a7b, 0x4a7c, 0x4a7d, 0x4a7e, 0x4b21, 0x4b22, 0x4b23, 0x4b24,
-  0x4b25, 0x4b26, 0x4b27, 0x4b28, 0x4b29, 0x4b2a, 0x4b2b, 0x4b2c,
-  0x4b2d, 0x4b2e, 0x4b2f, 0x4b30, 0x4b31, 0x4b32, 0x4b33, 0x4b34,
-  0x4b35, 0x4b36, 0x4b37, 0x4b38, 0x4b39, 0x4b3a, 0x4b3b, 0x4b3c,
-  0x4b3d, 0x4b3e, 0x4b3f, 0x4b40, 0x4b41, 0x4b42, 0x4b43, 0x4b44,
-  0x4b45, 0x4b46, 0x4b47, 0x4b48, 0x4b49, 0x4b4a, 0x4b4b, 0x4b4c,
-  0x4b4d, 0x4b4e, 0x4b4f, 0x4b50, 0x4b51, 0x4b52, 0x4b53, 0x4b54,
-  0x4b55, 0x4b56, 0x4b57, 0x4b58, 0x4b59, 0x4b5a, 0x4b5b, 0x4b5c,
-  0x4b5d, 0x4b5e, 0x4b5f, 0x4b60, 0x4b61, 0x4b62, 0x4b63, 0x4b64,
-  0x4b65, 0x4b66, 0x4b67, 0x4b68, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6c,
-  0x4b6d, 0x4b6e, 0x4b6f, 0x4b70, 0x4b71, 0x4b72, 0x4b73, 0x4b74,
-  0x4b75, 0x4b76, 0x4b77, 0x4b78, 0x4b79, 0x4b7a, 0x4b7b, 0x4b7c,
-  0x4b7d, 0x4b7e, 0x4c21, 0x4c22, 0x4c23, 0x4c24, 0x4c25, 0x4c26,
-  0x4c27, 0x4c28, 0x4c29, 0x4c2a, 0x4c2b, 0x4c2c, 0x4c2d, 0x4c2e,
-  0x4c2f, 0x4c30, 0x4c31, 0x4c32, 0x4c33, 0x4c34, 0x4c35, 0x4c36,
-  0x4c37, 0x4c38, 0x4c39, 0x4c3a, 0x4c3b, 0x4c3c, 0x4c3d, 0x4c3e,
-  0x4c3f, 0x4c40, 0x4c41, 0x4c42, 0x4c43, 0x4c44, 0x4c45, 0x4c46,
-  0x4c47, 0x4c48, 0x4c49, 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4d, 0x4c4e,
-  0x4c4f, 0x4c50, 0x4c51, 0x4c52, 0x4c53, 0x4c54, 0x4c55, 0x4c56,
-  0x4c57, 0x4c58, 0x4c59, 0x4c5a, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c5e,
-  0x4c5f, 0x4c60, 0x4c61, 0x4c62, 0x4c63, 0x4c64, 0x4c65, 0x4c66,
-  0x4c67, 0x4c68, 0x4c69, 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6d, 0x4c6e,
-  0x4c6f, 0x4c70, 0x4c71, 0x4c72, 0x4c73, 0x4c74, 0x4c75, 0x4c76,
-  0x4c77, 0x4c78, 0x4c79, 0x4c7a, 0x4c7b, 0x4c7c, 0x4c7d, 0x4c7e,
-  0x4d21, 0x4d22, 0x4d23, 0x4d24, 0x4d25, 0x4d26, 0x4d27, 0x4d28,
-  0x4d29, 0x4d2a, 0x4d2b, 0x4d2c, 0x4d2d, 0x4d2e, 0x4d2f, 0x4d30,
-  0x4d31, 0x4d32, 0x4d33, 0x4d34, 0x4d35, 0x4d36, 0x4d37, 0x4d38,
-  0x4d39, 0x4d3a, 0x4d3b, 0x4d3c, 0x4d3d, 0x4d3e, 0x4d3f, 0x4d40,
-  0x4d41, 0x4d42, 0x4d43, 0x4d44, 0x4d45, 0x4d46, 0x4d47, 0x4d48,
-  0x4d49, 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4d, 0x4d4e, 0x4d4f, 0x4d50,
-  0x4d51, 0x4d52, 0x4d53, 0x4d54, 0x4d55, 0x4d56, 0x4d57, 0x4d58,
-  0x4d59, 0x4d5a, 0x4d5b, 0x4d5c, 0x4d5d, 0x4d5e, 0x4d5f, 0x4d60,
-  0x4d61, 0x4d62, 0x4d63, 0x4d64, 0x4d65, 0x4d66, 0x4d67, 0x4d68,
-  0x4d69, 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6d, 0x4d6e, 0x4d6f, 0x4d70,
-  0x4d71, 0x4d72, 0x4d73, 0x4d74, 0x4d75, 0x4d76, 0x4d77, 0x4d78,
-  0x4d79, 0x4d7a, 0x4d7b, 0x4d7c, 0x4d7d, 0x4d7e, 0x4e21, 0x4e22,
-  0x4e24, 0x4e25, 0x4e26, 0x4e27, 0x4e28, 0x4e29, 0x4e23, 0x4e2a,
-  0x4e2b, 0x4e2c, 0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32,
-  0x4e33, 0x4e34, 0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a,
-  0x4e3b, 0x4e3c, 0x4e3d, 0x4e3e, 0x4e3f, 0x4e40, 0x4e41, 0x4e42,
-  0x4e43, 0x4e44, 0x4e45, 0x4e46, 0x4e47, 0x4e48, 0x4e49, 0x4e4a,
-  0x4e4b, 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f, 0x4e50, 0x4e51, 0x4e52,
-  0x4e53, 0x4e54, 0x4e55, 0x4e56, 0x4e57, 0x4e58, 0x4e59, 0x4e5a,
-  0x4e5b, 0x4e5c, 0x4e5d, 0x4e5e, 0x4e5f, 0x4e60, 0x4e61, 0x4e62,
-  0x4e63, 0x4e64, 0x4e65, 0x4e66, 0x4e67, 0x4e68, 0x4e69, 0x4e6a,
-  0x4e6b, 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f, 0x4e70, 0x4e71, 0x4e72,
-  0x4e73, 0x4e74, 0x4e75, 0x4e76, 0x4e77, 0x4e78, 0x4e79, 0x4e7a,
-  0x4e7b, 0x4e7c, 0x4e7d, 0x4e7e, 0x4f21, 0x4f22, 0x4f23, 0x4f24,
-  0x4f25, 0x4f26, 0x4f27, 0x4f28, 0x4f29, 0x4f2a, 0x4f2b, 0x4f2c,
-  0x4f2d, 0x4f2e, 0x4f2f, 0x4f30, 0x4f31, 0x4f32, 0x4f33, 0x4f34,
-  0x4f35, 0x4f36, 0x4f37, 0x4f38, 0x4f39, 0x4f3a, 0x4f3b, 0x4f3c,
-  0x4f3d, 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f43, 0x4f44,
-  0x4f45, 0x4f46, 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c,
-  0x4f4d, 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f52, 0x4f53, 0x4f54,
-  0x4f55, 0x4f56, 0x4f57, 0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c,
-  0x4f5d, 0x4f5e, 0x4f5f, 0x4f60, 0x4f61, 0x4f62, 0x4f63, 0x4f64,
-  0x4f65, 0x4f66, 0x4f67, 0x4f68, 0x4f69, 0x4f6a, 0x4f6b, 0x4f6c,
-  0x4f6d, 0x4f6e, 0x4f6f, 0x4f70, 0x4f71, 0x4f72, 0x4f74, 0x4f75,
-  0x4f76, 0x4f73, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7b, 0x4f7c,
-  0x4f7d, 0x4f7e, 0x5021, 0x5022, 0x5023, 0x5024, 0x5025, 0x5026,
-  0x5027, 0x5028, 0x5029, 0x502a, 0x502b, 0x502c, 0x502e, 0x502f,
-  0x5030, 0x5031, 0x502d, 0x5032, 0x5033, 0x5034, 0x5035, 0x5037,
-  0x5038, 0x5039, 0x503a, 0x503b, 0x5036, 0x503c, 0x503d, 0x503e,
-  0x503f, 0x5040, 0x5041, 0x5042, 0x5043, 0x5044, 0x5045, 0x5046,
-  0x5047, 0x5048, 0x5049, 0x504a, 0x504b, 0x504c, 0x504d, 0x504e,
-  0x504f, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5055, 0x5056,
-  0x5057, 0x5058, 0x5059, 0x505a, 0x505b, 0x505c, 0x505d, 0x505e,
-  0x505f, 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5065, 0x5066,
-  0x5067, 0x5068, 0x5069, 0x506a, 0x506b, 0x506c, 0x506d, 0x506e,
-  0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5076,
-  0x5077, 0x5078, 0x5079, 0x507a, 0x507b, 0x507c, 0x507d, 0x507e,
-  0x5121, 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128,
-  0x5129, 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f, 0x5130,
-  0x5131, 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137, 0x5138,
-  0x5139, 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x513f, 0x5140,
-  0x5141, 0x5142, 0x5143, 0x5144, 0x5145, 0x5146, 0x5147, 0x5148,
-  0x5149, 0x514a, 0x514b, 0x514c, 0x514d, 0x514e, 0x514f, 0x5150,
-  0x5151, 0x5152, 0x5153, 0x5154, 0x5155, 0x5156, 0x5157, 0x5158,
-  0x5159, 0x515a, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160,
-  0x5161, 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5167, 0x5168,
-  0x5169, 0x516a, 0x516b, 0x516c, 0x516d, 0x516e, 0x516f, 0x5170,
-  0x5171, 0x5172, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177, 0x5178,
-  0x5179, 0x517a, 0x517b, 0x517c, 0x517d, 0x517e, 0x5221, 0x5222,
-  0x5223, 0x5224, 0x5225, 0x5226, 0x5227, 0x5228, 0x5229, 0x522a,
-  0x522b, 0x522c, 0x522d, 0x522e, 0x522f, 0x5230, 0x5231, 0x5232,
-  0x5233, 0x5234, 0x5235, 0x5236, 0x5237, 0x5238, 0x5239, 0x523a,
-  0x523b, 0x523c, 0x523d, 0x523e, 0x523f, 0x5240, 0x5241, 0x5242,
-  0x5243, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a,
-  0x524b, 0x524c, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252,
-  0x5253, 0x5254, 0x5255, 0x5256, 0x5257, 0x5258, 0x5259, 0x525a,
-  0x525b, 0x525c, 0x525d, 0x525e, 0x525f, 0x5260, 0x5261, 0x5262,
-  0x5263, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, 0x526a,
-  0x526b, 0x526c, 0x526d, 0x526e, 0x526f, 0x5270, 0x5271, 0x5272,
-  0x5273, 0x5274, 0x5276, 0x5277, 0x5278, 0x5275, 0x5279, 0x527a,
-  0x527b, 0x527c, 0x527d, 0x527e, 0x5321, 0x5322, 0x5323, 0x5324,
-  0x5325, 0x5326, 0x5327, 0x5328, 0x5329, 0x532a, 0x532b, 0x532c,
-  0x532d, 0x532e, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334,
-  0x5335, 0x5336, 0x5337, 0x5338, 0x5339, 0x533a, 0x533b, 0x533c,
-  0x533d, 0x533e, 0x533f, 0x5340, 0x5341, 0x5342, 0x5343, 0x5344,
-  0x5345, 0x5346, 0x5347, 0x5348, 0x5349, 0x534a, 0x534b, 0x534c,
-  0x534d, 0x534e, 0x534f, 0x5350, 0x5351, 0x5352, 0x5353, 0x5354,
-  0x5355, 0x5356, 0x5357, 0x5358, 0x5359, 0x535a, 0x535b, 0x535c,
-  0x535d, 0x535e, 0x535f, 0x5360, 0x5361, 0x5362, 0x5363, 0x5364,
-  0x5365, 0x5366, 0x5367, 0x5368, 0x5369, 0x536a, 0x536b, 0x536c,
-  0x536d, 0x536e, 0x536f, 0x5370, 0x5371, 0x5372, 0x5373, 0x5374,
-  0x5375, 0x5376, 0x5377, 0x5378, 0x5379, 0x537a, 0x537b, 0x537c,
-  0x537d, 0x537e, 0x5421, 0x5422, 0x5423, 0x5424, 0x5425, 0x5426,
-  0x5427, 0x5428, 0x5429, 0x542a, 0x542b, 0x542c, 0x542d, 0x542e,
-  0x542f, 0x5430, 0x5431, 0x5432, 0x5434, 0x5435, 0x5436, 0x5437,
-  0x5438, 0x5439, 0x543a, 0x543b, 0x543c, 0x543d, 0x543e, 0x5433,
-  0x543f, 0x5440, 0x5441, 0x5442, 0x5443, 0x5444, 0x5445, 0x5446,
-  0x5447, 0x5448, 0x5449, 0x544a, 0x544b, 0x544c, 0x544d, 0x544e,
-  0x544f, 0x5450, 0x5451, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456,
-  0x5457, 0x5458, 0x5459, 0x545a, 0x545b, 0x545c, 0x545d, 0x545e,
-  0x545f, 0x5460, 0x5461, 0x5462, 0x5463, 0x5464, 0x5465, 0x5466,
-  0x5467, 0x5468, 0x5469, 0x546a, 0x546c, 0x546b, 0x546d, 0x546e,
-  0x546f, 0x5470, 0x5471, 0x5472, 0x5473, 0x5474, 0x5475, 0x5476,
-  0x5477, 0x5478, 0x5479, 0x547a, 0x547b, 0x547c, 0x547d, 0x547e,
-  0x5521, 0x5522, 0x5523, 0x5524, 0x5525, 0x5526, 0x5527, 0x5528,
-  0x5529, 0x552a, 0x552b, 0x552c, 0x552d, 0x552e, 0x552f, 0x5530,
-  0x5531, 0x5532, 0x5533, 0x5534, 0x5535, 0x5536, 0x5537, 0x5538,
-  0x5539, 0x553a, 0x553b, 0x553c, 0x553d, 0x553e, 0x553f, 0x5540,
-  0x5541, 0x5542, 0x5543, 0x5544, 0x5545, 0x5546, 0x5547, 0x5548,
-  0x5549, 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5550,
-  0x5551, 0x5552, 0x5553, 0x5554, 0x5555, 0x5556, 0x5557, 0x5558,
-  0x5559, 0x555a, 0x555b, 0x555c, 0x555d, 0x555e, 0x555f, 0x5560,
-  0x5561, 0x5562, 0x5563, 0x5564, 0x5565, 0x5566, 0x5567, 0x5568,
-  0x5569, 0x556a, 0x556b, 0x556c, 0x556d, 0x556e, 0x556f, 0x5570,
-  0x5571, 0x5572, 0x5573, 0x5574, 0x5575, 0x5576, 0x5577, 0x5578,
-  0x5579, 0x557a, 0x557b, 0x557c, 0x557d, 0x557e, 0x5621, 0x5622,
-  0x5623, 0x5624, 0x5625, 0x5626, 0x5627, 0x5628, 0x5629, 0x562a,
-  0x562b, 0x562c, 0x562d, 0x562e, 0x562f, 0x5630, 0x5631, 0x5632,
-  0x5633, 0x5634, 0x5635, 0x5636, 0x5637, 0x5638, 0x5639, 0x563a,
-  0x563b, 0x563c, 0x563d, 0x563e, 0x563f, 0x5640, 0x5641, 0x5642,
-  0x5643, 0x5644, 0x5645, 0x5647, 0x5648, 0x5649, 0x564a, 0x564b,
-  0x5646, 0x564c, 0x564d, 0x564e, 0x564f, 0x5650, 0x5651, 0x5652,
-  0x5653, 0x5654, 0x5656, 0x5657, 0x5658, 0x5655, 0x5659, 0x565a,
-  0x565b, 0x565c, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5662,
-  0x5663, 0x5664, 0x5665, 0x5666, 0x5667, 0x5668, 0x5669, 0x566a,
-  0x566b, 0x566c, 0x566d, 0x566e, 0x566f, 0x5670, 0x5671, 0x5672,
-  0x5673, 0x5674, 0x5675, 0x5676, 0x5677, 0x5678, 0x5679, 0x567a,
-  0x567b, 0x567c, 0x567d, 0x567e, 0x5721, 0x5722, 0x5723, 0x5724,
-  0x5725, 0x5726, 0x5727, 0x5728, 0x5729, 0x572a, 0x572b, 0x572c,
-  0x572d, 0x572e, 0x572f, 0x5730, 0x5731, 0x5732, 0x5733, 0x5734,
-  0x5735, 0x5736, 0x5737, 0x5738, 0x5739, 0x573a, 0x573b, 0x573c,
-  0x573d, 0x573e, 0x573f, 0x5740, 0x5741, 0x5742, 0x5743, 0x5744,
-  0x5745, 0x5746, 0x5747, 0x5748, 0x5749, 0x574a, 0x574b, 0x574c,
-  0x574d, 0x574e, 0x574f, 0x5750, 0x5751, 0x5752, 0x5753, 0x5754,
-  0x5755, 0x5756, 0x5757, 0x5758, 0x5759, 0x575a, 0x575b, 0x575c,
-  0x575d, 0x575e, 0x575f, 0x5760, 0x5761, 0x5762, 0x5764, 0x5765,
-  0x5766, 0x5767, 0x5768, 0x5769, 0x576a, 0x576b, 0x576c, 0x576d,
-  0x576e, 0x576f, 0x5770, 0x5771, 0x5772, 0x5773, 0x5774, 0x5775,
-  0x5776, 0x5777, 0x5778, 0x5779, 0x583e, 0x5763, 0x577a, 0x577b,
-  0x577c, 0x577d, 0x577e, 0x5821, 0x5822, 0x5823, 0x5824, 0x5825,
-  0x5826, 0x5827, 0x5828, 0x5829, 0x582a, 0x582b, 0x582c, 0x582d,
-  0x582e, 0x582f, 0x5830, 0x5831, 0x5832, 0x5833, 0x584c, 0x5834,
-  0x5835, 0x5836, 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c,
-  0x583d, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5844, 0x5845,
-  0x5846, 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584d, 0x584e,
-  0x584f, 0x5850, 0x5851, 0x5852, 0x5853, 0x5854, 0x5855, 0x5856,
-  0x5857, 0x5858, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585e,
-  0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5865, 0x5866,
-  0x5867, 0x5868, 0x5869, 0x586a, 0x586b, 0x586c, 0x586d, 0x586e,
-  0x586f, 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876,
-  0x5877, 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587e,
-  0x5921, 0x5922, 0x5923, 0x5924, 0x5925, 0x5926, 0x5927, 0x5928,
-  0x592a, 0x592b, 0x592c, 0x592d, 0x592e, 0x592f, 0x5930, 0x5931,
-  0x5932, 0x5933, 0x5934, 0x5935, 0x5936, 0x5937, 0x5938, 0x5939,
-  0x593a, 0x593b, 0x593c, 0x5929, 0x593d, 0x593e, 0x593f, 0x5940,
-  0x5941, 0x5942, 0x5943, 0x5944, 0x5945, 0x5946, 0x5947, 0x5948,
-  0x5949, 0x594a, 0x594b, 0x594c, 0x594d, 0x594e, 0x594f, 0x5950,
-  0x5951, 0x5952, 0x5953, 0x5954, 0x5955, 0x5956, 0x5957, 0x5958,
-  0x5959, 0x595a, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f, 0x5960,
-  0x5961, 0x5962, 0x5963, 0x5964, 0x5965, 0x5966, 0x5974, 0x5967,
-  0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f,
-  0x5970, 0x5971, 0x5972, 0x5973, 0x5975, 0x5976, 0x5977, 0x5978,
-  0x5979, 0x597a, 0x597b, 0x597c, 0x597d, 0x597e, 0x5a21, 0x5a22,
-  0x5a23, 0x5a24, 0x5a25, 0x5a26, 0x5a27, 0x5a28, 0x5a29, 0x5a2a,
-  0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, 0x5a30, 0x5a31, 0x5a32,
-  0x5a33, 0x5a34, 0x5a35, 0x5a36, 0x3866, 0x5a37, 0x5a38, 0x5a39,
-  0x5a3a, 0x5a3b, 0x5a3c, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a40, 0x5a41,
-  0x5a42, 0x5a43, 0x5a44, 0x5a45, 0x5a46, 0x5a47, 0x5a48, 0x5a49,
-  0x5a4a, 0x5a4b, 0x5a6d, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50,
-  0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x5a56, 0x5a57, 0x5a58,
-  0x5a59, 0x5a5a, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60,
-  0x5a61, 0x5a62, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a67, 0x5a68,
-  0x5a69, 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71,
-  0x5a72, 0x5a73, 0x5a74, 0x5a75, 0x5a76, 0x5a77, 0x5a78, 0x5a79,
-  0x5a7a, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5b21, 0x5b22, 0x5b23,
-  0x5b24, 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b,
-  0x5b2c, 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b32, 0x5b33,
-  0x5b34, 0x5b35, 0x5b36, 0x5b37, 0x5b38, 0x5b39, 0x5b3a, 0x5b3b,
-  0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b40, 0x5b41, 0x5b42, 0x5b43,
-  0x5b44, 0x5b45, 0x5b46, 0x5b47, 0x5b48, 0x5b49, 0x5b4a, 0x5b4b,
-  0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, 0x5b50, 0x5b51, 0x5b52, 0x5b53,
-  0x5b54, 0x5b55, 0x5b56, 0x5b57, 0x5b58, 0x5b59, 0x5b5a, 0x5b5b,
-  0x5b5c, 0x5b5d, 0x5b5e, 0x5b5f, 0x5b60, 0x5b61, 0x5b62, 0x5b63,
-  0x5b64, 0x5b65, 0x5b66, 0x5b67, 0x5b68, 0x5b69, 0x5b6a, 0x5b6b,
-  0x5b6c, 0x5b6d, 0x5b6e, 0x5b70, 0x5b71, 0x5b72, 0x5b73, 0x5b6f,
-  0x5b74, 0x5b75, 0x5b76, 0x5b77, 0x5b78, 0x5b79, 0x5b7a, 0x5b7b,
-  0x5b7c, 0x5b7d, 0x5b7e, 0x5c21, 0x5c22, 0x5c23, 0x5c24, 0x5c25,
-  0x5c26, 0x5c27, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2c, 0x5c2d,
-  0x5c2e, 0x5c2f, 0x5c30, 0x5c31, 0x5c32, 0x5c33, 0x5c34, 0x5c35,
-  0x5c36, 0x5c37, 0x5c38, 0x5c39, 0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d,
-  0x5c3e, 0x5c3f, 0x5c40, 0x5c41, 0x5c42, 0x5c43, 0x5c44, 0x5c45,
-  0x5c46, 0x5c47, 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4d,
-  0x5c4e, 0x5c4f, 0x5c50, 0x5c51, 0x5c52, 0x5c53, 0x5c54, 0x5c55,
-  0x5c56, 0x5c57, 0x5c58, 0x5c59, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d,
-  0x5c5e, 0x5c5f, 0x5c60, 0x5c61, 0x5c62, 0x5c63, 0x5c64, 0x5c65,
-  0x5c66, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d,
-  0x5c6e, 0x5c6f, 0x5c70, 0x5c71, 0x5c72, 0x5c73, 0x5c74, 0x5c75,
-  0x5c76, 0x5c77, 0x5c78, 0x5c79, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d,
-  0x5c7e, 0x5d21, 0x5d22, 0x5d23, 0x5d24, 0x5d25, 0x5d26, 0x5d27,
-  0x5d28, 0x5d29, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2d, 0x5d2e, 0x5d2f,
-  0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d34, 0x5d35, 0x5d36, 0x5d37,
-  0x5d38, 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3d, 0x5d3e, 0x5d3f,
-  0x5d40, 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d47,
-  0x5d48, 0x5d49, 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4d, 0x5d4e, 0x5d4f,
-  0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57,
-  0x5d58, 0x5d59, 0x5d5a, 0x5d5b, 0x5d5c, 0x5d5d, 0x5d5e, 0x5d5f,
-  0x5d60, 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67,
-  0x5d68, 0x5d69, 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6d, 0x5d6e, 0x5d6f,
-  0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d74, 0x5d75, 0x5d76, 0x5d77,
-  0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5e21,
-  0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e26, 0x5e27, 0x5e28, 0x5e29,
-  0x5e2a, 0x5e2b, 0x5e2c, 0x5e2d, 0x5e2e, 0x5e2f, 0x5e30, 0x5e31,
-  0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e37, 0x5e38, 0x5e39,
-  0x5e3f, 0x5e3a, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e3e, 0x5e40, 0x5e41,
-  0x5e42, 0x5e43, 0x5e44, 0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49,
-  0x5e4e, 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4d, 0x5e4f, 0x5e50, 0x5e51,
-  0x5e52, 0x5e53, 0x5e54, 0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59,
-  0x5e5a, 0x5e5b, 0x5e5c, 0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61,
-  0x5e62, 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69,
-  0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f, 0x5e72, 0x5e70,
-  0x5e71, 0x5e73, 0x5e74, 0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79,
-  0x5e7a, 0x5e7b, 0x5e7c, 0x5e7d, 0x5e7e, 0x5f21, 0x5f22, 0x5f23,
-  0x5f24, 0x5f25, 0x5f26, 0x5f27, 0x5f28, 0x5f29, 0x5f2a, 0x5f2b,
-  0x5f2c, 0x5f2d, 0x5f2e, 0x5f2f, 0x5f30, 0x5f32, 0x5f31, 0x5f33,
-  0x5f34, 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f39, 0x5f3a, 0x5f3b,
-  0x5f3c, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f40, 0x5f41, 0x5f42, 0x5f43,
-  0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, 0x5f4a, 0x5f4b,
-  0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f50, 0x5f51, 0x5f52, 0x5f53,
-  0x5f54, 0x5f55, 0x5f56, 0x5f57, 0x5f58, 0x5f59, 0x5f5a, 0x5f5b,
-  0x5f5c, 0x5f5d, 0x5f6f, 0x5f5e, 0x5f5f, 0x5f60, 0x5f61, 0x5f62,
-  0x5f63, 0x5f64, 0x5f65, 0x5f66, 0x5f67, 0x5f68, 0x5f69, 0x5f6a,
-  0x5f6b, 0x5f6c, 0x5f6d, 0x5f6e, 0x5f70, 0x5f71, 0x5f72, 0x5f73,
-  0x5f74, 0x5f75, 0x5f76, 0x5f77, 0x5f78, 0x5f79, 0x5f7a, 0x5f7b,
-  0x5f7c, 0x5f7d, 0x5f7e, 0x6021, 0x6022, 0x6023, 0x6024, 0x6025,
-  0x6026, 0x6027, 0x6028, 0x6029, 0x602a, 0x602b, 0x602c, 0x602d,
-  0x602e, 0x602f, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6035,
-  0x6036, 0x6037, 0x6038, 0x6039, 0x603a, 0x603b, 0x603c, 0x603d,
-  0x603e, 0x603f, 0x6040, 0x6041, 0x6042, 0x6043, 0x6044, 0x6045,
-  0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604b, 0x604c, 0x604d,
-  0x604e, 0x604f, 0x6050, 0x6051, 0x6052, 0x6053, 0x6054, 0x6055,
-  0x6056, 0x6057, 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, 0x605d,
-  0x6064, 0x605e, 0x605f, 0x6060, 0x6061, 0x6062, 0x6063, 0x6065,
-  0x6066, 0x6067, 0x6068, 0x6069, 0x606a, 0x606b, 0x606c, 0x606d,
-  0x606e, 0x606f, 0x6070, 0x6071, 0x6072, 0x6073, 0x6074, 0x6075,
-  0x6076, 0x6077, 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d,
-  0x607e, 0x6121, 0x6122, 0x6123, 0x6124, 0x6125, 0x6126, 0x6127,
-  0x6128, 0x6129, 0x612a, 0x612b, 0x612c, 0x612d, 0x612e, 0x612f,
-  0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137,
-  0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x613f,
-  0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x6147,
-  0x6148, 0x6149, 0x614a, 0x614b, 0x614c, 0x614d, 0x614e, 0x614f,
-  0x6150, 0x6151, 0x6152, 0x6154, 0x6155, 0x6156, 0x6153, 0x6157,
-  0x6158, 0x6159, 0x615a, 0x615b, 0x615c, 0x615d, 0x615e, 0x615f,
-  0x6160, 0x6161, 0x6162, 0x6163, 0x6164, 0x6165, 0x6166, 0x6167,
-  0x6168, 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f,
-  0x6170, 0x6171, 0x6172, 0x6173, 0x6174, 0x6175, 0x6176, 0x6177,
-  0x6178, 0x6179, 0x617a, 0x617b, 0x617d, 0x617e, 0x6221, 0x6222,
-  0x6223, 0x6224, 0x617c, 0x622d, 0x6225, 0x6226, 0x6227, 0x6228,
-  0x6229, 0x622a, 0x622b, 0x622c, 0x622f, 0x6230, 0x6231, 0x6232,
-  0x622e, 0x6233, 0x6234, 0x6235, 0x6236, 0x6237, 0x6238, 0x6239,
-  0x623a, 0x623b, 0x623c, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241,
-  0x6242, 0x6243, 0x6245, 0x6246, 0x6244, 0x6247, 0x6248, 0x6249,
-  0x624a, 0x624b, 0x624c, 0x624d, 0x624e, 0x624f, 0x6250, 0x6251,
-  0x6252, 0x6253, 0x6254, 0x6255, 0x6256, 0x6257, 0x6258, 0x6259,
-  0x625a, 0x625b, 0x625c, 0x625d, 0x625e, 0x625f, 0x6260, 0x6261,
-  0x6262, 0x6263, 0x6264, 0x6265, 0x6266, 0x6267, 0x6268, 0x6269,
-  0x626a, 0x626b, 0x626c, 0x626d, 0x626e, 0x626f, 0x6270, 0x6271,
-  0x6272, 0x6273, 0x6274, 0x6275, 0x6276, 0x6277, 0x6278, 0x6279,
-  0x627a, 0x627b, 0x627c, 0x627d, 0x627e, 0x6321, 0x6322, 0x6323,
-  0x6324, 0x6325, 0x6326, 0x6327, 0x6328, 0x6329, 0x632a, 0x632b,
-  0x632c, 0x632d, 0x632e, 0x632f, 0x6330, 0x6331, 0x6332, 0x6333,
-  0x6334, 0x6335, 0x6336, 0x6337, 0x6338, 0x6339, 0x633a, 0x633b,
-  0x633c, 0x633d, 0x633e, 0x633f, 0x6340, 0x6341, 0x6342, 0x6343,
-  0x6344, 0x6345, 0x6346, 0x6347, 0x6348, 0x6349, 0x634a, 0x634b,
-  0x634c, 0x634d, 0x634e, 0x634f, 0x6350, 0x6351, 0x6352, 0x6353,
-  0x6354, 0x6355, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b,
-  0x635c, 0x635d, 0x635e, 0x635f, 0x6360, 0x6361, 0x6362, 0x6363,
-  0x6364, 0x6365, 0x6366, 0x6367, 0x6368, 0x6369, 0x636a, 0x636b,
-  0x636c, 0x636d, 0x636e, 0x636f, 0x6370, 0x6371, 0x6372, 0x6373,
-  0x6374, 0x6375, 0x6376, 0x6377, 0x6378, 0x6379, 0x637a, 0x637b,
-  0x637c, 0x637d, 0x637e, 0x6421, 0x6422, 0x6423, 0x6424, 0x6425,
-  0x6426, 0x6427, 0x6428, 0x6429, 0x642a, 0x642b, 0x642c, 0x642d,
-  0x642e, 0x642f, 0x6430, 0x6431, 0x6432, 0x6433, 0x6434, 0x6435,
-  0x6436, 0x6437, 0x6438, 0x6439, 0x643a, 0x643b, 0x643c, 0x643d,
-  0x643e, 0x643f, 0x6440, 0x6441, 0x6442, 0x6443, 0x6444, 0x6445,
-  0x6446, 0x6447, 0x6448, 0x6449, 0x644a, 0x644b, 0x644c, 0x644d,
-  0x644e, 0x644f, 0x6450, 0x6451, 0x6452, 0x6453, 0x6454, 0x6455,
-  0x6456, 0x6457, 0x6458, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d,
-  0x645e, 0x645f, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465,
-  0x6466, 0x6467, 0x6468, 0x6469, 0x646a, 0x646b, 0x646c, 0x646d,
-  0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475,
-  0x6476, 0x6477, 0x6478, 0x6479, 0x647a, 0x647b, 0x647c, 0x647d,
-  0x647e, 0x6521, 0x6522, 0x6523, 0x6524, 0x6525, 0x6526, 0x6527,
-  0x6528, 0x6529, 0x652a, 0x652b, 0x652c, 0x652d, 0x652e, 0x652f,
-  0x6530, 0x6531, 0x6532, 0x6533, 0x6534, 0x6535, 0x653b, 0x6536,
-  0x6537, 0x6538, 0x6539, 0x653a, 0x653c, 0x653d, 0x653e, 0x653f,
-  0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0x6546, 0x6547,
-  0x6548, 0x6549, 0x654a, 0x654b, 0x654c, 0x654d, 0x654f, 0x6550,
-  0x654e, 0x6551, 0x6552, 0x6553, 0x6554, 0x6555, 0x6556, 0x6557,
-  0x6558, 0x6559, 0x655a, 0x655b, 0x655c, 0x655d, 0x655e, 0x655f,
-  0x6560, 0x6561, 0x6562, 0x6563, 0x6564, 0x6565, 0x6566, 0x6568,
-  0x6567, 0x6569, 0x656a, 0x656b, 0x656c, 0x656d, 0x656e, 0x656f,
-  0x6570, 0x6571, 0x6572, 0x6573, 0x6574, 0x6575, 0x6576, 0x6577,
-  0x6578, 0x6579, 0x657a, 0x657c, 0x657b, 0x657d, 0x657e, 0x6621,
-  0x6622, 0x6623, 0x6624, 0x6625, 0x6626, 0x6627, 0x6628, 0x6629,
-  0x662a, 0x662b, 0x662c, 0x662d, 0x662e, 0x662f, 0x6630, 0x6631,
-  0x6632, 0x6633, 0x6634, 0x6635, 0x6636, 0x6637, 0x6638, 0x6639,
-  0x663a, 0x663b, 0x663c, 0x663d, 0x663e, 0x663f, 0x6640, 0x6641,
-  0x6642, 0x6643, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649,
-  0x664a, 0x664b, 0x664c, 0x664d, 0x664e, 0x664f, 0x6650, 0x6651,
-  0x6652, 0x6653, 0x6654, 0x6655, 0x6656, 0x6657, 0x6658, 0x6659,
-  0x665a, 0x665b, 0x665c, 0x665d, 0x665e, 0x665f, 0x6660, 0x6661,
-  0x6662, 0x6663, 0x6664, 0x6665, 0x6666, 0x6667, 0x6668, 0x6669,
-  0x666a, 0x666b, 0x666c, 0x666d, 0x666e, 0x666f, 0x6670, 0x6671,
-  0x6672, 0x6673, 0x6675, 0x6676, 0x6677, 0x6678, 0x6679, 0x667a,
-  0x667b, 0x667c, 0x667d, 0x667e, 0x6721, 0x6722, 0x6723, 0x6724,
-  0x6725, 0x6726, 0x6727, 0x6728, 0x6729, 0x672a, 0x672b, 0x672c,
-  0x672d, 0x672e, 0x672f, 0x6730, 0x6731, 0x6732, 0x6733, 0x6734,
-  0x6735, 0x6736, 0x6737, 0x6738, 0x6739, 0x673a, 0x673b, 0x673c,
-  0x673d, 0x673e, 0x673f, 0x6740, 0x6741, 0x6742, 0x6743, 0x6744,
-  0x6745, 0x6746, 0x6747, 0x6748, 0x6749, 0x674a, 0x674b, 0x674c,
-  0x674d, 0x674e, 0x674f, 0x6750, 0x6751, 0x6752, 0x6753, 0x6754,
-  0x6755, 0x6756, 0x6757, 0x6758, 0x6759, 0x675a, 0x675b, 0x675c,
-  0x675d, 0x675e, 0x675f, 0x6760, 0x6761, 0x6762, 0x6763, 0x6764,
-  0x6765, 0x6766, 0x676a, 0x6767, 0x6768, 0x6769, 0x676b, 0x676c,
-  0x676d, 0x676e, 0x676f, 0x6770, 0x6771, 0x6772, 0x6773, 0x6774,
-  0x6776, 0x6777, 0x6778, 0x6779, 0x6775, 0x677a, 0x677b, 0x677c,
-  0x677d, 0x6828, 0x677e, 0x6821, 0x6822, 0x6823, 0x6824, 0x6825,
-  0x6826, 0x6827, 0x6829, 0x682a, 0x682b, 0x682c, 0x682d, 0x682e,
-  0x682f, 0x6830, 0x6831, 0x6832, 0x6833, 0x6834, 0x6835, 0x6836,
-  0x6837, 0x6838, 0x6839, 0x683a, 0x683b, 0x683c, 0x683d, 0x683e,
-  0x683f, 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846,
-  0x6847, 0x6848, 0x6849, 0x684a, 0x684b, 0x684c, 0x684d, 0x684e,
-  0x684f, 0x6850, 0x6851, 0x6852, 0x6853, 0x6854, 0x6855, 0x6856,
-  0x6857, 0x6858, 0x6859, 0x685a, 0x685b, 0x685c, 0x685d, 0x685e,
-  0x685f, 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866,
-  0x6867, 0x6868, 0x6869, 0x686a, 0x686b, 0x686c, 0x686d, 0x686e,
-  0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6874, 0x6875, 0x6876,
-  0x6877, 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e,
-  0x6921, 0x6922, 0x6923, 0x6924, 0x6925, 0x6926, 0x6927, 0x6928,
-  0x6929, 0x692a, 0x692b, 0x692c, 0x692d, 0x692e, 0x692f, 0x6930,
-  0x6931, 0x6932, 0x6933, 0x6934, 0x6935, 0x6936, 0x6937, 0x6938,
-  0x6939, 0x693a, 0x693b, 0x693c, 0x693d, 0x693e, 0x693f, 0x6940,
-  0x6941, 0x6942, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, 0x6948,
-  0x6949, 0x694a, 0x694c, 0x694d, 0x694b, 0x694e, 0x694f, 0x6950,
-  0x6951, 0x6952, 0x6953, 0x6954, 0x6955, 0x6956, 0x6957, 0x6958,
-  0x6959, 0x695a, 0x695b, 0x695c, 0x695d, 0x695e, 0x695f, 0x6960,
-  0x6961, 0x6962, 0x6963, 0x6964, 0x6965, 0x6966, 0x6967, 0x6968,
-  0x6969, 0x696a, 0x696b, 0x696c, 0x696d, 0x696e, 0x696f, 0x6970,
-  0x6971, 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x6977, 0x6978,
-  0x6979, 0x697a, 0x697b, 0x697c, 0x697d, 0x697e, 0x6a21, 0x6a22,
-  0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a28, 0x6a29, 0x6a2a,
-  0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a2f, 0x6a30, 0x6a31, 0x6a32,
-  0x6a33, 0x6a34, 0x6a35, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a,
-  0x6a3b, 0x6a3c, 0x6a3d, 0x6a3e, 0x6a3f, 0x6a40, 0x6a41, 0x6a42,
-  0x6a43, 0x6a44, 0x6a45, 0x6a46, 0x6a47, 0x6a48, 0x6a49, 0x6a4a,
-  0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a50, 0x6a51, 0x6a52,
-  0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a58, 0x6a59, 0x6a5a,
-  0x6a5b, 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a61, 0x6a62,
-  0x6a63, 0x6a64, 0x6a65, 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a,
-  0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x6a70, 0x6a71, 0x6a72,
-  0x6a73, 0x6a74, 0x6a75, 0x6a76, 0x6a77, 0x6a78, 0x6a79, 0x6a7a,
-  0x6a7b, 0x6a7c, 0x6a7d, 0x6a7e, 0x6b21, 0x6b22, 0x6b23, 0x6b24,
-  0x6b25, 0x6b26, 0x6b27, 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c,
-  0x6b2d, 0x6b2e, 0x6b2f, 0x6b30, 0x6b31, 0x6b32, 0x6b33, 0x6b34,
-  0x6b35, 0x6b36, 0x6b37, 0x6b38, 0x6b39, 0x6b3a, 0x6b3b, 0x6b3c,
-  0x6b3d, 0x6b3e, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b43, 0x6b44,
-  0x6b45, 0x6b46, 0x6b47, 0x6b48, 0x6b49, 0x6b50, 0x6b4a, 0x6b4b,
-  0x6b4c, 0x6b4d, 0x6b52, 0x6b4e, 0x6b4f, 0x6b51, 0x6b53, 0x6b54,
-  0x6b55, 0x6b56, 0x6b57, 0x6b58, 0x6b59, 0x6b5a, 0x6b5b, 0x6b5c,
-  0x6b5e, 0x6b5d, 0x6b5f, 0x6b60, 0x6b61, 0x6b62, 0x6b63, 0x6b64,
-  0x6b65, 0x6b66, 0x6b67, 0x6b68, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6d,
-  0x6b6e, 0x6b6f, 0x6b6c, 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74,
-  0x6b76, 0x6b75, 0x6b77, 0x6b78, 0x6b79, 0x6b7a, 0x6b7b, 0x6b7c,
-  0x6b7d, 0x6b7e, 0x6c21, 0x6c22, 0x6c23, 0x6c24, 0x6c25, 0x6c26,
-  0x6c27, 0x6c28, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c2e,
-  0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x6c36,
-  0x6c37, 0x6c38, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3d, 0x6c3e,
-  0x6c3f, 0x6c40, 0x6c41, 0x6c42, 0x6c43, 0x6c44, 0x6c45, 0x6c46,
-  0x6c47, 0x6c48, 0x6c49, 0x6c4a, 0x6c4b, 0x6c4c, 0x6c4e, 0x6c4f,
-  0x6c4d, 0x6c50, 0x6c51, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c56,
-  0x6c57, 0x6c58, 0x6c59, 0x6c5a, 0x6c5b, 0x6c5c, 0x6c5d, 0x6c5e,
-  0x6c5f, 0x6c60, 0x6c61, 0x6c62, 0x6c63, 0x6c64, 0x6c65, 0x6c66,
-  0x6c67, 0x6c68, 0x6c69, 0x6c6a, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e,
-  0x6c6f, 0x6c70, 0x6c71, 0x6c72, 0x6c73, 0x6c74, 0x6c75, 0x6c76,
-  0x6c77, 0x6c78, 0x6c79, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7d, 0x6c7e,
-  0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d25, 0x6d26, 0x6d27, 0x6d28,
-  0x6d29, 0x6d2a, 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f, 0x6d30,
-  0x6d31, 0x6d32, 0x6d33, 0x6d34, 0x6d35, 0x6d36, 0x6d37, 0x6d38,
-  0x6d39, 0x6d3a, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e, 0x6d3f, 0x6d40,
-  0x6d41, 0x6d42, 0x6d43, 0x6d44, 0x6d45, 0x6d46, 0x6d47, 0x6d48,
-  0x6d49, 0x6d4a, 0x6d4b, 0x6d4c, 0x6d4d, 0x6d4e, 0x6d4f, 0x6d50,
-  0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6d56, 0x6d57, 0x6d58,
-  0x6d59, 0x6d5a, 0x6d5b, 0x6d5c, 0x6d5d, 0x6d5e, 0x6d5f, 0x6d60,
-  0x6d61, 0x6d62, 0x6d63,
-};
-
-static const Summary16 jisx0212_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x4000 },
-  {    1, 0x0000 }, {    1, 0x0000 }, {    1, 0xc652 }, {    8, 0x8500 },
-  {   11, 0xffff }, {   27, 0xff7e }, {   41, 0xffff }, {   57, 0xff7f },
-  /* 0x0100 */
-  {   72, 0xffff }, {   88, 0xffcf }, {  102, 0xcff7 }, {  115, 0xffff },
-  {  131, 0x3fff }, {  145, 0xffff }, {  161, 0xffff }, {  177, 0x7fff },
-  {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 }, {  192, 0x0000 },
-  {  192, 0xe000 }, {  195, 0x1fff }, {  208, 0x0000 }, {  208, 0x0020 },
-  /* 0x0200 */
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 }, {  209, 0x0000 },
-  {  209, 0x0080 }, {  210, 0x2f00 }, {  215, 0x0000 }, {  215, 0x0000 },
-  /* 0x0300 */
-  {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 },
-  {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 }, {  215, 0x0000 },
-  {  215, 0xd770 }, {  224, 0x0001 }, {  225, 0xfc00 }, {  231, 0x0001 },
-  {  232, 0x7c04 }, {  238, 0x0000 }, {  238, 0x0000 }, {  238, 0x0000 },
-  /* 0x0400 */
-  {  238, 0xdffc }, {  251, 0x0000 }, {  251, 0x0000 }, {  251, 0x0000 },
-  {  251, 0x0000 }, {  251, 0xdffc },
-};
-static const Summary16 jisx0212_uni2indx_page21[3] = {
-  /* 0x2100 */
-  {  264, 0x0000 }, {  264, 0x0040 }, {  265, 0x0004 },
-};
-static const Summary16 jisx0212_uni2indx_page4e[1307] = {
-  /* 0x4e00 */
-  {  266, 0x1034 }, {  270, 0x8004 }, {  272, 0xc918 }, {  278, 0x0021 },
-  {  280, 0x0093 }, {  284, 0x1402 }, {  287, 0x0308 }, {  290, 0x8230 },
-  {  294, 0x2000 }, {  295, 0x20c0 }, {  298, 0x8000 }, {  299, 0x0200 },
-  {  300, 0x0008 }, {  301, 0x0c01 }, {  304, 0x8107 }, {  309, 0xe02a },
-  /* 0x4f00 */
-  {  315, 0x190d }, {  321, 0x02e4 }, {  326, 0x4000 }, {  327, 0x4aaa },
-  {  334, 0x1b05 }, {  340, 0x8154 }, {  345, 0x5409 }, {  350, 0x6782 },
-  {  357, 0x5636 }, {  365, 0xc69d }, {  374, 0x0000 }, {  374, 0x7a84 },
-  {  381, 0xbb63 }, {  391, 0x1004 }, {  393, 0x0005 }, {  395, 0xb005 },
-  /* 0x5000 */
-  {  400, 0x5493 }, {  407, 0x7989 }, {  415, 0x4084 }, {  418, 0x082d },
-  {  423, 0x5467 }, {  431, 0x828e }, {  437, 0x24cd }, {  444, 0x0003 },
-  {  446, 0xc45a }, {  453, 0xd85d }, {  462, 0x8407 }, {  467, 0x2601 },
-  {  471, 0x5099 }, {  477, 0xb119 }, {  484, 0x8354 }, {  490, 0x4446 },
-  /* 0x5100 */
-  {  495, 0x79c8 }, {  503, 0x7a81 }, {  510, 0xb188 }, {  516, 0x033a },
-  {  522, 0x8404 }, {  525, 0x81a8 }, {  530, 0x0050 }, {  532, 0x4000 },
-  {  533, 0x4818 }, {  537, 0x2100 }, {  539, 0x200a }, {  542, 0xd500 },
-  {  547, 0x8104 }, {  550, 0x412e }, {  556, 0x4024 }, {  559, 0x009c },
-  /* 0x5200 */
-  {  563, 0x0026 }, {  566, 0x016c }, {  571, 0x0104 }, {  573, 0x1026 },
-  {  577, 0x0220 }, {  579, 0x95a0 }, {  585, 0x4043 }, {  589, 0x0380 },
-  {  592, 0x1425 }, {  597, 0x15e8 }, {  604, 0x80f0 }, {  609, 0x2dc1 },
-  {  616, 0x9151 }, {  622, 0x1852 }, {  627, 0x1722 }, {  633, 0x00d3 },
-  /* 0x5300 */
-  {  638, 0x1c09 }, {  643, 0xd90a }, {  650, 0x3ba0 }, {  657, 0x7025 },
-  {  663, 0x1804 }, {  666, 0x0a00 }, {  668, 0x302a }, {  673, 0x4204 },
-  {  676, 0x4188 }, {  680, 0x2218 }, {  684, 0x8c12 }, {  689, 0x25b4 },
-  {  696, 0x8021 }, {  699, 0x642c }, {  705, 0x00c1 }, {  708, 0x0020 },
-  /* 0x5400 */
-  {  709, 0x0004 }, {  710, 0x0408 }, {  712, 0x8582 }, {  717, 0x0032 },
-  {  720, 0xa098 }, {  725, 0x4000 }, {  726, 0x6ad4 }, {  734, 0x8010 },
-  {  736, 0x232a }, {  742, 0x9062 }, {  747, 0x66c2 }, {  754, 0x8e82 },
-  {  760, 0x6440 }, {  764, 0x0000 }, {  764, 0x9401 }, {  768, 0xd040 },
-  /* 0x5500 */
-  {  772, 0x7323 }, {  780, 0x0020 }, {  781, 0x0c00 }, {  783, 0x3864 },
-  {  789, 0x2682 }, {  794, 0x4d03 }, {  800, 0x0053 }, {  804, 0x8000 },
-  {  805, 0xc146 }, {  811, 0x009e }, {  816, 0x2018 }, {  819, 0x8004 },
-  {  821, 0x5a4a }, {  828, 0x498e }, {  835, 0x0204 }, {  837, 0x8040 },
-  /* 0x5600 */
-  {  839, 0xe520 }, {  845, 0x0207 }, {  849, 0x1000 }, {  850, 0xbaa9 },
-  {  859, 0xaa5b }, {  868, 0x4010 }, {  870, 0xa24f }, {  878, 0x0026 },
-  {  881, 0x1930 }, {  886, 0xe620 }, {  892, 0x3bc0 }, {  899, 0x408a },
-  {  903, 0xbe20 }, {  910, 0xb201 }, {  915, 0x29f2 }, {  923, 0x00c2 },
-  /* 0x5700 */
-  {  926, 0x1486 }, {  931, 0x2c22 }, {  936, 0xd63d }, {  946, 0xe018 },
-  {  951, 0x3060 }, {  955, 0x0004 }, {  956, 0xe9a4 }, {  964, 0x5ebb },
-  {  975, 0x100a }, {  978, 0xf6b0 }, {  987, 0x1382 }, {  992, 0x2100 },
-  {  994, 0x9180 }, {  998, 0x6020 }, { 1001, 0x22d2 }, { 1007, 0xe161 },
-  /* 0x5800 */
-  { 1014, 0x3318 }, { 1020, 0xc800 }, { 1023, 0x20c1 }, { 1027, 0x8204 },
-  { 1030, 0xb200 }, { 1034, 0x8021 }, { 1037, 0x0192 }, { 1041, 0x9100 },
-  { 1044, 0xb783 }, { 1053, 0x2051 }, { 1057, 0x0247 }, { 1062, 0x1006 },
-  { 1065, 0x6114 }, { 1070, 0x2455 }, { 1076, 0x0206 }, { 1079, 0x0008 },
-  /* 0x5900 */
-  { 1080, 0x1860 }, { 1084, 0x201c }, { 1088, 0x811a }, { 1093, 0x8069 },
-  { 1098, 0x0048 }, { 1100, 0xea0c }, { 1107, 0xa80a }, { 1112, 0x1a64 },
-  { 1118, 0x5800 }, { 1121, 0x80a4 }, { 1125, 0xe090 }, { 1130, 0x1489 },
-  { 1135, 0x251a }, { 1141, 0xe004 }, { 1145, 0xc098 }, { 1150, 0x0096 },
-  /* 0x5a00 */
-  { 1154, 0x7011 }, { 1159, 0x400c }, { 1162, 0x2598 }, { 1168, 0x0001 },
-  { 1169, 0x11b0 }, { 1174, 0x4021 }, { 1177, 0x20a8 }, { 1181, 0x4c80 },
-  { 1185, 0x0800 }, { 1186, 0xd249 }, { 1193, 0x1085 }, { 1197, 0x8d2e },
-  { 1205, 0x8150 }, { 1209, 0x1400 }, { 1211, 0x4421 }, { 1215, 0x2060 },
-  /* 0x5b00 */
-  { 1218, 0x0103 }, { 1221, 0x2a80 }, { 1225, 0x2022 }, { 1228, 0x0110 },
-  { 1230, 0x1802 }, { 1233, 0x4044 }, { 1236, 0xc100 }, { 1239, 0xf000 },
-  { 1243, 0x4452 }, { 1248, 0x005b }, { 1253, 0xb300 }, { 1258, 0x1486 },
-  { 1263, 0xa003 }, { 1267, 0x07c0 }, { 1272, 0x8001 }, { 1274, 0x2012 },
-  /* 0x5c00 */
-  { 1277, 0x1000 }, { 1278, 0xc080 }, { 1281, 0x5a48 }, { 1287, 0x0065 },
-  { 1291, 0x0000 }, { 1291, 0x1600 }, { 1294, 0x238c }, { 1300, 0x3c31 },
-  { 1307, 0x8580 }, { 1311, 0xa004 }, { 1314, 0x044d }, { 1319, 0x0434 },
-  { 1323, 0x0a00 }, { 1325, 0x2084 }, { 1328, 0x4000 }, { 1329, 0x0016 },
-  /* 0x5d00 */
-  { 1332, 0x2042 }, { 1335, 0x0004 }, { 1336, 0x08d8 }, { 1341, 0xa212 },
-  { 1346, 0x054c }, { 1351, 0x8222 }, { 1355, 0x2417 }, { 1361, 0xc601 },
-  { 1366, 0x050a }, { 1370, 0x8a3c }, { 1377, 0x0881 }, { 1380, 0x0315 },
-  { 1385, 0x4888 }, { 1389, 0x0301 }, { 1392, 0x0211 }, { 1395, 0x0300 },
-  /* 0x5e00 */
-  { 1397, 0x2081 }, { 1400, 0x8134 }, { 1405, 0x4101 }, { 1408, 0x4024 },
-  { 1411, 0x0a00 }, { 1413, 0x5943 }, { 1420, 0x7d00 }, { 1426, 0x0001 },
-  { 1427, 0x4801 }, { 1430, 0x0000 }, { 1430, 0x1534 }, { 1436, 0xe00a },
-  { 1441, 0x5840 }, { 1445, 0x5036 }, { 1451, 0x0820 }, { 1453, 0x0000 },
-  /* 0x5f00 */
-  { 1453, 0x41c4 }, { 1458, 0x3200 }, { 1461, 0x591e }, { 1469, 0xa851 },
-  { 1475, 0x20b1 }, { 1480, 0x0911 }, { 1484, 0x8099 }, { 1489, 0x6534 },
-  { 1496, 0xa200 }, { 1499, 0x3040 }, { 1502, 0x9894 }, { 1508, 0x0103 },
-  { 1511, 0x0b90 }, { 1516, 0x401f }, { 1522, 0xf706 }, { 1531, 0x144c },
-  /* 0x6000 */
-  { 1536, 0x2480 }, { 1539, 0x8598 }, { 1545, 0x2010 }, { 1547, 0x0028 },
-  { 1549, 0x1381 }, { 1554, 0x20d2 }, { 1559, 0x0082 }, { 1561, 0xc002 },
-  { 1564, 0x4544 }, { 1569, 0x612a }, { 1575, 0x0134 }, { 1579, 0x4883 },
-  { 1584, 0xcf14 }, { 1592, 0x6a30 }, { 1598, 0x0024 }, { 1600, 0x3124 },
-  /* 0x6100 */
-  { 1605, 0x1484 }, { 1609, 0x52df }, { 1619, 0x0c04 }, { 1622, 0x02e3 },
-  { 1628, 0x0262 }, { 1632, 0x4000 }, { 1633, 0x1001 }, { 1635, 0x9904 },
-  { 1640, 0x281b }, { 1646, 0xb18c }, { 1653, 0x2521 }, { 1658, 0x1300 },
-  { 1661, 0xc007 }, { 1666, 0xf020 }, { 1671, 0xb2a6 }, { 1679, 0x0000 },
-  /* 0x6200 */
-  { 1679, 0x009a }, { 1683, 0x1028 }, { 1686, 0x0a8d }, { 1692, 0x2200 },
-  { 1694, 0x105c }, { 1699, 0x1457 }, { 1706, 0xa010 }, { 1709, 0x2408 },
-  { 1712, 0xe000 }, { 1715, 0x0001 }, { 1716, 0x0140 }, { 1718, 0xc4c8 },
-  { 1724, 0x4010 }, { 1726, 0x0460 }, { 1729, 0x0400 }, { 1730, 0x3014 },
-  /* 0x6300 */
-  { 1734, 0x2c18 }, { 1739, 0x0149 }, { 1743, 0x2600 }, { 1746, 0x1260 },
-  { 1750, 0x4c5e }, { 1758, 0x091c }, { 1763, 0x3060 }, { 1767, 0xb132 },
-  { 1774, 0x0494 }, { 1778, 0x4631 }, { 1784, 0xe050 }, { 1789, 0x2000 },
-  { 1790, 0x4122 }, { 1794, 0x103a }, { 1799, 0x1421 }, { 1803, 0x032c },
-  /* 0x6400 */
-  { 1808, 0x0600 }, { 1810, 0x4115 }, { 1815, 0x8635 }, { 1822, 0xa021 },
-  { 1826, 0x8800 }, { 1828, 0xbc1e }, { 1837, 0x200b }, { 1841, 0x2818 },
-  { 1845, 0x80a0 }, { 1848, 0xab03 }, { 1855, 0x114a }, { 1860, 0xe008 },
-  { 1864, 0x5e10 }, { 1870, 0x00a3 }, { 1874, 0x2630 }, { 1879, 0x88a1 },
-  /* 0x6500 */
-  { 1884, 0x8712 }, { 1890, 0xca58 }, { 1897, 0x4244 }, { 1901, 0x3402 },
-  { 1905, 0x0288 }, { 1908, 0x8015 }, { 1912, 0x0881 }, { 1915, 0x2400 },
-  { 1917, 0x0422 }, { 1920, 0x2124 }, { 1924, 0x4049 }, { 1928, 0x801c },
-  { 1932, 0x4304 }, { 1936, 0x8151 }, { 1941, 0x0000 }, { 1941, 0xc235 },
-  /* 0x6600 */
-  { 1948, 0x2311 }, { 1953, 0x6066 }, { 1959, 0x5e5e }, { 1969, 0x028b },
-  { 1974, 0x5461 }, { 1980, 0x1b82 }, { 1986, 0x1c03 }, { 1991, 0xdba8 },
-  { 2000, 0x3801 }, { 2004, 0x9e05 }, { 2011, 0x2011 }, { 2014, 0x8826 },
-  { 2019, 0xd10d }, { 2026, 0x8810 }, { 2029, 0x5900 }, { 2033, 0x0c00 },
-  /* 0x6700 */
-  { 2035, 0x40a0 }, { 2038, 0x1208 }, { 2041, 0x0005 }, { 2043, 0x4008 },
-  { 2045, 0x11a0 }, { 2049, 0x2030 }, { 2052, 0x5040 }, { 2055, 0x0850 },
-  { 2058, 0xc012 }, { 2062, 0x0b4a }, { 2068, 0x0000 }, { 2068, 0x3827 },
-  { 2075, 0x032d }, { 2081, 0x1284 }, { 2085, 0x0042 }, { 2087, 0x02c5 },
-  /* 0x6800 */
-  { 2092, 0x0000 }, { 2092, 0xa210 }, { 2096, 0xb180 }, { 2101, 0x880b },
-  { 2106, 0x1430 }, { 2110, 0x09a4 }, { 2115, 0xc800 }, { 2118, 0x1e27 },
-  { 2126, 0x0154 }, { 2130, 0x1540 }, { 2134, 0x462a }, { 2140, 0x0804 },
-  { 2142, 0x9120 }, { 2146, 0x324b }, { 2153, 0x3d20 }, { 2159, 0x3863 },
-  /* 0x6900 */
-  { 2166, 0x0640 }, { 2169, 0x00cb }, { 2174, 0x0000 }, { 2174, 0x092a },
-  { 2179, 0x4224 }, { 2183, 0x0880 }, { 2185, 0x1378 }, { 2192, 0x8c07 },
-  { 2198, 0x2001 }, { 2200, 0x0144 }, { 2203, 0xa962 }, { 2210, 0x1580 },
-  { 2214, 0x0120 }, { 2216, 0x00c2 }, { 2219, 0xc024 }, { 2223, 0x402a },
-  /* 0x6a00 */
-  { 2227, 0x800b }, { 2231, 0x2422 }, { 2235, 0x0111 }, { 2238, 0xc895 },
-  { 2245, 0x4660 }, { 2250, 0x0867 }, { 2256, 0x0490 }, { 2259, 0x400a },
-  { 2262, 0x0aca }, { 2268, 0xe802 }, { 2273, 0x8820 }, { 2276, 0xe013 },
-  { 2282, 0x1340 }, { 2286, 0x3071 }, { 2292, 0x1090 }, { 2295, 0x3007 },
-  /* 0x6b00 */
-  { 2300, 0x82cc }, { 2306, 0x4883 }, { 2311, 0x9910 }, { 2316, 0x8860 },
-  { 2320, 0x2440 }, { 2323, 0x2144 }, { 2327, 0x4881 }, { 2331, 0x6021 },
-  { 2335, 0x0024 }, { 2337, 0x8880 }, { 2340, 0x730d }, { 2348, 0x6301 },
-  { 2353, 0x1218 }, { 2357, 0x0440 }, { 2359, 0x40ca }, { 2364, 0x8282 },
-  /* 0x6c00 */
-  { 2368, 0x6234 }, { 2374, 0x8205 }, { 2378, 0x51c0 }, { 2383, 0x8c68 },
-  { 2389, 0xac00 }, { 2393, 0x1a14 }, { 2398, 0xa880 }, { 2402, 0x0b50 },
-  { 2407, 0x02e0 }, { 2411, 0x91b0 }, { 2417, 0x0000 }, { 2417, 0x0015 },
-  { 2420, 0xa044 }, { 2424, 0x1457 }, { 2431, 0x5a81 }, { 2437, 0x0014 },
-  /* 0x6d00 */
-  { 2439, 0xc490 }, { 2444, 0x040a }, { 2447, 0xc1c0 }, { 2452, 0x9202 },
-  { 2456, 0x0000 }, { 2456, 0xc080 }, { 2459, 0x80a2 }, { 2463, 0x1001 },
-  { 2465, 0x0084 }, { 2467, 0x01d6 }, { 2473, 0x1400 }, { 2475, 0xa290 },
-  { 2480, 0xc510 }, { 2485, 0xa840 }, { 2489, 0x8225 }, { 2494, 0x1051 },
-  /* 0x6e00 */
-  { 2498, 0x0011 }, { 2500, 0x4000 }, { 2501, 0x0084 }, { 2503, 0x1a44 },
-  { 2508, 0x8b30 }, { 2514, 0x709e }, { 2522, 0x010c }, { 2525, 0x2808 },
-  { 2528, 0x2000 }, { 2529, 0x0208 }, { 2531, 0x6081 }, { 2535, 0x880a },
-  { 2539, 0xe58b }, { 2548, 0x0000 }, { 2548, 0x6800 }, { 2551, 0x2a00 },
-  /* 0x6f00 */
-  { 2554, 0x3510 }, { 2559, 0x0d40 }, { 2563, 0xa640 }, { 2568, 0x1849 },
-  { 2573, 0x8000 }, { 2574, 0x668e }, { 2582, 0x1106 }, { 2586, 0x6000 },
-  { 2588, 0x3988 }, { 2594, 0x845d }, { 2601, 0xc1e1 }, { 2608, 0x1061 },
-  { 2612, 0x05a0 }, { 2616, 0x4400 }, { 2618, 0x0300 }, { 2620, 0x3221 },
-  /* 0x7000 */
-  { 2625, 0x20e1 }, { 2630, 0x0080 }, { 2631, 0x8009 }, { 2634, 0x1290 },
-  { 2638, 0x4f18 }, { 2645, 0x6030 }, { 2649, 0x5030 }, { 2653, 0x4060 },
-  { 2656, 0x0062 }, { 2659, 0x09f0 }, { 2665, 0x0810 }, { 2667, 0x0093 },
-  { 2671, 0x0400 }, { 2672, 0x117a }, { 2679, 0x0010 }, { 2680, 0x0400 },
-  /* 0x7100 */
-  { 2681, 0x98f8 }, { 2689, 0x4000 }, { 2690, 0xa801 }, { 2694, 0x0103 },
-  { 2697, 0x0ce2 }, { 2703, 0x5485 }, { 2709, 0x0101 }, { 2711, 0x0200 },
-  { 2712, 0x10a1 }, { 2716, 0x0c04 }, { 2719, 0x8005 }, { 2722, 0x840d },
-  { 2727, 0x1813 }, { 2732, 0x1648 }, { 2737, 0x0000 }, { 2737, 0x4100 },
-  /* 0x7200 */
-  { 2739, 0x0381 }, { 2743, 0xa488 }, { 2748, 0x8810 }, { 2751, 0x0310 },
-  { 2754, 0xc02e }, { 2760, 0x5469 }, { 2767, 0xc909 }, { 2773, 0x9982 },
-  { 2779, 0x6210 }, { 2783, 0x0808 }, { 2785, 0x6100 }, { 2788, 0x4012 },
-  { 2791, 0x1282 }, { 2795, 0x8160 }, { 2799, 0x0020 }, { 2800, 0x4c18 },
-  /* 0x7300 */
-  { 2805, 0x28b4 }, { 2811, 0x430c }, { 2816, 0x1194 }, { 2821, 0x2c26 },
-  { 2827, 0x2008 }, { 2829, 0xe145 }, { 2836, 0xdac1 }, { 2844, 0x1282 },
-  { 2848, 0x406b }, { 2854, 0xd1a9 }, { 2862, 0x2c65 }, { 2869, 0xb2a0 },
-  { 2875, 0x9a60 }, { 2881, 0x224c }, { 2886, 0x02ca }, { 2891, 0xaeb0 },
-  /* 0x7400 */
-  { 2899, 0x0493 }, { 2904, 0x0c02 }, { 2907, 0xff50 }, { 2917, 0x0203 },
-  { 2920, 0x28d9 }, { 2927, 0x2086 }, { 2931, 0x69c4 }, { 2938, 0x0006 },
-  { 2940, 0x82e3 }, { 2947, 0x9707 }, { 2955, 0xcf4b }, { 2965, 0x8a26 },
-  { 2971, 0x1300 }, { 2974, 0xcd09 }, { 2981, 0x8d10 }, { 2986, 0x9c10 },
-  /* 0x7500 */
-  { 2991, 0x0040 }, { 2992, 0x00c4 }, { 2995, 0x8693 }, { 3002, 0xe240 },
-  { 3007, 0x4189 }, { 3012, 0xc085 }, { 3017, 0x8002 }, { 3019, 0x7e02 },
-  { 3026, 0x0022 }, { 3028, 0x122d }, { 3034, 0x0014 }, { 3036, 0x8410 },
-  { 3039, 0xd053 }, { 3046, 0x9080 }, { 3049, 0xd093 }, { 3056, 0x0202 },
-  /* 0x7600 */
-  { 3058, 0x959d }, { 3067, 0x7a6c }, { 3076, 0x2268 }, { 3081, 0x172c },
-  { 3088, 0x0e3b }, { 3096, 0x8220 }, { 3099, 0xe030 }, { 3104, 0x0012 },
-  { 3106, 0x3022 }, { 3110, 0xb820 }, { 3115, 0x25fd }, { 3125, 0x2000 },
-  { 3126, 0x5a22 }, { 3132, 0x0210 }, { 3134, 0x1141 }, { 3138, 0x1243 },
-  /* 0x7700 */
-  { 3143, 0x4441 }, { 3147, 0x16b4 }, { 3154, 0xe104 }, { 3159, 0x6270 },
-  { 3165, 0xe464 }, { 3172, 0xd0c4 }, { 3178, 0x1495 }, { 3184, 0x241d },
-  { 3190, 0x3011 }, { 3194, 0x8470 }, { 3199, 0xc484 }, { 3204, 0x4022 },
-  { 3207, 0x0208 }, { 3209, 0xc226 }, { 3215, 0x1451 }, { 3220, 0x0913 },
-  /* 0x7800 */
-  { 3225, 0x6260 }, { 3230, 0x2002 }, { 3232, 0x600e }, { 3237, 0x00a1 },
-  { 3240, 0x5198 }, { 3246, 0x5004 }, { 3249, 0x451b }, { 3256, 0x4400 },
-  { 3258, 0x8400 }, { 3260, 0xe110 }, { 3265, 0x3112 }, { 3270, 0xa80f },
-  { 3277, 0x5380 }, { 3282, 0x886c }, { 3288, 0x0453 }, { 3293, 0x8ccc },
-  /* 0x7900 */
-  { 3300, 0x1041 }, { 3303, 0xd401 }, { 3308, 0x22a1 }, { 3313, 0xa832 },
-  { 3319, 0x8c70 }, { 3325, 0x1912 }, { 3330, 0x0a80 }, { 3333, 0x5a04 },
-  { 3338, 0x1800 }, { 3340, 0x197a }, { 3348, 0x8b02 }, { 3353, 0x0912 },
-  { 3357, 0x8594 }, { 3363, 0x6450 }, { 3368, 0x2c25 }, { 3374, 0x1102 },
-  /* 0x7a00 */
-  { 3377, 0x168c }, { 3383, 0x4822 }, { 3387, 0xa882 }, { 3392, 0x0731 },
-  { 3398, 0x11b0 }, { 3403, 0xb260 }, { 3409, 0x24a1 }, { 3414, 0x4120 },
-  { 3417, 0x0c65 }, { 3423, 0x4013 }, { 3427, 0x1009 }, { 3430, 0x1a28 },
-  { 3435, 0x5240 }, { 3439, 0x0802 }, { 3441, 0x1b00 }, { 3445, 0x6812 },
-  /* 0x7b00 */
-  { 3450, 0x0080 }, { 3451, 0x8010 }, { 3453, 0xee88 }, { 3461, 0xa013 },
-  { 3466, 0x4083 }, { 3470, 0x0020 }, { 3471, 0xa651 }, { 3478, 0x008c },
-  { 3481, 0x4210 }, { 3484, 0x4843 }, { 3489, 0x9021 }, { 3493, 0x3c65 },
-  { 3501, 0x0524 }, { 3505, 0x0ed0 }, { 3511, 0x0500 }, { 3513, 0x5734 },
-  /* 0x7c00 */
-  { 3521, 0xda5e }, { 3531, 0x0a00 }, { 3533, 0x1161 }, { 3538, 0x065a },
-  { 3544, 0x0440 }, { 3546, 0x7e2e }, { 3556, 0x628a }, { 3562, 0x3205 },
-  { 3567, 0x80c0 }, { 3570, 0x4010 }, { 3572, 0x0041 }, { 3574, 0x9cc1 },
-  { 3581, 0xa390 }, { 3587, 0x26b8 }, { 3594, 0x0a40 }, { 3597, 0x0020 },
-  /* 0x7d00 */
-  { 3598, 0x8388 }, { 3603, 0x604e }, { 3609, 0x2448 }, { 3613, 0x7002 },
-  { 3617, 0x2183 }, { 3622, 0x368a }, { 3629, 0x04a0 }, { 3632, 0x8d01 },
-  { 3637, 0x396e }, { 3646, 0x60c2 }, { 3651, 0x04c0 }, { 3654, 0x02c8 },
-  { 3658, 0x707c }, { 3666, 0x0280 }, { 3668, 0x2c64 }, { 3674, 0x0662 },
-  /* 0x7e00 */
-  { 3679, 0x0101 }, { 3681, 0x30a3 }, { 3687, 0xb181 }, { 3693, 0x8048 },
-  { 3696, 0x40b0 }, { 3700, 0x8105 }, { 3704, 0xc826 }, { 3710, 0x4108 },
-  { 3713, 0x24c2 }, { 3718, 0x6522 }, { 3724, 0x0000 }, { 3724, 0x0000 },
-  { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 },
-  /* 0x7f00 */
-  { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0xf800 },
-  { 3729, 0x8098 }, { 3733, 0x380c }, { 3738, 0x207a }, { 3744, 0xe002 },
-  { 3748, 0xa801 }, { 3752, 0x10c3 }, { 3757, 0x2446 }, { 3762, 0x9010 },
-  { 3765, 0xc109 }, { 3770, 0x8800 }, { 3772, 0xd128 }, { 3778, 0xe404 },
-  /* 0x8000 */
-  { 3783, 0xe580 }, { 3789, 0xe05a }, { 3796, 0x5051 }, { 3801, 0x56b1 },
-  { 3809, 0x0011 }, { 3811, 0x0000 }, { 3811, 0x2051 }, { 3815, 0x0022 },
-  { 3817, 0x4102 }, { 3820, 0x5000 }, { 3822, 0x08c0 }, { 3825, 0x0300 },
-  { 3827, 0xa100 }, { 3830, 0x01b4 }, { 3835, 0x6001 }, { 3838, 0x464d },
-  /* 0x8100 */
-  { 3845, 0x0808 }, { 3847, 0x51c0 }, { 3852, 0x1091 }, { 3856, 0x1421 },
-  { 3860, 0x14a0 }, { 3864, 0x0084 }, { 3866, 0xa383 }, { 3873, 0x0080 },
-  { 3874, 0x4872 }, { 3880, 0x4941 }, { 3885, 0x4004 }, { 3887, 0x0814 },
-  { 3890, 0xcc28 }, { 3896, 0x68a0 }, { 3901, 0x1812 }, { 3905, 0xa367 },
-  /* 0x8200 */
-  { 3914, 0x8009 }, { 3917, 0x2618 }, { 3922, 0x0106 }, { 3925, 0x0414 },
-  { 3928, 0xc878 }, { 3935, 0x1042 }, { 3938, 0x2089 }, { 3942, 0xa810 },
-  { 3946, 0x469b }, { 3954, 0x0d52 }, { 3960, 0x479b }, { 3969, 0xd495 },
-  { 3977, 0x0040 }, { 3978, 0x0421 }, { 3981, 0xa515 }, { 3988, 0x60c0 },
-  /* 0x8300 */
-  { 3992, 0x0d83 }, { 3998, 0xe800 }, { 4002, 0x7006 }, { 4007, 0x3489 },
-  { 4013, 0x609c }, { 4019, 0x00fa }, { 4025, 0x0000 }, { 4025, 0xa101 },
-  { 4029, 0x2055 }, { 4034, 0x3b34 }, { 4042, 0x32c0 }, { 4047, 0xc000 },
-  { 4049, 0x8281 }, { 4053, 0x2013 }, { 4057, 0x0500 }, { 4059, 0x1340 },
-  /* 0x8400 */
-  { 4063, 0x8442 }, { 4067, 0x0222 }, { 4070, 0x8000 }, { 4071, 0x0200 },
-  { 4072, 0xa5a0 }, { 4078, 0x1746 }, { 4085, 0x04b1 }, { 4090, 0x3159 },
-  { 4097, 0x0022 }, { 4099, 0x402c }, { 4103, 0x8740 }, { 4108, 0x6412 },
-  { 4113, 0x9185 }, { 4119, 0x1008 }, { 4121, 0x8480 }, { 4124, 0x2c87 },
-  /* 0x8500 */
-  { 4131, 0x508c }, { 4136, 0x5001 }, { 4139, 0x8cbc }, { 4147, 0x805c },
-  { 4152, 0x8040 }, { 4154, 0xf24f }, { 4164, 0x8817 }, { 4170, 0xae00 },
-  { 4175, 0x9a62 }, { 4182, 0xa108 }, { 4186, 0x20a5 }, { 4191, 0xf1d0 },
-  { 4199, 0x4c84 }, { 4204, 0x8500 }, { 4207, 0x2141 }, { 4211, 0x9048 },
-  /* 0x8600 */
-  { 4215, 0x6031 }, { 4220, 0x4b07 }, { 4227, 0x0282 }, { 4230, 0x3540 },
-  { 4235, 0x0047 }, { 4239, 0x23cc }, { 4246, 0x921f }, { 4254, 0x04e0 },
-  { 4258, 0x2100 }, { 4260, 0x1542 }, { 4265, 0x21c2 }, { 4270, 0x83ba },
-  { 4278, 0x002b }, { 4282, 0x14a6 }, { 4288, 0x00a9 }, { 4292, 0x3400 },
-  /* 0x8700 */
-  { 4295, 0xc8b0 }, { 4301, 0xc219 }, { 4307, 0xc10a }, { 4312, 0x7606 },
-  { 4319, 0x2029 }, { 4323, 0x2100 }, { 4325, 0x8032 }, { 4329, 0x0806 },
-  { 4332, 0x1bf8 }, { 4341, 0x43a9 }, { 4348, 0x7089 }, { 4354, 0xc022 },
-  { 4358, 0x4702 }, { 4363, 0x9660 }, { 4369, 0x2c1c }, { 4375, 0x850a },
-  /* 0x8800 */
-  { 4380, 0x0e4a }, { 4386, 0xdf1d }, { 4397, 0x6100 }, { 4400, 0x1425 },
-  { 4405, 0x4f2a }, { 4413, 0x9562 }, { 4420, 0x0211 }, { 4423, 0x0a02 },
-  { 4426, 0x0001 }, { 4427, 0x9d00 }, { 4432, 0x0501 }, { 4435, 0x6400 },
-  { 4438, 0x7c01 }, { 4444, 0x480e }, { 4449, 0x8080 }, { 4451, 0x00a3 },
-  /* 0x8900 */
-  { 4455, 0xe042 }, { 4460, 0x1760 }, { 4466, 0x01c1 }, { 4470, 0x4627 },
-  { 4477, 0x8265 }, { 4483, 0x1c84 }, { 4488, 0x480e }, { 4493, 0x3c29 },
-  { 4500, 0x2200 }, { 4502, 0x9831 }, { 4508, 0x0021 }, { 4510, 0x10f1 },
-  { 4516, 0x0000 }, { 4516, 0x01f0 }, { 4521, 0x2a20 }, { 4525, 0xa24a },
-  /* 0x8a00 */
-  { 4531, 0x80b0 }, { 4535, 0x4036 }, { 4540, 0x9855 }, { 4547, 0x60a0 },
-  { 4551, 0x62a9 }, { 4558, 0x31c8 }, { 4564, 0x00a2 }, { 4567, 0xcee0 },
-  { 4575, 0x8849 }, { 4580, 0x82c5 }, { 4586, 0xc280 }, { 4590, 0x48c8 },
-  { 4595, 0x0748 }, { 4600, 0xa0ba }, { 4607, 0x1000 }, { 4608, 0x9071 },
-  /* 0x8b00 */
-  { 4614, 0x0c60 }, { 4618, 0xd002 }, { 4622, 0x2000 }, { 4623, 0x1081 },
-  { 4626, 0x217c }, { 4633, 0x421c }, { 4638, 0x2008 }, { 4640, 0x5340 },
-  { 4645, 0xa832 }, { 4651, 0xd030 }, { 4656, 0x0000 }, { 4656, 0x0000 },
-  { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 },
-  /* 0x8c00 */
-  { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x6300 },
-  { 4660, 0x8aa0 }, { 4665, 0x2b9a }, { 4673, 0x2358 }, { 4679, 0x4868 },
-  { 4684, 0x08c0 }, { 4687, 0x1a0d }, { 4693, 0x0010 }, { 4694, 0x0600 },
-  { 4696, 0x8a60 }, { 4701, 0x2260 }, { 4705, 0x9102 }, { 4709, 0xc1a5 },
-  /* 0x8d00 */
-  { 4716, 0x020a }, { 4719, 0x0884 }, { 4722, 0x0000 }, { 4722, 0x0000 },
-  { 4722, 0x0000 }, { 4722, 0x0000 }, { 4722, 0x5220 }, { 4726, 0x8000 },
-  { 4727, 0x2114 }, { 4731, 0xc023 }, { 4736, 0x9841 }, { 4741, 0x1aa4 },
-  { 4747, 0x45e1 }, { 4754, 0x02b2 }, { 4759, 0x10b0 }, { 4763, 0x2017 },
-  /* 0x8e00 */
-  { 4768, 0x0872 }, { 4773, 0x0052 }, { 4776, 0x00cf }, { 4782, 0x23ca },
-  { 4789, 0xe803 }, { 4795, 0x7810 }, { 4800, 0xb206 }, { 4806, 0x0e03 },
-  { 4811, 0x020c }, { 4814, 0x6c25 }, { 4821, 0x6284 }, { 4826, 0x0c28 },
-  { 4830, 0x809b }, { 4836, 0x1012 }, { 4839, 0x6100 }, { 4842, 0x0683 },
-  /* 0x8f00 */
-  { 4847, 0x8185 }, { 4852, 0x41c1 }, { 4857, 0x71ab }, { 4866, 0x04f0 },
-  { 4871, 0x808b }, { 4876, 0x613e }, { 4884, 0x0020 }, { 4885, 0x0000 },
-  { 4885, 0x0000 }, { 4885, 0x2000 }, { 4886, 0x0073 }, { 4891, 0x4160 },
-  { 4895, 0x2c43 }, { 4901, 0x002d }, { 4905, 0x4119 }, { 4910, 0x4862 },
-  /* 0x9000 */
-  { 4915, 0x1114 }, { 4919, 0x0900 }, { 4921, 0xb700 }, { 4927, 0x8098 },
-  { 4931, 0x1018 }, { 4934, 0x2800 }, { 4936, 0x10c4 }, { 4940, 0x0211 },
-  { 4943, 0x5920 }, { 4948, 0x0ba1 }, { 4954, 0x0027 }, { 4958, 0x605d },
-  { 4965, 0x11b8 }, { 4971, 0xb3a4 }, { 4979, 0x8820 }, { 4982, 0xc051 },
-  /* 0x9100 */
-  { 4987, 0x2171 }, { 4993, 0x55d1 }, { 5001, 0xc2ad }, { 5009, 0x36d2 },
-  { 5017, 0x8188 }, { 5021, 0x0e88 }, { 5026, 0x2092 }, { 5030, 0x0e10 },
-  { 5034, 0x446a }, { 5040, 0x413a }, { 5046, 0x7142 }, { 5052, 0xb84f },
-  { 5061, 0x002c }, { 5064, 0x4698 }, { 5070, 0xf630 }, { 5078, 0x2a83 },
-  /* 0x9200 */
-  { 5084, 0x16f3 }, { 5093, 0x314d }, { 5100, 0xc178 }, { 5107, 0x5769 },
-  { 5116, 0xe4cd }, { 5125, 0x3302 }, { 5130, 0xc3a3 }, { 5138, 0xbbe1 },
-  { 5148, 0x6700 }, { 5153, 0x8284 }, { 5157, 0x89b1 }, { 5164, 0xbd44 },
-  { 5172, 0x79ef }, { 5184, 0xb3a9 }, { 5193, 0x51ab }, { 5201, 0x8a01 },
-  /* 0x9300 */
-  { 5205, 0x2105 }, { 5209, 0xf032 }, { 5216, 0x06b2 }, { 5222, 0x00d8 },
-  { 5226, 0x0380 }, { 5229, 0x45a7 }, { 5237, 0xa6b0 }, { 5244, 0xa45b },
-  { 5252, 0xad07 }, { 5260, 0x4924 }, { 5265, 0x0b5a }, { 5272, 0x0470 },
-  { 5276, 0x3ef2 }, { 5286, 0xd208 }, { 5291, 0x00c4 }, { 5294, 0x2f80 },
-  /* 0x9400 */
-  { 5300, 0xe316 }, { 5308, 0x80e0 }, { 5312, 0xc000 }, { 5314, 0xa81e },
-  { 5321, 0x1528 }, { 5326, 0x9220 }, { 5330, 0xe90a }, { 5337, 0x0006 },
-  { 5339, 0x0018 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  /* 0x9500 */
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 },
-  { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x4300 },
-  { 5344, 0x7110 }, { 5349, 0xe000 }, { 5352, 0x1a42 }, { 5357, 0xa450 },
-  { 5362, 0x0b40 }, { 5366, 0xe60f }, { 5375, 0x0051 }, { 5378, 0x0000 },
-  /* 0x9600 */
-  { 5378, 0x0000 }, { 5378, 0x6000 }, { 5380, 0x1074 }, { 5385, 0x378a },
-  { 5393, 0x0002 }, { 5394, 0x01d4 }, { 5399, 0x4002 }, { 5401, 0xd810 },
-  { 5406, 0x021e }, { 5411, 0xa442 }, { 5416, 0xc270 }, { 5422, 0x0408 },
-  { 5424, 0x0400 }, { 5425, 0xe504 }, { 5431, 0x8200 }, { 5433, 0x0402 },
-  /* 0x9700 */
-  { 5435, 0x022c }, { 5439, 0x2c00 }, { 5442, 0x010e }, { 5446, 0x000a },
-  { 5448, 0xc40a }, { 5453, 0x0da0 }, { 5458, 0x4488 }, { 5462, 0xa9c8 },
-  { 5469, 0x0201 }, { 5471, 0xc6e0 }, { 5478, 0x5004 }, { 5481, 0xd766 },
-  { 5491, 0x76b2 }, { 5500, 0x6b93 }, { 5509, 0x8013 }, { 5513, 0x0592 },
-  /* 0x9800 */
-  { 5518, 0x6480 }, { 5522, 0x5250 }, { 5527, 0xc869 }, { 5534, 0x402d },
-  { 5539, 0x0490 }, { 5542, 0x06ce }, { 5549, 0x146c }, { 5555, 0x0000 },
-  { 5555, 0x0000 }, { 5555, 0x0000 }, { 5555, 0x6800 }, { 5558, 0x8d91 },
-  { 5565, 0x1124 }, { 5569, 0x0000 }, { 5569, 0x04ea }, { 5575, 0x0048 },
-  /* 0x9900 */
-  { 5577, 0x0184 }, { 5580, 0x9ce2 }, { 5588, 0x08c4 }, { 5592, 0x1e3e },
-  { 5601, 0x61c3 }, { 5608, 0xdb10 }, { 5615, 0x0001 }, { 5616, 0x0000 },
-  { 5616, 0x0000 }, { 5616, 0xa800 }, { 5619, 0x0040 }, { 5620, 0xa627 },
-  { 5628, 0x0208 }, { 5630, 0x5618 }, { 5636, 0x1c80 }, { 5640, 0x6231 },
-  /* 0x9a00 */
-  { 5646, 0x181c }, { 5651, 0x4043 }, { 5655, 0x609d }, { 5662, 0x0168 },
-  { 5666, 0x5c92 }, { 5673, 0x2052 }, { 5677, 0x0000 }, { 5677, 0x0000 },
-  { 5677, 0x0000 }, { 5677, 0x0000 }, { 5677, 0xd400 }, { 5681, 0xca74 },
-  { 5689, 0x414a }, { 5694, 0x18e5 }, { 5701, 0x12b1 }, { 5707, 0xa62c },
-  /* 0x9b00 */
-  { 5714, 0x7b3f }, { 5726, 0x1a45 }, { 5732, 0x2841 }, { 5736, 0x26b8 },
-  { 5743, 0x1900 }, { 5746, 0x48e0 }, { 5751, 0x7d6a }, { 5761, 0x83a8 },
-  { 5767, 0xaef1 }, { 5777, 0x6411 }, { 5782, 0x12c0 }, { 5786, 0xd987 },
-  { 5795, 0x4182 }, { 5799, 0xa181 }, { 5804, 0x8ca0 }, { 5809, 0xa788 },
-  /* 0x9c00 */
-  { 5816, 0x8805 }, { 5820, 0x5742 }, { 5827, 0x07cc }, { 5834, 0x20e2 },
-  { 5839, 0xc63a }, { 5847, 0xf959 }, { 5857, 0x4f08 }, { 5863, 0x08a5 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 },
-  { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0040 }, { 5869, 0x0284 },
-  /* 0x9d00 */
-  { 5872, 0x0804 }, { 5874, 0x7182 }, { 5880, 0x8000 }, { 5881, 0x341d },
-  { 5888, 0x04ac }, { 5893, 0x8018 }, { 5896, 0x0e2c }, { 5902, 0x58c1 },
-  { 5908, 0x6458 }, { 5914, 0x01ec }, { 5920, 0x5402 }, { 5924, 0x9222 },
-  { 5929, 0x0688 }, { 5933, 0xc4f0 }, { 5940, 0x4aa1 }, { 5946, 0x4019 },
-  /* 0x9e00 */
-  { 5950, 0x4484 }, { 5954, 0x3267 }, { 5962, 0x0000 }, { 5962, 0x0000 },
-  { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x1c00 },
-  { 5965, 0xc0bd }, { 5973, 0x4940 }, { 5977, 0xd110 }, { 5982, 0x0039 },
-  { 5986, 0x0940 }, { 5989, 0x8020 }, { 5991, 0x7090 }, { 5996, 0x8127 },
-  /* 0x9f00 */
-  { 6002, 0x820c }, { 6006, 0x8ed7 }, { 6016, 0x8c44 }, { 6021, 0xb696 },
-  { 6030, 0x00fa }, { 6036, 0x65e8 }, { 6044, 0xe300 }, { 6049, 0x242b },
-  { 6055, 0x8000 }, { 6056, 0x40d7 }, { 6063, 0x002e },
-};
-
-static int
-jisx0212_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &jisx0212_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2100 && wc < 0x2130)
-      summary = &jisx0212_uni2indx_page21[(wc>>4)-0x210];
-    else if (wc >= 0x4e00 && wc < 0x9fb0)
-      summary = &jisx0212_uni2indx_page4e[(wc>>4)-0x4e0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = jisx0212_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/koi8_c.h
+++ /dev/null
@@ -1,103 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_c.h,v 1.2 2000/11/28 16:10:29 dawes Exp $ */
-
-/*
- * KOI8-C
- */
-
-static const unsigned short koi8_c_2uni[128] = {
-  /* 0x80 */
-  0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3,
-  0x04b7, 0x04b9, 0x04bb, 0x2580, 0x04d9, 0x04e3, 0x04e9, 0x04ef,
-  /* 0x90 */
-  0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2,
-  0x04b6, 0x04b8, 0x04ba, 0x2321, 0x04d8, 0x04e2, 0x04e8, 0x04ee,
-  /* 0xa0 */
-  0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,
-  0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f,
-  /* 0xb0 */
-  0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
-  0x0486, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_c_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_c_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char koi8_c_page00[1] = {
-  0xa0,                                           /* 0xa0-0xa7 */
-};
-static const unsigned char koi8_c_page04[240] = {
-  0x00, 0xb3, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x00-0x07 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0xbf, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x50-0x57 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xbd, 0xad, 0x90, 0x80, 0x00, 0x00, 0x91, 0x81, /* 0x90-0x97 */
-  0x00, 0x00, 0x92, 0x82, 0x93, 0x83, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x94, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x85, /* 0xa8-0xaf */
-  0x96, 0x86, 0x97, 0x87, 0x00, 0x00, 0x98, 0x88, /* 0xb0-0xb7 */
-  0x99, 0x89, 0x9a, 0x8a, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x9c, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x9d, 0x8d, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x9e, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x8f, /* 0xe8-0xef */
-};
-static const unsigned char koi8_c_page22[1] = {
-                                      0xb0,       /* 0x16-0x16 */
-};
-
-static int
-koi8_c_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00a1)
-    c = koi8_c_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x04ef)
-    c = koi8_c_page04[wc-0x0400];
-  else if (wc >= 0x2216 && wc < 0x2217)
-    c = koi8_c_page22[wc-0x2216];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/koi8_r.h
+++ /dev/null
@@ -1,139 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_r.h,v 1.3 2000/11/29 17:40:34 dawes Exp $ */
-
-/*
- * KOI8-R
- */
-
-/* Specification: RFC 1489 */
-
-#ifdef NEED_TOWC
-static const unsigned short koi8_r_2uni[128] = {
-  /* 0x80 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
-  0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
-  /* 0x90 */
-  0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
-  0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
-  /* 0xa0 */
-  0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e,
-  /* 0xb0 */
-  0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
-  0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_r_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_r_2uni[c-0x80];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char koi8_r_page00[88] = {
-  0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */
-};
-static const unsigned char koi8_r_page04[88] = {
-  0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-};
-static const unsigned char koi8_r_page22[80] = {
-  0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */
-};
-static const unsigned char koi8_r_page23[8] = {
-  0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char koi8_r_page25[168] = {
-  0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */
-  0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */
-  0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */
-  0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-};
-
-static int
-koi8_r_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = koi8_r_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0458)
-    c = koi8_r_page04[wc-0x0400];
-  else if (wc >= 0x2218 && wc < 0x2268)
-    c = koi8_r_page22[wc-0x2218];
-  else if (wc >= 0x2320 && wc < 0x2328)
-    c = koi8_r_page23[wc-0x2320];
-  else if (wc >= 0x2500 && wc < 0x25a8)
-    c = koi8_r_page25[wc-0x2500];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/koi8_u.h
+++ /dev/null
@@ -1,146 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/koi8_u.h,v 1.3 2000/11/29 17:40:34 dawes Exp $ */
-
-/*
- * KOI8-U
- */
-
-/* Specification: RFC 2319 */
-#ifdef NEED_TOWC
-static const unsigned short koi8_u_2uni[128] = {
-  /* 0x80 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524,
-  0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
-  /* 0x90 */
-  0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248,
-  0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7,
-  /* 0xa0 */
-  0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457,
-  0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x255d, 0x255e,
-  /* 0xb0 */
-  0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407,
-  0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x256c, 0x00a9,
-  /* 0xc0 */
-  0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
-  0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  /* 0xd0 */
-  0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
-  0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
-  /* 0xe0 */
-  0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
-  0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  /* 0xf0 */
-  0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
-  0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a,
-};
-
-static int
-koi8_u_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) koi8_u_2uni[c-0x80];
-  return 1;
-}
-#endif /* NEED_TOWC */
-
-#ifdef  NEED_TOMB
-static const unsigned char koi8_u_page00[88] = {
-  0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */
-};
-static const unsigned char koi8_u_page04[152] = {
-  0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */
-  0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */
-  0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */
-  0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */
-  0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */
-  0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */
-  0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */
-  0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */
-  0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-};
-static const unsigned char koi8_u_page22[80] = {
-  0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */
-};
-static const unsigned char koi8_u_page23[8] = {
-  0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char koi8_u_page25[168] = {
-  0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */
-  0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */
-  0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */
-  0xba, 0xbb, 0xbc, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-};
-
-static int
-koi8_u_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00f8)
-    c = koi8_u_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x0498)
-    c = koi8_u_page04[wc-0x0400];
-  else if (wc >= 0x2218 && wc < 0x2268)
-    c = koi8_u_page22[wc-0x2218];
-  else if (wc >= 0x2320 && wc < 0x2328)
-    c = koi8_u_page23[wc-0x2320];
-  else if (wc >= 0x2500 && wc < 0x25a8)
-    c = koi8_u_page25[wc-0x2500];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/ksc5601.h
+++ /dev/null
@@ -1,3006 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/ksc5601.h,v 1.5 2003/05/27 22:26:34 tsi Exp $ */
-
-/*
- * KSC5601.1987-0
- */
-#ifdef NEED_TOWC
-static const unsigned short ksc5601_2uni_page21[1115] = {
-  /* 0x21 */
-  0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003,
-  0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c,
-  0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
-  0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7,
-  0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033,
-  0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220,
-  0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b,
-  0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1,
-  0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191,
-  0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d,
-  0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282,
-  0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2,
-  /* 0x22 */
-  0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, 0x02d8,
-  0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x02d0,
-  0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0,
-  0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663,
-  0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5,
-  0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c,
-  0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196,
-  0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116,
-  0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x23 */
-  0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08,
-  0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10,
-  0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18,
-  0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20,
-  0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28,
-  0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30,
-  0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38,
-  0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40,
-  0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48,
-  0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50,
-  0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58,
-  0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3,
-  /* 0x24 */
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
-  0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168,
-  0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170,
-  0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, 0x3180,
-  0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, 0x3188,
-  0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e,
-  /* 0x25 */
-  0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
-  0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2160,
-  0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168,
-  0x2169, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
-  0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
-  0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
-  0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
-  0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x26 */
-  0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c,
-  0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b,
-  0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f,
-  0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542,
-  0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d,
-  0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a,
-  0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a,
-  0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546,
-  0x2547, 0x2548, 0x2549, 0x254a, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x27 */
-  0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4,
-  0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e,
-  0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, 0x338f,
-  0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, 0x33b1,
-  0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, 0x33b9,
-  0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc,
-  0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394,
-  0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5,
-  0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac,
-  0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x28 */
-  0x00c6, 0x00d0, 0x00aa, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x013f,
-  0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, 0xfffd,
-  0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267,
-  0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f,
-  0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277,
-  0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, 0x24d3,
-  0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db,
-  0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3,
-  0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, 0x2461,
-  0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
-  0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154,
-  0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e,
-  /* 0x29 */
-  0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140,
-  0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149,
-  0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207,
-  0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f,
-  0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217,
-  0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f,
-  0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7,
-  0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af,
-  0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475,
-  0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d,
-  0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3,
-  0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084,
-  /* 0x2a */
-  0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
-  0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050,
-  0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
-  0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060,
-  0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
-  0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070,
-  0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
-  0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080,
-  0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
-  0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090,
-  0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2b */
-  0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8,
-  0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0,
-  0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8,
-  0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
-  0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8,
-  0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0,
-  0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8,
-  0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0,
-  0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8,
-  0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0,
-  0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  /* 0x2c */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
-  0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
-  0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
-  0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e,
-  0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
-  0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
-  0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
-  0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e,
-  0x044f,
-};
-static const unsigned short ksc5601_2uni_page30[2350] = {
-  /* 0x30 */
-  0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10,
-  0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19,
-  0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d,
-  0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b,
-  0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77,
-  0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86,
-  0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d,
-  0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf,
-  0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4,
-  0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7,
-  0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5,
-  0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06,
-  /* 0x31 */
-  0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29,
-  0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45,
-  0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c,
-  0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c,
-  0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90,
-  0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8,
-  0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9,
-  0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d,
-  0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40,
-  0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e,
-  0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61,
-  0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78,
-  /* 0x32 */
-  0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc,
-  0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0,
-  0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4,
-  0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d,
-  0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42,
-  0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65,
-  0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c,
-  0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb,
-  0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1,
-  0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014,
-  0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c,
-  0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059,
-  /* 0x33 */
-  0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, 0xb08f,
-  0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1,
-  0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af,
-  0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5,
-  0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0,
-  0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113,
-  0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, 0xb125,
-  0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140,
-  0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, 0xb158,
-  0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188,
-  0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, 0xb19c,
-  0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd,
-  /* 0x34 */
-  0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd,
-  0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217,
-  0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268,
-  0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290,
-  0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3,
-  0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9,
-  0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2,
-  0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee,
-  0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa,
-  0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311,
-  0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358,
-  0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365,
-  /* 0x35 */
-  0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378,
-  0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394,
-  0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb,
-  0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db,
-  0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c,
-  0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454,
-  0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488,
-  0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0,
-  0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3,
-  0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514,
-  0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528,
-  0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538,
-  /* 0x36 */
-  0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d,
-  0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0,
-  0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3,
-  0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc,
-  0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611,
-  0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668,
-  0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4,
-  0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729,
-  0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748,
-  0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771,
-  0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d,
-  0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797,
-  /* 0x37 */
-  0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac,
-  0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed,
-  0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807,
-  0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, 0xb81d,
-  0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838,
-  0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, 0xb860,
-  0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d,
-  0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5,
-  0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9,
-  0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, 0xb918,
-  0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951,
-  0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969,
-  /* 0x38 */
-  0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985,
-  0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0,
-  0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc,
-  0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db,
-  0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec,
-  0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01,
-  0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48,
-  0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58,
-  0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71,
-  0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8,
-  0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb,
-  0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc,
-  /* 0x39 */
-  0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20,
-  0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c,
-  0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f,
-  0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c,
-  0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4,
-  0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00,
-  0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11,
-  0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d,
-  0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30,
-  0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45,
-  0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88,
-  0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97,
-  /* 0x3a */
-  0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0,
-  0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4,
-  0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4,
-  0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09,
-  0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c,
-  0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84,
-  0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95,
-  0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5,
-  0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03,
-  0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f,
-  0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57,
-  0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64,
-  /* 0x3b */
-  0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, 0xbe7b,
-  0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90,
-  0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, 0xbed7,
-  0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08,
-  0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, 0xbf41,
-  0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5,
-  0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c,
-  0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091,
-  0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad,
-  0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd,
-  0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0,
-  0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4,
-  /* 0x3c */
-  0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100,
-  0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f,
-  0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f,
-  0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148,
-  0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c,
-  0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178,
-  0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c,
-  0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0,
-  0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0,
-  0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200,
-  0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c,
-  0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d,
-  /* 0x3d */
-  0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254,
-  0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c,
-  0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b,
-  0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5,
-  0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb,
-  0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb,
-  0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314,
-  0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345,
-  0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c,
-  0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc,
-  0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5,
-  0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430,
-  /* 0x3e */
-  0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c,
-  0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc,
-  0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500,
-  0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c,
-  0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548,
-  0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555,
-  0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564,
-  0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d,
-  0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595,
-  0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8,
-  0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6,
-  0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce,
-  /* 0x3f */
-  0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5,
-  0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc,
-  0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607,
-  0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, 0xc624,
-  0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634,
-  0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, 0xc648,
-  0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660,
-  0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, 0xc688,
-  0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4,
-  0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9,
-  0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0,
-  0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8,
-  /* 0x40 */
-  0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705,
-  0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721,
-  0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c,
-  0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751,
-  0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c,
-  0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d,
-  0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a,
-  0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a,
-  0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad,
-  0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8,
-  0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8,
-  0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a,
-  /* 0x41 */
-  0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820,
-  0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840,
-  0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874,
-  0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887,
-  0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8,
-  0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7,
-  0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900,
-  0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918,
-  0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961,
-  0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c,
-  0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4,
-  0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3,
-  /* 0x42 */
-  0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2,
-  0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8,
-  0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d,
-  0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c,
-  0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98,
-  0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1,
-  0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10,
-  0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c,
-  0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c,
-  0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10,
-  0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29,
-  0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b,
-  /* 0x43 */
-  0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, 0xcc54,
-  0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68,
-  0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, 0xcca9,
-  0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4,
-  0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, 0xccf0,
-  0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b,
-  0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, 0xcd64,
-  0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95,
-  0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, 0xcdc4,
-  0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb,
-  0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, 0xce21,
-  0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35,
-  /* 0x44 */
-  0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69,
-  0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85,
-  0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1,
-  0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5,
-  0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9,
-  0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15,
-  0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31,
-  0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67,
-  0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c,
-  0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8,
-  0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011,
-  0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c,
-  /* 0x45 */
-  0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060,
-  0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4,
-  0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0,
-  0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4,
-  0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef,
-  0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138,
-  0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d,
-  0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c,
-  0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0,
-  0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4,
-  0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234,
-  0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c,
-  /* 0x46 */
-  0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295,
-  0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc,
-  0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8,
-  0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300,
-  0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314,
-  0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328,
-  0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d,
-  0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d,
-  0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8,
-  0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5,
-  0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed,
-  0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401,
-  /* 0x47 */
-  0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d,
-  0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, 0xd488,
-  0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4,
-  0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd,
-  0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d,
-  0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, 0xd559,
-  0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574,
-  0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, 0xd589,
-  0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8,
-  0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4,
-  0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610,
-  0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620,
-  /* 0x48 */
-  0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648,
-  0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c,
-  0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c,
-  0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac,
-  0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1,
-  0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5,
-  0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c,
-  0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738,
-  0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756,
-  0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769,
-  0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789,
-  0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d,
-};
-static const unsigned short ksc5601_2uni_page4a[4888] = {
-  /* 0x4a */
-  0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5,
-  0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c,
-  0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36,
-  0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404,
-  0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3,
-  0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7,
-  0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5,
-  0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593,
-  0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910,
-  0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be,
-  0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3,
-  0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95,
-  /* 0x4b */
-  0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, 0x5808,
-  0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, 0x6c5f,
-  0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, 0x8221,
-  0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, 0x4ef7,
-  0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, 0x69ea,
-  0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900,
-  0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9,
-  0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da,
-  0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d,
-  0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106,
-  0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, 0x5091,
-  0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2,
-  /* 0x4c */
-  0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9,
-  0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694,
-  0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b,
-  0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a,
-  0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac,
-  0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, 0x5770,
-  0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, 0x666f,
-  0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, 0x74a5,
-  0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, 0x7d93,
-  0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1,
-  0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951,
-  0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0,
-  /* 0x4d */
-  0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b,
-  0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9,
-  0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7,
-  0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc,
-  0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6,
-  0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c,
-  0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2,
-  0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606,
-  0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904,
-  0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050,
-  0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2,
-  0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc,
-  /* 0x4e */
-  0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846,
-  0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec,
-  0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50,
-  0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec,
-  0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38,
-  0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b,
-  0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0,
-  0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1,
-  0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821,
-  0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e,
-  0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18,
-  0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe,
-  /* 0x4f */
-  0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, 0x5bc7,
-  0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, 0x69cb,
-  0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, 0x7396,
-  0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205,
-  0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1,
-  0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b,
-  0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4,
-  0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae,
-  0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, 0x52f8,
-  0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, 0x53a5,
-  0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, 0x8a6d,
-  0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4,
-  /* 0x50 */
-  0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea,
-  0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035,
-  0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908,
-  0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, 0x9699,
-  0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, 0x747e,
-  0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, 0xf909,
-  0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, 0x79bd,
-  0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca,
-  0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc,
-  0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b,
-  0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e,
-  0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3,
-  /* 0x51 */
-  0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23,
-  0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3,
-  0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a,
-  0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18,
-  0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e,
-  0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854,
-  0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d,
-  0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, 0xf913,
-  0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, 0xf919,
-  0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, 0xf91f,
-  0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, 0x6960,
-  0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925,
-  /* 0x52 */
-  0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929,
-  0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0,
-  0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c,
-  0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, 0x5f29,
-  0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, 0xf935,
-  0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, 0xf93c,
-  0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3,
-  0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166,
-  0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e,
-  0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952,
-  0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, 0xf959,
-  0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336,
-  /* 0x53 */
-  0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, 0x65b7,
-  0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde,
-  0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8,
-  0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b,
-  0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7,
-  0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510,
-  0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, 0x7cd6,
-  0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, 0x5cb1,
-  0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, 0x8cb8,
-  0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, 0x5230,
-  0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6,
-  0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843,
-  /* 0x54 */
-  0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc,
-  0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, 0x8e48,
-  0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, 0x6bd2,
-  0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, 0x7e9b,
-  0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, 0x711e,
-  0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd,
-  0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c,
-  0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597,
-  0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017,
-  0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, 0x5f97,
-  0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, 0x9127,
-  0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85,
-  /* 0x55 */
-  0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de,
-  0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375,
-  0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3,
-  0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd,
-  0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a,
-  0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, 0x5fa0,
-  0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9,
-  0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b,
-  0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e,
-  0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62,
-  0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b,
-  0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23,
-  /* 0x56 */
-  0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a,
-  0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582,
-  0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0xf95f,
-  0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046,
-  0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7,
-  0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3,
-  0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def,
-  0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0,
-  0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727,
-  0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, 0x78ca,
-  0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, 0x5ed6,
-  0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc,
-  /* 0x57 */
-  0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda,
-  0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b,
-  0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409,
-  0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e,
-  0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, 0x5f8b,
-  0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, 0x51cc,
-  0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, 0x5398,
-  0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, 0x7281,
-  0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8,
-  0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d,
-  0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f,
-  0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c,
-  /* 0x58 */
-  0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, 0x78e8,
-  0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, 0x83ab,
-  0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, 0x633d,
-  0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513,
-  0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab,
-  0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b,
-  0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb,
-  0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164,
-  0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, 0x964c,
-  0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, 0x840c,
-  0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, 0x7704,
-  0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5,
-  /* 0x59 */
-  0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f,
-  0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4,
-  0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478,
-  0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261,
-  0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28,
-  0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9,
-  0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999,
-  0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7,
-  0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab,
-  0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46,
-  0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8,
-  0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587,
-  /* 0x5a */
-  0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff,
-  0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae,
-  0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e,
-  0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d,
-  0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9,
-  0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd,
-  0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94,
-  0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1,
-  0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591,
-  0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc,
-  0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812,
-  0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51,
-  /* 0x5b */
-  0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d,
-  0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9,
-  0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, 0x80aa,
-  0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, 0x90a6,
-  0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, 0x62dc,
-  0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, 0x88f4,
-  0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70,
-  0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a,
-  0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc,
-  0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e,
-  0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb,
-  0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656,
-  /* 0x5c */
-  0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, 0x8b8a,
-  0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19,
-  0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5,
-  0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08,
-  0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a,
-  0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14,
-  0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, 0x798f,
-  0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, 0x99a5,
-  0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, 0x5cf0,
-  0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, 0x8702,
-  0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256,
-  0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66,
-  /* 0x5d */
-  0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7,
-  0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151,
-  0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb,
-  0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7,
-  0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff,
-  0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde,
-  0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f,
-  0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15,
-  0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2,
-  0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6,
-  0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, 0x7891,
-  0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5,
-  /* 0x5e */
-  0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb,
-  0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c,
-  0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7,
-  0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b,
-  0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2,
-  0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb,
-  0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c,
-  0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23,
-  0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9,
-  0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df,
-  0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc,
-  0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a,
-  /* 0x5f */
-  0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, 0x759d,
-  0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, 0x715e,
-  0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, 0x8518,
-  0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, 0x50cf,
-  0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38,
-  0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d,
-  0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4,
-  0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7,
-  0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, 0xf96d,
-  0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, 0x6055,
-  0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, 0x68f2,
-  0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72,
-  /* 0x60 */
-  0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd,
-  0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790,
-  0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b,
-  0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e,
-  0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, 0x766c,
-  0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, 0x861a,
-  0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, 0x9bae,
-  0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, 0x859b,
-  0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2,
-  0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee,
-  0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f,
-  0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c,
-  /* 0x61 */
-  0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72,
-  0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, 0x562f,
-  0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414,
-  0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2,
-  0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20,
-  0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5,
-  0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f,
-  0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0,
-  0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f,
-  0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, 0x9396,
-  0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd,
-  0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101,
-  /* 0x62 */
-  0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a,
-  0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2,
-  0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac,
-  0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896,
-  0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9,
-  0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3,
-  0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a,
-  0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa,
-  0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3,
-  0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340,
-  0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4,
-  0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27,
-  /* 0x63 */
-  0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, 0x8936,
-  0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, 0x6607,
-  0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4,
-  0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f,
-  0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494,
-  0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4,
-  0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184,
-  0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, 0x4f81,
-  0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, 0x71fc,
-  0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, 0x85ce,
-  0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, 0x5ba4,
-  0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81,
-  /* 0x64 */
-  0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341,
-  0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25,
-  0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, 0x8a1d,
-  0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, 0x5dbd,
-  0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, 0x9354,
-  0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, 0x6848,
-  0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb,
-  0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4,
-  0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f,
-  0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16,
-  0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, 0x5384,
-  0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d,
-  /* 0x65 */
-  0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c,
-  0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31,
-  0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d,
-  0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da,
-  0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001,
-  0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c,
-  0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, 0x5704,
-  0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a,
-  0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830,
-  0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c,
-  0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88,
-  0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982,
-  /* 0x66 */
-  0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, 0x8207,
-  0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, 0xf988,
-  0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, 0xf98c,
-  0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, 0x5827,
-  0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, 0x6350,
-  0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5,
-  0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5,
-  0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f,
-  0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b,
-  0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1,
-  0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, 0x67d3,
-  0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2,
-  /* 0x67 */
-  0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449,
-  0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac,
-  0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41,
-  0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b,
-  0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1,
-  0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, 0xf9b4,
-  0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, 0x6fca,
-  0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, 0x88d4,
-  0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, 0x9810,
-  0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da,
-  0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca,
-  0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3,
-  /* 0x68 */
-  0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, 0x9f07,
-  0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, 0x761f,
-  0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, 0x7515,
-  0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, 0x7aa9,
-  0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b,
-  0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9,
-  0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0,
-  0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a,
-  0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb,
-  0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, 0xf9bc,
-  0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, 0x66dc,
-  0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1,
-  /* 0x69 */
-  0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef,
-  0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32,
-  0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7,
-  0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67,
-  0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9,
-  0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, 0x512a,
-  0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182,
-  0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9,
-  0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5,
-  0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631,
-  0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52,
-  0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553,
-  /* 0x6a */
-  0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a,
-  0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b,
-  0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72,
-  0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060,
-  0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d,
-  0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170,
-  0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466,
-  0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f,
-  0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, 0x5b7a,
-  0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109,
-  0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, 0x6961,
-  0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb,
-  /* 0x6b */
-  0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652,
-  0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb,
-  0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, 0x91c9,
-  0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, 0x80b2,
-  0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, 0x6f64,
-  0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, 0xf9d9,
-  0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, 0xf9dc,
-  0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59,
-  0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3,
-  0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100,
-  0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3,
-  0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc,
-  /* 0x6c */
-  0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, 0x5937,
-  0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, 0xf9e1,
-  0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5,
-  0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7,
-  0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c,
-  0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a,
-  0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb,
-  0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, 0x8335,
-  0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, 0xf9f3,
-  0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, 0x93b0,
-  0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, 0xf9f5,
-  0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344,
-  /* 0x6d */
-  0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4,
-  0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063,
-  0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1,
-  0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7,
-  0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8,
-  0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7,
-  0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a,
-  0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef,
-  0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756,
-  0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b,
-  0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523,
-  0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577,
-  /* 0x6e */
-  0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d,
-  0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09,
-  0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e,
-  0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17,
-  0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7,
-  0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8,
-  0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575,
-  0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e,
-  0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea,
-  0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178,
-  0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb,
-  0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1,
-  /* 0x6f */
-  0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b,
-  0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, 0x9293,
-  0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, 0x622a,
-  0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, 0x5cbe,
-  0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, 0x63a5,
-  0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448,
-  0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a,
-  0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89,
-  0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1,
-  0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d,
-  0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, 0x914a,
-  0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756,
-  /* 0x70 */
-  0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d,
-  0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd,
-  0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d,
-  0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14,
-  0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d,
-  0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, 0x722a,
-  0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, 0x7c97,
-  0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, 0x8abf,
-  0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, 0x9ce5,
-  0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9,
-  0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9,
-  0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b,
-  /* 0x71 */
-  0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7,
-  0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4,
-  0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d,
-  0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7,
-  0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db,
-  0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152,
-  0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8,
-  0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c,
-  0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301,
-  0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41,
-  0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7,
-  0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea,
-  /* 0x72 */
-  0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f,
-  0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c,
-  0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3,
-  0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072,
-  0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875,
-  0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25,
-  0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e,
-  0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a,
-  0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707,
-  0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be,
-  0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f,
-  0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f,
-  /* 0x73 */
-  0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, 0x501f,
-  0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, 0x7b9a,
-  0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, 0x7a84,
-  0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da,
-  0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d,
-  0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed,
-  0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92,
-  0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70,
-  0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, 0x6f32,
-  0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, 0x50b5,
-  0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, 0x83dc,
-  0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56,
-  /* 0x74 */
-  0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254,
-  0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620,
-  0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929,
-  0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, 0x85a6,
-  0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, 0x51f8,
-  0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, 0x8f4d,
-  0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, 0x7c3d,
-  0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252,
-  0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8,
-  0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff,
-  0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d,
-  0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2,
-  /* 0x75 */
-  0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e,
-  0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82,
-  0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7,
-  0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a,
-  0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283,
-  0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e,
-  0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf,
-  0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a,
-  0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51,
-  0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625,
-  0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96,
-  0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403,
-  /* 0x76 */
-  0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0,
-  0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074,
-  0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4,
-  0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4,
-  0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4,
-  0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed,
-  0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88,
-  0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31,
-  0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253,
-  0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c,
-  0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b,
-  0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17,
-  /* 0x77 */
-  0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, 0x7058,
-  0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d,
-  0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03,
-  0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70,
-  0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04,
-  0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e,
-  0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, 0x5806,
-  0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, 0x59ac,
-  0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, 0x5a46,
-  0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, 0x722c,
-  0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742,
-  0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211,
-  /* 0x78 */
-  0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, 0x6557,
-  0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, 0x5f6d,
-  0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, 0x7247,
-  0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, 0x576a,
-  0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, 0x5ee2,
-  0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305,
-  0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b,
-  0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de,
-  0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea,
-  0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07,
-  0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, 0x74e2,
-  0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43,
-  /* 0x79 */
-  0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c,
-  0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c,
-  0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d,
-  0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630,
-  0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15,
-  0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d,
-  0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591,
-  0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8,
-  0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677,
-  0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c,
-  0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d,
-  0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a,
-  /* 0x7a */
-  0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a,
-  0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3,
-  0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016,
-  0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, 0x73e6,
-  0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b,
-  0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57,
-  0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8,
-  0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d,
-  0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249,
-  0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354,
-  0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2,
-  0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b,
-  /* 0x7b */
-  0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9,
-  0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8,
-  0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af,
-  0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5,
-  0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, 0x6dcf,
-  0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, 0x7425,
-  0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, 0x82a6,
-  0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, 0x93ac,
-  0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7,
-  0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18,
-  0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b,
-  0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575,
-  /* 0x7c */
-  0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, 0x9774,
-  0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, 0x559a,
-  0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, 0x6853,
-  0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b,
-  0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d,
-  0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f,
-  0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352,
-  0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a,
-  0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, 0x6fae,
-  0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, 0x8cc4,
-  0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, 0x5b5d,
-  0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6,
-  /* 0x7d */
-  0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e,
-  0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd,
-  0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb,
-  0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431,
-  0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147,
-  0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667,
-  0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8,
-  0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07,
-  0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5,
-  0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09,
-  0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9,
-  0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70,
-};
-
-static int
-ksc5601_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c1 = (s[0] & 0x7F);
-  if ((c1 >= 0x21 && c1 <= 0x2c) || (c1 >= 0x30 && c1 <= 0x48) || (c1 >= 0x4a && c1 <= 0x7d)) {
-    if (n >= 2) {
-      unsigned char c2 = (s[1] & 0x7F);
-      if (c2 >= 0x21 && c2 < 0x7f) {
-        unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21);
-        unsigned short wc = 0xfffd;
-        if (i < 1410) {
-          if (i < 1115)
-            wc = ksc5601_2uni_page21[i];
-        } else if (i < 3854) {
-          if (i < 3760)
-            wc = ksc5601_2uni_page30[i-1410];
-        } else {
-          if (i < 8742)
-            wc = ksc5601_2uni_page4a[i-3854];
-        }
-        if (wc != 0xfffd) {
-          *pwc = (ucs4_t) wc;
-          return 2;
-        }
-      }
-      return RET_ILSEQ;
-    }
-    return RET_TOOFEW(0);
-  }
-  return RET_ILSEQ;
-}
-#endif /* NEED_TOWC */
-
-#ifdef NEED_TOMB
-static const unsigned short ksc5601_2charset[8224] = {
-  0x222e, 0x2234, 0x2157, 0x2127, 0x2823, 0x2129, 0x2146, 0x213e,
-  0x2977, 0x2978, 0x2225, 0x2252, 0x2124, 0x222c, 0x2976, 0x282c,
-  0x2879, 0x2876, 0x287a, 0x222f, 0x2821, 0x2822, 0x213f, 0x282a,
-  0x282d, 0x292c, 0x2921, 0x2923, 0x2140, 0x292a, 0x292d, 0x2922,
-  0x2824, 0x2924, 0x2925, 0x2826, 0x2926, 0x2927, 0x2828, 0x2928,
-  0x2829, 0x2929, 0x2930, 0x282f, 0x292f, 0x282b, 0x292b, 0x282e,
-  0x292e, 0x2227, 0x2230, 0x2228, 0x222b, 0x222a, 0x222d, 0x2229,
-  0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548,
-  0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550,
-  0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558,
-  0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568,
-  0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570,
-  0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2577, 0x2578,
-  0x2c27, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c28,
-  0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c30,
-  0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38,
-  0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40,
-  0x2c41, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c58,
-  0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c60,
-  0x2c61, 0x2c62, 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, 0x2c68,
-  0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c6f, 0x2c70,
-  0x2c71, 0x2c57, 0x212a, 0x212e, 0x212f, 0x2130, 0x2131, 0x2253,
-  0x2254, 0x2125, 0x2126, 0x2236, 0x2147, 0x2148, 0x2158, 0x2979,
-  0x297a, 0x297b, 0x297c, 0x297d, 0x297e, 0x2149, 0x2235, 0x2724,
-  0x2260, 0x2265, 0x2262, 0x2759, 0x214a, 0x2877, 0x2878, 0x287b,
-  0x287c, 0x287d, 0x287e, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534,
-  0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x2521, 0x2522, 0x2523,
-  0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x2167,
-  0x2168, 0x2166, 0x2169, 0x216a, 0x2255, 0x2258, 0x2256, 0x2259,
-  0x2257, 0x2221, 0x2222, 0x2223, 0x2153, 0x2224, 0x2154, 0x2174,
-  0x2175, 0x2233, 0x2232, 0x216e, 0x2170, 0x2144, 0x2150, 0x212b,
-  0x217c, 0x217d, 0x217b, 0x217a, 0x2172, 0x2173, 0x2231, 0x2145,
-  0x2171, 0x212d, 0x216f, 0x2156, 0x2141, 0x2155, 0x2142, 0x2143,
-  0x216c, 0x216d, 0x2178, 0x2179, 0x2176, 0x2177, 0x2241, 0x2151,
-  0x2152, 0x2867, 0x2868, 0x2869, 0x286a, 0x286b, 0x286c, 0x286d,
-  0x286e, 0x286f, 0x2870, 0x2871, 0x2872, 0x2873, 0x2874, 0x2875,
-  0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x296d, 0x296e,
-  0x296f, 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, 0x2975, 0x294d,
-  0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955,
-  0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, 0x295c, 0x295d,
-  0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965,
-  0x2966, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853,
-  0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b,
-  0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863,
-  0x2864, 0x2865, 0x2866, 0x2621, 0x262c, 0x2622, 0x262d, 0x2623,
-  0x2648, 0x2647, 0x262e, 0x2624, 0x2642, 0x2641, 0x262f, 0x2626,
-  0x2646, 0x2645, 0x2631, 0x2625, 0x2644, 0x2643, 0x2630, 0x2627,
-  0x263c, 0x2649, 0x264a, 0x2637, 0x264b, 0x264c, 0x2632, 0x2629,
-  0x263e, 0x264d, 0x264e, 0x2639, 0x264f, 0x2650, 0x2634, 0x2628,
-  0x2651, 0x2652, 0x2638, 0x263d, 0x2653, 0x2654, 0x2633, 0x262a,
-  0x2655, 0x2656, 0x263a, 0x263f, 0x2657, 0x2658, 0x2635, 0x262b,
-  0x2659, 0x265a, 0x263b, 0x265b, 0x265c, 0x2640, 0x265d, 0x265e,
-  0x265f, 0x2660, 0x2661, 0x2662, 0x2663, 0x2664, 0x2636, 0x2246,
-  0x2161, 0x2160, 0x2243, 0x2247, 0x2248, 0x224b, 0x224a, 0x2249,
-  0x224c, 0x2163, 0x2162, 0x223a, 0x2239, 0x2165, 0x2164, 0x2238,
-  0x2237, 0x215f, 0x215e, 0x2242, 0x215b, 0x215d, 0x215c, 0x2244,
-  0x2245, 0x215a, 0x2159, 0x224f, 0x224e, 0x2250, 0x2251, 0x214f,
-  0x214e, 0x223c, 0x223d, 0x2240, 0x223b, 0x223e, 0x223f, 0x224d,
-  0x225b, 0x225c, 0x225d, 0x225a, 0x2121, 0x2122, 0x2123, 0x2128,
-  0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b,
-  0x213c, 0x213d, 0x216b, 0x2132, 0x2133, 0x2a21, 0x2a22, 0x2a23,
-  0x2a24, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, 0x2a2a, 0x2a2b,
-  0x2a2c, 0x2a2d, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, 0x2a32, 0x2a33,
-  0x2a34, 0x2a35, 0x2a36, 0x2a37, 0x2a38, 0x2a39, 0x2a3a, 0x2a3b,
-  0x2a3c, 0x2a3d, 0x2a3e, 0x2a3f, 0x2a40, 0x2a41, 0x2a42, 0x2a43,
-  0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, 0x2a4a, 0x2a4b,
-  0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, 0x2a52, 0x2a53,
-  0x2a54, 0x2a55, 0x2a56, 0x2a57, 0x2a58, 0x2a59, 0x2a5a, 0x2a5b,
-  0x2a5c, 0x2a5d, 0x2a5e, 0x2a5f, 0x2a60, 0x2a61, 0x2a62, 0x2a63,
-  0x2a64, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, 0x2a6a, 0x2a6b,
-  0x2a6c, 0x2a6d, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, 0x2a72, 0x2a73,
-  0x2b21, 0x2b22, 0x2b23, 0x2b24, 0x2b25, 0x2b26, 0x2b27, 0x2b28,
-  0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e, 0x2b2f, 0x2b30,
-  0x2b31, 0x2b32, 0x2b33, 0x2b34, 0x2b35, 0x2b36, 0x2b37, 0x2b38,
-  0x2b39, 0x2b3a, 0x2b3b, 0x2b3c, 0x2b3d, 0x2b3e, 0x2b3f, 0x2b40,
-  0x2b41, 0x2b42, 0x2b43, 0x2b44, 0x2b45, 0x2b46, 0x2b47, 0x2b48,
-  0x2b49, 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4d, 0x2b4e, 0x2b4f, 0x2b50,
-  0x2b51, 0x2b52, 0x2b53, 0x2b54, 0x2b55, 0x2b56, 0x2b57, 0x2b58,
-  0x2b59, 0x2b5a, 0x2b5b, 0x2b5c, 0x2b5d, 0x2b5e, 0x2b5f, 0x2b60,
-  0x2b61, 0x2b62, 0x2b63, 0x2b64, 0x2b65, 0x2b66, 0x2b67, 0x2b68,
-  0x2b69, 0x2b6a, 0x2b6b, 0x2b6c, 0x2b6d, 0x2b6e, 0x2b6f, 0x2b70,
-  0x2b71, 0x2b72, 0x2b73, 0x2b74, 0x2b75, 0x2b76, 0x2421, 0x2422,
-  0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a,
-  0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432,
-  0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a,
-  0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442,
-  0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a,
-  0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452,
-  0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a,
-  0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462,
-  0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a,
-  0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472,
-  0x2473, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a,
-  0x247b, 0x247c, 0x247d, 0x247e, 0x2931, 0x2932, 0x2933, 0x2934,
-  0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c,
-  0x293d, 0x293e, 0x293f, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944,
-  0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294a, 0x294b, 0x294c,
-  0x225f, 0x2831, 0x2832, 0x2833, 0x2834, 0x2835, 0x2836, 0x2837,
-  0x2838, 0x2839, 0x283a, 0x283b, 0x283c, 0x283d, 0x283e, 0x283f,
-  0x2840, 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, 0x2846, 0x2847,
-  0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x225e, 0x2749, 0x274a,
-  0x274b, 0x274c, 0x274d, 0x273a, 0x273b, 0x275c, 0x275d, 0x275e,
-  0x2736, 0x2737, 0x2738, 0x2754, 0x2755, 0x2756, 0x2757, 0x2758,
-  0x2721, 0x2722, 0x2723, 0x2725, 0x272b, 0x272c, 0x272d, 0x272e,
-  0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2727, 0x2728,
-  0x2729, 0x272a, 0x273d, 0x273e, 0x2765, 0x2766, 0x2767, 0x2768,
-  0x2761, 0x2762, 0x2763, 0x273f, 0x2740, 0x2741, 0x2742, 0x2743,
-  0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x274e, 0x274f, 0x2750,
-  0x2751, 0x2752, 0x2753, 0x275a, 0x275b, 0x2263, 0x276c, 0x2726,
-  0x2760, 0x276f, 0x2261, 0x273c, 0x276d, 0x2735, 0x2739, 0x276a,
-  0x276b, 0x275f, 0x2264, 0x2764, 0x276e, 0x2769, 0x6c69, 0x6f4b,
-  0x7652, 0x5832, 0x6d5b, 0x5f32, 0x5f3e, 0x793b, 0x5c74, 0x7564,
-  0x7326, 0x5d60, 0x6126, 0x4e78, 0x5c30, 0x632a, 0x7169, 0x4d7a,
-  0x7c2f, 0x5321, 0x712b, 0x6751, 0x522c, 0x4e79, 0x717d, 0x5e3f,
-  0x7b3a, 0x7939, 0x4e52, 0x632b, 0x6b60, 0x4e7a, 0x4b77, 0x6525,
-  0x4a61, 0x544c, 0x6a61, 0x5c63, 0x5f2d, 0x4b6b, 0x552f, 0x5675,
-  0x6578, 0x5e40, 0x6c23, 0x694d, 0x6a27, 0x6976, 0x7b3b, 0x6769,
-  0x6f4c, 0x5066, 0x5e41, 0x642c, 0x584c, 0x7971, 0x4e5f, 0x7a24,
-  0x6632, 0x7a7b, 0x7a3d, 0x4c48, 0x6f4d, 0x5555, 0x5322, 0x6c51,
-  0x6427, 0x6c52, 0x7631, 0x4e7b, 0x5051, 0x4b3f, 0x6d24, 0x6d28,
-  0x5e42, 0x7662, 0x6d5c, 0x5c75, 0x6039, 0x544e, 0x7435, 0x535b,
-  0x5635, 0x6c24, 0x6466, 0x716a, 0x4b6c, 0x4b40, 0x6c72, 0x506a,
-  0x7972, 0x6c25, 0x505f, 0x676a, 0x506b, 0x5c51, 0x5b69, 0x7d4c,
-  0x5b57, 0x5a61, 0x5636, 0x635f, 0x5e43, 0x5e44, 0x4a21, 0x6e6c,
-  0x5323, 0x6e37, 0x784f, 0x6a48, 0x6e38, 0x712c, 0x7125, 0x694e,
-  0x793c, 0x6579, 0x6c6a, 0x5d56, 0x6d42, 0x7825, 0x653a, 0x5b58,
-  0x4a22, 0x514d, 0x6e6d, 0x6c6b, 0x5e45, 0x6360, 0x4a49, 0x7269,
-  0x554e, 0x7636, 0x4e42, 0x5647, 0x6334, 0x712d, 0x6a62, 0x5742,
-  0x7327, 0x4d6a, 0x6b6e, 0x5932, 0x7d25, 0x7655, 0x5562, 0x7835,
-  0x4c75, 0x7535, 0x642d, 0x676b, 0x7155, 0x703b, 0x6935, 0x4c49,
-  0x7a55, 0x6154, 0x5756, 0x5c41, 0x5e46, 0x7a6f, 0x6361, 0x6173,
-  0x5c76, 0x4e7c, 0x5b44, 0x7871, 0x5c64, 0x656f, 0x5c31, 0x5556,
-  0x735a, 0x4b41, 0x5b43, 0x597a, 0x536e, 0x7a38, 0x7d26, 0x6b6f,
-  0x7426, 0x4c4a, 0x7328, 0x735b, 0x5b27, 0x7637, 0x4f66, 0x7072,
-  0x4b5a, 0x6752, 0x5743, 0x7670, 0x685e, 0x6526, 0x6567, 0x4a23,
-  0x4c27, 0x6a49, 0x7836, 0x7a25, 0x712e, 0x6f4e, 0x4b6d, 0x7630,
-  0x6f4f, 0x694f, 0x775e, 0x4e53, 0x5c77, 0x5b28, 0x4b78, 0x5f21,
-  0x5d61, 0x754a, 0x6936, 0x676c, 0x6e6e, 0x7370, 0x5f3f, 0x4c4b,
-  0x5041, 0x7452, 0x603a, 0x5f40, 0x4e60, 0x5c52, 0x7d6a, 0x5676,
-  0x6a4a, 0x6869, 0x632c, 0x7350, 0x4a24, 0x5b78, 0x5e47, 0x6b70,
-  0x7156, 0x6562, 0x4c4c, 0x4b7b, 0x6a63, 0x5f41, 0x566d, 0x6950,
-  0x6e39, 0x5563, 0x5153, 0x6570, 0x6834, 0x6b43, 0x6a2a, 0x7a7c,
-  0x7576, 0x703c, 0x7d54, 0x603b, 0x4e43, 0x503a, 0x773a, 0x5873,
-  0x774d, 0x642e, 0x545f, 0x5067, 0x6c7d, 0x522e, 0x6e6f, 0x5557,
-  0x6a64, 0x7822, 0x4d6b, 0x573f, 0x7b31, 0x4d6c, 0x5c32, 0x506c,
-  0x4e7d, 0x6e70, 0x4c42, 0x506d, 0x6577, 0x737c, 0x6e22, 0x5933,
-  0x5874, 0x6937, 0x4e2e, 0x5922, 0x5871, 0x544f, 0x6527, 0x5552,
-  0x5629, 0x7422, 0x7157, 0x5558, 0x703d, 0x5750, 0x5450, 0x574f,
-  0x6b6a, 0x7d6b, 0x5b6d, 0x7c45, 0x4b42, 0x7d55, 0x7448, 0x686a,
-  0x7573, 0x795e, 0x536f, 0x6c53, 0x5d42, 0x6f37, 0x6754, 0x4a4a,
-  0x597b, 0x7a7d, 0x562a, 0x7478, 0x7777, 0x5c2c, 0x5757, 0x5f22,
-  0x4e3e, 0x5370, 0x7024, 0x616c, 0x4f67, 0x734b, 0x6d29, 0x4a3e,
-  0x746f, 0x764e, 0x5e7b, 0x503b, 0x5537, 0x6e71, 0x7428, 0x5c78,
-  0x4b27, 0x5a4e, 0x6066, 0x6d25, 0x6e72, 0x5c79, 0x795c, 0x735c,
-  0x7872, 0x7479, 0x7c71, 0x503c, 0x5b79, 0x5731, 0x4b7c, 0x7025,
-  0x4b7d, 0x5574, 0x4d6d, 0x4a25, 0x562b, 0x5042, 0x703e, 0x523d,
-  0x4c24, 0x7a36, 0x4c4d, 0x5a7a, 0x764f, 0x6938, 0x5875, 0x4c4e,
-  0x574d, 0x5451, 0x696d, 0x4a6b, 0x5962, 0x7d32, 0x632d, 0x564c,
-  0x5934, 0x6127, 0x6e53, 0x5043, 0x7d33, 0x5564, 0x4f68, 0x6d43,
-  0x5032, 0x4e7e, 0x5a28, 0x7850, 0x7d56, 0x7851, 0x7852, 0x5c53,
-  0x5d62, 0x7b79, 0x5d41, 0x6335, 0x6d5d, 0x4e44, 0x4b21, 0x5d63,
-  0x7c5d, 0x792f, 0x527b, 0x4f21, 0x6428, 0x7436, 0x6c7e, 0x632e,
-  0x676d, 0x7d41, 0x5a62, 0x5833, 0x5d64, 0x706f, 0x7671, 0x7a70,
-  0x5175, 0x5a4f, 0x5c54, 0x5c26, 0x6f3f, 0x4e4f, 0x6059, 0x5956,
-  0x6c54, 0x6a4b, 0x4a3f, 0x5530, 0x4f69, 0x716d, 0x4c4f, 0x6478,
-  0x646d, 0x5758, 0x7d27, 0x6a2b, 0x7632, 0x4f70, 0x793d, 0x6674,
-  0x4b5b, 0x7351, 0x6951, 0x7329, 0x5060, 0x6952, 0x5a63, 0x6252,
-  0x7622, 0x6174, 0x5a64, 0x6755, 0x753f, 0x4f22, 0x4d2f, 0x4f23,
-  0x4d30, 0x717e, 0x5023, 0x612f, 0x7823, 0x4a26, 0x773b, 0x726a,
-  0x5e48, 0x6953, 0x5e49, 0x7d5e, 0x4a40, 0x796a, 0x514e, 0x6e54,
-  0x5452, 0x5923, 0x7d28, 0x5759, 0x774e, 0x7a3e, 0x4f56, 0x5770,
-  0x6b61, 0x7845, 0x5c7a, 0x5d43, 0x795f, 0x676f, 0x7d65, 0x7623,
-  0x597c, 0x7d29, 0x676e, 0x5565, 0x6f50, 0x4d31, 0x7722, 0x7132,
-  0x7131, 0x4d32, 0x5a2b, 0x4a27, 0x6362, 0x7b3c, 0x5924, 0x6e3a,
-  0x7853, 0x7b7a, 0x4f24, 0x5c7b, 0x7663, 0x6d2a, 0x7221, 0x4e61,
-  0x7a26, 0x7960, 0x6c56, 0x646e, 0x7921, 0x7b6f, 0x796b, 0x6e23,
-  0x6a2c, 0x4a28, 0x747a, 0x4d56, 0x7c76, 0x7449, 0x7854, 0x7826,
-  0x5e4a, 0x7246, 0x575a, 0x5350, 0x5845, 0x6a66, 0x735d, 0x645a,
-  0x7664, 0x7672, 0x5f42, 0x597d, 0x4c76, 0x533a, 0x642f, 0x7961,
-  0x7026, 0x4b53, 0x603c, 0x744a, 0x547a, 0x7d2a, 0x7962, 0x7437,
-  0x7d42, 0x7c30, 0x7d6c, 0x4a62, 0x7d3d, 0x6a67, 0x5f43, 0x5152,
-  0x4e62, 0x5324, 0x7d2b, 0x5f60, 0x7247, 0x6770, 0x506e, 0x732a,
-  0x5e4b, 0x7638, 0x6175, 0x7133, 0x7723, 0x4a29, 0x4f25, 0x5f44,
-  0x6130, 0x703f, 0x7624, 0x6336, 0x7a46, 0x506f, 0x7d6d, 0x5d44,
-  0x7c77, 0x663f, 0x5e2d, 0x7a3f, 0x6571, 0x6d44, 0x5225, 0x7d6e,
-  0x7536, 0x6176, 0x5e4c, 0x7c5e, 0x6c57, 0x4d5d, 0x5637, 0x4d33,
-  0x7855, 0x6558, 0x4f6a, 0x4f50, 0x6a4c, 0x6a2e, 0x6a2d, 0x5371,
-  0x5325, 0x774f, 0x6e24, 0x5024, 0x7222, 0x5070, 0x7223, 0x7778,
-  0x5033, 0x5b29, 0x533b, 0x4a6c, 0x7126, 0x4b55, 0x7767, 0x4d5e,
-  0x7724, 0x7840, 0x535d, 0x4c50, 0x4f26, 0x7673, 0x6177, 0x535c,
-  0x7a7e, 0x7a27, 0x6b59, 0x4f27, 0x6a2f, 0x646f, 0x6939, 0x7158,
-  0x5858, 0x6072, 0x6634, 0x5c7c, 0x7371, 0x6350, 0x727b, 0x5b46,
-  0x5071, 0x5072, 0x4f5c, 0x5351, 0x4c31, 0x7758, 0x4b28, 0x6b3c,
-  0x643e, 0x745c, 0x5c42, 0x7027, 0x6640, 0x4a6d, 0x686b, 0x6568,
-  0x5c43, 0x6d5e, 0x5372, 0x4c77, 0x4e54, 0x672b, 0x4b43, 0x6131,
-  0x7732, 0x5373, 0x5352, 0x7540, 0x5f5d, 0x6e73, 0x6771, 0x7d34,
-  0x7248, 0x7352, 0x6e74, 0x6253, 0x4c51, 0x5f6a, 0x693a, 0x5957,
-  0x754d, 0x7172, 0x7a47, 0x5978, 0x5442, 0x7665, 0x5d45, 0x6772,
-  0x6d5f, 0x4a4b, 0x5b7a, 0x6835, 0x5326, 0x7d35, 0x7949, 0x6462,
-  0x7b3d, 0x5724, 0x4e45, 0x4e55, 0x5666, 0x653d, 0x5e4d, 0x6c73,
-  0x6d60, 0x6c6c, 0x7b3e, 0x5f6b, 0x6178, 0x793e, 0x5073, 0x602a,
-  0x6862, 0x6254, 0x527d, 0x6528, 0x5953, 0x535e, 0x7438, 0x773c,
-  0x5c7d, 0x686c, 0x6467, 0x6377, 0x6c28, 0x7a71, 0x6572, 0x5074,
-  0x522f, 0x5c65, 0x5025, 0x7134, 0x7c31, 0x4c78, 0x5d46, 0x7a51,
-  0x775f, 0x7a28, 0x6e75, 0x5e4e, 0x6773, 0x772c, 0x6b44, 0x6d61,
-  0x602b, 0x5d47, 0x5233, 0x523f, 0x4a4c, 0x7b3f, 0x657d, 0x5d65,
-  0x584d, 0x6c74, 0x5075, 0x686d, 0x5052, 0x5958, 0x7666, 0x5b2a,
-  0x7760, 0x5859, 0x7423, 0x745d, 0x6f51, 0x5935, 0x6d2b, 0x6337,
-  0x6e3b, 0x4d34, 0x6073, 0x6a4d, 0x6c75, 0x686e, 0x4b29, 0x712f,
-  0x4a4d, 0x6c29, 0x726b, 0x7d6f, 0x7973, 0x6641, 0x6c58, 0x6d2c,
-  0x6a4e, 0x685f, 0x5e4f, 0x5226, 0x6774, 0x5156, 0x6642, 0x6363,
-  0x6430, 0x5834, 0x7625, 0x735e, 0x5725, 0x7768, 0x6846, 0x7b66,
-  0x5d66, 0x5c7e, 0x585a, 0x5a2c, 0x6a30, 0x6338, 0x4a2a, 0x6179,
-  0x6a31, 0x726c, 0x7a6e, 0x6e55, 0x7974, 0x526c, 0x7b7b, 0x7d70,
-  0x603d, 0x4e63, 0x7846, 0x5e2e, 0x5f45, 0x653e, 0x6d2d, 0x7a6a,
-  0x4d6e, 0x6d26, 0x6d2e, 0x706d, 0x5d21, 0x6d2f, 0x7c78, 0x586b,
-  0x4c79, 0x4d35, 0x7a29, 0x615d, 0x6255, 0x6d4f, 0x5d22, 0x794a,
-  0x6a68, 0x656d, 0x536b, 0x6954, 0x617a, 0x644c, 0x6164, 0x6847,
-  0x4e5b, 0x5c55, 0x7735, 0x7c73, 0x7073, 0x4e2f, 0x7135, 0x6f52,
-  0x6848, 0x6b71, 0x4b54, 0x603e, 0x6378, 0x6a69, 0x7c32, 0x6074,
-  0x4f60, 0x6e25, 0x7a2a, 0x6643, 0x6132, 0x4a2b, 0x6364, 0x693b,
-  0x6256, 0x7372, 0x6e56, 0x6a32, 0x5076, 0x6c59, 0x5a4b, 0x4f28,
-  0x5d23, 0x585b, 0x794e, 0x6955, 0x6351, 0x523c, 0x582c, 0x734c,
-  0x4d7b, 0x7656, 0x6775, 0x686f, 0x6379, 0x523b, 0x7373, 0x637b,
-  0x5e50, 0x4e30, 0x5677, 0x7159, 0x7541, 0x5c44, 0x753b, 0x5e51,
-  0x5c66, 0x5e52, 0x6d62, 0x6e76, 0x6a4f, 0x706e, 0x637c, 0x535f,
-  0x5374, 0x6133, 0x6134, 0x7453, 0x5f46, 0x6956, 0x5b2b, 0x7626,
-  0x6339, 0x6b45, 0x7429, 0x4d36, 0x5279, 0x5a2d, 0x5263, 0x4f51,
-  0x4b5c, 0x4c7a, 0x4f5d, 0x6829, 0x633b, 0x633a, 0x605a, 0x6e77,
-  0x5c33, 0x5375, 0x5726, 0x7635, 0x575b, 0x6155, 0x546a, 0x5f23,
-  0x7d5f, 0x5077, 0x6d54, 0x4b2a, 0x645b, 0x617b, 0x4b22, 0x5360,
-  0x643f, 0x7b40, 0x5a3e, 0x644d, 0x5639, 0x6f40, 0x617c, 0x7639,
-  0x5f47, 0x6431, 0x5c67, 0x5c68, 0x7a56, 0x5376, 0x715a, 0x7a72,
-  0x627d, 0x554f, 0x5078, 0x4d5f, 0x754b, 0x6470, 0x4b2b, 0x5744,
-  0x627e, 0x5d5a, 0x5a2e, 0x4a6e, 0x5539, 0x6321, 0x6863, 0x732b,
-  0x4f29, 0x5377, 0x5471, 0x4e64, 0x6872, 0x6575, 0x672e, 0x563a,
-  0x5f6c, 0x6440, 0x6864, 0x5835, 0x645c, 0x7439, 0x7136, 0x625e,
-  0x6135, 0x4d6f, 0x7127, 0x4e65, 0x4b5d, 0x5963, 0x732c, 0x5079,
-  0x6c2b, 0x5e53, 0x7769, 0x7975, 0x615e, 0x4b6e, 0x633c, 0x7856,
-  0x5b6e, 0x7d71, 0x7736, 0x745e, 0x726d, 0x5b59, 0x7028, 0x617d,
-  0x5e54, 0x602c, 0x6d63, 0x5361, 0x5f48, 0x5936, 0x7d2c, 0x6f53,
-  0x6441, 0x786b, 0x5b2c, 0x7c46, 0x582d, 0x763a, 0x5b5f, 0x5353,
-  0x7847, 0x4a4e, 0x7841, 0x5234, 0x5c34, 0x7a39, 0x4a4f, 0x7c33,
-  0x6a6a, 0x6a6b, 0x507a, 0x6d64, 0x5d67, 0x5f49, 0x5f6d, 0x6e3c,
-  0x6f41, 0x4c52, 0x5d24, 0x5f4a, 0x5378, 0x7128, 0x4d37, 0x6f54,
-  0x645d, 0x5f6e, 0x4b2c, 0x693c, 0x6a6c, 0x5f4b, 0x793f, 0x562f,
-  0x5546, 0x4f2a, 0x4e29, 0x5678, 0x7137, 0x6e78, 0x5959, 0x735f,
-  0x7848, 0x4e46, 0x5566, 0x7466, 0x6645, 0x6f55, 0x4b6f, 0x7c5f,
-  0x5c27, 0x5667, 0x7849, 0x6352, 0x633d, 0x4f61, 0x7040, 0x6c5a,
-  0x5d57, 0x7b70, 0x6c2c, 0x7029, 0x7a57, 0x7b41, 0x5240, 0x6530,
-  0x6d65, 0x4b2d, 0x7930, 0x7725, 0x4b2e, 0x5a2f, 0x5836, 0x5327,
-  0x7b32, 0x7d44, 0x6c2d, 0x7b21, 0x6569, 0x696e, 0x7374, 0x7873,
-  0x7041, 0x5e2f, 0x7830, 0x7360, 0x672f, 0x5b2d, 0x6635, 0x7928,
-  0x5d58, 0x6859, 0x6f56, 0x5362, 0x625f, 0x7c60, 0x5748, 0x7d2d,
-  0x5f6f, 0x4c53, 0x5379, 0x5470, 0x5b47, 0x5e55, 0x7074, 0x5550,
-  0x6559, 0x7c47, 0x5c56, 0x6260, 0x5a30, 0x7323, 0x536c, 0x744b,
-  0x7d45, 0x637d, 0x7931, 0x507b, 0x6c5b, 0x753c, 0x7224, 0x584e,
-  0x584f, 0x7577, 0x7661, 0x5237, 0x7b6c, 0x5d48, 0x6468, 0x5241,
-  0x7857, 0x563b, 0x5e56, 0x773d, 0x6c2e, 0x5061, 0x6075, 0x6a33,
-  0x4e56, 0x4c25, 0x6c76, 0x6261, 0x633e, 0x7c48, 0x4d70, 0x7976,
-  0x5f70, 0x653f, 0x4e3f, 0x7c61, 0x6d30, 0x7d51, 0x763b, 0x794f,
-  0x6b5a, 0x4a41, 0x5238, 0x4d71, 0x6353, 0x7d66, 0x666d, 0x637a,
-  0x702a, 0x7950, 0x7c62, 0x7827, 0x6165, 0x6e79, 0x6776, 0x6a6d,
-  0x7c34, 0x7542, 0x575c, 0x7075, 0x5d68, 0x536d, 0x757c, 0x5a3f,
-  0x4c7b, 0x537a, 0x7424, 0x6f57, 0x5443, 0x7b63, 0x7b6d, 0x602d,
-  0x6a6e, 0x7b33, 0x6442, 0x7667, 0x525d, 0x5f4c, 0x7c49, 0x6529,
-  0x6076, 0x7633, 0x617e, 0x4b70, 0x6a6f, 0x6a70, 0x5a40, 0x7834,
-  0x6b72, 0x6443, 0x6957, 0x6471, 0x4a6f, 0x4e57, 0x7c4a, 0x7361,
-  0x4b44, 0x6365, 0x4b45, 0x6a34, 0x693d, 0x5749, 0x6b5b, 0x6d31,
-  0x4c43, 0x773e, 0x7c4b, 0x7874, 0x5937, 0x7353, 0x7354, 0x7764,
-  0x7751, 0x5837, 0x4e31, 0x4a42, 0x7b34, 0x4b46, 0x7076, 0x5567,
-  0x6a50, 0x4c54, 0x4b2f, 0x742a, 0x692f, 0x7543, 0x6958, 0x5d69,
-  0x7173, 0x557b, 0x5e3b, 0x747b, 0x7d73, 0x7d72, 0x7726, 0x5d49,
-  0x5453, 0x4c28, 0x5a41, 0x4c55, 0x5964, 0x7a4a, 0x6563, 0x533c,
-  0x4a70, 0x5044, 0x4a50, 0x7a2b, 0x6b6b, 0x6778, 0x5965, 0x5157,
-  0x7324, 0x547b, 0x7c63, 0x7a58, 0x7355, 0x4f2b, 0x6b73, 0x557c,
-  0x5354, 0x4d7c, 0x5966, 0x6279, 0x6221, 0x6b54, 0x6077, 0x6432,
-  0x4c7c, 0x7b64, 0x742b, 0x503d, 0x4a71, 0x6f38, 0x5740, 0x6e7a,
-  0x7d74, 0x5363, 0x7b42, 0x5568, 0x5b2e, 0x6136, 0x7837, 0x603f,
-  0x7b43, 0x5d6a, 0x6222, 0x6e26, 0x7668, 0x7675, 0x5d4a, 0x5062,
-  0x5d26, 0x5d6b, 0x6479, 0x632f, 0x507c, 0x747c, 0x4c3c, 0x776a,
-  0x6564, 0x5f71, 0x7761, 0x7977, 0x6f39, 0x7858, 0x7929, 0x7859,
-  0x6e3d, 0x5846, 0x6463, 0x754e, 0x5d59, 0x5967, 0x5239, 0x5543,
-  0x5a65, 0x5a50, 0x5159, 0x4e58, 0x4b5e, 0x742c, 0x5a7b, 0x7669,
-  0x6873, 0x4f2c, 0x7070, 0x747d, 0x5b48, 0x4e40, 0x6354, 0x514f,
-  0x7175, 0x4d72, 0x4f6b, 0x4d38, 0x6326, 0x515a, 0x7225, 0x7226,
-  0x644e, 0x537b, 0x7129, 0x7249, 0x6f58, 0x6649, 0x5838, 0x7a73,
-  0x7335, 0x7824, 0x5173, 0x6648, 0x785a, 0x5c69, 0x5e57, 0x4b5f,
-  0x4f6c, 0x745f, 0x5174, 0x523a, 0x5f72, 0x6137, 0x6223, 0x537c,
-  0x6d66, 0x5b49, 0x647a, 0x4f5e, 0x4e50, 0x5553, 0x7375, 0x772e,
-  0x6f48, 0x4d73, 0x754f, 0x6573, 0x7042, 0x4a51, 0x6a71, 0x5026,
-  0x595a, 0x702b, 0x6b67, 0x6540, 0x7c35, 0x6444, 0x4c29, 0x7d46,
-  0x6a35, 0x652a, 0x5f3a, 0x615f, 0x5a51, 0x6138, 0x6874, 0x537d,
-  0x6224, 0x724a, 0x5a66, 0x7733, 0x7d4d, 0x7336, 0x6e57, 0x7544,
-  0x5824, 0x7227, 0x5938, 0x5939, 0x6f49, 0x564e, 0x774b, 0x5f2e,
-  0x6875, 0x5235, 0x5355, 0x744c, 0x5a7c, 0x5968, 0x776b, 0x7549,
-  0x733c, 0x5a52, 0x5335, 0x6836, 0x564f, 0x743a, 0x7749, 0x4c2a,
-  0x7043, 0x4c56, 0x5053, 0x533d, 0x5b7b, 0x4b60, 0x5364, 0x7677,
-  0x553a, 0x734d, 0x4b61, 0x6b74, 0x742d, 0x7c2a, 0x776c, 0x6876,
-  0x5a67, 0x774c, 0x6541, 0x606e, 0x557d, 0x4e66, 0x7c2b, 0x553b,
-  0x7228, 0x6225, 0x4d39, 0x6a72, 0x4b47, 0x4d74, 0x5b2f, 0x6f59,
-  0x4d3a, 0x7c79, 0x5f73, 0x4e67, 0x5a42, 0x4f2d, 0x6779, 0x7828,
-  0x7362, 0x4a72, 0x5f24, 0x5444, 0x4c57, 0x6542, 0x4d3b, 0x6f5a,
-  0x6e58, 0x5d27, 0x6226, 0x6040, 0x5630, 0x784a, 0x7c7a, 0x597e,
-  0x5e30, 0x5d6c, 0x5a68, 0x5460, 0x5679, 0x4d57, 0x5e58, 0x7278,
-  0x6456, 0x5045, 0x742e, 0x5d28, 0x6d45, 0x7356, 0x5e59, 0x6366,
-  0x5328, 0x5b30, 0x655a, 0x633f, 0x5b31, 0x5569, 0x6041, 0x6f5b,
-  0x7069, 0x5732, 0x507d, 0x5969, 0x507e, 0x6c6d, 0x5329, 0x7229,
-  0x7044, 0x6262, 0x696f, 0x7951, 0x6959, 0x685a, 0x5a43, 0x5a44,
-  0x5445, 0x677a, 0x4d60, 0x6330, 0x5b32, 0x7b44, 0x7363, 0x5925,
-  0x7b67, 0x5d4b, 0x5054, 0x6636, 0x602e, 0x7d5a, 0x5c35, 0x6078,
-  0x6731, 0x7570, 0x585c, 0x6d46, 0x6139, 0x6340, 0x7940, 0x6970,
-  0x595b, 0x7364, 0x5c36, 0x6469, 0x7045, 0x6341, 0x7c4c, 0x7c4d,
-  0x724b, 0x724c, 0x644f, 0x715b, 0x7a59, 0x7138, 0x7d75, 0x6079,
-  0x677b, 0x7c37, 0x7c64, 0x7b45, 0x6367, 0x5839, 0x7678, 0x5c45,
-  0x4c58, 0x602f, 0x7467, 0x6f5c, 0x4f7c, 0x6f5d, 0x722a, 0x7d3e,
-  0x4a2c, 0x7d3b, 0x7d47, 0x6732, 0x6a51, 0x5f74, 0x516c, 0x645e,
-  0x6543, 0x5926, 0x4d3c, 0x7365, 0x6d55, 0x593a, 0x6d67, 0x7b35,
-  0x786c, 0x6067, 0x4c59, 0x5446, 0x6725, 0x5575, 0x533e, 0x7c7b,
-  0x6472, 0x5f75, 0x6878, 0x786d, 0x4e47, 0x7d76, 0x6858, 0x4d58,
-  0x6756, 0x4c5a, 0x4a63, 0x5f76, 0x7047, 0x7046, 0x583a, 0x7174,
-  0x7470, 0x754c, 0x7c65, 0x6a45, 0x6a73, 0x5d5b, 0x5c57, 0x5e7d,
-  0x7279, 0x5547, 0x5850, 0x7048, 0x5121, 0x5122, 0x5954, 0x5668,
-  0x594a, 0x5a31, 0x5847, 0x5c62, 0x734e, 0x7574, 0x7139, 0x5a53,
-  0x766a, 0x4f75, 0x7d2e, 0x4a52, 0x5f34, 0x575d, 0x7a3a, 0x6e27,
-  0x753d, 0x7875, 0x6d68, 0x5461, 0x5123, 0x6156, 0x7978, 0x5b4a,
-  0x4b79, 0x5454, 0x595c, 0x6e3e, 0x776d, 0x526e, 0x6166, 0x7779,
-  0x5d6d, 0x685b, 0x5b33, 0x5177, 0x6030, 0x5462, 0x7657, 0x5779,
-  0x585d, 0x4d7d, 0x722b, 0x4d3d, 0x7842, 0x722c, 0x4a2d, 0x4a2e,
-  0x4f2e, 0x6342, 0x5c37, 0x5b5a, 0x593b, 0x4a73, 0x7653, 0x6678,
-  0x6a75, 0x6a76, 0x7679, 0x4f2f, 0x4a53, 0x4a2f, 0x5230, 0x713a,
-  0x5733, 0x6343, 0x737d, 0x5e5a, 0x5e5b, 0x6f5e, 0x6263, 0x6e7b,
-  0x5f77, 0x574a, 0x4e68, 0x5b5b, 0x713b, 0x6971, 0x7a37, 0x5046,
-  0x4c2b, 0x6e28, 0x4b7a, 0x7979, 0x4c7d, 0x537e, 0x6450, 0x726e,
-  0x5455, 0x5f4d, 0x7c38, 0x5150, 0x724d, 0x7752, 0x4a54, 0x5559,
-  0x585e, 0x4d59, 0x6e29, 0x763c, 0x4c5b, 0x7049, 0x7c7c, 0x6849,
-  0x747e, 0x677c, 0x575e, 0x5e5c, 0x702c, 0x4c7e, 0x4d61, 0x613a,
-  0x5b6f, 0x5a32, 0x5125, 0x5c38, 0x5876, 0x5124, 0x4d62, 0x5c6a,
-  0x7077, 0x704a, 0x503e, 0x5d5c, 0x5456, 0x5356, 0x6d50, 0x4d21,
-  0x5f35, 0x5f78, 0x5421, 0x4e32, 0x684a, 0x6b75, 0x6355, 0x7550,
-  0x7521, 0x5927, 0x652b, 0x664b, 0x7571, 0x6545, 0x7923, 0x605b,
-  0x766b, 0x4b71, 0x596a, 0x7522, 0x5751, 0x5178, 0x6a78, 0x6a79,
-  0x5a33, 0x6f5f, 0x716f, 0x6576, 0x6e3f, 0x6264, 0x503f, 0x7a2c,
-  0x7551, 0x6733, 0x693e, 0x724e, 0x5b34, 0x7c4e, 0x5d6e, 0x6734,
-  0x5734, 0x7734, 0x4d3e, 0x5a69, 0x4f30, 0x7759, 0x7366, 0x4e59,
-  0x4e2a, 0x4b48, 0x5027, 0x704b, 0x5047, 0x6445, 0x5b60, 0x555a,
-  0x5727, 0x6e40, 0x7876, 0x7552, 0x6d69, 0x593c, 0x6546, 0x7523,
-  0x5a54, 0x6227, 0x7b7c, 0x715c, 0x4a74, 0x687a, 0x4e69, 0x6978,
-  0x6265, 0x5039, 0x5472, 0x5126, 0x5f4e, 0x7c74, 0x532a, 0x4c2c,
-  0x6f60, 0x6565, 0x5055, 0x5b7c, 0x7c66, 0x4b7e, 0x6d6a, 0x5e31,
-  0x7963, 0x5422, 0x4f76, 0x5650, 0x556a, 0x716e, 0x7a4b, 0x6521,
-  0x5531, 0x4f6d, 0x6d6b, 0x5532, 0x553c, 0x7d62, 0x732d, 0x7d5b,
-  0x6930, 0x5127, 0x7d63, 0x4e33, 0x7d64, 0x7a4e, 0x4a30, 0x7727,
-  0x4f31, 0x6622, 0x7c36, 0x722d, 0x6f61, 0x732e, 0x5c46, 0x596b,
-  0x6860, 0x6128, 0x5576, 0x4f7d, 0x5e5d, 0x5951, 0x646a, 0x724f,
-  0x773f, 0x6266, 0x6228, 0x6356, 0x6d51, 0x6979, 0x5631, 0x5e32,
-  0x6068, 0x532b, 0x6b5c, 0x5f2f, 0x4a43, 0x6e7c, 0x7d43, 0x6b76,
-  0x4f32, 0x596c, 0x593d, 0x585f, 0x5438, 0x6b3e, 0x5d6f, 0x5d70,
-  0x5d71, 0x5d72, 0x593e, 0x7b46, 0x4f33, 0x6e7d, 0x642b, 0x5a45,
-  0x586c, 0x5128, 0x6229, 0x5e3c, 0x6735, 0x5b70, 0x6f62, 0x7170,
-  0x4f34, 0x5b71, 0x6031, 0x5f25, 0x7952, 0x677d, 0x6623, 0x7b71,
-  0x4b30, 0x722e, 0x4d67, 0x685c, 0x6757, 0x7740, 0x5063, 0x5a21,
-  0x4c3d, 0x5129, 0x5d4c, 0x637e, 0x512a, 0x682a, 0x6a36, 0x797a,
-  0x664c, 0x7658, 0x5447, 0x594b, 0x5952, 0x534b, 0x5877, 0x5a29,
-  0x7578, 0x5e5e, 0x722f, 0x7829, 0x5848, 0x6e41, 0x7941, 0x5d73,
-  0x6a7a, 0x763d, 0x613b, 0x4d3f, 0x7454, 0x664d, 0x7c4f, 0x7b22,
-  0x605c, 0x743b, 0x5a55, 0x7932, 0x7b72, 0x5b76, 0x5e5f, 0x5b72,
-  0x785c, 0x776e, 0x6b68, 0x527a, 0x713c, 0x7a5a, 0x5a6a, 0x5a46,
-  0x7741, 0x6736, 0x6547, 0x562c, 0x5c47, 0x6129, 0x622a, 0x5526,
-  0x5457, 0x7250, 0x6a7b, 0x605d, 0x7b73, 0x713d, 0x6267, 0x7d57,
-  0x4e48, 0x6a37, 0x7c40, 0x7d67, 0x776f, 0x5735, 0x6f3a, 0x715d,
-  0x5e33, 0x684b, 0x785d, 0x7b47, 0x5548, 0x575f, 0x5d29, 0x6931,
-  0x7a2d, 0x7659, 0x7a74, 0x782a, 0x666e, 0x4c5c, 0x613c, 0x606f,
-  0x693f, 0x7c7d, 0x664e, 0x6157, 0x664f, 0x7471, 0x6473, 0x647b,
-  0x7964, 0x6f63, 0x4f6e, 0x763e, 0x6032, 0x7c7e, 0x512b, 0x577a,
-  0x7b48, 0x6257, 0x5423, 0x7078, 0x5728, 0x6167, 0x533f, 0x6f64,
-  0x5745, 0x6b62, 0x7c67, 0x6422, 0x6268, 0x6650, 0x7b68, 0x7468,
-  0x6574, 0x743c, 0x7455, 0x5f36, 0x7c39, 0x6e42, 0x4a75, 0x6f65,
-  0x4b62, 0x5424, 0x5e60, 0x5a7d, 0x6446, 0x683e, 0x605e, 0x7634,
-  0x6a52, 0x797b, 0x6042, 0x4a64, 0x6737, 0x6a7d, 0x595d, 0x5a34,
-  0x6e2a, 0x7b69, 0x5b4b, 0x5a35, 0x713e, 0x532c, 0x7b49, 0x5f4f,
-  0x5340, 0x6357, 0x6f66, 0x7c50, 0x6940, 0x7553, 0x6c5c, 0x7737,
-  0x6a38, 0x5179, 0x5c48, 0x6a39, 0x715e, 0x5736, 0x4f35, 0x5928,
-  0x6c6e, 0x5d2a, 0x4d22, 0x682e, 0x613d, 0x7251, 0x6941, 0x527c,
-  0x5b35, 0x7367, 0x587e, 0x7c51, 0x6d32, 0x742f, 0x7b23, 0x7c41,
-  0x6e2b, 0x5425, 0x7472, 0x6e59, 0x7b4a, 0x4d63, 0x583b, 0x655b,
-  0x7877, 0x7654, 0x5729, 0x4b49, 0x6651, 0x704c, 0x582e, 0x7953,
-  0x557e, 0x583c, 0x7230, 0x622b, 0x7368, 0x6f42, 0x6d6c, 0x6738,
-  0x5a7e, 0x4c3e, 0x727c, 0x5a6b, 0x6258, 0x6d56, 0x5651, 0x6033,
-  0x7c52, 0x6b48, 0x5341, 0x704d, 0x4f77, 0x6d52, 0x5458, 0x5c49,
-  0x5771, 0x5f3b, 0x7325, 0x744d, 0x713f, 0x7831, 0x697a, 0x7b4b,
-  0x4a55, 0x7954, 0x774a, 0x5648, 0x7c68, 0x733d, 0x6e7e, 0x677e,
-  0x5342, 0x5336, 0x4c2d, 0x767a, 0x5632, 0x5258, 0x6758, 0x6325,
-  0x6739, 0x702d, 0x7b4c, 0x6b21, 0x5426, 0x7b4d, 0x553d, 0x715f,
-  0x767b, 0x5e34, 0x556b, 0x6548, 0x7b24, 0x5439, 0x5e61, 0x6423,
-  0x5737, 0x786e, 0x5e35, 0x5652, 0x7955, 0x673a, 0x6b55, 0x5577,
-  0x6f67, 0x613e, 0x7a2e, 0x5669, 0x566e, 0x673b, 0x6c4b, 0x5533,
-  0x4e34, 0x7b25, 0x616e, 0x7728, 0x7b4e, 0x583d, 0x7b7d, 0x7c69,
-  0x4f36, 0x6d47, 0x6e2c, 0x4c5d, 0x7627, 0x667a, 0x7524, 0x7d5c,
-  0x6d33, 0x4e49, 0x6f68, 0x613f, 0x7a5b, 0x4b63, 0x7729, 0x7b26,
-  0x5c39, 0x7140, 0x6d48, 0x6f43, 0x562d, 0x7d4e, 0x6821, 0x7b74,
-  0x5527, 0x7176, 0x6653, 0x4c5e, 0x7832, 0x5c6b, 0x7d36, 0x656a,
-  0x7160, 0x5b4c, 0x5d4d, 0x5448, 0x596d, 0x7525, 0x667b, 0x6654,
-  0x7d48, 0x5621, 0x7d3f, 0x7c53, 0x6f21, 0x673c, 0x516e, 0x6655,
-  0x6972, 0x5f30, 0x5860, 0x7c3a, 0x7d2f, 0x704e, 0x5b61, 0x6549,
-  0x6d34, 0x6043, 0x6358, 0x697b, 0x6a28, 0x7d37, 0x7b27, 0x6942,
-  0x7d77, 0x6259, 0x5c6c, 0x6822, 0x6670, 0x7d78, 0x7d79, 0x763f,
-  0x6727, 0x6657, 0x5473, 0x5449, 0x567a, 0x5772, 0x6140, 0x5b62,
-  0x6658, 0x673d, 0x704f, 0x733e, 0x622c, 0x7537, 0x6070, 0x7d38,
-  0x6368, 0x5427, 0x687c, 0x7a52, 0x786f, 0x5653, 0x5534, 0x7050,
-  0x7770, 0x6e33, 0x6a3a, 0x6a53, 0x6d49, 0x5d2b, 0x652c, 0x7d21,
-  0x5f50, 0x6c33, 0x5f51, 0x6d6d, 0x7838, 0x777a, 0x782b, 0x7460,
-  0x543a, 0x6433, 0x695a, 0x5e36, 0x593f, 0x5940, 0x566f, 0x594c,
-  0x5a2a, 0x5f65, 0x7765, 0x4c32, 0x5f79, 0x5760, 0x543b, 0x7d7a,
-  0x4c33, 0x5b73, 0x5f52, 0x4e4a, 0x6e5a, 0x6464, 0x7b4f, 0x4f37,
-  0x6e43, 0x4e6a, 0x622d, 0x5761, 0x7a75, 0x5549, 0x782c, 0x6759,
-  0x7369, 0x586d, 0x6344, 0x7071, 0x6865, 0x607a, 0x6e44, 0x595e,
-  0x6b22, 0x6b23, 0x7c42, 0x6a3b, 0x682b, 0x5e62, 0x6d6f, 0x6823,
-  0x4f71, 0x543c, 0x7c6a, 0x673e, 0x7c72, 0x5634, 0x622e, 0x5337,
-  0x7a4c, 0x7a5c, 0x6d35, 0x6163, 0x682c, 0x685d, 0x6f69, 0x743d,
-  0x4f38, 0x695b, 0x512c, 0x5a47, 0x6b49, 0x684c, 0x5e37, 0x563c,
-  0x5365, 0x7a5d, 0x5a56, 0x4a31, 0x5a48, 0x5f26, 0x7933, 0x7252,
-  0x4a44, 0x4e4b, 0x4d75, 0x7d30, 0x5528, 0x7141, 0x6269, 0x5c4a,
-  0x6c34, 0x7a40, 0x7b28, 0x5028, 0x5a6c, 0x596e, 0x607b, 0x6f6a,
-  0x7a5e, 0x6044, 0x4f39, 0x554a, 0x5762, 0x622f, 0x5738, 0x684d,
-  0x765a, 0x6f22, 0x625a, 0x767c, 0x7b50, 0x512d, 0x4d64, 0x512e,
-  0x5c6d, 0x684e, 0x7079, 0x4e35, 0x667c, 0x577b, 0x5056, 0x5d75,
-  0x7771, 0x767d, 0x5b77, 0x7b6a, 0x695c, 0x5941, 0x7572, 0x6045,
-  0x6a54, 0x7942, 0x6a3c, 0x5245, 0x7b51, 0x6740, 0x6b25, 0x5f7a,
-  0x6322, 0x5739, 0x6943, 0x687d, 0x682f, 0x7253, 0x7b29, 0x5825,
-  0x554b, 0x5048, 0x512f, 0x5763, 0x6046, 0x5622, 0x6d70, 0x5773,
-  0x7c54, 0x5a57, 0x4c5f, 0x7254, 0x5130, 0x4c60, 0x5b7d, 0x733f,
-  0x7051, 0x7c3b, 0x6230, 0x6625, 0x625b, 0x5f5e, 0x6047, 0x726f,
-  0x4c61, 0x566a, 0x6742, 0x4e36, 0x7340, 0x4d7e, 0x7b52, 0x7878,
-  0x777b, 0x683f, 0x6837, 0x6d36, 0x5c3a, 0x4c34, 0x7177, 0x6838,
-  0x4a76, 0x6424, 0x7456, 0x5f66, 0x5f27, 0x5f67, 0x6141, 0x6944,
-  0x5c4b, 0x6945, 0x6f23, 0x6b26, 0x4b23, 0x6369, 0x517b, 0x6f24,
-  0x6f6b, 0x5034, 0x4d23, 0x6866, 0x6f25, 0x534c, 0x5a6d, 0x573a,
-  0x7255, 0x7565, 0x596f, 0x7934, 0x5554, 0x7d4f, 0x5b63, 0x7161,
-  0x6c36, 0x7b7e, 0x5357, 0x5131, 0x4b31, 0x5132, 0x4b32, 0x7142,
-  0x7461, 0x7935, 0x6143, 0x6142, 0x6b77, 0x5f28, 0x4b4a, 0x6639,
-  0x785e, 0x792a, 0x4a77, 0x6d37, 0x5338, 0x7256, 0x5459, 0x6e45,
-  0x7270, 0x4a32, 0x5c3b, 0x7178, 0x6c37, 0x654a, 0x7640, 0x7d5d,
-  0x5463, 0x4c62, 0x7754, 0x5765, 0x5343, 0x5826, 0x7641, 0x5d76,
-  0x4d40, 0x655c, 0x654b, 0x6144, 0x6830, 0x7430, 0x736a, 0x5a6e,
-  0x573b, 0x6231, 0x572a, 0x567b, 0x645f, 0x4a56, 0x6b28, 0x5b7e,
-  0x7642, 0x6f3b, 0x547d, 0x6048, 0x6839, 0x6f26, 0x4d24, 0x5474,
-  0x5b21, 0x5b5c, 0x5b5d, 0x6e5c, 0x4b4b, 0x7c55, 0x4e6b, 0x4d41,
-  0x7b53, 0x792b, 0x7554, 0x5929, 0x695d, 0x5b4d, 0x5d4e, 0x6743,
-  0x6c4c, 0x796c, 0x4b4c, 0x607c, 0x5428, 0x6d53, 0x586f, 0x7257,
-  0x4a78, 0x5a6f, 0x5654, 0x594d, 0x586e, 0x7241, 0x5f53, 0x5a70,
-  0x626a, 0x607d, 0x5878, 0x772f, 0x5a36, 0x4a57, 0x7258, 0x5879,
-  0x7a5f, 0x4f6f, 0x5942, 0x7052, 0x6451, 0x7337, 0x7a60, 0x6f6c,
-  0x6232, 0x543d, 0x594e, 0x7462, 0x5429, 0x4d42, 0x675a, 0x7259,
-  0x592a, 0x583e, 0x5c2d, 0x626b, 0x567c, 0x4a79, 0x545a, 0x7457,
-  0x4c21, 0x4f3a, 0x7538, 0x5943, 0x5068, 0x6345, 0x6b78, 0x7231,
-  0x4f3b, 0x532d, 0x6861, 0x4e6c, 0x6034, 0x5e63, 0x5d77, 0x7232,
-  0x7376, 0x765b, 0x577e, 0x785f, 0x7772, 0x5029, 0x665a, 0x7526,
-  0x573c, 0x4c63, 0x665b, 0x5d5d, 0x5133, 0x6f6d, 0x565e, 0x6474,
-  0x616f, 0x5d78, 0x684f, 0x4a65, 0x5c21, 0x6035, 0x7c2c, 0x7c2d,
-  0x5827, 0x6d38, 0x5b36, 0x5670, 0x732f, 0x4d25, 0x5a71, 0x5828,
-  0x4c64, 0x5134, 0x4a58, 0x5a72, 0x7527, 0x7528, 0x6626, 0x556c,
-  0x5578, 0x5a73, 0x6346, 0x5e64, 0x5e65, 0x5135, 0x5136, 0x5137,
-  0x7233, 0x695e, 0x7053, 0x7234, 0x7054, 0x4b64, 0x7b54, 0x7566,
-  0x636a, 0x5e66, 0x5f54, 0x7879, 0x702e, 0x5138, 0x565f, 0x5057,
-  0x7c21, 0x6f6e, 0x5c58, 0x695f, 0x655d, 0x7d7b, 0x6049, 0x5649,
-  0x542a, 0x654c, 0x6960, 0x5058, 0x7c22, 0x543e, 0x6233, 0x5e67,
-  0x5c3c, 0x5236, 0x7555, 0x4e21, 0x7529, 0x5d79, 0x5d7a, 0x7055,
-  0x765f, 0x725a, 0x646b, 0x7271, 0x6c39, 0x7d7c, 0x612a, 0x4a59,
-  0x6f6f, 0x752a, 0x6c79, 0x782d, 0x7242, 0x7643, 0x5752, 0x7922,
-  0x7056, 0x707a, 0x7660, 0x6973, 0x7243, 0x542b, 0x4a33, 0x4d26,
-  0x4d43, 0x4d5a, 0x594f, 0x7644, 0x6e5d, 0x6744, 0x6234, 0x5f62,
-  0x675b, 0x6831, 0x7c2e, 0x654d, 0x7a6b, 0x4f3c, 0x4f62, 0x4d76,
-  0x6f70, 0x743e, 0x544d, 0x7338, 0x6921, 0x7272, 0x736b, 0x7057,
-  0x4f57, 0x4f5f, 0x6840, 0x6841, 0x4f63, 0x6922, 0x502a, 0x7341,
-  0x502b, 0x5464, 0x6f3c, 0x5821, 0x595f, 0x7357, 0x5c3d, 0x4c65,
-  0x6d71, 0x7162, 0x545b, 0x6235, 0x4a66, 0x532e, 0x4c66, 0x7153,
-  0x7567, 0x4a5a, 0x7b6e, 0x6145, 0x5f69, 0x6e5e, 0x7742, 0x5822,
-  0x5d2c, 0x702f, 0x563d, 0x612b, 0x7936, 0x5475, 0x5049, 0x6f27,
-  0x626c, 0x5b6a, 0x4e4c, 0x7568, 0x7755, 0x534d, 0x737e, 0x5035,
-  0x607e, 0x5f7b, 0x665d, 0x6824, 0x4b4d, 0x6f28, 0x6e34, 0x5a58,
-  0x5139, 0x5f29, 0x7330, 0x4c44, 0x4e37, 0x6f29, 0x5f55, 0x6d57,
-  0x6e46, 0x6f3d, 0x7c56, 0x5b74, 0x6f2a, 0x7839, 0x7569, 0x6359,
-  0x6146, 0x543f, 0x5e68, 0x706a, 0x7342, 0x532f, 0x4a5b, 0x7c57,
-  0x6d58, 0x6147, 0x7458, 0x5633, 0x5d2d, 0x553e, 0x7143, 0x6e5f,
-  0x566b, 0x7459, 0x5766, 0x5a37, 0x5d7b, 0x5d4f, 0x5823, 0x5a59,
-  0x7058, 0x6f44, 0x6158, 0x7154, 0x6d72, 0x555b, 0x555c, 0x7344,
-  0x4b57, 0x6236, 0x6f71, 0x7b55, 0x5358, 0x5d50, 0x7059, 0x4b33,
-  0x555d, 0x4d27, 0x502c, 0x513a, 0x7144, 0x6533, 0x7b75, 0x6961,
-  0x7d60, 0x7c3c, 0x5a22, 0x5a23, 0x5221, 0x526f, 0x626d, 0x5e69,
-  0x4e5c, 0x7235, 0x5064, 0x5d51, 0x6148, 0x5b37, 0x5f63, 0x6d39,
-  0x7145, 0x734f, 0x572b, 0x612c, 0x636b, 0x6e47, 0x6149, 0x4a7a,
-  0x707b, 0x7a61, 0x705a, 0x4c67, 0x5a74, 0x4c3f, 0x4e6d, 0x5529,
-  0x7a62, 0x5065, 0x6b56, 0x6c5f, 0x5f7c, 0x7756, 0x5e6a, 0x4b34,
-  0x6f3e, 0x4c35, 0x4f3d, 0x6f72, 0x6237, 0x4c68, 0x707c, 0x5660,
-  0x7146, 0x6238, 0x6b2b, 0x4b35, 0x5851, 0x744e, 0x7377, 0x5746,
-  0x513b, 0x772a, 0x6d4a, 0x5753, 0x587a, 0x7645, 0x514c, 0x5d7c,
-  0x5f7d, 0x7965, 0x604a, 0x727d, 0x5330, 0x7473, 0x5a49, 0x665e,
-  0x783a, 0x6850, 0x587b, 0x6a55, 0x5623, 0x7646, 0x725b, 0x647c,
-  0x6832, 0x5a5a, 0x725c, 0x7b56, 0x6932, 0x6e2d, 0x7a63, 0x5c6e,
-  0x756a, 0x6660, 0x707d, 0x572c, 0x7545, 0x6e60, 0x5b65, 0x5d5e,
-  0x5970, 0x6923, 0x7179, 0x7244, 0x604b, 0x6924, 0x6239, 0x6331,
-  0x7c6b, 0x4d28, 0x4c36, 0x705b, 0x663a, 0x4d29, 0x7343, 0x6159,
-  0x6f2b, 0x6745, 0x6069, 0x7345, 0x5440, 0x553f, 0x5d2e, 0x797c,
-  0x4c40, 0x6522, 0x4e38, 0x5852, 0x7956, 0x712a, 0x4e51, 0x7647,
-  0x5b6b, 0x5f7e, 0x5861, 0x7773, 0x5767, 0x547e, 0x513c, 0x654f,
-  0x4b36, 0x5a38, 0x4d44, 0x563e, 0x623a, 0x4f58, 0x604c, 0x6b79,
-  0x7d7d, 0x5768, 0x4b58, 0x6962, 0x683a, 0x6347, 0x6c4d, 0x6c4e,
-  0x563f, 0x6327, 0x5f56, 0x7d68, 0x6e61, 0x7628, 0x5d7d, 0x783b,
-  0x6851, 0x7957, 0x4e6e, 0x6c4f, 0x6925, 0x5655, 0x4d45, 0x6d3a,
-  0x513d, 0x4f3e, 0x6c3b, 0x5231, 0x4c69, 0x5944, 0x697c, 0x513e,
-  0x6c3c, 0x652d, 0x7730, 0x4c6a, 0x5344, 0x5640, 0x567d, 0x6121,
-  0x5e3d, 0x7629, 0x5a24, 0x5624, 0x7546, 0x6122, 0x6946, 0x7245,
-  0x7469, 0x566c, 0x6b53, 0x6c3d, 0x625c, 0x5e6b, 0x705c, 0x6b3f,
-  0x574e, 0x513f, 0x752b, 0x797d, 0x4a5c, 0x4d46, 0x7236, 0x5d7e,
-  0x4c37, 0x5b38, 0x5069, 0x4e5d, 0x6b40, 0x7d22, 0x784b, 0x6a56,
-  0x7130, 0x5b4e, 0x7743, 0x5b4f, 0x4b24, 0x7860, 0x7b57, 0x6b4a,
-  0x6021, 0x4e4d, 0x545c, 0x7d58, 0x5276, 0x7237, 0x7a76, 0x762a,
-  0x7a77, 0x5866, 0x7431, 0x6852, 0x4a45, 0x4c6b, 0x626e, 0x623b,
-  0x772d, 0x7861, 0x736c, 0x5e21, 0x647d, 0x636c, 0x5d2f, 0x5d30,
-  0x4b37, 0x6853, 0x6123, 0x5260, 0x707e, 0x6926, 0x4b72, 0x6d73,
-  0x5c59, 0x604d, 0x775a, 0x5b39, 0x4c2e, 0x5a5b, 0x4d47, 0x5d31,
-  0x582f, 0x6323, 0x4e6f, 0x7273, 0x7833, 0x604e, 0x757d, 0x6b6c,
-  0x5345, 0x7c6c, 0x525b, 0x546b, 0x5e22, 0x6566, 0x7030, 0x5544,
-  0x6d74, 0x636d, 0x6842, 0x6d75, 0x577c, 0x6d3b, 0x762b, 0x7238,
-  0x7648, 0x5366, 0x725d, 0x4f3f, 0x6b2c, 0x4f40, 0x6628, 0x7d69,
-  0x4f41, 0x605f, 0x5e6c, 0x6022, 0x743f, 0x626f, 0x5971, 0x7147,
-  0x4b38, 0x797e, 0x5b3a, 0x5a75, 0x766c, 0x5a5c, 0x7a64, 0x604f,
-  0x5d32, 0x6629, 0x6f73, 0x736d, 0x6b7a, 0x7966, 0x4a5d, 0x555e,
-  0x4a5e, 0x5f64, 0x667d, 0x752c, 0x6475, 0x6963, 0x6d4b, 0x4f64,
-  0x5853, 0x5d33, 0x546c, 0x7239, 0x5f37, 0x4b4e, 0x7b58, 0x5059,
-  0x5d52, 0x7774, 0x675c, 0x6425, 0x7c23, 0x5b3b, 0x723a, 0x697d,
-  0x504a, 0x7556, 0x5945, 0x6434, 0x6d27, 0x6a3d, 0x667e, 0x7744,
-  0x752d, 0x5960, 0x4a34, 0x7862, 0x4f42, 0x6c3e, 0x6534, 0x4d48,
-  0x6e48, 0x6748, 0x4d49, 0x7937, 0x7168, 0x5972, 0x5b75, 0x4a35,
-  0x5946, 0x5849, 0x592b, 0x6d3c, 0x5854, 0x5c5a, 0x623c, 0x7c6d,
-  0x6c60, 0x527e, 0x6947, 0x662a, 0x6270, 0x7a3b, 0x752e, 0x7b2a,
-  0x6c7b, 0x6c3f, 0x7c58, 0x5465, 0x7943, 0x6e62, 0x5769, 0x6d76,
-  0x5e6d, 0x4c6c, 0x636e, 0x6854, 0x7a78, 0x5d34, 0x6435, 0x5830,
-  0x5855, 0x746a, 0x4e39, 0x5661, 0x4f52, 0x5036, 0x4e22, 0x736e,
-  0x7378, 0x5c4c, 0x504b, 0x7c24, 0x4d4a, 0x5754, 0x5e23, 0x6460,
-  0x6e49, 0x625d, 0x757e, 0x542c, 0x5551, 0x5870, 0x7843, 0x6a57,
-  0x7557, 0x583f, 0x7d40, 0x6b2d, 0x552a, 0x6728, 0x6e4a, 0x4a67,
-  0x7863, 0x545d, 0x6a58, 0x7b59, 0x6d77, 0x6535, 0x502d, 0x7171,
-  0x623d, 0x6348, 0x5955, 0x5f2a, 0x5b3c, 0x7864, 0x717a, 0x6536,
-  0x736f, 0x7b5a, 0x6160, 0x592c, 0x756b, 0x6036, 0x6948, 0x4b4f,
-  0x6349, 0x5e6e, 0x623e, 0x5c6f, 0x5625, 0x6271, 0x567e, 0x5921,
-  0x5840, 0x5c5b, 0x6d3d, 0x5f38, 0x6a25, 0x572d, 0x7379, 0x6d78,
-  0x7547, 0x614a, 0x6b63, 0x725e, 0x784c, 0x6a59, 0x5346, 0x5b66,
-  0x752f, 0x4e70, 0x697e, 0x7b36, 0x6272, 0x4f72, 0x7739, 0x5973,
-  0x614b, 0x5a5d, 0x5a39, 0x6b7b, 0x4b39, 0x6d79, 0x6060, 0x7440,
-  0x7d3c, 0x5f31, 0x636f, 0x6023, 0x7d39, 0x7031, 0x4d4b, 0x6d3e,
-  0x5540, 0x6370, 0x6d7a, 0x6964, 0x556d, 0x675d, 0x5476, 0x6537,
-  0x5b67, 0x623f, 0x6e4b, 0x5774, 0x705d, 0x4e2b, 0x675e, 0x5656,
-  0x614c, 0x6833, 0x656e, 0x5c22, 0x6050, 0x5535, 0x5521, 0x7b5b,
-  0x794b, 0x4b73, 0x7425, 0x7a48, 0x5657, 0x6965, 0x7b5c, 0x7d50,
-  0x7b76, 0x5a25, 0x5b3d, 0x6c62, 0x4d77, 0x705e, 0x7649, 0x5e6f,
-  0x5331, 0x7c6e, 0x6843, 0x7148, 0x4e71, 0x796d, 0x7274, 0x6436,
-  0x7539, 0x5c70, 0x6371, 0x6825, 0x723b, 0x5e24, 0x5a4c, 0x4a69,
-  0x635a, 0x7c59, 0x6a5a, 0x7944, 0x6324, 0x7b5d, 0x6f4a, 0x6844,
-  0x554c, 0x6b57, 0x592d, 0x7b2b, 0x5359, 0x5522, 0x765e, 0x5a76,
-  0x6051, 0x6928, 0x7579, 0x7a2f, 0x6b7c, 0x606a, 0x6332, 0x5545,
-  0x7163, 0x556e, 0x4d4c, 0x6d59, 0x5841, 0x7a6c, 0x716b, 0x7a3c,
-  0x6662, 0x7a65, 0x627a, 0x4a36, 0x6437, 0x6a5b, 0x757a, 0x7b2c,
-  0x4f43, 0x6b7d, 0x787a, 0x5f39, 0x6171, 0x5224, 0x757b, 0x505a,
-  0x505b, 0x6a3e, 0x5931, 0x4a37, 0x5367, 0x7865, 0x5332, 0x6240,
-  0x725f, 0x4d65, 0x792c, 0x4d4d, 0x6e2e, 0x562e, 0x576a, 0x6760,
-  0x6b2e, 0x4f59, 0x5c4d, 0x6d7b, 0x5e70, 0x576b, 0x5e25, 0x5f57,
-  0x5b50, 0x5b51, 0x5523, 0x7032, 0x5c5c, 0x4a68, 0x7866, 0x5c4e,
-  0x6a5c, 0x5b52, 0x6933, 0x775b, 0x6328, 0x572e, 0x6061, 0x4b3a,
-  0x6551, 0x505c, 0x5541, 0x584a, 0x6329, 0x6024, 0x6929, 0x5347,
-  0x5c5d, 0x782e, 0x4c38, 0x502e, 0x5872, 0x634a, 0x4c2f, 0x542d,
-  0x7651, 0x504c, 0x4a46, 0x5542, 0x4e3a, 0x4a47, 0x7a30, 0x5f58,
-  0x753a, 0x656b, 0x6f74, 0x5d35, 0x4d2a, 0x6372, 0x7b77, 0x7750,
-  0x7d3a, 0x7d61, 0x767e, 0x5140, 0x6845, 0x6438, 0x6168, 0x4c41,
-  0x526d, 0x5b3e, 0x6062, 0x7a49, 0x614d, 0x4a38, 0x7260, 0x7149,
-  0x5e71, 0x705f, 0x7844, 0x6e4c, 0x5e72, 0x6749, 0x6273, 0x6761,
-  0x634b, 0x634c, 0x4f78, 0x6f2c, 0x7d7e, 0x7c25, 0x7a31, 0x5f59,
-  0x6052, 0x745a, 0x714a, 0x4e23, 0x723c, 0x6c63, 0x6025, 0x772b,
-  0x6b2f, 0x655e, 0x6124, 0x4d2b, 0x5974, 0x6826, 0x4d4e, 0x6169,
-  0x7c6f, 0x6063, 0x6241, 0x4e24, 0x5e26, 0x6b7e, 0x6b5d, 0x7060,
-  0x745b, 0x6274, 0x5348, 0x746b, 0x6e35, 0x7558, 0x555f, 0x5665,
-  0x6b30, 0x7463, 0x634d, 0x7474, 0x7a32, 0x6f75, 0x4a5f, 0x6b31,
-  0x6d3f, 0x7d49, 0x6426, 0x7924, 0x7033, 0x656c, 0x5167, 0x5947,
-  0x6457, 0x6a5d, 0x5477, 0x5a3a, 0x5a4d, 0x794c, 0x615a, 0x5b3f,
-  0x4c45, 0x6c50, 0x4b3b, 0x5e73, 0x692a, 0x5948, 0x6e63, 0x573d,
-  0x4f44, 0x504d, 0x7c26, 0x717b, 0x7d52, 0x5141, 0x635b, 0x5349,
-  0x5c4f, 0x4c6d, 0x5e27, 0x663b, 0x6c21, 0x4c39, 0x7b5e, 0x6762,
-  0x5441, 0x5c28, 0x6242, 0x7358, 0x6553, 0x7359, 0x7346, 0x4d5b,
-  0x4d2c, 0x7c43, 0x5467, 0x5142, 0x7925, 0x6855, 0x634e, 0x544a,
-  0x5f5a, 0x7b5f, 0x6763, 0x787b, 0x634f, 0x7530, 0x5867, 0x5949,
-  0x782f, 0x6f76, 0x5d36, 0x6e2f, 0x4d78, 0x5e38, 0x7c27, 0x777c,
-  0x7731, 0x4e3b, 0x7421, 0x6e4d, 0x612e, 0x6c43, 0x4f7e, 0x783f,
-  0x5862, 0x5368, 0x5e28, 0x7464, 0x6c42, 0x5975, 0x7945, 0x5d53,
-  0x5671, 0x6c7c, 0x7c70, 0x6d40, 0x4a39, 0x6e64, 0x7261, 0x5e39,
-  0x5672, 0x5e74, 0x5f5b, 0x5b53, 0x7a67, 0x5863, 0x7441, 0x5d37,
-  0x7275, 0x542e, 0x5673, 0x5d38, 0x4f45, 0x5f5f, 0x723e, 0x7621,
-  0x6b4b, 0x717c, 0x7347, 0x606b, 0x6d7c, 0x615b, 0x6e65, 0x5e75,
-  0x7a53, 0x714b, 0x502f, 0x5d39, 0x5143, 0x7531, 0x6a46, 0x7061,
-  0x762c, 0x7559, 0x706b, 0x5d3a, 0x723f, 0x7745, 0x5b22, 0x7276,
-  0x4a3a, 0x7775, 0x4b65, 0x6e66, 0x6053, 0x4e25, 0x5658, 0x542f,
-  0x6949, 0x534e, 0x7442, 0x4b66, 0x7121, 0x6b32, 0x7122, 0x6b33,
-  0x7034, 0x4b74, 0x5430, 0x7332, 0x7b37, 0x756c, 0x6e67, 0x7432,
-  0x756d, 0x4f73, 0x7062, 0x6e4e, 0x714c, 0x6538, 0x5775, 0x6373,
-  0x4f65, 0x4f46, 0x7333, 0x6458, 0x4f79, 0x4f5a, 0x7a4d, 0x6663,
-  0x7262, 0x756e, 0x4a3b, 0x635c, 0x4e72, 0x5659, 0x6e30, 0x7465,
-  0x5842, 0x5c50, 0x4c6e, 0x5560, 0x764a, 0x7d4a, 0x5856, 0x744f,
-  0x5626, 0x5c3e, 0x5b54, 0x5747, 0x727e, 0x714d, 0x6243, 0x5c5e,
-  0x5c5f, 0x6f2d, 0x662b, 0x795d, 0x6a3f, 0x6f2e, 0x7450, 0x4e73,
-  0x662c, 0x4e5e, 0x5579, 0x6374, 0x4d50, 0x5538, 0x777d, 0x5c29,
-  0x5e76, 0x5c2a, 0x7263, 0x6934, 0x525c, 0x6966, 0x6376, 0x674a,
-  0x504e, 0x5a77, 0x4a3c, 0x6e68, 0x5a5e, 0x7277, 0x627b, 0x4c26,
-  0x5a3b, 0x6e69, 0x755a, 0x775c, 0x616a, 0x4e41, 0x5431, 0x7d31,
-  0x663d, 0x7b2d, 0x7867, 0x614e, 0x7762, 0x756f, 0x4f47, 0x5432,
-  0x4c6f, 0x5468, 0x6e4f, 0x7757, 0x6026, 0x5641, 0x615c, 0x7063,
-  0x7164, 0x5c71, 0x5627, 0x7475, 0x714e, 0x7264, 0x5030, 0x6c6f,
-  0x793a, 0x6b35, 0x546d, 0x6244, 0x6967, 0x6b34, 0x6a21, 0x783c,
-  0x4e26, 0x7946, 0x7c5a, 0x5433, 0x5339, 0x6a5e, 0x692b, 0x6161,
-  0x534f, 0x7476, 0x6a40, 0x614f, 0x4c3a, 0x6e6a, 0x7064, 0x7334,
-  0x546e, 0x7240, 0x7165, 0x7443, 0x6054, 0x6b36, 0x5721, 0x4b68,
-  0x792d, 0x692d, 0x5864, 0x7a33, 0x6245, 0x7c3d, 0x6c44, 0x5831,
-  0x5c2b, 0x5524, 0x6b69, 0x683b, 0x5857, 0x7b2e, 0x5161, 0x5b40,
-  0x753e, 0x5e77, 0x4a7b, 0x7746, 0x4f48, 0x6150, 0x6e50, 0x6974,
-  0x4e74, 0x554d, 0x4f5b, 0x5d3b, 0x4e2c, 0x6968, 0x5434, 0x6447,
-  0x755b, 0x7a41, 0x5e29, 0x5478, 0x6f77, 0x5333, 0x6b37, 0x6f78,
-  0x755c, 0x6d4c, 0x5b55, 0x714f, 0x7150, 0x7532, 0x592e, 0x552c,
-  0x6246, 0x7d23, 0x7b65, 0x5f2b, 0x6275, 0x762d, 0x7533, 0x7035,
-  0x6125, 0x755d, 0x6c22, 0x6d7d, 0x7534, 0x7b38, 0x5b23, 0x564a,
-  0x4b59, 0x6554, 0x737a, 0x6b38, 0x6037, 0x576c, 0x716c, 0x652f,
-  0x5561, 0x576d, 0x5151, 0x6172, 0x6f79, 0x5d3c, 0x765c, 0x7065,
-  0x7444, 0x6969, 0x737b, 0x546f, 0x4c22, 0x777e, 0x5f3c, 0x6b4d,
-  0x5037, 0x5642, 0x682d, 0x6f2f, 0x4b25, 0x4b69, 0x7a68, 0x4c46,
-  0x6667, 0x6a47, 0x5b24, 0x4f49, 0x627c, 0x6f7a, 0x6b5e, 0x7548,
-  0x545e, 0x6055, 0x6f30, 0x6247, 0x592f, 0x7967, 0x6765, 0x4f4a,
-  0x6151, 0x6248, 0x6f7b, 0x7a79, 0x5c72, 0x6027, 0x7868, 0x4b6a,
-  0x4b3c, 0x5662, 0x755e, 0x755f, 0x6e36, 0x6276, 0x534a, 0x6f7c,
-  0x5144, 0x6f31, 0x5145, 0x505e, 0x5961, 0x6038, 0x4d51, 0x7339,
-  0x674c, 0x5628, 0x4e27, 0x5435, 0x6448, 0x5334, 0x6b39, 0x4b75,
-  0x765d, 0x7123, 0x4c47, 0x694a, 0x6170, 0x7560, 0x7b2f, 0x4b51,
-  0x7b60, 0x7265, 0x6c70, 0x706c, 0x6e6b, 0x694b, 0x4c70, 0x572f,
-  0x7321, 0x7c75, 0x7124, 0x6056, 0x6f32, 0x7451, 0x7721, 0x7151,
-  0x4a7c, 0x4a7d, 0x4e4e, 0x7348, 0x733a, 0x6d7e, 0x5a26, 0x606c,
-  0x784d, 0x4b52, 0x6b4e, 0x7958, 0x7959, 0x4a60, 0x5a4a, 0x4b26,
-  0x4a48, 0x796e, 0x5b6c, 0x5031, 0x556f, 0x6673, 0x6722, 0x6459,
-  0x6461, 0x7c44, 0x796f, 0x4f74, 0x7766, 0x4e3c, 0x7445, 0x5c23,
-  0x5d3d, 0x7446, 0x7821, 0x6856, 0x5b41, 0x7066, 0x6439, 0x766d,
-  0x792e, 0x5d3e, 0x5730, 0x5868, 0x4b3d, 0x795a, 0x784e, 0x7970,
-  0x606d, 0x6333, 0x7433, 0x6a42, 0x7266, 0x7036, 0x5b56, 0x6b64,
-  0x7267, 0x5755, 0x5436, 0x7968, 0x5741, 0x6555, 0x696a, 0x574c,
-  0x5369, 0x6249, 0x7c5b, 0x4d2d, 0x4c30, 0x6a22, 0x6476, 0x5040,
-  0x7037, 0x6e21, 0x5776, 0x624a, 0x624b, 0x7a4f, 0x6b5f, 0x564b,
-  0x7434, 0x6d4d, 0x6452, 0x6a29, 0x643a, 0x7322, 0x4d52, 0x764b,
-  0x7166, 0x6d41, 0x683c, 0x6e51, 0x7067, 0x624c, 0x642a, 0x7561,
-  0x6d5a, 0x576e, 0x5171, 0x696b, 0x696c, 0x6064, 0x5a27, 0x5d54,
-  0x6a23, 0x5643, 0x5674, 0x5a5f, 0x6f33, 0x624d, 0x6f7d, 0x7268,
-  0x6f45, 0x6767, 0x577d, 0x674e, 0x5f5c, 0x7947, 0x5976, 0x5f2c,
-  0x565a, 0x5c24, 0x7038, 0x557a, 0x6477, 0x5644, 0x746c, 0x6f7e,
-  0x7021, 0x5e2a, 0x5a3c, 0x587c, 0x7a54, 0x6c65, 0x7c28, 0x6c66,
-  0x584b, 0x7b39, 0x6453, 0x4d79, 0x4f53, 0x4a6a, 0x4f54, 0x783d,
-  0x7447, 0x6a5f, 0x795b, 0x5437, 0x6b65, 0x6152, 0x6a24, 0x7a42,
-  0x7b61, 0x7a6d, 0x7022, 0x4c71, 0x7a23, 0x6277, 0x624e, 0x6975,
-  0x616b, 0x6768, 0x6857, 0x5a78, 0x544b, 0x7776, 0x5645, 0x5469,
-  0x7a7a, 0x4c72, 0x775d, 0x5e3a, 0x4e28, 0x7039, 0x647e, 0x6449,
-  0x6454, 0x6a43, 0x6f34, 0x573e, 0x7b62, 0x4d53, 0x6f35, 0x7a69,
-  0x7926, 0x5f3d, 0x7747, 0x787d, 0x787c, 0x5e2b, 0x5b68, 0x635d,
-  0x6162, 0x5146, 0x7650, 0x6b66, 0x5a79, 0x6c47, 0x5e78, 0x7869,
-  0x635e, 0x4e75, 0x7a43, 0x6557, 0x6c48, 0x7349, 0x643b, 0x662e,
-  0x6f36, 0x5c3f, 0x4e3d, 0x5843, 0x504f, 0x4f7a, 0x734a, 0x6057,
-  0x5147, 0x692e, 0x683d, 0x7a44, 0x624f, 0x7a45, 0x7938, 0x5c60,
-  0x7b30, 0x5829, 0x655f, 0x7927, 0x766e, 0x764c, 0x6278, 0x6c71,
-  0x5a60, 0x7152, 0x524c, 0x4f4b, 0x4a3d, 0x5d3f, 0x766f, 0x5e79,
-  0x7a34, 0x552d, 0x7167, 0x5e3e, 0x5c40, 0x5148, 0x5149, 0x783e,
-  0x4b76, 0x5479, 0x7562, 0x6153, 0x5869, 0x787e, 0x4f4c, 0x7d24,
-  0x4e76, 0x7a50, 0x4c73, 0x663e, 0x762e, 0x5570, 0x514a, 0x7c3e,
-  0x5571, 0x4d69, 0x7a35, 0x6250, 0x7477, 0x4d54, 0x6723, 0x5b25,
-  0x6251, 0x5722, 0x7763, 0x6a26, 0x5021, 0x4e5a, 0x7b6b, 0x5b26,
-  0x5b5e, 0x5865, 0x6a60, 0x582a, 0x6560, 0x565b, 0x6f46, 0x786a,
-  0x6455, 0x4e77, 0x6058, 0x576f, 0x746d, 0x4d66, 0x4c74, 0x7563,
-  0x644a, 0x5c61, 0x7948, 0x7c3f, 0x6827, 0x5844, 0x4b3e, 0x5c2e,
-  0x5777, 0x7068, 0x5d40, 0x4f4d, 0x5c73, 0x5930, 0x6669, 0x643c,
-  0x6a44, 0x646c, 0x6465, 0x7b78, 0x4c3b, 0x643d, 0x4d5c, 0x5977,
-  0x5d5f, 0x6d4e, 0x5950, 0x6523, 0x794d, 0x4d2e, 0x4f4e, 0x762f,
-  0x7d53, 0x6b6d, 0x565c, 0x6524, 0x5536, 0x565d, 0x7969, 0x6724,
-  0x5663, 0x514b, 0x5664, 0x5572, 0x5e7a, 0x5778, 0x586a, 0x4f55,
-  0x587d, 0x582b, 0x7d4b, 0x7c5c, 0x6028, 0x5573, 0x7d59, 0x4c23,
-  0x5979, 0x536a, 0x7575, 0x6f47, 0x535a, 0x5a3d, 0x6828, 0x5c2f,
-  0x7023, 0x4d55, 0x6029, 0x5e2c, 0x703a, 0x6e31, 0x6e32, 0x764d,
-  0x6e52, 0x5646, 0x6065, 0x733b, 0x6561, 0x644b, 0x5723, 0x5b42,
-  0x4a7e, 0x4f4f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026,
-  0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e,
-  0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036,
-  0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e,
-  0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046,
-  0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e,
-  0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056,
-  0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e,
-  0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066,
-  0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e,
-  0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
-  0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e,
-  0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128,
-  0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130,
-  0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
-  0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
-  0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
-  0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
-  0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
-  0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
-  0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168,
-  0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170,
-  0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178,
-  0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222,
-  0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a,
-  0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232,
-  0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a,
-  0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242,
-  0x3243, 0x3244, 0x3245, 0x3246, 0x3247, 0x3248, 0x3249, 0x324a,
-  0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3251, 0x3252,
-  0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a,
-  0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262,
-  0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a,
-  0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272,
-  0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a,
-  0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324,
-  0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c,
-  0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334,
-  0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c,
-  0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344,
-  0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c,
-  0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354,
-  0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c,
-  0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364,
-  0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c,
-  0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374,
-  0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c,
-  0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426,
-  0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e,
-  0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436,
-  0x3437, 0x3438, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e,
-  0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446,
-  0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e,
-  0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456,
-  0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e,
-  0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466,
-  0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e,
-  0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476,
-  0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e,
-  0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528,
-  0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530,
-  0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538,
-  0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540,
-  0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548,
-  0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550,
-  0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558,
-  0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560,
-  0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568,
-  0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570,
-  0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578,
-  0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622,
-  0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a,
-  0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632,
-  0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a,
-  0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642,
-  0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a,
-  0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652,
-  0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a,
-  0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662,
-  0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a,
-  0x366b, 0x366c, 0x366d, 0x366e, 0x366f, 0x3670, 0x3671, 0x3672,
-  0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a,
-  0x367b, 0x367c, 0x367d, 0x367e, 0x3721, 0x3722, 0x3723, 0x3724,
-  0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c,
-  0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734,
-  0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c,
-  0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744,
-  0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c,
-  0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754,
-  0x3755, 0x3756, 0x3757, 0x3758, 0x3759, 0x375a, 0x375b, 0x375c,
-  0x375d, 0x375e, 0x375f, 0x3760, 0x3761, 0x3762, 0x3763, 0x3764,
-  0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c,
-  0x376d, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774,
-  0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c,
-  0x377d, 0x377e, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826,
-  0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e,
-  0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836,
-  0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e,
-  0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846,
-  0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e,
-  0x384f, 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856,
-  0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e,
-  0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866,
-  0x3867, 0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e,
-  0x386f, 0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876,
-  0x3877, 0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e,
-  0x3921, 0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928,
-  0x3929, 0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930,
-  0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938,
-  0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940,
-  0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948,
-  0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950,
-  0x3951, 0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958,
-  0x3959, 0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960,
-  0x3961, 0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968,
-  0x3969, 0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970,
-  0x3971, 0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978,
-  0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22,
-  0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a,
-  0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a32,
-  0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a39, 0x3a3a,
-  0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42,
-  0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a,
-  0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52,
-  0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a,
-  0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62,
-  0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a,
-  0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72,
-  0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a,
-  0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24,
-  0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c,
-  0x3b2d, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34,
-  0x3b35, 0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3c,
-  0x3b3d, 0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44,
-  0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b4b, 0x3b4c,
-  0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b54,
-  0x3b55, 0x3b56, 0x3b57, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c,
-  0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64,
-  0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c,
-  0x3b6d, 0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x3b73, 0x3b74,
-  0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b79, 0x3b7a, 0x3b7b, 0x3b7c,
-  0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26,
-  0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2d, 0x3c2e,
-  0x3c2f, 0x3c30, 0x3c31, 0x3c32, 0x3c33, 0x3c34, 0x3c35, 0x3c36,
-  0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e,
-  0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46,
-  0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e,
-  0x3c4f, 0x3c50, 0x3c51, 0x3c52, 0x3c53, 0x3c54, 0x3c55, 0x3c56,
-  0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e,
-  0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66,
-  0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e,
-  0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76,
-  0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e,
-  0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28,
-  0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d30,
-  0x3d31, 0x3d32, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38,
-  0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40,
-  0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48,
-  0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50,
-  0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58,
-  0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60,
-  0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68,
-  0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70,
-  0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78,
-  0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22,
-  0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a,
-  0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32,
-  0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a,
-  0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42,
-  0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a,
-  0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52,
-  0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a,
-  0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62,
-  0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a,
-  0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72,
-  0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a,
-  0x3e7b, 0x3e7c, 0x3e7d, 0x3e7e, 0x3f21, 0x3f22, 0x3f23, 0x3f24,
-  0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c,
-  0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34,
-  0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c,
-  0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44,
-  0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c,
-  0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54,
-  0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c,
-  0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64,
-  0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c,
-  0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74,
-  0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c,
-  0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026,
-  0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e,
-  0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036,
-  0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e,
-  0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046,
-  0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e,
-  0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056,
-  0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e,
-  0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066,
-  0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e,
-  0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076,
-  0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e,
-  0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128,
-  0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130,
-  0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138,
-  0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140,
-  0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148,
-  0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150,
-  0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158,
-  0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160,
-  0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168,
-  0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170,
-  0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178,
-  0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222,
-  0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a,
-  0x422b, 0x422c, 0x422d, 0x422e, 0x422f, 0x4230, 0x4231, 0x4232,
-  0x4233, 0x4234, 0x4235, 0x4236, 0x4237, 0x4238, 0x4239, 0x423a,
-  0x423b, 0x423c, 0x423d, 0x423e, 0x423f, 0x4240, 0x4241, 0x4242,
-  0x4243, 0x4244, 0x4245, 0x4246, 0x4247, 0x4248, 0x4249, 0x424a,
-  0x424b, 0x424c, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252,
-  0x4253, 0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a,
-  0x425b, 0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262,
-  0x4263, 0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a,
-  0x426b, 0x426c, 0x426d, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272,
-  0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a,
-  0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324,
-  0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c,
-  0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334,
-  0x4335, 0x4336, 0x4337, 0x4338, 0x4339, 0x433a, 0x433b, 0x433c,
-  0x433d, 0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344,
-  0x4345, 0x4346, 0x4347, 0x4348, 0x4349, 0x434a, 0x434b, 0x434c,
-  0x434d, 0x434e, 0x434f, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354,
-  0x4355, 0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x435c,
-  0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364,
-  0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c,
-  0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374,
-  0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c,
-  0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426,
-  0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e,
-  0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436,
-  0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e,
-  0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446,
-  0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e,
-  0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456,
-  0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e,
-  0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466,
-  0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e,
-  0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476,
-  0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e,
-  0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528,
-  0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530,
-  0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538,
-  0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540,
-  0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548,
-  0x4549, 0x454a, 0x454b, 0x454c, 0x454d, 0x454e, 0x454f, 0x4550,
-  0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558,
-  0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560,
-  0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568,
-  0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570,
-  0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578,
-  0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622,
-  0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a,
-  0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632,
-  0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a,
-  0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642,
-  0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a,
-  0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652,
-  0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a,
-  0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4661, 0x4662,
-  0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669, 0x466a,
-  0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671, 0x4672,
-  0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679, 0x467a,
-  0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723, 0x4724,
-  0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b, 0x472c,
-  0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733, 0x4734,
-  0x4735, 0x4736, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c,
-  0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744,
-  0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c,
-  0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754,
-  0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c,
-  0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764,
-  0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c,
-  0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774,
-  0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c,
-  0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826,
-  0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e,
-  0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836,
-  0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e,
-  0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846,
-  0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x484d, 0x484e,
-  0x484f, 0x4850, 0x4851, 0x4852, 0x4853, 0x4854, 0x4855, 0x4856,
-  0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e,
-  0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866,
-  0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e,
-  0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876,
-  0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e,
-  0x4b50, 0x4b56, 0x4b67, 0x4d4f, 0x4d68, 0x4e2d, 0x4f7b, 0x5022,
-  0x5038, 0x5050, 0x505d, 0x5154, 0x5155, 0x5158, 0x515b, 0x515c,
-  0x515d, 0x515e, 0x515f, 0x5160, 0x5162, 0x5163, 0x5164, 0x5165,
-  0x5166, 0x5168, 0x5169, 0x516a, 0x516b, 0x516d, 0x516f, 0x5170,
-  0x5172, 0x5176, 0x517a, 0x517c, 0x517d, 0x517e, 0x5222, 0x5223,
-  0x5227, 0x5228, 0x5229, 0x522a, 0x522b, 0x522d, 0x5232, 0x523e,
-  0x5242, 0x5243, 0x5244, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a,
-  0x524b, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252, 0x5253,
-  0x5254, 0x5255, 0x5256, 0x5257, 0x5259, 0x525a, 0x525e, 0x525f,
-  0x5261, 0x5262, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269,
-  0x526a, 0x526b, 0x5270, 0x5271, 0x5272, 0x5273, 0x5274, 0x5275,
-  0x5277, 0x5278, 0x5466, 0x547c, 0x5525, 0x552b, 0x552e, 0x5638,
-  0x564d, 0x574b, 0x5764, 0x5b45, 0x5b64, 0x5c25, 0x5d25, 0x5d55,
-  0x5d74, 0x5e7c, 0x5e7e, 0x5f33, 0x5f61, 0x5f68, 0x6071, 0x612d,
-  0x616d, 0x6375, 0x6421, 0x6429, 0x652e, 0x6531, 0x6532, 0x6539,
-  0x653b, 0x653c, 0x6544, 0x654e, 0x6550, 0x6552, 0x6556, 0x657a,
-  0x657b, 0x657c, 0x657e, 0x6621, 0x6624, 0x6627, 0x662d, 0x662f,
-  0x6630, 0x6631, 0x6633, 0x6637, 0x6638, 0x663c, 0x6644, 0x6646,
-  0x6647, 0x664a, 0x6652, 0x6656, 0x6659, 0x665c, 0x665f, 0x6661,
-  0x6664, 0x6665, 0x6666, 0x6668, 0x666a, 0x666b, 0x666c, 0x666f,
-  0x6671, 0x6672, 0x6675, 0x6676, 0x6677, 0x6679, 0x6721, 0x6726,
-  0x6729, 0x672a, 0x672c, 0x672d, 0x6730, 0x673f, 0x6741, 0x6746,
-  0x6747, 0x674b, 0x674d, 0x674f, 0x6750, 0x6753, 0x675f, 0x6764,
-  0x6766, 0x6777, 0x6867, 0x6868, 0x6870, 0x6871, 0x6877, 0x6879,
-  0x687b, 0x687e, 0x6927, 0x692c, 0x694c, 0x6977, 0x6a41, 0x6a65,
-  0x6a74, 0x6a77, 0x6a7c, 0x6a7e, 0x6b24, 0x6b27, 0x6b29, 0x6b2a,
-  0x6b3a, 0x6b3b, 0x6b3d, 0x6b41, 0x6b42, 0x6b46, 0x6b47, 0x6b4c,
-  0x6b4f, 0x6b50, 0x6b51, 0x6b52, 0x6b58, 0x6c26, 0x6c27, 0x6c2a,
-  0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c35, 0x6c38, 0x6c3a, 0x6c40,
-  0x6c41, 0x6c45, 0x6c46, 0x6c49, 0x6c4a, 0x6c55, 0x6c5d, 0x6c5e,
-  0x6c61, 0x6c64, 0x6c67, 0x6c68, 0x6c77, 0x6c78, 0x6c7a, 0x6d21,
-  0x6d22, 0x6d23, 0x6d6e, 0x6e5b, 0x723d, 0x727a, 0x7331, 0x7427,
-  0x746e, 0x7674, 0x7676, 0x7738, 0x7748, 0x7753, 0x785b, 0x7870,
-  0x7a21, 0x7a22, 0x7a66, 0x7c29, 0x2321, 0x2322, 0x2323, 0x2324,
-  0x2325, 0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c,
-  0x232d, 0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334,
-  0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c,
-  0x233d, 0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344,
-  0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c,
-  0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354,
-  0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x212c,
-  0x235d, 0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364,
-  0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c,
-  0x236d, 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374,
-  0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c,
-  0x237d, 0x2226, 0x214b, 0x214c, 0x217e, 0x237e, 0x214d, 0x235c,
-};
-
-static const Summary16 ksc5601_uni2indx_page00[70] = {
-  /* 0x0000 */
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x0000 },
-  {    0, 0x0000 }, {    0, 0x0000 }, {    0, 0x2592 }, {    6, 0xf7df },
-  {   20, 0x0040 }, {   21, 0xc181 }, {   26, 0x0040 }, {   27, 0x4181 },
-  /* 0x0100 */
-  {   31, 0x0000 }, {   31, 0x0002 }, {   32, 0x00c0 }, {   34, 0x810e },
-  {   39, 0x0e07 }, {   45, 0x000c }, {   47, 0x00c0 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  /* 0x0200 */
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 }, {   49, 0x0000 },
-  {   49, 0x0080 }, {   50, 0x2f01 }, {   56, 0x0000 }, {   56, 0x0000 },
-  /* 0x0300 */
-  {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 },
-  {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 }, {   56, 0x0000 },
-  {   56, 0x0000 }, {   56, 0xfffe }, {   71, 0x03fb }, {   80, 0xfffe },
-  {   95, 0x03fb }, {  104, 0x0000 }, {  104, 0x0000 }, {  104, 0x0000 },
-  /* 0x0400 */
-  {  104, 0x0002 }, {  105, 0xffff }, {  121, 0xffff }, {  137, 0xffff },
-  {  153, 0xffff }, {  169, 0x0002 },
-};
-static const Summary16 ksc5601_uni2indx_page20[103] = {
-  /* 0x2000 */
-  {  170, 0x0000 }, {  170, 0x3320 }, {  175, 0x0063 }, {  179, 0x080d },
-  {  183, 0x0000 }, {  183, 0x0000 }, {  183, 0x0000 }, {  183, 0x8010 },
-  {  185, 0x001e }, {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 },
-  {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 }, {  189, 0x0000 },
-  /* 0x2100 */
-  {  189, 0x0208 }, {  191, 0x0048 }, {  193, 0x0846 }, {  197, 0x0000 },
-  {  197, 0x0000 }, {  197, 0x7818 }, {  203, 0x03ff }, {  213, 0x03ff },
-  {  223, 0x0000 }, {  223, 0x03ff }, {  233, 0x0000 }, {  233, 0x0000 },
-  {  233, 0x0000 }, {  233, 0x0014 }, {  235, 0x0000 }, {  235, 0x0000 },
-  /* 0x2200 */
-  {  235, 0x898d }, {  242, 0x6402 }, {  246, 0x5fa1 }, {  255, 0x3030 },
-  {  259, 0x0000 }, {  259, 0x0004 }, {  260, 0x0c33 }, {  266, 0x0000 },
-  {  266, 0x00cc }, {  270, 0x0200 }, {  271, 0x0020 }, {  272, 0x0000 },
-  {  272, 0x0000 }, {  272, 0x0000 }, {  272, 0x0000 }, {  272, 0x0000 },
-  /* 0x2300 */
-  {  272, 0x0000 }, {  272, 0x0004 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  /* 0x2400 */
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x0000 },
-  {  273, 0x0000 }, {  273, 0x0000 }, {  273, 0x7fff }, {  288, 0xfff0 },
-  {  300, 0x0007 }, {  303, 0xf000 }, {  307, 0xffff }, {  323, 0x003f },
-  {  329, 0x0000 }, {  329, 0xffff }, {  345, 0x03ff }, {  355, 0x0000 },
-  /* 0x2500 */
-  {  355, 0xf00f }, {  363, 0xffff }, {  379, 0xffff }, {  395, 0xffff },
-  {  411, 0x0fff }, {  423, 0x0000 }, {  423, 0x0000 }, {  423, 0x0000 },
-  {  423, 0x0000 }, {  423, 0x0004 }, {  424, 0x03fb }, {  433, 0x30cc },
-  {  439, 0xc9c3 }, {  447, 0x0003 }, {  449, 0x0000 }, {  449, 0x0000 },
-  /* 0x2600 */
-  {  449, 0xc060 }, {  453, 0x5000 }, {  455, 0x0000 }, {  455, 0x0000 },
-  {  455, 0x0005 }, {  457, 0x0000 }, {  457, 0x37bb },
-};
-static const Summary16 ksc5601_uni2indx_page30[62] = {
-  /* 0x3000 */
-  {  468, 0xff0f }, {  480, 0x003b }, {  485, 0x0000 }, {  485, 0x0000 },
-  {  485, 0xfffe }, {  500, 0xffff }, {  516, 0xffff }, {  532, 0xffff },
-  {  548, 0xffff }, {  564, 0x000f }, {  568, 0xfffe }, {  583, 0xffff },
-  {  599, 0xffff }, {  615, 0xffff }, {  631, 0xffff }, {  647, 0x007f },
-  /* 0x3100 */
-  {  654, 0x0000 }, {  654, 0x0000 }, {  654, 0x0000 }, {  654, 0xfffe },
-  {  669, 0xffff }, {  685, 0xffff }, {  701, 0xffff }, {  717, 0xffff },
-  {  733, 0x7fff }, {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 },
-  {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 }, {  748, 0x0000 },
-  /* 0x3200 */
-  {  748, 0xffff }, {  764, 0x1fff }, {  777, 0x0000 }, {  777, 0x0000 },
-  {  777, 0x0000 }, {  777, 0x0000 }, {  777, 0xffff }, {  793, 0x8fff },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  /* 0x3300 */
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 }, {  806, 0x0000 },
-  {  806, 0xff1f }, {  819, 0xffff }, {  835, 0xffff }, {  851, 0xffff },
-  {  867, 0x87ff }, {  879, 0x3949 },
-};
-static const Summary16 ksc5601_uni2indx_page4e[1306] = {
-  /* 0x4e00 */
-  {  886, 0x2f8b }, {  895, 0x4372 }, {  902, 0x2000 }, {  903, 0x0b04 },
-  {  907, 0xe82c }, {  914, 0xe340 }, {  920, 0x2800 }, {  922, 0x40c8 },
-  {  926, 0x5944 }, {  932, 0x4937 }, {  940, 0x7976 }, {  950, 0x0440 },
-  {  952, 0x2c93 }, {  959, 0xa3f0 }, {  967, 0x0038 }, {  970, 0x08c5 },
-  /* 0x4f00 */
-  {  975, 0xee02 }, {  982, 0x0003 }, {  984, 0x8000 }, {  985, 0x3550 },
-  {  991, 0xe1c8 }, {  998, 0x1e23 }, { 1005, 0x8200 }, { 1007, 0xc449 },
-  { 1013, 0xad5a }, { 1022, 0x2942 }, { 1027, 0xc000 }, { 1029, 0x8060 },
-  { 1032, 0x461c }, { 1038, 0xa49a }, { 1045, 0xc003 }, { 1049, 0x052a },
-  /* 0x5000 */
-  { 1054, 0x2a44 }, { 1059, 0xd646 }, { 1067, 0x3dda }, { 1077, 0x0800 },
-  { 1078, 0x8388 }, { 1083, 0x1420 }, { 1086, 0x0020 }, { 1087, 0x0170 },
-  { 1091, 0x2021 }, { 1094, 0x0302 }, { 1097, 0x3000 }, { 1099, 0x40ac },
-  { 1104, 0x8620 }, { 1108, 0x4462 }, { 1113, 0x20a0 }, { 1116, 0x8a00 },
-  /* 0x5100 */
-  { 1119, 0x0253 }, { 1124, 0x8004 }, { 1126, 0x0402 }, { 1128, 0x1484 },
-  { 1132, 0x7bfb }, { 1145, 0x1004 }, { 1147, 0x7fa4 }, { 1157, 0x11e2 },
-  { 1163, 0x2441 }, { 1167, 0x00a4 }, { 1170, 0x1421 }, { 1174, 0x20c0 },
-  { 1177, 0x3a50 }, { 1183, 0x7000 }, { 1186, 0x0002 }, { 1187, 0x2743 },
-  /* 0x5200 */
-  { 1194, 0x45c9 }, { 1201, 0x2082 }, { 1204, 0x4630 }, { 1209, 0x0fc1 },
-  { 1216, 0x3c88 }, { 1222, 0x2850 }, { 1226, 0x8602 }, { 1230, 0xa024 },
-  { 1234, 0x2388 }, { 1239, 0x8806 }, { 1243, 0x0e19 }, { 1249, 0x4000 },
-  { 1250, 0x22aa }, { 1256, 0xeb64 }, { 1265, 0x001c }, { 1268, 0xcd28 },
-  /* 0x5300 */
-  { 1275, 0xa120 }, { 1279, 0x02e1 }, { 1284, 0x840b }, { 1289, 0x8200 },
-  { 1291, 0x279b }, { 1300, 0x549e }, { 1308, 0x8141 }, { 1312, 0xa0b3 },
-  { 1319, 0x0010 }, { 1320, 0x8508 }, { 1324, 0x2061 }, { 1328, 0x0800 },
-  { 1329, 0x2f08 }, { 1335, 0x08d0 }, { 1339, 0xbe3e }, { 1350, 0x010f },
-  /* 0x5400 */
-  { 1355, 0xf718 }, { 1364, 0xa803 }, { 1369, 0x0a41 }, { 1373, 0x5b08 },
-  { 1379, 0x0504 }, { 1382, 0x0002 }, { 1383, 0x0500 }, { 1385, 0x382a },
-  { 1391, 0x5041 }, { 1395, 0x0001 }, { 1396, 0x1910 }, { 1400, 0x2108 },
-  { 1403, 0x0313 }, { 1408, 0x0000 }, { 1408, 0x6122 }, { 1413, 0x0404 },
-  /* 0x5500 */
-  { 1415, 0x40d0 }, { 1419, 0x1001 }, { 1421, 0x8000 }, { 1422, 0x4022 },
-  { 1425, 0x8050 }, { 1428, 0x4048 }, { 1431, 0x0008 }, { 1432, 0x1000 },
-  { 1433, 0x06d1 }, { 1439, 0x3700 }, { 1444, 0x5e80 }, { 1450, 0x0000 },
-  { 1450, 0x00a0 }, { 1452, 0x9410 }, { 1456, 0x0018 }, { 1458, 0x6000 },
-  /* 0x5600 */
-  { 1460, 0x0240 }, { 1462, 0x0090 }, { 1464, 0x8000 }, { 1465, 0x0054 },
-  { 1468, 0x0000 }, { 1468, 0x0008 }, { 1469, 0x0900 }, { 1471, 0x0010 },
-  { 1472, 0x0040 }, { 1473, 0x0000 }, { 1473, 0x5020 }, { 1476, 0x1010 },
-  { 1478, 0x2400 }, { 1480, 0x4c02 }, { 1484, 0x0001 }, { 1485, 0x0601 },
-  /* 0x5700 */
-  { 1488, 0x2918 }, { 1493, 0x814c }, { 1498, 0x2100 }, { 1500, 0x0801 },
-  { 1502, 0x6485 }, { 1508, 0x0003 }, { 1510, 0x4452 }, { 1515, 0x1021 },
-  { 1518, 0x0904 }, { 1521, 0x0008 }, { 1522, 0x000d }, { 1525, 0x0000 },
-  { 1525, 0x4988 }, { 1530, 0x8000 }, { 1531, 0x0001 }, { 1532, 0x1691 },
-  /* 0x5800 */
-  { 1538, 0x0765 }, { 1545, 0x4000 }, { 1546, 0x8492 }, { 1551, 0x0433 },
-  { 1556, 0x8c00 }, { 1559, 0x4592 }, { 1565, 0x0016 }, { 1568, 0x5220 },
-  { 1572, 0x0228 }, { 1575, 0xd008 }, { 1579, 0x4300 }, { 1582, 0x4c08 },
-  { 1586, 0x40a2 }, { 1590, 0xc32a }, { 1597, 0x9810 }, { 1601, 0x2e00 },
-  /* 0x5900 */
-  { 1605, 0x8000 }, { 1606, 0x1670 }, { 1612, 0x6e84 }, { 1619, 0x4082 },
-  { 1622, 0xc390 }, { 1628, 0x04b3 }, { 1634, 0x7c85 }, { 1642, 0x2118 },
-  { 1646, 0x041c }, { 1650, 0x02c8 }, { 1654, 0x1120 }, { 1657, 0x4a00 },
-  { 1660, 0x0a48 }, { 1664, 0x361b }, { 1672, 0x5540 }, { 1677, 0x8900 },
-  /* 0x5a00 */
-  { 1680, 0x000a }, { 1682, 0x9902 }, { 1687, 0x0221 }, { 1690, 0x1040 },
-  { 1692, 0x0242 }, { 1695, 0x0400 }, { 1696, 0x0044 }, { 1698, 0x0000 },
-  { 1698, 0x0000 }, { 1698, 0x0c04 }, { 1701, 0x0010 }, { 1702, 0x0000 },
-  { 1702, 0x1216 }, { 1707, 0x0000 }, { 1707, 0x0242 }, { 1710, 0x0000 },
-  /* 0x5b00 */
-  { 1710, 0x1a20 }, { 1714, 0x0040 }, { 1715, 0x0400 }, { 1716, 0x0000 },
-  { 1716, 0x0009 }, { 1718, 0xb5b3 }, { 1728, 0x0a18 }, { 1732, 0x1523 },
-  { 1738, 0x9ba0 }, { 1745, 0x1fe8 }, { 1754, 0x507c }, { 1761, 0x8379 },
-  { 1769, 0x10fd }, { 1777, 0xc09d }, { 1784, 0xdbf6 }, { 1796, 0x0560 },
-  /* 0x5c00 */
-  { 1800, 0xef92 }, { 1810, 0x0242 }, { 1813, 0x0110 }, { 1815, 0xdf02 },
-  { 1823, 0x6961 }, { 1830, 0x0822 }, { 1833, 0x9035 }, { 1839, 0x0202 },
-  { 1841, 0x0000 }, { 1841, 0x0003 }, { 1843, 0x1a02 }, { 1847, 0x45aa },
-  { 1854, 0x0001 }, { 1855, 0x0200 }, { 1856, 0x8101 }, { 1859, 0x2851 },
-  /* 0x5d00 */
-  { 1864, 0x6080 }, { 1867, 0x02d2 }, { 1872, 0x0280 }, { 1874, 0x0000 },
-  { 1874, 0x1800 }, { 1876, 0x0001 }, { 1877, 0x9200 }, { 1880, 0x0000 },
-  { 1880, 0x0880 }, { 1882, 0x2000 }, { 1883, 0x0405 }, { 1886, 0x3500 },
-  { 1890, 0x2000 }, { 1891, 0x6044 }, { 1895, 0x49e6 }, { 1903, 0x609e },
-  /* 0x5e00 */
-  { 1910, 0x104c }, { 1914, 0x2a42 }, { 1919, 0x2820 }, { 1922, 0xa148 },
-  { 1927, 0x10b1 }, { 1932, 0x8020 }, { 1934, 0x000e }, { 1937, 0x7b9c },
-  { 1947, 0x8490 }, { 1951, 0x14a0 }, { 1955, 0x28c1 }, { 1960, 0x41e0 },
-  { 1965, 0x0704 }, { 1969, 0x8c49 }, { 1975, 0x100d }, { 1979, 0x0cc8 },
-  /* 0x5f00 */
-  { 1984, 0x8412 }, { 1988, 0x89ba }, { 1996, 0x02c0 }, { 1999, 0x1422 },
-  { 2003, 0x5500 }, { 2007, 0x0ac0 }, { 2011, 0x3ec4 }, { 2019, 0x9283 },
-  { 2025, 0x1ca3 }, { 2032, 0x4387 }, { 2039, 0x4703 }, { 2045, 0x22a0 },
-  { 2049, 0x3028 }, { 2053, 0x03c0 }, { 2057, 0x0801 }, { 2059, 0xa020 },
-  /* 0x6000 */
-  { 2062, 0x8000 }, { 2063, 0x3044 }, { 2067, 0x85a3 }, { 2074, 0x0000 },
-  { 2074, 0x200e }, { 2078, 0x2225 }, { 2083, 0xb73c }, { 2093, 0x0001 },
-  { 2094, 0x3220 }, { 2098, 0x8c50 }, { 2103, 0x0099 }, { 2107, 0x315d },
-  { 2115, 0x00a0 }, { 2117, 0x9402 }, { 2121, 0x0003 }, { 2123, 0x0e4b },
-  /* 0x6100 */
-  { 2130, 0xe342 }, { 2137, 0x8c20 }, { 2141, 0x0080 }, { 2142, 0xd091 },
-  { 2148, 0x1d94 }, { 2155, 0xa328 }, { 2161, 0x499c }, { 2168, 0x60c1 },
-  { 2173, 0x4406 }, { 2177, 0x0713 }, { 2183, 0x5a90 }, { 2189, 0x4444 },
-  { 2193, 0x0f88 }, { 2199, 0x0000 }, { 2199, 0x0040 }, { 2200, 0x95c4 },
-  /* 0x6200 */
-  { 2207, 0x7581 }, { 2214, 0x8447 }, { 2220, 0x4402 }, { 2223, 0xc053 },
-  { 2229, 0x2b83 }, { 2236, 0x0108 }, { 2238, 0x4000 }, { 2239, 0x9242 },
-  { 2244, 0x0611 }, { 2248, 0x09a6 }, { 2254, 0x0800 }, { 2255, 0x3222 },
-  { 2260, 0xb384 }, { 2267, 0x1bdd }, { 2277, 0xf000 }, { 2281, 0xc08a },
-  /* 0x6300 */
-  { 2286, 0x0282 }, { 2289, 0x0002 }, { 2290, 0x8800 }, { 2292, 0x6c00 },
-  { 2296, 0x9200 }, { 2299, 0x0021 }, { 2301, 0x4180 }, { 2304, 0x8c84 },
-  { 2309, 0x1308 }, { 2313, 0x0944 }, { 2317, 0x07a7 }, { 2325, 0x0000 },
-  { 2325, 0x8051 }, { 2329, 0x0c41 }, { 2333, 0x6002 }, { 2336, 0x00d0 },
-  /* 0x6400 */
-  { 2339, 0xa000 }, { 2341, 0x10d0 }, { 2345, 0x3004 }, { 2348, 0x4400 },
-  { 2350, 0x0000 }, { 2350, 0x0100 }, { 2351, 0x8201 }, { 2354, 0x0700 },
-  { 2357, 0x0100 }, { 2358, 0x440e }, { 2363, 0x6830 }, { 2368, 0x0805 },
-  { 2371, 0x64b2 }, { 2378, 0x0514 }, { 2382, 0x10e6 }, { 2388, 0x4414 },
-  /* 0x6500 */
-  { 2392, 0x0011 }, { 2394, 0x2100 }, { 2396, 0x9c08 }, { 2401, 0xcbc0 },
-  { 2408, 0xe120 }, { 2413, 0x40c2 }, { 2417, 0x304c }, { 2422, 0x41b4 },
-  { 2428, 0x10ac }, { 2433, 0x9a83 }, { 2440, 0x98b2 }, { 2447, 0x3281 },
-  { 2452, 0x9822 }, { 2457, 0x0084 }, { 2459, 0x3369 }, { 2467, 0xbc12 },
-  /* 0x6600 */
-  { 2474, 0xd6c0 }, { 2481, 0xc03b }, { 2488, 0xa1a1 }, { 2494, 0x0c53 },
-  { 2500, 0x8a1e }, { 2507, 0xea00 }, { 2512, 0xcbf0 }, { 2521, 0x05d8 },
-  { 2527, 0x4390 }, { 2532, 0x21c3 }, { 2538, 0x4805 }, { 2542, 0x4a1c },
-  { 2548, 0x02d0 }, { 2552, 0x3240 }, { 2556, 0x0041 }, { 2558, 0xd79d },
-  /* 0x6700 */
-  { 2569, 0x2b09 }, { 2575, 0xe8b0 }, { 2582, 0x7dc0 }, { 2590, 0x2452 },
-  { 2595, 0xc240 }, { 2599, 0xd04b }, { 2606, 0xa000 }, { 2608, 0xc8ab },
-  { 2616, 0x8a80 }, { 2620, 0x34a9 }, { 2627, 0x8000 }, { 2628, 0x41c9 },
-  { 2634, 0x8010 }, { 2636, 0x241f }, { 2643, 0x9200 }, { 2646, 0x487b },
-  /* 0x6800 */
-  { 2654, 0x0000 }, { 2654, 0x00cc }, { 2658, 0x8406 }, { 2662, 0x3300 },
-  { 2666, 0x410f }, { 2672, 0x001b }, { 2676, 0x2000 }, { 2677, 0x8040 },
-  { 2679, 0x8022 }, { 2682, 0xa098 }, { 2687, 0xa186 }, { 2693, 0x006b },
-  { 2698, 0x2a30 }, { 2703, 0x85a4 }, { 2709, 0x4181 }, { 2713, 0x0604 },
-  /* 0x6900 */
-  { 2716, 0x6021 }, { 2720, 0x0004 }, { 2721, 0x0080 }, { 2722, 0xa001 },
-  { 2725, 0x0400 }, { 2726, 0x46b8 }, { 2733, 0xe90f }, { 2742, 0x03a0 },
-  { 2746, 0x0000 }, { 2746, 0x1820 }, { 2749, 0x40a0 }, { 2752, 0x0810 },
-  { 2754, 0x380a }, { 2759, 0x0001 }, { 2760, 0x0500 }, { 2762, 0xa800 },
-  /* 0x6a00 */
-  { 2765, 0x0404 }, { 2767, 0xc28a }, { 2773, 0x000a }, { 2775, 0x2720 },
-  { 2780, 0x0910 }, { 2783, 0x830c }, { 2788, 0x0802 }, { 2790, 0x0000 },
-  { 2790, 0x6211 }, { 2795, 0x1080 }, { 2797, 0x000c }, { 2799, 0x0808 },
-  { 2801, 0x000c }, { 2803, 0x0c08 }, { 2806, 0x0000 }, { 2806, 0x0840 },
-  /* 0x6b00 */
-  { 2808, 0x1410 }, { 2811, 0x0044 }, { 2813, 0x000b }, { 2816, 0x6404 },
-  { 2820, 0x50c0 }, { 2824, 0x8001 }, { 2826, 0x047e }, { 2833, 0x8984 },
-  { 2838, 0x0658 }, { 2843, 0x4140 }, { 2846, 0xc000 }, { 2848, 0x94a4 },
-  { 2854, 0xa862 }, { 2860, 0x09dc }, { 2867, 0x1800 }, { 2869, 0x0000 },
-  /* 0x6c00 */
-  { 2869, 0x8100 }, { 2871, 0x000a }, { 2873, 0x0008 }, { 2874, 0x4190 },
-  { 2878, 0x4007 }, { 2882, 0xe4a1 }, { 2889, 0x2501 }, { 2893, 0x6445 },
-  { 2899, 0x11ee }, { 2907, 0x0e7d }, { 2916, 0x4800 }, { 2918, 0xfb08 },
-  { 2926, 0x1616 }, { 2932, 0x08a8 }, { 2936, 0xc92e }, { 2944, 0x0009 },
-  /* 0x6d00 */
-  { 2946, 0x1800 }, { 2948, 0x4a82 }, { 2953, 0x06a0 }, { 2957, 0x6b64 },
-  { 2965, 0x0002 }, { 2966, 0x1600 }, { 2969, 0x5648 }, { 2975, 0x8390 },
-  { 2980, 0x73a0 }, { 2987, 0x002a }, { 2990, 0x8000 }, { 2991, 0x0024 },
-  { 2993, 0x88f9 }, { 3001, 0x4702 }, { 3006, 0x4d02 }, { 3011, 0x0faa },
-  /* 0x6e00 */
-  { 3019, 0x0000 }, { 3019, 0x8e80 }, { 3024, 0xb87b }, { 3034, 0x7554 },
-  { 3042, 0x2418 }, { 3046, 0xd940 }, { 3052, 0xc880 }, { 3056, 0x040c },
-  { 3059, 0x0000 }, { 3059, 0xb041 }, { 3064, 0x8c24 }, { 3069, 0x0442 },
-  { 3072, 0x5a34 }, { 3079, 0x001a }, { 3082, 0x8000 }, { 3083, 0xc110 },
-  /* 0x6f00 */
-  { 3087, 0x8046 }, { 3091, 0x0032 }, { 3094, 0x180d }, { 3099, 0x8106 },
-  { 3103, 0x0002 }, { 3104, 0xcd92 }, { 3112, 0x6014 }, { 3116, 0x7401 },
-  { 3121, 0x6112 }, { 3126, 0x0091 }, { 3129, 0xc098 }, { 3134, 0x420a },
-  { 3138, 0x040f }, { 3143, 0x8420 }, { 3146, 0x9a13 }, { 3153, 0x4002 },
-  /* 0x7000 */
-  { 3155, 0x8a62 }, { 3161, 0xfd22 }, { 3170, 0x8188 }, { 3174, 0x4080 },
-  { 3176, 0x1000 }, { 3177, 0x2103 }, { 3181, 0x0808 }, { 3183, 0x3101 },
-  { 3187, 0x4420 }, { 3190, 0x0704 }, { 3194, 0xb812 }, { 3200, 0x0388 },
-  { 3204, 0x8900 }, { 3207, 0xa300 }, { 3211, 0x0000 }, { 3211, 0x2202 },
-  /* 0x7100 */
-  { 3214, 0x1210 }, { 3217, 0x4600 }, { 3220, 0x0042 }, { 3222, 0x0041 },
-  { 3224, 0x5680 }, { 3229, 0x5241 }, { 3234, 0x52f0 }, { 3241, 0x2000 },
-  { 3242, 0x8610 }, { 3246, 0x8214 }, { 3250, 0x1004 }, { 3252, 0x4602 },
-  { 3256, 0x430a }, { 3261, 0x8035 }, { 3266, 0x60e0 }, { 3271, 0xd800 },
-  /* 0x7200 */
-  { 3275, 0x0041 }, { 3277, 0x0801 }, { 3279, 0x3400 }, { 3282, 0x6c65 },
-  { 3290, 0x11c1 }, { 3295, 0xab04 }, { 3301, 0x0286 }, { 3305, 0x2204 },
-  { 3308, 0x0003 }, { 3310, 0x0000 }, { 3310, 0x9084 }, { 3314, 0x0000 },
-  { 3314, 0x4015 }, { 3318, 0x0281 }, { 3321, 0x0202 }, { 3323, 0x3300 },
-  /* 0x7300 */
-  { 3327, 0x0400 }, { 3328, 0x3840 }, { 3332, 0x0e20 }, { 3336, 0xc0c0 },
-  { 3340, 0x0030 }, { 3342, 0x0085 }, { 3345, 0x0500 }, { 3347, 0x0d25 },
-  { 3353, 0x4ad0 }, { 3359, 0x81d0 }, { 3364, 0x2280 }, { 3367, 0x020c },
-  { 3370, 0xb605 }, { 3377, 0x6240 }, { 3381, 0x2679 }, { 3389, 0x6280 },
-  /* 0x7400 */
-  { 3393, 0x02ea }, { 3399, 0x0808 }, { 3401, 0xdd67 }, { 3412, 0x8579 },
-  { 3420, 0x081b }, { 3425, 0xdea0 }, { 3433, 0x8735 }, { 3441, 0x4000 },
-  { 3442, 0x0a8c }, { 3447, 0xd100 }, { 3451, 0x05aa }, { 3457, 0xa225 },
-  { 3463, 0x8440 }, { 3466, 0x1510 }, { 3470, 0x404d }, { 3475, 0x0080 },
-  /* 0x7500 */
-  { 3476, 0x0012 }, { 3478, 0x8d22 }, { 3484, 0x1968 }, { 3490, 0x058f },
-  { 3497, 0x9080 }, { 3500, 0x3a1a }, { 3507, 0x8464 }, { 3512, 0x8561 },
-  { 3518, 0xccc0 }, { 3524, 0x2002 }, { 3526, 0x0820 }, { 3528, 0x732e },
-  { 3537, 0x20a4 }, { 3541, 0x0b34 }, { 3547, 0x0004 }, { 3548, 0x1415 },
-  /* 0x7600 */
-  { 3553, 0x2001 }, { 3555, 0x8200 }, { 3557, 0x0057 }, { 3562, 0x0800 },
-  { 3563, 0x5004 }, { 3566, 0x0044 }, { 3568, 0x1212 }, { 3572, 0x7905 },
-  { 3579, 0x40d0 }, { 3583, 0x0009 }, { 3585, 0x4000 }, { 3586, 0x8400 },
-  { 3588, 0x054c }, { 3593, 0xd844 }, { 3599, 0x409a }, { 3604, 0x5114 },
-  /* 0x7700 */
-  { 3609, 0x0b12 }, { 3614, 0x4000 }, { 3615, 0x0201 }, { 3617, 0x1580 },
-  { 3621, 0x2001 }, { 3623, 0x0800 }, { 3624, 0x084a }, { 3628, 0xc200 },
-  { 3631, 0x0800 }, { 3632, 0x4002 }, { 3634, 0x3020 }, { 3637, 0x9809 },
-  { 3642, 0x0000 }, { 3642, 0x1880 }, { 3645, 0xe22c }, { 3652, 0x0008 },
-  /* 0x7800 */
-  { 3653, 0x0004 }, { 3654, 0x0004 }, { 3655, 0x10e0 }, { 3659, 0x0014 },
-  { 3661, 0x8020 }, { 3663, 0x2000 }, { 3664, 0x9800 }, { 3667, 0x1000 },
-  { 3668, 0x7082 }, { 3673, 0x0082 }, { 3675, 0x0288 }, { 3678, 0x1c00 },
-  { 3681, 0x4c22 }, { 3686, 0x0001 }, { 3687, 0x9100 }, { 3690, 0x0820 },
-  /* 0x7900 */
-  { 3692, 0x4002 }, { 3694, 0x0040 }, { 3695, 0x1c00 }, { 3698, 0x4400 },
-  { 3700, 0x0383 }, { 3705, 0x7cc1 }, { 3713, 0x2121 }, { 3717, 0x8400 },
-  { 3719, 0xe002 }, { 3723, 0x0002 }, { 3724, 0x44c0 }, { 3728, 0xe20a },
-  { 3734, 0x0e03 }, { 3739, 0x8126 }, { 3744, 0x02d0 }, { 3748, 0x0800 },
-  /* 0x7a00 */
-  { 3749, 0x2921 }, { 3754, 0x9690 }, { 3760, 0x4001 }, { 3762, 0xb8c2 },
-  { 3769, 0x6241 }, { 3774, 0x0080 }, { 3775, 0x0a06 }, { 3779, 0xa651 },
-  { 3786, 0x0112 }, { 3789, 0x812c }, { 3794, 0xc600 }, { 3798, 0x0400 },
-  { 3799, 0x0cb0 }, { 3804, 0xa280 }, { 3808, 0xa429 }, { 3814, 0x8640 },
-  /* 0x7b00 */
-  { 3818, 0x8000 }, { 3819, 0x4a02 }, { 3823, 0x3041 }, { 3827, 0x0200 },
-  { 3828, 0xba40 }, { 3834, 0x0057 }, { 3839, 0x5001 }, { 3842, 0x2020 },
-  { 3844, 0x8880 }, { 3847, 0x24b0 }, { 3852, 0x2002 }, { 3854, 0x0112 },
-  { 3857, 0x02d3 }, { 3863, 0x0004 }, { 3864, 0x0211 }, { 3867, 0x0000 },
-  /* 0x7c00 */
-  { 3867, 0x0080 }, { 3868, 0x4004 }, { 3870, 0x0c82 }, { 3874, 0xe000 },
-  { 3877, 0x3008 }, { 3880, 0x0000 }, { 3880, 0x1011 }, { 3883, 0x0008 },
-  { 3884, 0x0208 }, { 3886, 0x81a4 }, { 3891, 0x40a0 }, { 3894, 0x420e },
-  { 3899, 0x0400 }, { 3900, 0xc040 }, { 3903, 0x0081 }, { 3905, 0x4800 },
-  /* 0x7d00 */
-  { 3907, 0x2df5 }, { 3917, 0x0f91 }, { 3924, 0xd807 }, { 3931, 0x0629 },
-  { 3936, 0x007c }, { 3941, 0x4001 }, { 3943, 0x4546 }, { 3949, 0x824e },
-  { 3955, 0xc000 }, { 3957, 0x1008 }, { 3959, 0x3005 }, { 3963, 0xed36 },
-  { 3973, 0x0c80 }, { 3976, 0x6540 }, { 3981, 0x930b }, { 3988, 0x0810 },
-  /* 0x7e00 */
-  { 3990, 0x0600 }, { 3992, 0xe820 }, { 3997, 0xc80a }, { 4002, 0x6082 },
-  { 4006, 0x00ca }, { 4010, 0x4034 }, { 4014, 0x2e02 }, { 4019, 0x1201 },
-  { 4022, 0x9004 }, { 4025, 0x1948 }, { 4030, 0x0000 }, { 4030, 0x0000 },
-  { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 },
-  /* 0x7f00 */
-  { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0540 },
-  { 4033, 0x1000 }, { 4034, 0x0031 }, { 4037, 0x4c00 }, { 4040, 0x02a5 },
-  { 4045, 0x5520 }, { 4050, 0x4410 }, { 4053, 0x0310 }, { 4056, 0x2304 },
-  { 4060, 0x5422 }, { 4065, 0x8034 }, { 4069, 0x0a03 }, { 4073, 0x1201 },
-  /* 0x8000 */
-  { 4076, 0x126b }, { 4083, 0x01a1 }, { 4087, 0x2000 }, { 4088, 0xa048 },
-  { 4092, 0x0448 }, { 4095, 0x4540 }, { 4099, 0x8000 }, { 4100, 0xe08d },
-  { 4107, 0x1af0 }, { 4114, 0x2840 }, { 4117, 0x8626 }, { 4123, 0x0416 },
-  { 4127, 0x5018 }, { 4131, 0x4c00 }, { 4134, 0x0032 }, { 4137, 0x2112 },
-  /* 0x8100 */
-  { 4141, 0x05e4 }, { 4147, 0x0d00 }, { 4150, 0x8a08 }, { 4154, 0x4200 },
-  { 4156, 0x4800 }, { 4158, 0x0033 }, { 4162, 0x0860 }, { 4165, 0x8703 },
-  { 4171, 0x8501 }, { 4175, 0x3400 }, { 4178, 0x0109 }, { 4181, 0xe428 },
-  { 4187, 0x2045 }, { 4191, 0x8100 }, { 4193, 0x25a8 }, { 4199, 0x5c18 },
-  /* 0x8200 */
-  { 4205, 0x35a0 }, { 4211, 0xd804 }, { 4216, 0x1c02 }, { 4220, 0x02e0 },
-  { 4224, 0x00a1 }, { 4227, 0x0200 }, { 4228, 0xc050 }, { 4232, 0x4146 },
-  { 4237, 0x6800 }, { 4240, 0xa604 }, { 4245, 0xf260 }, { 4252, 0xbb8a },
-  { 4261, 0x0000 }, { 4261, 0xc8b6 }, { 4269, 0x00e2 }, { 4273, 0x6002 },
-  /* 0x8300 */
-  { 4276, 0x023e }, { 4282, 0x0080 }, { 4283, 0x8900 }, { 4286, 0x0372 },
-  { 4292, 0x8681 }, { 4297, 0x0006 }, { 4299, 0x0000 }, { 4299, 0x0888 },
-  { 4302, 0x4600 }, { 4305, 0x4140 }, { 4308, 0x0e04 }, { 4312, 0x2000 },
-  { 4313, 0x1622 }, { 4318, 0x1048 }, { 4321, 0x8a00 }, { 4324, 0x2217 },
-  /* 0x8400 */
-  { 4330, 0x7418 }, { 4336, 0x0000 }, { 4336, 0x1200 }, { 4338, 0x2102 },
-  { 4341, 0x0200 }, { 4342, 0x0880 }, { 4344, 0x984a }, { 4350, 0x0420 },
-  { 4352, 0x0000 }, { 4352, 0x1211 }, { 4356, 0x0002 }, { 4357, 0x9904 },
-  { 4362, 0x2a55 }, { 4369, 0x0402 }, { 4371, 0x5000 }, { 4373, 0x1010 },
-  /* 0x8500 */
-  { 4375, 0x0000 }, { 4375, 0x459a }, { 4382, 0xb02a }, { 4388, 0xa000 },
-  { 4390, 0x420a }, { 4394, 0x0208 }, { 4396, 0x2708 }, { 4401, 0x0000 },
-  { 4401, 0x8090 }, { 4404, 0x0812 }, { 4407, 0x8740 }, { 4412, 0x0401 },
-  { 4414, 0xe202 }, { 4419, 0x3020 }, { 4422, 0x0630 }, { 4426, 0x8c80 },
-  /* 0x8600 */
-  { 4430, 0x04c4 }, { 4434, 0x04c0 }, { 4437, 0x2000 }, { 4438, 0x8000 },
-  { 4439, 0x4000 }, { 4440, 0xd831 }, { 4447, 0x0080 }, { 4448, 0x0200 },
-  { 4449, 0x1400 }, { 4451, 0x0008 }, { 4452, 0x0218 }, { 4455, 0x0000 },
-  { 4455, 0x0880 }, { 4457, 0x8a10 }, { 4461, 0x2010 }, { 4463, 0x4000 },
-  /* 0x8700 */
-  { 4464, 0x010d }, { 4468, 0x1500 }, { 4471, 0x0000 }, { 4471, 0x0000 },
-  { 4471, 0x4000 }, { 4472, 0x80a0 }, { 4475, 0x0140 }, { 4477, 0x0150 },
-  { 4480, 0x2004 }, { 4482, 0x8000 }, { 4483, 0x0004 }, { 4484, 0x0408 },
-  { 4486, 0x0010 }, { 4487, 0x0000 }, { 4487, 0x9001 }, { 4490, 0x4a04 },
-  /* 0x8800 */
-  { 4494, 0x0020 }, { 4495, 0x8000 }, { 4496, 0x000c }, { 4498, 0x0842 },
-  { 4501, 0x3041 }, { 4505, 0x2a8c }, { 4511, 0x090e }, { 4516, 0xc085 },
-  { 4521, 0x2906 }, { 4526, 0x40c4 }, { 4530, 0x0800 }, { 4531, 0x0010 },
-  { 4532, 0x8006 }, { 4535, 0xb230 }, { 4541, 0x0102 }, { 4543, 0x2138 },
-  /* 0x8900 */
-  { 4548, 0x0080 }, { 4549, 0x030d }, { 4554, 0x0420 }, { 4556, 0x0940 },
-  { 4559, 0x0012 }, { 4561, 0x8000 }, { 4562, 0x0410 }, { 4564, 0x8004 },
-  { 4566, 0x88ca }, { 4572, 0x0048 }, { 4574, 0x0602 }, { 4577, 0x2404 },
-  { 4580, 0x0001 }, { 4581, 0x0004 }, { 4582, 0x0008 }, { 4583, 0x0110 },
-  /* 0x8a00 */
-  { 4585, 0x550d }, { 4592, 0xa9c8 }, { 4599, 0x2428 }, { 4603, 0x0c52 },
-  { 4608, 0x0000 }, { 4608, 0x4831 }, { 4613, 0x624d }, { 4620, 0x022f },
-  { 4626, 0x30a0 }, { 4630, 0x4128 }, { 4634, 0x057b }, { 4642, 0xd205 },
-  { 4648, 0xa894 }, { 4654, 0x1844 }, { 4658, 0x6cc2 }, { 4665, 0x45c2 },
-  /* 0x8b00 */
-  { 4671, 0x4017 }, { 4676, 0x2ed1 }, { 4684, 0x1901 }, { 4688, 0x0208 },
-  { 4690, 0xc202 }, { 4694, 0x1500 }, { 4697, 0x9040 }, { 4700, 0x2091 },
-  { 4704, 0x0401 }, { 4706, 0x044d }, { 4711, 0x0000 }, { 4711, 0x0000 },
-  { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 },
-  /* 0x8c00 */
-  { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x8080 },
-  { 4713, 0x1542 }, { 4718, 0x0420 }, { 4720, 0x0c02 }, { 4723, 0x0600 },
-  { 4725, 0x1404 }, { 4728, 0x6000 }, { 4730, 0x9f87 }, { 4740, 0xb9d9 },
-  { 4750, 0x059f }, { 4758, 0x540a }, { 4763, 0x245d }, { 4770, 0x3810 },
-  /* 0x8d00 */
-  { 4774, 0x25b0 }, { 4780, 0x0048 }, { 4782, 0x0000 }, { 4782, 0x0000 },
-  { 4782, 0x0000 }, { 4782, 0x0000 }, { 4782, 0x0850 }, { 4785, 0x0099 },
-  { 4789, 0x0420 }, { 4791, 0x0200 }, { 4792, 0x0108 }, { 4794, 0x4408 },
-  { 4797, 0x9840 }, { 4801, 0x2800 }, { 4803, 0x810a }, { 4807, 0x0008 },
-  /* 0x8e00 */
-  { 4808, 0x8400 }, { 4810, 0x4001 }, { 4812, 0x0400 }, { 4813, 0x0021 },
-  { 4815, 0x0794 }, { 4821, 0x8200 }, { 4823, 0x0001 }, { 4824, 0x0050 },
-  { 4826, 0x2482 }, { 4830, 0x0000 }, { 4830, 0x1c00 }, { 4833, 0x0000 },
-  { 4833, 0x3c01 }, { 4838, 0x8004 }, { 4840, 0x0800 }, { 4841, 0x4900 },
-  /* 0x8f00 */
-  { 4844, 0x0228 }, { 4847, 0xf83c }, { 4856, 0x86c0 }, { 4861, 0xcb08 },
-  { 4867, 0x6230 }, { 4872, 0xa000 }, { 4874, 0x0004 }, { 4875, 0x0000 },
-  { 4875, 0x0000 }, { 4875, 0x1800 }, { 4877, 0xa148 }, { 4882, 0x0007 },
-  { 4885, 0x4024 }, { 4888, 0x0012 }, { 4890, 0x2c40 }, { 4894, 0x2285 },
-  /* 0x9000 */
-  { 4899, 0xa96f }, { 4909, 0xe6b3 }, { 4919, 0x400f }, { 4924, 0x5126 },
-  { 4930, 0x6c86 }, { 4937, 0x723b }, { 4946, 0xe20b }, { 4953, 0xb5a4 },
-  { 4961, 0x859f }, { 4970, 0x0222 }, { 4973, 0x854c }, { 4979, 0x0123 },
-  { 4983, 0x0402 }, { 4985, 0x4000 }, { 4986, 0x2102 }, { 4989, 0x2020 },
-  /* 0x9100 */
-  { 4991, 0x0004 }, { 4992, 0x0224 }, { 4995, 0x2080 }, { 4997, 0x0004 },
-  { 4998, 0x7e00 }, { 5004, 0x0004 }, { 5005, 0x1604 }, { 5009, 0x01a0 },
-  { 5012, 0x2a80 }, { 5016, 0x1004 }, { 5018, 0xd800 }, { 5022, 0x0032 },
-  { 5025, 0xfa81 }, { 5033, 0x3183 }, { 5039, 0x0488 }, { 5042, 0x0020 },
-  /* 0x9200 */
-  { 5043, 0x2000 }, { 5044, 0x4087 }, { 5049, 0x0000 }, { 5049, 0x8410 },
-  { 5052, 0x0221 }, { 5055, 0x4880 }, { 5058, 0x0074 }, { 5062, 0x0000 },
-  { 5062, 0x0029 }, { 5065, 0x114a }, { 5070, 0x0000 }, { 5070, 0x02c8 },
-  { 5074, 0x9000 }, { 5076, 0x0004 }, { 5077, 0x0410 }, { 5079, 0x1100 },
-  /* 0x9300 */
-  { 5081, 0x0010 }, { 5082, 0xc501 }, { 5087, 0xc957 }, { 5096, 0x0000 },
-  { 5096, 0x2d00 }, { 5100, 0x0810 }, { 5102, 0x4000 }, { 5103, 0x5020 },
-  { 5106, 0x1000 }, { 5107, 0x0450 }, { 5110, 0x3088 }, { 5114, 0x0001 },
-  { 5115, 0x0008 }, { 5116, 0x4002 }, { 5118, 0x0012 }, { 5120, 0x0040 },
-  /* 0x9400 */
-  { 5121, 0x0010 }, { 5122, 0x0100 }, { 5123, 0x0820 }, { 5125, 0x0120 },
-  { 5127, 0x0010 }, { 5128, 0x0806 }, { 5131, 0x0000 }, { 5131, 0xa000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  /* 0x9500 */
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 },
-  { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0080 },
-  { 5134, 0x8a09 }, { 5139, 0x011e }, { 5144, 0x2138 }, { 5149, 0x1802 },
-  { 5152, 0x0480 }, { 5154, 0x1070 }, { 5158, 0x0006 }, { 5160, 0x0000 },
-  /* 0x9600 */
-  { 5160, 0x0000 }, { 5160, 0x1000 }, { 5161, 0x4402 }, { 5164, 0x8804 },
-  { 5167, 0x3815 }, { 5173, 0xf801 }, { 5179, 0x041c }, { 5183, 0x21e9 },
-  { 5190, 0x6c60 }, { 5196, 0x1b30 }, { 5202, 0x0588 }, { 5206, 0x0882 },
-  { 5209, 0x7af3 }, { 5220, 0x1a60 }, { 5225, 0x870c }, { 5231, 0x0ac5 },
-  /* 0x9700 */
-  { 5237, 0x00c1 }, { 5240, 0x524a }, { 5246, 0x0080 }, { 5247, 0x2205 },
-  { 5251, 0x0114 }, { 5254, 0x5042 }, { 5258, 0x2206 }, { 5262, 0x0490 },
-  { 5265, 0xa800 }, { 5268, 0x0000 }, { 5268, 0x2901 }, { 5272, 0x0000 },
-  { 5272, 0x0840 }, { 5274, 0x1008 }, { 5276, 0x0000 }, { 5276, 0x8848 },
-  /* 0x9800 */
-  { 5280, 0x156f }, { 5289, 0x018f }, { 5295, 0x2000 }, { 5296, 0x0b01 },
-  { 5300, 0x7040 }, { 5304, 0x4510 }, { 5308, 0x88a0 }, { 5312, 0x0000 },
-  { 5312, 0x0000 }, { 5312, 0x0000 }, { 5312, 0x8100 }, { 5314, 0x0002 },
-  { 5315, 0x0090 }, { 5317, 0x9800 }, { 5320, 0xe006 }, { 5325, 0x7010 },
-  /* 0x9900 */
-  { 5329, 0x1608 }, { 5333, 0x4109 }, { 5337, 0x0101 }, { 5339, 0x0000 },
-  { 5339, 0x3a20 }, { 5344, 0x0096 }, { 5348, 0x0000 }, { 5348, 0x0000 },
-  { 5348, 0x0000 }, { 5348, 0x2240 }, { 5351, 0x7120 }, { 5356, 0x021a },
-  { 5360, 0x0002 }, { 5361, 0xa227 }, { 5368, 0x2000 }, { 5369, 0x8002 },
-  /* 0x9a00 */
-  { 5371, 0xc102 }, { 5375, 0x0200 }, { 5376, 0x0800 }, { 5377, 0x00c1 },
-  { 5380, 0x2029 }, { 5384, 0x8ca0 }, { 5389, 0x0624 }, { 5393, 0x0000 },
-  { 5393, 0x0000 }, { 5393, 0x0000 }, { 5393, 0x0100 }, { 5394, 0x0100 },
-  { 5395, 0x0000 }, { 5395, 0x0118 }, { 5398, 0x4020 }, { 5400, 0x0000 },
-  /* 0x9b00 */
-  { 5400, 0x0000 }, { 5400, 0x0400 }, { 5401, 0x0480 }, { 5403, 0x1002 },
-  { 5405, 0x803e }, { 5411, 0x0410 }, { 5413, 0x8000 }, { 5414, 0x0000 },
-  { 5414, 0x4000 }, { 5415, 0x8002 }, { 5417, 0x4800 }, { 5419, 0x0000 },
-  { 5419, 0x0200 }, { 5420, 0x0040 }, { 5421, 0x0110 }, { 5423, 0x0000 },
-  /* 0x9c00 */
-  { 5423, 0x2000 }, { 5424, 0x0025 }, { 5427, 0x0020 }, { 5428, 0x0804 },
-  { 5430, 0x0280 }, { 5432, 0x0080 }, { 5433, 0x0000 }, { 5433, 0x0000 },
-  { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 },
-  { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x02a0 }, { 5436, 0x0058 },
-  /* 0x9d00 */
-  { 5439, 0x0200 }, { 5440, 0x0800 }, { 5441, 0x0140 }, { 5443, 0x0800 },
-  { 5444, 0x0000 }, { 5444, 0x2002 }, { 5446, 0x1003 }, { 5449, 0x0004 },
-  { 5450, 0x0000 }, { 5450, 0x0000 }, { 5450, 0x8200 }, { 5452, 0x0010 },
-  { 5453, 0x0010 }, { 5454, 0x0080 }, { 5455, 0x0000 }, { 5455, 0x0704 },
-  /* 0x9e00 */
-  { 5459, 0x0000 }, { 5459, 0x4400 }, { 5461, 0x0000 }, { 5461, 0x0000 },
-  { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0xa220 },
-  { 5465, 0x0000 }, { 5465, 0xa08c }, { 5470, 0x0020 }, { 5471, 0x4830 },
-  { 5475, 0x6008 }, { 5478, 0x5912 }, { 5484, 0x0100 }, { 5485, 0x0010 },
-  /* 0x9f00 */
-  { 5486, 0x4180 }, { 5489, 0x0008 }, { 5490, 0x0001 }, { 5491, 0x0800 },
-  { 5492, 0x4c00 }, { 5495, 0x8004 }, { 5497, 0x1482 }, { 5501, 0x0080 },
-  { 5502, 0x2000 }, { 5503, 0x1021 },
-};
-static const Summary16 ksc5601_uni2indx_pageac[698] = {
-  /* 0xac00 */
-  { 5506, 0x0793 }, { 5513, 0x3eff }, { 5526, 0xb011 }, { 5531, 0x1303 },
-  { 5536, 0x2801 }, { 5539, 0x1110 }, { 5542, 0x0000 }, { 5542, 0x0593 },
-  { 5548, 0x1e7b }, { 5558, 0xb011 }, { 5563, 0x9703 }, { 5570, 0x3b01 },
-  { 5576, 0x1112 }, { 5580, 0x00a0 }, { 5582, 0x9593 }, { 5590, 0x306b },
-  /* 0xad00 */
-  { 5597, 0xb051 }, { 5603, 0x1102 }, { 5606, 0x3201 }, { 5610, 0x1130 },
-  { 5614, 0x02b0 }, { 5618, 0x0111 }, { 5621, 0x300a }, { 5625, 0xb879 },
-  { 5634, 0x1306 }, { 5639, 0x3001 }, { 5642, 0x0010 }, { 5643, 0x0080 },
-  { 5644, 0x0113 }, { 5648, 0x100b }, { 5652, 0x0011 }, { 5654, 0x9300 },
-  /* 0xae00 */
-  { 5658, 0x2b03 }, { 5664, 0x0010 }, { 5665, 0x0000 }, { 5665, 0x0593 },
-  { 5671, 0x746b }, { 5680, 0xb051 }, { 5686, 0x1323 }, { 5692, 0x3b01 },
-  { 5698, 0x1030 }, { 5701, 0x0000 }, { 5701, 0x0000 }, { 5701, 0x7000 },
-  { 5704, 0xb011 }, { 5709, 0x1303 }, { 5714, 0x2900 }, { 5717, 0x1110 },
-  /* 0xaf00 */
-  { 5720, 0x2180 }, { 5723, 0x0001 }, { 5724, 0x3000 }, { 5726, 0xb015 },
-  { 5732, 0x030e }, { 5737, 0x3001 }, { 5740, 0x0030 }, { 5742, 0x0200 },
-  { 5743, 0x0111 }, { 5746, 0x1023 }, { 5750, 0x0000 }, { 5750, 0x1300 },
-  { 5753, 0x6b81 }, { 5760, 0x1010 }, { 5762, 0x0300 }, { 5764, 0x0113 },
-  /* 0xb000 */
-  { 5768, 0x1013 }, { 5772, 0x3011 }, { 5776, 0x0100 }, { 5777, 0x0000 },
-  { 5777, 0x5530 }, { 5783, 0x22b8 }, { 5789, 0x0000 }, { 5789, 0x3000 },
-  { 5791, 0xb011 }, { 5796, 0x9702 }, { 5802, 0xfb07 }, { 5812, 0x113a },
-  { 5818, 0x03b0 }, { 5823, 0x0113 }, { 5827, 0x0021 }, { 5829, 0x0000 },
-  /* 0xb100 */
-  { 5829, 0x1b00 }, { 5833, 0x3b0d }, { 5841, 0x1138 }, { 5846, 0x03b0 },
-  { 5851, 0x0113 }, { 5855, 0x1133 }, { 5861, 0x0001 }, { 5862, 0x1300 },
-  { 5865, 0x2b05 }, { 5871, 0x111c }, { 5876, 0x0100 }, { 5877, 0x0000 },
-  { 5877, 0x1000 }, { 5878, 0xb011 }, { 5883, 0x1300 }, { 5886, 0x2a01 },
-  /* 0xb200 */
-  { 5890, 0x1930 }, { 5895, 0x02b0 }, { 5899, 0x0001 }, { 5900, 0x1010 },
-  { 5902, 0x0000 }, { 5902, 0x1100 }, { 5904, 0x0301 }, { 5907, 0x1030 },
-  { 5910, 0x0230 }, { 5913, 0x0713 }, { 5919, 0x146b }, { 5926, 0x0011 },
-  { 5928, 0x1300 }, { 5931, 0x2b05 }, { 5937, 0xf974 }, { 5947, 0x8fb8 },
-  /* 0xb300 */
-  { 5956, 0x0113 }, { 5960, 0x103b }, { 5966, 0x0000 }, { 5966, 0x0000 },
-  { 5966, 0x0000 }, { 5966, 0xd970 }, { 5974, 0x4ab0 }, { 5980, 0x0113 },
-  { 5984, 0x103b }, { 5990, 0x0011 }, { 5992, 0x1103 }, { 5996, 0x0000 },
-  { 5996, 0x5930 }, { 6002, 0x2ab1 }, { 6009, 0x0111 }, { 6012, 0x1000 },
-  /* 0xb400 */
-  { 6013, 0x0000 }, { 6013, 0x1101 }, { 6016, 0x0b01 }, { 6020, 0x0010 },
-  { 6021, 0x0000 }, { 6021, 0x0113 }, { 6025, 0x102b }, { 6030, 0x0000 },
-  { 6030, 0x0101 }, { 6032, 0x2000 }, { 6033, 0x1110 }, { 6036, 0x02a0 },
-  { 6039, 0x0111 }, { 6042, 0x3021 }, { 6046, 0xb059 }, { 6053, 0x0102 },
-  /* 0xb500 */
-  { 6055, 0x0000 }, { 6055, 0x1930 }, { 6060, 0x07b0 }, { 6066, 0x0113 },
-  { 6070, 0x383b }, { 6078, 0xb011 }, { 6083, 0x0003 }, { 6085, 0x0000 },
-  { 6085, 0x0000 }, { 6085, 0x0000 }, { 6085, 0x0d13 }, { 6091, 0x383b },
-  { 6099, 0xb011 }, { 6104, 0x0103 }, { 6107, 0x1000 }, { 6108, 0x0000 },
-  /* 0xb600 */
-  { 6108, 0x0000 }, { 6108, 0x0113 }, { 6112, 0x1020 }, { 6114, 0x0010 },
-  { 6115, 0x0100 }, { 6116, 0x0000 }, { 6116, 0x0110 }, { 6118, 0x0000 },
-  { 6118, 0x0000 }, { 6118, 0x3000 }, { 6120, 0x1811 }, { 6124, 0x0002 },
-  { 6125, 0x0000 }, { 6125, 0x0010 }, { 6126, 0x0000 }, { 6126, 0x0111 },
-  /* 0xb700 */
-  { 6129, 0x0023 }, { 6132, 0x0000 }, { 6132, 0x9300 }, { 6136, 0x0b01 },
-  { 6140, 0x1110 }, { 6143, 0x0030 }, { 6145, 0x0111 }, { 6148, 0x302b },
-  { 6154, 0xb011 }, { 6159, 0x13c7 }, { 6167, 0x3b01 }, { 6173, 0x0130 },
-  { 6176, 0x0280 }, { 6178, 0x0000 }, { 6178, 0x3000 }, { 6180, 0xb011 },
-  /* 0xb800 */
-  { 6185, 0x1383 }, { 6191, 0x2b01 }, { 6196, 0x1130 }, { 6200, 0x03b0 },
-  { 6205, 0x0011 }, { 6207, 0x300a }, { 6211, 0xb011 }, { 6216, 0x1102 },
-  { 6219, 0x2000 }, { 6220, 0x0000 }, { 6220, 0x0100 }, { 6221, 0x0111 },
-  { 6224, 0x102b }, { 6229, 0xa011 }, { 6233, 0x1302 }, { 6237, 0x2b01 },
-  /* 0xb900 */
-  { 6242, 0x0010 }, { 6243, 0x0100 }, { 6244, 0x0001 }, { 6245, 0x3000 },
-  { 6247, 0x9011 }, { 6251, 0x1302 }, { 6255, 0x2b01 }, { 6260, 0x1130 },
-  { 6264, 0x66b0 }, { 6271, 0x0000 }, { 6271, 0x3000 }, { 6273, 0xb011 },
-  { 6278, 0xd302 }, { 6284, 0x6b07 }, { 6292, 0x113a }, { 6298, 0x07b0 },
-  /* 0xba00 */
-  { 6304, 0x0103 }, { 6307, 0x0020 }, { 6308, 0x0000 }, { 6308, 0x1300 },
-  { 6311, 0x6b05 }, { 6318, 0x1138 }, { 6323, 0x03b0 }, { 6328, 0x0113 },
-  { 6332, 0x10b8 }, { 6337, 0x0000 }, { 6337, 0x1b00 }, { 6341, 0x2b05 },
-  { 6347, 0x0110 }, { 6349, 0x0300 }, { 6351, 0x0000 }, { 6351, 0x1000 },
-  /* 0xbb00 */
-  { 6352, 0xa011 }, { 6356, 0x1102 }, { 6359, 0x0a01 }, { 6362, 0x7970 },
-  { 6370, 0xa2b0 }, { 6376, 0x0111 }, { 6379, 0x100a }, { 6382, 0x0000 },
-  { 6382, 0x1100 }, { 6384, 0x0001 }, { 6385, 0x1110 }, { 6388, 0x0090 },
-  { 6390, 0x0111 }, { 6393, 0x0009 }, { 6395, 0x0000 }, { 6395, 0x9300 },
-  /* 0xbc00 */
-  { 6399, 0xbb05 }, { 6407, 0xf9f2 }, { 6418, 0x22b0 }, { 6423, 0x0113 },
-  { 6427, 0x323b }, { 6435, 0x2001 }, { 6437, 0x0000 }, { 6437, 0x0000 },
-  { 6437, 0x5930 }, { 6443, 0x06b0 }, { 6448, 0x0193 }, { 6453, 0x303b },
-  { 6460, 0xa011 }, { 6464, 0x1123 }, { 6469, 0x0000 }, { 6469, 0x1170 },
-  /* 0xbd00 */
-  { 6474, 0x02b0 }, { 6478, 0x0011 }, { 6480, 0x1010 }, { 6482, 0x0000 },
-  { 6482, 0x1301 }, { 6486, 0x0301 }, { 6489, 0x0110 }, { 6491, 0x0000 },
-  { 6491, 0x0793 }, { 6498, 0x162b }, { 6505, 0x0010 }, { 6506, 0x0101 },
-  { 6508, 0x0000 }, { 6508, 0x1130 }, { 6512, 0x0200 }, { 6513, 0x0111 },
-  /* 0xbe00 */
-  { 6516, 0x3029 }, { 6521, 0xb011 }, { 6526, 0x0000 }, { 6526, 0x0000 },
-  { 6526, 0x5130 }, { 6531, 0x0eb0 }, { 6537, 0x0513 }, { 6542, 0x383b },
-  { 6550, 0xb011 }, { 6555, 0x0303 }, { 6559, 0x0100 }, { 6560, 0x0000 },
-  { 6560, 0x0000 }, { 6560, 0x0193 }, { 6565, 0x1039 }, { 6570, 0x0000 },
-  /* 0xbf00 */
-  { 6570, 0x0302 }, { 6573, 0x3b00 }, { 6578, 0x0000 }, { 6578, 0x0000 },
-  { 6578, 0x0113 }, { 6582, 0x0023 }, { 6585, 0x0000 }, { 6585, 0x0000 },
-  { 6585, 0x0000 }, { 6585, 0x0010 }, { 6586, 0x0000 }, { 6586, 0x0001 },
-  { 6587, 0x3020 }, { 6590, 0x9011 }, { 6594, 0x0002 }, { 6595, 0x0000 },
-  /* 0xc000 */
-  { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x1000 },
-  { 6596, 0x0000 }, { 6596, 0x1102 }, { 6599, 0x0301 }, { 6602, 0x0000 },
-  { 6602, 0x0000 }, { 6602, 0x0113 }, { 6606, 0xb02b }, { 6613, 0xb079 },
-  { 6621, 0x1323 }, { 6627, 0x3b01 }, { 6633, 0x1130 }, { 6637, 0x02b0 },
-  /* 0xc100 */
-  { 6641, 0x0111 }, { 6644, 0xf021 }, { 6650, 0xb0d9 }, { 6658, 0x1343 },
-  { 6664, 0x3b01 }, { 6670, 0x1130 }, { 6674, 0x03b0 }, { 6679, 0x0111 },
-  { 6682, 0x7020 }, { 6686, 0xb051 }, { 6692, 0x1322 }, { 6697, 0x2001 },
-  { 6699, 0x1110 }, { 6702, 0x0190 }, { 6705, 0x0111 }, { 6708, 0x300b },
-  /* 0xc200 */
-  { 6713, 0xb011 }, { 6718, 0x9302 }, { 6723, 0xab01 }, { 6729, 0x0016 },
-  { 6732, 0x0100 }, { 6733, 0x0113 }, { 6737, 0x3021 }, { 6741, 0xb011 },
-  { 6746, 0x0302 }, { 6749, 0x2901 }, { 6753, 0x3130 }, { 6758, 0x02b0 },
-  { 6762, 0x0000 }, { 6762, 0x3000 }, { 6764, 0xb819 }, { 6771, 0x1b42 },
-  /* 0xc300 */
-  { 6777, 0x3301 }, { 6782, 0x1138 }, { 6787, 0x0330 }, { 6791, 0x0000 },
-  { 6791, 0x0020 }, { 6792, 0x0000 }, { 6792, 0x1300 }, { 6795, 0x3305 },
-  { 6801, 0x1110 }, { 6804, 0x0000 }, { 6804, 0x0000 }, { 6804, 0x0000 },
-  { 6804, 0x0001 }, { 6805, 0x9300 }, { 6809, 0x2305 }, { 6814, 0x0130 },
-  /* 0xc400 */
-  { 6817, 0x0100 }, { 6818, 0x0001 }, { 6819, 0x1010 }, { 6821, 0x3011 },
-  { 6825, 0x0100 }, { 6826, 0x0000 }, { 6826, 0x1130 }, { 6830, 0x0230 },
-  { 6833, 0x0001 }, { 6834, 0x1010 }, { 6836, 0x0000 }, { 6836, 0x1100 },
-  { 6838, 0x0000 }, { 6838, 0x0000 }, { 6838, 0x0200 }, { 6839, 0x8513 },
-  /* 0xc500 */
-  { 6845, 0x1003 }, { 6848, 0x1011 }, { 6851, 0x1300 }, { 6854, 0x2b01 },
-  { 6859, 0x7730 }, { 6867, 0x63b8 }, { 6875, 0x0113 }, { 6879, 0x303b },
-  { 6886, 0xb091 }, { 6892, 0x11a2 }, { 6897, 0x0201 }, { 6899, 0x7b30 },
-  { 6907, 0x57f0 }, { 6916, 0x0113 }, { 6920, 0x702b }, { 6927, 0xf0d1 },
-  /* 0xc600 */
-  { 6935, 0x11e3 }, { 6942, 0x1b01 }, { 6947, 0x7130 }, { 6953, 0x0ab9 },
-  { 6960, 0x0113 }, { 6964, 0x303b }, { 6971, 0x9001 }, { 6974, 0x1302 },
-  { 6978, 0x2b01 }, { 6983, 0x1130 }, { 6987, 0x02b0 }, { 6991, 0x0713 },
-  { 6997, 0x302b }, { 7003, 0x3011 }, { 7007, 0x1303 }, { 7012, 0x2301 },
-  /* 0xc700 */
-  { 7016, 0x1130 }, { 7020, 0x02b0 }, { 7024, 0x0113 }, { 7028, 0x30ab },
-  { 7035, 0xb411 }, { 7041, 0x11fe }, { 7050, 0x0901 }, { 7053, 0x7130 },
-  { 7059, 0x47b8 }, { 7067, 0x05d3 }, { 7074, 0x307b }, { 7082, 0xb011 },
-  { 7087, 0x5303 }, { 7093, 0x2101 }, { 7096, 0x1110 }, { 7099, 0x0000 },
-  /* 0xc800 */
-  { 7099, 0x0513 }, { 7104, 0x306b }, { 7111, 0xb011 }, { 7116, 0x1102 },
-  { 7119, 0x3301 }, { 7124, 0x0010 }, { 7125, 0x0000 }, { 7125, 0x0513 },
-  { 7130, 0x38eb }, { 7139, 0xa010 }, { 7142, 0x0102 }, { 7144, 0x3000 },
-  { 7146, 0x1110 }, { 7149, 0x02b0 }, { 7153, 0x0013 }, { 7156, 0x3020 },
-  /* 0xc900 */
-  { 7159, 0xb071 }, { 7166, 0x0102 }, { 7168, 0x1000 }, { 7169, 0x0010 },
-  { 7170, 0x0000 }, { 7170, 0x0113 }, { 7174, 0x100b }, { 7178, 0x1011 },
-  { 7181, 0x1300 }, { 7184, 0x2b01 }, { 7189, 0x0000 }, { 7189, 0x0000 },
-  { 7189, 0x0593 }, { 7195, 0x366b }, { 7204, 0xb095 }, { 7211, 0x1303 },
-  /* 0xca00 */
-  { 7216, 0x3b01 }, { 7222, 0x0110 }, { 7224, 0x0200 }, { 7225, 0x0000 },
-  { 7225, 0x3000 }, { 7227, 0xb011 }, { 7232, 0x0103 }, { 7235, 0x2000 },
-  { 7236, 0x0010 }, { 7237, 0x0100 }, { 7238, 0x0000 }, { 7238, 0x3000 },
-  { 7240, 0xb011 }, { 7245, 0x030a }, { 7249, 0x1001 }, { 7251, 0x0010 },
-  /* 0xcb00 */
-  { 7252, 0x0100 }, { 7253, 0x0111 }, { 7256, 0x0003 }, { 7258, 0x0000 },
-  { 7258, 0x1302 }, { 7262, 0x2301 }, { 7266, 0x0010 }, { 7267, 0x0300 },
-  { 7269, 0x0000 }, { 7269, 0x1000 }, { 7270, 0x0000 }, { 7270, 0x0100 },
-  { 7271, 0x0000 }, { 7271, 0x0010 }, { 7272, 0x0290 }, { 7275, 0x0000 },
-  /* 0xcc00 */
-  { 7275, 0x3000 }, { 7277, 0x3011 }, { 7281, 0x5386 }, { 7288, 0x7b01 },
-  { 7295, 0x1130 }, { 7299, 0x03b0 }, { 7304, 0x0151 }, { 7308, 0x0021 },
-  { 7310, 0x0000 }, { 7310, 0x1300 }, { 7313, 0x3b01 }, { 7319, 0x1130 },
-  { 7323, 0x02b0 }, { 7327, 0x0011 }, { 7329, 0x1010 }, { 7331, 0x0001 },
-  /* 0xcd00 */
-  { 7332, 0x1302 }, { 7336, 0x2b01 }, { 7341, 0x1110 }, { 7344, 0x0200 },
-  { 7345, 0x0000 }, { 7345, 0x1000 }, { 7346, 0xb011 }, { 7351, 0x0102 },
-  { 7353, 0x0100 }, { 7354, 0x1130 }, { 7358, 0x02b0 }, { 7362, 0x0001 },
-  { 7363, 0x1010 }, { 7365, 0x0001 }, { 7366, 0x1100 }, { 7368, 0x2b01 },
-  /* 0xce00 */
-  { 7373, 0x1110 }, { 7376, 0x0210 }, { 7378, 0x0113 }, { 7382, 0x002b },
-  { 7386, 0x0000 }, { 7386, 0x9300 }, { 7390, 0x2b03 }, { 7396, 0x1130 },
-  { 7400, 0x02b0 }, { 7404, 0x0113 }, { 7408, 0x303b }, { 7415, 0x0000 },
-  { 7415, 0x0002 }, { 7416, 0x0000 }, { 7416, 0x1930 }, { 7421, 0x03b0 },
-  /* 0xcf00 */
-  { 7426, 0x0113 }, { 7430, 0x102b }, { 7435, 0xb011 }, { 7440, 0x0103 },
-  { 7443, 0x0000 }, { 7443, 0x1130 }, { 7447, 0x02b0 }, { 7451, 0x0113 },
-  { 7455, 0x1021 }, { 7458, 0x0000 }, { 7458, 0x0102 }, { 7460, 0x0001 },
-  { 7461, 0x0010 }, { 7462, 0x0000 }, { 7462, 0x0113 }, { 7466, 0x102b },
-  /* 0xd000 */
-  { 7471, 0x0011 }, { 7473, 0x0102 }, { 7475, 0x2000 }, { 7476, 0x1130 },
-  { 7480, 0x02b0 }, { 7484, 0x0111 }, { 7487, 0x3001 }, { 7490, 0x3011 },
-  { 7494, 0x0002 }, { 7495, 0x0000 }, { 7495, 0x1130 }, { 7499, 0x02b0 },
-  { 7503, 0x0313 }, { 7508, 0x303b }, { 7515, 0xb011 }, { 7520, 0x0103 },
-  /* 0xd100 */
-  { 7523, 0x2000 }, { 7524, 0x0000 }, { 7524, 0x0000 }, { 7524, 0x0513 },
-  { 7529, 0x303b }, { 7536, 0xb011 }, { 7541, 0x1102 }, { 7544, 0x1000 },
-  { 7545, 0x0110 }, { 7547, 0x0000 }, { 7547, 0x0113 }, { 7551, 0x142b },
-  { 7557, 0x0001 }, { 7558, 0x0100 }, { 7559, 0x0000 }, { 7559, 0x0110 },
-  /* 0xd200 */
-  { 7561, 0x0280 }, { 7563, 0x0001 }, { 7564, 0x3000 }, { 7566, 0xb011 },
-  { 7571, 0x0102 }, { 7573, 0x1000 }, { 7574, 0x0010 }, { 7575, 0x0000 },
-  { 7575, 0x0113 }, { 7579, 0x1023 }, { 7583, 0x1011 }, { 7586, 0x9302 },
-  { 7591, 0x0b05 }, { 7596, 0x1110 }, { 7599, 0x0030 }, { 7601, 0x0113 },
-  /* 0xd300 */
-  { 7605, 0x702b }, { 7612, 0xb051 }, { 7618, 0x1323 }, { 7624, 0x3b01 },
-  { 7630, 0x0030 }, { 7632, 0x0000 }, { 7632, 0x0000 }, { 7632, 0x3000 },
-  { 7634, 0xb011 }, { 7639, 0x1303 }, { 7644, 0x2b01 }, { 7649, 0x1110 },
-  { 7652, 0x0330 }, { 7656, 0x0101 }, { 7658, 0x300a }, { 7662, 0xb011 },
-  /* 0xd400 */
-  { 7667, 0x0102 }, { 7669, 0x2000 }, { 7670, 0x0000 }, { 7670, 0x0000 },
-  { 7670, 0x0011 }, { 7672, 0x1000 }, { 7673, 0xa011 }, { 7677, 0x9300 },
-  { 7681, 0x2b05 }, { 7687, 0x0010 }, { 7688, 0x0200 }, { 7689, 0x0000 },
-  { 7689, 0x1000 }, { 7690, 0x9011 }, { 7694, 0x1100 }, { 7696, 0x2901 },
-  /* 0xd500 */
-  { 7700, 0x1110 }, { 7703, 0x00b0 }, { 7706, 0x0000 }, { 7706, 0x3000 },
-  { 7708, 0xb011 }, { 7713, 0x1302 }, { 7717, 0x2b21 }, { 7723, 0x1130 },
-  { 7727, 0x03b0 }, { 7732, 0x0001 }, { 7733, 0x0020 }, { 7734, 0x0000 },
-  { 7734, 0x1300 }, { 7737, 0x2b05 }, { 7743, 0x1130 }, { 7747, 0x02b0 },
-  /* 0xd600 */
-  { 7751, 0x0113 }, { 7755, 0x103b }, { 7761, 0x2011 }, { 7764, 0x1300 },
-  { 7767, 0x2b21 }, { 7773, 0x1132 }, { 7778, 0x0280 }, { 7780, 0x0013 },
-  { 7783, 0x3028 }, { 7787, 0xa011 }, { 7791, 0x1102 }, { 7794, 0x0a01 },
-  { 7797, 0x1130 }, { 7801, 0x0292 }, { 7805, 0x0111 }, { 7808, 0x3021 },
-  /* 0xd700 */
-  { 7812, 0x0011 }, { 7814, 0x1302 }, { 7818, 0x2b01 }, { 7823, 0x1130 },
-  { 7827, 0x0290 }, { 7830, 0x03d3 }, { 7837, 0x122b }, { 7843, 0x3011 },
-  { 7847, 0x1302 }, { 7851, 0x2b01 },
-};
-static const Summary16 ksc5601_uni2indx_pagef9[17] = {
-  /* 0xf900 */
-  { 7856, 0xffff }, { 7872, 0xffff }, { 7888, 0xffff }, { 7904, 0xffff },
-  { 7920, 0xffff }, { 7936, 0xffff }, { 7952, 0xffff }, { 7968, 0xffff },
-  { 7984, 0xffff }, { 8000, 0xffff }, { 8016, 0xffff }, { 8032, 0xffff },
-  { 8048, 0xffff }, { 8064, 0xffff }, { 8080, 0xffff }, { 8096, 0xffff },
-  /* 0xfa00 */
-  { 8112, 0x0fff },
-};
-static const Summary16 ksc5601_uni2indx_pageff[15] = {
-  /* 0xff00 */
-  { 8124, 0xfffe }, { 8139, 0xffff }, { 8155, 0xffff }, { 8171, 0xffff },
-  { 8187, 0xffff }, { 8203, 0x7fff }, { 8218, 0x0000 }, { 8218, 0x0000 },
-  { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 },
-  { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x006f },
-};
-
-static int
-ksc5601_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (n >= 2) {
-    const Summary16 *summary = NULL;
-    if (wc < 0x0460)
-      summary = &ksc5601_uni2indx_page00[(wc>>4)];
-    else if (wc >= 0x2000 && wc < 0x2670)
-      summary = &ksc5601_uni2indx_page20[(wc>>4)-0x200];
-    else if (wc >= 0x3000 && wc < 0x33e0)
-      summary = &ksc5601_uni2indx_page30[(wc>>4)-0x300];
-    else if (wc >= 0x4e00 && wc < 0x9fa0)
-      summary = &ksc5601_uni2indx_page4e[(wc>>4)-0x4e0];
-    else if (wc >= 0xac00 && wc < 0xd7a0)
-      summary = &ksc5601_uni2indx_pageac[(wc>>4)-0xac0];
-    else if (wc >= 0xf900 && wc < 0xfa10)
-      summary = &ksc5601_uni2indx_pagef9[(wc>>4)-0xf90];
-    else if (wc >= 0xff00 && wc < 0xfff0)
-      summary = &ksc5601_uni2indx_pageff[(wc>>4)-0xff0];
-    if (summary) {
-      unsigned short used = summary->used;
-      unsigned int i = wc & 0x0f;
-      if (used & ((unsigned short) 1 << i)) {
-        unsigned short c;
-        /* Keep in `used' only the bits 0..i-1. */
-        used &= ((unsigned short) 1 << i) - 1;
-        /* Add `summary->indx' and the number of bits set in `used'. */
-        used = (used & 0x5555) + ((used & 0xaaaa) >> 1);
-        used = (used & 0x3333) + ((used & 0xcccc) >> 2);
-        used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);
-        used = (used & 0x00ff) + (used >> 8);
-        c = ksc5601_2charset[summary->indx + used];
-        r[0] = (c >> 8); r[1] = (c & 0xff);
-        return 2;
-      }
-    }
-    return RET_ILSEQ;
-  }
-  return RET_TOOSMALL;
-}
-#endif /* NEED_TOMB */
--- a/DoConfig/fltk/src/xutf8/lcUniConv/mulelao.h
+++ /dev/null
@@ -1,78 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/mulelao.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * MULELAO-1
- */
-
-static const unsigned short mulelao_2uni[96] = {
-  /* 0xa0 */
-  0x00a0, 0x0e81, 0x0e82, 0xfffd, 0x0e84, 0xfffd, 0xfffd, 0x0e87,
-  0x0e88, 0xfffd, 0x0e8a, 0xfffd, 0xfffd, 0x0e8d, 0xfffd, 0xfffd,
-  /* 0xb0 */
-  0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e94, 0x0e95, 0x0e96, 0x0e97,
-  0xfffd, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f,
-  /* 0xc0 */
-  0xfffd, 0x0ea1, 0x0ea2, 0x0ea3, 0xfffd, 0x0ea5, 0xfffd, 0x0ea7,
-  0xfffd, 0xfffd, 0x0eaa, 0x0eab, 0xfffd, 0x0ead, 0x0eae, 0x0eaf,
-  /* 0xd0 */
-  0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7,
-  0x0eb8, 0x0eb9, 0xfffd, 0x0ebb, 0x0ebc, 0x0ebd, 0xfffd, 0xfffd,
-  /* 0xe0 */
-  0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0xfffd, 0x0ec6, 0xfffd,
-  0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0xfffd, 0xfffd,
-  /* 0xf0 */
-  0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
-  0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x0edc, 0x0edd, 0xfffd, 0xfffd,
-};
-
-static int
-mulelao_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0xa0) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else {
-    unsigned short wc = mulelao_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char mulelao_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0x80-0x87 */
-  0xa8, 0x00, 0xaa, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x90-0x97 */
-  0x00, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x98-0x9f */
-  0x00, 0xc1, 0xc2, 0xc3, 0x00, 0xc5, 0x00, 0xc7, /* 0xa0-0xa7 */
-  0x00, 0x00, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xa8-0xaf */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */
-  0xd8, 0xd9, 0x00, 0xdb, 0xdc, 0xdd, 0x00, 0x00, /* 0xb8-0xbf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x00, 0xe6, 0x00, /* 0xc0-0xc7 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0x00, /* 0xc8-0xcf */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */
-  0xf8, 0xf9, 0x00, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */
-};
-
-static int
-mulelao_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x00a0) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc == 0x00a0)
-    c = 0xa0;
-  else if (wc >= 0x0e80 && wc < 0x0ee0)
-    c = mulelao_page0e[wc-0x0e80];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/tatar_cyr.h
+++ /dev/null
@@ -1,123 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tatar_cyr.h,v 1.3 2000/12/04 18:49:42 dawes Exp $ */
-
-/*
- * TATAR-CYR
- */
-
-static const unsigned short tatar_cyr_2uni[128] = {
-  /* 0x80 */
-  0x04d8, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
-  0x20ac, 0x2030, 0x04e8, 0x2039, 0x04ae, 0x0496, 0x04a2, 0x04ba,
-  /* 0x90 */
-  0x04d9, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
-    0x98, 0x2122, 0x04e9, 0x203a, 0x04af, 0x0497, 0x04a3, 0x04bb,
-  /* 0xa0 */
-  0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7,
-  0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407,
-  /* 0xb0 */
-  0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7,
-  0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457,
-  /* 0xc0 */
-  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
-  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
-  /* 0xd0 */
-  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
-  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
-  /* 0xe0 */
-  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
-  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
-  /* 0xf0 */
-  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
-  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
-};
-
-static int
-tatar_cyr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) tatar_cyr_2uni[c-0x80];
-  return 1;
-}
-
-static const unsigned char tatar_cyr_page00[32] = {
-  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
-  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
-  0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-};
-static const unsigned char tatar_cyr_page04[240] = {
-  0x00, 0xa8, 0x00, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */
-  0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, /* 0x08-0x0f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
-  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
-  0x00, 0xb8, 0x00, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */
-  0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x9d, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x9c, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x8f, 0x9f, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
-};
-static const unsigned char tatar_cyr_page20[48] = {
-  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
-  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-};
-static const unsigned char tatar_cyr_page21[24] = {
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char tatar_cyr_page22[1] = {
-                                      0xb0,       /* 0x16-0x16 */
-};
-
-static int
-tatar_cyr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x00bc)
-    c = tatar_cyr_page00[wc-0x00a0];
-  else if (wc >= 0x0400 && wc < 0x04ef)
-    c = tatar_cyr_page04[wc-0x0400];
-  else if (wc >= 0x2010 && wc < 0x203b)
-    c = tatar_cyr_page20[wc-0x2010];
-  else if (wc == 0x20ac)
-    c = 0x88;
-  else if (wc >= 0x2110 && wc < 0x2123)
-    c = tatar_cyr_page21[wc-0x2110];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/tcvn.h
+++ /dev/null
@@ -1,134 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tcvn.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * TCVN-5712
- */
-
-static const unsigned short tcvn_2uni_1[32] = {
-  /* 0x00 */
-  0x0000, 0x00da, 0x1ee4, 0x0003, 0x1eea, 0x1eec, 0x1eee, 0x0007,
-  0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
-  /* 0x10 */
-  0x0010, 0x1ee8, 0x1ef0, 0x1ef2, 0x1ef6, 0x1ef8, 0x00dd, 0x1ef4,
-  0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
-};
-static const unsigned short tcvn_2uni_2[128] = {
-  /* 0x80 */
-  0x00c0, 0x1ea2, 0x00c3, 0x00c1, 0x1ea0, 0x1eb6, 0x1eac, 0x00c8,
-  0x1eba, 0x1ebc, 0x00c9, 0x1eb8, 0x1ec6, 0x00cc, 0x1ec8, 0x0128,
-  /* 0x90 */
-  0x00cd, 0x1eca, 0x00d2, 0x1ece, 0x00d5, 0x00d3, 0x1ecc, 0x1ed8,
-  0x1edc, 0x1ede, 0x1ee0, 0x1eda, 0x1ee2, 0x00d9, 0x1ee6, 0x0168,
-  /* 0xa0 */
-  0x00a0, 0x0102, 0x00c2, 0x00ca, 0x00d4, 0x01a0, 0x01af, 0x0110,
-  0x0103, 0x00e2, 0x00ea, 0x00f4, 0x01a1, 0x01b0, 0x0111, 0x1eb0,
-  /* 0xb0 */
-  0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0x00e0, 0x1ea3, 0x00e3,
-  0x00e1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4,
-  /* 0xc0 */
-  0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7,
-  0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0x00e8, 0x1ec2, 0x1ebb, 0x1ebd,
-  /* 0xd0 */
-  0x00e9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0x00ec,
-  0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0x00ed, 0x1ecb, 0x00f2,
-  /* 0xe0 */
-  0x1ed4, 0x1ecf, 0x00f5, 0x00f3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7,
-  0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0x00f9,
-  /* 0xf0 */
-  0x1ed6, 0x1ee7, 0x0169, 0x00fa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef,
-  0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0x00fd, 0x1ef5, 0x1ed0,
-};
-
-static int
-tcvn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x20)
-    *pwc = (ucs4_t) tcvn_2uni_1[c];
-  else if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) tcvn_2uni_2[c-0x80];
-  return 1;
-}
-
-static const unsigned char tcvn_page00[96+184] = {
-  0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
-  0x80, 0x83, 0xa2, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0x87, 0x8a, 0xa3, 0x00, 0x8d, 0x90, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0x92, 0x95, 0xa4, 0x94, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0x9d, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, /* 0xd8-0xdf */
-  0xb5, 0xb8, 0xa9, 0xb7, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0xcc, 0xd0, 0xaa, 0x00, 0xd7, 0xdd, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0xdf, 0xe3, 0xab, 0xe2, 0x00, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xef, 0xf3, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xa1, 0xa8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xa7, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0x8f, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x9f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0xa5, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, /* 0xa8-0xaf */
-  0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-};
-static const unsigned char tcvn_page03[40] = {
-  0xb0, 0xb3, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-};
-static const unsigned char tcvn_page1e[96] = {
-  0x84, 0xb9, 0x81, 0xb6, 0xc4, 0xca, 0xc1, 0xc7, /* 0xa0-0xa7 */
-  0xc2, 0xc8, 0xc3, 0xc9, 0x86, 0xcb, 0xc0, 0xbe, /* 0xa8-0xaf */
-  0xaf, 0xbb, 0xba, 0xbc, 0xbf, 0xbd, 0x85, 0xc6, /* 0xb0-0xb7 */
-  0x8b, 0xd1, 0x88, 0xce, 0x89, 0xcf, 0xda, 0xd5, /* 0xb8-0xbf */
-  0xc5, 0xd2, 0xcd, 0xd3, 0xd9, 0xd4, 0x8c, 0xd6, /* 0xc0-0xc7 */
-  0x8e, 0xd8, 0x91, 0xde, 0x96, 0xe4, 0x93, 0xe1, /* 0xc8-0xcf */
-  0xff, 0xe8, 0xdb, 0xe5, 0xe0, 0xe6, 0xf0, 0xe7, /* 0xd0-0xd7 */
-  0x97, 0xe9, 0x9b, 0xed, 0x98, 0xea, 0x99, 0xeb, /* 0xd8-0xdf */
-  0x9a, 0xec, 0x9c, 0xee, 0x02, 0xf4, 0x9e, 0xf1, /* 0xe0-0xe7 */
-  0x11, 0xf8, 0x04, 0xf5, 0x05, 0xf6, 0x06, 0xf7, /* 0xe8-0xef */
-  0x12, 0xf9, 0x13, 0xfa, 0x17, 0xfe, 0x14, 0xfb, /* 0xf0-0xf7 */
-  0x15, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-
-static int
-tcvn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 && (wc >= 0x0020 || (0x00fe0076 & (1 << wc)) == 0)) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00a0 && wc < 0x01b8)
-    c = tcvn_page00[wc-0x00a0];
-  else if (wc >= 0x0300 && wc < 0x0328)
-    c = tcvn_page03[wc-0x0300];
-  else if (wc >= 0x1ea0 && wc < 0x1f00)
-    c = tcvn_page1e[wc-0x1ea0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/tis620.h
+++ /dev/null
@@ -1,78 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/tis620.h,v 1.4 2001/02/09 00:02:54 dawes Exp $ */
-
-/*
- * TIS620-0
- */
-
-static const unsigned short tis620_2uni[96] = {
-  /* 0xa0 */
-  0xfffd, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
-  0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
-  /* 0xb0 */
-  0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
-  0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
-  /* 0xc0 */
-  0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
-  0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
-  /* 0xd0 */
-  0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
-  0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f,
-  /* 0xe0 */
-  0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
-  0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
-  /* 0xf0 */
-  0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
-  0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
-};
-
-static int
-tis620_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x80) {
-    *pwc = (ucs4_t) c;
-    return 1;
-  }
-  else if (c < 0xa0) {
-  }
-  else {
-    unsigned short wc = tis620_2uni[c-0xa0];
-    if (wc != 0xfffd) {
-      *pwc = (ucs4_t) wc;
-      return 1;
-    }
-  }
-  return RET_ILSEQ;
-}
-
-static const unsigned char tis620_page0e[96] = {
-  0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
-  0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */
-  0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
-  0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
-  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
-  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
-  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
-  0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */
-  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
-  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
-  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
-  0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-};
-
-static int
-tis620_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x0e00 && wc < 0x0e60)
-    c = tis620_page0e[wc-0x0e00];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/ucs2be.h
+++ /dev/null
@@ -1,32 +1,0 @@
-/*
- * UCS-2BE = UCS-2 big endian
- */
-/* $XFree86: xc/lib/X11/lcUniConv/ucs2be.h,v 1.1 2000/11/28 17:25:09 dawes Exp $ */
-
-static int
-ucs2be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  if (n >= 2) {
-    if (s[0] >= 0xd8 && s[0] < 0xe0) {
-      return RET_ILSEQ;
-    } else {
-      *pwc = (s[0] << 8) + s[1];
-      return 2;
-    }
-  }
-  return RET_TOOFEW(0);
-}
-
-static int
-ucs2be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) {
-    if (n >= 2) {
-      r[0] = (unsigned char) (wc >> 8);
-      r[1] = (unsigned char) wc;
-      return 2;
-    } else
-      return RET_TOOSMALL;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/utf8.h
+++ /dev/null
@@ -1,110 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/utf8.h,v 1.3 2000/11/28 18:50:07 dawes Exp $ */
-
-/*
- * UTF-8
- */
-
-/* Specification: RFC 2279 */
-
-static int
-utf8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = s[0];
-
-  if (c < 0x80) {
-    *pwc = c;
-    return 1;
-  } else if (c < 0xc2) {
-    return RET_ILSEQ;
-  } else if (c < 0xe0) {
-    if (n < 2)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x1f) << 6)
-           | (ucs4_t) (s[1] ^ 0x80);
-    return 2;
-  } else if (c < 0xf0) {
-    if (n < 3)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (c >= 0xe1 || s[1] >= 0xa0)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x0f) << 12)
-           | ((ucs4_t) (s[1] ^ 0x80) << 6)
-           | (ucs4_t) (s[2] ^ 0x80);
-    return 3;
-  } else if (c < 0xf8) {
-    if (n < 4)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40
-          && (c >= 0xf1 || s[1] >= 0x90)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x07) << 18)
-           | ((ucs4_t) (s[1] ^ 0x80) << 12)
-           | ((ucs4_t) (s[2] ^ 0x80) << 6)
-           | (ucs4_t) (s[3] ^ 0x80);
-    return 4;
-  } else if (c < 0xfc) {
-    if (n < 5)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-          && (c >= 0xf9 || s[1] >= 0x88)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x03) << 24)
-           | ((ucs4_t) (s[1] ^ 0x80) << 18)
-           | ((ucs4_t) (s[2] ^ 0x80) << 12)
-           | ((ucs4_t) (s[3] ^ 0x80) << 6)
-           | (ucs4_t) (s[4] ^ 0x80);
-    return 5;
-  } else if (c < 0xfe) {
-    if (n < 6)
-      return RET_TOOFEW(0);
-    if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40
-          && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40
-          && (s[5] ^ 0x80) < 0x40
-          && (c >= 0xfd || s[1] >= 0x84)))
-      return RET_ILSEQ;
-    *pwc = ((ucs4_t) (c & 0x01) << 30)
-           | ((ucs4_t) (s[1] ^ 0x80) << 24)
-           | ((ucs4_t) (s[2] ^ 0x80) << 18)
-           | ((ucs4_t) (s[3] ^ 0x80) << 12)
-           | ((ucs4_t) (s[4] ^ 0x80) << 6)
-           | (ucs4_t) (s[5] ^ 0x80);
-    return 6;
-  } else
-    return RET_ILSEQ;
-}
-
-static int
-utf8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) /* n == 0 is acceptable */
-{
-  int count;
-  if (wc < 0x80)
-    count = 1;
-  else if (wc < 0x800)
-    count = 2;
-  else if (wc < 0x10000)
-    count = 3;
-  else if (wc < 0x200000)
-    count = 4;
-  else if (wc < 0x4000000)
-    count = 5;
-  else if (wc <= 0x7fffffff)
-    count = 6;
-  else
-    return RET_ILSEQ;
-  if (n < count)
-    return RET_TOOSMALL;
-  switch (count) { /* note: code falls through cases! */
-    case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000;
-    case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000;
-    case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000;
-    case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800;
-    case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0;
-    case 1: r[0] = wc;
-  }
-  return count;
-}
--- a/DoConfig/fltk/src/xutf8/lcUniConv/viscii.h
+++ /dev/null
@@ -1,123 +1,0 @@
-/* $XFree86: xc/lib/X11/lcUniConv/viscii.h,v 1.3 2000/11/29 17:40:35 dawes Exp $ */
-
-/*
- * VISCII1.1-1
- */
-
-/* Specification: RFC 1456 */
-
-static const unsigned short viscii_2uni_1[32] = {
-  /* 0x00 */
-  0x0000, 0x0001, 0x1eb2, 0x0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007,
-  0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
-  /* 0x10 */
-  0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017,
-  0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f,
-};
-static const unsigned short viscii_2uni_2[128] = {
-  /* 0x80 */
-  0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eac,
-  0x1ebc, 0x1eb8, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ed0,
-  /* 0x90 */
-  0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1ee2, 0x1eda, 0x1edc, 0x1ede,
-  0x1eca, 0x1ece, 0x1ecc, 0x1ec8, 0x1ee6, 0x0168, 0x1ee4, 0x1ef2,
-  /* 0xa0 */
-  0x00d5, 0x1eaf, 0x1eb1, 0x1eb7, 0x1ea5, 0x1ea7, 0x1ea9, 0x1ead,
-  0x1ebd, 0x1eb9, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ed1,
-  /* 0xb0 */
-  0x1ed3, 0x1ed5, 0x1ed7, 0x1ee0, 0x01a0, 0x1ed9, 0x1edd, 0x1edf,
-  0x1ecb, 0x1ef0, 0x1ee8, 0x1eea, 0x1eec, 0x01a1, 0x1edb, 0x01af,
-  /* 0xc0 */
-  0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x1ea2, 0x0102, 0x1eb3, 0x1eb5,
-  0x00c8, 0x00c9, 0x00ca, 0x1eba, 0x00cc, 0x00cd, 0x0128, 0x1ef3,
-  /* 0xd0 */
-  0x0110, 0x1ee9, 0x00d2, 0x00d3, 0x00d4, 0x1ea1, 0x1ef7, 0x1eeb,
-  0x1eed, 0x00d9, 0x00da, 0x1ef9, 0x1ef5, 0x00dd, 0x1ee1, 0x01b0,
-  /* 0xe0 */
-  0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x1ea3, 0x0103, 0x1eef, 0x1eab,
-  0x00e8, 0x00e9, 0x00ea, 0x1ebb, 0x00ec, 0x00ed, 0x0129, 0x1ec9,
-  /* 0xf0 */
-  0x0111, 0x1ef1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x1ecf, 0x1ecd,
-  0x1ee5, 0x00f9, 0x00fa, 0x0169, 0x1ee7, 0x00fd, 0x1ee3, 0x1eee,
-};
-
-static int
-viscii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
-{
-  unsigned char c = *s;
-  if (c < 0x20)
-    *pwc = (ucs4_t) viscii_2uni_1[c];
-  else if (c < 0x80)
-    *pwc = (ucs4_t) c;
-  else
-    *pwc = (ucs4_t) viscii_2uni_2[c-0x80];
-  return 1;
-}
-
-static const unsigned char viscii_page00[64+184] = {
-  0xc0, 0xc1, 0xc2, 0xc3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
-  0xc8, 0xc9, 0xca, 0x00, 0xcc, 0xcd, 0x00, 0x00, /* 0xc8-0xcf */
-  0x00, 0x00, 0xd2, 0xd3, 0xd4, 0xa0, 0x00, 0x00, /* 0xd0-0xd7 */
-  0x00, 0xd9, 0xda, 0x00, 0x00, 0xdd, 0x00, 0x00, /* 0xd8-0xdf */
-  0xe0, 0xe1, 0xe2, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
-  0xe8, 0xe9, 0xea, 0x00, 0xec, 0xed, 0x00, 0x00, /* 0xe8-0xef */
-  0x00, 0x00, 0xf2, 0xf3, 0xf4, 0xf5, 0x00, 0x00, /* 0xf0-0xf7 */
-  0x00, 0xf9, 0xfa, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */
-  /* 0x0100 */
-  0x00, 0x00, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
-  0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
-  0xce, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
-  0x9d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
-  0xb4, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xa8-0xaf */
-  0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
-};
-static const unsigned char viscii_page1e[96] = {
-  0x80, 0xd5, 0xc4, 0xe4, 0x84, 0xa4, 0x85, 0xa5, /* 0xa0-0xa7 */
-  0x86, 0xa6, 0x06, 0xe7, 0x87, 0xa7, 0x81, 0xa1, /* 0xa8-0xaf */
-  0x82, 0xa2, 0x02, 0xc6, 0x05, 0xc7, 0x83, 0xa3, /* 0xb0-0xb7 */
-  0x89, 0xa9, 0xcb, 0xeb, 0x88, 0xa8, 0x8a, 0xaa, /* 0xb8-0xbf */
-  0x8b, 0xab, 0x8c, 0xac, 0x8d, 0xad, 0x8e, 0xae, /* 0xc0-0xc7 */
-  0x9b, 0xef, 0x98, 0xb8, 0x9a, 0xf7, 0x99, 0xf6, /* 0xc8-0xcf */
-  0x8f, 0xaf, 0x90, 0xb0, 0x91, 0xb1, 0x92, 0xb2, /* 0xd0-0xd7 */
-  0x93, 0xb5, 0x95, 0xbe, 0x96, 0xb6, 0x97, 0xb7, /* 0xd8-0xdf */
-  0xb3, 0xde, 0x94, 0xfe, 0x9e, 0xf8, 0x9c, 0xfc, /* 0xe0-0xe7 */
-  0xba, 0xd1, 0xbb, 0xd7, 0xbc, 0xd8, 0xff, 0xe6, /* 0xe8-0xef */
-  0xb9, 0xf1, 0x9f, 0xcf, 0x1e, 0xdc, 0x14, 0xd6, /* 0xf0-0xf7 */
-  0x19, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
-};
-
-static int
-viscii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
-{
-  unsigned char c = 0;
-  if (wc < 0x0080 && (wc >= 0x0020 || (0x42100064 & (1 << wc)) == 0)) {
-    *r = wc;
-    return 1;
-  }
-  else if (wc >= 0x00c0 && wc < 0x01b8)
-    c = viscii_page00[wc-0x00c0];
-  else if (wc >= 0x1ea0 && wc < 0x1f00)
-    c = viscii_page1e[wc-0x1ea0];
-  if (c != 0) {
-    *r = c;
-    return 1;
-  }
-  return RET_ILSEQ;
-}
--- a/DoConfig/fltk/src/xutf8/mk_wcwidth.c
+++ /dev/null
@@ -1,353 +1,0 @@
-/*
- * FLTK: Important!
- * This file should remain as close to Markus Kuhn's original source
- * as possible for easy checking for changes later, however unlikely.
- * All customisations to work with FLTK shall be annotated!
- */
-
-/*
- * This is an implementation of wcwidth() and wcswidth() (defined in
- * IEEE Std 1002.1-2001) for Unicode.
- *
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html
- * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html
- *
- * In fixed-width output devices, Latin characters all occupy a single
- * "cell" position of equal width, whereas ideographic CJK characters
- * occupy two such cells. Interoperability between terminal-line
- * applications and (teletype-style) character terminals using the
- * UTF-8 encoding requires agreement on which character should advance
- * the cursor by how many cell positions. No established formal
- * standards exist at present on which Unicode character shall occupy
- * how many cell positions on character terminals. These routines are
- * a first attempt of defining such behavior based on simple rules
- * applied to data provided by the Unicode Consortium.
- *
- * For some graphical characters, the Unicode standard explicitly
- * defines a character-cell width via the definition of the East Asian
- * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes.
- * In all these cases, there is no ambiguity about which width a
- * terminal shall use. For characters in the East Asian Ambiguous (A)
- * class, the width choice depends purely on a preference of backward
- * compatibility with either historic CJK or Western practice.
- * Choosing single-width for these characters is easy to justify as
- * the appropriate long-term solution, as the CJK practice of
- * displaying these characters as double-width comes from historic
- * implementation simplicity (8-bit encoded characters were displayed
- * single-width and 16-bit ones double-width, even for Greek,
- * Cyrillic, etc.) and not any typographic considerations.
- *
- * Much less clear is the choice of width for the Not East Asian
- * (Neutral) class. Existing practice does not dictate a width for any
- * of these characters. It would nevertheless make sense
- * typographically to allocate two character cells to characters such
- * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be
- * represented adequately with a single-width glyph. The following
- * routines at present merely assign a single-cell width to all
- * neutral characters, in the interest of simplicity. This is not
- * entirely satisfactory and should be reconsidered before
- * establishing a formal standard in this area. At the moment, the
- * decision which Not East Asian (Neutral) characters should be
- * represented by double-width glyphs cannot yet be answered by
- * applying a simple rule from the Unicode database content. Setting
- * up a proper standard for the behavior of UTF-8 character terminals
- * will require a careful analysis not only of each Unicode character,
- * but also of each presentation form, something the author of these
- * routines has avoided to do so far.
- *
- * http://www.unicode.org/unicode/reports/tr11/
- *
- * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
- *
- * Permission to use, copy, modify, and distribute this software
- * for any purpose and without fee is hereby granted. The author
- * disclaims all warranties with regard to this software.
- *
- * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
- */
-
-/*
- * FLTK - avoid possible problems on systems with 32-bit wchar_t.
- *        Don't include wchar.h, and change wchar_t to unsigned int.
- *        Can we guarantee sizeof(unsigned int) >= 4 ?
- */
-#if 0
-#include <wchar.h>
-#endif
-
-struct interval {
-  unsigned int first;
-  unsigned int last;
-};
-
-/* auxiliary function for binary search in interval table */
-/*
- * FLTK: was
-static int bisearch(wchar_t ucs, const struct interval *table, int max) {
- */
-static int bisearch(unsigned int ucs, const struct interval *table, int max) {
-  int min = 0;
-  int mid;
-
-  if (ucs < table[0].first || ucs > table[max].last)
-    return 0;
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (ucs > table[mid].last)
-      min = mid + 1;
-    else if (ucs < table[mid].first)
-      max = mid - 1;
-    else
-      return 1;
-  }
-
-  return 0;
-}
-
-
-/* The following two functions define the column width of an ISO 10646
- * character as follows:
- *
- *    - The null character (U+0000) has a column width of 0.
- *
- *    - Other C0/C1 control characters and DEL will lead to a return
- *      value of -1.
- *
- *    - Non-spacing and enclosing combining characters (general
- *      category code Mn or Me in the Unicode database) have a
- *      column width of 0.
- *
- *    - SOFT HYPHEN (U+00AD) has a column width of 1.
- *
- *    - Other format characters (general category code Cf in the Unicode
- *      database) and ZERO WIDTH SPACE (U+200B) have a column width of 0.
- *
- *    - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)
- *      have a column width of 0.
- *
- *    - Spacing characters in the East Asian Wide (W) or East Asian
- *      Full-width (F) category as defined in Unicode Technical
- *      Report #11 have a column width of 2.
- *
- *    - All remaining characters (including all printable
- *      ISO 8859-1 and WGL4 characters, Unicode control characters,
- *      etc.) have a column width of 1.
- *
- * This implementation assumes that wchar_t characters are encoded
- * in ISO 10646.
- */
-
-/*
- * FLTK: was
-int mk_wcwidth(wchar_t ucs)
- */
-int mk_wcwidth(unsigned int ucs)
-{
-  /* sorted list of non-overlapping intervals of non-spacing characters */
-  /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
-  static const struct interval combining[] = {
-    { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
-    { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 },
-    { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 },
-    { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 },
-    { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED },
-    { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A },
-    { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 },
-    { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D },
-    { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 },
-    { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD },
-    { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C },
-    { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D },
-    { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC },
-    { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD },
-    { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C },
-    { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D },
-    { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 },
-    { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 },
-    { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC },
-    { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD },
-    { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D },
-    { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
-    { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
-    { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC },
-    { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 },
-    { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E },
-    { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 },
-    { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 },
-    { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 },
-    { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F },
-    { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 },
-    { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD },
-    { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD },
-    { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 },
-    { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B },
-    { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 },
-    { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 },
-    { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF },
-    { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 },
-    { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F },
-    { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B },
-    { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F },
-    { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
-    { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F },
-    { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 },
-    { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD },
-    { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F },
-    { 0xE0100, 0xE01EF }
-  };
-
-  /* test for 8-bit control characters */
-  if (ucs == 0)
-    return 0;
-  if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0))
-    return -1;
-
-  /* binary search in table of non-spacing characters */
-  if (bisearch(ucs, combining,
-	       sizeof(combining) / sizeof(struct interval) - 1))
-    return 0;
-
-  /* if we arrive here, ucs is not a combining or C0/C1 control character */
-
-  return 1 + 
-    (ucs >= 0x1100 &&
-     (ucs <= 0x115f ||                    /* Hangul Jamo init. consonants */
-      ucs == 0x2329 || ucs == 0x232a ||
-      (ucs >= 0x2e80 && ucs <= 0xa4cf &&
-       ucs != 0x303f) ||                  /* CJK ... Yi */
-      (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
-      (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
-      (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
-      (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
-      (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
-      (ucs >= 0xffe0 && ucs <= 0xffe6) ||
-      (ucs >= 0x20000 && ucs <= 0x2fffd) ||
-      (ucs >= 0x30000 && ucs <= 0x3fffd)));
-}
-
-
-/*
- * FLTK: comment out the remaining functions, as we don't need themm.
- */
-#if 0
-
-/*
- * FLTK: was
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
- */
-int mk_wcswidth(const unsigned int *pwcs, size_t n)
-{
-  int w, width = 0;
-
-  for (;*pwcs && n-- > 0; pwcs++)
-    if ((w = mk_wcwidth(*pwcs)) < 0)
-      return -1;
-    else
-      width += w;
-
-  return width;
-}
-
-
-/*
- * The following functions are the same as mk_wcwidth() and
- * mk_wcswidth(), except that spacing characters in the East Asian
- * Ambiguous (A) category as defined in Unicode Technical Report #11
- * have a column width of 2. This variant might be useful for users of
- * CJK legacy encodings who want to migrate to UCS without changing
- * the traditional terminal character-width behaviour. It is not
- * otherwise recommended for general use.
- */
-/*
- * FLTK: was
-int mk_wcwidth_cjk(wchar_t ucs)
- */
-int mk_wcwidth_cjk(unsigned int ucs)
-{
-  /* sorted list of non-overlapping intervals of East Asian Ambiguous
-   * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
-  static const struct interval ambiguous[] = {
-    { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 },
-    { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 },
-    { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 },
-    { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 },
-    { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED },
-    { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA },
-    { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 },
-    { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B },
-    { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 },
-    { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 },
-    { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 },
-    { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE },
-    { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 },
-    { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA },
-    { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 },
-    { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB },
-    { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB },
-    { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 },
-    { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 },
-    { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 },
-    { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 },
-    { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 },
-    { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 },
-    { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 },
-    { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC },
-    { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 },
-    { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 },
-    { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 },
-    { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 },
-    { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 },
-    { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 },
-    { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B },
-    { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 },
-    { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 },
-    { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E },
-    { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 },
-    { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 },
-    { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F },
-    { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 },
-    { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF },
-    { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B },
-    { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 },
-    { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 },
-    { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 },
-    { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 },
-    { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 },
-    { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 },
-    { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 },
-    { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 },
-    { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F },
-    { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF },
-    { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD }
-  };
-
-  /* binary search in table of non-spacing characters */
-  if (bisearch(ucs, ambiguous,
-	       sizeof(ambiguous) / sizeof(struct interval) - 1))
-    return 2;
-
-  return mk_wcwidth(ucs);
-}
-
-
-/*
- * FLTK: was
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
- */
-int mk_wcswidth_cjk(const unsigned int *pwcs, size_t n)
-{
-  int w, width = 0;
-
-  for (;*pwcs && n-- > 0; pwcs++)
-    if ((w = mk_wcwidth_cjk(*pwcs)) < 0)
-      return -1;
-    else
-      width += w;
-
-  return width;
-}
-
-/*
- * FLTK: end of commented out functions
- */
-#endif
--- a/DoConfig/fltk/src/xutf8/test.c
+++ /dev/null
@@ -1,283 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- *   UTF-8 X test program (It contains MINIMAL code to support XIM !!!)
- *
- ****************
- * To test it do:
- ****************
-
-kinput2 -canna
-XMODIFIERS="@im=kinput2"; export XMODIFIERS
-LANG=ja_JP; export LANG
-./test
-
-	to open a conversion window press "Shift space"
-	type some keys.
-	press space.
-	select glyph with arrows keys.
-	press return.
-	press return.
-	press "Shift space" to close the window
-
-LANG=ar_AE; export LANG
-LANG=he_IL; export LANG
-export LANG=ja_JP; export XMODIFIERS="@im=kinput2"
-export LANG=ja_JP; export XMODIFIERS="@im=nicolatter"
-export LANG=ja_JP; export XMODIFIERS="@im=jmode"
-export LANG=ja_JP; export XMODIFIERS="@im=htt"
-export LANG=ko_KR; export XMODIFIERS="@im=Ami"
-export LANG=zh_TW; export XMODIFIERS="@im=xcin-zh_TW"
-export LANG=zh_TW; export XMODIFIERS="@im=xcin-zh_CN"
-export LANG=C; export XMODIFIERS="@im=interxim"
-**********************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <wchar.h>
-#include "Xutf8.h"
-#include <X11/Xlocale.h>
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Intrinsic.h>
-#include <X11/Xmd.h>
-
-char *jp_txt = "�  UTF-8 e\xCC\x82=\xC3\xAA"
-		"  \357\274\270\357\274\254\357\274\246\357\274"
-		"\244\345\220\215\343\201\247\346\214\207    \345\256\232"
-		"\343\201\231\343\202\213";
-
-char *rtl_txt = "->e\xCC\x82=\xC3\xAA";
-
-XIM xim_im = NULL;
-XIC xim_ic = NULL;
-static XIMStyles* xim_styles = NULL;
-XUtf8FontStruct *fontset;
-GC gc;
-int x = 2;
-int y = 40;
-
-int main(int argc, char**argv) {
-  char **missing_charset_list;
-  int missing_charset_count;
-  XGCValues xgcv;
-  unsigned long mask;
-  Display* dpy;
-  int scr;
-  Window w, root;
-  XSetWindowAttributes set_attr;
-  int i;
-  XIMStyle *style;
-  static char buf[128];
-  KeySym keysym = 0;
-  Status status;
-  XWMHints wm_hints;
-  XClassHint class_hints;
-  XIMStyle input_style = 0;
-  char **font_name_list;
-  char *def_string;
-  XFontStruct **font_struct_list;
-  char **font_encoding_list;
-  int nb_font;
-  int len = 0;
-  int no_xim = 0;
-
-  printf ("A -> %c \n", XUtf8Tolower('A'));
-  if (!setlocale(LC_ALL, ""))
-    puts("locale not supported by C library, locale unchanged");
-
-  if (!XSetLocaleModifiers(""))
-    puts("X locale modifiers not supported, using default");
-  
-  dpy = XOpenDisplay(0);
-  if (!dpy) { puts("cannot open display.\n"); exit(-1); }
-  scr = DefaultScreen(dpy);
-  root = RootWindow(dpy, scr);
-  set_attr.event_mask = KeyPressMask|FocusChangeMask;
-  set_attr.background_pixel = WhitePixel(dpy, DefaultScreen(dpy));
-  set_attr.border_pixel = BlackPixel(dpy, DefaultScreen(dpy));
-  w = XCreateWindow(dpy, root, 10,10,200,100,0, 
-		    DefaultDepth(dpy, DefaultScreen(dpy)),
-		    InputOutput, DefaultVisual(dpy, DefaultScreen(dpy)),
-		    CWEventMask | CWBackPixel | CWBorderPixel, &set_attr);
-  if (!w) {
-    puts("cannot creat window.\n");
-    exit(-1);
-  }
-
-  class_hints.res_name = "test";
-  class_hints.res_class = "Test";
-  wm_hints.input = True;
-  wm_hints.flags = InputHint;
-
-  XmbSetWMProperties(dpy, w, "test", "test", NULL, 0,
-		     NULL, &wm_hints, &class_hints);
-
-  XMapWindow(dpy, w);
-  xim_im = XOpenIM(dpy, NULL, "test", "Test");
-  if (!xim_im) { 
-    puts("cannot Open Input Manager: Try default.\n"); 
-    XSetLocaleModifiers("@im=");
-    xim_im = XOpenIM(dpy, NULL, "test", "Test");
-    if (!xim_im) {
-      puts("Failed exiting.\n");
-      exit(-1);
-    }
-  }
-  XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
-  for (i = 0, style = xim_styles->supported_styles;
-       i < xim_styles->count_styles; i++, style++) {
-    if (i == 0 && *style == (XIMStatusNone|XIMPreeditNone)) {
-      printf("this is not a XIM server !!!\n");
-      no_xim = 1;
-    }
-    printf("input style : 0x%X\n", *style);
-  }
-
-  xim_ic = XCreateIC(xim_im,
-		     XNInputStyle, 
-		     (XIMPreeditNothing | XIMStatusNothing),
-		     XNClientWindow, w,
-		     XNFocusWindow, w,
-		     NULL);
-  if (!xim_ic) {
-    puts("cannot create Input Context.\n");
-    exit(-1);
-  }
-  XFree(xim_styles);
-  XSetICFocus(xim_ic);
-
-  /***************************************************************
-   *  I don't recommend to use a font base name list similar 
-   *  to the following one in a real application ;-) 
-   *  You should use an iso8859-1 font, plus a single font for 
-   *  your language.
-   ***************************************************************/
-  fontset = XCreateUtf8FontStruct(dpy, 
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8858-3," /* not valid */
-	  "-*-*-medium-r-*-*-*-*-*-*-*-*-iso8859-1,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-6,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-8,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-ksc5601.1987-0,"
-	  "-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific," 
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-2,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-koi8-1,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0208.1983-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0212.1990-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-big5-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0201.1976-0,"
-	  "-*-unifont-*-*-*-*-*-*-*-*-*-*-iso10646-1[0x300 0x400_0x500],"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); 
-
-  /* THIS PART IS NOT REQUIERED */
-  nb_font = fontset->nb_font;
-
-  while (nb_font > 0) {
-    nb_font--;
-    if (fontset->fonts[nb_font]) {
-      printf("encoding=\"\" fid=%d \n  %s\n", 
-      /*     fontset->encodings[nb_font], */
-	     fontset->fonts[nb_font]->fid,
-	     fontset->font_name_list[nb_font]);
-    }
-  }
-  /* END OF NOT REQUIERED PART*/
-
-  mask = (GCForeground | GCBackground);
-  xgcv.foreground = BlackPixel(dpy, DefaultScreen(dpy));
-  xgcv.background = WhitePixel(dpy, DefaultScreen(dpy));
-
-  gc = XCreateGC(dpy, w, mask, &xgcv);
-  if (!gc) {
-    puts("cannot create Graphic Context.\n");
-    exit(-1);
-  }
-
-  /***************************************************************/
-  while (1) {
-    int filtered;
-    static XEvent xevent;
-    static XVaNestedList list1 = 0;
-    int r;
-
-    XNextEvent(dpy, &xevent);
-    if (xevent.type == KeyPress) {
-      XKeyEvent *e = (XKeyEvent*) &xevent;
-      printf ("0x%X %d\n", e->state, e->keycode);
-    }
-    if (xevent.type == DestroyNotify) {
-      /* XIM server has crashed */
-      no_xim = 1;
-      XSetLocaleModifiers("@im=");
-      xim_im = XOpenIM(dpy, NULL, "test", "Test");
-      if (xim_im) {
-	xim_ic = XCreateIC(xim_im,
-	                   XNInputStyle, (XIMPreeditNothing | XIMStatusNothing),
-			   XNClientWindow, w,
-			   XNFocusWindow, w,
-			   NULL);
-      } else {
-	xim_ic = NULL;
-      }
-      if (!xim_ic) {
-	puts("Crash recovery failed. exiting.\n");
-	exit(-1);
-      }
-    }
-    if (xevent.type != DestroyNotify) {
-      filtered = XFilterEvent(&xevent, 0);
-    }
-    if (xevent.type == FocusOut && xim_ic) XUnsetICFocus(xim_ic);
-    if (xevent.type == FocusIn && xim_ic) XSetICFocus(xim_ic);
-
-    if (xevent.type == KeyPress && !filtered) {
-      len = XUtf8LookupString(xim_ic, &xevent.xkey, 
-			      buf, 127, &keysym, &status);
-
-      if (len == 1 && buf[0] == '\b') {
-	x -= XUtf8TextWidth(fontset, buf, len);
-	XUtf8DrawImageString(dpy, w, fontset, gc, 
-			     x, y, buf, len);
-      } else if (len == 1 && buf[0] == '\r') {
-	y += fontset->ascent + fontset->descent;
-	x = 0;
-	XCloseIM(xim_im);
-      } else {
-	XUtf8DrawImageString(dpy, w, fontset, gc, x, y, buf, len);
-	x += XUtf8TextWidth(fontset, buf, len);
-      }
-
-      XUtf8DrawString(dpy, w, fontset, gc, 0, 20, jp_txt, strlen(jp_txt));
-      XUtf8DrawString(dpy, w, fontset, gc, 50, 90, rtl_txt, strlen(rtl_txt));
-      XUtf8DrawRtlString(dpy, w, fontset, gc, 50, 90, rtl_txt, strlen(rtl_txt));
-      buf[len] = 0;
-      printf("'%s' %d %x\n", buf, keysym, keysym);
-      buf[0] = 0;
-    }
-    if (filtered) {
-      printf("Dead key\n");
-    }
-  }
-  XFreeUtf8FontStruct(dpy, fontset);
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/test2.c
+++ /dev/null
@@ -1,214 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- *   UTF-8 X test program
- *
- *****************
- * To test it do :
- *****************
-
-kinput2 -canna
-XMODIFIERS="@im=kinput2"; export XMODIFIERS
-LANG=ja_JP; export LANG
-./test
-
-	to open a conversion window press "Shift space"
-	type some keys.
-	press space.
-	select glyph with arrows keys.
-	press return.
-	press return.
-	press "Shift space" to close the window
-
-LANG=ar_AE; export LANG
-LANG=he_IL; export LANG
-export LANG=ja_JP; export XMODIFIERS="@im=kinput2"
-export LANG=ja_JP; export XMODIFIERS="@im=nicolatter"
-export LANG=ja_JP; export XMODIFIERS="@im=jmode"
-export LANG=ja_JP; export XMODIFIERS="@im=htt"
-export LANG=ko_KR; export XMODIFIERS="@im=ami"
-export LANG=zh_TW; export XMODIFIERS="@im=xcin-zh_TW"
-export LANG=zh_TW; export XMODIFIERS="@im=xcin-zh_CN"
-export LANG=fr_FR.UTF-8; export XMODIFIERS="@im=interxim"
-
-export LD_PRELOAD="/usr/src/x11/xc/exports/lib/libX11.so /usr/src/x11/xc/exports/lib/libxlcDef.so.2 /usr/src/x11/xc/exports/lib/libxlibi18n.so.2 /usr/src/x11/xc/exports/lib/libxlocale.so.2 /usr/src/x11/xc/exports/lib/libxomGeneric.so.2 /usr/src/x11/xc/exports/lib/libximcp.so.2"
-
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <wchar.h>
-#include <X11/Xlocale.h>
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Intrinsic.h>
-#include <X11/Xmd.h>
-
-char *jp_txt = "�  UTF-8 e\xCC\x82=\xC3\xAA"
-	       "  \357\274\270\357\274\254\357\274\246\357\274"
-	       "\244\345\220\215\343\201\247\346\214\207    \345\256\232"
-	       "\343\201\231\343\202\213";
-
-char *rtl_txt = "->e\xCC\x82=\xC3\xAA";
-
-XIM xim_im = NULL;
-XIC xim_ic = NULL;
-static XIMStyles* xim_styles = NULL;
-XFontSet fontset;
-GC gc;
-int x = 2;
-int y = 40;
-
-int main(int argc, char**argv) {
-  char **missing_charset_list;
-  int missing_charset_count;
-  XGCValues xgcv;
-  unsigned long mask;
-  Display* dpy;
-  int scr;
-  Window w, root;
-  XSetWindowAttributes set_attr;
-  int i;
-  XIMStyle *style;
-  static char buf[128];
-  KeySym keysym = 0;
-  Status status;
-  XWMHints wm_hints;
-  XClassHint class_hints;
-  XIMStyle input_style = 0;
-  char **font_name_list;
-  char *def_string;
-  XFontStruct **font_struct_list;
-  char **font_encoding_list;
-  int nb_font;
-  int len = 0;
-  int no_xim = 0;
-  char **missing_charset_list_return;
-  int missing_charset_count_return;
-  char *def_string_return;
-  
-  if (!setlocale(LC_ALL, ""))
-    puts("locale not supported by C library, locale unchanged");
-
-  if (!XSetLocaleModifiers(""))
-    puts("X locale modifiers not supported, using default");
-  
-  dpy = XOpenDisplay(0);
-  scr = DefaultScreen(dpy);
-  root = RootWindow(dpy, scr);
-  set_attr.event_mask = KeyPressMask|FocusChangeMask;
-  set_attr.background_pixel = WhitePixel(dpy, DefaultScreen(dpy));
-  set_attr.border_pixel = BlackPixel(dpy, DefaultScreen(dpy));
-  w = XCreateWindow(dpy, root, 10,10,200,100,0, 
-		    DefaultDepth(dpy, DefaultScreen(dpy)),
-		    InputOutput, DefaultVisual(dpy, DefaultScreen(dpy)),
-		    CWEventMask | CWBackPixel | CWBorderPixel, &set_attr);
-
-  class_hints.res_name = "test";
-  class_hints.res_class = "Test";
-  wm_hints.input = True;
-  wm_hints.flags = InputHint;
-
-  XmbSetWMProperties(dpy, w, "test", "test", NULL, 0,
-		     NULL, &wm_hints, &class_hints);
-
-  XMapWindow(dpy, w);
-  xim_im = XOpenIM(dpy, NULL, "test", "Test");
-  XGetIMValues(xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
-  for (i = 0, style = xim_styles->supported_styles;
-       i < xim_styles->count_styles; i++, style++) {
-    if (*style == (XIMStatusNone|XIMPreeditNone)) {
-      printf("this is not a XIM server !!!\n");
-      no_xim = 1;
-    }
-    printf("input style : 0x%X\n", *style);
-  }
-  XFree(xim_styles);
-
-  xim_ic = XCreateIC(xim_im,
-		     XNInputStyle, (XIMPreeditNothing | XIMStatusNothing),
-		     XNClientWindow, w,
-		     XNFocusWindow, w,
-		     NULL);
-  XSetICFocus(xim_ic);
-
-  /***************************************************************
-   *  I don't recommend to use a font base name list similar 
-   *  to the following one in a real application ;-)
-   ***************************************************************/
-  fontset = XCreateFontSet(dpy, 
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8858-3," /* not valid */
-	  "-*-*-medium-r-*-*-*-*-*-*-*-*-iso8859-1,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-6,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-8,"
-	  "-*-symbol-*-*-*-*-*-*-*-*-*-*-adobe-fontspecific," 
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-2,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-koi8-1,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0208.1983-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0212.1990-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-big5-0,"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-jisx0201.1976-0,"
-	  "-*-unifont-*-*-*-*-*-*-*-*-*-*-iso10646-1[0x300 0x400_0x500],"
-	  "-*-*-*-*-*-*-*-*-*-*-*-*-*-*",
-	  &missing_charset_list_return,
-	  &missing_charset_count_return,
-	  &def_string_return); 
-  mask = (GCForeground | GCBackground);
-  xgcv.foreground = BlackPixel(dpy, DefaultScreen(dpy));
-  xgcv.background = WhitePixel(dpy, DefaultScreen(dpy));
-
-  gc = XCreateGC(dpy, w, mask, &xgcv);
-
-  /***************************************************************/
-  while (1) {
-    int filtered;
-    static XEvent xevent;
-    static XVaNestedList list1 = 0;
-    int r;
-
-    XNextEvent(dpy, &xevent);
-    if (xevent.type == KeyPress) {
-      XKeyEvent *e = (XKeyEvent*) &xevent;
-      printf ("0x%X %d\n", e->state, e->keycode);
-    }
-    filtered = XFilterEvent(&xevent, w);
-    if (xevent.type == FocusOut) XUnsetICFocus(xim_ic);
-    if (xevent.type == FocusIn) XSetICFocus(xim_ic);
-
-    if (xevent.type == KeyPress && !filtered) {
-      len = Xutf8LookupString(xim_ic, &xevent.xkey, buf, 127, &keysym, &status); 
-      Xutf8DrawImageString(dpy, w, fontset, gc, x, y, buf, len);
-      Xutf8DrawString(dpy, w, fontset, gc, 0, 20, jp_txt, strlen(jp_txt));
-      Xutf8DrawString(dpy, w, fontset, gc, 50, 90, rtl_txt, strlen(rtl_txt));
-      buf[len] = 0;
-      printf("'%s' %d\n", buf, keysym);
-      buf[0] = 0;
-      XCloseIM(xim_im);
-    }
-    if (filtered) {
-      printf("Dead key\n");
-    }
-  }
-  XFreeFontSet(dpy, fontset);
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/ucs2fontmap.c
+++ /dev/null
@@ -1,370 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#define RET_ILSEQ -1
-#define RET_TOOFEW(x) (-10 - x)
-#define RET_TOOSMALL -2
-#define conv_t void*
-#define ucs4_t unsigned int
-typedef struct {
-  unsigned short indx;
-  unsigned short used;
-} Summary16;
-
-#define NEED_TOMB /* indicates what part of these include files is needed here (avoid compilation warnings) */
-#include "lcUniConv/cp936ext.h"
-#include "lcUniConv/big5.h"
-#include "lcUniConv/gb2312.h"
-#include "lcUniConv/iso8859_10.h"
-#include "lcUniConv/iso8859_11.h"
-#include "lcUniConv/iso8859_13.h"
-#include "lcUniConv/iso8859_14.h"
-#include "lcUniConv/iso8859_15.h"
-#include "lcUniConv/iso8859_2.h"
-#include "lcUniConv/iso8859_3.h"
-#include "lcUniConv/iso8859_4.h"
-#include "lcUniConv/iso8859_5.h"
-#include "lcUniConv/iso8859_6.h"
-#include "lcUniConv/iso8859_7.h"
-#include "lcUniConv/iso8859_8.h"
-#include "lcUniConv/iso8859_9.h"
-#include "lcUniConv/jisx0201.h"
-#include "lcUniConv/jisx0208.h"
-#include "lcUniConv/jisx0212.h"
-#include "lcUniConv/koi8_r.h"
-#include "lcUniConv/koi8_u.h"
-#include "lcUniConv/ksc5601.h"
-#include "lcUniConv/cp1251.h"
-#include "headers/symbol_.h"
-#include "headers/dingbats_.h"
-  
-/*************** conv_gen.c ************/
-
-/*const*/
-static int ucs2fontmap(char *s, unsigned int ucs, int enc) {
-  switch(enc) {
-  case 0:	/* iso10646-1 */
-    s[0] = (char) ((ucs & 0xFF00) >> 8);
-    s[1] = (char) (ucs & 0xFF);
-    return 0;
-  case 1:	/* iso8859-1 */
-    if (ucs <= 0x00FF) {
-      if (ucs >= 0x0001) {
-        s[0] = 0;
-        s[1] = (char) (ucs & 0xFF);
-        return 1;
-      }
-    }
-    break;
-  case 2:	/* iso8859-2 */
-    if (ucs <= 0x00a0) {
-      s[0] = 0;
-      s[1] = (char) ucs;
-      return 2;
-    } else if (ucs < 0x0180) {
-      if (ucs >= 0x00a0) {
-	s[0] = 0;
-	s[1] = (char)  iso8859_2_page00[ucs-0x00a0];
-        if (s[1]) return 2;
-      }
-    } else if (ucs < 0x02e0) {
-      if (ucs >= 0x02c0) {
-        s[0] = 0;
-        s[1] = (char) iso8859_2_page02[ucs-0x02c0];
-        if (s[1]) return 2;
-      }	
-    }
-    break;
-  case 3:	/* iso8859-3 */
-    if (iso8859_3_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 3;
-    } 
-    break;
-  case 4:	/* iso8859-4 */
-    if (iso8859_4_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 4;
-    } 
-    break;
-  case 5:	/* iso8859-5 */
-    if (iso8859_5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 5;
-    } 
-    break;
-  case 6:	/* iso8859-6 */
-    if (iso8859_6_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 6;
-    } 
-    break;
-  case 7:	/* iso8859-7 */
-    if (iso8859_7_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 7;
-    } 
-    break;
-  case 8:	/* iso8859-8 */
-    if (iso8859_8_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 8;
-    } 
-    break;
-  case 9:	/* iso8859-9 */
-    if (iso8859_9_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 9;
-    } 
-    break;
-  case 10:	/* iso8859-10 */
-    if (iso8859_10_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 10;
-    } 
-    break;
-  case 25:	/* iso8859-11 */
-    if (iso8859_11_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 25;
-    } 
-    break;
-  case 11:	/* iso8859-13 */
-    if (iso8859_13_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 11;
-    } 
-    break;
-  case 12:	/* iso8859-14 */
-    if (iso8859_14_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 12;
-    } 
-    break;
-  case 13:	/* iso8859-15 */
-    if (iso8859_15_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 13;
-    } 
-    break;
-  case 14:	/* koi8-r */
-    if (koi8_r_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 14;
-    } 
-    break;
-  case 15:	/* big5 */
-    if (big5_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 15;
-    } 
-    break;
-  case 16:	/* ksc5601.1987-0 */
-    if (ksc5601_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 16;
-    } 
-    break;
-  case 17:	/* gb2312.1980-0 */
-    if (gb2312_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 17;
-    } 
-    break;
-  case 18:	/* jisx0201.1976-0 */
-    if (jisx0201_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 18;
-    } 
-    break;
-  case 19:	/* jisx0208.1983-0 */
-    if (jisx0208_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 19;
-    } 
-    break;
-  case 20:	/* jisx0212.1990-0 */
-    if (jisx0212_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 20;
-    } 
-    break;
-  case 21:	/* symbol */
-    if (ucs <= 0x00F7) {
-      if (ucs >= 0x0020) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0020[ucs - 0x0020];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x0192) {
-      if (ucs >= 0x0192) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0192[ucs - 0x0192];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x03D6) {
-      if (ucs >= 0x0391) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_0391[ucs - 0x0391];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x232A) {
-      if (ucs >= 0x2022) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_2022[ucs - 0x2022];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x25CA) {
-      if (ucs >= 0x25CA) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_25CA[ucs - 0x25CA];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0x2666) {
-      if (ucs >= 0x2660) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_2660[ucs - 0x2660];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0xF6DB) {
-      if (ucs >= 0xF6D9) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_F6D9[ucs - 0xF6D9];
-        if (s[1]) return 21;
-      }
-    } else if (ucs <= 0xF8FE) {
-      if (ucs >= 0xF8E5) {
-        s[0] = 0;
-        s[1] = unicode_to_symbol_1b_F8E5[ucs - 0xF8E5];
-        if (s[1]) return 21;
-      }
-    }
-    break;
-  case 22:	/* dingbats */
-    if (ucs <= 0x00A0) {
-      if (ucs >= 0x0020) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_0020[ucs - 0x0020];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2195) {
-      if (ucs >= 0x2192) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2192[ucs - 0x2192];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2469) {
-      if (ucs >= 0x2460) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2460[ucs - 0x2460];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x2666) {
-      if (ucs >= 0x25A0) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_25A0[ucs - 0x25A0];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0x27BE) {
-      if (ucs >= 0x2701) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_2701[ucs - 0x2701];
-        if (s[1]) return 22;
-      }
-    } else if (ucs <= 0xF8E4) {
-      if (ucs >= 0xF8D7) {
-        s[0] = 0;
-        s[1] = unicode_to_dingbats_1b_F8D7[ucs - 0xF8D7];
-        if (s[1]) return 22;
-      }
-    }
-    break;
-  case 23:	/* koi8-u */
-    if (koi8_u_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 23;
-    } 
-    break;
-  case 24:	/* microsoft-cp1251 */
-    if (cp1251_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 24;
-    } 
-    break;
-  case 26: /* gbk/cp936ext */
-    if (cp936ext_wctomb(NULL, (unsigned char*)s, ucs, 2) > 0) {
-      return 26;
-    }
-    break;
-  default:
-    break;
-  };
-  return -1;
-}
-
-/*const*/
-static int encoding_number(const char *enc) {
-  if (!enc || !strncmp(enc, "iso10646-1", 10)) {
-    return 0;
-  } else if (!strcmp(enc, "iso8859-1")) {
-    return 1;
-  } else if (!strcmp(enc, "iso8859-2")) {
-    return 2;
-  } else if (!strcmp(enc, "iso8859-3")) {
-    return 3;
-  } else if (!strcmp(enc, "iso8859-4")) {
-    return 4;
-  } else if (!strcmp(enc, "iso8859-5")) {
-    return 5;
-  } else if (!strcmp(enc, "iso8859-6")) {
-    return 6;
-  } else if (!strcmp(enc, "iso8859-7")) {
-    return 7;
-  } else if (!strcmp(enc, "iso8859-8")) {
-    return 8;
-  } else if (!strcmp(enc, "iso8859-9")) {
-    return 9;
-  } else if (!strcmp(enc, "iso8859-10")) {
-    return 10;
-  } else if (!strcmp(enc, "iso8859-13")) {
-    return 11;
-  } else if (!strcmp(enc, "iso8859-14")) {
-    return 12;
-  } else if (!strcmp(enc, "iso8859-15")) {
-    return 13;
-  } else if (!strcmp(enc, "koi8-r")) {
-    return 14;
-  } else if (!strcmp(enc, "big5-0") || !strcmp(enc, "big5.eten-0") ||
-    !strcmp(enc, "big5p-0")) 
-  {
-    return 15;
-  } else if (!strcmp(enc, "ksc5601.1987-0")) {
-    return 16;
-  } else if (!strcmp(enc, "gb2312.1980-0") || !strcmp(enc, "gb2312.80-0") || 
-     !strcmp(enc, "gb2312.80&gb8565.88") ||  !strcmp(enc, "gb2312.80-0")) 
-  {
-    return 17;
-  } else if (!strcmp(enc, "jisx0201.1976-0")) {
-    return 18;
-  } else if (!strcmp(enc, "jisx0208.1983-0") || !strcmp(enc, "jisx0208.1990-0")
-    || !strcmp(enc, "jisx0208.1978-0")) 
-  {
-    return 19;
-  } else if (!strcmp(enc, "jisx0212.1990-0")) {
-    return 20;
-  } else if (!strcmp(enc, "symbol")) {
-    return 21;
-  } else if (!strcmp(enc, "dingbats") || !strcmp(enc, "zapfdingbats") || 
-    !strcmp(enc, "zapf dingbats") || !strcmp(enc, "itc zapf dingbats")) 
-  {
-    return 22;
-  } else if (!strcmp(enc, "koi8-u")) {
-    return 23;
-  } else if (!strcmp(enc, "microsoft-cp1251")) {
-    return 24;
-  } else if (!strcmp(enc, "iso8859-11")) {
-    return 25;
-  } else if (!strcmp(enc, "gbk-0") || !strcmp(enc, "cp936") || !strcmp(enc, "gbk")) {
-    return 26;
-  };
-  return -1;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/ucs2fontmap.c.mini
+++ /dev/null
@@ -1,37 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-int ucs2fontmap(char *s, unsigned long ucs, int enc)
-{
-    s[0] = (char) ((ucs & 0xFF00) >> 8);
-    s[1] = (char) (ucs & 0xFF);
-    return 0;
-}
-
-
-int encoding_number(const char *enc)
-{
-  return 0;
-}
-
-const char *encoding_name(int num)
-{
-    return "iso10646-1";
-};
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utf8Input.c
+++ /dev/null
@@ -1,457 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include <config.h>
-#include "../Xutf8.h"
-#include <X11/X.h>
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef HAVE_LIBC_ICONV
-#include <iconv.h>
-#endif
-/*
-  I haven't found much doc on the web about EUC encodings, so I've used
-  GNU libiconv source code as a reference.
-  http://clisp.cons.org/~haible/packages-libiconv.html
-*/
-
-#define RET_ILSEQ -1
-#define RET_TOOFEW(x) (-10 - x)
-#define RET_TOOSMALL -2
-#define conv_t void*
-#define ucs4_t unsigned int
-typedef struct {
-  unsigned short indx;
-  unsigned short used;
-} Summary16;
-
-#ifndef X_HAVE_UTF8_STRING
-#define NEED_TOWC /* indicates what part of these include files is needed here (avoid compilation warnings) */
-#include "lcUniConv/big5.h"
-#include "lcUniConv/gb2312.h"
-#include "lcUniConv/cp936ext.h"
-#include "lcUniConv/jisx0201.h"
-#include "lcUniConv/jisx0208.h"
-#include "lcUniConv/jisx0212.h"
-#include "lcUniConv/ksc5601.h"
-
-static int
-XConvertEucTwToUtf8(char* buffer_return, int len) {
-  /* FIXME */
-#ifdef HAVE_LIBC_ICONV
-  iconv_t cd;
-  int cdl;
-#else
-  int i = 0;
-#endif
-  int l = 0;
-  char *buf; /* , *b; */
-
-  if (len < 1) return 0;
-  /*b = */ buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned) len);
-
-#ifdef HAVE_LIBC_ICONV
-  l = cdl = len;
-  cd = iconv_open("EUC-TW", "UTF-8");
-  iconv(cd, &b, &len, &buffer_return, &cdl);
-  iconv_close(cd);
-  l -= cdl;	
-#else
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c; 
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xa1 && c < 0xff && len - i > 1 ) {
-
-#if 0 
-      unsigned char b[2];
-      b[0] = (unsigned char) c - 0x80;
-      b[1] = (unsigned char) buf[i + 1] - 0x80;
-#endif
-      ucs = ' '; i += 2;
-    } else if (c == 0x8e &&  len - i > 3) {
-      unsigned char c1 =  buf[i + 1];
-      unsigned char c2 =  buf[i + 2];
-      unsigned char c3 =  buf[i + 3];
-#if 0
-      unsigned char b[2];
-      b[0] = (unsigned char)  buf[i + 2] - 0x80;
-      b[1] = (unsigned char)  buf[i + 3] - 0x80;
-#endif
-      if (c1 >= 0xa1 && c1 <= 0xb0) {
-	if (c2 >= 0xa1 && c2 < 0xff && c3 >= 0xa1 && c3 < 0xff) {
-	  ucs = ' '; i += 4;
-	} else {
-	  ucs = '?'; i++;
-	}
-      } else {
-	ucs = '?'; i++;
-      }
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-#endif
-  free(buf);
-  return l;
-}
-
-static int
-XConvertEucKrToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];
-      if (c1 >= 0xa1 && c1 < 0xff) {
-	unsigned char b[2];
-	b[0] = c - 0x80;
-	b[1] = c1 - 0x80;
-	if (ksc5601_mbtowc(NULL, &ucs, b, 2) < 1) {
-	  ucs = '?';
-	}
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertBig5ToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-    unsigned int ucs;
-    unsigned char b[2];
-    b[0] = (unsigned char) buf[i];
-    b[1] = (unsigned char) buf[i + 1];
-    if (big5_mbtowc(NULL, &ucs, b, 2) == 2) {
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertCp936extToUtf8(char* buffer_return, int len)
-{
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-	  l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-	  unsigned int ucs;
-	  unsigned char b[2];
-	  b[0] = (unsigned char) buf[i];
-	  b[1] = (unsigned char) buf[i + 1];
-	  if (cp936ext_mbtowc(NULL, &ucs, b, 2) == 2) {
-		  i += 2;
-	  } else {
-	      if ( b[0] < 0x80) {
-		    ucs = b[0];
-		}else{
-			      ucs = '?';
-		  }
-			  i++;
-		  }
-	  l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  if(i + 1 == len) { 
-      l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertGb2312ToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  if (len == 1) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  while (i + 1 < len) {
-    unsigned int ucs;
-    unsigned char b[2];
-    b[0] = (unsigned char) buf[i];
-    b[1] = (unsigned char) buf[i + 1];
-    if ( b[0] < 0x80 ) {
-      ucs = b[0];
-      i++;
-    } else if (gb2312_mbtowc(NULL, &ucs, b, 2) == 2) {
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  if (i + 1 == len) {
-    l += XConvertUcsToUtf8((unsigned int)buf[i], buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertEucCnToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];
-      if (c1 >= 0xa1 && c1 < 0xff) {	
-	unsigned char b[2];
-	b[0] = (unsigned char) c;
-	b[1] = (unsigned char) c1;
-	if (gb2312_mbtowc(NULL, &ucs, b, 2) < 1) {
-	  ucs = '?';
-	}	
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertEucJpToUtf8(char* buffer_return, int len) {
-  int i = 0, l = 0;
-  char *buf;
-
-  if (len < 1) return 0;
-  buf = (char*) malloc((unsigned)len);
-  memcpy(buf, buffer_return, (unsigned)len);
-
-  while (i < len) {
-    unsigned int ucs;
-    unsigned char c, c1;
-    c = (unsigned char) buf[i];
-    if (c < 0x80) {
-      ucs = c;	
-      i++;
-    } else if (c >= 0xA1 && c < 0xFF && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];		
-      if (c < 0xF5 && c1 >= 0xa1) {
-	unsigned char b[2];
-	b[0] = c - 0x80;
-	b[1] = c1 - 0x80;
-	if (jisx0208_mbtowc(NULL, &ucs, b, 2) < 1) { 
-	  ucs = '?';
-	}
-      } else if (c1 >= 0xA1 && c1 < 0xFF) {
-	ucs = 0xE000 + 94 * (c - 0xF5) + (c1 - 0xA1);
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else if (c == 0x8E && len - i > 1) {
-      c1 = (unsigned char) buf[i + 1];		
-      if (c1 >= 0xa1 && c1 <= 0xe0) {
-	if (jisx0201_mbtowc(NULL, &ucs, &c1, 1) != 1) {
-	  ucs = '?';
-	}
-      } else {
-	ucs = '?';
-      }
-      i += 2;
-    } else if (c == 0x8F && len - i > 2) {
-      c = (unsigned char) buf[i + 1];		
-      c1 = (unsigned char) buf[i + 2];	
-      if (c >= 0xa1 && c < 0xff) {
-	if (c < 0xf5 && c1 >= 0xa1 && c1 < 0xff) {
-	  unsigned char b[2];
-	  b[0] = c - 0x80;
-	  b[1] = c1 - 0x80;
-	  if (jisx0212_mbtowc(NULL, &ucs, b, 2) < 1) {
-	    ucs = '?';
-	  }
-	} else {
-	  ucs = '?';
-	}
-      } else {
-	if (c1 >= 0xa1 && c1 < 0xff) {
-	  ucs = 0xe3ac + 94 * (c - 0xF5) + (c1 - 0xA1);
-	} else {
-	  ucs = '?';
-	}
-      }
-      i += 3;
-    } else {
-      ucs = '?';
-      i++;
-    }
-    l += XConvertUcsToUtf8(ucs, buffer_return + l);
-  }
-  free(buf);
-  return l;
-}
-
-static int
-XConvertEucToUtf8(const char*	locale,
-		  char*		buffer_return, 
-		  int		len, 
-		  int		bytes_buffer) {
-
-  /* if (!locale) { */
-  /* if (!locale || strstr(locale, "UTF") || strstr(locale, "utf")) { */
-  if (!locale || strstr(locale, "UTF") || strstr(locale, "utf")) {
-    return len;
-  }
-
-  if (strstr(locale, "ja")) {	
-    return XConvertEucJpToUtf8(buffer_return, len);
-  } else if (strstr(locale, "Big5") || strstr(locale, "big5")) { /* BIG5 */
-    return XConvertBig5ToUtf8(buffer_return, len);
-  } else if (strstr(locale, "GBK") || strstr(locale, "gbk")) {
-    return XConvertCp936extToUtf8(buffer_return, len);
-  } else if (strstr(locale, "zh") || strstr(locale, "chinese-")) {
-    if (strstr(locale, "TW") || strstr(locale, "chinese-t")) {
-      if (strstr(locale, "EUC") || strstr(locale, "euc") || strstr(locale, "chinese-t")) {
-	return XConvertEucTwToUtf8(buffer_return, len);
-      }
-      return XConvertBig5ToUtf8(buffer_return, len);
-    }
-    if (strstr(locale, "EUC") || strstr(locale, "euc")) {
-      return XConvertEucCnToUtf8(buffer_return, len);
-    }
-    return XConvertGb2312ToUtf8(buffer_return, len);
-  } else if (strstr(locale, "ko")) { 
-    return XConvertEucKrToUtf8(buffer_return, len);
-  }
-  return len;
-}
-
-int
-XUtf8LookupString(XIC                 ic,
-		  XKeyPressedEvent*   event,
-		  char*               buffer_return,
-		  int                 bytes_buffer,
-		  KeySym*             keysym,
-		  Status*             status_return) {
-
-  long ucs = -1;
-  int len;
-  len = XmbLookupString(ic, event, buffer_return, bytes_buffer / 5,
-		        keysym, status_return);
-  if (*status_return == XBufferOverflow) {
-    return len * 5;
-  }
-  if (*keysym > 0 && *keysym < 0x100 && len == 1) {
-    if (*keysym < 0x80) {
-      ucs = (unsigned char)buffer_return[0];
-    } else {
-      ucs = (long)*keysym;
-    }
-  } else  if (((*keysym >= 0x100 && *keysym <= 0xf000) ||
-	      (*keysym & 0xff000000U) == 0x01000000))
-  {
-    ucs = XKeysymToUcs(*keysym);
-  } else {
-    ucs = -2;
-  }
-
-  if (ucs > 0) {
-    len = XConvertUcsToUtf8((unsigned)ucs, (char *)buffer_return);
-  } else if (len > 0) {
-    XIM im;
-    if (!ic) return 0;
-    im = XIMOfIC(ic);
-    if (!im) return 0;
-    len = XConvertEucToUtf8(XLocaleOfIM(im), buffer_return, len, bytes_buffer);	
-  }
-  return len;
-}
-#endif /* X11 has utf-8 */
-
-#endif /* X11 only */
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utf8Utils.c
+++ /dev/null
@@ -1,229 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * Unicode to UTF-8 conversion functions.
- */
-
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../Xutf8.h"
-
-/*** NOTE : all functions are LIMITED to 24 bits Unicode values !!! ***/
-
-/* 
- * Converts the first char of the UTF-8 string to an Unicode value 
- * Returns the byte length of the converted UTF-8 char 
- * Returns -1 if the UTF-8 string is not valid 
- */
-int
-XConvertUtf8ToUcs(const unsigned char     *buf,
-		  int                     len,
-		  unsigned int         	  *ucs) {
-
-  if (buf[0] & 0x80) {
-    if (buf[0] & 0x40) {
-      if (buf[0] & 0x20) {
-	if (buf[0] & 0x10) {
-	  if (buf[0] & 0x08) {
-	    if (buf[0] & 0x04) {
-	      if (buf[0] & 0x02) {
-		/* bad UTF-8 string */
-	      } else {
-		/* 0x04000000 - 0x7FFFFFFF */
-	      }	
-	    } else if (len > 4 
-		       && (buf[1] & 0xC0) == 0x80
-		       && (buf[2] & 0xC0) == 0x80
-		       && (buf[3] & 0xC0) == 0x80
-		       && (buf[4] & 0xC0) == 0x80) {
-	      /* 0x00200000 - 0x03FFFFFF */
-	      *ucs =  ((buf[0] & ~0xF8) << 24) +
-		      ((buf[1] & ~0x80) << 18) +
-		      ((buf[2] & ~0x80) << 12) +
-		      ((buf[3] & ~0x80) << 6) +
-		       (buf[4] & ~0x80);
-	      if (*ucs > 0x001FFFFF && *ucs < 0x01000000) return 5;
-	    }
-	  } else if (len > 3 
-		     && (buf[1] & 0xC0) == 0x80
-		     && (buf[2] & 0xC0) == 0x80
-		     && (buf[3] & 0xC0) == 0x80) {
-	    /* 0x00010000 - 0x001FFFFF */
-	    *ucs =  ((buf[0] & ~0xF0) << 18) +
-		    ((buf[1] & ~0x80) << 12) +
-		    ((buf[2] & ~0x80) << 6) +
-		     (buf[3] & ~0x80);
-	    if (*ucs > 0x0000FFFF) return 4;
-	  }
-	} else if (len > 2
-	           && (buf[1] & 0xC0) == 0x80 
-		   && (buf[2] & 0xC0) == 0x80) {
-	  /* 0x00000800 - 0x0000FFFF */
-	  *ucs =  ((buf[0] & ~0xE0) << 12) +
-		  ((buf[1] & ~0x80) << 6) +
-		   (buf[2] & ~0x80);
-	  if (*ucs > 0x000007FF) return 3;
-	}	
-      } else if (len > 1 && (buf[1] & 0xC0) == 0x80) {
-	/* 0x00000080 - 0x000007FF */
-	*ucs = ((buf[0] & ~0xC0) << 6) +
-		(buf[1] & ~0x80);
-	if (*ucs > 0x0000007F) return 2;
-      }
-    }
-  } else if (len > 0) {
-    /* 0x00000000 - 0x0000007F */
-    *ucs = buf[0];
-    return 1;
-  } 
-
-  *ucs = (unsigned int) '?'; /* bad utf-8 string */
-  return -1;
-}
-
-/* 
- * Converts an Unicode value to an UTF-8 string 
- * NOTE : the buffer (buf) must be at least 5 bytes long !!!  
- */
-int 
-XConvertUcsToUtf8(unsigned int 	ucs, 
-		  char 		*buf) {
-
-  if (ucs < 0x000080) {
-    buf[0] = ucs;
-    return 1;
-  } else if (ucs < 0x000800) {
-    buf[0] = 0xC0 | (ucs >> 6);
-    buf[1] = 0x80 | (ucs & 0x3F);
-    return 2;
-  } else if (ucs < 0x010000) { 
-    buf[0] = 0xE0 | (ucs >> 12);
-    buf[1] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[2] = 0x80 | (ucs & 0x3F);
-    return 3;
-  } else if (ucs < 0x00200000) {
-    buf[0] = 0xF0 | (ucs >> 18);
-    buf[1] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[3] = 0x80 | (ucs & 0x3F);
-    return 4;
-  } else if (ucs < 0x01000000) {
-    buf[0] = 0xF8 | (ucs >> 24);
-    buf[1] = 0x80 | ((ucs >> 18) & 0x3F);
-    buf[2] = 0x80 | ((ucs >> 12) & 0x3F);
-    buf[3] = 0x80 | ((ucs >> 6) & 0x3F);
-    buf[4] = 0x80 | (ucs & 0x3F);
-    return 5;
-  }
-  buf[0] = '?';
-  return -1;
-}
-
-/* 
- * returns the byte length of the first UTF-8 char 
- * (returns -1 if not valid) 
- */
-int
-XUtf8CharByteLen(const unsigned char     *buf,
-		 int                     len) {
-  unsigned int ucs;
-  return XConvertUtf8ToUcs(buf, len, &ucs);
-}
-
-/*
- * returns the quantity of Unicode chars in the UTF-8 string 
- */
-int 
-XCountUtf8Char(const unsigned char 	*buf, 
-	       int 			len) {
-
-  int i = 0;
-  int nbc = 0;
-  while (i < len) {
-    int cl = XUtf8CharByteLen(buf + i, len - i);
-    if (cl < 1) cl = 1;
-    nbc++;
-    i += cl;
-  }
-  return nbc;
-}
-
-/* 
- * Same as XConvertUtf8ToUcs but no sanity check is done.
- */
-int
-XFastConvertUtf8ToUcs(const unsigned char     *buf,
-		      int                     len,
-		      unsigned int            *ucs) {
-
-  if (buf[0] & 0x80) {
-    if (buf[0] & 0x40) {
-      if (buf[0] & 0x20) {
-	if (buf[0] & 0x10) {
-	  if (buf[0] & 0x08) {
-	    if (buf[0] & 0x04) {
-	      if (buf[0] & 0x02) {
-		/* bad UTF-8 string */
-	      } else {
-		/* 0x04000000 - 0x7FFFFFFF */
-	      }	
-	    } else if (len > 4) {
-	      /* 0x00200000 - 0x03FFFFFF */
-	      *ucs =  ((buf[0] & ~0xF8) << 24) +
-		      ((buf[1] & ~0x80) << 18) +
-		      ((buf[2] & ~0x80) << 12) +
-		      ((buf[3] & ~0x80) << 6) +
-		       (buf[4] & ~0x80);
-	      return 5;
-	    }
-	  } else if (len > 3) {
-	    /* 0x00010000 - 0x001FFFFF */
-	    *ucs =  ((buf[0] & ~0xF0) << 18) +
-		    ((buf[1] & ~0x80) << 12) +
-		    ((buf[2] & ~0x80) << 6) +
-		     (buf[3] & ~0x80);
-	    return 4;
-	  }
-	} else if (len > 2) {
-	  /* 0x00000800 - 0x0000FFFF */
-	  *ucs =  ((buf[0] & ~0xE0) << 12) +
-		  ((buf[1] & ~0x80) << 6) +
-		   (buf[2] & ~0x80);
-	  return 3;
-	}	
-      } else if (len > 1) {
-	/* 0x00000080 - 0x000007FF */
-	*ucs = ((buf[0] & ~0xC0) << 6) +
-		(buf[1] & ~0x80);
-	return 2;
-      }
-    }
-  } else if (len > 0) {
-    /* 0x00000000 - 0x0000007F */
-    *ucs = buf[0];
-    return 1;
-  } 
-
-  *ucs = (unsigned int) '?'; /* bad utf-8 string */
-  return -1;
-}
-
-#endif /* X11 only */
-
-/*
- * End of "$Id: $".
- */
--- a/DoConfig/fltk/src/xutf8/utf8Wrap.c
+++ /dev/null
@@ -1,1028 +1,0 @@
-/* "$Id$"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- * X11 UTF-8 text drawing functions.
- */
-#if !defined(WIN32) && !defined(__APPLE__)
-
-#include "../Xutf8.h"
-#include <X11/Xlib.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-/* External auto generated functions : */
-#include "ucs2fontmap.c"
-/*
- * extern int ucs2fontmap(char *s, unsigned int ucs, int enc);
- * extern int encoding_number(const char *enc);
- * extern const char *encoding_name(int num);
- */
-
-/* The ARM header files have a bug by not taking into account that ARM cpu
- * likes pacing to 4 bytes. This little trick defines our own version of
- * XChar2b which does not have this problem
- */
-
-#if defined(__GNUC__) && defined(__arm__) && !defined(__ARM_EABI__)
-typedef struct {
-  unsigned char byte1;
-  unsigned char byte2;
-}
-__attribute__ ((packed))
-Fl_XChar2b;
-#else
-#define Fl_XChar2b XChar2b
-#endif
-
-
-/*********************************************************************/
-/** extract a list of font from the base font name list             **/
-/*********************************************************************/
-static int
-get_font_list(
-	const char	*base_font_name_list,
-	char 		***flist) {
-  const char *ptr;
-  const char *p;
-  int nb;
-  int nb_name;
-
-  ptr = base_font_name_list;
-  p = NULL;
-  nb = 0;
-  nb_name = 1;
-
-  while (*ptr) {
-    if (*ptr == ',') nb_name++;
-    ptr++;
-  }
-
-  *flist = (char **) malloc(sizeof(char*) * nb_name);
-  ptr = base_font_name_list;
-
-  while (*ptr) {
-    int l = 0, i = 0;
-
-    while(isspace((int)(unsigned char)*ptr)) ptr++;
-    p = ptr;
-    while (*ptr && *ptr != ',') { ptr++; l++; }
-    if (l > 2) {
-      (*flist)[nb] = (char*) malloc((unsigned)l + 2);
-      while (p != ptr) { ((*flist)[nb])[i] = *p; i++; p++; }
-      (*flist)[nb][i] = '\0';
-      nb++;
-    }
-    if (*ptr) ptr++;
-  }
-  if (nb < 1) {
-    free(*flist);
-    *flist = (char**)NULL;
-  }
-  return nb;
-}
-
-/*********************************************************************/
-/** get the font name used as encoding for "fontspecific" encoding  **/
-/** (mainly used for adobe-symbol and adobe-zapfdingbats)	    **/
-/*********************************************************************/
-static int
-font_spec_enc(char *font) {
-  int ret;
-  char *enc;
-  char *end;
-
-  enc = font;
-  while (*enc != '-') enc++;
-  enc++;
-  while (*enc != '-') enc++;
-  enc++;
-  end = enc;
-  while (*end != '-') end++;
-  *end = '\0';
-
-  ret = encoding_number(enc);
-  *end = '-';
-
-  return ret;
-}
-
-
-/*********************************************************************/
-/** get the sub range of a iso10646-1 font			    **/
-/*********************************************************************/
-static void
-get_range(const char	*enc,
-	  int 		*min,
-	  int		*max) {
-
-  const char *ptr = enc;
-  const char *ptr1;
-
-  if (!enc) return;
-
-  while (*ptr && *ptr != '-') ptr++;
-  if (!*ptr) return;
-  while (*ptr && *ptr != '[') ptr++;
-  if (!*ptr) return;
-  *min = 0xFFFF;
-  *max = 0;
-  while (*ptr && *ptr != ']') {
-    int val;
-    ptr++;
-    ptr1 = ptr;
-    while (*ptr && *ptr != ']' && *ptr != ' ' && *ptr != '_') ptr++;
-    val = strtol(ptr1, NULL, 0);
-    if (val < *min) *min = val;
-    if (val > *max) *max = val;
-  }
-}
-
-/*********************************************************************/
-/** get the internal encoding number of each fonts 		    **/
-/*********************************************************************/
-static int *
-get_encodings(char	**font_name_list,
-	      int 	*ranges,
-	      int 	nb_font) {
-
-  int *font_encoding_list;
-  int i;
-  i = 0;
-
-  font_encoding_list = (int *) malloc(sizeof(int) * nb_font);
-  while (i < nb_font) {
-    char *ptr;
-    int ec;
-    ptr = font_name_list[i];
-    ec = 0;
-    font_encoding_list[i] = -1;
-    ranges[i * 2] = 0;
-    ranges[i * 2 + 1] = 0xFFFF;
-
-    if (ptr && strstr(ptr, "fontspecific")) {
-      font_encoding_list[i] = font_spec_enc(ptr);
-      ptr = NULL;
-    }
-    while (ptr && *ptr) {
-      if (*ptr == '-') {
-	ec++;
-	if (ec == 13) {
-	  font_encoding_list[i] = encoding_number(ptr + 1);
-	  if (font_encoding_list[i] == 0) {
-	    get_range(ptr + 1,
-		      ranges + i * 2,
-		      ranges + i * 2 + 1);
-	  }
-	  break;
-	}
-      }
-      ptr++;
-    }
-    if (font_encoding_list[i] < 0) font_encoding_list[i] = 1;
-    i++;
-  }
-  return font_encoding_list;
-}
-
-/*********************************************************************/
-/** find the first font which matches the name and load it.	    **/
-/*********************************************************************/
-static XFontStruct *
-find_best_font(Display  *dpy,
-	       char     **name) {
-
-  char **list;
-  int cnt;
-  XFontStruct *s;
-
-  list = XListFonts(dpy, *name, 1, &cnt);
-  if (cnt && list) {
-    free(*name);
-    *name = strdup(list[0]);
-    s = XLoadQueryFont(dpy, *name);
-    XFreeFontNames(list);
-    return s;
-  }
-  return NULL;
-}
-
-/*********************************************************************/
-/** load all fonts 						    **/
-/*********************************************************************/
-static void
-load_fonts(Display 	   *dpy,
-	   XUtf8FontStruct *font_set) {
-
-  int i = 0;
-
-  font_set->fonts = (XFontStruct**) malloc(sizeof(XFontStruct*) *
-                                           font_set->nb_font);
-
-  font_set->ranges = (int*) malloc(sizeof(int) *
-                                   font_set->nb_font * 2);
-
-  font_set->descent = 0;
-  font_set->ascent = 0;
-  font_set->fid = 0;
-
-  while (i < font_set->nb_font) {
-    XFontStruct *fnt;
-
-    fnt = font_set->fonts[i] =
-      find_best_font(dpy, &(font_set->font_name_list[i]));
-    if (fnt) {
-      font_set->fid = fnt->fid;
-      if (fnt->ascent > font_set->ascent) {
-	font_set->ascent = fnt->ascent;
-      }
-      if (fnt->descent > font_set->descent) {
-	font_set->descent = fnt->descent;
-      }
-    } else {
-      free(font_set->font_name_list[i]);
-      font_set->font_name_list[i] = NULL;
-    }
-    i++;
-  }
-
-  font_set->encodings =
-    get_encodings(font_set->font_name_list,
-      font_set->ranges, font_set->nb_font);
-
-  /* unload fonts with same encoding */
-  for (i = 0; i < font_set->nb_font; i++) {
-    if (font_set->font_name_list[i]) {
-      int j;
-      for (j = 0; j < i; j++) {
-	if (font_set->font_name_list[j] &&
-	    font_set->encodings[j] ==
-	    font_set->encodings[i] &&
-	    font_set->ranges[2*j] ==
-	    font_set->ranges[2*i] &&
-	    font_set->ranges[(2*j)+1] &&
-	    font_set->ranges[(2*i)+1]) {
-	  XFreeFont(dpy, font_set->fonts[i]);
-	  free(font_set->font_name_list[i]);
-	  font_set->font_name_list[i] = NULL;
-	  font_set->fonts[i] = 0;
-	}
-      }
-    }
-  }
-}
-
-/*********************************************************************/
-/** Creates an array of XFontStruct acording to the comma separated **/
-/** list of fonts. XLoad all fonts.				    **/
-/*********************************************************************/
-XUtf8FontStruct *
-XCreateUtf8FontStruct(Display    *dpy,
-		      const char *base_font_name_list) {
-
-  XUtf8FontStruct *font_set;
-
-  font_set = (XUtf8FontStruct*)malloc(sizeof(XUtf8FontStruct));
-
-  if (!font_set) {
-    return NULL;
-  }
-
-  font_set->nb_font = get_font_list(base_font_name_list,
-				    &font_set->font_name_list);
-
-  if (font_set->nb_font < 1) {
-    free(font_set);
-    return NULL;
-  }
-
-  load_fonts(dpy, font_set);
-
-  return font_set;
-}
-
-
-/*****************************************************************************/
-/** draw a Right To Left UTF-8 string using multiple fonts as needed.	    **/
-/*****************************************************************************/
-void
-XUtf8DrawRtlString(Display 		*display,
-		   Drawable 		d,
-		   XUtf8FontStruct 	*font_set,
-		   GC 			gc,
-		   int 			x,
-		   int 			y,
-		   const char		*string,
-		   int 			num_bytes) {
-
-  int 		*encodings;	/* encodings array */
-  XFontStruct 	**fonts;	/* fonts array */
-  Fl_XChar2b 	buf[128];	/* drawing buffer */
-  Fl_XChar2b	*ptr;		/* pointer to the drawing buffer */
-  int 		fnum;		/* index of the current font in the fonts array*/
-  int 		i;		/* current byte in the XChar2b buffer */
-  int 		first;		/* first valid font index */
-  int 		last_fnum;	/* font index of the previous char */
-  int 		nb_font;	/* quantity of fonts in the font array */
-  char 		glyph[2];	/* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;	/* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-  ptr = buf + 128;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      x -= XTextWidth16(fonts[fnum], ptr, i);
-      XDrawString16(display, d, gc, x, y, ptr, i);
-      i = 0;
-      ptr = buf + 128;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((const unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    ((int)ucs >= ranges[fnum * 2] && (int)ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      x -= XTextWidth16(fonts[last_fnum], ptr, i);
-      XDrawString16(display, d, gc, x, y, ptr, i);
-      i = 0;
-      ptr = buf + 127;
-      (*ptr).byte1 = glyph[0];
-      (*ptr).byte2 = glyph[1];
-      if (no_spc) {
-	x += XTextWidth16(fonts[fnum], ptr, 1);
-      }
-    } else {
-      ptr--;
-      (*ptr).byte1 = glyph[0];
-      (*ptr).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  if (i < 1) return;
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  x -= XTextWidth16(fonts[last_fnum], ptr, i);
-  XDrawString16(display, d, gc, x, y, ptr, i);
-}
-
-
-/*****************************************************************************/
-/** draw an UTF-8 string using multiple fonts as needed.		    **/
-/*****************************************************************************/
-void
-XUtf8DrawString(Display 	*display,
-	        Drawable 	d,
-                XUtf8FontStruct *font_set,
-	        GC 		gc,
-	        int 		x,
-	        int 		y,
-	        const char	*string,
-                int 		num_bytes) {
-
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      XDrawString16(display, d, gc, x, y, buf, i);
-      x += XTextWidth16(fonts[fnum], buf, i);
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((const unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    ((int)ucs >= ranges[fnum * 2] &&
-	     (int)ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      XDrawString16(display, d, gc, x, y, buf, i);
-      x += XTextWidth16(fonts[last_fnum], buf, i);
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	x -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  XDrawString16(display, d, gc, x, y, buf, i);
-}
-
-
-/*****************************************************************************/
-/** Measure the inked extents of a UTF-8 string using multiple fonts as     **/
-/** needed. Tries to mirror the behaviour of the draw function              **/
-/** XUtf8DrawString() as closely as possible to get consistent sizes.       **/
-/*****************************************************************************/
-void
-XUtf8_measure_extents(
-        Display         	*display,
-        Drawable        	d,
-        XUtf8FontStruct  *font_set,
-        GC              	gc,
-        int             	*xx,     /* x-offset from origin */
-        int             	*yy,     /* y-offset from origin */
-        int             	*ww,     /* overall inked width  */
-        int             	*hh,     /* maximum inked height */
-        const char      	*string, /* text to measure */
-        int             	num_bytes) {
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  int wd = 0; /* accumulates the width of the text */
-  int ht = 0; /* used to find max height in text */
-  int hs;     /* "height sum" of current text segment */
-  int yt = 0x7FFFFFFF; /* used to find bounding rectangle delta-y */
-  /* int res; */ /* result from calling XTextExtents16() - we should test this is OK! */
-  /* FC: the man does not specify error codes for it, but X will generate X errors like BadGC or BadFont. */
-
-  XCharStruct sizes;
-  int dir_ret = 0;
-  int fnt_asc = 0;
-  int fnt_dsc = 0;
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return;
-  }
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** draw the buffer **/
-      XSetFont(display, gc, fonts[fnum]->fid);
-      /* res = */ XTextExtents16(fonts[fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-      /* recover the dimensions - should verify that res == 0 first! */
-      wd += sizes.width; /* accumulate the width */
-      hs = sizes.ascent + sizes.descent; /* total height */
-      if(hs > ht) ht = hs; /* new height exceeds previous height */
-      if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((const unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) ucs = no_spc;
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    ((int)ucs >= ranges[fnum * 2] &&
-	     (int)ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      XSetFont(display, gc, fonts[last_fnum]->fid);
-      /* res = */ XTextExtents16(fonts[last_fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-      /* recover the dimensions - should verify that res == 0 first! */
-      wd += sizes.width; /* accumulate the width */
-      hs = sizes.ascent + sizes.descent; /* total height */
-      if(hs > ht) ht = hs; /* new height exceeds previous height */
-      if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	wd -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  XSetFont(display, gc, fonts[fnum]->fid);
-  /* res = */ XTextExtents16(fonts[fnum], buf, i, &dir_ret, &fnt_asc, &fnt_dsc, &sizes);
-  /* recover the dimensions - should verify that res == 0 first! */
-  wd += sizes.width; /* accumulate the width */
-  hs = sizes.ascent + sizes.descent; /* total height */
-  if(hs > ht) ht = hs; /* new height exceeds previous height */
-  if(yt > (-sizes.ascent)) yt = -sizes.ascent; /* delta y offset */
-  /* return values */
-  *ww = wd; /* width of inked area rectangle */
-  *hh = ht; /* max height of inked area rectangle */
-  *xx = 0;  /* x-offset from origin to start of inked area - this is wrong! */
-  *yy = yt; /* y-offset from origin to start of inked rectangle */
-}
-
-
-/*****************************************************************************/
-/** returns the pixel width of a UTF-8 string				    **/
-/*****************************************************************************/
-int
-XUtf8TextWidth(XUtf8FontStruct 	*font_set,
-	       const char 	*string,
-	       int 		num_bytes) {
-
-  int		x;
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[128];   /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		i;          /* current byte in the XChar2b buffer */
-  int 		first;      /* first valid font index */
-  int 		last_fnum;  /* font index of the previous char */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-  x = 0;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return x;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  i = 0;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return x;
-  }
-
-  first = fnum;
-  last_fnum = fnum;
-
-  while (num_bytes > 0) {
-    int 	 ulen;   /* byte length of the UTF-8 char */
-    unsigned int ucs;    /* Unicode value of the UTF-8 char */
-    unsigned int no_spc; /* Spacing char equivalent of a non-spacing char */
-
-    if (i > 120) {
-      /*** measure the buffer **/
-      x += XTextWidth16(fonts[fnum], buf, i);
-      i = 0;
-    }
-
-    ulen = XFastConvertUtf8ToUcs((const unsigned char*)string, num_bytes, &ucs);
-
-    if (ulen < 1) ulen = 1;
-
-    no_spc = XUtf8IsNonSpacing(ucs);
-    if (no_spc) {
-      ucs = no_spc;
-    }
-
-    /*
-     * find the first encoding which can be used to
-     * draw the glyph
-     */
-    fnum = first;
-    while (fnum < nb_font) {
-      if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-	if (encodings[fnum] != 0 ||
-	    ((int)ucs >= ranges[fnum * 2] &&
-	     (int)ucs <= ranges[fnum * 2 + 1])) {
-	  break;
-	}
-      }
-      fnum++;
-    }
-    if (fnum == nb_font) {
-      /* the char is not valid in all encodings ->
-       * draw it using the first font :-(
-       */
-      fnum = first;
-      ucs2fontmap(glyph, '?', encodings[fnum]);
-    }
-
-    if (last_fnum != fnum || no_spc) {
-      x += XTextWidth16(fonts[last_fnum], buf, i);
-      i = 0;
-      (*buf).byte1 = glyph[0];
-      (*buf).byte2 = glyph[1];
-      if (no_spc) {
-	/* go back to draw the non-spacing char over the previous char */
-	x -= XTextWidth16(fonts[fnum], buf, 1);
-      }
-    } else {
-      (*(buf + i)).byte1 = glyph[0];
-      (*(buf + i)).byte2 = glyph[1];
-    }
-    last_fnum = fnum;
-    i++;
-    string += ulen;
-    num_bytes -= ulen;
-  }
-
-  x += XTextWidth16(fonts[last_fnum], buf, i);
-
-  return x;
-}
-
-/*****************************************************************************/
-/**  get the X font and glyph ID of a UCS char                              **/
-/*****************************************************************************/
-int
-fl_XGetUtf8FontAndGlyph(XUtf8FontStruct  *font_set,
-			unsigned int     ucs,
-			XFontStruct      **fnt,
-			unsigned short   *id) {
-
-  int             *encodings; /* encodings array */
-  XFontStruct     **fonts;    /* fonts array */
-  int             fnum;       /* index of the current font in the fonts array*/
-  int             first;      /* first valid font index */
-  int             nb_font;    /* quantity of fonts in the font array */
-  char 		  glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int             *ranges;    /* sub range of iso10646 */
-
-  nb_font = font_set->nb_font;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return -1;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return -1;
-  }
-
-  first = fnum;
-
-  /*
-   * find the first encoding which can be used to draw the glyph
-   */
-  fnum = first;
-  while (fnum < nb_font) {
-    if (fonts[fnum] && ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-      if (encodings[fnum] != 0 ||
-          ((int)ucs >= ranges[fnum * 2] &&
-	   (int)ucs <= ranges[fnum * 2 + 1])) {
-	break;
-      }
-    }
-    fnum++;
-  }
-  if (fnum == nb_font) {
-    /* the char is not valid in all encodings ->
-     * draw it using the first font :-(
-     */
-    fnum = first;
-    ucs2fontmap(glyph, '?', encodings[fnum]);
-  }
-
-  *id = ((unsigned char)glyph[0] << 8) | (unsigned char)glyph[1] ;
-  *fnt = fonts[fnum];
-  return 0;
-}
-
-/*****************************************************************************/
-/** returns the pixel width of a UCS char				    **/
-/*****************************************************************************/
-int
-XUtf8UcsWidth(XUtf8FontStruct  *font_set,
-	      unsigned int     ucs) {
-
-  int		x;
-  int 		*encodings; /* encodings array */
-  XFontStruct 	**fonts;    /* fonts array */
-  Fl_XChar2b 	buf[8];     /* drawing buffer */
-  int 		fnum;       /* index of the current font in the fonts array*/
-  int 		first;      /* first valid font index */
-  int 		nb_font;    /* quantity of fonts in the font array */
-  char 		glyph[2];   /* byte1 and byte2 value of the UTF-8 char */
-  int		*ranges;    /* sub range of iso10646 */
-  unsigned int  no_spc;
-
-  nb_font = font_set->nb_font;
-  x = 0;
-
-  if (nb_font < 1) {
-    /* there is no font in the font_set :-( */
-    return x;
-  }
-
-  ranges = font_set->ranges;
-  fonts = font_set->fonts;
-  encodings = font_set->encodings;
-  fnum = 0;
-
-  while(fnum < nb_font && !fonts[fnum]) fnum++;
-  if (fnum >= nb_font) {
-    /* there is no valid font for the X server */
-    return x;
-  }
-
-  first = fnum;
-
-  no_spc = XUtf8IsNonSpacing(ucs);
-  if (no_spc) ucs = no_spc;
-
-  /*
-   * find the first encoding which can be used to
-   * draw the glyph
-   */
-  fnum = first;
-  while (fnum < nb_font) {
-    if (fonts[fnum] &&
-	ucs2fontmap(glyph, ucs, encodings[fnum]) >= 0) {
-      if (encodings[fnum] != 0 || ((int)ucs >= ranges[fnum * 2] &&
-	  (int)ucs <= ranges[fnum * 2 + 1])) {
-	break;
-      }
-    }
-    fnum++;
-  }
-  if (fnum == nb_font) {
-    /* the char is not valid in all encodings ->
-     * draw it using the first font :-(
-     */
-    fnum = first;
-    ucs2fontmap(glyph, '?', encodings[fnum]);
-  }
-
-  (*buf).byte1 = glyph[0];
-  (*buf).byte2 = glyph[1];
-
-  x += XTextWidth16(fonts[fnum], buf, 1);
-
-  return x;
-}
-
-/*****************************************************************************/
-/** draw an UTF-8 string and clear the background.	 		    **/
-/*****************************************************************************/
-void
-XUtf8DrawImageString(Display         *display,
-		     Drawable        d,
-		     XUtf8FontStruct *font_set,
-		     GC              gc,
-		     int             x,
-		     int             y,
-		     const char      *string,
-		     int             num_bytes) {
-
-  /* FIXME: must be improved ! */
-  int w;
-  int fill_style;
-  unsigned long foreground;
-  unsigned long background;
-  int function;
-  XGCValues xgcv;
-
-  w = XUtf8TextWidth(font_set, string, num_bytes);
-
-  XGetGCValues(display, gc,
-	       GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  function = xgcv.function;
-  fill_style = xgcv.fill_style;
-  foreground = xgcv.foreground;
-  background = xgcv.background;
-
-  xgcv.function = GXcopy;
-  xgcv.foreground = background;
-  xgcv.background = foreground;
-  xgcv.fill_style = FillSolid;
-
-  XChangeGC(display, gc,
-	    GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  XFillRectangle(display, d, gc, x, y - font_set->ascent,
-	         (unsigned)w, (unsigned)(font_set->ascent + font_set->descent));
-
-  xgcv.function = function;
-  xgcv.foreground = foreground;
-  xgcv.background = background;
-  xgcv.fill_style = fill_style;
-
-  XChangeGC(display, gc,
-	    GCFunction|GCForeground|GCBackground|GCFillStyle, &xgcv);
-
-  XUtf8DrawString(display, d, font_set, gc, x, y, string, num_bytes);
-}
-
-/*****************************************************************************/
-/** free the XFontSet and others things created by XCreateUtf8FontSet       **/
-/*****************************************************************************/
-void
-XFreeUtf8FontStruct(Display 	    *dpy,
-		    XUtf8FontStruct *font_set) {
-
-  int i;
-  i = 0;
-  while (i < font_set->nb_font) {
-    if (font_set->fonts[i]) {
-	XFreeFont(dpy, font_set->fonts[i]);
-	free(font_set->font_name_list[i]);
-    }
-    i++;
-  }
-  free(font_set->ranges);
-  free(font_set->font_name_list);
-  free(font_set->fonts);
-  free(font_set->encodings);
-  free(font_set);
-}
-
-#endif /* X11 only */
-
-/*
- *  End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utils/INSTALL
+++ /dev/null
@@ -1,26 +1,0 @@
-
-Default install :
-
-        tar -xvzf Xutf8.tar.gz
-        cd Xutf8
-        ./configure --prefix=/usr
-	su -c "make install"
-
-
-
-Install with tables generation :
-
-	You must have a copy of http://www.unicode.org/Public/MAPPINGS/ in
-	the ./MAPPINGS/ directory and a copy of UnicodeData-2.txt in ./
-	to generate the conversion tables.
-
-	To add a table, edit utils/tbl_gen.sh and utils/convert_map.c.
-
-	tar -xvzf Xutf8.tar.gz
-	cd Xutf8
-	./configure
-	cd utils
-	make
-	cd ..
-	su -c "make install"
-		
--- a/DoConfig/fltk/src/xutf8/utils/Makefile
+++ /dev/null
@@ -1,22 +1,0 @@
-euc_tw: euc_tw.c
-	gcc  euc_tw.c -o  euc_tw
-
-all: convert_map create_table conv_gen  
-	./tbl_gen.sh
-	./non_spacing.sh
-	./case.sh
-
-conv_gen: conv_gen.c
-	gcc conv_gen.c -o conv_gen
-
-convert_map: convert_map.c
-	gcc convert_map.c -o convert_map
-
-create_table: create_table.c
-	gcc create_table.c -o create_table
-
-clean:
-	rm -f *.o convert_map create_table conv_gen euc_tw
-
-	
-
--- a/DoConfig/fltk/src/xutf8/utils/README
+++ /dev/null
@@ -1,14 +1,0 @@
-tbl_gen.sh :
-        shell script that convert unicode.org mappings tables to c headers.
-        Also creates unicode2fontmap.c.
-
-conv_gen.c:
-        create unicode2fontmap.c functions.
-
-convert_map.c:
-        convert diffrent unicode.org mappings to a unique format.
-
-create_table.c:
-        convert text files created by convert_map.c to to c tables.
-
-
--- a/DoConfig/fltk/src/xutf8/utils/case.sh
+++ /dev/null
@@ -1,96 +1,0 @@
-#!/bin/sh
-
-
-nopsc=`grep 'CAPITAL' ../UnicodeData-2.txt`
-
-IFS="
-"
-
-#echo "#
-# List of case chars
-#
-# 
-#       Format:  Three tab-separated columns
-#                Column #1 is the non-spacing Unicode (in hex as 0xXXXX)
-#                Column #2 is the spacing Unicode (in hex as 0xXXXX)
-#                Column #3 the Unicode name (follows a comment sign, '#')
-# " > case.txt
-
-rm -f case.txt
-
-
-for line in ${nopsc}
-do
-	ucs=`echo ${line} | cut -d\; -f1`
-	name=`echo ${line} | cut -d\; -f2 | cut -d\; -f1| sed s/CAPITAL/SMALL/`
-	small=`grep ";${name};" ../UnicodeData-2.txt` 
-	if test "X${small}" != X ;then
-		tbl=`echo ${small} | cut -d\; -f1`
-	#	echo "0x${ucs}	0x${tbl}	#	${name}" >> space.txt
-		echo "/* U+${ucs} */ 0x${tbl}," >> case.txt
-	else
-	#	echo "0x${ucs}	0x${ucs}	#	${name}" >> space.txt
-		echo "/* U+${ucs} */ 0x0," >> case.txt
-	fi
-done
-
-unset nospc
-
-# echo "/* EOF */" >> space.txt
-
-cat case.txt | ./create_table "spacing" > "../headers/case.h" 2> ../headers/case_tbl.txt
-
-rm -f case.txt
-
-cat >../case.c << ENDOFTEXT
-/*
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include "headers/case.h"
-
-ENDOFTEXT
-
-echo "
-int 
-XUtf8Tolower(
-	int ucs)
-{
-	int ret;
-" >>../case.c
-
-tables=`cat ../headers/case_tbl.txt`
-
-for line in ${tables} 
-do
-	tbl=`echo ${line} | cut -d']' -f1`
-	bot=`echo ${line} | cut -d'_' -f3 | cut -d'[' -f1`
-	eot=`echo ${line} | cut -d'	' -f2 | cut -d'+' -f2 | cut -d' ' -f1`
-	echo "\
-	if (ucs <= 0x${eot}) {
-		if (ucs >= 0x${bot}) {
-			ret = ${tbl}ucs - 0x${bot}];
-			if (ret > 0) return ret;
-		}
-		return ucs;
-	}
-" >>../case.c
-
-done
-
-echo "	return ucs;
-}
-" >>../case.c
-
-
--- a/DoConfig/fltk/src/xutf8/utils/conv_gen.c
+++ /dev/null
@@ -1,165 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*	
- *    generate the "if(){} else if ..." structure of ucs2fontmap()
- */
-#include <wchar.h>
-#include <stdio.h>
-char buffer[1000000];
-
-int main(int argc, char **argv) {
-  char buf[80];
-  int len;
-  char *encode[256];
-  int encode_number = 0;
-  unsigned int i = 0;
-  unsigned char *ptr;
-  unsigned char *lst = "";
-  size_t nb;
-  int nbb = 0;
-  len = fread(buffer, 1, 1000000, stdin);
-
-  puts("  ");
-  puts("   /*************** conv_gen.c ************/");
-  buffer[len] = '\0';
-  ptr = buffer;
-  
-  printf("const int ucs2fontmap"
-	  "(char *s, unsigned int ucs, int enc)\n");
-  printf("{\n");
-  printf("  switch(enc) {\n");
-  printf("  case 0:\n");
-  printf("    s[0] = (char) ((ucs & 0xFF00) >> 8);\n");
-  printf("    s[1] = (char) (ucs & 0xFF);\n");
-  printf("    return 0;");
-  while (len > 0) {
-    unsigned char *p = ptr;
-    unsigned char *f, *t;
-    
-    while (*p != ']') {
-      i++;
-      p++;
-    }
-    *(p - 1) = '\0';
-    *(p - 6) = '\0';
-    f = p - 5;
-    while (*p != '+') { i++; p++;}
-    p++;
-    t = p;
-    *(p + 4) = '\0';
-    if (strcmp(lst, ptr)) {
-      encode_number++;
-      encode[encode_number] = ptr;
-      printf("\n    break;");
-      printf("\n  case %d:\n", encode_number);
-      printf("    ");
-    } else {
-      printf(" else ");
-    }
-    lst = ptr;
-    printf("if (ucs <= 0x%s) {\n", t);
-    printf("      if (ucs >= 0x%s) {\n", f);
-    if (*(f - 3) == '2') {
-      printf("        int i = (ucs - 0x%s) * 2;\n", f);
-      printf("        s[0] = %s_%s[i++];\n", ptr, f, f);
-      printf("        s[1] = %s_%s[i];\n", ptr, f, f);
-      printf("        if (s[0] || s[1]) return %d;\n", encode_number);
-    } else {
-      printf("        s[0] = 0;\n");
-      printf("        s[1] = %s_%s[ucs - 0x%s];\n", ptr, f, f);
-      printf("        if (s[1]) return %d;\n", encode_number);
-    }
-    printf("      }\n");
-    printf("    }");
-    while (*ptr != '\n') {
-      ptr++;
-      len--;
-    } 
-    ptr++;
-    len--;
-  }
-  printf("\n    break;\n");
-  printf("\n  default:\n");
-  printf("    break;\n");
-  printf("  };\n");
-  printf("  return -1;\n");
-  printf("};\n\n");
-
-  printf("const int encoding_number(const char *enc)\n{\n");
-  printf("  if (!enc || !strcmp(enc, \"iso10646-1\")) {\n");
-  printf("    return 0;\n");
-  i = 1;
-  while (i <= encode_number) {
-    int l;
-    char *ptr;
-    l = strlen(encode[i]) - 3;
-    ptr = encode[i] + l;
-    *(ptr) = '\0';
-    ptr--;
-    while (ptr != encode[i]) {
-      if (*ptr == '_') {
-	*ptr = '-';
-	ptr--;
-	break;
-      }
-      ptr--;
-    }
-    while (ptr != encode[i]) {
-      if (*ptr == '_') {
-	*ptr = '.';
-      }
-      ptr--;
-    }
-    printf("  } else if (!strcmp(enc, \"%s\")", encode[i] +11);
-
-    if (!strcmp(encode[i] + 11, "big5-0")) { 
-      printf(" || !strcmp(enc, \"big5.eten-0\")");
-    } else if (!strcmp(encode[i] + 11, "dingbats")) {
-      printf(" || !strcmp(enc, \"zapfdingbats\")");
-      printf(" || !strcmp(enc, \"zapf dingbats\")");
-      printf(" || !strcmp(enc, \"itc zapf dingbats\")");
-    } else if (!strcmp(encode[i] + 11, "jisx0208.1983-0")) {
-      printf(" || !strcmp(enc, \"jisx0208.1990-0\")");
-    }
-
-    printf(") {\n");
-    printf("    return %d;\n", i);
-    i++;
-  }
-  printf("  };\n");	
-  printf("  return -1;\n");	
-  printf("};\n\n");	
-
-  printf("/*\n");	
-  printf("const char *encoding_name(int num)\n{\n");
-  printf("  switch (num) {\n");
-  i = 1;
-  while (i <= encode_number) {
-    printf("  case %d:\n", i);
-    printf("    return \"%s\";\n", encode[i] + 11);
-    i++;
-  }
-  printf("  };\n");
-  printf("  return \"iso10646-1\";\n");
-  printf("};\n\n");
-  printf("*/\n");	
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utils/convert_map.c
+++ /dev/null
@@ -1,170 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*
- *    read the http://www.unicode.org/Public/MAPPINGS/ and create something
- *    usable in C.
- */
-
-#include <wchar.h>
-#include <stdio.h>
-
-char buffer[1000000];
-
-int JIS0208(unsigned char * ptr) {
-  int i = 0;
-  unsigned int fmap;
-  unsigned int ucs;
-  while(*ptr != '\t') { ptr++; i++; }
-  ptr++; i++; *(ptr+6) = '\0';
-  fmap = (unsigned int)strtoul(ptr, NULL, 16);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++; *(ptr+6) = '\0';
-  ucs = (unsigned int)strtoul(ptr, NULL, 16);
-  if (ucs) 
-    printf("/* U+%04X */ 0x%02X, 0x%02X,\n", ucs, 
-	  (fmap & 0xFF00) >> 8, fmap & 0xFF);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++;
-  while(*ptr != '\n') { ptr++; i++; }
-  i++;
-  return i;
-}
-
-int JIS0201(unsigned char * ptr) {
-  int i = 0;
-  unsigned int fmap;
-  unsigned int ucs;
-  *(ptr+4) = '\0';
-  fmap = (unsigned int)strtoul(ptr, NULL, 16);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++; *(ptr+6) = '\0';
-  ucs = (unsigned int)strtoul(ptr, NULL, 16);
-  if (*(ptr + 1) != 'x') {
-    printf("/* EOF */\n");
-    abort();
-  }
-  if (ucs) printf("/* U+%04X */ 0x%02X,\n", ucs, (unsigned char)fmap);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++;
-  while(*ptr != '\n') { ptr++; i++; }
-  i++;
-  return i;
-}
-
-int ADOBE(unsigned char * ptr) {
-  int i = 0;
-  unsigned int fmap;
-  unsigned int ucs;
-  *(ptr+4) = '\0';
-  ucs = (unsigned int)strtoul(ptr, NULL, 16);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++; *(ptr+2) = '\0';
-  fmap = (unsigned int)strtoul(ptr, NULL, 16);
-  if (fmap < 1) {
-    printf("/* EOF */\n");
-    abort();
-  }
-  if (ucs) printf("/* U+%04X */ 0x%02X,\n", ucs, (unsigned char)fmap);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++;
-  while(*ptr != '\n') { ptr++; i++; }
-  i++;
-  return i;
-}
-
-
-int JIS0212(unsigned char * ptr) {
-  int i = 0;
-  unsigned int fmap;
-  unsigned int ucs;
-  *(ptr+6) = '\0';
-  fmap = (unsigned int)strtoul(ptr, NULL, 16);
-  ptr += 7;
-  i += 7;
-  while(*ptr == ' ') { ptr++; i++; }
-  /* i++; ptr++; */
-  *(ptr+6) = '\0';
-  ucs = (unsigned int)strtoul(ptr, NULL, 16);
-  if (*(ptr + 1) != 'x') {
-    printf("/* EOF */\n");
-    abort();
-  }
-  if (ucs)
-    printf("/* U+%04X */ 0x%02X, 0x%02X,\n", ucs, 
-	  (fmap & 0xFF00) >> 8, fmap & 0xFF);
-  while(*ptr != '\0') { ptr++; i++; }
-  i++; ptr++;
-  while(*ptr != '\n') { ptr++; i++; }
-  i++;
-  return i;
-}
-
-int main(int argc, char **argv) {
-  char buf[80];
-  int len;
-  int i;
-  unsigned char *ptr;
-  size_t nb;
-  len = fread(buffer, 1, 1000000, stdin);
-
-  buffer[len] = '\0';
-  ptr = (unsigned char *)buffer;
-  while (*ptr !='\n') {ptr++; len--;};
-  ptr++; len--;
-  while (*ptr == '#') {
-    while (*ptr !='\n') {
-      ptr++;
-      len--;
-    }
-    ptr++;
-    len--;
-  }
-
-  while (len > 0) {
-    nb = 0;
-    if (!strcmp("jisx0208.1983-0", argv[1])) {
-      nb = JIS0208(ptr);
-    } else if (!strcmp("jisx0201.1976-0", argv[1])) {
-      nb = JIS0201(ptr);
-    } else if (!strcmp("jisx0212.1990-0", argv[1])) {
-      nb = JIS0212(ptr);
-    } else if (!strcmp("gb2312.1980-0", argv[1])) {
-      nb = JIS0212(ptr);
-    } else if (!strcmp("ksc5601.1987-0", argv[1])) {
-      nb = JIS0212(ptr);
-    } else if (!strcmp("big5-0", argv[1])) {
-      nb = JIS0212(ptr);
-    } else if (!strncmp("iso8859", argv[1], 7)) {
-      nb = JIS0201(ptr);
-    } else if (!strcmp("koi8-1", argv[1])) {
-      nb = JIS0201(ptr);
-    } else if (!strcmp("dingbats", argv[1]) ||
-	       !strcmp("symbol", argv[1])) 
-    {
-      nb = ADOBE(ptr);
-    } else {
-      len = 0;
-    }
-    ptr += nb;
-    len = len - nb;
-  }
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utils/create_table.c
+++ /dev/null
@@ -1,103 +1,0 @@
-/* "$Id: $"
- *
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include <wchar.h>
-#include <stdio.h>
-char buffer[1000000];
-
-/*** you can try to modifie this value to have better performences **/
-#define MAX_DELTA 0x80
-
-int main(int argc, char **argv) {
-  char buf[80];
-  int len;
-  unsigned int i = 0;
-  unsigned char *ptr;
-  size_t nb;
-  int nbb = 0;
-  len = fread(buffer, 1, 1000000, stdin);
-
-  buffer[len] = '\0';
-  ptr = (unsigned char *)buffer;
-  while (*ptr != '\n') ptr++;
-  ptr++;
-  while (*ptr != '\n') {
-    if (*ptr == ',') nbb++;
-    ptr++;
-  }
-  ptr = (unsigned char *)buffer;
-  printf("/* %s */\n", argv[1]);
-  while (len > 0) {
-    unsigned int ucs = 0;
-    char *p = ptr;
-    char pp[20];
-    nb = 0;
-    pp[0] = '\0';
-    while (*p != 'U') p++;
-    strncat(pp, p, 6);
-    *pp = '0';
-    *(pp+1) = 'x';
-    ucs = (unsigned int)strtoul(pp, NULL, 16);;
-    if (ucs < 1) {
-      printf("ERROR %d %d\n", len, ucs);
-      abort();
-    }
-    if (i != ucs - 1 || !i) {
-      if ((ucs - i) > MAX_DELTA || !i) {
-	if (i) {
-	  printf("};\n");
-	  fprintf(stderr, "\t/* end: U+%04X */\n", i);
-	}
-	if (strcmp(argv[1], "spacing")) {
-	  printf("\nstatic const char unicode_to_%s_%db_%04X[] = {\n",
-	         argv[1], nbb, ucs);
-	  fprintf(stderr, "unicode_to_%s_%db_%04X[]; ", 
-		  argv[1], nbb, ucs);
-	} else {
-	  printf("\nstatic const unsigned short"
-		 " ucs_table_%04X[]"
-		 " = {\n", ucs);
-	  fprintf(stderr, "ucs_table_%04X[]; ", ucs);
-	}
-      } else {
-	while (i < ucs - 1) {
-	  i++;
-	  if (nbb == 1) {
-	    printf("0x00,\n");
-	  } else {
-	    printf("0x00, 0x00,\n");
-	  }
-	};
-      }
-    }
-    i = ucs;
-    while (*ptr != '\n') {
-      printf("%c", *ptr);
-      ptr++;
-      len--;
-    }
-    printf("\n");
-    ptr++;
-    len--;
-  }
-  printf("};\n");
-  fprintf(stderr, "\t/* end: U+%04X */\n", i);
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utils/euc_tw.c
+++ /dev/null
@@ -1,58 +1,0 @@
-/*
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-/*	
- *    generate the "if(){} else if ..." structure of ucs2fontmap()
- */
-
-#include <wchar.h>
-#include <stdio.h>
-#include <iconv.h>
-char uni[0x10000];
-#include "../utf8Utils.c"
-
-int main(int argc, char **argv) {
-
-  iconv_t cd;
-
-  int i;
-  cd = iconv_open("EUC-TW", "UTF16");
-  for(i = 0; i < 0x10000; i++) uni[i] = 0;
-  for(i = 0x00000000; i < 0xFFFFFFFF; i++) {
-    char buf[4], ob[6];
-    char *b = buf;
-    int ucs = -1;
-    int l1 = 4, l2 = 6;
-    char *o = ob ;
-    buf[0] = i & 0xff;
-    buf[1] = (i >> 8) & 0xFF;
-    buf[2] = (i >> 16) & 0xFF;
-    buf[3] = (i >> 24) & 0xFF;
-    iconv(cd, NULL, NULL, NULL, NULL);
-    iconv(cd, &b, &l1, &o, &l2);
-    if (l2 != 6) {
-      ucs = (unsigned)ob[0];
-      ucs += (unsigned) (ob[1] << 8);
-      /* XConvertUtf8ToUcs((unsigned char*)ob, 6 - l2, &ucs); */
-      printf ("%x --> %X\n", i, ucs & 0xFFFF);
-    }
-  }
-  iconv_close(cd);
-  return 0;
-}
-
-/*
- * End of "$Id$".
- */
--- a/DoConfig/fltk/src/xutf8/utils/non_spacing.sh
+++ /dev/null
@@ -1,92 +1,0 @@
-#!/bin/sh
-
-
-nopsc=`grep ';Mn;' ../UnicodeData-2.txt`
-
-IFS="
-"
-
-#echo "#
-# List of non-spacing chars
-#
-# 
-#       Format:  Three tab-separated columns
-#                Column #1 is the non-spacing Unicode (in hex as 0xXXXX)
-#                Column #2 is the spacing Unicode (in hex as 0xXXXX)
-#                Column #3 the Unicode name (follows a comment sign, '#')
-# " > space.txt
-
-rm -f space.txt
-
-
-for line in ${nopsc}
-do
-	ucs=`echo ${line} | cut -d\; -f1`
-	name=`echo ${line} | cut -d\; -f2`
-	space=`grep " 0020 ${ucs};" ../UnicodeData-2.txt` 
-	if test "X${space}" != X ;then
-		tbl=`echo ${space} | cut -d\; -f1`
-	#	echo "0x${ucs}	0x${tbl}	#	${name}" >> space.txt
-		echo "/* U+${ucs} */ 0x${tbl}," >> space.txt
-	else
-	#	echo "0x${ucs}	0x${ucs}	#	${name}" >> space.txt
-		echo "/* U+${ucs} */ 0x${ucs}," >> space.txt
-	fi
-done
-
-unset nospc
-
-# echo "/* EOF */" >> space.txt
-
-cat space.txt | ./create_table "spacing" > "../headers/spacing.h" 2> ../headers/spacing_tbl.txt
-
-rm -f space.txt
-
-cat >../is_spacing.c << ENDOFTEXT
-/*
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-#include "headers/spacing.h"
-
-ENDOFTEXT
-
-echo "
-unsigned short 
-XUtf8IsNonSpacing(
-	unsigned int ucs)
-{
-" >>../is_spacing.c
-
-tables=`cat ../headers/spacing_tbl.txt`
-
-for line in ${tables} 
-do
-	tbl=`echo ${line} | cut -d']' -f1`
-	bot=`echo ${line} | cut -d'_' -f3 | cut -d'[' -f1`
-	eot=`echo ${line} | cut -d'	' -f2 | cut -d'+' -f2 | cut -d' ' -f1`
-	echo "\
-	if (ucs <= 0x${eot}) {
-		if (ucs >= 0x${bot}) return ${tbl}ucs - 0x${bot}];
-		return 0;
-	}
-" >>../is_spacing.c
-
-done
-
-echo "	return 0;
-}
-" >>../is_spacing.c
-
-
--- a/DoConfig/fltk/src/xutf8/utils/tbl_gen.sh
+++ /dev/null
@@ -1,161 +1,0 @@
-#!/bin/sh
-#/*
-# *    generates ucs2fontmap.c and headers/*_.h
-# *
-# * Author: Jean-Marc Lienher ( http://oksid.ch )
-# * Copyright 2000-2003 by O'ksi'D.
-# *
-# * 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:
-# *
-# *     http://www.fltk.org/COPYING.php
-# *
-# * Please report all bugs and problems on the following page:
-# *
-# *     http://www.fltk.org/str.php
-# */
-#
-
-# iso10646-1
-
-encode="iso8859-1 iso8859-2 iso8859-3 \
-	iso8859-4 iso8859-5 iso8859-6 iso8859-7 iso8859-8 iso8859-9 \
-	iso8859-10 iso8859-13 iso8859-14 iso8859-15 \
-	koi8-1 big5-0 ksc5601.1987-0 gb2312.1980-0 jisx0201.1976-0 \
-	jisx0208.1983-0 jisx0212.1990-0 symbol dingbats"
-
-mkdir -p ../headers/
-rm -f ../headers/* ucs2fontmap
-
-for enc in ${encode}
-do
-	echo ${enc}
-
-	case ${enc} in 
-	ksc5601.1987-0)
-#		cat ../MAPPINGS/EASTASIA/KSC/KSC5601.TXT | \
-		cat ../MAPPINGS/EASTASIA/KSC/KSX1001.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	koi8-1)
-		cat ../MAPPINGS/VENDORS/MISC/KOI8-R.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-14)
-		cat ../MAPPINGS/ISO8859/8859-14.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-13)
-		cat ../MAPPINGS/ISO8859/8859-13.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-5)
-		cat ../MAPPINGS/ISO8859/8859-5.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-6)
-		cat ../MAPPINGS/ISO8859/8859-6.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-1)
-		cat ../MAPPINGS/ISO8859/8859-1.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-10)
-		cat ../MAPPINGS/ISO8859/8859-10.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-15)
-		cat ../MAPPINGS/ISO8859/8859-15.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-2)
-		cat ../MAPPINGS/ISO8859/8859-2.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-3)
-		cat ../MAPPINGS/ISO8859/8859-3.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-4)
-		cat ../MAPPINGS/ISO8859/8859-4.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-7)
-		cat ../MAPPINGS/ISO8859/8859-7.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-8)
-		cat ../MAPPINGS/ISO8859/8859-8.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	iso8859-9)
-		cat ../MAPPINGS/ISO8859/8859-9.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	dingbats)
-		cat ../MAPPINGS/VENDORS/ADOBE/zdingbat.txt | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	symbol)
-		cat ../MAPPINGS/VENDORS/ADOBE/symbol.txt | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	big5-0)
-		cat ../MAPPINGS/EASTASIA/OTHER/BIG5.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	gb2312.1980-0)
-		cat ../MAPPINGS/EASTASIA/GB/GB2312.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	jisx0212.1990-0)
-		cat ../MAPPINGS/EASTASIA/JIS/JIS0212.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	jisx0208.1983-0)
-		cat ../MAPPINGS/EASTASIA/JIS/JIS0208.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	jisx0201.1976-0)
-		cat ../MAPPINGS/EASTASIA/JIS/JIS0201.TXT | \
-			./convert_map "${enc}" > ${enc}.txt
-		;;
-	esac
-	nm=`echo ${enc} |tr '.' '_' | tr '-' '_'`
-	cat ${enc}.txt | sort | uniq | \
-	 	./create_table "${nm}"  >> ../headers/${nm}_.h 2>> ../headers/tbl.txt 
-	rm -f ${enc}.txt
-	enc=" "
-done
-
-cat > ../ucs2fontmap.c << ENDOFTEXT
-/*
- * Author: Jean-Marc Lienher ( http://oksid.ch )
- * Copyright 2000-2003 by O'ksi'D.
- *
- * 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:
- *
- *     http://www.fltk.org/COPYING.php
- *
- * Please report all bugs and problems on the following page:
- *
- *     http://www.fltk.org/str.php
- */
-
-ENDOFTEXT
-
-
-he=`cd ..; ls headers/*.h`
-for hea in ${he}
-do
- 	echo "#include \"${hea}\"" >> ../ucs2fontmap.c
-done
-
-
-cat ../headers/tbl.txt | ./conv_gen >> ../ucs2fontmap.c
-
-
--- a/DoConfig/fltk/test/CMakeLists.txt
+++ /dev/null
@@ -1,159 +1,0 @@
-set(EXECUTABLE_OUTPUT_PATH ${FLTK_BINARY_DIR}/bin/examples)
-
-#######################################################################
-# audio libs for test apps
-if(WIN32)
-  set(AUDIOLIBS winmm)
-elseif(APPLE)
-  set(AUDIOLIBS "-framework CoreAudio")
-elseif(HAVE_ALSA_ASOUNDLIB_H)
-  find_library(LIB_asound asound)
-  if(LIB_asound)
-    set(AUDIOLIBS ${LIB_asound})
-  endif(LIB_asound)
-endif(WIN32)
-
-#######################################################################
-include_directories(
-  ${CMAKE_CURRENT_SOURCE_DIR}
-  ${CMAKE_CURRENT_BINARY_DIR}
-  )
-
-#######################################################################
-if (APPLE AND NOT OPTION_APPLE_X11)
-    add_definitions(-DUSING_XCODE)
-endif(APPLE AND NOT OPTION_APPLE_X11)
-
-#######################################################################
-CREATE_EXAMPLE(adjuster adjuster.cxx fltk)
-CREATE_EXAMPLE(arc arc.cxx fltk)
-CREATE_EXAMPLE(animated animated.cxx fltk)
-CREATE_EXAMPLE(ask ask.cxx fltk)
-CREATE_EXAMPLE(bitmap bitmap.cxx fltk)
-
-set(BLOCKS_ICON "${CMAKE_CURRENT_SOURCE_DIR}/blocks.app/Contents/Resources/blocks.icns")
-CREATE_EXAMPLE(blocks "blocks.cxx;${BLOCKS_ICON}" "fltk;${AUDIOLIBS}")
-
-CREATE_EXAMPLE(boxtype boxtype.cxx fltk)
-CREATE_EXAMPLE(browser browser.cxx fltk)
-CREATE_EXAMPLE(button button.cxx fltk)
-CREATE_EXAMPLE(buttons buttons.cxx fltk)
-
-set(CHECKERS_ICON "${CMAKE_CURRENT_SOURCE_DIR}/checkers.app/Contents/Resources/checkers.icns")
-CREATE_EXAMPLE(checkers "checkers.cxx;${CHECKERS_ICON}" fltk)
-
-CREATE_EXAMPLE(clock clock.cxx fltk)
-CREATE_EXAMPLE(colbrowser colbrowser.cxx "fltk;fltk_forms")
-CREATE_EXAMPLE(color_chooser color_chooser.cxx fltk)
-CREATE_EXAMPLE(cursor cursor.cxx fltk)
-CREATE_EXAMPLE(curve curve.cxx fltk)
-
-CREATE_EXAMPLE(demo "demo.cxx;demo.menu" fltk)
-set_source_files_properties(demo.menu PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
-
-CREATE_EXAMPLE(device device.cxx fltk)
-CREATE_EXAMPLE(doublebuffer doublebuffer.cxx fltk)
-
-CREATE_EXAMPLE(editor editor.cxx fltk)
-set_target_properties(editor PROPERTIES
-    MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/ide/Xcode4/plists/editor-Info.plist"
-    )
-
-CREATE_EXAMPLE(fast_slow fast_slow.fl fltk)
-CREATE_EXAMPLE(file_chooser file_chooser.cxx "fltk;fltk_images")
-CREATE_EXAMPLE(fonts fonts.cxx fltk)
-CREATE_EXAMPLE(forms forms.cxx "fltk;fltk_forms")
-CREATE_EXAMPLE(hello hello.cxx fltk)
-CREATE_EXAMPLE(help help.cxx "fltk;fltk_images")
-CREATE_EXAMPLE(icon icon.cxx fltk)
-CREATE_EXAMPLE(iconize iconize.cxx fltk)
-CREATE_EXAMPLE(image image.cxx fltk)
-CREATE_EXAMPLE(inactive inactive.fl fltk)
-CREATE_EXAMPLE(input input.cxx fltk)
-CREATE_EXAMPLE(input_choice input_choice.cxx fltk)
-CREATE_EXAMPLE(keyboard "keyboard.cxx;keyboard_ui.fl" fltk)
-CREATE_EXAMPLE(label label.cxx "fltk;fltk_forms")
-CREATE_EXAMPLE(line_style line_style.cxx fltk)
-CREATE_EXAMPLE(list_visuals list_visuals.cxx fltk)
-CREATE_EXAMPLE(mandelbrot "mandelbrot_ui.fl;mandelbrot.cxx" fltk)
-CREATE_EXAMPLE(menubar menubar.cxx fltk)
-CREATE_EXAMPLE(message message.cxx fltk)
-CREATE_EXAMPLE(minimum minimum.cxx fltk)
-CREATE_EXAMPLE(native-filechooser native-filechooser.cxx "fltk;fltk_images")
-CREATE_EXAMPLE(navigation navigation.cxx fltk)
-CREATE_EXAMPLE(output output.cxx "fltk;fltk_forms")
-CREATE_EXAMPLE(overlay overlay.cxx fltk)
-CREATE_EXAMPLE(pack pack.cxx fltk)
-CREATE_EXAMPLE(pixmap pixmap.cxx fltk)
-CREATE_EXAMPLE(pixmap_browser pixmap_browser.cxx "fltk;fltk_images")
-CREATE_EXAMPLE(preferences preferences.fl fltk)
-CREATE_EXAMPLE(offscreen offscreen.cxx fltk)
-CREATE_EXAMPLE(radio radio.fl fltk)
-CREATE_EXAMPLE(resize resize.fl fltk)
-CREATE_EXAMPLE(resizebox resizebox.cxx fltk)
-CREATE_EXAMPLE(rotated_text rotated_text.cxx fltk)
-CREATE_EXAMPLE(scroll scroll.cxx fltk)
-CREATE_EXAMPLE(subwindow subwindow.cxx fltk)
-
-set(SUDOKU_ICON "${CMAKE_CURRENT_SOURCE_DIR}/sudoku.app/Contents/Resources/sudoku.icns")
-CREATE_EXAMPLE(sudoku "sudoku.cxx;${SUDOKU_ICON}" "fltk;fltk_images;${AUDIOLIBS}")
-
-CREATE_EXAMPLE(symbols symbols.cxx fltk)
-CREATE_EXAMPLE(tabs tabs.fl fltk)
-CREATE_EXAMPLE(table table.cxx fltk)
-CREATE_EXAMPLE(threads threads.cxx fltk)
-CREATE_EXAMPLE(tile tile.cxx fltk)
-CREATE_EXAMPLE(tiled_image tiled_image.cxx fltk)
-CREATE_EXAMPLE(tree tree.fl fltk)
-CREATE_EXAMPLE(twowin twowin.cxx fltk)
-CREATE_EXAMPLE(utf8 utf8.cxx fltk)
-CREATE_EXAMPLE(valuators valuators.fl fltk)
-CREATE_EXAMPLE(unittests unittests.cxx fltk)
-CREATE_EXAMPLE(windowfocus windowfocus.cxx fltk)
-
-CREATE_EXAMPLE(fltk-versions ../examples/fltk-versions.cxx fltk)
-
-# OpenGL demos...
-if(OPENGL_FOUND)
-CREATE_EXAMPLE(CubeView "CubeMain.cxx;CubeView.cxx;CubeViewUI.fl" "fltk;fltk_gl")
-CREATE_EXAMPLE(cube cube.cxx "fltk;fltk_gl;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(fractals "fractals.cxx;fracviewer.cxx" "fltk;fltk_gl")
-CREATE_EXAMPLE(fullscreen fullscreen.cxx "fltk;fltk_gl")
-CREATE_EXAMPLE(glpuzzle glpuzzle.cxx "fltk;fltk_gl;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(gl_overlay gl_overlay.cxx "fltk;fltk_gl;${OPENGL_LIBRARIES}")
-CREATE_EXAMPLE(shape shape.cxx "fltk;fltk_gl;${OPENGL_LIBRARIES}")
-endif(OPENGL_FOUND)
-
-# Cairo demo
-if(FLTK_HAVE_CAIRO)
-   CREATE_EXAMPLE(cairo_test cairo_test.cxx "fltk;fltk_cairo")
-endif(FLTK_HAVE_CAIRO)
-
-# We need some support files for the demo programs:
-
-# Note: this is incomplete as of 11 Feb 2015
-# Todo: currently all files are copied, but some of them need configuration:
-# - demo.menu: fluid can't be started (wrong path)
-# - demo.menu: help (help-test.html) can't find its images (not copied)
-# - maybe more ...
-
-# prepare for a "better" test file installation path
-set (TESTFILE_PATH ${EXECUTABLE_OUTPUT_PATH})
-
-# *FIXME* *DEBUG*
-# message ("test/CMakeLists.txt: EXECUTABLE_OUTPUT_PATH = '${EXECUTABLE_OUTPUT_PATH}'")
-# message ("test/CMakeLists.txt: TESTFILE_PATH          = '${TESTFILE_PATH}'")
-
-# use a target filename to make sure the target directory gets created
-configure_file(demo.menu ${TESTFILE_PATH}/demo.menu COPYONLY)
-
-# use target directory only to avoid redundancy
-configure_file(rgb.txt ${TESTFILE_PATH} COPYONLY)
-configure_file(help-test.html ${TESTFILE_PATH} COPYONLY)
-configure_file(browser.cxx ${TESTFILE_PATH} COPYONLY)
-configure_file(editor.cxx ${TESTFILE_PATH} COPYONLY)
-if(APPLE AND NOT OPTION_APPLE_X11)
-    configure_file(browser.cxx "${TESTFILE_PATH}/browser.app/Contents/Resources/browser.cxx" COPYONLY)
-    configure_file(rgb.txt ${TESTFILE_PATH}/colbrowser.app/Contents/Resources/rgb.txt COPYONLY)
-    configure_file(help-test.html ${TESTFILE_PATH}/help.app/Contents/Resources/help-test.html COPYONLY)
-endif(APPLE AND NOT OPTION_APPLE_X11)
--- a/DoConfig/fltk/test/CubeMain.cxx
+++ /dev/null
@@ -1,40 +1,0 @@
-//
-// "$Id$"
-//
-// CubeView class .
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include "CubeViewUI.h"
-
-int
-main(int argc, char **argv) {
-
-    CubeViewUI *cvui=new CubeViewUI;
-    
-//Initial global objects.
-    
-    Fl::visual(FL_DOUBLE|FL_INDEX);
-
-    cvui->show(argc, argv);
-    
-    return Fl::run();
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/CubeView.cxx
+++ /dev/null
@@ -1,164 +1,0 @@
-//
-// "$Id$"
-//
-// CubeView class implementation for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "CubeView.h"
-#include <math.h>
-
-
-#if HAVE_GL
-CubeView::CubeView(int x,int y,int w,int h,const char *l)
-            : Fl_Gl_Window(x,y,w,h,l)
-#else
-CubeView::CubeView(int x,int y,int w,int h,const char *l)
-            : Fl_Box(x,y,w,h,l)
-#endif /* HAVE_GL */
-{
-    vAng = 0.0;
-    hAng=0.0;
-    size=10.0;
-    xshift=0.0;
-    yshift=0.0;
-    
-    /* The cube definition. These are the vertices of a unit cube
-     * centered on the origin.*/
-    
-    boxv0[0] = -0.5; boxv0[1] = -0.5; boxv0[2] = -0.5;
-    boxv1[0] =  0.5; boxv1[1] = -0.5; boxv1[2] = -0.5;
-    boxv2[0] =  0.5; boxv2[1] =  0.5; boxv2[2] = -0.5;
-    boxv3[0] = -0.5; boxv3[1] =  0.5; boxv3[2] = -0.5;
-    boxv4[0] = -0.5; boxv4[1] = -0.5; boxv4[2] =  0.5;
-    boxv5[0] =  0.5; boxv5[1] = -0.5; boxv5[2] =  0.5;
-    boxv6[0] =  0.5; boxv6[1] =  0.5; boxv6[2] =  0.5;
-    boxv7[0] = -0.5; boxv7[1] =  0.5; boxv7[2] =  0.5;
-
-#if !HAVE_GL
-    label("OpenGL is required for this demo to operate.");
-    align(FL_ALIGN_WRAP | FL_ALIGN_INSIDE);
-#endif /* !HAVE_GL */
-}
-
-#if HAVE_GL
-void CubeView::drawCube() {
-/* Draw a colored cube */
-#define ALPHA 0.5
-    glShadeModel(GL_FLAT);
-
-    glBegin(GL_QUADS);
-      glColor4f(0.0, 0.0, 1.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv3);
-
-      glColor4f(1.0, 1.0, 0.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv1);
-
-      glColor4f(0.0, 1.0, 1.0, ALPHA);
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv3);
-
-      glColor4f(1.0, 0.0, 0.0, ALPHA);
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-
-      glColor4f(1.0, 0.0, 1.0, ALPHA);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv4);
-
-      glColor4f(0.0, 1.0, 0.0, ALPHA);
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv2);
-    glEnd();
-
-    glColor3f(1.0, 1.0, 1.0);
-    glBegin(GL_LINES);
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv1);
-
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv2);
-
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv3);
-
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv0);
-
-      glVertex3fv(boxv4);
-      glVertex3fv(boxv5);
-
-      glVertex3fv(boxv5);
-      glVertex3fv(boxv6);
-
-      glVertex3fv(boxv6);
-      glVertex3fv(boxv7);
-
-      glVertex3fv(boxv7);
-      glVertex3fv(boxv4);
-
-      glVertex3fv(boxv0);
-      glVertex3fv(boxv4);
-
-      glVertex3fv(boxv1);
-      glVertex3fv(boxv5);
-
-      glVertex3fv(boxv2);
-      glVertex3fv(boxv6);
-
-      glVertex3fv(boxv3);
-      glVertex3fv(boxv7);
-    glEnd();
-}//drawCube
-
-void CubeView::draw() {
-    if (!valid()) {
-        glLoadIdentity();
-        glViewport(0,0,w(),h());
-        glOrtho(-10,10,-10,10,-20050,10000);
-        glEnable(GL_BLEND);
-        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    }
-
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-    glPushMatrix();
-
-    glTranslatef((GLfloat) xshift, (GLfloat) yshift, 0);
-    glRotatef((GLfloat) hAng,0,1,0); glRotatef((GLfloat) vAng,1,0,0);
-    glScalef(float(size),float(size),float(size));
-
-    drawCube();
-    
-    glPopMatrix();
-}
-#endif /* HAVE_GL */
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/CubeView.h
+++ /dev/null
@@ -1,115 +1,0 @@
-//
-// "$Id$"
-//
-// CubeView class definitions for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef CUBEVIEW_H
-#define CUBEVIEW_H 1
-#include <config.h>
-#include <FL/Fl.H>
-#if HAVE_GL
-#  include <FL/Fl_Gl_Window.H>
-#  include <FL/gl.h>
-#else
-#  include <FL/Fl_Box.H>
-#endif /* HAVE_GL */
-
-#include <stdlib.h>
-
-#if HAVE_GL
-class CubeView : public Fl_Gl_Window {
-#else
-class CubeView : public Fl_Box {
-#endif /* HAVE_GL */
-
-public:
-    // this value determines the scaling factor used to draw the cube.
-    double size;
-
-    CubeView(int x,int y,int w,int h,const char *l=0);
-
-    /* Set the rotation about the vertical (y ) axis.
-     *
-     * This function is called by the horizontal roller in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-    void v_angle(double angle){vAng=angle;}
-    
-    // Return the rotation about the vertical (y ) axis.
-    double v_angle() const {return vAng;}
-
-    /* Set the rotation about the horizontal (x ) axis.
-     *
-     * This function is called by the vertical roller in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-
-    void h_angle(double angle){hAng=angle;}
-
-    // the rotation about the horizontal (x ) axis.
-    double h_angle() const {return hAng;}
-
-    /* Sets the x shift of the cube view camera.
-     *
-     * This function is called by the slider in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-    void panx(double x){xshift=x;}
-    /* Sets the y shift of the cube view camera.
-     *
-     * This function is called by the slider in CubeViewUI and the
-     * initialize button in CubeViewUI.
-     */
-    void pany(double y){yshift=y;}
-
-#if HAVE_GL
-    /*The widget class draw() override.
-     *
-     *The draw() function initialize Gl for another round o f drawing
-     * then calls specialized functions for drawing each of the
-     * entities displayed in the cube view.
-     *
-     */
-    void draw();    
-#endif /* HAVE_GL */
-private:
-
-    /*  Draw the cube boundaries
-     *
-     *Draw the faces of the cube using the boxv[] vertices, using
-     * GL_LINE_LOOP for the faces. The color is \#defined by CUBECOLOR.
-     */
-#if HAVE_GL
-    void drawCube();
-#else
-    void drawCube() { }
-#endif /* HAVE_GL */
-    
-    double vAng,hAng;
-    double xshift,yshift;
-
-
-    float boxv0[3];float boxv1[3];
-    float boxv2[3];float boxv3[3];
-    float boxv4[3];float boxv5[3];
-    float boxv6[3];float boxv7[3];
-
-};
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/CubeViewUI.fl
+++ /dev/null
@@ -1,75 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-class CubeViewUI {open
-} {
-  Function {CubeViewUI()} {open
-  } {
-    Fl_Window mainWindow {
-      label CubeView open
-      private xywh {428 124 415 405} type Double box UP_BOX labelsize 12 hide resizable
-    } {
-      Fl_Group {} {open
-        xywh {5 3 374 399}
-      } {
-        Fl_Group VChange {open
-          xywh {5 100 37 192}
-        } {
-          Fl_Roller vrot {
-            label {V Rot}
-            callback {cube->v_angle(((Fl_Roller *)o)->value());
-cube->redraw();}
-            xywh {5 100 17 186} labeltype NO_LABEL labelsize 12 align 128 minimum -180 maximum 180 step 1
-            code0 {\#include <stdio.h>}
-          }
-          Fl_Slider ypan {
-            label {V Pan}
-            callback {cube->pany(((Fl_Slider *)o)->value());
-cube->redraw();}
-            xywh {25 100 17 186} type {Vert Knob} selection_color 136 labeltype NO_LABEL labelsize 12 align 0 minimum -25 maximum 25 step 0.1
-          }
-        }
-        Fl_Group HChange {open
-          xywh {120 362 190 40}
-        } {
-          Fl_Slider xpan {
-            label {H Pan}
-            callback {cube->panx(((Fl_Slider *)o)->value());
-cube->redraw();}
-            xywh {122 364 186 17} type {Horz Knob} selection_color 136 labeltype NO_LABEL labelsize 12 align 16 minimum 25 maximum -25 step 0.1
-          }
-          Fl_Roller hrot {
-            label {H Rotation}
-            callback {cube->h_angle(((Fl_Roller *)o)->value());
-cube->redraw();}
-            xywh {122 383 186 17} type Horizontal labeltype NO_LABEL labelsize 12 align 8 minimum -180 maximum 180 step 1
-          }
-        }
-        Fl_Group MainView {open
-          xywh {46 27 333 333} resizable
-        } {
-          Fl_Box cframe {
-            xywh {46 27 333 333} box DOWN_FRAME color 4 selection_color 69
-          }
-          Fl_Box cube {
-            label {This is the cube_view} selected
-            xywh {48 29 329 329} align 16 resizable
-            code0 {\#include "CubeView.h"}
-            class CubeView
-          }
-        }
-        Fl_Value_Slider zoom {
-          label Zoom
-          callback {cube->size=((Fl_Value_Slider *)o)->value();
-cube->redraw();}
-          xywh {106 3 227 19} type {Horz Knob} selection_color 136 labelfont 1 labelsize 12 align 4 minimum 1 maximum 50 step 0.1 value 10 textfont 1
-        }
-      }
-    }
-  }
-  Function {show(int argc, char **argv)} {open
-  } {
-    code {mainWindow->show(argc, argv);} {}
-  }
-}
--- a/DoConfig/fltk/test/Makefile
+++ /dev/null
@@ -1,556 +1,0 @@
-#
-# "$Id$"
-#
-# Test/example program makefile for the Fast Light Tool Kit (FLTK).
-#
-# Copyright 1998-2019 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
-# file is missing or damaged, see the license at:
-#
-#      http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#      http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-CPPFILES =\
-	adjuster.cxx \
-	animated.cxx \
-	arc.cxx \
-	ask.cxx \
-	bitmap.cxx \
-	blocks.cxx \
-	boxtype.cxx \
-	browser.cxx \
-	button.cxx \
-	buttons.cxx \
-	cairo_test.cxx \
-	checkers.cxx \
-	clock.cxx \
-	colbrowser.cxx \
-	color_chooser.cxx \
-	cube.cxx \
-	CubeMain.cxx \
-	CubeView.cxx \
-	cursor.cxx \
-	curve.cxx \
-	demo.cxx \
-	device.cxx \
-	doublebuffer.cxx \
-	editor.cxx \
-	fast_slow.cxx \
-	file_chooser.cxx \
-	fonts.cxx \
-	forms.cxx \
-	fractals.cxx \
-	fracviewer.cxx \
-	fullscreen.cxx \
-	gl_overlay.cxx \
-	glpuzzle.cxx \
-	hello.cxx \
-	help.cxx \
-	icon.cxx \
-	iconize.cxx \
-	image.cxx \
-	inactive.cxx \
-	input.cxx \
-	input_choice.cxx \
-	keyboard.cxx \
-	label.cxx \
-	line_style.cxx \
-	list_visuals.cxx \
-	mandelbrot.cxx \
-	menubar.cxx \
-	message.cxx \
-	minimum.cxx \
-	native-filechooser.cxx \
-	navigation.cxx \
-	offscreen.cxx \
-	output.cxx \
-	overlay.cxx \
-	pack.cxx \
-	pixmap_browser.cxx \
-	pixmap.cxx \
-	preferences.cxx \
-	radio.cxx \
-	resizebox.cxx \
-	resize.cxx \
-	rotated_text.cxx \
-	scroll.cxx \
-	shape.cxx \
-	subwindow.cxx \
-	sudoku.cxx \
-	symbols.cxx \
-	table.cxx \
-	tabs.cxx \
-	threads.cxx \
-	tile.cxx \
-	tiled_image.cxx \
-	tree.cxx \
-	twowin.cxx \
-	unittests.cxx \
-	utf8.cxx \
-	valuators.cxx \
-	windowfocus.cxx
-
-ALL =	\
-	unittests$(EXEEXT) \
-	animated$(EXEEXT) \
-	adjuster$(EXEEXT) \
-	arc$(EXEEXT) \
-	ask$(EXEEXT) \
-	bitmap$(EXEEXT) \
-	blocks$(EXEEXT) \
-	boxtype$(EXEEXT) \
-	browser$(EXEEXT) \
-	button$(EXEEXT) \
-	buttons$(EXEEXT) \
-	cairo_test$(EXEEXT) \
-	checkers$(EXEEXT) \
-	clock$(EXEEXT) \
-	colbrowser$(EXEEXT) \
-	color_chooser$(EXEEXT) \
-	cursor$(EXEEXT) \
-	curve$(EXEEXT) \
-	demo$(EXEEXT) \
-	device$(EXEEXT) \
-	doublebuffer$(EXEEXT) \
-	editor$(EXEEXT) \
-	fast_slow$(EXEEXT) \
-	file_chooser$(EXEEXT) \
-	fonts$(EXEEXT) \
-	forms$(EXEEXT) \
-	hello$(EXEEXT) \
-	help$(EXEEXT) \
-	icon$(EXEEXT) \
-	iconize$(EXEEXT) \
-	image$(EXEEXT) \
-	inactive$(EXEEXT) \
-	input$(EXEEXT) \
-	input_choice$(EXEEXT) \
-	keyboard$(EXEEXT) \
-	label$(EXEEXT) \
-	line_style$(EXEEXT) \
-	list_visuals$(EXEEXT) \
-	mandelbrot$(EXEEXT) \
-	menubar$(EXEEXT) \
-	message$(EXEEXT) \
-	minimum$(EXEEXT) \
-	native-filechooser$(EXEEXT) \
-	navigation$(EXEEXT) \
-	offscreen$(EXEEXT) \
-	output$(EXEEXT) \
-	overlay$(EXEEXT) \
-	pack$(EXEEXT) \
-	pixmap$(EXEEXT) \
-	pixmap_browser$(EXEEXT) \
-	preferences$(EXEEXT) \
-	device$(EXEEXT) \
-	radio$(EXEEXT) \
-	resize$(EXEEXT) \
-	resizebox$(EXEEXT) \
-	rotated_text$(EXEEXT) \
-	scroll$(EXEEXT) \
-	subwindow$(EXEEXT) \
-	sudoku$(EXEEXT) \
-	symbols$(EXEEXT) \
-	table$(EXEEXT) \
-	tabs$(EXEEXT) \
-	$(THREADS) \
-	tile$(EXEEXT) \
-	tiled_image$(EXEEXT) \
-	tree$(EXEEXT) \
-	twowin$(EXEEXT) \
-	valuators$(EXEEXT) \
-	cairotest$(EXEEXT) \
-	utf8$(EXEEXT) \
-	windowfocus$(EXEEXT)
-
-
-GLALL = \
-	cube$(EXEEXT) \
-	CubeView$(EXEEXT) \
-	fractals$(EXEEXT) \
-	fullscreen$(EXEEXT) \
-	gl_overlay$(EXEEXT) \
-	glpuzzle$(EXEEXT) \
-	shape$(EXEEXT)
-
-all:	$(ALL) $(GLDEMOS)
-
-gldemos:	$(GLALL)
-
-depend:	$(CPPFILES)
-	makedepend -Y -I.. -f makedepend $(CPPFILES)
-
-# Automatically generated dependencies...
-include makedepend
-
-clean:
-	$(RM) $(ALL) $(GLALL) core
-	for file in $(ALL) $(GLALL); do \
-		if [ $$file = "blocks" -o $$file = "checkers" -o $$file = "sudoku" ]; then \
-			continue; \
-		fi; \
-		$(OSX_ONLY) rm -f -r $$file.app; \
-	done
-	$(RM) *.o core.* *~ *.bck *.bak
-	$(RM) CubeViewUI.cxx CubeViewUI.h
-	$(RM) fast_slow.cxx fast_slow.h
-	$(RM) inactive.cxx inactive.h
-	$(RM) keyboard_ui.cxx keyboard_ui.h
-	$(RM) mandelbrot_ui.cxx mandelbrot_ui.h
-	$(RM) preferences.cxx preferences.h
-	$(RM) radio.cxx radio.h
-	$(RM) resize.cxx resize.h
-	$(RM) tabs.cxx tabs.h
-	$(RM) tree.cxx tree.h
-	$(RM) valuators.cxx valuators.h
-	$(OSX_ONLY) $(RM) blocks.app/Contents/MacOS/blocks$(EXEEXT)
-	$(OSX_ONLY) $(RM) checkers.app/Contents/MacOS/checkers$(EXEEXT)
-	$(OSX_ONLY) $(RM) sudoku.app/Contents/MacOS/sudoku$(EXEEXT)
-
-install:	all
-	echo "Installing example programs to $(DESTDIR)$(docdir)/examples..."
-	-$(INSTALL_DIR) $(DESTDIR)$(docdir)/examples
-	for file in *.h *.cxx *.fl demo.menu; do \
-		$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/examples; \
-	done
-	-$(INSTALL_DIR) $(DESTDIR)$(docdir)/examples/pixmaps
-	for file in pixmaps/*.xbm pixmaps/*.xpm; do \
-		$(INSTALL_DATA) $$file $(DESTDIR)$(docdir)/examples/pixmaps; \
-	done
-
-install-linux:
-	echo Installing games to $(DESTDIR)$(bindir)...
-	-$(INSTALL_DIR) $(DESTDIR)$(bindir)
-	-$(INSTALL_DIR) $(DESTDIR)/usr/share/applications
-	-$(INSTALL_DIR) $(DESTDIR)/usr/share/icons/hicolor/32x32/apps
-	-$(INSTALL_DIR) $(DESTDIR)/usr/share/icons/hicolor/128x128/apps
-	for game in blocks checkers sudoku; do \
-		$(INSTALL_BIN) $$game $(DESTDIR)$(bindir); \
-		$(INSTALL_DATA) desktop/$$game.desktop  $(DESTDIR)/usr/share/applications; \
-		$(INSTALL_DATA) desktop/$$game-32.png $(DESTDIR)/usr/share/icons/hicolor/32x32/apps/$$game.png; \
-		$(INSTALL_DATA) desktop/$$game-128.png $(DESTDIR)/usr/share/icons/hicolor/128x128/apps/$$game.png; \
-	done
-
-install-osx:
-	echo Installing games in $(DESTDIR)/Applications...
-	for game in blocks checkers sudoku; do \
-		if test ! -d $(DESTDIR)/Applications/$$game.app; then \
-			$(INSTALL_DIR) $(DESTDIR)/Applications/$$game.app; \
-			$(INSTALL_DIR) $(DESTDIR)/Applications/$$game.app/Contents; \
-			$(INSTALL_DIR) $(DESTDIR)/Applications/$$game.app/Contents/MacOS; \
-			$(INSTALL_DIR) $(DESTDIR)/Applications/$$game.app/Contents/Resources; \
-		fi; \
-		$(INSTALL_DATA) $$game.app/Contents/Info.plist $(DESTDIR)/Applications/$$game.app/Contents; \
-		$(INSTALL_DATA) $$game.app/Contents/PkgInfo $(DESTDIR)/Applications/$$game.app/Contents; \
-		$(INSTALL_BIN) $$game.app/Contents/MacOS/$$game $(DESTDIR)/Applications/$$game.app/Contents/MacOS; \
-		$(INSTALL_DATA) $$game.app/Contents/Resources/$$game.icns $(DESTDIR)/Applications/$$game.app/Contents/Resources; \
-	done
-
-uninstall:
-	echo "Removing examples programs from $(DESTDIR)$(docdir)/examples..."
-	-$(RMDIR) $(DESTDIR)$(docdir)/examples
-
-uninstall-linux:
-	echo Removing games from $(DESTDIR)$(bindir)...
-	for game in blocks checkers sudoku; do \
-		$(RM) $(DESTDIR)$(bindir)/$$game; \
-		$(RM) $(DESTDIR)/usr/share/applications/$$game.desktop; \
-		$(RM) $(DESTDIR)/usr/share/icons/hicolor/32x32/apps/$$game.png; \
-		$(RM) $(DESTDIR)/usr/share/icons/hicolor/128x128/apps/$$game.png; \
-	done
-
-uninstall-osx:
-	echo Removing games from $(DESTDIR)/Applications...
-	$(RMDIR) $(DESTDIR)/Applications/blocks.app
-	$(RMDIR) $(DESTDIR)/Applications/checkers.app
-	$(RMDIR) $(DESTDIR)/Applications/sudoku.app
-
-# FLUID file rules
-.fl.cxx .fl.h:	../fluid/fluid$(EXEEXT)
-	echo Generating $@ and header from $<...
-	../fluid/fluid$(EXEEXT) -c $<
-
-# All demos depend on the FLTK library...
-$(ALL): $(LIBNAME)
-
-# General demos...
-unittests$(EXEEXT): unittests.o
-
-unittests.o: unittests.cxx unittest_about.cxx unittest_points.cxx unittest_lines.cxx unittest_circles.cxx \
-	unittest_rects.cxx unittest_text.cxx unittest_symbol.cxx unittest_viewport.cxx unittest_images.cxx \
-	unittest_schemes.cxx unittest_scrollbarsize.cxx
-
-adjuster$(EXEEXT): adjuster.o
-
-animated$(EXEEXT): animated.o
-
-arc$(EXEEXT): arc.o
-
-ask$(EXEEXT): ask.o
-
-bitmap$(EXEEXT): bitmap.o
-
-boxtype$(EXEEXT): boxtype.o
-
-browser$(EXEEXT): browser.o
-
-button$(EXEEXT): button.o
-
-buttons$(EXEEXT): buttons.o
-
-blocks$(EXEEXT): blocks.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) blocks.o -o $@ $(AUDIOLIBS) $(LINKFLTK) $(LDLIBS)
-	$(OSX_ONLY) $(RM) -r -f blocks.app/Contents/MacOS
-	$(OSX_ONLY) mkdir blocks.app/Contents/MacOS
-	$(OSX_ONLY) $(INSTALL_BIN) blocks$(EXEEXT) blocks.app/Contents/MacOS
-
-checkers$(EXEEXT): checkers.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) checkers.o -o $@ $(LINKFLTK) $(LDLIBS)
-	$(OSX_ONLY) $(RM) -r -f checkers.app/Contents/MacOS
-	$(OSX_ONLY) mkdir checkers.app/Contents/MacOS
-	$(OSX_ONLY) $(INSTALL_BIN) checkers$(EXEEXT) checkers.app/Contents/MacOS
-
-clock$(EXEEXT): clock.o
-
-colbrowser$(EXEEXT): colbrowser.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ colbrowser.o $(LINKFLTKFORMS) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-	$(OSX_ONLY) mkdir -p colbrowser.app/Contents/Resources
-	$(OSX_ONLY) cp -f rgb.txt colbrowser.app/Contents/Resources/
-
-color_chooser$(EXEEXT): color_chooser.o
-
-cursor$(EXEEXT): cursor.o
-
-curve$(EXEEXT): curve.o
-
-demo$(EXEEXT): demo.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ demo.o $(LINKFLTKFORMS) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-	$(OSX_ONLY) mkdir -p demo.app/Contents/Resources
-	$(OSX_ONLY) cp -f demo.menu demo.app/Contents/Resources/
-
-device$(EXEEXT): device.o $(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) device.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-doublebuffer$(EXEEXT): doublebuffer.o
-
-editor$(EXEEXT): editor.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) editor.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-	$(OSX_ONLY) cp -f ../ide/Xcode4/plists/editor-Info.plist editor.app/Contents/Info.plist
-
-fast_slow$(EXEEXT): fast_slow.o
-fast_slow.cxx:	fast_slow.fl ../fluid/fluid$(EXEEXT)
-
-file_chooser$(EXEEXT): file_chooser.o $(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) file_chooser.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-fonts$(EXEEXT): fonts.o
-
-forms$(EXEEXT): forms.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ forms.o $(LINKFLTKFORMS) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-hello$(EXEEXT): hello.o
-
-help$(EXEEXT): help.o $(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) help.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-	$(OSX_ONLY) mkdir -p help.app/Contents/Resources
-	$(OSX_ONLY) cp -f help-test.html help.app/Contents/Resources/
-
-icon$(EXEEXT): icon.o
-
-iconize$(EXEEXT): iconize.o
-
-image$(EXEEXT): image.o
-
-inactive$(EXEEXT): inactive.o
-inactive.cxx:	inactive.fl ../fluid/fluid$(EXEEXT)
-
-input$(EXEEXT): input.o
-
-input_choice$(EXEEXT): input_choice.o
-
-keyboard$(EXEEXT): keyboard_ui.o keyboard.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ keyboard.o keyboard_ui.o $(LINKFLTK) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-keyboard_ui.o:	keyboard_ui.h
-keyboard_ui.cxx:	keyboard_ui.fl ../fluid/fluid$(EXEEXT)
-
-label$(EXEEXT): label.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ label.o $(LINKFLTKFORMS) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-line_style$(EXEEXT): line_style.o
-
-list_visuals$(EXEEXT): list_visuals.o
-
-mandelbrot$(EXEEXT): mandelbrot_ui.o mandelbrot.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ mandelbrot.o mandelbrot_ui.o $(LINKFLTK) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-mandelbrot_ui.o:	mandelbrot_ui.h
-mandelbrot_ui.cxx:	mandelbrot_ui.fl ../fluid/fluid$(EXEEXT)
-
-menubar$(EXEEXT): menubar.o
-
-message$(EXEEXT): message.o
-
-minimum$(EXEEXT): minimum.o
-
-native-filechooser$(EXEEXT): native-filechooser.o $(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) native-filechooser.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-navigation$(EXEEXT): navigation.o
-
-offscreen$(EXEEXT): offscreen.o
-
-output$(EXEEXT): output.o $(FLLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ output.o $(LINKFLTKFORMS) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-overlay$(EXEEXT): overlay.o
-
-pack$(EXEEXT): pack.o
-
-pixmap$(EXEEXT): pixmap.o
-
-pixmap_browser$(EXEEXT): pixmap_browser.o $(IMGLIBNAME)
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) pixmap_browser.o -o $@ $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-preferences$(EXEEXT):	preferences.o
-preferences.cxx:	preferences.fl ../fluid/fluid$(EXEEXT)
-
-device$(EXEEXT): device.o
-
-radio$(EXEEXT): radio.o
-radio.cxx:	radio.fl ../fluid/fluid$(EXEEXT)
-
-resize$(EXEEXT): resize.o
-resize.cxx:	resize.fl ../fluid/fluid$(EXEEXT)
-
-resizebox$(EXEEXT): resizebox.o
-
-rotated_text$(EXEEXT): rotated_text.o
-
-scroll$(EXEEXT): scroll.o
-
-subwindow$(EXEEXT): subwindow.o
-
-sudoku: sudoku.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) sudoku.o -o $@ $(AUDIOLIBS) $(LINKFLTKIMG) $(LDLIBS)
-	$(OSX_ONLY) $(RM) -r -f sudoku.app/Contents/MacOS
-	$(OSX_ONLY) mkdir sudoku.app/Contents/MacOS
-	$(OSX_ONLY) $(INSTALL_BIN) sudoku$(EXEEXT) sudoku.app/Contents/MacOS
-
-sudoku.exe: sudoku.o sudoku.rc
-	echo Linking $@...
-	$(RC) sudoku.rc sudokures.o
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) sudoku.o sudokures.o -o $@ $(AUDIOLIBS) $(LINKFLTKIMG) $(LDLIBS)
-
-symbols$(EXEEXT): symbols.o
-
-table$(EXEEXT): table.o
-
-tabs$(EXEEXT): tabs.o
-tabs.cxx:	tabs.fl ../fluid/fluid$(EXEEXT)
-
-threads$(EXEEXT): threads.o
-# This ensures that we have this dependency even if threads are not
-# enabled in the current tree...
-threads.o:	threads.h
-
-tile$(EXEEXT): tile.o
-
-tiled_image$(EXEEXT): tiled_image.o
-
-tree$(EXEEXT): tree.o
-tree.cxx:	tree.fl ../fluid/fluid$(EXEEXT)
-
-twowin$(EXEEXT): twowin.o
-
-valuators$(EXEEXT): valuators.o
-valuators.cxx:	valuators.fl ../fluid/fluid$(EXEEXT)
-
-# All OpenGL demos depend on the FLTK and FLTK_GL libraries...
-$(GLALL): $(LIBNAME) $(GLLIBNAME)
-
-# OpenGL demos...
-CubeView$(EXEEXT): CubeMain.o CubeView.o CubeViewUI.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ \
-		CubeMain.o CubeView.o CubeViewUI.o \
-		$(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-CubeMain.o: CubeViewUI.h CubeView.h CubeViewUI.cxx
-CubeView.o: CubeView.h
-CubeViewUI.o:	CubeViewUI.cxx CubeViewUI.h
-CubeViewUI.cxx:	CubeViewUI.fl ../fluid/fluid$(EXEEXT)
-
-cube$(EXEEXT): cube.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ cube.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-fractals$(EXEEXT): fractals.o fracviewer.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ fractals.o fracviewer.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-fullscreen$(EXEEXT): fullscreen.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ fullscreen.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-glpuzzle$(EXEEXT): glpuzzle.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ glpuzzle.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-gl_overlay$(EXEEXT): gl_overlay.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ gl_overlay.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-shape$(EXEEXT): shape.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ shape.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-cairo_test$(EXEEXT): cairo_test.o
-	echo Linking $@...
-	$(CXX) $(ARCHFLAGS) $(CXXFLAGS) $(CAIROFLAGS) $(LDFLAGS) -o $@ cairo_test.o $(LINKFLTK) $(LINKFLTKCAIRO) $(GLDLIBS)
-	$(OSX_ONLY) ../fltk-config --post $@
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/test/README
+++ /dev/null
@@ -1,30 +1,0 @@
-test/README - 20 Oct 1998
--------------------------
-
-This directory contains tests and demos of FL.  In most cases you can
-learn a lot about how to program FL by looking at the source code.
-
-Type "make" to compile them all.
-
-The program "demo" is a graphical interface to run all the demos. (you
-may recognize this as a rewrite of an XForms program).
-
-Some of the more interesting programs:
-
-fractals:	A GLUT program with FL controls added to it
-
-glpuzzle:	A GLUT program with no modifications
-
-fullscreen:	Demo of how to make your window toggle to fill screen
-
-list_visuals:	necessary to debug X visual stuff
-
-mandelbrot:	A true application, using panels built in Fluid
-
-menubar:	Demo of how FL's menus work
-
-shiny:		Demo of drawing FL's controls using OpenGL
-
-forms:		An XForms program to demonstrate emulation
-
-colbrowser:	Another XForms program that is actually useful
--- a/DoConfig/fltk/test/adjuster.cxx
+++ /dev/null
@@ -1,57 +1,0 @@
-//
-// "$Id$"
-//
-// Adjuster test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Adjuster.H>
-#include <FL/Fl_Box.H>
-
-void adjcb(Fl_Widget *o, void *v) {
-  Fl_Adjuster *a = (Fl_Adjuster*)o;
-  Fl_Box *b = (Fl_Box *)v;
-  a->format((char *)(b->label()));
-  b->redraw();
-}
-
-int main(int argc, char ** argv) {
-   Fl_Double_Window window(320,100,argv[0]);
-
-   char buf1[100];
-   Fl_Box b1(FL_DOWN_BOX,20,30,80,25,buf1);
-   b1.color(FL_WHITE);
-   Fl_Adjuster a1(20+80,30,3*25,25);
-   a1.callback(adjcb,&b1);
-   adjcb(&a1,&b1);
-
-   char buf2[100];
-   Fl_Box b2(FL_DOWN_BOX,20+80+4*25,30,80,25,buf2);
-   b2.color(FL_WHITE);
-   Fl_Adjuster a2(b2.x()+b2.w(),10,25,3*25);
-   a2.callback(adjcb,&b2);
-   adjcb(&a2,&b2);
-
-   window.resizable(window);
-   window.end();
-   window.show(argc, argv);
-   return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/animated.cxx
+++ /dev/null
@@ -1,155 +1,0 @@
-//
-// "$Id$"
-//
-// Alpha rendering benchmark program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Image.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-enum {
-  FRAMES = 48,
-  DIM = 256
-};
-
-static Fl_RGB_Image *img[FRAMES];
-static uchar curframe;
-
-static void make_images() {
-
-  unsigned i;
-  for (i = 0; i < FRAMES; i++) {
-    const unsigned size = DIM * DIM * 4;
-    uchar *data = new uchar[size];
-
-    memset(data, 0, size);
-
-    // First a black box, 10x10 pixels in the top-left corner
-    int x, y;
-    for (x = 0; x < 10; x++) {
-      for (y = 0; y < 10; y++) {
-        data[y * DIM * 4 + x * 4 + 3] = 255;
-      }
-    }
-
-    // A fading sphere
-    uchar alpha = 255;
-    if (i < FRAMES / 2)
-      alpha = (uchar)(255 * (i / ((float) FRAMES / 2)));
-    else
-      alpha = (uchar)(255 * (((FRAMES / 2) - (i - FRAMES / 2)) / ((float) FRAMES / 2)));
-
-    const int spherew = 60;
-    const int spherex = (DIM - spherew) / 2;
-    const int maxdist = (spherew / 2) * (spherew / 2);
-    for (x = spherex; x < spherex + spherew; x++) {
-      for (y = 20; y < 20 + spherew; y++) {
-
-        float distx = x - (spherex + (float) spherew / 2);
-        float disty = y - (20 + (float) spherew / 2);
-        float dist = distx * distx + disty * disty;
-
-        if (dist > maxdist)
-          continue;
-
-        const float fill = dist / maxdist;
-        const uchar grey = (uchar)(fill * 255);
-
-        uchar myalpha = alpha;
-        if (fill > 0.9)
-          myalpha = (uchar)(myalpha * (1.0f - fill) * 10);
-
-        data[y * DIM * 4 + x * 4 + 0] = grey;
-        data[y * DIM * 4 + x * 4 + 1] = grey;
-        data[y * DIM * 4 + x * 4 + 2] = grey;
-        data[y * DIM * 4 + x * 4 + 3] = myalpha;
-      }
-    }
-
-    // A moving blob
-    const float pos = (i / (float) FRAMES) * 2 - 0.5;
-
-    const int xoffset = (int)(pos * DIM);
-    const int yoffset = 2 * DIM / 3;
-    const int w = DIM / 4;
-
-    for (x = -w; x < w; x++) {
-      if (x + xoffset < 0 || x + xoffset >= DIM)
-        continue;
-      for (y = yoffset - w; y < yoffset + w; y++) {
-        const uchar grey = abs(y - yoffset);
-//        data[y * DIM * 4 + (x + xoffset) * 4 + 0] = grey;
-//        data[y * DIM * 4 + (x + xoffset) * 4 + 1] = grey;
-        data[y * DIM * 4 + (x + xoffset) * 4 + 2] = grey;
-        data[y * DIM * 4 + (x + xoffset) * 4 + 3] = 127;
-      }
-    }
-
-    img[i] = new Fl_RGB_Image(data, DIM, DIM, 4);
-  }
-}
-
-class window: public Fl_Double_Window {
-public:
-  window(int X, int Y, const char *lbl): Fl_Double_Window(X, Y, lbl) {}
-
-  void draw() {
-    Fl_Double_Window::draw();
-
-    // Test both cx/cy offset and clipping. Both borders should have a 5-pixel edge,
-    // and the upper-left black box should not be visible.
-    fl_push_clip(5, 5, w() - 5, h() - 5);
-    img[curframe]->draw(0, 0, DIM, DIM, 5, 5);
-    fl_pop_clip();
-  }
-};
-
-static window *win;
-
-static void cb(void *) {
-
-  win->redraw();
-
-  Fl::repeat_timeout(1.0f / 24, cb);
-
-  curframe++;
-  curframe %= FRAMES;
-}
-
-int main(int argc, char **argv) {
-  win = new window(256, 256, "Alpha rendering benchmark, watch CPU use");
-  win->color(fl_rgb_color(142, 0, 0));
-
-  make_images();
-
-  win->end();
-  win->show(argc, argv);
-
-  Fl::add_timeout(1.0f / 24, cb);
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/arc.cxx
+++ /dev/null
@@ -1,89 +1,0 @@
-//
-// "$Id$"
-//
-// Arc drawing test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/fl_draw.H>
-
-double args[6] = {140, 140, 50, 0, 360, 0};
-const char* name[6] = {"X", "Y", "R", "start", "end", "rotate"};
-
-class Drawing : public Fl_Widget {
-  void draw() {
-    fl_push_clip(x(),y(),w(),h());
-    fl_color(FL_DARK3);
-    fl_rectf(x(),y(),w(),h());
-    fl_push_matrix();
-    if (args[5]) {
-      fl_translate(x()+w()/2.0, y()+h()/2.0);
-      fl_rotate(args[5]);
-      fl_translate(-(x()+w()/2.0), -(y()+h()/2.0));
-    }
-    fl_color(FL_WHITE);
-    fl_translate(x(),y());
-    fl_begin_complex_polygon();
-    fl_arc(args[0],args[1],args[2],args[3],args[4]);
-    fl_gap();
-    fl_arc(140,140,20,0,-360);
-    fl_end_complex_polygon();
-    fl_color(FL_RED);
-    fl_begin_line();
-    fl_arc(args[0],args[1],args[2],args[3],args[4]);
-    fl_end_line();
-    fl_pop_matrix();
-    fl_pop_clip();
-  }
-public:
-  Drawing(int X,int Y,int W,int H) : Fl_Widget(X,Y,W,H) {}
-};
-
-Drawing *d;
-
-void slider_cb(Fl_Widget* o, void* v) {
-  Fl_Slider* s = (Fl_Slider*)o;
-  args[fl_intptr_t(v)] = s->value();
-  d->redraw();
-}
-
-int main(int argc, char** argv) {
-  Fl_Double_Window window(300,500);
-  Drawing drawing(10,10,280,280);
-  d = &drawing;
-
-  int y = 300;
-  for (int n = 0; n<6; n++) {
-    Fl_Slider* s = new Fl_Hor_Value_Slider(50,y,240,25,name[n]); y += 25;
-    if (n<3) {s->minimum(0); s->maximum(300);}
-    else if (n==5) {s->minimum(0); s->maximum(360);}
-    else {s->minimum(-360); s->maximum(360);}
-    s->step(1);
-    s->value(args[n]);
-    s->align(FL_ALIGN_LEFT);
-    s->callback(slider_cb, (void*)(fl_intptr_t)n);
-  }
-
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/ask.cxx
+++ /dev/null
@@ -1,134 +1,0 @@
-//
-// "$Id$"
-//
-// Standard dialog test program for the Fast Light Tool Kit (FLTK).
-//
-// This also demonstrates how to trap attempts by the user to
-// close the last window by overriding Fl::exit
-//
-// Copyright 1998-2017 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <string.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Box.H>
-
-#include <FL/fl_ask.H>
-#include <stdlib.h>
-
-void update_input_text(Fl_Widget* o, const char *input) {
-  if (input) {
-    o->copy_label(input);
-    o->redraw();
-  }
-}
-
-void rename_me(Fl_Widget*o) {
-  const char *input = fl_input("Input:", o->label());
-  update_input_text(o, input);
-}
-
-void rename_me_pwd(Fl_Widget*o) {
-  const char *input = fl_password("Input PWD:", o->label());
-  update_input_text(o, input);
-}
-
-void window_callback(Fl_Widget*, void*) {
-  int hotspot = fl_message_hotspot();
-  fl_message_hotspot(0);
-  fl_message_title("note: no hotspot set for this dialog");
-  int rep = fl_choice("Are you sure you want to quit?",
-		      "Cancel", "Quit", "Dunno");
-  fl_message_hotspot(hotspot);
-  if (rep==1)
-    exit(0);
-  else if (rep==2)
-    fl_message("Well, maybe you should know before we quit.");
-}
-
-/*
-  This timer callback shows a message dialog (fl_choice) window
-  every 5 seconds to test "recursive" common dialogs.
-  
-  The timer can be stopped by clicking the button "Stop these funny popups"
-  or pressing the Enter key. As it is currently implemented, clicking the
-  "Close" button will reactivate the popups (only possible if "recursive"
-  dialogs are enabled, see below).
-
-  Note 1: This dialog box is blocked in FLTK 1.3.x if another common dialog
-  is already open because the window used is a static (i.e. permanently
-  allocated) Fl_Window instance. This should be fixed in FLTK 1.4.0.
-  See STR #334 (sic !) and also STR #2751 ("Limit input field characters").
-*/
-void timer_cb(void *) {
-
-  static int stop = 0;
-  double delta = 5.0;
-
-  Fl_Box *message_icon = (Fl_Box *)fl_message_icon();
-
-  Fl::repeat_timeout(delta, timer_cb);
-
-  if (stop == 1) {
-    message_icon->color(FL_WHITE);
-    return;
-  }
-
-  // Change the icon box color:
-  Fl_Color c = message_icon->color();
-  c = (c+1) % 32;
-  if (c == message_icon->labelcolor()) c++;
-  message_icon->color((Fl_Color)c);
-
-  // pop up a message:
-  stop = fl_choice("Timeout. Click the 'Close' button.\n"
-	     "Note: this message is blocked in FLTK 1.3\n"
-	     "if another message window is open.\n"
-	     "This message should pop up every 5 seconds.",
-	     "Close","Stop these funny popups",NULL);
-}
-
-int main(int argc, char **argv) {
-  char buffer[128] = "Test text";
-  char buffer2[128] = "MyPassword";
-
-// this is a test to make sure automatic destructors work.  Pop up
-// the question dialog several times and make sure it doesn't crash.
-
-  Fl_Double_Window window(200, 105);
-  Fl_Return_Button b(20, 10, 160, 35, buffer); b.callback(rename_me);
-  Fl_Button b2(20, 50, 160, 35, buffer2); b2.callback(rename_me_pwd);
-  window.end();
-  window.resizable(&b);
-  window.show(argc, argv);
-
-  // Also we test to see if the exit callback works:
-  window.callback(window_callback);
-
-  // Test: set default message window title:
-  // fl_message_title_default("Default Window Title");
-
-  // Test: multiple (nested, aka "recursive") popups
-  Fl::add_timeout(5.0, timer_cb);
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/bitmap.cxx
+++ /dev/null
@@ -1,138 +1,0 @@
-//
-// "$Id$"
-//
-// Bitmap label test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Bitmap.H>
-#include <stdio.h>
-
-#define sorceress_width 75
-#define sorceress_height 75
-static uchar sorceress_bits[] = {
-   0xfc, 0x7e, 0x40, 0x20, 0x90, 0x00, 0x07, 0x80, 0x23, 0x00, 0x00, 0xc6,
-   0xc1, 0x41, 0x98, 0xb8, 0x01, 0x07, 0x66, 0x00, 0x15, 0x9f, 0x03, 0x47,
-   0x8c, 0xc6, 0xdc, 0x7b, 0xcc, 0x00, 0xb0, 0x71, 0x0e, 0x4d, 0x06, 0x66,
-   0x73, 0x8e, 0x8f, 0x01, 0x18, 0xc4, 0x39, 0x4b, 0x02, 0x23, 0x0c, 0x04,
-   0x1e, 0x03, 0x0c, 0x08, 0xc7, 0xef, 0x08, 0x30, 0x06, 0x07, 0x1c, 0x02,
-   0x06, 0x30, 0x18, 0xae, 0xc8, 0x98, 0x3f, 0x78, 0x20, 0x06, 0x02, 0x20,
-   0x60, 0xa0, 0xc4, 0x1d, 0xc0, 0xff, 0x41, 0x04, 0xfa, 0x63, 0x80, 0xa1,
-   0xa4, 0x3d, 0x00, 0x84, 0xbf, 0x04, 0x0f, 0x06, 0xfc, 0xa1, 0x34, 0x6b,
-   0x01, 0x1c, 0xc9, 0x05, 0x06, 0xc7, 0x06, 0xbe, 0x11, 0x1e, 0x43, 0x30,
-   0x91, 0x05, 0xc3, 0x61, 0x02, 0x30, 0x1b, 0x30, 0xcc, 0x20, 0x11, 0x00,
-   0xc1, 0x3c, 0x03, 0x20, 0x0a, 0x00, 0xe8, 0x60, 0x21, 0x00, 0x61, 0x1b,
-   0xc1, 0x63, 0x08, 0xf0, 0xc6, 0xc7, 0x21, 0x03, 0xf8, 0x08, 0xe1, 0xcf,
-   0x0a, 0xfc, 0x4d, 0x99, 0x43, 0x07, 0x3c, 0x0c, 0xf1, 0x9f, 0x0b, 0xfc,
-   0x5b, 0x81, 0x47, 0x02, 0x16, 0x04, 0x31, 0x1c, 0x0b, 0x1f, 0x17, 0x89,
-   0x4d, 0x06, 0x1a, 0x04, 0x31, 0x38, 0x02, 0x07, 0x56, 0x89, 0x49, 0x04,
-   0x0b, 0x04, 0xb1, 0x72, 0x82, 0xa1, 0x54, 0x9a, 0x49, 0x04, 0x1d, 0x66,
-   0x50, 0xe7, 0xc2, 0xf0, 0x54, 0x9a, 0x58, 0x04, 0x0d, 0x62, 0xc1, 0x1f,
-   0x44, 0xfc, 0x51, 0x90, 0x90, 0x04, 0x86, 0x63, 0xe0, 0x74, 0x04, 0xef,
-   0x31, 0x1a, 0x91, 0x00, 0x02, 0xe2, 0xc1, 0xfd, 0x84, 0xf9, 0x30, 0x0a,
-   0x91, 0x00, 0x82, 0xa9, 0xc0, 0xb9, 0x84, 0xf9, 0x31, 0x16, 0x81, 0x00,
-   0x42, 0xa9, 0xdb, 0x7f, 0x0c, 0xff, 0x1c, 0x16, 0x11, 0x00, 0x02, 0x28,
-   0x0b, 0x07, 0x08, 0x60, 0x1c, 0x02, 0x91, 0x00, 0x46, 0x29, 0x0e, 0x00,
-   0x00, 0x00, 0x10, 0x16, 0x11, 0x02, 0x06, 0x29, 0x04, 0x00, 0x00, 0x00,
-   0x10, 0x16, 0x91, 0x06, 0xa6, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x24,
-   0x91, 0x04, 0x86, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x27, 0x93, 0x04,
-   0x96, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x02, 0x91, 0x04, 0x86, 0x4a,
-   0x0c, 0x00, 0x00, 0x00, 0x1e, 0x23, 0x93, 0x04, 0x56, 0x88, 0x08, 0x00,
-   0x00, 0x00, 0x90, 0x21, 0x93, 0x04, 0x52, 0x0a, 0x09, 0x80, 0x01, 0x00,
-   0xd0, 0x21, 0x95, 0x04, 0x57, 0x0a, 0x0f, 0x80, 0x27, 0x00, 0xd8, 0x20,
-   0x9d, 0x04, 0x5d, 0x08, 0x1c, 0x80, 0x67, 0x00, 0xe4, 0x01, 0x85, 0x04,
-   0x79, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0xf4, 0x11, 0x85, 0x06, 0x39, 0x08,
-   0x7d, 0x00, 0x00, 0x18, 0xb7, 0x10, 0x81, 0x03, 0x29, 0x12, 0xcb, 0x00,
-   0x7e, 0x30, 0x28, 0x00, 0x85, 0x03, 0x29, 0x10, 0xbe, 0x81, 0xff, 0x27,
-   0x0c, 0x10, 0x85, 0x03, 0x29, 0x32, 0xfa, 0xc1, 0xff, 0x27, 0x94, 0x11,
-   0x85, 0x03, 0x28, 0x20, 0x6c, 0xe1, 0xff, 0x07, 0x0c, 0x01, 0x85, 0x01,
-   0x28, 0x62, 0x5c, 0xe3, 0x8f, 0x03, 0x4e, 0x91, 0x80, 0x05, 0x39, 0x40,
-   0xf4, 0xc2, 0xff, 0x00, 0x9f, 0x91, 0x84, 0x05, 0x31, 0xc6, 0xe8, 0x07,
-   0x7f, 0x80, 0xcd, 0x00, 0xc4, 0x04, 0x31, 0x06, 0xc9, 0x0e, 0x00, 0xc0,
-   0x48, 0x88, 0xe0, 0x04, 0x79, 0x04, 0xdb, 0x12, 0x00, 0x30, 0x0c, 0xc8,
-   0xe4, 0x04, 0x6d, 0x06, 0xb6, 0x23, 0x00, 0x18, 0x1c, 0xc0, 0x84, 0x04,
-   0x25, 0x0c, 0xff, 0xc2, 0x00, 0x4e, 0x06, 0xb0, 0x80, 0x04, 0x3f, 0x8a,
-   0xb3, 0x83, 0xff, 0xc3, 0x03, 0x91, 0x84, 0x04, 0x2e, 0xd8, 0x0f, 0x3f,
-   0x00, 0x00, 0x5f, 0x83, 0x84, 0x04, 0x2a, 0x70, 0xfd, 0x7f, 0x00, 0x00,
-   0xc8, 0xc0, 0x84, 0x04, 0x4b, 0xe2, 0x2f, 0x01, 0x00, 0x08, 0x58, 0x60,
-   0x80, 0x04, 0x5b, 0x82, 0xff, 0x01, 0x00, 0x08, 0xd0, 0xa0, 0x84, 0x04,
-   0x72, 0x80, 0xe5, 0x00, 0x00, 0x08, 0xd2, 0x20, 0x44, 0x04, 0xca, 0x02,
-   0xff, 0x00, 0x00, 0x08, 0xde, 0xa0, 0x44, 0x04, 0x82, 0x02, 0x6d, 0x00,
-   0x00, 0x08, 0xf6, 0xb0, 0x40, 0x02, 0x82, 0x07, 0x3f, 0x00, 0x00, 0x08,
-   0x44, 0x58, 0x44, 0x02, 0x93, 0x3f, 0x1f, 0x00, 0x00, 0x30, 0x88, 0x4f,
-   0x44, 0x03, 0x83, 0x23, 0x3e, 0x00, 0x00, 0x00, 0x18, 0x60, 0xe0, 0x07,
-   0xe3, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe4, 0x07, 0xc7, 0x1b,
-   0xfe, 0x01, 0x00, 0x00, 0xe0, 0x3c, 0xe4, 0x07, 0xc7, 0xe3, 0xfe, 0x1f,
-   0x00, 0x00, 0xff, 0x1f, 0xfc, 0x07, 0xc7, 0x03, 0xf8, 0x33, 0x00, 0xc0,
-   0xf0, 0x07, 0xff, 0x07, 0x87, 0x02, 0xfc, 0x43, 0x00, 0x60, 0xf0, 0xff,
-   0xff, 0x07, 0x8f, 0x06, 0xbe, 0x87, 0x00, 0x30, 0xf8, 0xff, 0xff, 0x07,
-   0x8f, 0x14, 0x9c, 0x8f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x9f, 0x8d,
-   0x8a, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xbf, 0x0b, 0x80, 0x1f,
-   0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x3a, 0x80, 0x3f, 0x00, 0x80,
-   0xff, 0xff, 0xff, 0x07, 0xff, 0x20, 0xc0, 0x3f, 0x00, 0x80, 0xff, 0xff,
-   0xff, 0x07, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
-   0xff, 0x0f, 0xf8, 0xff, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff,
-   0xff, 0xff, 0x40, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
-   0x41, 0xf0, 0xff, 0xff, 0xff, 0x07};
-
-#include <FL/Fl_Toggle_Button.H>
-
-Fl_Toggle_Button *leftb,*rightb,*topb,*bottomb,*insideb,*overb,*inactb;
-Fl_Button *b;
-Fl_Double_Window *w;
-
-void button_cb(Fl_Widget *,void *) {
-  int i = 0;
-  if (leftb->value()) i |= FL_ALIGN_LEFT;
-  if (rightb->value()) i |= FL_ALIGN_RIGHT;
-  if (topb->value()) i |= FL_ALIGN_TOP;
-  if (bottomb->value()) i |= FL_ALIGN_BOTTOM;
-  if (insideb->value()) i |= FL_ALIGN_INSIDE;
-  if (overb->value()) i |= FL_ALIGN_TEXT_OVER_IMAGE;
-  b->align(i);
-  if (inactb->value()) b->deactivate();
-  else b->activate();
-  w->redraw();
-}
-
-int main(int argc, char **argv) {
-  w = new Fl_Double_Window(400,400);
-  b = new Fl_Button(140,160,120,120,"Bitmap");
-  b->image(new Fl_Bitmap(sorceress_bits,sorceress_width,sorceress_height));
-  leftb = new Fl_Toggle_Button(25,50,50,25,"left");
-  leftb->callback(button_cb);
-  rightb = new Fl_Toggle_Button(75,50,50,25,"right");
-  rightb->callback(button_cb);
-  topb = new Fl_Toggle_Button(125,50,50,25,"top");
-  topb->callback(button_cb);
-  bottomb = new Fl_Toggle_Button(175,50,50,25,"bottom");
-  bottomb->callback(button_cb);
-  insideb = new Fl_Toggle_Button(225,50,50,25,"inside");
-  insideb->callback(button_cb);
-  overb = new Fl_Toggle_Button(25,75,100,25,"text over");
-  overb->callback(button_cb);
-  inactb = new Fl_Toggle_Button(125,75,100,25,"inactive");
-  inactb->callback(button_cb);
-  w->resizable(w);
-  w->end();
-  w->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/blocks.app/Contents/Info.plist
+++ /dev/null
@@ -1,47 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plist version="0.9">
-    <dict>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-
-	<key>CFBundleExecutable</key>
-	<string>blocks</string>
-
-	<key>CFBundleIdentifier</key>
-	<string>com.easysw.blocks</string>
-
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 2006 by Michael Sweet</string>
-
-	<key>CFAppleHelpAnchor</key>
-	<string>help</string>
-
-	<key>CFBundleName</key>
-	<string>blocks</string>
-
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-
-	<key>CFBundleSignature</key>
-	<string>BLKS</string>
-
-	<key>CFBundleIconFile</key>
-	<string>blocks.icns</string>
-
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-
-	<key>CFBundleGetInfoString</key>
-	<string>1.0, Copyright 2006 by Michael Sweet</string>
-
-	<key>NSHighResolutionCapable</key>
-	<true/>
-
-    </dict>
-</plist>
--- a/DoConfig/fltk/test/blocks.app/Contents/PkgInfo
+++ /dev/null
@@ -1,1 +1,0 @@
-BLKSBlks
binary files a/DoConfig/fltk/test/blocks.app/Contents/Resources/blocks.icns /dev/null differ
--- a/DoConfig/fltk/test/blocks.cxx
+++ /dev/null
@@ -1,1024 +1,0 @@
-//
-// "$Id$"
-//
-// "Block Attack!" scrolling blocks game using the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2006-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_XPM_Image.H>
-#include <FL/Fl_XBM_Image.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <FL/fl_draw.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <math.h>
-
-// Audio headers...
-#include <config.h>
-
-#ifndef WIN32
-#  include <unistd.h>
-#  include <sys/time.h>
-#endif // !WIN32
-
-#ifdef HAVE_ALSA_ASOUNDLIB_H
-#  define ALSA_PCM_NEW_HW_PARAMS_API
-#  include <alsa/asoundlib.h>
-#endif // HAVE_ALSA_ASOUNDLIB_H
-#ifdef __APPLE__
-#  include <CoreAudio/AudioHardware.h>
-#endif // __APPLE__
-#ifdef WIN32
-#  include <mmsystem.h>
-#endif // WIN32
-
-
-#define BLOCK_COLS	20
-#define BLOCK_ROWS	10
-#define BLOCK_SIZE	32
-#define BLOCK_BLAST	100
-
-#include "pixmaps/blast.xpm"
-Fl_Pixmap blast_pixmap(blast_xpm);
-
-#include "pixmaps/red.xpm"
-Fl_Pixmap red_pixmap(red_xpm);
-#include "pixmaps/red_bomb.xpm"
-Fl_Pixmap red_bomb_pixmap(red_bomb_xpm);
-
-#include "pixmaps/green.xpm"
-Fl_Pixmap green_pixmap(green_xpm);
-#include "pixmaps/green_bomb.xpm"
-Fl_Pixmap green_bomb_pixmap(green_bomb_xpm);
-
-#include "pixmaps/blue.xpm"
-Fl_Pixmap blue_pixmap(blue_xpm);
-#include "pixmaps/blue_bomb.xpm"
-Fl_Pixmap blue_bomb_pixmap(blue_bomb_xpm);
-
-#include "pixmaps/yellow.xpm"
-Fl_Pixmap yellow_pixmap(yellow_xpm);
-#include "pixmaps/yellow_bomb.xpm"
-Fl_Pixmap yellow_bomb_pixmap(yellow_bomb_xpm);
-
-#include "pixmaps/cyan.xpm"
-Fl_Pixmap cyan_pixmap(cyan_xpm);
-#include "pixmaps/cyan_bomb.xpm"
-Fl_Pixmap cyan_bomb_pixmap(cyan_bomb_xpm);
-
-#include "pixmaps/magenta.xpm"
-Fl_Pixmap magenta_pixmap(magenta_xpm);
-#include "pixmaps/magenta_bomb.xpm"
-Fl_Pixmap magenta_bomb_pixmap(magenta_bomb_xpm);
-
-#include "pixmaps/gray.xpm"
-Fl_Pixmap gray_pixmap(gray_xpm);
-#include "pixmaps/gray_bomb.xpm"
-Fl_Pixmap gray_bomb_pixmap(gray_bomb_xpm);
-
-Fl_Pixmap *normal_pixmaps[] = {
-  &red_pixmap,
-  &green_pixmap,
-  &blue_pixmap,
-  &yellow_pixmap,
-  &cyan_pixmap,
-  &magenta_pixmap,
-  &gray_pixmap
-};
-Fl_Pixmap *bomb_pixmaps[] = {
-  &red_bomb_pixmap,
-  &green_bomb_pixmap,
-  &blue_bomb_pixmap,
-  &yellow_bomb_pixmap,
-  &cyan_bomb_pixmap,
-  &magenta_bomb_pixmap,
-  &gray_bomb_pixmap
-};
-
-const unsigned char screen_bits[] = {
-  0xff, 0x55, 0xff, 0xaa, 0xff, 0x55, 0xff, 0xaa
-};
-Fl_Bitmap screen_bitmap(screen_bits, 8, 8);
-Fl_Tiled_Image screen_tile(&screen_bitmap);
-
-
-// Sound class...
-//
-// There are MANY ways to implement sound in a FLTK application.
-// The approach we are using here is to conditionally compile OS-
-// specific code into the application - CoreAudio for MacOS X, the
-// standard Win32 API stuff for Windows, ALSA or X11 for Linux, and
-// X11 for all others.  We have to support ALSA on Linux because the
-// current Xorg releases no longer support XBell() or the PC speaker.
-//
-// There are several good cross-platform audio libraries we could also
-// use, such as OpenAL, PortAudio, and SDL, however they were not chosen
-// for this application because of our limited use of sound.
-//
-// Many thanks to Ian MacArthur who provided sample code that led to
-// the CoreAudio implementation you see here!
-class BlockSound {
-  // Private, OS-specific data...
-#ifdef __APPLE__
-  AudioDeviceID device;
-#ifndef MAC_OS_X_VERSION_10_5
-#define MAC_OS_X_VERSION_10_5 1050
-#endif
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  AudioDeviceIOProcID audio_proc_id;
-#  endif
-  AudioStreamBasicDescription format;
-  short *data;
-  int remaining;
-
-  static OSStatus audio_cb(AudioDeviceID device,
-			   const AudioTimeStamp *current_time,
-			   const AudioBufferList *data_in,
-			   const AudioTimeStamp *time_in,
-			   AudioBufferList *data_out,
-			   const AudioTimeStamp *time_out,
-			   void *client_data);
-#elif defined(WIN32)
-  HWAVEOUT	device;
-  HGLOBAL	header_handle;
-  LPWAVEHDR	header_ptr;
-  HGLOBAL	data_handle;
-  LPSTR		data_ptr;
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  snd_pcm_t *handle;
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  public:
-
-  // Common data...
-  static short *sample_data;
-  static int sample_size;
-
-  BlockSound();
-  ~BlockSound();
-
-  void	play_explosion(float duration);
-};
-
-// Sound class globals...
-short *BlockSound::sample_data = NULL;
-int BlockSound::sample_size = 0;
-
-
-// Initialize the BlockSound class
-BlockSound::BlockSound() {
-  sample_size = 0;
-
-#ifdef __APPLE__
-  remaining = 0;
-
-  UInt32 size = sizeof(device);
-
-  if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice,
-			       &size, (void *)&device) != noErr) return;
-
-  size = sizeof(format);
-  if (AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyStreamFormat,
-			     &size, &format) != noErr) return;
-
-  // Set up a format we like...
-  format.mSampleRate       = 44100.0;	// 44.1kHz
-  format.mChannelsPerFrame = 2;		// stereo
-
-  if (AudioDeviceSetProperty(device, NULL, 0, false,
-                             kAudioDevicePropertyStreamFormat,
-	                     sizeof(format), &format) != noErr) return;
-
-  // Check we got linear pcm - what to do if we did not ???
-  if (format.mFormatID != kAudioFormatLinearPCM) return;
-
-  // Attach the callback and start the device
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (AudioDeviceCreateIOProcID(device, audio_cb, (void *)this, &audio_proc_id) != noErr) return;
-  AudioDeviceStart(device, audio_proc_id);
-#  else
-  if (AudioDeviceAddIOProc(device, audio_cb, (void *)this) != noErr) return;
-  AudioDeviceStart(device, audio_cb);
-#  endif
-
-  sample_size = (int)format.mSampleRate;
-
-#elif defined(WIN32)
-  WAVEFORMATEX	format;
-
-  memset(&format, 0, sizeof(format));
-  format.cbSize          = sizeof(format);
-  format.wFormatTag      = WAVE_FORMAT_PCM;
-  format.nChannels       = 2;
-  format.nSamplesPerSec  = 44100;
-  format.nAvgBytesPerSec = 44100 * 4;
-  format.nBlockAlign     = 4;
-  format.wBitsPerSample  = 16;
-
-  data_handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, format.nSamplesPerSec * 4);
-  if (!data_handle) return;
-
-  data_ptr = (LPSTR)GlobalLock(data_handle);
-
-  header_handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(WAVEHDR));
-  if (!header_handle) return;
-
-  header_ptr = (WAVEHDR *)GlobalLock(header_handle);
-
-  header_ptr->lpData  = data_ptr;
-  header_ptr->dwFlags = 0;
-  header_ptr->dwLoops = 0;
-
-  if (waveOutOpen(&device, WAVE_MAPPER, &format, 0, 0, WAVE_ALLOWSYNC)
-          != MMSYSERR_NOERROR) return;
-
-  sample_size = format.nSamplesPerSec;
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  handle = NULL;
-
-  if (snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0) >= 0) {
-    // Initialize PCM sound stuff...
-    snd_pcm_hw_params_t *params;
-
-    snd_pcm_hw_params_alloca(&params);
-    snd_pcm_hw_params_any(handle, params);
-    snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
-    snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16);
-    snd_pcm_hw_params_set_channels(handle, params, 2);
-    unsigned rate = 44100;
-    int dir;
-    snd_pcm_hw_params_set_rate_near(handle, params, &rate, &dir);
-    snd_pcm_uframes_t period = (int)rate;
-    snd_pcm_hw_params_set_period_size_near(handle, params, &period, &dir);
-
-    sample_size = rate;
-
-    if (snd_pcm_hw_params(handle, params) < 0) {
-      sample_size = 0;
-      snd_pcm_close(handle);
-      handle = NULL;
-    }
-  }
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  if (sample_size) {
-    // Make an explosion sound by passing white noise through a low pass
-    // filter with a decreasing frequency...
-    sample_data = new short[2 * sample_size];
-
-    short *sample_ptr = sample_data;
-    int max_sample = 2 * sample_size - 2;
-
-    *sample_ptr++ = 0;
-    *sample_ptr++ = 0;
-
-    for (int j = max_sample; j > 0; j --, sample_ptr ++) {
-      float freq = (float)j / (float)max_sample;
-      float volume = 32767.0 * (0.5 * sqrt(freq) + 0.5);
-      float sample = 0.0001 * ((rand() % 20001) - 10000);
-
-      *sample_ptr = (int)(volume * freq * sample +
-                          (1.0 - freq) * sample_ptr[-2]);
-    }
-  }
-}
-
-
-// Cleanup the BlockSound class
-BlockSound::~BlockSound() {
-#ifdef __APPLE__
-  if (sample_size) {
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-    AudioDeviceStop(device, audio_proc_id);
-    AudioDeviceDestroyIOProcID(device, audio_proc_id);
-#  else
-    AudioDeviceStop(device, audio_cb);
-    AudioDeviceRemoveIOProc(device, audio_cb);
-#  endif
-  }
-
-#elif defined(WIN32)
-  if (sample_size) {
-    waveOutClose(device);
-
-    GlobalUnlock(header_handle);
-    GlobalFree(header_handle);
-
-    GlobalUnlock(data_handle);
-    GlobalFree(data_handle);
-  }
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  if (handle) {
-    snd_pcm_drain(handle);
-    snd_pcm_close(handle);
-  }
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  if (sample_size) {
-    delete[] sample_data;
-  }
-}
-
-
-#ifdef __APPLE__
-// Callback function for writing audio data...
-OSStatus
-BlockSound::audio_cb(AudioDeviceID device,
-		     const AudioTimeStamp *current_time,
-		     const AudioBufferList *data_in,
-		     const AudioTimeStamp *time_in,
-		     AudioBufferList *data_out,
-		     const AudioTimeStamp *time_out,
-		     void *client_data) {
-  BlockSound *ss = (BlockSound *)client_data;
-  int count;
-  float *buffer;
-
-  if (!ss->remaining) return noErr;
-
-  for (count = data_out->mBuffers[0].mDataByteSize / sizeof(float),
-          buffer = (float*) data_out->mBuffers[0].mData;
-       ss->remaining > 0 && count > 0;
-       count --, ss->data ++, ss->remaining --) {
-    *buffer++ = *(ss->data) / 32767.0;
-  }
-
-  while (count > 0) {
-    *buffer++ = 0.0;
-    count --;
-  }
-
-  return noErr;
-}
-#endif // __APPLE__
-
-
-// Play a note for the given amount of time...
-void
-BlockSound::play_explosion(float duration) {
-  Fl::check();
-
-  if (duration <= 0.0)
-    return;
-
-#if defined(__APPLE__) || defined(WIN32) || defined(HAVE_ALSA_ASOUNDLIB_H)
-  if (duration > 1.0)
-    duration = 1.0;
-
-  int samples = (int)(duration * sample_size);
-  short *sample_ptr = sample_data + 2 * (sample_size - samples);
-#endif // __APPLE__ || WIN32 || HAVE_ALSA_ASOUNDLIB_H
-
-#ifdef __APPLE__
-  // Point to the next note...
-  data      = sample_ptr;
-  remaining = samples * 2;
-
-#elif defined(WIN32)
-  if (sample_size) {
-    memcpy(data_ptr, sample_ptr, samples * 4);
-
-    header_ptr->dwBufferLength = samples * 4;
-    waveOutPrepareHeader(device, header_ptr, sizeof(WAVEHDR));
-
-    waveOutWrite(device, header_ptr, sizeof(WAVEHDR));
-  } else Beep(440, (int)(1000.0 * duration));
-
-#elif defined(HAVE_ALSA_ASOUNDLIB_H)
-  if (handle) {
-    // Use ALSA to play the sound...
-    if (snd_pcm_writei(handle, sample_ptr, samples) < 0) {
-      snd_pcm_prepare(handle);
-      snd_pcm_writei(handle, sample_ptr, samples);
-    }
-    return;
-  }
-#endif // __APPLE__
-}
-
-
-class BlockWindow : public Fl_Double_Window
-{
-  public:
-
-  struct Block
-  {
-    int		color;
-    bool	bomb;
-    int		y;
-  };
-
-  struct Column
-  {
-    int		num_blocks;
-    Block	blocks[BLOCK_ROWS];
-    int		x;
-  };
-
-  private:
-
-  Fl_Button	*help_button_,
-		*play_button_;
-
-  int		num_columns_;
-  Column	columns_[BLOCK_COLS];
-  int		count_;
-  bool		help_;
-  int		high_score_;
-  float		interval_;
-  int		level_;
-  int		num_colors_;
-  int		opened_columns_;
-  bool		paused_;
-  static Fl_Preferences	prefs_;
-  int		score_;
-  BlockSound	*sound_;
-  char		title_[255];
-  int		title_y_;
-
-  void		_BlockWindow();
-  int		bomb(int color);
-  int		click(int col, int row);
-  static void	help_cb(Fl_Widget *wi, BlockWindow *bw);
-  void		init();
-  static void	play_cb(Fl_Widget *wi, BlockWindow *bw);
-  static void	timeout_cb(BlockWindow *bw);
-
-  public:
-
-  BlockWindow(int X, int Y, int W, int H, const char *L = 0);
-  BlockWindow(int W, int H, const char *L = 0);
-  ~BlockWindow();
-
-  void		draw();
-  int		handle(int event);
-  void		new_game();
-  int		score() { return (score_); }
-  void          up_level();
-};
-
-
-Fl_Preferences	BlockWindow::prefs_(Fl_Preferences::USER, "fltk.org", "blocks");
-
-
-int
-main(int argc, char *argv[]) {
-  Fl::scheme("plastic");
-  Fl::visible_focus(0);
-
-  BlockWindow	*bw = new BlockWindow(BLOCK_COLS * BLOCK_SIZE,
-                                      BLOCK_ROWS * BLOCK_SIZE + 20,
-		                      "Block Attack!");
-
-  bw->show(argc, argv);
-
-  return (Fl::run());
-}
-
-
-// Create a block window at the specified position
-BlockWindow::BlockWindow(int X, int Y, int W, int H, const char *L)
-    : Fl_Double_Window(X, Y, W, H, L) {
-  _BlockWindow();
-}
-
-
-// Create a block window
-BlockWindow::BlockWindow(int W, int H, const char *L)
-    : Fl_Double_Window(W, H, L) {
-  _BlockWindow();
-}
-
-
-// Delete a block window
-BlockWindow::~BlockWindow() {
-  Fl::remove_timeout((Fl_Timeout_Handler)timeout_cb, (void *)this);
-}
-
-
-// Initialize a block window...
-void
-BlockWindow::_BlockWindow() {
-  init();
-
-  help_button_ = new Fl_Button(0, 0, 20, 20, "?");
-  help_button_->callback((Fl_Callback *)help_cb, this);
-  help_button_->shortcut('?');
-
-  play_button_ = new Fl_Button(80, (h() - 80) / 2, 80, 80, "@>");
-  play_button_->callback((Fl_Callback *)play_cb, this);
-  play_button_->labelsize(44);
-  play_button_->shortcut(' ');
-
-  sound_ = new BlockSound();
-
-  prefs_.get("high_score", high_score_, 0);
-
-  Fl::add_timeout(0.1, (Fl_Timeout_Handler)timeout_cb, (void *)this);
-}
-
-
-// Bomb all blocks of a given color and return the number of affected blocks
-int
-BlockWindow::bomb(int color) {
-  int		j, k;
-  int		count;
-  Block		*b;
-  Column	*c;
-
-
-  if (color >= BLOCK_BLAST) return (0);
-
-  for (j = num_columns_, c = columns_, count = 1; j > 0; j --, c ++)
-    for (k = c->num_blocks, b = c->blocks; k > 0; k --, b ++)
-      if (b->color == color) {
-        b->color = -color;
-	count ++;
-      }
-
-  return (count);
-}
-
-
-// Tag all blocks connected to the clicked block and return the number
-// of affected blocks
-int
-BlockWindow::click(int col, int row) {
-  Block		*b;
-  Column	*c;
-  int		count, color;
-
-
-  c     = columns_ + col;
-  b     = c->blocks + row;
-  color = b->color;
-
-  if (color < 0 || color >= BLOCK_BLAST) return (0);
-
-  // Find the bottom block...
-  while (row > 0 && b[-1].color == color) {
-    row --;
-    b --;
-  }
-
-  count = 0;
-
-  while (row < c->num_blocks && b->color == color) {
-    b->color = -color;
-
-    if (col > 0 && row < c[-1].num_blocks &&
-        c[-1].blocks[row].color == color) {
-      count += click(col - 1, row);
-    }
-
-    if (col < (num_columns_ - 1) && row < c[1].num_blocks &&
-        c[1].blocks[row].color == color) {
-      count += click(col + 1, row);
-    }
-
-    count ++;
-    row ++;
-    b ++;
-  }
-
-  return (count);
-}
-
-
-// Draw the block window...
-void
-BlockWindow::draw() {
-  int		j, k, xx, yy;
-  Block		*b;
-  Column	*c;
-
-
-  // Draw the blocks...
-  fl_color(FL_BLACK);
-  fl_rectf(0, 0, w(), h());
-
-  // Draw the blocks...
-  for (j = num_columns_, c = columns_; j > 0; j --, c ++)
-    for (k = c->num_blocks, b = c->blocks; k > 0; k --, b ++) {
-      xx = w() - c->x;
-      yy = h() - BLOCK_SIZE - b->y;
-
-      if (b->color >= BLOCK_BLAST) {
-	b->color ++;
-        blast_pixmap.draw(xx, yy);
-      } else if (b->color < 0) {
-        if (b->bomb) bomb_pixmaps[-b->color - 1]->draw(xx, yy);
-	else normal_pixmaps[-b->color - 1]->draw(xx, yy);
-      } else {
-        if (b->bomb) bomb_pixmaps[b->color - 1]->draw(xx, yy);
-	else normal_pixmaps[b->color - 1]->draw(xx, yy);
-      }
-    }
-
-  if (interval_ < 0.0 || paused_) {
-    fl_color(FL_BLACK);
-    screen_tile.draw(0, 0, w(), h(), 0, 0);
-  }
-
-  // Redraw the widgets...
-  play_button_->redraw();
-  help_button_->redraw();
-  draw_children();
-
-  // Draw any paused/game over/new game message...
-  if ((paused_ || interval_ < 0.0) && play_button_->w() == 80) {
-    const char *s;
-
-    if (help_) {
-      s = "Click on adjacent blocks of the same color. Clear all blocks "
-          "before they reach the left side.";
-
-      fl_font(FL_HELVETICA_BOLD, 24);
-      fl_color(FL_BLACK);
-      fl_draw(s, 171, 3, w() - 250, h() - 6,
-              (Fl_Align)(FL_ALIGN_WRAP | FL_ALIGN_LEFT));
-
-      fl_color(FL_YELLOW);
-      fl_draw(s, 168, 0, w() - 250, h(),
-              (Fl_Align)(FL_ALIGN_WRAP | FL_ALIGN_LEFT));
-    } else {
-      if (interval_ < 0.0) {
-#ifdef DEBUG
-	// Show sample waveform...
-	short *sample_ptr;
-
-	for (i = 0; i < 2; i ++)
-	{
-	  fl_color(FL_RED + i);
-	  fl_begin_line();
-	  for (j = 0, sample_ptr = sound_->sample_data + i;
-               j < sound_->sample_size;
-	       j ++, sample_ptr += 2)
-	    fl_vertex(j * w() / sound_->sample_size,
-	              *sample_ptr * h() / 4 / 65534 + h() / 2);
-	  fl_end_line();
-	}
-#endif // DEBUG
-
-	if (num_columns_ && (time(NULL) & 7) < 4) s = "Game Over";
-	else s = "Block Attack!\nby Michael R Sweet";
-      } else s = "Paused";
-
-      fl_font(FL_HELVETICA_BOLD, 32);
-      fl_color(FL_BLACK);
-      fl_draw(s, 6, 6, w() - 6, h() - 6, FL_ALIGN_CENTER);
-
-      fl_color(FL_YELLOW);
-      fl_draw(s, 0, 0, w(), h(), FL_ALIGN_CENTER);
-    }
-  }
-
-  // Draw the scores and level...
-  char s[255];
-
-  sprintf(s, " Score: %d", score_);
-  fl_color(FL_WHITE);
-  fl_font(FL_HELVETICA, 14);
-  fl_draw(s, 40, 0, w() - 40, 20, FL_ALIGN_LEFT);
-
-  sprintf(s, "High Score: %d ", high_score_);
-  fl_draw(s, 0, 0, w(), 20, FL_ALIGN_RIGHT);
-
-  if (level_ > 1 || title_y_ <= 0)
-  {
-    sprintf(s, "Level: %d ", level_);
-    fl_draw(s, 0, 0, w(), 20, FL_ALIGN_CENTER);
-  }
-
-  if (title_y_ > 0 && interval_ > 0.0)
-  {
-    int sz = 14 + title_y_ * 86 / h();
-
-    fl_font(FL_HELVETICA_BOLD, sz);
-    fl_color(FL_YELLOW);
-    fl_draw(title_, 0, title_y_, w(), sz, FL_ALIGN_CENTER);
-  }
-}
-
-
-// Handle mouse clicks, etc.
-int
-BlockWindow::handle(int event) {
-  int		j, k, mx, my, count;
-  Block		*b;
-  Column	*c;
-
-
-  if (Fl_Double_Window::handle(event)) return (1);
-  else if (interval_ < 0.0 || paused_) return (0);
-
-  switch (event) {
-    case FL_KEYBOARD:
-        if (Fl::event_text()) {
-          if (strcmp(Fl::event_text(), "+") == 0)
-            up_level();
-        }
-        break;
-    case FL_PUSH :
-	mx    = w() - Fl::event_x() + BLOCK_SIZE;
-	my    = h() - Fl::event_y();
-	count = 0;
-	b     = 0;
-
-	for (j = 0, c = columns_; !count && j < num_columns_; j ++, c ++)
-	  for (k = 0, b = c->blocks; !count && k < c->num_blocks; k ++, b ++)
-	    if (mx >= c->x && mx < (c->x + BLOCK_SIZE) &&
-	        my >= b->y && my < (b->y + BLOCK_SIZE)) {
-	      if (b->bomb) count = bomb(b->color);
-	      else count = click(j, k);
-
-              break;
-	    }
-
-        if (count < 2) {
-	  for (j = 0, c = columns_; j < num_columns_; j ++, c ++)
-	    for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++)
-	      if (b->color < 0) b->color = -b->color;
-	} else {
-	  count --;
-
-	  if (b->bomb) {
-	    sound_->play_explosion(0.19 + 0.005 * count);
-
-	    interval_ *= 0.995;
-	    score_ += count;
-	  } else {
-	    sound_->play_explosion(0.09 + 0.005 * count);
-
-	    interval_ *= 0.999;
-	    score_ += count * count;
-	  }
-
-	  if (score_ > high_score_) {
-	    high_score_ = score_;
-	    prefs_.set("high_score", high_score_);
-	  }
-
-	  for (j = 0, c = columns_; j < num_columns_; j ++, c ++)
-	    for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++)
-	      if (b->color < 0) b->color = BLOCK_BLAST;
-	}
-	return (1);
-  }
-
-  return (0);
-}
-
-
-// Toggle the on-line help...
-void
-BlockWindow::help_cb(Fl_Widget *, BlockWindow *bw) {
-  bw->paused_ = bw->help_ = !bw->help_;
-  bw->play_button_->label("@>");
-  bw->redraw();
-}
-
-
-// Initialize the block window...
-void
-BlockWindow::init() {
-  count_       = 0;
-  help_        = false;
-  interval_    = -1.0;
-  level_       = 1;
-  num_colors_  = 3;
-  num_columns_ = 0;
-  paused_      = false;
-  score_       = 0;
-  title_[0]    = '\0';
-  title_y_     = 0;
-}
-
-
-// Start a new game...
-void
-BlockWindow::new_game() {
-  // Seed the random number generator...
-  srand(time(NULL));
-
-  init();
-
-  interval_       = 0.1;
-  opened_columns_ = 0;
-
-  strcpy(title_, "Level: 1");
-  title_y_ = h();
-
-  redraw();
-}
-
-
-// Play/pause...
-void
-BlockWindow::play_cb(Fl_Widget *wi, BlockWindow *bw) {
-  if (bw->interval_ < 0) bw->new_game();
-  else bw->paused_ = !bw->paused_;
-
-  if (bw->paused_) wi->label("@>");
-  else {
-    wi->label("@-2||");
-    bw->help_ = false;
-  }
-}
-
-void BlockWindow::up_level() {
-  interval_ *= 0.95;
-  opened_columns_ = 0;
-  if (num_colors_ < 7) num_colors_ ++;
-  level_ ++;
-  sprintf(title_, "Level: %d", level_);
-  title_y_ = h();
-  Fl::repeat_timeout(interval_, (Fl_Timeout_Handler)timeout_cb, (void *)this);
-}
-
-// Animate the game...
-void
-BlockWindow::timeout_cb(BlockWindow *bw) {
-  int		i, j;
-  Block		*b;
-  Column	*c;
-  int		lastx, lasty;
-
-
-#ifdef DEBUG
-  struct timeval curtime;
-  static struct timeval lasttime;
-
-
-  gettimeofday(&curtime, NULL);
-  printf("%.3f (%+f - %f)\n",
-         curtime.tv_sec + 0.000001 * curtime.tv_usec,
-         curtime.tv_sec - lasttime.tv_sec +
-	     0.000001 * (curtime.tv_usec - lasttime.tv_usec), bw->interval_);
-  lasttime = curtime;
-#endif // DEBUG
-
-  // Update blocks that have been destroyed...
-  for (i = 0, c = bw->columns_; i < bw->num_columns_; i ++, c ++)
-    for (j = 0, b = c->blocks; j < c->num_blocks; j ++, b ++)
-      if (b->color > (BLOCK_BLAST + 1)) {
-        bw->redraw();
-
-	c->num_blocks --;
-
-	if (j < c->num_blocks) {
-	  memmove(b, b + 1, (c->num_blocks - j) * sizeof(Block));
-	}
-
-	j --;
-	b --;
-
-	if (!c->num_blocks) {
-	  bw->num_columns_ --;
-
-	  if (i < bw->num_columns_) {
-	    memmove(c, c + 1, (bw->num_columns_ - i) * sizeof(Column));
-          }
-
-	  i --;
-	  c --;
-	  j = c->num_blocks;
-	}
-      }
-
-  // Let the rest of the blocks fall and/or move...
-  for (i = bw->num_columns_, c = bw->columns_, lastx = c->x;
-       i > 0;
-       i --, c ++) {
-    if (c->x > lastx) {
-      c->x -= 8;
-      bw->redraw();
-    }
-
-    lastx = c->x + BLOCK_SIZE;
-
-    if (!bw->paused_ && bw->interval_ > 0.0) {
-      bw->redraw();
-      c->x ++;
-    }
-
-    for (j = c->num_blocks, b = c->blocks, lasty = 0; j > 0; j --, b ++) {
-      if (b->y > lasty) {
-        bw->redraw();
-        b->y -= 8;
-      }
-
-      lasty = b->y + BLOCK_SIZE;
-    }
-  }
-
-  // Slide the title text as needed...
-  if (bw->title_y_ > 0) {
-    bw->redraw();
-    bw->title_y_ -= 5;
-  }
-
-  // Play the game...
-  if (!bw->paused_ && bw->interval_ > 0.0) {
-    bw->count_ --;
-
-    if (bw->count_ <= 0) {
-      bw->redraw();
-      bw->count_ = BLOCK_SIZE;
-
-      if (bw->num_columns_ == BLOCK_COLS) {
-	bw->interval_ = -1.0;
-	bw->sound_->play_explosion(0.8);
-	bw->play_button_->label("@>");
-      } else {
-	bw->opened_columns_ ++;
-
-	if (bw->opened_columns_ > (2 * BLOCK_COLS)) {
-          bw->up_level();
-	}
-
-	c = bw->columns_;
-
-	if (bw->num_columns_) {
-          memmove(c + 1, c, bw->num_columns_ * sizeof(Column));
-	}
-
-	bw->num_columns_ ++;
-	c->x          = 0;
-	c->num_blocks = BLOCK_ROWS;
-
-	for (j = 0, b = c->blocks; j < BLOCK_ROWS; j ++, b ++) {
-          b->bomb  = bw->num_colors_ > 3 && (rand() & 127) < bw->num_colors_;
-          b->color = 1 + (rand() % bw->num_colors_);
-	  b->y     = j * (BLOCK_SIZE + 8) + 24;
-	}
-      }
-    }
-  }
-  else
-  {
-    bw->count_ --;
-
-    if (bw->count_ <= 0) {
-      bw->count_ = 40;
-      bw->redraw();
-    }
-  }
-
-  // Update the play/pause button as needed...
-  if ((bw->paused_ || bw->interval_< 0.0) &&
-      bw->play_button_->w() < 80) {
-    int s = bw->play_button_->w() + 10;
-
-    bw->play_button_->resize(s, (s - 20) * (bw->h() - s) / 120, s, s);
-    bw->play_button_->labelsize(s / 2 + 4);
-    bw->redraw();
-  } else if ((!bw->paused_ && bw->interval_ > 0.0) &&
-             bw->play_button_->w() > 20) {
-    int s = bw->play_button_->w() - 5;
-
-    bw->play_button_->resize(s, (s - 20) * (bw->h() - s) / 120, s, s);
-    bw->play_button_->labelsize(s / 2 + 4);
-    bw->redraw();
-  }
-
-  if (bw->interval_ > 0.0) {
-    Fl::repeat_timeout(bw->interval_, (Fl_Timeout_Handler)timeout_cb,
-                       (void *)bw);
-  } else {
-    Fl::repeat_timeout(0.1, (Fl_Timeout_Handler)timeout_cb,
-                       (void *)bw);
-  }
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/boxtype.cxx
+++ /dev/null
@@ -1,184 +1,0 @@
-//
-// "$Id$"
-//
-// Boxtype test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-int N = 0;
-#define W 200
-#define H 50
-#define ROWS 14
-
-// Note: Run the program with command line '-s abc' to view boxtypes
-// with scheme 'abc'.
-
-// class BoxGroup - minimal class to enable visible box size debugging
-//
-// Set the following static variables to 0 (default) to disable
-// or 1 to enable the given feature.
-//
-// If you enable the 'outline' variable, then a red frame should be drawn
-// around each box, and it should ideally be fully visible.
-//
-// The white background is optional (otherwise you see the window background).
-//
-// Set BOTH variables = 0 to show the default image for the FLTK manual.
-//
-// Note: As of FLTK 1.3.3 (probably since FLTK 1.0/1.1) there are some
-// shadows 'leaking' outside their widget bounding boxes (x,y,w,h).
-// Is this intentional?
-
-static const int outline = 0; // draw 1-px red frame around all boxes
-static const int box_bg  = 0; // draw white background inside all boxes
-static const int inactive  = 0; // deactivate boxes and use green background
-
-class BoxGroup : public Fl_Group {
-  public:
-    BoxGroup(int x, int y, int w, int h) : Fl_Group(x,y,w,h) {};
-    void draw() {
-      draw_box();
-      if (outline + box_bg) { // outline or box_bg or both
-	Fl_Widget*const* a = array();
-	for (int i=children(); i--;) {
-	  Fl_Widget& o = **a++;
-	  if (outline) {
-	    fl_color(FL_RED);
-	    fl_rect(o.x()-1,o.y()-1,o.w()+2,o.h()+2);
-	  }
-	  if (box_bg) {
-	    fl_color(FL_WHITE);
-	    fl_rectf(o.x(),o.y(),o.w(),o.h());
-	  }
-	  fl_color(FL_BLACK);
-	}
-      } // outline or box_bg or both
-      Fl_Group::draw_children();
-    } // draw()
-}; // class BoxGroup
-
-Fl_Double_Window *window;
-
-void bt(const char *name, Fl_Boxtype type, int square=0) {
-  int x = N%4;
-  int y = N/4;
-  N++;
-  x = x*W+10;
-  y = y*H+10;
-  Fl_Box *b = new Fl_Box(type,x,y,square ? H-20 : W-20,H-20,name);
-  b->labelsize(11);
-  if (inactive) {
-    b->color(FL_GREEN);
-    b->deactivate();
-  }
-  if (square) b->align(FL_ALIGN_RIGHT);
-}
-
-int main(int argc, char ** argv) {
-  window = new Fl_Double_Window(4*W,ROWS*H);
-  window->box(FL_FLAT_BOX);
-#if 0 // this code uses the command line arguments to set arbitrary color schemes
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-#elif 0 // this code uses a single color to define a scheme
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-  Fl::background(113,113,198);
-#else // this code uses the nice bright blue background to show box vs. frame types
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-  window->color(12);// light blue
-#endif
-
-  // set window title to show active scheme
-  Fl::scheme(Fl::scheme()); // init scheme
-  char title[100];
-  sprintf(title,"FLTK boxtypes: scheme = '%s'",Fl::scheme()?Fl::scheme():"none");
-  window->label(title);
-
-  // create special container group for box size debugging
-  BoxGroup *bg = new BoxGroup(0,0,window->w(),window->h());
-  bg->box(FL_NO_BOX);
-
-  // create demo boxes
-  bt("FL_NO_BOX",FL_NO_BOX);
-  bt("FL_FLAT_BOX",FL_FLAT_BOX);
-  N += 2; // go to start of next row to line up boxes & frames
-  bt("FL_UP_BOX",FL_UP_BOX);
-  bt("FL_DOWN_BOX",FL_DOWN_BOX);
-  bt("FL_UP_FRAME",FL_UP_FRAME);
-  bt("FL_DOWN_FRAME",FL_DOWN_FRAME);
-  bt("FL_THIN_UP_BOX",FL_THIN_UP_BOX);
-  bt("FL_THIN_DOWN_BOX",FL_THIN_DOWN_BOX);
-  bt("FL_THIN_UP_FRAME",FL_THIN_UP_FRAME);
-  bt("FL_THIN_DOWN_FRAME",FL_THIN_DOWN_FRAME);
-  bt("FL_ENGRAVED_BOX",FL_ENGRAVED_BOX);
-  bt("FL_EMBOSSED_BOX",FL_EMBOSSED_BOX);
-  bt("FL_ENGRAVED_FRAME",FL_ENGRAVED_FRAME);
-  bt("FL_EMBOSSED_FRAME",FL_EMBOSSED_FRAME);
-  bt("FL_BORDER_BOX",FL_BORDER_BOX);
-  bt("FL_SHADOW_BOX",FL_SHADOW_BOX);
-  bt("FL_BORDER_FRAME",FL_BORDER_FRAME);
-  bt("FL_SHADOW_FRAME",FL_SHADOW_FRAME);
-  bt("FL_ROUNDED_BOX",FL_ROUNDED_BOX);
-  bt("FL_RSHADOW_BOX",FL_RSHADOW_BOX);
-  bt("FL_ROUNDED_FRAME",FL_ROUNDED_FRAME);
-  bt("FL_RFLAT_BOX",FL_RFLAT_BOX);
-  bt("FL_OVAL_BOX",FL_OVAL_BOX);
-  bt("FL_OSHADOW_BOX",FL_OSHADOW_BOX);
-  bt("FL_OVAL_FRAME",FL_OVAL_FRAME);
-  bt("FL_OFLAT_BOX",FL_OFLAT_BOX);
-  bt("FL_ROUND_UP_BOX",FL_ROUND_UP_BOX);
-  bt("FL_ROUND_DOWN_BOX",FL_ROUND_DOWN_BOX);
-  bt("FL_DIAMOND_UP_BOX",FL_DIAMOND_UP_BOX);
-  bt("FL_DIAMOND_DOWN_BOX",FL_DIAMOND_DOWN_BOX);
-
-  bt("FL_PLASTIC_UP_BOX",FL_PLASTIC_UP_BOX);
-  bt("FL_PLASTIC_DOWN_BOX",FL_PLASTIC_DOWN_BOX);
-  bt("FL_PLASTIC_UP_FRAME",FL_PLASTIC_UP_FRAME);
-  bt("FL_PLASTIC_DOWN_FRAME",FL_PLASTIC_DOWN_FRAME);
-  bt("FL_PLASTIC_THIN_UP_BOX",FL_PLASTIC_THIN_UP_BOX);
-  bt("FL_PLASTIC_THIN_DOWN_BOX",FL_PLASTIC_THIN_DOWN_BOX);
-  N += 2;
-  bt("FL_PLASTIC_ROUND_UP_BOX",FL_PLASTIC_ROUND_UP_BOX);
-  bt("FL_PLASTIC_ROUND_DOWN_BOX",FL_PLASTIC_ROUND_DOWN_BOX);
-  N += 2;
-
-  bt("FL_GTK_UP_BOX",FL_GTK_UP_BOX);
-  bt("FL_GTK_DOWN_BOX",FL_GTK_DOWN_BOX);
-  bt("FL_GTK_UP_FRAME",FL_GTK_UP_FRAME);
-  bt("FL_GTK_DOWN_FRAME",FL_GTK_DOWN_FRAME);
-  bt("FL_GTK_THIN_UP_BOX",FL_GTK_THIN_UP_BOX);
-  bt("FL_GTK_THIN_DOWN_BOX",FL_GTK_THIN_DOWN_BOX);
-  bt("FL_GTK_THIN_UP_FRAME",FL_GTK_THIN_UP_FRAME);
-  bt("FL_GTK_THIN_DOWN_FRAME",FL_GTK_THIN_DOWN_FRAME);
-  bt("FL_GTK_ROUND_UP_BOX",FL_GTK_ROUND_UP_BOX);
-  bt("FL_GTK_ROUND_DOWN_BOX",FL_GTK_ROUND_DOWN_BOX);
-  bg->end();
-  window->resizable(window);
-  window->end();
-  window->show();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/browser.cxx
+++ /dev/null
@@ -1,213 +1,0 @@
-//
-// "$Id$"
-//
-// Browser test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/*
-This is a test of how the browser draws lines.
-This is a second line.
-This is a third.
-
-That was a blank line above this.
-
-@r@_Right justify
-@c@_Center justify
-@_Left justify
-
-@bBold text
-@iItalic text
-@b@iBold Italic
-@fFixed width
-@f@bBold Fixed
-@f@iItalic Fixed
-@f@i@bBold Italic Fixed
-@lLarge
-@l@bLarge bold
-@sSmall
-@s@bSmall bold
-@s@iSmall italic
-@s@i@bSmall italic bold
-@uunderscore
-@C1RED
-@C2Green
-@C4Blue
-
-	You should try different browser types:
-	Fl_Browser
-	Fl_Select_Browser
-	Fl_Hold_Browser
-	Fl_Multi_Browser
-*/
-
-#include <FL/Fl.H>
-#include <FL/Fl_Select_Browser.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_ask.H>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-Fl_Select_Browser *browser;
-Fl_Button	*top,
-		*bottom,
-		*middle,
-		*visible,
-		*swap,
-		*sort;
-Fl_Choice       *btype;
-Fl_Int_Input	*field;
-
-void b_cb(Fl_Widget* o, void*) {
-  printf("callback, selection = %d, event_clicks = %d\n",
-	 ((Fl_Browser*)o)->value(), Fl::event_clicks());
-}
-
-void show_cb(Fl_Widget *o, void *) {
-  int line = atoi(field->value());
-
-  if (!line) {
-    fl_alert("Please enter a number in the text field\n"
-             "before clicking on the buttons.");
-    return;
-  }
-
-  if (o == top)
-    browser->topline(line);
-  else if (o == bottom)
-    browser->bottomline(line);
-  else if (o == middle)
-    browser->middleline(line);
-  else
-    browser->make_visible(line);
-}
-
-void swap_cb(Fl_Widget *, void *) {
-  int a = -1, b = -1;
-  for ( int t=0; t<browser->size(); t++ ) {	// find two selected items
-    if ( browser->selected(t) ) {
-      if ( a < 0 )
-	{ a = t; }
-      else 
-	{ b = t; break; }
-    }
-  }
-  browser->swap(a, b);				// swap them
-}
-
-void sort_cb(Fl_Widget *, void *) {
-  browser->sort(FL_SORT_ASCENDING);
-}
-
-void btype_cb(Fl_Widget *, void *) {
-  for ( int t=1; t<=browser->size(); t++ ) browser->select(t,0);
-  browser->select(1,0);		// leave focus box on first line
-       if ( strcmp(btype->text(),"Normal")==0) browser->type(FL_NORMAL_BROWSER);
-  else if ( strcmp(btype->text(),"Select")==0) browser->type(FL_SELECT_BROWSER);
-  else if ( strcmp(btype->text(),"Hold"  )==0) browser->type(FL_HOLD_BROWSER);
-  else if ( strcmp(btype->text(),"Multi" )==0) browser->type(FL_MULTI_BROWSER);
-  browser->redraw();
-}
-
-int main(int argc, char **argv) {
-  int i;
-  if (!Fl::args(argc,argv,i)) Fl::fatal(Fl::help);
-  const char* fname = (i < argc) ? argv[i] : "browser.cxx";
-  Fl_Double_Window window(560,400,fname);
-  browser = new Fl_Select_Browser(0,0,560,350,0);
-  browser->type(FL_MULTI_BROWSER);
-  //browser->type(FL_HOLD_BROWSER);
-  //browser->color(42);
-  browser->callback(b_cb);
-  // browser->scrollbar_right();
-  //browser->has_scrollbar(Fl_Browser::BOTH_ALWAYS);
-  if (!browser->load(fname)) {
-    int done = 0;
-#ifdef _MSC_VER
-    // if 'browser' was started from the VisualC environment in Win32, 
-    // the current directory is set to the environment itself, 
-    // so we need to correct the browser file path
-    if ( i == argc ) 
-    {
-      fname = "../test/browser.cxx";
-      done = browser->load(fname);
-    }
-#elif defined(__APPLE__)
-    if ( i == argc ) 
-    {
-      char buf[2048];
-      strcpy(buf, argv[0]);
-      char *slash = strrchr(buf, '/');
-      if (slash)
-#if defined(USING_XCODE)
-        strcpy(slash, "/../Resources/browser.cxx");
-#else
-	strcpy(slash, "/../../../browser.cxx");
-#endif
-      done = browser->load(buf);
-    }
-#endif
-    if ( !done )
-    {
-      fl_message("Can't load %s, %s\n", fname, strerror(errno));
-      exit(1);
-    }
-  }
-  browser->position(0);
-
-  field = new Fl_Int_Input(55, 350, 505, 25, "Line #:");
-  field->callback(show_cb);
-
-  top = new Fl_Button(0, 375, 80, 25, "Top");
-  top->callback(show_cb);
-
-  bottom = new Fl_Button(80, 375, 80, 25, "Bottom");
-  bottom->callback(show_cb);
-
-  middle = new Fl_Button(160, 375, 80, 25, "Middle");
-  middle->callback(show_cb);
-
-  visible = new Fl_Button(240, 375, 80, 25, "Make Vis.");
-  visible->callback(show_cb);
-
-  swap = new Fl_Button(320, 375, 80, 25, "Swap");
-  swap->callback(swap_cb);
-  swap->tooltip("Swaps two selected lines\n(Use CTRL-click to select two lines)");
-
-  sort = new Fl_Button(400, 375, 80, 25, "Sort");
-  sort->callback(sort_cb);
-
-  btype = new Fl_Choice(480, 375, 80, 25);
-  btype->add("Normal");
-  btype->add("Select");
-  btype->add("Hold");
-  btype->add("Multi");
-  btype->callback(btype_cb);
-  btype->value(3);
-  btype->tooltip("Changes the browser type()");
-
-  window.resizable(browser);
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/test/button.cxx
+++ /dev/null
@@ -1,61 +1,0 @@
-//
-// "$Id$"
-//
-// Button/callback test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_ask.H>
-
-void beepcb(Fl_Widget *, void *) {
-  fl_beep();
-  fflush(stdout);
-}
-
-void exitcb(Fl_Widget *, void *) {
-  exit(0);
-}
-
-#if 0
-// test Fl::add_fd()...
-void stdin_cb(int, void*) {
-  char buf[1000];
-  fgets(buf, sizeof(buf), stdin);
-  printf("stdin callback\n");
-}
-#endif
-
-int main(int argc, char ** argv) {
-  Fl_Window *window = new Fl_Window(320,65);
-  Fl_Button *b1 = new Fl_Button(20, 20, 80, 25, "&Beep");
-  b1->callback(beepcb,0);
-  /*Fl_Button *b2 =*/ new Fl_Button(120,20, 80, 25, "&no op");
-  Fl_Button *b3 = new Fl_Button(220,20, 80, 25, "E&xit");
-  b3->callback(exitcb,0);
-  window->end();
-  window->show(argc,argv);
-#if 0
-  Fl::add_fd(0, stdin_cb);
-#endif
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/buttons.cxx
+++ /dev/null
@@ -1,47 +1,0 @@
-//
-// "$Id$"
-//
-// Another button test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Repeat_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Round_Button.H>
-#include <FL/Fl_Tooltip.H>
-
-int main(int argc, char ** argv) {
-  Fl_Window *window = new Fl_Window(320,130);
-  Fl_Button *b = new Fl_Button(10, 10, 130, 30, "Fl_Button");
-  b->tooltip("This is a Tooltip.");
-  new Fl_Return_Button(150, 10, 160, 30, "Fl_Return_Button");
-  new Fl_Repeat_Button(10,50,130,30,"Fl_Repeat_Button");
-  new Fl_Light_Button(10,90,130,30,"Fl_Light_Button");
-  new Fl_Round_Button(150,50,160,30,"Fl_Round_Button");
-  new Fl_Check_Button(150,90,160,30,"Fl_Check_Button");
-  window->end();
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/cairo_test.cxx
+++ /dev/null
@@ -1,161 +1,0 @@
-//
-// "$Id: arc.cxx 5115 2006-05-12 16:00:00Z fabien $"
-//
-// Arc drawing test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-#ifdef FLTK_HAVE_CAIRO
-
-#include <FL/Fl_Cairo_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-#define DEF_WIDTH 0.03
-
-// uncomment the following line to enable cairo context autolink feature:
-// #define AUTOLINK
-
-// put your drawing stuff here
-float drawargs[7] = {90, 90, 100, 100, 0, 360, 0};
-const char* name[7] = {"X", "Y", "W", "H", "start", "end", "rotate"};
-
-
-static void centered_text(cairo_t* cr, double x0,double y0,double w0,double h0, const char * my_text) {
-    cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_OBLIQUE,CAIRO_FONT_WEIGHT_BOLD);
-    cairo_set_source_rgba (cr, 0.9, 0.9, 0.4, 0.6);
-    cairo_text_extents_t extents;
-    cairo_text_extents (cr, my_text, &extents);
-    double x = (extents.width/2 + extents.x_bearing);
-    double y = (extents.height/2 + extents.y_bearing);
-    cairo_move_to  (cr, x0+w0/2-x, y0+h0/2 - y);
-    cairo_text_path(cr,my_text);
-    cairo_fill_preserve (cr);
-    cairo_set_source_rgba (cr, 0, 0, 0,1);
-    cairo_set_line_width (cr, 0.004);
-    cairo_stroke (cr);
-    cairo_set_line_width (cr, DEF_WIDTH);
-
-
-}
-
-static void round_button(cairo_t* cr, double x0, double y0, 
-		  double rect_width, double rect_height, double radius,
-		  double r, double g, double b) {
-    
-    double x1,y1;
-    
-    
-    x1=x0+rect_width;
-    y1=y0+rect_height;
-    if (!rect_width || !rect_height)
-	return;
-    if (rect_width/2<radius) {
-	if (rect_height/2<radius) {
-	    cairo_move_to  (cr, x0, (y0 + y1)/2);
-	    cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
-	    cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
-	    cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
-	    cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
-	} else {
-	    cairo_move_to  (cr, x0, y0 + radius);
-	    cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
-	    cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
-	    cairo_line_to (cr, x1 , y1 - radius);
-	    cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
-	    cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
-	}
-    } else {
-	if (rect_height/2<radius) {
-	    cairo_move_to  (cr, x0, (y0 + y1)/2);
-	    cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
-	    cairo_line_to (cr, x1 - radius, y0);
-	    cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
-	    cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
-	    cairo_line_to (cr, x0 + radius, y1);
-	    cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
-	} else {
-	    cairo_move_to  (cr, x0, y0 + radius);
-	    cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
-	    cairo_line_to (cr, x1 - radius, y0);
-	    cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
-	    cairo_line_to (cr, x1 , y1 - radius);
-	    cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
-	    cairo_line_to (cr, x0 + radius, y1);
-	    cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
-	}
-    }
-    cairo_close_path (cr);
-    
-    cairo_pattern_t *pat= 
-	//cairo_pattern_create_linear (0.0, 0.0,  0.0, 1.0);
-        cairo_pattern_create_radial (0.25, 0.24, 0.11, 0.24,  0.14, 0.35);
-    cairo_pattern_set_extend (pat, CAIRO_EXTEND_REFLECT);
-    
-    cairo_pattern_add_color_stop_rgba (pat, 1.0, r, g, b, 1);
-    cairo_pattern_add_color_stop_rgba (pat, 0.0, 1, 1, 1, 1);
-    cairo_set_source (cr, pat);
-    cairo_fill_preserve (cr);
-    cairo_pattern_destroy (pat);
-
-    //cairo_set_source_rgb (cr, 0.5,0.5,1);    cairo_fill_preserve (cr);
-    cairo_set_source_rgba (cr, 0, 0, 0.5, 0.3);
-    cairo_stroke (cr);
-
-    cairo_set_font_size (cr, 0.08);
-    centered_text(cr,x0,y0,rect_width, rect_height, "FLTK loves Cairo!");
-
-}
-// The cairo rendering cb called during Fl_Cairo_Window::draw() :
-static void my_cairo_draw_cb(Fl_Cairo_Window* window, cairo_t* cr) {
-	
-  int w= window->w(), h = window->h(); 
-  
-    cairo_set_line_width (cr, DEF_WIDTH);
-    cairo_scale (cr, w,h);
-
-    round_button(cr,0.1,0.05,0.8,0.2,0.4,0,0,1);
-    round_button(cr,0.1,0.35,0.8,0.2,0.4,1,0,0);
-    round_button(cr,0.1,0.65,0.8,0.2,0.4,0,1,0);
-    return;
-}
-
-int main(int argc, char** argv) {
-#ifdef AUTOLINK
-  Fl::cairo_autolink_context(true);
-#endif
-    Fl_Cairo_Window window(300,300);
-    
-    window.resizable(&window);
-    window.color(FL_WHITE);
-    window.set_draw_cb(my_cairo_draw_cb);
-    window.show(argc,argv);
-
-    return Fl::run();
-}
-#else
-#include <FL/fl_ask.H>
-
-int main(int argc, char** argv) {
-  fl_message("please configure fltk with CAIRO enabled (--enable-cairo or --enable-cairoext)"); 
-  return 0;
-}
-#endif
-
-//
-// End of "$Id: arc.cxx 5115 2006-05-12 16:00:00Z fabien $".
-//
--- a/DoConfig/fltk/test/checkers.app/Contents/Info.plist
+++ /dev/null
@@ -1,47 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plist version="0.9">
-    <dict>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-
-	<key>CFBundleExecutable</key>
-	<string>checkers</string>
-
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.checkers</string>
-
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 1997-2010 by Bill Spitzak and others</string>
-
-	<key>CFAppleHelpAnchor</key>
-	<string>help</string>
-
-	<key>CFBundleName</key>
-	<string>checkers</string>
-
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-
-	<key>CFBundleSignature</key>
-	<string>FLSU</string>
-
-	<key>CFBundleIconFile</key>
-	<string>checkers.icns</string>
-
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-
-	<key>CFBundleGetInfoString</key>
-	<string>1.0, Copyright 1997-2010 by Bill Spitzak and others</string>
-
-	<key>NSHighResolutionCapable</key>
-	<true/>
-
-    </dict>
-</plist>
--- a/DoConfig/fltk/test/checkers.app/Contents/PkgInfo
+++ /dev/null
@@ -1,1 +1,0 @@
-FLSUFlsu
binary files a/DoConfig/fltk/test/checkers.app/Contents/Resources/checkers.icns /dev/null differ
--- a/DoConfig/fltk/test/checkers.cxx
+++ /dev/null
@@ -1,1362 +1,0 @@
-//
-// "$Id$"
-//
-// Checkers game for the Fast Light Tool Kit (FLTK).
-//
-// Hours of fun: the FLTK checkers game!
-// Based on a very old algorithm, but it still works!
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-const char* copyright = 
-"Checkers game\n"
-"Copyright (C) 1997-2010 Bill Spitzak    spitzak@d2.com\n"
-"Original Pascal code:\n"
-"Copyright 1978, Oregon Minicomputer Software, Inc.\n"
-"2340 SW Canyon Road, Portland, Oregon 97201\n"
-"Written by Steve Poulsen 18-Jan-79\n"
-"\n"
-"This program is free software; you can redistribute it and/or modify "
-"it under the terms of the GNU General Public License as published by "
-"the Free Software Foundation; either version 2 of the License, or "
-"(at your option) any later version.\n"
-"\n"
-"This program is distributed in the hope that it will be useful, "
-"but WITHOUT ANY WARRANTY; without even the implied warranty of "
-"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the "
-"GNU General Public License for more details.\n"
-"\n"
-"You should have received a copy of the GNU Library General Public "
-"License along with this library; if not, write to the Free Software "
-"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 "
-"USA.";
-
-// Define FLTK to get the fltk interface
-// Define VT100 to get the VT100 interface
-// Define both to get a program that takes a -t switch
-
-#define FLTK
-//#define VT100
-
-#undef check
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <time.h>
-
-#ifdef VT100
-#include <ctype.h>	// toupper
-#endif
-
-////////////////////////////////////////////////////////////////
-// The algorithim:
-
-int maxevaluate=2500;		// max number of moves to examine on a turn
-int maxnodes = 2500;		// maximum number of nodes in search tree
-int maxply = 20;		// maximum depth to look ahead
-char forcejumps = 1;		// is forced jumps rule in effect?
-
-// scoring parameters: (all divided by 5 from original code)
-// some signs seem to be backwards, marked them with (-) in comment
-const int spiece = 800;		// value of a piece
-const int sking = 1200;		// value of a king
-const int sadvan = 160;		// value of mypieces/theirpieces-1
-// const int smobil = ?		// moves *enemy* can make w/o being jumped
-const int sallpin = 80;		// mobil == 0
-const int sdeny = 10;		// moves enemy can make that will be jumped
-const int spin = 32;		// enemy pieces that have no move except jumped
-const int sthreat = -10;	// enemy pieces we can jump if not moved (-)
-const int sgrad = 1;		// score of piece positions
-const int sback = 10;		// back row occupied so enemy can't make king
-const int smoc2 = 200;		// more mobility, more center
-const int smoc3 = -8;		// less mobility, less center
-const int smoc4 = -80;		// more mobility, less center
-const int smode2 = -14;		// less mobility, less denied
-const int smode3 = -40;		// more mobility, more denied (-)
-const int sdemmo = -20;		// more denied, more moves (-)
-const int scent = 10;		// pieces in center
-const int skcent = 100;		// kings in center
-
-const int depthpenalty=4;	// guess
-const int noise=2;		// values less or eq to this apart are eq
-
-// const int sattackking = 4;	// not used
-// const int sattackpiece = 3;
-
-struct node {
-  node *father;
-  node *son;		// best son
-  node *brother;	// next brother
-  short int value;	// value of this board position to player making move
-  unsigned char from,to; // the move to reach this board
-  long int jump;	// bit map of locations jumped
-  unsigned char mobil;
-  unsigned char deny;
-  unsigned char pin;
-  unsigned char threat;
-  short int gradient;
-  unsigned who:1;	// 0 = black's move, 1 = white's move
-  unsigned king:1;	// 1 = move causes piece to be kinged
-  unsigned back:1;
-  unsigned moc2:1;
-  unsigned moc3:1;
-  unsigned moc4:1;
-  unsigned mode2:1;
-  unsigned mode3:1;
-  unsigned demmo:1;
-};
-
-int nodes;		// count of nodes
-
-/*	Board positions:	Border positions:
-
-	      WHITE		  00  01  02  03  04
-	  05  06  07  08	04  XX  XX  XX  XX
-	09  10  11  12		  XX  XX  XX  XX  13
-	  14  15  16  17	13  XX  XX  XX  XX
-	18  19  20  21		  XX  XX  XX  XX  22
-	  23  24  25  26	22  XX  XX  XX  XX
-	27  28  29  30		  XX  XX  XX  XX  31
-	  32  33  34  36	31  XX  XX  XX  XX
-	36  37  38  39		  XX  XX  XX  XX  40
-	      BLACK		40  41  42  43  44
-
-*/
-
-typedef char piece;
-
-// Piece values so that BLACK and WHITE are bit flags:
-#define EMPTY 0
-#define BLACK 1
-#define WHITE 2
-#define KING 4
-#define BLACKKING 5
-#define WHITEKING 6
-#define BLUE 8
-
-const piece flip[9] = {
-  EMPTY, WHITE, BLACK, 0, 0, WHITEKING, BLACKKING, 0, BLUE};
-
-const int offset[9][4] = {	// legal move directions
-  {0,0,0,0},
-  {-5,-4,0,0},
-  {4,5,0,0},
-  {0,0,0,0},
-  {0,0,0,0},
-  {4,5,-4,-5},
-  {4,5,-4,-5},
-  {0,0,0,0},
-  {0,0,0,0}
-};
-
-piece b[45];		// current board position being considered
-
-int evaluated;		// number of moves evaluated this turn
-
-char centralsquares[45];
-char is_protected[45];
-
-piece flipboard[45];	// swapped if enemy is black
-piece *tb;		// pointer to real or swapped board
-#define FRIEND BLACK
-#define FRIENDKING BLACKKING
-#define ENEMY WHITE
-#define ENEMYKING WHITEKING
-
-char check(int target,int direction) {
-  // see if enemy at target can be jumped from direction by our piece
-  int dst = target-direction;
-  if (tb[dst]) return(0);
-  int src = target+direction;
-  if (tb[src] == FRIENDKING);
-  else if (direction < 0 || tb[src] != FRIEND) return(0);
-  piece aa = tb[target]; piece bb = tb[src];
-  tb[target] = EMPTY; tb[src] = EMPTY;
-  int safe =
-    (   (tb[src-4]&FRIEND && tb[src-8]&ENEMY)
-     || (tb[src-5]&FRIEND && tb[src-10]&ENEMY)
-     || (tb[dst-4]&ENEMY && !tb[dst+4])
-     || (tb[dst-5]&ENEMY && !tb[dst+5])
-     || (tb[src+4]&FRIEND && tb[src+8]==ENEMYKING)
-     || (tb[src+5]&FRIEND && tb[src+10]==ENEMYKING)
-     || (tb[dst+4]==ENEMYKING && !tb[dst-4])
-     || (tb[dst+5]==ENEMYKING && !tb[dst-5]));
-  tb[target] = aa; tb[src] = bb;
-  return(safe);
-}
-
-int deniedmoves,undeniedmoves;
-void analyzemove(int direction,int src) {
-  int target = src+direction;
-  if (!tb[target]) {
-    if (!tb[target+direction]) is_protected[target] = 1;
-    piece a = tb[src]; tb[src] = EMPTY;
-    if (check(target,4) || check(target,5) ||
-	check(target,-4) || check(target,-5) ||
-	(tb[src+4]&ENEMY && check(src+4,4)) ||
-	(tb[src+5]&ENEMY && check(src+5,5)) ||
-	(tb[src-4]&ENEMY && check(src-4,-4)) ||
-	(tb[src-5]&ENEMY && check(src-5,-5)))
-      deniedmoves++;
-    else undeniedmoves++;
-    tb[src] = a;
-  }
-}
-
-void evaluateboard(node *n,int print) {
-
-  if (!n->who) tb = b;	// move was black's
-  else {
-    for (int i=0; i<45; i++) flipboard[44-i] = flip[(int)b[i]];
-    tb = flipboard;
-  }
-
-  memset(is_protected,0,sizeof(is_protected));
-  int friendpieces = 0;
-  int enemypieces = 0;
-  int friendkings = 0;
-  int enemykings = 0;
-  int friendkcent = 0;
-  int friendcent = 0;
-  int enemykcent = 0;
-  int enemycent = 0;
-  n->mobil = n->deny = n->pin = n->threat = 0;
-
-  int i;
-  for (i=5; i<40; i++) switch(tb[i]) {
-  case ENEMYKING:
-    enemykings++;
-    enemykcent += centralsquares[i];
-    deniedmoves = 0;
-    undeniedmoves = 0;
-    if (i>8) {
-      analyzemove(-4,i);
-      analyzemove(-5,i);
-    }
-    goto J1;
-  case ENEMY:
-    deniedmoves = 0;
-    undeniedmoves = 0;
-  J1:	enemypieces++;
-    enemycent += centralsquares[i];
-    if (i<36) {
-      analyzemove(4,i);
-      analyzemove(5,i);
-    }
-    if (deniedmoves && !undeniedmoves) n->pin++;
-    n->deny += deniedmoves;
-    n->mobil += undeniedmoves;
-    break;
-  case FRIENDKING:
-    friendkings++;
-    friendkcent += centralsquares[i];
-    if (tb[i+4]&ENEMY && !tb[i+8] && !(tb[i+4]==ENEMYKING && !tb[i-4]))
-      n->threat++;
-    if (tb[i+5]&ENEMY && !tb[i+10] && !(tb[i+5]==ENEMYKING && !tb[i-5]))
-      n->threat++;
-  case FRIEND:
-    friendpieces++;
-    friendcent += centralsquares[i];
-    if (tb[i-4]&ENEMY && !tb[i-8] && tb[i+4]) n->threat++;
-    if (tb[i-5]&ENEMY && !tb[i-10] && tb[i+5]) n->threat++;
-    break;
-  }
-
-  int gradient[40];
-  for (i=4; i<9; i++) gradient[i] = tb[i] ? 0 : 32;
-  int total = 0;
-  for (i=9; i<40; i++) {
-    int x = (gradient[i-4]+gradient[i-5])/2;
-    if (tb[i]==FRIEND) total += x;
-    gradient[i] = (tb[i]&FRIEND || (!tb[i] && !is_protected[i])) ? x : 0;
-  }
-  n->gradient = total;
-
-  n->back = tb[39]==FRIEND && tb[37]==FRIEND && !enemykings;
-
-  node* f = n->father;
-
-  n->moc2 = f->mobil>n->mobil && friendcent>enemycent;
-  n->moc3 = f->mobil<=n->mobil && friendcent<enemycent;
-  n->moc4 = f->mobil>n->mobil && friendcent<enemycent;
-  n->mode2 = f->mobil<=n->mobil && n->deny<f->deny;
-  n->mode3 = f->mobil>n->mobil && n->deny>f->deny;
-  n->demmo = n->deny>f->deny && f->deny+f->mobil>n->deny+n->mobil;
-
-  total =
-    spiece	* (friendpieces - enemypieces) +
-    (sking-spiece) * (friendkings	- enemykings) +
-    //	mobil?
-    sdeny	* (n->deny	- f->deny) +
-    spin	* (n->pin	- f->pin) +
-    sthreat	* (n->threat	- f->threat) +
-    sgrad	* (n->gradient	- f->gradient) +
-    sback	* (n->back	- f->back) +
-    smoc2	* (n->moc2	- f->moc2) +
-    smoc3	* (n->moc3	- f->moc3) +
-    smoc4	* (n->moc4	- f->moc4) +
-    smode2	* (n->mode2	- f->mode2) +
-    smode3	* (n->mode3	- f->mode3) +
-    sdemmo	* (n->demmo	- f->demmo) +
-    scent	* (friendcent	- enemycent) +
-    (skcent-scent) * (friendkcent	- enemykcent);
-  if (!n->mobil) total += sallpin;
-
-  if (!enemypieces) total = 30000;
-  else if (friendpieces > enemypieces)
-    total += (sadvan*friendpieces)/enemypieces-sadvan;
-  else total -= (sadvan*enemypieces)/friendpieces-sadvan;
-
-  if (print) {
-    printf("\tParent\tNew\tScore\n");
-    printf("pieces\t%d\t%d\t%d\n",enemypieces,friendpieces,
-	   spiece*(friendpieces-enemypieces));
-    printf("kings\t%d\t%d\t%d\n",enemykings,friendkings,
-	   (sking-spiece)*(friendkings-enemykings));
-    printf("mobil\t%d\t%d\n",f->mobil,n->mobil);
-    printf("deny\t%d\t%d\t%d\n",f->deny,n->deny,sdeny*(n->deny-f->deny));
-    printf("pin\t%d\t%d\t%d\n",f->pin,n->pin,spin*(n->pin-f->pin));
-    printf("threat\t%d\t%d\t%d\n",f->threat,n->threat,sthreat*(n->threat-f->threat));
-    printf("grad\t%d\t%d\t%d\n",f->gradient,n->gradient,sgrad*(n->gradient-f->gradient));
-    printf("back\t%d\t%d\t%d\n",f->back,n->back,sback*(n->back-f->back));
-    printf("moc2\t%d\t%d\t%d\n",f->moc2,n->moc2,smoc2*(n->moc2-f->moc2));
-    printf("moc3\t%d\t%d\t%d\n",f->moc3,n->moc3,smoc3*(n->moc3-f->moc3));
-    printf("moc4\t%d\t%d\t%d\n",f->moc4,n->moc4,smoc4*(n->moc4-f->moc4));
-    printf("mode2\t%d\t%d\t%d\n",f->mode2,n->mode2,smode2*(n->mode2-f->mode2));
-    printf("mode3\t%d\t%d\t%d\n",f->mode3,n->mode3,smode3*(n->mode3-f->mode3));
-    printf("demmo\t%d\t%d\t%d\n",f->demmo,n->demmo,sdemmo*(n->demmo-f->demmo));
-    printf("cent\t%d\t%d\t%dn",enemycent,friendcent,scent*(friendcent-enemycent));
-    printf("kcent\t%d\t%d\t%d\n",enemykcent,friendkcent,skcent*(friendkcent-enemykcent));
-    printf("total:\t\t\t%d\n",total);
-  }
-  else {
-    n->value = total;
-    evaluated++;
-  }
-}	// end of evaluateboard
-
-// --------------------- Tree management -----------------
-
-node *freelist;
-
-node *newnode(void) {
-  node *n;
-  if (freelist) {
-    n = freelist;
-    freelist = n->brother;
-  }
-  else n = (node *)malloc(sizeof(node));
-  memset(n,0,sizeof(node));
-  nodes++;
-  return(n);
-}
-
-void extract(node *n) {
-  node* i = n->father;
-  if (i) {
-    node* j = i->son;
-    if (j==n) i->son = n->brother;
-    else while (j) {
-      i = j; j = j->brother;
-      if (j==n) {i->brother = n->brother; break;}
-    }
-  }
-  n->brother = 0;
-}
-
-void killnode(node *x) {
-  if (!x) return;
-  node *y;
-  for (y = x; ; y = y->brother) {
-    nodes--;
-    killnode(y->son); y->son = 0;
-    if (!y->brother) break;
-  }
-  y->brother = freelist;
-  freelist = x;
-}
-
-int seed;		// current random number
-
-void insert(node *n) {
-  int val = n->value;
-  node **pp;
-  for (pp = &(n->father->son); *pp; pp = &((*pp)->brother)) {
-    int val1 = (*pp)->value;
-    if (abs(val-val1) <= noise) {
-      seed = (seed*13077+5051)%0100000;
-      if ((seed & 070) >= 060) break;
-    }
-    else if (val > val1) break;
-  }
-  n->brother = *pp;
-  *pp = n;
-}
-
-// --------------------------------------------------------------
-
-void movepiece(node* f, int i, node* jnode) {
-  static char jumphappened;
-
-  for (int k=0; k<4; k++) {
-    int direction = offset[(int)b[i]][k];
-    if (!direction) break;
-    int j = i+direction;
-    if (b[j] == EMPTY) {
-      if (!jnode && (!forcejumps || !f->son || !f->son->jump)) {
-	node* n = newnode();
-	n->father = f;
-	n->who = !f->who;
-	n->from = i;
-	n->to = j;
-	piece oldpiece = b[i]; b[i] = EMPTY;
-	if (!(oldpiece&KING) && n->who ? (j>=36) : (j<=8)) {
-	  n->king = 1;
-	  b[j] = oldpiece|KING;
-	}
-	else b[j] = oldpiece;
-	evaluateboard(n,0);
-	insert(n);
-	b[i] = oldpiece; b[j] = EMPTY;
-      }
-    } else if (((b[j]^b[i])&(WHITE|BLACK))==(WHITE|BLACK) && !b[j+direction]) {
-      if (forcejumps && f->son && !f->son->jump) {
-	killnode(f->son);
-	f->son = 0;
-      }
-      int jumploc = j;
-      j += direction;
-      node* n = newnode();
-      n->father = f;
-      n->who = !f->who;
-      n->from = i;
-      n->to = j;
-      n->jump = (1<<(jumploc-10));
-      piece oldpiece = b[i]; b[i] = EMPTY;
-      if (!(oldpiece&KING) && n->who ? (j>=36) : (j<=8)) {
-	n->king = 1;
-	b[j] = oldpiece|KING;
-      }
-      else b[j] = oldpiece;
-      if (jnode) {
-	n->from = jnode->from;
-	n->jump |= jnode->jump;
-	n->king |= jnode->king;
-      }
-      piece jumpedpiece = b[jumploc];
-      b[jumploc] = EMPTY;
-      jumphappened = 0;
-      movepiece(f,j,n);
-      if (forcejumps && jumphappened) killnode(n);
-      else {evaluateboard(n,0); insert(n);}
-      b[i] = oldpiece; b[j] = EMPTY;
-      b[jumploc] = jumpedpiece;
-      jumphappened = 1;
-    }
-  }
-}
-
-void expandnode(node *f) {
-  if (f->son || f->value > 28000) return;	// already done
-  piece turn = f->who ? BLACK : WHITE;
-  for (int i=5; i<40; i++) if (b[i]&turn) movepiece(f,i,0);
-  if (f->son) {
-    f->value = -f->son->value;
-    if (f->brother) f->value -= depthpenalty;
-  }
-  else f->value = 30000;
-}
-
-void makemove(node *n) {
-  b[n->to] = b[n->from];
-  if (n->king) b[n->to] |= KING;
-  b[n->from] = EMPTY;
-  if (n->jump) for(int i=0; i<32; i++) {
-    if (n->jump & (1<<i)) b[10+i] = EMPTY;
-  }
-}
-
-int didabort(void);
-
-int fullexpand(node *f, int level) {
-  if (didabort() || nodes > maxnodes-(maxply*10) || evaluated > maxevaluate) return(0);
-  expandnode(f);
-  if (!f->son) return(1);
-  piece oldboard[45];
-  memmove(oldboard,b,sizeof(b));
-  node* n = f->son;
-  if (!n->jump && n->brother) {if (level<1) return(1); level--;}
-  int i;
-  node* sons[32]; for (i=0; (sons[i++] = n); n = n->brother) {/*empty*/}
-  int ret = 1;
-  for (i=0; ret && (n = sons[i++]);) {
-    makemove(n);
-    ret = fullexpand(n,level);
-    memmove(b,oldboard,sizeof(b));
-    extract(n);
-    insert(n);
-  }
-  f->value = -f->son->value;
-  return(ret);
-}
-
-int descend(node *f) {
-  static int depth;
-  if (didabort() || nodes > maxnodes || depth >= maxply) return(0);
-  if (f->son) {
-    node* n = f->son;
-    makemove(n);
-    depth++;
-    int ret = descend(n);
-    depth--;
-    extract(n);
-    insert(n);
-    f->value = -f->son->value;
-    return(ret);
-  }
-  else {expandnode(f); return(1);}
-}
-
-char debug;
-
-node *calcmove(node *root) {	// return best move after root
-  expandnode(root);
-  if (!root->son) return(0);	// no move due to loss
-  if (debug) printf("calcmove() initial nodes = %d\n",nodes);
-  evaluated = 0;
-  if (root->son->brother) {
-    int x;
-    for (x = 1; abs(root->value)<28000 && fullexpand(root,x); x++);
-    piece saveboard[45]; memmove(saveboard,b,sizeof(b));
-    while (abs(root->value)<28000) {
-      x = descend(root);
-      memmove(b,saveboard,sizeof(b));
-      if (!x) break;
-    }
-  }
-  if (debug) printf(" evaluated %d, nodes = %d\n", evaluated, nodes);
-  return(root->son);
-}
-
-// the actual game state ----------------
-
-node *root,*undoroot;
-
-piece jumpboards[24][45];	// saved boards for undoing jumps
-int nextjump;
-
-char user;	// 0 = black, 1 = white
-char playing;
-char autoplay;
-
-void newgame(void) {
-
-  int n;
-  for (n=0; n<5; n++) b[n] = BLUE;
-  for (n=5; n<18; n++) b[n] = WHITE;
-  for (n=18; n<27; n++) b[n] = EMPTY;
-  for (n=27; n<40; n++) b[n] = BLACK;
-  for (n=40; n<45; n++) b[n] = BLUE;
-  b[13] = b[22] = b[31] = BLUE;
-
-  centralsquares[15] = centralsquares[16] =
-    centralsquares[19] = centralsquares[20] =
-    centralsquares[24] = centralsquares[25] =
-    centralsquares[28] = centralsquares[29] = 1;
-
-  // set up initial search tree:
-  nextjump = 0;
-  killnode(undoroot);
-  undoroot = root = newnode();
-
-  // make it white's move, so first move is black:
-  root->who = 1;
-  user = 0;
-  playing = 1;
-}
-
-void domove(node* move) {
-  if (move->jump) memmove(jumpboards[nextjump++],b,sizeof(b));
-  makemove(move);
-  extract(move);
-  killnode(root->son);
-  root->son = move;
-  root = move;
-  if (debug) evaluateboard(move,1);
-}
-
-node* undomove() {
-  node *n = root;
-  if (n == undoroot) return 0; // no more undo possible
-  if (n->jump) memmove(b,jumpboards[--nextjump],sizeof(b));
-  else {
-    b[n->from] = b[n->to];
-    if (n->king) b[n->from] &= (WHITE|BLACK);
-    b[n->to] = EMPTY;
-  }
-  root = n->father;
-  killnode(n);
-  root->son = 0;
-  root->value = 0;	// prevent it from thinking game is over
-  playing = 1;
-  if (root == undoroot) user = 0;
-  return n;
-}
-
-const char _usermoves[] =
-"B1D1F1H1A2C2E2G2??B3D3F3H3A4C4E4G4??B5D5F5H5A6C6E6G6??B7D7F7H7A8C8E8G8??";
-#define usermoves(x,y) _usermoves[2*((x)-5)+(y)-1]
-
-void dumpnode(node *n, int help) {
-  int x = n->from;
-  int y = n->to;
-  if (help) printf("%c%c %c%c\t- ",
-		   usermoves(x,1),usermoves(x,2),
-		   usermoves(y,1),usermoves(y,2));
-  printf("%s %ss from %c%c to %c%c",
-	 n->who ? "White" : "Black",
-	 n->jump ? "jump" : "move",
-	 usermoves(x,1),usermoves(x,2),
-	 usermoves(y,1),usermoves(y,2));
-  if (n->jump) {
-    for (int i=0; i<32; i++) if (n->jump & (1<<i))
-      printf(", %c%c",usermoves(10+i,1),usermoves(10+i,2));
-    printf(" removed");
-  }
-  printf(" (%+d).\n",n->value);
-}
-
-int abortflag;
-
-////////////////////////////////////////////////////////////////
-// VT100 Interface:
-#ifdef VT100
-
-void positioncursor(int i) {
-  printf("\033[%d;%dH",
-	 usermoves(i,2)-'0'+1,
-	 2*(usermoves(i,1)-'A')+1);
-}
-
-void outpiecename(piece n) {
-  printf(n&BLACK ? "\033[1;7m" : "\033[1m");
-  putchar(" BW??BW??"[n]);
-  putchar(" BW??KK??"[n]);
-  printf("\033[0m");
-}
-
-void VT100board(void) {
-  printf("\033<\033[H\033[J\033[10r");
-  int l = 0;
-  puts(" A B C D E F G H");
-  for (int i=0; i<4; i++) {
-    int j = 9*i+5;
-    int k;
-    for (k=0; k<4; k++) {
-      printf("\033[7m  \033[0m");
-      outpiecename(b[j+k]);
-    }
-    l++;
-    printf("%d\n",l);
-    j += 4;
-    for (k=0; k<4; k++) {
-      outpiecename(b[j+k]);
-      printf("\033[7m  \033[0m");
-    }
-    l++;
-    printf("%d\n",l);
-  }
-}
-
-void VT100move(node *n, int) {
-  if (!n) return;
-  printf("\0337");
-  positioncursor(n->from);
-  outpiecename(b[n->from]);
-  positioncursor(n->to);
-  outpiecename(b[n->to]);
-  if (n->jump) for(int i=0; i<32; i++) {
-    if (n->jump & (1<<i)) {
-      positioncursor(10+i);
-      outpiecename(b[10+i]);
-    }
-  }
-  printf("\0338");
-}
-
-int decode(char *m) {
-  int i;
-  for(i=5; i<=40; i++)
-    if (toupper(m[0])==usermoves(i,1) && m[1]==usermoves(i,2)) return(i);
-  return(0);
-}
-
-#include <signal.h>
-
-static void sigint(...) {
-  abortflag = 1;
-  signal(SIGINT,sigint);
-}
-
-void fixexit(int x) {
-  printf("\0337\033[r\0338");
-  exit(x);
-}
-
-// Returns a son, or 0 if no move specified, or root to cause "help"
-node *getusermove(void) {
-  int i,j;
-  node *t;
-  char line[100],*m1,*m2;
-
-  if (playing)
-    printf("\033[1m%s's move?\033[0m ",root->who ? "Black" : "White");
-  else
-    printf("\033[1mCommand?\033[0m ");
-  abortflag = 0;
-  if (!fgets(line, sizeof(line), stdin)) {
-    putchar('\n');
-    if (feof(stdin)) fixexit(0);
-    return 0;
-  }
-  for (m1 = line; *m1 && *m1<=' '; m1++);
-  if (!*m1) return(0);
-  m2 = m1+1;
-  if (*m2) m2++;
-  for (; *m2 && *m2<'0'; m2++);
-  if (playing && m1[1]>='0' && m1[1]<='9') {
-    i = decode(m1);
-    j = decode(m2);
-    if (i && j) for (t = root->son; t; t = t->brother)
-      if (t->from == i && t->to == j) return(t);
-    puts("Valid moves are:");
-    m1[0] = 'L';
-  }
-  switch(toupper(m1[0])) {
-  case 0: return(0);
-  case 'A':
-    if (playing) autoplay = 1;
-    return(root);
-  case 'C':
-    puts(copyright);
-    break;
-  case 'D':
-    debug = !debug;
-    printf("Debug is now %s.", debug ? "on" : "off");
-    break;
-  case 'F':
-    forcejumps = !forcejumps;
-    printf("Forced jumps rule is now %s.",forcejumps ? "on" : "off");
-    killnode(root->son); root->son = 0;
-    return(0);
-  case 'L':
-    expandnode(root);
-    if (playing) for (t = root->son; t; t = t->brother) dumpnode(t,1);
-    break;
-  case 'M':
-    return(playing ? root : 0);
-  case 'N':
-    newgame();
-    VT100board();
-    return(0);
-  case 'P':
-    printf("I expect the following moves:\n");
-    for (t = root->son; t; t = t->son) dumpnode(t,0);
-    break;
-  case 'Q':
-    fixexit(0);
-  case 'R':
-    VT100board();
-    break;
-  case 'S':
-    user = !user;
-    return(root);
-  case 'U':
-    VT100move(undomove(),1);
-    VT100move(undomove(),1);
-    return(0);
-  case '+':
-    maxevaluate = maxnodes = 2*maxevaluate;
-    goto J2;
-  case '-':
-    if (maxevaluate > 1)
-      maxevaluate = maxnodes = maxevaluate/2;
-  J2: printf("Moves evaluated set to %d.",maxevaluate);
-    break;
-  default:
-    puts(
-	 "A(utoplay)\n"
-	 "C(opyright)\n"
-	 "D(ebug on/off)\n"
-	 "F(orce jumps rule on/off)\n"
-	 "L(ist legal moves)\n"
-	 "M(ake a move for me)\n"
-	 "N(ew game)\n"
-	 "P(redict next few moves)\n"
-	 "Q(uit)\n"
-	 "R(edraw screen)\n"
-	 "S(witch sides)\n"
-	 "U(ndo)\n"
-	 "+	- smarter\n"
-	 "-	- stupider");
-    expandnode(root);
-    for (t = root->son; t; t = t->brother) dumpnode(t,1);
-  }
-  return(0);
-}
-
-int VT100main() {
-  signal(SIGINT,sigint);
-  VT100board();
-  for (;;) {
-    if (playing) {
-      expandnode(root);
-      if (!root->son) {
-	printf("%s has no move.  Game over.",root->who ? "Black" : "White");
-	playing = autoplay = 0;
-      }
-    }
-    node* move;
-    if (playing && (autoplay || root->who == user)) {
-      move = calcmove(root);
-      if (move->value <= -30000) {
- 	printf("%s resigns.", move->who ? "White" : "Black");
- 	move = 0;
- 	playing = autoplay = 0;
-      }
-    } else {
-      move = getusermove();
-      if (move == root) move = calcmove(root);
-    }
-    if (move) {
-      dumpnode(move,0);
-      domove(move);
-      VT100move(move,0);
-    }
-  }
-}
-
-#endif
-
-////////////////////////////////////////////////////////////////
-// fltk interface:
-#ifdef FLTK
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Menu_Item.H>
-#include <FL/fl_ask.H>
-
-//----------------------------------------------------------------
-// old 4-level NeXT images have been seperated into bitmaps so they
-// can be drawn with arbitrary colors and real transparency.  This is
-// rather tedious and perhaps fltk should provide a direct support
-// to do this:
-
-#include "pixmaps/black_1.xbm"
-#include "pixmaps/black_2.xbm"
-#include "pixmaps/black_3.xbm"
-#include "pixmaps/black_4.xbm"
-#include "pixmaps/white_1.xbm"
-#include "pixmaps/white_2.xbm"
-#include "pixmaps/white_3.xbm"
-#include "pixmaps/white_4.xbm"
-#include "pixmaps/blackking_1.xbm"
-#include "pixmaps/blackking_2.xbm"
-#include "pixmaps/blackking_3.xbm"
-#include "pixmaps/blackking_4.xbm"
-#include "pixmaps/whiteking_1.xbm"
-#include "pixmaps/whiteking_2.xbm"
-#include "pixmaps/whiteking_3.xbm"
-#include "pixmaps/whiteking_4.xbm"
-
-Fl_Bitmap *bm[4][4];
-
-void make_bitmaps() {
-  if (bm[0][0]) return;
-  bm[0][0] = new Fl_Bitmap(black_1_bits, black_1_width, black_1_height);
-  bm[0][1] = new Fl_Bitmap(black_2_bits, black_1_width, black_1_height);
-  bm[0][2] = new Fl_Bitmap(black_3_bits, black_1_width, black_1_height);
-  bm[0][3] = new Fl_Bitmap(black_4_bits, black_1_width, black_1_height);
-  bm[1][0] = new Fl_Bitmap(white_1_bits, black_1_width, black_1_height);
-  bm[1][1] = new Fl_Bitmap(white_2_bits, black_1_width, black_1_height);
-  bm[1][2] = new Fl_Bitmap(white_3_bits, black_1_width, black_1_height);
-  bm[1][3] = new Fl_Bitmap(white_4_bits, black_1_width, black_1_height);
-  bm[2][0] = new Fl_Bitmap(blackking_1_bits, black_1_width, black_1_height);
-  bm[2][1] = new Fl_Bitmap(blackking_2_bits, black_1_width, black_1_height);
-  bm[2][2] = new Fl_Bitmap(blackking_3_bits, black_1_width, black_1_height);
-  bm[2][3] = new Fl_Bitmap(blackking_4_bits, black_1_width, black_1_height);
-  bm[3][0] = new Fl_Bitmap(whiteking_1_bits, black_1_width, black_1_height);
-  bm[3][1] = new Fl_Bitmap(whiteking_2_bits, black_1_width, black_1_height);
-  bm[3][2] = new Fl_Bitmap(whiteking_3_bits, black_1_width, black_1_height);
-  bm[3][3] = new Fl_Bitmap(whiteking_4_bits, black_1_width, black_1_height);
-}
-
-#define ISIZE black_1_width
-
-void draw_piece(int which, int x, int y) {
-  if (!fl_not_clipped(x,y,ISIZE,ISIZE)) return;
-  switch (which) {
-  case BLACK: which = 0; break;
-  case WHITE: which = 1; break;
-  case BLACKKING: which = 2; break;
-  case WHITEKING: which = 3; break;
-  default: return;
-  }
-  fl_color(FL_BLACK); bm[which][0]->draw(x, y);
-  fl_color(FL_INACTIVE_COLOR); bm[which][1]->draw(x, y);
-  fl_color(FL_SELECTION_COLOR); bm[which][2]->draw(x, y);
-  fl_color(FL_WHITE); bm[which][3]->draw(x, y);
-}
-
-//----------------------------------------------------------------
-
-class Board : public Fl_Double_Window {
-  void draw();
-  int handle(int);
-public:
-  void drag_piece(int, int, int);
-  void drop_piece(int);
-  void animate(node* move, int backwards);
-  void computer_move(int);
-  Board(int w, int h) : Fl_Double_Window(w,h) {color(15);}
-};
-
-#define BOXSIZE 52
-#define BORDER 4
-#define BOARDSIZE (8*BOXSIZE+BORDER)
-#define BMOFFSET 5
-
-static int erase_this;  // real location of dragging piece, don't draw it
-static int dragging;	// piece being dragged
-static int dragx;	// where it is
-static int dragy;
-static int showlegal;	// show legal moves
-
-int squarex(int i) {return (usermoves(i,1)-'A')*BOXSIZE+BMOFFSET;}
-int squarey(int i) {return (usermoves(i,2)-'1')*BOXSIZE+BMOFFSET;}
-
-void Board::draw() {
-  make_bitmaps();
-  // -- draw the board itself
-  fl_draw_box(box(),0,0,w(),h(),color());
-  // -- draw all dark tiles
-  fl_color((Fl_Color)10 /*107*/);
-  int x; for (x=0; x<8; x++) for (int y=0; y<8; y++) {
-    if (!((x^y)&1)) fl_rectf(BORDER+x*BOXSIZE, BORDER+y*BOXSIZE,
-			     BOXSIZE-BORDER, BOXSIZE-BORDER);
-  }
-  // -- draw outlines around the fileds
-  fl_color(FL_DARK3);
-  for (x=0; x<9; x++) {
-    fl_rectf(x*BOXSIZE,0,BORDER,h());
-    fl_rectf(0,x*BOXSIZE,w(),BORDER);
-  }
-  for (int j = 5; j < 40; j++) if (j != erase_this) {
-    draw_piece(b[j], squarex(j), squarey(j));
-  }
-  if (showlegal) {
-    fl_color(FL_WHITE);
-    node* n;
-    for (n = root->son; n; n = showlegal==2 ? n->son : n->brother) {
-      int x1 = squarex(n->from)+BOXSIZE/2-5;
-      int y1 = squarey(n->from)+BOXSIZE/2-5;
-      int x2 = squarex(n->to)+BOXSIZE/2-5;
-      int y2 = squarey(n->to)+BOXSIZE/2-5;
-      fl_line(x1,y1,x2,y2);
-      fl_push_matrix();
-      fl_mult_matrix(x2-x1,y2-y1,y1-y2,x2-x1,x2,y2);
-      fl_begin_polygon();
-      fl_vertex(0,0);
-      fl_vertex(-.3, .1);
-      fl_vertex(-.3, -.1);
-      fl_end_polygon();
-      fl_pop_matrix();
-    }
-    int num = 1;
-    fl_color(FL_BLACK);
-    fl_font(FL_BOLD,10);
-    for (n = root->son; n; n = showlegal==2 ? n->son : n->brother) {
-      int x1 = squarex(n->from)+BOXSIZE/2-5;
-      int y1 = squarey(n->from)+BOXSIZE/2-5;
-      int x2 = squarex(n->to)+BOXSIZE/2-5;
-      int y2 = squarey(n->to)+BOXSIZE/2-5;
-      char buf[20]; sprintf(buf,"%d",num);
-      fl_draw(buf, x1+int((x2-x1)*.85)-3, y1+int((y2-y1)*.85)+5);
-      num++;
-    }
-  }
-  if (dragging) draw_piece(dragging, dragx, dragy);
-}
-
-// drag the piece on square i to dx dy, or undo drag if i is zero:
-void Board::drag_piece(int j, int dx, int dy) {
-  dy = (dy&-2) | (dx&1); // make halftone shadows line up
-  if (j != erase_this) drop_piece(erase_this); // should not happen
-  if (!erase_this) { // pick up old piece
-    dragx = squarex(j); dragy = squarey(j);
-    erase_this = j;
-    dragging = b[j];
-  }
-  if (dx != dragx || dy != dragy) {
-    damage(FL_DAMAGE_ALL, dragx, dragy, ISIZE, ISIZE);
-    damage(FL_DAMAGE_ALL, dx, dy, ISIZE, ISIZE);
-  }
-  dragx = dx;
-  dragy = dy;
-}
-
-// drop currently dragged piece on square i
-void Board::drop_piece(int j) {
-  if (!erase_this) return; // should not happen!
-  erase_this = 0;
-  dragging = 0;
-  int x = squarex(j);
-  int y = squarey(j);
-  if (x != dragx || y != dragy) {
-    damage(4, dragx, dragy, ISIZE, ISIZE);
-    damage(4, x, y, ISIZE, ISIZE);
-  }
-}
-
-// show move (call this *before* the move, *after* undo):
-void Board::animate(node* move, int backwards) {
-  if (showlegal) {showlegal = 0; redraw();}
-  if (!move) return;
-  int f = move->from;
-  int t = move->to;
-  if (backwards) {int x = f; f = t; t = x;}
-  int x1 = squarex(f);
-  int y1 = squarey(f);
-  int x2 = squarex(t);
-  int y2 = squarey(t);
-  const int STEPS=35;
-  for (int j=0; j<STEPS; j++) {
-    int x = x1+(x2-x1)*j/STEPS;
-    int y = y1+(y2-y1)*j/STEPS;
-    drag_piece(move->from,x,y);
-    Fl::flush();
-  }
-  drop_piece(t);
-  if (move->jump) redraw();
-}
-
-int busy; // causes pop-up abort menu
-
-void Board::computer_move(int help) {
-  if (!playing) return;
-  cursor(FL_CURSOR_WAIT);
-  Fl::flush();
-  busy = 1; abortflag = 0;
-  node* move = calcmove(root);
-  busy = 0;
-  if (move) {
-    if (!help && move->value <= -30000) {
-      fl_message("%s resigns", move->who ? "White" : "Black");
-      playing = autoplay = 0;
-      cursor(FL_CURSOR_DEFAULT);
-      return;
-    }
-    animate(move,0);
-    domove(move);
-  }
-  expandnode(root);
-  if (!root->son) {
-    fl_message("%s has no move", root->who ? "Black" : "White");
-    playing = autoplay = 0;
-  }
-  if (!autoplay) cursor(FL_CURSOR_DEFAULT);
-}
-
-extern Fl_Menu_Item menu[];
-extern Fl_Menu_Item busymenu[];
-
-int Board::handle(int e) {
-  if (busy) {
-    const Fl_Menu_Item* m;
-    switch(e) {
-    case FL_PUSH:
-      m = busymenu->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0);
-      if (m) m->do_callback(this, (void*)m);
-      return 1;
-    case FL_SHORTCUT:
-      m = busymenu->test_shortcut();
-      if (m) {m->do_callback(this, (void*)m); return 1;}
-      return 0;
-    default:
-      return 0;
-    }
-  }
-  node *t, *n;
-  static int deltax, deltay;
-  int dist;
-  const Fl_Menu_Item* m;
-  switch (e) {
-  case FL_PUSH:
-    if (Fl::event_button() > 1) {
-      m = menu->popup(Fl::event_x(), Fl::event_y(), 0, 0, 0);
-      if (m) m->do_callback(this, (void*)m);
-      return 1;
-    }
-    if (playing) {
-      expandnode(root);
-      for (t = root->son; t; t = t->brother) {
-	int x = squarex(t->from);
-	int y = squarey(t->from);
-	if (Fl::event_inside(x,y,BOXSIZE,BOXSIZE)) {
-	  deltax = Fl::event_x()-x;
-	  deltay = Fl::event_y()-y;
-	  drag_piece(t->from,x,y);
-	  return 1;
-	}
-      }
-    }
-    return 0;
-  case FL_SHORTCUT:
-    m = menu->test_shortcut();
-    if (m) {m->do_callback(this, (void*)m); return 1;}
-    return 0;
-  case FL_DRAG:
-    drag_piece(erase_this, Fl::event_x()-deltax, Fl::event_y()-deltay);
-    return 1;
-  case FL_RELEASE:
-    // find the closest legal move he dropped it on:
-    dist = 50*50; n = 0;
-    for (t = root->son; t; t = t->brother) if (t->from==erase_this) {
-      int d1 = Fl::event_x()-deltax-squarex(t->to);
-      int d = d1*d1;
-      d1 = Fl::event_y()-deltay-squarey(t->to);
-      d += d1*d1;
-      if (d < dist) {dist = d; n = t;}
-    }
-    if (!n) {drop_piece(erase_this); return 1;} // none found
-    drop_piece(n->to);
-    domove(n);
-    if (showlegal) {showlegal = 0; redraw();}
-    if (n->jump) redraw();
-    computer_move(0);
-    return 1;
-  default:
-    return 0;
-  }
-}
-
-void quit_cb(Fl_Widget*, void*) {exit(0);}
-
-int FLTKmain(int argc, char** argv) {
-  Fl::visual(FL_DOUBLE|FL_INDEX);
-  Board b(BOARDSIZE,BOARDSIZE);
-  b.color(FL_BACKGROUND_COLOR);
-  b.callback(quit_cb);
-  b.show(argc,argv);
-  return Fl::run();
-} 
-
-void autoplay_cb(Fl_Widget*bp, void*) {
-  if (autoplay) {autoplay = 0; return;}
-  if (!playing) return;
-  Board* b = (Board*)bp;
-  autoplay = 1;
-  while (autoplay) {b->computer_move(0); b->computer_move(0);}
-}
-
-#include <FL/Fl_Box.H>
-Fl_Window *copyright_window;
-void copyright_cb(Fl_Widget*, void*) {
-  if (!copyright_window) {
-    copyright_window = new Fl_Window(400,270,"Copyright");
-    copyright_window->color(FL_WHITE);
-    Fl_Box *b = new Fl_Box(20,0,380,270,copyright);
-    b->labelsize(10);
-    b->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-    copyright_window->end();
-  }
-  copyright_window->hotspot(copyright_window);
-  copyright_window->set_non_modal();
-  copyright_window->show();
-}
-
-void debug_cb(Fl_Widget*, void*v) {
-  debug = !debug;
-  ((Fl_Menu_Item*)v)->flags =
-    debug ? FL_MENU_TOGGLE|FL_MENU_VALUE : FL_MENU_TOGGLE;
-}
-
-void forced_cb(Fl_Widget*b, void*v) {
-  forcejumps = !forcejumps;
-  ((Fl_Menu_Item*)v)->flags =
-    forcejumps ? FL_MENU_TOGGLE|FL_MENU_VALUE : FL_MENU_TOGGLE;
-  killnode(root->son); root->son = 0;
-  if (showlegal) {expandnode(root); b->redraw();}
-}
-
-void move_cb(Fl_Widget*pb, void*) {
-  Board* b = (Board*)pb;
-  if (playing) b->computer_move(1);
-  if (playing) b->computer_move(0);
-}
-
-void newgame_cb(Fl_Widget*b, void*) {
-  showlegal = 0;
-  newgame();
-  b->redraw();
-}
-
-void legal_cb(Fl_Widget*pb, void*) {
-  if (showlegal == 1) {showlegal = 0; ((Board*)pb)->redraw(); return;}
-  if (!playing) return;
-  expandnode(root);
-  showlegal = 1; ((Board*)pb)->redraw();
-}
-
-void predict_cb(Fl_Widget*pb, void*) {
-  if (showlegal == 2) {showlegal = 0; ((Board*)pb)->redraw(); return;}
-  if (playing) expandnode(root);
-  showlegal = 2; ((Board*)pb)->redraw();
-}
-
-void switch_cb(Fl_Widget*pb, void*) {
-  user = !user;
-  ((Board*)pb)->computer_move(0);
-}
-
-void undo_cb(Fl_Widget*pb, void*) {
-  Board* b = (Board*)pb;
-  b->animate(undomove(),1);
-  b->animate(undomove(),1);
-}
-
-//--------------------------
-
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Value_Output.H>
-
-Fl_Window *intel_window;
-Fl_Value_Output *intel_output;
-
-void intel_slider_cb(Fl_Widget*w, void*) {
-  double v = ((Fl_Slider*)w)->value();
-  int n = int(v*v);
-  intel_output->value(n);
-  maxevaluate = maxnodes = n;
-}
-
-void intel_cb(Fl_Widget*, void*) {
-  if (!intel_window) {
-    intel_window = new Fl_Window(200,25,"Checkers Intelligence");
-    Fl_Slider* s = new Fl_Slider(60,0,140,25);
-    s->type(FL_HOR_NICE_SLIDER);
-    s->minimum(1); s->maximum(500); s->value(50);
-    s->callback(intel_slider_cb);
-    intel_output = new Fl_Value_Output(0,0,60,25);
-    intel_output->value(maxevaluate);
-    intel_window->resizable(s);
-  }
-  intel_window->hotspot(intel_window);
-  intel_window->set_non_modal();
-  intel_window->show();
-}
-
-//---------------------------
-
-void stop_cb(Fl_Widget*, void*) {abortflag = 1;}
-
-void continue_cb(Fl_Widget*, void*) {}
-
-Fl_Menu_Item menu[] = {
-  {"Autoplay", 'a', autoplay_cb},
-  {"Legal moves", 'l', legal_cb},
-  {"Move for me", 'm', move_cb},
-  {"New game", 'n', newgame_cb},
-  {"Predict", 'p', predict_cb},
-  {"Switch sides", 's', switch_cb},
-  {"Undo", 'u', undo_cb, 0, FL_MENU_DIVIDER},
-  {"Forced jumps rule", 'f', forced_cb, 0, FL_MENU_TOGGLE|FL_MENU_VALUE},
-  {"Debug", 'd', debug_cb, (void *)"d", FL_MENU_TOGGLE},
-  {"Intelligence...", 'i', intel_cb, 0, FL_MENU_DIVIDER},
-  {"Copyright", 'c', copyright_cb},
-  {"Quit", 'q', quit_cb},
-  {0}};
-
-Fl_Menu_Item busymenu[] = {
-  {"Stop", '.', stop_cb},
-  {"Autoplay", 'a', autoplay_cb},
-  {"Continue", 0, continue_cb},
-  {"Debug", 'd', debug_cb, (void *)"d", FL_MENU_TOGGLE},
-  {"Intelligence...", 'i', intel_cb},
-  {"Copyright", 'c', copyright_cb},
-  {"Quit", 'q', quit_cb},
-  {0}};
-
-#endif
-
-////////////////////////////////////////////////////////////////
-// parts shared by both interface:
-
-#ifdef FLTK
-#ifdef VT100
-#define BOTH
-#endif
-#endif
-
-#ifdef BOTH
-int terminal;
-int arg(int, char **argv, int &i) {
-  if (argv[i][1] == 't') {terminal = 1; i++; return 1;}
-  return 0;
-}
-#endif
-
-int didabort(void) {
-#ifdef FLTK
-#ifdef BOTH
-  if (!terminal)
-#endif
-    Fl::check();
-#endif
-  if (abortflag) {
-    autoplay = 0;
-    abortflag = 0;
-    return 1;
-  }
-  return(0);
-}
-
-int main(int argc, char **argv) {
-  seed = time(0);
-  newgame();
-#ifdef BOTH
-  int i = 1;
-  if (Fl::args(argc, argv, i, arg) < argc) {
-    fprintf(stderr," -t : use VT100 display\n", Fl::help);
-    exit(1);
-  }
-  if (!getenv("DISPLAY")) terminal = 1;
-  if (!terminal)
-#endif
-#ifdef FLTK
-    return FLTKmain(argc,argv);
-#endif
-#ifdef VT100
-  return VT100main();
-#endif
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/clock.cxx
+++ /dev/null
@@ -1,44 +1,0 @@
-//
-// "$Id$"
-//
-// Clock test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Clock.H>
-#include <FL/Fl_Round_Clock.H>
-
-int main(int argc, char **argv) {
-  Fl_Double_Window window(220,220,"Fl_Clock");
-  Fl_Clock c1(0,0,220,220); // c1.color(2,1);
-  window.resizable(c1);
-  window.end();
-  Fl_Double_Window window2(220,220,"Fl_Round_Clock");
-  Fl_Round_Clock c2(0,0,220,220); // c2.color(3,4);
-  window2.resizable(c2);
-  window2.end();
-  // my machine had a clock* Xresource set for another program, so
-  // I don't want the class to be "clock":
-  window.xclass("Fl_Clock");
-  window2.xclass("Fl_Clock");
-  window.show(argc,argv);
-  window2.show();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/colbrowser.cxx
+++ /dev/null
@@ -1,340 +1,0 @@
-//
-// "$Id$"
-//
-// X Color Browser demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Box.H>
-
-#include <FL/fl_ask.H>
-#include <FL/filename.H>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-
-// some constants
-
-#define MAX_RGB 3000
-
-#define FL_FREE_COL4    ((Fl_Color)(FL_FREE_COLOR+3))
-#define FL_INDIANRED	((Fl_Color)(164))
-
-
-static Fl_Double_Window *cl;
-static Fl_Box *rescol;
-static Fl_Button *dbobj;
-static Fl_Hold_Browser *colbr;
-static Fl_Value_Slider *rs, *gs, *bs;
-
-static char dbname[FL_PATH_MAX];
-
-static void create_form_cl(void);
-static int load_browser(char *);
-
-typedef struct { int r, g, b; } RGBdb;
-
-static RGBdb rgbdb[MAX_RGB];
-
-
-int main(int argc, char *argv[])
-{
-  Fl::args(argc, argv);
-  
-  create_form_cl();
-  
-#ifdef __APPLE__
-  // search for rgb.txt within the bundle
-  strcpy(dbname, argv[0]);
-  char *slash = strrchr(dbname, '/');
-  if (slash)
-    strcpy(slash, "/../Resources/rgb.txt");
-#else
-  strcpy(dbname, "rgb.txt");
-#endif
-  
-  if (load_browser(dbname))
-    dbobj->label(dbname);
-  else
-    dbobj->label("None");
-  dbobj->redraw();
-  
-  cl->size_range(cl->w(),cl->h(),2*cl->w(),2*cl->h());
-  
-  cl->label("RGB Browser");
-  cl->free_position();
-  cl->show(argc,argv);
-  
-  return Fl::run();
-}
-
-
-static void set_entry(int i)
-{
-  RGBdb *db = rgbdb + i;
-  Fl::set_color(FL_FREE_COL4, db->r, db->g, db->b);
-  rs->value(db->r);
-  gs->value(db->g);
-  bs->value(db->b);
-  rescol->redraw();
-}
-
-
-static void br_cb(Fl_Widget *ob, long)
-{
-  int r = ((Fl_Browser *)ob)->value();
-  
-  if (r <= 0)
-    return;
-  set_entry(r - 1);
-}
-
-
-static int read_entry(FILE * fp, int *r, int *g, int *b, char *name)
-{
-  int  n;
-  char buf[512], *p;
-  
-  if (!fgets(buf, sizeof(buf) - 1, fp))
-    return 0;
-  
-  if(buf[0] == '!') {
-    if (fgets(buf,sizeof(buf)-1,fp)==0) {
-      /* ignore */
-    }
-  }
-  
-  if(sscanf(buf, " %d %d %d %n", r, g, b, &n) < 3)
-    return 0;
-  
-  p = buf + n;
-  
-  /* squeeze out all spaces */
-  while (*p)
-  {
-    if (*p != ' ' && *p != '\n')
-      *name++ = *p;
-    p++;
-  }
-  *name = 0;
-  
-  return (feof(fp) || ferror(fp)) ? 0 : 1;
-}
-
-
-static int load_browser(char *fname)
-{
-  FILE *fp;
-  RGBdb *db = rgbdb, *dbs = db + MAX_RGB;
-  int r, g, b,  lr  = -1 , lg = -1, lb = -1;
-  char name[256], buf[256];
-#ifdef __EMX__
-  if (!(fp = fl_fopen(__XOS2RedirRoot(fname), "r")))
-#else
-    if (!(fp = fl_fopen(fname, "r")))
-#endif
-    {
-      fl_alert("%s\n%s\n%s","Load", fname, "Can't open");
-      return 0;
-    }
-  
-  /* read the items */
-  
-  for (; db < dbs && read_entry(fp, &r, &g, &b, name);)
-  {
-    db->r = r;
-    db->g = g;
-    db->b = b;
-    
-    /* unique the entries on the fly */
-    if (lr != r || lg != g || lb != b)
-    {
-      db++;
-      lr = r;
-      lg = g;
-      lb = b;
-      sprintf(buf, "(%3d %3d %3d) %s", r, g, b, name);
-      colbr->add(buf);
-    }
-  }
-  fclose(fp);
-  
-  if (db < dbs)
-    db->r = 1000;		/* sentinel */
-  else
-  {
-    db--;
-    db->r = 1000;
-  }
-  
-  colbr->topline(1);
-  colbr->select(1,1);
-  set_entry(0);
-  
-  return 1;
-}
-
-
-static int search_entry(int r, int g, int b)
-{
-  RGBdb *db = rgbdb;
-  int i, j, diffr, diffg, diffb;
-  unsigned int diff, mindiff;
-  
-  mindiff = (unsigned int)~0;
-  for (i = j = 0; db->r < 256; db++, i++)
-  {
-    diffr = r - db->r;
-    diffg = g - db->g;
-    diffb = b - db->b;
-    
-#ifdef FL_LINEAR
-    diff = unsigned(3.0 * (FL_abs(r - db->r)) +
-                    (5.9 * FL_abs(g - db->g)) +
-                    (1.1 * (FL_abs(b - db->b))));
-#else
-    diff = unsigned(3.0 * (diffr *diffr) +
-                    5.9 * (diffg *diffg) +
-                    1.1 * (diffb *diffb));
-#endif
-    
-    if (mindiff > diff)
-    {
-      mindiff = diff;
-      j = i;
-    }
-  }
-  
-  return j;
-}
-
-
-static void search_rgb(Fl_Widget *, long)
-{
-  int r, g, b, i;
-  int top  = colbr->topline();
-  
-  r = int(rs->value());
-  g = int(gs->value());
-  b = int(bs->value());
-  
-  // fl_freeze_form(cl);
-  Fl::set_color(FL_FREE_COL4, r, g, b);
-  rescol->redraw();
-  i = search_entry(r, g, b);
-  /* change topline only if necessary */
-  if(i < top || i > (top+15))
-    colbr->topline(i-8);
-  colbr->select(i+1, 1);
-  // fl_unfreeze_form(cl);
-}
-
-
-/* change database */
-static void db_cb(Fl_Widget * ob, long)
-{
-  const char *p = fl_input("Enter New Database Name", dbname);
-  char buf[512];
-  
-  if (!p || strcmp(p, dbname) == 0)
-    return;
-  
-  strcpy(buf, p);
-  if (load_browser(buf))
-    strcpy(dbname, buf);
-  else
-    ob->label(dbname);
-}
-
-
-static void done_cb(Fl_Widget *, long)
-{
-  exit(0);
-}
-
-
-static void create_form_cl(void)
-{
-  if (cl)
-    return;
-  
-  cl = new Fl_Double_Window(400,385);
-  cl->box(FL_UP_BOX);
-  cl->color(FL_INDIANRED, FL_GRAY);
-  
-  Fl_Box *title = new Fl_Box(40, 10, 300, 30, "Color Browser");
-  title->box(FL_NO_BOX);
-  title->labelcolor(FL_RED);
-  title->labelsize(32);
-  title->labelfont(FL_HELVETICA_BOLD);
-  title->labeltype(FL_SHADOW_LABEL);
-  
-  dbobj = new Fl_Button(40, 50, 300, 25, "");
-  dbobj->type(FL_NORMAL_BUTTON);
-  dbobj->box(FL_BORDER_BOX);
-  dbobj->color(FL_INDIANRED,FL_INDIANRED);
-  dbobj->callback(db_cb, 0);
-  
-  colbr = new Fl_Hold_Browser(10, 90, 280, 240, "");
-  colbr->textfont(FL_COURIER); 
-  colbr->callback(br_cb, 0);
-  colbr->box(FL_DOWN_BOX);
-  
-  rescol = new Fl_Box(300, 90, 90, 35, "");
-  rescol->color(FL_FREE_COL4, FL_FREE_COL4);
-  rescol->box(FL_BORDER_BOX);
-  
-  rs = new Fl_Value_Slider(300, 130, 30, 200, "");
-  rs->type(FL_VERT_FILL_SLIDER);
-  rs->color(FL_INDIANRED, FL_RED);
-  rs->bounds(0, 255);
-  rs->precision(0);
-  rs->callback(search_rgb, 0);
-  rs->when(FL_WHEN_RELEASE);
-  
-  gs = new Fl_Value_Slider(330, 130, 30, 200, "");
-  gs->type(FL_VERT_FILL_SLIDER);
-  gs->color(FL_INDIANRED, FL_GREEN);
-  gs->bounds(0, 255);
-  gs->precision(0);
-  gs->callback(search_rgb, 1);
-  gs->when(FL_WHEN_RELEASE);
-  
-  bs = new Fl_Value_Slider(360, 130, 30, 200, "");
-  bs->type(FL_VERT_FILL_SLIDER);
-  bs->color(FL_INDIANRED, FL_BLUE);
-  bs->bounds(0, 255);
-  bs->precision(0);
-  bs->callback(search_rgb, 2);
-  bs->when(FL_WHEN_RELEASE);
-  
-  Fl_Button *done = new Fl_Button(160, 345, 80, 30, "Done");
-  done->type(FL_NORMAL_BUTTON);
-  done->callback(done_cb, 0);
-  
-  cl->end();
-  cl->resizable(cl);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/color_chooser.cxx
+++ /dev/null
@@ -1,151 +1,0 @@
-//
-// "$Id$"
-//
-// Color chooser test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_show_colormap.H>
-#include <FL/Fl_Color_Chooser.H>
-#include <FL/Fl_Image.H>
-#include <FL/x.H>
-#include <FL/fl_draw.H>
-
-#include <stdlib.h>
-#include <stdio.h>
-#if !defined(WIN32) && !defined(__APPLE__)
-#include "list_visuals.cxx"
-#endif
-
-int width = 100;
-int height = 100;
-uchar *image;
-Fl_Box *hint;
-
-void make_image() {
-  image = new uchar[3*width*height];
-  uchar *p = image;
-  for (int y = 0; y < height; y++) {
-    double Y = double(y)/(height-1);
-    for (int x = 0; x < width; x++) {
-      double X = double(x)/(width-1);
-      *p++ = uchar(255*((1-X)*(1-Y))); // red in upper-left
-      *p++ = uchar(255*((1-X)*Y));	// green in lower-left
-      *p++ = uchar(255*(X*Y));	// blue in lower-right
-    }
-  }
-}
-
-class Pens : public Fl_Box {
-  void draw();
-public:
-  Pens(int X, int Y, int W, int H, const char* L)
-  : Fl_Box(X,Y,W,H,L) {}
-};
-void Pens::draw() {
-  // use every color in the gray ramp:
-  for (int i = 0; i < 3*8; i++) {
-    fl_color((Fl_Color)(FL_GRAY_RAMP+i));
-    fl_line(x()+i, y(), x()+i, y()+h());
-  }
-}
-
-Fl_Color c = FL_GRAY;
-#define fullcolor_cell (FL_FREE_COLOR)
-
-void cb1(Fl_Widget *, void *v) {
-  c = fl_show_colormap(c);
-  Fl_Box* b = (Fl_Box*)v;
-  b->color(c);
-  hint->labelcolor(fl_contrast(FL_BLACK,c));
-  b->parent()->redraw();
-}
-
-void cb2(Fl_Widget *, void *v) {
-  uchar r,g,b;
-  Fl::get_color(c,r,g,b);
-  if (!fl_color_chooser("New color:",r,g,b,3)) return;
-  c = fullcolor_cell;
-  Fl::set_color(fullcolor_cell,r,g,b);
-  Fl_Box* bx = (Fl_Box*)v;
-  bx->color(fullcolor_cell);
-  hint->labelcolor(fl_contrast(FL_BLACK,fullcolor_cell));
-  bx->parent()->redraw();
-}
-
-int main(int argc, char ** argv) {
-  Fl::set_color(fullcolor_cell,145,159,170);
-  Fl_Window window(400,400);
-  Fl_Box box(30,30,340,340);
-  box.box(FL_THIN_DOWN_BOX);
-  c = fullcolor_cell;
-  box.color(c);
-  Fl_Box hintbox(40,40,320,30,"Pick background color with buttons:");
-  hintbox.align(FL_ALIGN_INSIDE);
-  hint = &hintbox;
-  Fl_Button b1(120,80,180,30,"fl_show_colormap()");
-  b1.callback(cb1,&box);
-  Fl_Button b2(120,120,180,30,"fl_color_chooser()");
-  b2.callback(cb2,&box);
-  Fl_Box image_box(160,190,width,height,0);
-  make_image();
-  (new Fl_RGB_Image(image, width, height))->label(&image_box);
-  Fl_Box b(160,310,120,30,"Example of fl_draw_image()");
-  Pens p(60,180,3*8,120,"lines");
-  p.align(FL_ALIGN_TOP);
-  int i = 1;
-  if (!Fl::args(argc,argv,i) || i < argc-1) {
-    printf("usage: %s <switches> visual-number\n"
-           " - : default visual\n"
-           " r : call Fl::visual(FL_RGB)\n"
-           " c : call Fl::own_colormap()\n",argv[0]);
-#if !defined(WIN32) && !defined(__APPLE__)
-    printf(" # : use this visual with an empty colormap:\n");
-    list_visuals();
-#endif
-    puts(Fl::help);
-    exit(1);
-  }
-  if (i!=argc) {
-    if (argv[i][0] == 'r') {
-      if (!Fl::visual(FL_RGB)) printf("Fl::visual(FL_RGB) returned false.\n");
-    } else if (argv[i][0] == 'c') {
-      Fl::own_colormap();
-    } else if (argv[i][0] != '-') {
-#if !defined(WIN32) && !defined(__APPLE__)
-      int visid = atoi(argv[i]);
-      fl_open_display();
-      XVisualInfo templt; int num;
-      templt.visualid = visid;
-      fl_visual = XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
-      if (!fl_visual) Fl::fatal("No visual with id %d",visid);
-      fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-                                    fl_visual->visual, AllocNone);
-      fl_xpixel(FL_BLACK); // make sure black is allocated
-#else
-      Fl::fatal("Visual id's not supported on MSWindows or MacOS.");
-#endif
-    }
-  }
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/connect.cxx
+++ /dev/null
@@ -1,68 +1,0 @@
-//
-// "$Id$"
-//
-// PPP example program for the Fast Light Tool Kit (FLTK).
-//
-// Program to make a button to turn a ppp connection on/off.
-// You must chmod +s /usr/sbin/pppd, and put all the options
-// into /etc/ppp/options.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <signal.h>
-#include <sys/wait.h>
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Toggle_Button.H>
-
-int running;	// actually the pid
-Fl_Toggle_Button *Button;
-
-void sigchld(int) {
-  waitpid(running, 0, 0);
-  running = 0;
-  Button->value(0);
-}
-
-void cb(Fl_Widget *o, void *) {
-  if (((Fl_Toggle_Button*)o)->value()) {
-    if (running) return;
-    running = fork();
-    if (!running) execl("/usr/sbin/pppd","pppd","-detach",0);
-    else signal(SIGCHLD, sigchld);
-  } else {
-    if (!running) return;
-    kill(running, SIGINT);
-    waitpid(running, 0, 0);
-    running = 0;
-  }
-}
-
-int main(int argc, char ** argv) {
-   Fl_Window window(100,50);
-   Fl_Toggle_Button button(0,0,100,50,"Connect");
-   Button = &button;
-   button.color(1,2);
-   button.callback(cb,0);
-   window.show(argc,argv);
-   return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/cube.cxx
+++ /dev/null
@@ -1,223 +1,0 @@
-//
-// "$Id$"
-//
-// Another forms test program for the Fast Light Tool Kit (FLTK).
-//
-// Modified to have 2 cubes to test multiple OpenGL contexts
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Radio_Light_Button.H>
-#include <FL/Fl_Slider.H>
-#include <stdlib.h>
-
-#if !HAVE_GL
-class cube_box : public Fl_Box {
-public:
-  double lasttime;
-  int wire;
-  double size;
-  double speed;
-  cube_box(int x,int y,int w,int h,const char *l=0)
-    :Fl_Box(FL_DOWN_BOX,x,y,w,h,l){
-      label("This demo does\nnot work without GL");
-  }
-};
-#else
-#include <FL/Fl_Gl_Window.H>
-#include <FL/gl.h>
-
-class cube_box : public Fl_Gl_Window {
-  void draw();
-  int handle(int);
-public:
-  double lasttime;
-  int wire;
-  double size;
-  double speed;
-  cube_box(int x,int y,int w,int h,const char *l=0)
-    : Fl_Gl_Window(x,y,w,h,l) {lasttime = 0.0;}
-};
-
-/* The cube definition */
-float v0[3] = {0.0, 0.0, 0.0};
-float v1[3] = {1.0, 0.0, 0.0};
-float v2[3] = {1.0, 1.0, 0.0};
-float v3[3] = {0.0, 1.0, 0.0};
-float v4[3] = {0.0, 0.0, 1.0};
-float v5[3] = {1.0, 0.0, 1.0};
-float v6[3] = {1.0, 1.0, 1.0};
-float v7[3] = {0.0, 1.0, 1.0};
-
-#define v3f(x) glVertex3fv(x)
-
-void drawcube(int wire) {
-/* Draw a colored cube */
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(0,0,255);
-  v3f(v0); v3f(v1); v3f(v2); v3f(v3);
-  glEnd();
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(0,255,255); v3f(v4); v3f(v5); v3f(v6); v3f(v7);
-  glEnd();
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(255,0,255); v3f(v0); v3f(v1); v3f(v5); v3f(v4);
-  glEnd();
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(255,255,0); v3f(v2); v3f(v3); v3f(v7); v3f(v6);
-  glEnd();
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(0,255,0); v3f(v0); v3f(v4); v3f(v7); v3f(v3);
-  glEnd();
-  glBegin(wire ? GL_LINE_LOOP : GL_POLYGON);
-  glColor3ub(255,0,0); v3f(v1); v3f(v2); v3f(v6); v3f(v5);
-  glEnd();
-}
-
-void cube_box::draw() {
-  lasttime = lasttime+speed;
-  if (!valid()) {
-    glLoadIdentity();
-    glViewport(0,0,pixel_w(),pixel_h());
-    glEnable(GL_DEPTH_TEST);
-    glFrustum(-1,1,-1,1,2,10000);
-    glTranslatef(0,0,-10);
-    gl_font(FL_HELVETICA_BOLD, 16 );
-  }
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-  glPushMatrix();
-  glRotatef(float(lasttime*1.6),0,0,1);
-  glRotatef(float(lasttime*4.2),1,0,0);
-  glRotatef(float(lasttime*2.3),0,1,0);
-  glTranslatef(-1.0, 1.2f, -1.5);
-  glScalef(float(size),float(size),float(size));
-  drawcube(wire);
-  glPopMatrix();
-  gl_color(FL_GRAY);
-  glDisable(GL_DEPTH_TEST);
-  gl_draw(wire ? "Cube: wire" : "Cube: flat", -4.5f, -4.5f );
-  glEnable(GL_DEPTH_TEST);
-}
-
-int cube_box::handle(int e) {
-  switch (e) {
-  case FL_ENTER: cursor(FL_CURSOR_CROSS); break;
-  case FL_LEAVE: cursor(FL_CURSOR_DEFAULT); break;
-  }
-  return Fl_Gl_Window::handle(e);
-}
-
-#endif
-
-Fl_Window *form;
-Fl_Slider *speed, *size;
-Fl_Button *button, *wire, *flat;
-cube_box *cube, *cube2;
-
-void makeform(const char *name) {
-  form = new Fl_Window(510+390,390,name);
-  new Fl_Box(FL_DOWN_FRAME,20,20,350,350,"");
-  new Fl_Box(FL_DOWN_FRAME,510,20,350,350,"");
-  speed = new Fl_Slider(FL_VERT_SLIDER,390,90,40,220,"Speed");
-  size = new Fl_Slider(FL_VERT_SLIDER,450,90,40,220,"Size");
-  wire = new Fl_Radio_Light_Button(390,20,100,30,"Wire");
-  flat = new Fl_Radio_Light_Button(390,50,100,30,"Flat");
-  button = new Fl_Button(390,340,100,30,"Exit");
-  cube = new cube_box(23,23,344,344, 0);
-  cube2 = new cube_box(513,23,344,344, 0);
-  Fl_Box *b = new Fl_Box(FL_NO_BOX,cube->x(),size->y(),
-			 cube->w(),size->h(),0);
-  form->resizable(b);
-  b->hide();
-  form->end();
-}
-
-// added to demo printing
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/Fl_Printer.H>
-
-void print_cb(Fl_Widget *w, void *data)
-{
-  Fl_Printer printer;
-  Fl_Window *win = Fl::first_window();
-  if(!win) return;
-  if( printer.start_job(1) ) return;
-  if( printer.start_page() ) return;
-  printer.scale(0.5,0.5);
-  printer.print_widget( win );
-  printer.end_page();
-  printer.end_job();
-}
-// end of printing demo
-
-int main(int argc, char **argv) {
-  Fl::use_high_res_GL(1);
-  makeform(argv[0]);
-  // added to demo printing
-  form->begin();
-  static Fl_Menu_Item	items[] = {
-    { "Print", 0, 0, 0, FL_SUBMENU },
-    { "Print window", 0, print_cb, 0, 0 },
-    { 0 },
-    { 0 }
-  };
-  Fl_Sys_Menu_Bar *menubar_;
-  menubar_ = new Fl_Sys_Menu_Bar(0, 0, 60, 20);
-  menubar_->box(FL_FLAT_BOX);
-  menubar_->menu(items);
-  form->end();
-  // end of printing demo
-  speed->bounds(4,0);
-  speed->value(cube->speed = cube2->speed = 1.0);
-  size->bounds(4,0.01);
-  size->value(cube->size = cube2->size = 1.0);
-  flat->value(1); cube->wire = 0; cube2->wire = 1;
-  form->label("cube");
-  form->show(argc,argv);
-  cube->show();
-  cube2->show();
-#if 0
-  // This demonstrates how to manipulate OpenGL contexts.
-  // In this case the same context is used by multiple windows (I'm not
-  // sure if this is allowed on Win32, can somebody check?).
-  // This fixes a bug on the XFree86 3.0 OpenGL where only one context
-  // per program seems to work, but there are probably better uses for
-  // this!
-  cube->make_current(); // causes context to be created
-  cube2->context(cube->context()); // share the contexts
-#endif
-  for (;;) {
-    if (form->visible() && speed->value())
-      {if (!Fl::check()) break;}	// returns immediately
-    else
-      {if (!Fl::wait()) break;}	// waits until something happens
-    cube->wire = wire->value();
-    cube2->wire = !wire->value();
-    cube->size = cube2->size = size->value();
-    cube->speed = cube2->speed = speed->value();
-    cube->redraw();
-    cube2->redraw();
-    if (Fl::readqueue() == button) break;
-  }
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/cursor.cxx
+++ /dev/null
@@ -1,122 +1,0 @@
-//
-// "$Id$"
-//
-// Cursor test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Box.H>
-
-Fl_Cursor cursor = FL_CURSOR_DEFAULT;
-
-Fl_Hor_Value_Slider *cursor_slider;
-
-void choice_cb(Fl_Widget *, void *v) {
-  cursor = (Fl_Cursor)(fl_intptr_t)v;
-  cursor_slider->value(cursor);
-  fl_cursor(cursor);
-}
-
-Fl_Menu_Item choices[] = {
-  {"FL_CURSOR_DEFAULT",0,choice_cb,(void*)FL_CURSOR_DEFAULT},
-  {"FL_CURSOR_ARROW",0,choice_cb,(void*)FL_CURSOR_ARROW},
-  {"FL_CURSOR_CROSS",0,choice_cb,(void*)FL_CURSOR_CROSS},
-  {"FL_CURSOR_WAIT",0,choice_cb,(void*)FL_CURSOR_WAIT},
-  {"FL_CURSOR_INSERT",0,choice_cb,(void*)FL_CURSOR_INSERT},
-  {"FL_CURSOR_HAND",0,choice_cb,(void*)FL_CURSOR_HAND},
-  {"FL_CURSOR_HELP",0,choice_cb,(void*)FL_CURSOR_HELP},
-  {"FL_CURSOR_MOVE",0,choice_cb,(void*)FL_CURSOR_MOVE},
-  {"FL_CURSOR_NS",0,choice_cb,(void*)FL_CURSOR_NS},
-  {"FL_CURSOR_WE",0,choice_cb,(void*)FL_CURSOR_WE},
-  {"FL_CURSOR_NWSE",0,choice_cb,(void*)FL_CURSOR_NWSE},
-  {"FL_CURSOR_NESW",0,choice_cb,(void*)FL_CURSOR_NESW},
-  {"FL_CURSOR_N",0,choice_cb,(void*)FL_CURSOR_N},
-  {"FL_CURSOR_NE",0,choice_cb,(void*)FL_CURSOR_NE},
-  {"FL_CURSOR_E",0,choice_cb,(void*)FL_CURSOR_E},
-  {"FL_CURSOR_SE",0,choice_cb,(void*)FL_CURSOR_SE},
-  {"FL_CURSOR_S",0,choice_cb,(void*)FL_CURSOR_S},
-  {"FL_CURSOR_SW",0,choice_cb,(void*)FL_CURSOR_SW},
-  {"FL_CURSOR_W",0,choice_cb,(void*)FL_CURSOR_W},
-  {"FL_CURSOR_NW",0,choice_cb,(void*)FL_CURSOR_NW},
-  {"FL_CURSOR_NONE",0,choice_cb,(void*)FL_CURSOR_NONE},
-  {0}
-};
-
-void setcursor(Fl_Widget *o, void *) {
-  Fl_Hor_Value_Slider *slider = (Fl_Hor_Value_Slider *)o;
-  cursor = Fl_Cursor((int)slider->value());
-  fl_cursor(cursor);
-}
-
-// draw the label without any ^C or \nnn conversions:
-class CharBox : public Fl_Box {
-  void draw() {
-    fl_font(FL_FREE_FONT,14);
-    fl_draw(label(), x()+w()/2, y()+h()/2);
-  }
-public:
-  CharBox(int X, int Y, int W, int H, const char* L) : Fl_Box(X,Y,W,H,L) {}
-};
-
-int main(int argc, char **argv) {
-  Fl_Double_Window window(400,300);
-
-  Fl_Choice choice(80,100,200,25,"Cursor:");
-  choice.menu(choices);
-  choice.callback(choice_cb);
-  choice.when(FL_WHEN_RELEASE|FL_WHEN_NOT_CHANGED);
-
-  Fl_Hor_Value_Slider slider1(80,180,310,30,"Cursor:");
-  cursor_slider = &slider1;
-  slider1.align(FL_ALIGN_LEFT);
-  slider1.step(1);
-  slider1.precision(0);
-  slider1.bounds(0,255);
-  slider1.value(0);
-  slider1.callback(setcursor);
-  slider1.value(cursor);
-
-#if 0
-  // draw the manual's diagram of cursors...
-  window.size(400,800);
-  int y = 300;
-  Fl::set_font(FL_FREE_FONT, "cursor");
-  char buf[100]; char *p = buf;
-  for (Fl_Menu* m = choices; m->label(); m++) {
-    Fl_Box* b = new Fl_Box(35,y,150,25,m->label());
-    b->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
-    int n = (int)(m->argument());
-    if (n == FL_CURSOR_NONE) break;
-    if (n == FL_CURSOR_DEFAULT) n = FL_CURSOR_ARROW;
-    p[0] = (char)((n-1)*2);
-    p[1] = 0;
-    b = new CharBox(15,y,20,20,p); p+=2;
-    y += 25;
-  }
-#endif
-
-  window.resizable(window);
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/curve.cxx
+++ /dev/null
@@ -1,106 +1,0 @@
-//
-// "$Id$"
-//
-// Curve test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Toggle_Button.H>
-
-double args[9] = {
-  20,20, 50,200, 100,20, 200,200, 0};
-const char* name[9] = {
-  "X0", "Y0", "X1", "Y1", "X2", "Y2", "X3", "Y3", "rotate"};
-
-int points;
-
-class Drawing : public Fl_Widget {
-  void draw() {
-    fl_push_clip(x(),y(),w(),h());
-    fl_color(FL_DARK3);
-    fl_rectf(x(),y(),w(),h());
-    fl_push_matrix();
-    if (args[8]) {
-      fl_translate(x()+w()/2.0, y()+h()/2.0);
-      fl_rotate(args[8]);
-      fl_translate(-(x()+w()/2.0), -(y()+h()/2.0));
-    }
-    fl_translate(x(),y());
-    if (!points) {
-    fl_color(FL_WHITE);
-    fl_begin_complex_polygon();
-    fl_curve(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
-    fl_end_complex_polygon();
-    }
-    fl_color(FL_BLACK);
-    fl_begin_line();
-    fl_vertex(args[0],args[1]);
-    fl_vertex(args[2],args[3]);
-    fl_vertex(args[4],args[5]);
-    fl_vertex(args[6],args[7]);
-    fl_end_line();
-    fl_color(points ? FL_WHITE : FL_RED);
-    points ? fl_begin_points() : fl_begin_line();
-    fl_curve(args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7]);
-    points ? fl_end_points() : fl_end_line();
-    fl_pop_matrix();
-    fl_pop_clip();
-  }
-public:
-  Drawing(int X,int Y,int W,int H) : Fl_Widget(X,Y,W,H) {}
-};
-
-Drawing *d;
-
-void points_cb(Fl_Widget* o, void*) {
-  points = ((Fl_Toggle_Button*)o)->value();
-  d->redraw();
-}
-
-void slider_cb(Fl_Widget* o, void* v) {
-  Fl_Slider* s = (Fl_Slider*)o;
-  args[fl_intptr_t(v)] = s->value();
-  d->redraw();
-}
-
-int main(int argc, char** argv) {
-  Fl_Double_Window window(300,555);
-  Drawing drawing(10,10,280,280);
-  d = &drawing;
-
-  int y = 300;
-  for (int n = 0; n<9; n++) {
-    Fl_Slider* s = new Fl_Hor_Value_Slider(50,y,240,25,name[n]); y += 25;
-    s->minimum(0); s->maximum(280);
-    if (n == 8) s->maximum(360);
-    s->step(1);
-    s->value(args[n]);
-    s->align(FL_ALIGN_LEFT);
-    s->callback(slider_cb, (void*)(fl_intptr_t)n);
-  }
-  Fl_Toggle_Button but(50,y,50,25,"points");
-  but.callback(points_cb);
-
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/demo.cxx
+++ /dev/null
@@ -1,457 +1,0 @@
-//
-// "$Id$"
-//
-// Main demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#if defined(WIN32) && !defined(__CYGWIN__)
-#  include <direct.h>
-#  ifndef __WATCOMC__
-// Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
-// on Windows, which is supposed to be POSIX compliant...
-#    define chdir _chdir
-#    define putenv _putenv
-#  endif // !__WATCOMC__
-#elif defined __APPLE__
-#include <ApplicationServices/ApplicationServices.h>
-#include <unistd.h> // for chdir()
-#include <stdio.h>
-#include <stdlib.h> // for system()
-#include <string.h>
-#else
-#  include <unistd.h>
-#endif
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/filename.H>
-#include <FL/x.H>
-
-/* Define a macro to decide if a trailing 'd' needs to be removed
-   from the executable file name. Current versions of Visual Studio
-   bundled IDE solutions add a 'd' to the executable file name
-   ('demod.exe') in Debug configurations that needs to be removed.
-   This is no longer true with CMake-generated IDE's starting with
-   FLTK 1.4, but in FLTK 1.3 the OLD behavior is still used.
-   The 'old' behavior obviously applied or still applies to
-   CodeWarrior (__MWERKS__).
-*/
-
-#if ( defined _MSC_VER || defined __MWERKS__ ) && defined _DEBUG
-# define DEBUG_EXE_WITH_D 1
-#else
-# define DEBUG_EXE_WITH_D 0
-#endif
-
-/* The form description */
-
-void doexit(Fl_Widget *, void *);
-void doback(Fl_Widget *, void *);
-void dobut(Fl_Widget *, long);
-void doscheme(Fl_Choice *c, void *) {
-  Fl::scheme(c->text(c->value()));
-}
-
-Fl_Double_Window *form;
-Fl_Button *but[9];
-
-void create_the_forms() {
-  Fl_Widget *obj;
-  form = new Fl_Double_Window(350, 440);
-  obj = new Fl_Box(FL_FRAME_BOX,10,15,330,40,"FLTK Demonstration");
-  obj->color(FL_GRAY-4);
-  obj->labelsize(24);
-  obj->labelfont(FL_BOLD);
-  obj->labeltype(FL_ENGRAVED_LABEL);
-  obj = new Fl_Box(FL_FRAME_BOX,10,65,330,330,0);
-  obj->color(FL_GRAY-8);
-  obj = new Fl_Button(280,405,60,25,"Exit");
-  obj->callback(doexit);
-  Fl_Choice *choice = new Fl_Choice(75, 405, 100, 25, "Scheme:");
-  choice->labelfont(FL_HELVETICA_BOLD);
-  choice->add("none");
-  choice->add("gtk+");
-  choice->add("gleam");
-  choice->add("plastic");
-  choice->callback((Fl_Callback *)doscheme);
-  Fl::scheme(NULL);
-  if (!Fl::scheme()) choice->value(0);
-  else if (!strcmp(Fl::scheme(), "gtk+")) choice->value(1);
-  else if (!strcmp(Fl::scheme(), "gleam")) choice->value(2);
-  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(3);
-  else choice->value(0);
-  obj = new Fl_Button(10,15,330,380); obj->type(FL_HIDDEN_BUTTON);
-  obj->callback(doback);
-  obj = but[0] = new Fl_Button( 30, 85,90,90);
-  obj = but[1] = new Fl_Button(130, 85,90,90);
-  obj = but[2] = new Fl_Button(230, 85,90,90);
-  obj = but[3] = new Fl_Button( 30,185,90,90);
-  obj = but[4] = new Fl_Button(130,185,90,90);
-  obj = but[5] = new Fl_Button(230,185,90,90);
-  obj = but[6] = new Fl_Button( 30,285,90,90);
-  obj = but[7] = new Fl_Button(130,285,90,90);
-  obj = but[8] = new Fl_Button(230,285,90,90);
-  for (int i=0; i<9; i++) {
-    but[i]->align(FL_ALIGN_WRAP);
-    but[i]->callback(dobut, i);
-  }
-  form->end();
-}
-
-/* Maintaining and building up the menus. */
-
-typedef struct {
-  char name[64];
-  int numb;
-  char iname[9][64];
-  char icommand[9][64];
-} MENU;
-
-#define MAXMENU	32
-
-MENU menus[MAXMENU];
-int mennumb = 0;
-
-int find_menu(const char* nnn)
-/* Returns the number of a given menu name. */
-{
-  int i;
-  for (i=0; i<mennumb; i++)
-    if (strcmp(menus[i].name,nnn) == 0) return i;
-  return -1;
-}
-
-void create_menu(const char* nnn)
-/* Creates a new menu with name nnn */
-{
-  if (mennumb == MAXMENU -1) return;
-  strcpy(menus[mennumb].name,nnn);
-  menus[mennumb].numb = 0;
-  mennumb++;
-}
-
-void addto_menu(const char* men, const char* item, const char* comm)
-/* Adds an item to a menu */
-{
-  int n = find_menu(men);
-  if (n<0) { create_menu(men); n = find_menu(men); }
-  if (menus[n].numb == 9) return;
-  strcpy(menus[n].iname[menus[n].numb],item);
-  strcpy(menus[n].icommand[menus[n].numb],comm);
-  menus[n].numb++;
-}
-
-/* Button to Item conversion and back. */
-
-int b2n[][9] = { 
-	{ -1, -1, -1, -1,  0, -1, -1, -1, -1},
-	{ -1, -1, -1,  0, -1,  1, -1, -1, -1},
-	{  0, -1, -1, -1,  1, -1, -1, -1,  2},
-	{  0, -1,  1, -1, -1, -1,  2, -1,  3},
-	{  0, -1,  1, -1,  2, -1,  3, -1,  4},
-	{  0, -1,  1,  2, -1,  3,  4, -1,  5},
-	{  0, -1,  1,  2,  3,  4,  5, -1,  6},
-	{  0,  1,  2,  3, -1,  4,  5,  6,  7},
-	{  0,  1,  2,  3,  4,  5,  6,  7,  8}
-};
-int n2b[][9] = { 
-	{  4, -1, -1, -1, -1, -1, -1, -1, -1},
-	{  3,  5, -1, -1, -1, -1, -1, -1, -1},
-	{  0,  4,  8, -1, -1, -1, -1, -1, -1},
-	{  0,  2,  6,  8, -1, -1, -1, -1, -1},
-	{  0,  2,  4,  6,  8, -1, -1, -1, -1},
-	{  0,  2,  3,  5,  6,  8, -1, -1, -1},
-	{  0,  2,  3,  4,  5,  6,  8, -1, -1},
-	{  0,  1,  2,  3,  5,  6,  7,  8, -1},
-	{  0,  1,  2,  3,  4,  5,  6,  7,  8}
-};
-
-int but2numb(int bnumb, int maxnumb)
-/* Transforms a button number to an item number when there are
- maxnumb items in total. -1 if the button should not exist. */
-{ return b2n[maxnumb][bnumb]; }
-
-int numb2but(int inumb, int maxnumb)
-/* Transforms an item number to a button number when there are
- maxnumb items in total. -1 if the item should not exist. */
-{ return n2b[maxnumb][inumb]; }
-
-/* Pushing and Popping menus */
-
-char stack[64][32];
-int stsize = 0;
-
-void push_menu(const char* nnn)
-/* Pushes a menu to be visible */
-{
-  int n,i,bn;
-  int men = find_menu(nnn);
-  if (men < 0) return;
-  n = menus[men].numb;
-  for (i=0; i<9; i++) but[i]->hide();
-  for (i=0; i<n; i++)
-  {
-    bn = numb2but(i,n-1);
-    but[bn]->show();
-    but[bn]->label(menus[men].iname[i]);
-    if (menus[men].icommand[i][0] != '@') but[bn]->tooltip(menus[men].icommand[i]);
-    else but[bn]->tooltip(0);
-  }
-  if (stack[stsize]!=nnn)
-    strcpy(stack[stsize],nnn);
-  stsize++;
-}
-
-void pop_menu()
-/* Pops a menu */
-{
-  if (stsize<=1) return;
-  stsize -= 2;
-  push_menu(stack[stsize]);
-}
-
-/* The callback Routines */
-
-void dobut(Fl_Widget *, long arg)
-/* handles a button push */
-{
-  int men = find_menu(stack[stsize-1]);
-  int n = menus[men].numb;
-  int bn = but2numb( (int) arg, n-1);
-  if (menus[men].icommand[bn][0] == '@')
-    push_menu(menus[men].icommand[bn]);
-  else {
-    
-#ifdef WIN32
-    STARTUPINFO		suInfo;		// Process startup information
-    PROCESS_INFORMATION	prInfo;		// Process information
-
-# if DEBUG_EXE_WITH_D
-    const char *exe = "d.exe";		// exe name with trailing 'd'
-# else
-    const char *exe = ".exe";		// exe name w/o trailing 'd'
-# endif
-
-    memset(&suInfo, 0, sizeof(suInfo));
-    suInfo.cb = sizeof(suInfo);
-    
-    int icommand_length = strlen(menus[men].icommand[bn]);
-    
-    char* copy_of_icommand = new char[icommand_length+1];
-    strcpy(copy_of_icommand,menus[men].icommand[bn]);
-    
-    // On WIN32 the .exe suffix needs to be appended to the command
-    // whilst leaving any additional parameters unchanged - this
-    // is required to handle the correct conversion of cases such as : 
-    // `../fluid/fluid valuators.fl' to '../fluid/fluid.exe valuators.fl'.
-
-    // skip leading spaces.
-    char* start_command = copy_of_icommand;
-    while (*start_command == ' ') ++start_command;
-
-    // find the space between the command and parameters if one exists.
-    char* start_parameters = strchr(start_command,' ');
-
-    char* command = new char[icommand_length+6]; // 6 for extra 'd.exe\0'
-
-    if (start_parameters==NULL) { // no parameters required.
-      sprintf(command, "%s%s", start_command, exe);
-    } else { // parameters required.
-      // break the start_command at the intermediate space between
-      // start_command and start_parameters.
-      *start_parameters = 0;
-      // move start_paremeters to skip over the intermediate space.
-      ++start_parameters;
-      
-      sprintf(command, "%s%s %s", start_command, exe, start_parameters);
-    }
-    
-    CreateProcess(NULL, command, NULL, NULL, FALSE,
-                  NORMAL_PRIORITY_CLASS, NULL, NULL, &suInfo, &prInfo);
-    
-    delete[] command;
-    delete[] copy_of_icommand;
-    
-#elif defined __APPLE__
-    char *cmd = strdup(menus[men].icommand[bn]);
-    char *arg = strchr(cmd, ' ');
-    
-    char command[2048], path[2048], app_path[2048];
-    
-    // this neat little block of code ensures that the current directory
-    // is set to the location of the Demo bundled application.
-    CFBundleRef app = CFBundleGetMainBundle();
-    CFURLRef url = CFBundleCopyBundleURL(app);    
-    CFStringRef cc_app_path = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
-    CFRelease(url);
-    CFStringGetCString(cc_app_path, app_path, 2048, kCFStringEncodingUTF8);
-    CFRelease(cc_app_path);
-    if (*app_path) {
-      char *n = strrchr(app_path, '/');
-      if (n) {
-        *n = 0;
-        chdir(app_path);
-      }
-    }
-    
-    char *name = new char[strlen(cmd) + 5];
-    strcpy(name, cmd);
-    if (arg) name[arg-cmd] = 0;
-    strcat(name, ".app");
-    // check whether app bundle exists
-    if ( ! fl_filename_isdir(name) ) strcpy(name, cmd);
-    if (arg) {
-      const char *fluidpath;
-      *arg = 0;
-#if defined USING_XCODE
-      fl_filename_absolute(path, 2048, "../../../../test/");
-      fluidpath = "fluid.app";
-#else
-      strcpy(path, app_path); strcat(path, "/");
-      fluidpath = "../fluid/fluid.app";
-      // check whether fluid bundle exists
-      if ( ! fl_filename_isdir(fluidpath) ) fluidpath = "../fluid";
-#endif
-      if (strcmp(cmd, "../fluid/fluid")==0) {
-	sprintf(command, "open %s --args %s%s", fluidpath, path, arg+1);
-      } else {
-	sprintf(command, "open %s --args %s%s", name, path, arg+1);
-      }
-    } else {
-      sprintf(command, "open %s", name);
-    }
-    delete[] name;
-//    puts(command);    
-    system(command);
-    
-    free(cmd);
-#else // NON WIN32 systems.
-    
-    int icommand_length = strlen(menus[men].icommand[bn]);
-    char* command = new char[icommand_length+5]; // 5 for extra './' and ' &\0' 
-    
-    sprintf(command, "./%s &", menus[men].icommand[bn]);
-    if (system(command)==-1) { /* ignore */ }
-    
-    delete[] command;
-#endif // WIN32
-  }
-}
-
-void doback(Fl_Widget *, void *) {pop_menu();}
-
-void doexit(Fl_Widget *, void *) {exit(0);}
-
-int load_the_menu(char* fname)
-/* Loads the menu file. Returns whether successful. */
-{
-  FILE *fin = 0;
-  char line[256], mname[64],iname[64],cname[64];
-  int i, j;
-  fin = fl_fopen(fname,"r");
-#if defined ( __APPLE__ )
-  if (fin == NULL) {
-    // mac os bundle menu detection:
-    char* pos = strrchr(fname,'/');
-    if (!pos) return 0;
-    *pos = '\0';
-    pos = strrchr(fname,'/');
-    if (!pos) return 0;
-    strcpy(pos,"/Resources/demo.menu");
-    fin  = fl_fopen(fname,"r");
-  }
-#endif
-  if (fin == NULL) {
-    return 0;
-  }
-  for (;;) {
-    if (fgets(line,256,fin) == NULL) break;
-    // remove all carriage returns that Cygwin may have inserted
-    char *s = line, *d = line;
-    for (;;++d) {
-      while (*s=='\r') s++;
-      *d = *s++;
-      if (!*d) break;
-    }
-    // interpret the line
-    j = 0; i = 0;
-    while (line[i] == ' ' || line[i] == '\t') i++;
-    if (line[i] == '\n') continue;
-    if (line[i] == '#') continue;
-    while (line[i] != ':' && line[i] != '\n') mname[j++] = line[i++];
-    mname[j] = '\0';
-    if (line[i] == ':') i++;
-    j = 0; 
-    while (line[i] != ':' && line[i] != '\n') {
-      if (line[i] == '\\') {
-        i++;
-        if (line[i] == 'n') iname[j++] = '\n';
-        else iname[j++] = line[i];
-        i++;
-      } else
-        iname[j++] = line[i++];
-    }
-    iname[j] = '\0';
-    if (line[i] == ':') i++;
-    j = 0;
-    while (line[i] != ':' && line[i] != '\n') cname[j++] = line[i++];
-    cname[j] = '\0';
-    addto_menu(mname,iname,cname);
-  }
-  fclose(fin);
-  return 1;
-}
-
-int main(int argc, char **argv) {
-  putenv((char *)"FLTK_DOCDIR=../documentation/html");
-  char buf[FL_PATH_MAX];
-  strcpy(buf, argv[0]);
-#if DEBUG_EXE_WITH_D
-  // MS_VisualC appends a 'd' to debugging executables. remove it.
-  fl_filename_setext( buf, "" );
-  buf[ strlen(buf)-1 ] = 0;
-#endif
-  fl_filename_setext(buf,".menu");
-  char *fname = buf;
-  int i = 0;
-  if (!Fl::args(argc,argv,i) || i < argc-1)
-    Fl::fatal("Usage: %s <switches> <menufile>\n%s",argv[0],Fl::help);
-  if (i < argc) fname = argv[i];
-  
-  create_the_forms();
-  
-  if (!load_the_menu(fname)) Fl::fatal("Can't open %s",fname);
-  if (buf != fname)
-    strcpy(buf,fname);
-  const char *c = fl_filename_name(buf);
-  if (c > buf) {
-    buf[c-buf] = 0; 
-    if (chdir(buf)==-1) { /* ignore */ }
-  }
-  push_menu("@main");
-  form->show(argc,argv);
-  Fl::run();
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/test/demo.menu
+++ /dev/null
@@ -1,100 +1,0 @@
-# Menu description file for the generic demo program
-#
-# Each line consists of three fields, separated by :
-#
-# - menu name	: To which the item belongs (starts with @)
-# - item name	: Placed on button. (use \n for newline)
-# - command name: To be executed. Use a menu name to define a submenu.
-#
-# @main indicates the main menu.
-#
-
-@main:Widget\nTests...:@x
-	@x:Fl_Browser:browser browser.cxx
-	@x:Fl_Input:input
-	@x:Fl_Output:output
-	@x:Fl_Button:radio
-	@x:Fl_Tabs:tabs
-	@x:Fl_Tile:tile
-	@x:Fl_Scroll:scroll
-	@x:Fl_Pack:pack
-	@x:more...:@xm
-		@xm:Fl_Menu:menubar
-		@xm:Fl_Table:table
-		@xm:Fl_Tree:tree
-
-@main:Window\nTests...:@w
-	@w:overlay:overlay
-	@w:subwindow:subwindow
-	@w:double\nbuffer:doublebuffer
-	@w:GL window:cube
-	@w:GL overlay:gl_overlay
-	@w:iconize:iconize
-	@w:fullscreen:fullscreen
-	@w:resizable:resizebox
-	@w:resize:resize
-
-@main:Drawing\nTests...:@d
-	@d:unit tests:unittests
-	@d:Images...:@di
-		@di:Fl_Bitmap:bitmap
-		@di:Fl_Pixmap:pixmap
-		@di:Fl_RGB\n_Image:image
-		@di:Fl_Shared\n_Image:pixmap_browser
-		@di:Fl_Tiled\n_Image:tiled_image
-		@di:transparency:animated
-	@d:cursor:cursor
-	@d:labels:label
-	@d:offscreen:offscreen
-	@d:rotated text:rotated_text
-	@d:fl_arc:arc
-	@d:fl_curve:curve
-	@d:fl_line_style:line_style
-
-@main:Events...:@u
-	@u:navigation:navigation
-	@u:minimum update:minimum
-	@u:keyboard:keyboard
-	@u:fast && slow widgets:fast_slow
-	@u:inactive:inactive
-
-@main:Fluid\n(UI design tool):../fluid/fluid valuators.fl
-
-@main:Cool\nDemos...:@e
-	@e:X Color\nBrowser:colbrowser
-	@e:Mandelbrot:mandelbrot
-	@e:Fractals:fractals
-	@e:Puzzle:glpuzzle
-	@e:Block\nAttack!:blocks
-	@e:Checkers:checkers
-	@e:Sudoku:sudoku
-	@e:Print\nsupport:device
-
-@main:Other\nTests...:@o
-	@o:Color Choosers:color_chooser
-	@o:File Chooser:file_chooser
-	@o:Native File Chooser:native-filechooser
-	@o:Font Tests...:@of
-		@of:Fonts:fonts
-		@of:UTF-8:utf8
-	@o:HelpDialog:help
-	@o:Input Choice:input_choice
-	@o:Preferences:preferences
-	@o:Threading:threads
-	@o:XForms Emulation:forms
-
-@main:Tutorial\nfrom\nManual...:@j
-	@j:ask\n(modified):ask
-	@j:button:button
-	@j:CubeView:CubeView
-	@j:editor:editor editor.cxx
-	@j:hello:hello
-	@j:shape:shape
-
-@main:Images\nfor\nManual...:@i
-	@i:valuators:valuators
-	@i:symbols:symbols
-	@i:buttons:buttons
-	@i:clock:clock
-	@i:popups:message
-	@i:boxtypes:boxtype
binary files a/DoConfig/fltk/test/desktop/blocks-128.png /dev/null differ
binary files a/DoConfig/fltk/test/desktop/blocks-32.png /dev/null differ
--- a/DoConfig/fltk/test/desktop/blocks.desktop
+++ /dev/null
@@ -1,9 +1,0 @@
-[Desktop Entry]
-Name=Block Attack!
-Comment=Block Attack! Game
-TryExec=blocks
-Exec=blocks
-Icon=blocks
-Terminal=false
-Type=Application
-Categories=Game;BlocksGame;
binary files a/DoConfig/fltk/test/desktop/checkers-128.png /dev/null differ
binary files a/DoConfig/fltk/test/desktop/checkers-32.png /dev/null differ
--- a/DoConfig/fltk/test/desktop/checkers.desktop
+++ /dev/null
@@ -1,9 +1,0 @@
-[Desktop Entry]
-Name=Checkers
-Comment=Checkers Game
-TryExec=checkers
-Exec=checkers
-Icon=checkers
-Terminal=false
-Type=Application
-Categories=Game;BoardGame;
binary files a/DoConfig/fltk/test/desktop/sudoku-128.png /dev/null differ
binary files a/DoConfig/fltk/test/desktop/sudoku-32.png /dev/null differ
--- a/DoConfig/fltk/test/desktop/sudoku.desktop
+++ /dev/null
@@ -1,9 +1,0 @@
-[Desktop Entry]
-Name=Sudoku
-Comment=Suduku Number Game
-TryExec=sudoku
-Exec=sudoku
-Icon=sudoku
-Terminal=false
-Type=Application
-Categories=Game;LogicGame;
--- a/DoConfig/fltk/test/device.cxx
+++ /dev/null
@@ -1,745 +1,0 @@
-//
-// "$Id$"
-//
-// Device test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 by Roman Kantor 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <math.h>
-#include <FL/Fl.H>
-
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Radio_Round_Button.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Clock.H>
-#include "pixmaps/porsche.xpm"
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Bitmap.H>
-#include <FL/Fl_Round_Button.H>
-
-
-#include <FL/Fl_Printer.H>
-#include <FL/Fl_Copy_Surface.H>
-#include <FL/Fl_Image_Surface.H>
-
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_draw.H>
-
-
-#define sorceress_width 75
-#define sorceress_height 75
-
-
-// shameles copy from bitmap...
-static uchar sorceress_bits[] = {
-  0xfc, 0x7e, 0x40, 0x20, 0x90, 0x00, 0x07, 0x80, 0x23, 0x00, 0x00, 0xc6,
-  0xc1, 0x41, 0x98, 0xb8, 0x01, 0x07, 0x66, 0x00, 0x15, 0x9f, 0x03, 0x47,
-  0x8c, 0xc6, 0xdc, 0x7b, 0xcc, 0x00, 0xb0, 0x71, 0x0e, 0x4d, 0x06, 0x66,
-  0x73, 0x8e, 0x8f, 0x01, 0x18, 0xc4, 0x39, 0x4b, 0x02, 0x23, 0x0c, 0x04,
-  0x1e, 0x03, 0x0c, 0x08, 0xc7, 0xef, 0x08, 0x30, 0x06, 0x07, 0x1c, 0x02,
-  0x06, 0x30, 0x18, 0xae, 0xc8, 0x98, 0x3f, 0x78, 0x20, 0x06, 0x02, 0x20,
-  0x60, 0xa0, 0xc4, 0x1d, 0xc0, 0xff, 0x41, 0x04, 0xfa, 0x63, 0x80, 0xa1,
-  0xa4, 0x3d, 0x00, 0x84, 0xbf, 0x04, 0x0f, 0x06, 0xfc, 0xa1, 0x34, 0x6b,
-  0x01, 0x1c, 0xc9, 0x05, 0x06, 0xc7, 0x06, 0xbe, 0x11, 0x1e, 0x43, 0x30,
-  0x91, 0x05, 0xc3, 0x61, 0x02, 0x30, 0x1b, 0x30, 0xcc, 0x20, 0x11, 0x00,
-  0xc1, 0x3c, 0x03, 0x20, 0x0a, 0x00, 0xe8, 0x60, 0x21, 0x00, 0x61, 0x1b,
-  0xc1, 0x63, 0x08, 0xf0, 0xc6, 0xc7, 0x21, 0x03, 0xf8, 0x08, 0xe1, 0xcf,
-  0x0a, 0xfc, 0x4d, 0x99, 0x43, 0x07, 0x3c, 0x0c, 0xf1, 0x9f, 0x0b, 0xfc,
-  0x5b, 0x81, 0x47, 0x02, 0x16, 0x04, 0x31, 0x1c, 0x0b, 0x1f, 0x17, 0x89,
-  0x4d, 0x06, 0x1a, 0x04, 0x31, 0x38, 0x02, 0x07, 0x56, 0x89, 0x49, 0x04,
-  0x0b, 0x04, 0xb1, 0x72, 0x82, 0xa1, 0x54, 0x9a, 0x49, 0x04, 0x1d, 0x66,
-  0x50, 0xe7, 0xc2, 0xf0, 0x54, 0x9a, 0x58, 0x04, 0x0d, 0x62, 0xc1, 0x1f,
-  0x44, 0xfc, 0x51, 0x90, 0x90, 0x04, 0x86, 0x63, 0xe0, 0x74, 0x04, 0xef,
-  0x31, 0x1a, 0x91, 0x00, 0x02, 0xe2, 0xc1, 0xfd, 0x84, 0xf9, 0x30, 0x0a,
-  0x91, 0x00, 0x82, 0xa9, 0xc0, 0xb9, 0x84, 0xf9, 0x31, 0x16, 0x81, 0x00,
-  0x42, 0xa9, 0xdb, 0x7f, 0x0c, 0xff, 0x1c, 0x16, 0x11, 0x00, 0x02, 0x28,
-  0x0b, 0x07, 0x08, 0x60, 0x1c, 0x02, 0x91, 0x00, 0x46, 0x29, 0x0e, 0x00,
-  0x00, 0x00, 0x10, 0x16, 0x11, 0x02, 0x06, 0x29, 0x04, 0x00, 0x00, 0x00,
-  0x10, 0x16, 0x91, 0x06, 0xa6, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x24,
-  0x91, 0x04, 0x86, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x27, 0x93, 0x04,
-  0x96, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x02, 0x91, 0x04, 0x86, 0x4a,
-  0x0c, 0x00, 0x00, 0x00, 0x1e, 0x23, 0x93, 0x04, 0x56, 0x88, 0x08, 0x00,
-  0x00, 0x00, 0x90, 0x21, 0x93, 0x04, 0x52, 0x0a, 0x09, 0x80, 0x01, 0x00,
-  0xd0, 0x21, 0x95, 0x04, 0x57, 0x0a, 0x0f, 0x80, 0x27, 0x00, 0xd8, 0x20,
-  0x9d, 0x04, 0x5d, 0x08, 0x1c, 0x80, 0x67, 0x00, 0xe4, 0x01, 0x85, 0x04,
-  0x79, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0xf4, 0x11, 0x85, 0x06, 0x39, 0x08,
-  0x7d, 0x00, 0x00, 0x18, 0xb7, 0x10, 0x81, 0x03, 0x29, 0x12, 0xcb, 0x00,
-  0x7e, 0x30, 0x28, 0x00, 0x85, 0x03, 0x29, 0x10, 0xbe, 0x81, 0xff, 0x27,
-  0x0c, 0x10, 0x85, 0x03, 0x29, 0x32, 0xfa, 0xc1, 0xff, 0x27, 0x94, 0x11,
-  0x85, 0x03, 0x28, 0x20, 0x6c, 0xe1, 0xff, 0x07, 0x0c, 0x01, 0x85, 0x01,
-  0x28, 0x62, 0x5c, 0xe3, 0x8f, 0x03, 0x4e, 0x91, 0x80, 0x05, 0x39, 0x40,
-  0xf4, 0xc2, 0xff, 0x00, 0x9f, 0x91, 0x84, 0x05, 0x31, 0xc6, 0xe8, 0x07,
-  0x7f, 0x80, 0xcd, 0x00, 0xc4, 0x04, 0x31, 0x06, 0xc9, 0x0e, 0x00, 0xc0,
-  0x48, 0x88, 0xe0, 0x04, 0x79, 0x04, 0xdb, 0x12, 0x00, 0x30, 0x0c, 0xc8,
-  0xe4, 0x04, 0x6d, 0x06, 0xb6, 0x23, 0x00, 0x18, 0x1c, 0xc0, 0x84, 0x04,
-  0x25, 0x0c, 0xff, 0xc2, 0x00, 0x4e, 0x06, 0xb0, 0x80, 0x04, 0x3f, 0x8a,
-  0xb3, 0x83, 0xff, 0xc3, 0x03, 0x91, 0x84, 0x04, 0x2e, 0xd8, 0x0f, 0x3f,
-  0x00, 0x00, 0x5f, 0x83, 0x84, 0x04, 0x2a, 0x70, 0xfd, 0x7f, 0x00, 0x00,
-  0xc8, 0xc0, 0x84, 0x04, 0x4b, 0xe2, 0x2f, 0x01, 0x00, 0x08, 0x58, 0x60,
-  0x80, 0x04, 0x5b, 0x82, 0xff, 0x01, 0x00, 0x08, 0xd0, 0xa0, 0x84, 0x04,
-  0x72, 0x80, 0xe5, 0x00, 0x00, 0x08, 0xd2, 0x20, 0x44, 0x04, 0xca, 0x02,
-  0xff, 0x00, 0x00, 0x08, 0xde, 0xa0, 0x44, 0x04, 0x82, 0x02, 0x6d, 0x00,
-  0x00, 0x08, 0xf6, 0xb0, 0x40, 0x02, 0x82, 0x07, 0x3f, 0x00, 0x00, 0x08,
-  0x44, 0x58, 0x44, 0x02, 0x93, 0x3f, 0x1f, 0x00, 0x00, 0x30, 0x88, 0x4f,
-  0x44, 0x03, 0x83, 0x23, 0x3e, 0x00, 0x00, 0x00, 0x18, 0x60, 0xe0, 0x07,
-  0xe3, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe4, 0x07, 0xc7, 0x1b,
-  0xfe, 0x01, 0x00, 0x00, 0xe0, 0x3c, 0xe4, 0x07, 0xc7, 0xe3, 0xfe, 0x1f,
-  0x00, 0x00, 0xff, 0x1f, 0xfc, 0x07, 0xc7, 0x03, 0xf8, 0x33, 0x00, 0xc0,
-  0xf0, 0x07, 0xff, 0x07, 0x87, 0x02, 0xfc, 0x43, 0x00, 0x60, 0xf0, 0xff,
-  0xff, 0x07, 0x8f, 0x06, 0xbe, 0x87, 0x00, 0x30, 0xf8, 0xff, 0xff, 0x07,
-  0x8f, 0x14, 0x9c, 0x8f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x9f, 0x8d,
-  0x8a, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xbf, 0x0b, 0x80, 0x1f,
-  0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x3a, 0x80, 0x3f, 0x00, 0x80,
-  0xff, 0xff, 0xff, 0x07, 0xff, 0x20, 0xc0, 0x3f, 0x00, 0x80, 0xff, 0xff,
-  0xff, 0x07, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
-  0xff, 0x0f, 0xf8, 0xff, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff,
-  0xff, 0xff, 0x40, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
-  0x41, 0xf0, 0xff, 0xff, 0xff, 0x07};
-
-class MyWidget: public Fl_Box{
-protected:
-  void draw(){
-    Fl_Box::draw();
-    fl_color(FL_RED);
-    fl_rectf(x()+5,y()+5,w()-10,h()-10);
-    fl_push_clip(x()+6,y()+6,w()-12,h()-12);
-    fl_color(FL_DARK_GREEN);
-    fl_rectf(x()+5,y()+5,w()-10,h()-10);
-    fl_pop_clip();
-    fl_color(FL_YELLOW);
-    fl_rectf(x()+7,y()+7,w()-14,h()-14);
-    fl_color(FL_BLUE);
-    
-    fl_rect(x()+8,y()+8,w()-16,h()-16);
-    fl_push_clip(x()+25,y()+25,w()-50, h()-50);
-    fl_color(FL_BLACK);
-    fl_rect(x()+24,y()+24,w()-48,h()-48);
-    fl_line(x()+27,y()+27,x()+w()-27,y()+h()-27);
-    fl_line(x()+27,y()+h()-27,x()+w()-27,y()+27);
-    //fl_rect(x()+30,y()+30,w()-60,h()-60);
-    fl_pop_clip();
-    
-  }
-public:
-  MyWidget(int x, int y):Fl_Box(x,y,100,100, "Clipping and rect(f):\nYellow rect.framed\nby B-Y-G-R rect. 1 p.\nthick. Your printer may \nrender very thin lines\nsurrounding \"X\""){
-    align(FL_ALIGN_TOP);
-    labelsize(10);
-  };
-};
-
-
-class MyWidget2: public Fl_Box{
-protected:
-  void draw(){
-    Fl_Box::draw();
-    int d;
-    //    fl_line_style(0);
-    for(d=y()+5;d<48+y();d+=2){
-      fl_xyline(x()+5,d,x()+48);
-    }
-    
-    fl_push_clip(x()+52,y()+5,45,43);
-    for(d=y()+5;d<150+y();d+=3){
-      fl_line(x()+52,d,x()+92,d-40);
-    }
-    fl_pop_clip();
-    
-    fl_line_style(FL_DASH);
-    fl_xyline(x()+5,y()+55,x()+48);
-    fl_line_style(FL_DOT);
-    fl_xyline(x()+5,y()+58,x()+48);
-    fl_line_style(FL_DASHDOT);
-    fl_xyline(x()+5,y()+61,x()+48);
-    fl_line_style(FL_DASHDOTDOT);
-    fl_xyline(x()+5,y()+64,x()+48);
-    fl_line_style(0,0,(char*)"\7\3\7\2");
-    fl_xyline(x()+5,y()+67,x()+48);
-    
-    fl_line_style(0);
-    
-    fl_line(x()+5,y()+72,x()+25,y()+95);
-    fl_line(x()+8,y()+72,x()+28,y()+95,x()+31,y()+72);
-    
-    fl_color(FL_YELLOW);
-    fl_polygon(x()+11, y()+72,x()+27,y()+91,x()+29,y()+72);
-    fl_color(FL_RED);
-    fl_loop(x()+11, y()+72,x()+27,y()+91,x()+29,y()+72);
-    
-    fl_color(FL_BLUE); ////
-    fl_line_style(FL_SOLID, 6);
-    fl_loop(x()+31, y()+12,x()+47,y()+31,x()+49,y()+12);
-    fl_line_style(0);
-    
-    fl_color(200,0,200);
-    fl_polygon(x()+35,y()+72,x()+33,y()+95,x()+48,y()+95,x()+43,y()+72);
-    fl_color(FL_GREEN);
-    fl_loop(x()+35,y()+72,x()+33,y()+95,x()+48,y()+95,x()+43,y()+72);
-    
-    fl_color(FL_BLUE);    
-    fl_yxline(x()+65,y()+63,y()+66);
-    fl_color(FL_GREEN);    
-    fl_yxline(x()+66,y()+66,y()+63);
-    
-    fl_color(FL_BLUE);
-    fl_rect(x()+80,y()+55,5,5);
-    fl_color(FL_YELLOW);
-    fl_rectf(x()+81,y()+56,3,3);
-    fl_color(FL_BLACK);
-    fl_point(x()+82,y()+57);
-    
-    fl_color(FL_BLUE);
-    fl_rect(x()+56, y()+79, 24, 17);
-    fl_color(FL_CYAN);
-    fl_rectf(x()+57, y()+80, 22 , 15 );
-    fl_color(FL_RED);
-    fl_arc(x()+57, y()+80, 22 ,15 ,40, 270);
-    fl_color(FL_YELLOW);
-    fl_pie(x()+58, y()+81, 20 ,13 ,40, 270);
-    
-    fl_line_style(0);
-    
-    fl_color(FL_BLACK);
-    fl_point(x()+58,y()+58);
-    fl_color(FL_RED);
-    fl_yxline(x()+59,y()+58,y()+59);
-    fl_color(FL_GREEN);
-    fl_yxline(x()+60,y()+59,y()+58);
-    fl_color(FL_BLACK);
-    fl_xyline(x()+61,y()+58,x()+62);
-    fl_color(FL_RED);
-    fl_xyline(x()+62,y()+59,x()+61);
-    
-    fl_color(FL_GREEN);
-    fl_yxline(x()+57,y()+58,y()+59,x()+58);
-    fl_color(FL_BLUE);
-    fl_xyline(x()+58,y()+60,x()+56,y()+58);
-    fl_color(FL_RED);
-    fl_xyline(x()+58,y()+61,x()+56,y()+63);
-    fl_color(FL_GREEN);
-    fl_yxline(x()+57,y()+63,y()+62,x()+58);
-    
-    fl_color(FL_BLUE);
-    fl_line(x()+58,y()+63, x()+60, y()+65);
-    fl_color(FL_BLACK);
-    fl_line(x()+61,y()+65, x()+59, y()+63);
-    
-    fl_color(FL_BLACK);
-  };
-  
-public:
-  MyWidget2(int x, int y):Fl_Box(x,y,100,100, "Integer primitives"){
-    labelsize(10);
-    align(FL_ALIGN_TOP);
-  };
-};
-
-
-class MyWidget3: public Fl_Box{
-protected:
-  void draw(){
-    Fl_Box::draw();
-    double d;
-    //    fl_line_style(0);
-    fl_push_clip(x()+5,y()+5,45,43);
-    for(d=y()+5;d<95+y();d+=1.63){
-      fl_begin_line();
-      fl_vertex(x()+5,d);
-      fl_vertex(x()+48,d);
-      fl_end_line();
-    }
-    fl_pop_clip();
-    
-    fl_push_clip(x()+52,y()+5,45,43);
-    for(d=y()+5;d<150+y();d+=2.3052){
-      fl_begin_line();
-      fl_vertex(x()+52,d);
-      fl_vertex(x()+92,d-43);
-      fl_end_line();
-    }
-    fl_pop_clip();
-    
-  };
-public:
-  MyWidget3(int x, int y):Fl_Box(x,y,100,100, "Sub-pixel drawing of\nlines 1.63 points apart\nOn the screen you\ncan see aliasing, the\nprinter should render\nthem properly"){
-    labelsize(10);
-    align(FL_ALIGN_TOP);
-  };
-};
-
-
-
-class MyWidget4: public Fl_Box{
-protected:
-  void draw(){
-    Fl_Box::draw();
-    fl_push_matrix();
-    fl_translate(x(),y());
-    fl_scale(.75,.75);
-    
-    fl_line_style(FL_SOLID , 5);
-    fl_begin_line();
-    fl_vertex(10, 160);
-    fl_vertex(40, 160);
-    fl_vertex(40, 190);
-    fl_end_line();
-    fl_line_style(0);
-
-    fl_color(FL_RED);
-    fl_line_style(FL_SOLID | FL_CAP_FLAT |FL_JOIN_MITER , 5);
-    fl_begin_line();
-    fl_vertex(10, 150);
-    fl_vertex(50, 150);
-    fl_vertex(50, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_GREEN);   
-    fl_line_style(FL_SOLID | FL_CAP_ROUND |FL_JOIN_ROUND , 5);
-    fl_begin_line();
-    fl_vertex(10, 140);
-    fl_vertex(60, 140);
-    fl_vertex(60, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLUE);
-    fl_line_style(FL_SOLID | FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
-    fl_begin_line();
-    fl_vertex(10, 130);
-    fl_vertex(70, 130);
-    fl_vertex(70, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLACK);
-    fl_line_style(FL_DASH , 5);
-    fl_begin_line();
-    fl_vertex(10, 120);
-    fl_vertex(80, 120);
-    fl_vertex(80, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_RED);
-    fl_line_style(FL_DASH |FL_CAP_FLAT , 5);
-    fl_begin_line();
-    fl_vertex(10, 110);
-    fl_vertex(90, 110);
-    fl_vertex(90, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_GREEN);
-    fl_line_style(FL_DASH |FL_CAP_ROUND , 5);
-    fl_begin_line();
-    fl_vertex(10, 100);
-    fl_vertex(100, 100);
-    fl_vertex(100, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    
-    fl_color(FL_BLUE);
-    fl_line_style(FL_DASH |FL_CAP_SQUARE , 5);
-    fl_begin_line();
-    fl_vertex(10, 90);
-    fl_vertex(110, 90);
-    fl_vertex(110, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLACK);
-    fl_line_style(FL_DOT, 5);
-    fl_begin_line();
-    fl_vertex(10, 80);
-    fl_vertex(120, 80);
-    fl_vertex(120, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_RED);
-    fl_line_style(FL_DOT | FL_CAP_FLAT, 5);
-    fl_begin_line();
-    fl_vertex(10, 70);
-    fl_vertex(130, 70);
-    fl_vertex(130, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_GREEN);
-    fl_line_style(FL_DOT | FL_CAP_ROUND, 5);
-    fl_begin_line();
-    fl_vertex(10, 60);
-    fl_vertex(140, 60);
-    fl_vertex(140, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLUE);
-    fl_line_style(FL_DOT | FL_CAP_SQUARE, 5);
-    fl_begin_line();
-    fl_vertex(10, 50);
-    fl_vertex(150, 50);
-    fl_vertex(150, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLACK);
-    fl_line_style(FL_DASHDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
-    fl_begin_line();
-    fl_vertex(10, 40);
-    fl_vertex(160, 40);
-    fl_vertex(160, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_RED);
-    fl_line_style(FL_DASHDOTDOT |FL_CAP_SQUARE |FL_JOIN_BEVEL , 5);
-    fl_begin_line();
-    fl_vertex(10, 30);
-    fl_vertex(170, 30);
-    fl_vertex(170, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    
-    fl_color(FL_GREEN);
-    fl_line_style(FL_DASHDOTDOT |FL_CAP_ROUND |FL_JOIN_ROUND , 5);
-    fl_begin_line();
-    fl_vertex(10, 20);
-    fl_vertex(180, 20);
-    fl_vertex(180, 190);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_color(FL_BLUE);
-    fl_line_style(0, 5, (char*)"\12\3\4\2\2\1");
-    fl_begin_line();
-    fl_vertex(10, 10);
-    fl_vertex(190, 10);
-    fl_vertex(190, 190);
-    
-    fl_end_line();
-    fl_line_style(0);
-    fl_pop_matrix();    
-    
-    fl_color(FL_BLACK);
-  };
-public:
-  MyWidget4(int x, int y):Fl_Box(x,y,150,150, "Line styles"){
-    labelsize(10);
-    align(FL_ALIGN_TOP);
-  };
-};
-
-
-class MyWidget5: public Fl_Box{
-protected:
-  void draw(){
-    Fl_Box::draw();
-    fl_push_matrix();
-    
-    fl_translate(x(),y());
-    fl_push_matrix();
-    fl_mult_matrix(1,3,0,1,0,-20);
-    fl_color(FL_GREEN);
-    fl_begin_polygon();
-    fl_vertex(10,10);
-    fl_vertex(100,-80);
-    fl_vertex(100,-190);
-    fl_end_polygon();
-    
-    fl_color(FL_RED);
-    fl_line_style(FL_DASHDOT, 7);
-    fl_begin_loop();
-    
-    fl_vertex(10,10);
-    fl_vertex(100,-80);
-    fl_vertex(100,-190);
-    fl_end_loop();
-    fl_line_style(0);
-    
-    fl_color(FL_BLUE);
-    fl_line_style(FL_SOLID, 3);
-    fl_begin_loop();
-    fl_circle(60,-50,30);
-    fl_end_loop();
-    fl_line_style(0);
-    
-    fl_pop_matrix();
-    fl_scale(1.8,1);
-    
-    fl_color(FL_YELLOW);
-    fl_begin_polygon();
-    fl_arc(30,90,20,-45,200);
-    fl_end_polygon();
-    
-    fl_color(FL_BLACK);
-    fl_line_style(FL_DASH, 3);
-    fl_begin_line();
-    fl_arc(30,90,20,-45,200);
-    fl_end_line();
-    fl_line_style(0);
-    
-    fl_translate(15,0);
-    fl_scale(1.5,3);
-    fl_begin_complex_polygon();
-    fl_vertex(30,70);
-    fl_arc(45,55,10,200,90);
-    fl_arc(55,45,8,-170,20);
-    fl_vertex(60,40);
-    fl_vertex(30,20);
-    fl_vertex(40,5);
-    fl_vertex(60,25);
-    //fl_vertex(50,50);
-    fl_curve(35,30,30,53,0,35,65,65);
-    fl_gap();
-    fl_vertex(50,25);
-    fl_vertex(40,10);
-    fl_vertex(35,20);
-    fl_end_complex_polygon();
-    
-    fl_pop_matrix();
-  };
-public:
-  MyWidget5(int x, int y):Fl_Box(x,y,230,250, "Complex (double) drawings:\nBlue ellipse may not be\ncorrectly transformed\ndue to non-orthogonal\ntransformation"){
-    labelsize(10);
-    align(FL_ALIGN_TOP);
-  };
-};
-
-
-uchar *image;
-int width = 80;
-int height = 80;
-
-void make_image() {
-  image = new uchar[4*width*height];
-  uchar *p = image;
-  for (int y = 0; y < height; y++) {
-    double Y = double(y)/(height-1);
-    for (int x = 0; x < width; x++) {
-      double X = double(x)/(width-1);
-      *p++ = uchar(255*((1-X)*(1-Y))); // red in upper-left
-      *p++ = uchar(255*((1-X)*Y));	// green in lower-left
-      *p++ = uchar(255*(X*Y));	// blue in lower-right
-      X -= 0.5;
-      Y -= 0.5;
-      int alpha = (int)(350 * sqrt(X * X + Y * Y));
-      if (alpha < 255) *p++ = uchar(alpha);	// alpha transparency
-      else *p++ = 255;
-      Y += 0.5;
-    }
-  }
-}
-
-
-Fl_Widget *target;
-const  char *operation;
-
-void copy(Fl_Widget *, void *data) {
-  if (strcmp(operation, "Fl_Image_Surface") == 0) {
-    Fl_Image_Surface *rgb_surf;
-    int W, H, decorated;
-    if (target->as_window() && !target->parent()) {
-      W = target->as_window()->decorated_w();
-      H = target->as_window()->decorated_h();
-      decorated = 1;
-     }
-    else {
-      W = target->w();
-      H = target->h();
-      decorated = 0;
-    }
-    rgb_surf = new Fl_Image_Surface(W, H, 1);
-    rgb_surf->set_current();
-    if (decorated)
-      rgb_surf->draw_decorated_window(target->as_window());
-    else
-      rgb_surf->draw(target);
-    Fl_Image *img = rgb_surf->highres_image();
-    delete rgb_surf;
-    Fl_Display_Device::display_device()->set_current();
-    Fl_Window* g2 = new Fl_Window(img->w()+10, img->h()+10);
-    g2->color(FL_YELLOW);
-    Fl_Box *b = new Fl_Box(FL_NO_BOX,5,5,img->w(), img->h(),0);
-    b->image(img);
-    g2->end();
-    g2->show();
-    return;
-  }
-  
-  
-  if (strcmp(operation, "Fl_Copy_Surface") == 0) {
-    Fl_Copy_Surface *copy_surf;
-    if (target->as_window() && !target->parent()) {
-      copy_surf = new Fl_Copy_Surface(target->as_window()->decorated_w(), target->as_window()->decorated_h());
-      copy_surf->set_current();
-      copy_surf->draw_decorated_window(target->as_window(), 0, 0);
-    }
-    else {
-      copy_surf = new Fl_Copy_Surface(target->w()+10, target->h()+20);
-      copy_surf->set_current();
-      fl_color(FL_YELLOW);fl_rectf(0,0,copy_surf->w(), copy_surf->h());
-      copy_surf->draw(target, 5, 10);
-    }
-    delete copy_surf;
-    Fl_Display_Device::display_device()->set_current();  
-    }
-  
-  if (strcmp(operation, "Fl_Printer") == 0) {
-    Fl_Printer * p = new Fl_Printer();
-    if (!p->start_job(1)) {
-      p->start_page();
-      if (target->as_window()) p->print_window(target->as_window());
-      else p->print_widget(target);
-      p->end_page();
-      p->end_job();
-    }
-    delete p;
-  }
-}
-
-
-class My_Button:public Fl_Button{
-protected:
-  void draw(){
-    if (type() == FL_HIDDEN_BUTTON) return;
-    Fl_Color col = value() ? selection_color() : color();
-    draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
-    fl_color(FL_WHITE);
-    fl_line_style(FL_SOLID,5);
-    fl_line(x()+15,y()+10,x()+w()-15,y()+h()-23);
-    fl_line(x()+w()-15,y()+10,x()+15,y()+h()-23);
-    fl_line_style(0);
-    draw_label();
-    
-  };
-public:
-  My_Button(int x, int y, int w, int h, const char * label = 0):Fl_Button(x,y,w,h,label){}
-};
-
-
-void target_cb(Fl_Widget* wid, void *data)
-{
-  target = (Fl_Widget*)data;
-}
-
-void operation_cb(Fl_Widget* wid, void *data)
-{
-  operation = wid->label();
-}
-
-int main(int argc, char ** argv) {
-  
-  //Fl::scheme("plastic");  
-  
-  Fl_Window * w2 = new Fl_Window(500,560,"Graphics test");
-  
-  Fl_Group *c2 =new Fl_Group(3, 43, 494, 514 );
-  
-  new MyWidget(10,140);
-  new MyWidget2(110,80);
-  new MyWidget3(220,140);
-  new MyWidget4(330,70);
-  new MyWidget5(140,270);
-  
-  make_image();
-  Fl_RGB_Image *rgb = new Fl_RGB_Image(image, width, height, 4);
-  My_Button b_rgb(10,245,100,100,"RGB with alpha");
-  b_rgb.image(rgb);
-  
-  My_Button b_pixmap(10,345,100,100,"Pixmap");
-  Fl_Pixmap *pixmap = new Fl_Pixmap(porsche_xpm);
-  b_pixmap.image(pixmap);
-  
-  My_Button b_bitmap(10,445,100,100,"Bitmap");
-  b_bitmap.labelcolor(FL_GREEN);
-  b_bitmap.image(new Fl_Bitmap(sorceress_bits,sorceress_width,sorceress_height));
-  
-  new Fl_Clock(360,230,120,120);
-  Fl_Return_Button * ret = new Fl_Return_Button (360, 360, 120,30, "Return");
-  ret->deactivate();
-  Fl_Button but1(360, 390, 30, 30, "@->|");
-  but1.labelcolor(FL_DARK3);
-  Fl_Button but2(390, 390, 30, 30, "@UpArrow");
-  but2.labelcolor(FL_DARK3);
-  Fl_Button but3(420, 390, 30, 30, "@DnArrow");
-  but3.labelcolor(FL_DARK3);
-  Fl_Button but4(450, 390, 30, 30, "@+");
-  but4.labelcolor(FL_DARK3);
-  Fl_Button but5(360, 425, 120, 30, "Hello, World");
-  but5.labelfont(FL_BOLD|FL_ITALIC);
-  but5.labeltype(FL_SHADOW_LABEL);
-  but5.box(FL_ROUND_UP_BOX);
-  
-  Fl_Button but6(360, 460, 120, 30, "Plastic");
-  but6.box(FL_PLASTIC_UP_BOX);
-  
-  Fl_Group *group;
-  { Fl_Group* o = new Fl_Group(360, 495, 120, 40); group=o;
-    o->box(FL_UP_BOX);
-    { Fl_Group* o = new Fl_Group(365, 500, 110, 30);
-      o->box(FL_THIN_UP_FRAME);
-      { Fl_Round_Button* o = new Fl_Round_Button(365, 500, 40, 30, "rad");
-        o->value(1);
-      }
-      { Fl_Check_Button* o = new Fl_Check_Button(410, 500, 60, 30, "check");
-        o->value(1);
-        
-      }
-      o->end();
-    }
-    o->end();
-    o->deactivate();
-  }
-  Fl_Box tx(120,492,230,50,"Background is not printed because\nencapsulating group, which we are\n printing, has not set the box type");
-  tx.box(FL_SHADOW_BOX);
-  tx.labelsize(12);
-  
-  tx.hide();
-  
-  c2->end();
-  
-  Fl_Radio_Round_Button *rb;
-  Fl_Window *w3 = new Fl_Window(2,5,w2->w()-10,55);
-  w3->box(FL_DOWN_BOX);
-  Fl_Group *g1 = new Fl_Group(w3->x(),w3->y(),w3->w(),w3->h());
-  rb = new Fl_Radio_Round_Button(5,5,150,12, "Fl_Image_Surface"); 
-  rb->set(); rb->callback(operation_cb, NULL); operation = rb->label();
-  rb = new Fl_Radio_Round_Button(5,22,150,12, "Fl_Copy_Surface"); rb->callback(operation_cb, NULL);
-  rb = new Fl_Radio_Round_Button(5,39,150,12, "Fl_Printer"); rb->callback(operation_cb, NULL);
-  g1->end();
-  
-  Fl_Group *g2 = new Fl_Group(w3->x(),w3->y(),w3->w(),w3->h());
-  rb = new Fl_Radio_Round_Button(170,5,150,12, "Decorated Window"); 
-  rb->set(); rb->callback(target_cb, w2); target = w2;
-  rb = new Fl_Radio_Round_Button(170,22,150,12, "Sub-window"); rb->callback(target_cb, w3);
-  rb = new Fl_Radio_Round_Button(170,39,150,12, "Group"); rb->callback(target_cb, group);
-  g2->end();
-  Fl_Button *b4 = new Fl_Button(330, (w3->h() - 25)/2, 150, 25, "GO");
-  b4->callback((Fl_Callback*)copy,NULL);
-  w3->end();
-  
-  w2->end();
-  w2->show(argc, argv);
-  
-  Fl::run();
-  return 0;
-}
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/doublebuffer.cxx
+++ /dev/null
@@ -1,119 +1,0 @@
-//
-// "$Id$"
-//
-// Double-buffering test program for the Fast Light Tool Kit (FLTK).
-//
-// This demo shows how double buffering helps, by drawing the
-// window in a particularily bad way.
-//
-// The single-buffered window will blink as it updates.  The
-// double buffered one will not.  It will take just as long
-// (or longer) to update, but often it will appear to be faster.
-//
-// This demo should work for both the GL and X versions of Fl,
-// even though the double buffering mechanism is totally different.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Single_Window.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Hor_Slider.H>
-#include <stdlib.h>
-#include <FL/math.h>
-#include <stdio.h>
-
-// this purposely draws each line 10 times to be slow:
-void star(int w, int h, int n) {
-  fl_push_matrix();
-  fl_translate(w/2, h/2);
-  fl_scale(w/2, h/2);
-  for (int i = 0; i < n; i++) {
-    for (int j = i+1; j < n; j++)/* for (int k=0; k<10; k++)*/ {
-      fl_begin_line();
-      fl_vertex(cos(2*M_PI*i/n+.1), sin(2*M_PI*i/n+.1));
-      fl_vertex(cos(2*M_PI*j/n+.1), sin(2*M_PI*j/n+.1));
-      fl_end_line();
-    }
-  }
-  fl_pop_matrix();
-}
-
-int sides[2] = {20,20};
-
-void slider_cb(Fl_Widget* o, long v) {
-  sides[v] = int(((Fl_Slider*)o)->value());
-  o->parent()->redraw();
-}
-
-void bad_draw(int w,int h,int which) {
-//   for (int i=0; i<10; i++) {
-//     fl_color(7); fl_rectf(0,0,w,h); fl_color(0); star(w,h);
-//     fl_color(0); fl_rectf(0,0,w,h); fl_color(7); star(w,h);
-//   }
-  fl_color(FL_BLACK); fl_rectf(0,0,w,h);
-  fl_color(FL_WHITE); star(w,h,sides[which]);
-  //  for (int x=0; x<sides[which]; x++) for (int y=0; y<sides[which]; y++)
-  //fl_draw_box(FL_UP_BOX, 10*x, 10*y, 25,25, FL_GRAY);
-}
-
-class single_blink_window : public Fl_Single_Window {
-  void draw() {bad_draw(w(),h(),0); draw_child(*child(0));}
-public:
-  single_blink_window(int x, int y,int w,int h,const char *l)
-    : Fl_Single_Window(x,y,w,h,l) {resizable(this);}
-};
-
-class double_blink_window : public Fl_Double_Window {
-  void draw() {bad_draw(w(),h(),1); draw_child(*child(0));}
-public:
-  double_blink_window(int x, int y, int w,int h,const char *l)
-    : Fl_Double_Window(x,y,w,h,l) {resizable(this);}
-};
-
-int main(int argc, char **argv) {
-  if (!Fl::visual(FL_DOUBLE))
-    printf("Xdbe not supported, faking double buffer with pixmaps.\n");
-  Fl_Window w01(420,420,"Fl_Single_Window"); w01.box(FL_FLAT_BOX);
-  single_blink_window w1(10,10,400,400,"Fl_Single_Window");
-  w1.box(FL_FLAT_BOX); w1.color(FL_BLACK); //w1.position(100,200);
-  Fl_Hor_Slider slider0(20,370,360,25);
-  slider0.range(2,30);
-  slider0.step(1);
-  slider0.value(sides[0]);
-  slider0.callback(slider_cb, 0);
-  w1.end();
-  w01.end();
-  Fl_Window w02(420,420,"Fl_Double_Window"); w02.box(FL_FLAT_BOX);
-  double_blink_window w2(10,10,400,400,"Fl_Double_Window");
-  w2.box(FL_FLAT_BOX); w2.color(FL_BLACK); //w2.position(600,200);
-  Fl_Hor_Slider slider1(20,370,360,25);
-  slider1.range(2,30);
-  slider1.step(1);
-  slider1.value(sides[0]);
-  slider1.callback(slider_cb, 1);
-  w2.end();
-  w02.end();
-  w01.show(argc, argv);
-  w1.show();
-  w02.show();
-  w2.show();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/editor.cxx
+++ /dev/null
@@ -1,978 +1,0 @@
-//
-// "$Id$"
-//
-// A simple text editor program for the Fast Light Tool Kit (FLTK).
-//
-// This program is described in Chapter 4 of the FLTK Programmer's Guide.
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Include necessary headers...
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#ifdef __MWERKS__
-# define FL_DLL
-#endif
-
-#include <FL/Fl.H>
-#include <FL/x.H> // for fl_open_callback
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/fl_ask.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_Menu_Bar.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Return_Button.H>
-#include <FL/Fl_Text_Buffer.H>
-#include <FL/Fl_Text_Editor.H>
-#include <FL/filename.H>
-
-int                changed = 0;
-char               filename[FL_PATH_MAX] = "";
-char               title[FL_PATH_MAX];
-Fl_Text_Buffer     *textbuf = 0;
-
-// width of line number display, if enabled
-const int line_num_width = 75;
-
-// #define DEV_TEST		// uncomment this line ...
-// ... to enable additional test features for developers,
-// particularly to test Fl_Text_Display and/or Fl_Text_Editor.
-
-// Syntax highlighting stuff...
-#define TS 14 // default editor textsize
-Fl_Text_Buffer     *stylebuf = 0;
-Fl_Text_Display::Style_Table_Entry
-                   styletable[] = {	// Style table
-		     { FL_BLACK,      FL_COURIER,           TS }, // A - Plain
-		     { FL_DARK_GREEN, FL_HELVETICA_ITALIC,  TS }, // B - Line comments
-		     { FL_DARK_GREEN, FL_HELVETICA_ITALIC,  TS }, // C - Block comments
-		     { FL_BLUE,       FL_COURIER,           TS }, // D - Strings
-		     { FL_DARK_RED,   FL_COURIER,           TS }, // E - Directives
-		     { FL_DARK_RED,   FL_COURIER_BOLD,      TS }, // F - Types
-		     { FL_BLUE,       FL_COURIER_BOLD,      TS }, // G - Keywords
-		   };
-const char         *code_keywords[] = {	// List of known C/C++ keywords...
-		     "and",
-		     "and_eq",
-		     "asm",
-		     "bitand",
-		     "bitor",
-		     "break",
-		     "case",
-		     "catch",
-		     "compl",
-		     "continue",
-		     "default",
-		     "delete",
-		     "do",
-		     "else",
-		     "false",
-		     "for",
-		     "goto",
-		     "if",
-		     "new",
-		     "not",
-		     "not_eq",
-		     "operator",
-		     "or",
-		     "or_eq",
-		     "return",
-		     "switch",
-		     "template",
-		     "this",
-		     "throw",
-		     "true",
-		     "try",
-		     "while",
-		     "xor",
-		     "xor_eq"
-		   };
-const char         *code_types[] = {	// List of known C/C++ types...
-		     "auto",
-		     "bool",
-		     "char",
-		     "class",
-		     "const",
-		     "const_cast",
-		     "double",
-		     "dynamic_cast",
-		     "enum",
-		     "explicit",
-		     "extern",
-		     "float",
-		     "friend",
-		     "inline",
-		     "int",
-		     "long",
-		     "mutable",
-		     "namespace",
-		     "private",
-		     "protected",
-		     "public",
-		     "register",
-		     "short",
-		     "signed",
-		     "sizeof",
-		     "static",
-		     "static_cast",
-		     "struct",
-		     "template",
-		     "typedef",
-		     "typename",
-		     "union",
-		     "unsigned",
-		     "virtual",
-		     "void",
-		     "volatile"
-		   };
-
-
-//
-// 'compare_keywords()' - Compare two keywords...
-//
-
-extern "C" {
-  int
-  compare_keywords(const void *a,
-                   const void *b) {
-    return (strcmp(*((const char **)a), *((const char **)b)));
-  }
-}
-
-//
-// 'style_parse()' - Parse text and produce style data.
-//
-
-void
-style_parse(const char *text,
-            char       *style,
-	    int        length) {
-  char	     current;
-  int	     col;
-  int	     last;
-  char	     buf[255],
-             *bufptr;
-  const char *temp;
-
-  // Style letters:
-  //
-  // A - Plain
-  // B - Line comments
-  // C - Block comments
-  // D - Strings
-  // E - Directives
-  // F - Types
-  // G - Keywords
-
-  for (current = *style, col = 0, last = 0; length > 0; length --, text ++) {
-    if (current == 'B' || current == 'F' || current == 'G') current = 'A';
-    if (current == 'A') {
-      // Check for directives, comments, strings, and keywords...
-      if (col == 0 && *text == '#') {
-        // Set style to directive
-        current = 'E';
-      } else if (strncmp(text, "//", 2) == 0) {
-        current = 'B';
-	for (; length > 0 && *text != '\n'; length --, text ++) *style++ = 'B';
-
-        if (length == 0) break;
-      } else if (strncmp(text, "/*", 2) == 0) {
-        current = 'C';
-      } else if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted quote...
-	*style++ = current;
-	*style++ = current;
-	text ++;
-	length --;
-	col += 2;
-	continue;
-      } else if (*text == '\"') {
-        current = 'D';
-      } else if (!last && (islower((*text)&255) || *text == '_')) {
-        // Might be a keyword...
-	for (temp = text, bufptr = buf;
-	     (islower((*temp)&255) || *temp == '_') && bufptr < (buf + sizeof(buf) - 1);
-	     *bufptr++ = *temp++) {
-	  // nothing
-        }
-
-        if (!islower((*temp)&255) && *temp != '_') {
-	  *bufptr = '\0';
-
-          bufptr = buf;
-
-	  if (bsearch(&bufptr, code_types,
-	              sizeof(code_types) / sizeof(code_types[0]),
-		      sizeof(code_types[0]), compare_keywords)) {
-	    while (text < temp) {
-	      *style++ = 'F';
-	      text ++;
-	      length --;
-	      col ++;
-	    }
-
-	    text --;
-	    length ++;
-	    last = 1;
-	    continue;
-	  } else if (bsearch(&bufptr, code_keywords,
-	                     sizeof(code_keywords) / sizeof(code_keywords[0]),
-		             sizeof(code_keywords[0]), compare_keywords)) {
-	    while (text < temp) {
-	      *style++ = 'G';
-	      text ++;
-	      length --;
-	      col ++;
-	    }
-
-	    text --;
-	    length ++;
-	    last = 1;
-	    continue;
-	  }
-	}
-      }
-    } else if (current == 'C' && strncmp(text, "*/", 2) == 0) {
-      // Close a C comment...
-      *style++ = current;
-      *style++ = current;
-      text ++;
-      length --;
-      current = 'A';
-      col += 2;
-      continue;
-    } else if (current == 'D') {
-      // Continuing in string...
-      if (strncmp(text, "\\\"", 2) == 0) {
-        // Quoted end quote...
-	*style++ = current;
-	*style++ = current;
-	text ++;
-	length --;
-	col += 2;
-	continue;
-      } else if (*text == '\"') {
-        // End quote...
-	*style++ = current;
-	col ++;
-	current = 'A';
-	continue;
-      }
-    }
-
-    // Copy style info...
-    if (current == 'A' && (*text == '{' || *text == '}')) *style++ = 'G';
-    else *style++ = current;
-    col ++;
-
-    last = isalnum((*text)&255) || *text == '_' || *text == '.';
-
-    if (*text == '\n') {
-      // Reset column and possibly reset the style
-      col = 0;
-      if (current == 'B' || current == 'E') current = 'A';
-    }
-  }
-}
-
-
-//
-// 'style_init()' - Initialize the style buffer...
-//
-
-void
-style_init(void) {
-  char *style = new char[textbuf->length() + 1];
-  char *text = textbuf->text();
-
-  memset(style, 'A', textbuf->length());
-  style[textbuf->length()] = '\0';
-
-  if (!stylebuf) stylebuf = new Fl_Text_Buffer(textbuf->length());
-
-  style_parse(text, style, textbuf->length());
-
-  stylebuf->text(style);
-  delete[] style;
-  free(text);
-}
-
-
-//
-// 'style_unfinished_cb()' - Update unfinished styles.
-//
-
-void
-style_unfinished_cb(int, void*) {
-}
-
-
-//
-// 'style_update()' - Update the style buffer...
-//
-
-void
-style_update(int        pos,		// I - Position of update
-             int        nInserted,	// I - Number of inserted chars
-	     int        nDeleted,	// I - Number of deleted chars
-             int        /*nRestyled*/,	// I - Number of restyled chars
-	     const char * /*deletedText*/,// I - Text that was deleted
-             void       *cbArg) {	// I - Callback data
-  int	start,				// Start of text
-	end;				// End of text
-  char	last,				// Last style on line
-	*style,				// Style data
-	*text;				// Text data
-
-
-  // If this is just a selection change, just unselect the style buffer...
-  if (nInserted == 0 && nDeleted == 0) {
-    stylebuf->unselect();
-    return;
-  }
-
-  // Track changes in the text buffer...
-  if (nInserted > 0) {
-    // Insert characters into the style buffer...
-    style = new char[nInserted + 1];
-    memset(style, 'A', nInserted);
-    style[nInserted] = '\0';
-
-    stylebuf->replace(pos, pos + nDeleted, style);
-    delete[] style;
-  } else {
-    // Just delete characters in the style buffer...
-    stylebuf->remove(pos, pos + nDeleted);
-  }
-
-  // Select the area that was just updated to avoid unnecessary
-  // callbacks...
-  stylebuf->select(pos, pos + nInserted - nDeleted);
-
-  // Re-parse the changed region; we do this by parsing from the
-  // beginning of the previous line of the changed region to the end of
-  // the line of the changed region...  Then we check the last
-  // style character and keep updating if we have a multi-line
-  // comment character...
-  start = textbuf->line_start(pos);
-//  if (start > 0) start = textbuf->line_start(start - 1);
-  end   = textbuf->line_end(pos + nInserted);
-  text  = textbuf->text_range(start, end);
-  style = stylebuf->text_range(start, end);
-  if (start==end)
-    last = 0;
-  else
-    last  = style[end - start - 1];
-
-//  printf("start = %d, end = %d, text = \"%s\", style = \"%s\", last='%c'...\n",
-//         start, end, text, style, last);
-
-  style_parse(text, style, end - start);
-
-//  printf("new style = \"%s\", new last='%c'...\n",
-//         style, style[end - start - 1]);
-
-  stylebuf->replace(start, end, style);
-  ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
-
-  if (start==end || last != style[end - start - 1]) {
-//    printf("Recalculate the rest of the buffer style\n");
-    // Either the user deleted some text, or the last character
-    // on the line changed styles, so reparse the
-    // remainder of the buffer...
-    free(text);
-    free(style);
-
-    end   = textbuf->length();
-    text  = textbuf->text_range(start, end);
-    style = stylebuf->text_range(start, end);
-
-    style_parse(text, style, end - start);
-
-    stylebuf->replace(start, end, style);
-    ((Fl_Text_Editor *)cbArg)->redisplay_range(start, end);
-  }
-
-  free(text);
-  free(style);
-}
-
-// Editor window functions and class...
-void save_cb();
-void saveas_cb();
-void find2_cb(Fl_Widget*, void*);
-void replall_cb(Fl_Widget*, void*);
-void replace2_cb(Fl_Widget*, void*);
-void replcan_cb(Fl_Widget*, void*);
-
-class EditorWindow : public Fl_Double_Window {
-  public:
-    EditorWindow(int w, int h, const char* t);
-    ~EditorWindow();
-
-    Fl_Window          *replace_dlg;
-    Fl_Input           *replace_find;
-    Fl_Input           *replace_with;
-    Fl_Button          *replace_all;
-    Fl_Return_Button   *replace_next;
-    Fl_Button          *replace_cancel;
-
-#ifdef DEV_TEST
-
-    Fl_Button		*plus;		// increase width
-    Fl_Button		*minus;		// decrease width
-    Fl_Button		*vscroll;	// toggle vert. scrollbar left/right
-    Fl_Button		*hscroll;	// toggle hor.  scrollbar top/bottom
-    Fl_Button		*lnum;		// toggle line number display
-    Fl_Button		*wrap;		// toggle wrap mode
-
-#endif // DEV_TEST
-
-    int			wrap_mode;
-    int			line_numbers;
-
-    Fl_Text_Editor     *editor;
-    char               search[256];
-};
-
-EditorWindow::EditorWindow(int w, int h, const char* t) : Fl_Double_Window(w, h, t) {
-  replace_dlg = new Fl_Window(300, 105, "Replace");
-    replace_find = new Fl_Input(80, 10, 210, 25, "Find:");
-    replace_find->align(FL_ALIGN_LEFT);
-
-    replace_with = new Fl_Input(80, 40, 210, 25, "Replace:");
-    replace_with->align(FL_ALIGN_LEFT);
-
-    replace_all = new Fl_Button(10, 70, 90, 25, "Replace All");
-    replace_all->callback((Fl_Callback *)replall_cb, this);
-
-    replace_next = new Fl_Return_Button(105, 70, 120, 25, "Replace Next");
-    replace_next->callback((Fl_Callback *)replace2_cb, this);
-
-    replace_cancel = new Fl_Button(230, 70, 60, 25, "Cancel");
-    replace_cancel->callback((Fl_Callback *)replcan_cb, this);
-  replace_dlg->end();
-  replace_dlg->set_non_modal();
-  editor = 0;
-  *search = (char)0;
-  wrap_mode = 0;
-  line_numbers = 0;
-}
-
-EditorWindow::~EditorWindow() {
-  delete replace_dlg;
-}
-
-#ifdef DEV_TEST
-
-void resize_cb(Fl_Widget *b, void *v) {
-  Fl_Window *w = b->window();
-  int dw = (int)(long)v;
-
-  const int fac = 16;	// factor
-  const int num = 1;	// loop count
-
-  dw *= fac;
-
-  for (int i=0; i<num; i++) {
-    w->resize(w->x(), w->y(), w->w()+dw, w->h());
-  }
-}
-
-void scroll_cb(Fl_Widget *b, void *v) {
-  EditorWindow *ew = (EditorWindow*)b->parent();
-  Fl_Text_Editor *ed = ew->editor;
-  int n = (int)(long)v;
-  int align = ed->scrollbar_align();
-
-  switch(n) {
-    case 1:			// vscroll
-      if (align & FL_ALIGN_LEFT) {
-	align &= ~FL_ALIGN_LEFT;
-	align |= FL_ALIGN_RIGHT;
-      } else {
-	align &= ~FL_ALIGN_RIGHT;
-	align |= FL_ALIGN_LEFT;
-      }
-      break;
-    case 2:			// hscroll
-      if (align & FL_ALIGN_TOP) {
-	align &= ~FL_ALIGN_TOP;
-	align |= FL_ALIGN_BOTTOM;
-      } else {
-	align &= ~FL_ALIGN_BOTTOM;
-	align |= FL_ALIGN_TOP;
-      }
-      break;
-    default:
-      break;
-  }
-  ed->scrollbar_align(align);
-  ed->resize(ed->x(),ed->y(),ed->w(),ed->h());
-  ed->redraw();
-}
-
-void wrap_cb(Fl_Widget *w, void* v) {
-  EditorWindow* ew = (EditorWindow*)v;
-  Fl_Text_Editor *ed = (Fl_Text_Editor*)ew->editor;
-  ew->wrap_mode = 1 - ew->wrap_mode;
-  if (ew->wrap_mode)
-    ed->wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0);
-  else
-    ed->wrap_mode(Fl_Text_Display::WRAP_NONE, 0);
-  ew->redraw();
-}
-
-void lnum_cb(Fl_Widget *w, void* v) {
-  EditorWindow* ew = (EditorWindow*)v;
-  Fl_Text_Editor *ed = (Fl_Text_Editor*)ew->editor;
-  ew->line_numbers = 1 - ew->line_numbers;
-  if (ew->line_numbers) {
-    ed->linenumber_width(line_num_width);	// enable
-    ed->linenumber_size(ed->textsize());
-  } else {
-    ed->linenumber_width(0);			// disable
-  }
-  ew->redraw();
-}
-
-#endif // DEV_TEST
-
-int check_save(void) {
-  if (!changed) return 1;
-
-  int r = fl_choice("The current file has not been saved.\n"
-                    "Would you like to save it now?",
-                    "Cancel", "Save", "Don't Save");
-
-  if (r == 1) {
-    save_cb(); // Save the file...
-    return !changed;
-  }
-
-  return (r == 2) ? 1 : 0;
-}
-
-int loading = 0;
-void load_file(const char *newfile, int ipos) {
-  loading = 1;
-  int insert = (ipos != -1);
-  changed = insert;
-  if (!insert) strcpy(filename, "");
-  int r;
-  if (!insert) r = textbuf->loadfile(newfile);
-  else r = textbuf->insertfile(newfile, ipos);
-  changed = changed || textbuf->input_file_was_transcoded;
-  if (r)
-    fl_alert("Error reading from file \'%s\':\n%s.", newfile, strerror(errno));
-  else
-    if (!insert) strcpy(filename, newfile);
-  loading = 0;
-  textbuf->call_modify_callbacks();
-}
-
-void save_file(const char *newfile) {
-  if (textbuf->savefile(newfile))
-    fl_alert("Error writing to file \'%s\':\n%s.", newfile, strerror(errno));
-  else
-    strcpy(filename, newfile);
-  changed = 0;
-  textbuf->call_modify_callbacks();
-}
-
-void copy_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_copy(0, e->editor);
-}
-
-void cut_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_cut(0, e->editor);
-}
-
-void delete_cb(Fl_Widget*, void*) {
-  textbuf->remove_selection();
-}
-
-void linenumbers_cb(Fl_Widget *w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Menu_Bar* m = (Fl_Menu_Bar*)w;
-  const Fl_Menu_Item* i = m->mvalue();
-  if ( i->value() ) {
-    e->editor->linenumber_width(line_num_width);	// enable
-    e->editor->linenumber_size(e->editor->textsize());
-  } else {
-    e->editor->linenumber_width(0);	// disable
-  }
-  e->line_numbers = (i->value()?1:0);
-  e->redraw();
-}
-
-void wordwrap_cb(Fl_Widget *w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Menu_Bar* m = (Fl_Menu_Bar*)w;
-  const Fl_Menu_Item* i = m->mvalue();
-  if ( i->value() )
-    e->editor->wrap_mode(Fl_Text_Display::WRAP_AT_BOUNDS, 0);
-  else
-    e->editor->wrap_mode(Fl_Text_Display::WRAP_NONE, 0);
-  e->wrap_mode = (i->value()?1:0);
-  e->redraw();
-}
-
-void find_cb(Fl_Widget* w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *val;
-
-  val = fl_input("Search String:", e->search);
-  if (val != NULL) {
-    // User entered a string - go find it!
-    strcpy(e->search, val);
-    find2_cb(w, v);
-  }
-}
-
-void find2_cb(Fl_Widget* w, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  if (e->search[0] == '\0') {
-    // Search string is blank; get a new one...
-    find_cb(w, v);
-    return;
-  }
-
-  int pos = e->editor->insert_position();
-  int found = textbuf->search_forward(pos, e->search, &pos);
-  if (found) {
-    // Found a match; select and update the position...
-    textbuf->select(pos, pos+strlen(e->search));
-    e->editor->insert_position(pos+strlen(e->search));
-    e->editor->show_insert_position();
-  }
-  else fl_alert("No occurrences of \'%s\' found!", e->search);
-}
-
-void set_title(Fl_Window* w) {
-  if (filename[0] == '\0') strcpy(title, "Untitled");
-  else {
-    char *slash;
-    slash = strrchr(filename, '/');
-#ifdef WIN32
-    if (slash == NULL) slash = strrchr(filename, '\\');
-#endif
-    if (slash != NULL) strcpy(title, slash + 1);
-    else strcpy(title, filename);
-  }
-
-  if (changed) strcat(title, " (modified)");
-
-  w->label(title);
-}
-
-void changed_cb(int, int nInserted, int nDeleted,int, const char*, void* v) {
-  if ((nInserted || nDeleted) && !loading) changed = 1;
-  EditorWindow *w = (EditorWindow *)v;
-  set_title(w);
-  if (loading) w->editor->show_insert_position();
-}
-
-void new_cb(Fl_Widget*, void*) {
-  if (!check_save()) return;
-
-  filename[0] = '\0';
-  textbuf->select(0, textbuf->length());
-  textbuf->remove_selection();
-  changed = 0;
-  textbuf->call_modify_callbacks();
-}
-
-void open_cb(Fl_Widget*, void*) {
-  if (!check_save()) return;
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title("Open file");
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
-  if ( fnfc.show() ) return;
-  load_file(fnfc.filename(), -1);
-
-}
-
-void insert_cb(Fl_Widget*, void *v) {
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title("Insert file");
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_FILE);
-  if ( fnfc.show() ) return;
-  EditorWindow *w = (EditorWindow *)v;
-  load_file(fnfc.filename(), w->editor->insert_position());
-}
-
-void paste_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  Fl_Text_Editor::kf_paste(0, e->editor);
-}
-
-int num_windows = 0;
-
-void close_cb(Fl_Widget*, void* v) {
-  EditorWindow* w = (EditorWindow*)v;
-
-  if (num_windows == 1) {
-    if (!check_save())
-      return;
-  }
-
-  w->hide();
-  w->editor->buffer(0);
-  textbuf->remove_modify_callback(style_update, w->editor);
-  textbuf->remove_modify_callback(changed_cb, w);
-  Fl::delete_widget(w);
-
-  num_windows--;
-  if (!num_windows) exit(0);
-}
-
-void quit_cb(Fl_Widget*, void*) {
-  if (changed && !check_save())
-    return;
-
-  exit(0);
-}
-
-void replace_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  e->replace_dlg->show();
-}
-
-void replace2_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *find = e->replace_find->value();
-  const char *replace = e->replace_with->value();
-
-  if (find[0] == '\0') {
-    // Search string is blank; get a new one...
-    e->replace_dlg->show();
-    return;
-  }
-
-  e->replace_dlg->hide();
-
-  int pos = e->editor->insert_position();
-  int found = textbuf->search_forward(pos, find, &pos);
-
-  if (found) {
-    // Found a match; update the position and replace text...
-    textbuf->select(pos, pos+strlen(find));
-    textbuf->remove_selection();
-    textbuf->insert(pos, replace);
-    textbuf->select(pos, pos+strlen(replace));
-    e->editor->insert_position(pos+strlen(replace));
-    e->editor->show_insert_position();
-  }
-  else fl_alert("No occurrences of \'%s\' found!", find);
-}
-
-void replall_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  const char *find = e->replace_find->value();
-  const char *replace = e->replace_with->value();
-
-  find = e->replace_find->value();
-  if (find[0] == '\0') {
-    // Search string is blank; get a new one...
-    e->replace_dlg->show();
-    return;
-  }
-
-  e->replace_dlg->hide();
-
-  e->editor->insert_position(0);
-  int times = 0;
-
-  // Loop through the whole string
-  for (int found = 1; found;) {
-    int pos = e->editor->insert_position();
-    found = textbuf->search_forward(pos, find, &pos);
-
-    if (found) {
-      // Found a match; update the position and replace text...
-      textbuf->select(pos, pos+strlen(find));
-      textbuf->remove_selection();
-      textbuf->insert(pos, replace);
-      e->editor->insert_position(pos+strlen(replace));
-      e->editor->show_insert_position();
-      times++;
-    }
-  }
-
-  if (times) fl_message("Replaced %d occurrences.", times);
-  else fl_alert("No occurrences of \'%s\' found!", find);
-}
-
-void replcan_cb(Fl_Widget*, void* v) {
-  EditorWindow* e = (EditorWindow*)v;
-  e->replace_dlg->hide();
-}
-
-void save_cb() {
-  if (filename[0] == '\0') {
-    // No filename - get one!
-    saveas_cb();
-    return;
-  }
-  else save_file(filename);
-}
-
-void saveas_cb() {
-  Fl_Native_File_Chooser fnfc;
-  fnfc.title("Save File As?");
-  fnfc.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
-  if ( fnfc.show() ) return;
-  save_file(fnfc.filename());
-}
-
-Fl_Window* new_view();
-
-void view_cb(Fl_Widget*, void*) {
-  Fl_Window* w = new_view();
-  w->show();
-}
-
-Fl_Menu_Item menuitems[] = {
-  { "&File",              0, 0, 0, FL_SUBMENU },
-    { "&New File",        0, (Fl_Callback *)new_cb },
-    { "&Open File...",    FL_COMMAND + 'o', (Fl_Callback *)open_cb },
-    { "&Insert File...",  FL_COMMAND + 'i', (Fl_Callback *)insert_cb, 0, FL_MENU_DIVIDER },
-    { "&Save File",       FL_COMMAND + 's', (Fl_Callback *)save_cb },
-    { "Save File &As...", FL_COMMAND + FL_SHIFT + 's', (Fl_Callback *)saveas_cb, 0, FL_MENU_DIVIDER },
-    { "New &View",        FL_ALT
-#ifdef __APPLE__
-      + FL_COMMAND
-#endif
-      + 'v', (Fl_Callback *)view_cb, 0 },
-    { "&Close View",      FL_COMMAND + 'w', (Fl_Callback *)close_cb, 0, FL_MENU_DIVIDER },
-    { "E&xit",            FL_COMMAND + 'q', (Fl_Callback *)quit_cb, 0 },
-    { 0 },
-
-  { "&Edit", 0, 0, 0, FL_SUBMENU },
-    { "Cu&t",             FL_COMMAND + 'x', (Fl_Callback *)cut_cb },
-    { "&Copy",            FL_COMMAND + 'c', (Fl_Callback *)copy_cb },
-    { "&Paste",           FL_COMMAND + 'v', (Fl_Callback *)paste_cb },
-    { "&Delete",          0, (Fl_Callback *)delete_cb },
-    { "Preferences",      0, 0, 0, FL_SUBMENU },
-      { "Line Numbers",   FL_COMMAND + 'l', (Fl_Callback *)linenumbers_cb, 0, FL_MENU_TOGGLE },
-      { "Word Wrap",      0,                (Fl_Callback *)wordwrap_cb, 0, FL_MENU_TOGGLE },
-      { 0 },
-    { 0 },
-
-  { "&Search", 0, 0, 0, FL_SUBMENU },
-    { "&Find...",         FL_COMMAND + 'f', (Fl_Callback *)find_cb },
-    { "F&ind Again",      FL_COMMAND + 'g', find2_cb },
-    { "&Replace...",      FL_COMMAND + 'r', replace_cb },
-    { "Re&place Again",   FL_COMMAND + 't', replace2_cb },
-    { 0 },
-
-  { 0 }
-};
-
-Fl_Window* new_view() {
-#ifdef DEV_TEST
-  EditorWindow* w = new EditorWindow(660, 500, title);
-#else
-  EditorWindow* w = new EditorWindow(660, 400, title);
-#endif // DEV_TEST
-
-    w->begin();
-    Fl_Menu_Bar* m = new Fl_Menu_Bar(0, 0, 660, 30);
-    m->copy(menuitems, w);
-    w->editor = new Fl_Text_Editor(0, 30, 660, 370);
-    w->editor->textfont(FL_COURIER);
-    w->editor->textsize(TS);
-  //w->editor->wrap_mode(Fl_Text_Editor::WRAP_AT_BOUNDS, 250);
-    w->editor->buffer(textbuf);
-    w->editor->highlight_data(stylebuf, styletable,
-                              sizeof(styletable) / sizeof(styletable[0]),
-			      'A', style_unfinished_cb, 0);
-
-#ifdef DEV_TEST
-
-    w->minus = new Fl_Button(60, 410, 120, 30, "&-");
-    w->minus->labelsize(20);
-    w->minus->labelfont(FL_BOLD);
-    w->minus->callback(resize_cb,(void *)(-1));
-
-    w->plus = new Fl_Button(60, 450, 120, 30, "&+");
-    w->plus->labelsize(20);
-    w->plus->labelfont(FL_BOLD);
-    w->plus->callback(resize_cb,(void *)1);
-
-    w->vscroll = new Fl_Button(220, 410, 120, 30, "&vscroll");
-    w->vscroll->labelsize(16);
-    w->vscroll->callback(scroll_cb,(void *)1);
-
-    w->hscroll = new Fl_Button(220, 450, 120, 30, "&hscroll");
-    w->hscroll->labelsize(16);
-    w->hscroll->callback(scroll_cb,(void *)2);
-
-    w->lnum = new Fl_Button(380, 410, 120, 30, "&line #");
-    w->lnum->labelsize(16);
-    w->lnum->callback(lnum_cb,(void *)w);
-
-    w->wrap = new Fl_Button(380, 450, 120, 30, "&wrap");
-    w->wrap->labelsize(16);
-    w->wrap->callback(wrap_cb,(void *)w);
-
-#endif // DEV_TEST
-
-  w->end();
-  w->resizable(w->editor);
-  w->size_range(300,200);
-  w->callback((Fl_Callback *)close_cb, w);
-
-  textbuf->add_modify_callback(style_update, w->editor);
-  textbuf->add_modify_callback(changed_cb, w);
-  textbuf->call_modify_callbacks();
-  num_windows++;
-  return w;
-}
-
-void cb(const char *fname) {
-  load_file(fname, -1);
-}
-
-int main(int argc, char **argv) {
-  textbuf = new Fl_Text_Buffer;
-//textbuf->transcoding_warning_action = NULL;
-  style_init();
-  fl_open_callback(cb);
-
-  Fl_Window* window = new_view();
-
-  window->show(1, argv);
-#ifndef __APPLE__
-  if (argc > 1) load_file(argv[1], -1);
-#endif
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/fast_slow.fl
+++ /dev/null
@@ -1,37 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {} {open
-} {
-  Fl_Window {} {open
-    xywh {397 202 318 443} type Double hide resizable
-  } {
-    Fl_Slider control {
-      label {move
-this}
-      callback {fast->value(o->value());
-if (!Fl::pushed()) slow->value(o->value());}
-      xywh {90 200 30 200}
-      code0 {o->when(FL_WHEN_CHANGED|FL_WHEN_RELEASE|FL_WHEN_NOT_CHANGED);}
-    }
-    Fl_Slider fast {
-      label {fast
-redraw} selected
-      xywh {140 200 30 200}
-      code0 {o->set_output();}
-    }
-    Fl_Slider slow {
-      label {slow
-redraw} selected
-      xywh {190 200 30 200}
-      code0 {o->set_output();}
-    }
-    Fl_Box {} {
-      label {The left slider has changed( FL_WHEN_CHANGED | FL_WHEN_RELEASE | FL_WHEN_NOT_CHANGED) so it produces a callback on both drag and release mouse events.
-The middle slider (representing a widget with low overhead) is changed on every mouse movement.
-The right slider (representing a widget with high overhead) is only updated when the mouse is released, by checking if Fl::pushed() is zero.}
-      xywh {10 10 300 180} box DOWN_BOX color 53 selection_color 47 labelfont 4 labelsize 12 align 148
-    }
-  }
-}
--- a/DoConfig/fltk/test/file_chooser.cxx
+++ /dev/null
@@ -1,381 +1,0 @@
-//
-// "$Id$"
-//
-// File chooser test program.
-//
-// Copyright 1999-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   main()           - Create a file chooser and wait for a selection to
-//                      be made.
-//   close_callback() - Close the main window...
-//   fc_callback()    - Handle choices in the file chooser...
-//   pdf_check()      - Check for and load the first page of a PDF file.
-//   ps_check()       - Check for and load the first page of a PostScript
-//                      file.
-//   show_callback()  - Show the file chooser...
-//
-//   extra_callback() - circle extra groups (none,group1,check_button);
-//
-
-//
-// Include necessary headers...
-//
-
-#include <stdio.h>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/Fl_File_Icon.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_PNM_Image.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Double_Window.H>
-#include <string.h>
-
-
-//
-// Globals...
-//
-
-Fl_Input		*filter;
-Fl_File_Browser		*files;
-Fl_File_Chooser		*fc;
-Fl_Shared_Image		*image = 0;
-
-// for choosing extra groups
-Fl_Choice *ch_extra;
-// first extra group
-Fl_Group *encodings = (Fl_Group*)0;
-Fl_Choice *ch_enc;
-// second extra widget
-Fl_Check_Button *version = (Fl_Check_Button*)0;
-
-//
-// Functions...
-//
-
-void		close_callback(void);
-void		create_callback(void);
-void		dir_callback(void);
-void		fc_callback(Fl_File_Chooser *, void *);
-void		multi_callback(void);
-Fl_Image	*pdf_check(const char *, uchar *, int);
-Fl_Image	*ps_check(const char *, uchar *, int);
-void		show_callback(void);
-
-void		extra_callback(Fl_Choice*,void*);
-
-//
-// 'main()' - Create a file chooser and wait for a selection to be made.
-//
-
-int			// O - Exit status
-main(int  argc,		// I - Number of command-line arguments
-     char *argv[])	// I - Command-line arguments
-{
-  Fl_Double_Window	*window;// Main window
-  Fl_Button		*button;// Buttons
-  Fl_File_Icon		*icon;	// New file icon
-
-
-  // Make the file chooser...
-  Fl::scheme(NULL);
-  Fl_File_Icon::load_system_icons();
-
-  fc = new Fl_File_Chooser(".", "*", Fl_File_Chooser::SINGLE, "Fl_File_Chooser Test");
-  fc->callback(fc_callback);
-
-  // Register the PS and PDF image types...
-  Fl_Shared_Image::add_handler(pdf_check);
-  Fl_Shared_Image::add_handler(ps_check);
-
-  // Make the main window...
-  window = new Fl_Double_Window(400, 215, "File Chooser Test");
-
-  filter = new Fl_Input(50, 10, 315, 25, "Filter:");
-  int argn = 1;
-#ifdef __APPLE__
-  // OS X may add the process number as the first argument - ignore
-  if (argc>argn && strncmp(argv[1], "-psn_", 5)==0)
-    argn++;
-#endif
-  if (argc > argn)
-    filter->value(argv[argn]);
-  else
-    filter->value("PDF Files (*.pdf)\t"
-                  "PostScript Files (*.ps)\t"
-		  "Image Files (*.{bmp,gif,jpg,png})\t"
-		  "C/C++ Source Files (*.{c,C,cc,cpp,cxx})");
-
-  button = new Fl_Button(365, 10, 25, 25);
-  button->labelcolor(FL_YELLOW);
-  button->callback((Fl_Callback *)show_callback);
-
-  icon   = Fl_File_Icon::find(".", Fl_File_Icon::DIRECTORY);
-  icon->label(button);
-
-  button = new Fl_Light_Button(50, 45, 80, 25, "MULTI");
-  button->callback((Fl_Callback *)multi_callback);
-
-  button = new Fl_Light_Button(140, 45, 90, 25, "CREATE");
-  button->callback((Fl_Callback *)create_callback);
-
-  button = new Fl_Light_Button(240, 45, 115, 25, "DIRECTORY");
-  button->callback((Fl_Callback *)dir_callback);
-
-  //
-  ch_extra = new Fl_Choice(150, 75, 150, 25, "Extra Group:");
-  ch_extra->add("none|encodings group|check button");
-  ch_extra->value(0);
-  ch_extra->callback((Fl_Callback *)extra_callback);
-  //
-  files = new Fl_File_Browser(50, 105, 340, 75, "Files:");
-  files->align(FL_ALIGN_LEFT);
-
-  button = new Fl_Button(340, 185, 50, 25, "Close");
-  button->callback((Fl_Callback *)close_callback);
-
-  window->resizable(files);
-  window->end();
-  window->show(1, argv);
-
-  Fl::run();
-
-  return (0);
-}
-
-
-void
-extra_callback(Fl_Choice*w,void*)
-{
-  int val=w->value();
-  if (0 == val) fc->add_extra(NULL);
-  else if (1 == val) {
-    if(!encodings){
-      encodings=new Fl_Group(0,0,254,30);
-      ch_enc=new Fl_Choice(152,2,100,25,"Choose Encoding:");
-      ch_enc->add("ASCII|Koi8-r|win1251|Utf-8");
-      encodings->end();
-    }
-    fc->add_extra(encodings);
-  } else {
-    if (!version) {
-      version = new Fl_Check_Button(5,0,200,25,"Save binary 1.0 version");
-    }
-    fc->add_extra(version);
-  }
-}
-
-
-//
-// 'close_callback()' - Close the main window...
-//
-
-void
-close_callback(void)
-{
-  exit(0);
-}
-
-
-//
-// 'create_callback()' - Handle clicks on the create button.
-//
-
-void
-create_callback(void)
-{
-  fc->type(fc->type() ^ Fl_File_Chooser::CREATE);
-}
-
-
-//
-// 'dir_callback()' - Handle clicks on the directory button.
-//
-
-void
-dir_callback(void)
-{
-  fc->type(fc->type() ^ Fl_File_Chooser::DIRECTORY);
-}
-
-
-//
-// 'fc_callback()' - Handle choices in the file chooser...
-//
-
-void
-fc_callback(Fl_File_Chooser *fc,	// I - File chooser
-            void            *data)	// I - Data
-{
-  const char		*filename;	// Current filename
-
-
-  printf("fc_callback(fc = %p, data = %p)\n", fc, data);
-
-  filename = fc->value();
-
-  printf("    filename = \"%s\"\n", filename ? filename : "(null)");
-}
-
-
-//
-// 'multi_callback()' - Handle clicks on the multi button.
-//
-
-void
-multi_callback(void)
-{
-  fc->type(fc->type() ^ Fl_File_Chooser::MULTI);
-}
-
-
-//
-// 'pdf_check()' - Check for and load the first page of a PDF file.
-//
-
-Fl_Image *			// O - Page image or NULL
-pdf_check(const char *name,	// I - Name of file
-          uchar      *header,	// I - Header data
-	  int)			// I - Length of header data (unused)
-{
-  const char	*home;		// Home directory
-  char		preview[FL_PATH_MAX],	// Preview filename
-		command[FL_PATH_MAX];	// Command
-
-
-  if (memcmp(header, "%PDF", 4) != 0)
-    return 0;
-
-  home = getenv("HOME");
-  sprintf(preview, "%s/.preview.ppm", home ? home : "");
-
-  sprintf(command,
-          "gs -r100 -dFIXED -sDEVICE=ppmraw -dQUIET -dNOPAUSE -dBATCH "
-	  "-sstdout=\"%%stderr\" -sOUTPUTFILE=\'%s\' "
-	  "-dFirstPage=1 -dLastPage=1 \'%s\' 2>/dev/null", preview, name);
-
-  if (system(command)) return 0;
-
-  return new Fl_PNM_Image(preview);
-}
-
-
-//
-// 'ps_check()' - Check for and load the first page of a PostScript file.
-//
-
-Fl_Image *			// O - Page image or NULL
-ps_check(const char *name,	// I - Name of file
-         uchar      *header,	// I - Header data
-	 int)			// I - Length of header data (unused)
-{
-  const char	*home;		// Home directory
-  char		preview[FL_PATH_MAX],	// Preview filename
-		outname[FL_PATH_MAX],	// Preview PS file
-		command[FL_PATH_MAX];	// Command
-  FILE		*in,		// Input file
-		*out;		// Output file
-  int		page;		// Current page
-  char		line[256];	// Line from file
-
-
-  if (memcmp(header, "%!", 2) != 0)
-    return 0;
-
-  home = getenv("HOME");
-  sprintf(preview, "%s/.preview.ppm", home ? home : "");
-
-  if (memcmp(header, "%!PS", 4) == 0) {
-    // PS file has DSC comments; extract the first page...
-    sprintf(outname, "%s/.preview.ps", home ? home : "");
-
-    if (strcmp(name, outname) != 0) {
-      in   = fl_fopen(name, "rb");
-      out  = fl_fopen(outname, "wb");
-      page = 0;
-
-      while (fgets(line, sizeof(line), in) != NULL) {
-	if (strncmp(line, "%%Page:", 7) == 0) {
-          page ++;
-	  if (page > 1) break;
-	}
-
-	fputs(line, out);
-      }
-
-      fclose(in);
-      fclose(out);
-    }
-  } else {
-    // PS file doesn't have DSC comments; do the whole file...
-    strncpy(outname, name, sizeof(outname) - 1);
-    outname[sizeof(outname) - 1] = '\0';
-  }
-
-  sprintf(command,
-          "gs -r100 -dFIXED -sDEVICE=ppmraw -dQUIET -dNOPAUSE -dBATCH "
-	  "-sstdout=\"%%stderr\" -sOUTPUTFILE=\'%s\' \'%s\' 2>/dev/null",
-	  preview, outname);
-
-  if (system(command)) return 0;
-
-  return new Fl_PNM_Image(preview);
-}
-
-
-//
-// 'show_callback()' - Show the file chooser...
-//
-
-void
-show_callback(void)
-{
-  int	i;			// Looping var
-  int	count;			// Number of files selected
-  char	relative[FL_PATH_MAX];	// Relative filename
-
-
-  if (filter->value()[0])
-    fc->filter(filter->value());
-
-  fc->show();
-
-  while (fc->visible()) {
-    Fl::wait();
-  }
-
-  count = fc->count();
-  if (count > 0)
-  {
-    files->clear();
-
-    for (i = 1; i <= count; i ++)
-    {
-      if (!fc->value(i))
-        break;
-
-      fl_filename_relative(relative, sizeof(relative), fc->value(i));
-
-      files->add(relative,
-                 Fl_File_Icon::find(fc->value(i), Fl_File_Icon::PLAIN));
-    }
-
-    files->redraw();
-  }
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/fonts.cxx
+++ /dev/null
@@ -1,199 +1,0 @@
-//
-// "$Id$"
-//
-// Font demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Box.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-Fl_Double_Window *form;
-Fl_Tile *tile;
-
-class FontDisplay : public Fl_Widget {
-  void draw();
-public:
-  int font, size;
-  FontDisplay(Fl_Boxtype B, int X, int Y, int W, int H, const char* L = 0) :
-    Fl_Widget(X,Y,W,H,L) {box(B); font = 0; size = 14;}
-};
-void FontDisplay::draw() {
-  draw_box();
-  fl_font((Fl_Font)font, size);
-  fl_color(FL_BLACK);
-  fl_draw(label(), x()+3, y()+3, w()-6, h()-6, align());
-}
-
-FontDisplay *textobj;
-
-Fl_Hold_Browser *fontobj, *sizeobj;
-
-int **sizes;
-int *numsizes;
-int pickedsize = 14;
-
-void font_cb(Fl_Widget *, long) {
-  int fn = fontobj->value();
-  if (!fn) return;
-  fn--;
-  textobj->font = fn;
-  sizeobj->clear();
-  int n = numsizes[fn];
-  int *s = sizes[fn];
-  if (!n) {
-    // no sizes
-  } else if (s[0] == 0) {
-    // many sizes;
-    int j = 1;
-    for (int i = 1; i<64 || i<s[n-1]; i++) {
-      char buf[20];
-      if (j < n && i==s[j]) {sprintf(buf,"@b%d",i); j++;}
-      else sprintf(buf,"%d",i);
-      sizeobj->add(buf);
-    }
-    sizeobj->value(pickedsize);
-  } else {
-    // some sizes
-    int w = 0;
-    for (int i = 0; i < n; i++) {
-      if (s[i]<=pickedsize) w = i;
-      char buf[20];
-      sprintf(buf,"@b%d",s[i]);
-      sizeobj->add(buf);
-    }
-    sizeobj->value(w+1);
-  }
-  textobj->redraw();
-}
-
-void size_cb(Fl_Widget *, long) {
-  int i = sizeobj->value();
-  if (!i) return;
-  const char *c = sizeobj->text(i);
-  while (*c < '0' || *c > '9') c++;
-  pickedsize = atoi(c);
-  textobj->size = pickedsize;
-  textobj->redraw();
-}
-
-char label[0x1000];
-
-void create_the_forms() {
-  // create the sample string
-  int n = 0;
-  strcpy(label, "Hello, world!\n");
-  int i = strlen(label);
-  ulong c;
-  for (c = ' '+1; c < 127; c++) {
-    if (!(c&0x1f)) label[i++]='\n';
-    if (c=='@') label[i++]=c;
-    label[i++]=c;
-  }
-  label[i++] = '\n';
-  for (c = 0xA1; c < 0x600; c += 9) {
-    if (!(++n&(0x1f))) label[i++]='\n';
-    i += fl_utf8encode((unsigned int)c, label + i);
-  }
-  label[i] = 0;
-
-  // create the basic layout
-  form = new Fl_Double_Window(550,370);
-
-  tile = new Fl_Tile(0, 0, 550, 370);
-
-  Fl_Group *textgroup = new Fl_Group(0, 0, 550, 185);
-  textgroup->box(FL_FLAT_BOX);
-  textobj = new FontDisplay(FL_FRAME_BOX,10,10,530,170,label);
-  textobj->align(FL_ALIGN_TOP|FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
-  textobj->color(9,47);
-  textgroup->resizable(textobj);
-  textgroup->end();
-
-  Fl_Group *fontgroup = new Fl_Group(0, 185, 550, 185);
-  fontgroup->box(FL_FLAT_BOX);
-  fontobj = new Fl_Hold_Browser(10, 190, 390, 170);
-  fontobj->box(FL_FRAME_BOX);
-  fontobj->color(53,3);
-  fontobj->callback(font_cb);
-  sizeobj = new Fl_Hold_Browser(410, 190, 130, 170);
-  sizeobj->box(FL_FRAME_BOX);
-  sizeobj->color(53,3);
-  sizeobj->callback(size_cb);
-  fontgroup->resizable(fontobj);
-  fontgroup->end();
-
-  tile->end();
-
-  form->resizable(tile);
-  form->end();
-}
-
-#include <FL/fl_ask.H>
-
-int main(int argc, char **argv) {
-  Fl::scheme(NULL);
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-  create_the_forms();
-
-// For the Unicode test, get all fonts...
-//#ifdef __APPLE__
-  int i = 0;
-//#else
-//  int i = fl_choice("Which fonts:","-*","iso8859","All");
-//#endif
-  int k = Fl::set_fonts(i ? (i>1 ? "*" : 0) : "-*");
-  sizes = new int*[k];
-  numsizes = new int[k];
-  for (i = 0; i < k; i++) {
-    int t; const char *name = Fl::get_font_name((Fl_Font)i,&t);
-    char buffer[128];
-#if 1
-    if (t) {
-      char *p = buffer;
-      if (t & FL_BOLD) {*p++ = '@'; *p++ = 'b';}
-      if (t & FL_ITALIC) {*p++ = '@'; *p++ = 'i';}
-	  *p++ = '@'; *p++ = '.'; // Suppress subsequent formatting - some MS fonts have '@' in their name
-      strcpy(p,name);
-      name = buffer;
-    }
-#else // this is neat, but really slow on some X servers:
-    sprintf(buffer, "@F%d@.%s", i, name);
-    name = buffer;
-#endif
-    fontobj->add(name);
-    int *s; int n = Fl::get_font_sizes((Fl_Font)i, s);
-    numsizes[i] = n;
-    if (n) {
-      sizes[i] = new int[n];
-      for (int j=0; j<n; j++) sizes[i][j] = s[j];
-    }
-  }
-  fontobj->value(1);
-  font_cb(fontobj,0);
-  form->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/forms.cxx
+++ /dev/null
@@ -1,193 +1,0 @@
-//
-// "$Id$"
-//
-// Another forms demo for the Fast Light Tool Kit (FLTK).
-//
-// This is an XForms program with some changes for FLTK.
-//
-// This demo show the different boxtypes. Note that some
-// boxtypes are not appropriate for some objects
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/forms.H> // changed for fltk
-
-static int border = 1; // changed from FL_TRANSIENT for fltk
-// (this is so the close box and Esc work to close the window)
-
-typedef struct { Fl_Boxtype val; const char *name; } VN_struct;
-
-static VN_struct btypes[]=
-{
-   {FL_NO_BOX,"no box"},
-   {FL_UP_BOX, "up box"},
-   {FL_DOWN_BOX,"down box"},
-   {FL_BORDER_BOX,"border box"},
-   {FL_SHADOW_BOX,"shadow box"},
-   {FL_FLAT_BOX,"flat box"},
-   {FL_FRAME_BOX,"frame box"},
-   {FL_EMBOSSED_BOX,"embossed box"},
-   {FL_ROUNDED_BOX,"rounded box"},
-   {FL_RFLAT_BOX,"rflat box"},
-   {FL_RSHADOW_BOX,"rshadow box"}, // renamed for fltk
-   {FL_OVAL_BOX,"oval box"},
-   {FL_ROUNDED3D_UPBOX,"rounded3d upbox"},
-   {FL_ROUNDED3D_DOWNBOX,"rounded3d downbox"},
-   {FL_OVAL3D_UPBOX,"oval3d upbox"},
-   {FL_OVAL3D_DOWNBOX,"oval3d downbox"},
-   {FL_PLASTIC_UP_BOX,"plastic upbox"},
-   {FL_PLASTIC_DOWN_BOX,"plastic downbox"},
-   {FL_GTK_UP_BOX,"GTK up box"},
-   {FL_GTK_ROUND_UP_BOX,"GTK round up box"},
-   {FL_GLEAM_UP_BOX,"Gleam up box"},
-   /* sentinel */
-   {(Fl_Boxtype)(-1)}
-};
-
-#include "pixmaps/srs.xbm"
-
-/*************** Callback **********************/
-
-FL_FORM *form;
-Fl_Widget *tobj[18], *exitob, *btypeob, *modeob;
-
-void
-boxtype_cb (Fl_Widget * ob, long)
-{
-  int i, req_bt = fl_get_choice(ob) - 1;
-  static int lastbt = -1;
-
-  if(lastbt != req_bt)
-  {
-     fl_freeze_form (form);
-     fl_redraw_form (form);
-     for (i = 0; i < 18; i++)
-        fl_set_object_boxtype (tobj[i], btypes[req_bt].val);
-     fl_unfreeze_form (form);
-     lastbt = req_bt;
-     fl_redraw_form(form); // added for fltk
-  }
-}
-
-void
-mode_cb (Fl_Widget *, long) {
-  // empty
-}
-
-/*************** Creation Routines *********************/
-
-void
-create_form_form (void)
-{
-  Fl_Widget *obj;
-
-  form = fl_bgn_form(FL_NO_BOX, 720, 520);
-  obj = fl_add_box(FL_UP_BOX, 0, 0, 720, 520, "");
-  fl_set_object_color(obj, FL_BLUE, FL_COL1);
-  obj = fl_add_box(FL_DOWN_BOX, 10, 90, 700, 420, "");
-  fl_set_object_color(obj, FL_COL1, FL_COL1);
-  obj = fl_add_box(FL_DOWN_BOX, 10, 10, 700, 70, "");
-  fl_set_object_color(obj, FL_SLATEBLUE, FL_COL1);
-  tobj[0] = obj = fl_add_box(FL_UP_BOX, 30, 110, 110, 110, "Box");
-  tobj[1] = obj = fl_add_text(FL_NORMAL_TEXT, 30, 240, 110, 30, "Text");
-  tobj[2] = obj = fl_add_bitmap(FL_NORMAL_BITMAP, 40, 280, 90, 80, "Bitmap");
-  fl_set_object_lcol(obj, FL_BLUE);
-  tobj[3] = obj = fl_add_chart(FL_BAR_CHART, 160, 110, 160, 110, "Chart");
-  tobj[4] = obj = fl_add_clock(FL_ANALOG_CLOCK, 40, 390, 90, 90, "Clock");
-//fl_set_object_dblbuffer(tobj[4],1); // removed for fltk
-  tobj[5]=obj=fl_add_button(FL_NORMAL_BUTTON, 340, 110, 120, 30, "Button");
-  tobj[6]=obj=fl_add_lightbutton(FL_PUSH_BUTTON,340,150,120,30,"Lightbutton");
-  tobj[7]=obj=fl_add_roundbutton(FL_PUSH_BUTTON,340,190,120,30,"Roundbutton");
-  tobj[8]=obj=fl_add_slider(FL_VERT_SLIDER, 160, 250, 40, 230, "Slider");
-  tobj[9]=obj=fl_add_valslider(FL_VERT_SLIDER, 220, 250, 40, 230, "Valslider");
-  tobj[10]=obj=fl_add_dial (FL_LINE_DIAL, 280, 250, 100, 100, "Dial");
-  tobj[11]=obj=fl_add_positioner(FL_NORMAL_POSITIONER,280,380,150,100, "Positioner");
-  tobj[12]=obj=fl_add_counter (FL_NORMAL_COUNTER,480,110,210,30, "Counter");
-  tobj[13]=obj=fl_add_input (FL_NORMAL_INPUT, 520,170,170,30, "Input");
-  tobj[14]=obj=fl_add_menu (FL_PUSH_MENU, 400, 240, 100, 30, "Menu");
-  tobj[15]=obj=fl_add_choice (FL_NORMAL_CHOICE, 580, 250, 110, 30, "Choice");
-  tobj[16]=obj=fl_add_timer (FL_VALUE_TIMER, 580, 210, 110, 30, "Timer");
-//fl_set_object_dblbuffer(tobj[16], 1); // removed for fltk
-  tobj[17]=obj=fl_add_browser (FL_NORMAL_BROWSER,450,300,240, 180, "Browser");
-  exitob=obj= fl_add_button (FL_NORMAL_BUTTON, 590, 30, 100, 30, "Exit");
-  btypeob=obj= fl_add_choice (FL_NORMAL_CHOICE,110,30, 130, 30, "Boxtype");
-  fl_set_object_callback (obj, boxtype_cb, 0);
-  modeob = obj=fl_add_choice(FL_NORMAL_CHOICE,370,30,130,30,"Graphics mode");
-  fl_set_object_callback (obj, mode_cb, 0);
-  fl_end_form ();
-}
-/*---------------------------------------*/
-
-void
-create_the_forms (void)
-{
-  create_form_form ();
-}
-
-/*************** Main Routine ***********************/
-
-const char *browserlines[] = {
-   " ", "@C1@c@l@bObjects Demo",   " ",
-   "This demo shows you all",      "objects that currently",
-   "exist in the Forms Library.",  " ",
-   "You can change the boxtype",   "of the different objects",
-   "using the buttons at the",     "top of the form. Note that",
-   "some combinations might not",  "look too good. Also realize",
-   "that for all object classes",  "many different types are",
-   "available with different",     "behaviour.", " ",
-   "With this demo you can also",  "see the effect of the drawing",
-   "mode on the appearance of the","objects.",
-   0
-};
-
-
-int
-main (int argc, char *argv[])
-{
-  FL_COLOR c = FL_BLACK;
-  const char **p;
-  VN_struct *vn;
-
-  fl_initialize(&argc, argv, "FormDemo", 0, 0);
-  create_the_forms ();
-  fl_set_bitmap_data (tobj[2], sorceress_width, sorceress_height, sorceress_bits);
-  fl_add_chart_value (tobj[3], 15, "item 1", c++);
-  fl_add_chart_value (tobj[3], 5, "item 2", c++);
-  fl_add_chart_value (tobj[3], -10, "item 3", c++);
-  fl_add_chart_value (tobj[3], 25, "item 4", c++);
-  fl_set_menu (tobj[14], "item 1|item 2|item 3|item 4|item 5");
-  fl_addto_choice (tobj[15], "item 1");
-  fl_addto_choice (tobj[15], "item 2");
-  fl_addto_choice (tobj[15], "item 3");
-  fl_addto_choice (tobj[15], "item 4");
-  fl_addto_choice (tobj[15], "item 5");
-  fl_set_timer (tobj[16], 1000.0);
-
-  for ( p = browserlines; *p; p++)
-     fl_add_browser_line (tobj[17], *p);
-
-  for ( vn = btypes; vn->val >= 0; vn++)
-    fl_addto_choice(btypeob, vn->name);
-
-  fl_show_form (form, FL_PLACE_MOUSE, border, "Box types");
-
-  while (fl_do_forms () != exitob)
-     ;
-
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/fractals.cxx
+++ /dev/null
@@ -1,831 +1,0 @@
-//
-// "$Id$"
-//
-// Fractal drawing demo for the Fast Light Tool Kit (FLTK).
-//
-// This is a GLUT demo program, with modifications to
-// demonstrate how to add FLTK controls to a GLUT program.   The GLUT
-// code is unchanged except for the end (search for FLTK to find changes).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#if !HAVE_GL || !HAVE_GL_GLU_H
-#include <FL/Fl.H>
-#include <FL/fl_message.H>
-int main(int, char**) {
-  fl_alert("This demo does not work without GL and GLU");
-  return 1;
-}
-#else
-/*
- * To compile: cc -o fractals fractals.c -lGL -lGLU -lX11 -lglut -lXmu -lm
- *
- * Usage: fractals
- *
- * Homework 6, Part 2: fractal mountains and fractal trees 
- * (Pretty Late)
- *
- * Draws fractal mountains and trees -- and an island of mountains in water 
- * (I tried having trees on the island but it didn't work too well.)
- *
- * Two viewer modes: polar and flying (both restrained to y>0 for up vector).
- * Keyboard 0->9 and +/- control speed when flying.
- *
- * Only keyboard commands are 0-9 and +/- for speed in flying mode.
- *
- * Fog would make the island look much better, but I couldn't get it to work
- * correctly.  Would line up on -z axis not from eye.
- *
- * Philip Winston - 3/4/95
- * pwinston@hmc.edu
- * http://www.cs.hmc.edu/people/pwinston
- *
- */
-
-#include <FL/glut.H>
-#include <FL/glu.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <limits.h>           /* ULONG_MAX is defined here */
-#include <float.h>            /* FLT_MAX is atleast defined here */
-
-#include <time.h>  /* for random seed */
-
-#include "fracviewer.h"
-
-#if defined(WIN32) || defined(__EMX__)
-#  define drand48() (((float) rand())/((float) RAND_MAX))
-#  define srand48(x) (srand((x)))
-#elif defined __APPLE__
-#  define drand48() (((float) rand())/((float) RAND_MAX))
-#  define srand48(x) (srand((x)))
-#endif
-
-typedef enum { NOTALLOWED, MOUNTAIN, TREE, ISLAND, BIGMTN, STEM, LEAF, 
-               MOUNTAIN_MAT, WATER_MAT, LEAF_MAT, TREE_MAT, STEMANDLEAVES,
-               AXES } DisplayLists;
-
-#define MAXLEVEL 8
-
-int Rebuild = 1,        /* Rebuild display list in next display? */
-    fractal = TREE,     /* What fractal are we building */
-    Level   = 4;        /* levels of recursion for fractals */     
-
-int DrawAxes = 0;       
-
-/***************************************************************/
-/************************* VECTOR JUNK *************************/
-/***************************************************************/
-
-  /* print vertex to stderr */
-void printvert(float v[3])
-{
-  fprintf(stderr, "(%f, %f, %f)\n", v[0], v[1], v[2]);
-}
-
-#if 0	// removed for FL, it is in fracviewer.c
-  /* normalizes v */
-void normalize(GLfloat v[3])
-{
-  GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
-
-  if (d == 0)
-    fprintf(stderr, "Zero length vector in normalize\n");
-  else
-    v[0] /= d; v[1] /= d; v[2] /= d;
-}
-
-  /* calculates a normalized crossproduct to v1, v2 */
-void ncrossprod(float v1[3], float v2[3], float cp[3])
-{
-  cp[0] = v1[1]*v2[2] - v1[2]*v2[1];
-  cp[1] = v1[2]*v2[0] - v1[0]*v2[2];
-  cp[2] = v1[0]*v2[1] - v1[1]*v2[0];
-  normalize(cp);
-}
-#endif
-
-  /* calculates normal to the triangle designated by v1, v2, v3 */
-void triagnormal(float v1[3], float v2[3], float v3[3], float norm[3])
-{
-  float vec1[3], vec2[3];
-
-  vec1[0] = v3[0] - v1[0];  vec2[0] = v2[0] - v1[0];
-  vec1[1] = v3[1] - v1[1];  vec2[1] = v2[1] - v1[1];
-  vec1[2] = v3[2] - v1[2];  vec2[2] = v2[2] - v1[2];
-
-  ncrossprod(vec2, vec1, norm);
-}
-
-float xzlength(float v1[3], float v2[3])
-{
-  return sqrt((v1[0] - v2[0])*(v1[0] - v2[0]) +
-              (v1[2] - v2[2])*(v1[2] - v2[2]));
-}
-
-float xzslope(float v1[3], float v2[3])
-{
-  return ((v1[0] != v2[0]) ? ((v1[2] - v2[2]) / (v1[0] - v2[0]))
-	                   : FLT_MAX);
-}
-
-
-/***************************************************************/
-/************************ MOUNTAIN STUFF ***********************/
-/***************************************************************/
-
-GLfloat DispFactor[MAXLEVEL];  /* Array of what to multiply random number
-				  by for a given level to get midpoint
-				  displacement  */
-GLfloat DispBias[MAXLEVEL];  /* Array of what to add to random number
-				before multiplying it by DispFactor */
-
-#define NUMRANDS 191
-float RandTable[NUMRANDS];  /* hash table of random numbers so we can
-			       raise the same midpoints by the same amount */ 
-
-         /* The following are for permitting an edge of a moutain to be   */
-         /* pegged so it won't be displaced up or down.  This makes it    */
-         /* easier to setup scenes and makes a single moutain look better */
-
-GLfloat Verts[3][3],    /* Vertices of outside edges of mountain */
-        Slopes[3];      /* Slopes between these outside edges */
-int     Pegged[3];      /* Is this edge pegged or not */           
-
- /*
-  * Comes up with a new table of random numbers [0,1)
-  */
-void InitRandTable(unsigned int seed)
-{
-  int i;
-
-  srand48((long) seed);
-  for (i = 0; i < NUMRANDS; i++)
-    RandTable[i] = drand48() - 0.5;
-}
-
-  /* calculate midpoint and displace it if required */
-void Midpoint(GLfloat mid[3], GLfloat v1[3], GLfloat v2[3],
-	      int edge, int level)
-{
-  unsigned hash;
-
-  mid[0] = (v1[0] + v2[0]) / 2;
-  mid[1] = (v1[1] + v2[1]) / 2;
-  mid[2] = (v1[2] + v2[2]) / 2;
-  if (!Pegged[edge] || (fabs(xzslope(Verts[edge], mid) 
-                        - Slopes[edge]) > 0.00001)) {
-    srand48((int)((v1[0]+v2[0])*23344));
-    hash = unsigned(drand48() * 7334334);
-    srand48((int)((v2[2]+v1[2])*43433));
-    hash = (unsigned)(drand48() * 634344 + hash) % NUMRANDS;
-    mid[1] += ((RandTable[hash] + DispBias[level]) * DispFactor[level]);
-  }
-}
-
-  /*
-   * Recursive moutain drawing routine -- from lecture with addition of 
-   * allowing an edge to be pegged.  This function requires the above
-   * globals to be set, as well as the Level global for fractal level 
-   */
-static float cutoff = -1;
-
-void FMR(GLfloat v1[3], GLfloat v2[3], GLfloat v3[3], int level)
-{
-  if (level == Level) {
-    GLfloat norm[3];
-    if (v1[1] <= cutoff && v2[1]<=cutoff && v3[1]<=cutoff) return;
-    triagnormal(v1, v2, v3, norm);
-    glNormal3fv(norm);
-    glVertex3fv(v1);
-    glVertex3fv(v2);
-    glVertex3fv(v3);
-
-  } else {
-    GLfloat m1[3], m2[3], m3[3];
-
-    Midpoint(m1, v1, v2, 0, level);
-    Midpoint(m2, v2, v3, 1, level);
-    Midpoint(m3, v3, v1, 2, level);
-
-    FMR(v1, m1, m3, level + 1);
-    FMR(m1, v2, m2, level + 1);
-    FMR(m3, m2, v3, level + 1);
-    FMR(m1, m2, m3, level + 1);
-  }
-}
-
- /*
-  * sets up lookup tables and calls recursive mountain function
-  */
-void FractalMountain(GLfloat v1[3], GLfloat v2[3], GLfloat v3[3],
-                     int pegged[3])
-{
-  GLfloat lengths[MAXLEVEL];
-  GLfloat fraction[8] = { 0.3, 0.3, 0.4, 0.2, 0.3, 0.2, 0.4, 0.4  };
-  GLfloat bias[8]     = { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1  };
-  int i;
-  float avglen = (xzlength(v1, v2) + 
-                  xzlength(v2, v3) +
-		  xzlength(v3, v1) / 3);
-
-  for (i = 0; i < 3; i++) {
-    Verts[0][i] = v1[i];      /* set mountain vertex globals */
-    Verts[1][i] = v2[i];
-    Verts[2][i] = v3[i];
-    Pegged[i] = pegged[i];
-  }
-
-  Slopes[0] = xzslope(Verts[0], Verts[1]);   /* set edge slope globals */
-  Slopes[1] = xzslope(Verts[1], Verts[2]);
-  Slopes[2] = xzslope(Verts[2], Verts[0]);
-
-  lengths[0] = avglen;          
-  for (i = 1; i < Level; i++) {   
-    lengths[i] = lengths[i-1]/2;     /* compute edge length for each level */
-  }
-
-  for (i = 0; i < Level; i++) {     /* DispFactor and DispBias arrays */      
-    DispFactor[i] = (lengths[i] * ((i <= 7) ? fraction[i] : fraction[7]));
-    DispBias[i]   = ((i <= 7) ? bias[i] : bias[7]);
-  } 
-
-  glBegin(GL_TRIANGLES);
-    FMR(v1, v2, v3, 0);    /* issues no GL but vertex calls */
-  glEnd();
-}
-
- /*
-  * draw a mountain and build the display list
-  */
-void CreateMountain(void)
-{
-  GLfloat v1[3] = { 0, 0, -1 }, v2[3] = { -1, 0, 1 }, v3[3] = { 1, 0, 1 };
-  int pegged[3] = { 1, 1, 1 };
-
-  glNewList(MOUNTAIN, GL_COMPILE);
-  glPushAttrib(GL_LIGHTING_BIT);
-    glCallList(MOUNTAIN_MAT);
-    FractalMountain(v1, v2, v3, pegged);
-  glPopAttrib();
-  glEndList();
-}
-
-  /*
-   * new random numbers to make a different moutain
-   */
-void NewMountain(void)
-{
-  InitRandTable(time(NULL));
-}
-
-/***************************************************************/
-/***************************** TREE ****************************/
-/***************************************************************/
-
-long TreeSeed;   /* for srand48 - remember so we can build "same tree"
-                     at a different level */
-
- /*
-  * recursive tree drawing thing, fleshed out from class notes pseudocode 
-  */
-void FractalTree(int level, long level_seed)
-{
-  if (level == Level) {
-      glPushMatrix();
-        glRotatef(drand48()*180, 0, 1, 0);
-        glCallList(STEMANDLEAVES);
-      glPopMatrix();
-  } else {
-    glCallList(STEM);
-    glPushMatrix();
-    glRotatef(drand48()*180, 0, 1, 0);
-    glTranslatef(0, 1, 0);
-    glScalef(0.7, 0.7, 0.7);
-
-      srand48(level_seed+1);
-      glPushMatrix();    
-        glRotatef(110 + drand48()*40, 0, 1, 0);
-        glRotatef(30 + drand48()*20, 0, 0, 1);
-        FractalTree(level + 1, level_seed+4);
-      glPopMatrix();
-
-      srand48(level_seed+2);
-      glPushMatrix();
-        glRotatef(-130 + drand48()*40, 0, 1, 0);
-        glRotatef(30 + drand48()*20, 0, 0, 1);
-        FractalTree(level + 1, level_seed+5);
-      glPopMatrix();
-
-      srand48(level_seed+3);
-      glPushMatrix();
-        glRotatef(-20 + drand48()*40, 0, 1, 0);
-        glRotatef(30 + drand48()*20, 0, 0, 1);
-        FractalTree(level + 1, level_seed+6);
-      glPopMatrix();
-
-    glPopMatrix();
-  }
-}
-
-  /*
-   * Create display lists for a leaf, a set of leaves, and a stem
-   */
-void CreateTreeLists(void)
-{
-  GLUquadricObj *cylquad = gluNewQuadric();
-  int i;
-
-  glNewList(STEM, GL_COMPILE);
-  glPushMatrix();
-    glRotatef(-90, 1, 0, 0);
-    gluCylinder(cylquad, 0.1, 0.08, 1, 10, 2 );
-  glPopMatrix();
-  glEndList();
-
-  glNewList(LEAF, GL_COMPILE);  /* I think this was jeff allen's leaf idea */
-    glBegin(GL_TRIANGLES);
-      glNormal3f(-0.1, 0, 0.25);  /* not normalized */
-      glVertex3f(0, 0, 0);
-      glVertex3f(0.25, 0.25, 0.1);
-      glVertex3f(0, 0.5, 0);
-
-      glNormal3f(0.1, 0, 0.25);
-      glVertex3f(0, 0, 0);
-      glVertex3f(0, 0.5, 0);
-      glVertex3f(-0.25, 0.25, 0.1);
-    glEnd();
-  glEndList();
-
-  glNewList(STEMANDLEAVES, GL_COMPILE);
-  glPushMatrix();
-  glPushAttrib(GL_LIGHTING_BIT);
-    glCallList(STEM);
-    glCallList(LEAF_MAT);
-    for(i = 0; i < 3; i++) {
-      glTranslatef(0, 0.333, 0);
-      glRotatef(90, 0, 1, 0);
-      glPushMatrix();
-        glRotatef(0, 0, 1, 0);
-        glRotatef(50, 1, 0, 0);
-        glCallList(LEAF);
-      glPopMatrix();
-      glPushMatrix();
-        glRotatef(180, 0, 1, 0);
-        glRotatef(60, 1, 0, 0);
-        glCallList(LEAF);
-      glPopMatrix();
-    }
-  glPopAttrib();
-  glPopMatrix();
-  glEndList();
-
-  gluDeleteQuadric(cylquad);
-}
-
- /*
-  * draw and build display list for tree
-  */
-void CreateTree(void)
-{
-  srand48(TreeSeed);
-
-  glNewList(TREE, GL_COMPILE);
-    glPushMatrix();
-    glPushAttrib(GL_LIGHTING_BIT);
-    glCallList(TREE_MAT);
-    glTranslatef(0, -1, 0);
-    FractalTree(0, TreeSeed);
-    glPopAttrib();
-    glPopMatrix();
-  glEndList();  
-}
-
- /*
-  * new seed for a new tree (groan)
-  */
-void NewTree(void)
-{
-  TreeSeed = time(NULL);
-}
-
-/***************************************************************/
-/*********************** FRACTAL PLANET ************************/
-/***************************************************************/
-
-void CreateIsland(void)
-{
-  cutoff = .06;
-  CreateMountain();
-  cutoff = -1;
-  glNewList(ISLAND, GL_COMPILE);
-  glPushAttrib(GL_LIGHTING_BIT);
-  glMatrixMode(GL_MODELVIEW);
-  glPushMatrix();
-    glCallList(WATER_MAT);
-
-    glBegin(GL_QUADS);
-      glNormal3f(0, 1, 0);
-      glVertex3f(10, 0.01, 10);
-      glVertex3f(10, 0.01, -10);
-      glVertex3f(-10, 0.01, -10);
-      glVertex3f(-10, 0.01, 10);
-    glEnd();
-
-    glPushMatrix();
-    glTranslatef(0, -0.1, 0);
-    glCallList(MOUNTAIN);
-    glPopMatrix();
-
-    glPushMatrix();
-    glRotatef(135, 0, 1, 0);
-    glTranslatef(0.2, -0.15, -0.4);
-    glCallList(MOUNTAIN);
-    glPopMatrix();
-
-    glPushMatrix();
-    glRotatef(-60, 0, 1, 0);
-    glTranslatef(0.7, -0.07, 0.5);
-    glCallList(MOUNTAIN);
-    glPopMatrix();
-
-    glPushMatrix();
-    glRotatef(-175, 0, 1, 0);
-    glTranslatef(-0.7, -0.05, -0.5);
-    glCallList(MOUNTAIN);
-    glPopMatrix();
-
-    glPushMatrix();
-    glRotatef(165, 0, 1, 0);
-    glTranslatef(-0.9, -0.12, 0.0);
-    glCallList(MOUNTAIN);
-    glPopMatrix();
-
-  glPopMatrix();
-  glPopAttrib();
-  glEndList();  
-}
-
-
-void NewFractals(void)
-{
-  NewMountain();
-  NewTree();
-}
-
-void Create(int fract)
-{
-  switch(fract) {
-    case MOUNTAIN:
-      CreateMountain();
-      break;
-    case TREE:
-      CreateTree();
-      break;
-    case ISLAND:
-      CreateIsland();
-      break;
-  }
-}
-
-
-
-/***************************************************************/
-/**************************** OPENGL ***************************/
-/***************************************************************/
-
-
-void SetupMaterials(void)
-{
-  GLfloat mtn_ambuse[] =   { 0.426, 0.256, 0.108, 1.0 };
-  GLfloat mtn_specular[] = { 0.394, 0.272, 0.167, 1.0 };
-  GLfloat mtn_shininess[] = { 10 };
-
-  GLfloat water_ambuse[] =   { 0.0, 0.1, 0.5, 1.0 };
-  GLfloat water_specular[] = { 0.0, 0.1, 0.5, 1.0 };
-  GLfloat water_shininess[] = { 10 };
-
-  GLfloat tree_ambuse[] =   { 0.4, 0.25, 0.1, 1.0 };
-  GLfloat tree_specular[] = { 0.0, 0.0, 0.0, 1.0 };
-  GLfloat tree_shininess[] = { 0 };
-
-  GLfloat leaf_ambuse[] =   { 0.0, 0.8, 0.0, 1.0 };
-  GLfloat leaf_specular[] = { 0.0, 0.8, 0.0, 1.0 };
-  GLfloat leaf_shininess[] = { 10 };
-
-  glNewList(MOUNTAIN_MAT, GL_COMPILE);
-    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mtn_ambuse);
-    glMaterialfv(GL_FRONT, GL_SPECULAR, mtn_specular);
-    glMaterialfv(GL_FRONT, GL_SHININESS, mtn_shininess);
-  glEndList();
-
-  glNewList(WATER_MAT, GL_COMPILE);
-    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, water_ambuse);
-    glMaterialfv(GL_FRONT, GL_SPECULAR, water_specular);
-    glMaterialfv(GL_FRONT, GL_SHININESS, water_shininess);
-  glEndList();
-
-  glNewList(TREE_MAT, GL_COMPILE);
-    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, tree_ambuse);
-    glMaterialfv(GL_FRONT, GL_SPECULAR, tree_specular);
-    glMaterialfv(GL_FRONT, GL_SHININESS, tree_shininess);
-  glEndList();
-
-  glNewList(LEAF_MAT, GL_COMPILE);
-    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, leaf_ambuse);
-    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, leaf_specular);
-    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, leaf_shininess);
-  glEndList();
-}
-
-void myGLInit(void)
-{
-  GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
-  GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
-  GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
-  GLfloat light_position[] = { 0.0, 0.3, 0.3, 0.0 };
-
-  GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };
-
-  glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
-  glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
-  glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
-  glLightfv(GL_LIGHT0, GL_POSITION, light_position);
-    
-  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
-
-  glEnable(GL_LIGHTING);
-  glEnable(GL_LIGHT0);
-
-  glDepthFunc(GL_LEQUAL);
-  glEnable(GL_DEPTH_TEST);
-
-  glEnable(GL_NORMALIZE);
-#if 0
-  glEnable(GL_CULL_FACE);
-  glCullFace(GL_BACK);
-#endif
-
-  glShadeModel(GL_SMOOTH);
-#if 0
-  glEnable(GL_BLEND);
-  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-#endif
-
-  SetupMaterials();
-  CreateTreeLists();
-
-  glFlush();
-} 
-
-/***************************************************************/
-/************************ GLUT STUFF ***************************/
-/***************************************************************/
-
-int winwidth = 1;
-int winheight = 1;
-
-void reshape(int w, int h)
-{
-  glViewport(0,0,w,h);
-
-  winwidth  = w;
-  winheight = h;
-}
-
-void display(void)
-{
-  time_t curtime;
-  char buf[255];
-  static time_t fpstime = 0;
-  static int fpscount = 0;
-  static int fps = 0;
-
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  gluPerspective(60.0, (GLdouble)winwidth/winheight, 0.01, 100);
-  agvViewTransform();
-
-  glMatrixMode(GL_MODELVIEW);
-  glLoadIdentity();
-
-  if (Rebuild) {
-    Create(fractal);
-    Rebuild = 0;
-  }
-
-  glCallList(fractal);
-
-  if (DrawAxes)
-    glCallList(AXES);
-
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  gluOrtho2D(0.0, winwidth, 0.0, winheight);
-
-  sprintf(buf, "FPS=%d", fps);
-  glColor3f(1.0f, 1.0f, 1.0f);
-  gl_font(FL_HELVETICA, 12);
-  gl_draw(buf, 10, 10);
-
-  //
-  // Use glFinish() instead of glFlush() to avoid getting many frames
-  // ahead of the display (problem with some Linux OpenGL implementations...)
-  //
-
-  glFinish();
-
-  // Update frames-per-second
-  fpscount ++;
-  curtime = time(NULL);
-  if ((curtime - fpstime) >= 2)
-  {
-    fps      = (fps + fpscount / (curtime - fpstime)) / 2;
-    fpstime  = curtime;
-    fpscount = 0;
-  }
-}
-
-void visible(int v)
-{
-  if (v == GLUT_VISIBLE)
-    agvSetAllowIdle(1);
-  else {
-    glutIdleFunc(NULL);
-    agvSetAllowIdle(0);
-  }
-}
-
-void menuuse(int v)
-{
-  if (v == GLUT_MENU_NOT_IN_USE)
-    agvSetAllowIdle(1);
-  else {
-    glutIdleFunc(NULL);
-    agvSetAllowIdle(0);
-  }
-}
-
-/***************************************************************/
-/******************* MENU SETUP & HANDLING *********************/
-/***************************************************************/
-
-typedef enum { MENU_QUIT, MENU_RAND, MENU_MOVE, MENU_AXES } MenuChoices;
-
-void setlevel(int value)
-{
-  Level = value;
-  Rebuild = 1;
-  glutPostRedisplay();
-}
-
-void choosefract(int value)
-{
-  fractal = value;
-  Rebuild = 1;
-  glutPostRedisplay();
-}
-
-void handlemenu(int value)
-{
-  switch (value) {
-    case MENU_QUIT:
-      exit(0);
-      break;
-    case MENU_RAND:
-      NewFractals();
-      Rebuild = 1;
-      glutPostRedisplay();
-      break;
-    case MENU_AXES:
-      DrawAxes = !DrawAxes;
-      glutPostRedisplay();
-      break;
-    }
-}
-
-void MenuInit(void)
-{
-  int submenu3, submenu2, submenu1;
-
-  submenu1 = glutCreateMenu(setlevel);
-  glutAddMenuEntry((char *)"0", 0);  glutAddMenuEntry((char *)"1", 1);
-  glutAddMenuEntry((char *)"2", 2);  glutAddMenuEntry((char *)"3", 3);
-  glutAddMenuEntry((char *)"4", 4);  glutAddMenuEntry((char *)"5", 5);
-  glutAddMenuEntry((char *)"6", 6);  glutAddMenuEntry((char *)"7", 7);
-  glutAddMenuEntry((char *)"8", 8);
-
-  submenu2 = glutCreateMenu(choosefract);
-  glutAddMenuEntry((char *)"Moutain", MOUNTAIN);
-  glutAddMenuEntry((char *)"Tree", TREE);
-  glutAddMenuEntry((char *)"Island", ISLAND);
-
-  submenu3 = glutCreateMenu(agvSwitchMoveMode);
-  glutAddMenuEntry((char *)"Flying", FLYING);
-  glutAddMenuEntry((char *)"Polar", POLAR);
-
-  glutCreateMenu(handlemenu);
-  glutAddSubMenu((char *)"Level", submenu1);
-  glutAddSubMenu((char *)"Fractal", submenu2);
-  glutAddSubMenu((char *)"Movement", submenu3);
-  glutAddMenuEntry((char *)"New Fractal",      MENU_RAND);
-  glutAddMenuEntry((char *)"Toggle Axes", MENU_AXES);
-  glutAddMenuEntry((char *)"Quit",             MENU_QUIT);
-  glutAttachMenu(GLUT_RIGHT_BUTTON);
-}
-
-
-/***************************************************************/
-/**************************** MAIN *****************************/
-/***************************************************************/
-
-// FLTK-style callbacks to Glut menu callback translators:
-void setlevel(Fl_Widget*, void *value) {setlevel(fl_intptr_t(value));}
-
-void choosefract(Fl_Widget*, void *value) {choosefract(fl_intptr_t(value));}
-
-void handlemenu(Fl_Widget*, void *value) {handlemenu(fl_intptr_t(value));}
-
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Window.H>
-
-int main(int argc, char** argv)
-{
-  Fl::use_high_res_GL(1);
-//  glutInit(&argc, argv); // this line removed for FLTK
-
-  // create FLTK window:
-  Fl_Window window(512+20, 512+100);
-  window.resizable(window);
-
-  // create a bunch of buttons:
-  Fl_Group *g = new Fl_Group(110,50,400-110,30,"Level:");
-  g->align(FL_ALIGN_LEFT);
-  g->begin();
-  Fl_Button *b;
-  b = new Fl_Button(110,50,30,30,"0"); b->callback(setlevel,(void*)0);
-  b = new Fl_Button(140,50,30,30,"1"); b->callback(setlevel,(void*)1);
-  b = new Fl_Button(170,50,30,30,"2"); b->callback(setlevel,(void*)2);
-  b = new Fl_Button(200,50,30,30,"3"); b->callback(setlevel,(void*)3);
-  b = new Fl_Button(230,50,30,30,"4"); b->callback(setlevel,(void*)4);
-  b = new Fl_Button(260,50,30,30,"5"); b->callback(setlevel,(void*)5);
-  b = new Fl_Button(290,50,30,30,"6"); b->callback(setlevel,(void*)6);
-  b = new Fl_Button(320,50,30,30,"7"); b->callback(setlevel,(void*)7);
-  b = new Fl_Button(350,50,30,30,"8"); b->callback(setlevel,(void*)8);
-  g->end();
-
-  b = new Fl_Button(400,50,100,30,"New Fractal"); b->callback(handlemenu,(void*)MENU_RAND);
-  
-  b = new Fl_Button( 10,10,100,30,"Mountain"); b->callback(choosefract,(void*)MOUNTAIN);
-  b = new Fl_Button(110,10,100,30,"Tree"); b->callback(choosefract,(void*)TREE);
-  b = new Fl_Button(210,10,100,30,"Island"); b->callback(choosefract,(void*)ISLAND);
-  b = new Fl_Button(400,10,100,30,"Quit"); b->callback(handlemenu,(void*)MENU_QUIT);
-
-
-  window.show(argc,argv); // glut will die unless parent window visible
-  window.begin(); // this will cause Glut window to be a child
-  glutInitWindowSize(512, 512);
-  glutInitWindowPosition(10,90); // place it inside parent window
-  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE);
-  glutCreateWindow("Fractal Planet?");
-  window.end();
-  window.resizable(glut_window);
-
-  agvInit(1); /* 1 cause we don't have our own idle */
-
-  glutReshapeFunc(reshape);
-  glutDisplayFunc(display);
-  glutVisibilityFunc(visible);
-  glutMenuStateFunc(menuuse);
-
-  NewFractals();
-  agvMakeAxesList(AXES);
-  myGLInit(); 
-  MenuInit();
-
-  glutMainLoop(); // you could use Fl::run() instead
-
-  return 0;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/fracviewer.cxx
+++ /dev/null
@@ -1,533 +1,0 @@
-/*
- * fractviewer.cxx [from agviewer.c  (version 1.0)]
- *
- * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut
- *
- * See agv_example.c and agviewer.h comments within for more info.
- *
- * I welcome any feedback or improved versions!
- *
- * Philip Winston - 4/11/95
- * pwinston@hmc.edu
- * http://www.cs.hmc.edu/people/pwinston
- */
-
-#include <config.h>
-
-#if HAVE_GL && HAVE_GL_GLU_H
-#  include <FL/glut.H>
-#  include <FL/glu.h>
-
-#  include <stdio.h>
-#  include <stdlib.h>
-#  include <math.h>
-#  include <sys/types.h>
-#  include <time.h>
-#  if !defined(WIN32) && !defined(__EMX__)
-#    include <sys/time.h>
-#  endif // !WIN32 && !__EMX__
-
-#  include "fracviewer.h"
-
-/* Some <math.h> files do not define M_PI... */
-#ifndef M_PI
-#define M_PI 3.14159265
-#endif
-
-/***************************************************************/
-/************************** SETTINGS ***************************/
-/***************************************************************/
-
-   /* Initial polar movement settings */
-#define INIT_POLAR_AZ  0.0
-#define INIT_POLAR_EL 30.0
-#define INIT_DIST      4.0
-#define INIT_AZ_SPIN   0.5
-#define INIT_EL_SPIN   0.0
-
-  /* Initial flying movement settings */
-#define INIT_EX        0.0
-#define INIT_EY       -2.0
-#define INIT_EZ       -2.0
-#define INIT_MOVE     0.01
-#define MINMOVE      0.001    
-
-  /* Start in this mode */
-#define INIT_MODE   POLAR   
-
-  /* Controls:  */
-
-  /* map 0-9 to an EyeMove value when number key is hit in FLYING mode */
-#define SPEEDFUNCTION(x) ((x)*(x)*0.001)  
-
-  /* Multiply EyeMove by (1+-MOVEFRACTION) when +/- hit in FLYING mode */
-#define MOVEFRACTION 0.25   
-
-  /* What to multiply number of pixels mouse moved by to get rotation amount */
-#define EL_SENS   0.5
-#define AZ_SENS   0.5
-
-  /* What to multiply number of pixels mouse moved by for movement amounts */
-#define DIST_SENS 0.01
-#define E_SENS    0.01
-
-  /* Minimum spin to allow in polar (lower forced to zero) */
-#define MIN_AZSPIN 0.1
-#define MIN_ELSPIN 0.1
-
-  /* Factors used in computing dAz and dEl (which determine AzSpin, ElSpin) */
-#define SLOW_DAZ 0.90
-#define SLOW_DEL 0.90
-#define PREV_DAZ 0.80
-#define PREV_DEL 0.80
-#define CUR_DAZ  0.20
-#define CUR_DEL  0.20
-
-/***************************************************************/
-/************************** GLOBALS ****************************/
-/***************************************************************/
-
-int     MoveMode = INIT_MODE;  /* FLYING or POLAR mode? */
-
-GLfloat Ex = INIT_EX,             /* flying parameters */
-        Ey = INIT_EY,
-        Ez = INIT_EZ,
-        EyeMove = INIT_MOVE,     
-
-        EyeDist = INIT_DIST,      /* polar params */
-        AzSpin  = INIT_AZ_SPIN,
-        ElSpin  = INIT_EL_SPIN,
-
-        EyeAz = INIT_POLAR_AZ,    /* used by both */
-        EyeEl = INIT_POLAR_EL;
-
-int agvMoving;    /* Currently moving?  */
-
-int downx, downy,   /* for tracking mouse position */
-    lastx, lasty,
-    downb = -1;     /* and button status */
-						
-GLfloat downDist, downEl, downAz, /* for saving state of things */
-        downEx, downEy, downEz,   /* when button is pressed */
-        downEyeMove;                
-
-GLfloat dAz, dEl, lastAz, lastEl;  /* to calculate spinning w/ polar motion */
-int     AdjustingAzEl = 0;
-
-int AllowIdle, RedisplayWindow; 
-   /* If AllowIdle is 1 it means AGV will install its own idle which
-    * will update the viewpoint as needed and send glutPostRedisplay() to the
-    * window RedisplayWindow which was set in agvInit().  AllowIdle of 0
-    * means AGV won't install an idle funciton, and something like
-    * "if (agvMoving) agvMove()" should exist at the end of the running
-    * idle function.
-    */
-
-#define MAX(x,y) (((x) > (y)) ? (x) : (y))
-#define TORAD(x) ((M_PI/180.0)*(x))
-#define TODEG(x) ((180.0/M_PI)*(x))
-
-/***************************************************************/
-/************************ PROTOTYPES ***************************/
-/***************************************************************/
-
-  /*
-   * these are functions meant for internal use only
-   * the other prototypes are in agviewer.h
-   */
-
-void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth);
-void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z,
-                        GLfloat az, GLfloat el);
-int  ConstrainEl(void);
-void MoveOn(int v);
-void SetMove(float newmove);
-static void normalize(GLfloat v[3]);
-void ncrossprod(float v1[3], float v2[3], float cp[3]);
-
-
-/***************************************************************/
-/************************ agvInit ******************************/
-/***************************************************************/
-
-void agvInit(int window)
-{
-  glutMouseFunc(agvHandleButton);
-  glutMotionFunc(agvHandleMotion);
-  glutKeyboardFunc(agvHandleKeys);
-  RedisplayWindow = glutGetWindow();
-  agvSetAllowIdle(window);
-}
-
-/***************************************************************/
-/************************ VIEWPOINT STUFF **********************/
-/***************************************************************/
-
-  /*
-   * viewing transformation modified from page 90 of red book
-   */
-void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth)
-{
-  glTranslatef(0, 0, -dist);
-  glRotatef(elevation, 1, 0, 0);
-  glRotatef(azimuth, 0, 1, 0);
-
-}
-
-  /*
-   * I took the idea of tracking eye position in absolute
-   * coords and direction looking in Polar form from denis
-   */
-void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el)
-{
-  float lookat[3], perp[3], up[3];
-
-  lookat[0] = sin(TORAD(az))*cos(TORAD(el));
-  lookat[1] = sin(TORAD(el));
-  lookat[2] = -cos(TORAD(az))*cos(TORAD(el));
-  normalize(lookat);
-  perp[0] = lookat[2];
-  perp[1] = 0;
-  perp[2] = -lookat[0];
-  normalize(perp);
-  ncrossprod(lookat, perp, up);
-  gluLookAt(x, y, z,
-            x+lookat[0], y+lookat[1], z+lookat[2],
-            up[0], up[1], up[2]);
-}
-
-  /*
-   * Call viewing transformation based on movement mode
-   */
-void agvViewTransform(void)
-{ 
-  switch (MoveMode) {
-    case FLYING:
-      FlyLookFrom(Ex, Ey, Ez, EyeAz, EyeEl);
-      break;
-    case POLAR:
-      PolarLookFrom(EyeDist, EyeEl, EyeAz);
-      break;
-    }
-}
-
-  /*
-   * keep them vertical; I think this makes a lot of things easier, 
-   * but maybe it wouldn't be too hard to adapt things to let you go
-   * upside down
-   */
-int ConstrainEl(void)
-{
-  if (EyeEl <= -90) {
-    EyeEl = -89.99;
-    return 1;
-  } else if (EyeEl >= 90) {
-    EyeEl = 89.99;
-    return 1;
-  }
-  return 0;
-}
-
- /*
-  * Idle Function - moves eyeposition
-  */
-void agvMove(void)
-{
-  switch (MoveMode)  {
-    case FLYING:
-      Ex += EyeMove*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));
-      Ey += EyeMove*sin(TORAD(EyeEl));
-      Ez -= EyeMove*cos(TORAD(EyeAz))*cos(TORAD(EyeEl));
-      break;
-
-    case POLAR:
-      EyeEl += ElSpin;
-      EyeAz += AzSpin;
-      if (ConstrainEl()) {  /* weird spin thing to make things look     */
-        ElSpin = -ElSpin;      /* look better when you are kept from going */
-                               /* upside down while spinning - Isn't great */
-        if (fabs(ElSpin) > fabs(AzSpin))
-          AzSpin = fabs(ElSpin) * ((AzSpin > 0) ? 1 : -1);
-      }
-      break;
-    }
-
-  if (AdjustingAzEl) {
-    dAz *= SLOW_DAZ;
-    dEl *= SLOW_DEL;
-  }
-
-  if (AllowIdle) {
-    glutSetWindow(RedisplayWindow);
-    glutPostRedisplay();
-  }
-}
-
-
-  /*
-   * Don't install agvMove as idle unless we will be updating the view
-   * and we've been given a RedisplayWindow
-   */
-void MoveOn(int v)
-{
-  if (v && ((MoveMode == FLYING && EyeMove != 0) ||
-             (MoveMode == POLAR &&
-             (AzSpin != 0 || ElSpin != 0 || AdjustingAzEl)))) {
-    agvMoving = 1;
-    if (AllowIdle)
-      glutIdleFunc(agvMove);
-  } else {
-    agvMoving = 0;
-    if (AllowIdle)
-      glutIdleFunc(NULL);
-  }
-}
-
-  /*
-   * set new redisplay window.  If <= 0 it means we are not to install
-   * an idle function and will rely on whoever does install one to 
-   * put statement like "if (agvMoving) agvMove();" at end of it
-   */
-void agvSetAllowIdle(int allowidle)
-{
-  if ((AllowIdle = allowidle))
-    MoveOn(1);
-}
-
-
-  /*
-   * when moving to flying we stay in the same spot, moving to polar we
-   * reset since we have to be looking at the origin (though a pivot from
-   * current position to look at origin might be cooler)
-   */
-void agvSwitchMoveMode(int move)
-{
-  switch (move) {
-    case FLYING:
-      if (MoveMode == FLYING) return;
-      Ex    = -EyeDist*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));
-      Ey    =  EyeDist*sin(TORAD(EyeEl));
-      Ez    =  EyeDist*(cos(TORAD(EyeAz))*cos(TORAD(EyeEl)));
-      EyeEl = -EyeEl;
-      EyeMove = INIT_MOVE;
-      break;
-    case POLAR:
-      EyeDist = INIT_DIST;
-      EyeAz   = INIT_POLAR_AZ;
-      EyeEl   = INIT_POLAR_EL;
-      AzSpin  = INIT_AZ_SPIN;
-      ElSpin  = INIT_EL_SPIN;
-      break;
-    }
-  MoveMode = move;
-  MoveOn(1);
-  glutPostRedisplay();
-}
-
-/***************************************************************/
-/*******************    MOUSE HANDLING   ***********************/
-/***************************************************************/
-
-void agvHandleButton(int button, int state, int x, int y)
-{
- // deal with mouse wheel events, that fltk sends as buttons 3 or 4
- //if (button > GLUT_RIGHT_BUTTON)return;
- if ((state == GLUT_DOWN) && ((button == 3) || (button == 4))) {
-    // attempt to process scrollwheel as zoom in/out
-    float deltay = 0.25;
-    if (button == 3) {
-      deltay = (-0.25);
-    }
-    downb = -1;
-    downDist = EyeDist;
-    downEx = Ex;
-    downEy = Ey;
-    downEz = Ez;
-    downEyeMove = EyeMove;
-    EyeMove = 0;
-
-    EyeDist = downDist + deltay;
-    Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));
-    Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl));
-    Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl));
-
-    EyeMove = downEyeMove;
-    glutPostRedisplay();
-    return;
- }
- else if (button > GLUT_RIGHT_BUTTON)return; // ignore any other button...
-
- if (state == GLUT_DOWN && downb == -1) {
-    lastx = downx = x;
-    lasty = downy = y;
-    downb = button;
-
-    switch (button) {
-      case GLUT_LEFT_BUTTON:
-        lastEl = downEl = EyeEl;
-        lastAz = downAz = EyeAz;
-        AzSpin = ElSpin = dAz = dEl = 0;
-        AdjustingAzEl = 1;
-	MoveOn(1);
-        break;
-
-      case GLUT_MIDDLE_BUTTON:
-        downDist = EyeDist;
-	downEx = Ex;
-	downEy = Ey;
-	downEz = Ez;
-	downEyeMove = EyeMove;
-	EyeMove = 0;
-    }
-
-  } else if (state == GLUT_UP && button == downb) {
-
-    downb = -1;
-
-    switch (button) {
-      case GLUT_LEFT_BUTTON:
-        if (MoveMode != FLYING) {
-	  AzSpin =  -dAz;
-	  if (AzSpin < MIN_AZSPIN && AzSpin > -MIN_AZSPIN)
-	    AzSpin = 0;	
-	  ElSpin = -dEl;
-	  if (ElSpin < MIN_ELSPIN && ElSpin > -MIN_ELSPIN)
-	    ElSpin = 0; 
-	}
-        AdjustingAzEl = 0;
-        MoveOn(1);
-	break;
-
-      case GLUT_MIDDLE_BUTTON:
-	EyeMove = downEyeMove;
-      }
-  }
-}
-
- /*
-  * change EyeEl and EyeAz and position when mouse is moved w/ button down
-  */
-void agvHandleMotion(int x, int y)
-{
-  int deltax = x - downx, deltay = y - downy;
-
-  switch (downb) {
-    case GLUT_LEFT_BUTTON:
-      EyeEl  = downEl + EL_SENS * deltay;
-      ConstrainEl();
-      EyeAz  = downAz + AZ_SENS * deltax;
-      dAz    = PREV_DAZ*dAz + CUR_DAZ*(lastAz - EyeAz);
-      dEl    = PREV_DEL*dEl + CUR_DEL*(lastEl - EyeEl);
-      lastAz = EyeAz;
-      lastEl = EyeEl;
-      break;
-    case GLUT_MIDDLE_BUTTON:
-        EyeDist = downDist + DIST_SENS*deltay;
-        Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));
-        Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl));
-        Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl));
-      break;
-  }
-  glutPostRedisplay();
-}
-
-/***************************************************************/
-/********************* KEYBOARD HANDLING ***********************/
-/***************************************************************/
-
-  /*
-   * set EyeMove (current speed) for FLYING mode
-   */
-void SetMove(float newmove)
-{
-  if (newmove > MINMOVE) {
-    EyeMove = newmove;
-    MoveOn(1);
-  } else {
-    EyeMove = 0;
-    MoveOn(0);
-  }
-}
-
-  /*
-   * 0->9 set speed, +/- adjust current speed  -- in FLYING mode
-   */
-void agvHandleKeys(unsigned char key, int, int) {
-  if (MoveMode != FLYING)
-    return;
-
-  if (key >= '0' && key <= '9')
-    SetMove(SPEEDFUNCTION((key-'0')));
-  else
-    switch(key) {
-      case '+':  
-        if (EyeMove == 0)
-          SetMove(MINMOVE);
-         else
-	  SetMove(EyeMove *= (1 + MOVEFRACTION));
-        break;
-      case '-':
-	SetMove(EyeMove *= (1 - MOVEFRACTION));
-        break;
-    }
-}
-
-/***************************************************************/
-/*********************** VECTOR STUFF **************************/
-/***************************************************************/
-
-  /* normalizes v */
-static void normalize(GLfloat v[3])
-{
-  GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
-
-  if (d == 0)
-    fprintf(stderr, "Zero length vector in normalize\n");
-  else {
-    v[0] /= d; v[1] /= d; v[2] /= d;
-  }
-}
-
-  /* calculates a normalized crossproduct to v1, v2 */
-void ncrossprod(float v1[3], float v2[3], float cp[3])
-{
-  cp[0] = v1[1]*v2[2] - v1[2]*v2[1];
-  cp[1] = v1[2]*v2[0] - v1[0]*v2[2];
-  cp[2] = v1[0]*v2[1] - v1[1]*v2[0];
-  normalize(cp);
-}
-
-/***************************************************************/
-/**************************** AXES *****************************/
-/***************************************************************/
-
-
-  /* draw axes -- was helpful to debug/design things */
-void agvMakeAxesList(int displaylistnum)
-{
-  int i,j;
-  GLfloat axes_ambuse[] =   { 0.5, 0.0, 0.0, 1.0 };
-  glNewList(displaylistnum, GL_COMPILE);
-  glPushAttrib(GL_LIGHTING_BIT);
-  glMatrixMode(GL_MODELVIEW);
-    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, axes_ambuse);
-    glBegin(GL_LINES);
-      glVertex3f(15, 0, 0); glVertex3f(-15, 0, 0);
-      glVertex3f(0, 15, 0); glVertex3f(0, -15, 0);
-      glVertex3f(0, 0, 15); glVertex3f(0, 0, -15);
-    glEnd();
-    for (i = 0; i < 3; i++) {
-      glPushMatrix();
-        glTranslatef(-10*(i==0), -10*(i==1), -10*(i==2));
-        for (j = 0; j < 21; j++) {
-//          glutSolidCube(0.1);
-          glTranslatef(i==0, i==1, i==2);
-	}
-      glPopMatrix();
-    }
-  glPopAttrib();
-  glEndList();  
-}
-
-
-#endif // HAVE_GL && HAVE_GL_GLU_H
--- a/DoConfig/fltk/test/fracviewer.h
+++ /dev/null
@@ -1,105 +1,0 @@
-/*
- * fracviewer.h [from agviewer.h  (version 1.0)]
- *
- * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut
- *
- * The two view movement modes are POLAR and FLYING.  Both move the eye, NOT
- * THE OBJECT.  You can never be upside down or twisted (roll) in either mode.
- *
- * A nice addition would be an examiner type trackball mode where you are
- * moving the object and so could see it from any angle.  Also less restricted
- * flying and polar modes (fly upside down, do rolls, etc.).
- *
- * Controls for Polar are just left and middle buttons -- for flying it's
- * those plus 0-9 number keys and +/- for speed adjustment.
- *
- * See agv_example.c and agviewer.c for more info.  Probably want to make
- * a copy of these and then edit for each program.  This isn't meant to be
- * a library, just something to graft onto your own programs.
- *
- * I welcome any feedback or improved versions.
- *
- * Philip Winston - 4/11/95
- * pwinston@hmc.edu
- * http://www.cs.hmc.edu/people/pwinston
- */
-
-
- /*
-  * Call agvInit() with glut's current window set to the window in 
-  * which you want to run the viewer. Right after creating it is fine.  It
-  * will remember that window for possible later use (see below) and
-  * registers mouse, motion, and keyboard handlers for that window (see below).
-  *
-  * allowidle is 1 or 0 depnding on whether you will let AGV install
-  * and uninstall an idle function.  0 means you will not let it (because
-  * you will be having your own idle function). In this case it is your
-  * responsibility to put a statement like:
-  *
-  *     if (agvMoving)
-  *       agvMove();
-  *
-  * at the end of your idle function, to let AGV update the viewpoint if it
-  * is moving. 
-  *
-  * If allowidle is 1 it means AGV will install its own idle which
-  * will update the viewpoint as needed and send glutPostRedisplay() to the
-  * window which was current when agvInit() was called.
-  *
-  * agvSetIdleAllow changes this value so you can let AGV install its idle
-  * when your idle isn't installed. 
-  *
-  */
-void agvInit(int allowidle);
-void agvSetAllowIdle(int allowidle);
-
-
- /*
-  * Set which movement mode you are in.
-  */
-typedef enum { FLYING, POLAR } MovementType;
-void agvSwitchMoveMode(int move);
-
- /*
-  * agvViewTransform basically does the appropriate gluLookAt() for the 
-  * current position.  So call it in your display on the projection matrix
-  */
-void agvViewTransform(void);
-
- /*
-  * agvMoving will be set by AGV according to whether it needs you to call
-  * agvMove() at the end of your idle function.  You only need these if 
-  * you aren't allowing AGV to do its own idle.
-  * (Don't change the value of agvMoving)
-  */
-extern int agvMoving;
-void agvMove(void);
-
- /*
-  * These are the routines AGV registers to deal with mouse and keyboard input.
-  * Keyboard input only matters in flying mode, and then only to set speed.
-  * Mouse input only uses left two buttons in both modes.
-  * These are all registered with agvInit(), but you could register
-  * something else which called these, or reregister these as needed 
-  */
-void agvHandleButton(int button, int state, int x, int y);
-void agvHandleMotion(int x, int y);
-void agvHandleKeys(unsigned char key, int x, int y);
-
- /*
-  * Just an extra routine which makes an x-y-z axes (about 10x10x10)
-  * which is nice for aligning things and debugging.  Pass it an available
-  * displaylist number.
-  */
-void agvMakeAxesList(int displaylist);
-
-
-
-void ncrossprod(float v1[3], float v2[3], float cp[3]);
-
-
-
-
-
-
-
--- a/DoConfig/fltk/test/fromdos.c
+++ /dev/null
@@ -1,65 +1,0 @@
-/* fromdos.c : strip the stupid ^M characters without mistakes! */
-
-/* this can do in-place conversion or be used as a pipe... */
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-
-int main(int argc, char** argv) {
-  int f,c;
-  if (argc <= 1) {
-    if (isatty(0)) {
-      fprintf(stderr,"usage : %s <files>\nStrips ^M characters.\nCan do in-place conversion of many files or can be used in a pipe\n",argv[0]);
-      return 1;
-    }
-    for (;;) {
-      c = getchar();
-      while (c == '\r') {
-	c = getchar();
-	if (c != '\n') putchar(c);
-      }
-      if (c < 0) break;
-      putchar(c);
-    }
-    return 0;
-  }
-  for (f = 1; f < argc; f++) {
-    char* fname = argv[f];
-    char tempname[1024];
-    FILE* in = fopen(fname,"rb");
-    FILE* out;
-    int mod = 0;
-    if (!in) {
-      fprintf(stderr,"%s : %s\n", fname, strerror(errno));
-      return 1;
-    }
-    strcpy(tempname, fname);
-    strcat(tempname, ".temp");
-    out = fopen(tempname, "wb");
-    if (!out) {
-      fprintf(stderr,"%s : %s\n", fname, strerror(errno));
-      return 1;
-    }
-    for (;;) {
-      c = getc(in);
-      while (c == '\r') {
-	c = getc(in);
-	if (c == '\n') mod=1; else putc(c,out);
-      }
-      if (c < 0) break;
-      putc(c,out);
-    }
-    fclose(in);
-    fclose(out);
-    if (!mod) {
-      fprintf(stderr,"%s : no change\n", fname);
-      unlink(tempname);
-    } else if (rename(tempname, fname)) {
-      fprintf(stderr,"Can't mv %s %s : %s\n",tempname,fname,strerror(errno));
-      return 1;
-    }
-  }
-  return 0;
-}
--- a/DoConfig/fltk/test/fullscreen.cxx
+++ /dev/null
@@ -1,352 +1,0 @@
-//
-// "$Id$"
-//
-
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Fullscreen test program for the Fast Light Tool Kit (FLTK).
-//
-// This demo shows how to do many of the window manipulations that
-// are popular on SGI programs, even though X does not really like
-// them.  You can toggle the border on/off, change the visual to
-// switch between single/double buffer, and make the window take
-// over the screen.
-//
-// Normally the program makes a single window with a child GL window.
-// This simulates a program where the 3D display is surrounded by
-// control knobs.  Running the program with an argument will
-// make it make a seperate GL window from the controls window.  This
-// simulates a (older?) style program where the graphics display is
-// a different window than the controls.
-//
-// This program reports how many times it redraws the window to
-// stdout, so you can see how much time it is wasting.  It appears
-// to be impossible to prevent X from sending redundant resize
-// events, so there are extra redraws.  But the way I have the
-// code arranged here seems to be keeping that to a minimu.
-//
-// Apparently unavoidable bugs:
-//
-// Turning the border on causes an unnecessary redraw.
-//
-// Turning off full screen when the border is on causes an unnecessary
-// resize and redraw when the program turns the border on.
-//
-// If it is a separate window, turning double buffering on and off
-// will cause the window to raise, deiconize, and possibly move.  You
-// can avoid this by making the Fl_Gl_Window a child of a normal
-// window.
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Single_Window.H>
-#include <FL/Fl_Hor_Slider.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Toggle_Light_Button.H>
-#include <FL/math.h>
-#include <FL/fl_ask.H>
-#include <FL/Fl_Browser.H>
-#include <stdio.h>
-
-#if HAVE_GL
-#include <FL/gl.h>
-#include <FL/Fl_Gl_Window.H>
-
-class shape_window : public Fl_Gl_Window {
-  void draw();
-public:
-  int sides;
-  shape_window(int x,int y,int w,int h,const char *l=0);
-};
-
-shape_window::shape_window(int x,int y,int w,int h,const char *l) :
-Fl_Gl_Window(x,y,w,h,l) {
-  sides = 3;
-}
-
-void shape_window::draw() {
-  printf("drawing size %d %d\n",w(),h());
-  if (!valid()) {
-    valid(1);
-//  printf("init\n");
-    glLoadIdentity();
-    glViewport(0,0,pixel_w(),pixel_h());
-  }
-  glClear(GL_COLOR_BUFFER_BIT);
-  glColor3f(.5,.6,.7);
-  glBegin(GL_POLYGON);
-  for (int j = 0; j < sides; j ++) {
-    double ang = j*2*M_PI/sides;
-    glVertex3f(cos(ang),sin(ang),0);
-  }
-  glEnd();
-}
-
-#else
-
-#include <FL/fl_draw.H>
-
-class shape_window : public Fl_Window {
-  void draw();
-public:
-  int sides;
-  shape_window(int x,int y,int w,int h,const char *l=0);
-};
-
-shape_window::shape_window(int x,int y,int w,int h,const char *l) :
-Fl_Window(x,y,w,h,l) {
-  sides = 3;
-}
-
-void shape_window::draw() {
-  fl_color(0);
-  fl_rectf(0,0,w(),h());
-  fl_font(0,20);
-  fl_color(7);
-  fl_draw("This requires GL",0,0,w(),h(),FL_ALIGN_CENTER);
-}
-
-#endif
-
-class fullscreen_window : public Fl_Single_Window {
-  public:
-  fullscreen_window(int W, int H, const char *t=0);
-  int handle (int e);
-  Fl_Toggle_Light_Button *b3;
-  Fl_Toggle_Light_Button *b4;
-};
-
-fullscreen_window::fullscreen_window(int W, int H, const char *t) : Fl_Single_Window(W, H, t) { 
-
-}
-
-int fullscreen_window::handle(int e) {
-  if (e == FL_FULLSCREEN) {
-    printf("Received FL_FULLSCREEN event\n");
-    b3->value(fullscreen_active());
-  }
-  if (Fl_Single_Window::handle(e)) return 1;
-  return 0;
-}
-
-void sides_cb(Fl_Widget *o, void *p) {
-  shape_window *sw = (shape_window *)p;
-  sw->sides = int(((Fl_Slider *)o)->value());
-  sw->redraw();
-}
-
-#if HAVE_GL
-void double_cb(Fl_Widget *o, void *p) {
-  shape_window *sw = (shape_window *)p;
-  int d = ((Fl_Button *)o)->value();
-  sw->mode(d ? Fl_Mode(FL_DOUBLE|FL_RGB) : FL_RGB);
-}
-#else
-void double_cb(Fl_Widget *, void *) {}
-#endif
-
-void border_cb(Fl_Widget *o, void *p) {
-  Fl_Window *w = (Fl_Window *)p;
-  int d = ((Fl_Button *)o)->value();
-  w->border(d);
-#if defined(WIN32) || defined(__APPLE__)
-  int wx = w->x(), wy = w->y();
-  w->hide(); w->show();
-  w->position(wx, wy);
-#endif
-}
-
-Fl_Button *border_button;
-void fullscreen_cb(Fl_Widget *o, void *p) {
-  Fl_Window *w = (Fl_Window *)p;
-  int d = ((Fl_Button *)o)->value();
-  if (d) {
-    w->fullscreen();
-#ifndef WIN32 // update our border state in case border was turned off
-    border_button->value(w->border());
-#endif
-  } else {
-    w->fullscreen_off();
-  }
-}
-
-void allscreens_cb(Fl_Widget *o, void *p) {
-  Fl_Window *w = (Fl_Window *)p;
-  int d = ((Fl_Button *)o)->value();
-  if (d) {
-    int top, bottom, left, right;
-    int top_y, bottom_y, left_x, right_x;
-
-    int sx, sy, sw, sh;
-
-    top = bottom = left = right = 0;
-
-    Fl::screen_xywh(sx, sy, sw, sh, 0);
-    top_y = sy;
-    bottom_y = sy + sh;
-    left_x = sx;
-    right_x = sx + sw;
-
-    for (int i = 1;i < Fl::screen_count();i++) {
-      Fl::screen_xywh(sx, sy, sw, sh, i);
-      if (sy < top_y) {
-        top = i;
-        top_y = sy;
-      }
-      if ((sy + sh) > bottom_y) {
-        bottom = i;
-        bottom_y = sy + sh;
-      }
-      if (sx < left_x) {
-        left = i;
-        left_x = sx;
-      }
-      if ((sx + sw) > right_x) {
-        right = i;
-        right_x = sx + sw;
-      }
-    }
-
-    w->fullscreen_screens(top, bottom, left, right);
-  } else {
-    w->fullscreen_screens(-1, -1, -1, -1);
-  }
-}
-
-void update_screeninfo(Fl_Widget *b, void *p) {
-    Fl_Browser *browser = (Fl_Browser *)p;
-    int x, y, w, h;
-    char line[128];
-    browser->clear();
-
-    sprintf(line, "Main screen work area: %dx%d@%d,%d", Fl::w(), Fl::h(), Fl::x(), Fl::y());
-    browser->add(line);
-    Fl::screen_work_area(x, y, w, h);
-    sprintf(line, "Mouse screen work area: %dx%d@%d,%d", w, h, x, y);
-    browser->add(line);
-    for (int n = 0; n < Fl::screen_count(); n++) {
-	int x, y, w, h;
-        float dpih, dpiv;
-	Fl::screen_xywh(x, y, w, h, n);
-        Fl::screen_dpi(dpih, dpiv, n);
-        sprintf(line, "Screen %d: %dx%d@%d,%d DPI:%.1fx%.1f", n, w, h, x, y, dpih, dpiv);
-	browser->add(line);
-	Fl::screen_work_area(x, y, w, h, n);
-	sprintf(line, "Work area %d: %dx%d@%d,%d", n, w, h, x, y);
-	browser->add(line);
-    }
-}
-
-#include <stdlib.h>
-
-void exit_cb(Fl_Widget *, void *) {
-  exit(0);
-}
-
-#define NUMB 8
-
-int twowindow = 0;
-int initfull = 0;
-int arg(int, char **argv, int &i) {
-  if (argv[i][1] == '2') {twowindow = 1; i++; return 1;}
-  if (argv[i][1] == 'f') {initfull = 1; i++; return 1;}
-  return 0;
-}
-
-int main(int argc, char **argv) {
-
-  Fl::use_high_res_GL(1);
-  int i=0;
-  if (Fl::args(argc,argv,i,arg) < argc)
-    Fl::fatal("Options are:\n -2 = 2 windows\n -f = startup fullscreen\n%s",Fl::help);
-
-  fullscreen_window window(400,400+30*NUMB); window.end();
-
-  shape_window sw(10,10,window.w()-20,window.h()-30*NUMB-120);
-
-#if HAVE_GL
-  sw.mode(FL_RGB);
-#endif
-
-  Fl_Window *w;
-  if (twowindow) {	// make it's own window
-    sw.resizable(&sw);
-    w = &sw;
-    window.set_modal();	// makes controls stay on top when fullscreen pushed
-    argc--;
-    sw.show();
-  } else {		// otherwise make a subwindow
-    window.add(sw);
-    window.resizable(&sw);
-    w = &window;
-  }
-
-  window.begin();
-
-  int y = window.h()-30*NUMB-105;
-  Fl_Hor_Slider slider(50,y,window.w()-60,30,"Sides:");
-  slider.align(FL_ALIGN_LEFT);
-  slider.callback(sides_cb,&sw);
-  slider.value(sw.sides);
-  slider.step(1);
-  slider.bounds(3,40);
-  y+=30;
-
-  Fl_Toggle_Light_Button b1(50,y,window.w()-60,30,"Double Buffered");
-  b1.callback(double_cb,&sw);
-  y+=30;
-
-  Fl_Input i1(50,y,window.w()-60,30, "Input");
-  y+=30;
-
-  Fl_Toggle_Light_Button b2(50,y,window.w()-60,30,"Border");
-  b2.callback(border_cb,w);
-  b2.set();
-  border_button = &b2;
-  y+=30;
-
-  window.b3 = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"FullScreen");
-  window.b3->callback(fullscreen_cb,w);
-  y+=30;
-
-  window.b4 = new Fl_Toggle_Light_Button(50,y,window.w()-60,30,"All Screens");
-  window.b4->callback(allscreens_cb,w);
-  y+=30;
-
-  Fl_Button eb(50,y,window.w()-60,30,"Exit");
-  eb.callback(exit_cb);
-  y+=30;
-
-  Fl_Browser *browser = new Fl_Browser(50,y,window.w()-60,100);
-  update_screeninfo(0, browser);
-  y+=100;
-  
-  Fl_Button update(50,y,window.w()-60,30,"Update");
-  update.callback(update_screeninfo, browser);
-  y+=30;
-
-  if (initfull) {window.b3->set(); window.b3->do_callback();}
-
-  window.end();
-  window.show(argc,argv);
-  
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/gl_overlay.cxx
+++ /dev/null
@@ -1,149 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL overlay test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Hor_Slider.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/math.h>
-
-#if !HAVE_GL
-#include <FL/Fl_Box.H>
-class shape_window : public Fl_Box {
-public:	
-  int sides;
-  shape_window(int x,int y,int w,int h,const char *l=0)
-    :Fl_Box(FL_DOWN_BOX,x,y,w,h,l){
-      label("This demo does\nnot work without GL");
-  }
-};
-#else
-#include <FL/gl.h>
-#include <FL/Fl_Gl_Window.H>
-
-class shape_window : public Fl_Gl_Window {
-  void draw();
-  void draw_overlay();
-public:
-  int sides;
-  int overlay_sides;
-  shape_window(int x,int y,int w,int h,const char *l=0);
-};
-
-shape_window::shape_window(int x,int y,int w,int h,const char *l) :
-Fl_Gl_Window(x,y,w,h,l) {
-  sides = overlay_sides = 3;
-}
-
-void shape_window::draw() {
-// the valid() property may be used to avoid reinitializing your
-// GL transformation for each redraw:
-  if (!valid()) {
-    valid(1);
-    glLoadIdentity();
-    glViewport(0,0,pixel_w(),pixel_h());
-  }
-// draw an amazing but slow graphic:
-  glClear(GL_COLOR_BUFFER_BIT);
-  //  for (int j=1; j<=1000; j++) {
-    glBegin(GL_POLYGON);
-    for (int j=0; j<sides; j++) {
-      double ang = j*2*M_PI/sides;
-      glColor3f(float(j)/sides,float(j)/sides,float(j)/sides);
-      glVertex3f(cos(ang),sin(ang),0);
-    }
-    glEnd();
-  // }
-}
-
-void shape_window::draw_overlay() {
-// the valid() property may be used to avoid reinitializing your
-// GL transformation for each redraw:
-  if (!valid()) {
-    valid(1);
-    glLoadIdentity();
-    glViewport(0,0,pixel_w(),pixel_h());
-  }
-// draw an amazing graphic:
-  gl_color(FL_RED);
-  glBegin(GL_LINE_LOOP);
-  for (int j=0; j<overlay_sides; j++) {
-    double ang = j*2*M_PI/overlay_sides;
-    glVertex3f(cos(ang),sin(ang),0);
-  }
-  glEnd();
-}
-#endif
-
-// when you change the data, as in this callback, you must call redraw():
-void sides_cb(Fl_Widget *o, void *p) {
-  shape_window *sw = (shape_window *)p;
-  sw->sides = int(((Fl_Slider *)o)->value());
-  sw->redraw();
-}
-
-#if HAVE_GL
-void overlay_sides_cb(Fl_Widget *o, void *p) {
-  shape_window *sw = (shape_window *)p;
-  sw->overlay_sides = int(((Fl_Slider *)o)->value());
-  sw->redraw_overlay();
-}
-#endif
-#include <stdio.h>
-int main(int argc, char **argv) {
-
-  Fl::use_high_res_GL(1);
-  Fl_Window window(300, 370);
-
-  shape_window sw(10, 75, window.w()-20, window.h()-90);
-//sw.mode(FL_RGB);
-  window.resizable(&sw);
-
-  Fl_Hor_Slider slider(60, 5, window.w()-70, 30, "Sides:");
-  slider.align(FL_ALIGN_LEFT);
-  slider.callback(sides_cb,&sw);
-  slider.value(sw.sides);
-  slider.step(1);
-  slider.bounds(3,40);
-
-  Fl_Hor_Slider oslider(60, 40, window.w()-70, 30, "Overlay:");
-  oslider.align(FL_ALIGN_LEFT);
-#if HAVE_GL
-  oslider.callback(overlay_sides_cb,&sw);
-  oslider.value(sw.overlay_sides);
-#endif
-  oslider.step(1);
-  oslider.bounds(3,40);
-
-  window.end();
-  window.show(argc,argv);
-#if HAVE_GL
-  printf("Can do overlay = %d\n", sw.can_do_overlay());
-  sw.show();
-  sw.redraw_overlay();
-#else
-  sw.show();
-#endif
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/glpuzzle.cxx
+++ /dev/null
@@ -1,1478 +1,0 @@
-//
-// "$Id$"
-//
-// OpenGL puzzle demo for the Fast Light Tool Kit (FLTK).
-//
-// This is a GLUT demo program to demonstrate fltk's GLUT emulation.
-// Search for "fltk" to find all the changes
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// this block added for fltk's distribtion so it will compile w/o OpenGL:
-#include <config.h>
-#if !HAVE_GL || !HAVE_GL_GLU_H
-#include <FL/Fl.H>
-#include <FL/fl_message.H>
-int main(int, char**) {
-  fl_alert("This demo does not work without GL and GLU");
-  return 1;
-}
-#else
-// end of added block
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <time.h>
-#include <math.h>
-#include <FL/glut.H>	// changed for fltk
-#include <FL/glu.h>     // added for fltk
-#include "trackball.c"	// changed from trackball.h for fltk
-
-#define WIDTH 4
-#define HEIGHT 5
-#define PIECES 10
-#define OFFSETX -2
-#define OFFSETY -2.5
-#define OFFSETZ -0.5
-
-typedef char Config[HEIGHT][WIDTH];
-
-struct puzzle {
-  struct puzzle *backptr;
-  struct puzzle *solnptr;
-  Config pieces;
-  struct puzzle *next;
-  unsigned hashvalue;
-};
-
-#define HASHSIZE 10691
-
-struct puzzlelist {
-  struct puzzle *puzzle;
-  struct puzzlelist *next;
-};
-
-static char convert[PIECES + 1] =
-{0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4};
-
-static unsigned char colors[PIECES + 1][3] =
-{
-  {0, 0, 0},
-  {255, 255, 127},
-  {255, 255, 127},
-  {255, 255, 127},
-  {255, 255, 127},
-  {255, 127, 255},
-  {255, 127, 255},
-  {255, 127, 255},
-  {255, 127, 255},
-  {255, 127, 127},
-  {255, 255, 255},
-};
-
-void changeState(void);
-
-static struct puzzle *hashtable[HASHSIZE];
-static struct puzzle *startPuzzle;
-static struct puzzlelist *puzzles;
-static struct puzzlelist *lastentry;
-
-int curX, curY, visible;
-
-#define MOVE_SPEED 0.2
-static unsigned char movingPiece;
-static float move_x, move_y;
-static float curquat[4];
-static int doubleBuffer = 1;
-static int depth = 1;
-
-static char xsize[PIECES + 1] =
-{0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
-static char ysize[PIECES + 1] =
-{0, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2};
-static float zsize[PIECES + 1] =
-{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.6};
-
-static Config startConfig =
-{
-  {8, 10, 10, 7},
-  {8, 10, 10, 7},
-  {6, 9, 9, 5},
-  {6, 4, 3, 5},
-  {2, 0, 0, 1}
-};
-
-static Config thePuzzle =
-{
-  {8, 10, 10, 7},
-  {8, 10, 10, 7},
-  {6, 9, 9, 5},
-  {6, 4, 3, 5},
-  {2, 0, 0, 1}
-};
-
-static int xadds[4] =
-{-1, 0, 1, 0};
-static int yadds[4] =
-{0, -1, 0, 1};
-
-static long W = 400, H = 300;
-static GLint viewport[4];
-
-#define srandom srand
-#define random() (rand() >> 2)
-
-unsigned
-hash(Config config)
-{
-  int i, j, value;
-
-  value = 0;
-  for (i = 0; i < HEIGHT; i++) {
-    for (j = 0; j < WIDTH; j++) {
-      value = value + convert[(int)config[i][j]];
-      value *= 6;
-    }
-  }
-  return (value);
-}
-
-int
-solution(Config config)
-{
-  if (config[4][1] == 10 && config[4][2] == 10)
-    return (1);
-  return (0);
-}
-
-float boxcoords[][3] =
-{
-  {0.2, 0.2, 0.9},
-  {0.8, 0.2, 0.9},
-  {0.8, 0.8, 0.9},
-  {0.2, 0.8, 0.9},
-  {0.2, 0.1, 0.8},
-  {0.8, 0.1, 0.8},
-  {0.9, 0.2, 0.8},
-  {0.9, 0.8, 0.8},
-  {0.8, 0.9, 0.8},
-  {0.2, 0.9, 0.8},
-  {0.1, 0.8, 0.8},
-  {0.1, 0.2, 0.8},
-  {0.2, 0.1, 0.2},
-  {0.8, 0.1, 0.2},
-  {0.9, 0.2, 0.2},
-  {0.9, 0.8, 0.2},
-  {0.8, 0.9, 0.2},
-  {0.2, 0.9, 0.2},
-  {0.1, 0.8, 0.2},
-  {0.1, 0.2, 0.2},
-  {0.2, 0.2, 0.1},
-  {0.8, 0.2, 0.1},
-  {0.8, 0.8, 0.1},
-  {0.2, 0.8, 0.1},
-};
-
-float boxnormals[][3] =
-{
-  {0, 0, 1},            /* 0 */
-  {0, 1, 0},
-  {1, 0, 0},
-  {0, 0, -1},
-  {0, -1, 0},
-  {-1, 0, 0},
-  {0.7071, 0.7071, 0.0000},  /* 6 */
-  {0.7071, -0.7071, 0.0000},
-  {-0.7071, 0.7071, 0.0000},
-  {-0.7071, -0.7071, 0.0000},
-  {0.7071, 0.0000, 0.7071},  /* 10 */
-  {0.7071, 0.0000, -0.7071},
-  {-0.7071, 0.0000, 0.7071},
-  {-0.7071, 0.0000, -0.7071},
-  {0.0000, 0.7071, 0.7071},  /* 14 */
-  {0.0000, 0.7071, -0.7071},
-  {0.0000, -0.7071, 0.7071},
-  {0.0000, -0.7071, -0.7071},
-  {0.5774, 0.5774, 0.5774},  /* 18 */
-  {0.5774, 0.5774, -0.5774},
-  {0.5774, -0.5774, 0.5774},
-  {0.5774, -0.5774, -0.5774},
-  {-0.5774, 0.5774, 0.5774},
-  {-0.5774, 0.5774, -0.5774},
-  {-0.5774, -0.5774, 0.5774},
-  {-0.5774, -0.5774, -0.5774},
-};
-
-int boxfaces[][4] =
-{
-  {0, 1, 2, 3},         /* 0 */
-  {9, 8, 16, 17},
-  {6, 14, 15, 7},
-  {20, 23, 22, 21},
-  {12, 13, 5, 4},
-  {19, 11, 10, 18},
-  {7, 15, 16, 8},       /* 6 */
-  {13, 14, 6, 5},
-  {18, 10, 9, 17},
-  {19, 12, 4, 11},
-  {1, 6, 7, 2},         /* 10 */
-  {14, 21, 22, 15},
-  {11, 0, 3, 10},
-  {20, 19, 18, 23},
-  {3, 2, 8, 9},         /* 14 */
-  {17, 16, 22, 23},
-  {4, 5, 1, 0},
-  {20, 21, 13, 12},
-  {2, 7, 8, -1},        /* 18 */
-  {16, 15, 22, -1},
-  {5, 6, 1, -1},
-  {13, 21, 14, -1},
-  {10, 3, 9, -1},
-  {18, 17, 23, -1},
-  {11, 4, 0, -1},
-  {20, 12, 19, -1},
-};
-
-#define NBOXFACES (sizeof(boxfaces)/sizeof(boxfaces[0]))
-
-/* Draw a box.  Bevel as desired. */
-void
-drawBox(int piece, float xoff, float yoff)
-{
-  int xlen, ylen;
-  int i, k;
-  float x, y, z;
-  float zlen;
-  float *v;
-
-  xlen = xsize[piece];
-  ylen = ysize[piece];
-  zlen = zsize[piece];
-
-  glColor3ubv(colors[piece]);
-  glBegin(GL_QUADS);
-  for (i = 0; i < 18; i++) {
-    glNormal3fv(boxnormals[i]);
-    for (k = 0; k < 4; k++) {
-      if (boxfaces[i][k] == -1)
-        continue;
-      v = boxcoords[boxfaces[i][k]];
-      x = v[0] + OFFSETX;
-      if (v[0] > 0.5)
-        x += xlen - 1;
-      y = v[1] + OFFSETY;
-      if (v[1] > 0.5)
-        y += ylen - 1;
-      z = v[2] + OFFSETZ;
-      if (v[2] > 0.5)
-        z += zlen - 1;
-      glVertex3f(xoff + x, yoff + y, z);
-    }
-  }
-  glEnd();
-  glBegin(GL_TRIANGLES);
-  for (i = 18; i < int(NBOXFACES); i++) {
-    glNormal3fv(boxnormals[i]);
-    for (k = 0; k < 3; k++) {
-      if (boxfaces[i][k] == -1)
-        continue;
-      v = boxcoords[boxfaces[i][k]];
-      x = v[0] + OFFSETX;
-      if (v[0] > 0.5)
-        x += xlen - 1;
-      y = v[1] + OFFSETY;
-      if (v[1] > 0.5)
-        y += ylen - 1;
-      z = v[2] + OFFSETZ;
-      if (v[2] > 0.5)
-        z += zlen - 1;
-      glVertex3f(xoff + x, yoff + y, z);
-    }
-  }
-  glEnd();
-}
-
-float containercoords[][3] =
-{
-  {-0.1, -0.1, 1.0},
-  {-0.1, -0.1, -0.1},
-  {4.1, -0.1, -0.1},
-  {4.1, -0.1, 1.0},
-  {1.0, -0.1, 0.6},     /* 4 */
-  {3.0, -0.1, 0.6},
-  {1.0, -0.1, 0.0},
-  {3.0, -0.1, 0.0},
-  {1.0, 0.0, 0.0},      /* 8 */
-  {3.0, 0.0, 0.0},
-  {3.0, 0.0, 0.6},
-  {1.0, 0.0, 0.6},
-  {0.0, 0.0, 1.0},      /* 12 */
-  {4.0, 0.0, 1.0},
-  {4.0, 0.0, 0.0},
-  {0.0, 0.0, 0.0},
-  {0.0, 5.0, 0.0},      /* 16 */
-  {0.0, 5.0, 1.0},
-  {4.0, 5.0, 1.0},
-  {4.0, 5.0, 0.0},
-  {-0.1, 5.1, -0.1},    /* 20 */
-  {4.1, 5.1, -0.1},
-  {4.1, 5.1, 1.0},
-  {-0.1, 5.1, 1.0},
-};
-
-float containernormals[][3] =
-{
-  {0, -1, 0},
-  {0, -1, 0},
-  {0, -1, 0},
-  {0, -1, 0},
-  {0, -1, 0},
-  {0, 1, 0},
-  {0, 1, 0},
-  {0, 1, 0},
-  {1, 0, 0},
-  {1, 0, 0},
-  {1, 0, 0},
-  {-1, 0, 0},
-  {-1, 0, 0},
-  {-1, 0, 0},
-  {0, 1, 0},
-  {0, 0, -1},
-  {0, 0, -1},
-  {0, 0, 1},
-  {0, 0, 1},
-  {0, 0, 1},
-  {0, 0, 1},
-  {0, 0, 1},
-  {0, 0, 1},
-  {0, 0, 1},
-};
-
-int containerfaces[][4] =
-{
-  {1, 6, 4, 0},
-  {0, 4, 5, 3},
-  {1, 2, 7, 6},
-  {7, 2, 3, 5},
-  {16, 19, 18, 17},
-
-  {23, 22, 21, 20},
-  {12, 11, 8, 15},
-  {10, 13, 14, 9},
-
-  {15, 16, 17, 12},
-  {2, 21, 22, 3},
-  {6, 8, 11, 4},
-
-  {1, 0, 23, 20},
-  {14, 13, 18, 19},
-  {9, 7, 5, 10},
-
-  {12, 13, 10, 11},
-
-  {1, 20, 21, 2},
-  {4, 11, 10, 5},
-
-  {15, 8, 19, 16},
-  {19, 8, 9, 14},
-  {8, 6, 7, 9},
-  {0, 3, 13, 12},
-  {13, 3, 22, 18},
-  {18, 22, 23, 17},
-  {17, 23, 0, 12},
-};
-
-#define NCONTFACES (sizeof(containerfaces)/sizeof(containerfaces[0]))
-
-/* Draw the container */
-void
-drawContainer(void)
-{
-  int i, k;
-  float *v;
-
-  /* Y is reversed here because the model has it reversed */
-
-  /* Arbitrary bright wood-like color */
-  glColor3ub(209, 103, 23);
-  glBegin(GL_QUADS);
-  for (i = 0; i < int(NCONTFACES); i++) {
-    v = containernormals[i];
-    glNormal3f(v[0], -v[1], v[2]);
-    for (k = 3; k >= 0; k--) {
-      v = containercoords[containerfaces[i][k]];
-      glVertex3f(v[0] + OFFSETX, -(v[1] + OFFSETY), v[2] + OFFSETZ);
-    }
-  }
-  glEnd();
-}
-
-void
-drawAll(void)
-{
-  int i, j;
-  int piece;
-  char done[PIECES + 1];
-  float m[4][4];
-
-  build_rotmatrix(m, curquat);
-  glMatrixMode(GL_MODELVIEW);
-  glLoadIdentity();
-  glTranslatef(0, 0, -10);
-  glMultMatrixf(&(m[0][0]));
-  glRotatef(180, 0, 0, 1);
-
-  if (depth) {
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-  } else {
-    glClear(GL_COLOR_BUFFER_BIT);
-  }
-  for (i = 1; i <= PIECES; i++) {
-    done[i] = 0;
-  }
-  glLoadName(0);
-  drawContainer();
-  for (i = 0; i < HEIGHT; i++) {
-    for (j = 0; j < WIDTH; j++) {
-      piece = thePuzzle[i][j];
-      if (piece == 0)
-        continue;
-      if (done[piece])
-        continue;
-      done[piece] = 1;
-      glLoadName(piece);
-      if (piece == movingPiece) {
-        drawBox(piece, move_x, move_y);
-      } else {
-        drawBox(piece, j, i);
-      }
-    }
-  }
-}
-
-void
-redraw(void)
-{
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  gluPerspective(45, viewport[2]*1.0/viewport[3], 0.1, 100.0);
-
-  drawAll();
-
-  if (doubleBuffer)
-    glutSwapBuffers();
-  else
-    glFinish();
-}
-
-void
-solidifyChain(struct puzzle *puzzle)
-{
-  int i;
-  char buf[256];
-
-  i = 0;
-  while (puzzle->backptr) {
-    i++;
-    puzzle->backptr->solnptr = puzzle;
-    puzzle = puzzle->backptr;
-  }
-  sprintf(buf, "%d moves to complete!", i);
-  glutSetWindowTitle(buf);
-}
-
-int
-addConfig(Config config, struct puzzle *back)
-{
-  unsigned hashvalue;
-  struct puzzle *newpiece;
-  struct puzzlelist *newlistentry;
-
-  hashvalue = hash(config);
-
-  newpiece = hashtable[hashvalue % HASHSIZE];
-  while (newpiece != NULL) {
-    if (newpiece->hashvalue == hashvalue) {
-      int i, j;
-
-      for (i = 0; i < WIDTH; i++) {
-        for (j = 0; j < HEIGHT; j++) {
-          if (convert[(int)config[j][i]] !=
-            convert[(int)newpiece->pieces[j][i]])
-            goto nomatch;
-        }
-      }
-      return 0;
-    }
-  nomatch:
-    newpiece = newpiece->next;
-  }
-
-  newpiece = (struct puzzle *) malloc(sizeof(struct puzzle));
-  newpiece->next = hashtable[hashvalue % HASHSIZE];
-  newpiece->hashvalue = hashvalue;
-  memcpy(newpiece->pieces, config, HEIGHT * WIDTH);
-  newpiece->backptr = back;
-  newpiece->solnptr = NULL;
-  hashtable[hashvalue % HASHSIZE] = newpiece;
-
-  newlistentry = (struct puzzlelist *) malloc(sizeof(struct puzzlelist));
-  newlistentry->puzzle = newpiece;
-  newlistentry->next = NULL;
-
-  if (lastentry) {
-    lastentry->next = newlistentry;
-  } else {
-    puzzles = newlistentry;
-  }
-  lastentry = newlistentry;
-
-  if (back == NULL) {
-    startPuzzle = newpiece;
-  }
-  if (solution(config)) {
-    solidifyChain(newpiece);
-    return 1;
-  }
-  return 0;
-}
-
-/* Checks if a space can move */
-int
-canmove0(Config pieces, int x, int y, int dir, Config newpieces)
-{
-  char piece;
-  int xadd, yadd;
-  int l, m;
-
-  xadd = xadds[dir];
-  yadd = yadds[dir];
-
-  if (x + xadd < 0 || x + xadd >= WIDTH ||
-    y + yadd < 0 || y + yadd >= HEIGHT)
-    return 0;
-  piece = pieces[y + yadd][x + xadd];
-  if (piece == 0)
-    return 0;
-  memcpy(newpieces, pieces, HEIGHT * WIDTH);
-  for (l = 0; l < WIDTH; l++) {
-    for (m = 0; m < HEIGHT; m++) {
-      if (newpieces[m][l] == piece)
-        newpieces[m][l] = 0;
-    }
-  }
-  xadd = -xadd;
-  yadd = -yadd;
-  for (l = 0; l < WIDTH; l++) {
-    for (m = 0; m < HEIGHT; m++) {
-      if (pieces[m][l] == piece) {
-        int newx, newy;
-
-        newx = l + xadd;
-        newy = m + yadd;
-        if (newx < 0 || newx >= WIDTH ||
-          newy < 0 || newy >= HEIGHT)
-          return 0;
-        if (newpieces[newy][newx] != 0)
-          return 0;
-        newpieces[newy][newx] = piece;
-      }
-    }
-  }
-  return 1;
-}
-
-/* Checks if a piece can move */
-int
-canmove(Config pieces, int x, int y, int dir, Config newpieces)
-{
-  int xadd, yadd;
-
-  xadd = xadds[dir];
-  yadd = yadds[dir];
-
-  if (x + xadd < 0 || x + xadd >= WIDTH ||
-    y + yadd < 0 || y + yadd >= HEIGHT)
-    return 0;
-  if (pieces[y + yadd][x + xadd] == pieces[y][x]) {
-    return canmove(pieces, x + xadd, y + yadd, dir, newpieces);
-  }
-  if (pieces[y + yadd][x + xadd] != 0)
-    return 0;
-  return canmove0(pieces, x + xadd, y + yadd, (dir + 2) % 4, newpieces);
-}
-
-int
-generateNewConfigs(struct puzzle *puzzle)
-{
-  int i, j, k;
-  Config pieces;
-  Config newpieces;
-
-  memcpy(pieces, puzzle->pieces, HEIGHT * WIDTH);
-  for (i = 0; i < WIDTH; i++) {
-    for (j = 0; j < HEIGHT; j++) {
-      if (pieces[j][i] == 0) {
-        for (k = 0; k < 4; k++) {
-          if (canmove0(pieces, i, j, k, newpieces)) {
-            if (addConfig(newpieces, puzzle))
-              return 1;
-          }
-        }
-      }
-    }
-  }
-  return 0;
-}
-
-void
-freeSolutions(void)
-{
-  struct puzzlelist *nextpuz;
-  struct puzzle *puzzle, *next;
-  int i;
-
-  while (puzzles) {
-    nextpuz = puzzles->next;
-    free((char *) puzzles);
-    puzzles = nextpuz;
-  }
-  lastentry = NULL;
-  for (i = 0; i < HASHSIZE; i++) {
-    puzzle = hashtable[i];
-    hashtable[i] = NULL;
-    while (puzzle) {
-      next = puzzle->next;
-      free((char *) puzzle);
-      puzzle = next;
-    }
-  }
-  startPuzzle = NULL;
-}
-
-int
-continueSolving(void)
-{
-  struct puzzle *nextpuz;
-  int i, j;
-  int movedPiece;
-  int movedir;
-  int fromx, fromy;
-  int tox, toy;
-
-  if (startPuzzle == NULL)
-    return 0;
-  if (startPuzzle->solnptr == NULL) {
-    freeSolutions();
-    return 0;
-  }
-  nextpuz = startPuzzle->solnptr;
-  movedPiece = 0;
-  movedir = 0;
-  for (i = 0; i < HEIGHT; i++) {
-    for (j = 0; j < WIDTH; j++) {
-      if (startPuzzle->pieces[i][j] != nextpuz->pieces[i][j]) {
-        if (startPuzzle->pieces[i][j]) {
-          movedPiece = startPuzzle->pieces[i][j];
-          fromx = j;
-          fromy = i;
-          if (i < HEIGHT - 1 && nextpuz->pieces[i + 1][j] == movedPiece) {
-            movedir = 3;
-          } else {
-            movedir = 2;
-          }
-          goto found_piece;
-        } else {
-          movedPiece = nextpuz->pieces[i][j];
-          if (i < HEIGHT - 1 &&
-            startPuzzle->pieces[i + 1][j] == movedPiece) {
-            fromx = j;
-            fromy = i + 1;
-            movedir = 1;
-          } else {
-            fromx = j + 1;
-            fromy = i;
-            movedir = 0;
-          }
-          goto found_piece;
-        }
-      }
-    }
-  }
-  glutSetWindowTitle((char *)"What!  No change?");
-  freeSolutions();
-  return 0;
-
-found_piece:
-  if (!movingPiece) {
-    movingPiece = movedPiece;
-    move_x = fromx;
-    move_y = fromy;
-  }
-  move_x += xadds[movedir] * MOVE_SPEED;
-  move_y += yadds[movedir] * MOVE_SPEED;
-
-  tox = fromx + xadds[movedir];
-  toy = fromy + yadds[movedir];
-
-  if (move_x > tox - MOVE_SPEED / 2 && move_x < tox + MOVE_SPEED / 2 &&
-    move_y > toy - MOVE_SPEED / 2 && move_y < toy + MOVE_SPEED / 2) {
-    startPuzzle = nextpuz;
-    movingPiece = 0;
-  }
-  memcpy(thePuzzle, startPuzzle->pieces, HEIGHT * WIDTH);
-  changeState();
-  return 1;
-}
-
-int
-solvePuzzle(void)
-{
-  struct puzzlelist *nextpuz;
-  char buf[256];
-  int i;
-
-  if (solution(thePuzzle)) {
-    glutSetWindowTitle((char *)"Puzzle already solved!");
-    return 0;
-  }
-  addConfig(thePuzzle, NULL);
-  i = 0;
-
-  while (puzzles) {
-    i++;
-    if (generateNewConfigs(puzzles->puzzle))
-      break;
-    nextpuz = puzzles->next;
-    free((char *) puzzles);
-    puzzles = nextpuz;
-  }
-  if (puzzles == NULL) {
-    freeSolutions();
-    sprintf(buf, "I can't solve it! (%d positions examined)", i);
-    glutSetWindowTitle(buf);
-    return 1;
-  }
-  return 1;
-}
-
-int
-selectPiece(int mousex, int mousey)
-{
-  long hits;
-  GLuint selectBuf[1024];
-  GLuint closest;
-  GLuint dist;
-
-  glSelectBuffer(1024, selectBuf);
-  (void) glRenderMode(GL_SELECT);
-  glInitNames();
-
-  /* Because LoadName() won't work with no names on the stack */
-  glPushName(0);
-
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity();
-  gluPickMatrix(mousex, H - mousey, 4, 4, viewport);
-  gluPerspective(45, viewport[2]*1.0/viewport[3], 0.1, 100.0);
-
-  drawAll();
-
-  hits = glRenderMode(GL_RENDER);
-  if (hits <= 0) {
-    return 0;
-  }
-  closest = 0;
-  dist = 0xFFFFFFFFU; //2147483647;
-  while (hits) {
-    if (selectBuf[(hits - 1) * 4 + 1] < dist) {
-      dist = selectBuf[(hits - 1) * 4 + 1];
-      closest = selectBuf[(hits - 1) * 4 + 3];
-    }
-    hits--;
-  }
-  return closest;
-}
-
-void
-nukePiece(int piece)
-{
-  int i, j;
-
-  for (i = 0; i < HEIGHT; i++) {
-    for (j = 0; j < WIDTH; j++) {
-      if (thePuzzle[i][j] == piece) {
-        thePuzzle[i][j] = 0;
-      }
-    }
-  }
-}
-
-void
-multMatrices(const GLfloat a[16], const GLfloat b[16], GLfloat r[16])
-{
-  int i, j;
-
-  for (i = 0; i < 4; i++) {
-    for (j = 0; j < 4; j++) {
-      r[i * 4 + j] =
-        a[i * 4 + 0] * b[0 * 4 + j] +
-        a[i * 4 + 1] * b[1 * 4 + j] +
-        a[i * 4 + 2] * b[2 * 4 + j] +
-        a[i * 4 + 3] * b[3 * 4 + j];
-    }
-  }
-}
-
-void
-makeIdentity(GLfloat m[16])
-{
-  m[0 + 4 * 0] = 1;
-  m[0 + 4 * 1] = 0;
-  m[0 + 4 * 2] = 0;
-  m[0 + 4 * 3] = 0;
-  m[1 + 4 * 0] = 0;
-  m[1 + 4 * 1] = 1;
-  m[1 + 4 * 2] = 0;
-  m[1 + 4 * 3] = 0;
-  m[2 + 4 * 0] = 0;
-  m[2 + 4 * 1] = 0;
-  m[2 + 4 * 2] = 1;
-  m[2 + 4 * 3] = 0;
-  m[3 + 4 * 0] = 0;
-  m[3 + 4 * 1] = 0;
-  m[3 + 4 * 2] = 0;
-  m[3 + 4 * 3] = 1;
-}
-
-/*
-   ** inverse = invert(src)
- */
-int
-invertMatrix(const GLfloat src[16], GLfloat inverse[16])
-{
-  int i, j, k, swap;
-  double t;
-  GLfloat temp[4][4];
-
-  for (i = 0; i < 4; i++) {
-    for (j = 0; j < 4; j++) {
-      temp[i][j] = src[i * 4 + j];
-    }
-  }
-  makeIdentity(inverse);
-
-  for (i = 0; i < 4; i++) {
-    /* 
-       ** Look for largest element in column */
-    swap = i;
-    for (j = i + 1; j < 4; j++) {
-      if (fabs(temp[j][i]) > fabs(temp[i][i])) {
-        swap = j;
-      }
-    }
-
-    if (swap != i) {
-      /* 
-         ** Swap rows. */
-      for (k = 0; k < 4; k++) {
-        t = temp[i][k];
-        temp[i][k] = temp[swap][k];
-        temp[swap][k] = t;
-
-        t = inverse[i * 4 + k];
-        inverse[i * 4 + k] = inverse[swap * 4 + k];
-        inverse[swap * 4 + k] = t;
-      }
-    }
-    if (temp[i][i] == 0) {
-      /* 
-         ** No non-zero pivot.  The matrix is singular, which
-         shouldn't ** happen.  This means the user gave us a
-         bad matrix. */
-      return 0;
-    }
-    t = temp[i][i];
-    for (k = 0; k < 4; k++) {
-      temp[i][k] /= t;
-      inverse[i * 4 + k] /= t;
-    }
-    for (j = 0; j < 4; j++) {
-      if (j != i) {
-        t = temp[j][i];
-        for (k = 0; k < 4; k++) {
-          temp[j][k] -= temp[i][k] * t;
-          inverse[j * 4 + k] -= inverse[i * 4 + k] * t;
-        }
-      }
-    }
-  }
-  return 1;
-}
-
-/*
-   ** This is a screwball function.  What it does is the following:
-   ** Given screen x and y coordinates, compute the corresponding object space 
-   **   x and y coordinates given that the object space z is 0.9 + OFFSETZ.
-   ** Since the tops of (most) pieces are at z = 0.9 + OFFSETZ, we use that 
-   **   number.
- */
-int
-computeCoords(int piece, int mousex, int mousey,
-  GLfloat * selx, GLfloat * sely)
-{
-  GLfloat modelMatrix[16];
-  GLfloat projMatrix[16];
-  GLfloat finalMatrix[16];
-  GLfloat in[4];
-  GLfloat a, b, c, d;
-  GLfloat top, bot;
-  GLfloat z;
-  GLfloat w;
-  GLfloat height;
-
-  if (piece == 0)
-    return 0;
-  height = zsize[piece] - 0.1 + OFFSETZ;
-
-  glGetFloatv(GL_PROJECTION_MATRIX, projMatrix);
-  glGetFloatv(GL_MODELVIEW_MATRIX, modelMatrix);
-  multMatrices(modelMatrix, projMatrix, finalMatrix);
-  if (!invertMatrix(finalMatrix, finalMatrix))
-    return 0;
-
-  in[0] = (2.0 * (mousex - viewport[0]) / viewport[2]) - 1;
-  in[1] = (2.0 * ((H - mousey) - viewport[1]) / viewport[3]) - 1;
-
-  a = in[0] * finalMatrix[0 * 4 + 2] +
-    in[1] * finalMatrix[1 * 4 + 2] +
-    finalMatrix[3 * 4 + 2];
-  b = finalMatrix[2 * 4 + 2];
-  c = in[0] * finalMatrix[0 * 4 + 3] +
-    in[1] * finalMatrix[1 * 4 + 3] +
-    finalMatrix[3 * 4 + 3];
-  d = finalMatrix[2 * 4 + 3];
-
-  /* 
-     ** Ok, now we need to solve for z: **   (a + b z) / (c + d 
-
-     z) = height. ** ("height" is the height in object space we 
-
-     want to solve z for) ** ** ==>  a + b z = height c +
-     height d z **      bz - height d z = height c - a ** z =
-     (height c - a) / (b - height d) */
-  top = height * c - a;
-  bot = b - height * d;
-  if (bot == 0.0)
-    return 0;
-
-  z = top / bot;
-
-  /* 
-     ** Ok, no problem. ** Now we solve for x and y.  We know
-     that w = c + d z, so we compute it. */
-  w = c + d * z;
-
-  /* 
-     ** Now for x and y: */
-  *selx = (in[0] * finalMatrix[0 * 4 + 0] +
-    in[1] * finalMatrix[1 * 4 + 0] +
-    z * finalMatrix[2 * 4 + 0] +
-    finalMatrix[3 * 4 + 0]) / w - OFFSETX;
-  *sely = (in[0] * finalMatrix[0 * 4 + 1] +
-    in[1] * finalMatrix[1 * 4 + 1] +
-    z * finalMatrix[2 * 4 + 1] +
-    finalMatrix[3 * 4 + 1]) / w - OFFSETY;
-  return 1;
-}
-
-static int selected;
-static int selectx, selecty;
-static float selstartx, selstarty;
-
-void
-grabPiece(int piece, float selx, float sely)
-{
-  int hit;
-
-  selectx = int(selx);
-  selecty = int(sely);
-  if (selectx < 0 || selecty < 0 || selectx >= WIDTH || selecty >= HEIGHT) {
-    return;
-  }
-  hit = thePuzzle[selecty][selectx];
-  if (hit != piece)
-    return;
-  if (hit) {
-    movingPiece = hit;
-    while (selectx > 0 && thePuzzle[selecty][selectx - 1] == movingPiece) {
-      selectx--;
-    }
-    while (selecty > 0 && thePuzzle[selecty - 1][selectx] == movingPiece) {
-      selecty--;
-    }
-    move_x = selectx;
-    move_y = selecty;
-    selected = 1;
-    selstartx = selx;
-    selstarty = sely;
-  } else {
-    selected = 0;
-  }
-  changeState();
-}
-
-void
-moveSelection(float selx, float sely)
-{
-  float deltax, deltay;
-  int dir;
-  Config newpieces;
-
-  if (!selected)
-    return;
-  deltax = selx - selstartx;
-  deltay = sely - selstarty;
-
-  if (fabs(deltax) > fabs(deltay)) {
-    deltay = 0;
-    if (deltax > 0) {
-      if (deltax > 1)
-        deltax = 1;
-      dir = 2;
-    } else {
-      if (deltax < -1)
-        deltax = -1;
-      dir = 0;
-    }
-  } else {
-    deltax = 0;
-    if (deltay > 0) {
-      if (deltay > 1)
-        deltay = 1;
-      dir = 3;
-    } else {
-      if (deltay < -1)
-        deltay = -1;
-      dir = 1;
-    }
-  }
-  if (canmove(thePuzzle, selectx, selecty, dir, newpieces)) {
-    move_x = deltax + selectx;
-    move_y = deltay + selecty;
-    if (deltax > 0.5) {
-      memcpy(thePuzzle, newpieces, HEIGHT * WIDTH);
-      selectx++;
-      selstartx++;
-    } else if (deltax < -0.5) {
-      memcpy(thePuzzle, newpieces, HEIGHT * WIDTH);
-      selectx--;
-      selstartx--;
-    } else if (deltay > 0.5) {
-      memcpy(thePuzzle, newpieces, HEIGHT * WIDTH);
-      selecty++;
-      selstarty++;
-    } else if (deltay < -0.5) {
-      memcpy(thePuzzle, newpieces, HEIGHT * WIDTH);
-      selecty--;
-      selstarty--;
-    }
-  } else {
-    if (deltay > 0 && thePuzzle[selecty][selectx] == 10 &&
-      selectx == 1 && selecty == 3) {
-      /* Allow visual movement of solution piece outside of the 
-
-         box */
-      move_x = selectx;
-      move_y = sely - selstarty + selecty;
-    } else {
-      move_x = selectx;
-      move_y = selecty;
-    }
-  }
-}
-
-void
-dropSelection(void)
-{
-  if (!selected)
-    return;
-  movingPiece = 0;
-  selected = 0;
-  changeState();
-}
-
-static int left_mouse, middle_mouse;
-static int mousex, mousey;
-static int solving;
-static int spinning;
-static float lastquat[4];
-static int sel_piece;
-
-static void
-Reshape(int width, int height)
-{
-
-  W = width;
-  H = height;
-  glViewport(0, 0, W, H);
-  glGetIntegerv(GL_VIEWPORT, viewport);
-}
-
-void
-toggleSolve(void)
-{
-    if (solving) {
-      freeSolutions();
-      solving = 0;
-      glutChangeToMenuEntry(1, (char *)"Solving", 1);
-      glutSetWindowTitle((char *)"glpuzzle");
-      movingPiece = 0;
-    } else {
-      glutChangeToMenuEntry(1, (char *)"Stop solving", 1);
-      glutSetWindowTitle((char *)"Solving...");
-      if (solvePuzzle()) {
-        solving = 1;
-      }
-    }
-    changeState();
-    glutPostRedisplay();
-}
-
-void reset(void)
-{
-    if (solving) {
-      freeSolutions();
-      solving = 0;
-      glutChangeToMenuEntry(1, (char *)"Solving", 1);
-      glutSetWindowTitle((char *)"glpuzzle");
-      movingPiece = 0;
-      changeState();
-    }
-    memcpy(thePuzzle, startConfig, HEIGHT * WIDTH);
-    glutPostRedisplay();
-}
-
-void
-keyboard(unsigned char c, int x, int y)
-{
-  int piece;
-
-  switch (c) {
-  case 27:
-    exit(0);
-    break;
-  case 'D':
-  case 'd':
-    if (solving) {
-      freeSolutions();
-      solving = 0;
-      glutChangeToMenuEntry(1, (char *)"Solving", 1);
-      glutSetWindowTitle((char *)"glpuzzle");
-      movingPiece = 0;
-      changeState();
-    }
-    piece = selectPiece(x, y);
-    if (piece) {
-      nukePiece(piece);
-    }
-    glutPostRedisplay();
-    break;
-  case 'R':
-  case 'r':
-    reset();
-    break;
-  case 'S':
-  case 's':
-    toggleSolve();
-    break;
-  case 'b':
-  case 'B':
-    depth = 1 - depth;
-    if (depth) {
-      glEnable(GL_DEPTH_TEST);
-    } else {
-      glDisable(GL_DEPTH_TEST);
-    }
-    glutPostRedisplay();
-    break;
-  default:
-    break;
-  }
-}
-
-void
-motion(int x, int y)
-{
-  float selx, sely;
-
-  if (middle_mouse && !left_mouse) {
-    if (mousex != x || mousey != y) {
-      trackball(lastquat,
-        (2.0*mousex - W) / W,
-        (H - 2.0*mousey) / H,
-        (2.0*x - W) / W,
-        (H - 2.0*y) / H);
-      spinning = 1;
-    } else {
-      spinning = 0;
-    }
-    changeState();
-  } else {
-    computeCoords(sel_piece, x, y, &selx, &sely);
-    moveSelection(selx, sely);
-  }
-  mousex = x;
-  mousey = y;
-  glutPostRedisplay();
-}
-
-void
-mouse(int b, int s, int x, int y)
-{
-  float selx, sely;
-
-  mousex = x;
-  mousey = y;
-  curX = x;
-  curY = y;
-  if (s == GLUT_DOWN) {
-    switch (b) {
-    case GLUT_LEFT_BUTTON:
-      if (solving) {
-        freeSolutions();
-        solving = 0;
-      glutChangeToMenuEntry(1, (char *)"Solving", 1);
-        glutSetWindowTitle((char *)"glpuzzle");
-        movingPiece = 0;
-      }
-      left_mouse = GL_TRUE;
-      sel_piece = selectPiece(mousex, mousey);
-      if (!sel_piece) {
-      left_mouse = GL_FALSE;
-      middle_mouse = GL_TRUE; // let it rotate object
-      } else if (computeCoords(sel_piece, mousex, mousey, &selx, &sely)) {
-        grabPiece(sel_piece, selx, sely);
-      }
-      glutPostRedisplay();
-      break;
-    case GLUT_MIDDLE_BUTTON:
-      middle_mouse = GL_TRUE;
-      glutPostRedisplay();
-      break;
-    }
-  } else {
-    if (left_mouse) {
-      left_mouse = GL_FALSE;
-      dropSelection();
-      glutPostRedisplay();
-    } else if (middle_mouse) {
-      middle_mouse = GL_FALSE;
-      glutPostRedisplay();
-    }
-  }
-  motion(x, y);
-}
-
-void
-animate(void)
-{
-  if (spinning) {
-    add_quats(lastquat, curquat, curquat);
-  }
-  glutPostRedisplay();
-  if (solving) {
-    if (!continueSolving()) {
-      solving = 0;
-      glutChangeToMenuEntry(1, (char *)"Solving", 1);
-      glutSetWindowTitle((char *)"glpuzzle");
-    }
-  }
-  if ((!solving && !spinning) || !visible) {
-    glutIdleFunc(NULL);
-  }
-}
-
-void
-changeState(void)
-{
-  if (visible) {
-    if (!solving && !spinning) {
-      glutIdleFunc(NULL);
-    } else {
-      glutIdleFunc(animate);
-    }
-  } else {
-    glutIdleFunc(NULL);
-  }
-}
-
-void
-init(void)
-{
-  static float lmodel_ambient[] =
-  {0.0, 0.0, 0.0, 0.0};
-  static float lmodel_twoside[] =
-  {GL_FALSE};
-  static float lmodel_local[] =
-  {GL_FALSE};
-  static float light0_ambient[] =
-  {0.1, 0.1, 0.1, 1.0};
-  static float light0_diffuse[] =
-  {1.0, 1.0, 1.0, 0.0};
-  static float light0_position[] =
-  {0.8660254, 0.5, 1, 0};
-  static float light0_specular[] =
-  {0.0, 0.0, 0.0, 0.0};
-  static float bevel_mat_ambient[] =
-  {0.0, 0.0, 0.0, 1.0};
-  static float bevel_mat_shininess[] =
-  {40.0};
-  static float bevel_mat_specular[] =
-  {0.0, 0.0, 0.0, 0.0};
-  static float bevel_mat_diffuse[] =
-  {1.0, 0.0, 0.0, 0.0};
-
-  glEnable(GL_CULL_FACE);
-  glCullFace(GL_BACK);
-  glEnable(GL_DEPTH_TEST);
-  glClearDepth(1.0);
-
-  glClearColor(0.5, 0.5, 0.5, 0.0);
-  glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
-  glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
-  glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);
-  glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
-  glEnable(GL_LIGHT0);
-
-  glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_local);
-  glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
-  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
-  glEnable(GL_LIGHTING);
-
-  glMaterialfv(GL_FRONT, GL_AMBIENT, bevel_mat_ambient);
-  glMaterialfv(GL_FRONT, GL_SHININESS, bevel_mat_shininess);
-  glMaterialfv(GL_FRONT, GL_SPECULAR, bevel_mat_specular);
-  glMaterialfv(GL_FRONT, GL_DIFFUSE, bevel_mat_diffuse);
-
-  glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
-  glEnable(GL_COLOR_MATERIAL);
-  glShadeModel(GL_FLAT);
-
-  trackball(curquat, 0.0, 0.0, 0.0, 0.0);
-  srandom(time(NULL));
-}
-
-static void
-Usage(void)
-{
-  puts("Usage: puzzle [-s]");
-  puts("   -s:  Run in single buffered mode");
-  exit(-1);
-}
-
-void
-visibility(int v)
-{
-  if (v == GLUT_VISIBLE) {
-    visible = 1;
-  } else {
-    visible = 0;
-  }
-  changeState();
-}
-
-void
-menu(int choice)
-{
-   switch(choice) {
-   case 1:
-      toggleSolve();
-      break;
-   case 2:
-      reset();
-      break;
-   case 3:
-      exit(0);
-      break;
-   }
-}
-
-int
-main(int argc, char **argv)
-{
-  long i;
-
-  Fl::use_high_res_GL(1);
-  glutInit(&argc, argv);
-  for (i = 1; i < argc; i++) {
-    if (argv[i][0] == '-') {
-      switch (argv[i][1]) {
-      case 's':
-        doubleBuffer = 0;
-        break;
-      default:
-        Usage();
-      }
-    } else {
-      Usage();
-    }
-  }
-
-  glutInitWindowSize(W, H);
-  if (doubleBuffer) {
-    glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE);
-  } else {
-    glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_SINGLE | GLUT_MULTISAMPLE);
-  }
-
-  glutCreateWindow("glpuzzle");
-  visible = 1; // added for fltk, bug in original program?
-
-  init();
-
-  glGetIntegerv(GL_VIEWPORT, viewport);
-
-  puts("");
-  puts("r   Reset puzzle");
-  puts("s   Solve puzzle (may take a few seconds to compute)");
-  puts("d   Destroy a piece - makes the puzzle easier");
-  puts("b   Toggles the depth buffer on and off");
-  puts("");
-  puts("Left mouse moves pieces");
-  puts("Middle mouse spins the puzzle");
-  puts("Right mouse has menu");
-
-  glutReshapeFunc(Reshape);
-  glutDisplayFunc(redraw);
-  glutKeyboardFunc(keyboard);
-  glutMotionFunc(motion);
-  glutMouseFunc(mouse);
-  glutVisibilityFunc(visibility);
-  glutCreateMenu(menu);
-  glutAddMenuEntry((char *)"Solve", 1);
-  glutAddMenuEntry((char *)"Reset", 2);
-  glutAddMenuEntry((char *)"Quit", 3);
-  glutAttachMenu(GLUT_RIGHT_BUTTON);
-  glutMainLoop();
-  return 0;             /* ANSI C requires main to return int. */
-}
-
-#endif // added for fltk's distribution
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/hello.cxx
+++ /dev/null
@@ -1,38 +1,0 @@
-//
-// "$Id$"
-//
-// Hello, World! program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Box.H>
-
-int main(int argc, char **argv) {
-  Fl_Window *window = new Fl_Window(340,180);
-  Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!");
-  box->box(FL_UP_BOX);
-  box->labelfont(FL_BOLD+FL_ITALIC);
-  box->labelsize(36);
-  box->labeltype(FL_SHADOW_LABEL);
-  window->end();
-  window->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
-
--- a/DoConfig/fltk/test/help-test.html
+++ /dev/null
@@ -1,278 +1,0 @@
-<!--
-    Test the Fl_Help_View's ability to parse simple HTML.
--->
-<H1>Simple HTML Tests</H1>
-<UL>
-    <LI> <a href="#Plain Test">Plain Text Test</A>
-    <LI> <a href="#Entity Test">HTML Entity Test</A>
-    <LI> <a href="#Pre Test">PRE (preformatted Text) Test</A>
-    <LI> <a href="#Headings">Heading Tests</A>
-    <LI> <a href="#Lists">UL, OL, DL Lists</A>
-    <LI> <a href="#Table">TABLE Tests</A>
-    <LI> <a href="#Center">CENTER Tests</A>
-    <LI> <a href="#HR">HR (Horizontal Rule) Tests</A>
-    <LI> <a href="#Tabs">PRE Tab Indent Tests</A>
-</UL>
-<P>
-
-<A NAME="Plain Test"></A>
-<B>Plain text paragraphs</B><P>
-    The licenses for most software are designed to take away your freedom to
-    share and change it.  By contrast, the GNU General Public Licenses are
-    intended to guarantee your freedom to share and change free software--to
-    make sure the software is free for all its users.
-    <P>
-    This license, the Library General Public License, applies to some
-    specially designated Free Software Foundation software, and to any
-    other libraries whose authors decide to use it.  You can use it for
-    your libraries, too.
-    <P>
-    <I>Italic content.</I> <B>Bold content</B> <BIG>Big content.</BIG>
-    <SMALL>Small content.</SMALL> <U>Underline content.</U> <STRIKE>Strike out content.</STRIKE>
-    <FONT COLOR=RED>Red font content.</FONT> <FONT COLOR=#ff8800>Orange #ff8800 font content.</FONT>
-    <FONT COLOR=BLUE>Blue font content.</FONT>
-    <P>
-    <FONT FACE="Helvetica">This should be Helvetica. 0123456789</FONT><BR>
-    <FONT FACE="Arial">This should be Arial. 0123456789</FONT><BR>
-    <FONT FACE="Sans">This should be Sans. 0123456789</FONT><BR>
-    <FONT FACE="Times">This should be Times. 0123456789</FONT><BR>
-    <FONT FACE="Serif">This should be Serif. 0123456789</FONT><BR>
-    <FONT FACE="Courier">This should be Courier. 0123456789</FONT><BR>
-    <FONT FACE="Symbol">This should be Symbol. 0123456789</FONT>
-    <P>
-
-<A NAME="Entity Test"></A>
-<B>HTML Entities: named, hexadecimal, and decimal</B><P>
-    <b>Special characters, formatted as named "HTML Entities", e.g. "&amp;euro;":</b><br>
-    Euro and "dagger": "&euro;" "&dagger;"<br>
-    Umlaut characters : "&auml;" "&euml;" "&iuml;" "&ouml;" "&uuml;" "&szlig;"<br>
-    Umlaut characters : "&Auml;" "&Euml;" "&Iuml;" "&Ouml;" "&Uuml;"<br>
-    Special characters : "&bull;" "&permil;" "&copy;" "&trade;" "&reg;"<br>
-    <br>
-    <b>Other scripts, formatted as hexadecimal "HTML Entities", e.g. "&amp;#x20ac;":</b><br>
-    (Should be the same symbols as below)<br>
-    Euro and "dagger": "&#x20ac;" "&#x2020;"<br>
-    Japanese (Hiragana) : "&#x3050;" "&#x306e;"<br>
-    Japanese (Katakana) : "&#x30c0;" "&#x30dd;"<br>
-    Chinese (CJK Unified Ideographs) : "&#x4e2d;" "&#x4e33;"<br>
-    <br>
-    <b>Other scripts, formatted as decimal "HTML Entities", e.g. "&amp;#8364;":</b><br>
-    (Should be the same symbols as above)<br>
-    Euro and "dagger": "&#8364;" "&#8224;"<br>
-    Japanese (Hiragana) : "&#12368;" "&#12398;"<br>
-    Japanese (Katakana) : "&#12480;" "&#12509;"<br>
-    Chinese (CJK Unified Ideographs) : "&#20013;" "&#20019;"<br>
-    <P>
-
-<A NAME="Pre Test"></A>
-<B>Preformatted paragraphs</B><PRE>
-The following 2 paragraphs should be indented 4 spaces.
-
-    The licenses for most software are designed to take away
-    your freedom to share and change it.  By contrast, the
-    GNU General Public Licenses are intended to guarantee your
-    freedom to share and change free software -- to make sure
-    the software is free for all its users.
-
-    This license, the Library General Public License, applies to
-    some specially designated Free Software Foundation software,
-    and to any other libraries whose authors decide to use it.
-    You can use it for your libraries, too.
-
-The following 2 paragraphs should be indented 8 spaces.
-
-        The licenses for most software are designed to take away
-        your freedom to share and change it.  By contrast, the
-        GNU General Public Licenses are intended to guarantee
-        your freedom to share and change free software --
-        to make sure the software is free for all its users.
-
-        This license, the Library General Public License,
-        applies to some specially designated Free Software
-        Foundation software, and to any other libraries whose
-        authors decide to use it.  You can use it for your
-        libraries, too.
-
-The following text content should all be indented 4 spaces.
-
-    <I>Italic content.</I> <B>Bold content</B> <BIG>Big content.</BIG>
-    <SMALL>Small content.</SMALL> <U>Underline content.</U> <STRIKE>Strike out content.</STRIKE>
-    <FONT COLOR=RED>Red font content.</FONT> <FONT COLOR=#ff8800>Orange #ff8800 font content.</FONT>
-    <FONT COLOR=BLUE>Blue font content.</FONT>
-</PRE>
-<P>
-
-<A NAME="Headings"></A>
-<B>Heading tests</B>
-<H1>This is H1 text</H1>
-<H2>This is H2 text</H2>
-<H3>This is H3 text</H3>
-<H4>This is H4 text</H4>
-<H5>This is H5 text</H5>
-<H6>This is H6 text</H6>
-<P>
-
-<A NAME="Lists"></A>
-<B>UL tests</B>
-<UL>
-   This text should be indented in a UL.<BR>
-   This should be a second line of indent.<P>
-   <LI> First list item with default attributes</LI>
-   <LI> Second list item</LI>
-   <LI> Third list item</LI>
-</UL>
-End of UL. Starting an OL:
-<OL>
-   This text should be indented in an OL.<BR>
-   This should be a second line of indent.<P>
-   <LI> First list item with default attributes</LI>
-   <LI> Second list item</LI>
-   <LI> Third list item</LI>
-</OL>
-End of OL. Starting a DL:
-<DL>
-  A DL has been started. This should be a list of terms.
-  Some browsers display the description indented right
-  relative to the terms, though I don't think FLTK's does this.<P>
-  <DT>First term</DT>
-  <DD>Description of first term.</DD>
-  <DT>Second term</DT>
-  <DD>Description of second term goes here.</DD>
-  <DT>Third term</DT>
-  <DD>Description of third term goes here.</DD>
-</DL>
-End of DL.
-<P>
-
-<A NAME="Table"></A>
-<B>Simple 2 Column Non-border Table, No Headings</B>
-<TABLE>
-  <TR>
-    <TD>Column 1</TD>  <TD>Column 2</TD>
-  </TR><TR>
-    <TD>Aaa Aaa Aaa</TD>  <TD>Xxx Xxx Xxx</TD>
-  </TR><TR>
-    <TD>Bbb Bbb Bbb</TD>  <TD>Yyy Yyy Yyy</TD>
-  </TR><TR>
-    <TD>Ccc Ccc Ccc</TD>  <TD>Zzz Zzz Zzz</TD>
-  </TR>
-</TABLE>
-<P>
-<B>Simple 2 Column Bordered Table, No Headings</B>
-<TABLE BORDER=1>
-  <TR>
-    <TD>Column 1</TD>  <TD>Column 2</TD>
-  </TR><TR>
-    <TD>Aaa Aaa Aaa</TD>  <TD>Xxx Xxx Xxx</TD>
-  </TR><TR>
-    <TD>Bbb Bbb Bbb</TD>  <TD>Yyy Yyy Yyy</TD>
-  </TR><TR>
-    <TD>Ccc Ccc Ccc</TD>  <TD>Zzz Zzz Zzz</TD>
-  </TR>
-</TABLE>
-<P>
-<B>Simple Two Column Table With Borders And Heading</B>
-<TABLE BORDER=1>
-  <TH>Table Heading</TH>
-  <TR>
-    <TD>Column 1</TD>  <TD>Column 2</TD>
-  </TR><TR>
-    <TD>Aaa Aaa Aaa</TD>  <TD>Xxx Xxx Xxx</TD>
-  </TR><TR>
-    <TD>Bbb Bbb Bbb</TD>  <TD>Yyy Yyy Yyy</TD>
-  </TR><TR>
-    <TD>Ccc Ccc Ccc</TD>  <TD>Zzz Zzz Zzz</TD>
-  </TR>
-</TABLE>
-<P>
-<B>Simple Bordered Table With Heading And 10 Cell Padding + Spacing</B>
-<TABLE BORDER=1 CELLPADDING=10 CELLSPACING=10>
-  <TH>Table Heading</TH>
-  <TR>
-    <TD>Column 1</TD>  <TD>Column 2</TD>
-  </TR><TR>
-    <TD>Aaa Aaa Aaa</TD>  <TD>Xxx Xxx Xxx</TD>
-  </TR><TR>
-    <TD>Bbb Bbb Bbb</TD>  <TD>Yyy Yyy Yyy</TD>
-  </TR><TR>
-    <TD>Ccc Ccc Ccc</TD>  <TD>Zzz Zzz Zzz</TD>
-  </TR>
-</TABLE>
-<P>
-<B>Simple Table Of Images, Two Columns, Three Rows</B>
-<TABLE BORDER=1 CELLPADDING=10 CELLSPACING=10>
-  <TH>Table Heading</TH>
-  <TR>
-    <TD>Column 1</TD>  <TD>Column 2</TD>
-  </TR><TR>
-    <TD><IMG SRC="../documentation/src/FL200.png"></TD>
-    <TD>This is the FLTK logo</TD>
-  </TR><TR>
-    <TD><IMG SRC="../documentation/src/tiny.png"></TD>
-    <TD>Tiny FLTK logo.</TD>
-  </TR><TR>
-    <TD><IMG SRC="../documentation/src/Fl_Value_Input.png"></TD>
-    <TD>This is an image of Fl_Value_Input</TD>
-  </TR><TR>
-    <TD><IMG SRC="../documentation/src/Fl_Value_Output.png"></TD>
-    <TD>This is an image of Fl_Value_Output</TD>
-  </TR>
-</TABLE>
-<P>
-
-<A NAME="Center"></A>
-<B>Testing Centered Text And Image</B>
-<center>This text should be centered. What follows is a line break.
-<BR>
-After the line break, still centered. What follows is a paragraph break.
-<P>
-This text should be in a paragraph break. This is paragraph #1 of 2.
-<P>
-This text should be in a paragraph break as well. This is paragraph #2 of 2.
-<P>
-What follows should be a centered image.<BR>
-<IMG SRC="../documentation/src/FL200.png"><BR>
-That should be a centered image.
-<P>
-</center>
-<P>
-
-<A NAME="HR"></A>
-<B>Testing Horizontal Line</B>
-<HR>
-This text should be between two horizontal lines.
-<HR>
-<P>
-<A NAME="Tabs"></A>
-<B>Preformatted Indent Test</B>
-<PRE>
-    This tests that tabs and space indenting work correctly.
-    Each line should be one space right of the line preceding it
-    unless otherwise specified:
-
-0 Tab
- 1 Space
-  2 Space
-   3 Space
-    4 Space
-     5 Space
-      6 Space
-       7 Space            __
-        8 Space             |
-    	4 Space + 1 Tab     |-- should all be
-	1 Tab             __|   same indent level
-	 1 Tab + 1 Space
-	  1 Tab + 2 Space
-	   1 Tab + 3 Space
-	    1 Tab + 4 Space
-	     1 Tab + 5 Space
-	      1 Tab + 6 Space
-	       1 Tab + 7 Space            __
-	        1 Tab + 8 Space             |
-    	        4 Space + 1 Tab + 8 Space   |-- should all be
-		2 Tab                     __|   same indent level
-		 2 Tab + 1 Space
-		  2 Tab + 2 Space
-		   2 Tab + 3 Space
-		    ..
-</PRE>
--- a/DoConfig/fltk/test/help.cxx
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Help_Dialog test program.
-//
-// Copyright 1999-2010 by Easy Software Products.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-// Contents:
-//
-//   main() - Display the help GUI...
-//
-
-//
-// Include necessary headers...
-//
-
-#include <FL/Fl_Help_Dialog.H>
-
-//
-// 'main()' - Display the help GUI...
-//
-
-int				// O - Exit status
-main(int  argc,			// I - Number of command-line arguments
-     char *argv[])		// I - Command-line arguments
-{
-  Fl_Help_Dialog	*help;		// Help dialog
-
-
-  help = new Fl_Help_Dialog;
-
-  
-#ifdef __APPLE__
-
-    char buf[2048];
-    strcpy(buf, argv[0]);
-    char *slash = strrchr(buf, '/');
-    if (slash)
-      strcpy(slash, "/../Resources/help-test.html");
-    help->load(buf);
-  
-#else
-  
-  if (argc <= 1)
-    help->load("help-test.html");
-  else
-    help->load(argv[1]);
-  
-#endif
-  
-  help->show(1, argv);
-
-  Fl::run();
-
-  delete help;
-
-  return (0);
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/icon.cxx
+++ /dev/null
@@ -1,51 +1,0 @@
-//
-// Icon test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_RGB_Image.H>
-
-static Fl_Double_Window *win;
-
-void choice_cb(Fl_Widget *, void *v) {
-  Fl_Color c = (Fl_Color)(fl_intptr_t)v;
-  uchar buffer[32*32*3];
-  Fl_RGB_Image icon(buffer, 32, 32, 3);
-  icon.color_average(c, 0.0);
-  win->icon(&icon);
-}
-
-Fl_Menu_Item choices[] = {
-  {"Red",0,choice_cb,(void*)FL_RED},
-  {"Green",0,choice_cb,(void*)FL_GREEN},
-  {"Blue",0,choice_cb,(void*)FL_BLUE},
-  {0}
-};
-
-int main(int argc, char **argv) {
-  Fl_Double_Window window(400,300);
-  win = &window;
-
-  Fl_Choice choice(80,100,200,25,"Colour:");
-  choice.menu(choices);
-  choice.callback(choice_cb);
-  choice.when(FL_WHEN_RELEASE|FL_WHEN_NOT_CHANGED);
-
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
--- a/DoConfig/fltk/test/iconize.cxx
+++ /dev/null
@@ -1,74 +1,0 @@
-//
-// "$Id$"
-//
-// Iconize test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Box.H>
-#include <stdlib.h>
-
-void iconize_cb(Fl_Widget *, void *v) {
-  Fl_Window *w = (Fl_Window *)v;
-  w->iconize();
-}
-
-void show_cb(Fl_Widget *, void *v) {
-  Fl_Window *w = (Fl_Window *)v;
-  w->show();
-}
-
-void hide_cb(Fl_Widget *, void *v) {
-  Fl_Window *w = (Fl_Window *)v;
-  w->hide();
-}
-
-void window_cb(Fl_Widget*, void*) {
-  exit(0);
-}
-
-int main(int argc, char **argv) {
-
-  Fl_Window mainw(200,200);
-  mainw.end();
-  mainw.show(argc,argv);
-
-  Fl_Window control(120,120);
-
-  Fl_Button hide_button(0,0,120,30,"hide()");
-  hide_button.callback(hide_cb, &mainw);
-
-  Fl_Button iconize_button(0,30,120,30,"iconize()");
-  iconize_button.callback(iconize_cb, &mainw);
-
-  Fl_Button show_button(0,60,120,30,"show()");
-  show_button.callback(show_cb, &mainw);
-
-  Fl_Button show_button2(0,90,120,30,"show this");
-  show_button2.callback(show_cb, &control);
-
-  //  Fl_Box box(FL_NO_BOX,0,60,120,30,"Also try running\nwith -i switch");
-
-  control.end();
-  control.show();
-  control.callback(window_cb);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/image.cxx
+++ /dev/null
@@ -1,152 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Image test program for the Fast Light Tool Kit (FLTK).
-//
-// Notice that Fl_Image is for a static, multiple-reuse image, such
-// as an icon or postage stamp.  Use fl_draw_image to go directly
-// from an buffered image that changes often.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-int width = 100;
-int height = 100;
-uchar *image;
-
-void make_image() {
-  image = new uchar[4*width*height];
-  uchar *p = image;
-  for (int y = 0; y < height; y++) {
-    double Y = double(y)/(height-1);
-    for (int x = 0; x < width; x++) {
-      double X = double(x)/(width-1);
-      *p++ = uchar(255*((1-X)*(1-Y))); // red in upper-left
-      *p++ = uchar(255*((1-X)*Y));	// green in lower-left
-      *p++ = uchar(255*(X*Y));	// blue in lower-right
-      X -= 0.5;
-      Y -= 0.5;
-      int alpha = (int)(255 * sqrt(X * X + Y * Y));
-      if (alpha < 255) *p++ = uchar(alpha);	// alpha transparency
-      else *p++ = 255;
-      Y += 0.5;
-    }
-  }
-}
-
-#include <FL/Fl_Toggle_Button.H>
-
-Fl_Toggle_Button *leftb,*rightb,*topb,*bottomb,*insideb,*overb,*inactb;
-Fl_Button *b;
-Fl_Double_Window *w;
-
-void button_cb(Fl_Widget *,void *) {
-  int i = 0;
-  if (leftb->value()) i |= FL_ALIGN_LEFT;
-  if (rightb->value()) i |= FL_ALIGN_RIGHT;
-  if (topb->value()) i |= FL_ALIGN_TOP;
-  if (bottomb->value()) i |= FL_ALIGN_BOTTOM;
-  if (insideb->value()) i |= FL_ALIGN_INSIDE;
-  if (overb->value()) i |= FL_ALIGN_TEXT_OVER_IMAGE;
-  b->align(i);
-  if (inactb->value()) b->deactivate();
-  else b->activate();
-  w->redraw();
-}
-
-#include <FL/x.H>
-#if !defined(WIN32) && !defined(__APPLE__)
-#include "list_visuals.cxx"
-#endif
-
-int visid = -1;
-int arg(int argc, char **argv, int &i) {
-  if (argv[i][1] == 'v') {
-    if (i+1 >= argc) return 0;
-    visid = atoi(argv[i+1]);
-    i += 2;
-    return 2;
-  }
-  return 0;
-}
-
-int main(int argc, char **argv) {
-#if !defined(WIN32) && !defined(__APPLE__)
-  int i = 1;
-
-  Fl::args(argc,argv,i,arg);
-
-  if (visid >= 0) {
-    fl_open_display();
-    XVisualInfo templt; int num;
-    templt.visualid = visid;
-    fl_visual = XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
-    if (!fl_visual) {
-      fprintf(stderr, "No visual with id %d, use one of:\n",visid);
-      list_visuals();
-      exit(1);
-    }
-    fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-    fl_xpixel(FL_BLACK); // make sure black is allocated in overlay visuals
-  } else {
-    Fl::visual(FL_RGB);
-  }
-#endif
-
-  Fl_Double_Window window(400,400); ::w = &window;
-  window.color(FL_WHITE);
-  Fl_Button b(140,160,120,120,"Image w/Alpha"); ::b = &b;
-
-  Fl_RGB_Image *rgb;
-  Fl_Image *dergb;
-
-  make_image();
-  rgb = new Fl_RGB_Image(image, width, height,4);
-  dergb = rgb->copy();
-  dergb->inactive();
-
-  b.image(rgb);
-  b.deimage(dergb);
-
-  leftb = new Fl_Toggle_Button(25,50,50,25,"left");
-  leftb->callback(button_cb);
-  rightb = new Fl_Toggle_Button(75,50,50,25,"right");
-  rightb->callback(button_cb);
-  topb = new Fl_Toggle_Button(125,50,50,25,"top");
-  topb->callback(button_cb);
-  bottomb = new Fl_Toggle_Button(175,50,50,25,"bottom");
-  bottomb->callback(button_cb);
-  insideb = new Fl_Toggle_Button(225,50,50,25,"inside");
-  insideb->callback(button_cb);
-  overb = new Fl_Toggle_Button(25,75,100,25,"text over");
-  overb->callback(button_cb);
-  inactb = new Fl_Toggle_Button(125,75,100,25,"inactive");
-  inactb->callback(button_cb);
-  window.resizable(window);
-  window.end();
-  window.show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/inactive.fl
+++ /dev/null
@@ -1,120 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {} {open
-} {
-  Fl_Window {} {open
-    xywh {390 200 420 369} type Double hide resizable
-  } {
-    Fl_Group the_group {
-      label {activate()/deactivate() called on this Fl_Group} open
-      xywh {25 25 375 295} box ENGRAVED_FRAME align 17 resizable
-    } {
-      Fl_Button {} {
-        label button
-        xywh {50 50 105 25}
-      }
-      Fl_Light_Button {} {
-        label {light button}
-        xywh {50 80 105 25} value 1 align 16
-      }
-      Fl_Group {} {
-        label {Child group} open
-        xywh {50 130 105 125} box DOWN_FRAME
-      } {
-        Fl_Check_Button {} {
-          label red
-          xywh {50 170 105 25} type Radio down_box DIAMOND_DOWN_BOX selection_color 1 labelcolor 1
-        }
-        Fl_Check_Button {} {
-          label green
-          xywh {50 190 105 25} type Radio down_box DIAMOND_DOWN_BOX selection_color 2 labelcolor 2
-        }
-        Fl_Check_Button {} {
-          label blue
-          xywh {50 210 105 25} type Radio down_box DIAMOND_DOWN_BOX selection_color 4 labelcolor 4
-        }
-        Fl_Check_Button {} {
-          label white
-          xywh {50 230 105 25} type Radio down_box DIAMOND_DOWN_BOX selection_color 55 labelcolor 55
-        }
-        Fl_Check_Button {} {
-          label check
-          xywh {50 130 105 25} down_box DOWN_BOX
-        }
-        Fl_Round_Button {} {
-          label round
-          xywh {50 150 105 25} down_box ROUND_DOWN_BOX
-        }
-      }
-      Fl_Slider {} {
-        label Fl_Slider selected
-        xywh {165 50 24 205} value 0.5
-      }
-      Fl_Input {} {
-        xywh {195 50 195 30}
-        code0 {o->static_value("Fl_Input");}
-      }
-      Fl_Menu_Button {} {
-        label menu open
-        xywh {245 90 130 30}
-      } {
-        MenuItem {} {
-          label item
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label item
-          xywh {10 10 100 20}
-        }
-        MenuItem {} {
-          label item
-          xywh {20 20 100 20}
-        }
-        MenuItem {} {
-          label item
-          xywh {30 30 100 20}
-        }
-        MenuItem {} {
-          label item
-          xywh {40 40 100 20}
-        }
-      }
-      Fl_Value_Output {} {
-        label {value:}
-        xywh {245 130 130 30} maximum 10000 step 1 textfont 5 textsize 24 textcolor 4
-      }
-      Fl_Box {} {
-        label Fl_Box
-        xywh {245 170 140 50} box EMBOSSED_FRAME labeltype SHADOW_LABEL labelfont 3 labelsize 38
-      }
-      Fl_Scrollbar {} {
-        label scrollbar
-        xywh {40 274 180 20} type Horizontal
-      }
-      Fl_Roller {} {
-        label roller
-        xywh {235 230 25 65}
-      }
-      Fl_Dial {} {
-        label dial
-        xywh {275 235 50 50}
-      }
-      Fl_Clock {} {
-        label clock
-        xywh {335 235 50 50}
-      }
-    }
-    Fl_Button {} {
-      label active
-      callback {the_group->activate();}
-      xywh {25 330 185 25} type Radio value 1
-    }
-    Fl_Button {} {
-      label inactive
-      callback {the_group->deactivate();}
-      xywh {220 330 180 25} type Radio
-    }
-  }
-}
--- a/DoConfig/fltk/test/input.cxx
+++ /dev/null
@@ -1,162 +1,0 @@
-//
-// "$Id$"
-//
-// Input field test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Float_Input.H>
-#include <FL/Fl_Int_Input.H>
-#include <FL/Fl_Secret_Input.H>
-#include <FL/Fl_Multiline_Input.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Color_Chooser.H>
-
-void cb(Fl_Widget *ob) {
-  printf("Callback for %s '%s'\n",ob->label(),((Fl_Input*)ob)->value());
-}
-
-int when = 0;
-Fl_Input *input[5];
-
-void toggle_cb(Fl_Widget *o, long v) {
-  if (((Fl_Toggle_Button*)o)->value()) when |= v; else when &= ~v;
-  for (int i=0; i<5; i++) input[i]->when(when);
-}
-
-void test(Fl_Input *i) {
-  if (i->changed()) {
-    i->clear_changed(); printf("%s '%s'\n",i->label(),i->value());
-    char utf8buf[10];
-    int last = fl_utf8encode(i->index(i->position()), utf8buf);
-    utf8buf[last] = 0;
-    printf("Symbol at cursor position: %s\n", utf8buf);
-  }
-}
-
-void button_cb(Fl_Widget *,void *) {
-  for (int i=0; i<5; i++) test(input[i]);
-}
-
-void color_cb(Fl_Widget* button, void* v) {
-  Fl_Color c;
-  switch ((fl_intptr_t)v) {
-  case 0: c = FL_BACKGROUND2_COLOR; break;
-  case 1: c = FL_SELECTION_COLOR; break;
-  default: c = FL_FOREGROUND_COLOR; break;
-  }
-  uchar r,g,b; Fl::get_color(c, r,g,b);
-  if (fl_color_chooser(0,r,g,b)) {
-    Fl::set_color(c,r,g,b); Fl::redraw();
-    button->labelcolor(fl_contrast(FL_BLACK,c));
-    button->redraw();
-  }
-}
-
-void tabnav_cb(Fl_Widget *w, void *v) {
-  Fl_Light_Button *b = (Fl_Light_Button*)w;
-  Fl_Multiline_Input *fmi = (Fl_Multiline_Input*)v;
-  fmi->tab_nav(b->value() ? 1 : 0);
-}
-
-void arrownav_cb(Fl_Widget *w, void *v) {
-  Fl_Light_Button *b = (Fl_Light_Button*)w;
-  Fl::option(Fl::OPTION_ARROW_FOCUS, b->value() ? true : false);
-}
-
-int main(int argc, char **argv) {
-  // the following two lines set the correct color scheme, so that 
-  // calling fl_contrast below will return good results
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-  Fl_Window *window = new Fl_Window(400,420);
-
-  int y = 10;
-  input[0] = new Fl_Input(70,y,300,30,"Normal:"); y += 35;
-  input[0]->tooltip("Normal input field");
-  // input[0]->cursor_color(FL_SELECTION_COLOR);
-  // input[0]->maximum_size(20);
-  // input[0]->static_value("this is a testgarbage");
-  input[1] = new Fl_Float_Input(70,y,300,30,"Float:"); y += 35;
-  input[1]->tooltip("Input field for floating-point number (F1)");
-  input[1]->shortcut(FL_F+1);
-  input[2] = new Fl_Int_Input(70,y,300,30,"Int:"); y += 35;
-  input[2]->tooltip("Input field for integer number (F2)");
-  input[2]->shortcut(FL_F+2);
-  input[3] = new Fl_Secret_Input(70,y,300,30,"&Secret:"); y += 35;
-  input[3]->tooltip("Input field for password (Alt-S)");
-  input[4] = new Fl_Multiline_Input(70,y,300,100,"&Multiline:"); y += 105;
-  input[4]->tooltip("Input field for short text with newlines (Alt-M)");
-  input[4]->wrap(1);
-
-  for (int i = 0; i < 4; i++) {
-    input[i]->when(0); input[i]->callback(cb);
-  }
-  int y1 = y;
-
-  Fl_Button *b;
-  b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_CHANGED");
-  b->callback(toggle_cb, FL_WHEN_CHANGED); y += 25;
-  b->tooltip("Do callback each time the text changes");
-  b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_RELEASE");
-  b->callback(toggle_cb, FL_WHEN_RELEASE); y += 25;
-  b->tooltip("Do callback when widget loses focus");
-  b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_ENTER_KEY");
-  b->callback(toggle_cb, FL_WHEN_ENTER_KEY); y += 25;
-  b->tooltip("Do callback when user hits Enter key");
-  b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_NOT_CHANGED");
-  b->callback(toggle_cb, FL_WHEN_NOT_CHANGED); y += 25;
-  b->tooltip("Do callback even if the text is not changed");
-  y += 5;
-  b = new Fl_Button(10,y,200,25,"&print changed()"); y += 25;
-  b->callback(button_cb);
-  b->tooltip("Print widgets that have changed() flag set");
-
-  b = new Fl_Light_Button(10,y,100,25," Tab Nav");
-  b->tooltip("Control tab navigation for the multiline input field");
-  b->callback(tabnav_cb, (void*)input[4]);
-  b->value(input[4]->tab_nav() ? 1 : 0);
-  b = new Fl_Light_Button(110,y,100,25," Arrow Nav"); y += 25;
-  b->tooltip("Control horizontal arrow key focus navigation behavior.\n"
-             "e.g. Fl::OPTION_ARROW_FOCUS");
-  b->callback(arrownav_cb);
-  b->value(input[4]->tab_nav() ? 1 : 0);
-  b->value(Fl::option(Fl::OPTION_ARROW_FOCUS) ? 1 : 0);
-
-  b = new Fl_Button(220,y1,120,25,"color"); y1 += 25;
-  b->color(input[0]->color()); b->callback(color_cb, (void*)0);
-  b->tooltip("Color behind the text");
-  b = new Fl_Button(220,y1,120,25,"selection_color"); y1 += 25;
-  b->color(input[0]->selection_color()); b->callback(color_cb, (void*)1);
-  b->labelcolor(fl_contrast(FL_BLACK,b->color()));
-  b->tooltip("Color behind selected text");
-  b = new Fl_Button(220,y1,120,25,"textcolor"); y1 += 25;
-  b->color(input[0]->textcolor()); b->callback(color_cb, (void*)2);
-  b->labelcolor(fl_contrast(FL_BLACK,b->color()));
-  b->tooltip("Color of the text");
-
-  window->end();
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/input_choice.cxx
+++ /dev/null
@@ -1,63 +1,0 @@
-//
-// "$Id$"
-//
-// Test program for Fl_Input_Choice
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Input_Choice.H>
-
-void buttcb(Fl_Widget*,void*data) {
-    Fl_Input_Choice *in=(Fl_Input_Choice *)data;
-    static int flag = 1;
-    flag ^= 1;
-    if ( flag ) in->activate();
-    else        in->deactivate();
-    if (in->changed()) {
-        printf("Callback: changed() is set\n");
-        in->clear_changed();
-    }
-}
-
-void input_choice_cb(Fl_Widget*,void*data) {
-    Fl_Input_Choice *in=(Fl_Input_Choice *)data;
-    fprintf(stderr, "Value='%s'\n", (const char*)in->value());
-}
-
-int main(int argc, char **argv) {
-    Fl_Double_Window win(300, 200);
-
-    Fl_Input_Choice in(40,40,100,28,"Test");
-    in.callback(input_choice_cb, (void*)&in);
-    in.add("one");
-    in.add("two");
-    in.add("three");
-    in.value(1);
-
-    Fl_Button onoff(40,150,200,28,"Activate/Deactivate");
-    onoff.callback(buttcb, (void*)&in);
-
-    win.end();
-    win.resizable(win);
-    win.show(argc, argv);
-    return Fl::run();
-}
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/keyboard.cxx
+++ /dev/null
@@ -1,153 +1,0 @@
-//
-// "$Id$"
-//
-
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// Keyboard/event test program for the Fast Light Tool Kit (FLTK).
-//
-// Continuously display FLTK's event state.
-//
-// Known bugs:
-//
-// X insists on reporting the state *before* the shift key was
-// pressed, rather than after, on shift key events.  I fixed this for
-// the mouse buttons, but it did not seem worth it for shift.
-//
-// X servers do not agree about any shift flags after except shift, ctrl,
-// lock, and alt.  They may also not agree about the symbols for the extra
-// keys Micro$oft put on the keyboard.
-//
-// On IRIX the backslash key does not work.  A bug in XKeysymToKeycode?
-//
-
-#include "keyboard_ui.h"
-
-#include <string.h>
-
-
-// these are used to identify which buttons are which:
-void key_cb(Fl_Button*, void*) {}
-void shift_cb(Fl_Button*, void*) {}
-void wheel_cb(Fl_Dial*, void*) {}
-
-// this is used to stop Esc from exiting the program:
-int handle(int e) {
-  return (e == FL_SHORTCUT); // eat all keystrokes
-}
-
-int MyWindow::handle(int msg) {
-  if (msg==FL_MOUSEWHEEL)
-  {
-    roller_x->value( roller_x->value() + Fl::e_dx * roller_x->step() );
-    roller_y->value( roller_y->value() + Fl::e_dy * roller_y->step() );
-    return 1;
-  }
-  return 0;
-}
-
-struct keycode_table{int n; const char* text;} table[] = {
-  {FL_Escape, "FL_Escape"},
-  {FL_BackSpace, "FL_BackSpace"},
-  {FL_Tab, "FL_Tab"},
-  {FL_Iso_Key, "FL_Iso_Key"},
-  {FL_Enter, "FL_Enter"},
-  {FL_Print, "FL_Print"},
-  {FL_Scroll_Lock, "FL_Scroll_Lock"},
-  {FL_Pause, "FL_Pause"},
-  {FL_Insert, "FL_Insert"},
-  {FL_Home, "FL_Home"},
-  {FL_Page_Up, "FL_Page_Up"},
-  {FL_Delete, "FL_Delete"},
-  {FL_End, "FL_End"},
-  {FL_Page_Down, "FL_Page_Down"},
-  {FL_Left, "FL_Left"},
-  {FL_Up, "FL_Up"},
-  {FL_Right, "FL_Right"},
-  {FL_Down, "FL_Down"},
-  {FL_Shift_L, "FL_Shift_L"},
-  {FL_Shift_R, "FL_Shift_R"},
-  {FL_Control_L, "FL_Control_L"},
-  {FL_Control_R, "FL_Control_R"},
-  {FL_Caps_Lock, "FL_Caps_Lock"},
-  {FL_Alt_L, "FL_Alt_L"},
-  {FL_Alt_R, "FL_Alt_R"},
-  {FL_Meta_L, "FL_Meta_L"},
-  {FL_Meta_R, "FL_Meta_R"},
-  {FL_Menu, "FL_Menu"},
-  {FL_Help, "FL_Help"},
-  {FL_Num_Lock, "FL_Num_Lock"},
-  {FL_KP_Enter, "FL_KP_Enter"}
-};
-
-int main(int argc, char** argv) {
-  Fl::add_handler(handle);
-  MyWindow *window = make_window();
-  window->show(argc,argv);
-  while (Fl::wait()) {
-    const char *str;
-    
-    // update all the buttons with the current key and shift state:
-    for (int i = 0; i < window->children(); i++) {
-      Fl_Widget* b = window->child(i);
-      if (b->callback() == (Fl_Callback*)key_cb) {
-	int i = b->argument();
-	if (!i) i = b->label()[0];
-        Fl_Button *btn = ((Fl_Button*)b);
-        int state = Fl::event_key(i);
-        if (btn->value()!=state)
-	  btn->value(state);
-      } else if (b->callback() == (Fl_Callback*)shift_cb) {
-	int i = b->argument();
-        Fl_Button *btn = ((Fl_Button*)b);
-        int state = Fl::event_state(i);
-        if (btn->value()!=state)
-	  btn->value(state);
-      }
-    }
-
-    // figure out the keyname:
-    char buffer[100];
-    const char *keyname = buffer;
-    int k = Fl::event_key();
-    if (!k)
-      keyname = "0";
-    else if (k < 256) {
-      sprintf(buffer, "'%c'", k);
-    } else if (k > FL_F && k <= FL_F_Last) {
-      sprintf(buffer, "FL_F+%d", k - FL_F);
-    } else if (k >= FL_KP && k <= FL_KP_Last) {
-      sprintf(buffer, "FL_KP+'%c'", k-FL_KP);
-    } else if (k >= FL_Button && k <= FL_Button+7) {
-      sprintf(buffer, "FL_Button+%d", k-FL_Button);
-    } else {
-      sprintf(buffer, "0x%04x", k);
-      for (int i = 0; i < int(sizeof(table)/sizeof(*table)); i++)
-	if (table[i].n == k) {keyname = table[i].text; break;}
-    }
-    if (strcmp(key_output->value(), keyname))
-      key_output->value(keyname);
-
-    str = Fl::event_text();
-    if (strcmp(text_output->value(), str))
-      text_output->value(str);
-  }
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/keyboard.h
+++ /dev/null
@@ -1,37 +1,0 @@
-//
-// "$Id$"
-//
-// Keyboard/event test header for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#ifndef keyboard_h
-#  define keyboard_h
-#  include <stdio.h>
-#  include <FL/Fl.H>
-#  include <FL/Fl_Window.H>
-
-class MyWindow : public Fl_Window {
-  int handle(int);
-public:
-  MyWindow(int w, int h, const char *t=0L) 
-    : Fl_Window( w, h, t ) { }
-};
-
-#endif // !keyboard_h
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/keyboard_ui.fl
+++ /dev/null
@@ -1,718 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {make_window()} {open
-} {
-  Fl_Window my_window {open selected
-    xywh {461 296 495 215} type Double hide
-    code0 {\#include "keyboard.h"}
-    class MyWindow
-  } {
-    Fl_Button {} {
-      label {Esc }
-      user_data FL_Escape user_data_type {void*}
-      callback key_cb
-      xywh {15 70 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label F1
-      user_data {FL_F+1} user_data_type {void*}
-      callback key_cb
-      xywh {50 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F2
-      user_data {FL_F+2} user_data_type {void*}
-      callback key_cb
-      xywh {70 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F3
-      user_data {FL_F+3} user_data_type {void*}
-      callback key_cb
-      xywh {90 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F4
-      user_data {FL_F+4} user_data_type {void*}
-      callback key_cb
-      xywh {110 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F5
-      user_data {FL_F+5} user_data_type {void*}
-      callback key_cb
-      xywh {140 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F6
-      user_data {FL_F+6} user_data_type {void*}
-      callback key_cb
-      xywh {160 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F7
-      user_data {FL_F+7} user_data_type {void*}
-      callback key_cb
-      xywh {180 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F8
-      user_data {FL_F+8} user_data_type {void*}
-      callback key_cb
-      xywh {200 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F9
-      user_data {FL_F+9} user_data_type {void*}
-      callback key_cb
-      xywh {230 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F10
-      user_data {FL_F+10} user_data_type {void*}
-      callback key_cb
-      xywh {250 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F11
-      user_data {FL_F+11} user_data_type {void*}
-      callback key_cb
-      xywh {270 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F12
-      user_data {FL_F+12} user_data_type {void*}
-      callback key_cb
-      xywh {290 70 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {Print }
-      user_data FL_Print user_data_type {void*}
-      callback key_cb
-      xywh {325 70 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {Sclk }
-      user_data FL_Scroll_Lock user_data_type {void*}
-      callback key_cb
-      xywh {345 70 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {Paus }
-      user_data FL_Pause user_data_type {void*}
-      callback key_cb
-      xywh {365 70 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {`}
-      callback key_cb
-      xywh {15 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 1
-      callback key_cb
-      xywh {35 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 2
-      callback key_cb
-      xywh {55 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 3
-      callback key_cb
-      xywh {75 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 4
-      callback key_cb
-      xywh {95 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 5
-      callback key_cb
-      xywh {115 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 6
-      callback key_cb
-      xywh {135 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 7
-      callback key_cb
-      xywh {155 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 8
-      callback key_cb
-      xywh {175 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 9
-      callback key_cb
-      xywh {195 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 0
-      callback key_cb
-      xywh {215 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {-}
-      callback key_cb
-      xywh {235 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {=}
-      callback key_cb
-      xywh {255 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Bksp
-      user_data FL_BackSpace user_data_type {void*}
-      callback key_cb
-      xywh {275 100 35 20} labeltype SHADOW_LABEL labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label {Ins }
-      user_data FL_Insert user_data_type {void*}
-      callback key_cb
-      xywh {325 100 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label Home
-      user_data FL_Home user_data_type {void*}
-      callback key_cb
-      xywh {345 100 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {pgup }
-      user_data FL_Page_Up user_data_type {void*}
-      callback key_cb
-      xywh {365 100 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label Num
-      user_data FL_Num_Lock user_data_type {void*}
-      callback key_cb
-      xywh {400 100 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {/}
-      user_data {FL_KP+'/'} user_data_type {void*}
-      callback key_cb
-      xywh {420 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {*}
-      user_data {FL_KP+'*'} user_data_type {void*}
-      callback key_cb
-      xywh {440 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {-}
-      user_data {FL_KP+'-'} user_data_type {void*}
-      callback key_cb
-      xywh {460 100 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Tab
-      user_data FL_Tab user_data_type {void*}
-      callback key_cb
-      xywh {15 120 27 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label Q
-      callback key_cb
-      xywh {42 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label W
-      callback key_cb
-      xywh {62 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label E
-      callback key_cb
-      xywh {82 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label R
-      callback key_cb
-      xywh {102 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label T
-      callback key_cb
-      xywh {122 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Y
-      callback key_cb
-      xywh {142 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label U
-      callback key_cb
-      xywh {162 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label I
-      callback key_cb
-      xywh {182 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label O
-      callback key_cb
-      xywh {202 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label P
-      callback key_cb
-      xywh {222 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {[}
-      callback key_cb
-      xywh {242 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {]}
-      callback key_cb
-      xywh {262 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {\\}
-      callback key_cb
-      xywh {282 120 28 20} labelsize 10 align 20
-    }
-    Fl_Button {} {
-      label {Del }
-      user_data FL_Delete user_data_type {void*}
-      callback key_cb
-      xywh {325 120 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {End }
-      user_data FL_End user_data_type {void*}
-      callback key_cb
-      xywh {345 120 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {pgdn }
-      user_data FL_Page_Down user_data_type {void*}
-      callback key_cb
-      xywh {365 120 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label 7
-      user_data {FL_KP+'7'} user_data_type {void*}
-      callback key_cb
-      xywh {400 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 8
-      user_data {FL_KP+'8'} user_data_type {void*}
-      callback key_cb
-      xywh {420 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 9
-      user_data {FL_KP+'9'} user_data_type {void*}
-      callback key_cb
-      xywh {440 120 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {+}
-      user_data {FL_KP+'+'} user_data_type {void*}
-      callback key_cb
-      xywh {460 120 20 40} labelsize 10 align 17
-    }
-    Fl_Button {} {
-      label Lock
-      user_data FL_Caps_Lock user_data_type {void*}
-      callback key_cb
-      xywh {15 140 36 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label A
-      callback key_cb
-      xywh {51 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label S
-      callback key_cb
-      xywh {71 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label D
-      callback key_cb
-      xywh {91 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label F
-      callback key_cb
-      xywh {111 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label G
-      callback key_cb
-      xywh {131 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label H
-      callback key_cb
-      xywh {151 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label J
-      callback key_cb
-      xywh {171 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label K
-      callback key_cb
-      xywh {191 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label L
-      callback key_cb
-      xywh {211 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {;}
-      callback key_cb
-      xywh {231 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {'}
-      callback key_cb
-      xywh {251 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Enter
-      user_data FL_Enter user_data_type {void*}
-      callback key_cb
-      xywh {271 140 39 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label 4
-      user_data {FL_KP+'4'} user_data_type {void*}
-      callback key_cb
-      xywh {400 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 5
-      user_data {FL_KP+'5'} user_data_type {void*}
-      callback key_cb
-      xywh {420 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 6
-      user_data {FL_KP+'6'} user_data_type {void*}
-      callback key_cb
-      xywh {440 140 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Shift
-      user_data FL_Shift_L user_data_type {void*}
-      callback key_cb
-      xywh {15 160 45 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label Z
-      callback key_cb
-      xywh {60 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label X
-      callback key_cb
-      xywh {80 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label C
-      callback key_cb
-      xywh {100 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label V
-      callback key_cb
-      xywh {120 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label B
-      callback key_cb
-      xywh {140 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label N
-      callback key_cb
-      xywh {160 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label M
-      callback key_cb
-      xywh {180 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {,}
-      callback key_cb
-      xywh {200 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {.}
-      callback key_cb
-      xywh {220 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {/}
-      callback key_cb
-      xywh {240 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label Shift
-      user_data FL_Shift_R user_data_type {void*}
-      callback key_cb
-      xywh {260 160 50 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label {@8->}
-      user_data FL_Up user_data_type {void*}
-      callback key_cb
-      xywh {345 160 20 20} labeltype SHADOW_LABEL labelsize 10 labelcolor 47
-    }
-    Fl_Button {} {
-      label 1
-      user_data {FL_KP+'1'} user_data_type {void*}
-      callback key_cb
-      xywh {400 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 2
-      user_data {FL_KP+'2'} user_data_type {void*}
-      callback key_cb
-      xywh {420 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label 3
-      user_data {FL_KP+'3'} user_data_type {void*}
-      callback key_cb
-      xywh {440 160 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      user_data FL_KP_Enter user_data_type {void*}
-      callback key_cb
-      xywh {460 160 20 40}
-    }
-    Fl_Button {} {
-      label Ctrl
-      user_data FL_Control_L user_data_type {void*}
-      callback key_cb
-      xywh {15 180 30 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label {Meta }
-      user_data FL_Meta_L user_data_type {void*}
-      callback key_cb
-      xywh {45 180 30 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {Alt }
-      user_data FL_Alt_L user_data_type {void*}
-      callback key_cb
-      xywh {75 180 30 20} labelsize 8
-    }
-    Fl_Button {} {
-      user_data {' '} user_data_type {void*}
-      callback key_cb
-      xywh {105 180 85 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {Alt }
-      user_data FL_Alt_R user_data_type {void*}
-      callback key_cb
-      xywh {190 180 30 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {Meta }
-      user_data FL_Meta_R user_data_type {void*}
-      callback key_cb
-      xywh {220 180 30 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {Menu }
-      user_data FL_Menu user_data_type {void*}
-      callback key_cb
-      xywh {250 180 30 20} labelsize 8
-    }
-    Fl_Button {} {
-      label Ctrl
-      user_data FL_Control_R user_data_type {void*}
-      callback key_cb
-      xywh {280 180 30 20} labelsize 8 align 20
-    }
-    Fl_Button {} {
-      label {@4->}
-      user_data FL_Left user_data_type {void*}
-      callback key_cb
-      xywh {325 180 20 20} labeltype SHADOW_LABEL labelsize 10 labelcolor 47
-    }
-    Fl_Button {} {
-      label {@2->}
-      user_data FL_Down user_data_type {void*}
-      callback key_cb
-      xywh {345 180 20 20} labeltype SHADOW_LABEL labelsize 10 labelcolor 47
-    }
-    Fl_Button {} {
-      label {@6->}
-      user_data FL_Right user_data_type {void*}
-      callback key_cb
-      xywh {365 180 20 20} labeltype SHADOW_LABEL labelsize 10 labelcolor 47
-    }
-    Fl_Button {} {
-      label 0
-      user_data {FL_KP+'0'} user_data_type {void*}
-      callback key_cb
-      xywh {400 180 40 20} labelsize 10 align 20
-    }
-    Fl_Button {} {
-      label {.}
-      user_data {FL_KP+'.'} user_data_type {void*}
-      callback key_cb
-      xywh {440 180 20 20} labelsize 10
-    }
-    Fl_Button {} {
-      label {shift }
-      user_data FL_SHIFT user_data_type {void*}
-      callback shift_cb
-      xywh {400 15 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {lock }
-      user_data FL_CAPS_LOCK user_data_type {void*}
-      callback shift_cb
-      xywh {420 15 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label ctrl
-      user_data FL_CTRL user_data_type {void*}
-      callback shift_cb
-      xywh {440 15 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label alt
-      user_data FL_ALT user_data_type {void*}
-      callback shift_cb
-      xywh {460 15 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label num
-      user_data FL_NUM_LOCK user_data_type {void*}
-      callback shift_cb
-      xywh {400 25 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {?}
-      user_data 0x20 user_data_type {void*}
-      callback shift_cb
-      xywh {420 25 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {meta }
-      user_data FL_META user_data_type {void*}
-      callback shift_cb
-      xywh {440 25 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label sclk
-      user_data FL_SCROLL_LOCK user_data_type {void*}
-      callback shift_cb
-      xywh {460 25 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label b1
-      user_data FL_BUTTON1 user_data_type {void*}
-      callback shift_cb
-      xywh {400 35 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label b2
-      user_data FL_BUTTON2 user_data_type {void*}
-      callback shift_cb
-      xywh {420 35 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label b3
-      user_data FL_BUTTON3 user_data_type {void*}
-      callback shift_cb
-      xywh {440 35 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label whl
-      user_data 0x800 user_data_type {void*}
-      callback shift_cb
-      xywh {460 35 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {?}
-      user_data 0x1000 user_data_type {void*}
-      callback shift_cb
-      xywh {400 45 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {?}
-      user_data 0x2000 user_data_type {void*}
-      callback shift_cb
-      xywh {420 45 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {?}
-      user_data 0x4000 user_data_type {void*}
-      callback shift_cb
-      xywh {440 45 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Button {} {
-      label {?}
-      user_data 0x8000 user_data_type {void*}
-      callback shift_cb
-      xywh {460 45 20 10} box THIN_UP_BOX selection_color 3 labelsize 8
-    }
-    Fl_Output key_output {
-      label {Fl::event_key():}
-      xywh {15 20 170 30} labelsize 9 align 5
-    }
-    Fl_Box {} {
-      label {Fl::event_state():}
-      xywh {400 15 80 40} labelsize 9 align 5
-    }
-    Fl_Output text_output {
-      label {Fl::event_text():}
-      xywh {195 20 190 30} labelsize 9 align 5
-    }
-    Fl_Button {} {
-      label Help
-      user_data FL_Help user_data_type {void*}
-      callback key_cb
-      xywh {400 70 20 20} labelsize 8
-    }
-    Fl_Button {} {
-      label {=}
-      user_data {FL_KP+'='} user_data_type {void*}
-      callback key_cb
-      xywh {420 70 20 20} labelsize 10
-    }
-    Fl_Dial roller_x {
-      label {x:}
-      callback wheel_cb
-      xywh {440 70 20 20} box ROUND_UP_BOX selection_color 49 labelsize 9 align 5 step 0.1
-    }
-    Fl_Dial roller_y {
-      label {y:}
-      callback wheel_cb
-      xywh {460 70 20 20} box ROUND_UP_BOX selection_color 49 labelsize 9 align 5 step 0.1
-    }
-  }
-}
--- a/DoConfig/fltk/test/label.cxx
+++ /dev/null
@@ -1,203 +1,0 @@
-//
-// "$Id$"
-//
-// Label test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/fl_draw.H>
-
-#include "pixmaps/blast.xpm"
-
-Fl_Toggle_Button *imageb, *imageovertextb, *imagenexttotextb, *imagebackdropb;
-Fl_Toggle_Button *leftb,*rightb,*topb,*bottomb,*insideb,*clipb,*wrapb;
-Fl_Box *text;
-Fl_Input *input;
-Fl_Hor_Value_Slider *fonts;
-Fl_Hor_Value_Slider *sizes;
-Fl_Double_Window *window;
-Fl_Pixmap *img;
-
-void button_cb(Fl_Widget *,void *) {
-  int i = 0;
-  if (leftb->value()) i |= FL_ALIGN_LEFT;
-  if (rightb->value()) i |= FL_ALIGN_RIGHT;
-  if (topb->value()) i |= FL_ALIGN_TOP;
-  if (bottomb->value()) i |= FL_ALIGN_BOTTOM;
-  if (insideb->value()) i |= FL_ALIGN_INSIDE;
-  if (clipb->value()) i |= FL_ALIGN_CLIP;
-  if (wrapb->value()) i |= FL_ALIGN_WRAP;
-  if (imageovertextb->value()) i |= FL_ALIGN_TEXT_OVER_IMAGE;
-  if (imagenexttotextb->value()) i |= FL_ALIGN_IMAGE_NEXT_TO_TEXT;
-  if (imagebackdropb->value()) i |= FL_ALIGN_IMAGE_BACKDROP;
-  text->align(i);
-  window->redraw();
-}
-
-void image_cb(Fl_Widget *,void *) {
-  if (imageb->value())
-    text->image(img);
-  else
-    text->image(0);
-  window->redraw();
-}
-
-void font_cb(Fl_Widget *,void *) {
-  text->labelfont(int(fonts->value()));
-  window->redraw();
-}
-
-void size_cb(Fl_Widget *,void *) {
-  text->labelsize(int(sizes->value()));
-  window->redraw();
-}
-
-void input_cb(Fl_Widget *,void *) {
-  text->label(input->value());
-  window->redraw();
-}
-
-void normal_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_NORMAL_LABEL);
-  window->redraw();
-}
-
-void symbol_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_SYMBOL_LABEL);
-  if (input->value()[0] != '@') {
-    input->static_value("@->");
-    text->label("@->");
-  }
-  window->redraw();
-}
-
-void shadow_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_SHADOW_LABEL);
-  window->redraw();
-}
-
-void embossed_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_EMBOSSED_LABEL);
-  window->redraw();
-}
-
-void engraved_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_ENGRAVED_LABEL);
-  window->redraw();
-}
-
-Fl_Menu_Item choices[] = {
-  {"FL_NORMAL_LABEL",0,normal_cb},
-  {"FL_SYMBOL_LABEL",0,symbol_cb},
-  {"FL_SHADOW_LABEL",0,shadow_cb},
-  {"FL_ENGRAVED_LABEL",0,engraved_cb},
-  {"FL_EMBOSSED_LABEL",0,embossed_cb},
-  {0}};
-
-int main(int argc, char **argv) {
-  img = new Fl_Pixmap(blast_xpm);
-
-  window = new Fl_Double_Window(440,420);
-
-  input = new Fl_Input(70,375,350,25,"Label:");
-  input->static_value("The quick brown fox jumped over the lazy dog.");
-  input->when(FL_WHEN_CHANGED);
-  input->callback(input_cb);
-  input->tooltip("label text");
-
-  sizes= new Fl_Hor_Value_Slider(70,350,350,25,"Size:");
-  sizes->align(FL_ALIGN_LEFT);
-  sizes->bounds(1,64);
-  sizes->step(1);
-  sizes->value(14);
-  sizes->callback(size_cb);
-
-  fonts=new Fl_Hor_Value_Slider(70,325,350,25,"Font:");
-  fonts->align(FL_ALIGN_LEFT);
-  fonts->bounds(0,15);
-  fonts->step(1);
-  fonts->value(0);
-  fonts->callback(font_cb);
-
-  Fl_Group *g = new Fl_Group(70,275,350,50);
-  imageb = new Fl_Toggle_Button(70,275,50,25,"image");
-  imageb->callback(image_cb);
-  imageb->tooltip("show image");
-
-  imageovertextb = new Fl_Toggle_Button(120,275,50,25,"T o I");
-  imageovertextb->callback(button_cb);
-  imageovertextb->tooltip("FL_ALIGN_TEXT_OVER_IMAGE");
-
-  imagenexttotextb = new Fl_Toggle_Button(170,275,50,25,"I | T");
-  imagenexttotextb->callback(button_cb);
-  imagenexttotextb->tooltip("FL_ALIGN_IMAGE_NEXT_TO_TEXT");
-
-  imagebackdropb = new Fl_Toggle_Button(220,275,50,25,"back");
-  imagebackdropb->callback(button_cb);
-  imagebackdropb->tooltip("FL_ALIGN_IMAGE_BACKDROP");
-
-  leftb = new Fl_Toggle_Button(70,300,50,25,"left");
-  leftb->callback(button_cb);
-  leftb->tooltip("FL_ALIGN_LEFT");
-
-  rightb = new Fl_Toggle_Button(120,300,50,25,"right");
-  rightb->callback(button_cb);
-  rightb->tooltip("FL_ALIGN_RIGHT");
-
-  topb = new Fl_Toggle_Button(170,300,50,25,"top");
-  topb->callback(button_cb);
-  topb->tooltip("FL_ALIGN_TOP");
-
-  bottomb = new Fl_Toggle_Button(220,300,50,25,"bottom");
-  bottomb->callback(button_cb);
-  bottomb->tooltip("FL_ALIGN_BOTTOM");
-
-  insideb = new Fl_Toggle_Button(270,300,50,25,"inside");
-  insideb->callback(button_cb);
-  insideb->tooltip("FL_ALIGN_INSIDE");
-
-  wrapb = new Fl_Toggle_Button(320,300,50,25,"wrap");
-  wrapb->callback(button_cb);
-  wrapb->tooltip("FL_ALIGN_WRAP");
-
-  clipb = new Fl_Toggle_Button(370,300,50,25,"clip");
-  clipb->callback(button_cb);
-  clipb->tooltip("FL_ALIGN_CLIP");
-
-  g->resizable(insideb);
-  g->end();
-
-  Fl_Choice *c = new Fl_Choice(70,250,200,25);
-  c->menu(choices);
-
-  text = new Fl_Box(FL_FRAME_BOX,120,75,200,100,input->value());
-  text->align(FL_ALIGN_CENTER);
-
-  window->resizable(text);
-  window->end();
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/line_style.cxx
+++ /dev/null
@@ -1,168 +1,0 @@
-//
-// "$Id$"
-//
-// Line style demo for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2000-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Box.H>
-
-Fl_Double_Window *form;
-Fl_Slider *sliders[9];
-Fl_Choice *choice[3];
-Fl_Check_Button *draw_line;
-
-class test_box: public Fl_Double_Window {
-  void draw();
-public:
-  test_box(int x,int y,int w,int h,const char *l=0)
-    : Fl_Double_Window(x,y,w,h,l) {}
-}*test;
-
-void test_box::draw() {
-  Fl_Double_Window::draw();
-  fl_color((uchar)(sliders[0]->value()),
-	   (uchar)(sliders[1]->value()),
-	   (uchar)(sliders[2]->value()));
-  // dashes
-  char dashes[5];
-  dashes[0] = char(sliders[5]->value());
-  dashes[1] = char(sliders[6]->value());
-  dashes[2] = char(sliders[7]->value());
-  dashes[3] = char(sliders[8]->value());
-  dashes[4] = 0;
-  fl_line_style(
-    choice[0]->mvalue()->argument() +
-    choice[1]->mvalue()->argument() +
-    choice[2]->mvalue()->argument(),
-    long(sliders[3]->value()),		// width
-    dashes);
-
-  // draw the defined fl_rect and fl_vertex first and then
-  // the additional one-pixel line, if enabled
-  // sliders[4] = x/y coordinate translation (default = 10)
-
-  for (int i=0; i<draw_line->value()+1; i++) {
-    int move = (int)sliders[4]->value();
-    fl_rect(move,move,w()-20,h()-20);
-    fl_begin_line();
-    fl_vertex(move+25, move+25);
-    fl_vertex(w()-45+move, h()-45+move);
-    fl_vertex(w()-50+move, move+25);
-    fl_vertex(move+25, h()/2-10+move);
-    fl_end_line();
-    // you must reset the line type when done:
-    fl_line_style(FL_SOLID);
-    fl_color(FL_BLACK);
-  }
-}
-
-Fl_Menu_Item style_menu[] = {
-  {"FL_SOLID",	0, 0, (void*)FL_SOLID},
-  {"FL_DASH",	0, 0, (void*)FL_DASH},
-  {"FL_DOT",	0, 0, (void*)FL_DOT},
-  {"FL_DASHDOT",0, 0, (void*)FL_DASHDOT},
-  {"FL_DASHDOTDOT", 0, 0, (void*)FL_DASHDOTDOT},
-  {0}
-};
-
-Fl_Menu_Item cap_menu[] = {
-  {"default",		0, 0, 0},
-  {"FL_CAP_FLAT",	0, 0, (void*)FL_CAP_FLAT},
-  {"FL_CAP_ROUND",	0, 0, (void*)FL_CAP_ROUND},
-  {"FL_CAP_SQUARE",	0, 0, (void*)FL_CAP_SQUARE},
-  {0}
-};
-
-Fl_Menu_Item join_menu[] = {
-  {"default",		0, 0, 0},
-  {"FL_JOIN_MITER",	0, 0, (void*)FL_JOIN_MITER},
-  {"FL_JOIN_ROUND",	0, 0, (void*)FL_JOIN_ROUND},
-  {"FL_JOIN_BEVEL",	0, 0, (void*)FL_JOIN_BEVEL},
-  {0}
-};
-
-void do_redraw(Fl_Widget*,void*)
-{
-    test->redraw();
-}
-
-void makeform(const char *) {
-  form = new Fl_Double_Window(500,250,"fl_line_style() test");
-  sliders[0]= new Fl_Value_Slider(280,10,180,20,"R");
-  sliders[0]->bounds(0,255);
-  sliders[1]= new Fl_Value_Slider(280,30,180,20,"G");
-  sliders[1]->bounds(0,255);
-  sliders[2]= new Fl_Value_Slider(280,50,180,20,"B");
-  sliders[2]->bounds(0,255);
-  choice[0]= new Fl_Choice(280,70,180,20,"Style");
-  choice[0]->menu(style_menu);
-  choice[1]= new Fl_Choice(280,90,180,20,"Cap");
-  choice[1]->menu(cap_menu);
-  choice[2]= new Fl_Choice(280,110,180,20,"Join");
-  choice[2]->menu(join_menu);
-  sliders[3]= new Fl_Value_Slider(280,130,180,20,"Width");
-  sliders[3]->bounds(0,20);
-  sliders[4]= new Fl_Value_Slider(280,150,180,20,"Move");
-  sliders[4]->bounds(-10,20);
-  draw_line = new Fl_Check_Button(280,170,20,20,"&Line");
-  draw_line->align(FL_ALIGN_LEFT);
-  new Fl_Box (305,170,160,20,"add a 1-pixel black line");
-  sliders[5] = new Fl_Slider(200,210,70,20,"Dash");
-  sliders[5]->align(FL_ALIGN_TOP_LEFT);
-  sliders[5]->bounds(0,40);
-  sliders[6] = new Fl_Slider(270,210,70,20);
-  sliders[6]->bounds(0,40);
-  sliders[7] = new Fl_Slider(340,210,70,20);
-  sliders[7]->bounds(0,40);
-  sliders[8] = new Fl_Slider(410,210,70,20);
-  sliders[8]->bounds(0,40);
-  int i;
-  for (i=0;i<9;i++) {
-    sliders[i]->type(1);
-    if (i<5) sliders[i]->align(FL_ALIGN_LEFT);
-    sliders[i]->callback((Fl_Callback*)do_redraw);
-    sliders[i]->step(1);
-  }
-  sliders[0]->value(255); // R
-  sliders[1]->value(100); // G
-  sliders[2]->value(100); // B
-  sliders[4]->value(10);  // move line coordinates
-  draw_line->value(0);
-  draw_line->callback((Fl_Callback*)do_redraw);
-  for (i=0;i<3;i++) {
-    choice[i]->value(0);
-    choice[i]->callback((Fl_Callback*)do_redraw);
-  }
-  test = new test_box(0,0,200,200);
-  test->end();
-  form->resizable(test);
-  form->end();
-}
-
-int main(int argc, char **argv) {
-  makeform(argv[0]);
-  form->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/list_visuals.cxx
+++ /dev/null
@@ -1,235 +1,0 @@
-//
-// "$Id$"
-//
-// Visual list utility for the Fast Light Tool Kit (FLTK).
-//
-// List all the visuals on the screen, and dumps anything interesting
-// about them to stdout.
-//
-// Does not use FLTK.
-//
-// This file may be #included in another program to make a function to
-// call to list the visuals.  Fl.H must be included first to indicate this.
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#if defined(WIN32) || defined(__APPLE__)
-#include <FL/Fl.H>
-#include <FL/fl_message.H>
-
-int main(int, char**) {
-  fl_alert("Currently, this program works only under X.");
-  return 1;
-}
-
-#else
-
-#include <config.h>
-
-#define HAVE_MULTIBUF 0
-
-#ifndef Fl_H
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <X11/Xatom.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-Display *fl_display;
-int fl_screen;
-const char *dname;
-void fl_open_display() {
-  fl_display = XOpenDisplay(dname);
-  if (!fl_display) {
-    fprintf(stderr,"Can't open display: %s\n",XDisplayName(dname));
-    exit(1);
-  }
-  fl_screen = DefaultScreen(fl_display);
-}
-
-#endif
-
-const char *ClassNames[] = {
-  "StaticGray ",
-  "GrayScale  ",
-  "StaticColor",
-  "PseudoColor",
-  "TrueColor  ",
-  "DirectColor"
-};
-
-// SERVER_OVERLAY_VISUALS property element:
-typedef struct _OverlayInfo {
-  long overlay_visual;
-  long transparent_type;
-  long value;
-  long layer;
-} OverlayInfo;
-
-#if HAVE_MULTIBUF
-#include <X11/extensions/multibuf.h>
-#endif
-
-#if HAVE_XDBE
-#include <X11/extensions/Xdbe.h>
-#endif
-
-static void print_mask(XVisualInfo* p) {
-  int n = 0;
-  int what = 0;
-  int print_anything = 0;
-  char buf[20];
-  char *q = buf;
-  *q = 0;
-  int b; unsigned int m; for (b=32,m=0x80000000; ; b--,m>>=1) {
-    int new_what = 0;
-    if (p->red_mask&m) new_what = 'r';
-    else if (p->green_mask&m) new_what = 'g';
-    else if (p->blue_mask&m) new_what = 'b';
-    else new_what = '?';
-    if (new_what != what) {
-      if (what && (what != '?' || print_anything)) {
-	q += sprintf(q,"%d%c", n, what);
-	print_anything = 1;
-      }
-      what = new_what;
-      n = 1;
-    } else {
-      n++;
-    }
-    if (!b) break;
-  }
-  printf("%7s", buf);
-}
-
-void list_visuals() {
-  fl_open_display();
-  XVisualInfo vTemplate;
-  int num;
-  XVisualInfo *visualList = XGetVisualInfo(fl_display,0,&vTemplate,&num);
-
-  XPixmapFormatValues *pfvlist;
-  static int numpfv;
-  pfvlist = XListPixmapFormats(fl_display, &numpfv);
-
-  OverlayInfo *overlayInfo = 0;
-  int numoverlayinfo = 0;
-  Atom overlayVisualsAtom = XInternAtom(fl_display,"SERVER_OVERLAY_VISUALS",1);
-  if (overlayVisualsAtom) {
-    unsigned long sizeData, bytesLeft;
-    Atom actualType;
-    int actualFormat;
-    if (!XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen),
-			   overlayVisualsAtom, 0L, 10000L, False,
-			   overlayVisualsAtom, &actualType, &actualFormat,
-			   &sizeData, &bytesLeft,
-			   (unsigned char **) &overlayInfo))
-      numoverlayinfo = int(sizeData/4);
-  }
-
-#if HAVE_MULTIBUF
-  int event_base, error_base;
-  XmbufBufferInfo *mbuf, *sbuf;
-  int nmbuf = 0, nsbuf = 0;
-  if (XmbufQueryExtension(fl_display,&event_base, &error_base)) {
-    XmbufGetScreenInfo(fl_display,RootWindow(fl_display,fl_screen),
-		       &nmbuf, &mbuf, &nsbuf, &sbuf);
-  }
-#endif
-
-#if HAVE_XDBE
-  int event_base, error_base;
-  int numdouble = 0;
-  XdbeVisualInfo *dbe = 0;
-  if (XdbeQueryExtension(fl_display, &event_base, &error_base)) {
-    Drawable root = RootWindow(fl_display,fl_screen);
-    int numscreens = 1;
-    XdbeScreenVisualInfo *a = XdbeGetVisualInfo(fl_display,&root,&numscreens);
-    if (!a) printf("error getting double buffer visuals\n");
-    else {
-      dbe = a->visinfo;
-      numdouble = a->count;
-    }
-  }
-#endif
-
-  for (int i=0; i<num; i++) {
-    XVisualInfo *p = visualList+i;
-
-    XPixmapFormatValues *pfv;
-    for (pfv = pfvlist; ; pfv++) {
-      if (pfv >= pfvlist+numpfv) {pfv = 0; break;} // should not happen!
-      if (pfv->depth == p->depth) break;
-    }
-
-    int j = pfv ? pfv->bits_per_pixel : 0;
-    printf(" %2ld: %s %2d/%d", p->visualid, ClassNames[p->c_class],
-	   p->depth, j);
-    if (j < 10) putchar(' ');
-
-    print_mask(p);
-
-    for (j=0; j<numoverlayinfo; j++) {
-      OverlayInfo *o = &overlayInfo[j];
-      if (o->overlay_visual == long(p->visualid)) {
-	printf(" overlay(");
-	if (o->transparent_type==1) printf("transparent pixel %ld, ",o->value);
-	else if (o->transparent_type==2) printf("transparent mask %ld, ",o->value);
-	else printf("opaque, ");
-	printf("layer %ld)", o->layer);
-      }
-    }
-
-#if HAVE_MULTIBUF
-    for (j=0; j<nmbuf; j++) {
-      XmbufBufferInfo *m = &mbuf[j];
-      if (m->visualid == p->visualid)
-	printf(" multibuffer(%d)", m->max_buffers);
-    }
-    for (j=0; j<nsbuf; j++) {
-      XmbufBufferInfo *m = &sbuf[j];
-      if (m->visualid == p->visualid)
-	printf(" stereo multibuffer(%d)", m->max_buffers);
-    }
-#endif
-
-#if HAVE_XDBE
-    for (j = 0; j < numdouble; j++) if (dbe[j].visual == p->visualid)
-      printf(" doublebuf(perflevel %d)",dbe[j].perflevel);
-#endif
-
-    if (p->visualid==XVisualIDFromVisual(DefaultVisual(fl_display,fl_screen)))
-      printf(" (default visual)");
-
-    putchar('\n');
-  }
-  if ( overlayInfo ) { XFree(overlayInfo); overlayInfo = 0; }
-}
-
-#endif
-
-#ifndef Fl_H
-int main(int argc, char **argv) {
-  if (argc == 1);
-  else if (argc == 2 && argv[1][0]!='-') dname = argv[1];
-  else {fprintf(stderr,"usage: %s <display>\n",argv[0]); exit(1);}
-  list_visuals();
-  return 0;
-}
-#endif
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/makedepend
+++ /dev/null
@@ -1,690 +1,0 @@
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-unittests.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-unittests.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-unittests.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-unittests.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-unittests.o: ../FL/Fl_Hold_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-unittests.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-unittests.o: ../FL/Fl_Help_View.H ../FL/Fl.H ../FL/fl_draw.H ../FL/x.H
-unittests.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-unittests.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-unittests.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-unittests.o: ../FL/Fl_Shared_Image.H ../FL/filename.H ../FL/Fl_Group.H
-unittests.o: ../FL/Fl_Box.H ../FL/fl_draw.H unittest_about.cxx
-unittests.o: unittest_points.cxx unittest_lines.cxx unittest_rects.cxx
-unittests.o: unittest_circles.cxx unittest_text.cxx unittest_symbol.cxx
-unittests.o: unittest_images.cxx unittest_viewport.cxx
-unittests.o: unittest_scrollbarsize.cxx ../FL/Fl_Browser.H ../FL/Fl_Tree.H
-unittests.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Tree_Item.H ../FL/Fl_Widget.H
-unittests.o: ../FL/Fl_Tree_Item_Array.H ../FL/Fl_Tree_Prefs.H
-unittests.o: ../FL/Fl_Table.H ../FL/Fl_Scroll.H ../FL/Fl_Value_Slider.H
-unittests.o: unittest_schemes.cxx ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-unittests.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Button.H ../FL/Fl_Tabs.H
-unittests.o: ../FL/Fl_Clock.H ../FL/Fl_Progress.H ../FL/Fl_Slider.H
-unittests.o: ../FL/Fl_Value_Output.H ../FL/Fl_Adjuster.H ../FL/Fl_Counter.H
-unittests.o: ../FL/Fl_Roller.H ../FL/Fl_Value_Input.H ../FL/Fl_Input.H
-unittests.o: ../FL/Fl_Input_.H ../FL/Fl_Input.H ../FL/Fl_Output.H
-unittests.o: ../FL/Fl_Text_Editor.H ../FL/Fl_Text_Display.H
-unittests.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Display.H
-unittests.o: ../FL/Fl_File_Input.H ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-unittests.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-animated.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-animated.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-animated.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-animated.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-animated.o: ../FL/Fl_Button.H ../FL/Fl_Image.H ../FL/x.H ../FL/fl_draw.H
-adjuster.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-adjuster.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-adjuster.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-adjuster.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-adjuster.o: ../FL/Fl_Adjuster.H ../FL/Fl_Box.H
-arc.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-arc.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-arc.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-arc.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-arc.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H
-arc.o: ../FL/Fl_Valuator.H ../FL/fl_draw.H
-ask.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-ask.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-ask.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-ask.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Input.H
-ask.o: ../FL/Fl_Button.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-ask.o: ../FL/Fl_Box.H ../FL/fl_ask.H
-bitmap.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-bitmap.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-bitmap.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-bitmap.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-bitmap.o: ../FL/Fl_Button.H ../FL/Fl_Bitmap.H ../FL/Fl_Toggle_Button.H
-bitmap.o: ../FL/Fl_Button.H
-blocks.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-blocks.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-blocks.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-blocks.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-blocks.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_XPM_Image.H
-blocks.o: ../FL/Fl_Pixmap.H ../FL/Fl_XBM_Image.H ../FL/Fl_Tiled_Image.H
-blocks.o: ../FL/fl_draw.H ../FL/x.H ../config.h pixmaps/blast.xpm
-blocks.o: pixmaps/red.xpm pixmaps/red_bomb.xpm pixmaps/green.xpm
-blocks.o: pixmaps/green_bomb.xpm pixmaps/blue.xpm pixmaps/blue_bomb.xpm
-blocks.o: pixmaps/yellow.xpm pixmaps/yellow_bomb.xpm pixmaps/cyan.xpm
-blocks.o: pixmaps/cyan_bomb.xpm pixmaps/magenta.xpm pixmaps/magenta_bomb.xpm
-blocks.o: pixmaps/gray.xpm pixmaps/gray_bomb.xpm
-boxtype.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-boxtype.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-boxtype.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-boxtype.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-boxtype.o: ../FL/Fl_Box.H ../FL/fl_draw.H
-browser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-browser.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-browser.o: ../FL/Fl_Select_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-browser.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-browser.o: ../FL/Fl_Image.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-browser.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-browser.o: ../FL/Fl_Button.H ../FL/Fl_Int_Input.H ../FL/Fl_Input.H
-browser.o: ../FL/Fl_Input_.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-browser.o: ../FL/Fl_Menu_Item.H ../FL/fl_ask.H
-button.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-button.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-button.o: ../FL/Fl_Window.H ../FL/Fl_Button.H ../FL/fl_ask.H
-buttons.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-buttons.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-buttons.o: ../FL/Fl_Window.H ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
-buttons.o: ../FL/Fl_Button.H ../FL/Fl_Repeat_Button.H ../FL/Fl.H
-buttons.o: ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-buttons.o: ../FL/Fl_Light_Button.H ../FL/Fl_Round_Button.H ../FL/Fl_Tooltip.H
-buttons.o: ../FL/Fl_Widget.H
-cairo_test.o: ../config.h ../FL/fl_ask.H ../FL/Enumerations.H
-cairo_test.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-checkers.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-checkers.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-checkers.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-checkers.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-checkers.o: ../FL/Fl_Bitmap.H ../FL/fl_draw.H ../FL/Fl_Menu_Item.H
-checkers.o: ../FL/fl_ask.H pixmaps/black_1.xbm pixmaps/black_2.xbm
-checkers.o: pixmaps/black_3.xbm pixmaps/black_4.xbm pixmaps/white_1.xbm
-checkers.o: pixmaps/white_2.xbm pixmaps/white_3.xbm pixmaps/white_4.xbm
-checkers.o: pixmaps/blackking_1.xbm pixmaps/blackking_2.xbm
-checkers.o: pixmaps/blackking_3.xbm pixmaps/blackking_4.xbm
-checkers.o: pixmaps/whiteking_1.xbm pixmaps/whiteking_2.xbm
-checkers.o: pixmaps/whiteking_3.xbm pixmaps/whiteking_4.xbm ../FL/Fl_Box.H
-checkers.o: ../FL/Fl_Slider.H ../FL/Fl_Value_Output.H
-clock.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-clock.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-clock.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-clock.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-clock.o: ../FL/Fl_Clock.H ../FL/Fl_Round_Clock.H ../FL/Fl_Clock.H
-colbrowser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-colbrowser.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-colbrowser.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-colbrowser.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-colbrowser.o: ../FL/Fl_Button.H ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H
-colbrowser.o: ../FL/Fl_Valuator.H ../FL/Fl_Hold_Browser.H ../FL/Fl_Browser.H
-colbrowser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Box.H
-colbrowser.o: ../FL/fl_ask.H ../FL/filename.H
-color_chooser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-color_chooser.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-color_chooser.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Box.H
-color_chooser.o: ../FL/Fl_Button.H ../FL/fl_show_colormap.H
-color_chooser.o: ../FL/Fl_Color_Chooser.H ../FL/Fl_Group.H
-color_chooser.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H ../FL/Fl_Choice.H
-color_chooser.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H
-color_chooser.o: ../FL/Fl_Image.H ../FL/Fl_Value_Input.H ../FL/Fl_Valuator.H
-color_chooser.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Image.H
-color_chooser.o: ../FL/x.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-color_chooser.o: ../FL/Fl_Bitmap.H ../FL/fl_draw.H list_visuals.cxx
-color_chooser.o: ../config.h
-cube.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-cube.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-cube.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Box.H
-cube.o: ../FL/Fl_Button.H ../FL/Fl_Radio_Light_Button.H
-cube.o: ../FL/Fl_Light_Button.H ../FL/Fl_Slider.H ../FL/Fl_Gl_Window.H
-cube.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-cube.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/gl.h ../FL/Fl_Sys_Menu_Bar.H
-cube.o: ../FL/Fl_Menu_Bar.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/x.H
-cube.o: ../FL/Fl_Printer.H ../FL/x.H ../FL/Fl_Paged_Device.H
-cube.o: ../FL/Fl_Device.H ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-cube.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-cube.o: ../FL/Fl_RGB_Image.H ../FL/fl_draw.H ../FL/Fl_PostScript.H
-CubeMain.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-CubeMain.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-CubeMain.o: ../FL/abi-version.h CubeViewUI.h ../FL/Fl_Double_Window.H
-CubeMain.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-CubeMain.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Group.H
-CubeMain.o: ../FL/Fl_Roller.H ../FL/Fl_Slider.H ../FL/Fl_Box.H CubeView.h
-CubeMain.o: ../FL/Fl_Gl_Window.H ../FL/gl.h ../FL/Fl_Value_Slider.H
-CubeMain.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-CubeView.o: CubeView.h ../config.h ../FL/Fl.H ../FL/Fl_Export.H
-CubeView.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-CubeView.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Gl_Window.H
-CubeView.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-CubeView.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/gl.h
-cursor.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-cursor.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-cursor.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-cursor.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-cursor.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H
-cursor.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Choice.H
-cursor.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/fl_draw.H
-cursor.o: ../FL/Fl_Box.H
-curve.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-curve.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-curve.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-curve.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-curve.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H
-curve.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H
-curve.o: ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H
-demo.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-demo.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-demo.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-demo.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-demo.o: ../FL/Fl_Button.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-demo.o: ../FL/Fl_Menu_Item.H ../FL/filename.H ../FL/x.H
-device.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-device.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-device.o: ../FL/Fl_Overlay_Window.H ../FL/Fl_Double_Window.H
-device.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-device.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Light_Button.H
-device.o: ../FL/Fl_Button.H ../FL/Fl_Radio_Round_Button.H
-device.o: ../FL/Fl_Round_Button.H ../FL/Fl_Light_Button.H ../FL/fl_draw.H
-device.o: ../FL/Fl_Clock.H pixmaps/porsche.xpm ../FL/Fl_Pixmap.H
-device.o: ../FL/Fl_Bitmap.H ../FL/Fl_Round_Button.H ../FL/Fl_Printer.H
-device.o: ../FL/x.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-device.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-device.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_PostScript.H
-device.o: ../FL/Fl_Copy_Surface.H ../FL/Fl_Image_Surface.H
-device.o: ../FL/Fl_Shared_Image.H ../FL/Fl_File_Chooser.H
-device.o: ../FL/Fl_Double_Window.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-device.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Menu_Button.H
-device.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-device.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-device.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-device.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H ../FL/Fl_Box.H
-device.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-device.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-doublebuffer.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-doublebuffer.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-doublebuffer.o: ../FL/abi-version.h ../FL/Fl_Single_Window.H
-doublebuffer.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-doublebuffer.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Double_Window.H
-doublebuffer.o: ../FL/Fl_Box.H ../FL/fl_draw.H ../FL/Fl_Hor_Slider.H
-doublebuffer.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/math.h
-editor.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-editor.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h ../FL/x.H
-editor.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-editor.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Group.H
-editor.o: ../FL/Fl_Double_Window.H ../FL/fl_ask.H
-editor.o: ../FL/Fl_Native_File_Chooser.H ../FL/Fl_File_Chooser.H
-editor.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-editor.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H ../FL/Fl_Preferences.H
-editor.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-editor.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-editor.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-editor.o: ../FL/filename.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-editor.o: ../FL/Fl_Light_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-editor.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H ../FL/Fl_Menu_Bar.H
-editor.o: ../FL/Fl_Text_Buffer.H ../FL/Fl_Text_Editor.H
-editor.o: ../FL/Fl_Text_Display.H ../FL/fl_draw.H ../FL/Enumerations.H
-editor.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-editor.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-editor.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Text_Buffer.H
-editor.o: ../FL/filename.H
-fast_slow.o: fast_slow.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fast_slow.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fast_slow.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-fast_slow.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fast_slow.o: ../FL/Fl_Image.H ../FL/Fl_Slider.H ../FL/Fl_Box.H
-file_chooser.o: ../FL/Fl_File_Chooser.H ../FL/Fl.H ../FL/Fl_Export.H
-file_chooser.o: ../FL/fl_utf8.h ../FL/Fl_Export.H ../FL/fl_types.h
-file_chooser.o: ../FL/Enumerations.H ../FL/abi-version.h
-file_chooser.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-file_chooser.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-file_chooser.o: ../FL/Fl_Group.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-file_chooser.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H
-file_chooser.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-file_chooser.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-file_chooser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-file_chooser.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-file_chooser.o: ../FL/filename.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-file_chooser.o: ../FL/Fl_Light_Button.H ../FL/Fl_File_Input.H
-file_chooser.o: ../FL/Fl_Input.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-file_chooser.o: ../FL/fl_ask.H ../FL/Fl_File_Icon.H ../FL/Fl_Shared_Image.H
-file_chooser.o: ../FL/Fl_PNM_Image.H ../FL/Fl_Light_Button.H
-fonts.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-fonts.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-fonts.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fonts.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Tile.H
-fonts.o: ../FL/Fl_Hold_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-fonts.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-fonts.o: ../FL/fl_draw.H ../FL/Fl_Box.H ../FL/fl_ask.H
-forms.o: ../FL/forms.H ../FL/Fl.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-forms.o: ../FL/Enumerations.H ../FL/abi-version.h ../FL/Fl_Export.H
-forms.o: ../FL/fl_types.h ../FL/Fl_Window.H ../FL/Fl_Bitmap.H
-forms.o: ../FL/Fl_Image.H ../FL/fl_draw.H ../FL/x.H ../FL/Enumerations.H
-forms.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-forms.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-forms.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_FormsBitmap.H
-forms.o: ../FL/Fl_FormsPixmap.H ../FL/Fl_Pixmap.H ../FL/Fl_Box.H
-forms.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H
-forms.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl.H ../FL/Fl_Export.H
-forms.o: ../FL/fl_utf8.h ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-forms.o: ../FL/Fl_Round_Button.H ../FL/Fl_Check_Button.H ../FL/Fl_Chart.H
-forms.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-forms.o: ../FL/Fl_Clock.H ../FL/Fl_Counter.H ../FL/Fl_Dial.H ../FL/Fl_Free.H
-forms.o: ../FL/fl_ask.H ../FL/fl_show_colormap.H ../FL/filename.H
-forms.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Double_Window.H ../FL/Fl_Group.H
-forms.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H
-forms.o: ../FL/Fl_Preferences.H ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-forms.o: ../FL/Fl_File_Icon.H ../FL/Fl_Box.H ../FL/Fl_Check_Button.H
-forms.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Return_Button.H
-forms.o: ../FL/fl_ask.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-forms.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Positioner.H ../FL/Fl_Value_Slider.H
-forms.o: ../FL/Fl_Timer.H pixmaps/srs.xbm
-fractals.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-fractals.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl.H
-fractals.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-fractals.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/glu.h
-fractals.o: fracviewer.h ../FL/Fl_Button.H ../FL/Fl_Group.H ../FL/Fl_Window.H
-fracviewer.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-fracviewer.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-fracviewer.o: ../FL/Fl.H ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H
-fracviewer.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fracviewer.o: ../FL/Fl_Image.H ../FL/glu.h fracviewer.h
-fullscreen.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-fullscreen.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-fullscreen.o: ../FL/abi-version.h ../FL/Fl_Single_Window.H ../FL/Fl_Window.H
-fullscreen.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-fullscreen.o: ../FL/Fl_Image.H ../FL/Fl_Hor_Slider.H ../FL/Fl_Slider.H
-fullscreen.o: ../FL/Fl_Valuator.H ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H
-fullscreen.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-fullscreen.o: ../FL/Fl_Toggle_Light_Button.H ../FL/Fl_Light_Button.H
-fullscreen.o: ../FL/math.h ../FL/fl_ask.H ../FL/Fl_Browser.H ../FL/gl.h
-fullscreen.o: ../FL/Fl_Gl_Window.H
-gl_overlay.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-gl_overlay.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-gl_overlay.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Hor_Slider.H
-gl_overlay.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Toggle_Button.H
-gl_overlay.o: ../FL/Fl_Button.H ../FL/math.h ../FL/gl.h ../FL/Fl_Gl_Window.H
-gl_overlay.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-gl_overlay.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-glpuzzle.o: ../config.h ../FL/glut.H ../FL/gl.h ../FL/Enumerations.H
-glpuzzle.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Fl.H
-glpuzzle.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-glpuzzle.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/glu.h
-glpuzzle.o: trackball.c trackball.h
-hello.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-hello.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-hello.o: ../FL/Fl_Window.H ../FL/Fl_Box.H
-help.o: ../FL/Fl_Help_Dialog.H ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-help.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-help.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-help.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-help.o: ../FL/Fl_Group.H ../FL/Fl_Button.H ../FL/Fl_Input.H ../FL/Fl_Box.H
-help.o: ../FL/Fl_Help_View.H ../FL/Fl.H ../FL/Fl_Scrollbar.H
-help.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-help.o: ../FL/Enumerations.H ../FL/Fl_Window.H ../FL/Fl_Device.H
-help.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-help.o: ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H
-help.o: ../FL/Fl_Shared_Image.H ../FL/filename.H
-icon.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-icon.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-icon.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-icon.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-icon.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-icon.o: ../FL/Fl_RGB_Image.H
-iconize.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-iconize.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-iconize.o: ../FL/Fl_Window.H ../FL/Fl_Button.H ../FL/Fl_Box.H
-image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-image.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-image.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-image.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-image.o: ../FL/Fl_Button.H ../FL/Fl_Image.H ../FL/Fl_Toggle_Button.H
-image.o: ../FL/Fl_Button.H ../FL/x.H list_visuals.cxx ../config.h
-inactive.o: inactive.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-inactive.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-inactive.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-inactive.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-inactive.o: ../FL/Fl_Image.H ../FL/Fl_Group.H ../FL/Fl_Button.H
-inactive.o: ../FL/Fl_Light_Button.H ../FL/Fl_Button.H ../FL/Fl_Check_Button.H
-inactive.o: ../FL/Fl_Light_Button.H ../FL/Fl_Round_Button.H ../FL/Fl_Slider.H
-inactive.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-inactive.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Value_Output.H ../FL/Fl_Box.H
-inactive.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Roller.H ../FL/Fl_Dial.H
-inactive.o: ../FL/Fl_Valuator.H ../FL/Fl_Clock.H
-input.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-input.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-input.o: ../FL/Fl_Window.H ../FL/Fl_Input.H ../FL/Fl_Float_Input.H
-input.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Int_Input.H
-input.o: ../FL/Fl_Secret_Input.H ../FL/Fl_Multiline_Input.H ../FL/Fl_Button.H
-input.o: ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H ../FL/Fl_Light_Button.H
-input.o: ../FL/Fl_Color_Chooser.H ../FL/Fl_Group.H ../FL/Fl_Box.H
-input.o: ../FL/Fl_Return_Button.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-input.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-input.o: ../FL/Fl_Value_Input.H ../FL/Fl_Valuator.H
-input_choice.o: ../FL/Fl_Button.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-input_choice.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Enumerations.H
-input_choice.o: ../FL/abi-version.h ../FL/Fl_Export.H ../FL/fl_types.h
-input_choice.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Input_Choice.H
-input_choice.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Group.H
-input_choice.o: ../FL/Fl_Input.H ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H
-input_choice.o: ../FL/Fl_Menu_Item.H ../FL/fl_draw.H
-keyboard.o: keyboard_ui.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-keyboard.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-keyboard.o: ../FL/abi-version.h keyboard.h ../FL/Fl_Window.H
-keyboard.o: ../FL/Fl_Button.H ../FL/Fl_Output.H ../FL/Fl_Input.H
-keyboard.o: ../FL/Fl_Input_.H ../FL/Fl_Box.H ../FL/Fl_Dial.H
-keyboard.o: ../FL/Fl_Valuator.H
-label.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-label.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-label.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-label.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-label.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H
-label.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/Fl_Toggle_Button.H
-label.o: ../FL/Fl_Button.H ../FL/Fl_Input.H ../FL/Fl_Choice.H
-label.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Pixmap.H
-label.o: ../FL/fl_draw.H pixmaps/blast.xpm
-line_style.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-line_style.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-line_style.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-line_style.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-line_style.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-line_style.o: ../FL/fl_draw.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-line_style.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Check_Button.H
-line_style.o: ../FL/Fl_Light_Button.H ../FL/Fl_Box.H
-list_visuals.o: ../config.h
-mandelbrot.o: mandelbrot_ui.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-mandelbrot.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-mandelbrot.o: ../FL/abi-version.h mandelbrot.h ../FL/Fl_Box.H
-mandelbrot.o: ../FL/Fl_Slider.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-mandelbrot.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-mandelbrot.o: ../FL/Fl_Image.H ../FL/Fl_Input.H ../FL/Fl_Window.H
-mandelbrot.o: ../FL/Fl_Float_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-mandelbrot.o: ../FL/fl_draw.H ../FL/Fl_Button.H ../FL/Fl_Printer.H ../FL/x.H
-mandelbrot.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-mandelbrot.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-mandelbrot.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_PostScript.H
-menubar.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-menubar.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-menubar.o: ../FL/Fl_Box.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-menubar.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-menubar.o: ../FL/Fl_Image.H ../FL/Fl_Sys_Menu_Bar.H ../FL/Fl_Menu_Bar.H
-menubar.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/x.H
-menubar.o: ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H ../FL/Fl_Menu_Button.H
-menubar.o: ../FL/Fl_Choice.H ../src/flstring.h ../config.h ../FL/fl_draw.H
-message.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-message.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-message.o: ../FL/Fl_Window.H ../FL/fl_ask.H
-minimum.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-minimum.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-minimum.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-minimum.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-minimum.o: ../FL/Fl_Slider.H ../FL/Fl_Box.H ../FL/Fl_Return_Button.H
-minimum.o: ../FL/Fl_Button.H
-native-filechooser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-native-filechooser.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-native-filechooser.o: ../FL/abi-version.h ../FL/fl_ask.H ../FL/Fl_Window.H
-native-filechooser.o: ../FL/Fl_Button.H ../FL/Fl_Input.H
-native-filechooser.o: ../FL/Fl_Multiline_Input.H ../FL/Fl_Input.H
-native-filechooser.o: ../FL/Fl_Input_.H ../FL/Fl_Box.H
-native-filechooser.o: ../FL/Fl_Native_File_Chooser.H ../FL/Fl_File_Chooser.H
-native-filechooser.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-native-filechooser.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-native-filechooser.o: ../FL/Fl_Image.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-native-filechooser.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-native-filechooser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Preferences.H
-native-filechooser.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H
-native-filechooser.o: ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-native-filechooser.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-native-filechooser.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-native-filechooser.o: ../FL/filename.H ../FL/Fl_Check_Button.H
-native-filechooser.o: ../FL/Fl_Light_Button.H ../FL/Fl_File_Input.H
-native-filechooser.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-native-filechooser.o: ../FL/Fl_Help_View.H ../FL/fl_draw.H ../FL/x.H
-native-filechooser.o: ../FL/Enumerations.H ../FL/Fl_Device.H
-native-filechooser.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H
-native-filechooser.o: ../FL/Fl_Image.H ../FL/Fl_Bitmap.H ../FL/Fl_Pixmap.H
-native-filechooser.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Shared_Image.H
-navigation.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-navigation.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-navigation.o: ../FL/Fl_Window.H ../FL/Fl_Input.H ../FL/Fl_Light_Button.H
-navigation.o: ../FL/Fl_Button.H
-offscreen.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-offscreen.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-offscreen.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-offscreen.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/x.H
-offscreen.o: ../FL/Fl_Box.H ../FL/fl_draw.H
-output.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-output.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-output.o: ../FL/Fl_Value_Input.H ../FL/Fl_Valuator.H ../FL/Fl_Input.H
-output.o: ../FL/Fl_Input_.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-output.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-output.o: ../FL/Fl_Image.H ../FL/Fl_Box.H ../FL/Fl_Hor_Value_Slider.H
-output.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H ../FL/Fl_Toggle_Button.H
-output.o: ../FL/Fl_Button.H ../FL/Fl_Input.H ../FL/fl_draw.H
-output.o: ../FL/Fl_Output.H ../FL/Fl_Multiline_Output.H ../FL/Fl_Output.H
-overlay.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-overlay.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-overlay.o: ../FL/Fl_Window.H ../FL/Fl_Overlay_Window.H
-overlay.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-overlay.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-overlay.o: ../FL/Fl_Button.H ../FL/fl_draw.H
-pack.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-pack.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-pack.o: ../FL/Fl_Button.H ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-pack.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-pack.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-pack.o: ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-pack.o: ../FL/Fl_Valuator.H ../FL/Fl_Value_Slider.H ../FL/Fl_Pack.H
-pack.o: ../FL/Fl_Group.H
-pixmap_browser.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-pixmap_browser.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-pixmap_browser.o: ../FL/abi-version.h ../FL/Fl_Box.H ../FL/Fl_Double_Window.H
-pixmap_browser.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-pixmap_browser.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Button.H
-pixmap_browser.o: ../FL/Fl_Shared_Image.H ../FL/Fl_Printer.H ../FL/x.H
-pixmap_browser.o: ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-pixmap_browser.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-pixmap_browser.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H
-pixmap_browser.o: ../FL/fl_draw.H ../FL/Fl_PostScript.H
-pixmap_browser.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-pixmap_browser.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-pixmap_browser.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Preferences.H
-pixmap_browser.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-pixmap_browser.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-pixmap_browser.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H
-pixmap_browser.o: ../FL/filename.H ../FL/Fl_Check_Button.H
-pixmap_browser.o: ../FL/Fl_Light_Button.H ../FL/Fl_File_Input.H
-pixmap_browser.o: ../FL/Fl_Input.H ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-pixmap_browser.o: ../FL/fl_ask.H ../FL/fl_message.H ../FL/fl_ask.H
-pixmap.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-pixmap.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-pixmap.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-pixmap.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-pixmap.o: ../FL/Fl_Button.H ../FL/Fl_Pixmap.H pixmaps/porsche.xpm
-pixmap.o: ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H ../FL/Fl_Multi_Label.H
-preferences.o: preferences.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-preferences.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-preferences.o: ../FL/abi-version.h ../FL/Fl_Preferences.H
-preferences.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-preferences.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-preferences.o: ../FL/Fl_Button.H ../FL/Fl_Group.H ../FL/Fl_Input.H
-preferences.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-preferences.o: ../FL/Fl_Round_Button.H ../FL/Fl_Light_Button.H ../FL/Fl_Box.H
-preferences.o: ../FL/Fl_Check_Button.H ../FL/Fl_Int_Input.H ../FL/Fl_Input.H
-preferences.o: ../FL/Fl_Input_.H ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H
-preferences.o: ../FL/Fl_Valuator.H ../FL/filename.H ../FL/fl_ask.H
-device.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-device.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-device.o: ../FL/Fl_Overlay_Window.H ../FL/Fl_Double_Window.H
-device.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-device.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Light_Button.H
-device.o: ../FL/Fl_Button.H ../FL/Fl_Radio_Round_Button.H
-device.o: ../FL/Fl_Round_Button.H ../FL/Fl_Light_Button.H ../FL/fl_draw.H
-device.o: ../FL/Fl_Clock.H pixmaps/porsche.xpm ../FL/Fl_Pixmap.H
-device.o: ../FL/Fl_Bitmap.H ../FL/Fl_Round_Button.H ../FL/Fl_Printer.H
-device.o: ../FL/x.H ../FL/Fl_Paged_Device.H ../FL/Fl_Device.H
-device.o: ../FL/Fl_Plugin.H ../FL/Fl_Preferences.H ../FL/Fl_Image.H
-device.o: ../FL/Fl_RGB_Image.H ../FL/Fl_Window.H ../FL/Fl_PostScript.H
-device.o: ../FL/Fl_Copy_Surface.H ../FL/Fl_Image_Surface.H
-device.o: ../FL/Fl_Shared_Image.H ../FL/Fl_File_Chooser.H
-device.o: ../FL/Fl_Double_Window.H ../FL/Fl_Group.H ../FL/Fl_Choice.H
-device.o: ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/Fl_Menu_Button.H
-device.o: ../FL/Fl_Button.H ../FL/Fl_Preferences.H ../FL/Fl_Tile.H
-device.o: ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-device.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-device.o: ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H ../FL/Fl_Box.H
-device.o: ../FL/Fl_Check_Button.H ../FL/Fl_File_Input.H ../FL/Fl_Input.H
-device.o: ../FL/Fl_Return_Button.H ../FL/fl_ask.H
-radio.o: radio.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-radio.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-radio.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-radio.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-radio.o: ../FL/Fl_Image.H ../FL/Fl_Button.H ../FL/Fl_Return_Button.H
-radio.o: ../FL/Fl_Button.H ../FL/Fl_Light_Button.H ../FL/Fl_Check_Button.H
-radio.o: ../FL/Fl_Light_Button.H ../FL/Fl_Round_Button.H ../FL/Fl_Group.H
-radio.o: ../FL/Fl_Output.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-resizebox.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-resizebox.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-resizebox.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-resizebox.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-resizebox.o: ../FL/Fl_Box.H ../FL/Fl_Radio_Button.H ../FL/Fl_Button.H
-resizebox.o: ../FL/fl_draw.H ../FL/fl_message.H ../FL/fl_ask.H
-resize.o: resize.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-resize.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-resize.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-resize.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-resize.o: ../FL/Fl_Image.H ../FL/Fl_Button.H ../FL/Fl_Box.H
-rotated_text.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-rotated_text.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-rotated_text.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H
-rotated_text.o: ../FL/Fl_Window.H ../FL/Fl_Group.H ../FL/Fl_Widget.H
-rotated_text.o: ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-rotated_text.o: ../FL/Fl_Hor_Value_Slider.H ../FL/Fl_Value_Slider.H
-rotated_text.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-rotated_text.o: ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H ../FL/Fl_Input.H
-rotated_text.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-rotated_text.o: ../FL/fl_draw.H
-scroll.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-scroll.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-scroll.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-scroll.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-scroll.o: ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-scroll.o: ../FL/Fl_Valuator.H ../FL/Fl_Light_Button.H ../FL/Fl_Button.H
-scroll.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-scroll.o: ../FL/Fl_Box.H ../FL/fl_draw.H ../FL/math.h
-shape.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-shape.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-shape.o: ../FL/abi-version.h ../FL/Fl_Window.H ../FL/Fl_Hor_Slider.H
-shape.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/math.h ../FL/gl.h
-shape.o: ../FL/Fl_Gl_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-shape.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-subwindow.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-subwindow.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-subwindow.o: ../FL/Fl_Window.H ../FL/Fl_Toggle_Button.H ../FL/Fl_Button.H
-subwindow.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-subwindow.o: ../FL/Fl_Widget.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-subwindow.o: ../FL/Fl_Input.H
-sudoku.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-sudoku.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-sudoku.o: ../FL/Enumerations.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-sudoku.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-sudoku.o: ../FL/Fl_Image.H ../FL/Fl_Button.H ../FL/Fl_Group.H ../FL/fl_ask.H
-sudoku.o: ../FL/fl_draw.H ../FL/Fl_Help_Dialog.H ../FL/Fl_Input.H
-sudoku.o: ../FL/Fl_Box.H ../FL/Fl_Help_View.H ../FL/Fl.H ../FL/Fl_Scrollbar.H
-sudoku.o: ../FL/Fl_Slider.H ../FL/Fl_Valuator.H ../FL/fl_draw.H ../FL/x.H
-sudoku.o: ../FL/Fl_Window.H ../FL/Fl_Device.H ../FL/Fl_Plugin.H
-sudoku.o: ../FL/Fl_Preferences.H ../FL/Fl_Image.H ../FL/Fl_Bitmap.H
-sudoku.o: ../FL/Fl_Pixmap.H ../FL/Fl_RGB_Image.H ../FL/Fl_Shared_Image.H
-sudoku.o: ../FL/filename.H ../FL/Fl_Preferences.H ../FL/Fl_Sys_Menu_Bar.H
-sudoku.o: ../FL/Fl_Menu_Bar.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H ../FL/x.H
-sudoku.o: ../FL/math.h pixmaps/sudoku.xbm ../config.h
-symbols.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-symbols.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-symbols.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-symbols.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-symbols.o: ../FL/Fl_Box.H ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H
-symbols.o: ../FL/Fl_Valuator.H ../FL/fl_draw.H
-table.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-table.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-table.o: ../FL/Fl_Window.H ../FL/Fl_Input.H ../FL/Fl_Check_Button.H
-table.o: ../FL/Fl_Light_Button.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-table.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Widget.H ../FL/Fl_Image.H
-table.o: ../FL/fl_draw.H ../FL/fl_ask.H ../FL/Fl_Table_Row.H ../FL/Fl_Table.H
-table.o: ../FL/Fl_Group.H ../FL/Fl_Scroll.H ../FL/Fl_Group.H
-table.o: ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-table.o: ../FL/Fl_Box.H ../FL/Fl_Scrollbar.H
-tabs.o: tabs.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-tabs.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-tabs.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-tabs.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Box.H
-tabs.o: ../FL/Fl_Tabs.H ../FL/Fl_Group.H ../FL/Fl_Input.H ../FL/Fl_Button.H
-tabs.o: ../FL/fl_ask.H ../FL/Fl_Clock.H ../FL/Fl_Wizard.H
-tabs.o: ../FL/Fl_Return_Button.H ../FL/Fl_Button.H
-threads.o: ../config.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-threads.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-threads.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-threads.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-threads.o: ../FL/Fl_Image.H ../FL/Fl_Browser.H ../FL/Fl_Value_Output.H
-threads.o: ../FL/fl_ask.H threads.h
-tile.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-tile.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-tile.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-tile.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H ../FL/Fl_Tile.H
-tile.o: ../FL/Fl_Box.H
-tiled_image.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-tiled_image.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-tiled_image.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-tiled_image.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-tiled_image.o: ../FL/Fl_Button.H ../FL/Fl_Pixmap.H ../FL/Fl_Tiled_Image.H
-tiled_image.o: pixmaps/tile.xpm ../FL/x.H list_visuals.cxx ../config.h
-tree.o: tree.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-tree.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-tree.o: ../FL/Fl_Tooltip.H ../FL/Fl_Widget.H ../FL/Fl_Pixmap.H
-tree.o: ../FL/Fl_Image.H ../FL/Fl_Group.H ../FL/Fl_Tree.H
-tree.o: ../FL/Fl_Scrollbar.H ../FL/fl_draw.H ../FL/Fl_Tree_Item.H
-tree.o: ../FL/Fl_Image.H ../FL/Fl_Tree_Item_Array.H ../FL/Fl_Tree_Prefs.H
-tree.o: ../FL/fl_ask.H ../FL/fl_message.H ../FL/fl_ask.H
-tree.o: ../FL/Fl_File_Chooser.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-tree.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-tree.o: ../FL/Fl_Choice.H ../FL/Fl_Menu_.H ../FL/Fl_Menu_Item.H
-tree.o: ../FL/Fl_Menu_Button.H ../FL/Fl_Button.H ../FL/Fl_Preferences.H
-tree.o: ../FL/Fl_Tile.H ../FL/Fl_File_Browser.H ../FL/Fl_Browser.H
-tree.o: ../FL/Fl_Browser_.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-tree.o: ../FL/Fl_Valuator.H ../FL/Fl_File_Icon.H ../FL/Fl.H ../FL/filename.H
-tree.o: ../FL/Fl_Box.H ../FL/Fl_Check_Button.H ../FL/Fl_Light_Button.H
-tree.o: ../FL/Fl_File_Input.H ../FL/Fl_Input.H ../FL/Fl_Return_Button.H
-tree.o: ../FL/Fl_Button.H ../FL/Fl_Color_Chooser.H ../FL/Fl_Value_Input.H
-tree.o: ../FL/Fl_Input.H ../FL/Fl_Input_.H ../FL/Fl_Text_Display.H
-tree.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Light_Button.H
-twowin.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-twowin.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-twowin.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-twowin.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-twowin.o: ../FL/Fl_Button.H ../FL/Fl_Input.H
-valuators.o: valuators.h ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h
-valuators.o: ../FL/Fl_Export.H ../FL/fl_types.h ../FL/Enumerations.H
-valuators.o: ../FL/abi-version.h ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-valuators.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-valuators.o: ../FL/Fl_Image.H ../FL/Fl_Box.H ../FL/Fl_Slider.H
-valuators.o: ../FL/Fl_Value_Slider.H ../FL/Fl_Slider.H ../FL/Fl_Valuator.H
-valuators.o: ../FL/Fl_Value_Input.H ../FL/Fl_Input.H ../FL/Fl_Input_.H
-valuators.o: ../FL/Fl_Value_Output.H ../FL/Fl_Scrollbar.H ../FL/Fl_Adjuster.H
-valuators.o: ../FL/Fl_Counter.H ../FL/Fl_Spinner.H ../FL/Enumerations.H
-valuators.o: ../FL/Fl_Group.H ../FL/Fl_Input.H ../FL/Fl_Repeat_Button.H
-valuators.o: ../FL/Fl.H ../FL/Fl_Button.H ../FL/Fl_Dial.H ../FL/Fl_Roller.H
-utf8.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-utf8.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-utf8.o: ../FL/Fl_Double_Window.H ../FL/Fl_Window.H ../FL/Fl_Group.H
-utf8.o: ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H ../FL/Fl_Image.H
-utf8.o: ../FL/Fl_Scroll.H ../FL/Fl_Scrollbar.H ../FL/Fl_Slider.H
-utf8.o: ../FL/Fl_Valuator.H ../FL/Fl_Choice.H ../FL/Fl_Menu_.H
-utf8.o: ../FL/Fl_Menu_Item.H ../FL/Fl_Input.H ../FL/Fl_Box.H ../FL/Fl_Tile.H
-utf8.o: ../FL/Fl_Hold_Browser.H ../FL/Fl_Browser.H ../FL/Fl_Browser_.H
-utf8.o: ../FL/Fl_Value_Output.H ../FL/Fl_Button.H ../FL/Fl_Check_Button.H
-utf8.o: ../FL/Fl_Light_Button.H ../FL/Fl_Output.H ../FL/Fl_Input.H
-utf8.o: ../FL/Fl_Input_.H ../FL/fl_draw.H ../FL/fl_utf8.h
-windowfocus.o: ../FL/Fl.H ../FL/Fl_Export.H ../FL/fl_utf8.h ../FL/Fl_Export.H
-windowfocus.o: ../FL/fl_types.h ../FL/Enumerations.H ../FL/abi-version.h
-windowfocus.o: ../FL/Fl_Box.H ../FL/Fl_Double_Window.H ../FL/Fl_Window.H
-windowfocus.o: ../FL/Fl_Group.H ../FL/Fl_Widget.H ../FL/Fl_Bitmap.H
-windowfocus.o: ../FL/Fl_Image.H ../FL/Fl_Input.H
--- a/DoConfig/fltk/test/mandelbrot.cxx
+++ /dev/null
@@ -1,218 +1,0 @@
-//
-// "$Id$"
-//
-// Mandelbrot set demo for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include "mandelbrot_ui.h"
-#include <FL/fl_draw.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Printer.H>
-#include <stdio.h>
-#include <stdlib.h>
-
-Drawing_Window mbrot;
-Drawing_Window jbrot;
-
-void idle(void*) {
-  if (!mbrot.d->idle() && !(jbrot.d && jbrot.d->idle())) Fl::remove_idle(idle);
-}
-
-void set_idle() {
-  Fl::add_idle(idle);
-}
-
-static void window_callback(Fl_Widget*, void*) {exit(0);}
-
-static void print(Fl_Widget *o, void *data)
-{
-  Fl_Printer printer;
-  Fl_Window *win = o->window();
-  if(!win->visible()) return;
-  win->make_current();
-  uchar *image_data = fl_read_image(NULL, 0, 0, win->w(), win->h(), 0);
-  if( printer.start_job(1) ) return;
-  if( printer.start_page() ) return;
-  printer.scale(.7f,.7f);
-  fl_draw_image(image_data, 0,0, win->w(), win->h());
-  printer.end_page();
-  delete image_data;
-  printer.end_job();
-}
-
-int main(int argc, char **argv) {
-  mbrot.make_window();
-    mbrot.window->begin();
-    Fl_Button* o = new Fl_Button(0, 0, 0, 0, NULL);
-    o->callback(print,NULL);
-    o->shortcut(FL_CTRL+'p');
-    mbrot.window->end();
-
-  mbrot.d->X = -.75;
-  mbrot.d->scale = 2.5;
-  mbrot.update_label();
-  int i = 0;
-  if (Fl::args(argc,argv,i) < argc) Fl::fatal(Fl::help);
-  Fl::visual(FL_RGB);
-  mbrot.window->callback(window_callback);
-  mbrot.window->show(argc,argv);
-  Fl::run();
-  return 0;
-}
-
-void Drawing_Window::update_label() {
-  char buffer[128];
-  sprintf(buffer, "%+.10f", d->X); x_input->value(buffer);
-  sprintf(buffer, "%+.10f", d->Y); y_input->value(buffer);
-  sprintf(buffer, "%.2g", d->scale); w_input->value(buffer);
-}
-
-void Drawing_Area::draw() {
-  draw_box();
-  drawn = 0;
-  set_idle();
-}
-
-int Drawing_Area::idle() {
-  if (!window()->visible()) return 0;
-  if (drawn < nextline) {
-    window()->make_current();
-    int yy = drawn+y()+4;
-    if (yy >= sy && yy <= sy+sh) erase_box();
-    fl_draw_image_mono(buffer+drawn*W,x()+3,yy,W,1,1,W);
-    drawn++;
-    return 1;
-  }
-  if (nextline < H) {
-    if (!buffer) buffer = new uchar[W*H];
-    double yy = Y+(H/2-nextline)*scale/W;
-    double yi = yy; if (julia) yy = jY;
-    uchar *p = buffer+nextline*W;
-    for (int xi = 0; xi < W; xi++) {
-      double xx = X+(xi-W/2)*scale/W;
-      double wx = xx; double wy = yi;
-      if (julia) xx = jX;
-      for (int i=0; ; i++) {
-	if (i >= iterations) {*p = 0; break;}
-	double t = wx*wx - wy*wy + xx;
-	wy = 2*wx*wy + yy;
-	wx = t;
-	if (wx*wx + wy*wy > 4) {
-	  wx = t = 1-double(i)/(1<<10);
-	  if (t <= 0) t = 0; else for (i=brightness; i--;) t*=wx;
-	  *p = 255-int(254*t);
-	  break;
-	}
-      }
-      p++;
-    }
-    nextline++;
-    return nextline < H;
-  }
-  return 0;
-}
-
-void Drawing_Area::erase_box() {
-  window()->make_current();
-  fl_overlay_clear();
-}
-
-int Drawing_Area::handle(int event) {
-  static int ix, iy;
-  static int dragged;
-  static int button;
-  int x2,y2;
-  switch (event) {
-  case FL_PUSH:
-    erase_box();
-    ix = Fl::event_x(); if (ix<x()) ix=x(); if (ix>=x()+w()) ix=x()+w()-1;
-    iy = Fl::event_y(); if (iy<y()) iy=y(); if (iy>=y()+h()) iy=y()+h()-1;
-    dragged = 0;
-    button = Fl::event_button();
-    return 1;
-  case FL_DRAG:
-    dragged = 1;
-    erase_box();
-    x2 = Fl::event_x(); if (x2<x()) x2=x(); if (x2>=x()+w()) x2=x()+w()-1;
-    y2 = Fl::event_y(); if (y2<y()) y2=y(); if (y2>=y()+h()) y2=y()+h()-1;
-    if (button != 1) {ix = x2; iy = y2; return 1;}
-    if (ix < x2) {sx = ix; sw = x2-ix;} else {sx = x2; sw = ix-x2;}
-    if (iy < y2) {sy = iy; sh = y2-iy;} else {sy = y2; sh = iy-y2;}
-    window()->make_current();
-    fl_overlay_rect(sx,sy,sw,sh);
-    return 1;
-  case FL_RELEASE:
-    if (button == 1) {
-      erase_box();
-      if (dragged && sw > 3 && sh > 3) {
-	X = X + (sx+sw/2-x()-W/2)*scale/W;
-	Y = Y + (-sy-sh/2+y()+H/2)*scale/W;
-	scale = sw*scale/W;
-      } else if (!dragged) {
-	scale = 2*scale;
-	if (julia) {
-	  if (scale >= 4) {
-	    scale = 4;
-	    X = Y = 0;
-	  }
-	} else {
-	  if (scale >= 2.5) {
-	    scale = 2.5;
-	    X = -.75;
-	    Y = 0;
-	  }
-	}
-      } else return 1;
-      ((Drawing_Window*)(user_data()))->update_label();
-      new_display();
-    } else if (!julia) {
-      if (!jbrot.d) {
-	jbrot.make_window();
-	jbrot.d->julia = 1;
-	jbrot.d->X = 0;
-	jbrot.d->Y = 0;
-	jbrot.d->scale = 4;
-	jbrot.update_label();
-      }
-      jbrot.d->jX = X + (ix-x()-W/2)*scale/W;
-      jbrot.d->jY = Y + (H/2-iy+y())*scale/W;
-      static char s[128];
-      sprintf(s, "Julia %.7f %.7f",jbrot.d->jX,jbrot.d->jY);
-      jbrot.window->label(s);
-      jbrot.window->show();
-      jbrot.d->new_display();
-    }
-    return 1;
-  }
-  return 0;
-}
-
-void Drawing_Area::new_display() {
-  drawn = nextline = 0;
-  set_idle();
-}
-
-void Drawing_Area::resize(int XX,int YY,int WW,int HH) {
-  if (WW != w() || HH != h()) {
-    W = WW-6;
-    H = HH-8;
-    if (buffer) {delete[] buffer; buffer = 0; new_display();}
-  }
-  Fl_Box::resize(XX,YY,WW,HH);
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/mandelbrot.h
+++ /dev/null
@@ -1,65 +1,0 @@
-//
-// "$Id$"
-//
-// Mandelbrot set header file for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Input.H>
-
-class Drawing_Area : public Fl_Box {
-  void draw();
-public:
-  uchar *buffer;
-  int W,H;
-  int nextline;
-  int drawn;
-  int julia;
-  int iterations;
-  int brightness;
-  double jX, jY;
-  double X,Y,scale;
-  int sx, sy, sw, sh; // selection box
-  void erase_box();
-  int handle(int);
-  void resize(int,int,int,int);
-  void new_display();
-  enum {
-    MAX_BRIGHTNESS = 16,
-    DEFAULT_BRIGHTNESS = 16,
-    MAX_ITERATIONS = 14,
-    DEFAULT_ITERATIONS = 7
-  };
-  Drawing_Area(int x,int y,int w,int h) : Fl_Box(x,y,w,h) {
-    buffer = 0;
-    W = w-6;
-    H = h-8;
-    nextline = 0;
-    drawn = 0;
-    julia = 0;
-    X = Y = 0;
-    scale = 4.0;
-    iterations = 1<<DEFAULT_ITERATIONS;
-    brightness = DEFAULT_BRIGHTNESS;
-  }
-  int idle();
-};
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/mandelbrot_ui.fl
+++ /dev/null
@@ -1,72 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-decl {\#include "mandelbrot.h"} {public local
-}
-
-decl {\#include <stdlib.h>} {private local
-}
-
-class Drawing_Window {open
-} {
-  Function {make_window()} {open return_type void
-  } {
-    Fl_Window window {open
-      xywh {515 343 450 520} type Single hide resizable
-      code0 {o->size_range(220,220);}
-    } {
-      Fl_Box d {
-        user_data this user_data_type {void*}
-        xywh {20 80 410 430} box DOWN_BOX color 0 selection_color 47 resizable
-        class Drawing_Area
-      }
-      Fl_Input x_input {
-        label {x:}
-        callback {d->X = atof(o->value());;
-d->new_display();}
-        xywh {30 15 125 30} type Float box THIN_DOWN_BOX color 48 selection_color 7 labelfont 11 labelsize 16 textfont 11 textsize 12
-        code0 {o->when(FL_WHEN_ENTER_KEY|FL_WHEN_RELEASE);}
-      }
-      Fl_Input y_input {
-        label {y:}
-        callback {d->Y = atof(o->value());
-d->new_display();}
-        xywh {175 15 125 30} type Float box THIN_DOWN_BOX color 48 selection_color 7 labelfont 11 labelsize 16 textfont 11 textsize 12
-        code0 {o->when(FL_WHEN_ENTER_KEY|FL_WHEN_RELEASE);}
-      }
-      Fl_Input w_input {
-        label {w:}
-        callback {d->scale = atof(o->value());
-d->new_display();}
-        xywh {325 15 105 30} type Float box THIN_DOWN_BOX color 48 selection_color 7 labelfont 11 labelsize 16 textfont 11 textsize 12
-        code0 {o->when(FL_WHEN_ENTER_KEY|FL_WHEN_RELEASE);}
-      }
-      Fl_Slider {} {
-        label {brightness:}
-        callback {d->brightness = int(o->value());
-d->new_display();}
-        xywh {80 50 160 15} type Horizontal box THIN_DOWN_BOX labelsize 10 align 4 step 1 slider_size 0.1
-        code0 {o->bounds(0,d->MAX_BRIGHTNESS);}
-        code2 {o->value(d->DEFAULT_BRIGHTNESS);}
-        code3 {o->slider(FL_UP_BOX);}
-      }
-      Fl_Box {} {
-        label {left: click = zoom out, drag = zoom in
-right click: Julia set, ctrl-P: Print} selected
-        xywh {240 50 190 30} labelsize 8 align 24 deactivate
-      }
-      Fl_Slider {} {
-        label {iterations:}
-        callback {d->iterations = 1<<int(o->value());
-d->new_display();}
-        xywh {80 65 160 15} type Horizontal box THIN_DOWN_BOX labelsize 10 align 4 step 1 slider_size 0.1
-        code0 {o->bounds(1,d->MAX_ITERATIONS);}
-        code2 {o->value(d->DEFAULT_ITERATIONS);}
-        code3 {o->slider(FL_UP_BOX);}
-      }
-    }
-  }
-  decl {void update_label();} {public local
-  }
-}
--- a/DoConfig/fltk/test/menubar.cxx
+++ /dev/null
@@ -1,256 +1,0 @@
-//
-// "$Id$"
-//
-// Menubar test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Choice.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include "../src/flstring.h"
-#include <FL/fl_draw.H>
-
-void window_cb(Fl_Widget* w, void*) {
-  puts("window callback called");
-  ((Fl_Double_Window *)w)->hide();
-}
-
-void test_cb(Fl_Widget* w, void*) {
-  Fl_Menu_* mw = (Fl_Menu_*)w;
-  const Fl_Menu_Item* m = mw->mvalue();
-  if (!m)
-    printf("NULL\n");
-  else if (m->shortcut())
-    printf("%s - %s\n", m->label(), fl_shortcut_label(m->shortcut()));
-  else
-    printf("%s\n", m->label());
-}
-
-void quit_cb(Fl_Widget*, void*) {exit(0);}
-
-Fl_Menu_Item hugemenu[100];
-
-Fl_Menu_Item menutable[] = {
-  {"foo",0,0,0,FL_MENU_INACTIVE},
-  {"&File",0,0,0,FL_SUBMENU},
-    {"&Open",	FL_ALT+'o', 0, 0, FL_MENU_INACTIVE},
-    {"&Close",	0,	0},
-    {"&Quit",	FL_ALT+'q', quit_cb, 0, FL_MENU_DIVIDER},
-    {"shortcut",'a'},
-    {"shortcut",FL_SHIFT+'a'},
-    {"shortcut",FL_CTRL+'a'},
-    {"shortcut",FL_CTRL+FL_SHIFT+'a'},
-    {"shortcut",FL_ALT+'a'},
-    {"shortcut",FL_ALT+FL_SHIFT+'a'},
-    {"shortcut",FL_ALT+FL_CTRL+'a'},
-    {"shortcut",FL_ALT+FL_SHIFT+FL_CTRL+'a', 0,0, FL_MENU_DIVIDER},
-    {"shortcut",'\r'/*FL_Enter*/},
-    {"shortcut",FL_CTRL+FL_Enter, 0,0, FL_MENU_DIVIDER},
-    {"shortcut",FL_F+1},
-    {"shortcut",FL_SHIFT+FL_F+1},
-    {"shortcut",FL_CTRL+FL_F+1},
-    {"shortcut",FL_SHIFT+FL_CTRL+FL_F+1},
-    {"shortcut",FL_ALT+FL_F+1},
-    {"shortcut",FL_ALT+FL_SHIFT+FL_F+1},
-    {"shortcut",FL_ALT+FL_CTRL+FL_F+1},
-    {"shortcut",FL_ALT+FL_SHIFT+FL_CTRL+FL_F+1, 0,0, FL_MENU_DIVIDER},
-    {"&Submenus", FL_ALT+'S',	0, (void*)"Submenu1", FL_SUBMENU},
-      {"A very long menu item"},
-      {"&submenu",FL_CTRL+'S',	0, (void*)"submenu2", FL_SUBMENU},
-	{"item 1"},
-	{"item 2"},
-	{"item 3"},
-	{"item 4"},
-	{0},
-      {"after submenu"},
-      {0},
-    {0},
-  {"&Edit",FL_F+2,0,0,FL_SUBMENU},
-    {"Undo",	FL_ALT+'z',	0},
-    {"Redo",	FL_ALT+'r',	0, 0, FL_MENU_DIVIDER},
-    {"Cut",	FL_ALT+'x',	0},
-    {"Copy",	FL_ALT+'c',	0},
-    {"Paste",	FL_ALT+'v',	0},
-    {"Inactive",FL_ALT+'d',	0, 0, FL_MENU_INACTIVE},
-    {"Clear",	0,	0, 0, FL_MENU_DIVIDER},
-    {"Invisible",FL_ALT+'e',	0, 0, FL_MENU_INVISIBLE},
-    {"Preferences",0,	0},
-    {"Size",	0,	0},
-    {0},
-  {"&Checkbox",FL_F+3,0,0,FL_SUBMENU},
-    {"&Alpha",	FL_F+2,	0, (void *)1, FL_MENU_TOGGLE},
-    {"&Beta",	0,	0, (void *)2, FL_MENU_TOGGLE},
-    {"&Gamma",	0,	0, (void *)3, FL_MENU_TOGGLE},
-    {"&Delta",	0,	0, (void *)4, FL_MENU_TOGGLE|FL_MENU_VALUE},
-    {"&Epsilon",0,	0, (void *)5, FL_MENU_TOGGLE},
-    {"&Pi",	0,	0, (void *)6, FL_MENU_TOGGLE},
-    {"&Mu",	0,	0, (void *)7, FL_MENU_TOGGLE|FL_MENU_DIVIDER},
-    {"Red",	0,	0, (void *)1, FL_MENU_TOGGLE, 0, 0, 0, 1},
-    {"Black",	0,	0, (void *)1, FL_MENU_TOGGLE|FL_MENU_DIVIDER},
-    {"00",	0,	0, (void *)1, FL_MENU_TOGGLE},
-    {"000",	0,	0, (void *)1, FL_MENU_TOGGLE},
-    {0},
-  {"&Radio",0,0,0,FL_SUBMENU},
-    {"&Alpha",	0,	0, (void *)1, FL_MENU_RADIO},
-    {"&Beta",	0,	0, (void *)2, FL_MENU_RADIO},
-    {"&Gamma",	0,	0, (void *)3, FL_MENU_RADIO},
-    {"&Delta",	0,	0, (void *)4, FL_MENU_RADIO|FL_MENU_VALUE},
-    {"&Epsilon",0,	0, (void *)5, FL_MENU_RADIO},
-    {"&Pi",	0,	0, (void *)6, FL_MENU_RADIO},
-    {"&Mu",	0,	0, (void *)7, FL_MENU_RADIO|FL_MENU_DIVIDER},
-    {"Red",	0,	0, (void *)1, FL_MENU_RADIO},
-    {"Black",	0,	0, (void *)1, FL_MENU_RADIO|FL_MENU_DIVIDER},
-    {"00",	0,	0, (void *)1, FL_MENU_RADIO},
-    {"000",	0,	0, (void *)1, FL_MENU_RADIO},
-    {0},
-  {"&Font",0,0,0,FL_SUBMENU /*, 0, FL_BOLD, 20*/},
-    {"Normal",	0, 0, 0, 0, 0, 0, 14},
-    {"Bold",	0, 0, 0, 0, 0, FL_BOLD, 14},
-    {"Italic",	0, 0, 0, 0, 0, FL_ITALIC, 14},
-    {"BoldItalic",0,0,0, 0, 0, FL_BOLD+FL_ITALIC, 14},
-    {"Small",	0, 0, 0, 0, 0, FL_BOLD+FL_ITALIC, 10},
-    {"Emboss",	0, 0, 0, 0, (uchar)FL_EMBOSSED_LABEL},
-    {"Engrave",	0, 0, 0, 0, (uchar)FL_ENGRAVED_LABEL},
-    {"Shadow",	0, 0, 0, 0, (uchar)FL_SHADOW_LABEL},
-    {"@->",	0, 0, 0, 0, (uchar)FL_SYMBOL_LABEL},
-    {0},
-  {"&International",0,0,0,FL_SUBMENU},
-    {"Sharp Ess",0x0000df},
-    {"A Umlaut",0x0000c4},
-    {"a Umlaut",0x0000e4},
-    {"Euro currency",FL_COMMAND+0x0020ac},
-    {"the &\xc3\xbc Umlaut"},  // &uuml;
-    {"the capital &\xc3\x9c"}, // &Uuml;
-    {"convert \xc2\xa5 to &\xc2\xa3"}, // Yen to GBP
-    {"convert \xc2\xa5 to &\xe2\x82\xac"}, // Yen to Euro
-    {"Hangul character Sios &\xe3\x85\x85"},
-    {"Hangul character Cieuc", 0x003148},
-    {0},
-  {"E&mpty",0,0,0,FL_SUBMENU},
-    {0},
-  {"&Inactive", 0,	0, 0, FL_MENU_INACTIVE|FL_SUBMENU},
-    {"A very long menu item"},
-    {"A very long menu item"},
-    {0},
-  {"Invisible",0,	0, 0, FL_MENU_INVISIBLE|FL_SUBMENU},
-    {"A very long menu item"},
-    {"A very long menu item"},
-    {0},
-  {"&Huge", 0, 0, (void*)hugemenu, FL_SUBMENU_POINTER},
-  {"button",FL_F+4, 0, 0, FL_MENU_TOGGLE},
-  {0}
-};
-
-Fl_Menu_Item pulldown[] = {
-  {"Red",	FL_ALT+'r'},
-  {"Green",	FL_ALT+'g'},
-  {"Blue",	FL_ALT+'b'},
-  {"Strange",	FL_ALT+'s', 0, 0, FL_MENU_INACTIVE},
-  {"&Charm",	FL_ALT+'c'},
-  {"Truth",	FL_ALT+'t'},
-  {"Beauty",	FL_ALT+'b'},
-  {0}
-};
-
-#ifdef __APPLE__
-Fl_Menu_Item menu_location[] = {
-  {"Fl_Menu_Bar",	0, 0, 0, FL_MENU_VALUE},
-  {"Fl_Sys_Menu_Bar",	},
-  {0}
-};
-
-Fl_Sys_Menu_Bar* smenubar;
-
-void menu_location_cb(Fl_Widget* w, void* data) 
-{
-  Fl_Menu_Bar *menubar = (Fl_Menu_Bar*)data;
-  if (((Fl_Choice*)w)->value() == 1) { // switch to system menu bar
-    menubar->hide();
-    const Fl_Menu_Item *menu = menubar->menu();
-    smenubar = new  Fl_Sys_Menu_Bar(0,0,0,30); 
-    smenubar->menu(menu);
-    smenubar->callback(test_cb);
-    }
-  else { // switch to window menu bar
-    smenubar->clear();
-    delete smenubar;
-    menubar->show();
-    }
-}
-#endif // __APPLE__
-
-#define WIDTH 700
-
-Fl_Menu_* menus[4];
-
-int main(int argc, char **argv) {
-  //Fl::set_color(Fl_Color(15),0,0,128);
-  for (int i=0; i<99; i++) {
-    char buf[100];
-    sprintf(buf,"item %d",i);
-    hugemenu[i].text = strdup(buf);
-  }
-  Fl_Double_Window window(WIDTH,400);
-  window.callback(window_cb);
-  Fl_Menu_Bar menubar(0,0,WIDTH,30); menubar.menu(menutable);
-  menubar.callback(test_cb);
-  menus[0] = &menubar;
-  Fl_Menu_Button mb1(100,100,120,25,"&menubutton"); mb1.menu(pulldown);
-  mb1.tooltip("this is a menu button");
-  mb1.callback(test_cb);
-  menus[1] = &mb1;
-  Fl_Choice ch(300,100,80,25,"&choice:"); ch.menu(pulldown);
-  ch.tooltip("this is a choice menu");
-  ch.callback(test_cb);
-  menus[2] = &ch;
-  Fl_Menu_Button mb(0,0,WIDTH,400,"&popup");
-  mb.type(Fl_Menu_Button::POPUP3);
-  mb.box(FL_NO_BOX);
-  mb.menu(menutable);
-  mb.remove(1); // delete the "File" submenu
-  mb.callback(test_cb);
-  menus[3] = &mb;
-  Fl_Box b(200,200,200,100,"Press right button\nfor a pop-up menu");
-  window.resizable(&mb);
-  window.size_range(300,400,0,400);
-#ifdef __APPLE__
-  Fl_Choice ch2(500,100,150,25,"Use:"); 
-  ch2.menu(menu_location);
-  ch2.callback(menu_location_cb, &menubar);
-#endif
-  window.end();
-  
-#ifdef __APPLE__
-  Fl_Menu_Item custom[] = {
-    {"Preferences…",	0,	test_cb, NULL, FL_MENU_DIVIDER},
-    {"Radio1",	0,	test_cb, NULL, FL_MENU_RADIO|FL_MENU_VALUE},
-    {"Radio2",	0,	test_cb, NULL, FL_MENU_RADIO},
-    {0}
-  };
-  Fl_Mac_App_Menu::custom_application_menu_items(custom);
-#endif
-  window.show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/message.cxx
+++ /dev/null
@@ -1,61 +1,0 @@
-//
-// "$Id$"
-//
-// Message test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/fl_ask.H>
-#include <stdio.h>
-
-int main(int argc, char **argv) {
-  Fl::scheme(NULL);
-  Fl::args(argc, argv);
-  Fl::get_system_colors();
-
-  fl_message("Spelling check sucessful, %d errors found with %g%% confidence",
-	     1002, 100*(15/77.0));
-
-  fl_alert(
-		"Quantum fluctuations in the space-time continuum detected,\n"
-	  "you have %g seconds to comply.\n\n"
-		"\"In physics, spacetime is any mathematical model that combines\n"
-		"space and time into a single construct called the space-time\n"
-		"continuum. Spacetime is usually interpreted with space being\n"
-		"three-dimensional and time playing the role of the\n"
-		"fourth dimension.\" - Wikipedia",
-		10.0);
-
-  printf("fl_choice returned %d\n",
-    fl_choice("Do you really want to %s?", "No", "Yes", 0L, "continue"));
-
-  printf("fl_choice returned %d\n",
-    fl_choice("Choose one of the following:","choice0","choice1","choice2"));
-  const char *r;
-
-  r = fl_input("Please enter a string for '%s':", "this is the default value",
-	       "testing");
-  printf("fl_input returned \"%s\"\n", r ? r : "NULL");
-
-  r = fl_password("Enter %s's password:", 0, "somebody");
-  printf("fl_password returned \"%s\"\n", r ? r : "NULL");
-
-  return 0;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/minimum.cxx
+++ /dev/null
@@ -1,73 +1,0 @@
-//
-// "$Id$"
-//
-// Minimal update test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-//
-// This is a test of the minimal update code.  The right slider has a
-// label that extends outside it's border, and the minimal update
-// assummes this does not happen.  Thus there is *supposed* to be
-// display errors when you move the right-most or any other slider.
-// If you *don't* see these errors, then the minimal update is
-// broken!!!
-//
-// I cannot emphasize how important it is to test this and make sure
-// any changes have not broken the minimal update.  These sort of bugs
-// are extremely hard to fix and must be detected right away!
-//
-// The reason it is important to fix this is that otherwise you will
-// swiftly end up with a toolkit that thinks it has to draw the window
-// 20 times each time the display changes.  I don't care how fast the
-// machine is, this is an insane waste of resources, and should be
-// stopped!
-//
-
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Return_Button.H>
-
-int main(int argc, char **argv) {
-  Fl_Double_Window *window = new Fl_Double_Window(400,320,argv[0]);
-  window->resizable(*(new Fl_Box(FL_ENGRAVED_FRAME,10,10,300,300,
-"MINIMUM UPDATE TEST\n"
-"\n"
-"The slider on the right purposely\n"
-"draws outside it's boundaries.\n"
-"Moving it should leave old copies\n"
-"of the label.  These copies should\n"
-"*not* be erased by any actions\n"
-"other than hiding and showing\n"
-"of that portion of the window\n"
-"or changing the button that\n"
-"intesects them.")));
-
-  Fl_Slider *s;
-  s = new Fl_Slider(320,10,20,300,"Too_Big_Label");
-  s->align(0);
-
-  new Fl_Button(20,270,100,30,"Button");
-  new Fl_Return_Button(200,270,100,30,"Button");
-
-  window->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/native-filechooser.cxx
+++ /dev/null
@@ -1,149 +1,0 @@
-//
-// "$Id$"
-//
-// Simple test of the Fl_Native_File_Chooser.
-//
-// Copyright 1998-2016 by Bill Spitzak and others.
-// Copyright 2004 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-#include <stdio.h>
-#include <string.h>		/* strstr() */
-#include <FL/Fl.H>
-#include <FL/fl_ask.H>		/* fl_beep() */
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Multiline_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Native_File_Chooser.H>
-#include <FL/Fl_Help_View.H>
-
-// GLOBALS
-Fl_Input *G_filename = NULL;
-Fl_Multiline_Input *G_filter = NULL;
-
-void PickFile_CB(Fl_Widget*, void*) {
-  // Create native chooser
-  Fl_Native_File_Chooser native;
-  native.title("Pick a file");
-  native.type(Fl_Native_File_Chooser::BROWSE_FILE);
-  native.filter(G_filter->value());
-  native.preset_file(G_filename->value());
-  // Show native chooser
-  switch ( native.show() ) {
-    case -1: fprintf(stderr, "ERROR: %s\n", native.errmsg()); break;	// ERROR
-    case  1: fprintf(stderr, "*** CANCEL\n"); fl_beep(); break;		// CANCEL
-    default: 								// PICKED FILE
-      if ( native.filename() ) {
-        G_filename->value(native.filename());
-      } else {
-	G_filename->value("NULL");
-      }
-      break;
-  }
-}
-
-void PickDir_CB(Fl_Widget*, void*) {
-  // Create native chooser
-  Fl_Native_File_Chooser native;
-  native.title("Pick a Directory");
-  native.directory(G_filename->value());
-  native.type(Fl_Native_File_Chooser::BROWSE_DIRECTORY);
-  // Show native chooser
-  switch ( native.show() ) {
-    case -1: fprintf(stderr, "ERROR: %s\n", native.errmsg()); break;	// ERROR
-    case  1: fprintf(stderr, "*** CANCEL\n"); fl_beep(); break;		// CANCEL
-    default: 								// PICKED DIR
-      if ( native.filename() ) {
-        G_filename->value(native.filename());
-      } else {
-	G_filename->value("NULL");
-      }
-      break;
-  }
-}
-
-int main(int argc, char **argv) {
-  //// For a nicer looking browser under linux, call Fl_File_Icon::load_system_icons();
-  //// (If you do this, you'll need to link with fltk_images)
-  //// NOTE: If you do not load the system icons, the file chooser will still work, but
-  ////       no icons will be shown. However, this means you do not need to link in the
-  ////       fltk_images library, potentially reducing the size of your executable.
-  //// Loading the system icons is not required by the OSX or Windows native file choosers.
-#if !defined(WIN32) && !defined(__APPLE__)
-  Fl_File_Icon::load_system_icons();
-#endif
-
-  int argn = 1;
-#ifdef __APPLE__
-  // OS X may add the process number as the first argument - ignore
-  if (argc>argn && strncmp(argv[1], "-psn_", 5)==0)
-    argn++;
-#endif
-  
-  Fl_Window *win = new Fl_Window(640, 400, "Native File Chooser Test");
-  win->size_range(win->w(), win->h(), 0, 0);
-  win->begin();
-  {
-    int x = 80, y = 10;
-    G_filename = new Fl_Input(x, y, win->w()-80-10, 25, "Filename");
-    G_filename->value(argc <= argn ? "." : argv[argn]);
-    G_filename->tooltip("Default filename");
-
-    y += G_filename->h() + 10;
-    G_filter = new Fl_Multiline_Input(x, y, G_filename->w(), 100, "Filter");
-    G_filter->value("Text\t*.txt\n"
-                    "C Files\t*.{cxx,h,c,cpp}\n"
-                    "Tars\t*.{tar,tar.gz}\n"
-		    "Apps\t*.app");
-    G_filter->tooltip("Filter to be used for browser.\n"
-                      "An empty string may be used.\n");
-
-    y += G_filter->h() + 10;
-    Fl_Help_View *view = new Fl_Help_View(x, y, G_filename->w(), 200);
-    view->box(FL_FLAT_BOX);
-    view->color(win->color());
-#define TAB "&lt;Tab&gt;"
-    view->textfont(FL_HELVETICA);
-    view->textsize(10);
-    view->value("The Filter can be one or more filter patterns, one per line.\n"
-		"Patterns can be:<ul>\n"
-		"  <li>A single wildcard (e.g. <tt>\"*.txt\"</tt>)</li>\n"
-		"  <li>Multiple wildcards (e.g. <tt>\"*.{cxx,h,H}\"</tt>)</li>\n"
-		"  <li>A descriptive name followed by a " TAB " and a wildcard (e.g. <tt>\"Text Files" TAB "*.txt\"</tt>)</li>\n"
-		"</ul>\n"
-                "In the above \"Filter\" field, you can use <b><font color=#55f face=Courier>Ctrl-I</font></b> to enter " TAB " characters as needed.<br>\n"
-		"Example:<pre>\n"
-		"\n"
-		"    Text<font color=#55f>&lt;Ctrl-I&gt;</font>*.txt\n"
-		"    C Files<font color=#55f>&lt;Ctrl-I&gt;</font>*.{cxx,h,c,cpp}\n"
-		"    Tars<font color=#55f>&lt;Ctrl-I&gt;</font>*.{tar,tar.gz}\n"
-		"    Apps<font color=#55f>&lt;Ctrl-I&gt;</font>*.app\n"
-		"</pre>\n");
-
-    Fl_Button *but = new Fl_Button(win->w()-x-10, win->h()-25-10, 80, 25, "Pick File");
-    but->callback(PickFile_CB);
-
-    Fl_Button *butdir = new Fl_Button(but->x()-x-10, win->h()-25-10, 80, 25, "Pick Dir");
-    butdir->callback(PickDir_CB);
-
-    win->resizable(G_filter);
-  }
-  win->end();
-  win->show(argc, argv);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/navigation.cxx
+++ /dev/null
@@ -1,74 +1,0 @@
-//
-// "$Id$"
-//
-// Navigation test program for the Fast Light Tool Kit (FLTK).
-//
-// Silly test of navigation keys. This is not a recommended method of
-// laying out your panels!
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Light_Button.H>
-
-#define WIDTH 600
-#define HEIGHT 300
-#define GRID 25
-
-void ToggleArrowFocus_CB(Fl_Widget *w, void*) {
-  Fl_Light_Button *b = (Fl_Light_Button*)w;
-  Fl::option(Fl::OPTION_ARROW_FOCUS, b->value() ? true : false);
-}
-int main(int argc, char **argv) {
-  if (argc > 1) srand(atoi(argv[1]));
-  Fl_Window window(WIDTH,HEIGHT+40,argv[0]);
-    // Include a toggle button to control arrow focus
-    Fl_Light_Button arrowfocus_butt(10,HEIGHT+10,130,20," Arrow Focus");
-    arrowfocus_butt.callback(ToggleArrowFocus_CB);
-    arrowfocus_butt.value(Fl::option(Fl::OPTION_ARROW_FOCUS) ? 1 : 0);	// use default
-    arrowfocus_butt.tooltip("Control horizontal arrow key focus navigation behavior.\n"
-                            "e.g. Fl::OPTION_ARROW_FOCUS");
-  window.end(); // don't auto-add children
-  for (int i = 0; i<10000; i++) {
-    // make up a random size of widget:
-    int x = rand()%(WIDTH/GRID+1) * GRID;
-    int y = rand()%(HEIGHT/GRID+1) * GRID;
-    int w = rand()%(WIDTH/GRID+1) * GRID;
-    if (w < x) {w = x-w; x-=w;} else {w = w-x;}
-    int h = rand()%(HEIGHT/GRID+1) * GRID;
-    if (h < y) {h = y-h; y-=h;} else {h = h-y;}
-    if (w < GRID || h < GRID || w < h) continue;
-    // find where to insert it and see if it intersects something:
-    Fl_Widget *j = 0;
-    int n; for (n=0; n < window.children(); n++) {
-      Fl_Widget *o = window.child(n);
-      if (x<o->x()+o->w() && x+w>o->x() &&
-	  y<o->y()+o->h() && y+h>o->y()) break;
-      if ( !j && ( y<o->y() || (y==o->y() && x<o->x()) ) ) j = o;
-    }
-    // skip if intersection:
-    if (n < window.children()) continue;
-    window.insert(*(new Fl_Input(x,y,w,h)),j);
-  }
-  window.show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/offscreen.cxx
+++ /dev/null
@@ -1,260 +1,0 @@
-//
-// "$Id$"
-//
-// Offscreen drawing test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-/* Standard headers */
-#include <stdlib.h>
-#include <time.h> // time() - used to seed rand()
-
-/* Fltk headers */
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/x.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-static Fl_Double_Window *main_window = 0;
-
-// constants to define the view etc.
-static const int offscreen_size = 1000;
-static const int win_size = 512;
-static const int first_useful_color = 56;
-static const int last_useful_color = 255;
-static const int num_iterations = 300;
-static const double max_line_width = 9.0;
-static const double delta_time = 0.1;
-
-/*****************************************************************************/
-class oscr_box : public Fl_Box
-{
-public:
-  oscr_box(int x, int y, int w, int h);
-  void oscr_drawing(void);
-  bool has_oscr() const
-  {
-    if (oscr) return true;
-    return false;
-  }
-private:
-  void draw();
-  int handle(int event);
-  // Generate "random" values for the line display
-  double random_val(int v) const
-  {
-    double dr = (double)(rand()) / (double)(RAND_MAX); // 0.0 to 1.0
-    dr = dr * (double)(v); // 0 to v
-    return dr;
-  }
-  // The offscreen surface
-  Fl_Offscreen oscr;
-  // variables used to handle "dragging" of the view within the box
-  int x1, y1;   // drag start positions
-  int xoff, yoff; // drag offsets
-  int drag_state; // non-zero if drag is in progress
-  int page_x, page_y; // top left of view area
-  // Width and height of the offscreen surface
-  int offsc_w, offsc_h;
-};
-
-/*****************************************************************************/
-oscr_box::oscr_box(int x, int y, int w, int h) :
-  Fl_Box(x, y, w, h), // base box
-  oscr(0), // offscreen is not set at start
-  x1(0), y1(0), drag_state(0), // not dragging view
-  page_x((offscreen_size - win_size) / 2), // roughly centred in view
-  page_y((offscreen_size - win_size) / 2),
-  offsc_w(0), offsc_h(0) // offscreen size - initially none
-{ } // Constructor
-
-/*****************************************************************************/
-void oscr_box::draw()
-{
-  int wd = w();
-  int ht = h();
-  int xo = x();
-  int yo = y();
-
-  fl_color(fl_gray_ramp(19)); // a light grey background shade
-  fl_rectf(xo, yo, wd, ht); // fill the box with this colour
-
-  // then add the offscreen on top of the grey background
-  if (has_oscr()) // offscreen exists
-  {
-    fl_copy_offscreen(xo, yo, wd, ht, oscr, page_x, page_y);
-  }
-  else  // create offscreen
-  {
-    // some hosts may need a valid window context to base the offscreen on...
-    main_window->make_current();
-    offsc_w = offscreen_size;
-    offsc_h = offscreen_size;
-    oscr = fl_create_offscreen(offsc_w, offsc_h);
-  }
-} // draw method
-
-/*****************************************************************************/
-int oscr_box::handle(int ev)
-{
-  int ret = Fl_Box::handle(ev);
-  // handle dragging of visible page area - if a valid context exists
-  if (has_oscr())
-  {
-    switch (ev)
-    {
-    case FL_ENTER:
-      main_window->cursor(FL_CURSOR_MOVE);
-      ret = 1;
-      break;
-
-    case FL_LEAVE:
-      main_window->cursor(FL_CURSOR_DEFAULT);
-      ret = 1;
-      break;
-
-    case FL_PUSH:
-      x1 = Fl::event_x_root();
-      y1 = Fl::event_y_root();
-      drag_state = 1; // drag
-      ret = 1;
-      break;
-
-    case FL_DRAG:
-      if (drag_state == 1) // dragging page
-      {
-	int x2 = Fl::event_x_root();
-	int y2 = Fl::event_y_root();
-	xoff = x1 - x2;
-	yoff = y1 - y2;
-	x1 = x2;
-	y1 = y2;
-	page_x += xoff;
-	page_y += yoff;
-	// check the page bounds
-	if (page_x < -w())
-	{
-	  page_x = -w();
-	}
-	else if (page_x > offsc_w)
-	{
-	  page_x = offsc_w;
-	}
-	if (page_y < -h())
-	{
-	  page_y = -h();
-	}
-	else if (page_y > offsc_h)
-	{
-	  page_y = offsc_h;
-	}
-	redraw();
-      }
-      ret = 1;
-      break;
-
-    case FL_RELEASE:
-      drag_state = 0;
-      ret = 1;
-      break;
-
-    default:
-      break;
-    }
-  }
-  return ret;
-} // handle
-
-/*****************************************************************************/
-void oscr_box::oscr_drawing(void)
-{
-  Fl_Color col;
-  static int icol = first_useful_color;
-  static int ox = (offscreen_size / 2);
-  static int oy = (offscreen_size / 2);
-  static int iters = num_iterations + 1; // Must be set on first pass!
-
-  if (!has_oscr())
-  {
-    return; // no valid offscreen, nothing to do here
-  }
-
-  fl_begin_offscreen(oscr); /* Open the offscreen context for drawing */
-  {
-    if (iters > num_iterations) // clear the offscreen and start afresh
-    {
-      fl_color(FL_WHITE);
-      fl_rectf(0, 0, offsc_w, offsc_h);
-      iters = 0;
-    }
-    iters++;
-
-    icol++;
-    if (icol > last_useful_color)
-    {
-      icol = first_useful_color;
-    }
-    col = static_cast<Fl_Color>(icol);
-    fl_color(col); // set the colour
-
-    double drx = random_val(offsc_w);
-    double dry = random_val(offsc_h);
-    double drt = random_val(max_line_width);
-
-    int ex = static_cast<int>(drx);
-    int ey = static_cast<int>(dry);
-    fl_line_style(FL_SOLID, static_cast<int>(drt));
-    fl_line(ox, oy, ex, ey);
-    ox = ex;
-    oy = ey;
-  }
-  fl_end_offscreen(); // close the offscreen context
-  redraw();
-} // oscr_drawing
-
-/*****************************************************************************/
-static oscr_box *os_box = 0; // a widget to view the offscreen with
-
-/*****************************************************************************/
-static void oscr_anim(void *)
-{
-  os_box->oscr_drawing(); // if the offscreen exists, draw something
-  Fl::repeat_timeout(delta_time, oscr_anim);
-} // oscr_anim
-
-/*****************************************************************************/
-int main(int argc, char **argv)
-{
-  int dim1 = win_size;
-  main_window = new Fl_Double_Window(dim1, dim1, "Offscreen demo");
-  main_window->begin();
-
-  dim1 -= 10;
-  os_box = new oscr_box(5, 5, dim1, dim1);
-  main_window->end();
-  main_window->resizable(os_box);
-
-  main_window->show(argc, argv);
-
-  srand(time(NULL)); // seed the random sequence generator
-
-  Fl::add_timeout(delta_time, oscr_anim);
-
-  return Fl::run();
-} // main
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/output.cxx
+++ /dev/null
@@ -1,96 +1,0 @@
-//
-// "$Id$"
-//
-// Output test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Value_Input.H> // necessary for bug in mingw32?
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Output.H>
-#include <FL/Fl_Multiline_Output.H>
-
-Fl_Output *text;
-Fl_Multiline_Output *text2;
-Fl_Input *input;
-Fl_Value_Slider *fonts;
-Fl_Value_Slider *sizes;
-Fl_Double_Window *window;
-
-void font_cb(Fl_Widget *,void *) {
-  text->textfont(int(fonts->value()));
-  text->redraw();
-  text2->textfont(int(fonts->value()));
-  text2->redraw();
-}
-
-void size_cb(Fl_Widget *,void *) {
-  text->textsize(int(sizes->value()));
-  text->redraw();
-  text2->textsize(int(sizes->value()));
-  text2->redraw();
-}
-
-void input_cb(Fl_Widget *,void *) {
-  text->value(input->value());
-  text2->value(input->value());
-}
-
-int main(int argc, char **argv) {
-  window = new Fl_Double_Window(400,400);
-
-  input = new Fl_Input(50,375,350,25);
-  input->static_value("The quick brown fox\njumped over\nthe lazy dog.");
-  input->when(FL_WHEN_CHANGED);
-  input->callback(input_cb);
-
-  sizes = new Fl_Hor_Value_Slider(50,350,350,25,"Size");
-  sizes->align(FL_ALIGN_LEFT);
-  sizes->bounds(1,64);
-  sizes->step(1);
-  sizes->value(14);
-  sizes->callback(size_cb);
-
-  fonts = new Fl_Hor_Value_Slider(50,325,350,25,"Font");
-  fonts->align(FL_ALIGN_LEFT);
-  fonts->bounds(0,15);
-  fonts->step(1);
-  fonts->value(0);
-  fonts->callback(font_cb);
-
-  text2 = new Fl_Multiline_Output(100,150,200,100,"Fl_Multiline_Output");
-  text2->value(input->value());
-  text2->align(FL_ALIGN_BOTTOM);
-  text2->tooltip("This is an Fl_Multiline_Output widget.");
-  window->resizable(text2);
-
-  text = new Fl_Output(100,90,200,30,"Fl_Output");
-  text->value(input->value());
-  text->align(FL_ALIGN_BOTTOM);
-  text->tooltip("This is an Fl_Output widget.");
-
-  window->end();
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/overlay.cxx
+++ /dev/null
@@ -1,77 +1,0 @@
-//
-// "$Id$"
-//
-// Overlay window test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Overlay_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/fl_draw.H>
-
-int width=10,height=10;
-
-class overlay : public Fl_Overlay_Window {
-public:
-  overlay(int w,int h) : Fl_Overlay_Window(w,h) {}
-  void draw_overlay();
-};
-
-void overlay::draw_overlay() {
-  fl_color(FL_RED); fl_rect((w()-width)/2,(h()-height)/2,width,height);
-}
-
-overlay *ovl;
-
-void bcb1(Fl_Widget *,void *) {width+=20; ovl->redraw_overlay();}
-void bcb2(Fl_Widget *,void *) {width-=20; ovl->redraw_overlay();}
-void bcb3(Fl_Widget *,void *) {height+=20; ovl->redraw_overlay();}
-void bcb4(Fl_Widget *,void *) {height-=20; ovl->redraw_overlay();}
-
-int arg(int, char **argv, int& i) {
-  Fl_Color n = (Fl_Color)atoi(argv[i]);
-  if (n<=0) return 0;
-  i++;
-  uchar r,g,b;
-  Fl::get_color(n,r,g,b);
-  Fl::set_color(FL_RED,r,g,b);
-  return i;
-}
-
-int main(int argc, char **argv) {
-  int i=0; Fl::args(argc,argv,i,arg);
-  ovl = new overlay(400,400);
-  Fl_Button *b;
-  b = new Fl_Button(50,50,100,100,"wider\n(a)");
-  b->callback(bcb1); b->shortcut('a');
-  b = new Fl_Button(250,50,100,100,"narrower\n(b)");
-  b->callback(bcb2); b->shortcut('b');
-  b = new Fl_Button(50,250,100,100,"taller\n(c)");
-  b->callback(bcb3); b->shortcut('c');
-  b = new Fl_Button(250,250,100,100,"shorter\n(d)");
-  b->callback(bcb4); b->shortcut('d');
-  ovl->resizable(ovl);
-  ovl->end();
-  ovl->show(argc,argv);
-  ovl->redraw_overlay();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/pack.cxx
+++ /dev/null
@@ -1,111 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Pack test program for the Fast Light Tool Kit (FLTK).
-//
-// Rather crude test of the Fl_Pack object.
-// Changing the type() of an Fl_Pack after it is displayed is not supported
-// so I have to do a lot of resizing of things before that.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Pack.H>
-
-Fl_Pack *pack;
-Fl_Scroll *scroll;
-
-void type_cb(Fl_Light_Button*, long v) {
-  for (int i = 0; i < pack->children(); i++) {
-    Fl_Widget* o = pack->child(i);
-    o->resize(0,0,25,25);
-  }
-  pack->resize(scroll->x(),scroll->y(),scroll->w(),scroll->h());
-  pack->parent()->redraw();
-  pack->type(uchar(v));
-  pack->redraw();
-}
-
-void spacing_cb(Fl_Value_Slider*o, long) {
-  pack->spacing(int(o->value()));
-  scroll->redraw();
-}
-
-int main(int argc, char **argv) {
- Fl_Double_Window *w;
- {Fl_Double_Window* o = new Fl_Double_Window(360, 370);
-  w = o;
-  scroll = new Fl_Scroll(10,10,340,285);
- {Fl_Pack* o = new Fl_Pack(10, 10, 340, 285);
-  pack = o;
-  o->box(FL_DOWN_FRAME);
-  //o->box(FL_ENGRAVED_FRAME);
- new Fl_Button(35, 35, 25, 25, "b1");
- new Fl_Button(45, 45, 25, 25, "b2");
- new Fl_Button(55, 55, 25, 25, "b3");
- new Fl_Button(65, 65, 25, 25, "b4");
- new Fl_Button(75, 75, 25, 25, "b5");
- new Fl_Button(85, 85, 25, 25, "b6");
- new Fl_Button(95, 95, 25, 25, "b7");
- new Fl_Button(105, 105, 25, 25, "b8");
- new Fl_Button(115, 115, 25, 25, "b9");
- new Fl_Button(125, 125, 25, 25, "b10");
- new Fl_Button(135, 135, 25, 25, "b11");
- new Fl_Button(145, 145, 25, 25, "b12");
- new Fl_Button(155, 155, 25, 25, "b13");
- new Fl_Button(165, 165, 25, 25, "b14");
- new Fl_Button(175, 175, 25, 25, "b15");
- new Fl_Button(185, 185, 25, 25, "b16");
- new Fl_Button(195, 195, 25, 25, "b17");
- new Fl_Button(205, 205, 25, 25, "b18");
- new Fl_Button(215, 215, 25, 25, "b19");
- new Fl_Button(225, 225, 25, 25, "b20");
- new Fl_Button(235, 235, 25, 25, "b21");
- new Fl_Button(245, 245, 25, 25, "b22");
- new Fl_Button(255, 255, 25, 25, "b23");
- new Fl_Button(265, 265, 25, 25, "b24");
-  o->end();
-  w->resizable(o);
- }
- scroll->end();
- {Fl_Light_Button* o = new Fl_Light_Button(10, 305, 165, 25, "HORIZONTAL");
- o->type(FL_RADIO_BUTTON);
-  o->callback((Fl_Callback*)type_cb, (void*)(Fl_Pack::HORIZONTAL));
- }
- {Fl_Light_Button* o = new Fl_Light_Button(185, 305, 165, 25, "VERTICAL");
- o->type(FL_RADIO_BUTTON);
- o->value(1);
-  o->callback((Fl_Callback*)type_cb, (void*)(Fl_Pack::VERTICAL));
- }
- {Fl_Value_Slider* o = new Fl_Value_Slider(100, 335, 250, 25, "Spacing: ");
- o->align(FL_ALIGN_LEFT);
- o->type(FL_HORIZONTAL);
- o->range(0,30);
- o->step(1);
- o->callback((Fl_Callback*)spacing_cb);
- }
- w->end();
- }
- w->show(argc, argv);
- return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/pixmap.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-// Pixmap label test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Pixmap.H>
-#include <stdio.h>
-
-#include "pixmaps/porsche.xpm"
-
-#include <FL/Fl_Toggle_Button.H>
-
-Fl_Toggle_Button *leftb,*rightb,*topb,*bottomb,*insideb,*overb,*inactb;
-Fl_Button *b;
-Fl_Double_Window *w;
-
-void button_cb(Fl_Widget *,void *) {
-  int i = 0;
-  if (leftb->value()) i |= FL_ALIGN_LEFT;
-  if (rightb->value()) i |= FL_ALIGN_RIGHT;
-  if (topb->value()) i |= FL_ALIGN_TOP;
-  if (bottomb->value()) i |= FL_ALIGN_BOTTOM;
-  if (insideb->value()) i |= FL_ALIGN_INSIDE;
-  if (overb->value()) i |= FL_ALIGN_TEXT_OVER_IMAGE;
-  b->align(i);
-  if (inactb->value()) b->deactivate();
-  else b->activate();
-  w->redraw();
-}
-
-int dvisual = 0;
-int arg(int, char **argv, int &i) {
-  if (argv[i][1] == '8') {dvisual = 1; i++; return 1;}
-  return 0;
-}
-
-#include <FL/Fl_Multi_Label.H>
-
-int main(int argc, char **argv) {
-  int i = 1;
-  if (Fl::args(argc,argv,i,arg) < argc)
-    Fl::fatal(" -8 # : use default visual\n%s\n",Fl::help);
-
-  Fl_Double_Window window(400,400); ::w = &window;
-  Fl_Button b(140,160,120,120,"Pixmap"); ::b = &b;
-  Fl_Pixmap *pixmap = new Fl_Pixmap(porsche_xpm);
-  Fl_Pixmap *depixmap;
-  depixmap = (Fl_Pixmap *)pixmap->copy();
-  depixmap->inactive();
-
-  b.image(pixmap);
-  b.deimage(depixmap);
-
-  leftb = new Fl_Toggle_Button(25,50,50,25,"left");
-  leftb->callback(button_cb);
-  rightb = new Fl_Toggle_Button(75,50,50,25,"right");
-  rightb->callback(button_cb);
-  topb = new Fl_Toggle_Button(125,50,50,25,"top");
-  topb->callback(button_cb);
-  bottomb = new Fl_Toggle_Button(175,50,50,25,"bottom");
-  bottomb->callback(button_cb);
-  insideb = new Fl_Toggle_Button(225,50,50,25,"inside");
-  insideb->callback(button_cb);
-  overb = new Fl_Toggle_Button(25,75,100,25,"text over");
-  overb->callback(button_cb);
-  inactb = new Fl_Toggle_Button(125,75,100,25,"inactive");
-  inactb->callback(button_cb);
-  if (!dvisual) Fl::visual(FL_RGB);
-  window.resizable(window);
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/pixmap_browser.cxx
+++ /dev/null
@@ -1,139 +1,0 @@
-//
-// "$Id$"
-//
-// A shared image test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Shared_Image.H>
-#include <FL/Fl_Printer.H>
-#include <string.h>
-#include <errno.h>
-#include <FL/Fl_File_Chooser.H>
-#include <FL/fl_message.H>
-
-Fl_Box *b;
-Fl_Double_Window *w;
-Fl_Shared_Image *img;
-
-
-static char name[1024];
-
-void load_file(const char *n) {
-  if (img) {
-    ((Fl_Shared_Image*)b->image())->release();
-    img = 0L;
-  }
-  if (fl_filename_isdir(n)) {
-    b->label("@fileopen"); // show a generic folder
-    b->labelsize(64);
-    b->labelcolor(FL_LIGHT2);
-    b->image(0);
-    b->redraw();
-    return;
-  }
-  Fl_Shared_Image *img2 = Fl_Shared_Image::get(n);
- 
-  if (!img2) {
-    b->label("@filenew"); // show an empty document
-    b->labelsize(64);
-    b->labelcolor(FL_LIGHT2);
-    b->image(0);
-    b->redraw();
-    return;
-  }
-  img = img2;
-  b->labelsize(14);
-  b->labelcolor(FL_FOREGROUND_COLOR);
-#if FLTK_ABI_VERSION >= 10304
-  b->image(img);
-  img->scale(b->w(), b->h());
-#else
-  if (img->w() <= b->w() && img->h() <= b->h()) b->image(img);
-  else {
-    float fw = img->w() / float(b->w());
-    float fh = img->h() / float(b->h());
-    float f = fw > fh ? fw : fh;
-    b->image(img->copy(int(img->w()/f), int(img->h()/f)));
-    img->release();
-  }
-#endif
-  b->label(NULL);
-  b->redraw();
-}
-
-void file_cb(const char *n) {
-  if (!strcmp(name,n)) return;
-  load_file(n);
-  strcpy(name,n);
-  w->label(name);
-}
-
-void button_cb(Fl_Widget *,void *) {
-  fl_file_chooser_callback(file_cb);
-  const char *fname = fl_file_chooser("Image file?","*.{bm,bmp,gif,jpg,pbm,pgm,png,ppm,xbm,xpm}", name);
-  puts(fname ? fname : "(null)"); fflush(stdout);
-  fl_file_chooser_callback(0);
-}
-void print_cb(Fl_Widget *widget, void *) {
-  Fl_Printer printer;
-  int width, height;
-  if (printer.start_job(1)) return;
-  printer.start_page();
-  printer.printable_rect(&width, &height);
-  float fw = widget->window()->decorated_w() / float(width);
-  float fh = widget->window()->decorated_h() / float(height);
-  if (fh > fw) fw = fh;
-  printer.scale(1/fw);
-  printer.print_window(widget->window());
-  printer.end_page();
-  printer.end_job();
-}
-
-int dvisual = 0;
-int arg(int, char **argv, int &i) {
-  if (argv[i][1] == '8') {dvisual = 1; i++; return 1;}
-  return 0;
-}
-
-int main(int argc, char **argv) {
-  int i = 1;
-
-  fl_register_images();
-
-  Fl::args(argc,argv,i,arg);
-
-  Fl_Double_Window window(400,450); ::w = &window;
-  Fl_Box b(10,45,380,380); ::b = &b;
-  b.box(FL_THIN_DOWN_BOX);
-  b.align(FL_ALIGN_INSIDE|FL_ALIGN_CENTER|FL_ALIGN_CLIP);
-  Fl_Button button(150,5,100,30,"load");
-  button.callback(button_cb);
-  if (!dvisual) Fl::visual(FL_RGB);
-  if (argv[1]) load_file(argv[1]);
-  window.resizable(b);
-  Fl_Button print(300,425,50,25,"Print");
-  print.callback(print_cb);
-
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/pixmaps/black_1.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define black_1_width 56
-#define black_1_height 56
-static unsigned char black_1_bits[] = {
-0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 
-0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 
-0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 
-0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 
-0x00, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 
-0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 
-0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 
-0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x01, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x05, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x02, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x05, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x02, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0x57, 0x01, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0xab, 0x02, 
-0xf0, 0xff, 0xff, 0xff, 0xff, 0x55, 0x01, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0xab, 0x00, 
-0xc0, 0xff, 0xff, 0xff, 0xff, 0x55, 0x01, 
-0x80, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x00, 
-0x00, 0xff, 0xff, 0xff, 0x5f, 0x55, 0x00, 
-0x00, 0xfe, 0xff, 0xff, 0xaf, 0x2a, 0x00, 
-0x00, 0xf4, 0xff, 0xff, 0x57, 0x15, 0x00, 
-0x00, 0xe8, 0xff, 0xff, 0xaa, 0x0a, 0x00, 
-0x00, 0x50, 0xff, 0x7f, 0x55, 0x05, 0x00, 
-0x00, 0xa0, 0xaa, 0xaa, 0xaa, 0x02, 0x00, 
-0x00, 0x40, 0x55, 0x55, 0x55, 0x01, 0x00, 
-0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 
-0x00, 0x00, 0x50, 0x55, 0x15, 0x00, 0x00, 
-0x00, 0x00, 0x80, 0xaa, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/black_2.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define black_2_width 56
-#define black_2_height 56
-static unsigned char black_2_bits[] = {
-0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x40, 0x81, 0x00, 0x00, 0x00, 
-0x00, 0x10, 0x49, 0x09, 0x02, 0x00, 0x00, 
-0x00, 0x44, 0x52, 0x49, 0x08, 0x00, 0x00, 
-0x00, 0x90, 0x52, 0x25, 0x01, 0x00, 0x00, 
-0x80, 0x94, 0x54, 0x95, 0x44, 0x00, 0x00, 
-0x40, 0x24, 0x01, 0x40, 0x92, 0x00, 0x00, 
-0x20, 0x49, 0xfc, 0x0f, 0x09, 0x01, 0x00, 
-0x00, 0x11, 0x57, 0x35, 0x64, 0x00, 0x00, 
-0x40, 0xc2, 0x00, 0xc0, 0x10, 0x00, 0x00, 
-0x88, 0x64, 0x55, 0x55, 0x89, 0x05, 0x00, 
-0x20, 0x11, 0x00, 0x08, 0x42, 0x00, 0x00, 
-0x44, 0x58, 0x55, 0x55, 0x21, 0x0b, 0x00, 
-0x90, 0x04, 0x80, 0x0a, 0x80, 0x00, 0x00, 
-0x22, 0x56, 0x55, 0x55, 0x45, 0x14, 0x00, 
-0x48, 0x02, 0xa8, 0x2a, 0x00, 0x03, 0x00, 
-0x11, 0x55, 0x55, 0x55, 0x95, 0x28, 0x00, 
-0x21, 0x81, 0xaa, 0x2a, 0x00, 0x26, 0x00, 
-0x8d, 0x55, 0x55, 0x55, 0x15, 0x21, 0x00, 
-0xb1, 0xe0, 0xaa, 0xaa, 0x00, 0x20, 0x00, 
-0x80, 0xf5, 0x55, 0x55, 0x15, 0x07, 0x00, 
-0xbe, 0xf0, 0xab, 0xaa, 0x00, 0x00, 0x00, 
-0x80, 0xf5, 0x55, 0x55, 0x15, 0x1f, 0x00, 
-0xbe, 0xe0, 0xab, 0xaa, 0x02, 0x00, 0x00, 
-0x80, 0xf5, 0x57, 0x55, 0x15, 0x1f, 0x00, 
-0xb8, 0xc0, 0xaf, 0xaa, 0x00, 0x00, 0x00, 
-0x81, 0xd5, 0x57, 0x15, 0x14, 0x23, 0x00, 
-0xa1, 0x80, 0xaf, 0x0a, 0x00, 0x2c, 0x00, 
-0x19, 0xd5, 0x5f, 0x01, 0x14, 0x21, 0x00, 
-0x45, 0x01, 0xaf, 0x00, 0x00, 0x22, 0x00, 
-0x30, 0x56, 0x1f, 0x40, 0x85, 0x04, 0x00, 
-0x8a, 0x02, 0x0e, 0x00, 0x00, 0x11, 0x00, 
-0x40, 0x54, 0x0f, 0x54, 0x45, 0x02, 0x00, 
-0x34, 0x09, 0x04, 0x00, 0x80, 0x08, 0x00, 
-0x80, 0x40, 0x45, 0x55, 0x21, 0x01, 0x00, 
-0x68, 0x04, 0x00, 0x00, 0x48, 0x04, 0x00, 
-0x00, 0x82, 0x55, 0x95, 0x90, 0x00, 0x00, 
-0x80, 0x09, 0x02, 0x20, 0x22, 0x00, 0x00, 
-0x20, 0x24, 0xa8, 0x8a, 0x24, 0x01, 0x00, 
-0x40, 0x92, 0x00, 0x20, 0x89, 0x00, 0x00, 
-0x80, 0x48, 0xaa, 0x4a, 0x4a, 0x00, 0x00, 
-0x00, 0x20, 0xa9, 0x52, 0x02, 0x00, 0x00, 
-0x00, 0x84, 0xa4, 0x92, 0x08, 0x00, 0x00, 
-0x00, 0x10, 0xa4, 0x24, 0x02, 0x00, 0x00, 
-0x00, 0x40, 0xa0, 0x80, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/black_3.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define black_3_width 56
-#define black_3_height 56
-static unsigned char black_3_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 
-0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x54, 0x05, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/black_4.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define black_4_width 56
-#define black_4_height 56
-static unsigned char black_4_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/blackking_1.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define blackking_1_width 56
-#define blackking_1_height 56
-static unsigned char blackking_1_bits[] = {
-0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0x00, 
-0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 
-0x00, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x00, 
-0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 
-0x00, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 
-0x80, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 
-0xc0, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 
-0xf0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x00, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x00, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x00, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x01, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x02, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x0a, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x15, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x0a, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x15, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x2a, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x2a, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x2a, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xaa, 
-0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x55, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xaa, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 
-0xfc, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x55, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0x57, 0x55, 
-0xf8, 0xff, 0xff, 0xff, 0xff, 0xab, 0xaa, 
-0xf0, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 
-0xe0, 0xff, 0xff, 0xff, 0xff, 0xab, 0xaa, 
-0xc0, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, 
-0x80, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x2a, 
-0x00, 0xff, 0xff, 0xff, 0x5f, 0x55, 0x55, 
-0x00, 0xfe, 0xff, 0xff, 0xaf, 0xaa, 0x2a, 
-0x00, 0xf4, 0xff, 0xff, 0x57, 0x55, 0x15, 
-0x00, 0xe8, 0xff, 0xff, 0xaa, 0xaa, 0x2a, 
-0x00, 0x50, 0xff, 0x7f, 0x55, 0x55, 0x15, 
-0x00, 0xa0, 0xaa, 0xaa, 0xaa, 0xaa, 0x0a, 
-0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x05, 
-0x00, 0x80, 0xaa, 0xaa, 0xaa, 0xaa, 0x02, 
-0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x01, 
-0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 
-0x00, 0x00, 0x54, 0x55, 0x55, 0x55, 0x00, 
-0x00, 0x00, 0xa8, 0xaa, 0xaa, 0x2a, 0x00, 
-0x00, 0x00, 0x40, 0x55, 0x55, 0x15, 0x00, 
-0x00, 0x00, 0x00, 0xaa, 0xaa, 0x02, 0x00, 
-0x00, 0x00, 0x00, 0x50, 0x15, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/blackking_2.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define blackking_2_width 56
-#define blackking_2_height 56
-static unsigned char blackking_2_bits[] = {
-0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x40, 0x81, 0x00, 0x00, 0x00, 
-0x00, 0x10, 0x49, 0x09, 0x02, 0x00, 0x00, 
-0x00, 0x44, 0x52, 0x49, 0x08, 0x00, 0x00, 
-0x00, 0x90, 0x52, 0x25, 0x01, 0x00, 0x00, 
-0x80, 0x94, 0x54, 0x95, 0x44, 0x00, 0x00, 
-0x40, 0x24, 0x01, 0x40, 0x92, 0x00, 0x00, 
-0x20, 0x49, 0xfc, 0x0f, 0x09, 0x01, 0x00, 
-0x00, 0x11, 0x57, 0x35, 0x64, 0x00, 0x00, 
-0x40, 0xc2, 0x00, 0xc0, 0x10, 0x00, 0x00, 
-0x88, 0x64, 0xd5, 0x55, 0x89, 0x05, 0x00, 
-0x20, 0x11, 0xc0, 0x00, 0x42, 0x00, 0x00, 
-0x44, 0x58, 0x57, 0x74, 0x21, 0x0b, 0x00, 
-0x90, 0x04, 0x03, 0x30, 0x80, 0x00, 0x00, 
-0x22, 0x76, 0x51, 0x15, 0x47, 0x14, 0x00, 
-0x48, 0x32, 0x08, 0x02, 0x03, 0x03, 0x00, 
-0x11, 0x15, 0x5d, 0x57, 0x91, 0x28, 0x00, 
-0x21, 0x01, 0x0c, 0x03, 0x00, 0x26, 0x00, 
-0x8d, 0x55, 0xcf, 0xd3, 0x15, 0x21, 0x00, 
-0xb1, 0x18, 0x86, 0xe1, 0x00, 0x20, 0x00, 
-0x80, 0x5d, 0xd7, 0x75, 0x11, 0x07, 0x00, 
-0xbe, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x75, 0x55, 0x55, 0x11, 0x1f, 0x00, 
-0xbe, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x75, 0x55, 0x55, 0x10, 0x1f, 0x00, 
-0xb8, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x81, 0x75, 0x55, 0x55, 0x14, 0x23, 0x00, 
-0xa1, 0x60, 0x00, 0x00, 0x00, 0x2c, 0x00, 
-0x19, 0xd5, 0x55, 0x55, 0x14, 0x21, 0x00, 
-0x45, 0xc1, 0x00, 0x00, 0x00, 0x22, 0x00, 
-0x30, 0xd6, 0x00, 0x00, 0x85, 0x04, 0x00, 
-0x8a, 0x82, 0x00, 0x00, 0x00, 0x11, 0x00, 
-0x40, 0x54, 0x00, 0x00, 0x45, 0x02, 0x00, 
-0x34, 0x09, 0x00, 0x00, 0x80, 0x08, 0x00, 
-0x80, 0x40, 0x55, 0x55, 0x21, 0x01, 0x00, 
-0x68, 0x04, 0x00, 0x00, 0x48, 0x04, 0x00, 
-0x00, 0x82, 0x55, 0x95, 0x90, 0x00, 0x00, 
-0x80, 0x09, 0x02, 0x20, 0x22, 0x00, 0x00, 
-0x20, 0x24, 0xa8, 0x8a, 0x24, 0x01, 0x00, 
-0x40, 0x92, 0x00, 0x20, 0x89, 0x00, 0x00, 
-0x80, 0x48, 0xaa, 0x4a, 0x4a, 0x00, 0x00, 
-0x00, 0x20, 0xa9, 0x52, 0x02, 0x00, 0x00, 
-0x00, 0x84, 0xa4, 0x92, 0x08, 0x00, 0x00, 
-0x00, 0x10, 0xa4, 0x24, 0x02, 0x00, 0x00, 
-0x00, 0x40, 0xa0, 0x80, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x0f, 0x3c, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/blackking_3.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define blackking_3_width 56
-#define blackking_3_height 56
-static unsigned char blackking_3_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 
-0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x54, 0x05, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/blackking_4.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define blackking_4_width 56
-#define blackking_4_height 56
-static unsigned char blackking_4_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/blast.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * blast_xpm[] = {
-"32 32 32 1",
-" 	c #905518",
-".	c #9F580E",
-"+	c #A36526",
-"@	c #AF6519",
-"#	c #BF7429",
-"$	c #C77622",
-"%	c #B67B3C",
-"&	c #D07518",
-"*	c #D88836",
-"=	c #E48628",
-"-	c #F28514",
-";	c #FF951C",
-">	c #FA9835",
-",	c #FF982A",
-"'	c #F49F48",
-")	c #FFA82D",
-"!	c #FFA93F",
-"~	c #FFBA1C",
-"{	c #FFB936",
-"]	c #FFBA4C",
-"^	c #FFCA42",
-"/	c #FFD329",
-"(	c #FFCF5E",
-"_	c #FFD94C",
-":	c #FFE946",
-"<	c #FFFB3E",
-"[	c #FFFB55",
-"}	c #FEFC69",
-"|	c #FFFE82",
-"1	c #FFFFA3",
-"2	c #FEFFCB",
-"3	c #FEFFFC",
-"     % .  ....@@@#@@.+.+++%     ",
-"  %%++++.....@######@@@@.++ %   ",
-" %%% %++@@.@@@#$$#######@++++%% ",
-" %%+%+####@@$&&=*=&&$$####@++%%+",
-"+%+%#####&&&&&==='===*$$###%%%%+",
-"%+%%%%**=*&&&&>,>,>-=>==*$*##%%%",
-"  %#****'=>---,))!),>>>==***#%#+",
-"  @%*'''>>>>;;,{{{))))>>>''**#%+",
-" ..@#*'!]]]{)){^__^^{]!!!'''###+",
-" ..@$=']]((^^~~:::/__^{((!>**##@",
-"....&&=>(_|[::/<}[<[::_((!>==###",
-"....&&--!_}|}[<[}[}}}||_]!>>**##",
-"@@$$&&--;{:|1|[<|}|}||}_^]>>=*##",
-"##$$=-,;)~~<121<2|121}}:^])>=*$#",
-"#*'''!]{^_<<<1313332|}}}^{!>>*##",
-"%*'']((|}}||||<333321|[[_^]>==*#",
-"*''''((||112333333321|}[_^]!>=*#",
-"%%*''!]^_[[[}<13332}<[<:_])>>*$#",
-"##*==,,)~_:<[|212311}[</{),,=*$#",
-"#@$$==,;)~/<|1<2|<1}|[:^{)-=&&$@",
-".@@$&&-;)~:|}<<1}[|}[[:^{,-=&$@@",
-"..@@&&-;)(}[/<[|[<<}<:_^{),=&$@.",
-"...@&&=,{_(~~:[[<</[[^~]!>>=&$@@",
-" .@@$&'!({;;{/}::/~/_^)),>=*$#@+",
-" ..@$=''>,-;)^__~^{)^]),,==*$#@@",
-". @##*'==&--){({));;,{>>==$$#@++",
-"%++#%**$&&--,!));;;-->>=&$$##@+%",
-" +%%##@@@@&=>>>>>>=-==='$$#@@+++",
-" %%+@@..&.$&='==-&&&&&$*$#@@.+% ",
-" %%+ ....@$$*==&$&&&@$$##@@+ %  ",
-"   %  ....@#*#$$$#@@@@@##+@++   ",
-"        ..@####@@@@@..+@++%     "};
binary files a/DoConfig/fltk/test/pixmaps/block.xcf_gz /dev/null differ
--- a/DoConfig/fltk/test/pixmaps/blue.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * blue_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #0000A5",
-"+	c #020681",
-"@	c #0A008F",
-"#	c #0001B2",
-"$	c #0100BA",
-"%	c #0000D0",
-"&	c #0C00C4",
-"*	c #0008C4",
-"=	c #0B00DB",
-"-	c #13252E",
-";	c #171F44",
-">	c #1718B3",
-",	c #1616C2",
-"'	c #2628CF",
-")	c #2C2BC6",
-"!	c #2D30BD",
-"~	c #3D40D1",
-"{	c #4342BC",
-"]	c #4344CA",
-"^	c #5253E1",
-"/	c #5858D4",
-"(	c #5F5ECF",
-"_	c #6A69E7",
-":	c #6E6EDD",
-"<	c #7273D2",
-"[	c #7E7FDD",
-"}	c #7E7FEC",
-"|	c #8D8DDF",
-"1	c #8F90EF",
-"2	c #9D9EED",
-"3	c #A6A6E8",
-"     ;+.*$##$$**$*$#$*&&.+;     ",
-"   -@&)_133333333333333|:!$@-   ",
-"  ;%%}22122222222233333333['$;  ",
-" -&'1111111|2|21111|2223|332'&- ",
-" @*}}}}1}}}1}1111111[|[||||||*. ",
-";&/}[}}}}}}}[[[}}}}}[}[[||||[:&;",
-"+'::::_____:::<::__}_}:<<<<<[<)+",
-">)/_/_____::(::::_____:(<<<<<<].",
-"*^//^/////(((((//_^_^_///(((((/$",
-"#]]]]^^{/{{{{/{//^^^^^^///{(((($",
-".]~~~~]{{{{{{{]{]~~~~~~~]{]{{{(.",
-"#))))!!!{{{]!~!!~~'~''~~~]{{{{{.",
-"#))))!!!@!>!!))))''''''~)!!!{{+.",
-"$,,>>>@!>>)>,'''''''''''))!>!!!.",
-"$,,#>>>>.>,,&*%*'*''*',,,,,>>>>#",
-"&%%$#...#&&%*%***%%&*$,***,>#>>#",
-"$&%&*###&&%%&&&&,*&*,##$*$$#$$#$",
-"$&%%$$$*&%&**$$$&&&&&$#$***#,#.#",
-"$$$&$*&%%=&&$##$$**&&$**&&&$$#..",
-".#$$&&%%%%%&,....##$#$$&%%&&$#.#",
-".#$$&%%===%%&#.....###$&%%%&&#.#",
-"$$&&%=====%%$##.@..#.##&&&%%&$$#",
-"$$&&%==%==%&$###.....##$%&%&&$$$",
-"$$$&&%%%%%&&$$###..###$$&%&%&&$$",
-".$$&&&&$$&$$*&&*$$#$$$$$$%%%%%&.",
-"+$$$$&####$&$&&&&&$$&$$$$&%=%%=+",
-";##$$$#....$$&&&$&&%&&$$*&%==%%;",
-" @$,#$#.@..##.#$&&%%%&$&&=%%%%. ",
-" -$*$&&$.......#&&&%&&$&%==%%&- ",
-"  ;$&&$#...#...$&%%%&&$&%=%=%;  ",
-"   -@%&$#..#...#$%&&&&&&&=%.-   ",
-"     ;+.#$#....#&&%%&&&&#+;     "};
--- a/DoConfig/fltk/test/pixmaps/blue_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * blue_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #010047",
-"+	c #00033E",
-"@	c #010345",
-"#	c #010577",
-"$	c #0000A4",
-"%	c #0001B7",
-"&	c #0000C3",
-"*	c #0000D0",
-"=	c #13252E",
-"-	c #1A2147",
-";	c #1E1E57",
-">	c #2023BC",
-",	c #2526CD",
-"'	c #343364",
-")	c #363699",
-"!	c #3237C5",
-"~	c #373BB4",
-"{	c #474875",
-"]	c #4E4FD4",
-"^	c #5252C6",
-"/	c #5B5A85",
-"(	c #6D6D94",
-"_	c #6666CE",
-":	c #6465DE",
-"<	c #6E6CAC",
-"[	c #7B7CDA",
-"}	c #7C7DEB",
-"|	c #8D8DDF",
-"1	c #8F90EF",
-"2	c #9D9EED",
-"3	c #A6A6E8",
-"     -#$&%%%%%&&&&%%%&&&$#-     ",
-"   =$*,:133333333333333|}>%$=   ",
-"  -&,}22122222322233333333[>%-  ",
-" =&,}111111|2|21111|22322332,&= ",
-" $,[1}1}1}}1}1111111[1|||<|||&$ ",
-"-%]}}}}}}}}}[[[}}}}}}[[[||||1:&-",
-"#,:_}:::}::[<((((((<[}}[[[[<[[,#",
-"%!:::::::_<(((((((((/<_:___[__]$",
-"&]]]]]]]://///(////////_^::___]%",
-"%]]]]]]^{{{/{{/{/{</{/{/^^^^^_^%",
-"$!!!!!]'{{{={{{{{{'{{{{{']]~^^^$",
-"%,!,!>)''-{''''''''''''{')]~~~~$",
-"%,>,!>)-'-'-''''''';''''')!!~~~$",
-"&,,$>>--;;-;;;;;;;;;);;;;->>>#!$",
-"&&&,$$;+;+;+;@;;.;;;;;;;;;%>,>>%",
-"%&&&$$++@+..@...;..@.@;@.;%,$%$%",
-"&&*&&%+++..@@@@@@@@@+@++@+%%%%%%",
-"&&&&%%+@+.@@+++@++@@@++++@&%%%$%",
-"%&&&&&+....+++++@+@+@+@@@@&%%%$$",
-"$%%&%&#.@..@+++++++++++@@#&&%$$$",
-"$%%%&*$....@+++++++++++@.$*&&%%$",
-"%%&&***#...@+++-++++++++#***&%%%",
-"&%&&***&...@+++++++++++@$&**&%%%",
-"&%%&****$.@@+++++++++++$&&*&&&&&",
-"$%%&&&&%&$#+@@+++++++#$%&&****&$",
-"#%%%%&%%$%$$#@.@@@+#$%%%%&*****#",
-"-%%%%%%$$$$%%%&%%&&&&%%&&&*****-",
-" $%%%&$$$$$$%$$%&&**&&%&******$ ",
-" =%%&&&$$$$$$$$%&&***%%&*****&= ",
-"  -&&&&%$$$$$$$%%***&&&&****&-  ",
-"   =$&%%%$%$$$$%&&&&&&&&***$=   ",
-"     -#$%%%%$$$%%&&&&&&&%#-     "};
--- a/DoConfig/fltk/test/pixmaps/cyan.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * cyan_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #143144",
-"+	c #0A4350",
-"@	c #038080",
-"#	c #029795",
-"$	c #00A3A5",
-"%	c #00ABAC",
-"&	c #02B3B5",
-"*	c #00BBBB",
-"=	c #00C0C0",
-"-	c #19B9BB",
-";	c #33B5B5",
-">	c #00CCCB",
-",	c #12C5C5",
-"'	c #47B2B1",
-")	c #1AC9C9",
-"!	c #09D2D1",
-"~	c #37C9CA",
-"{	c #46C5C6",
-"]	c #24D9D8",
-"^	c #5CC5C3",
-"/	c #4BD0D1",
-"(	c #55D8DA",
-"_	c #72D4D3",
-":	c #53E3E3",
-"<	c #66E0E2",
-"[	c #7EE2E1",
-"}	c #70ECED",
-"|	c #94E0E1",
-"1	c #8DEFED",
-"2	c #A1ECEC",
-"3	c #ADE8E6",
-"     +@$=*&&&***=*&&&*==$@+     ",
-"   .#>![123333222233323|<~*#.   ",
-"  +,]}1211212222212232333||**+  ",
-" .,]1211111222221112|||||3||>>. ",
-" #)[11111}}11[11111111[|||||[!# ",
-"+*<}<<}}1}1}[[[1}1}}1[[___|_|<>+",
-"@)_[[<}}}}}<[__<<}}}}1[___|^|_)@",
-"%](((<<<<<__/___[}}}}:[__^_^^_^%",
-"-(((((((((_{{_{/_(}:}<<<(___^^/*",
-"&////(/{{{{^/{{^/]:::::(_(/{^{^&",
-"%{//!/{;';{;{{~{{/]:]:]/~~/{^{;%",
-"%==,~,*;;;;'*~~~~~/!]]()~{{{;''#",
-";>/**;;;&;-;;~,)))//!!]~=---;';$",
-"*>=*;%;%;--*,)!)!>)!~!))~=~--%;%",
-";),=;%%%--))))!))!)))~,)),{--&;%",
-"=)>**%$%*=)>!>)),,))--*=)=***;**",
-"*)!>**%&=)!,,,===,,,*;*;==**&*&&",
-"*,>,=***>!),**-*=,,>=***,=*&*&%&",
-"*&==**,>>!>=&%&&***=***=>,=*%%%%",
-"%****>>!!!!>*%%%%%&*&**,>>>==%$$",
-"%%*==>!]]!!>*%%$$%%%*%=,>>>>>*%%",
-"%==,!]]]]]!>*&$$##$%%%&*,>>>*=&;",
-"**=>!]]]]]!>**%$$#%%%%*=,>>>=**&",
-"***,)!!!!!,****=%%#%%%&*=>>>>==*",
-"$*&=,),**,=*======***==**,>>>>>%",
-"@=&-*=&%%&&*==>>======*&=,>]]!!@",
-"+&&=&*&%$%%*****==,>,=*==!!!]]!+",
-" #&&=*&$$#$%%%%*=,>>>=*=,!!!!!# ",
-" .&====%%$%%%$$%=>>>)=*,!]]!!,. ",
-"  +*,==*%#$$%#%*=>!>,=-,!]]!!+  ",
-"   .#,=*%%%%$#$&=,>,,,=,)!]$.   ",
-"     +@$&*%%%$$%,,,,,,,,%@+     "};
--- a/DoConfig/fltk/test/pixmaps/cyan_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * cyan_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #003A3A",
-"+	c #133244",
-"@	c #004241",
-"#	c #0A4551",
-"$	c #084948",
-"%	c #1B5353",
-"&	c #006C6D",
-"*	c #286261",
-"=	c #396767",
-"-	c #0F8080",
-";	c #019795",
-">	c #507B7C",
-",	c #00A7A9",
-"'	c #5D8989",
-")	c #00B7B7",
-"!	c #00C1C1",
-"~	c #2FB2B3",
-"{	c #6D9A9A",
-"]	c #00CAC9",
-"^	c #4AB4B3",
-"/	c #05D4D2",
-"(	c #36C8C9",
-"_	c #53C4C3",
-":	c #46D3D4",
-"<	c #61D3D3",
-"[	c #75CECE",
-"}	c #6FE2E1",
-"|	c #82DFDE",
-"1	c #94E0E1",
-"2	c #89EFED",
-"3	c #A2ECEC",
-"     #-,!))~))!)!!)~)!!!,-#     ",
-"   +;]:}2333333333333331<();+   ",
-"  #!/}23333333333333333333[!!#  ",
-" +!/322222221332223311111111:!+ ",
-" ;:2222222222|23222233111111|/; ",
-"#!:}|}222222|||}22222}|1[1[[1}]#",
-"-:<}}}}}}}}[^{{{{{{[[2}|[[[[[|!-",
-",:}:}:}}}<{'''''''{'{{[<<|[[[<_,",
-"!:<<:}::_'>'>>'>'''''''[<<<[_<:!",
-")(:::::^>>>>>>>>>>>''''>_::____~",
-",((:::(>===>=>=>>>=>>>>>'(:___^,",
-"~(((](;===#========&&=*=*^(_^^~;",
-")](()_&%%==%=%===*===*==*-~)^~~,",
-"!!!)~,=#.%%#%%%%*%******%=())~~,",
-")]()~,.%%%%%%%%%%%%%%%%%%%()))~)",
-"(!]!)^.....$%$$$$$$$$$$$$$)))))~",
-"!]:])~...%$$.@#@@@@@.@.$@@))))))",
-")]]]!(.$$.@@..@.@@@@@@..@$)))))~",
-"~!)!)!.$$%$.@....@#@.@@@#@()),,,",
-",)!~!(&@@@@$...........@$&]!)),,",
-")))!]]~$$$@$.........@@@$,:]!),,",
-"~)!!///&$$$@@...........&]]]!)))",
-"))!!://!%$$@...........@,]/]])))",
-"!))!///],@#$..........@;]]]]]!]!",
-",)!)!!!!!,&.@#@......*,)!]]]/]!,",
-"-)~!!!)),));&@@@$.@&;!)))!/////-",
-"#)~))),,;,,)))!)!!:]]!!!!]/////#",
-" ;))))),;,,)~~,)!!]/]!)!]/////; ",
-" +)!!!!),,,,,,,)!]]/!()!/////!+ ",
-"  #)]!)),,,,,,,)!!/!]!)!////]#  ",
-"   +;]!),,,,,;,)!]]!!!!!]//,+   ",
-"     #-,))));,,,!!]!]!!!)-#     "};
--- a/DoConfig/fltk/test/pixmaps/gray.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * gray_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #2C393F",
-"+	c #394649",
-"@	c #666967",
-"#	c #737572",
-"$	c #7A7C79",
-"%	c #828481",
-"&	c #878986",
-"*	c #8C8E8B",
-"=	c #90928F",
-"-	c #939592",
-";	c #979996",
-">	c #999B98",
-",	c #9C9E9A",
-"'	c #9FA19E",
-")	c #A1A0A4",
-"!	c #A3A5A2",
-"~	c #A6A8A5",
-"{	c #A9ABA8",
-"]	c #A9ACAF",
-"^	c #ABADAA",
-"/	c #AFB1AE",
-"(	c #B3B5B3",
-"_	c #B9BBB8",
-":	c #BABDC0",
-"<	c #C1C3BF",
-"[	c #C2C3C7",
-"}	c #C7C9C6",
-"|	c #CBCDCB",
-"1	c #D1D3D0",
-"2	c #D9DBD8",
-"3	c #DFE1DE",
-"     +@%;-**=---;-=*=;>>%@+     ",
-"   .$':[2332233333222231[]-#.   ",
-"  +)(|33333222333332222221[)-+  ",
-" .;(22233333121333322|12|1|2]'. ",
-" #]|221222221112233222[2||||1]$ ",
-"+)[|[[2[3[3[2[1[[2[222||[[[[|<)+",
-"@~[[||[111[[|[[|2221[2[|}<<[[|~@",
-"%:|<[|[[[|[[[:[[[[[21|[[[_:((_]&",
-"-(::[[[[[:((((]:[[|[||<<[_<:::];",
-"=((((_(({^]](]]](<[[|[[:(:((]((*",
-"&]]((()))!')^(^^]([[<<__(]({~)]%",
-"*~^]])'>-))'){)]^]((:_:]]{)))>)%",
-"=)~!''>)--);){{]^{{^(((])~~!)==%",
-")~)))=**);;)']]{]]]]]]]{~!,)=)-&",
-"-',-**&*=)>)!{]~~~~!)!))])'>-==*",
-")))))&&&=;!~])')))))>)>,'';))-)*",
-"-'!)=**)=)!)')-;>,''-=*-))**==)&",
-"),);))*))]);)*--)>)))-==-)=)*&**",
-"*))-==)'!{!;*&**==---)=)>))*)%&&",
-"%&==))!)]])))*&&**&)**))!'-))&%%",
-"**)=)){^{^~)=&&%$%&&**=)))]))**&",
-"**-)!{]]]]{)))&$%%%*&&*;'''>))**",
-")=),]((((]!)*&&%$%$&&*)-))]);*)*",
-"==*)'!!'!~)*)))&)&&&&&*)>'')))-)",
-"%)*))))-);)-==)))&)&)*=-))!!))'%",
-"@=*=--*&&*==));-)=)=)))*->!]^^]@",
-"+=*=--*%$%&)&-)-))));-=)-){{]]]+",
-" #)*)*)&%$%&*&&*=;)!))*)){]]{~# ",
-" .*)*)*&&%&%%%%));]'))*>]{{])). ",
-"  .=))))&%%&%%$&;,!)>-))!]]{~+  ",
-"   .#;=&*)$&%%%)))!');-)'{]$.   ",
-"     +@$$)&)%$$&-,))>),;&@+     "};
--- a/DoConfig/fltk/test/pixmaps/gray_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * gray_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #2C2E2B",
-"+	c #313330",
-"@	c #2E393E",
-"#	c #363835",
-"$	c #3B3A3D",
-"%	c #3B3D3B",
-"&	c #3B464A",
-"*	c #454644",
-"=	c #48464A",
-"-	c #50514F",
-";	c #585A57",
-">	c #616260",
-",	c #686967",
-"'	c #70716E",
-")	c #787A78",
-"!	c #818380",
-"~	c #868885",
-"{	c #8B8D8A",
-"]	c #8F908D",
-"^	c #939491",
-"/	c #969895",
-"(	c #9B9D9A",
-"_	c #A1A3A0",
-":	c #A8AAA7",
-"<	c #B0B3B0",
-"[	c #B9BBB8",
-"}	c #C1C2C0",
-"|	c #C9CBC8",
-"1	c #D2D3D1",
-"2	c #D9DBD8",
-"3	c #DFE1DE",
-"     &,!/^]]]^////]]]/((!,&     ",
-"   @)_<12322232333322221}:^'@   ",
-"  &(<133333313233332222221}_/&  ",
-" @/}221233322113333221111111<_@ ",
-" )_1112223321212223212111}1}1<) ",
-"&^}1111111111}1111221111}}}}1}_&",
-",:}}}111111<:]~]^^^<}11}}}}}}}:,",
-"]<}}}}}}}}]~))~)~~]~]^}}}}}<<}<~",
-"/}<}}}}}_)))))))))~)~)~<}}}<<<<^",
-"]<<<<}<_,',,'''))))))))):<}<<<<]",
-"]<<<<<<,>>>,,,>>>,,),,,,)<<<_::~",
-"]_::<_~>->->->>>>>>>,,,,>^__:^/)",
-"^___((,====-=-->=>>=>=>>=)_(^(^!",
-"^:_(^^=-=-=-=-==-==>-----=__/^^]",
-"^_((^~$$*%=*==-=--======-=_(^(^]",
-"^__(]].+$$$%%*$$$$$*$@*%%=((^^^]",
-"/_:_^]@.+$$$+$++$$+$$$$$+$^^^^]]",
-"^___^^..$##++..$++$+....$$^]^]]]",
-"]^^(^($+$$$$.....++$.$.@$.(^]]~~",
-"~]^^//>+$++.$@.@.@......$>_(]]!~",
-"]]^(__~@$$$$......$.$@$+$)<_^]~~",
-"]^((_<<;##$.$..........$=__:(^]]",
-"^^((:<<^&#$$...........$~____^^]",
-"^^^((___!$+.$.@.....@.$)(___(((^",
-"~^^^__(^^~=$..$.@....=)^/_:::_:~",
-">^^^/^^]]]])=@.$..$=)^^^^(_<:<:,",
-"&]]^^]]))~~^^]]]^/__:(^^(__::::&",
-" )^]^^]]))~~]]]^^(_:_^(^_:<:::) ",
-" @^^(^^]~~])~)~]((___^/(:<_<_(@ ",
-"  &^__(]])~]~)~^^_:__(^(_:<:_&  ",
-"   @)((]]]~~)~)^(__(((((_:<)@   ",
-"     &,)]]]]])!]^(__(_((~>&     "};
--- a/DoConfig/fltk/test/pixmaps/green.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * green_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #022D01",
-"+	c #004300",
-"@	c #007F00",
-"#	c #009400",
-"$	c #00A301",
-"%	c #00AA00",
-"&	c #00B600",
-"*	c #04BC0A",
-"=	c #00C100",
-"-	c #02C805",
-";	c #00CC00",
-">	c #24B329",
-",	c #00D400",
-"'	c #18CA24",
-")	c #3FB740",
-"!	c #31C733",
-"~	c #3FC640",
-"{	c #31D633",
-"]	c #4FC650",
-"^	c #5DD45D",
-"/	c #5BD957",
-"(	c #51DF54",
-"_	c #6BD16D",
-":	c #6AE26D",
-"<	c #81DF81",
-"[	c #8DDB8C",
-"}	c #7EE77F",
-"|	c #79EE7A",
-"1	c #8FEF8F",
-"2	c #9DEC9D",
-"3	c #A6E7A5",
-"     +@$=*&&&*====&&&===$@+     ",
-"   .#;{:123333333333333[:!&#.   ",
-"  +-;|22222223222223333333<*=+  ",
-" .-,11111111221111122223[332!;. ",
-" #-}1}|}||1|111111}11<<[[[[[<;# ",
-"+*^}}}}|}||}}<<1||||}1<<[[[[[:;+",
-"@':^::|||||:___}}|||:|}_<_[_[_'@",
-"%{^:://///^_^^_^:/|(/::^______~%",
-"*(/////:^^^^_]]^^/((((:^^^]___]=",
-"%~~/~(/~]~]]~]]]/((((((//^]]]]^%",
-"%~!!!!~)))))~]~]~({({{{(~~~]))]$",
-"&!!!!~~))>))~!~!~!{({{(!~~~))))$",
-"&!!!*>>>>>>>>!!'{!{{{{{!!~>~)))$",
-"=-'*>&>%>&!*'--'{-''{-{'!!!%>#>%",
-"*='*>%$%&&'=-{;-'{-='=---=!&!%!%",
-"*--=&%%%&=;--;-=-=;=*&!**-=&&&&&",
-"=-;-=&%&==;;======--*&&&**&&&&&&",
-"*-;-=&**-,;==&&*==-==*&*=-*&&&%&",
-"&&=====;;,;=&&&&&*===&===-=*&&$%",
-"%&**==,,,,;-&%%%%%&&&**-;;;=&%%%",
-"%&&*-;,,,,,;=%%%$$%&%&*-;;;;=&%%",
-"&&=-,,,,,,,;=&$$$#%%%%&=-;;;-&&&",
-"**=-,,,,,,,=*&%$$$$%%%&=-;;;=*&&",
-"*&*=,,,,,,-=&=&&&%%%%&&*=-;;;===",
-"$*&*=-{=*===*=-==&&*&&*===;;;;;%",
-"@*&*==&%%&&*==--======*&*-;,,,;@",
-"+&&&&=&%$%%&=&*===-;;=&*=;,,,,,+",
-" #&&&&&%#$%%&%%&*-;;-=*=-,,,,,# ",
-" .&===&&$$$%$$%&==,;-=*=,,,,,-. ",
-"  +&===&%$%%$$$&=;;;-==-,,,,-+  ",
-"   .#-=&&%%%$$$&=-;=====;,,$.   ",
-"     +@$&&&%$$$%==----='&@+     "};
--- a/DoConfig/fltk/test/pixmaps/green_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * green_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #003700",
-"+	c #003E00",
-"@	c #004405",
-"#	c #004600",
-"$	c #005E00",
-"%	c #1B541B",
-"&	c #006E00",
-"*	c #2C602D",
-"=	c #008B00",
-"-	c #3E6D3F",
-";	c #358335",
-">	c #00A800",
-",	c #4E7B4E",
-"'	c #00B700",
-")	c #00C100",
-"!	c #5E895F",
-"~	c #00CD00",
-"{	c #32B12E",
-"]	c #40AA3D",
-"^	c #00D800",
-"/	c #28C42B",
-"(	c #6D9A6E",
-"_	c #41C442",
-":	c #5CCB5D",
-"<	c #58DA59",
-"[	c #7EC678",
-"}	c #73D173",
-"|	c #73E773",
-"1	c #83EB84",
-"2	c #93EB92",
-"3	c #A0E7A0",
-"     @&>)'''''))))''')))>&#     ",
-"   .=~~|2333333333333332|/'=.   ",
-"  +~^1222233333323333333332''@  ",
-" .)~212122123222222333333333/). ",
-" =~12111111121211112222[3[322~= ",
-"@)<1|11|||||121111||1112}[[[}|~@",
-"=/|||||||||}[!((((([}|}1}}}[}})=",
-">/<:<|<|<|(!!!(!((((((::|}1}}}_>",
-")<<<<<<<:!!!!!!!!!!!!(!}<:<::}:)",
-"'</</<_:-,-!-!,!,,,,,,,,:<<::::'",
-">_//</_,---------,,,;,,,;:___]:>",
-"'/////]-, --------*--;*--]_{_]]>",
-"'/////;.---.--***********;_{{{]>",
-")~))>{**.-.*.%%%*%%*%****%//{{>>",
-"'))/>>..%.*%%%%%#%%%%%%%%%'/'/>'",
-")~))'{...+++@@##%###@@@@#@)'/'/>",
-")~~~)'.@@@@@@@@@@@#%#@@@@@''>'''",
-"))~))'++@@##+++@@#+#@+.+@+'''''>",
-">)))')@####+.++++++++++@@@)''>>>",
-"'>')))&###@#+.....+++@+@#&~)'>>>",
-">''))~>#####+........++@#>^~)'>>",
-"'')~~^^&####++......+.++&)~~~'''",
-"'))~~^^)$###@+.......+++>~~~))''",
-"'/')~^^)>#@+++++......#=~)~~~)))",
-">''))))')>$++@@@#++++$>'))~~~~)>",
-"='''))''>')=&#+#+@+&>)'')~~^^^^=",
-"+'''''>>>>''))')))~)))'''~~^^~~#",
-" ='''''>=>>>>>'')~~~~)))~~^~~^= ",
-" .>)))''>=>>>>>'')~~~'))~^^^~~. ",
-"  @))))'>>>>>=>>)~~~))))^^^~~+  ",
-"   .=~)'>>>>>>>')~~~))))~^^>.   ",
-"     #&>'''>>=>>)~))))))>=@     "};
--- a/DoConfig/fltk/test/pixmaps/magenta.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * magenta_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #380F3F",
-"+	c #490754",
-"@	c #890089",
-"#	c #9E02A1",
-"$	c #A800A6",
-"%	c #AF00B1",
-"&	c #B900B6",
-"*	c #B902BE",
-"=	c #C200C3",
-"-	c #CC00C8",
-";	c #D100D2",
-">	c #DE00DB",
-",	c #CC18CC",
-"'	c #C324C3",
-")	c #BC33BC",
-"!	c #D629D5",
-"~	c #B93DB9",
-"{	c #D23BD2",
-"]	c #D34BD2",
-"^	c #CF53D0",
-"/	c #CE5ECE",
-"(	c #E551E4",
-"_	c #E366E3",
-":	c #D473D4",
-"<	c #DD6DDD",
-"[	c #EB7BEC",
-"}	c #E683E5",
-"|	c #DD8BDD",
-"1	c #F18FF2",
-"2	c #F09BF0",
-"3	c #E7A2E8",
-"     +@#=*&%&*====&%&===$@+     ",
-"   .@=!_233333333333333|/{*@.   ",
-"  +;>[22223333332233333333|'=+  ",
-" .=!12111112222122233333333|{-. ",
-" @,}}}}1[1[[1}21111}1|||||3||;# ",
-"+=_<[[[[[[[[}:}[[[[[}}}|||||:<=+",
-"@=<<<_<[__[<<:::[[_[_[<::::|::'@",
-"${_/______</:/:<______<//:::::]$",
-"*]]^]_]_^^^//^//__((___/^///://*",
-"%]]]]]]~^^~^~/~^^((((((]^^~/~//&",
-"$){{{]~~~~~~~])~^]((!((]]^~^~~~#",
-"%{{){')~~~~)))]{)'{{{!{{))~~~~~#",
-"%''')')~#)))''''{!!{{!{{{'~~~~~#",
-"=,='&#$%)&&&',!,,,',,!!''''%~#~$",
-"&,*'$$$$&'',,,-,,-,,'=,',''&)%%%",
-"==-=&$$%%&--,-,,',,==&&==,*&&&&%",
-"=;-;=&$&=;;;==*===,=**%'=&*%'&&%",
-"*=;=*&*&=;==**&*=====&&&*=&*&%%%",
-"%*==*-=;-;-=%%$&&*=&**==;==*%$$$",
-"$%&&*=;;;;;=&$%$$%%*&&*--;==*%%$",
-"%%*==;;>>;;;=%$$#$$%%%*=;;;-=%%%",
-"&&=,-;>>;>;-=%%###$$%%&==--;=&%%",
-"&&*;->>>>>;=&%%$#$$$$$%==;,--=&&",
-"=*&=;;;;;;-&**&&%$$$$%&&-=;;=&==",
-"$*%*===*&===&===***&****==;;;-;$",
-"@&&&*=%$%%*&=---==&===*&&=-;>;;@",
-"+*&&&&&$#$%&**&=&;=-==**=;;;>;;+",
-" @****%$##$%%$&&==;;-=&=-;>;;;@ ",
-" .%&==*%$#$$$#$%&=;;-=&=;;>;-;. ",
-"  +====&$$$$$$$&----=*==;>;>;+  ",
-"   .#==&%$$%##$%=;;-====;;;#.   ",
-"     +@#%*%$$##%*===-=-&$@+     "};
--- a/DoConfig/fltk/test/pixmaps/magenta_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * magenta_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #3A033B",
-"+	c #410142",
-"@	c #48004B",
-"#	c #6C006C",
-"$	c #541954",
-"%	c #840084",
-"&	c #9B009D",
-"*	c #612F61",
-"=	c #AC00AC",
-"-	c #792A7D",
-";	c #BA00B9",
-">	c #C200C2",
-",	c #813285",
-"'	c #D000D0",
-")	c #734472",
-"!	c #B91EBA",
-"~	c #8E488B",
-"{	c #B034B1",
-"]	c #855A85",
-"^	c #CD31CD",
-"/	c #C643C7",
-"(	c #967098",
-"_	c #AC6DAC",
-":	c #C960CA",
-"<	c #D859D8",
-"[	c #E770E7",
-"}	c #E376E3",
-"|	c #DD7CDD",
-"1	c #EF8BEF",
-"2	c #E894E8",
-"3	c #E7A2E8",
-"     @%&>;;=;;>>>>;=;>>>=%@     ",
-"   .&'^[1333333333333332:^;%.   ",
-"  @>'[22233333332333333333|^;@  ",
-" .'^121111112221112333333333^'. ",
-" &^1111111111222111122222_322'& ",
-"@><}}}1[1[[[}}1111[}}}|2|2|_2[>@",
-"%>}[}[[[[[[2_((((((2|[}|||||||>%",
-"=^<<<<<<[:_]((((((](]_:::::|:|/=",
-";<<<<<<<:]]]]]]]]]]]]]]::::::::>",
-";//<^<^:)))])])])])]]]]]<<:{::<=",
-"=/^^^</))))))))))))~))))~//<{:{&",
-";^/^^^%**) )***)*)*)*)*)){/{{{{=",
-";^^!/!-**************-***,{/{{{&",
-";>;!={*.*.*.*$*$$$$$*$*$**!!{{{=",
-";'>!=&..*.*.$$$$$$$$$$$$$$!;!!=!",
-">>>>!{.....$.@+@@@$+$+$+$$;!;!!=",
-";''>>=...++@+++++@@++...++;!;;;;",
-";>'';;.++@@+.+..+++++..+++>;;===",
-";;;>>>+++@++..++.+++++++++>;;===",
-"==;;;>%+@+@++.......++++@#>>;===",
-"=;;>>>=+@+@@+.........++@=''>===",
-";;>>'''#@@+++...........#>'>';==",
-";;>>'''^@@@++..........+=''>>>>;",
-";;;>''''=@++++......+.+&>>''>>;;",
-"=;;>>'>;>=#.++++.....#&;>>'''''=",
-"%!;;>;;===;%#++++++#&;;;;>'''''%",
-"@;;;;;;=&==>;;>;>>>'>>;;>''''''@",
-" &=!;;==&&======>>''>>;>>'''''& ",
-" .;;;>;==&===&=;;>''';;>'''''>. ",
-"  @;>>>;=&&==&=;>'>'>>>''''''@  ",
-"   .&>>==;==&=&=>'>>>>;>'''{.   ",
-"     @%======&&=;>'>'>>>!%@     "};
--- a/DoConfig/fltk/test/pixmaps/porsche.xpm
+++ /dev/null
@@ -1,71 +1,0 @@
-/* XPM */
-static const char * porsche_xpm[] = {
-"64 64 4 1",
-" 	c #background",
-".	c #000000000000",
-"X	c #ffd100",
-"o	c #FFFF00000000",
-"                                                                ",
-"                   ..........................                   ",
-"              .....................................             ",
-"        ............XXXXXXXXXXXXXXXXXXXXXXXX............        ",
-"        ......XXXXXXX...XX...XXXXXXXX...XXXXXXXXXX......        ",
-"        ..XXXXXXXXXX..X..XX..XXXX.XXXX..XXXXXXXXXXXXXX..        ",
-"        ..XXXXXXXXXX..X..XX..XXX..XXXX..X...XXXXXXXXXX..        ",
-"        ..XXXXXXXXXX..XXXXX..XX.....XX..XX.XXXXXXXXXXX..        ",
-"        ..XXXXXXXXX.....XXX..XXX..XXXX..X.XXXXXXXXXXXX..        ",
-"        ..XXXXXXXXXX..XXXXX..XXX..XXXX....XXXXXXXXXXXX..        ",
-"        ..XXXXXXXXXX..XXXXX..XXX..XXXX..X..XXXXXXXXXXX..        ",
-"        ..XXXXXXXXXX..XXXXX..XXX..X.XX..XX..XXXXXXXXXX..        ",
-"        ..XXXXXXXXX....XXX....XXX..XX....XX..XXXXXXXXX..        ",
-"        ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..        ",
-"        ..XXXXXXXXX..........................XXXXXXXXX..        ",
-"        ..XXX.......XXXXXXXXXXX...................XXXX..        ",
-"        ......XX.XXX.XXX..XXXXX.........................        ",
-"        ..XXXXX.XXX.XXX.XXXX.XX.........................        ",
-"        ..XXXX.XXX.XX.......XXX.........................        ",
-"        ..XXXX.......XXXXXX..XX..ooooooooooooooooooooo..        ",
-"        ..X.....XXXXXXXXXXXXXXX..ooooooooooooooooooooo..        ",
-"        ..X...XXXXXXXXXXXXXXXXX..ooooooooooooooooooooo..        ",
-"        ..X..XXXXXXX.XX.XXXXXXX..ooooooooooooooooooooo..        ",
-"        ..XXXXX.XXX.XX.XXXXXXXX..ooooooooooooooooooooo..        ",
-"        ..XXXX.XXX.XX.XX................................        ",
-"        ..XXXX.X.........X....X.X.X.....................        ",
-"        ..XXXX...XXXXXXX.X..X...X.X.X.X.................        ",
-"        ..X....XXXXXXXXXX.X...X.X.X.....................        ",
-"        ..X...XXXXXXXXXX.XXXXXXXXXXXXXX.................        ",
-"        ..X..XXXXXX.XX.X.XXX...XXXXXXXX.................        ",
-"        ..XXXXX.XX.XX.XX.XX.....XXXXXXX.oooooooooooooo..        ",
-"        ..XXXX.XX.XX.XX..XX.X...XXXXX.X.oooooooooooooo..        ",
-"        ..XXXX.X.......X.XXXX...XXXX..X.oooooooooooooo..        ",
-"        ..X......XXXXXX..XXXX...XXXX..X.oooooooooooooo..        ",
-"        ..X...XXXXXXXXXX.XXX.....XXX.XX.oooooooooooooo..        ",
-"        ..X..XXXXXXXXXXX.X...........XX.oooooooooooooo..        ",
-"        .................X.X.........XX.................        ",
-"        .................X.X.XXXX....XX.XXXXXXXXXXXXXX..        ",
-"        .................XXX.XXXXX.X.XX.XXX.XX.XXXXXXX..        ",
-"         ................XXXX.XXX..X..X.XX.XX.XXX.XXX..         ",
-"         ................XXXXXXXX.XX.XX.X.XX.XXX.XXXX..         ",
-"         .................XXXXXX.XX.XX.X..........XXX..         ",
-"          ..oooooooooooooo.XXXXXXXXXX....XXXXXXXX..X..          ",
-"          ..ooooooooooooooo.XXXXXXXX....XXXXXXXXXXXX..          ",
-"           ..ooooooooooooooo........XXXXXXX.XX.XXXX..           ",
-"           ..oooooooooooooooooo..XXXXX.XXX.XX.XX.XX..           ",
-"            ..ooooooooooooooooo..XXXX.XXX.XX.XX.XX..            ",
-"            ..ooooooooooooooooo..XXX.XX........XXX..            ",
-"             ....................XXX....XXXXXX..X..             ",
-"              ...................XX...XXXXXXXXXXX.              ",
-"              ...................X...XXXXXXXXXXX..              ",
-"               ..................X..XXXX.XXXXXX..               ",
-"                .................XXX.XX.XX.XXX..                ",
-"                 ................XX.XX.XX.XXX..                 ",
-"                  ..ooooooooooo..XX.......XX..                  ",
-"                   ..oooooooooo..X...XXXX.X..                   ",
-"                    ..ooooooooo..X..XXXXXX..                    ",
-"                     ...ooooooo..X..XXXX...                     ",
-"                      ....ooooo..XXXXX....                      ",
-"                        ....ooo..XXX....                        ",
-"                          ....o..X....                          ",
-"                            ........                            ",
-"                              ....                              ",
-"                                                                "};
--- a/DoConfig/fltk/test/pixmaps/porsche1.xpm
+++ /dev/null
@@ -1,76 +1,0 @@
-/* XPM */
-static const char * porsche[] = {
-/* width height ncolors chars_per_pixel */
-"64 64 -4 1 ",
-/* colormap */
-"\
- \x50\x50\x80\
-.\xff\xff\0\
-r\xff\x00\0\
-b\0\0\0",
-/* pixels */
-"        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb............................................bb        ",
-"        bb.......................bbbbbbb.bb...........bb        ",
-"        bb.......................bbbbbbb.bb...........bb        ",
-"        bb......bbb...bb..bb.....bb......bb...........bb        ",
-"        bb......bbb...bb..bb.....bb......bb...........bb        ",
-"        bb.......bb.......bbbb...bbbbb...bb...........bb        ",
-"        bb.......bb...bb..bbbbb..bbbbb...bb...........bb        ",
-"        bb.......bb...bb..bb.bb..bb......bb...........bb        ",
-"        bb......bbbb..bb..bbbbb..bb......bbbbbb.......bb        ",
-"        bb......bbbb..bb..bbbb...bb......bbbbbb.......bb        ",
-"        bb............................................bb        ",
-"        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb.....................bbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb......b...b...bb.....bbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb.....b...b...b....b..bbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb....bb..bb.bbbbbbb...bbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb...bbbbbbbb......bb..bbrrrrrrrrrrrrrrrrrrrrrbb        ",
-"        bb..bbbb...............bbrrrrrrrrrrrrrrrrrrrrrbb        ",
-"        bb.bbb.................bbrrrrrrrrrrrrrrrrrrrrrbb        ",
-"        bb..........b..b.......bbrrrrrrrrrrrrrrrrrrrrrbb        ",
-"        bb.....b...b..b........bbrrrrrrrrrrrrrrrrrrrrrbb        ",
-"        bb....b...b..b..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb....b.bbbbbbbbb..............bbbbbbbbbbbbbbbbb        ",
-"        bb...bbbb.......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        ",
-"        bb..bbb.........b..............bbbbbbbbbbbbbbbbb        ",
-"        bb.bbb..........b...bbb........bbbbbbbbbbbbbbbbb        ",
-"        bb.........b..b.b..bbbbb.......bbbbbbbbbbbbbbbbb        ",
-"        bb.....b..b..b..b..b.bbb.....b.brrrrrrrrrrrrrrbb        ",
-"        bb....b..b..b..bb....bbb....bb.brrrrrrrrrrrrrrbb        ",
-"        bb...bb.bbbbbbb.b....bbb....bb.brrrrrrrrrrrrrrbb        ",
-"        bb..bbbbb......bb...bbbbb...b..brrrrrrrrrrrrrrbb        ",
-"        bb.bbb..........b.bbbbbbbbbbb..brrrrrrrrrrrrrrbb        ",
-"        bb..............b.b.bbbbbbbbb..brrrrrrrrrrrrrrbb        ",
-"        bbbbbbbbbbbbbbbbb.b.b....bbbb..bbbbbbbbbbbbbbbbb        ",
-"        bbbbbbbbbbbbbbbbb...b.....b.b..b..............bb        ",
-"        bbbbbbbbbbbbbbbbb........bb.bb.b...b..b.......bb        ",
-"         bbbbbbbbbbbbbbbb........b..b..b..b..b...b...bb         ",
-"         bbbbbbbbbbbbbbbb.......b..b...b.b..b...b....bb         ",
-"         bbbbbbbbbbbbbbbbb............b.bbbbbbbbbb...bb         ",
-"          bbrrrrrrrrrrrrrrb..........bbbb........bb.bb          ",
-"          bbrrrrrrrrrrrrrrrb........bbbb............bb          ",
-"           bbrrrrrrrrrrrrrrrbbbbbbbb.......b..b....bb           ",
-"           bbrrrrrrrrrrrrrrrrrrbb.....b...b..b..b..bb           ",
-"            bbrrrrrrrrrrrrrrrrrbb....b...b..b..b..bb            ",
-"            bbrrrrrrrrrrrrrrrrrbb...bb.bbbbbbbb...bb            ",
-"             bbbbbbbbbbbbbbbbbbbb...bbbb......bb.bb             ",
-"              bbbbbbbbbbbbbbbbbbb..bbb...........b              ",
-"              bbbbbbbbbbbbbbbbbbb.bbb...........bb              ",
-"               bbbbbbbbbbbbbbbbbb..............bb               ",
-"                bbbbbbbbbbbbbbbbb...b.b.b.....bb                ",
-"                 bbbbbbbbbbbbbbbb..b.b.b..b..bb                 ",
-"                  bbrrrrrrrrrrrbb..bbbbbbb..bb                  ",
-"                   bbrrrrrrrrrrbb.bbb....b.bb                   ",
-"                    bbrrrrrrrrrbb.bb......bb                    ",
-"                     bbbrrrrrrrbb.......bbb                     ",
-"                      bbbbrrrrrbb.....bbbb                      ",
-"                        bbbbrrrbb...bbbb                        ",
-"                          bbbbrbb.bbbb                          ",
-"                            bbbbbbbb                            ",
-"                              bbbb                              ",
-"                               bb                               ",
-"                                                                "
-} ;
--- a/DoConfig/fltk/test/pixmaps/red.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * red_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #2D0001",
-"+	c #440000",
-"@	c #850000",
-"#	c #A20000",
-"$	c #AC0001",
-"%	c #B70000",
-"&	c #C30000",
-"*	c #D10000",
-"=	c #AB1111",
-"-	c #BF0C10",
-";	c #DD0000",
-">	c #CD191B",
-",	c #BB2222",
-"'	c #B53A39",
-")	c #CF2F30",
-"!	c #C33738",
-"~	c #C34746",
-"{	c #E14548",
-"]	c #D44D4C",
-"^	c #CC5554",
-"/	c #E25858",
-"(	c #DB6161",
-"_	c #D16867",
-":	c #E96A6B",
-"<	c #E27373",
-"[	c #DA7D7E",
-"}	c #EE8283",
-"|	c #DD8D8C",
-"1	c #EF9191",
-"2	c #F09D9B",
-"3	c #E9A3A2",
-"     +@#&%%%%%&&&&%%%&&&#@+     ",
-"   .#*):1333333333333332(!$#.   ",
-"  +&><22223333332333333333[,%+  ",
-" .&)11111111122111233333333|)*. ",
-" #>}}1}}}}1}}|111}}}||[||||||># ",
-"+%/<<<}}:}<}}[<[}}}}}}[[[|||[(&+",
-"@)_<<<:<::<<_<<<<:::<<<[[[[[[[)@",
-"#)(((/(:::(_____<:::::(____[__!#",
-"%{^](//^^(^^^_^^((///:/(^^_^__^&",
-"%~]]]]]~~~^~^~^^~///{/]^^^~^_^^%",
-"$!!!!!]'~'~~~~~~~{{{{{{{~]~~'^^#",
-"%!){)!''''''!!!!!!!){){!!'~''''#",
-"%,),,,!!,',!,)))))))))))!!!''''#",
-"&>-,,====,=,,>>>>>>)>>>)),,,@''#",
-"%>--=====-->>>>>>>>>>)->>-),,==%",
-"&&&-$==#--&**&&&&&&&---%-------$",
-"&**&&%$%&&*&&&&-&&>&%%-%&&%$$--%",
-"%&*&&%%&&**&&-%%%&*&&%%&%&&%%%$$",
-"%%&&&%&&***&%$%%%%&&%%%&&&&%%$$$",
-"$%%%&&**;**&%$$$$$%%%%&***&&%$##",
-"$%%&&**;****&$$###$%%$%&&***&%%$",
-"%%&&**;;;;**%%#####$$%%%**&*&%$%",
-"%&&&*;*;*;*&%%$####$#$%%&***&&%%",
-"&%%&******&&%%%%$###$%%&&&&*&&&&",
-"#&%&&&&&&&&&&&&&&%%%%&%&&&***&&$",
-"@%%$&&$$$$%%&&&&&&&&%%&%%****;*@",
-"+%%%%&$###$%&%&&&&&**%%&%&*;*;*+",
-" @%$&%%###$$$%$%%&**&&&%**;**&# ",
-" .&%%&&$#######%&&***%&&**;**&. ",
-"  +&*&&%$##$##$%&&**&&%&*;*;*+  ",
-"   .#&&%%%#$###%&&&&&&&&*;*#.   ",
-"     +@#$$%%###$&&*&&&&&#@+     "};
--- a/DoConfig/fltk/test/pixmaps/red_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * red_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #340001",
-"+	c #3C0100",
-"@	c #410003",
-"#	c #440000",
-"$	c #760000",
-"%	c #4E1414",
-"&	c #A60000",
-"*	c #B70000",
-"=	c #5F2928",
-"-	c #C30000",
-";	c #CE0000",
-">	c #D90000",
-",	c #BE1315",
-"'	c #653A3B",
-")	c #733C3C",
-"!	c #B92223",
-"~	c #D31A1D",
-"{	c #744A49",
-"]	c #AE3232",
-"^	c #CD3B3B",
-"/	c #875B5B",
-"(	c #C04848",
-"_	c #9A6E6E",
-":	c #D35A5A",
-"<	c #C57170",
-"[	c #DF6D6D",
-"}	c #D97D7D",
-"|	c #ED8181",
-"1	c #DD8D8C",
-"2	c #EF9191",
-"3	c #EAA2A1",
-"     #$&-*****----***---&$#     ",
-"   .&;~[2333333333333331[^*&.   ",
-"  @*~|23233333333333333333}!*#  ",
-" .-~222222222332223333333331^-. ",
-" &,|||||||22||222|2|11}111112~& ",
-"@-:|||||||[||}}|||||||}}1<11}:-#",
-"$~[[[[[[[[[}_______<}|[}}<<}<},$",
-"&^:[::[::[</_/______/<<[[[}<<|(&",
-"-(:::^:^[{/////////////<:::::[(-",
-",^^^:^:({{{{{{{{{{{//{/{(:::(::*",
-"&^^^^^:){''{{{{{{{)))))/)((((((&",
-"*^^^^^]'''''''''')'){)))'(]((](&",
-"*,^~!!==''.'===='=)=)='=')!]]]]&",
-"-~,,!!%%.==%=%==%=%=====%=^!]]]&",
-"*~,,&!.%%.%%%%%%%%%%%%%%%%,,,,!*",
-"---~&&...%+%@%@#%#%#%%%%%%,,&,,&",
-"-;;;**%++%+###@@@@#@@@@###***&**",
-"*-;--*.#####@+@#@#@#@@++#@*****&",
-"**-*--######@+.@@@@#++@##@-**&*&",
-"&**-*-$####++.++.+++@+###$--**&&",
-"***-;;&######+.+...++++##&;;-**&",
-"&*--;>>$####@+....+.+.++$;;;-*&*",
-"**--;>>;####@@+.+...@..#&;;----*",
-"***-;;;>*##+++@@.+++.@@&--;;;-*-",
-"&-*-;;-*;*$+#@##+@.@+$&*--;;;;-&",
-"$*******&*&&$###@@+$&****-;>>>>$",
-"#*****&&&&&&***------*-*-;;>>>;#",
-" &*****&&&&*&***---;;-*-;;>;;;& ",
-" .*-*-*&&&&&&&&&-;;;--*-;>>>;-. ",
-"  #*;--*&&&&&&&*--;;---->;>>;#  ",
-"   .&--*&*&&&&&*-;------->>&.   ",
-"     #$&***&&&&&--;-----*$@     "};
--- a/DoConfig/fltk/test/pixmaps/srs.xbm
+++ /dev/null
@@ -1,67 +1,0 @@
-#define sorceress_width 75
-#define sorceress_height 75
-static unsigned char sorceress_bits[] =
-{
-  0xfc, 0x7e, 0x40, 0x20, 0x90, 0x00, 0x07, 0x80, 0x23, 0x00, 0x00, 0xc6,
-  0xc1, 0x41, 0x98, 0xb8, 0x01, 0x07, 0x66, 0x00, 0x15, 0x9f, 0x03, 0x47,
-  0x8c, 0xc6, 0xdc, 0x7b, 0xcc, 0x00, 0xb0, 0x71, 0x0e, 0x4d, 0x06, 0x66,
-  0x73, 0x8e, 0x8f, 0x01, 0x18, 0xc4, 0x39, 0x4b, 0x02, 0x23, 0x0c, 0x04,
-  0x1e, 0x03, 0x0c, 0x08, 0xc7, 0xef, 0x08, 0x30, 0x06, 0x07, 0x1c, 0x02,
-  0x06, 0x30, 0x18, 0xae, 0xc8, 0x98, 0x3f, 0x78, 0x20, 0x06, 0x02, 0x20,
-  0x60, 0xa0, 0xc4, 0x1d, 0xc0, 0xff, 0x41, 0x04, 0xfa, 0x63, 0x80, 0xa1,
-  0xa4, 0x3d, 0x00, 0x84, 0xbf, 0x04, 0x0f, 0x06, 0xfc, 0xa1, 0x34, 0x6b,
-  0x01, 0x1c, 0xc9, 0x05, 0x06, 0xc7, 0x06, 0xbe, 0x11, 0x1e, 0x43, 0x30,
-  0x91, 0x05, 0xc3, 0x61, 0x02, 0x30, 0x1b, 0x30, 0xcc, 0x20, 0x11, 0x00,
-  0xc1, 0x3c, 0x03, 0x20, 0x0a, 0x00, 0xe8, 0x60, 0x21, 0x00, 0x61, 0x1b,
-  0xc1, 0x63, 0x08, 0xf0, 0xc6, 0xc7, 0x21, 0x03, 0xf8, 0x08, 0xe1, 0xcf,
-  0x0a, 0xfc, 0x4d, 0x99, 0x43, 0x07, 0x3c, 0x0c, 0xf1, 0x9f, 0x0b, 0xfc,
-  0x5b, 0x81, 0x47, 0x02, 0x16, 0x04, 0x31, 0x1c, 0x0b, 0x1f, 0x17, 0x89,
-  0x4d, 0x06, 0x1a, 0x04, 0x31, 0x38, 0x02, 0x07, 0x56, 0x89, 0x49, 0x04,
-  0x0b, 0x04, 0xb1, 0x72, 0x82, 0xa1, 0x54, 0x9a, 0x49, 0x04, 0x1d, 0x66,
-  0x50, 0xe7, 0xc2, 0xf0, 0x54, 0x9a, 0x58, 0x04, 0x0d, 0x62, 0xc1, 0x1f,
-  0x44, 0xfc, 0x51, 0x90, 0x90, 0x04, 0x86, 0x63, 0xe0, 0x74, 0x04, 0xef,
-  0x31, 0x1a, 0x91, 0x00, 0x02, 0xe2, 0xc1, 0xfd, 0x84, 0xf9, 0x30, 0x0a,
-  0x91, 0x00, 0x82, 0xa9, 0xc0, 0xb9, 0x84, 0xf9, 0x31, 0x16, 0x81, 0x00,
-  0x42, 0xa9, 0xdb, 0x7f, 0x0c, 0xff, 0x1c, 0x16, 0x11, 0x00, 0x02, 0x28,
-  0x0b, 0x07, 0x08, 0x60, 0x1c, 0x02, 0x91, 0x00, 0x46, 0x29, 0x0e, 0x00,
-  0x00, 0x00, 0x10, 0x16, 0x11, 0x02, 0x06, 0x29, 0x04, 0x00, 0x00, 0x00,
-  0x10, 0x16, 0x91, 0x06, 0xa6, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x24,
-  0x91, 0x04, 0x86, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x18, 0x27, 0x93, 0x04,
-  0x96, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x04, 0x02, 0x91, 0x04, 0x86, 0x4a,
-  0x0c, 0x00, 0x00, 0x00, 0x1e, 0x23, 0x93, 0x04, 0x56, 0x88, 0x08, 0x00,
-  0x00, 0x00, 0x90, 0x21, 0x93, 0x04, 0x52, 0x0a, 0x09, 0x80, 0x01, 0x00,
-  0xd0, 0x21, 0x95, 0x04, 0x57, 0x0a, 0x0f, 0x80, 0x27, 0x00, 0xd8, 0x20,
-  0x9d, 0x04, 0x5d, 0x08, 0x1c, 0x80, 0x67, 0x00, 0xe4, 0x01, 0x85, 0x04,
-  0x79, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0xf4, 0x11, 0x85, 0x06, 0x39, 0x08,
-  0x7d, 0x00, 0x00, 0x18, 0xb7, 0x10, 0x81, 0x03, 0x29, 0x12, 0xcb, 0x00,
-  0x7e, 0x30, 0x28, 0x00, 0x85, 0x03, 0x29, 0x10, 0xbe, 0x81, 0xff, 0x27,
-  0x0c, 0x10, 0x85, 0x03, 0x29, 0x32, 0xfa, 0xc1, 0xff, 0x27, 0x94, 0x11,
-  0x85, 0x03, 0x28, 0x20, 0x6c, 0xe1, 0xff, 0x07, 0x0c, 0x01, 0x85, 0x01,
-  0x28, 0x62, 0x5c, 0xe3, 0x8f, 0x03, 0x4e, 0x91, 0x80, 0x05, 0x39, 0x40,
-  0xf4, 0xc2, 0xff, 0x00, 0x9f, 0x91, 0x84, 0x05, 0x31, 0xc6, 0xe8, 0x07,
-  0x7f, 0x80, 0xcd, 0x00, 0xc4, 0x04, 0x31, 0x06, 0xc9, 0x0e, 0x00, 0xc0,
-  0x48, 0x88, 0xe0, 0x04, 0x79, 0x04, 0xdb, 0x12, 0x00, 0x30, 0x0c, 0xc8,
-  0xe4, 0x04, 0x6d, 0x06, 0xb6, 0x23, 0x00, 0x18, 0x1c, 0xc0, 0x84, 0x04,
-  0x25, 0x0c, 0xff, 0xc2, 0x00, 0x4e, 0x06, 0xb0, 0x80, 0x04, 0x3f, 0x8a,
-  0xb3, 0x83, 0xff, 0xc3, 0x03, 0x91, 0x84, 0x04, 0x2e, 0xd8, 0x0f, 0x3f,
-  0x00, 0x00, 0x5f, 0x83, 0x84, 0x04, 0x2a, 0x70, 0xfd, 0x7f, 0x00, 0x00,
-  0xc8, 0xc0, 0x84, 0x04, 0x4b, 0xe2, 0x2f, 0x01, 0x00, 0x08, 0x58, 0x60,
-  0x80, 0x04, 0x5b, 0x82, 0xff, 0x01, 0x00, 0x08, 0xd0, 0xa0, 0x84, 0x04,
-  0x72, 0x80, 0xe5, 0x00, 0x00, 0x08, 0xd2, 0x20, 0x44, 0x04, 0xca, 0x02,
-  0xff, 0x00, 0x00, 0x08, 0xde, 0xa0, 0x44, 0x04, 0x82, 0x02, 0x6d, 0x00,
-  0x00, 0x08, 0xf6, 0xb0, 0x40, 0x02, 0x82, 0x07, 0x3f, 0x00, 0x00, 0x08,
-  0x44, 0x58, 0x44, 0x02, 0x93, 0x3f, 0x1f, 0x00, 0x00, 0x30, 0x88, 0x4f,
-  0x44, 0x03, 0x83, 0x23, 0x3e, 0x00, 0x00, 0x00, 0x18, 0x60, 0xe0, 0x07,
-  0xe3, 0x0f, 0xfe, 0x00, 0x00, 0x00, 0x70, 0x70, 0xe4, 0x07, 0xc7, 0x1b,
-  0xfe, 0x01, 0x00, 0x00, 0xe0, 0x3c, 0xe4, 0x07, 0xc7, 0xe3, 0xfe, 0x1f,
-  0x00, 0x00, 0xff, 0x1f, 0xfc, 0x07, 0xc7, 0x03, 0xf8, 0x33, 0x00, 0xc0,
-  0xf0, 0x07, 0xff, 0x07, 0x87, 0x02, 0xfc, 0x43, 0x00, 0x60, 0xf0, 0xff,
-  0xff, 0x07, 0x8f, 0x06, 0xbe, 0x87, 0x00, 0x30, 0xf8, 0xff, 0xff, 0x07,
-  0x8f, 0x14, 0x9c, 0x8f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x9f, 0x8d,
-  0x8a, 0x0f, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xbf, 0x0b, 0x80, 0x1f,
-  0x00, 0x00, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x3a, 0x80, 0x3f, 0x00, 0x80,
-  0xff, 0xff, 0xff, 0x07, 0xff, 0x20, 0xc0, 0x3f, 0x00, 0x80, 0xff, 0xff,
-  0xff, 0x07, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x07,
-  0xff, 0x0f, 0xf8, 0xff, 0x40, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff,
-  0xff, 0xff, 0x40, 0xf0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff,
-  0x41, 0xf0, 0xff, 0xff, 0xff, 0x07};
--- a/DoConfig/fltk/test/pixmaps/sudoku.xbm
+++ /dev/null
@@ -1,14 +1,0 @@
-#define sudoku_width 32
-#define sudoku_height 32
-static unsigned char sudoku_bits[] = {
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x0c, 0x30, 0xc0,
-   0x63, 0xcc, 0x33, 0xcf, 0x63, 0x4c, 0x33, 0xcc, 0x63, 0x4c, 0x33, 0xcc,
-   0x63, 0xcc, 0x33, 0xcc, 0x63, 0x0c, 0x33, 0xcc, 0x63, 0x0c, 0x33, 0xcc,
-   0x03, 0x0c, 0x30, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-   0x03, 0x0c, 0x30, 0xc0, 0xd3, 0xcc, 0x33, 0xcf, 0xd3, 0xcc, 0x30, 0xcc,
-   0xd3, 0xcc, 0x33, 0xce, 0xf3, 0xcc, 0x32, 0xce, 0xc3, 0xcc, 0x32, 0xcc,
-   0xc3, 0xcc, 0x33, 0xcf, 0x03, 0x0c, 0x30, 0xc0, 0xff, 0xff, 0xff, 0xff,
-   0xff, 0xff, 0xff, 0xff, 0x03, 0x0c, 0x30, 0xc0, 0xf3, 0xcc, 0x33, 0xcf,
-   0x83, 0x4c, 0x33, 0xc1, 0xf3, 0xcc, 0x33, 0xcf, 0x33, 0x4c, 0x33, 0xcc,
-   0x33, 0x4c, 0x33, 0xcc, 0xf3, 0xcc, 0x33, 0xcf, 0x03, 0x0c, 0x30, 0xc0,
-   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
--- a/DoConfig/fltk/test/pixmaps/tile.xpm
+++ /dev/null
@@ -1,120 +1,0 @@
-/* XPM */
-static const char * tile_xpm[] = {
-"100 100 17 1",
-" 	c None",
-".	c #DCDCDC",
-"+	c #D9D9D9",
-"@	c #E4E4E4",
-"#	c #DFDFDF",
-"$	c #CECECE",
-"%	c #D2D2D2",
-"&	c #C8C8C8",
-"*	c #CACACA",
-"=	c #C4C4C4",
-"-	c #BEBEBE",
-";	c #D4D4D4",
-">	c #E8E8E8",
-",	c #D6D6D6",
-"'	c #C6C6C6",
-")	c #B2B2B2",
-"!	c #E2E2E2",
-".+@.##$%%$$$&*=..%$*%-;*>,%$%#>,$,%%*%*.#*%++$;+,,.&&=-%%+.$,#,=;%#,@.+,%>,+=-++@@#%$.++#,--;.=*+,,>",
-"%%.&$@.#,*%*&'%%&$;,*%%,&%;%,#..;$$%';+.+,++.%.;+@@@$'.;'..;@.+$%)&!!,.!>+%@%-*%@>#.+&&+.+$%,++$$#++",
-",.$&$+#+.%++$%,=$;$&'+.%%&-+++;%;;$%+%+;.#.+@!!..>#+$%;,$.+@,+.%-%%-%>#+.#+$%...%,!>>;$$$.%$+#+*++&*",
-",$;;;..-*!;*.+%=*%;*%%=&$+$++,-%;+++++++++++#@@@>@#,++;$%;++#.+++%&*=#.+;%>@+,...++$>@#&%*%;.$=$##=;",
-"%#$,+$$%,.++.%%,'*%;,$=-$+@,%*$+%.#+%,.++%;.,#@@@>#+*,$%;,++..@#.,+@+.#.+%#+!.,%#>%,,+>#.%$!#%=%$$#+",
-"+*'%$)&,+,+,+*%,,$,+,*-&++$%%*%#@#%$;+.%,!.+;+!@+>..,%$,$;..#,@.$;%.##.#!#;;++#.+%!.,%,.@##>%,>%$,+,",
-",,$$$%%%';+$%,$!,$,;;,..,&)%%+#!+..,++%%++#+#@+,##,;,%.%.+++.#;%+.,+#.,#+;#%.@,+#.+,#!,+.>#..,,++++.",
-";=-;##%=$%,.$%%+;%%%$+.%&%%%,.,%++..+++;%;;.+#.+%..%;+,#+$%.;,....+.++.+,$$.#>.$+@&+#;.@@.%!@.#+@!,%",
-"-$$&+%.,#;;&$$,*$+%%.#*='$,,+.;,+,##...$%++%.,++%,..+;%,%,,%+,.,##.+%%+@,'%#.++,,,%++.>++.>#+#>>.%,%",
-",!.;$$$#.;%'-'&*+++.$=*%;,++;;;.+;++,+++@@%++++..$..+%+&$.+*;,++.+;+*%+#+++...+;.%+##@.%@>#.!>#&%+=$",
-"...#%%,,;=-%$=%%@+.;==;=+#+%+*$#.%+%+@.++!,%,;;%..,,*,+'+,;;#.$%#%+%,.%&+#.$+@!%;,+##++#@!!#@@&%@..+",
-"+$=%%$#,$--$=$%+#,=%%,%;$;%.+.,,+!++#..++%;.%%$..,#;.+$#%$$#;.%;+..+,.%,%+,..@++..*+#,+.#>@#.+++!.+.",
-"..+'=;%$,+,%$*&%&=-;+#+%==..;,#,#.###@+$%,,$$;+@#.,;.*;.+&.#%*.>.,.#$'+.%%,,%##++;+,#*.@>#%%#@+%$@@.",
-"..;+.$%=$,##,,'=&$$%%++$$%,,;$;.,##.+#;++;#+;+.>..#$$%,%;,%+=$+#.!...+%,%++%;&+#$%.%#@,;+#.,#,+.+%;,",
-"%;+@++*$%%$+@,*&$$*&;%%.#,.$$,++#@@#.,+%.;%#+!#.,!#..'%;%+;%*%;+,!@..#,;.%%,+&,*$.,%@>!+;,###&;;#.;%",
-"$$;+.,.;%=$$$,+%+$,&$%,,.+=$%.,;##!#.#$%.+%,+.@.,#%*#%$$;+*.+,$%%@.+@..+,$%++$&%#+,.#,#@#.&$$++,+.,,",
-",%+.+$.;&;%+,$,+,+%%**$+*$+,%+%,$%.%;@+%##;;;;#+##%*$%'*&++.;.+;.#+;#>++,+*%%%++,,.#;=@@.+,;$&;%;%$-",
-"%'.+,'*;;;#+;&$#$$,%*,$=%,+,,%%$%%%+%!@++#;++&+.,.;,&$-%,;,++%..#+;++$+#,++,=%%+++!#++..+;;,%,%=&+..",
-"%,;+%&$$+#%%++%;$&&%%%'%,,+++%,%;*.+%%>..+,+##+%+;=.&&,%$#.%;%!@,+,%,,+++.+.*%%;$.%+#!+&,;,;+,%+$=,$",
-"%#.&%,-;+$+.,++$*$%&=$,,;#,.,&;&.,+%++;%.+%,+!#.;%%&*,,%.$,;&#!.%%%%++,.%,;+,%.#.$;++;%;++#,$=.++,$=",
-";%;%$,$%=%#.@,,$*%*=%;%%+%$.%&'+%$#.=,++&;$>#*..+,%+$+;,,#.;.@,%.+,+;,#++,$$+++.++,+#%%$%##.,++*$+;.",
-"$+%$;.,*$#+%.!..,%=*$&$;;%$%$+,$$%%%'++,+,.@#+.,$.,!;#;$,#,#++,%.%.,.+;.$%.,++%%$+,#%,+,$,.%.%$+.$,;",
-"-%@#..%$+;%+;,%.+,$$'$*+%%;,%$$%%+;;,&'%#.##...$#.!$'#>+&,+#,+$*+.;+#,%%;,.!+,+$$%+.+++*+..+,+%,#+.=",
-";%;###+@!;+$$;,$.+.%$$%.%.$*%&&,.,,;+;$&$+.+..$+#+$%.!.%$%%+#*;;&,#++%,,+,;#++$$%++,%,%%++!.+@.;*#,*",
-"*%%+@%+#,...,$;,'$++,;#&,,&'=&'*+++.%$-=$$%!..#,%%++>+=#%;+,++,++.%..+$;.+,+$%%+,.;&,#+,*.++##@;%,%-",
-"%$%#,.++$+#+%%+$'%&.,;#+$&$&&%-;,$.!+=*&=*.#;#.,%,@@$;#.*%..,+,#@..+,$%@,,.&%$;,%%$%,+%+%+&,@.##.+**",
-"%*..+%.;+#,+.$$,;*$$%+;+%%$,%'%;%*%.;%+$=,%*$++,+>+'..,$%;!%$##@+#..$%.%;,,%$%%;==..$%%,+,++$;@.&+>#",
-"%@@%'+$+.%.#.=&,%%%$';%&%$+.%&.%**+=$+#%.%%';%*$>.&=..%$$*...+,.;.#%.#+.@$%%.,$-&,,,%;*#%;#$,+;#+#@.",
-"!@.;=,.;$@.;+.$''%%=.;=;+%*,..;=&%=$+,&,+%,+;%$;,.&!.+%$+#,+,#.;.,%,.,.>!$$;;%;%,,$*%;%+#;;+#%#>!+,.",
-"##+-..+,+...+%+;$&&,*&,%,;%%%*+,%*,%%%%=-.+;##%,$$,!+!+%!,%%+#,%+;+.+;.%%;$$=+%+;,;'$,;++++..>>#%%##",
-"#+%@@;++.++%,;+.%*%-$%%;%.@%*$%.,+;%++'%&;&.>%@++%$%.,%+%$###.+*+#.,%++'#%$%&$%*%$;%+.+,##++!.+#!!.%",
-".-%##!@.%%$%;..;,+%$&%&%++.;+,+%%+;%;.++#$$@;#$.#%.=*$#,*+%$%+..+;;%++;;+!;$'%+'=%;;.##+.++.#+#.#.,.",
-"#@!#+#@.%+%$,++,,;;,+%*&%;+%%$=#+&$+**+#,+@..#.'$,#;,*,+!%%,%.#;%$%$&;,%%,.$%.%-$;;!@$%%..+.##!+,$.$",
-"..@>#@++;+;%%++..%;+!+%$;.;+'-%$+%,,=%.$+!+#@+%$>*-,%+..$=%%#.-=*%++$;%&%%&$.;%'%%.+%;.&,+#!!#+*;$*&",
-">@%+.;%%#+$+*$++$;*.+%%%+,+%*&$&,+;',@=%+$#.%*..&''&.+#.;$&$;%&&.$=&$,$%=*+.&&,.+.+;,.;;%.#.++,+''&.",
-"!+..$&+%$;.,++%,%%%,#,+.%+%$&,$*.+&.+$+%$.@&&+#%-=,,#;%%.#.$&%&+.%=','*$++.%%%.+.+%;++%,,#+,*.;%..@@",
-"$;+%,.&=-;++@..$$,%+!!%%.%$;$;;==%#.$$$$##;++#+$=$...;%*+%+.,%%$&$*%$==,#$&$$+,++,%;%++;%+%-$++.+!@%",
-".%;++.-*$%%;+.+$+;..++...,;*+%;%%.!$;+,++%+.+%;.;,,.;+%$,&&.#%&'-&%,=-,+%&&,+#+;;+,.+#+++,'%.;.##+$#",
-"...#%%%*=%+$+,+....+,+.;!++;$$%,.+,+$,++#+#>+.$++.$#++$%%$%+*&+,%=%==+%'=%%+.,.&%%+%#.%%,%%%.;++%%;&",
-"%+.+%+*+&;$%$$.+.!#;#+%=&#@,;$..%#;++=$,.#!#+..+#,,%$&&+;;,,$-+#;+-=$$&$%++,,$$%%+%.%$,*$%%+$%;=$,*%",
-".%;!.$$%#,+=$$%,!#@#;;+.%*=+#.,,.+%+.$+++%%,%.#>.;+$;$&++%'$,++.+%+,,=$'+++,*%,;+*;,%$,%+&*%++&-;%$$",
-"%++;+.%+$$%%$$%,+#.%.@.%;$++*>#+,;.&$@.!#='&@+@@..*$,%%+%$%$%#;+,;#%%$;+,+%$%$%++&%&;;%;$&$*&;;%;,$%",
-"%+=$#+,%&''++,.+$#.!+%%+;*%.!++*%+.',.%;!;.#.;#@+%%$;..%-%%*,;+,,%$$$.!+'$%%%$;+%%+.+++*+;$%;%,%;,;$",
-"*$$,,;;$$$$++#.$+%.@%;..%+.;#+&,.+*.;..$&,!.;+;..*%;,%%+%*'*&%!.'*$%$$'..++%,;$%%++;&+,%%%$%,,..++&&",
-"'&$,,+*%+%%..+;#.+#$%+.+.,+;%$.%+*$++,.%++#@#$'$.!%%;$-%%+$$-%+$,.+;&)'%;.!#,%%%++,%$%';,$%%.+%,#+&+",
-"'%,%*$%%%,,..;;..,+.+,%+,+,,*,#+&%%#.#.!.;@!%%...%.&=$+&&%,%#%*,;*;*=&'$;+.##,,+.$+,*-'%%+,;.;$'%%,,",
-".+,$--&$,+$&..#+%,%,$!+%++,+.%+%%$+%!#!##+++*$,@!#%-$+'%.$-+%%%&%$-**=&$%%.;%+#.;$%.$;+%,%,;;%;*$%;=",
-",;&===*;%*,=,#+##%).*%>#%+$#,*=.+%$+.$#.$+@%;*%+#..#+=+@#&$-*,..'-*;-$$;$=';,++#@%%$+@+%%%$$,+&&+;$#",
-";'=$+$;;)%=,%+..%+#,,%&$+#,.;$$.,+#;#+,$%##;;;%&+;#$&+.$;%%-&;.;&;-;$$=$*-$,.,;;.#!.,.,$%,,,%&*;%;..",
-"*)=)&%.#'-&,+%%#;;+>.$,+.*%#+!,,&,@;,,,.@=%&';,+.,;+.>.;&%=+*,+&,%;*;%%'-$++%.%,.%%+&$;%%,%.%=.=*%%*",
-".&&=-%%+.$,#,=;%#,@.+,%>,+=-++@@#%$.++#,--;.=*+,,>.+@.##$%%$$$&*=..%$*%-;*>,%$%#>,$,%%*%*.#*%++$;+,,",
-"@@$'.;'..;@.+$%)&!!,.!>+%@%-*%@>#.+&&+.+$%,++$$#++%%.&$@.#,*%*&'%%&$;,*%%,&%;%,#..;$$%';+.+,++.%.;+@",
-"#+$%;,$.+@,+.%-%%-%>#+.#+$%...%,!>>;$$$.%$+#+*++&*,.$&$+#+.%++$%,=$;$&'+.%%&-+++;%;;$%+%+;.#.+@!!..>",
-"#,++;$%;++#.+++%&*=#.+;%>@+,...++$>@#&%*%;.$=$##=;,$;;;..-*!;*.+%=*%;*%%=&$+$++,-%;+++++++++++#@@@>@",
-"#+*,$%;,++..@#.,+@+.#.+%#+!.,%#>%,,+>#.%$!#%=%$$#+%#$,+$$%,.++.%%,'*%;,$=-$+@,%*$+%.#+%,.++%;.,#@@@>",
-"..,%$,$;..#,@.$;%.##.#!#;;++#.+%!.,%,.@##>%,>%$,+,+*'%$)&,+,+,+*%,,$,+,*-&++$%%*%#@#%$;+.%,!.+;+!@+>",
-",;,%.%.+++.#;%+.,+#.,#+;#%.@,+#.+,#!,+.>#..,,++++.,,$$$%%%';+$%,$!,$,;;,..,&)%%+#!+..,++%%++#+#@+,##",
-".%;+,#+$%.;,....+.++.+,$$.#>.$+@&+#;.@@.%!@.#+@!,%;=-;##%=$%,.$%%+;%%%$+.%&%%%,.,%++..+++;%;;.+#.+%.",
-"..+;%,%,,%+,.,##.+%%+@,'%#.++,,,%++.>++.>#+#>>.%,%-$$&+%.,#;;&$$,*$+%%.#*='$,,+.;,+,##...$%++%.,++%,",
-"..+%+&$.+*;,++.+;+*%+#+++...+;.%+##@.%@>#.!>#&%+=$,!.;$$$#.;%'-'&*+++.$=*%;,++;;;.+;++,+++@@%++++..$",
-",,*,+'+,;;#.$%#%+%,.%&+#.$+@!%;,+##++#@!!#@@&%@..+...#%%,,;=-%$=%%@+.;==;=+#+%+*$#.%+%+@.++!,%,;;%..",
-"#;.+$#%$$#;.%;+..+,.%,%+,..@++..*+#,+.#>@#.+++!.+.+$=%%$#,$--$=$%+#,=%%,%;$;%.+.,,+!++#..++%;.%%$..,",
-",;.*;.+&.#%*.>.,.#$'+.%%,,%##++;+,#*.@>#%%#@+%$@@...+'=;%$,+,%$*&%&=-;+#+%==..;,#,#.###@+$%,,$$;+@#.",
-"#$$%,%;,%+=$+#.!...+%,%++%;&+#$%.%#@,;+#.,#,+.+%;,..;+.$%=$,##,,'=&$$%%++$$%,,;$;.,##.+#;++;#+;+.>..",
-"#..'%;%+;%*%;+,!@..#,;.%%,+&,*$.,%@>!+;,###&;;#.;%%;+@++*$%%$+@,*&$$*&;%%.#,.$$,++#@@#.,+%.;%#+!#.,!",
-"%*#%$$;+*.+,$%%@.+@..+,$%++$&%#+,.#,#@#.&$$++,+.,,$$;+.,.;%=$$$,+%+$,&$%,,.+=$%.,;##!#.#$%.+%,+.@.,#",
-"%*$%'*&++.;.+;.#+;#>++,+*%%%++,,.#;=@@.+,;$&;%;%$-,%+.+$.;&;%+,$,+,+%%**$+*$+,%+%,$%.%;@+%##;;;;#+##",
-";,&$-%,;,++%..#+;++$+#,++,=%%+++!#++..+;;,%,%=&+..%'.+,'*;;;#+;&$#$$,%*,$=%,+,,%%$%%%+%!@++#;++&+.,.",
-"=.&&,%$#.%;%!@,+,%,,+++.+.*%%;$.%+#!+&,;,;+,%+$=,$%,;+%&$$+#%%++%;$&&%%%'%,,+++%,%;*.+%%>..+,+##+%+;",
-"%&*,,%.$,;&#!.%%%%++,.%,;+,%.#.$;++;%;++#,$=.++,$=%#.&%,-;+$+.,++$*$%&=$,,;#,.,&;&.,+%++;%.+%,+!#.;%",
-"%+$+;,,#.;.@,%.+,+;,#++,$$+++.++,+#%%$%##.,++*$+;.;%;%$,$%=%#.@,,$*%*=%;%%+%$.%&'+%$#.=,++&;$>#*..+,",
-",!;#;$,#,#++,%.%.,.+;.$%.,++%%$+,#%,+,$,.%.%$+.$,;$+%$;.,*$#+%.!..,%=*$&$;;%$%$+,$$%%%'++,+,.@#+.,$.",
-"!$'#>+&,+#,+$*+.;+#,%%;,.!+,+$$%+.+++*+..+,+%,#+.=-%@#..%$+;%+;,%.+,$$'$*+%%;,%$$%%+;;,&'%#.##...$#.",
-"$%.!.%$%%+#*;;&,#++%,,+,;#++$$%++,%,%%++!.+@.;*#,*;%;###+@!;+$$;,$.+.%$$%.%.$*%&&,.,,;+;$&$+.+..$+#+",
-"++>+=#%;+,++,++.%..+$;.+,+$%%+,.;&,#+,*.++##@;%,%-*%%+@%+#,...,$;,'$++,;#&,,&'=&'*+++.%$-=$$%!..#,%%",
-"@@$;#.*%..,+,#@..+,$%@,,.&%$;,%%$%,+%+%+&,@.##.+**%$%#,.++$+#+%%+$'%&.,;#+$&$&&%-;,$.!+=*&=*.#;#.,%,",
-"+'..,$%;!%$##@+#..$%.%;,,%$%%;==..$%%,+,++$;@.&+>#%*..+%.;+#,+.$$,;*$$%+;+%%$,%'%;%*%.;%+$=,%*$++,+>",
-"&=..%$$*...+,.;.#%.#+.@$%%.,$-&,,,%;*#%;#$,+;#+#@.%@@%'+$+.%.#.=&,%%%$';%&%$+.%&.%**+=$+#%.%%';%*$>.",
-"&!.+%$+#,+,#.;.,%,.,.>!$$;;%;%,,$*%;%+#;;+#%#>!+,.!@.;=,.;$@.;+.$''%%=.;=;+%*,..;=&%=$+,&,+%,+;%$;,.",
-",!+!+%!,%%+#,%+;+.+;.%%;$$=+%+;,;'$,;++++..>>#%%####+-..+,+...+%+;$&&,*&,%,;%%%*+,%*,%%%%=-.+;##%,$$",
-"$%.,%+%$###.+*+#.,%++'#%$%&$%*%$;%+.+,##++!.+#!!.%#+%@@;++.++%,;+.%*%-$%%;%.@%*$%.,+;%++'%&;&.>%@++%",
-".=*$#,*+%$%+..+;;%++;;+!;$'%+'=%;;.##+.++.#+#.#.,..-%##!@.%%$%;..;,+%$&%&%++.;+,+%%+;%;.++#$$@;#$.#%",
-"#;,*,+!%%,%.#;%$%$&;,%%,.$%.%-$;;!@$%%..+.##!+,$.$#@!#+#@.%+%$,++,,;;,+%*&%;+%%$=#+&$+**+#,+@..#.'$,",
-"-,%+..$=%%#.-=*%++$;%&%%&$.;%'%%.+%;.&,+#!!#+*;$*&..@>#@++;+;%%++..%;+!+%$;.;+'-%$+%,,=%.$+!+#@+%$>*",
-"'&.+#.;$&$;%&&.$=&$,$%=*+.&&,.+.+;,.;;%.#.++,+''&.>@%+.;%%#+$+*$++$;*.+%%%+,+%*&$&,+;',@=%+$#.%*..&'",
-",,#;%%.#.$&%&+.%=','*$++.%%%.+.+%;++%,,#+,*.;%..@@!+..$&+%$;.,++%,%%%,#,+.%+%$&,$*.+&.+$+%$.@&&+#%-=",
-"...;%*+%+.,%%$&$*%$==,#$&$$+,++,%;%++;%+%-$++.+!@%$;+%,.&=-;++@..$$,%+!!%%.%$;$;;==%#.$$$$##;++#+$=$",
-",.;+%$,&&.#%&'-&%,=-,+%&&,+#+;;+,.+#+++,'%.;.##+$#.%;++.-*$%%;+.+$+;..++...,;*+%;%%.!$;+,++%+.+%;.;,",
-"$#++$%%$%+*&+,%=%==+%'=%%+.,.&%%+%#.%%,%%%.;++%%;&...#%%%*=%+$+,+....+,+.;!++;$$%,.+,+$,++#+#>+.$++.",
-",%$&&+;;,,$-+#;+-=$$&$%++,,$$%%+%.%$,*$%%+$%;=$,*%%+.+%+*+&;$%$$.+.!#;#+%=&#@,;$..%#;++=$,.#!#+..+#,",
-"+$;$&++%'$,++.+%+,,=$'+++,*%,;+*;,%$,%+&*%++&-;%$$.%;!.$$%#,+=$$%,!#@#;;+.%*=+#.,,.+%+.$+++%%,%.#>.;",
-"*$,%%+%$%$%#;+,;#%%$;+,+%$%$%++&%&;;%;$&$*&;;%;,$%%++;+.%+$$%%$$%,+#.%.@.%;$++*>#+,;.&$@.!#='&@+@@..",
-"%$;..%-%%*,;+,,%$$$.!+'$%%%$;+%%+.+++*+;$%;%,%;,;$%+=$#+,%&''++,.+$#.!+%%+;*%.!++*%+.',.%;!;.#.;#@+%",
-"%;,%%+%*'*&%!.'*$%$$'..++%,;$%%++;&+,%%%$%,,..++&&*$$,,;;$$$$++#.$+%.@%;..%+.;#+&,.+*.;..$&,!.;+;..*",
-"%%;$-%%+$$-%+$,.+;&)'%;.!#,%%%++,%$%';,$%%.+%,#+&+'&$,,+*%+%%..+;#.+#$%+.+.,+;%$.%+*$++,.%++#@#$'$.!",
-".&=$+&&%,%#%*,;*;*=&'$;+.##,,+.$+,*-'%%+,;.;$'%%,,'%,%*$%%%,,..;;..,+.+,%+,+,,*,#+&%%#.#.!.;@!%%...%",
-"%-$+'%.$-+%%%&%$-**=&$%%.;%+#.;$%.$;+%,%,;;%;*$%;=.+,$--&$,+$&..#+%,%,$!+%++,+.%+%%$+%!#!##+++*$,@!#",
-".#+=+@#&$-*,..'-*;-$$;$=';,++#@%%$+@+%%%$$,+&&+;$#,;&===*;%*,=,#+##%).*%>#%+$#,*=.+%$+.$#.$+@%;*%+#.",
-"#$&+.$;%%-&;.;&;-;$$=$*-$,.,;;.#!.,.,$%,,,%&*;%;..;'=$+$;;)%=,%+..%+#,,%&$+#,.;$$.,+#;#+,$%##;;;%&+;",
-";+.>.;&%=+*,+&,%;*;%%'-$++%.%,.%%+&$;%%,%.%=.=*%%**)=)&%.#'-&,+%%#;;+>.$,+.*%#+!,,&,@;,,,.@=%&';,+.,"};
--- a/DoConfig/fltk/test/pixmaps/white_1.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define white_1_width 56
-#define white_1_height 56
-static unsigned char white_1_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x01, 
-0x80, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x00, 
-0x00, 0x01, 0x00, 0x00, 0x40, 0x55, 0x00, 
-0x00, 0x02, 0x00, 0x00, 0xa8, 0x2a, 0x00, 
-0x00, 0x14, 0x00, 0x00, 0x54, 0x15, 0x00, 
-0x00, 0x28, 0x00, 0x80, 0xaa, 0x0a, 0x00, 
-0x00, 0x50, 0x05, 0x54, 0x55, 0x05, 0x00, 
-0x00, 0xa0, 0xaa, 0xaa, 0xaa, 0x02, 0x00, 
-0x00, 0x40, 0x55, 0x55, 0x55, 0x01, 0x00, 
-0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 
-0x00, 0x00, 0x50, 0x55, 0x15, 0x00, 0x00, 
-0x00, 0x00, 0x80, 0xaa, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/white_2.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define white_2_width 56
-#define white_2_height 56
-static unsigned char white_2_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x04, 0x90, 0x04, 0x00, 0x00, 
-0x00, 0x20, 0x01, 0x40, 0x12, 0x00, 0x00, 
-0x00, 0x48, 0xfc, 0x0f, 0x09, 0x00, 0x00, 
-0x00, 0x10, 0x07, 0x30, 0x04, 0x00, 0x00, 
-0x40, 0xc2, 0x00, 0xc0, 0x10, 0x00, 0x00, 
-0x80, 0x24, 0x00, 0x00, 0x09, 0x00, 0x00, 
-0x20, 0x11, 0x00, 0x00, 0x42, 0x00, 0x00, 
-0x40, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 
-0x90, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 
-0x20, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 
-0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x10, 0x01, 0x00, 0x00, 0x80, 0x08, 0x00, 
-0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x84, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 
-0xa0, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 
-0x00, 0x01, 0x00, 0x54, 0x01, 0x01, 0x00, 
-0x44, 0x01, 0x00, 0xaa, 0x00, 0x02, 0x00, 
-0x00, 0x02, 0x40, 0x55, 0x80, 0x04, 0x00, 
-0x88, 0x02, 0xa0, 0x0a, 0x00, 0x01, 0x00, 
-0x40, 0x04, 0x50, 0x05, 0x40, 0x02, 0x00, 
-0x00, 0x09, 0xa0, 0x00, 0x80, 0x00, 0x00, 
-0x80, 0x00, 0x50, 0x00, 0x20, 0x01, 0x00, 
-0x00, 0x04, 0x08, 0x00, 0x48, 0x00, 0x00, 
-0x00, 0x02, 0x00, 0x00, 0x90, 0x00, 0x00, 
-0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x00, 0x24, 0x00, 0x80, 0x04, 0x00, 0x00, 
-0x00, 0x92, 0x00, 0x20, 0x01, 0x00, 0x00, 
-0x00, 0x48, 0x02, 0x08, 0x00, 0x00, 0x00, 
-0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/white_3.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define white_3_width 56
-#define white_3_height 56
-static unsigned char white_3_bits[] = {
-0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x40, 0x81, 0x00, 0x00, 0x00, 
-0x00, 0x18, 0x40, 0x09, 0x00, 0x00, 0x00, 
-0x00, 0x06, 0x52, 0x09, 0x00, 0x00, 0x00, 
-0x00, 0x91, 0x52, 0x05, 0x00, 0x00, 0x00, 
-0x80, 0x94, 0x50, 0x05, 0x00, 0x00, 0x00, 
-0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x10, 0x01, 0x50, 0x05, 0x60, 0x00, 0x00, 
-0x08, 0x00, 0xaa, 0x2a, 0x00, 0x00, 0x00, 
-0x08, 0x40, 0x55, 0x55, 0x80, 0x01, 0x00, 
-0x04, 0xa0, 0xaa, 0xa0, 0x00, 0x00, 0x00, 
-0x04, 0x50, 0x55, 0x55, 0x05, 0x03, 0x00, 
-0x02, 0xa8, 0x0a, 0xa0, 0x0a, 0x00, 0x00, 
-0x02, 0x54, 0x55, 0x55, 0x15, 0x00, 0x00, 
-0x00, 0xa8, 0x00, 0x80, 0x1a, 0x03, 0x00, 
-0x00, 0x54, 0x55, 0x55, 0x35, 0x00, 0x00, 
-0x00, 0x0a, 0x00, 0x80, 0x2a, 0x06, 0x00, 
-0x0d, 0x45, 0x55, 0x55, 0x55, 0x00, 0x00, 
-0x31, 0x0a, 0x00, 0x00, 0x6a, 0x00, 0x00, 
-0x00, 0x05, 0x55, 0x55, 0x55, 0x07, 0x00, 
-0x3e, 0x02, 0x00, 0x00, 0x6a, 0x00, 0x00, 
-0x00, 0x05, 0x55, 0x55, 0x55, 0x1f, 0x00, 
-0x3e, 0x0a, 0x00, 0x00, 0x68, 0x00, 0x00, 
-0x00, 0x15, 0x54, 0x55, 0x55, 0x1f, 0x00, 
-0x38, 0x0a, 0x00, 0x00, 0x69, 0x00, 0x00, 
-0x01, 0x15, 0x54, 0x95, 0x56, 0x03, 0x00, 
-0x01, 0x2a, 0x00, 0x50, 0x69, 0x0c, 0x00, 
-0x18, 0x54, 0x50, 0xa9, 0x34, 0x00, 0x00, 
-0x00, 0x2a, 0x00, 0x55, 0x2b, 0x00, 0x00, 
-0x30, 0x54, 0x90, 0x2a, 0x15, 0x00, 0x00, 
-0x02, 0xa8, 0x40, 0xb5, 0x1a, 0x00, 0x00, 
-0x00, 0x50, 0xa1, 0x52, 0x0d, 0x00, 0x00, 
-0x30, 0xa0, 0x50, 0xab, 0x06, 0x00, 0x00, 
-0x00, 0x50, 0x29, 0x55, 0x03, 0x00, 0x00, 
-0x60, 0xa0, 0xb2, 0xaa, 0x01, 0x00, 0x00, 
-0x00, 0xc0, 0x55, 0xd5, 0x00, 0x00, 0x00, 
-0x80, 0x01, 0xab, 0x3a, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0xfc, 0x0f, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0xa8, 0x42, 0x0a, 0x00, 0x00, 
-0x00, 0x00, 0xa8, 0x52, 0x02, 0x00, 0x00, 
-0x00, 0x00, 0xa4, 0x12, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/white_4.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define white_4_width 56
-#define white_4_height 56
-static unsigned char white_4_bits[] = {
-0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 
-0x00, 0x80, 0xbf, 0x7e, 0x00, 0x00, 0x00, 
-0x00, 0xe0, 0xb6, 0xf6, 0x01, 0x00, 0x00, 
-0x00, 0xb8, 0xad, 0xb6, 0x07, 0x00, 0x00, 
-0x00, 0x6e, 0xad, 0xda, 0x1e, 0x00, 0x00, 
-0x00, 0x6b, 0xab, 0x6a, 0x3b, 0x00, 0x00, 
-0x80, 0xdb, 0xfe, 0xbf, 0x6d, 0x00, 0x00, 
-0xc0, 0xb6, 0x03, 0xf0, 0xf6, 0x00, 0x00, 
-0xe0, 0xee, 0xa8, 0xca, 0x9b, 0x01, 0x00, 
-0xb0, 0x3d, 0x55, 0x15, 0xef, 0x03, 0x00, 
-0x70, 0x9b, 0xaa, 0xaa, 0x76, 0x02, 0x00, 
-0xd8, 0x4e, 0x55, 0x5f, 0xbd, 0x07, 0x00, 
-0xb8, 0xa7, 0xaa, 0xaa, 0xda, 0x04, 0x00, 
-0x6c, 0x53, 0xf5, 0x5f, 0x75, 0x0f, 0x00, 
-0xdc, 0xa9, 0xaa, 0xaa, 0xaa, 0x0b, 0x00, 
-0xb6, 0x55, 0xff, 0x7f, 0xe5, 0x1c, 0x00, 
-0xee, 0xaa, 0xaa, 0xaa, 0x4a, 0x17, 0x00, 
-0xde, 0xf4, 0xff, 0x7f, 0xd5, 0x19, 0x00, 
-0x72, 0xba, 0xaa, 0xaa, 0xaa, 0x1e, 0x00, 
-0x4e, 0xf5, 0xff, 0xff, 0x95, 0x17, 0x00, 
-0x7f, 0xfa, 0xaa, 0xaa, 0xaa, 0x38, 0x00, 
-0x41, 0xfd, 0xff, 0xff, 0x95, 0x3f, 0x00, 
-0x7f, 0xfa, 0xaa, 0xaa, 0xaa, 0x20, 0x00, 
-0x41, 0xf5, 0xff, 0xff, 0x97, 0x3f, 0x00, 
-0x7f, 0xea, 0xab, 0xaa, 0xaa, 0x20, 0x00, 
-0x47, 0xf5, 0xff, 0xff, 0x94, 0x3f, 0x00, 
-0x7a, 0xea, 0xab, 0x2a, 0xa8, 0x1c, 0x00, 
-0x5e, 0xd5, 0xff, 0x0f, 0x94, 0x13, 0x00, 
-0xe6, 0xaa, 0xaf, 0x02, 0xca, 0x1e, 0x00, 
-0xba, 0xd4, 0xff, 0x00, 0xd4, 0x1d, 0x00, 
-0xce, 0xa9, 0x2f, 0x80, 0x6a, 0x1b, 0x00, 
-0x74, 0x55, 0x1f, 0x40, 0xe5, 0x0e, 0x00, 
-0xbc, 0xab, 0x0e, 0xa8, 0xb2, 0x0d, 0x00, 
-0xc8, 0x56, 0x0f, 0x54, 0x79, 0x07, 0x00, 
-0x78, 0xaf, 0x86, 0xaa, 0xdc, 0x06, 0x00, 
-0x90, 0x5b, 0x45, 0x55, 0xb6, 0x03, 0x00, 
-0xf0, 0x3d, 0xaa, 0x2a, 0x6f, 0x03, 0x00, 
-0x60, 0xf6, 0x54, 0xc5, 0xdd, 0x01, 0x00, 
-0xc0, 0xdb, 0x03, 0x70, 0xdb, 0x00, 0x00, 
-0x80, 0x6d, 0xff, 0xdf, 0x76, 0x00, 0x00, 
-0x00, 0xb7, 0x55, 0xb5, 0x35, 0x00, 0x00, 
-0x00, 0xde, 0x56, 0xad, 0x1d, 0x00, 0x00, 
-0x00, 0x78, 0x5b, 0x6d, 0x07, 0x00, 0x00, 
-0x00, 0xe0, 0x5b, 0xdb, 0x01, 0x00, 0x00, 
-0x00, 0x80, 0x5f, 0x7f, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/whiteking_1.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define whiteking_1_width 56
-#define whiteking_1_height 56
-static unsigned char whiteking_1_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0a, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x15, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0a, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x15, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2a, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2a, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x2a, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 
-0x80, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x2a, 
-0x00, 0x01, 0x00, 0x00, 0x40, 0x55, 0x55, 
-0x00, 0x02, 0x00, 0x00, 0xa8, 0xaa, 0x2a, 
-0x00, 0x14, 0x00, 0x00, 0x54, 0x55, 0x15, 
-0x00, 0x28, 0x00, 0x80, 0xaa, 0xaa, 0x2a, 
-0x00, 0x50, 0x05, 0x54, 0x55, 0x55, 0x15, 
-0x00, 0xa0, 0xaa, 0xaa, 0xaa, 0xaa, 0x0a, 
-0x00, 0x40, 0x55, 0x55, 0x55, 0x55, 0x05, 
-0x00, 0x80, 0xaa, 0xaa, 0xaa, 0xaa, 0x02, 
-0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x01, 
-0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 
-0x00, 0x00, 0x54, 0x55, 0x55, 0x55, 0x00, 
-0x00, 0x00, 0xa8, 0xaa, 0xaa, 0x2a, 0x00, 
-0x00, 0x00, 0x40, 0x55, 0x55, 0x15, 0x00, 
-0x00, 0x00, 0x00, 0xaa, 0xaa, 0x02, 0x00, 
-0x00, 0x00, 0x00, 0x50, 0x15, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/whiteking_2.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define whiteking_2_width 56
-#define whiteking_2_height 56
-static unsigned char whiteking_2_bits[] = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 
-0x00, 0x00, 0x04, 0x90, 0x04, 0x00, 0x00, 
-0x00, 0x20, 0x01, 0x40, 0x12, 0x00, 0x00, 
-0x00, 0x48, 0xfc, 0x0f, 0x09, 0x00, 0x00, 
-0x00, 0x10, 0x07, 0x30, 0x04, 0x00, 0x00, 
-0x40, 0xc2, 0x00, 0xc0, 0x10, 0x00, 0x00, 
-0x80, 0x24, 0x00, 0x00, 0x09, 0x00, 0x00, 
-0x20, 0x11, 0x00, 0x00, 0x42, 0x00, 0x00, 
-0x40, 0x08, 0x80, 0x00, 0x20, 0x00, 0x00, 
-0x90, 0x04, 0xc4, 0x10, 0x80, 0x00, 0x00, 
-0x20, 0x02, 0x06, 0x18, 0x40, 0x04, 0x00, 
-0x48, 0x42, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x10, 0x61, 0x00, 0x88, 0x81, 0x08, 0x00, 
-0x20, 0x01, 0x10, 0x10, 0x00, 0x00, 0x00, 
-0x80, 0x00, 0x20, 0x08, 0x00, 0x01, 0x00, 
-0x80, 0x40, 0x40, 0x10, 0x04, 0x08, 0x00, 
-0x80, 0x80, 0x00, 0x20, 0x02, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x84, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 
-0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 
-0x00, 0x01, 0x00, 0x80, 0x00, 0x01, 0x00, 
-0x44, 0x01, 0x00, 0x40, 0x01, 0x02, 0x00, 
-0x00, 0x02, 0xaa, 0xaa, 0x80, 0x04, 0x00, 
-0x88, 0x02, 0x54, 0x55, 0x00, 0x01, 0x00, 
-0x40, 0x04, 0xaa, 0x2a, 0x40, 0x02, 0x00, 
-0x00, 0x09, 0x54, 0x15, 0x80, 0x00, 0x00, 
-0x80, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 
-0x00, 0x04, 0x00, 0x00, 0x48, 0x00, 0x00, 
-0x00, 0x02, 0x00, 0x00, 0x90, 0x00, 0x00, 
-0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 
-0x00, 0x24, 0x00, 0x80, 0x04, 0x00, 0x00, 
-0x00, 0x92, 0x00, 0x20, 0x01, 0x00, 0x00, 
-0x00, 0x48, 0x02, 0x08, 0x00, 0x00, 0x00, 
-0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/whiteking_3.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define whiteking_3_width 56
-#define whiteking_3_height 56
-static unsigned char whiteking_3_bits[] = {
-0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 
-0x00, 0x40, 0x40, 0x81, 0x00, 0x00, 0x00, 
-0x00, 0x18, 0x40, 0x09, 0x00, 0x00, 0x00, 
-0x00, 0x06, 0x52, 0x09, 0x00, 0x00, 0x00, 
-0x00, 0x91, 0x52, 0x05, 0x00, 0x00, 0x00, 
-0x80, 0x94, 0x50, 0x05, 0x00, 0x00, 0x00, 
-0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x10, 0x01, 0x50, 0x05, 0x60, 0x00, 0x00, 
-0x08, 0x00, 0xaa, 0x2a, 0x00, 0x00, 0x00, 
-0x08, 0x40, 0x55, 0x55, 0x80, 0x01, 0x00, 
-0x04, 0xa0, 0x0a, 0xaa, 0x00, 0x00, 0x00, 
-0x04, 0x50, 0x10, 0x41, 0x05, 0x03, 0x00, 
-0x02, 0xa8, 0x08, 0xa2, 0x0a, 0x00, 0x00, 
-0x02, 0x04, 0x50, 0x01, 0x14, 0x00, 0x00, 
-0x00, 0x88, 0xaa, 0x2a, 0x1a, 0x03, 0x00, 
-0x00, 0x04, 0x59, 0x11, 0x34, 0x00, 0x00, 
-0x01, 0xaa, 0xa8, 0xa8, 0x2a, 0x06, 0x00, 
-0x0d, 0x55, 0x51, 0x54, 0x55, 0x00, 0x00, 
-0x31, 0xa2, 0x28, 0x2a, 0x6a, 0x00, 0x00, 
-0x00, 0x45, 0x54, 0x15, 0x55, 0x07, 0x00, 
-0x3e, 0xa2, 0xa8, 0xaa, 0x6b, 0x00, 0x00, 
-0x00, 0x45, 0x55, 0x55, 0x55, 0x1f, 0x00, 
-0x3e, 0x8a, 0xaa, 0xaa, 0x6a, 0x00, 0x00, 
-0x00, 0x45, 0x55, 0xd5, 0x55, 0x1f, 0x00, 
-0x38, 0x8a, 0xaa, 0xaa, 0x6a, 0x00, 0x00, 
-0x01, 0x15, 0x55, 0x55, 0x55, 0x03, 0x00, 
-0x01, 0x2a, 0xaa, 0xea, 0x6a, 0x0c, 0x00, 
-0x19, 0x14, 0x54, 0x55, 0x35, 0x00, 0x00, 
-0x00, 0x2a, 0xaa, 0xaa, 0x2a, 0x00, 0x00, 
-0x30, 0x54, 0x54, 0x55, 0x15, 0x00, 0x00, 
-0x02, 0xa8, 0xaa, 0xaa, 0x1a, 0x00, 0x00, 
-0x00, 0x50, 0x55, 0xd5, 0x0d, 0x00, 0x00, 
-0x30, 0xa0, 0xaa, 0xea, 0x06, 0x00, 0x00, 
-0x00, 0x50, 0x55, 0x55, 0x03, 0x00, 0x00, 
-0x60, 0xa0, 0xaa, 0xaa, 0x01, 0x00, 0x00, 
-0x00, 0xc0, 0x55, 0xd5, 0x00, 0x00, 0x00, 
-0x80, 0x01, 0xab, 0x3a, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0xfc, 0x0f, 0x20, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 
-0x00, 0x00, 0xa8, 0x42, 0x0a, 0x00, 0x00, 
-0x00, 0x00, 0xa8, 0x52, 0x02, 0x00, 0x00, 
-0x00, 0x00, 0xa4, 0x12, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/whiteking_4.xbm
+++ /dev/null
@@ -1,60 +1,0 @@
-#define whiteking_4_width 56
-#define whiteking_4_height 56
-static unsigned char whiteking_4_bits[] = {
-0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 
-0x00, 0x80, 0xbf, 0x7e, 0x00, 0x00, 0x00, 
-0x00, 0xe0, 0xb6, 0xf6, 0x01, 0x00, 0x00, 
-0x00, 0xb8, 0xad, 0xb6, 0x07, 0x00, 0x00, 
-0x00, 0x6e, 0xad, 0xda, 0x1e, 0x00, 0x00, 
-0x00, 0x6b, 0xab, 0x6a, 0x3b, 0x00, 0x00, 
-0x80, 0xdb, 0xfe, 0xbf, 0x6d, 0x00, 0x00, 
-0xc0, 0xb6, 0x03, 0xf0, 0xf6, 0x00, 0x00, 
-0xe0, 0xee, 0xa8, 0xca, 0x9b, 0x01, 0x00, 
-0xb0, 0x3d, 0x55, 0x15, 0xef, 0x03, 0x00, 
-0x70, 0x9b, 0xaa, 0xaa, 0x76, 0x02, 0x00, 
-0xd8, 0x4e, 0xf5, 0x55, 0xbd, 0x07, 0x00, 
-0xb8, 0xa7, 0x6f, 0xbe, 0xda, 0x04, 0x00, 
-0x6c, 0x53, 0x33, 0x4d, 0x75, 0x0f, 0x00, 
-0xdc, 0xf9, 0xa9, 0xe6, 0xab, 0x0b, 0x00, 
-0xb6, 0x35, 0x55, 0xd5, 0xe4, 0x1c, 0x00, 
-0xee, 0x9a, 0xa6, 0x66, 0x4a, 0x17, 0x00, 
-0xde, 0x54, 0x47, 0x47, 0xd5, 0x19, 0x00, 
-0x72, 0xaa, 0x8e, 0xa3, 0xaa, 0x1e, 0x00, 
-0x4e, 0x1d, 0x97, 0xc5, 0x91, 0x17, 0x00, 
-0x7f, 0x3a, 0xab, 0xca, 0xa8, 0x38, 0x00, 
-0x41, 0x5d, 0x57, 0x55, 0x90, 0x3f, 0x00, 
-0x7f, 0xba, 0xaa, 0xaa, 0xa8, 0x20, 0x00, 
-0x41, 0x75, 0x55, 0x55, 0x94, 0x3f, 0x00, 
-0x7f, 0xba, 0xaa, 0x2a, 0xa8, 0x20, 0x00, 
-0x47, 0x75, 0x55, 0x55, 0x94, 0x3f, 0x00, 
-0x7a, 0xea, 0xaa, 0x2a, 0xaa, 0x1c, 0x00, 
-0x5e, 0xd5, 0x55, 0x15, 0x94, 0x13, 0x00, 
-0xe6, 0xea, 0xab, 0x2a, 0xca, 0x1e, 0x00, 
-0xba, 0xd4, 0x55, 0x15, 0xd4, 0x1d, 0x00, 
-0xce, 0xa9, 0x01, 0x00, 0x6a, 0x1b, 0x00, 
-0x74, 0x55, 0x01, 0x00, 0xe5, 0x0e, 0x00, 
-0xbc, 0xab, 0x00, 0x00, 0xb2, 0x0d, 0x00, 
-0xc8, 0x56, 0x01, 0x00, 0x79, 0x07, 0x00, 
-0x78, 0xaf, 0xaa, 0xaa, 0xdc, 0x06, 0x00, 
-0x90, 0x5b, 0x55, 0x55, 0xb6, 0x03, 0x00, 
-0xf0, 0x3d, 0xaa, 0x2a, 0x6f, 0x03, 0x00, 
-0x60, 0xf6, 0x54, 0xc5, 0xdd, 0x01, 0x00, 
-0xc0, 0xdb, 0x03, 0x70, 0xdb, 0x00, 0x00, 
-0x80, 0x6d, 0xff, 0xdf, 0x76, 0x00, 0x00, 
-0x00, 0xb7, 0x55, 0xb5, 0x35, 0x00, 0x00, 
-0x00, 0xde, 0x56, 0xad, 0x1d, 0x00, 0x00, 
-0x00, 0x78, 0x5b, 0x6d, 0x07, 0x00, 0x00, 
-0x00, 0xe0, 0x5b, 0xdb, 0x01, 0x00, 0x00, 
-0x00, 0x80, 0x5f, 0x7f, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-};
--- a/DoConfig/fltk/test/pixmaps/yellow.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * yellow_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #2A4602",
-"+	c #435B00",
-"@	c #818600",
-"#	c #969900",
-"$	c #A3A400",
-"%	c #B0AF00",
-"&	c #B4B425",
-"*	c #BAB800",
-"=	c #BABE02",
-"-	c #B4B73F",
-";	c #C0C300",
-">	c #C7C905",
-",	c #C6C821",
-"'	c #CBCC00",
-")	c #CAC835",
-"!	c #C9C943",
-"~	c #D1D201",
-"{	c #C7C94E",
-"]	c #CACB5D",
-"^	c #D8D700",
-"/	c #D9DB3C",
-"(	c #D5D67B",
-"_	c #DADB6D",
-":	c #DFDE57",
-"<	c #DFDF64",
-"[	c #D9DB8A",
-"}	c #EAEB76",
-"|	c #E7E7A1",
-"1	c #EBEC82",
-"2	c #EEED91",
-"3	c #EEEF9C",
-"     +@$;**%**==;=*%*=;;$@+     ",
-"   .#'/<2||||||||||||||[_)*#.   ",
-"  +>^}32233||3|333||||||||(*=+  ",
-" .>'2222222233322223||||||||,'. ",
-" #,1111111112222212122[[[[[[[^# ",
-"+*:_111}}}}1_1(111}1111([[[[[_'+",
-"@,___}}}}}}_____1}}}}}_(((((((,@",
-"$/<<:<<<<<__](]]<}:}<}__](](](!$",
-"*:!<!::::{{]{]]{<:::::::<{]]]]{*",
-"*!!!:!!{{{]{{{{{!}///:::!<{]]]]*",
-"%!))/!!----{!!!!!::///::!!!{---$",
-"%))!))-&-&-&!&!!))/////)!!!!---$",
-"*,,)&*&&&&&&&),))))///,))&&----$",
-"=,,*&&$&&&&&)','''',,',,)))*&$&%",
-"=;,*&$$%%*>>'''/,/'),,'>>,)*&&&%",
-"*>';*&$&*;''',>;;>>'****,*****%%",
-"*'~'**%%;>~'>,;***''****;;******",
-"*>'>;***>'^****;'*>>;***;,**%*%%",
-"%*;*;*''^'~>*%%*****,*;*'>,*%%$%",
-"%****''^~^~;*%%%%%*****''''>=%%$",
-"%**>;'^^^^^'*%$$$$%%%**>''''*%%%",
-"%**>^^^^^^~^*%%$#$$%%%**>'~''=%%",
-"*;*>'^^^^^~;*%%$$$#$$%**'>~';==*",
-";***'^~'^~;;****%%%%%****>'';;*=",
-"%**;;>;**;;*;;;***%***;*;;'^~~>%",
-"@***,**%%****>''>;*;*;***>^~^~~@",
-"+*****%$#%%*****;>>'';***'^~^^~+",
-" #*****$$#%%%%****'''>*;'^~~~~# ",
-" .%;*,;%$$$$$$%**~^'>**>~^^^~>. ",
-"  +*>'*%%$%%$$$**>'^';;*~^^~>+  ",
-"   .#';*%$$%$$$*;';>>*>;~~^$.   ",
-"     +@#%**%$$$%>*>>>'*>$@+     "};
--- a/DoConfig/fltk/test/pixmaps/yellow_bomb.xpm
+++ /dev/null
@@ -1,67 +1,0 @@
-/* XPM */
-static const char * yellow_bomb_xpm[] = {
-"32 32 32 1",
-" 	c #000100",
-".	c #393900",
-"+	c #2A4602",
-"@	c #434101",
-"#	c #474900",
-"$	c #435B00",
-"%	c #515116",
-"&	c #5B5C20",
-"*	c #676800",
-"=	c #666635",
-"-	c #7C7B50",
-";	c #848323",
-">	c #838442",
-",	c #8E9200",
-"'	c #8A8A5F",
-")	c #A6A600",
-"!	c #9A9B6D",
-"~	c #B2B102",
-"{	c #AFB132",
-"]	c #BAB900",
-"^	c #C1C300",
-"/	c #C6C42C",
-"(	c #CFD000",
-"_	c #C7C84F",
-":	c #CBCA40",
-"<	c #CCCC67",
-"[	c #D7D984",
-"}	c #E0E167",
-"|	c #E0E07A",
-"1	c #E6E6A0",
-"2	c #EEEE88",
-"3	c #EDED97",
-"     $,)]]]~]]]]^]]~]]^^),$     ",
-"   +,(/}2111111111111113</~,+   ",
-"  $((}33333113133311111111[]^$  ",
-" +^(233223233333233111111111/(+ ",
-" ,^2222222222332222233[[1[[1[() ",
-"$^}2|2}22}22|||22222}22[[[[[[}^$",
-",^}}}|}}}}}[!!'!!!![<|}|<[[[[[^,",
-"):_}}}}}}}!''''''!''!!<|<<<<<<_)",
-"^:}:}}:}<'''-''''''''!'<}_}<<<_]",
-"]_:}/:}{-=--------'>'>--_}_____]",
-"~::/:/_>=-=--=--=--=---->____<<)",
-"~:///:;=============>===={:{{{{)",
-"]^///:>%=.=.========&====>{:{{{,",
-"^^^]~{.=.==.=%%%&&&&&=&&&%/~{{{~",
-"]^^/))....=.%%=%%%%&%%%%%%/~~~~~",
-"^^^^/{.=...%@@@@%#%@%@%%%%]/~/~~",
-"^((^]~...%%@@@@.@@@@@@.@@@]]]~]]",
-"]^((]/..@@@%..@@@@@@@.@.@@]~~]~~",
-"~]]^]]@%@#@@...@@@@@@.@@@@^]~))~",
-")~]]^^;@##@#@........@@@#;^^]~))",
-"~~]]^()#@##@@......@..@@@)((^]~)",
-"~]^^(((*####@..........@*(((^~~]",
-"]]^^(((^##@@@..........@)^^(^]]]",
-"/]]((((()##@..........@)(((((^]]",
-")]~]((^^])*@@@@.....@*,]]^^((((~",
-",]]]]]]~~~~,*@@#@@@*,]]]^^((((^,",
-"$~~]/]~)))~]]]]]^^(((^]]^(((((($",
-" ,]~]~~),))~~~~]]^((^^]]((((((, ",
-" +]]^^^])))))))~^^(((]]^((((((+ ",
-"  $^^^]~)))))))]^(((^^](((((($  ",
-"   +,(^]~)~))))~]^^^^^/^((({+   ",
-"     $,,~]~)),)~^^(^(^^^/,$     "};
--- a/DoConfig/fltk/test/preferences.fl
+++ /dev/null
@@ -1,334 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-decl {\#include <FL/Fl_Preferences.H>} {public local
-}
-
-decl {\#include <stdio.h>} {public local
-}
-
-decl {\#include <stdlib.h>} {private local
-}
-
-decl {\#include <FL/filename.H>} {private local
-}
-
-decl {\#include <FL/fl_ask.H>} {private local
-}
-
-decl {void readPrefs();} {public local
-}
-
-decl {void writePrefs();} {public local
-}
-
-decl {const char *project = "fltk.org";} {private local
-}
-
-decl {const char *application = "test/preferences";} {private local
-}
-
-Function {closeWindowCB( Fl_Widget*, void* )} {open private return_type void
-} {
-  code {Fl::delete_widget(myWindow);} {}
-}
-
-Function {saveAndCloseWindowCB( Fl_Widget*, void* )} {open private return_type void
-} {
-  code {writePrefs();
-Fl::delete_widget(myWindow);} {}
-}
-
-Function {} {open return_type int
-} {
-  Fl_Window myWindow {
-    label {My Preferences}
-    callback closeWindowCB open
-    xywh {408 202 298 311} type Double hide
-  } {
-    Fl_Button {} {
-      label Cancel
-      callback closeWindowCB
-      xywh {210 275 75 25}
-    }
-    Fl_Button {} {
-      label OK
-      callback saveAndCloseWindowCB
-      xywh {125 275 75 25}
-    }
-    Fl_Group {} {
-      label {Get Up:} open
-      xywh {20 30 115 225} box ENGRAVED_FRAME align 5
-    } {
-      Fl_Input wAlarm {
-        label {Alarm at:}
-        xywh {25 55 45 20} align 5
-      }
-      Fl_Choice wAmPm {open
-        xywh {75 55 55 20} down_box BORDER_BOX
-      } {
-        MenuItem {} {
-          label {a.m.}
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label {p.m.}
-          xywh {0 0 100 20}
-        }
-      }
-      Fl_Choice wWear {
-        label {Wear:} open
-        xywh {25 100 105 20} down_box BORDER_BOX align 5
-      } {
-        MenuItem {} {
-          label shoes
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label sandals
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label {flip flops}
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label {bare foot}
-          xywh {0 0 100 20}
-        }
-      }
-      Fl_Group {} {open
-        xywh {35 120 98 60}
-      } {
-        Fl_Round_Button wLeft {
-          label {left side}
-          xywh {35 120 95 25} type Radio down_box ROUND_DOWN_BOX
-        }
-        Fl_Round_Button wRight {
-          label {right side}
-          xywh {35 140 95 25} type Radio down_box ROUND_DOWN_BOX
-        }
-        Fl_Box {} {
-          label {of the bed}
-          xywh {38 160 95 20}
-        }
-      }
-      Fl_Check_Button wShower {
-        label shower
-        xywh {25 180 105 25} down_box DOWN_BOX
-      }
-      Fl_Check_Button wShave {
-        label shave
-        xywh {25 200 105 25} down_box DOWN_BOX
-      }
-      Fl_Check_Button wBrush {
-        label {brush teeth}
-        xywh {25 220 105 25} down_box DOWN_BOX
-      }
-    }
-    Fl_Group {} {
-      label {Breakfast::} open
-      xywh {160 30 115 225} box ENGRAVED_FRAME align 5
-    } {
-      Fl_Choice wDrink {
-        label {Drink:} open
-        xywh {165 50 105 20} down_box BORDER_BOX align 5
-      } {
-        MenuItem {} {
-          label coffee
-          xywh {10 10 100 20}
-        }
-        MenuItem {} {
-          label tea
-          xywh {10 10 100 20}
-        }
-        MenuItem {} {
-          label juice
-          xywh {10 10 100 20}
-        }
-      }
-      Fl_Check_Button wMilk {
-        label {with milk}
-        xywh {170 70 100 25} down_box DOWN_BOX
-      }
-      Fl_Choice wBread {
-        label {Bread:} open
-        xywh {165 110 105 20} down_box BORDER_BOX align 5
-      } {
-        MenuItem {} {
-          label wheat
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label white
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label rye
-          xywh {0 0 100 20}
-        }
-        MenuItem {} {
-          label {sour doh}
-          xywh {0 0 100 20}
-        }
-      }
-      Fl_Check_Button wButter {
-        label {with butter}
-        xywh {170 130 100 25} down_box DOWN_BOX
-      }
-      Fl_Input wEggs {
-        label eggs
-        xywh {165 163 30 20} type Int align 8
-      }
-      Fl_Value_Slider wMinutes {
-        label {min.}
-        xywh {175 185 70 20} type Horizontal align 8 minimum 2 maximum 6 value 3.1
-      }
-      Fl_Input wPaper {
-        label {Newspaper:}
-        xywh {165 225 105 20} align 5
-      }
-    }
-  }
-  code {readPrefs();} {}
-}
-
-Function {readPrefs()} {open return_type void
-} {
-  code {int boolValue;
-int intValue;
-char buffer[80];
-double doubleValue;
-
-Fl_Preferences app( Fl_Preferences::USER, project, application );
-
-  char path[ FL_PATH_MAX ];
-  app.getUserdataPath( path, sizeof(path) );
-
-  Fl_Preferences bed( app, "Bed" );
-    bed.get( "alarm", buffer, "8:00", 79 );
-    wAlarm->value( buffer );
-
-    bed.get( "ampm", intValue, 0 );
-    wAmPm->value( intValue );
-
-    bed.get( "wear", intValue, 1 );
-    wWear->value( intValue );
-
-    int side;
-    bed.get( "side", side, 2 );
-    if ( side == 1 ) wLeft->value( 1 );
-    if ( side == 2 ) wRight->value( 1 );
-
-    int tasks;
-    bed.get( "taskFlags", tasks, 0x05 );
-    if ( tasks & 0x01 ) wShower->value( 1 );
-    if ( tasks & 0x02 ) wShave->value( 1 );
-    if ( tasks & 0x04 ) wBrush->value( 1 );
-
-  Fl_Preferences eat( app, "Breakfast" );
-
-    eat.get( "drink", intValue, 1 );
-    wDrink->value( intValue );
-
-    eat.get( "wMilk", boolValue, 0 );
-    wMilk->value( boolValue );
-
-    eat.get( "bread", intValue, 0 );
-    wBread->value( intValue );
-
-    eat.get( "wButter", boolValue, 1 );
-    wButter->value( boolValue );
-
-    eat.get( "nEggs", intValue, 2 );
-    sprintf( buffer, "%d", intValue );
-    wEggs->value( buffer );
-
-    eat.get( "minutes", doubleValue, 3.2 );
-    wMinutes->value( doubleValue );
-
-    char *flexBuffer;
-    eat.get( "newspaper", flexBuffer, "NY Tymes" );
-    wPaper->value( flexBuffer );
-    if ( flexBuffer ) free( flexBuffer );
-
-    eat.get( "foo", buffer, "bar", 80 );
-
-  /** sample code only:
-  Fl_Preferences prev( app, "PreviousStarts" );
-  {
-    int i, n;
-    prev.get( "n", n, 0 );
-    for ( i=0; i<n; i++ )
-      prev.get( Fl_Preferences::Name( i ), flexBuffer, "" );
-  }
-
-    unsigned int hex;
-    eat.get( "binFoo", (void*)&hex, 0, 0, sizeof( unsigned int ) );
-    void *data;
-    eat.get( "binFoo2", data, 0, 0 );
-  **/} {selected
-  }
-}
-
-Function {writePrefs()} {open return_type void
-} {
-  code {Fl_Preferences app( Fl_Preferences::USER, project, application );
-
-  Fl_Preferences bed( app, "Bed" );
-
-    bed.set( "alarm", wAlarm->value() );
-    bed.set( "ampm", wAmPm->value() );
-
-    bed.set( "wear", wWear->value() );
-
-    int side = 0;
-    if ( wLeft->value() ) side = 1;
-    if ( wRight->value() ) side = 2;
-    bed.set( "side", side );
-
-    int tasks = 0;
-    if ( wShower->value() ) tasks |= 0x01;
-    if ( wShave->value() ) tasks |= 0x02;
-    if ( wBrush->value() ) tasks |= 0x04;
-    bed.set( "taskFlags", tasks );
-
-  Fl_Preferences eat( app, "Breakfast" );
-
-    eat.set( "drink", wDrink->value() );
-    eat.set( "wMilk", wMilk->value() );
-    eat.set( "bread", wBread->value() );
-    eat.set( "wButter", wButter->value() );
-
-    eat.set( "nEggs", wEggs->value() );
-    eat.set( "minutes", wMinutes->value() );
-
-    eat.set( "newspaper", wPaper->value() );
-
-    eat.set( "foo", "bar\\nfly\\rBackslash: \\\\ and bell: \\007 and delete: \\177\\n" );
-
-    eat.set( Fl_Preferences::Name( 3 ), "Test3" );
-
-  /* sample: create a sub-sub-group */
-  Fl_Preferences eatMore( eat, "More" );
-
-    eatMore.set( "more", "stuff" );
-
-  /* all the following searches should return 1 */
-  int sum = 0;
-  sum += app.groupExists( "Breakfast" ); /* find 'eat' relative to 'app' */
-  sum += app.groupExists( "Breakfast/More" ); /* find 'eat.eatMore' relative to 'app' */
-  sum += app.groupExists( "./Breakfast/More" ); /* find 'eat.eatMore' relative to Preferences */
-  sum += eat.groupExists( "More" ); /* find 'eatMore' relative to 'eat' */
-  sum += eat.groupExists( "./Breakfast/More" ); /* find 'eat.eatMore' relative to Preferences */
-  sum += eat.groupExists( "." ); /* find myself ('eat') */
-  sum += eat.groupExists( "./" ); /* find the topmost group ('app') */
-  if ( sum != 7 )
-    fl_message( "Assertion failed:\\nNot all group entries were found!" );
-
-  /* sample code only: */
-  unsigned int hex = 0x2387efcd;
-  eat.set( "binFoo", (void*)&hex, sizeof( unsigned int ) );
-  eat.set( "binFoo2", (void*)&bed, 256 );} {}
-}
--- a/DoConfig/fltk/test/radio.fl
+++ /dev/null
@@ -1,100 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {button_cb(Fl_Button *b, void *)} {
-  comment {Buttons test callback} open private return_type void
-} {
-  code {char msg[256];
-sprintf(msg, "Label: '%s'\\nValue: %d", b->label(),b->value());
-cb_info->value(msg);
-cb_info->redraw();
-printf("%s\\n",msg);} {selected
-  }
-}
-
-Function {} {open
-} {
-  Fl_Window {} {open
-    xywh {463 67 369 214} type Double hide
-  } {
-    Fl_Button {} {
-      label {&Fl_Button A1}
-      tooltip {Normal button (callback called only when released)} xywh {20 10 160 30} labelsize 13
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Button {} {
-      label {Fl_Button &A2}
-      tooltip {Normal button with callback called when changed (push and released)} xywh {20 44 160 30} labelsize 13 when 1
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Return_Button {} {
-      label {Fl_Return_Button &B}
-      tooltip {Button with Return key as default shortcut} xywh {20 78 160 30} labelsize 13
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Light_Button {} {
-      label {Fl_Light_Button &C}
-      tooltip {Button with toggle state and a visual indicator of the current state} xywh {20 113 160 30} labelsize 13
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Check_Button {} {
-      label {Fl_Check_Button &D}
-      tooltip {Check button with toggle state} xywh {20 148 160 30} down_box DOWN_BOX labelsize 13
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Round_Button {} {
-      label {Fl_Round_Button &E}
-      tooltip {Round Button with toggle state} xywh {20 178 160 30} down_box ROUND_DOWN_BOX labelsize 13
-      code0 {o->callback((Fl_Callback*) button_cb);}
-    }
-    Fl_Group {} {open
-      xywh {190 10 70 120} box THIN_UP_FRAME
-    } {
-      Fl_Round_Button {} {
-        label {radio &1}
-        tooltip {Radio button, only one button is set at a time, in the corresponding group.} xywh {190 10 70 30} type Radio down_box ROUND_DOWN_BOX
-        code0 {o->callback((Fl_Callback*) button_cb);}
-      }
-      Fl_Round_Button {} {
-        label {radio &2}
-        tooltip {Radio button, only one button is set at a time, in the corresponding group.} xywh {190 40 70 30} type Radio down_box ROUND_DOWN_BOX
-        code0 {o->callback((Fl_Callback*) button_cb);}
-      }
-      Fl_Round_Button {} {
-        label {radio &3}
-        tooltip {Radio button, only one button is set at a time, in the corresponding group.} xywh {190 70 70 30} type Radio down_box ROUND_DOWN_BOX
-        code0 {o->callback((Fl_Callback*) button_cb);}
-      }
-      Fl_Round_Button {} {
-        label {radio &4}
-        tooltip {Radio button, only one button is set at a time, in the corresponding group.} xywh {190 100 70 30} type Radio down_box ROUND_DOWN_BOX
-        code0 {o->callback((Fl_Callback*) button_cb);}
-      }
-    }
-    Fl_Group {} {open
-      xywh {270 10 90 120} box THIN_UP_BOX
-    } {
-      Fl_Button {} {
-        label radio
-        tooltip {Custom look button, only one button is set at a time, in the corresponding group.} xywh {280 20 20 20} type Radio selection_color 1 align 8
-      }
-      Fl_Button {} {
-        label radio
-        tooltip {Custom look button, only one button is set at a time, in the corresponding group.} xywh {280 45 20 20} type Radio selection_color 1 align 8
-      }
-      Fl_Button {} {
-        label radio
-        tooltip {Custom look button, only one button is set at a time, in the corresponding group.} xywh {280 70 20 20} type Radio selection_color 1 align 8
-      }
-      Fl_Button {} {
-        label radio
-        tooltip {Custom look button, only one button is set at a time, in the corresponding group.} xywh {280 95 20 20} type Radio selection_color 1 align 8
-      }
-    }
-    Fl_Output cb_info {
-      label {callback:}
-      xywh {190 148 170 62} type Multiline align 133 textsize 12
-    }
-  }
-}
--- a/DoConfig/fltk/test/resize.fl
+++ /dev/null
@@ -1,51 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {} {open
-} {
-  Fl_Window {} {open
-    xywh {401 207 366 261} type Double hide resizable
-  } {
-    Fl_Button {} {
-      label {@<-}
-      callback {Fl_Window* w = o->window();
-w->position(w->x()-50,w->y());}
-      xywh {20 40 40 40}
-    }
-    Fl_Button {} {
-      label {@2->}
-      callback {Fl_Window* w = o->window();
-w->position(w->x(),w->y()+50);}
-      xywh {60 80 40 40}
-    }
-    Fl_Button {} {
-      label {@->}
-      callback {Fl_Window* w = o->window();
-w->position(w->x()+50,w->y());}
-      xywh {100 40 40 40}
-    }
-    Fl_Button {} {
-      label {@8->}
-      callback {Fl_Window* w = o->window();
-w->position(w->x(),w->y()-50);}
-      xywh {60 0 40 40}
-    }
-    Fl_Button {} {
-      label grow
-      callback {Fl_Window* w = o->window();
-w->size(w->w()+20, w->h()+20);}
-      xywh {30 130 110 40} labelfont 1 labelsize 18
-    }
-    Fl_Button {} {
-      label shrink
-      callback {Fl_Window* w = o->window();
-w->size(w->w()-20, w->h()-20);}
-      xywh {30 190 110 40} labelfont 1 labelsize 18
-    }
-    Fl_Box {} {
-      label {This is a test of program-generated resize() of a window.  The window should move or resize once when each button is clicked.  The program and window manager should not go into fits echoing resizes back and forth!} selected
-      xywh {150 10 160 220} box BORDER_BOX align 148
-    }
-  }
-}
--- a/DoConfig/fltk/test/resizebox.cxx
+++ /dev/null
@@ -1,93 +1,0 @@
-//
-// "$Id$"
-//
-// Resize box test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#define W1 (big ? 60 : 40)
-#define B 0
-#define W3 (5*W1+6*B)
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Radio_Button.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_message.H>
-
-Fl_Double_Window *window;
-Fl_Box *box;
-
-int big = 0;
-
-void b_cb(Fl_Widget *,long w) {
-  if (window->w() != W3 || window->h() != W3) {
-    fl_message("Put window back to minimum size before changing");
-    return;
-  }
-  window->init_sizes();
-  switch (w) {
-  case 0: box->hide(); window->box(FL_FLAT_BOX); window->resizable(0); return;
-  case 8: box->resize(W1+B,W1,2*W1,B); break;
-  case 2: box->resize(W1+B,W1+B+2*W1,2*W1,B); break;
-  case 4: box->resize(W1+B,W1,B,2*W1); break;
-  case 6: box->resize(W1+B+2*W1,W1+B,B,2*W1); break;
-  }
-  window->box(FL_NO_BOX);
-  if (w == 6 || w == 4)
-    box->label("re\nsiz\nab\nle");
-  else box->label("resizable");
-  box->show();
-  window->resizable(box);
-  window->redraw();
-}
-
-int main(int argc, char **argv) {
-  window = new Fl_Double_Window(W3,W3);
-  window->box(FL_NO_BOX);
-  Fl_Box *n;
-  for (int x = 0; x<4; x++) for (int y = 0; y<4; y++) {
-    if ((x==1 || x==2) && (y==1 || y==2)) continue;
-    n = new Fl_Box(FL_FRAME_BOX,x*(B+W1)+B,y*(B+W1)+B,W1,W1,0);
-    n->color(x+y+8);
-  }
-  n = new Fl_Box(FL_FRAME_BOX,B,4*W1+5*B,4*W1+3*B,W1,0);
-  n->color(12);
-  n = new Fl_Box(FL_FRAME_BOX,4*W1+5*B,B,W1,5*W1+4*B,0);
-  n->color(13);
-  n = new Fl_Box(FL_FRAME_BOX,W1+B+B,W1+B+B,2*W1+B,2*W1+B,0);
-  n->color(8);
-
-  Fl_Button *b = new Fl_Radio_Button(W1+B+50,W1+B+30,20,20,"@6>");
-  b->callback(b_cb,6);
-  (new Fl_Radio_Button(W1+B+30,W1+B+10,20,20,"@8>"))->callback(b_cb,8);
-  (new Fl_Radio_Button(W1+B+10,W1+B+30,20,20,"@4>"))->callback(b_cb,4);
-  (new Fl_Radio_Button(W1+B+30,W1+B+50,20,20,"@2>"))->callback(b_cb,2);
-  (new Fl_Radio_Button(W1+B+30,W1+B+30,20,20,"off"))->callback(b_cb,0);
-
-  box = new Fl_Box(FL_FLAT_BOX,0,0,0,0,"resizable");
-  box->color(FL_DARK2);
-  b->set();
-  b->do_callback();
-  window->end();
-
-  window->size_range(W3,W3);
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/rgb.txt
+++ /dev/null
@@ -1,753 +1,0 @@
-! $Xorg: rgb.txt,v 1.3 2000/08/17 19:54:00 cpqbld Exp $
-255 250 250		snow
-248 248 255		ghost white
-248 248 255		GhostWhite
-245 245 245		white smoke
-245 245 245		WhiteSmoke
-220 220 220		gainsboro
-255 250 240		floral white
-255 250 240		FloralWhite
-253 245 230		old lace
-253 245 230		OldLace
-250 240 230		linen
-250 235 215		antique white
-250 235 215		AntiqueWhite
-255 239 213		papaya whip
-255 239 213		PapayaWhip
-255 235 205		blanched almond
-255 235 205		BlanchedAlmond
-255 228 196		bisque
-255 218 185		peach puff
-255 218 185		PeachPuff
-255 222 173		navajo white
-255 222 173		NavajoWhite
-255 228 181		moccasin
-255 248 220		cornsilk
-255 255 240		ivory
-255 250 205		lemon chiffon
-255 250 205		LemonChiffon
-255 245 238		seashell
-240 255 240		honeydew
-245 255 250		mint cream
-245 255 250		MintCream
-240 255 255		azure
-240 248 255		alice blue
-240 248 255		AliceBlue
-230 230 250		lavender
-255 240 245		lavender blush
-255 240 245		LavenderBlush
-255 228 225		misty rose
-255 228 225		MistyRose
-255 255 255		white
-  0   0   0		black
- 47  79  79		dark slate gray
- 47  79  79		DarkSlateGray
- 47  79  79		dark slate grey
- 47  79  79		DarkSlateGrey
-105 105 105		dim gray
-105 105 105		DimGray
-105 105 105		dim grey
-105 105 105		DimGrey
-112 128 144		slate gray
-112 128 144		SlateGray
-112 128 144		slate grey
-112 128 144		SlateGrey
-119 136 153		light slate gray
-119 136 153		LightSlateGray
-119 136 153		light slate grey
-119 136 153		LightSlateGrey
-190 190 190		gray
-190 190 190		grey
-211 211 211		light grey
-211 211 211		LightGrey
-211 211 211		light gray
-211 211 211		LightGray
- 25  25 112		midnight blue
- 25  25 112		MidnightBlue
-  0   0 128		navy
-  0   0 128		navy blue
-  0   0 128		NavyBlue
-100 149 237		cornflower blue
-100 149 237		CornflowerBlue
- 72  61 139		dark slate blue
- 72  61 139		DarkSlateBlue
-106  90 205		slate blue
-106  90 205		SlateBlue
-123 104 238		medium slate blue
-123 104 238		MediumSlateBlue
-132 112 255		light slate blue
-132 112 255		LightSlateBlue
-  0   0 205		medium blue
-  0   0 205		MediumBlue
- 65 105 225		royal blue
- 65 105 225		RoyalBlue
-  0   0 255		blue
- 30 144 255		dodger blue
- 30 144 255		DodgerBlue
-  0 191 255		deep sky blue
-  0 191 255		DeepSkyBlue
-135 206 235		sky blue
-135 206 235		SkyBlue
-135 206 250		light sky blue
-135 206 250		LightSkyBlue
- 70 130 180		steel blue
- 70 130 180		SteelBlue
-176 196 222		light steel blue
-176 196 222		LightSteelBlue
-173 216 230		light blue
-173 216 230		LightBlue
-176 224 230		powder blue
-176 224 230		PowderBlue
-175 238 238		pale turquoise
-175 238 238		PaleTurquoise
-  0 206 209		dark turquoise
-  0 206 209		DarkTurquoise
- 72 209 204		medium turquoise
- 72 209 204		MediumTurquoise
- 64 224 208		turquoise
-  0 255 255		cyan
-224 255 255		light cyan
-224 255 255		LightCyan
- 95 158 160		cadet blue
- 95 158 160		CadetBlue
-102 205 170		medium aquamarine
-102 205 170		MediumAquamarine
-127 255 212		aquamarine
-  0 100   0		dark green
-  0 100   0		DarkGreen
- 85 107  47		dark olive green
- 85 107  47		DarkOliveGreen
-143 188 143		dark sea green
-143 188 143		DarkSeaGreen
- 46 139  87		sea green
- 46 139  87		SeaGreen
- 60 179 113		medium sea green
- 60 179 113		MediumSeaGreen
- 32 178 170		light sea green
- 32 178 170		LightSeaGreen
-152 251 152		pale green
-152 251 152		PaleGreen
-  0 255 127		spring green
-  0 255 127		SpringGreen
-124 252   0		lawn green
-124 252   0		LawnGreen
-  0 255   0		green
-127 255   0		chartreuse
-  0 250 154		medium spring green
-  0 250 154		MediumSpringGreen
-173 255  47		green yellow
-173 255  47		GreenYellow
- 50 205  50		lime green
- 50 205  50		LimeGreen
-154 205  50		yellow green
-154 205  50		YellowGreen
- 34 139  34		forest green
- 34 139  34		ForestGreen
-107 142  35		olive drab
-107 142  35		OliveDrab
-189 183 107		dark khaki
-189 183 107		DarkKhaki
-240 230 140		khaki
-238 232 170		pale goldenrod
-238 232 170		PaleGoldenrod
-250 250 210		light goldenrod yellow
-250 250 210		LightGoldenrodYellow
-255 255 224		light yellow
-255 255 224		LightYellow
-255 255   0		yellow
-255 215   0 		gold
-238 221 130		light goldenrod
-238 221 130		LightGoldenrod
-218 165  32		goldenrod
-184 134  11		dark goldenrod
-184 134  11		DarkGoldenrod
-188 143 143		rosy brown
-188 143 143		RosyBrown
-205  92  92		indian red
-205  92  92		IndianRed
-139  69  19		saddle brown
-139  69  19		SaddleBrown
-160  82  45		sienna
-205 133  63		peru
-222 184 135		burlywood
-245 245 220		beige
-245 222 179		wheat
-244 164  96		sandy brown
-244 164  96		SandyBrown
-210 180 140		tan
-210 105  30		chocolate
-178  34  34		firebrick
-165  42  42		brown
-233 150 122		dark salmon
-233 150 122		DarkSalmon
-250 128 114		salmon
-255 160 122		light salmon
-255 160 122		LightSalmon
-255 165   0		orange
-255 140   0		dark orange
-255 140   0		DarkOrange
-255 127  80		coral
-240 128 128		light coral
-240 128 128		LightCoral
-255  99  71		tomato
-255  69   0		orange red
-255  69   0		OrangeRed
-255   0   0		red
-255 105 180		hot pink
-255 105 180		HotPink
-255  20 147		deep pink
-255  20 147		DeepPink
-255 192 203		pink
-255 182 193		light pink
-255 182 193		LightPink
-219 112 147		pale violet red
-219 112 147		PaleVioletRed
-176  48  96		maroon
-199  21 133		medium violet red
-199  21 133		MediumVioletRed
-208  32 144		violet red
-208  32 144		VioletRed
-255   0 255		magenta
-238 130 238		violet
-221 160 221		plum
-218 112 214		orchid
-186  85 211		medium orchid
-186  85 211		MediumOrchid
-153  50 204		dark orchid
-153  50 204		DarkOrchid
-148   0 211		dark violet
-148   0 211		DarkViolet
-138  43 226		blue violet
-138  43 226		BlueViolet
-160  32 240		purple
-147 112 219		medium purple
-147 112 219		MediumPurple
-216 191 216		thistle
-255 250 250		snow1
-238 233 233		snow2
-205 201 201		snow3
-139 137 137		snow4
-255 245 238		seashell1
-238 229 222		seashell2
-205 197 191		seashell3
-139 134 130		seashell4
-255 239 219		AntiqueWhite1
-238 223 204		AntiqueWhite2
-205 192 176		AntiqueWhite3
-139 131 120		AntiqueWhite4
-255 228 196		bisque1
-238 213 183		bisque2
-205 183 158		bisque3
-139 125 107		bisque4
-255 218 185		PeachPuff1
-238 203 173		PeachPuff2
-205 175 149		PeachPuff3
-139 119 101		PeachPuff4
-255 222 173		NavajoWhite1
-238 207 161		NavajoWhite2
-205 179 139		NavajoWhite3
-139 121	 94		NavajoWhite4
-255 250 205		LemonChiffon1
-238 233 191		LemonChiffon2
-205 201 165		LemonChiffon3
-139 137 112		LemonChiffon4
-255 248 220		cornsilk1
-238 232 205		cornsilk2
-205 200 177		cornsilk3
-139 136 120		cornsilk4
-255 255 240		ivory1
-238 238 224		ivory2
-205 205 193		ivory3
-139 139 131		ivory4
-240 255 240		honeydew1
-224 238 224		honeydew2
-193 205 193		honeydew3
-131 139 131		honeydew4
-255 240 245		LavenderBlush1
-238 224 229		LavenderBlush2
-205 193 197		LavenderBlush3
-139 131 134		LavenderBlush4
-255 228 225		MistyRose1
-238 213 210		MistyRose2
-205 183 181		MistyRose3
-139 125 123		MistyRose4
-240 255 255		azure1
-224 238 238		azure2
-193 205 205		azure3
-131 139 139		azure4
-131 111 255		SlateBlue1
-122 103 238		SlateBlue2
-105  89 205		SlateBlue3
- 71  60 139		SlateBlue4
- 72 118 255		RoyalBlue1
- 67 110 238		RoyalBlue2
- 58  95 205		RoyalBlue3
- 39  64 139		RoyalBlue4
-  0   0 255		blue1
-  0   0 238		blue2
-  0   0 205		blue3
-  0   0 139		blue4
- 30 144 255		DodgerBlue1
- 28 134 238		DodgerBlue2
- 24 116 205		DodgerBlue3
- 16  78 139		DodgerBlue4
- 99 184 255		SteelBlue1
- 92 172 238		SteelBlue2
- 79 148 205		SteelBlue3
- 54 100 139		SteelBlue4
-  0 191 255		DeepSkyBlue1
-  0 178 238		DeepSkyBlue2
-  0 154 205		DeepSkyBlue3
-  0 104 139		DeepSkyBlue4
-135 206 255		SkyBlue1
-126 192 238		SkyBlue2
-108 166 205		SkyBlue3
- 74 112 139		SkyBlue4
-176 226 255		LightSkyBlue1
-164 211 238		LightSkyBlue2
-141 182 205		LightSkyBlue3
- 96 123 139		LightSkyBlue4
-198 226 255		SlateGray1
-185 211 238		SlateGray2
-159 182 205		SlateGray3
-108 123 139		SlateGray4
-202 225 255		LightSteelBlue1
-188 210 238		LightSteelBlue2
-162 181 205		LightSteelBlue3
-110 123 139		LightSteelBlue4
-191 239 255		LightBlue1
-178 223 238		LightBlue2
-154 192 205		LightBlue3
-104 131 139		LightBlue4
-224 255 255		LightCyan1
-209 238 238		LightCyan2
-180 205 205		LightCyan3
-122 139 139		LightCyan4
-187 255 255		PaleTurquoise1
-174 238 238		PaleTurquoise2
-150 205 205		PaleTurquoise3
-102 139 139		PaleTurquoise4
-152 245 255		CadetBlue1
-142 229 238		CadetBlue2
-122 197 205		CadetBlue3
- 83 134 139		CadetBlue4
-  0 245 255		turquoise1
-  0 229 238		turquoise2
-  0 197 205		turquoise3
-  0 134 139		turquoise4
-  0 255 255		cyan1
-  0 238 238		cyan2
-  0 205 205		cyan3
-  0 139 139		cyan4
-151 255 255		DarkSlateGray1
-141 238 238		DarkSlateGray2
-121 205 205		DarkSlateGray3
- 82 139 139		DarkSlateGray4
-127 255 212		aquamarine1
-118 238 198		aquamarine2
-102 205 170		aquamarine3
- 69 139 116		aquamarine4
-193 255 193		DarkSeaGreen1
-180 238 180		DarkSeaGreen2
-155 205 155		DarkSeaGreen3
-105 139 105		DarkSeaGreen4
- 84 255 159		SeaGreen1
- 78 238 148		SeaGreen2
- 67 205 128		SeaGreen3
- 46 139	 87		SeaGreen4
-154 255 154		PaleGreen1
-144 238 144		PaleGreen2
-124 205 124		PaleGreen3
- 84 139	 84		PaleGreen4
-  0 255 127		SpringGreen1
-  0 238 118		SpringGreen2
-  0 205 102		SpringGreen3
-  0 139	 69		SpringGreen4
-  0 255	  0		green1
-  0 238	  0		green2
-  0 205	  0		green3
-  0 139	  0		green4
-127 255	  0		chartreuse1
-118 238	  0		chartreuse2
-102 205	  0		chartreuse3
- 69 139	  0		chartreuse4
-192 255	 62		OliveDrab1
-179 238	 58		OliveDrab2
-154 205	 50		OliveDrab3
-105 139	 34		OliveDrab4
-202 255 112		DarkOliveGreen1
-188 238 104		DarkOliveGreen2
-162 205	 90		DarkOliveGreen3
-110 139	 61		DarkOliveGreen4
-255 246 143		khaki1
-238 230 133		khaki2
-205 198 115		khaki3
-139 134	 78		khaki4
-255 236 139		LightGoldenrod1
-238 220 130		LightGoldenrod2
-205 190 112		LightGoldenrod3
-139 129	 76		LightGoldenrod4
-255 255 224		LightYellow1
-238 238 209		LightYellow2
-205 205 180		LightYellow3
-139 139 122		LightYellow4
-255 255	  0		yellow1
-238 238	  0		yellow2
-205 205	  0		yellow3
-139 139	  0		yellow4
-255 215	  0		gold1
-238 201	  0		gold2
-205 173	  0		gold3
-139 117	  0		gold4
-255 193	 37		goldenrod1
-238 180	 34		goldenrod2
-205 155	 29		goldenrod3
-139 105	 20		goldenrod4
-255 185	 15		DarkGoldenrod1
-238 173	 14		DarkGoldenrod2
-205 149	 12		DarkGoldenrod3
-139 101	  8		DarkGoldenrod4
-255 193 193		RosyBrown1
-238 180 180		RosyBrown2
-205 155 155		RosyBrown3
-139 105 105		RosyBrown4
-255 106 106		IndianRed1
-238  99	 99		IndianRed2
-205  85	 85		IndianRed3
-139  58	 58		IndianRed4
-255 130	 71		sienna1
-238 121	 66		sienna2
-205 104	 57		sienna3
-139  71	 38		sienna4
-255 211 155		burlywood1
-238 197 145		burlywood2
-205 170 125		burlywood3
-139 115	 85		burlywood4
-255 231 186		wheat1
-238 216 174		wheat2
-205 186 150		wheat3
-139 126 102		wheat4
-255 165	 79		tan1
-238 154	 73		tan2
-205 133	 63		tan3
-139  90	 43		tan4
-255 127	 36		chocolate1
-238 118	 33		chocolate2
-205 102	 29		chocolate3
-139  69	 19		chocolate4
-255  48	 48		firebrick1
-238  44	 44		firebrick2
-205  38	 38		firebrick3
-139  26	 26		firebrick4
-255  64	 64		brown1
-238  59	 59		brown2
-205  51	 51		brown3
-139  35	 35		brown4
-255 140 105		salmon1
-238 130	 98		salmon2
-205 112	 84		salmon3
-139  76	 57		salmon4
-255 160 122		LightSalmon1
-238 149 114		LightSalmon2
-205 129	 98		LightSalmon3
-139  87	 66		LightSalmon4
-255 165	  0		orange1
-238 154	  0		orange2
-205 133	  0		orange3
-139  90	  0		orange4
-255 127	  0		DarkOrange1
-238 118	  0		DarkOrange2
-205 102	  0		DarkOrange3
-139  69	  0		DarkOrange4
-255 114	 86		coral1
-238 106	 80		coral2
-205  91	 69		coral3
-139  62	 47		coral4
-255  99	 71		tomato1
-238  92	 66		tomato2
-205  79	 57		tomato3
-139  54	 38		tomato4
-255  69	  0		OrangeRed1
-238  64	  0		OrangeRed2
-205  55	  0		OrangeRed3
-139  37	  0		OrangeRed4
-255   0	  0		red1
-238   0	  0		red2
-205   0	  0		red3
-139   0	  0		red4
-255  20 147		DeepPink1
-238  18 137		DeepPink2
-205  16 118		DeepPink3
-139  10	 80		DeepPink4
-255 110 180		HotPink1
-238 106 167		HotPink2
-205  96 144		HotPink3
-139  58  98		HotPink4
-255 181 197		pink1
-238 169 184		pink2
-205 145 158		pink3
-139  99 108		pink4
-255 174 185		LightPink1
-238 162 173		LightPink2
-205 140 149		LightPink3
-139  95 101		LightPink4
-255 130 171		PaleVioletRed1
-238 121 159		PaleVioletRed2
-205 104 137		PaleVioletRed3
-139  71	 93		PaleVioletRed4
-255  52 179		maroon1
-238  48 167		maroon2
-205  41 144		maroon3
-139  28	 98		maroon4
-255  62 150		VioletRed1
-238  58 140		VioletRed2
-205  50 120		VioletRed3
-139  34	 82		VioletRed4
-255   0 255		magenta1
-238   0 238		magenta2
-205   0 205		magenta3
-139   0 139		magenta4
-255 131 250		orchid1
-238 122 233		orchid2
-205 105 201		orchid3
-139  71 137		orchid4
-255 187 255		plum1
-238 174 238		plum2
-205 150 205		plum3
-139 102 139		plum4
-224 102 255		MediumOrchid1
-209  95 238		MediumOrchid2
-180  82 205		MediumOrchid3
-122  55 139		MediumOrchid4
-191  62 255		DarkOrchid1
-178  58 238		DarkOrchid2
-154  50 205		DarkOrchid3
-104  34 139		DarkOrchid4
-155  48 255		purple1
-145  44 238		purple2
-125  38 205		purple3
- 85  26 139		purple4
-171 130 255		MediumPurple1
-159 121 238		MediumPurple2
-137 104 205		MediumPurple3
- 93  71 139		MediumPurple4
-255 225 255		thistle1
-238 210 238		thistle2
-205 181 205		thistle3
-139 123 139		thistle4
-  0   0   0		gray0
-  0   0   0		grey0
-  3   3   3		gray1
-  3   3   3		grey1
-  5   5   5		gray2
-  5   5   5		grey2
-  8   8   8		gray3
-  8   8   8		grey3
- 10  10  10 		gray4
- 10  10  10 		grey4
- 13  13  13 		gray5
- 13  13  13 		grey5
- 15  15  15 		gray6
- 15  15  15 		grey6
- 18  18  18 		gray7
- 18  18  18 		grey7
- 20  20  20 		gray8
- 20  20  20 		grey8
- 23  23  23 		gray9
- 23  23  23 		grey9
- 26  26  26 		gray10
- 26  26  26 		grey10
- 28  28  28 		gray11
- 28  28  28 		grey11
- 31  31  31 		gray12
- 31  31  31 		grey12
- 33  33  33 		gray13
- 33  33  33 		grey13
- 36  36  36 		gray14
- 36  36  36 		grey14
- 38  38  38 		gray15
- 38  38  38 		grey15
- 41  41  41 		gray16
- 41  41  41 		grey16
- 43  43  43 		gray17
- 43  43  43 		grey17
- 46  46  46 		gray18
- 46  46  46 		grey18
- 48  48  48 		gray19
- 48  48  48 		grey19
- 51  51  51 		gray20
- 51  51  51 		grey20
- 54  54  54 		gray21
- 54  54  54 		grey21
- 56  56  56 		gray22
- 56  56  56 		grey22
- 59  59  59 		gray23
- 59  59  59 		grey23
- 61  61  61 		gray24
- 61  61  61 		grey24
- 64  64  64 		gray25
- 64  64  64 		grey25
- 66  66  66 		gray26
- 66  66  66 		grey26
- 69  69  69 		gray27
- 69  69  69 		grey27
- 71  71  71 		gray28
- 71  71  71 		grey28
- 74  74  74 		gray29
- 74  74  74 		grey29
- 77  77  77 		gray30
- 77  77  77 		grey30
- 79  79  79 		gray31
- 79  79  79 		grey31
- 82  82  82 		gray32
- 82  82  82 		grey32
- 84  84  84 		gray33
- 84  84  84 		grey33
- 87  87  87 		gray34
- 87  87  87 		grey34
- 89  89  89 		gray35
- 89  89  89 		grey35
- 92  92  92 		gray36
- 92  92  92 		grey36
- 94  94  94 		gray37
- 94  94  94 		grey37
- 97  97  97 		gray38
- 97  97  97 		grey38
- 99  99  99 		gray39
- 99  99  99 		grey39
-102 102 102 		gray40
-102 102 102 		grey40
-105 105 105 		gray41
-105 105 105 		grey41
-107 107 107 		gray42
-107 107 107 		grey42
-110 110 110 		gray43
-110 110 110 		grey43
-112 112 112 		gray44
-112 112 112 		grey44
-115 115 115 		gray45
-115 115 115 		grey45
-117 117 117 		gray46
-117 117 117 		grey46
-120 120 120 		gray47
-120 120 120 		grey47
-122 122 122 		gray48
-122 122 122 		grey48
-125 125 125 		gray49
-125 125 125 		grey49
-127 127 127 		gray50
-127 127 127 		grey50
-130 130 130 		gray51
-130 130 130 		grey51
-133 133 133 		gray52
-133 133 133 		grey52
-135 135 135 		gray53
-135 135 135 		grey53
-138 138 138 		gray54
-138 138 138 		grey54
-140 140 140 		gray55
-140 140 140 		grey55
-143 143 143 		gray56
-143 143 143 		grey56
-145 145 145 		gray57
-145 145 145 		grey57
-148 148 148 		gray58
-148 148 148 		grey58
-150 150 150 		gray59
-150 150 150 		grey59
-153 153 153 		gray60
-153 153 153 		grey60
-156 156 156 		gray61
-156 156 156 		grey61
-158 158 158 		gray62
-158 158 158 		grey62
-161 161 161 		gray63
-161 161 161 		grey63
-163 163 163 		gray64
-163 163 163 		grey64
-166 166 166 		gray65
-166 166 166 		grey65
-168 168 168 		gray66
-168 168 168 		grey66
-171 171 171 		gray67
-171 171 171 		grey67
-173 173 173 		gray68
-173 173 173 		grey68
-176 176 176 		gray69
-176 176 176 		grey69
-179 179 179 		gray70
-179 179 179 		grey70
-181 181 181 		gray71
-181 181 181 		grey71
-184 184 184 		gray72
-184 184 184 		grey72
-186 186 186 		gray73
-186 186 186 		grey73
-189 189 189 		gray74
-189 189 189 		grey74
-191 191 191 		gray75
-191 191 191 		grey75
-194 194 194 		gray76
-194 194 194 		grey76
-196 196 196 		gray77
-196 196 196 		grey77
-199 199 199 		gray78
-199 199 199 		grey78
-201 201 201 		gray79
-201 201 201 		grey79
-204 204 204 		gray80
-204 204 204 		grey80
-207 207 207 		gray81
-207 207 207 		grey81
-209 209 209 		gray82
-209 209 209 		grey82
-212 212 212 		gray83
-212 212 212 		grey83
-214 214 214 		gray84
-214 214 214 		grey84
-217 217 217 		gray85
-217 217 217 		grey85
-219 219 219 		gray86
-219 219 219 		grey86
-222 222 222 		gray87
-222 222 222 		grey87
-224 224 224 		gray88
-224 224 224 		grey88
-227 227 227 		gray89
-227 227 227 		grey89
-229 229 229 		gray90
-229 229 229 		grey90
-232 232 232 		gray91
-232 232 232 		grey91
-235 235 235 		gray92
-235 235 235 		grey92
-237 237 237 		gray93
-237 237 237 		grey93
-240 240 240 		gray94
-240 240 240 		grey94
-242 242 242 		gray95
-242 242 242 		grey95
-245 245 245 		gray96
-245 245 245 		grey96
-247 247 247 		gray97
-247 247 247 		grey97
-250 250 250 		gray98
-250 250 250 		grey98
-252 252 252 		gray99
-252 252 252 		grey99
-255 255 255 		gray100
-255 255 255 		grey100
-169 169 169		dark grey
-169 169 169		DarkGrey
-169 169 169		dark gray
-169 169 169		DarkGray
-0     0 139		dark blue
-0     0 139		DarkBlue
-0   139 139		dark cyan
-0   139 139		DarkCyan
-139   0 139		dark magenta
-139   0 139		DarkMagenta
-139   0   0		dark red
-139   0   0		DarkRed
-144 238 144		light green
-144 238 144		LightGreen
--- a/DoConfig/fltk/test/rotated_text.cxx
+++ /dev/null
@@ -1,219 +1,0 @@
-//
-// "$Id$"
-//
-// Label test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Hor_Value_Slider.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
-
-#include <math.h>
-#ifndef M_PI
-#define M_PI 3.141592654
-#endif
-
-Fl_Toggle_Button *leftb,*rightb,*clipb;
-//Fl_Box *text;
-Fl_Input *input;
-Fl_Hor_Value_Slider *fonts;
-Fl_Hor_Value_Slider *sizes;
-Fl_Hor_Value_Slider *angles;
-Fl_Double_Window *window;
-
-//code taken from fl_engraved_label.cxx
-class Rotated_Label_Box : public Fl_Widget{
-  protected:
-  void draw(){
-    draw_box();
-    fl_font(labelfont(), labelsize());
-    fl_color(labelcolor());
-    int dx(0),dy(0);
-     
-    if(rt_align&FL_ALIGN_CLIP)fl_push_clip(x(),y(),w(),h());
-    else fl_push_no_clip();
-    fl_measure(rt_text,dx,dy);
-    if(rt_align&FL_ALIGN_LEFT){
-      dx=dy=0;
-    }else if(rt_align&FL_ALIGN_RIGHT){
-      dy=(int)(-sin(M_PI*(double)(rt_angle+180)/180.)*(double)dx);
-      dx=(int)(cos(M_PI*(double)(rt_angle+180)/180.)*(double)dx);
-    }else{
-      dy=(int)(sin(M_PI*(double)rt_angle/180.)*(double)dx);
-      dx=(int)(-cos(M_PI*(double)rt_angle/180.)*(double)dx);
-      dx/=2;dy/=2;
-    }
-    if(labeltype()==FL_SHADOW_LABEL)shadow_label(x()+w()/2+dx,y()+h()/2+dy);
-    else if(labeltype()==FL_ENGRAVED_LABEL)engraved_label(x()+w()/2+dx,y()+h()/2+dy);
-    else if(labeltype()==FL_EMBOSSED_LABEL)embossed_label(x()+w()/2+dx,y()+h()/2+dy);
-    else{
-     fl_draw(rt_angle,rt_text,x()+w()/2+dx,y()+h()/2+dy);
-    }
-    fl_pop_clip();
-    draw_label();
-  }
-  void innards(int X, int Y, int data[][3], int n){
-    for (int i = 0; i < n; i++) {
-      fl_color((Fl_Color)(i < n-1 ? data[i][2] : labelcolor()));
-      fl_draw(rt_angle,rt_text, X+data[i][0], Y+data[i][1]);
-    }
-  }
-
-  void shadow_label(int X, int Y){
-    static int data[2][3] = {{2,2,FL_DARK3},{0,0,0}};
-    innards(X, Y, data, 2);
-  }
-
-  void engraved_label(int X, int Y){
-    static int data[7][3] = {
-      {1,0,FL_LIGHT3},{1,1,FL_LIGHT3},{0,1,FL_LIGHT3},
-      {-1,0,FL_DARK3},{-1,-1,FL_DARK3},{0,-1,FL_DARK3},
-      {0,0,0}};
-    innards(X, Y, data, 7);
-  }
-
-  void embossed_label(int X, int Y){
-    static int data[7][3] = {
-      {-1,0,FL_LIGHT3},{-1,-1,FL_LIGHT3},{0,-1,FL_LIGHT3},
-      {1,0,FL_DARK3},{1,1,FL_DARK3},{0,1,FL_DARK3},
-      {0,0,0}};
-    innards(X, Y, data, 7);
-  }
-
-  public:
-  Rotated_Label_Box(int X, int Y, int W, int H, const char*L=0):
-    Fl_Widget(X,Y,W,H,L),rt_angle(0),rt_align((Fl_Align)0){
-      rt_text=input->value();
-    };
-  int rt_angle;
-  const char* rt_text;
-  Fl_Align rt_align;
-}*text;
-
-
-void button_cb(Fl_Widget *,void *) {
-  int i = 0;
-  if (leftb->value()) i |= FL_ALIGN_LEFT;
-  if (rightb->value()) i |= FL_ALIGN_RIGHT;
-  if (clipb->value()) i |= FL_ALIGN_CLIP;
-  text->rt_align=(Fl_Align)i;
-  window->redraw();
-}
-
-void font_cb(Fl_Widget *,void *) {
-  text->labelfont(int(fonts->value()));
-  window->redraw();
-}
-
-void size_cb(Fl_Widget *,void *) {
-  text->labelsize(int(sizes->value()));
-  window->redraw();
-}
-void angle_cb(Fl_Widget *,void *) {
-  text->rt_angle=(int)angles->value();
-  window->redraw();
-}
-
-void input_cb(Fl_Widget *,void *) {
-  text->rt_text=input->value();
-  window->redraw();
-}
-
-void normal_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_NORMAL_LABEL);
-  window->redraw();
-}
-
-void shadow_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_SHADOW_LABEL);
-  window->redraw();
-}
-
-void embossed_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_EMBOSSED_LABEL);
-  window->redraw();
-}
-
-void engraved_cb(Fl_Widget *,void *) {
-  text->labeltype(FL_ENGRAVED_LABEL);
-  window->redraw();
-}
-
-Fl_Menu_Item choices[] = {
-  {"FL_NORMAL_LABEL",0,normal_cb},
-  {"FL_SHADOW_LABEL",0,shadow_cb},
-  {"FL_ENGRAVED_LABEL",0,engraved_cb},
-  {"FL_EMBOSSED_LABEL",0,embossed_cb},
-  {0}};
-
-int main(int argc, char **argv) {
-  window = new Fl_Double_Window(400,425);
-
-  angles= new Fl_Hor_Value_Slider(50,400,350,25,"Angle:");
-  angles->align(FL_ALIGN_LEFT);
-  angles->bounds(-360,360);
-  angles->step(1);
-  angles->value(0);
-  angles->callback(angle_cb);
-
-  input = new Fl_Input(50,375,350,25);
-  input->static_value("Rotate Me!!!");
-  input->when(FL_WHEN_CHANGED);
-  input->callback(input_cb);
-
-  sizes= new Fl_Hor_Value_Slider(50,350,350,25,"Size:");
-  sizes->align(FL_ALIGN_LEFT);
-  sizes->bounds(1,64);
-  sizes->step(1);
-  sizes->value(14);
-  sizes->callback(size_cb);
-
-  fonts=new Fl_Hor_Value_Slider(50,325,350,25,"Font:");
-  fonts->align(FL_ALIGN_LEFT);
-  fonts->bounds(0,15);
-  fonts->step(1);
-  fonts->value(0);
-  fonts->callback(font_cb);
-
-  Fl_Group *g = new Fl_Group(50,300,350,25);
-  leftb = new Fl_Toggle_Button(50,300,50,25,"left");
-  leftb->callback(button_cb);
-  rightb = new Fl_Toggle_Button(100,300,50,25,"right");
-  rightb->callback(button_cb);
-  clipb = new Fl_Toggle_Button(350,300,50,25,"clip");
-  clipb->callback(button_cb);
-  g->resizable(rightb);
-  g->end();
-
-  Fl_Choice *c = new Fl_Choice(50,275,200,25);
-  c->menu(choices);
-
-  text= new Rotated_Label_Box(100,75,200,100,"Widget with rotated text");
-  text->box(FL_FRAME_BOX);
-  text->align(FL_ALIGN_BOTTOM);
-  window->resizable(text);
-  window->end();
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/scroll.cxx
+++ /dev/null
@@ -1,135 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Scroll test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Box.H>
-#include <string.h>
-#include <stdio.h>
-#include <FL/fl_draw.H>
-#include <FL/math.h>
-
-class Drawing : public Fl_Widget {
-  void draw();
-public:
-  Drawing(int X,int Y,int W,int H,const char* L) : Fl_Widget(X,Y,W,H,L) {
-    align(FL_ALIGN_TOP);
-    box(FL_FLAT_BOX);
-    color(FL_WHITE);
-  }
-};
-
-void Drawing::draw() {
-  draw_box();
-  fl_push_matrix();
-  fl_translate(x()+w()/2, y()+h()/2);
-  fl_scale(w()/2, h()/2);
-  fl_color(FL_BLACK);
-  for (int i = 0; i < 20; i++) {
-    for (int j = i+1; j < 20; j++) {
-      fl_begin_line();
-      fl_vertex(cos(M_PI*i/10+.1), sin(M_PI*i/10+.1));
-      fl_vertex(cos(M_PI*j/10+.1), sin(M_PI*j/10+.1));
-      fl_end_line();
-    }
-  }
-  fl_pop_matrix();
-}
-
-Fl_Scroll* thescroll;
-
-void box_cb(Fl_Widget* o, void*) {
-  thescroll->box(((Fl_Button*)o)->value() ? FL_DOWN_FRAME : FL_NO_BOX);
-  thescroll->redraw();
-}
-
-void type_cb(Fl_Widget*, void* v) {
-  thescroll->type((uchar)((fl_intptr_t)v));
-  thescroll->redraw();
-}
-
-Fl_Menu_Item choices[] = {
-  {"0", 0, type_cb, (void*)0},
-  {"HORIZONTAL", 0, type_cb, (void*)Fl_Scroll::HORIZONTAL},
-  {"VERTICAL", 0, type_cb, (void*)Fl_Scroll::VERTICAL},
-  {"BOTH", 0, type_cb, (void*)Fl_Scroll::BOTH},
-  {"HORIZONTAL_ALWAYS", 0, type_cb, (void*)Fl_Scroll::HORIZONTAL_ALWAYS},
-  {"VERTICAL_ALWAYS", 0, type_cb, (void*)Fl_Scroll::VERTICAL_ALWAYS},
-  {"BOTH_ALWAYS", 0, type_cb, (void*)Fl_Scroll::BOTH_ALWAYS},
-  {0}
-};
-
-void align_cb(Fl_Widget*, void* v) {
-  thescroll->scrollbar.align((uchar)((fl_intptr_t)v));
-  thescroll->redraw();
-}
-
-Fl_Menu_Item align_choices[] = {
-  {"left+top", 0, align_cb, (void*)(FL_ALIGN_LEFT+FL_ALIGN_TOP)},
-  {"left+bottom", 0, align_cb, (void*)(FL_ALIGN_LEFT+FL_ALIGN_BOTTOM)},
-  {"right+top", 0, align_cb, (void*)(FL_ALIGN_RIGHT+FL_ALIGN_TOP)},
-  {"right+bottom", 0, align_cb, (void*)(FL_ALIGN_RIGHT+FL_ALIGN_BOTTOM)},
-  {0}
-};
-
-int main(int argc, char** argv) {
-  Fl_Window window(5*75,400);
-  window.box(FL_NO_BOX);
-  Fl_Scroll scroll(0,0,5*75,300);
-
-  int n = 0;
-  for (int y=0; y<16; y++) for (int x=0; x<5; x++) {
-    char buf[20]; sprintf(buf,"%d",n++);
-    Fl_Button* b = new Fl_Button(x*75,y*25+(y>=8?5*75:0),75,25);
-    b->copy_label(buf);
-    b->color(n);
-    b->labelcolor(FL_WHITE);
-  }
-  Drawing drawing(0,8*25,5*75,5*75,0);
-  scroll.end();
-  window.resizable(scroll);
-
-  Fl_Box box(0,300,5*75,window.h()-300); // gray area below the scroll
-  box.box(FL_FLAT_BOX);
-
-  Fl_Light_Button but1(150, 310, 200, 25, "box");
-  but1.callback(box_cb);
-  
-  Fl_Choice choice(150, 335, 200, 25, "type():");
-  choice.menu(choices);
-  choice.value(3);
-
-  Fl_Choice achoice(150, 360, 200, 25, "scrollbar.align():");
-  achoice.menu(align_choices);
-  achoice.value(3);
-
-  thescroll = &scroll;
-
-  //scroll.box(FL_DOWN_BOX);
-  //scroll.type(Fl_Scroll::VERTICAL);
-  window.end();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/shape.cxx
+++ /dev/null
@@ -1,109 +1,0 @@
-//
-// "$Id$"
-//
-// Tiny OpenGL demo program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Hor_Slider.H>
-#include <FL/math.h>
-
-#if HAVE_GL
-
-#include <FL/gl.h>
-#include <FL/Fl_Gl_Window.H>
-
-class shape_window : public Fl_Gl_Window {
-  void draw();
-public:
-  int sides;
-  shape_window(int x,int y,int w,int h,const char *l=0);
-};
-
-shape_window::shape_window(int x,int y,int w,int h,const char *l) :
-Fl_Gl_Window(x,y,w,h,l) {
-  sides = 3;
-}
-
-void shape_window::draw() {
-// the valid() property may be used to avoid reinitializing your
-// GL transformation for each redraw:
-  if (!valid()) {
-    valid(1);
-    glLoadIdentity();
-    glViewport(0, 0, pixel_w(), pixel_h());
-  }
-// draw an amazing graphic:
-  glClear(GL_COLOR_BUFFER_BIT);
-  glColor3f(.5,.6,.7);
-  glBegin(GL_POLYGON);
-  for (int j=0; j<sides; j++) {
-    double ang = j*2*M_PI/sides;
-    glVertex3f(cos(ang),sin(ang),0);
-  }
-  glEnd();
-}
-
-#else
-
-#include <FL/Fl_Box.H>
-class shape_window : public Fl_Box {
-public:	
-  int sides;
-  shape_window(int x,int y,int w,int h,const char *l=0)
-    :Fl_Box(FL_DOWN_BOX,x,y,w,h,l){
-      label("This demo does\nnot work without GL");
-  }
-};
-
-#endif
-
-// when you change the data, as in this callback, you must call redraw():
-void sides_cb(Fl_Widget *o, void *p) {
-  shape_window *sw = (shape_window *)p;
-  sw->sides = int(((Fl_Slider *)o)->value());
-  sw->redraw();
-}
-
-int main(int argc, char **argv) {
-
-  Fl::use_high_res_GL(1);
-  Fl_Window window(300, 330);
-
-// the shape window could be it's own window, but here we make it
-// a child window:
-  shape_window sw(10, 10, 280, 280);
-// make it resize:
-  window.resizable(&sw);
-  //  window.size_range(300,330,0,0,1,1,1);
-// add a knob to control it:
-  Fl_Hor_Slider slider(50, 295, window.w()-60, 30, "Sides:");
-  slider.align(FL_ALIGN_LEFT);
-  slider.callback(sides_cb,&sw);
-  slider.value(sw.sides);
-  slider.step(1);
-  slider.bounds(3,40);
-
-  window.end();
-  window.show(argc,argv);
-    
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/subwindow.cxx
+++ /dev/null
@@ -1,182 +1,0 @@
-//
-// "$Id$"
-//
-// Nested window test program for the Fast Light Tool Kit (FLTK).
-//
-// Test to make sure nested windows work.
-// Events should be reported for enter/exit and all mouse operations
-// Buttons and pop-up menu should work, indicating that mouse positions
-// are being correctly translated.
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Toggle_Button.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Input.H>
-
-#ifdef DEBUG
-#include <FL/names.h>
-#endif
-
-// Define DEBUG_POS for a subwindow positioning test. This will draw
-// the last typed character at the cursor position, if no input widget
-// currently has the focus.
-// Note: The typed character is saved in the derived testwindow class,
-// regardless of the definition of DEBUG_POS. Only drawing the character
-// depends on this define.
-
-#ifdef DEBUG_POS
-#include <FL/fl_draw.H>
-#endif
-
-class EnterExit : public Fl_Box {
-  int handle(int);
-public:
-  EnterExit(int x, int y, int w, int h, const char *l) : Fl_Box(FL_BORDER_BOX,x,y,w,h,l) {}
-};
-
-int EnterExit::handle(int e) {
-  if (e == FL_ENTER) {color(FL_RED); redraw(); return 1;}
-  else if (e == FL_LEAVE) {color(FL_GRAY); redraw(); return 1;}
-  else return 0;
-}
-
-class testwindow : public Fl_Window {
-  int handle(int);
-  void draw();
-  int cx, cy; char key;
-  Fl_Cursor crsr;
-public:
-  testwindow(Fl_Boxtype b,int x,int y,const char *l)
-    : Fl_Window(x,y,l), crsr(FL_CURSOR_DEFAULT) {box(b); key = 0;}
-  testwindow(Fl_Boxtype b,int x,int y,int w,int h,const char *l)
-    : Fl_Window(x,y,w,h,l) {box(b); key = 0;}
-  void use_cursor(Fl_Cursor c) { crsr = c; }
-};
-
-void testwindow::draw() {
-#ifdef DEBUG
-  printf("%s : draw\n",label());
-#endif
-  Fl_Window::draw();
-#ifdef DEBUG_POS
-  if (key) fl_draw(&key, 1, cx, cy);
-#endif
-}
-
-int testwindow::handle(int e) {
-#ifdef DEBUG
-  if (e != FL_MOVE) printf("%s : %s\n",label(),fl_eventnames[e]);
-#endif
-  if (crsr!=FL_CURSOR_DEFAULT) {
-    if (e == FL_ENTER) 
-      cursor(crsr);
-    if (e == FL_LEAVE) 
-      cursor(FL_CURSOR_DEFAULT);
-  }
-  if (Fl_Window::handle(e)) return 1;
-  if (e == FL_FOCUS) return 1;
-  if (e == FL_PUSH) {Fl::focus(this); return 1;}
-  if (e == FL_KEYBOARD && Fl::event_text()[0]) {
-    key = Fl::event_text()[0];
-    cx = Fl::event_x();
-    cy = Fl::event_y();
-    redraw();
-    return 1;
-  }
-  return 0;
-}
-
-Fl_Menu_Button* popup;
-
-const char* bigmess =
-#if 1
-"this|is|only|a test"
-#else
-"item1|item2|item3|item4|item5|"
-"submenu/item1|submenu/item2|submenu/item3|submenu/item4|"
-"submenu/sub/item1|submenu/sub/item2|submenu/sub/item3|"
-"item6|item7|item8|item9|item10|"
-"item21|item22|item23|item24|item25|"
-"submenu/item21|submenu/item22|submenu/item23|submenu/item24|"
-"submenu/sub/item21|submenu/sub/item22|submenu/sub/item23|"
-"item36|item37|item38|item39|item310|"
-"item31|item32|item33|item34|item35|"
-"submenu/item31|submenu/item32|submenu/item33|submenu/item34|"
-"submenu/sub/item31|submenu/sub/item32|submenu/sub/item33|"
-"item46|item47|item48|item49|item410|"
-"item41|item42|item43|item44|item45|"
-"submenu/item41|submenu/item42|submenu/item43|submenu/item44|"
-"submenu/sub/item41|submenu/sub/item42|submenu/sub/item43|"
-"item26|item27|item28|item29|item210|"
-"submenu2/item1|submenu2/item2|submenu2/item3|submenu2/item4|"
-"submenu2/sub/item1|submenu2/sub/item2|submenu2/sub/item3|"
-"item6|item7|item8|item9|item10|"
-"item21|item22|item23|item24|item25|"
-"submenu2/item21|submenu2/item22|submenu2/item23|submenu2/item24|"
-"submenu2/sub/item21|submenu2/sub/item22|submenu2/sub/item23|"
-"item36|item37|item38|item39|item310|"
-"item31|item32|item33|item34|item35|"
-"submenu2/item31|submenu2/item32|submenu2/item33|submenu2/item34|"
-"submenu2/sub/item31|submenu2/sub/item32|submenu2/sub/item33|"
-"item46|item47|item48|item49|item410|"
-"item41|item42|item43|item44|item45|"
-"submenu2/item41|submenu2/item42|submenu2/item43|submenu2/item44|"
-"submenu2/sub/item41|submenu2/sub/item42|submenu2/sub/item43|"
-"item26|item27|item28|item29|item210|"
-#endif
-;
-
-int main(int argc, char **argv) {
-  testwindow *window =
-    new testwindow(FL_UP_BOX,400,400,"outer");
-  new Fl_Toggle_Button(310,310,80,80,"&outer");
-  new EnterExit(10,310,80,80,"enterexit");
-  new Fl_Input(160,310,140,25,"input1:");
-  new Fl_Input(160,340,140,25,"input2:");
-  (new Fl_Menu_Button(5,150,80,25,"menu&1"))->add(bigmess);
-  testwindow *subwindow =
-    new testwindow(FL_DOWN_BOX,100,100,200,200,"inner");
-  new Fl_Toggle_Button(110,110,80,80,"&inner");
-  new EnterExit(10,110,80,80,"enterexit");
-  (new Fl_Menu_Button(50,20,80,25,"menu&2"))->add(bigmess);
-  new Fl_Input(55,50,140,25,"input1:");
-  new Fl_Input(55,80,140,25,"input2:");
-  subwindow->resizable(subwindow);
-  window->resizable(subwindow);
-  subwindow->end();
-  subwindow->use_cursor(FL_CURSOR_HAND);
-  (new Fl_Box(FL_NO_BOX,0,0,400,100,
-	     "A child Fl_Window with children of its own may "
-	     "be useful for imbedding controls into a GL or display "
-	     "that needs a different visual.  There are bugs with the "
-	     "origins being different between drawing and events, "
-	     "which I hope I have solved."
-	     )) -> align(FL_ALIGN_WRAP);
-  popup = new Fl_Menu_Button(0,0,400,400);
-  popup->type(Fl_Menu_Button::POPUP3);
-  popup->add("This|is|a popup|menu");
-  popup->add(bigmess);
-  window->show(argc, argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/sudoku.app/Contents/Info.plist
+++ /dev/null
@@ -1,47 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<plist version="0.9">
-    <dict>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-
-	<key>CFBundleExecutable</key>
-	<string>sudoku</string>
-
-	<key>CFBundleIdentifier</key>
-	<string>org.fltk.sudoku</string>
-
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright 2005-2006 by Michael Sweet</string>
-
-	<key>CFAppleHelpAnchor</key>
-	<string>help</string>
-
-	<key>CFBundleName</key>
-	<string>sudoku</string>
-
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-
-	<key>CFBundleSignature</key>
-	<string>FLSU</string>
-
-	<key>CFBundleIconFile</key>
-	<string>sudoku.icns</string>
-
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-
-	<key>CFBundleGetInfoString</key>
-	<string>1.0, Copyright 2005-2006 by Michael Sweet</string>
-
-	<key>NSHighResolutionCapable</key>
-	<true/>
-
-    </dict>
-</plist>
--- a/DoConfig/fltk/test/sudoku.app/Contents/PkgInfo
+++ /dev/null
@@ -1,1 +1,0 @@
-FLSUFlsu
binary files a/DoConfig/fltk/test/sudoku.app/Contents/Resources/sudoku.icns /dev/null differ
--- a/DoConfig/fltk/test/sudoku.cxx
+++ /dev/null
@@ -1,1341 +1,0 @@
-//
-// "$Id$"
-//
-// Sudoku game using the Fast Light Tool Kit (FLTK).
-//
-// Copyright 2005-2010 by Michael Sweet.
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Enumerations.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Group.H>
-#include <FL/fl_ask.H>
-#include <FL/fl_draw.H>
-#include <FL/Fl_Help_Dialog.H>
-#include <FL/Fl_Preferences.H>
-#include <FL/Fl_Sys_Menu_Bar.H>
-#include <FL/x.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <FL/math.h>
-
-#ifdef WIN32
-#  include "sudokurc.h"
-#elif !defined(__APPLE__)
-#  include "pixmaps/sudoku.xbm"
-#endif // WIN32
-
-// Audio headers...
-#include <config.h>
-
-#ifndef WIN32
-#  include <unistd.h>
-#endif // !WIN32
-
-#ifdef HAVE_ALSA_ASOUNDLIB_H
-#  define ALSA_PCM_NEW_HW_PARAMS_API
-#  include <alsa/asoundlib.h>
-#endif // HAVE_ALSA_ASOUNDLIB_H
-#ifdef __APPLE__
-#  include <CoreAudio/AudioHardware.h>
-#endif // __APPLE__
-#ifdef WIN32
-#  include <mmsystem.h>
-#endif // WIN32
-
-
-//
-// Default sizes...
-//
-
-#define GROUP_SIZE	160
-#define CELL_SIZE	50
-#define CELL_OFFSET	5
-#ifdef __APPLE__
-#  define MENU_OFFSET	0
-#else
-#  define MENU_OFFSET	25
-#endif // __APPLE__
-
-// Sound class for Sudoku...
-//
-// There are MANY ways to implement sound in a FLTK application.
-// The approach we are using here is to conditionally compile OS-
-// specific code into the application - CoreAudio for MacOS X, the
-// standard Win32 API stuff for Windows, ALSA or X11 for Linux, and
-// X11 for all others.  We have to support ALSA on Linux because the
-// current Xorg releases no longer support XBell() or the PC speaker.
-//
-// There are several good cross-platform audio libraries we could also
-// use, such as OpenAL, PortAudio, and SDL, however they were not chosen
-// for this application because of our limited use of sound.
-//
-// Many thanks to Ian MacArthur who provided sample code that led to
-// the CoreAudio implementation you see here!
-class SudokuSound {
-  // Private, OS-specific data...
-#ifdef __APPLE__
-  AudioDeviceID device;
-#ifndef MAC_OS_X_VERSION_10_5
-#define MAC_OS_X_VERSION_10_5 1050
-#endif
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  AudioDeviceIOProcID audio_proc_id;
-#  endif
-  AudioStreamBasicDescription format;
-  short *data;
-  int remaining;
-
-  static OSStatus audio_cb(AudioDeviceID device,
-			   const AudioTimeStamp *current_time,
-			   const AudioBufferList *data_in,
-			   const AudioTimeStamp *time_in,
-			   AudioBufferList *data_out,
-			   const AudioTimeStamp *time_out,
-			   void *client_data);
-#elif defined(WIN32)
-  HWAVEOUT	device;
-  HGLOBAL	header_handle;
-  LPWAVEHDR	header_ptr;
-  HGLOBAL	data_handle;
-  LPSTR		data_ptr;
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  snd_pcm_t *handle;
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  // Common data...
-  static int frequencies[9];
-  static short *sample_data[9];
-  static int sample_size;
-
-  public:
-
-  SudokuSound();
-  ~SudokuSound();
-
-  void	play(char note);
-};
-
-
-// Sudoku cell class...
-class SudokuCell : public Fl_Widget {
-  bool		readonly_;
-  int		value_;
-  int		test_value_[9];
-
-  public:
-
-		SudokuCell(int X, int Y, int W, int H);
-  void		draw();
-  int		handle(int event);
-  void		readonly(bool r) { readonly_ = r; redraw(); }
-  bool		readonly() const { return readonly_; }
-  void		test_value(int v, int n) { test_value_[n] = v; redraw(); }
-  int		test_value(int n) const { return test_value_[n]; }
-  void		value(int v) {
-		  value_ = v;
-		  for (int i = 0; i < 8; i ++) test_value_[i] = 0;
-		  redraw();
-		}
-  int		value() const { return value_; }
-};
-
-
-// Sudoku window class...
-class Sudoku : public Fl_Double_Window {
-  Fl_Sys_Menu_Bar *menubar_;
-  Fl_Group	*grid_;
-  time_t	seed_;
-  char		grid_values_[9][9];
-  SudokuCell	*grid_cells_[9][9];
-  Fl_Group	*grid_groups_[3][3];
-  int		difficulty_;
-  SudokuSound	*sound_;
-
-  static void	check_cb(Fl_Widget *widget, void *);
-  static void	close_cb(Fl_Widget *widget, void *);
-  static void	diff_cb(Fl_Widget *widget, void *d);
-  static void	update_helpers_cb(Fl_Widget *, void *);
-  static void	help_cb(Fl_Widget *, void *);
-  static void	mute_cb(Fl_Widget *widget, void *);
-  static void	new_cb(Fl_Widget *widget, void *);
-  static void	reset_cb(Fl_Widget *widget, void *);
-  static void	restart_cb(Fl_Widget *widget, void *);
-  void		set_title();
-  static void	solve_cb(Fl_Widget *widget, void *);
-
-  static Fl_Help_Dialog *help_dialog_;
-  static Fl_Preferences	prefs_;
-  public:
-
-	      	Sudoku();
-		~Sudoku();
-
-  void		check_game(bool highlight = true);
-  void		load_game();
-  void		new_game(time_t seed);
-  int		next_value(SudokuCell *c);
-  void		resize(int X, int Y, int W, int H);
-  void		save_game();
-  void		solve_game();
-  void	        update_helpers();
-};
-
-
-// Sound class globals...
-int SudokuSound::frequencies[9] = {
-  880,	// A(5)
-  988,	// B(5)
-  1046,	// C(5)
-  1174,	// D(5)
-  1318,	// E(5)
-  1396,	// F(5)
-  1568,	// G(5)
-  1760,	// H (A6)
-  1976	// I (B6)
-};
-short *SudokuSound::sample_data[9] = { 0 };
-int SudokuSound::sample_size = 0;
-
-
-// Initialize the SudokuSound class
-SudokuSound::SudokuSound() {
-  sample_size = 0;
-
-#ifdef __APPLE__
-  remaining = 0;
-
-  UInt32 size = sizeof(device);
-
-  if (AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice,
-			       &size, (void *)&device) != noErr) return;
-
-  size = sizeof(format);
-  if (AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyStreamFormat,
-			     &size, &format) != noErr) return;
-
-  // Set up a format we like...
-  format.mSampleRate       = 44100.0;	// 44.1kHz
-  format.mChannelsPerFrame = 2;		// stereo
-
-  if (AudioDeviceSetProperty(device, NULL, 0, false,
-                             kAudioDevicePropertyStreamFormat,
-	                     sizeof(format), &format) != noErr) return;
-
-  // Check we got linear pcm - what to do if we did not ???
-  if (format.mFormatID != kAudioFormatLinearPCM) return;
-
-  // Attach the callback and start the device
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-  if (AudioDeviceCreateIOProcID(device, audio_cb, (void *)this, &audio_proc_id) != noErr) return;
-  AudioDeviceStart(device, audio_proc_id);
-#  else
-  if (AudioDeviceAddIOProc(device, audio_cb, (void *)this) != noErr) return;
-  AudioDeviceStart(device, audio_cb);
-#  endif
-  
-  sample_size = (int)format.mSampleRate / 20;
-
-#elif defined(WIN32)
-  WAVEFORMATEX	format;
-
-  memset(&format, 0, sizeof(format));
-  format.cbSize          = sizeof(format);
-  format.wFormatTag      = WAVE_FORMAT_PCM;
-  format.nChannels       = 2;
-  format.nSamplesPerSec  = 44100;
-  format.nAvgBytesPerSec = 44100 * 4;
-  format.nBlockAlign     = 4;
-  format.wBitsPerSample  = 16;
-
-  data_handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, format.nSamplesPerSec / 5);
-  if (!data_handle) return;
-
-  data_ptr = (LPSTR)GlobalLock(data_handle);
-
-  header_handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(WAVEHDR));
-  if (!header_handle) return;
-
-  header_ptr = (WAVEHDR *)GlobalLock(header_handle);
-
-  header_ptr->lpData         = data_ptr;
-  header_ptr->dwBufferLength = format.nSamplesPerSec / 5;
-  header_ptr->dwFlags        = 0;
-  header_ptr->dwLoops        = 0;
-
-  if (waveOutOpen(&device, WAVE_MAPPER, &format, 0, 0, WAVE_ALLOWSYNC)
-          != MMSYSERR_NOERROR) return;
-
-  waveOutPrepareHeader(device, header_ptr, sizeof(WAVEHDR));
-
-  sample_size = 44100 / 20;
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  handle = NULL;
-
-  if (snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0) >= 0) {
-    // Initialize PCM sound stuff...
-    snd_pcm_hw_params_t *params;
-
-    snd_pcm_hw_params_alloca(&params);
-    snd_pcm_hw_params_any(handle, params);
-    snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED);
-    snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16);
-    snd_pcm_hw_params_set_channels(handle, params, 2);
-    unsigned rate = 44100;
-    int dir;
-    snd_pcm_hw_params_set_rate_near(handle, params, &rate, &dir);
-    snd_pcm_uframes_t period = (int)rate / 4;
-    snd_pcm_hw_params_set_period_size_near(handle, params, &period, &dir);
-
-    sample_size = rate / 20;
-
-    if (snd_pcm_hw_params(handle, params) < 0) {
-      sample_size = 0;
-      snd_pcm_close(handle);
-      handle = NULL;
-    }
-  }
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  if (sample_size) {
-    // Make each of the notes using a combination of sine and sawtooth waves
-    int attack = sample_size / 10;
-    int decay = 4 * sample_size / 5;
-
-    for (int i = 0; i < 9; i ++) {
-      sample_data[i] = new short[2 * sample_size];
-
-      short *sample_ptr = sample_data[i];
-
-      for (int j = 0; j < sample_size; j ++, sample_ptr += 2) {
-        double theta = 0.05 * frequencies[i] * j / sample_size;
-        double val = 0.5 * sin(2.0 * M_PI * theta) + theta - (int)theta - 0.5;
-
-        if (j < attack) {
-	  *sample_ptr = (int)(32767 * val * j / attack);
-	} else if (j > decay) {
-	  *sample_ptr = (int)(32767 * val * (sample_size - j + decay) /
-	                      sample_size);
-	} else *sample_ptr = (int)(32767 * val);
-
-        sample_ptr[1] = *sample_ptr;
-      }
-    }
-  }
-}
-
-
-// Cleanup the SudokuSound class
-SudokuSound::~SudokuSound() {
-#ifdef __APPLE__
-  if (sample_size) {
-#  if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-    AudioDeviceStop(device, audio_proc_id);
-    AudioDeviceDestroyIOProcID(device, audio_proc_id);
-#  else
-    AudioDeviceStop(device, audio_cb);
-    AudioDeviceRemoveIOProc(device, audio_cb);
-#  endif
-  }
-
-#elif defined(WIN32)
-  if (sample_size) {
-    waveOutClose(device);
-
-    GlobalUnlock(header_handle);
-    GlobalFree(header_handle);
-
-    GlobalUnlock(data_handle);
-    GlobalFree(data_handle);
-  }
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  if (handle) {
-    snd_pcm_drain(handle);
-    snd_pcm_close(handle);
-  }
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-#endif // __APPLE__
-
-  if (sample_size) {
-    for (int i = 0; i < 9; i ++) {
-      delete[] sample_data[i];
-    }
-  }
-}
-
-
-#ifdef __APPLE__
-// Callback function for writing audio data...
-OSStatus
-SudokuSound::audio_cb(AudioDeviceID device,
-		      const AudioTimeStamp *current_time,
-		      const AudioBufferList *data_in,
-		      const AudioTimeStamp *time_in,
-		      AudioBufferList *data_out,
-		      const AudioTimeStamp *time_out,
-		      void *client_data) {
-  SudokuSound *ss = (SudokuSound *)client_data;
-  int count;
-  float *buffer;
-
-  if (!ss->remaining) return noErr;
-
-  for (count = data_out->mBuffers[0].mDataByteSize / sizeof(float),
-          buffer = (float*) data_out->mBuffers[0].mData;
-       ss->remaining > 0 && count > 0;
-       count --, ss->data ++, ss->remaining --) {
-    *buffer++ = *(ss->data) / 32767.0;
-  }
-
-  while (count > 0) {
-    *buffer++ = 0.0;
-    count --;
-  }
-
-  return noErr;
-}
-#endif // __APPLE__
-
-#define NOTE_DURATION 50
-
-// Play a note for <NOTE_DURATION> ms...
-void SudokuSound::play(char note) {
-  Fl::check();
-
-#ifdef __APPLE__
-  // Point to the next note...
-  data      = sample_data[note - 'A'];
-  remaining = sample_size * 2;
-
-  // Wait for the sound to complete...
-  usleep(NOTE_DURATION*1000);
-
-#elif defined(WIN32)
-  if (sample_size) {
-    memcpy(data_ptr, sample_data[note - 'A'], sample_size * 4);
-
-    waveOutWrite(device, header_ptr, sizeof(WAVEHDR));
-
-    Sleep(NOTE_DURATION);
-  } else Beep(frequencies[note - 'A'], NOTE_DURATION);
-
-#else
-#  ifdef HAVE_ALSA_ASOUNDLIB_H
-  if (handle) {
-    // Use ALSA to play the sound...
-    if (snd_pcm_writei(handle, sample_data[note - 'A'], sample_size) < 0) {
-      snd_pcm_prepare(handle);
-      snd_pcm_writei(handle, sample_data[note - 'A'], sample_size);
-    }
-    usleep(NOTE_DURATION*1000);
-    return;
-  }
-#  endif // HAVE_ALSA_ASOUNDLIB_H
-
-  // Just use standard X11 stuff...
-  XKeyboardState	state;
-  XKeyboardControl	control;
-
-  // Get original pitch and duration...
-  XGetKeyboardControl(fl_display, &state);
-
-  // Sound a tone for the given note...
-  control.bell_percent  = 100;
-  control.bell_pitch    = frequencies[note - 'A'];
-  control.bell_duration = NOTE_DURATION;
-
-  XChangeKeyboardControl(fl_display,
-                         KBBellPercent | KBBellPitch | KBBellDuration,
-			 &control);
-  XBell(fl_display, 100);
-  XFlush(fl_display);
-
-  // Restore original pitch and duration...
-  control.bell_percent  = state.bell_percent;
-  control.bell_pitch    = state.bell_pitch;
-  control.bell_duration = state.bell_duration;
-
-  XChangeKeyboardControl(fl_display,
-                         KBBellPercent | KBBellPitch | KBBellDuration,
-			 &control);
-#endif // __APPLE__
-}
-
-
-// Create a cell widget
-SudokuCell::SudokuCell(int X, int Y, int W, int H)
-  : Fl_Widget(X, Y, W, H, 0) {
-  value(0);
-}
-
-
-// Draw cell
-void
-SudokuCell::draw() {
-  static Fl_Align align[8] = {
-    FL_ALIGN_TOP_LEFT,
-    FL_ALIGN_TOP,
-    FL_ALIGN_TOP_RIGHT,
-    FL_ALIGN_RIGHT,
-    FL_ALIGN_BOTTOM_RIGHT,
-    FL_ALIGN_BOTTOM,
-    FL_ALIGN_BOTTOM_LEFT,
-    FL_ALIGN_LEFT
-  };
-
-
-  // Draw the cell box...
-  if (readonly()) fl_draw_box(FL_UP_BOX, x(), y(), w(), h(), color());
-  else fl_draw_box(FL_DOWN_BOX, x(), y(), w(), h(), color());
-
-  // Draw the cell background...
-  if (Fl::focus() == this) {
-    Fl_Color c = fl_color_average(FL_SELECTION_COLOR, color(), 0.5f);
-    fl_color(c);
-    fl_rectf(x() + 4, y() + 4, w() - 8, h() - 8);
-    fl_color(fl_contrast(labelcolor(), c));
-  } else fl_color(labelcolor());
-
-  // Draw the cell value...
-  char s[2];
-
-  s[1] = '\0';
-
-  if (value_) {
-    s[0] = value_ + '0';
-
-    fl_font(FL_HELVETICA_BOLD, h() - 10);
-    fl_draw(s, x(), y(), w(), h(), FL_ALIGN_CENTER);
-  }
-
-  fl_font(FL_HELVETICA_BOLD, h() / 5);
-
-  for (int i = 0; i < 8; i ++) {
-    if (test_value_[i]) {
-      s[0] = test_value_[i] + '0';
-      fl_draw(s, x() + 5, y() + 5, w() - 10, h() - 10, align[i]);
-    }
-  }
-}
-
-
-// Handle events in cell
-int
-SudokuCell::handle(int event) {
-  switch (event) {
-    case FL_FOCUS :
-      Fl::focus(this);
-      redraw();
-      return 1;
-
-    case FL_UNFOCUS :
-      redraw();
-      return 1;
-
-    case FL_PUSH :
-      if (!readonly() && Fl::event_inside(this)) {
-        if (Fl::event_clicks()) {
-	  // 2+ clicks increments/sets value
-	  if (value()) {
-	    if (value() < 9) value(value() + 1);
-	    else value(1);
-	  } else value(((Sudoku *)window())->next_value(this));
-	}
-
-        Fl::focus(this);
-	redraw();
-	return 1;
-      }
-      break;
-
-    case FL_KEYDOWN :
-      if (Fl::event_state() & FL_CTRL) break;
-      int key = Fl::event_key() - '0';
-      if (key < 0 || key > 9) key = Fl::event_key() - FL_KP - '0';
-      if (key > 0 && key <= 9) {
-        if (readonly()) {
-          fl_beep(FL_BEEP_ERROR);
-          return 1;
-        }
-
-        if (Fl::event_state() & (FL_SHIFT | FL_CAPS_LOCK)) {
-	  int i;
-
-	  for (i = 0; i < 8; i ++)
-	    if (test_value_[i] == key) {
-	      test_value_[i] = 0;
-	      break;
-	    }
-
-          if (i >= 8) {
-	    for (i = 0; i < 8; i ++)
-	      if (!test_value_[i]) {
-		test_value_[i] = key;
-		break;
-	      }
-	  }
-
-	  if (i >= 8) {
-	    for (i = 0; i < 7; i ++) test_value_[i] = test_value_[i + 1];
-	    test_value_[i] = key;
-	  }
-
-	  redraw();
-	} else {
-	  value(key);
-	  do_callback();
-	}
-	return 1;
-      } else if (key == 0 || Fl::event_key() == FL_BackSpace ||
-                 Fl::event_key() == FL_Delete) {
-        if (readonly()) {
-          fl_beep(FL_BEEP_ERROR);
-          return 1;
-        }
-
-        value(0);
-	do_callback();
-	return 1;
-      }
-      break;
-  }
-
-  return Fl_Widget::handle(event);
-}
-
-
-// Sudoku class globals...
-Fl_Help_Dialog	*Sudoku::help_dialog_ = (Fl_Help_Dialog *)0;
-Fl_Preferences	Sudoku::prefs_(Fl_Preferences::USER, "fltk.org", "sudoku");
-
-
-// Create a Sudoku game window...
-Sudoku::Sudoku()
-  : Fl_Double_Window(GROUP_SIZE * 3, GROUP_SIZE * 3 + MENU_OFFSET, "Sudoku")
-{
-  int j, k;
-  Fl_Group *g;
-  SudokuCell *cell;
-  static Fl_Menu_Item	items[] = {
-    { "&Game", 0, 0, 0, FL_SUBMENU },
-    { "&New Game", FL_COMMAND | 'n', new_cb, 0, FL_MENU_DIVIDER },
-    { "&Check Game", FL_COMMAND | 'c', check_cb, 0, 0 },
-    { "&Restart Game", FL_COMMAND | 'r', restart_cb, 0, 0 },
-    { "&Solve Game", FL_COMMAND | 's', solve_cb, 0, FL_MENU_DIVIDER },
-    { "&Update Helpers", 0, update_helpers_cb, 0, 0 },
-    { "&Mute Sound", FL_COMMAND | 'm', mute_cb, 0, FL_MENU_TOGGLE | FL_MENU_DIVIDER },
-    { "&Quit", FL_COMMAND | 'q', close_cb, 0, 0 },
-    { 0 },
-    { "&Difficulty", 0, 0, 0, FL_SUBMENU },
-    { "&Easy", 0, diff_cb, (void *)"0", FL_MENU_RADIO },
-    { "&Medium", 0, diff_cb, (void *)"1", FL_MENU_RADIO },
-    { "&Hard", 0, diff_cb, (void *)"2", FL_MENU_RADIO },
-    { "&Impossible", 0, diff_cb, (void *)"3", FL_MENU_RADIO },
-    { 0 },
-    { "&Help", 0, 0, 0, FL_SUBMENU },
-    { "&About Sudoku", FL_F + 1, help_cb, 0, 0 },
-    { 0 },
-    { 0 }
-  };
-
-
-  // Setup sound output...
-  prefs_.get("mute_sound", j, 0);
-  if (j) {
-    // Mute sound?
-    sound_ = NULL;
-    items[6].flags |= FL_MENU_VALUE;
-  } else sound_ = new SudokuSound();
-
-  // Menubar...
-  prefs_.get("difficulty", difficulty_, 0);
-  if (difficulty_ < 0 || difficulty_ > 3) difficulty_ = 0;
-
-  items[10 + difficulty_].flags |= FL_MENU_VALUE;
-
-  menubar_ = new Fl_Sys_Menu_Bar(0, 0, 3 * GROUP_SIZE, 25);
-  menubar_->menu(items);
-
-  // Create the grids...
-  grid_ = new Fl_Group(0, MENU_OFFSET, 3 * GROUP_SIZE, 3 * GROUP_SIZE);
-
-  for (j = 0; j < 3; j ++)
-    for (k = 0; k < 3; k ++) {
-      g = new Fl_Group(k * GROUP_SIZE, j * GROUP_SIZE + MENU_OFFSET,
-		       GROUP_SIZE, GROUP_SIZE);
-      g->box(FL_BORDER_BOX);
-      if ((int)(j == 1) ^ (int)(k == 1)) g->color(FL_DARK3);
-      else g->color(FL_DARK2);
-      g->end();
-
-      grid_groups_[j][k] = g;
-    }
-
-  for (j = 0; j < 9; j ++)
-    for (k = 0; k < 9; k ++) {
-      cell = new SudokuCell(k * CELL_SIZE + CELL_OFFSET +
-                                (k / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
-	                    j * CELL_SIZE + CELL_OFFSET + MENU_OFFSET +
-			        (j / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
-			    CELL_SIZE, CELL_SIZE);
-      cell->callback(reset_cb);
-      grid_cells_[j][k] = cell;
-    }
-
-  // Set icon for window (MacOS uses app bundle for icon...)
-#ifdef WIN32
-  icon((char *)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON)));
-#elif !defined(__APPLE__)
-  fl_open_display();
-  icon((char *)XCreateBitmapFromData(fl_display, DefaultRootWindow(fl_display),
-                                     (char *)sudoku_bits, sudoku_width,
-				     sudoku_height));
-#endif // WIN32
-
-  // Catch window close events...
-  callback(close_cb);
-
-  // Make the window resizable...
-  resizable(grid_);
-  size_range(3 * GROUP_SIZE, 3 * GROUP_SIZE + MENU_OFFSET, 0, 0, 5, 5, 1);
-
-  // Restore the previous window dimensions...
-  int X, Y, W, H;
-
-  if (prefs_.get("x", X, -1)) {
-    prefs_.get("y", Y, -1);
-    prefs_.get("width", W, 3 * GROUP_SIZE);
-    prefs_.get("height", H, 3 * GROUP_SIZE + MENU_OFFSET);
-
-    resize(X, Y, W, H);
-  }
-
-  set_title();
-}
-
-
-// Destroy the sudoku window...
-Sudoku::~Sudoku() {
-  if (sound_) delete sound_;
-}
-
-
-// Check for a solution to the game...
-void
-Sudoku::check_cb(Fl_Widget *widget, void *) {
-  ((Sudoku *)(widget->window()))->check_game();
-}
-
-
-// Check if the user has correctly solved the game...
-void
-Sudoku::check_game(bool highlight) {
-  bool empty = false;
-  bool correct = true;
-  int j, k, m;
-
-  // Check the game for right/wrong answers...
-  for (j = 0; j < 9; j ++)
-    for (k = 0; k < 9; k ++) {
-      SudokuCell *cell = grid_cells_[j][k];
-      int val = cell->value();
-
-      if (cell->readonly()) continue;
-
-      if (!val) empty = true;
-      else {
-        for (m = 0; m < 9; m ++)
-          if ((j != m && grid_cells_[m][k]->value() == val) ||
-	      (k != m && grid_cells_[j][m]->value() == val)) break;
-
-        if (m < 9) {
-          if (highlight) {
-	    cell->color(FL_YELLOW);
-	    cell->redraw();
-	  }
-
-	  correct = false;
-	} else if (highlight) {
-	  cell->color(FL_LIGHT3);
-	  cell->redraw();
-	}
-      }
-    }
-
-  // Check subgrids for duplicate numbers...
-  for (j = 0; j < 9; j += 3)
-    for (k = 0; k < 9; k += 3)
-      for (int jj = 0; jj < 3; jj ++)
-        for (int kk = 0; kk < 3; kk ++) {
-	  SudokuCell *cell = grid_cells_[j + jj][k + kk];
-	  int val = cell->value();
-
-	  if (cell->readonly() || !val) continue;
-
-          int jjj;
-
-          for (jjj = 0; jjj < 3; jjj ++) {
-	    int kkk;
-
-	    for (kkk = 0; kkk < 3; kkk ++)
-              if (jj != jjj && kk != kkk &&
-	          grid_cells_[j + jjj][k + kkk]->value() == val) break;
-
-            if (kkk < 3) break;
-	  }
-
-          if (jjj < 3) {
-            if (highlight) {
-	      cell->color(FL_YELLOW);
-	      cell->redraw();
-	    }
-
-	    correct = false;
-	  }
-	}
-
-  if (!empty && correct) {
-    // Success!
-    for (j = 0; j < 9; j ++) {
-      for (k = 0; k < 9; k ++) {
-	SudokuCell *cell = grid_cells_[j][k];
-	cell->color(FL_GREEN);
-	cell->readonly(1);
-      }
-
-      if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
-    }
-  }
-}
-
-
-// Close the window, saving the game first...
-void
-Sudoku::close_cb(Fl_Widget *widget, void *) {
-  Sudoku *s = (Sudoku *)(widget->window() ? widget->window() : widget);
-
-  s->save_game();
-  s->hide();
-
-  if (help_dialog_) help_dialog_->hide();
-}
-
-
-// Set the level of difficulty...
-void
-Sudoku::diff_cb(Fl_Widget *widget, void *d) {
-  Sudoku *s = (Sudoku *)(widget->window() ? widget->window() : widget);
-  int diff = atoi((char *)d);
-
-  if (diff != s->difficulty_) {
-    s->difficulty_ = diff;
-    s->new_game(s->seed_);
-    s->set_title();
-
-    if (diff > 1)
-    {
-      // Display a message about the higher difficulty levels for the
-      // Sudoku zealots of the world...
-      int val;
-
-      prefs_.get("difficulty_warning", val, 0);
-
-      if (!val)
-      {
-        prefs_.set("difficulty_warning", 1);
-	fl_alert("Note: 'Hard' and 'Impossible' puzzles may have more than "
-	         "one possible solution.\n"
-		 "This is not an error or bug.");
-      }
-    }
-
-    prefs_.set("difficulty", s->difficulty_);
-  }
-}
-
-// Update the little marker numbers in all cells
-void
-Sudoku::update_helpers_cb(Fl_Widget *widget, void *) {
-  Sudoku *s = (Sudoku *)(widget->window() ? widget->window() : widget);
-  s->update_helpers();
-}
-
-void
-Sudoku::update_helpers() {
-  int j, k, m;
-
-  // First we delete any entries that the user may have made
-  for (j = 0; j < 9; j ++) {
-    for (k = 0; k < 9; k ++) {
-      SudokuCell *cell = grid_cells_[j][k];
-      for (m = 0; m < 8; m ++) {
-        cell->test_value(0, m);
-      }
-    }
-  }
-
-  // Now go through all cells and find out, what we can not be
-  for (j = 0; j < 81; j ++) {
-    char taken[10] = { 0 };
-    // Find our destination cell
-    int row = j / 9;
-    int col = j % 9;
-    SudokuCell *dst_cell = grid_cells_[row][col];
-    if (dst_cell->value()) continue;
-    // Find all values already taken in this row
-    for (k = 0; k < 9; k ++) {
-      SudokuCell *cell = grid_cells_[row][k];
-      int v = cell->value();
-      if (v) taken[v] = 1;
-    }
-    // Find all values already taken in this column
-    for (k = 0; k < 9; k ++) {
-      SudokuCell *cell = grid_cells_[k][col];
-      int v = cell->value();
-      if (v) taken[v] = 1;
-    }
-    // Now find all values already taken in this square
-    int ro = (row / 3) * 3;
-    int co = (col / 3) * 3;
-    for (k = 0; k < 3; k ++) {
-      for (m = 0; m < 3; m ++) {
-        SudokuCell *cell = grid_cells_[ro + k][co + m];
-        int v = cell->value();
-        if (v) taken[v] = 1;
-      }
-    }
-    // transfer our findings to the markers
-    for (m = 1, k = 0; m <= 9; m ++) {
-      if (!taken[m])
-        dst_cell->test_value(m, k ++);
-    }
-  }
-}
-
-
-// Show the on-line help...
-void
-Sudoku::help_cb(Fl_Widget *, void *) {
-  if (!help_dialog_) {
-    help_dialog_ = new Fl_Help_Dialog();
-
-    help_dialog_->value(
-	"<HTML>\n"
-	"<HEAD>\n"
-	"<TITLE>Sudoku Help</TITLE>\n"
-	"</HEAD>\n"
-	"<BODY BGCOLOR='#ffffff'>\n"
-
-	"<H2>About the Game</H2>\n"
-
-	"<P>Sudoku (pronounced soo-dough-coo with the emphasis on the\n"
-        "first syllable) is a simple number-based puzzle/game played on a\n"
-	"9x9 grid that is divided into 3x3 subgrids. The goal is to enter\n"
-	"a number from 1 to 9 in each cell so that each number appears\n"
-	"only once in each column and row. In addition, each 3x3 subgrid\n"
-	"may only contain one of each number.</P>\n"
-
-	"<P>This version of the puzzle is copyright 2005-2010 by Michael R\n"
-	"Sweet.</P>\n"
-
-	"<P><B>Note:</B> The 'Hard' and 'Impossible' difficulty\n"
-	"levels generate Sudoku puzzles with multiple possible solutions.\n"
-	"While some purists insist that these cannot be called 'Sudoku'\n"
-	"puzzles, the author (me) has personally solved many such puzzles\n"
-	"in published/printed Sudoku books and finds them far more\n"
-	"interesting than the simple single solution variety. If you don't\n"
-	"like it, don't play with the difficulty set to 'High' or\n"
-	"'Impossible'.</P>\n"
-
-	"<H2>How to Play the Game</H2>\n"
-
-	"<P>At the start of a new game, Sudoku fills in a random selection\n"
-	"of cells for you - the number of cells depends on the difficulty\n"
-	"level you use. Click in any of the empty cells or use the arrow\n"
-	"keys to highlight individual cells and press a number from 1 to 9\n"
-	"to fill in the cell. To clear a cell, press 0, Delete, or\n"
-	"Backspace. When you have successfully completed all subgrids, the\n"
-	"entire puzzle is highlighted in green until you start a new\n"
-	"game.</P>\n"
-
-	"<P>As you work to complete the puzzle, you can display possible\n"
-	"solutions inside each cell by holding the Shift key and pressing\n"
-	"each number in turn. Repeat the process to remove individual\n"
-	"numbers, or press a number without the Shift key to replace them\n"
-	"with the actual number to use.</P>\n"
-	"</BODY>\n"
-    );
-  }
-
-  help_dialog_->show();
-}
-
-
-// Load the game from saved preferences...
-void
-Sudoku::load_game() {
-  // Load the current values and state of each grid...
-  memset(grid_values_, 0, sizeof(grid_values_));
-
-  bool solved = true;
-
-  for (int j = 0; j < 9; j ++)
-    for (int k = 0; k < 9; k ++) {
-      char name[255];
-      int val;
-
-      SudokuCell *cell = grid_cells_[j][k];
-
-      sprintf(name, "value%d.%d", j, k);
-      if (!prefs_.get(name, val, 0)) {
-        j = 9;
-	grid_values_[0][0] = 0;
-	break;
-      }
-
-      grid_values_[j][k] = val;
-
-      sprintf(name, "state%d.%d", j, k);
-      prefs_.get(name, val, 0);
-      cell->value(val);
- 
-      sprintf(name, "readonly%d.%d", j, k);
-      prefs_.get(name, val, 0);
-      cell->readonly(val != 0);
-
-      if (val) cell->color(FL_GRAY);
-      else {
-        cell->color(FL_LIGHT3);
-	solved = false;
-      }
-
-      for (int m = 0; m < 8; m ++) {
-	sprintf(name, "test%d%d.%d", m, j, k);
-	prefs_.get(name, val, 0);
-	cell->test_value(val, m);
-      }
-    }
-
-  // If we didn't load any values or the last game was solved, then
-  // create a new game automatically...
-  if (solved || !grid_values_[0][0]) new_game(time(NULL));
-  else check_game(false);
-}
-
-
-// Mute/unmute sound...
-void
-Sudoku::mute_cb(Fl_Widget *widget, void *) {
-  Sudoku *s = (Sudoku *)(widget->window() ? widget->window() : widget);
-
-  if (s->sound_) {
-    delete s->sound_;
-    s->sound_ = NULL;
-    prefs_.set("mute_sound", 1);
-  } else {
-    s->sound_ = new SudokuSound();
-    prefs_.set("mute_sound", 0);
-  }
-}
-
-
-// Create a new game...
-void
-Sudoku::new_cb(Fl_Widget *widget, void *) {
-  Sudoku *s = (Sudoku *)(widget->window() ? widget->window() : widget);
-
-  if (s->grid_cells_[0][0]->color() != FL_GREEN) {
-    if (!fl_choice("Are you sure you want to change the difficulty level and "
-                   "discard the current game?", "Keep Current Game", "Start New Game",
-                   NULL)) return;
-  }
-
-  s->new_game(time(NULL));
-}
-
-
-// Create a new game...
-void
-Sudoku::new_game(time_t seed) {
-  int j, k, m, n, t, count;
-
-
-  // Generate a new (valid) Sudoku grid...
-  seed_ = seed;
-  srand((unsigned int)seed);
-
-  memset(grid_values_, 0, sizeof(grid_values_));
-
-  for (j = 0; j < 9; j += 3) {
-    for (k = 0; k < 9; k += 3) {
-      for (t = 1; t <= 9; t ++) {
-	for (count = 0; count < 20; count ++) {
-	  m = j + (rand() % 3);
-	  n = k + (rand() % 3);
-	  if (!grid_values_[m][n]) {
-	    int mm;
-
-	    for (mm = 0; mm < m; mm ++)
-	      if (grid_values_[mm][n] == t) break;
-
-	    if (mm < m) continue;
-
-	    int nn;
-
-	    for (nn = 0; nn < n; nn ++)
-	      if (grid_values_[m][nn] == t) break;
-
-	    if (nn < n) continue;
-
-	    grid_values_[m][n] = t;
-	    break;
-	  }
-	}
-
-	if (count == 20) {
-	  // Unable to find a valid puzzle so far, so start over...
-	  k = 9;
-	  j = -3;
-	  memset(grid_values_, 0, sizeof(grid_values_));
-	}
-      }
-    }
-  }
-
-  // Start by making all cells editable
-  SudokuCell *cell;
-
-  for (j = 0; j < 9; j ++)
-    for (k = 0; k < 9; k ++) {
-      cell = grid_cells_[j][k];
-
-      cell->value(0);
-      cell->readonly(0);
-      cell->color(FL_LIGHT3);
-    }
-
-  // Show N cells...
-  count = 11 * (5 - difficulty_);
-
-  int numbers[9];
-
-  for (j = 0; j < 9; j ++) numbers[j] = j + 1;
-
-  while (count > 0) {
-    for (j = 0; j < 20; j ++) {
-      k          = rand() % 9;
-      m          = rand() % 9;
-      t          = numbers[k];
-      numbers[k] = numbers[m];
-      numbers[m] = t;
-    }
-
-    for (j = 0; count > 0 && j < 9; j ++) {
-      t = numbers[j];
-
-      for (k = 0; count > 0 && k < 9; k ++) {
-        cell = grid_cells_[j][k];
-
-        if (grid_values_[j][k] == t && !cell->readonly()) {
-	  cell->value(grid_values_[j][k]);
-	  cell->readonly(1);
-	  cell->color(FL_GRAY);
-
-	  count --;
-	  break;
-	}
-      }
-    }
-  }
-}
-
-
-// Return the next available value for a cell...
-int
-Sudoku::next_value(SudokuCell *c) {
-  int	j = 0, k = 0, m = 0, n = 0;
-
-
-  for (j = 0; j < 9; j ++) {
-    for (k = 0; k < 9; k ++)
-      if (grid_cells_[j][k] == c) break;
-
-    if (k < 9) break;
-  }
-
-  if (j == 9) return 1;
-
-  j -= j % 3;
-  k -= k % 3;
-
-  int numbers[9];
-
-  memset(numbers, 0, sizeof(numbers));
-
-  for (m = 0; m < 3; m ++)
-    for (n = 0; n < 3; n ++) {
-      c = grid_cells_[j + m][k + n];
-      if (c->value()) numbers[c->value() - 1] = 1;
-    }
-
-  for (j = 0; j < 9; j ++)
-    if (!numbers[j]) return j + 1;
-
-  return 1;
-}
-
-
-// Reset widget color to gray...
-void
-Sudoku::reset_cb(Fl_Widget *widget, void *) {
-  widget->color(FL_LIGHT3);
-  widget->redraw();
-  
-  ((Sudoku *)(widget->window()))->check_game(false);
-}
-
-
-// Resize the window...
-void
-Sudoku::resize(int X, int Y, int W, int H) {
-  // Resize the window...
-  Fl_Double_Window::resize(X, Y, W, H);
-
-  // Save the new window geometry...
-  prefs_.set("x", X);
-  prefs_.set("y", Y);
-  prefs_.set("width", W);
-  prefs_.set("height", H);
-}
-
-
-// Restart game from beginning...
-void
-Sudoku::restart_cb(Fl_Widget *widget, void *) {
-  Sudoku *s = (Sudoku *)(widget->window());
-  bool solved = true;
-
-  for (int j = 0; j < 9; j ++)
-    for (int k = 0; k < 9; k ++) {
-      SudokuCell *cell = s->grid_cells_[j][k];
-
-      if (!cell->readonly()) {
-        solved = false;
-        int v = cell->value();
-	cell->value(0);
-	cell->color(FL_LIGHT3);
-	if (v && s->sound_) s->sound_->play('A' + v - 1);
-      }
-    }
-
-  if (solved) s->new_game(s->seed_);
-}
-
-
-// Save the current game state...
-void
-Sudoku::save_game() {
-  // Save the current values and state of each grid...
-  for (int j = 0; j < 9; j ++)
-    for (int k = 0; k < 9; k ++) {
-      char name[255];
-      SudokuCell *cell = grid_cells_[j][k];
-
-      sprintf(name, "value%d.%d", j, k);
-      prefs_.set(name, grid_values_[j][k]);
-
-      sprintf(name, "state%d.%d", j, k);
-      prefs_.set(name, cell->value());
-
-      sprintf(name, "readonly%d.%d", j, k);
-      prefs_.set(name, cell->readonly());
-
-      for (int m = 0; m < 8; m ++) {
-	sprintf(name, "test%d%d.%d", m, j, k);
-	prefs_.set(name, cell->test_value(m));
-      }
-    }
-}
-
-
-// Set title of window...
-void
-Sudoku::set_title() {
-  static const char * const titles[] = {
-    "Sudoku - Easy",
-    "Sudoku - Medium",
-    "Sudoku - Hard",
-    "Sudoku - Impossible"
-  };
-
-  label(titles[difficulty_]);
-}
-
-
-// Solve the puzzle...
-void
-Sudoku::solve_cb(Fl_Widget *widget, void *) {
-  ((Sudoku *)(widget->window()))->solve_game();
-}
-
-
-// Solve the puzzle...
-void
-Sudoku::solve_game() {
-  int j, k;
-
-  for (j = 0; j < 9; j ++) {
-    for (k = 0; k < 9; k ++) {
-      SudokuCell *cell = grid_cells_[j][k];
-
-      cell->value(grid_values_[j][k]);
-      cell->readonly(1);
-      cell->color(FL_GRAY);
-    }
-
-    if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
-  }
-}
-
-
-// Main entry for game...
-int
-main(int argc, char *argv[]) {
-  Sudoku s;
-
-  // Show the game...
-  s.show(argc, argv);
-
-  // Load the previous game...
-  s.load_game();
-
-  // Run until the user quits...
-  return (Fl::run());
-}
-
-
-//
-// End of "$Id$".
-//
binary files a/DoConfig/fltk/test/sudoku.ico /dev/null differ
--- a/DoConfig/fltk/test/sudoku.rc
+++ /dev/null
@@ -1,72 +1,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#include "sudokurc.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-//#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "icons.h\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "\r\n"
-    "\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "#include ""afxres.h""\r\n"
-    "\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_ICON                ICON    DISCARDABLE     "sudoku.ico"
-#endif    // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
--- a/DoConfig/fltk/test/sudokurc.h
+++ /dev/null
@@ -1,16 +1,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by icons.rc
-//
-#define IDI_ICON                        101
-
-// Next default values for new objects
-// 
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        105
-#define _APS_NEXT_COMMAND_VALUE         40001
-#define _APS_NEXT_CONTROL_VALUE         1000
-#define _APS_NEXT_SYMED_VALUE           101
-#endif
-#endif
--- a/DoConfig/fltk/test/symbols.cxx
+++ /dev/null
@@ -1,150 +1,0 @@
-//
-// "$Id$"
-//
-// Symbol test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/fl_draw.H>
-
-int N = 0;
-#define W 70
-#define H 70
-#define ROWS 6
-#define COLS 6
-
-Fl_Double_Window *window;
-Fl_Value_Slider *orientation;
-Fl_Value_Slider *size;
-
-void slider_cb(Fl_Widget *, void *) {
-  static char buf[80];
-  int val = (int)orientation->value();
-  int sze = (int)size->value();
-  for (int i = window->children(); i--; ) {          // all window children
-    Fl_Widget *wc = window->child(i);
-    const char *l = (const char *)(wc->user_data());
-    if ( l && *l == '@' ) {                       // all children with '@'
-      l ++;
-      if ( wc->box() == FL_NO_BOX ) {             // ascii legend?
-        if (val&&sze) sprintf(buf, "@@%+d%d%s", sze, val, l);
-        else if (val) sprintf(buf, "@@%d%s", val, l);
-        else if (sze) sprintf(buf, "@@%+d%s", sze, l);
-        else          sprintf(buf, "@@%s", l);
-      } else {                                    // box with symbol
-        if (val&&sze) sprintf(buf, "@%+d%d%s", sze, val, l);
-        else if (val) sprintf(buf, "@%d%s", val, l);
-        else if (sze) sprintf(buf, "@%+d%s", sze, l);
-        else          sprintf(buf, "@%s", l);
-      }
-      wc->copy_label(buf);
-    }
-  }
-  window->redraw();
-}
-
-void bt(const char *name) {
-  int x = N%COLS;
-  int y = N/COLS;
-  char buf[255];
-  N++;
-  x = x*W+10;
-  y = y*H+10;
-  sprintf(buf, "@%s", name);
-  Fl_Box *a = new Fl_Box(x,y,W-20,H-20);
-  a->box(FL_NO_BOX);
-  a->copy_label(buf);
-  a->align(FL_ALIGN_BOTTOM);
-  a->labelsize(11);
-  a->user_data((void *)name);
-  Fl_Box *b = new Fl_Box(x,y,W-20,H-20);
-  b->box(FL_UP_BOX);
-  b->copy_label(name);
-  b->labelcolor(FL_DARK3);
-  b->user_data((void *)name);
-}
-
-int main(int argc, char ** argv) {
-  window = new Fl_Double_Window(COLS*W,ROWS*H+60);
-bt("@->");
-bt("@>");
-bt("@>>");
-bt("@>|");
-bt("@>[]");
-bt("@|>");
-bt("@<-");
-bt("@<");
-bt("@<<");
-bt("@|<");
-bt("@[]<");
-bt("@<|");
-bt("@<->");
-bt("@-->");
-bt("@+");
-bt("@->|");
-bt("@||");
-bt("@arrow");
-bt("@returnarrow");
-bt("@square");
-bt("@circle");
-bt("@line");
-bt("@menu");
-bt("@UpArrow");
-bt("@DnArrow");
-bt("@search");
-bt("@FLTK");
-bt("@filenew");
-bt("@fileopen");
-bt("@filesave");
-bt("@filesaveas");
-bt("@fileprint");
-bt("@refresh");
-bt("@reload");
-bt("@undo");
-bt("@redo");
-
-  orientation = new Fl_Value_Slider(
-    (int)(window->w()*.05+.5), window->h()-40,
-    (int)(window->w()*.42+.5), 16, "Orientation");
-  orientation->type(FL_HORIZONTAL);
-  orientation->range(0.0, 9.0);
-  orientation->value(0.0);
-  orientation->step(1);
-  orientation->callback(slider_cb, 0);
-
-  size = new Fl_Value_Slider(
-    (int)(window->w()*.53+.5), window->h()-40,
-    (int)(window->w()*.42+.5), 16, "Size");
-  size->type(FL_HORIZONTAL);
-  size->range(-3.0, 9.0);
-  size->value(0.0);
-  size->step(1);
-  size->callback(slider_cb, 0);
-
-  window->resizable(window);
-  window->show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/table.cxx
+++ /dev/null
@@ -1,493 +1,0 @@
-//
-// exercisetablerow -- Exercise all aspects of the Fl_Table_Row widget
-//
-
-#include <stdio.h>
-#include <string.h>
-#ifdef WIN32
-#include <stdlib.h>	// atoi
-#endif /*WIN32*/
-
-#include <FL/Fl.H>
-#include <FL/Fl_Window.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Choice.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_ask.H>
-#include <FL/Fl_Table_Row.H>
-
-// Simple demonstration class to derive from Fl_Table_Row
-class DemoTable : public Fl_Table_Row
-{
-private:
-    Fl_Color cell_bgcolor;				// color of cell's bg color
-    Fl_Color cell_fgcolor;				// color of cell's fg color
-
-protected:
-    void draw_cell(TableContext context,  		// table cell drawing
-    		   int R=0, int C=0, int X=0, int Y=0, int W=0, int H=0);
-    static void event_callback(Fl_Widget*, void*);
-    void event_callback2();				// callback for table events
-
-public:
-    DemoTable(int x, int y, int w, int h, const char *l=0) : Fl_Table_Row(x,y,w,h,l)
-    {
-        cell_bgcolor = FL_WHITE;
-        cell_fgcolor = FL_BLACK;
-        callback(&event_callback, (void*)this);
-	end();
-    }
-    ~DemoTable() { }
-    Fl_Color GetCellFGColor() const { return(cell_fgcolor); }
-    Fl_Color GetCellBGColor() const { return(cell_bgcolor); }
-    void SetCellFGColor(Fl_Color val) { cell_fgcolor = val; }
-    void SetCellBGColor(Fl_Color val) { cell_bgcolor = val; }
-};
-
-// Handle drawing all cells in table
-void DemoTable::draw_cell(TableContext context, 
-			  int R, int C, int X, int Y, int W, int H)
-{
-    static char s[40];
-    sprintf(s, "%d/%d", R, C);		// text for each cell
-
-    switch ( context )
-    {
-	case CONTEXT_STARTPAGE:
-	    fl_font(FL_HELVETICA, 16);
-	    return;
-
-	case CONTEXT_COL_HEADER:
-	    fl_push_clip(X, Y, W, H);
-	    {
-		fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, col_header_color());
-		fl_color(FL_BLACK);
-		fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-	    }
-	    fl_pop_clip();
-	    return;
-
-	case CONTEXT_ROW_HEADER:
-	    fl_push_clip(X, Y, W, H);
-	    {
-		fl_draw_box(FL_THIN_UP_BOX, X, Y, W, H, row_header_color());
-		fl_color(FL_BLACK);
-		fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-	    }
-	    fl_pop_clip();
-	    return;
-
-	case CONTEXT_CELL:
-	{
-	    fl_push_clip(X, Y, W, H);
-	    {
-	        // BG COLOR
-		fl_color( row_selected(R) ? selection_color() : cell_bgcolor);
-		fl_rectf(X, Y, W, H);
-
-		// TEXT
-		fl_color(cell_fgcolor);
-		fl_draw(s, X, Y, W, H, FL_ALIGN_CENTER);
-
-		// BORDER
-		fl_color(color()); 
-		fl_rect(X, Y, W, H);
-	    }
-	    fl_pop_clip();
-	    return;
-	}
-
-	case CONTEXT_TABLE:
-	    fprintf(stderr, "TABLE CONTEXT CALLED\n");
-	    return;
-
-	case CONTEXT_ENDPAGE:
-	case CONTEXT_RC_RESIZE:
-	case CONTEXT_NONE:
-	    return;
-    }
-}
-
-// Callback whenever someone clicks on different parts of the table
-void DemoTable::event_callback(Fl_Widget*, void *data)
-{
-    DemoTable *o = (DemoTable*)data;
-    o->event_callback2();
-}
-
-void DemoTable::event_callback2()
-{
-    int R = callback_row(),
-        C = callback_col();
-    TableContext context = callback_context();
-    printf("'%s' callback: ", (label() ? label() : "?"));
-    printf("Row=%d Col=%d Context=%d Event=%d InteractiveResize? %d\n",
-	    R, C, (int)context, (int)Fl::event(), (int)is_interactive_resize());
-}
-
-// GLOBAL TABLE WIDGET
-static DemoTable *G_table = 0;
-
-void setrows_cb(Fl_Widget*, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int rows = atoi(in->value());
-    if ( rows < 0 ) rows = 0;
-    G_table->rows(rows);
-}
-
-void setcols_cb(Fl_Widget*, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int cols = atoi(in->value());
-    if ( cols < 0 ) cols = 0;
-    G_table->cols(cols);
-}
-
-void setrowheader_cb(Fl_Widget*, void *data)
-{
-    Fl_Check_Button *check = (Fl_Check_Button*)data;
-    G_table->row_header(check->value());
-}
-
-void setcolheader_cb(Fl_Widget*, void *data)
-{
-    Fl_Check_Button *check = (Fl_Check_Button*)data;
-    G_table->col_header(check->value());
-}
-
-void setrowresize_cb(Fl_Widget*, void *data)
-{
-    Fl_Check_Button *check = (Fl_Check_Button*)data;
-    G_table->row_resize(check->value());
-}
-
-void setcolresize_cb(Fl_Widget*, void *data)
-{
-    Fl_Check_Button *check = (Fl_Check_Button*)data;
-    G_table->col_resize(check->value());
-}
-
-void setpositionrow_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int toprow = atoi(in->value());
-    if ( toprow < 0 || toprow >= G_table->rows() ) 
-        { fl_alert("Must be in range 0 thru #rows"); }
-    else
-        { G_table->row_position(toprow); }
-}
-
-void setpositioncol_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int leftcol = atoi(in->value());
-    if ( leftcol < 0 || leftcol >= G_table->cols() ) 
-        { fl_alert("Must be in range 0 thru #cols"); }
-    else
-        { G_table->col_position(leftcol); }
-}
-
-void setrowheaderwidth_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 1 ) { val = 1; in->value("1"); }
-    G_table->row_header_width(val);
-}
-
-void setcolheaderheight_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 1 ) { val = 1; in->value("1"); }
-    G_table->col_header_height(val);
-}
-
-void setrowheadercolor_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { fl_alert("Must be a color >0"); }
-    else { G_table->row_header_color(Fl_Color(val)); }
-}
-
-void setcolheadercolor_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { fl_alert("Must be a color >0"); }
-    else { G_table->col_header_color(Fl_Color(val)); }
-}
-
-void setrowheightall_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { val = 0; in->value("0"); }
-    G_table->row_height_all(val);
-}
-
-void setcolwidthall_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { val = 0; in->value("0"); }
-    G_table->col_width_all(val);
-}
-
-void settablecolor_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { fl_alert("Must be a color >0"); }
-    else { G_table->color(Fl_Color(val)); }
-    G_table->redraw();
-}
-
-void setcellfgcolor_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { fl_alert("Must be a color >0"); }
-    else { G_table->SetCellFGColor(Fl_Color(val)); }
-    G_table->redraw();
-}
-
-void setcellbgcolor_cb(Fl_Widget *w, void *data)
-{
-    Fl_Input *in = (Fl_Input*)data;
-    int val = atoi(in->value());
-    if ( val < 0 ) { fl_alert("Must be a color >0"); }
-    else { G_table->SetCellBGColor(Fl_Color(val)); }
-    G_table->redraw();
-}
-
-char *itoa(int val)
-{
-    static char s[80];
-    sprintf(s, "%d", val);
-    return(s);
-}
-
-void tablebox_choice_cb(Fl_Widget *w, void *data)
-{
-    G_table->table_box((Fl_Boxtype)(fl_intptr_t)data);
-    G_table->redraw();
-}
-
-void widgetbox_choice_cb(Fl_Widget *w, void *data)
-{
-    G_table->box((Fl_Boxtype)(fl_intptr_t)data);
-    G_table->resize(G_table->x(), G_table->y(), G_table->w(), G_table->h());
-}
-
-void type_choice_cb(Fl_Widget *w, void *data)
-{
-    G_table->type((Fl_Table_Row::TableRowSelectMode)(fl_intptr_t)data);
-}
-
-Fl_Menu_Item tablebox_choices[] = {
-  {"No Box",         0, tablebox_choice_cb, (void*)FL_NO_BOX },
-  {"Flat Box",       0, tablebox_choice_cb, (void*)FL_FLAT_BOX },
-  {"Up Box",         0, tablebox_choice_cb, (void*)FL_UP_BOX },
-  {"Down Box",       0, tablebox_choice_cb, (void*)FL_DOWN_BOX },
-  {"Up Frame",       0, tablebox_choice_cb, (void*)FL_UP_FRAME },
-  {"Down Frame",     0, tablebox_choice_cb, (void*)FL_DOWN_FRAME },
-  {"Thin Up Box",    0, tablebox_choice_cb, (void*)FL_THIN_UP_BOX },
-  {"Thin Down Box",  0, tablebox_choice_cb, (void*)FL_THIN_DOWN_BOX },
-  {"Thin Up Frame",  0, tablebox_choice_cb, (void*)FL_THIN_UP_FRAME },
-  {"Thin Down Frame",0, tablebox_choice_cb, (void*)FL_THIN_DOWN_FRAME },
-  {"Engraved Box",   0, tablebox_choice_cb, (void*)FL_ENGRAVED_BOX },
-  {"Embossed Box",   0, tablebox_choice_cb, (void*)FL_EMBOSSED_BOX },
-  {"Engraved Frame", 0, tablebox_choice_cb, (void*)FL_ENGRAVED_FRAME },
-  {"Embossed Frame", 0, tablebox_choice_cb, (void*)FL_EMBOSSED_FRAME },
-  {"Border Box",     0, tablebox_choice_cb, (void*)FL_BORDER_BOX },
-  {"Shadow Box",     0, tablebox_choice_cb, (void*)FL_SHADOW_BOX },
-  {"Border Frame",   0, tablebox_choice_cb, (void*)FL_BORDER_FRAME },
-  {0}
-};
-
-Fl_Menu_Item widgetbox_choices[] = {
-  {"No Box",         0, widgetbox_choice_cb, (void*)FL_NO_BOX },
-//{"Flat Box",       0, widgetbox_choice_cb, (void*)FL_FLAT_BOX },
-//{"Up Box",         0, widgetbox_choice_cb, (void*)FL_UP_BOX },
-//{"Down Box",       0, widgetbox_choice_cb, (void*)FL_DOWN_BOX },
-  {"Up Frame",       0, widgetbox_choice_cb, (void*)FL_UP_FRAME },
-  {"Down Frame",     0, widgetbox_choice_cb, (void*)FL_DOWN_FRAME },
-//{"Thin Up Box",    0, widgetbox_choice_cb, (void*)FL_THIN_UP_BOX },
-//{"Thin Down Box",  0, widgetbox_choice_cb, (void*)FL_THIN_DOWN_BOX },
-  {"Thin Up Frame",  0, widgetbox_choice_cb, (void*)FL_THIN_UP_FRAME },
-  {"Thin Down Frame",0, widgetbox_choice_cb, (void*)FL_THIN_DOWN_FRAME },
-//{"Engraved Box",   0, widgetbox_choice_cb, (void*)FL_ENGRAVED_BOX },
-//{"Embossed Box",   0, widgetbox_choice_cb, (void*)FL_EMBOSSED_BOX },
-  {"Engraved Frame", 0, widgetbox_choice_cb, (void*)FL_ENGRAVED_FRAME },
-  {"Embossed Frame", 0, widgetbox_choice_cb, (void*)FL_EMBOSSED_FRAME },
-//{"Border Box",     0, widgetbox_choice_cb, (void*)FL_BORDER_BOX },
-//{"Shadow Box",     0, widgetbox_choice_cb, (void*)FL_SHADOW_BOX },
-  {"Border Frame",   0, widgetbox_choice_cb, (void*)FL_BORDER_FRAME },
-  {0}
-};
-
-Fl_Menu_Item type_choices[] = {
-  {"SelectNone",         0, type_choice_cb, (void*)Fl_Table_Row::SELECT_NONE },
-  {"SelectSingle",       0, type_choice_cb, (void*)Fl_Table_Row::SELECT_SINGLE },
-  {"SelectMulti",        0, type_choice_cb, (void*)Fl_Table_Row::SELECT_MULTI },
-  {0}
-};
-
-int main(int argc, char **argv)
-{
-    Fl_Window win(900, 730);
-
-    G_table = new DemoTable(20, 20, 860, 460, "Demo");
-    G_table->selection_color(FL_YELLOW);
-    G_table->when(FL_WHEN_RELEASE|FL_WHEN_CHANGED);
-    G_table->table_box(FL_NO_BOX);
-    G_table->col_resize_min(4);
-    G_table->row_resize_min(4);
-
-    // ROWS
-    G_table->row_header(1);
-    G_table->row_header_width(60);
-    G_table->row_resize(1);
-    G_table->rows(500);
-    G_table->row_height_all(20);
-
-    // COLS
-    G_table->cols(500);
-    G_table->col_header(1);
-    G_table->col_header_height(25);
-    G_table->col_resize(1);
-    G_table->col_width_all(80);
-
-    // Add children to window
-    win.begin();
-
-    // ROW
-    Fl_Input setrows(150, 500, 120, 25, "Rows");
-    setrows.labelsize(12);
-    setrows.value(itoa(G_table->rows()));
-    setrows.callback(setrows_cb, (void*)&setrows);
-    setrows.when(FL_WHEN_RELEASE);
-
-    Fl_Input rowheightall(400, 500, 120, 25, "Row Height");
-    rowheightall.labelsize(12);
-    rowheightall.value(itoa(G_table->row_height(0)));
-    rowheightall.callback(setrowheightall_cb, (void*)&rowheightall);
-    rowheightall.when(FL_WHEN_RELEASE);
-
-    Fl_Input positionrow(650, 500, 120, 25, "Row Position");
-    positionrow.labelsize(12);
-    positionrow.value("1");
-    positionrow.callback(setpositionrow_cb, (void*)&positionrow);
-    positionrow.when(FL_WHEN_RELEASE);
-
-    // COL
-    Fl_Input setcols(150, 530, 120, 25, "Cols");
-    setcols.labelsize(12);
-    setcols.value(itoa(G_table->cols()));
-    setcols.callback(setcols_cb, (void*)&setcols);
-    setcols.when(FL_WHEN_RELEASE);
-
-    Fl_Input colwidthall(400, 530, 120, 25, "Col Width");
-    colwidthall.labelsize(12);
-    colwidthall.value(itoa(G_table->col_width(0)));
-    colwidthall.callback(setcolwidthall_cb, (void*)&colwidthall);
-    colwidthall.when(FL_WHEN_RELEASE);
-
-    Fl_Input positioncol(650, 530, 120, 25, "Col Position");
-    positioncol.labelsize(12);
-    positioncol.value("1");
-    positioncol.callback(setpositioncol_cb, (void*)&positioncol);
-    positioncol.when(FL_WHEN_RELEASE);
-
-    // ROW HEADER
-    Fl_Input rowheaderwidth(150, 570, 120, 25, "Row Header Width");
-    rowheaderwidth.labelsize(12);
-    rowheaderwidth.value(itoa(G_table->row_header_width()));
-    rowheaderwidth.callback(setrowheaderwidth_cb, (void*)&rowheaderwidth);
-    rowheaderwidth.when(FL_WHEN_RELEASE);
-
-    Fl_Input rowheadercolor(400, 570, 120, 25, "Row Header Color");
-    rowheadercolor.labelsize(12);
-    rowheadercolor.value(itoa((int)G_table->row_header_color()));
-    rowheadercolor.callback(setrowheadercolor_cb, (void*)&rowheadercolor);
-    rowheadercolor.when(FL_WHEN_RELEASE);
-
-    Fl_Check_Button rowheader(550, 570, 120, 25, "Row Headers?");
-    rowheader.labelsize(12);
-    rowheader.callback(setrowheader_cb, (void*)&rowheader);
-    rowheader.value(G_table->row_header() ? 1 : 0);
-
-    Fl_Check_Button rowresize(700, 570, 120, 25, "Row Resize?");
-    rowresize.labelsize(12);
-    rowresize.callback(setrowresize_cb, (void*)&rowresize);
-    rowresize.value(G_table->row_resize() ? 1 : 0);
-
-    // COL HEADER
-    Fl_Input colheaderheight(150, 600, 120, 25, "Col Header Height");
-    colheaderheight.labelsize(12);
-    colheaderheight.value(itoa(G_table->col_header_height()));
-    colheaderheight.callback(setcolheaderheight_cb, (void*)&colheaderheight);
-    colheaderheight.when(FL_WHEN_RELEASE);
-
-    Fl_Input colheadercolor(400, 600, 120, 25, "Col Header Color");
-    colheadercolor.labelsize(12);
-    colheadercolor.value(itoa((int)G_table->col_header_color()));
-    colheadercolor.callback(setcolheadercolor_cb, (void*)&colheadercolor);
-    colheadercolor.when(FL_WHEN_RELEASE);
-
-    Fl_Check_Button colheader(550, 600, 120, 25, "Col Headers?");
-    colheader.labelsize(12);
-    colheader.callback(setcolheader_cb, (void*)&colheader);
-    colheader.value(G_table->col_header() ? 1 : 0);
-
-    Fl_Check_Button colresize(700, 600, 120, 25, "Col Resize?");
-    colresize.labelsize(12);
-    colresize.callback(setcolresize_cb, (void*)&colresize);
-    colresize.value(G_table->col_resize() ? 1 : 0);
-
-    Fl_Choice tablebox(150, 640, 120, 25, "Table Box");
-    tablebox.labelsize(12);
-    tablebox.textsize(12);
-    tablebox.menu(tablebox_choices);
-    tablebox.value(0);
-
-    Fl_Choice widgetbox(150, 670, 120, 25, "Widget Box");
-    widgetbox.labelsize(12);
-    widgetbox.textsize(12);
-    widgetbox.menu(widgetbox_choices);
-    widgetbox.value(2);		// down frame
-
-    Fl_Input tablecolor(400, 640, 120, 25, "Table Color");
-    tablecolor.labelsize(12);
-    tablecolor.value(itoa((int)G_table->color()));
-    tablecolor.callback(settablecolor_cb, (void*)&tablecolor);
-    tablecolor.when(FL_WHEN_RELEASE);
-
-    Fl_Input cellbgcolor(400, 670, 120, 25, "Cell BG Color");
-    cellbgcolor.labelsize(12);
-    cellbgcolor.value(itoa((int)G_table->GetCellBGColor()));
-    cellbgcolor.callback(setcellbgcolor_cb, (void*)&cellbgcolor);
-    cellbgcolor.when(FL_WHEN_RELEASE);
-
-    Fl_Input cellfgcolor(400, 700, 120, 25, "Cell FG Color");
-    cellfgcolor.labelsize(12);
-    cellfgcolor.value(itoa((int)G_table->GetCellFGColor()));
-    cellfgcolor.callback(setcellfgcolor_cb, (void*)&cellfgcolor);
-    cellfgcolor.when(FL_WHEN_RELEASE);
-
-    Fl_Choice type(650, 640, 120, 25, "Type");
-    type.labelsize(12);
-    type.textsize(12);
-    type.menu(type_choices);
-    type.value(2);
-
-    win.end();
-    win.resizable(*G_table);
-    win.show(argc, argv);
-
-    return(Fl::run());
-}
--- a/DoConfig/fltk/test/tabs.fl
+++ /dev/null
@@ -1,289 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {} {open
-} {
-  Fl_Window foo_window {
-    label {Comparison of Fl_Tab (left) vs. Fl_Wizard (right)} open selected
-    xywh {516 38 660 400} type Double hide resizable
-  } {
-    Fl_Box {} {
-      label {class Fl_Tabs}
-      xywh {95 0 130 35} labeltype ENGRAVED_LABEL labelfont 1
-    }
-    Fl_Tabs {} {open
-      tooltip {the various index cards test different aspects of the Fl_Tabs widget} xywh {10 35 315 260} selection_color 4 labelcolor 7 resizable
-    } {
-      Fl_Group {} {
-        label {Label&1}
-        tooltip {this tab tests correct keyboard navigation between text input fields} xywh {10 60 315 235} selection_color 1 resizable
-      } {
-        Fl_Input {} {
-          label {input:}
-          tooltip {This is the first input field} xywh {70 80 240 40}
-        }
-        Fl_Input {} {
-          label {input2:}
-          xywh {70 120 240 30}
-          code0 {o->tooltip("");}
-        }
-        Fl_Input {} {
-          label {input3:}
-          xywh {70 150 240 80}
-        }
-      }
-      Fl_Group {} {
-        label {tab&2}
-        tooltip {tab2 tests among other things the cooperation of modal windows and tabs} xywh {10 60 315 235} selection_color 2 hide
-      } {
-        Fl_Button {} {
-          label button1
-          callback {fl_message("Test to see if this modal window prevents you from "
-           "changing the tabs. It should.");}
-          xywh {20 85 100 30}
-          code0 {\#include <FL/fl_ask.H>}
-        }
-        Fl_Input {} {
-          label {input in box2}
-          xywh {130 130 175 30}
-        }
-        Fl_Button {} {
-          label {This is stuff inside the Fl_Group "tab2"}
-          xywh {25 170 280 30}
-        }
-        Fl_Button {} {
-          label {Test event blocking by modal window}
-          callback {fl_message("Make sure you cannot change the tabs while this modal window is up");}
-          xywh {25 200 280 30}
-          code0 {\#include <FL/fl_ask.H>}
-        }
-      }
-      Fl_Group {} {
-        label {tab&3}
-        tooltip {tab3 checks for correct keyboard navigation} xywh {10 60 315 235} selection_color 3 hide
-      } {
-        Fl_Button {} {
-          label button2
-          xywh {20 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {80 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {140 80 60 80}
-        }
-      }
-      Fl_Group {} {
-        label {&tab4}
-        tooltip {this tab shows the issue of indicating a selected tab if the tab layouts are very similar} xywh {10 60 315 235} selection_color 5 labeltype ENGRAVED_LABEL labelfont 2 hide
-      } {
-        Fl_Button {} {
-          label button2
-          xywh {20 80 60 120}
-        }
-        Fl_Button {} {
-          label button
-          xywh {80 80 60 120}
-        }
-        Fl_Button {} {
-          label button
-          xywh {140 80 60 120}
-        }
-      }
-      Fl_Group {} {
-        label {@fileprint  &print}
-        tooltip {tab5 verifies if visibility requests are handled correctly} xywh {10 60 315 235} hide
-      } {
-        Fl_Button {} {
-          label button2
-          tooltip {button2 has a different tooltip than tab5} xywh {20 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {90 80 60 80}
-        }
-        Fl_Clock {} {
-          label {Make sure this clock does not use processor time when this tab is hidden or window is iconized}
-          xywh {185 80 120 120} box OSHADOW_BOX color 238 selection_color 0 labelfont 8 labelsize 10 align 130
-        }
-        Fl_Group {} {open
-          xywh {20 190 40 55} box THIN_DOWN_BOX color 173 align 16
-          class Fl_Window
-        } {}
-        Fl_Group {} {
-          label {subwindows:} open
-          xywh {65 190 40 55} box THIN_DOWN_BOX color 167
-          class Fl_Window
-        } {}
-        Fl_Group {} {open
-          xywh {110 190 40 55} box THIN_DOWN_BOX color 239 align 16
-          class Fl_Window
-        } {}
-      }
-    }
-    Fl_Box {} {
-      label {class Fl_Wizard}
-      xywh {410 0 130 35} labeltype ENGRAVED_LABEL labelfont 1
-    }
-    Fl_Wizard wWizard {open
-      xywh {330 35 320 260}
-    } {
-      Fl_Group {} {
-        label Label1
-        tooltip {this tab tests correct keyboard navigation between text input fields} xywh {330 60 320 235} selection_color 1 hide resizable
-      } {
-        Fl_Input {} {
-          label {input:}
-          tooltip {This is the first input field} xywh {390 80 240 40}
-        }
-        Fl_Input {} {
-          label {input2:}
-          xywh {390 120 240 30}
-          code0 {o->tooltip("");}
-        }
-        Fl_Input {} {
-          label {input3:}
-          xywh {390 150 240 80}
-        }
-      }
-      Fl_Group {} {
-        label tab2
-        tooltip {tab2 tests among other things the cooperation of modal windows and tabs} xywh {330 60 320 235} selection_color 2 hide
-      } {
-        Fl_Button {} {
-          label button1
-          callback {fl_message("Test to see if this modal window prevents you from "
-           "changing the tabs. It should.");}
-          xywh {350 85 100 30}
-          code0 {\#include <FL/fl_ask.H>}
-        }
-        Fl_Input {} {
-          label {input in box2}
-          xywh {455 130 175 30}
-        }
-        Fl_Button {} {
-          label {This is stuff inside the Fl_Group "tab2"}
-          xywh {350 170 280 30}
-        }
-        Fl_Button {} {
-          label {Test event blocking by modal window}
-          callback {fl_message("Make sure you cannot change the tabs while this modal window is up");}
-          xywh {350 200 280 30}
-          code0 {\#include <FL/fl_ask.H>}
-        }
-      }
-      Fl_Group {} {
-        label tab3
-        tooltip {tab3 checks for correct keyboard navigation} xywh {330 50 320 245} selection_color 3 hide
-      } {
-        Fl_Button {} {
-          label button2
-          xywh {350 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {410 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {470 80 60 80}
-        }
-      }
-      Fl_Group {} {
-        label tab4
-        tooltip {this tab shows the issue of indicating a selected tab if the tab layouts are very similar} xywh {330 60 320 235} selection_color 5 labelfont 2 hide
-      } {
-        Fl_Button {} {
-          label button2
-          xywh {350 80 60 120}
-        }
-        Fl_Button {} {
-          label button
-          xywh {410 80 60 120}
-        }
-        Fl_Button {} {
-          label button
-          xywh {470 80 60 120}
-        }
-      }
-      Fl_Group {} {
-        label {     tab5      }
-        tooltip {tab5 verifies if visibility requests are handled correctly} xywh {330 65 320 230} labeltype ENGRAVED_LABEL
-      } {
-        Fl_Button {} {
-          label button2
-          tooltip {button2 has a different tooltip than tab5} xywh {350 80 60 80}
-        }
-        Fl_Button {} {
-          label button
-          xywh {420 80 60 80}
-        }
-        Fl_Clock {} {
-          label {Make sure this clock does not use processor time when this tab is hidden or window is iconized}
-          xywh {510 80 120 120} box OSHADOW_BOX color 238 selection_color 0 labelfont 8 labelsize 10 align 130
-        }
-        Fl_Group {} {open
-          xywh {350 190 40 55} box THIN_DOWN_BOX color 173 align 16
-          class Fl_Window
-        } {}
-        Fl_Group {} {
-          label {subwindows:} open
-          xywh {395 190 40 55} box THIN_DOWN_BOX color 167
-          class Fl_Window
-        } {}
-        Fl_Group {} {open
-          xywh {440 190 40 55} box THIN_DOWN_BOX color 239 align 16
-          class Fl_Window
-        } {}
-      }
-    }
-    Fl_Group {} {
-      xywh {410 305 130 25}
-    } {
-      Fl_Button {} {
-        label {@|<}
-        callback {wWizard->value(wWizard->child(0));}
-        tooltip {go to first page [Home]} xywh {410 305 30 25} shortcut 0xff50
-      }
-      Fl_Button {} {
-        label {@<}
-        callback {wWizard->prev();}
-        tooltip {go to previous page [left arrow]} xywh {440 305 30 25} shortcut 0xff51
-      }
-      Fl_Button {} {
-        label {@>}
-        callback {wWizard->next();}
-        tooltip {go to next page in wizard [right arrow]} xywh {480 305 30 25} shortcut 0xff53
-      }
-      Fl_Button {} {
-        label {@>|}
-        callback {int last = wWizard->children()-1;
-wWizard->value(wWizard->child(last));}
-        tooltip {go to last page [End]} xywh {510 305 30 25} shortcut 0xff57
-      }
-    }
-    Fl_Input {} {
-      label {inputA:}
-      xywh {60 310 130 25}
-    }
-    Fl_Input {} {
-      label {inputB:}
-      xywh {60 345 250 25}
-    }
-    Fl_Button {} {
-      label cancel
-      callback {exit(1);}
-      xywh {490 345 70 30}
-      code0 {\#include <stdlib.h>}
-    }
-    Fl_Return_Button {} {
-      label OK
-      callback {exit(0);}
-      xywh {570 345 70 30}
-      code0 {\#include <stdlib.h>}
-    }
-  }
-}
--- a/DoConfig/fltk/test/threads.cxx
+++ /dev/null
@@ -1,164 +1,0 @@
-//
-// "$Id$"
-//
-// Threading example program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <config.h>
-
-#if defined(HAVE_PTHREAD) || defined(WIN32)
-#  include <FL/Fl.H>
-#  include <FL/Fl_Double_Window.H>
-#  include <FL/Fl_Browser.H>
-#  include <FL/Fl_Value_Output.H>
-#  include <FL/fl_ask.H>
-#  include "threads.h"
-#  include <stdio.h>
-#  include <math.h>
-
-Fl_Thread prime_thread;
-
-Fl_Browser *browser1, *browser2;
-Fl_Value_Output *value1, *value2;
-int start2 = 3;
-
-void magic_number_cb(void *p)
-{
-  Fl_Value_Output *w = (Fl_Value_Output*)p;
-  w->labelcolor(FL_RED);
-  w->redraw_label();
-}
-
-extern "C" void* prime_func(void* p)
-{
-  Fl_Browser* browser = (Fl_Browser*) p;
-  Fl_Value_Output *value;
-  int n;
-  int step;
-  char proud = 0;
-
-  if (browser == browser2) {
-    n      = start2;
-    start2 += 2;
-    step   = 12;
-    value  = value2;
-  } else {
-    n     = 3;
-    step  = 2;
-    value = value1;
-  }
-
-  // very simple prime number calculator !
-  //
-  // The return at the end of this function can never be reached and thus 
-  // will generate a warning with some compilers, however we need to have 
-  // a return statement or other compilers will complain there is no return 
-  // statement. To avoid warnings on all compilers, we fool the smart ones 
-  // into beleiving that there is a chance that we reach the end by testing 
-  // n>=0, knowing that logically, n will never be negative in this context.
-  if (n>=0) for (;;) {
-    int pp;
-    int hn = (int)sqrt((double)n);
-
-    for (pp=3; pp<=hn; pp+=2) if ( n%pp == 0 ) break;
-    if (pp >= hn) {
-      char s[128];
-      sprintf(s, "%d", n);
-
-      // Obtain a lock before we access the browser widget...
-      Fl::lock();
-
-      browser->add(s);
-      browser->bottomline(browser->size());
-      if (n > value->value()) value->value(n);
-      n += step;
-
-      // Release the lock...
-      Fl::unlock();
-
-      // Send a message to the main thread, at which point it will
-      // process any pending redraws for our browser widget.  The
-      // message we pass here isn't used for anything, so we could also
-      // just pass NULL.
-      Fl::awake(p);
-      if (n>10000 && !proud) {
-        proud = 1;
-        Fl::awake(magic_number_cb, value);
-      }
-    } else {
-      // This should not be necessary since "n" and "step" are local variables,
-      // however it appears that at least MacOS X has some threading issues
-      // that cause semi-random corruption of the (stack) variables.
-      Fl::lock();
-      n += step;
-      Fl::unlock();
-    }
-  }
-  return 0L;
-}
-
-int main(int argc, char **argv)
-{
-  Fl_Double_Window* w = new Fl_Double_Window(200, 200, "Single Thread");
-  browser1 = new Fl_Browser(0, 0, 200, 175);
-  w->resizable(browser1);
-  value1 = new Fl_Value_Output(100, 175, 200, 25, "Max Prime:");
-  w->end();
-  w->show(argc, argv);
-  w = new Fl_Double_Window(200, 200, "Six Threads");
-  browser2 = new Fl_Browser(0, 0, 200, 175);
-  w->resizable(browser2);
-  value2 = new Fl_Value_Output(100, 175, 200, 25, "Max Prime:");
-  w->end();
-  w->show();
-  
-  browser1->add("Prime numbers:");
-  browser2->add("Prime numbers:");
-
-  // Enable multi-thread support by locking from the main
-  // thread.  Fl::wait() and Fl::run() call Fl::unlock() and
-  // Fl::lock() as needed to release control to the child threads
-  // when it is safe to do so...
-  Fl::lock();
-
-  // Start threads...
-
-  // One thread displaying in one browser
-  fl_create_thread(prime_thread, prime_func, browser1);
-
-  // Several threads displaying in another browser
-  fl_create_thread(prime_thread, prime_func, browser2);
-  fl_create_thread(prime_thread, prime_func, browser2);
-  fl_create_thread(prime_thread, prime_func, browser2);
-  fl_create_thread(prime_thread, prime_func, browser2);
-  fl_create_thread(prime_thread, prime_func, browser2);
-  fl_create_thread(prime_thread, prime_func, browser2);
-
-  Fl::run();
-
-  return 0;
-}
-#else
-#  include <FL/fl_ask.H>
-
-int main() {
-  fl_alert("Sorry, threading not supported on this platform!");
-}
-#endif // HAVE_PTHREAD || WIN32
-
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/threads.h
+++ /dev/null
@@ -1,81 +1,0 @@
-//
-// "$Id$"
-//
-// Simple threading API for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Inline classes to provide portable support for threads and mutexes.
-//
-// FLTK does not use this (it has an internal mutex implementation
-// that is used if Fl::lock() is called). This header file's only
-// purpose is so we can write portable demo programs. It may be useful
-// or an inspiration to people who want to try writing multithreaded
-// programs themselves.
-//
-// FLTK has no multithreaded support unless the main thread calls Fl::lock().
-// This main thread is the only thread allowed to call Fl::run() or Fl::wait().
-// From then on FLTK will be locked except when the main thread is actually
-// waiting for events from the user. Other threads must call Fl::lock() and
-// Fl::unlock() to surround calls to FLTK (such as to change widgets or
-// redraw them).
-
-#ifndef Threads_H
-#  define Threads_H
-
-#  ifdef HAVE_PTHREAD_H
-// Use POSIX threading...
-
-#    include <pthread.h>
-
-typedef pthread_t Fl_Thread;
-extern "C" {
-  typedef void *(Fl_Thread_Func)(void *);
-}
-
-static int fl_create_thread(Fl_Thread& t, Fl_Thread_Func* f, void* p) {
-  return pthread_create((pthread_t*)&t, 0, f, p);
-}
-
-#  elif defined(WIN32) && !defined(__WATCOMC__) // Use Windows threading...
-
-#    include <windows.h>
-#    include <process.h>
-
-typedef unsigned long Fl_Thread;
-extern "C" {
-  typedef void *(__cdecl Fl_Thread_Func)(void *);
-}
-
-static int fl_create_thread(Fl_Thread& t, Fl_Thread_Func* f, void* p) {
-  return t = (Fl_Thread)_beginthread((void( __cdecl * )( void * ))f, 0, p);
-}
-
-#  elif defined(__WATCOMC__)
-#    include <process.h>
-
-typedef unsigned long Fl_Thread;
-extern "C" {
-  typedef void *(__cdecl Fl_Thread_Func)(void *);
-}
-
-static int fl_create_thread(Fl_Thread& t, Fl_Thread_Func* f, void* p) {
-  return t = (Fl_Thread)_beginthread((void(* )( void * ))f, 32000, p);
-}
-#  endif // !HAVE_PTHREAD_H
-#endif // !Threads_h
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/tile.cxx
+++ /dev/null
@@ -1,97 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Tile test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Box.H>
-
-//#define TEST_INACTIVE
-
-int main(int argc, char** argv) {
-  Fl_Double_Window window(300,300);
-  window.box(FL_NO_BOX);
-  window.resizable(window);
-
-  int dx = 20, dy = dx; // border width of resizable() - see below
-  Fl_Tile tile(0,0,300,300);
-
-  // create the symmetrical resize box with dx and dy pixels distance, resp.
-  // from the borders of the Fl_Tile widget before all other children
-  Fl_Box r(tile.x()+dx,tile.y()+dy,tile.w()-2*dx,tile.h()-2*dy);
-  tile.resizable(r);
-
-  Fl_Box box0(0,0,150,150,"0");
-  box0.box(FL_DOWN_BOX);
-  box0.color(9);
-  box0.labelsize(36);
-  box0.align(FL_ALIGN_CLIP);
-
-  Fl_Double_Window w1(150,0,150,150,"1");
-  w1.box(FL_NO_BOX);
-  Fl_Box box1(0,0,150,150,"1\nThis is a child window");
-  box1.box(FL_DOWN_BOX);
-  box1.color(19);
-  box1.labelsize(18);
-  box1.align(FL_ALIGN_CLIP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-  w1.resizable(box1);
-  w1.end();
-
-  //  Fl_Tile tile2(0,150,150,150);
-  Fl_Box box2a(0,150,70,150,"2a");
-  box2a.box(FL_DOWN_BOX);
-  box2a.color(12);
-  box2a.labelsize(36);
-  box2a.align(FL_ALIGN_CLIP);
-
-  Fl_Box box2b(70,150,80,150,"2b");
-  box2b.box(FL_DOWN_BOX);
-  box2b.color(13);
-  box2b.labelsize(36);
-  box2b.align(FL_ALIGN_CLIP);
-  //tile2.end();
-
-  //Fl_Tile tile3(150,150,150,150);
-  Fl_Box box3a(150,150,150,70,"3a");
-  box3a.box(FL_DOWN_BOX);
-  box3a.color(12);
-  box3a.labelsize(36);
-  box3a.align(FL_ALIGN_CLIP);
-
-  Fl_Box box3b(150,150+70,150,80,"3b");
-  box3b.box(FL_DOWN_BOX);
-  box3b.color(13);
-  box3b.labelsize(36);
-  box3b.align(FL_ALIGN_CLIP);
-  //tile3.end();
-
-  tile.end();
-  window.end();
-
-#ifdef TEST_INACTIVE // test inactive case
-  tile.deactivate();
-#endif
-
-  w1.show();
-  window.show(argc,argv);
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/tiled_image.cxx
+++ /dev/null
@@ -1,96 +1,0 @@
-//
-// "$Id$"
-//
-// Fl_Tiled_Image test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Pixmap.H>
-#include <FL/Fl_Tiled_Image.H>
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-
-#include "pixmaps/tile.xpm"
-
-Fl_Button *b;
-Fl_Double_Window *w;
-
-void button_cb(Fl_Widget *,void *) {
-  w->hide();
-}
-
-#include <FL/x.H>
-#if !defined(WIN32) && !defined(__APPLE__)
-#include "list_visuals.cxx"
-#endif
-
-int visid = -1;
-int arg(int argc, char **argv, int &i) {
-  if (argv[i][1] == 'v') {
-    if (i+1 >= argc) return 0;
-    visid = atoi(argv[i+1]);
-    i += 2;
-    return 2;
-  }
-  return 0;
-}
-
-int main(int argc, char **argv) {
-#if !defined(WIN32) && !defined(__APPLE__)
-  int i = 1;
-
-  Fl::args(argc,argv,i,arg);
-
-  if (visid >= 0) {
-    fl_open_display();
-    XVisualInfo templt; int num;
-    templt.visualid = visid;
-    fl_visual = XGetVisualInfo(fl_display, VisualIDMask, &templt, &num);
-    if (!fl_visual) {
-      fprintf(stderr, "No visual with id %d, use one of:\n",visid);
-      list_visuals();
-      exit(1);
-    }
-    fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
-				fl_visual->visual, AllocNone);
-    fl_xpixel(FL_BLACK); // make sure black is allocated in overlay visuals
-  } else {
-    Fl::visual(FL_RGB);
-  }
-#endif
-
-  Fl_Double_Window window(400,400); ::w = &window;
-  Fl_Group group(0,0,400,400);
-  group.image(new Fl_Tiled_Image(new Fl_Pixmap((const char * const *)tile_xpm)));
-  group.align(FL_ALIGN_INSIDE);
-
-  Fl_Button b(340,365,50,25,"Close"); ::b = &b;
-  b.callback(button_cb);
-
-  group.end();
-
-  window.resizable(group);
-  window.end();
-  window.show(argc, argv);
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/trackball.c
+++ /dev/null
@@ -1,324 +1,0 @@
-/*
- * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
- * ALL RIGHTS RESERVED
- * Permission to use, copy, modify, and distribute this software for
- * any purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation, and that
- * the name of Silicon Graphics, Inc. not be used in advertising
- * or publicity pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
- * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
- * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
- * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
- * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
- * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
- * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
- * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer Software
- * clause at DFARS 252.227-7013 and/or in similar or successor
- * clauses in the FAR or the DOD or NASA FAR Supplement.
- * Unpublished-- rights reserved under the copyright laws of the
- * United States.  Contractor/manufacturer is Silicon Graphics,
- * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-/*
- * Trackball code:
- *
- * Implementation of a virtual trackball.
- * Implemented by Gavin Bell, lots of ideas from Thant Tessman and
- *   the August '88 issue of Siggraph's "Computer Graphics," pp. 121-129.
- *
- * Vector manip code:
- *
- * Original code from:
- * David M. Ciemiewicz, Mark Grossman, Henry Moreton, and Paul Haeberli
- *
- * Much mucking with by:
- * Gavin Bell
- */
-#include <math.h>
-#include "trackball.h"
-
-/*
- * This size should really be based on the distance from the center of
- * rotation to the point on the object underneath the mouse.  That
- * point would then track the mouse as closely as possible.  This is a
- * simple example, though, so that is left as an Exercise for the
- * Programmer.
- */
-#define TRACKBALLSIZE  (0.8)
-
-/*
- * Local function prototypes (not defined in trackball.h)
- */
-static float tb_project_to_sphere(float, float, float);
-static void normalize_quat(float [4]);
-
-void
-vzero(float *v)
-{
-    v[0] = 0.0;
-    v[1] = 0.0;
-    v[2] = 0.0;
-}
-
-void
-vset(float *v, float x, float y, float z)
-{
-    v[0] = x;
-    v[1] = y;
-    v[2] = z;
-}
-
-void
-vsub(const float *src1, const float *src2, float *dst)
-{
-    dst[0] = src1[0] - src2[0];
-    dst[1] = src1[1] - src2[1];
-    dst[2] = src1[2] - src2[2];
-}
-
-void
-vcopy(const float *v1, float *v2)
-{
-    int i;
-    for (i = 0 ; i < 3 ; i++)
-        v2[i] = v1[i];
-}
-
-void
-vcross(const float *v1, const float *v2, float *cross)
-{
-    float temp[3];
-
-    temp[0] = (v1[1] * v2[2]) - (v1[2] * v2[1]);
-    temp[1] = (v1[2] * v2[0]) - (v1[0] * v2[2]);
-    temp[2] = (v1[0] * v2[1]) - (v1[1] * v2[0]);
-    vcopy(temp, cross);
-}
-
-float
-vlength(const float *v)
-{
-    return sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
-}
-
-void
-vscale(float *v, float div)
-{
-    v[0] *= div;
-    v[1] *= div;
-    v[2] *= div;
-}
-
-void
-vnormal(float *v)
-{
-    vscale(v,1.0/vlength(v));
-}
-
-float
-vdot(const float *v1, const float *v2)
-{
-    return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
-}
-
-void
-vadd(const float *src1, const float *src2, float *dst)
-{
-    dst[0] = src1[0] + src2[0];
-    dst[1] = src1[1] + src2[1];
-    dst[2] = src1[2] + src2[2];
-}
-
-/*
- * Ok, simulate a track-ball.  Project the points onto the virtual
- * trackball, then figure out the axis of rotation, which is the cross
- * product of P1 P2 and O P1 (O is the center of the ball, 0,0,0)
- * Note:  This is a deformed trackball-- is a trackball in the center,
- * but is deformed into a hyperbolic sheet of rotation away from the
- * center.  This particular function was chosen after trying out
- * several variations.
- *
- * It is assumed that the arguments to this routine are in the range
- * (-1.0 ... 1.0)
- */
-void
-trackball(float q[4], float p1x, float p1y, float p2x, float p2y)
-{
-    float a[3]; /* Axis of rotation */
-    float phi;  /* how much to rotate about axis */
-    float p1[3], p2[3], d[3];
-    float t;
-
-    if (p1x == p2x && p1y == p2y) {
-        /* Zero rotation */
-        vzero(q);
-        q[3] = 1.0;
-        return;
-    }
-
-    /*
-     * First, figure out z-coordinates for projection of P1 and P2 to
-     * deformed sphere
-     */
-    vset(p1,p1x,p1y,tb_project_to_sphere(TRACKBALLSIZE,p1x,p1y));
-    vset(p2,p2x,p2y,tb_project_to_sphere(TRACKBALLSIZE,p2x,p2y));
-
-    /*
-     *  Now, we want the cross product of P1 and P2
-     */
-    vcross(p2,p1,a);
-
-    /*
-     *  Figure out how much to rotate around that axis.
-     */
-    vsub(p1,p2,d);
-    t = vlength(d) / (2.0*TRACKBALLSIZE);
-
-    /*
-     * Avoid problems with out-of-control values...
-     */
-    if (t > 1.0) t = 1.0;
-    if (t < -1.0) t = -1.0;
-    phi = 2.0 * asin(t);
-
-    axis_to_quat(a,phi,q);
-}
-
-/*
- *  Given an axis and angle, compute quaternion.
- */
-void
-axis_to_quat(float a[3], float phi, float q[4])
-{
-    vnormal(a);
-    vcopy(a,q);
-    vscale(q,sin(phi/2.0));
-    q[3] = cos(phi/2.0);
-}
-
-/*
- * Project an x,y pair onto a sphere of radius r OR a hyperbolic sheet
- * if we are away from the center of the sphere.
- */
-static float
-tb_project_to_sphere(float r, float x, float y)
-{
-    float d, t, z;
-
-    d = sqrt(x*x + y*y);
-    if (d < r * 0.70710678118654752440) {    /* Inside sphere */
-        z = sqrt(r*r - d*d);
-    } else {           /* On hyperbola */
-        t = r / 1.41421356237309504880;
-        z = t*t / d;
-    }
-    return z;
-}
-
-/*
- * Given two rotations, e1 and e2, expressed as quaternion rotations,
- * figure out the equivalent single rotation and stuff it into dest.
- *
- * This routine also normalizes the result every RENORMCOUNT times it is
- * called, to keep error from creeping in.
- *
- * NOTE: This routine is written so that q1 or q2 may be the same
- * as dest (or each other).
- */
-
-#define RENORMCOUNT 97
-
-void
-add_quats(float q1[4], float q2[4], float dest[4])
-{
-    static int count=0;
-    float t1[4], t2[4], t3[4];
-    float tf[4];
-
-    vcopy(q1,t1);
-    vscale(t1,q2[3]);
-
-    vcopy(q2,t2);
-    vscale(t2,q1[3]);
-
-    vcross(q2,q1,t3);
-    vadd(t1,t2,tf);
-    vadd(t3,tf,tf);
-    tf[3] = q1[3] * q2[3] - vdot(q1,q2);
-
-    dest[0] = tf[0];
-    dest[1] = tf[1];
-    dest[2] = tf[2];
-    dest[3] = tf[3];
-
-    if (++count > RENORMCOUNT) {
-        count = 0;
-        normalize_quat(dest);
-    }
-}
-
-/*
- * Quaternions always obey:  a^2 + b^2 + c^2 + d^2 = 1.0
- * If they don't add up to 1.0, dividing by their magnitued will
- * renormalize them.
- *
- * Note: See the following for more information on quaternions:
- *
- * - Shoemake, K., Animating rotation with quaternion curves, Computer
- *   Graphics 19, No 3 (Proc. SIGGRAPH'85), 245-254, 1985.
- * - Pletinckx, D., Quaternion calculus as a basic tool in computer
- *   graphics, The Visual Computer 5, 2-13, 1989.
- */
-static void
-normalize_quat(float q[4])
-{
-    int i;
-    float mag;
-
-    mag = (q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
-    for (i = 0; i < 4; i++) q[i] /= mag;
-}
-
-/*
- * Build a rotation matrix, given a quaternion rotation.
- *
- */
-void
-build_rotmatrix(float m[4][4], float q[4])
-{
-    m[0][0] = 1.0 - 2.0 * (q[1] * q[1] + q[2] * q[2]);
-    m[0][1] = 2.0 * (q[0] * q[1] - q[2] * q[3]);
-    m[0][2] = 2.0 * (q[2] * q[0] + q[1] * q[3]);
-    m[0][3] = 0.0;
-
-    m[1][0] = 2.0 * (q[0] * q[1] + q[2] * q[3]);
-    m[1][1]= 1.0 - 2.0 * (q[2] * q[2] + q[0] * q[0]);
-    m[1][2] = 2.0 * (q[1] * q[2] - q[0] * q[3]);
-    m[1][3] = 0.0;
-
-    m[2][0] = 2.0 * (q[2] * q[0] - q[1] * q[3]);
-    m[2][1] = 2.0 * (q[1] * q[2] + q[0] * q[3]);
-    m[2][2] = 1.0 - 2.0 * (q[1] * q[1] + q[0] * q[0]);
-    m[2][3] = 0.0;
-
-    m[3][0] = 0.0;
-    m[3][1] = 0.0;
-    m[3][2] = 0.0;
-    m[3][3] = 1.0;
-}
-
--- a/DoConfig/fltk/test/trackball.h
+++ /dev/null
@@ -1,78 +1,0 @@
-/*
- * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
- * ALL RIGHTS RESERVED
- * Permission to use, copy, modify, and distribute this software for
- * any purpose and without fee is hereby granted, provided that the above
- * copyright notice appear in all copies and that both the copyright notice
- * and this permission notice appear in supporting documentation, and that
- * the name of Silicon Graphics, Inc. not be used in advertising
- * or publicity pertaining to distribution of the software without specific,
- * written prior permission.
- *
- * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
- * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
- * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
- * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
- * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
- * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
- * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
- * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
- * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
- * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * US Government Users Restricted Rights
- * Use, duplication, or disclosure by the Government is subject to
- * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
- * (c)(1)(ii) of the Rights in Technical Data and Computer Software
- * clause at DFARS 252.227-7013 and/or in similar or successor
- * clauses in the FAR or the DOD or NASA FAR Supplement.
- * Unpublished-- rights reserved under the copyright laws of the
- * United States.  Contractor/manufacturer is Silicon Graphics,
- * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
- *
- * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
- */
-/*
- * trackball.h
- * A virtual trackball implementation
- * Written by Gavin Bell for Silicon Graphics, November 1988.
- */
-
-/*
- * Pass the x and y coordinates of the last and current positions of
- * the mouse, scaled so they are from (-1.0 ... 1.0).
- *
- * The resulting rotation is returned as a quaternion rotation in the
- * first paramater.
- */
-void
-trackball(float q[4], float p1x, float p1y, float p2x, float p2y);
-
-/*
- * Given two quaternions, add them together to get a third quaternion.
- * Adding quaternions to get a compound rotation is analagous to adding
- * translations to get a compound translation.  When incrementally
- * adding rotations, the first argument here should be the new
- * rotation, the second and third the total rotation (which will be
- * over-written with the resulting new total rotation).
- */
-void
-add_quats(float *q1, float *q2, float *dest);
-
-/*
- * A useful function, builds a rotation matrix in Matrix based on
- * given quaternion.
- */
-void
-build_rotmatrix(float m[4][4], float q[4]);
-
-/*
- * This function computes a quaternion based on an axis (defined by
- * the given vector) and an angle about which to rotate.  The angle is
- * expressed in radians.  The result is put into the third argument.
- */
-void
-axis_to_quat(float a[3], float phi, float q[4]);
-
--- a/DoConfig/fltk/test/tree.fl
+++ /dev/null
@@ -1,1816 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-decl {\#include <stdio.h>} {public global
-}
-
-decl {\#include <FL/Fl.H>} {public global
-}
-
-decl {\#include <FL/Fl_Tooltip.H>} {public global
-}
-
-decl {\#include <FL/Fl_Pixmap.H>} {public global
-}
-
-decl {\#include <FL/Fl_Group.H>} {public global
-}
-
-decl {\#include <FL/Fl_Tree.H>} {public global
-}
-
-decl {\#include <FL/fl_ask.H>} {public global
-}
-
-decl {\#include <FL/fl_message.H>} {public global
-}
-
-decl {\#include <FL/Fl_File_Chooser.H>} {public global
-}
-
-decl {\#include <FL/Fl_Preferences.H>} {public global
-}
-
-decl {\#include <FL/Fl_Color_Chooser.H>} {public global
-}
-
-decl {\#include <FL/Fl_Text_Display.H>} {public global
-}
-
-decl {int G_cb_counter = 0;} {
-  comment {// Global callback event counter} private local
-}
-
-Function {reason_as_name(Fl_Tree_Reason reason)} {
-  comment {Return an Fl_Tree_Reason as a text string name} return_type {const char*}
-} {
-  code {switch ( reason ) {
-      case FL_TREE_REASON_NONE:       return("none");
-      case FL_TREE_REASON_SELECTED:   return("selected");
-      case FL_TREE_REASON_DESELECTED: return("deselected");
-      case FL_TREE_REASON_OPENED:     return("opened");
-      case FL_TREE_REASON_CLOSED:     return("closed");
-      case FL_TREE_REASON_DRAGGED:    return("dragged");
-\#if FLTK_ABI_VERSION >= 10301
-	  case FL_TREE_REASON_RESELECTED: return("reselected");
-\#endif
-      default:                        return("???");
-    }} {}
-}
-
-Function {Button_CB(Fl_Widget*w, void*data)} {open return_type void
-} {
-  code {// Each push changes height so we can test 'Item h() from widget'
-//    Cycle through larger sizes until 50, then wrap to normal size.
-//
-//    In the case of 'ccc button', it is the child widget, so change
-//    its size.
-//
-//    In the case of the 'D1' and 'D2' buttons, the parent's Fl_Group
-//    is the child, so change the size of that instead.
-//
-Fl_Widget *cw = strcmp(w->label(), "ccc button")==0 ? w : w->parent();
-int height = cw->h();
-height += 10;
-if ( height > 50 ) height = 20;
-cw->resize(cw->x(), cw->y(), cw->w(), height);
-tree->redraw();	// adjusted height
-fprintf(stderr, "'%s' button pushed (height=%d)\\n", w->label(), height);} {}
-}
-
-Function {AssignUserIcons()} {
-  comment {Assign user icons to the items} open
-} {
-  code {static const char *L_folder_xpm[] = {
-    "11 11 3 1",
-    ".  c None",
-    "x  c \#d8d833",
-    "@  c \#808011",
-    "...........",
-    ".....@@@@..",
-    "....@xxxx@.",
-    "@@@@@xxxx@@",
-    "@xxxxxxxxx@",
-    "@xxxxxxxxx@",
-    "@xxxxxxxxx@",
-    "@xxxxxxxxx@",
-    "@xxxxxxxxx@",
-    "@xxxxxxxxx@",
-    "@@@@@@@@@@@"};
-static Fl_Pixmap L_folder_pixmap(L_folder_xpm);
-
-static const char *L_document_xpm[] = {
-    "11 11 3 1",
-    ".  c None",
-    "x  c \#d8d8f8",
-    "@  c \#202060",
-    ".@@@@@@@@@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@xxxxxxx@.",
-    ".@@@@@@@@@."};
-static Fl_Pixmap L_document_pixmap(L_document_xpm);
-
-\#if FLTK_ABI_VERSION >= 10304
-// Create deactivated version of document icon
-static Fl_Pixmap L_folder_deicon_pixmap(L_folder_xpm); // copy
-static Fl_Pixmap L_document_deicon_pixmap(L_document_xpm); // copy
-static int first = 1;
-if ( first ) {
-    L_folder_deicon_pixmap.inactive();
-    L_document_deicon_pixmap.inactive();
-    first = 0;
-}
-\#endif
-
-// Assign user icons to tree items
-for ( Fl_Tree_Item *item = tree->first(); item; item=item->next()) {
-    if ( usericon_radio->value() ) {
-        // Assign custom icons
-        if ( item->has_children() ) {
-            item->usericon(&L_folder_pixmap);
-\#if FLTK_ABI_VERSION >= 10304
-            item->userdeicon(&L_folder_deicon_pixmap);
-\#endif
-        } else {
-            item->usericon(&L_document_pixmap);
-\#if FLTK_ABI_VERSION >= 10304
-            item->userdeicon(&L_document_deicon_pixmap);
-\#endif
-	}
-    } else {
-    	// Don't assign custom icons
-        item->usericon(0);
-\#if FLTK_ABI_VERSION >= 10304
-        item->userdeicon(0);
-\#endif
-    }
-}
-tree->redraw();} {selected
-  }
-}
-
-Function {RebuildTree()} {
-  comment {Rebuild the 'example tree' from scratch} open
-} {
-  code {// REBUILD THE TREE TO MAKE CURRENT "DEFAULT" PREFS TAKE EFFECT
-tree->clear();
-tree->add("Aaa");
-tree->add("Bbb");
-tree->add("Ccc");
-tree->add("Ddd");
-tree->add("Bbb/child-01");
-tree->add("Bbb/child-01/111");
-tree->add("Bbb/child-01/222");
-tree->add("Bbb/child-01/333");
-tree->add("Bbb/child-02");
-tree->add("Bbb/child-03");
-tree->add("Bbb/child-04");
-
-{
-    static Fl_Input *in = 0;
-    // Assign an FLTK input widget to one of the items with a label() of its own (STR\#2832)
-    Fl_Tree_Item *i;
-    if ( ( i = tree->find_item("Bbb/child-02") ) != NULL ) {
-        if ( !in ) {		// only do this once at program startup
-            tree->begin();
-            in = new Fl_Input(1,1,100,1,"Fl_Input test");	// we control w() only
-            in->labelsize(10);
-            in->textsize(10);
-            in->align(FL_ALIGN_RIGHT);				// show label to the right of the widget
-	    in->tooltip("Fl_Input inside tree.\\n"
-	                "The widget's label 'Fl_Input test' should appear to the widget's right.");
-        }
-        in->show();
-        i->widget(in);
-        tree->end();
-    }
-}
-
-{
-    static Fl_Button *but = 0;
-    // Assign an FLTK widget to one of the items
-    Fl_Tree_Item *i;
-    if ( ( i = tree->find_item("Bbb/child-03") ) != NULL ) {
-        if ( !but ) {		// only do this once at program startup
-            tree->begin();
-            but = new Fl_Button(1,1,140,1,"ccc button");     // we control w() only
-            but->labelsize(10);
-	    but->callback(Button_CB);
-	    but->tooltip("Button inside tree.\\n"
-	                 "If 'Item h() from widget' enabled, "
-	                 "pressing button enlarges it.");
-        }
-        but->show();
-        i->widget(but);
-        tree->end();
-    }
-}
-{
-    // Assign an FLTK group to one of the items with widgets
-    Fl_Tree_Item *i;
-    const char *tipmsg = "A group of two buttons inside the tree.\\n"
-	                 "If 'Item h() from widget' enabled, "
-	                 "pressing either button enlarges the group "
-	                 "and both buttons together.";
-    if ( ( i = tree->find_item("Bbb/child-04") ) != NULL ) {
-        static Fl_Group *grp = 0;
-        if ( !grp ) {		// only do this once at program startup
-            tree->begin();
-              grp = new Fl_Group(100,100,140,18); // build group.. tree handles position
-              grp->color(FL_WHITE);
-              grp->begin();
-                Fl_Button *abut = new Fl_Button(grp->x()+0 ,grp->y()+2,65,15,"D1");
-                abut->labelsize(10);
-		abut->callback(Button_CB);
-		abut->tooltip(tipmsg);
-                Fl_Button *bbut = new Fl_Button(grp->x()+75,grp->y()+2,65,15,"D2");
-                bbut->labelsize(10);
-		bbut->callback(Button_CB);
-	        bbut->tooltip(tipmsg);
-
-              grp->end();
-              grp->resizable(grp);
-            tree->end();
-        }
-        grp->show();
-        i->widget(grp);
-    }
-}
-
-// Add an 'Ascending' node, and create it sorted
-tree->sortorder(FL_TREE_SORT_NONE);
-tree->add("Ascending")->close();
-tree->sortorder(FL_TREE_SORT_ASCENDING);
-tree->add("Ascending/Zzz");
-tree->add("Ascending/Xxx");
-tree->add("Ascending/Aaa");
-tree->add("Ascending/Bbb");
-tree->add("Ascending/Yyy");
-tree->add("Ascending/Ccc");
-
-// Add a 'Descending' node, and create it sorted
-tree->sortorder(FL_TREE_SORT_NONE);
-tree->add("Descending")->close();
-tree->sortorder(FL_TREE_SORT_DESCENDING);
-tree->add("Descending/Zzz");
-tree->add("Descending/Xxx");
-tree->add("Descending/Aaa");
-tree->add("Descending/Bbb");
-tree->add("Descending/Yyy");
-tree->add("Descending/Ccc");
-
-// Add a long line to trigger horiz scrollbar
-tree->sortorder(FL_TREE_SORT_NONE);
-tree->add("Long Line")->close();
-tree->add("Long Line/The quick brown fox jumped over the lazy dog. 0123456789");
-tree->add("Long Line/Longer Line")->close();
-tree->add("Long Line/Longer Line/The quick brown fox jumped over the lazy dog. ---------------- 0123456789");
-
-// Add 500 items in numerical order
-for ( int t=0; t<500; t++ ) {
-    static char s[80];
-    sprintf(s, "500 Items/item %04d", t+1);
-    tree->add(s);
-}
-tree->close("500 Items");	// close the 500 items by default
-
-AssignUserIcons();
-
-tree->redraw();
-Fl_Group::current(0);} {}
-}
-
-Function {EditColor(Fl_Color &val)} {
-  comment {Prompt the user to change the specified color} return_type Fl_Color
-} {
-  code {// Returns:
-//     1 if color picked with new color in 'val'
-//     0 if user hit 'Cancel'.
-//
-uchar r,g,b;
-
-// Get the current color
-Fl::get_color(val,r,g,b);
-
-// Bring up a color chooser to edit it
-int ret = fl_color_chooser("Choose Color",r,g,b);
-
-val = fl_rgb_color(r,g,b);
-
-
-return(ret);} {}
-}
-
-Function {UpdateColorChips()} {
-  comment {Updates the color chips with current colors from widget} open return_type void
-} {
-  code {color_button->color(tree->color());
-labelcolor_button->color(tree->labelcolor());
-selection_color_button->color(tree->selection_color());
-
-item_labelfgcolor_button->color(tree->item_labelfgcolor());
-item_labelbgcolor_button->color(tree->item_labelbgcolor());
-
-all_labelfgcolor_button->color(tree->item_labelfgcolor());  // use default
-all_labelbgcolor_button->color(tree->item_labelbgcolor());  // use default
-
-window->redraw();} {}
-}
-
-Function {GetTreeMarginBottom()} {
-  comment {Get the current 'margin bottom' size
-Handles this as an ABI feature..} open return_type int
-} {
-  code {\#if FLTK_ABI_VERSION >= 10301
-return tree->marginbottom();
-\#else
-return 0;
-\#endif} {}
-}
-
-Function {GetTreeWidgetMarginLeft()} {
-  comment {Get the current 'margin bottom' size
-Handles this as an ABI feature..} open return_type int
-} {
-  code {\#if FLTK_ABI_VERSION >= 10301
-return tree->widgetmarginleft();
-\#else
-return 0;
-\#endif} {}
-}
-
-Function {GetSelectedItemFGColor()} {
-  comment {Return the selected item's fg color} open return_type Fl_Color
-} {
-  code {Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        return(item->labelfgcolor());
-    }
-}
-// No items selected? Use default
-return(tree->item_labelfgcolor());} {}
-}
-
-Function {GetSelectedItemBGColor()} {
-  comment {Return the selected item's bg color} open return_type Fl_Color
-} {
-  code {Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        return(item->labelbgcolor());
-    }
-}
-// No items selected? Use default
-return(tree->item_labelbgcolor());} {}
-}
-
-Function {} {open
-} {
-  Fl_Window window {
-    label tree open
-    xywh {600 253 1045 580} type Double hide
-  } {
-    Fl_Group tree {
-      label Tree
-      user_data 1234
-      callback {G_cb_counter++; // Increment callback counter whenever tree callback is invoked
-Fl_Tree_Item *item = tree->callback_item();
-if ( item ) {
-  fprintf(stderr, "TREE CALLBACK: label='%s' userdata=%ld reason=%s, changed=%d",
-          item->label(),
-          (long)(fl_intptr_t)tree->user_data(),
-	  reason_as_name(tree->callback_reason()),
-	  tree->changed() ? 1 : 0);
-  // More than one click? show click count
-  //    Should only happen if reason==FL_TREE_REASON_RESELECTED.
-  //
-  if ( Fl::event_clicks() > 0 ) {
-    fprintf(stderr, ", clicks=%d\\n", (Fl::event_clicks()+1));
-  } else {
-    fprintf(stderr, "\\n");
-  } 
-} else {
-  fprintf(stderr, "TREE CALLBACK: reason=%s, changed=%d, item=(no item -- probably multiple items were changed at once)\\n",
-          reason_as_name(tree->callback_reason()),
-          tree->changed() ? 1 : 0);
-}
-tree->clear_changed();} open
-      tooltip {Test tree} xywh {15 22 320 539} box DOWN_BOX color 55 selection_color 15
-      class Fl_Tree
-    } {}
-    Fl_Group {} {open
-      xywh {350 5 681 615}
-      code0 {o->resizable(0);}
-    } {
-      Fl_Box {} {
-        label {Tree Globals}
-        tooltip {These controls only affect the selected items. If no items are selected, all existing items in tree are modified.} xywh {350 23 330 389} box GTK_DOWN_BOX color 47 labelsize 12 align 1
-      }
-      Fl_Value_Slider margintop_slider {
-        label {margintop()}
-        user_data tree
-        callback {int val = (int)margintop_slider->value();
-tree->margintop(val);
-tree->redraw();}
-        tooltip {Changes the top margin for the tree widget} xywh {505 40 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->margintop());}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider marginleft_slider {
-        label {marginleft()}
-        user_data tree
-        callback {int val = (int)marginleft_slider->value();
-tree->marginleft(val);
-tree->redraw();}
-        tooltip {Changes the left margin for the tree widget} xywh {505 60 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->marginleft());}
-        code1 {o->range(0.0, 200.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider marginbottom_slider {
-        label {marginbottom()}
-        user_data tree
-        callback {\#if FLTK_ABI_VERSION >= 10301
-// NEW
-int val = (int)marginbottom_slider->value();
-tree->marginbottom(val);
-tree->redraw();
-\#else
-// OLD
-marginbottom_slider->deactivate();  // deactivate if this ABI feature is disabled
-marginbottom_slider->tooltip("DISABLED.\\n"
-                              "Set FLTK_ABI_VERSION to 10301 (or higher)\\n"
-                              "to enable this feature");
-\#endif}
-        tooltip {Changes the bottom margin for the tree
-Sets how far beyond bottom of tree you can scroll} xywh {505 80 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(GetTreeMarginBottom()); // handle ABI feature}
-        code1 {o->range(0.0, 275.0);}
-        code2 {o->step(1.0);}
-        code3 {o->do_callback();}
-      }
-      Fl_Value_Slider linespacing_slider {
-        label {linespacing()}
-        user_data tree
-        callback {int val = (int)linespacing_slider->value();
-tree->linespacing(val);
-tree->redraw();}
-        tooltip {Changes the spacing between items in the tree} xywh {505 100 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->linespacing());}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider usericonmarginleft_slider {
-        label {usericonmarginleft()}
-        user_data tree
-        callback {int val = (int)usericonmarginleft_slider->value();
-tree->usericonmarginleft(val);
-tree->redraw();}
-        tooltip {Changes the left margin for the user icons (if any)} xywh {505 120 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->usericonmarginleft());}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider labelmarginleft_slider {
-        label {labelmarginleft()}
-        user_data tree
-        callback {int val = (int)labelmarginleft_slider->value();
-tree->labelmarginleft(val);
-tree->redraw();}
-        tooltip {Changes the left margin for the item label} xywh {505 140 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->labelmarginleft());}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider widgetmarginleft_slider {
-        label {widgetmarginleft()}
-        user_data tree
-        callback {\#if FLTK_ABI_VERSION >= 10301
-int val = (int)widgetmarginleft_slider->value();
-tree->widgetmarginleft(val);
-tree->redraw();
-\#else
-widgetmarginleft_slider->deactivate();
-widgetmarginleft_slider->tooltip("DISABLED.\\n"
-                                 "Set FLTK_ABI_VERSION to 10301 (or higher)\\n"
-                                 "to enable this feature");
-\#endif}
-        tooltip {Changes the margin to the left of child FLTK widget()
-"Show label + widget" must be 'on' for this to take effect, i.e.
-item_draw_mode(FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET)} xywh {505 160 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(GetTreeWidgetMarginLeft());  // handle ABI feature}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-        code3 {o->do_callback();}
-      }
-      Fl_Value_Slider openchild_marginbottom_slider {
-        label {openchild_marginbottom()}
-        user_data tree
-        callback {int val = (int)openchild_marginbottom_slider->value();
-tree->openchild_marginbottom(val);
-tree->redraw();}
-        tooltip {Changes the vertical space below an open child tree} xywh {505 180 155 16} type Horizontal color 46 selection_color 1 labelsize 10 align 4 textsize 9
-        code0 {o->value(tree->openchild_marginbottom());}
-        code1 {o->range(0.0, 100.0);}
-        code2 {o->step(1.0);}
-      }
-      Fl_Value_Slider connectorwidth_slider {
-        label {connectorwidth()}
-        user_data tree
-        callback {tree->connectorwidth((int)connectorwidth_slider->value());}
-        tooltip {Tests Fl_Tree::connectorwidth()} xywh {505 199 155 16} type Horizontal color 46 selection_color 1 labelsize 11 align 4 textsize 9
-        code0 {o->value(tree->connectorwidth());}
-        code1 {o->range(1.0, 100.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-      Fl_Choice collapseicons_chooser {
-        label {Collapse icons}
-        callback {static const char *L_open_xpm[] = {
-\#ifdef __APPLE__
-  "11 11 3 1",
-  ".	c \#fefefe",
-  "\#	c \#444444",
-  "@	c \#000000",
-  "\#\#\#\#\#\#\#\#\#\#\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#....@....\#",
-  "\#....@....\#",
-  "\#..@@@@@..\#",
-  "\#....@....\#",
-  "\#....@....\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#\#\#\#\#\#\#\#\#\#\#"
-\#else
-    "11 11 2 1",
-    ".  c None",
-    "@  c \#000000",
-    "...@.......",
-    "...@@......",
-    "...@@@.....",
-    "...@@@@....",
-    "...@@@@@...",
-    "...@@@@@@..",
-    "...@@@@@...",
-    "...@@@@....",
-    "...@@@.....",
-    "...@@......",
-    "...@......."
-\#endif
-    };
-static Fl_Pixmap L_openpixmap(L_open_xpm);
-
-static const char *L_close_xpm[] = {
-\#ifdef __APPLE__
-  "11 11 3 1",
-  ".	c \#fefefe",
-  "\#	c \#444444",
-  "@	c \#000000",
-  "\#\#\#\#\#\#\#\#\#\#\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#..@@@@@..\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#.........\#",
-  "\#\#\#\#\#\#\#\#\#\#\#"
-\#else
-    "11 11 2 1",
-    ".  c None",
-    "@  c \#000000",
-    "...........",
-    "...........",
-    "...........",
-    "...........",
-    "...........",
-    "@@@@@@@@@@@",
-    ".@@@@@@@@@.",
-    "..@@@@@@@..",
-    "...@@@@@...",
-    "....@@@....",
-    ".....@....."
-\#endif
-    };
-static Fl_Pixmap L_closepixmap(L_close_xpm);
-
-switch ( collapseicons_chooser->value() ) {
-    case 0:
-        tree->showcollapse(1);
-        tree->openicon(0);
-        tree->closeicon(0);
-        break;
-    case 1:
-        tree->showcollapse(1);
-        tree->openicon(&L_openpixmap);
-        tree->closeicon(&L_closepixmap);
-        break;
-    case 2:
-        tree->showcollapse(0);
-        break;
-}}
-        tooltip {Tests Fl_Tree::openicon(), Fl_Tree::closeicon() and Fl_Tree::showcollapse().} xywh {520 225 140 21} down_box BORDER_BOX labelsize 12 textsize 11
-      } {
-        MenuItem {} {
-          label Normal
-          xywh {10 10 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Custom
-          xywh {20 20 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Off
-          xywh {30 30 36 21} labelsize 12
-        }
-      }
-      Fl_Choice connectorstyle_chooser {
-        label {Line style}
-        callback {// CHANGE COLLAPSESTYLE
-switch ( connectorstyle_chooser->value() ) {
-    case 0: tree->connectorstyle(FL_TREE_CONNECTOR_NONE);     break;
-    case 1: tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED);   break;
-    case 2: tree->connectorstyle(FL_TREE_CONNECTOR_SOLID);    break;
-}}
-        tooltip {Tests Fl_Tree::connectorstyle() bit flags} xywh {520 249 140 21} down_box BORDER_BOX labelsize 12 textsize 11
-        code0 {switch (tree->connectorstyle()) { case FL_TREE_CONNECTOR_NONE: connectorstyle_chooser->value(0); break; case FL_TREE_CONNECTOR_DOTTED: connectorstyle_chooser->value(1); break; case FL_TREE_CONNECTOR_SOLID: connectorstyle_chooser->value(2); break; }}
-      } {
-        MenuItem {} {
-          label None
-          xywh {40 40 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Dotted
-          xywh {20 20 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Solid
-          xywh {30 30 36 21} labelsize 12
-        }
-      }
-      Fl_Choice selectmode_chooser {
-        label {Selection Mode}
-        callback {// Set selection mode
-switch ( selectmode_chooser->value() ) {
-    case 0:  tree->selectmode(FL_TREE_SELECT_NONE);   break;	// None
-    case 1:  tree->selectmode(FL_TREE_SELECT_SINGLE); break;	// Single
-    case 2:  tree->selectmode(FL_TREE_SELECT_MULTI);  break; 	// Multi
-    case 3:  tree->selectmode(FL_TREE_SELECT_SINGLE_DRAGGABLE);  break; // Single draggable
-    default: tree->selectmode(FL_TREE_SELECT_SINGLE); break;	// Single
-}} open
-        tooltip {Tests Fl_Tree::selectmode()
-Sets how Fl_Tree handles mouse selection of tree items.
-    NONE	-- Not selectable by keyboard/mouse
-    SINGLE	-- Only one item at a time selectable by keyboard/mouse
-    MULTI	-- Multiple items selectable} xywh {520 273 140 21} down_box BORDER_BOX labelsize 12 textsize 11
-        code0 {selectmode_chooser->value(2);}
-        code1 {cb_selectmode_chooser(selectmode_chooser, (void*)0);}
-      } {
-        MenuItem {} {
-          label None
-          xywh {40 40 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Single
-          xywh {50 50 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Multi
-          xywh {60 60 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Single + drag}
-          xywh {70 70 36 21} labelsize 12
-        }
-      }
-      Fl_Choice reselectmode_chooser {
-        label {Item Reselect Mode}
-        callback {\#if FLTK_ABI_VERSION >= 10301
-// NEW
-// Set reselection mode
-switch ( reselectmode_chooser->value() ) {
-    case 0: tree->item_reselect_mode(FL_TREE_SELECTABLE_ONCE);   break;
-    case 1: tree->item_reselect_mode(FL_TREE_SELECTABLE_ALWAYS); break;
-}
-\#else
-// OLD
-reselectmode_chooser->deactivate();  // deactivate if this ABI feature is disabled
-reselectmode_chooser->tooltip("DISABLED.\\n"
-                              "Set FLTK_ABI_VERSION to 10301 (or higher)\\n"
-                              "to enable this feature");
-window->redraw();  // deactivated
-\#endif}
-        tooltip {Tests Fl_Tree::item_reselect_mode().
-Enables 'reselect' events.
-These happen when someone selects an item already selected
-(mouse drags or multi-clicks)} xywh {520 297 140 21} down_box BORDER_BOX labelsize 12 textsize 11
-        code0 {reselectmode_chooser->value(1);}
-        code1 {reselectmode_chooser->do_callback();}
-      } {
-        MenuItem {} {
-          label {Selectable Once}
-          xywh {50 50 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Selectable Always}
-          xywh {60 60 36 21} labelsize 12
-        }
-      }
-      Fl_Choice whenmode_chooser {
-        label When
-        callback {// Set when mode
-switch ( whenmode_chooser->value() ) {
-  case 0:  tree->when(FL_WHEN_RELEASE);   break;
-  case 1:  tree->when(FL_WHEN_CHANGED);   break;
-  case 2:  tree->when(FL_WHEN_NEVER);     break;
-  default: tree->when(FL_WHEN_RELEASE);   break;
-}}
-        tooltip {Sets when() the tree's callback is invoked} xywh {520 323 140 21} down_box BORDER_BOX labelsize 12 textsize 11
-        code0 {whenmode_chooser->value(1);}
-        code1 {cb_whenmode_chooser(whenmode_chooser, (void*)0);}
-      } {
-        MenuItem {} {
-          label Changed
-          xywh {50 50 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Released
-          xywh {60 60 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Never
-          xywh {70 70 36 21} labelsize 12
-        }
-      }
-      Fl_Check_Button usericon_radio {
-        label {Enable user icons?}
-        user_data tree
-        callback {AssignUserIcons();}
-        tooltip {Tests Fl_Tree_Item::usericon()} xywh {485 355 20 16} down_box DOWN_BOX labelsize 11 align 7
-        code0 {usericon_radio->value(1);}
-      }
-      Fl_Check_Button showroot_radio {
-        label {Show root?}
-        user_data tree
-        callback {int onoff = showroot_radio->value();
-tree->showroot(onoff);}
-        tooltip {Tests tree->showroot();} xywh {485 372 20 16} down_box DOWN_BOX labelsize 11 align 7
-        code0 {int onoff = tree->showroot(); showroot_radio->value(onoff);}
-      }
-      Fl_Check_Button visiblefocus_checkbox {
-        label {Visible focus?}
-        user_data tree
-        callback {int onoff = visiblefocus_checkbox->value();
-tree->visible_focus(onoff);}
-        tooltip {Toggles the tree's visible_focus() box} xywh {485 389 20 16} down_box DOWN_BOX labelsize 11 align 7
-        code0 {int onoff = tree->visible_focus(); visiblefocus_checkbox->value(onoff);}
-      }
-      Fl_Check_Button labelandwidget_radio {
-        label {Show label + widget}
-        callback {\#if FLTK_ABI_VERSION >= 10303
-// NEW
-int flags = tree->item_draw_mode();
-if ( labelandwidget_radio->value() )
-    { flags |= FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET; }
-else
-    { flags &= ~FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET; }
-tree->item_draw_mode(flags);
-tree->redraw();
-\#else
-// OLD
-labelandwidget_radio->deactivate();  // deactivate if this ABI feature is disabled
-labelandwidget_radio->tooltip("DISABLED.\\n"
-                              "Set FLTK_ABI_VERSION to 10303 (or higher)\\n"
-                              "to enable this feature");
-window->redraw();  // deactivated
-\#endif}
-        tooltip {Tests Fl_Tree::item_draw_mode(FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET)
-Enables both label and widget() for display.
-When enabled, widget should appear to the right of the item's label.
-By default, the widget() is shown in place of the item's label.} xywh {645 356 20 16} down_box DOWN_BOX labelsize 11 align 7
-        code0 {labelandwidget_radio->value(0);}
-        code1 {labelandwidget_radio->do_callback();}
-      }
-      Fl_Check_Button itemheightfromwidget_radio {
-        label {Item h() from widget}
-        callback {\#if FLTK_ABI_VERSION >= 10303
-// NEW
-int flags = tree->item_draw_mode();
-if ( itemheightfromwidget_radio->value() )
-    { flags |= FL_TREE_ITEM_HEIGHT_FROM_WIDGET; }
-else
-    { flags &= ~FL_TREE_ITEM_HEIGHT_FROM_WIDGET; }
-tree->item_draw_mode(flags);
-tree->redraw();
-\#else
-// OLD
-itemheightfromwidget_radio->deactivate();  // deactivate if this ABI feature is disabled
-itemheightfromwidget_radio->tooltip("DISABLED.\\n"
-                              "Set FLTK_ABI_VERSION to 10303 (or higher)\\n"
-                              "to enable this feature");
-window->redraw();  // deactivated
-\#endif}
-        tooltip {Tests Fl_Tree::item_draw_mode(FL_TREE_ITEM_HEIGHT_FROM_WIDGET)
-If enabled, item's height will track the widget()'s height.
-When enabled, click 'ccc' or 'D1/D2' buttons to test.} xywh {645 371 20 16} down_box DOWN_BOX labelsize 11 align 7
-        code0 {itemheightfromwidget_radio->value(0);}
-        code1 {itemheightfromwidget_radio->do_callback();}
-      }
-      Fl_Box {} {
-        label {Test Operations}
-        tooltip {These controls only affect the defaults for new items that are created. These test the Fl_Tree_Prefs methods.} xywh {350 435 330 125} box GTK_DOWN_BOX color 47 labelsize 12 align 1
-      }
-      Fl_Box showitem_box {
-        label {show_item()
-}
-        xywh {370 460 70 82} box GTK_DOWN_BOX labelsize 11 align 1
-      }
-      Fl_Button {} {
-        label Show
-        callback {Fl_Tree_Item *item = tree->next_selected_item();
-tree->show_item(item);}
-        tooltip {Tests show_item() with no position specified.
-Makes the selected item visible IF it is off-screen.
-No change made if it is not off-screen.} xywh {385 469 40 17} labelsize 11
-      }
-      Fl_Button {} {
-        label Top
-        callback {Fl_Tree_Item *item = tree->next_selected_item();
-tree->show_item_top(item);}
-        tooltip {Test show_item_top().
-Scrolls selected item to the top of the display
-(only works if scrollbar showing)
-To use:
-1) open '500 items'
-2) select item 0010
-3) Hit Top/Mid/Bot} xywh {385 486 40 16} labelsize 11
-      }
-      Fl_Button {} {
-        label Mid
-        callback {Fl_Tree_Item *item = tree->next_selected_item();
-tree->show_item_middle(item);}
-        tooltip {Tests show_item_middle().
-Scrolls the selected item to the middle of the display
-To use:
-  1) open '500 items'
-  2) select 'item 0010'
-  3) Hit Top/Mid/Bot} xywh {385 502 40 16} labelsize 11
-      }
-      Fl_Button {} {
-        label Bot
-        callback {Fl_Tree_Item *item = tree->next_selected_item();
-tree->show_item_bottom(item);}
-        tooltip {Tests show_item_bottom().
-Scrolls the selected item to the bottom of the display
-To use:
-  1) open '500 items'
-  2) select 'item 0010'
-  3) Hit Top/Mid/Bot} xywh {385 518 40 16} labelsize 11
-      }
-      Fl_Button openall_button {
-        label {Open All}
-        callback {for ( Fl_Tree_Item *item = tree->first();
-      item;
-      item = tree->next(item) ) {
-    if ( item->has_children() )
-        item->open();
-}
-tree->redraw();}
-        tooltip {Opens all nodes that have children} xywh {470 451 95 16} labelsize 9
-      }
-      Fl_Button loaddb_button {
-        label {Load Database...}
-        callback {const char *filename = fl_file_chooser("Select a Preferences style Database", "Preferences(*.prefs)", 0L);
-if (filename) {
-  tree->clear();
-  Fl_Preferences prefs(filename, 0L, 0L);
-  tree->load(prefs);
-  tree->redraw();
-}}
-        tooltip {Load the contents of an Fl_Preferences database into the tree view} xywh {470 471 95 16} labelsize 9
-      }
-      Fl_Button insertabove_button {
-        label {Insert Above}
-        callback {Fl_Tree_Item *item=tree->first();
-while (item) {
-    if ( item->is_selected() ) {
-        tree->insert_above(item, "AaaAaa");
-        tree->insert_above(item, "BbbBbb");
-        tree->insert_above(item, "CccCcc");
-    }
-    item = item->next();
-}
-
-tree->redraw();}
-        tooltip {Inserts three items above the selected items} xywh {470 491 95 16} labelsize 9
-      }
-      Fl_Button rebuildtree_button {
-        label {Rebuild Tree}
-        callback {RebuildTree();}
-        tooltip {Rebuilds the tree with defaults} xywh {470 511 95 16} labelsize 9
-      }
-      Fl_Button showpathname_button {
-        label {Show Pathname}
-        callback {Fl_Tree_Item *item = tree->first_selected_item();
-if ( !item ) { fl_message("No item was selected"); return; }
-
-char pathname[256];
-switch ( tree->item_pathname(pathname, sizeof(pathname), item) ) {
-    case  0: fl_message("Pathname for '%s' is: \\"%s\\"", (item->label() ? item->label() : "???"), pathname); break;
-    case -1: fl_message("item_pathname() returned -1 (NOT FOUND)"); break;
-    case -2: fl_message("item_pathname() returned -2 (STRING TOO LONG)"); break;
-}}
-        tooltip {Tests Fl_Tree::item_pathname()
-Show the pathname for the selected item.} xywh {470 531 95 16} labelsize 9
-      }
-      Fl_Button closeall_button {
-        label {Close All}
-        callback {for ( Fl_Tree_Item *item = tree->first();
-      item;
-      item = tree->next(item) ) {
-    if ( !item->is_root() && item->has_children() )
-        item->close();
-}
-tree->redraw();}
-        tooltip {Closes all nodes that have children
-(doesn't affect 'root')} xywh {570 451 95 16} labelsize 9
-      }
-      Fl_Button clearall_button {
-        label {Clear All}
-        callback {tree->clear();
-tree->redraw();}
-        tooltip {Tests Fl_Tree::clear().
-Clears all items} xywh {570 471 95 16} labelsize 9
-      }
-      Fl_Button testcallbackflag_button {
-        label {Test Callback Flag}
-        callback {Fl_Tree_Item *root = tree->root();
-fprintf(stderr, "--- Checking docallback off\\n");
-if (!root) return;
-
-//// "OFF" TEST
-
-// open/close: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->close(root, 0);       if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n close(item) triggered cb!");
-G_cb_counter = 0; tree->open(root, 0);        if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n open(item) triggered cb!");
-G_cb_counter = 0; tree->open_toggle(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n open_toggle(item) triggered cb!");
-G_cb_counter = 0; tree->open("ROOT", 0);      if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n open(path) triggered cb!");
-G_cb_counter = 0; tree->close("ROOT", 0);     if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n close(path) triggered cb!");
-tree->open(root,0);	// leave root open
-
-// select/deselect: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->select(root, 0);        if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n select(item) triggered cb!");
-G_cb_counter = 0; tree->deselect(root, 0);      if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n deselect(item) triggered cb!");
-G_cb_counter = 0; tree->select_toggle(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n select_toggle(item) triggered cb!");
-G_cb_counter = 0; tree->deselect("ROOT", 0);    if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n deselect(path) triggered cb!");
-G_cb_counter = 0; tree->select("ROOT", 0);      if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\\n select(path) triggered cb!");
-tree->deselect("ROOT"); // leave deselected
-
-//// "ON" TEST
-
-// open/close: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->close(root, 1);       if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n close(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open(root, 1);        if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n open(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open_toggle(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n open_toggle(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open(root, 1);        if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n open(item)[2] cb wasn't triggered!");
-G_cb_counter = 0; tree->close(root, 1);       if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n close(item)[2] cb wasn't triggered!");
-G_cb_counter = 0; tree->open("ROOT", 1);      if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n open(path) cb wasn't triggered!");
-G_cb_counter = 0; tree->close("ROOT", 1);     if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n close(path) cb wasn't triggered!");
-tree->open(root,0);	// leave root open
-
-// select/deselect: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->select(root, 1);        if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n select(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->deselect(root, 1);      if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n deselect(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->select_toggle(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n select_toggle(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->deselect("ROOT", 1);    if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n deselect(path) cb wasn't triggered!");
-G_cb_counter = 0; tree->select("ROOT", 1);      if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\\n select(path) cb wasn't triggered!");
-tree->deselect("ROOT"); // leave deselected
-
-//// "default" TEST (should be same as 'on'
-
-// open/close: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->close(root);       if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: close(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open(root);        if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open_toggle(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open_toggle(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->open("ROOT");      if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open(path) cb wasn't triggered!");
-G_cb_counter = 0; tree->close("ROOT");     if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: close(path) cb wasn't triggered!");
-tree->open(root,0);	// leave root open
-
-// select/deselect: Make sure these methods don't trigger cb
-G_cb_counter = 0; tree->select(root);        if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\\n select(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->deselect(root);      if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\\n deselect(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->select_toggle(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\\n select_toggle(item) cb wasn't triggered!");
-G_cb_counter = 0; tree->deselect("ROOT");    if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\\n deselect(path) cb wasn't triggered!");
-G_cb_counter = 0; tree->select("ROOT");      if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\\n select(path) cb wasn't triggered!");
-tree->deselect("ROOT"); // leave deselected
-
-fl_alert("TEST COMPLETED\\n If you didn't see any error dialogs, test PASSED.");}
-        tooltip {Test the 'docallback' argument can disable callbacks.} xywh {570 491 95 16} labelsize 9
-      }
-      Fl_Button testrootshowself_button {
-        label {Root Show Self}
-        callback {Fl_Tree_Item *root = tree->root();
-fprintf(stderr, "--- Show Tree\\n");
-if (root) root->show_self();}
-        tooltip {Test the root->'show_self() method to show the entire tree on stdout} xywh {570 511 95 16} labelsize 9
-      }
-      Fl_Button add20k_button {
-        label {Add 20,000}
-        callback {static int item_id = 501;
-Fl_Tree_Item *item=tree->first();
-while (item) {
-    if ( item->is_selected() ) {
-        Fl_Tree_Item *parent = item->parent();
-        if ( parent == 0 ) parent = tree->root();
-        char s[80];
-        for ( int i=0; i<20000; i++ ) {
-            sprintf(s, "Item \#%d", item_id+i);
-            tree->add(parent, s);
-        }
-        item_id += 20000;
-        break;
-    }
-    item = item->next();
-}
-tree->redraw();}
-        tooltip {Adds 20,000 items to the selected item's parent} xywh {570 531 95 16} labelsize 9
-      }
-      Fl_Box {} {
-        label {Selected Items}
-        tooltip {These controls only affect the selected items. If no items are selected, all existing items in tree are modified.} xywh {696 23 335 246} box GTK_DOWN_BOX color 47 labelsize 12 align 1
-      }
-      Fl_Choice selected_labelfont_choice {
-        label {Fl_Tree_Item::labelfont()}
-        callback {// Find first item in tree
-Fl_Tree_Item *item = tree->first();
-if ( !item ) return;
-
-// Get first item's font.
-Fl_Font val = (Fl_Font)selected_labelfont_choice->value(); // Get font value
-
-// Do selected items
-int count = 0;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->labelfont(val);
-        count++;
-    }
-}
-
-// No items selected? Do all..
-if ( ! count ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->labelfont(val);
-    }
-}
-
-tree->redraw();}
-        tooltip {Tests Fl_Tree_Item::labelfont();
-Changes the font for the selected items's labels.
-If none selected, all are changed.} xywh {863 31 140 21} down_box BORDER_BOX labelsize 11 textsize 11
-        code0 {o->value((int)tree->item_labelfont());   // get tree's current font, assign to chooser}
-      } {
-        MenuItem {} {
-          label Helvetica
-          xywh {30 30 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold}
-          xywh {40 40 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Italic}
-          xywh {55 55 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold Italic}
-          xywh {60 60 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Courier
-          xywh {70 70 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold}
-          xywh {80 80 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Italic}
-          xywh {65 65 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold Italic}
-          xywh {70 70 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Times
-          xywh {80 80 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold}
-          xywh {90 90 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Italic}
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold Italic}
-          xywh {80 80 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Symbol
-          xywh {90 90 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Screen
-          xywh {100 100 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Screen bold}
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Zapf Dingbats}
-          xywh {90 90 36 21} labelsize 12
-        }
-      }
-      Fl_Value_Slider selected_labelsize_slider {
-        label {Fl_Tree_Item::labelsize()}
-        user_data tree
-        callback {int size = (int)selected_labelsize_slider->value();
-
-// DO SELECTED ITEMS
-int count = 0;
-Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->labelsize(size);
-        count++;
-    }
-}
-
-// NO ITEMS SELECTED? DO ALL
-if ( ! count ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->labelsize(size);
-    }
-}
-
-tree->redraw();}
-        tooltip {Tests Fl_Tree_Item::labelsize();
-Changes the font size of the selected items's labels.
-If none selected, all are changed.} xywh {863 55 140 16} type Horizontal color 46 selection_color 1 labelsize 11 align 4 textsize 12
-        code0 {o->value(tree->item_labelsize());}
-        code1 {o->range(5.0, 200.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-      Fl_Button all_labelfgcolor_button {
-        label {Fl_Tree_Item::labelfgcolor()}
-        callback {// Get first item's color
-Fl_Color val = GetSelectedItemFGColor();		// Get color of first selected item
-if ( EditColor(val) == 0 ) return;			// Let user edit color. (return if they hit 'Cancel')
-all_labelfgcolor_button->color(val);			// update modified color to button
-
-// Do selected items
-int count = 0;
-Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->labelfgcolor(val);
-        count++;
-    }
-}
-
-// No items selected? Do all..
-if ( ! count ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->labelfgcolor(val);
-    }
-}
-
-tree->redraw();}
-        tooltip {Sets the Fl_Tree_Item::labelfgcolor() for the selected items. If none selected, all are changed.} xywh {863 81 16 16} box DOWN_BOX labelsize 11 align 7
-        code0 {o->color(GetSelectedItemFGColor());}
-      }
-      Fl_Button all_labelbgcolor_button {
-        label {Fl_Tree_Item::labelbgcolor()}
-        callback {// Get first item's color
-Fl_Color val = GetSelectedItemBGColor();		// Get color of first selected item
-if ( EditColor(val) == 0 ) return;			// Let user edit color. (return if they hit 'Cancel')
-all_labelbgcolor_button->color(val);			// update modified color to button
-
-// Do selected items
-int count = 0;
-Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->labelbgcolor(val);
-        count++;
-    }
-}
-
-// No items selected? Do all..
-if ( ! count ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->labelbgcolor(val);
-    }
-}
-
-tree->redraw();}
-        tooltip {Sets the Fl_Tree_Item::labelbgcolor() for the selected items. If none selected, all are changed.} xywh {863 99 16 16} box DOWN_BOX labelsize 11 align 7
-        code0 {o->color(GetSelectedItemBGColor());}
-      }
-      Fl_Light_Button deactivate_items_toggle {
-        label { Deactivate Items}
-        callback {int onoff = deactivate_items_toggle->value() ? 0 : 1;
-
-Fl_Tree_Item *item;
-int count = 0;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->activate(onoff);
-        ++count;
-    }
-}
-
-if ( count == 0 ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->activate(onoff);
-    }
-}
-
-tree->redraw();}
-        tooltip {Toggle the deactivation state of the selected items.
-If none are selected, all are set.} xywh {758 134 100 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button deactivate_tree_toggle {
-        label { Deactivate Tree}
-        callback {if ( deactivate_tree_toggle->value() )
-    tree->deactivate();
-else
-    tree->activate();}
-        tooltip {Deactivates the entire tree widget} xywh {758 154 100 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button bold_toggle {
-        label { Bold Font}
-        callback {int face = bold_toggle->value() ? FL_HELVETICA_BOLD : FL_HELVETICA;
-
-// DO SELECTED ITEMS
-int count = 0;
-Fl_Tree_Item *item;
-for ( item=tree->first(); item; item = tree->next(item) ) {
-    if ( item->is_selected() ) {
-        item->labelfont(face);
-        count++;
-    }
-}
-
-// NO ITEMS SELECTED? DO ALL
-if ( ! count ) {
-    for ( item=tree->first(); item; item = tree->next(item) ) {
-        item->labelfont(face);
-    }
-}
-
-tree->redraw();}
-        tooltip {Toggles bold font for selected items
-If nothing selected, all are changed} xywh {758 174 100 16} selection_color 1 labelsize 9
-      }
-      Fl_Button showselected_button {
-        label {Show Selected}
-        callback {fprintf(stderr, "--- SELECTED ITEMS\\n");
-for ( Fl_Tree_Item *item = tree->first_selected_item();
-      item;
-      item = tree->next_selected_item(item) ) {
-  fprintf(stderr, "\\t%s\\n", item->label() ? item->label() : "???");
-}}
-        tooltip {Clears the selected items} xywh {864 134 95 16} labelsize 9
-      }
-      Fl_Button clearselected_button {
-        label {Remove Selected}
-        callback {Fl_Tree_Item *item=tree->first();
-while (item) {
-    if ( item->is_selected() ) {
-    	if ( tree->remove(item) == -1 ) break;
-    	item = tree->first();
-    } else {
-        item = item->next();
-    }
-}
-
-tree->redraw();}
-        tooltip {Removes the selected items} xywh {864 154 95 16} labelsize 9
-      }
-      Fl_Button swapselected_button {
-        label {Swap Selected}
-        callback {Fl_Tree_Item *item=tree->first();
-Fl_Tree_Item *a = 0, *b = 0;
-while (item) {
-    if ( item->is_selected() ) {
-             if ( !a ) a = item;
-        else if ( !b ) b = item;
-        else {
-          fl_alert("Too many items selected. (must select only two)");
-          return;
-        }
-    }
-    item = item->next();
-}
-if ( !a || !b ) {
-  fl_alert("Too few items selected. (you must select two)");
-  return;
-}
-Fl_Tree_Item *pa = a->parent();
-Fl_Tree_Item *pb = b->parent();
-if ( pa != pb ) {
-  fl_alert("The two selected items must be siblings");
-  return;
-}
-pa->swap_children(a,b);
-tree->redraw();}
-        tooltip {Tests the Fl_Tree_Item::swap_children() method
-Swaps two selected items (items must be siblings)} xywh {864 174 95 16} labelsize 9
-      }
-      Fl_Button selectall_button {
-        label {Select All}
-        callback {tree->select_all(0);
-tree->redraw();}
-        tooltip {Selects all items in the tree} xywh {714 199 95 16} labelsize 9
-      }
-      Fl_Button deselectall_button {
-        label {Deselect All}
-        callback {tree->deselect_all(0);
-tree->redraw();}
-        tooltip {Deselects all items in the tree} xywh {714 219 95 16} labelsize 9
-      }
-      Fl_Button nextselected_button {
-        label {next_selected()}
-        callback {printf("--- TEST next_selected():\\n");
-printf("    // Walk down the tree (forwards)\\n");
- for ( Fl_Tree_Item *i=tree->first_selected_item(); i; i=tree->next_selected_item(i, FL_Down) ) {
-     printf("    Selected item: %s\\n", i->label()?i->label():"<nolabel>");
- }
-
-printf("    // Walk up the tree (backwards)\\n");
- for ( Fl_Tree_Item *i=tree->last_selected_item(); i; i=tree->next_selected_item(i, FL_Up) ) {
-     printf("    Selected item: %s\\n", i->label()?i->label():"<nolabel>");
- }}
-        tooltip {Tests the Fl_Tree::next_selected() function} xywh {713 239 95 16} labelsize 9
-      }
-      Fl_Light_Button bbbselect_toggle {
-        label { Select Bbb}
-        callback {// Toggle select of just the Bbb item (not children)
-Fl_Tree_Item *bbb = tree->find_item("/Bbb");
-if ( !bbb) {
-  fl_alert("FAIL: Couldn't find item '/Bbb'???");
-  return;
-}
-int onoff = bbbselect_toggle->value();
-if ( onoff ) tree->select(bbb);		// select /Bbb
-else         tree->deselect(bbb);	// deselect /Bbb}
-        tooltip {Toggle selection of just the /Bbb item
-(Not children)} xywh {814 199 95 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button bbbselect2_toggle {
-        label { Select Bbb+}
-        callback {// Toggle select of just the Bbb item and its immediate children
-Fl_Tree_Item *bbb = tree->find_item("/Bbb");
-if ( !bbb) {
-  fl_alert("FAIL: Couldn't find item '/Bbb'???");
-  return;
-}
-int onoff = bbbselect2_toggle->value();
-if ( onoff ) tree->select_all(bbb);		// select /Bbb and its children
-else         tree->deselect_all(bbb);	// deselect /Bbb and its children}
-        tooltip {Toggle selection of the /Bbb item and its children} xywh {814 219 95 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button bbbchild02select_toggle {
-        label { Toggle child-02}
-        callback {// Toggle select of just the /Bbb/child-02 item
-const char *pathname = "/Bbb/child-02";
-int onoff = bbbchild02select_toggle->value();
-int err = 0;
-if ( onoff ) err = tree->select(pathname);
-else         err = tree->deselect(pathname);
-
-if ( err == -1 ) {
-  fl_alert("FAIL: Couldn't find item '%s'",pathname);
-  return;
-}}
-        tooltip {Toggle the single item "/Bbb/child-02" using the item's "pathname".} xywh {814 239 95 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button rootselect_toggle {
-        label {Select ROOT}
-        callback {// Toggle select of ROOT item and its children
-Fl_Tree_Item *item = tree->find_item("/ROOT");
-if ( !item) {
-  fl_alert("FAIL: Couldn't find item '/ROOT'???");
-  return;
-}
-int onoff = rootselect_toggle->value();
-if ( onoff ) tree->select(item);	// select /ROOT and its children
-else         tree->deselect(item);	// deselect /ROOT and its children}
-        tooltip {Toggle selection of the ROOT item} xywh {914 199 100 16} selection_color 1 labelsize 9
-      }
-      Fl_Light_Button rootselect2_toggle {
-        label {Select ROOT+}
-        callback {// Toggle select of ROOT item and its children
-Fl_Tree_Item *item = tree->find_item("/ROOT");
-if ( !item) {
-  fl_alert("FAIL: Couldn't find item '/ROOT'???");
-  return;
-}
-int onoff = rootselect2_toggle->value();
-if ( onoff ) tree->select_all(item);	// select /ROOT and its children
-else         tree->deselect_all(item);	// deselect /ROOT and its children}
-        tooltip {Toggle selection of the ROOT item and all children} xywh {914 219 100 16} selection_color 1 labelsize 9
-      }
-      Fl_Box {} {
-        label {Tree Fonts + Colors}
-        tooltip {These controls only affect the selected items. If no items are selected, all existing items in tree are modified.} xywh {695 298 335 186} box GTK_DOWN_BOX color 47 labelsize 12 align 1
-      }
-      Fl_Choice labelfont_choice {
-        label {labelfont()}
-        callback {Fl_Font val = (Fl_Font)labelfont_choice->value();
-tree->labelfont(val);
-window->redraw();}
-        tooltip {Sets the default font used for new items created. Does NOT affect existing items.} xywh {848 314 140 21} down_box BORDER_BOX labelsize 12 textsize 12
-        code0 {o->value((int)tree->labelfont());   // get tree's current font, assign to chooser}
-      } {
-        MenuItem {} {
-          label Helvetica
-          xywh {35 35 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold}
-          xywh {45 45 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Italic}
-          xywh {60 60 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold Italic}
-          xywh {65 65 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Courier
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold}
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Italic}
-          xywh {70 70 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold Italic}
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Times
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold}
-          xywh {95 95 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Italic}
-          xywh {80 80 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold Italic}
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Symbol
-          xywh {95 95 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Screen
-          xywh {105 105 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Screen bold}
-          xywh {90 90 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Zapf Dingbats}
-          xywh {95 95 36 21} labelsize 12
-        }
-      }
-      Fl_Value_Slider labelsize_slider {
-        label {labelsize()}
-        user_data tree
-        callback {tree->labelsize((int)labelsize_slider->value());
-window->redraw();}
-        tooltip {Sets the font size for the  tree's label().
-This is also the font size that will be used to draw the items IF their size hasn't been set with Fl_Tree_Item::labelsize() or Fl_Tree::item_labelsize()} xywh {848 338 140 16} type Horizontal color 46 selection_color 1 labelsize 12 align 4 textsize 12
-        code0 {o->value((int)tree->labelsize());}
-        code1 {o->range(1.0, 50.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-      Fl_Choice item_labelfont_choice {
-        label {Item_labelfont()}
-        callback {Fl_Font val = (Fl_Font)item_labelfont_choice->value();
-tree->item_labelfont(val);
-tree->redraw();}
-        tooltip {Sets the default font used for new items created.
-.Also affects any items whose font has NOT specifically been set with item->labelfont().} xywh {848 358 140 21} down_box BORDER_BOX labelsize 12 textsize 12
-        code0 {o->value((int)tree->item_labelfont());}
-      } {
-        MenuItem {} {
-          label Helvetica
-          xywh {25 25 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold}
-          xywh {35 35 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Italic}
-          xywh {50 50 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Helvetica Bold Italic}
-          xywh {55 55 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Courier
-          xywh {65 65 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold}
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Italic}
-          xywh {60 60 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Courier Bold Italic}
-          xywh {65 65 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Times
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold}
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Italic}
-          xywh {70 70 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Times Bold Italic}
-          xywh {75 75 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Symbol
-          xywh {85 85 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label Screen
-          xywh {95 95 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Screen bold}
-          xywh {80 80 36 21} labelsize 12
-        }
-        MenuItem {} {
-          label {Zapf Dingbats}
-          xywh {85 85 36 21} labelsize 12
-        }
-      }
-      Fl_Value_Slider item_labelsize_slider {
-        label {item_labelsize()}
-        user_data tree
-        callback {tree->item_labelsize((int)item_labelsize_slider->value());
-tree->redraw();}
-        tooltip {Sets the default font size used for new items created.
-.Also affects any items whose font size has NOT specifically been set with item->labelsize().} xywh {848 383 140 16} type Horizontal color 46 selection_color 1 labelsize 12 align 4 textsize 12
-        code0 {o->value((int)tree->item_labelsize());}
-        code1 {o->range(1.0, 50.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-      Fl_Button labelcolor_button {
-        label {labelcolor()}
-        callback {Fl_Color val = tree->labelcolor();
-if ( EditColor(val) == 0 ) return;			// Let user edit color. (return if they hit 'Cancel')
-labelcolor_button->color(val);				// update modified color to button
-tree->labelcolor(val);
-window->redraw();   // affects window (tree's label is outside tree's area)}
-        tooltip {Changes Fl_Tree::labelcolor().
-This affects the text color of the widget's label.} xywh {813 414 16 16} box DOWN_BOX labelsize 11 align 7
-        code0 {o->color(tree->labelcolor());}
-      }
-      Fl_Button color_button {
-        label {color()}
-        callback {Fl_Color val = tree->color();
-if ( EditColor(val) == 0 ) return;			// Let user edit color. (return if they hit 'Cancel')
-color_button->color(val);	// update modified color to button
-tree->color(val);
-UpdateColorChips();
-tree->redraw();}
-        tooltip {Changes Fl_Tree::color().
-This affects the background color of the widget. It also affects the bg color of newly created  items *if*  Fl_Tree::item_labelbgcolor() hasn't been changed.} xywh {813 433 16 16} box DOWN_BOX labelsize 11 align 7
-        code0 {o->color(tree->color());}
-      }
-      Fl_Button selection_color_button {
-        label {selection_color()}
-        callback {Fl_Color val = tree->selection_color();
-if ( EditColor(val) == 0 ) return;		// Let user edit color. (return if they hit 'Cancel')
-selection_color_button->color(val);		// update modified color to button
-tree->selection_color(val);
-tree->redraw();}
-        tooltip {Sets the Fl_Tree::selection_color().
-This affects the item's colors when they're selected.} xywh {813 452 16 16} box DOWN_BOX labelsize 11 align 7
-        code0 {o->color(tree->selection_color());}
-      }
-      Fl_Button item_labelfgcolor_button {
-        label {item_labelfgcolor()}
-        callback {Fl_Color val = tree->item_labelfgcolor();
-if ( EditColor(val) == 0 ) return;		// Let user edit color. (return if they hit 'Cancel')
-tree->item_labelfgcolor(val);			// apply modified color to tree
-item_labelfgcolor_button->color(val);		// update modified color to button
-tree->redraw();}
-        tooltip {Sets the default label fg color for newly created  items.} xywh {973 414 16 16} box DOWN_BOX labelsize 12 align 7
-        code0 {o->color(tree->item_labelfgcolor());}
-      }
-      Fl_Button item_labelbgcolor_button {
-        label {item_labelbgcolor()}
-        callback {Fl_Color val = tree->item_labelbgcolor();
-if ( EditColor(val) == 0 ) return;		// Let user edit color. (return if they hit 'Cancel')
-tree->item_labelbgcolor(val);			// apply modified color to tree
-item_labelbgcolor_button->color(val);		// update modified color to button
-tree->redraw();}
-        tooltip {Sets the default label bg color for newly created items. When set, this overrides the default behavior of using Fl_Tree::color().} xywh {973 433 16 16} box DOWN_BOX labelsize 12 align 7
-        code0 {item_labelbgcolor_button->color(tree->item_labelbgcolor());}
-      }
-      Fl_Button x_item_labelbgcolor_button {
-        label X
-        callback {tree->item_labelbgcolor(0xffffffff);
-UpdateColorChips();
-tree->redraw();}
-        tooltip {Make the bgcolor 'transparent' (0xffffffff)} xywh {993 433 16 16} labelsize 10 align 16
-      }
-      Fl_Button testsuggs_button {
-        label {Test Suggestions}
-        callback {const char *helpmsg =
-"CHILD WIDGET SIZING TESTS\\n"
-"=========================\\n"
-"   1) Start program\\n"
-"   2) Click the 'ccc button' and D1/D2 buttons.\\n"
-"      Their sizes should not change.\\n"
-"   3) Click the 'Item h() from widget' checkbox.\\n"
-"   4) Click the 'ccc button' and D1/D2 buttons.\\n"
-"      Their sizes should change, getting larger vertically.\\n"
-"      This validates that widget's size can affect the tree.\\n"
-"   5) Disable the checkbox, widgets should resize back to the\\n"
-"      size of the other items.\\n"
-"   6) Hit ^A to select all items\\n"
-"   7) Under 'Selected Items', drag the 'Label Size' slider around.\\n"
-"      All the item's height should change, as well as child widgets.\\n"
-"   8) Put Label Size' slider back to normal\\n"
-"\\n"
-"CHILD WIDGET + LABEL ITEM DRAWING TESTS\\n"
-"=======================================\\n"
-"   1) Start program\\n"
-"   2) Click 'Show label + widget'.\\n"
-"      The widgets should all show item labels to their left.\\n"
-"   3) Disable same, item labels should disappear,\\n"
-"      showing the widgets in their place.\\n"
-"\\n"
-"COLORS\\n"
-"======\\n"
-"   1) Start program\\n"
-"   2) Change 'Tree Fonts+Colors' -> color()\\n"
-"   3) Entire tree's background color will change, including items.\\n"
-"   4) Change the 'Tree Fonts + Colors -> item_labelbgcolor()'\\n"
-"   6) Click the '111' item to select it.\\n"
-"   7) Click 'Test Operations -> Insert Above'\\n"
-"      New items should appear above the selected item using the new color.\\n"
-"      This color will be different from the background color.\\n"
-"   8) Change the 'Tree Fonts+Colors' -> color()\\n"
-"      The entire tree's bg should change, except the new items.\\n"
-"   9) Click the Tree Fonts+Colors -> item_labelbgcolor() 'X' button.\\n"
-"      This resets item_labelbgcolor() to the default 'transparent' color (0xffffffff)\\n"
-"  10) Again, click the 'Insert Above' button.\\n"
-"      New items will be created in the background color, and changing the color()\\n"
-"      should affect the new items too.\\n"
-"\\n"
-"SCROLLING\\n"
-"=========\\n"
-"   1) Open '500 items' and 'Long Line' so that both scrollbars appear:\\n"
-"        * The 'focus box' for the selected item should not be clipped\\n"
-"          horizontally by the vertical scrollbar.\\n"
-"        * Resizing the window horizontally should resize the focus box\\n"
-"        * Scrolling vertically/horizontally should show reveal all\\n"
-"          edges of the tree. One *exception* is the widget label\\n"
-"          to the right of the 'ccc button'; labels aren't part\\n"
-"          of the widget, and therefore don't affect scroll tabs\\n"
-"   2) Scroll vertical scroller to the middle of the tree\\n"
-"   3) Left click and drag up/down to extend the selection:\\n"
-"        * Selection should autoscroll if you drag off the top/bottom\\n"
-"        * Selection should work *even* if you drag horizontally\\n"
-"          off the window edge; moving up/down outside the window\\n"
-"          should continue to autoscroll\\n"
-"   4) Click either of the the scrollbar tabs and drag:\\n"
-"        * Even if you drag off the scrollbar, the scrollbar\\n"
-"          tab should continue to move\\n"
-"        * Should continue to work if you drag off the window edge\\n"
-"          horizontally drag off the window.\\n"
-"   5) Click 'Bbb' and hit 'Add 20,000', then position the\\n"
-"      'ccc button' so it's partially obscured by a scrollbar tab:\\n"
-"        * Clicking the obscured button should work\\n"
-"        * Clicking on the tab over the button should not 'click through'\\n"
-"          to the button.\\n"
-"";
-
-static Fl_Double_Window *helpwin  = 0;
-static Fl_Text_Display  *helpdisp = 0;
-static Fl_Text_Buffer   *helpbuff = 0;
-if ( !helpwin ) {
-  Fl_Group::current(0);  // ensure we don't become child of other win
-  helpwin = new Fl_Double_Window(600,600,"Test Suggestions");
-  helpdisp = new Fl_Text_Display(0,0,helpwin->w(),helpwin->h());
-  helpbuff = new Fl_Text_Buffer();
-  helpdisp->buffer(helpbuff);
-  helpdisp->textfont(FL_COURIER);
-  helpdisp->textsize(12);
-  helpbuff->text(helpmsg);
-  helpwin->end();
-}
-helpwin->resizable(helpdisp);
-helpwin->show();}
-        tooltip {Suggestions on how to do tests} xywh {935 554 95 16} labelsize 9
-      }
-      Fl_Value_Slider tree_scrollbar_size_slider {
-        label {Fl_Tree::scrollbar_size()}
-        callback {tree->scrollbar_size((int)tree_scrollbar_size_slider->value());
-tree->redraw();}
-        tooltip {Tests Fl_Tree::scrollbar_size() effects on tree clipping.
-The value is normally 0, which causes Fl_Tree to use the global Fl::scrollbar_size() instead.} xywh {835 499 180 16} type Horizontal color 46 selection_color 1 labelsize 11 align 4 textsize 9
-        code0 {o->value(tree->scrollbar_size());}
-        code1 {o->range(0.0, 30.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-      Fl_Value_Slider scrollbar_size_slider {
-        label {Fl::scrollbar_size()}
-        callback {Fl::scrollbar_size((int)scrollbar_size_slider->value());
-tree->redraw();}
-        tooltip {Tests Fl::scrollbar_size() effects on tree clipping} xywh {835 519 180 16} type Horizontal color 46 selection_color 1 labelsize 11 align 4 textsize 9
-        code0 {o->value(Fl::scrollbar_size());}
-        code1 {o->range(5.0, 30.0);}
-        code2 {o->step(1.0);}
-        code3 {o->color(46); o->selection_color(FL_RED);}
-      }
-    }
-    Fl_Box resizer_box {
-      xywh {0 263 15 14}
-    }
-  }
-  code {// Initialize Tree
-tree->root_label("ROOT");
-\#if FLTK_ABI_VERSION >= 10301
-tree->item_reselect_mode(FL_TREE_SELECTABLE_ALWAYS);
-\#endif
-RebuildTree();
-/*tree->show_self();*/} {}
-  code {// FLTK stuff
-
-//Fl::scheme("gtk+");
-
-Fl_Tooltip::size(10);		// small font for tooltips
-
-window->resizable(tree);
-window->size_range(window->w(), window->h(), 0, 0);
-
-     if ( tree->when() == FL_WHEN_CHANGED ) whenmode_chooser->value(0);
-else if ( tree->when() == FL_WHEN_RELEASE ) whenmode_chooser->value(1);
-else if ( tree->when() == FL_WHEN_NEVER   ) whenmode_chooser->value(2);} {}
-}
--- a/DoConfig/fltk/test/twowin.cxx
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$"
-//
-// Cross-window focus test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Input.H>
-
-static Fl_Input *b1, *b2;
-
-static void cb1(Fl_Widget *, void *) {
-  b2->take_focus();
-}
-
-static void cb2(Fl_Widget *, void *) {
-  b1->take_focus();
-}
-
-int main(int argc, char **argv) {
-
-  Fl_Double_Window *win1 = new Fl_Double_Window(200, 200);
-  Fl_Button *bb1 = new Fl_Button(10, 10, 100, 100, "b1");
-  bb1->callback(cb1);
-  b1 = new Fl_Input(10, 150, 100, 25);
-  win1->label("win1");
-  win1->end();
-
-  Fl_Double_Window *win2 = new Fl_Double_Window(200, 200);
-  Fl_Button *bb2 = new Fl_Button(10, 10, 100, 100, "b2");
-  bb2->callback(cb2);
-  b2 = new Fl_Input(10, 150, 100, 25);
-  win2->label("win2");
-  win2->end();
-
-  win1->position(200, 200);
-  win2->position(400, 200);
-
-  win1->show(argc,argv);
-  win2->show();
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/unittest_about.cxx
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Help_View.H>
-
-//
-//------- Introduction to FLTK drawing test -------
-//
-class About : public Fl_Help_View {
-public:
-  static Fl_Widget *create() {
-    return new About(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  About(int x, int y, int w, int h) : Fl_Help_View(x, y, w, h) {
-    value(
-"<htmL><body><h2>About Unit Testing...</h2>\n"
-"The Unit Testing application can be used to verify correct graphics rendering "
-"on the current platform. The core developer team uses this program to make sure that the "
-"FLTK user experience is identical on all supported graphics systems."
-"<h3>the UI Designer</h3>\n"
-"<p>Designing a good user interface is an art. Widgets must be selected and carefully positioned "
-"to create a consistent look and feel for the user. Text must fit into given boxes and graphic "
-"elements must be correctly aligned. A good UI library will give consistent results on any "
-"supported platform and render all graphics in the way the UI designer intended.</p>\n"
-"<p>FLTK supports a large collection of platforms and graphics drivers. This unit testing "
-"application contains modules which will test rendering and alignment for most "
-"FLTK core graphics functions.</p>\n"
-"<h3>the Developer</h3>\n"
-"<p>Unittest is also a great help when implementing new graphics drivers. The tests are sorted "
-"in the same order in which a new graphics driver could be implemented. Most tests rely "
-"on the previous test to function correctly, so sticking to the given order is a good idea.</p>\n"
-"<h3>Conventions</h3>\n"
-"<p>Two layers of graphics are drawn for most tests. The lower layer contains "
-"red and green pixels. The upper layer contains black pixels. The test is rendered correctly "
-"if all red pixels are covered, but none of the green pixels. The top graphics layer can be "
-"switched on and off.</p>"
-"</body></html>");
-  }
-};
-
-UnitTest about("About...", About::create);
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/unittest_circles.cxx
+++ /dev/null
@@ -1,90 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-//------- test the circle drawing capabilities of this implementation ----------
-//
-class CircleTest : public Fl_Box {
-public: 
-  static Fl_Widget *create() { 
-    return new CircleTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  CircleTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
-    label("testing int drawing of circles and ovals (fl_arc, fl_pie)\n"
-          "No red lines should be visible. "
-          "If you see bright red pixels, the circle drawing alignment is off. "
-          "If you see dark red pixels, your system supports anti-aliasing "
-          "which should be of no concern. "
-          "The green rectangles should not be overwritten by circle drawings.");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void draw() {
-    Fl_Box::draw();
-    int a = x()+10, b = y()+10; fl_color(FL_BLACK); fl_rect(a, b, 100, 100);
-    // test fl_arc for full circles
-    fl_color(FL_GREEN); fl_rect(a+ 9, b+ 9, 33, 33);
-    fl_color(FL_RED); fl_xyline(a+24, b+10, a+27); fl_xyline(a+24, b+40, a+27);
-    fl_yxline(a+10, b+24, b+27); fl_yxline(a+40, b+24, b+27);
-    fl_color(FL_BLACK); fl_arc(a+10, b+10, 31, 31, 0.0, 360.0);
-    // test fl_arc segmet 1
-    fl_color(FL_GREEN); fl_rect(a+54, b+ 4, 43, 43);
-    fl_rect(a+54, b+4, 18, 18); fl_rect(a+79, b+29, 18, 18);
-    fl_color(FL_RED); fl_point(a+55, b+30); fl_point(a+70, b+45);
-    fl_point(a+80, b+5); fl_point(a+95, b+20);
-    fl_color(FL_BLACK); fl_arc(a+65, b+ 5, 31, 31, -35.0, 125.0);
-    // test fl_arc segmet 2
-    fl_color(FL_BLACK); fl_arc(a+55, b+15, 31, 31, 145.0, 305.0);
-    // test fl_pie for full circles
-    fl_color(FL_RED); fl_xyline(a+24, b+60, a+27); fl_xyline(a+24, b+90, a+27);
-    fl_yxline(a+10, b+74, b+77); fl_yxline(a+40, b+74, b+77);
-    fl_color(FL_GREEN); fl_rect(a+ 9, b+59, 33, 33);
-    fl_color(FL_BLACK); fl_pie(a+10, b+60, 31, 31, 0.0, 360.0);
-    // test fl_pie segmet 1
-    fl_color(FL_GREEN); fl_rect(a+54, b+54, 43, 43);
-    fl_rect(a+54, b+54, 18, 18); fl_rect(a+79, b+79, 18, 18);
-    fl_point(a+79, b+71); fl_point(a+71, b+79);
-    fl_color(FL_RED); fl_point(a+55, b+80); fl_point(a+70, b+95);
-    fl_point(a+80, b+55); fl_point(a+95, b+70);
-    fl_point(a+81, b+69); fl_point(a+69, b+81);
-    fl_color(FL_BLACK); fl_pie(a+65, b+55, 31, 31, -30.0, 120.0);
-    // test fl_pie segmet 2
-    fl_color(FL_BLACK); fl_pie(a+55, b+65, 31, 31, 150.0, 300.0);
-    //---- oval testing (horizontal squish)
-    a +=120; b += 0; fl_color(FL_BLACK); fl_rect(a, b, 100, 100);
-    fl_color(FL_GREEN);
-    fl_rect(a+19, b+9, 63, 33); fl_rect(a+19, b+59, 63, 33);
-    fl_color(FL_BLACK);
-    fl_arc(a+20, b+10, 61, 31, 0, 360); fl_pie(a+20, b+60, 61, 31, 0, 360);
-    //---- oval testing (horizontal squish)
-    a += 120; b += 0; fl_color(FL_BLACK); fl_rect(a, b, 100, 100);
-    fl_color(FL_GREEN);
-    fl_rect(a+9, b+19, 33, 63); fl_rect(a+59, b+19, 33, 63);
-    fl_color(FL_BLACK);
-    fl_arc(a+10, b+20, 31, 61, 0, 360); fl_pie(a+60, b+20, 31, 61, 0, 360);
-  }
-};
-
-UnitTest circle("circles and arcs", CircleTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_images.cxx
+++ /dev/null
@@ -1,202 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-// Note: currently (March 2010) fl_draw_image() supports transparency with
-//	 alpha channel only on Apple (Mac OS X), but Fl_RGB_Image->draw()
-//	 supports transparency on all platforms !
-
-//
-//------- test the image drawing capabilities of this implementation ----------
-//
-
-// Parameters for fine tuning for developers.
-// Default values: CB=1, DX=0, IMG=1, LX=0, FLIPH=0
-
-#define CB (1)    // 1 to show the checker board background for alpha images,
-		  // 0 otherwise
-#define DX (0)	  // additional (undefined (0)) pixels per line, must be >= 0
-		  // ignored (irrelevant), if LX == 0 (see below)
-#define IMG (1)	  // 1 to use Fl_RGB_Image for drawing images with transparency,
-		  // 0 to use fl_draw_image() instead.
-		  // Note: as of Feb 2016, only 1 (Fl_RGB_Image) works with
-		  // alpha channel, 0 (fl_draw_image()) ignores the alpha
-		  // channel (FLTK 1.3.x).
-		  // There are plans to support transparency (alpha channel)
-		  // in fl_draw_image() in FLTK 1.4.0 and/or later.
-#define LX (0)	  // 0 for default: ld() = 0, i.e. ld() defaults (internally) to w()*d()
-		  // +1: ld() = (w() + DX) * d()
-		  // -1 to flip image vertically: ld() = - ((w() + DX) * d())
-#define FLIPH (0) // 1 = Flip image horizontally (only if IMG == 0)
-		  // 0 = Draw image normal, w/o horizontal flipping
-
-// ----------------------------------------------------------------------
-//  Test scenario for fl_draw_image() with pos. and neg. d and ld args:
-// ----------------------------------------------------------------------
-//  (1) set IMG   =  0:	normal, but w/o transparency: no checker board
-//  (2) set LX    = -1:	images flipped vertically
-//  (3) set FLIPH =  1:	images flipped vertically and horizontally
-//  (4) set LX    =  0:	images flipped horizontally
-//  (5) set FLIPH =  0, IMG = 1: back to default (with transparency)
-// ----------------------------------------------------------------------
-
-
-class ImageTest : public Fl_Box {
-public: 
-  static Fl_Widget *create() {
-    int x, y;
-    uchar *dg, *dga, *drgb, *drgba;
-    dg    = img_gray   = (uchar*)malloc((128+DX)*128*1);
-    dga   = img_gray_a = (uchar*)malloc((128+DX)*128*2);
-    drgb  = img_rgb    = (uchar*)malloc((128+DX)*128*3);
-    drgba = img_rgba   = (uchar*)malloc((128+DX)*128*4);
-    for (y=0; y<128; y++) {
-      for (x=0; x<128; x++) {
-        *drgba++ = *drgb++ = *dga++ = *dg++ = y<<1;
-        *drgba++ = *drgb++                  = x<<1;
-        *drgba++ = *drgb++                  = (127-x)<<1;
-        *drgba++           = *dga++         = x+y;
-      }
-      if (DX > 0 && LX != 0) {
-        memset(dg,   0,1*DX); dg    += 1*DX;
-        memset(dga,  0,2*DX); dga   += 2*DX;
-        memset(drgb, 0,3*DX); drgb  += 3*DX;
-        memset(drgba,0,4*DX); drgba += 4*DX;
-      }
-    }
-    if (LX<0) {
-      img_gray   += 127*(128+DX);
-      img_gray_a += 127*(128+DX)*2;
-      img_rgb    += 127*(128+DX)*3;
-      img_rgba   += 127*(128+DX)*4;
-    }
-    if (FLIPH && !IMG ) {
-      img_gray   += 127;
-      img_gray_a += 127*2;
-      img_rgb    += 127*3;
-      img_rgba   += 127*4;
-    }
-    i_g    = new Fl_RGB_Image (img_gray  ,128,128,1,LX*(128+DX));
-    i_ga   = new Fl_RGB_Image (img_gray_a,128,128,2,LX*(128+DX)*2);
-    i_rgb  = new Fl_RGB_Image (img_rgb,   128,128,3,LX*(128+DX)*3);
-    i_rgba = new Fl_RGB_Image (img_rgba,  128,128,4,LX*(128+DX)*4);
-    return new ImageTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  static uchar *img_gray;
-  static uchar *img_gray_a;
-  static uchar *img_rgb;
-  static uchar *img_rgba;
-  static Fl_RGB_Image *i_g;
-  static Fl_RGB_Image *i_ga;
-  static Fl_RGB_Image *i_rgb;
-  static Fl_RGB_Image *i_rgba;
-  ImageTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
-    label("Testing Image Drawing\n\n"
-	"This test renders four images, two of them with a checker board\n"
-	"visible through the graphics. Color and gray gradients should be\n"
-	"visible. This does not test any image formats such as JPEG.");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void draw() {
-    Fl_Box::draw();
-
-    // top left: RGB
-
-    int xx = x()+10, yy = y()+10;
-    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);
-#if IMG
-    i_rgb->draw(xx+1,yy+1);
-#else
-    if (!FLIPH)
-      fl_draw_image(img_rgb, xx+1, yy+1, 128, 128, 3, LX*((128+DX)*3));
-    else
-      fl_draw_image(img_rgb, xx+1, yy+1, 128, 128,-3, LX*((128+DX)*3));
-#endif
-    fl_draw("RGB", xx+134, yy+64);
-
-    // bottom left: RGBA
-
-    xx = x()+10; yy = y()+10+134;
-    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);	// black frame
-    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 128, 128);	// white background
-#if CB							// checker board
-    fl_color(FL_BLACK); fl_rectf(xx+65, yy+1, 64, 64);
-    fl_color(FL_BLACK); fl_rectf(xx+1, yy+65, 64, 64);
-#endif
-#if IMG
-    i_rgba->draw(xx+1,yy+1);
-#else
-    if (!FLIPH)
-      fl_draw_image(img_rgba, xx+1, yy+1, 128, 128, 4, LX*((128+DX)*4));
-    else
-      fl_draw_image(img_rgba, xx+1, yy+1, 128, 128,-4, LX*((128+DX)*4));
-#endif
-    fl_color(FL_BLACK); fl_draw("RGBA", xx+134, yy+64);
-
-    // top right: Gray
-
-    xx = x()+10+200; yy = y()+10;
-    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);
-#if IMG
-    i_g->draw(xx+1,yy+1);
-#else
-    if (!FLIPH)
-      fl_draw_image(img_gray, xx+1, yy+1, 128, 128, 1, LX*((128+DX)*1));
-    else
-      fl_draw_image(img_gray, xx+1, yy+1, 128, 128,-1, LX*((128+DX)*1));
-#endif
-    fl_draw("Gray", xx+134, yy+64);
-
-    // bottom right: Gray+Alpha
-
-    xx = x()+10+200; yy = y()+10+134;
-    fl_color(FL_BLACK); fl_rect(xx, yy, 130, 130);	// black frame
-    fl_color(FL_WHITE); fl_rectf(xx+1, yy+1, 128, 128);	// white background
-#if CB							// checker board
-    fl_color(FL_BLACK); fl_rectf(xx+65, yy+1, 64, 64);
-    fl_color(FL_BLACK); fl_rectf(xx+1, yy+65, 64, 64);
-#endif
-#if IMG
-    i_ga->draw(xx+1,yy+1);
-#else
-    if (!FLIPH)
-      fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128, 2, LX*((128+DX)*2));
-    else
-      fl_draw_image(img_gray_a, xx+1, yy+1, 128, 128,-2, LX*((128+DX)*2));
-#endif
-    fl_color(FL_BLACK); fl_draw("Gray+Alpha", xx+134, yy+64);
-  }
-};
-
-uchar *ImageTest::img_gray = 0;
-uchar *ImageTest::img_gray_a = 0;
-uchar *ImageTest::img_rgb = 0;
-uchar *ImageTest::img_rgba = 0;
-Fl_RGB_Image *ImageTest::i_g = 0;
-Fl_RGB_Image *ImageTest::i_ga = 0;
-Fl_RGB_Image *ImageTest::i_rgb = 0;
-Fl_RGB_Image *ImageTest::i_rgba = 0;
-
-UnitTest images("drawing images", ImageTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_lines.cxx
+++ /dev/null
@@ -1,66 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-//------- test the line drawing capabilities of this implementation ----------
-//
-class LineTest : public Fl_Box {
-public: 
-  static Fl_Widget *create() {
-    return new LineTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  LineTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
-    label("testing the integer based fl_line calls\n"
-	  "No red pixels should be visible.\n"
-	  "If you see bright red pixels, the line drawing alignment is off,\n"
-	  "or the last pixel in a line does not get drawn.\n"
-	  "If you see dark red pixels, anti-aliasing must be switched off.");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void draw() {
-    Fl_Box::draw();
-    int a = x()+10, b = y()+10; fl_color(FL_BLACK); fl_rect(a, b, 100, 100);
-    // testing fl_xyline(x, y, x1)
-    fl_color(FL_RED); fl_point(a+10, b+10); fl_point(a+20, b+10);
-    fl_color(FL_BLACK); fl_xyline(a+10, b+10, a+20);
-    // testing fl_xyline(x, y, x1, y2);
-    fl_color(FL_RED); fl_point(a+10, b+20); fl_point(a+20, b+20);
-    fl_point(a+20, b+30);
-    fl_color(FL_BLACK); fl_xyline(a+10, b+20, a+20, b+30);
-    // testing fl_xyline(x, y, x1, y2, x3);
-    fl_color(FL_RED); fl_point(a+10, b+40); fl_point(a+20, b+40);
-    fl_point(a+20, b+50); fl_point(a+30, b+50);
-    fl_color(FL_BLACK); fl_xyline(a+10, b+40, a+20, b+50, a+30);
-    //+++ add testing for the fl_yxline commands!
-    // testing fl_loop(x,y, x,y, x,y, x, y)
-    fl_color(FL_RED); fl_point(a+60, b+60); fl_point(a+90, b+60);
-    fl_point(a+60, b+90); fl_point(a+90, b+90);
-    fl_color(FL_BLACK);
-    fl_loop(a+60, b+60, a+90, b+60, a+90, b+90, a+60, b+90);
-  }
-};
-
-UnitTest lines("drawing lines", LineTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_points.cxx
+++ /dev/null
@@ -1,60 +1,0 @@
-//
-// "$Id$:
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-//------- test the point drawing capabilities of this implementation ----------
-//
-class PointTest : public Fl_Box {
-public:
-  static Fl_Widget *create() {
-    return new PointTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  PointTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
-    label("testing the fl_point call\n"
-	  "You should see four pixels each in black, red, green and blue. "
-	  "Make sure that pixels are not anti-aliased (blurred across multiple pixels)!");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void draw() {
-    Fl_Box::draw();
-    int a = x()+10, b = y()+10; 
-    fl_color(FL_WHITE); fl_rectf(a, b, 90, 90);
-    fl_color(FL_BLACK); fl_rect(a, b, 90, 90);
-    fl_point(a+10, b+10); fl_point(a+20, b+20);
-    fl_point(a+10, b+20); fl_point(a+20, b+10);
-    fl_color(FL_RED); a = x()+70;
-    fl_point(a+10, b+10); fl_point(a+20, b+20);
-    fl_point(a+10, b+20); fl_point(a+20, b+10);
-    fl_color(FL_GREEN); a = x()+10; b = y()+70;
-    fl_point(a+10, b+10); fl_point(a+20, b+20);
-    fl_point(a+10, b+20); fl_point(a+20, b+10);
-    fl_color(FL_BLUE); a = x()+70;
-    fl_point(a+10, b+10); fl_point(a+20, b+20);
-    fl_point(a+10, b+20); fl_point(a+20, b+10);
-  }
-};
-
-UnitTest points("drawing points", PointTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_rects.cxx
+++ /dev/null
@@ -1,57 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>		// fl_text_extents()
-
-//
-//------- test the rectangle drawing capabilities of this implementation ----------
-//
-class RectTest : public Fl_Box {
-public: 
-  static Fl_Widget *create() {
-    return new RectTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  RectTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) {
-    label("testing the fl_rect call\n"
-	  "No red pixels should be visible. "
-	  "If you see bright red lines, or if parts of the green frames are hidden, "
-	  "the rect drawing alignment is off.");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void draw() {
-    Fl_Box::draw();
-    int a = x()+10, b = y()+10; fl_color(FL_BLACK); fl_rect(a, b, 100, 100);
-    // testing fl_rect() with positive size
-    fl_color(FL_RED);   fl_loop(a+10, b+10, a+40, b+10, a+40, b+40, a+10, b+40);
-    fl_color(FL_GREEN); fl_loop(a+ 9, b+ 9, a+41, b+ 9, a+41, b+41, a+ 9, b+41);
-    fl_color(FL_GREEN); fl_loop(a+11, b+11, a+39, b+11, a+39, b+39, a+11, b+39);
-    fl_color(FL_BLACK); fl_rect(a+10, b+10, 31, 31);
-    // testing fl_rect() with positive size
-    fl_color(FL_RED);   fl_loop(a+60, b+60, a+90, b+60, a+90, b+90, a+60, b+90);
-    fl_color(FL_GREEN); fl_loop(a+59, b+59, a+91, b+59, a+91, b+91, a+59, b+91);
-    fl_color(FL_BLACK); fl_rectf(a+60, b+60, 31, 31);
-  }
-};
-
-UnitTest rects("rectangles", RectTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_schemes.cxx
+++ /dev/null
@@ -1,307 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 by Bill Spitzak and others.
-//
-// Nods to Edmanuel Torres for the widget layout (STR#2672)
-//
-// 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:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Choice.H>
-
-// needed by Edmanuel's test layout
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Tabs.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Clock.H>
-#include <FL/Fl_Progress.H>
-#include <FL/Fl_Slider.H>
-#include <FL/Fl_Scrollbar.H>
-#include <FL/Fl_Value_Slider.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Adjuster.H>
-#include <FL/Fl_Counter.H>
-#include <FL/Fl_Roller.H>
-#include <FL/Fl_Value_Input.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Output.H>
-#include <FL/Fl_Text_Editor.H>
-#include <FL/Fl_Text_Display.H>
-#include <FL/Fl_File_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Light_Button.H>
-#include <FL/Fl_Check_Button.H>
-
-class SchemesTest : public Fl_Group {
-  Fl_Choice *schemechoice;
-  static void SchemeChoice_CB(Fl_Widget*,void *data) {
-    SchemesTest *st = (SchemesTest*)data;
-    const char *name = st->schemechoice->text();
-    if ( name ) {
-      Fl::scheme(name);		// change scheme
-      st->window()->redraw();	// redraw window
-    }
-  }
-public:
-  static Fl_Widget *create() {
-    return new SchemesTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  SchemesTest(int X,int Y,int W,int H) : Fl_Group(X,Y,W,H) {
-    schemechoice = new Fl_Choice(X+125,Y,140,25,"FLTK Scheme");
-    schemechoice->add("none");
-    schemechoice->add("plastic");
-    schemechoice->add("gtk+");
-    schemechoice->add("gleam");
-    schemechoice->value(0);
-    schemechoice->labelfont(FL_HELVETICA_BOLD);
-    const char *name = Fl::scheme();
-    if ( name ) {
-           if ( strcmp(name, "plastic") == 0) { schemechoice->value(1); }
-      else if ( strcmp(name, "gtk+")    == 0) { schemechoice->value(2); }
-      else if ( strcmp(name, "gleam")   == 0) { schemechoice->value(3); }
-    }
-    schemechoice->callback(SchemeChoice_CB, (void*)this);
-
-    Fl_Window *subwin = new Fl_Window(X,Y+30,W,H-30);
-    subwin->begin();
-    {
-      // Pasted from Edmanuel's gleam test app
-      { Fl_Button* o = new Fl_Button(10, 9, 90, 25, "button");
-	o->box(FL_UP_BOX);
-	o->color((Fl_Color)101);
-	o->tooltip("selection_color() = default");
-	o->labelfont(5);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(10, 36, 90, 25, "button");
-	o->box(FL_UP_BOX);
-	o->color((Fl_Color)179);
-	o->selection_color(o->color());
-	o->tooltip("selection_color() = color()");
-	o->labelfont(4);
-	o->labelcolor(FL_BACKGROUND2_COLOR);
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(10, 63, 90, 25, "button");
-	o->box(FL_UP_BOX);
-	o->color((Fl_Color)91);
-	o->selection_color(fl_lighter(o->color()));
-	o->tooltip("selection_color() = fl_lighter(color())");
-      } // Fl_Button* o
-      { Fl_Button* o = new Fl_Button(10, 90, 90, 25, "button");
-	o->box(FL_UP_BOX);
-	o->color(FL_INACTIVE_COLOR);
-	o->selection_color(fl_darker(o->color()));
-	o->tooltip("selection_color() = fl_darker(color())");
-	o->labelcolor(FL_BACKGROUND2_COLOR);
-      } // Fl_Button* o
-      { Fl_Tabs* o = new Fl_Tabs(10, 120, 320, 215);
-	o->color(FL_DARK1);
-	o->selection_color(FL_DARK1);
-	{ Fl_Group* o = new Fl_Group(14, 141, 310, 190, "tab1");
-	  //o->box(FL_THIN_UP_BOX);
-	  o->color(FL_DARK1);
-	  o->selection_color((Fl_Color)23);
-	  o->hide();
-	  { Fl_Clock* o = new Fl_Clock(24, 166, 130, 130);
-	    o->box(FL_THIN_UP_BOX);
-	    o->color((Fl_Color)12);
-	    o->selection_color(FL_BACKGROUND2_COLOR);
-	    o->labelcolor(FL_BACKGROUND2_COLOR);
-	    o->tooltip("Fl_Clock with thin up box");
-	  } // Fl_Clock* o
-	  { new Fl_Progress(22, 306, 290, 20);
-	  } // Fl_Progress* o
-	  { Fl_Clock* o = new Fl_Clock(179, 166, 130, 130);
-	    o->box(FL_THIN_DOWN_BOX);
-	    o->color((Fl_Color)26);
-	    o->tooltip("Fl_Clock with thin down box");
-	  } // Fl_Clock* o
-	  o->end();
-	} // Fl_Group* o
-	{ Fl_Group* o = new Fl_Group(15, 140, 310, 190, "tab2");
-	  //o->box(FL_THIN_UP_BOX);
-	  o->color(FL_DARK1);
-	  { Fl_Slider* o = new Fl_Slider(20, 161, 25, 155);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Slider with down box");
-	  } // Fl_Slider* o
-	  { Fl_Scrollbar* o = new Fl_Scrollbar(50, 161, 25, 155);
-            o->value(0, 50, 1, 100);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Scrollbar with down box");
-	  } // Fl_Scrollbar* o
-	  { Fl_Value_Slider* o = new Fl_Value_Slider(115, 161, 25, 155);
-	    o->box(FL_DOWN_BOX);
-	  } // Fl_Value_Slider* o
-	  { Fl_Value_Output* o = new Fl_Value_Output(240, 265, 75, 25);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Value_Output with down box");
-	  } // Fl_Value_Output* o
-	  { Fl_Adjuster* o = new Fl_Adjuster(185, 210, 100, 25);
-	    o->tooltip("Fl_Adjuster");
-	  } // Fl_Adjuster* o
-	  { Fl_Counter* o = new Fl_Counter(185, 180, 100, 25);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Counter with down box");
-	  } // Fl_Counter* o
-	  { Fl_Roller* o = new Fl_Roller(85, 161, 25, 155);
-	    o->box(FL_UP_BOX);
-	    o->tooltip("Fl_Roller with up box");
-	  } // Fl_Roller* o
-	  { Fl_Value_Input* o = new Fl_Value_Input(155, 265, 75, 25);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Value_Input with down box");
-	  } // Fl_Value_Input* o
-	  o->end();
-	} // Fl_Group* o
-	{ Fl_Group* o = new Fl_Group(15, 140, 310, 190, "tab3");
-	  //o->box(FL_THIN_UP_BOX);
-	  o->color(FL_DARK1);
-	  o->hide();
-	  { Fl_Input* o = new Fl_Input(40, 230, 120, 25);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Input with down box");
-	  } // Fl_Input* o
-	  { Fl_Output* o = new Fl_Output(40, 260, 120, 25);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_Output with down box");
-	  } // Fl_Output* o
-	  { Fl_Text_Editor* o = new Fl_Text_Editor(180, 160, 125, 55);
-	    o->box(FL_DOWN_FRAME);
-	    o->color((Fl_Color)80);
-	    o->tooltip("Fl_Text_Editor with down frame");
-	    o->textsize(8);
-	    o->buffer(new Fl_Text_Buffer());
-	    o->buffer()->text("Text editor");
-	  } // Fl_Text_Editor* o
-	  { Fl_Text_Display* o = new Fl_Text_Display(180, 230, 125, 55);
-	    o->box(FL_DOWN_FRAME);
-	    o->color((Fl_Color)12);
-	    o->tooltip("Fl_Text_Display with down frame");
-	    o->textsize(8);
-	    o->buffer(new Fl_Text_Buffer());
-	    o->buffer()->text("Text display");
-	  } // Fl_Text_Display* o
-	  { Fl_File_Input* o = new Fl_File_Input(40, 290, 265, 30);
-	    o->box(FL_DOWN_BOX);
-	    o->tooltip("Fl_File_Input with down box");
-	  } // Fl_File_Input* o
-	  o->end();
-	} // Fl_Group* o
-	o->end();
-      } // Fl_Tabs* o
-      { Fl_Box* o = new Fl_Box(341, 10, 80, 50, "thin box\ndown1");
-	o->box(FL_THIN_DOWN_BOX);
-	o->color((Fl_Color)20);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(430, 10, 80, 50, "thin box\nup1");
-	o->box(FL_THIN_UP_BOX);
-	o->color(FL_SELECTION_COLOR);
-	o->labelcolor((Fl_Color)6);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(341, 71, 80, 44, "thin box\ndown2");
-	o->box(FL_THIN_DOWN_BOX);
-	o->color((Fl_Color)190);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(430, 71, 80, 44, "thin box\nup2");
-	o->box(FL_THIN_UP_BOX);
-	o->color((Fl_Color)96);
-	o->labelcolor(FL_BACKGROUND2_COLOR);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(341, 127, 80, 50, "box down3");
-	o->box(FL_DOWN_BOX);
-	o->color((Fl_Color)3);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(430, 127, 80, 50, "box up3");
-	o->box(FL_UP_BOX);
-	o->color((Fl_Color)104);
-	o->labelcolor((Fl_Color)3);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(341, 189, 80, 50, "box down4");
-	o->box(FL_DOWN_BOX);
-	o->color((Fl_Color)42);
-	o->labelcolor(FL_DARK_RED);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(430, 189, 80, 50, "box up4");
-	o->box(FL_UP_BOX);
-	o->color((Fl_Color)30);
-	o->labelcolor((Fl_Color)26);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(341, 251, 80, 82, "box down5");
-	o->box(FL_DOWN_BOX);
-	o->color((Fl_Color)19);
-	o->labelcolor((Fl_Color)4);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Box* o = new Fl_Box(430, 251, 80, 82, "box up5");
-	o->box(FL_UP_BOX);
-	o->color(FL_FOREGROUND_COLOR);
-	o->labelcolor(FL_BACKGROUND2_COLOR);
-	o->labelsize(10);
-      } // Fl_Box* o
-      { Fl_Light_Button* o = new Fl_Light_Button(110, 10, 105, 25, "Light");
-	o->box(FL_DOWN_BOX);
-	o->color(FL_BACKGROUND2_COLOR);
-	o->selection_color((Fl_Color)30);
-	o->tooltip("Fl_Light_Button with down box");
-      } // Fl_Light_Button* o
-      { Fl_Check_Button* o = new Fl_Check_Button(110, 37, 105, 25, "Check");
-	o->box(FL_DOWN_FRAME);
-	o->down_box(FL_DOWN_BOX);
-	o->color(FL_DARK1);
-	o->tooltip("Fl_Check_Button with down frame");
-      } // Fl_Check_Button* o
-      { Fl_Input* o = new Fl_Input(220, 10, 100, 25);
-	o->box(FL_DOWN_BOX);
-	o->color((Fl_Color)23);
-	o->tooltip("Fl_Input with down box");
-      } // Fl_Input* o
-      { Fl_Adjuster* o = new Fl_Adjuster(110, 65, 80, 43);
-	o->box(FL_UP_BOX);
-	o->color(FL_INACTIVE_COLOR);
-	o->selection_color(FL_BACKGROUND2_COLOR);
-	o->labelcolor((Fl_Color)55);
-	o->tooltip("Fl_Adjuster with up box");
-      } // Fl_Adjuster* o
-      { Fl_Text_Editor* o = new Fl_Text_Editor(220, 53, 100, 29, "down frame");
-	o->box(FL_DOWN_FRAME);
-	o->color((Fl_Color)19);
-	o->selection_color(FL_DARK1);
-	o->tooltip("Fl_Adjuster with down frame");
-      } // Fl_Text_Editor* o
-      { Fl_Text_Editor* o = new Fl_Text_Editor(220, 99, 100, 38, "up frame");
-	o->box(FL_UP_FRAME);
-	o->color((Fl_Color)19);
-	o->selection_color(FL_DARK1);
-	o->tooltip("Fl_Text_Editor with up frame");
-      } // Fl_Text_Editor* o
-    }
-    subwin->end();
-    subwin->resizable(subwin);
-    subwin->show();
-  }
-};
-
-UnitTest schemestest("schemes test", SchemesTest::create);
-
-//
-// End of "$Id$
-//
--- a/DoConfig/fltk/test/unittest_scrollbarsize.cxx
+++ /dev/null
@@ -1,223 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Browser.H>
-#include <FL/Fl_Tree.H>
-#include <FL/Fl_Table.H>
-#include <FL/Fl_Value_Slider.H>
-
-//
-// Test new 1.3.x global vs. local scrollbar sizing
-//
-class MyTable : public Fl_Table {
-  // Handle drawing table's cells
-  //     Fl_Table calls this function to draw each visible cell in the table.
-  //     It's up to us to use FLTK's drawing functions to draw the cells the way we want.
-  //
-  void draw_cell(TableContext context, int ROW=0, int COL=0, int X=0, int Y=0, int W=0, int H=0) {
-    static char s[10];
-    switch ( context ) {
-      case CONTEXT_STARTPAGE:                   // before page is drawn..
-	fl_font(FL_HELVETICA, 8);               // set font for drawing operations
-	return; 
-      case CONTEXT_CELL:                        // Draw data in cells
-        sprintf(s, "%c", 'A'+ROW+COL);
-	fl_push_clip(X,Y,W,H);
-	  // Draw cell bg
-	  fl_color(FL_WHITE); fl_rectf(X,Y,W,H);
-	  // Draw cell data
-	  fl_color(FL_GRAY0); fl_draw(s, X,Y,W,H, FL_ALIGN_CENTER);
-	  // Draw box border
-	  fl_color(color()); fl_rect(X,Y,W,H);
-	fl_pop_clip();
-	return;
-      default:
-	return;
-    }
-  }
-  public:
-  // Constructor
-  //     Make our data array, and initialize the table options.
-  //
-  MyTable(int X, int Y, int W, int H, const char *L=0) : Fl_Table(X,Y,W,H,L) {
-    // Rows
-    rows(13);                   // how many rows
-    row_height_all(10);         // default height of rows
-    // Cols
-    cols(13);                   // how many columns
-    col_width_all(10);          // default width of columns
-    end();			// end the Fl_Table group
-  }
-  ~MyTable() { }
-};
-
-class ScrollBarSizeTest : public Fl_Group {
-    Fl_Browser *brow_a, *brow_b, *brow_c;
-    Fl_Tree    *tree_a, *tree_b, *tree_c;
-    MyTable    *table_a,*table_b,*table_c;
-
-    Fl_Browser *makebrowser(int X,int Y,int W,int H,const char*L=0) {
-	Fl_Browser *b = new Fl_Browser(X,Y,W,H,L);
-	b->type(FL_MULTI_BROWSER);
-	b->align(FL_ALIGN_TOP);
-	b->add("Papa");     b->add("Delta"); b->add("Hotel");
-        b->add("Long entry will show h-bar");
-	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
-	b->add("Golf");     b->add("Lima");  b->add("Victor");
-	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
-	b->add("Oscar");    b->add("India"); b->add("Juliet");
-	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
-	b->add("November"); b->add("Tango"); b->add("Quebec");
-	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
-	b->add("Whisky");   b->add("Zulu");
-	b->add("Papa");     b->add("Delta"); b->add("Hotel");
-	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
-	b->add("Golf");     b->add("Lima");  b->add("Victor");
-	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
-	b->add("Oscar");    b->add("India"); b->add("Juliet");
-	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
-	b->add("November"); b->add("Tango"); b->add("Quebec");
-	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
-	b->add("Whisky");   b->add("Zulu");
-	return(b);
-    }
-    Fl_Tree *maketree(int X,int Y,int W,int H,const char*L=0) {
-	Fl_Tree *b = new Fl_Tree(X,Y,W,H,L);
-	b->type(FL_TREE_SELECT_MULTI);
-	b->align(FL_ALIGN_TOP);
-	b->add("Papa");     b->add("Delta"); b->add("Hotel");
-        b->add("Long entry will show h-bar");
-	b->add("Charlie");  b->add("Echo");  b->add("Foxtrot");
-	b->add("Golf");     b->add("Lima");  b->add("Victor");
-	b->add("Alpha");    b->add("Xray");  b->add("Yankee");
-	b->add("Oscar");    b->add("India"); b->add("Juliet");
-	b->add("Kilo");     b->add("Mike");  b->add("Sierra");
-	b->add("November"); b->add("Tango"); b->add("Quebec");
-	b->add("Bravo");    b->add("Romeo"); b->add("Uniform");
-	b->add("Whisky");   b->add("Zulu");
-	return(b);
-    }
-    MyTable *maketable(int X,int Y,int W,int H,const char*L=0) {
-	MyTable *mta = new MyTable(X,Y,W,H,L);
-	mta->align(FL_ALIGN_TOP);
-	mta->end();
-	return(mta);
-    }
-    void slide_cb2(Fl_Value_Slider *in) {
-	const char *label = in->label();
-	int val = int(in->value());
-	//fprintf(stderr, "VAL='%d'\n",val);
-	if ( strcmp(label,"A: Scroll Size") == 0 ) {
-	    brow_a->scrollbar_size(val);
-	    tree_a->scrollbar_size(val);
-#if FLTK_ABI_VERSION >= 10301
-	    // NEW
-	    table_a->scrollbar_size(val);
-#endif
-	} else {
-	    Fl::scrollbar_size(val);
-	}
-	in->window()->redraw();
-    }
-    static void slide_cb(Fl_Widget *w, void *data) {
-        ScrollBarSizeTest *o = (ScrollBarSizeTest*)data;
-	o->slide_cb2((Fl_Value_Slider*)w);
-    }
-public: 
-    static Fl_Widget *create() {
-      return(new ScrollBarSizeTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H));
-    }
-
-    // CTOR
-    ScrollBarSizeTest(int X, int Y, int W, int H) : Fl_Group(X,Y,W,H) {
-      begin();
-        //      _____________    _______________
-        //     |_____________|  |_______________|
-        //                                                ---   -----  <-- tgrpy
-        //       brow_a      brow_b      brow_c            | 14   | 
-        //     ----------  ----------  ----------         ---     |    <-- browy
-        //     |        |  |        |  |        |          |browh |
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---   tgrph 
-        //                                                 |      |
-        //       tree_a      tree_b      tree_c            | 20   | 
-        //     ----------  ----------  ----------         ---     |    <-- treey
-        //     |        |  |        |  |        |          |treeh |
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---     |
-        //                                                 |      |
-        //      table_a     table_b     table_c            | 20   | 
-        //     ----------  ----------  ----------         ---     |    <-- tabley
-        //     |        |  |        |  |        |          |tableh|
-        //     |        |  |        |  |        |          |      |
-        //     ----------  ----------  ----------         ---  ------
-        //  etc..
-        int tgrpy = Y+30;
-        int tgrph = H-130;
-        int browy = tgrpy+14;
-        int browh = tgrph/3 - 20;
-        int treey = browy + browh + 20;
-        int treeh = browh;
-        int tabley = treey + treeh + 20;
-        int tableh = browh;
-        brow_a = makebrowser(X+ 10,browy,100,browh,"Browser A");
-        brow_b = makebrowser(X+120,browy,100,browh,"Browser B");
-        brow_c = makebrowser(X+230,browy,100,browh,"Browser C");
-        tree_a = maketree(X+ 10,treey,100,treeh,"Tree A");
-        tree_b = maketree(X+120,treey,100,treeh,"Tree B");
-        tree_c = maketree(X+230,treey,100,treeh,"Tree C");
-        table_a = maketable(X+ 10,tabley,100,tableh,"Table A");
-        table_b = maketable(X+120,tabley,100,tableh,"Table B");
-        table_c = maketable(X+230,tabley,100,tableh,"Table C");
-        Fl_Value_Slider *slide_glob = new Fl_Value_Slider(X+100,Y,100,18,"Global Scroll Size");
-        slide_glob->value(16);
-        slide_glob->type(FL_HORIZONTAL);
-        slide_glob->align(FL_ALIGN_LEFT);
-        slide_glob->range(0.0, 30.0);
-        slide_glob->step(1.0);
-        slide_glob->callback(slide_cb, (void*)this);
-        slide_glob->labelsize(12);
-        Fl_Value_Slider *slide_browa = new Fl_Value_Slider(X+350,Y,100,18,"A: Scroll Size");
-        slide_browa->value(0);
-        slide_browa->type(FL_HORIZONTAL);
-        slide_browa->align(FL_ALIGN_LEFT);
-        slide_browa->range(0.0, 30.0);
-        slide_browa->step(1.0);
-        slide_browa->callback(slide_cb, (void*)this);
-        slide_browa->labelsize(12);
-      end();
-      label("Verify global scroll sizing and per-widget scroll sizing.\n"
-	    "Scrollbar's size should change interactively as size sliders are changed.\n"
-            "Changing 'Global Scroll Size' should affect all three browser's scrollbars UNLESS\n"
-	    "the 'A: Scroll Size' slider is changed, in which case its value will take precedence\n"
-#if FLTK_ABI_VERSION >= 10301
-	    "for the 'A' group of widgets.");
-#else
-	    "for the 'A' group of widgets. (NOTE: 'table_a' does not currently support this)");
-#endif
-      labelsize(10);
-      align(FL_ALIGN_INSIDE|FL_ALIGN_BOTTOM|FL_ALIGN_LEFT|FL_ALIGN_WRAP);
-    }
-};
-
-UnitTest scrollbarsize("scrollbar size", ScrollBarSizeTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_symbol.cxx
+++ /dev/null
@@ -1,95 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-// Test symbol rendering
-//
-class SymbolTest : public Fl_Widget
-{
-  void DrawTextAndBoxes(const char *txt, int X, int Y) {
-    int wo = 0, ho = 0;
-    fl_measure(txt, wo, ho, 1);
-    // Draw fl_measure() rect
-    fl_color(FL_RED);
-    fl_rect(X, Y, wo, ho);
-    // //////////////////////////////////////////////////////////////////////
-    // NOTE: fl_text_extents() currently does not support multiline strings..
-    //       until it does, let's leave this out, as we do multiline tests..
-    // //////////////////////////////////////////////////////////////////////
-    // // draw fl_text_extents() glyph bounding box
-    // int dx,dy;
-    // fl_text_extents(txt, dx, dy, wo, ho);
-    // fl_color(FL_GREEN);
-    // fl_rect(X+dx, Y+dy, wo, ho);
-    //
-    // Draw text with symbols enabled
-    fl_color(FL_BLACK);
-    fl_draw(txt, X, Y, 10, 10, FL_ALIGN_INSIDE|FL_ALIGN_TOP|FL_ALIGN_LEFT, 0, 1);
-  }
-public: 
-  static Fl_Widget *create() {
-    return new SymbolTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  SymbolTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
-  void draw(void) {
-    int x0 = x(); // origin is current window position for Fl_Box
-    int y0 = y();
-    int w0 = w();
-    int h0 = h();
-    fl_push_clip(x0, y0, w0, h0); // reset local clipping
-    {
-      // set the background colour - slightly off-white to enhance the green bounding box
-      fl_color(fl_gray_ramp(FL_NUM_GRAY - 3));
-      fl_rectf(x0, y0, w0, h0);
-      int fsize = 25;
-      fl_font(FL_HELVETICA, fsize);
-      int xx = x0+10;
-      int yy = y0+10;
-      DrawTextAndBoxes("Text"            ,xx,yy); yy += fsize+10;	// check no symbols
-      DrawTextAndBoxes("@->"             ,xx,yy); yy += fsize+10;	// check symbol alone
-      DrawTextAndBoxes("@-> "            ,xx,yy); yy += fsize+10;	// check symbol with trailing space
-      DrawTextAndBoxes("@-> Rt Arrow"    ,xx,yy); yy += fsize+10;	// check symbol at left edge
-      DrawTextAndBoxes("Lt Arrow @<-"    ,xx,yy); yy += fsize+10;	// check symbol at right edge
-      DrawTextAndBoxes("@-> Rt/Lt @<-"   ,xx,yy); yy += fsize+10;	// check symbol at lt+rt edges
-      DrawTextAndBoxes("@@ At/Lt @<-"    ,xx,yy); yy += fsize+10;	// check @@ at left, symbol at right
-      DrawTextAndBoxes("@-> Lt/At @@"    ,xx,yy); yy += fsize+10;	// check symbol at left, @@ at right
-      DrawTextAndBoxes("@@ At/At @@"     ,xx,yy); yy += fsize+10;	// check @@ at left+right
-      xx = x0+200;
-      yy = y0+10;
-      DrawTextAndBoxes("Line1\nLine2"               ,xx,yy); yy += (fsize+10)*2; // check 2 lines, no symbol
-      DrawTextAndBoxes("@-> Line1\nLine2 @<-"       ,xx,yy); yy += (fsize+10)*2; // check 2 lines, lt+rt symbols
-      DrawTextAndBoxes("@-> Line1\nLine2\nLine3 @<-",xx,yy); yy += (fsize+10)*3; // check 3 lines, lt+rt symbols
-      DrawTextAndBoxes("@@@@"                       ,xx,yy); yy += (fsize+10);   // check abutting @@'s
-      DrawTextAndBoxes("@@ @@"                      ,xx,yy); yy += (fsize+10);   // check @@'s with space sep
-
-      fl_font(FL_HELVETICA, 14);
-      fl_color(FL_RED);
-      fl_draw("fl_measure bounding box in RED", x0+10,y0+h0-20);
-    }
-    fl_pop_clip(); // remove the local clip
-  }
-};
-
-UnitTest symbolExtents("symbol text", SymbolTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_text.cxx
+++ /dev/null
@@ -1,88 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-// --- fl_text_extents() tests -----------------------------------------------
-//
-class TextExtentsTest : public Fl_Widget
-{
-  void DrawTextAndBoxes(const char *txt, int X, int Y) {
-    int wo = 0, ho = 0;
-    int dx, dy;
-    // First, we draw the bounding boxes (fl_measure and fl_text_extents)
-    // draw fl_measure() typographical bounding box
-    fl_measure(txt, wo, ho, 0);
-    int desc = fl_descent();
-    fl_color(FL_RED);
-    fl_rect(X, Y-ho+desc, wo, ho);
-    // draw fl_text_extents() glyph bounding box
-    fl_text_extents(txt, dx, dy, wo, ho);
-    fl_color(FL_GREEN);
-    fl_rect(X+dx, Y+dy, wo, ho);
-    // Then we draw the text to show how it fits insode each of the two boxes
-    fl_color(FL_BLACK);
-    fl_draw(txt, X, Y);
-  }
-public: 
-  static Fl_Widget *create() {
-    return new TextExtentsTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  TextExtentsTest(int x, int y, int w, int h) : Fl_Widget(x, y, w, h) {}
-  void draw(void) {
-    int x0 = x(); // origin is current window position for Fl_Box
-    int y0 = y();
-    int w0 = w();
-    int h0 = h();
-    fl_push_clip(x0, y0, w0, h0); // reset local clipping
-    {
-      // set the background colour - slightly off-white to enhance the green bounding box
-      fl_color(fl_gray_ramp(FL_NUM_GRAY - 3));
-      fl_rectf(x0, y0, w0, h0);
-
-      fl_font(FL_HELVETICA, 30);
-      int xx = x0+55;
-      int yy = y0+40;
-      DrawTextAndBoxes("!abcdeABCDE\"#A", xx, yy); yy += 50;	// mixed string
-      DrawTextAndBoxes("oacs",     xx, yy); xx += 100;		// small glyphs
-      DrawTextAndBoxes("qjgIPT",   xx, yy); yy += 50; xx -= 100;	// glyphs with descenders
-      DrawTextAndBoxes("````````", xx, yy); yy += 50;		// high small glyphs
-      DrawTextAndBoxes("--------", xx, yy); yy += 50;		// mid small glyphs
-      DrawTextAndBoxes("________", xx, yy); yy += 50;		// low small glyphs
-
-      fl_font(FL_HELVETICA, 14);
-      fl_color(FL_RED);  fl_draw("fl_measure bounding box in RED",       xx, yy); yy += 20;
-      fl_color(FL_GREEN); fl_draw("fl_text_extents bounding box in GREEN", xx, yy);
-      fl_color(FL_BLACK);
-      xx = x0 + 10;  yy += 30;
-      fl_draw("NOTE: On systems with text anti-aliasing (e.g. OSX Quartz)", xx, yy);
-      w0 = h0 = 0; fl_measure("NOTE: ", w0, h0, 0);
-      xx += w0; yy += h0;
-      fl_draw("text may leak slightly outside the fl_text_extents()", xx, yy);
-    }
-    fl_pop_clip(); // remove the local clip
-  }
-};
-
-UnitTest textExtents("rendering text", TextExtentsTest::create);
-
-//
-// End of "$Id$"
-//
--- a/DoConfig/fltk/test/unittest_viewport.cxx
+++ /dev/null
@@ -1,55 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>
-
-//
-//------- test viewport clipping ----------
-//
-class ViewportTest : public Fl_Box {
-public: 
-  static Fl_Widget *create() {
-    return new ViewportTest(TESTAREA_X, TESTAREA_Y, TESTAREA_W, TESTAREA_H);
-  }
-  ViewportTest(int x, int y, int w, int h) : Fl_Box(x, y, w, h) { 
-    label("Testing Viewport Alignment\n\n"
-          "Only green lines should be visible.\n"
-          "If red lines are visible in the corners of this window,\n"
-          "your viewport alignment and clipping is off.\n"
-          "If there is a space between the green lines and the window border,\n"
-          "the viewport is off, but some clipping may be working.\n"
-          "Also, your window size may be off to begin with.");
-    align(FL_ALIGN_INSIDE|FL_ALIGN_CENTER|FL_ALIGN_WRAP);
-    box(FL_BORDER_BOX);
-  }
-  void show() {
-    Fl_Box::show();
-    mainwin->testAlignment(1);
-  }
-  void hide() {
-    Fl_Box::hide();
-    mainwin->testAlignment(0);
-  }
-};
-
-UnitTest viewport("viewport test", ViewportTest::create);
-
-//
-// End of "$Id$
-//
--- a/DoConfig/fltk/test/unittests.cxx
+++ /dev/null
@@ -1,203 +1,0 @@
-//
-// "$Id$"
-//
-// Unit tests for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2010 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-// Fltk unit tests
-// v0.1 - Greg combines Matthias + Ian's tests
-// v0.2 - Ian's 02/12/09 fixes applied
-// v0.3 - Fixes to circle desc, augmented extent tests, fixed indents, added show(argc,argv)
-// v1.0 - Submit for svn
-// v1.1 - Matthias seperated all tests into multiple source files for hopefully easier handling
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Help_View.H>
-#include <FL/Fl_Group.H>
-#include <FL/Fl_Box.H>
-#include <FL/fl_draw.H>		// fl_text_extents()
-
-// WINDOW/WIDGET SIZES
-#define MAINWIN_W	700				// main window w()
-#define MAINWIN_H	400				// main window h()
-#define BROWSER_X	10				// browser x()
-#define BROWSER_Y	25				// browser y()
-#define BROWSER_W	150				// browser w()
-#define BROWSER_H	MAINWIN_H-35			// browser h()
-#define TESTAREA_X	(BROWSER_W + 20)		// test area x()
-#define TESTAREA_Y	25				// test area y()
-#define TESTAREA_W	(MAINWIN_W - BROWSER_W - 30)	// test area w()
-#define TESTAREA_H	BROWSER_H			// test area h()
-
-typedef void (*UnitTestCallback)(const char*,Fl_Group*);
-
-class MainWindow *mainwin = 0;
-Fl_Hold_Browser *browser = 0;
-
-// This class helps to automagically register a new test with the unittest app.
-// Please see the examples on how this is used. 
-class UnitTest {
-public:
-  UnitTest(const char *label, Fl_Widget* (*create)()) :
-    fWidget(0L)
-  {
-    fLabel = strdup(label);
-    fCreate = create;
-    add(this);
-  }
-  ~UnitTest() {
-    delete fWidget;
-    free(fLabel);
-  }
-  const char *label() {
-    return fLabel;
-  }
-  void create() {
-    fWidget = fCreate();
-    if (fWidget) fWidget->hide();
-  }
-  void show() {
-    if (fWidget) fWidget->show();
-  }
-  void hide() {
-    if (fWidget) fWidget->hide();
-  }
-  static int numTest() { return nTest; }
-  static UnitTest *test(int i) { return fTest[i]; }
-private:
-  char *fLabel;
-  Fl_Widget *(*fCreate)();
-  Fl_Widget *fWidget;
-
-  static void add(UnitTest *t) {
-    fTest[nTest] = t;
-    nTest++;
-  }
-  static int nTest;
-  static UnitTest *fTest[];
-};
-
-int UnitTest::nTest = 0;
-UnitTest *UnitTest::fTest[200];
-
-
-// The main window needs an additional drawing feature in order to support 
-// the viewport alignment test.
-class MainWindow : public Fl_Double_Window {
-public:
-  MainWindow(int w, int h, const char *l=0L) :
-    Fl_Double_Window(w, h, l),
-    fTestAlignment(0)
-  { }
-  // this code is used by the viewport alignment test
-  void drawAlignmentIndicators() {
-    const int sze = 16;
-    // top left corner
-    fl_color(FL_GREEN); fl_yxline(0, sze, 0, sze);
-    fl_color(FL_RED);   fl_yxline(-1, sze, -1, sze);
-    fl_color(FL_WHITE); fl_rectf(3, 3, sze-2, sze-2);
-    fl_color(FL_BLACK); fl_rect(3, 3, sze-2, sze-2);
-    // bottom left corner
-    fl_color(FL_GREEN); fl_yxline(0, h()-sze-1, h()-1, sze);
-    fl_color(FL_RED);   fl_yxline(-1, h()-sze-1, h(), sze);
-    fl_color(FL_WHITE); fl_rectf(3, h()-sze-1, sze-2, sze-2);
-    fl_color(FL_BLACK); fl_rect(3, h()-sze-1, sze-2, sze-2);
-    // bottom right corner
-    fl_color(FL_GREEN); fl_yxline(w()-1, h()-sze-1, h()-1, w()-sze-1);
-    fl_color(FL_RED);   fl_yxline(w(), h()-sze-1, h(), w()-sze-1);
-    fl_color(FL_WHITE); fl_rectf(w()-sze-1, h()-sze-1, sze-2, sze-2);
-    fl_color(FL_BLACK); fl_rect(w()-sze-1, h()-sze-1, sze-2, sze-2);
-    // top right corner
-    fl_color(FL_GREEN); fl_yxline(w()-1, sze, 0, w()-sze-1);
-    fl_color(FL_RED);   fl_yxline(w(), sze, -1, w()-sze-1);
-    fl_color(FL_WHITE); fl_rectf(w()-sze-1, 3, sze-2, sze-2);
-    fl_color(FL_BLACK); fl_rect(w()-sze-1, 3, sze-2, sze-2);
-  }
-  void draw() {
-    Fl_Double_Window::draw();
-    if (fTestAlignment) {
-      drawAlignmentIndicators();
-    }
-  }
-  void testAlignment(int v) {
-    fTestAlignment = v;
-    redraw();
-  }
-  int fTestAlignment;
-};
-
-//------- include the various unit tests as inline code -------
-
-#include "unittest_about.cxx"
-#include "unittest_points.cxx"
-#include "unittest_lines.cxx"
-#include "unittest_rects.cxx"
-#include "unittest_circles.cxx"
-#include "unittest_text.cxx"
-#include "unittest_symbol.cxx"
-#include "unittest_images.cxx"
-#include "unittest_viewport.cxx"
-#include "unittest_scrollbarsize.cxx"
-#include "unittest_schemes.cxx"
-
-// callback whenever the browser value changes
-void Browser_CB(Fl_Widget*, void*) {
-  for ( int t=1; t<=browser->size(); t++ ) {
-    UnitTest *ti = (UnitTest*)browser->data(t);
-    if ( browser->selected(t) ) {
-      ti->show();
-    } else {
-      ti->hide();
-    }
-  }
-}
-
-
-// this is the main call. It creates the window and adds all previously
-// registered tests to the browser widget.
-int main(int argc, char **argv) {
-  Fl::args(argc,argv);
-  Fl::get_system_colors();
-  Fl::scheme(Fl::scheme()); // init scheme before instantiating tests
-  Fl::visual(FL_RGB);
-  mainwin = new MainWindow(MAINWIN_W, MAINWIN_H, "Fltk Unit Tests");
-  browser = new Fl_Hold_Browser(BROWSER_X, BROWSER_Y, BROWSER_W, BROWSER_H, "Unit Tests");
-  browser->align(FL_ALIGN_TOP|FL_ALIGN_LEFT);
-  browser->when(FL_WHEN_CHANGED);
-  browser->callback(Browser_CB);
-
-  int i, n = UnitTest::numTest();
-  for (i=0; i<n; i++) {
-    UnitTest *t = UnitTest::test(i);
-    mainwin->begin();
-    t->create();
-    mainwin->end();
-    browser->add(t->label(), (void*)t);
-  }
-
-  /////
-  mainwin->resizable(mainwin);
-  mainwin->show(argc,argv);
-  // Select first test in browser, and show that test.
-  browser->select(1);
-  Browser_CB(browser,0);
-  return(Fl::run());
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/utf8.cxx
+++ /dev/null
@@ -1,719 +1,0 @@
-//
-// "$Id$"
-//
-// UTF-8 test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2016 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Scroll.H>
-#include <FL/Fl_Choice.H>
-#include <FL/Fl_Input.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Tile.H>
-#include <FL/Fl_Hold_Browser.H>
-#include <FL/Fl_Value_Output.H>
-#include <FL/Fl_Button.H>
-#include <FL/Fl_Check_Button.H>
-#include <FL/Fl_Output.H>
-#include <FL/fl_draw.H>
-#include <FL/fl_utf8.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-//
-// Font chooser widget for the Fast Light Tool Kit(FLTK).
-//
-
-
-#define DEF_SIZE 16 // default value for the font size picker
-
-
-static Fl_Double_Window *fnt_chooser_win;
-static Fl_Hold_Browser *fontobj;
-static Fl_Hold_Browser *sizeobj;
-
-static Fl_Value_Output *fnt_cnt;
-static Fl_Button *refresh_btn;
-static Fl_Button *choose_btn;
-static Fl_Output *fix_prop;
-static Fl_Check_Button *own_face;
-
-static int  **sizes = NULL;
-static int  *numsizes = NULL;
-static int  pickedsize = DEF_SIZE;
-static char label[1000];
-
-static Fl_Double_Window *main_win;
-static Fl_Scroll *thescroll;
-static Fl_Font extra_font;
-
-static int font_count = 0;
-static int first_free = 0;
-
-static void cb_exit(Fl_Button*, void*) {
-  if(fnt_chooser_win) fnt_chooser_win->hide();
-  if(main_win) main_win->hide();
-} /* cb_exit */
-
-/*
- Class for displaying sample fonts.
- */
-class FontDisplay : public Fl_Widget
-{
-  void draw(void);
-  
-public:
-  int  font, size;
-  
-  int test_fixed_pitch(void);
-  
-  FontDisplay(Fl_Boxtype B, int X, int Y, int W, int H, const char *L = 0) 
-  : Fl_Widget(X, Y, W, H, L)
-  {
-    box(B);
-    font = 0;
-    size = DEF_SIZE;
-  }
-};
-
-
-/*
- Draw the sample text.
- */
-void FontDisplay::draw(void)
-{
-  draw_box();
-  fl_font((Fl_Font)font, size);
-  fl_color(FL_BLACK);
-  fl_draw(label(), x() + 3, y() + 3, w() - 6, h() - 6, align());
-}
-
-
-int FontDisplay::test_fixed_pitch(void)
-{
-  int w1, w2;
-  int h1, h2;
-  
-  w1 = w2 = 0;
-  h1 = h2 = 0;
-  
-  fl_font((Fl_Font)font, size);
-  
-  fl_measure("MHMHWWMHMHMHM###WWX__--HUW", w1, h1, 0);
-  fl_measure("iiiiiiiiiiiiiiiiiiiiiiiiii", w2, h2, 0);
-  
-  if (w1 == w2) return 1; // exact match - fixed pitch
-  
-  // Is the font "nearly" fixed pitch? If it is within 5%, say it is...
-  double f1 = (double)w1;
-  double f2 = (double)w2;
-  double delta = fabs(f1 - f2) * 5.0;
-  if (delta <= f1) return 2; // nearly fixed pitch...
-  
-  return 0; // NOT fixed pitch
-}
-
-
-static FontDisplay *textobj;
-
-
-static void size_cb(Fl_Widget *, long)
-{
-  int size_idx = sizeobj->value();
-  
-  if (!size_idx) return;
-  
-  const char *c = sizeobj->text(size_idx);
-  
-  while (*c < '0' || *c > '9') c++; // find the first numeric char
-  pickedsize = atoi(c);             // convert the number string to a value
-  
-  // Now set the font view to the selected size and redraw it.
-  textobj->size = pickedsize;
-  textobj->redraw();
-}
-
-
-static void font_cb(Fl_Widget *, long)
-{
-  int font_idx = fontobj->value() + first_free;
-  
-  if (!font_idx) return;
-  font_idx--;
-  
-  textobj->font = font_idx;
-  sizeobj->clear();
-  
-  int  size_count = numsizes[font_idx-first_free];
-  int *size_array = sizes[font_idx-first_free];
-  if (!size_count)
-  {
-    // no preferred sizes - probably TT fonts etc...
-  }
-  else if (size_array[0] == 0)
-  {
-    // many sizes, probably a scaleable font with preferred sizes
-    int j = 1;
-    for (int i = 1; i <= 64 || i < size_array[size_count - 1]; i++)
-    {
-      char buf[16];
-      if (j < size_count && i == size_array[j])
-      {
-        sprintf(buf, "@b%d", i);
-        j++;
-      }
-      else
-        sprintf(buf, "%d", i);
-      sizeobj->add(buf);
-    }
-    sizeobj->value(pickedsize);
-  }
-  else
-  {
-    // some sizes, probably a font with a few fixed sizes available
-    int w = 0;
-    for (int i = 0; i < size_count; i++)
-    {
-      // find the nearest available size to the current picked size
-      if (size_array[i] <= pickedsize) w = i;
-      
-      char buf[16];
-      sprintf(buf, "@b%d", size_array[i]);
-      sizeobj->add(buf);
-    }
-    sizeobj->value(w + 1);
-  }
-  size_cb(sizeobj, 0); // force selection of nearest valid size, then redraw
-  
-  // Now check to see if the font looks like a fixed pitch font or not...
-  int looks_fixed = textobj->test_fixed_pitch();
-  if(looks_fixed)
-  {
-    if (looks_fixed > 1)
-      fix_prop->value("near");
-    else
-      fix_prop->value("fixed");
-  }
-  else
-  {
-    fix_prop->value("prop");
-  }
-}
-
-
-static void choose_cb(Fl_Widget *, long)
-{
-  int font_idx = fontobj->value() + first_free;
-  if (!font_idx)
-  {
-    puts("No font chosen");
-  }
-  else
-  {
-    int font_type;
-    font_idx -= 1;
-    const char *name = Fl::get_font_name((Fl_Font)font_idx, &font_type);
-    printf("idx %d\nUser name :%s:\n", font_idx, name);
-    printf("FLTK name :%s:\n", Fl::get_font((Fl_Font)font_idx));
-    
-    Fl::set_font(extra_font, (Fl_Font)font_idx);
-    //		Fl::set_font(extra_font, Fl::get_font((Fl_Font)font_idx));
-  }
-  
-  int size_idx = sizeobj->value();
-  if (!size_idx)
-  {
-    puts("No size selected");
-  }
-  else
-  {
-    const char *c = sizeobj->text(size_idx);
-    while (*c < '0' || *c > '9') c++; // find the first numeric char
-    int pickedsize = atoi(c);         // convert the number string to a value
-    
-    printf("size %d\n\n", pickedsize);
-  }
-  
-  fflush(stdout);
-  main_win->redraw();
-}
-
-
-static void refresh_cb(Fl_Widget *, long)
-{
-  main_win->redraw();
-}
-
-
-static void own_face_cb(Fl_Widget *, void *)
-{
-  int font_idx;
-  int cursor_restore = 0;
-  static int i_was = -1; // used to keep track of where we were in the list...
-  
-  if (i_was < 0) { // not been here before
-    i_was = 1;
-  } else {
-    i_was = fontobj->topline(); // record which was the topmost visible line
-    fontobj->clear();
-    // Populating the font widget can be slower than an old dog with three legs 
-    // on a bad day, show a wait cursor
-    fnt_chooser_win->cursor(FL_CURSOR_WAIT);
-    cursor_restore = 1;
-  }
-  
-  
-  // Populate the font list with the names of the fonts found
-  for (font_idx = first_free; font_idx < font_count; font_idx++)
-  {
-    int font_type;
-    const char *name = Fl::get_font_name((Fl_Font)font_idx, &font_type);
-    char buffer[128];
-    
-    if(own_face->value() == 0) {
-      char *p = buffer;
-      // if the font is BOLD, set the bold attribute in the list
-      if (font_type & FL_BOLD) { 
-        *p++ = '@';
-        *p++ = 'b';
-      }
-      if (font_type & FL_ITALIC) { //  ditto for italic fonts
-        *p++ = '@';
-        *p++ = 'i';
-      }
-      // Suppress subsequent formatting - some MS fonts have '@' in their name
-      *p++ = '@';
-      *p++ = '.';
-      strcpy(p, name);
-    } else { 
-      // Show font in its own face
-      // this is neat, but really slow on some systems: 
-      // uses each font to display its own name
-      sprintf (buffer, "@F%d@.%s", font_idx, name);
-    }
-    fontobj->add(buffer);
-  }
-  // now put the browser position back the way it was... more or less
-  fontobj->topline(i_was);
-  // restore the cursor
-  if(cursor_restore) fnt_chooser_win->cursor(FL_CURSOR_DEFAULT);
-}
-
-
-static void create_font_widget()
-{
-  // Create the font sample label
-  strcpy(label, "Font Sample\n");
-  int i = 12; // strlen(label);
-  int n = 0;
-  ulong c;
-  for (c = ' '+1; c < 127; c++) {
-    if (!(c&0x1f)) label[i++]='\n';
-    if (c=='@') label[i++]=c;
-    label[i++]=c;
-  }
-  label[i++] = '\n';
-  for (c = 0xA1; c < 0x600; c += 9) {
-    if (!(++n&(0x1f))) label[i++]='\n';
-    i += fl_utf8encode((unsigned int)c, label + i);
-  }
-  label[i] = 0;
-  
-  // Create the window layout
-  fnt_chooser_win = new Fl_Double_Window(380, 420, "Font Selector");
-  {
-    Fl_Tile *tile = new Fl_Tile(0, 0, 380, 420);
-    {
-      Fl_Group *textgroup = new Fl_Group(0, 0, 380, 105);
-      {
-        
-        textobj = new FontDisplay(FL_FRAME_BOX, 10, 10, 360, 90, label);
-        textobj->align(FL_ALIGN_TOP|FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
-        textobj->color(53, 3);
-        
-        textgroup->box(FL_FLAT_BOX);
-        textgroup->resizable(textobj);
-        textgroup->end();
-      }  
-      Fl_Group *fontgroup = new Fl_Group(0, 105, 380, 315);
-      {        
-        fontobj = new Fl_Hold_Browser(10, 110, 290, 270);
-        fontobj->box(FL_FRAME_BOX);
-        fontobj->color(53, 3);
-        fontobj->callback(font_cb);
-        fnt_chooser_win->resizable(fontobj);
-        
-        sizeobj = new Fl_Hold_Browser(310, 110, 60, 270);
-        sizeobj->box(FL_FRAME_BOX);
-        sizeobj->color(53, 3);
-        sizeobj->callback(size_cb);
-        
-        // Create the status bar
-        Fl_Group *stat_bar = new Fl_Group (10, 385, 380, 30);
-        {        
-          fnt_cnt = new Fl_Value_Output(10, 390, 40, 20);
-          fnt_cnt->label("fonts");
-          fnt_cnt->align(FL_ALIGN_RIGHT);
-        
-          fix_prop = new Fl_Output(100, 390, 40, 20);
-          fix_prop->color(FL_BACKGROUND_COLOR);
-          fix_prop->value("prop");
-          fix_prop->clear_visible_focus();
-        
-          own_face = new Fl_Check_Button(150, 390, 40, 20, "Self");
-          own_face->value(0);
-          own_face->type(FL_TOGGLE_BUTTON);
-          own_face->clear_visible_focus();
-          own_face->callback(own_face_cb);
-          own_face->tooltip("Display font names in their own face");
-        
-          Fl_Box * dummy = new Fl_Box(220, 390, 1, 1);
-        
-          choose_btn = new Fl_Button(240, 385, 60, 30);
-          choose_btn->label("Select");
-          choose_btn->callback(choose_cb);
-        
-          refresh_btn = new Fl_Button(310, 385, 60, 30);
-          refresh_btn->label("Refresh");
-          refresh_btn->callback(refresh_cb);
-        
-          stat_bar->resizable (dummy);
-          stat_bar->end();
-        }
-        
-        fontgroup->box(FL_FLAT_BOX);
-        fontgroup->resizable(fontobj);
-        fontgroup->end();
-      }
-      tile->end();
-    }
-    fnt_chooser_win->resizable(tile);
-    fnt_chooser_win->end();
-	fnt_chooser_win->callback((Fl_Callback*)cb_exit);
-  }
-}
-
-
-int make_font_chooser(void)
-{
-  int font_idx;
-  
-  // create the widget frame
-  create_font_widget();
-  
-  // Load the systems available fonts - ask for everything
-  //	font_count = Fl::set_fonts("*");
-#ifdef WIN32
-  font_count = Fl::set_fonts("*");
-#elif defined(__APPLE__)
-  font_count = Fl::set_fonts("*");
-#else
-  // Load the systems available fonts - ask for everything that claims to be 
-  // iso10646 compatible
-  font_count = Fl::set_fonts("-*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1");
-#endif
-  
-  // allocate space for the sizes and numsizes array, now we know how many 
-  // entries it needs
-  sizes = new int*[font_count];
-  numsizes = new int[font_count];
-  
-  // Populate the font list with the names of the fonts found
-  first_free = FL_FREE_FONT;
-  for (font_idx = first_free; font_idx < font_count; font_idx++)
-  {
-    // Find out how many sizes are supported for each font face
-    int *size_array;
-    int size_count = Fl::get_font_sizes((Fl_Font)font_idx, size_array);
-    numsizes[font_idx-first_free] = size_count;
-    // if the font has multiple sizes, populate the 2-D sizes array
-    if (size_count)
-    {
-      sizes[font_idx-first_free] = new int[size_count];
-      for (int j = 0; j < size_count; j++)
-        sizes[font_idx-first_free][j] = size_array[j];
-    }
-  } // end of font list filling loop
-  
-  // Call this once to get the font browser loaded up
-  own_face_cb(NULL, 0);
-  
-  fontobj->value(1);
-  // optional hard-coded font for testing - do not use!
-  //	fontobj->textfont(261);
-  
-  font_cb(fontobj, 0);
-  
-  fnt_cnt->value(font_count);
-  
-  return font_count;
-  
-} // make_font_chooser
-
-/* End of Font Chooser Widget code */
-
-
-
-/* Unicode Font display widget */
-
-void box_cb(Fl_Widget* o, void*) {
-  thescroll->box(((Fl_Button*)o)->value() ? FL_DOWN_FRAME : FL_NO_BOX);
-  thescroll->redraw();
-}
-
-
-class right_left_input : public Fl_Input
-{
-public:
-  right_left_input (int x, int y, int w, int h) : Fl_Input(x, y, w, h) {};
-  void draw() {
-    if (type() == FL_HIDDEN_INPUT) return;
-    Fl_Boxtype b = box();
-    if (damage() & FL_DAMAGE_ALL) draw_box(b, color());
-    drawtext(x()+Fl::box_dx(b)+3, y()+Fl::box_dy(b),
-             w()-Fl::box_dw(b)-6, h()-Fl::box_dh(b));
-  }
-  void drawtext(int X, int Y, int W, int H) {
-    fl_color(textcolor());
-    fl_font(textfont(), textsize());
-    fl_rtl_draw(value(), strlen(value()),
-                X + W, Y + fl_height() -fl_descent());
-  }
-};
-
-
-void i7_cb(Fl_Widget *w, void *d)
-{
-  int i = 0;
-  char nb[] = "01234567";
-  Fl_Input *i7 = (Fl_Input*)w;
-  Fl_Input *i8 = (Fl_Input*)d;
-  static char buf[1024];
-  const char *ptr = i7->value();
-  while (ptr && *ptr) {
-    if (*ptr < ' ' || *ptr > 126) {
-      buf[i++] = '\\';
-      buf[i++] = nb[((*ptr >> 6) & 0x3)];
-      buf[i++] = nb[((*ptr >> 3) & 0x7)];
-      buf[i++] = nb[(*ptr & 0x7)];
-    } else {
-      if (*ptr == '\\') buf[i++] = '\\';
-      buf[i++] = *ptr;
-    }
-    ptr++;
-  }
-  buf[i] = 0;
-  i8->value(buf);
-}
-
-
-class UCharDropBox : public Fl_Output {
-public:
-  UCharDropBox(int x, int y, int w, int h, const char *label=0) :
-  Fl_Output(x, y, w, h, label) { }
-  int handle(int event) {
-    switch (event) {
-      case FL_DND_ENTER: return 1;
-      case FL_DND_DRAG: return 1;
-      case FL_DND_RELEASE: return 1;
-      case FL_PASTE:
-      {
-        static const char lut[] = "0123456789abcdef";
-        const char *t = Fl::event_text();
-        int i, n;
-        unsigned int ucode = fl_utf8decode(t, t+Fl::event_length(), &n);
-        if (n==0) {
-          value("");
-          return 1;
-        }
-        char buffer[200], *d = buffer;
-        for (i=0; i<n; i++) *d++ = t[i];
-        *d++ = ' ';
-        for (i=0; i<n; i++) {
-          *d++ = '\\'; *d++ = 'x';
-          *d++ = lut[(t[i]>>4)&0x0f]; *d++ = lut[t[i]&0x0f];
-        }
-        *d++ = ' ';
-        *d++ = '0';
-        *d++ = 'x';
-        *d++ = lut[(ucode>>20)&0x0f]; *d++ = lut[(ucode>>16)&0x0f];
-        *d++ = lut[(ucode>>12)&0x0f]; *d++ = lut[(ucode>>8)&0x0f];
-        *d++ = lut[(ucode>>4)&0x0f]; *d++ = lut[ucode&0x0f];
-        *d++ = 0;
-        value(buffer);
-      }
-        return 1;
-    }
-    return Fl_Output::handle(event);
-  }
-};
-
-
-int main(int argc, char** argv)
-{
-  int l;
-  const char *latin1 = 
-  "\x41\x42\x43\x61\x62\x63\xe0\xe8\xe9\xef\xe2\xee\xf6\xfc\xe3\x31\x32\x33";
-  char *utf8 = (char*) malloc(strlen(latin1) * 5 + 1);
-  l = 0;
-  //	l = fl_latin12utf((const unsigned char*)latin1, strlen(latin1), utf8);
-  l = fl_utf8froma(utf8, (strlen(latin1) * 5 + 1), latin1, strlen(latin1));
-  
-  make_font_chooser();
-  extra_font = FL_TIMES_BOLD_ITALIC;
-  
-  /* setup the extra font */
-  Fl::set_font(extra_font,
-#ifdef WIN32
-               " Arial Unicode MS"
-#elif defined(__APPLE__)
-               "Monaco"
-#else
-               "-*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1"
-#endif
-               );
-  
-  main_win = new Fl_Double_Window (200 + 5*75, 400, "Unicode Display Test");
-  main_win->begin();
-  
-  Fl_Input i1(5, 5, 190, 25);
-  utf8[l] = '\0';
-  i1.value(utf8);
-  Fl_Scroll scroll(200,0,5 * 75,400);
-  
-  int off = 2;
-  int end_list = 0x10000 / 16;
-  if (argc > 1) {
-    off = (int)strtoul(argv[1], NULL, 0);
-    end_list = off + 0x10000;
-    off /= 16;
-    end_list /= 16;
-  }
-  argc = 1;
-  for (long y = off; y < end_list; y++) {
-    int o = 0;
-    char bu[25]; // index label
-    char buf[16 * 6]; // utf8 text
-    int i = 16 * y;
-    for (int x = 0; x < 16; x++) {
-      int l;
-      l = fl_utf8encode(i, buf + o);
-      if (l < 1) l = 1;
-      o += l;
-      i++;
-    }
-    buf[o] = '\0';
-    sprintf(bu, "0x%06lX", y * 16);
-    Fl_Input *b = new Fl_Input(200,(y-off)*25,80,25);
-    b->textfont(FL_COURIER);
-    b->value(strdup(bu));
-    b = new Fl_Input(280,(y-off)*25,380,25);
-    b->textfont(extra_font);
-    b->value(strdup(buf));
-  }
-  scroll.end();
-  main_win->resizable(scroll);
-  
-  thescroll = &scroll;
-  
-  char *utf8l = (char*) malloc(strlen(utf8) * 3 + 1);
-  Fl_Input i2(5, 35, 190, 25);
-  l = fl_utf_tolower((const unsigned char*)utf8, l, utf8l);
-  utf8l[l] = '\0';
-  i2.value(utf8l);
-  
-  char *utf8u = (char*) malloc(strlen(utf8l) * 3 + 1);
-  Fl_Input i3(5, 65, 190, 25);
-  l = fl_utf_toupper((const unsigned char*)utf8l, l, utf8u);
-  utf8u[l] = '\0';
-  i3.value(utf8u);
-  
-  const char *ltr_txt = "\\->e\xCC\x82=\xC3\xAA";
-  Fl_Input i4(5, 90, 190, 25);
-  i4.value(ltr_txt);
-  i4.textfont(extra_font);
-  
-  wchar_t r_to_l_txt[] = {/*8238,*/ 
-    1610, 1608, 1606, 1604, 1603, 1608, 1583, 0};
-  
-  char abuf[40];
-  //  l = fl_unicode2utf(r_to_l_txt, 8, abuf);
-  l = fl_utf8fromwc(abuf, 40, r_to_l_txt, 8);
-  abuf[l] = 0;
-  
-  right_left_input i5(5, 115, 190, 50);
-  i5.textfont(extra_font);
-  i5.textsize(30);
-  i5.value(abuf);
-  
-  Fl_Input i7(5, 230, 190, 25);
-  Fl_Input i8(5, 260, 190, 25);
-  i7.callback(i7_cb, &i8);
-  i7.textsize(20);
-  i7.value(abuf);
-  i7.when(FL_WHEN_CHANGED);
-  
-  wchar_t r_to_l_txt1[] = { /*8238,*/ 
-    1610, 0x20, 1608, 0x20, 1606, 0x20,  
-    1604, 0x20, 1603, 0x20, 1608, 0x20, 1583, 0};
-  
-  //  l = fl_unicode2utf(r_to_l_txt1, 14, abuf);
-  l = fl_utf8fromwc(abuf, 40, r_to_l_txt1, 14);
-  abuf[l] = 0;
-  right_left_input i6(5, 175, 190, 50);
-  i6.textfont(extra_font);
-  i6.textsize(30);
-  i6.value(abuf);
-  
-  // Now try Greg Ercolano's Japanese test sequence
-  // SOME JAPANESE UTF-8 TEXT
-  const char *utfstr = 
-  "\xe4\xbd\x95\xe3\x82\x82\xe8\xa1"
-  "\x8c\xe3\x82\x8b\xe3\x80\x82"; 
-  
-  UCharDropBox db(5, 300, 190, 30);
-  db.textsize(16);
-  db.value("unichar drop box");
-  
-  Fl_Output o9(5, 330, 190, 45);
-  o9.textfont(extra_font);
-  o9.textsize(30);
-  o9.value(utfstr);
-  
-  main_win->end();
-  main_win->callback((Fl_Callback*)cb_exit);
-
-  fl_set_status(0, 370, 100, 30);
-  
-  main_win->show(argc,argv);
-
-  fnt_chooser_win->show();
-
-  int ret = Fl::run();
-
-  // Free up the sizes arrays we allocated
-  if(numsizes) {delete [] numsizes;}
-  if(sizes) {delete [] sizes;}
-
-  return ret;
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/test/valuators.fl
+++ /dev/null
@@ -1,198 +1,0 @@
-# data file for the Fltk User Interface Designer (fluid)
-version 1.0305
-header_name {.h}
-code_name {.cxx}
-Function {callback(Fl_Widget* o, void*)} {open private return_type void
-} {
-  code {printf("%g     \\r", ((Fl_Valuator*)o)->value());
-fflush(stdout);} {}
-}
-
-Function {} {open
-} {
-  Fl_Window {} {
-    label {Valuator classes, showing values for type()} open
-    xywh {400 199 580 510} type Double color 43 selection_color 43 hide
-    code0 {\#include <stdio.h>}
-  } {
-    Fl_Box {} {
-      label Fl_Slider
-      xywh {10 10 280 210} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Slider {} {
-      label 0
-      callback callback
-      tooltip {Vertical Slider} xywh {30 45 20 145} selection_color 1 labelsize 8 align 1
-    }
-    Fl_Slider {} {
-      label FL_VERT_FILL_SLIDER
-      callback callback
-      xywh {70 55 20 145} type {Vert Fill} selection_color 1 labelsize 8
-    }
-    Fl_Slider {} {
-      label FL_VERT_NICE_SLIDER
-      callback callback
-      xywh {105 45 20 145} type {Vert Knob} box FLAT_BOX color 10 selection_color 1 labelsize 8 align 1
-    }
-    Fl_Slider {} {
-      label FL_HORIZONTAL
-      callback callback
-      xywh {140 80 130 20} type Horizontal selection_color 1 labelsize 8
-    }
-    Fl_Slider {} {
-      label FL_HOR_FILL_SLIDER
-      callback callback
-      xywh {140 120 130 20} type {Horz Fill} selection_color 1 labelsize 8
-    }
-    Fl_Slider {} {
-      label FL_HOR_NICE_SLIDER
-      callback callback
-      xywh {140 160 130 20} type {Horz Knob} box FLAT_BOX color 10 selection_color 1 labelsize 8
-    }
-    Fl_Box {} {
-      label Fl_Value_Slider
-      xywh {10 230 280 210} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Value_Slider {} {
-      label 0
-      callback callback
-      tooltip {Value Slider} xywh {30 260 30 145} selection_color 1 labelsize 8 align 1
-    }
-    Fl_Value_Slider {} {
-      label FL_VERT_FILL_SLIDER
-      callback callback
-      xywh {70 275 30 140} type {Vert Fill} selection_color 1 labelsize 8
-    }
-    Fl_Value_Slider {} {
-      label FL_VERT_NICE_SLIDER
-      callback callback
-      xywh {110 260 20 145} type {Vert Knob} box FLAT_BOX color 10 selection_color 1 labelsize 8 align 1
-    }
-    Fl_Value_Slider {} {
-      label FL_HOR_SLIDER
-      callback callback
-      xywh {140 290 130 20} type Horizontal selection_color 1 labelsize 8
-    }
-    Fl_Value_Slider {} {
-      label FL_HOR_FILL_SLIDER
-      callback callback
-      xywh {140 330 130 20} type {Horz Fill} selection_color 1 labelsize 8
-    }
-    Fl_Value_Slider {} {
-      label FL_HOR_NICE_SLIDER
-      callback callback
-      xywh {140 370 130 20} type {Horz Knob} box FLAT_BOX color 10 selection_color 1 labelsize 8
-    }
-    Fl_Box {} {
-      label Fl_Value_Input
-      xywh {10 450 135 50} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Value_Input {} {
-      label 0
-      callback callback
-      tooltip {Value Input} xywh {30 470 105 25} labelsize 8 maximum 100 step 0.1
-    }
-    Fl_Box {} {
-      label Fl_Value_Output
-      xywh {155 450 135 50} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Value_Output {} {
-      label 0
-      callback callback
-      tooltip {Value Output} xywh {170 470 105 25} labelsize 8 maximum 100 step 0.1
-    }
-    Fl_Box {} {
-      label {   Fl_Scrollbar}
-      xywh {300 10 130 120} box ENGRAVED_BOX labelfont 1 align 21
-    }
-    Fl_Scrollbar {} {
-      label FL_HORIZONTAL
-      callback callback
-      tooltip {Horizontal Scrollbar} xywh {305 65 95 20} type Horizontal labelsize 8 maximum 100 value 20
-    }
-    Fl_Scrollbar {} {
-      label 0
-      callback callback
-      tooltip {Vertical Scrollbar} xywh {400 20 20 105} labelsize 8 align 1 maximum 100
-    }
-    Fl_Box {} {
-      label Fl_Adjuster
-      xywh {440 10 130 120} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Adjuster {} {
-      label {w()>h()}
-      callback callback
-      tooltip {Horizontal Adjuster} xywh {450 60 75 25} labelsize 8
-    }
-    Fl_Adjuster {} {
-      label {w()<h()}
-      callback callback
-      tooltip {Vertical Adjuster} xywh {530 35 25 75} labelsize 8
-    }
-    Fl_Box {} {
-      label Fl_Counter
-      xywh {300 140 130 120} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Counter {} {
-      label 0
-      callback callback
-      tooltip {Standard Counter} xywh {310 175 110 25} labelsize 8
-    }
-    Fl_Counter {} {
-      label FL_SIMPLE_COUNTER
-      callback callback
-      tooltip {Simple Counter} xywh {310 215 110 25} type Simple labelsize 8
-    }
-    Fl_Box {} {
-      label Fl_Spinner
-      xywh {440 140 130 120} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Spinner {} {
-      label FL_INT_INPUT
-      xywh {465 176 80 24} labelsize 8 align 2 minimum -30 maximum 30 step 2 value 5
-    }
-    Fl_Spinner {} {
-      label FL_FLOAT_INPUT
-      xywh {465 216 80 24} type Float labelsize 8 align 2 minimum 0 maximum 1 step 0.01 value 0.05
-    }
-    Fl_Box {} {
-      label Fl_Dial
-      xywh {300 270 270 105} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Dial {} {
-      label 0
-      callback callback
-      tooltip {Standard Dial} xywh {320 295 65 65} color 10 selection_color 1 labelsize 8 value 0.5
-      code0 {o->angles(0,315);}
-    }
-    Fl_Dial {} {
-      label FL_LINE_DIAL
-      callback callback
-      tooltip {Line Dial} xywh {400 295 65 65} type Line color 10 selection_color 1 labelsize 8 value 0.5
-    }
-    Fl_Dial {} {
-      label FL_FILL_DIAL
-      callback callback
-      tooltip {Fill Dial} xywh {480 295 65 65} type Fill color 10 selection_color 1 labelsize 8 value 1
-      code0 {o->angles(0,360);}
-    }
-    Fl_Box {} {
-      label Fl_Roller
-      xywh {300 385 150 115} box ENGRAVED_BOX labelfont 1 align 17
-    }
-    Fl_Roller {} {
-      label 0
-      callback callback
-      tooltip {Vertical Roller} xywh {315 390 20 95} labelsize 8
-    }
-    Fl_Roller {} {
-      label FL_HORIZONTAL
-      callback callback
-      tooltip {Horizontal Roller} xywh {345 430 90 20} type Horizontal labelsize 8
-    }
-    Fl_Box {} {
-      label {Some widgets have color(FL_GREEN) and color2(FL_RED) to show the areas these effect.} selected
-      xywh {460 385 110 115} box BORDER_FRAME color 0 selection_color 0 labelsize 11 align 128
-    }
-  }
-}
--- a/DoConfig/fltk/test/windowfocus.cxx
+++ /dev/null
@@ -1,64 +1,0 @@
-//
-// "$Id$"
-//
-// Cross-window show/focus test program for the Fast Light Tool Kit (FLTK).
-//
-// Copyright 1998-2015 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
-// file is missing or damaged, see the license at:
-//
-//     http://www.fltk.org/COPYING.php
-//
-// Please report all bugs and problems on the following page:
-//
-//     http://www.fltk.org/str.php
-//
-
-#include <FL/Fl.H>
-#include <FL/Fl_Box.H>
-#include <FL/Fl_Double_Window.H>
-#include <FL/Fl_Input.H>
-
-static Fl_Double_Window *win1, *win2;
-static Fl_Input *input1;
-
-static void popup(Fl_Widget *, void *) {
-
-  win2->position(win1->x() + win1->w(), win1->y());
-
-  win2->show();
-  win2->wait_for_expose();
-  input1->take_focus();
-}
-
-int main(int argc, char **argv) {
-
-  win1 = new Fl_Double_Window(300, 200);
-  win1->label("show() focus test");
-
-  Fl_Box *b = new Fl_Box(10, 10, 280, 130);
-  b->label("Type something to pop the subwindow up. "
-	   "The focus should stay on the input, "
-	   "and you should be able to continue typing.");
-  b->align(FL_ALIGN_WRAP | FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
-
-  input1 = new Fl_Input(10, 150, 150, 25);
-  input1->when(FL_WHEN_CHANGED);
-  input1->callback(popup);
-
-  win1->end();
-
-  win2 = new Fl_Double_Window(300, 200);
-  win2->label("window2");
-  win2->end();
-
-  win1->show(argc,argv);
-
-  return Fl::run();
-}
-
-//
-// End of "$Id$".
-//
--- a/DoConfig/fltk/zlib/CMakeLists.txt
+++ /dev/null
@@ -1,35 +1,0 @@
-
-# source files for zlib
-set(ZLIB_SRCS
-    adler32.c
-    compress.c
-    crc32.c
-    deflate.c
-    gzclose.c
-    gzlib.c
-    gzread.c
-    gzwrite.c
-    inflate.c
-    infback.c
-    inftrees.c
-    inffast.c
-    trees.c
-    uncompr.c
-    zutil.c
-)
-
-#######################################################################
-FL_ADD_LIBRARY(fltk_z STATIC "${ZLIB_SRCS}")
-# install the zlib headers
-install(FILES zconf.h;zlib.h;zutil.h
-    DESTINATION ${FLTK_INCLUDEDIR}/FL/images
-)
-
-#######################################################################
-if(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
-FL_ADD_LIBRARY(fltk_z SHARED "${ZLIB_SRCS}")
-
-#######################################################################
-endif(OPTION_BUILD_SHARED_LIBS)
-#######################################################################
--- a/DoConfig/fltk/zlib/ChangeLog
+++ /dev/null
@@ -1,1472 +1,0 @@
-
-                ChangeLog file for zlib
-
-Changes in 1.2.8 (28 Apr 2013)
-- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
-- Do not force Z_CONST for C++
-- Clean up contrib/vstudio [Ro�]
-- Correct spelling error in zlib.h
-- Fix mixed line endings in contrib/vstudio
-
-Changes in 1.2.7.3 (13 Apr 2013)
-- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc
-
-Changes in 1.2.7.2 (13 Apr 2013)
-- Change check for a four-byte type back to hexadecimal
-- Fix typo in win32/Makefile.msc
-- Add casts in gzwrite.c for pointer differences
-
-Changes in 1.2.7.1 (24 Mar 2013)
-- Replace use of unsafe string functions with snprintf if available
-- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
-- Fix gzgetc undefine when Z_PREFIX set [Turk]
-- Eliminate use of mktemp in Makefile (not always available)
-- Fix bug in 'F' mode for gzopen()
-- Add inflateGetDictionary() function
-- Correct comment in deflate.h
-- Use _snprintf for snprintf in Microsoft C
-- On Darwin, only use /usr/bin/libtool if libtool is not Apple
-- Delete "--version" file if created by "ar --version" [Richard G.]
-- Fix configure check for veracity of compiler error return codes
-- Fix CMake compilation of static lib for MSVC2010 x64
-- Remove unused variable in infback9.c
-- Fix argument checks in gzlog_compress() and gzlog_write()
-- Clean up the usage of z_const and respect const usage within zlib
-- Clean up examples/gzlog.[ch] comparisons of different types
-- Avoid shift equal to bits in type (caused endless loop)
-- Fix unintialized value bug in gzputc() introduced by const patches
-- Fix memory allocation error in examples/zran.c [Nor]
-- Fix bug where gzopen(), gzclose() would write an empty file
-- Fix bug in gzclose() when gzwrite() runs out of memory
-- Check for input buffer malloc failure in examples/gzappend.c
-- Add note to contrib/blast to use binary mode in stdio
-- Fix comparisons of differently signed integers in contrib/blast
-- Check for invalid code length codes in contrib/puff
-- Fix serious but very rare decompression bug in inftrees.c
-- Update inflateBack() comments, since inflate() can be faster
-- Use underscored I/O function names for WINAPI_FAMILY
-- Add _tr_flush_bits to the external symbols prefixed by --zprefix
-- Add contrib/vstudio/vc10 pre-build step for static only
-- Quote --version-script argument in CMakeLists.txt
-- Don't specify --version-script on Apple platforms in CMakeLists.txt
-- Fix casting error in contrib/testzlib/testzlib.c
-- Fix types in contrib/minizip to match result of get_crc_table()
-- Simplify contrib/vstudio/vc10 with 'd' suffix
-- Add TOP support to win32/Makefile.msc
-- Suport i686 and amd64 assembler builds in CMakeLists.txt
-- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
-- Add vc11 and vc12 build files to contrib/vstudio
-- Add gzvprintf() as an undocumented function in zlib
-- Fix configure for Sun shell
-- Remove runtime check in configure for four-byte integer type
-- Add casts and consts to ease user conversion to C++
-- Add man pages for minizip and miniunzip
-- In Makefile uninstall, don't rm if preceding cd fails
-- Do not return Z_BUF_ERROR if deflateParam() has nothing to write
-
-Changes in 1.2.7 (2 May 2012)
-- Replace use of memmove() with a simple copy for portability
-- Test for existence of strerror
-- Restore gzgetc_ for backward compatibility with 1.2.6
-- Fix build with non-GNU make on Solaris
-- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
-- Include unistd.h for Watcom C
-- Use __WATCOMC__ instead of __WATCOM__
-- Do not use the visibility attribute if NO_VIZ defined
-- Improve the detection of no hidden visibility attribute
-- Avoid using __int64 for gcc or solo compilation
-- Cast to char * in gzprintf to avoid warnings [Zinser]
-- Fix make_vms.com for VAX [Zinser]
-- Don't use library or built-in byte swaps
-- Simplify test and use of gcc hidden attribute
-- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
-- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
-- Fix bug in test/minigzip.c for configure --solo
-- Fix contrib/vstudio project link errors [Mohanathas]
-- Add ability to choose the builder in make_vms.com [Schweda]
-- Add DESTDIR support to mingw32 win32/Makefile.gcc
-- Fix comments in win32/Makefile.gcc for proper usage
-- Allow overriding the default install locations for cmake
-- Generate and install the pkg-config file with cmake
-- Build both a static and a shared version of zlib with cmake
-- Include version symbols for cmake builds
-- If using cmake with MSVC, add the source directory to the includes
-- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
-- Move obsolete emx makefile to old [Truta]
-- Allow the use of -Wundef when compiling or using zlib
-- Avoid the use of the -u option with mktemp
-- Improve inflate() documentation on the use of Z_FINISH
-- Recognize clang as gcc
-- Add gzopen_w() in Windows for wide character path names
-- Rename zconf.h in CMakeLists.txt to move it out of the way
-- Add source directory in CMakeLists.txt for building examples
-- Look in build directory for zlib.pc in CMakeLists.txt
-- Remove gzflags from zlibvc.def in vc9 and vc10
-- Fix contrib/minizip compilation in the MinGW environment
-- Update ./configure for Solaris, support --64 [Mooney]
-- Remove -R. from Solaris shared build (possible security issue)
-- Avoid race condition for parallel make (-j) running example
-- Fix type mismatch between get_crc_table() and crc_table
-- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
-- Fix the path to zlib.map in CMakeLists.txt
-- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
-- Add instructions to win32/Makefile.gcc for shared install [Torri]
-
-Changes in 1.2.6.1 (12 Feb 2012)
-- Avoid the use of the Objective-C reserved name "id"
-- Include io.h in gzguts.h for Microsoft compilers
-- Fix problem with ./configure --prefix and gzgetc macro
-- Include gz_header definition when compiling zlib solo
-- Put gzflags() functionality back in zutil.c
-- Avoid library header include in crc32.c for Z_SOLO
-- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
-- Minor cleanup in contrib/minizip/zip.c [Vollant]
-- Update make_vms.com [Zinser]
-- Remove unnecessary gzgetc_ function
-- Use optimized byte swap operations for Microsoft and GNU [Snyder]
-- Fix minor typo in zlib.h comments [Rzesniowiecki]
-
-Changes in 1.2.6 (29 Jan 2012)
-- Update the Pascal interface in contrib/pascal
-- Fix function numbers for gzgetc_ in zlibvc.def files
-- Fix configure.ac for contrib/minizip [Schiffer]
-- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
-- Have ./configure use the compiler return code for error indication
-- Fix CMakeLists.txt for cross compilation [McClure]
-- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
-- Fix compilation of contrib/minizip on FreeBSD [Marquez]
-- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
-- Include io.h for Turbo C / Borland C on all platforms [Truta]
-- Make version explicit in contrib/minizip/configure.ac [Bosmans]
-- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
-- Minor cleanup up contrib/minizip/unzip.c [Vollant]
-- Fix bug when compiling minizip with C++ [Vollant]
-- Protect for long name and extra fields in contrib/minizip [Vollant]
-- Avoid some warnings in contrib/minizip [Vollant]
-- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
-- Add missing libs to minizip linker command
-- Add support for VPATH builds in contrib/minizip
-- Add an --enable-demos option to contrib/minizip/configure
-- Add the generation of configure.log by ./configure
-- Exit when required parameters not provided to win32/Makefile.gcc
-- Have gzputc return the character written instead of the argument
-- Use the -m option on ldconfig for BSD systems [Tobias]
-- Correct in zlib.map when deflateResetKeep was added
-
-Changes in 1.2.5.3 (15 Jan 2012)
-- Restore gzgetc function for binary compatibility
-- Do not use _lseeki64 under Borland C++ [Truta]
-- Update win32/Makefile.msc to build test/*.c [Truta]
-- Remove old/visualc6 given CMakefile and other alternatives
-- Update AS400 build files and documentation [Monnerat]
-- Update win32/Makefile.gcc to build test/*.c [Truta]
-- Permit stronger flushes after Z_BLOCK flushes
-- Avoid extraneous empty blocks when doing empty flushes
-- Permit Z_NULL arguments to deflatePending
-- Allow deflatePrime() to insert bits in the middle of a stream
-- Remove second empty static block for Z_PARTIAL_FLUSH
-- Write out all of the available bits when using Z_BLOCK
-- Insert the first two strings in the hash table after a flush
-
-Changes in 1.2.5.2 (17 Dec 2011)
-- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
-- use relative symlinks for shared libs
-- Avoid searching past window for Z_RLE strategy
-- Assure that high-water mark initialization is always applied in deflate
-- Add assertions to fill_window() in deflate.c to match comments
-- Update python link in README
-- Correct spelling error in gzread.c
-- Fix bug in gzgets() for a concatenated empty gzip stream
-- Correct error in comment for gz_make()
-- Change gzread() and related to ignore junk after gzip streams
-- Allow gzread() and related to continue after gzclearerr()
-- Allow gzrewind() and gzseek() after a premature end-of-file
-- Simplify gzseek() now that raw after gzip is ignored
-- Change gzgetc() to a macro for speed (~40% speedup in testing)
-- Fix gzclose() to return the actual error last encountered
-- Always add large file support for windows
-- Include zconf.h for windows large file support
-- Include zconf.h.cmakein for windows large file support
-- Update zconf.h.cmakein on make distclean
-- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
-- Clarify how gzopen() appends in zlib.h comments
-- Correct documentation of gzdirect() since junk at end now ignored
-- Add a transparent write mode to gzopen() when 'T' is in the mode
-- Update python link in zlib man page
-- Get inffixed.h and MAKEFIXED result to match
-- Add a ./config --solo option to make zlib subset with no libary use
-- Add undocumented inflateResetKeep() function for CAB file decoding
-- Add --cover option to ./configure for gcc coverage testing
-- Add #define ZLIB_CONST option to use const in the z_stream interface
-- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
-- Note behavior of uncompress() to provide as much data as it can
-- Add files in contrib/minizip to aid in building libminizip
-- Split off AR options in Makefile.in and configure
-- Change ON macro to Z_ARG to avoid application conflicts
-- Facilitate compilation with Borland C++ for pragmas and vsnprintf
-- Include io.h for Turbo C / Borland C++
-- Move example.c and minigzip.c to test/
-- Simplify incomplete code table filling in inflate_table()
-- Remove code from inflate.c and infback.c that is impossible to execute
-- Test the inflate code with full coverage
-- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
-- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
-- Fix gzwrite.c to accommodate reduced memory zlib compilation
-- Have inflate() with Z_FINISH avoid the allocation of a window
-- Do not set strm->adler when doing raw inflate
-- Fix gzeof() to behave just like feof() when read is not past end of file
-- Fix bug in gzread.c when end-of-file is reached
-- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
-- Document gzread() capability to read concurrently written files
-- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]
-
-Changes in 1.2.5.1 (10 Sep 2011)
-- Update FAQ entry on shared builds (#13)
-- Avoid symbolic argument to chmod in Makefile.in
-- Fix bug and add consts in contrib/puff [Oberhumer]
-- Update contrib/puff/zeros.raw test file to have all block types
-- Add full coverage test for puff in contrib/puff/Makefile
-- Fix static-only-build install in Makefile.in
-- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
-- Add libz.a dependency to shared in Makefile.in for parallel builds
-- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
-- Replace $(...) with `...` in configure for non-bash sh [Bowler]
-- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
-- Add solaris* to Linux* in configure to allow gcc use [Groffen]
-- Add *bsd* to Linux* case in configure [Bar-Lev]
-- Add inffast.obj to dependencies in win32/Makefile.msc
-- Correct spelling error in deflate.h [Kohler]
-- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
-- Add test to configure for GNU C looking for gcc in output of $cc -v
-- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
-- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
-- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
-- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
-- Make stronger test in zconf.h to include unistd.h for LFS
-- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
-- Fix zlib.h LFS support when Z_PREFIX used
-- Add updated as400 support (removed from old) [Monnerat]
-- Avoid deflate sensitivity to volatile input data
-- Avoid division in adler32_combine for NO_DIVIDE
-- Clarify the use of Z_FINISH with deflateBound() amount of space
-- Set binary for output file in puff.c
-- Use u4 type for crc_table to avoid conversion warnings
-- Apply casts in zlib.h to avoid conversion warnings
-- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
-- Improve inflateSync() documentation to note indeterminancy
-- Add deflatePending() function to return the amount of pending output
-- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
-- Add a check in configure for stdarg.h, use for gzprintf()
-- Check that pointers fit in ints when gzprint() compiled old style
-- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
-- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
-- Add debug records in assmebler code [Londer]
-- Update RFC references to use http://tools.ietf.org/html/... [Li]
-- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
-
-Changes in 1.2.5 (19 Apr 2010)
-- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]
-- Default to libdir as sharedlibdir in configure [Nieder]
-- Update copyright dates on modified source files
-- Update trees.c to be able to generate modified trees.h
-- Exit configure for MinGW, suggesting win32/Makefile.gcc
-- Check for NULL path in gz_open [Homurlu]
-
-Changes in 1.2.4.5 (18 Apr 2010)
-- Set sharedlibdir in configure [Torok]
-- Set LDFLAGS in Makefile.in [Bar-Lev]
-- Avoid mkdir objs race condition in Makefile.in [Bowler]
-- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays
-- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C
-- Don't use hidden attribute when it is a warning generator (e.g. Solaris)
-
-Changes in 1.2.4.4 (18 Apr 2010)
-- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok]
-- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty
-- Try to use bash or ksh regardless of functionality of /bin/sh
-- Fix configure incompatibility with NetBSD sh
-- Remove attempt to run under bash or ksh since have better NetBSD fix
-- Fix win32/Makefile.gcc for MinGW [Bar-Lev]
-- Add diagnostic messages when using CROSS_PREFIX in configure
-- Added --sharedlibdir option to configure [Weigelt]
-- Use hidden visibility attribute when available [Frysinger]
-
-Changes in 1.2.4.3 (10 Apr 2010)
-- Only use CROSS_PREFIX in configure for ar and ranlib if they exist
-- Use CROSS_PREFIX for nm [Bar-Lev]
-- Assume _LARGEFILE64_SOURCE defined is equivalent to true
-- Avoid use of undefined symbols in #if with && and ||
-- Make *64 prototypes in gzguts.h consistent with functions
-- Add -shared load option for MinGW in configure [Bowler]
-- Move z_off64_t to public interface, use instead of off64_t
-- Remove ! from shell test in configure (not portable to Solaris)
-- Change +0 macro tests to -0 for possibly increased portability
-
-Changes in 1.2.4.2 (9 Apr 2010)
-- Add consistent carriage returns to readme.txt's in masmx86 and masmx64
-- Really provide prototypes for *64 functions when building without LFS
-- Only define unlink() in minigzip.c if unistd.h not included
-- Update README to point to contrib/vstudio project files
-- Move projects/vc6 to old/ and remove projects/
-- Include stdlib.h in minigzip.c for setmode() definition under WinCE
-- Clean up assembler builds in win32/Makefile.msc [Rowe]
-- Include sys/types.h for Microsoft for off_t definition
-- Fix memory leak on error in gz_open()
-- Symbolize nm as $NM in configure [Weigelt]
-- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt]
-- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined
-- Fix bug in gzeof() to take into account unused input data
-- Avoid initialization of structures with variables in puff.c
-- Updated win32/README-WIN32.txt [Rowe]
-
-Changes in 1.2.4.1 (28 Mar 2010)
-- Remove the use of [a-z] constructs for sed in configure [gentoo 310225]
-- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech]
-- Restore "for debugging" comment on sprintf() in gzlib.c
-- Remove fdopen for MVS from gzguts.h
-- Put new README-WIN32.txt in win32 [Rowe]
-- Add check for shell to configure and invoke another shell if needed
-- Fix big fat stinking bug in gzseek() on uncompressed files
-- Remove vestigial F_OPEN64 define in zutil.h
-- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE
-- Avoid errors on non-LFS systems when applications define LFS macros
-- Set EXE to ".exe" in configure for MINGW [Kahle]
-- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill]
-- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev]
-- Add DLL install in win32/makefile.gcc [Bar-Lev]
-- Allow Linux* or linux* from uname in configure [Bar-Lev]
-- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev]
-- Add cross-compilation prefixes to configure [Bar-Lev]
-- Match type exactly in gz_load() invocation in gzread.c
-- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func
-- Provide prototypes for *64 functions when building zlib without LFS
-- Don't use -lc when linking shared library on MinGW
-- Remove errno.h check in configure and vestigial errno code in zutil.h
-
-Changes in 1.2.4 (14 Mar 2010)
-- Fix VER3 extraction in configure for no fourth subversion
-- Update zlib.3, add docs to Makefile.in to make .pdf out of it
-- Add zlib.3.pdf to distribution
-- Don't set error code in gzerror() if passed pointer is NULL
-- Apply destination directory fixes to CMakeLists.txt [Lowman]
-- Move #cmakedefine's to a new zconf.in.cmakein
-- Restore zconf.h for builds that don't use configure or cmake
-- Add distclean to dummy Makefile for convenience
-- Update and improve INDEX, README, and FAQ
-- Update CMakeLists.txt for the return of zconf.h [Lowman]
-- Update contrib/vstudio/vc9 and vc10 [Vollant]
-- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc
-- Apply license and readme changes to contrib/asm686 [Raiter]
-- Check file name lengths and add -c option in minigzip.c [Li]
-- Update contrib/amd64 and contrib/masmx86/ [Vollant]
-- Avoid use of "eof" parameter in trees.c to not shadow library variable
-- Update make_vms.com for removal of zlibdefs.h [Zinser]
-- Update assembler code and vstudio projects in contrib [Vollant]
-- Remove outdated assembler code contrib/masm686 and contrib/asm586
-- Remove old vc7 and vc8 from contrib/vstudio
-- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe]
-- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open()
-- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant]
-- Remove *64 functions from win32/zlib.def (they're not 64-bit yet)
-- Fix bug in void-returning vsprintf() case in gzwrite.c
-- Fix name change from inflate.h in contrib/inflate86/inffas86.c
-- Check if temporary file exists before removing in make_vms.com [Zinser]
-- Fix make install and uninstall for --static option
-- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta]
-- Update readme.txt in contrib/masmx64 and masmx86 to assemble
-
-Changes in 1.2.3.9 (21 Feb 2010)
-- Expunge gzio.c
-- Move as400 build information to old
-- Fix updates in contrib/minizip and contrib/vstudio
-- Add const to vsnprintf test in configure to avoid warnings [Weigelt]
-- Delete zconf.h (made by configure) [Weigelt]
-- Change zconf.in.h to zconf.h.in per convention [Weigelt]
-- Check for NULL buf in gzgets()
-- Return empty string for gzgets() with len == 1 (like fgets())
-- Fix description of gzgets() in zlib.h for end-of-file, NULL return
-- Update minizip to 1.1 [Vollant]
-- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c
-- Note in zlib.h that gzerror() should be used to distinguish from EOF
-- Remove use of snprintf() from gzlib.c
-- Fix bug in gzseek()
-- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant]
-- Fix zconf.h generation in CMakeLists.txt [Lowman]
-- Improve comments in zconf.h where modified by configure
-
-Changes in 1.2.3.8 (13 Feb 2010)
-- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer]
-- Use z_off64_t in gz_zero() and gz_skip() to match state->skip
-- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t)
-- Revert to Makefile.in from 1.2.3.6 (live with the clutter)
-- Fix missing error return in gzflush(), add zlib.h note
-- Add *64 functions to zlib.map [Levin]
-- Fix signed/unsigned comparison in gz_comp()
-- Use SFLAGS when testing shared linking in configure
-- Add --64 option to ./configure to use -m64 with gcc
-- Fix ./configure --help to correctly name options
-- Have make fail if a test fails [Levin]
-- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson]
-- Remove assembler object files from contrib
-
-Changes in 1.2.3.7 (24 Jan 2010)
-- Always gzopen() with O_LARGEFILE if available
-- Fix gzdirect() to work immediately after gzopen() or gzdopen()
-- Make gzdirect() more precise when the state changes while reading
-- Improve zlib.h documentation in many places
-- Catch memory allocation failure in gz_open()
-- Complete close operation if seek forward in gzclose_w() fails
-- Return Z_ERRNO from gzclose_r() if close() fails
-- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL
-- Return zero for gzwrite() errors to match zlib.h description
-- Return -1 on gzputs() error to match zlib.h description
-- Add zconf.in.h to allow recovery from configure modification [Weigelt]
-- Fix static library permissions in Makefile.in [Weigelt]
-- Avoid warnings in configure tests that hide functionality [Weigelt]
-- Add *BSD and DragonFly to Linux case in configure [gentoo 123571]
-- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212]
-- Avoid access of uninitialized data for first inflateReset2 call [Gomes]
-- Keep object files in subdirectories to reduce the clutter somewhat
-- Remove default Makefile and zlibdefs.h, add dummy Makefile
-- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_
-- Remove zlibdefs.h completely -- modify zconf.h instead
-
-Changes in 1.2.3.6 (17 Jan 2010)
-- Avoid void * arithmetic in gzread.c and gzwrite.c
-- Make compilers happier with const char * for gz_error message
-- Avoid unused parameter warning in inflate.c
-- Avoid signed-unsigned comparison warning in inflate.c
-- Indent #pragma's for traditional C
-- Fix usage of strwinerror() in glib.c, change to gz_strwinerror()
-- Correct email address in configure for system options
-- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser]
-- Update zlib.map [Brown]
-- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok]
-- Apply various fixes to CMakeLists.txt [Lowman]
-- Add checks on len in gzread() and gzwrite()
-- Add error message for no more room for gzungetc()
-- Remove zlib version check in gzwrite()
-- Defer compression of gzprintf() result until need to
-- Use snprintf() in gzdopen() if available
-- Remove USE_MMAP configuration determination (only used by minigzip)
-- Remove examples/pigz.c (available separately)
-- Update examples/gun.c to 1.6
-
-Changes in 1.2.3.5 (8 Jan 2010)
-- Add space after #if in zutil.h for some compilers
-- Fix relatively harmless bug in deflate_fast() [Exarevsky]
-- Fix same problem in deflate_slow()
-- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown]
-- Add deflate_rle() for faster Z_RLE strategy run-length encoding
-- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding
-- Change name of "write" variable in inffast.c to avoid library collisions
-- Fix premature EOF from gzread() in gzio.c [Brown]
-- Use zlib header window size if windowBits is 0 in inflateInit2()
-- Remove compressBound() call in deflate.c to avoid linking compress.o
-- Replace use of errno in gz* with functions, support WinCE [Alves]
-- Provide alternative to perror() in minigzip.c for WinCE [Alves]
-- Don't use _vsnprintf on later versions of MSVC [Lowman]
-- Add CMake build script and input file [Lowman]
-- Update contrib/minizip to 1.1 [Svensson, Vollant]
-- Moved nintendods directory from contrib to .
-- Replace gzio.c with a new set of routines with the same functionality
-- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
-- Update contrib/minizip to 1.1b
-- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
-
-Changes in 1.2.3.4 (21 Dec 2009)
-- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility
-- Update comments in configure and Makefile.in for default --shared
-- Fix test -z's in configure [Marquess]
-- Build examplesh and minigzipsh when not testing
-- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h
-- Import LDFLAGS from the environment in configure
-- Fix configure to populate SFLAGS with discovered CFLAGS options
-- Adapt make_vms.com to the new Makefile.in [Zinser]
-- Add zlib2ansi script for C++ compilation [Marquess]
-- Add _FILE_OFFSET_BITS=64 test to make test (when applicable)
-- Add AMD64 assembler code for longest match to contrib [Teterin]
-- Include options from $SFLAGS when doing $LDSHARED
-- Simplify 64-bit file support by introducing z_off64_t type
-- Make shared object files in objs directory to work around old Sun cc
-- Use only three-part version number for Darwin shared compiles
-- Add rc option to ar in Makefile.in for when ./configure not run
-- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4*
-- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile
-- Protect against _FILE_OFFSET_BITS being defined when compiling zlib
-- Rename Makefile.in targets allstatic to static and allshared to shared
-- Fix static and shared Makefile.in targets to be independent
-- Correct error return bug in gz_open() by setting state [Brown]
-- Put spaces before ;;'s in configure for better sh compatibility
-- Add pigz.c (parallel implementation of gzip) to examples/
-- Correct constant in crc32.c to UL [Leventhal]
-- Reject negative lengths in crc32_combine()
-- Add inflateReset2() function to work like inflateEnd()/inflateInit2()
-- Include sys/types.h for _LARGEFILE64_SOURCE [Brown]
-- Correct typo in doc/algorithm.txt [Janik]
-- Fix bug in adler32_combine() [Zhu]
-- Catch missing-end-of-block-code error in all inflates and in puff
-    Assures that random input to inflate eventually results in an error
-- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/
-- Update ENOUGH and its usage to reflect discovered bounds
-- Fix gzerror() error report on empty input file [Brown]
-- Add ush casts in trees.c to avoid pedantic runtime errors
-- Fix typo in zlib.h uncompress() description [Reiss]
-- Correct inflate() comments with regard to automatic header detection
-- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays)
-- Put new version of gzlog (2.0) in examples with interruption recovery
-- Add puff compile option to permit invalid distance-too-far streams
-- Add puff TEST command options, ability to read piped input
-- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but
-  _LARGEFILE64_SOURCE not defined
-- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart
-- Fix deflateSetDictionary() to use all 32K for output consistency
-- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h)
-- Clear bytes after deflate lookahead to avoid use of uninitialized data
-- Change a limit in inftrees.c to be more transparent to Coverity Prevent
-- Update win32/zlib.def with exported symbols from zlib.h
-- Correct spelling errors in zlib.h [Willem, Sobrado]
-- Allow Z_BLOCK for deflate() to force a new block
-- Allow negative bits in inflatePrime() to delete existing bit buffer
-- Add Z_TREES flush option to inflate() to return at end of trees
-- Add inflateMark() to return current state information for random access
-- Add Makefile for NintendoDS to contrib [Costa]
-- Add -w in configure compile tests to avoid spurious warnings [Beucler]
-- Fix typos in zlib.h comments for deflateSetDictionary()
-- Fix EOF detection in transparent gzread() [Maier]
-
-Changes in 1.2.3.3 (2 October 2006)
-- Make --shared the default for configure, add a --static option
-- Add compile option to permit invalid distance-too-far streams
-- Add inflateUndermine() function which is required to enable above
-- Remove use of "this" variable name for C++ compatibility [Marquess]
-- Add testing of shared library in make test, if shared library built
-- Use ftello() and fseeko() if available instead of ftell() and fseek()
-- Provide two versions of all functions that use the z_off_t type for
-  binary compatibility -- a normal version and a 64-bit offset version,
-  per the Large File Support Extension when _LARGEFILE64_SOURCE is
-  defined; use the 64-bit versions by default when _FILE_OFFSET_BITS
-  is defined to be 64
-- Add a --uname= option to configure to perhaps help with cross-compiling
-
-Changes in 1.2.3.2 (3 September 2006)
-- Turn off silly Borland warnings [Hay]
-- Use off64_t and define _LARGEFILE64_SOURCE when present
-- Fix missing dependency on inffixed.h in Makefile.in
-- Rig configure --shared to build both shared and static [Teredesai, Truta]
-- Remove zconf.in.h and instead create a new zlibdefs.h file
-- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant]
-- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt]
-
-Changes in 1.2.3.1 (16 August 2006)
-- Add watcom directory with OpenWatcom make files [Daniel]
-- Remove #undef of FAR in zconf.in.h for MVS [Fedtke]
-- Update make_vms.com [Zinser]
-- Use -fPIC for shared build in configure [Teredesai, Nicholson]
-- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
-- Use fdopen() (not _fdopen()) for Interix in zutil.h [B�ck]
-- Add some FAQ entries about the contrib directory
-- Update the MVS question in the FAQ
-- Avoid extraneous reads after EOF in gzio.c [Brown]
-- Correct spelling of "successfully" in gzio.c [Randers-Pehrson]
-- Add comments to zlib.h about gzerror() usage [Brown]
-- Set extra flags in gzip header in gzopen() like deflate() does
-- Make configure options more compatible with double-dash conventions
-  [Weigelt]
-- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen]
-- Fix uninstall target in Makefile.in [Truta]
-- Add pkgconfig support [Weigelt]
-- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt]
-- Replace set_data_type() with a more accurate detect_data_type() in
-  trees.c, according to the txtvsbin.txt document [Truta]
-- Swap the order of #include <stdio.h> and #include "zlib.h" in
-  gzio.c, example.c and minigzip.c [Truta]
-- Shut up annoying VS2005 warnings about standard C deprecation [Rowe,
-  Truta] (where?)
-- Fix target "clean" from win32/Makefile.bor [Truta]
-- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe]
-- Update zlib www home address in win32/DLL_FAQ.txt [Truta]
-- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove]
-- Enable browse info in the "Debug" and "ASM Debug" configurations in
-  the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta]
-- Add pkgconfig support [Weigelt]
-- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h,
-  for use in win32/zlib1.rc [Polushin, Rowe, Truta]
-- Add a document that explains the new text detection scheme to
-  doc/txtvsbin.txt [Truta]
-- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta]
-- Move algorithm.txt into doc/ [Truta]
-- Synchronize FAQ with website
-- Fix compressBound(), was low for some pathological cases [Fearnley]
-- Take into account wrapper variations in deflateBound()
-- Set examples/zpipe.c input and output to binary mode for Windows
-- Update examples/zlib_how.html with new zpipe.c (also web site)
-- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems
-  that gcc became pickier in 4.0)
-- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain
-  un-versioned, the patch adds versioning only for symbols introduced in
-  zlib-1.2.0 or later.  It also declares as local those symbols which are
-  not designed to be exported." [Levin]
-- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure
-- Do not initialize global static by default in trees.c, add a response
-  NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess]
-- Don't use strerror() in gzio.c under WinCE [Yakimov]
-- Don't use errno.h in zutil.h under WinCE [Yakimov]
-- Move arguments for AR to its usage to allow replacing ar [Marot]
-- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson]
-- Improve inflateInit() and inflateInit2() documentation
-- Fix structure size comment in inflate.h
-- Change configure help option from --h* to --help [Santos]
-
-Changes in 1.2.3 (18 July 2005)
-- Apply security vulnerability fixes to contrib/infback9 as well
-- Clean up some text files (carriage returns, trailing space)
-- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant]
-
-Changes in 1.2.2.4 (11 July 2005)
-- Add inflatePrime() function for starting inflation at bit boundary
-- Avoid some Visual C warnings in deflate.c
-- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit
-  compile
-- Fix some spelling errors in comments [Betts]
-- Correct inflateInit2() error return documentation in zlib.h
-- Add zran.c example of compressed data random access to examples
-  directory, shows use of inflatePrime()
-- Fix cast for assignments to strm->state in inflate.c and infback.c
-- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer]
-- Move declarations of gf2 functions to right place in crc32.c [Oberhumer]
-- Add cast in trees.c t avoid a warning [Oberhumer]
-- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer]
-- Update make_vms.com [Zinser]
-- Initialize state->write in inflateReset() since copied in inflate_fast()
-- Be more strict on incomplete code sets in inflate_table() and increase
-  ENOUGH and MAXD -- this repairs a possible security vulnerability for
-  invalid inflate input.  Thanks to Tavis Ormandy and Markus Oberhumer for
-  discovering the vulnerability and providing test cases.
-- Add ia64 support to configure for HP-UX [Smith]
-- Add error return to gzread() for format or i/o error [Levin]
-- Use malloc.h for OS/2 [Necasek]
-
-Changes in 1.2.2.3 (27 May 2005)
-- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile
-- Typecast fread() return values in gzio.c [Vollant]
-- Remove trailing space in minigzip.c outmode (VC++ can't deal with it)
-- Fix crc check bug in gzread() after gzungetc() [Heiner]
-- Add the deflateTune() function to adjust internal compression parameters
-- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack)
-- Remove an incorrect assertion in examples/zpipe.c
-- Add C++ wrapper in infback9.h [Donais]
-- Fix bug in inflateCopy() when decoding fixed codes
-- Note in zlib.h how much deflateSetDictionary() actually uses
-- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used)
-- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer]
-- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer]
-- Add gzdirect() function to indicate transparent reads
-- Update contrib/minizip [Vollant]
-- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer]
-- Add casts in crc32.c to avoid warnings [Oberhumer]
-- Add contrib/masmx64 [Vollant]
-- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant]
-
-Changes in 1.2.2.2 (30 December 2004)
-- Replace structure assignments in deflate.c and inflate.c with zmemcpy to
-  avoid implicit memcpy calls (portability for no-library compilation)
-- Increase sprintf() buffer size in gzdopen() to allow for large numbers
-- Add INFLATE_STRICT to check distances against zlib header
-- Improve WinCE errno handling and comments [Chang]
-- Remove comment about no gzip header processing in FAQ
-- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
-- Add updated make_vms.com [Coghlan], update README
-- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
-  fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
-- Add FAQ entry and comments in deflate.c on uninitialized memory access
-- Add Solaris 9 make options in configure [Gilbert]
-- Allow strerror() usage in gzio.c for STDC
-- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
-- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
-- Use z_off_t for adler32_combine() and crc32_combine() lengths
-- Make adler32() much faster for small len
-- Use OS_CODE in deflate() default gzip header
-
-Changes in 1.2.2.1 (31 October 2004)
-- Allow inflateSetDictionary() call for raw inflate
-- Fix inflate header crc check bug for file names and comments
-- Add deflateSetHeader() and gz_header structure for custom gzip headers
-- Add inflateGetheader() to retrieve gzip headers
-- Add crc32_combine() and adler32_combine() functions
-- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list
-- Use zstreamp consistently in zlib.h (inflate_back functions)
-- Remove GUNZIP condition from definition of inflate_mode in inflate.h
-  and in contrib/inflate86/inffast.S [Truta, Anderson]
-- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson]
-- Update projects/README.projects and projects/visualc6 [Truta]
-- Update win32/DLL_FAQ.txt [Truta]
-- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta]
-- Deprecate Z_ASCII; use Z_TEXT instead [Truta]
-- Use a new algorithm for setting strm->data_type in trees.c [Truta]
-- Do not define an exit() prototype in zutil.c unless DEBUG defined
-- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta]
-- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate()
-- Fix Darwin build version identification [Peterson]
-
-Changes in 1.2.2 (3 October 2004)
-- Update zlib.h comments on gzip in-memory processing
-- Set adler to 1 in inflateReset() to support Java test suite [Walles]
-- Add contrib/dotzlib [Ravn]
-- Update win32/DLL_FAQ.txt [Truta]
-- Update contrib/minizip [Vollant]
-- Move contrib/visual-basic.txt to old/ [Truta]
-- Fix assembler builds in projects/visualc6/ [Truta]
-
-Changes in 1.2.1.2 (9 September 2004)
-- Update INDEX file
-- Fix trees.c to update strm->data_type (no one ever noticed!)
-- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown]
-- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE)
-- Add limited multitasking protection to DYNAMIC_CRC_TABLE
-- Add NO_vsnprintf for VMS in zutil.h [Mozilla]
-- Don't declare strerror() under VMS [Mozilla]
-- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize
-- Update contrib/ada [Anisimkov]
-- Update contrib/minizip [Vollant]
-- Fix configure to not hardcode directories for Darwin [Peterson]
-- Fix gzio.c to not return error on empty files [Brown]
-- Fix indentation; update version in contrib/delphi/ZLib.pas and
-  contrib/pascal/zlibpas.pas [Truta]
-- Update mkasm.bat in contrib/masmx86 [Truta]
-- Update contrib/untgz [Truta]
-- Add projects/README.projects [Truta]
-- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta]
-- Update win32/DLL_FAQ.txt [Truta]
-- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta]
-- Remove an unnecessary assignment to curr in inftrees.c [Truta]
-- Add OS/2 to exe builds in configure [Poltorak]
-- Remove err dummy parameter in zlib.h [Kientzle]
-
-Changes in 1.2.1.1 (9 January 2004)
-- Update email address in README
-- Several FAQ updates
-- Fix a big fat bug in inftrees.c that prevented decoding valid
-  dynamic blocks with only literals and no distance codes --
-  Thanks to "Hot Emu" for the bug report and sample file
-- Add a note to puff.c on no distance codes case.
-
-Changes in 1.2.1 (17 November 2003)
-- Remove a tab in contrib/gzappend/gzappend.c
-- Update some interfaces in contrib for new zlib functions
-- Update zlib version number in some contrib entries
-- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta]
-- Support shared libraries on Hurd and KFreeBSD [Brown]
-- Fix error in NO_DIVIDE option of adler32.c
-
-Changes in 1.2.0.8 (4 November 2003)
-- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas
-- Add experimental NO_DIVIDE #define in adler32.c
-    - Possibly faster on some processors (let me know if it is)
-- Correct Z_BLOCK to not return on first inflate call if no wrap
-- Fix strm->data_type on inflate() return to correctly indicate EOB
-- Add deflatePrime() function for appending in the middle of a byte
-- Add contrib/gzappend for an example of appending to a stream
-- Update win32/DLL_FAQ.txt [Truta]
-- Delete Turbo C comment in README [Truta]
-- Improve some indentation in zconf.h [Truta]
-- Fix infinite loop on bad input in configure script [Church]
-- Fix gzeof() for concatenated gzip files [Johnson]
-- Add example to contrib/visual-basic.txt [Michael B.]
-- Add -p to mkdir's in Makefile.in [vda]
-- Fix configure to properly detect presence or lack of printf functions
-- Add AS400 support [Monnerat]
-- Add a little Cygwin support [Wilson]
-
-Changes in 1.2.0.7 (21 September 2003)
-- Correct some debug formats in contrib/infback9
-- Cast a type in a debug statement in trees.c
-- Change search and replace delimiter in configure from % to # [Beebe]
-- Update contrib/untgz to 0.2 with various fixes [Truta]
-- Add build support for Amiga [Nikl]
-- Remove some directories in old that have been updated to 1.2
-- Add dylib building for Mac OS X in configure and Makefile.in
-- Remove old distribution stuff from Makefile
-- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X
-- Update links in README
-
-Changes in 1.2.0.6 (13 September 2003)
-- Minor FAQ updates
-- Update contrib/minizip to 1.00 [Vollant]
-- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta]
-- Update POSTINC comment for 68060 [Nikl]
-- Add contrib/infback9 with deflate64 decoding (unsupported)
-- For MVS define NO_vsnprintf and undefine FAR [van Burik]
-- Add pragma for fdopen on MVS [van Burik]
-
-Changes in 1.2.0.5 (8 September 2003)
-- Add OF to inflateBackEnd() declaration in zlib.h
-- Remember start when using gzdopen in the middle of a file
-- Use internal off_t counters in gz* functions to properly handle seeks
-- Perform more rigorous check for distance-too-far in inffast.c
-- Add Z_BLOCK flush option to return from inflate at block boundary
-- Set strm->data_type on return from inflate
-    - Indicate bits unused, if at block boundary, and if in last block
-- Replace size_t with ptrdiff_t in crc32.c, and check for correct size
-- Add condition so old NO_DEFLATE define still works for compatibility
-- FAQ update regarding the Windows DLL [Truta]
-- INDEX update: add qnx entry, remove aix entry [Truta]
-- Install zlib.3 into mandir [Wilson]
-- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta]
-- Adapt the zlib interface to the new DLL convention guidelines [Truta]
-- Introduce ZLIB_WINAPI macro to allow the export of functions using
-  the WINAPI calling convention, for Visual Basic [Vollant, Truta]
-- Update msdos and win32 scripts and makefiles [Truta]
-- Export symbols by name, not by ordinal, in win32/zlib.def [Truta]
-- Add contrib/ada [Anisimkov]
-- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta]
-- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant]
-- Add contrib/masm686 [Truta]
-- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm
-  [Truta, Vollant]
-- Update contrib/delphi; rename to contrib/pascal; add example [Truta]
-- Remove contrib/delphi2; add a new contrib/delphi [Truta]
-- Avoid inclusion of the nonstandard <memory.h> in contrib/iostream,
-  and fix some method prototypes [Truta]
-- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip
-  [Truta]
-- Avoid the use of backslash (\) in contrib/minizip [Vollant]
-- Fix file time handling in contrib/untgz; update makefiles [Truta]
-- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines
-  [Vollant]
-- Remove contrib/vstudio/vc15_16 [Vollant]
-- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta]
-- Update README.contrib [Truta]
-- Invert the assignment order of match_head and s->prev[...] in
-  INSERT_STRING [Truta]
-- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings
-  [Truta]
-- Compare function pointers with 0, not with NULL or Z_NULL [Truta]
-- Fix prototype of syncsearch in inflate.c [Truta]
-- Introduce ASMINF macro to be enabled when using an ASM implementation
-  of inflate_fast [Truta]
-- Change NO_DEFLATE to NO_GZCOMPRESS [Truta]
-- Modify test_gzio in example.c to take a single file name as a
-  parameter [Truta]
-- Exit the example.c program if gzopen fails [Truta]
-- Add type casts around strlen in example.c [Truta]
-- Remove casting to sizeof in minigzip.c; give a proper type
-  to the variable compared with SUFFIX_LEN [Truta]
-- Update definitions of STDC and STDC99 in zconf.h [Truta]
-- Synchronize zconf.h with the new Windows DLL interface [Truta]
-- Use SYS16BIT instead of __32BIT__ to distinguish between
-  16- and 32-bit platforms [Truta]
-- Use far memory allocators in small 16-bit memory models for
-  Turbo C [Truta]
-- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in
-  zlibCompileFlags [Truta]
-- Cygwin has vsnprintf [Wilson]
-- In Windows16, OS_CODE is 0, as in MSDOS [Truta]
-- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson]
-
-Changes in 1.2.0.4 (10 August 2003)
-- Minor FAQ updates
-- Be more strict when checking inflateInit2's windowBits parameter
-- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well
-- Add gzip wrapper option to deflateInit2 using windowBits
-- Add updated QNX rule in configure and qnx directory [Bonnefoy]
-- Make inflate distance-too-far checks more rigorous
-- Clean up FAR usage in inflate
-- Add casting to sizeof() in gzio.c and minigzip.c
-
-Changes in 1.2.0.3 (19 July 2003)
-- Fix silly error in gzungetc() implementation [Vollant]
-- Update contrib/minizip and contrib/vstudio [Vollant]
-- Fix printf format in example.c
-- Correct cdecl support in zconf.in.h [Anisimkov]
-- Minor FAQ updates
-
-Changes in 1.2.0.2 (13 July 2003)
-- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons
-- Attempt to avoid warnings in crc32.c for pointer-int conversion
-- Add AIX to configure, remove aix directory [Bakker]
-- Add some casts to minigzip.c
-- Improve checking after insecure sprintf() or vsprintf() calls
-- Remove #elif's from crc32.c
-- Change leave label to inf_leave in inflate.c and infback.c to avoid
-  library conflicts
-- Remove inflate gzip decoding by default--only enable gzip decoding by
-  special request for stricter backward compatibility
-- Add zlibCompileFlags() function to return compilation information
-- More typecasting in deflate.c to avoid warnings
-- Remove leading underscore from _Capital #defines [Truta]
-- Fix configure to link shared library when testing
-- Add some Windows CE target adjustments [Mai]
-- Remove #define ZLIB_DLL in zconf.h [Vollant]
-- Add zlib.3 [Rodgers]
-- Update RFC URL in deflate.c and algorithm.txt [Mai]
-- Add zlib_dll_FAQ.txt to contrib [Truta]
-- Add UL to some constants [Truta]
-- Update minizip and vstudio [Vollant]
-- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h
-- Expand use of NO_DUMMY_DECL to avoid all dummy structures
-- Added iostream3 to contrib [Schwardt]
-- Replace rewind() with fseek() for WinCE [Truta]
-- Improve setting of zlib format compression level flags
-    - Report 0 for huffman and rle strategies and for level == 0 or 1
-    - Report 2 only for level == 6
-- Only deal with 64K limit when necessary at compile time [Truta]
-- Allow TOO_FAR check to be turned off at compile time [Truta]
-- Add gzclearerr() function [Souza]
-- Add gzungetc() function
-
-Changes in 1.2.0.1 (17 March 2003)
-- Add Z_RLE strategy for run-length encoding [Truta]
-    - When Z_RLE requested, restrict matches to distance one
-    - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE
-- Correct FASTEST compilation to allow level == 0
-- Clean up what gets compiled for FASTEST
-- Incorporate changes to zconf.in.h [Vollant]
-    - Refine detection of Turbo C need for dummy returns
-    - Refine ZLIB_DLL compilation
-    - Include additional header file on VMS for off_t typedef
-- Try to use _vsnprintf where it supplants vsprintf [Vollant]
-- Add some casts in inffast.c
-- Enchance comments in zlib.h on what happens if gzprintf() tries to
-  write more than 4095 bytes before compression
-- Remove unused state from inflateBackEnd()
-- Remove exit(0) from minigzip.c, example.c
-- Get rid of all those darn tabs
-- Add "check" target to Makefile.in that does the same thing as "test"
-- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in
-- Update contrib/inflate86 [Anderson]
-- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant]
-- Add msdos and win32 directories with makefiles [Truta]
-- More additions and improvements to the FAQ
-
-Changes in 1.2.0 (9 March 2003)
-- New and improved inflate code
-    - About 20% faster
-    - Does not allocate 32K window unless and until needed
-    - Automatically detects and decompresses gzip streams
-    - Raw inflate no longer needs an extra dummy byte at end
-    - Added inflateBack functions using a callback interface--even faster
-      than inflate, useful for file utilities (gzip, zip)
-    - Added inflateCopy() function to record state for random access on
-      externally generated deflate streams (e.g. in gzip files)
-    - More readable code (I hope)
-- New and improved crc32()
-    - About 50% faster, thanks to suggestions from Rodney Brown
-- Add deflateBound() and compressBound() functions
-- Fix memory leak in deflateInit2()
-- Permit setting dictionary for raw deflate (for parallel deflate)
-- Fix const declaration for gzwrite()
-- Check for some malloc() failures in gzio.c
-- Fix bug in gzopen() on single-byte file 0x1f
-- Fix bug in gzread() on concatenated file with 0x1f at end of buffer
-  and next buffer doesn't start with 0x8b
-- Fix uncompress() to return Z_DATA_ERROR on truncated input
-- Free memory at end of example.c
-- Remove MAX #define in trees.c (conflicted with some libraries)
-- Fix static const's in deflate.c, gzio.c, and zutil.[ch]
-- Declare malloc() and free() in gzio.c if STDC not defined
-- Use malloc() instead of calloc() in zutil.c if int big enough
-- Define STDC for AIX
-- Add aix/ with approach for compiling shared library on AIX
-- Add HP-UX support for shared libraries in configure
-- Add OpenUNIX support for shared libraries in configure
-- Use $cc instead of gcc to build shared library
-- Make prefix directory if needed when installing
-- Correct Macintosh avoidance of typedef Byte in zconf.h
-- Correct Turbo C memory allocation when under Linux
-- Use libz.a instead of -lz in Makefile (assure use of compiled library)
-- Update configure to check for snprintf or vsnprintf functions and their
-  return value, warn during make if using an insecure function
-- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that
-  is lost when library is used--resolution is to build new zconf.h
-- Documentation improvements (in zlib.h):
-    - Document raw deflate and inflate
-    - Update RFCs URL
-    - Point out that zlib and gzip formats are different
-    - Note that Z_BUF_ERROR is not fatal
-    - Document string limit for gzprintf() and possible buffer overflow
-    - Note requirement on avail_out when flushing
-    - Note permitted values of flush parameter of inflate()
-- Add some FAQs (and even answers) to the FAQ
-- Add contrib/inflate86/ for x86 faster inflate
-- Add contrib/blast/ for PKWare Data Compression Library decompression
-- Add contrib/puff/ simple inflate for deflate format description
-
-Changes in 1.1.4 (11 March 2002)
-- ZFREE was repeated on same allocation on some error conditions.
-  This creates a security problem described in
-  http://www.zlib.org/advisory-2002-03-11.txt
-- Returned incorrect error (Z_MEM_ERROR) on some invalid data
-- Avoid accesses before window for invalid distances with inflate window
-  less than 32K.
-- force windowBits > 8 to avoid a bug in the encoder for a window size
-  of 256 bytes. (A complete fix will be available in 1.1.5).
-
-Changes in 1.1.3 (9 July 1998)
-- fix "an inflate input buffer bug that shows up on rare but persistent
-  occasions" (Mark)
-- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
-- fix gzseek(..., SEEK_SET) in write mode
-- fix crc check after a gzeek (Frank Faubert)
-- fix miniunzip when the last entry in a zip file is itself a zip file
-  (J Lillge)
-- add contrib/asm586 and contrib/asm686 (Brian Raiter)
-  See http://www.muppetlabs.com/~breadbox/software/assembly.html
-- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
-- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
-- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
-- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
-- added a FAQ file
-
-- Support gzdopen on Mac with Metrowerks (Jason Linhart)
-- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)
-- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)
-- avoid some warnings with Borland C (Tom Tanner)
-- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)
-- emulate utime() for WIN32 in contrib/untgz  (Gilles Vollant)
-- allow several arguments to configure (Tim Mooney, Frodo Looijaard)
-- use libdir and includedir in Makefile.in (Tim Mooney)
-- support shared libraries on OSF1 V4 (Tim Mooney)
-- remove so_locations in "make clean"  (Tim Mooney)
-- fix maketree.c compilation error (Glenn, Mark)
-- Python interface to zlib now in Python 1.5 (Jeremy Hylton)
-- new Makefile.riscos (Rich Walker)
-- initialize static descriptors in trees.c for embedded targets (Nick Smith)
-- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith)
-- add the OS/2 files in Makefile.in too (Andrew Zabolotny)
-- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)
-- fix maketree.c to allow clean compilation of inffixed.h (Mark)
-- fix parameter check in deflateCopy (Gunther Nikl)
-- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)
-- Many portability patches by Christian Spieler:
-  . zutil.c, zutil.h: added "const" for zmem*
-  . Make_vms.com: fixed some typos
-  . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists
-  . msdos/Makefile.msc: remove "default rtl link library" info from obj files
-  . msdos/Makefile.*: use model-dependent name for the built zlib library
-  . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:
-     new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)
-- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)
-- replace __far with _far for better portability (Christian Spieler, Tom Lane)
-- fix test for errno.h in configure (Tim Newsham)
-
-Changes in 1.1.2 (19 March 98)
-- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)
-  See http://www.winimage.com/zLibDll/unzip.html
-- preinitialize the inflate tables for fixed codes, to make the code
-  completely thread safe (Mark)
-- some simplifications and slight speed-up to the inflate code (Mark)
-- fix gzeof on non-compressed files (Allan Schrum)
-- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs)
-- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn)
-- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny)
-- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori)
-- do not wrap extern "C" around system includes (Tom Lane)
-- mention zlib binding for TCL in README (Andreas Kupries)
-- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert)
-- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson)
-- allow "configure --prefix $HOME" (Tim Mooney)
-- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson)
-- move Makefile.sas to amiga/Makefile.sas
-
-Changes in 1.1.1 (27 Feb 98)
-- fix macros _tr_tally_* in deflate.h for debug mode  (Glenn Randers-Pehrson)
-- remove block truncation heuristic which had very marginal effect for zlib
-  (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
-  compression ratio on some files. This also allows inlining _tr_tally for
-  matches in deflate_slow.
-- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
-
-Changes in 1.1.0 (24 Feb 98)
-- do not return STREAM_END prematurely in inflate (John Bowler)
-- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
-- compile with -DFASTEST to get compression code optimized for speed only
-- in minigzip, try mmap'ing the input file first (Miguel Albrecht)
-- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain
-  on Sun but significant on HP)
-
-- add a pointer to experimental unzip library in README (Gilles Vollant)
-- initialize variable gcc in configure (Chris Herborth)
-
-Changes in 1.0.9 (17 Feb 1998)
-- added gzputs and gzgets functions
-- do not clear eof flag in gzseek (Mark Diekhans)
-- fix gzseek for files in transparent mode (Mark Diekhans)
-- do not assume that vsprintf returns the number of bytes written (Jens Krinke)
-- replace EXPORT with ZEXPORT to avoid conflict with other programs
-- added compress2 in zconf.h, zlib.def, zlib.dnt
-- new asm code from Gilles Vollant in contrib/asm386
-- simplify the inflate code (Mark):
- . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new()
- . ZALLOC the length list in inflate_trees_fixed() instead of using stack
- . ZALLOC the value area for huft_build() instead of using stack
- . Simplify Z_FINISH check in inflate()
-
-- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
-- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
-- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
-  the declaration of FAR (Gilles VOllant)
-- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
-- read_buf buf parameter of type Bytef* instead of charf*
-- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
-- do not redeclare unlink in minigzip.c for WIN32 (John Bowler)
-- fix check for presence of directories in "make install" (Ian Willis)
-
-Changes in 1.0.8 (27 Jan 1998)
-- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant)
-- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
-- added compress2() to allow setting the compression level
-- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
-- use constant arrays for the static trees in trees.c instead of computing
-  them at run time (thanks to Ken Raeburn for this suggestion). To create
-  trees.h, compile with GEN_TREES_H and run "make test".
-- check return code of example in "make test" and display result
-- pass minigzip command line options to file_compress
-- simplifying code of inflateSync to avoid gcc 2.8 bug
-
-- support CC="gcc -Wall" in configure -s (QingLong)
-- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn)
-- fix test for shared library support to avoid compiler warnings
-- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant)
-- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit)
-- do not use fdopen for Metrowerks on Mac (Brad Pettit))
-- add checks for gzputc and gzputc in example.c
-- avoid warnings in gzio.c and deflate.c (Andreas Kleinert)
-- use const for the CRC table (Ken Raeburn)
-- fixed "make uninstall" for shared libraries
-- use Tracev instead of Trace in infblock.c
-- in example.c use correct compressed length for test_sync
-- suppress +vnocompatwarnings in configure for HPUX (not always supported)
-
-Changes in 1.0.7 (20 Jan 1998)
-- fix gzseek which was broken in write mode
-- return error for gzseek to negative absolute position
-- fix configure for Linux (Chun-Chung Chen)
-- increase stack space for MSC (Tim Wegner)
-- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
-- define EXPORTVA for gzprintf (Gilles Vollant)
-- added man page zlib.3 (Rick Rodgers)
-- for contrib/untgz, fix makedir() and improve Makefile
-
-- check gzseek in write mode in example.c
-- allocate extra buffer for seeks only if gzseek is actually called
-- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
-- add inflateSyncPoint in zconf.h
-- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
-
-Changes in 1.0.6 (19 Jan 1998)
-- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
-  gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
-- Fix a deflate bug occurring only with compression level 0 (thanks to
-  Andy Buckler for finding this one).
-- In minigzip, pass transparently also the first byte for .Z files.
-- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
-- check Z_FINISH in inflate (thanks to Marc Schluper)
-- Implement deflateCopy (thanks to Adam Costello)
-- make static libraries by default in configure, add --shared option.
-- move MSDOS or Windows specific files to directory msdos
-- suppress the notion of partial flush to simplify the interface
-  (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
-- suppress history buffer provided by application to simplify the interface
-  (this feature was not implemented anyway in 1.0.4)
-- next_in and avail_in must be initialized before calling inflateInit or
-  inflateInit2
-- add EXPORT in all exported functions (for Windows DLL)
-- added Makefile.nt (thanks to Stephen Williams)
-- added the unsupported "contrib" directory:
-   contrib/asm386/ by Gilles Vollant <info@winimage.com>
-        386 asm code replacing longest_match().
-   contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
-        A C++ I/O streams interface to the zlib gz* functions
-   contrib/iostream2/  by Tyge L�vset <Tyge.Lovset@cmr.no>
-        Another C++ I/O streams interface
-   contrib/untgz/  by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
-        A very simple tar.gz file extractor using zlib
-   contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
-        How to use compress(), uncompress() and the gz* functions from VB.
-- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
-  level) in minigzip (thanks to Tom Lane)
-
-- use const for rommable constants in deflate
-- added test for gzseek and gztell in example.c
-- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
-- add undocumented function zError to convert error code to string
-  (for Tim Smithers)
-- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
-- Use default memcpy for Symantec MSDOS compiler.
-- Add EXPORT keyword for check_func (needed for Windows DLL)
-- add current directory to LD_LIBRARY_PATH for "make test"
-- create also a link for libz.so.1
-- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
-- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
-- added -soname for Linux in configure (Chun-Chung Chen,
-- assign numbers to the exported functions in zlib.def (for Windows DLL)
-- add advice in zlib.h for best usage of deflateSetDictionary
-- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
-- allow compilation with ANSI keywords only enabled for TurboC in large model
-- avoid "versionString"[0] (Borland bug)
-- add NEED_DUMMY_RETURN for Borland
-- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
-- allow compilation with CC
-- defined STDC for OS/2 (David Charlap)
-- limit external names to 8 chars for MVS (Thomas Lund)
-- in minigzip.c, use static buffers only for 16-bit systems
-- fix suffix check for "minigzip -d foo.gz"
-- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
-- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
-- added makelcc.bat for lcc-win32 (Tom St Denis)
-- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
-- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
-- check for unistd.h in configure (for off_t)
-- remove useless check parameter in inflate_blocks_free
-- avoid useless assignment of s->check to itself in inflate_blocks_new
-- do not flush twice in gzclose (thanks to Ken Raeburn)
-- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
-- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
-- work around buggy fclose on pipes for HP/UX
-- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
-- fix configure if CC is already equal to gcc
-
-Changes in 1.0.5 (3 Jan 98)
-- Fix inflate to terminate gracefully when fed corrupted or invalid data
-- Use const for rommable constants in inflate
-- Eliminate memory leaks on error conditions in inflate
-- Removed some vestigial code in inflate
-- Update web address in README
-
-Changes in 1.0.4 (24 Jul 96)
-- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
-  bit, so the decompressor could decompress all the correct data but went
-  on to attempt decompressing extra garbage data. This affected minigzip too.
-- zlibVersion and gzerror return const char* (needed for DLL)
-- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
-- use z_error only for DEBUG (avoid problem with DLLs)
-
-Changes in 1.0.3 (2 Jul 96)
-- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS
-  small and medium models; this makes the library incompatible with previous
-  versions for these models. (No effect in large model or on other systems.)
-- return OK instead of BUF_ERROR if previous deflate call returned with
-  avail_out as zero but there is nothing to do
-- added memcmp for non STDC compilers
-- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly)
-- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO)
-- better check for 16-bit mode MSC (avoids problem with Symantec)
-
-Changes in 1.0.2 (23 May 96)
-- added Windows DLL support
-- added a function zlibVersion (for the DLL support)
-- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)
-- Bytef is define's instead of typedef'd only for Borland C
-- avoid reading uninitialized memory in example.c
-- mention in README that the zlib format is now RFC1950
-- updated Makefile.dj2
-- added algorithm.doc
-
-Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
-- fix array overlay in deflate.c which sometimes caused bad compressed data
-- fix inflate bug with empty stored block
-- fix MSDOS medium model which was broken in 0.99
-- fix deflateParams() which could generated bad compressed data.
-- Bytef is define'd instead of typedef'ed (work around Borland bug)
-- added an INDEX file
-- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
-  Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
-- speed up adler32 for modern machines without auto-increment
-- added -ansi for IRIX in configure
-- static_init_done in trees.c is an int
-- define unlink as delete for VMS
-- fix configure for QNX
-- add configure branch for SCO and HPUX
-- avoid many warnings (unused variables, dead assignments, etc...)
-- no fdopen for BeOS
-- fix the Watcom fix for 32 bit mode (define FAR as empty)
-- removed redefinition of Byte for MKWERKS
-- work around an MWKERKS bug (incorrect merge of all .h files)
-
-Changes in 0.99 (27 Jan 96)
-- allow preset dictionary shared between compressor and decompressor
-- allow compression level 0 (no compression)
-- add deflateParams in zlib.h: allow dynamic change of compression level
-  and compression strategy.
-- test large buffers and deflateParams in example.c
-- add optional "configure" to build zlib as a shared library
-- suppress Makefile.qnx, use configure instead
-- fixed deflate for 64-bit systems (detected on Cray)
-- fixed inflate_blocks for 64-bit systems (detected on Alpha)
-- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)
-- always return Z_BUF_ERROR when deflate() has nothing to do
-- deflateInit and inflateInit are now macros to allow version checking
-- prefix all global functions and types with z_ with -DZ_PREFIX
-- make falloc completely reentrant (inftrees.c)
-- fixed very unlikely race condition in ct_static_init
-- free in reverse order of allocation to help memory manager
-- use zlib-1.0/* instead of zlib/* inside the tar.gz
-- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith
-  -Wconversion -Wstrict-prototypes -Wmissing-prototypes"
-- allow gzread on concatenated .gz files
-- deflateEnd now returns Z_DATA_ERROR if it was premature
-- deflate is finally (?) fully deterministic (no matches beyond end of input)
-- Document Z_SYNC_FLUSH
-- add uninstall in Makefile
-- Check for __cpluplus in zlib.h
-- Better test in ct_align for partial flush
-- avoid harmless warnings for Borland C++
-- initialize hash_head in deflate.c
-- avoid warning on fdopen (gzio.c) for HP cc -Aa
-- include stdlib.h for STDC compilers
-- include errno.h for Cray
-- ignore error if ranlib doesn't exist
-- call ranlib twice for NeXTSTEP
-- use exec_prefix instead of prefix for libz.a
-- renamed ct_* as _tr_* to avoid conflict with applications
-- clear z->msg in inflateInit2 before any error return
-- initialize opaque in example.c, gzio.c, deflate.c and inflate.c
-- fixed typo in zconf.h (_GNUC__ => __GNUC__)
-- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode)
-- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
-- in fcalloc, normalize pointer if size > 65520 bytes
-- don't use special fcalloc for 32 bit Borland C++
-- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
-- use Z_BINARY instead of BINARY
-- document that gzclose after gzdopen will close the file
-- allow "a" as mode in gzopen.
-- fix error checking in gzread
-- allow skipping .gz extra-field on pipes
-- added reference to Perl interface in README
-- put the crc table in FAR data (I dislike more and more the medium model :)
-- added get_crc_table
-- added a dimension to all arrays (Borland C can't count).
-- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
-- guard against multiple inclusion of *.h (for precompiled header on Mac)
-- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
-- don't use unsized arrays to avoid silly warnings by Visual C++:
-     warning C4746: 'inflate_mask' : unsized array treated as  '__far'
-     (what's wrong with far data in far model?).
-- define enum out of inflate_blocks_state to allow compilation with C++
-
-Changes in 0.95 (16 Aug 95)
-- fix MSDOS small and medium model (now easier to adapt to any compiler)
-- inlined send_bits
-- fix the final (:-) bug for deflate with flush (output was correct but
-  not completely flushed in rare occasions).
-- default window size is same for compression and decompression
-  (it's now sufficient to set MAX_WBITS in zconf.h).
-- voidp -> voidpf and voidnp -> voidp (for consistency with other
-  typedefs and because voidnp was not near in large model).
-
-Changes in 0.94 (13 Aug 95)
-- support MSDOS medium model
-- fix deflate with flush (could sometimes generate bad output)
-- fix deflateReset (zlib header was incorrectly suppressed)
-- added support for VMS
-- allow a compression level in gzopen()
-- gzflush now calls fflush
-- For deflate with flush, flush even if no more input is provided.
-- rename libgz.a as libz.a
-- avoid complex expression in infcodes.c triggering Turbo C bug
-- work around a problem with gcc on Alpha (in INSERT_STRING)
-- don't use inline functions (problem with some gcc versions)
-- allow renaming of Byte, uInt, etc... with #define.
-- avoid warning about (unused) pointer before start of array in deflate.c
-- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
-- avoid reserved word 'new' in trees.c
-
-Changes in 0.93 (25 June 95)
-- temporarily disable inline functions
-- make deflate deterministic
-- give enough lookahead for PARTIAL_FLUSH
-- Set binary mode for stdin/stdout in minigzip.c for OS/2
-- don't even use signed char in inflate (not portable enough)
-- fix inflate memory leak for segmented architectures
-
-Changes in 0.92 (3 May 95)
-- don't assume that char is signed (problem on SGI)
-- Clear bit buffer when starting a stored block
-- no memcpy on Pyramid
-- suppressed inftest.c
-- optimized fill_window, put longest_match inline for gcc
-- optimized inflate on stored blocks.
-- untabify all sources to simplify patches
-
-Changes in 0.91 (2 May 95)
-- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
-- Document the memory requirements in zconf.h
-- added "make install"
-- fix sync search logic in inflateSync
-- deflate(Z_FULL_FLUSH) now works even if output buffer too short
-- after inflateSync, don't scare people with just "lo world"
-- added support for DJGPP
-
-Changes in 0.9 (1 May 95)
-- don't assume that zalloc clears the allocated memory (the TurboC bug
-  was Mark's bug after all :)
-- let again gzread copy uncompressed data unchanged (was working in 0.71)
-- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
-- added a test of inflateSync in example.c
-- moved MAX_WBITS to zconf.h because users might want to change that.
-- document explicitly that zalloc(64K) on MSDOS must return a normalized
-  pointer (zero offset)
-- added Makefiles for Microsoft C, Turbo C, Borland C++
-- faster crc32()
-
-Changes in 0.8 (29 April 95)
-- added fast inflate (inffast.c)
-- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
-  is incompatible with previous versions of zlib which returned Z_OK.
-- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
-  (actually that was not a compiler bug, see 0.81 above)
-- gzread no longer reads one extra byte in certain cases
-- In gzio destroy(), don't reference a freed structure
-- avoid many warnings for MSDOS
-- avoid the ERROR symbol which is used by MS Windows
-
-Changes in 0.71 (14 April 95)
-- Fixed more MSDOS compilation problems :( There is still a bug with
-  TurboC large model.
-
-Changes in 0.7 (14 April 95)
-- Added full inflate support.
-- Simplified the crc32() interface. The pre- and post-conditioning
-  (one's complement) is now done inside crc32(). WARNING: this is
-  incompatible with previous versions; see zlib.h for the new usage.
-
-Changes in 0.61 (12 April 95)
-- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
-
-Changes in 0.6 (11 April 95)
-- added minigzip.c
-- added gzdopen to reopen a file descriptor as gzFile
-- added transparent reading of non-gziped files in gzread.
-- fixed bug in gzread (don't read crc as data)
-- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
-- don't allocate big arrays in the stack (for MSDOS)
-- fix some MSDOS compilation problems
-
-Changes in 0.5:
-- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
-  not yet Z_FULL_FLUSH.
-- support decompression but only in a single step (forced Z_FINISH)
-- added opaque object for zalloc and zfree.
-- added deflateReset and inflateReset
-- added a variable zlib_version for consistency checking.
-- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
-  Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
-
-Changes in 0.4:
-- avoid "zip" everywhere, use zlib instead of ziplib.
-- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
-  if compression method == 8.
-- added adler32 and crc32
-- renamed deflateOptions as deflateInit2, call one or the other but not both
-- added the method parameter for deflateInit2.
-- added inflateInit2
-- simplied considerably deflateInit and inflateInit by not supporting
-  user-provided history buffer. This is supported only in deflateInit2
-  and inflateInit2.
-
-Changes in 0.3:
-- prefix all macro names with Z_
-- use Z_FINISH instead of deflateEnd to finish compression.
-- added Z_HUFFMAN_ONLY
-- added gzerror()
--- a/DoConfig/fltk/zlib/FAQ
+++ /dev/null
@@ -1,368 +1,0 @@
-
-                Frequently Asked Questions about zlib
-
-
-If your question is not there, please check the zlib home page
-http://zlib.net/ which may have more recent information.
-The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
-
-
- 1. Is zlib Y2K-compliant?
-
-    Yes. zlib doesn't handle dates.
-
- 2. Where can I get a Windows DLL version?
-
-    The zlib sources can be compiled without change to produce a DLL.  See the
-    file win32/DLL_FAQ.txt in the zlib distribution.  Pointers to the
-    precompiled DLL are found in the zlib web site at http://zlib.net/ .
-
- 3. Where can I get a Visual Basic interface to zlib?
-
-    See
-        * http://marknelson.us/1997/01/01/zlib-engine/
-        * win32/DLL_FAQ.txt in the zlib distribution
-
- 4. compress() returns Z_BUF_ERROR.
-
-    Make sure that before the call of compress(), the length of the compressed
-    buffer is equal to the available size of the compressed buffer and not
-    zero.  For Visual Basic, check that this parameter is passed by reference
-    ("as any"), not by value ("as long").
-
- 5. deflate() or inflate() returns Z_BUF_ERROR.
-
-    Before making the call, make sure that avail_in and avail_out are not zero.
-    When setting the parameter flush equal to Z_FINISH, also make sure that
-    avail_out is big enough to allow processing all pending input.  Note that a
-    Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
-    made with more input or output space.  A Z_BUF_ERROR may in fact be
-    unavoidable depending on how the functions are used, since it is not
-    possible to tell whether or not there is more output pending when
-    strm.avail_out returns with zero.  See http://zlib.net/zlib_how.html for a
-    heavily annotated example.
-
- 6. Where's the zlib documentation (man pages, etc.)?
-
-    It's in zlib.h .  Examples of zlib usage are in the files test/example.c
-    and test/minigzip.c, with more in examples/ .
-
- 7. Why don't you use GNU autoconf or libtool or ...?
-
-    Because we would like to keep zlib as a very small and simple package.
-    zlib is rather portable and doesn't need much configuration.
-
- 8. I found a bug in zlib.
-
-    Most of the time, such problems are due to an incorrect usage of zlib.
-    Please try to reproduce the problem with a small program and send the
-    corresponding source to us at zlib@gzip.org .  Do not send multi-megabyte
-    data files without prior agreement.
-
- 9. Why do I get "undefined reference to gzputc"?
-
-    If "make test" produces something like
-
-       example.o(.text+0x154): undefined reference to `gzputc'
-
-    check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
-    /usr/X11R6/lib. Remove any old versions, then do "make install".
-
-10. I need a Delphi interface to zlib.
-
-    See the contrib/delphi directory in the zlib distribution.
-
-11. Can zlib handle .zip archives?
-
-    Not by itself, no.  See the directory contrib/minizip in the zlib
-    distribution.
-
-12. Can zlib handle .Z files?
-
-    No, sorry.  You have to spawn an uncompress or gunzip subprocess, or adapt
-    the code of uncompress on your own.
-
-13. How can I make a Unix shared library?
-
-    By default a shared (and a static) library is built for Unix.  So:
-
-    make distclean
-    ./configure
-    make
-
-14. How do I install a shared zlib library on Unix?
-
-    After the above, then:
-
-    make install
-
-    However, many flavors of Unix come with a shared zlib already installed.
-    Before going to the trouble of compiling a shared version of zlib and
-    trying to install it, you may want to check if it's already there!  If you
-    can #include <zlib.h>, it's there.  The -lz option will probably link to
-    it.  You can check the version at the top of zlib.h or with the
-    ZLIB_VERSION symbol defined in zlib.h .
-
-15. I have a question about OttoPDF.
-
-    We are not the authors of OttoPDF. The real author is on the OttoPDF web
-    site: Joel Hainley, jhainley@myndkryme.com.
-
-16. Can zlib decode Flate data in an Adobe PDF file?
-
-    Yes. See http://www.pdflib.com/ . To modify PDF forms, see
-    http://sourceforge.net/projects/acroformtool/ .
-
-17. Why am I getting this "register_frame_info not found" error on Solaris?
-
-    After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib
-    generates an error such as:
-
-        ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:
-        symbol __register_frame_info: referenced symbol not found
-
-    The symbol __register_frame_info is not part of zlib, it is generated by
-    the C compiler (cc or gcc).  You must recompile applications using zlib
-    which have this problem.  This problem is specific to Solaris.  See
-    http://www.sunfreeware.com for Solaris versions of zlib and applications
-    using zlib.
-
-18. Why does gzip give an error on a file I make with compress/deflate?
-
-    The compress and deflate functions produce data in the zlib format, which
-    is different and incompatible with the gzip format.  The gz* functions in
-    zlib on the other hand use the gzip format.  Both the zlib and gzip formats
-    use the same compressed data format internally, but have different headers
-    and trailers around the compressed data.
-
-19. Ok, so why are there two different formats?
-
-    The gzip format was designed to retain the directory information about a
-    single file, such as the name and last modification date.  The zlib format
-    on the other hand was designed for in-memory and communication channel
-    applications, and has a much more compact header and trailer and uses a
-    faster integrity check than gzip.
-
-20. Well that's nice, but how do I make a gzip file in memory?
-
-    You can request that deflate write the gzip format instead of the zlib
-    format using deflateInit2().  You can also request that inflate decode the
-    gzip format using inflateInit2().  Read zlib.h for more details.
-
-21. Is zlib thread-safe?
-
-    Yes.  However any library routines that zlib uses and any application-
-    provided memory allocation routines must also be thread-safe.  zlib's gz*
-    functions use stdio library routines, and most of zlib's functions use the
-    library memory allocation routines by default.  zlib's *Init* functions
-    allow for the application to provide custom memory allocation routines.
-
-    Of course, you should only operate on any given zlib or gzip stream from a
-    single thread at a time.
-
-22. Can I use zlib in my commercial application?
-
-    Yes.  Please read the license in zlib.h.
-
-23. Is zlib under the GNU license?
-
-    No.  Please read the license in zlib.h.
-
-24. The license says that altered source versions must be "plainly marked". So
-    what exactly do I need to do to meet that requirement?
-
-    You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h.  In
-    particular, the final version number needs to be changed to "f", and an
-    identification string should be appended to ZLIB_VERSION.  Version numbers
-    x.x.x.f are reserved for modifications to zlib by others than the zlib
-    maintainers.  For example, if the version of the base zlib you are altering
-    is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
-    ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3".  You can also
-    update the version strings in deflate.c and inftrees.c.
-
-    For altered source distributions, you should also note the origin and
-    nature of the changes in zlib.h, as well as in ChangeLog and README, along
-    with the dates of the alterations.  The origin should include at least your
-    name (or your company's name), and an email address to contact for help or
-    issues with the library.
-
-    Note that distributing a compiled zlib library along with zlib.h and
-    zconf.h is also a source distribution, and so you should change
-    ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
-    in zlib.h as you would for a full source distribution.
-
-25. Will zlib work on a big-endian or little-endian architecture, and can I
-    exchange compressed data between them?
-
-    Yes and yes.
-
-26. Will zlib work on a 64-bit machine?
-
-    Yes.  It has been tested on 64-bit machines, and has no dependence on any
-    data types being limited to 32-bits in length.  If you have any
-    difficulties, please provide a complete problem report to zlib@gzip.org
-
-27. Will zlib decompress data from the PKWare Data Compression Library?
-
-    No.  The PKWare DCL uses a completely different compressed data format than
-    does PKZIP and zlib.  However, you can look in zlib's contrib/blast
-    directory for a possible solution to your problem.
-
-28. Can I access data randomly in a compressed stream?
-
-    No, not without some preparation.  If when compressing you periodically use
-    Z_FULL_FLUSH, carefully write all the pending data at those points, and
-    keep an index of those locations, then you can start decompression at those
-    points.  You have to be careful to not use Z_FULL_FLUSH too often, since it
-    can significantly degrade compression.  Alternatively, you can scan a
-    deflate stream once to generate an index, and then use that index for
-    random access.  See examples/zran.c .
-
-29. Does zlib work on MVS, OS/390, CICS, etc.?
-
-    It has in the past, but we have not heard of any recent evidence.  There
-    were working ports of zlib 1.1.4 to MVS, but those links no longer work.
-    If you know of recent, successful applications of zlib on these operating
-    systems, please let us know.  Thanks.
-
-30. Is there some simpler, easier to read version of inflate I can look at to
-    understand the deflate format?
-
-    First off, you should read RFC 1951.  Second, yes.  Look in zlib's
-    contrib/puff directory.
-
-31. Does zlib infringe on any patents?
-
-    As far as we know, no.  In fact, that was originally the whole point behind
-    zlib.  Look here for some more information:
-
-    http://www.gzip.org/#faq11
-
-32. Can zlib work with greater than 4 GB of data?
-
-    Yes.  inflate() and deflate() will process any amount of data correctly.
-    Each call of inflate() or deflate() is limited to input and output chunks
-    of the maximum value that can be stored in the compiler's "unsigned int"
-    type, but there is no limit to the number of chunks.  Note however that the
-    strm.total_in and strm_total_out counters may be limited to 4 GB.  These
-    counters are provided as a convenience and are not used internally by
-    inflate() or deflate().  The application can easily set up its own counters
-    updated after each call of inflate() or deflate() to count beyond 4 GB.
-    compress() and uncompress() may be limited to 4 GB, since they operate in a
-    single call.  gzseek() and gztell() may be limited to 4 GB depending on how
-    zlib is compiled.  See the zlibCompileFlags() function in zlib.h.
-
-    The word "may" appears several times above since there is a 4 GB limit only
-    if the compiler's "long" type is 32 bits.  If the compiler's "long" type is
-    64 bits, then the limit is 16 exabytes.
-
-33. Does zlib have any security vulnerabilities?
-
-    The only one that we are aware of is potentially in gzprintf().  If zlib is
-    compiled to use sprintf() or vsprintf(), then there is no protection
-    against a buffer overflow of an 8K string space (or other value as set by
-    gzbuffer()), other than the caller of gzprintf() assuring that the output
-    will not exceed 8K.  On the other hand, if zlib is compiled to use
-    snprintf() or vsnprintf(), which should normally be the case, then there is
-    no vulnerability.  The ./configure script will display warnings if an
-    insecure variation of sprintf() will be used by gzprintf().  Also the
-    zlibCompileFlags() function will return information on what variant of
-    sprintf() is used by gzprintf().
-
-    If you don't have snprintf() or vsnprintf() and would like one, you can
-    find a portable implementation here:
-
-        http://www.ijs.si/software/snprintf/
-
-    Note that you should be using the most recent version of zlib.  Versions
-    1.1.3 and before were subject to a double-free vulnerability, and versions
-    1.2.1 and 1.2.2 were subject to an access exception when decompressing
-    invalid compressed data.
-
-34. Is there a Java version of zlib?
-
-    Probably what you want is to use zlib in Java. zlib is already included
-    as part of the Java SDK in the java.util.zip package. If you really want
-    a version of zlib written in the Java language, look on the zlib home
-    page for links: http://zlib.net/ .
-
-35. I get this or that compiler or source-code scanner warning when I crank it
-    up to maximally-pedantic. Can't you guys write proper code?
-
-    Many years ago, we gave up attempting to avoid warnings on every compiler
-    in the universe.  It just got to be a waste of time, and some compilers
-    were downright silly as well as contradicted each other.  So now, we simply
-    make sure that the code always works.
-
-36. Valgrind (or some similar memory access checker) says that deflate is
-    performing a conditional jump that depends on an uninitialized value.
-    Isn't that a bug?
-
-    No.  That is intentional for performance reasons, and the output of deflate
-    is not affected.  This only started showing up recently since zlib 1.2.x
-    uses malloc() by default for allocations, whereas earlier versions used
-    calloc(), which zeros out the allocated memory.  Even though the code was
-    correct, versions 1.2.4 and later was changed to not stimulate these
-    checkers.
-
-37. Will zlib read the (insert any ancient or arcane format here) compressed
-    data format?
-
-    Probably not. Look in the comp.compression FAQ for pointers to various
-    formats and associated software.
-
-38. How can I encrypt/decrypt zip files with zlib?
-
-    zlib doesn't support encryption.  The original PKZIP encryption is very
-    weak and can be broken with freely available programs.  To get strong
-    encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
-    compression.  For PKZIP compatible "encryption", look at
-    http://www.info-zip.org/
-
-39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
-
-    "gzip" is the gzip format, and "deflate" is the zlib format.  They should
-    probably have called the second one "zlib" instead to avoid confusion with
-    the raw deflate compressed data format.  While the HTTP 1.1 RFC 2616
-    correctly points to the zlib specification in RFC 1950 for the "deflate"
-    transfer encoding, there have been reports of servers and browsers that
-    incorrectly produce or expect raw deflate data per the deflate
-    specification in RFC 1951, most notably Microsoft.  So even though the
-    "deflate" transfer encoding using the zlib format would be the more
-    efficient approach (and in fact exactly what the zlib format was designed
-    for), using the "gzip" transfer encoding is probably more reliable due to
-    an unfortunate choice of name on the part of the HTTP 1.1 authors.
-
-    Bottom line: use the gzip format for HTTP 1.1 encoding.
-
-40. Does zlib support the new "Deflate64" format introduced by PKWare?
-
-    No.  PKWare has apparently decided to keep that format proprietary, since
-    they have not documented it as they have previous compression formats.  In
-    any case, the compression improvements are so modest compared to other more
-    modern approaches, that it's not worth the effort to implement.
-
-41. I'm having a problem with the zip functions in zlib, can you help?
-
-    There are no zip functions in zlib.  You are probably using minizip by
-    Giles Vollant, which is found in the contrib directory of zlib.  It is not
-    part of zlib.  In fact none of the stuff in contrib is part of zlib.  The
-    files in there are not supported by the zlib authors.  You need to contact
-    the authors of the respective contribution for help.
-
-42. The match.asm code in contrib is under the GNU General Public License.
-    Since it's part of zlib, doesn't that mean that all of zlib falls under the
-    GNU GPL?
-
-    No.  The files in contrib are not part of zlib.  They were contributed by
-    other authors and are provided as a convenience to the user within the zlib
-    distribution.  Each item in contrib has its own license.
-
-43. Is zlib subject to export controls?  What is its ECCN?
-
-    zlib is not subject to export controls, and so is classified as EAR99.
-
-44. Can you please sign these lengthy legal documents and fax them back to us
-    so that we can use your software in our product?
-
-    No. Go away. Shoo.
--- a/DoConfig/fltk/zlib/INDEX
+++ /dev/null
@@ -1,68 +1,0 @@
-CMakeLists.txt  cmake build file
-ChangeLog       history of changes
-FAQ             Frequently Asked Questions about zlib
-INDEX           this file
-Makefile        dummy Makefile that tells you to ./configure
-Makefile.in     template for Unix Makefile
-README          guess what
-configure       configure script for Unix
-make_vms.com    makefile for VMS
-test/example.c  zlib usages examples for build testing
-test/minigzip.c minimal gzip-like functionality for build testing
-test/infcover.c inf*.c code coverage for build coverage testing
-treebuild.xml   XML description of source file dependencies
-zconf.h.cmakein zconf.h template for cmake
-zconf.h.in      zconf.h template for configure
-zlib.3          Man page for zlib
-zlib.3.pdf      Man page in PDF format
-zlib.map        Linux symbol information
-zlib.pc.in      Template for pkg-config descriptor
-zlib.pc.cmakein zlib.pc template for cmake
-zlib2ansi       perl script to convert source files for C++ compilation
-
-amiga/          makefiles for Amiga SAS C
-as400/          makefiles for AS/400
-doc/            documentation for formats and algorithms
-msdos/          makefiles for MSDOS
-nintendods/     makefile for Nintendo DS
-old/            makefiles for various architectures and zlib documentation
-                files that have not yet been updated for zlib 1.2.x
-qnx/            makefiles for QNX
-watcom/         makefiles for OpenWatcom
-win32/          makefiles for Windows
-
-                zlib public header files (required for library use):
-zconf.h
-zlib.h
-
-                private source files used to build the zlib library:
-adler32.c
-compress.c
-crc32.c
-crc32.h
-deflate.c
-deflate.h
-gzclose.c
-gzguts.h
-gzlib.c
-gzread.c
-gzwrite.c
-infback.c
-inffast.c
-inffast.h
-inffixed.h
-inflate.c
-inflate.h
-inftrees.c
-inftrees.h
-trees.c
-trees.h
-uncompr.c
-zutil.c
-zutil.h
-
-                source files for sample programs
-See examples/README.examples
-
-                unsupported contributions by third parties
-See contrib/README.contrib
--- a/DoConfig/fltk/zlib/Makefile
+++ /dev/null
@@ -1,102 +1,0 @@
-#
-# "$Id$"
-#
-# GNU ZIP library makefile for the Fast Light Toolkit (FLTK).
-#
-# Copyright 1998-2011 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
-# file is missing or damaged, see the license at:
-#
-#     http://www.fltk.org/COPYING.php
-#
-# Please report all bugs and problems on the following page:
-#
-#     http://www.fltk.org/str.php
-#
-
-include ../makeinclude
-
-
-#
-# Object files...
-#
-
-OBJS	=	adler32.o compress.o crc32.o uncompr.o deflate.o \
-		trees.o zutil.o inflate.o inftrees.o inffast.o \
-		gzclose.o gzlib.o gzread.o gzwrite.o infback.o
-
-LIBZ	=	../lib/libfltk_z$(LIBEXT)
-
-
-#
-# Make all targets...
-#
-
-all:	$(LIBZ)
-
-
-#
-# Clean all targets and object files...
-#
-
-clean:
-	$(RM) $(OBJS)
-	$(RM) $(LIBZ)
-
-
-#
-# Install everything...
-#
-
-install: $(LIBZ)
-	echo "Installing libfltk_z$(LIBEXT) in $(libdir)..."
-	-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-	$(INSTALL_LIB) $(LIBZ) $(DESTDIR)$(libdir)
-	$(RANLIB) $(DESTDIR)$(libdir)/libfltk_z$(LIBEXT)
-	echo "Installing zlib headers in $(includedir)/FL/images..."
-	-$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) zconf.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) zlib.h $(DESTDIR)$(includedir)/FL/images
-	$(INSTALL_DATA) zutil.h $(DESTDIR)$(includedir)/FL/images
-
-
-#
-# Uninstall everything...
-#
-
-uninstall:
-	echo "Uninstalling libfltk_z$(LIBEXT) in $(libdir)..."
-	$(RM) $(libdir)/libfltk_z$(LIBEXT)
-	echo "Uninstalling zlib headers in $(includedir)/FL/images..."
-	$(RM) $(includedir)/FL/images/zconf.h
-	$(RM) $(includedir)/FL/images/zlib.h
-	$(RM) $(includedir)/FL/images/zutil.h
-
-
-#
-# libfltk_z.a
-#
-
-$(LIBZ):	$(OBJS)
-	echo Archiving $@...
-	$(RM) $@
-	$(LIBCOMMAND) $@ $(OBJS)
-	$(RANLIB) $@
-
-#
-# Make dependencies...
-#
-
-depend:	$(OBJS:.o=.c)
-	makedepend -Y -I.. -f makedepend $(OBJS:.o=.c)
-
-include makedepend
-
-$(OBJS):	../makeinclude
-
-
-#
-# End of "$Id$".
-#
--- a/DoConfig/fltk/zlib/README
+++ /dev/null
@@ -1,115 +1,0 @@
-ZLIB DATA COMPRESSION LIBRARY
-
-zlib 1.2.8 is a general purpose data compression library.  All the code is
-thread safe.  The data format used by the zlib library is described by RFCs
-(Request for Comments) 1950 to 1952 in the files
-http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
-rfc1952 (gzip format).
-
-All functions of the compression library are documented in the file zlib.h
-(volunteer to write man pages welcome, contact zlib@gzip.org).  A usage example
-of the library is given in the file test/example.c which also tests that
-the library is working correctly.  Another example is given in the file
-test/minigzip.c.  The compression library itself is composed of all source
-files in the root directory.
-
-To compile all files and run the test program, follow the instructions given at
-the top of Makefile.in.  In short "./configure; make test", and if that goes
-well, "make install" should work for most flavors of Unix.  For Windows, use
-one of the special makefiles in win32/ or contrib/vstudio/ .  For VMS, use
-make_vms.com.
-
-Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
-<info@winimage.com> for the Windows DLL version.  The zlib home page is
-http://zlib.net/ .  Before reporting a problem, please check this site to
-verify that you have the latest version of zlib; otherwise get the latest
-version and check whether the problem still exists or not.
-
-PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
-
-Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan.  1997
-issue of Dr.  Dobb's Journal; a copy of the article is available at
-http://marknelson.us/1997/01/01/zlib-engine/ .
-
-The changes made in version 1.2.8 are documented in the file ChangeLog.
-
-Unsupported third party contributions are provided in directory contrib/ .
-
-zlib is available in Java using the java.util.zip package, documented at
-http://java.sun.com/developer/technicalArticles/Programming/compression/ .
-
-A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
-at CPAN (Comprehensive Perl Archive Network) sites, including
-http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
-
-A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
-available in Python 1.5 and later versions, see
-http://docs.python.org/library/zlib.html .
-
-zlib is built into tcl: http://wiki.tcl.tk/4610 .
-
-An experimental package to read and write files in .zip format, written on top
-of zlib by Gilles Vollant <info@winimage.com>, is available in the
-contrib/minizip directory of zlib.
-
-
-Notes for some targets:
-
-- For Windows DLL versions, please see win32/DLL_FAQ.txt
-
-- For 64-bit Irix, deflate.c must be compiled without any optimization. With
-  -O, one libpng test fails. The test works in 32 bit mode (with the -n32
-  compiler flag). The compiler bug has been reported to SGI.
-
-- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
-  when compiled with cc.
-
-- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
-  necessary to get gzprintf working correctly. This is done by configure.
-
-- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
-  other compilers. Use "make test" to check your compiler.
-
-- gzdopen is not supported on RISCOS or BEOS.
-
-- For PalmOs, see http://palmzlib.sourceforge.net/
-
-
-Acknowledgments:
-
-  The deflate format used by zlib was defined by Phil Katz.  The deflate and
-  zlib specifications were written by L.  Peter Deutsch.  Thanks to all the
-  people who reported problems and suggested various improvements in zlib; they
-  are too numerous to cite here.
-
-Copyright notice:
-
- (C) 1995-2013 Jean-loup Gailly and Mark Adler
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  Jean-loup Gailly        Mark Adler
-  jloup@gzip.org          madler@alumni.caltech.edu
-
-If you use the zlib library in a product, we would appreciate *not* receiving
-lengthy legal documents to sign.  The sources are provided for free but without
-warranty of any kind.  The library has been entirely written by Jean-loup
-Gailly and Mark Adler; it does not include third-party code.
-
-If you redistribute modified sources, we would appreciate that you include in
-the file ChangeLog history information documenting your changes.  Please read
-the FAQ for more information on the distribution of modified source versions.
--- a/DoConfig/fltk/zlib/adler32.c
+++ /dev/null
@@ -1,179 +1,0 @@
-/* adler32.c -- compute the Adler-32 checksum of a data stream
- * Copyright (C) 1995-2011 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zutil.h"
-
-#define local static
-
-local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
-
-#define BASE 65521      /* largest prime smaller than 65536 */
-#define NMAX 5552
-/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
-
-#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
-#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
-#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
-#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
-#define DO16(buf)   DO8(buf,0); DO8(buf,8);
-
-/* use NO_DIVIDE if your processor does not do division in hardware --
-   try it both ways to see which is faster */
-#ifdef NO_DIVIDE
-/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
-   (thank you to John Reiser for pointing this out) */
-#  define CHOP(a) \
-    do { \
-        unsigned long tmp = a >> 16; \
-        a &= 0xffffUL; \
-        a += (tmp << 4) - tmp; \
-    } while (0)
-#  define MOD28(a) \
-    do { \
-        CHOP(a); \
-        if (a >= BASE) a -= BASE; \
-    } while (0)
-#  define MOD(a) \
-    do { \
-        CHOP(a); \
-        MOD28(a); \
-    } while (0)
-#  define MOD63(a) \
-    do { /* this assumes a is not negative */ \
-        z_off64_t tmp = a >> 32; \
-        a &= 0xffffffffL; \
-        a += (tmp << 8) - (tmp << 5) + tmp; \
-        tmp = a >> 16; \
-        a &= 0xffffL; \
-        a += (tmp << 4) - tmp; \
-        tmp = a >> 16; \
-        a &= 0xffffL; \
-        a += (tmp << 4) - tmp; \
-        if (a >= BASE) a -= BASE; \
-    } while (0)
-#else
-#  define MOD(a) a %= BASE
-#  define MOD28(a) a %= BASE
-#  define MOD63(a) a %= BASE
-#endif
-
-/* ========================================================================= */
-uLong ZEXPORT adler32(adler, buf, len)
-    uLong adler;
-    const Bytef *buf;
-    uInt len;
-{
-    unsigned long sum2;
-    unsigned n;
-
-    /* split Adler-32 into component sums */
-    sum2 = (adler >> 16) & 0xffff;
-    adler &= 0xffff;
-
-    /* in case user likes doing a byte at a time, keep it fast */
-    if (len == 1) {
-        adler += buf[0];
-        if (adler >= BASE)
-            adler -= BASE;
-        sum2 += adler;
-        if (sum2 >= BASE)
-            sum2 -= BASE;
-        return adler | (sum2 << 16);
-    }
-
-    /* initial Adler-32 value (deferred check for len == 1 speed) */
-    if (buf == Z_NULL)
-        return 1L;
-
-    /* in case short lengths are provided, keep it somewhat fast */
-    if (len < 16) {
-        while (len--) {
-            adler += *buf++;
-            sum2 += adler;
-        }
-        if (adler >= BASE)
-            adler -= BASE;
-        MOD28(sum2);            /* only added so many BASE's */
-        return adler | (sum2 << 16);
-    }
-
-    /* do length NMAX blocks -- requires just one modulo operation */
-    while (len >= NMAX) {
-        len -= NMAX;
-        n = NMAX / 16;          /* NMAX is divisible by 16 */
-        do {
-            DO16(buf);          /* 16 sums unrolled */
-            buf += 16;
-        } while (--n);
-        MOD(adler);
-        MOD(sum2);
-    }
-
-    /* do remaining bytes (less than NMAX, still just one modulo) */
-    if (len) {                  /* avoid modulos if none remaining */
-        while (len >= 16) {
-            len -= 16;
-            DO16(buf);
-            buf += 16;
-        }
-        while (len--) {
-            adler += *buf++;
-            sum2 += adler;
-        }
-        MOD(adler);
-        MOD(sum2);
-    }
-
-    /* return recombined sums */
-    return adler | (sum2 << 16);
-}
-
-/* ========================================================================= */
-local uLong adler32_combine_(adler1, adler2, len2)
-    uLong adler1;
-    uLong adler2;
-    z_off64_t len2;
-{
-    unsigned long sum1;
-    unsigned long sum2;
-    unsigned rem;
-
-    /* for negative len, return invalid adler32 as a clue for debugging */
-    if (len2 < 0)
-        return 0xffffffffUL;
-
-    /* the derivation of this formula is left as an exercise for the reader */
-    MOD63(len2);                /* assumes len2 >= 0 */
-    rem = (unsigned)len2;
-    sum1 = adler1 & 0xffff;
-    sum2 = rem * sum1;
-    MOD(sum2);
-    sum1 += (adler2 & 0xffff) + BASE - 1;
-    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
-    if (sum1 >= BASE) sum1 -= BASE;
-    if (sum1 >= BASE) sum1 -= BASE;
-    if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
-    if (sum2 >= BASE) sum2 -= BASE;
-    return sum1 | (sum2 << 16);
-}
-
-/* ========================================================================= */
-uLong ZEXPORT adler32_combine(adler1, adler2, len2)
-    uLong adler1;
-    uLong adler2;
-    z_off_t len2;
-{
-    return adler32_combine_(adler1, adler2, len2);
-}
-
-uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
-    uLong adler1;
-    uLong adler2;
-    z_off64_t len2;
-{
-    return adler32_combine_(adler1, adler2, len2);
-}
--- a/DoConfig/fltk/zlib/compress.c
+++ /dev/null
@@ -1,80 +1,0 @@
-/* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-/* ===========================================================================
-     Compresses the source buffer into the destination buffer. The level
-   parameter has the same meaning as in deflateInit.  sourceLen is the byte
-   length of the source buffer. Upon entry, destLen is the total size of the
-   destination buffer, which must be at least 0.1% larger than sourceLen plus
-   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
-
-     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-   Z_STREAM_ERROR if the level parameter is invalid.
-*/
-int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
-    Bytef *dest;
-    uLongf *destLen;
-    const Bytef *source;
-    uLong sourceLen;
-    int level;
-{
-    z_stream stream;
-    int err;
-
-    stream.next_in = (z_const Bytef *)source;
-    stream.avail_in = (uInt)sourceLen;
-#ifdef MAXSEG_64K
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-#endif
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-    stream.zalloc = (alloc_func)0;
-    stream.zfree = (free_func)0;
-    stream.opaque = (voidpf)0;
-
-    err = deflateInit(&stream, level);
-    if (err != Z_OK) return err;
-
-    err = deflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        deflateEnd(&stream);
-        return err == Z_OK ? Z_BUF_ERROR : err;
-    }
-    *destLen = stream.total_out;
-
-    err = deflateEnd(&stream);
-    return err;
-}
-
-/* ===========================================================================
- */
-int ZEXPORT compress (dest, destLen, source, sourceLen)
-    Bytef *dest;
-    uLongf *destLen;
-    const Bytef *source;
-    uLong sourceLen;
-{
-    return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
-}
-
-/* ===========================================================================
-     If the default memLevel or windowBits for deflateInit() is changed, then
-   this function needs to be updated.
- */
-uLong ZEXPORT compressBound (sourceLen)
-    uLong sourceLen;
-{
-    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
-           (sourceLen >> 25) + 13;
-}
--- a/DoConfig/fltk/zlib/crc32.c
+++ /dev/null
@@ -1,425 +1,0 @@
-/* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- *
- * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
- * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
- * tables for updating the shift register in one step with three exclusive-ors
- * instead of four steps with four exclusive-ors.  This results in about a
- * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
- */
-
-/* @(#) $Id$ */
-
-/*
-  Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
-  protection on the static variables used to control the first-use generation
-  of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should
-  first call get_crc_table() to initialize the tables before allowing more than
-  one thread to use crc32().
-
-  DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
- */
-
-#ifdef MAKECRCH
-#  include <stdio.h>
-#  ifndef DYNAMIC_CRC_TABLE
-#    define DYNAMIC_CRC_TABLE
-#  endif /* !DYNAMIC_CRC_TABLE */
-#endif /* MAKECRCH */
-
-#include "zutil.h"      /* for STDC and FAR definitions */
-
-#define local static
-
-/* Definitions for doing the crc four data bytes at a time. */
-#if !defined(NOBYFOUR) && defined(Z_U4)
-#  define BYFOUR
-#endif
-#ifdef BYFOUR
-   local unsigned long crc32_little OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
-   local unsigned long crc32_big OF((unsigned long,
-                        const unsigned char FAR *, unsigned));
-#  define TBLS 8
-#else
-#  define TBLS 1
-#endif /* BYFOUR */
-
-/* Local functions for crc concatenation */
-local unsigned long gf2_matrix_times OF((unsigned long *mat,
-                                         unsigned long vec));
-local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
-local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
-
-
-#ifdef DYNAMIC_CRC_TABLE
-
-local volatile int crc_table_empty = 1;
-local z_crc_t FAR crc_table[TBLS][256];
-local void make_crc_table OF((void));
-#ifdef MAKECRCH
-   local void write_table OF((FILE *, const z_crc_t FAR *));
-#endif /* MAKECRCH */
-/*
-  Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
-  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
-
-  Polynomials over GF(2) are represented in binary, one bit per coefficient,
-  with the lowest powers in the most significant bit.  Then adding polynomials
-  is just exclusive-or, and multiplying a polynomial by x is a right shift by
-  one.  If we call the above polynomial p, and represent a byte as the
-  polynomial q, also with the lowest power in the most significant bit (so the
-  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
-  where a mod b means the remainder after dividing a by b.
-
-  This calculation is done using the shift-register method of multiplying and
-  taking the remainder.  The register is initialized to zero, and for each
-  incoming bit, x^32 is added mod p to the register if the bit is a one (where
-  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
-  x (which is shifting right by one and adding x^32 mod p if the bit shifted
-  out is a one).  We start with the highest power (least significant bit) of
-  q and repeat for all eight bits of q.
-
-  The first table is simply the CRC of all possible eight bit values.  This is
-  all the information needed to generate CRCs on data a byte at a time for all
-  combinations of CRC register values and incoming bytes.  The remaining tables
-  allow for word-at-a-time CRC calculation for both big-endian and little-
-  endian machines, where a word is four bytes.
-*/
-local void make_crc_table()
-{
-    z_crc_t c;
-    int n, k;
-    z_crc_t poly;                       /* polynomial exclusive-or pattern */
-    /* terms of polynomial defining this crc (except x^32): */
-    static volatile int first = 1;      /* flag to limit concurrent making */
-    static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
-
-    /* See if another task is already doing this (not thread-safe, but better
-       than nothing -- significantly reduces duration of vulnerability in
-       case the advice about DYNAMIC_CRC_TABLE is ignored) */
-    if (first) {
-        first = 0;
-
-        /* make exclusive-or pattern from polynomial (0xedb88320UL) */
-        poly = 0;
-        for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
-            poly |= (z_crc_t)1 << (31 - p[n]);
-
-        /* generate a crc for every 8-bit value */
-        for (n = 0; n < 256; n++) {
-            c = (z_crc_t)n;
-            for (k = 0; k < 8; k++)
-                c = c & 1 ? poly ^ (c >> 1) : c >> 1;
-            crc_table[0][n] = c;
-        }
-
-#ifdef BYFOUR
-        /* generate crc for each value followed by one, two, and three zeros,
-           and then the byte reversal of those as well as the first table */
-        for (n = 0; n < 256; n++) {
-            c = crc_table[0][n];
-            crc_table[4][n] = ZSWAP32(c);
-            for (k = 1; k < 4; k++) {
-                c = crc_table[0][c & 0xff] ^ (c >> 8);
-                crc_table[k][n] = c;
-                crc_table[k + 4][n] = ZSWAP32(c);
-            }
-        }
-#endif /* BYFOUR */
-
-        crc_table_empty = 0;
-    }
-    else {      /* not first */
-        /* wait for the other guy to finish (not efficient, but rare) */
-        while (crc_table_empty)
-            ;
-    }
-
-#ifdef MAKECRCH
-    /* write out CRC tables to crc32.h */
-    {
-        FILE *out;
-
-        out = fopen("crc32.h", "w");
-        if (out == NULL) return;
-        fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
-        fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
-        fprintf(out, "local const z_crc_t FAR ");
-        fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
-        write_table(out, crc_table[0]);
-#  ifdef BYFOUR
-        fprintf(out, "#ifdef BYFOUR\n");
-        for (k = 1; k < 8; k++) {
-            fprintf(out, "  },\n  {\n");
-            write_table(out, crc_table[k]);
-        }
-        fprintf(out, "#endif\n");
-#  endif /* BYFOUR */
-        fprintf(out, "  }\n};\n");
-        fclose(out);
-    }
-#endif /* MAKECRCH */
-}
-
-#ifdef MAKECRCH
-local void write_table(out, table)
-    FILE *out;
-    const z_crc_t FAR *table;
-{
-    int n;
-
-    for (n = 0; n < 256; n++)
-        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ",
-                (unsigned long)(table[n]),
-                n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
-}
-#endif /* MAKECRCH */
-
-#else /* !DYNAMIC_CRC_TABLE */
-/* ========================================================================
- * Tables of CRC-32s of all single-byte values, made by make_crc_table().
- */
-#include "crc32.h"
-#endif /* DYNAMIC_CRC_TABLE */
-
-/* =========================================================================
- * This function can be used by asm versions of crc32()
- */
-const z_crc_t FAR * ZEXPORT get_crc_table()
-{
-#ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
-#endif /* DYNAMIC_CRC_TABLE */
-    return (const z_crc_t FAR *)crc_table;
-}
-
-/* ========================================================================= */
-#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
-#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
-
-/* ========================================================================= */
-unsigned long ZEXPORT crc32(crc, buf, len)
-    unsigned long crc;
-    const unsigned char FAR *buf;
-    uInt len;
-{
-    if (buf == Z_NULL) return 0UL;
-
-#ifdef DYNAMIC_CRC_TABLE
-    if (crc_table_empty)
-        make_crc_table();
-#endif /* DYNAMIC_CRC_TABLE */
-
-#ifdef BYFOUR
-    if (sizeof(void *) == sizeof(ptrdiff_t)) {
-        z_crc_t endian;
-
-        endian = 1;
-        if (*((unsigned char *)(&endian)))
-            return crc32_little(crc, buf, len);
-        else
-            return crc32_big(crc, buf, len);
-    }
-#endif /* BYFOUR */
-    crc = crc ^ 0xffffffffUL;
-    while (len >= 8) {
-        DO8;
-        len -= 8;
-    }
-    if (len) do {
-        DO1;
-    } while (--len);
-    return crc ^ 0xffffffffUL;
-}
-
-#ifdef BYFOUR
-
-/* ========================================================================= */
-#define DOLIT4 c ^= *buf4++; \
-        c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
-            crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
-#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
-
-/* ========================================================================= */
-local unsigned long crc32_little(crc, buf, len)
-    unsigned long crc;
-    const unsigned char FAR *buf;
-    unsigned len;
-{
-    register z_crc_t c;
-    register const z_crc_t FAR *buf4;
-
-    c = (z_crc_t)crc;
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
-        len--;
-    }
-
-    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
-    while (len >= 32) {
-        DOLIT32;
-        len -= 32;
-    }
-    while (len >= 4) {
-        DOLIT4;
-        len -= 4;
-    }
-    buf = (const unsigned char FAR *)buf4;
-
-    if (len) do {
-        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
-    } while (--len);
-    c = ~c;
-    return (unsigned long)c;
-}
-
-/* ========================================================================= */
-#define DOBIG4 c ^= *++buf4; \
-        c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
-            crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
-#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
-
-/* ========================================================================= */
-local unsigned long crc32_big(crc, buf, len)
-    unsigned long crc;
-    const unsigned char FAR *buf;
-    unsigned len;
-{
-    register z_crc_t c;
-    register const z_crc_t FAR *buf4;
-
-    c = ZSWAP32((z_crc_t)crc);
-    c = ~c;
-    while (len && ((ptrdiff_t)buf & 3)) {
-        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
-        len--;
-    }
-
-    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
-    buf4--;
-    while (len >= 32) {
-        DOBIG32;
-        len -= 32;
-    }
-    while (len >= 4) {
-        DOBIG4;
-        len -= 4;
-    }
-    buf4++;
-    buf = (const unsigned char FAR *)buf4;
-
-    if (len) do {
-        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
-    } while (--len);
-    c = ~c;
-    return (unsigned long)(ZSWAP32(c));
-}
-
-#endif /* BYFOUR */
-
-#define GF2_DIM 32      /* dimension of GF(2) vectors (length of CRC) */
-
-/* ========================================================================= */
-local unsigned long gf2_matrix_times(mat, vec)
-    unsigned long *mat;
-    unsigned long vec;
-{
-    unsigned long sum;
-
-    sum = 0;
-    while (vec) {
-        if (vec & 1)
-            sum ^= *mat;
-        vec >>= 1;
-        mat++;
-    }
-    return sum;
-}
-
-/* ========================================================================= */
-local void gf2_matrix_square(square, mat)
-    unsigned long *square;
-    unsigned long *mat;
-{
-    int n;
-
-    for (n = 0; n < GF2_DIM; n++)
-        square[n] = gf2_matrix_times(mat, mat[n]);
-}
-
-/* ========================================================================= */
-local uLong crc32_combine_(crc1, crc2, len2)
-    uLong crc1;
-    uLong crc2;
-    z_off64_t len2;
-{
-    int n;
-    unsigned long row;
-    unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */
-    unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */
-
-    /* degenerate case (also disallow negative lengths) */
-    if (len2 <= 0)
-        return crc1;
-
-    /* put operator for one zero bit in odd */
-    odd[0] = 0xedb88320UL;          /* CRC-32 polynomial */
-    row = 1;
-    for (n = 1; n < GF2_DIM; n++) {
-        odd[n] = row;
-        row <<= 1;
-    }
-
-    /* put operator for two zero bits in even */
-    gf2_matrix_square(even, odd);
-
-    /* put operator for four zero bits in odd */
-    gf2_matrix_square(odd, even);
-
-    /* apply len2 zeros to crc1 (first square will put the operator for one
-       zero byte, eight zero bits, in even) */
-    do {
-        /* apply zeros operator for this bit of len2 */
-        gf2_matrix_square(even, odd);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(even, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-        if (len2 == 0)
-            break;
-
-        /* another iteration of the loop with odd and even swapped */
-        gf2_matrix_square(odd, even);
-        if (len2 & 1)
-            crc1 = gf2_matrix_times(odd, crc1);
-        len2 >>= 1;
-
-        /* if no more bits set, then done */
-    } while (len2 != 0);
-
-    /* return combined crc */
-    crc1 ^= crc2;
-    return crc1;
-}
-
-/* ========================================================================= */
-uLong ZEXPORT crc32_combine(crc1, crc2, len2)
-    uLong crc1;
-    uLong crc2;
-    z_off_t len2;
-{
-    return crc32_combine_(crc1, crc2, len2);
-}
-
-uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
-    uLong crc1;
-    uLong crc2;
-    z_off64_t len2;
-{
-    return crc32_combine_(crc1, crc2, len2);
-}
--- a/DoConfig/fltk/zlib/crc32.h
+++ /dev/null
@@ -1,441 +1,0 @@
-/* crc32.h -- tables for rapid CRC calculation
- * Generated automatically by crc32.c
- */
-
-local const z_crc_t FAR crc_table[TBLS][256] =
-{
-  {
-    0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
-    0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
-    0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
-    0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
-    0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
-    0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
-    0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
-    0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
-    0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
-    0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
-    0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
-    0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
-    0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
-    0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
-    0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
-    0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
-    0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
-    0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
-    0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
-    0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
-    0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
-    0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
-    0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
-    0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
-    0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
-    0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
-    0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
-    0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
-    0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
-    0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
-    0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
-    0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
-    0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
-    0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
-    0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
-    0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
-    0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
-    0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
-    0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
-    0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
-    0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
-    0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
-    0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
-    0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
-    0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
-    0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
-    0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
-    0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
-    0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
-    0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
-    0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
-    0x2d02ef8dUL
-#ifdef BYFOUR
-  },
-  {
-    0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
-    0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
-    0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
-    0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
-    0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
-    0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
-    0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
-    0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
-    0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
-    0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
-    0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
-    0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
-    0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
-    0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
-    0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
-    0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
-    0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
-    0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
-    0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
-    0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
-    0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
-    0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
-    0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
-    0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
-    0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
-    0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
-    0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
-    0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
-    0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
-    0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
-    0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
-    0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
-    0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
-    0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
-    0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
-    0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
-    0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
-    0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
-    0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
-    0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
-    0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
-    0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
-    0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
-    0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
-    0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
-    0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
-    0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
-    0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
-    0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
-    0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
-    0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
-    0x9324fd72UL
-  },
-  {
-    0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
-    0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
-    0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
-    0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
-    0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
-    0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
-    0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
-    0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
-    0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
-    0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
-    0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
-    0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
-    0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
-    0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
-    0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
-    0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
-    0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
-    0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
-    0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
-    0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
-    0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
-    0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
-    0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
-    0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
-    0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
-    0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
-    0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
-    0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
-    0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
-    0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
-    0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
-    0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
-    0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
-    0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
-    0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
-    0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
-    0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
-    0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
-    0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
-    0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
-    0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
-    0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
-    0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
-    0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
-    0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
-    0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
-    0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
-    0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
-    0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
-    0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
-    0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
-    0xbe9834edUL
-  },
-  {
-    0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
-    0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
-    0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
-    0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
-    0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
-    0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
-    0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
-    0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
-    0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
-    0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
-    0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
-    0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
-    0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
-    0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
-    0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
-    0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
-    0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
-    0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
-    0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
-    0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
-    0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
-    0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
-    0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
-    0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
-    0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
-    0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
-    0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
-    0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
-    0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
-    0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
-    0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
-    0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
-    0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
-    0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
-    0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
-    0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
-    0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
-    0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
-    0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
-    0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
-    0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
-    0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
-    0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
-    0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
-    0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
-    0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
-    0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
-    0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
-    0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
-    0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
-    0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
-    0xde0506f1UL
-  },
-  {
-    0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
-    0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
-    0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
-    0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
-    0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
-    0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
-    0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
-    0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
-    0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
-    0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
-    0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
-    0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
-    0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
-    0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
-    0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
-    0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
-    0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
-    0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
-    0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
-    0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
-    0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
-    0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
-    0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
-    0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
-    0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
-    0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
-    0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
-    0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
-    0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
-    0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
-    0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
-    0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
-    0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
-    0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
-    0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
-    0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
-    0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
-    0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
-    0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
-    0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
-    0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
-    0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
-    0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
-    0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
-    0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
-    0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
-    0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
-    0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
-    0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
-    0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
-    0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
-    0x8def022dUL
-  },
-  {
-    0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
-    0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
-    0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
-    0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
-    0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
-    0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
-    0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
-    0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
-    0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
-    0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
-    0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
-    0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
-    0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
-    0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
-    0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
-    0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
-    0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
-    0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
-    0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
-    0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
-    0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
-    0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
-    0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
-    0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
-    0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
-    0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
-    0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
-    0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
-    0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
-    0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
-    0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
-    0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
-    0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
-    0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
-    0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
-    0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
-    0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
-    0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
-    0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
-    0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
-    0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
-    0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
-    0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
-    0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
-    0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
-    0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
-    0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
-    0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
-    0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
-    0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
-    0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
-    0x72fd2493UL
-  },
-  {
-    0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
-    0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
-    0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
-    0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
-    0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
-    0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
-    0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
-    0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
-    0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
-    0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
-    0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
-    0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
-    0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
-    0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
-    0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
-    0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
-    0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
-    0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
-    0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
-    0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
-    0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
-    0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
-    0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
-    0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
-    0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
-    0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
-    0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
-    0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
-    0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
-    0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
-    0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
-    0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
-    0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
-    0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
-    0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
-    0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
-    0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
-    0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
-    0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
-    0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
-    0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
-    0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
-    0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
-    0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
-    0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
-    0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
-    0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
-    0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
-    0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
-    0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
-    0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
-    0xed3498beUL
-  },
-  {
-    0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
-    0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
-    0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
-    0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
-    0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
-    0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
-    0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
-    0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
-    0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
-    0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
-    0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
-    0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
-    0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
-    0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
-    0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
-    0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
-    0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
-    0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
-    0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
-    0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
-    0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
-    0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
-    0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
-    0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
-    0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
-    0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
-    0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
-    0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
-    0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
-    0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
-    0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
-    0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
-    0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
-    0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
-    0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
-    0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
-    0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
-    0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
-    0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
-    0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
-    0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
-    0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
-    0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
-    0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
-    0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
-    0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
-    0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
-    0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
-    0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
-    0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
-    0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
-    0xf10605deUL
-#endif
-  }
-};
--- a/DoConfig/fltk/zlib/deflate.c
+++ /dev/null
@@ -1,1967 +1,0 @@
-/* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- *  ALGORITHM
- *
- *      The "deflation" process depends on being able to identify portions
- *      of the input text which are identical to earlier input (within a
- *      sliding window trailing behind the input currently being processed).
- *
- *      The most straightforward technique turns out to be the fastest for
- *      most input files: try all possible matches and select the longest.
- *      The key feature of this algorithm is that insertions into the string
- *      dictionary are very simple and thus fast, and deletions are avoided
- *      completely. Insertions are performed at each input character, whereas
- *      string matches are performed only when the previous match ends. So it
- *      is preferable to spend more time in matches to allow very fast string
- *      insertions and avoid deletions. The matching algorithm for small
- *      strings is inspired from that of Rabin & Karp. A brute force approach
- *      is used to find longer strings when a small match has been found.
- *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
- *      (by Leonid Broukhis).
- *         A previous version of this file used a more sophisticated algorithm
- *      (by Fiala and Greene) which is guaranteed to run in linear amortized
- *      time, but has a larger average cost, uses more memory and is patented.
- *      However the F&G algorithm may be faster for some highly redundant
- *      files if the parameter max_chain_length (described below) is too large.
- *
- *  ACKNOWLEDGEMENTS
- *
- *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
- *      I found it in 'freeze' written by Leonid Broukhis.
- *      Thanks to many people for bug reports and testing.
- *
- *  REFERENCES
- *
- *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
- *      Available in http://tools.ietf.org/html/rfc1951
- *
- *      A description of the Rabin and Karp algorithm is given in the book
- *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
- *
- *      Fiala,E.R., and Greene,D.H.
- *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
- *
- */
-
-/* @(#) $Id$ */
-
-#include "deflate.h"
-
-const char deflate_copyright[] =
-   " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
-/*
-  If you use the zlib library in a product, an acknowledgment is welcome
-  in the documentation of your product. If for some reason you cannot
-  include such an acknowledgment, I would appreciate that you keep this
-  copyright string in the executable of your product.
- */
-
-/* ===========================================================================
- *  Function prototypes.
- */
-typedef enum {
-    need_more,      /* block not completed, need more input or more output */
-    block_done,     /* block flush performed */
-    finish_started, /* finish started, need only more output at next deflate */
-    finish_done     /* finish done, accept no more input or output */
-} block_state;
-
-typedef block_state (*compress_func) OF((deflate_state *s, int flush));
-/* Compression function. Returns the block state after the call. */
-
-local void fill_window    OF((deflate_state *s));
-local block_state deflate_stored OF((deflate_state *s, int flush));
-local block_state deflate_fast   OF((deflate_state *s, int flush));
-#ifndef FASTEST
-local block_state deflate_slow   OF((deflate_state *s, int flush));
-#endif
-local block_state deflate_rle    OF((deflate_state *s, int flush));
-local block_state deflate_huff   OF((deflate_state *s, int flush));
-local void lm_init        OF((deflate_state *s));
-local void putShortMSB    OF((deflate_state *s, uInt b));
-local void flush_pending  OF((z_streamp strm));
-local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
-#ifdef ASMV
-      void match_init OF((void)); /* asm code initialization */
-      uInt longest_match  OF((deflate_state *s, IPos cur_match));
-#else
-local uInt longest_match  OF((deflate_state *s, IPos cur_match));
-#endif
-
-#ifdef DEBUG
-local  void check_match OF((deflate_state *s, IPos start, IPos match,
-                            int length));
-#endif
-
-/* ===========================================================================
- * Local data
- */
-
-#define NIL 0
-/* Tail of hash chains */
-
-#ifndef TOO_FAR
-#  define TOO_FAR 4096
-#endif
-/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
-
-/* Values for max_lazy_match, good_match and max_chain_length, depending on
- * the desired pack level (0..9). The values given below have been tuned to
- * exclude worst case performance for pathological files. Better values may be
- * found for specific files.
- */
-typedef struct config_s {
-   ush good_length; /* reduce lazy search above this match length */
-   ush max_lazy;    /* do not perform lazy search above this match length */
-   ush nice_length; /* quit search above this match length */
-   ush max_chain;
-   compress_func func;
-} config;
-
-#ifdef FASTEST
-local const config configuration_table[2] = {
-/*      good lazy nice chain */
-/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
-/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
-#else
-local const config configuration_table[10] = {
-/*      good lazy nice chain */
-/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
-/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
-/* 2 */ {4,    5, 16,    8, deflate_fast},
-/* 3 */ {4,    6, 32,   32, deflate_fast},
-
-/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
-/* 5 */ {8,   16, 32,   32, deflate_slow},
-/* 6 */ {8,   16, 128, 128, deflate_slow},
-/* 7 */ {8,   32, 128, 256, deflate_slow},
-/* 8 */ {32, 128, 258, 1024, deflate_slow},
-/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
-#endif
-
-/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
- * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
- * meaning.
- */
-
-#define EQUAL 0
-/* result of memcmp for equal strings */
-
-#ifndef NO_DUMMY_DECL
-struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
-#endif
-
-/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
-#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
-
-/* ===========================================================================
- * Update a hash value with the given input byte
- * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
- *    input characters, so that a running hash key can be computed from the
- *    previous key instead of complete recalculation each time.
- */
-#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
-
-
-/* ===========================================================================
- * Insert string str in the dictionary and set match_head to the previous head
- * of the hash chain (the most recent string with same hash key). Return
- * the previous length of the hash chain.
- * If this file is compiled with -DFASTEST, the compression level is forced
- * to 1, and no hash chains are maintained.
- * IN  assertion: all calls to to INSERT_STRING are made with consecutive
- *    input characters and the first MIN_MATCH bytes of str are valid
- *    (except for the last MIN_MATCH-1 bytes of the input file).
- */
-#ifdef FASTEST
-#define INSERT_STRING(s, str, match_head) \
-   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
-    match_head = s->head[s->ins_h], \
-    s->head[s->ins_h] = (Pos)(str))
-#else
-#define INSERT_STRING(s, str, match_head) \
-   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
-    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
-    s->head[s->ins_h] = (Pos)(str))
-#endif
-
-/* ===========================================================================
- * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
- * prev[] will be initialized on the fly.
- */
-#define CLEAR_HASH(s) \
-    s->head[s->hash_size-1] = NIL; \
-    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
-
-/* ========================================================================= */
-int ZEXPORT deflateInit_(strm, level, version, stream_size)
-    z_streamp strm;
-    int level;
-    const char *version;
-    int stream_size;
-{
-    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
-                         Z_DEFAULT_STRATEGY, version, stream_size);
-    /* To do: ignore strm->next_in if we use it as window */
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
-                  version, stream_size)
-    z_streamp strm;
-    int  level;
-    int  method;
-    int  windowBits;
-    int  memLevel;
-    int  strategy;
-    const char *version;
-    int stream_size;
-{
-    deflate_state *s;
-    int wrap = 1;
-    static const char my_version[] = ZLIB_VERSION;
-
-    ushf *overlay;
-    /* We overlay pending_buf and d_buf+l_buf. This works since the average
-     * output size for (length,distance) codes is <= 24 bits.
-     */
-
-    if (version == Z_NULL || version[0] != my_version[0] ||
-        stream_size != sizeof(z_stream)) {
-        return Z_VERSION_ERROR;
-    }
-    if (strm == Z_NULL) return Z_STREAM_ERROR;
-
-    strm->msg = Z_NULL;
-    if (strm->zalloc == (alloc_func)0) {
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-#endif
-    }
-    if (strm->zfree == (free_func)0)
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-        strm->zfree = zcfree;
-#endif
-
-#ifdef FASTEST
-    if (level != 0) level = 1;
-#else
-    if (level == Z_DEFAULT_COMPRESSION) level = 6;
-#endif
-
-    if (windowBits < 0) { /* suppress zlib wrapper */
-        wrap = 0;
-        windowBits = -windowBits;
-    }
-#ifdef GZIP
-    else if (windowBits > 15) {
-        wrap = 2;       /* write gzip wrapper instead */
-        windowBits -= 16;
-    }
-#endif
-    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
-        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
-        strategy < 0 || strategy > Z_FIXED) {
-        return Z_STREAM_ERROR;
-    }
-    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
-    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
-    if (s == Z_NULL) return Z_MEM_ERROR;
-    strm->state = (struct internal_state FAR *)s;
-    s->strm = strm;
-
-    s->wrap = wrap;
-    s->gzhead = Z_NULL;
-    s->w_bits = windowBits;
-    s->w_size = 1 << s->w_bits;
-    s->w_mask = s->w_size - 1;
-
-    s->hash_bits = memLevel + 7;
-    s->hash_size = 1 << s->hash_bits;
-    s->hash_mask = s->hash_size - 1;
-    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
-
-    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
-    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
-    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
-
-    s->high_water = 0;      /* nothing written to s->window yet */
-
-    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
-
-    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
-    s->pending_buf = (uchf *) overlay;
-    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
-
-    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
-        s->pending_buf == Z_NULL) {
-        s->status = FINISH_STATE;
-        strm->msg = ERR_MSG(Z_MEM_ERROR);
-        deflateEnd (strm);
-        return Z_MEM_ERROR;
-    }
-    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
-    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
-
-    s->level = level;
-    s->strategy = strategy;
-    s->method = (Byte)method;
-
-    return deflateReset(strm);
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
-    z_streamp strm;
-    const Bytef *dictionary;
-    uInt  dictLength;
-{
-    deflate_state *s;
-    uInt str, n;
-    int wrap;
-    unsigned avail;
-    z_const unsigned char *next;
-
-    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
-        return Z_STREAM_ERROR;
-    s = strm->state;
-    wrap = s->wrap;
-    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
-        return Z_STREAM_ERROR;
-
-    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
-    if (wrap == 1)
-        strm->adler = adler32(strm->adler, dictionary, dictLength);
-    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
-
-    /* if dictionary would fill window, just replace the history */
-    if (dictLength >= s->w_size) {
-        if (wrap == 0) {            /* already empty otherwise */
-            CLEAR_HASH(s);
-            s->strstart = 0;
-            s->block_start = 0L;
-            s->insert = 0;
-        }
-        dictionary += dictLength - s->w_size;  /* use the tail */
-        dictLength = s->w_size;
-    }
-
-    /* insert dictionary into window and hash */
-    avail = strm->avail_in;
-    next = strm->next_in;
-    strm->avail_in = dictLength;
-    strm->next_in = (z_const Bytef *)dictionary;
-    fill_window(s);
-    while (s->lookahead >= MIN_MATCH) {
-        str = s->strstart;
-        n = s->lookahead - (MIN_MATCH-1);
-        do {
-            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
-#ifndef FASTEST
-            s->prev[str & s->w_mask] = s->head[s->ins_h];
-#endif
-            s->head[s->ins_h] = (Pos)str;
-            str++;
-        } while (--n);
-        s->strstart = str;
-        s->lookahead = MIN_MATCH-1;
-        fill_window(s);
-    }
-    s->strstart += s->lookahead;
-    s->block_start = (long)s->strstart;
-    s->insert = s->lookahead;
-    s->lookahead = 0;
-    s->match_length = s->prev_length = MIN_MATCH-1;
-    s->match_available = 0;
-    strm->next_in = next;
-    strm->avail_in = avail;
-    s->wrap = wrap;
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateResetKeep (strm)
-    z_streamp strm;
-{
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
-        return Z_STREAM_ERROR;
-    }
-
-    strm->total_in = strm->total_out = 0;
-    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
-    strm->data_type = Z_UNKNOWN;
-
-    s = (deflate_state *)strm->state;
-    s->pending = 0;
-    s->pending_out = s->pending_buf;
-
-    if (s->wrap < 0) {
-        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
-    }
-    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
-    strm->adler =
-#ifdef GZIP
-        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
-#endif
-        adler32(0L, Z_NULL, 0);
-    s->last_flush = Z_NO_FLUSH;
-
-    _tr_init(s);
-
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateReset (strm)
-    z_streamp strm;
-{
-    int ret;
-
-    ret = deflateResetKeep(strm);
-    if (ret == Z_OK)
-        lm_init(strm->state);
-    return ret;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateSetHeader (strm, head)
-    z_streamp strm;
-    gz_headerp head;
-{
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
-    strm->state->gzhead = head;
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflatePending (strm, pending, bits)
-    unsigned *pending;
-    int *bits;
-    z_streamp strm;
-{
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    if (pending != Z_NULL)
-        *pending = strm->state->pending;
-    if (bits != Z_NULL)
-        *bits = strm->state->bi_valid;
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflatePrime (strm, bits, value)
-    z_streamp strm;
-    int bits;
-    int value;
-{
-    deflate_state *s;
-    int put;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    s = strm->state;
-    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
-        return Z_BUF_ERROR;
-    do {
-        put = Buf_size - s->bi_valid;
-        if (put > bits)
-            put = bits;
-        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
-        s->bi_valid += put;
-        _tr_flush_bits(s);
-        value >>= put;
-        bits -= put;
-    } while (bits);
-    return Z_OK;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateParams(strm, level, strategy)
-    z_streamp strm;
-    int level;
-    int strategy;
-{
-    deflate_state *s;
-    compress_func func;
-    int err = Z_OK;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    s = strm->state;
-
-#ifdef FASTEST
-    if (level != 0) level = 1;
-#else
-    if (level == Z_DEFAULT_COMPRESSION) level = 6;
-#endif
-    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
-        return Z_STREAM_ERROR;
-    }
-    func = configuration_table[s->level].func;
-
-    if ((strategy != s->strategy || func != configuration_table[level].func) &&
-        strm->total_in != 0) {
-        /* Flush the last buffer: */
-        err = deflate(strm, Z_BLOCK);
-        if (err == Z_BUF_ERROR && s->pending == 0)
-            err = Z_OK;
-    }
-    if (s->level != level) {
-        s->level = level;
-        s->max_lazy_match   = configuration_table[level].max_lazy;
-        s->good_match       = configuration_table[level].good_length;
-        s->nice_match       = configuration_table[level].nice_length;
-        s->max_chain_length = configuration_table[level].max_chain;
-    }
-    s->strategy = strategy;
-    return err;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
-    z_streamp strm;
-    int good_length;
-    int max_lazy;
-    int nice_length;
-    int max_chain;
-{
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    s = strm->state;
-    s->good_match = good_length;
-    s->max_lazy_match = max_lazy;
-    s->nice_match = nice_length;
-    s->max_chain_length = max_chain;
-    return Z_OK;
-}
-
-/* =========================================================================
- * For the default windowBits of 15 and memLevel of 8, this function returns
- * a close to exact, as well as small, upper bound on the compressed size.
- * They are coded as constants here for a reason--if the #define's are
- * changed, then this function needs to be changed as well.  The return
- * value for 15 and 8 only works for those exact settings.
- *
- * For any setting other than those defaults for windowBits and memLevel,
- * the value returned is a conservative worst case for the maximum expansion
- * resulting from using fixed blocks instead of stored blocks, which deflate
- * can emit on compressed data for some combinations of the parameters.
- *
- * This function could be more sophisticated to provide closer upper bounds for
- * every combination of windowBits and memLevel.  But even the conservative
- * upper bound of about 14% expansion does not seem onerous for output buffer
- * allocation.
- */
-uLong ZEXPORT deflateBound(strm, sourceLen)
-    z_streamp strm;
-    uLong sourceLen;
-{
-    deflate_state *s;
-    uLong complen, wraplen;
-    Bytef *str;
-
-    /* conservative upper bound for compressed data */
-    complen = sourceLen +
-              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
-
-    /* if can't get parameters, return conservative bound plus zlib wrapper */
-    if (strm == Z_NULL || strm->state == Z_NULL)
-        return complen + 6;
-
-    /* compute wrapper length */
-    s = strm->state;
-    switch (s->wrap) {
-    case 0:                                 /* raw deflate */
-        wraplen = 0;
-        break;
-    case 1:                                 /* zlib wrapper */
-        wraplen = 6 + (s->strstart ? 4 : 0);
-        break;
-    case 2:                                 /* gzip wrapper */
-        wraplen = 18;
-        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
-            if (s->gzhead->extra != Z_NULL)
-                wraplen += 2 + s->gzhead->extra_len;
-            str = s->gzhead->name;
-            if (str != Z_NULL)
-                do {
-                    wraplen++;
-                } while (*str++);
-            str = s->gzhead->comment;
-            if (str != Z_NULL)
-                do {
-                    wraplen++;
-                } while (*str++);
-            if (s->gzhead->hcrc)
-                wraplen += 2;
-        }
-        break;
-    default:                                /* for compiler happiness */
-        wraplen = 6;
-    }
-
-    /* if not default parameters, return conservative bound */
-    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
-        return complen + wraplen;
-
-    /* default settings: return tight bound for that case */
-    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
-           (sourceLen >> 25) + 13 - 6 + wraplen;
-}
-
-/* =========================================================================
- * Put a short in the pending buffer. The 16-bit value is put in MSB order.
- * IN assertion: the stream state is correct and there is enough room in
- * pending_buf.
- */
-local void putShortMSB (s, b)
-    deflate_state *s;
-    uInt b;
-{
-    put_byte(s, (Byte)(b >> 8));
-    put_byte(s, (Byte)(b & 0xff));
-}
-
-/* =========================================================================
- * Flush as much pending output as possible. All deflate() output goes
- * through this function so some applications may wish to modify it
- * to avoid allocating a large strm->next_out buffer and copying into it.
- * (See also read_buf()).
- */
-local void flush_pending(strm)
-    z_streamp strm;
-{
-    unsigned len;
-    deflate_state *s = strm->state;
-
-    _tr_flush_bits(s);
-    len = s->pending;
-    if (len > strm->avail_out) len = strm->avail_out;
-    if (len == 0) return;
-
-    zmemcpy(strm->next_out, s->pending_out, len);
-    strm->next_out  += len;
-    s->pending_out  += len;
-    strm->total_out += len;
-    strm->avail_out  -= len;
-    s->pending -= len;
-    if (s->pending == 0) {
-        s->pending_out = s->pending_buf;
-    }
-}
-
-/* ========================================================================= */
-int ZEXPORT deflate (strm, flush)
-    z_streamp strm;
-    int flush;
-{
-    int old_flush; /* value of flush param for previous deflate call */
-    deflate_state *s;
-
-    if (strm == Z_NULL || strm->state == Z_NULL ||
-        flush > Z_BLOCK || flush < 0) {
-        return Z_STREAM_ERROR;
-    }
-    s = strm->state;
-
-    if (strm->next_out == Z_NULL ||
-        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
-        (s->status == FINISH_STATE && flush != Z_FINISH)) {
-        ERR_RETURN(strm, Z_STREAM_ERROR);
-    }
-    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
-
-    s->strm = strm; /* just in case */
-    old_flush = s->last_flush;
-    s->last_flush = flush;
-
-    /* Write the header */
-    if (s->status == INIT_STATE) {
-#ifdef GZIP
-        if (s->wrap == 2) {
-            strm->adler = crc32(0L, Z_NULL, 0);
-            put_byte(s, 31);
-            put_byte(s, 139);
-            put_byte(s, 8);
-            if (s->gzhead == Z_NULL) {
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, 0);
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, OS_CODE);
-                s->status = BUSY_STATE;
-            }
-            else {
-                put_byte(s, (s->gzhead->text ? 1 : 0) +
-                            (s->gzhead->hcrc ? 2 : 0) +
-                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
-                            (s->gzhead->name == Z_NULL ? 0 : 8) +
-                            (s->gzhead->comment == Z_NULL ? 0 : 16)
-                        );
-                put_byte(s, (Byte)(s->gzhead->time & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
-                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
-                put_byte(s, s->level == 9 ? 2 :
-                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
-                             4 : 0));
-                put_byte(s, s->gzhead->os & 0xff);
-                if (s->gzhead->extra != Z_NULL) {
-                    put_byte(s, s->gzhead->extra_len & 0xff);
-                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
-                }
-                if (s->gzhead->hcrc)
-                    strm->adler = crc32(strm->adler, s->pending_buf,
-                                        s->pending);
-                s->gzindex = 0;
-                s->status = EXTRA_STATE;
-            }
-        }
-        else
-#endif
-        {
-            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
-            uInt level_flags;
-
-            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
-                level_flags = 0;
-            else if (s->level < 6)
-                level_flags = 1;
-            else if (s->level == 6)
-                level_flags = 2;
-            else
-                level_flags = 3;
-            header |= (level_flags << 6);
-            if (s->strstart != 0) header |= PRESET_DICT;
-            header += 31 - (header % 31);
-
-            s->status = BUSY_STATE;
-            putShortMSB(s, header);
-
-            /* Save the adler32 of the preset dictionary: */
-            if (s->strstart != 0) {
-                putShortMSB(s, (uInt)(strm->adler >> 16));
-                putShortMSB(s, (uInt)(strm->adler & 0xffff));
-            }
-            strm->adler = adler32(0L, Z_NULL, 0);
-        }
-    }
-#ifdef GZIP
-    if (s->status == EXTRA_STATE) {
-        if (s->gzhead->extra != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-
-            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size)
-                        break;
-                }
-                put_byte(s, s->gzhead->extra[s->gzindex]);
-                s->gzindex++;
-            }
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (s->gzindex == s->gzhead->extra_len) {
-                s->gzindex = 0;
-                s->status = NAME_STATE;
-            }
-        }
-        else
-            s->status = NAME_STATE;
-    }
-    if (s->status == NAME_STATE) {
-        if (s->gzhead->name != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->name[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0) {
-                s->gzindex = 0;
-                s->status = COMMENT_STATE;
-            }
-        }
-        else
-            s->status = COMMENT_STATE;
-    }
-    if (s->status == COMMENT_STATE) {
-        if (s->gzhead->comment != Z_NULL) {
-            uInt beg = s->pending;  /* start of bytes to update crc */
-            int val;
-
-            do {
-                if (s->pending == s->pending_buf_size) {
-                    if (s->gzhead->hcrc && s->pending > beg)
-                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                            s->pending - beg);
-                    flush_pending(strm);
-                    beg = s->pending;
-                    if (s->pending == s->pending_buf_size) {
-                        val = 1;
-                        break;
-                    }
-                }
-                val = s->gzhead->comment[s->gzindex++];
-                put_byte(s, val);
-            } while (val != 0);
-            if (s->gzhead->hcrc && s->pending > beg)
-                strm->adler = crc32(strm->adler, s->pending_buf + beg,
-                                    s->pending - beg);
-            if (val == 0)
-                s->status = HCRC_STATE;
-        }
-        else
-            s->status = HCRC_STATE;
-    }
-    if (s->status == HCRC_STATE) {
-        if (s->gzhead->hcrc) {
-            if (s->pending + 2 > s->pending_buf_size)
-                flush_pending(strm);
-            if (s->pending + 2 <= s->pending_buf_size) {
-                put_byte(s, (Byte)(strm->adler & 0xff));
-                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
-                strm->adler = crc32(0L, Z_NULL, 0);
-                s->status = BUSY_STATE;
-            }
-        }
-        else
-            s->status = BUSY_STATE;
-    }
-#endif
-
-    /* Flush as much pending output as possible */
-    if (s->pending != 0) {
-        flush_pending(strm);
-        if (strm->avail_out == 0) {
-            /* Since avail_out is 0, deflate will be called again with
-             * more output space, but possibly with both pending and
-             * avail_in equal to zero. There won't be anything to do,
-             * but this is not an error situation so make sure we
-             * return OK instead of BUF_ERROR at next call of deflate:
-             */
-            s->last_flush = -1;
-            return Z_OK;
-        }
-
-    /* Make sure there is something to do and avoid duplicate consecutive
-     * flushes. For repeated and useless calls with Z_FINISH, we keep
-     * returning Z_STREAM_END instead of Z_BUF_ERROR.
-     */
-    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
-               flush != Z_FINISH) {
-        ERR_RETURN(strm, Z_BUF_ERROR);
-    }
-
-    /* User must not provide more input after the first FINISH: */
-    if (s->status == FINISH_STATE && strm->avail_in != 0) {
-        ERR_RETURN(strm, Z_BUF_ERROR);
-    }
-
-    /* Start a new block or continue the current one.
-     */
-    if (strm->avail_in != 0 || s->lookahead != 0 ||
-        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
-        block_state bstate;
-
-        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
-                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
-                        (*(configuration_table[s->level].func))(s, flush));
-
-        if (bstate == finish_started || bstate == finish_done) {
-            s->status = FINISH_STATE;
-        }
-        if (bstate == need_more || bstate == finish_started) {
-            if (strm->avail_out == 0) {
-                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
-            }
-            return Z_OK;
-            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
-             * of deflate should use the same flush parameter to make sure
-             * that the flush is complete. So we don't have to output an
-             * empty block here, this will be done at next call. This also
-             * ensures that for a very small output buffer, we emit at most
-             * one empty block.
-             */
-        }
-        if (bstate == block_done) {
-            if (flush == Z_PARTIAL_FLUSH) {
-                _tr_align(s);
-            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
-                _tr_stored_block(s, (char*)0, 0L, 0);
-                /* For a full flush, this empty block will be recognized
-                 * as a special marker by inflate_sync().
-                 */
-                if (flush == Z_FULL_FLUSH) {
-                    CLEAR_HASH(s);             /* forget history */
-                    if (s->lookahead == 0) {
-                        s->strstart = 0;
-                        s->block_start = 0L;
-                        s->insert = 0;
-                    }
-                }
-            }
-            flush_pending(strm);
-            if (strm->avail_out == 0) {
-              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
-              return Z_OK;
-            }
-        }
-    }
-    Assert(strm->avail_out > 0, "bug2");
-
-    if (flush != Z_FINISH) return Z_OK;
-    if (s->wrap <= 0) return Z_STREAM_END;
-
-    /* Write the trailer */
-#ifdef GZIP
-    if (s->wrap == 2) {
-        put_byte(s, (Byte)(strm->adler & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
-        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
-        put_byte(s, (Byte)(strm->total_in & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
-        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
-    }
-    else
-#endif
-    {
-        putShortMSB(s, (uInt)(strm->adler >> 16));
-        putShortMSB(s, (uInt)(strm->adler & 0xffff));
-    }
-    flush_pending(strm);
-    /* If avail_out is zero, the application will call deflate again
-     * to flush the rest.
-     */
-    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
-    return s->pending != 0 ? Z_OK : Z_STREAM_END;
-}
-
-/* ========================================================================= */
-int ZEXPORT deflateEnd (strm)
-    z_streamp strm;
-{
-    int status;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-
-    status = strm->state->status;
-    if (status != INIT_STATE &&
-        status != EXTRA_STATE &&
-        status != NAME_STATE &&
-        status != COMMENT_STATE &&
-        status != HCRC_STATE &&
-        status != BUSY_STATE &&
-        status != FINISH_STATE) {
-      return Z_STREAM_ERROR;
-    }
-
-    /* Deallocate in reverse order of allocations: */
-    TRY_FREE(strm, strm->state->pending_buf);
-    TRY_FREE(strm, strm->state->head);
-    TRY_FREE(strm, strm->state->prev);
-    TRY_FREE(strm, strm->state->window);
-
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-
-    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
-}
-
-/* =========================================================================
- * Copy the source state to the destination state.
- * To simplify the source, this is not supported for 16-bit MSDOS (which
- * doesn't have enough memory anyway to duplicate compression states).
- */
-int ZEXPORT deflateCopy (dest, source)
-    z_streamp dest;
-    z_streamp source;
-{
-#ifdef MAXSEG_64K
-    return Z_STREAM_ERROR;
-#else
-    deflate_state *ds;
-    deflate_state *ss;
-    ushf *overlay;
-
-
-    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
-        return Z_STREAM_ERROR;
-    }
-
-    ss = source->state;
-
-    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
-
-    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
-    if (ds == Z_NULL) return Z_MEM_ERROR;
-    dest->state = (struct internal_state FAR *) ds;
-    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
-    ds->strm = dest;
-
-    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
-    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
-    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
-    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
-    ds->pending_buf = (uchf *) overlay;
-
-    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
-        ds->pending_buf == Z_NULL) {
-        deflateEnd (dest);
-        return Z_MEM_ERROR;
-    }
-    /* following zmemcpy do not work for 16-bit MSDOS */
-    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
-    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
-    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
-    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
-
-    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
-    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
-    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
-
-    ds->l_desc.dyn_tree = ds->dyn_ltree;
-    ds->d_desc.dyn_tree = ds->dyn_dtree;
-    ds->bl_desc.dyn_tree = ds->bl_tree;
-
-    return Z_OK;
-#endif /* MAXSEG_64K */
-}
-
-/* ===========================================================================
- * Read a new buffer from the current input stream, update the adler32
- * and total number of bytes read.  All deflate() input goes through
- * this function so some applications may wish to modify it to avoid
- * allocating a large strm->next_in buffer and copying from it.
- * (See also flush_pending()).
- */
-local int read_buf(strm, buf, size)
-    z_streamp strm;
-    Bytef *buf;
-    unsigned size;
-{
-    unsigned len = strm->avail_in;
-
-    if (len > size) len = size;
-    if (len == 0) return 0;
-
-    strm->avail_in  -= len;
-
-    zmemcpy(buf, strm->next_in, len);
-    if (strm->state->wrap == 1) {
-        strm->adler = adler32(strm->adler, buf, len);
-    }
-#ifdef GZIP
-    else if (strm->state->wrap == 2) {
-        strm->adler = crc32(strm->adler, buf, len);
-    }
-#endif
-    strm->next_in  += len;
-    strm->total_in += len;
-
-    return (int)len;
-}
-
-/* ===========================================================================
- * Initialize the "longest match" routines for a new zlib stream
- */
-local void lm_init (s)
-    deflate_state *s;
-{
-    s->window_size = (ulg)2L*s->w_size;
-
-    CLEAR_HASH(s);
-
-    /* Set the default configuration parameters:
-     */
-    s->max_lazy_match   = configuration_table[s->level].max_lazy;
-    s->good_match       = configuration_table[s->level].good_length;
-    s->nice_match       = configuration_table[s->level].nice_length;
-    s->max_chain_length = configuration_table[s->level].max_chain;
-
-    s->strstart = 0;
-    s->block_start = 0L;
-    s->lookahead = 0;
-    s->insert = 0;
-    s->match_length = s->prev_length = MIN_MATCH-1;
-    s->match_available = 0;
-    s->ins_h = 0;
-#ifndef FASTEST
-#ifdef ASMV
-    match_init(); /* initialize the asm code */
-#endif
-#endif
-}
-
-#ifndef FASTEST
-/* ===========================================================================
- * Set match_start to the longest match starting at the given string and
- * return its length. Matches shorter or equal to prev_length are discarded,
- * in which case the result is equal to prev_length and match_start is
- * garbage.
- * IN assertions: cur_match is the head of the hash chain for the current
- *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
- * OUT assertion: the match length is not greater than s->lookahead.
- */
-#ifndef ASMV
-/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
- * match.S. The code will be functionally equivalent.
- */
-local uInt longest_match(s, cur_match)
-    deflate_state *s;
-    IPos cur_match;                             /* current match */
-{
-    unsigned chain_length = s->max_chain_length;/* max hash chain length */
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
-    register int len;                           /* length of current match */
-    int best_len = s->prev_length;              /* best match length so far */
-    int nice_match = s->nice_match;             /* stop if match long enough */
-    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-        s->strstart - (IPos)MAX_DIST(s) : NIL;
-    /* Stop when cur_match becomes <= limit. To simplify the code,
-     * we prevent matches with the string of window index 0.
-     */
-    Posf *prev = s->prev;
-    uInt wmask = s->w_mask;
-
-#ifdef UNALIGNED_OK
-    /* Compare two bytes at a time. Note: this is not always beneficial.
-     * Try with and without -DUNALIGNED_OK to check.
-     */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-    register ush scan_start = *(ushf*)scan;
-    register ush scan_end   = *(ushf*)(scan+best_len-1);
-#else
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-    register Byte scan_end1  = scan[best_len-1];
-    register Byte scan_end   = scan[best_len];
-#endif
-
-    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-     * It is easy to get rid of this optimization if necessary.
-     */
-    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
-    /* Do not waste too much time if we already have a good match: */
-    if (s->prev_length >= s->good_match) {
-        chain_length >>= 2;
-    }
-    /* Do not look for matches beyond the end of the input. This is necessary
-     * to make deflate deterministic.
-     */
-    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
-    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
-    do {
-        Assert(cur_match < s->strstart, "no future");
-        match = s->window + cur_match;
-
-        /* Skip to next match if the match length cannot increase
-         * or if the match length is less than 2.  Note that the checks below
-         * for insufficient lookahead only occur occasionally for performance
-         * reasons.  Therefore uninitialized memory will be accessed, and
-         * conditional jumps will be made that depend on those values.
-         * However the length of the match is limited to the lookahead, so
-         * the output of deflate is not affected by the uninitialized values.
-         */
-#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
-        /* This code assumes sizeof(unsigned short) == 2. Do not use
-         * UNALIGNED_OK if your compiler uses a different size.
-         */
-        if (*(ushf*)(match+best_len-1) != scan_end ||
-            *(ushf*)match != scan_start) continue;
-
-        /* It is not necessary to compare scan[2] and match[2] since they are
-         * always equal when the other bytes match, given that the hash keys
-         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
-         * strstart+3, +5, ... up to strstart+257. We check for insufficient
-         * lookahead only every 4th comparison; the 128th check will be made
-         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
-         * necessary to put more guard bytes at the end of the window, or
-         * to check more often for insufficient lookahead.
-         */
-        Assert(scan[2] == match[2], "scan[2]?");
-        scan++, match++;
-        do {
-        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-                 scan < strend);
-        /* The funny "do {}" generates better code on most compilers */
-
-        /* Here, scan <= window+strstart+257 */
-        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-        if (*scan == *match) scan++;
-
-        len = (MAX_MATCH - 1) - (int)(strend-scan);
-        scan = strend - (MAX_MATCH-1);
-
-#else /* UNALIGNED_OK */
-
-        if (match[best_len]   != scan_end  ||
-            match[best_len-1] != scan_end1 ||
-            *match            != *scan     ||
-            *++match          != scan[1])      continue;
-
-        /* The check at best_len-1 can be removed because it will be made
-         * again later. (This heuristic is not always a win.)
-         * It is not necessary to compare scan[2] and match[2] since they
-         * are always equal when the other bytes match, given that
-         * the hash keys are equal and that HASH_BITS >= 8.
-         */
-        scan += 2, match++;
-        Assert(*scan == *match, "match[2]?");
-
-        /* We check for insufficient lookahead only every 8th comparison;
-         * the 256th check will be made at strstart+258.
-         */
-        do {
-        } while (*++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 *++scan == *++match && *++scan == *++match &&
-                 scan < strend);
-
-        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
-        len = MAX_MATCH - (int)(strend - scan);
-        scan = strend - MAX_MATCH;
-
-#endif /* UNALIGNED_OK */
-
-        if (len > best_len) {
-            s->match_start = cur_match;
-            best_len = len;
-            if (len >= nice_match) break;
-#ifdef UNALIGNED_OK
-            scan_end = *(ushf*)(scan+best_len-1);
-#else
-            scan_end1  = scan[best_len-1];
-            scan_end   = scan[best_len];
-#endif
-        }
-    } while ((cur_match = prev[cur_match & wmask]) > limit
-             && --chain_length != 0);
-
-    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
-    return s->lookahead;
-}
-#endif /* ASMV */
-
-#else /* FASTEST */
-
-/* ---------------------------------------------------------------------------
- * Optimized version for FASTEST only
- */
-local uInt longest_match(s, cur_match)
-    deflate_state *s;
-    IPos cur_match;                             /* current match */
-{
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
-    register int len;                           /* length of current match */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-
-    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-     * It is easy to get rid of this optimization if necessary.
-     */
-    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-
-    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-
-    Assert(cur_match < s->strstart, "no future");
-
-    match = s->window + cur_match;
-
-    /* Return failure if the match length is less than 2:
-     */
-    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
-
-    /* The check at best_len-1 can be removed because it will be made
-     * again later. (This heuristic is not always a win.)
-     * It is not necessary to compare scan[2] and match[2] since they
-     * are always equal when the other bytes match, given that
-     * the hash keys are equal and that HASH_BITS >= 8.
-     */
-    scan += 2, match += 2;
-    Assert(*scan == *match, "match[2]?");
-
-    /* We check for insufficient lookahead only every 8th comparison;
-     * the 256th check will be made at strstart+258.
-     */
-    do {
-    } while (*++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             *++scan == *++match && *++scan == *++match &&
-             scan < strend);
-
-    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-
-    len = MAX_MATCH - (int)(strend - scan);
-
-    if (len < MIN_MATCH) return MIN_MATCH - 1;
-
-    s->match_start = cur_match;
-    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
-}
-
-#endif /* FASTEST */
-
-#ifdef DEBUG
-/* ===========================================================================
- * Check that the match at match_start is indeed a match.
- */
-local void check_match(s, start, match, length)
-    deflate_state *s;
-    IPos start, match;
-    int length;
-{
-    /* check that the match is indeed a match */
-    if (zmemcmp(s->window + match,
-                s->window + start, length) != EQUAL) {
-        fprintf(stderr, " start %u, match %u, length %d\n",
-                start, match, length);
-        do {
-            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
-        } while (--length != 0);
-        z_error("invalid match");
-    }
-    if (z_verbose > 1) {
-        fprintf(stderr,"\\[%d,%d]", start-match, length);
-        do { putc(s->window[start++], stderr); } while (--length != 0);
-    }
-}
-#else
-#  define check_match(s, start, match, length)
-#endif /* DEBUG */
-
-/* ===========================================================================
- * Fill the window when the lookahead becomes insufficient.
- * Updates strstart and lookahead.
- *
- * IN assertion: lookahead < MIN_LOOKAHEAD
- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
- *    At least one byte has been read, or avail_in == 0; reads are
- *    performed for at least two bytes (required for the zip translate_eol
- *    option -- not supported here).
- */
-local void fill_window(s)
-    deflate_state *s;
-{
-    register unsigned n, m;
-    register Posf *p;
-    unsigned more;    /* Amount of free space at the end of the window. */
-    uInt wsize = s->w_size;
-
-    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
-
-    do {
-        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
-
-        /* Deal with !@#$% 64K limit: */
-        if (sizeof(int) <= 2) {
-            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
-                more = wsize;
-
-            } else if (more == (unsigned)(-1)) {
-                /* Very unlikely, but possible on 16 bit machine if
-                 * strstart == 0 && lookahead == 1 (input done a byte at time)
-                 */
-                more--;
-            }
-        }
-
-        /* If the window is almost full and there is insufficient lookahead,
-         * move the upper half to the lower one to make room in the upper half.
-         */
-        if (s->strstart >= wsize+MAX_DIST(s)) {
-
-            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
-            s->match_start -= wsize;
-            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
-            s->block_start -= (long) wsize;
-
-            /* Slide the hash table (could be avoided with 32 bit values
-               at the expense of memory usage). We slide even when level == 0
-               to keep the hash table consistent if we switch back to level > 0
-               later. (Using level 0 permanently is not an optimal usage of
-               zlib, so we don't care about this pathological case.)
-             */
-            n = s->hash_size;
-            p = &s->head[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-            } while (--n);
-
-            n = wsize;
-#ifndef FASTEST
-            p = &s->prev[n];
-            do {
-                m = *--p;
-                *p = (Pos)(m >= wsize ? m-wsize : NIL);
-                /* If n is not on any hash chain, prev[n] is garbage but
-                 * its value will never be used.
-                 */
-            } while (--n);
-#endif
-            more += wsize;
-        }
-        if (s->strm->avail_in == 0) break;
-
-        /* If there was no sliding:
-         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
-         *    more == window_size - lookahead - strstart
-         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
-         * => more >= window_size - 2*WSIZE + 2
-         * In the BIG_MEM or MMAP case (not yet supported),
-         *   window_size == input_size + MIN_LOOKAHEAD  &&
-         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
-         * Otherwise, window_size == 2*WSIZE so more >= 2.
-         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
-         */
-        Assert(more >= 2, "more < 2");
-
-        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
-        s->lookahead += n;
-
-        /* Initialize the hash value now that we have some input: */
-        if (s->lookahead + s->insert >= MIN_MATCH) {
-            uInt str = s->strstart - s->insert;
-            s->ins_h = s->window[str];
-            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
-#if MIN_MATCH != 3
-            Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
-            while (s->insert) {
-                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
-#ifndef FASTEST
-                s->prev[str & s->w_mask] = s->head[s->ins_h];
-#endif
-                s->head[s->ins_h] = (Pos)str;
-                str++;
-                s->insert--;
-                if (s->lookahead + s->insert < MIN_MATCH)
-                    break;
-            }
-        }
-        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
-         * but this is not important since only literal bytes will be emitted.
-         */
-
-    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
-
-    /* If the WIN_INIT bytes after the end of the current data have never been
-     * written, then zero those bytes in order to avoid memory check reports of
-     * the use of uninitialized (or uninitialised as Julian writes) bytes by
-     * the longest match routines.  Update the high water mark for the next
-     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
-     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
-     */
-    if (s->high_water < s->window_size) {
-        ulg curr = s->strstart + (ulg)(s->lookahead);
-        ulg init;
-
-        if (s->high_water < curr) {
-            /* Previous high water mark below current data -- zero WIN_INIT
-             * bytes or up to end of window, whichever is less.
-             */
-            init = s->window_size - curr;
-            if (init > WIN_INIT)
-                init = WIN_INIT;
-            zmemzero(s->window + curr, (unsigned)init);
-            s->high_water = curr + init;
-        }
-        else if (s->high_water < (ulg)curr + WIN_INIT) {
-            /* High water mark at or above current data, but below current data
-             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
-             * to end of window, whichever is less.
-             */
-            init = (ulg)curr + WIN_INIT - s->high_water;
-            if (init > s->window_size - s->high_water)
-                init = s->window_size - s->high_water;
-            zmemzero(s->window + s->high_water, (unsigned)init);
-            s->high_water += init;
-        }
-    }
-
-    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
-           "not enough room for search");
-}
-
-/* ===========================================================================
- * Flush the current block, with given end-of-file flag.
- * IN assertion: strstart is set to the end of the current match.
- */
-#define FLUSH_BLOCK_ONLY(s, last) { \
-   _tr_flush_block(s, (s->block_start >= 0L ? \
-                   (charf *)&s->window[(unsigned)s->block_start] : \
-                   (charf *)Z_NULL), \
-                (ulg)((long)s->strstart - s->block_start), \
-                (last)); \
-   s->block_start = s->strstart; \
-   flush_pending(s->strm); \
-   Tracev((stderr,"[FLUSH]")); \
-}
-
-/* Same but force premature exit if necessary. */
-#define FLUSH_BLOCK(s, last) { \
-   FLUSH_BLOCK_ONLY(s, last); \
-   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
-}
-
-/* ===========================================================================
- * Copy without compression as much as possible from the input stream, return
- * the current block state.
- * This function does not insert new strings in the dictionary since
- * uncompressible data is probably not useful. This function is used
- * only for the level=0 compression option.
- * NOTE: this function should be optimized to avoid extra copying from
- * window to pending_buf.
- */
-local block_state deflate_stored(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
-     * to pending_buf_size, and each stored block has a 5 byte header:
-     */
-    ulg max_block_size = 0xffff;
-    ulg max_start;
-
-    if (max_block_size > s->pending_buf_size - 5) {
-        max_block_size = s->pending_buf_size - 5;
-    }
-
-    /* Copy as much as possible from input to output: */
-    for (;;) {
-        /* Fill the window as much as possible: */
-        if (s->lookahead <= 1) {
-
-            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
-                   s->block_start >= (long)s->w_size, "slide too late");
-
-            fill_window(s);
-            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
-
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-        Assert(s->block_start >= 0L, "block gone");
-
-        s->strstart += s->lookahead;
-        s->lookahead = 0;
-
-        /* Emit a stored block if pending_buf will be full: */
-        max_start = s->block_start + max_block_size;
-        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
-            /* strstart == 0 is possible when wraparound on 16-bit machine */
-            s->lookahead = (uInt)(s->strstart - max_start);
-            s->strstart = (uInt)max_start;
-            FLUSH_BLOCK(s, 0);
-        }
-        /* Flush if we may have to slide, otherwise block_start may become
-         * negative and the data will be gone:
-         */
-        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
-            FLUSH_BLOCK(s, 0);
-        }
-    }
-    s->insert = 0;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
-        return finish_done;
-    }
-    if ((long)s->strstart > s->block_start)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
-}
-
-/* ===========================================================================
- * Compress as much as possible from the input stream, return the current
- * block state.
- * This function does not perform lazy evaluation of matches and inserts
- * new strings in the dictionary only for unmatched strings or for short
- * matches. It is used only for the fast compression options.
- */
-local block_state deflate_fast(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    IPos hash_head;       /* head of the hash chain */
-    int bflush;           /* set if current block must be flushed */
-
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the next match, plus MIN_MATCH bytes to insert the
-         * string following the next match.
-         */
-        if (s->lookahead < MIN_LOOKAHEAD) {
-            fill_window(s);
-            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* Insert the string window[strstart .. strstart+2] in the
-         * dictionary, and set hash_head to the head of the hash chain:
-         */
-        hash_head = NIL;
-        if (s->lookahead >= MIN_MATCH) {
-            INSERT_STRING(s, s->strstart, hash_head);
-        }
-
-        /* Find the longest match, discarding those <= prev_length.
-         * At this point we have always match_length < MIN_MATCH
-         */
-        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
-            /* To simplify the code, we prevent matches with the string
-             * of window index 0 (in particular we have to avoid a match
-             * of the string with itself at the start of the input file).
-             */
-            s->match_length = longest_match (s, hash_head);
-            /* longest_match() sets match_start */
-        }
-        if (s->match_length >= MIN_MATCH) {
-            check_match(s, s->strstart, s->match_start, s->match_length);
-
-            _tr_tally_dist(s, s->strstart - s->match_start,
-                           s->match_length - MIN_MATCH, bflush);
-
-            s->lookahead -= s->match_length;
-
-            /* Insert new strings in the hash table only if the match length
-             * is not too large. This saves time but degrades compression.
-             */
-#ifndef FASTEST
-            if (s->match_length <= s->max_insert_length &&
-                s->lookahead >= MIN_MATCH) {
-                s->match_length--; /* string at strstart already in table */
-                do {
-                    s->strstart++;
-                    INSERT_STRING(s, s->strstart, hash_head);
-                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
-                     * always MIN_MATCH bytes ahead.
-                     */
-                } while (--s->match_length != 0);
-                s->strstart++;
-            } else
-#endif
-            {
-                s->strstart += s->match_length;
-                s->match_length = 0;
-                s->ins_h = s->window[s->strstart];
-                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
-#if MIN_MATCH != 3
-                Call UPDATE_HASH() MIN_MATCH-3 more times
-#endif
-                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
-                 * matter since it will be recomputed at next deflate call.
-                 */
-            }
-        } else {
-            /* No match, output a literal byte */
-            Tracevv((stderr,"%c", s->window[s->strstart]));
-            _tr_tally_lit (s, s->window[s->strstart], bflush);
-            s->lookahead--;
-            s->strstart++;
-        }
-        if (bflush) FLUSH_BLOCK(s, 0);
-    }
-    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
-        return finish_done;
-    }
-    if (s->last_lit)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
-}
-
-#ifndef FASTEST
-/* ===========================================================================
- * Same as above, but achieves better compression. We use a lazy
- * evaluation for matches: a match is finally adopted only if there is
- * no better match at the next window position.
- */
-local block_state deflate_slow(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    IPos hash_head;          /* head of hash chain */
-    int bflush;              /* set if current block must be flushed */
-
-    /* Process the input block. */
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the next match, plus MIN_MATCH bytes to insert the
-         * string following the next match.
-         */
-        if (s->lookahead < MIN_LOOKAHEAD) {
-            fill_window(s);
-            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* Insert the string window[strstart .. strstart+2] in the
-         * dictionary, and set hash_head to the head of the hash chain:
-         */
-        hash_head = NIL;
-        if (s->lookahead >= MIN_MATCH) {
-            INSERT_STRING(s, s->strstart, hash_head);
-        }
-
-        /* Find the longest match, discarding those <= prev_length.
-         */
-        s->prev_length = s->match_length, s->prev_match = s->match_start;
-        s->match_length = MIN_MATCH-1;
-
-        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
-            s->strstart - hash_head <= MAX_DIST(s)) {
-            /* To simplify the code, we prevent matches with the string
-             * of window index 0 (in particular we have to avoid a match
-             * of the string with itself at the start of the input file).
-             */
-            s->match_length = longest_match (s, hash_head);
-            /* longest_match() sets match_start */
-
-            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
-#if TOO_FAR <= 32767
-                || (s->match_length == MIN_MATCH &&
-                    s->strstart - s->match_start > TOO_FAR)
-#endif
-                )) {
-
-                /* If prev_match is also MIN_MATCH, match_start is garbage
-                 * but we will ignore the current match anyway.
-                 */
-                s->match_length = MIN_MATCH-1;
-            }
-        }
-        /* If there was a match at the previous step and the current
-         * match is not better, output the previous match:
-         */
-        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
-            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
-            /* Do not insert strings in hash table beyond this. */
-
-            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
-
-            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
-                           s->prev_length - MIN_MATCH, bflush);
-
-            /* Insert in hash table all strings up to the end of the match.
-             * strstart-1 and strstart are already inserted. If there is not
-             * enough lookahead, the last two strings are not inserted in
-             * the hash table.
-             */
-            s->lookahead -= s->prev_length-1;
-            s->prev_length -= 2;
-            do {
-                if (++s->strstart <= max_insert) {
-                    INSERT_STRING(s, s->strstart, hash_head);
-                }
-            } while (--s->prev_length != 0);
-            s->match_available = 0;
-            s->match_length = MIN_MATCH-1;
-            s->strstart++;
-
-            if (bflush) FLUSH_BLOCK(s, 0);
-
-        } else if (s->match_available) {
-            /* If there was no match at the previous position, output a
-             * single literal. If there was a match but the current match
-             * is longer, truncate the previous match to a single literal.
-             */
-            Tracevv((stderr,"%c", s->window[s->strstart-1]));
-            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
-            if (bflush) {
-                FLUSH_BLOCK_ONLY(s, 0);
-            }
-            s->strstart++;
-            s->lookahead--;
-            if (s->strm->avail_out == 0) return need_more;
-        } else {
-            /* There is no previous match to compare with, wait for
-             * the next step to decide.
-             */
-            s->match_available = 1;
-            s->strstart++;
-            s->lookahead--;
-        }
-    }
-    Assert (flush != Z_NO_FLUSH, "no flush?");
-    if (s->match_available) {
-        Tracevv((stderr,"%c", s->window[s->strstart-1]));
-        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
-        s->match_available = 0;
-    }
-    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
-        return finish_done;
-    }
-    if (s->last_lit)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
-}
-#endif /* FASTEST */
-
-/* ===========================================================================
- * For Z_RLE, simply look for runs of bytes, generate matches only of distance
- * one.  Do not maintain a hash table.  (It will be regenerated if this run of
- * deflate switches away from Z_RLE.)
- */
-local block_state deflate_rle(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    int bflush;             /* set if current block must be flushed */
-    uInt prev;              /* byte at distance one to match */
-    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
-
-    for (;;) {
-        /* Make sure that we always have enough lookahead, except
-         * at the end of the input file. We need MAX_MATCH bytes
-         * for the longest run, plus one for the unrolled loop.
-         */
-        if (s->lookahead <= MAX_MATCH) {
-            fill_window(s);
-            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
-                return need_more;
-            }
-            if (s->lookahead == 0) break; /* flush the current block */
-        }
-
-        /* See how many times the previous byte repeats */
-        s->match_length = 0;
-        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
-            scan = s->window + s->strstart - 1;
-            prev = *scan;
-            if (prev == *++scan && prev == *++scan && prev == *++scan) {
-                strend = s->window + s->strstart + MAX_MATCH;
-                do {
-                } while (prev == *++scan && prev == *++scan &&
-                         prev == *++scan && prev == *++scan &&
-                         prev == *++scan && prev == *++scan &&
-                         prev == *++scan && prev == *++scan &&
-                         scan < strend);
-                s->match_length = MAX_MATCH - (int)(strend - scan);
-                if (s->match_length > s->lookahead)
-                    s->match_length = s->lookahead;
-            }
-            Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
-        }
-
-        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
-        if (s->match_length >= MIN_MATCH) {
-            check_match(s, s->strstart, s->strstart - 1, s->match_length);
-
-            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
-
-            s->lookahead -= s->match_length;
-            s->strstart += s->match_length;
-            s->match_length = 0;
-        } else {
-            /* No match, output a literal byte */
-            Tracevv((stderr,"%c", s->window[s->strstart]));
-            _tr_tally_lit (s, s->window[s->strstart], bflush);
-            s->lookahead--;
-            s->strstart++;
-        }
-        if (bflush) FLUSH_BLOCK(s, 0);
-    }
-    s->insert = 0;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
-        return finish_done;
-    }
-    if (s->last_lit)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
-}
-
-/* ===========================================================================
- * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
- * (It will be regenerated if this run of deflate switches away from Huffman.)
- */
-local block_state deflate_huff(s, flush)
-    deflate_state *s;
-    int flush;
-{
-    int bflush;             /* set if current block must be flushed */
-
-    for (;;) {
-        /* Make sure that we have a literal to write. */
-        if (s->lookahead == 0) {
-            fill_window(s);
-            if (s->lookahead == 0) {
-                if (flush == Z_NO_FLUSH)
-                    return need_more;
-                break;      /* flush the current block */
-            }
-        }
-
-        /* Output a literal byte */
-        s->match_length = 0;
-        Tracevv((stderr,"%c", s->window[s->strstart]));
-        _tr_tally_lit (s, s->window[s->strstart], bflush);
-        s->lookahead--;
-        s->strstart++;
-        if (bflush) FLUSH_BLOCK(s, 0);
-    }
-    s->insert = 0;
-    if (flush == Z_FINISH) {
-        FLUSH_BLOCK(s, 1);
-        return finish_done;
-    }
-    if (s->last_lit)
-        FLUSH_BLOCK(s, 0);
-    return block_done;
-}
--- a/DoConfig/fltk/zlib/deflate.h
+++ /dev/null
@@ -1,346 +1,0 @@
-/* deflate.h -- internal compression state
- * Copyright (C) 1995-2012 Jean-loup Gailly
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id$ */
-
-#ifndef DEFLATE_H
-#define DEFLATE_H
-
-#include "zutil.h"
-
-/* define NO_GZIP when compiling if you want to disable gzip header and
-   trailer creation by deflate().  NO_GZIP would be used to avoid linking in
-   the crc code when it is not needed.  For shared libraries, gzip encoding
-   should be left enabled. */
-#ifndef NO_GZIP
-#  define GZIP
-#endif
-
-/* ===========================================================================
- * Internal compression state.
- */
-
-#define LENGTH_CODES 29
-/* number of length codes, not counting the special END_BLOCK code */
-
-#define LITERALS  256
-/* number of literal bytes 0..255 */
-
-#define L_CODES (LITERALS+1+LENGTH_CODES)
-/* number of Literal or Length codes, including the END_BLOCK code */
-
-#define D_CODES   30
-/* number of distance codes */
-
-#define BL_CODES  19
-/* number of codes used to transfer the bit lengths */
-
-#define HEAP_SIZE (2*L_CODES+1)
-/* maximum heap size */
-
-#define MAX_BITS 15
-/* All codes must not exceed MAX_BITS bits */
-
-#define Buf_size 16
-/* size of bit buffer in bi_buf */
-
-#define INIT_STATE    42
-#define EXTRA_STATE   69
-#define NAME_STATE    73
-#define COMMENT_STATE 91
-#define HCRC_STATE   103
-#define BUSY_STATE   113
-#define FINISH_STATE 666
-/* Stream status */
-
-
-/* Data structure describing a single value and its code string. */
-typedef struct ct_data_s {
-    union {
-        ush  freq;       /* frequency count */
-        ush  code;       /* bit string */
-    } fc;
-    union {
-        ush  dad;        /* father node in Huffman tree */
-        ush  len;        /* length of bit string */
-    } dl;
-} FAR ct_data;
-
-#define Freq fc.freq
-#define Code fc.code
-#define Dad  dl.dad
-#define Len  dl.len
-
-typedef struct static_tree_desc_s  static_tree_desc;
-
-typedef struct tree_desc_s {
-    ct_data *dyn_tree;           /* the dynamic tree */
-    int     max_code;            /* largest code with non zero frequency */
-    static_tree_desc *stat_desc; /* the corresponding static tree */
-} FAR tree_desc;
-
-typedef ush Pos;
-typedef Pos FAR Posf;
-typedef unsigned IPos;
-
-/* A Pos is an index in the character window. We use short instead of int to
- * save space in the various tables. IPos is used only for parameter passing.
- */
-
-typedef struct internal_state {
-    z_streamp strm;      /* pointer back to this zlib stream */
-    int   status;        /* as the name implies */
-    Bytef *pending_buf;  /* output still pending */
-    ulg   pending_buf_size; /* size of pending_buf */
-    Bytef *pending_out;  /* next pending byte to output to the stream */
-    uInt   pending;      /* nb of bytes in the pending buffer */
-    int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
-    gz_headerp  gzhead;  /* gzip header information to write */
-    uInt   gzindex;      /* where in extra, name, or comment */
-    Byte  method;        /* can only be DEFLATED */
-    int   last_flush;    /* value of flush param for previous deflate call */
-
-                /* used by deflate.c: */
-
-    uInt  w_size;        /* LZ77 window size (32K by default) */
-    uInt  w_bits;        /* log2(w_size)  (8..16) */
-    uInt  w_mask;        /* w_size - 1 */
-
-    Bytef *window;
-    /* Sliding window. Input bytes are read into the second half of the window,
-     * and move to the first half later to keep a dictionary of at least wSize
-     * bytes. With this organization, matches are limited to a distance of
-     * wSize-MAX_MATCH bytes, but this ensures that IO is always
-     * performed with a length multiple of the block size. Also, it limits
-     * the window size to 64K, which is quite useful on MSDOS.
-     * To do: use the user input buffer as sliding window.
-     */
-
-    ulg window_size;
-    /* Actual size of window: 2*wSize, except when the user input buffer
-     * is directly used as sliding window.
-     */
-
-    Posf *prev;
-    /* Link to older string with same hash index. To limit the size of this
-     * array to 64K, this link is maintained only for the last 32K strings.
-     * An index in this array is thus a window index modulo 32K.
-     */
-
-    Posf *head; /* Heads of the hash chains or NIL. */
-
-    uInt  ins_h;          /* hash index of string to be inserted */
-    uInt  hash_size;      /* number of elements in hash table */
-    uInt  hash_bits;      /* log2(hash_size) */
-    uInt  hash_mask;      /* hash_size-1 */
-
-    uInt  hash_shift;
-    /* Number of bits by which ins_h must be shifted at each input
-     * step. It must be such that after MIN_MATCH steps, the oldest
-     * byte no longer takes part in the hash key, that is:
-     *   hash_shift * MIN_MATCH >= hash_bits
-     */
-
-    long block_start;
-    /* Window position at the beginning of the current output block. Gets
-     * negative when the window is moved backwards.
-     */
-
-    uInt match_length;           /* length of best match */
-    IPos prev_match;             /* previous match */
-    int match_available;         /* set if previous match exists */
-    uInt strstart;               /* start of string to insert */
-    uInt match_start;            /* start of matching string */
-    uInt lookahead;              /* number of valid bytes ahead in window */
-
-    uInt prev_length;
-    /* Length of the best match at previous step. Matches not greater than this
-     * are discarded. This is used in the lazy match evaluation.
-     */
-
-    uInt max_chain_length;
-    /* To speed up deflation, hash chains are never searched beyond this
-     * length.  A higher limit improves compression ratio but degrades the
-     * speed.
-     */
-
-    uInt max_lazy_match;
-    /* Attempt to find a better match only when the current match is strictly
-     * smaller than this value. This mechanism is used only for compression
-     * levels >= 4.
-     */
-#   define max_insert_length  max_lazy_match
-    /* Insert new strings in the hash table only if the match length is not
-     * greater than this length. This saves time but degrades compression.
-     * max_insert_length is used only for compression levels <= 3.
-     */
-
-    int level;    /* compression level (1..9) */
-    int strategy; /* favor or force Huffman coding*/
-
-    uInt good_match;
-    /* Use a faster search when the previous match is longer than this */
-
-    int nice_match; /* Stop searching when current match exceeds this */
-
-                /* used by trees.c: */
-    /* Didn't use ct_data typedef below to suppress compiler warning */
-    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
-    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
-    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
-
-    struct tree_desc_s l_desc;               /* desc. for literal tree */
-    struct tree_desc_s d_desc;               /* desc. for distance tree */
-    struct tree_desc_s bl_desc;              /* desc. for bit length tree */
-
-    ush bl_count[MAX_BITS+1];
-    /* number of codes at each bit length for an optimal tree */
-
-    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
-    int heap_len;               /* number of elements in the heap */
-    int heap_max;               /* element of largest frequency */
-    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
-     * The same heap array is used to build all trees.
-     */
-
-    uch depth[2*L_CODES+1];
-    /* Depth of each subtree used as tie breaker for trees of equal frequency
-     */
-
-    uchf *l_buf;          /* buffer for literals or lengths */
-
-    uInt  lit_bufsize;
-    /* Size of match buffer for literals/lengths.  There are 4 reasons for
-     * limiting lit_bufsize to 64K:
-     *   - frequencies can be kept in 16 bit counters
-     *   - if compression is not successful for the first block, all input
-     *     data is still in the window so we can still emit a stored block even
-     *     when input comes from standard input.  (This can also be done for
-     *     all blocks if lit_bufsize is not greater than 32K.)
-     *   - if compression is not successful for a file smaller than 64K, we can
-     *     even emit a stored file instead of a stored block (saving 5 bytes).
-     *     This is applicable only for zip (not gzip or zlib).
-     *   - creating new Huffman trees less frequently may not provide fast
-     *     adaptation to changes in the input data statistics. (Take for
-     *     example a binary file with poorly compressible code followed by
-     *     a highly compressible string table.) Smaller buffer sizes give
-     *     fast adaptation but have of course the overhead of transmitting
-     *     trees more frequently.
-     *   - I can't count above 4
-     */
-
-    uInt last_lit;      /* running index in l_buf */
-
-    ushf *d_buf;
-    /* Buffer for distances. To simplify the code, d_buf and l_buf have
-     * the same number of elements. To use different lengths, an extra flag
-     * array would be necessary.
-     */
-
-    ulg opt_len;        /* bit length of current block with optimal trees */
-    ulg static_len;     /* bit length of current block with static trees */
-    uInt matches;       /* number of string matches in current block */
-    uInt insert;        /* bytes at end of window left to insert */
-
-#ifdef DEBUG
-    ulg compressed_len; /* total bit length of compressed file mod 2^32 */
-    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
-#endif
-
-    ush bi_buf;
-    /* Output buffer. bits are inserted starting at the bottom (least
-     * significant bits).
-     */
-    int bi_valid;
-    /* Number of valid bits in bi_buf.  All bits above the last valid bit
-     * are always zero.
-     */
-
-    ulg high_water;
-    /* High water mark offset in window for initialized bytes -- bytes above
-     * this are set to zero in order to avoid memory check warnings when
-     * longest match routines access bytes past the input.  This is then
-     * updated to the new high water mark.
-     */
-
-} FAR deflate_state;
-
-/* Output a byte on the stream.
- * IN assertion: there is enough room in pending_buf.
- */
-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
-
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-/* Minimum amount of lookahead, except at the end of the input file.
- * See deflate.c for comments about the MIN_MATCH+1.
- */
-
-#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
-/* In order to simplify the code, particularly on 16 bit machines, match
- * distances are limited to MAX_DIST instead of WSIZE.
- */
-
-#define WIN_INIT MAX_MATCH
-/* Number of bytes after end of data in window to initialize in order to avoid
-   memory checker errors from longest match routines */
-
-        /* in trees.c */
-void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
-int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
-void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
-                        ulg stored_len, int last));
-void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
-void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
-void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
-                        ulg stored_len, int last));
-
-#define d_code(dist) \
-   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
-/* Mapping from a distance to a distance code. dist is the distance - 1 and
- * must not have side effects. _dist_code[256] and _dist_code[257] are never
- * used.
- */
-
-#ifndef DEBUG
-/* Inline versions of _tr_tally for speed: */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
-  extern uch ZLIB_INTERNAL _length_code[];
-  extern uch ZLIB_INTERNAL _dist_code[];
-#else
-  extern const uch ZLIB_INTERNAL _length_code[];
-  extern const uch ZLIB_INTERNAL _dist_code[];
-#endif
-
-# define _tr_tally_lit(s, c, flush) \
-  { uch cc = (c); \
-    s->d_buf[s->last_lit] = 0; \
-    s->l_buf[s->last_lit++] = cc; \
-    s->dyn_ltree[cc].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
-   }
-# define _tr_tally_dist(s, distance, length, flush) \
-  { uch len = (length); \
-    ush dist = (distance); \
-    s->d_buf[s->last_lit] = dist; \
-    s->l_buf[s->last_lit++] = len; \
-    dist--; \
-    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
-    s->dyn_dtree[d_code(dist)].Freq++; \
-    flush = (s->last_lit == s->lit_bufsize-1); \
-  }
-#else
-# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
-# define _tr_tally_dist(s, distance, length, flush) \
-              flush = _tr_tally(s, distance, length)
-#endif
-
-#endif /* DEFLATE_H */
--- a/DoConfig/fltk/zlib/gzclose.c
+++ /dev/null
@@ -1,25 +1,0 @@
-/* gzclose.c -- zlib gzclose() function
- * Copyright (C) 2004, 2010 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "gzguts.h"
-
-/* gzclose() is in a separate file so that it is linked in only if it is used.
-   That way the other gzclose functions can be used instead to avoid linking in
-   unneeded compression or decompression routines. */
-int ZEXPORT gzclose(file)
-    gzFile file;
-{
-#ifndef NO_GZCOMPRESS
-    gz_statep state;
-
-    if (file == NULL)
-        return Z_STREAM_ERROR;
-    state = (gz_statep)file;
-
-    return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
-#else
-    return gzclose_r(file);
-#endif
-}
--- a/DoConfig/fltk/zlib/gzguts.h
+++ /dev/null
@@ -1,209 +1,0 @@
-/* gzguts.h -- zlib internal header definitions for gz* operations
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#ifdef _LARGEFILE64_SOURCE
-#  ifndef _LARGEFILE_SOURCE
-#    define _LARGEFILE_SOURCE 1
-#  endif
-#  ifdef _FILE_OFFSET_BITS
-#    undef _FILE_OFFSET_BITS
-#  endif
-#endif
-
-#ifdef HAVE_HIDDEN
-#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
-#else
-#  define ZLIB_INTERNAL
-#endif
-
-#include <stdio.h>
-#include "zlib.h"
-#ifdef STDC
-#  include <string.h>
-#  include <stdlib.h>
-#  include <limits.h>
-#endif
-#include <fcntl.h>
-
-#ifdef _WIN32
-#  include <stddef.h>
-#endif
-
-#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
-#  include <io.h>
-#endif
-
-#ifdef WINAPI_FAMILY
-#  define open _open
-#  define read _read
-#  define write _write
-#  define close _close
-#endif
-
-#ifdef NO_DEFLATE       /* for compatibility with old definition */
-#  define NO_GZCOMPRESS
-#endif
-
-#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-
-#if defined(__CYGWIN__)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-
-#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
-#  ifndef HAVE_VSNPRINTF
-#    define HAVE_VSNPRINTF
-#  endif
-#endif
-
-#ifndef HAVE_VSNPRINTF
-#  ifdef MSDOS
-/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
-   but for now we just assume it doesn't. */
-#    define NO_vsnprintf
-#  endif
-#  ifdef __TURBOC__
-#    define NO_vsnprintf
-#  endif
-#  ifdef WIN32
-/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
-#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
-#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
-#         define vsnprintf _vsnprintf
-#      endif
-#    endif
-#  endif
-#  ifdef __SASC
-#    define NO_vsnprintf
-#  endif
-#  ifdef VMS
-#    define NO_vsnprintf
-#  endif
-#  ifdef __OS400__
-#    define NO_vsnprintf
-#  endif
-#  ifdef __MVS__
-#    define NO_vsnprintf
-#  endif
-#endif
-
-/* unlike snprintf (which is required in C99, yet still not supported by
-   Microsoft more than a decade later!), _snprintf does not guarantee null
-   termination of the result -- however this is only used in gzlib.c where
-   the result is assured to fit in the space provided */
-#ifdef _MSC_VER
-#  define snprintf _snprintf
-#endif
-
-#ifndef local
-#  define local static
-#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
-
-/* gz* functions always use library allocation functions */
-#ifndef STDC
-  extern voidp  malloc OF((uInt size));
-  extern void   free   OF((voidpf ptr));
-#endif
-
-/* get errno and strerror definition */
-#if defined UNDER_CE
-#  include <windows.h>
-#  define zstrerror() gz_strwinerror((DWORD)GetLastError())
-#else
-#  ifndef NO_STRERROR
-#    include <errno.h>
-#    define zstrerror() strerror(errno)
-#  else
-#    define zstrerror() "stdio error (consult errno)"
-#  endif
-#endif
-
-/* provide prototypes for these when building zlib without LFS */
-#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
-    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
-    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
-    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
-    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
-#endif
-
-/* default memLevel */
-#if MAX_MEM_LEVEL >= 8
-#  define DEF_MEM_LEVEL 8
-#else
-#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
-#endif
-
-/* default i/o buffer size -- double this for output when reading (this and
-   twice this must be able to fit in an unsigned type) */
-#define GZBUFSIZE 8192
-
-/* gzip modes, also provide a little integrity check on the passed structure */
-#define GZ_NONE 0
-#define GZ_READ 7247
-#define GZ_WRITE 31153
-#define GZ_APPEND 1     /* mode set to GZ_WRITE after the file is opened */
-
-/* values for gz_state how */
-#define LOOK 0      /* look for a gzip header */
-#define COPY 1      /* copy input directly */
-#define GZIP 2      /* decompress a gzip stream */
-
-/* internal gzip file state data structure */
-typedef struct {
-        /* exposed contents for gzgetc() macro */
-    struct gzFile_s x;      /* "x" for exposed */
-                            /* x.have: number of bytes available at x.next */
-                            /* x.next: next output data to deliver or write */
-                            /* x.pos: current position in uncompressed data */
-        /* used for both reading and writing */
-    int mode;               /* see gzip modes above */
-    int fd;                 /* file descriptor */
-    char *path;             /* path or fd for error messages */
-    unsigned size;          /* buffer size, zero if not allocated yet */
-    unsigned want;          /* requested buffer size, default is GZBUFSIZE */
-    unsigned char *in;      /* input buffer */
-    unsigned char *out;     /* output buffer (double-sized when reading) */
-    int direct;             /* 0 if processing gzip, 1 if transparent */
-        /* just for reading */
-    int how;                /* 0: get header, 1: copy, 2: decompress */
-    z_off64_t start;        /* where the gzip data started, for rewinding */
-    int eof;                /* true if end of input file reached */
-    int past;               /* true if read requested past end */
-        /* just for writing */
-    int level;              /* compression level */
-    int strategy;           /* compression strategy */
-        /* seek request */
-    z_off64_t skip;         /* amount to skip (already rewound if backwards) */
-    int seek;               /* true if seek request pending */
-        /* error information */
-    int err;                /* error code */
-    char *msg;              /* error message */
-        /* zlib inflate or deflate stream */
-    z_stream strm;          /* stream structure in-place (not a pointer) */
-} gz_state;
-typedef gz_state FAR *gz_statep;
-
-/* shared functions */
-void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
-#if defined UNDER_CE
-char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
-#endif
-
-/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
-   value -- needed when comparing unsigned to z_off64_t, which is signed
-   (possible z_off64_t types off_t, off64_t, and long are all signed) */
-#ifdef INT_MAX
-#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
-#else
-unsigned ZLIB_INTERNAL gz_intmax OF((void));
-#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
-#endif
--- a/DoConfig/fltk/zlib/gzlib.c
+++ /dev/null
@@ -1,634 +1,0 @@
-/* gzlib.c -- zlib functions common to reading and writing gzip files
- * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "gzguts.h"
-
-#if defined(_WIN32) && !defined(__BORLANDC__)
-#  define LSEEK _lseeki64
-#else
-#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
-#  define LSEEK lseek64
-#else
-#  define LSEEK lseek
-#endif
-#endif
-
-/* Local functions */
-local void gz_reset OF((gz_statep));
-local gzFile gz_open OF((const void *, int, const char *));
-
-#if defined UNDER_CE
-
-/* Map the Windows error number in ERROR to a locale-dependent error message
-   string and return a pointer to it.  Typically, the values for ERROR come
-   from GetLastError.
-
-   The string pointed to shall not be modified by the application, but may be
-   overwritten by a subsequent call to gz_strwinerror
-
-   The gz_strwinerror function does not change the current setting of
-   GetLastError. */
-char ZLIB_INTERNAL *gz_strwinerror (error)
-     DWORD error;
-{
-    static char buf[1024];
-
-    wchar_t *msgbuf;
-    DWORD lasterr = GetLastError();
-    DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
-        | FORMAT_MESSAGE_ALLOCATE_BUFFER,
-        NULL,
-        error,
-        0, /* Default language */
-        (LPVOID)&msgbuf,
-        0,
-        NULL);
-    if (chars != 0) {
-        /* If there is an \r\n appended, zap it.  */
-        if (chars >= 2
-            && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
-            chars -= 2;
-            msgbuf[chars] = 0;
-        }
-
-        if (chars > sizeof (buf) - 1) {
-            chars = sizeof (buf) - 1;
-            msgbuf[chars] = 0;
-        }
-
-        wcstombs(buf, msgbuf, chars + 1);
-        LocalFree(msgbuf);
-    }
-    else {
-        sprintf(buf, "unknown win32 error (%ld)", error);
-    }
-
-    SetLastError(lasterr);
-    return buf;
-}
-
-#endif /* UNDER_CE */
-
-/* Reset gzip file state */
-local void gz_reset(state)
-    gz_statep state;
-{
-    state->x.have = 0;              /* no output data available */
-    if (state->mode == GZ_READ) {   /* for reading ... */
-        state->eof = 0;             /* not at end of file */
-        state->past = 0;            /* have not read past end yet */
-        state->how = LOOK;          /* look for gzip header */
-    }
-    state->seek = 0;                /* no seek request pending */
-    gz_error(state, Z_OK, NULL);    /* clear error */
-    state->x.pos = 0;               /* no uncompressed data yet */
-    state->strm.avail_in = 0;       /* no input data yet */
-}
-
-/* Open a gzip file either by name or file descriptor. */
-local gzFile gz_open(path, fd, mode)
-    const void *path;
-    int fd;
-    const char *mode;
-{
-    gz_statep state;
-    size_t len;
-    int oflag;
-#ifdef O_CLOEXEC
-    int cloexec = 0;
-#endif
-#ifdef O_EXCL
-    int exclusive = 0;
-#endif
-
-    /* check input */
-    if (path == NULL)
-        return NULL;
-
-    /* allocate gzFile structure to return */
-    state = (gz_statep)malloc(sizeof(gz_state));
-    if (state == NULL)
-        return NULL;
-    state->size = 0;            /* no buffers allocated yet */
-    state->want = GZBUFSIZE;    /* requested buffer size */
-    state->msg = NULL;          /* no error message yet */
-
-    /* interpret mode */
-    state->mode = GZ_NONE;
-    state->level = Z_DEFAULT_COMPRESSION;
-    state->strategy = Z_DEFAULT_STRATEGY;
-    state->direct = 0;
-    while (*mode) {
-        if (*mode >= '0' && *mode <= '9')
-            state->level = *mode - '0';
-        else
-            switch (*mode) {
-            case 'r':
-                state->mode = GZ_READ;
-                break;
-#ifndef NO_GZCOMPRESS
-            case 'w':
-                state->mode = GZ_WRITE;
-                break;
-            case 'a':
-                state->mode = GZ_APPEND;
-                break;
-#endif
-            case '+':       /* can't read and write at the same time */
-                free(state);
-                return NULL;
-            case 'b':       /* ignore -- will request binary anyway */
-                break;
-#ifdef O_CLOEXEC
-            case 'e':
-                cloexec = 1;
-                break;
-#endif
-#ifdef O_EXCL
-            case 'x':
-                exclusive = 1;
-                break;
-#endif
-            case 'f':
-                state->strategy = Z_FILTERED;
-                break;
-            case 'h':
-                state->strategy = Z_HUFFMAN_ONLY;
-                break;
-            case 'R':
-                state->strategy = Z_RLE;
-                break;
-            case 'F':
-                state->strategy = Z_FIXED;
-                break;
-            case 'T':
-                state->direct = 1;
-                break;
-            default:        /* could consider as an error, but just ignore */
-                ;
-            }
-        mode++;
-    }
-
-    /* must provide an "r", "w", or "a" */
-    if (state->mode == GZ_NONE) {
-        free(state);
-        return NULL;
-    }
-
-    /* can't force transparent read */
-    if (state->mode == GZ_READ) {
-        if (state->direct) {
-            free(state);
-            return NULL;
-        }
-        state->direct = 1;      /* for empty file */
-    }
-
-    /* save the path name for error messages */
-#ifdef _WIN32
-    if (fd == -2) {
-        len = wcstombs(NULL, path, 0);
-        if (len == (size_t)-1)
-            len = 0;
-    }
-    else
-#endif
-        len = strlen((const char *)path);
-    state->path = (char *)malloc(len + 1);
-    if (state->path == NULL) {
-        free(state);
-        return NULL;
-    }
-#ifdef _WIN32
-    if (fd == -2)
-        if (len)
-            wcstombs(state->path, path, len + 1);
-        else
-            *(state->path) = 0;
-    else
-#endif
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-        snprintf(state->path, len + 1, "%s", (const char *)path);
-#else
-        strcpy(state->path, path);
-#endif
-
-    /* compute the flags for open() */
-    oflag =
-#ifdef O_LARGEFILE
-        O_LARGEFILE |
-#endif
-#ifdef O_BINARY
-        O_BINARY |
-#endif
-#ifdef O_CLOEXEC
-        (cloexec ? O_CLOEXEC : 0) |
-#endif
-        (state->mode == GZ_READ ?
-         O_RDONLY :
-         (O_WRONLY | O_CREAT |
-#ifdef O_EXCL
-          (exclusive ? O_EXCL : 0) |
-#endif
-          (state->mode == GZ_WRITE ?
-           O_TRUNC :
-           O_APPEND)));
-
-    /* open the file with the appropriate flags (or just use fd) */
-    state->fd = fd > -1 ? fd : (
-#ifdef _WIN32
-        fd == -2 ? _wopen(path, oflag, 0666) :
-#endif
-        open((const char *)path, oflag, 0666));
-    if (state->fd == -1) {
-        free(state->path);
-        free(state);
-        return NULL;
-    }
-    if (state->mode == GZ_APPEND)
-        state->mode = GZ_WRITE;         /* simplify later checks */
-
-    /* save the current position for rewinding (only if reading) */
-    if (state->mode == GZ_READ) {
-        state->start = LSEEK(state->fd, 0, SEEK_CUR);
-        if (state->start == -1) state->start = 0;
-    }
-
-    /* initialize stream */
-    gz_reset(state);
-
-    /* return stream */
-    return (gzFile)state;
-}
-
-/* -- see zlib.h -- */
-gzFile ZEXPORT gzopen(path, mode)
-    const char *path;
-    const char *mode;
-{
-    return gz_open(path, -1, mode);
-}
-
-/* -- see zlib.h -- */
-gzFile ZEXPORT gzopen64(path, mode)
-    const char *path;
-    const char *mode;
-{
-    return gz_open(path, -1, mode);
-}
-
-/* -- see zlib.h -- */
-gzFile ZEXPORT gzdopen(fd, mode)
-    int fd;
-    const char *mode;
-{
-    char *path;         /* identifier for error messages */
-    gzFile gz;
-
-    if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
-        return NULL;
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-    snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
-#else
-    sprintf(path, "<fd:%d>", fd);   /* for debugging */
-#endif
-    gz = gz_open(path, fd, mode);
-    free(path);
-    return gz;
-}
-
-/* -- see zlib.h -- */
-#ifdef _WIN32
-gzFile ZEXPORT gzopen_w(path, mode)
-    const wchar_t *path;
-    const char *mode;
-{
-    return gz_open(path, -2, mode);
-}
-#endif
-
-/* -- see zlib.h -- */
-int ZEXPORT gzbuffer(file, size)
-    gzFile file;
-    unsigned size;
-{
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return -1;
-
-    /* make sure we haven't already allocated memory */
-    if (state->size != 0)
-        return -1;
-
-    /* check and set requested size */
-    if (size < 2)
-        size = 2;               /* need two bytes to check magic header */
-    state->want = size;
-    return 0;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzrewind(file)
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-
-    /* check that we're reading and that there's no error */
-    if (state->mode != GZ_READ ||
-            (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return -1;
-
-    /* back up and start over */
-    if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
-        return -1;
-    gz_reset(state);
-    return 0;
-}
-
-/* -- see zlib.h -- */
-z_off64_t ZEXPORT gzseek64(file, offset, whence)
-    gzFile file;
-    z_off64_t offset;
-    int whence;
-{
-    unsigned n;
-    z_off64_t ret;
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return -1;
-
-    /* check that there's no error */
-    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
-        return -1;
-
-    /* can only seek from start or relative to current position */
-    if (whence != SEEK_SET && whence != SEEK_CUR)
-        return -1;
-
-    /* normalize offset to a SEEK_CUR specification */
-    if (whence == SEEK_SET)
-        offset -= state->x.pos;
-    else if (state->seek)
-        offset += state->skip;
-    state->seek = 0;
-
-    /* if within raw area while reading, just go there */
-    if (state->mode == GZ_READ && state->how == COPY &&
-            state->x.pos + offset >= 0) {
-        ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
-        if (ret == -1)
-            return -1;
-        state->x.have = 0;
-        state->eof = 0;
-        state->past = 0;
-        state->seek = 0;
-        gz_error(state, Z_OK, NULL);
-        state->strm.avail_in = 0;
-        state->x.pos += offset;
-        return state->x.pos;
-    }
-
-    /* calculate skip amount, rewinding if needed for back seek when reading */
-    if (offset < 0) {
-        if (state->mode != GZ_READ)         /* writing -- can't go backwards */
-            return -1;
-        offset += state->x.pos;
-        if (offset < 0)                     /* before start of file! */
-            return -1;
-        if (gzrewind(file) == -1)           /* rewind, then skip to offset */
-            return -1;
-    }
-
-    /* if reading, skip what's in output buffer (one less gzgetc() check) */
-    if (state->mode == GZ_READ) {
-        n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
-            (unsigned)offset : state->x.have;
-        state->x.have -= n;
-        state->x.next += n;
-        state->x.pos += n;
-        offset -= n;
-    }
-
-    /* request skip (if not zero) */
-    if (offset) {
-        state->seek = 1;
-        state->skip = offset;
-    }
-    return state->x.pos + offset;
-}
-
-/* -- see zlib.h -- */
-z_off_t ZEXPORT gzseek(file, offset, whence)
-    gzFile file;
-    z_off_t offset;
-    int whence;
-{
-    z_off64_t ret;
-
-    ret = gzseek64(file, (z_off64_t)offset, whence);
-    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
-}
-
-/* -- see zlib.h -- */
-z_off64_t ZEXPORT gztell64(file)
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return -1;
-
-    /* return position */
-    return state->x.pos + (state->seek ? state->skip : 0);
-}
-
-/* -- see zlib.h -- */
-z_off_t ZEXPORT gztell(file)
-    gzFile file;
-{
-    z_off64_t ret;
-
-    ret = gztell64(file);
-    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
-}
-
-/* -- see zlib.h -- */
-z_off64_t ZEXPORT gzoffset64(file)
-    gzFile file;
-{
-    z_off64_t offset;
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return -1;
-
-    /* compute and return effective offset in file */
-    offset = LSEEK(state->fd, 0, SEEK_CUR);
-    if (offset == -1)
-        return -1;
-    if (state->mode == GZ_READ)             /* reading */
-        offset -= state->strm.avail_in;     /* don't count buffered input */
-    return offset;
-}
-
-/* -- see zlib.h -- */
-z_off_t ZEXPORT gzoffset(file)
-    gzFile file;
-{
-    z_off64_t ret;
-
-    ret = gzoffset64(file);
-    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzeof(file)
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return 0;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return 0;
-
-    /* return end-of-file state */
-    return state->mode == GZ_READ ? state->past : 0;
-}
-
-/* -- see zlib.h -- */
-const char * ZEXPORT gzerror(file, errnum)
-    gzFile file;
-    int *errnum;
-{
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return NULL;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return NULL;
-
-    /* return error information */
-    if (errnum != NULL)
-        *errnum = state->err;
-    return state->err == Z_MEM_ERROR ? "out of memory" :
-                                       (state->msg == NULL ? "" : state->msg);
-}
-
-/* -- see zlib.h -- */
-void ZEXPORT gzclearerr(file)
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure and check integrity */
-    if (file == NULL)
-        return;
-    state = (gz_statep)file;
-    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
-        return;
-
-    /* clear error and end-of-file */
-    if (state->mode == GZ_READ) {
-        state->eof = 0;
-        state->past = 0;
-    }
-    gz_error(state, Z_OK, NULL);
-}
-
-/* Create an error message in allocated memory and set state->err and
-   state->msg accordingly.  Free any previous error message already there.  Do
-   not try to free or allocate space if the error is Z_MEM_ERROR (out of
-   memory).  Simply save the error message as a static string.  If there is an
-   allocation failure constructing the error message, then convert the error to
-   out of memory. */
-void ZLIB_INTERNAL gz_error(state, err, msg)
-    gz_statep state;
-    int err;
-    const char *msg;
-{
-    /* free previously allocated message and clear */
-    if (state->msg != NULL) {
-        if (state->err != Z_MEM_ERROR)
-            free(state->msg);
-        state->msg = NULL;
-    }
-
-    /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
-    if (err != Z_OK && err != Z_BUF_ERROR)
-        state->x.have = 0;
-
-    /* set error code, and if no message, then done */
-    state->err = err;
-    if (msg == NULL)
-        return;
-
-    /* for an out of memory error, return literal string when requested */
-    if (err == Z_MEM_ERROR)
-        return;
-
-    /* construct error message with path */
-    if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
-            NULL) {
-        state->err = Z_MEM_ERROR;
-        return;
-    }
-#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
-    snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
-             "%s%s%s", state->path, ": ", msg);
-#else
-    strcpy(state->msg, state->path);
-    strcat(state->msg, ": ");
-    strcat(state->msg, msg);
-#endif
-    return;
-}
-
-#ifndef INT_MAX
-/* portably return maximum value for an int (when limits.h presumed not
-   available) -- we need to do this to cover cases where 2's complement not
-   used, since C standard permits 1's complement and sign-bit representations,
-   otherwise we could just use ((unsigned)-1) >> 1 */
-unsigned ZLIB_INTERNAL gz_intmax()
-{
-    unsigned p, q;
-
-    p = 1;
-    do {
-        q = p;
-        p <<= 1;
-        p++;
-    } while (p > q);
-    return q >> 1;
-}
-#endif
--- a/DoConfig/fltk/zlib/gzread.c
+++ /dev/null
@@ -1,594 +1,0 @@
-/* gzread.c -- zlib functions for reading gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "gzguts.h"
-
-/* Local functions */
-local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
-local int gz_avail OF((gz_statep));
-local int gz_look OF((gz_statep));
-local int gz_decomp OF((gz_statep));
-local int gz_fetch OF((gz_statep));
-local int gz_skip OF((gz_statep, z_off64_t));
-
-/* Use read() to load a buffer -- return -1 on error, otherwise 0.  Read from
-   state->fd, and update state->eof, state->err, and state->msg as appropriate.
-   This function needs to loop on read(), since read() is not guaranteed to
-   read the number of bytes requested, depending on the type of descriptor. */
-local int gz_load(state, buf, len, have)
-    gz_statep state;
-    unsigned char *buf;
-    unsigned len;
-    unsigned *have;
-{
-    int ret;
-
-    *have = 0;
-    do {
-        ret = read(state->fd, buf + *have, len - *have);
-        if (ret <= 0)
-            break;
-        *have += ret;
-    } while (*have < len);
-    if (ret < 0) {
-        gz_error(state, Z_ERRNO, zstrerror());
-        return -1;
-    }
-    if (ret == 0)
-        state->eof = 1;
-    return 0;
-}
-
-/* Load up input buffer and set eof flag if last data loaded -- return -1 on
-   error, 0 otherwise.  Note that the eof flag is set when the end of the input
-   file is reached, even though there may be unused data in the buffer.  Once
-   that data has been used, no more attempts will be made to read the file.
-   If strm->avail_in != 0, then the current data is moved to the beginning of
-   the input buffer, and then the remainder of the buffer is loaded with the
-   available data from the input file. */
-local int gz_avail(state)
-    gz_statep state;
-{
-    unsigned got;
-    z_streamp strm = &(state->strm);
-
-    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
-        return -1;
-    if (state->eof == 0) {
-        if (strm->avail_in) {       /* copy what's there to the start */
-            unsigned char *p = state->in;
-            unsigned const char *q = strm->next_in;
-            unsigned n = strm->avail_in;
-            do {
-                *p++ = *q++;
-            } while (--n);
-        }
-        if (gz_load(state, state->in + strm->avail_in,
-                    state->size - strm->avail_in, &got) == -1)
-            return -1;
-        strm->avail_in += got;
-        strm->next_in = state->in;
-    }
-    return 0;
-}
-
-/* Look for gzip header, set up for inflate or copy.  state->x.have must be 0.
-   If this is the first time in, allocate required memory.  state->how will be
-   left unchanged if there is no more input data available, will be set to COPY
-   if there is no gzip header and direct copying will be performed, or it will
-   be set to GZIP for decompression.  If direct copying, then leftover input
-   data from the input buffer will be copied to the output buffer.  In that
-   case, all further file reads will be directly to either the output buffer or
-   a user buffer.  If decompressing, the inflate state will be initialized.
-   gz_look() will return 0 on success or -1 on failure. */
-local int gz_look(state)
-    gz_statep state;
-{
-    z_streamp strm = &(state->strm);
-
-    /* allocate read buffers and inflate memory */
-    if (state->size == 0) {
-        /* allocate buffers */
-        state->in = (unsigned char *)malloc(state->want);
-        state->out = (unsigned char *)malloc(state->want << 1);
-        if (state->in == NULL || state->out == NULL) {
-            if (state->out != NULL)
-                free(state->out);
-            if (state->in != NULL)
-                free(state->in);
-            gz_error(state, Z_MEM_ERROR, "out of memory");
-            return -1;
-        }
-        state->size = state->want;
-
-        /* allocate inflate memory */
-        state->strm.zalloc = Z_NULL;
-        state->strm.zfree = Z_NULL;
-        state->strm.opaque = Z_NULL;
-        state->strm.avail_in = 0;
-        state->strm.next_in = Z_NULL;
-        if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) {    /* gunzip */
-            free(state->out);
-            free(state->in);
-            state->size = 0;
-            gz_error(state, Z_MEM_ERROR, "out of memory");
-            return -1;
-        }
-    }
-
-    /* get at least the magic bytes in the input buffer */
-    if (strm->avail_in < 2) {
-        if (gz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in == 0)
-            return 0;
-    }
-
-    /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
-       a logical dilemma here when considering the case of a partially written
-       gzip file, to wit, if a single 31 byte is written, then we cannot tell
-       whether this is a single-byte file, or just a partially written gzip
-       file -- for here we assume that if a gzip file is being written, then
-       the header will be written in a single operation, so that reading a
-       single byte is sufficient indication that it is not a gzip file) */
-    if (strm->avail_in > 1 &&
-            strm->next_in[0] == 31 && strm->next_in[1] == 139) {
-        inflateReset(strm);
-        state->how = GZIP;
-        state->direct = 0;
-        return 0;
-    }
-
-    /* no gzip header -- if we were decoding gzip before, then this is trailing
-       garbage.  Ignore the trailing garbage and finish. */
-    if (state->direct == 0) {
-        strm->avail_in = 0;
-        state->eof = 1;
-        state->x.have = 0;
-        return 0;
-    }
-
-    /* doing raw i/o, copy any leftover input to output -- this assumes that
-       the output buffer is larger than the input buffer, which also assures
-       space for gzungetc() */
-    state->x.next = state->out;
-    if (strm->avail_in) {
-        memcpy(state->x.next, strm->next_in, strm->avail_in);
-        state->x.have = strm->avail_in;
-        strm->avail_in = 0;
-    }
-    state->how = COPY;
-    state->direct = 1;
-    return 0;
-}
-
-/* Decompress from input to the provided next_out and avail_out in the state.
-   On return, state->x.have and state->x.next point to the just decompressed
-   data.  If the gzip stream completes, state->how is reset to LOOK to look for
-   the next gzip stream or raw data, once state->x.have is depleted.  Returns 0
-   on success, -1 on failure. */
-local int gz_decomp(state)
-    gz_statep state;
-{
-    int ret = Z_OK;
-    unsigned had;
-    z_streamp strm = &(state->strm);
-
-    /* fill output buffer up to end of deflate stream */
-    had = strm->avail_out;
-    do {
-        /* get more input for inflate() */
-        if (strm->avail_in == 0 && gz_avail(state) == -1)
-            return -1;
-        if (strm->avail_in == 0) {
-            gz_error(state, Z_BUF_ERROR, "unexpected end of file");
-            break;
-        }
-
-        /* decompress and handle errors */
-        ret = inflate(strm, Z_NO_FLUSH);
-        if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
-            gz_error(state, Z_STREAM_ERROR,
-                     "internal error: inflate stream corrupt");
-            return -1;
-        }
-        if (ret == Z_MEM_ERROR) {
-            gz_error(state, Z_MEM_ERROR, "out of memory");
-            return -1;
-        }
-        if (ret == Z_DATA_ERROR) {              /* deflate stream invalid */
-            gz_error(state, Z_DATA_ERROR,
-                     strm->msg == NULL ? "compressed data error" : strm->msg);
-            return -1;
-        }
-    } while (strm->avail_out && ret != Z_STREAM_END);
-
-    /* update available output */
-    state->x.have = had - strm->avail_out;
-    state->x.next = strm->next_out - state->x.have;
-
-    /* if the gzip stream completed successfully, look for another */
-    if (ret == Z_STREAM_END)
-        state->how = LOOK;
-
-    /* good decompression */
-    return 0;
-}
-
-/* Fetch data and put it in the output buffer.  Assumes state->x.have is 0.
-   Data is either copied from the input file or decompressed from the input
-   file depending on state->how.  If state->how is LOOK, then a gzip header is
-   looked for to determine whether to copy or decompress.  Returns -1 on error,
-   otherwise 0.  gz_fetch() will leave state->how as COPY or GZIP unless the
-   end of the input file has been reached and all data has been processed.  */
-local int gz_fetch(state)
-    gz_statep state;
-{
-    z_streamp strm = &(state->strm);
-
-    do {
-        switch(state->how) {
-        case LOOK:      /* -> LOOK, COPY (only if never GZIP), or GZIP */
-            if (gz_look(state) == -1)
-                return -1;
-            if (state->how == LOOK)
-                return 0;
-            break;
-        case COPY:      /* -> COPY */
-            if (gz_load(state, state->out, state->size << 1, &(state->x.have))
-                    == -1)
-                return -1;
-            state->x.next = state->out;
-            return 0;
-        case GZIP:      /* -> GZIP or LOOK (if end of gzip stream) */
-            strm->avail_out = state->size << 1;
-            strm->next_out = state->out;
-            if (gz_decomp(state) == -1)
-                return -1;
-        }
-    } while (state->x.have == 0 && (!state->eof || strm->avail_in));
-    return 0;
-}
-
-/* Skip len uncompressed bytes of output.  Return -1 on error, 0 on success. */
-local int gz_skip(state, len)
-    gz_statep state;
-    z_off64_t len;
-{
-    unsigned n;
-
-    /* skip over len bytes or reach end-of-file, whichever comes first */
-    while (len)
-        /* skip over whatever is in output buffer */
-        if (state->x.have) {
-            n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
-                (unsigned)len : state->x.have;
-            state->x.have -= n;
-            state->x.next += n;
-            state->x.pos += n;
-            len -= n;
-        }
-
-        /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && state->strm.avail_in == 0)
-            break;
-
-        /* need more data to skip -- load up output buffer */
-        else {
-            /* get more output, looking for header if required */
-            if (gz_fetch(state) == -1)
-                return -1;
-        }
-    return 0;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzread(file, buf, len)
-    gzFile file;
-    voidp buf;
-    unsigned len;
-{
-    unsigned got, n;
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're reading and that there's no (serious) error */
-    if (state->mode != GZ_READ ||
-            (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return -1;
-
-    /* since an int is returned, make sure len fits in one, otherwise return
-       with an error (this avoids the flaw in the interface) */
-    if ((int)len < 0) {
-        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
-        return -1;
-    }
-
-    /* if len is zero, avoid unnecessary operations */
-    if (len == 0)
-        return 0;
-
-    /* process a skip request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_skip(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* get len bytes to buf, or less than len if at the end */
-    got = 0;
-    do {
-        /* first just try copying data from the output buffer */
-        if (state->x.have) {
-            n = state->x.have > len ? len : state->x.have;
-            memcpy(buf, state->x.next, n);
-            state->x.next += n;
-            state->x.have -= n;
-        }
-
-        /* output buffer empty -- return if we're at the end of the input */
-        else if (state->eof && strm->avail_in == 0) {
-            state->past = 1;        /* tried to read past end */
-            break;
-        }
-
-        /* need output data -- for small len or new stream load up our output
-           buffer */
-        else if (state->how == LOOK || len < (state->size << 1)) {
-            /* get more output, looking for header if required */
-            if (gz_fetch(state) == -1)
-                return -1;
-            continue;       /* no progress yet -- go back to copy above */
-            /* the copy above assures that we will leave with space in the
-               output buffer, allowing at least one gzungetc() to succeed */
-        }
-
-        /* large len -- read directly into user buffer */
-        else if (state->how == COPY) {      /* read directly */
-            if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
-                return -1;
-        }
-
-        /* large len -- decompress directly into user buffer */
-        else {  /* state->how == GZIP */
-            strm->avail_out = len;
-            strm->next_out = (unsigned char *)buf;
-            if (gz_decomp(state) == -1)
-                return -1;
-            n = state->x.have;
-            state->x.have = 0;
-        }
-
-        /* update progress */
-        len -= n;
-        buf = (char *)buf + n;
-        got += n;
-        state->x.pos += n;
-    } while (len);
-
-    /* return number of bytes read into user buffer (will fit in int) */
-    return (int)got;
-}
-
-/* -- see zlib.h -- */
-#ifdef Z_PREFIX_SET
-#  undef z_gzgetc
-#else
-#  undef gzgetc
-#endif
-int ZEXPORT gzgetc(file)
-    gzFile file;
-{
-    int ret;
-    unsigned char buf[1];
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-
-    /* check that we're reading and that there's no (serious) error */
-    if (state->mode != GZ_READ ||
-        (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return -1;
-
-    /* try output buffer (no need to check for skip request) */
-    if (state->x.have) {
-        state->x.have--;
-        state->x.pos++;
-        return *(state->x.next)++;
-    }
-
-    /* nothing there -- try gzread() */
-    ret = gzread(file, buf, 1);
-    return ret < 1 ? -1 : buf[0];
-}
-
-int ZEXPORT gzgetc_(file)
-gzFile file;
-{
-    return gzgetc(file);
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzungetc(c, file)
-    int c;
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-
-    /* check that we're reading and that there's no (serious) error */
-    if (state->mode != GZ_READ ||
-        (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return -1;
-
-    /* process a skip request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_skip(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* can't push EOF */
-    if (c < 0)
-        return -1;
-
-    /* if output buffer empty, put byte at end (allows more pushing) */
-    if (state->x.have == 0) {
-        state->x.have = 1;
-        state->x.next = state->out + (state->size << 1) - 1;
-        state->x.next[0] = c;
-        state->x.pos--;
-        state->past = 0;
-        return c;
-    }
-
-    /* if no room, give up (must have already done a gzungetc()) */
-    if (state->x.have == (state->size << 1)) {
-        gz_error(state, Z_DATA_ERROR, "out of room to push characters");
-        return -1;
-    }
-
-    /* slide output data if needed and insert byte before existing data */
-    if (state->x.next == state->out) {
-        unsigned char *src = state->out + state->x.have;
-        unsigned char *dest = state->out + (state->size << 1);
-        while (src > state->out)
-            *--dest = *--src;
-        state->x.next = dest;
-    }
-    state->x.have++;
-    state->x.next--;
-    state->x.next[0] = c;
-    state->x.pos--;
-    state->past = 0;
-    return c;
-}
-
-/* -- see zlib.h -- */
-char * ZEXPORT gzgets(file, buf, len)
-    gzFile file;
-    char *buf;
-    int len;
-{
-    unsigned left, n;
-    char *str;
-    unsigned char *eol;
-    gz_statep state;
-
-    /* check parameters and get internal structure */
-    if (file == NULL || buf == NULL || len < 1)
-        return NULL;
-    state = (gz_statep)file;
-
-    /* check that we're reading and that there's no (serious) error */
-    if (state->mode != GZ_READ ||
-        (state->err != Z_OK && state->err != Z_BUF_ERROR))
-        return NULL;
-
-    /* process a skip request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_skip(state, state->skip) == -1)
-            return NULL;
-    }
-
-    /* copy output bytes up to new line or len - 1, whichever comes first --
-       append a terminating zero to the string (we don't check for a zero in
-       the contents, let the user worry about that) */
-    str = buf;
-    left = (unsigned)len - 1;
-    if (left) do {
-        /* assure that something is in the output buffer */
-        if (state->x.have == 0 && gz_fetch(state) == -1)
-            return NULL;                /* error */
-        if (state->x.have == 0) {       /* end of file */
-            state->past = 1;            /* read past end */
-            break;                      /* return what we have */
-        }
-
-        /* look for end-of-line in current output buffer */
-        n = state->x.have > left ? left : state->x.have;
-        eol = (unsigned char *)memchr(state->x.next, '\n', n);
-        if (eol != NULL)
-            n = (unsigned)(eol - state->x.next) + 1;
-
-        /* copy through end-of-line, or remainder if not found */
-        memcpy(buf, state->x.next, n);
-        state->x.have -= n;
-        state->x.next += n;
-        state->x.pos += n;
-        left -= n;
-        buf += n;
-    } while (left && eol == NULL);
-
-    /* return terminated string, or if nothing, end of file */
-    if (buf == str)
-        return NULL;
-    buf[0] = 0;
-    return str;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzdirect(file)
-    gzFile file;
-{
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return 0;
-    state = (gz_statep)file;
-
-    /* if the state is not known, but we can find out, then do so (this is
-       mainly for right after a gzopen() or gzdopen()) */
-    if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
-        (void)gz_look(state);
-
-    /* return 1 if transparent, 0 if processing a gzip stream */
-    return state->direct;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzclose_r(file)
-    gzFile file;
-{
-    int ret, err;
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return Z_STREAM_ERROR;
-    state = (gz_statep)file;
-
-    /* check that we're reading */
-    if (state->mode != GZ_READ)
-        return Z_STREAM_ERROR;
-
-    /* free memory and close file */
-    if (state->size) {
-        inflateEnd(&(state->strm));
-        free(state->out);
-        free(state->in);
-    }
-    err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
-    gz_error(state, Z_OK, NULL);
-    free(state->path);
-    ret = close(state->fd);
-    free(state);
-    return ret ? Z_ERRNO : err;
-}
--- a/DoConfig/fltk/zlib/gzwrite.c
+++ /dev/null
@@ -1,577 +1,0 @@
-/* gzwrite.c -- zlib functions for writing gzip files
- * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "gzguts.h"
-
-/* Local functions */
-local int gz_init OF((gz_statep));
-local int gz_comp OF((gz_statep, int));
-local int gz_zero OF((gz_statep, z_off64_t));
-
-/* Initialize state for writing a gzip file.  Mark initialization by setting
-   state->size to non-zero.  Return -1 on failure or 0 on success. */
-local int gz_init(state)
-    gz_statep state;
-{
-    int ret;
-    z_streamp strm = &(state->strm);
-
-    /* allocate input buffer */
-    state->in = (unsigned char *)malloc(state->want);
-    if (state->in == NULL) {
-        gz_error(state, Z_MEM_ERROR, "out of memory");
-        return -1;
-    }
-
-    /* only need output buffer and deflate state if compressing */
-    if (!state->direct) {
-        /* allocate output buffer */
-        state->out = (unsigned char *)malloc(state->want);
-        if (state->out == NULL) {
-            free(state->in);
-            gz_error(state, Z_MEM_ERROR, "out of memory");
-            return -1;
-        }
-
-        /* allocate deflate memory, set up for gzip compression */
-        strm->zalloc = Z_NULL;
-        strm->zfree = Z_NULL;
-        strm->opaque = Z_NULL;
-        ret = deflateInit2(strm, state->level, Z_DEFLATED,
-                           MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
-        if (ret != Z_OK) {
-            free(state->out);
-            free(state->in);
-            gz_error(state, Z_MEM_ERROR, "out of memory");
-            return -1;
-        }
-    }
-
-    /* mark state as initialized */
-    state->size = state->want;
-
-    /* initialize write buffer if compressing */
-    if (!state->direct) {
-        strm->avail_out = state->size;
-        strm->next_out = state->out;
-        state->x.next = strm->next_out;
-    }
-    return 0;
-}
-
-/* Compress whatever is at avail_in and next_in and write to the output file.
-   Return -1 if there is an error writing to the output file, otherwise 0.
-   flush is assumed to be a valid deflate() flush value.  If flush is Z_FINISH,
-   then the deflate() state is reset to start a new gzip stream.  If gz->direct
-   is true, then simply write to the output file without compressing, and
-   ignore flush. */
-local int gz_comp(state, flush)
-    gz_statep state;
-    int flush;
-{
-    int ret, got;
-    unsigned have;
-    z_streamp strm = &(state->strm);
-
-    /* allocate memory if this is the first time through */
-    if (state->size == 0 && gz_init(state) == -1)
-        return -1;
-
-    /* write directly if requested */
-    if (state->direct) {
-        got = write(state->fd, strm->next_in, strm->avail_in);
-        if (got < 0 || (unsigned)got != strm->avail_in) {
-            gz_error(state, Z_ERRNO, zstrerror());
-            return -1;
-        }
-        strm->avail_in = 0;
-        return 0;
-    }
-
-    /* run deflate() on provided input until it produces no more output */
-    ret = Z_OK;
-    do {
-        /* write out current buffer contents if full, or if flushing, but if
-           doing Z_FINISH then don't write until we get to Z_STREAM_END */
-        if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
-            (flush != Z_FINISH || ret == Z_STREAM_END))) {
-            have = (unsigned)(strm->next_out - state->x.next);
-            if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
-                         (unsigned)got != have)) {
-                gz_error(state, Z_ERRNO, zstrerror());
-                return -1;
-            }
-            if (strm->avail_out == 0) {
-                strm->avail_out = state->size;
-                strm->next_out = state->out;
-            }
-            state->x.next = strm->next_out;
-        }
-
-        /* compress */
-        have = strm->avail_out;
-        ret = deflate(strm, flush);
-        if (ret == Z_STREAM_ERROR) {
-            gz_error(state, Z_STREAM_ERROR,
-                      "internal error: deflate stream corrupt");
-            return -1;
-        }
-        have -= strm->avail_out;
-    } while (have);
-
-    /* if that completed a deflate stream, allow another to start */
-    if (flush == Z_FINISH)
-        deflateReset(strm);
-
-    /* all done, no errors */
-    return 0;
-}
-
-/* Compress len zeros to output.  Return -1 on error, 0 on success. */
-local int gz_zero(state, len)
-    gz_statep state;
-    z_off64_t len;
-{
-    int first;
-    unsigned n;
-    z_streamp strm = &(state->strm);
-
-    /* consume whatever's left in the input buffer */
-    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-        return -1;
-
-    /* compress len zeros (len guaranteed > 0) */
-    first = 1;
-    while (len) {
-        n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
-            (unsigned)len : state->size;
-        if (first) {
-            memset(state->in, 0, n);
-            first = 0;
-        }
-        strm->avail_in = n;
-        strm->next_in = state->in;
-        state->x.pos += n;
-        if (gz_comp(state, Z_NO_FLUSH) == -1)
-            return -1;
-        len -= n;
-    }
-    return 0;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzwrite(file, buf, len)
-    gzFile file;
-    voidpc buf;
-    unsigned len;
-{
-    unsigned put = len;
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return 0;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
-
-    /* since an int is returned, make sure len fits in one, otherwise return
-       with an error (this avoids the flaw in the interface) */
-    if ((int)len < 0) {
-        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
-        return 0;
-    }
-
-    /* if len is zero, avoid unnecessary operations */
-    if (len == 0)
-        return 0;
-
-    /* allocate memory if this is the first time through */
-    if (state->size == 0 && gz_init(state) == -1)
-        return 0;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return 0;
-    }
-
-    /* for small len, copy to input buffer, otherwise compress directly */
-    if (len < state->size) {
-        /* copy to input buffer, compress when full */
-        do {
-            unsigned have, copy;
-
-            if (strm->avail_in == 0)
-                strm->next_in = state->in;
-            have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
-            copy = state->size - have;
-            if (copy > len)
-                copy = len;
-            memcpy(state->in + have, buf, copy);
-            strm->avail_in += copy;
-            state->x.pos += copy;
-            buf = (const char *)buf + copy;
-            len -= copy;
-            if (len && gz_comp(state, Z_NO_FLUSH) == -1)
-                return 0;
-        } while (len);
-    }
-    else {
-        /* consume whatever's left in the input buffer */
-        if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-            return 0;
-
-        /* directly compress user buffer to file */
-        strm->avail_in = len;
-        strm->next_in = (z_const Bytef *)buf;
-        state->x.pos += len;
-        if (gz_comp(state, Z_NO_FLUSH) == -1)
-            return 0;
-    }
-
-    /* input was all buffered or compressed (put will fit in int) */
-    return (int)put;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzputc(file, c)
-    gzFile file;
-    int c;
-{
-    unsigned have;
-    unsigned char buf[1];
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return -1;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* try writing to input buffer for speed (state->size == 0 if buffer not
-       initialized) */
-    if (state->size) {
-        if (strm->avail_in == 0)
-            strm->next_in = state->in;
-        have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
-        if (have < state->size) {
-            state->in[have] = c;
-            strm->avail_in++;
-            state->x.pos++;
-            return c & 0xff;
-        }
-    }
-
-    /* no room in buffer or not initialized, use gz_write() */
-    buf[0] = c;
-    if (gzwrite(file, buf, 1) != 1)
-        return -1;
-    return c & 0xff;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzputs(file, str)
-    gzFile file;
-    const char *str;
-{
-    int ret;
-    unsigned len;
-
-    /* write string */
-    len = (unsigned)strlen(str);
-    ret = gzwrite(file, str, len);
-    return ret == 0 && len != 0 ? -1 : ret;
-}
-
-#if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#include <stdarg.h>
-
-/* -- see zlib.h -- */
-int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
-{
-    int size, len;
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
-
-    /* make sure we have some buffer space */
-    if (state->size == 0 && gz_init(state) == -1)
-        return 0;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return 0;
-    }
-
-    /* consume whatever's left in the input buffer */
-    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-        return 0;
-
-    /* do the printf() into the input buffer, put length in len */
-    size = (int)(state->size);
-    state->in[size - 1] = 0;
-#ifdef NO_vsnprintf
-#  ifdef HAS_vsprintf_void
-    (void)vsprintf((char *)(state->in), format, va);
-    for (len = 0; len < size; len++)
-        if (state->in[len] == 0) break;
-#  else
-    len = vsprintf((char *)(state->in), format, va);
-#  endif
-#else
-#  ifdef HAS_vsnprintf_void
-    (void)vsnprintf((char *)(state->in), size, format, va);
-    len = strlen((char *)(state->in));
-#  else
-    len = vsnprintf((char *)(state->in), size, format, va);
-#  endif
-#endif
-
-    /* check that printf() results fit in buffer */
-    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
-        return 0;
-
-    /* update buffer and position, defer compression until needed */
-    strm->avail_in = (unsigned)len;
-    strm->next_in = state->in;
-    state->x.pos += len;
-    return len;
-}
-
-int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
-{
-    va_list va;
-    int ret;
-
-    va_start(va, format);
-    ret = gzvprintf(file, format, va);
-    va_end(va);
-    return ret;
-}
-
-#else /* !STDC && !Z_HAVE_STDARG_H */
-
-/* -- see zlib.h -- */
-int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
-                       a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
-    gzFile file;
-    const char *format;
-    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
-        a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
-{
-    int size, len;
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that can really pass pointer in ints */
-    if (sizeof(int) != sizeof(void *))
-        return 0;
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return 0;
-
-    /* make sure we have some buffer space */
-    if (state->size == 0 && gz_init(state) == -1)
-        return 0;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return 0;
-    }
-
-    /* consume whatever's left in the input buffer */
-    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
-        return 0;
-
-    /* do the printf() into the input buffer, put length in len */
-    size = (int)(state->size);
-    state->in[size - 1] = 0;
-#ifdef NO_snprintf
-#  ifdef HAS_sprintf_void
-    sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
-            a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    for (len = 0; len < size; len++)
-        if (state->in[len] == 0) break;
-#  else
-    len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
-                  a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-#  endif
-#else
-#  ifdef HAS_snprintf_void
-    snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
-             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
-    len = strlen((char *)(state->in));
-#  else
-    len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
-                   a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
-                   a19, a20);
-#  endif
-#endif
-
-    /* check that printf() results fit in buffer */
-    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
-        return 0;
-
-    /* update buffer and position, defer compression until needed */
-    strm->avail_in = (unsigned)len;
-    strm->next_in = state->in;
-    state->x.pos += len;
-    return len;
-}
-
-#endif
-
-/* -- see zlib.h -- */
-int ZEXPORT gzflush(file, flush)
-    gzFile file;
-    int flush;
-{
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return -1;
-    state = (gz_statep)file;
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return Z_STREAM_ERROR;
-
-    /* check flush parameter */
-    if (flush < 0 || flush > Z_FINISH)
-        return Z_STREAM_ERROR;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* compress remaining data with requested flush */
-    gz_comp(state, flush);
-    return state->err;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzsetparams(file, level, strategy)
-    gzFile file;
-    int level;
-    int strategy;
-{
-    gz_statep state;
-    z_streamp strm;
-
-    /* get internal structure */
-    if (file == NULL)
-        return Z_STREAM_ERROR;
-    state = (gz_statep)file;
-    strm = &(state->strm);
-
-    /* check that we're writing and that there's no error */
-    if (state->mode != GZ_WRITE || state->err != Z_OK)
-        return Z_STREAM_ERROR;
-
-    /* if no change is requested, then do nothing */
-    if (level == state->level && strategy == state->strategy)
-        return Z_OK;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            return -1;
-    }
-
-    /* change compression parameters for subsequent input */
-    if (state->size) {
-        /* flush previous input with previous parameters before changing */
-        if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
-            return state->err;
-        deflateParams(strm, level, strategy);
-    }
-    state->level = level;
-    state->strategy = strategy;
-    return Z_OK;
-}
-
-/* -- see zlib.h -- */
-int ZEXPORT gzclose_w(file)
-    gzFile file;
-{
-    int ret = Z_OK;
-    gz_statep state;
-
-    /* get internal structure */
-    if (file == NULL)
-        return Z_STREAM_ERROR;
-    state = (gz_statep)file;
-
-    /* check that we're writing */
-    if (state->mode != GZ_WRITE)
-        return Z_STREAM_ERROR;
-
-    /* check for seek request */
-    if (state->seek) {
-        state->seek = 0;
-        if (gz_zero(state, state->skip) == -1)
-            ret = state->err;
-    }
-
-    /* flush, free memory, and close file */
-    if (gz_comp(state, Z_FINISH) == -1)
-        ret = state->err;
-    if (state->size) {
-        if (!state->direct) {
-            (void)deflateEnd(&(state->strm));
-            free(state->out);
-        }
-        free(state->in);
-    }
-    gz_error(state, Z_OK, NULL);
-    free(state->path);
-    if (close(state->fd) == -1)
-        ret = Z_ERRNO;
-    free(state);
-    return ret;
-}
--- a/DoConfig/fltk/zlib/infback.c
+++ /dev/null
@@ -1,640 +1,0 @@
-/* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2011 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
-   This code is largely copied from inflate.c.  Normally either infback.o or
-   inflate.o would be linked into an application--not both.  The interface
-   with inffast.c is retained so that optimized assembler-coded versions of
-   inflate_fast() can be used with either inflate.c or infback.c.
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-/* function prototypes */
-local void fixedtables OF((struct inflate_state FAR *state));
-
-/*
-   strm provides memory allocation functions in zalloc and zfree, or
-   Z_NULL to use the library memory allocation functions.
-
-   windowBits is in the range 8..15, and window is a user-supplied
-   window and output buffer that is 2**windowBits bytes.
- */
-int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
-z_streamp strm;
-int windowBits;
-unsigned char FAR *window;
-const char *version;
-int stream_size;
-{
-    struct inflate_state FAR *state;
-
-    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
-        stream_size != (int)(sizeof(z_stream)))
-        return Z_VERSION_ERROR;
-    if (strm == Z_NULL || window == Z_NULL ||
-        windowBits < 8 || windowBits > 15)
-        return Z_STREAM_ERROR;
-    strm->msg = Z_NULL;                 /* in case we return an error */
-    if (strm->zalloc == (alloc_func)0) {
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-#endif
-    }
-    if (strm->zfree == (free_func)0)
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-    strm->zfree = zcfree;
-#endif
-    state = (struct inflate_state FAR *)ZALLOC(strm, 1,
-                                               sizeof(struct inflate_state));
-    if (state == Z_NULL) return Z_MEM_ERROR;
-    Tracev((stderr, "inflate: allocated\n"));
-    strm->state = (struct internal_state FAR *)state;
-    state->dmax = 32768U;
-    state->wbits = windowBits;
-    state->wsize = 1U << windowBits;
-    state->window = window;
-    state->wnext = 0;
-    state->whave = 0;
-    return Z_OK;
-}
-
-/*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables(state)
-struct inflate_state FAR *state;
-{
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
-/* Macros for inflateBack(): */
-
-/* Load returned state from inflate_fast() */
-#define LOAD() \
-    do { \
-        put = strm->next_out; \
-        left = strm->avail_out; \
-        next = strm->next_in; \
-        have = strm->avail_in; \
-        hold = state->hold; \
-        bits = state->bits; \
-    } while (0)
-
-/* Set state from registers for inflate_fast() */
-#define RESTORE() \
-    do { \
-        strm->next_out = put; \
-        strm->avail_out = left; \
-        strm->next_in = next; \
-        strm->avail_in = have; \
-        state->hold = hold; \
-        state->bits = bits; \
-    } while (0)
-
-/* Clear the input bit accumulator */
-#define INITBITS() \
-    do { \
-        hold = 0; \
-        bits = 0; \
-    } while (0)
-
-/* Assure that some input is available.  If input is requested, but denied,
-   then return a Z_BUF_ERROR from inflateBack(). */
-#define PULL() \
-    do { \
-        if (have == 0) { \
-            have = in(in_desc, &next); \
-            if (have == 0) { \
-                next = Z_NULL; \
-                ret = Z_BUF_ERROR; \
-                goto inf_leave; \
-            } \
-        } \
-    } while (0)
-
-/* Get a byte of input into the bit accumulator, or return from inflateBack()
-   with an error if there is no input available. */
-#define PULLBYTE() \
-    do { \
-        PULL(); \
-        have--; \
-        hold += (unsigned long)(*next++) << bits; \
-        bits += 8; \
-    } while (0)
-
-/* Assure that there are at least n bits in the bit accumulator.  If there is
-   not enough available input to do that, then return from inflateBack() with
-   an error. */
-#define NEEDBITS(n) \
-    do { \
-        while (bits < (unsigned)(n)) \
-            PULLBYTE(); \
-    } while (0)
-
-/* Return the low n bits of the bit accumulator (n < 16) */
-#define BITS(n) \
-    ((unsigned)hold & ((1U << (n)) - 1))
-
-/* Remove n bits from the bit accumulator */
-#define DROPBITS(n) \
-    do { \
-        hold >>= (n); \
-        bits -= (unsigned)(n); \
-    } while (0)
-
-/* Remove zero to seven bits as needed to go to a byte boundary */
-#define BYTEBITS() \
-    do { \
-        hold >>= bits & 7; \
-        bits -= bits & 7; \
-    } while (0)
-
-/* Assure that some output space is available, by writing out the window
-   if it's full.  If the write fails, return from inflateBack() with a
-   Z_BUF_ERROR. */
-#define ROOM() \
-    do { \
-        if (left == 0) { \
-            put = state->window; \
-            left = state->wsize; \
-            state->whave = left; \
-            if (out(out_desc, put, left)) { \
-                ret = Z_BUF_ERROR; \
-                goto inf_leave; \
-            } \
-        } \
-    } while (0)
-
-/*
-   strm provides the memory allocation functions and window buffer on input,
-   and provides information on the unused input on return.  For Z_DATA_ERROR
-   returns, strm will also provide an error message.
-
-   in() and out() are the call-back input and output functions.  When
-   inflateBack() needs more input, it calls in().  When inflateBack() has
-   filled the window with output, or when it completes with data in the
-   window, it calls out() to write out the data.  The application must not
-   change the provided input until in() is called again or inflateBack()
-   returns.  The application must not change the window/output buffer until
-   inflateBack() returns.
-
-   in() and out() are called with a descriptor parameter provided in the
-   inflateBack() call.  This parameter can be a structure that provides the
-   information required to do the read or write, as well as accumulated
-   information on the input and output such as totals and check values.
-
-   in() should return zero on failure.  out() should return non-zero on
-   failure.  If either in() or out() fails, than inflateBack() returns a
-   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
-   was in() or out() that caused in the error.  Otherwise,  inflateBack()
-   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
-   error, or Z_MEM_ERROR if it could not allocate memory for the state.
-   inflateBack() can also return Z_STREAM_ERROR if the input parameters
-   are not correct, i.e. strm is Z_NULL or the state was not initialized.
- */
-int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
-z_streamp strm;
-in_func in;
-void FAR *in_desc;
-out_func out;
-void FAR *out_desc;
-{
-    struct inflate_state FAR *state;
-    z_const unsigned char FAR *next;    /* next input */
-    unsigned char FAR *put;     /* next output */
-    unsigned have, left;        /* available input and output */
-    unsigned long hold;         /* bit buffer */
-    unsigned bits;              /* bits in bit buffer */
-    unsigned copy;              /* number of stored or match bytes to copy */
-    unsigned char FAR *from;    /* where to copy match bytes from */
-    code here;                  /* current decoding table entry */
-    code last;                  /* parent table entry */
-    unsigned len;               /* length to copy for repeats, bits to drop */
-    int ret;                    /* return code */
-    static const unsigned short order[19] = /* permutation of code lengths */
-        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-    /* Check that the strm exists and that the state was initialized */
-    if (strm == Z_NULL || strm->state == Z_NULL)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* Reset the state */
-    strm->msg = Z_NULL;
-    state->mode = TYPE;
-    state->last = 0;
-    state->whave = 0;
-    next = strm->next_in;
-    have = next != Z_NULL ? strm->avail_in : 0;
-    hold = 0;
-    bits = 0;
-    put = state->window;
-    left = state->wsize;
-
-    /* Inflate until end of block marked as last */
-    for (;;)
-        switch (state->mode) {
-        case TYPE:
-            /* determine and dispatch block type */
-            if (state->last) {
-                BYTEBITS();
-                state->mode = DONE;
-                break;
-            }
-            NEEDBITS(3);
-            state->last = BITS(1);
-            DROPBITS(1);
-            switch (BITS(2)) {
-            case 0:                             /* stored block */
-                Tracev((stderr, "inflate:     stored block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = STORED;
-                break;
-            case 1:                             /* fixed block */
-                fixedtables(state);
-                Tracev((stderr, "inflate:     fixed codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = LEN;              /* decode codes */
-                break;
-            case 2:                             /* dynamic block */
-                Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = TABLE;
-                break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
-                state->mode = BAD;
-            }
-            DROPBITS(2);
-            break;
-
-        case STORED:
-            /* get and verify stored block length */
-            BYTEBITS();                         /* go to byte boundary */
-            NEEDBITS(32);
-            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
-                state->mode = BAD;
-                break;
-            }
-            state->length = (unsigned)hold & 0xffff;
-            Tracev((stderr, "inflate:       stored length %u\n",
-                    state->length));
-            INITBITS();
-
-            /* copy stored block from input to output */
-            while (state->length != 0) {
-                copy = state->length;
-                PULL();
-                ROOM();
-                if (copy > have) copy = have;
-                if (copy > left) copy = left;
-                zmemcpy(put, next, copy);
-                have -= copy;
-                next += copy;
-                left -= copy;
-                put += copy;
-                state->length -= copy;
-            }
-            Tracev((stderr, "inflate:       stored end\n"));
-            state->mode = TYPE;
-            break;
-
-        case TABLE:
-            /* get dynamic table entries descriptor */
-            NEEDBITS(14);
-            state->nlen = BITS(5) + 257;
-            DROPBITS(5);
-            state->ndist = BITS(5) + 1;
-            DROPBITS(5);
-            state->ncode = BITS(4) + 4;
-            DROPBITS(4);
-#ifndef PKZIP_BUG_WORKAROUND
-            if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            Tracev((stderr, "inflate:       table sizes ok\n"));
-
-            /* get code length code lengths (not a typo) */
-            state->have = 0;
-            while (state->have < state->ncode) {
-                NEEDBITS(3);
-                state->lens[order[state->have++]] = (unsigned short)BITS(3);
-                DROPBITS(3);
-            }
-            while (state->have < 19)
-                state->lens[order[state->have++]] = 0;
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 7;
-            ret = inflate_table(CODES, state->lens, 19, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       code lengths ok\n"));
-
-            /* get length and distance code code lengths */
-            state->have = 0;
-            while (state->have < state->nlen + state->ndist) {
-                for (;;) {
-                    here = state->lencode[BITS(state->lenbits)];
-                    if ((unsigned)(here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                if (here.val < 16) {
-                    DROPBITS(here.bits);
-                    state->lens[state->have++] = here.val;
-                }
-                else {
-                    if (here.val == 16) {
-                        NEEDBITS(here.bits + 2);
-                        DROPBITS(here.bits);
-                        if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
-                            state->mode = BAD;
-                            break;
-                        }
-                        len = (unsigned)(state->lens[state->have - 1]);
-                        copy = 3 + BITS(2);
-                        DROPBITS(2);
-                    }
-                    else if (here.val == 17) {
-                        NEEDBITS(here.bits + 3);
-                        DROPBITS(here.bits);
-                        len = 0;
-                        copy = 3 + BITS(3);
-                        DROPBITS(3);
-                    }
-                    else {
-                        NEEDBITS(here.bits + 7);
-                        DROPBITS(here.bits);
-                        len = 0;
-                        copy = 11 + BITS(7);
-                        DROPBITS(7);
-                    }
-                    if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
-                        state->mode = BAD;
-                        break;
-                    }
-                    while (copy--)
-                        state->lens[state->have++] = (unsigned short)len;
-                }
-            }
-
-            /* handle error breaks in while */
-            if (state->mode == BAD) break;
-
-            /* check for end-of-block code (better have one) */
-            if (state->lens[256] == 0) {
-                strm->msg = (char *)"invalid code -- missing end-of-block";
-                state->mode = BAD;
-                break;
-            }
-
-            /* build code tables -- note: do not change the lenbits or distbits
-               values here (9 and 6) without reading the comments in inftrees.h
-               concerning the ENOUGH constants, which depend on those values */
-            state->next = state->codes;
-            state->lencode = (code const FAR *)(state->next);
-            state->lenbits = 9;
-            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
-                state->mode = BAD;
-                break;
-            }
-            state->distcode = (code const FAR *)(state->next);
-            state->distbits = 6;
-            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
-                            &(state->next), &(state->distbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid distances set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       codes ok\n"));
-            state->mode = LEN;
-
-        case LEN:
-            /* use inflate_fast() if we have enough input and output */
-            if (have >= 6 && left >= 258) {
-                RESTORE();
-                if (state->whave < state->wsize)
-                    state->whave = state->wsize - left;
-                inflate_fast(strm, state->wsize);
-                LOAD();
-                break;
-            }
-
-            /* get a literal, length, or end-of-block code */
-            for (;;) {
-                here = state->lencode[BITS(state->lenbits)];
-                if ((unsigned)(here.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if (here.op && (here.op & 0xf0) == 0) {
-                last = here;
-                for (;;) {
-                    here = state->lencode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(here.bits);
-            state->length = (unsigned)here.val;
-
-            /* process literal */
-            if (here.op == 0) {
-                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
-                        "inflate:         literal '%c'\n" :
-                        "inflate:         literal 0x%02x\n", here.val));
-                ROOM();
-                *put++ = (unsigned char)(state->length);
-                left--;
-                state->mode = LEN;
-                break;
-            }
-
-            /* process end of block */
-            if (here.op & 32) {
-                Tracevv((stderr, "inflate:         end of block\n"));
-                state->mode = TYPE;
-                break;
-            }
-
-            /* invalid code */
-            if (here.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
-                state->mode = BAD;
-                break;
-            }
-
-            /* length code -- get extra bits, if any */
-            state->extra = (unsigned)(here.op) & 15;
-            if (state->extra != 0) {
-                NEEDBITS(state->extra);
-                state->length += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-            Tracevv((stderr, "inflate:         length %u\n", state->length));
-
-            /* get distance code */
-            for (;;) {
-                here = state->distcode[BITS(state->distbits)];
-                if ((unsigned)(here.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if ((here.op & 0xf0) == 0) {
-                last = here;
-                for (;;) {
-                    here = state->distcode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-            }
-            DROPBITS(here.bits);
-            if (here.op & 64) {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-            state->offset = (unsigned)here.val;
-
-            /* get distance extra bits, if any */
-            state->extra = (unsigned)(here.op) & 15;
-            if (state->extra != 0) {
-                NEEDBITS(state->extra);
-                state->offset += BITS(state->extra);
-                DROPBITS(state->extra);
-            }
-            if (state->offset > state->wsize - (state->whave < state->wsize ?
-                                                left : 0)) {
-                strm->msg = (char *)"invalid distance too far back";
-                state->mode = BAD;
-                break;
-            }
-            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
-
-            /* copy match from window to output */
-            do {
-                ROOM();
-                copy = state->wsize - state->offset;
-                if (copy < left) {
-                    from = put + copy;
-                    copy = left - copy;
-                }
-                else {
-                    from = put - state->offset;
-                    copy = left;
-                }
-                if (copy > state->length) copy = state->length;
-                state->length -= copy;
-                left -= copy;
-                do {
-                    *put++ = *from++;
-                } while (--copy);
-            } while (state->length != 0);
-            break;
-
-        case DONE:
-            /* inflate stream terminated properly -- write leftover output */
-            ret = Z_STREAM_END;
-            if (left < state->wsize) {
-                if (out(out_desc, state->window, state->wsize - left))
-                    ret = Z_BUF_ERROR;
-            }
-            goto inf_leave;
-
-        case BAD:
-            ret = Z_DATA_ERROR;
-            goto inf_leave;
-
-        default:                /* can't happen, but makes compilers happy */
-            ret = Z_STREAM_ERROR;
-            goto inf_leave;
-        }
-
-    /* Return unused input */
-  inf_leave:
-    strm->next_in = next;
-    strm->avail_in = have;
-    return ret;
-}
-
-int ZEXPORT inflateBackEnd(strm)
-z_streamp strm;
-{
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-    Tracev((stderr, "inflate: end\n"));
-    return Z_OK;
-}
--- a/DoConfig/fltk/zlib/inffast.c
+++ /dev/null
@@ -1,340 +1,0 @@
-/* inffast.c -- fast decoding
- * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-#ifndef ASMINF
-
-/* Allow machine dependent optimization for post-increment or pre-increment.
-   Based on testing to date,
-   Pre-increment preferred for:
-   - PowerPC G3 (Adler)
-   - MIPS R5000 (Randers-Pehrson)
-   Post-increment preferred for:
-   - none
-   No measurable difference:
-   - Pentium III (Anderson)
-   - M68060 (Nikl)
- */
-#ifdef POSTINC
-#  define OFF 0
-#  define PUP(a) *(a)++
-#else
-#  define OFF 1
-#  define PUP(a) *++(a)
-#endif
-
-/*
-   Decode literal, length, and distance codes and write out the resulting
-   literal and match bytes until either not enough input or output is
-   available, an end-of-block is encountered, or a data error is encountered.
-   When large enough input and output buffers are supplied to inflate(), for
-   example, a 16K input buffer and a 64K output buffer, more than 95% of the
-   inflate execution time is spent in this routine.
-
-   Entry assumptions:
-
-        state->mode == LEN
-        strm->avail_in >= 6
-        strm->avail_out >= 258
-        start >= strm->avail_out
-        state->bits < 8
-
-   On return, state->mode is one of:
-
-        LEN -- ran out of enough output space or enough available input
-        TYPE -- reached end of block code, inflate() to interpret next block
-        BAD -- error in block data
-
-   Notes:
-
-    - The maximum input bits used by a length/distance pair is 15 bits for the
-      length code, 5 bits for the length extra, 15 bits for the distance code,
-      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
-      Therefore if strm->avail_in >= 6, then there is enough input to avoid
-      checking for available input while decoding.
-
-    - The maximum bytes that a single length/distance pair can output is 258
-      bytes, which is the maximum length that can be coded.  inflate_fast()
-      requires strm->avail_out >= 258 for each loop to avoid checking for
-      output space.
- */
-void ZLIB_INTERNAL inflate_fast(strm, start)
-z_streamp strm;
-unsigned start;         /* inflate()'s starting value for strm->avail_out */
-{
-    struct inflate_state FAR *state;
-    z_const unsigned char FAR *in;      /* local strm->next_in */
-    z_const unsigned char FAR *last;    /* have enough input while in < last */
-    unsigned char FAR *out;     /* local strm->next_out */
-    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
-    unsigned char FAR *end;     /* while out < end, enough space available */
-#ifdef INFLATE_STRICT
-    unsigned dmax;              /* maximum distance from zlib header */
-#endif
-    unsigned wsize;             /* window size or zero if not using window */
-    unsigned whave;             /* valid bytes in the window */
-    unsigned wnext;             /* window write index */
-    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
-    unsigned long hold;         /* local strm->hold */
-    unsigned bits;              /* local strm->bits */
-    code const FAR *lcode;      /* local strm->lencode */
-    code const FAR *dcode;      /* local strm->distcode */
-    unsigned lmask;             /* mask for first level of length codes */
-    unsigned dmask;             /* mask for first level of distance codes */
-    code here;                  /* retrieved table entry */
-    unsigned op;                /* code bits, operation, extra bits, or */
-                                /*  window position, window bytes to copy */
-    unsigned len;               /* match length, unused bytes */
-    unsigned dist;              /* match distance */
-    unsigned char FAR *from;    /* where to copy match from */
-
-    /* copy state to local variables */
-    state = (struct inflate_state FAR *)strm->state;
-    in = strm->next_in - OFF;
-    last = in + (strm->avail_in - 5);
-    out = strm->next_out - OFF;
-    beg = out - (start - strm->avail_out);
-    end = out + (strm->avail_out - 257);
-#ifdef INFLATE_STRICT
-    dmax = state->dmax;
-#endif
-    wsize = state->wsize;
-    whave = state->whave;
-    wnext = state->wnext;
-    window = state->window;
-    hold = state->hold;
-    bits = state->bits;
-    lcode = state->lencode;
-    dcode = state->distcode;
-    lmask = (1U << state->lenbits) - 1;
-    dmask = (1U << state->distbits) - 1;
-
-    /* decode literals and length/distances until end-of-block or not enough
-       input data or output space */
-    do {
-        if (bits < 15) {
-            hold += (unsigned long)(PUP(in)) << bits;
-            bits += 8;
-            hold += (unsigned long)(PUP(in)) << bits;
-            bits += 8;
-        }
-        here = lcode[hold & lmask];
-      dolen:
-        op = (unsigned)(here.bits);
-        hold >>= op;
-        bits -= op;
-        op = (unsigned)(here.op);
-        if (op == 0) {                          /* literal */
-            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
-                    "inflate:         literal '%c'\n" :
-                    "inflate:         literal 0x%02x\n", here.val));
-            PUP(out) = (unsigned char)(here.val);
-        }
-        else if (op & 16) {                     /* length base */
-            len = (unsigned)(here.val);
-            op &= 15;                           /* number of extra bits */
-            if (op) {
-                if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
-                    bits += 8;
-                }
-                len += (unsigned)hold & ((1U << op) - 1);
-                hold >>= op;
-                bits -= op;
-            }
-            Tracevv((stderr, "inflate:         length %u\n", len));
-            if (bits < 15) {
-                hold += (unsigned long)(PUP(in)) << bits;
-                bits += 8;
-                hold += (unsigned long)(PUP(in)) << bits;
-                bits += 8;
-            }
-            here = dcode[hold & dmask];
-          dodist:
-            op = (unsigned)(here.bits);
-            hold >>= op;
-            bits -= op;
-            op = (unsigned)(here.op);
-            if (op & 16) {                      /* distance base */
-                dist = (unsigned)(here.val);
-                op &= 15;                       /* number of extra bits */
-                if (bits < op) {
-                    hold += (unsigned long)(PUP(in)) << bits;
-                    bits += 8;
-                    if (bits < op) {
-                        hold += (unsigned long)(PUP(in)) << bits;
-                        bits += 8;
-                    }
-                }
-                dist += (unsigned)hold & ((1U << op) - 1);
-#ifdef INFLATE_STRICT
-                if (dist > dmax) {
-                    strm->msg = (char *)"invalid distance too far back";
-                    state->mode = BAD;
-                    break;
-                }
-#endif
-                hold >>= op;
-                bits -= op;
-                Tracevv((stderr, "inflate:         distance %u\n", dist));
-                op = (unsigned)(out - beg);     /* max distance in output */
-                if (dist > op) {                /* see if copy from window */
-                    op = dist - op;             /* distance back in window */
-                    if (op > whave) {
-                        if (state->sane) {
-                            strm->msg =
-                                (char *)"invalid distance too far back";
-                            state->mode = BAD;
-                            break;
-                        }
-#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
-                        if (len <= op - whave) {
-                            do {
-                                PUP(out) = 0;
-                            } while (--len);
-                            continue;
-                        }
-                        len -= op - whave;
-                        do {
-                            PUP(out) = 0;
-                        } while (--op > whave);
-                        if (op == 0) {
-                            from = out - dist;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--len);
-                            continue;
-                        }
-#endif
-                    }
-                    from = window - OFF;
-                    if (wnext == 0) {           /* very common case */
-                        from += wsize - op;
-                        if (op < len) {         /* some from window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = out - dist;  /* rest from output */
-                        }
-                    }
-                    else if (wnext < op) {      /* wrap around window */
-                        from += wsize + wnext - op;
-                        op -= wnext;
-                        if (op < len) {         /* some from end of window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = window - OFF;
-                            if (wnext < len) {  /* some from start of window */
-                                op = wnext;
-                                len -= op;
-                                do {
-                                    PUP(out) = PUP(from);
-                                } while (--op);
-                                from = out - dist;      /* rest from output */
-                            }
-                        }
-                    }
-                    else {                      /* contiguous in window */
-                        from += wnext - op;
-                        if (op < len) {         /* some from window */
-                            len -= op;
-                            do {
-                                PUP(out) = PUP(from);
-                            } while (--op);
-                            from = out - dist;  /* rest from output */
-                        }
-                    }
-                    while (len > 2) {
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        len -= 3;
-                    }
-                    if (len) {
-                        PUP(out) = PUP(from);
-                        if (len > 1)
-                            PUP(out) = PUP(from);
-                    }
-                }
-                else {
-                    from = out - dist;          /* copy direct from output */
-                    do {                        /* minimum length is three */
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        PUP(out) = PUP(from);
-                        len -= 3;
-                    } while (len > 2);
-                    if (len) {
-                        PUP(out) = PUP(from);
-                        if (len > 1)
-                            PUP(out) = PUP(from);
-                    }
-                }
-            }
-            else if ((op & 64) == 0) {          /* 2nd level distance code */
-                here = dcode[here.val + (hold & ((1U << op) - 1))];
-                goto dodist;
-            }
-            else {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-        }
-        else if ((op & 64) == 0) {              /* 2nd level length code */
-            here = lcode[here.val + (hold & ((1U << op) - 1))];
-            goto dolen;
-        }
-        else if (op & 32) {                     /* end-of-block */
-            Tracevv((stderr, "inflate:         end of block\n"));
-            state->mode = TYPE;
-            break;
-        }
-        else {
-            strm->msg = (char *)"invalid literal/length code";
-            state->mode = BAD;
-            break;
-        }
-    } while (in < last && out < end);
-
-    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
-    len = bits >> 3;
-    in -= len;
-    bits -= len << 3;
-    hold &= (1U << bits) - 1;
-
-    /* update state and return */
-    strm->next_in = in + OFF;
-    strm->next_out = out + OFF;
-    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
-    strm->avail_out = (unsigned)(out < end ?
-                                 257 + (end - out) : 257 - (out - end));
-    state->hold = hold;
-    state->bits = bits;
-    return;
-}
-
-/*
-   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
-   - Using bit fields for code structure
-   - Different op definition to avoid & for extra bits (do & for table bits)
-   - Three separate decoding do-loops for direct, window, and wnext == 0
-   - Special case for distance > 1 copies to do overlapped load and store copy
-   - Explicit branch predictions (based on measured branch probabilities)
-   - Deferring match copy and interspersed it with decoding subsequent codes
-   - Swapping literal/length else
-   - Swapping window/direct else
-   - Larger unrolled copy loops (three is about right)
-   - Moving len -= 3 statement into middle of loop
- */
-
-#endif /* !ASMINF */
--- a/DoConfig/fltk/zlib/inffast.h
+++ /dev/null
@@ -1,11 +1,0 @@
-/* inffast.h -- header to use inffast.c
- * Copyright (C) 1995-2003, 2010 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
--- a/DoConfig/fltk/zlib/inffixed.h
+++ /dev/null
@@ -1,94 +1,0 @@
-    /* inffixed.h -- table for decoding fixed codes
-     * Generated automatically by makefixed().
-     */
-
-    /* WARNING: this file should *not* be used by applications.
-       It is part of the implementation of this library and is
-       subject to change. Applications should only use zlib.h.
-     */
-
-    static const code lenfix[512] = {
-        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
-        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
-        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
-        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
-        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
-        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
-        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
-        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
-        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
-        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
-        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
-        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
-        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
-        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
-        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
-        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
-        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
-        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
-        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
-        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
-        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
-        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
-        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
-        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
-        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
-        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
-        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
-        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
-        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
-        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
-        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
-        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
-        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
-        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
-        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
-        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
-        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
-        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
-        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
-        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
-        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
-        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
-        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
-        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
-        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
-        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
-        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
-        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
-        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
-        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
-        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
-        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
-        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
-        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
-        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
-        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
-        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
-        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
-        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
-        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
-        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
-        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
-        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
-        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
-        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
-        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
-        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
-        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
-        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
-        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
-        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
-        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
-        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
-        {0,9,255}
-    };
-
-    static const code distfix[32] = {
-        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
-        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
-        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
-        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
-        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
-        {22,5,193},{64,5,0}
-    };
--- a/DoConfig/fltk/zlib/inflate.c
+++ /dev/null
@@ -1,1512 +1,0 @@
-/* inflate.c -- zlib decompression
- * Copyright (C) 1995-2012 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- * Change history:
- *
- * 1.2.beta0    24 Nov 2002
- * - First version -- complete rewrite of inflate to simplify code, avoid
- *   creation of window when not needed, minimize use of window when it is
- *   needed, make inffast.c even faster, implement gzip decoding, and to
- *   improve code readability and style over the previous zlib inflate code
- *
- * 1.2.beta1    25 Nov 2002
- * - Use pointers for available input and output checking in inffast.c
- * - Remove input and output counters in inffast.c
- * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
- * - Remove unnecessary second byte pull from length extra in inffast.c
- * - Unroll direct copy to three copies per loop in inffast.c
- *
- * 1.2.beta2    4 Dec 2002
- * - Change external routine names to reduce potential conflicts
- * - Correct filename to inffixed.h for fixed tables in inflate.c
- * - Make hbuf[] unsigned char to match parameter type in inflate.c
- * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
- *   to avoid negation problem on Alphas (64 bit) in inflate.c
- *
- * 1.2.beta3    22 Dec 2002
- * - Add comments on state->bits assertion in inffast.c
- * - Add comments on op field in inftrees.h
- * - Fix bug in reuse of allocated window after inflateReset()
- * - Remove bit fields--back to byte structure for speed
- * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
- * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
- * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
- * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
- * - Use local copies of stream next and avail values, as well as local bit
- *   buffer and bit count in inflate()--for speed when inflate_fast() not used
- *
- * 1.2.beta4    1 Jan 2003
- * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
- * - Move a comment on output buffer sizes from inffast.c to inflate.c
- * - Add comments in inffast.c to introduce the inflate_fast() routine
- * - Rearrange window copies in inflate_fast() for speed and simplification
- * - Unroll last copy for window match in inflate_fast()
- * - Use local copies of window variables in inflate_fast() for speed
- * - Pull out common wnext == 0 case for speed in inflate_fast()
- * - Make op and len in inflate_fast() unsigned for consistency
- * - Add FAR to lcode and dcode declarations in inflate_fast()
- * - Simplified bad distance check in inflate_fast()
- * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
- *   source file infback.c to provide a call-back interface to inflate for
- *   programs like gzip and unzip -- uses window as output buffer to avoid
- *   window copying
- *
- * 1.2.beta5    1 Jan 2003
- * - Improved inflateBack() interface to allow the caller to provide initial
- *   input in strm.
- * - Fixed stored blocks bug in inflateBack()
- *
- * 1.2.beta6    4 Jan 2003
- * - Added comments in inffast.c on effectiveness of POSTINC
- * - Typecasting all around to reduce compiler warnings
- * - Changed loops from while (1) or do {} while (1) to for (;;), again to
- *   make compilers happy
- * - Changed type of window in inflateBackInit() to unsigned char *
- *
- * 1.2.beta7    27 Jan 2003
- * - Changed many types to unsigned or unsigned short to avoid warnings
- * - Added inflateCopy() function
- *
- * 1.2.0        9 Mar 2003
- * - Changed inflateBack() interface to provide separate opaque descriptors
- *   for the in() and out() functions
- * - Changed inflateBack() argument and in_func typedef to swap the length
- *   and buffer address return values for the input function
- * - Check next_in and next_out for Z_NULL on entry to inflate()
- *
- * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-#include "inflate.h"
-#include "inffast.h"
-
-#ifdef MAKEFIXED
-#  ifndef BUILDFIXED
-#    define BUILDFIXED
-#  endif
-#endif
-
-/* function prototypes */
-local void fixedtables OF((struct inflate_state FAR *state));
-local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
-                           unsigned copy));
-#ifdef BUILDFIXED
-   void makefixed OF((void));
-#endif
-local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
-                              unsigned len));
-
-int ZEXPORT inflateResetKeep(strm)
-z_streamp strm;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    strm->total_in = strm->total_out = state->total = 0;
-    strm->msg = Z_NULL;
-    if (state->wrap)        /* to support ill-conceived Java test suite */
-        strm->adler = state->wrap & 1;
-    state->mode = HEAD;
-    state->last = 0;
-    state->havedict = 0;
-    state->dmax = 32768U;
-    state->head = Z_NULL;
-    state->hold = 0;
-    state->bits = 0;
-    state->lencode = state->distcode = state->next = state->codes;
-    state->sane = 1;
-    state->back = -1;
-    Tracev((stderr, "inflate: reset\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflateReset(strm)
-z_streamp strm;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    state->wsize = 0;
-    state->whave = 0;
-    state->wnext = 0;
-    return inflateResetKeep(strm);
-}
-
-int ZEXPORT inflateReset2(strm, windowBits)
-z_streamp strm;
-int windowBits;
-{
-    int wrap;
-    struct inflate_state FAR *state;
-
-    /* get the state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* extract wrap request from windowBits parameter */
-    if (windowBits < 0) {
-        wrap = 0;
-        windowBits = -windowBits;
-    }
-    else {
-        wrap = (windowBits >> 4) + 1;
-#ifdef GUNZIP
-        if (windowBits < 48)
-            windowBits &= 15;
-#endif
-    }
-
-    /* set number of window bits, free window if different */
-    if (windowBits && (windowBits < 8 || windowBits > 15))
-        return Z_STREAM_ERROR;
-    if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
-        ZFREE(strm, state->window);
-        state->window = Z_NULL;
-    }
-
-    /* update state and reset the rest of it */
-    state->wrap = wrap;
-    state->wbits = (unsigned)windowBits;
-    return inflateReset(strm);
-}
-
-int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
-z_streamp strm;
-int windowBits;
-const char *version;
-int stream_size;
-{
-    int ret;
-    struct inflate_state FAR *state;
-
-    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
-        stream_size != (int)(sizeof(z_stream)))
-        return Z_VERSION_ERROR;
-    if (strm == Z_NULL) return Z_STREAM_ERROR;
-    strm->msg = Z_NULL;                 /* in case we return an error */
-    if (strm->zalloc == (alloc_func)0) {
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-        strm->zalloc = zcalloc;
-        strm->opaque = (voidpf)0;
-#endif
-    }
-    if (strm->zfree == (free_func)0)
-#ifdef Z_SOLO
-        return Z_STREAM_ERROR;
-#else
-        strm->zfree = zcfree;
-#endif
-    state = (struct inflate_state FAR *)
-            ZALLOC(strm, 1, sizeof(struct inflate_state));
-    if (state == Z_NULL) return Z_MEM_ERROR;
-    Tracev((stderr, "inflate: allocated\n"));
-    strm->state = (struct internal_state FAR *)state;
-    state->window = Z_NULL;
-    ret = inflateReset2(strm, windowBits);
-    if (ret != Z_OK) {
-        ZFREE(strm, state);
-        strm->state = Z_NULL;
-    }
-    return ret;
-}
-
-int ZEXPORT inflateInit_(strm, version, stream_size)
-z_streamp strm;
-const char *version;
-int stream_size;
-{
-    return inflateInit2_(strm, DEF_WBITS, version, stream_size);
-}
-
-int ZEXPORT inflatePrime(strm, bits, value)
-z_streamp strm;
-int bits;
-int value;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (bits < 0) {
-        state->hold = 0;
-        state->bits = 0;
-        return Z_OK;
-    }
-    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
-    value &= (1L << bits) - 1;
-    state->hold += value << state->bits;
-    state->bits += bits;
-    return Z_OK;
-}
-
-/*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables(state)
-struct inflate_state FAR *state;
-{
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
-#ifdef MAKEFIXED
-#include <stdio.h>
-
-/*
-   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
-   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
-   those tables to stdout, which would be piped to inffixed.h.  A small program
-   can simply call makefixed to do this:
-
-    void makefixed(void);
-
-    int main(void)
-    {
-        makefixed();
-        return 0;
-    }
-
-   Then that can be linked with zlib built with MAKEFIXED defined and run:
-
-    a.out > inffixed.h
- */
-void makefixed()
-{
-    unsigned low, size;
-    struct inflate_state state;
-
-    fixedtables(&state);
-    puts("    /* inffixed.h -- table for decoding fixed codes");
-    puts("     * Generated automatically by makefixed().");
-    puts("     */");
-    puts("");
-    puts("    /* WARNING: this file should *not* be used by applications.");
-    puts("       It is part of the implementation of this library and is");
-    puts("       subject to change. Applications should only use zlib.h.");
-    puts("     */");
-    puts("");
-    size = 1U << 9;
-    printf("    static const code lenfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 7) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
-               state.lencode[low].bits, state.lencode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-    size = 1U << 5;
-    printf("\n    static const code distfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 6) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
-               state.distcode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-}
-#endif /* MAKEFIXED */
-
-/*
-   Update the window with the last wsize (normally 32K) bytes written before
-   returning.  If window does not exist yet, create it.  This is only called
-   when a window is already in use, or when output has been written during this
-   inflate call, but the end of the deflate stream has not been reached yet.
-   It is also called to create a window for dictionary data when a dictionary
-   is loaded.
-
-   Providing output buffers larger than 32K to inflate() should provide a speed
-   advantage, since only the last 32K of output is copied to the sliding window
-   upon return from inflate(), and since all distances after the first 32K of
-   output will fall in the output data, making match copies simpler and faster.
-   The advantage may be dependent on the size of the processor's data caches.
- */
-local int updatewindow(strm, end, copy)
-z_streamp strm;
-const Bytef *end;
-unsigned copy;
-{
-    struct inflate_state FAR *state;
-    unsigned dist;
-
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* if it hasn't been done already, allocate space for the window */
-    if (state->window == Z_NULL) {
-        state->window = (unsigned char FAR *)
-                        ZALLOC(strm, 1U << state->wbits,
-                               sizeof(unsigned char));
-        if (state->window == Z_NULL) return 1;
-    }
-
-    /* if window not in use yet, initialize */
-    if (state->wsize == 0) {
-        state->wsize = 1U << state->wbits;
-        state->wnext = 0;
-        state->whave = 0;
-    }
-
-    /* copy state->wsize or less output bytes into the circular window */
-    if (copy >= state->wsize) {
-        zmemcpy(state->window, end - state->wsize, state->wsize);
-        state->wnext = 0;
-        state->whave = state->wsize;
-    }
-    else {
-        dist = state->wsize - state->wnext;
-        if (dist > copy) dist = copy;
-        zmemcpy(state->window + state->wnext, end - copy, dist);
-        copy -= dist;
-        if (copy) {
-            zmemcpy(state->window, end - copy, copy);
-            state->wnext = copy;
-            state->whave = state->wsize;
-        }
-        else {
-            state->wnext += dist;
-            if (state->wnext == state->wsize) state->wnext = 0;
-            if (state->whave < state->wsize) state->whave += dist;
-        }
-    }
-    return 0;
-}
-
-/* Macros for inflate(): */
-
-/* check function to use adler32() for zlib or crc32() for gzip */
-#ifdef GUNZIP
-#  define UPDATE(check, buf, len) \
-    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
-#else
-#  define UPDATE(check, buf, len) adler32(check, buf, len)
-#endif
-
-/* check macros for header crc */
-#ifdef GUNZIP
-#  define CRC2(check, word) \
-    do { \
-        hbuf[0] = (unsigned char)(word); \
-        hbuf[1] = (unsigned char)((word) >> 8); \
-        check = crc32(check, hbuf, 2); \
-    } while (0)
-
-#  define CRC4(check, word) \
-    do { \
-        hbuf[0] = (unsigned char)(word); \
-        hbuf[1] = (unsigned char)((word) >> 8); \
-        hbuf[2] = (unsigned char)((word) >> 16); \
-        hbuf[3] = (unsigned char)((word) >> 24); \
-        check = crc32(check, hbuf, 4); \
-    } while (0)
-#endif
-
-/* Load registers with state in inflate() for speed */
-#define LOAD() \
-    do { \
-        put = strm->next_out; \
-        left = strm->avail_out; \
-        next = strm->next_in; \
-        have = strm->avail_in; \
-        hold = state->hold; \
-        bits = state->bits; \
-    } while (0)
-
-/* Restore state from registers in inflate() */
-#define RESTORE() \
-    do { \
-        strm->next_out = put; \
-        strm->avail_out = left; \
-        strm->next_in = next; \
-        strm->avail_in = have; \
-        state->hold = hold; \
-        state->bits = bits; \
-    } while (0)
-
-/* Clear the input bit accumulator */
-#define INITBITS() \
-    do { \
-        hold = 0; \
-        bits = 0; \
-    } while (0)
-
-/* Get a byte of input into the bit accumulator, or return from inflate()
-   if there is no input available. */
-#define PULLBYTE() \
-    do { \
-        if (have == 0) goto inf_leave; \
-        have--; \
-        hold += (unsigned long)(*next++) << bits; \
-        bits += 8; \
-    } while (0)
-
-/* Assure that there are at least n bits in the bit accumulator.  If there is
-   not enough available input to do that, then return from inflate(). */
-#define NEEDBITS(n) \
-    do { \
-        while (bits < (unsigned)(n)) \
-            PULLBYTE(); \
-    } while (0)
-
-/* Return the low n bits of the bit accumulator (n < 16) */
-#define BITS(n) \
-    ((unsigned)hold & ((1U << (n)) - 1))
-
-/* Remove n bits from the bit accumulator */
-#define DROPBITS(n) \
-    do { \
-        hold >>= (n); \
-        bits -= (unsigned)(n); \
-    } while (0)
-
-/* Remove zero to seven bits as needed to go to a byte boundary */
-#define BYTEBITS() \
-    do { \
-        hold >>= bits & 7; \
-        bits -= bits & 7; \
-    } while (0)
-
-/*
-   inflate() uses a state machine to process as much input data and generate as
-   much output data as possible before returning.  The state machine is
-   structured roughly as follows:
-
-    for (;;) switch (state) {
-    ...
-    case STATEn:
-        if (not enough input data or output space to make progress)
-            return;
-        ... make progress ...
-        state = STATEm;
-        break;
-    ...
-    }
-
-   so when inflate() is called again, the same case is attempted again, and
-   if the appropriate resources are provided, the machine proceeds to the
-   next state.  The NEEDBITS() macro is usually the way the state evaluates
-   whether it can proceed or should return.  NEEDBITS() does the return if
-   the requested bits are not available.  The typical use of the BITS macros
-   is:
-
-        NEEDBITS(n);
-        ... do something with BITS(n) ...
-        DROPBITS(n);
-
-   where NEEDBITS(n) either returns from inflate() if there isn't enough
-   input left to load n bits into the accumulator, or it continues.  BITS(n)
-   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
-   the low n bits off the accumulator.  INITBITS() clears the accumulator
-   and sets the number of available bits to zero.  BYTEBITS() discards just
-   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
-   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
-
-   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
-   if there is no input available.  The decoding of variable length codes uses
-   PULLBYTE() directly in order to pull just enough bytes to decode the next
-   code, and no more.
-
-   Some states loop until they get enough input, making sure that enough
-   state information is maintained to continue the loop where it left off
-   if NEEDBITS() returns in the loop.  For example, want, need, and keep
-   would all have to actually be part of the saved state in case NEEDBITS()
-   returns:
-
-    case STATEw:
-        while (want < need) {
-            NEEDBITS(n);
-            keep[want++] = BITS(n);
-            DROPBITS(n);
-        }
-        state = STATEx;
-    case STATEx:
-
-   As shown above, if the next state is also the next case, then the break
-   is omitted.
-
-   A state may also return if there is not enough output space available to
-   complete that state.  Those states are copying stored data, writing a
-   literal byte, and copying a matching string.
-
-   When returning, a "goto inf_leave" is used to update the total counters,
-   update the check value, and determine whether any progress has been made
-   during that inflate() call in order to return the proper return code.
-   Progress is defined as a change in either strm->avail_in or strm->avail_out.
-   When there is a window, goto inf_leave will update the window with the last
-   output written.  If a goto inf_leave occurs in the middle of decompression
-   and there is no window currently, goto inf_leave will create one and copy
-   output to the window for the next call of inflate().
-
-   In this implementation, the flush parameter of inflate() only affects the
-   return code (per zlib.h).  inflate() always writes as much as possible to
-   strm->next_out, given the space available and the provided input--the effect
-   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
-   the allocation of and copying into a sliding window until necessary, which
-   provides the effect documented in zlib.h for Z_FINISH when the entire input
-   stream available.  So the only thing the flush parameter actually does is:
-   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
-   will return Z_BUF_ERROR if it has not reached the end of the stream.
- */
-
-int ZEXPORT inflate(strm, flush)
-z_streamp strm;
-int flush;
-{
-    struct inflate_state FAR *state;
-    z_const unsigned char FAR *next;    /* next input */
-    unsigned char FAR *put;     /* next output */
-    unsigned have, left;        /* available input and output */
-    unsigned long hold;         /* bit buffer */
-    unsigned bits;              /* bits in bit buffer */
-    unsigned in, out;           /* save starting available input and output */
-    unsigned copy;              /* number of stored or match bytes to copy */
-    unsigned char FAR *from;    /* where to copy match bytes from */
-    code here;                  /* current decoding table entry */
-    code last;                  /* parent table entry */
-    unsigned len;               /* length to copy for repeats, bits to drop */
-    int ret;                    /* return code */
-#ifdef GUNZIP
-    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
-#endif
-    static const unsigned short order[19] = /* permutation of code lengths */
-        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
-        (strm->next_in == Z_NULL && strm->avail_in != 0))
-        return Z_STREAM_ERROR;
-
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
-    LOAD();
-    in = have;
-    out = left;
-    ret = Z_OK;
-    for (;;)
-        switch (state->mode) {
-        case HEAD:
-            if (state->wrap == 0) {
-                state->mode = TYPEDO;
-                break;
-            }
-            NEEDBITS(16);
-#ifdef GUNZIP
-            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
-                state->check = crc32(0L, Z_NULL, 0);
-                CRC2(state->check, hold);
-                INITBITS();
-                state->mode = FLAGS;
-                break;
-            }
-            state->flags = 0;           /* expect zlib header */
-            if (state->head != Z_NULL)
-                state->head->done = -1;
-            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
-#else
-            if (
-#endif
-                ((BITS(8) << 8) + (hold >> 8)) % 31) {
-                strm->msg = (char *)"incorrect header check";
-                state->mode = BAD;
-                break;
-            }
-            if (BITS(4) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
-                state->mode = BAD;
-                break;
-            }
-            DROPBITS(4);
-            len = BITS(4) + 8;
-            if (state->wbits == 0)
-                state->wbits = len;
-            else if (len > state->wbits) {
-                strm->msg = (char *)"invalid window size";
-                state->mode = BAD;
-                break;
-            }
-            state->dmax = 1U << len;
-            Tracev((stderr, "inflate:   zlib header ok\n"));
-            strm->adler = state->check = adler32(0L, Z_NULL, 0);
-            state->mode = hold & 0x200 ? DICTID : TYPE;
-            INITBITS();
-            break;
-#ifdef GUNZIP
-        case FLAGS:
-            NEEDBITS(16);
-            state->flags = (int)(hold);
-            if ((state->flags & 0xff) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
-                state->mode = BAD;
-                break;
-            }
-            if (state->flags & 0xe000) {
-                strm->msg = (char *)"unknown header flags set";
-                state->mode = BAD;
-                break;
-            }
-            if (state->head != Z_NULL)
-                state->head->text = (int)((hold >> 8) & 1);
-            if (state->flags & 0x0200) CRC2(state->check, hold);
-            INITBITS();
-            state->mode = TIME;
-        case TIME:
-            NEEDBITS(32);
-            if (state->head != Z_NULL)
-                state->head->time = hold;
-            if (state->flags & 0x0200) CRC4(state->check, hold);
-            INITBITS();
-            state->mode = OS;
-        case OS:
-            NEEDBITS(16);
-            if (state->head != Z_NULL) {
-                state->head->xflags = (int)(hold & 0xff);
-                state->head->os = (int)(hold >> 8);
-            }
-            if (state->flags & 0x0200) CRC2(state->check, hold);
-            INITBITS();
-            state->mode = EXLEN;
-        case EXLEN:
-            if (state->flags & 0x0400) {
-                NEEDBITS(16);
-                state->length = (unsigned)(hold);
-                if (state->head != Z_NULL)
-                    state->head->extra_len = (unsigned)hold;
-                if (state->flags & 0x0200) CRC2(state->check, hold);
-                INITBITS();
-            }
-            else if (state->head != Z_NULL)
-                state->head->extra = Z_NULL;
-            state->mode = EXTRA;
-        case EXTRA:
-            if (state->flags & 0x0400) {
-                copy = state->length;
-                if (copy > have) copy = have;
-                if (copy) {
-                    if (state->head != Z_NULL &&
-                        state->head->extra != Z_NULL) {
-                        len = state->head->extra_len - state->length;
-                        zmemcpy(state->head->extra + len, next,
-                                len + copy > state->head->extra_max ?
-                                state->head->extra_max - len : copy);
-                    }
-                    if (state->flags & 0x0200)
-                        state->check = crc32(state->check, next, copy);
-                    have -= copy;
-                    next += copy;
-                    state->length -= copy;
-                }
-                if (state->length) goto inf_leave;
-            }
-            state->length = 0;
-            state->mode = NAME;
-        case NAME:
-            if (state->flags & 0x0800) {
-                if (have == 0) goto inf_leave;
-                copy = 0;
-                do {
-                    len = (unsigned)(next[copy++]);
-                    if (state->head != Z_NULL &&
-                            state->head->name != Z_NULL &&
-                            state->length < state->head->name_max)
-                        state->head->name[state->length++] = len;
-                } while (len && copy < have);
-                if (state->flags & 0x0200)
-                    state->check = crc32(state->check, next, copy);
-                have -= copy;
-                next += copy;
-                if (len) goto inf_leave;
-            }
-            else if (state->head != Z_NULL)
-                state->head->name = Z_NULL;
-            state->length = 0;
-            state->mode = COMMENT;
-        case COMMENT:
-            if (state->flags & 0x1000) {
-                if (have == 0) goto inf_leave;
-                copy = 0;
-                do {
-                    len = (unsigned)(next[copy++]);
-                    if (state->head != Z_NULL &&
-                            state->head->comment != Z_NULL &&
-                            state->length < state->head->comm_max)
-                        state->head->comment[state->length++] = len;
-                } while (len && copy < have);
-                if (state->flags & 0x0200)
-                    state->check = crc32(state->check, next, copy);
-                have -= copy;
-                next += copy;
-                if (len) goto inf_leave;
-            }
-            else if (state->head != Z_NULL)
-                state->head->comment = Z_NULL;
-            state->mode = HCRC;
-        case HCRC:
-            if (state->flags & 0x0200) {
-                NEEDBITS(16);
-                if (hold != (state->check & 0xffff)) {
-                    strm->msg = (char *)"header crc mismatch";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-            }
-            if (state->head != Z_NULL) {
-                state->head->hcrc = (int)((state->flags >> 9) & 1);
-                state->head->done = 1;
-            }
-            strm->adler = state->check = crc32(0L, Z_NULL, 0);
-            state->mode = TYPE;
-            break;
-#endif
-        case DICTID:
-            NEEDBITS(32);
-            strm->adler = state->check = ZSWAP32(hold);
-            INITBITS();
-            state->mode = DICT;
-        case DICT:
-            if (state->havedict == 0) {
-                RESTORE();
-                return Z_NEED_DICT;
-            }
-            strm->adler = state->check = adler32(0L, Z_NULL, 0);
-            state->mode = TYPE;
-        case TYPE:
-            if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
-        case TYPEDO:
-            if (state->last) {
-                BYTEBITS();
-                state->mode = CHECK;
-                break;
-            }
-            NEEDBITS(3);
-            state->last = BITS(1);
-            DROPBITS(1);
-            switch (BITS(2)) {
-            case 0:                             /* stored block */
-                Tracev((stderr, "inflate:     stored block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = STORED;
-                break;
-            case 1:                             /* fixed block */
-                fixedtables(state);
-                Tracev((stderr, "inflate:     fixed codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = LEN_;             /* decode codes */
-                if (flush == Z_TREES) {
-                    DROPBITS(2);
-                    goto inf_leave;
-                }
-                break;
-            case 2:                             /* dynamic block */
-                Tracev((stderr, "inflate:     dynamic codes block%s\n",
-                        state->last ? " (last)" : ""));
-                state->mode = TABLE;
-                break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
-                state->mode = BAD;
-            }
-            DROPBITS(2);
-            break;
-        case STORED:
-            BYTEBITS();                         /* go to byte boundary */
-            NEEDBITS(32);
-            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
-                state->mode = BAD;
-                break;
-            }
-            state->length = (unsigned)hold & 0xffff;
-            Tracev((stderr, "inflate:       stored length %u\n",
-                    state->length));
-            INITBITS();
-            state->mode = COPY_;
-            if (flush == Z_TREES) goto inf_leave;
-        case COPY_:
-            state->mode = COPY;
-        case COPY:
-            copy = state->length;
-            if (copy) {
-                if (copy > have) copy = have;
-                if (copy > left) copy = left;
-                if (copy == 0) goto inf_leave;
-                zmemcpy(put, next, copy);
-                have -= copy;
-                next += copy;
-                left -= copy;
-                put += copy;
-                state->length -= copy;
-                break;
-            }
-            Tracev((stderr, "inflate:       stored end\n"));
-            state->mode = TYPE;
-            break;
-        case TABLE:
-            NEEDBITS(14);
-            state->nlen = BITS(5) + 257;
-            DROPBITS(5);
-            state->ndist = BITS(5) + 1;
-            DROPBITS(5);
-            state->ncode = BITS(4) + 4;
-            DROPBITS(4);
-#ifndef PKZIP_BUG_WORKAROUND
-            if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            Tracev((stderr, "inflate:       table sizes ok\n"));
-            state->have = 0;
-            state->mode = LENLENS;
-        case LENLENS:
-            while (state->have < state->ncode) {
-                NEEDBITS(3);
-                state->lens[order[state->have++]] = (unsigned short)BITS(3);
-                DROPBITS(3);
-            }
-            while (state->have < 19)
-                state->lens[order[state->have++]] = 0;
-            state->next = state->codes;
-            state->lencode = (const code FAR *)(state->next);
-            state->lenbits = 7;
-            ret = inflate_table(CODES, state->lens, 19, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       code lengths ok\n"));
-            state->have = 0;
-            state->mode = CODELENS;
-        case CODELENS:
-            while (state->have < state->nlen + state->ndist) {
-                for (;;) {
-                    here = state->lencode[BITS(state->lenbits)];
-                    if ((unsigned)(here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                if (here.val < 16) {
-                    DROPBITS(here.bits);
-                    state->lens[state->have++] = here.val;
-                }
-                else {
-                    if (here.val == 16) {
-                        NEEDBITS(here.bits + 2);
-                        DROPBITS(here.bits);
-                        if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
-                            state->mode = BAD;
-                            break;
-                        }
-                        len = state->lens[state->have - 1];
-                        copy = 3 + BITS(2);
-                        DROPBITS(2);
-                    }
-                    else if (here.val == 17) {
-                        NEEDBITS(here.bits + 3);
-                        DROPBITS(here.bits);
-                        len = 0;
-                        copy = 3 + BITS(3);
-                        DROPBITS(3);
-                    }
-                    else {
-                        NEEDBITS(here.bits + 7);
-                        DROPBITS(here.bits);
-                        len = 0;
-                        copy = 11 + BITS(7);
-                        DROPBITS(7);
-                    }
-                    if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
-                        state->mode = BAD;
-                        break;
-                    }
-                    while (copy--)
-                        state->lens[state->have++] = (unsigned short)len;
-                }
-            }
-
-            /* handle error breaks in while */
-            if (state->mode == BAD) break;
-
-            /* check for end-of-block code (better have one) */
-            if (state->lens[256] == 0) {
-                strm->msg = (char *)"invalid code -- missing end-of-block";
-                state->mode = BAD;
-                break;
-            }
-
-            /* build code tables -- note: do not change the lenbits or distbits
-               values here (9 and 6) without reading the comments in inftrees.h
-               concerning the ENOUGH constants, which depend on those values */
-            state->next = state->codes;
-            state->lencode = (const code FAR *)(state->next);
-            state->lenbits = 9;
-            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
-                                &(state->lenbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
-                state->mode = BAD;
-                break;
-            }
-            state->distcode = (const code FAR *)(state->next);
-            state->distbits = 6;
-            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
-                            &(state->next), &(state->distbits), state->work);
-            if (ret) {
-                strm->msg = (char *)"invalid distances set";
-                state->mode = BAD;
-                break;
-            }
-            Tracev((stderr, "inflate:       codes ok\n"));
-            state->mode = LEN_;
-            if (flush == Z_TREES) goto inf_leave;
-        case LEN_:
-            state->mode = LEN;
-        case LEN:
-            if (have >= 6 && left >= 258) {
-                RESTORE();
-                inflate_fast(strm, out);
-                LOAD();
-                if (state->mode == TYPE)
-                    state->back = -1;
-                break;
-            }
-            state->back = 0;
-            for (;;) {
-                here = state->lencode[BITS(state->lenbits)];
-                if ((unsigned)(here.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if (here.op && (here.op & 0xf0) == 0) {
-                last = here;
-                for (;;) {
-                    here = state->lencode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-                state->back += last.bits;
-            }
-            DROPBITS(here.bits);
-            state->back += here.bits;
-            state->length = (unsigned)here.val;
-            if ((int)(here.op) == 0) {
-                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
-                        "inflate:         literal '%c'\n" :
-                        "inflate:         literal 0x%02x\n", here.val));
-                state->mode = LIT;
-                break;
-            }
-            if (here.op & 32) {
-                Tracevv((stderr, "inflate:         end of block\n"));
-                state->back = -1;
-                state->mode = TYPE;
-                break;
-            }
-            if (here.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
-                state->mode = BAD;
-                break;
-            }
-            state->extra = (unsigned)(here.op) & 15;
-            state->mode = LENEXT;
-        case LENEXT:
-            if (state->extra) {
-                NEEDBITS(state->extra);
-                state->length += BITS(state->extra);
-                DROPBITS(state->extra);
-                state->back += state->extra;
-            }
-            Tracevv((stderr, "inflate:         length %u\n", state->length));
-            state->was = state->length;
-            state->mode = DIST;
-        case DIST:
-            for (;;) {
-                here = state->distcode[BITS(state->distbits)];
-                if ((unsigned)(here.bits) <= bits) break;
-                PULLBYTE();
-            }
-            if ((here.op & 0xf0) == 0) {
-                last = here;
-                for (;;) {
-                    here = state->distcode[last.val +
-                            (BITS(last.bits + last.op) >> last.bits)];
-                    if ((unsigned)(last.bits + here.bits) <= bits) break;
-                    PULLBYTE();
-                }
-                DROPBITS(last.bits);
-                state->back += last.bits;
-            }
-            DROPBITS(here.bits);
-            state->back += here.bits;
-            if (here.op & 64) {
-                strm->msg = (char *)"invalid distance code";
-                state->mode = BAD;
-                break;
-            }
-            state->offset = (unsigned)here.val;
-            state->extra = (unsigned)(here.op) & 15;
-            state->mode = DISTEXT;
-        case DISTEXT:
-            if (state->extra) {
-                NEEDBITS(state->extra);
-                state->offset += BITS(state->extra);
-                DROPBITS(state->extra);
-                state->back += state->extra;
-            }
-#ifdef INFLATE_STRICT
-            if (state->offset > state->dmax) {
-                strm->msg = (char *)"invalid distance too far back";
-                state->mode = BAD;
-                break;
-            }
-#endif
-            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
-            state->mode = MATCH;
-        case MATCH:
-            if (left == 0) goto inf_leave;
-            copy = out - left;
-            if (state->offset > copy) {         /* copy from window */
-                copy = state->offset - copy;
-                if (copy > state->whave) {
-                    if (state->sane) {
-                        strm->msg = (char *)"invalid distance too far back";
-                        state->mode = BAD;
-                        break;
-                    }
-#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
-                    Trace((stderr, "inflate.c too far\n"));
-                    copy -= state->whave;
-                    if (copy > state->length) copy = state->length;
-                    if (copy > left) copy = left;
-                    left -= copy;
-                    state->length -= copy;
-                    do {
-                        *put++ = 0;
-                    } while (--copy);
-                    if (state->length == 0) state->mode = LEN;
-                    break;
-#endif
-                }
-                if (copy > state->wnext) {
-                    copy -= state->wnext;
-                    from = state->window + (state->wsize - copy);
-                }
-                else
-                    from = state->window + (state->wnext - copy);
-                if (copy > state->length) copy = state->length;
-            }
-            else {                              /* copy from output */
-                from = put - state->offset;
-                copy = state->length;
-            }
-            if (copy > left) copy = left;
-            left -= copy;
-            state->length -= copy;
-            do {
-                *put++ = *from++;
-            } while (--copy);
-            if (state->length == 0) state->mode = LEN;
-            break;
-        case LIT:
-            if (left == 0) goto inf_leave;
-            *put++ = (unsigned char)(state->length);
-            left--;
-            state->mode = LEN;
-            break;
-        case CHECK:
-            if (state->wrap) {
-                NEEDBITS(32);
-                out -= left;
-                strm->total_out += out;
-                state->total += out;
-                if (out)
-                    strm->adler = state->check =
-                        UPDATE(state->check, put - out, out);
-                out = left;
-                if ((
-#ifdef GUNZIP
-                     state->flags ? hold :
-#endif
-                     ZSWAP32(hold)) != state->check) {
-                    strm->msg = (char *)"incorrect data check";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-                Tracev((stderr, "inflate:   check matches trailer\n"));
-            }
-#ifdef GUNZIP
-            state->mode = LENGTH;
-        case LENGTH:
-            if (state->wrap && state->flags) {
-                NEEDBITS(32);
-                if (hold != (state->total & 0xffffffffUL)) {
-                    strm->msg = (char *)"incorrect length check";
-                    state->mode = BAD;
-                    break;
-                }
-                INITBITS();
-                Tracev((stderr, "inflate:   length matches trailer\n"));
-            }
-#endif
-            state->mode = DONE;
-        case DONE:
-            ret = Z_STREAM_END;
-            goto inf_leave;
-        case BAD:
-            ret = Z_DATA_ERROR;
-            goto inf_leave;
-        case MEM:
-            return Z_MEM_ERROR;
-        case SYNC:
-        default:
-            return Z_STREAM_ERROR;
-        }
-
-    /*
-       Return from inflate(), updating the total counts and the check value.
-       If there was no progress during the inflate() call, return a buffer
-       error.  Call updatewindow() to create and/or update the window state.
-       Note: a memory error from inflate() is non-recoverable.
-     */
-  inf_leave:
-    RESTORE();
-    if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
-            (state->mode < CHECK || flush != Z_FINISH)))
-        if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
-            state->mode = MEM;
-            return Z_MEM_ERROR;
-        }
-    in -= strm->avail_in;
-    out -= strm->avail_out;
-    strm->total_in += in;
-    strm->total_out += out;
-    state->total += out;
-    if (state->wrap && out)
-        strm->adler = state->check =
-            UPDATE(state->check, strm->next_out - out, out);
-    strm->data_type = state->bits + (state->last ? 64 : 0) +
-                      (state->mode == TYPE ? 128 : 0) +
-                      (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
-    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
-        ret = Z_BUF_ERROR;
-    return ret;
-}
-
-int ZEXPORT inflateEnd(strm)
-z_streamp strm;
-{
-    struct inflate_state FAR *state;
-    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->window != Z_NULL) ZFREE(strm, state->window);
-    ZFREE(strm, strm->state);
-    strm->state = Z_NULL;
-    Tracev((stderr, "inflate: end\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
-z_streamp strm;
-Bytef *dictionary;
-uInt *dictLength;
-{
-    struct inflate_state FAR *state;
-
-    /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-
-    /* copy dictionary */
-    if (state->whave && dictionary != Z_NULL) {
-        zmemcpy(dictionary, state->window + state->wnext,
-                state->whave - state->wnext);
-        zmemcpy(dictionary + state->whave - state->wnext,
-                state->window, state->wnext);
-    }
-    if (dictLength != Z_NULL)
-        *dictLength = state->whave;
-    return Z_OK;
-}
-
-int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
-z_streamp strm;
-const Bytef *dictionary;
-uInt dictLength;
-{
-    struct inflate_state FAR *state;
-    unsigned long dictid;
-    int ret;
-
-    /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (state->wrap != 0 && state->mode != DICT)
-        return Z_STREAM_ERROR;
-
-    /* check for correct dictionary identifier */
-    if (state->mode == DICT) {
-        dictid = adler32(0L, Z_NULL, 0);
-        dictid = adler32(dictid, dictionary, dictLength);
-        if (dictid != state->check)
-            return Z_DATA_ERROR;
-    }
-
-    /* copy dictionary to window using updatewindow(), which will amend the
-       existing dictionary if appropriate */
-    ret = updatewindow(strm, dictionary + dictLength, dictLength);
-    if (ret) {
-        state->mode = MEM;
-        return Z_MEM_ERROR;
-    }
-    state->havedict = 1;
-    Tracev((stderr, "inflate:   dictionary set\n"));
-    return Z_OK;
-}
-
-int ZEXPORT inflateGetHeader(strm, head)
-z_streamp strm;
-gz_headerp head;
-{
-    struct inflate_state FAR *state;
-
-    /* check state */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
-
-    /* save header structure */
-    state->head = head;
-    head->done = 0;
-    return Z_OK;
-}
-
-/*
-   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
-   or when out of input.  When called, *have is the number of pattern bytes
-   found in order so far, in 0..3.  On return *have is updated to the new
-   state.  If on return *have equals four, then the pattern was found and the
-   return value is how many bytes were read including the last byte of the
-   pattern.  If *have is less than four, then the pattern has not been found
-   yet and the return value is len.  In the latter case, syncsearch() can be
-   called again with more data and the *have state.  *have is initialized to
-   zero for the first call.
- */
-local unsigned syncsearch(have, buf, len)
-unsigned FAR *have;
-const unsigned char FAR *buf;
-unsigned len;
-{
-    unsigned got;
-    unsigned next;
-
-    got = *have;
-    next = 0;
-    while (next < len && got < 4) {
-        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
-            got++;
-        else if (buf[next])
-            got = 0;
-        else
-            got = 4 - got;
-        next++;
-    }
-    *have = got;
-    return next;
-}
-
-int ZEXPORT inflateSync(strm)
-z_streamp strm;
-{
-    unsigned len;               /* number of bytes to look at or looked at */
-    unsigned long in, out;      /* temporary to save total_in and total_out */
-    unsigned char buf[4];       /* to restore bit buffer to byte string */
-    struct inflate_state FAR *state;
-
-    /* check parameters */
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
-
-    /* if first time, start search in bit buffer */
-    if (state->mode != SYNC) {
-        state->mode = SYNC;
-        state->hold <<= state->bits & 7;
-        state->bits -= state->bits & 7;
-        len = 0;
-        while (state->bits >= 8) {
-            buf[len++] = (unsigned char)(state->hold);
-            state->hold >>= 8;
-            state->bits -= 8;
-        }
-        state->have = 0;
-        syncsearch(&(state->have), buf, len);
-    }
-
-    /* search available input */
-    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
-    strm->avail_in -= len;
-    strm->next_in += len;
-    strm->total_in += len;
-
-    /* return no joy or set up to restart inflate() on a new block */
-    if (state->have != 4) return Z_DATA_ERROR;
-    in = strm->total_in;  out = strm->total_out;
-    inflateReset(strm);
-    strm->total_in = in;  strm->total_out = out;
-    state->mode = TYPE;
-    return Z_OK;
-}
-
-/*
-   Returns true if inflate is currently at the end of a block generated by
-   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
-   implementation to provide an additional safety check. PPP uses
-   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
-   block. When decompressing, PPP checks that at the end of input packet,
-   inflate is waiting for these length bytes.
- */
-int ZEXPORT inflateSyncPoint(strm)
-z_streamp strm;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    return state->mode == STORED && state->bits == 0;
-}
-
-int ZEXPORT inflateCopy(dest, source)
-z_streamp dest;
-z_streamp source;
-{
-    struct inflate_state FAR *state;
-    struct inflate_state FAR *copy;
-    unsigned char FAR *window;
-    unsigned wsize;
-
-    /* check input */
-    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
-        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
-        return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)source->state;
-
-    /* allocate space */
-    copy = (struct inflate_state FAR *)
-           ZALLOC(source, 1, sizeof(struct inflate_state));
-    if (copy == Z_NULL) return Z_MEM_ERROR;
-    window = Z_NULL;
-    if (state->window != Z_NULL) {
-        window = (unsigned char FAR *)
-                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
-        if (window == Z_NULL) {
-            ZFREE(source, copy);
-            return Z_MEM_ERROR;
-        }
-    }
-
-    /* copy state */
-    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
-    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
-    if (state->lencode >= state->codes &&
-        state->lencode <= state->codes + ENOUGH - 1) {
-        copy->lencode = copy->codes + (state->lencode - state->codes);
-        copy->distcode = copy->codes + (state->distcode - state->codes);
-    }
-    copy->next = copy->codes + (state->next - state->codes);
-    if (window != Z_NULL) {
-        wsize = 1U << state->wbits;
-        zmemcpy(window, state->window, wsize);
-    }
-    copy->window = window;
-    dest->state = (struct internal_state FAR *)copy;
-    return Z_OK;
-}
-
-int ZEXPORT inflateUndermine(strm, subvert)
-z_streamp strm;
-int subvert;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
-    state = (struct inflate_state FAR *)strm->state;
-    state->sane = !subvert;
-#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
-    return Z_OK;
-#else
-    state->sane = 1;
-    return Z_DATA_ERROR;
-#endif
-}
-
-long ZEXPORT inflateMark(strm)
-z_streamp strm;
-{
-    struct inflate_state FAR *state;
-
-    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
-    state = (struct inflate_state FAR *)strm->state;
-    return ((long)(state->back) << 16) +
-        (state->mode == COPY ? state->length :
-            (state->mode == MATCH ? state->was - state->length : 0));
-}
--- a/DoConfig/fltk/zlib/inflate.h
+++ /dev/null
@@ -1,122 +1,0 @@
-/* inflate.h -- internal inflate state definition
- * Copyright (C) 1995-2009 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* define NO_GZIP when compiling if you want to disable gzip header and
-   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
-   the crc code when it is not needed.  For shared libraries, gzip decoding
-   should be left enabled. */
-#ifndef NO_GZIP
-#  define GUNZIP
-#endif
-
-/* Possible inflate modes between inflate() calls */
-typedef enum {
-    HEAD,       /* i: waiting for magic header */
-    FLAGS,      /* i: waiting for method and flags (gzip) */
-    TIME,       /* i: waiting for modification time (gzip) */
-    OS,         /* i: waiting for extra flags and operating system (gzip) */
-    EXLEN,      /* i: waiting for extra length (gzip) */
-    EXTRA,      /* i: waiting for extra bytes (gzip) */
-    NAME,       /* i: waiting for end of file name (gzip) */
-    COMMENT,    /* i: waiting for end of comment (gzip) */
-    HCRC,       /* i: waiting for header crc (gzip) */
-    DICTID,     /* i: waiting for dictionary check value */
-    DICT,       /* waiting for inflateSetDictionary() call */
-        TYPE,       /* i: waiting for type bits, including last-flag bit */
-        TYPEDO,     /* i: same, but skip check to exit inflate on new block */
-        STORED,     /* i: waiting for stored size (length and complement) */
-        COPY_,      /* i/o: same as COPY below, but only first time in */
-        COPY,       /* i/o: waiting for input or output to copy stored block */
-        TABLE,      /* i: waiting for dynamic block table lengths */
-        LENLENS,    /* i: waiting for code length code lengths */
-        CODELENS,   /* i: waiting for length/lit and distance code lengths */
-            LEN_,       /* i: same as LEN below, but only first time in */
-            LEN,        /* i: waiting for length/lit/eob code */
-            LENEXT,     /* i: waiting for length extra bits */
-            DIST,       /* i: waiting for distance code */
-            DISTEXT,    /* i: waiting for distance extra bits */
-            MATCH,      /* o: waiting for output space to copy string */
-            LIT,        /* o: waiting for output space to write literal */
-    CHECK,      /* i: waiting for 32-bit check value */
-    LENGTH,     /* i: waiting for 32-bit length (gzip) */
-    DONE,       /* finished check, done -- remain here until reset */
-    BAD,        /* got a data error -- remain here until reset */
-    MEM,        /* got an inflate() memory error -- remain here until reset */
-    SYNC        /* looking for synchronization bytes to restart inflate() */
-} inflate_mode;
-
-/*
-    State transitions between above modes -
-
-    (most modes can go to BAD or MEM on error -- not shown for clarity)
-
-    Process header:
-        HEAD -> (gzip) or (zlib) or (raw)
-        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
-                  HCRC -> TYPE
-        (zlib) -> DICTID or TYPE
-        DICTID -> DICT -> TYPE
-        (raw) -> TYPEDO
-    Read deflate blocks:
-            TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
-            STORED -> COPY_ -> COPY -> TYPE
-            TABLE -> LENLENS -> CODELENS -> LEN_
-            LEN_ -> LEN
-    Read deflate codes in fixed or dynamic block:
-                LEN -> LENEXT or LIT or TYPE
-                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
-                LIT -> LEN
-    Process trailer:
-        CHECK -> LENGTH -> DONE
- */
-
-/* state maintained between inflate() calls.  Approximately 10K bytes. */
-struct inflate_state {
-    inflate_mode mode;          /* current inflate mode */
-    int last;                   /* true if processing last block */
-    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
-    int havedict;               /* true if dictionary provided */
-    int flags;                  /* gzip header method and flags (0 if zlib) */
-    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
-    unsigned long check;        /* protected copy of check value */
-    unsigned long total;        /* protected copy of output count */
-    gz_headerp head;            /* where to save gzip header information */
-        /* sliding window */
-    unsigned wbits;             /* log base 2 of requested window size */
-    unsigned wsize;             /* window size or zero if not using window */
-    unsigned whave;             /* valid bytes in the window */
-    unsigned wnext;             /* window write index */
-    unsigned char FAR *window;  /* allocated sliding window, if needed */
-        /* bit accumulator */
-    unsigned long hold;         /* input bit accumulator */
-    unsigned bits;              /* number of bits in "in" */
-        /* for string and stored block copying */
-    unsigned length;            /* literal or length of data to copy */
-    unsigned offset;            /* distance back to copy string from */
-        /* for table and code decoding */
-    unsigned extra;             /* extra bits needed */
-        /* fixed and dynamic code tables */
-    code const FAR *lencode;    /* starting table for length/literal codes */
-    code const FAR *distcode;   /* starting table for distance codes */
-    unsigned lenbits;           /* index bits for lencode */
-    unsigned distbits;          /* index bits for distcode */
-        /* dynamic table building */
-    unsigned ncode;             /* number of code length code lengths */
-    unsigned nlen;              /* number of length code lengths */
-    unsigned ndist;             /* number of distance code lengths */
-    unsigned have;              /* number of code lengths in lens[] */
-    code FAR *next;             /* next available space in codes[] */
-    unsigned short lens[320];   /* temporary storage for code lengths */
-    unsigned short work[288];   /* work area for code table building */
-    code codes[ENOUGH];         /* space for code tables */
-    int sane;                   /* if false, allow invalid distance too far */
-    int back;                   /* bits back of last unprocessed length/lit */
-    unsigned was;               /* initial length of match */
-};
--- a/DoConfig/fltk/zlib/inftrees.c
+++ /dev/null
@@ -1,306 +1,0 @@
-/* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2013 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-#include "zutil.h"
-#include "inftrees.h"
-
-#define MAXBITS 15
-
-const char inflate_copyright[] =
-   " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
-/*
-  If you use the zlib library in a product, an acknowledgment is welcome
-  in the documentation of your product. If for some reason you cannot
-  include such an acknowledgment, I would appreciate that you keep this
-  copyright string in the executable of your product.
- */
-
-/*
-   Build a set of tables to decode the provided canonical Huffman code.
-   The code lengths are lens[0..codes-1].  The result starts at *table,
-   whose indices are 0..2^bits-1.  work is a writable array of at least
-   lens shorts, which is used as a work area.  type is the type of code
-   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
-   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
-   on return points to the next available entry's address.  bits is the
-   requested root table index bits, and on return it is the actual root
-   table index bits.  It will differ if the request is greater than the
-   longest code or if it is less than the shortest code.
- */
-int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
-codetype type;
-unsigned short FAR *lens;
-unsigned codes;
-code FAR * FAR *table;
-unsigned FAR *bits;
-unsigned short FAR *work;
-{
-    unsigned len;               /* a code's length in bits */
-    unsigned sym;               /* index of code symbols */
-    unsigned min, max;          /* minimum and maximum code lengths */
-    unsigned root;              /* number of index bits for root table */
-    unsigned curr;              /* number of index bits for current table */
-    unsigned drop;              /* code bits to drop for sub-table */
-    int left;                   /* number of prefix codes available */
-    unsigned used;              /* code entries in table used */
-    unsigned huff;              /* Huffman code */
-    unsigned incr;              /* for incrementing code, index */
-    unsigned fill;              /* index for replicating entries */
-    unsigned low;               /* low bits for current root entry */
-    unsigned mask;              /* mask for low root bits */
-    code here;                  /* table entry for duplication */
-    code FAR *next;             /* next available space in table */
-    const unsigned short FAR *base;     /* base value table to use */
-    const unsigned short FAR *extra;    /* extra bits table to use */
-    int end;                    /* use base and extra for symbol > end */
-    unsigned short count[MAXBITS+1];    /* number of codes of each length */
-    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
-    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
-        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
-        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
-    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
-        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
-    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
-        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
-        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
-        8193, 12289, 16385, 24577, 0, 0};
-    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
-        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
-        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
-        28, 28, 29, 29, 64, 64};
-
-    /*
-       Process a set of code lengths to create a canonical Huffman code.  The
-       code lengths are lens[0..codes-1].  Each length corresponds to the
-       symbols 0..codes-1.  The Huffman code is generated by first sorting the
-       symbols by length from short to long, and retaining the symbol order
-       for codes with equal lengths.  Then the code starts with all zero bits
-       for the first code of the shortest length, and the codes are integer
-       increments for the same length, and zeros are appended as the length
-       increases.  For the deflate format, these bits are stored backwards
-       from their more natural integer increment ordering, and so when the
-       decoding tables are built in the large loop below, the integer codes
-       are incremented backwards.
-
-       This routine assumes, but does not check, that all of the entries in
-       lens[] are in the range 0..MAXBITS.  The caller must assure this.
-       1..MAXBITS is interpreted as that code length.  zero means that that
-       symbol does not occur in this code.
-
-       The codes are sorted by computing a count of codes for each length,
-       creating from that a table of starting indices for each length in the
-       sorted table, and then entering the symbols in order in the sorted
-       table.  The sorted table is work[], with that space being provided by
-       the caller.
-
-       The length counts are used for other purposes as well, i.e. finding
-       the minimum and maximum length codes, determining if there are any
-       codes at all, checking for a valid set of lengths, and looking ahead
-       at length counts to determine sub-table sizes when building the
-       decoding tables.
-     */
-
-    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
-    for (len = 0; len <= MAXBITS; len++)
-        count[len] = 0;
-    for (sym = 0; sym < codes; sym++)
-        count[lens[sym]]++;
-
-    /* bound code lengths, force root to be within code lengths */
-    root = *bits;
-    for (max = MAXBITS; max >= 1; max--)
-        if (count[max] != 0) break;
-    if (root > max) root = max;
-    if (max == 0) {                     /* no symbols to code at all */
-        here.op = (unsigned char)64;    /* invalid code marker */
-        here.bits = (unsigned char)1;
-        here.val = (unsigned short)0;
-        *(*table)++ = here;             /* make a table to force an error */
-        *(*table)++ = here;
-        *bits = 1;
-        return 0;     /* no symbols, but wait for decoding to report error */
-    }
-    for (min = 1; min < max; min++)
-        if (count[min] != 0) break;
-    if (root < min) root = min;
-
-    /* check for an over-subscribed or incomplete set of lengths */
-    left = 1;
-    for (len = 1; len <= MAXBITS; len++) {
-        left <<= 1;
-        left -= count[len];
-        if (left < 0) return -1;        /* over-subscribed */
-    }
-    if (left > 0 && (type == CODES || max != 1))
-        return -1;                      /* incomplete set */
-
-    /* generate offsets into symbol table for each length for sorting */
-    offs[1] = 0;
-    for (len = 1; len < MAXBITS; len++)
-        offs[len + 1] = offs[len] + count[len];
-
-    /* sort symbols by length, by symbol order within each length */
-    for (sym = 0; sym < codes; sym++)
-        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
-
-    /*
-       Create and fill in decoding tables.  In this loop, the table being
-       filled is at next and has curr index bits.  The code being used is huff
-       with length len.  That code is converted to an index by dropping drop
-       bits off of the bottom.  For codes where len is less than drop + curr,
-       those top drop + curr - len bits are incremented through all values to
-       fill the table with replicated entries.
-
-       root is the number of index bits for the root table.  When len exceeds
-       root, sub-tables are created pointed to by the root entry with an index
-       of the low root bits of huff.  This is saved in low to check for when a
-       new sub-table should be started.  drop is zero when the root table is
-       being filled, and drop is root when sub-tables are being filled.
-
-       When a new sub-table is needed, it is necessary to look ahead in the
-       code lengths to determine what size sub-table is needed.  The length
-       counts are used for this, and so count[] is decremented as codes are
-       entered in the tables.
-
-       used keeps track of how many table entries have been allocated from the
-       provided *table space.  It is checked for LENS and DIST tables against
-       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
-       the initial root table size constants.  See the comments in inftrees.h
-       for more information.
-
-       sym increments through all symbols, and the loop terminates when
-       all codes of length max, i.e. all codes, have been processed.  This
-       routine permits incomplete codes, so another loop after this one fills
-       in the rest of the decoding tables with invalid code markers.
-     */
-
-    /* set up for code type */
-    switch (type) {
-    case CODES:
-        base = extra = work;    /* dummy value--not used */
-        end = 19;
-        break;
-    case LENS:
-        base = lbase;
-        base -= 257;
-        extra = lext;
-        extra -= 257;
-        end = 256;
-        break;
-    default:            /* DISTS */
-        base = dbase;
-        extra = dext;
-        end = -1;
-    }
-
-    /* initialize state for loop */
-    huff = 0;                   /* starting code */
-    sym = 0;                    /* starting code symbol */
-    len = min;                  /* starting code length */
-    next = *table;              /* current table to fill in */
-    curr = root;                /* current table index bits */
-    drop = 0;                   /* current bits to drop from code for index */
-    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
-    used = 1U << root;          /* use root table entries */
-    mask = used - 1;            /* mask for comparing low */
-
-    /* check available table space */
-    if ((type == LENS && used > ENOUGH_LENS) ||
-        (type == DISTS && used > ENOUGH_DISTS))
-        return 1;
-
-    /* process all codes and make table entries */
-    for (;;) {
-        /* create table entry */
-        here.bits = (unsigned char)(len - drop);
-        if ((int)(work[sym]) < end) {
-            here.op = (unsigned char)0;
-            here.val = work[sym];
-        }
-        else if ((int)(work[sym]) > end) {
-            here.op = (unsigned char)(extra[work[sym]]);
-            here.val = base[work[sym]];
-        }
-        else {
-            here.op = (unsigned char)(32 + 64);         /* end of block */
-            here.val = 0;
-        }
-
-        /* replicate for those indices with low len bits equal to huff */
-        incr = 1U << (len - drop);
-        fill = 1U << curr;
-        min = fill;                 /* save offset to next table */
-        do {
-            fill -= incr;
-            next[(huff >> drop) + fill] = here;
-        } while (fill != 0);
-
-        /* backwards increment the len-bit code huff */
-        incr = 1U << (len - 1);
-        while (huff & incr)
-            incr >>= 1;
-        if (incr != 0) {
-            huff &= incr - 1;
-            huff += incr;
-        }
-        else
-            huff = 0;
-
-        /* go to next symbol, update count, len */
-        sym++;
-        if (--(count[len]) == 0) {
-            if (len == max) break;
-            len = lens[work[sym]];
-        }
-
-        /* create new sub-table if needed */
-        if (len > root && (huff & mask) != low) {
-            /* if first time, transition to sub-tables */
-            if (drop == 0)
-                drop = root;
-
-            /* increment past last table */
-            next += min;            /* here min is 1 << curr */
-
-            /* determine length of next table */
-            curr = len - drop;
-            left = (int)(1 << curr);
-            while (curr + drop < max) {
-                left -= count[curr + drop];
-                if (left <= 0) break;
-                curr++;
-                left <<= 1;
-            }
-
-            /* check for enough space */
-            used += 1U << curr;
-            if ((type == LENS && used > ENOUGH_LENS) ||
-                (type == DISTS && used > ENOUGH_DISTS))
-                return 1;
-
-            /* point entry in root table to sub-table */
-            low = huff & mask;
-            (*table)[low].op = (unsigned char)curr;
-            (*table)[low].bits = (unsigned char)root;
-            (*table)[low].val = (unsigned short)(next - *table);
-        }
-    }
-
-    /* fill in remaining table entry if code is incomplete (guaranteed to have
-       at most one remaining entry, since if the code is incomplete, the
-       maximum code length that was allowed to get this far is one bit) */
-    if (huff != 0) {
-        here.op = (unsigned char)64;            /* invalid code marker */
-        here.bits = (unsigned char)(len - drop);
-        here.val = (unsigned short)0;
-        next[huff] = here;
-    }
-
-    /* set return parameters */
-    *table += used;
-    *bits = root;
-    return 0;
-}
--- a/DoConfig/fltk/zlib/inftrees.h
+++ /dev/null
@@ -1,62 +1,0 @@
-/* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2005, 2010 Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* Structure for decoding tables.  Each entry provides either the
-   information needed to do the operation requested by the code that
-   indexed that table entry, or it provides a pointer to another
-   table that indexes more bits of the code.  op indicates whether
-   the entry is a pointer to another table, a literal, a length or
-   distance, an end-of-block, or an invalid code.  For a table
-   pointer, the low four bits of op is the number of index bits of
-   that table.  For a length or distance, the low four bits of op
-   is the number of extra bits to get after the code.  bits is
-   the number of bits in this code or part of the code to drop off
-   of the bit buffer.  val is the actual byte to output in the case
-   of a literal, the base length or distance, or the offset from
-   the current table to the next table.  Each entry is four bytes. */
-typedef struct {
-    unsigned char op;           /* operation, extra bits, table bits */
-    unsigned char bits;         /* bits in this part of the code */
-    unsigned short val;         /* offset in table or code value */
-} code;
-
-/* op values as set by inflate_table():
-    00000000 - literal
-    0000tttt - table link, tttt != 0 is the number of table index bits
-    0001eeee - length or distance, eeee is the number of extra bits
-    01100000 - end of block
-    01000000 - invalid code
- */
-
-/* Maximum size of the dynamic table.  The maximum number of code structures is
-   1444, which is the sum of 852 for literal/length codes and 592 for distance
-   codes.  These values were found by exhaustive searches using the program
-   examples/enough.c found in the zlib distribtution.  The arguments to that
-   program are the number of symbols, the initial root table size, and the
-   maximum bit length of a code.  "enough 286 9 15" for literal/length codes
-   returns returns 852, and "enough 30 6 15" for distance codes returns 592.
-   The initial root table size (9 or 6) is found in the fifth argument of the
-   inflate_table() calls in inflate.c and infback.c.  If the root table size is
-   changed, then these maximum sizes would be need to be recalculated and
-   updated. */
-#define ENOUGH_LENS 852
-#define ENOUGH_DISTS 592
-#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
-
-/* Type of code to build for inflate_table() */
-typedef enum {
-    CODES,
-    LENS,
-    DISTS
-} codetype;
-
-int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
-                             unsigned codes, code FAR * FAR *table,
-                             unsigned FAR *bits, unsigned short FAR *work));
--- a/DoConfig/fltk/zlib/makedepend
+++ /dev/null
@@ -1,17 +1,0 @@
-# DO NOT DELETE
-
-adler32.o: zutil.h zlib.h zconf.h
-compress.o: zlib.h zconf.h
-crc32.o: zutil.h zlib.h zconf.h crc32.h
-uncompr.o: zlib.h zconf.h
-deflate.o: deflate.h zutil.h zlib.h zconf.h
-trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
-zutil.o: zutil.h zlib.h zconf.h gzguts.h
-inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
-inftrees.o: zutil.h zlib.h zconf.h inftrees.h
-inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
-gzclose.o: gzguts.h zlib.h zconf.h
-gzlib.o: gzguts.h zlib.h zconf.h
-gzread.o: gzguts.h zlib.h zconf.h
-gzwrite.o: gzguts.h zlib.h zconf.h
-infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
--- a/DoConfig/fltk/zlib/trees.c
+++ /dev/null
@@ -1,1226 +1,0 @@
-/* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2012 Jean-loup Gailly
- * detect_data_type() function provided freely by Cosmin Truta, 2006
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/*
- *  ALGORITHM
- *
- *      The "deflation" process uses several Huffman trees. The more
- *      common source values are represented by shorter bit sequences.
- *
- *      Each code tree is stored in a compressed form which is itself
- * a Huffman encoding of the lengths of all the code strings (in
- * ascending order by source values).  The actual code strings are
- * reconstructed from the lengths in the inflate process, as described
- * in the deflate specification.
- *
- *  REFERENCES
- *
- *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
- *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
- *
- *      Storer, James A.
- *          Data Compression:  Methods and Theory, pp. 49-50.
- *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
- *
- *      Sedgewick, R.
- *          Algorithms, p290.
- *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
- */
-
-/* @(#) $Id$ */
-
-/* #define GEN_TREES_H */
-
-#include "deflate.h"
-
-#ifdef DEBUG
-#  include <ctype.h>
-#endif
-
-/* ===========================================================================
- * Constants
- */
-
-#define MAX_BL_BITS 7
-/* Bit length codes must not exceed MAX_BL_BITS bits */
-
-#define END_BLOCK 256
-/* end of block literal code */
-
-#define REP_3_6      16
-/* repeat previous bit length 3-6 times (2 bits of repeat count) */
-
-#define REPZ_3_10    17
-/* repeat a zero length 3-10 times  (3 bits of repeat count) */
-
-#define REPZ_11_138  18
-/* repeat a zero length 11-138 times  (7 bits of repeat count) */
-
-local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
-   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
-
-local const int extra_dbits[D_CODES] /* extra bits for each distance code */
-   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
-
-local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
-   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
-
-local const uch bl_order[BL_CODES]
-   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
-/* The lengths of the bit length codes are sent in order of decreasing
- * probability, to avoid transmitting the lengths for unused bit length codes.
- */
-
-/* ===========================================================================
- * Local data. These are initialized only once.
- */
-
-#define DIST_CODE_LEN  512 /* see definition of array dist_code below */
-
-#if defined(GEN_TREES_H) || !defined(STDC)
-/* non ANSI compilers may not accept trees.h */
-
-local ct_data static_ltree[L_CODES+2];
-/* The static literal tree. Since the bit lengths are imposed, there is no
- * need for the L_CODES extra codes used during heap construction. However
- * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
- * below).
- */
-
-local ct_data static_dtree[D_CODES];
-/* The static distance tree. (Actually a trivial tree since all codes use
- * 5 bits.)
- */
-
-uch _dist_code[DIST_CODE_LEN];
-/* Distance codes. The first 256 values correspond to the distances
- * 3 .. 258, the last 256 values correspond to the top 8 bits of
- * the 15 bit distances.
- */
-
-uch _length_code[MAX_MATCH-MIN_MATCH+1];
-/* length code for each normalized match length (0 == MIN_MATCH) */
-
-local int base_length[LENGTH_CODES];
-/* First normalized length for each code (0 = MIN_MATCH) */
-
-local int base_dist[D_CODES];
-/* First normalized distance for each code (0 = distance of 1) */
-
-#else
-#  include "trees.h"
-#endif /* GEN_TREES_H */
-
-struct static_tree_desc_s {
-    const ct_data *static_tree;  /* static tree or NULL */
-    const intf *extra_bits;      /* extra bits for each code or NULL */
-    int     extra_base;          /* base index for extra_bits */
-    int     elems;               /* max number of elements in the tree */
-    int     max_length;          /* max bit length for the codes */
-};
-
-local static_tree_desc  static_l_desc =
-{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
-
-local static_tree_desc  static_d_desc =
-{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
-
-local static_tree_desc  static_bl_desc =
-{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};
-
-/* ===========================================================================
- * Local (static) routines in this file.
- */
-
-local void tr_static_init OF((void));
-local void init_block     OF((deflate_state *s));
-local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
-local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
-local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
-local void build_tree     OF((deflate_state *s, tree_desc *desc));
-local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
-local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
-local int  build_bl_tree  OF((deflate_state *s));
-local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
-                              int blcodes));
-local void compress_block OF((deflate_state *s, const ct_data *ltree,
-                              const ct_data *dtree));
-local int  detect_data_type OF((deflate_state *s));
-local unsigned bi_reverse OF((unsigned value, int length));
-local void bi_windup      OF((deflate_state *s));
-local void bi_flush       OF((deflate_state *s));
-local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
-                              int header));
-
-#ifdef GEN_TREES_H
-local void gen_trees_header OF((void));
-#endif
-
-#ifndef DEBUG
-#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
-   /* Send a code of the given tree. c and tree must not have side effects */
-
-#else /* DEBUG */
-#  define send_code(s, c, tree) \
-     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
-       send_bits(s, tree[c].Code, tree[c].Len); }
-#endif
-
-/* ===========================================================================
- * Output a short LSB first on the stream.
- * IN assertion: there is enough room in pendingBuf.
- */
-#define put_short(s, w) { \
-    put_byte(s, (uch)((w) & 0xff)); \
-    put_byte(s, (uch)((ush)(w) >> 8)); \
-}
-
-/* ===========================================================================
- * Send a value on a given number of bits.
- * IN assertion: length <= 16 and value fits in length bits.
- */
-#ifdef DEBUG
-local void send_bits      OF((deflate_state *s, int value, int length));
-
-local void send_bits(s, value, length)
-    deflate_state *s;
-    int value;  /* value to send */
-    int length; /* number of bits */
-{
-    Tracevv((stderr," l %2d v %4x ", length, value));
-    Assert(length > 0 && length <= 15, "invalid length");
-    s->bits_sent += (ulg)length;
-
-    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
-     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
-     * unused bits in value.
-     */
-    if (s->bi_valid > (int)Buf_size - length) {
-        s->bi_buf |= (ush)value << s->bi_valid;
-        put_short(s, s->bi_buf);
-        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
-        s->bi_valid += length - Buf_size;
-    } else {
-        s->bi_buf |= (ush)value << s->bi_valid;
-        s->bi_valid += length;
-    }
-}
-#else /* !DEBUG */
-
-#define send_bits(s, value, length) \
-{ int len = length;\
-  if (s->bi_valid > (int)Buf_size - len) {\
-    int val = value;\
-    s->bi_buf |= (ush)val << s->bi_valid;\
-    put_short(s, s->bi_buf);\
-    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
-    s->bi_valid += len - Buf_size;\
-  } else {\
-    s->bi_buf |= (ush)(value) << s->bi_valid;\
-    s->bi_valid += len;\
-  }\
-}
-#endif /* DEBUG */
-
-
-/* the arguments must not have side effects */
-
-/* ===========================================================================
- * Initialize the various 'constant' tables.
- */
-local void tr_static_init()
-{
-#if defined(GEN_TREES_H) || !defined(STDC)
-    static int static_init_done = 0;
-    int n;        /* iterates over tree elements */
-    int bits;     /* bit counter */
-    int length;   /* length value */
-    int code;     /* code value */
-    int dist;     /* distance index */
-    ush bl_count[MAX_BITS+1];
-    /* number of codes at each bit length for an optimal tree */
-
-    if (static_init_done) return;
-
-    /* For some embedded targets, global variables are not initialized: */
-#ifdef NO_INIT_GLOBAL_POINTERS
-    static_l_desc.static_tree = static_ltree;
-    static_l_desc.extra_bits = extra_lbits;
-    static_d_desc.static_tree = static_dtree;
-    static_d_desc.extra_bits = extra_dbits;
-    static_bl_desc.extra_bits = extra_blbits;
-#endif
-
-    /* Initialize the mapping length (0..255) -> length code (0..28) */
-    length = 0;
-    for (code = 0; code < LENGTH_CODES-1; code++) {
-        base_length[code] = length;
-        for (n = 0; n < (1<<extra_lbits[code]); n++) {
-            _length_code[length++] = (uch)code;
-        }
-    }
-    Assert (length == 256, "tr_static_init: length != 256");
-    /* Note that the length 255 (match length 258) can be represented
-     * in two different ways: code 284 + 5 bits or code 285, so we
-     * overwrite length_code[255] to use the best encoding:
-     */
-    _length_code[length-1] = (uch)code;
-
-    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
-    dist = 0;
-    for (code = 0 ; code < 16; code++) {
-        base_dist[code] = dist;
-        for (n = 0; n < (1<<extra_dbits[code]); n++) {
-            _dist_code[dist++] = (uch)code;
-        }
-    }
-    Assert (dist == 256, "tr_static_init: dist != 256");
-    dist >>= 7; /* from now on, all distances are divided by 128 */
-    for ( ; code < D_CODES; code++) {
-        base_dist[code] = dist << 7;
-        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
-            _dist_code[256 + dist++] = (uch)code;
-        }
-    }
-    Assert (dist == 256, "tr_static_init: 256+dist != 512");
-
-    /* Construct the codes of the static literal tree */
-    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
-    n = 0;
-    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
-    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
-    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
-    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
-    /* Codes 286 and 287 do not exist, but we must include them in the
-     * tree construction to get a canonical Huffman tree (longest code
-     * all ones)
-     */
-    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
-
-    /* The static distance tree is trivial: */
-    for (n = 0; n < D_CODES; n++) {
-        static_dtree[n].Len = 5;
-        static_dtree[n].Code = bi_reverse((unsigned)n, 5);
-    }
-    static_init_done = 1;
-
-#  ifdef GEN_TREES_H
-    gen_trees_header();
-#  endif
-#endif /* defined(GEN_TREES_H) || !defined(STDC) */
-}
-
-/* ===========================================================================
- * Genererate the file trees.h describing the static trees.
- */
-#ifdef GEN_TREES_H
-#  ifndef DEBUG
-#    include <stdio.h>
-#  endif
-
-#  define SEPARATOR(i, last, width) \
-      ((i) == (last)? "\n};\n\n" :    \
-       ((i) % (width) == (width)-1 ? ",\n" : ", "))
-
-void gen_trees_header()
-{
-    FILE *header = fopen("trees.h", "w");
-    int i;
-
-    Assert (header != NULL, "Can't open trees.h");
-    fprintf(header,
-            "/* header created automatically with -DGEN_TREES_H */\n\n");
-
-    fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
-    for (i = 0; i < L_CODES+2; i++) {
-        fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
-                static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
-    }
-
-    fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
-    for (i = 0; i < D_CODES; i++) {
-        fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
-                static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
-    }
-
-    fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
-    for (i = 0; i < DIST_CODE_LEN; i++) {
-        fprintf(header, "%2u%s", _dist_code[i],
-                SEPARATOR(i, DIST_CODE_LEN-1, 20));
-    }
-
-    fprintf(header,
-        "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
-    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
-        fprintf(header, "%2u%s", _length_code[i],
-                SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
-    }
-
-    fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
-    for (i = 0; i < LENGTH_CODES; i++) {
-        fprintf(header, "%1u%s", base_length[i],
-                SEPARATOR(i, LENGTH_CODES-1, 20));
-    }
-
-    fprintf(header, "local const int base_dist[D_CODES] = {\n");
-    for (i = 0; i < D_CODES; i++) {
-        fprintf(header, "%5u%s", base_dist[i],
-                SEPARATOR(i, D_CODES-1, 10));
-    }
-
-    fclose(header);
-}
-#endif /* GEN_TREES_H */
-
-/* ===========================================================================
- * Initialize the tree data structures for a new zlib stream.
- */
-void ZLIB_INTERNAL _tr_init(s)
-    deflate_state *s;
-{
-    tr_static_init();
-
-    s->l_desc.dyn_tree = s->dyn_ltree;
-    s->l_desc.stat_desc = &static_l_desc;
-
-    s->d_desc.dyn_tree = s->dyn_dtree;
-    s->d_desc.stat_desc = &static_d_desc;
-
-    s->bl_desc.dyn_tree = s->bl_tree;
-    s->bl_desc.stat_desc = &static_bl_desc;
-
-    s->bi_buf = 0;
-    s->bi_valid = 0;
-#ifdef DEBUG
-    s->compressed_len = 0L;
-    s->bits_sent = 0L;
-#endif
-
-    /* Initialize the first block of the first file: */
-    init_block(s);
-}
-
-/* ===========================================================================
- * Initialize a new block.
- */
-local void init_block(s)
-    deflate_state *s;
-{
-    int n; /* iterates over tree elements */
-
-    /* Initialize the trees. */
-    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
-    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
-    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
-
-    s->dyn_ltree[END_BLOCK].Freq = 1;
-    s->opt_len = s->static_len = 0L;
-    s->last_lit = s->matches = 0;
-}
-
-#define SMALLEST 1
-/* Index within the heap array of least frequent node in the Huffman tree */
-
-
-/* ===========================================================================
- * Remove the smallest element from the heap and recreate the heap with
- * one less element. Updates heap and heap_len.
- */
-#define pqremove(s, tree, top) \
-{\
-    top = s->heap[SMALLEST]; \
-    s->heap[SMALLEST] = s->heap[s->heap_len--]; \
-    pqdownheap(s, tree, SMALLEST); \
-}
-
-/* ===========================================================================
- * Compares to subtrees, using the tree depth as tie breaker when
- * the subtrees have equal frequency. This minimizes the worst case length.
- */
-#define smaller(tree, n, m, depth) \
-   (tree[n].Freq < tree[m].Freq || \
-   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
-
-/* ===========================================================================
- * Restore the heap property by moving down the tree starting at node k,
- * exchanging a node with the smallest of its two sons if necessary, stopping
- * when the heap property is re-established (each father smaller than its
- * two sons).
- */
-local void pqdownheap(s, tree, k)
-    deflate_state *s;
-    ct_data *tree;  /* the tree to restore */
-    int k;               /* node to move down */
-{
-    int v = s->heap[k];
-    int j = k << 1;  /* left son of k */
-    while (j <= s->heap_len) {
-        /* Set j to the smallest of the two sons: */
-        if (j < s->heap_len &&
-            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
-            j++;
-        }
-        /* Exit if v is smaller than both sons */
-        if (smaller(tree, v, s->heap[j], s->depth)) break;
-
-        /* Exchange v with the smallest son */
-        s->heap[k] = s->heap[j];  k = j;
-
-        /* And continue down the tree, setting j to the left son of k */
-        j <<= 1;
-    }
-    s->heap[k] = v;
-}
-
-/* ===========================================================================
- * Compute the optimal bit lengths for a tree and update the total bit length
- * for the current block.
- * IN assertion: the fields freq and dad are set, heap[heap_max] and
- *    above are the tree nodes sorted by increasing frequency.
- * OUT assertions: the field len is set to the optimal bit length, the
- *     array bl_count contains the frequencies for each bit length.
- *     The length opt_len is updated; static_len is also updated if stree is
- *     not null.
- */
-local void gen_bitlen(s, desc)
-    deflate_state *s;
-    tree_desc *desc;    /* the tree descriptor */
-{
-    ct_data *tree        = desc->dyn_tree;
-    int max_code         = desc->max_code;
-    const ct_data *stree = desc->stat_desc->static_tree;
-    const intf *extra    = desc->stat_desc->extra_bits;
-    int base             = desc->stat_desc->extra_base;
-    int max_length       = desc->stat_desc->max_length;
-    int h;              /* heap index */
-    int n, m;           /* iterate over the tree elements */
-    int bits;           /* bit length */
-    int xbits;          /* extra bits */
-    ush f;              /* frequency */
-    int overflow = 0;   /* number of elements with bit length too large */
-
-    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
-
-    /* In a first pass, compute the optimal bit lengths (which may
-     * overflow in the case of the bit length tree).
-     */
-    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
-
-    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
-        n = s->heap[h];
-        bits = tree[tree[n].Dad].Len + 1;
-        if (bits > max_length) bits = max_length, overflow++;
-        tree[n].Len = (ush)bits;
-        /* We overwrite tree[n].Dad which is no longer needed */
-
-        if (n > max_code) continue; /* not a leaf node */
-
-        s->bl_count[bits]++;
-        xbits = 0;
-        if (n >= base) xbits = extra[n-base];
-        f = tree[n].Freq;
-        s->opt_len += (ulg)f * (bits + xbits);
-        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
-    }
-    if (overflow == 0) return;
-
-    Trace((stderr,"\nbit length overflow\n"));
-    /* This happens for example on obj2 and pic of the Calgary corpus */
-
-    /* Find the first bit length which could increase: */
-    do {
-        bits = max_length-1;
-        while (s->bl_count[bits] == 0) bits--;
-        s->bl_count[bits]--;      /* move one leaf down the tree */
-        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
-        s->bl_count[max_length]--;
-        /* The brother of the overflow item also moves one step up,
-         * but this does not affect bl_count[max_length]
-         */
-        overflow -= 2;
-    } while (overflow > 0);
-
-    /* Now recompute all bit lengths, scanning in increasing frequency.
-     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
-     * lengths instead of fixing only the wrong ones. This idea is taken
-     * from 'ar' written by Haruhiko Okumura.)
-     */
-    for (bits = max_length; bits != 0; bits--) {
-        n = s->bl_count[bits];
-        while (n != 0) {
-            m = s->heap[--h];
-            if (m > max_code) continue;
-            if ((unsigned) tree[m].Len != (unsigned) bits) {
-                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
-                s->opt_len += ((long)bits - (long)tree[m].Len)
-                              *(long)tree[m].Freq;
-                tree[m].Len = (ush)bits;
-            }
-            n--;
-        }
-    }
-}
-
-/* ===========================================================================
- * Generate the codes for a given tree and bit counts (which need not be
- * optimal).
- * IN assertion: the array bl_count contains the bit length statistics for
- * the given tree and the field len is set for all tree elements.
- * OUT assertion: the field code is set for all tree elements of non
- *     zero code length.
- */
-local void gen_codes (tree, max_code, bl_count)
-    ct_data *tree;             /* the tree to decorate */
-    int max_code;              /* largest code with non zero frequency */
-    ushf *bl_count;            /* number of codes at each bit length */
-{
-    ush next_code[MAX_BITS+1]; /* next code value for each bit length */
-    ush code = 0;              /* running code value */
-    int bits;                  /* bit index */
-    int n;                     /* code index */
-
-    /* The distribution counts are first used to generate the code values
-     * without bit reversal.
-     */
-    for (bits = 1; bits <= MAX_BITS; bits++) {
-        next_code[bits] = code = (code + bl_count[bits-1]) << 1;
-    }
-    /* Check that the bit counts in bl_count are consistent. The last code
-     * must be all ones.
-     */
-    Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
-            "inconsistent bit counts");
-    Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
-
-    for (n = 0;  n <= max_code; n++) {
-        int len = tree[n].Len;
-        if (len == 0) continue;
-        /* Now reverse the bits */
-        tree[n].Code = bi_reverse(next_code[len]++, len);
-
-        Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
-             n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
-    }
-}
-
-/* ===========================================================================
- * Construct one Huffman tree and assigns the code bit strings and lengths.
- * Update the total bit length for the current block.
- * IN assertion: the field freq is set for all tree elements.
- * OUT assertions: the fields len and code are set to the optimal bit length
- *     and corresponding code. The length opt_len is updated; static_len is
- *     also updated if stree is not null. The field max_code is set.
- */
-local void build_tree(s, desc)
-    deflate_state *s;
-    tree_desc *desc; /* the tree descriptor */
-{
-    ct_data *tree         = desc->dyn_tree;
-    const ct_data *stree  = desc->stat_desc->static_tree;
-    int elems             = desc->stat_desc->elems;
-    int n, m;          /* iterate over heap elements */
-    int max_code = -1; /* largest code with non zero frequency */
-    int node;          /* new node being created */
-
-    /* Construct the initial heap, with least frequent element in
-     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
-     * heap[0] is not used.
-     */
-    s->heap_len = 0, s->heap_max = HEAP_SIZE;
-
-    for (n = 0; n < elems; n++) {
-        if (tree[n].Freq != 0) {
-            s->heap[++(s->heap_len)] = max_code = n;
-            s->depth[n] = 0;
-        } else {
-            tree[n].Len = 0;
-        }
-    }
-
-    /* The pkzip format requires that at least one distance code exists,
-     * and that at least one bit should be sent even if there is only one
-     * possible code. So to avoid special checks later on we force at least
-     * two codes of non zero frequency.
-     */
-    while (s->heap_len < 2) {
-        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
-        tree[node].Freq = 1;
-        s->depth[node] = 0;
-        s->opt_len--; if (stree) s->static_len -= stree[node].Len;
-        /* node is 0 or 1 so it does not have extra bits */
-    }
-    desc->max_code = max_code;
-
-    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
-     * establish sub-heaps of increasing lengths:
-     */
-    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
-
-    /* Construct the Huffman tree by repeatedly combining the least two
-     * frequent nodes.
-     */
-    node = elems;              /* next internal node of the tree */
-    do {
-        pqremove(s, tree, n);  /* n = node of least frequency */
-        m = s->heap[SMALLEST]; /* m = node of next least frequency */
-
-        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
-        s->heap[--(s->heap_max)] = m;
-
-        /* Create a new node father of n and m */
-        tree[node].Freq = tree[n].Freq + tree[m].Freq;
-        s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
-                                s->depth[n] : s->depth[m]) + 1);
-        tree[n].Dad = tree[m].Dad = (ush)node;
-#ifdef DUMP_BL_TREE
-        if (tree == s->bl_tree) {
-            fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
-                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
-        }
-#endif
-        /* and insert the new node in the heap */
-        s->heap[SMALLEST] = node++;
-        pqdownheap(s, tree, SMALLEST);
-
-    } while (s->heap_len >= 2);
-
-    s->heap[--(s->heap_max)] = s->heap[SMALLEST];
-
-    /* At this point, the fields freq and dad are set. We can now
-     * generate the bit lengths.
-     */
-    gen_bitlen(s, (tree_desc *)desc);
-
-    /* The field len is now set, we can generate the bit codes */
-    gen_codes ((ct_data *)tree, max_code, s->bl_count);
-}
-
-/* ===========================================================================
- * Scan a literal or distance tree to determine the frequencies of the codes
- * in the bit length tree.
- */
-local void scan_tree (s, tree, max_code)
-    deflate_state *s;
-    ct_data *tree;   /* the tree to be scanned */
-    int max_code;    /* and its largest code of non zero frequency */
-{
-    int n;                     /* iterates over all tree elements */
-    int prevlen = -1;          /* last emitted length */
-    int curlen;                /* length of current code */
-    int nextlen = tree[0].Len; /* length of next code */
-    int count = 0;             /* repeat count of the current code */
-    int max_count = 7;         /* max repeat count */
-    int min_count = 4;         /* min repeat count */
-
-    if (nextlen == 0) max_count = 138, min_count = 3;
-    tree[max_code+1].Len = (ush)0xffff; /* guard */
-
-    for (n = 0; n <= max_code; n++) {
-        curlen = nextlen; nextlen = tree[n+1].Len;
-        if (++count < max_count && curlen == nextlen) {
-            continue;
-        } else if (count < min_count) {
-            s->bl_tree[curlen].Freq += count;
-        } else if (curlen != 0) {
-            if (curlen != prevlen) s->bl_tree[curlen].Freq++;
-            s->bl_tree[REP_3_6].Freq++;
-        } else if (count <= 10) {
-            s->bl_tree[REPZ_3_10].Freq++;
-        } else {
-            s->bl_tree[REPZ_11_138].Freq++;
-        }
-        count = 0; prevlen = curlen;
-        if (nextlen == 0) {
-            max_count = 138, min_count = 3;
-        } else if (curlen == nextlen) {
-            max_count = 6, min_count = 3;
-        } else {
-            max_count = 7, min_count = 4;
-        }
-    }
-}
-
-/* ===========================================================================
- * Send a literal or distance tree in compressed form, using the codes in
- * bl_tree.
- */
-local void send_tree (s, tree, max_code)
-    deflate_state *s;
-    ct_data *tree; /* the tree to be scanned */
-    int max_code;       /* and its largest code of non zero frequency */
-{
-    int n;                     /* iterates over all tree elements */
-    int prevlen = -1;          /* last emitted length */
-    int curlen;                /* length of current code */
-    int nextlen = tree[0].Len; /* length of next code */
-    int count = 0;             /* repeat count of the current code */
-    int max_count = 7;         /* max repeat count */
-    int min_count = 4;         /* min repeat count */
-
-    /* tree[max_code+1].Len = -1; */  /* guard already set */
-    if (nextlen == 0) max_count = 138, min_count = 3;
-
-    for (n = 0; n <= max_code; n++) {
-        curlen = nextlen; nextlen = tree[n+1].Len;
-        if (++count < max_count && curlen == nextlen) {
-            continue;
-        } else if (count < min_count) {
-            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
-
-        } else if (curlen != 0) {
-            if (curlen != prevlen) {
-                send_code(s, curlen, s->bl_tree); count--;
-            }
-            Assert(count >= 3 && count <= 6, " 3_6?");
-            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
-
-        } else if (count <= 10) {
-            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
-
-        } else {
-            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
-        }
-        count = 0; prevlen = curlen;
-        if (nextlen == 0) {
-            max_count = 138, min_count = 3;
-        } else if (curlen == nextlen) {
-            max_count = 6, min_count = 3;
-        } else {
-            max_count = 7, min_count = 4;
-        }
-    }
-}
-
-/* ===========================================================================
- * Construct the Huffman tree for the bit lengths and return the index in
- * bl_order of the last bit length code to send.
- */
-local int build_bl_tree(s)
-    deflate_state *s;
-{
-    int max_blindex;  /* index of last bit length code of non zero freq */
-
-    /* Determine the bit length frequencies for literal and distance trees */
-    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
-    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
-
-    /* Build the bit length tree: */
-    build_tree(s, (tree_desc *)(&(s->bl_desc)));
-    /* opt_len now includes the length of the tree representations, except
-     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
-     */
-
-    /* Determine the number of bit length codes to send. The pkzip format
-     * requires that at least 4 bit length codes be sent. (appnote.txt says
-     * 3 but the actual value used is 4.)
-     */
-    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
-        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
-    }
-    /* Update opt_len to include the bit length tree and counts */
-    s->opt_len += 3*(max_blindex+1) + 5+5+4;
-    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
-            s->opt_len, s->static_len));
-
-    return max_blindex;
-}
-
-/* ===========================================================================
- * Send the header for a block using dynamic Huffman trees: the counts, the
- * lengths of the bit length codes, the literal tree and the distance tree.
- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
- */
-local void send_all_trees(s, lcodes, dcodes, blcodes)
-    deflate_state *s;
-    int lcodes, dcodes, blcodes; /* number of codes for each tree */
-{
-    int rank;                    /* index in bl_order */
-
-    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
-    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
-            "too many codes");
-    Tracev((stderr, "\nbl counts: "));
-    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
-    send_bits(s, dcodes-1,   5);
-    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
-    for (rank = 0; rank < blcodes; rank++) {
-        Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
-        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
-    }
-    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
-
-    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
-    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
-
-    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
-    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
-}
-
-/* ===========================================================================
- * Send a stored block
- */
-void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
-    deflate_state *s;
-    charf *buf;       /* input block */
-    ulg stored_len;   /* length of input block */
-    int last;         /* one if this is the last block for a file */
-{
-    send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */
-#ifdef DEBUG
-    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
-    s->compressed_len += (stored_len + 4) << 3;
-#endif
-    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
-}
-
-/* ===========================================================================
- * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
- */
-void ZLIB_INTERNAL _tr_flush_bits(s)
-    deflate_state *s;
-{
-    bi_flush(s);
-}
-
-/* ===========================================================================
- * Send one empty static block to give enough lookahead for inflate.
- * This takes 10 bits, of which 7 may remain in the bit buffer.
- */
-void ZLIB_INTERNAL _tr_align(s)
-    deflate_state *s;
-{
-    send_bits(s, STATIC_TREES<<1, 3);
-    send_code(s, END_BLOCK, static_ltree);
-#ifdef DEBUG
-    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
-#endif
-    bi_flush(s);
-}
-
-/* ===========================================================================
- * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file.
- */
-void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
-    deflate_state *s;
-    charf *buf;       /* input block, or NULL if too old */
-    ulg stored_len;   /* length of input block */
-    int last;         /* one if this is the last block for a file */
-{
-    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
-    int max_blindex = 0;  /* index of last bit length code of non zero freq */
-
-    /* Build the Huffman trees unless a stored block is forced */
-    if (s->level > 0) {
-
-        /* Check if the file is binary or text */
-        if (s->strm->data_type == Z_UNKNOWN)
-            s->strm->data_type = detect_data_type(s);
-
-        /* Construct the literal and distance trees */
-        build_tree(s, (tree_desc *)(&(s->l_desc)));
-        Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
-                s->static_len));
-
-        build_tree(s, (tree_desc *)(&(s->d_desc)));
-        Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
-                s->static_len));
-        /* At this point, opt_len and static_len are the total bit lengths of
-         * the compressed block data, excluding the tree representations.
-         */
-
-        /* Build the bit length tree for the above two trees, and get the index
-         * in bl_order of the last bit length code to send.
-         */
-        max_blindex = build_bl_tree(s);
-
-        /* Determine the best encoding. Compute the block lengths in bytes. */
-        opt_lenb = (s->opt_len+3+7)>>3;
-        static_lenb = (s->static_len+3+7)>>3;
-
-        Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
-                opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
-                s->last_lit));
-
-        if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
-
-    } else {
-        Assert(buf != (char*)0, "lost buf");
-        opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
-    }
-
-#ifdef FORCE_STORED
-    if (buf != (char*)0) { /* force stored block */
-#else
-    if (stored_len+4 <= opt_lenb && buf != (char*)0) {
-                       /* 4: two words for the lengths */
-#endif
-        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
-         * Otherwise we can't have processed more than WSIZE input bytes since
-         * the last block flush, because compression would have been
-         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
-         * transform a block into a stored block.
-         */
-        _tr_stored_block(s, buf, stored_len, last);
-
-#ifdef FORCE_STATIC
-    } else if (static_lenb >= 0) { /* force static trees */
-#else
-    } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
-#endif
-        send_bits(s, (STATIC_TREES<<1)+last, 3);
-        compress_block(s, (const ct_data *)static_ltree,
-                       (const ct_data *)static_dtree);
-#ifdef DEBUG
-        s->compressed_len += 3 + s->static_len;
-#endif
-    } else {
-        send_bits(s, (DYN_TREES<<1)+last, 3);
-        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
-                       max_blindex+1);
-        compress_block(s, (const ct_data *)s->dyn_ltree,
-                       (const ct_data *)s->dyn_dtree);
-#ifdef DEBUG
-        s->compressed_len += 3 + s->opt_len;
-#endif
-    }
-    Assert (s->compressed_len == s->bits_sent, "bad compressed size");
-    /* The above check is made mod 2^32, for files larger than 512 MB
-     * and uLong implemented on 32 bits.
-     */
-    init_block(s);
-
-    if (last) {
-        bi_windup(s);
-#ifdef DEBUG
-        s->compressed_len += 7;  /* align on byte boundary */
-#endif
-    }
-    Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
-           s->compressed_len-7*last));
-}
-
-/* ===========================================================================
- * Save the match info and tally the frequency counts. Return true if
- * the current block must be flushed.
- */
-int ZLIB_INTERNAL _tr_tally (s, dist, lc)
-    deflate_state *s;
-    unsigned dist;  /* distance of matched string */
-    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
-{
-    s->d_buf[s->last_lit] = (ush)dist;
-    s->l_buf[s->last_lit++] = (uch)lc;
-    if (dist == 0) {
-        /* lc is the unmatched char */
-        s->dyn_ltree[lc].Freq++;
-    } else {
-        s->matches++;
-        /* Here, lc is the match length - MIN_MATCH */
-        dist--;             /* dist = match distance - 1 */
-        Assert((ush)dist < (ush)MAX_DIST(s) &&
-               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
-               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
-
-        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
-        s->dyn_dtree[d_code(dist)].Freq++;
-    }
-
-#ifdef TRUNCATE_BLOCK
-    /* Try to guess if it is profitable to stop the current block here */
-    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
-        /* Compute an upper bound for the compressed length */
-        ulg out_length = (ulg)s->last_lit*8L;
-        ulg in_length = (ulg)((long)s->strstart - s->block_start);
-        int dcode;
-        for (dcode = 0; dcode < D_CODES; dcode++) {
-            out_length += (ulg)s->dyn_dtree[dcode].Freq *
-                (5L+extra_dbits[dcode]);
-        }
-        out_length >>= 3;
-        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
-               s->last_lit, in_length, out_length,
-               100L - out_length*100L/in_length));
-        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
-    }
-#endif
-    return (s->last_lit == s->lit_bufsize-1);
-    /* We avoid equality with lit_bufsize because of wraparound at 64K
-     * on 16 bit machines and because stored blocks are restricted to
-     * 64K-1 bytes.
-     */
-}
-
-/* ===========================================================================
- * Send the block data compressed using the given Huffman trees
- */
-local void compress_block(s, ltree, dtree)
-    deflate_state *s;
-    const ct_data *ltree; /* literal tree */
-    const ct_data *dtree; /* distance tree */
-{
-    unsigned dist;      /* distance of matched string */
-    int lc;             /* match length or unmatched char (if dist == 0) */
-    unsigned lx = 0;    /* running index in l_buf */
-    unsigned code;      /* the code to send */
-    int extra;          /* number of extra bits to send */
-
-    if (s->last_lit != 0) do {
-        dist = s->d_buf[lx];
-        lc = s->l_buf[lx++];
-        if (dist == 0) {
-            send_code(s, lc, ltree); /* send a literal byte */
-            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
-        } else {
-            /* Here, lc is the match length - MIN_MATCH */
-            code = _length_code[lc];
-            send_code(s, code+LITERALS+1, ltree); /* send the length code */
-            extra = extra_lbits[code];
-            if (extra != 0) {
-                lc -= base_length[code];
-                send_bits(s, lc, extra);       /* send the extra length bits */
-            }
-            dist--; /* dist is now the match distance - 1 */
-            code = d_code(dist);
-            Assert (code < D_CODES, "bad d_code");
-
-            send_code(s, code, dtree);       /* send the distance code */
-            extra = extra_dbits[code];
-            if (extra != 0) {
-                dist -= base_dist[code];
-                send_bits(s, dist, extra);   /* send the extra distance bits */
-            }
-        } /* literal or match pair ? */
-
-        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
-        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
-               "pendingBuf overflow");
-
-    } while (lx < s->last_lit);
-
-    send_code(s, END_BLOCK, ltree);
-}
-
-/* ===========================================================================
- * Check if the data type is TEXT or BINARY, using the following algorithm:
- * - TEXT if the two conditions below are satisfied:
- *    a) There are no non-portable control characters belonging to the
- *       "black list" (0..6, 14..25, 28..31).
- *    b) There is at least one printable character belonging to the
- *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
- * - BINARY otherwise.
- * - The following partially-portable control characters form a
- *   "gray list" that is ignored in this detection algorithm:
- *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
- * IN assertion: the fields Freq of dyn_ltree are set.
- */
-local int detect_data_type(s)
-    deflate_state *s;
-{
-    /* black_mask is the bit mask of black-listed bytes
-     * set bits 0..6, 14..25, and 28..31
-     * 0xf3ffc07f = binary 11110011111111111100000001111111
-     */
-    unsigned long black_mask = 0xf3ffc07fUL;
-    int n;
-
-    /* Check for non-textual ("black-listed") bytes. */
-    for (n = 0; n <= 31; n++, black_mask >>= 1)
-        if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
-            return Z_BINARY;
-
-    /* Check for textual ("white-listed") bytes. */
-    if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
-            || s->dyn_ltree[13].Freq != 0)
-        return Z_TEXT;
-    for (n = 32; n < LITERALS; n++)
-        if (s->dyn_ltree[n].Freq != 0)
-            return Z_TEXT;
-
-    /* There are no "black-listed" or "white-listed" bytes:
-     * this stream either is empty or has tolerated ("gray-listed") bytes only.
-     */
-    return Z_BINARY;
-}
-
-/* ===========================================================================
- * Reverse the first len bits of a code, using straightforward code (a faster
- * method would use a table)
- * IN assertion: 1 <= len <= 15
- */
-local unsigned bi_reverse(code, len)
-    unsigned code; /* the value to invert */
-    int len;       /* its bit length */
-{
-    register unsigned res = 0;
-    do {
-        res |= code & 1;
-        code >>= 1, res <<= 1;
-    } while (--len > 0);
-    return res >> 1;
-}
-
-/* ===========================================================================
- * Flush the bit buffer, keeping at most 7 bits in it.
- */
-local void bi_flush(s)
-    deflate_state *s;
-{
-    if (s->bi_valid == 16) {
-        put_short(s, s->bi_buf);
-        s->bi_buf = 0;
-        s->bi_valid = 0;
-    } else if (s->bi_valid >= 8) {
-        put_byte(s, (Byte)s->bi_buf);
-        s->bi_buf >>= 8;
-        s->bi_valid -= 8;
-    }
-}
-
-/* ===========================================================================
- * Flush the bit buffer and align the output on a byte boundary
- */
-local void bi_windup(s)
-    deflate_state *s;
-{
-    if (s->bi_valid > 8) {
-        put_short(s, s->bi_buf);
-    } else if (s->bi_valid > 0) {
-        put_byte(s, (Byte)s->bi_buf);
-    }
-    s->bi_buf = 0;
-    s->bi_valid = 0;
-#ifdef DEBUG
-    s->bits_sent = (s->bits_sent+7) & ~7;
-#endif
-}
-
-/* ===========================================================================
- * Copy a stored block, storing first the length and its
- * one's complement if requested.
- */
-local void copy_block(s, buf, len, header)
-    deflate_state *s;
-    charf    *buf;    /* the input data */
-    unsigned len;     /* its length */
-    int      header;  /* true if block header must be written */
-{
-    bi_windup(s);        /* align on byte boundary */
-
-    if (header) {
-        put_short(s, (ush)len);
-        put_short(s, (ush)~len);
-#ifdef DEBUG
-        s->bits_sent += 2*16;
-#endif
-    }
-#ifdef DEBUG
-    s->bits_sent += (ulg)len<<3;
-#endif
-    while (len--) {
-        put_byte(s, *buf++);
-    }
-}
--- a/DoConfig/fltk/zlib/trees.h
+++ /dev/null
@@ -1,128 +1,0 @@
-/* header created automatically with -DGEN_TREES_H */
-
-local const ct_data static_ltree[L_CODES+2] = {
-{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},
-{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},
-{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},
-{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},
-{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},
-{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},
-{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},
-{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},
-{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},
-{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},
-{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},
-{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},
-{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},
-{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},
-{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},
-{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},
-{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},
-{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},
-{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},
-{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},
-{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},
-{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},
-{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},
-{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},
-{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},
-{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},
-{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},
-{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},
-{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},
-{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},
-{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},
-{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},
-{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},
-{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},
-{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},
-{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},
-{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},
-{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},
-{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},
-{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},
-{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},
-{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},
-{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},
-{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},
-{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},
-{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},
-{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},
-{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},
-{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},
-{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},
-{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},
-{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},
-{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},
-{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},
-{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},
-{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},
-{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},
-{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}
-};
-
-local const ct_data static_dtree[D_CODES] = {
-{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
-{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
-{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
-{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
-{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
-{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
-};
-
-const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
- 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
- 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
-10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
-15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
-18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
-29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
-};
-
-const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
- 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
-13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
-17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
-19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
-22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
-23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
-26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
-27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
-};
-
-local const int base_length[LENGTH_CODES] = {
-0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
-64, 80, 96, 112, 128, 160, 192, 224, 0
-};
-
-local const int base_dist[D_CODES] = {
-    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,
-   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,
- 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
-};
-
--- a/DoConfig/fltk/zlib/uncompr.c
+++ /dev/null
@@ -1,59 +1,0 @@
-/* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#define ZLIB_INTERNAL
-#include "zlib.h"
-
-/* ===========================================================================
-     Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer. Upon entry, destLen is the total
-   size of the destination buffer, which must be large enough to hold the
-   entire uncompressed data. (The size of the uncompressed data must have
-   been saved previously by the compressor and transmitted to the decompressor
-   by some mechanism outside the scope of this compression library.)
-   Upon exit, destLen is the actual size of the compressed buffer.
-
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted.
-*/
-int ZEXPORT uncompress (dest, destLen, source, sourceLen)
-    Bytef *dest;
-    uLongf *destLen;
-    const Bytef *source;
-    uLong sourceLen;
-{
-    z_stream stream;
-    int err;
-
-    stream.next_in = (z_const Bytef *)source;
-    stream.avail_in = (uInt)sourceLen;
-    /* Check for source > 64K on 16-bit machine: */
-    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
-
-    stream.next_out = dest;
-    stream.avail_out = (uInt)*destLen;
-    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
-
-    stream.zalloc = (alloc_func)0;
-    stream.zfree = (free_func)0;
-
-    err = inflateInit(&stream);
-    if (err != Z_OK) return err;
-
-    err = inflate(&stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-        inflateEnd(&stream);
-        if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
-            return Z_DATA_ERROR;
-        return err;
-    }
-    *destLen = stream.total_out;
-
-    err = inflateEnd(&stream);
-    return err;
-}
--- a/DoConfig/fltk/zlib/zconf.h
+++ /dev/null
@@ -1,520 +1,0 @@
-/* FLTK ***************************************************************	*/
-/* FLTK   Comments marked with FLTK show modifications for FLTK which	*/
-/* FLTK   should probably be preserved when zlib is upgraded.		*/
-/* FLTK ***************************************************************	*/
-
-/* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#ifndef ZCONF_H
-#define ZCONF_H
-
-#if ! (defined(_WIN32) || defined(WIN32))	/* FLTK */
-#  define HAVE_UNISTD_H				/* FLTK */
-#endif						/* FLTK */
-
-/*
- * If you *really* need a unique prefix for all types and library functions,
- * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
- * Even better than compiling with -DZ_PREFIX would be to use configure to set
- * this permanently in zconf.h using "./configure --zprefix".
- */
-#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
-#  define Z_PREFIX_SET
-
-/* all linked symbols */
-#  define _dist_code            z__dist_code
-#  define _length_code          z__length_code
-#  define _tr_align             z__tr_align
-#  define _tr_flush_bits        z__tr_flush_bits
-#  define _tr_flush_block       z__tr_flush_block
-#  define _tr_init              z__tr_init
-#  define _tr_stored_block      z__tr_stored_block
-#  define _tr_tally             z__tr_tally
-#  define adler32               z_adler32
-#  define adler32_combine       z_adler32_combine
-#  define adler32_combine64     z_adler32_combine64
-#  ifndef Z_SOLO
-#    define compress              z_compress
-#    define compress2             z_compress2
-#    define compressBound         z_compressBound
-#  endif
-#  define crc32                 z_crc32
-#  define crc32_combine         z_crc32_combine
-#  define crc32_combine64       z_crc32_combine64
-#  define deflate               z_deflate
-#  define deflateBound          z_deflateBound
-#  define deflateCopy           z_deflateCopy
-#  define deflateEnd            z_deflateEnd
-#  define deflateInit2_         z_deflateInit2_
-#  define deflateInit_          z_deflateInit_
-#  define deflateParams         z_deflateParams
-#  define deflatePending        z_deflatePending
-#  define deflatePrime          z_deflatePrime
-#  define deflateReset          z_deflateReset
-#  define deflateResetKeep      z_deflateResetKeep
-#  define deflateSetDictionary  z_deflateSetDictionary
-#  define deflateSetHeader      z_deflateSetHeader
-#  define deflateTune           z_deflateTune
-#  define deflate_copyright     z_deflate_copyright
-#  define get_crc_table         z_get_crc_table
-#  ifndef Z_SOLO
-#    define gz_error              z_gz_error
-#    define gz_intmax             z_gz_intmax
-#    define gz_strwinerror        z_gz_strwinerror
-#    define gzbuffer              z_gzbuffer
-#    define gzclearerr            z_gzclearerr
-#    define gzclose               z_gzclose
-#    define gzclose_r             z_gzclose_r
-#    define gzclose_w             z_gzclose_w
-#    define gzdirect              z_gzdirect
-#    define gzdopen               z_gzdopen
-#    define gzeof                 z_gzeof
-#    define gzerror               z_gzerror
-#    define gzflush               z_gzflush
-#    define gzgetc                z_gzgetc
-#    define gzgetc_               z_gzgetc_
-#    define gzgets                z_gzgets
-#    define gzoffset              z_gzoffset
-#    define gzoffset64            z_gzoffset64
-#    define gzopen                z_gzopen
-#    define gzopen64              z_gzopen64
-#    ifdef _WIN32
-#      define gzopen_w              z_gzopen_w
-#    endif
-#    define gzprintf              z_gzprintf
-#    define gzvprintf             z_gzvprintf
-#    define gzputc                z_gzputc
-#    define gzputs                z_gzputs
-#    define gzread                z_gzread
-#    define gzrewind              z_gzrewind
-#    define gzseek                z_gzseek
-#    define gzseek64              z_gzseek64
-#    define gzsetparams           z_gzsetparams
-#    define gztell                z_gztell
-#    define gztell64              z_gztell64
-#    define gzungetc              z_gzungetc
-#    define gzwrite               z_gzwrite
-#  endif
-#  define inflate               z_inflate
-#  define inflateBack           z_inflateBack
-#  define inflateBackEnd        z_inflateBackEnd
-#  define inflateBackInit_      z_inflateBackInit_
-#  define inflateCopy           z_inflateCopy
-#  define inflateEnd            z_inflateEnd
-#  define inflateGetHeader      z_inflateGetHeader
-#  define inflateInit2_         z_inflateInit2_
-#  define inflateInit_          z_inflateInit_
-#  define inflateMark           z_inflateMark
-#  define inflatePrime          z_inflatePrime
-#  define inflateReset          z_inflateReset
-#  define inflateReset2         z_inflateReset2
-#  define inflateSetDictionary  z_inflateSetDictionary
-#  define inflateGetDictionary  z_inflateGetDictionary
-#  define inflateSync           z_inflateSync
-#  define inflateSyncPoint      z_inflateSyncPoint
-#  define inflateUndermine      z_inflateUndermine
-#  define inflateResetKeep      z_inflateResetKeep
-#  define inflate_copyright     z_inflate_copyright
-#  define inflate_fast          z_inflate_fast
-#  define inflate_table         z_inflate_table
-#  ifndef Z_SOLO
-#    define uncompress            z_uncompress
-#  endif
-#  define zError                z_zError
-#  ifndef Z_SOLO
-#    define zcalloc               z_zcalloc
-#    define zcfree                z_zcfree
-#  endif
-#  define zlibCompileFlags      z_zlibCompileFlags
-#  define zlibVersion           z_zlibVersion
-
-/* all zlib typedefs in zlib.h and zconf.h */
-#  define Byte                  z_Byte
-#  define Bytef                 z_Bytef
-#  define alloc_func            z_alloc_func
-#  define charf                 z_charf
-#  define free_func             z_free_func
-#  ifndef Z_SOLO
-#    define gzFile                z_gzFile
-#  endif
-#  define gz_header             z_gz_header
-#  define gz_headerp            z_gz_headerp
-#  define in_func               z_in_func
-#  define intf                  z_intf
-#  define out_func              z_out_func
-#  define uInt                  z_uInt
-#  define uIntf                 z_uIntf
-#  define uLong                 z_uLong
-#  define uLongf                z_uLongf
-#  define voidp                 z_voidp
-#  define voidpc                z_voidpc
-#  define voidpf                z_voidpf
-
-/* all zlib structs in zlib.h and zconf.h */
-#  define gz_header_s           z_gz_header_s
-#  define internal_state        z_internal_state
-
-#endif
-
-#if defined(__MSDOS__) && !defined(MSDOS)
-#  define MSDOS
-#endif
-#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
-#  define OS2
-#endif
-#if defined(_WINDOWS) && !defined(WINDOWS)
-#  define WINDOWS
-#endif
-#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
-#  ifndef WIN32
-#    define WIN32
-#  endif
-#endif
-#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
-#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
-#    ifndef SYS16BIT
-#      define SYS16BIT
-#    endif
-#  endif
-#endif
-
-/*
- * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
- * than 64k bytes at a time (needed on systems with 16-bit int).
- */
-#ifdef SYS16BIT
-#  define MAXSEG_64K
-#endif
-#ifdef MSDOS
-#  define UNALIGNED_OK
-#endif
-
-#ifdef __STDC_VERSION__
-#  ifndef STDC
-#    define STDC
-#  endif
-#  if __STDC_VERSION__ >= 199901L
-#    ifndef STDC99
-#      define STDC99
-#    endif
-#  endif
-#endif
-#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
-#  define STDC
-#endif
-#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
-#  define STDC
-#endif
-
-#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
-#  define STDC
-#endif
-
-#ifndef STDC
-#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
-#    define const       /* note: need a more gentle solution here */
-#  endif
-#endif
-
-#if defined(ZLIB_CONST) && !defined(z_const)
-#  define z_const const
-#else
-#  define z_const
-#endif
-
-/* Some Mac compilers merge all .h files incorrectly: */
-#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
-#  define NO_DUMMY_DECL
-#endif
-
-/* Maximum value for memLevel in deflateInit2 */
-#ifndef MAX_MEM_LEVEL
-#  ifdef MAXSEG_64K
-#    define MAX_MEM_LEVEL 8
-#  else
-#    define MAX_MEM_LEVEL 9
-#  endif
-#endif
-
-/* Maximum value for windowBits in deflateInit2 and inflateInit2.
- * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
- * created by gzip. (Files created by minigzip can still be extracted by
- * gzip.)
- */
-#ifndef MAX_WBITS
-#  define MAX_WBITS   15 /* 32K LZ77 window */
-#endif
-
-/* The memory requirements for deflate are (in bytes):
-            (1 << (windowBits+2)) +  (1 << (memLevel+9))
- that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
- plus a few kilobytes for small objects. For example, if you want to reduce
- the default memory requirements from 256K to 128K, compile with
-     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- Of course this will generally degrade compression (there's no free lunch).
-
-   The memory requirements for inflate are (in bytes) 1 << windowBits
- that is, 32K for windowBits=15 (default value) plus a few kilobytes
- for small objects.
-*/
-
-                        /* Type declarations */
-
-#ifndef OF /* function prototypes */
-#  ifdef STDC
-#    define OF(args)  args
-#  else
-#    define OF(args)  ()
-#  endif
-#endif
-
-#ifndef Z_ARG /* function prototypes for stdarg */
-#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#    define Z_ARG(args)  args
-#  else
-#    define Z_ARG(args)  ()
-#  endif
-#endif
-
-/* The following definitions for FAR are needed only for MSDOS mixed
- * model programming (small or medium model with some far allocations).
- * This was tested only with MSC; for other MSDOS compilers you may have
- * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
- * just define FAR to be empty.
- */
-#ifdef SYS16BIT
-#  if defined(M_I86SM) || defined(M_I86MM)
-     /* MSC small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef _MSC_VER
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#  if (defined(__SMALL__) || defined(__MEDIUM__))
-     /* Turbo C small or medium model */
-#    define SMALL_MEDIUM
-#    ifdef __BORLANDC__
-#      define FAR _far
-#    else
-#      define FAR far
-#    endif
-#  endif
-#endif
-
-#if defined(WINDOWS) || defined(WIN32)
-   /* If building or using zlib as a DLL, define ZLIB_DLL.
-    * This is not mandatory, but it offers a little performance increase.
-    */
-#  ifdef ZLIB_DLL
-#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
-#      ifdef ZLIB_INTERNAL
-#        define ZEXTERN extern __declspec(dllexport)
-#      else
-#        define ZEXTERN extern __declspec(dllimport)
-#      endif
-#    endif
-#  endif  /* ZLIB_DLL */
-   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
-    * define ZLIB_WINAPI.
-    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
-    */
-#  ifdef ZLIB_WINAPI
-#    ifdef FAR
-#      undef FAR
-#    endif
-#    include <windows.h>
-     /* No need for _export, use ZLIB.DEF instead. */
-     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
-#    define ZEXPORT WINAPI
-#    ifdef WIN32
-#      define ZEXPORTVA WINAPIV
-#    else
-#      define ZEXPORTVA FAR CDECL
-#    endif
-#  endif
-#endif
-
-#if defined (__BEOS__)
-#  ifdef ZLIB_DLL
-#    ifdef ZLIB_INTERNAL
-#      define ZEXPORT   __declspec(dllexport)
-#      define ZEXPORTVA __declspec(dllexport)
-#    else
-#      define ZEXPORT   __declspec(dllimport)
-#      define ZEXPORTVA __declspec(dllimport)
-#    endif
-#  endif
-#endif
-
-#ifndef ZEXTERN
-#  define ZEXTERN extern
-#endif
-#ifndef ZEXPORT
-#  define ZEXPORT
-#endif
-#ifndef ZEXPORTVA
-#  define ZEXPORTVA
-#endif
-
-#ifndef FAR
-#  define FAR
-#endif
-
-#if !defined(__MACTYPES__)
-typedef unsigned char  Byte;  /* 8 bits */
-#endif
-typedef unsigned int   uInt;  /* 16 bits or more */
-typedef unsigned long  uLong; /* 32 bits or more */
-
-#ifdef SMALL_MEDIUM
-   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
-#  define Bytef Byte FAR
-#else
-   typedef Byte  FAR Bytef;
-#endif
-typedef char  FAR charf;
-typedef int   FAR intf;
-typedef uInt  FAR uIntf;
-typedef uLong FAR uLongf;
-
-#ifdef STDC
-   typedef void const *voidpc;
-   typedef void FAR   *voidpf;
-   typedef void       *voidp;
-#else
-   typedef Byte const *voidpc;
-   typedef Byte FAR   *voidpf;
-   typedef Byte       *voidp;
-#endif
-
-#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
-#  include <limits.h>
-#  if (UINT_MAX == 0xffffffffUL)
-#    define Z_U4 unsigned
-#  elif (ULONG_MAX == 0xffffffffUL)
-#    define Z_U4 unsigned long
-#  elif (USHRT_MAX == 0xffffffffUL)
-#    define Z_U4 unsigned short
-#  endif
-#endif
-
-#ifdef Z_U4
-   typedef Z_U4 z_crc_t;
-#else
-   typedef unsigned long z_crc_t;
-#endif
-
-#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
-#  define Z_HAVE_UNISTD_H
-#endif
-
-#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
-#  define Z_HAVE_STDARG_H
-#endif
-
-#ifdef STDC
-#  ifndef Z_SOLO
-#    include <sys/types.h>      /* for off_t */
-#  endif
-#endif
-
-#if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#  ifndef Z_SOLO
-#    include <stdarg.h>         /* for va_list */
-#  endif
-#endif
-
-#ifdef _WIN32
-#  ifndef Z_SOLO
-#    include <stddef.h>         /* for wchar_t */
-#  endif
-#endif
-
-/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
- * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
- * though the former does not conform to the LFS document), but considering
- * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
- * equivalently requesting no 64-bit operations
- */
-#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
-#  undef _LARGEFILE64_SOURCE
-#endif
-
-#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
-#  define Z_HAVE_UNISTD_H
-#endif
-#ifndef Z_SOLO
-#  if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
-#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
-#    ifdef VMS
-#      include <unixio.h>       /* for off_t */
-#    endif
-#    ifndef z_off_t
-#      define z_off_t off_t
-#    endif
-#  endif
-#endif
-
-#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
-#  define Z_LFS64
-#endif
-
-#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
-#  define Z_LARGE64
-#endif
-
-#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
-#  define Z_WANT64
-#endif
-
-#if !defined(SEEK_SET) && !defined(Z_SOLO)
-#  define SEEK_SET        0       /* Seek from beginning of file.  */
-#  define SEEK_CUR        1       /* Seek from current position.  */
-#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
-#endif
-
-#ifndef z_off_t
-#  define z_off_t long
-#endif
-
-#if !defined(_WIN32) && defined(Z_LARGE64)
-#  define z_off64_t off64_t
-#else
-#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
-#    define z_off64_t __int64
-#  else
-#    define z_off64_t z_off_t
-#  endif
-#endif
-
-/* MVS linker does not support external names larger than 8 bytes */
-#if defined(__MVS__)
-  #pragma map(deflateInit_,"DEIN")
-  #pragma map(deflateInit2_,"DEIN2")
-  #pragma map(deflateEnd,"DEEND")
-  #pragma map(deflateBound,"DEBND")
-  #pragma map(inflateInit_,"ININ")
-  #pragma map(inflateInit2_,"ININ2")
-  #pragma map(inflateEnd,"INEND")
-  #pragma map(inflateSync,"INSY")
-  #pragma map(inflateSetDictionary,"INSEDI")
-  #pragma map(compressBound,"CMBND")
-  #pragma map(inflate_table,"INTABL")
-  #pragma map(inflate_fast,"INFA")
-  #pragma map(inflate_copyright,"INCOPY")
-#endif
-
-#endif /* ZCONF_H */
--- a/DoConfig/fltk/zlib/zlib.3
+++ /dev/null
@@ -1,151 +1,0 @@
-.TH ZLIB 3 "28 Apr 2013"
-.SH NAME
-zlib \- compression/decompression library
-.SH SYNOPSIS
-[see
-.I zlib.h
-for full description]
-.SH DESCRIPTION
-The
-.I zlib
-library is a general purpose data compression library.
-The code is thread safe, assuming that the standard library functions
-used are thread safe, such as memory allocation routines.
-It provides in-memory compression and decompression functions,
-including integrity checks of the uncompressed data.
-This version of the library supports only one compression method (deflation)
-but other algorithms may be added later
-with the same stream interface.
-.LP
-Compression can be done in a single step if the buffers are large enough
-or can be done by repeated calls of the compression function.
-In the latter case,
-the application must provide more input and/or consume the output
-(providing more output space) before each call.
-.LP
-The library also supports reading and writing files in
-.IR gzip (1)
-(.gz) format
-with an interface similar to that of stdio.
-.LP
-The library does not install any signal handler.
-The decoder checks the consistency of the compressed data,
-so the library should never crash even in the case of corrupted input.
-.LP
-All functions of the compression library are documented in the file
-.IR zlib.h .
-The distribution source includes examples of use of the library
-in the files
-.I test/example.c
-and
-.IR test/minigzip.c,
-as well as other examples in the
-.IR examples/
-directory.
-.LP
-Changes to this version are documented in the file
-.I ChangeLog
-that accompanies the source.
-.LP
-.I zlib
-is available in Java using the java.util.zip package:
-.IP
-http://java.sun.com/developer/technicalArticles/Programming/compression/
-.LP
-A Perl interface to
-.IR zlib ,
-written by Paul Marquess (pmqs@cpan.org),
-is available at CPAN (Comprehensive Perl Archive Network) sites,
-including:
-.IP
-http://search.cpan.org/~pmqs/IO-Compress-Zlib/
-.LP
-A Python interface to
-.IR zlib ,
-written by A.M. Kuchling (amk@magnet.com),
-is available in Python 1.5 and later versions:
-.IP
-http://docs.python.org/library/zlib.html
-.LP
-.I zlib
-is built into
-.IR tcl:
-.IP
-http://wiki.tcl.tk/4610
-.LP
-An experimental package to read and write files in .zip format,
-written on top of
-.I zlib
-by Gilles Vollant (info@winimage.com),
-is available at:
-.IP
-http://www.winimage.com/zLibDll/minizip.html
-and also in the
-.I contrib/minizip
-directory of the main
-.I zlib
-source distribution.
-.SH "SEE ALSO"
-The
-.I zlib
-web site can be found at:
-.IP
-http://zlib.net/
-.LP
-The data format used by the zlib library is described by RFC
-(Request for Comments) 1950 to 1952 in the files:
-.IP
-http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format)
-.br
-http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format)
-.br
-http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format)
-.LP
-Mark Nelson wrote an article about
-.I zlib
-for the Jan. 1997 issue of  Dr. Dobb's Journal;
-a copy of the article is available at:
-.IP
-http://marknelson.us/1997/01/01/zlib-engine/
-.SH "REPORTING PROBLEMS"
-Before reporting a problem,
-please check the
-.I zlib
-web site to verify that you have the latest version of
-.IR zlib ;
-otherwise,
-obtain the latest version and see if the problem still exists.
-Please read the
-.I zlib
-FAQ at:
-.IP
-http://zlib.net/zlib_faq.html
-.LP
-before asking for help.
-Send questions and/or comments to zlib@gzip.org,
-or (for the Windows DLL version) to Gilles Vollant (info@winimage.com).
-.SH AUTHORS
-Version 1.2.8
-Copyright (C) 1995-2013 Jean-loup Gailly (jloup@gzip.org)
-and Mark Adler (madler@alumni.caltech.edu).
-.LP
-This software is provided "as-is,"
-without any express or implied warranty.
-In no event will the authors be held liable for any damages
-arising from the use of this software.
-See the distribution directory with respect to requirements
-governing redistribution.
-The deflate format used by
-.I zlib
-was defined by Phil Katz.
-The deflate and
-.I zlib
-specifications were written by L. Peter Deutsch.
-Thanks to all the people who reported problems and suggested various
-improvements in
-.IR zlib ;
-who are too numerous to cite here.
-.LP
-UNIX manual page by R. P. C. Rodgers,
-U.S. National Library of Medicine (rodgers@nlm.nih.gov).
-.\" end of man page
--- a/DoConfig/fltk/zlib/zlib.h
+++ /dev/null
@@ -1,1768 +1,0 @@
-/* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.2.8, April 28th, 2013
-
-  Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
-
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
-
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
-
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
-
-  Jean-loup Gailly        Mark Adler
-  jloup@gzip.org          madler@alumni.caltech.edu
-
-
-  The data format used by the zlib library is described by RFCs (Request for
-  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
-  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
-*/
-
-#ifndef ZLIB_H
-#define ZLIB_H
-
-#include "zconf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ZLIB_VERSION "1.2.8"
-#define ZLIB_VERNUM 0x1280
-#define ZLIB_VER_MAJOR 1
-#define ZLIB_VER_MINOR 2
-#define ZLIB_VER_REVISION 8
-#define ZLIB_VER_SUBREVISION 0
-
-/*
-    The 'zlib' compression library provides in-memory compression and
-  decompression functions, including integrity checks of the uncompressed data.
-  This version of the library supports only one compression method (deflation)
-  but other algorithms will be added later and will have the same stream
-  interface.
-
-    Compression can be done in a single step if the buffers are large enough,
-  or can be done by repeated calls of the compression function.  In the latter
-  case, the application must provide more input and/or consume the output
-  (providing more output space) before each call.
-
-    The compressed data format used by default by the in-memory functions is
-  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
-  around a deflate stream, which is itself documented in RFC 1951.
-
-    The library also supports reading and writing files in gzip (.gz) format
-  with an interface similar to that of stdio using the functions that start
-  with "gz".  The gzip format is different from the zlib format.  gzip is a
-  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
-
-    This library can optionally read and write gzip streams in memory as well.
-
-    The zlib format was designed to be compact and fast for use in memory
-  and on communications channels.  The gzip format was designed for single-
-  file compression on file systems, has a larger header than zlib to maintain
-  directory information, and uses a different, slower check method than zlib.
-
-    The library does not install any signal handler.  The decoder checks
-  the consistency of the compressed data, so the library should never crash
-  even in case of corrupted input.
-*/
-
-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
-typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
-
-struct internal_state;
-
-typedef struct z_stream_s {
-    z_const Bytef *next_in;     /* next input byte */
-    uInt     avail_in;  /* number of bytes available at next_in */
-    uLong    total_in;  /* total number of input bytes read so far */
-
-    Bytef    *next_out; /* next output byte should be put there */
-    uInt     avail_out; /* remaining free space at next_out */
-    uLong    total_out; /* total number of bytes output so far */
-
-    z_const char *msg;  /* last error message, NULL if no error */
-    struct internal_state FAR *state; /* not visible by applications */
-
-    alloc_func zalloc;  /* used to allocate the internal state */
-    free_func  zfree;   /* used to free the internal state */
-    voidpf     opaque;  /* private data object passed to zalloc and zfree */
-
-    int     data_type;  /* best guess about the data type: binary or text */
-    uLong   adler;      /* adler32 value of the uncompressed data */
-    uLong   reserved;   /* reserved for future use */
-} z_stream;
-
-typedef z_stream FAR *z_streamp;
-
-/*
-     gzip header information passed to and from zlib routines.  See RFC 1952
-  for more details on the meanings of these fields.
-*/
-typedef struct gz_header_s {
-    int     text;       /* true if compressed data believed to be text */
-    uLong   time;       /* modification time */
-    int     xflags;     /* extra flags (not used when writing a gzip file) */
-    int     os;         /* operating system */
-    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
-    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
-    uInt    extra_max;  /* space at extra (only when reading header) */
-    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
-    uInt    name_max;   /* space at name (only when reading header) */
-    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
-    uInt    comm_max;   /* space at comment (only when reading header) */
-    int     hcrc;       /* true if there was or will be a header crc */
-    int     done;       /* true when done reading gzip header (not used
-                           when writing a gzip file) */
-} gz_header;
-
-typedef gz_header FAR *gz_headerp;
-
-/*
-     The application must update next_in and avail_in when avail_in has dropped
-   to zero.  It must update next_out and avail_out when avail_out has dropped
-   to zero.  The application must initialize zalloc, zfree and opaque before
-   calling the init function.  All other fields are set by the compression
-   library and must not be updated by the application.
-
-     The opaque value provided by the application will be passed as the first
-   parameter for calls of zalloc and zfree.  This can be useful for custom
-   memory management.  The compression library attaches no meaning to the
-   opaque value.
-
-     zalloc must return Z_NULL if there is not enough memory for the object.
-   If zlib is used in a multi-threaded application, zalloc and zfree must be
-   thread safe.
-
-     On 16-bit systems, the functions zalloc and zfree must be able to allocate
-   exactly 65536 bytes, but will not be required to allocate more than this if
-   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
-   returned by zalloc for objects of exactly 65536 bytes *must* have their
-   offset normalized to zero.  The default allocation function provided by this
-   library ensures this (see zutil.c).  To reduce memory requirements and avoid
-   any allocation of 64K objects, at the expense of compression ratio, compile
-   the library with -DMAX_WBITS=14 (see zconf.h).
-
-     The fields total_in and total_out can be used for statistics or progress
-   reports.  After compression, total_in holds the total size of the
-   uncompressed data and may be saved for use in the decompressor (particularly
-   if the decompressor wants to decompress everything in a single step).
-*/
-
-                        /* constants */
-
-#define Z_NO_FLUSH      0
-#define Z_PARTIAL_FLUSH 1
-#define Z_SYNC_FLUSH    2
-#define Z_FULL_FLUSH    3
-#define Z_FINISH        4
-#define Z_BLOCK         5
-#define Z_TREES         6
-/* Allowed flush values; see deflate() and inflate() below for details */
-
-#define Z_OK            0
-#define Z_STREAM_END    1
-#define Z_NEED_DICT     2
-#define Z_ERRNO        (-1)
-#define Z_STREAM_ERROR (-2)
-#define Z_DATA_ERROR   (-3)
-#define Z_MEM_ERROR    (-4)
-#define Z_BUF_ERROR    (-5)
-#define Z_VERSION_ERROR (-6)
-/* Return codes for the compression/decompression functions. Negative values
- * are errors, positive values are used for special but normal events.
- */
-
-#define Z_NO_COMPRESSION         0
-#define Z_BEST_SPEED             1
-#define Z_BEST_COMPRESSION       9
-#define Z_DEFAULT_COMPRESSION  (-1)
-/* compression levels */
-
-#define Z_FILTERED            1
-#define Z_HUFFMAN_ONLY        2
-#define Z_RLE                 3
-#define Z_FIXED               4
-#define Z_DEFAULT_STRATEGY    0
-/* compression strategy; see deflateInit2() below for details */
-
-#define Z_BINARY   0
-#define Z_TEXT     1
-#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
-#define Z_UNKNOWN  2
-/* Possible values of the data_type field (though see inflate()) */
-
-#define Z_DEFLATED   8
-/* The deflate compression method (the only one supported in this version) */
-
-#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
-
-#define zlib_version zlibVersion()
-/* for compatibility with versions < 1.0.2 */
-
-
-                        /* basic functions */
-
-ZEXTERN const char * ZEXPORT zlibVersion OF((void));
-/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
-   If the first character differs, the library code actually used is not
-   compatible with the zlib.h header file used by the application.  This check
-   is automatically made by deflateInit and inflateInit.
- */
-
-/*
-ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
-
-     Initializes the internal stream state for compression.  The fields
-   zalloc, zfree and opaque must be initialized before by the caller.  If
-   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
-   allocation functions.
-
-     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
-   1 gives best speed, 9 gives best compression, 0 gives no compression at all
-   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
-   requests a default compromise between speed and compression (currently
-   equivalent to level 6).
-
-     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if level is not a valid compression level, or
-   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
-   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
-   if there is no error message.  deflateInit does not perform any compression:
-   this will be done by deflate().
-*/
-
-
-ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
-/*
-    deflate compresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full.  It may introduce
-  some output latency (reading input without producing any output) except when
-  forced to flush.
-
-    The detailed semantics are as follows.  deflate performs one or both of the
-  following actions:
-
-  - Compress more input starting at next_in and update next_in and avail_in
-    accordingly.  If not all input can be processed (because there is not
-    enough room in the output buffer), next_in and avail_in are updated and
-    processing will resume at this point for the next call of deflate().
-
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly.  This action is forced if the parameter flush is non zero.
-    Forcing flush frequently degrades the compression ratio, so this parameter
-    should be set only when necessary (in interactive applications).  Some
-    output may be provided even if flush is not set.
-
-    Before the call of deflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming more
-  output, and updating avail_in or avail_out accordingly; avail_out should
-  never be zero before the call.  The application can consume the compressed
-  output when it wants, for example when the output buffer is full (avail_out
-  == 0), or after each call of deflate().  If deflate returns Z_OK and with
-  zero avail_out, it must be called again after making room in the output
-  buffer because there might be more output pending.
-
-    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
-  decide how much data to accumulate before producing output, in order to
-  maximize compression.
-
-    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
-  flushed to the output buffer and the output is aligned on a byte boundary, so
-  that the decompressor can get all input data available so far.  (In
-  particular avail_in is zero after the call if enough output space has been
-  provided before the call.) Flushing may degrade compression for some
-  compression algorithms and so it should be used only when necessary.  This
-  completes the current deflate block and follows it with an empty stored block
-  that is three bits plus filler bits to the next byte, followed by four bytes
-  (00 00 ff ff).
-
-    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
-  output buffer, but the output is not aligned to a byte boundary.  All of the
-  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
-  This completes the current deflate block and follows it with an empty fixed
-  codes block that is 10 bits long.  This assures that enough bytes are output
-  in order for the decompressor to finish the block before the empty fixed code
-  block.
-
-    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
-  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
-  seven bits of the current block are held to be written as the next byte after
-  the next deflate block is completed.  In this case, the decompressor may not
-  be provided enough bits at this point in order to complete decompression of
-  the data provided so far to the compressor.  It may need to wait for the next
-  block to be emitted.  This is for advanced applications that need to control
-  the emission of deflate blocks.
-
-    If flush is set to Z_FULL_FLUSH, all output is flushed as with
-  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
-  restart from this point if previous compressed data has been damaged or if
-  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
-  compression.
-
-    If deflate returns with avail_out == 0, this function must be called again
-  with the same value of the flush parameter and more output space (updated
-  avail_out), until the flush is complete (deflate returns with non-zero
-  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
-  avail_out is greater than six to avoid repeated flush markers due to
-  avail_out == 0 on return.
-
-    If the parameter flush is set to Z_FINISH, pending input is processed,
-  pending output is flushed and deflate returns with Z_STREAM_END if there was
-  enough output space; if deflate returns with Z_OK, this function must be
-  called again with Z_FINISH and more output space (updated avail_out) but no
-  more input data, until it returns with Z_STREAM_END or an error.  After
-  deflate has returned Z_STREAM_END, the only possible operations on the stream
-  are deflateReset or deflateEnd.
-
-    Z_FINISH can be used immediately after deflateInit if all the compression
-  is to be done in a single step.  In this case, avail_out must be at least the
-  value returned by deflateBound (see below).  Then deflate is guaranteed to
-  return Z_STREAM_END.  If not enough output space is provided, deflate will
-  not return Z_STREAM_END, and it must be called again as described above.
-
-    deflate() sets strm->adler to the adler32 checksum of all input read
-  so far (that is, total_in bytes).
-
-    deflate() may update strm->data_type if it can make a good guess about
-  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
-  binary.  This field is only for information purposes and does not affect the
-  compression algorithm in any manner.
-
-    deflate() returns Z_OK if some progress has been made (more input
-  processed or more output produced), Z_STREAM_END if all input has been
-  consumed and all output has been produced (only when flush is set to
-  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
-  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
-  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
-  fatal, and deflate() can be called again with more input and more output
-  space to continue compressing.
-*/
-
-
-ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
-/*
-     All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any pending
-   output.
-
-     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
-   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
-   prematurely (some input or output was discarded).  In the error case, msg
-   may be set but then points to a static string (which must not be
-   deallocated).
-*/
-
-
-/*
-ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
-
-     Initializes the internal stream state for decompression.  The fields
-   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
-   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
-   exact value depends on the compression method), inflateInit determines the
-   compression method from the zlib header and allocates all data structures
-   accordingly; otherwise the allocation will be deferred to the first call of
-   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
-   use default allocation functions.
-
-     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
-   invalid, such as a null pointer to the structure.  msg is set to null if
-   there is no error message.  inflateInit does not perform any decompression
-   apart from possibly reading the zlib header if present: actual decompression
-   will be done by inflate().  (So next_in and avail_in may be modified, but
-   next_out and avail_out are unused and unchanged.) The current implementation
-   of inflateInit() does not process any header information -- that is deferred
-   until inflate() is called.
-*/
-
-
-ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
-/*
-    inflate decompresses as much data as possible, and stops when the input
-  buffer becomes empty or the output buffer becomes full.  It may introduce
-  some output latency (reading input without producing any output) except when
-  forced to flush.
-
-  The detailed semantics are as follows.  inflate performs one or both of the
-  following actions:
-
-  - Decompress more input starting at next_in and update next_in and avail_in
-    accordingly.  If not all input can be processed (because there is not
-    enough room in the output buffer), next_in is updated and processing will
-    resume at this point for the next call of inflate().
-
-  - Provide more output starting at next_out and update next_out and avail_out
-    accordingly.  inflate() provides as much output as possible, until there is
-    no more input data or no more space in the output buffer (see below about
-    the flush parameter).
-
-    Before the call of inflate(), the application should ensure that at least
-  one of the actions is possible, by providing more input and/or consuming more
-  output, and updating the next_* and avail_* values accordingly.  The
-  application can consume the uncompressed output when it wants, for example
-  when the output buffer is full (avail_out == 0), or after each call of
-  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
-  called again after making room in the output buffer because there might be
-  more output pending.
-
-    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
-  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
-  output as possible to the output buffer.  Z_BLOCK requests that inflate()
-  stop if and when it gets to the next deflate block boundary.  When decoding
-  the zlib or gzip format, this will cause inflate() to return immediately
-  after the header and before the first block.  When doing a raw inflate,
-  inflate() will go ahead and process the first block, and will return when it
-  gets to the end of that block, or when it runs out of data.
-
-    The Z_BLOCK option assists in appending to or combining deflate streams.
-  Also to assist in this, on return inflate() will set strm->data_type to the
-  number of unused bits in the last byte taken from strm->next_in, plus 64 if
-  inflate() is currently decoding the last block in the deflate stream, plus
-  128 if inflate() returned immediately after decoding an end-of-block code or
-  decoding the complete header up to just before the first byte of the deflate
-  stream.  The end-of-block will not be indicated until all of the uncompressed
-  data from that block has been written to strm->next_out.  The number of
-  unused bits may in general be greater than seven, except when bit 7 of
-  data_type is set, in which case the number of unused bits will be less than
-  eight.  data_type is set as noted here every time inflate() returns for all
-  flush options, and so can be used to determine the amount of currently
-  consumed input in bits.
-
-    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
-  end of each deflate block header is reached, before any actual data in that
-  block is decoded.  This allows the caller to determine the length of the
-  deflate block header for later use in random access within a deflate block.
-  256 is added to the value of strm->data_type when inflate() returns
-  immediately after reaching the end of the deflate block header.
-
-    inflate() should normally be called until it returns Z_STREAM_END or an
-  error.  However if all decompression is to be performed in a single step (a
-  single call of inflate), the parameter flush should be set to Z_FINISH.  In
-  this case all pending input is processed and all pending output is flushed;
-  avail_out must be large enough to hold all of the uncompressed data for the
-  operation to complete.  (The size of the uncompressed data may have been
-  saved by the compressor for this purpose.) The use of Z_FINISH is not
-  required to perform an inflation in one step.  However it may be used to
-  inform inflate that a faster approach can be used for the single inflate()
-  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
-  stream completes, which reduces inflate's memory footprint.  If the stream
-  does not complete, either because not all of the stream is provided or not
-  enough output space is provided, then a sliding window will be allocated and
-  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
-  been used.
-
-     In this implementation, inflate() always flushes as much output as
-  possible to the output buffer, and always uses the faster approach on the
-  first call.  So the effects of the flush parameter in this implementation are
-  on the return value of inflate() as noted below, when inflate() returns early
-  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
-  memory for a sliding window when Z_FINISH is used.
-
-     If a preset dictionary is needed after this call (see inflateSetDictionary
-  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
-  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
-  strm->adler to the Adler-32 checksum of all output produced so far (that is,
-  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
-  below.  At the end of the stream, inflate() checks that its computed adler32
-  checksum is equal to that saved by the compressor and returns Z_STREAM_END
-  only if the checksum is correct.
-
-    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
-  deflate data.  The header type is detected automatically, if requested when
-  initializing with inflateInit2().  Any information contained in the gzip
-  header is not retained, so applications that need that information should
-  instead use raw inflate, see inflateInit2() below, or inflateBack() and
-  perform their own processing of the gzip header and trailer.  When processing
-  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
-  producted so far.  The CRC-32 is checked against the gzip trailer.
-
-    inflate() returns Z_OK if some progress has been made (more input processed
-  or more output produced), Z_STREAM_END if the end of the compressed data has
-  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
-  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-  corrupted (input stream not conforming to the zlib format or incorrect check
-  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
-  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
-  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
-  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
-  inflate() can be called again with more input and more output space to
-  continue decompressing.  If Z_DATA_ERROR is returned, the application may
-  then call inflateSync() to look for a good compression block if a partial
-  recovery of the data is desired.
-*/
-
-
-ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
-/*
-     All dynamically allocated data structures for this stream are freed.
-   This function discards any unprocessed input and does not flush any pending
-   output.
-
-     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-   was inconsistent.  In the error case, msg may be set but then points to a
-   static string (which must not be deallocated).
-*/
-
-
-                        /* Advanced functions */
-
-/*
-    The following functions are needed only in some special applications.
-*/
-
-/*
-ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
-                                     int  level,
-                                     int  method,
-                                     int  windowBits,
-                                     int  memLevel,
-                                     int  strategy));
-
-     This is another version of deflateInit with more compression options.  The
-   fields next_in, zalloc, zfree and opaque must be initialized before by the
-   caller.
-
-     The method parameter is the compression method.  It must be Z_DEFLATED in
-   this version of the library.
-
-     The windowBits parameter is the base two logarithm of the window size
-   (the size of the history buffer).  It should be in the range 8..15 for this
-   version of the library.  Larger values of this parameter result in better
-   compression at the expense of memory usage.  The default value is 15 if
-   deflateInit is used instead.
-
-     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
-   determines the window size.  deflate() will then generate raw deflate data
-   with no zlib header or trailer, and will not compute an adler32 check value.
-
-     windowBits can also be greater than 15 for optional gzip encoding.  Add
-   16 to windowBits to write a simple gzip header and trailer around the
-   compressed data instead of a zlib wrapper.  The gzip header will have no
-   file name, no extra data, no comment, no modification time (set to zero), no
-   header crc, and the operating system will be set to 255 (unknown).  If a
-   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
-
-     The memLevel parameter specifies how much memory should be allocated
-   for the internal compression state.  memLevel=1 uses minimum memory but is
-   slow and reduces compression ratio; memLevel=9 uses maximum memory for
-   optimal speed.  The default value is 8.  See zconf.h for total memory usage
-   as a function of windowBits and memLevel.
-
-     The strategy parameter is used to tune the compression algorithm.  Use the
-   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
-   string match), or Z_RLE to limit match distances to one (run-length
-   encoding).  Filtered data consists mostly of small values with a somewhat
-   random distribution.  In this case, the compression algorithm is tuned to
-   compress them better.  The effect of Z_FILTERED is to force more Huffman
-   coding and less string matching; it is somewhat intermediate between
-   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
-   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
-   strategy parameter only affects the compression ratio but not the
-   correctness of the compressed output even if it is not set appropriately.
-   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
-   decoder for special applications.
-
-     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
-   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
-   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
-   set to null if there is no error message.  deflateInit2 does not perform any
-   compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
-                                             const Bytef *dictionary,
-                                             uInt  dictLength));
-/*
-     Initializes the compression dictionary from the given byte sequence
-   without producing any compressed output.  When using the zlib format, this
-   function must be called immediately after deflateInit, deflateInit2 or
-   deflateReset, and before any call of deflate.  When doing raw deflate, this
-   function must be called either before any call of deflate, or immediately
-   after the completion of a deflate block, i.e. after all input has been
-   consumed and all output has been delivered when using any of the flush
-   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
-   compressor and decompressor must use exactly the same dictionary (see
-   inflateSetDictionary).
-
-     The dictionary should consist of strings (byte sequences) that are likely
-   to be encountered later in the data to be compressed, with the most commonly
-   used strings preferably put towards the end of the dictionary.  Using a
-   dictionary is most useful when the data to be compressed is short and can be
-   predicted with good accuracy; the data can then be compressed better than
-   with the default empty dictionary.
-
-     Depending on the size of the compression data structures selected by
-   deflateInit or deflateInit2, a part of the dictionary may in effect be
-   discarded, for example if the dictionary is larger than the window size
-   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
-   useful should be put at the end of the dictionary, not at the front.  In
-   addition, the current implementation of deflate will use at most the window
-   size minus 262 bytes of the provided dictionary.
-
-     Upon return of this function, strm->adler is set to the adler32 value
-   of the dictionary; the decompressor may later use this value to determine
-   which dictionary has been used by the compressor.  (The adler32 value
-   applies to the whole dictionary even if only a subset of the dictionary is
-   actually used by the compressor.) If a raw deflate was requested, then the
-   adler32 value is not computed and strm->adler is not set.
-
-     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
-   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
-   inconsistent (for example if deflate has already been called for this stream
-   or if not at a block boundary for raw deflate).  deflateSetDictionary does
-   not perform any compression: this will be done by deflate().
-*/
-
-ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
-                                    z_streamp source));
-/*
-     Sets the destination stream as a complete copy of the source stream.
-
-     This function can be useful when several compression strategies will be
-   tried, for example when there are several ways of pre-processing the input
-   data with a filter.  The streams that will be discarded should then be freed
-   by calling deflateEnd.  Note that deflateCopy duplicates the internal
-   compression state which can be quite large, so this strategy is slow and can
-   consume lots of memory.
-
-     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
-   destination.
-*/
-
-ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
-/*
-     This function is equivalent to deflateEnd followed by deflateInit,
-   but does not free and reallocate all the internal compression state.  The
-   stream will keep the same compression level and any other attributes that
-   may have been set by deflateInit2.
-
-     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being Z_NULL).
-*/
-
-ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
-                                      int level,
-                                      int strategy));
-/*
-     Dynamically update the compression level and compression strategy.  The
-   interpretation of level and strategy is as in deflateInit2.  This can be
-   used to switch between compression and straight copy of the input data, or
-   to switch to a different kind of input data requiring a different strategy.
-   If the compression level is changed, the input available so far is
-   compressed with the old level (and may be flushed); the new level will take
-   effect only at the next call of deflate().
-
-     Before the call of deflateParams, the stream state must be set as for
-   a call of deflate(), since the currently available input may have to be
-   compressed and flushed.  In particular, strm->avail_out must be non-zero.
-
-     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
-   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
-   strm->avail_out was zero.
-*/
-
-ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
-                                    int good_length,
-                                    int max_lazy,
-                                    int nice_length,
-                                    int max_chain));
-/*
-     Fine tune deflate's internal compression parameters.  This should only be
-   used by someone who understands the algorithm used by zlib's deflate for
-   searching for the best matching string, and even then only by the most
-   fanatic optimizer trying to squeeze out the last compressed bit for their
-   specific input data.  Read the deflate.c source code for the meaning of the
-   max_lazy, good_length, nice_length, and max_chain parameters.
-
-     deflateTune() can be called after deflateInit() or deflateInit2(), and
-   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
- */
-
-ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
-                                       uLong sourceLen));
-/*
-     deflateBound() returns an upper bound on the compressed size after
-   deflation of sourceLen bytes.  It must be called after deflateInit() or
-   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
-   to allocate an output buffer for deflation in a single pass, and so would be
-   called before deflate().  If that first deflate() call is provided the
-   sourceLen input bytes, an output buffer allocated to the size returned by
-   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
-   to return Z_STREAM_END.  Note that it is possible for the compressed size to
-   be larger than the value returned by deflateBound() if flush options other
-   than Z_FINISH or Z_NO_FLUSH are used.
-*/
-
-ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
-                                       unsigned *pending,
-                                       int *bits));
-/*
-     deflatePending() returns the number of bytes and bits of output that have
-   been generated, but not yet provided in the available output.  The bytes not
-   provided would be due to the available output space having being consumed.
-   The number of bits of output not provided are between 0 and 7, where they
-   await more bits to join them in order to fill out a full byte.  If pending
-   or bits are Z_NULL, then those values are not set.
-
-     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
- */
-
-ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
-                                     int bits,
-                                     int value));
-/*
-     deflatePrime() inserts bits in the deflate output stream.  The intent
-   is that this function is used to start off the deflate output with the bits
-   leftover from a previous deflate stream when appending to it.  As such, this
-   function can only be used for raw deflate, and must be used before the first
-   deflate() call after a deflateInit2() or deflateReset().  bits must be less
-   than or equal to 16, and that many of the least significant bits of value
-   will be inserted in the output.
-
-     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
-   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
-   source stream state was inconsistent.
-*/
-
-ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
-                                         gz_headerp head));
-/*
-     deflateSetHeader() provides gzip header information for when a gzip
-   stream is requested by deflateInit2().  deflateSetHeader() may be called
-   after deflateInit2() or deflateReset() and before the first call of
-   deflate().  The text, time, os, extra field, name, and comment information
-   in the provided gz_header structure are written to the gzip header (xflag is
-   ignored -- the extra flags are set according to the compression level).  The
-   caller must assure that, if not Z_NULL, name and comment are terminated with
-   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
-   available there.  If hcrc is true, a gzip header crc is included.  Note that
-   the current versions of the command-line version of gzip (up through version
-   1.3.x) do not support header crc's, and will report that it is a "multi-part
-   gzip file" and give up.
-
-     If deflateSetHeader is not used, the default gzip header has text false,
-   the time set to zero, and os set to 255, with no extra, name, or comment
-   fields.  The gzip header is returned to the default state by deflateReset().
-
-     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-/*
-ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
-                                     int  windowBits));
-
-     This is another version of inflateInit with an extra parameter.  The
-   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
-   before by the caller.
-
-     The windowBits parameter is the base two logarithm of the maximum window
-   size (the size of the history buffer).  It should be in the range 8..15 for
-   this version of the library.  The default value is 15 if inflateInit is used
-   instead.  windowBits must be greater than or equal to the windowBits value
-   provided to deflateInit2() while compressing, or it must be equal to 15 if
-   deflateInit2() was not used.  If a compressed stream with a larger window
-   size is given as input, inflate() will return with the error code
-   Z_DATA_ERROR instead of trying to allocate a larger window.
-
-     windowBits can also be zero to request that inflate use the window size in
-   the zlib header of the compressed stream.
-
-     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
-   determines the window size.  inflate() will then process raw deflate data,
-   not looking for a zlib or gzip header, not generating a check value, and not
-   looking for any check values for comparison at the end of the stream.  This
-   is for use with other formats that use the deflate compressed data format
-   such as zip.  Those formats provide their own check values.  If a custom
-   format is developed using the raw deflate format for compressed data, it is
-   recommended that a check value such as an adler32 or a crc32 be applied to
-   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
-   most applications, the zlib format should be used as is.  Note that comments
-   above on the use in deflateInit2() applies to the magnitude of windowBits.
-
-     windowBits can also be greater than 15 for optional gzip decoding.  Add
-   32 to windowBits to enable zlib and gzip decoding with automatic header
-   detection, or add 16 to decode only the gzip format (the zlib format will
-   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
-   crc32 instead of an adler32.
-
-     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
-   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
-   invalid, such as a null pointer to the structure.  msg is set to null if
-   there is no error message.  inflateInit2 does not perform any decompression
-   apart from possibly reading the zlib header if present: actual decompression
-   will be done by inflate().  (So next_in and avail_in may be modified, but
-   next_out and avail_out are unused and unchanged.) The current implementation
-   of inflateInit2() does not process any header information -- that is
-   deferred until inflate() is called.
-*/
-
-ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
-                                             const Bytef *dictionary,
-                                             uInt  dictLength));
-/*
-     Initializes the decompression dictionary from the given uncompressed byte
-   sequence.  This function must be called immediately after a call of inflate,
-   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
-   can be determined from the adler32 value returned by that call of inflate.
-   The compressor and decompressor must use exactly the same dictionary (see
-   deflateSetDictionary).  For raw inflate, this function can be called at any
-   time to set the dictionary.  If the provided dictionary is smaller than the
-   window and there is already data in the window, then the provided dictionary
-   will amend what's there.  The application must insure that the dictionary
-   that was used for compression is provided.
-
-     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
-   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-   expected one (incorrect adler32 value).  inflateSetDictionary does not
-   perform any decompression: this will be done by subsequent calls of
-   inflate().
-*/
-
-ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
-                                             Bytef *dictionary,
-                                             uInt  *dictLength));
-/*
-     Returns the sliding dictionary being maintained by inflate.  dictLength is
-   set to the number of bytes in the dictionary, and that many bytes are copied
-   to dictionary.  dictionary must have enough space, where 32768 bytes is
-   always enough.  If inflateGetDictionary() is called with dictionary equal to
-   Z_NULL, then only the dictionary length is returned, and nothing is copied.
-   Similary, if dictLength is Z_NULL, then it is not set.
-
-     inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
-   stream state is inconsistent.
-*/
-
-ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
-/*
-     Skips invalid compressed data until a possible full flush point (see above
-   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
-   available input is skipped.  No output is provided.
-
-     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
-   All full flush points have this pattern, but not all occurrences of this
-   pattern are full flush points.
-
-     inflateSync returns Z_OK if a possible full flush point has been found,
-   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
-   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
-   In the success case, the application may save the current current value of
-   total_in which indicates where valid compressed data was found.  In the
-   error case, the application may repeatedly call inflateSync, providing more
-   input each time, until success or end of the input data.
-*/
-
-ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
-                                    z_streamp source));
-/*
-     Sets the destination stream as a complete copy of the source stream.
-
-     This function can be useful when randomly accessing a large stream.  The
-   first pass through the stream can periodically record the inflate state,
-   allowing restarting inflate at those points when randomly accessing the
-   stream.
-
-     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
-   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
-   destination.
-*/
-
-ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
-/*
-     This function is equivalent to inflateEnd followed by inflateInit,
-   but does not free and reallocate all the internal decompression state.  The
-   stream will keep attributes that may have been set by inflateInit2.
-
-     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being Z_NULL).
-*/
-
-ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
-                                      int windowBits));
-/*
-     This function is the same as inflateReset, but it also permits changing
-   the wrap and window size requests.  The windowBits parameter is interpreted
-   the same as it is for inflateInit2.
-
-     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
-   the windowBits parameter is invalid.
-*/
-
-ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
-                                     int bits,
-                                     int value));
-/*
-     This function inserts bits in the inflate input stream.  The intent is
-   that this function is used to start inflating at a bit position in the
-   middle of a byte.  The provided bits will be used before any bytes are used
-   from next_in.  This function should only be used with raw inflate, and
-   should be used before the first inflate() call after inflateInit2() or
-   inflateReset().  bits must be less than or equal to 16, and that many of the
-   least significant bits of value will be inserted in the input.
-
-     If bits is negative, then the input stream bit buffer is emptied.  Then
-   inflatePrime() can be called again to put bits in the buffer.  This is used
-   to clear out bits leftover after feeding inflate a block description prior
-   to feeding inflate codes.
-
-     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
-/*
-     This function returns two values, one in the lower 16 bits of the return
-   value, and the other in the remaining upper bits, obtained by shifting the
-   return value down 16 bits.  If the upper value is -1 and the lower value is
-   zero, then inflate() is currently decoding information outside of a block.
-   If the upper value is -1 and the lower value is non-zero, then inflate is in
-   the middle of a stored block, with the lower value equaling the number of
-   bytes from the input remaining to copy.  If the upper value is not -1, then
-   it is the number of bits back from the current bit position in the input of
-   the code (literal or length/distance pair) currently being processed.  In
-   that case the lower value is the number of bytes already emitted for that
-   code.
-
-     A code is being processed if inflate is waiting for more input to complete
-   decoding of the code, or if it has completed decoding but is waiting for
-   more output space to write the literal or match data.
-
-     inflateMark() is used to mark locations in the input data for random
-   access, which may be at bit positions, and to note those cases where the
-   output of a code may span boundaries of random access blocks.  The current
-   location in the input stream can be determined from avail_in and data_type
-   as noted in the description for the Z_BLOCK flush parameter for inflate.
-
-     inflateMark returns the value noted above or -1 << 16 if the provided
-   source stream state was inconsistent.
-*/
-
-ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
-                                         gz_headerp head));
-/*
-     inflateGetHeader() requests that gzip header information be stored in the
-   provided gz_header structure.  inflateGetHeader() may be called after
-   inflateInit2() or inflateReset(), and before the first call of inflate().
-   As inflate() processes the gzip stream, head->done is zero until the header
-   is completed, at which time head->done is set to one.  If a zlib stream is
-   being decoded, then head->done is set to -1 to indicate that there will be
-   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
-   used to force inflate() to return immediately after header processing is
-   complete and before any actual data is decompressed.
-
-     The text, time, xflags, and os fields are filled in with the gzip header
-   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
-   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
-   contains the maximum number of bytes to write to extra.  Once done is true,
-   extra_len contains the actual extra field length, and extra contains the
-   extra field, or that field truncated if extra_max is less than extra_len.
-   If name is not Z_NULL, then up to name_max characters are written there,
-   terminated with a zero unless the length is greater than name_max.  If
-   comment is not Z_NULL, then up to comm_max characters are written there,
-   terminated with a zero unless the length is greater than comm_max.  When any
-   of extra, name, or comment are not Z_NULL and the respective field is not
-   present in the header, then that field is set to Z_NULL to signal its
-   absence.  This allows the use of deflateSetHeader() with the returned
-   structure to duplicate the header.  However if those fields are set to
-   allocated memory, then the application will need to save those pointers
-   elsewhere so that they can be eventually freed.
-
-     If inflateGetHeader is not used, then the header information is simply
-   discarded.  The header is always checked for validity, including the header
-   CRC if present.  inflateReset() will reset the process to discard the header
-   information.  The application would need to call inflateGetHeader() again to
-   retrieve the header from the next gzip stream.
-
-     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
-*/
-
-/*
-ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
-                                        unsigned char FAR *window));
-
-     Initialize the internal stream state for decompression using inflateBack()
-   calls.  The fields zalloc, zfree and opaque in strm must be initialized
-   before the call.  If zalloc and zfree are Z_NULL, then the default library-
-   derived memory allocation routines are used.  windowBits is the base two
-   logarithm of the window size, in the range 8..15.  window is a caller
-   supplied buffer of that size.  Except for special applications where it is
-   assured that deflate was used with small window sizes, windowBits must be 15
-   and a 32K byte window must be supplied to be able to decompress general
-   deflate streams.
-
-     See inflateBack() for the usage of these routines.
-
-     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
-   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
-   allocated, or Z_VERSION_ERROR if the version of the library does not match
-   the version of the header file.
-*/
-
-typedef unsigned (*in_func) OF((void FAR *,
-                                z_const unsigned char FAR * FAR *));
-typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
-
-ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
-                                    in_func in, void FAR *in_desc,
-                                    out_func out, void FAR *out_desc));
-/*
-     inflateBack() does a raw inflate with a single call using a call-back
-   interface for input and output.  This is potentially more efficient than
-   inflate() for file i/o applications, in that it avoids copying between the
-   output and the sliding window by simply making the window itself the output
-   buffer.  inflate() can be faster on modern CPUs when used with large
-   buffers.  inflateBack() trusts the application to not change the output
-   buffer passed by the output function, at least until inflateBack() returns.
-
-     inflateBackInit() must be called first to allocate the internal state
-   and to initialize the state with the user-provided window buffer.
-   inflateBack() may then be used multiple times to inflate a complete, raw
-   deflate stream with each call.  inflateBackEnd() is then called to free the
-   allocated state.
-
-     A raw deflate stream is one with no zlib or gzip header or trailer.
-   This routine would normally be used in a utility that reads zip or gzip
-   files and writes out uncompressed files.  The utility would decode the
-   header and process the trailer on its own, hence this routine expects only
-   the raw deflate stream to decompress.  This is different from the normal
-   behavior of inflate(), which expects either a zlib or gzip header and
-   trailer around the deflate stream.
-
-     inflateBack() uses two subroutines supplied by the caller that are then
-   called by inflateBack() for input and output.  inflateBack() calls those
-   routines until it reads a complete deflate stream and writes out all of the
-   uncompressed data, or until it encounters an error.  The function's
-   parameters and return types are defined above in the in_func and out_func
-   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
-   number of bytes of provided input, and a pointer to that input in buf.  If
-   there is no input available, in() must return zero--buf is ignored in that
-   case--and inflateBack() will return a buffer error.  inflateBack() will call
-   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
-   should return zero on success, or non-zero on failure.  If out() returns
-   non-zero, inflateBack() will return with an error.  Neither in() nor out()
-   are permitted to change the contents of the window provided to
-   inflateBackInit(), which is also the buffer that out() uses to write from.
-   The length written by out() will be at most the window size.  Any non-zero
-   amount of input may be provided by in().
-
-     For convenience, inflateBack() can be provided input on the first call by
-   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
-   in() will be called.  Therefore strm->next_in must be initialized before
-   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
-   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
-   must also be initialized, and then if strm->avail_in is not zero, input will
-   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
-
-     The in_desc and out_desc parameters of inflateBack() is passed as the
-   first parameter of in() and out() respectively when they are called.  These
-   descriptors can be optionally used to pass any information that the caller-
-   supplied in() and out() functions need to do their job.
-
-     On return, inflateBack() will set strm->next_in and strm->avail_in to
-   pass back any unused input that was provided by the last in() call.  The
-   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
-   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
-   in the deflate stream (in which case strm->msg is set to indicate the nature
-   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
-   In the case of Z_BUF_ERROR, an input or output error can be distinguished
-   using strm->next_in which will be Z_NULL only if in() returned an error.  If
-   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
-   non-zero.  (in() will always be called before out(), so strm->next_in is
-   assured to be defined if out() returns non-zero.) Note that inflateBack()
-   cannot return Z_OK.
-*/
-
-ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
-/*
-     All memory allocated by inflateBackInit() is freed.
-
-     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
-   state was inconsistent.
-*/
-
-ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
-/* Return flags indicating compile-time options.
-
-    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
-     1.0: size of uInt
-     3.2: size of uLong
-     5.4: size of voidpf (pointer)
-     7.6: size of z_off_t
-
-    Compiler, assembler, and debug options:
-     8: DEBUG
-     9: ASMV or ASMINF -- use ASM code
-     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
-     11: 0 (reserved)
-
-    One-time table building (smaller code, but not thread-safe if true):
-     12: BUILDFIXED -- build static block decoding tables when needed
-     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
-     14,15: 0 (reserved)
-
-    Library content (indicates missing functionality):
-     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
-                          deflate code when not needed)
-     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
-                    and decode gzip streams (to avoid linking crc code)
-     18-19: 0 (reserved)
-
-    Operation variations (changes in library functionality):
-     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
-     21: FASTEST -- deflate algorithm with only one, lowest compression level
-     22,23: 0 (reserved)
-
-    The sprintf variant used by gzprintf (zero is best):
-     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
-     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
-     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
-
-    Remainder:
-     27-31: 0 (reserved)
- */
-
-#ifndef Z_SOLO
-
-                        /* utility functions */
-
-/*
-     The following utility functions are implemented on top of the basic
-   stream-oriented functions.  To simplify the interface, some default options
-   are assumed (compression level and memory usage, standard memory allocation
-   functions).  The source code of these utility functions can be modified if
-   you need special options.
-*/
-
-ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
-                                 const Bytef *source, uLong sourceLen));
-/*
-     Compresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer.  Upon entry, destLen is the total size
-   of the destination buffer, which must be at least the value returned by
-   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
-   compressed buffer.
-
-     compress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer.
-*/
-
-ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
-                                  const Bytef *source, uLong sourceLen,
-                                  int level));
-/*
-     Compresses the source buffer into the destination buffer.  The level
-   parameter has the same meaning as in deflateInit.  sourceLen is the byte
-   length of the source buffer.  Upon entry, destLen is the total size of the
-   destination buffer, which must be at least the value returned by
-   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
-   compressed buffer.
-
-     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
-   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
-   Z_STREAM_ERROR if the level parameter is invalid.
-*/
-
-ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
-/*
-     compressBound() returns an upper bound on the compressed size after
-   compress() or compress2() on sourceLen bytes.  It would be used before a
-   compress() or compress2() call to allocate the destination buffer.
-*/
-
-ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
-                                   const Bytef *source, uLong sourceLen));
-/*
-     Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer.  Upon entry, destLen is the total size
-   of the destination buffer, which must be large enough to hold the entire
-   uncompressed data.  (The size of the uncompressed data must have been saved
-   previously by the compressor and transmitted to the decompressor by some
-   mechanism outside the scope of this compression library.) Upon exit, destLen
-   is the actual size of the uncompressed buffer.
-
-     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
-   enough memory, Z_BUF_ERROR if there was not enough room in the output
-   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
-   the case where there is not enough room, uncompress() will fill the output
-   buffer with the uncompressed data up to that point.
-*/
-
-                        /* gzip file access functions */
-
-/*
-     This library supports reading and writing files in gzip (.gz) format with
-   an interface similar to that of stdio, using the functions that start with
-   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
-   wrapper, documented in RFC 1952, wrapped around a deflate stream.
-*/
-
-typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
-
-/*
-ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
-
-     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
-   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
-   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
-   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
-   for fixed code compression as in "wb9F".  (See the description of
-   deflateInit2 for more information about the strategy parameter.)  'T' will
-   request transparent writing or appending with no compression and not using
-   the gzip format.
-
-     "a" can be used instead of "w" to request that the gzip stream that will
-   be written be appended to the file.  "+" will result in an error, since
-   reading and writing to the same gzip file is not supported.  The addition of
-   "x" when writing will create the file exclusively, which fails if the file
-   already exists.  On systems that support it, the addition of "e" when
-   reading or writing will set the flag to close the file on an execve() call.
-
-     These functions, as well as gzip, will read and decode a sequence of gzip
-   streams in a file.  The append function of gzopen() can be used to create
-   such a file.  (Also see gzflush() for another way to do this.)  When
-   appending, gzopen does not test whether the file begins with a gzip stream,
-   nor does it look for the end of the gzip streams to begin appending.  gzopen
-   will simply append a gzip stream to the existing file.
-
-     gzopen can be used to read a file which is not in gzip format; in this
-   case gzread will directly read from the file without decompression.  When
-   reading, this will be detected automatically by looking for the magic two-
-   byte gzip header.
-
-     gzopen returns NULL if the file could not be opened, if there was
-   insufficient memory to allocate the gzFile state, or if an invalid mode was
-   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
-   errno can be checked to determine if the reason gzopen failed was that the
-   file could not be opened.
-*/
-
-ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
-/*
-     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
-   are obtained from calls like open, dup, creat, pipe or fileno (if the file
-   has been previously opened with fopen).  The mode parameter is as in gzopen.
-
-     The next call of gzclose on the returned gzFile will also close the file
-   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
-   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
-   mode);.  The duplicated descriptor should be saved to avoid a leak, since
-   gzdopen does not close fd if it fails.  If you are using fileno() to get the
-   file descriptor from a FILE *, then you will have to use dup() to avoid
-   double-close()ing the file descriptor.  Both gzclose() and fclose() will
-   close the associated file descriptor, so they need to have different file
-   descriptors.
-
-     gzdopen returns NULL if there was insufficient memory to allocate the
-   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
-   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
-   used until the next gz* read, write, seek, or close operation, so gzdopen
-   will not detect if fd is invalid (unless fd is -1).
-*/
-
-ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
-/*
-     Set the internal buffer size used by this library's functions.  The
-   default buffer size is 8192 bytes.  This function must be called after
-   gzopen() or gzdopen(), and before any other calls that read or write the
-   file.  The buffer memory allocation is always deferred to the first read or
-   write.  Two buffers are allocated, either both of the specified size when
-   writing, or one of the specified size and the other twice that size when
-   reading.  A larger buffer size of, for example, 64K or 128K bytes will
-   noticeably increase the speed of decompression (reading).
-
-     The new buffer size also affects the maximum length for gzprintf().
-
-     gzbuffer() returns 0 on success, or -1 on failure, such as being called
-   too late.
-*/
-
-ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
-/*
-     Dynamically update the compression level or strategy.  See the description
-   of deflateInit2 for the meaning of these parameters.
-
-     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
-   opened for writing.
-*/
-
-ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
-/*
-     Reads the given number of uncompressed bytes from the compressed file.  If
-   the input file is not in gzip format, gzread copies the given number of
-   bytes into the buffer directly from the file.
-
-     After reaching the end of a gzip stream in the input, gzread will continue
-   to read, looking for another gzip stream.  Any number of gzip streams may be
-   concatenated in the input file, and will all be decompressed by gzread().
-   If something other than a gzip stream is encountered after a gzip stream,
-   that remaining trailing garbage is ignored (and no error is returned).
-
-     gzread can be used to read a gzip file that is being concurrently written.
-   Upon reaching the end of the input, gzread will return with the available
-   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
-   gzclearerr can be used to clear the end of file indicator in order to permit
-   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
-   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
-   middle of a gzip stream.  Note that gzread does not return -1 in the event
-   of an incomplete gzip stream.  This error is deferred until gzclose(), which
-   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
-   stream.  Alternatively, gzerror can be used before gzclose to detect this
-   case.
-
-     gzread returns the number of uncompressed bytes actually read, less than
-   len for end of file, or -1 for error.
-*/
-
-ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
-                                voidpc buf, unsigned len));
-/*
-     Writes the given number of uncompressed bytes into the compressed file.
-   gzwrite returns the number of uncompressed bytes written or 0 in case of
-   error.
-*/
-
-ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
-/*
-     Converts, formats, and writes the arguments to the compressed file under
-   control of the format string, as in fprintf.  gzprintf returns the number of
-   uncompressed bytes actually written, or 0 in case of error.  The number of
-   uncompressed bytes written is limited to 8191, or one less than the buffer
-   size given to gzbuffer().  The caller should assure that this limit is not
-   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
-   nothing written.  In this case, there may also be a buffer overflow with
-   unpredictable consequences, which is possible only if zlib was compiled with
-   the insecure functions sprintf() or vsprintf() because the secure snprintf()
-   or vsnprintf() functions were not available.  This can be determined using
-   zlibCompileFlags().
-*/
-
-ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
-/*
-     Writes the given null-terminated string to the compressed file, excluding
-   the terminating null character.
-
-     gzputs returns the number of characters written, or -1 in case of error.
-*/
-
-ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
-/*
-     Reads bytes from the compressed file until len-1 characters are read, or a
-   newline character is read and transferred to buf, or an end-of-file
-   condition is encountered.  If any characters are read or if len == 1, the
-   string is terminated with a null character.  If no characters are read due
-   to an end-of-file or len < 1, then the buffer is left untouched.
-
-     gzgets returns buf which is a null-terminated string, or it returns NULL
-   for end-of-file or in case of error.  If there was an error, the contents at
-   buf are indeterminate.
-*/
-
-ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
-/*
-     Writes c, converted to an unsigned char, into the compressed file.  gzputc
-   returns the value that was written, or -1 in case of error.
-*/
-
-ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
-/*
-     Reads one byte from the compressed file.  gzgetc returns this byte or -1
-   in case of end of file or error.  This is implemented as a macro for speed.
-   As such, it does not do all of the checking the other functions do.  I.e.
-   it does not check to see if file is NULL, nor whether the structure file
-   points to has been clobbered or not.
-*/
-
-ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
-/*
-     Push one character back onto the stream to be read as the first character
-   on the next read.  At least one character of push-back is allowed.
-   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
-   fail if c is -1, and may fail if a character has been pushed but not read
-   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
-   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
-   The pushed character will be discarded if the stream is repositioned with
-   gzseek() or gzrewind().
-*/
-
-ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
-/*
-     Flushes all pending output into the compressed file.  The parameter flush
-   is as in the deflate() function.  The return value is the zlib error number
-   (see function gzerror below).  gzflush is only permitted when writing.
-
-     If the flush parameter is Z_FINISH, the remaining data is written and the
-   gzip stream is completed in the output.  If gzwrite() is called again, a new
-   gzip stream will be started in the output.  gzread() is able to read such
-   concatented gzip streams.
-
-     gzflush should be called only when strictly necessary because it will
-   degrade compression if called too often.
-*/
-
-/*
-ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
-                                   z_off_t offset, int whence));
-
-     Sets the starting position for the next gzread or gzwrite on the given
-   compressed file.  The offset represents a number of bytes in the
-   uncompressed data stream.  The whence parameter is defined as in lseek(2);
-   the value SEEK_END is not supported.
-
-     If the file is opened for reading, this function is emulated but can be
-   extremely slow.  If the file is opened for writing, only forward seeks are
-   supported; gzseek then compresses a sequence of zeroes up to the new
-   starting position.
-
-     gzseek returns the resulting offset location as measured in bytes from
-   the beginning of the uncompressed stream, or -1 in case of error, in
-   particular if the file is opened for writing and the new starting position
-   would be before the current position.
-*/
-
-ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
-/*
-     Rewinds the given file. This function is supported only for reading.
-
-     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
-*/
-
-/*
-ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
-
-     Returns the starting position for the next gzread or gzwrite on the given
-   compressed file.  This position represents a number of bytes in the
-   uncompressed data stream, and is zero when starting, even if appending or
-   reading a gzip stream from the middle of a file using gzdopen().
-
-     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
-*/
-
-/*
-ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
-
-     Returns the current offset in the file being read or written.  This offset
-   includes the count of bytes that precede the gzip stream, for example when
-   appending or when using gzdopen() for reading.  When reading, the offset
-   does not include as yet unused buffered input.  This information can be used
-   for a progress indicator.  On error, gzoffset() returns -1.
-*/
-
-ZEXTERN int ZEXPORT gzeof OF((gzFile file));
-/*
-     Returns true (1) if the end-of-file indicator has been set while reading,
-   false (0) otherwise.  Note that the end-of-file indicator is set only if the
-   read tried to go past the end of the input, but came up short.  Therefore,
-   just like feof(), gzeof() may return false even if there is no more data to
-   read, in the event that the last read request was for the exact number of
-   bytes remaining in the input file.  This will happen if the input file size
-   is an exact multiple of the buffer size.
-
-     If gzeof() returns true, then the read functions will return no more data,
-   unless the end-of-file indicator is reset by gzclearerr() and the input file
-   has grown since the previous end of file was detected.
-*/
-
-ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
-/*
-     Returns true (1) if file is being copied directly while reading, or false
-   (0) if file is a gzip stream being decompressed.
-
-     If the input file is empty, gzdirect() will return true, since the input
-   does not contain a gzip stream.
-
-     If gzdirect() is used immediately after gzopen() or gzdopen() it will
-   cause buffers to be allocated to allow reading the file to determine if it
-   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
-   gzdirect().
-
-     When writing, gzdirect() returns true (1) if transparent writing was
-   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
-   gzdirect() is not needed when writing.  Transparent writing must be
-   explicitly requested, so the application already knows the answer.  When
-   linking statically, using gzdirect() will include all of the zlib code for
-   gzip file reading and decompression, which may not be desired.)
-*/
-
-ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
-/*
-     Flushes all pending output if necessary, closes the compressed file and
-   deallocates the (de)compression state.  Note that once file is closed, you
-   cannot call gzerror with file, since its structures have been deallocated.
-   gzclose must not be called more than once on the same file, just as free
-   must not be called more than once on the same allocation.
-
-     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
-   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
-   last read ended in the middle of a gzip stream, or Z_OK on success.
-*/
-
-ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
-ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
-/*
-     Same as gzclose(), but gzclose_r() is only for use when reading, and
-   gzclose_w() is only for use when writing or appending.  The advantage to
-   using these instead of gzclose() is that they avoid linking in zlib
-   compression or decompression code that is not used when only reading or only
-   writing respectively.  If gzclose() is used, then both compression and
-   decompression code will be included the application when linking to a static
-   zlib library.
-*/
-
-ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
-/*
-     Returns the error message for the last error which occurred on the given
-   compressed file.  errnum is set to zlib error number.  If an error occurred
-   in the file system and not in the compression library, errnum is set to
-   Z_ERRNO and the application may consult errno to get the exact error code.
-
-     The application must not modify the returned string.  Future calls to
-   this function may invalidate the previously returned string.  If file is
-   closed, then the string previously returned by gzerror will no longer be
-   available.
-
-     gzerror() should be used to distinguish errors from end-of-file for those
-   functions above that do not distinguish those cases in their return values.
-*/
-
-ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
-/*
-     Clears the error and end-of-file flags for file.  This is analogous to the
-   clearerr() function in stdio.  This is useful for continuing to read a gzip
-   file that is being written concurrently.
-*/
-
-#endif /* !Z_SOLO */
-
-                        /* checksum functions */
-
-/*
-     These functions are not related to compression but are exported
-   anyway because they might be useful in applications using the compression
-   library.
-*/
-
-ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
-/*
-     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-   return the updated checksum.  If buf is Z_NULL, this function returns the
-   required initial value for the checksum.
-
-     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-   much faster.
-
-   Usage example:
-
-     uLong adler = adler32(0L, Z_NULL, 0);
-
-     while (read_buffer(buffer, length) != EOF) {
-       adler = adler32(adler, buffer, length);
-     }
-     if (adler != original_adler) error();
-*/
-
-/*
-ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
-                                          z_off_t len2));
-
-     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
-   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
-   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
-   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
-   that the z_off_t type (like off_t) is a signed integer.  If len2 is
-   negative, the result has no meaning or utility.
-*/
-
-ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
-/*
-     Update a running CRC-32 with the bytes buf[0..len-1] and return the
-   updated CRC-32.  If buf is Z_NULL, this function returns the required
-   initial value for the crc.  Pre- and post-conditioning (one's complement) is
-   performed within this function so it shouldn't be done by the application.
-
-   Usage example:
-
-     uLong crc = crc32(0L, Z_NULL, 0);
-
-     while (read_buffer(buffer, length) != EOF) {
-       crc = crc32(crc, buffer, length);
-     }
-     if (crc != original_crc) error();
-*/
-
-/*
-ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
-
-     Combine two CRC-32 check values into one.  For two sequences of bytes,
-   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
-   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
-   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
-   len2.
-*/
-
-
-                        /* various hacks, don't look :) */
-
-/* deflateInit and inflateInit are macros to allow checking the zlib version
- * and the compiler's view of z_stream:
- */
-ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
-                                     const char *version, int stream_size));
-ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
-                                     const char *version, int stream_size));
-ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
-                                      int windowBits, int memLevel,
-                                      int strategy, const char *version,
-                                      int stream_size));
-ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
-                                      const char *version, int stream_size));
-ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
-                                         unsigned char FAR *window,
-                                         const char *version,
-                                         int stream_size));
-#define deflateInit(strm, level) \
-        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit(strm) \
-        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
-#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
-        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
-                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
-#define inflateInit2(strm, windowBits) \
-        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
-                      (int)sizeof(z_stream))
-#define inflateBackInit(strm, windowBits, window) \
-        inflateBackInit_((strm), (windowBits), (window), \
-                      ZLIB_VERSION, (int)sizeof(z_stream))
-
-#ifndef Z_SOLO
-
-/* gzgetc() macro and its supporting function and exposed data structure.  Note
- * that the real internal state is much larger than the exposed structure.
- * This abbreviated structure exposes just enough for the gzgetc() macro.  The
- * user should not mess with these exposed elements, since their names or
- * behavior could change in the future, perhaps even capriciously.  They can
- * only be used by the gzgetc() macro.  You have been warned.
- */
-struct gzFile_s {
-    unsigned have;
-    unsigned char *next;
-    z_off64_t pos;
-};
-ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
-#ifdef Z_PREFIX_SET
-#  undef z_gzgetc
-#  define z_gzgetc(g) \
-          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
-#else
-#  define gzgetc(g) \
-          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
-#endif
-
-/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
- * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
- * both are true, the application gets the *64 functions, and the regular
- * functions are changed to 64 bits) -- in case these are set on systems
- * without large file support, _LFS64_LARGEFILE must also be true
- */
-#ifdef Z_LARGE64
-   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
-   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
-   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
-   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
-   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
-   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
-#endif
-
-#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
-#  ifdef Z_PREFIX_SET
-#    define z_gzopen z_gzopen64
-#    define z_gzseek z_gzseek64
-#    define z_gztell z_gztell64
-#    define z_gzoffset z_gzoffset64
-#    define z_adler32_combine z_adler32_combine64
-#    define z_crc32_combine z_crc32_combine64
-#  else
-#    define gzopen gzopen64
-#    define gzseek gzseek64
-#    define gztell gztell64
-#    define gzoffset gzoffset64
-#    define adler32_combine adler32_combine64
-#    define crc32_combine crc32_combine64
-#  endif
-#  ifndef Z_LARGE64
-     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
-     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
-     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
-     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
-     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
-     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
-#  endif
-#else
-   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
-   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
-   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
-   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
-   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
-   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
-#endif
-
-#else /* Z_SOLO */
-
-   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
-   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
-
-#endif /* !Z_SOLO */
-
-/* hack for buggy compilers */
-#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
-    struct internal_state {int dummy;};
-#endif
-
-/* undocumented functions */
-ZEXTERN const char   * ZEXPORT zError           OF((int));
-ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
-ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
-ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
-ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
-ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
-#if defined(_WIN32) && !defined(Z_SOLO)
-ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
-                                            const char *mode));
-#endif
-#if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#  ifndef Z_SOLO
-ZEXTERN int            ZEXPORTVA gzvprintf Z_ARG((gzFile file,
-                                                  const char *format,
-                                                  va_list va));
-#  endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ZLIB_H */
--- a/DoConfig/fltk/zlib/zutil.c
+++ /dev/null
@@ -1,324 +1,0 @@
-/* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* @(#) $Id$ */
-
-#include "zutil.h"
-#ifndef Z_SOLO
-#  include "gzguts.h"
-#endif
-
-#ifndef NO_DUMMY_DECL
-struct internal_state      {int dummy;}; /* for buggy compilers */
-#endif
-
-z_const char * const z_errmsg[10] = {
-"need dictionary",     /* Z_NEED_DICT       2  */
-"stream end",          /* Z_STREAM_END      1  */
-"",                    /* Z_OK              0  */
-"file error",          /* Z_ERRNO         (-1) */
-"stream error",        /* Z_STREAM_ERROR  (-2) */
-"data error",          /* Z_DATA_ERROR    (-3) */
-"insufficient memory", /* Z_MEM_ERROR     (-4) */
-"buffer error",        /* Z_BUF_ERROR     (-5) */
-"incompatible version",/* Z_VERSION_ERROR (-6) */
-""};
-
-
-const char * ZEXPORT zlibVersion()
-{
-    return ZLIB_VERSION;
-}
-
-uLong ZEXPORT zlibCompileFlags()
-{
-    uLong flags;
-
-    flags = 0;
-    switch ((int)(sizeof(uInt))) {
-    case 2:     break;
-    case 4:     flags += 1;     break;
-    case 8:     flags += 2;     break;
-    default:    flags += 3;
-    }
-    switch ((int)(sizeof(uLong))) {
-    case 2:     break;
-    case 4:     flags += 1 << 2;        break;
-    case 8:     flags += 2 << 2;        break;
-    default:    flags += 3 << 2;
-    }
-    switch ((int)(sizeof(voidpf))) {
-    case 2:     break;
-    case 4:     flags += 1 << 4;        break;
-    case 8:     flags += 2 << 4;        break;
-    default:    flags += 3 << 4;
-    }
-    switch ((int)(sizeof(z_off_t))) {
-    case 2:     break;
-    case 4:     flags += 1 << 6;        break;
-    case 8:     flags += 2 << 6;        break;
-    default:    flags += 3 << 6;
-    }
-#ifdef DEBUG
-    flags += 1 << 8;
-#endif
-#if defined(ASMV) || defined(ASMINF)
-    flags += 1 << 9;
-#endif
-#ifdef ZLIB_WINAPI
-    flags += 1 << 10;
-#endif
-#ifdef BUILDFIXED
-    flags += 1 << 12;
-#endif
-#ifdef DYNAMIC_CRC_TABLE
-    flags += 1 << 13;
-#endif
-#ifdef NO_GZCOMPRESS
-    flags += 1L << 16;
-#endif
-#ifdef NO_GZIP
-    flags += 1L << 17;
-#endif
-#ifdef PKZIP_BUG_WORKAROUND
-    flags += 1L << 20;
-#endif
-#ifdef FASTEST
-    flags += 1L << 21;
-#endif
-#if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#  ifdef NO_vsnprintf
-    flags += 1L << 25;
-#    ifdef HAS_vsprintf_void
-    flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_vsnprintf_void
-    flags += 1L << 26;
-#    endif
-#  endif
-#else
-    flags += 1L << 24;
-#  ifdef NO_snprintf
-    flags += 1L << 25;
-#    ifdef HAS_sprintf_void
-    flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_snprintf_void
-    flags += 1L << 26;
-#    endif
-#  endif
-#endif
-    return flags;
-}
-
-#ifdef DEBUG
-
-#  ifndef verbose
-#    define verbose 0
-#  endif
-int ZLIB_INTERNAL z_verbose = verbose;
-
-void ZLIB_INTERNAL z_error (m)
-    char *m;
-{
-    fprintf(stderr, "%s\n", m);
-    exit(1);
-}
-#endif
-
-/* exported to allow conversion of error code to string for compress() and
- * uncompress()
- */
-const char * ZEXPORT zError(err)
-    int err;
-{
-    return ERR_MSG(err);
-}
-
-#if defined(_WIN32_WCE)
-    /* The Microsoft C Run-Time Library for Windows CE doesn't have
-     * errno.  We define it as a global variable to simplify porting.
-     * Its value is always 0 and should not be used.
-     */
-    int errno = 0;
-#endif
-
-#ifndef HAVE_MEMCPY
-
-void ZLIB_INTERNAL zmemcpy(dest, source, len)
-    Bytef* dest;
-    const Bytef* source;
-    uInt  len;
-{
-    if (len == 0) return;
-    do {
-        *dest++ = *source++; /* ??? to be unrolled */
-    } while (--len != 0);
-}
-
-int ZLIB_INTERNAL zmemcmp(s1, s2, len)
-    const Bytef* s1;
-    const Bytef* s2;
-    uInt  len;
-{
-    uInt j;
-
-    for (j = 0; j < len; j++) {
-        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
-    }
-    return 0;
-}
-
-void ZLIB_INTERNAL zmemzero(dest, len)
-    Bytef* dest;
-    uInt  len;
-{
-    if (len == 0) return;
-    do {
-        *dest++ = 0;  /* ??? to be unrolled */
-    } while (--len != 0);
-}
-#endif
-
-#ifndef Z_SOLO
-
-#ifdef SYS16BIT
-
-#ifdef __TURBOC__
-/* Turbo C in 16-bit mode */
-
-#  define MY_ZCALLOC
-
-/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
- * and farmalloc(64K) returns a pointer with an offset of 8, so we
- * must fix the pointer. Warning: the pointer must be put back to its
- * original form in order to free it, use zcfree().
- */
-
-#define MAX_PTR 10
-/* 10*64K = 640K */
-
-local int next_ptr = 0;
-
-typedef struct ptr_table_s {
-    voidpf org_ptr;
-    voidpf new_ptr;
-} ptr_table;
-
-local ptr_table table[MAX_PTR];
-/* This table is used to remember the original form of pointers
- * to large buffers (64K). Such pointers are normalized with a zero offset.
- * Since MSDOS is not a preemptive multitasking OS, this table is not
- * protected from concurrent access. This hack doesn't work anyway on
- * a protected system like OS/2. Use Microsoft C instead.
- */
-
-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
-    voidpf buf = opaque; /* just to make some compilers happy */
-    ulg bsize = (ulg)items*size;
-
-    /* If we allocate less than 65520 bytes, we assume that farmalloc
-     * will return a usable pointer which doesn't have to be normalized.
-     */
-    if (bsize < 65520L) {
-        buf = farmalloc(bsize);
-        if (*(ush*)&buf != 0) return buf;
-    } else {
-        buf = farmalloc(bsize + 16L);
-    }
-    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
-    table[next_ptr].org_ptr = buf;
-
-    /* Normalize the pointer to seg:0 */
-    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
-    *(ush*)&buf = 0;
-    table[next_ptr++].new_ptr = buf;
-    return buf;
-}
-
-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
-{
-    int n;
-    if (*(ush*)&ptr != 0) { /* object < 64K */
-        farfree(ptr);
-        return;
-    }
-    /* Find the original pointer */
-    for (n = 0; n < next_ptr; n++) {
-        if (ptr != table[n].new_ptr) continue;
-
-        farfree(table[n].org_ptr);
-        while (++n < next_ptr) {
-            table[n-1] = table[n];
-        }
-        next_ptr--;
-        return;
-    }
-    ptr = opaque; /* just to make some compilers happy */
-    Assert(0, "zcfree: ptr not found");
-}
-
-#endif /* __TURBOC__ */
-
-
-#ifdef M_I86
-/* Microsoft C in 16-bit mode */
-
-#  define MY_ZCALLOC
-
-#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
-#  define _halloc  halloc
-#  define _hfree   hfree
-#endif
-
-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
-{
-    if (opaque) opaque = 0; /* to make compiler happy */
-    return _halloc((long)items, size);
-}
-
-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
-{
-    if (opaque) opaque = 0; /* to make compiler happy */
-    _hfree(ptr);
-}
-
-#endif /* M_I86 */
-
-#endif /* SYS16BIT */
-
-
-#ifndef MY_ZCALLOC /* Any system without a special alloc function */
-
-#ifndef STDC
-extern voidp  malloc OF((uInt size));
-extern voidp  calloc OF((uInt items, uInt size));
-extern void   free   OF((voidpf ptr));
-#endif
-
-voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
-    voidpf opaque;
-    unsigned items;
-    unsigned size;
-{
-    if (opaque) items += size - size; /* make compiler happy */
-    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
-                              (voidpf)calloc(items, size);
-}
-
-void ZLIB_INTERNAL zcfree (opaque, ptr)
-    voidpf opaque;
-    voidpf ptr;
-{
-    free(ptr);
-    if (opaque) return; /* make compiler happy */
-}
-
-#endif /* MY_ZCALLOC */
-
-#endif /* !Z_SOLO */
--- a/DoConfig/fltk/zlib/zutil.h
+++ /dev/null
@@ -1,253 +1,0 @@
-/* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2013 Jean-loup Gailly.
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* WARNING: this file should *not* be used by applications. It is
-   part of the implementation of the compression library and is
-   subject to change. Applications should only use zlib.h.
- */
-
-/* @(#) $Id$ */
-
-#ifndef ZUTIL_H
-#define ZUTIL_H
-
-#ifdef HAVE_HIDDEN
-#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
-#else
-#  define ZLIB_INTERNAL
-#endif
-
-#include "zlib.h"
-
-#if defined(STDC) && !defined(Z_SOLO)
-#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
-#    include <stddef.h>
-#  endif
-#  include <string.h>
-#  include <stdlib.h>
-#endif
-
-#ifdef Z_SOLO
-   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
-#endif
-
-#ifndef local
-#  define local static
-#endif
-/* compile with -Dlocal if your debugger can't find static symbols */
-
-typedef unsigned char  uch;
-typedef uch FAR uchf;
-typedef unsigned short ush;
-typedef ush FAR ushf;
-typedef unsigned long  ulg;
-
-extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
-/* (size given to avoid silly warnings with Visual C++) */
-
-#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
-
-#define ERR_RETURN(strm,err) \
-  return (strm->msg = ERR_MSG(err), (err))
-/* To be used only when the state is known to be valid */
-
-        /* common constants */
-
-#ifndef DEF_WBITS
-#  define DEF_WBITS MAX_WBITS
-#endif
-/* default windowBits for decompression. MAX_WBITS is for compression only */
-
-#if MAX_MEM_LEVEL >= 8
-#  define DEF_MEM_LEVEL 8
-#else
-#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
-#endif
-/* default memLevel */
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES    2
-/* The three kinds of block type */
-
-#define MIN_MATCH  3
-#define MAX_MATCH  258
-/* The minimum and maximum match lengths */
-
-#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
-
-        /* target dependencies */
-
-#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
-#  define OS_CODE  0x00
-#  ifndef Z_SOLO
-#    if defined(__TURBOC__) || defined(__BORLANDC__)
-#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
-         /* Allow compilation with ANSI keywords only enabled */
-         void _Cdecl farfree( void *block );
-         void *_Cdecl farmalloc( unsigned long nbytes );
-#      else
-#        include <alloc.h>
-#      endif
-#    else /* MSC or DJGPP */
-#      include <malloc.h>
-#    endif
-#  endif
-#endif
-
-#ifdef AMIGA
-#  define OS_CODE  0x01
-#endif
-
-#if defined(VAXC) || defined(VMS)
-#  define OS_CODE  0x02
-#  define F_OPEN(name, mode) \
-     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
-#endif
-
-#if defined(ATARI) || defined(atarist)
-#  define OS_CODE  0x05
-#endif
-
-#ifdef OS2
-#  define OS_CODE  0x06
-#  if defined(M_I86) && !defined(Z_SOLO)
-#    include <malloc.h>
-#  endif
-#endif
-
-#if defined(MACOS) || defined(TARGET_OS_MAC)
-#  define OS_CODE  0x07
-#  ifndef Z_SOLO
-#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
-#      include <unix.h> /* for fdopen */
-#    else
-#      ifndef fdopen
-#        define fdopen(fd,mode) NULL /* No fdopen() */
-#      endif
-#    endif
-#  endif
-#endif
-
-#ifdef TOPS20
-#  define OS_CODE  0x0a
-#endif
-
-#ifdef WIN32
-#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
-#    define OS_CODE  0x0b
-#  endif
-#endif
-
-#ifdef __50SERIES /* Prime/PRIMOS */
-#  define OS_CODE  0x0f
-#endif
-
-#if defined(_BEOS_) || defined(RISCOS)
-#  define fdopen(fd,mode) NULL /* No fdopen() */
-#endif
-
-#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
-#  if defined(_WIN32_WCE)
-#    define fdopen(fd,mode) NULL /* No fdopen() */
-#    ifndef _PTRDIFF_T_DEFINED
-       typedef int ptrdiff_t;
-#      define _PTRDIFF_T_DEFINED
-#    endif
-#  else
-#    define fdopen(fd,type)  _fdopen(fd,type)
-#  endif
-#endif
-
-#if defined(__BORLANDC__) && !defined(MSDOS)
-  #pragma warn -8004
-  #pragma warn -8008
-  #pragma warn -8066
-#endif
-
-/* provide prototypes for these when building zlib without LFS */
-#if !defined(_WIN32) && \
-    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
-    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
-    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
-#endif
-
-        /* common defaults */
-
-#ifndef OS_CODE
-#  define OS_CODE  0x03  /* assume Unix */
-#endif
-
-#ifndef F_OPEN
-#  define F_OPEN(name, mode) fopen((name), (mode))
-#endif
-
-         /* functions */
-
-#if defined(pyr) || defined(Z_SOLO)
-#  define NO_MEMCPY
-#endif
-#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
- /* Use our own functions for small and medium model with MSC <= 5.0.
-  * You may have to use the same strategy for Borland C (untested).
-  * The __SC__ check is for Symantec.
-  */
-#  define NO_MEMCPY
-#endif
-#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
-#  define HAVE_MEMCPY
-#endif
-#ifdef HAVE_MEMCPY
-#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
-#    define zmemcpy _fmemcpy
-#    define zmemcmp _fmemcmp
-#    define zmemzero(dest, len) _fmemset(dest, 0, len)
-#  else
-#    define zmemcpy memcpy
-#    define zmemcmp memcmp
-#    define zmemzero(dest, len) memset(dest, 0, len)
-#  endif
-#else
-   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
-   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
-   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
-#endif
-
-/* Diagnostic functions */
-#ifdef DEBUG
-#  include <stdio.h>
-   extern int ZLIB_INTERNAL z_verbose;
-   extern void ZLIB_INTERNAL z_error OF((char *m));
-#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
-#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
-#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-#else
-#  define Assert(cond,msg)
-#  define Trace(x)
-#  define Tracev(x)
-#  define Tracevv(x)
-#  define Tracec(c,x)
-#  define Tracecv(c,x)
-#endif
-
-#ifndef Z_SOLO
-   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
-                                    unsigned size));
-   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
-#endif
-
-#define ZALLOC(strm, items, size) \
-           (*((strm)->zalloc))((strm)->opaque, (items), (size))
-#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-
-/* Reverse the bytes in a 32-bit value */
-#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
-                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
-
-#endif /* ZUTIL_H */
--- /dev/null
+++ b/DoConfig/imgui.ini
@@ -1,0 +1,98 @@
+[Window][Debug##Default]
+Pos=145,89
+Size=400,400
+Collapsed=0
+
+[Window][Sound Data Creation]
+Pos=0,0
+Size=400,500
+Collapsed=0
+
+[Window][Sound Creation]
+Pos=92,257
+Size=32,35
+Collapsed=0
+
+[Window][Sound Data]
+Pos=88,233
+Size=32,35
+Collapsed=0
+
+[Window][Sounds]
+Pos=108,234
+Size=186,165
+Collapsed=0
+
+[Window][Sound Controls]
+Pos=141,235
+Size=32,35
+Collapsed=0
+
+[Window][Dear ImGui Demo]
+Pos=106,281
+Size=550,680
+Collapsed=0
+
+[Window][Example: Console]
+Pos=60,60
+Size=520,600
+Collapsed=0
+
+[Window][Example: Simple layout]
+Pos=60,60
+Size=500,440
+Collapsed=0
+
+[Window][Example: Auto-resizing window]
+Pos=60,60
+Size=450,267
+Collapsed=0
+
+[Window][Example: Constrained Resize]
+Pos=60,60
+Size=688,293
+Collapsed=0
+
+[Window][Same title as another window##1]
+Pos=100,100
+Size=450,61
+Collapsed=0
+
+[Window][Same title as another window##2]
+Pos=100,200
+Size=450,61
+Collapsed=0
+
+[Window][###AnimatedTitle]
+Pos=100,300
+Size=247,48
+Collapsed=0
+
+[Window][Main window]
+Pos=0,0
+Size=360,290
+Collapsed=0
+
+[Table][0xD3F25573,3]
+Column 0  Width=0
+Column 1  Width=0
+Column 2  Width=0
+
+[Table][0xBF3CBA1D,3]
+Column 0  Width=0
+Column 1  Width=0
+Column 2  Width=0
+
+[Table][0xC0F825AD,2]
+Column 0  Width=0
+Column 1  Width=0
+
+[Table][0xB8B66D71,2]
+Column 0  Width=0
+Column 1  Width=0
+
+[Table][0x22B77DC7,3]
+Column 0  Width=0 Sort=0v
+Column 1  Width=0
+Column 2  Width=0
+
--- /dev/null
+++ b/DoConfig/imgui/LICENSE.txt
@@ -1,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2020 Omar Cornut
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
--- /dev/null
+++ b/DoConfig/imgui/imconfig.h
@@ -1,0 +1,108 @@
+//-----------------------------------------------------------------------------
+// COMPILE-TIME OPTIONS FOR DEAR IMGUI
+// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
+// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
+//-----------------------------------------------------------------------------
+// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/branch with your modifications to imconfig.h)
+// B) or add configuration directives in your own file and compile with #define IMGUI_USER_CONFIG "myfilename.h"
+// If you do so you need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include
+// the imgui*.cpp files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures.
+// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
+// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using.
+//-----------------------------------------------------------------------------
+
+#pragma once
+
+//---- Define assertion handler. Defaults to calling assert().
+// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement.
+//#define IM_ASSERT(_EXPR)  MyAssert(_EXPR)
+//#define IM_ASSERT(_EXPR)  ((void)(_EXPR))     // Disable asserts
+
+//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows
+// Using dear imgui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
+//#define IMGUI_API __declspec( dllexport )
+//#define IMGUI_API __declspec( dllimport )
+
+//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names.
+//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+//---- Disable all of Dear ImGui or don't implement standard windows.
+// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp.
+//#define IMGUI_DISABLE                                     // Disable everything: all headers and source files will be empty.
+//#define IMGUI_DISABLE_DEMO_WINDOWS                        // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended.
+//#define IMGUI_DISABLE_METRICS_WINDOW                      // Disable debug/metrics window: ShowMetricsWindow() will be empty.
+
+//---- Don't implement some functions to reduce linkage requirements.
+//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc.
+//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow.
+//#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function (clipboard, ime).
+//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS      // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
+//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS            // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
+//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS              // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
+//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS              // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
+//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
+
+//---- Include imgui_user.h at the end of imgui.h as a convenience
+//#define IMGUI_INCLUDE_IMGUI_USER_H
+
+//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another)
+//#define IMGUI_USE_BGRA_PACKED_COLOR
+
+//---- Use 32-bit for ImWchar (default is 16-bit) to support full unicode code points.
+//#define IMGUI_USE_WCHAR32
+
+//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
+// By default the embedded implementations are declared static and not available outside of imgui cpp files.
+//#define IMGUI_STB_TRUETYPE_FILENAME   "my_folder/stb_truetype.h"
+//#define IMGUI_STB_RECT_PACK_FILENAME  "my_folder/stb_rect_pack.h"
+//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+
+//---- Unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined, use the much faster STB sprintf library implementation of vsnprintf instead of the one from the default C library.
+// Note that stb_sprintf.h is meant to be provided by the user and available in the include path at compile time. Also, the compatibility checks of the arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by STB sprintf.
+// #define IMGUI_USE_STB_SPRINTF
+
+//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
+// This will be inlined as part of ImVec2 and ImVec4 class declarations.
+/*
+#define IM_VEC2_CLASS_EXTRA                                                 \
+        ImVec2(const MyVec2& f) { x = f.x; y = f.y; }                       \
+        operator MyVec2() const { return MyVec2(x,y); }
+
+#define IM_VEC4_CLASS_EXTRA                                                 \
+        ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; }     \
+        operator MyVec4() const { return MyVec4(x,y,z,w); }
+*/
+
+//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
+// Your renderer back-end will need to support it (most example renderer back-ends support both 16/32-bit indices).
+// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
+// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
+//#define ImDrawIdx unsigned int
+
+//---- Override ImDrawCallback signature (will need to modify renderer back-ends accordingly)
+//struct ImDrawList;
+//struct ImDrawCmd;
+//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data);
+//#define ImDrawCallback MyImDrawCallback
+
+//---- Debug Tools: Macro to break in Debugger
+// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.)
+//#define IM_DEBUG_BREAK  IM_ASSERT(0)
+//#define IM_DEBUG_BREAK  __debugbreak()
+
+//---- Debug Tools: Have the Item Picker break in the ItemAdd() function instead of ItemHoverable(),
+// (which comes earlier in the code, will catch a few extra items, allow picking items other than Hovered one.)
+// This adds a small runtime cost which is why it is not enabled by default.
+//#define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
+
+//---- Debug Tools: Enable slower asserts
+//#define IMGUI_DEBUG_PARANOID
+
+//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files.
+/*
+namespace ImGui
+{
+    void MyFunction(const char* name, const MyMatrix44& v);
+}
+*/
--- /dev/null
+++ b/DoConfig/imgui/imgui.cpp
@@ -1,0 +1,10555 @@
+// dear imgui, v1.76 WIP
+// (main code and documentation)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
+// Read imgui.cpp for details, links and comments.
+
+// Resources:
+// - FAQ                   http://dearimgui.org/faq
+// - Homepage & latest     https://github.com/ocornut/imgui
+// - Releases & changelog  https://github.com/ocornut/imgui/releases
+// - Gallery               https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!)
+// - Glossary              https://github.com/ocornut/imgui/wiki/Glossary
+// - Wiki                  https://github.com/ocornut/imgui/wiki
+// - Issues & support      https://github.com/ocornut/imgui/issues
+
+// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
+// See LICENSE.txt for copyright and licensing details (standard MIT License).
+// This library is free but I need your support to sustain development and maintenance.
+// Businesses: you can support continued development via invoiced technical support, maintenance and sponsoring contracts. Please reach out to "contact AT dearimgui.org".
+// Individuals: you can support continued development via donations. See docs/README or web page.
+
+// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library.
+// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without
+// modifying imgui.h or imgui.cpp. You may include imgui_internal.h to access internal data structures, but it doesn't
+// come with any guarantee of forward compatibility. Discussing your changes on the GitHub Issue Tracker may lead you
+// to a better solution or official support for them.
+
+/*
+
+Index of this file:
+
+DOCUMENTATION
+
+- MISSION STATEMENT
+- END-USER GUIDE
+- PROGRAMMER GUIDE
+  - READ FIRST
+  - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+  - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+  - HOW A SIMPLE APPLICATION MAY LOOK LIKE (2 variations)
+  - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
+  - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
+- API BREAKING CHANGES (read me when you update!)
+- FREQUENTLY ASKED QUESTIONS (FAQ)
+  - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)
+
+CODE
+(search for "[SECTION]" in the code to find them)
+
+// [SECTION] INCLUDES
+// [SECTION] FORWARD DECLARATIONS
+// [SECTION] CONTEXT AND MEMORY ALLOCATORS
+// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
+// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
+// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
+// [SECTION] MISC HELPERS/UTILITIES (File functions)
+// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
+// [SECTION] MISC HELPERS/UTILITIES (Color functions)
+// [SECTION] ImGuiStorage
+// [SECTION] ImGuiTextFilter
+// [SECTION] ImGuiTextBuffer
+// [SECTION] ImGuiListClipper
+// [SECTION] STYLING
+// [SECTION] RENDER HELPERS
+// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
+// [SECTION] ERROR CHECKING
+// [SECTION] LAYOUT
+// [SECTION] SCROLLING
+// [SECTION] TOOLTIPS
+// [SECTION] POPUPS
+// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
+// [SECTION] DRAG AND DROP
+// [SECTION] LOGGING/CAPTURING
+// [SECTION] SETTINGS
+// [SECTION] PLATFORM DEPENDENT HELPERS
+// [SECTION] METRICS/DEBUG WINDOW
+
+*/
+
+//-----------------------------------------------------------------------------
+// DOCUMENTATION
+//-----------------------------------------------------------------------------
+
+/*
+
+ MISSION STATEMENT
+ =================
+
+ - Easy to use to create code-driven and data-driven tools.
+ - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
+ - Easy to hack and improve.
+ - Minimize screen real-estate usage.
+ - Minimize setup and maintenance.
+ - Minimize state storage on user side.
+ - Portable, minimize dependencies, run on target (consoles, phones, etc.).
+ - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window,.
+   opening a tree node for the first time, etc. but a typical frame should not allocate anything).
+
+ Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes:
+ - Doesn't look fancy, doesn't animate.
+ - Limited layout features, intricate layouts are typically crafted in code.
+
+
+ END-USER GUIDE
+ ==============
+
+ - Double-click on title bar to collapse window.
+ - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin().
+ - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents).
+ - Click and drag on any empty space to move window.
+ - TAB/SHIFT+TAB to cycle through keyboard editable fields.
+ - CTRL+Click on a slider or drag box to input value as text.
+ - Use mouse wheel to scroll.
+ - Text editor:
+   - Hold SHIFT or use mouse to select text.
+   - CTRL+Left/Right to word jump.
+   - CTRL+Shift+Left/Right to select words.
+   - CTRL+A our Double-Click to select all.
+   - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/
+   - CTRL+Z,CTRL+Y to undo/redo.
+   - ESCAPE to revert text to its original value.
+   - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!)
+   - Controls are automatically adjusted for OSX to match standard OSX text editing operations.
+ - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard.
+ - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://goo.gl/9LgVZW
+
+
+ PROGRAMMER GUIDE
+ ================
+
+ READ FIRST
+ ----------
+ - Remember to read the FAQ (https://www.dearimgui.org/faq)
+ - Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction
+   or destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, less bugs.
+ - Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features.
+ - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build.
+ - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori).
+   You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links docs/README.md.
+ - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances.
+   For every application frame your UI code will be called only once. This is in contrast to e.g. Unity's own implementation of an IMGUI,
+   where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches.
+ - Our origin are on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right.
+ - This codebase is also optimized to yield decent performances with typical "Debug" builds settings.
+ - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected).
+   If you get an assert, read the messages and comments around the assert.
+ - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace.
+ - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types.
+   See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that.
+   However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase.
+ - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!).
+
+ HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+ ----------------------------------------------
+ - Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h)
+ - Or maintain your own branch where you have imconfig.h modified.
+ - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes.
+   If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed
+   from the public API. If you have a problem with a missing function/symbols, search for its name in the code, there will
+   likely be a comment about it. Please report any issue to the GitHub page!
+ - Try to keep your copy of dear imgui reasonably up to date.
+
+ GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+ ---------------------------------------------------------------
+ - Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library.
+ - In the majority of cases you should be able to use unmodified back-ends files available in the examples/ folder.
+ - Add the Dear ImGui source files to your projects or using your preferred build system.
+   It is recommended you build and statically link the .cpp files as part of your project and NOT as shared library (DLL).
+ - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types.
+ - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
+ - Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide.
+   Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render"
+   phases of your own application. All rendering information are stored into command-lists that you will retrieve after calling ImGui::Render().
+ - Refer to the bindings and demo applications in the examples/ folder for instruction on how to setup your code.
+ - If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder.
+
+ HOW A SIMPLE APPLICATION MAY LOOK LIKE
+ --------------------------------------
+ EXHIBIT 1: USING THE EXAMPLE BINDINGS (imgui_impl_XXX.cpp files from the examples/ folder).
+
+     // Application init: create a dear imgui context, setup some options, load fonts
+     ImGui::CreateContext();
+     ImGuiIO& io = ImGui::GetIO();
+     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
+     // TODO: Fill optional fields of the io structure later.
+     // TODO: Load TTF/OTF fonts if you don't want to use the default font.
+
+     // Initialize helper Platform and Renderer bindings (here we are using imgui_impl_win32.cpp and imgui_impl_dx11.cpp)
+     ImGui_ImplWin32_Init(hwnd);
+     ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
+
+     // Application main loop
+     while (true)
+     {
+         // Feed inputs to dear imgui, start new frame
+         ImGui_ImplDX11_NewFrame();
+         ImGui_ImplWin32_NewFrame();
+         ImGui::NewFrame();
+
+         // Any application code here
+         ImGui::Text("Hello, world!");
+
+         // Render dear imgui into screen
+         ImGui::Render();
+         ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
+         g_pSwapChain->Present(1, 0);
+     }
+
+     // Shutdown
+     ImGui_ImplDX11_Shutdown();
+     ImGui_ImplWin32_Shutdown();
+     ImGui::DestroyContext();
+
+ EXHIBIT 2: IMPLEMENTING CUSTOM BINDING / CUSTOM ENGINE
+
+     // Application init: create a dear imgui context, setup some options, load fonts
+     ImGui::CreateContext();
+     ImGuiIO& io = ImGui::GetIO();
+     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
+     // TODO: Fill optional fields of the io structure later.
+     // TODO: Load TTF/OTF fonts if you don't want to use the default font.
+
+     // Build and load the texture atlas into a texture
+     // (In the examples/ app this is usually done within the ImGui_ImplXXX_Init() function from one of the demo Renderer)
+     int width, height;
+     unsigned char* pixels = NULL;
+     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
+
+     // At this point you've got the texture data and you need to upload that your your graphic system:
+     // After we have created the texture, store its pointer/identifier (_in whichever format your engine uses_) in 'io.Fonts->TexID'.
+     // This will be passed back to your via the renderer. Basically ImTextureID == void*. Read FAQ for details about ImTextureID.
+     MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA32)
+     io.Fonts->TexID = (void*)texture;
+
+     // Application main loop
+     while (true)
+     {
+        // Setup low-level inputs, e.g. on Win32: calling GetKeyboardState(), or write to those fields from your Windows message handlers, etc.
+        // (In the examples/ app this is usually done within the ImGui_ImplXXX_NewFrame() function from one of the demo Platform bindings)
+        io.DeltaTime = 1.0f/60.0f;              // set the time elapsed since the previous frame (in seconds)
+        io.DisplaySize.x = 1920.0f;             // set the current display width
+        io.DisplaySize.y = 1280.0f;             // set the current display height here
+        io.MousePos = my_mouse_pos;             // set the mouse position
+        io.MouseDown[0] = my_mouse_buttons[0];  // set the mouse button states
+        io.MouseDown[1] = my_mouse_buttons[1];
+
+        // Call NewFrame(), after this point you can use ImGui::* functions anytime
+        // (So you want to try calling NewFrame() as early as you can in your mainloop to be able to use Dear ImGui everywhere)
+        ImGui::NewFrame();
+
+        // Most of your application code here
+        ImGui::Text("Hello, world!");
+        MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
+        MyGameRender(); // may use any Dear ImGui functions as well!
+
+        // Render dear imgui, swap buffers
+        // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code)
+        ImGui::EndFrame();
+        ImGui::Render();
+        ImDrawData* draw_data = ImGui::GetDrawData();
+        MyImGuiRenderFunction(draw_data);
+        SwapBuffers();
+     }
+
+     // Shutdown
+     ImGui::DestroyContext();
+
+ HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
+ ---------------------------------------------
+    void void MyImGuiRenderFunction(ImDrawData* draw_data)
+    {
+       // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
+       // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
+       // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
+       // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
+       for (int n = 0; n < draw_data->CmdListsCount; n++)
+       {
+          const ImDrawList* cmd_list = draw_data->CmdLists[n];
+          const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data;  // vertex buffer generated by Dear ImGui
+          const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data;   // index buffer generated by Dear ImGui
+          for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+          {
+             const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
+             if (pcmd->UserCallback)
+             {
+                 pcmd->UserCallback(cmd_list, pcmd);
+             }
+             else
+             {
+                 // The texture for the draw call is specified by pcmd->TextureId.
+                 // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization.
+                 MyEngineBindTexture((MyTexture*)pcmd->TextureId);
+
+                 // We are using scissoring to clip some objects. All low-level graphics API should supports it.
+                 // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches
+                 //   (some elements visible outside their bounds) but you can fix that once everything else works!
+                 // - Clipping coordinates are provided in imgui coordinates space (from draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize)
+                 //   In a single viewport application, draw_data->DisplayPos will always be (0,0) and draw_data->DisplaySize will always be == io.DisplaySize.
+                 //   However, in the interest of supporting multi-viewport applications in the future (see 'viewport' branch on github),
+                 //   always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space.
+                 // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min)
+                 ImVec2 pos = draw_data->DisplayPos;
+                 MyEngineScissor((int)(pcmd->ClipRect.x - pos.x), (int)(pcmd->ClipRect.y - pos.y), (int)(pcmd->ClipRect.z - pos.x), (int)(pcmd->ClipRect.w - pos.y));
+
+                 // Render 'pcmd->ElemCount/3' indexed triangles.
+                 // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices.
+                 MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer);
+             }
+             idx_buffer += pcmd->ElemCount;
+          }
+       }
+    }
+
+ - The examples/ folders contains many actual implementation of the pseudo-codes above.
+ - When calling NewFrame(), the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags are updated.
+   They tell you if Dear ImGui intends to use your inputs. When a flag is set you want to hide the corresponding inputs from the
+   rest of your application. In every cases you need to pass on the inputs to Dear ImGui.
+ - Refer to the FAQ for more information. Amusingly, it is called a FAQ because people frequently run into the same issues!
+
+ USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
+ ------------------------------------------
+ - The gamepad/keyboard navigation is fairly functional and keeps being improved.
+ - Gamepad support is particularly useful to use Dear ImGui on a console system (e.g. PS4, Switch, XB1) without a mouse!
+ - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787
+ - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable.
+ - Keyboard:
+    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable.
+      NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
+    - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag
+      will be set. For more advanced uses, you may want to read from:
+       - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
+       - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used).
+       - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions.
+      Please reach out if you think the game vs navigation input sharing could be improved.
+ - Gamepad:
+    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable.
+    - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame().
+      Note that io.NavInputs[] is cleared by EndFrame().
+    - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. For each entry of io.NavInputs[], set the following values:
+         0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks.
+    - We uses a simple >0.0f test for activation testing, and won't attempt to test for a dead-zone.
+      Your code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.).
+    - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://goo.gl/9LgVZW.
+    - If you need to share inputs between your game and the imgui parts, the easiest approach is to go all-or-nothing, with a buttons combo
+      to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved.
+ - Mouse:
+    - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
+    - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard.
+    - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag.
+      Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements.
+      When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved.
+      When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that.
+      (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!)
+      (In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want
+       to set a boolean to ignore your other external mouse positions until the external source is moved again.)
+
+
+ API BREAKING CHANGES
+ ====================
+
+ Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix.
+ Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code.
+ When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
+ You can read releases logs https://github.com/ocornut/imgui/releases for more details.
+
+ - 2020/01/22 (1.75) - ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius any more.
+ - 2019/12/17 (1.75) - made Columns() limited to 64 columns by asserting above that limit. While the current code technically supports it, future code may not so we're putting the restriction ahead.
+ - 2019/12/13 (1.75) - [imgui_internal.h] changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it, you may need to fix your initial value.
+ - 2019/12/08 (1.75) - removed redirecting functions/enums that were marked obsolete in 1.53 (December 2017):
+                       - ShowTestWindow()                    -> use ShowDemoWindow()
+                       - IsRootWindowFocused()               -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow)
+                       - IsRootWindowOrAnyChildFocused()     -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)
+                       - SetNextWindowContentWidth(w)        -> use SetNextWindowContentSize(ImVec2(w, 0.0f)
+                       - GetItemsLineHeightWithSpacing()     -> use GetFrameHeightWithSpacing()
+                       - ImGuiCol_ChildWindowBg              -> use ImGuiCol_ChildBg
+                       - ImGuiStyleVar_ChildWindowRounding   -> use ImGuiStyleVar_ChildRounding
+                       - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap
+                       - IMGUI_DISABLE_TEST_WINDOWS          -> use IMGUI_DISABLE_DEMO_WINDOWS
+ - 2019/12/08 (1.75) - obsoleted calling ImDrawList::PrimReserve() with a negative count (which was the vaguely documented and rarely if ever used). Instead we added an explicit PrimUnreserve() API.
+ - 2019/12/06 (1.75) - removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it).
+ - 2019/11/21 (1.74) - ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert.
+ - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS for consistency.
+ - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS for consistency.
+ - 2019/10/22 (1.74) - removed redirecting functions/enums that were marked obsolete in 1.52 (October 2017):
+                       - Begin() [old 5 args version]        -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed
+                       - IsRootWindowOrAnyChildHovered()     -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)
+                       - AlignFirstTextHeightToWidgets()     -> use AlignTextToFramePadding()
+                       - SetNextWindowPosCenter()            -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f)
+                       - ImFont::Glyph                       -> use ImFontGlyph
+ - 2019/10/14 (1.74) - inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function.
+                       if you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can add +io.KeyRepeatDelay to it to compensate for the fix.
+                       The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay).
+                       If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you.
+ - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete).
+ - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
+ - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names, or see how they were implemented until 1.71.
+ - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have
+                       overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering.
+                       This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows.
+                       Please reach out if you are affected.
+ - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
+ - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
+ - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now.
+ - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete).
+ - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete).
+ - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete).
+ - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with a dummy small value!
+ - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
+ - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
+ - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete).
+ - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects.
+ - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags.
+ - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
+ - 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete).
+ - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
+                       If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths.
+ - 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427)
+ - 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp.
+                       NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTION HAS BEEN MOVED.
+                       Because of this, any local modifications to imgui.cpp will likely conflict when you update. Read docs/CHANGELOG.txt for suggestions.
+ - 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
+ - 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
+ - 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
+ - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature.
+ - 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency.
+ - 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time.
+ - 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
+ - 2018/06/08 (1.62) - examples: the imgui_impl_xxx files have been split to separate platform (Win32, Glfw, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan,  etc.).
+                       old bindings will still work as is, however prefer using the separated bindings as they will be updated to support multi-viewports.
+                       when adopting new bindings follow the main.cpp code of your preferred examples/ folder to know which functions to call.
+                       in particular, note that old bindings called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function.
+ - 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set.
+ - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
+ - 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
+                       If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
+                       To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
+                       If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to help you find them.
+ - 2018/04/28 (1.61) - obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format",
+                       consistent with other functions. Kept redirection functions (will obsolete).
+ - 2018/04/09 (1.61) - IM_DELETE() helper function added in 1.60 doesn't clear the input _pointer_ reference, more consistent with expectation and allows passing r-value.
+ - 2018/03/20 (1.60) - renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some binding ahead of merging the Nav branch).
+ - 2018/03/12 (1.60) - removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now.
+ - 2018/03/08 (1.60) - changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically.
+ - 2018/03/03 (1.60) - renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums.
+ - 2018/02/18 (1.60) - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment.
+ - 2018/02/16 (1.60) - obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). Use ImGui::GetDrawData() to retrieve the ImDrawData* to display.
+ - 2018/02/07 (1.60) - reorganized context handling to be more explicit,
+                       - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END.
+                       - removed Shutdown() function, as DestroyContext() serve this purpose.
+                       - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance.
+                       - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts.
+                       - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts.
+ - 2018/01/31 (1.60) - moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths.
+ - 2018/01/11 (1.60) - obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete).
+ - 2018/01/11 (1.60) - obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete).
+ - 2018/01/03 (1.60) - renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData.
+ - 2017/12/29 (1.60) - removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it it's easy to replicate on your side.
+ - 2017/12/24 (1.53) - renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). Kept redirection function (will obsolete).
+ - 2017/12/21 (1.53) - ImDrawList: renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags
+ - 2017/12/21 (1.53) - ImDrawList: removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame.
+ - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set.
+ - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete).
+ - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete).
+                     - obsoleted IsRootWindowOrAnyChildFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows). Kept redirection function (will obsolete).
+ - 2017/12/12 (1.53) - renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. Kept redirection enum (will obsolete).
+ - 2017/12/10 (1.53) - removed SetNextWindowContentWidth(), prefer using SetNextWindowContentSize(). Kept redirection function (will obsolete).
+ - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed.
+ - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up.
+                       Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions.
+ - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency.
+ - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg.
+ - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding.
+ - 2017/11/02 (1.53) - obsoleted IsRootWindowOrAnyChildHovered() in favor of using IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows);
+ - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
+ - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
+ - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
+                       removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
+                         IsItemHoveredRect()        --> IsItemHovered(ImGuiHoveredFlags_RectOnly)
+                         IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
+                         IsMouseHoveringWindow()    --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior]
+ - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
+ - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
+ - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete).
+ - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
+ - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
+ - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
+                     - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
+                     - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
+ - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
+ - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
+ - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type.
+ - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
+ - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete).
+ - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete).
+ - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
+ - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
+                     - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
+                     - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0))'
+ - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse
+ - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset.
+ - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity.
+ - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild().
+ - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
+ - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
+ - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal.
+ - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore.
+                       If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you, otherwise if <1.0f you need tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar.
+                       This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color:
+                       ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); }
+                       If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color.
+ - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext().
+ - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection.
+ - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen).
+ - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDrawList::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer.
+ - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref github issue #337).
+ - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337)
+ - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete).
+ - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert.
+ - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you.
+ - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis.
+ - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete.
+ - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position.
+                       GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side.
+                       GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out!
+ - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize
+ - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project.
+ - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason
+ - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure.
+                       you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text.
+ - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost.
+                       this necessary change will break your rendering function! the fix should be very easy. sorry for that :(
+                     - if you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update your copy and you can ignore the rest.
+                     - the signature of the io.RenderDrawListsFn handler has changed!
+                       old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
+                       new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data).
+                         parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
+                         ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new.
+                         ImDrawCmd:  'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'.
+                     - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer.
+                     - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering!
+                     - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade!
+ - 2015/07/10 (1.43) - changed SameLine() parameters from int to float.
+ - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete).
+ - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount.
+ - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence
+ - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely be used. Sorry!
+ - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete).
+ - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete).
+ - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons.
+ - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened.
+ - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same).
+ - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50.
+ - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API
+ - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive.
+ - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead.
+ - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50.
+ - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing
+ - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50.
+ - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing)
+ - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50.
+ - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once.
+ - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now.
+ - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
+ - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
+ - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused)
+ - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions.
+ - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader.
+ - 2015/01/11 (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels.
+                       - old:  const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); [..Upload texture to GPU..];
+                       - new:  unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); [..Upload texture to GPU..]; io.Fonts->TexId = YourTexIdentifier;
+                       you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. It is now recommended that you sample the font texture with bilinear interpolation.
+ - 2015/01/11 (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to set io.Fonts->TexID.
+ - 2015/01/11 (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix)
+ - 2015/01/11 (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets
+ - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver)
+ - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph)
+ - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility
+ - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered()
+ - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly)
+ - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity)
+ - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale()
+ - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn
+ - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically)
+ - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite
+ - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes
+
+
+ FREQUENTLY ASKED QUESTIONS (FAQ)
+ ================================
+
+ Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)
+ Some answers are copied down here to facilitate searching in code.
+
+ Q&A: Basics
+ ===========
+
+ Q: Where is the documentation?
+ A: This library is poorly documented at the moment and expects of the user to be acquainted with C/C++.
+    - Run the examples/ and explore them.
+    - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function.
+    - The demo covers most features of Dear ImGui, so you can read the code and see its output.
+    - See documentation and comments at the top of imgui.cpp + effectively imgui.h.
+    - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the
+      examples/ folder to explain how to integrate Dear ImGui with your own engine/application.
+    - The Wiki (https://github.com/ocornut/imgui/wiki) has many resources and links.
+    - The Glossary (https://github.com/ocornut/imgui/wiki/Glossary) page also may be useful.
+    - Your programming IDE is your friend, find the type or function declaration to find comments
+      associated to it.
+
+ Q: What is this library called?
+ Q: Which version should I get?
+ >> This library is called "Dear ImGui", please don't call it "ImGui" :)
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Integration
+ ================
+
+ Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application?
+ A: You should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
+ >> See https://www.dearimgui.org/faq for fully detailed answer. You really want to read this.
+
+ Q. How can I enable keyboard controls?
+ Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display)
+ Q: I integrated Dear ImGui in my engine and the text or lines are blurry..
+ Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Usage
+ ----------
+
+ Q: Why are multiple widgets reacting when I interact with a single one?
+ Q: How can I have multiple widgets with the same label or with an empty label?
+ A: A primer on labels and the ID Stack...
+
+    Dear ImGui internally need to uniquely identify UI elements.
+    Elements that are typically not clickable (such as calls to the Text functions) don't need an ID.
+    Interactive widgets (such as calls to Button buttons) need a unique ID.
+    Unique ID are used internally to track active widgets and occasionally associate state to widgets.
+    Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element.
+
+   - Unique ID are often derived from a string label:
+
+       Button("OK");          // Label = "OK",     ID = hash of (..., "OK")
+       Button("Cancel");      // Label = "Cancel", ID = hash of (..., "Cancel")
+
+   - ID are uniquely scoped within windows, tree nodes, etc. which all pushes to the ID stack. Having
+     two buttons labeled "OK" in different windows or different tree locations is fine.
+     We used "..." above to signify whatever was already pushed to the ID stack previously:
+
+       Begin("MyWindow");
+       Button("OK");          // Label = "OK",     ID = hash of ("MyWindow", "OK")
+       End();
+       Begin("MyOtherWindow");
+       Button("OK");          // Label = "OK",     ID = hash of ("MyOtherWindow", "OK")
+       End();
+
+   - If you have a same ID twice in the same location, you'll have a conflict:
+
+       Button("OK");
+       Button("OK");          // ID collision! Interacting with either button will trigger the first one.
+
+     Fear not! this is easy to solve and there are many ways to solve it!
+
+   - Solving ID conflict in a simple/local context:
+     When passing a label you can optionally specify extra ID information within string itself.
+     Use "##" to pass a complement to the ID that won't be visible to the end-user.
+     This helps solving the simple collision cases when you know e.g. at compilation time which items
+     are going to be created:
+
+       Begin("MyWindow");
+       Button("Play");        // Label = "Play",   ID = hash of ("MyWindow", "Play")
+       Button("Play##foo1");  // Label = "Play",   ID = hash of ("MyWindow", "Play##foo1")  // Different from above
+       Button("Play##foo2");  // Label = "Play",   ID = hash of ("MyWindow", "Play##foo2")  // Different from above
+       End();
+
+   - If you want to completely hide the label, but still need an ID:
+
+       Checkbox("##On", &b);  // Label = "",       ID = hash of (..., "##On")   // No visible label, just a checkbox!
+
+   - Occasionally/rarely you might want change a label while preserving a constant ID. This allows
+     you to animate labels. For example you may want to include varying information in a window title bar,
+     but windows are uniquely identified by their ID. Use "###" to pass a label that isn't part of ID:
+
+       Button("Hello###ID");  // Label = "Hello",  ID = hash of (..., "###ID")
+       Button("World###ID");  // Label = "World",  ID = hash of (..., "###ID")  // Same as above, even though the label looks different
+
+       sprintf(buf, "My game (%f FPS)###MyGame", fps);
+       Begin(buf);            // Variable title,   ID = hash of "MyGame"
+
+   - Solving ID conflict in a more general manner:
+     Use PushID() / PopID() to create scopes and manipulate the ID stack, as to avoid ID conflicts
+     within the same window. This is the most convenient way of distinguishing ID when iterating and
+     creating many UI elements programmatically.
+     You can push a pointer, a string or an integer value into the ID stack.
+     Remember that ID are formed from the concatenation of _everything_ pushed into the ID stack.
+     At each level of the stack we store the seed used for items at this level of the ID stack.
+
+     Begin("Window");
+       for (int i = 0; i < 100; i++)
+       {
+         PushID(i);           // Push i to the id tack
+         Button("Click");     // Label = "Click",  ID = hash of ("Window", i, "Click")
+         PopID();
+       }
+       for (int i = 0; i < 100; i++)
+       {
+         MyObject* obj = Objects[i];
+         PushID(obj);
+         Button("Click");     // Label = "Click",  ID = hash of ("Window", obj pointer, "Click")
+         PopID();
+       }
+       for (int i = 0; i < 100; i++)
+       {
+         MyObject* obj = Objects[i];
+         PushID(obj->Name);
+         Button("Click");     // Label = "Click",  ID = hash of ("Window", obj->Name, "Click")
+         PopID();
+       }
+       End();
+
+   - You can stack multiple prefixes into the ID stack:
+
+       Button("Click");       // Label = "Click",  ID = hash of (..., "Click")
+       PushID("node");
+       Button("Click");       // Label = "Click",  ID = hash of (..., "node", "Click")
+         PushID(my_ptr);
+           Button("Click");   // Label = "Click",  ID = hash of (..., "node", my_ptr, "Click")
+         PopID();
+       PopID();
+
+   - Tree nodes implicitly creates a scope for you by calling PushID().
+
+       Button("Click");       // Label = "Click",  ID = hash of (..., "Click")
+       if (TreeNode("node"))  // <-- this function call will do a PushID() for you (unless instructed not to, with a special flag)
+       {
+         Button("Click");     // Label = "Click",  ID = hash of (..., "node", "Click")
+         TreePop();
+       }
+
+   - When working with trees, ID are used to preserve the open/close state of each tree node.
+     Depending on your use cases you may want to use strings, indices or pointers as ID.
+      e.g. when following a single pointer that may change over time, using a static string as ID
+       will preserve your node open/closed state when the targeted object change.
+      e.g. when displaying a list of objects, using indices or pointers as ID will preserve the
+       node open/closed state differently. See what makes more sense in your situation!
+
+ Q: How can I display an image? What is ImTextureID, how does it works?
+ >> See https://www.dearimgui.org/faq and https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
+
+ Q: How can I use my own math types instead of ImVec2/ImVec4?
+ Q: How can I interact with standard C++ types (such as std::string and std::vector)?
+ Q: How can I display custom shapes? (using low-level ImDrawList API)
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Fonts, Text
+ ================
+
+ Q: How can I load a different font than the default?
+ Q: How can I easily use icons in my application?
+ Q: How can I load multiple fonts?
+ Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
+ >> See https://www.dearimgui.org/faq and docs/FONTS.txt
+
+ Q&A: Concerns
+ =============
+
+ Q: Who uses Dear ImGui?
+ Q: Can you create elaborate/serious tools with Dear ImGui?
+ Q: Can you reskin the look of Dear ImGui?
+ Q: Why using C++ (as opposed to C)?
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Community
+ ==============
+
+ Q: How can I help?
+ A: - Businesses: please reach out to "contact AT dearimgui.org" if you work in a place using Dear ImGui!
+      We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts.
+      This is among the most useful thing you can do for Dear ImGui. With increased funding we can hire more people working on this project.
+    - Individuals: you can support continued development via PayPal donations. See README.
+    - If you are experienced with Dear ImGui and C++, look at the github issues, look at the Wiki, read docs/TODO.txt
+      and see how you want to help and can help!
+    - Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc.
+      You may post screenshot or links in the gallery threads (github.com/ocornut/imgui/issues/3075). Visuals are ideal as they inspire other programmers.
+      But even without visuals, disclosing your use of dear imgui help the library grow credibility, and help other teams and programmers with taking decisions.
+    - If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on github or privately).
+
+*/
+
+//-------------------------------------------------------------------------
+// [SECTION] INCLUDES
+//-------------------------------------------------------------------------
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+// System includes
+#include <ctype.h>      // toupper
+#include <stdio.h>      // vsnprintf, sscanf, printf
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h>     // intptr_t
+#else
+#include <stdint.h>     // intptr_t
+#endif
+
+// [Windows] OS specific includes (optional)
+#if defined(_WIN32) && defined(IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
+#define IMGUI_DISABLE_WIN32_FUNCTIONS
+#endif
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#ifndef __MINGW32__
+#include <Windows.h>        // _wfopen, OpenClipboard
+#else
+#include <windows.h>
+#endif
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have all Win32 functions
+#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
+#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
+#endif
+#endif
+
+// [Apple] OS specific includes
+#if defined(__APPLE__)
+#include <TargetConditionals.h>
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127)             // condition expression is constant
+#pragma warning (disable: 4996)             // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#if defined(_MSC_VER) && _MSC_VER >= 1922   // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054)             // operator '|': deprecated between enumerations of different types
+#endif
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wunknown-pragmas"        // warning : unknown warning group '-Wformat-pedantic *'        // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great!
+#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok.
+#pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
+#pragma clang diagnostic ignored "-Wexit-time-destructors"  // warning : declaration requires an exit-time destructor       // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
+#pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is.
+#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
+#pragma clang diagnostic ignored "-Wformat-pedantic"        // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
+#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"       // warning : cast to 'void *' from smaller integer type 'int'
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
+#elif defined(__GNUC__)
+// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association.
+#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used
+#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size
+#pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
+#pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked
+#pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
+#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+// Debug options
+#define IMGUI_DEBUG_NAV_SCORING     0   // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL
+#define IMGUI_DEBUG_NAV_RECTS       0   // Display the reference navigation rectangle for each window
+#define IMGUI_DEBUG_INI_SETTINGS    0   // Save additional comments in .ini file (particularly helps for Docking, but makes saving slower)
+
+// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
+static const float NAV_WINDOWING_HIGHLIGHT_DELAY            = 0.20f;    // Time before the highlight and screen dimming starts fading in
+static const float NAV_WINDOWING_LIST_APPEAR_DELAY          = 0.15f;    // Time before the window list starts to appear
+
+// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by back-end)
+static const float WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS = 4.0f;     // Extend outside and inside windows. Affect FindHoveredWindow().
+static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f;    // Reduce visual noise by only highlighting the border after a certain time.
+static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER    = 2.00f;    // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certaint time, unless mouse moved.
+
+//-------------------------------------------------------------------------
+// [SECTION] FORWARD DECLARATIONS
+//-------------------------------------------------------------------------
+
+static void             SetCurrentWindow(ImGuiWindow* window);
+static void             FindHoveredWindow();
+static ImGuiWindow*     CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
+static ImVec2           CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges);
+
+static void             AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
+static void             AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
+
+static ImRect           GetViewportRect();
+
+// Settings
+static void*            WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
+static void             WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
+static void             WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
+
+// Platform Dependents default implementation for IO functions
+static const char*      GetClipboardTextFn_DefaultImpl(void* user_data);
+static void             SetClipboardTextFn_DefaultImpl(void* user_data, const char* text);
+static void             ImeSetInputScreenPosFn_DefaultImpl(int x, int y);
+
+namespace ImGui
+{
+// Navigation
+static void             NavUpdate();
+static void             NavUpdateWindowing();
+static void             NavUpdateWindowingOverlay();
+static void             NavUpdateMoveResult();
+static float            NavUpdatePageUpPageDown();
+static inline void      NavUpdateAnyRequestFlag();
+static bool             NavScoreItem(ImGuiNavMoveResult* result, ImRect cand);
+static void             NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
+static ImVec2           NavCalcPreferredRefPos();
+static void             NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
+static ImGuiWindow*     NavRestoreLastChildNavWindow(ImGuiWindow* window);
+static int              FindWindowFocusIndex(ImGuiWindow* window);
+
+// Error Checking
+static void             ErrorCheckNewFrameSanityChecks();
+static void             ErrorCheckEndFrameSanityChecks();
+static void             ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write);
+
+// Misc
+static void             UpdateSettings();
+static void             UpdateMouseInputs();
+static void             UpdateMouseWheel();
+static void             UpdateTabFocus();
+static void             UpdateDebugToolItemPicker();
+static bool             UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]);
+static void             RenderWindowOuterBorders(ImGuiWindow* window);
+static void             RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
+static void             RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);
+
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] CONTEXT AND MEMORY ALLOCATORS
+//-----------------------------------------------------------------------------
+
+// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL.
+// ImGui::CreateContext() will automatically set this pointer if it is NULL. Change to a different context by calling ImGui::SetCurrentContext().
+// 1) Important: globals are not shared across DLL boundaries! If you use DLLs or any form of hot-reloading: you will need to call
+//    SetCurrentContext() (with the pointer you got from CreateContext) from each unique static/DLL boundary, and after each hot-reloading.
+//    In your debugger, add GImGui to your watch window and notice how its value changes depending on which location you are currently stepping into.
+// 2) Important: Dear ImGui functions are not thread-safe because of this pointer.
+//    If you want thread-safety to allow N threads to access N different contexts, you can:
+//    - Change this variable to use thread local storage so each thread can refer to a different context, in imconfig.h:
+//          struct ImGuiContext;
+//          extern thread_local ImGuiContext* MyImGuiTLS;
+//          #define GImGui MyImGuiTLS
+//      And then define MyImGuiTLS in one of your cpp file. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword.
+//    - Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
+//    - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from different namespace.
+#ifndef GImGui
+ImGuiContext*   GImGui = NULL;
+#endif
+
+// Memory Allocator functions. Use SetAllocatorFunctions() to change them.
+// If you use DLL hotreloading you might need to call SetAllocatorFunctions() after reloading code from this file.
+// Otherwise, you probably don't want to modify them mid-program, and if you use global/static e.g. ImVector<> instances you may need to keep them accessible during program destruction.
+#ifndef IMGUI_DISABLE_DEFAULT_ALLOCATORS
+static void*   MallocWrapper(size_t size, void* user_data)    { IM_UNUSED(user_data); return malloc(size); }
+static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSED(user_data); free(ptr); }
+#else
+static void*   MallocWrapper(size_t size, void* user_data)    { IM_UNUSED(user_data); IM_UNUSED(size); IM_ASSERT(0); return NULL; }
+static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSED(user_data); IM_UNUSED(ptr); IM_ASSERT(0); }
+#endif
+
+static void*  (*GImAllocatorAllocFunc)(size_t size, void* user_data) = MallocWrapper;
+static void   (*GImAllocatorFreeFunc)(void* ptr, void* user_data) = FreeWrapper;
+static void*    GImAllocatorUserData = NULL;
+
+//-----------------------------------------------------------------------------
+// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
+//-----------------------------------------------------------------------------
+
+ImGuiStyle::ImGuiStyle()
+{
+    Alpha                   = 1.0f;             // Global alpha applies to everything in ImGui
+    WindowPadding           = ImVec2(8,8);      // Padding within a window
+    WindowRounding          = 7.0f;             // Radius of window corners rounding. Set to 0.0f to have rectangular windows
+    WindowBorderSize        = 1.0f;             // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+    WindowMinSize           = ImVec2(32,32);    // Minimum window size
+    WindowTitleAlign        = ImVec2(0.0f,0.5f);// Alignment for title bar text
+    WindowMenuButtonPosition= ImGuiDir_Left;    // Position of the collapsing/docking button in the title bar (left/right). Defaults to ImGuiDir_Left.
+    ChildRounding           = 0.0f;             // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
+    ChildBorderSize         = 1.0f;             // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+    PopupRounding           = 0.0f;             // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows
+    PopupBorderSize         = 1.0f;             // Thickness of border around popup or tooltip windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+    FramePadding            = ImVec2(4,3);      // Padding within a framed rectangle (used by most widgets)
+    FrameRounding           = 0.0f;             // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets).
+    FrameBorderSize         = 0.0f;             // Thickness of border around frames. Generally set to 0.0f or 1.0f. Other values not well tested.
+    ItemSpacing             = ImVec2(8,4);      // Horizontal and vertical spacing between widgets/lines
+    ItemInnerSpacing        = ImVec2(4,4);      // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
+    CellPadding             = ImVec2(4,2);      // Padding within a table cell
+    TouchExtraPadding       = ImVec2(0,0);      // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
+    IndentSpacing           = 21.0f;            // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
+    ColumnsMinSpacing       = 6.0f;             // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
+    ScrollbarSize           = 14.0f;            // Width of the vertical scrollbar, Height of the horizontal scrollbar
+    ScrollbarRounding       = 9.0f;             // Radius of grab corners rounding for scrollbar
+    GrabMinSize             = 10.0f;            // Minimum width/height of a grab box for slider/scrollbar
+    GrabRounding            = 0.0f;             // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
+    TabRounding             = 4.0f;             // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+    TabBorderSize           = 0.0f;             // Thickness of border around tabs.
+    ColorButtonPosition     = ImGuiDir_Right;   // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
+    ButtonTextAlign         = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
+    SelectableTextAlign     = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
+    DisplayWindowPadding    = ImVec2(19,19);    // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
+    DisplaySafeAreaPadding  = ImVec2(3,3);      // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
+    MouseCursorScale        = 1.0f;             // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
+    AntiAliasedLines        = true;             // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU.
+    AntiAliasedFill         = true;             // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
+    CurveTessellationTol    = 1.25f;            // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
+    CircleSegmentMaxError   = 1.60f;            // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
+
+    // Default theme
+    ImGui::StyleColorsDark(this);
+}
+
+// To scale your entire UI (e.g. if you want your app to use High DPI or generally be DPI aware) you may use this helper function. Scaling the fonts is done separately and is up to you.
+// Important: This operation is lossy because we round all sizes to integer. If you need to change your scale multiples, call this over a freshly initialized ImGuiStyle structure rather than scaling multiple times.
+void ImGuiStyle::ScaleAllSizes(float scale_factor)
+{
+    WindowPadding = ImFloor(WindowPadding * scale_factor);
+    WindowRounding = ImFloor(WindowRounding * scale_factor);
+    WindowMinSize = ImFloor(WindowMinSize * scale_factor);
+    ChildRounding = ImFloor(ChildRounding * scale_factor);
+    PopupRounding = ImFloor(PopupRounding * scale_factor);
+    FramePadding = ImFloor(FramePadding * scale_factor);
+    FrameRounding = ImFloor(FrameRounding * scale_factor);
+    ItemSpacing = ImFloor(ItemSpacing * scale_factor);
+    ItemInnerSpacing = ImFloor(ItemInnerSpacing * scale_factor);
+    CellPadding = ImFloor(CellPadding * scale_factor);
+    TouchExtraPadding = ImFloor(TouchExtraPadding * scale_factor);
+    IndentSpacing = ImFloor(IndentSpacing * scale_factor);
+    ColumnsMinSpacing = ImFloor(ColumnsMinSpacing * scale_factor);
+    ScrollbarSize = ImFloor(ScrollbarSize * scale_factor);
+    ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor);
+    GrabMinSize = ImFloor(GrabMinSize * scale_factor);
+    GrabRounding = ImFloor(GrabRounding * scale_factor);
+    TabRounding = ImFloor(TabRounding * scale_factor);
+    DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor);
+    DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor);
+    MouseCursorScale = ImFloor(MouseCursorScale * scale_factor);
+}
+
+ImGuiIO::ImGuiIO()
+{
+    // Most fields are initialized with zero
+    memset(this, 0, sizeof(*this));
+    IM_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT); // Our pre-C++11 IM_STATIC_ASSERT() macros triggers warning on modern compilers so we don't use it here.
+
+    // Settings
+    ConfigFlags = ImGuiConfigFlags_None;
+    BackendFlags = ImGuiBackendFlags_None;
+    DisplaySize = ImVec2(-1.0f, -1.0f);
+    DeltaTime = 1.0f/60.0f;
+    IniSavingRate = 5.0f;
+    IniFilename = "imgui.ini";
+    LogFilename = "imgui_log.txt";
+    MouseDoubleClickTime = 0.30f;
+    MouseDoubleClickMaxDist = 6.0f;
+    for (int i = 0; i < ImGuiKey_COUNT; i++)
+        KeyMap[i] = -1;
+    KeyRepeatDelay = 0.275f;
+    KeyRepeatRate = 0.050f;
+    UserData = NULL;
+
+    Fonts = NULL;
+    FontGlobalScale = 1.0f;
+    FontDefault = NULL;
+    FontAllowUserScaling = false;
+    DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
+
+    // Miscellaneous options
+    MouseDrawCursor = false;
+#ifdef __APPLE__
+    ConfigMacOSXBehaviors = true;  // Set Mac OS X style defaults based on __APPLE__ compile time flag
+#else
+    ConfigMacOSXBehaviors = false;
+#endif
+    ConfigInputTextCursorBlink = true;
+    ConfigWindowsResizeFromEdges = true;
+    ConfigWindowsMoveFromTitleBarOnly = false;
+    ConfigWindowsMemoryCompactTimer = 60.0f;
+
+    // Platform Functions
+    BackendPlatformName = BackendRendererName = NULL;
+    BackendPlatformUserData = BackendRendererUserData = BackendLanguageUserData = NULL;
+    GetClipboardTextFn = GetClipboardTextFn_DefaultImpl;   // Platform dependent default implementations
+    SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
+    ClipboardUserData = NULL;
+    ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl;
+    ImeWindowHandle = NULL;
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    RenderDrawListsFn = NULL;
+#endif
+
+    // Input (NB: we already have memset zero the entire structure!)
+    MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
+    MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
+    MouseDragThreshold = 6.0f;
+    for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
+    for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i]  = KeysDownDurationPrev[i] = -1.0f;
+    for (int i = 0; i < IM_ARRAYSIZE(NavInputsDownDuration); i++) NavInputsDownDuration[i] = -1.0f;
+}
+
+// Pass in translated ASCII characters for text input.
+// - with glfw you can get those from the callback set in glfwSetCharCallback()
+// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message
+void ImGuiIO::AddInputCharacter(unsigned int c)
+{
+    InputQueueCharacters.push_back(c > 0 && c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID);
+}
+
+// UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so
+// we should save the high surrogate.
+void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c)
+{
+    if ((c & 0xFC00) == 0xD800) // High surrogate, must save
+    {
+        if (InputQueueSurrogate != 0)
+            InputQueueCharacters.push_back(0xFFFD);
+        InputQueueSurrogate = c;
+        return;
+    }
+
+    ImWchar cp = c;
+    if (InputQueueSurrogate != 0)
+    {
+        if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate
+            InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID);
+        else if (IM_UNICODE_CODEPOINT_MAX == (0xFFFF)) // Codepoint will not fit in ImWchar (extra parenthesis around 0xFFFF somehow fixes -Wunreachable-code with Clang)
+            cp = IM_UNICODE_CODEPOINT_INVALID;
+        else
+            cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000);
+        InputQueueSurrogate = 0;
+    }
+    InputQueueCharacters.push_back(cp);
+}
+
+void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
+{
+    while (*utf8_chars != 0)
+    {
+        unsigned int c = 0;
+        utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL);
+        if (c > 0)
+            InputQueueCharacters.push_back((ImWchar)c);
+    }
+}
+
+void ImGuiIO::ClearInputCharacters()
+{
+    InputQueueCharacters.resize(0);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
+//-----------------------------------------------------------------------------
+
+ImVec2 ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments)
+{
+    IM_ASSERT(num_segments > 0); // Use ImBezierClosestPointCasteljau()
+    ImVec2 p_last = p1;
+    ImVec2 p_closest;
+    float p_closest_dist2 = FLT_MAX;
+    float t_step = 1.0f / (float)num_segments;
+    for (int i_step = 1; i_step <= num_segments; i_step++)
+    {
+        ImVec2 p_current = ImBezierCalc(p1, p2, p3, p4, t_step * i_step);
+        ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
+        float dist2 = ImLengthSqr(p - p_line);
+        if (dist2 < p_closest_dist2)
+        {
+            p_closest = p_line;
+            p_closest_dist2 = dist2;
+        }
+        p_last = p_current;
+    }
+    return p_closest;
+}
+
+// Closely mimics PathBezierToCasteljau() in imgui_draw.cpp
+static void BezierClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, ImVec2& p_last, float& p_closest_dist2, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
+{
+    float dx = x4 - x1;
+    float dy = y4 - y1;
+    float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
+    float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
+    d2 = (d2 >= 0) ? d2 : -d2;
+    d3 = (d3 >= 0) ? d3 : -d3;
+    if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy))
+    {
+        ImVec2 p_current(x4, y4);
+        ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
+        float dist2 = ImLengthSqr(p - p_line);
+        if (dist2 < p_closest_dist2)
+        {
+            p_closest = p_line;
+            p_closest_dist2 = dist2;
+        }
+        p_last = p_current;
+    }
+    else if (level < 10)
+    {
+        float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f;
+        float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f;
+        float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f;
+        float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f;
+        float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f;
+        float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f;
+        BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1);
+        BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1);
+    }
+}
+
+// tess_tol is generally the same value you would find in ImGui::GetStyle().CurveTessellationTol
+// Because those ImXXX functions are lower-level than ImGui:: we cannot access this value automatically.
+ImVec2 ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol)
+{
+    IM_ASSERT(tess_tol > 0.0f);
+    ImVec2 p_last = p1;
+    ImVec2 p_closest;
+    float p_closest_dist2 = FLT_MAX;
+    BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, tess_tol, 0);
+    return p_closest;
+}
+
+ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
+{
+    ImVec2 ap = p - a;
+    ImVec2 ab_dir = b - a;
+    float dot = ap.x * ab_dir.x + ap.y * ab_dir.y;
+    if (dot < 0.0f)
+        return a;
+    float ab_len_sqr = ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y;
+    if (dot > ab_len_sqr)
+        return b;
+    return a + ab_dir * dot / ab_len_sqr;
+}
+
+bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
+{
+    bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f;
+    bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f;
+    bool b3 = ((p.x - a.x) * (c.y - a.y) - (p.y - a.y) * (c.x - a.x)) < 0.0f;
+    return ((b1 == b2) && (b2 == b3));
+}
+
+void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w)
+{
+    ImVec2 v0 = b - a;
+    ImVec2 v1 = c - a;
+    ImVec2 v2 = p - a;
+    const float denom = v0.x * v1.y - v1.x * v0.y;
+    out_v = (v2.x * v1.y - v1.x * v2.y) / denom;
+    out_w = (v0.x * v2.y - v2.x * v0.y) / denom;
+    out_u = 1.0f - out_v - out_w;
+}
+
+ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
+{
+    ImVec2 proj_ab = ImLineClosestPoint(a, b, p);
+    ImVec2 proj_bc = ImLineClosestPoint(b, c, p);
+    ImVec2 proj_ca = ImLineClosestPoint(c, a, p);
+    float dist2_ab = ImLengthSqr(p - proj_ab);
+    float dist2_bc = ImLengthSqr(p - proj_bc);
+    float dist2_ca = ImLengthSqr(p - proj_ca);
+    float m = ImMin(dist2_ab, ImMin(dist2_bc, dist2_ca));
+    if (m == dist2_ab)
+        return proj_ab;
+    if (m == dist2_bc)
+        return proj_bc;
+    return proj_ca;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
+//-----------------------------------------------------------------------------
+
+// Consider using _stricmp/_strnicmp under Windows or strcasecmp/strncasecmp. We don't actually use either ImStricmp/ImStrnicmp in the codebase any more.
+int ImStricmp(const char* str1, const char* str2)
+{
+    int d;
+    while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; }
+    return d;
+}
+
+int ImStrnicmp(const char* str1, const char* str2, size_t count)
+{
+    int d = 0;
+    while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
+    return d;
+}
+
+void ImStrncpy(char* dst, const char* src, size_t count)
+{
+    if (count < 1)
+        return;
+    if (count > 1)
+        strncpy(dst, src, count - 1);
+    dst[count - 1] = 0;
+}
+
+char* ImStrdup(const char* str)
+{
+    size_t len = strlen(str);
+    void* buf = IM_ALLOC(len + 1);
+    return (char*)memcpy(buf, (const void*)str, len + 1);
+}
+
+char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
+{
+    size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1;
+    size_t src_size = strlen(src) + 1;
+    if (dst_buf_size < src_size)
+    {
+        IM_FREE(dst);
+        dst = (char*)IM_ALLOC(src_size);
+        if (p_dst_size)
+            *p_dst_size = src_size;
+    }
+    return (char*)memcpy(dst, (const void*)src, src_size);
+}
+
+const char* ImStrchrRange(const char* str, const char* str_end, char c)
+{
+    const char* p = (const char*)memchr(str, (int)c, str_end - str);
+    return p;
+}
+
+int ImStrlenW(const ImWchar* str)
+{
+    //return (int)wcslen((const wchar_t*)str);  // FIXME-OPT: Could use this when wchar_t are 16-bit
+    int n = 0;
+    while (*str++) n++;
+    return n;
+}
+
+// Find end-of-line. Return pointer will point to either first \n, either str_end.
+const char* ImStreolRange(const char* str, const char* str_end)
+{
+    const char* p = (const char*)memchr(str, '\n', str_end - str);
+    return p ? p : str_end;
+}
+
+const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin) // find beginning-of-line
+{
+    while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n')
+        buf_mid_line--;
+    return buf_mid_line;
+}
+
+const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end)
+{
+    if (!needle_end)
+        needle_end = needle + strlen(needle);
+
+    const char un0 = (char)toupper(*needle);
+    while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
+    {
+        if (toupper(*haystack) == un0)
+        {
+            const char* b = needle + 1;
+            for (const char* a = haystack + 1; b < needle_end; a++, b++)
+                if (toupper(*a) != toupper(*b))
+                    break;
+            if (b == needle_end)
+                return haystack;
+        }
+        haystack++;
+    }
+    return NULL;
+}
+
+// Trim str by offsetting contents when there's leading data + writing a \0 at the trailing position. We use this in situation where the cost is negligible.
+void ImStrTrimBlanks(char* buf)
+{
+    char* p = buf;
+    while (p[0] == ' ' || p[0] == '\t')     // Leading blanks
+        p++;
+    char* p_start = p;
+    while (*p != 0)                         // Find end of string
+        p++;
+    while (p > p_start && (p[-1] == ' ' || p[-1] == '\t'))  // Trailing blanks
+        p--;
+    if (p_start != buf)                     // Copy memory if we had leading blanks
+        memmove(buf, p_start, p - p_start);
+    buf[p - p_start] = 0;                   // Zero terminate
+}
+
+const char* ImStrSkipBlank(const char* str)
+{
+    while (str[0] == ' ' || str[0] == '\t')
+        str++;
+    return str;
+}
+
+// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
+// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
+// B) When buf==NULL vsnprintf() will return the output size.
+#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+
+// We support stb_sprintf which is much faster (see: https://github.com/nothings/stb/blob/master/stb_sprintf.h)
+// You may set IMGUI_USE_STB_SPRINTF to use our default wrapper, or set IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+// and setup the wrapper yourself. (FIXME-OPT: Some of our high-level operations such as ImGuiTextBuffer::appendfv() are
+// designed using two-passes worst case, which probably could be improved using the stbsp_vsprintfcb() function.)
+#ifdef IMGUI_USE_STB_SPRINTF
+#define STB_SPRINTF_IMPLEMENTATION
+#include "stb_sprintf.h"
+#endif
+
+#if defined(_MSC_VER) && !defined(vsnprintf)
+#define vsnprintf _vsnprintf
+#endif
+
+int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+#ifdef IMGUI_USE_STB_SPRINTF
+    int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
+    int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
+    va_end(args);
+    if (buf == NULL)
+        return w;
+    if (w == -1 || w >= (int)buf_size)
+        w = (int)buf_size - 1;
+    buf[w] = 0;
+    return w;
+}
+
+int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args)
+{
+#ifdef IMGUI_USE_STB_SPRINTF
+    int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
+    int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
+    if (buf == NULL)
+        return w;
+    if (w == -1 || w >= (int)buf_size)
+        w = (int)buf_size - 1;
+    buf[w] = 0;
+    return w;
+}
+#endif // #ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+
+// CRC32 needs a 1KB lookup table (not cache friendly)
+// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily:
+// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe.
+static const ImU32 GCrc32LookupTable[256] =
+{
+    0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
+    0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
+    0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
+    0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
+    0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
+    0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
+    0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
+    0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
+    0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
+    0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
+    0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
+    0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
+    0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
+    0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
+    0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
+    0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D,
+};
+
+// Known size hash
+// It is ok to call ImHashData on a string with known length but the ### operator won't be supported.
+// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
+ImU32 ImHashData(const void* data_p, size_t data_size, ImU32 seed)
+{
+    ImU32 crc = ~seed;
+    const unsigned char* data = (const unsigned char*)data_p;
+    const ImU32* crc32_lut = GCrc32LookupTable;
+    while (data_size-- != 0)
+        crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++];
+    return ~crc;
+}
+
+// Zero-terminated string hash, with support for ### to reset back to seed value
+// We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed.
+// Because this syntax is rarely used we are optimizing for the common case.
+// - If we reach ### in the string we discard the hash so far and reset to the seed.
+// - We don't do 'current += 2; continue;' after handling ### to keep the code smaller/faster (measured ~10% diff in Debug build)
+// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
+ImU32 ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
+{
+    seed = ~seed;
+    ImU32 crc = seed;
+    const unsigned char* data = (const unsigned char*)data_p;
+    const ImU32* crc32_lut = GCrc32LookupTable;
+    if (data_size != 0)
+    {
+        while (data_size-- != 0)
+        {
+            unsigned char c = *data++;
+            if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#')
+                crc = seed;
+            crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
+        }
+    }
+    else
+    {
+        while (unsigned char c = *data++)
+        {
+            if (c == '#' && data[0] == '#' && data[1] == '#')
+                crc = seed;
+            crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
+        }
+    }
+    return ~crc;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (File functions)
+//-----------------------------------------------------------------------------
+
+// Default file functions
+#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+
+ImFileHandle ImFileOpen(const char* filename, const char* mode)
+{
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(__CYGWIN__) && !defined(__GNUC__)
+    // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames.
+    // Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
+    const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
+    const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
+    ImVector<ImWchar> buf;
+    buf.resize(filename_wsize + mode_wsize);
+    ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize);
+    ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize);
+    return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]);
+#else
+    return fopen(filename, mode);
+#endif
+}
+
+// We should in theory be using fseeko()/ftello() with off_t and _fseeki64()/_ftelli64() with __int64, waiting for the PR that does that in a very portable pre-C++11 zero-warnings way.
+bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
+ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return ((off = ftell(f)) != -1 && !fseek(f, 0, SEEK_END) && (sz = ftell(f)) != -1 && !fseek(f, off, SEEK_SET)) ? (ImU64)sz : (ImU64)-1; }
+ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)           { return fread(data, (size_t)sz, (size_t)count, f); }
+ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandle f)    { return fwrite(data, (size_t)sz, (size_t)count, f); }
+#endif // #ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+
+// Helper: Load file content into memory
+// Memory allocated with IM_ALLOC(), must be freed by user using IM_FREE() == ImGui::MemFree()
+// This can't really be used with "rt" because fseek size won't match read size.
+void*   ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size, int padding_bytes)
+{
+    IM_ASSERT(filename && mode);
+    if (out_file_size)
+        *out_file_size = 0;
+
+    ImFileHandle f;
+    if ((f = ImFileOpen(filename, mode)) == NULL)
+        return NULL;
+
+    size_t file_size = (size_t)ImFileGetSize(f);
+    if (file_size == (size_t)-1)
+    {
+        ImFileClose(f);
+        return NULL;
+    }
+
+    void* file_data = IM_ALLOC(file_size + padding_bytes);
+    if (file_data == NULL)
+    {
+        ImFileClose(f);
+        return NULL;
+    }
+    if (ImFileRead(file_data, 1, file_size, f) != file_size)
+    {
+        ImFileClose(f);
+        IM_FREE(file_data);
+        return NULL;
+    }
+    if (padding_bytes > 0)
+        memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes);
+
+    ImFileClose(f);
+    if (out_file_size)
+        *out_file_size = file_size;
+
+    return file_data;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
+//-----------------------------------------------------------------------------
+
+// Convert UTF-8 to 32-bit character, process single character input.
+// Based on stb_from_utf8() from github.com/nothings/stb/
+// We handle UTF-8 decoding error by skipping forward.
+int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end)
+{
+    unsigned int c = (unsigned int)-1;
+    const unsigned char* str = (const unsigned char*)in_text;
+    if (!(*str & 0x80))
+    {
+        c = (unsigned int)(*str++);
+        *out_char = c;
+        return 1;
+    }
+    if ((*str & 0xe0) == 0xc0)
+    {
+        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
+        if (in_text_end && in_text_end - (const char*)str < 2) return 1;
+        if (*str < 0xc2) return 2;
+        c = (unsigned int)((*str++ & 0x1f) << 6);
+        if ((*str & 0xc0) != 0x80) return 2;
+        c += (*str++ & 0x3f);
+        *out_char = c;
+        return 2;
+    }
+    if ((*str & 0xf0) == 0xe0)
+    {
+        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
+        if (in_text_end && in_text_end - (const char*)str < 3) return 1;
+        if (*str == 0xe0 && (str[1] < 0xa0 || str[1] > 0xbf)) return 3;
+        if (*str == 0xed && str[1] > 0x9f) return 3; // str[1] < 0x80 is checked below
+        c = (unsigned int)((*str++ & 0x0f) << 12);
+        if ((*str & 0xc0) != 0x80) return 3;
+        c += (unsigned int)((*str++ & 0x3f) << 6);
+        if ((*str & 0xc0) != 0x80) return 3;
+        c += (*str++ & 0x3f);
+        *out_char = c;
+        return 3;
+    }
+    if ((*str & 0xf8) == 0xf0)
+    {
+        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
+        if (in_text_end && in_text_end - (const char*)str < 4) return 1;
+        if (*str > 0xf4) return 4;
+        if (*str == 0xf0 && (str[1] < 0x90 || str[1] > 0xbf)) return 4;
+        if (*str == 0xf4 && str[1] > 0x8f) return 4; // str[1] < 0x80 is checked below
+        c = (unsigned int)((*str++ & 0x07) << 18);
+        if ((*str & 0xc0) != 0x80) return 4;
+        c += (unsigned int)((*str++ & 0x3f) << 12);
+        if ((*str & 0xc0) != 0x80) return 4;
+        c += (unsigned int)((*str++ & 0x3f) << 6);
+        if ((*str & 0xc0) != 0x80) return 4;
+        c += (*str++ & 0x3f);
+        // utf-8 encodings of values used in surrogate pairs are invalid
+        if ((c & 0xFFFFF800) == 0xD800) return 4;
+        // If codepoint does not fit in ImWchar, use replacement character U+FFFD instead
+        if (c > IM_UNICODE_CODEPOINT_MAX) c = IM_UNICODE_CODEPOINT_INVALID;
+        *out_char = c;
+        return 4;
+    }
+    *out_char = 0;
+    return 0;
+}
+
+int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_text_remaining)
+{
+    ImWchar* buf_out = buf;
+    ImWchar* buf_end = buf + buf_size;
+    while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text)
+    {
+        unsigned int c;
+        in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
+        if (c == 0)
+            break;
+        *buf_out++ = (ImWchar)c;
+    }
+    *buf_out = 0;
+    if (in_text_remaining)
+        *in_text_remaining = in_text;
+    return (int)(buf_out - buf);
+}
+
+int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
+{
+    int char_count = 0;
+    while ((!in_text_end || in_text < in_text_end) && *in_text)
+    {
+        unsigned int c;
+        in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
+        if (c == 0)
+            break;
+        char_count++;
+    }
+    return char_count;
+}
+
+// Based on stb_to_utf8() from github.com/nothings/stb/
+static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c)
+{
+    if (c < 0x80)
+    {
+        buf[0] = (char)c;
+        return 1;
+    }
+    if (c < 0x800)
+    {
+        if (buf_size < 2) return 0;
+        buf[0] = (char)(0xc0 + (c >> 6));
+        buf[1] = (char)(0x80 + (c & 0x3f));
+        return 2;
+    }
+    if (c < 0x10000)
+    {
+        if (buf_size < 3) return 0;
+        buf[0] = (char)(0xe0 + (c >> 12));
+        buf[1] = (char)(0x80 + ((c>> 6) & 0x3f));
+        buf[2] = (char)(0x80 + ((c ) & 0x3f));
+        return 3;
+    }
+    if (c <= 0x10FFFF)
+    {
+        if (buf_size < 4) return 0;
+        buf[0] = (char)(0xf0 + (c >> 18));
+        buf[1] = (char)(0x80 + ((c >> 12) & 0x3f));
+        buf[2] = (char)(0x80 + ((c >> 6) & 0x3f));
+        buf[3] = (char)(0x80 + ((c ) & 0x3f));
+        return 4;
+    }
+    // Invalid code point, the max unicode is 0x10FFFF
+    return 0;
+}
+
+// Not optimal but we very rarely use this function.
+int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end)
+{
+    unsigned int dummy = 0;
+    return ImTextCharFromUtf8(&dummy, in_text, in_text_end);
+}
+
+static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
+{
+    if (c < 0x80) return 1;
+    if (c < 0x800) return 2;
+    if (c < 0x10000) return 3;
+    if (c <= 0x10FFFF) return 4;
+    return 3;
+}
+
+int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end)
+{
+    char* buf_out = buf;
+    const char* buf_end = buf + buf_size;
+    while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text)
+    {
+        unsigned int c = (unsigned int)(*in_text++);
+        if (c < 0x80)
+            *buf_out++ = (char)c;
+        else
+            buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end-buf_out-1), c);
+    }
+    *buf_out = 0;
+    return (int)(buf_out - buf);
+}
+
+int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end)
+{
+    int bytes_count = 0;
+    while ((!in_text_end || in_text < in_text_end) && *in_text)
+    {
+        unsigned int c = (unsigned int)(*in_text++);
+        if (c < 0x80)
+            bytes_count++;
+        else
+            bytes_count += ImTextCountUtf8BytesFromChar(c);
+    }
+    return bytes_count;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (Color functions)
+// Note: The Convert functions are early design which are not consistent with other API.
+//-----------------------------------------------------------------------------
+
+IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
+{
+    float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f;
+    int r = ImLerp((int)(col_a >> IM_COL32_R_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_R_SHIFT) & 0xFF, t);
+    int g = ImLerp((int)(col_a >> IM_COL32_G_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_G_SHIFT) & 0xFF, t);
+    int b = ImLerp((int)(col_a >> IM_COL32_B_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_B_SHIFT) & 0xFF, t);
+    return IM_COL32(r, g, b, 0xFF);
+}
+
+ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
+{
+    float s = 1.0f/255.0f;
+    return ImVec4(
+        ((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
+        ((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
+        ((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
+        ((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
+}
+
+ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
+{
+    ImU32 out;
+    out  = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
+    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
+    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
+    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
+    return out;
+}
+
+// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
+// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
+void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
+{
+    float K = 0.f;
+    if (g < b)
+    {
+        ImSwap(g, b);
+        K = -1.f;
+    }
+    if (r < g)
+    {
+        ImSwap(r, g);
+        K = -2.f / 6.f - K;
+    }
+
+    const float chroma = r - (g < b ? g : b);
+    out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f));
+    out_s = chroma / (r + 1e-20f);
+    out_v = r;
+}
+
+// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593
+// also http://en.wikipedia.org/wiki/HSL_and_HSV
+void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
+{
+    if (s == 0.0f)
+    {
+        // gray
+        out_r = out_g = out_b = v;
+        return;
+    }
+
+    h = ImFmod(h, 1.0f) / (60.0f/360.0f);
+    int   i = (int)h;
+    float f = h - (float)i;
+    float p = v * (1.0f - s);
+    float q = v * (1.0f - s * f);
+    float t = v * (1.0f - s * (1.0f - f));
+
+    switch (i)
+    {
+    case 0: out_r = v; out_g = t; out_b = p; break;
+    case 1: out_r = q; out_g = v; out_b = p; break;
+    case 2: out_r = p; out_g = v; out_b = t; break;
+    case 3: out_r = p; out_g = q; out_b = v; break;
+    case 4: out_r = t; out_g = p; out_b = v; break;
+    case 5: default: out_r = v; out_g = p; out_b = q; break;
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiStorage
+// Helper: Key->value storage
+//-----------------------------------------------------------------------------
+
+// std::lower_bound but without the bullshit
+static ImGuiStorage::ImGuiStoragePair* LowerBound(ImVector<ImGuiStorage::ImGuiStoragePair>& data, ImGuiID key)
+{
+    ImGuiStorage::ImGuiStoragePair* first = data.Data;
+    ImGuiStorage::ImGuiStoragePair* last = data.Data + data.Size;
+    size_t count = (size_t)(last - first);
+    while (count > 0)
+    {
+        size_t count2 = count >> 1;
+        ImGuiStorage::ImGuiStoragePair* mid = first + count2;
+        if (mid->key < key)
+        {
+            first = ++mid;
+            count -= count2 + 1;
+        }
+        else
+        {
+            count = count2;
+        }
+    }
+    return first;
+}
+
+// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+void ImGuiStorage::BuildSortByKey()
+{
+    struct StaticFunc
+    {
+        static int IMGUI_CDECL PairCompareByID(const void* lhs, const void* rhs)
+        {
+            // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
+            if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1;
+            if (((const ImGuiStoragePair*)lhs)->key < ((const ImGuiStoragePair*)rhs)->key) return -1;
+            return 0;
+        }
+    };
+    if (Data.Size > 1)
+        ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairCompareByID);
+}
+
+int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
+{
+    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+    if (it == Data.end() || it->key != key)
+        return default_val;
+    return it->val_i;
+}
+
+bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const
+{
+    return GetInt(key, default_val ? 1 : 0) != 0;
+}
+
+float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const
+{
+    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+    if (it == Data.end() || it->key != key)
+        return default_val;
+    return it->val_f;
+}
+
+void* ImGuiStorage::GetVoidPtr(ImGuiID key) const
+{
+    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+    if (it == Data.end() || it->key != key)
+        return NULL;
+    return it->val_p;
+}
+
+// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
+int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+        it = Data.insert(it, ImGuiStoragePair(key, default_val));
+    return &it->val_i;
+}
+
+bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val)
+{
+    return (bool*)GetIntRef(key, default_val ? 1 : 0);
+}
+
+float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+        it = Data.insert(it, ImGuiStoragePair(key, default_val));
+    return &it->val_f;
+}
+
+void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+        it = Data.insert(it, ImGuiStoragePair(key, default_val));
+    return &it->val_p;
+}
+
+// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame)
+void ImGuiStorage::SetInt(ImGuiID key, int val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+    {
+        Data.insert(it, ImGuiStoragePair(key, val));
+        return;
+    }
+    it->val_i = val;
+}
+
+void ImGuiStorage::SetBool(ImGuiID key, bool val)
+{
+    SetInt(key, val ? 1 : 0);
+}
+
+void ImGuiStorage::SetFloat(ImGuiID key, float val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+    {
+        Data.insert(it, ImGuiStoragePair(key, val));
+        return;
+    }
+    it->val_f = val;
+}
+
+void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val)
+{
+    ImGuiStoragePair* it = LowerBound(Data, key);
+    if (it == Data.end() || it->key != key)
+    {
+        Data.insert(it, ImGuiStoragePair(key, val));
+        return;
+    }
+    it->val_p = val;
+}
+
+void ImGuiStorage::SetAllInt(int v)
+{
+    for (int i = 0; i < Data.Size; i++)
+        Data[i].val_i = v;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiTextFilter
+//-----------------------------------------------------------------------------
+
+// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
+ImGuiTextFilter::ImGuiTextFilter(const char* default_filter)
+{
+    if (default_filter)
+    {
+        ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf));
+        Build();
+    }
+    else
+    {
+        InputBuf[0] = 0;
+        CountGrep = 0;
+    }
+}
+
+bool ImGuiTextFilter::Draw(const char* label, float width)
+{
+    if (width != 0.0f)
+        ImGui::SetNextItemWidth(width);
+    bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
+    if (value_changed)
+        Build();
+    return value_changed;
+}
+
+void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRange>* out) const
+{
+    out->resize(0);
+    const char* wb = b;
+    const char* we = wb;
+    while (we < e)
+    {
+        if (*we == separator)
+        {
+            out->push_back(ImGuiTextRange(wb, we));
+            wb = we + 1;
+        }
+        we++;
+    }
+    if (wb != we)
+        out->push_back(ImGuiTextRange(wb, we));
+}
+
+void ImGuiTextFilter::Build()
+{
+    Filters.resize(0);
+    ImGuiTextRange input_range(InputBuf, InputBuf+strlen(InputBuf));
+    input_range.split(',', &Filters);
+
+    CountGrep = 0;
+    for (int i = 0; i != Filters.Size; i++)
+    {
+        ImGuiTextRange& f = Filters[i];
+        while (f.b < f.e && ImCharIsBlankA(f.b[0]))
+            f.b++;
+        while (f.e > f.b && ImCharIsBlankA(f.e[-1]))
+            f.e--;
+        if (f.empty())
+            continue;
+        if (Filters[i].b[0] != '-')
+            CountGrep += 1;
+    }
+}
+
+bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
+{
+    if (Filters.empty())
+        return true;
+
+    if (text == NULL)
+        text = "";
+
+    for (int i = 0; i != Filters.Size; i++)
+    {
+        const ImGuiTextRange& f = Filters[i];
+        if (f.empty())
+            continue;
+        if (f.b[0] == '-')
+        {
+            // Subtract
+            if (ImStristr(text, text_end, f.b + 1, f.e) != NULL)
+                return false;
+        }
+        else
+        {
+            // Grep
+            if (ImStristr(text, text_end, f.b, f.e) != NULL)
+                return true;
+        }
+    }
+
+    // Implicit * grep
+    if (CountGrep == 0)
+        return true;
+
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiTextBuffer
+//-----------------------------------------------------------------------------
+
+// On some platform vsnprintf() takes va_list by reference and modifies it.
+// va_copy is the 'correct' way to copy a va_list but Visual Studio prior to 2013 doesn't have it.
+#ifndef va_copy
+#if defined(__GNUC__) || defined(__clang__)
+#define va_copy(dest, src) __builtin_va_copy(dest, src)
+#else
+#define va_copy(dest, src) (dest = src)
+#endif
+#endif
+
+char ImGuiTextBuffer::EmptyString[1] = { 0 };
+
+void ImGuiTextBuffer::append(const char* str, const char* str_end)
+{
+    int len = str_end ? (int)(str_end - str) : (int)strlen(str);
+
+    // Add zero-terminator the first time
+    const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
+    const int needed_sz = write_off + len;
+    if (write_off + len >= Buf.Capacity)
+    {
+        int new_capacity = Buf.Capacity * 2;
+        Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
+    }
+
+    Buf.resize(needed_sz);
+    memcpy(&Buf[write_off - 1], str, (size_t)len);
+    Buf[write_off - 1 + len] = 0;
+}
+
+void ImGuiTextBuffer::appendf(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    appendfv(fmt, args);
+    va_end(args);
+}
+
+// Helper: Text buffer for logging/accumulating text
+void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
+{
+    va_list args_copy;
+    va_copy(args_copy, args);
+
+    int len = ImFormatStringV(NULL, 0, fmt, args);         // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
+    if (len <= 0)
+    {
+        va_end(args_copy);
+        return;
+    }
+
+    // Add zero-terminator the first time
+    const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
+    const int needed_sz = write_off + len;
+    if (write_off + len >= Buf.Capacity)
+    {
+        int new_capacity = Buf.Capacity * 2;
+        Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
+    }
+
+    Buf.resize(needed_sz);
+    ImFormatStringV(&Buf[write_off - 1], (size_t)len + 1, fmt, args_copy);
+    va_end(args_copy);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiListClipper
+// This is currently not as flexible/powerful as it should be and really confusing/spaghetti, mostly because we changed
+// the API mid-way through development and support two ways to using the clipper, needs some rework (see TODO)
+//-----------------------------------------------------------------------------
+
+// FIXME-TABLE: This prevents us from using ImGuiListClipper _inside_ a table cell.
+// The problem we have is that without a Begin/End scheme for rows using the clipper is ambiguous.
+static bool GetSkipItemForListClipping()
+{
+    ImGuiContext& g = *GImGui;
+    return (g.CurrentTable ? g.CurrentTable->HostSkipItems : g.CurrentWindow->SkipItems);
+}
+
+// Helper to calculate coarse clipping of large list of evenly sized items.
+// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern.
+// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX
+void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.LogEnabled)
+    {
+        // If logging is active, do not perform any clipping
+        *out_items_display_start = 0;
+        *out_items_display_end = items_count;
+        return;
+    }
+    if (GetSkipItemForListClipping())
+    {
+        *out_items_display_start = *out_items_display_end = 0;
+        return;
+    }
+
+    // We create the union of the ClipRect and the NavScoringRect which at worst should be 1 page away from ClipRect
+    ImRect unclipped_rect = window->ClipRect;
+    if (g.NavMoveRequest)
+        unclipped_rect.Add(g.NavScoringRectScreen);
+
+    const ImVec2 pos = window->DC.CursorPos;
+    int start = (int)((unclipped_rect.Min.y - pos.y) / items_height);
+    int end = (int)((unclipped_rect.Max.y - pos.y) / items_height);
+
+    // When performing a navigation request, ensure we have one item extra in the direction we are moving to
+    if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Up)
+        start--;
+    if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Down)
+        end++;
+
+    start = ImClamp(start, 0, items_count);
+    end = ImClamp(end + 1, start, items_count);
+    *out_items_display_start = start;
+    *out_items_display_end = end;
+}
+
+static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height)
+{
+    // Set cursor position and a few other things so that SetScrollHereY() and Columns() can work when seeking cursor.
+    // FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue.
+    // The clipper should probably have a 4th step to display the last item in a regular manner.
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    float off_y = pos_y - window->DC.CursorPos.y;
+    window->DC.CursorPos.y = pos_y;
+    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, pos_y);
+    window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height;  // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage.
+    window->DC.PrevLineSize.y = (line_height - g.Style.ItemSpacing.y);      // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list.
+    if (ImGuiColumns* columns = window->DC.CurrentColumns)
+        columns->LineMinY = window->DC.CursorPos.y;                         // Setting this so that cell Y position are set properly // FIXME-TABLE
+    if (ImGuiTable* table = g.CurrentTable)
+    {
+        if (table->IsInsideRow)
+            ImGui::TableEndRow(table);
+        table->RowPosY2 = window->DC.CursorPos.y;
+        table->RowBgColorCounter += (int)((off_y / line_height) + 0.5f);
+    }
+}
+
+// Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1
+// Use case B: Begin() called from constructor with items_height>0
+// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style.
+void ImGuiListClipper::Begin(int count, float items_height)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    if (ImGuiTable* table = g.CurrentTable)
+        if (table->IsInsideRow)
+            ImGui::TableEndRow(table);
+
+    StartPosY = window->DC.CursorPos.y;
+    ItemsHeight = items_height;
+    ItemsCount = count;
+    StepNo = 0;
+    DisplayEnd = DisplayStart = -1;
+    if (ItemsHeight > 0.0f)
+    {
+        ImGui::CalcListClipping(ItemsCount, ItemsHeight, &DisplayStart, &DisplayEnd); // calculate how many to clip/display
+        if (DisplayStart > 0)
+            SetCursorPosYAndSetupDummyPrevLine(StartPosY + DisplayStart * ItemsHeight, ItemsHeight); // advance cursor
+        StepNo = 2;
+    }
+}
+
+void ImGuiListClipper::End()
+{
+    if (ItemsCount < 0)
+        return;
+    // In theory here we should assert that ImGui::GetCursorPosY() == StartPosY + DisplayEnd * ItemsHeight, but it feels saner to just seek at the end and not assert/crash the user.
+    if (ItemsCount < INT_MAX)
+        SetCursorPosYAndSetupDummyPrevLine(StartPosY + ItemsCount * ItemsHeight, ItemsHeight); // advance cursor
+    ItemsCount = -1;
+    StepNo = 3;
+}
+
+bool ImGuiListClipper::Step()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    ImGuiTable* table = g.CurrentTable;
+    if (table && table->IsInsideRow)
+        ImGui::TableEndRow(table);
+
+    if (ItemsCount == 0 || GetSkipItemForListClipping())
+    {
+        ItemsCount = -1;
+        return false;
+    }
+    if (StepNo == 0) // Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height.
+    {
+        DisplayStart = 0;
+        DisplayEnd = 1;
+        StartPosY = window->DC.CursorPos.y;
+        StepNo = 1;
+        return true;
+    }
+    if (StepNo == 1) // Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
+    {
+        if (ItemsCount == 1) { ItemsCount = -1; return false; }
+
+        float items_height;
+        if (table)
+        {
+            const float pos_y1 = table->RowPosY1;   // Using this instead of StartPosY to handle clipper straddling the frozen row
+            const float pos_y2 = table->RowPosY2;   // Using this instead of CursorPos.y to take account of tallest cell.
+            items_height = pos_y2 - pos_y1;
+            window->DC.CursorPos.y = pos_y2;
+            IM_ASSERT(items_height > 0.0f);   // If this triggers, it means Item 0 hasn't moved the cursor vertically
+        }
+        else
+        {
+            items_height = window->DC.CursorPos.y - StartPosY;
+            IM_ASSERT(items_height > 0.0f);         // If this triggers, it means Item 0 hasn't moved the cursor vertically
+        }
+        Begin(ItemsCount - 1, items_height);
+        DisplayStart++;
+        DisplayEnd++;
+        StepNo = 3;
+        return true;
+    }
+    if (StepNo == 2) // Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user still call Step(). Does nothing and switch to Step 3.
+    {
+        IM_ASSERT(DisplayStart >= 0 && DisplayEnd >= 0);
+        StepNo = 3;
+        return true;
+    }
+    if (StepNo == 3) // Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop.
+        End();
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] STYLING
+//-----------------------------------------------------------------------------
+
+ImGuiStyle& ImGui::GetStyle()
+{
+    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+    return GImGui->Style;
+}
+
+ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
+{
+    ImGuiStyle& style = GImGui->Style;
+    ImVec4 c = style.Colors[idx];
+    c.w *= style.Alpha * alpha_mul;
+    return ColorConvertFloat4ToU32(c);
+}
+
+ImU32 ImGui::GetColorU32(const ImVec4& col)
+{
+    ImGuiStyle& style = GImGui->Style;
+    ImVec4 c = col;
+    c.w *= style.Alpha;
+    return ColorConvertFloat4ToU32(c);
+}
+
+const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
+{
+    ImGuiStyle& style = GImGui->Style;
+    return style.Colors[idx];
+}
+
+ImU32 ImGui::GetColorU32(ImU32 col)
+{
+    ImGuiStyle& style = GImGui->Style;
+    if (style.Alpha >= 1.0f)
+        return col;
+    ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
+    a = (ImU32)(a * style.Alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
+    return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
+}
+
+// FIXME: This may incur a round-trip (if the end user got their data from a float4) but eventually we aim to store the in-flight colors as ImU32
+void ImGui::PushStyleColor(ImGuiCol idx, ImU32 col)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiColorMod backup;
+    backup.Col = idx;
+    backup.BackupValue = g.Style.Colors[idx];
+    g.ColorModifiers.push_back(backup);
+    g.Style.Colors[idx] = ColorConvertU32ToFloat4(col);
+}
+
+void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiColorMod backup;
+    backup.Col = idx;
+    backup.BackupValue = g.Style.Colors[idx];
+    g.ColorModifiers.push_back(backup);
+    g.Style.Colors[idx] = col;
+}
+
+void ImGui::PopStyleColor(int count)
+{
+    ImGuiContext& g = *GImGui;
+    while (count > 0)
+    {
+        ImGuiColorMod& backup = g.ColorModifiers.back();
+        g.Style.Colors[backup.Col] = backup.BackupValue;
+        g.ColorModifiers.pop_back();
+        count--;
+    }
+}
+
+struct ImGuiStyleVarInfo
+{
+    ImGuiDataType   Type;
+    ImU32           Count;
+    ImU32           Offset;
+    void*           GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
+};
+
+static const ImGuiStyleVarInfo GStyleVarInfo[] =
+{
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) },               // ImGuiStyleVar_Alpha
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) },       // ImGuiStyleVar_WindowPadding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) },      // ImGuiStyleVar_WindowRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) },    // ImGuiStyleVar_WindowBorderSize
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) },       // ImGuiStyleVar_WindowMinSize
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) },    // ImGuiStyleVar_WindowTitleAlign
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) },       // ImGuiStyleVar_ChildRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) },     // ImGuiStyleVar_ChildBorderSize
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) },       // ImGuiStyleVar_PopupRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) },     // ImGuiStyleVar_PopupBorderSize
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) },        // ImGuiStyleVar_FramePadding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) },       // ImGuiStyleVar_FrameRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) },     // ImGuiStyleVar_FrameBorderSize
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) },         // ImGuiStyleVar_ItemSpacing
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) },    // ImGuiStyleVar_ItemInnerSpacing
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) },       // ImGuiStyleVar_IndentSpacing
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, CellPadding) },         // ImGuiStyleVar_CellPadding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) },       // ImGuiStyleVar_ScrollbarSize
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) },   // ImGuiStyleVar_ScrollbarRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },         // ImGuiStyleVar_GrabMinSize
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) },        // ImGuiStyleVar_GrabRounding
+    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) },         // ImGuiStyleVar_TabRounding
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },     // ImGuiStyleVar_ButtonTextAlign
+    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
+};
+
+static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
+{
+    IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT);
+    IM_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT);
+    return &GStyleVarInfo[idx];
+}
+
+void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
+{
+    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
+    if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1)
+    {
+        ImGuiContext& g = *GImGui;
+        float* pvar = (float*)var_info->GetVarPtr(&g.Style);
+        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
+        *pvar = val;
+        return;
+    }
+    IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");
+}
+
+void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
+{
+    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
+    if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)
+    {
+        ImGuiContext& g = *GImGui;
+        ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
+        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
+        *pvar = val;
+        return;
+    }
+    IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");
+}
+
+void ImGui::PopStyleVar(int count)
+{
+    ImGuiContext& g = *GImGui;
+    while (count > 0)
+    {
+        // We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it.
+        ImGuiStyleMod& backup = g.StyleModifiers.back();
+        const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
+        void* data = info->GetVarPtr(&g.Style);
+        if (info->Type == ImGuiDataType_Float && info->Count == 1)      { ((float*)data)[0] = backup.BackupFloat[0]; }
+        else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; }
+        g.StyleModifiers.pop_back();
+        count--;
+    }
+}
+
+const char* ImGui::GetStyleColorName(ImGuiCol idx)
+{
+    // Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1";
+    switch (idx)
+    {
+    case ImGuiCol_Text: return "Text";
+    case ImGuiCol_TextDisabled: return "TextDisabled";
+    case ImGuiCol_WindowBg: return "WindowBg";
+    case ImGuiCol_ChildBg: return "ChildBg";
+    case ImGuiCol_PopupBg: return "PopupBg";
+    case ImGuiCol_Border: return "Border";
+    case ImGuiCol_BorderShadow: return "BorderShadow";
+    case ImGuiCol_FrameBg: return "FrameBg";
+    case ImGuiCol_FrameBgHovered: return "FrameBgHovered";
+    case ImGuiCol_FrameBgActive: return "FrameBgActive";
+    case ImGuiCol_TitleBg: return "TitleBg";
+    case ImGuiCol_TitleBgActive: return "TitleBgActive";
+    case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
+    case ImGuiCol_MenuBarBg: return "MenuBarBg";
+    case ImGuiCol_ScrollbarBg: return "ScrollbarBg";
+    case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab";
+    case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered";
+    case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive";
+    case ImGuiCol_CheckMark: return "CheckMark";
+    case ImGuiCol_SliderGrab: return "SliderGrab";
+    case ImGuiCol_SliderGrabActive: return "SliderGrabActive";
+    case ImGuiCol_Button: return "Button";
+    case ImGuiCol_ButtonHovered: return "ButtonHovered";
+    case ImGuiCol_ButtonActive: return "ButtonActive";
+    case ImGuiCol_Header: return "Header";
+    case ImGuiCol_HeaderHovered: return "HeaderHovered";
+    case ImGuiCol_HeaderActive: return "HeaderActive";
+    case ImGuiCol_Separator: return "Separator";
+    case ImGuiCol_SeparatorHovered: return "SeparatorHovered";
+    case ImGuiCol_SeparatorActive: return "SeparatorActive";
+    case ImGuiCol_ResizeGrip: return "ResizeGrip";
+    case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered";
+    case ImGuiCol_ResizeGripActive: return "ResizeGripActive";
+    case ImGuiCol_Tab: return "Tab";
+    case ImGuiCol_TabHovered: return "TabHovered";
+    case ImGuiCol_TabActive: return "TabActive";
+    case ImGuiCol_TabUnfocused: return "TabUnfocused";
+    case ImGuiCol_TabUnfocusedActive: return "TabUnfocusedActive";
+    case ImGuiCol_PlotLines: return "PlotLines";
+    case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered";
+    case ImGuiCol_PlotHistogram: return "PlotHistogram";
+    case ImGuiCol_PlotHistogramHovered: return "PlotHistogramHovered";
+    case ImGuiCol_TableHeaderBg: return "TableHeaderBg";
+    case ImGuiCol_TableBorderStrong: return "TableBorderStrong";
+    case ImGuiCol_TableBorderLight: return "TableBorderLight";
+    case ImGuiCol_TableRowBg: return "TableRowBg";
+    case ImGuiCol_TableRowBgAlt: return "TableRowBgAlt";
+    case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
+    case ImGuiCol_DragDropTarget: return "DragDropTarget";
+    case ImGuiCol_NavHighlight: return "NavHighlight";
+    case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight";
+    case ImGuiCol_NavWindowingDimBg: return "NavWindowingDimBg";
+    case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg";
+    }
+    IM_ASSERT(0);
+    return "Unknown";
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] RENDER HELPERS
+// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change,
+// we need a nicer separation between low-level functions and high-level functions relying on the ImGui context.
+// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: context.
+//-----------------------------------------------------------------------------
+
+const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end)
+{
+    const char* text_display_end = text;
+    if (!text_end)
+        text_end = (const char*)-1;
+
+    while (text_display_end < text_end && *text_display_end != '\0' && (text_display_end[0] != '#' || text_display_end[1] != '#'))
+        text_display_end++;
+    return text_display_end;
+}
+
+// Internal ImGui functions to render text
+// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
+void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    // Hide anything after a '##' string
+    const char* text_display_end;
+    if (hide_text_after_hash)
+    {
+        text_display_end = FindRenderedTextEnd(text, text_end);
+    }
+    else
+    {
+        if (!text_end)
+            text_end = text + strlen(text); // FIXME-OPT
+        text_display_end = text_end;
+    }
+
+    if (text != text_display_end)
+    {
+        window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end);
+        if (g.LogEnabled)
+            LogRenderedText(&pos, text, text_display_end);
+    }
+}
+
+void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    if (!text_end)
+        text_end = text + strlen(text); // FIXME-OPT
+
+    if (text != text_end)
+    {
+        window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width);
+        if (g.LogEnabled)
+            LogRenderedText(&pos, text, text_end);
+    }
+}
+
+// Default clip_rect uses (pos_min,pos_max)
+// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges)
+void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+{
+    // Perform CPU side clipping for single clipped element to avoid using scissor state
+    ImVec2 pos = pos_min;
+    const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f);
+
+    const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min;
+    const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max;
+    bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y);
+    if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min
+        need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);
+
+    // Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment.
+    if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x);
+    if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y);
+
+    // Render
+    if (need_clipping)
+    {
+        ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y);
+        draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
+    }
+    else
+    {
+        draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
+    }
+}
+
+void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+{
+    // Hide anything after a '##' string
+    const char* text_display_end = FindRenderedTextEnd(text, text_end);
+    const int text_len = (int)(text_display_end - text);
+    if (text_len == 0)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect);
+    if (g.LogEnabled)
+        LogRenderedText(&pos_min, text, text_display_end);
+}
+
+
+// Another overly complex function until we reorganize everything into a nice all-in-one helper.
+// This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define _where_ the ellipsis is, from actual clipping of text and limit of the ellipsis display.
+// This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move.
+void ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known)
+{
+    ImGuiContext& g = *GImGui;
+    if (text_end_full == NULL)
+        text_end_full = FindRenderedTextEnd(text);
+    const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f);
+
+    //draw_list->AddLine(ImVec2(pos_max.x, pos_min.y - 4), ImVec2(pos_max.x, pos_max.y + 4), IM_COL32(0, 0, 255, 255));
+    //draw_list->AddLine(ImVec2(ellipsis_max_x, pos_min.y-2), ImVec2(ellipsis_max_x, pos_max.y+2), IM_COL32(0, 255, 0, 255));
+    //draw_list->AddLine(ImVec2(clip_max_x, pos_min.y), ImVec2(clip_max_x, pos_max.y), IM_COL32(255, 0, 0, 255));
+    // FIXME: We could technically remove (last_glyph->AdvanceX - last_glyph->X1) from text_size.x here and save a few pixels.
+    if (text_size.x > pos_max.x - pos_min.x)
+    {
+        // Hello wo...
+        // |       |   |
+        // min   max   ellipsis_max
+        //          <-> this is generally some padding value
+
+        const ImFont* font = draw_list->_Data->Font;
+        const float font_size = draw_list->_Data->FontSize;
+        const char* text_end_ellipsis = NULL;
+
+        ImWchar ellipsis_char = font->EllipsisChar;
+        int ellipsis_char_count = 1;
+        if (ellipsis_char == (ImWchar)-1)
+        {
+            ellipsis_char = (ImWchar)'.';
+            ellipsis_char_count = 3;
+        }
+        const ImFontGlyph* glyph = font->FindGlyph(ellipsis_char);
+
+        float ellipsis_glyph_width = glyph->X1;                 // Width of the glyph with no padding on either side
+        float ellipsis_total_width = ellipsis_glyph_width;      // Full width of entire ellipsis
+
+        if (ellipsis_char_count > 1)
+        {
+            // Full ellipsis size without free spacing after it.
+            const float spacing_between_dots = 1.0f * (draw_list->_Data->FontSize / font->FontSize);
+            ellipsis_glyph_width = glyph->X1 - glyph->X0 + spacing_between_dots;
+            ellipsis_total_width = ellipsis_glyph_width * (float)ellipsis_char_count - spacing_between_dots;
+        }
+
+        // We can now claim the space between pos_max.x and ellipsis_max.x
+        const float text_avail_width = ImMax((ImMax(pos_max.x, ellipsis_max_x) - ellipsis_total_width) - pos_min.x, 1.0f);
+        float text_size_clipped_x = font->CalcTextSizeA(font_size, text_avail_width, 0.0f, text, text_end_full, &text_end_ellipsis).x;
+        if (text == text_end_ellipsis && text_end_ellipsis < text_end_full)
+        {
+            // Always display at least 1 character if there's no room for character + ellipsis
+            text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full);
+            text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x;
+        }
+        while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1]))
+        {
+            // Trim trailing space before ellipsis (FIXME: Supporting non-ascii blanks would be nice, for this we need a function to backtrack in UTF-8 text)
+            text_end_ellipsis--;
+            text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte
+        }
+
+        // Render text, render ellipsis
+        RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f));
+        float ellipsis_x = pos_min.x + text_size_clipped_x;
+        if (ellipsis_x + ellipsis_total_width <= ellipsis_max_x)
+            for (int i = 0; i < ellipsis_char_count; i++)
+            {
+                font->RenderChar(draw_list, font_size, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_char);
+                ellipsis_x += ellipsis_glyph_width;
+            }
+    }
+    else
+    {
+        RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f));
+    }
+
+    if (g.LogEnabled)
+        LogRenderedText(&pos_min, text, text_end_full);
+}
+
+// Render a rectangle shaped with optional rounding and borders
+void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding);
+    const float border_size = g.Style.FrameBorderSize;
+    if (border && border_size > 0.0f)
+    {
+        window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
+        window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
+    }
+}
+
+void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    const float border_size = g.Style.FrameBorderSize;
+    if (border_size > 0.0f)
+    {
+        window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
+        window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
+    }
+}
+
+void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    if (id != g.NavId)
+        return;
+    if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysDraw))
+        return;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->DC.NavHideHighlightOneFrame)
+        return;
+
+    float rounding = (flags & ImGuiNavHighlightFlags_NoRounding) ? 0.0f : g.Style.FrameRounding;
+    ImRect display_rect = bb;
+    display_rect.ClipWith(window->ClipRect);
+    if (flags & ImGuiNavHighlightFlags_TypeDefault)
+    {
+        const float THICKNESS = 2.0f;
+        const float DISTANCE = 3.0f + THICKNESS * 0.5f;
+        display_rect.Expand(ImVec2(DISTANCE,DISTANCE));
+        bool fully_visible = window->ClipRect.Contains(display_rect);
+        if (!fully_visible)
+            window->DrawList->PushClipRect(display_rect.Min, display_rect.Max);
+        window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, ImDrawCornerFlags_All, THICKNESS);
+        if (!fully_visible)
+            window->DrawList->PopClipRect();
+    }
+    if (flags & ImGuiNavHighlightFlags_TypeThin)
+    {
+        window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), rounding, ~0, 1.0f);
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
+//-----------------------------------------------------------------------------
+
+// ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods
+ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
+    : DrawListInst(&context->DrawListSharedData)
+{
+    Name = ImStrdup(name);
+    ID = ImHashStr(name);
+    IDStack.push_back(ID);
+    Flags = ImGuiWindowFlags_None;
+    Pos = ImVec2(0.0f, 0.0f);
+    Size = SizeFull = ImVec2(0.0f, 0.0f);
+    ContentSize = ContentSizeExplicit = ImVec2(0.0f, 0.0f);
+    WindowPadding = ImVec2(0.0f, 0.0f);
+    WindowRounding = 0.0f;
+    WindowBorderSize = 0.0f;
+    NameBufLen = (int)strlen(name) + 1;
+    MoveId = GetID("#MOVE");
+    ChildId = 0;
+    Scroll = ImVec2(0.0f, 0.0f);
+    ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
+    ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f);
+    ScrollbarSizes = ImVec2(0.0f, 0.0f);
+    ScrollbarX = ScrollbarY = false;
+    Active = WasActive = false;
+    WriteAccessed = false;
+    Collapsed = false;
+    WantCollapseToggle = false;
+    SkipItems = false;
+    Appearing = false;
+    Hidden = false;
+    IsFallbackWindow = false;
+    HasCloseButton = false;
+    ResizeBorderHeld = -1;
+    BeginCount = 0;
+    BeginOrderWithinParent = -1;
+    BeginOrderWithinContext = -1;
+    PopupId = 0;
+    AutoFitFramesX = AutoFitFramesY = -1;
+    AutoFitChildAxises = 0x00;
+    AutoFitOnlyGrows = false;
+    AutoPosLastDirection = ImGuiDir_None;
+    HiddenFramesCanSkipItems = HiddenFramesCannotSkipItems = 0;
+    SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing;
+    SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
+
+    InnerRect = ImRect(0.0f, 0.0f, 0.0f, 0.0f); // Clear so the InnerRect.GetSize() code in Begin() doesn't lead to overflow even if the result isn't used.
+
+    LastFrameActive = -1;
+    LastTimeActive = -1.0f;
+    ItemWidthDefault = 0.0f;
+    FontWindowScale = 1.0f;
+    SettingsOffset = -1;
+
+    DrawList = &DrawListInst;
+    DrawList->_OwnerName = Name;
+    ParentWindow = NULL;
+    RootWindow = NULL;
+    RootWindowForTitleBarHighlight = NULL;
+    RootWindowForNav = NULL;
+
+    NavLastIds[0] = NavLastIds[1] = 0;
+    NavRectRel[0] = NavRectRel[1] = ImRect();
+    NavLastChildNavWindow = NULL;
+
+    MemoryCompacted = false;
+    MemoryDrawListIdxCapacity = MemoryDrawListVtxCapacity = 0;
+}
+
+ImGuiWindow::~ImGuiWindow()
+{
+    IM_ASSERT(DrawList == &DrawListInst);
+    IM_DELETE(Name);
+    for (int i = 0; i != ColumnsStorage.Size; i++)
+        ColumnsStorage[i].~ImGuiColumns();
+}
+
+ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
+{
+    ImGuiID seed = IDStack.back();
+    ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
+    ImGui::KeepAliveID(id);
+    return id;
+}
+
+ImGuiID ImGuiWindow::GetID(const void* ptr)
+{
+    ImGuiID seed = IDStack.back();
+    ImGuiID id = ImHashData(&ptr, sizeof(void*), seed);
+    ImGui::KeepAliveID(id);
+    return id;
+}
+
+ImGuiID ImGuiWindow::GetID(int n)
+{
+    ImGuiID seed = IDStack.back();
+    ImGuiID id = ImHashData(&n, sizeof(n), seed);
+    ImGui::KeepAliveID(id);
+    return id;
+}
+
+ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
+{
+    ImGuiID seed = IDStack.back();
+    return ImHashStr(str, str_end ? (str_end - str) : 0, seed);
+}
+
+ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr)
+{
+    ImGuiID seed = IDStack.back();
+    return ImHashData(&ptr, sizeof(void*), seed);
+}
+
+ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n)
+{
+    ImGuiID seed = IDStack.back();
+    return ImHashData(&n, sizeof(n), seed);
+}
+
+// This is only used in rare/specific situations to manufacture an ID out of nowhere.
+ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
+{
+    ImGuiID seed = IDStack.back();
+    const int r_rel[4] = { (int)(r_abs.Min.x - Pos.x), (int)(r_abs.Min.y - Pos.y), (int)(r_abs.Max.x - Pos.x), (int)(r_abs.Max.y - Pos.y) };
+    ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed);
+    ImGui::KeepAliveID(id);
+    return id;
+}
+
+static void SetCurrentWindow(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    g.CurrentWindow = window;
+    if (window)
+        g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
+}
+
+// Free up/compact internal window buffers, we can use this when a window becomes unused.
+// This is currently unused by the library, but you may call this yourself for easy GC.
+// Not freed:
+// - ImGuiWindow, ImGuiWindowSettings, Name
+// - StateStorage, ColumnsStorage (may hold useful data)
+// This should have no noticeable visual effect. When the window reappear however, expect new allocation/buffer growth/copy cost.
+void ImGui::GcCompactTransientWindowBuffers(ImGuiWindow* window)
+{
+    window->MemoryCompacted = true;
+    window->MemoryDrawListIdxCapacity = window->DrawList->IdxBuffer.Capacity;
+    window->MemoryDrawListVtxCapacity = window->DrawList->VtxBuffer.Capacity;
+    window->IDStack.clear();
+    window->DrawList->ClearFreeMemory();
+    window->DC.ChildWindows.clear();
+    window->DC.ItemFlagsStack.clear();
+    window->DC.ItemWidthStack.clear();
+    window->DC.TextWrapPosStack.clear();
+    window->DC.GroupStack.clear();
+}
+
+void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window)
+{
+    // We stored capacity of the ImDrawList buffer to reduce growth-caused allocation/copy when awakening.
+    // The other buffers tends to amortize much faster.
+    window->MemoryCompacted = false;
+    window->DrawList->IdxBuffer.reserve(window->MemoryDrawListIdxCapacity);
+    window->DrawList->VtxBuffer.reserve(window->MemoryDrawListVtxCapacity);
+    window->MemoryDrawListIdxCapacity = window->MemoryDrawListVtxCapacity = 0;
+}
+
+void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    g.ActiveIdIsJustActivated = (g.ActiveId != id);
+    if (g.ActiveIdIsJustActivated)
+    {
+        g.ActiveIdTimer = 0.0f;
+        g.ActiveIdHasBeenPressedBefore = false;
+        g.ActiveIdHasBeenEditedBefore = false;
+        if (id != 0)
+        {
+            g.LastActiveId = id;
+            g.LastActiveIdTimer = 0.0f;
+        }
+    }
+    g.ActiveId = id;
+    g.ActiveIdAllowOverlap = false;
+    g.ActiveIdWindow = window;
+    g.ActiveIdHasBeenEditedThisFrame = false;
+    if (id)
+    {
+        g.ActiveIdIsAlive = id;
+        g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavJustTabbedId == id || g.NavJustMovedToId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
+    }
+
+    // Clear declaration of inputs claimed by the widget
+    // (Please note that this is WIP and not all keys/inputs are thoroughly declared by all widgets yet)
+    g.ActiveIdUsingNavDirMask = 0x00;
+    g.ActiveIdUsingNavInputMask = 0x00;
+    g.ActiveIdUsingKeyInputMask = 0x00;
+}
+
+void ImGui::ClearActiveID()
+{
+    SetActiveID(0, NULL);
+}
+
+void ImGui::SetHoveredID(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    g.HoveredId = id;
+    g.HoveredIdAllowOverlap = false;
+    if (id != 0 && g.HoveredIdPreviousFrame != id)
+        g.HoveredIdTimer = g.HoveredIdNotActiveTimer = 0.0f;
+}
+
+ImGuiID ImGui::GetHoveredID()
+{
+    ImGuiContext& g = *GImGui;
+    return g.HoveredId ? g.HoveredId : g.HoveredIdPreviousFrame;
+}
+
+void ImGui::KeepAliveID(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.ActiveId == id)
+        g.ActiveIdIsAlive = id;
+    if (g.ActiveIdPreviousFrame == id)
+        g.ActiveIdPreviousFrameIsAlive = true;
+}
+
+void ImGui::MarkItemEdited(ImGuiID id)
+{
+    // This marking is solely to be able to provide info for IsItemDeactivatedAfterEdit().
+    // ActiveId might have been released by the time we call this (as in the typical press/release button behavior) but still need need to fill the data.
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive);
+    IM_UNUSED(id); // Avoid unused variable warnings when asserts are compiled out.
+    //IM_ASSERT(g.CurrentWindow->DC.LastItemId == id);
+    g.ActiveIdHasBeenEditedThisFrame = true;
+    g.ActiveIdHasBeenEditedBefore = true;
+    g.CurrentWindow->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
+}
+
+static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
+{
+    // An active popup disable hovering on other windows (apart from its own children)
+    // FIXME-OPT: This could be cached/stored within the window.
+    ImGuiContext& g = *GImGui;
+    if (g.NavWindow)
+        if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
+            if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
+            {
+                // For the purpose of those flags we differentiate "standard popup" from "modal popup"
+                // NB: The order of those two tests is important because Modal windows are also Popups.
+                if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
+                    return false;
+                if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+                    return false;
+            }
+    return true;
+}
+
+// This is roughly matching the behavior of internal-facing ItemHoverable()
+// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered()
+// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
+bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.NavDisableMouseHover && !g.NavDisableHighlight)
+        return IsItemFocused();
+
+    // Test for bounding box overlap, as updated as ItemAdd()
+    if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect))
+        return false;
+    IM_ASSERT((flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows)) == 0);   // Flags not supported by this function
+
+    // Test if we are hovering the right window (our window could be behind another window)
+    // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable to use IsItemHovered() after EndChild() itself.
+    // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while.
+    //if (g.HoveredWindow != window)
+    //    return false;
+    if (g.HoveredRootWindow != window->RootWindow && !(flags & ImGuiHoveredFlags_AllowWhenOverlapped))
+        return false;
+
+    // Test if another item is active (e.g. being dragged)
+    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+        if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
+            return false;
+
+    // Test if interactions on this window are blocked by an active popup or modal.
+    // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here.
+    if (!IsWindowContentHoverable(window, flags))
+        return false;
+
+    // Test if the item is disabled
+    if ((window->DC.ItemFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled))
+        return false;
+
+    // Special handling for the dummy item after Begin() which represent the title bar or tab.
+    // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case.
+    if (window->DC.LastItemId == window->MoveId && window->WriteAccessed)
+        return false;
+    return true;
+}
+
+// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
+bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap)
+        return false;
+
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.HoveredWindow != window)
+        return false;
+    if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap)
+        return false;
+    if (!IsMouseHoveringRect(bb.Min, bb.Max))
+        return false;
+    if (g.NavDisableMouseHover || !IsWindowContentHoverable(window, ImGuiHoveredFlags_None))
+        return false;
+    if (window->DC.ItemFlags & ImGuiItemFlags_Disabled)
+        return false;
+
+    SetHoveredID(id);
+
+    // [DEBUG] Item Picker tool!
+    // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making
+    // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered
+    // items if we perform the test in ItemAdd(), but that would incur a small runtime cost.
+    // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd().
+    if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id)
+        GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255));
+    if (g.DebugItemPickerBreakId == id)
+        IM_DEBUG_BREAK();
+
+    return true;
+}
+
+bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (!bb.Overlaps(window->ClipRect))
+        if (id == 0 || id != g.ActiveId)
+            if (clip_even_when_logged || !g.LogEnabled)
+                return true;
+    return false;
+}
+
+// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out.
+bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+
+    // Increment counters
+    const bool is_tab_stop = (window->DC.ItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
+    window->DC.FocusCounterRegular++;
+    if (is_tab_stop)
+        window->DC.FocusCounterTabStop++;
+
+    // Process TAB/Shift-TAB to tab *OUT* of the currently focused item.
+    // (Note that we can always TAB out of a widget that doesn't allow tabbing in)
+    if (g.ActiveId == id && g.FocusTabPressed && !IsActiveIdUsingKey(ImGuiKey_Tab) && g.FocusRequestNextWindow == NULL)
+    {
+        g.FocusRequestNextWindow = window;
+        g.FocusRequestNextCounterTabStop = window->DC.FocusCounterTabStop + (g.IO.KeyShift ? (is_tab_stop ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items.
+    }
+
+    // Handle focus requests
+    if (g.FocusRequestCurrWindow == window)
+    {
+        if (window->DC.FocusCounterRegular == g.FocusRequestCurrCounterRegular)
+            return true;
+        if (is_tab_stop && window->DC.FocusCounterTabStop == g.FocusRequestCurrCounterTabStop)
+        {
+            g.NavJustTabbedId = id;
+            return true;
+        }
+
+        // If another item is about to be focused, we clear our own active id
+        if (g.ActiveId == id)
+            ClearActiveID();
+    }
+
+    return false;
+}
+
+void ImGui::FocusableItemUnregister(ImGuiWindow* window)
+{
+    window->DC.FocusCounterRegular--;
+    window->DC.FocusCounterTabStop--;
+}
+
+float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
+{
+    if (wrap_pos_x < 0.0f)
+        return 0.0f;
+
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    if (wrap_pos_x == 0.0f)
+        wrap_pos_x = window->WorkRect.Max.x;
+    else if (wrap_pos_x > 0.0f)
+        wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space
+
+    return ImMax(wrap_pos_x - pos.x, 1.0f);
+}
+
+// IM_ALLOC() == ImGui::MemAlloc()
+void* ImGui::MemAlloc(size_t size)
+{
+    if (ImGuiContext* ctx = GImGui)
+        ctx->IO.MetricsActiveAllocations++;
+    return GImAllocatorAllocFunc(size, GImAllocatorUserData);
+}
+
+// IM_FREE() == ImGui::MemFree()
+void ImGui::MemFree(void* ptr)
+{
+    if (ptr)
+        if (ImGuiContext* ctx = GImGui)
+            ctx->IO.MetricsActiveAllocations--;
+    return GImAllocatorFreeFunc(ptr, GImAllocatorUserData);
+}
+
+const char* ImGui::GetClipboardText()
+{
+    ImGuiContext& g = *GImGui;
+    return g.IO.GetClipboardTextFn ? g.IO.GetClipboardTextFn(g.IO.ClipboardUserData) : "";
+}
+
+void ImGui::SetClipboardText(const char* text)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.IO.SetClipboardTextFn)
+        g.IO.SetClipboardTextFn(g.IO.ClipboardUserData, text);
+}
+
+const char* ImGui::GetVersion()
+{
+    return IMGUI_VERSION;
+}
+
+// Internal state access - if you want to share Dear ImGui state between modules (e.g. DLL) or allocate it yourself
+// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module
+ImGuiContext* ImGui::GetCurrentContext()
+{
+    return GImGui;
+}
+
+void ImGui::SetCurrentContext(ImGuiContext* ctx)
+{
+#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC
+    IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this.
+#else
+    GImGui = ctx;
+#endif
+}
+
+void ImGui::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data)
+{
+    GImAllocatorAllocFunc = alloc_func;
+    GImAllocatorFreeFunc = free_func;
+    GImAllocatorUserData = user_data;
+}
+
+ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
+{
+    ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas);
+    if (GImGui == NULL)
+        SetCurrentContext(ctx);
+    Initialize(ctx);
+    return ctx;
+}
+
+void ImGui::DestroyContext(ImGuiContext* ctx)
+{
+    if (ctx == NULL)
+        ctx = GImGui;
+    Shutdown(ctx);
+    if (GImGui == ctx)
+        SetCurrentContext(NULL);
+    IM_DELETE(ctx);
+}
+
+ImGuiIO& ImGui::GetIO()
+{
+    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+    return GImGui->IO;
+}
+
+// Same value as passed to the old io.RenderDrawListsFn function. Valid after Render() and until the next call to NewFrame()
+ImDrawData* ImGui::GetDrawData()
+{
+    ImGuiContext& g = *GImGui;
+    return g.DrawData.Valid ? &g.DrawData : NULL;
+}
+
+double ImGui::GetTime()
+{
+    return GImGui->Time;
+}
+
+int ImGui::GetFrameCount()
+{
+    return GImGui->FrameCount;
+}
+
+ImDrawList* ImGui::GetBackgroundDrawList()
+{
+    return &GImGui->BackgroundDrawList;
+}
+
+ImDrawList* ImGui::GetForegroundDrawList()
+{
+    return &GImGui->ForegroundDrawList;
+}
+
+ImDrawListSharedData* ImGui::GetDrawListSharedData()
+{
+    return &GImGui->DrawListSharedData;
+}
+
+void ImGui::StartMouseMovingWindow(ImGuiWindow* window)
+{
+    // Set ActiveId even if the _NoMove flag is set. Without it, dragging away from a window with _NoMove would activate hover on other windows.
+    // We _also_ call this when clicking in a window empty space when io.ConfigWindowsMoveFromTitleBarOnly is set, but clear g.MovingWindow afterward.
+    // This is because we want ActiveId to be set even when the window is not permitted to move.
+    ImGuiContext& g = *GImGui;
+    FocusWindow(window);
+    SetActiveID(window->MoveId, window);
+    g.NavDisableHighlight = true;
+    g.ActiveIdClickOffset = g.IO.MousePos - window->RootWindow->Pos;
+
+    bool can_move_window = true;
+    if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindow->Flags & ImGuiWindowFlags_NoMove))
+        can_move_window = false;
+    if (can_move_window)
+        g.MovingWindow = window;
+}
+
+// Handle mouse moving window
+// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing()
+// FIXME: We don't have strong guarantee that g.MovingWindow stay synched with g.ActiveId == g.MovingWindow->MoveId.
+// This is currently enforced by the fact that BeginDragDropSource() is setting all g.ActiveIdUsingXXXX flags to inhibit navigation inputs,
+// but if we should more thoroughly test cases where g.ActiveId or g.MovingWindow gets changed and not the other.
+void ImGui::UpdateMouseMovingWindowNewFrame()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.MovingWindow != NULL)
+    {
+        // We actually want to move the root window. g.MovingWindow == window we clicked on (could be a child window).
+        // We track it to preserve Focus and so that generally ActiveIdWindow == MovingWindow and ActiveId == MovingWindow->MoveId for consistency.
+        KeepAliveID(g.ActiveId);
+        IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow);
+        ImGuiWindow* moving_window = g.MovingWindow->RootWindow;
+        if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos))
+        {
+            ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset;
+            if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y)
+            {
+                MarkIniSettingsDirty(moving_window);
+                SetWindowPos(moving_window, pos, ImGuiCond_Always);
+            }
+            FocusWindow(g.MovingWindow);
+        }
+        else
+        {
+            ClearActiveID();
+            g.MovingWindow = NULL;
+        }
+    }
+    else
+    {
+        // When clicking/dragging from a window that has the _NoMove flag, we still set the ActiveId in order to prevent hovering others.
+        if (g.ActiveIdWindow && g.ActiveIdWindow->MoveId == g.ActiveId)
+        {
+            KeepAliveID(g.ActiveId);
+            if (!g.IO.MouseDown[0])
+                ClearActiveID();
+        }
+    }
+}
+
+// Initiate moving window when clicking on empty space or title bar.
+// Handle left-click and right-click focus.
+void ImGui::UpdateMouseMovingWindowEndFrame()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.ActiveId != 0 || g.HoveredId != 0)
+        return;
+
+    // Unless we just made a window/popup appear
+    if (g.NavWindow && g.NavWindow->Appearing)
+        return;
+
+    // Click to focus window and start moving (after we're done with all our widgets)
+    if (g.IO.MouseClicked[0])
+    {
+        if (g.HoveredRootWindow != NULL)
+        {
+            StartMouseMovingWindow(g.HoveredWindow);
+            if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoTitleBar))
+                if (!g.HoveredRootWindow->TitleBarRect().Contains(g.IO.MouseClickedPos[0]))
+                    g.MovingWindow = NULL;
+        }
+        else if (g.NavWindow != NULL && GetTopMostPopupModal() == NULL)
+        {
+            // Clicking on void disable focus
+            FocusWindow(NULL);
+        }
+    }
+
+    // With right mouse button we close popups without changing focus based on where the mouse is aimed
+    // Instead, focus will be restored to the window under the bottom-most closed popup.
+    // (The left mouse button path calls FocusWindow on the hovered window, which will lead NewFrame->ClosePopupsOverWindow to trigger)
+    if (g.IO.MouseClicked[1])
+    {
+        // Find the top-most window between HoveredWindow and the top-most Modal Window.
+        // This is where we can trim the popup stack.
+        ImGuiWindow* modal = GetTopMostPopupModal();
+        bool hovered_window_above_modal = false;
+        if (modal == NULL)
+            hovered_window_above_modal = true;
+        for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--)
+        {
+            ImGuiWindow* window = g.Windows[i];
+            if (window == modal)
+                break;
+            if (window == g.HoveredWindow)
+                hovered_window_above_modal = true;
+        }
+        ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal, true);
+    }
+}
+
+static bool IsWindowActiveAndVisible(ImGuiWindow* window)
+{
+    return (window->Active) && (!window->Hidden);
+}
+
+static void ImGui::UpdateMouseInputs()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well)
+    if (IsMousePosValid(&g.IO.MousePos))
+        g.IO.MousePos = g.LastValidMousePos = ImFloor(g.IO.MousePos);
+
+    // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
+    if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev))
+        g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev;
+    else
+        g.IO.MouseDelta = ImVec2(0.0f, 0.0f);
+    if (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f)
+        g.NavDisableMouseHover = false;
+
+    g.IO.MousePosPrev = g.IO.MousePos;
+    for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++)
+    {
+        g.IO.MouseClicked[i] = g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] < 0.0f;
+        g.IO.MouseReleased[i] = !g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] >= 0.0f;
+        g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i];
+        g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f;
+        g.IO.MouseDoubleClicked[i] = false;
+        if (g.IO.MouseClicked[i])
+        {
+            if ((float)(g.Time - g.IO.MouseClickedTime[i]) < g.IO.MouseDoubleClickTime)
+            {
+                ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f);
+                if (ImLengthSqr(delta_from_click_pos) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist)
+                    g.IO.MouseDoubleClicked[i] = true;
+                g.IO.MouseClickedTime[i] = -DBL_MAX;    // so the third click isn't turned into a double-click
+            }
+            else
+            {
+                g.IO.MouseClickedTime[i] = g.Time;
+            }
+            g.IO.MouseClickedPos[i] = g.IO.MousePos;
+            g.IO.MouseDownWasDoubleClick[i] = g.IO.MouseDoubleClicked[i];
+            g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f);
+            g.IO.MouseDragMaxDistanceSqr[i] = 0.0f;
+        }
+        else if (g.IO.MouseDown[i])
+        {
+            // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold
+            ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f);
+            g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos));
+            g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x);
+            g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y);
+        }
+        if (!g.IO.MouseDown[i] && !g.IO.MouseReleased[i])
+            g.IO.MouseDownWasDoubleClick[i] = false;
+        if (g.IO.MouseClicked[i]) // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation
+            g.NavDisableMouseHover = false;
+    }
+}
+
+static void StartLockWheelingWindow(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.WheelingWindow == window)
+        return;
+    g.WheelingWindow = window;
+    g.WheelingWindowRefMousePos = g.IO.MousePos;
+    g.WheelingWindowTimer = WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER;
+}
+
+void ImGui::UpdateMouseWheel()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Reset the locked window if we move the mouse or after the timer elapses
+    if (g.WheelingWindow != NULL)
+    {
+        g.WheelingWindowTimer -= g.IO.DeltaTime;
+        if (IsMousePosValid() && ImLengthSqr(g.IO.MousePos - g.WheelingWindowRefMousePos) > g.IO.MouseDragThreshold * g.IO.MouseDragThreshold)
+            g.WheelingWindowTimer = 0.0f;
+        if (g.WheelingWindowTimer <= 0.0f)
+        {
+            g.WheelingWindow = NULL;
+            g.WheelingWindowTimer = 0.0f;
+        }
+    }
+
+    if (g.IO.MouseWheel == 0.0f && g.IO.MouseWheelH == 0.0f)
+        return;
+
+    ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
+    if (!window || window->Collapsed)
+        return;
+
+    // Zoom / Scale window
+    // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned.
+    if (g.IO.MouseWheel != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
+    {
+        StartLockWheelingWindow(window);
+        const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
+        const float scale = new_font_scale / window->FontWindowScale;
+        window->FontWindowScale = new_font_scale;
+        if (!(window->Flags & ImGuiWindowFlags_ChildWindow))
+        {
+            const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
+            SetWindowPos(window, window->Pos + offset, 0);
+            window->Size = ImFloor(window->Size * scale);
+            window->SizeFull = ImFloor(window->SizeFull * scale);
+        }
+        return;
+    }
+
+    // Mouse wheel scrolling
+    // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent
+
+    // Vertical Mouse Wheel scrolling
+    const float wheel_y = (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
+    if (wheel_y != 0.0f && !g.IO.KeyCtrl)
+    {
+        StartLockWheelingWindow(window);
+        while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+            window = window->ParentWindow;
+        if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
+        {
+            float max_step = window->InnerRect.GetHeight() * 0.67f;
+            float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step));
+            SetScrollY(window, window->Scroll.y - wheel_y * scroll_step);
+        }
+    }
+
+    // Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held
+    const float wheel_x = (g.IO.MouseWheelH != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheelH : (g.IO.MouseWheel != 0.0f && g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
+    if (wheel_x != 0.0f && !g.IO.KeyCtrl)
+    {
+        StartLockWheelingWindow(window);
+        while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+            window = window->ParentWindow;
+        if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
+        {
+            float max_step = window->InnerRect.GetWidth() * 0.67f;
+            float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step));
+            SetScrollX(window, window->Scroll.x - wheel_x * scroll_step);
+        }
+    }
+}
+
+void ImGui::UpdateTabFocus()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Pressing TAB activate widget focus
+    g.FocusTabPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab));
+    if (g.ActiveId == 0 && g.FocusTabPressed)
+    {
+        // Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also
+        // manipulate the Next fields even, even though they will be turned into Curr fields by the code below.
+        g.FocusRequestNextWindow = g.NavWindow;
+        g.FocusRequestNextCounterRegular = INT_MAX;
+        if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX)
+            g.FocusRequestNextCounterTabStop = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1);
+        else
+            g.FocusRequestNextCounterTabStop = g.IO.KeyShift ? -1 : 0;
+    }
+
+    // Turn queued focus request into current one
+    g.FocusRequestCurrWindow = NULL;
+    g.FocusRequestCurrCounterRegular = g.FocusRequestCurrCounterTabStop = INT_MAX;
+    if (g.FocusRequestNextWindow != NULL)
+    {
+        ImGuiWindow* window = g.FocusRequestNextWindow;
+        g.FocusRequestCurrWindow = window;
+        if (g.FocusRequestNextCounterRegular != INT_MAX && window->DC.FocusCounterRegular != -1)
+            g.FocusRequestCurrCounterRegular = ImModPositive(g.FocusRequestNextCounterRegular, window->DC.FocusCounterRegular + 1);
+        if (g.FocusRequestNextCounterTabStop != INT_MAX && window->DC.FocusCounterTabStop != -1)
+            g.FocusRequestCurrCounterTabStop = ImModPositive(g.FocusRequestNextCounterTabStop, window->DC.FocusCounterTabStop + 1);
+        g.FocusRequestNextWindow = NULL;
+        g.FocusRequestNextCounterRegular = g.FocusRequestNextCounterTabStop = INT_MAX;
+    }
+
+    g.NavIdTabCounter = INT_MAX;
+}
+
+// The reason this is exposed in imgui_internal.h is: on touch-based system that don't have hovering, we want to dispatch inputs to the right target (imgui vs imgui+app)
+void ImGui::UpdateHoveredWindowAndCaptureFlags()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Find the window hovered by mouse:
+    // - Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow.
+    // - When moving a window we can skip the search, which also conveniently bypasses the fact that window->WindowRectClipped is lagging as this point of the frame.
+    // - We also support the moved window toggling the NoInputs flag after moving has started in order to be able to detect windows below it, which is useful for e.g. docking mechanisms.
+    FindHoveredWindow();
+
+    // Modal windows prevents cursor from hovering behind them.
+    ImGuiWindow* modal_window = GetTopMostPopupModal();
+    if (modal_window)
+        if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
+            g.HoveredRootWindow = g.HoveredWindow = NULL;
+
+    // Disabled mouse?
+    if (g.IO.ConfigFlags & ImGuiConfigFlags_NoMouse)
+        g.HoveredWindow = g.HoveredRootWindow = NULL;
+
+    // We track click ownership. When clicked outside of a window the click is owned by the application and won't report hovering nor request capture even while dragging over our windows afterward.
+    int mouse_earliest_button_down = -1;
+    bool mouse_any_down = false;
+    for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++)
+    {
+        if (g.IO.MouseClicked[i])
+            g.IO.MouseDownOwned[i] = (g.HoveredWindow != NULL) || (!g.OpenPopupStack.empty());
+        mouse_any_down |= g.IO.MouseDown[i];
+        if (g.IO.MouseDown[i])
+            if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[i] < g.IO.MouseClickedTime[mouse_earliest_button_down])
+                mouse_earliest_button_down = i;
+    }
+    const bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down];
+
+    // If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
+    // FIXME: For patterns of drag and drop across OS windows, we may need to rework/remove this test (first committed 311c0ca9 on 2015/02)
+    const bool mouse_dragging_extern_payload = g.DragDropActive && (g.DragDropSourceFlags & ImGuiDragDropFlags_SourceExtern) != 0;
+    if (!mouse_avail_to_imgui && !mouse_dragging_extern_payload)
+        g.HoveredWindow = g.HoveredRootWindow = NULL;
+
+    // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to Dear ImGui + app)
+    if (g.WantCaptureMouseNextFrame != -1)
+        g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
+    else
+        g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
+
+    // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to imgui, false = dispatch keyboard info to Dear ImGui + app)
+    if (g.WantCaptureKeyboardNextFrame != -1)
+        g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0);
+    else
+        g.IO.WantCaptureKeyboard = (g.ActiveId != 0) || (modal_window != NULL);
+    if (g.IO.NavActive && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard))
+        g.IO.WantCaptureKeyboard = true;
+
+    // Update io.WantTextInput flag, this is to allow systems without a keyboard (e.g. mobile, hand-held) to show a software keyboard if possible
+    g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
+}
+
+static ImGuiKeyModFlags GetMergedKeyModFlags()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiKeyModFlags key_mod_flags = ImGuiKeyModFlags_None;
+    if (g.IO.KeyCtrl)   { key_mod_flags |= ImGuiKeyModFlags_Ctrl; }
+    if (g.IO.KeyShift)  { key_mod_flags |= ImGuiKeyModFlags_Shift; }
+    if (g.IO.KeyAlt)    { key_mod_flags |= ImGuiKeyModFlags_Alt; }
+    if (g.IO.KeySuper)  { key_mod_flags |= ImGuiKeyModFlags_Super; }
+    return key_mod_flags;
+}
+
+void ImGui::NewFrame()
+{
+    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+    ImGuiContext& g = *GImGui;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+    ImGuiTestEngineHook_PreNewFrame(&g);
+#endif
+
+    // Check and assert for various common IO and Configuration mistakes
+    ErrorCheckNewFrameSanityChecks();
+
+    // Load settings on first frame, save settings when modified (after a delay)
+    UpdateSettings();
+
+    g.Time += g.IO.DeltaTime;
+    g.WithinFrameScope = true;
+    g.FrameCount += 1;
+    g.TooltipOverrideCount = 0;
+    g.WindowsActiveCount = 0;
+    g.MenusIdSubmittedThisFrame.resize(0);
+
+    // Calculate frame-rate for the user, as a purely luxurious feature
+    g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx];
+    g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx] = g.IO.DeltaTime;
+    g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame);
+    g.IO.Framerate = (g.FramerateSecPerFrameAccum > 0.0f) ? (1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame))) : FLT_MAX;
+
+    // Setup current font and draw list shared data
+    g.IO.Fonts->Locked = true;
+    SetCurrentFont(GetDefaultFont());
+    IM_ASSERT(g.Font->IsLoaded());
+    g.DrawListSharedData.ClipRectFullscreen = ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
+    g.DrawListSharedData.CurveTessellationTol = g.Style.CurveTessellationTol;
+    g.DrawListSharedData.SetCircleSegmentMaxError(g.Style.CircleSegmentMaxError);
+    g.DrawListSharedData.InitialFlags = ImDrawListFlags_None;
+    if (g.Style.AntiAliasedLines)
+        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLines;
+    if (g.Style.AntiAliasedFill)
+        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedFill;
+    if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)
+        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AllowVtxOffset;
+
+    g.BackgroundDrawList.Clear();
+    g.BackgroundDrawList.PushTextureID(g.IO.Fonts->TexID);
+    g.BackgroundDrawList.PushClipRectFullScreen();
+
+    g.ForegroundDrawList.Clear();
+    g.ForegroundDrawList.PushTextureID(g.IO.Fonts->TexID);
+    g.ForegroundDrawList.PushClipRectFullScreen();
+
+    // Mark rendering data as invalid to prevent user who may have a handle on it to use it.
+    g.DrawData.Clear();
+
+    // Drag and drop keep the source ID alive so even if the source disappear our state is consistent
+    if (g.DragDropActive && g.DragDropPayload.SourceId == g.ActiveId)
+        KeepAliveID(g.DragDropPayload.SourceId);
+
+    // Update HoveredId data
+    if (!g.HoveredIdPreviousFrame)
+        g.HoveredIdTimer = 0.0f;
+    if (!g.HoveredIdPreviousFrame || (g.HoveredId && g.ActiveId == g.HoveredId))
+        g.HoveredIdNotActiveTimer = 0.0f;
+    if (g.HoveredId)
+        g.HoveredIdTimer += g.IO.DeltaTime;
+    if (g.HoveredId && g.ActiveId != g.HoveredId)
+        g.HoveredIdNotActiveTimer += g.IO.DeltaTime;
+    g.HoveredIdPreviousFrame = g.HoveredId;
+    g.HoveredId = 0;
+    g.HoveredIdAllowOverlap = false;
+
+    // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore)
+    if (g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
+        ClearActiveID();
+    if (g.ActiveId)
+        g.ActiveIdTimer += g.IO.DeltaTime;
+    g.LastActiveIdTimer += g.IO.DeltaTime;
+    g.ActiveIdPreviousFrame = g.ActiveId;
+    g.ActiveIdPreviousFrameWindow = g.ActiveIdWindow;
+    g.ActiveIdPreviousFrameHasBeenEditedBefore = g.ActiveIdHasBeenEditedBefore;
+    g.ActiveIdIsAlive = 0;
+    g.ActiveIdHasBeenEditedThisFrame = false;
+    g.ActiveIdPreviousFrameIsAlive = false;
+    g.ActiveIdIsJustActivated = false;
+    if (g.TempInputId != 0 && g.ActiveId != g.TempInputId)
+        g.TempInputId = 0;
+    if (g.ActiveId == 0)
+    {
+        g.ActiveIdUsingNavDirMask = 0x00;
+        g.ActiveIdUsingNavInputMask = 0x00;
+        g.ActiveIdUsingKeyInputMask = 0x00;
+    }
+
+    // Drag and drop
+    g.DragDropAcceptIdPrev = g.DragDropAcceptIdCurr;
+    g.DragDropAcceptIdCurr = 0;
+    g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
+    g.DragDropWithinSource = false;
+    g.DragDropWithinTarget = false;
+
+    // Update keyboard input state
+    // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools
+    g.IO.KeyMods = GetMergedKeyModFlags();
+    memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration));
+    for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++)
+        g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f;
+
+    // Update gamepad/keyboard directional navigation
+    NavUpdate();
+
+    // Update mouse input state
+    UpdateMouseInputs();
+
+    // Find hovered window
+    // (needs to be before UpdateMouseMovingWindowNewFrame so we fill g.HoveredWindowUnderMovingWindow on the mouse release frame)
+    UpdateHoveredWindowAndCaptureFlags();
+
+    // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering)
+    UpdateMouseMovingWindowNewFrame();
+
+    // Background darkening/whitening
+    if (GetTopMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f))
+        g.DimBgRatio = ImMin(g.DimBgRatio + g.IO.DeltaTime * 6.0f, 1.0f);
+    else
+        g.DimBgRatio = ImMax(g.DimBgRatio - g.IO.DeltaTime * 10.0f, 0.0f);
+
+    g.MouseCursor = ImGuiMouseCursor_Arrow;
+    g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
+    g.PlatformImePos = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
+
+    // Mouse wheel scrolling, scale
+    UpdateMouseWheel();
+
+    // Update legacy TAB focus
+    UpdateTabFocus();
+
+    // Mark all windows as not visible and compact unused memory.
+    IM_ASSERT(g.WindowsFocusOrder.Size == g.Windows.Size);
+    const float memory_compact_start_time = (g.IO.ConfigWindowsMemoryCompactTimer >= 0.0f) ? (float)g.Time - g.IO.ConfigWindowsMemoryCompactTimer : FLT_MAX;
+    for (int i = 0; i != g.Windows.Size; i++)
+    {
+        ImGuiWindow* window = g.Windows[i];
+        window->WasActive = window->Active;
+        window->BeginCount = 0;
+        window->Active = false;
+        window->WriteAccessed = false;
+
+        // Garbage collect transient buffers of recently unused windows
+        if (!window->WasActive && !window->MemoryCompacted && window->LastTimeActive < memory_compact_start_time)
+            GcCompactTransientWindowBuffers(window);
+    }
+
+    // Closing the focused window restore focus to the first active root window in descending z-order
+    if (g.NavWindow && !g.NavWindow->WasActive)
+        FocusTopMostWindowUnderOne(NULL, NULL);
+
+    // No window should be open at the beginning of the frame.
+    // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
+    g.CurrentWindowStack.resize(0);
+    g.BeginPopupStack.resize(0);
+    ClosePopupsOverWindow(g.NavWindow, false);
+
+    // [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
+    UpdateDebugToolItemPicker();
+
+    // Create implicit/fallback window - which we will only render it if the user has added something to it.
+    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
+    // This fallback is particularly important as it avoid ImGui:: calls from crashing.
+    g.WithinFrameScopeWithImplicitWindow = true;
+    SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
+    Begin("Debug##Default");
+    IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true);
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+    ImGuiTestEngineHook_PostNewFrame(&g);
+#endif
+}
+
+// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
+void ImGui::UpdateDebugToolItemPicker()
+{
+    ImGuiContext& g = *GImGui;
+    g.DebugItemPickerBreakId = 0;
+    if (g.DebugItemPickerActive)
+    {
+        const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
+        ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
+        if (ImGui::IsKeyPressedMap(ImGuiKey_Escape))
+            g.DebugItemPickerActive = false;
+        if (ImGui::IsMouseClicked(0) && hovered_id)
+        {
+            g.DebugItemPickerBreakId = hovered_id;
+            g.DebugItemPickerActive = false;
+        }
+        ImGui::SetNextWindowBgAlpha(0.60f);
+        ImGui::BeginTooltip();
+        ImGui::Text("HoveredId: 0x%08X", hovered_id);
+        ImGui::Text("Press ESC to abort picking.");
+        ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
+        ImGui::EndTooltip();
+    }
+}
+
+void ImGui::Initialize(ImGuiContext* context)
+{
+    ImGuiContext& g = *context;
+    IM_ASSERT(!g.Initialized && !g.SettingsLoaded);
+
+    // Add .ini handle for ImGuiWindow type
+    {
+        ImGuiSettingsHandler ini_handler;
+        ini_handler.TypeName = "Window";
+        ini_handler.TypeHash = ImHashStr("Window");
+        ini_handler.ReadOpenFn = WindowSettingsHandler_ReadOpen;
+        ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine;
+        ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll;
+        g.SettingsHandlers.push_back(ini_handler);
+    }
+
+#ifdef IMGUI_HAS_TABLE
+    // Add .ini handle for ImGuiTable type
+    {
+        ImGuiSettingsHandler ini_handler;
+        ini_handler.TypeName = "Table";
+        ini_handler.TypeHash = ImHashStr("Table");
+        ini_handler.ReadOpenFn = TableSettingsHandler_ReadOpen;
+        ini_handler.ReadLineFn = TableSettingsHandler_ReadLine;
+        ini_handler.WriteAllFn = TableSettingsHandler_WriteAll;
+        g.SettingsHandlers.push_back(ini_handler);
+    }
+#endif // #ifdef IMGUI_HAS_TABLE
+
+#ifdef IMGUI_HAS_DOCK
+#endif // #ifdef IMGUI_HAS_DOCK
+
+    g.Initialized = true;
+}
+
+// This function is merely here to free heap allocations.
+void ImGui::Shutdown(ImGuiContext* context)
+{
+    // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame)
+    ImGuiContext& g = *context;
+    if (g.IO.Fonts && g.FontAtlasOwnedByContext)
+    {
+        g.IO.Fonts->Locked = false;
+        IM_DELETE(g.IO.Fonts);
+    }
+    g.IO.Fonts = NULL;
+
+    // Cleanup of other data are conditional on actually having initialized Dear ImGui.
+    if (!g.Initialized)
+        return;
+
+    // Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file)
+    if (g.SettingsLoaded && g.IO.IniFilename != NULL)
+    {
+        ImGuiContext* backup_context = GImGui;
+        SetCurrentContext(context);
+        SaveIniSettingsToDisk(g.IO.IniFilename);
+        SetCurrentContext(backup_context);
+    }
+
+    // Clear everything else
+    for (int i = 0; i < g.Windows.Size; i++)
+        IM_DELETE(g.Windows[i]);
+    g.Windows.clear();
+    g.WindowsFocusOrder.clear();
+    g.WindowsTempSortBuffer.clear();
+    g.CurrentWindow = NULL;
+    g.CurrentWindowStack.clear();
+    g.WindowsById.Clear();
+    g.NavWindow = NULL;
+    g.HoveredWindow = g.HoveredRootWindow = NULL;
+    g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL;
+    g.MovingWindow = NULL;
+    g.ColorModifiers.clear();
+    g.StyleModifiers.clear();
+    g.FontStack.clear();
+    g.OpenPopupStack.clear();
+    g.BeginPopupStack.clear();
+    g.DrawDataBuilder.ClearFreeMemory();
+    g.BackgroundDrawList.ClearFreeMemory();
+    g.ForegroundDrawList.ClearFreeMemory();
+
+    g.TabBars.Clear();
+    g.CurrentTabBarStack.clear();
+    g.ShrinkWidthBuffer.clear();
+
+    g.Tables.Clear();
+    g.CurrentTableStack.clear();
+    g.DrawChannelsTempMergeBuffer.clear();
+
+    g.PrivateClipboard.clear();
+    g.MenusIdSubmittedThisFrame.clear();
+    g.InputTextState.ClearFreeMemory();
+
+    g.SettingsWindows.clear();
+    g.SettingsHandlers.clear();
+
+    if (g.LogFile)
+    {
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+        if (g.LogFile != stdout)
+#endif
+            ImFileClose(g.LogFile);
+        g.LogFile = NULL;
+    }
+    g.LogBuffer.clear();
+
+    g.Initialized = false;
+}
+
+// FIXME: Add a more explicit sort order in the window structure.
+static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs)
+{
+    const ImGuiWindow* const a = *(const ImGuiWindow* const *)lhs;
+    const ImGuiWindow* const b = *(const ImGuiWindow* const *)rhs;
+    if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup))
+        return d;
+    if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip))
+        return d;
+    return (a->BeginOrderWithinParent - b->BeginOrderWithinParent);
+}
+
+static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window)
+{
+    out_sorted_windows->push_back(window);
+    if (window->Active)
+    {
+        int count = window->DC.ChildWindows.Size;
+        if (count > 1)
+            ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
+        for (int i = 0; i < count; i++)
+        {
+            ImGuiWindow* child = window->DC.ChildWindows[i];
+            if (child->Active)
+                AddWindowToSortBuffer(out_sorted_windows, child);
+        }
+    }
+}
+
+static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list)
+{
+    if (draw_list->CmdBuffer.empty())
+        return;
+
+    // Remove trailing command if unused
+    ImDrawCmd& last_cmd = draw_list->CmdBuffer.back();
+    if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL)
+    {
+        draw_list->CmdBuffer.pop_back();
+        if (draw_list->CmdBuffer.empty())
+            return;
+    }
+
+    // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
+    // May trigger for you if you are using PrimXXX functions incorrectly.
+    IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
+    IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
+    if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset))
+        IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
+
+    // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window)
+    // If this assert triggers because you are drawing lots of stuff manually:
+    // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds.
+    //   Be mindful that the ImDrawList API doesn't filter vertices. Use the Metrics window to inspect draw list contents.
+    // - If you want large meshes with more than 64K vertices, you can either:
+    //   (A) Handle the ImDrawCmd::VtxOffset value in your renderer back-end, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'.
+    //       Most example back-ends already support this from 1.71. Pre-1.71 back-ends won't.
+    //       Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them.
+    //   (B) Or handle 32-bit indices in your renderer back-end, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h.
+    //       Most example back-ends already support this. For example, the OpenGL example code detect index size at compile-time:
+    //         glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
+    //       Your own engine or render API may use different parameters or function calls to specify index sizes.
+    //       2 and 4 bytes indices are generally supported by most graphics API.
+    // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching
+    //   the 64K limit to split your draw commands in multiple draw lists.
+    if (sizeof(ImDrawIdx) == 2)
+        IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
+
+    out_list->push_back(draw_list);
+}
+
+static void AddWindowToDrawData(ImVector<ImDrawList*>* out_render_list, ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    g.IO.MetricsRenderWindows++;
+    AddDrawListToDrawData(out_render_list, window->DrawList);
+    for (int i = 0; i < window->DC.ChildWindows.Size; i++)
+    {
+        ImGuiWindow* child = window->DC.ChildWindows[i];
+        if (IsWindowActiveAndVisible(child)) // clipped children may have been marked not active
+            AddWindowToDrawData(out_render_list, child);
+    }
+}
+
+// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
+static void AddRootWindowToDrawData(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    int layer = (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0;
+    AddWindowToDrawData(&g.DrawDataBuilder.Layers[layer], window);
+}
+
+void ImDrawDataBuilder::FlattenIntoSingleLayer()
+{
+    int n = Layers[0].Size;
+    int size = n;
+    for (int i = 1; i < IM_ARRAYSIZE(Layers); i++)
+        size += Layers[i].Size;
+    Layers[0].resize(size);
+    for (int layer_n = 1; layer_n < IM_ARRAYSIZE(Layers); layer_n++)
+    {
+        ImVector<ImDrawList*>& layer = Layers[layer_n];
+        if (layer.empty())
+            continue;
+        memcpy(&Layers[0][n], &layer[0], layer.Size * sizeof(ImDrawList*));
+        n += layer.Size;
+        layer.resize(0);
+    }
+}
+
+static void SetupDrawData(ImVector<ImDrawList*>* draw_lists, ImDrawData* draw_data)
+{
+    ImGuiIO& io = ImGui::GetIO();
+    draw_data->Valid = true;
+    draw_data->CmdLists = (draw_lists->Size > 0) ? draw_lists->Data : NULL;
+    draw_data->CmdListsCount = draw_lists->Size;
+    draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0;
+    draw_data->DisplayPos = ImVec2(0.0f, 0.0f);
+    draw_data->DisplaySize = io.DisplaySize;
+    draw_data->FramebufferScale = io.DisplayFramebufferScale;
+    for (int n = 0; n < draw_lists->Size; n++)
+    {
+        draw_data->TotalVtxCount += draw_lists->Data[n]->VtxBuffer.Size;
+        draw_data->TotalIdxCount += draw_lists->Data[n]->IdxBuffer.Size;
+    }
+}
+
+// When using this function it is sane to ensure that float are perfectly rounded to integer values, to that e.g. (int)(max.x-min.x) in user's render produce correct result.
+void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DrawList->PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
+    window->ClipRect = window->DrawList->_ClipRectStack.back();
+}
+
+void ImGui::PopClipRect()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DrawList->PopClipRect();
+    window->ClipRect = window->DrawList->_ClipRectStack.back();
+}
+
+// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal.
+void ImGui::EndFrame()
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.Initialized);
+    
+    // Don't process EndFrame() multiple times.
+    if (g.FrameCountEnded == g.FrameCount)
+        return;
+    IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?");
+
+    ErrorCheckEndFrameSanityChecks();
+
+    // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
+    if (g.IO.ImeSetInputScreenPosFn && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f))
+    {
+        g.IO.ImeSetInputScreenPosFn((int)g.PlatformImePos.x, (int)g.PlatformImePos.y);
+        g.PlatformImeLastPos = g.PlatformImePos;
+    }
+
+    // Hide implicit/fallback "Debug" window if it hasn't been used
+    g.WithinFrameScopeWithImplicitWindow = false;
+    if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed)
+        g.CurrentWindow->Active = false;
+    End();
+
+    // Show CTRL+TAB list window
+    if (g.NavWindowingTarget != NULL)
+        NavUpdateWindowingOverlay();
+
+    // Drag and Drop: Elapse payload (if delivered, or if source stops being submitted)
+    if (g.DragDropActive)
+    {
+        bool is_delivered = g.DragDropPayload.Delivery;
+        bool is_elapsed = (g.DragDropPayload.DataFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton));
+        if (is_delivered || is_elapsed)
+            ClearDragDrop();
+    }
+
+    // Drag and Drop: Fallback for source tooltip. This is not ideal but better than nothing.
+    if (g.DragDropActive && g.DragDropSourceFrameCount < g.FrameCount)
+    {
+        g.DragDropWithinSource = true;
+        SetTooltip("...");
+        g.DragDropWithinSource = false;
+    }
+
+    // End frame
+    g.WithinFrameScope = false;
+    g.FrameCountEnded = g.FrameCount;
+
+    // Initiate moving window + handle left-click and right-click focus
+    UpdateMouseMovingWindowEndFrame();
+
+    // Sort the window list so that all child windows are after their parent
+    // We cannot do that on FocusWindow() because childs may not exist yet
+    g.WindowsTempSortBuffer.resize(0);
+    g.WindowsTempSortBuffer.reserve(g.Windows.Size);
+    for (int i = 0; i != g.Windows.Size; i++)
+    {
+        ImGuiWindow* window = g.Windows[i];
+        if (window->Active && (window->Flags & ImGuiWindowFlags_ChildWindow))       // if a child is active its parent will add it
+            continue;
+        AddWindowToSortBuffer(&g.WindowsTempSortBuffer, window);
+    }
+
+    // This usually assert if there is a mismatch between the ImGuiWindowFlags_ChildWindow / ParentWindow values and DC.ChildWindows[] in parents, aka we've done something wrong.
+    IM_ASSERT(g.Windows.Size == g.WindowsTempSortBuffer.Size);
+    g.Windows.swap(g.WindowsTempSortBuffer);
+    g.IO.MetricsActiveWindows = g.WindowsActiveCount;
+
+    // Unlock font atlas
+    g.IO.Fonts->Locked = false;
+
+    // Clear Input data for next frame
+    g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f;
+    g.IO.InputQueueCharacters.resize(0);
+    memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs));
+}
+
+void ImGui::Render()
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.Initialized);
+
+    if (g.FrameCountEnded != g.FrameCount)
+        EndFrame();
+    g.FrameCountRendered = g.FrameCount;
+    g.IO.MetricsRenderWindows = 0;
+    g.DrawDataBuilder.Clear();
+
+    // Add background ImDrawList
+    if (!g.BackgroundDrawList.VtxBuffer.empty())
+        AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.BackgroundDrawList);
+
+    // Add ImDrawList to render
+    ImGuiWindow* windows_to_render_top_most[2];
+    windows_to_render_top_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL;
+    windows_to_render_top_most[1] = (g.NavWindowingTarget ? g.NavWindowingList : NULL);
+    for (int n = 0; n != g.Windows.Size; n++)
+    {
+        ImGuiWindow* window = g.Windows[n];
+        if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_top_most[0] && window != windows_to_render_top_most[1])
+            AddRootWindowToDrawData(window);
+    }
+    for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_top_most); n++)
+        if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
+            AddRootWindowToDrawData(windows_to_render_top_most[n]);
+    g.DrawDataBuilder.FlattenIntoSingleLayer();
+
+    // Draw software mouse cursor if requested
+    if (g.IO.MouseDrawCursor)
+        RenderMouseCursor(&g.ForegroundDrawList, g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
+
+    // Add foreground ImDrawList
+    if (!g.ForegroundDrawList.VtxBuffer.empty())
+        AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.ForegroundDrawList);
+
+    // Setup ImDrawData structure for end-user
+    SetupDrawData(&g.DrawDataBuilder.Layers[0], &g.DrawData);
+    g.IO.MetricsRenderVertices = g.DrawData.TotalVtxCount;
+    g.IO.MetricsRenderIndices = g.DrawData.TotalIdxCount;
+
+    // (Legacy) Call the Render callback function. The current prefer way is to let the user retrieve GetDrawData() and call the render function themselves.
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    if (g.DrawData.CmdListsCount > 0 && g.IO.RenderDrawListsFn != NULL)
+        g.IO.RenderDrawListsFn(&g.DrawData);
+#endif
+}
+
+// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
+// CalcTextSize("") should return ImVec2(0.0f, g.FontSize)
+ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
+{
+    ImGuiContext& g = *GImGui;
+
+    const char* text_display_end;
+    if (hide_text_after_double_hash)
+        text_display_end = FindRenderedTextEnd(text, text_end);      // Hide anything after a '##' string
+    else
+        text_display_end = text_end;
+
+    ImFont* font = g.Font;
+    const float font_size = g.FontSize;
+    if (text == text_display_end)
+        return ImVec2(0.0f, font_size);
+    ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
+
+    // Round
+    text_size.x = IM_FLOOR(text_size.x + 0.95f);
+
+    return text_size;
+}
+
+// Find window given position, search front-to-back
+// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programatically
+// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
+// called, aka before the next Begin(). Moving window isn't affected.
+static void FindHoveredWindow()
+{
+    ImGuiContext& g = *GImGui;
+
+    ImGuiWindow* hovered_window = NULL;
+    if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
+        hovered_window = g.MovingWindow;
+
+    ImVec2 padding_regular = g.Style.TouchExtraPadding;
+    ImVec2 padding_for_resize_from_edges = g.IO.ConfigWindowsResizeFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS)) : padding_regular;
+    for (int i = g.Windows.Size - 1; i >= 0; i--)
+    {
+        ImGuiWindow* window = g.Windows[i];
+        if (!window->Active || window->Hidden)
+            continue;
+        if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
+            continue;
+
+        // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
+        ImRect bb(window->OuterRectClipped);
+        if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize))
+            bb.Expand(padding_regular);
+        else
+            bb.Expand(padding_for_resize_from_edges);
+        if (!bb.Contains(g.IO.MousePos))
+            continue;
+
+        // Those seemingly unnecessary extra tests are because the code here is a little different in viewport/docking branches.
+        if (hovered_window == NULL)
+            hovered_window = window;
+        if (hovered_window)
+            break;
+    }
+
+    g.HoveredWindow = hovered_window;
+    g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
+
+}
+
+// Test if mouse cursor is hovering given rectangle
+// NB- Rectangle is clipped by our current clip setting
+// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding)
+bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip)
+{
+    ImGuiContext& g = *GImGui;
+
+    // Clip
+    ImRect rect_clipped(r_min, r_max);
+    if (clip)
+        rect_clipped.ClipWith(g.CurrentWindow->ClipRect);
+
+    // Expand for touch input
+    const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding);
+    if (!rect_for_touch.Contains(g.IO.MousePos))
+        return false;
+    return true;
+}
+
+int ImGui::GetKeyIndex(ImGuiKey imgui_key)
+{
+    IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT);
+    ImGuiContext& g = *GImGui;
+    return g.IO.KeyMap[imgui_key];
+}
+
+// Note that dear imgui doesn't know the semantic of each entry of io.KeysDown[]!
+// Use your own indices/enums according to how your back-end/engine stored them into io.KeysDown[]!
+bool ImGui::IsKeyDown(int user_key_index)
+{
+    if (user_key_index < 0)
+        return false;
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+    return g.IO.KeysDown[user_key_index];
+}
+
+// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime)
+// t1 = current time (e.g.: g.Time)
+// An event is triggered at:
+//  t = 0.0f     t = repeat_delay,    t = repeat_delay + repeat_rate*N
+int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate)
+{
+    if (t1 == 0.0f)
+        return 1;
+    if (t0 >= t1)
+        return 0;
+    if (repeat_rate <= 0.0f)
+        return (t0 < repeat_delay) && (t1 >= repeat_delay);
+    const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate);
+    const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate);
+    const int count = count_t1 - count_t0;
+    return count;
+}
+
+int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate)
+{
+    ImGuiContext& g = *GImGui;
+    if (key_index < 0)
+        return 0;
+    IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+    const float t = g.IO.KeysDownDuration[key_index];
+    return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate);
+}
+
+bool ImGui::IsKeyPressed(int user_key_index, bool repeat)
+{
+    ImGuiContext& g = *GImGui;
+    if (user_key_index < 0)
+        return false;
+    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+    const float t = g.IO.KeysDownDuration[user_key_index];
+    if (t == 0.0f)
+        return true;
+    if (repeat && t > g.IO.KeyRepeatDelay)
+        return GetKeyPressedAmount(user_key_index, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0;
+    return false;
+}
+
+bool ImGui::IsKeyReleased(int user_key_index)
+{
+    ImGuiContext& g = *GImGui;
+    if (user_key_index < 0) return false;
+    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
+    return g.IO.KeysDownDurationPrev[user_key_index] >= 0.0f && !g.IO.KeysDown[user_key_index];
+}
+
+bool ImGui::IsMouseDown(ImGuiMouseButton button)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    return g.IO.MouseDown[button];
+}
+
+bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    const float t = g.IO.MouseDownDuration[button];
+    if (t == 0.0f)
+        return true;
+
+    if (repeat && t > g.IO.KeyRepeatDelay)
+    {
+        // FIXME: 2019/05/03: Our old repeat code was wrong here and led to doubling the repeat rate, which made it an ok rate for repeat on mouse hold.
+        int amount = CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate * 0.50f);
+        if (amount > 0)
+            return true;
+    }
+    return false;
+}
+
+bool ImGui::IsMouseReleased(ImGuiMouseButton button)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    return g.IO.MouseReleased[button];
+}
+
+bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    return g.IO.MouseDoubleClicked[button];
+}
+
+// [Internal] This doesn't test if the button is pressed
+bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    if (lock_threshold < 0.0f)
+        lock_threshold = g.IO.MouseDragThreshold;
+    return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold;
+}
+
+bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    if (!g.IO.MouseDown[button])
+        return false;
+    return IsMouseDragPastThreshold(button, lock_threshold);
+}
+
+ImVec2 ImGui::GetMousePos()
+{
+    ImGuiContext& g = *GImGui;
+    return g.IO.MousePos;
+}
+
+// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed!
+ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.BeginPopupStack.Size > 0)
+        return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos;
+    return g.IO.MousePos;
+}
+
+// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position.
+bool ImGui::IsMousePosValid(const ImVec2* mouse_pos)
+{
+    // The assert is only to silence a false-positive in XCode Static Analysis.
+    // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions).
+    IM_ASSERT(GImGui != NULL);
+    const float MOUSE_INVALID = -256000.0f;
+    ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos;
+    return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID;
+}
+
+bool ImGui::IsAnyMouseDown()
+{
+    ImGuiContext& g = *GImGui;
+    for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++)
+        if (g.IO.MouseDown[n])
+            return true;
+    return false;
+}
+
+// Return the delta from the initial clicking position while the mouse button is clicked or was just released.
+// This is locked and return 0.0f until the mouse moves past a distance threshold at least once.
+// NB: This is only valid if IsMousePosValid(). Back-ends in theory should always keep mouse position valid when dragging even outside the client window.
+ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    if (lock_threshold < 0.0f)
+        lock_threshold = g.IO.MouseDragThreshold;
+    if (g.IO.MouseDown[button] || g.IO.MouseReleased[button])
+        if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold)
+            if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button]))
+                return g.IO.MousePos - g.IO.MouseClickedPos[button];
+    return ImVec2(0.0f, 0.0f);
+}
+
+void ImGui::ResetMouseDragDelta(ImGuiMouseButton button)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+    // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr
+    g.IO.MouseClickedPos[button] = g.IO.MousePos;
+}
+
+ImGuiMouseCursor ImGui::GetMouseCursor()
+{
+    return GImGui->MouseCursor;
+}
+
+void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type)
+{
+    GImGui->MouseCursor = cursor_type;
+}
+
+void ImGui::CaptureKeyboardFromApp(bool capture)
+{
+    GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0;
+}
+
+void ImGui::CaptureMouseFromApp(bool capture)
+{
+    GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0;
+}
+
+bool ImGui::IsItemActive()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.ActiveId)
+    {
+        ImGuiWindow* window = g.CurrentWindow;
+        return g.ActiveId == window->DC.LastItemId;
+    }
+    return false;
+}
+
+bool ImGui::IsItemActivated()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.ActiveId)
+    {
+        ImGuiWindow* window = g.CurrentWindow;
+        if (g.ActiveId == window->DC.LastItemId && g.ActiveIdPreviousFrame != window->DC.LastItemId)
+            return true;
+    }
+    return false;
+}
+
+bool ImGui::IsItemDeactivated()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDeactivated)
+        return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Deactivated) != 0;
+    return (g.ActiveIdPreviousFrame == window->DC.LastItemId && g.ActiveIdPreviousFrame != 0 && g.ActiveId != window->DC.LastItemId);
+}
+
+bool ImGui::IsItemDeactivatedAfterEdit()
+{
+    ImGuiContext& g = *GImGui;
+    return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEditedBefore || (g.ActiveId == 0 && g.ActiveIdHasBeenEditedBefore));
+}
+
+bool ImGui::IsItemFocused()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    if (g.NavId == 0 || g.NavDisableHighlight || g.NavId != window->DC.LastItemId)
+        return false;
+    return true;
+}
+
+bool ImGui::IsItemClicked(ImGuiMouseButton mouse_button)
+{
+    return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_None);
+}
+
+bool ImGui::IsItemToggledOpen()
+{
+    ImGuiContext& g = *GImGui;
+    return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledOpen) ? true : false;
+}
+
+bool ImGui::IsItemToggledSelection()
+{
+    ImGuiContext& g = *GImGui;
+    return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledSelection) ? true : false;
+}
+
+bool ImGui::IsAnyItemHovered()
+{
+    ImGuiContext& g = *GImGui;
+    return g.HoveredId != 0 || g.HoveredIdPreviousFrame != 0;
+}
+
+bool ImGui::IsAnyItemActive()
+{
+    ImGuiContext& g = *GImGui;
+    return g.ActiveId != 0;
+}
+
+bool ImGui::IsAnyItemFocused()
+{
+    ImGuiContext& g = *GImGui;
+    return g.NavId != 0 && !g.NavDisableHighlight;
+}
+
+bool ImGui::IsItemVisible()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->ClipRect.Overlaps(window->DC.LastItemRect);
+}
+
+bool ImGui::IsItemEdited()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Edited) != 0;
+}
+
+// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority.
+void ImGui::SetItemAllowOverlap()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.HoveredId == g.CurrentWindow->DC.LastItemId)
+        g.HoveredIdAllowOverlap = true;
+    if (g.ActiveId == g.CurrentWindow->DC.LastItemId)
+        g.ActiveIdAllowOverlap = true;
+}
+
+ImVec2 ImGui::GetItemRectMin()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.LastItemRect.Min;
+}
+
+ImVec2 ImGui::GetItemRectMax()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.LastItemRect.Max;
+}
+
+ImVec2 ImGui::GetItemRectSize()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.LastItemRect.GetSize();
+}
+
+static ImRect GetViewportRect()
+{
+    ImGuiContext& g = *GImGui;
+    return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
+}
+
+bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* parent_window = g.CurrentWindow;
+
+    flags |= ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
+    flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove);  // Inherit the NoMove flag
+
+    // Size
+    const ImVec2 content_avail = GetContentRegionAvail();
+    ImVec2 size = ImFloor(size_arg);
+    const int auto_fit_axises = ((size.x == 0.0f) ? (1 << ImGuiAxis_X) : 0x00) | ((size.y == 0.0f) ? (1 << ImGuiAxis_Y) : 0x00);
+    if (size.x <= 0.0f)
+        size.x = ImMax(content_avail.x + size.x, 4.0f); // Arbitrary minimum child size (0.0f causing too much issues)
+    if (size.y <= 0.0f)
+        size.y = ImMax(content_avail.y + size.y, 4.0f);
+    SetNextWindowSize(size);
+
+    // Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value.
+    char title[256];
+    if (name)
+        ImFormatString(title, IM_ARRAYSIZE(title), "%s/%s_%08X", parent_window->Name, name, id);
+    else
+        ImFormatString(title, IM_ARRAYSIZE(title), "%s/%08X", parent_window->Name, id);
+
+    const float backup_border_size = g.Style.ChildBorderSize;
+    if (!border)
+        g.Style.ChildBorderSize = 0.0f;
+    bool ret = Begin(title, NULL, flags);
+    g.Style.ChildBorderSize = backup_border_size;
+
+    ImGuiWindow* child_window = g.CurrentWindow;
+    child_window->ChildId = id;
+    child_window->AutoFitChildAxises = (ImS8)auto_fit_axises;
+
+    // Set the cursor to handle case where the user called SetNextWindowPos()+BeginChild() manually.
+    // While this is not really documented/defined, it seems that the expected thing to do.
+    if (child_window->BeginCount == 1)
+        parent_window->DC.CursorPos = child_window->Pos;
+
+    // Process navigation-in immediately so NavInit can run on first frame
+    if (g.NavActivateId == id && !(flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayerActiveMask != 0 || child_window->DC.NavHasScroll))
+    {
+        FocusWindow(child_window);
+        NavInitWindow(child_window, false);
+        SetActiveID(id+1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item
+        g.ActiveIdSource = ImGuiInputSource_Nav;
+    }
+    return ret;
+}
+
+bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    return BeginChildEx(str_id, window->GetID(str_id), size_arg, border, extra_flags);
+}
+
+bool ImGui::BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
+{
+    IM_ASSERT(id != 0);
+    return BeginChildEx(NULL, id, size_arg, border, extra_flags);
+}
+
+void ImGui::EndChild()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    IM_ASSERT(g.WithinEndChild == false);
+    IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow);   // Mismatched BeginChild()/EndChild() calls
+
+    g.WithinEndChild = true;
+    if (window->BeginCount > 1)
+    {
+        End();
+    }
+    else
+    {
+        ImVec2 sz = window->Size;
+        if (window->AutoFitChildAxises & (1 << ImGuiAxis_X)) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f
+            sz.x = ImMax(4.0f, sz.x);
+        if (window->AutoFitChildAxises & (1 << ImGuiAxis_Y))
+            sz.y = ImMax(4.0f, sz.y);
+        End();
+
+        ImGuiWindow* parent_window = g.CurrentWindow;
+        ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + sz);
+        ItemSize(sz);
+        if ((window->DC.NavLayerActiveMask != 0 || window->DC.NavHasScroll) && !(window->Flags & ImGuiWindowFlags_NavFlattened))
+        {
+            ItemAdd(bb, window->ChildId);
+            RenderNavHighlight(bb, window->ChildId);
+
+            // When browsing a window that has no activable items (scroll only) we keep a highlight on the child
+            if (window->DC.NavLayerActiveMask == 0 && window == g.NavWindow)
+                RenderNavHighlight(ImRect(bb.Min - ImVec2(2,2), bb.Max + ImVec2(2,2)), g.NavId, ImGuiNavHighlightFlags_TypeThin);
+        }
+        else
+        {
+            // Not navigable into
+            ItemAdd(bb, 0);
+        }
+    }
+    g.WithinEndChild = false;
+}
+
+// Helper to create a child window / scrolling region that looks like a normal widget frame.
+bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags)
+{
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
+    PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
+    PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
+    PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
+    bool ret = BeginChild(id, size, true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags);
+    PopStyleVar(3);
+    PopStyleColor();
+    return ret;
+}
+
+void ImGui::EndChildFrame()
+{
+    EndChild();
+}
+
+static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled)
+{
+    window->SetWindowPosAllowFlags       = enabled ? (window->SetWindowPosAllowFlags       | flags) : (window->SetWindowPosAllowFlags       & ~flags);
+    window->SetWindowSizeAllowFlags      = enabled ? (window->SetWindowSizeAllowFlags      | flags) : (window->SetWindowSizeAllowFlags      & ~flags);
+    window->SetWindowCollapsedAllowFlags = enabled ? (window->SetWindowCollapsedAllowFlags | flags) : (window->SetWindowCollapsedAllowFlags & ~flags);
+}
+
+ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    return (ImGuiWindow*)g.WindowsById.GetVoidPtr(id);
+}
+
+ImGuiWindow* ImGui::FindWindowByName(const char* name)
+{
+    ImGuiID id = ImHashStr(name);
+    return FindWindowByID(id);
+}
+
+static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    //IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
+
+    // Create window the first time
+    ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
+    window->Flags = flags;
+    g.WindowsById.SetVoidPtr(window->ID, window);
+
+    // Default/arbitrary window position. Use SetNextWindowPos() with the appropriate condition flag to change the initial position of a window.
+    window->Pos = ImVec2(60, 60);
+
+    // User can disable loading and saving of settings. Tooltip and child windows also don't store settings.
+    if (!(flags & ImGuiWindowFlags_NoSavedSettings))
+        if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
+        {
+            // Retrieve settings from .ini file
+            window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
+            SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
+            window->Pos = ImVec2(settings->Pos.x, settings->Pos.y);
+            window->Collapsed = settings->Collapsed;
+            if (settings->Size.x > 0 && settings->Size.y > 0)
+                size = ImVec2(settings->Size.x, settings->Size.y);
+        }
+    window->Size = window->SizeFull = ImFloor(size);
+    window->DC.CursorStartPos = window->DC.CursorMaxPos = window->Pos; // So first call to CalcContentSize() doesn't return crazy values
+
+    if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0)
+    {
+        window->AutoFitFramesX = window->AutoFitFramesY = 2;
+        window->AutoFitOnlyGrows = false;
+    }
+    else
+    {
+        if (window->Size.x <= 0.0f)
+            window->AutoFitFramesX = 2;
+        if (window->Size.y <= 0.0f)
+            window->AutoFitFramesY = 2;
+        window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0);
+    }
+
+    g.WindowsFocusOrder.push_back(window);
+    if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus)
+        g.Windows.push_front(window); // Quite slow but rare and only once
+    else
+        g.Windows.push_back(window);
+    return window;
+}
+
+static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
+    {
+        // Using -1,-1 on either X/Y axis to preserve the current size.
+        ImRect cr = g.NextWindowData.SizeConstraintRect;
+        new_size.x = (cr.Min.x >= 0 && cr.Max.x >= 0) ? ImClamp(new_size.x, cr.Min.x, cr.Max.x) : window->SizeFull.x;
+        new_size.y = (cr.Min.y >= 0 && cr.Max.y >= 0) ? ImClamp(new_size.y, cr.Min.y, cr.Max.y) : window->SizeFull.y;
+        if (g.NextWindowData.SizeCallback)
+        {
+            ImGuiSizeCallbackData data;
+            data.UserData = g.NextWindowData.SizeCallbackUserData;
+            data.Pos = window->Pos;
+            data.CurrentSize = window->SizeFull;
+            data.DesiredSize = new_size;
+            g.NextWindowData.SizeCallback(&data);
+            new_size = data.DesiredSize;
+        }
+        new_size.x = IM_FLOOR(new_size.x);
+        new_size.y = IM_FLOOR(new_size.y);
+    }
+
+    // Minimum size
+    if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize)))
+    {
+        ImGuiWindow* window_for_height = window;
+        new_size = ImMax(new_size, g.Style.WindowMinSize);
+        new_size.y = ImMax(new_size.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
+    }
+    return new_size;
+}
+
+static ImVec2 CalcWindowContentSize(ImGuiWindow* window)
+{
+    if (window->Collapsed)
+        if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+            return window->ContentSize;
+    if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0)
+        return window->ContentSize;
+
+    ImVec2 sz;
+    sz.x = IM_FLOOR((window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : window->DC.CursorMaxPos.x - window->DC.CursorStartPos.x);
+    sz.y = IM_FLOOR((window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : window->DC.CursorMaxPos.y - window->DC.CursorStartPos.y);
+    return sz;
+}
+
+static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_contents)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiStyle& style = g.Style;
+    ImVec2 size_decorations = ImVec2(0.0f, window->TitleBarHeight() + window->MenuBarHeight());
+    ImVec2 size_pad = window->WindowPadding * 2.0f;
+    ImVec2 size_desired = size_contents + size_pad + size_decorations;
+    if (window->Flags & ImGuiWindowFlags_Tooltip)
+    {
+        // Tooltip always resize
+        return size_desired;
+    }
+    else
+    {
+        // Maximum window size is determined by the viewport size or monitor size
+        const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0;
+        const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0;
+        ImVec2 size_min = style.WindowMinSize;
+        if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
+            size_min = ImMin(size_min, ImVec2(4.0f, 4.0f));
+        ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f));
+
+        // When the window cannot fit all contents (either because of constraints, either because screen is too small),
+        // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
+        ImVec2 size_auto_fit_after_constraint = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+        bool will_have_scrollbar_x = (size_auto_fit_after_constraint.x - size_pad.x - size_decorations.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar);
+        bool will_have_scrollbar_y = (size_auto_fit_after_constraint.y - size_pad.y - size_decorations.y < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysVerticalScrollbar);
+        if (will_have_scrollbar_x)
+            size_auto_fit.y += style.ScrollbarSize;
+        if (will_have_scrollbar_y)
+            size_auto_fit.x += style.ScrollbarSize;
+        return size_auto_fit;
+    }
+}
+
+ImVec2 ImGui::CalcWindowExpectedSize(ImGuiWindow* window)
+{
+    ImVec2 size_contents = CalcWindowContentSize(window);
+    ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, size_contents);
+    ImVec2 size_final = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+    return size_final;
+}
+
+static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags)
+{
+    if (flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup))
+        return ImGuiCol_PopupBg;
+    if (flags & ImGuiWindowFlags_ChildWindow)
+        return ImGuiCol_ChildBg;
+    return ImGuiCol_WindowBg;
+}
+
+static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& corner_target, const ImVec2& corner_norm, ImVec2* out_pos, ImVec2* out_size)
+{
+    ImVec2 pos_min = ImLerp(corner_target, window->Pos, corner_norm);                // Expected window upper-left
+    ImVec2 pos_max = ImLerp(window->Pos + window->Size, corner_target, corner_norm); // Expected window lower-right
+    ImVec2 size_expected = pos_max - pos_min;
+    ImVec2 size_constrained = CalcWindowSizeAfterConstraint(window, size_expected);
+    *out_pos = pos_min;
+    if (corner_norm.x == 0.0f)
+        out_pos->x -= (size_constrained.x - size_expected.x);
+    if (corner_norm.y == 0.0f)
+        out_pos->y -= (size_constrained.y - size_expected.y);
+    *out_size = size_constrained;
+}
+
+struct ImGuiResizeGripDef
+{
+    ImVec2  CornerPosN;
+    ImVec2  InnerDir;
+    int     AngleMin12, AngleMax12;
+};
+
+static const ImGuiResizeGripDef resize_grip_def[4] =
+{
+    { ImVec2(1,1), ImVec2(-1,-1), 0, 3 }, // Lower-right
+    { ImVec2(0,1), ImVec2(+1,-1), 3, 6 }, // Lower-left
+    { ImVec2(0,0), ImVec2(+1,+1), 6, 9 }, // Upper-left (Unused)
+    { ImVec2(1,0), ImVec2(-1,+1), 9,12 }, // Upper-right (Unused)
+};
+
+static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness)
+{
+    ImRect rect = window->Rect();
+    if (thickness == 0.0f) rect.Max -= ImVec2(1,1);
+    if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness,    rect.Max.x - perp_padding, rect.Min.y + thickness);      // Top
+    if (border_n == 1) return ImRect(rect.Max.x - thickness,    rect.Min.y + perp_padding, rect.Max.x + thickness,    rect.Max.y - perp_padding);   // Right
+    if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness,    rect.Max.x - perp_padding, rect.Max.y + thickness);      // Bottom
+    if (border_n == 3) return ImRect(rect.Min.x - thickness,    rect.Min.y + perp_padding, rect.Min.x + thickness,    rect.Max.y - perp_padding);   // Left
+    IM_ASSERT(0);
+    return ImRect();
+}
+
+// 0..3: corners (Lower-right, Lower-left, Unused, Unused)
+// 4..7: borders (Top, Right, Bottom, Left)
+ImGuiID ImGui::GetWindowResizeID(ImGuiWindow* window, int n)
+{
+    IM_ASSERT(n >= 0 && n <= 7);
+    ImGuiID id = window->ID;
+    id = ImHashStr("#RESIZE", 0, id);
+    id = ImHashData(&n, sizeof(int), id);
+    return id;
+}
+
+// Handle resize for: Resize Grips, Borders, Gamepad
+// Return true when using auto-fit (double click on resize grip)
+static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4])
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindowFlags flags = window->Flags;
+
+    if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
+        return false;
+    if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit/fallback Debug window.
+        return false;
+
+    bool ret_auto_fit = false;
+    const int resize_border_count = g.IO.ConfigWindowsResizeFromEdges ? 4 : 0;
+    const float grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
+    const float grip_hover_inner_size = IM_FLOOR(grip_draw_size * 0.75f);
+    const float grip_hover_outer_size = g.IO.ConfigWindowsResizeFromEdges ? WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS : 0.0f;
+
+    ImVec2 pos_target(FLT_MAX, FLT_MAX);
+    ImVec2 size_target(FLT_MAX, FLT_MAX);
+
+    // Resize grips and borders are on layer 1
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
+
+    // Manual resize grips
+    PushID("#RESIZE");
+    for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
+    {
+        const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
+        const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
+
+        // Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
+        ImRect resize_rect(corner - grip.InnerDir * grip_hover_outer_size, corner + grip.InnerDir * grip_hover_inner_size);
+        if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x);
+        if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
+        bool hovered, held;
+        ButtonBehavior(resize_rect, window->GetID(resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
+        //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
+        if (hovered || held)
+            g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
+
+        if (held && g.IO.MouseDoubleClicked[0] && resize_grip_n == 0)
+        {
+            // Manual auto-fit when double-clicking
+            size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+            ret_auto_fit = true;
+            ClearActiveID();
+        }
+        else if (held)
+        {
+            // Resize from any of the four corners
+            // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
+            ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPosN); // Corner of the window corresponding to our corner grip
+            CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPosN, &pos_target, &size_target);
+        }
+        if (resize_grip_n == 0 || held || hovered)
+            resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip);
+    }
+    for (int border_n = 0; border_n < resize_border_count; border_n++)
+    {
+        bool hovered, held;
+        ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS);
+        ButtonBehavior(border_rect, window->GetID(border_n + 4), &hovered, &held, ImGuiButtonFlags_FlattenChildren);
+        //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
+        if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held)
+        {
+            g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
+            if (held)
+                *border_held = border_n;
+        }
+        if (held)
+        {
+            ImVec2 border_target = window->Pos;
+            ImVec2 border_posn;
+            if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Top
+            if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Right
+            if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Bottom
+            if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Left
+            CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target);
+        }
+    }
+    PopID();
+
+    // Restore nav layer
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+
+    // Navigation resize (keyboard/gamepad)
+    if (g.NavWindowingTarget && g.NavWindowingTarget->RootWindow == window)
+    {
+        ImVec2 nav_resize_delta;
+        if (g.NavInputSource == ImGuiInputSource_NavKeyboard && g.IO.KeyShift)
+            nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down);
+        if (g.NavInputSource == ImGuiInputSource_NavGamepad)
+            nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_Down);
+        if (nav_resize_delta.x != 0.0f || nav_resize_delta.y != 0.0f)
+        {
+            const float NAV_RESIZE_SPEED = 600.0f;
+            nav_resize_delta *= ImFloor(NAV_RESIZE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y));
+            g.NavWindowingToggleLayer = false;
+            g.NavDisableMouseHover = true;
+            resize_grip_col[0] = GetColorU32(ImGuiCol_ResizeGripActive);
+            // FIXME-NAV: Should store and accumulate into a separate size buffer to handle sizing constraints properly, right now a constraint will make us stuck.
+            size_target = CalcWindowSizeAfterConstraint(window, window->SizeFull + nav_resize_delta);
+        }
+    }
+
+    // Apply back modified position/size to window
+    if (size_target.x != FLT_MAX)
+    {
+        window->SizeFull = size_target;
+        MarkIniSettingsDirty(window);
+    }
+    if (pos_target.x != FLT_MAX)
+    {
+        window->Pos = ImFloor(pos_target);
+        MarkIniSettingsDirty(window);
+    }
+
+    window->Size = window->SizeFull;
+    return ret_auto_fit;
+}
+
+static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& rect, const ImVec2& padding)
+{
+    ImGuiContext& g = *GImGui;
+    ImVec2 size_for_clamping = (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) ? ImVec2(window->Size.x, window->TitleBarHeight()) : window->Size;
+    window->Pos = ImMin(rect.Max - padding, ImMax(window->Pos + size_for_clamping, rect.Min + padding) - size_for_clamping);
+}
+
+static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    float rounding = window->WindowRounding;
+    float border_size = window->WindowBorderSize;
+    if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground))
+        window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
+
+    int border_held = window->ResizeBorderHeld;
+    if (border_held != -1)
+    {
+        struct ImGuiResizeBorderDef
+        {
+            ImVec2 InnerDir;
+            ImVec2 CornerPosN1, CornerPosN2;
+            float  OuterAngle;
+        };
+        static const ImGuiResizeBorderDef resize_border_def[4] =
+        {
+            { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top
+            { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right
+            { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom
+            { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f }  // Left
+        };
+        const ImGuiResizeBorderDef& def = resize_border_def[border_held];
+        ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
+        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle);
+        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI*0.25f);
+        window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual
+    }
+    if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
+    {
+        float y = window->Pos.y + window->TitleBarHeight() - 1;
+        window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize);
+    }
+}
+
+// Draw background and borders
+// Draw and handle scrollbars
+void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiStyle& style = g.Style;
+    ImGuiWindowFlags flags = window->Flags;
+
+    // Ensure that ScrollBar doesn't read last frame's SkipItems
+    window->SkipItems = false;
+
+    // Draw window + handle manual resize
+    // As we highlight the title bar when want_focus is set, multiple reappearing windows will have have their title bar highlighted on their reappearing frame.
+    const float window_rounding = window->WindowRounding;
+    const float window_border_size = window->WindowBorderSize;
+    if (window->Collapsed)
+    {
+        // Title bar only
+        float backup_border_size = style.FrameBorderSize;
+        g.Style.FrameBorderSize = window->WindowBorderSize;
+        ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);
+        RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);
+        g.Style.FrameBorderSize = backup_border_size;
+    }
+    else
+    {
+        // Window background
+        if (!(flags & ImGuiWindowFlags_NoBackground))
+        {
+            ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
+            bool override_alpha = false;
+            float alpha = 1.0f;
+            if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha)
+            {
+                alpha = g.NextWindowData.BgAlphaVal;
+                override_alpha = true;
+            }
+            if (override_alpha)
+                bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT);
+            window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
+        }
+
+        // Title bar
+        if (!(flags & ImGuiWindowFlags_NoTitleBar))
+        {
+            ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
+            window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top);
+        }
+
+        // Menu bar
+        if (flags & ImGuiWindowFlags_MenuBar)
+        {
+            ImRect menu_bar_rect = window->MenuBarRect();
+            menu_bar_rect.ClipWith(window->Rect());  // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
+            window->DrawList->AddRectFilled(menu_bar_rect.Min + ImVec2(window_border_size, 0), menu_bar_rect.Max - ImVec2(window_border_size, 0), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
+            if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
+                window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
+        }
+
+        // Scrollbars
+        if (window->ScrollbarX)
+            Scrollbar(ImGuiAxis_X);
+        if (window->ScrollbarY)
+            Scrollbar(ImGuiAxis_Y);
+
+        // Render resize grips (after their input handling so we don't have a frame of latency)
+        if (!(flags & ImGuiWindowFlags_NoResize))
+        {
+            for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
+            {
+                const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
+                const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
+                window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, resize_grip_draw_size) : ImVec2(resize_grip_draw_size, window_border_size)));
+                window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(resize_grip_draw_size, window_border_size) : ImVec2(window_border_size, resize_grip_draw_size)));
+                window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12);
+                window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]);
+            }
+        }
+
+        // Borders
+        RenderWindowOuterBorders(window);
+    }
+}
+
+// Render title text, collapse button, close button
+void ImGui::RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiStyle& style = g.Style;
+    ImGuiWindowFlags flags = window->Flags;
+
+    const bool has_close_button = (p_open != NULL);
+    const bool has_collapse_button = !(flags & ImGuiWindowFlags_NoCollapse) && (style.WindowMenuButtonPosition != ImGuiDir_None);
+
+    // Close & Collapse button are on the Menu NavLayer and don't default focus (unless there's nothing else on that layer)
+    const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
+    window->DC.ItemFlags |= ImGuiItemFlags_NoNavDefaultFocus;
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
+
+    // Layout buttons
+    // FIXME: Would be nice to generalize the subtleties expressed here into reusable code.
+    float pad_l = style.FramePadding.x;
+    float pad_r = style.FramePadding.x;
+    float button_sz = g.FontSize;
+    ImVec2 close_button_pos;
+    ImVec2 collapse_button_pos;
+    if (has_close_button)
+    {
+        pad_r += button_sz;
+        close_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+    }
+    if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Right)
+    {
+        pad_r += button_sz;
+        collapse_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+    }
+    if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Left)
+    {
+        collapse_button_pos = ImVec2(title_bar_rect.Min.x + pad_l - style.FramePadding.x, title_bar_rect.Min.y);
+        pad_l += button_sz;
+    }
+
+    // Collapse button (submitting first so it gets priority when choosing a navigation init fallback)
+    if (has_collapse_button)
+        if (CollapseButton(window->GetID("#COLLAPSE"), collapse_button_pos))
+            window->WantCollapseToggle = true; // Defer actual collapsing to next frame as we are too far in the Begin() function
+
+    // Close button
+    if (has_close_button)
+        if (CloseButton(window->GetID("#CLOSE"), close_button_pos))
+            *p_open = false;
+
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+    window->DC.ItemFlags = item_flags_backup;
+
+    // Title bar text (with: horizontal alignment, avoiding collapse/close button, optional "unsaved document" marker)
+    // FIXME: Refactor text alignment facilities along with RenderText helpers, this is WAY too much messy code..
+    const char* UNSAVED_DOCUMENT_MARKER = "*";
+    const float marker_size_x = (flags & ImGuiWindowFlags_UnsavedDocument) ? CalcTextSize(UNSAVED_DOCUMENT_MARKER, NULL, false).x : 0.0f;
+    const ImVec2 text_size = CalcTextSize(name, NULL, true) + ImVec2(marker_size_x, 0.0f);
+
+    // As a nice touch we try to ensure that centered title text doesn't get affected by visibility of Close/Collapse button,
+    // while uncentered title text will still reach edges correct.
+    if (pad_l > style.FramePadding.x)
+        pad_l += g.Style.ItemInnerSpacing.x;
+    if (pad_r > style.FramePadding.x)
+        pad_r += g.Style.ItemInnerSpacing.x;
+    if (style.WindowTitleAlign.x > 0.0f && style.WindowTitleAlign.x < 1.0f)
+    {
+        float centerness = ImSaturate(1.0f - ImFabs(style.WindowTitleAlign.x - 0.5f) * 2.0f); // 0.0f on either edges, 1.0f on center
+        float pad_extend = ImMin(ImMax(pad_l, pad_r), title_bar_rect.GetWidth() - pad_l - pad_r - text_size.x);
+        pad_l = ImMax(pad_l, pad_extend * centerness);
+        pad_r = ImMax(pad_r, pad_extend * centerness);
+    }
+
+    ImRect layout_r(title_bar_rect.Min.x + pad_l, title_bar_rect.Min.y, title_bar_rect.Max.x - pad_r, title_bar_rect.Max.y);
+    ImRect clip_r(layout_r.Min.x, layout_r.Min.y, layout_r.Max.x + g.Style.ItemInnerSpacing.x, layout_r.Max.y);
+    //if (g.IO.KeyCtrl) window->DrawList->AddRect(layout_r.Min, layout_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG]
+    RenderTextClipped(layout_r.Min, layout_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_r);
+    if (flags & ImGuiWindowFlags_UnsavedDocument)
+    {
+        ImVec2 marker_pos = ImVec2(ImMax(layout_r.Min.x, layout_r.Min.x + (layout_r.GetWidth() - text_size.x) * style.WindowTitleAlign.x) + text_size.x, layout_r.Min.y) + ImVec2(2 - marker_size_x, 0.0f);
+        ImVec2 off = ImVec2(0.0f, IM_FLOOR(-g.FontSize * 0.25f));
+        RenderTextClipped(marker_pos + off, layout_r.Max + off, UNSAVED_DOCUMENT_MARKER, NULL, NULL, ImVec2(0, style.WindowTitleAlign.y), &clip_r);
+    }
+}
+
+void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window)
+{
+    window->ParentWindow = parent_window;
+    window->RootWindow = window->RootWindowForTitleBarHighlight = window->RootWindowForNav = window;
+    if (parent_window && (flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
+        window->RootWindow = parent_window->RootWindow;
+    if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
+        window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight;
+    while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened)
+    {
+        IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL);
+        window->RootWindowForNav = window->RootWindowForNav->ParentWindow;
+    }
+}
+
+// Push a new Dear ImGui window to add widgets to.
+// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
+// - Begin/End can be called multiple times during the frame with the same window name to append content.
+// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file).
+//   You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file.
+// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned.
+// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed.
+bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    IM_ASSERT(name != NULL && name[0] != '\0');     // Window name required
+    IM_ASSERT(g.WithinFrameScope);                  // Forgot to call ImGui::NewFrame()
+    IM_ASSERT(g.FrameCountEnded != g.FrameCount);   // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet
+
+    // Find or create
+    ImGuiWindow* window = FindWindowByName(name);
+    const bool window_just_created = (window == NULL);
+    if (window_just_created)
+    {
+        ImVec2 size_on_first_use = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) ? g.NextWindowData.SizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here.
+        window = CreateNewWindow(name, size_on_first_use, flags);
+    }
+
+    // Automatically disable manual moving/resizing when NoInputs is set
+    if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs)
+        flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
+
+    if (flags & ImGuiWindowFlags_NavFlattened)
+        IM_ASSERT(flags & ImGuiWindowFlags_ChildWindow);
+
+    const int current_frame = g.FrameCount;
+    const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
+    window->IsFallbackWindow = (g.CurrentWindowStack.Size == 0 && g.WithinFrameScopeWithImplicitWindow);
+
+    // Update the Appearing flag
+    bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on
+    const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0);
+    if (flags & ImGuiWindowFlags_Popup)
+    {
+        ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
+        window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
+        window_just_activated_by_user |= (window != popup_ref.Window);
+    }
+    window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize);
+    if (window->Appearing)
+        SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
+
+    // Update Flags, LastFrameActive, BeginOrderXXX fields
+    if (first_begin_of_the_frame)
+    {
+        window->Flags = (ImGuiWindowFlags)flags;
+        window->LastFrameActive = current_frame;
+        window->LastTimeActive = (float)g.Time;
+        window->BeginOrderWithinParent = 0;
+        window->BeginOrderWithinContext = (short)(g.WindowsActiveCount++);
+    }
+    else
+    {
+        flags = window->Flags;
+    }
+
+    // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
+    ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back();
+    ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow;
+    IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
+
+    // We allow window memory to be compacted so recreate the base stack when needed.
+    if (window->IDStack.Size == 0)
+        window->IDStack.push_back(window->ID);
+
+    // Add to stack
+    // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
+    g.CurrentWindowStack.push_back(window);
+    g.CurrentWindow = NULL;
+    ErrorCheckBeginEndCompareStacksSize(window, true);
+    if (flags & ImGuiWindowFlags_Popup)
+    {
+        ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
+        popup_ref.Window = window;
+        g.BeginPopupStack.push_back(popup_ref);
+        window->PopupId = popup_ref.PopupId;
+    }
+
+    if (window_just_appearing_after_hidden_for_resize && !(flags & ImGuiWindowFlags_ChildWindow))
+        window->NavLastIds[0] = 0;
+
+    // Update ->RootWindow and others pointers (before any possible call to FocusWindow)
+    if (first_begin_of_the_frame)
+        UpdateWindowParentAndRootLinks(window, flags, parent_window);
+
+    // Process SetNextWindow***() calls
+    bool window_pos_set_by_api = false;
+    bool window_size_x_set_by_api = false, window_size_y_set_by_api = false;
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos)
+    {
+        window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0;
+        if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f)
+        {
+            // May be processed on the next frame if this is our first frame and we are measuring size
+            // FIXME: Look into removing the branch so everything can go through this same code path for consistency.
+            window->SetWindowPosVal = g.NextWindowData.PosVal;
+            window->SetWindowPosPivot = g.NextWindowData.PosPivotVal;
+            window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+        }
+        else
+        {
+            SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
+        }
+    }
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)
+    {
+        window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
+        window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
+        SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
+    }
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize)
+        window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal;
+    else if (first_begin_of_the_frame)
+        window->ContentSizeExplicit = ImVec2(0.0f, 0.0f);
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed)
+        SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
+    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus)
+        FocusWindow(window);
+    if (window->Appearing)
+        SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
+
+    // When reusing window again multiple times a frame, just append content (don't need to setup again)
+    if (first_begin_of_the_frame)
+    {
+        // Initialize
+        const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345)
+        window->Active = true;
+        window->HasCloseButton = (p_open != NULL);
+        window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX);
+        window->IDStack.resize(1);
+
+        // Restore buffer capacity when woken from a compacted state, to avoid
+        if (window->MemoryCompacted)
+            GcAwakeTransientWindowBuffers(window);
+
+        // Update stored window name when it changes (which can _only_ happen with the "###" operator, so the ID would stay unchanged).
+        // The title bar always display the 'name' parameter, so we only update the string storage if it needs to be visible to the end-user elsewhere.
+        bool window_title_visible_elsewhere = false;
+        if (g.NavWindowingList != NULL && (window->Flags & ImGuiWindowFlags_NoNavFocus) == 0)   // Window titles visible when using CTRL+TAB
+            window_title_visible_elsewhere = true;
+        if (window_title_visible_elsewhere && !window_just_created && strcmp(name, window->Name) != 0)
+        {
+            size_t buf_len = (size_t)window->NameBufLen;
+            window->Name = ImStrdupcpy(window->Name, &buf_len, name);
+            window->NameBufLen = (int)buf_len;
+        }
+
+        // UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS
+
+        // Update contents size from last frame for auto-fitting (or use explicit size)
+        window->ContentSize = CalcWindowContentSize(window);
+        if (window->HiddenFramesCanSkipItems > 0)
+            window->HiddenFramesCanSkipItems--;
+        if (window->HiddenFramesCannotSkipItems > 0)
+            window->HiddenFramesCannotSkipItems--;
+
+        // Hide new windows for one frame until they calculate their size
+        if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api))
+            window->HiddenFramesCannotSkipItems = 1;
+
+        // Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows)
+        // We reset Size/ContentSize for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size.
+        if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0)
+        {
+            window->HiddenFramesCannotSkipItems = 1;
+            if (flags & ImGuiWindowFlags_AlwaysAutoResize)
+            {
+                if (!window_size_x_set_by_api)
+                    window->Size.x = window->SizeFull.x = 0.f;
+                if (!window_size_y_set_by_api)
+                    window->Size.y = window->SizeFull.y = 0.f;
+                window->ContentSize = ImVec2(0.f, 0.f);
+            }
+        }
+
+        // SELECT VIEWPORT
+        // FIXME-VIEWPORT: In the docking/viewport branch, this is the point where we select the current viewport (which may affect the style)
+        SetCurrentWindow(window);
+
+        // LOCK BORDER SIZE AND PADDING FOR THE FRAME (so that altering them doesn't cause inconsistencies)
+
+        if (flags & ImGuiWindowFlags_ChildWindow)
+            window->WindowBorderSize = style.ChildBorderSize;
+        else
+            window->WindowBorderSize = ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
+        window->WindowPadding = style.WindowPadding;
+        if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
+            window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
+
+        // Collapse window by double-clicking on title bar
+        // At this point we don't have a clipping rectangle setup yet, so we can use the title bar area for hit detection and drawing
+        if (!(flags & ImGuiWindowFlags_NoTitleBar) && !(flags & ImGuiWindowFlags_NoCollapse))
+        {
+            // We don't use a regular button+id to test for double-click on title bar (mostly due to legacy reason, could be fixed), so verify that we don't have items over the title bar.
+            ImRect title_bar_rect = window->TitleBarRect();
+            if (g.HoveredWindow == window && g.HoveredId == 0 && g.HoveredIdPreviousFrame == 0 && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseDoubleClicked[0])
+                window->WantCollapseToggle = true;
+            if (window->WantCollapseToggle)
+            {
+                window->Collapsed = !window->Collapsed;
+                MarkIniSettingsDirty(window);
+                FocusWindow(window);
+            }
+        }
+        else
+        {
+            window->Collapsed = false;
+        }
+        window->WantCollapseToggle = false;
+
+        // SIZE
+
+        // Calculate auto-fit size, handle automatic resize
+        const ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, window->ContentSize);
+        bool use_current_size_for_scrollbar_x = window_just_created;
+        bool use_current_size_for_scrollbar_y = window_just_created;
+        if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window->Collapsed)
+        {
+            // Using SetNextWindowSize() overrides ImGuiWindowFlags_AlwaysAutoResize, so it can be used on tooltips/popups, etc.
+            if (!window_size_x_set_by_api)
+            {
+                window->SizeFull.x = size_auto_fit.x;
+                use_current_size_for_scrollbar_x = true;
+            }
+            if (!window_size_y_set_by_api)
+            {
+                window->SizeFull.y = size_auto_fit.y;
+                use_current_size_for_scrollbar_y = true;
+            }
+        }
+        else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
+        {
+            // Auto-fit may only grow window during the first few frames
+            // We still process initial auto-fit on collapsed windows to get a window width, but otherwise don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed.
+            if (!window_size_x_set_by_api && window->AutoFitFramesX > 0)
+            {
+                window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
+                use_current_size_for_scrollbar_x = true;
+            }
+            if (!window_size_y_set_by_api && window->AutoFitFramesY > 0)
+            {
+                window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
+                use_current_size_for_scrollbar_y = true;
+            }
+            if (!window->Collapsed)
+                MarkIniSettingsDirty(window);
+        }
+
+        // Apply minimum/maximum window size constraints and final size
+        window->SizeFull = CalcWindowSizeAfterConstraint(window, window->SizeFull);
+        window->Size = window->Collapsed && !(flags & ImGuiWindowFlags_ChildWindow) ? window->TitleBarRect().GetSize() : window->SizeFull;
+
+        // Decoration size
+        const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+
+        // POSITION
+
+        // Popup latch its initial position, will position itself when it appears next frame
+        if (window_just_activated_by_user)
+        {
+            window->AutoPosLastDirection = ImGuiDir_None;
+            if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api)
+                window->Pos = g.BeginPopupStack.back().OpenPopupPos;
+        }
+
+        // Position child window
+        if (flags & ImGuiWindowFlags_ChildWindow)
+        {
+            IM_ASSERT(parent_window && parent_window->Active);
+            window->BeginOrderWithinParent = (short)parent_window->DC.ChildWindows.Size;
+            parent_window->DC.ChildWindows.push_back(window);
+            if (!(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api && !window_is_child_tooltip)
+                window->Pos = parent_window->DC.CursorPos;
+        }
+
+        const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
+        if (window_pos_with_pivot)
+            SetWindowPos(window, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
+        else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
+            window->Pos = FindBestWindowPosForPopup(window);
+        else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
+            window->Pos = FindBestWindowPosForPopup(window);
+        else if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api && !window_is_child_tooltip)
+            window->Pos = FindBestWindowPosForPopup(window);
+
+        // Clamp position/size so window stays visible within its viewport or monitor
+        // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
+        ImRect viewport_rect(GetViewportRect());
+        if (!window_pos_set_by_api && !(flags & ImGuiWindowFlags_ChildWindow) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+        {
+            ImVec2 clamp_padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding);
+            if (viewport_rect.GetWidth() > 0 && viewport_rect.GetHeight() > 0.0f)
+            {
+                ClampWindowRect(window, viewport_rect, clamp_padding);
+            }
+        }
+        window->Pos = ImFloor(window->Pos);
+
+        // Lock window rounding for the frame (so that altering them doesn't cause inconsistencies)
+        window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
+
+        // Apply window focus (new and reactivated windows are moved to front)
+        bool want_focus = false;
+        if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
+        {
+            if (flags & ImGuiWindowFlags_Popup)
+                want_focus = true;
+            else if ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) == 0)
+                want_focus = true;
+        }
+
+        // Handle manual resize: Resize Grips, Borders, Gamepad
+        int border_held = -1;
+        ImU32 resize_grip_col[4] = {};
+        const int resize_grip_count = g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it.
+        const float resize_grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
+        if (!window->Collapsed)
+            if (UpdateWindowManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0]))
+                use_current_size_for_scrollbar_x = use_current_size_for_scrollbar_y = true;
+        window->ResizeBorderHeld = (signed char)border_held;
+
+        // SCROLLBAR VISIBILITY
+
+        // Update scrollbar visibility (based on the Size that was effective during last frame or the auto-resized Size).
+        if (!window->Collapsed)
+        {
+            // When reading the current size we need to read it after size constraints have been applied.
+            // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again.
+            ImVec2 avail_size_from_current_frame = ImVec2(window->SizeFull.x, window->SizeFull.y - decoration_up_height);
+            ImVec2 avail_size_from_last_frame = window->InnerRect.GetSize() + window->ScrollbarSizes;
+            ImVec2 needed_size_from_last_frame = window_just_created ? ImVec2(0, 0) : window->ContentSize + window->WindowPadding * 2.0f;
+            float size_x_for_scrollbars = use_current_size_for_scrollbar_x ? avail_size_from_current_frame.x : avail_size_from_last_frame.x;
+            float size_y_for_scrollbars = use_current_size_for_scrollbar_y ? avail_size_from_current_frame.y : avail_size_from_last_frame.y;
+            //bool scrollbar_y_from_last_frame = window->ScrollbarY; // FIXME: May want to use that in the ScrollbarX expression? How many pros vs cons?
+            window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar));
+            window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((needed_size_from_last_frame.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
+            if (window->ScrollbarX && !window->ScrollbarY)
+                window->ScrollbarY = (needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar);
+            window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
+        }
+
+        // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
+        // Update various regions. Variables they depends on should be set above in this function.
+        // We set this up after processing the resize grip so that our rectangles doesn't lag by a frame.
+
+        // Outer rectangle
+        // Not affected by window border size. Used by:
+        // - FindHoveredWindow() (w/ extra padding when border resize is enabled)
+        // - Begin() initial clipping rect for drawing window background and borders.
+        // - Begin() clipping whole child
+        const ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect;
+        const ImRect outer_rect = window->Rect();
+        const ImRect title_bar_rect = window->TitleBarRect();
+        window->OuterRectClipped = outer_rect;
+        window->OuterRectClipped.ClipWith(host_rect);
+
+        // Inner rectangle
+        // Not affected by window border size. Used by:
+        // - InnerClipRect
+        // - ScrollToBringRectIntoView()
+        // - NavUpdatePageUpPageDown()
+        // - Scrollbar()
+        window->InnerRect.Min.x = window->Pos.x;
+        window->InnerRect.Min.y = window->Pos.y + decoration_up_height;
+        window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
+        window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
+
+        // Inner clipping rectangle.
+        // Will extend a little bit outside the normal work region.
+        // This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
+        // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
+        // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
+        // Affected by window/frame border size. Used by:
+        // - Begin() initial clip rect
+        float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize);
+        window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+        window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size);
+        window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+        window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize);
+        window->InnerClipRect.ClipWithFull(host_rect);
+
+        // Default item width. Make it proportional to window size if window manually resizes
+        if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize))
+            window->ItemWidthDefault = ImFloor(window->Size.x * 0.65f);
+        else
+            window->ItemWidthDefault = ImFloor(g.FontSize * 16.0f);
+
+        // SCROLLING
+
+        // Lock down maximum scrolling
+        // The value of ScrollMax are ahead from ScrollbarX/ScrollbarY which is intentionally using InnerRect from previous rect in order to accommodate
+        // for right/bottom aligned items without creating a scrollbar.
+        window->ScrollMax.x = ImMax(0.0f, window->ContentSize.x + window->WindowPadding.x * 2.0f - window->InnerRect.GetWidth());
+        window->ScrollMax.y = ImMax(0.0f, window->ContentSize.y + window->WindowPadding.y * 2.0f - window->InnerRect.GetHeight());
+
+        // Apply scrolling
+        window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window, true);
+        window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
+
+        // DRAWING
+
+        // Setup draw list and outer clipping rectangle
+        window->DrawList->Clear();
+        window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
+        PushClipRect(host_rect.Min, host_rect.Max, false);
+
+        // Draw modal window background (darkens what is behind them, all viewports)
+        const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetTopMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0;
+        const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && (window == g.NavWindowingTargetAnim->RootWindow);
+        if (dim_bg_for_modal || dim_bg_for_window_list)
+        {
+            const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio);
+            window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col);
+        }
+
+        // Draw navigation selection/windowing rectangle background
+        if (dim_bg_for_window_list && window == g.NavWindowingTargetAnim)
+        {
+            ImRect bb = window->Rect();
+            bb.Expand(g.FontSize);
+            if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway
+                window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding);
+        }
+
+        // Since 1.71, child window can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call.
+        // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order.
+        // We disable this when the parent window has zero vertices, which is a common pattern leading to laying out multiple overlapping child.
+        // We also disabled this when we have dimming overlay behind this specific one child.
+        // FIXME: More code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected.
+        {
+            bool render_decorations_in_parent = false;
+            if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
+                if (window->DrawList->CmdBuffer.back().ElemCount == 0 && parent_window->DrawList->VtxBuffer.Size > 0)
+                    render_decorations_in_parent = true;
+            if (render_decorations_in_parent)
+                window->DrawList = parent_window->DrawList;
+
+            // Handle title bar, scrollbar, resize grips and resize borders
+            const ImGuiWindow* window_to_highlight = g.NavWindowingTarget ? g.NavWindowingTarget : g.NavWindow;
+            const bool title_bar_is_highlight = want_focus || (window_to_highlight && window->RootWindowForTitleBarHighlight == window_to_highlight->RootWindowForTitleBarHighlight);
+            RenderWindowDecorations(window, title_bar_rect, title_bar_is_highlight, resize_grip_count, resize_grip_col, resize_grip_draw_size);
+
+            if (render_decorations_in_parent)
+                window->DrawList = &window->DrawListInst;
+        }
+
+        // Draw navigation selection/windowing rectangle border
+        if (g.NavWindowingTargetAnim == window)
+        {
+            float rounding = ImMax(window->WindowRounding, g.Style.WindowRounding);
+            ImRect bb = window->Rect();
+            bb.Expand(g.FontSize);
+            if (bb.Contains(viewport_rect)) // If a window fits the entire viewport, adjust its highlight inward
+            {
+                bb.Expand(-g.FontSize - 1.0f);
+                rounding = window->WindowRounding;
+            }
+            window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f);
+        }
+
+        // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
+
+        // Work rectangle.
+        // Affected by window padding and border size. Used by:
+        // - Columns() for right-most edge
+        // - TreeNode(), CollapsingHeader() for right-most edge
+        // - BeginTabBar() for right-most edge
+        const bool allow_scrollbar_x = !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar);
+        const bool allow_scrollbar_y = !(flags & ImGuiWindowFlags_NoScrollbar);
+        const float work_rect_size_x = (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : ImMax(allow_scrollbar_x ? window->ContentSize.x : 0.0f, window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+        const float work_rect_size_y = (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : ImMax(allow_scrollbar_y ? window->ContentSize.y : 0.0f, window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
+        window->WorkRect.Min.x = ImFloor(window->InnerRect.Min.x - window->Scroll.x + ImMax(window->WindowPadding.x, window->WindowBorderSize));
+        window->WorkRect.Min.y = ImFloor(window->InnerRect.Min.y - window->Scroll.y + ImMax(window->WindowPadding.y, window->WindowBorderSize));
+        window->WorkRect.Max.x = window->WorkRect.Min.x + work_rect_size_x;
+        window->WorkRect.Max.y = window->WorkRect.Min.y + work_rect_size_y;
+
+        // [LEGACY] Content Region
+        // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
+        // Used by:
+        // - Mouse wheel scrolling + many other things
+        window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x;
+        window->ContentRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + decoration_up_height;
+        window->ContentRegionRect.Max.x = window->ContentRegionRect.Min.x + (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : (window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+        window->ContentRegionRect.Max.y = window->ContentRegionRect.Min.y + (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : (window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
+
+        // Setup drawing context
+        // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
+        window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x;
+        window->DC.GroupOffset.x = 0.0f;
+        window->DC.ColumnsOffset.x = 0.0f;
+        window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, decoration_up_height + window->WindowPadding.y - window->Scroll.y);
+        window->DC.CursorPos = window->DC.CursorStartPos;
+        window->DC.CursorPosPrevLine = window->DC.CursorPos;
+        window->DC.CursorMaxPos = window->DC.CursorStartPos;
+        window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f);
+        window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f;
+
+        window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+        window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+        window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext;
+        window->DC.NavLayerActiveMaskNext = 0x00;
+        window->DC.NavFocusScopeIdCurrent = parent_window ? parent_window->DC.NavFocusScopeIdCurrent : 0;
+        window->DC.NavHideHighlightOneFrame = false;
+        window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f);
+
+        window->DC.MenuBarAppending = false;
+        window->DC.MenuBarOffset.x = ImMax(ImMax(window->WindowPadding.x, style.ItemSpacing.x), g.NextWindowData.MenuBarOffsetMinVal.x);
+        window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y;
+        window->DC.MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
+        window->DC.TreeDepth = 0;
+        window->DC.TreeJumpToParentOnPopMask = 0x00;
+        window->DC.ChildWindows.resize(0);
+        window->DC.StateStorage = &window->StateStorage;
+        window->DC.CurrentColumns = NULL;
+        window->DC.LayoutType = ImGuiLayoutType_Vertical;
+        window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical;
+        window->DC.FocusCounterRegular = window->DC.FocusCounterTabStop = -1;
+
+        window->DC.ItemWidth = window->ItemWidthDefault;
+        window->DC.TextWrapPos = -1.0f; // disabled
+        window->DC.ItemFlagsStack.resize(0);
+        window->DC.ItemWidthStack.resize(0);
+        window->DC.TextWrapPosStack.resize(0);
+        window->DC.GroupStack.resize(0);
+        window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : ImGuiItemFlags_Default_;
+        if (parent_window)
+            window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
+
+        if (window->AutoFitFramesX > 0)
+            window->AutoFitFramesX--;
+        if (window->AutoFitFramesY > 0)
+            window->AutoFitFramesY--;
+
+        // Apply focus (we need to call FocusWindow() AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
+        if (want_focus)
+        {
+            FocusWindow(window);
+            NavInitWindow(window, false);
+        }
+
+        // Title bar
+        if (!(flags & ImGuiWindowFlags_NoTitleBar))
+            RenderWindowTitleBarContents(window, title_bar_rect, name, p_open);
+
+        // Pressing CTRL+C while holding on a window copy its content to the clipboard
+        // This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope.
+        // Maybe we can support CTRL+C on every element?
+        /*
+        if (g.ActiveId == move_id)
+            if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C))
+                LogToClipboard();
+        */
+
+        // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
+        // This is useful to allow creating context menus on title bar only, etc.
+        window->DC.LastItemId = window->MoveId;
+        window->DC.LastItemStatusFlags = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0;
+        window->DC.LastItemRect = title_bar_rect;
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+        if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
+            IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId);
+#endif
+    }
+    else
+    {
+        // Append
+        SetCurrentWindow(window);
+    }
+
+    PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true);
+
+    // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
+    if (first_begin_of_the_frame)
+        window->WriteAccessed = false;
+
+    window->BeginCount++;
+    g.NextWindowData.ClearFlags();
+
+    if (flags & ImGuiWindowFlags_ChildWindow)
+    {
+        // Child window can be out of sight and have "negative" clip windows.
+        // Mark them as collapsed so commands are skipped earlier (we can't manually collapse them because they have no title bar).
+        IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0);
+        if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+            if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y)
+                window->HiddenFramesCanSkipItems = 1;
+
+        // Hide along with parent or if parent is collapsed
+        if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0))
+            window->HiddenFramesCanSkipItems = 1;
+        if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0))
+            window->HiddenFramesCannotSkipItems = 1;
+    }
+
+    // Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point)
+    if (style.Alpha <= 0.0f)
+        window->HiddenFramesCanSkipItems = 1;
+
+    // Update the Hidden flag
+    window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0);
+
+    // Update the SkipItems flag, used to early out of all items functions (no layout required)
+    bool skip_items = false;
+    if (window->Collapsed || !window->Active || window->Hidden)
+        if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0)
+            skip_items = true;
+    window->SkipItems = skip_items;
+
+    return !skip_items;
+}
+
+void ImGui::End()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    // Error checking: verify that user hasn't called End() too many times!
+    if (g.CurrentWindowStack.Size <= 1 && g.WithinFrameScopeWithImplicitWindow)
+    {
+        IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size > 1, "Calling End() too many times!");
+        return;
+    }
+    IM_ASSERT(g.CurrentWindowStack.Size > 0);
+
+    // Error checking: verify that user doesn't directly call End() on a child window.
+    if (window->Flags & ImGuiWindowFlags_ChildWindow)
+        IM_ASSERT_USER_ERROR(g.WithinEndChild, "Must call EndChild() and not End()!");
+
+    // Close anything that is open
+    if (window->DC.CurrentColumns)
+        EndColumns();
+    PopClipRect();   // Inner window clip rectangle
+
+    // Stop logging
+    if (!(window->Flags & ImGuiWindowFlags_ChildWindow))    // FIXME: add more options for scope of logging
+        LogFinish();
+
+    // Pop from window stack
+    g.CurrentWindowStack.pop_back();
+    if (window->Flags & ImGuiWindowFlags_Popup)
+        g.BeginPopupStack.pop_back();
+    ErrorCheckBeginEndCompareStacksSize(window, false);
+    SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back());
+}
+
+void ImGui::BringWindowToFocusFront(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.WindowsFocusOrder.back() == window)
+        return;
+    for (int i = g.WindowsFocusOrder.Size - 2; i >= 0; i--) // We can ignore the top-most window
+        if (g.WindowsFocusOrder[i] == window)
+        {
+            memmove(&g.WindowsFocusOrder[i], &g.WindowsFocusOrder[i + 1], (size_t)(g.WindowsFocusOrder.Size - i - 1) * sizeof(ImGuiWindow*));
+            g.WindowsFocusOrder[g.WindowsFocusOrder.Size - 1] = window;
+            break;
+        }
+}
+
+void ImGui::BringWindowToDisplayFront(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* current_front_window = g.Windows.back();
+    if (current_front_window == window || current_front_window->RootWindow == window)
+        return;
+    for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window
+        if (g.Windows[i] == window)
+        {
+            memmove(&g.Windows[i], &g.Windows[i + 1], (size_t)(g.Windows.Size - i - 1) * sizeof(ImGuiWindow*));
+            g.Windows[g.Windows.Size - 1] = window;
+            break;
+        }
+}
+
+void ImGui::BringWindowToDisplayBack(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.Windows[0] == window)
+        return;
+    for (int i = 0; i < g.Windows.Size; i++)
+        if (g.Windows[i] == window)
+        {
+            memmove(&g.Windows[1], &g.Windows[0], (size_t)i * sizeof(ImGuiWindow*));
+            g.Windows[0] = window;
+            break;
+        }
+}
+
+// Moving window to front of display and set focus (which happens to be back of our sorted list)
+void ImGui::FocusWindow(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+
+    if (g.NavWindow != window)
+    {
+        g.NavWindow = window;
+        if (window && g.NavDisableMouseHover)
+            g.NavMousePosDirty = true;
+        g.NavInitRequest = false;
+        g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId
+        g.NavFocusScopeId = 0;
+        g.NavIdIsAlive = false;
+        g.NavLayer = ImGuiNavLayer_Main;
+        //IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL);
+    }
+
+    // Close popups if any
+    ClosePopupsOverWindow(window, false);
+
+    // Passing NULL allow to disable keyboard focus
+    if (!window)
+        return;
+
+    // Move the root window to the top of the pile
+    IM_ASSERT(window->RootWindow != NULL);
+    ImGuiWindow* focus_front_window = window->RootWindow; // NB: In docking branch this is window->RootWindowDockStop
+    ImGuiWindow* display_front_window = window->RootWindow;
+
+    // Steal focus on active widgets
+    if (focus_front_window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement may be unnecessary? Need further testing before removing it..
+        if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != focus_front_window)
+            ClearActiveID();
+
+    // Bring to front
+    BringWindowToFocusFront(focus_front_window);
+    if (((window->Flags | display_front_window->Flags) & ImGuiWindowFlags_NoBringToFrontOnFocus) == 0)
+        BringWindowToDisplayFront(display_front_window);
+}
+
+void ImGui::FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window)
+{
+    ImGuiContext& g = *GImGui;
+
+    int start_idx = g.WindowsFocusOrder.Size - 1;
+    if (under_this_window != NULL)
+    {
+        int under_this_window_idx = FindWindowFocusIndex(under_this_window);
+        if (under_this_window_idx != -1)
+            start_idx = under_this_window_idx - 1;
+    }
+    for (int i = start_idx; i >= 0; i--)
+    {
+        // We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user.
+        ImGuiWindow* window = g.WindowsFocusOrder[i];
+        if (window != ignore_window && window->WasActive && !(window->Flags & ImGuiWindowFlags_ChildWindow))
+            if ((window->Flags & (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs)) != (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs))
+            {
+                ImGuiWindow* focus_window = NavRestoreLastChildNavWindow(window);
+                FocusWindow(focus_window);
+                return;
+            }
+    }
+    FocusWindow(NULL);
+}
+
+void ImGui::SetCurrentFont(ImFont* font)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(font && font->IsLoaded());    // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
+    IM_ASSERT(font->Scale > 0.0f);
+    g.Font = font;
+    g.FontBaseSize = ImMax(1.0f, g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale);
+    g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f;
+
+    ImFontAtlas* atlas = g.Font->ContainerAtlas;
+    g.DrawListSharedData.TexUvWhitePixel = atlas->TexUvWhitePixel;
+    g.DrawListSharedData.Font = g.Font;
+    g.DrawListSharedData.FontSize = g.FontSize;
+}
+
+void ImGui::PushFont(ImFont* font)
+{
+    ImGuiContext& g = *GImGui;
+    if (!font)
+        font = GetDefaultFont();
+    SetCurrentFont(font);
+    g.FontStack.push_back(font);
+    g.CurrentWindow->DrawList->PushTextureID(font->ContainerAtlas->TexID);
+}
+
+void  ImGui::PopFont()
+{
+    ImGuiContext& g = *GImGui;
+    g.CurrentWindow->DrawList->PopTextureID();
+    g.FontStack.pop_back();
+    SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back());
+}
+
+void ImGui::PushItemFlag(ImGuiItemFlags option, bool enabled)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (enabled)
+        window->DC.ItemFlags |= option;
+    else
+        window->DC.ItemFlags &= ~option;
+    window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
+}
+
+void ImGui::PopItemFlag()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.ItemFlagsStack.pop_back();
+    window->DC.ItemFlags = window->DC.ItemFlagsStack.empty() ? ImGuiItemFlags_Default_ : window->DC.ItemFlagsStack.back();
+}
+
+// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system.
+void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus)
+{
+    PushItemFlag(ImGuiItemFlags_NoTabStop, !allow_keyboard_focus);
+}
+
+void ImGui::PopAllowKeyboardFocus()
+{
+    PopItemFlag();
+}
+
+void ImGui::PushButtonRepeat(bool repeat)
+{
+    PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat);
+}
+
+void ImGui::PopButtonRepeat()
+{
+    PopItemFlag();
+}
+
+void ImGui::PushTextWrapPos(float wrap_pos_x)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.TextWrapPos = wrap_pos_x;
+    window->DC.TextWrapPosStack.push_back(wrap_pos_x);
+}
+
+void ImGui::PopTextWrapPos()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.TextWrapPosStack.pop_back();
+    window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back();
+}
+
+bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent)
+{
+    if (window->RootWindow == potential_parent)
+        return true;
+    while (window != NULL)
+    {
+        if (window == potential_parent)
+            return true;
+        window = window->ParentWindow;
+    }
+    return false;
+}
+
+bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
+{
+    IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function
+    ImGuiContext& g = *GImGui;
+
+    if (flags & ImGuiHoveredFlags_AnyWindow)
+    {
+        if (g.HoveredWindow == NULL)
+            return false;
+    }
+    else
+    {
+        switch (flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows))
+        {
+        case ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows:
+            if (g.HoveredRootWindow != g.CurrentWindow->RootWindow)
+                return false;
+            break;
+        case ImGuiHoveredFlags_RootWindow:
+            if (g.HoveredWindow != g.CurrentWindow->RootWindow)
+                return false;
+            break;
+        case ImGuiHoveredFlags_ChildWindows:
+            if (g.HoveredWindow == NULL || !IsWindowChildOf(g.HoveredWindow, g.CurrentWindow))
+                return false;
+            break;
+        default:
+            if (g.HoveredWindow != g.CurrentWindow)
+                return false;
+            break;
+        }
+    }
+
+    if (!IsWindowContentHoverable(g.HoveredWindow, flags))
+        return false;
+    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+        if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId)
+            return false;
+    return true;
+}
+
+bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+
+    if (flags & ImGuiFocusedFlags_AnyWindow)
+        return g.NavWindow != NULL;
+
+    IM_ASSERT(g.CurrentWindow);     // Not inside a Begin()/End()
+    switch (flags & (ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows))
+    {
+    case ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows:
+        return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow;
+    case ImGuiFocusedFlags_RootWindow:
+        return g.NavWindow == g.CurrentWindow->RootWindow;
+    case ImGuiFocusedFlags_ChildWindows:
+        return g.NavWindow && IsWindowChildOf(g.NavWindow, g.CurrentWindow);
+    default:
+        return g.NavWindow == g.CurrentWindow;
+    }
+}
+
+// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext)
+// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmaticaly.
+// If you want a window to never be focused, you may use the e.g. NoInputs flag.
+bool ImGui::IsWindowNavFocusable(ImGuiWindow* window)
+{
+    return window->Active && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus);
+}
+
+float ImGui::GetWindowWidth()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->Size.x;
+}
+
+float ImGui::GetWindowHeight()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->Size.y;
+}
+
+ImVec2 ImGui::GetWindowPos()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    return window->Pos;
+}
+
+void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
+{
+    // Test condition (NB: bit 0 is always true) and clear flags for next time
+    if (cond && (window->SetWindowPosAllowFlags & cond) == 0)
+        return;
+
+    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+    window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+    window->SetWindowPosVal = ImVec2(FLT_MAX, FLT_MAX);
+
+    // Set
+    const ImVec2 old_pos = window->Pos;
+    window->Pos = ImFloor(pos);
+    ImVec2 offset = window->Pos - old_pos;
+    window->DC.CursorPos += offset;         // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
+    window->DC.CursorMaxPos += offset;      // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected.
+    window->DC.CursorStartPos += offset;
+}
+
+void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond)
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    SetWindowPos(window, pos, cond);
+}
+
+void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond)
+{
+    if (ImGuiWindow* window = FindWindowByName(name))
+        SetWindowPos(window, pos, cond);
+}
+
+ImVec2 ImGui::GetWindowSize()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->Size;
+}
+
+void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
+{
+    // Test condition (NB: bit 0 is always true) and clear flags for next time
+    if (cond && (window->SetWindowSizeAllowFlags & cond) == 0)
+        return;
+
+    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+    window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+
+    // Set
+    if (size.x > 0.0f)
+    {
+        window->AutoFitFramesX = 0;
+        window->SizeFull.x = IM_FLOOR(size.x);
+    }
+    else
+    {
+        window->AutoFitFramesX = 2;
+        window->AutoFitOnlyGrows = false;
+    }
+    if (size.y > 0.0f)
+    {
+        window->AutoFitFramesY = 0;
+        window->SizeFull.y = IM_FLOOR(size.y);
+    }
+    else
+    {
+        window->AutoFitFramesY = 2;
+        window->AutoFitOnlyGrows = false;
+    }
+}
+
+void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond)
+{
+    SetWindowSize(GImGui->CurrentWindow, size, cond);
+}
+
+void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond)
+{
+    if (ImGuiWindow* window = FindWindowByName(name))
+        SetWindowSize(window, size, cond);
+}
+
+void ImGui::SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
+{
+    // Test condition (NB: bit 0 is always true) and clear flags for next time
+    if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0)
+        return;
+    window->SetWindowCollapsedAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+
+    // Set
+    window->Collapsed = collapsed;
+}
+
+void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
+{
+    SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
+}
+
+bool ImGui::IsWindowCollapsed()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->Collapsed;
+}
+
+bool ImGui::IsWindowAppearing()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->Appearing;
+}
+
+void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
+{
+    if (ImGuiWindow* window = FindWindowByName(name))
+        SetWindowCollapsed(window, collapsed, cond);
+}
+
+void ImGui::SetWindowFocus()
+{
+    FocusWindow(GImGui->CurrentWindow);
+}
+
+void ImGui::SetWindowFocus(const char* name)
+{
+    if (name)
+    {
+        if (ImGuiWindow* window = FindWindowByName(name))
+            FocusWindow(window);
+    }
+    else
+    {
+        FocusWindow(NULL);
+    }
+}
+
+void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pivot)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos;
+    g.NextWindowData.PosVal = pos;
+    g.NextWindowData.PosPivotVal = pivot;
+    g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize;
+    g.NextWindowData.SizeVal = size;
+    g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data)
+{
+    ImGuiContext& g = *GImGui;
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
+    g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max);
+    g.NextWindowData.SizeCallback = custom_callback;
+    g.NextWindowData.SizeCallbackUserData = custom_callback_user_data;
+}
+
+// Content size = inner scrollable rectangle, padded with WindowPadding.
+// SetNextWindowContentSize(ImVec2(100,100) + ImGuiWindowFlags_AlwaysAutoResize will always allow submitting a 100x100 item.
+void ImGui::SetNextWindowContentSize(const ImVec2& size)
+{
+    ImGuiContext& g = *GImGui;
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize;
+    g.NextWindowData.ContentSizeVal = size;
+}
+
+void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed;
+    g.NextWindowData.CollapsedVal = collapsed;
+    g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowFocus()
+{
+    ImGuiContext& g = *GImGui;
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus;
+}
+
+void ImGui::SetNextWindowBgAlpha(float alpha)
+{
+    ImGuiContext& g = *GImGui;
+    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha;
+    g.NextWindowData.BgAlphaVal = alpha;
+}
+
+ImDrawList* ImGui::GetWindowDrawList()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    return window->DrawList;
+}
+
+ImFont* ImGui::GetFont()
+{
+    return GImGui->Font;
+}
+
+float ImGui::GetFontSize()
+{
+    return GImGui->FontSize;
+}
+
+ImVec2 ImGui::GetFontTexUvWhitePixel()
+{
+    return GImGui->DrawListSharedData.TexUvWhitePixel;
+}
+
+void ImGui::SetWindowFontScale(float scale)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    window->FontWindowScale = scale;
+    g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
+}
+
+void ImGui::ActivateItem(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    g.NavNextActivateId = id;
+}
+
+void ImGui::PushFocusScope(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    window->IDStack.push_back(window->DC.NavFocusScopeIdCurrent);
+    window->DC.NavFocusScopeIdCurrent = id;
+}
+
+void ImGui::PopFocusScope()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    window->DC.NavFocusScopeIdCurrent = window->IDStack.back();
+    window->IDStack.pop_back();
+}
+
+void ImGui::SetKeyboardFocusHere(int offset)
+{
+    IM_ASSERT(offset >= -1);    // -1 is allowed but not below
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    g.FocusRequestNextWindow = window;
+    g.FocusRequestNextCounterRegular = window->DC.FocusCounterRegular + 1 + offset;
+    g.FocusRequestNextCounterTabStop = INT_MAX;
+}
+
+void ImGui::SetItemDefaultFocus()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (!window->Appearing)
+        return;
+    if (g.NavWindow == window->RootWindowForNav && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == g.NavWindow->DC.NavLayerCurrent)
+    {
+        g.NavInitRequest = false;
+        g.NavInitResultId = g.NavWindow->DC.LastItemId;
+        g.NavInitResultRectRel = ImRect(g.NavWindow->DC.LastItemRect.Min - g.NavWindow->Pos, g.NavWindow->DC.LastItemRect.Max - g.NavWindow->Pos);
+        NavUpdateAnyRequestFlag();
+        if (!IsItemVisible())
+            SetScrollHereY();
+    }
+}
+
+void ImGui::SetStateStorage(ImGuiStorage* tree)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->DC.StateStorage = tree ? tree : &window->StateStorage;
+}
+
+ImGuiStorage* ImGui::GetStateStorage()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->DC.StateStorage;
+}
+
+void ImGui::PushID(const char* str_id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id));
+}
+
+void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id_begin, str_id_end));
+}
+
+void ImGui::PushID(const void* ptr_id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
+}
+
+void ImGui::PushID(int int_id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.push_back(window->GetIDNoKeepAlive(int_id));
+}
+
+// Push a given id value ignoring the ID stack as a seed.
+void ImGui::PushOverrideID(ImGuiID id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.push_back(id);
+}
+
+void ImGui::PopID()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    window->IDStack.pop_back();
+}
+
+ImGuiID ImGui::GetID(const char* str_id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->GetID(str_id);
+}
+
+ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->GetID(str_id_begin, str_id_end);
+}
+
+ImGuiID ImGui::GetID(const void* ptr_id)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->GetID(ptr_id);
+}
+
+bool ImGui::IsRectVisible(const ImVec2& size)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size));
+}
+
+bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ClipRect.Overlaps(ImRect(rect_min, rect_max));
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] ERROR CHECKING
+//-----------------------------------------------------------------------------
+
+// Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui.
+// Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit
+// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. your user code
+// may see different structures than what imgui.cpp sees, which is problematic.
+// We usually require settings to be in imconfig.h to make sure that they are accessible to all compilation units involved with Dear ImGui.
+bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx)
+{
+    bool error = false;
+    if (strcmp(version, IMGUI_VERSION) != 0) { error = true; IM_ASSERT(strcmp(version, IMGUI_VERSION) == 0 && "Mismatched version string!"); }
+    if (sz_io != sizeof(ImGuiIO)) { error = true; IM_ASSERT(sz_io == sizeof(ImGuiIO) && "Mismatched struct layout!"); }
+    if (sz_style != sizeof(ImGuiStyle)) { error = true; IM_ASSERT(sz_style == sizeof(ImGuiStyle) && "Mismatched struct layout!"); }
+    if (sz_vec2 != sizeof(ImVec2)) { error = true; IM_ASSERT(sz_vec2 == sizeof(ImVec2) && "Mismatched struct layout!"); }
+    if (sz_vec4 != sizeof(ImVec4)) { error = true; IM_ASSERT(sz_vec4 == sizeof(ImVec4) && "Mismatched struct layout!"); }
+    if (sz_vert != sizeof(ImDrawVert)) { error = true; IM_ASSERT(sz_vert == sizeof(ImDrawVert) && "Mismatched struct layout!"); }
+    if (sz_idx != sizeof(ImDrawIdx)) { error = true; IM_ASSERT(sz_idx == sizeof(ImDrawIdx) && "Mismatched struct layout!"); }
+    return !error;
+}
+
+static void ImGui::ErrorCheckNewFrameSanityChecks()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Check user data
+    // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
+    IM_ASSERT(g.Initialized);
+    IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0)              && "Need a positive DeltaTime!");
+    IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount)  && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
+    IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f  && "Invalid DisplaySize value!");
+    IM_ASSERT(g.IO.Fonts->Fonts.Size > 0                                && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
+    IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded()                          && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
+    IM_ASSERT(g.Style.CurveTessellationTol > 0.0f                       && "Invalid style setting!");
+    IM_ASSERT(g.Style.CircleSegmentMaxError > 0.0f                      && "Invalid style setting!");
+    IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f            && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!");
+    IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting.");
+    IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
+    for (int n = 0; n < ImGuiKey_COUNT; n++)
+        IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
+
+    // Perform simple check: required key mapping (we intentionally do NOT check all keys to not pressure user into setting up everything, but Space is required and was only recently added in 1.60 WIP)
+    if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard)
+        IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation.");
+
+    // Perform simple check: the beta io.ConfigWindowsResizeFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
+    if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
+        g.IO.ConfigWindowsResizeFromEdges = false;
+}
+
+static void ImGui::ErrorCheckEndFrameSanityChecks()
+{
+    ImGuiContext& g = *GImGui;
+
+    // Verify that io.KeyXXX fields haven't been tampered with. Key mods shoudl not be modified between NewFrame() and EndFrame()
+    const ImGuiKeyModFlags expected_key_mod_flags = GetMergedKeyModFlags();
+    IM_ASSERT(g.IO.KeyMods == expected_key_mod_flags && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods");
+    IM_UNUSED(expected_key_mod_flags);
+
+    // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you
+    // to always call End/EndChild even if Begin/BeginChild returns false! (this is unfortunately inconsistent with most other Begin* API).
+    if (g.CurrentWindowStack.Size != 1)
+    {
+        if (g.CurrentWindowStack.Size > 1)
+        {
+            IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
+            while (g.CurrentWindowStack.Size > 1)
+                End();
+        }
+        else
+        {
+            IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you call End/EndChild too much?");
+        }
+    }
+}
+
+// Save and compare stack sizes on Begin()/End() to detect usage errors
+// Begin() calls this with write=true
+// End() calls this with write=false
+static void ImGui::ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write)
+{
+    ImGuiContext& g = *GImGui;
+    short* p = &window->DC.StackSizesBackup[0];
+
+    // Window stacks
+    // NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin)
+    { int n = window->IDStack.Size;       if (write) *p = (short)n; else IM_ASSERT(*p == n && "PushID/PopID or TreeNode/TreePop Mismatch!");   p++; }    // Too few or too many PopID()/TreePop()
+    { int n = window->DC.GroupStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginGroup/EndGroup Mismatch!");                p++; }    // Too few or too many EndGroup()
+
+    // Global stacks
+    // For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them.
+    { int n = g.BeginPopupStack.Size;     if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch!"); p++; }// Too few or too many EndMenu()/EndPopup()
+    { int n = g.ColorModifiers.Size;      if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleColor/PopStyleColor Mismatch!");       p++; }    // Too few or too many PopStyleColor()
+    { int n = g.StyleModifiers.Size;      if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleVar/PopStyleVar Mismatch!");           p++; }    // Too few or too many PopStyleVar()
+    { int n = g.FontStack.Size;           if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushFont/PopFont Mismatch!");                   p++; }    // Too few or too many PopFont()
+    IM_ASSERT(p == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup));
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] LAYOUT
+//-----------------------------------------------------------------------------
+// - ItemSize()
+// - ItemAdd()
+// - SameLine()
+// - GetCursorScreenPos()
+// - SetCursorScreenPos()
+// - GetCursorPos(), GetCursorPosX(), GetCursorPosY()
+// - SetCursorPos(), SetCursorPosX(), SetCursorPosY()
+// - GetCursorStartPos()
+// - Indent()
+// - Unindent()
+// - SetNextItemWidth()
+// - PushItemWidth()
+// - PushMultiItemsWidths()
+// - PopItemWidth()
+// - CalcItemWidth()
+// - CalcItemSize()
+// - GetTextLineHeight()
+// - GetTextLineHeightWithSpacing()
+// - GetFrameHeight()
+// - GetFrameHeightWithSpacing()
+// - GetContentRegionMax()
+// - GetContentRegionMaxAbs() [Internal]
+// - GetContentRegionAvail(),
+// - GetWindowContentRegionMin(), GetWindowContentRegionMax()
+// - GetWindowContentRegionWidth()
+// - BeginGroup()
+// - EndGroup()
+// Also see in imgui_widgets: tab bars, columns.
+//-----------------------------------------------------------------------------
+
+// Advance cursor given item size for layout.
+// Register minimum needed size so it can extend the bounding box used for auto-fit calculation.
+// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different.
+void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    // We increase the height in this function to accommodate for baseline offset.
+    // In theory we should be offsetting the starting position (window->DC.CursorPos), that will be the topic of a larger refactor,
+    // but since ItemSize() is not yet an API that moves the cursor (to handle e.g. wrapping) enlarging the height has the same effect.
+    const float offset_to_match_baseline_y = (text_baseline_y >= 0) ? ImMax(0.0f, window->DC.CurrLineTextBaseOffset - text_baseline_y) : 0.0f;
+    const float line_height = ImMax(window->DC.CurrLineSize.y, size.y + offset_to_match_baseline_y);
+
+    // Always align ourselves on pixel boundaries
+    //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG]
+    window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x;
+    window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y;
+    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);    // Next line
+    window->DC.CursorPos.y = IM_FLOOR(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y);        // Next line
+    window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x);
+    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y);
+    //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG]
+
+    window->DC.PrevLineSize.y = line_height;
+    window->DC.CurrLineSize.y = 0.0f;
+    window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y);
+    window->DC.CurrLineTextBaseOffset = 0.0f;
+
+    // Horizontal layout mode
+    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+        SameLine();
+}
+
+void ImGui::ItemSize(const ImRect& bb, float text_baseline_y)
+{
+    ItemSize(bb.GetSize(), text_baseline_y);
+}
+
+// Declare item bounding box for clipping and interaction.
+// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
+// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction.
+bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    if (id != 0)
+    {
+        // Navigation processing runs prior to clipping early-out
+        //  (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
+        //  (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
+        //      unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of
+        //      thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame.
+        //      We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able
+        //      to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick).
+        // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null.
+        // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere.
+        window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask;
+        if (g.NavId == id || g.NavAnyRequest)
+            if (g.NavWindow->RootWindowForNav == window->RootWindowForNav)
+                if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
+                    NavProcessItem(window, nav_bb_arg ? *nav_bb_arg : bb, id);
+
+        // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd()
+#ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
+        if (id == g.DebugItemPickerBreakId)
+        {
+            IM_DEBUG_BREAK();
+            g.DebugItemPickerBreakId = 0;
+        }
+#endif
+    }
+
+    window->DC.LastItemId = id;
+    window->DC.LastItemRect = bb;
+    window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None;
+    g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+    if (id != 0)
+        IMGUI_TEST_ENGINE_ITEM_ADD(nav_bb_arg ? *nav_bb_arg : bb, id);
+#endif
+
+    // Clipping test
+    const bool is_clipped = IsClippedEx(bb, id, false);
+    if (is_clipped)
+        return false;
+    //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
+
+    // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
+    if (IsMouseHoveringRect(bb.Min, bb.Max))
+        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HoveredRect;
+    return true;
+}
+
+// Gets back to previous line and continue with horizontal layout
+//      offset_from_start_x == 0 : follow right after previous item
+//      offset_from_start_x != 0 : align to specified x position (relative to window/group left)
+//      spacing_w < 0            : use default spacing if pos_x == 0, no spacing if pos_x != 0
+//      spacing_w >= 0           : enforce spacing amount
+void ImGui::SameLine(float offset_from_start_x, float spacing_w)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    if (offset_from_start_x != 0.0f)
+    {
+        if (spacing_w < 0.0f) spacing_w = 0.0f;
+        window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x;
+        window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
+    }
+    else
+    {
+        if (spacing_w < 0.0f) spacing_w = g.Style.ItemSpacing.x;
+        window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w;
+        window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
+    }
+    window->DC.CurrLineSize = window->DC.PrevLineSize;
+    window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
+}
+
+ImVec2 ImGui::GetCursorScreenPos()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CursorPos;
+}
+
+void ImGui::SetCursorScreenPos(const ImVec2& pos)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.CursorPos = pos;
+    window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
+}
+
+// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient.
+// Conversion happens as we pass the value to user, but it makes our naming convention confusing because GetCursorPos() == (DC.CursorPos - window.Pos). May want to rename 'DC.CursorPos'.
+ImVec2 ImGui::GetCursorPos()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CursorPos - window->Pos + window->Scroll;
+}
+
+float ImGui::GetCursorPosX()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CursorPos.x - window->Pos.x + window->Scroll.x;
+}
+
+float ImGui::GetCursorPosY()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CursorPos.y - window->Pos.y + window->Scroll.y;
+}
+
+void ImGui::SetCursorPos(const ImVec2& local_pos)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.CursorPos = window->Pos - window->Scroll + local_pos;
+    window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
+}
+
+void ImGui::SetCursorPosX(float x)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + x;
+    window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x);
+}
+
+void ImGui::SetCursorPosY(float y)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.CursorPos.y = window->Pos.y - window->Scroll.y + y;
+    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y);
+}
+
+ImVec2 ImGui::GetCursorStartPos()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CursorStartPos - window->Pos;
+}
+
+void ImGui::Indent(float indent_w)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
+    window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
+}
+
+void ImGui::Unindent(float indent_w)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
+    window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
+}
+
+// Affect large frame+labels widgets only.
+void ImGui::SetNextItemWidth(float item_width)
+{
+    ImGuiContext& g = *GImGui;
+    g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasWidth;
+    g.NextItemData.Width = item_width;
+}
+
+void ImGui::PushItemWidth(float item_width)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
+    window->DC.ItemWidthStack.push_back(window->DC.ItemWidth);
+    g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
+}
+
+void ImGui::PushMultiItemsWidths(int components, float w_full)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    const ImGuiStyle& style = g.Style;
+    const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
+    const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
+    window->DC.ItemWidthStack.push_back(w_item_last);
+    for (int i = 0; i < components-1; i++)
+        window->DC.ItemWidthStack.push_back(w_item_one);
+    window->DC.ItemWidth = window->DC.ItemWidthStack.back();
+    g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
+}
+
+void ImGui::PopItemWidth()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->DC.ItemWidthStack.pop_back();
+    window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back();
+}
+
+// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
+// The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags()
+float ImGui::CalcItemWidth()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    float w;
+    if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth)
+        w = g.NextItemData.Width;
+    else
+        w = window->DC.ItemWidth;
+    if (w < 0.0f)
+    {
+        float region_max_x = GetContentRegionMaxAbs().x;
+        w = ImMax(1.0f, region_max_x - window->DC.CursorPos.x + w);
+    }
+    w = IM_FLOOR(w);
+    return w;
+}
+
+// [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth().
+// Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical.
+// Note that only CalcItemWidth() is publicly exposed.
+// The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable)
+ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+
+    ImVec2 region_max;
+    if (size.x < 0.0f || size.y < 0.0f)
+        region_max = GetContentRegionMaxAbs();
+
+    if (size.x == 0.0f)
+        size.x = default_w;
+    else if (size.x < 0.0f)
+        size.x = ImMax(4.0f, region_max.x - window->DC.CursorPos.x + size.x);
+
+    if (size.y == 0.0f)
+        size.y = default_h;
+    else if (size.y < 0.0f)
+        size.y = ImMax(4.0f, region_max.y - window->DC.CursorPos.y + size.y);
+
+    return size;
+}
+
+float ImGui::GetTextLineHeight()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize;
+}
+
+float ImGui::GetTextLineHeightWithSpacing()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize + g.Style.ItemSpacing.y;
+}
+
+float ImGui::GetFrameHeight()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize + g.Style.FramePadding.y * 2.0f;
+}
+
+float ImGui::GetFrameHeightWithSpacing()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize + g.Style.FramePadding.y * 2.0f + g.Style.ItemSpacing.y;
+}
+
+// FIXME: All the Contents Region function are messy or misleading. WE WILL AIM TO OBSOLETE ALL OF THEM WITH A NEW "WORK RECT" API. Thanks for your patience!
+
+// FIXME: This is in window space (not screen space!).
+ImVec2 ImGui::GetContentRegionMax()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImVec2 mx = window->ContentRegionRect.Max - window->Pos;
+    if (window->DC.CurrentColumns || g.CurrentTable)
+        mx.x = window->WorkRect.Max.x - window->Pos.x;
+    return mx;
+}
+
+// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
+ImVec2 ImGui::GetContentRegionMaxAbs()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImVec2 mx = window->ContentRegionRect.Max;
+    if (window->DC.CurrentColumns || g.CurrentTable)
+        mx.x = window->WorkRect.Max.x;
+    return mx;
+}
+
+ImVec2 ImGui::GetContentRegionAvail()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return GetContentRegionMaxAbs() - window->DC.CursorPos;
+}
+
+// In window space (not screen space!)
+ImVec2 ImGui::GetWindowContentRegionMin()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ContentRegionRect.Min - window->Pos;
+}
+
+ImVec2 ImGui::GetWindowContentRegionMax()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ContentRegionRect.Max - window->Pos;
+}
+
+float ImGui::GetWindowContentRegionWidth()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ContentRegionRect.GetWidth();
+}
+
+// Lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
+void ImGui::BeginGroup()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+
+    window->DC.GroupStack.resize(window->DC.GroupStack.Size + 1);
+    ImGuiGroupData& group_data = window->DC.GroupStack.back();
+    group_data.BackupCursorPos = window->DC.CursorPos;
+    group_data.BackupCursorMaxPos = window->DC.CursorMaxPos;
+    group_data.BackupIndent = window->DC.Indent;
+    group_data.BackupGroupOffset = window->DC.GroupOffset;
+    group_data.BackupCurrLineSize = window->DC.CurrLineSize;
+    group_data.BackupCurrLineTextBaseOffset = window->DC.CurrLineTextBaseOffset;
+    group_data.BackupActiveIdIsAlive = g.ActiveIdIsAlive;
+    group_data.BackupActiveIdPreviousFrameIsAlive = g.ActiveIdPreviousFrameIsAlive;
+    group_data.EmitItem = true;
+
+    window->DC.GroupOffset.x = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffset.x;
+    window->DC.Indent = window->DC.GroupOffset;
+    window->DC.CursorMaxPos = window->DC.CursorPos;
+    window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+    if (g.LogEnabled)
+        g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
+}
+
+void ImGui::EndGroup()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    IM_ASSERT(!window->DC.GroupStack.empty());  // Mismatched BeginGroup()/EndGroup() calls
+
+    ImGuiGroupData& group_data = window->DC.GroupStack.back();
+
+    ImRect group_bb(group_data.BackupCursorPos, ImMax(window->DC.CursorMaxPos, group_data.BackupCursorPos));
+
+    window->DC.CursorPos = group_data.BackupCursorPos;
+    window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos);
+    window->DC.Indent = group_data.BackupIndent;
+    window->DC.GroupOffset = group_data.BackupGroupOffset;
+    window->DC.CurrLineSize = group_data.BackupCurrLineSize;
+    window->DC.CurrLineTextBaseOffset = group_data.BackupCurrLineTextBaseOffset;
+    if (g.LogEnabled)
+        g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
+
+    if (!group_data.EmitItem)
+    {
+        window->DC.GroupStack.pop_back();
+        return;
+    }
+
+    window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset);      // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
+    ItemSize(group_bb.GetSize());
+    ItemAdd(group_bb, 0);
+
+    // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group.
+    // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets.
+    // Also if you grep for LastItemId you'll notice it is only used in that context.
+    // (The tests not symmetrical because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.)
+    const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId;
+    const bool group_contains_prev_active_id = !group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive;
+    if (group_contains_curr_active_id)
+        window->DC.LastItemId = g.ActiveId;
+    else if (group_contains_prev_active_id)
+        window->DC.LastItemId = g.ActiveIdPreviousFrame;
+    window->DC.LastItemRect = group_bb;
+
+    // Forward Edited flag
+    if (group_contains_curr_active_id && g.ActiveIdHasBeenEditedThisFrame)
+        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
+
+    // Forward Deactivated flag
+    window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDeactivated;
+    if (group_contains_prev_active_id && g.ActiveId != g.ActiveIdPreviousFrame)
+        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Deactivated;
+
+    window->DC.GroupStack.pop_back();
+    //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255));   // [Debug]
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] SCROLLING
+//-----------------------------------------------------------------------------
+
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges)
+{
+    ImGuiContext& g = *GImGui;
+    ImVec2 scroll = window->Scroll;
+    if (window->ScrollTarget.x < FLT_MAX)
+    {
+        float cr_x = window->ScrollTargetCenterRatio.x;
+        float target_x = window->ScrollTarget.x;
+        if (snap_on_edges && cr_x <= 0.0f && target_x <= window->WindowPadding.x)
+            target_x = 0.0f;
+        else if (snap_on_edges && cr_x >= 1.0f && target_x >= window->ContentSize.x + window->WindowPadding.x + g.Style.ItemSpacing.x)
+            target_x = window->ContentSize.x + window->WindowPadding.x * 2.0f;
+        scroll.x = target_x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x);
+    }
+    if (window->ScrollTarget.y < FLT_MAX)
+    {
+        // 'snap_on_edges' allows for a discontinuity at the edge of scrolling limits to take account of WindowPadding so that scrolling to make the last item visible scroll far enough to see the padding.
+        float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+        float cr_y = window->ScrollTargetCenterRatio.y;
+        float target_y = window->ScrollTarget.y;
+        if (snap_on_edges && cr_y <= 0.0f && target_y <= window->WindowPadding.y)
+            target_y = 0.0f;
+        if (snap_on_edges && cr_y >= 1.0f && target_y >= window->ContentSize.y + window->WindowPadding.y + g.Style.ItemSpacing.y)
+            target_y = window->ContentSize.y + window->WindowPadding.y * 2.0f;
+        scroll.y = target_y - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y - decoration_up_height);
+    }
+    scroll.x = IM_FLOOR(ImMax(scroll.x, 0.0f));
+    scroll.y = IM_FLOOR(ImMax(scroll.y, 0.0f));
+    if (!window->Collapsed && !window->SkipItems)
+    {
+        scroll.x = ImMin(scroll.x, window->ScrollMax.x);
+        scroll.y = ImMin(scroll.y, window->ScrollMax.y);
+    }
+    return scroll;
+}
+
+// Scroll to keep newly navigated item fully into view
+ImVec2 ImGui::ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect)
+{
+    ImGuiContext& g = *GImGui;
+    ImRect window_rect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1));
+    //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
+
+    ImVec2 delta_scroll;
+    if (!window_rect.Contains(item_rect))
+    {
+        if (window->ScrollbarX && item_rect.Min.x < window_rect.Min.x)
+            SetScrollFromPosX(window, item_rect.Min.x - window->Pos.x + g.Style.ItemSpacing.x, 0.0f);
+        else if (window->ScrollbarX && item_rect.Max.x >= window_rect.Max.x)
+            SetScrollFromPosX(window, item_rect.Max.x - window->Pos.x + g.Style.ItemSpacing.x, 1.0f);
+        if (item_rect.Min.y < window_rect.Min.y)
+            SetScrollFromPosY(window, item_rect.Min.y - window->Pos.y - g.Style.ItemSpacing.y, 0.0f);
+        else if (item_rect.Max.y >= window_rect.Max.y)
+            SetScrollFromPosY(window, item_rect.Max.y - window->Pos.y + g.Style.ItemSpacing.y, 1.0f);
+
+        ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window, false);
+        delta_scroll = next_scroll - window->Scroll;
+    }
+
+    // Also scroll parent window to keep us into view if necessary
+    if (window->Flags & ImGuiWindowFlags_ChildWindow)
+        delta_scroll += ScrollToBringRectIntoView(window->ParentWindow, ImRect(item_rect.Min - delta_scroll, item_rect.Max - delta_scroll));
+
+    return delta_scroll;
+}
+
+float ImGui::GetScrollX()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->Scroll.x;
+}
+
+float ImGui::GetScrollY()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->Scroll.y;
+}
+
+float ImGui::GetScrollMaxX()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ScrollMax.x;
+}
+
+float ImGui::GetScrollMaxY()
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    return window->ScrollMax.y;
+}
+
+void ImGui::SetScrollX(float scroll_x)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->ScrollTarget.x = scroll_x;
+    window->ScrollTargetCenterRatio.x = 0.0f;
+}
+
+void ImGui::SetScrollY(float scroll_y)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    window->ScrollTarget.y = scroll_y;
+    window->ScrollTargetCenterRatio.y = 0.0f;
+}
+
+void ImGui::SetScrollX(ImGuiWindow* window, float new_scroll_x)
+{
+    window->ScrollTarget.x = new_scroll_x;
+    window->ScrollTargetCenterRatio.x = 0.0f;
+}
+
+void ImGui::SetScrollY(ImGuiWindow* window, float new_scroll_y)
+{
+    window->ScrollTarget.y = new_scroll_y;
+    window->ScrollTargetCenterRatio.y = 0.0f;
+}
+
+
+void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio)
+{
+    // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
+    IM_ASSERT(center_x_ratio >= 0.0f && center_x_ratio <= 1.0f);
+    window->ScrollTarget.x = IM_FLOOR(local_x + window->Scroll.x);
+    window->ScrollTargetCenterRatio.x = center_x_ratio;
+}
+
+void ImGui::SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio)
+{
+    // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
+    IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
+    const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+    local_y -= decoration_up_height;
+    window->ScrollTarget.y = IM_FLOOR(local_y + window->Scroll.y);
+    window->ScrollTargetCenterRatio.y = center_y_ratio;
+}
+
+void ImGui::SetScrollFromPosX(float local_x, float center_x_ratio)
+{
+    ImGuiContext& g = *GImGui;
+    SetScrollFromPosX(g.CurrentWindow, local_x, center_x_ratio);
+}
+
+void ImGui::SetScrollFromPosY(float local_y, float center_y_ratio)
+{
+    ImGuiContext& g = *GImGui;
+    SetScrollFromPosY(g.CurrentWindow, local_y, center_y_ratio);
+}
+
+// center_x_ratio: 0.0f left of last item, 0.5f horizontal center of last item, 1.0f right of last item.
+void ImGui::SetScrollHereX(float center_x_ratio)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    float target_x = window->DC.LastItemRect.Min.x - window->Pos.x; // Left of last item, in window space
+    float last_item_width = window->DC.LastItemRect.GetWidth();
+    target_x += (last_item_width * center_x_ratio) + (g.Style.ItemSpacing.x * (center_x_ratio - 0.5f) * 2.0f); // Precisely aim before, in the middle or after the last item.
+    SetScrollFromPosX(target_x, center_x_ratio);
+}
+
+// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
+void ImGui::SetScrollHereY(float center_y_ratio)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space
+    target_y += (window->DC.PrevLineSize.y * center_y_ratio) + (g.Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
+    SetScrollFromPosY(target_y, center_y_ratio);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] TOOLTIPS
+//-----------------------------------------------------------------------------
+
+void ImGui::BeginTooltip()
+{
+    BeginTooltipEx(ImGuiWindowFlags_None, ImGuiTooltipFlags_None);
+}
+
+void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags)
+{
+    ImGuiContext& g = *GImGui;
+
+    if (g.DragDropWithinSource || g.DragDropWithinTarget)
+    {
+        // The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
+        // In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
+        // Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
+        //ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
+        ImVec2 tooltip_pos = g.IO.MousePos + ImVec2(16 * g.Style.MouseCursorScale, 8 * g.Style.MouseCursorScale);
+        SetNextWindowPos(tooltip_pos);
+        SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
+        //PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
+        tooltip_flags |= ImGuiTooltipFlags_OverridePreviousTooltip;
+    }
+
+    char window_name[16];
+    ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount);
+    if (tooltip_flags & ImGuiTooltipFlags_OverridePreviousTooltip)
+        if (ImGuiWindow* window = FindWindowByName(window_name))
+            if (window->Active)
+            {
+                // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
+                window->Hidden = true;
+                window->HiddenFramesCanSkipItems = 1;
+                ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
+            }
+    ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
+    Begin(window_name, NULL, flags | extra_flags);
+}
+
+void ImGui::EndTooltip()
+{
+    IM_ASSERT(GetCurrentWindowRead()->Flags & ImGuiWindowFlags_Tooltip);   // Mismatched BeginTooltip()/EndTooltip() calls
+    End();
+}
+
+void ImGui::SetTooltipV(const char* fmt, va_list args)
+{
+    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
+    TextV(fmt, args);
+    EndTooltip();
+}
+
+void ImGui::SetTooltip(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    SetTooltipV(fmt, args);
+    va_end(args);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] POPUPS
+//-----------------------------------------------------------------------------
+
+bool ImGui::IsPopupOpen(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id;
+}
+
+bool ImGui::IsPopupOpen(const char* str_id)
+{
+    ImGuiContext& g = *GImGui;
+    return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id);
+}
+
+ImGuiWindow* ImGui::GetTopMostPopupModal()
+{
+    ImGuiContext& g = *GImGui;
+    for (int n = g.OpenPopupStack.Size-1; n >= 0; n--)
+        if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window)
+            if (popup->Flags & ImGuiWindowFlags_Modal)
+                return popup;
+    return NULL;
+}
+
+void ImGui::OpenPopup(const char* str_id)
+{
+    ImGuiContext& g = *GImGui;
+    OpenPopupEx(g.CurrentWindow->GetID(str_id));
+}
+
+// Mark popup as open (toggle toward open state).
+// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block.
+// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
+// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL)
+void ImGui::OpenPopupEx(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* parent_window = g.CurrentWindow;
+    int current_stack_size = g.BeginPopupStack.Size;
+    ImGuiPopupData popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack.
+    popup_ref.PopupId = id;
+    popup_ref.Window = NULL;
+    popup_ref.SourceWindow = g.NavWindow;
+    popup_ref.OpenFrameCount = g.FrameCount;
+    popup_ref.OpenParentId = parent_window->IDStack.back();
+    popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
+    popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
+
+    //IMGUI_DEBUG_LOG("OpenPopupEx(0x%08X)\n", g.FrameCount, id);
+    if (g.OpenPopupStack.Size < current_stack_size + 1)
+    {
+        g.OpenPopupStack.push_back(popup_ref);
+    }
+    else
+    {
+        // Gently handle the user mistakenly calling OpenPopup() every frame. It is a programming mistake! However, if we were to run the regular code path, the ui
+        // would become completely unusable because the popup will always be in hidden-while-calculating-size state _while_ claiming focus. Which would be a very confusing
+        // situation for the programmer. Instead, we silently allow the popup to proceed, it will keep reappearing and the programming error will be more obvious to understand.
+        if (g.OpenPopupStack[current_stack_size].PopupId == id && g.OpenPopupStack[current_stack_size].OpenFrameCount == g.FrameCount - 1)
+        {
+            g.OpenPopupStack[current_stack_size].OpenFrameCount = popup_ref.OpenFrameCount;
+        }
+        else
+        {
+            // Close child popups if any, then flag popup for open/reopen
+            g.OpenPopupStack.resize(current_stack_size + 1);
+            g.OpenPopupStack[current_stack_size] = popup_ref;
+        }
+
+        // When reopening a popup we first refocus its parent, otherwise if its parent is itself a popup it would get closed by ClosePopupsOverWindow().
+        // This is equivalent to what ClosePopupToLevel() does.
+        //if (g.OpenPopupStack[current_stack_size].PopupId == id)
+        //    FocusWindow(parent_window);
+    }
+}
+
+void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.OpenPopupStack.empty())
+        return;
+
+    // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
+    // Don't close our own child popup windows.
+    int popup_count_to_keep = 0;
+    if (ref_window)
+    {
+        // Find the highest popup which is a descendant of the reference window (generally reference window = NavWindow)
+        for (; popup_count_to_keep < g.OpenPopupStack.Size; popup_count_to_keep++)
+        {
+            ImGuiPopupData& popup = g.OpenPopupStack[popup_count_to_keep];
+            if (!popup.Window)
+                continue;
+            IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0);
+            if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
+                continue;
+
+            // Trim the stack when popups are not direct descendant of the reference window (the reference window is often the NavWindow)
+            bool popup_or_descendent_is_ref_window = false;
+            for (int m = popup_count_to_keep; m < g.OpenPopupStack.Size && !popup_or_descendent_is_ref_window; m++)
+                if (ImGuiWindow* popup_window = g.OpenPopupStack[m].Window)
+                    if (popup_window->RootWindow == ref_window->RootWindow)
+                        popup_or_descendent_is_ref_window = true;
+            if (!popup_or_descendent_is_ref_window)
+                break;
+        }
+    }
+    if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
+    {
+        //IMGUI_DEBUG_LOG("ClosePopupsOverWindow(%s) -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep);
+        ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
+    }
+}
+
+void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
+    ImGuiWindow* focus_window = g.OpenPopupStack[remaining].SourceWindow;
+    ImGuiWindow* popup_window = g.OpenPopupStack[remaining].Window;
+    g.OpenPopupStack.resize(remaining);
+
+    if (restore_focus_to_window_under_popup)
+    {
+        if (focus_window && !focus_window->WasActive && popup_window)
+        {
+            // Fallback
+            FocusTopMostWindowUnderOne(popup_window, NULL);
+        }
+        else
+        {
+            if (g.NavLayer == 0 && focus_window)
+                focus_window = NavRestoreLastChildNavWindow(focus_window);
+            FocusWindow(focus_window);
+        }
+    }
+}
+
+// Close the popup we have begin-ed into.
+void ImGui::CloseCurrentPopup()
+{
+    ImGuiContext& g = *GImGui;
+    int popup_idx = g.BeginPopupStack.Size - 1;
+    if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
+        return;
+
+    // Closing a menu closes its top-most parent popup (unless a modal)
+    while (popup_idx > 0)
+    {
+        ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window;
+        ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window;
+        bool close_parent = false;
+        if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu))
+            if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal))
+                close_parent = true;
+        if (!close_parent)
+            break;
+        popup_idx--;
+    }
+    //IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
+    ClosePopupToLevel(popup_idx, true);
+
+    // A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
+    // To improve this usage pattern, we avoid nav highlight for a single frame in the parent window.
+    // Similarly, we could avoid mouse hover highlight in this window but it is less visually problematic.
+    if (ImGuiWindow* window = g.NavWindow)
+        window->DC.NavHideHighlightOneFrame = true;
+}
+
+bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    if (!IsPopupOpen(id))
+    {
+        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+        return false;
+    }
+
+    char name[20];
+    if (flags & ImGuiWindowFlags_ChildMenu)
+        ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
+    else
+        ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
+
+    flags |= ImGuiWindowFlags_Popup;
+    bool is_open = Begin(name, NULL, flags);
+    if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
+        EndPopup();
+
+    return is_open;
+}
+
+bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance
+    {
+        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+        return false;
+    }
+    flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings;
+    return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags);
+}
+
+// If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup.
+// Note that popup visibility status is owned by Dear ImGui (and manipulated with e.g. OpenPopup) so the actual value of *p_open is meaningless here.
+bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    const ImGuiID id = window->GetID(name);
+    if (!IsPopupOpen(id))
+    {
+        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+        return false;
+    }
+
+    // Center modal windows by default
+    // FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
+    if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
+        SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
+
+    flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings;
+    const bool is_open = Begin(name, p_open, flags);
+    if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+    {
+        EndPopup();
+        if (is_open)
+            ClosePopupToLevel(g.BeginPopupStack.Size, true);
+        return false;
+    }
+    return is_open;
+}
+
+void ImGui::EndPopup()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup);  // Mismatched BeginPopup()/EndPopup() calls
+    IM_ASSERT(g.BeginPopupStack.Size > 0);
+
+    // Make all menus and popups wrap around for now, may need to expose that policy.
+    NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
+
+    // Child-popups don't need to be layed out
+    IM_ASSERT(g.WithinEndChild == false);
+    if (window->Flags & ImGuiWindowFlags_ChildWindow)
+        g.WithinEndChild = true;
+    End();
+    g.WithinEndChild = false;
+}
+
+bool ImGui::OpenPopupOnItemClick(const char* str_id, ImGuiMouseButton mouse_button)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+    {
+        ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+        IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+        OpenPopupEx(id);
+        return true;
+    }
+    return false;
+}
+
+// This is a helper to handle the simplest case of associating one named popup to one given widget.
+// You may want to handle this on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters).
+// You can pass a NULL str_id to use the identifier of the last item.
+bool ImGui::BeginPopupContextItem(const char* str_id, ImGuiMouseButton mouse_button)
+{
+    ImGuiWindow* window = GImGui->CurrentWindow;
+    if (window->SkipItems)
+        return false;
+    ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+    IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+    if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+        OpenPopupEx(id);
+    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
+}
+
+bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mouse_button, bool also_over_items)
+{
+    if (!str_id)
+        str_id = "window_context";
+    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
+    if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+        if (also_over_items || !IsAnyItemHovered())
+            OpenPopupEx(id);
+    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
+}
+
+bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiMouseButton mouse_button)
+{
+    if (!str_id)
+        str_id = "void_context";
+    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
+    if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow))
+        OpenPopupEx(id);
+    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
+}
+
+// r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.)
+// r_outer = the visible area rectangle, minus safe area padding. If our popup size won't fit because of safe area padding we ignore it.
+ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy)
+{
+    ImVec2 base_pos_clamped = ImClamp(ref_pos, r_outer.Min, r_outer.Max - size);
+    //GetForegroundDrawList()->AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255));
+    //GetForegroundDrawList()->AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255));
+
+    // Combo Box policy (we want a connecting edge)
+    if (policy == ImGuiPopupPositionPolicy_ComboBox)
+    {
+        const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Down, ImGuiDir_Right, ImGuiDir_Left, ImGuiDir_Up };
+        for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
+        {
+            const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
+            if (n != -1 && dir == *last_dir) // Already tried this direction?
+                continue;
+            ImVec2 pos;
+            if (dir == ImGuiDir_Down)  pos = ImVec2(r_avoid.Min.x, r_avoid.Max.y);          // Below, Toward Right (default)
+            if (dir == ImGuiDir_Right) pos = ImVec2(r_avoid.Min.x, r_avoid.Min.y - size.y); // Above, Toward Right
+            if (dir == ImGuiDir_Left)  pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Max.y); // Below, Toward Left
+            if (dir == ImGuiDir_Up)    pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Min.y - size.y); // Above, Toward Left
+            if (!r_outer.Contains(ImRect(pos, pos + size)))
+                continue;
+            *last_dir = dir;
+            return pos;
+        }
+    }
+
+    // Default popup policy
+    const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Right, ImGuiDir_Down, ImGuiDir_Up, ImGuiDir_Left };
+    for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
+    {
+        const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
+        if (n != -1 && dir == *last_dir) // Already tried this direction?
+            continue;
+        float avail_w = (dir == ImGuiDir_Left ? r_avoid.Min.x : r_outer.Max.x) - (dir == ImGuiDir_Right ? r_avoid.Max.x : r_outer.Min.x);
+        float avail_h = (dir == ImGuiDir_Up ? r_avoid.Min.y : r_outer.Max.y) - (dir == ImGuiDir_Down ? r_avoid.Max.y : r_outer.Min.y);
+        if (avail_w < size.x || avail_h < size.y)
+            continue;
+        ImVec2 pos;
+        pos.x = (dir == ImGuiDir_Left) ? r_avoid.Min.x - size.x : (dir == ImGuiDir_Right) ? r_avoid.Max.x : base_pos_clamped.x;
+        pos.y = (dir == ImGuiDir_Up)   ? r_avoid.Min.y - size.y : (dir == ImGuiDir_Down)  ? r_avoid.Max.y : base_pos_clamped.y;
+        *last_dir = dir;
+        return pos;
+    }
+
+    // Fallback, try to keep within display
+    *last_dir = ImGuiDir_None;
+    ImVec2 pos = ref_pos;
+    pos.x = ImMax(ImMin(pos.x + size.x, r_outer.Max.x) - size.x, r_outer.Min.x);
+    pos.y = ImMax(ImMin(pos.y + size.y, r_outer.Max.y) - size.y, r_outer.Min.y);
+    return pos;
+}
+
+ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow* window)
+{
+    IM_UNUSED(window);
+    ImVec2 padding = GImGui->Style.DisplaySafeAreaPadding;
+    ImRect r_screen = GetViewportRect();
+    r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f));
+    return r_screen;
+}
+
+ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+
+    ImRect r_outer = GetWindowAllowedExtentRect(window);
+    if (window->Flags & ImGuiWindowFlags_ChildMenu)
+    {
+        // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds.
+        // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu.
+        IM_ASSERT(g.CurrentWindow == window);
+        ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2];
+        float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x).
+        ImRect r_avoid;
+        if (parent_window->DC.MenuBarAppending)
+            r_avoid = ImRect(-FLT_MAX, parent_window->ClipRect.Min.y, FLT_MAX, parent_window->ClipRect.Max.y); // Avoid parent menu-bar. If we wanted multi-line menu-bar, we may instead want to have the calling window setup e.g. a NextWindowData.PosConstraintAvoidRect field
+        else
+            r_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
+        return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
+    }
+    if (window->Flags & ImGuiWindowFlags_Popup)
+    {
+        ImRect r_avoid = ImRect(window->Pos.x - 1, window->Pos.y - 1, window->Pos.x + 1, window->Pos.y + 1);
+        return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
+    }
+    if (window->Flags & ImGuiWindowFlags_Tooltip)
+    {
+        // Position tooltip (always follows mouse)
+        float sc = g.Style.MouseCursorScale;
+        ImVec2 ref_pos = NavCalcPreferredRefPos();
+        ImRect r_avoid;
+        if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos))
+            r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 16, ref_pos.y + 8);
+        else
+            r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24 * sc, ref_pos.y + 24 * sc); // FIXME: Hard-coded based on mouse cursor shape expectation. Exact dimension not very important.
+        ImVec2 pos = FindBestWindowPosForPopupEx(ref_pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
+        if (window->AutoPosLastDirection == ImGuiDir_None)
+            pos = ref_pos + ImVec2(2, 2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
+        return pos;
+    }
+    IM_ASSERT(0);
+    return window->Pos;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
+//-----------------------------------------------------------------------------
+
+// FIXME-NAV: The existence of SetNavID vs SetNavIDWithRectRel vs SetFocusID is incredibly messy and confusing,
+// and needs some explanation or serious refactoring.
+void ImGui::SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.NavWindow);
+    IM_ASSERT(nav_layer == 0 || nav_layer == 1);
+    g.NavId = id;
+    g.NavFocusScopeId = focus_scope_id;
+    g.NavWindow->NavLastIds[nav_layer] = id;
+}
+
+void ImGui::SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel)
+{
+    ImGuiContext& g = *GImGui;
+    SetNavID(id, nav_layer, focus_scope_id);
+    g.NavWindow->NavRectRel[nav_layer] = rect_rel;
+    g.NavMousePosDirty = true;
+    g.NavDisableHighlight = false;
+    g.NavDisableMouseHover = true;
+}
+
+void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(id != 0);
+
+    // Assume that SetFocusID() is called in the context where its window->DC.NavLayerCurrent and window->DC.NavFocusScopeIdCurrent are valid.
+    // Note that window may be != g.CurrentWindow (e.g. SetFocusID call in InputTextEx for multi-line text)
+    const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent;
+    if (g.NavWindow != window)
+        g.NavInitRequest = false;
+    g.NavWindow = window;
+    g.NavId = id;
+    g.NavLayer = nav_layer;
+    g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
+    window->NavLastIds[nav_layer] = id;
+    if (window->DC.LastItemId == id)
+        window->NavRectRel[nav_layer] = ImRect(window->DC.LastItemRect.Min - window->Pos, window->DC.LastItemRect.Max - window->Pos);
+
+    if (g.ActiveIdSource == ImGuiInputSource_Nav)
+        g.NavDisableMouseHover = true;
+    else
+        g.NavDisableHighlight = true;
+}
+
+ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
+{
+    if (ImFabs(dx) > ImFabs(dy))
+        return (dx > 0.0f) ? ImGuiDir_Right : ImGuiDir_Left;
+    return (dy > 0.0f) ? ImGuiDir_Down : ImGuiDir_Up;
+}
+
+static float inline NavScoreItemDistInterval(float a0, float a1, float b0, float b1)
+{
+    if (a1 < b0)
+        return a1 - b0;
+    if (b1 < a0)
+        return a0 - b1;
+    return 0.0f;
+}
+
+static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir, ImRect& r, const ImRect& clip_rect)
+{
+    if (move_dir == ImGuiDir_Left || move_dir == ImGuiDir_Right)
+    {
+        r.Min.y = ImClamp(r.Min.y, clip_rect.Min.y, clip_rect.Max.y);
+        r.Max.y = ImClamp(r.Max.y, clip_rect.Min.y, clip_rect.Max.y);
+    }
+    else
+    {
+        r.Min.x = ImClamp(r.Min.x, clip_rect.Min.x, clip_rect.Max.x);
+        r.Max.x = ImClamp(r.Max.x, clip_rect.Min.x, clip_rect.Max.x);
+    }
+}
+
+// Scoring function for directional navigation. Based on https://gist.github.com/rygorous/6981057
+static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.NavLayer != window->DC.NavLayerCurrent)
+        return false;
+
+    const ImRect& curr = g.NavScoringRectScreen; // Current modified source rect (NB: we've applied Max.x = Min.x in NavUpdate() to inhibit the effect of having varied item width)
+    g.NavScoringCount++;
+
+    // When entering through a NavFlattened border, we consider child window items as fully clipped for scoring
+    if (window->ParentWindow == g.NavWindow)
+    {
+        IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened);
+        if (!window->ClipRect.Overlaps(cand))
+            return false;
+        cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window
+    }
+
+    // We perform scoring on items bounding box clipped by the current clipping rectangle on the other axis (clipping on our movement axis would give us equal scores for all clipped items)
+    // For example, this ensure that items in one column are not reached when moving vertically from items in another column.
+    NavClampRectToVisibleAreaForMoveDir(g.NavMoveClipDir, cand, window->ClipRect);
+
+    // Compute distance between boxes
+    // FIXME-NAV: Introducing biases for vertical navigation, needs to be removed.
+    float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x);
+    float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items
+    if (dby != 0.0f && dbx != 0.0f)
+       dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f);
+    float dist_box = ImFabs(dbx) + ImFabs(dby);
+
+    // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter)
+    float dcx = (cand.Min.x + cand.Max.x) - (curr.Min.x + curr.Max.x);
+    float dcy = (cand.Min.y + cand.Max.y) - (curr.Min.y + curr.Max.y);
+    float dist_center = ImFabs(dcx) + ImFabs(dcy); // L1 metric (need this for our connectedness guarantee)
+
+    // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance
+    ImGuiDir quadrant;
+    float dax = 0.0f, day = 0.0f, dist_axial = 0.0f;
+    if (dbx != 0.0f || dby != 0.0f)
+    {
+        // For non-overlapping boxes, use distance between boxes
+        dax = dbx;
+        day = dby;
+        dist_axial = dist_box;
+        quadrant = ImGetDirQuadrantFromDelta(dbx, dby);
+    }
+    else if (dcx != 0.0f || dcy != 0.0f)
+    {
+        // For overlapping boxes with different centers, use distance between centers
+        dax = dcx;
+        day = dcy;
+        dist_axial = dist_center;
+        quadrant = ImGetDirQuadrantFromDelta(dcx, dcy);
+    }
+    else
+    {
+        // Degenerate case: two overlapping buttons with same center, break ties arbitrarily (note that LastItemId here is really the _previous_ item order, but it doesn't matter)
+        quadrant = (window->DC.LastItemId < g.NavId) ? ImGuiDir_Left : ImGuiDir_Right;
+    }
+
+#if IMGUI_DEBUG_NAV_SCORING
+    char buf[128];
+    if (IsMouseHoveringRect(cand.Min, cand.Max))
+    {
+        ImFormatString(buf, IM_ARRAYSIZE(buf), "dbox (%.2f,%.2f->%.4f)\ndcen (%.2f,%.2f->%.4f)\nd (%.2f,%.2f->%.4f)\nnav %c, quadrant %c", dbx, dby, dist_box, dcx, dcy, dist_center, dax, day, dist_axial, "WENS"[g.NavMoveDir], "WENS"[quadrant]);
+        ImDrawList* draw_list = GetForegroundDrawList(window);
+        draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100));
+        draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200));
+        draw_list->AddRectFilled(cand.Max - ImVec2(4,4), cand.Max + CalcTextSize(buf) + ImVec2(4,4), IM_COL32(40,0,0,150));
+        draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf);
+    }
+    else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate.
+    {
+        if (IsKeyPressedMap(ImGuiKey_C)) { g.NavMoveDirLast = (ImGuiDir)((g.NavMoveDirLast + 1) & 3); g.IO.KeysDownDuration[g.IO.KeyMap[ImGuiKey_C]] = 0.01f; }
+        if (quadrant == g.NavMoveDir)
+        {
+            ImFormatString(buf, IM_ARRAYSIZE(buf), "%.0f/%.0f", dist_box, dist_center);
+            ImDrawList* draw_list = GetForegroundDrawList(window);
+            draw_list->AddRectFilled(cand.Min, cand.Max, IM_COL32(255, 0, 0, 200));
+            draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf);
+        }
+    }
+ #endif
+
+    // Is it in the quadrant we're interesting in moving to?
+    bool new_best = false;
+    if (quadrant == g.NavMoveDir)
+    {
+        // Does it beat the current best candidate?
+        if (dist_box < result->DistBox)
+        {
+            result->DistBox = dist_box;
+            result->DistCenter = dist_center;
+            return true;
+        }
+        if (dist_box == result->DistBox)
+        {
+            // Try using distance between center points to break ties
+            if (dist_center < result->DistCenter)
+            {
+                result->DistCenter = dist_center;
+                new_best = true;
+            }
+            else if (dist_center == result->DistCenter)
+            {
+                // Still tied! we need to be extra-careful to make sure everything gets linked properly. We consistently break ties by symbolically moving "later" items
+                // (with higher index) to the right/downwards by an infinitesimal amount since we the current "best" button already (so it must have a lower index),
+                // this is fairly easy. This rule ensures that all buttons with dx==dy==0 will end up being linked in order of appearance along the x axis.
+                if (((g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down) ? dby : dbx) < 0.0f) // moving bj to the right/down decreases distance
+                    new_best = true;
+            }
+        }
+    }
+
+    // Axial check: if 'curr' has no link at all in some direction and 'cand' lies roughly in that direction, add a tentative link. This will only be kept if no "real" matches
+    // are found, so it only augments the graph produced by the above method using extra links. (important, since it doesn't guarantee strong connectedness)
+    // This is just to avoid buttons having no links in a particular direction when there's a suitable neighbor. you get good graphs without this too.
+    // 2017/09/29: FIXME: This now currently only enabled inside menu bars, ideally we'd disable it everywhere. Menus in particular need to catch failure. For general navigation it feels awkward.
+    // Disabling it may lead to disconnected graphs when nodes are very spaced out on different axis. Perhaps consider offering this as an option?
+    if (result->DistBox == FLT_MAX && dist_axial < result->DistAxial)  // Check axial match
+        if (g.NavLayer == 1 && !(g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
+            if ((g.NavMoveDir == ImGuiDir_Left && dax < 0.0f) || (g.NavMoveDir == ImGuiDir_Right && dax > 0.0f) || (g.NavMoveDir == ImGuiDir_Up && day < 0.0f) || (g.NavMoveDir == ImGuiDir_Down && day > 0.0f))
+            {
+                result->DistAxial = dist_axial;
+                new_best = true;
+            }
+
+    return new_best;
+}
+
+// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
+static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    //if (!g.IO.NavActive)  // [2017/10/06] Removed this possibly redundant test but I am not sure of all the side-effects yet. Some of the feature here will need to work regardless of using a _NoNavInputs flag.
+    //    return;
+
+    const ImGuiItemFlags item_flags = window->DC.ItemFlags;
+    const ImRect nav_bb_rel(nav_bb.Min - window->Pos, nav_bb.Max - window->Pos);
+
+    // Process Init Request
+    if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent)
+    {
+        // Even if 'ImGuiItemFlags_NoNavDefaultFocus' is on (typically collapse/close button) we record the first ResultId so they can be used as a fallback
+        if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus) || g.NavInitResultId == 0)
+        {
+            g.NavInitResultId = id;
+            g.NavInitResultRectRel = nav_bb_rel;
+        }
+        if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus))
+        {
+            g.NavInitRequest = false; // Found a match, clear request
+            NavUpdateAnyRequestFlag();
+        }
+    }
+
+    // Process Move Request (scoring for navigation)
+    // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy)
+    if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled|ImGuiItemFlags_NoNav)))
+    {
+        ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
+#if IMGUI_DEBUG_NAV_SCORING
+        // [DEBUG] Score all items in NavWindow at all times
+        if (!g.NavMoveRequest)
+            g.NavMoveDir = g.NavMoveDirLast;
+        bool new_best = NavScoreItem(result, nav_bb) && g.NavMoveRequest;
+#else
+        bool new_best = g.NavMoveRequest && NavScoreItem(result, nav_bb);
+#endif
+        if (new_best)
+        {
+            result->Window = window;
+            result->ID = id;
+            result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
+            result->RectRel = nav_bb_rel;
+        }
+
+        // Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
+        const float VISIBLE_RATIO = 0.70f;
+        if ((g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
+            if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
+                if (NavScoreItem(&g.NavMoveResultLocalVisibleSet, nav_bb))
+                {
+                    result = &g.NavMoveResultLocalVisibleSet;
+                    result->Window = window;
+                    result->ID = id;
+                    result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
+                    result->RectRel = nav_bb_rel;
+                }
+    }
+
+    // Update window-relative bounding box of navigated item
+    if (g.NavId == id)
+    {
+        g.NavWindow = window;                                           // Always refresh g.NavWindow, because some operations such as FocusItem() don't have a window.
+        g.NavLayer = window->DC.NavLayerCurrent;
+        g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
+        g.NavIdIsAlive = true;
+        g.NavIdTabCounter = window->DC.FocusCounterTabStop;
+        window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel;    // Store item bounding box (relative to window position)
+    }
+}
+
+bool ImGui::NavMoveRequestButNoResultYet()
+{
+    ImGuiContext& g = *GImGui;
+    return g.NavMoveRequest && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0;
+}
+
+void ImGui::NavMoveRequestCancel()
+{
+    ImGuiContext& g = *GImGui;
+    g.NavMoveRequest = false;
+    NavUpdateAnyRequestFlag();
+}
+
+void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None);
+    NavMoveRequestCancel();
+    g.NavMoveDir = move_dir;
+    g.NavMoveClipDir = clip_dir;
+    g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
+    g.NavMoveRequestFlags = move_flags;
+    g.NavWindow->NavRectRel[g.NavLayer] = bb_rel;
+}
+
+void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != 0)
+        return;
+    IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
+    ImRect bb_rel = window->NavRectRel[0];
+
+    ImGuiDir clip_dir = g.NavMoveDir;
+    if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
+    {
+        bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x;
+        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
+        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
+    }
+    if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
+    {
+        bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
+        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; }
+        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
+    }
+    if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
+    {
+        bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y;
+        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
+        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
+    }
+    if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
+    {
+        bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
+        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; }
+        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
+    }
+}
+
+// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0).
+// This way we could find the last focused window among our children. It would be much less confusing this way?
+static void ImGui::NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window)
+{
+    ImGuiWindow* parent_window = nav_window;
+    while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
+        parent_window = parent_window->ParentWindow;
+    if (parent_window && parent_window != nav_window)
+        parent_window->NavLastChildNavWindow = nav_window;
+}
+
+// Restore the last focused child.
+// Call when we are expected to land on the Main Layer (0) after FocusWindow()
+static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window)
+{
+    return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window;
+}
+
+static void NavRestoreLayer(ImGuiNavLayer layer)
+{
+    ImGuiContext& g = *GImGui;
+    g.NavLayer = layer;
+    if (layer == 0)
+        g.NavWindow = ImGui::NavRestoreLastChildNavWindow(g.NavWindow);
+    ImGuiWindow* window = g.NavWindow;
+    if (layer == 0 && window->NavLastIds[0] != 0)
+        ImGui::SetNavIDWithRectRel(window->NavLastIds[0], layer, 0, window->NavRectRel[0]);
+    else
+        ImGui::NavInitWindow(window, true);
+}
+
+static inline void ImGui::NavUpdateAnyRequestFlag()
+{
+    ImGuiContext& g = *GImGui;
+    g.NavAnyRequest = g.NavMoveRequest || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL);
+    if (g.NavAnyRequest)
+        IM_ASSERT(g.NavWindow != NULL);
+}
+
+// This needs to be called before we submit any widget (aka in or before Begin)
+void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(window == g.NavWindow);
+    bool init_for_nav = false;
+    if (!(window->Flags & ImGuiWindowFlags_NoNavInputs))
+        if (!(window->Flags & ImGuiWindowFlags_ChildWindow) || (window->Flags & ImGuiWindowFlags_Popup) || (window->NavLastIds[0] == 0) || force_reinit)
+            init_for_nav = true;
+    //IMGUI_DEBUG_LOG("[Nav] NavInitWindow() init_for_nav=%d, window=\"%s\", layer=%d\n", init_for_nav, window->Name, g.NavLayer);
+    if (init_for_nav)
+    {
+        SetNavID(0, g.NavLayer, 0);
+        g.NavInitRequest = true;
+        g.NavInitRequestFromMove = false;
+        g.NavInitResultId = 0;
+        g.NavInitResultRectRel = ImRect();
+        NavUpdateAnyRequestFlag();
+    }
+    else
+    {
+        g.NavId = window->NavLastIds[0];
+        g.NavFocusScopeId = 0;
+    }
+}
+
+static ImVec2 ImGui::NavCalcPreferredRefPos()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.NavDisableHighlight || !g.NavDisableMouseHover || !g.NavWindow)
+    {
+        // Mouse (we need a fallback in case the mouse becomes invalid after being used)
+        if (IsMousePosValid(&g.IO.MousePos))
+            return g.IO.MousePos;
+        return g.LastValidMousePos;
+    }
+    else
+    {
+        // When navigation is active and mouse is disabled, decide on an arbitrary position around the bottom left of the currently navigated item.
+        const ImRect& rect_rel = g.NavWindow->NavRectRel[g.NavLayer];
+        ImVec2 pos = g.NavWindow->Pos + ImVec2(rect_rel.Min.x + ImMin(g.Style.FramePadding.x * 4, rect_rel.GetWidth()), rect_rel.Max.y - ImMin(g.Style.FramePadding.y, rect_rel.GetHeight()));
+        ImRect visible_rect = GetViewportRect();
+        return ImFloor(ImClamp(pos, visible_rect.Min, visible_rect.Max));   // ImFloor() is important because non-integer mouse position application in back-end might be lossy and result in undesirable non-zero delta.
+    }
+}
+
+float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode)
+{
+    ImGuiContext& g = *GImGui;
+    if (mode == ImGuiInputReadMode_Down)
+        return g.IO.NavInputs[n];                         // Instant, read analog input (0.0f..1.0f, as provided by user)
+
+    const float t = g.IO.NavInputsDownDuration[n];
+    if (t < 0.0f && mode == ImGuiInputReadMode_Released)  // Return 1.0f when just released, no repeat, ignore analog input.
+        return (g.IO.NavInputsDownDurationPrev[n] >= 0.0f ? 1.0f : 0.0f);
+    if (t < 0.0f)
+        return 0.0f;
+    if (mode == ImGuiInputReadMode_Pressed)               // Return 1.0f when just pressed, no repeat, ignore analog input.
+        return (t == 0.0f) ? 1.0f : 0.0f;
+    if (mode == ImGuiInputReadMode_Repeat)
+        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.80f);
+    if (mode == ImGuiInputReadMode_RepeatSlow)
+        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 1.25f, g.IO.KeyRepeatRate * 2.00f);
+    if (mode == ImGuiInputReadMode_RepeatFast)
+        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.30f);
+    return 0.0f;
+}
+
+ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor, float fast_factor)
+{
+    ImVec2 delta(0.0f, 0.0f);
+    if (dir_sources & ImGuiNavDirSourceFlags_Keyboard)
+        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_KeyRight_, mode)   - GetNavInputAmount(ImGuiNavInput_KeyLeft_,   mode), GetNavInputAmount(ImGuiNavInput_KeyDown_,   mode) - GetNavInputAmount(ImGuiNavInput_KeyUp_,   mode));
+    if (dir_sources & ImGuiNavDirSourceFlags_PadDPad)
+        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_DpadRight, mode)   - GetNavInputAmount(ImGuiNavInput_DpadLeft,   mode), GetNavInputAmount(ImGuiNavInput_DpadDown,   mode) - GetNavInputAmount(ImGuiNavInput_DpadUp,   mode));
+    if (dir_sources & ImGuiNavDirSourceFlags_PadLStick)
+        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_LStickRight, mode) - GetNavInputAmount(ImGuiNavInput_LStickLeft, mode), GetNavInputAmount(ImGuiNavInput_LStickDown, mode) - GetNavInputAmount(ImGuiNavInput_LStickUp, mode));
+    if (slow_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakSlow))
+        delta *= slow_factor;
+    if (fast_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakFast))
+        delta *= fast_factor;
+    return delta;
+}
+
+static void ImGui::NavUpdate()
+{
+    ImGuiContext& g = *GImGui;
+    g.IO.WantSetMousePos = false;
+#if 0
+    if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
+#endif
+
+    // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard)
+    // (do it before we map Keyboard input!)
+    bool nav_keyboard_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0;
+    bool nav_gamepad_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (g.IO.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0;
+    if (nav_gamepad_active)
+        if (g.IO.NavInputs[ImGuiNavInput_Activate] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Input] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Cancel] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Menu] > 0.0f)
+            g.NavInputSource = ImGuiInputSource_NavGamepad;
+
+    // Update Keyboard->Nav inputs mapping
+    if (nav_keyboard_active)
+    {
+        #define NAV_MAP_KEY(_KEY, _NAV_INPUT)  do { if (IsKeyDown(g.IO.KeyMap[_KEY])) { g.IO.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_NavKeyboard; } } while (0)
+        NAV_MAP_KEY(ImGuiKey_Space,     ImGuiNavInput_Activate );
+        NAV_MAP_KEY(ImGuiKey_Enter,     ImGuiNavInput_Input    );
+        NAV_MAP_KEY(ImGuiKey_Escape,    ImGuiNavInput_Cancel   );
+        NAV_MAP_KEY(ImGuiKey_LeftArrow, ImGuiNavInput_KeyLeft_ );
+        NAV_MAP_KEY(ImGuiKey_RightArrow,ImGuiNavInput_KeyRight_);
+        NAV_MAP_KEY(ImGuiKey_UpArrow,   ImGuiNavInput_KeyUp_   );
+        NAV_MAP_KEY(ImGuiKey_DownArrow, ImGuiNavInput_KeyDown_ );
+        if (g.IO.KeyCtrl)
+            g.IO.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f;
+        if (g.IO.KeyShift)
+            g.IO.NavInputs[ImGuiNavInput_TweakFast] = 1.0f;
+        if (g.IO.KeyAlt && !g.IO.KeyCtrl) // AltGR is Alt+Ctrl, also even on keyboards without AltGR we don't want Alt+Ctrl to open menu.
+            g.IO.NavInputs[ImGuiNavInput_KeyMenu_]  = 1.0f;
+        #undef NAV_MAP_KEY
+    }
+    memcpy(g.IO.NavInputsDownDurationPrev, g.IO.NavInputsDownDuration, sizeof(g.IO.NavInputsDownDuration));
+    for (int i = 0; i < IM_ARRAYSIZE(g.IO.NavInputs); i++)
+        g.IO.NavInputsDownDuration[i] = (g.IO.NavInputs[i] > 0.0f) ? (g.IO.NavInputsDownDuration[i] < 0.0f ? 0.0f : g.IO.NavInputsDownDuration[i] + g.IO.DeltaTime) : -1.0f;
+
+    // Process navigation init request (select first/default focus)
+    // In very rare cases g.NavWindow may be null (e.g. clearing focus after requesting an init request, which does happen when releasing Alt while clicking on void)
+    if (g.NavInitResultId != 0 && (!g.NavDisableHighlight || g.NavInitRequestFromMove) && g.NavWindow)
+    {
+        // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
+        //IMGUI_DEBUG_LOG("[Nav] Apply NavInitRequest result: 0x%08X Layer %d in \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name);
+        if (g.NavInitRequestFromMove)
+            SetNavIDWithRectRel(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel);
+        else
+            SetNavID(g.NavInitResultId, g.NavLayer, 0);
+        g.NavWindow->NavRectRel[g.NavLayer] = g.NavInitResultRectRel;
+    }
+    g.NavInitRequest = false;
+    g.NavInitRequestFromMove = false;
+    g.NavInitResultId = 0;
+    g.NavJustMovedToId = 0;
+
+    // Process navigation move request
+    if (g.NavMoveRequest)
+        NavUpdateMoveResult();
+
+    // When a forwarded move request failed, we restore the highlight that we disabled during the forward frame
+    if (g.NavMoveRequestForward == ImGuiNavForward_ForwardActive)
+    {
+        IM_ASSERT(g.NavMoveRequest);
+        if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0)
+            g.NavDisableHighlight = false;
+        g.NavMoveRequestForward = ImGuiNavForward_None;
+    }
+
+    // Apply application mouse position movement, after we had a chance to process move request result.
+    if (g.NavMousePosDirty && g.NavIdIsAlive)
+    {
+        // Set mouse position given our knowledge of the navigated item position from last frame
+        if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) && (g.IO.BackendFlags & ImGuiBackendFlags_HasSetMousePos))
+        {
+            if (!g.NavDisableHighlight && g.NavDisableMouseHover && g.NavWindow)
+            {
+                g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredRefPos();
+                g.IO.WantSetMousePos = true;
+            }
+        }
+        g.NavMousePosDirty = false;
+    }
+    g.NavIdIsAlive = false;
+    g.NavJustTabbedId = 0;
+    IM_ASSERT(g.NavLayer == 0 || g.NavLayer == 1);
+
+    // Store our return window (for returning from Layer 1 to Layer 0) and clear it as soon as we step back in our own Layer 0
+    if (g.NavWindow)
+        NavSaveLastChildNavWindowIntoParent(g.NavWindow);
+    if (g.NavWindow && g.NavWindow->NavLastChildNavWindow != NULL && g.NavLayer == 0)
+        g.NavWindow->NavLastChildNavWindow = NULL;
+
+    // Update CTRL+TAB and Windowing features (hold Square to move/resize/etc.)
+    NavUpdateWindowing();
+
+    // Set output flags for user application
+    g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs);
+    g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL);
+
+    // Process NavCancel input (to close a popup, get back to parent, clear focus)
+    if (IsNavInputTest(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed))
+    {
+        if (g.ActiveId != 0)
+        {
+            if (!IsActiveIdUsingNavInput(ImGuiNavInput_Cancel))
+                ClearActiveID();
+        }
+        else if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow) && !(g.NavWindow->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->ParentWindow)
+        {
+            // Exit child window
+            ImGuiWindow* child_window = g.NavWindow;
+            ImGuiWindow* parent_window = g.NavWindow->ParentWindow;
+            IM_ASSERT(child_window->ChildId != 0);
+            FocusWindow(parent_window);
+            SetNavID(child_window->ChildId, 0, 0);
+            // Reassigning with same value, we're being explicit here.
+            g.NavIdIsAlive = false;     // -V1048
+            if (g.NavDisableMouseHover)
+                g.NavMousePosDirty = true;
+        }
+        else if (g.OpenPopupStack.Size > 0)
+        {
+            // Close open popup/menu
+            if (!(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal))
+                ClosePopupToLevel(g.OpenPopupStack.Size - 1, true);
+        }
+        else if (g.NavLayer != 0)
+        {
+            // Leave the "menu" layer
+            NavRestoreLayer(ImGuiNavLayer_Main);
+        }
+        else
+        {
+            // Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were
+            if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup) || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow)))
+                g.NavWindow->NavLastIds[0] = 0;
+            g.NavId = g.NavFocusScopeId = 0;
+        }
+    }
+
+    // Process manual activation request
+    g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = 0;
+    if (g.NavId != 0 && !g.NavDisableHighlight && !g.NavWindowingTarget && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+    {
+        bool activate_down = IsNavInputDown(ImGuiNavInput_Activate);
+        bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiInputReadMode_Pressed);
+        if (g.ActiveId == 0 && activate_pressed)
+            g.NavActivateId = g.NavId;
+        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_down)
+            g.NavActivateDownId = g.NavId;
+        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_pressed)
+            g.NavActivatePressedId = g.NavId;
+        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && IsNavInputTest(ImGuiNavInput_Input, ImGuiInputReadMode_Pressed))
+            g.NavInputId = g.NavId;
+    }
+    if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+        g.NavDisableHighlight = true;
+    if (g.NavActivateId != 0)
+        IM_ASSERT(g.NavActivateDownId == g.NavActivateId);
+    g.NavMoveRequest = false;
+
+    // Process programmatic activation request
+    if (g.NavNextActivateId != 0)
+        g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = g.NavNextActivateId;
+    g.NavNextActivateId = 0;
+
+    // Initiate directional inputs request
+    if (g.NavMoveRequestForward == ImGuiNavForward_None)
+    {
+        g.NavMoveDir = ImGuiDir_None;
+        g.NavMoveRequestFlags = ImGuiNavMoveFlags_None;
+        if (g.NavWindow && !g.NavWindowingTarget && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+        {
+            const ImGuiInputReadMode read_mode = ImGuiInputReadMode_Repeat;
+            if (!IsActiveIdUsingNavDir(ImGuiDir_Left)  && (IsNavInputTest(ImGuiNavInput_DpadLeft,  read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_,  read_mode))) { g.NavMoveDir = ImGuiDir_Left; }
+            if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; }
+            if (!IsActiveIdUsingNavDir(ImGuiDir_Up)    && (IsNavInputTest(ImGuiNavInput_DpadUp,    read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_,    read_mode))) { g.NavMoveDir = ImGuiDir_Up; }
+            if (!IsActiveIdUsingNavDir(ImGuiDir_Down)  && (IsNavInputTest(ImGuiNavInput_DpadDown,  read_mode) || IsNavInputTest(ImGuiNavInput_KeyDown_,  read_mode))) { g.NavMoveDir = ImGuiDir_Down; }
+        }
+        g.NavMoveClipDir = g.NavMoveDir;
+    }
+    else
+    {
+        // Forwarding previous request (which has been modified, e.g. wrap around menus rewrite the requests with a starting rectangle at the other side of the window)
+        // (Preserve g.NavMoveRequestFlags, g.NavMoveClipDir which were set by the NavMoveRequestForward() function)
+        IM_ASSERT(g.NavMoveDir != ImGuiDir_None && g.NavMoveClipDir != ImGuiDir_None);
+        IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_ForwardQueued);
+        g.NavMoveRequestForward = ImGuiNavForward_ForwardActive;
+    }
+
+    // Update PageUp/PageDown/Home/End scroll
+    // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag?
+    float nav_scoring_rect_offset_y = 0.0f;
+    if (nav_keyboard_active)
+        nav_scoring_rect_offset_y = NavUpdatePageUpPageDown();
+
+    // If we initiate a movement request and have no current NavId, we initiate a InitDefautRequest that will be used as a fallback if the direction fails to find a match
+    if (g.NavMoveDir != ImGuiDir_None)
+    {
+        g.NavMoveRequest = true;
+        g.NavMoveDirLast = g.NavMoveDir;
+    }
+    if (g.NavMoveRequest && g.NavId == 0)
+    {
+        //IMGUI_DEBUG_LOG("[Nav] NavInitRequest from move, window \"%s\", layer=%d\n", g.NavWindow->Name, g.NavLayer);
+        g.NavInitRequest = g.NavInitRequestFromMove = true;
+        // Reassigning with same value, we're being explicit here.
+        g.NavInitResultId = 0;     // -V1048
+        g.NavDisableHighlight = false;
+    }
+    NavUpdateAnyRequestFlag();
+
+    // Scrolling
+    if (g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.NavWindowingTarget)
+    {
+        // *Fallback* manual-scroll with Nav directional keys when window has no navigable item
+        ImGuiWindow* window = g.NavWindow;
+        const float scroll_speed = IM_ROUND(window->CalcFontSize() * 100 * g.IO.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported.
+        if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll && g.NavMoveRequest)
+        {
+            if (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right)
+                SetScrollX(window, ImFloor(window->Scroll.x + ((g.NavMoveDir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed));
+            if (g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down)
+                SetScrollY(window, ImFloor(window->Scroll.y + ((g.NavMoveDir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed));
+        }
+
+        // *Normal* Manual scroll with NavScrollXXX keys
+        // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds.
+        ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f/10.0f, 10.0f);
+        if (scroll_dir.x != 0.0f && window->ScrollbarX)
+        {
+            SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed));
+            g.NavMoveFromClampedRefRect = true;
+        }
+        if (scroll_dir.y != 0.0f)
+        {
+            SetScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed));
+            g.NavMoveFromClampedRefRect = true;
+        }
+    }
+
+    // Reset search results
+    g.NavMoveResultLocal.Clear();
+    g.NavMoveResultLocalVisibleSet.Clear();
+    g.NavMoveResultOther.Clear();
+
+    // When we have manually scrolled (without using navigation) and NavId becomes out of bounds, we project its bounding box to the visible area to restart navigation within visible items
+    if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == 0)
+    {
+        ImGuiWindow* window = g.NavWindow;
+        ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1,1), window->InnerRect.Max - window->Pos + ImVec2(1,1));
+        if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
+        {
+            float pad = window->CalcFontSize() * 0.5f;
+            window_rect_rel.Expand(ImVec2(-ImMin(window_rect_rel.GetWidth(), pad), -ImMin(window_rect_rel.GetHeight(), pad))); // Terrible approximation for the intent of starting navigation from first fully visible item
+            window->NavRectRel[g.NavLayer].ClipWith(window_rect_rel);
+            g.NavId = g.NavFocusScopeId = 0;
+        }
+        g.NavMoveFromClampedRefRect = false;
+    }
+
+    // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items)
+    ImRect nav_rect_rel = (g.NavWindow && !g.NavWindow->NavRectRel[g.NavLayer].IsInverted()) ? g.NavWindow->NavRectRel[g.NavLayer] : ImRect(0,0,0,0);
+    g.NavScoringRectScreen = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect();
+    g.NavScoringRectScreen.TranslateY(nav_scoring_rect_offset_y);
+    g.NavScoringRectScreen.Min.x = ImMin(g.NavScoringRectScreen.Min.x + 1.0f, g.NavScoringRectScreen.Max.x);
+    g.NavScoringRectScreen.Max.x = g.NavScoringRectScreen.Min.x;
+    IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem().
+    //GetForegroundDrawList()->AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG]
+    g.NavScoringCount = 0;
+#if IMGUI_DEBUG_NAV_RECTS
+    if (g.NavWindow)
+    {
+        ImDrawList* draw_list = GetForegroundDrawList(g.NavWindow);
+        if (1) { for (int layer = 0; layer < 2; layer++) draw_list->AddRect(g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Min, g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Max, IM_COL32(255,200,0,255)); } // [DEBUG]
+        if (1) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); draw_list->AddCircleFilled(p, 3.0f, col); draw_list->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); }
+    }
+#endif
+}
+
+// Apply result from previous frame navigation directional move request
+static void ImGui::NavUpdateMoveResult()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0)
+    {
+        // In a situation when there is no results but NavId != 0, re-enable the Navigation highlight (because g.NavId is not considered as a possible result)
+        if (g.NavId != 0)
+        {
+            g.NavDisableHighlight = false;
+            g.NavDisableMouseHover = true;
+        }
+        return;
+    }
+
+    // Select which result to use
+    ImGuiNavMoveResult* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
+
+    // PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page.
+    if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet)
+        if (g.NavMoveResultLocalVisibleSet.ID != 0 && g.NavMoveResultLocalVisibleSet.ID != g.NavId)
+            result = &g.NavMoveResultLocalVisibleSet;
+
+    // Maybe entering a flattened child from the outside? In this case solve the tie using the regular scoring rules.
+    if (result != &g.NavMoveResultOther && g.NavMoveResultOther.ID != 0 && g.NavMoveResultOther.Window->ParentWindow == g.NavWindow)
+        if ((g.NavMoveResultOther.DistBox < result->DistBox) || (g.NavMoveResultOther.DistBox == result->DistBox && g.NavMoveResultOther.DistCenter < result->DistCenter))
+            result = &g.NavMoveResultOther;
+    IM_ASSERT(g.NavWindow && result->Window);
+
+    // Scroll to keep newly navigated item fully into view.
+    if (g.NavLayer == 0)
+    {
+        ImVec2 delta_scroll;
+        if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_ScrollToEdge)
+        {
+            float scroll_target = (g.NavMoveDir == ImGuiDir_Up) ? result->Window->ScrollMax.y : 0.0f;
+            delta_scroll.y = result->Window->Scroll.y - scroll_target;
+            SetScrollY(result->Window, scroll_target);
+        }
+        else
+        {
+            ImRect rect_abs = ImRect(result->RectRel.Min + result->Window->Pos, result->RectRel.Max + result->Window->Pos);
+            delta_scroll = ScrollToBringRectIntoView(result->Window, rect_abs);
+        }
+
+        // Offset our result position so mouse position can be applied immediately after in NavUpdate()
+        result->RectRel.TranslateX(-delta_scroll.x);
+        result->RectRel.TranslateY(-delta_scroll.y);
+    }
+
+    ClearActiveID();
+    g.NavWindow = result->Window;
+    if (g.NavId != result->ID)
+    {
+        // Don't set NavJustMovedToId if just landed on the same spot (which may happen with ImGuiNavMoveFlags_AllowCurrentNavId)
+        g.NavJustMovedToId = result->ID;
+        g.NavJustMovedToFocusScopeId = result->FocusScopeId;
+
+    }
+    SetNavIDWithRectRel(result->ID, g.NavLayer, result->FocusScopeId, result->RectRel);
+    g.NavMoveFromClampedRefRect = false;
+}
+
+// Handle PageUp/PageDown/Home/End keys
+static float ImGui::NavUpdatePageUpPageDown()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.NavMoveDir != ImGuiDir_None || g.NavWindow == NULL)
+        return 0.0f;
+    if ((g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL || g.NavLayer != 0)
+        return 0.0f;
+
+    ImGuiWindow* window = g.NavWindow;
+    const bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && !IsActiveIdUsingKey(ImGuiKey_PageUp);
+    const bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && !IsActiveIdUsingKey(ImGuiKey_PageDown);
+    const bool home_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_Home]) && !IsActiveIdUsingKey(ImGuiKey_Home);
+    const bool end_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_End]) && !IsActiveIdUsingKey(ImGuiKey_End);
+    if (page_up_held != page_down_held || home_pressed != end_pressed) // If either (not both) are pressed
+    {
+        if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll)
+        {
+            // Fallback manual-scroll when window has no navigable item
+            if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
+                SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight());
+            else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
+                SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight());
+            else if (home_pressed)
+                SetScrollY(window, 0.0f);
+            else if (end_pressed)
+                SetScrollY(window, window->ScrollMax.y);
+        }
+        else
+        {
+            ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
+            const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
+            float nav_scoring_rect_offset_y = 0.0f;
+            if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
+            {
+                nav_scoring_rect_offset_y = -page_offset_y;
+                g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
+                g.NavMoveClipDir = ImGuiDir_Up;
+                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
+            }
+            else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
+            {
+                nav_scoring_rect_offset_y = +page_offset_y;
+                g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
+                g.NavMoveClipDir = ImGuiDir_Down;
+                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
+            }
+            else if (home_pressed)
+            {
+                // FIXME-NAV: handling of Home/End is assuming that the top/bottom most item will be visible with Scroll.y == 0/ScrollMax.y
+                // Scrolling will be handled via the ImGuiNavMoveFlags_ScrollToEdge flag, we don't scroll immediately to avoid scrolling happening before nav result.
+                // Preserve current horizontal position if we have any.
+                nav_rect_rel.Min.y = nav_rect_rel.Max.y = -window->Scroll.y;
+                if (nav_rect_rel.IsInverted())
+                    nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+                g.NavMoveDir = ImGuiDir_Down;
+                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
+            }
+            else if (end_pressed)
+            {
+                nav_rect_rel.Min.y = nav_rect_rel.Max.y = window->ScrollMax.y + window->SizeFull.y - window->Scroll.y;
+                if (nav_rect_rel.IsInverted())
+                    nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+                g.NavMoveDir = ImGuiDir_Up;
+                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
+            }
+            return nav_scoring_rect_offset_y;
+        }
+    }
+    return 0.0f;
+}
+
+static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N)
+{
+    ImGuiContext& g = *GImGui;
+    for (int i = g.WindowsFocusOrder.Size-1; i >= 0; i--)
+        if (g.WindowsFocusOrder[i] == window)
+            return i;
+    return -1;
+}
+
+static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int dir) // FIXME-OPT O(N)
+{
+    ImGuiContext& g = *GImGui;
+    for (int i = i_start; i >= 0 && i < g.WindowsFocusOrder.Size && i != i_stop; i += dir)
+        if (ImGui::IsWindowNavFocusable(g.WindowsFocusOrder[i]))
+            return g.WindowsFocusOrder[i];
+    return NULL;
+}
+
+static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.NavWindowingTarget);
+    if (g.NavWindowingTarget->Flags & ImGuiWindowFlags_Modal)
+        return;
+
+    const int i_current = ImGui::FindWindowFocusIndex(g.NavWindowingTarget);
+    ImGuiWindow* window_target = FindWindowNavFocusable(i_current + focus_change_dir, -INT_MAX, focus_change_dir);
+    if (!window_target)
+        window_target = FindWindowNavFocusable((focus_change_dir < 0) ? (g.WindowsFocusOrder.Size - 1) : 0, i_current, focus_change_dir);
+    if (window_target) // Don't reset windowing target if there's a single window in the list
+        g.NavWindowingTarget = g.NavWindowingTargetAnim = window_target;
+    g.NavWindowingToggleLayer = false;
+}
+
+// Windowing management mode
+// Keyboard: CTRL+Tab (change focus/move/resize), Alt (toggle menu layer)
+// Gamepad:  Hold Menu/Square (change focus/move/resize), Tap Menu/Square (toggle menu layer)
+static void ImGui::NavUpdateWindowing()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* apply_focus_window = NULL;
+    bool apply_toggle_layer = false;
+
+    ImGuiWindow* modal_window = GetTopMostPopupModal();
+    if (modal_window != NULL)
+    {
+        g.NavWindowingTarget = NULL;
+        return;
+    }
+
+    // Fade out
+    if (g.NavWindowingTargetAnim && g.NavWindowingTarget == NULL)
+    {
+        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha - g.IO.DeltaTime * 10.0f, 0.0f);
+        if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f)
+            g.NavWindowingTargetAnim = NULL;
+    }
+
+    // Start CTRL-TAB or Square+L/R window selection
+    bool start_windowing_with_gamepad = !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiInputReadMode_Pressed);
+    bool start_windowing_with_keyboard = !g.NavWindowingTarget && g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab) && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard);
+    if (start_windowing_with_gamepad || start_windowing_with_keyboard)
+        if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavFocusable(g.WindowsFocusOrder.Size - 1, -INT_MAX, -1))
+        {
+            g.NavWindowingTarget = g.NavWindowingTargetAnim = window->RootWindow; // FIXME-DOCK: Will need to use RootWindowDockStop
+            g.NavWindowingTimer = g.NavWindowingHighlightAlpha = 0.0f;
+            g.NavWindowingToggleLayer = start_windowing_with_keyboard ? false : true;
+            g.NavInputSource = start_windowing_with_keyboard ? ImGuiInputSource_NavKeyboard : ImGuiInputSource_NavGamepad;
+        }
+
+    // Gamepad update
+    g.NavWindowingTimer += g.IO.DeltaTime;
+    if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavGamepad)
+    {
+        // Highlight only appears after a brief time holding the button, so that a fast tap on PadMenu (to toggle NavLayer) doesn't add visual noise
+        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f));
+
+        // Select window to focus
+        const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiInputReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiInputReadMode_RepeatSlow);
+        if (focus_change_dir != 0)
+        {
+            NavUpdateWindowingHighlightWindow(focus_change_dir);
+            g.NavWindowingHighlightAlpha = 1.0f;
+        }
+
+        // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered top-most)
+        if (!IsNavInputDown(ImGuiNavInput_Menu))
+        {
+            g.NavWindowingToggleLayer &= (g.NavWindowingHighlightAlpha < 1.0f); // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore.
+            if (g.NavWindowingToggleLayer && g.NavWindow)
+                apply_toggle_layer = true;
+            else if (!g.NavWindowingToggleLayer)
+                apply_focus_window = g.NavWindowingTarget;
+            g.NavWindowingTarget = NULL;
+        }
+    }
+
+    // Keyboard: Focus
+    if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavKeyboard)
+    {
+        // Visuals only appears after a brief time after pressing TAB the first time, so that a fast CTRL+TAB doesn't add visual noise
+        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // 1.0f
+        if (IsKeyPressedMap(ImGuiKey_Tab, true))
+            NavUpdateWindowingHighlightWindow(g.IO.KeyShift ? +1 : -1);
+        if (!g.IO.KeyCtrl)
+            apply_focus_window = g.NavWindowingTarget;
+    }
+
+    // Keyboard: Press and Release ALT to toggle menu layer
+    // FIXME: We lack an explicit IO variable for "is the imgui window focused", so compare mouse validity to detect the common case of back-end clearing releases all keys on ALT-TAB
+    if (IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Pressed))
+        g.NavWindowingToggleLayer = true;
+    if ((g.ActiveId == 0 || g.ActiveIdAllowOverlap) && g.NavWindowingToggleLayer && IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Released))
+        if (IsMousePosValid(&g.IO.MousePos) == IsMousePosValid(&g.IO.MousePosPrev))
+            apply_toggle_layer = true;
+
+    // Move window
+    if (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoMove))
+    {
+        ImVec2 move_delta;
+        if (g.NavInputSource == ImGuiInputSource_NavKeyboard && !g.IO.KeyShift)
+            move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down);
+        if (g.NavInputSource == ImGuiInputSource_NavGamepad)
+            move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down);
+        if (move_delta.x != 0.0f || move_delta.y != 0.0f)
+        {
+            const float NAV_MOVE_SPEED = 800.0f;
+            const float move_speed = ImFloor(NAV_MOVE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y)); // FIXME: Doesn't code variable framerate very well
+            SetWindowPos(g.NavWindowingTarget->RootWindow, g.NavWindowingTarget->RootWindow->Pos + move_delta * move_speed, ImGuiCond_Always);
+            g.NavDisableMouseHover = true;
+            MarkIniSettingsDirty(g.NavWindowingTarget);
+        }
+    }
+
+    // Apply final focus
+    if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindow))
+    {
+        ClearActiveID();
+        g.NavDisableHighlight = false;
+        g.NavDisableMouseHover = true;
+        apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window);
+        ClosePopupsOverWindow(apply_focus_window, false);
+        FocusWindow(apply_focus_window);
+        if (apply_focus_window->NavLastIds[0] == 0)
+            NavInitWindow(apply_focus_window, false);
+
+        // If the window only has a menu layer, select it directly
+        if (apply_focus_window->DC.NavLayerActiveMask == (1 << ImGuiNavLayer_Menu))
+            g.NavLayer = ImGuiNavLayer_Menu;
+    }
+    if (apply_focus_window)
+        g.NavWindowingTarget = NULL;
+
+    // Apply menu/layer toggle
+    if (apply_toggle_layer && g.NavWindow)
+    {
+        // Move to parent menu if necessary
+        ImGuiWindow* new_nav_window = g.NavWindow;
+        while (new_nav_window->ParentWindow
+            && (new_nav_window->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) == 0
+            && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0
+            && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
+            new_nav_window = new_nav_window->ParentWindow;
+        if (new_nav_window != g.NavWindow)
+        {
+            ImGuiWindow* old_nav_window = g.NavWindow;
+            FocusWindow(new_nav_window);
+            new_nav_window->NavLastChildNavWindow = old_nav_window;
+        }
+        g.NavDisableHighlight = false;
+        g.NavDisableMouseHover = true;
+
+        // When entering a regular menu bar with the Alt key, we always reinitialize the navigation ID.
+        const ImGuiNavLayer new_nav_layer = (g.NavWindow->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) ? (ImGuiNavLayer)((int)g.NavLayer ^ 1) : ImGuiNavLayer_Main;
+        NavRestoreLayer(new_nav_layer);
+    }
+}
+
+// Window has already passed the IsWindowNavFocusable()
+static const char* GetFallbackWindowNameForWindowingList(ImGuiWindow* window)
+{
+    if (window->Flags & ImGuiWindowFlags_Popup)
+        return "(Popup)";
+    if ((window->Flags & ImGuiWindowFlags_MenuBar) && strcmp(window->Name, "##MainMenuBar") == 0)
+        return "(Main menu bar)";
+    return "(Untitled)";
+}
+
+// Overlay displayed when using CTRL+TAB. Called by EndFrame().
+void ImGui::NavUpdateWindowingOverlay()
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.NavWindowingTarget != NULL);
+
+    if (g.NavWindowingTimer < NAV_WINDOWING_LIST_APPEAR_DELAY)
+        return;
+
+    if (g.NavWindowingList == NULL)
+        g.NavWindowingList = FindWindowByName("###NavWindowingList");
+    SetNextWindowSizeConstraints(ImVec2(g.IO.DisplaySize.x * 0.20f, g.IO.DisplaySize.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
+    SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
+    PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
+    Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings);
+    for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--)
+    {
+        ImGuiWindow* window = g.WindowsFocusOrder[n];
+        if (!IsWindowNavFocusable(window))
+            continue;
+        const char* label = window->Name;
+        if (label == FindRenderedTextEnd(label))
+            label = GetFallbackWindowNameForWindowingList(window);
+        Selectable(label, g.NavWindowingTarget == window);
+    }
+    End();
+    PopStyleVar();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] DRAG AND DROP
+//-----------------------------------------------------------------------------
+
+void ImGui::ClearDragDrop()
+{
+    ImGuiContext& g = *GImGui;
+    g.DragDropActive = false;
+    g.DragDropPayload.Clear();
+    g.DragDropAcceptFlags = ImGuiDragDropFlags_None;
+    g.DragDropAcceptIdCurr = g.DragDropAcceptIdPrev = 0;
+    g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
+    g.DragDropAcceptFrameCount = -1;
+
+    g.DragDropPayloadBufHeap.clear();
+    memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
+}
+
+// Call when current ID is active.
+// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource()
+bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    bool source_drag_active = false;
+    ImGuiID source_id = 0;
+    ImGuiID source_parent_id = 0;
+    ImGuiMouseButton mouse_button = ImGuiMouseButton_Left;
+    if (!(flags & ImGuiDragDropFlags_SourceExtern))
+    {
+        source_id = window->DC.LastItemId;
+        if (source_id != 0 && g.ActiveId != source_id) // Early out for most common case
+            return false;
+        if (g.IO.MouseDown[mouse_button] == false)
+            return false;
+
+        if (source_id == 0)
+        {
+            // If you want to use BeginDragDropSource() on an item with no unique identifier for interaction, such as Text() or Image(), you need to:
+            // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag, C) Swallow your programmer pride.
+            if (!(flags & ImGuiDragDropFlags_SourceAllowNullID))
+            {
+                IM_ASSERT(0);
+                return false;
+            }
+
+            // Early out
+            if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) == 0 && (g.ActiveId == 0 || g.ActiveIdWindow != window))
+                return false;
+
+            // Magic fallback (=somehow reprehensible) to handle items with no assigned ID, e.g. Text(), Image()
+            // We build a throwaway ID based on current ID stack + relative AABB of items in window.
+            // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING OF THE WIDGET, so if your widget moves your dragging operation will be canceled.
+            // We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive.
+            source_id = window->DC.LastItemId = window->GetIDFromRectangle(window->DC.LastItemRect);
+            bool is_hovered = ItemHoverable(window->DC.LastItemRect, source_id);
+            if (is_hovered && g.IO.MouseClicked[mouse_button])
+            {
+                SetActiveID(source_id, window);
+                FocusWindow(window);
+            }
+            if (g.ActiveId == source_id) // Allow the underlying widget to display/return hovered during the mouse release frame, else we would get a flicker.
+                g.ActiveIdAllowOverlap = is_hovered;
+        }
+        else
+        {
+            g.ActiveIdAllowOverlap = false;
+        }
+        if (g.ActiveId != source_id)
+            return false;
+        source_parent_id = window->IDStack.back();
+        source_drag_active = IsMouseDragging(mouse_button);
+
+        // Disable navigation and key inputs while dragging
+        g.ActiveIdUsingNavDirMask = ~(ImU32)0;
+        g.ActiveIdUsingNavInputMask = ~(ImU32)0;
+        g.ActiveIdUsingKeyInputMask = ~(ImU64)0;
+    }
+    else
+    {
+        window = NULL;
+        source_id = ImHashStr("#SourceExtern");
+        source_drag_active = true;
+    }
+
+    if (source_drag_active)
+    {
+        if (!g.DragDropActive)
+        {
+            IM_ASSERT(source_id != 0);
+            ClearDragDrop();
+            ImGuiPayload& payload = g.DragDropPayload;
+            payload.SourceId = source_id;
+            payload.SourceParentId = source_parent_id;
+            g.DragDropActive = true;
+            g.DragDropSourceFlags = flags;
+            g.DragDropMouseButton = mouse_button;
+        }
+        g.DragDropSourceFrameCount = g.FrameCount;
+        g.DragDropWithinSource = true;
+
+        if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
+        {
+            // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
+            // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
+            BeginTooltip();
+            if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
+            {
+                ImGuiWindow* tooltip_window = g.CurrentWindow;
+                tooltip_window->SkipItems = true;
+                tooltip_window->HiddenFramesCanSkipItems = 1;
+            }
+        }
+
+        if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
+            window->DC.LastItemStatusFlags &= ~ImGuiItemStatusFlags_HoveredRect;
+
+        return true;
+    }
+    return false;
+}
+
+void ImGui::EndDragDropSource()
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.DragDropActive);
+    IM_ASSERT(g.DragDropWithinSource && "Not after a BeginDragDropSource()?");
+
+    if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
+        EndTooltip();
+
+    // Discard the drag if have not called SetDragDropPayload()
+    if (g.DragDropPayload.DataFrameCount == -1)
+        ClearDragDrop();
+    g.DragDropWithinSource = false;
+}
+
+// Use 'cond' to choose to submit payload on drag start or every frame
+bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiPayload& payload = g.DragDropPayload;
+    if (cond == 0)
+        cond = ImGuiCond_Always;
+
+    IM_ASSERT(type != NULL);
+    IM_ASSERT(strlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long");
+    IM_ASSERT((data != NULL && data_size > 0) || (data == NULL && data_size == 0));
+    IM_ASSERT(cond == ImGuiCond_Always || cond == ImGuiCond_Once);
+    IM_ASSERT(payload.SourceId != 0);                               // Not called between BeginDragDropSource() and EndDragDropSource()
+
+    if (cond == ImGuiCond_Always || payload.DataFrameCount == -1)
+    {
+        // Copy payload
+        ImStrncpy(payload.DataType, type, IM_ARRAYSIZE(payload.DataType));
+        g.DragDropPayloadBufHeap.resize(0);
+        if (data_size > sizeof(g.DragDropPayloadBufLocal))
+        {
+            // Store in heap
+            g.DragDropPayloadBufHeap.resize((int)data_size);
+            payload.Data = g.DragDropPayloadBufHeap.Data;
+            memcpy(payload.Data, data, data_size);
+        }
+        else if (data_size > 0)
+        {
+            // Store locally
+            memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
+            payload.Data = g.DragDropPayloadBufLocal;
+            memcpy(payload.Data, data, data_size);
+        }
+        else
+        {
+            payload.Data = NULL;
+        }
+        payload.DataSize = (int)data_size;
+    }
+    payload.DataFrameCount = g.FrameCount;
+
+    return (g.DragDropAcceptFrameCount == g.FrameCount) || (g.DragDropAcceptFrameCount == g.FrameCount - 1);
+}
+
+bool ImGui::BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    if (!g.DragDropActive)
+        return false;
+
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow)
+        return false;
+    IM_ASSERT(id != 0);
+    if (!IsMouseHoveringRect(bb.Min, bb.Max) || (id == g.DragDropPayload.SourceId))
+        return false;
+    if (window->SkipItems)
+        return false;
+
+    IM_ASSERT(g.DragDropWithinTarget == false);
+    g.DragDropTargetRect = bb;
+    g.DragDropTargetId = id;
+    g.DragDropWithinTarget = true;
+    return true;
+}
+
+// We don't use BeginDragDropTargetCustom() and duplicate its code because:
+// 1) we use LastItemRectHoveredRect which handles items that pushes a temporarily clip rectangle in their code. Calling BeginDragDropTargetCustom(LastItemRect) would not handle them.
+// 2) and it's faster. as this code may be very frequently called, we want to early out as fast as we can.
+// Also note how the HoveredWindow test is positioned differently in both functions (in both functions we optimize for the cheapest early out case)
+bool ImGui::BeginDragDropTarget()
+{
+    ImGuiContext& g = *GImGui;
+    if (!g.DragDropActive)
+        return false;
+
+    ImGuiWindow* window = g.CurrentWindow;
+    if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect))
+        return false;
+    if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow)
+        return false;
+
+    const ImRect& display_rect = (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect) ? window->DC.LastItemDisplayRect : window->DC.LastItemRect;
+    ImGuiID id = window->DC.LastItemId;
+    if (id == 0)
+        id = window->GetIDFromRectangle(display_rect);
+    if (g.DragDropPayload.SourceId == id)
+        return false;
+
+    IM_ASSERT(g.DragDropWithinTarget == false);
+    g.DragDropTargetRect = display_rect;
+    g.DragDropTargetId = id;
+    g.DragDropWithinTarget = true;
+    return true;
+}
+
+bool ImGui::IsDragDropPayloadBeingAccepted()
+{
+    ImGuiContext& g = *GImGui;
+    return g.DragDropActive && g.DragDropAcceptIdPrev != 0;
+}
+
+const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiPayload& payload = g.DragDropPayload;
+    IM_ASSERT(g.DragDropActive);                        // Not called between BeginDragDropTarget() and EndDragDropTarget() ?
+    IM_ASSERT(payload.DataFrameCount != -1);            // Forgot to call EndDragDropTarget() ?
+    if (type != NULL && !payload.IsDataType(type))
+        return NULL;
+
+    // Accept smallest drag target bounding box, this allows us to nest drag targets conveniently without ordering constraints.
+    // NB: We currently accept NULL id as target. However, overlapping targets requires a unique ID to function!
+    const bool was_accepted_previously = (g.DragDropAcceptIdPrev == g.DragDropTargetId);
+    ImRect r = g.DragDropTargetRect;
+    float r_surface = r.GetWidth() * r.GetHeight();
+    if (r_surface < g.DragDropAcceptIdCurrRectSurface)
+    {
+        g.DragDropAcceptFlags = flags;
+        g.DragDropAcceptIdCurr = g.DragDropTargetId;
+        g.DragDropAcceptIdCurrRectSurface = r_surface;
+    }
+
+    // Render default drop visuals
+    payload.Preview = was_accepted_previously;
+    flags |= (g.DragDropSourceFlags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect); // Source can also inhibit the preview (useful for external sources that lives for 1 frame)
+    if (!(flags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect) && payload.Preview)
+    {
+        // FIXME-DRAG: Settle on a proper default visuals for drop target.
+        r.Expand(3.5f);
+        bool push_clip_rect = !window->ClipRect.Contains(r);
+        if (push_clip_rect) window->DrawList->PushClipRect(r.Min-ImVec2(1,1), r.Max+ImVec2(1,1));
+        window->DrawList->AddRect(r.Min, r.Max, GetColorU32(ImGuiCol_DragDropTarget), 0.0f, ~0, 2.0f);
+        if (push_clip_rect) window->DrawList->PopClipRect();
+    }
+
+    g.DragDropAcceptFrameCount = g.FrameCount;
+    payload.Delivery = was_accepted_previously && !IsMouseDown(g.DragDropMouseButton); // For extern drag sources affecting os window focus, it's easier to just test !IsMouseDown() instead of IsMouseReleased()
+    if (!payload.Delivery && !(flags & ImGuiDragDropFlags_AcceptBeforeDelivery))
+        return NULL;
+
+    return &payload;
+}
+
+const ImGuiPayload* ImGui::GetDragDropPayload()
+{
+    ImGuiContext& g = *GImGui;
+    return g.DragDropActive ? &g.DragDropPayload : NULL;
+}
+
+// We don't really use/need this now, but added it for the sake of consistency and because we might need it later.
+void ImGui::EndDragDropTarget()
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.DragDropActive);
+    IM_ASSERT(g.DragDropWithinTarget);
+    g.DragDropWithinTarget = false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] LOGGING/CAPTURING
+//-----------------------------------------------------------------------------
+// All text output from the interface can be captured into tty/file/clipboard.
+// By default, tree nodes are automatically opened during logging.
+//-----------------------------------------------------------------------------
+
+// Pass text data straight to log (without being displayed)
+void ImGui::LogText(const char* fmt, ...)
+{
+    ImGuiContext& g = *GImGui;
+    if (!g.LogEnabled)
+        return;
+
+    va_list args;
+    va_start(args, fmt);
+    if (g.LogFile)
+    {
+        g.LogBuffer.Buf.resize(0);
+        g.LogBuffer.appendfv(fmt, args);
+        ImFileWrite(g.LogBuffer.c_str(), sizeof(char), (ImU64)g.LogBuffer.size(), g.LogFile);
+    }
+    else
+    {
+        g.LogBuffer.appendfv(fmt, args);
+    }
+    va_end(args);
+}
+
+// Internal version that takes a position to decide on newline placement and pad items according to their depth.
+// We split text into individual lines to add current tree level padding
+void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    if (!text_end)
+        text_end = FindRenderedTextEnd(text, text_end);
+
+    const bool log_new_line = ref_pos && (ref_pos->y > g.LogLinePosY + 1);
+    if (ref_pos)
+        g.LogLinePosY = ref_pos->y;
+    if (log_new_line)
+        g.LogLineFirstItem = true;
+
+    const char* text_remaining = text;
+    if (g.LogDepthRef > window->DC.TreeDepth)  // Re-adjust padding if we have popped out of our starting depth
+        g.LogDepthRef = window->DC.TreeDepth;
+    const int tree_depth = (window->DC.TreeDepth - g.LogDepthRef);
+    for (;;)
+    {
+        // Split the string. Each new line (after a '\n') is followed by spacing corresponding to the current depth of our log entry.
+        // We don't add a trailing \n to allow a subsequent item on the same line to be captured.
+        const char* line_start = text_remaining;
+        const char* line_end = ImStreolRange(line_start, text_end);
+        const bool is_first_line = (line_start == text);
+        const bool is_last_line = (line_end == text_end);
+        if (!is_last_line || (line_start != line_end))
+        {
+            const int char_count = (int)(line_end - line_start);
+            if (log_new_line || !is_first_line)
+                LogText(IM_NEWLINE "%*s%.*s", tree_depth * 4, "", char_count, line_start);
+            else if (g.LogLineFirstItem)
+                LogText("%*s%.*s", tree_depth * 4, "", char_count, line_start);
+            else
+                LogText(" %.*s", char_count, line_start);
+            g.LogLineFirstItem = false;
+        }
+        else if (log_new_line)
+        {
+            // An empty "" string at a different Y position should output a carriage return.
+            LogText(IM_NEWLINE);
+            break;
+        }
+
+        if (is_last_line)
+            break;
+        text_remaining = line_end + 1;
+    }
+}
+
+// Start logging/capturing text output
+void ImGui::LogBegin(ImGuiLogType type, int auto_open_depth)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    IM_ASSERT(g.LogEnabled == false);
+    IM_ASSERT(g.LogFile == NULL);
+    IM_ASSERT(g.LogBuffer.empty());
+    g.LogEnabled = true;
+    g.LogType = type;
+    g.LogDepthRef = window->DC.TreeDepth;
+    g.LogDepthToExpand = ((auto_open_depth >= 0) ? auto_open_depth : g.LogDepthToExpandDefault);
+    g.LogLinePosY = FLT_MAX;
+    g.LogLineFirstItem = true;
+}
+
+void ImGui::LogToTTY(int auto_open_depth)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.LogEnabled)
+        return;
+    IM_UNUSED(auto_open_depth);
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+    LogBegin(ImGuiLogType_TTY, auto_open_depth);
+    g.LogFile = stdout;
+#endif
+}
+
+// Start logging/capturing text output to given file
+void ImGui::LogToFile(int auto_open_depth, const char* filename)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.LogEnabled)
+        return;
+
+    // FIXME: We could probably open the file in text mode "at", however note that clipboard/buffer logging will still
+    // be subject to outputting OS-incompatible carriage return if within strings the user doesn't use IM_NEWLINE.
+    // By opening the file in binary mode "ab" we have consistent output everywhere.
+    if (!filename)
+        filename = g.IO.LogFilename;
+    if (!filename || !filename[0])
+        return;
+    ImFileHandle f = ImFileOpen(filename, "ab");
+    if (!f)
+    {
+        IM_ASSERT(0);
+        return;
+    }
+
+    LogBegin(ImGuiLogType_File, auto_open_depth);
+    g.LogFile = f;
+}
+
+// Start logging/capturing text output to clipboard
+void ImGui::LogToClipboard(int auto_open_depth)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.LogEnabled)
+        return;
+    LogBegin(ImGuiLogType_Clipboard, auto_open_depth);
+}
+
+void ImGui::LogToBuffer(int auto_open_depth)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.LogEnabled)
+        return;
+    LogBegin(ImGuiLogType_Buffer, auto_open_depth);
+}
+
+void ImGui::LogFinish()
+{
+    ImGuiContext& g = *GImGui;
+    if (!g.LogEnabled)
+        return;
+
+    LogText(IM_NEWLINE);
+    switch (g.LogType)
+    {
+    case ImGuiLogType_TTY:
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+        fflush(g.LogFile);
+#endif
+        break;
+    case ImGuiLogType_File:
+        ImFileClose(g.LogFile);
+        break;
+    case ImGuiLogType_Buffer:
+        break;
+    case ImGuiLogType_Clipboard:
+        if (!g.LogBuffer.empty())
+            SetClipboardText(g.LogBuffer.begin());
+        break;
+    case ImGuiLogType_None:
+        IM_ASSERT(0);
+        break;
+    }
+
+    g.LogEnabled = false;
+    g.LogType = ImGuiLogType_None;
+    g.LogFile = NULL;
+    g.LogBuffer.clear();
+}
+
+// Helper to display logging buttons
+// FIXME-OBSOLETE: We should probably obsolete this and let the user have their own helper (this is one of the oldest function alive!)
+void ImGui::LogButtons()
+{
+    ImGuiContext& g = *GImGui;
+
+    PushID("LogButtons");
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+    const bool log_to_tty = Button("Log To TTY"); SameLine();
+#else
+    const bool log_to_tty = false;
+#endif
+    const bool log_to_file = Button("Log To File"); SameLine();
+    const bool log_to_clipboard = Button("Log To Clipboard"); SameLine();
+    PushAllowKeyboardFocus(false);
+    SetNextItemWidth(80.0f);
+    SliderInt("Default Depth", &g.LogDepthToExpandDefault, 0, 9, NULL);
+    PopAllowKeyboardFocus();
+    PopID();
+
+    // Start logging at the end of the function so that the buttons don't appear in the log
+    if (log_to_tty)
+        LogToTTY();
+    if (log_to_file)
+        LogToFile();
+    if (log_to_clipboard)
+        LogToClipboard();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] SETTINGS
+//-----------------------------------------------------------------------------
+
+// Called by NewFrame()
+void ImGui::UpdateSettings()
+{
+    // Load settings on first frame (if not explicitly loaded manually before)
+    ImGuiContext& g = *GImGui;
+    if (!g.SettingsLoaded)
+    {
+        IM_ASSERT(g.SettingsWindows.empty());
+        if (g.IO.IniFilename)
+            LoadIniSettingsFromDisk(g.IO.IniFilename);
+        g.SettingsLoaded = true;
+    }
+
+    // Save settings (with a delay after the last modification, so we don't spam disk too much)
+    if (g.SettingsDirtyTimer > 0.0f)
+    {
+        g.SettingsDirtyTimer -= g.IO.DeltaTime;
+        if (g.SettingsDirtyTimer <= 0.0f)
+        {
+            if (g.IO.IniFilename != NULL)
+                SaveIniSettingsToDisk(g.IO.IniFilename);
+            else
+                g.IO.WantSaveIniSettings = true;  // Let user know they can call SaveIniSettingsToMemory(). user will need to clear io.WantSaveIniSettings themselves.
+            g.SettingsDirtyTimer = 0.0f;
+        }
+    }
+}
+
+void ImGui::MarkIniSettingsDirty()
+{
+    ImGuiContext& g = *GImGui;
+    if (g.SettingsDirtyTimer <= 0.0f)
+        g.SettingsDirtyTimer = g.IO.IniSavingRate;
+}
+
+void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
+{
+    ImGuiContext& g = *GImGui;
+    if (!(window->Flags & ImGuiWindowFlags_NoSavedSettings))
+        if (g.SettingsDirtyTimer <= 0.0f)
+            g.SettingsDirtyTimer = g.IO.IniSavingRate;
+}
+
+ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
+{
+    ImGuiContext& g = *GImGui;
+
+#if !IMGUI_DEBUG_INI_SETTINGS
+    // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
+    // Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier.
+    if (const char* p = strstr(name, "###"))
+        name = p;
+#endif
+    const size_t name_len = strlen(name);
+
+    // Allocate chunk
+    const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1;
+    ImGuiWindowSettings* settings = g.SettingsWindows.alloc_chunk(chunk_size);
+    IM_PLACEMENT_NEW(settings) ImGuiWindowSettings();
+    settings->ID = ImHashStr(name, name_len);
+    memcpy(settings->GetName(), name, name_len + 1);   // Store with zero terminator
+
+    return settings;
+}
+
+ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
+{
+    ImGuiContext& g = *GImGui;
+    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+        if (settings->ID == id)
+            return settings;
+    return NULL;
+}
+
+ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
+{
+    if (ImGuiWindowSettings* settings = FindWindowSettings(ImHashStr(name)))
+        return settings;
+    return CreateNewWindowSettings(name);
+}
+
+void ImGui::LoadIniSettingsFromDisk(const char* ini_filename)
+{
+    size_t file_data_size = 0;
+    char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_data_size);
+    if (!file_data)
+        return;
+    LoadIniSettingsFromMemory(file_data, (size_t)file_data_size);
+    IM_FREE(file_data);
+}
+
+ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
+{
+    ImGuiContext& g = *GImGui;
+    const ImGuiID type_hash = ImHashStr(type_name);
+    for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+        if (g.SettingsHandlers[handler_n].TypeHash == type_hash)
+            return &g.SettingsHandlers[handler_n];
+    return NULL;
+}
+
+// Zero-tolerance, no error reporting, cheap .ini parsing
+void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(g.Initialized);
+    IM_ASSERT(g.SettingsLoaded == false && g.FrameCount == 0);
+
+    // For user convenience, we allow passing a non zero-terminated string (hence the ini_size parameter).
+    // For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy..
+    if (ini_size == 0)
+        ini_size = strlen(ini_data);
+    char* buf = (char*)IM_ALLOC(ini_size + 1);
+    char* buf_end = buf + ini_size;
+    memcpy(buf, ini_data, ini_size);
+    buf[ini_size] = 0;
+
+    void* entry_data = NULL;
+    ImGuiSettingsHandler* entry_handler = NULL;
+
+    char* line_end = NULL;
+    for (char* line = buf; line < buf_end; line = line_end + 1)
+    {
+        // Skip new lines markers, then find end of the line
+        while (*line == '\n' || *line == '\r')
+            line++;
+        line_end = line;
+        while (line_end < buf_end && *line_end != '\n' && *line_end != '\r')
+            line_end++;
+        line_end[0] = 0;
+        if (line[0] == ';')
+            continue;
+        if (line[0] == '[' && line_end > line && line_end[-1] == ']')
+        {
+            // Parse "[Type][Name]". Note that 'Name' can itself contains [] characters, which is acceptable with the current format and parsing code.
+            line_end[-1] = 0;
+            const char* name_end = line_end - 1;
+            const char* type_start = line + 1;
+            char* type_end = (char*)(void*)ImStrchrRange(type_start, name_end, ']');
+            const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL;
+            if (!type_end || !name_start)
+                continue;
+            *type_end = 0; // Overwrite first ']'
+            name_start++;  // Skip second '['
+            entry_handler = FindSettingsHandler(type_start);
+            entry_data = entry_handler ? entry_handler->ReadOpenFn(&g, entry_handler, name_start) : NULL;
+        }
+        else if (entry_handler != NULL && entry_data != NULL)
+        {
+            // Let type handler parse the line
+            entry_handler->ReadLineFn(&g, entry_handler, entry_data, line);
+        }
+    }
+    IM_FREE(buf);
+    g.SettingsLoaded = true;
+}
+
+void ImGui::SaveIniSettingsToDisk(const char* ini_filename)
+{
+    ImGuiContext& g = *GImGui;
+    g.SettingsDirtyTimer = 0.0f;
+    if (!ini_filename)
+        return;
+
+    size_t ini_data_size = 0;
+    const char* ini_data = SaveIniSettingsToMemory(&ini_data_size);
+    ImFileHandle f = ImFileOpen(ini_filename, "wt");
+    if (!f)
+        return;
+    ImFileWrite(ini_data, sizeof(char), ini_data_size, f);
+    ImFileClose(f);
+}
+
+// Call registered handlers (e.g. SettingsHandlerWindow_WriteAll() + custom handlers) to write their stuff into a text buffer
+const char* ImGui::SaveIniSettingsToMemory(size_t* out_size)
+{
+    ImGuiContext& g = *GImGui;
+    g.SettingsDirtyTimer = 0.0f;
+    g.SettingsIniData.Buf.resize(0);
+    g.SettingsIniData.Buf.push_back(0);
+    for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+    {
+        ImGuiSettingsHandler* handler = &g.SettingsHandlers[handler_n];
+        handler->WriteAllFn(&g, handler, &g.SettingsIniData);
+    }
+    if (out_size)
+        *out_size = (size_t)g.SettingsIniData.size();
+    return g.SettingsIniData.c_str();
+}
+
+static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
+{
+    ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHashStr(name));
+    if (!settings)
+        settings = ImGui::CreateNewWindowSettings(name);
+    return (void*)settings;
+}
+
+static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
+{
+    ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry;
+    int x, y;
+    int i;
+    if (sscanf(line, "Pos=%i,%i", &x, &y) == 2)         settings->Pos = ImVec2ih((short)x, (short)y);
+    else if (sscanf(line, "Size=%i,%i", &x, &y) == 2)   settings->Size = ImVec2ih((short)x, (short)y);
+    else if (sscanf(line, "Collapsed=%d", &i) == 1)     settings->Collapsed = (i != 0);
+}
+
+static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
+{
+    // Gather data from windows that were active during this session
+    // (if a window wasn't opened in this session we preserve its settings)
+    ImGuiContext& g = *ctx;
+    for (int i = 0; i != g.Windows.Size; i++)
+    {
+        ImGuiWindow* window = g.Windows[i];
+        if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
+            continue;
+
+        ImGuiWindowSettings* settings = (window->SettingsOffset != -1) ? g.SettingsWindows.ptr_from_offset(window->SettingsOffset) : ImGui::FindWindowSettings(window->ID);
+        if (!settings)
+        {
+            settings = ImGui::CreateNewWindowSettings(window->Name);
+            window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
+        }
+        IM_ASSERT(settings->ID == window->ID);
+        settings->Pos = ImVec2ih((short)window->Pos.x, (short)window->Pos.y);
+        settings->Size = ImVec2ih((short)window->SizeFull.x, (short)window->SizeFull.y);
+        settings->Collapsed = window->Collapsed;
+    }
+
+    // Write to text buffer
+    buf->reserve(buf->size() + g.SettingsWindows.size() * 6); // ballpark reserve
+    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+    {
+        const char* settings_name = settings->GetName();
+        buf->appendf("[%s][%s]\n", handler->TypeName, settings_name);
+        buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y);
+        buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y);
+        buf->appendf("Collapsed=%d\n", settings->Collapsed);
+        buf->append("\n");
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] VIEWPORTS, PLATFORM WINDOWS
+//-----------------------------------------------------------------------------
+
+// (this section is filled in the 'docking' branch)
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] DOCKING
+//-----------------------------------------------------------------------------
+
+// (this section is filled in the 'docking' branch)
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] PLATFORM DEPENDENT HELPERS
+//-----------------------------------------------------------------------------
+
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
+
+#ifdef _MSC_VER
+#pragma comment(lib, "user32")
+#pragma comment(lib, "kernel32")
+#endif
+
+// Win32 clipboard implementation
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+    static ImVector<char> buf_local;
+    buf_local.clear();
+    if (!::OpenClipboard(NULL))
+        return NULL;
+    HANDLE wbuf_handle = ::GetClipboardData(CF_UNICODETEXT);
+    if (wbuf_handle == NULL)
+    {
+        ::CloseClipboard();
+        return NULL;
+    }
+    if (const WCHAR* wbuf_global = (const WCHAR*)::GlobalLock(wbuf_handle))
+    {
+        int buf_len = ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, NULL, 0, NULL, NULL);
+        buf_local.resize(buf_len);
+        ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, buf_local.Data, buf_len, NULL, NULL);
+    }
+    ::GlobalUnlock(wbuf_handle);
+    ::CloseClipboard();
+    return buf_local.Data;
+}
+
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+    if (!::OpenClipboard(NULL))
+        return;
+    const int wbuf_length = ::MultiByteToWideChar(CP_UTF8, 0, text, -1, NULL, 0);
+    HGLOBAL wbuf_handle = ::GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(WCHAR));
+    if (wbuf_handle == NULL)
+    {
+        ::CloseClipboard();
+        return;
+    }
+    WCHAR* wbuf_global = (WCHAR*)::GlobalLock(wbuf_handle);
+    ::MultiByteToWideChar(CP_UTF8, 0, text, -1, wbuf_global, wbuf_length);
+    ::GlobalUnlock(wbuf_handle);
+    ::EmptyClipboard();
+    if (::SetClipboardData(CF_UNICODETEXT, wbuf_handle) == NULL)
+        ::GlobalFree(wbuf_handle);
+    ::CloseClipboard();
+}
+
+#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS)
+
+#include <Carbon/Carbon.h>  // Use old API to avoid need for separate .mm file
+static PasteboardRef main_clipboard = 0;
+
+// OSX clipboard implementation
+// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line!
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+    if (!main_clipboard)
+        PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+    PasteboardClear(main_clipboard);
+    CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text));
+    if (cf_data)
+    {
+        PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0);
+        CFRelease(cf_data);
+    }
+}
+
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+    if (!main_clipboard)
+        PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+    PasteboardSynchronize(main_clipboard);
+
+    ItemCount item_count = 0;
+    PasteboardGetItemCount(main_clipboard, &item_count);
+    for (ItemCount i = 0; i < item_count; i++)
+    {
+        PasteboardItemID item_id = 0;
+        PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id);
+        CFArrayRef flavor_type_array = 0;
+        PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array);
+        for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++)
+        {
+            CFDataRef cf_data;
+            if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr)
+            {
+                static ImVector<char> clipboard_text;
+                int length = (int)CFDataGetLength(cf_data);
+                clipboard_text.resize(length + 1);
+                CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)clipboard_text.Data);
+                clipboard_text[length] = 0;
+                CFRelease(cf_data);
+                return clipboard_text.Data;
+            }
+        }
+    }
+    return NULL;
+}
+
+#else
+
+// Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers.
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+    ImGuiContext& g = *GImGui;
+    return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin();
+}
+
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+    ImGuiContext& g = *GImGui;
+    g.PrivateClipboard.clear();
+    const char* text_end = text + strlen(text);
+    g.PrivateClipboard.resize((int)(text_end - text) + 1);
+    memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text));
+    g.PrivateClipboard[(int)(text_end - text)] = 0;
+}
+
+#endif
+
+// Win32 API IME support (for Asian languages, etc.)
+#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
+
+#include <imm.h>
+#ifdef _MSC_VER
+#pragma comment(lib, "imm32")
+#endif
+
+static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y)
+{
+    // Notify OS Input Method Editor of text input position
+    ImGuiIO& io = ImGui::GetIO();
+    if (HWND hwnd = (HWND)io.ImeWindowHandle)
+        if (HIMC himc = ::ImmGetContext(hwnd))
+        {
+            COMPOSITIONFORM cf;
+            cf.ptCurrentPos.x = x;
+            cf.ptCurrentPos.y = y;
+            cf.dwStyle = CFS_FORCE_POSITION;
+            ::ImmSetCompositionWindow(himc, &cf);
+            ::ImmReleaseContext(hwnd, himc);
+        }
+}
+
+#else
+
+static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
+
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] METRICS/DEBUG WINDOW
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_DISABLE_METRICS_WINDOW
+// Avoid naming collision with imgui_demo.cpp's HelpMarker() for unity builds.
+static void MetricsHelpMarker(const char* desc)
+{
+    ImGui::TextDisabled("(?)");
+    if (ImGui::IsItemHovered())
+    {
+        ImGui::BeginTooltip();
+        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
+        ImGui::TextUnformatted(desc);
+        ImGui::PopTextWrapPos();
+        ImGui::EndTooltip();
+    }
+}
+
+void ImGui::ShowMetricsWindow(bool* p_open)
+{
+    if (!ImGui::Begin("Dear ImGui Metrics", p_open))
+    {
+        ImGui::End();
+        return;
+    }
+
+    // Debugging enums
+    enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type
+    const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" };
+    enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersDesired, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type
+    const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersDesired", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" };
+
+    // State
+    static bool show_windows_rects = false;
+    static int  show_windows_rect_type = WRT_WorkRect;
+    static bool show_windows_begin_order = false;
+    static bool show_tables_rects = false;
+    static int  show_tables_rect_type = TRT_WorkRect;
+    static bool show_drawcmd_details = true;
+
+    // Basic info
+    ImGuiContext& g = *GImGui;
+    ImGuiIO& io = ImGui::GetIO();
+    ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
+    ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
+    ImGui::Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
+    ImGui::Text("%d active windows (%d visible)", io.MetricsActiveWindows, io.MetricsRenderWindows);
+    ImGui::Text("%d active allocations", io.MetricsActiveAllocations);
+    ImGui::Separator();
+
+    // Helper functions to display common structures:
+    // - NodeDrawList()
+    // - NodeColumns()
+    // - NodeWindow()
+    // - NodeWindows()
+    // - NodeTabBar()
+    // - NodeStorage()
+    struct Funcs
+    {
+        static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
+        {
+            if (rect_type == TRT_OuterRect)                 { return table->OuterRect; }
+            else if (rect_type == TRT_WorkRect)             { return table->WorkRect; }
+            else if (rect_type == TRT_HostClipRect)         { return table->HostClipRect; }
+            else if (rect_type == TRT_InnerClipRect)        { return table->InnerClipRect; }
+            else if (rect_type == TRT_BackgroundClipRect)   { return table->BackgroundClipRect; }
+            else if (rect_type == TRT_ColumnsRect)                  { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table->LastOuterHeight); }
+            else if (rect_type == TRT_ColumnsClipRect)              { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; }
+            else if (rect_type == TRT_ColumnsContentHeadersUsed)    { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersUsed, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }    // Note: y1/y2 not always accurate
+            else if (rect_type == TRT_ColumnsContentHeadersDesired) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersDesired, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } // "
+            else if (rect_type == TRT_ColumnsContentRowsFrozen)     { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthRowsFrozen, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }     // "
+            else if (rect_type == TRT_ColumnsContentRowsUnfrozen)   { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y + table->LastFirstRowHeight, c->MinX + c->ContentWidthRowsUnfrozen, table->InnerClipRect.Max.y); }   // "
+            IM_ASSERT(0);
+            return ImRect();
+        }
+
+        static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
+        {
+            if (rect_type == WRT_OuterRect)                 { return window->Rect(); }
+            else if (rect_type == WRT_OuterRectClipped)     { return window->OuterRectClipped; }
+            else if (rect_type == WRT_InnerRect)            { return window->InnerRect; }
+            else if (rect_type == WRT_InnerClipRect)        { return window->InnerClipRect; }
+            else if (rect_type == WRT_WorkRect)             { return window->WorkRect; }
+            else if (rect_type == WRT_Content)              { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSize); }
+            else if (rect_type == WRT_ContentRegionRect)    { return window->ContentRegionRect; }
+            IM_ASSERT(0);
+            return ImRect();
+        }
+
+        static void NodeDrawList(ImGuiWindow* window, ImDrawList* draw_list, const char* label)
+        {
+            bool node_open = ImGui::TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, draw_list->CmdBuffer.Size);
+            if (draw_list == ImGui::GetWindowDrawList())
+            {
+                ImGui::SameLine();
+                ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
+                if (node_open) ImGui::TreePop();
+                return;
+            }
+
+            ImDrawList* fg_draw_list = GetForegroundDrawList(window); // Render additional visuals into the top-most draw list
+            if (window && IsItemHovered())
+                fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
+            if (!node_open)
+                return;
+
+            if (window && !window->WasActive)
+                ImGui::TextDisabled("Warning: owning Window is inactive. This DrawList is not being rendered!");
+
+            unsigned int elem_offset = 0;
+            for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++)
+            {
+                if (pcmd->UserCallback == NULL && pcmd->ElemCount == 0)
+                    continue;
+                if (pcmd->UserCallback)
+                {
+                    ImGui::BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData);
+                    continue;
+                }
+
+                ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL;
+                char buf[300];
+                ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd: %4d triangles, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)",
+                    pcmd->ElemCount/3, (void*)(intptr_t)pcmd->TextureId,
+                    pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w);
+                bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf);
+                if (show_drawcmd_details && fg_draw_list && ImGui::IsItemHovered())
+                {
+                    ImRect clip_rect = pcmd->ClipRect;
+                    ImRect vtxs_rect(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX);
+                    for (unsigned int i = elem_offset; i < elem_offset + (int)pcmd->ElemCount; i++)
+                        vtxs_rect.Add(draw_list->VtxBuffer[idx_buffer ? idx_buffer[i] : i].pos);
+                    fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255,0,255,255));
+                    fg_draw_list->AddRect(ImFloor(vtxs_rect.Min), ImFloor(vtxs_rect.Max), IM_COL32(255,255,0,255));
+                }
+                if (!pcmd_node_open)
+                    continue;
+
+                // Calculate approximate coverage area (touched pixel count)
+                // This will be in pixels squared as long there's no post-scaling happening to the renderer output.
+                float total_area = 0.0f;
+                for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3)
+                {
+                    ImVec2 triangle[3];
+                    for (int n = 0; n < 3; n++)
+                        triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos;
+                    total_area += ImTriangleArea(triangle[0], triangle[1], triangle[2]);
+                }
+
+                // Display vertex information summary. Hover to get all triangles drawn in wire-frame
+                ImFormatString(buf, IM_ARRAYSIZE(buf), "Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d, Area: ~%0.f px", pcmd->ElemCount, pcmd->VtxOffset, pcmd->IdxOffset, total_area);
+                ImGui::Selectable(buf);
+                if (fg_draw_list && ImGui::IsItemHovered() && show_drawcmd_details)
+                {
+                    // Draw wire-frame version of everything
+                    ImDrawListFlags backup_flags = fg_draw_list->Flags;
+                    fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
+                    ImRect clip_rect = pcmd->ClipRect;
+                    fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255, 0, 255, 255));
+                    for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3)
+                    {
+                        ImVec2 triangle[3];
+                        for (int n = 0; n < 3; n++)
+                            triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos;
+                        fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), true, 1.0f);
+                    }
+                    fg_draw_list->Flags = backup_flags;
+                }
+
+                // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted.
+                ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible.
+                while (clipper.Step())
+                    for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
+                    {
+                        char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf);
+                        ImVec2 triangle[3];
+                        for (int n = 0; n < 3; n++, idx_i++)
+                        {
+                            ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[idx_i] : idx_i];
+                            triangle[n] = v.pos;
+                            buf_p += ImFormatString(buf_p, buf_end - buf_p, "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n",
+                                (n == 0) ? "Vert:" : "     ", idx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
+                        }
+
+                        ImGui::Selectable(buf, false);
+                        if (fg_draw_list && ImGui::IsItemHovered())
+                        {
+                            ImDrawListFlags backup_flags = fg_draw_list->Flags;
+                            fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
+                            fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255,255,0,255), true, 1.0f);
+                            fg_draw_list->Flags = backup_flags;
+                        }
+                    }
+                ImGui::TreePop();
+            }
+            ImGui::TreePop();
+        }
+
+        static void NodeColumns(const ImGuiColumns* columns)
+        {
+            if (!ImGui::TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags))
+                return;
+            ImGui::BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->OffMaxX - columns->OffMinX, columns->OffMinX, columns->OffMaxX);
+            for (int column_n = 0; column_n < columns->Columns.Size; column_n++)
+                ImGui::BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, GetColumnOffsetFromNorm(columns, columns->Columns[column_n].OffsetNorm));
+            ImGui::TreePop();
+        }
+
+        static void NodeWindows(ImVector<ImGuiWindow*>& windows, const char* label)
+        {
+            if (!ImGui::TreeNode(label, "%s (%d)", label, windows.Size))
+                return;
+            for (int i = 0; i < windows.Size; i++)
+            {
+                ImGui::PushID(windows[i]);
+                Funcs::NodeWindow(windows[i], "Window");
+                ImGui::PopID();
+            }
+            ImGui::TreePop();
+        }
+
+        static void NodeWindow(ImGuiWindow* window, const char* label)
+        {
+            if (window == NULL)
+            {
+                ImGui::BulletText("%s: NULL", label);
+                return;
+            }
+            bool open = ImGui::TreeNode(label, "%s '%s', %d @ 0x%p", label, window->Name, (window->Active || window->WasActive), window);
+            if (ImGui::IsItemHovered() && window->WasActive)
+                ImGui::GetForegroundDrawList()->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
+            if (!open)
+                return;
+            ImGuiWindowFlags flags = window->Flags;
+            NodeDrawList(window, window->DrawList, "DrawList");
+            ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y);
+            ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
+                (flags & ImGuiWindowFlags_ChildWindow)  ? "Child " : "",      (flags & ImGuiWindowFlags_Tooltip)     ? "Tooltip "   : "",  (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
+                (flags & ImGuiWindowFlags_Modal)        ? "Modal " : "",      (flags & ImGuiWindowFlags_ChildMenu)   ? "ChildMenu " : "",  (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
+                (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
+            ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f) Scrollbar:%s%s", window->Scroll.x, window->ScrollMax.x, window->Scroll.y, window->ScrollMax.y, window->ScrollbarX ? "X" : "", window->ScrollbarY ? "Y" : "");
+            ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
+            ImGui::BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems);
+            ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask);
+            ImGui::BulletText("NavLastChildNavWindow: %s", window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL");
+            if (!window->NavRectRel[0].IsInverted())
+                ImGui::BulletText("NavRectRel[0]: (%.1f,%.1f)(%.1f,%.1f)", window->NavRectRel[0].Min.x, window->NavRectRel[0].Min.y, window->NavRectRel[0].Max.x, window->NavRectRel[0].Max.y);
+            else
+                ImGui::BulletText("NavRectRel[0]: <None>");
+            if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow");
+            if (window->ParentWindow != NULL) NodeWindow(window->ParentWindow, "ParentWindow");
+            if (window->DC.ChildWindows.Size > 0) NodeWindows(window->DC.ChildWindows, "ChildWindows");
+            if (window->ColumnsStorage.Size > 0 && ImGui::TreeNode("Columns", "Columns sets (%d)", window->ColumnsStorage.Size))
+            {
+                for (int n = 0; n < window->ColumnsStorage.Size; n++)
+                    NodeColumns(&window->ColumnsStorage[n]);
+                ImGui::TreePop();
+            }
+            NodeStorage(&window->StateStorage, "Storage");
+            ImGui::TreePop();
+        }
+
+        static void NodeTabBar(ImGuiTabBar* tab_bar)
+        {
+            // Standalone tab bars (not associated to docking/windows functionality) currently hold no discernible strings.
+            char buf[256];
+            char* p = buf;
+            const char* buf_end = buf + IM_ARRAYSIZE(buf);
+            p += ImFormatString(p, buf_end - p, "TabBar (%d tabs)%s", tab_bar->Tabs.Size, (tab_bar->PrevFrameVisible < ImGui::GetFrameCount() - 2) ? " *Inactive*" : "");
+            if (ImGui::TreeNode(tab_bar, "%s", buf))
+            {
+                for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+                {
+                    const ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+                    ImGui::PushID(tab);
+                    if (ImGui::SmallButton("<")) { TabBarQueueChangeTabOrder(tab_bar, tab, -1); } ImGui::SameLine(0, 2);
+                    if (ImGui::SmallButton(">")) { TabBarQueueChangeTabOrder(tab_bar, tab, +1); } ImGui::SameLine();
+                    ImGui::Text("%02d%c Tab 0x%08X '%s'", tab_n, (tab->ID == tab_bar->SelectedTabId) ? '*' : ' ', tab->ID, (tab->NameOffset != -1) ? tab_bar->GetTabName(tab) : "");
+                    ImGui::PopID();
+                }
+                ImGui::TreePop();
+            }
+        }
+
+        static void NodeStorage(ImGuiStorage* storage, const char* label)
+        {
+            if (!ImGui::TreeNode(label, "%s: %d entries, %d bytes", label, storage->Data.Size, storage->Data.size_in_bytes()))
+                return;
+            for (int n = 0; n < storage->Data.Size; n++)
+            {
+                const ImGuiStorage::ImGuiStoragePair& p = storage->Data[n];
+                ImGui::BulletText("Key 0x%08X Value { i: %d }", p.key, p.val_i); // Important: we currently don't store a type, real value may not be integer.
+            }
+            ImGui::TreePop();
+        }
+
+        static void NodeTable(ImGuiTable* table)
+        {
+            char buf[256];
+            char* p = buf;
+            const char* buf_end = buf + IM_ARRAYSIZE(buf);
+            ImFormatString(p, buf_end - p, "Table 0x%08X (%d columns, in '%s')%s", table->ID, table->ColumnsCount, table->OuterWindow->Name, (table->LastFrameActive < ImGui::GetFrameCount() - 2) ? " *Inactive*" : "");
+            bool open = ImGui::TreeNode(table, "%s", buf);
+            if (ImGui::IsItemHovered())
+                ImGui::GetForegroundDrawList()->AddRect(table->OuterRect.Min, table->OuterRect.Max, IM_COL32(255, 255, 0, 255));
+            if (open)
+            {
+                for (int n = 0; n < table->ColumnsCount; n++)
+                {
+                    ImGuiTableColumn* column = &table->Columns[n];
+                    const char* name = TableGetColumnName(table, n);
+                    ImGui::BulletText("Column %d order %d name '%s': +%.1f to +%.1f\n"
+                        "Active: %d, Clipped: %d, DrawChannels: %d,%d\n"
+                        "WidthGiven/Requested: %.1f/%.1f, Weight: %.2f\n"
+                        "ContentWidth: RowsFrozen %d, RowsUnfrozen %d, HeadersUsed/Desired %d/%d\n"
+                        "SortOrder: %d, SortDir: %s\n"
+                        "UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..",
+                        n, column->DisplayOrder, name ? name : "NULL", column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x,
+                        column->IsActive, column->IsClipped, column->DrawChannelRowsBeforeFreeze, column->DrawChannelRowsAfterFreeze,
+                        column->WidthGiven, column->WidthRequested, column->ResizeWeight,
+                        column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed, column->ContentWidthHeadersDesired,
+                        column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? "Ascending" : (column->SortDirection == ImGuiSortDirection_Descending) ? "Descending" : "None",
+                        column->UserID, column->Flags,
+                        (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? "WidthFixed " : "",
+                        (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? "WidthStretch " : "",
+                        (column->Flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize) ? "WidthAlwaysAutoResize " : "",
+                        (column->Flags & ImGuiTableColumnFlags_NoResize) ? "NoResize " : "");
+                }
+                ImGuiTableSettings* settings = TableFindSettings(table);
+                if (settings && ImGui::TreeNode("Settings"))
+                {
+                    ImGui::BulletText("SaveFlags: 0x%08X", settings->SaveFlags);
+                    ImGui::BulletText("ColumnsCount: %d (max %d)", settings->ColumnsCount, settings->ColumnsCountMax);
+                    for (int n = 0; n < settings->ColumnsCount; n++)
+                    {
+                        ImGuiTableColumnSettings* column_settings = &settings->GetColumnSettings()[n];
+                        ImGuiSortDirection sort_dir = (column_settings->SortOrder != -1) ? (ImGuiSortDirection)column_settings->SortDirection : ImGuiSortDirection_None;
+                        ImGui::BulletText("Column %d Order %d SortOrder %d %s Visible %d UserID 0x%08X WidthOrWeight %.3f",
+                            n, column_settings->DisplayOrder, column_settings->SortOrder,
+                            (sort_dir == ImGuiSortDirection_Ascending) ? "Asc" : (sort_dir == ImGuiSortDirection_Descending) ? "Des" : "---",
+                            column_settings->Visible, column_settings->UserID, column_settings->WidthOrWeight);
+                    }
+                    ImGui::TreePop();
+                }
+                ImGui::TreePop();
+            }
+        }
+    };
+
+    Funcs::NodeWindows(g.Windows, "Windows");
+    //Funcs::NodeWindows(g.WindowsFocusOrder, "WindowsFocusOrder");
+    if (ImGui::TreeNode("DrawLists", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size))
+    {
+        for (int i = 0; i < g.DrawDataBuilder.Layers[0].Size; i++)
+            Funcs::NodeDrawList(NULL, g.DrawDataBuilder.Layers[0][i], "DrawList");
+        ImGui::TreePop();
+    }
+
+    // Details for Popups
+    if (ImGui::TreeNode("Popups", "Popups (%d)", g.OpenPopupStack.Size))
+    {
+        for (int i = 0; i < g.OpenPopupStack.Size; i++)
+        {
+            ImGuiWindow* window = g.OpenPopupStack[i].Window;
+            ImGui::BulletText("PopupID: %08x, Window: '%s'%s%s", g.OpenPopupStack[i].PopupId, window ? window->Name : "NULL", window && (window->Flags & ImGuiWindowFlags_ChildWindow) ? " ChildWindow" : "", window && (window->Flags & ImGuiWindowFlags_ChildMenu) ? " ChildMenu" : "");
+        }
+        ImGui::TreePop();
+    }
+
+    // Details for TabBars
+    if (ImGui::TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetSize()))
+    {
+        for (int n = 0; n < g.TabBars.GetSize(); n++)
+            Funcs::NodeTabBar(g.TabBars.GetByIndex(n));
+        ImGui::TreePop();
+    }
+
+    // Details for Tables
+#ifdef IMGUI_HAS_TABLE
+    if (ImGui::TreeNode("Tables", "Tables (%d)", g.Tables.GetSize()))
+    {
+        for (int n = 0; n < g.Tables.GetSize(); n++)
+            Funcs::NodeTable(g.Tables.GetByIndex(n));
+        ImGui::TreePop();
+    }
+#endif // #define IMGUI_HAS_TABLE
+
+    // Details for Docking
+#ifdef IMGUI_HAS_DOCK
+    if (ImGui::TreeNode("Docking"))
+    {
+        ImGui::TreePop();
+    }
+#endif // #define IMGUI_HAS_DOCK
+
+    // Misc Details
+    if (ImGui::TreeNode("Internal state"))
+    {
+        const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT);
+        ImGui::Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL");
+        ImGui::Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL");
+        ImGui::Text("HoveredId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredId, g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
+        ImGui::Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, input_source_names[g.ActiveIdSource]);
+        ImGui::Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL");
+        ImGui::Text("MovingWindow: '%s'", g.MovingWindow ? g.MovingWindow->Name : "NULL");
+        ImGui::Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL");
+        ImGui::Text("NavId: 0x%08X, NavLayer: %d", g.NavId, g.NavLayer);
+        ImGui::Text("NavInputSource: %s", input_source_names[g.NavInputSource]);
+        ImGui::Text("NavActive: %d, NavVisible: %d", g.IO.NavActive, g.IO.NavVisible);
+        ImGui::Text("NavActivateId: 0x%08X, NavInputId: 0x%08X", g.NavActivateId, g.NavInputId);
+        ImGui::Text("NavDisableHighlight: %d, NavDisableMouseHover: %d", g.NavDisableHighlight, g.NavDisableMouseHover);
+        ImGui::Text("NavWindowingTarget: '%s'", g.NavWindowingTarget ? g.NavWindowingTarget->Name : "NULL");
+        ImGui::Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize);
+        ImGui::TreePop();
+    }
+
+    // Tools
+    if (ImGui::TreeNode("Tools"))
+    {
+        // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
+        if (ImGui::Button("Item Picker.."))
+            ImGui::DebugStartItemPicker();
+        ImGui::SameLine();
+        MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash.");
+
+        ImGui::Checkbox("Show windows begin order", &show_windows_begin_order);
+        ImGui::Checkbox("Show windows rectangles", &show_windows_rects);
+        ImGui::SameLine();
+        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
+        show_windows_rects |= ImGui::Combo("##show_windows_rect_type", &show_windows_rect_type, wrt_rects_names, WRT_Count, WRT_Count);
+        if (show_windows_rects && g.NavWindow)
+        {
+            ImGui::BulletText("'%s':", g.NavWindow->Name);
+            ImGui::Indent();
+            for (int rect_n = 0; rect_n < WRT_Count; rect_n++)
+            {
+                ImRect r = Funcs::GetWindowRect(g.NavWindow, rect_n);
+                ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), wrt_rects_names[rect_n]);
+            }
+            ImGui::Unindent();
+        }
+
+        ImGui::Checkbox("Show tables rectangles", &show_tables_rects);
+        ImGui::SameLine();
+        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
+        show_tables_rects |= ImGui::Combo("##show_table_rects_type", &show_tables_rect_type, trt_rects_names, TRT_Count, TRT_Count);
+        if (show_tables_rects && g.NavWindow)
+        {
+            for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++)
+            {
+                ImGuiTable* table = g.Tables.GetByIndex(table_n);
+                if (table->LastFrameActive < g.FrameCount - 1 || table->OuterWindow != g.NavWindow)
+                    continue;
+
+                ImGui::BulletText("Table 0x%08X (%d columns, in '%s')", table->ID, table->ColumnsCount, table->OuterWindow->Name);
+                if (ImGui::IsItemHovered())
+                    ImGui::GetForegroundDrawList()->AddRect(table->OuterRect.Min - ImVec2(1, 1), table->OuterRect.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
+                ImGui::Indent();
+                for (int rect_n = 0; rect_n < TRT_Count; rect_n++)
+                {
+                    if (rect_n >= TRT_ColumnsRect)
+                    {
+                        if (rect_n != TRT_ColumnsRect && rect_n != TRT_ColumnsClipRect)
+                            continue;
+                        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+                        {
+                            ImRect r = Funcs::GetTableRect(table, rect_n, column_n);
+                            ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) Col %d %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), column_n, trt_rects_names[rect_n]);
+                            if (ImGui::IsItemHovered())
+                                ImGui::GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
+                        }
+                    }
+                    else
+                    {
+                        ImRect r = Funcs::GetTableRect(table, rect_n, -1);
+                        ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), trt_rects_names[rect_n]);
+                        if (ImGui::IsItemHovered())
+                            ImGui::GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
+                    }
+                }
+                ImGui::Unindent();
+            }
+        }
+
+        ImGui::Checkbox("Show details when hovering ImDrawCmd node", &show_drawcmd_details);
+        ImGui::TreePop();
+    }
+
+    // Overlay: Display windows Rectangles and Begin Order
+    if (show_windows_rects || show_windows_begin_order)
+    {
+        for (int n = 0; n < g.Windows.Size; n++)
+        {
+            ImGuiWindow* window = g.Windows[n];
+            if (!window->WasActive)
+                continue;
+            ImDrawList* draw_list = GetForegroundDrawList(window);
+            if (show_windows_rects)
+            {
+                ImRect r = Funcs::GetWindowRect(window, show_windows_rect_type);
+                draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
+            }
+            if (show_windows_begin_order && !(window->Flags & ImGuiWindowFlags_ChildWindow))
+            {
+                char buf[32];
+                ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext);
+                float font_size = ImGui::GetFontSize();
+                draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255));
+                draw_list->AddText(window->Pos, IM_COL32(255, 255, 255, 255), buf);
+            }
+        }
+    }
+
+#ifdef IMGUI_HAS_TABLE
+    // Overlay: Display Tables Rectangles
+    if (show_tables_rects)
+    {
+        for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++)
+        {
+            ImGuiTable* table = g.Tables.GetByIndex(table_n);
+            if (table->LastFrameActive < g.FrameCount - 1)
+                continue;
+            ImDrawList* draw_list = GetForegroundDrawList(table->OuterWindow);
+            if (show_tables_rect_type >= TRT_ColumnsRect)
+            {
+                for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+                {
+                    ImRect r = Funcs::GetTableRect(table, show_tables_rect_type, column_n);
+                    ImU32 col = (table->HoveredColumnBody == column_n) ? IM_COL32(255, 255, 128, 255) : IM_COL32(255, 0, 128, 255);
+                    float thickness = (table->HoveredColumnBody == column_n) ? 3.0f : 1.0f;
+                    draw_list->AddRect(r.Min, r.Max, col, 0.0f, ~0, thickness);
+                }
+            }
+            else
+            {
+                ImRect r = Funcs::GetTableRect(table, show_tables_rect_type, -1);
+                draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
+            }
+        }
+    }
+#endif // #define IMGUI_HAS_TABLE
+
+#ifdef IMGUI_HAS_DOCK
+    // Overlay: Display Docking info
+    if (show_docking_nodes && g.IO.KeyCtrl)
+    {
+    }
+#endif // #define IMGUI_HAS_DOCK
+
+    ImGui::End();
+}
+
+#else
+
+void ImGui::ShowMetricsWindow(bool*) { }
+
+#endif
+
+//-----------------------------------------------------------------------------
+
+// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed.
+// Prefer just including imgui_internal.h from your code rather than using this define. If a declaration is missing from imgui_internal.h add it or request it on the github.
+#ifdef IMGUI_INCLUDE_IMGUI_USER_INL
+#include "imgui_user.inl"
+#endif
+
+//-----------------------------------------------------------------------------
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imgui.h
@@ -1,0 +1,2502 @@
+// dear imgui, v1.76 WIP
+// (headers)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
+// Read imgui.cpp for details, links and comments.
+
+// Resources:
+// - FAQ                   http://dearimgui.org/faq
+// - Homepage & latest     https://github.com/ocornut/imgui
+// - Releases & changelog  https://github.com/ocornut/imgui/releases
+// - Gallery               https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!)
+// - Glossary              https://github.com/ocornut/imgui/wiki/Glossary
+// - Wiki                  https://github.com/ocornut/imgui/wiki
+// - Issues & support      https://github.com/ocornut/imgui/issues
+
+/*
+
+Index of this file:
+// Header mess
+// Forward declarations and basic types
+// ImGui API (Dear ImGui end-user API)
+// Flags & Enumerations
+// Memory allocations macros
+// ImVector<>
+// ImGuiStyle
+// ImGuiIO
+// Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload)
+// Obsolete functions
+// Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
+// Draw List API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
+// Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
+
+// FIXME-TABLE: Add ImGuiTableSortSpecsColumn and ImGuiTableSortSpecs in "Misc data structures" section above (we don't do it right now to facilitate merging various branches)
+
+*/
+
+#pragma once
+
+// Configuration file with compile-time options (edit imconfig.h or #define IMGUI_USER_CONFIG to your own filename)
+#ifdef IMGUI_USER_CONFIG
+#include IMGUI_USER_CONFIG
+#endif
+#if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H)
+#include "imconfig.h"
+#endif
+
+#ifndef IMGUI_DISABLE
+
+//-----------------------------------------------------------------------------
+// Header mess
+//-----------------------------------------------------------------------------
+
+// Includes
+#include <float.h>                  // FLT_MIN, FLT_MAX
+#include <stdarg.h>                 // va_list, va_start, va_end
+#include <stddef.h>                 // ptrdiff_t, NULL
+#include <string.h>                 // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
+
+// Version
+// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
+#define IMGUI_VERSION               "1.76 WIP"
+#define IMGUI_VERSION_NUM           17502
+#define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
+
+// Define attributes of all API symbols declarations (e.g. for DLL under Windows)
+// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default bindings files (imgui_impl_xxx.h)
+// Using dear imgui via a shared library is not recommended, because we don't guarantee backward nor forward ABI compatibility (also function call overhead, as dear imgui is a call-heavy API)
+#ifndef IMGUI_API
+#define IMGUI_API
+#endif
+#ifndef IMGUI_IMPL_API
+#define IMGUI_IMPL_API              IMGUI_API
+#endif
+
+// Helper Macros
+#ifndef IM_ASSERT
+#include <assert.h>
+#define IM_ASSERT(_EXPR)            assert(_EXPR)                               // You can override the default assert handler by editing imconfig.h
+#endif
+#if !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__))
+#define IM_FMTARGS(FMT)             __attribute__((format(printf, FMT, FMT+1))) // To apply printf-style warnings to our functions.
+#define IM_FMTLIST(FMT)             __attribute__((format(printf, FMT, 0)))
+#else
+#define IM_FMTARGS(FMT)
+#define IM_FMTLIST(FMT)
+#endif
+#define IM_ARRAYSIZE(_ARR)          ((int)(sizeof(_ARR) / sizeof(*_ARR)))       // Size of a static C-style array. Don't use on pointers!
+#define IM_UNUSED(_VAR)             ((void)_VAR)                                // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
+#if (__cplusplus >= 201100)
+#define IM_OFFSETOF(_TYPE,_MEMBER)  offsetof(_TYPE, _MEMBER)                    // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
+#else
+#define IM_OFFSETOF(_TYPE,_MEMBER)  ((size_t)&(((_TYPE*)0)->_MEMBER))           // Offset of _MEMBER within _TYPE. Old style macro.
+#endif
+
+// Warnings
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wold-style-cast"
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-----------------------------------------------------------------------------
+// Forward declarations and basic types
+//-----------------------------------------------------------------------------
+
+// Forward declarations
+struct ImDrawChannel;               // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit()
+struct ImDrawCmd;                   // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback)
+struct ImDrawData;                  // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix.
+struct ImDrawList;                  // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder)
+struct ImDrawListSharedData;        // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
+struct ImDrawListSplitter;          // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back.
+struct ImDrawVert;                  // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
+struct ImFont;                      // Runtime data for a single font within a parent ImFontAtlas
+struct ImFontAtlas;                 // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
+struct ImFontConfig;                // Configuration data when adding a font or merging fonts
+struct ImFontGlyph;                 // A single font glyph (code point + coordinates within in ImFontAtlas + offset)
+struct ImFontGlyphRangesBuilder;    // Helper to build glyph ranges from text/string data
+struct ImColor;                     // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using)
+struct ImGuiContext;                // Dear ImGui context (opaque structure, unless including imgui_internal.h)
+struct ImGuiIO;                     // Main configuration and I/O between your application and ImGui
+struct ImGuiInputTextCallbackData;  // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use)
+struct ImGuiListClipper;            // Helper to manually clip large list of items
+struct ImGuiOnceUponAFrame;         // Helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro
+struct ImGuiPayload;                // User data payload for drag and drop operations
+struct ImGuiSizeCallbackData;       // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use)
+struct ImGuiStorage;                // Helper for key->value storage
+struct ImGuiStyle;                  // Runtime data for styling/colors
+struct ImGuiTableSortSpecs;         // Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
+struct ImGuiTableSortSpecsColumn;   // Sorting specification for one column of a table
+struct ImGuiTextBuffer;             // Helper to hold and append into a text buffer (~string builder)
+struct ImGuiTextFilter;             // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]")
+
+// Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file)
+// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists!
+//   In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+typedef int ImGuiCol;               // -> enum ImGuiCol_             // Enum: A color identifier for styling
+typedef int ImGuiCond;              // -> enum ImGuiCond_            // Enum: A condition for many Set*() functions
+typedef int ImGuiDataType;          // -> enum ImGuiDataType_        // Enum: A primary data type
+typedef int ImGuiDir;               // -> enum ImGuiDir_             // Enum: A cardinal direction
+typedef int ImGuiKey;               // -> enum ImGuiKey_             // Enum: A key identifier (ImGui-side enum)
+typedef int ImGuiNavInput;          // -> enum ImGuiNavInput_        // Enum: An input identifier for navigation
+typedef int ImGuiMouseButton;       // -> enum ImGuiMouseButton_     // Enum: A mouse button identifier (0=left, 1=right, 2=middle)
+typedef int ImGuiMouseCursor;       // -> enum ImGuiMouseCursor_     // Enum: A mouse cursor identifier
+typedef int ImGuiSortDirection;     // -> enum ImGuiSortDirection_   // Enum: A sorting direction (ascending or descending)
+typedef int ImGuiStyleVar;          // -> enum ImGuiStyleVar_        // Enum: A variable identifier for styling
+typedef int ImDrawCornerFlags;      // -> enum ImDrawCornerFlags_    // Flags: for ImDrawList::AddRect(), AddRectFilled() etc.
+typedef int ImDrawListFlags;        // -> enum ImDrawListFlags_      // Flags: for ImDrawList
+typedef int ImFontAtlasFlags;       // -> enum ImFontAtlasFlags_     // Flags: for ImFontAtlas
+typedef int ImGuiBackendFlags;      // -> enum ImGuiBackendFlags_    // Flags: for io.BackendFlags
+typedef int ImGuiColorEditFlags;    // -> enum ImGuiColorEditFlags_  // Flags: for ColorEdit4(), ColorPicker4() etc.
+typedef int ImGuiConfigFlags;       // -> enum ImGuiConfigFlags_     // Flags: for io.ConfigFlags
+typedef int ImGuiComboFlags;        // -> enum ImGuiComboFlags_      // Flags: for BeginCombo()
+typedef int ImGuiDragDropFlags;     // -> enum ImGuiDragDropFlags_   // Flags: for BeginDragDropSource(), AcceptDragDropPayload()
+typedef int ImGuiFocusedFlags;      // -> enum ImGuiFocusedFlags_    // Flags: for IsWindowFocused()
+typedef int ImGuiHoveredFlags;      // -> enum ImGuiHoveredFlags_    // Flags: for IsItemHovered(), IsWindowHovered() etc.
+typedef int ImGuiInputTextFlags;    // -> enum ImGuiInputTextFlags_  // Flags: for InputText(), InputTextMultiline()
+typedef int ImGuiKeyModFlags;       // -> enum ImGuiKeyModFlags_     // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super)
+typedef int ImGuiSelectableFlags;   // -> enum ImGuiSelectableFlags_ // Flags: for Selectable()
+typedef int ImGuiTabBarFlags;       // -> enum ImGuiTabBarFlags_     // Flags: for BeginTabBar()
+typedef int ImGuiTabItemFlags;      // -> enum ImGuiTabItemFlags_    // Flags: for BeginTabItem()
+typedef int ImGuiTableFlags;        // -> enum ImGuiTableFlags_      // Flags: For BeginTable()
+typedef int ImGuiTableColumnFlags;  // -> enum ImGuiTableColumnFlags_// Flags: For TableSetupColumn() 
+typedef int ImGuiTableRowFlags;     // -> enum ImGuiTableRowFlags_   // Flags: For TableNextRow()
+typedef int ImGuiTreeNodeFlags;     // -> enum ImGuiTreeNodeFlags_   // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader()
+typedef int ImGuiWindowFlags;       // -> enum ImGuiWindowFlags_     // Flags: for Begin(), BeginChild()
+
+// Other types
+#ifndef ImTextureID                 // ImTextureID [configurable type: override in imconfig.h with '#define ImTextureID xxx']
+typedef void* ImTextureID;          // User data for rendering back-end to identify a texture. This is whatever to you want it to be! read the FAQ about ImTextureID for details.
+#endif
+typedef unsigned int ImGuiID;       // A unique ID used by widgets, typically hashed from a stack of string.
+typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data);
+typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
+
+// Decoded character types
+// (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display)
+typedef unsigned short ImWchar16;   // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings.
+typedef unsigned int ImWchar32;     // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings.
+#ifdef IMGUI_USE_WCHAR32            // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16]
+typedef ImWchar32 ImWchar;
+#else
+typedef ImWchar16 ImWchar;
+#endif
+
+// Basic scalar data types
+typedef signed char         ImS8;   // 8-bit signed integer
+typedef unsigned char       ImU8;   // 8-bit unsigned integer
+typedef signed short        ImS16;  // 16-bit signed integer
+typedef unsigned short      ImU16;  // 16-bit unsigned integer
+typedef signed int          ImS32;  // 32-bit signed integer == int
+typedef unsigned int        ImU32;  // 32-bit unsigned integer (often used to store packed colors)
+#if defined(_MSC_VER) && !defined(__clang__)
+typedef signed   __int64    ImS64;  // 64-bit signed integer (pre and post C++11 with Visual Studio)
+typedef unsigned __int64    ImU64;  // 64-bit unsigned integer (pre and post C++11 with Visual Studio)
+#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100)
+#include <stdint.h>
+typedef int64_t             ImS64;  // 64-bit signed integer (pre C++11)
+typedef uint64_t            ImU64;  // 64-bit unsigned integer (pre C++11)
+#else
+typedef signed   long long  ImS64;  // 64-bit signed integer (post C++11)
+typedef unsigned long long  ImU64;  // 64-bit unsigned integer (post C++11)
+#endif
+
+// 2D vector (often used to store positions or sizes)
+struct ImVec2
+{
+    float                                   x, y;
+    ImVec2()                                { x = y = 0.0f; }
+    ImVec2(float _x, float _y)              { x = _x; y = _y; }
+    float  operator[] (size_t idx) const    { IM_ASSERT(idx <= 1); return (&x)[idx]; }    // We very rarely use this [] operator, the assert overhead is fine.
+    float& operator[] (size_t idx)          { IM_ASSERT(idx <= 1); return (&x)[idx]; }    // We very rarely use this [] operator, the assert overhead is fine.
+#ifdef IM_VEC2_CLASS_EXTRA
+    IM_VEC2_CLASS_EXTRA     // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2.
+#endif
+};
+
+// 4D vector (often used to store floating-point colors)
+struct ImVec4
+{
+    float                                   x, y, z, w;
+    ImVec4()                                { x = y = z = w = 0.0f; }
+    ImVec4(float _x, float _y, float _z, float _w)  { x = _x; y = _y; z = _z; w = _w; }
+#ifdef IM_VEC4_CLASS_EXTRA
+    IM_VEC4_CLASS_EXTRA     // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
+#endif
+};
+
+//-----------------------------------------------------------------------------
+// ImGui: Dear ImGui end-user API
+// (This is a namespace. You can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!)
+//-----------------------------------------------------------------------------
+
+namespace ImGui
+{
+    // Context creation and access
+    // Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts.
+    // None of those functions is reliant on the current context.
+    IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
+    IMGUI_API void          DestroyContext(ImGuiContext* ctx = NULL);   // NULL = destroy current context
+    IMGUI_API ImGuiContext* GetCurrentContext();
+    IMGUI_API void          SetCurrentContext(ImGuiContext* ctx);
+
+    // Main
+    IMGUI_API ImGuiIO&      GetIO();                                    // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags)
+    IMGUI_API ImGuiStyle&   GetStyle();                                 // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame!
+    IMGUI_API void          NewFrame();                                 // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame().
+    IMGUI_API void          EndFrame();                                 // ends the Dear ImGui frame. automatically called by Render(). If you don't need to render data (skipping rendering) you may call EndFrame() without Render()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all!
+    IMGUI_API void          Render();                                   // ends the Dear ImGui frame, finalize the draw data. You can get call GetDrawData() to obtain it and run your rendering function (up to v1.60, this used to call io.RenderDrawListsFn(). Nowadays, we allow and prefer calling your render function yourself.)
+    IMGUI_API ImDrawData*   GetDrawData();                              // valid after Render() and until the next call to NewFrame(). this is what you have to render.
+
+    // Demo, Debug, Information
+    IMGUI_API void          ShowDemoWindow(bool* p_open = NULL);        // create Demo window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
+    IMGUI_API void          ShowAboutWindow(bool* p_open = NULL);       // create About window. display Dear ImGui version, credits and build/system information.
+    IMGUI_API void          ShowMetricsWindow(bool* p_open = NULL);     // create Debug/Metrics window. display Dear ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
+    IMGUI_API void          ShowStyleEditor(ImGuiStyle* ref = NULL);    // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
+    IMGUI_API bool          ShowStyleSelector(const char* label);       // add style selector block (not a window), essentially a combo listing the default styles.
+    IMGUI_API void          ShowFontSelector(const char* label);        // add font selector block (not a window), essentially a combo listing the loaded fonts.
+    IMGUI_API void          ShowUserGuide();                            // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
+    IMGUI_API const char*   GetVersion();                               // get the compiled version string e.g. "1.23" (essentially the compiled value for IMGUI_VERSION)
+
+    // Styles
+    IMGUI_API void          StyleColorsDark(ImGuiStyle* dst = NULL);    // new, recommended style (default)
+    IMGUI_API void          StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style
+    IMGUI_API void          StyleColorsLight(ImGuiStyle* dst = NULL);   // best used with borders and a custom, thicker font
+
+    // Windows
+    // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack.
+    // - You may append multiple times to the same window during the same frame.
+    // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window,
+    //   which clicking will set the boolean to false when clicked.
+    // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
+    //   anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
+    //   [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
+    //    BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
+    //    returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
+    // - Note that the bottom of window stack always contains a window called "Debug".
+    IMGUI_API bool          Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
+    IMGUI_API void          End();
+
+    // Child Windows
+    // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
+    // - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
+    // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
+    //   Always call a matching EndChild() for each BeginChild() call, regardless of its return value [as with Begin: this is due to legacy reason and inconsistent with most BeginXXX functions apart from the regular Begin() which behaves like BeginChild().]
+    IMGUI_API bool          BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
+    IMGUI_API bool          BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
+    IMGUI_API void          EndChild();
+
+    // Windows Utilities
+    // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into.
+    IMGUI_API bool          IsWindowAppearing();
+    IMGUI_API bool          IsWindowCollapsed();
+    IMGUI_API bool          IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
+    IMGUI_API bool          IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
+    IMGUI_API ImDrawList*   GetWindowDrawList();                        // get draw list associated to the current window, to append your own drawing primitives
+    IMGUI_API ImVec2        GetWindowPos();                             // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
+    IMGUI_API ImVec2        GetWindowSize();                            // get current window size
+    IMGUI_API float         GetWindowWidth();                           // get current window width (shortcut for GetWindowSize().x)
+    IMGUI_API float         GetWindowHeight();                          // get current window height (shortcut for GetWindowSize().y)
+
+    // Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin).
+    IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
+    IMGUI_API void          SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0);                  // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
+    IMGUI_API void          SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
+    IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                               // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin()
+    IMGUI_API void          SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                 // set next window collapsed state. call before Begin()
+    IMGUI_API void          SetNextWindowFocus();                                                       // set next window to be focused / top-most. call before Begin()
+    IMGUI_API void          SetNextWindowBgAlpha(float alpha);                                          // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
+    IMGUI_API void          SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0);                        // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
+    IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
+    IMGUI_API void          SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                     // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
+    IMGUI_API void          SetWindowFocus();                                                           // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus().
+    IMGUI_API void          SetWindowFontScale(float scale);                                            // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes().
+    IMGUI_API void          SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0);      // set named window position.
+    IMGUI_API void          SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0);    // set named window size. set axis to 0.0f to force an auto-fit on this axis.
+    IMGUI_API void          SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0);   // set named window collapsed state
+    IMGUI_API void          SetWindowFocus(const char* name);                                           // set named window to be focused / top-most. use NULL to remove focus.
+
+    // Content region
+    // - Those functions are bound to be redesigned soon (they are confusing, incomplete and return values in local window coordinates which increases confusion)
+    IMGUI_API ImVec2        GetContentRegionMax();                                          // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
+    IMGUI_API ImVec2        GetContentRegionAvail();                                        // == GetContentRegionMax() - GetCursorPos()
+    IMGUI_API ImVec2        GetWindowContentRegionMin();                                    // content boundaries min (roughly (0,0)-Scroll), in window coordinates
+    IMGUI_API ImVec2        GetWindowContentRegionMax();                                    // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
+    IMGUI_API float         GetWindowContentRegionWidth();                                  //
+
+    // Windows Scrolling
+    IMGUI_API float         GetScrollX();                                                   // get scrolling amount [0..GetScrollMaxX()]
+    IMGUI_API float         GetScrollY();                                                   // get scrolling amount [0..GetScrollMaxY()]
+    IMGUI_API float         GetScrollMaxX();                                                // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X
+    IMGUI_API float         GetScrollMaxY();                                                // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y
+    IMGUI_API void          SetScrollX(float scroll_x);                                     // set scrolling amount [0..GetScrollMaxX()]
+    IMGUI_API void          SetScrollY(float scroll_y);                                     // set scrolling amount [0..GetScrollMaxY()]
+    IMGUI_API void          SetScrollHereX(float center_x_ratio = 0.5f);                    // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+    IMGUI_API void          SetScrollHereY(float center_y_ratio = 0.5f);                    // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+    IMGUI_API void          SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f);  // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
+    IMGUI_API void          SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f);  // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
+
+    // Parameters stacks (shared)
+    IMGUI_API void          PushFont(ImFont* font);                                         // use NULL as a shortcut to push default font
+    IMGUI_API void          PopFont();
+    IMGUI_API void          PushStyleColor(ImGuiCol idx, ImU32 col);
+    IMGUI_API void          PushStyleColor(ImGuiCol idx, const ImVec4& col);
+    IMGUI_API void          PopStyleColor(int count = 1);
+    IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, float val);
+    IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
+    IMGUI_API void          PopStyleVar(int count = 1);
+    IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx);                                // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in.
+    IMGUI_API ImFont*       GetFont();                                                      // get current font
+    IMGUI_API float         GetFontSize();                                                  // get current font size (= height in pixels) of current font with current scale applied
+    IMGUI_API ImVec2        GetFontTexUvWhitePixel();                                       // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
+    IMGUI_API ImU32         GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f);              // retrieve given style color with style alpha applied and optional extra alpha multiplier
+    IMGUI_API ImU32         GetColorU32(const ImVec4& col);                                 // retrieve given color with style alpha applied
+    IMGUI_API ImU32         GetColorU32(ImU32 col);                                         // retrieve given color with style alpha applied
+
+    // Parameters stacks (current window)
+    IMGUI_API void          PushItemWidth(float item_width);                                // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side). 0.0f = default to ~2/3 of windows width,
+    IMGUI_API void          PopItemWidth();
+    IMGUI_API void          SetNextItemWidth(float item_width);                             // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
+    IMGUI_API float         CalcItemWidth();                                                // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
+    IMGUI_API void          PushTextWrapPos(float wrap_local_pos_x = 0.0f);                 // push word-wrapping position for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
+    IMGUI_API void          PopTextWrapPos();
+    IMGUI_API void          PushAllowKeyboardFocus(bool allow_keyboard_focus);              // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
+    IMGUI_API void          PopAllowKeyboardFocus();
+    IMGUI_API void          PushButtonRepeat(bool repeat);                                  // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
+    IMGUI_API void          PopButtonRepeat();
+
+    // Cursor / Layout
+    // - By "cursor" we mean the current output position.
+    // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
+    // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceeding widget.
+    // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
+    //    Window-local coordinates:   SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
+    //    Absolute coordinate:        GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions.
+    IMGUI_API void          Separator();                                                    // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
+    IMGUI_API void          SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f);  // call between widgets or groups to layout them horizontally. X position given in window coordinates.
+    IMGUI_API void          NewLine();                                                      // undo a SameLine() or force a new line when in an horizontal-layout context.
+    IMGUI_API void          Spacing();                                                      // add vertical spacing.
+    IMGUI_API void          Dummy(const ImVec2& size);                                      // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into.
+    IMGUI_API void          Indent(float indent_w = 0.0f);                                  // move content position toward the right, by style.IndentSpacing or indent_w if != 0
+    IMGUI_API void          Unindent(float indent_w = 0.0f);                                // move content position back to the left, by style.IndentSpacing or indent_w if != 0
+    IMGUI_API void          BeginGroup();                                                   // lock horizontal starting position
+    IMGUI_API void          EndGroup();                                                     // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
+    IMGUI_API ImVec2        GetCursorPos();                                                 // cursor position in window coordinates (relative to window position)
+    IMGUI_API float         GetCursorPosX();                                                //   (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
+    IMGUI_API float         GetCursorPosY();                                                //    other functions such as GetCursorScreenPos or everything in ImDrawList::
+    IMGUI_API void          SetCursorPos(const ImVec2& local_pos);                          //    are using the main, absolute coordinate system.
+    IMGUI_API void          SetCursorPosX(float local_x);                                   //    GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
+    IMGUI_API void          SetCursorPosY(float local_y);                                   //
+    IMGUI_API ImVec2        GetCursorStartPos();                                            // initial cursor position in window coordinates
+    IMGUI_API ImVec2        GetCursorScreenPos();                                           // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API)
+    IMGUI_API void          SetCursorScreenPos(const ImVec2& pos);                          // cursor position in absolute screen coordinates [0..io.DisplaySize]
+    IMGUI_API void          AlignTextToFramePadding();                                      // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item)
+    IMGUI_API float         GetTextLineHeight();                                            // ~ FontSize
+    IMGUI_API float         GetTextLineHeightWithSpacing();                                 // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
+    IMGUI_API float         GetFrameHeight();                                               // ~ FontSize + style.FramePadding.y * 2
+    IMGUI_API float         GetFrameHeightWithSpacing();                                    // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
+
+    // ID stack/scopes
+    // - Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most
+    //   likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
+    // - The resulting ID are hashes of the entire stack.
+    // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others.
+    // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID,
+    //   whereas "str_id" denote a string that is only used as an ID and not normally displayed.
+    IMGUI_API void          PushID(const char* str_id);                                     // push string into the ID stack (will hash string).
+    IMGUI_API void          PushID(const char* str_id_begin, const char* str_id_end);       // push string into the ID stack (will hash string).
+    IMGUI_API void          PushID(const void* ptr_id);                                     // push pointer into the ID stack (will hash pointer).
+    IMGUI_API void          PushID(int int_id);                                             // push integer into the ID stack (will hash integer).
+    IMGUI_API void          PopID();                                                        // pop from the ID stack.
+    IMGUI_API ImGuiID       GetID(const char* str_id);                                      // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
+    IMGUI_API ImGuiID       GetID(const char* str_id_begin, const char* str_id_end);
+    IMGUI_API ImGuiID       GetID(const void* ptr_id);
+
+    // Widgets: Text
+    IMGUI_API void          TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
+    IMGUI_API void          Text(const char* fmt, ...)                                      IM_FMTARGS(1); // formatted text
+    IMGUI_API void          TextV(const char* fmt, va_list args)                            IM_FMTLIST(1);
+    IMGUI_API void          TextColored(const ImVec4& col, const char* fmt, ...)            IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
+    IMGUI_API void          TextColoredV(const ImVec4& col, const char* fmt, va_list args)  IM_FMTLIST(2);
+    IMGUI_API void          TextDisabled(const char* fmt, ...)                              IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
+    IMGUI_API void          TextDisabledV(const char* fmt, va_list args)                    IM_FMTLIST(1);
+    IMGUI_API void          TextWrapped(const char* fmt, ...)                               IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
+    IMGUI_API void          TextWrappedV(const char* fmt, va_list args)                     IM_FMTLIST(1);
+    IMGUI_API void          LabelText(const char* label, const char* fmt, ...)              IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
+    IMGUI_API void          LabelTextV(const char* label, const char* fmt, va_list args)    IM_FMTLIST(2);
+    IMGUI_API void          BulletText(const char* fmt, ...)                                IM_FMTARGS(1); // shortcut for Bullet()+Text()
+    IMGUI_API void          BulletTextV(const char* fmt, va_list args)                      IM_FMTLIST(1);
+
+    // Widgets: Main
+    // - Most widgets return true when the value has been changed or when pressed/selected
+    // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state.
+    IMGUI_API bool          Button(const char* label, const ImVec2& size = ImVec2(0,0));    // button
+    IMGUI_API bool          SmallButton(const char* label);                                 // button with FramePadding=(0,0) to easily embed within text
+    IMGUI_API bool          InvisibleButton(const char* str_id, const ImVec2& size);        // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
+    IMGUI_API bool          ArrowButton(const char* str_id, ImGuiDir dir);                  // square button with an arrow shape
+    IMGUI_API void          Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
+    IMGUI_API bool          ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0),  const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1));    // <0 frame_padding uses default frame padding settings. 0 for no padding
+    IMGUI_API bool          Checkbox(const char* label, bool* v);
+    IMGUI_API bool          CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
+    IMGUI_API bool          RadioButton(const char* label, bool active);                    // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; }
+    IMGUI_API bool          RadioButton(const char* label, int* v, int v_button);           // shortcut to handle the above pattern when value is an integer
+    IMGUI_API void          ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
+    IMGUI_API void          Bullet();                                                       // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
+
+    // Widgets: Combo Box
+    // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
+    // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
+    IMGUI_API bool          BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
+    IMGUI_API void          EndCombo(); // only call EndCombo() if BeginCombo() returns true!
+    IMGUI_API bool          Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
+    IMGUI_API bool          Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1);      // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0"
+    IMGUI_API bool          Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1);
+
+    // Widgets: Drags
+    // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
+    // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+    // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+    // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
+    // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits.
+    // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum.
+    // - Use v_min > v_max to lock edits.
+    IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);     // If v_min >= v_max we have no bound
+    IMGUI_API bool          DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, float power = 1.0f);
+    IMGUI_API bool          DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");                                       // If v_min >= v_max we have no bound
+    IMGUI_API bool          DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
+    IMGUI_API bool          DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
+    IMGUI_API bool          DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
+    IMGUI_API bool          DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL);
+    IMGUI_API bool          DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f);
+    IMGUI_API bool          DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f);
+
+    // Widgets: Sliders
+    // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
+    // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+    IMGUI_API bool          SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);     // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders
+    IMGUI_API bool          SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg");
+    IMGUI_API bool          SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d");
+    IMGUI_API bool          SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d");
+    IMGUI_API bool          SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d");
+    IMGUI_API bool          SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d");
+    IMGUI_API bool          SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
+    IMGUI_API bool          SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
+    IMGUI_API bool          VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
+    IMGUI_API bool          VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d");
+    IMGUI_API bool          VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
+
+    // Widgets: Input with Keyboard
+    // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp.
+    // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc.
+    IMGUI_API bool          InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+    IMGUI_API bool          InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+    IMGUI_API bool          InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+    IMGUI_API bool          InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool          InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
+
+    // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
+    // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible.
+    // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
+    IMGUI_API bool          ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+    IMGUI_API bool          ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
+    IMGUI_API bool          ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+    IMGUI_API bool          ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
+    IMGUI_API bool          ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0));  // display a colored square/button, hover for details, return true when pressed.
+    IMGUI_API void          SetColorEditOptions(ImGuiColorEditFlags flags);                     // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
+
+    // Widgets: Trees
+    // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
+    IMGUI_API bool          TreeNode(const char* label);
+    IMGUI_API bool          TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2);   // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
+    IMGUI_API bool          TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2);   // "
+    IMGUI_API bool          TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
+    IMGUI_API bool          TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
+    IMGUI_API bool          TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
+    IMGUI_API bool          TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+    IMGUI_API bool          TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+    IMGUI_API bool          TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+    IMGUI_API bool          TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+    IMGUI_API void          TreePush(const char* str_id);                                       // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired.
+    IMGUI_API void          TreePush(const void* ptr_id = NULL);                                // "
+    IMGUI_API void          TreePop();                                                          // ~ Unindent()+PopId()
+    IMGUI_API float         GetTreeNodeToLabelSpacing();                                        // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
+    IMGUI_API bool          CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0);  // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
+    IMGUI_API bool          CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
+    IMGUI_API void          SetNextItemOpen(bool is_open, ImGuiCond cond = 0);                  // set next TreeNode/CollapsingHeader open state.
+
+    // Widgets: Selectables
+    // - A selectable highlights when hovered, and can display another color when selected.
+    // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous.
+    IMGUI_API bool          Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0));  // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
+    IMGUI_API bool          Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0));       // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
+
+    // Widgets: List Boxes
+    // - FIXME: To be consistent with all the newer API, ListBoxHeader/ListBoxFooter should in reality be called BeginListBox/EndListBox. Will rename them.
+    IMGUI_API bool          ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1);
+    IMGUI_API bool          ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
+    IMGUI_API bool          ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. if the function return true, you can output elements then call ListBoxFooter() afterwards.
+    IMGUI_API bool          ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // "
+    IMGUI_API void          ListBoxFooter();                                                    // terminate the scrolling region. only call ListBoxFooter() if ListBoxHeader() returned true!
+
+    // Widgets: Data Plotting
+    IMGUI_API void          PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
+    IMGUI_API void          PlotLines(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
+    IMGUI_API void          PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
+    IMGUI_API void          PlotHistogram(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
+
+    // Widgets: Value() Helpers.
+    // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
+    IMGUI_API void          Value(const char* prefix, bool b);
+    IMGUI_API void          Value(const char* prefix, int v);
+    IMGUI_API void          Value(const char* prefix, unsigned int v);
+    IMGUI_API void          Value(const char* prefix, float v, const char* float_format = NULL);
+
+    // Widgets: Menus
+    // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar.
+    // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it.
+    // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it.
+    IMGUI_API bool          BeginMenuBar();                                                     // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
+    IMGUI_API void          EndMenuBar();                                                       // only call EndMenuBar() if BeginMenuBar() returns true!
+    IMGUI_API bool          BeginMainMenuBar();                                                 // create and append to a full screen menu-bar.
+    IMGUI_API void          EndMainMenuBar();                                                   // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
+    IMGUI_API bool          BeginMenu(const char* label, bool enabled = true);                  // create a sub-menu entry. only call EndMenu() if this returns true!
+    IMGUI_API void          EndMenu();                                                          // only call EndMenu() if BeginMenu() returns true!
+    IMGUI_API bool          MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true);  // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment
+    IMGUI_API bool          MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true);              // return true when activated + toggle (*p_selected) if p_selected != NULL
+
+    // Tooltips
+    // - Tooltip are windows following the mouse which do not take focus away.
+    IMGUI_API void          BeginTooltip();                                                     // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
+    IMGUI_API void          EndTooltip();
+    IMGUI_API void          SetTooltip(const char* fmt, ...) IM_FMTARGS(1);                     // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
+    IMGUI_API void          SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
+
+    // Popups, Modals
+    // The properties of popups windows are:
+    // - They block normal mouse hovering detection outside them. (*)
+    // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+    // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
+    //   User can manipulate the visibility state by calling OpenPopup().
+    // - We default to use the right mouse (ImGuiMouseButton_Right=1) for the Popup Context functions.
+    // (*) You can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
+    // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
+    IMGUI_API void          OpenPopup(const char* str_id);                                      // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
+    IMGUI_API bool          BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0);                                             // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
+    IMGUI_API bool          BeginPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                    // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
+    IMGUI_API bool          BeginPopupContextWindow(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1, bool also_over_items = true);  // helper to open and begin popup when clicked on current window.
+    IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                    // helper to open and begin popup when clicked in void (where there are no imgui windows).
+    IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);                     // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
+    IMGUI_API void          EndPopup();                                                                                             // only call EndPopup() if BeginPopupXXX() returns true!
+    IMGUI_API bool          OpenPopupOnItemClick(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                     // helper to open popup when clicked on last item (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors). return true when just opened.
+    IMGUI_API bool          IsPopupOpen(const char* str_id);                                    // return true if the popup is open at the current begin-ed level of the popup stack.
+    IMGUI_API void          CloseCurrentPopup();                                                // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
+
+    // Columns
+    // - You can also use SameLine(pos_x) to mimic simplified columns.
+    // - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
+    // - There is a maximum of 64 columns.
+    // - Currently working on new 'Tables' api which will replace columns around Q2 2020 (see GitHub #2957).
+    IMGUI_API void          Columns(int count = 1, const char* id = NULL, bool border = true);
+    IMGUI_API void          NextColumn();                                                       // next column, defaults to current row or next row if the current row is finished
+    IMGUI_API int           GetColumnIndex();                                                   // get current column index
+    IMGUI_API float         GetColumnWidth(int column_index = -1);                              // get column width (in pixels). pass -1 to use current column
+    IMGUI_API void          SetColumnWidth(int column_index, float width);                      // set column width (in pixels). pass -1 to use current column
+    IMGUI_API float         GetColumnOffset(int column_index = -1);                             // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
+    IMGUI_API void          SetColumnOffset(int column_index, float offset_x);                  // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
+    IMGUI_API int           GetColumnsCount();
+
+    // Tables
+    // [ALPHA API] API will evolve! (FIXME-TABLE)
+    // - Full-featured replacement for old Columns API
+    // - In most situations you can use TableNextRow() + TableSetColumnIndex() to populate a table.
+    // - If you are using tables as a sort of grid, populating every columns with the same type of contents,
+    //   you may prefer using TableNextCell() instead of TableNextRow() + TableSetColumnIndex().
+    // - See Demo->Tables for details.
+    // - See ImGuiTableFlags_ enums for a description of available flags. 
+    #define IMGUI_HAS_TABLE 1
+    IMGUI_API bool          BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
+    IMGUI_API void          EndTable();                                 // only call EndTable() if BeginTable() returns true!
+    IMGUI_API void          TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row.
+    IMGUI_API bool          TableNextCell();                            // append into the next column (next column, or next row if currently in last column). Return true if column is visible.
+    IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true if column is visible.
+    IMGUI_API int           TableGetColumnIndex();                      // return current column index.
+    IMGUI_API const char*   TableGetColumnName(int column_n = -1);      // return NULL if column didn't have a name declared by TableSetupColumn(). Pass -1 to use current column.
+    IMGUI_API bool          TableGetColumnIsVisible(int column_n = -1); // return true if column is visible. Same value is also returned by TableNextCell() and TableSetColumnIndex(). Pass -1 to use current column.
+    IMGUI_API bool          TableGetColumnIsSorted(int column_n = -1);  // return true if column is included in the sort specs. Rarely used, can be useful to tell if a data change should trigger resort. Equivalent to test ImGuiTableSortSpecs's ->ColumnsMask & (1 << column_n). Pass -1 to use current column.
+    // Tables: Headers & Columns declaration
+    // - Use TableSetupColumn() to specify label, resizing policy, default width, id, various other flags etc.
+    // - The name passed to TableSetupColumn() is used by TableAutoHeaders() and by the context-menu
+    // - Use TableAutoHeaders() to submit the whole header row, otherwise you may treat the header row as a regular row, manually call TableHeader() and other widgets.
+    // - Headers are required to perform some interactions: reordering, sorting, context menu // FIXME-TABLE: remove context from this list!
+    IMGUI_API void          TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = -1.0f, ImU32 user_id = 0);
+    IMGUI_API void          TableAutoHeaders();                         // submit all headers cells based on data provided to TableSetupColumn() + submit context menu
+    IMGUI_API void          TableHeader(const char* label);             // submit one header cell manually.
+    // Tables: Sorting
+    // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. Return value will be NULL if no sorting.
+    // - You can sort your data again when 'SpecsChanged == true'. It will be true with sorting specs have changed since last call, or the first time.
+    // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable()!
+    IMGUI_API const ImGuiTableSortSpecs* TableGetSortSpecs();           // get latest sort specs for the table (NULL if not sorting).
+
+    // Tab Bars, Tabs
+    IMGUI_API bool          BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0);        // create and append into a TabBar
+    IMGUI_API void          EndTabBar();                                                        // only call EndTabBar() if BeginTabBar() returns true!
+    IMGUI_API bool          BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected.
+    IMGUI_API void          EndTabItem();                                                       // only call EndTabItem() if BeginTabItem() returns true!
+    IMGUI_API void          SetTabItemClosed(const char* tab_or_docked_window_label);           // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name.
+
+    // Logging/Capture
+    // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
+    IMGUI_API void          LogToTTY(int auto_open_depth = -1);                                 // start logging to tty (stdout)
+    IMGUI_API void          LogToFile(int auto_open_depth = -1, const char* filename = NULL);   // start logging to file
+    IMGUI_API void          LogToClipboard(int auto_open_depth = -1);                           // start logging to OS clipboard
+    IMGUI_API void          LogFinish();                                                        // stop logging (close file, etc.)
+    IMGUI_API void          LogButtons();                                                       // helper to display buttons for logging to tty/file/clipboard
+    IMGUI_API void          LogText(const char* fmt, ...) IM_FMTARGS(1);                        // pass text data straight to log (without being displayed)
+
+    // Drag and Drop
+    // - [BETA API] API may evolve!
+    IMGUI_API bool          BeginDragDropSource(ImGuiDragDropFlags flags = 0);                                      // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
+    IMGUI_API bool          SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0);  // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
+    IMGUI_API void          EndDragDropSource();                                                                    // only call EndDragDropSource() if BeginDragDropSource() returns true!
+    IMGUI_API bool                  BeginDragDropTarget();                                                          // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
+    IMGUI_API const ImGuiPayload*   AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0);          // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
+    IMGUI_API void                  EndDragDropTarget();                                                            // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
+    IMGUI_API const ImGuiPayload*   GetDragDropPayload();                                                           // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
+
+    // Clipping
+    IMGUI_API void          PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
+    IMGUI_API void          PopClipRect();
+
+    // Focus, Activation
+    // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item"
+    IMGUI_API void          SetItemDefaultFocus();                                              // make last item the default focused item of a window.
+    IMGUI_API void          SetKeyboardFocusHere(int offset = 0);                               // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
+
+    // Item/Widgets Utilities
+    // - Most of the functions are referring to the last/previous item we submitted.
+    // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions.
+    IMGUI_API bool          IsItemHovered(ImGuiHoveredFlags flags = 0);                         // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options.
+    IMGUI_API bool          IsItemActive();                                                     // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false)
+    IMGUI_API bool          IsItemFocused();                                                    // is the last item focused for keyboard/gamepad navigation?
+    IMGUI_API bool          IsItemClicked(ImGuiMouseButton mouse_button = 0);                   // is the last item clicked? (e.g. button/node just clicked on) == IsMouseClicked(mouse_button) && IsItemHovered()
+    IMGUI_API bool          IsItemVisible();                                                    // is the last item visible? (items may be out of sight because of clipping/scrolling)
+    IMGUI_API bool          IsItemEdited();                                                     // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets.
+    IMGUI_API bool          IsItemActivated();                                                  // was the last item just made active (item was previously inactive).
+    IMGUI_API bool          IsItemDeactivated();                                                // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing.
+    IMGUI_API bool          IsItemDeactivatedAfterEdit();                                       // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item).
+    IMGUI_API bool          IsItemToggledOpen();                                                // was the last item open state toggled? set by TreeNode().
+    IMGUI_API bool          IsAnyItemHovered();                                                 // is any item hovered?
+    IMGUI_API bool          IsAnyItemActive();                                                  // is any item active?
+    IMGUI_API bool          IsAnyItemFocused();                                                 // is any item focused?
+    IMGUI_API ImVec2        GetItemRectMin();                                                   // get upper-left bounding rectangle of the last item (screen space)
+    IMGUI_API ImVec2        GetItemRectMax();                                                   // get lower-right bounding rectangle of the last item (screen space)
+    IMGUI_API ImVec2        GetItemRectSize();                                                  // get size of last item
+    IMGUI_API void          SetItemAllowOverlap();                                              // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
+
+    // Miscellaneous Utilities
+    IMGUI_API bool          IsRectVisible(const ImVec2& size);                                  // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
+    IMGUI_API bool          IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max);      // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
+    IMGUI_API double        GetTime();                                                          // get global imgui time. incremented by io.DeltaTime every frame.
+    IMGUI_API int           GetFrameCount();                                                    // get global imgui frame count. incremented by 1 every frame.
+    IMGUI_API ImDrawList*   GetBackgroundDrawList();                                            // this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
+    IMGUI_API ImDrawList*   GetForegroundDrawList();                                            // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
+    IMGUI_API ImDrawListSharedData* GetDrawListSharedData();                                    // you may use this when creating your own ImDrawList instances.
+    IMGUI_API const char*   GetStyleColorName(ImGuiCol idx);                                    // get a string corresponding to the enum value (for display, saving, etc.).
+    IMGUI_API void          SetStateStorage(ImGuiStorage* storage);                             // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
+    IMGUI_API ImGuiStorage* GetStateStorage();
+    IMGUI_API void          CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end);    // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
+    IMGUI_API bool          BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
+    IMGUI_API void          EndChildFrame();                                                    // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
+
+    // Text Utilities
+    IMGUI_API ImVec2        CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
+
+    // Color Utilities
+    IMGUI_API ImVec4        ColorConvertU32ToFloat4(ImU32 in);
+    IMGUI_API ImU32         ColorConvertFloat4ToU32(const ImVec4& in);
+    IMGUI_API void          ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v);
+    IMGUI_API void          ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
+
+    // Inputs Utilities: Keyboard
+    // - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[].
+    // - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index.
+    IMGUI_API int           GetKeyIndex(ImGuiKey imgui_key);                                    // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
+    IMGUI_API bool          IsKeyDown(int user_key_index);                                      // is key being held. == io.KeysDown[user_key_index].
+    IMGUI_API bool          IsKeyPressed(int user_key_index, bool repeat = true);               // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
+    IMGUI_API bool          IsKeyReleased(int user_key_index);                                  // was key released (went from Down to !Down)?
+    IMGUI_API int           GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
+    IMGUI_API void          CaptureKeyboardFromApp(bool want_capture_keyboard_value = true);    // attention: misleading name! manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call.
+
+    // Inputs Utilities: Mouse
+    // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right.
+    // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle.
+    // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold')
+    IMGUI_API bool          IsMouseDown(ImGuiMouseButton button);                               // is mouse button held?
+    IMGUI_API bool          IsMouseClicked(ImGuiMouseButton button, bool repeat = false);       // did mouse button clicked? (went from !Down to Down)
+    IMGUI_API bool          IsMouseReleased(ImGuiMouseButton button);                           // did mouse button released? (went from Down to !Down)
+    IMGUI_API bool          IsMouseDoubleClicked(ImGuiMouseButton button);                      // did mouse button double-clicked? a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
+    IMGUI_API bool          IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
+    IMGUI_API bool          IsMousePosValid(const ImVec2* mouse_pos = NULL);                    // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
+    IMGUI_API bool          IsAnyMouseDown();                                                   // is any mouse button held?
+    IMGUI_API ImVec2        GetMousePos();                                                      // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
+    IMGUI_API ImVec2        GetMousePosOnOpeningCurrentPopup();                                 // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves)
+    IMGUI_API bool          IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f);         // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
+    IMGUI_API ImVec2        GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f);   // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
+    IMGUI_API void          ResetMouseDragDelta(ImGuiMouseButton button = 0);                   //
+    IMGUI_API ImGuiMouseCursor GetMouseCursor();                                                // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
+    IMGUI_API void          SetMouseCursor(ImGuiMouseCursor cursor_type);                       // set desired cursor type
+    IMGUI_API void          CaptureMouseFromApp(bool want_capture_mouse_value = true);          // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call.
+
+    // Clipboard Utilities
+    // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard.
+    IMGUI_API const char*   GetClipboardText();
+    IMGUI_API void          SetClipboardText(const char* text);
+
+    // Settings/.Ini Utilities
+    // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
+    // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
+    IMGUI_API void          LoadIniSettingsFromDisk(const char* ini_filename);                  // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
+    IMGUI_API void          LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source.
+    IMGUI_API void          SaveIniSettingsToDisk(const char* ini_filename);                    // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext).
+    IMGUI_API const char*   SaveIniSettingsToMemory(size_t* out_ini_size = NULL);               // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings.
+
+    // Debug Utilities
+    IMGUI_API bool          DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro.
+
+    // Memory Allocators
+    // - All those functions are not reliant on the current context.
+    // - If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again because we use global storage for those.
+    IMGUI_API void          SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = NULL);
+    IMGUI_API void*         MemAlloc(size_t size);
+    IMGUI_API void          MemFree(void* ptr);
+
+} // namespace ImGui
+
+//-----------------------------------------------------------------------------
+// Flags & Enumerations
+//-----------------------------------------------------------------------------
+
+// Flags for ImGui::Begin()
+enum ImGuiWindowFlags_
+{
+    ImGuiWindowFlags_None                   = 0,
+    ImGuiWindowFlags_NoTitleBar             = 1 << 0,   // Disable title-bar
+    ImGuiWindowFlags_NoResize               = 1 << 1,   // Disable user resizing with the lower-right grip
+    ImGuiWindowFlags_NoMove                 = 1 << 2,   // Disable user moving the window
+    ImGuiWindowFlags_NoScrollbar            = 1 << 3,   // Disable scrollbars (window can still scroll with mouse or programmatically)
+    ImGuiWindowFlags_NoScrollWithMouse      = 1 << 4,   // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
+    ImGuiWindowFlags_NoCollapse             = 1 << 5,   // Disable user collapsing window by double-clicking on it
+    ImGuiWindowFlags_AlwaysAutoResize       = 1 << 6,   // Resize every window to its content every frame
+    ImGuiWindowFlags_NoBackground           = 1 << 7,   // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
+    ImGuiWindowFlags_NoSavedSettings        = 1 << 8,   // Never load/save settings in .ini file
+    ImGuiWindowFlags_NoMouseInputs          = 1 << 9,   // Disable catching mouse, hovering test with pass through.
+    ImGuiWindowFlags_MenuBar                = 1 << 10,  // Has a menu-bar
+    ImGuiWindowFlags_HorizontalScrollbar    = 1 << 11,  // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
+    ImGuiWindowFlags_NoFocusOnAppearing     = 1 << 12,  // Disable taking focus when transitioning from hidden to visible state
+    ImGuiWindowFlags_NoBringToFrontOnFocus  = 1 << 13,  // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
+    ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,  // Always show vertical scrollbar (even if ContentSize.y < Size.y)
+    ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,  // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
+    ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,  // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
+    ImGuiWindowFlags_NoNavInputs            = 1 << 18,  // No gamepad/keyboard navigation within the window
+    ImGuiWindowFlags_NoNavFocus             = 1 << 19,  // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
+    ImGuiWindowFlags_UnsavedDocument        = 1 << 20,  // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. When used in a tab/docking context, tab is selected on closure and closure is deferred by one frame to allow code to cancel the closure (with a confirmation popup, etc.) without flicker.
+    ImGuiWindowFlags_NoNav                  = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+    ImGuiWindowFlags_NoDecoration           = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
+    ImGuiWindowFlags_NoInputs               = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+
+    // [Internal]
+    ImGuiWindowFlags_NavFlattened           = 1 << 23,  // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
+    ImGuiWindowFlags_ChildWindow            = 1 << 24,  // Don't use! For internal use by BeginChild()
+    ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip()
+    ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup()
+    ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal()
+    ImGuiWindowFlags_ChildMenu              = 1 << 28   // Don't use! For internal use by BeginMenu()
+
+    // [Obsolete]
+    //ImGuiWindowFlags_ShowBorders          = 1 << 7,   // --> Set style.FrameBorderSize=1.0f or style.WindowBorderSize=1.0f to enable borders around items or windows.
+    //ImGuiWindowFlags_ResizeFromAnySide    = 1 << 17,  // --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by back-end (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
+};
+
+// Flags for ImGui::InputText()
+enum ImGuiInputTextFlags_
+{
+    ImGuiInputTextFlags_None                = 0,
+    ImGuiInputTextFlags_CharsDecimal        = 1 << 0,   // Allow 0123456789.+-*/
+    ImGuiInputTextFlags_CharsHexadecimal    = 1 << 1,   // Allow 0123456789ABCDEFabcdef
+    ImGuiInputTextFlags_CharsUppercase      = 1 << 2,   // Turn a..z into A..Z
+    ImGuiInputTextFlags_CharsNoBlank        = 1 << 3,   // Filter out spaces, tabs
+    ImGuiInputTextFlags_AutoSelectAll       = 1 << 4,   // Select entire text when first taking mouse focus
+    ImGuiInputTextFlags_EnterReturnsTrue    = 1 << 5,   // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function.
+    ImGuiInputTextFlags_CallbackCompletion  = 1 << 6,   // Callback on pressing TAB (for completion handling)
+    ImGuiInputTextFlags_CallbackHistory     = 1 << 7,   // Callback on pressing Up/Down arrows (for history handling)
+    ImGuiInputTextFlags_CallbackAlways      = 1 << 8,   // Callback on each iteration. User code may query cursor position, modify text buffer.
+    ImGuiInputTextFlags_CallbackCharFilter  = 1 << 9,   // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
+    ImGuiInputTextFlags_AllowTabInput       = 1 << 10,  // Pressing TAB input a '\t' character into the text field
+    ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11,  // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
+    ImGuiInputTextFlags_NoHorizontalScroll  = 1 << 12,  // Disable following the cursor horizontally
+    ImGuiInputTextFlags_AlwaysInsertMode    = 1 << 13,  // Insert mode
+    ImGuiInputTextFlags_ReadOnly            = 1 << 14,  // Read-only mode
+    ImGuiInputTextFlags_Password            = 1 << 15,  // Password mode, display all characters as '*'
+    ImGuiInputTextFlags_NoUndoRedo          = 1 << 16,  // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID().
+    ImGuiInputTextFlags_CharsScientific     = 1 << 17,  // Allow 0123456789.+-*/eE (Scientific notation input)
+    ImGuiInputTextFlags_CallbackResize      = 1 << 18,  // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this)
+    // [Internal]
+    ImGuiInputTextFlags_Multiline           = 1 << 20,  // For internal use by InputTextMultiline()
+    ImGuiInputTextFlags_NoMarkEdited        = 1 << 21   // For internal use by functions using InputText() before reformatting data
+};
+
+// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
+enum ImGuiTreeNodeFlags_
+{
+    ImGuiTreeNodeFlags_None                 = 0,
+    ImGuiTreeNodeFlags_Selected             = 1 << 0,   // Draw as selected
+    ImGuiTreeNodeFlags_Framed               = 1 << 1,   // Full colored frame (e.g. for CollapsingHeader)
+    ImGuiTreeNodeFlags_AllowItemOverlap     = 1 << 2,   // Hit testing to allow subsequent widgets to overlap this one
+    ImGuiTreeNodeFlags_NoTreePushOnOpen     = 1 << 3,   // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
+    ImGuiTreeNodeFlags_NoAutoOpenOnLog      = 1 << 4,   // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
+    ImGuiTreeNodeFlags_DefaultOpen          = 1 << 5,   // Default node to be open
+    ImGuiTreeNodeFlags_OpenOnDoubleClick    = 1 << 6,   // Need double-click to open node
+    ImGuiTreeNodeFlags_OpenOnArrow          = 1 << 7,   // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
+    ImGuiTreeNodeFlags_Leaf                 = 1 << 8,   // No collapsing, no arrow (use as a convenience for leaf nodes).
+    ImGuiTreeNodeFlags_Bullet               = 1 << 9,   // Display a bullet instead of arrow
+    ImGuiTreeNodeFlags_FramePadding         = 1 << 10,  // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
+    ImGuiTreeNodeFlags_SpanAvailWidth       = 1 << 11,  // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
+    ImGuiTreeNodeFlags_SpanFullWidth        = 1 << 12,  // Extend hit box to the left-most and right-most edges (bypass the indented area).
+    ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13,  // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
+    //ImGuiTreeNodeFlags_NoScrollOnOpen     = 1 << 14,  // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
+    ImGuiTreeNodeFlags_CollapsingHeader     = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
+};
+
+// Flags for ImGui::Selectable()
+enum ImGuiSelectableFlags_
+{
+    ImGuiSelectableFlags_None               = 0,
+    ImGuiSelectableFlags_DontClosePopups    = 1 << 0,   // Clicking this don't close parent popup window
+    ImGuiSelectableFlags_SpanAllColumns     = 1 << 1,   // Selectable frame can span all columns (text will still fit in current column)
+    ImGuiSelectableFlags_AllowDoubleClick   = 1 << 2,   // Generate press events on double clicks too
+    ImGuiSelectableFlags_Disabled           = 1 << 3,   // Cannot be selected, display grayed out text
+    ImGuiSelectableFlags_AllowItemOverlap   = 1 << 4    // (WIP) Hit testing to allow subsequent widgets to overlap this one
+};
+
+// Flags for ImGui::BeginCombo()
+enum ImGuiComboFlags_
+{
+    ImGuiComboFlags_None                    = 0,
+    ImGuiComboFlags_PopupAlignLeft          = 1 << 0,   // Align the popup toward the left by default
+    ImGuiComboFlags_HeightSmall             = 1 << 1,   // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
+    ImGuiComboFlags_HeightRegular           = 1 << 2,   // Max ~8 items visible (default)
+    ImGuiComboFlags_HeightLarge             = 1 << 3,   // Max ~20 items visible
+    ImGuiComboFlags_HeightLargest           = 1 << 4,   // As many fitting items as possible
+    ImGuiComboFlags_NoArrowButton           = 1 << 5,   // Display on the preview box without the square arrow button
+    ImGuiComboFlags_NoPreview               = 1 << 6,   // Display only a square arrow button
+    ImGuiComboFlags_HeightMask_             = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
+};
+
+// Flags for ImGui::BeginTabBar()
+enum ImGuiTabBarFlags_
+{
+    ImGuiTabBarFlags_None                           = 0,
+    ImGuiTabBarFlags_Reorderable                    = 1 << 0,   // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
+    ImGuiTabBarFlags_AutoSelectNewTabs              = 1 << 1,   // Automatically select new tabs when they appear
+    ImGuiTabBarFlags_TabListPopupButton             = 1 << 2,   // Disable buttons to open the tab list popup
+    ImGuiTabBarFlags_NoCloseWithMiddleMouseButton   = 1 << 3,   // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+    ImGuiTabBarFlags_NoTabListScrollingButtons      = 1 << 4,   // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll)
+    ImGuiTabBarFlags_NoTooltip                      = 1 << 5,   // Disable tooltips when hovering a tab
+    ImGuiTabBarFlags_FittingPolicyResizeDown        = 1 << 6,   // Resize tabs when they don't fit
+    ImGuiTabBarFlags_FittingPolicyScroll            = 1 << 7,   // Add scroll buttons when tabs don't fit
+    ImGuiTabBarFlags_FittingPolicyMask_             = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
+    ImGuiTabBarFlags_FittingPolicyDefault_          = ImGuiTabBarFlags_FittingPolicyResizeDown
+};
+
+// Flags for ImGui::BeginTabItem()
+enum ImGuiTabItemFlags_
+{
+    ImGuiTabItemFlags_None                          = 0,
+    ImGuiTabItemFlags_UnsavedDocument               = 1 << 0,   // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. Also: tab is selected on closure and closure is deferred by one frame to allow code to undo it without flicker.
+    ImGuiTabItemFlags_SetSelected                   = 1 << 1,   // Trigger flag to programmatically make the tab selected when calling BeginTabItem()
+    ImGuiTabItemFlags_NoCloseWithMiddleMouseButton  = 1 << 2,   // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+    ImGuiTabItemFlags_NoPushId                      = 1 << 3    // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem()
+};
+
+// Flags for ImGui::BeginTable()
+// - Columns can either varying resizing policy: "Fixed", "Stretch" or "AlwaysAutoResize". Toggling ScrollX needs to alter default sizing policy.
+// - Sizing policy have many subtle side effects which may be hard to fully comprehend at first.. They'll eventually make sense.
+//   - with SizingPolicyFixedX (default is ScrollX is on):     Columns can be enlarged as needed. Enable scrollbar if ScrollX is enabled, otherwise extend parent window's contents rect. Only Fixed columns allowed. Weighted columns will calculate their width assuming no scrolling.
+//   - with SizingPolicyStretchX (default is ScrollX is off):  Fit all columns within available table width (so it doesn't make sense to use ScrollX with Stretch columns!). Fixed and Weighted columns allowed.
+enum ImGuiTableFlags_
+{
+    // Features
+    ImGuiTableFlags_None                            = 0,
+    ImGuiTableFlags_Resizable                       = 1 << 0,   // Allow resizing columns.
+    ImGuiTableFlags_Reorderable                     = 1 << 1,   // Allow reordering columns (need calling TableSetupColumn() + TableAutoHeaders() or TableHeaders() to display headers)
+    ImGuiTableFlags_Hideable                        = 1 << 2,   // Allow hiding columns (with right-click on header) (FIXME-TABLE: allow without headers).
+    ImGuiTableFlags_Sortable                        = 1 << 3,   // Allow sorting on one column (sort_specs_count will always be == 1). Call TableGetSortSpecs() to obtain sort specs.
+    ImGuiTableFlags_MultiSortable                   = 1 << 4,   // Allow sorting on multiple columns by holding Shift (sort_specs_count may be > 1). Call TableGetSortSpecs() to obtain sort specs.
+    ImGuiTableFlags_NoSavedSettings                 = 1 << 5,   // Disable persisting columns order, width and sort settings in the .ini file.
+    // Decoration
+    ImGuiTableFlags_RowBg                           = 1 << 6,   // Use ImGuiCol_TableRowBg and ImGuiCol_TableRowBgAlt colors behind each rows.
+    ImGuiTableFlags_BordersHInner                   = 1 << 7,   // Draw horizontal borders between rows.
+    ImGuiTableFlags_BordersHOuter                   = 1 << 8,   // Draw horizontal borders at the top and bottom.
+    ImGuiTableFlags_BordersVInner                   = 1 << 9,   // Draw vertical borders between columns.
+    ImGuiTableFlags_BordersVOuter                   = 1 << 10,  // Draw vertical borders on the left and right sides.
+    ImGuiTableFlags_BordersH                        = ImGuiTableFlags_BordersHInner | ImGuiTableFlags_BordersHOuter, // Draw horizontal borders.
+    ImGuiTableFlags_BordersV                        = ImGuiTableFlags_BordersVInner | ImGuiTableFlags_BordersVOuter, // Draw vertical borders.
+    ImGuiTableFlags_BordersInner                    = ImGuiTableFlags_BordersVInner | ImGuiTableFlags_BordersHInner, // Draw inner borders.
+    ImGuiTableFlags_BordersOuter                    = ImGuiTableFlags_BordersVOuter | ImGuiTableFlags_BordersHOuter, // Draw outer borders.
+    ImGuiTableFlags_Borders                         = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,   // Draw all borders.
+    ImGuiTableFlags_BordersVFullHeight              = 1 << 11,  // Borders covers all rows even when Headers are being used. Allow resizing from any rows.
+    // Padding, Sizing
+    ImGuiTableFlags_NoClipX                         = 1 << 12,  // Disable pushing clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow)
+    ImGuiTableFlags_SizingPolicyFixedX              = 1 << 13,  // Default if ScrollX is on. Columns will default to use WidthFixed or WidthAlwaysAutoResize policy. Read description above for more details.
+    ImGuiTableFlags_SizingPolicyStretchX            = 1 << 14,  // Default if ScrollX is off. Columns will default to use WidthStretch policy. Read description above for more details.
+    ImGuiTableFlags_NoHeadersWidth                  = 1 << 15,  // Disable header width contribution to automatic width calculation.
+    ImGuiTableFlags_NoHostExtendY                   = 1 << 16,  // (FIXME-TABLE: Reword as SizingPolicy?) Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible)
+    ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 17,  // (FIXME-TABLE) Disable code that keeps column always minimally visible when table width gets too small.
+    // Scrolling
+    ImGuiTableFlags_ScrollX                         = 1 << 18,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Because this create a child window, ScrollY is currently generally recommended when using ScrollX.
+    ImGuiTableFlags_ScrollY                         = 1 << 19,  // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
+    ImGuiTableFlags_Scroll                          = ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY,
+    ImGuiTableFlags_ScrollFreezeTopRow              = 1 << 20,  // We can lock 1 to 3 rows (starting from the top). Use with ScrollY enabled.
+    ImGuiTableFlags_ScrollFreeze2Rows               = 2 << 20,
+    ImGuiTableFlags_ScrollFreeze3Rows               = 3 << 20,
+    ImGuiTableFlags_ScrollFreezeLeftColumn          = 1 << 22,  // We can lock 1 to 3 columns (starting from the left). Use with ScrollX enabled.
+    ImGuiTableFlags_ScrollFreeze2Columns            = 2 << 22,
+    ImGuiTableFlags_ScrollFreeze3Columns            = 3 << 22,
+
+    // [Internal] Combinations and masks
+    ImGuiTableFlags_SizingPolicyMaskX_              = ImGuiTableFlags_SizingPolicyStretchX | ImGuiTableFlags_SizingPolicyFixedX,
+    ImGuiTableFlags_ScrollFreezeRowsShift_          = 20,
+    ImGuiTableFlags_ScrollFreezeColumnsShift_       = 22,
+    ImGuiTableFlags_ScrollFreezeRowsMask_           = 0x03 << ImGuiTableFlags_ScrollFreezeRowsShift_,
+    ImGuiTableFlags_ScrollFreezeColumnsMask_        = 0x03 << ImGuiTableFlags_ScrollFreezeColumnsShift_
+};
+
+// Flags for ImGui::TableSetupColumn()
+// FIXME-TABLE: Rename to ImGuiColumns_*, stick old columns api flags in there under an obsolete api block
+enum ImGuiTableColumnFlags_
+{
+    ImGuiTableColumnFlags_None                      = 0,
+    ImGuiTableColumnFlags_DefaultHide               = 1 << 0,   // Default as a hidden column.
+    ImGuiTableColumnFlags_DefaultSort               = 1 << 1,   // Default as a sorting column.
+    ImGuiTableColumnFlags_WidthFixed                = 1 << 2,   // Column will keep a fixed size, preferable with horizontal scrolling enabled (default if table sizing policy is SizingPolicyFixedX and table is resizable).
+    ImGuiTableColumnFlags_WidthStretch              = 1 << 3,   // Column will stretch, preferable with horizontal scrolling disabled (default if table sizing policy is SizingPolicyStretchX).
+    ImGuiTableColumnFlags_WidthAlwaysAutoResize     = 1 << 4,   // Column will keep resizing based on submitted contents (with a one frame delay) == Fixed with auto resize (default if table sizing policy is SizingPolicyFixedX and table is not resizable).
+    ImGuiTableColumnFlags_NoResize                  = 1 << 5,   // Disable manual resizing.
+    ImGuiTableColumnFlags_NoClipX                   = 1 << 6,   // Disable clipping for this column (all NoClipX columns will render in a same draw command).
+    ImGuiTableColumnFlags_NoSort                    = 1 << 7,   // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
+    ImGuiTableColumnFlags_NoSortAscending           = 1 << 8,   // Disable ability to sort in the ascending direction.
+    ImGuiTableColumnFlags_NoSortDescending          = 1 << 9,   // Disable ability to sort in the descending direction.
+    ImGuiTableColumnFlags_NoHide                    = 1 << 10,  // Disable hiding this column.
+    ImGuiTableColumnFlags_NoHeaderWidth             = 1 << 11,  // Header width don't contribute to automatic column width.
+    ImGuiTableColumnFlags_PreferSortAscending       = 1 << 12,  // Make the initial sort direction Ascending when first sorting on this column (default).
+    ImGuiTableColumnFlags_PreferSortDescending      = 1 << 13,  // Make the initial sort direction Descending when first sorting on this column.
+    ImGuiTableColumnFlags_IndentEnable              = 1 << 14,  // Use current Indent value when entering cell (default for 1st column).
+    ImGuiTableColumnFlags_IndentDisable             = 1 << 15,  // Ignore current Indent value when entering cell (default for columns after the 1st one). Indentation changes _within_ the cell will still be honored.
+    ImGuiTableColumnFlags_NoReorder                 = 1 << 16,  // Disable reordering this column, this will also prevent other columns from crossing over this column.
+
+    // [Internal] Combinations and masks
+    ImGuiTableColumnFlags_WidthMask_                = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthAlwaysAutoResize,
+    ImGuiTableColumnFlags_IndentMask_               = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable,
+    ImGuiTableColumnFlags_NoDirectResize_           = 1 << 20   // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge)
+};
+
+// Flags for ImGui::TableNextRow()
+enum ImGuiTableRowFlags_
+{
+    ImGuiTableRowFlags_None                         = 0,
+    ImGuiTableRowFlags_Headers                      = 1 << 0    // Identify header row (set default background color + width of its contents accounted different for auto column width)
+};
+
+// Flags for ImGui::IsWindowFocused()
+enum ImGuiFocusedFlags_
+{
+    ImGuiFocusedFlags_None                          = 0,
+    ImGuiFocusedFlags_ChildWindows                  = 1 << 0,   // IsWindowFocused(): Return true if any children of the window is focused
+    ImGuiFocusedFlags_RootWindow                    = 1 << 1,   // IsWindowFocused(): Test from root window (top most parent of the current hierarchy)
+    ImGuiFocusedFlags_AnyWindow                     = 1 << 2,   // IsWindowFocused(): Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use ImGui::GetIO().WantCaptureMouse instead.
+    ImGuiFocusedFlags_RootAndChildWindows           = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows
+};
+
+// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
+// Note: if you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that. Please read the FAQ!
+// Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls.
+enum ImGuiHoveredFlags_
+{
+    ImGuiHoveredFlags_None                          = 0,        // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
+    ImGuiHoveredFlags_ChildWindows                  = 1 << 0,   // IsWindowHovered() only: Return true if any children of the window is hovered
+    ImGuiHoveredFlags_RootWindow                    = 1 << 1,   // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy)
+    ImGuiHoveredFlags_AnyWindow                     = 1 << 2,   // IsWindowHovered() only: Return true if any window is hovered
+    ImGuiHoveredFlags_AllowWhenBlockedByPopup       = 1 << 3,   // Return true even if a popup window is normally blocking access to this item/window
+    //ImGuiHoveredFlags_AllowWhenBlockedByModal     = 1 << 4,   // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
+    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem  = 1 << 5,   // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
+    ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 6,   // Return true even if the position is obstructed or overlapped by another window
+    ImGuiHoveredFlags_AllowWhenDisabled             = 1 << 7,   // Return true even if the item is disabled
+    ImGuiHoveredFlags_RectOnly                      = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
+    ImGuiHoveredFlags_RootAndChildWindows           = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
+};
+
+// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
+enum ImGuiDragDropFlags_
+{
+    ImGuiDragDropFlags_None                         = 0,
+    // BeginDragDropSource() flags
+    ImGuiDragDropFlags_SourceNoPreviewTooltip       = 1 << 0,   // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior.
+    ImGuiDragDropFlags_SourceNoDisableHover         = 1 << 1,   // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
+    ImGuiDragDropFlags_SourceNoHoldToOpenOthers     = 1 << 2,   // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item.
+    ImGuiDragDropFlags_SourceAllowNullID            = 1 << 3,   // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit.
+    ImGuiDragDropFlags_SourceExtern                 = 1 << 4,   // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
+    ImGuiDragDropFlags_SourceAutoExpirePayload      = 1 << 5,   // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged)
+    // AcceptDragDropPayload() flags
+    ImGuiDragDropFlags_AcceptBeforeDelivery         = 1 << 10,  // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered.
+    ImGuiDragDropFlags_AcceptNoDrawDefaultRect      = 1 << 11,  // Do not draw the default highlight rectangle when hovering over target.
+    ImGuiDragDropFlags_AcceptNoPreviewTooltip       = 1 << 12,  // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site.
+    ImGuiDragDropFlags_AcceptPeekOnly               = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect  // For peeking ahead and inspecting the payload before delivery.
+};
+
+// Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui.
+#define IMGUI_PAYLOAD_TYPE_COLOR_3F     "_COL3F"    // float[3]: Standard type for colors, without alpha. User code may use this type.
+#define IMGUI_PAYLOAD_TYPE_COLOR_4F     "_COL4F"    // float[4]: Standard type for colors. User code may use this type.
+
+// A primary data type
+enum ImGuiDataType_
+{
+    ImGuiDataType_S8,       // signed char / char (with sensible compilers)
+    ImGuiDataType_U8,       // unsigned char
+    ImGuiDataType_S16,      // short
+    ImGuiDataType_U16,      // unsigned short
+    ImGuiDataType_S32,      // int
+    ImGuiDataType_U32,      // unsigned int
+    ImGuiDataType_S64,      // long long / __int64
+    ImGuiDataType_U64,      // unsigned long long / unsigned __int64
+    ImGuiDataType_Float,    // float
+    ImGuiDataType_Double,   // double
+    ImGuiDataType_COUNT
+};
+
+// A cardinal direction
+enum ImGuiDir_
+{
+    ImGuiDir_None    = -1,
+    ImGuiDir_Left    = 0,
+    ImGuiDir_Right   = 1,
+    ImGuiDir_Up      = 2,
+    ImGuiDir_Down    = 3,
+    ImGuiDir_COUNT
+};
+
+// A sorting direction
+enum ImGuiSortDirection_
+{
+    ImGuiSortDirection_None         = 0,
+    ImGuiSortDirection_Ascending    = 1,    // Ascending = 0->9, A->Z etc.
+    ImGuiSortDirection_Descending   = 2     // Descending = 9->0, Z->A etc.
+};
+
+// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
+enum ImGuiKey_
+{
+    ImGuiKey_Tab,
+    ImGuiKey_LeftArrow,
+    ImGuiKey_RightArrow,
+    ImGuiKey_UpArrow,
+    ImGuiKey_DownArrow,
+    ImGuiKey_PageUp,
+    ImGuiKey_PageDown,
+    ImGuiKey_Home,
+    ImGuiKey_End,
+    ImGuiKey_Insert,
+    ImGuiKey_Delete,
+    ImGuiKey_Backspace,
+    ImGuiKey_Space,
+    ImGuiKey_Enter,
+    ImGuiKey_Escape,
+    ImGuiKey_KeyPadEnter,
+    ImGuiKey_A,                 // for text edit CTRL+A: select all
+    ImGuiKey_C,                 // for text edit CTRL+C: copy
+    ImGuiKey_V,                 // for text edit CTRL+V: paste
+    ImGuiKey_X,                 // for text edit CTRL+X: cut
+    ImGuiKey_Y,                 // for text edit CTRL+Y: redo
+    ImGuiKey_Z,                 // for text edit CTRL+Z: undo
+    ImGuiKey_COUNT
+};
+
+// To test io.KeyMods (which is a combination of individual fields io.KeyCtrl, io.KeyShift, io.KeyAlt set by user/back-end)
+enum ImGuiKeyModFlags_
+{
+    ImGuiKeyModFlags_None       = 0,
+    ImGuiKeyModFlags_Ctrl       = 1 << 0,
+    ImGuiKeyModFlags_Shift      = 1 << 1,
+    ImGuiKeyModFlags_Alt        = 1 << 2,
+    ImGuiKeyModFlags_Super      = 1 << 3
+};
+
+// Gamepad/Keyboard directional navigation
+// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
+// Gamepad:  Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Back-end: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame().
+// Read instructions in imgui.cpp for more details. Download PNG/PSD at http://goo.gl/9LgVZW.
+enum ImGuiNavInput_
+{
+    // Gamepad Mapping
+    ImGuiNavInput_Activate,      // activate / open / toggle / tweak value       // e.g. Cross  (PS4), A (Xbox), A (Switch), Space (Keyboard)
+    ImGuiNavInput_Cancel,        // cancel / close / exit                        // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard)
+    ImGuiNavInput_Input,         // text input / on-screen keyboard              // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
+    ImGuiNavInput_Menu,          // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
+    ImGuiNavInput_DpadLeft,      // move / tweak / resize window (w/ PadMenu)    // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
+    ImGuiNavInput_DpadRight,     //
+    ImGuiNavInput_DpadUp,        //
+    ImGuiNavInput_DpadDown,      //
+    ImGuiNavInput_LStickLeft,    // scroll / move window (w/ PadMenu)            // e.g. Left Analog Stick Left/Right/Up/Down
+    ImGuiNavInput_LStickRight,   //
+    ImGuiNavInput_LStickUp,      //
+    ImGuiNavInput_LStickDown,    //
+    ImGuiNavInput_FocusPrev,     // next window (w/ PadMenu)                     // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
+    ImGuiNavInput_FocusNext,     // prev window (w/ PadMenu)                     // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
+    ImGuiNavInput_TweakSlow,     // slower tweaks                                // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
+    ImGuiNavInput_TweakFast,     // faster tweaks                                // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
+
+    // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them.
+    // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[].
+    ImGuiNavInput_KeyMenu_,      // toggle menu                                  // = io.KeyAlt
+    ImGuiNavInput_KeyLeft_,      // move left                                    // = Arrow keys
+    ImGuiNavInput_KeyRight_,     // move right
+    ImGuiNavInput_KeyUp_,        // move up
+    ImGuiNavInput_KeyDown_,      // move down
+    ImGuiNavInput_COUNT,
+    ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyMenu_
+};
+
+// Configuration flags stored in io.ConfigFlags. Set by user/application.
+enum ImGuiConfigFlags_
+{
+    ImGuiConfigFlags_None                   = 0,
+    ImGuiConfigFlags_NavEnableKeyboard      = 1 << 0,   // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[].
+    ImGuiConfigFlags_NavEnableGamepad       = 1 << 1,   // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad.
+    ImGuiConfigFlags_NavEnableSetMousePos   = 1 << 2,   // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth.
+    ImGuiConfigFlags_NavNoCaptureKeyboard   = 1 << 3,   // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set.
+    ImGuiConfigFlags_NoMouse                = 1 << 4,   // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the back-end.
+    ImGuiConfigFlags_NoMouseCursorChange    = 1 << 5,   // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead.
+
+    // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui)
+    ImGuiConfigFlags_IsSRGB                 = 1 << 20,  // Application is SRGB-aware.
+    ImGuiConfigFlags_IsTouchScreen          = 1 << 21   // Application is using a touch screen instead of a mouse.
+};
+
+// Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end.
+enum ImGuiBackendFlags_
+{
+    ImGuiBackendFlags_None                  = 0,
+    ImGuiBackendFlags_HasGamepad            = 1 << 0,   // Back-end Platform supports gamepad and currently has one connected.
+    ImGuiBackendFlags_HasMouseCursors       = 1 << 1,   // Back-end Platform supports honoring GetMouseCursor() value to change the OS cursor shape.
+    ImGuiBackendFlags_HasSetMousePos        = 1 << 2,   // Back-end Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
+    ImGuiBackendFlags_RendererHasVtxOffset  = 1 << 3    // Back-end Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices.
+};
+
+// Enumeration for PushStyleColor() / PopStyleColor()
+enum ImGuiCol_
+{
+    ImGuiCol_Text,
+    ImGuiCol_TextDisabled,
+    ImGuiCol_WindowBg,              // Background of normal windows
+    ImGuiCol_ChildBg,               // Background of child windows
+    ImGuiCol_PopupBg,               // Background of popups, menus, tooltips windows
+    ImGuiCol_Border,
+    ImGuiCol_BorderShadow,
+    ImGuiCol_FrameBg,               // Background of checkbox, radio button, plot, slider, text input
+    ImGuiCol_FrameBgHovered,
+    ImGuiCol_FrameBgActive,
+    ImGuiCol_TitleBg,
+    ImGuiCol_TitleBgActive,
+    ImGuiCol_TitleBgCollapsed,
+    ImGuiCol_MenuBarBg,
+    ImGuiCol_ScrollbarBg,
+    ImGuiCol_ScrollbarGrab,
+    ImGuiCol_ScrollbarGrabHovered,
+    ImGuiCol_ScrollbarGrabActive,
+    ImGuiCol_CheckMark,
+    ImGuiCol_SliderGrab,
+    ImGuiCol_SliderGrabActive,
+    ImGuiCol_Button,
+    ImGuiCol_ButtonHovered,
+    ImGuiCol_ButtonActive,
+    ImGuiCol_Header,                // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem
+    ImGuiCol_HeaderHovered,
+    ImGuiCol_HeaderActive,
+    ImGuiCol_Separator,
+    ImGuiCol_SeparatorHovered,
+    ImGuiCol_SeparatorActive,
+    ImGuiCol_ResizeGrip,
+    ImGuiCol_ResizeGripHovered,
+    ImGuiCol_ResizeGripActive,
+    ImGuiCol_Tab,
+    ImGuiCol_TabHovered,
+    ImGuiCol_TabActive,
+    ImGuiCol_TabUnfocused,
+    ImGuiCol_TabUnfocusedActive,
+    ImGuiCol_PlotLines,
+    ImGuiCol_PlotLinesHovered,
+    ImGuiCol_PlotHistogram,
+    ImGuiCol_PlotHistogramHovered,
+    ImGuiCol_TableHeaderBg,         // Table header background
+    ImGuiCol_TableBorderStrong,     // Table outer and header borders (prefer using Alpha=1.0 here)
+    ImGuiCol_TableBorderLight,      // Table inner borders (prefer using Alpha=1.0 here)
+    ImGuiCol_TableRowBg,            // Table row background (even rows)
+    ImGuiCol_TableRowBgAlt,         // Table row background (odd rows)
+    ImGuiCol_TextSelectedBg,
+    ImGuiCol_DragDropTarget,
+    ImGuiCol_NavHighlight,          // Gamepad/keyboard: current highlighted item
+    ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB
+    ImGuiCol_NavWindowingDimBg,     // Darken/colorize entire screen behind the CTRL+TAB window list, when active
+    ImGuiCol_ModalWindowDimBg,      // Darken/colorize entire screen behind a modal window, when one is active
+    ImGuiCol_COUNT
+
+    // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    , ImGuiCol_ModalWindowDarkening = ImGuiCol_ModalWindowDimBg                      // [renamed in 1.63]
+    //, ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered// [unused since 1.60+] the close button now uses regular button colors.
+#endif
+};
+
+// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
+// - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. 
+//   During initialization or between frames, feel free to just poke into ImGuiStyle directly.
+// - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description.
+//   In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+// - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
+enum ImGuiStyleVar_
+{
+    // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
+    ImGuiStyleVar_Alpha,               // float     Alpha
+    ImGuiStyleVar_WindowPadding,       // ImVec2    WindowPadding
+    ImGuiStyleVar_WindowRounding,      // float     WindowRounding
+    ImGuiStyleVar_WindowBorderSize,    // float     WindowBorderSize
+    ImGuiStyleVar_WindowMinSize,       // ImVec2    WindowMinSize
+    ImGuiStyleVar_WindowTitleAlign,    // ImVec2    WindowTitleAlign
+    ImGuiStyleVar_ChildRounding,       // float     ChildRounding
+    ImGuiStyleVar_ChildBorderSize,     // float     ChildBorderSize
+    ImGuiStyleVar_PopupRounding,       // float     PopupRounding
+    ImGuiStyleVar_PopupBorderSize,     // float     PopupBorderSize
+    ImGuiStyleVar_FramePadding,        // ImVec2    FramePadding
+    ImGuiStyleVar_FrameRounding,       // float     FrameRounding
+    ImGuiStyleVar_FrameBorderSize,     // float     FrameBorderSize
+    ImGuiStyleVar_ItemSpacing,         // ImVec2    ItemSpacing
+    ImGuiStyleVar_ItemInnerSpacing,    // ImVec2    ItemInnerSpacing
+    ImGuiStyleVar_IndentSpacing,       // float     IndentSpacing
+    ImGuiStyleVar_CellPadding,         // ImVec2    CellPadding
+    ImGuiStyleVar_ScrollbarSize,       // float     ScrollbarSize
+    ImGuiStyleVar_ScrollbarRounding,   // float     ScrollbarRounding
+    ImGuiStyleVar_GrabMinSize,         // float     GrabMinSize
+    ImGuiStyleVar_GrabRounding,        // float     GrabRounding
+    ImGuiStyleVar_TabRounding,         // float     TabRounding
+    ImGuiStyleVar_ButtonTextAlign,     // ImVec2    ButtonTextAlign
+    ImGuiStyleVar_SelectableTextAlign, // ImVec2    SelectableTextAlign
+    ImGuiStyleVar_COUNT
+
+    // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    , ImGuiStyleVar_Count_ = ImGuiStyleVar_COUNT                    // [renamed in 1.60]
+#endif
+};
+
+// Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
+enum ImGuiColorEditFlags_
+{
+    ImGuiColorEditFlags_None            = 0,
+    ImGuiColorEditFlags_NoAlpha         = 1 << 1,   //              // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
+    ImGuiColorEditFlags_NoPicker        = 1 << 2,   //              // ColorEdit: disable picker when clicking on colored square.
+    ImGuiColorEditFlags_NoOptions       = 1 << 3,   //              // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
+    ImGuiColorEditFlags_NoSmallPreview  = 1 << 4,   //              // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
+    ImGuiColorEditFlags_NoInputs        = 1 << 5,   //              // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square).
+    ImGuiColorEditFlags_NoTooltip       = 1 << 6,   //              // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
+    ImGuiColorEditFlags_NoLabel         = 1 << 7,   //              // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
+    ImGuiColorEditFlags_NoSidePreview   = 1 << 8,   //              // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
+    ImGuiColorEditFlags_NoDragDrop      = 1 << 9,   //              // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
+    ImGuiColorEditFlags_NoBorder        = 1 << 10,  //              // ColorButton: disable border (which is enforced by default)
+
+    // User Options (right-click on widget to change some of them).
+    ImGuiColorEditFlags_AlphaBar        = 1 << 16,  //              // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
+    ImGuiColorEditFlags_AlphaPreview    = 1 << 17,  //              // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
+    ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18,  //              // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
+    ImGuiColorEditFlags_HDR             = 1 << 19,  //              // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
+    ImGuiColorEditFlags_DisplayRGB      = 1 << 20,  // [Display]    // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex.
+    ImGuiColorEditFlags_DisplayHSV      = 1 << 21,  // [Display]    // "
+    ImGuiColorEditFlags_DisplayHex      = 1 << 22,  // [Display]    // "
+    ImGuiColorEditFlags_Uint8           = 1 << 23,  // [DataType]   // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
+    ImGuiColorEditFlags_Float           = 1 << 24,  // [DataType]   // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
+    ImGuiColorEditFlags_PickerHueBar    = 1 << 25,  // [Picker]     // ColorPicker: bar for Hue, rectangle for Sat/Value.
+    ImGuiColorEditFlags_PickerHueWheel  = 1 << 26,  // [Picker]     // ColorPicker: wheel for Hue, triangle for Sat/Value.
+    ImGuiColorEditFlags_InputRGB        = 1 << 27,  // [Input]      // ColorEdit, ColorPicker: input and output data in RGB format.
+    ImGuiColorEditFlags_InputHSV        = 1 << 28,  // [Input]      // ColorEdit, ColorPicker: input and output data in HSV format.
+
+    // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to
+    // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup.
+    ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar,
+
+    // [Internal] Masks
+    ImGuiColorEditFlags__DisplayMask    = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex,
+    ImGuiColorEditFlags__DataTypeMask   = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
+    ImGuiColorEditFlags__PickerMask     = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
+    ImGuiColorEditFlags__InputMask      = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV
+
+    // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    , ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex  // [renamed in 1.69]
+#endif
+};
+
+// Identify a mouse button.
+// Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience.
+enum ImGuiMouseButton_
+{
+    ImGuiMouseButton_Left = 0,
+    ImGuiMouseButton_Right = 1,
+    ImGuiMouseButton_Middle = 2,
+    ImGuiMouseButton_COUNT = 5
+};
+
+// Enumeration for GetMouseCursor()
+// User code may request binding to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here
+enum ImGuiMouseCursor_
+{
+    ImGuiMouseCursor_None = -1,
+    ImGuiMouseCursor_Arrow = 0,
+    ImGuiMouseCursor_TextInput,         // When hovering over InputText, etc.
+    ImGuiMouseCursor_ResizeAll,         // (Unused by Dear ImGui functions)
+    ImGuiMouseCursor_ResizeNS,          // When hovering over an horizontal border
+    ImGuiMouseCursor_ResizeEW,          // When hovering over a vertical border or a column
+    ImGuiMouseCursor_ResizeNESW,        // When hovering over the bottom-left corner of a window
+    ImGuiMouseCursor_ResizeNWSE,        // When hovering over the bottom-right corner of a window
+    ImGuiMouseCursor_Hand,              // (Unused by Dear ImGui functions. Use for e.g. hyperlinks)
+    ImGuiMouseCursor_NotAllowed,        // When hovering something with disallowed interaction. Usually a crossed circle.
+    ImGuiMouseCursor_COUNT
+
+    // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    , ImGuiMouseCursor_Count_ = ImGuiMouseCursor_COUNT      // [renamed in 1.60]
+#endif
+};
+
+// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
+// Represent a condition.
+// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
+enum ImGuiCond_
+{
+    ImGuiCond_Always        = 1 << 0,   // Set the variable
+    ImGuiCond_Once          = 1 << 1,   // Set the variable once per runtime session (only the first call with succeed)
+    ImGuiCond_FirstUseEver  = 1 << 2,   // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
+    ImGuiCond_Appearing     = 1 << 3    // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
+};
+
+//-----------------------------------------------------------------------------
+// Helpers: Memory allocations macros
+// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
+// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
+// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
+//-----------------------------------------------------------------------------
+
+struct ImNewDummy {};
+inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
+inline void  operator delete(void*, ImNewDummy, void*)   {} // This is only required so we can use the symmetrical new()
+#define IM_ALLOC(_SIZE)                     ImGui::MemAlloc(_SIZE)
+#define IM_FREE(_PTR)                       ImGui::MemFree(_PTR)
+#define IM_PLACEMENT_NEW(_PTR)              new(ImNewDummy(), _PTR)
+#define IM_NEW(_TYPE)                       new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
+template<typename T> void IM_DELETE(T* p)   { if (p) { p->~T(); ImGui::MemFree(p); } }
+
+//-----------------------------------------------------------------------------
+// Helper: ImVector<>
+// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug).
+//-----------------------------------------------------------------------------
+// - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it.
+// - We use std-like naming convention here, which is a little unusual for this codebase.
+// - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs.
+// - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,
+//   Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset.
+//-----------------------------------------------------------------------------
+
+template<typename T>
+struct ImVector
+{
+    int                 Size;
+    int                 Capacity;
+    T*                  Data;
+
+    // Provide standard typedefs but we don't use them ourselves.
+    typedef T                   value_type;
+    typedef value_type*         iterator;
+    typedef const value_type*   const_iterator;
+
+    // Constructors, destructor
+    inline ImVector()                                       { Size = Capacity = 0; Data = NULL; }
+    inline ImVector(const ImVector<T>& src)                 { Size = Capacity = 0; Data = NULL; operator=(src); }
+    inline ImVector<T>& operator=(const ImVector<T>& src)   { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; }
+    inline ~ImVector()                                      { if (Data) IM_FREE(Data); }
+
+    inline bool         empty() const                       { return Size == 0; }
+    inline int          size() const                        { return Size; }
+    inline int          size_in_bytes() const               { return Size * (int)sizeof(T); }
+    inline int          capacity() const                    { return Capacity; }
+    inline T&           operator[](int i)                   { IM_ASSERT(i < Size); return Data[i]; }
+    inline const T&     operator[](int i) const             { IM_ASSERT(i < Size); return Data[i]; }
+
+    inline void         clear()                             { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } }
+    inline T*           begin()                             { return Data; }
+    inline const T*     begin() const                       { return Data; }
+    inline T*           end()                               { return Data + Size; }
+    inline const T*     end() const                         { return Data + Size; }
+    inline T&           front()                             { IM_ASSERT(Size > 0); return Data[0]; }
+    inline const T&     front() const                       { IM_ASSERT(Size > 0); return Data[0]; }
+    inline T&           back()                              { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+    inline const T&     back() const                        { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+    inline void         swap(ImVector<T>& rhs)              { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
+
+    inline int          _grow_capacity(int sz) const        { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
+    inline void         resize(int new_size)                { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
+    inline void         resize(int new_size, const T& v)    { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
+    inline void         shrink(int new_size)                { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation
+    inline void         reserve(int new_capacity)           { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; }
+
+    // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
+    inline void         push_back(const T& v)               { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
+    inline void         pop_back()                          { IM_ASSERT(Size > 0); Size--; }
+    inline void         push_front(const T& v)              { if (Size == 0) push_back(v); else insert(Data, v); }
+    inline T*           erase(const T* it)                  { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; }
+    inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; }
+    inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >= Data && it < Data+Size);  const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; }
+    inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
+    inline bool         contains(const T& v) const          { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
+    inline T*           find(const T& v)                    { T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+    inline const T*     find(const T& v) const              { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+    inline bool         find_erase(const T& v)              { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; }
+    inline bool         find_erase_unsorted(const T& v)     { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; }
+    inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; }
+};
+
+//-----------------------------------------------------------------------------
+// ImGuiStyle
+// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
+// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
+// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
+//-----------------------------------------------------------------------------
+
+struct ImGuiStyle
+{
+    float       Alpha;                      // Global alpha applies to everything in Dear ImGui.
+    ImVec2      WindowPadding;              // Padding within a window.
+    float       WindowRounding;             // Radius of window corners rounding. Set to 0.0f to have rectangular windows.
+    float       WindowBorderSize;           // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+    ImVec2      WindowMinSize;              // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
+    ImVec2      WindowTitleAlign;           // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
+    ImGuiDir    WindowMenuButtonPosition;   // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
+    float       ChildRounding;              // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
+    float       ChildBorderSize;            // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+    float       PopupRounding;              // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
+    float       PopupBorderSize;            // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+    ImVec2      FramePadding;               // Padding within a framed rectangle (used by most widgets).
+    float       FrameRounding;              // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
+    float       FrameBorderSize;            // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+    ImVec2      ItemSpacing;                // Horizontal and vertical spacing between widgets/lines.
+    ImVec2      ItemInnerSpacing;           // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
+    ImVec2      CellPadding;                // Padding within a table cell
+    ImVec2      TouchExtraPadding;          // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
+    float       IndentSpacing;              // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
+    float       ColumnsMinSpacing;          // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
+    float       ScrollbarSize;              // Width of the vertical scrollbar, Height of the horizontal scrollbar.
+    float       ScrollbarRounding;          // Radius of grab corners for scrollbar.
+    float       GrabMinSize;                // Minimum width/height of a grab box for slider/scrollbar.
+    float       GrabRounding;               // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
+    float       TabRounding;                // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+    float       TabBorderSize;              // Thickness of border around tabs.
+    ImGuiDir    ColorButtonPosition;        // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
+    ImVec2      ButtonTextAlign;            // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
+    ImVec2      SelectableTextAlign;        // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
+    ImVec2      DisplayWindowPadding;       // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows.
+    ImVec2      DisplaySafeAreaPadding;     // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
+    float       MouseCursorScale;           // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
+    bool        AntiAliasedLines;           // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU.
+    bool        AntiAliasedFill;            // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
+    float       CurveTessellationTol;       // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
+    float       CircleSegmentMaxError;      // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
+    ImVec4      Colors[ImGuiCol_COUNT];
+
+    IMGUI_API ImGuiStyle();
+    IMGUI_API void ScaleAllSizes(float scale_factor);
+};
+
+//-----------------------------------------------------------------------------
+// ImGuiIO
+// Communicate most settings and inputs/outputs to Dear ImGui using this structure.
+// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage.
+//-----------------------------------------------------------------------------
+
+struct ImGuiIO
+{
+    //------------------------------------------------------------------
+    // Configuration (fill once)                // Default value
+    //------------------------------------------------------------------
+
+    ImGuiConfigFlags   ConfigFlags;             // = 0              // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
+    ImGuiBackendFlags  BackendFlags;            // = 0              // See ImGuiBackendFlags_ enum. Set by back-end (imgui_impl_xxx files or custom back-end) to communicate features supported by the back-end.
+    ImVec2      DisplaySize;                    // <unset>          // Main display size, in pixels.
+    float       DeltaTime;                      // = 1.0f/60.0f     // Time elapsed since last frame, in seconds.
+    float       IniSavingRate;                  // = 5.0f           // Minimum time between saving positions/sizes to .ini file, in seconds.
+    const char* IniFilename;                    // = "imgui.ini"    // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory.
+    const char* LogFilename;                    // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
+    float       MouseDoubleClickTime;           // = 0.30f          // Time for a double-click, in seconds.
+    float       MouseDoubleClickMaxDist;        // = 6.0f           // Distance threshold to stay in to validate a double-click, in pixels.
+    float       MouseDragThreshold;             // = 6.0f           // Distance threshold before considering we are dragging.
+    int         KeyMap[ImGuiKey_COUNT];         // <unset>          // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
+    float       KeyRepeatDelay;                 // = 0.250f         // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
+    float       KeyRepeatRate;                  // = 0.050f         // When holding a key/button, rate at which it repeats, in seconds.
+    void*       UserData;                       // = NULL           // Store your own data for retrieval by callbacks.
+
+    ImFontAtlas*Fonts;                          // <auto>           // Font atlas: load, rasterize and pack one or more fonts into a single texture.
+    float       FontGlobalScale;                // = 1.0f           // Global scale all fonts
+    bool        FontAllowUserScaling;           // = false          // Allow user scaling text of individual window with CTRL+Wheel.
+    ImFont*     FontDefault;                    // = NULL           // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
+    ImVec2      DisplayFramebufferScale;        // = (1, 1)         // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
+
+    // Miscellaneous options
+    bool        MouseDrawCursor;                // = false          // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations.
+    bool        ConfigMacOSXBehaviors;          // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63)
+    bool        ConfigInputTextCursorBlink;     // = true           // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63)
+    bool        ConfigWindowsResizeFromEdges;   // = true           // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
+    bool        ConfigWindowsMoveFromTitleBarOnly; // = false       // [BETA] Set to true to only allow moving windows when clicked+dragged from the title bar. Windows without a title bar are not affected.
+    float       ConfigWindowsMemoryCompactTimer;// = 60.0f          // [BETA] Compact window memory usage when unused. Set to -1.0f to disable.
+
+    //------------------------------------------------------------------
+    // Platform Functions
+    // (the imgui_impl_xxxx back-end files are setting those up for you)
+    //------------------------------------------------------------------
+
+    // Optional: Platform/Renderer back-end name (informational only! will be displayed in About Window) + User data for back-end/wrappers to store their own stuff.
+    const char* BackendPlatformName;            // = NULL
+    const char* BackendRendererName;            // = NULL
+    void*       BackendPlatformUserData;        // = NULL           // User data for platform back-end
+    void*       BackendRendererUserData;        // = NULL           // User data for renderer back-end
+    void*       BackendLanguageUserData;        // = NULL           // User data for non C++ programming language back-end
+
+    // Optional: Access OS clipboard
+    // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
+    const char* (*GetClipboardTextFn)(void* user_data);
+    void        (*SetClipboardTextFn)(void* user_data, const char* text);
+    void*       ClipboardUserData;
+
+    // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
+    // (default to use native imm32 api on Windows)
+    void        (*ImeSetInputScreenPosFn)(int x, int y);
+    void*       ImeWindowHandle;                // = NULL           // (Windows) Set this to your HWND to get automatic IME cursor positioning.
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    // [OBSOLETE since 1.60+] Rendering function, will be automatically called in Render(). Please call your rendering function yourself now!
+    // You can obtain the ImDrawData* by calling ImGui::GetDrawData() after Render(). See example applications if you are unsure of how to implement this.
+    void        (*RenderDrawListsFn)(ImDrawData* data);
+#else
+    // This is only here to keep ImGuiIO the same size/layout, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h.
+    void*       RenderDrawListsFnUnused;
+#endif
+
+    //------------------------------------------------------------------
+    // Input - Fill before calling NewFrame()
+    //------------------------------------------------------------------
+
+    ImVec2      MousePos;                       // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.)
+    bool        MouseDown[5];                   // Mouse buttons: 0=left, 1=right, 2=middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
+    float       MouseWheel;                     // Mouse wheel Vertical: 1 unit scrolls about 5 lines text.
+    float       MouseWheelH;                    // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all back-ends.
+    bool        KeyCtrl;                        // Keyboard modifier pressed: Control
+    bool        KeyShift;                       // Keyboard modifier pressed: Shift
+    bool        KeyAlt;                         // Keyboard modifier pressed: Alt
+    bool        KeySuper;                       // Keyboard modifier pressed: Cmd/Super/Windows
+    bool        KeysDown[512];                  // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys).
+    float       NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame().
+
+    // Functions
+    IMGUI_API void  AddInputCharacter(unsigned int c);          // Queue new character input
+    IMGUI_API void  AddInputCharacterUTF16(ImWchar16 c);        // Queue new character input from an UTF-16 character, it can be a surrogate
+    IMGUI_API void  AddInputCharactersUTF8(const char* str);    // Queue new characters input from an UTF-8 string
+    IMGUI_API void  ClearInputCharacters();                     // Clear the text input buffer manually
+
+    //------------------------------------------------------------------
+    // Output - Retrieve after calling NewFrame()
+    //------------------------------------------------------------------
+
+    bool        WantCaptureMouse;               // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
+    bool        WantCaptureKeyboard;            // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
+    bool        WantTextInput;                  // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
+    bool        WantSetMousePos;                // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
+    bool        WantSaveIniSettings;            // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself.
+    bool        NavActive;                      // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
+    bool        NavVisible;                     // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
+    float       Framerate;                      // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
+    int         MetricsRenderVertices;          // Vertices output during last call to Render()
+    int         MetricsRenderIndices;           // Indices output during last call to Render() = number of triangles * 3
+    int         MetricsRenderWindows;           // Number of visible windows
+    int         MetricsActiveWindows;           // Number of active windows
+    int         MetricsActiveAllocations;       // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
+    ImVec2      MouseDelta;                     // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
+
+    //------------------------------------------------------------------
+    // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
+    //------------------------------------------------------------------
+
+    ImGuiKeyModFlags KeyMods;                   // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame()
+    ImVec2      MousePosPrev;                   // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
+    ImVec2      MouseClickedPos[5];             // Position at time of clicking
+    double      MouseClickedTime[5];            // Time of last click (used to figure out double-click)
+    bool        MouseClicked[5];                // Mouse button went from !Down to Down
+    bool        MouseDoubleClicked[5];          // Has mouse button been double-clicked?
+    bool        MouseReleased[5];               // Mouse button went from Down to !Down
+    bool        MouseDownOwned[5];              // Track if button was clicked inside a dear imgui window. We don't request mouse capture from the application if click started outside ImGui bounds.
+    bool        MouseDownWasDoubleClick[5];     // Track if button down was a double-click
+    float       MouseDownDuration[5];           // Duration the mouse button has been down (0.0f == just clicked)
+    float       MouseDownDurationPrev[5];       // Previous time the mouse button has been down
+    ImVec2      MouseDragMaxDistanceAbs[5];     // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
+    float       MouseDragMaxDistanceSqr[5];     // Squared maximum distance of how much mouse has traveled from the clicking point
+    float       KeysDownDuration[512];          // Duration the keyboard key has been down (0.0f == just pressed)
+    float       KeysDownDurationPrev[512];      // Previous duration the key has been down
+    float       NavInputsDownDuration[ImGuiNavInput_COUNT];
+    float       NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
+    ImWchar16   InputQueueSurrogate;            // For AddInputCharacterUTF16
+    ImVector<ImWchar> InputQueueCharacters;     // Queue of _characters_ input (obtained by platform back-end). Fill using AddInputCharacter() helper.
+
+    IMGUI_API   ImGuiIO();
+};
+
+//-----------------------------------------------------------------------------
+// Misc data structures
+//-----------------------------------------------------------------------------
+
+// Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used.
+// The callback function should return 0 by default.
+// Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details)
+// - ImGuiInputTextFlags_CallbackCompletion:  Callback on pressing TAB
+// - ImGuiInputTextFlags_CallbackHistory:     Callback on pressing Up/Down arrows
+// - ImGuiInputTextFlags_CallbackAlways:      Callback on each iteration
+// - ImGuiInputTextFlags_CallbackCharFilter:  Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
+// - ImGuiInputTextFlags_CallbackResize:      Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
+struct ImGuiInputTextCallbackData
+{
+    ImGuiInputTextFlags EventFlag;      // One ImGuiInputTextFlags_Callback*    // Read-only
+    ImGuiInputTextFlags Flags;          // What user passed to InputText()      // Read-only
+    void*               UserData;       // What user passed to InputText()      // Read-only
+
+    // Arguments for the different callback events
+    // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary.
+    // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state.
+    ImWchar             EventChar;      // Character input                      // Read-write   // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0;
+    ImGuiKey            EventKey;       // Key pressed (Up/Down/TAB)            // Read-only    // [Completion,History]
+    char*               Buf;            // Text buffer                          // Read-write   // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer!
+    int                 BufTextLen;     // Text length (in bytes)               // Read-write   // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length()
+    int                 BufSize;        // Buffer size (in bytes) = capacity+1  // Read-only    // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1
+    bool                BufDirty;       // Set if you modify Buf/BufTextLen!    // Write        // [Completion,History,Always]
+    int                 CursorPos;      //                                      // Read-write   // [Completion,History,Always]
+    int                 SelectionStart; //                                      // Read-write   // [Completion,History,Always] == to SelectionEnd when no selection)
+    int                 SelectionEnd;   //                                      // Read-write   // [Completion,History,Always]
+
+    // Helper functions for text manipulation.
+    // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
+    IMGUI_API ImGuiInputTextCallbackData();
+    IMGUI_API void      DeleteChars(int pos, int bytes_count);
+    IMGUI_API void      InsertChars(int pos, const char* text, const char* text_end = NULL);
+    bool                HasSelection() const { return SelectionStart != SelectionEnd; }
+};
+
+// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
+// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
+struct ImGuiSizeCallbackData
+{
+    void*   UserData;       // Read-only.   What user passed to SetNextWindowSizeConstraints()
+    ImVec2  Pos;            // Read-only.   Window position, for reference.
+    ImVec2  CurrentSize;    // Read-only.   Current window size.
+    ImVec2  DesiredSize;    // Read-write.  Desired size, based on user's mouse position. Write to this field to restrain resizing.
+};
+
+// Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload()
+struct ImGuiPayload
+{
+    // Members
+    void*           Data;               // Data (copied and owned by dear imgui)
+    int             DataSize;           // Data size
+
+    // [Internal]
+    ImGuiID         SourceId;           // Source item id
+    ImGuiID         SourceParentId;     // Source parent id (if available)
+    int             DataFrameCount;     // Data timestamp
+    char            DataType[32+1];     // Data type tag (short user-supplied string, 32 characters max)
+    bool            Preview;            // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
+    bool            Delivery;           // Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
+
+    ImGuiPayload()  { Clear(); }
+    void Clear()    { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; }
+    bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; }
+    bool IsPreview() const                  { return Preview; }
+    bool IsDelivery() const                 { return Delivery; }
+};
+
+// Sorting specification for one column of a table (sizeof == 8 bytes)
+struct ImGuiTableSortSpecsColumn
+{
+    ImGuiID                     ColumnUserID;       // User id of the column (if specified by a TableSetupColumn() call)
+    ImU8                        ColumnIndex;        // Index of the column
+    ImU8                        SortOrder;          // Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
+    ImGuiSortDirection          SortDirection : 8;  // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending (you can use this or SortSign, whichever is more convenient for your sort function)
+
+    ImGuiTableSortSpecsColumn() { ColumnUserID = 0; ColumnIndex = 0; SortOrder = 0; SortDirection = ImGuiSortDirection_Ascending; }
+};
+
+// Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
+// Obtained by calling TableGetSortSpecs()
+struct ImGuiTableSortSpecs
+{
+    const ImGuiTableSortSpecsColumn* Specs;         // Pointer to sort spec array.
+    int                         SpecsCount;         // Sort spec count. Most often 1 unless e.g. ImGuiTableFlags_MultiSortable is enabled.
+    bool                        SpecsChanged;       // Set to true by TableGetSortSpecs() call if the specs have changed since the previous call. Use this to sort again!
+    ImU64                       ColumnsMask;        // Set to the mask of column indexes included in the Specs array. e.g. (1 << N) when column N is sorted.
+
+    ImGuiTableSortSpecs()       { Specs = NULL; SpecsCount = 0; SpecsChanged = false; ColumnsMask = 0x00; }
+};
+
+//-----------------------------------------------------------------------------
+// Obsolete functions (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
+// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead.
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+namespace ImGui
+{
+    // OBSOLETED in 1.72 (from July 2019)
+    static inline void  TreeAdvanceToLabelPos()               { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); }
+    // OBSOLETED in 1.71 (from June 2019)
+    static inline void  SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); }
+    // OBSOLETED in 1.70 (from May 2019)
+    static inline float GetContentRegionAvailWidth()          { return GetContentRegionAvail().x; }
+    // OBSOLETED in 1.69 (from Mar 2019)
+    static inline ImDrawList* GetOverlayDrawList()            { return GetForegroundDrawList(); }
+    // OBSOLETED in 1.66 (from Sep 2018)
+    static inline void  SetScrollHere(float center_ratio=0.5f){ SetScrollHereY(center_ratio); }
+    // OBSOLETED in 1.63 (between Aug 2018 and Sept 2018)
+    static inline bool  IsItemDeactivatedAfterChange()        { return IsItemDeactivatedAfterEdit(); }
+    // OBSOLETED in 1.61 (between Apr 2018 and Aug 2018)
+    IMGUI_API bool      InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'!
+    IMGUI_API bool      InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool      InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags = 0);
+    IMGUI_API bool      InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags = 0);
+    // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018)
+    static inline bool  IsAnyWindowFocused()                  { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); }
+    static inline bool  IsAnyWindowHovered()                  { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
+    static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { IM_UNUSED(on_edge); IM_UNUSED(outward); IM_ASSERT(0); return pos; }
+}
+typedef ImGuiInputTextCallback      ImGuiTextEditCallback;    // OBSOLETED in 1.63 (from Aug 2018): made the names consistent
+typedef ImGuiInputTextCallbackData  ImGuiTextEditCallbackData;
+#endif
+
+//-----------------------------------------------------------------------------
+// Helpers
+//-----------------------------------------------------------------------------
+
+// Helper: Unicode defines
+#define IM_UNICODE_CODEPOINT_INVALID 0xFFFD     // Invalid Unicode code point (standard value).
+#ifdef IMGUI_USE_WCHAR32
+#define IM_UNICODE_CODEPOINT_MAX     0x10FFFF   // Maximum Unicode code point supported by this build.
+#else
+#define IM_UNICODE_CODEPOINT_MAX     0xFFFF     // Maximum Unicode code point supported by this build.
+#endif
+
+// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
+// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
+struct ImGuiOnceUponAFrame
+{
+    ImGuiOnceUponAFrame() { RefFrame = -1; }
+    mutable int RefFrame;
+    operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
+};
+
+// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
+struct ImGuiTextFilter
+{
+    IMGUI_API           ImGuiTextFilter(const char* default_filter = "");
+    IMGUI_API bool      Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f);  // Helper calling InputText+Build
+    IMGUI_API bool      PassFilter(const char* text, const char* text_end = NULL) const;
+    IMGUI_API void      Build();
+    void                Clear()          { InputBuf[0] = 0; Build(); }
+    bool                IsActive() const { return !Filters.empty(); }
+
+    // [Internal]
+    struct ImGuiTextRange
+    {
+        const char*     b;
+        const char*     e;
+
+        ImGuiTextRange()                                { b = e = NULL; }
+        ImGuiTextRange(const char* _b, const char* _e)  { b = _b; e = _e; }
+        bool            empty() const                   { return b == e; }
+        IMGUI_API void  split(char separator, ImVector<ImGuiTextRange>* out) const;
+    };
+    char                    InputBuf[256];
+    ImVector<ImGuiTextRange>Filters;
+    int                     CountGrep;
+};
+
+// Helper: Growable text buffer for logging/accumulating text
+// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder')
+struct ImGuiTextBuffer
+{
+    ImVector<char>      Buf;
+    IMGUI_API static char EmptyString[1];
+
+    ImGuiTextBuffer()   { }
+    inline char         operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
+    const char*         begin() const           { return Buf.Data ? &Buf.front() : EmptyString; }
+    const char*         end() const             { return Buf.Data ? &Buf.back() : EmptyString; }   // Buf is zero-terminated, so end() will point on the zero-terminator
+    int                 size() const            { return Buf.Size ? Buf.Size - 1 : 0; }
+    bool                empty() const           { return Buf.Size <= 1; }
+    void                clear()                 { Buf.clear(); }
+    void                reserve(int capacity)   { Buf.reserve(capacity); }
+    const char*         c_str() const           { return Buf.Data ? Buf.Data : EmptyString; }
+    IMGUI_API void      append(const char* str, const char* str_end = NULL);
+    IMGUI_API void      appendf(const char* fmt, ...) IM_FMTARGS(2);
+    IMGUI_API void      appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
+};
+
+// Helper: Key->Value storage
+// Typically you don't have to worry about this since a storage is held within each Window.
+// We use it to e.g. store collapse state for a tree (Int 0/1)
+// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
+// You can use it as custom user storage for temporary values. Declare your own storage if, for example:
+// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
+// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
+// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
+struct ImGuiStorage
+{
+    // [Internal]
+    struct ImGuiStoragePair
+    {
+        ImGuiID key;
+        union { int val_i; float val_f; void* val_p; };
+        ImGuiStoragePair(ImGuiID _key, int _val_i)      { key = _key; val_i = _val_i; }
+        ImGuiStoragePair(ImGuiID _key, float _val_f)    { key = _key; val_f = _val_f; }
+        ImGuiStoragePair(ImGuiID _key, void* _val_p)    { key = _key; val_p = _val_p; }
+    };
+
+    ImVector<ImGuiStoragePair>      Data;
+
+    // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
+    // - Set***() functions find pair, insertion on demand if missing.
+    // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
+    void                Clear() { Data.clear(); }
+    IMGUI_API int       GetInt(ImGuiID key, int default_val = 0) const;
+    IMGUI_API void      SetInt(ImGuiID key, int val);
+    IMGUI_API bool      GetBool(ImGuiID key, bool default_val = false) const;
+    IMGUI_API void      SetBool(ImGuiID key, bool val);
+    IMGUI_API float     GetFloat(ImGuiID key, float default_val = 0.0f) const;
+    IMGUI_API void      SetFloat(ImGuiID key, float val);
+    IMGUI_API void*     GetVoidPtr(ImGuiID key) const; // default_val is NULL
+    IMGUI_API void      SetVoidPtr(ImGuiID key, void* val);
+
+    // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
+    // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
+    // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct)
+    //      float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
+    IMGUI_API int*      GetIntRef(ImGuiID key, int default_val = 0);
+    IMGUI_API bool*     GetBoolRef(ImGuiID key, bool default_val = false);
+    IMGUI_API float*    GetFloatRef(ImGuiID key, float default_val = 0.0f);
+    IMGUI_API void**    GetVoidPtrRef(ImGuiID key, void* default_val = NULL);
+
+    // Use on your own storage if you know only integer are being stored (open/close all tree nodes)
+    IMGUI_API void      SetAllInt(int val);
+
+    // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+    IMGUI_API void      BuildSortByKey();
+};
+
+// Helper: Manually clip large list of items.
+// If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse clipping based on visibility to save yourself from processing those items at all.
+// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped.
+// ImGui already clip items based on their bounds but it needs to measure text size to do so. Coarse clipping before submission makes this cost and your own data fetching/submission cost null.
+// Usage:
+//     ImGuiListClipper clipper(1000);  // we have 1000 elements, evenly spaced.
+//     while (clipper.Step())
+//         for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+//             ImGui::Text("line number %d", i);
+// - Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height (step skipped if we passed a known height as second arg to constructor).
+// - Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
+// - (Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user call Step(). Does nothing and switch to Step 3.)
+// - Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop.
+struct ImGuiListClipper
+{
+    int     DisplayStart, DisplayEnd;
+    int     ItemsCount;
+
+    // [Internal]
+    int     StepNo;
+    float   ItemsHeight;
+    float   StartPosY;
+
+    // items_count:  Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step).
+    // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing().
+    // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step().
+    ImGuiListClipper(int items_count = -1, float items_height = -1.0f)  { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want).
+    ~ImGuiListClipper()                                                 { IM_ASSERT(ItemsCount == -1); }      // Assert if user forgot to call End() or Step() until false.
+
+    IMGUI_API bool Step();                                              // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items.
+    IMGUI_API void Begin(int items_count, float items_height = -1.0f);  // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1.
+    IMGUI_API void End();                                               // Automatically called on the last call of Step() that returns false.
+};
+
+// Helpers macros to generate 32-bit encoded colors
+#ifdef IMGUI_USE_BGRA_PACKED_COLOR
+#define IM_COL32_R_SHIFT    16
+#define IM_COL32_G_SHIFT    8
+#define IM_COL32_B_SHIFT    0
+#define IM_COL32_A_SHIFT    24
+#define IM_COL32_A_MASK     0xFF000000
+#else
+#define IM_COL32_R_SHIFT    0
+#define IM_COL32_G_SHIFT    8
+#define IM_COL32_B_SHIFT    16
+#define IM_COL32_A_SHIFT    24
+#define IM_COL32_A_MASK     0xFF000000
+#endif
+#define IM_COL32(R,G,B,A)    (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
+#define IM_COL32_WHITE       IM_COL32(255,255,255,255)  // Opaque white = 0xFFFFFFFF
+#define IM_COL32_BLACK       IM_COL32(0,0,0,255)        // Opaque black
+#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0)          // Transparent black = 0x00000000
+
+// Helper: ImColor() implicitly converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
+// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
+// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
+// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
+struct ImColor
+{
+    ImVec4              Value;
+
+    ImColor()                                                       { Value.x = Value.y = Value.z = Value.w = 0.0f; }
+    ImColor(int r, int g, int b, int a = 255)                       { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; }
+    ImColor(ImU32 rgba)                                             { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; }
+    ImColor(float r, float g, float b, float a = 1.0f)              { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
+    ImColor(const ImVec4& col)                                      { Value = col; }
+    inline operator ImU32() const                                   { return ImGui::ColorConvertFloat4ToU32(Value); }
+    inline operator ImVec4() const                                  { return Value; }
+
+    // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
+    inline void    SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
+    static ImColor HSV(float h, float s, float v, float a = 1.0f)   { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
+};
+
+//-----------------------------------------------------------------------------
+// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
+// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
+//-----------------------------------------------------------------------------
+
+// ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h]
+// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering,
+// you can poke into the draw list for that! Draw callback may be useful for example to:
+//  A) Change your GPU render state,
+//  B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
+// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }'
+// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering back-end accordingly.
+#ifndef ImDrawCallback
+typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
+#endif
+
+// Special Draw callback value to request renderer back-end to reset the graphics/render state.
+// The renderer back-end needs to handle this special value, otherwise it will crash trying to call a function at this address.
+// This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored.
+// It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call).
+#define ImDrawCallback_ResetRenderState     (ImDrawCallback)(-1)
+
+// Typically, 1 command = 1 GPU draw call (unless command is a callback)
+// Pre 1.71 back-ends will typically ignore the VtxOffset/IdxOffset fields. When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset'
+// is enabled, those fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
+struct ImDrawCmd
+{
+    unsigned int    ElemCount;              // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
+    ImVec4          ClipRect;               // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
+    ImTextureID     TextureId;              // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
+    unsigned int    VtxOffset;              // Start offset in vertex buffer. Pre-1.71 or without ImGuiBackendFlags_RendererHasVtxOffset: always 0. With ImGuiBackendFlags_RendererHasVtxOffset: may be >0 to support meshes larger than 64K vertices with 16-bit indices.
+    unsigned int    IdxOffset;              // Start offset in index buffer. Always equal to sum of ElemCount drawn so far.
+    ImDrawCallback  UserCallback;           // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
+    void*           UserCallbackData;       // The draw callback code can access this.
+
+    ImDrawCmd() { ElemCount = 0; TextureId = (ImTextureID)NULL; VtxOffset = IdxOffset = 0;  UserCallback = NULL; UserCallbackData = NULL; }
+};
+
+// Vertex index, default to 16-bit
+// To allow large meshes with 16-bit indices: set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset in the renderer back-end (recommended).
+// To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in imconfig.h.
+#ifndef ImDrawIdx
+typedef unsigned short ImDrawIdx;
+#endif
+
+// Vertex layout
+#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT
+struct ImDrawVert
+{
+    ImVec2  pos;
+    ImVec2  uv;
+    ImU32   col;
+};
+#else
+// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
+// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
+// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up.
+// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
+IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
+#endif
+
+// For use by ImDrawListSplitter.
+struct ImDrawChannel
+{
+    ImVector<ImDrawCmd>         _CmdBuffer;
+    ImVector<ImDrawIdx>         _IdxBuffer;
+};
+
+// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order.
+// This is used by the Columns api, so items of each column can be batched together in a same draw call.
+struct ImDrawListSplitter
+{
+    int                         _Current;    // Current channel number (0)
+    int                         _Count;      // Number of active channels (1+)
+    ImVector<ImDrawChannel>     _Channels;   // Draw channels (not resized down so _Count might be < Channels.Size)
+
+    inline ImDrawListSplitter()  { Clear(); }
+    inline ~ImDrawListSplitter() { ClearFreeMemory(); }
+    inline void                 Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
+    IMGUI_API void              ClearFreeMemory();
+    IMGUI_API void              Split(ImDrawList* draw_list, int count);
+    IMGUI_API void              Merge(ImDrawList* draw_list);
+    IMGUI_API void              SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
+};
+
+enum ImDrawCornerFlags_
+{
+    ImDrawCornerFlags_None      = 0,
+    ImDrawCornerFlags_TopLeft   = 1 << 0, // 0x1
+    ImDrawCornerFlags_TopRight  = 1 << 1, // 0x2
+    ImDrawCornerFlags_BotLeft   = 1 << 2, // 0x4
+    ImDrawCornerFlags_BotRight  = 1 << 3, // 0x8
+    ImDrawCornerFlags_Top       = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight,   // 0x3
+    ImDrawCornerFlags_Bot       = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight,   // 0xC
+    ImDrawCornerFlags_Left      = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft,    // 0x5
+    ImDrawCornerFlags_Right     = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight,  // 0xA
+    ImDrawCornerFlags_All       = 0xF     // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
+};
+
+enum ImDrawListFlags_
+{
+    ImDrawListFlags_None             = 0,
+    ImDrawListFlags_AntiAliasedLines = 1 << 0,  // Lines are anti-aliased (*2 the number of triangles for 1.0f wide line, otherwise *3 the number of triangles)
+    ImDrawListFlags_AntiAliasedFill  = 1 << 1,  // Filled shapes have anti-aliased edges (*2 the number of vertices)
+    ImDrawListFlags_AllowVtxOffset   = 1 << 2   // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled.
+};
+
+// Draw command list
+// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame,
+// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
+// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to
+// access the current window draw list and draw custom primitives.
+// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
+// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), but you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
+// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
+struct ImDrawList
+{
+    // This is what you have to render
+    ImVector<ImDrawCmd>     CmdBuffer;          // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
+    ImVector<ImDrawIdx>     IdxBuffer;          // Index buffer. Each command consume ImDrawCmd::ElemCount of those
+    ImVector<ImDrawVert>    VtxBuffer;          // Vertex buffer.
+    ImDrawListFlags         Flags;              // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
+
+    // [Internal, used while building lists]
+    const ImDrawListSharedData* _Data;          // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
+    const char*             _OwnerName;         // Pointer to owner window's name for debugging
+    unsigned int            _VtxCurrentOffset;  // [Internal] Always 0 unless 'Flags & ImDrawListFlags_AllowVtxOffset'.
+    unsigned int            _VtxCurrentIdx;     // [Internal] Generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
+    ImDrawVert*             _VtxWritePtr;       // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
+    ImDrawIdx*              _IdxWritePtr;       // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
+    ImVector<ImVec4>        _ClipRectStack;     // [Internal]
+    ImVector<ImTextureID>   _TextureIdStack;    // [Internal]
+    ImVector<ImVec2>        _Path;              // [Internal] current path building
+    ImDrawListSplitter      _Splitter;          // [Internal] for channels api
+
+    // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
+    ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); }
+    ~ImDrawList() { ClearFreeMemory(); }
+    IMGUI_API void  PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false);  // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
+    IMGUI_API void  PushClipRectFullScreen();
+    IMGUI_API void  PopClipRect();
+    IMGUI_API void  PushTextureID(ImTextureID texture_id);
+    IMGUI_API void  PopTextureID();
+    inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
+    inline ImVec2   GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
+
+    // Primitives
+    // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners.
+    // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred).
+    //   In future versions we will use textures to provide cheaper and higher-quality circles.
+    //   Use AddNgon() and AddNgonFilled() functions if you need to guaranteed a specific number of sides.
+    IMGUI_API void  AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f);
+    IMGUI_API void  AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All, float thickness = 1.0f);   // a: upper-left, b: lower-right (== upper-left + size), rounding_corners_flags: 4 bits corresponding to which corner to round
+    IMGUI_API void  AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);                     // a: upper-left, b: lower-right (== upper-left + size)
+    IMGUI_API void  AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
+    IMGUI_API void  AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f);
+    IMGUI_API void  AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col);
+    IMGUI_API void  AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f);
+    IMGUI_API void  AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col);
+    IMGUI_API void  AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f);
+    IMGUI_API void  AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 12);
+    IMGUI_API void  AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f);
+    IMGUI_API void  AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments);
+    IMGUI_API void  AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
+    IMGUI_API void  AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
+    IMGUI_API void  AddPolyline(const ImVec2* points, int num_points, ImU32 col, bool closed, float thickness);
+    IMGUI_API void  AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
+    IMGUI_API void  AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0);
+
+    // Image primitives
+    // - Read FAQ to understand what ImTextureID is.
+    // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle.
+    // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture.
+    IMGUI_API void  AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE);
+    IMGUI_API void  AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE);
+    IMGUI_API void  AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
+
+    // Stateful path API, add points then finish with PathFillConvex() or PathStroke()
+    inline    void  PathClear()                                                 { _Path.Size = 0; }
+    inline    void  PathLineTo(const ImVec2& pos)                               { _Path.push_back(pos); }
+    inline    void  PathLineToMergeDuplicate(const ImVec2& pos)                 { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
+    inline    void  PathFillConvex(ImU32 col)                                   { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }  // Note: Anti-aliased filling requires points to be in clockwise order.
+    inline    void  PathStroke(ImU32 col, bool closed, float thickness = 1.0f)  { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; }
+    IMGUI_API void  PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10);
+    IMGUI_API void  PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12);                                            // Use precomputed angles for a 12 steps circle
+    IMGUI_API void  PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0);
+    IMGUI_API void  PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
+
+    // Advanced
+    IMGUI_API void  AddCallback(ImDrawCallback callback, void* callback_data);  // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles.
+    IMGUI_API void  AddDrawCmd();                                               // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible
+    IMGUI_API ImDrawList* CloneOutput() const;                                  // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
+
+    // Advanced: Channels
+    // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives)
+    // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end)
+    // - FIXME-OBSOLETE: This API shouldn't have been in ImDrawList in the first place!
+    //   Prefer using your own persistent copy of ImDrawListSplitter as you can stack them.
+    //   Using the ImDrawList::ChannelsXXXX you cannot stack a split over another.
+    inline void     ChannelsSplit(int count)    { _Splitter.Split(this, count); }
+    inline void     ChannelsMerge()             { _Splitter.Merge(this); }
+    inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChannel(this, n); }
+
+    // Internal helpers
+    // NB: all primitives needs to be reserved via PrimReserve() beforehand!
+    IMGUI_API void  Clear();
+    IMGUI_API void  ClearFreeMemory();
+    IMGUI_API void  PrimReserve(int idx_count, int vtx_count);
+    IMGUI_API void  PrimUnreserve(int idx_count, int vtx_count);
+    IMGUI_API void  PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col);      // Axis aligned rectangle (composed of two triangles)
+    IMGUI_API void  PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col);
+    IMGUI_API void  PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col);
+    inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; }
+    inline    void  PrimWriteIdx(ImDrawIdx idx)                                 { *_IdxWritePtr = idx; _IdxWritePtr++; }
+    inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col)     { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); }
+    IMGUI_API void  UpdateClipRect();
+    IMGUI_API void  UpdateTextureID();
+};
+
+// All draw data to render a Dear ImGui frame
+// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose,
+// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
+struct ImDrawData
+{
+    bool            Valid;                  // Only valid after Render() is called and before the next NewFrame() is called.
+    ImDrawList**    CmdLists;               // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here.
+    int             CmdListsCount;          // Number of ImDrawList* to render
+    int             TotalIdxCount;          // For convenience, sum of all ImDrawList's IdxBuffer.Size
+    int             TotalVtxCount;          // For convenience, sum of all ImDrawList's VtxBuffer.Size
+    ImVec2          DisplayPos;             // Upper-left position of the viewport to render (== upper-left of the orthogonal projection matrix to use)
+    ImVec2          DisplaySize;            // Size of the viewport to render (== io.DisplaySize for the main viewport) (DisplayPos + DisplaySize == lower-right of the orthogonal projection matrix to use)
+    ImVec2          FramebufferScale;       // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
+
+    // Functions
+    ImDrawData()    { Valid = false; Clear(); }
+    ~ImDrawData()   { Clear(); }
+    void Clear()    { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; DisplayPos = DisplaySize = FramebufferScale = ImVec2(0.f, 0.f); } // The ImDrawList are owned by ImGuiContext!
+    IMGUI_API void  DeIndexAllBuffers();                    // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+    IMGUI_API void  ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
+};
+
+//-----------------------------------------------------------------------------
+// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont)
+//-----------------------------------------------------------------------------
+
+struct ImFontConfig
+{
+    void*           FontData;               //          // TTF/OTF data
+    int             FontDataSize;           //          // TTF/OTF data size
+    bool            FontDataOwnedByAtlas;   // true     // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
+    int             FontNo;                 // 0        // Index of font within TTF/OTF file
+    float           SizePixels;             //          // Size in pixels for rasterizer (more or less maps to the resulting font height).
+    int             OversampleH;            // 3        // Rasterize at higher quality for sub-pixel positioning. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
+    int             OversampleV;            // 1        // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
+    bool            PixelSnapH;             // false    // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
+    ImVec2          GlyphExtraSpacing;      // 0, 0     // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
+    ImVec2          GlyphOffset;            // 0, 0     // Offset all glyphs from this font input.
+    const ImWchar*  GlyphRanges;            // NULL     // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
+    float           GlyphMinAdvanceX;       // 0        // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font
+    float           GlyphMaxAdvanceX;       // FLT_MAX  // Maximum AdvanceX for glyphs
+    bool            MergeMode;              // false    // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
+    unsigned int    RasterizerFlags;        // 0x00     // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
+    float           RasterizerMultiply;     // 1.0f     // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
+    ImWchar         EllipsisChar;           // -1       // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
+
+    // [Internal]
+    char            Name[40];               // Name (strictly to ease debugging)
+    ImFont*         DstFont;
+
+    IMGUI_API ImFontConfig();
+};
+
+// Hold rendering data for one glyph.
+// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this)
+struct ImFontGlyph
+{
+    unsigned int    Codepoint : 31;     // 0x0000..0xFFFF
+    unsigned int    Visible : 1;        // Flag to allow early out when rendering
+    float           AdvanceX;           // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
+    float           X0, Y0, X1, Y1;     // Glyph corners
+    float           U0, V0, U1, V1;     // Texture coordinates
+};
+
+// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges().
+// This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
+struct ImFontGlyphRangesBuilder
+{
+    ImVector<ImU32> UsedChars;            // Store 1-bit per Unicode code point (0=unused, 1=used)
+
+    ImFontGlyphRangesBuilder()              { Clear(); }
+    inline void     Clear()                 { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
+    inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; }  // Get bit n in the array
+    inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; }               // Set bit n in the array
+    inline void     AddChar(ImWchar c)      { SetBit(c); }                      // Add character
+    IMGUI_API void  AddText(const char* text, const char* text_end = NULL);     // Add string (each character of the UTF-8 string are added)
+    IMGUI_API void  AddRanges(const ImWchar* ranges);                           // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
+    IMGUI_API void  BuildRanges(ImVector<ImWchar>* out_ranges);                 // Output new ranges
+};
+
+// See ImFontAtlas::AddCustomRectXXX functions.
+struct ImFontAtlasCustomRect
+{
+    unsigned int    ID;             // Input    // User ID. Use < 0x110000 to map into a font glyph, >= 0x110000 for other/internal/custom texture data.
+    unsigned short  Width, Height;  // Input    // Desired rectangle dimension
+    unsigned short  X, Y;           // Output   // Packed position in Atlas
+    float           GlyphAdvanceX;  // Input    // For custom font glyphs only (ID < 0x110000): glyph xadvance
+    ImVec2          GlyphOffset;    // Input    // For custom font glyphs only (ID < 0x110000): glyph display offset
+    ImFont*         Font;           // Input    // For custom font glyphs only (ID < 0x110000): target font
+    ImFontAtlasCustomRect()         { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
+    bool IsPacked() const           { return X != 0xFFFF; }
+};
+
+enum ImFontAtlasFlags_
+{
+    ImFontAtlasFlags_None               = 0,
+    ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0,   // Don't round the height to next power of two
+    ImFontAtlasFlags_NoMouseCursors     = 1 << 1    // Don't build software mouse cursors into the atlas
+};
+
+// Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding:
+//  - One or more fonts.
+//  - Custom graphics data needed to render the shapes needed by Dear ImGui.
+//  - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas).
+// It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api.
+//  - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you.
+//  - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
+//  - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples)
+//  - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
+//    This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details.
+// Common pitfalls:
+// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
+//   atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
+// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction.
+//   You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
+// - Even though many functions are suffixed with "TTF", OTF data is supported just as well.
+// - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future!
+struct ImFontAtlas
+{
+    IMGUI_API ImFontAtlas();
+    IMGUI_API ~ImFontAtlas();
+    IMGUI_API ImFont*           AddFont(const ImFontConfig* font_cfg);
+    IMGUI_API ImFont*           AddFontDefault(const ImFontConfig* font_cfg = NULL);
+    IMGUI_API ImFont*           AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
+    IMGUI_API ImFont*           AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed.
+    IMGUI_API ImFont*           AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp.
+    IMGUI_API ImFont*           AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);              // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter.
+    IMGUI_API void              ClearInputData();           // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
+    IMGUI_API void              ClearTexData();             // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory.
+    IMGUI_API void              ClearFonts();               // Clear output font data (glyphs storage, UV coordinates).
+    IMGUI_API void              Clear();                    // Clear all input and output.
+
+    // Build atlas, retrieve pixel data.
+    // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
+    // The pitch is always = Width * BytesPerPixels (1 or 4)
+    // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
+    // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste.
+    IMGUI_API bool              Build();                    // Build pixels data. This is called automatically for you by the GetTexData*** functions.
+    IMGUI_API void              GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL);  // 1 byte per-pixel
+    IMGUI_API void              GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL);  // 4 bytes-per-pixel
+    bool                        IsBuilt() const             { return Fonts.Size > 0 && (TexPixelsAlpha8 != NULL || TexPixelsRGBA32 != NULL); }
+    void                        SetTexID(ImTextureID id)    { TexID = id; }
+
+    //-------------------------------------------
+    // Glyph Ranges
+    //-------------------------------------------
+
+    // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
+    // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
+    // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data.
+    IMGUI_API const ImWchar*    GetGlyphRangesDefault();                // Basic Latin, Extended Latin
+    IMGUI_API const ImWchar*    GetGlyphRangesKorean();                 // Default + Korean characters
+    IMGUI_API const ImWchar*    GetGlyphRangesJapanese();               // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
+    IMGUI_API const ImWchar*    GetGlyphRangesChineseFull();            // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs
+    IMGUI_API const ImWchar*    GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese
+    IMGUI_API const ImWchar*    GetGlyphRangesCyrillic();               // Default + about 400 Cyrillic characters
+    IMGUI_API const ImWchar*    GetGlyphRangesThai();                   // Default + Thai characters
+    IMGUI_API const ImWchar*    GetGlyphRangesVietnamese();             // Default + Vietnamese characters
+
+    //-------------------------------------------
+    // [BETA] Custom Rectangles/Glyphs API
+    //-------------------------------------------
+
+    // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
+    // After calling Build(), you can query the rectangle position and render your pixels.
+    // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
+    // so you can render e.g. custom colorful icons and use them as regular glyphs.
+    // Read docs/FONTS.txt for more details about using colorful icons.
+    IMGUI_API int               AddCustomRectRegular(unsigned int id, int width, int height);                                                                   // Id needs to be >= 0x110000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
+    IMGUI_API int               AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0));   // Id needs to be < 0x110000 to register a rectangle to map into a specific font.
+    const ImFontAtlasCustomRect*GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
+
+    // [Internal]
+    IMGUI_API void              CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const;
+    IMGUI_API bool              GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
+
+    //-------------------------------------------
+    // Members
+    //-------------------------------------------
+
+    bool                        Locked;             // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
+    ImFontAtlasFlags            Flags;              // Build flags (see ImFontAtlasFlags_)
+    ImTextureID                 TexID;              // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
+    int                         TexDesiredWidth;    // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
+    int                         TexGlyphPadding;    // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0.
+
+    // [Internal]
+    // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
+    unsigned char*              TexPixelsAlpha8;    // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
+    unsigned int*               TexPixelsRGBA32;    // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
+    int                         TexWidth;           // Texture width calculated during Build().
+    int                         TexHeight;          // Texture height calculated during Build().
+    ImVec2                      TexUvScale;         // = (1.0f/TexWidth, 1.0f/TexHeight)
+    ImVec2                      TexUvWhitePixel;    // Texture coordinates to a white pixel
+    ImVector<ImFont*>           Fonts;              // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
+    ImVector<ImFontAtlasCustomRect> CustomRects;    // Rectangles for packing custom texture data into the atlas.
+    ImVector<ImFontConfig>      ConfigData;         // Internal data
+    int                         CustomRectIds[1];   // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    typedef ImFontAtlasCustomRect    CustomRect;         // OBSOLETED in 1.72+
+    typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+
+#endif
+};
+
+// Font runtime data and rendering
+// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
+struct ImFont
+{
+    // Members: Hot ~20/24 bytes (for CalcTextSize)
+    ImVector<float>             IndexAdvanceX;      // 12-16 // out //            // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
+    float                       FallbackAdvanceX;   // 4     // out // = FallbackGlyph->AdvanceX
+    float                       FontSize;           // 4     // in  //            // Height of characters/line, set during loading (don't change after loading)
+
+    // Members: Hot ~36/48 bytes (for CalcTextSize + render loop)
+    ImVector<ImWchar>           IndexLookup;        // 12-16 // out //            // Sparse. Index glyphs by Unicode code-point.
+    ImVector<ImFontGlyph>       Glyphs;             // 12-16 // out //            // All glyphs.
+    const ImFontGlyph*          FallbackGlyph;      // 4-8   // out // = FindGlyph(FontFallbackChar)
+    ImVec2                      DisplayOffset;      // 8     // in  // = (0,0)    // Offset font rendering by xx pixels
+
+    // Members: Cold ~32/40 bytes
+    ImFontAtlas*                ContainerAtlas;     // 4-8   // out //            // What we has been loaded into
+    const ImFontConfig*         ConfigData;         // 4-8   // in  //            // Pointer within ContainerAtlas->ConfigData
+    short                       ConfigDataCount;    // 2     // in  // ~ 1        // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
+    ImWchar                     FallbackChar;       // 2     // in  // = '?'      // Replacement character if a glyph isn't found. Only set via SetFallbackChar()
+    ImWchar                     EllipsisChar;       // 2     // out // = -1       // Character used for ellipsis rendering.
+    bool                        DirtyLookupTables;  // 1     // out //
+    float                       Scale;              // 4     // in  // = 1.f      // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
+    float                       Ascent, Descent;    // 4+4   // out //            // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
+    int                         MetricsTotalSurface;// 4     // out //            // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
+    ImU8                        Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations accross all used codepoints.
+
+    // Methods
+    IMGUI_API ImFont();
+    IMGUI_API ~ImFont();
+    IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
+    IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
+    float                       GetCharAdvance(ImWchar c) const     { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
+    bool                        IsLoaded() const                    { return ContainerAtlas != NULL; }
+    const char*                 GetDebugName() const                { return ConfigData ? ConfigData->Name : "<unknown>"; }
+
+    // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
+    // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
+    IMGUI_API ImVec2            CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8
+    IMGUI_API const char*       CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const;
+    IMGUI_API void              RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
+    IMGUI_API void              RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
+
+    // [Internal] Don't use!
+    IMGUI_API void              BuildLookupTable();
+    IMGUI_API void              ClearOutputData();
+    IMGUI_API void              GrowIndex(int new_size);
+    IMGUI_API void              AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
+    IMGUI_API void              AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
+    IMGUI_API void              SetGlyphVisible(ImWchar c, bool visible);
+    IMGUI_API void              SetFallbackChar(ImWchar c);
+    IMGUI_API bool              IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last);
+};
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
+#ifdef IMGUI_INCLUDE_IMGUI_USER_H
+#include "imgui_user.h"
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imgui_demo.cpp
@@ -1,0 +1,6058 @@
+// dear imgui, v1.76 WIP
+// (demo code)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
+// Read imgui.cpp for more details, documentation and comments.
+// Get latest version at https://github.com/ocornut/imgui
+
+// Message to the person tempted to delete this file when integrating Dear ImGui into their code base:
+// Do NOT remove this file from your project! Think again! It is the most useful reference code that you and other coders
+// will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available debug menu of
+// your game/app! Removing this file from your project is hindering access to documentation for everyone in your team,
+// likely leading you to poorer usage of the library.
+// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowDemoWindow().
+// If you want to link core Dear ImGui in your shipped builds but want a thorough guarantee that the demo will not be linked,
+// you can setup your imconfig.h with #define IMGUI_DISABLE_DEMO_WINDOWS and those functions will be empty.
+// In other situation, whenever you have Dear ImGui available you probably want this to be available for reference.
+// Thank you,
+// -Your beloved friend, imgui_demo.cpp (which you won't delete)
+
+// Message to beginner C/C++ programmers about the meaning of the 'static' keyword:
+// In this demo code, we frequently we use 'static' variables inside functions. A static variable persist across calls, so it is
+// essentially like a global variable but declared inside the scope of the function. We do this as a way to gather code and data
+// in the same place, to make the demo source code faster to read, faster to write, and smaller in size.
+// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be
+// reentrant or used in multiple threads. This might be a pattern you will want to use in your code, but most of the real data
+// you would be editing is likely going to be stored outside your functions.
+
+// The Demo code in this file is designed to be easy to copy-and-paste in into your application!
+// Because of this:
+// - We never omit the ImGui:: namespace when calling functions, even though most of our code is already in the same namespace.
+// - We try to declare static variables in the local scope, as close as possible to the code using them.
+// - We never use any of the helpers/facilities used internally by Dear ImGui, unless it has been exposed in the public API (imgui.h).
+// - We never use maths operators on ImVec2/ImVec4. For other of our sources files, they are provided by imgui_internal.h w/ IMGUI_DEFINE_MATH_OPERATORS.
+//   For your own sources file they are optional and require you either enable those, either provide your own via IM_VEC2_CLASS_EXTRA in imconfig.h.
+//   Because we don't want to assume anything about your support of maths operators, we don't use them in imgui_demo.cpp.
+
+/*
+
+Index of this file:
+
+// [SECTION] Forward Declarations, Helpers
+// [SECTION] Demo Window / ShowDemoWindow()
+// [SECTION] About Window / ShowAboutWindow()
+// [SECTION] Style Editor / ShowStyleEditor()
+// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
+// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
+// [SECTION] Example App: Debug Log / ShowExampleAppLog()
+// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
+// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
+// [SECTION] Example App: Long Text / ShowExampleAppLongText()
+// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
+// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
+// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
+// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
+// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#include <ctype.h>          // toupper
+#include <limits.h>         // INT_MIN, INT_MAX
+#include <math.h>           // sqrtf, powf, cosf, sinf, floorf, ceilf
+#include <stdio.h>          // vsnprintf, sscanf, printf
+#include <stdlib.h>         // NULL, malloc, free, atoi
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h>         // intptr_t
+#else
+#include <stdint.h>         // intptr_t
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#endif
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wold-style-cast"             // warning : use of old-style cast                              // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"    // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code)
+#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"   // warning : cast to 'void *' from smaller integer type 'int'
+#pragma clang diagnostic ignored "-Wformat-security"            // warning : warning: format string is not a string literal
+#pragma clang diagnostic ignored "-Wexit-time-destructors"      // warning : declaration requires an exit-time destructor       // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
+#pragma clang diagnostic ignored "-Wunused-macros"              // warning : warning: macro is not used                         // we define snprintf/vsnprintf on Windows so they are available, but not always used.
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant                  // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"           // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
+#if __has_warning("-Wreserved-id-macro")
+#pragma clang diagnostic ignored "-Wreserved-id-macro"          // warning : macro name is a reserved identifier                //
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas"                      // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"          // warning: cast to pointer from integer of different size
+#pragma GCC diagnostic ignored "-Wformat-security"              // warning : format string is not a string literal (potentially insecure)
+#pragma GCC diagnostic ignored "-Wdouble-promotion"             // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion"                   // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wmisleading-indentation"       // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement      // GCC 6.0+ only. See #883 on GitHub.
+#endif
+
+// Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
+#ifdef _WIN32
+#define IM_NEWLINE  "\r\n"
+#else
+#define IM_NEWLINE  "\n"
+#endif
+
+#if defined(_MSC_VER) && !defined(snprintf)
+#define snprintf    _snprintf
+#endif
+#if defined(_MSC_VER) && !defined(vsnprintf)
+#define vsnprintf   _vsnprintf
+#endif
+
+// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
+#ifndef IMGUI_CDECL
+#ifdef _MSC_VER
+#define IMGUI_CDECL __cdecl
+#else
+#define IMGUI_CDECL
+#endif
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Forward Declarations, Helpers
+//-----------------------------------------------------------------------------
+
+#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
+
+// Forward Declarations
+static void ShowExampleAppDocuments(bool* p_open);
+static void ShowExampleAppMainMenuBar();
+static void ShowExampleAppConsole(bool* p_open);
+static void ShowExampleAppLog(bool* p_open);
+static void ShowExampleAppLayout(bool* p_open);
+static void ShowExampleAppPropertyEditor(bool* p_open);
+static void ShowExampleAppLongText(bool* p_open);
+static void ShowExampleAppAutoResize(bool* p_open);
+static void ShowExampleAppConstrainedResize(bool* p_open);
+static void ShowExampleAppSimpleOverlay(bool* p_open);
+static void ShowExampleAppWindowTitles(bool* p_open);
+static void ShowExampleAppCustomRendering(bool* p_open);
+static void ShowExampleMenuFile();
+
+// Helper to display a little (?) mark which shows a tooltip when hovered.
+// In your own code you may want to display an actual icon if you are using a merged icon fonts (see docs/FONTS.txt)
+static void HelpMarker(const char* desc)
+{
+    ImGui::TextDisabled("(?)");
+    if (ImGui::IsItemHovered())
+    {
+        ImGui::BeginTooltip();
+        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
+        ImGui::TextUnformatted(desc);
+        ImGui::PopTextWrapPos();
+        ImGui::EndTooltip();
+    }
+}
+
+// Helper to display basic user controls.
+void ImGui::ShowUserGuide()
+{
+    ImGuiIO& io = ImGui::GetIO();
+    ImGui::BulletText("Double-click on title bar to collapse window.");
+    ImGui::BulletText("Click and drag on lower corner to resize window\n(double-click to auto fit window to its contents).");
+    ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text.");
+    ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
+    if (io.FontAllowUserScaling)
+        ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
+    ImGui::BulletText("While inputing text:\n");
+    ImGui::Indent();
+    ImGui::BulletText("CTRL+Left/Right to word jump.");
+    ImGui::BulletText("CTRL+A or double-click to select all.");
+    ImGui::BulletText("CTRL+X/C/V to use clipboard cut/copy/paste.");
+    ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo.");
+    ImGui::BulletText("ESCAPE to revert.");
+    ImGui::BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract.");
+    ImGui::Unindent();
+    ImGui::BulletText("With keyboard navigation enabled:");
+    ImGui::Indent();
+    ImGui::BulletText("Arrow keys to navigate.");
+    ImGui::BulletText("Space to activate a widget.");
+    ImGui::BulletText("Return to input text into a widget.");
+    ImGui::BulletText("Escape to deactivate a widget, close popup, exit child window.");
+    ImGui::BulletText("Alt to jump to the menu layer of a window.");
+    ImGui::BulletText("CTRL+Tab to select a window.");
+    ImGui::Unindent();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Demo Window / ShowDemoWindow()
+//-----------------------------------------------------------------------------
+// - ShowDemoWindowWidgets()
+// - ShowDemoWindowLayout()
+// - ShowDemoWindowPopups()
+// - ShowDemoWindowTables()
+// - ShowDemoWindowColumns()
+// - ShowDemoWindowMisc()
+//-----------------------------------------------------------------------------
+
+// We split the contents of the big ShowDemoWindow() function into smaller functions (because the link time of very large functions grow non-linearly)
+static void ShowDemoWindowWidgets();
+static void ShowDemoWindowLayout();
+static void ShowDemoWindowPopups();
+static void ShowDemoWindowTables();
+static void ShowDemoWindowColumns();
+static void ShowDemoWindowMisc();
+
+// Demonstrate most Dear ImGui features (this is big function!)
+// You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature.
+void ImGui::ShowDemoWindow(bool* p_open)
+{
+    IM_ASSERT(ImGui::GetCurrentContext() != NULL && "Missing dear imgui context. Refer to examples app!"); // Exceptionally add an extra assert here for people confused with initial dear imgui setup
+
+    // Examples Apps (accessible from the "Examples" menu)
+    static bool show_app_documents = false;
+    static bool show_app_main_menu_bar = false;
+    static bool show_app_console = false;
+    static bool show_app_log = false;
+    static bool show_app_layout = false;
+    static bool show_app_property_editor = false;
+    static bool show_app_long_text = false;
+    static bool show_app_auto_resize = false;
+    static bool show_app_constrained_resize = false;
+    static bool show_app_simple_overlay = false;
+    static bool show_app_window_titles = false;
+    static bool show_app_custom_rendering = false;
+
+    if (show_app_documents)           ShowExampleAppDocuments(&show_app_documents);
+    if (show_app_main_menu_bar)       ShowExampleAppMainMenuBar();
+    if (show_app_console)             ShowExampleAppConsole(&show_app_console);
+    if (show_app_log)                 ShowExampleAppLog(&show_app_log);
+    if (show_app_layout)              ShowExampleAppLayout(&show_app_layout);
+    if (show_app_property_editor)     ShowExampleAppPropertyEditor(&show_app_property_editor);
+    if (show_app_long_text)           ShowExampleAppLongText(&show_app_long_text);
+    if (show_app_auto_resize)         ShowExampleAppAutoResize(&show_app_auto_resize);
+    if (show_app_constrained_resize)  ShowExampleAppConstrainedResize(&show_app_constrained_resize);
+    if (show_app_simple_overlay)      ShowExampleAppSimpleOverlay(&show_app_simple_overlay);
+    if (show_app_window_titles)       ShowExampleAppWindowTitles(&show_app_window_titles);
+    if (show_app_custom_rendering)    ShowExampleAppCustomRendering(&show_app_custom_rendering);
+
+    // Dear ImGui Apps (accessible from the "Tools" menu)
+    static bool show_app_metrics = false;
+    static bool show_app_style_editor = false;
+    static bool show_app_about = false;
+
+    if (show_app_metrics)             { ImGui::ShowMetricsWindow(&show_app_metrics); }
+    if (show_app_style_editor)        { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); }
+    if (show_app_about)               { ImGui::ShowAboutWindow(&show_app_about); }
+
+    // Demonstrate the various window flags. Typically you would just use the default!
+    static bool no_titlebar = false;
+    static bool no_scrollbar = false;
+    static bool no_menu = false;
+    static bool no_move = false;
+    static bool no_resize = false;
+    static bool no_collapse = false;
+    static bool no_close = false;
+    static bool no_nav = false;
+    static bool no_background = false;
+    static bool no_bring_to_front = false;
+
+    ImGuiWindowFlags window_flags = 0;
+    if (no_titlebar)        window_flags |= ImGuiWindowFlags_NoTitleBar;
+    if (no_scrollbar)       window_flags |= ImGuiWindowFlags_NoScrollbar;
+    if (!no_menu)           window_flags |= ImGuiWindowFlags_MenuBar;
+    if (no_move)            window_flags |= ImGuiWindowFlags_NoMove;
+    if (no_resize)          window_flags |= ImGuiWindowFlags_NoResize;
+    if (no_collapse)        window_flags |= ImGuiWindowFlags_NoCollapse;
+    if (no_nav)             window_flags |= ImGuiWindowFlags_NoNav;
+    if (no_background)      window_flags |= ImGuiWindowFlags_NoBackground;
+    if (no_bring_to_front)  window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;
+    if (no_close)           p_open = NULL; // Don't pass our bool* to Begin
+
+    // We specify a default position/size in case there's no data in the .ini file. Typically this isn't required! We only do it to make the Demo applications a little more welcoming.
+    ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);
+    ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver);
+
+    // Main body of the Demo window starts here.
+    if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags))
+    {
+        // Early out if the window is collapsed, as an optimization.
+        ImGui::End();
+        return;
+    }
+
+    // Most "big" widgets share a common width settings by default.
+    //ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f);    // Use 2/3 of the space for widgets and 1/3 for labels (default)
+    ImGui::PushItemWidth(ImGui::GetFontSize() * -12);           // Use fixed width for labels (by passing a negative value), the rest goes to widgets. We choose a width proportional to our font size.
+
+    // Menu Bar
+    if (ImGui::BeginMenuBar())
+    {
+        if (ImGui::BeginMenu("Menu"))
+        {
+            ShowExampleMenuFile();
+            ImGui::EndMenu();
+        }
+        if (ImGui::BeginMenu("Examples"))
+        {
+            ImGui::MenuItem("Main menu bar", NULL, &show_app_main_menu_bar);
+            ImGui::MenuItem("Console", NULL, &show_app_console);
+            ImGui::MenuItem("Log", NULL, &show_app_log);
+            ImGui::MenuItem("Simple layout", NULL, &show_app_layout);
+            ImGui::MenuItem("Property editor", NULL, &show_app_property_editor);
+            ImGui::MenuItem("Long text display", NULL, &show_app_long_text);
+            ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize);
+            ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize);
+            ImGui::MenuItem("Simple overlay", NULL, &show_app_simple_overlay);
+            ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles);
+            ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering);
+            ImGui::MenuItem("Documents", NULL, &show_app_documents);
+            ImGui::EndMenu();
+        }
+        if (ImGui::BeginMenu("Tools"))
+        {
+            ImGui::MenuItem("Metrics", NULL, &show_app_metrics);
+            ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
+            ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about);
+            ImGui::EndMenu();
+        }
+        ImGui::EndMenuBar();
+    }
+
+    ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION);
+    ImGui::Spacing();
+
+    if (ImGui::CollapsingHeader("Help"))
+    {
+        ImGui::Text("ABOUT THIS DEMO:");
+        ImGui::BulletText("Sections below are demonstrating many aspects of the library.");
+        ImGui::BulletText("The \"Examples\" menu above leads to more demo contents.");
+        ImGui::BulletText("The \"Tools\" menu above gives access to: About Box, Style Editor,\n"
+                          "and Metrics (general purpose Dear ImGui debugging tool).");
+        ImGui::Separator();
+
+        ImGui::Text("PROGRAMMER GUIDE:");
+        ImGui::BulletText("See the ShowDemoWindow() code in imgui_demo.cpp. <- you are here!");
+        ImGui::BulletText("See comments in imgui.cpp.");
+        ImGui::BulletText("See example applications in the examples/ folder.");
+        ImGui::BulletText("Read the FAQ at http://www.dearimgui.org/faq/");
+        ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableKeyboard' for keyboard controls.");
+        ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableGamepad' for gamepad controls.");
+        ImGui::Separator();
+
+        ImGui::Text("USER GUIDE:");
+        ImGui::ShowUserGuide();
+    }
+
+    if (ImGui::CollapsingHeader("Configuration"))
+    {
+        ImGuiIO& io = ImGui::GetIO();
+
+        if (ImGui::TreeNode("Configuration##2"))
+        {
+            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard);
+            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad);
+            ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details.");
+            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos);
+            ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos.");
+            ImGui::CheckboxFlags("io.ConfigFlags: NoMouse", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouse);
+            if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) // Create a way to restore this flag otherwise we could be stuck completely!
+            {
+                if (fmodf((float)ImGui::GetTime(), 0.40f) < 0.20f)
+                {
+                    ImGui::SameLine();
+                    ImGui::Text("<<PRESS SPACE TO DISABLE>>");
+                }
+                if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space)))
+                    io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
+            }
+            ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange);
+            ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility.");
+            ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
+            ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting");
+            ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges);
+            ImGui::SameLine(); HelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback.");
+            ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
+            ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor);
+            ImGui::SameLine(); HelpMarker("Instruct Dear ImGui to render a mouse cursor for you. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something).");
+            ImGui::TreePop();
+            ImGui::Separator();
+        }
+
+        if (ImGui::TreeNode("Backend Flags"))
+        {
+            HelpMarker("Those flags are set by the back-ends (imgui_impl_xxx files) to specify their capabilities.\nHere we expose then as read-only fields to avoid breaking interactions with your back-end.");
+            ImGuiBackendFlags backend_flags = io.BackendFlags; // Make a local copy to avoid modifying actual back-end flags.
+            ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasGamepad);
+            ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasMouseCursors);
+            ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasSetMousePos);
+            ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int *)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset);
+            ImGui::TreePop();
+            ImGui::Separator();
+        }
+
+        if (ImGui::TreeNode("Style"))
+        {
+            HelpMarker("The same contents can be accessed in 'Tools->Style Editor' or by calling the ShowStyleEditor() function.");
+            ImGui::ShowStyleEditor();
+            ImGui::TreePop();
+            ImGui::Separator();
+        }
+
+        if (ImGui::TreeNode("Capture/Logging"))
+        {
+            ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded.");
+            HelpMarker("Try opening any of the contents below in this window and then click one of the \"Log To\" button.");
+            ImGui::LogButtons();
+            ImGui::TextWrapped("You can also call ImGui::LogText() to output directly to the log without a visual output.");
+            if (ImGui::Button("Copy \"Hello, world!\" to clipboard"))
+            {
+                ImGui::LogToClipboard();
+                ImGui::LogText("Hello, world!");
+                ImGui::LogFinish();
+            }
+            ImGui::TreePop();
+        }
+    }
+
+    if (ImGui::CollapsingHeader("Window options"))
+    {
+        ImGui::Checkbox("No titlebar", &no_titlebar); ImGui::SameLine(150);
+        ImGui::Checkbox("No scrollbar", &no_scrollbar); ImGui::SameLine(300);
+        ImGui::Checkbox("No menu", &no_menu);
+        ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150);
+        ImGui::Checkbox("No resize", &no_resize); ImGui::SameLine(300);
+        ImGui::Checkbox("No collapse", &no_collapse);
+        ImGui::Checkbox("No close", &no_close); ImGui::SameLine(150);
+        ImGui::Checkbox("No nav", &no_nav); ImGui::SameLine(300);
+        ImGui::Checkbox("No background", &no_background);
+        ImGui::Checkbox("No bring to front", &no_bring_to_front);
+    }
+
+    // All demo contents
+    ShowDemoWindowWidgets();
+    ShowDemoWindowLayout();
+    ShowDemoWindowPopups();
+    ShowDemoWindowTables();
+    ShowDemoWindowMisc();
+
+    // End of ShowDemoWindow()
+    ImGui::End();
+}
+
+static void ShowDemoWindowWidgets()
+{
+    if (!ImGui::CollapsingHeader("Widgets"))
+        return;
+
+    if (ImGui::TreeNode("Basic"))
+    {
+        static int clicked = 0;
+        if (ImGui::Button("Button"))
+            clicked++;
+        if (clicked & 1)
+        {
+            ImGui::SameLine();
+            ImGui::Text("Thanks for clicking me!");
+        }
+
+        static bool check = true;
+        ImGui::Checkbox("checkbox", &check);
+
+        static int e = 0;
+        ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
+        ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
+        ImGui::RadioButton("radio c", &e, 2);
+
+        // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
+        for (int i = 0; i < 7; i++)
+        {
+            if (i > 0)
+                ImGui::SameLine();
+            ImGui::PushID(i);
+            ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f));
+            ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.7f));
+            ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i/7.0f, 0.8f, 0.8f));
+            ImGui::Button("Click");
+            ImGui::PopStyleColor(3);
+            ImGui::PopID();
+        }
+
+        // Use AlignTextToFramePadding() to align text baseline to the baseline of framed elements (otherwise a Text+SameLine+Button sequence will have the text a little too high by default)
+        ImGui::AlignTextToFramePadding();
+        ImGui::Text("Hold to repeat:");
+        ImGui::SameLine();
+
+        // Arrow buttons with Repeater
+        static int counter = 0;
+        float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
+        ImGui::PushButtonRepeat(true);
+        if (ImGui::ArrowButton("##left", ImGuiDir_Left)) { counter--; }
+        ImGui::SameLine(0.0f, spacing);
+        if (ImGui::ArrowButton("##right", ImGuiDir_Right)) { counter++; }
+        ImGui::PopButtonRepeat();
+        ImGui::SameLine();
+        ImGui::Text("%d", counter);
+
+        ImGui::Text("Hover over me");
+        if (ImGui::IsItemHovered())
+            ImGui::SetTooltip("I am a tooltip");
+
+        ImGui::SameLine();
+        ImGui::Text("- or me");
+        if (ImGui::IsItemHovered())
+        {
+            ImGui::BeginTooltip();
+            ImGui::Text("I am a fancy tooltip");
+            static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
+            ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
+            ImGui::EndTooltip();
+        }
+
+        ImGui::Separator();
+
+        ImGui::LabelText("label", "Value");
+
+        {
+            // Using the _simplified_ one-liner Combo() api here
+            // See "Combo" section for examples of how to use the more complete BeginCombo()/EndCombo() api.
+            const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
+            static int item_current = 0;
+            ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items));
+            ImGui::SameLine(); HelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n");
+        }
+
+        {
+            // To wire InputText() with std::string or any other custom string type,
+            // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
+            static char str0[128] = "Hello, world!";
+            ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
+            ImGui::SameLine(); HelpMarker("USER:\nHold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n\nPROGRAMMER:\nYou can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated in imgui_demo.cpp).");
+
+            static char str1[128] = "";
+            ImGui::InputTextWithHint("input text (w/ hint)", "enter text here", str1, IM_ARRAYSIZE(str1));
+
+            static int i0 = 123;
+            ImGui::InputInt("input int", &i0);
+            ImGui::SameLine(); HelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n  e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
+
+            static float f0 = 0.001f;
+            ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f");
+
+            static double d0 = 999999.00000001;
+            ImGui::InputDouble("input double", &d0, 0.01f, 1.0f, "%.8f");
+
+            static float f1 = 1.e10f;
+            ImGui::InputFloat("input scientific", &f1, 0.0f, 0.0f, "%e");
+            ImGui::SameLine(); HelpMarker("You can input value using the scientific notation,\n  e.g. \"1e+8\" becomes \"100000000\".\n");
+
+            static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
+            ImGui::InputFloat3("input float3", vec4a);
+        }
+
+        {
+            static int i1 = 50, i2 = 42;
+            ImGui::DragInt("drag int", &i1, 1);
+            ImGui::SameLine(); HelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
+
+            ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%");
+
+            static float f1=1.00f, f2=0.0067f;
+            ImGui::DragFloat("drag float", &f1, 0.005f);
+            ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
+        }
+
+        {
+            static int i1=0;
+            ImGui::SliderInt("slider int", &i1, -1, 3);
+            ImGui::SameLine(); HelpMarker("CTRL+click to input value.");
+
+            static float f1=0.123f, f2=0.0f;
+            ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
+            ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f);
+
+            static float angle = 0.0f;
+            ImGui::SliderAngle("slider angle", &angle);
+
+            // Using the format string to display a name instead of an integer.
+            // Here we completely omit '%d' from the format string, so it'll only display a name.
+            // This technique can also be used with DragInt().
+            enum Element { Element_Fire, Element_Earth, Element_Air, Element_Water, Element_COUNT };
+            const char* element_names[Element_COUNT] = { "Fire", "Earth", "Air", "Water" };
+            static int current_element = Element_Fire;
+            const char* current_element_name = (current_element >= 0 && current_element < Element_COUNT) ? element_names[current_element] : "Unknown";
+            ImGui::SliderInt("slider enum", &current_element, 0, Element_COUNT - 1, current_element_name);
+            ImGui::SameLine(); HelpMarker("Using the format string parameter to display a name instead of the underlying integer.");
+        }
+
+        {
+            static float col1[3] = { 1.0f,0.0f,0.2f };
+            static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
+            ImGui::ColorEdit3("color 1", col1);
+            ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nClick and hold to use drag and drop.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
+
+            ImGui::ColorEdit4("color 2", col2);
+        }
+
+        {
+            // List box
+            const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
+            static int listbox_item_current = 1;
+            ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
+
+            //static int listbox_item_current2 = 2;
+            //ImGui::SetNextItemWidth(-1);
+            //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
+        }
+
+        ImGui::TreePop();
+    }
+
+    // Testing ImGuiOnceUponAFrame helper.
+    //static ImGuiOnceUponAFrame once;
+    //for (int i = 0; i < 5; i++)
+    //    if (once)
+    //        ImGui::Text("This will be displayed only once.");
+
+    if (ImGui::TreeNode("Trees"))
+    {
+        if (ImGui::TreeNode("Basic trees"))
+        {
+            for (int i = 0; i < 5; i++)
+            {
+                // Use SetNextItemOpen() so set the default state of a node to be open.
+                // We could also use TreeNodeEx() with the ImGuiTreeNodeFlags_DefaultOpen flag to achieve the same thing!
+                if (i == 0)
+                    ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+
+                if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i))
+                {
+                    ImGui::Text("blah blah");
+                    ImGui::SameLine();
+                    if (ImGui::SmallButton("button")) {}
+                    ImGui::TreePop();
+                }
+            }
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Advanced, with Selectable nodes"))
+        {
+            HelpMarker("This is a more typical looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open.");
+            static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_SpanAvailWidth;
+            static bool align_label_with_current_x_position = false;
+            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnArrow", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnArrow);
+            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnDoubleClick", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnDoubleClick);
+            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAvailWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanAvailWidth); ImGui::SameLine(); HelpMarker("Extend hit area to all available width instead of allowing more items to be layed out after the node.");
+            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanFullWidth);
+            ImGui::Checkbox("Align label with current X position", &align_label_with_current_x_position);
+            ImGui::Text("Hello!");
+            if (align_label_with_current_x_position)
+                ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing());
+
+            static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit.
+            int node_clicked = -1;                // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc.
+            for (int i = 0; i < 6; i++)
+            {
+                // Disable the default open on single-click behavior and pass in Selected flag according to our selection state.
+                ImGuiTreeNodeFlags node_flags = base_flags;
+                const bool is_selected = (selection_mask & (1 << i)) != 0;
+                if (is_selected)
+                    node_flags |= ImGuiTreeNodeFlags_Selected;
+                if (i < 3)
+                {
+                    // Items 0..2 are Tree Node
+                    bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i);
+                    if (ImGui::IsItemClicked())
+                        node_clicked = i;
+                    if (node_open)
+                    {
+                        ImGui::BulletText("Blah blah\nBlah Blah");
+                        ImGui::TreePop();
+                    }
+                }
+                else
+                {
+                    // Items 3..5 are Tree Leaves
+                    // The only reason we use TreeNode at all is to allow selection of the leaf.
+                    // Otherwise we can use BulletText() or advance the cursor by GetTreeNodeToLabelSpacing() and call Text().
+                    node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet
+                    ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i);
+                    if (ImGui::IsItemClicked())
+                        node_clicked = i;
+                }
+            }
+            if (node_clicked != -1)
+            {
+                // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame.
+                if (ImGui::GetIO().KeyCtrl)
+                    selection_mask ^= (1 << node_clicked);          // CTRL+click to toggle
+                else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection
+                    selection_mask = (1 << node_clicked);           // Click to single-select
+            }
+            if (align_label_with_current_x_position)
+                ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing());
+            ImGui::TreePop();
+        }
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Collapsing Headers"))
+    {
+        static bool closable_group = true;
+        ImGui::Checkbox("Show 2nd header", &closable_group);
+        if (ImGui::CollapsingHeader("Header", ImGuiTreeNodeFlags_None))
+        {
+            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+            for (int i = 0; i < 5; i++)
+                ImGui::Text("Some content %d", i);
+        }
+        if (ImGui::CollapsingHeader("Header with a close button", &closable_group))
+        {
+            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+            for (int i = 0; i < 5; i++)
+                ImGui::Text("More content %d", i);
+        }
+        /*
+        if (ImGui::CollapsingHeader("Header with a bullet", ImGuiTreeNodeFlags_Bullet))
+            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+        */
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Bullets"))
+    {
+        ImGui::BulletText("Bullet point 1");
+        ImGui::BulletText("Bullet point 2\nOn multiple lines");
+        if (ImGui::TreeNode("Tree node"))
+        {
+            ImGui::BulletText("Another bullet point");
+            ImGui::TreePop();
+        }
+        ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)");
+        ImGui::Bullet(); ImGui::SmallButton("Button");
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Text"))
+    {
+        if (ImGui::TreeNode("Colored Text"))
+        {
+            // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
+            ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
+            ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
+            ImGui::TextDisabled("Disabled");
+            ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle.");
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Word Wrapping"))
+        {
+            // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility.
+            ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages.");
+            ImGui::Spacing();
+
+            static float wrap_width = 200.0f;
+            ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f");
+
+            ImGui::Text("Test paragraph 1:");
+            ImVec2 pos = ImGui::GetCursorScreenPos();
+            ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
+            ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
+            ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
+            ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
+            ImGui::PopTextWrapPos();
+
+            ImGui::Text("Test paragraph 2:");
+            pos = ImGui::GetCursorScreenPos();
+            ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
+            ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
+            ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee   ffffffff. gggggggg!hhhhhhhh");
+            ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
+            ImGui::PopTextWrapPos();
+
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("UTF-8 Text"))
+        {
+            // UTF-8 test with Japanese characters
+            // (Needs a suitable font, try Noto, or Arial Unicode, or M+ fonts. Read docs/FONTS.txt for details.)
+            // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8
+            // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature')
+            // - FOR THIS DEMO FILE ONLY, BECAUSE WE WANT TO SUPPORT OLD COMPILERS, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE.
+            //   Instead we are encoding a few strings with hexadecimal constants. Don't do this in your application!
+            //   Please use u8"text in any language" in your application!
+            // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
+            ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->AddFontFromFileTTF() manually to load extra character ranges. Read docs/FONTS.txt for details.");
+            ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string.
+            ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
+            static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
+            //static char buf[32] = u8"NIHONGO"; // <- this is how you would write it with C++11, using real kanjis
+            ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
+            ImGui::TreePop();
+        }
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Images"))
+    {
+        ImGuiIO& io = ImGui::GetIO();
+        ImGui::TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!");
+
+        // Here we are grabbing the font texture because that's the only one we have access to inside the demo code.
+        // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure.
+        // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID.
+        // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier etc.)
+        // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui::Image(), and gather width/height through your own functions, etc.
+        // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this.
+        // Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage().
+        ImTextureID my_tex_id = io.Fonts->TexID;
+        float my_tex_w = (float)io.Fonts->TexWidth;
+        float my_tex_h = (float)io.Fonts->TexHeight;
+
+        ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h);
+        ImVec2 pos = ImGui::GetCursorScreenPos();
+        ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImVec4(1.0f,1.0f,1.0f,1.0f), ImVec4(1.0f,1.0f,1.0f,0.5f));
+        if (ImGui::IsItemHovered())
+        {
+            ImGui::BeginTooltip();
+            float region_sz = 32.0f;
+            float region_x = io.MousePos.x - pos.x - region_sz * 0.5f; if (region_x < 0.0f) region_x = 0.0f; else if (region_x > my_tex_w - region_sz) region_x = my_tex_w - region_sz;
+            float region_y = io.MousePos.y - pos.y - region_sz * 0.5f; if (region_y < 0.0f) region_y = 0.0f; else if (region_y > my_tex_h - region_sz) region_y = my_tex_h - region_sz;
+            float zoom = 4.0f;
+            ImGui::Text("Min: (%.2f, %.2f)", region_x, region_y);
+            ImGui::Text("Max: (%.2f, %.2f)", region_x + region_sz, region_y + region_sz);
+            ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
+            ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
+            ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f));
+            ImGui::EndTooltip();
+        }
+        ImGui::TextWrapped("And now some textured buttons..");
+        static int pressed_count = 0;
+        for (int i = 0; i < 8; i++)
+        {
+            ImGui::PushID(i);
+            int frame_padding = -1 + i;     // -1 = uses default padding
+            if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImVec4(0.0f,0.0f,0.0f,1.0f)))
+                pressed_count += 1;
+            ImGui::PopID();
+            ImGui::SameLine();
+        }
+        ImGui::NewLine();
+        ImGui::Text("Pressed %d times.", pressed_count);
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Combo"))
+    {
+        // Expose flags as checkbox for the demo
+        static ImGuiComboFlags flags = 0;
+        ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft);
+        ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
+        if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton))
+            flags &= ~ImGuiComboFlags_NoPreview;     // Clear the other flag, as we cannot combine both
+        if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview))
+            flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both
+
+        // General BeginCombo() API, you have full control over your selection data and display type.
+        // (your selection data could be an index, a pointer to the object, an id for the object, a flag stored in the object itself, etc.)
+        const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
+        static const char* item_current = items[0];            // Here our selection is a single pointer stored outside the object.
+        if (ImGui::BeginCombo("combo 1", item_current, flags)) // The second parameter is the label previewed before opening the combo.
+        {
+            for (int n = 0; n < IM_ARRAYSIZE(items); n++)
+            {
+                bool is_selected = (item_current == items[n]);
+                if (ImGui::Selectable(items[n], is_selected))
+                    item_current = items[n];
+                if (is_selected)
+                    ImGui::SetItemDefaultFocus();   // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch)
+            }
+            ImGui::EndCombo();
+        }
+
+        // Simplified one-liner Combo() API, using values packed in a single constant string
+        static int item_current_2 = 0;
+        ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+
+        // Simplified one-liner Combo() using an array of const char*
+        static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview
+        ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items));
+
+        // Simplified one-liner Combo() using an accessor function
+        struct FuncHolder { static bool ItemGetter(void* data, int idx, const char** out_str) { *out_str = ((const char**)data)[idx]; return true; } };
+        static int item_current_4 = 0;
+        ImGui::Combo("combo 4 (function)", &item_current_4, &FuncHolder::ItemGetter, items, IM_ARRAYSIZE(items));
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Selectables"))
+    {
+        // Selectable() has 2 overloads:
+        // - The one taking "bool selected" as a read-only selection information. When Selectable() has been clicked is returns true and you can alter selection state accordingly.
+        // - The one taking "bool* p_selected" as a read-write selection information (convenient in some cases)
+        // The earlier is more flexible, as in real application your selection may be stored in a different manner (in flags within objects, as an external list, etc).
+        if (ImGui::TreeNode("Basic"))
+        {
+            static bool selection[5] = { false, true, false, false, false };
+            ImGui::Selectable("1. I am selectable", &selection[0]);
+            ImGui::Selectable("2. I am selectable", &selection[1]);
+            ImGui::Text("3. I am not selectable");
+            ImGui::Selectable("4. I am selectable", &selection[3]);
+            if (ImGui::Selectable("5. I am double clickable", selection[4], ImGuiSelectableFlags_AllowDoubleClick))
+                if (ImGui::IsMouseDoubleClicked(0))
+                    selection[4] = !selection[4];
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("Selection State: Single Selection"))
+        {
+            static int selected = -1;
+            for (int n = 0; n < 5; n++)
+            {
+                char buf[32];
+                sprintf(buf, "Object %d", n);
+                if (ImGui::Selectable(buf, selected == n))
+                    selected = n;
+            }
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("Selection State: Multiple Selection"))
+        {
+            HelpMarker("Hold CTRL and click to select multiple items.");
+            static bool selection[5] = { false, false, false, false, false };
+            for (int n = 0; n < 5; n++)
+            {
+                char buf[32];
+                sprintf(buf, "Object %d", n);
+                if (ImGui::Selectable(buf, selection[n]))
+                {
+                    if (!ImGui::GetIO().KeyCtrl)    // Clear selection when CTRL is not held
+                        memset(selection, 0, sizeof(selection));
+                    selection[n] ^= 1;
+                }
+            }
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("Rendering more text into the same line"))
+        {
+            // Using the Selectable() override that takes "bool* p_selected" parameter and toggle your booleans automatically.
+            static bool selected[3] = { false, false, false };
+            ImGui::Selectable("main.c",    &selected[0]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
+            ImGui::Selectable("Hello.cpp", &selected[1]); ImGui::SameLine(300); ImGui::Text("12,345 bytes");
+            ImGui::Selectable("Hello.h",   &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("In columns"))
+        {
+            ImGui::Columns(3, NULL, false);
+            static bool selected[16] = {};
+            for (int i = 0; i < 16; i++)
+            {
+                char label[32]; sprintf(label, "Item %d", i);
+                if (ImGui::Selectable(label, &selected[i])) {}
+                ImGui::NextColumn();
+            }
+            ImGui::Columns(1);
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("Grid"))
+        {
+            static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true };
+            for (int i = 0; i < 4*4; i++)
+            {
+                ImGui::PushID(i);
+                if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50)))
+                {
+                    // Note: We _unnecessarily_ test for both x/y and i here only to silence some static analyzer. The second part of each test is unnecessary.
+                    int x = i % 4;
+                    int y = i / 4;
+                    if (x > 0)           { selected[i - 1] ^= 1; }
+                    if (x < 3 && i < 15) { selected[i + 1] ^= 1; }
+                    if (y > 0 && i > 3)  { selected[i - 4] ^= 1; }
+                    if (y < 3 && i < 12) { selected[i + 4] ^= 1; }
+                }
+                if ((i % 4) < 3) ImGui::SameLine();
+                ImGui::PopID();
+            }
+            ImGui::TreePop();
+        }
+        if (ImGui::TreeNode("Alignment"))
+        {
+            HelpMarker("By default, Selectables uses style.SelectableTextAlign but it can be overriden on a per-item basis using PushStyleVar(). You'll probably want to always keep your default situation to left-align otherwise it becomes difficult to layout multiple items on a same line");
+            static bool selected[3*3] = { true, false, true, false, true, false, true, false, true };
+            for (int y = 0; y < 3; y++)
+            {
+                for (int x = 0; x < 3; x++)
+                {
+                    ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f);
+                    char name[32];
+                    sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y);
+                    if (x > 0) ImGui::SameLine();
+                    ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
+                    ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80));
+                    ImGui::PopStyleVar();
+                }
+            }
+            ImGui::TreePop();
+        }
+        ImGui::TreePop();
+    }
+
+    // To wire InputText() with std::string or any other custom string type,
+    // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
+    if (ImGui::TreeNode("Text Input"))
+    {
+        if (ImGui::TreeNode("Multi-line Text Input"))
+        {
+            // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize
+            // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings.
+            static char text[1024 * 16] =
+                "/*\n"
+                " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n"
+                " the hexadecimal encoding of one offending instruction,\n"
+                " more formally, the invalid operand with locked CMPXCHG8B\n"
+                " instruction bug, is a design flaw in the majority of\n"
+                " Intel Pentium, Pentium MMX, and Pentium OverDrive\n"
+                " processors (all in the P5 microarchitecture).\n"
+                "*/\n\n"
+                "label:\n"
+                "\tlock cmpxchg8b eax\n";
+
+            static ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput;
+            HelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp because we don't want to include <string> in here)");
+            ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", (unsigned int*)&flags, ImGuiInputTextFlags_ReadOnly);
+            ImGui::CheckboxFlags("ImGuiInputTextFlags_AllowTabInput", (unsigned int*)&flags, ImGuiInputTextFlags_AllowTabInput);
+            ImGui::CheckboxFlags("ImGuiInputTextFlags_CtrlEnterForNewLine", (unsigned int*)&flags, ImGuiInputTextFlags_CtrlEnterForNewLine);
+            ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16), flags);
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Filtered Text Input"))
+        {
+            static char buf1[64] = ""; ImGui::InputText("default", buf1, 64);
+            static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
+            static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
+            static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
+            static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
+            struct TextFilters { static int FilterImGuiLetters(ImGuiInputTextCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } };
+            static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
+
+            ImGui::Text("Password input");
+            static char password[64] = "password123";
+            ImGui::InputText("password", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
+            ImGui::SameLine(); HelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n");
+            ImGui::InputTextWithHint("password (w/ hint)", "<password>", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
+            ImGui::InputText("password (clear)", password, IM_ARRAYSIZE(password));
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Resize Callback"))
+        {
+            // To wire InputText() with std::string or any other custom string type,
+            // you can use the ImGuiInputTextFlags_CallbackResize flag + create a custom ImGui::InputText() wrapper using your prefered type.
+            // See misc/cpp/imgui_stdlib.h for an implementation of this using std::string.
+            HelpMarker("Demonstrate using ImGuiInputTextFlags_CallbackResize to wire your resizable string type to InputText().\n\nSee misc/cpp/imgui_stdlib.h for an implementation of this for std::string.");
+            struct Funcs
+            {
+                static int MyResizeCallback(ImGuiInputTextCallbackData* data)
+                {
+                    if (data->EventFlag == ImGuiInputTextFlags_CallbackResize)
+                    {
+                        ImVector<char>* my_str = (ImVector<char>*)data->UserData;
+                        IM_ASSERT(my_str->begin() == data->Buf);
+                        my_str->resize(data->BufSize);  // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1
+                        data->Buf = my_str->begin();
+                    }
+                    return 0;
+                }
+
+                // Tip: Because ImGui:: is a namespace you would typicall add your own function into the namespace in your own source files.
+                // For example, you may add a function called ImGui::InputText(const char* label, MyString* my_str).
+                static bool MyInputTextMultiline(const char* label, ImVector<char>* my_str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0)
+                {
+                    IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
+                    return ImGui::InputTextMultiline(label, my_str->begin(), (size_t)my_str->size(), size, flags | ImGuiInputTextFlags_CallbackResize, Funcs::MyResizeCallback, (void*)my_str);
+                }
+            };
+
+            // For this demo we are using ImVector as a string container.
+            // Note that because we need to store a terminating zero character, our size/capacity are 1 more than usually reported by a typical string class.
+            static ImVector<char> my_str;
+            if (my_str.empty())
+                my_str.push_back(0);
+            Funcs::MyInputTextMultiline("##MyStr", &my_str, ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16));
+            ImGui::Text("Data: %p\nSize: %d\nCapacity: %d", (void*)my_str.begin(), my_str.size(), my_str.capacity());
+            ImGui::TreePop();
+        }
+
+        ImGui::TreePop();
+    }
+
+    // Plot/Graph widgets are currently fairly limited.
+    // Consider writing your own plotting widget, or using a third-party one (see "Wiki->Useful Widgets", or github.com/ocornut/imgui/issues/2747)
+    if (ImGui::TreeNode("Plots Widgets"))
+    {
+        static bool animate = true;
+        ImGui::Checkbox("Animate", &animate);
+
+        static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
+        ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
+
+        // Create a dummy array of contiguous float values to plot
+        // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
+        static float values[90] = {};
+        static int values_offset = 0;
+        static double refresh_time = 0.0;
+        if (!animate || refresh_time == 0.0)
+            refresh_time = ImGui::GetTime();
+        while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
+        {
+            static float phase = 0.0f;
+            values[values_offset] = cosf(phase);
+            values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
+            phase += 0.10f*values_offset;
+            refresh_time += 1.0f/60.0f;
+        }
+
+        // Plots can display overlay texts
+        // (in this example, we will display an average value)
+        {
+            float average = 0.0f;
+            for (int n = 0; n < IM_ARRAYSIZE(values); n++)
+                average += values[n];
+            average /= (float)IM_ARRAYSIZE(values);
+            char overlay[32];
+            sprintf(overlay, "avg %f", average);
+            ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, overlay, -1.0f, 1.0f, ImVec2(0,80));
+        }
+        ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
+
+        // Use functions to generate output
+        // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
+        struct Funcs
+        {
+            static float Sin(void*, int i) { return sinf(i * 0.1f); }
+            static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
+        };
+        static int func_type = 0, display_count = 70;
+        ImGui::Separator();
+        ImGui::SetNextItemWidth(100);
+        ImGui::Combo("func", &func_type, "Sin\0Saw\0");
+        ImGui::SameLine();
+        ImGui::SliderInt("Sample count", &display_count, 1, 400);
+        float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
+        ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
+        ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
+        ImGui::Separator();
+
+        // Animate a simple progress bar
+        static float progress = 0.0f, progress_dir = 1.0f;
+        if (animate)
+        {
+            progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
+            if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
+            if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
+        }
+
+        // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width,
+        // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
+        ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
+        ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+        ImGui::Text("Progress Bar");
+
+        float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
+        char buf[32];
+        sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
+        ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Color/Picker Widgets"))
+    {
+        static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f);
+
+        static bool alpha_preview = true;
+        static bool alpha_half_preview = false;
+        static bool drag_and_drop = true;
+        static bool options_menu = true;
+        static bool hdr = false;
+        ImGui::Checkbox("With Alpha Preview", &alpha_preview);
+        ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview);
+        ImGui::Checkbox("With Drag and Drop", &drag_and_drop);
+        ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); HelpMarker("Right-click on the individual color widget to show options.");
+        ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); HelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
+        ImGuiColorEditFlags misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
+
+        ImGui::Text("Color widget:");
+        ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n");
+        ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags);
+
+        ImGui::Text("Color widget HSV with Alpha:");
+        ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags);
+
+        ImGui::Text("Color widget with Float Display:");
+        ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags);
+
+        ImGui::Text("Color button with Picker:");
+        ImGui::SameLine(); HelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup.");
+        ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags);
+
+        ImGui::Text("Color button with Custom Picker Popup:");
+
+        // Generate a dummy default palette. The palette will persist and can be edited.
+        static bool saved_palette_init = true;
+        static ImVec4 saved_palette[32] = {};
+        if (saved_palette_init)
+        {
+            for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+            {
+                ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z);
+                saved_palette[n].w = 1.0f; // Alpha
+            }
+            saved_palette_init = false;
+        }
+
+        static ImVec4 backup_color;
+        bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags);
+        ImGui::SameLine(0, ImGui::GetStyle().ItemInnerSpacing.x);
+        open_popup |= ImGui::Button("Palette");
+        if (open_popup)
+        {
+            ImGui::OpenPopup("mypicker");
+            backup_color = color;
+        }
+        if (ImGui::BeginPopup("mypicker"))
+        {
+            ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!");
+            ImGui::Separator();
+            ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview);
+            ImGui::SameLine();
+
+            ImGui::BeginGroup(); // Lock X position
+            ImGui::Text("Current");
+            ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40));
+            ImGui::Text("Previous");
+            if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40)))
+                color = backup_color;
+            ImGui::Separator();
+            ImGui::Text("Palette");
+            for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+            {
+                ImGui::PushID(n);
+                if ((n % 8) != 0)
+                    ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
+                if (ImGui::ColorButton("##palette", saved_palette[n], ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip, ImVec2(20,20)))
+                    color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha!
+
+                // Allow user to drop colors into each palette entry
+                // (Note that ColorButton is already a drag source by default, unless using ImGuiColorEditFlags_NoDragDrop)
+                if (ImGui::BeginDragDropTarget())
+                {
+                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
+                        memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3);
+                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
+                        memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4);
+                    ImGui::EndDragDropTarget();
+                }
+
+                ImGui::PopID();
+            }
+            ImGui::EndGroup();
+            ImGui::EndPopup();
+        }
+
+        ImGui::Text("Color button only:");
+        static bool no_border = false;
+        ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border);
+        ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80,80));
+
+        ImGui::Text("Color picker:");
+        static bool alpha = true;
+        static bool alpha_bar = true;
+        static bool side_preview = true;
+        static bool ref_color = false;
+        static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f);
+        static int display_mode = 0;
+        static int picker_mode = 0;
+        ImGui::Checkbox("With Alpha", &alpha);
+        ImGui::Checkbox("With Alpha Bar", &alpha_bar);
+        ImGui::Checkbox("With Side Preview", &side_preview);
+        if (side_preview)
+        {
+            ImGui::SameLine();
+            ImGui::Checkbox("With Ref Color", &ref_color);
+            if (ref_color)
+            {
+                ImGui::SameLine();
+                ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags);
+            }
+        }
+        ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0");
+        ImGui::SameLine(); HelpMarker("ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions().");
+        ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0");
+        ImGui::SameLine(); HelpMarker("User can right-click the picker to change mode.");
+        ImGuiColorEditFlags flags = misc_flags;
+        if (!alpha)            flags |= ImGuiColorEditFlags_NoAlpha;        // This is by default if you call ColorPicker3() instead of ColorPicker4()
+        if (alpha_bar)         flags |= ImGuiColorEditFlags_AlphaBar;
+        if (!side_preview)     flags |= ImGuiColorEditFlags_NoSidePreview;
+        if (picker_mode == 1)  flags |= ImGuiColorEditFlags_PickerHueBar;
+        if (picker_mode == 2)  flags |= ImGuiColorEditFlags_PickerHueWheel;
+        if (display_mode == 1) flags |= ImGuiColorEditFlags_NoInputs;       // Disable all RGB/HSV/Hex displays
+        if (display_mode == 2) flags |= ImGuiColorEditFlags_DisplayRGB;     // Override display mode
+        if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV;
+        if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex;
+        ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL);
+
+        ImGui::Text("Programmatically set defaults:");
+        ImGui::SameLine(); HelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible.");
+        if (ImGui::Button("Default: Uint8 + HSV + Hue Bar"))
+            ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar);
+        if (ImGui::Button("Default: Float + HDR + Hue Wheel"))
+            ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel);
+
+        // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0)
+        static ImVec4 color_stored_as_hsv(0.23f, 1.0f, 1.0f, 1.0f);
+        ImGui::Spacing();
+        ImGui::Text("HSV encoded colors");
+        ImGui::SameLine(); HelpMarker("By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the added benefit that you can manipulate hue values with the picker even when saturation or value are zero.");
+        ImGui::Text("Color widget with InputHSV:");
+        ImGui::ColorEdit4("HSV shown as RGB##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+        ImGui::ColorEdit4("HSV shown as HSV##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+        ImGui::DragFloat4("Raw HSV values", (float*)&color_stored_as_hsv, 0.01f, 0.0f, 1.0f);
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Range Widgets"))
+    {
+        static float begin = 10, end = 90;
+        static int begin_i = 100, end_i = 1000;
+        ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%");
+        ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %d units", "Max: %d units");
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Data Types"))
+    {
+        // The DragScalar/InputScalar/SliderScalar functions allow various data types: signed/unsigned int/long long and float/double
+        // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum to pass the type,
+        // and passing all arguments by address.
+        // This is the reason the test code below creates local variables to hold "zero" "one" etc. for each types.
+        // In practice, if you frequently use a given type that is not covered by the normal API entry points, you can wrap it
+        // yourself inside a 1 line function which can take typed argument as value instead of void*, and then pass their address
+        // to the generic function. For example:
+        //   bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld")
+        //   {
+        //      return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format);
+        //   }
+
+        // Limits (as helper variables that we can take the address of)
+        // Note that the SliderScalar function has a maximum usable range of half the natural type maximum, hence the /2 below.
+        #ifndef LLONG_MIN
+        ImS64 LLONG_MIN = -9223372036854775807LL - 1;
+        ImS64 LLONG_MAX = 9223372036854775807LL;
+        ImU64 ULLONG_MAX = (2ULL * 9223372036854775807LL + 1);
+        #endif
+        const char    s8_zero  = 0,   s8_one  = 1,   s8_fifty  = 50, s8_min  = -128,        s8_max = 127;
+        const ImU8    u8_zero  = 0,   u8_one  = 1,   u8_fifty  = 50, u8_min  = 0,           u8_max = 255;
+        const short   s16_zero = 0,   s16_one = 1,   s16_fifty = 50, s16_min = -32768,      s16_max = 32767;
+        const ImU16   u16_zero = 0,   u16_one = 1,   u16_fifty = 50, u16_min = 0,           u16_max = 65535;
+        const ImS32   s32_zero = 0,   s32_one = 1,   s32_fifty = 50, s32_min = INT_MIN/2,   s32_max = INT_MAX/2,    s32_hi_a = INT_MAX/2 - 100,    s32_hi_b = INT_MAX/2;
+        const ImU32   u32_zero = 0,   u32_one = 1,   u32_fifty = 50, u32_min = 0,           u32_max = UINT_MAX/2,   u32_hi_a = UINT_MAX/2 - 100,   u32_hi_b = UINT_MAX/2;
+        const ImS64   s64_zero = 0,   s64_one = 1,   s64_fifty = 50, s64_min = LLONG_MIN/2, s64_max = LLONG_MAX/2,  s64_hi_a = LLONG_MAX/2 - 100,  s64_hi_b = LLONG_MAX/2;
+        const ImU64   u64_zero = 0,   u64_one = 1,   u64_fifty = 50, u64_min = 0,           u64_max = ULLONG_MAX/2, u64_hi_a = ULLONG_MAX/2 - 100, u64_hi_b = ULLONG_MAX/2;
+        const float   f32_zero = 0.f, f32_one = 1.f, f32_lo_a = -10000000000.0f, f32_hi_a = +10000000000.0f;
+        const double  f64_zero = 0.,  f64_one = 1.,  f64_lo_a = -1000000000000000.0, f64_hi_a = +1000000000000000.0;
+
+        // State
+        static char   s8_v  = 127;
+        static ImU8   u8_v  = 255;
+        static short  s16_v = 32767;
+        static ImU16  u16_v = 65535;
+        static ImS32  s32_v = -1;
+        static ImU32  u32_v = (ImU32)-1;
+        static ImS64  s64_v = -1;
+        static ImU64  u64_v = (ImU64)-1;
+        static float  f32_v = 0.123f;
+        static double f64_v = 90000.01234567890123456789;
+
+        const float drag_speed = 0.2f;
+        static bool drag_clamp = false;
+        ImGui::Text("Drags:");
+        ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp); ImGui::SameLine(); HelpMarker("As with every widgets in dear imgui, we never modify values unless there is a user interaction.\nYou can override the clamping limits by using CTRL+Click to input a value.");
+        ImGui::DragScalar("drag s8",        ImGuiDataType_S8,     &s8_v,  drag_speed, drag_clamp ? &s8_zero  : NULL, drag_clamp ? &s8_fifty  : NULL);
+        ImGui::DragScalar("drag u8",        ImGuiDataType_U8,     &u8_v,  drag_speed, drag_clamp ? &u8_zero  : NULL, drag_clamp ? &u8_fifty  : NULL, "%u ms");
+        ImGui::DragScalar("drag s16",       ImGuiDataType_S16,    &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL);
+        ImGui::DragScalar("drag u16",       ImGuiDataType_U16,    &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms");
+        ImGui::DragScalar("drag s32",       ImGuiDataType_S32,    &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL);
+        ImGui::DragScalar("drag u32",       ImGuiDataType_U32,    &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms");
+        ImGui::DragScalar("drag s64",       ImGuiDataType_S64,    &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL);
+        ImGui::DragScalar("drag u64",       ImGuiDataType_U64,    &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL);
+        ImGui::DragScalar("drag float",     ImGuiDataType_Float,  &f32_v, 0.005f,  &f32_zero, &f32_one, "%f", 1.0f);
+        ImGui::DragScalar("drag float ^2",  ImGuiDataType_Float,  &f32_v, 0.005f,  &f32_zero, &f32_one, "%f", 2.0f); ImGui::SameLine(); HelpMarker("You can use the 'power' parameter to increase tweaking precision on one side of the range.");
+        ImGui::DragScalar("drag double",    ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, NULL,     "%.10f grams", 1.0f);
+        ImGui::DragScalar("drag double ^2", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, &f64_one, "0 < %.10f < 1", 2.0f);
+
+        ImGui::Text("Sliders");
+        ImGui::SliderScalar("slider s8 full",     ImGuiDataType_S8,     &s8_v,  &s8_min,   &s8_max,   "%d");
+        ImGui::SliderScalar("slider u8 full",     ImGuiDataType_U8,     &u8_v,  &u8_min,   &u8_max,   "%u");
+        ImGui::SliderScalar("slider s16 full",    ImGuiDataType_S16,    &s16_v, &s16_min,  &s16_max,  "%d");
+        ImGui::SliderScalar("slider u16 full",    ImGuiDataType_U16,    &u16_v, &u16_min,  &u16_max,  "%u");
+        ImGui::SliderScalar("slider s32 low",     ImGuiDataType_S32,    &s32_v, &s32_zero, &s32_fifty,"%d");
+        ImGui::SliderScalar("slider s32 high",    ImGuiDataType_S32,    &s32_v, &s32_hi_a, &s32_hi_b, "%d");
+        ImGui::SliderScalar("slider s32 full",    ImGuiDataType_S32,    &s32_v, &s32_min,  &s32_max,  "%d");
+        ImGui::SliderScalar("slider u32 low",     ImGuiDataType_U32,    &u32_v, &u32_zero, &u32_fifty,"%u");
+        ImGui::SliderScalar("slider u32 high",    ImGuiDataType_U32,    &u32_v, &u32_hi_a, &u32_hi_b, "%u");
+        ImGui::SliderScalar("slider u32 full",    ImGuiDataType_U32,    &u32_v, &u32_min,  &u32_max,  "%u");
+        ImGui::SliderScalar("slider s64 low",     ImGuiDataType_S64,    &s64_v, &s64_zero, &s64_fifty,"%I64d");
+        ImGui::SliderScalar("slider s64 high",    ImGuiDataType_S64,    &s64_v, &s64_hi_a, &s64_hi_b, "%I64d");
+        ImGui::SliderScalar("slider s64 full",    ImGuiDataType_S64,    &s64_v, &s64_min,  &s64_max,  "%I64d");
+        ImGui::SliderScalar("slider u64 low",     ImGuiDataType_U64,    &u64_v, &u64_zero, &u64_fifty,"%I64u ms");
+        ImGui::SliderScalar("slider u64 high",    ImGuiDataType_U64,    &u64_v, &u64_hi_a, &u64_hi_b, "%I64u ms");
+        ImGui::SliderScalar("slider u64 full",    ImGuiDataType_U64,    &u64_v, &u64_min,  &u64_max,  "%I64u ms");
+        ImGui::SliderScalar("slider float low",   ImGuiDataType_Float,  &f32_v, &f32_zero, &f32_one);
+        ImGui::SliderScalar("slider float low^2", ImGuiDataType_Float,  &f32_v, &f32_zero, &f32_one,  "%.10f", 2.0f);
+        ImGui::SliderScalar("slider float high",  ImGuiDataType_Float,  &f32_v, &f32_lo_a, &f32_hi_a, "%e");
+        ImGui::SliderScalar("slider double low",  ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one,  "%.10f grams", 1.0f);
+        ImGui::SliderScalar("slider double low^2",ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one,  "%.10f", 2.0f);
+        ImGui::SliderScalar("slider double high", ImGuiDataType_Double, &f64_v, &f64_lo_a, &f64_hi_a, "%e grams", 1.0f);
+
+        static bool inputs_step = true;
+        ImGui::Text("Inputs");
+        ImGui::Checkbox("Show step buttons", &inputs_step);
+        ImGui::InputScalar("input s8",      ImGuiDataType_S8,     &s8_v,  inputs_step ? &s8_one  : NULL, NULL, "%d");
+        ImGui::InputScalar("input u8",      ImGuiDataType_U8,     &u8_v,  inputs_step ? &u8_one  : NULL, NULL, "%u");
+        ImGui::InputScalar("input s16",     ImGuiDataType_S16,    &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d");
+        ImGui::InputScalar("input u16",     ImGuiDataType_U16,    &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u");
+        ImGui::InputScalar("input s32",     ImGuiDataType_S32,    &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d");
+        ImGui::InputScalar("input s32 hex", ImGuiDataType_S32,    &s32_v, inputs_step ? &s32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal);
+        ImGui::InputScalar("input u32",     ImGuiDataType_U32,    &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u");
+        ImGui::InputScalar("input u32 hex", ImGuiDataType_U32,    &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal);
+        ImGui::InputScalar("input s64",     ImGuiDataType_S64,    &s64_v, inputs_step ? &s64_one : NULL);
+        ImGui::InputScalar("input u64",     ImGuiDataType_U64,    &u64_v, inputs_step ? &u64_one : NULL);
+        ImGui::InputScalar("input float",   ImGuiDataType_Float,  &f32_v, inputs_step ? &f32_one : NULL);
+        ImGui::InputScalar("input double",  ImGuiDataType_Double, &f64_v, inputs_step ? &f64_one : NULL);
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Multi-component Widgets"))
+    {
+        static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
+        static int vec4i[4] = { 1, 5, 100, 255 };
+
+        ImGui::InputFloat2("input float2", vec4f);
+        ImGui::DragFloat2("drag float2", vec4f, 0.01f, 0.0f, 1.0f);
+        ImGui::SliderFloat2("slider float2", vec4f, 0.0f, 1.0f);
+        ImGui::InputInt2("input int2", vec4i);
+        ImGui::DragInt2("drag int2", vec4i, 1, 0, 255);
+        ImGui::SliderInt2("slider int2", vec4i, 0, 255);
+        ImGui::Spacing();
+
+        ImGui::InputFloat3("input float3", vec4f);
+        ImGui::DragFloat3("drag float3", vec4f, 0.01f, 0.0f, 1.0f);
+        ImGui::SliderFloat3("slider float3", vec4f, 0.0f, 1.0f);
+        ImGui::InputInt3("input int3", vec4i);
+        ImGui::DragInt3("drag int3", vec4i, 1, 0, 255);
+        ImGui::SliderInt3("slider int3", vec4i, 0, 255);
+        ImGui::Spacing();
+
+        ImGui::InputFloat4("input float4", vec4f);
+        ImGui::DragFloat4("drag float4", vec4f, 0.01f, 0.0f, 1.0f);
+        ImGui::SliderFloat4("slider float4", vec4f, 0.0f, 1.0f);
+        ImGui::InputInt4("input int4", vec4i);
+        ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
+        ImGui::SliderInt4("slider int4", vec4i, 0, 255);
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Vertical Sliders"))
+    {
+        const float spacing = 4;
+        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
+
+        static int int_value = 0;
+        ImGui::VSliderInt("##int", ImVec2(18,160), &int_value, 0, 5);
+        ImGui::SameLine();
+
+        static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f };
+        ImGui::PushID("set1");
+        for (int i = 0; i < 7; i++)
+        {
+            if (i > 0) ImGui::SameLine();
+            ImGui::PushID(i);
+            ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i/7.0f, 0.5f, 0.5f));
+            ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.5f));
+            ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.5f));
+            ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i/7.0f, 0.9f, 0.9f));
+            ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, "");
+            if (ImGui::IsItemActive() || ImGui::IsItemHovered())
+                ImGui::SetTooltip("%.3f", values[i]);
+            ImGui::PopStyleColor(4);
+            ImGui::PopID();
+        }
+        ImGui::PopID();
+
+        ImGui::SameLine();
+        ImGui::PushID("set2");
+        static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f };
+        const int rows = 3;
+        const ImVec2 small_slider_size(18, (float)(int)((160.0f - (rows - 1) * spacing) / rows));
+        for (int nx = 0; nx < 4; nx++)
+        {
+            if (nx > 0) ImGui::SameLine();
+            ImGui::BeginGroup();
+            for (int ny = 0; ny < rows; ny++)
+            {
+                ImGui::PushID(nx*rows+ny);
+                ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, "");
+                if (ImGui::IsItemActive() || ImGui::IsItemHovered())
+                    ImGui::SetTooltip("%.3f", values2[nx]);
+                ImGui::PopID();
+            }
+            ImGui::EndGroup();
+        }
+        ImGui::PopID();
+
+        ImGui::SameLine();
+        ImGui::PushID("set3");
+        for (int i = 0; i < 4; i++)
+        {
+            if (i > 0) ImGui::SameLine();
+            ImGui::PushID(i);
+            ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40);
+            ImGui::VSliderFloat("##v", ImVec2(40,160), &values[i], 0.0f, 1.0f, "%.2f\nsec");
+            ImGui::PopStyleVar();
+            ImGui::PopID();
+        }
+        ImGui::PopID();
+        ImGui::PopStyleVar();
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Drag and Drop"))
+    {
+        if (ImGui::TreeNode("Drag and drop in standard widgets"))
+        {
+            // ColorEdit widgets automatically act as drag source and drag target.
+            // They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F to allow your own widgets
+            // to use colors in their drag and drop interaction. Also see the demo in Color Picker -> Palette demo.
+            HelpMarker("You can drag from the colored squares.");
+            static float col1[3] = { 1.0f, 0.0f, 0.2f };
+            static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f };
+            ImGui::ColorEdit3("color 1", col1);
+            ImGui::ColorEdit4("color 2", col2);
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Drag and drop to copy/swap items"))
+        {
+            enum Mode
+            {
+                Mode_Copy,
+                Mode_Move,
+                Mode_Swap
+            };
+            static int mode = 0;
+            if (ImGui::RadioButton("Copy", mode == Mode_Copy)) { mode = Mode_Copy; } ImGui::SameLine();
+            if (ImGui::RadioButton("Move", mode == Mode_Move)) { mode = Mode_Move; } ImGui::SameLine();
+            if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; }
+            static const char* names[9] = { "Bobby", "Beatrice", "Betty", "Brianna", "Barry", "Bernard", "Bibi", "Blaine", "Bryn" };
+            for (int n = 0; n < IM_ARRAYSIZE(names); n++)
+            {
+                ImGui::PushID(n);
+                if ((n % 3) != 0)
+                    ImGui::SameLine();
+                ImGui::Button(names[n], ImVec2(60,60));
+
+                // Our buttons are both drag sources and drag targets here!
+                if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None))
+                {
+                    ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int));    // Set payload to carry the index of our item (could be anything)
+                    if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); }    // Display preview (could be anything, e.g. when dragging an image we could decide to display the filename and a small preview of the image, etc.)
+                    if (mode == Mode_Move) { ImGui::Text("Move %s", names[n]); }
+                    if (mode == Mode_Swap) { ImGui::Text("Swap %s", names[n]); }
+                    ImGui::EndDragDropSource();
+                }
+                if (ImGui::BeginDragDropTarget())
+                {
+                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DEMO_CELL"))
+                    {
+                        IM_ASSERT(payload->DataSize == sizeof(int));
+                        int payload_n = *(const int*)payload->Data;
+                        if (mode == Mode_Copy)
+                        {
+                            names[n] = names[payload_n];
+                        }
+                        if (mode == Mode_Move)
+                        {
+                            names[n] = names[payload_n];
+                            names[payload_n] = "";
+                        }
+                        if (mode == Mode_Swap)
+                        {
+                            const char* tmp = names[n];
+                            names[n] = names[payload_n];
+                            names[payload_n] = tmp;
+                        }
+                    }
+                    ImGui::EndDragDropTarget();
+                }
+                ImGui::PopID();
+            }
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Drag to reorder items (simple)"))
+        {
+            // Simple reordering
+            HelpMarker("We don't use the drag and drop api at all here! Instead we query when the item is held but not hovered, and order items accordingly.");
+            static const char* item_names[] = { "Item One", "Item Two", "Item Three", "Item Four", "Item Five" };
+            for (int n = 0; n < IM_ARRAYSIZE(item_names); n++)
+            {
+                const char* item = item_names[n];
+                ImGui::Selectable(item);
+
+                if (ImGui::IsItemActive() && !ImGui::IsItemHovered())
+                {
+                    int n_next = n + (ImGui::GetMouseDragDelta(0).y < 0.f ? -1 : 1);
+                    if (n_next >= 0 && n_next < IM_ARRAYSIZE(item_names))
+                    {
+                        item_names[n] = item_names[n_next];
+                        item_names[n_next] = item;
+                        ImGui::ResetMouseDragDelta();
+                    }
+                }
+            }
+            ImGui::TreePop();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Querying Status (Active/Focused/Hovered etc.)"))
+    {
+        // Submit an item (various types available) so we can query their status in the following block.
+        static int item_type = 1;
+        ImGui::Combo("Item Type", &item_type, "Text\0Button\0Button (w/ repeat)\0Checkbox\0SliderFloat\0InputText\0InputFloat\0InputFloat3\0ColorEdit4\0MenuItem\0TreeNode\0TreeNode (w/ double-click)\0ListBox\0", 20);
+        ImGui::SameLine();
+        HelpMarker("Testing how various types of items are interacting with the IsItemXXX functions.");
+        bool ret = false;
+        static bool b = false;
+        static float col4f[4] = { 1.0f, 0.5, 0.0f, 1.0f };
+        static char str[16] = {};
+        if (item_type == 0) { ImGui::Text("ITEM: Text"); }                                              // Testing text items with no identifier/interaction
+        if (item_type == 1) { ret = ImGui::Button("ITEM: Button"); }                                    // Testing button
+        if (item_type == 2) { ImGui::PushButtonRepeat(true); ret = ImGui::Button("ITEM: Button"); ImGui::PopButtonRepeat(); } // Testing button (with repeater)
+        if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); }                            // Testing checkbox
+        if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); }   // Testing basic item
+        if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); }  // Testing input text (which handles tabbing)
+        if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); }               // Testing +/- buttons on scalar input
+        if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); }                   // Testing multi-component items (IsItemXXX flags are reported merged)
+        if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
+        if (item_type == 9) { ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
+        if (item_type == 10){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); }     // Testing tree node
+        if (item_type == 11){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
+        if (item_type == 12){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", &current, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
+
+        // Display the value of IsItemHovered() and other common item state functions.
+        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
+        // Because BulletText is an item itself and that would affect the output of IsItemXXX functions,
+        // we query every state in a single call to avoid storing them and to simplify the code
+        ImGui::BulletText(
+            "Return value = %d\n"
+            "IsItemFocused() = %d\n"
+            "IsItemHovered() = %d\n"
+            "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n"
+            "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+            "IsItemHovered(_AllowWhenOverlapped) = %d\n"
+            "IsItemHovered(_RectOnly) = %d\n"
+            "IsItemActive() = %d\n"
+            "IsItemEdited() = %d\n"
+            "IsItemActivated() = %d\n"
+            "IsItemDeactivated() = %d\n"
+            "IsItemDeactivatedAfterEdit() = %d\n"
+            "IsItemVisible() = %d\n"
+            "IsItemClicked() = %d\n"
+            "IsItemToggledOpen() = %d\n"
+            "GetItemRectMin() = (%.1f, %.1f)\n"
+            "GetItemRectMax() = (%.1f, %.1f)\n"
+            "GetItemRectSize() = (%.1f, %.1f)",
+            ret,
+            ImGui::IsItemFocused(),
+            ImGui::IsItemHovered(),
+            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped),
+            ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly),
+            ImGui::IsItemActive(),
+            ImGui::IsItemEdited(),
+            ImGui::IsItemActivated(),
+            ImGui::IsItemDeactivated(),
+            ImGui::IsItemDeactivatedAfterEdit(),
+            ImGui::IsItemVisible(),
+            ImGui::IsItemClicked(),
+            ImGui::IsItemToggledOpen(),
+            ImGui::GetItemRectMin().x, ImGui::GetItemRectMin().y,
+            ImGui::GetItemRectMax().x, ImGui::GetItemRectMax().y,
+            ImGui::GetItemRectSize().x, ImGui::GetItemRectSize().y
+        );
+
+        static bool embed_all_inside_a_child_window = false;
+        ImGui::Checkbox("Embed everything inside a child window (for additional testing)", &embed_all_inside_a_child_window);
+        if (embed_all_inside_a_child_window)
+            ImGui::BeginChild("outer_child", ImVec2(0, ImGui::GetFontSize() * 20), true);
+
+        // Testing IsWindowFocused() function with its various flags.
+        // Note that the ImGuiFocusedFlags_XXX flags can be combined.
+        ImGui::BulletText(
+            "IsWindowFocused() = %d\n"
+            "IsWindowFocused(_ChildWindows) = %d\n"
+            "IsWindowFocused(_ChildWindows|_RootWindow) = %d\n"
+            "IsWindowFocused(_RootWindow) = %d\n"
+            "IsWindowFocused(_AnyWindow) = %d\n",
+            ImGui::IsWindowFocused(),
+            ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows),
+            ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_RootWindow),
+            ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow),
+            ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow));
+
+        // Testing IsWindowHovered() function with its various flags.
+        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
+        ImGui::BulletText(
+            "IsWindowHovered() = %d\n"
+            "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
+            "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+            "IsWindowHovered(_ChildWindows) = %d\n"
+            "IsWindowHovered(_ChildWindows|_RootWindow) = %d\n"
+            "IsWindowHovered(_ChildWindows|_AllowWhenBlockedByPopup) = %d\n"
+            "IsWindowHovered(_RootWindow) = %d\n"
+            "IsWindowHovered(_AnyWindow) = %d\n",
+            ImGui::IsWindowHovered(),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow),
+            ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow));
+
+        ImGui::BeginChild("child", ImVec2(0, 50), true);
+        ImGui::Text("This is another child window for testing the _ChildWindows flag.");
+        ImGui::EndChild();
+        if (embed_all_inside_a_child_window)
+            ImGui::EndChild();
+
+        static char dummy_str[] = "This is a dummy field to be able to tab-out of the widgets above.";
+        ImGui::InputText("dummy", dummy_str, IM_ARRAYSIZE(dummy_str), ImGuiInputTextFlags_ReadOnly);
+
+        // Calling IsItemHovered() after begin returns the hovered status of the title bar.
+        // This is useful in particular if you want to create a context menu (with BeginPopupContextItem) associated to the title bar of a window.
+        static bool test_window = false;
+        ImGui::Checkbox("Hovered/Active tests after Begin() for title bar testing", &test_window);
+        if (test_window)
+        {
+            ImGui::Begin("Title bar Hovered/Active tests", &test_window);
+            if (ImGui::BeginPopupContextItem()) // <-- This is using IsItemHovered()
+            {
+                if (ImGui::MenuItem("Close")) { test_window = false; }
+                ImGui::EndPopup();
+            }
+            ImGui::Text(
+                "IsItemHovered() after begin = %d (== is title bar hovered)\n"
+                "IsItemActive() after begin = %d (== is window being clicked/moved)\n",
+                ImGui::IsItemHovered(), ImGui::IsItemActive());
+            ImGui::End();
+        }
+
+        ImGui::TreePop();
+    }
+}
+
+static void ShowDemoWindowLayout()
+{
+    if (!ImGui::CollapsingHeader("Layout"))
+        return;
+
+    if (ImGui::TreeNode("Child windows"))
+    {
+        HelpMarker("Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window.");
+        static bool disable_mouse_wheel = false;
+        static bool disable_menu = false;
+        ImGui::Checkbox("Disable Mouse Wheel", &disable_mouse_wheel);
+        ImGui::Checkbox("Disable Menu", &disable_menu);
+
+        static int line = 50;
+        bool goto_line = ImGui::Button("Goto");
+        ImGui::SameLine();
+        ImGui::SetNextItemWidth(100);
+        goto_line |= ImGui::InputInt("##Line", &line, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue);
+
+        // Child 1: no border, enable horizontal scrollbar
+        {
+            ImGuiWindowFlags window_flags = ImGuiWindowFlags_HorizontalScrollbar | (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0);
+            ImGui::BeginChild("ChildL", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f, 260), false, window_flags);
+            for (int i = 0; i < 100; i++)
+            {
+                ImGui::Text("%04d: scrollable region", i);
+                if (goto_line && line == i)
+                    ImGui::SetScrollHereY();
+            }
+            if (goto_line && line >= 100)
+                ImGui::SetScrollHereY();
+            ImGui::EndChild();
+        }
+
+        ImGui::SameLine();
+
+        // Child 2: rounded border
+        {
+            ImGuiWindowFlags window_flags = (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0) | (disable_menu ? 0 : ImGuiWindowFlags_MenuBar);
+            ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f);
+            ImGui::BeginChild("ChildR", ImVec2(0, 260), true, window_flags);
+            if (!disable_menu && ImGui::BeginMenuBar())
+            {
+                if (ImGui::BeginMenu("Menu"))
+                {
+                    ShowExampleMenuFile();
+                    ImGui::EndMenu();
+                }
+                ImGui::EndMenuBar();
+            }
+            ImGui::Columns(2);
+            for (int i = 0; i < 100; i++)
+            {
+                char buf[32];
+                sprintf(buf, "%03d", i);
+                ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
+                ImGui::NextColumn();
+            }
+            ImGui::EndChild();
+            ImGui::PopStyleVar();
+        }
+
+        ImGui::Separator();
+
+        // Demonstrate a few extra things
+        // - Changing ImGuiCol_ChildBg (which is transparent black in default styles)
+        // - Using SetCursorPos() to position the child window (because the child window is an item from the POV of the parent window)
+        //   You can also call SetNextWindowPos() to position the child window. The parent window will effectively layout from this position.
+        // - Using ImGui::GetItemRectMin/Max() to query the "item" state (because the child window is an item from the POV of the parent window)
+        //   See "Widgets" -> "Querying Status (Active/Focused/Hovered etc.)" section for more details about this.
+        {
+            ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10);
+            ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(255, 0, 0, 100));
+            ImGui::BeginChild("Red", ImVec2(200, 100), true, ImGuiWindowFlags_None);
+            for (int n = 0; n < 50; n++)
+                ImGui::Text("Some test %d", n);
+            ImGui::EndChild();
+            ImVec2 child_rect_min = ImGui::GetItemRectMin();
+            ImVec2 child_rect_max = ImGui::GetItemRectMax();
+            ImGui::PopStyleColor();
+            ImGui::Text("Rect of child window is: (%.0f,%.0f) (%.0f,%.0f)", child_rect_min.x, child_rect_min.y, child_rect_max.x, child_rect_max.y);
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Widgets Width"))
+    {
+        // Use SetNextItemWidth() to set the width of a single upcoming item.
+        // Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
+        static float f = 0.0f;
+        ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
+        ImGui::SameLine(); HelpMarker("Fixed width.");
+        ImGui::SetNextItemWidth(100);
+        ImGui::DragFloat("float##1", &f);
+
+        ImGui::Text("SetNextItemWidth/PushItemWidth(GetWindowWidth() * 0.5f)");
+        ImGui::SameLine(); HelpMarker("Half of window width.");
+        ImGui::SetNextItemWidth(ImGui::GetWindowWidth() * 0.5f);
+        ImGui::DragFloat("float##2", &f);
+
+        ImGui::Text("SetNextItemWidth/PushItemWidth(GetContentRegionAvail().x * 0.5f)");
+        ImGui::SameLine(); HelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)");
+        ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.5f);
+        ImGui::DragFloat("float##3", &f);
+
+        ImGui::Text("SetNextItemWidth/PushItemWidth(-100)");
+        ImGui::SameLine(); HelpMarker("Align to right edge minus 100");
+        ImGui::SetNextItemWidth(-100);
+        ImGui::DragFloat("float##4", &f);
+
+        // Demonstrate using PushItemWidth to surround three items. Calling SetNextItemWidth() before each of them would have the same effect.
+        ImGui::Text("SetNextItemWidth/PushItemWidth(-1)");
+        ImGui::SameLine(); HelpMarker("Align to right edge");
+        ImGui::PushItemWidth(-1);
+        ImGui::DragFloat("##float5a", &f);
+        ImGui::DragFloat("##float5b", &f);
+        ImGui::DragFloat("##float5c", &f);
+        ImGui::PopItemWidth();
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Basic Horizontal Layout"))
+    {
+        ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)");
+
+        // Text
+        ImGui::Text("Two items: Hello"); ImGui::SameLine();
+        ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
+
+        // Adjust spacing
+        ImGui::Text("More spacing: Hello"); ImGui::SameLine(0, 20);
+        ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
+
+        // Button
+        ImGui::AlignTextToFramePadding();
+        ImGui::Text("Normal buttons"); ImGui::SameLine();
+        ImGui::Button("Banana"); ImGui::SameLine();
+        ImGui::Button("Apple"); ImGui::SameLine();
+        ImGui::Button("Corniflower");
+
+        // Button
+        ImGui::Text("Small buttons"); ImGui::SameLine();
+        ImGui::SmallButton("Like this one"); ImGui::SameLine();
+        ImGui::Text("can fit within a text block.");
+
+        // Aligned to arbitrary position. Easy/cheap column.
+        ImGui::Text("Aligned");
+        ImGui::SameLine(150); ImGui::Text("x=150");
+        ImGui::SameLine(300); ImGui::Text("x=300");
+        ImGui::Text("Aligned");
+        ImGui::SameLine(150); ImGui::SmallButton("x=150");
+        ImGui::SameLine(300); ImGui::SmallButton("x=300");
+
+        // Checkbox
+        static bool c1 = false, c2 = false, c3 = false, c4 = false;
+        ImGui::Checkbox("My", &c1); ImGui::SameLine();
+        ImGui::Checkbox("Tailor", &c2); ImGui::SameLine();
+        ImGui::Checkbox("Is", &c3); ImGui::SameLine();
+        ImGui::Checkbox("Rich", &c4);
+
+        // Various
+        static float f0 = 1.0f, f1 = 2.0f, f2 = 3.0f;
+        ImGui::PushItemWidth(80);
+        const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD" };
+        static int item = -1;
+        ImGui::Combo("Combo", &item, items, IM_ARRAYSIZE(items)); ImGui::SameLine();
+        ImGui::SliderFloat("X", &f0, 0.0f, 5.0f); ImGui::SameLine();
+        ImGui::SliderFloat("Y", &f1, 0.0f, 5.0f); ImGui::SameLine();
+        ImGui::SliderFloat("Z", &f2, 0.0f, 5.0f);
+        ImGui::PopItemWidth();
+
+        ImGui::PushItemWidth(80);
+        ImGui::Text("Lists:");
+        static int selection[4] = { 0, 1, 2, 3 };
+        for (int i = 0; i < 4; i++)
+        {
+            if (i > 0) ImGui::SameLine();
+            ImGui::PushID(i);
+            ImGui::ListBox("", &selection[i], items, IM_ARRAYSIZE(items));
+            ImGui::PopID();
+            //if (ImGui::IsItemHovered()) ImGui::SetTooltip("ListBox %d hovered", i);
+        }
+        ImGui::PopItemWidth();
+
+        // Dummy
+        ImVec2 button_sz(40, 40);
+        ImGui::Button("A", button_sz); ImGui::SameLine();
+        ImGui::Dummy(button_sz); ImGui::SameLine();
+        ImGui::Button("B", button_sz);
+
+        // Manually wrapping (we should eventually provide this as an automatic layout feature, but for now you can do it manually)
+        ImGui::Text("Manually wrapping:");
+        ImGuiStyle& style = ImGui::GetStyle();
+        int buttons_count = 20;
+        float window_visible_x2 = ImGui::GetWindowPos().x + ImGui::GetWindowContentRegionMax().x;
+        for (int n = 0; n < buttons_count; n++)
+        {
+            ImGui::PushID(n);
+            ImGui::Button("Box", button_sz);
+            float last_button_x2 = ImGui::GetItemRectMax().x;
+            float next_button_x2 = last_button_x2 + style.ItemSpacing.x + button_sz.x; // Expected position if next button was on same line
+            if (n + 1 < buttons_count && next_button_x2 < window_visible_x2)
+                ImGui::SameLine();
+            ImGui::PopID();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Tabs"))
+    {
+        if (ImGui::TreeNode("Basic"))
+        {
+            ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_None;
+            if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+            {
+                if (ImGui::BeginTabItem("Avocado"))
+                {
+                    ImGui::Text("This is the Avocado tab!\nblah blah blah blah blah");
+                    ImGui::EndTabItem();
+                }
+                if (ImGui::BeginTabItem("Broccoli"))
+                {
+                    ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah");
+                    ImGui::EndTabItem();
+                }
+                if (ImGui::BeginTabItem("Cucumber"))
+                {
+                    ImGui::Text("This is the Cucumber tab!\nblah blah blah blah blah");
+                    ImGui::EndTabItem();
+                }
+                ImGui::EndTabBar();
+            }
+            ImGui::Separator();
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Advanced & Close Button"))
+        {
+            // Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0).
+            static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable;
+            ImGui::CheckboxFlags("ImGuiTabBarFlags_Reorderable", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_Reorderable);
+            ImGui::CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_AutoSelectNewTabs);
+            ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton);
+            ImGui::CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton);
+            if ((tab_bar_flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+                tab_bar_flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+            if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown))
+                tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown);
+            if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll))
+                tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll);
+
+            // Tab Bar
+            const char* names[4] = { "Artichoke", "Beetroot", "Celery", "Daikon" };
+            static bool opened[4] = { true, true, true, true }; // Persistent user state
+            for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+            {
+                if (n > 0) { ImGui::SameLine(); }
+                ImGui::Checkbox(names[n], &opened[n]);
+            }
+
+            // Passing a bool* to BeginTabItem() is similar to passing one to Begin(): the underlying bool will be set to false when the tab is closed.
+            if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+            {
+                for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+                    if (opened[n] && ImGui::BeginTabItem(names[n], &opened[n], ImGuiTabItemFlags_None))
+                    {
+                        ImGui::Text("This is the %s tab!", names[n]);
+                        if (n & 1)
+                            ImGui::Text("I am an odd tab.");
+                        ImGui::EndTabItem();
+                    }
+                ImGui::EndTabBar();
+            }
+            ImGui::Separator();
+            ImGui::TreePop();
+        }
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Groups"))
+    {
+        HelpMarker("BeginGroup() basically locks the horizontal position for new line. EndGroup() bundles the whole group so that you can use \"item\" functions such as IsItemHovered()/IsItemActive() or SameLine() etc. on the whole group.");
+        ImGui::BeginGroup();
+        {
+            ImGui::BeginGroup();
+            ImGui::Button("AAA");
+            ImGui::SameLine();
+            ImGui::Button("BBB");
+            ImGui::SameLine();
+            ImGui::BeginGroup();
+            ImGui::Button("CCC");
+            ImGui::Button("DDD");
+            ImGui::EndGroup();
+            ImGui::SameLine();
+            ImGui::Button("EEE");
+            ImGui::EndGroup();
+            if (ImGui::IsItemHovered())
+                ImGui::SetTooltip("First group hovered");
+        }
+        // Capture the group size and create widgets using the same size
+        ImVec2 size = ImGui::GetItemRectSize();
+        const float values[5] = { 0.5f, 0.20f, 0.80f, 0.60f, 0.25f };
+        ImGui::PlotHistogram("##values", values, IM_ARRAYSIZE(values), 0, NULL, 0.0f, 1.0f, size);
+
+        ImGui::Button("ACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y));
+        ImGui::SameLine();
+        ImGui::Button("REACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y));
+        ImGui::EndGroup();
+        ImGui::SameLine();
+
+        ImGui::Button("LEVERAGE\nBUZZWORD", size);
+        ImGui::SameLine();
+
+        if (ImGui::ListBoxHeader("List", size))
+        {
+            ImGui::Selectable("Selected", true);
+            ImGui::Selectable("Not Selected", false);
+            ImGui::ListBoxFooter();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Text Baseline Alignment"))
+    {
+        {
+            ImGui::BulletText("Text baseline:");
+            ImGui::SameLine();
+            HelpMarker("This is testing the vertical alignment that gets applied on text to keep it aligned with widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets.");
+            ImGui::Indent();
+
+            ImGui::Text("KO Blahblah"); ImGui::SameLine();
+            ImGui::Button("Some framed item"); ImGui::SameLine();
+            HelpMarker("Baseline of button will look misaligned with text..");
+
+            // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+            // Because we don't know what's coming after the Text() statement, we need to move the text baseline down by FramePadding.y
+            ImGui::AlignTextToFramePadding();
+            ImGui::Text("OK Blahblah"); ImGui::SameLine();
+            ImGui::Button("Some framed item"); ImGui::SameLine();
+            HelpMarker("We call AlignTextToFramePadding() to vertically align the text baseline by +FramePadding.y");
+
+            // SmallButton() uses the same vertical padding as Text
+            ImGui::Button("TEST##1"); ImGui::SameLine();
+            ImGui::Text("TEST"); ImGui::SameLine();
+            ImGui::SmallButton("TEST##2");
+
+            // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+            ImGui::AlignTextToFramePadding();
+            ImGui::Text("Text aligned to framed item"); ImGui::SameLine();
+            ImGui::Button("Item##1"); ImGui::SameLine();
+            ImGui::Text("Item"); ImGui::SameLine();
+            ImGui::SmallButton("Item##2"); ImGui::SameLine();
+            ImGui::Button("Item##3");
+
+            ImGui::Unindent();
+        }
+
+        ImGui::Spacing();
+
+        {
+            ImGui::BulletText("Multi-line text:");
+            ImGui::Indent();
+            ImGui::Text("One\nTwo\nThree"); ImGui::SameLine();
+            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+            ImGui::Text("Banana");
+
+            ImGui::Text("Banana"); ImGui::SameLine();
+            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+            ImGui::Text("One\nTwo\nThree");
+
+            ImGui::Button("HOP##1"); ImGui::SameLine();
+            ImGui::Text("Banana"); ImGui::SameLine();
+            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+            ImGui::Text("Banana");
+
+            ImGui::Button("HOP##2"); ImGui::SameLine();
+            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+            ImGui::Text("Banana");
+            ImGui::Unindent();
+        }
+
+        ImGui::Spacing();
+
+        {
+            ImGui::BulletText("Misc items:");
+            ImGui::Indent();
+
+            // SmallButton() sets FramePadding to zero. Text baseline is aligned to match baseline of previous Button
+            ImGui::Button("80x80", ImVec2(80, 80));
+            ImGui::SameLine();
+            ImGui::Button("50x50", ImVec2(50, 50));
+            ImGui::SameLine();
+            ImGui::Button("Button()");
+            ImGui::SameLine();
+            ImGui::SmallButton("SmallButton()");
+
+            // Tree
+            const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
+            ImGui::Button("Button##1");
+            ImGui::SameLine(0.0f, spacing);
+            if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); }    // Dummy tree data
+
+            ImGui::AlignTextToFramePadding();           // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
+            bool node_open = ImGui::TreeNode("Node##2");// Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content.
+            ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
+            if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); }   // Dummy tree data
+
+            // Bullet
+            ImGui::Button("Button##3");
+            ImGui::SameLine(0.0f, spacing);
+            ImGui::BulletText("Bullet text");
+
+            ImGui::AlignTextToFramePadding();
+            ImGui::BulletText("Node");
+            ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
+            ImGui::Unindent();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Scrolling"))
+    {
+        // Vertical scroll functions
+        HelpMarker("Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given vertical position.");
+
+        static int track_item = 50;
+        static bool enable_track = true;
+        static bool enable_extra_decorations = false;
+        static float scroll_to_off_px = 0.0f;
+        static float scroll_to_pos_px = 200.0f;
+
+        ImGui::Checkbox("Decoration", &enable_extra_decorations);
+        ImGui::SameLine();
+        HelpMarker("We expose this for testing because scrolling sometimes had issues with window decoration such as menu-bars.");
+
+        ImGui::Checkbox("Track", &enable_track);
+        ImGui::PushItemWidth(100);
+        ImGui::SameLine(140); enable_track |= ImGui::DragInt("##item", &track_item, 0.25f, 0, 99, "Item = %d");
+
+        bool scroll_to_off = ImGui::Button("Scroll Offset");
+        ImGui::SameLine(140); scroll_to_off |= ImGui::DragFloat("##off", &scroll_to_off_px, 1.00f, 0, FLT_MAX, "+%.0f px");
+
+        bool scroll_to_pos = ImGui::Button("Scroll To Pos");
+        ImGui::SameLine(140); scroll_to_pos |= ImGui::DragFloat("##pos", &scroll_to_pos_px, 1.00f, -10, FLT_MAX, "X/Y = %.0f px");
+        ImGui::PopItemWidth();
+
+        if (scroll_to_off || scroll_to_pos)
+            enable_track = false;
+
+        ImGuiStyle& style = ImGui::GetStyle();
+        float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5;
+        if (child_w < 1.0f)
+            child_w = 1.0f;
+        ImGui::PushID("##VerticalScrolling");
+        for (int i = 0; i < 5; i++)
+        {
+            if (i > 0) ImGui::SameLine();
+            ImGui::BeginGroup();
+            const char* names[] = { "Top", "25%", "Center", "75%", "Bottom" };
+            ImGui::TextUnformatted(names[i]);
+
+            ImGuiWindowFlags child_flags = enable_extra_decorations ? ImGuiWindowFlags_MenuBar : 0;
+            bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(child_w, 200.0f), true, child_flags);
+            if (ImGui::BeginMenuBar())
+            {
+                ImGui::TextUnformatted("abc");
+                ImGui::EndMenuBar();
+            }
+            if (scroll_to_off)
+                ImGui::SetScrollY(scroll_to_off_px);
+            if (scroll_to_pos)
+                ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_pos_px, i * 0.25f);
+            if (window_visible) // Avoid calling SetScrollHereY when running with culled items
+            {
+                for (int item = 0; item < 100; item++)
+                {
+                    if (enable_track && item == track_item)
+                    {
+                        ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
+                        ImGui::SetScrollHereY(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom
+                    }
+                    else
+                    {
+                        ImGui::Text("Item %d", item);
+                    }
+                }
+            }
+            float scroll_y = ImGui::GetScrollY();
+            float scroll_max_y = ImGui::GetScrollMaxY();
+            ImGui::EndChild();
+            ImGui::Text("%.0f/%.0f", scroll_y, scroll_max_y);
+            ImGui::EndGroup();
+        }
+        ImGui::PopID();
+
+        // Horizontal scroll functions
+        ImGui::Spacing();
+        HelpMarker("Use SetScrollHereX() or SetScrollFromPosX() to scroll to a given horizontal position.\n\nUsing the \"Scroll To Pos\" button above will make the discontinuity at edges visible: scrolling to the top/bottom/left/right-most item will add an additional WindowPadding to reflect on reaching the edge of the list.\n\nBecause the clipping rectangle of most window hides half worth of WindowPadding on the left/right, using SetScrollFromPosX(+1) will usually result in clipped text whereas the equivalent SetScrollFromPosY(+1) wouldn't.");
+        ImGui::PushID("##HorizontalScrolling");
+        for (int i = 0; i < 5; i++)
+        {
+            float child_height = ImGui::GetTextLineHeight() + style.ScrollbarSize + style.WindowPadding.y * 2.0f;
+            ImGuiWindowFlags child_flags = ImGuiWindowFlags_HorizontalScrollbar | (enable_extra_decorations ? ImGuiWindowFlags_AlwaysVerticalScrollbar : 0);
+            bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(-100, child_height), true, child_flags);
+            if (scroll_to_off)
+                ImGui::SetScrollX(scroll_to_off_px);
+            if (scroll_to_pos)
+                ImGui::SetScrollFromPosX(ImGui::GetCursorStartPos().x + scroll_to_pos_px, i * 0.25f);
+            if (window_visible) // Avoid calling SetScrollHereY when running with culled items
+            {
+                for (int item = 0; item < 100; item++)
+                {
+                    if (enable_track && item == track_item)
+                    {
+                        ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
+                        ImGui::SetScrollHereX(i * 0.25f); // 0.0f:left, 0.5f:center, 1.0f:right
+                    }
+                    else
+                    {
+                        ImGui::Text("Item %d", item);
+                    }
+                    ImGui::SameLine();
+                }
+            }
+            float scroll_x = ImGui::GetScrollX();
+            float scroll_max_x = ImGui::GetScrollMaxX();
+            ImGui::EndChild();
+            ImGui::SameLine();
+            const char* names[] = { "Left", "25%", "Center", "75%", "Right" };
+            ImGui::Text("%s\n%.0f/%.0f", names[i], scroll_x, scroll_max_x);
+            ImGui::Spacing();
+        }
+        ImGui::PopID();
+
+        // Miscellaneous Horizontal Scrolling Demo
+        HelpMarker("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag.\n\nYou may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin().");
+        static int lines = 7;
+        ImGui::SliderInt("Lines", &lines, 1, 15);
+        ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
+        ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 1.0f));
+        ImGui::BeginChild("scrolling", ImVec2(0, ImGui::GetFrameHeightWithSpacing() * 7 + 30), true, ImGuiWindowFlags_HorizontalScrollbar);
+        for (int line = 0; line < lines; line++)
+        {
+            // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off
+            // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API)
+            int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3);
+            for (int n = 0; n < num_buttons; n++)
+            {
+                if (n > 0) ImGui::SameLine();
+                ImGui::PushID(n + line * 1000);
+                char num_buf[16];
+                sprintf(num_buf, "%d", n);
+                const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf;
+                float hue = n*0.05f;
+                ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f));
+                ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f));
+                ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f));
+                ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f));
+                ImGui::PopStyleColor(3);
+                ImGui::PopID();
+            }
+        }
+        float scroll_x = ImGui::GetScrollX();
+        float scroll_max_x = ImGui::GetScrollMaxX();
+        ImGui::EndChild();
+        ImGui::PopStyleVar(2);
+        float scroll_x_delta = 0.0f;
+        ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
+        ImGui::Text("Scroll from code"); ImGui::SameLine();
+        ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
+        ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x);
+        if (scroll_x_delta != 0.0f)
+        {
+            ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window)
+            ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta);
+            ImGui::EndChild();
+        }
+        ImGui::Spacing();
+
+        static bool show_horizontal_contents_size_demo_window = false;
+        ImGui::Checkbox("Show Horizontal contents size demo window", &show_horizontal_contents_size_demo_window);
+
+        if (show_horizontal_contents_size_demo_window)
+        {
+            static bool show_h_scrollbar = true;
+            static bool show_button = true;
+            static bool show_tree_nodes = true;
+            static bool show_text_wrapped = false;
+            static bool show_columns = true;
+            static bool show_tab_bar = true;
+            static bool show_child = false;
+            static bool explicit_content_size = false;
+            static float contents_size_x = 300.0f;
+            if (explicit_content_size)
+                ImGui::SetNextWindowContentSize(ImVec2(contents_size_x, 0.0f));
+            ImGui::Begin("Horizontal contents size demo window", &show_horizontal_contents_size_demo_window, show_h_scrollbar ? ImGuiWindowFlags_HorizontalScrollbar : 0);
+            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2, 0));
+            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 0));
+            HelpMarker("Test of different widgets react and impact the work rectangle growing when horizontal scrolling is enabled.\n\nUse 'Metrics->Tools->Show windows rectangles' to visualize rectangles.");
+            ImGui::Checkbox("H-scrollbar", &show_h_scrollbar);
+            ImGui::Checkbox("Button", &show_button);            // Will grow contents size (unless explicitly overwritten)
+            ImGui::Checkbox("Tree nodes", &show_tree_nodes);    // Will grow contents size and display highlight over full width
+            ImGui::Checkbox("Text wrapped", &show_text_wrapped);// Will grow and use contents size
+            ImGui::Checkbox("Columns", &show_columns);          // Will use contents size
+            ImGui::Checkbox("Tab bar", &show_tab_bar);          // Will use contents size
+            ImGui::Checkbox("Child", &show_child);              // Will grow and use contents size
+            ImGui::Checkbox("Explicit content size", &explicit_content_size);
+            ImGui::Text("Scroll %.1f/%.1f %.1f/%.1f", ImGui::GetScrollX(), ImGui::GetScrollMaxX(), ImGui::GetScrollY(), ImGui::GetScrollMaxY());
+            if (explicit_content_size)
+            {
+                ImGui::SameLine();
+                ImGui::SetNextItemWidth(100);
+                ImGui::DragFloat("##csx", &contents_size_x);
+                ImVec2 p = ImGui::GetCursorScreenPos();
+                ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + 10, p.y + 10), IM_COL32_WHITE);
+                ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(p.x + contents_size_x - 10, p.y), ImVec2(p.x + contents_size_x, p.y + 10), IM_COL32_WHITE);
+                ImGui::Dummy(ImVec2(0, 10));
+            }
+            ImGui::PopStyleVar(2);
+            ImGui::Separator();
+            if (show_button)
+            {
+                ImGui::Button("this is a 300-wide button", ImVec2(300, 0));
+            }
+            if (show_tree_nodes)
+            {
+                bool open = true;
+                if (ImGui::TreeNode("this is a tree node"))
+                {
+                    if (ImGui::TreeNode("another one of those tree node..."))
+                    {
+                        ImGui::Text("Some tree contents");
+                        ImGui::TreePop();
+                    }
+                    ImGui::TreePop();
+                }
+                ImGui::CollapsingHeader("CollapsingHeader", &open);
+            }
+            if (show_text_wrapped)
+            {
+                ImGui::TextWrapped("This text should automatically wrap on the edge of the work rectangle.");
+            }
+            if (show_columns)
+            {
+                ImGui::Columns(4);
+                for (int n = 0; n < 4; n++)
+                {
+                    ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+                    ImGui::NextColumn();
+                }
+                ImGui::Columns(1);
+            }
+            if (show_tab_bar && ImGui::BeginTabBar("Hello"))
+            {
+                if (ImGui::BeginTabItem("OneOneOne")) { ImGui::EndTabItem(); }
+                if (ImGui::BeginTabItem("TwoTwoTwo")) { ImGui::EndTabItem(); }
+                if (ImGui::BeginTabItem("ThreeThreeThree")) { ImGui::EndTabItem(); }
+                if (ImGui::BeginTabItem("FourFourFour")) { ImGui::EndTabItem(); }
+                ImGui::EndTabBar();
+            }
+            if (show_child)
+            {
+                ImGui::BeginChild("child", ImVec2(0,0), true);
+                ImGui::EndChild();
+            }
+            ImGui::End();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Clipping"))
+    {
+        static ImVec2 size(100, 100), offset(50, 20);
+        ImGui::TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost.");
+        ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f");
+        ImGui::TextWrapped("(Click and drag)");
+        ImVec2 pos = ImGui::GetCursorScreenPos();
+        ImVec4 clip_rect(pos.x, pos.y, pos.x + size.x, pos.y + size.y);
+        ImGui::InvisibleButton("##dummy", size);
+        if (ImGui::IsItemActive() && ImGui::IsMouseDragging(0)) { offset.x += ImGui::GetIO().MouseDelta.x; offset.y += ImGui::GetIO().MouseDelta.y; }
+        ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), IM_COL32(90, 90, 120, 255));
+        ImGui::GetWindowDrawList()->AddText(ImGui::GetFont(), ImGui::GetFontSize()*2.0f, ImVec2(pos.x + offset.x, pos.y + offset.y), IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", NULL, 0.0f, &clip_rect);
+        ImGui::TreePop();
+    }
+}
+
+static void ShowDemoWindowPopups()
+{
+    if (!ImGui::CollapsingHeader("Popups & Modal windows"))
+        return;
+
+    // The properties of popups windows are:
+    // - They block normal mouse hovering detection outside them. (*)
+    // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+    // - Their visibility state (~bool) is held internally by Dear ImGui instead of being held by the programmer as we are used to with regular Begin() calls.
+    //   User can manipulate the visibility state by calling OpenPopup().
+    // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
+    // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
+
+    // Typical use for regular windows:
+    //   bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End();
+    // Typical use for popups:
+    //   if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); }
+
+    // With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state.
+    // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below.
+
+    if (ImGui::TreeNode("Popups"))
+    {
+        ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it.");
+
+        static int selected_fish = -1;
+        const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" };
+        static bool toggles[] = { true, false, false, false, false };
+
+        // Simple selection popup
+        // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label)
+        if (ImGui::Button("Select.."))
+            ImGui::OpenPopup("my_select_popup");
+        ImGui::SameLine();
+        ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
+        if (ImGui::BeginPopup("my_select_popup"))
+        {
+            ImGui::Text("Aquarium");
+            ImGui::Separator();
+            for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+                if (ImGui::Selectable(names[i]))
+                    selected_fish = i;
+            ImGui::EndPopup();
+        }
+
+        // Showing a menu with toggles
+        if (ImGui::Button("Toggle.."))
+            ImGui::OpenPopup("my_toggle_popup");
+        if (ImGui::BeginPopup("my_toggle_popup"))
+        {
+            for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+                ImGui::MenuItem(names[i], "", &toggles[i]);
+            if (ImGui::BeginMenu("Sub-menu"))
+            {
+                ImGui::MenuItem("Click me");
+                ImGui::EndMenu();
+            }
+
+            ImGui::Separator();
+            ImGui::Text("Tooltip here");
+            if (ImGui::IsItemHovered())
+                ImGui::SetTooltip("I am a tooltip over a popup");
+
+            if (ImGui::Button("Stacked Popup"))
+                ImGui::OpenPopup("another popup");
+            if (ImGui::BeginPopup("another popup"))
+            {
+                for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+                    ImGui::MenuItem(names[i], "", &toggles[i]);
+                if (ImGui::BeginMenu("Sub-menu"))
+                {
+                    ImGui::MenuItem("Click me");
+                    if (ImGui::Button("Stacked Popup"))
+                        ImGui::OpenPopup("another popup");
+                    if (ImGui::BeginPopup("another popup"))
+                    {
+                        ImGui::Text("I am the last one here.");
+                        ImGui::EndPopup();
+                    }
+                    ImGui::EndMenu();
+                }
+                ImGui::EndPopup();
+            }
+            ImGui::EndPopup();
+        }
+
+        // Call the more complete ShowExampleMenuFile which we use in various places of this demo
+        if (ImGui::Button("File Menu.."))
+            ImGui::OpenPopup("my_file_popup");
+        if (ImGui::BeginPopup("my_file_popup"))
+        {
+            ShowExampleMenuFile();
+            ImGui::EndPopup();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Context menus"))
+    {
+        // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
+        //    if (IsItemHovered() && IsMouseReleased(0))
+        //       OpenPopup(id);
+        //    return BeginPopup(id);
+        // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation.
+        static float value = 0.5f;
+        ImGui::Text("Value = %.3f (<-- right-click here)", value);
+        if (ImGui::BeginPopupContextItem("item context menu"))
+        {
+            if (ImGui::Selectable("Set to zero")) value = 0.0f;
+            if (ImGui::Selectable("Set to PI")) value = 3.1415f;
+            ImGui::SetNextItemWidth(-1);
+            ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
+            ImGui::EndPopup();
+        }
+
+        // We can also use OpenPopupOnItemClick() which is the same as BeginPopupContextItem() but without the Begin call.
+        // So here we will make it that clicking on the text field with the right mouse button (1) will toggle the visibility of the popup above.
+        ImGui::Text("(You can also right-click me to open the same popup as above.)");
+        ImGui::OpenPopupOnItemClick("item context menu", 1);
+
+        // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
+        // BeginPopupContextItem() will use the last item ID as the popup ID.
+        // In addition here, we want to include your editable label inside the button label. We use the ### operator to override the ID (read FAQ about ID for details)
+        static char name[32] = "Label1";
+        char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
+        ImGui::Button(buf);
+        if (ImGui::BeginPopupContextItem())
+        {
+            ImGui::Text("Edit name:");
+            ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
+            if (ImGui::Button("Close"))
+                ImGui::CloseCurrentPopup();
+            ImGui::EndPopup();
+        }
+        ImGui::SameLine(); ImGui::Text("(<-- right-click here)");
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Modals"))
+    {
+        ImGui::TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window.");
+
+        if (ImGui::Button("Delete.."))
+            ImGui::OpenPopup("Delete?");
+
+        if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
+        {
+            ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
+            ImGui::Separator();
+
+            //static int dummy_i = 0;
+            //ImGui::Combo("Combo", &dummy_i, "Delete\0Delete harder\0");
+
+            static bool dont_ask_me_next_time = false;
+            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
+            ImGui::Checkbox("Don't ask me next time", &dont_ask_me_next_time);
+            ImGui::PopStyleVar();
+
+            if (ImGui::Button("OK", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
+            ImGui::SetItemDefaultFocus();
+            ImGui::SameLine();
+            if (ImGui::Button("Cancel", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
+            ImGui::EndPopup();
+        }
+
+        if (ImGui::Button("Stacked modals.."))
+            ImGui::OpenPopup("Stacked 1");
+        if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar))
+        {
+            if (ImGui::BeginMenuBar())
+            {
+                if (ImGui::BeginMenu("File"))
+                {
+                    if (ImGui::MenuItem("Dummy menu item")) {}
+                    ImGui::EndMenu();
+                }
+                ImGui::EndMenuBar();
+            }
+            ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
+
+            // Testing behavior of widgets stacking their own regular popups over the modal.
+            static int item = 1;
+            static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
+            ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+            ImGui::ColorEdit4("color", color);
+
+            if (ImGui::Button("Add another modal.."))
+                ImGui::OpenPopup("Stacked 2");
+
+            // Also demonstrate passing a bool* to BeginPopupModal(), this will create a regular close button which will close the popup.
+            // Note that the visibility state of popups is owned by imgui, so the input value of the bool actually doesn't matter here.
+            bool dummy_open = true;
+            if (ImGui::BeginPopupModal("Stacked 2", &dummy_open))
+            {
+                ImGui::Text("Hello from Stacked The Second!");
+                if (ImGui::Button("Close"))
+                    ImGui::CloseCurrentPopup();
+                ImGui::EndPopup();
+            }
+
+            if (ImGui::Button("Close"))
+                ImGui::CloseCurrentPopup();
+            ImGui::EndPopup();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Menus inside a regular window"))
+    {
+        ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
+        ImGui::Separator();
+        // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
+        // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
+        // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
+        ImGui::PushID("foo");
+        ImGui::MenuItem("Menu item", "CTRL+M");
+        if (ImGui::BeginMenu("Menu inside a regular window"))
+        {
+            ShowExampleMenuFile();
+            ImGui::EndMenu();
+        }
+        ImGui::PopID();
+        ImGui::Separator();
+        ImGui::TreePop();
+    }
+}
+
+// Dummy data structure that we use for the Table demo.
+// (pre-C++11 doesn't allow us to instantiate ImVector<MyItem> template if this structure if defined inside the demo function)
+namespace
+{
+// We are passing our own identifier to TableSetupColumn() to facilitate identifying columns in the sorting code.
+// This identifier will be passed down into ImGuiTableSortSpec::ColumnUserID.
+// But it is possible to omit the user id parameter of TableSetupColumn() and just use the column index instead! (ImGuiTableSortSpec::ColumnIndex)
+// If you don't use sorting, you will generally never care about giving column an ID!
+enum MyItemColumnID
+{
+    MyItemColumnID_ID,
+    MyItemColumnID_Name,
+    MyItemColumnID_Action,
+    MyItemColumnID_Quantity,
+    MyItemColumnID_Description
+};
+
+struct MyItem
+{
+    int         ID;
+    const char* Name;
+    int         Quantity;
+
+    // We have a problem which is affecting _only this demo_ and should not affect your code:
+    // As we don't rely on std:: or other third-party library to compile dear imgui, we only have reliable access to qsort(), 
+    // however qsort doesn't allow passing user data to comparing function.
+    // As a workaround, we are storing the sort specs in a static/global for the comparing function to access.
+    // In your own use case you would probably pass the sort specs to your sorting/comparing functions directly and not use a global.
+    static const ImGuiTableSortSpecs* s_current_sort_specs;
+
+    // Compare function to be used by qsort()
+    static int IMGUI_CDECL CompareWithSortSpecs(const void* lhs, const void* rhs)
+    {
+        const MyItem* a = (const MyItem*)lhs;
+        const MyItem* b = (const MyItem*)rhs;
+        for (int n = 0; n < s_current_sort_specs->SpecsCount; n++)
+        {
+            // Here we identify columns using the ColumnUserID value that we ourselves passed to TableSetupColumn()
+            // We could also choose to identify columns based on their index (sort_spec->ColumnIndex), which is simpler!
+            const ImGuiTableSortSpecsColumn* sort_spec = &s_current_sort_specs->Specs[n];
+            int delta = 0;
+            switch (sort_spec->ColumnUserID)
+            {
+            case MyItemColumnID_ID:             delta = (a->ID - b->ID);                break;
+            case MyItemColumnID_Name:           delta = (strcmp(a->Name, b->Name));     break;
+            case MyItemColumnID_Quantity:       delta = (a->Quantity - b->Quantity);    break;
+            case MyItemColumnID_Description:    delta = (strcmp(a->Name, b->Name));     break;
+            default: IM_ASSERT(0); break;
+            }
+            if (delta > 0)
+                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? +1 : -1;
+            if (delta < 0)
+                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? -1 : +1;
+        }
+
+        // qsort() is instable so always return a way to differenciate items.
+        // Your own compare function may want to avoid fallback on implicit sort specs e.g. a Name compare if it wasn't already part of the sort specs.
+        return (a->ID - b->ID);
+    }
+};
+const ImGuiTableSortSpecs* MyItem::s_current_sort_specs = NULL;
+}
+
+static void ShowDemoWindowTables()
+{
+    //ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+    if (!ImGui::CollapsingHeader("Tables & Columns"))
+        return;
+
+    ImGui::PushID("Tables");
+
+    int open_action = -1;
+    if (ImGui::Button("Open all"))
+        open_action = 1;
+    ImGui::SameLine();
+    if (ImGui::Button("Close all"))
+        open_action = 0;
+    ImGui::SameLine();
+
+    // Options
+    static bool disable_indent = false;
+    ImGui::Checkbox("Disable tree indentation", &disable_indent);
+    ImGui::SameLine();
+    HelpMarker("Disable the indenting of tree nodes so demo tables can use the full window width.");
+    ImGui::Separator();
+    if (disable_indent)
+        ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0.0f);
+
+    // About Styling of tables
+    // Most settings are configured on a per-table basis via the flags passed to BeginTable() and TableSetupColumns APIs.
+    // There are however a few settings that a shared and part of the ImGuiStyle structure:
+    //   style.CellPadding                          // Padding within each cell
+    //   style.Colors[ImGuiCol_TableHeaderBg]       // Table header background
+    //   style.Colors[ImGuiCol_TableBorderStrong]   // Table outer and header borders
+    //   style.Colors[ImGuiCol_TableBorderLight]    // Table inner borders
+    //   style.Colors[ImGuiCol_TableRowBg]          // Table row background when ImGuiTableFlags_RowBg is enabled (even rows)
+    //   style.Colors[ImGuiCol_TableRowBgAlt]       // Table row background when ImGuiTableFlags_RowBg is enabled (odds rows)
+
+    // Demos
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Basic"))
+    {
+        // Here we will showcase 4 different ways to output a table. They are very simple variations of a same thing!
+        
+        // Basic use of tables using TableNextRow() to create a new row, and TableSetColumnIndex() to select the column.
+        // In many situations, this is the most flexible and easy to use pattern. 
+        HelpMarker("Using TableNextRow() + calling TableSetColumnIndex() _before_ each cell, in a loop.");
+        if (ImGui::BeginTable("##table1", 3))
+        {
+            for (int row = 0; row < 4; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("Row %d Column %d", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+
+        // This essentially the same as above, except instead of using a for loop we call TableSetColumnIndex() manually.
+        // Sometimes this makes more sense.
+        HelpMarker("Using TableNextRow() + calling TableSetColumnIndex() _before_ each cell, manually.");
+        if (ImGui::BeginTable("##table2", 3))
+        {
+            for (int row = 0; row < 4; row++)
+            {
+                ImGui::TableNextRow();
+                ImGui::TableSetColumnIndex(0);
+                ImGui::Text("Row %d", row);
+                ImGui::TableSetColumnIndex(1);
+                ImGui::Text("Some contents");
+                ImGui::TableSetColumnIndex(2);
+                ImGui::Text("123.456");
+            }
+            ImGui::EndTable();
+        }
+
+        // Another subtle variant, we call TableNextCell() _before_ each cell. At the end of a row, TableNextCell() will create a new row.
+        // Note that we don't call TableNextRow() here! 
+        // If we want to call TableNextRow(), then we don't need to call TableNextCell() for the first cell.
+        HelpMarker("Only using TableNextCell(), which tends to be convenient for tables where every cells contains the same type of contents.\nThis is also more similar to the old NextColumn() function of the Columns API, and provided to facilitate the Columns->Tables API transition.");
+        if (ImGui::BeginTable("##table4", 3))
+        {
+            for (int item = 0; item < 14; item++)
+            {
+                ImGui::TableNextCell();
+                ImGui::Text("Item %d", item);
+            }
+            ImGui::EndTable();
+        }
+
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Borders, background"))
+    {
+        // Expose a few Borders related flags interactively
+        static ImGuiTableFlags flags = ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg;
+        static bool display_width = false;
+        ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
+        ImGui::CheckboxFlags("ImGuiTableFlags_Borders", (unsigned int*)&flags, ImGuiTableFlags_Borders);
+        ImGui::SameLine(); HelpMarker("ImGuiTableFlags_Borders\n = ImGuiTableFlags_BordersVInner\n | ImGuiTableFlags_BordersVOuter\n | ImGuiTableFlags_BordersHInner\n | ImGuiTableFlags_BordersHOuter");
+        ImGui::Indent();
+
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
+        ImGui::Indent();
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
+        ImGui::Unindent();
+
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
+        ImGui::Indent();
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
+        ImGui::Unindent();
+
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersInner", (unsigned int*)&flags, ImGuiTableFlags_BordersInner);
+        ImGui::Unindent();
+        ImGui::Checkbox("Debug Display width", &display_width);
+
+        if (ImGui::BeginTable("##table1", 3, flags))
+        {
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    if (display_width)
+                    {
+                        ImVec2 p = ImGui::GetCursorScreenPos();
+                        ImDrawList* draw_list = ImGui::GetWindowDrawList();
+                        float x1 = p.x;
+                        float x2 = ImGui::GetWindowPos().x + ImGui::GetContentRegionMax().x;
+                        float x3 = draw_list->GetClipRectMax().x;
+                        float y2 = p.y + ImGui::GetTextLineHeight();
+                        draw_list->AddLine(ImVec2(x1, y2), ImVec2(x3, y2), IM_COL32(255, 255, 0, 255)); // Hard clipping limit
+                        draw_list->AddLine(ImVec2(x1, y2), ImVec2(x2, y2), IM_COL32(255, 0, 0, 255));   // Normal limit
+                        ImGui::Text("w=%.2f", x2 - x1);
+                    }
+                    else
+                    {
+                        ImGui::Text("Hello %d,%d", row, column);
+                    }
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Resizable, stretch"))
+    {
+        // By default, if we don't enable ScrollX the sizing policy for each columns is "Stretch"
+        // Each columns maintain a sizing weight, and they will occupy all available width.
+        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
+        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
+        ImGui::SameLine(); HelpMarker("Using the _Resizable flag automatically enables the _BordersV flag as well.");
+        
+        if (ImGui::BeginTable("##table1", 3, flags))
+        {
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("Hello %d,%d", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Resizable, fixed"))
+    {
+        // Here we use ImGuiTableFlags_SizingPolicyFixedX (even though _ScrollX is not set)
+        // So columns will adopt the "Fixed" policy and will maintain a fixed weight regardless of the whole available width.
+        // If there is not enough available width to fit all columns, they will however be resized down.
+        // FIXME-TABLE: Providing a stretch-on-init would make sense especially for tables which don't have saved settings
+        HelpMarker("Using _Resizable + _SizingPolicyFixedX flags.\nFixed-width columns generally makes more sense if you want to use horizontal scrolling.");
+        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
+        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX); // FIXME-TABLE: Explain or fix the effect of enable Scroll on outer_size
+        if (ImGui::BeginTable("##table1", 3, flags))
+        {
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("Hello %d,%d", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Resizable, mixed"))
+    {
+        HelpMarker("Using columns flag to alter resizing policy on a per-column basis.");
+        static ImGuiTableFlags flags = ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX); // FIXME-TABLE: Explain or fix the effect of enable Scroll on outer_size
+
+        if (ImGui::BeginTable("##table1", 3, flags, ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 6)))
+        {
+            ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);// | ImGuiTableColumnFlags_NoResize);
+            ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
+            ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthStretch);
+            ImGui::TableAutoHeaders();
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("%s %d,%d", (column == 2) ? "Stretch" : "Fixed", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        if (ImGui::BeginTable("##table2", 6, flags, ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 6)))
+        {
+            ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);
+            ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
+            ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_DefaultHide);
+            ImGui::TableSetupColumn("DDD", ImGuiTableColumnFlags_WidthStretch);
+            ImGui::TableSetupColumn("EEE", ImGuiTableColumnFlags_WidthStretch);
+            ImGui::TableSetupColumn("FFF", ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_DefaultHide);
+            ImGui::TableAutoHeaders();
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 6; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("%s %d,%d", (column >= 3) ? "Stretch" : "Fixed", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Reorderable, hideable, with headers"))
+    {
+        HelpMarker("Click and drag column headers to reorder columns.\n\nYou can also right-click on a header to open a context menu.");
+        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
+        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
+        ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", (unsigned int*)&flags, ImGuiTableFlags_Reorderable);
+        ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", (unsigned int*)&flags, ImGuiTableFlags_Hideable);
+        
+        if (ImGui::BeginTable("##table1", 3, flags))
+        {
+            // Submit columns name with TableSetupColumn() and call TableAutoHeaders() to create a row with a header in each column.
+            // (Later we will show how TableSetupColumn() has other uses, optional flags, sizing weight etc.)
+            ImGui::TableSetupColumn("One");
+            ImGui::TableSetupColumn("Two");
+            ImGui::TableSetupColumn("Three");
+            ImGui::TableAutoHeaders();
+            for (int row = 0; row < 6; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("Hello %d,%d", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Vertical scrolling, with clipping"))
+    {
+        HelpMarker("Here we activate ScrollY, which will create a child window container to allow hosting scrollable contents.\n\nWe also demonstrate using ImGuiListClipper to virtualize the submission of many items.");
+        ImVec2 size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 7);
+        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
+        
+        if (ImGui::BeginTable("##table1", 3, flags, size))
+        {
+            ImGui::TableSetupColumn("One", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
+            ImGui::TableAutoHeaders();
+            ImGuiListClipper clipper;
+            clipper.Begin(1000);
+            while (clipper.Step())
+            {
+                for (int row = clipper.DisplayStart; row < clipper.DisplayEnd; row++)
+                {
+                    ImGui::TableNextRow();
+                    for (int column = 0; column < 3; column++)
+                    {
+                        ImGui::TableSetColumnIndex(column);
+                        ImGui::Text("Hello %d,%d", row, column);
+                    }
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Horizontal scrolling"))
+    {
+        HelpMarker("When ScrollX is enabled, the default sizing policy becomes ImGuiTableFlags_SizingPolicyFixedX, as automatically stretching columns doesn't make much sense with horizontal scrolling.\n\nAlso note that as of the current version, you will almost always want to enable ScrollY along with ScrollX, because the container window won't automatically extend vertically to fix contents (this may be improved in future versions).");
+        ImVec2 size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 10);
+        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_ScrollFreezeLeftColumn | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
+
+        if (ImGui::BeginTable("##table1", 7, flags, size))
+        {
+            ImGui::TableSetupColumn("Line #", ImGuiTableColumnFlags_NoHide); // Make the first column not hideable to match our use of ImGuiTableFlags_ScrollFreezeLeftColumn
+            ImGui::TableSetupColumn("One", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Four", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Five", ImGuiTableColumnFlags_None);
+            ImGui::TableSetupColumn("Six", ImGuiTableColumnFlags_None);
+            ImGui::TableAutoHeaders();
+            for (int row = 0; row < 20; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 7; column++)
+                {
+                    // Both TableNextCell() and TableSetColumnIndex() return false when a column is not visible, which can be used for clipping.
+                    if (!ImGui::TableSetColumnIndex(column))
+                        continue;
+                    if (column == 0)
+                        ImGui::Text("Line %d", row);
+                    else
+                        ImGui::Text("Hello world %d,%d", row, column);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Columns flags"))
+    {
+        // Create a first table just to show all the options/flags we want to make visible in our example!
+        const int column_count = 3;
+        const char* column_names[column_count] = { "One", "Two", "Three" };
+        static ImGuiTableColumnFlags column_flags[column_count] = { ImGuiTableColumnFlags_DefaultSort, ImGuiTableColumnFlags_None, ImGuiTableColumnFlags_DefaultHide };
+
+        if (ImGui::BeginTable("##flags", column_count, ImGuiTableFlags_None))
+        {
+            for (int column = 0; column < column_count; column++)
+            {
+                // Make the UI compact because there are so many fields
+                ImGui::TableNextCell();
+                ImGuiStyle& style = ImGui::GetStyle();
+                ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 2));
+                ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
+                ImGui::PushID(column);
+                ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation
+                ImGui::Text("Flags for '%s'", column_names[column]);
+                ImGui::CheckboxFlags("_NoResize", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoResize);
+                ImGui::CheckboxFlags("_NoClipX", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoClipX);
+                ImGui::CheckboxFlags("_NoHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoHide);
+                ImGui::CheckboxFlags("_NoReorder", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoReorder);
+                ImGui::CheckboxFlags("_DefaultSort", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_DefaultSort);
+                ImGui::CheckboxFlags("_DefaultHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_DefaultHide);
+                ImGui::CheckboxFlags("_NoSort", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSort);
+                ImGui::CheckboxFlags("_NoSortAscending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSortAscending);
+                ImGui::CheckboxFlags("_NoSortDescending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSortDescending);
+                ImGui::CheckboxFlags("_PreferSortAscending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_PreferSortAscending);
+                ImGui::CheckboxFlags("_PreferSortDescending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_PreferSortDescending);
+                ImGui::CheckboxFlags("_IndentEnable", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_IndentEnable);
+                ImGui::CheckboxFlags("_IndentDisable", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_IndentDisable);
+                ImGui::PopID();
+                ImGui::PopStyleVar(2);
+            }
+            ImGui::EndTable();
+        }
+
+        // Create the real table we care about for the example!
+        const ImGuiTableFlags flags = ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable;
+        if (ImGui::BeginTable("##table", column_count, flags))
+        {
+            for (int column = 0; column < column_count; column++)
+                ImGui::TableSetupColumn(column_names[column], column_flags[column]);
+            ImGui::TableAutoHeaders();
+            for (int row = 0; row < 8; row++)
+            {
+                ImGui::Indent(2.0f); // Add some indentation to demonstrate usage of per-column IndentEnable/IndentDisable flags.
+                ImGui::TableNextRow();
+                for (int column = 0; column < column_count; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Text("%s %s", (column == 0) ? "Indented" : "Hello", ImGui::TableGetColumnName(column));
+                }
+            }
+            ImGui::Unindent(2.0f * 8.0f);
+
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Recursive"))
+    {
+        HelpMarker("This demonstrate embedding a table into another table cell.");
+        
+        if (ImGui::BeginTable("recurse1", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_BordersVFullHeight | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable))
+        {
+            ImGui::TableSetupColumn("A0");
+            ImGui::TableSetupColumn("A1");
+            ImGui::TableAutoHeaders();
+
+            ImGui::TableNextRow();  ImGui::Text("A0 Cell 0");
+            {
+                float rows_height = ImGui::GetTextLineHeightWithSpacing() * 2;
+                if (ImGui::BeginTable("recurse2", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_BordersVFullHeight | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable))
+                {
+                    ImGui::TableSetupColumn("B0");
+                    ImGui::TableSetupColumn("B1");
+                    ImGui::TableAutoHeaders();
+
+                    ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
+                    ImGui::Text("B0 Cell 0");
+                    ImGui::TableNextCell();
+                    ImGui::Text("B0 Cell 1");
+                    ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
+                    ImGui::Text("B1 Cell 0");
+                    ImGui::TableNextCell();
+                    ImGui::Text("B1 Cell 1");
+
+                    ImGui::EndTable();
+                }
+            }
+            ImGui::TableNextCell(); ImGui::Text("A0 Cell 1");
+            ImGui::TableNextRow();  ImGui::Text("A1 Cell 0");
+            ImGui::TableNextCell(); ImGui::Text("A1 Cell 1");
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Sizing policies, cell contents"))
+    {
+        HelpMarker("This section allows you to interact and see the effect of StretchX vs FixedX sizing policies depending on whether Scroll is enabled and the contents of your columns.");
+        enum ContentsType { CT_ShortText, CT_LongText, CT_Button, CT_StretchButton, CT_InputText };
+        static int contents_type = CT_StretchButton;
+        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
+        ImGui::Combo("Contents", &contents_type, "Short Text\0Long Text\0Button\0Stretch Button\0InputText\0");
+
+        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg;
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX);
+        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
+        if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyStretchX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyStretchX))
+            flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyStretchX);  // Can't specify both sizing polices so we clear the other
+        ImGui::SameLine(); HelpMarker("Default if _ScrollX if disabled.");
+        if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyFixedX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyFixedX))
+            flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyFixedX);    // Can't specify both sizing polices so we clear the other
+        ImGui::SameLine(); HelpMarker("Default if _ScrollX if enabled.");
+        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
+        ImGui::CheckboxFlags("ImGuiTableFlags_NoClipX", (unsigned int*)&flags, ImGuiTableFlags_NoClipX);
+
+        if (ImGui::BeginTable("##3ways", 3, flags, ImVec2(0, 100)))
+        {
+            for (int row = 0; row < 10; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    char label[32];
+                    static char text_buf[32] = "";
+                    sprintf(label, "Hello %d,%d", row, column);
+                    switch (contents_type)
+                    {
+                    case CT_ShortText:      ImGui::TextUnformatted(label); break;
+                    case CT_LongText:       ImGui::Text("Some longer text %d,%d\nOver two lines..", row, column); break;
+                    case CT_Button:         ImGui::Button(label); break;
+                    case CT_StretchButton:  ImGui::Button(label, ImVec2(-FLT_MIN, 0.0f)); break;
+                    case CT_InputText:      ImGui::SetNextItemWidth(-FLT_MIN); ImGui::InputText("##", text_buf, IM_ARRAYSIZE(text_buf)); break;
+                    }
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Compact table"))
+    {
+        // FIXME-TABLE: Vertical border not overridden the same way as horizontal one
+        HelpMarker("Setting style.CellPadding to (0,0).");
+
+        static ImGuiTableFlags flags = ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg;
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersOuter);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
+        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
+        ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
+        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
+
+        static bool no_widget_frame = false;
+        ImGui::Checkbox("no_widget_frame", &no_widget_frame);
+
+        ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
+        if (ImGui::BeginTable("##3ways", 3, flags))
+        {
+            for (int row = 0; row < 10; row++)
+            {
+                static char text_buf[32] = "";
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::SetNextItemWidth(-FLT_MIN);
+                    ImGui::PushID(row * 3 + column);
+                    if (no_widget_frame)
+                        ImGui::PushStyleColor(ImGuiCol_FrameBg, 0);
+                    ImGui::InputText("##cell", text_buf, IM_ARRAYSIZE(text_buf));
+                    if (no_widget_frame)
+                        ImGui::PopStyleColor();
+                    ImGui::PopID();
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::PopStyleVar();
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Row height"))
+    {
+        HelpMarker("You can pass a 'min_row_height' to TableNextRow().\n\nRows are padded with 'style.CellPadding.y' on top and bottom, so effectively the minimum row height will always be >= 'style.CellPadding.y * 2.0f'.\n\nWe cannot honor a _maximum_ row height as that would requires a unique clipping rectangle per row.");
+        if (ImGui::BeginTable("##2ways", 2, ImGuiTableFlags_Borders))
+        {
+            float min_row_height = ImGui::GetFontSize() + ImGui::GetStyle().CellPadding.y * 2.0f;
+            ImGui::TableNextRow(ImGuiTableRowFlags_None, min_row_height);
+            ImGui::Text("min_row_height = %.2f", min_row_height);
+            for (int row = 0; row < 10; row++)
+            {
+                min_row_height = (float)(int)(ImGui::GetFontSize() * 0.30f * row);
+                ImGui::TableNextRow(ImGuiTableRowFlags_None, min_row_height);
+                ImGui::Text("min_row_height = %.2f", min_row_height);
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Tree view"))
+    {
+        static ImGuiTableFlags flags = ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersHOuter | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg;
+        //ImGui::CheckboxFlags("ImGuiTableFlags_Scroll", (unsigned int*)&flags, ImGuiTableFlags_Scroll);
+        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
+
+        if (ImGui::BeginTable("##3ways", 3, flags))
+        {
+            // The first column will use the default _WidthStretch when ScrollX is Off and _WidthFixed when ScrollX is On
+            ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
+            ImGui::TableSetupColumn("Size", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 6);
+            ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 10);
+            ImGui::TableAutoHeaders();
+
+            // Simple storage to output a dummy file-system.
+            struct MyTreeNode 
+            { 
+                const char*     Name; 
+                const char*     Type; 
+                int             Size; 
+                int             ChildIdx; 
+                int             ChildCount; 
+                static void DisplayNode(const MyTreeNode* node, const MyTreeNode* all_nodes)
+                {
+                    ImGui::TableNextRow();
+                    const bool is_folder = (node->ChildCount > 0);
+                    if (is_folder)
+                    {
+                        bool open = ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_SpanFullWidth);
+                        ImGui::TableNextCell();
+                        ImGui::TextDisabled("--");
+                        ImGui::TableNextCell();
+                        ImGui::TextUnformatted(node->Type);
+                        if (open)
+                        {
+                            for (int child_n = 0; child_n < node->ChildCount; child_n++)
+                                DisplayNode(&all_nodes[node->ChildIdx + child_n], all_nodes);
+                            ImGui::TreePop();
+                        }
+                    }
+                    else
+                    {
+                        ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_Bullet | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_SpanFullWidth);
+                        ImGui::TableNextCell();
+                        ImGui::Text("%d", node->Size);
+                        ImGui::TableNextCell();
+                        ImGui::TextUnformatted(node->Type);
+                    }
+                }
+            };
+            static const MyTreeNode nodes[] =
+            {
+                { "Root",                         "Folder",       -1,       1, 3    }, // 0
+                { "Music",                        "Folder",       -1,       4, 2    }, // 1
+                { "Textures",                     "Folder",       -1,       6, 3    }, // 2
+                { "desktop.ini",                  "System file",  1024,    -1,-1    }, // 3
+                { "File1_a.wav",                  "Audio file",   123000,  -1,-1    }, // 4
+                { "File1_b.wav",                  "Audio file",   456000,  -1,-1    }, // 5
+                { "Image001.png",                 "Image file",   203128,  -1,-1    }, // 6
+                { "Copy of Image001.png",         "Image file",   203256,  -1,-1    }, // 7
+                { "Copy of Image001 (Final2).png","Image file",   203512,  -1,-1    }, // 8
+            };
+
+            MyTreeNode::DisplayNode(&nodes[0], nodes);
+
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    // Demonstrate using TableHeader() calls instead of TableAutoHeaders()
+    // FIXME-TABLE: Currently this doesn't get us feature-parity with TableAutoHeaders(), e.g. missing context menu.  Tables API needs some work! 
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Custom headers"))
+    {
+        const int COLUMNS_COUNT = 3;
+        if (ImGui::BeginTable("##table1", COLUMNS_COUNT, ImGuiTableFlags_Borders | ImGuiTableFlags_Reorderable))
+        {
+            ImGui::TableSetupColumn("Apricot");
+            ImGui::TableSetupColumn("Banana");
+            ImGui::TableSetupColumn("Cherry");
+
+            // Dummy entire-column selection storage
+            // FIXME: It would be nice to actually demonstrate full-featured selection using those checkbox.
+            static bool column_selected[3] = {};
+
+            // Instead of calling TableAutoHeaders() we'll submit custom headers ourselves
+            ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
+            for (int column = 0; column < COLUMNS_COUNT; column++)
+            {
+                ImGui::TableSetColumnIndex(column);
+                const char* column_name = ImGui::TableGetColumnName(column); // Retrieve name passed to TableSetupColumn()
+                ImGui::PushID(column);
+                ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
+                ImGui::Checkbox("##checkall", &column_selected[column]);
+                ImGui::PopStyleVar();
+                ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+                ImGui::TableHeader(column_name);
+                ImGui::PopID();
+            }
+
+            for (int row = 0; row < 5; row++)
+            {
+                ImGui::TableNextRow();
+                for (int column = 0; column < 3; column++)
+                {
+                    char buf[32];
+                    sprintf(buf, "Cell %d,%d", row, column);
+                    ImGui::TableSetColumnIndex(column);
+                    ImGui::Selectable(buf, column_selected[column]);
+                }
+            }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    static const char* template_items_names[] =
+    {
+        "Banana", "Apple", "Cherry", "Watermelon", "Grapefruit", "Strawberry", "Mango",
+        "Kiwi", "Orange", "Pineapple", "Blueberry", "Plum", "Coconut", "Pear", "Apricot"
+    };
+
+    // This is a simplified version of the "Advanced" example, where we mostly focus on the code necessary to handle sorting.
+    // Note that the "Advanced" example also showcase manually triggering a sort (e.g. if item quantities have been modified)
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Sorting"))
+    {
+        HelpMarker("Use Shift+Click to sort on multiple columns");
+
+        // Create item list
+        static ImVector<MyItem> items;
+        if (items.Size == 0)
+        {
+            items.resize(50, MyItem());
+            for (int n = 0; n < items.Size; n++)
+            {
+                const int template_n = n % IM_ARRAYSIZE(template_items_names);
+                MyItem& item = items[n];
+                item.ID = n;
+                item.Name = template_items_names[template_n];
+                item.Quantity = (n * n - n) % 20; // Assign default quantities
+            }
+        }
+
+        static ImGuiTableFlags flags =
+            ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable
+            | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV
+            | ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow;
+        if (ImGui::BeginTable("##table", 4, flags, ImVec2(0, 250), 0.0f))
+        {
+            // Declare columns
+            // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
+            // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
+            // Demonstrate using a mixture of flags among available sort-related flags:
+            // - ImGuiTableColumnFlags_DefaultSort
+            // - ImGuiTableColumnFlags_NoSort / ImGuiTableColumnFlags_NoSortAscending / ImGuiTableColumnFlags_NoSortDescending
+            // - ImGuiTableColumnFlags_PreferSortAscending / ImGuiTableColumnFlags_PreferSortDescending
+            ImGui::TableSetupColumn("ID",       ImGuiTableColumnFlags_DefaultSort          | ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_ID);
+            ImGui::TableSetupColumn("Name",                                                  ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_Name);
+            ImGui::TableSetupColumn("Action",   ImGuiTableColumnFlags_NoSort               | ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_Action);
+            ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, -1.0f, MyItemColumnID_Quantity);
+
+            // Sort our data if sort specs have been changed!
+            if (const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
+                if (sorts_specs->SpecsChanged && items.Size > 1)
+                {
+                    MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
+                    qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
+                    MyItem::s_current_sort_specs = NULL;
+                }
+
+            // Display data
+            ImGui::TableAutoHeaders();
+            ImGuiListClipper clipper;
+            clipper.Begin(items.Size);
+            while (clipper.Step())
+                for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
+                {
+                    MyItem* item = &items[row_n];
+                    ImGui::PushID(item->ID);
+                    ImGui::TableNextRow();
+                    ImGui::TableSetColumnIndex(0);
+                    ImGui::Text("%04d", item->ID);
+                    ImGui::TableSetColumnIndex(1);
+                    ImGui::TextUnformatted(item->Name);
+                    ImGui::TableSetColumnIndex(2);
+                    ImGui::SmallButton("None");
+                    ImGui::TableSetColumnIndex(3);
+                    ImGui::Text("%d", item->Quantity);
+                    ImGui::PopID();
+                }
+            ImGui::EndTable();
+        }
+        ImGui::TreePop();
+    }
+
+    if (open_action != -1)
+        ImGui::SetNextItemOpen(open_action != 0);
+    if (ImGui::TreeNode("Advanced"))
+    {
+        static ImGuiTableFlags flags =
+            ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable
+            | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders
+            | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY
+            | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_ScrollFreezeLeftColumn
+            | ImGuiTableFlags_SizingPolicyFixedX
+            ;
+
+        enum ContentsType { CT_Text, CT_Button, CT_SmallButton, CT_Selectable };
+        static int contents_type = CT_Button;
+        const char* contents_type_names[] = { "Text", "Button", "SmallButton", "Selectable" };
+
+        static int items_count = IM_ARRAYSIZE(template_items_names);
+        static ImVec2 outer_size_value = ImVec2(0, 250);
+        static float row_min_height = 0.0f; // Auto
+        static float inner_width_without_scroll = 0.0f; // Fill 
+        static float inner_width_with_scroll = 0.0f; // Auto-extend
+        static bool outer_size_enabled = true;
+        static bool lock_first_column_visibility = false;
+        static bool show_headers = true;
+        static bool show_wrapped_text = false;
+        //static ImGuiTextFilter filter;
+        //ImGui::SetNextItemOpen(true, ImGuiCond_Once); // FIXME-TABLE: Enabling this results in initial clipped first pass on table which affects sizing
+        if (ImGui::TreeNodeEx("Options"))
+        {
+            // Make the UI compact because there are so many fields
+            ImGuiStyle& style = ImGui::GetStyle();
+            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 1));
+            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
+            ImGui::PushItemWidth(200);
+
+            ImGui::BulletText("Features:");
+            ImGui::Indent();
+            ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
+            ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", (unsigned int*)&flags, ImGuiTableFlags_Reorderable);
+            ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", (unsigned int*)&flags, ImGuiTableFlags_Hideable);
+            ImGui::CheckboxFlags("ImGuiTableFlags_Sortable", (unsigned int*)&flags, ImGuiTableFlags_Sortable);
+            ImGui::CheckboxFlags("ImGuiTableFlags_MultiSortable", (unsigned int*)&flags, ImGuiTableFlags_MultiSortable);
+            ImGui::CheckboxFlags("ImGuiTableFlags_NoSavedSettings", (unsigned int*)&flags, ImGuiTableFlags_NoSavedSettings);
+            ImGui::Unindent();
+
+            ImGui::BulletText("Decoration:");
+            ImGui::Indent();
+            ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
+            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVFullHeight", (unsigned int*)&flags, ImGuiTableFlags_BordersVFullHeight);
+            ImGui::Unindent();
+
+            ImGui::BulletText("Padding, Sizing:");
+            ImGui::Indent();
+            ImGui::CheckboxFlags("ImGuiTableFlags_NoClipX", (unsigned int*)&flags, ImGuiTableFlags_NoClipX);
+            if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyStretchX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyStretchX))
+                flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyStretchX);  // Can't specify both sizing polices so we clear the other
+            ImGui::SameLine(); HelpMarker("[Default if ScrollX is off]\nFit all columns within available width (or specified inner_width). Fixed and Stretch columns allowed.");
+            if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyFixedX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyFixedX))
+                flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyFixedX);    // Can't specify both sizing polices so we clear the other
+            ImGui::SameLine(); HelpMarker("[Default if ScrollX is on]\nEnlarge as needed: enable scrollbar if ScrollX is enabled, otherwise extend parent window's contents rectangle. Only Fixed columns allowed. Stretched columns will calculate their width assuming no scrolling.");
+            ImGui::CheckboxFlags("ImGuiTableFlags_NoHeadersWidth", (unsigned int*)&flags, ImGuiTableFlags_NoHeadersWidth);
+            ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendY", (unsigned int*)&flags, ImGuiTableFlags_NoHostExtendY);
+            ImGui::Unindent();
+
+            ImGui::BulletText("Scrolling:");
+            ImGui::Indent();
+            ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX);
+            ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
+
+            // For the purpose of our "advanced" demo, we expose the 3 freezing variants on both axises instead of only exposing the most common flag.
+            //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
+            //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
+            int freeze_row_count = (flags & ImGuiTableFlags_ScrollFreezeRowsMask_) >> ImGuiTableFlags_ScrollFreezeRowsShift_;
+            int freeze_col_count = (flags & ImGuiTableFlags_ScrollFreezeColumnsMask_) >> ImGuiTableFlags_ScrollFreezeColumnsShift_;
+            ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+            if (ImGui::DragInt("ImGuiTableFlags_ScrollFreezeTopRow/2Rows/3Rows", &freeze_row_count, 0.2f, 0, 3))
+                if (freeze_row_count >= 0 && freeze_row_count <= 3)
+                    flags = (flags & ~ImGuiTableFlags_ScrollFreezeRowsMask_) | (freeze_row_count << ImGuiTableFlags_ScrollFreezeRowsShift_);
+            ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+            if (ImGui::DragInt("ImGuiTableFlags_ScrollFreezeLeftColumn/2Columns/3Columns", &freeze_col_count, 0.2f, 0, 3))
+                if (freeze_col_count >= 0 && freeze_col_count <= 3)
+                    flags = (flags & ~ImGuiTableFlags_ScrollFreezeColumnsMask_) | (freeze_col_count << ImGuiTableFlags_ScrollFreezeColumnsShift_);
+
+            ImGui::Unindent();
+
+            ImGui::BulletText("Other:");
+            ImGui::Indent();
+            ImGui::DragFloat2("##OuterSize", &outer_size_value.x);
+            ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+            ImGui::Checkbox("outer_size", &outer_size_enabled);
+            ImGui::SameLine();
+            HelpMarker("If scrolling is disabled (ScrollX and ScrollY not set), the table is output directly in the parent window. OuterSize.y then becomes the minimum size for the table, which will extend vertically if there are more rows (unless NoHostExtendV is set).");
+
+            // From a user point of view we will tend to use 'inner_width' differently depending on whether our table is embedding scrolling.
+            // To facilitate experimentation we expose two values and will select the right one depending on active flags.
+            if (flags & ImGuiTableFlags_ScrollX)
+                ImGui::DragFloat("inner_width (when ScrollX active)", &inner_width_with_scroll, 1.0f, 0.0f, FLT_MAX);
+            else
+                ImGui::DragFloat("inner_width (when ScrollX inactive)", &inner_width_without_scroll, 1.0f, 0.0f, FLT_MAX);
+            ImGui::DragFloat("row_min_height", &row_min_height, 1.0f, 0.0f, FLT_MAX);
+            ImGui::SameLine(); HelpMarker("Specify height of the Selectable item.");
+            ImGui::DragInt("items_count", &items_count, 0.1f, 0, 5000);
+            ImGui::Combo("contents_type (first column)", &contents_type, contents_type_names, IM_ARRAYSIZE(contents_type_names));
+            //filter.Draw("filter");
+            ImGui::Checkbox("show_headers", &show_headers);
+            ImGui::Checkbox("show_wrapped_text", &show_wrapped_text);
+            ImGui::Checkbox("lock_first_column_visibility", &lock_first_column_visibility);
+            ImGui::Unindent();
+
+            ImGui::PopItemWidth();
+            ImGui::PopStyleVar(2);
+            ImGui::Spacing();
+            ImGui::TreePop();
+        }
+
+        // Recreate/reset item list if we changed the number of items
+        static ImVector<MyItem> items;
+        static ImVector<int> selection;
+        static bool items_need_sort = false;
+        if (items.Size != items_count)
+        {
+            items.resize(items_count, MyItem());
+            for (int n = 0; n < items_count; n++)
+            {
+                const int template_n = n % IM_ARRAYSIZE(template_items_names);
+                MyItem& item = items[n];
+                item.ID = n;
+                item.Name = template_items_names[template_n];
+                item.Quantity = (template_n == 3) ? 10 : (template_n == 4) ? 20 : 0; // Assign default quantities
+            }
+        }
+
+        const ImDrawList* parent_draw_list = ImGui::GetWindowDrawList();
+        const int parent_draw_list_draw_cmd_count = parent_draw_list->CmdBuffer.Size;
+        ImVec2 table_scroll_cur, table_scroll_max; // For debug display
+        const ImDrawList* table_draw_list = NULL;  // "
+
+        const float inner_width_to_use = (flags & ImGuiTableFlags_ScrollX) ? inner_width_with_scroll : inner_width_without_scroll;
+        if (ImGui::BeginTable("##table", 6, flags, outer_size_enabled ? outer_size_value : ImVec2(0, 0), inner_width_to_use))
+        {
+            // Declare columns
+            // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
+            // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
+            ImGui::TableSetupColumn("ID",          ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | (lock_first_column_visibility ? ImGuiTableColumnFlags_NoHide : 0), -1.0f, MyItemColumnID_ID);
+            ImGui::TableSetupColumn("Name",        ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Name);
+            ImGui::TableSetupColumn("Action",      ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action);
+            ImGui::TableSetupColumn("Quantity Long Label", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Quantity);// , ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_WidthAlwaysAutoResize);
+            ImGui::TableSetupColumn("Description", ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Description);// , ImGuiTableColumnFlags_WidthAlwaysAutoResize);
+            ImGui::TableSetupColumn("Hidden",      ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort);
+
+            // Sort our data if sort specs have been changed!
+            const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
+            if (sorts_specs && sorts_specs->SpecsChanged)
+                items_need_sort = true;
+            if (sorts_specs && items_need_sort && items.Size > 1)
+            {
+                MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
+                qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
+                MyItem::s_current_sort_specs = NULL;
+            }
+            items_need_sort = false;
+
+            // Take note of whether we are currently sorting based on the Quantity field,
+            // we will use this to trigger sorting when we know the data of this column has been modified.
+            const bool sorts_specs_using_quantity = ImGui::TableGetColumnIsSorted(3);
+
+            // Show headers
+            if (show_headers)
+                ImGui::TableAutoHeaders();
+
+            // Show data
+            // FIXME-TABLE FIXME-NAV: How we can get decent up/down even though we have the buttons here?
+            ImGui::PushButtonRepeat(true);
+#if 1
+            ImGuiListClipper clipper;
+            clipper.Begin(items.Size);
+            while (clipper.Step())
+            {
+                for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
+#else
+            {
+                for (int row_n = 0; row_n < items_count; n++)
+#endif
+                {
+                    MyItem* item = &items[row_n];
+                    //if (!filter.PassFilter(item->Name))
+                    //    continue;
+
+                    const bool item_is_selected = selection.contains(item->ID);
+                    ImGui::PushID(item->ID);
+                    ImGui::TableNextRow(ImGuiTableRowFlags_None, row_min_height);
+
+                    // For the demo purpose we can select among different type of items submitted in the first column
+                    char label[32];
+                    sprintf(label, "%04d", item->ID);
+                    if (contents_type == CT_Text)
+                        ImGui::TextUnformatted(label);
+                    else if (contents_type == CT_Button)
+                        ImGui::Button(label);
+                    else if (contents_type == CT_SmallButton)
+                        ImGui::SmallButton(label);
+                    else if (contents_type == CT_Selectable)
+                    {
+                        if (ImGui::Selectable(label, item_is_selected, ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowItemOverlap, ImVec2(0, row_min_height)))
+                        {
+                            if (ImGui::GetIO().KeyCtrl)
+                            {
+                                if (item_is_selected)
+                                    selection.find_erase_unsorted(item->ID);
+                                else
+                                    selection.push_back(item->ID);
+                            }
+                            else
+                            {
+                                selection.clear();
+                                selection.push_back(item->ID);
+                            }
+                        }
+                    }
+
+                    ImGui::TableNextCell();
+                    ImGui::TextUnformatted(item->Name);
+
+                    // Here we demonstrate marking our data set as needing to be sorted again if we modified a quantity,
+                    // and we are currently sorting on the column showing the Quantity.
+                    // To avoid triggering a sort while holding the button, we only trigger it when the button has been released.
+                    // You will probably need a more advanced system in your code if you want to automatically sort when a specific entry changes.
+                    if (ImGui::TableNextCell())
+                    {
+                        if (ImGui::SmallButton("Chop")) { item->Quantity += 1; }
+                        if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
+                        ImGui::SameLine();
+                        if (ImGui::SmallButton("Eat")) { item->Quantity -= 1; }
+                        if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
+                    }
+
+                    ImGui::TableNextCell();
+                    ImGui::Text("%d", item->Quantity);
+
+                    ImGui::TableNextCell();
+                    if (show_wrapped_text)
+                        ImGui::TextWrapped("Lorem ipsum dolor sit amet");
+                    else
+                        ImGui::Text("Lorem ipsum dolor sit amet");
+
+                    ImGui::TableNextCell();
+                    ImGui::Text("1234");
+
+                    ImGui::PopID();
+                }
+            }
+            ImGui::PopButtonRepeat();
+
+            table_scroll_cur = ImVec2(ImGui::GetScrollX(), ImGui::GetScrollY());
+            table_scroll_max = ImVec2(ImGui::GetScrollMaxX(), ImGui::GetScrollMaxY());
+            table_draw_list = ImGui::GetWindowDrawList();
+            ImGui::EndTable();
+        }
+        static bool show_debug_details = false;
+        ImGui::Checkbox("Debug details", &show_debug_details);
+        if (show_debug_details && table_draw_list)
+        {
+            ImGui::SameLine(0.0f, 0.0f);
+            const int table_draw_list_draw_cmd_count = table_draw_list->CmdBuffer.Size;
+            if (table_draw_list == parent_draw_list)
+                ImGui::Text(": DrawCmd: +%d (in same window)", table_draw_list_draw_cmd_count - parent_draw_list_draw_cmd_count);
+            else
+                ImGui::Text(": DrawCmd: +%d (in child window), Scroll: (%.f/%.f) (%.f/%.f)",
+                    table_draw_list_draw_cmd_count - 1, table_scroll_cur.x, table_scroll_max.x, table_scroll_cur.y, table_scroll_max.y);
+        }
+        ImGui::TreePop();
+    }
+
+    ImGui::PopID();
+
+    ShowDemoWindowColumns();
+
+    if (disable_indent)
+        ImGui::PopStyleVar();
+}
+
+// Demonstrate old/legacy Columns API!
+// [2020: Columns are under-featured and not maintained. Prefer using the more flexible and powerful BeginTable() API!]
+static void ShowDemoWindowColumns()
+{
+    bool open = ImGui::TreeNode("Legacy Columns API");
+    ImGui::SameLine();
+    HelpMarker("Columns() is an old API! Prefer using the more flexible and powerful BeginTable() API!");
+    if (!open)
+        return;
+
+    // Basic columns
+    if (ImGui::TreeNode("Basic"))
+    {
+        ImGui::Text("Without border:");
+        ImGui::Columns(3, "mycolumns3", false);  // 3-ways, no border
+        ImGui::Separator();
+        for (int n = 0; n < 14; n++)
+        {
+            char label[32];
+            sprintf(label, "Item %d", n);
+            if (ImGui::Selectable(label)) {}
+            //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {}
+            ImGui::NextColumn();
+        }
+        ImGui::Columns(1);
+        ImGui::Separator();
+
+        ImGui::Text("With border:");
+        ImGui::Columns(4, "mycolumns"); // 4-ways, with border
+        ImGui::Separator();
+        ImGui::Text("ID"); ImGui::NextColumn();
+        ImGui::Text("Name"); ImGui::NextColumn();
+        ImGui::Text("Path"); ImGui::NextColumn();
+        ImGui::Text("Hovered"); ImGui::NextColumn();
+        ImGui::Separator();
+        const char* names[3] = { "One", "Two", "Three" };
+        const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
+        static int selected = -1;
+        for (int i = 0; i < 3; i++)
+        {
+            char label[32];
+            sprintf(label, "%04d", i);
+            if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
+                selected = i;
+            bool hovered = ImGui::IsItemHovered();
+            ImGui::NextColumn();
+            ImGui::Text(names[i]); ImGui::NextColumn();
+            ImGui::Text(paths[i]); ImGui::NextColumn();
+            ImGui::Text("%d", hovered); ImGui::NextColumn();
+        }
+        ImGui::Columns(1);
+        ImGui::Separator();
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Borders"))
+    {
+        // NB: Future columns API should allow automatic horizontal borders.
+        static bool h_borders = true;
+        static bool v_borders = true;
+        static int columns_count = 4;
+        const int lines_count = 3;
+        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
+        ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
+        if (columns_count < 2)
+            columns_count = 2;
+        ImGui::SameLine();
+        ImGui::Checkbox("horizontal", &h_borders);
+        ImGui::SameLine();
+        ImGui::Checkbox("vertical", &v_borders);
+        ImGui::Columns(columns_count, NULL, v_borders);
+        for (int i = 0; i < columns_count * lines_count; i++)
+        {
+            if (h_borders && ImGui::GetColumnIndex() == 0)
+                ImGui::Separator();
+            ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i);
+            ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+            ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
+            ImGui::Text("Offset %.2f", ImGui::GetColumnOffset());
+            ImGui::Text("Long text that is likely to clip");
+            ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f));
+            ImGui::NextColumn();
+        }
+        ImGui::Columns(1);
+        if (h_borders)
+            ImGui::Separator();
+        ImGui::TreePop();
+    }
+
+    // Create multiple items in a same cell before switching to next column
+    if (ImGui::TreeNode("Mixed items"))
+    {
+        ImGui::Columns(3, "mixed");
+        ImGui::Separator();
+
+        ImGui::Text("Hello");
+        ImGui::Button("Banana");
+        ImGui::NextColumn();
+
+        ImGui::Text("ImGui");
+        ImGui::Button("Apple");
+        static float foo = 1.0f;
+        ImGui::InputFloat("red", &foo, 0.05f, 0, "%.3f");
+        ImGui::Text("An extra line here.");
+        ImGui::NextColumn();
+
+        ImGui::Text("Sailor");
+        ImGui::Button("Corniflower");
+        static float bar = 1.0f;
+        ImGui::InputFloat("blue", &bar, 0.05f, 0, "%.3f");
+        ImGui::NextColumn();
+
+        if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+        if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+        if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+        ImGui::Columns(1);
+        ImGui::Separator();
+        ImGui::TreePop();
+    }
+
+    // Word wrapping
+    if (ImGui::TreeNode("Word-wrapping"))
+    {
+        ImGui::Columns(2, "word-wrapping");
+        ImGui::Separator();
+        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
+        ImGui::TextWrapped("Hello Left");
+        ImGui::NextColumn();
+        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
+        ImGui::TextWrapped("Hello Right");
+        ImGui::Columns(1);
+        ImGui::Separator();
+        ImGui::TreePop();
+    }
+
+    // Scrolling columns
+    /*
+    if (ImGui::TreeNode("Vertical Scrolling"))
+    {
+        ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y));
+        ImGui::Columns(3);
+        ImGui::Text("ID"); ImGui::NextColumn();
+        ImGui::Text("Name"); ImGui::NextColumn();
+        ImGui::Text("Path"); ImGui::NextColumn();
+        ImGui::Columns(1);
+        ImGui::Separator();
+        ImGui::EndChild();
+        ImGui::BeginChild("##scrollingregion", ImVec2(0, 60));
+        ImGui::Columns(3);
+        for (int i = 0; i < 10; i++)
+        {
+            ImGui::Text("%04d", i); ImGui::NextColumn();
+            ImGui::Text("Foobar"); ImGui::NextColumn();
+            ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn();
+        }
+        ImGui::Columns(1);
+        ImGui::EndChild();
+        ImGui::TreePop();
+    }
+    */
+
+    if (ImGui::TreeNode("Horizontal Scrolling"))
+    {
+        ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f));
+        ImGui::BeginChild("##ScrollingRegion", ImVec2(0, ImGui::GetFontSize() * 20), false, ImGuiWindowFlags_HorizontalScrollbar);
+        ImGui::Columns(10);
+        int ITEMS_COUNT = 2000;
+        ImGuiListClipper clipper(ITEMS_COUNT);  // Also demonstrate using the clipper for large list
+        while (clipper.Step())
+        {
+            for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+                for (int j = 0; j < 10; j++)
+                {
+                    ImGui::Text("Line %d Column %d...", i, j);
+                    ImGui::NextColumn();
+                }
+        }
+        ImGui::Columns(1);
+        ImGui::EndChild();
+        ImGui::TreePop();
+    }
+
+    if (ImGui::TreeNode("Tree"))
+    {
+        ImGui::Columns(2, "tree", true);
+        for (int x = 0; x < 3; x++)
+        {
+            bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x);
+            ImGui::NextColumn();
+            ImGui::Text("Node contents");
+            ImGui::NextColumn();
+            if (open1)
+            {
+                for (int y = 0; y < 3; y++)
+                {
+                    bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y);
+                    ImGui::NextColumn();
+                    ImGui::Text("Node contents");
+                    if (open2)
+                    {
+                        ImGui::Text("Even more contents");
+                        if (ImGui::TreeNode("Tree in column"))
+                        {
+                            ImGui::Text("The quick brown fox jumps over the lazy dog");
+                            ImGui::TreePop();
+                        }
+                    }
+                    ImGui::NextColumn();
+                    if (open2)
+                        ImGui::TreePop();
+                }
+                ImGui::TreePop();
+            }
+        }
+        ImGui::Columns(1);
+        ImGui::TreePop();
+    }
+
+    ImGui::TreePop();
+}
+
+static void ShowDemoWindowMisc()
+{
+    if (ImGui::CollapsingHeader("Filtering"))
+    {
+        // Helper class to easy setup a text filter.
+        // You may want to implement a more feature-full filtering scheme in your own application.
+        static ImGuiTextFilter filter;
+        ImGui::Text("Filter usage:\n"
+                    "  \"\"         display all lines\n"
+                    "  \"xxx\"      display lines containing \"xxx\"\n"
+                    "  \"xxx,yyy\"  display lines containing \"xxx\" or \"yyy\"\n"
+                    "  \"-xxx\"     hide lines containing \"xxx\"");
+        filter.Draw();
+        const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" };
+        for (int i = 0; i < IM_ARRAYSIZE(lines); i++)
+            if (filter.PassFilter(lines[i]))
+                ImGui::BulletText("%s", lines[i]);
+    }
+
+    if (ImGui::CollapsingHeader("Inputs, Navigation & Focus"))
+    {
+        ImGuiIO& io = ImGui::GetIO();
+
+        // Display ImGuiIO output flags
+        ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse);
+        ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
+        ImGui::Text("WantTextInput: %d", io.WantTextInput);
+        ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos);
+        ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible);
+
+        // Display Keyboard/Mouse state
+        if (ImGui::TreeNode("Keyboard, Mouse & Navigation State"))
+        {
+            if (ImGui::IsMousePosValid())
+                ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
+            else
+                ImGui::Text("Mouse pos: <INVALID>");
+            ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y);
+            ImGui::Text("Mouse down:");     for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f)   { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
+            ImGui::Text("Mouse clicked:");  for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i))          { ImGui::SameLine(); ImGui::Text("b%d", i); }
+            ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
+            ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i))         { ImGui::SameLine(); ImGui::Text("b%d", i); }
+            ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
+
+            ImGui::Text("Keys down:");      for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f)     { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); }
+            ImGui::Text("Keys pressed:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i))             { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
+            ImGui::Text("Keys release:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i))            { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
+            ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
+            ImGui::Text("Chars queue:");    for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine();  ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
+
+            ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f)                    { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputs[i]); }
+            ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f)    { ImGui::SameLine(); ImGui::Text("[%d]", i); }
+            ImGui::Text("NavInputs duration:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] >= 0.0f)   { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputsDownDuration[i]); }
+
+            ImGui::Button("Hovering me sets the\nkeyboard capture flag");
+            if (ImGui::IsItemHovered())
+                ImGui::CaptureKeyboardFromApp(true);
+            ImGui::SameLine();
+            ImGui::Button("Holding me clears the\nthe keyboard capture flag");
+            if (ImGui::IsItemActive())
+                ImGui::CaptureKeyboardFromApp(false);
+
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Tabbing"))
+        {
+            ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields.");
+            static char buf[32] = "dummy";
+            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
+            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
+            ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
+            ImGui::PushAllowKeyboardFocus(false);
+            ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
+            //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets.");
+            ImGui::PopAllowKeyboardFocus();
+            ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Focus from code"))
+        {
+            bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine();
+            bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine();
+            bool focus_3 = ImGui::Button("Focus on 3");
+            int has_focus = 0;
+            static char buf[128] = "click on a button to set focus";
+
+            if (focus_1) ImGui::SetKeyboardFocusHere();
+            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
+            if (ImGui::IsItemActive()) has_focus = 1;
+
+            if (focus_2) ImGui::SetKeyboardFocusHere();
+            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
+            if (ImGui::IsItemActive()) has_focus = 2;
+
+            ImGui::PushAllowKeyboardFocus(false);
+            if (focus_3) ImGui::SetKeyboardFocusHere();
+            ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
+            if (ImGui::IsItemActive()) has_focus = 3;
+            ImGui::PopAllowKeyboardFocus();
+
+            if (has_focus)
+                ImGui::Text("Item with focus: %d", has_focus);
+            else
+                ImGui::Text("Item with focus: <none>");
+
+            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
+            static float f3[3] = { 0.0f, 0.0f, 0.0f };
+            int focus_ahead = -1;
+            if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine();
+            if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine();
+            if (ImGui::Button("Focus on Z")) { focus_ahead = 2; }
+            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
+            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);
+
+            ImGui::TextWrapped("NB: Cursor & selection are preserved when refocusing last used item in code.");
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Dragging"))
+        {
+            ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
+            for (int button = 0; button < 3; button++)
+                ImGui::Text("IsMouseDragging(%d):\n  w/ default threshold: %d,\n  w/ zero threshold: %d\n  w/ large threshold: %d",
+                    button, ImGui::IsMouseDragging(button), ImGui::IsMouseDragging(button, 0.0f), ImGui::IsMouseDragging(button, 20.0f));
+
+            ImGui::Button("Drag Me");
+            if (ImGui::IsItemActive())
+                ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor
+
+            // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold)
+            // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta()
+            ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
+            ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
+            ImVec2 mouse_delta = io.MouseDelta;
+            ImGui::Text("GetMouseDragDelta(0):\n  w/ default threshold: (%.1f, %.1f),\n  w/ zero threshold: (%.1f, %.1f)\nMouseDelta: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y, value_raw.x, value_raw.y, mouse_delta.x, mouse_delta.y);
+            ImGui::TreePop();
+        }
+
+        if (ImGui::TreeNode("Mouse cursors"))
+        {
+            const char* mouse_cursors_names[] = { "Arrow", "TextInput", "ResizeAll", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE", "Hand", "NotAllowed" };
+            IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_COUNT);
+
+            ImGui::Text("Current mouse cursor = %d: %s", ImGui::GetMouseCursor(), mouse_cursors_names[ImGui::GetMouseCursor()]);
+            ImGui::Text("Hover to see mouse cursors:");
+            ImGui::SameLine(); HelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it.");
+            for (int i = 0; i < ImGuiMouseCursor_COUNT; i++)
+            {
+                char label[32];
+                sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]);
+                ImGui::Bullet(); ImGui::Selectable(label, false);
+                if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
+                    ImGui::SetMouseCursor(i);
+            }
+            ImGui::TreePop();
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] About Window / ShowAboutWindow()
+// Access from Dear ImGui Demo -> Tools -> About
+//-----------------------------------------------------------------------------
+
+void ImGui::ShowAboutWindow(bool* p_open)
+{
+    if (!ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize))
+    {
+        ImGui::End();
+        return;
+    }
+    ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
+    ImGui::Separator();
+    ImGui::Text("By Omar Cornut and all Dear ImGui contributors.");
+    ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information.");
+
+    static bool show_config_info = false;
+    ImGui::Checkbox("Config/Build Information", &show_config_info);
+    if (show_config_info)
+    {
+        ImGuiIO& io = ImGui::GetIO();
+        ImGuiStyle& style = ImGui::GetStyle();
+
+        bool copy_to_clipboard = ImGui::Button("Copy to clipboard");
+        ImGui::BeginChildFrame(ImGui::GetID("cfginfos"), ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18), ImGuiWindowFlags_NoMove);
+        if (copy_to_clipboard)
+        {
+            ImGui::LogToClipboard();
+            ImGui::LogText("```\n"); // Back quotes will make the text appears without formatting when pasting to GitHub
+        }
+
+        ImGui::Text("Dear ImGui %s (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM);
+        ImGui::Separator();
+        ImGui::Text("sizeof(size_t): %d, sizeof(ImDrawIdx): %d, sizeof(ImDrawVert): %d", (int)sizeof(size_t), (int)sizeof(ImDrawIdx), (int)sizeof(ImDrawVert));
+        ImGui::Text("define: __cplusplus=%d", (int)__cplusplus);
+#ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_WIN32_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
+        ImGui::Text("define: IMGUI_DISABLE_FILE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_ALLOCATORS
+        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_ALLOCATORS");
+#endif
+#ifdef IMGUI_USE_BGRA_PACKED_COLOR
+        ImGui::Text("define: IMGUI_USE_BGRA_PACKED_COLOR");
+#endif
+#ifdef _WIN32
+        ImGui::Text("define: _WIN32");
+#endif
+#ifdef _WIN64
+        ImGui::Text("define: _WIN64");
+#endif
+#ifdef __linux__
+        ImGui::Text("define: __linux__");
+#endif
+#ifdef __APPLE__
+        ImGui::Text("define: __APPLE__");
+#endif
+#ifdef _MSC_VER
+        ImGui::Text("define: _MSC_VER=%d", _MSC_VER);
+#endif
+#ifdef __MINGW32__
+        ImGui::Text("define: __MINGW32__");
+#endif
+#ifdef __MINGW64__
+        ImGui::Text("define: __MINGW64__");
+#endif
+#ifdef __GNUC__
+        ImGui::Text("define: __GNUC__=%d", (int)__GNUC__);
+#endif
+#ifdef __clang_version__
+        ImGui::Text("define: __clang_version__=%s", __clang_version__);
+#endif
+        ImGui::Separator();
+        ImGui::Text("io.BackendPlatformName: %s", io.BackendPlatformName ? io.BackendPlatformName : "NULL");
+        ImGui::Text("io.BackendRendererName: %s", io.BackendRendererName ? io.BackendRendererName : "NULL");
+        ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags);
+        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard)        ImGui::Text(" NavEnableKeyboard");
+        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad)         ImGui::Text(" NavEnableGamepad");
+        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos)     ImGui::Text(" NavEnableSetMousePos");
+        if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard)     ImGui::Text(" NavNoCaptureKeyboard");
+        if (io.ConfigFlags & ImGuiConfigFlags_NoMouse)                  ImGui::Text(" NoMouse");
+        if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange)      ImGui::Text(" NoMouseCursorChange");
+        if (io.MouseDrawCursor)                                         ImGui::Text("io.MouseDrawCursor");
+        if (io.ConfigMacOSXBehaviors)                                   ImGui::Text("io.ConfigMacOSXBehaviors");
+        if (io.ConfigInputTextCursorBlink)                              ImGui::Text("io.ConfigInputTextCursorBlink");
+        if (io.ConfigWindowsResizeFromEdges)                            ImGui::Text("io.ConfigWindowsResizeFromEdges");
+        if (io.ConfigWindowsMoveFromTitleBarOnly)                       ImGui::Text("io.ConfigWindowsMoveFromTitleBarOnly");
+        if (io.ConfigWindowsMemoryCompactTimer >= 0.0f)                 ImGui::Text("io.ConfigWindowsMemoryCompactTimer = %.1ff", io.ConfigWindowsMemoryCompactTimer);
+        ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags);
+        if (io.BackendFlags & ImGuiBackendFlags_HasGamepad)             ImGui::Text(" HasGamepad");
+        if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)        ImGui::Text(" HasMouseCursors");
+        if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos)         ImGui::Text(" HasSetMousePos");
+        if (io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)   ImGui::Text(" RendererHasVtxOffset");
+        ImGui::Separator();
+        ImGui::Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight);
+        ImGui::Text("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y);
+        ImGui::Text("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
+        ImGui::Separator();
+        ImGui::Text("style.WindowPadding: %.2f,%.2f", style.WindowPadding.x, style.WindowPadding.y);
+        ImGui::Text("style.WindowBorderSize: %.2f", style.WindowBorderSize);
+        ImGui::Text("style.FramePadding: %.2f,%.2f", style.FramePadding.x, style.FramePadding.y);
+        ImGui::Text("style.FrameRounding: %.2f", style.FrameRounding);
+        ImGui::Text("style.FrameBorderSize: %.2f", style.FrameBorderSize);
+        ImGui::Text("style.ItemSpacing: %.2f,%.2f", style.ItemSpacing.x, style.ItemSpacing.y);
+        ImGui::Text("style.ItemInnerSpacing: %.2f,%.2f", style.ItemInnerSpacing.x, style.ItemInnerSpacing.y);
+
+        if (copy_to_clipboard)
+        {
+            ImGui::LogText("\n```\n");
+            ImGui::LogFinish();
+        }
+        ImGui::EndChildFrame();
+    }
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Style Editor / ShowStyleEditor()
+//-----------------------------------------------------------------------------
+// - ShowStyleSelector()
+// - ShowFontSelector()
+// - ShowStyleEditor()
+//-----------------------------------------------------------------------------
+
+// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
+// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally.
+bool ImGui::ShowStyleSelector(const char* label)
+{
+    static int style_idx = -1;
+    if (ImGui::Combo(label, &style_idx, "Classic\0Dark\0Light\0"))
+    {
+        switch (style_idx)
+        {
+        case 0: ImGui::StyleColorsClassic(); break;
+        case 1: ImGui::StyleColorsDark(); break;
+        case 2: ImGui::StyleColorsLight(); break;
+        }
+        return true;
+    }
+    return false;
+}
+
+// Demo helper function to select among loaded fonts.
+// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one.
+void ImGui::ShowFontSelector(const char* label)
+{
+    ImGuiIO& io = ImGui::GetIO();
+    ImFont* font_current = ImGui::GetFont();
+    if (ImGui::BeginCombo(label, font_current->GetDebugName()))
+    {
+        for (int n = 0; n < io.Fonts->Fonts.Size; n++)
+        {
+            ImFont* font = io.Fonts->Fonts[n];
+            ImGui::PushID((void*)font);
+            if (ImGui::Selectable(font->GetDebugName(), font == font_current))
+                io.FontDefault = font;
+            ImGui::PopID();
+        }
+        ImGui::EndCombo();
+    }
+    ImGui::SameLine();
+    HelpMarker(
+        "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n"
+        "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
+        "- Read FAQ and docs/FONTS.txt for more details.\n"
+        "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame().");
+}
+
+void ImGui::ShowStyleEditor(ImGuiStyle* ref)
+{
+    // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference)
+    ImGuiStyle& style = ImGui::GetStyle();
+    static ImGuiStyle ref_saved_style;
+
+    // Default to using internal storage as reference
+    static bool init = true;
+    if (init && ref == NULL)
+        ref_saved_style = style;
+    init = false;
+    if (ref == NULL)
+        ref = &ref_saved_style;
+
+    ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.50f);
+
+    if (ImGui::ShowStyleSelector("Colors##Selector"))
+        ref_saved_style = style;
+    ImGui::ShowFontSelector("Fonts##Selector");
+
+    // Simplified Settings
+    if (ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f"))
+        style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding
+    { bool window_border = (style.WindowBorderSize > 0.0f); if (ImGui::Checkbox("WindowBorder", &window_border)) style.WindowBorderSize = window_border ? 1.0f : 0.0f; }
+    ImGui::SameLine();
+    { bool frame_border = (style.FrameBorderSize > 0.0f); if (ImGui::Checkbox("FrameBorder", &frame_border)) style.FrameBorderSize = frame_border ? 1.0f : 0.0f; }
+    ImGui::SameLine();
+    { bool popup_border = (style.PopupBorderSize > 0.0f); if (ImGui::Checkbox("PopupBorder", &popup_border)) style.PopupBorderSize = popup_border ? 1.0f : 0.0f; }
+
+    // Save/Revert button
+    if (ImGui::Button("Save Ref"))
+        *ref = ref_saved_style = style;
+    ImGui::SameLine();
+    if (ImGui::Button("Revert Ref"))
+        style = *ref;
+    ImGui::SameLine();
+    HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export\" below to save them somewhere.");
+
+    ImGui::Separator();
+
+    if (ImGui::BeginTabBar("##tabs", ImGuiTabBarFlags_None))
+    {
+        if (ImGui::BeginTabItem("Sizes"))
+        {
+            ImGui::Text("Main");
+            ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat2("CellPadding", (float*)&style.CellPadding, 0.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
+            ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
+            ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
+            ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
+            ImGui::Text("Borders");
+            ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
+            ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
+            ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
+            ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
+            ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f");
+            ImGui::Text("Rounding");
+            ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::SliderFloat("TabRounding", &style.TabRounding, 0.0f, 12.0f, "%.0f");
+            ImGui::Text("Alignment");
+            ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
+            int window_menu_button_position = style.WindowMenuButtonPosition + 1;
+            if (ImGui::Combo("WindowMenuButtonPosition", (int*)&window_menu_button_position, "None\0Left\0Right\0"))
+                style.WindowMenuButtonPosition = window_menu_button_position - 1;
+            ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0");
+            ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content.");
+            ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a selectable is larger than its text content.");
+            ImGui::Text("Safe Area Padding"); ImGui::SameLine(); HelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
+            ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
+            ImGui::EndTabItem();
+        }
+
+        if (ImGui::BeginTabItem("Colors"))
+        {
+            static int output_dest = 0;
+            static bool output_only_modified = true;
+            if (ImGui::Button("Export"))
+            {
+                if (output_dest == 0)
+                    ImGui::LogToClipboard();
+                else
+                    ImGui::LogToTTY();
+                ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
+                for (int i = 0; i < ImGuiCol_COUNT; i++)
+                {
+                    const ImVec4& col = style.Colors[i];
+                    const char* name = ImGui::GetStyleColorName(i);
+                    if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
+                        ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23 - (int)strlen(name), "", col.x, col.y, col.z, col.w);
+                }
+                ImGui::LogFinish();
+            }
+            ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");
+            ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
+
+            static ImGuiTextFilter filter;
+            filter.Draw("Filter colors", ImGui::GetFontSize() * 16);
+
+            static ImGuiColorEditFlags alpha_flags = 0;
+            if (ImGui::RadioButton("Opaque", alpha_flags == 0))                                     { alpha_flags = 0; } ImGui::SameLine();
+            if (ImGui::RadioButton("Alpha",  alpha_flags == ImGuiColorEditFlags_AlphaPreview))      { alpha_flags = ImGuiColorEditFlags_AlphaPreview; } ImGui::SameLine();
+            if (ImGui::RadioButton("Both",   alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf))  { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine();
+            HelpMarker("In the color list:\nLeft-click on colored square to open color picker,\nRight-click to open edit options menu.");
+
+            ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
+            ImGui::PushItemWidth(-160);
+            for (int i = 0; i < ImGuiCol_COUNT; i++)
+            {
+                const char* name = ImGui::GetStyleColorName(i);
+                if (!filter.PassFilter(name))
+                    continue;
+                ImGui::PushID(i);
+                ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
+                if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
+                {
+                    // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons.
+                    // Read the FAQ and docs/FONTS.txt about using icon fonts. It's really easy and super convenient!
+                    ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i];
+                    ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i];
+                }
+                ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
+                ImGui::TextUnformatted(name);
+                ImGui::PopID();
+            }
+            ImGui::PopItemWidth();
+            ImGui::EndChild();
+
+            ImGui::EndTabItem();
+        }
+
+        if (ImGui::BeginTabItem("Fonts"))
+        {
+            ImGuiIO& io = ImGui::GetIO();
+            ImFontAtlas* atlas = io.Fonts;
+            HelpMarker("Read FAQ and docs/FONTS.txt for details on font loading.");
+            ImGui::PushItemWidth(120);
+            for (int i = 0; i < atlas->Fonts.Size; i++)
+            {
+                ImFont* font = atlas->Fonts[i];
+                ImGui::PushID(font);
+                bool font_details_opened = ImGui::TreeNode(font, "Font %d: \"%s\"\n%.2f px, %d glyphs, %d file(s)", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size, font->ConfigDataCount);
+                ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) { io.FontDefault = font; }
+                if (font_details_opened)
+                {
+                    ImGui::PushFont(font);
+                    ImGui::Text("The quick brown fox jumps over the lazy dog");
+                    ImGui::PopFont();
+                    ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f");   // Scale only this font
+                    ImGui::SameLine(); HelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
+                    ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f");
+                    ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
+                    ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar);
+                    ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar);
+                    const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface);
+                    ImGui::Text("Texture Area: about %d px ~%dx%d px", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt);
+                    for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
+                        if (font->ConfigData)
+                            if (const ImFontConfig* cfg = &font->ConfigData[config_i])
+                                ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
+                    if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
+                    {
+                        // Display all glyphs of the fonts in separate pages of 256 characters
+                        for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256)
+                        {
+                            // Skip ahead if a large bunch of glyphs are not present in the font (test in chunks of 4k)
+                            // This is only a small optimization to reduce the number of iterations when IM_UNICODE_MAX_CODEPOINT is large.
+                            // (if ImWchar==ImWchar32 we will do at least about 272 queries here)
+                            if (!(base & 4095) && font->IsGlyphRangeUnused(base, base + 4095))
+                            {
+                                base += 4096 - 256;
+                                continue;
+                            }
+
+                            int count = 0;
+                            for (unsigned int n = 0; n < 256; n++)
+                                count += font->FindGlyphNoFallback((ImWchar)(base + n)) ? 1 : 0;
+                            if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base + 255, count, count > 1 ? "glyphs" : "glyph"))
+                            {
+                                float cell_size = font->FontSize * 1;
+                                float cell_spacing = style.ItemSpacing.y;
+                                ImVec2 base_pos = ImGui::GetCursorScreenPos();
+                                ImDrawList* draw_list = ImGui::GetWindowDrawList();
+                                for (unsigned int n = 0; n < 256; n++)
+                                {
+                                    ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing));
+                                    ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size);
+                                    const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n));
+                                    draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50));
+                                    if (glyph)
+                                        font->RenderChar(draw_list, cell_size, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base + n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
+                                    if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
+                                    {
+                                        ImGui::BeginTooltip();
+                                        ImGui::Text("Codepoint: U+%04X", base + n);
+                                        ImGui::Separator();
+                                        ImGui::Text("Visible: %d", glyph->Visible);
+                                        ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX);
+                                        ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
+                                        ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
+                                        ImGui::EndTooltip();
+                                    }
+                                }
+                                ImGui::Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16));
+                                ImGui::TreePop();
+                            }
+                        }
+                        ImGui::TreePop();
+                    }
+                    ImGui::TreePop();
+                }
+                ImGui::PopID();
+            }
+            if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
+            {
+                ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
+                ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
+                ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col);
+                ImGui::TreePop();
+            }
+
+            HelpMarker("Those are old settings provided for convenience.\nHowever, the _correct_ way of scaling your UI is currently to reload your font at the designed size, rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.");
+            static float window_scale = 1.0f;
+            if (ImGui::DragFloat("window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.2f"))   // scale only this window
+                ImGui::SetWindowFontScale(window_scale);
+            ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.2f");      // scale everything
+            ImGui::PopItemWidth();
+
+            ImGui::EndTabItem();
+        }
+
+        if (ImGui::BeginTabItem("Rendering"))
+        {
+            ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); HelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
+            ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
+            ImGui::PushItemWidth(100);
+            ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f");
+            if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
+            ImGui::DragFloat("Circle segment Max Error", &style.CircleSegmentMaxError, 0.01f, 0.10f, 10.0f, "%.2f");
+            ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero.
+            ImGui::PopItemWidth();
+
+            ImGui::EndTabItem();
+        }
+
+        ImGui::EndTabBar();
+    }
+
+    ImGui::PopItemWidth();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
+//-----------------------------------------------------------------------------
+// - ShowExampleAppMainMenuBar()
+// - ShowExampleMenuFile()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a "main" fullscreen menu bar and populating it.
+// Note the difference between BeginMainMenuBar() and BeginMenuBar():
+// - BeginMenuBar() = menu-bar inside current window we Begin()-ed into (the window needs the ImGuiWindowFlags_MenuBar flag)
+// - BeginMainMenuBar() = helper to create menu-bar-sized window at the top of the main viewport + call BeginMenuBar() into it.
+static void ShowExampleAppMainMenuBar()
+{
+    if (ImGui::BeginMainMenuBar())
+    {
+        if (ImGui::BeginMenu("File"))
+        {
+            ShowExampleMenuFile();
+            ImGui::EndMenu();
+        }
+        if (ImGui::BeginMenu("Edit"))
+        {
+            if (ImGui::MenuItem("Undo", "CTRL+Z")) {}
+            if (ImGui::MenuItem("Redo", "CTRL+Y", false, false)) {}  // Disabled item
+            ImGui::Separator();
+            if (ImGui::MenuItem("Cut", "CTRL+X")) {}
+            if (ImGui::MenuItem("Copy", "CTRL+C")) {}
+            if (ImGui::MenuItem("Paste", "CTRL+V")) {}
+            ImGui::EndMenu();
+        }
+        ImGui::EndMainMenuBar();
+    }
+}
+
+// Note that shortcuts are currently provided for display only (future version will add flags to BeginMenu to process shortcuts)
+static void ShowExampleMenuFile()
+{
+    ImGui::MenuItem("(dummy menu)", NULL, false, false);
+    if (ImGui::MenuItem("New")) {}
+    if (ImGui::MenuItem("Open", "Ctrl+O")) {}
+    if (ImGui::BeginMenu("Open Recent"))
+    {
+        ImGui::MenuItem("fish_hat.c");
+        ImGui::MenuItem("fish_hat.inl");
+        ImGui::MenuItem("fish_hat.h");
+        if (ImGui::BeginMenu("More.."))
+        {
+            ImGui::MenuItem("Hello");
+            ImGui::MenuItem("Sailor");
+            if (ImGui::BeginMenu("Recurse.."))
+            {
+                ShowExampleMenuFile();
+                ImGui::EndMenu();
+            }
+            ImGui::EndMenu();
+        }
+        ImGui::EndMenu();
+    }
+    if (ImGui::MenuItem("Save", "Ctrl+S")) {}
+    if (ImGui::MenuItem("Save As..")) {}
+
+    ImGui::Separator();
+    if (ImGui::BeginMenu("Options"))
+    {
+        static bool enabled = true;
+        ImGui::MenuItem("Enabled", "", &enabled);
+        ImGui::BeginChild("child", ImVec2(0, 60), true);
+        for (int i = 0; i < 10; i++)
+            ImGui::Text("Scrolling Text %d", i);
+        ImGui::EndChild();
+        static float f = 0.5f;
+        static int n = 0;
+        ImGui::SliderFloat("Value", &f, 0.0f, 1.0f);
+        ImGui::InputFloat("Input", &f, 0.1f);
+        ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0");
+        ImGui::EndMenu();
+    }
+
+    if (ImGui::BeginMenu("Colors"))
+    {
+        float sz = ImGui::GetTextLineHeight();
+        for (int i = 0; i < ImGuiCol_COUNT; i++)
+        {
+            const char* name = ImGui::GetStyleColorName((ImGuiCol)i);
+            ImVec2 p = ImGui::GetCursorScreenPos();
+            ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x+sz, p.y+sz), ImGui::GetColorU32((ImGuiCol)i));
+            ImGui::Dummy(ImVec2(sz, sz));
+            ImGui::SameLine();
+            ImGui::MenuItem(name);
+        }
+        ImGui::EndMenu();
+    }
+
+    // Here we demonstrate appending again to the "Options" menu (which we already created above)
+    // Of course in this demo it is a little bit silly that this function calls BeginMenu("Options") twice.
+    // In a real code-base using it would make senses to use this feature from very different code locations.
+    if (ImGui::BeginMenu("Options")) // <-- Append!
+    {
+        static bool b = true;
+        ImGui::Checkbox("SomeOption", &b);
+        ImGui::EndMenu();
+    }
+
+    if (ImGui::BeginMenu("Disabled", false)) // Disabled
+    {
+        IM_ASSERT(0);
+    }
+    if (ImGui::MenuItem("Checked", NULL, true)) {}
+    if (ImGui::MenuItem("Quit", "Alt+F4")) {}
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a simple console window, with scrolling, filtering, completion and history.
+// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions.
+struct ExampleAppConsole
+{
+    char                  InputBuf[256];
+    ImVector<char*>       Items;
+    ImVector<const char*> Commands;
+    ImVector<char*>       History;
+    int                   HistoryPos;    // -1: new line, 0..History.Size-1 browsing history.
+    ImGuiTextFilter       Filter;
+    bool                  AutoScroll;
+    bool                  ScrollToBottom;
+
+    ExampleAppConsole()
+    {
+        ClearLog();
+        memset(InputBuf, 0, sizeof(InputBuf));
+        HistoryPos = -1;
+        Commands.push_back("HELP");
+        Commands.push_back("HISTORY");
+        Commands.push_back("CLEAR");
+        Commands.push_back("CLASSIFY");  // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
+        AutoScroll = true;
+        ScrollToBottom = false;
+        AddLog("Welcome to Dear ImGui!");
+    }
+    ~ExampleAppConsole()
+    {
+        ClearLog();
+        for (int i = 0; i < History.Size; i++)
+            free(History[i]);
+    }
+
+    // Portable helpers
+    static int   Stricmp(const char* str1, const char* str2)         { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; }
+    static int   Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; }
+    static char* Strdup(const char *str)                             { size_t len = strlen(str) + 1; void* buf = malloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)str, len); }
+    static void  Strtrim(char* str)                                  { char* str_end = str + strlen(str); while (str_end > str && str_end[-1] == ' ') str_end--; *str_end = 0; }
+
+    void    ClearLog()
+    {
+        for (int i = 0; i < Items.Size; i++)
+            free(Items[i]);
+        Items.clear();
+    }
+
+    void    AddLog(const char* fmt, ...) IM_FMTARGS(2)
+    {
+        // FIXME-OPT
+        char buf[1024];
+        va_list args;
+        va_start(args, fmt);
+        vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
+        buf[IM_ARRAYSIZE(buf)-1] = 0;
+        va_end(args);
+        Items.push_back(Strdup(buf));
+    }
+
+    void    Draw(const char* title, bool* p_open)
+    {
+        ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
+        if (!ImGui::Begin(title, p_open))
+        {
+            ImGui::End();
+            return;
+        }
+
+        // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar.
+        // Here we create a context menu only available from the title bar.
+        if (ImGui::BeginPopupContextItem())
+        {
+            if (ImGui::MenuItem("Close Console"))
+                *p_open = false;
+            ImGui::EndPopup();
+        }
+
+        ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
+        ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion.");
+
+        // TODO: display items starting from the bottom
+
+        if (ImGui::SmallButton("Add Dummy Text"))  { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
+        if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
+        if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
+        bool copy_to_clipboard = ImGui::SmallButton("Copy");
+        //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
+
+        ImGui::Separator();
+
+        // Options menu
+        if (ImGui::BeginPopup("Options"))
+        {
+            ImGui::Checkbox("Auto-scroll", &AutoScroll);
+            ImGui::EndPopup();
+        }
+
+        // Options, Filter
+        if (ImGui::Button("Options"))
+            ImGui::OpenPopup("Options");
+        ImGui::SameLine();
+        Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
+        ImGui::Separator();
+
+        const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text
+        ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags_HorizontalScrollbar); // Leave room for 1 separator + 1 InputText
+        if (ImGui::BeginPopupContextWindow())
+        {
+            if (ImGui::Selectable("Clear")) ClearLog();
+            ImGui::EndPopup();
+        }
+
+        // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end());
+        // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items.
+        // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements.
+        // To use the clipper we could replace the 'for (int i = 0; i < Items.Size; i++)' loop with:
+        //     ImGuiListClipper clipper(Items.Size);
+        //     while (clipper.Step())
+        //         for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+        // However, note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list.
+        // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter,
+        // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code!
+        // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list.
+        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
+        if (copy_to_clipboard)
+            ImGui::LogToClipboard();
+        for (int i = 0; i < Items.Size; i++)
+        {
+            const char* item = Items[i];
+            if (!Filter.PassFilter(item))
+                continue;
+
+            // Normally you would store more information in your item (e.g. make Items[] an array of structure, store color/type etc.)
+            bool pop_color = false;
+            if (strstr(item, "[error]"))            { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.4f, 0.4f, 1.0f)); pop_color = true; }
+            else if (strncmp(item, "# ", 2) == 0)   { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.8f, 0.6f, 1.0f)); pop_color = true; }
+            ImGui::TextUnformatted(item);
+            if (pop_color)
+                ImGui::PopStyleColor();
+        }
+        if (copy_to_clipboard)
+            ImGui::LogFinish();
+
+        if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
+            ImGui::SetScrollHereY(1.0f);
+        ScrollToBottom = false;
+
+        ImGui::PopStyleVar();
+        ImGui::EndChild();
+        ImGui::Separator();
+
+        // Command-line
+        bool reclaim_focus = false;
+        if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this))
+        {
+            char* s = InputBuf;
+            Strtrim(s);
+            if (s[0])
+                ExecCommand(s);
+            strcpy(s, "");
+            reclaim_focus = true;
+        }
+
+        // Auto-focus on window apparition
+        ImGui::SetItemDefaultFocus();
+        if (reclaim_focus)
+            ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget
+
+        ImGui::End();
+    }
+
+    void    ExecCommand(const char* command_line)
+    {
+        AddLog("# %s\n", command_line);
+
+        // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal.
+        HistoryPos = -1;
+        for (int i = History.Size-1; i >= 0; i--)
+            if (Stricmp(History[i], command_line) == 0)
+            {
+                free(History[i]);
+                History.erase(History.begin() + i);
+                break;
+            }
+        History.push_back(Strdup(command_line));
+
+        // Process command
+        if (Stricmp(command_line, "CLEAR") == 0)
+        {
+            ClearLog();
+        }
+        else if (Stricmp(command_line, "HELP") == 0)
+        {
+            AddLog("Commands:");
+            for (int i = 0; i < Commands.Size; i++)
+                AddLog("- %s", Commands[i]);
+        }
+        else if (Stricmp(command_line, "HISTORY") == 0)
+        {
+            int first = History.Size - 10;
+            for (int i = first > 0 ? first : 0; i < History.Size; i++)
+                AddLog("%3d: %s\n", i, History[i]);
+        }
+        else
+        {
+            AddLog("Unknown command: '%s'\n", command_line);
+        }
+
+        // On commad input, we scroll to bottom even if AutoScroll==false
+        ScrollToBottom = true;
+    }
+
+    static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks
+    {
+        ExampleAppConsole* console = (ExampleAppConsole*)data->UserData;
+        return console->TextEditCallback(data);
+    }
+
+    int     TextEditCallback(ImGuiInputTextCallbackData* data)
+    {
+        //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd);
+        switch (data->EventFlag)
+        {
+        case ImGuiInputTextFlags_CallbackCompletion:
+            {
+                // Example of TEXT COMPLETION
+
+                // Locate beginning of current word
+                const char* word_end = data->Buf + data->CursorPos;
+                const char* word_start = word_end;
+                while (word_start > data->Buf)
+                {
+                    const char c = word_start[-1];
+                    if (c == ' ' || c == '\t' || c == ',' || c == ';')
+                        break;
+                    word_start--;
+                }
+
+                // Build a list of candidates
+                ImVector<const char*> candidates;
+                for (int i = 0; i < Commands.Size; i++)
+                    if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) == 0)
+                        candidates.push_back(Commands[i]);
+
+                if (candidates.Size == 0)
+                {
+                    // No match
+                    AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start);
+                }
+                else if (candidates.Size == 1)
+                {
+                    // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing
+                    data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start));
+                    data->InsertChars(data->CursorPos, candidates[0]);
+                    data->InsertChars(data->CursorPos, " ");
+                }
+                else
+                {
+                    // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY"
+                    int match_len = (int)(word_end - word_start);
+                    for (;;)
+                    {
+                        int c = 0;
+                        bool all_candidates_matches = true;
+                        for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
+                            if (i == 0)
+                                c = toupper(candidates[i][match_len]);
+                            else if (c == 0 || c != toupper(candidates[i][match_len]))
+                                all_candidates_matches = false;
+                        if (!all_candidates_matches)
+                            break;
+                        match_len++;
+                    }
+
+                    if (match_len > 0)
+                    {
+                        data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start));
+                        data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len);
+                    }
+
+                    // List matches
+                    AddLog("Possible matches:\n");
+                    for (int i = 0; i < candidates.Size; i++)
+                        AddLog("- %s\n", candidates[i]);
+                }
+
+                break;
+            }
+        case ImGuiInputTextFlags_CallbackHistory:
+            {
+                // Example of HISTORY
+                const int prev_history_pos = HistoryPos;
+                if (data->EventKey == ImGuiKey_UpArrow)
+                {
+                    if (HistoryPos == -1)
+                        HistoryPos = History.Size - 1;
+                    else if (HistoryPos > 0)
+                        HistoryPos--;
+                }
+                else if (data->EventKey == ImGuiKey_DownArrow)
+                {
+                    if (HistoryPos != -1)
+                        if (++HistoryPos >= History.Size)
+                            HistoryPos = -1;
+                }
+
+                // A better implementation would preserve the data on the current input line along with cursor position.
+                if (prev_history_pos != HistoryPos)
+                {
+                    const char* history_str = (HistoryPos >= 0) ? History[HistoryPos] : "";
+                    data->DeleteChars(0, data->BufTextLen);
+                    data->InsertChars(0, history_str);
+                }
+            }
+        }
+        return 0;
+    }
+};
+
+static void ShowExampleAppConsole(bool* p_open)
+{
+    static ExampleAppConsole console;
+    console.Draw("Example: Console", p_open);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Debug Log / ShowExampleAppLog()
+//-----------------------------------------------------------------------------
+
+// Usage:
+//  static ExampleAppLog my_log;
+//  my_log.AddLog("Hello %d world\n", 123);
+//  my_log.Draw("title");
+struct ExampleAppLog
+{
+    ImGuiTextBuffer     Buf;
+    ImGuiTextFilter     Filter;
+    ImVector<int>       LineOffsets;        // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines
+    bool                AutoScroll;     // Keep scrolling if already at the bottom
+
+    ExampleAppLog()
+    {
+        AutoScroll = true;
+        Clear();
+    }
+
+    void    Clear()
+    {
+        Buf.clear();
+        LineOffsets.clear();
+        LineOffsets.push_back(0);
+    }
+
+    void    AddLog(const char* fmt, ...) IM_FMTARGS(2)
+    {
+        int old_size = Buf.size();
+        va_list args;
+        va_start(args, fmt);
+        Buf.appendfv(fmt, args);
+        va_end(args);
+        for (int new_size = Buf.size(); old_size < new_size; old_size++)
+            if (Buf[old_size] == '\n')
+                LineOffsets.push_back(old_size + 1);
+    }
+
+    void    Draw(const char* title, bool* p_open = NULL)
+    {
+        if (!ImGui::Begin(title, p_open))
+        {
+            ImGui::End();
+            return;
+        }
+
+        // Options menu
+        if (ImGui::BeginPopup("Options"))
+        {
+            ImGui::Checkbox("Auto-scroll", &AutoScroll);
+            ImGui::EndPopup();
+        }
+
+        // Main window
+        if (ImGui::Button("Options"))
+            ImGui::OpenPopup("Options");
+        ImGui::SameLine();
+        bool clear = ImGui::Button("Clear");
+        ImGui::SameLine();
+        bool copy = ImGui::Button("Copy");
+        ImGui::SameLine();
+        Filter.Draw("Filter", -100.0f);
+
+        ImGui::Separator();
+        ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
+
+        if (clear)
+            Clear();
+        if (copy)
+            ImGui::LogToClipboard();
+
+        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+        const char* buf = Buf.begin();
+        const char* buf_end = Buf.end();
+        if (Filter.IsActive())
+        {
+            // In this example we don't use the clipper when Filter is enabled.
+            // This is because we don't have a random access on the result on our filter.
+            // A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
+            // especially if the filtering function is not trivial (e.g. reg-exp).
+            for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
+            {
+                const char* line_start = buf + LineOffsets[line_no];
+                const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+                if (Filter.PassFilter(line_start, line_end))
+                    ImGui::TextUnformatted(line_start, line_end);
+            }
+        }
+        else
+        {
+            // The simplest and easy way to display the entire buffer:
+            //   ImGui::TextUnformatted(buf_begin, buf_end);
+            // And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines.
+            // Here we instead demonstrate using the clipper to only process lines that are within the visible area.
+            // If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended.
+            // Using ImGuiListClipper requires A) random access into your data, and B) items all being the  same height,
+            // both of which we can handle since we an array pointing to the beginning of each line of text.
+            // When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper.
+            // Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries)
+            ImGuiListClipper clipper;
+            clipper.Begin(LineOffsets.Size);
+            while (clipper.Step())
+            {
+                for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
+                {
+                    const char* line_start = buf + LineOffsets[line_no];
+                    const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+                    ImGui::TextUnformatted(line_start, line_end);
+                }
+            }
+            clipper.End();
+        }
+        ImGui::PopStyleVar();
+
+        if (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
+            ImGui::SetScrollHereY(1.0f);
+
+        ImGui::EndChild();
+        ImGui::End();
+    }
+};
+
+// Demonstrate creating a simple log window with basic filtering.
+static void ShowExampleAppLog(bool* p_open)
+{
+    static ExampleAppLog log;
+
+    // For the demo: add a debug button _BEFORE_ the normal log window contents
+    // We take advantage of a rarely used feature: multiple calls to Begin()/End() are appending to the _same_ window.
+    // Most of the contents of the window will be added by the log.Draw() call.
+    ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
+    ImGui::Begin("Example: Log", p_open);
+    if (ImGui::SmallButton("[Debug] Add 5 entries"))
+    {
+        static int counter = 0;
+        for (int n = 0; n < 5; n++)
+        {
+            const char* categories[3] = { "info", "warn", "error" };
+            const char* words[] = { "Bumfuzzled", "Cattywampus", "Snickersnee", "Abibliophobia", "Absquatulate", "Nincompoop", "Pauciloquent" };
+            log.AddLog("[%05d] [%s] Hello, current time is %.1f, here's a word: '%s'\n",
+                ImGui::GetFrameCount(), categories[counter % IM_ARRAYSIZE(categories)], ImGui::GetTime(), words[counter % IM_ARRAYSIZE(words)]);
+            counter++;
+        }
+    }
+    ImGui::End();
+
+    // Actually call in the regular Log helper (which will Begin() into the same window as we just did)
+    log.Draw("Example: Log", p_open);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
+//-----------------------------------------------------------------------------
+
+// Demonstrate create a window with multiple child windows.
+static void ShowExampleAppLayout(bool* p_open)
+{
+    ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver);
+    if (ImGui::Begin("Example: Simple layout", p_open, ImGuiWindowFlags_MenuBar))
+    {
+        if (ImGui::BeginMenuBar())
+        {
+            if (ImGui::BeginMenu("File"))
+            {
+                if (ImGui::MenuItem("Close")) *p_open = false;
+                ImGui::EndMenu();
+            }
+            ImGui::EndMenuBar();
+        }
+
+        // left
+        static int selected = 0;
+        ImGui::BeginChild("left pane", ImVec2(150, 0), true);
+        for (int i = 0; i < 100; i++)
+        {
+            char label[128];
+            sprintf(label, "MyObject %d", i);
+            if (ImGui::Selectable(label, selected == i))
+                selected = i;
+        }
+        ImGui::EndChild();
+        ImGui::SameLine();
+
+        // right
+        ImGui::BeginGroup();
+            ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us
+                ImGui::Text("MyObject: %d", selected);
+                ImGui::Separator();
+                if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None))
+                {
+                    if (ImGui::BeginTabItem("Description"))
+                    {
+                        ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
+                        ImGui::EndTabItem();
+                    }
+                    if (ImGui::BeginTabItem("Details"))
+                    {
+                        ImGui::Text("ID: 0123456789");
+                        ImGui::EndTabItem();
+                    }
+                    ImGui::EndTabBar();
+                }
+            ImGui::EndChild();
+            if (ImGui::Button("Revert")) {}
+            ImGui::SameLine();
+            if (ImGui::Button("Save")) {}
+        ImGui::EndGroup();
+    }
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
+//-----------------------------------------------------------------------------
+
+// Demonstrate create a simple property editor.
+static void ShowExampleAppPropertyEditor(bool* p_open)
+{
+    ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiCond_FirstUseEver);
+    if (!ImGui::Begin("Example: Property editor", p_open))
+    {
+        ImGui::End();
+        return;
+    }
+
+    HelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API.");
+
+    ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2));
+    ImGui::Columns(2);
+    ImGui::Separator();
+
+    struct funcs
+    {
+        static void ShowDummyObject(const char* prefix, int uid)
+        {
+            ImGui::PushID(uid);                      // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID.
+            ImGui::AlignTextToFramePadding();  // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high.
+            bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid);
+            ImGui::NextColumn();
+            ImGui::AlignTextToFramePadding();
+            ImGui::Text("my sailor is rich");
+            ImGui::NextColumn();
+            if (node_open)
+            {
+                static float dummy_members[8] = { 0.0f,0.0f,1.0f,3.1416f,100.0f,999.0f };
+                for (int i = 0; i < 8; i++)
+                {
+                    ImGui::PushID(i); // Use field index as identifier.
+                    if (i < 2)
+                    {
+                        ShowDummyObject("Child", 424242);
+                    }
+                    else
+                    {
+                        // Here we use a TreeNode to highlight on hover (we could use e.g. Selectable as well)
+                        ImGui::AlignTextToFramePadding();
+                        ImGui::TreeNodeEx("Field", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_Bullet, "Field_%d", i);
+                        ImGui::NextColumn();
+                        ImGui::SetNextItemWidth(-1);
+                        if (i >= 5)
+                            ImGui::InputFloat("##value", &dummy_members[i], 1.0f);
+                        else
+                            ImGui::DragFloat("##value", &dummy_members[i], 0.01f);
+                        ImGui::NextColumn();
+                    }
+                    ImGui::PopID();
+                }
+                ImGui::TreePop();
+            }
+            ImGui::PopID();
+        }
+    };
+
+    // Iterate dummy objects with dummy members (all the same data)
+    for (int obj_i = 0; obj_i < 3; obj_i++)
+        funcs::ShowDummyObject("Object", obj_i);
+
+    ImGui::Columns(1);
+    ImGui::Separator();
+    ImGui::PopStyleVar();
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Long Text / ShowExampleAppLongText()
+//-----------------------------------------------------------------------------
+
+// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
+static void ShowExampleAppLongText(bool* p_open)
+{
+    ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
+    if (!ImGui::Begin("Example: Long text display", p_open))
+    {
+        ImGui::End();
+        return;
+    }
+
+    static int test_type = 0;
+    static ImGuiTextBuffer log;
+    static int lines = 0;
+    ImGui::Text("Printing unusually long amount of text.");
+    ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped\0Multiple calls to Text(), not clipped (slow)\0");
+    ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
+    if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
+    ImGui::SameLine();
+    if (ImGui::Button("Add 1000 lines"))
+    {
+        for (int i = 0; i < 1000; i++)
+            log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines+i);
+        lines += 1000;
+    }
+    ImGui::BeginChild("Log");
+    switch (test_type)
+    {
+    case 0:
+        // Single call to TextUnformatted() with a big buffer
+        ImGui::TextUnformatted(log.begin(), log.end());
+        break;
+    case 1:
+        {
+            // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper.
+            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));
+            ImGuiListClipper clipper(lines);
+            while (clipper.Step())
+                for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+                    ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
+            ImGui::PopStyleVar();
+            break;
+        }
+    case 2:
+        // Multiple calls to Text(), not clipped (slow)
+        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));
+        for (int i = 0; i < lines; i++)
+            ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
+        ImGui::PopStyleVar();
+        break;
+    }
+    ImGui::EndChild();
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a window which gets auto-resized according to its content.
+static void ShowExampleAppAutoResize(bool* p_open)
+{
+    if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize))
+    {
+        ImGui::End();
+        return;
+    }
+
+    static int lines = 10;
+    ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop.");
+    ImGui::SliderInt("Number of lines", &lines, 1, 20);
+    for (int i = 0; i < lines; i++)
+        ImGui::Text("%*sThis is line %d", i * 4, "", i); // Pad with space to extend size horizontally
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a window with custom resize constraints.
+static void ShowExampleAppConstrainedResize(bool* p_open)
+{
+    struct CustomConstraints // Helper functions to demonstrate programmatic constraints
+    {
+        static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize.x = data->DesiredSize.y = (data->DesiredSize.x > data->DesiredSize.y ? data->DesiredSize.x : data->DesiredSize.y); }
+        static void Step(ImGuiSizeCallbackData* data)   { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
+    };
+
+    static bool auto_resize = false;
+    static int type = 0;
+    static int display_lines = 10;
+    if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0),    ImVec2(-1, FLT_MAX));      // Vertical only
+    if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1),    ImVec2(FLT_MAX, -1));      // Horizontal only
+    if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
+    if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500
+    if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500
+    if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);                     // Always Square
+    if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step
+
+    ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
+    if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
+    {
+        const char* desc[] =
+        {
+            "Resize vertical only",
+            "Resize horizontal only",
+            "Width > 100, Height > 100",
+            "Width 400-500",
+            "Height 400-500",
+            "Custom: Always Square",
+            "Custom: Fixed Steps (100)",
+        };
+        if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
+        if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
+        if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
+        ImGui::SetNextItemWidth(200);
+        ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
+        ImGui::SetNextItemWidth(200);
+        ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
+        ImGui::Checkbox("Auto-resize", &auto_resize);
+        for (int i = 0; i < display_lines; i++)
+            ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
+    }
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
+static void ShowExampleAppSimpleOverlay(bool* p_open)
+{
+    const float DISTANCE = 10.0f;
+    static int corner = 0;
+    ImGuiIO& io = ImGui::GetIO();
+    if (corner != -1)
+    {
+        ImVec2 window_pos = ImVec2((corner & 1) ? io.DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? io.DisplaySize.y - DISTANCE : DISTANCE);
+        ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
+        ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
+    }
+    ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
+    if (ImGui::Begin("Example: Simple overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
+    {
+        ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
+        ImGui::Separator();
+        if (ImGui::IsMousePosValid())
+            ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y);
+        else
+            ImGui::Text("Mouse Position: <invalid>");
+        if (ImGui::BeginPopupContextWindow())
+        {
+            if (ImGui::MenuItem("Custom",       NULL, corner == -1)) corner = -1;
+            if (ImGui::MenuItem("Top-left",     NULL, corner == 0)) corner = 0;
+            if (ImGui::MenuItem("Top-right",    NULL, corner == 1)) corner = 1;
+            if (ImGui::MenuItem("Bottom-left",  NULL, corner == 2)) corner = 2;
+            if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
+            if (p_open && ImGui::MenuItem("Close")) *p_open = false;
+            ImGui::EndPopup();
+        }
+    }
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
+//-----------------------------------------------------------------------------
+
+// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
+// This apply to all regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details.
+static void ShowExampleAppWindowTitles(bool*)
+{
+    // By default, Windows are uniquely identified by their title.
+    // You can use the "##" and "###" markers to manipulate the display/ID.
+
+    // Using "##" to display same title but have unique identifier.
+    ImGui::SetNextWindowPos(ImVec2(100, 100), ImGuiCond_FirstUseEver);
+    ImGui::Begin("Same title as another window##1");
+    ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
+    ImGui::End();
+
+    ImGui::SetNextWindowPos(ImVec2(100, 200), ImGuiCond_FirstUseEver);
+    ImGui::Begin("Same title as another window##2");
+    ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
+    ImGui::End();
+
+    // Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
+    char buf[128];
+    sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime() / 0.25f) & 3], ImGui::GetFrameCount());
+    ImGui::SetNextWindowPos(ImVec2(100, 300), ImGuiCond_FirstUseEver);
+    ImGui::Begin(buf);
+    ImGui::Text("This window has a changing title.");
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
+//-----------------------------------------------------------------------------
+
+// Demonstrate using the low-level ImDrawList to draw custom shapes.
+static void ShowExampleAppCustomRendering(bool* p_open)
+{
+    if (!ImGui::Begin("Example: Custom rendering", p_open))
+    {
+        ImGui::End();
+        return;
+    }
+
+    // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc.
+    // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4.
+    // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types)
+    // In this example we are not using the maths operators!
+    ImDrawList* draw_list = ImGui::GetWindowDrawList();
+
+    if (ImGui::BeginTabBar("##TabBar"))
+    {
+        if (ImGui::BeginTabItem("Primitives"))
+        {
+            ImGui::PushItemWidth(-ImGui::GetFontSize() * 10);
+
+            // Draw gradients
+            // (note that those are currently exacerbating our sRGB/Linear issues)
+            ImGui::Text("Gradients");
+            ImVec2 gradient_size = ImVec2(ImGui::CalcItemWidth(), ImGui::GetFrameHeight());
+            {
+                ImVec2 p = ImGui::GetCursorScreenPos();
+                ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 0.0f, 0.0f, 1.0f));
+                ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
+                draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a);
+                ImGui::InvisibleButton("##gradient1", gradient_size);
+            }
+            {
+                ImVec2 p = ImGui::GetCursorScreenPos();
+                ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f));
+                ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 0.0f, 0.0f, 1.0f));
+                draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a);
+                ImGui::InvisibleButton("##gradient2", gradient_size);
+            }
+
+            // Draw a bunch of primitives
+            ImGui::Text("All primitives");
+            static float sz = 36.0f;
+            static float thickness = 3.0f;
+            static int ngon_sides = 6;
+            static bool circle_segments_override = false;
+            static int circle_segments_override_v = 12;
+            static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
+            ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
+            ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
+            ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12);
+            ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override);
+            ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+            if (ImGui::SliderInt("Circle segments", &circle_segments_override_v, 3, 40))
+                circle_segments_override = true;
+            ImGui::ColorEdit4("Color", &colf.x);
+            const ImVec2 p = ImGui::GetCursorScreenPos();
+            const ImU32 col = ImColor(colf);
+            const float spacing = 10.0f;
+            const ImDrawCornerFlags corners_none = 0;
+            const ImDrawCornerFlags corners_all = ImDrawCornerFlags_All;
+            const ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight;
+            const int circle_segments = circle_segments_override ? circle_segments_override_v : 0;
+            float x = p.x + 4.0f, y = p.y + 4.0f;
+            for (int n = 0; n < 2; n++)
+            {
+                // First line uses a thickness of 1.0f, second line uses the configurable thickness
+                float th = (n == 0) ? 1.0f : thickness;
+                draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th);         x += sz + spacing;  // N-gon
+                draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th);  x += sz + spacing;  // Circle
+                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f,  corners_none, th);     x += sz + spacing;  // Square
+                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_all, th);      x += sz + spacing;  // Square with all rounded corners
+                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br, th);    x += sz + spacing;  // Square with two rounded corners
+                draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th);      x += sz + spacing;      // Triangle
+                draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th); x += sz*0.4f + spacing; // Thin triangle
+                draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th);                               x += sz + spacing;  // Horizontal line (note: drawing a filled rectangle will be faster!)
+                draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col, th);                               x += spacing;       // Vertical line (note: drawing a filled rectangle will be faster!)
+                draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col, th);                          x += sz + spacing;  // Diagonal line
+                draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x + sz*1.3f, y + sz*0.3f), ImVec2(x + sz - sz*1.3f, y + sz - sz*0.3f), ImVec2(x + sz, y + sz), col, th);
+                x = p.x + 4;
+                y += sz + spacing;
+            }
+            draw_list->AddNgonFilled(ImVec2(x + sz * 0.5f, y + sz * 0.5f), sz*0.5f, col, ngon_sides);   x += sz + spacing;  // N-gon
+            draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments);x += sz + spacing;  // Circle
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col);                        x += sz + spacing;  // Square
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f);                 x += sz + spacing;  // Square with all rounded corners
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br);  x += sz + spacing;  // Square with two rounded corners
+            draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col);      x += sz + spacing;      // Triangle
+            draw_list->AddTriangleFilled(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col); x += sz*0.4f + spacing; // Thin triangle
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col);                 x += sz + spacing;  // Horizontal line (faster than AddLine, but only handle integer thickness)
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col);                 x += spacing*2.0f;  // Vertical line (faster than AddLine, but only handle integer thickness)
+            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col);                          x += sz;            // Pixel (faster than AddLine)
+            draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255));
+            ImGui::Dummy(ImVec2((sz + spacing) * 9.8f, (sz + spacing) * 3));
+
+            ImGui::PopItemWidth();
+            ImGui::EndTabItem();
+        }
+
+        if (ImGui::BeginTabItem("Canvas"))
+        {
+            static ImVector<ImVec2> points;
+            static bool adding_line = false;
+            if (ImGui::Button("Clear")) points.clear();
+            if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
+            ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
+
+            // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
+            // But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
+            // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
+            ImVec2 canvas_pos = ImGui::GetCursorScreenPos();            // ImDrawList API uses screen coordinates!
+            ImVec2 canvas_size = ImGui::GetContentRegionAvail();        // Resize canvas to what's available
+            if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
+            if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
+            draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255));
+            draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255));
+
+            bool adding_preview = false;
+            ImGui::InvisibleButton("canvas", canvas_size);
+            ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
+            if (adding_line)
+            {
+                adding_preview = true;
+                points.push_back(mouse_pos_in_canvas);
+                if (!ImGui::IsMouseDown(0))
+                    adding_line = adding_preview = false;
+            }
+            if (ImGui::IsItemHovered())
+            {
+                if (!adding_line && ImGui::IsMouseClicked(0))
+                {
+                    points.push_back(mouse_pos_in_canvas);
+                    adding_line = true;
+                }
+                if (ImGui::IsMouseClicked(1) && !points.empty())
+                {
+                    adding_line = adding_preview = false;
+                    points.pop_back();
+                    points.pop_back();
+                }
+            }
+            draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true);      // clip lines within the canvas (if we resize it, etc.)
+            for (int i = 0; i < points.Size - 1; i += 2)
+                draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
+            draw_list->PopClipRect();
+            if (adding_preview)
+                points.pop_back();
+            ImGui::EndTabItem();
+        }
+
+        if (ImGui::BeginTabItem("BG/FG draw lists"))
+        {
+            static bool draw_bg = true;
+            static bool draw_fg = true;
+            ImGui::Checkbox("Draw in Background draw list", &draw_bg);
+            ImGui::SameLine(); HelpMarker("The Background draw list will be rendered below every Dear ImGui windows.");
+            ImGui::Checkbox("Draw in Foreground draw list", &draw_fg);
+            ImGui::SameLine(); HelpMarker("The Foreground draw list will be rendered over every Dear ImGui windows.");
+            ImVec2 window_pos = ImGui::GetWindowPos();
+            ImVec2 window_size = ImGui::GetWindowSize();
+            ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f);
+            if (draw_bg)
+                ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10+4);
+            if (draw_fg)
+                ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10);
+            ImGui::EndTabItem();
+        }
+
+        ImGui::EndTabBar();
+    }
+
+    ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
+//-----------------------------------------------------------------------------
+
+// Simplified structure to mimic a Document model
+struct MyDocument
+{
+    const char* Name;           // Document title
+    bool        Open;           // Set when the document is open (in this demo, we keep an array of all available documents to simplify the demo)
+    bool        OpenPrev;       // Copy of Open from last update.
+    bool        Dirty;          // Set when the document has been modified
+    bool        WantClose;      // Set when the document
+    ImVec4      Color;          // An arbitrary variable associated to the document
+
+    MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f,1.0f,1.0f,1.0f))
+    {
+        Name = name;
+        Open = OpenPrev = open;
+        Dirty = false;
+        WantClose = false;
+        Color = color;
+    }
+    void DoOpen()       { Open = true; }
+    void DoQueueClose() { WantClose = true; }
+    void DoForceClose() { Open = false; Dirty = false; }
+    void DoSave()       { Dirty = false; }
+
+    // Display dummy contents for the Document
+    static void DisplayContents(MyDocument* doc)
+    {
+        ImGui::PushID(doc);
+        ImGui::Text("Document \"%s\"", doc->Name);
+        ImGui::PushStyleColor(ImGuiCol_Text, doc->Color);
+        ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
+        ImGui::PopStyleColor();
+        if (ImGui::Button("Modify", ImVec2(100, 0)))
+            doc->Dirty = true;
+        ImGui::SameLine();
+        if (ImGui::Button("Save", ImVec2(100, 0)))
+            doc->DoSave();
+        ImGui::ColorEdit3("color", &doc->Color.x);  // Useful to test drag and drop and hold-dragged-to-open-tab behavior.
+        ImGui::PopID();
+    }
+
+    // Display context menu for the Document
+    static void DisplayContextMenu(MyDocument* doc)
+    {
+        if (!ImGui::BeginPopupContextItem())
+            return;
+
+        char buf[256];
+        sprintf(buf, "Save %s", doc->Name);
+        if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open))
+            doc->DoSave();
+        if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open))
+            doc->DoQueueClose();
+        ImGui::EndPopup();
+    }
+};
+
+struct ExampleAppDocuments
+{
+    ImVector<MyDocument> Documents;
+
+    ExampleAppDocuments()
+    {
+        Documents.push_back(MyDocument("Lettuce",             true,  ImVec4(0.4f, 0.8f, 0.4f, 1.0f)));
+        Documents.push_back(MyDocument("Eggplant",            true,  ImVec4(0.8f, 0.5f, 1.0f, 1.0f)));
+        Documents.push_back(MyDocument("Carrot",              true,  ImVec4(1.0f, 0.8f, 0.5f, 1.0f)));
+        Documents.push_back(MyDocument("Tomato",              false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f)));
+        Documents.push_back(MyDocument("A Rather Long Title", false));
+        Documents.push_back(MyDocument("Some Document",       false));
+    }
+};
+
+// [Optional] Notify the system of Tabs/Windows closure that happened outside the regular tab interface.
+// If a tab has been closed programmatically (aka closed from another source such as the Checkbox() in the demo, as opposed
+// to clicking on the regular tab closing button) and stops being submitted, it will take a frame for the tab bar to notice its absence.
+// During this frame there will be a gap in the tab bar, and if the tab that has disappeared was the selected one, the tab bar
+// will report no selected tab during the frame. This will effectively give the impression of a flicker for one frame.
+// We call SetTabItemClosed() to manually notify the Tab Bar or Docking system of removed tabs to avoid this glitch.
+// Note that this completely optional, and only affect tab bars with the ImGuiTabBarFlags_Reorderable flag.
+static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
+{
+    for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+    {
+        MyDocument* doc = &app.Documents[doc_n];
+        if (!doc->Open && doc->OpenPrev)
+            ImGui::SetTabItemClosed(doc->Name);
+        doc->OpenPrev = doc->Open;
+    }
+}
+
+void ShowExampleAppDocuments(bool* p_open)
+{
+    static ExampleAppDocuments app;
+
+    // Options
+    static bool opt_reorderable = true;
+    static ImGuiTabBarFlags opt_fitting_flags = ImGuiTabBarFlags_FittingPolicyDefault_;
+
+    bool window_contents_visible = ImGui::Begin("Example: Documents", p_open, ImGuiWindowFlags_MenuBar);
+    if (!window_contents_visible)
+    {
+        ImGui::End();
+        return;
+    }
+
+    // Menu
+    if (ImGui::BeginMenuBar())
+    {
+        if (ImGui::BeginMenu("File"))
+        {
+            int open_count = 0;
+            for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+                open_count += app.Documents[doc_n].Open ? 1 : 0;
+
+            if (ImGui::BeginMenu("Open", open_count < app.Documents.Size))
+            {
+                for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+                {
+                    MyDocument* doc = &app.Documents[doc_n];
+                    if (!doc->Open)
+                        if (ImGui::MenuItem(doc->Name))
+                            doc->DoOpen();
+                }
+                ImGui::EndMenu();
+            }
+            if (ImGui::MenuItem("Close All Documents", NULL, false, open_count > 0))
+                for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+                    app.Documents[doc_n].DoQueueClose();
+            if (ImGui::MenuItem("Exit", "Alt+F4")) {}
+            ImGui::EndMenu();
+        }
+        ImGui::EndMenuBar();
+    }
+
+    // [Debug] List documents with one checkbox for each
+    for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+    {
+        MyDocument* doc = &app.Documents[doc_n];
+        if (doc_n > 0)
+            ImGui::SameLine();
+        ImGui::PushID(doc);
+        if (ImGui::Checkbox(doc->Name, &doc->Open))
+            if (!doc->Open)
+                doc->DoForceClose();
+        ImGui::PopID();
+    }
+
+    ImGui::Separator();
+
+    // Submit Tab Bar and Tabs
+    {
+        ImGuiTabBarFlags tab_bar_flags = (opt_fitting_flags) | (opt_reorderable ? ImGuiTabBarFlags_Reorderable : 0);
+        if (ImGui::BeginTabBar("##tabs", tab_bar_flags))
+        {
+            if (opt_reorderable)
+                NotifyOfDocumentsClosedElsewhere(app);
+
+            // [DEBUG] Stress tests
+            //if ((ImGui::GetFrameCount() % 30) == 0) docs[1].Open ^= 1;            // [DEBUG] Automatically show/hide a tab. Test various interactions e.g. dragging with this on.
+            //if (ImGui::GetIO().KeyCtrl) ImGui::SetTabItemSelected(docs[1].Name);  // [DEBUG] Test SetTabItemSelected(), probably not very useful as-is anyway..
+
+            // Submit Tabs
+            for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+            {
+                MyDocument* doc = &app.Documents[doc_n];
+                if (!doc->Open)
+                    continue;
+
+                ImGuiTabItemFlags tab_flags = (doc->Dirty ? ImGuiTabItemFlags_UnsavedDocument : 0);
+                bool visible = ImGui::BeginTabItem(doc->Name, &doc->Open, tab_flags);
+
+                // Cancel attempt to close when unsaved add to save queue so we can display a popup.
+                if (!doc->Open && doc->Dirty)
+                {
+                    doc->Open = true;
+                    doc->DoQueueClose();
+                }
+
+                MyDocument::DisplayContextMenu(doc);
+                if (visible)
+                {
+                    MyDocument::DisplayContents(doc);
+                    ImGui::EndTabItem();
+                }
+            }
+
+            ImGui::EndTabBar();
+        }
+    }
+
+    // Update closing queue
+    static ImVector<MyDocument*> close_queue;
+    if (close_queue.empty())
+    {
+        // Close queue is locked once we started a popup
+        for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+        {
+            MyDocument* doc = &app.Documents[doc_n];
+            if (doc->WantClose)
+            {
+                doc->WantClose = false;
+                close_queue.push_back(doc);
+            }
+        }
+    }
+
+    // Display closing confirmation UI
+    if (!close_queue.empty())
+    {
+        int close_queue_unsaved_documents = 0;
+        for (int n = 0; n < close_queue.Size; n++)
+            if (close_queue[n]->Dirty)
+                close_queue_unsaved_documents++;
+
+        if (close_queue_unsaved_documents == 0)
+        {
+            // Close documents when all are unsaved
+            for (int n = 0; n < close_queue.Size; n++)
+                close_queue[n]->DoForceClose();
+            close_queue.clear();
+        }
+        else
+        {
+            if (!ImGui::IsPopupOpen("Save?"))
+                ImGui::OpenPopup("Save?");
+            if (ImGui::BeginPopupModal("Save?"))
+            {
+                ImGui::Text("Save change to the following items?");
+                ImGui::SetNextItemWidth(-1.0f);
+                if (ImGui::ListBoxHeader("##", close_queue_unsaved_documents, 6))
+                {
+                    for (int n = 0; n < close_queue.Size; n++)
+                        if (close_queue[n]->Dirty)
+                            ImGui::Text("%s", close_queue[n]->Name);
+                    ImGui::ListBoxFooter();
+                }
+
+                if (ImGui::Button("Yes", ImVec2(80, 0)))
+                {
+                    for (int n = 0; n < close_queue.Size; n++)
+                    {
+                        if (close_queue[n]->Dirty)
+                            close_queue[n]->DoSave();
+                        close_queue[n]->DoForceClose();
+                    }
+                    close_queue.clear();
+                    ImGui::CloseCurrentPopup();
+                }
+                ImGui::SameLine();
+                if (ImGui::Button("No", ImVec2(80, 0)))
+                {
+                    for (int n = 0; n < close_queue.Size; n++)
+                        close_queue[n]->DoForceClose();
+                    close_queue.clear();
+                    ImGui::CloseCurrentPopup();
+                }
+                ImGui::SameLine();
+                if (ImGui::Button("Cancel", ImVec2(80, 0)))
+                {
+                    close_queue.clear();
+                    ImGui::CloseCurrentPopup();
+                }
+                ImGui::EndPopup();
+            }
+        }
+    }
+
+    ImGui::End();
+}
+
+// End of Demo code
+#else
+
+void ImGui::ShowAboutWindow(bool*) {}
+void ImGui::ShowDemoWindow(bool*) {}
+void ImGui::ShowUserGuide() {}
+void ImGui::ShowStyleEditor(ImGuiStyle*) {}
+
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imgui_draw.cpp
@@ -1,0 +1,3609 @@
+// dear imgui, v1.76 WIP
+// (drawing and font code)
+
+/*
+
+Index of this file:
+
+// [SECTION] STB libraries implementation
+// [SECTION] Style functions
+// [SECTION] ImDrawList
+// [SECTION] ImDrawListSplitter
+// [SECTION] ImDrawData
+// [SECTION] Helpers ShadeVertsXXX functions
+// [SECTION] ImFontConfig
+// [SECTION] ImFontAtlas
+// [SECTION] ImFontAtlas glyph ranges helpers
+// [SECTION] ImFontGlyphRangesBuilder
+// [SECTION] ImFont
+// [SECTION] ImGui Internal Render Helpers
+// [SECTION] Decompression code
+// [SECTION] Default font data (ProggyClean.ttf)
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+#include <stdio.h>      // vsnprintf, sscanf, printf
+#if !defined(alloca)
+#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__SWITCH__)
+#include <alloca.h>     // alloca (glibc uses <alloca.h>. Note that Cygwin may have _WIN32 defined, so the order matters here)
+#elif defined(_WIN32)
+#include <malloc.h>     // alloca
+#if !defined(alloca)
+#define alloca _alloca  // for clang with MS Codegen
+#endif
+#else
+#include <stdlib.h>     // alloca
+#endif
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok.
+#pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is.
+#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wcomma")
+#pragma clang diagnostic ignored "-Wcomma"                  // warning : possible misuse of comma operator here             //
+#endif
+#if __has_warning("-Wreserved-id-macro")
+#pragma clang diagnostic ignored "-Wreserved-id-macro"      // warning : macro name is a reserved identifier                //
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used
+#pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wstack-protector"          // warning: stack protector not protecting local variables: variable length buffer
+#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-------------------------------------------------------------------------
+// [SECTION] STB libraries implementation
+//-------------------------------------------------------------------------
+
+// Compile time options:
+//#define IMGUI_STB_NAMESPACE           ImStb
+//#define IMGUI_STB_TRUETYPE_FILENAME   "my_folder/stb_truetype.h"
+//#define IMGUI_STB_RECT_PACK_FILENAME  "my_folder/stb_rect_pack.h"
+//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+
+#ifdef IMGUI_STB_NAMESPACE
+namespace IMGUI_STB_NAMESPACE
+{
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable: 4456)                             // declaration of 'xx' hides previous local declaration
+#endif
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
+#pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier //
+#endif
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits]
+#pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers
+#endif
+
+#ifndef STB_RECT_PACK_IMPLEMENTATION                        // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
+#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+#define STBRP_STATIC
+#define STBRP_ASSERT(x)     IM_ASSERT(x)
+#define STBRP_SORT          ImQsort
+#define STB_RECT_PACK_IMPLEMENTATION
+#endif
+#ifdef IMGUI_STB_RECT_PACK_FILENAME
+#include IMGUI_STB_RECT_PACK_FILENAME
+#else
+#include "imstb_rectpack.h"
+#endif
+#endif
+
+#ifndef STB_TRUETYPE_IMPLEMENTATION                         // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
+#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+#define STBTT_malloc(x,u)   ((void)(u), IM_ALLOC(x))
+#define STBTT_free(x,u)     ((void)(u), IM_FREE(x))
+#define STBTT_assert(x)     IM_ASSERT(x)
+#define STBTT_fmod(x,y)     ImFmod(x,y)
+#define STBTT_sqrt(x)       ImSqrt(x)
+#define STBTT_pow(x,y)      ImPow(x,y)
+#define STBTT_fabs(x)       ImFabs(x)
+#define STBTT_ifloor(x)     ((int)ImFloorStd(x))
+#define STBTT_iceil(x)      ((int)ImCeil(x))
+#define STBTT_STATIC
+#define STB_TRUETYPE_IMPLEMENTATION
+#else
+#define STBTT_DEF extern
+#endif
+#ifdef IMGUI_STB_TRUETYPE_FILENAME
+#include IMGUI_STB_TRUETYPE_FILENAME
+#else
+#include "imstb_truetype.h"
+#endif
+#endif
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
+#ifdef IMGUI_STB_NAMESPACE
+} // namespace ImStb
+using namespace IMGUI_STB_NAMESPACE;
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Style functions
+//-----------------------------------------------------------------------------
+
+void ImGui::StyleColorsDark(ImGuiStyle* dst)
+{
+    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+    ImVec4* colors = style->Colors;
+
+    colors[ImGuiCol_Text]                   = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+    colors[ImGuiCol_TextDisabled]           = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
+    colors[ImGuiCol_WindowBg]               = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
+    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_PopupBg]                = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
+    colors[ImGuiCol_Border]                 = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
+    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_FrameBg]                = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
+    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+    colors[ImGuiCol_TitleBg]                = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
+    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
+    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
+    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
+    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
+    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
+    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
+    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
+    colors[ImGuiCol_CheckMark]              = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_SliderGrab]             = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
+    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_Button]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_ButtonActive]           = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+    colors[ImGuiCol_Header]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+    colors[ImGuiCol_HeaderActive]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_Separator]              = colors[ImGuiCol_Border];
+    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
+    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
+    colors[ImGuiCol_ResizeGrip]             = ImVec4(0.26f, 0.59f, 0.98f, 0.25f);
+    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.80f);
+    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
+    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
+    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
+    colors[ImGuiCol_PlotLines]              = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
+    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.19f, 0.19f, 0.20f, 1.00f);
+    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.31f, 0.31f, 0.35f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.23f, 0.23f, 0.25f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);
+    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+    colors[ImGuiCol_DragDropTarget]         = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
+    colors[ImGuiCol_NavHighlight]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
+    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
+    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
+}
+
+void ImGui::StyleColorsClassic(ImGuiStyle* dst)
+{
+    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+    ImVec4* colors = style->Colors;
+
+    colors[ImGuiCol_Text]                   = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
+    colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+    colors[ImGuiCol_WindowBg]               = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
+    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_PopupBg]                = ImVec4(0.11f, 0.11f, 0.14f, 0.92f);
+    colors[ImGuiCol_Border]                 = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);
+    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_FrameBg]                = ImVec4(0.43f, 0.43f, 0.43f, 0.39f);
+    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.47f, 0.47f, 0.69f, 0.40f);
+    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.42f, 0.41f, 0.64f, 0.69f);
+    colors[ImGuiCol_TitleBg]                = ImVec4(0.27f, 0.27f, 0.54f, 0.83f);
+    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.32f, 0.32f, 0.63f, 0.87f);
+    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
+    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
+    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
+    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
+    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
+    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+    colors[ImGuiCol_CheckMark]              = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
+    colors[ImGuiCol_SliderGrab]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
+    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+    colors[ImGuiCol_Button]                 = ImVec4(0.35f, 0.40f, 0.61f, 0.62f);
+    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.40f, 0.48f, 0.71f, 0.79f);
+    colors[ImGuiCol_ButtonActive]           = ImVec4(0.46f, 0.54f, 0.80f, 1.00f);
+    colors[ImGuiCol_Header]                 = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
+    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
+    colors[ImGuiCol_HeaderActive]           = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
+    colors[ImGuiCol_Separator]              = ImVec4(0.50f, 0.50f, 0.50f, 0.60f);
+    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
+    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
+    colors[ImGuiCol_ResizeGrip]             = ImVec4(1.00f, 1.00f, 1.00f, 0.16f);
+    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.78f, 0.82f, 1.00f, 0.60f);
+    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.78f, 0.82f, 1.00f, 0.90f);
+    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.80f);
+    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
+    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
+    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
+    colors[ImGuiCol_PlotLines]              = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.27f, 0.27f, 0.38f, 1.00f);
+    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.31f, 0.31f, 0.45f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.26f, 0.26f, 0.28f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);
+    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
+    colors[ImGuiCol_DragDropTarget]         = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
+    colors[ImGuiCol_NavHighlight]           = colors[ImGuiCol_HeaderHovered];
+    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
+    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
+    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+// Those light colors are better suited with a thicker font than the default one + FrameBorder
+void ImGui::StyleColorsLight(ImGuiStyle* dst)
+{
+    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+    ImVec4* colors = style->Colors;
+
+    colors[ImGuiCol_Text]                   = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);
+    colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+    colors[ImGuiCol_WindowBg]               = ImVec4(0.94f, 0.94f, 0.94f, 1.00f);
+    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_PopupBg]                = ImVec4(1.00f, 1.00f, 1.00f, 0.98f);
+    colors[ImGuiCol_Border]                 = ImVec4(0.00f, 0.00f, 0.00f, 0.30f);
+    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_FrameBg]                = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+    colors[ImGuiCol_TitleBg]                = ImVec4(0.96f, 0.96f, 0.96f, 1.00f);
+    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.82f, 0.82f, 0.82f, 1.00f);
+    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(1.00f, 1.00f, 1.00f, 0.51f);
+    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.86f, 0.86f, 0.86f, 1.00f);
+    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.98f, 0.98f, 0.98f, 0.53f);
+    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.69f, 0.69f, 0.69f, 0.80f);
+    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.49f, 0.49f, 0.49f, 0.80f);
+    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.49f, 0.49f, 0.49f, 1.00f);
+    colors[ImGuiCol_CheckMark]              = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_SliderGrab]             = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
+    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.46f, 0.54f, 0.80f, 0.60f);
+    colors[ImGuiCol_Button]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_ButtonActive]           = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+    colors[ImGuiCol_Header]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+    colors[ImGuiCol_HeaderActive]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+    colors[ImGuiCol_Separator]              = ImVec4(0.39f, 0.39f, 0.39f, 0.62f);
+    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.14f, 0.44f, 0.80f, 0.78f);
+    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.14f, 0.44f, 0.80f, 1.00f);
+    colors[ImGuiCol_ResizeGrip]             = ImVec4(0.80f, 0.80f, 0.80f, 0.56f);
+    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.90f);
+    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
+    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
+    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
+    colors[ImGuiCol_PlotLines]              = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
+    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.45f, 0.00f, 1.00f);
+    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.78f, 0.87f, 0.98f, 1.00f);
+    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.57f, 0.57f, 0.64f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.68f, 0.68f, 0.74f, 1.00f);   // Prefer using Alpha=1.0 here
+    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(0.30f, 0.30f, 0.30f, 0.07f);
+    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+    colors[ImGuiCol_DragDropTarget]         = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+    colors[ImGuiCol_NavHighlight]           = colors[ImGuiCol_HeaderHovered];
+    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
+    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
+    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+//-----------------------------------------------------------------------------
+// ImDrawList
+//-----------------------------------------------------------------------------
+
+ImDrawListSharedData::ImDrawListSharedData()
+{
+    Font = NULL;
+    FontSize = 0.0f;
+    CurveTessellationTol = 0.0f;
+    CircleSegmentMaxError = 0.0f;
+    ClipRectFullscreen = ImVec4(-8192.0f, -8192.0f, +8192.0f, +8192.0f);
+    InitialFlags = ImDrawListFlags_None;
+
+    // Lookup tables
+    for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
+    {
+        const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
+        ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
+    }
+    memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError()
+}
+
+void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error)
+{
+    if (CircleSegmentMaxError == max_error)
+        return;
+    CircleSegmentMaxError = max_error;
+    for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++)
+    {
+        const float radius = i + 1.0f;
+        const int segment_count = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError);
+        CircleSegmentCounts[i] = (ImU8)ImMin(segment_count, 255);
+    }
+}
+
+void ImDrawList::Clear()
+{
+    CmdBuffer.resize(0);
+    IdxBuffer.resize(0);
+    VtxBuffer.resize(0);
+    Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None;
+    _VtxCurrentOffset = 0;
+    _VtxCurrentIdx = 0;
+    _VtxWritePtr = NULL;
+    _IdxWritePtr = NULL;
+    _ClipRectStack.resize(0);
+    _TextureIdStack.resize(0);
+    _Path.resize(0);
+    _Splitter.Clear();
+}
+
+void ImDrawList::ClearFreeMemory()
+{
+    CmdBuffer.clear();
+    IdxBuffer.clear();
+    VtxBuffer.clear();
+    _VtxCurrentIdx = 0;
+    _VtxWritePtr = NULL;
+    _IdxWritePtr = NULL;
+    _ClipRectStack.clear();
+    _TextureIdStack.clear();
+    _Path.clear();
+    _Splitter.ClearFreeMemory();
+}
+
+ImDrawList* ImDrawList::CloneOutput() const
+{
+    ImDrawList* dst = IM_NEW(ImDrawList(_Data));
+    dst->CmdBuffer = CmdBuffer;
+    dst->IdxBuffer = IdxBuffer;
+    dst->VtxBuffer = VtxBuffer;
+    dst->Flags = Flags;
+    return dst;
+}
+
+// Using macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug builds
+#define GetCurrentClipRect()    (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1]  : _Data->ClipRectFullscreen)
+#define GetCurrentTextureId()   (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : (ImTextureID)NULL)
+
+void ImDrawList::AddDrawCmd()
+{
+    ImDrawCmd draw_cmd;
+    draw_cmd.ClipRect = GetCurrentClipRect();
+    draw_cmd.TextureId = GetCurrentTextureId();
+    draw_cmd.VtxOffset = _VtxCurrentOffset;
+    draw_cmd.IdxOffset = IdxBuffer.Size;
+
+    IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w);
+    CmdBuffer.push_back(draw_cmd);
+}
+
+void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
+{
+    ImDrawCmd* current_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL;
+    if (!current_cmd || current_cmd->ElemCount != 0 || current_cmd->UserCallback != NULL)
+    {
+        AddDrawCmd();
+        current_cmd = &CmdBuffer.back();
+    }
+    current_cmd->UserCallback = callback;
+    current_cmd->UserCallbackData = callback_data;
+
+    AddDrawCmd(); // Force a new command after us (see comment below)
+}
+
+// Our scheme may appears a bit unusual, basically we want the most-common calls AddLine AddRect etc. to not have to perform any check so we always have a command ready in the stack.
+// The cost of figuring out if a new command has to be added or if we can merge is paid in those Update** functions only.
+void ImDrawList::UpdateClipRect()
+{
+    // If current command is used with different settings we need to add a new command
+    const ImVec4 curr_clip_rect = GetCurrentClipRect();
+    ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size-1] : NULL;
+    if (!curr_cmd || (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL)
+    {
+        AddDrawCmd();
+        return;
+    }
+
+    // Try to merge with previous command if it matches, else use current command
+    ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL;
+    if (curr_cmd->ElemCount == 0 && prev_cmd && memcmp(&prev_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) == 0 && prev_cmd->TextureId == GetCurrentTextureId() && prev_cmd->UserCallback == NULL)
+        CmdBuffer.pop_back();
+    else
+        curr_cmd->ClipRect = curr_clip_rect;
+}
+
+void ImDrawList::UpdateTextureID()
+{
+    // If current command is used with different settings we need to add a new command
+    const ImTextureID curr_texture_id = GetCurrentTextureId();
+    ImDrawCmd* curr_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL;
+    if (!curr_cmd || (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != curr_texture_id) || curr_cmd->UserCallback != NULL)
+    {
+        AddDrawCmd();
+        return;
+    }
+
+    // Try to merge with previous command if it matches, else use current command
+    ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL;
+    if (curr_cmd->ElemCount == 0 && prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL)
+        CmdBuffer.pop_back();
+    else
+        curr_cmd->TextureId = curr_texture_id;
+}
+
+#undef GetCurrentClipRect
+#undef GetCurrentTextureId
+
+// Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
+void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect)
+{
+    ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y);
+    if (intersect_with_current_clip_rect && _ClipRectStack.Size)
+    {
+        ImVec4 current = _ClipRectStack.Data[_ClipRectStack.Size-1];
+        if (cr.x < current.x) cr.x = current.x;
+        if (cr.y < current.y) cr.y = current.y;
+        if (cr.z > current.z) cr.z = current.z;
+        if (cr.w > current.w) cr.w = current.w;
+    }
+    cr.z = ImMax(cr.x, cr.z);
+    cr.w = ImMax(cr.y, cr.w);
+
+    _ClipRectStack.push_back(cr);
+    UpdateClipRect();
+}
+
+void ImDrawList::PushClipRectFullScreen()
+{
+    PushClipRect(ImVec2(_Data->ClipRectFullscreen.x, _Data->ClipRectFullscreen.y), ImVec2(_Data->ClipRectFullscreen.z, _Data->ClipRectFullscreen.w));
+}
+
+void ImDrawList::PopClipRect()
+{
+    IM_ASSERT(_ClipRectStack.Size > 0);
+    _ClipRectStack.pop_back();
+    UpdateClipRect();
+}
+
+void ImDrawList::PushTextureID(ImTextureID texture_id)
+{
+    _TextureIdStack.push_back(texture_id);
+    UpdateTextureID();
+}
+
+void ImDrawList::PopTextureID()
+{
+    IM_ASSERT(_TextureIdStack.Size > 0);
+    _TextureIdStack.pop_back();
+    UpdateTextureID();
+}
+
+// Reserve space for a number of vertices and indices.
+// You must finish filling your reserved data before calling PrimReserve() again, as it may reallocate or
+// submit the intermediate results. PrimUnreserve() can be used to release unused allocations.
+void ImDrawList::PrimReserve(int idx_count, int vtx_count)
+{
+    // Large mesh support (when enabled)
+    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
+    if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
+    {
+        _VtxCurrentOffset = VtxBuffer.Size;
+        _VtxCurrentIdx = 0;
+        AddDrawCmd();
+    }
+
+    ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1];
+    draw_cmd.ElemCount += idx_count;
+
+    int vtx_buffer_old_size = VtxBuffer.Size;
+    VtxBuffer.resize(vtx_buffer_old_size + vtx_count);
+    _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size;
+
+    int idx_buffer_old_size = IdxBuffer.Size;
+    IdxBuffer.resize(idx_buffer_old_size + idx_count);
+    _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size;
+}
+
+// Release the a number of reserved vertices/indices from the end of the last reservation made with PrimReserve().
+void ImDrawList::PrimUnreserve(int idx_count, int vtx_count)
+{
+    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
+
+    ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1];
+    draw_cmd.ElemCount -= idx_count;
+    VtxBuffer.shrink(VtxBuffer.Size - vtx_count);
+    IdxBuffer.shrink(IdxBuffer.Size - idx_count);
+}
+
+// Fully unrolled with inline call to keep our debug builds decently fast.
+void ImDrawList::PrimRect(const ImVec2& a, const ImVec2& c, ImU32 col)
+{
+    ImVec2 b(c.x, a.y), d(a.x, c.y), uv(_Data->TexUvWhitePixel);
+    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
+    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
+    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col;
+    _VtxWritePtr += 4;
+    _VtxCurrentIdx += 4;
+    _IdxWritePtr += 6;
+}
+
+void ImDrawList::PrimRectUV(const ImVec2& a, const ImVec2& c, const ImVec2& uv_a, const ImVec2& uv_c, ImU32 col)
+{
+    ImVec2 b(c.x, a.y), d(a.x, c.y), uv_b(uv_c.x, uv_a.y), uv_d(uv_a.x, uv_c.y);
+    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
+    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
+    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
+    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
+    _VtxWritePtr += 4;
+    _VtxCurrentIdx += 4;
+    _IdxWritePtr += 6;
+}
+
+void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col)
+{
+    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
+    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
+    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
+    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
+    _VtxWritePtr += 4;
+    _VtxCurrentIdx += 4;
+    _IdxWritePtr += 6;
+}
+
+// On AddPolyline() and AddConvexPolyFilled() we intentionally avoid using ImVec2 and superflous function calls to optimize debug/non-inlined builds.
+// Those macros expects l-values.
+#define IM_NORMALIZE2F_OVER_ZERO(VX,VY)     do { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = 1.0f / ImSqrt(d2); VX *= inv_len; VY *= inv_len; } } while (0)
+#define IM_FIXNORMAL2F(VX,VY)               do { float d2 = VX*VX + VY*VY; if (d2 < 0.5f) d2 = 0.5f; float inv_lensq = 1.0f / d2; VX *= inv_lensq; VY *= inv_lensq; } while (0)
+
+// TODO: Thickness anti-aliased lines cap are missing their AA fringe.
+// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds.
+void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness)
+{
+    if (points_count < 2)
+        return;
+
+    const ImVec2 uv = _Data->TexUvWhitePixel;
+
+    int count = points_count;
+    if (!closed)
+        count = points_count-1;
+
+    const bool thick_line = thickness > 1.0f;
+    if (Flags & ImDrawListFlags_AntiAliasedLines)
+    {
+        // Anti-aliased stroke
+        const float AA_SIZE = 1.0f;
+        const ImU32 col_trans = col & ~IM_COL32_A_MASK;
+
+        const int idx_count = thick_line ? count*18 : count*12;
+        const int vtx_count = thick_line ? points_count*4 : points_count*3;
+        PrimReserve(idx_count, vtx_count);
+
+        // Temporary buffer
+        ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2)); //-V630
+        ImVec2* temp_points = temp_normals + points_count;
+
+        for (int i1 = 0; i1 < count; i1++)
+        {
+            const int i2 = (i1+1) == points_count ? 0 : i1+1;
+            float dx = points[i2].x - points[i1].x;
+            float dy = points[i2].y - points[i1].y;
+            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+            temp_normals[i1].x = dy;
+            temp_normals[i1].y = -dx;
+        }
+        if (!closed)
+            temp_normals[points_count-1] = temp_normals[points_count-2];
+
+        if (!thick_line)
+        {
+            if (!closed)
+            {
+                temp_points[0] = points[0] + temp_normals[0] * AA_SIZE;
+                temp_points[1] = points[0] - temp_normals[0] * AA_SIZE;
+                temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * AA_SIZE;
+                temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * AA_SIZE;
+            }
+
+            // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
+            unsigned int idx1 = _VtxCurrentIdx;
+            for (int i1 = 0; i1 < count; i1++)
+            {
+                const int i2 = (i1+1) == points_count ? 0 : i1+1;
+                unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3;
+
+                // Average normals
+                float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+                float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+                IM_FIXNORMAL2F(dm_x, dm_y);
+                dm_x *= AA_SIZE;
+                dm_y *= AA_SIZE;
+
+                // Add temporary vertexes
+                ImVec2* out_vtx = &temp_points[i2*2];
+                out_vtx[0].x = points[i2].x + dm_x;
+                out_vtx[0].y = points[i2].y + dm_y;
+                out_vtx[1].x = points[i2].x - dm_x;
+                out_vtx[1].y = points[i2].y - dm_y;
+
+                // Add indexes
+                _IdxWritePtr[0] = (ImDrawIdx)(idx2+0); _IdxWritePtr[1] = (ImDrawIdx)(idx1+0); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2);
+                _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+0);
+                _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0);
+                _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10]= (ImDrawIdx)(idx2+0); _IdxWritePtr[11]= (ImDrawIdx)(idx2+1);
+                _IdxWritePtr += 12;
+
+                idx1 = idx2;
+            }
+
+            // Add vertexes
+            for (int i = 0; i < points_count; i++)
+            {
+                _VtxWritePtr[0].pos = points[i];          _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+                _VtxWritePtr[1].pos = temp_points[i*2+0]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;
+                _VtxWritePtr[2].pos = temp_points[i*2+1]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans;
+                _VtxWritePtr += 3;
+            }
+        }
+        else
+        {
+            const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f;
+            if (!closed)
+            {
+                temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE);
+                temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness);
+                temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness);
+                temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE);
+                temp_points[(points_count-1)*4+0] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
+                temp_points[(points_count-1)*4+1] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness);
+                temp_points[(points_count-1)*4+2] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness);
+                temp_points[(points_count-1)*4+3] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
+            }
+
+            // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
+            unsigned int idx1 = _VtxCurrentIdx;
+            for (int i1 = 0; i1 < count; i1++)
+            {
+                const int i2 = (i1+1) == points_count ? 0 : i1+1;
+                unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+4;
+
+                // Average normals
+                float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+                float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+                IM_FIXNORMAL2F(dm_x, dm_y);
+                float dm_out_x = dm_x * (half_inner_thickness + AA_SIZE);
+                float dm_out_y = dm_y * (half_inner_thickness + AA_SIZE);
+                float dm_in_x = dm_x * half_inner_thickness;
+                float dm_in_y = dm_y * half_inner_thickness;
+
+                // Add temporary vertexes
+                ImVec2* out_vtx = &temp_points[i2*4];
+                out_vtx[0].x = points[i2].x + dm_out_x;
+                out_vtx[0].y = points[i2].y + dm_out_y;
+                out_vtx[1].x = points[i2].x + dm_in_x;
+                out_vtx[1].y = points[i2].y + dm_in_y;
+                out_vtx[2].x = points[i2].x - dm_in_x;
+                out_vtx[2].y = points[i2].y - dm_in_y;
+                out_vtx[3].x = points[i2].x - dm_out_x;
+                out_vtx[3].y = points[i2].y - dm_out_y;
+
+                // Add indexes
+                _IdxWritePtr[0]  = (ImDrawIdx)(idx2+1); _IdxWritePtr[1]  = (ImDrawIdx)(idx1+1); _IdxWritePtr[2]  = (ImDrawIdx)(idx1+2);
+                _IdxWritePtr[3]  = (ImDrawIdx)(idx1+2); _IdxWritePtr[4]  = (ImDrawIdx)(idx2+2); _IdxWritePtr[5]  = (ImDrawIdx)(idx2+1);
+                _IdxWritePtr[6]  = (ImDrawIdx)(idx2+1); _IdxWritePtr[7]  = (ImDrawIdx)(idx1+1); _IdxWritePtr[8]  = (ImDrawIdx)(idx1+0);
+                _IdxWritePtr[9]  = (ImDrawIdx)(idx1+0); _IdxWritePtr[10] = (ImDrawIdx)(idx2+0); _IdxWritePtr[11] = (ImDrawIdx)(idx2+1);
+                _IdxWritePtr[12] = (ImDrawIdx)(idx2+2); _IdxWritePtr[13] = (ImDrawIdx)(idx1+2); _IdxWritePtr[14] = (ImDrawIdx)(idx1+3);
+                _IdxWritePtr[15] = (ImDrawIdx)(idx1+3); _IdxWritePtr[16] = (ImDrawIdx)(idx2+3); _IdxWritePtr[17] = (ImDrawIdx)(idx2+2);
+                _IdxWritePtr += 18;
+
+                idx1 = idx2;
+            }
+
+            // Add vertexes
+            for (int i = 0; i < points_count; i++)
+            {
+                _VtxWritePtr[0].pos = temp_points[i*4+0]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col_trans;
+                _VtxWritePtr[1].pos = temp_points[i*4+1]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
+                _VtxWritePtr[2].pos = temp_points[i*4+2]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
+                _VtxWritePtr[3].pos = temp_points[i*4+3]; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans;
+                _VtxWritePtr += 4;
+            }
+        }
+        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+    }
+    else
+    {
+        // Non Anti-aliased Stroke
+        const int idx_count = count*6;
+        const int vtx_count = count*4;      // FIXME-OPT: Not sharing edges
+        PrimReserve(idx_count, vtx_count);
+
+        for (int i1 = 0; i1 < count; i1++)
+        {
+            const int i2 = (i1+1) == points_count ? 0 : i1+1;
+            const ImVec2& p1 = points[i1];
+            const ImVec2& p2 = points[i2];
+
+            float dx = p2.x - p1.x;
+            float dy = p2.y - p1.y;
+            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+            dx *= (thickness * 0.5f);
+            dy *= (thickness * 0.5f);
+
+            _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+            _VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
+            _VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
+            _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col;
+            _VtxWritePtr += 4;
+
+            _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+2);
+            _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx+2); _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx+3);
+            _IdxWritePtr += 6;
+            _VtxCurrentIdx += 4;
+        }
+    }
+}
+
+// We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds.
+void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col)
+{
+    if (points_count < 3)
+        return;
+
+    const ImVec2 uv = _Data->TexUvWhitePixel;
+
+    if (Flags & ImDrawListFlags_AntiAliasedFill)
+    {
+        // Anti-aliased Fill
+        const float AA_SIZE = 1.0f;
+        const ImU32 col_trans = col & ~IM_COL32_A_MASK;
+        const int idx_count = (points_count-2)*3 + points_count*6;
+        const int vtx_count = (points_count*2);
+        PrimReserve(idx_count, vtx_count);
+
+        // Add indexes for fill
+        unsigned int vtx_inner_idx = _VtxCurrentIdx;
+        unsigned int vtx_outer_idx = _VtxCurrentIdx+1;
+        for (int i = 2; i < points_count; i++)
+        {
+            _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+((i-1)<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx+(i<<1));
+            _IdxWritePtr += 3;
+        }
+
+        // Compute normals
+        ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630
+        for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
+        {
+            const ImVec2& p0 = points[i0];
+            const ImVec2& p1 = points[i1];
+            float dx = p1.x - p0.x;
+            float dy = p1.y - p0.y;
+            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+            temp_normals[i0].x = dy;
+            temp_normals[i0].y = -dx;
+        }
+
+        for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
+        {
+            // Average normals
+            const ImVec2& n0 = temp_normals[i0];
+            const ImVec2& n1 = temp_normals[i1];
+            float dm_x = (n0.x + n1.x) * 0.5f;
+            float dm_y = (n0.y + n1.y) * 0.5f;
+            IM_FIXNORMAL2F(dm_x, dm_y);
+            dm_x *= AA_SIZE * 0.5f;
+            dm_y *= AA_SIZE * 0.5f;
+
+            // Add vertices
+            _VtxWritePtr[0].pos.x = (points[i1].x - dm_x); _VtxWritePtr[0].pos.y = (points[i1].y - dm_y); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;        // Inner
+            _VtxWritePtr[1].pos.x = (points[i1].x + dm_x); _VtxWritePtr[1].pos.y = (points[i1].y + dm_y); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;  // Outer
+            _VtxWritePtr += 2;
+
+            // Add indexes for fringes
+            _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx+(i0<<1));
+            _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx+(i1<<1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx+(i1<<1));
+            _IdxWritePtr += 6;
+        }
+        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+    }
+    else
+    {
+        // Non Anti-aliased Fill
+        const int idx_count = (points_count-2)*3;
+        const int vtx_count = points_count;
+        PrimReserve(idx_count, vtx_count);
+        for (int i = 0; i < vtx_count; i++)
+        {
+            _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+            _VtxWritePtr++;
+        }
+        for (int i = 2; i < points_count; i++)
+        {
+            _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+i-1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+i);
+            _IdxWritePtr += 3;
+        }
+        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+    }
+}
+
+void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
+{
+    if (radius == 0.0f || a_min_of_12 > a_max_of_12)
+    {
+        _Path.push_back(center);
+        return;
+    }
+
+    // For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
+    // but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
+#if IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER != 1
+    a_min_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
+    a_max_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
+#endif
+
+    _Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
+    for (int a = a_min_of_12; a <= a_max_of_12; a++)
+    {
+        const ImVec2& c = _Data->ArcFastVtx[a % IM_ARRAYSIZE(_Data->ArcFastVtx)];
+        _Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
+    }
+}
+
+void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
+{
+    if (radius == 0.0f)
+    {
+        _Path.push_back(center);
+        return;
+    }
+
+    // Note that we are adding a point at both a_min and a_max.
+    // If you are trying to draw a full closed circle you don't want the overlapping points!
+    _Path.reserve(_Path.Size + (num_segments + 1));
+    for (int i = 0; i <= num_segments; i++)
+    {
+        const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
+        _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius));
+    }
+}
+
+ImVec2 ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t)
+{
+    float u = 1.0f - t;
+    float w1 = u*u*u;
+    float w2 = 3*u*u*t;
+    float w3 = 3*u*t*t;
+    float w4 = t*t*t;
+    return ImVec2(w1*p1.x + w2*p2.x + w3*p3.x + w4*p4.x, w1*p1.y + w2*p2.y + w3*p3.y + w4*p4.y);
+}
+
+// Closely mimics BezierClosestPointCasteljauStep() in imgui.cpp
+static void PathBezierToCasteljau(ImVector<ImVec2>* path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
+{
+    float dx = x4 - x1;
+    float dy = y4 - y1;
+    float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
+    float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
+    d2 = (d2 >= 0) ? d2 : -d2;
+    d3 = (d3 >= 0) ? d3 : -d3;
+    if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy))
+    {
+        path->push_back(ImVec2(x4, y4));
+    }
+    else if (level < 10)
+    {
+        float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f;
+        float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f;
+        float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f;
+        float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f;
+        float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f;
+        float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f;
+        PathBezierToCasteljau(path, x1,y1,        x12,y12,    x123,y123,  x1234,y1234, tess_tol, level+1);
+        PathBezierToCasteljau(path, x1234,y1234,  x234,y234,  x34,y34,    x4,y4,       tess_tol, level+1);
+    }
+}
+
+void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments)
+{
+    ImVec2 p1 = _Path.back();
+    if (num_segments == 0)
+    {
+        PathBezierToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, _Data->CurveTessellationTol, 0); // Auto-tessellated
+    }
+    else
+    {
+        float t_step = 1.0f / (float)num_segments;
+        for (int i_step = 1; i_step <= num_segments; i_step++)
+            _Path.push_back(ImBezierCalc(p1, p2, p3, p4, t_step * i_step));
+    }
+}
+
+void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDrawCornerFlags rounding_corners)
+{
+    rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((rounding_corners & ImDrawCornerFlags_Top)  == ImDrawCornerFlags_Top)  || ((rounding_corners & ImDrawCornerFlags_Bot)   == ImDrawCornerFlags_Bot)   ? 0.5f : 1.0f ) - 1.0f);
+    rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f ) - 1.0f);
+
+    if (rounding <= 0.0f || rounding_corners == 0)
+    {
+        PathLineTo(a);
+        PathLineTo(ImVec2(b.x, a.y));
+        PathLineTo(b);
+        PathLineTo(ImVec2(a.x, b.y));
+    }
+    else
+    {
+        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
+        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
+        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
+        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;
+        PathArcToFast(ImVec2(a.x + rounding_tl, a.y + rounding_tl), rounding_tl, 6, 9);
+        PathArcToFast(ImVec2(b.x - rounding_tr, a.y + rounding_tr), rounding_tr, 9, 12);
+        PathArcToFast(ImVec2(b.x - rounding_br, b.y - rounding_br), rounding_br, 0, 3);
+        PathArcToFast(ImVec2(a.x + rounding_bl, b.y - rounding_bl), rounding_bl, 3, 6);
+    }
+}
+
+void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+    PathLineTo(p1 + ImVec2(0.5f, 0.5f));
+    PathLineTo(p2 + ImVec2(0.5f, 0.5f));
+    PathStroke(col, false, thickness);
+}
+
+// p_min = upper-left, p_max = lower-right
+// Note we don't render 1 pixels sized rectangles properly.
+void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+    if (Flags & ImDrawListFlags_AntiAliasedLines)
+        PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.50f,0.50f), rounding, rounding_corners);
+    else
+        PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.49f,0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes.
+    PathStroke(col, true, thickness);
+}
+
+void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+    if (rounding > 0.0f)
+    {
+        PathRect(p_min, p_max, rounding, rounding_corners);
+        PathFillConvex(col);
+    }
+    else
+    {
+        PrimReserve(6, 4);
+        PrimRect(p_min, p_max, col);
+    }
+}
+
+// p_min = upper-left, p_max = lower-right
+void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
+{
+    if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
+        return;
+
+    const ImVec2 uv = _Data->TexUvWhitePixel;
+    PrimReserve(6, 4);
+    PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2));
+    PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3));
+    PrimWriteVtx(p_min, uv, col_upr_left);
+    PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
+    PrimWriteVtx(p_max, uv, col_bot_right);
+    PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);
+}
+
+void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    PathLineTo(p1);
+    PathLineTo(p2);
+    PathLineTo(p3);
+    PathLineTo(p4);
+    PathStroke(col, true, thickness);
+}
+
+void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    PathLineTo(p1);
+    PathLineTo(p2);
+    PathLineTo(p3);
+    PathLineTo(p4);
+    PathFillConvex(col);
+}
+
+void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    PathLineTo(p1);
+    PathLineTo(p2);
+    PathLineTo(p3);
+    PathStroke(col, true, thickness);
+}
+
+void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    PathLineTo(p1);
+    PathLineTo(p2);
+    PathLineTo(p3);
+    PathFillConvex(col);
+}
+
+void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
+        return;
+
+    // Obtain segment count
+    if (num_segments <= 0)
+    {
+        // Automatic segment count
+        const int radius_idx = (int)radius - 1;
+        if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
+            num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value
+        else
+            num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);
+    }
+    else
+    {
+        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
+        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
+    }
+
+    // Because we are filling a closed shape we remove 1 from the count of segments/points
+    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+    if (num_segments == 12)
+        PathArcToFast(center, radius - 0.5f, 0, 12);
+    else
+        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
+    PathStroke(col, true, thickness);
+}
+
+void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
+{
+    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
+        return;
+
+    // Obtain segment count
+    if (num_segments <= 0)
+    {
+        // Automatic segment count
+        const int radius_idx = (int)radius - 1;
+        if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
+            num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value
+        else
+            num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);
+    }
+    else
+    {
+        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
+        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
+    }
+
+    // Because we are filling a closed shape we remove 1 from the count of segments/points
+    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+    if (num_segments == 12)
+        PathArcToFast(center, radius, 0, 12);
+    else
+        PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
+    PathFillConvex(col);
+}
+
+// Guaranteed to honor 'num_segments'
+void ImDrawList::AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
+{
+    if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
+        return;
+
+    // Because we are filling a closed shape we remove 1 from the count of segments/points
+    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+    PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
+    PathStroke(col, true, thickness);
+}
+
+// Guaranteed to honor 'num_segments'
+void ImDrawList::AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
+{
+    if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
+        return;
+
+    // Because we are filling a closed shape we remove 1 from the count of segments/points
+    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+    PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
+    PathFillConvex(col);
+}
+
+// Cubic Bezier takes 4 controls points
+void ImDrawList::AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    PathLineTo(p1);
+    PathBezierCurveTo(p2, p3, p4, num_segments);
+    PathStroke(col, false, thickness);
+}
+
+void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    if (text_end == NULL)
+        text_end = text_begin + strlen(text_begin);
+    if (text_begin == text_end)
+        return;
+
+    // Pull default font/size from the shared ImDrawListSharedData instance
+    if (font == NULL)
+        font = _Data->Font;
+    if (font_size == 0.0f)
+        font_size = _Data->FontSize;
+
+    IM_ASSERT(font->ContainerAtlas->TexID == _TextureIdStack.back());  // Use high-level ImGui::PushFont() or low-level ImDrawList::PushTextureId() to change font.
+
+    ImVec4 clip_rect = _ClipRectStack.back();
+    if (cpu_fine_clip_rect)
+    {
+        clip_rect.x = ImMax(clip_rect.x, cpu_fine_clip_rect->x);
+        clip_rect.y = ImMax(clip_rect.y, cpu_fine_clip_rect->y);
+        clip_rect.z = ImMin(clip_rect.z, cpu_fine_clip_rect->z);
+        clip_rect.w = ImMin(clip_rect.w, cpu_fine_clip_rect->w);
+    }
+    font->RenderText(this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect != NULL);
+}
+
+void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end)
+{
+    AddText(NULL, 0.0f, pos, col, text_begin, text_end);
+}
+
+void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
+    if (push_texture_id)
+        PushTextureID(user_texture_id);
+
+    PrimReserve(6, 4);
+    PrimRectUV(p_min, p_max, uv_min, uv_max, col);
+
+    if (push_texture_id)
+        PopTextureID();
+}
+
+void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1, const ImVec2& uv2, const ImVec2& uv3, const ImVec2& uv4, ImU32 col)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
+    if (push_texture_id)
+        PushTextureID(user_texture_id);
+
+    PrimReserve(6, 4);
+    PrimQuadUV(p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
+
+    if (push_texture_id)
+        PopTextureID();
+}
+
+void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
+{
+    if ((col & IM_COL32_A_MASK) == 0)
+        return;
+
+    if (rounding <= 0.0f || (rounding_corners & ImDrawCornerFlags_All) == 0)
+    {
+        AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col);
+        return;
+    }
+
+    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
+    if (push_texture_id)
+        PushTextureID(user_texture_id);
+
+    int vert_start_idx = VtxBuffer.Size;
+    PathRect(p_min, p_max, rounding, rounding_corners);
+    PathFillConvex(col);
+    int vert_end_idx = VtxBuffer.Size;
+    ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, p_min, p_max, uv_min, uv_max, true);
+
+    if (push_texture_id)
+        PopTextureID();
+}
+
+
+//-----------------------------------------------------------------------------
+// ImDrawListSplitter
+//-----------------------------------------------------------------------------
+// FIXME: This may be a little confusing, trying to be a little too low-level/optimal instead of just doing vector swap..
+//-----------------------------------------------------------------------------
+
+void ImDrawListSplitter::ClearFreeMemory()
+{
+    for (int i = 0; i < _Channels.Size; i++)
+    {
+        if (i == _Current)
+            memset(&_Channels[i], 0, sizeof(_Channels[i]));  // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again
+        _Channels[i]._CmdBuffer.clear();
+        _Channels[i]._IdxBuffer.clear();
+    }
+    _Current = 0;
+    _Count = 1;
+    _Channels.clear();
+}
+
+void ImDrawListSplitter::Split(ImDrawList* draw_list, int channels_count)
+{
+    IM_ASSERT(_Current == 0 && _Count <= 1 && "Nested channel splitting is not supported. Please use separate instances of ImDrawListSplitter.");
+    int old_channels_count = _Channels.Size;
+    if (old_channels_count < channels_count)
+        _Channels.resize(channels_count);
+    _Count = channels_count;
+
+    // Channels[] (24/32 bytes each) hold storage that we'll swap with draw_list->_CmdBuffer/_IdxBuffer
+    // The content of Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
+    // When we switch to the next channel, we'll copy draw_list->_CmdBuffer/_IdxBuffer into Channels[0] and then Channels[1] into draw_list->CmdBuffer/_IdxBuffer
+    memset(&_Channels[0], 0, sizeof(ImDrawChannel));
+    for (int i = 1; i < channels_count; i++)
+    {
+        if (i >= old_channels_count)
+        {
+            IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
+        }
+        else
+        {
+            _Channels[i]._CmdBuffer.resize(0);
+            _Channels[i]._IdxBuffer.resize(0);
+        }
+        if (_Channels[i]._CmdBuffer.Size == 0)
+        {
+            ImDrawCmd draw_cmd;
+            draw_cmd.ClipRect = draw_list->_ClipRectStack.back();
+            draw_cmd.TextureId = draw_list->_TextureIdStack.back();
+            _Channels[i]._CmdBuffer.push_back(draw_cmd);
+        }
+    }
+}
+
+static inline bool CanMergeDrawCommands(ImDrawCmd* a, ImDrawCmd* b)
+{
+    return memcmp(&a->ClipRect, &b->ClipRect, sizeof(a->ClipRect)) == 0 && a->TextureId == b->TextureId && a->VtxOffset == b->VtxOffset && !a->UserCallback && !b->UserCallback;
+}
+
+void ImDrawListSplitter::Merge(ImDrawList* draw_list)
+{
+    // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use.
+    if (_Count <= 1)
+        return;
+
+    SetCurrentChannel(draw_list, 0);
+    if (draw_list->CmdBuffer.Size != 0 && draw_list->CmdBuffer.back().ElemCount == 0)
+        draw_list->CmdBuffer.pop_back();
+
+    // Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command.
+    int new_cmd_buffer_count = 0;
+    int new_idx_buffer_count = 0;
+    ImDrawCmd* last_cmd = (_Count > 0 && draw_list->CmdBuffer.Size > 0) ? &draw_list->CmdBuffer.back() : NULL;
+    int idx_offset = last_cmd ? last_cmd->IdxOffset + last_cmd->ElemCount : 0;
+    for (int i = 1; i < _Count; i++)
+    {
+        ImDrawChannel& ch = _Channels[i];
+        if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0)
+            ch._CmdBuffer.pop_back();
+        if (ch._CmdBuffer.Size > 0 && last_cmd != NULL && CanMergeDrawCommands(last_cmd, &ch._CmdBuffer[0]))
+        {
+            // Merge previous channel last draw command with current channel first draw command if matching.
+            last_cmd->ElemCount += ch._CmdBuffer[0].ElemCount;
+            idx_offset += ch._CmdBuffer[0].ElemCount;
+            ch._CmdBuffer.erase(ch._CmdBuffer.Data); // FIXME-OPT: Improve for multiple merges.
+        }
+        if (ch._CmdBuffer.Size > 0)
+            last_cmd = &ch._CmdBuffer.back();
+        new_cmd_buffer_count += ch._CmdBuffer.Size;
+        new_idx_buffer_count += ch._IdxBuffer.Size;
+        for (int cmd_n = 0; cmd_n < ch._CmdBuffer.Size; cmd_n++)
+        {
+            ch._CmdBuffer.Data[cmd_n].IdxOffset = idx_offset;
+            idx_offset += ch._CmdBuffer.Data[cmd_n].ElemCount;
+        }
+    }
+    draw_list->CmdBuffer.resize(draw_list->CmdBuffer.Size + new_cmd_buffer_count);
+    draw_list->IdxBuffer.resize(draw_list->IdxBuffer.Size + new_idx_buffer_count);
+
+    // Write commands and indices in order (they are fairly small structures, we don't copy vertices only indices)
+    ImDrawCmd* cmd_write = draw_list->CmdBuffer.Data + draw_list->CmdBuffer.Size - new_cmd_buffer_count;
+    ImDrawIdx* idx_write = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size - new_idx_buffer_count;
+    for (int i = 1; i < _Count; i++)
+    {
+        ImDrawChannel& ch = _Channels[i];
+        if (int sz = ch._CmdBuffer.Size) { memcpy(cmd_write, ch._CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
+        if (int sz = ch._IdxBuffer.Size) { memcpy(idx_write, ch._IdxBuffer.Data, sz * sizeof(ImDrawIdx)); idx_write += sz; }
+    }
+    draw_list->_IdxWritePtr = idx_write;
+    draw_list->UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
+    draw_list->UpdateTextureID();
+    _Count = 1;
+}
+
+void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx)
+{
+    IM_ASSERT(idx >= 0 && idx < _Count);
+    if (_Current == idx)
+        return;
+    // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap()
+    memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer));
+    memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer));
+    _Current = idx;
+    memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
+    memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
+    draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImDrawData
+//-----------------------------------------------------------------------------
+
+// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+void ImDrawData::DeIndexAllBuffers()
+{
+    ImVector<ImDrawVert> new_vtx_buffer;
+    TotalVtxCount = TotalIdxCount = 0;
+    for (int i = 0; i < CmdListsCount; i++)
+    {
+        ImDrawList* cmd_list = CmdLists[i];
+        if (cmd_list->IdxBuffer.empty())
+            continue;
+        new_vtx_buffer.resize(cmd_list->IdxBuffer.Size);
+        for (int j = 0; j < cmd_list->IdxBuffer.Size; j++)
+            new_vtx_buffer[j] = cmd_list->VtxBuffer[cmd_list->IdxBuffer[j]];
+        cmd_list->VtxBuffer.swap(new_vtx_buffer);
+        cmd_list->IdxBuffer.resize(0);
+        TotalVtxCount += cmd_list->VtxBuffer.Size;
+    }
+}
+
+// Helper to scale the ClipRect field of each ImDrawCmd.
+// Use if your final output buffer is at a different scale than draw_data->DisplaySize,
+// or if there is a difference between your window resolution and framebuffer resolution.
+void ImDrawData::ScaleClipRects(const ImVec2& fb_scale)
+{
+    for (int i = 0; i < CmdListsCount; i++)
+    {
+        ImDrawList* cmd_list = CmdLists[i];
+        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+        {
+            ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i];
+            cmd->ClipRect = ImVec4(cmd->ClipRect.x * fb_scale.x, cmd->ClipRect.y * fb_scale.y, cmd->ClipRect.z * fb_scale.x, cmd->ClipRect.w * fb_scale.y);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Helpers ShadeVertsXXX functions
+//-----------------------------------------------------------------------------
+
+// Generic linear color gradient, write to RGB fields, leave A untouched.
+void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
+{
+    ImVec2 gradient_extent = gradient_p1 - gradient_p0;
+    float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent);
+    ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
+    ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
+    for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
+    {
+        float d = ImDot(vert->pos - gradient_p0, gradient_extent);
+        float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
+        int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t);
+        int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t);
+        int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t);
+        vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK);
+    }
+}
+
+// Distribute UV over (a, b) rectangle
+void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp)
+{
+    const ImVec2 size = b - a;
+    const ImVec2 uv_size = uv_b - uv_a;
+    const ImVec2 scale = ImVec2(
+        size.x != 0.0f ? (uv_size.x / size.x) : 0.0f,
+        size.y != 0.0f ? (uv_size.y / size.y) : 0.0f);
+
+    ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
+    ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
+    if (clamp)
+    {
+        const ImVec2 min = ImMin(uv_a, uv_b);
+        const ImVec2 max = ImMax(uv_a, uv_b);
+        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+            vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max);
+    }
+    else
+    {
+        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+            vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale);
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontConfig
+//-----------------------------------------------------------------------------
+
+ImFontConfig::ImFontConfig()
+{
+    FontData = NULL;
+    FontDataSize = 0;
+    FontDataOwnedByAtlas = true;
+    FontNo = 0;
+    SizePixels = 0.0f;
+    OversampleH = 3; // FIXME: 2 may be a better default?
+    OversampleV = 1;
+    PixelSnapH = false;
+    GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
+    GlyphOffset = ImVec2(0.0f, 0.0f);
+    GlyphRanges = NULL;
+    GlyphMinAdvanceX = 0.0f;
+    GlyphMaxAdvanceX = FLT_MAX;
+    MergeMode = false;
+    RasterizerFlags = 0x00;
+    RasterizerMultiply = 1.0f;
+    EllipsisChar = (ImWchar)-1;
+    memset(Name, 0, sizeof(Name));
+    DstFont = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontAtlas
+//-----------------------------------------------------------------------------
+
+// A work of art lies ahead! (. = white layer, X = black layer, others are blank)
+// The white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes.
+const int FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF = 108;
+const int FONT_ATLAS_DEFAULT_TEX_DATA_H      = 27;
+const unsigned int FONT_ATLAS_DEFAULT_TEX_DATA_ID = 0x80000000;
+static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] =
+{
+    "..-         -XXXXXXX-    X    -           X           -XXXXXXX          -          XXXXXXX-     XX          "
+    "..-         -X.....X-   X.X   -          X.X          -X.....X          -          X.....X-    X..X         "
+    "---         -XXX.XXX-  X...X  -         X...X         -X....X           -           X....X-    X..X         "
+    "X           -  X.X  - X.....X -        X.....X        -X...X            -            X...X-    X..X         "
+    "XX          -  X.X  -X.......X-       X.......X       -X..X.X           -           X.X..X-    X..X         "
+    "X.X         -  X.X  -XXXX.XXXX-       XXXX.XXXX       -X.X X.X          -          X.X X.X-    X..XXX       "
+    "X..X        -  X.X  -   X.X   -          X.X          -XX   X.X         -         X.X   XX-    X..X..XXX    "
+    "X...X       -  X.X  -   X.X   -    XX    X.X    XX    -      X.X        -        X.X      -    X..X..X..XX  "
+    "X....X      -  X.X  -   X.X   -   X.X    X.X    X.X   -       X.X       -       X.X       -    X..X..X..X.X "
+    "X.....X     -  X.X  -   X.X   -  X..X    X.X    X..X  -        X.X      -      X.X        -XXX X..X..X..X..X"
+    "X......X    -  X.X  -   X.X   - X...XXXXXX.XXXXXX...X -         X.X   XX-XX   X.X         -X..XX........X..X"
+    "X.......X   -  X.X  -   X.X   -X.....................X-          X.X X.X-X.X X.X          -X...X...........X"
+    "X........X  -  X.X  -   X.X   - X...XXXXXX.XXXXXX...X -           X.X..X-X..X.X           - X..............X"
+    "X.........X -XXX.XXX-   X.X   -  X..X    X.X    X..X  -            X...X-X...X            -  X.............X"
+    "X..........X-X.....X-   X.X   -   X.X    X.X    X.X   -           X....X-X....X           -  X.............X"
+    "X......XXXXX-XXXXXXX-   X.X   -    XX    X.X    XX    -          X.....X-X.....X          -   X............X"
+    "X...X..X    ---------   X.X   -          X.X          -          XXXXXXX-XXXXXXX          -   X...........X "
+    "X..X X..X   -       -XXXX.XXXX-       XXXX.XXXX       -------------------------------------    X..........X "
+    "X.X  X..X   -       -X.......X-       X.......X       -    XX           XX    -           -    X..........X "
+    "XX    X..X  -       - X.....X -        X.....X        -   X.X           X.X   -           -     X........X  "
+    "      X..X          -  X...X  -         X...X         -  X..X           X..X  -           -     X........X  "
+    "       XX           -   X.X   -          X.X          - X...XXXXXXXXXXXXX...X -           -     XXXXXXXXXX  "
+    "------------        -    X    -           X           -X.....................X-           ------------------"
+    "                    ----------------------------------- X...XXXXXXXXXXXXX...X -                             "
+    "                                                      -  X..X           X..X  -                             "
+    "                                                      -   X.X           X.X   -                             "
+    "                                                      -    XX           XX    -                             "
+};
+
+static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3] =
+{
+    // Pos ........ Size ......... Offset ......
+    { ImVec2( 0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow
+    { ImVec2(13,0), ImVec2( 7,16), ImVec2( 1, 8) }, // ImGuiMouseCursor_TextInput
+    { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_ResizeAll
+    { ImVec2(21,0), ImVec2( 9,23), ImVec2( 4,11) }, // ImGuiMouseCursor_ResizeNS
+    { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 4) }, // ImGuiMouseCursor_ResizeEW
+    { ImVec2(73,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNESW
+    { ImVec2(55,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNWSE
+    { ImVec2(91,0), ImVec2(17,22), ImVec2( 5, 0) }, // ImGuiMouseCursor_Hand
+};
+
+ImFontAtlas::ImFontAtlas()
+{
+    Locked = false;
+    Flags = ImFontAtlasFlags_None;
+    TexID = (ImTextureID)NULL;
+    TexDesiredWidth = 0;
+    TexGlyphPadding = 1;
+
+    TexPixelsAlpha8 = NULL;
+    TexPixelsRGBA32 = NULL;
+    TexWidth = TexHeight = 0;
+    TexUvScale = ImVec2(0.0f, 0.0f);
+    TexUvWhitePixel = ImVec2(0.0f, 0.0f);
+    for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
+        CustomRectIds[n] = -1;
+}
+
+ImFontAtlas::~ImFontAtlas()
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    Clear();
+}
+
+void    ImFontAtlas::ClearInputData()
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    for (int i = 0; i < ConfigData.Size; i++)
+        if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas)
+        {
+            IM_FREE(ConfigData[i].FontData);
+            ConfigData[i].FontData = NULL;
+        }
+
+    // When clearing this we lose access to the font name and other information used to build the font.
+    for (int i = 0; i < Fonts.Size; i++)
+        if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size)
+        {
+            Fonts[i]->ConfigData = NULL;
+            Fonts[i]->ConfigDataCount = 0;
+        }
+    ConfigData.clear();
+    CustomRects.clear();
+    for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
+        CustomRectIds[n] = -1;
+}
+
+void    ImFontAtlas::ClearTexData()
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    if (TexPixelsAlpha8)
+        IM_FREE(TexPixelsAlpha8);
+    if (TexPixelsRGBA32)
+        IM_FREE(TexPixelsRGBA32);
+    TexPixelsAlpha8 = NULL;
+    TexPixelsRGBA32 = NULL;
+}
+
+void    ImFontAtlas::ClearFonts()
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    for (int i = 0; i < Fonts.Size; i++)
+        IM_DELETE(Fonts[i]);
+    Fonts.clear();
+}
+
+void    ImFontAtlas::Clear()
+{
+    ClearInputData();
+    ClearTexData();
+    ClearFonts();
+}
+
+void    ImFontAtlas::GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
+{
+    // Build atlas on demand
+    if (TexPixelsAlpha8 == NULL)
+    {
+        if (ConfigData.empty())
+            AddFontDefault();
+        Build();
+    }
+
+    *out_pixels = TexPixelsAlpha8;
+    if (out_width) *out_width = TexWidth;
+    if (out_height) *out_height = TexHeight;
+    if (out_bytes_per_pixel) *out_bytes_per_pixel = 1;
+}
+
+void    ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
+{
+    // Convert to RGBA32 format on demand
+    // Although it is likely to be the most commonly used format, our font rendering is 1 channel / 8 bpp
+    if (!TexPixelsRGBA32)
+    {
+        unsigned char* pixels = NULL;
+        GetTexDataAsAlpha8(&pixels, NULL, NULL);
+        if (pixels)
+        {
+            TexPixelsRGBA32 = (unsigned int*)IM_ALLOC((size_t)TexWidth * (size_t)TexHeight * 4);
+            const unsigned char* src = pixels;
+            unsigned int* dst = TexPixelsRGBA32;
+            for (int n = TexWidth * TexHeight; n > 0; n--)
+                *dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++));
+        }
+    }
+
+    *out_pixels = (unsigned char*)TexPixelsRGBA32;
+    if (out_width) *out_width = TexWidth;
+    if (out_height) *out_height = TexHeight;
+    if (out_bytes_per_pixel) *out_bytes_per_pixel = 4;
+}
+
+ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0);
+    IM_ASSERT(font_cfg->SizePixels > 0.0f);
+
+    // Create new font
+    if (!font_cfg->MergeMode)
+        Fonts.push_back(IM_NEW(ImFont));
+    else
+        IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
+
+    ConfigData.push_back(*font_cfg);
+    ImFontConfig& new_font_cfg = ConfigData.back();
+    if (new_font_cfg.DstFont == NULL)
+        new_font_cfg.DstFont = Fonts.back();
+    if (!new_font_cfg.FontDataOwnedByAtlas)
+    {
+        new_font_cfg.FontData = IM_ALLOC(new_font_cfg.FontDataSize);
+        new_font_cfg.FontDataOwnedByAtlas = true;
+        memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize);
+    }
+
+    if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
+        new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
+
+    // Invalidate texture
+    ClearTexData();
+    return new_font_cfg.DstFont;
+}
+
+// Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder)
+static unsigned int stb_decompress_length(const unsigned char *input);
+static unsigned int stb_decompress(unsigned char *output, const unsigned char *input, unsigned int length);
+static const char*  GetDefaultCompressedFontDataTTFBase85();
+static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; }
+static void         Decode85(const unsigned char* src, unsigned char* dst)
+{
+    while (*src)
+    {
+        unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4]))));
+        dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF);   // We can't assume little-endianness.
+        src += 5;
+        dst += 4;
+    }
+}
+
+// Load embedded ProggyClean.ttf at size 13, disable oversampling
+ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
+{
+    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+    if (!font_cfg_template)
+    {
+        font_cfg.OversampleH = font_cfg.OversampleV = 1;
+        font_cfg.PixelSnapH = true;
+    }
+    if (font_cfg.SizePixels <= 0.0f)
+        font_cfg.SizePixels = 13.0f * 1.0f;
+    if (font_cfg.Name[0] == '\0')
+        ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels);
+    font_cfg.EllipsisChar = (ImWchar)0x0085;
+
+    const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
+    const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault();
+    ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges);
+    font->DisplayOffset.y = 1.0f;
+    return font;
+}
+
+ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    size_t data_size = 0;
+    void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0);
+    if (!data)
+    {
+        IM_ASSERT_USER_ERROR(0, "Could not load font file!");
+        return NULL;
+    }
+    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+    if (font_cfg.Name[0] == '\0')
+    {
+        // Store a short copy of filename into into the font name for convenience
+        const char* p;
+        for (p = filename + strlen(filename); p > filename && p[-1] != '/' && p[-1] != '\\'; p--) {}
+        ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "%s, %.0fpx", p, size_pixels);
+    }
+    return AddFontFromMemoryTTF(data, (int)data_size, size_pixels, &font_cfg, glyph_ranges);
+}
+
+// NB: Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build().
+ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+    IM_ASSERT(font_cfg.FontData == NULL);
+    font_cfg.FontData = ttf_data;
+    font_cfg.FontDataSize = ttf_size;
+    font_cfg.SizePixels = size_pixels;
+    if (glyph_ranges)
+        font_cfg.GlyphRanges = glyph_ranges;
+    return AddFont(&font_cfg);
+}
+
+ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+    const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data);
+    unsigned char* buf_decompressed_data = (unsigned char *)IM_ALLOC(buf_decompressed_size);
+    stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size);
+
+    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+    IM_ASSERT(font_cfg.FontData == NULL);
+    font_cfg.FontDataOwnedByAtlas = true;
+    return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges);
+}
+
+ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
+{
+    int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
+    void* compressed_ttf = IM_ALLOC((size_t)compressed_ttf_size);
+    Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf);
+    ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
+    IM_FREE(compressed_ttf);
+    return font;
+}
+
+int ImFontAtlas::AddCustomRectRegular(unsigned int id, int width, int height)
+{
+    // Breaking change on 2019/11/21 (1.74): ImFontAtlas::AddCustomRectRegular() now requires an ID >= 0x110000 (instead of >= 0x10000)
+    IM_ASSERT(id >= 0x110000);
+    IM_ASSERT(width > 0 && width <= 0xFFFF);
+    IM_ASSERT(height > 0 && height <= 0xFFFF);
+    ImFontAtlasCustomRect r;
+    r.ID = id;
+    r.Width = (unsigned short)width;
+    r.Height = (unsigned short)height;
+    CustomRects.push_back(r);
+    return CustomRects.Size - 1; // Return index
+}
+
+int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset)
+{
+    IM_ASSERT(font != NULL);
+    IM_ASSERT(width > 0 && width <= 0xFFFF);
+    IM_ASSERT(height > 0 && height <= 0xFFFF);
+    ImFontAtlasCustomRect r;
+    r.ID = id;
+    r.Width = (unsigned short)width;
+    r.Height = (unsigned short)height;
+    r.GlyphAdvanceX = advance_x;
+    r.GlyphOffset = offset;
+    r.Font = font;
+    CustomRects.push_back(r);
+    return CustomRects.Size - 1; // Return index
+}
+
+void ImFontAtlas::CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const
+{
+    IM_ASSERT(TexWidth > 0 && TexHeight > 0);   // Font atlas needs to be built before we can calculate UV coordinates
+    IM_ASSERT(rect->IsPacked());                // Make sure the rectangle has been packed
+    *out_uv_min = ImVec2((float)rect->X * TexUvScale.x, (float)rect->Y * TexUvScale.y);
+    *out_uv_max = ImVec2((float)(rect->X + rect->Width) * TexUvScale.x, (float)(rect->Y + rect->Height) * TexUvScale.y);
+}
+
+bool ImFontAtlas::GetMouseCursorTexData(ImGuiMouseCursor cursor_type, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2])
+{
+    if (cursor_type <= ImGuiMouseCursor_None || cursor_type >= ImGuiMouseCursor_COUNT)
+        return false;
+    if (Flags & ImFontAtlasFlags_NoMouseCursors)
+        return false;
+
+    IM_ASSERT(CustomRectIds[0] != -1);
+    ImFontAtlasCustomRect& r = CustomRects[CustomRectIds[0]];
+    IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
+    ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][0] + ImVec2((float)r.X, (float)r.Y);
+    ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][1];
+    *out_size = size;
+    *out_offset = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][2];
+    out_uv_border[0] = (pos) * TexUvScale;
+    out_uv_border[1] = (pos + size) * TexUvScale;
+    pos.x += FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
+    out_uv_fill[0] = (pos) * TexUvScale;
+    out_uv_fill[1] = (pos + size) * TexUvScale;
+    return true;
+}
+
+bool    ImFontAtlas::Build()
+{
+    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+    return ImFontAtlasBuildWithStbTruetype(this);
+}
+
+void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_brighten_factor)
+{
+    for (unsigned int i = 0; i < 256; i++)
+    {
+        unsigned int value = (unsigned int)(i * in_brighten_factor);
+        out_table[i] = value > 255 ? 255 : (value & 0xFF);
+    }
+}
+
+void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride)
+{
+    unsigned char* data = pixels + x + y * stride;
+    for (int j = h; j > 0; j--, data += stride)
+        for (int i = 0; i < w; i++)
+            data[i] = table[data[i]];
+}
+
+// Temporary data for one source font (multiple source fonts can be merged into one destination ImFont)
+// (C++03 doesn't allow instancing ImVector<> with function-local types so we declare the type here.)
+struct ImFontBuildSrcData
+{
+    stbtt_fontinfo      FontInfo;
+    stbtt_pack_range    PackRange;          // Hold the list of codepoints to pack (essentially points to Codepoints.Data)
+    stbrp_rect*         Rects;              // Rectangle to pack. We first fill in their size and the packer will give us their position.
+    stbtt_packedchar*   PackedChars;        // Output glyphs
+    const ImWchar*      SrcRanges;          // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF)
+    int                 DstIndex;           // Index into atlas->Fonts[] and dst_tmp_array[]
+    int                 GlyphsHighest;      // Highest requested codepoint
+    int                 GlyphsCount;        // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font)
+    ImBitVector         GlyphsSet;          // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB)
+    ImVector<int>       GlyphsList;         // Glyph codepoints list (flattened version of GlyphsMap)
+};
+
+// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont)
+struct ImFontBuildDstData
+{
+    int                 SrcCount;           // Number of source fonts targeting this destination font.
+    int                 GlyphsHighest;
+    int                 GlyphsCount;
+    ImBitVector         GlyphsSet;          // This is used to resolve collision when multiple sources are merged into a same destination font.
+};
+
+static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVector<int>* out)
+{
+    IM_ASSERT(sizeof(in->Storage.Data[0]) == sizeof(int));
+    const ImU32* it_begin = in->Storage.begin();
+    const ImU32* it_end = in->Storage.end();
+    for (const ImU32* it = it_begin; it < it_end; it++)
+        if (ImU32 entries_32 = *it)
+            for (ImU32 bit_n = 0; bit_n < 32; bit_n++)
+                if (entries_32 & ((ImU32)1 << bit_n))
+                    out->push_back((int)(((it - it_begin) << 5) + bit_n));
+}
+
+bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
+{
+    IM_ASSERT(atlas->ConfigData.Size > 0);
+
+    ImFontAtlasBuildInit(atlas);
+
+    // Clear atlas
+    atlas->TexID = (ImTextureID)NULL;
+    atlas->TexWidth = atlas->TexHeight = 0;
+    atlas->TexUvScale = ImVec2(0.0f, 0.0f);
+    atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
+    atlas->ClearTexData();
+
+    // Temporary storage for building
+    ImVector<ImFontBuildSrcData> src_tmp_array;
+    ImVector<ImFontBuildDstData> dst_tmp_array;
+    src_tmp_array.resize(atlas->ConfigData.Size);
+    dst_tmp_array.resize(atlas->Fonts.Size);
+    memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes());
+    memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes());
+
+    // 1. Initialize font loading structure, check font data validity
+    for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        ImFontConfig& cfg = atlas->ConfigData[src_i];
+        IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas));
+
+        // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices)
+        src_tmp.DstIndex = -1;
+        for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++)
+            if (cfg.DstFont == atlas->Fonts[output_i])
+                src_tmp.DstIndex = output_i;
+        IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array?
+        if (src_tmp.DstIndex == -1)
+            return false;
+
+        // Initialize helper structure for font loading and verify that the TTF/OTF data is correct
+        const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
+        IM_ASSERT(font_offset >= 0 && "FontData is incorrect, or FontNo cannot be found.");
+        if (!stbtt_InitFont(&src_tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
+            return false;
+
+        // Measure highest codepoints
+        ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+        src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault();
+        for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+            src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]);
+        dst_tmp.SrcCount++;
+        dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest);
+    }
+
+    // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs.
+    int total_glyphs_count = 0;
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+        src_tmp.GlyphsSet.Create(src_tmp.GlyphsHighest + 1);
+        if (dst_tmp.GlyphsSet.Storage.empty())
+            dst_tmp.GlyphsSet.Create(dst_tmp.GlyphsHighest + 1);
+
+        for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+            for (unsigned int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++)
+            {
+                if (dst_tmp.GlyphsSet.TestBit(codepoint))    // Don't overwrite existing glyphs. We could make this an option for MergeMode (e.g. MergeOverwrite==true)
+                    continue;
+                if (!stbtt_FindGlyphIndex(&src_tmp.FontInfo, codepoint))    // It is actually in the font?
+                    continue;
+
+                // Add to avail set/counters
+                src_tmp.GlyphsCount++;
+                dst_tmp.GlyphsCount++;
+                src_tmp.GlyphsSet.SetBit(codepoint);
+                dst_tmp.GlyphsSet.SetBit(codepoint);
+                total_glyphs_count++;
+            }
+    }
+
+    // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another)
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount);
+        UnpackBitVectorToFlatIndexList(&src_tmp.GlyphsSet, &src_tmp.GlyphsList);
+        src_tmp.GlyphsSet.Clear();
+        IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount);
+    }
+    for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++)
+        dst_tmp_array[dst_i].GlyphsSet.Clear();
+    dst_tmp_array.clear();
+
+    // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
+    // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity)
+    ImVector<stbrp_rect> buf_rects;
+    ImVector<stbtt_packedchar> buf_packedchars;
+    buf_rects.resize(total_glyphs_count);
+    buf_packedchars.resize(total_glyphs_count);
+    memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes());
+    memset(buf_packedchars.Data, 0, (size_t)buf_packedchars.size_in_bytes());
+
+    // 4. Gather glyphs sizes so we can pack them in our virtual canvas.
+    int total_surface = 0;
+    int buf_rects_out_n = 0;
+    int buf_packedchars_out_n = 0;
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        if (src_tmp.GlyphsCount == 0)
+            continue;
+
+        src_tmp.Rects = &buf_rects[buf_rects_out_n];
+        src_tmp.PackedChars = &buf_packedchars[buf_packedchars_out_n];
+        buf_rects_out_n += src_tmp.GlyphsCount;
+        buf_packedchars_out_n += src_tmp.GlyphsCount;
+
+        // Convert our ranges in the format stb_truetype wants
+        ImFontConfig& cfg = atlas->ConfigData[src_i];
+        src_tmp.PackRange.font_size = cfg.SizePixels;
+        src_tmp.PackRange.first_unicode_codepoint_in_range = 0;
+        src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data;
+        src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size;
+        src_tmp.PackRange.chardata_for_range = src_tmp.PackedChars;
+        src_tmp.PackRange.h_oversample = (unsigned char)cfg.OversampleH;
+        src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV;
+
+        // Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects)
+        const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels);
+        const int padding = atlas->TexGlyphPadding;
+        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++)
+        {
+            int x0, y0, x1, y1;
+            const int glyph_index_in_font = stbtt_FindGlyphIndex(&src_tmp.FontInfo, src_tmp.GlyphsList[glyph_i]);
+            IM_ASSERT(glyph_index_in_font != 0);
+            stbtt_GetGlyphBitmapBoxSubpixel(&src_tmp.FontInfo, glyph_index_in_font, scale * cfg.OversampleH, scale * cfg.OversampleV, 0, 0, &x0, &y0, &x1, &y1);
+            src_tmp.Rects[glyph_i].w = (stbrp_coord)(x1 - x0 + padding + cfg.OversampleH - 1);
+            src_tmp.Rects[glyph_i].h = (stbrp_coord)(y1 - y0 + padding + cfg.OversampleV - 1);
+            total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h;
+        }
+    }
+
+    // We need a width for the skyline algorithm, any width!
+    // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
+    // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface.
+    const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1;
+    atlas->TexHeight = 0;
+    if (atlas->TexDesiredWidth > 0)
+        atlas->TexWidth = atlas->TexDesiredWidth;
+    else
+        atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512;
+
+    // 5. Start packing
+    // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
+    const int TEX_HEIGHT_MAX = 1024 * 32;
+    stbtt_pack_context spc = {};
+    stbtt_PackBegin(&spc, NULL, atlas->TexWidth, TEX_HEIGHT_MAX, 0, atlas->TexGlyphPadding, NULL);
+    ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
+
+    // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point.
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        if (src_tmp.GlyphsCount == 0)
+            continue;
+
+        stbrp_pack_rects((stbrp_context*)spc.pack_info, src_tmp.Rects, src_tmp.GlyphsCount);
+
+        // Extend texture height and mark missing glyphs as non-packed so we won't render them.
+        // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?)
+        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
+            if (src_tmp.Rects[glyph_i].was_packed)
+                atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h);
+    }
+
+    // 7. Allocate texture
+    atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight);
+    atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight);
+    atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight);
+    memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight);
+    spc.pixels = atlas->TexPixelsAlpha8;
+    spc.height = atlas->TexHeight;
+
+    // 8. Render/rasterize font characters into the texture
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontConfig& cfg = atlas->ConfigData[src_i];
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        if (src_tmp.GlyphsCount == 0)
+            continue;
+
+        stbtt_PackFontRangesRenderIntoRects(&spc, &src_tmp.FontInfo, &src_tmp.PackRange, 1, src_tmp.Rects);
+
+        // Apply multiply operator
+        if (cfg.RasterizerMultiply != 1.0f)
+        {
+            unsigned char multiply_table[256];
+            ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply);
+            stbrp_rect* r = &src_tmp.Rects[0];
+            for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++, r++)
+                if (r->was_packed)
+                    ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, atlas->TexPixelsAlpha8, r->x, r->y, r->w, r->h, atlas->TexWidth * 1);
+        }
+        src_tmp.Rects = NULL;
+    }
+
+    // End packing
+    stbtt_PackEnd(&spc);
+    buf_rects.clear();
+
+    // 9. Setup ImFont and glyphs for runtime
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+    {
+        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+        if (src_tmp.GlyphsCount == 0)
+            continue;
+
+        ImFontConfig& cfg = atlas->ConfigData[src_i];
+        ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true)
+
+        const float font_scale = stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels);
+        int unscaled_ascent, unscaled_descent, unscaled_line_gap;
+        stbtt_GetFontVMetrics(&src_tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
+
+        const float ascent = ImFloor(unscaled_ascent * font_scale + ((unscaled_ascent > 0.0f) ? +1 : -1));
+        const float descent = ImFloor(unscaled_descent * font_scale + ((unscaled_descent > 0.0f) ? +1 : -1));
+        ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent);
+        const float font_off_x = cfg.GlyphOffset.x;
+        const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent);
+
+        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
+        {
+            const int codepoint = src_tmp.GlyphsList[glyph_i];
+            const stbtt_packedchar& pc = src_tmp.PackedChars[glyph_i];
+
+            const float char_advance_x_org = pc.xadvance;
+            const float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX);
+            float char_off_x = font_off_x;
+            if (char_advance_x_org != char_advance_x_mod)
+                char_off_x += cfg.PixelSnapH ? ImFloor((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f;
+
+            // Register glyph
+            stbtt_aligned_quad q;
+            float dummy_x = 0.0f, dummy_y = 0.0f;
+            stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &dummy_x, &dummy_y, &q, 0);
+            dst_font->AddGlyph((ImWchar)codepoint, q.x0 + char_off_x, q.y0 + font_off_y, q.x1 + char_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, char_advance_x_mod);
+        }
+    }
+
+    // Cleanup temporary (ImVector doesn't honor destructor)
+    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+        src_tmp_array[src_i].~ImFontBuildSrcData();
+
+    ImFontAtlasBuildFinish(atlas);
+    return true;
+}
+
+// Register default custom rectangles (this is called/shared by both the stb_truetype and the FreeType builder)
+void ImFontAtlasBuildInit(ImFontAtlas* atlas)
+{
+    if (atlas->CustomRectIds[0] >= 0)
+        return;
+    if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
+        atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1, FONT_ATLAS_DEFAULT_TEX_DATA_H);
+    else
+        atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, 2, 2);
+}
+
+void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
+{
+    if (!font_config->MergeMode)
+    {
+        font->ClearOutputData();
+        font->FontSize = font_config->SizePixels;
+        font->ConfigData = font_config;
+        font->ContainerAtlas = atlas;
+        font->Ascent = ascent;
+        font->Descent = descent;
+    }
+    font->ConfigDataCount++;
+}
+
+void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
+{
+    stbrp_context* pack_context = (stbrp_context*)stbrp_context_opaque;
+    IM_ASSERT(pack_context != NULL);
+
+    ImVector<ImFontAtlasCustomRect>& user_rects = atlas->CustomRects;
+    IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong.
+
+    ImVector<stbrp_rect> pack_rects;
+    pack_rects.resize(user_rects.Size);
+    memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes());
+    for (int i = 0; i < user_rects.Size; i++)
+    {
+        pack_rects[i].w = user_rects[i].Width;
+        pack_rects[i].h = user_rects[i].Height;
+    }
+    stbrp_pack_rects(pack_context, &pack_rects[0], pack_rects.Size);
+    for (int i = 0; i < pack_rects.Size; i++)
+        if (pack_rects[i].was_packed)
+        {
+            user_rects[i].X = pack_rects[i].x;
+            user_rects[i].Y = pack_rects[i].y;
+            IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height);
+            atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h);
+        }
+}
+
+static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
+{
+    IM_ASSERT(atlas->CustomRectIds[0] >= 0);
+    IM_ASSERT(atlas->TexPixelsAlpha8 != NULL);
+    ImFontAtlasCustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]];
+    IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
+    IM_ASSERT(r.IsPacked());
+
+    const int w = atlas->TexWidth;
+    if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
+    {
+        // Render/copy pixels
+        IM_ASSERT(r.Width == FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * 2 + 1 && r.Height == FONT_ATLAS_DEFAULT_TEX_DATA_H);
+        for (int y = 0, n = 0; y < FONT_ATLAS_DEFAULT_TEX_DATA_H; y++)
+            for (int x = 0; x < FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF; x++, n++)
+            {
+                const int offset0 = (int)(r.X + x) + (int)(r.Y + y) * w;
+                const int offset1 = offset0 + FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
+                atlas->TexPixelsAlpha8[offset0] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == '.' ? 0xFF : 0x00;
+                atlas->TexPixelsAlpha8[offset1] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == 'X' ? 0xFF : 0x00;
+            }
+    }
+    else
+    {
+        IM_ASSERT(r.Width == 2 && r.Height == 2);
+        const int offset = (int)(r.X) + (int)(r.Y) * w;
+        atlas->TexPixelsAlpha8[offset] = atlas->TexPixelsAlpha8[offset + 1] = atlas->TexPixelsAlpha8[offset + w] = atlas->TexPixelsAlpha8[offset + w + 1] = 0xFF;
+    }
+    atlas->TexUvWhitePixel = ImVec2((r.X + 0.5f) * atlas->TexUvScale.x, (r.Y + 0.5f) * atlas->TexUvScale.y);
+}
+
+void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
+{
+    // Render into our custom data block
+    ImFontAtlasBuildRenderDefaultTexData(atlas);
+
+    // Register custom rectangle glyphs
+    for (int i = 0; i < atlas->CustomRects.Size; i++)
+    {
+        const ImFontAtlasCustomRect& r = atlas->CustomRects[i];
+        if (r.Font == NULL || r.ID >= 0x110000)
+            continue;
+
+        IM_ASSERT(r.Font->ContainerAtlas == atlas);
+        ImVec2 uv0, uv1;
+        atlas->CalcCustomRectUV(&r, &uv0, &uv1);
+        r.Font->AddGlyph((ImWchar)r.ID, r.GlyphOffset.x, r.GlyphOffset.y, r.GlyphOffset.x + r.Width, r.GlyphOffset.y + r.Height, uv0.x, uv0.y, uv1.x, uv1.y, r.GlyphAdvanceX);
+    }
+
+    // Build all fonts lookup tables
+    for (int i = 0; i < atlas->Fonts.Size; i++)
+        if (atlas->Fonts[i]->DirtyLookupTables)
+            atlas->Fonts[i]->BuildLookupTable();
+
+    // Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
+    // However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character.
+    // FIXME: Also note that 0x2026 is currently seldomly included in our font ranges. Because of this we are more likely to use three individual dots.
+    for (int i = 0; i < atlas->Fonts.size(); i++)
+    {
+        ImFont* font = atlas->Fonts[i];
+        if (font->EllipsisChar != (ImWchar)-1)
+            continue;
+        const ImWchar ellipsis_variants[] = { (ImWchar)0x2026, (ImWchar)0x0085 };
+        for (int j = 0; j < IM_ARRAYSIZE(ellipsis_variants); j++)
+            if (font->FindGlyphNoFallback(ellipsis_variants[j]) != NULL) // Verify glyph exists
+            {
+                font->EllipsisChar = ellipsis_variants[j];
+                break;
+            }
+    }
+}
+
+// Retrieve list of range (2 int per range, values are inclusive)
+const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0,
+    };
+    return &ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0x3131, 0x3163, // Korean alphabets
+        0xAC00, 0xD79D, // Korean characters
+        0,
+    };
+    return &ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0x2000, 0x206F, // General Punctuation
+        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+        0x31F0, 0x31FF, // Katakana Phonetic Extensions
+        0xFF00, 0xFFEF, // Half-width characters
+        0x4e00, 0x9FAF, // CJK Ideograms
+        0,
+    };
+    return &ranges[0];
+}
+
+static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short* accumulative_offsets, int accumulative_offsets_count, ImWchar* out_ranges)
+{
+    for (int n = 0; n < accumulative_offsets_count; n++, out_ranges += 2)
+    {
+        out_ranges[0] = out_ranges[1] = (ImWchar)(base_codepoint + accumulative_offsets[n]);
+        base_codepoint += accumulative_offsets[n];
+    }
+    out_ranges[0] = 0;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] ImFontAtlas glyph ranges helpers
+//-------------------------------------------------------------------------
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
+{
+    // Store 2500 regularly used characters for Simplified Chinese.
+    // Sourced from https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8
+    // This table covers 97.97% of all characters used during the month in July, 1987.
+    // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+    // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
+    static const short accumulative_offsets_from_0x4E00[] =
+    {
+        0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2,
+        1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4,
+        2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1,
+        1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2,
+        3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6,
+        1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1,
+        1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3,
+        2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4,
+        27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12,
+        3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1,
+        1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23,
+        176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6,
+        5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6,
+        1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1,
+        6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5,
+        2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15,
+        2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6,
+        2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4,
+        3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5,
+        3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2,
+        3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16,
+        1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31,
+        140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7,
+        5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2,
+        2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13,
+        4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3,
+        2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4,
+        4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1,
+        3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3,
+        3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11,
+        2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9,
+        5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2,
+        3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3,
+        1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12,
+        4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8,
+        4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5,
+        26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1,
+        3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5,
+        2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6,
+        10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6
+    };
+    static ImWchar base_ranges[] = // not zero-terminated
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0x2000, 0x206F, // General Punctuation
+        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+        0x31F0, 0x31FF, // Katakana Phonetic Extensions
+        0xFF00, 0xFFEF  // Half-width characters
+    };
+    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
+    if (!full_ranges[0])
+    {
+        memcpy(full_ranges, base_ranges, sizeof(base_ranges));
+        UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
+    }
+    return &full_ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
+{
+    // 1946 common ideograms code points for Japanese
+    // Sourced from http://theinstructionlimit.com/common-kanji-character-ranges-for-xna-spritefont-rendering
+    // FIXME: Source a list of the revised 2136 Joyo Kanji list from 2010 and rebuild this.
+    // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+    // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
+    static const short accumulative_offsets_from_0x4E00[] =
+    {
+        0,1,2,4,1,1,1,1,2,1,6,2,2,1,8,5,7,11,1,2,10,10,8,2,4,20,2,11,8,2,1,2,1,6,2,1,7,5,3,7,1,1,13,7,9,1,4,6,1,2,1,10,1,1,9,2,2,4,5,6,14,1,1,9,3,18,
+        5,4,2,2,10,7,1,1,1,3,2,4,3,23,2,10,12,2,14,2,4,13,1,6,10,3,1,7,13,6,4,13,5,2,3,17,2,2,5,7,6,4,1,7,14,16,6,13,9,15,1,1,7,16,4,7,1,19,9,2,7,15,
+        2,6,5,13,25,4,14,13,11,25,1,1,1,2,1,2,2,3,10,11,3,3,1,1,4,4,2,1,4,9,1,4,3,5,5,2,7,12,11,15,7,16,4,5,16,2,1,1,6,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1,
+        2,1,12,3,3,9,5,8,1,11,1,2,3,18,20,4,1,3,6,1,7,3,5,5,7,2,2,12,3,1,4,2,3,2,3,11,8,7,4,17,1,9,25,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,6,16,1,2,1,1,3,12,
+        20,2,5,20,8,7,6,2,1,1,1,1,6,2,1,2,10,1,1,6,1,3,1,2,1,4,1,12,4,1,3,1,1,1,1,1,10,4,7,5,13,1,15,1,1,30,11,9,1,15,38,14,1,32,17,20,1,9,31,2,21,9,
+        4,49,22,2,1,13,1,11,45,35,43,55,12,19,83,1,3,2,3,13,2,1,7,3,18,3,13,8,1,8,18,5,3,7,25,24,9,24,40,3,17,24,2,1,6,2,3,16,15,6,7,3,12,1,9,7,3,3,
+        3,15,21,5,16,4,5,12,11,11,3,6,3,2,31,3,2,1,1,23,6,6,1,4,2,6,5,2,1,1,3,3,22,2,6,2,3,17,3,2,4,5,1,9,5,1,1,6,15,12,3,17,2,14,2,8,1,23,16,4,2,23,
+        8,15,23,20,12,25,19,47,11,21,65,46,4,3,1,5,6,1,2,5,26,2,1,1,3,11,1,1,1,2,1,2,3,1,1,10,2,3,1,1,1,3,6,3,2,2,6,6,9,2,2,2,6,2,5,10,2,4,1,2,1,2,2,
+        3,1,1,3,1,2,9,23,9,2,1,1,1,1,5,3,2,1,10,9,6,1,10,2,31,25,3,7,5,40,1,15,6,17,7,27,180,1,3,2,2,1,1,1,6,3,10,7,1,3,6,17,8,6,2,2,1,3,5,5,8,16,14,
+        15,1,1,4,1,2,1,1,1,3,2,7,5,6,2,5,10,1,4,2,9,1,1,11,6,1,44,1,3,7,9,5,1,3,1,1,10,7,1,10,4,2,7,21,15,7,2,5,1,8,3,4,1,3,1,6,1,4,2,1,4,10,8,1,4,5,
+        1,5,10,2,7,1,10,1,1,3,4,11,10,29,4,7,3,5,2,3,33,5,2,19,3,1,4,2,6,31,11,1,3,3,3,1,8,10,9,12,11,12,8,3,14,8,6,11,1,4,41,3,1,2,7,13,1,5,6,2,6,12,
+        12,22,5,9,4,8,9,9,34,6,24,1,1,20,9,9,3,4,1,7,2,2,2,6,2,28,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,8,8,3,2,1,5,1,2,2,3,1,11,11,7,3,6,10,8,6,16,16,
+        22,7,12,6,21,5,4,6,6,3,6,1,3,2,1,2,8,29,1,10,1,6,13,6,6,19,31,1,13,4,4,22,17,26,33,10,4,15,12,25,6,67,10,2,3,1,6,10,2,6,2,9,1,9,4,4,1,2,16,2,
+        5,9,2,3,8,1,8,3,9,4,8,6,4,8,11,3,2,1,1,3,26,1,7,5,1,11,1,5,3,5,2,13,6,39,5,1,5,2,11,6,10,5,1,15,5,3,6,19,21,22,2,4,1,6,1,8,1,4,8,2,4,2,2,9,2,
+        1,1,1,4,3,6,3,12,7,1,14,2,4,10,2,13,1,17,7,3,2,1,3,2,13,7,14,12,3,1,29,2,8,9,15,14,9,14,1,3,1,6,5,9,11,3,38,43,20,7,7,8,5,15,12,19,15,81,8,7,
+        1,5,73,13,37,28,8,8,1,15,18,20,165,28,1,6,11,8,4,14,7,15,1,3,3,6,4,1,7,14,1,1,11,30,1,5,1,4,14,1,4,2,7,52,2,6,29,3,1,9,1,21,3,5,1,26,3,11,14,
+        11,1,17,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,7,7,5,17,3,3,3,1,23,10,4,4,6,3,1,16,17,22,3,10,21,16,16,6,4,10,2,1,1,2,8,8,6,5,3,3,3,39,25,
+        15,1,1,16,6,7,25,15,6,6,12,1,22,13,1,4,9,5,12,2,9,1,12,28,8,3,5,10,22,60,1,2,40,4,61,63,4,1,13,12,1,4,31,12,1,14,89,5,16,6,29,14,2,5,49,18,18,
+        5,29,33,47,1,17,1,19,12,2,9,7,39,12,3,7,12,39,3,1,46,4,12,3,8,9,5,31,15,18,3,2,2,66,19,13,17,5,3,46,124,13,57,34,2,5,4,5,8,1,1,1,4,3,1,17,5,
+        3,5,3,1,8,5,6,3,27,3,26,7,12,7,2,17,3,7,18,78,16,4,36,1,2,1,6,2,1,39,17,7,4,13,4,4,4,1,10,4,2,4,6,3,10,1,19,1,26,2,4,33,2,73,47,7,3,8,2,4,15,
+        18,1,29,2,41,14,1,21,16,41,7,39,25,13,44,2,2,10,1,13,7,1,7,3,5,20,4,8,2,49,1,10,6,1,6,7,10,7,11,16,3,12,20,4,10,3,1,2,11,2,28,9,2,4,7,2,15,1,
+        27,1,28,17,4,5,10,7,3,24,10,11,6,26,3,2,7,2,2,49,16,10,16,15,4,5,27,61,30,14,38,22,2,7,5,1,3,12,23,24,17,17,3,3,2,4,1,6,2,7,5,1,1,5,1,1,9,4,
+        1,3,6,1,8,2,8,4,14,3,5,11,4,1,3,32,1,19,4,1,13,11,5,2,1,8,6,8,1,6,5,13,3,23,11,5,3,16,3,9,10,1,24,3,198,52,4,2,2,5,14,5,4,22,5,20,4,11,6,41,
+        1,5,2,2,11,5,2,28,35,8,22,3,18,3,10,7,5,3,4,1,5,3,8,9,3,6,2,16,22,4,5,5,3,3,18,23,2,6,23,5,27,8,1,33,2,12,43,16,5,2,3,6,1,20,4,2,9,7,1,11,2,
+        10,3,14,31,9,3,25,18,20,2,5,5,26,14,1,11,17,12,40,19,9,6,31,83,2,7,9,19,78,12,14,21,76,12,113,79,34,4,1,1,61,18,85,10,2,2,13,31,11,50,6,33,159,
+        179,6,6,7,4,4,2,4,2,5,8,7,20,32,22,1,3,10,6,7,28,5,10,9,2,77,19,13,2,5,1,4,4,7,4,13,3,9,31,17,3,26,2,6,6,5,4,1,7,11,3,4,2,1,6,2,20,4,1,9,2,6,
+        3,7,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,5,13,8,4,11,23,1,10,6,2,1,3,21,2,2,4,24,31,4,10,10,2,5,192,15,4,16,7,9,51,1,2,1,1,5,1,1,2,1,3,5,3,1,3,4,1,
+        3,1,3,3,9,8,1,2,2,2,4,4,18,12,92,2,10,4,3,14,5,25,16,42,4,14,4,2,21,5,126,30,31,2,1,5,13,3,22,5,6,6,20,12,1,14,12,87,3,19,1,8,2,9,9,3,3,23,2,
+        3,7,6,3,1,2,3,9,1,3,1,6,3,2,1,3,11,3,1,6,10,3,2,3,1,2,1,5,1,1,11,3,6,4,1,7,2,1,2,5,5,34,4,14,18,4,19,7,5,8,2,6,79,1,5,2,14,8,2,9,2,1,36,28,16,
+        4,1,1,1,2,12,6,42,39,16,23,7,15,15,3,2,12,7,21,64,6,9,28,8,12,3,3,41,59,24,51,55,57,294,9,9,2,6,2,15,1,2,13,38,90,9,9,9,3,11,7,1,1,1,5,6,3,2,
+        1,2,2,3,8,1,4,4,1,5,7,1,4,3,20,4,9,1,1,1,5,5,17,1,5,2,6,2,4,1,4,5,7,3,18,11,11,32,7,5,4,7,11,127,8,4,3,3,1,10,1,1,6,21,14,1,16,1,7,1,3,6,9,65,
+        51,4,3,13,3,10,1,1,12,9,21,110,3,19,24,1,1,10,62,4,1,29,42,78,28,20,18,82,6,3,15,6,84,58,253,15,155,264,15,21,9,14,7,58,40,39,
+    };
+    static ImWchar base_ranges[] = // not zero-terminated
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+        0x31F0, 0x31FF, // Katakana Phonetic Extensions
+        0xFF00, 0xFFEF  // Half-width characters
+    };
+    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
+    if (!full_ranges[0])
+    {
+        memcpy(full_ranges, base_ranges, sizeof(base_ranges));
+        UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
+    }
+    return &full_ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin + Latin Supplement
+        0x0400, 0x052F, // Cyrillic + Cyrillic Supplement
+        0x2DE0, 0x2DFF, // Cyrillic Extended-A
+        0xA640, 0xA69F, // Cyrillic Extended-B
+        0,
+    };
+    return &ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin
+        0x2010, 0x205E, // Punctuations
+        0x0E00, 0x0E7F, // Thai
+        0,
+    };
+    return &ranges[0];
+}
+
+const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
+{
+    static const ImWchar ranges[] =
+    {
+        0x0020, 0x00FF, // Basic Latin
+        0x0102, 0x0103,
+        0x0110, 0x0111,
+        0x0128, 0x0129,
+        0x0168, 0x0169,
+        0x01A0, 0x01A1,
+        0x01AF, 0x01B0,
+        0x1EA0, 0x1EF9,
+        0,
+    };
+    return &ranges[0];
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontGlyphRangesBuilder
+//-----------------------------------------------------------------------------
+
+void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end)
+{
+    while (text_end ? (text < text_end) : *text)
+    {
+        unsigned int c = 0;
+        int c_len = ImTextCharFromUtf8(&c, text, text_end);
+        text += c_len;
+        if (c_len == 0)
+            break;
+        AddChar((ImWchar)c);
+    }
+}
+
+void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges)
+{
+    for (; ranges[0]; ranges += 2)
+        for (ImWchar c = ranges[0]; c <= ranges[1]; c++)
+            AddChar(c);
+}
+
+void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
+{
+    const int max_codepoint = IM_UNICODE_CODEPOINT_MAX;
+    for (int n = 0; n <= max_codepoint; n++)
+        if (GetBit(n))
+        {
+            out_ranges->push_back((ImWchar)n);
+            while (n < max_codepoint && GetBit(n + 1))
+                n++;
+            out_ranges->push_back((ImWchar)n);
+        }
+    out_ranges->push_back(0);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFont
+//-----------------------------------------------------------------------------
+
+ImFont::ImFont()
+{
+    FontSize = 0.0f;
+    FallbackAdvanceX = 0.0f;
+    FallbackChar = (ImWchar)'?';
+    EllipsisChar = (ImWchar)-1;
+    DisplayOffset = ImVec2(0.0f, 0.0f);
+    FallbackGlyph = NULL;
+    ContainerAtlas = NULL;
+    ConfigData = NULL;
+    ConfigDataCount = 0;
+    DirtyLookupTables = false;
+    Scale = 1.0f;
+    Ascent = Descent = 0.0f;
+    MetricsTotalSurface = 0;
+    memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
+}
+
+ImFont::~ImFont()
+{
+    ClearOutputData();
+}
+
+void    ImFont::ClearOutputData()
+{
+    FontSize = 0.0f;
+    FallbackAdvanceX = 0.0f;
+    Glyphs.clear();
+    IndexAdvanceX.clear();
+    IndexLookup.clear();
+    FallbackGlyph = NULL;
+    ContainerAtlas = NULL;
+    DirtyLookupTables = true;
+    Ascent = Descent = 0.0f;
+    MetricsTotalSurface = 0;
+}
+
+void ImFont::BuildLookupTable()
+{
+    int max_codepoint = 0;
+    for (int i = 0; i != Glyphs.Size; i++)
+        max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
+
+    // Build lookup table
+    IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
+    IndexAdvanceX.clear();
+    IndexLookup.clear();
+    DirtyLookupTables = false;
+    memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
+    GrowIndex(max_codepoint + 1);
+    for (int i = 0; i < Glyphs.Size; i++)
+    {
+        int codepoint = (int)Glyphs[i].Codepoint;
+        IndexAdvanceX[codepoint] = Glyphs[i].AdvanceX;
+        IndexLookup[codepoint] = (ImWchar)i;
+
+        // Mark 4K page as used
+        const int page_n = codepoint / 4096;
+        Used4kPagesMap[page_n >> 3] |= 1 << (page_n & 7);
+    }
+
+    // Create a glyph to handle TAB
+    // FIXME: Needs proper TAB handling but it needs to be contextualized (or we could arbitrary say that each string starts at "column 0" ?)
+    if (FindGlyph((ImWchar)' '))
+    {
+        if (Glyphs.back().Codepoint != '\t')   // So we can call this function multiple times (FIXME: Flaky)
+            Glyphs.resize(Glyphs.Size + 1);
+        ImFontGlyph& tab_glyph = Glyphs.back();
+        tab_glyph = *FindGlyph((ImWchar)' ');
+        tab_glyph.Codepoint = '\t';
+        tab_glyph.AdvanceX *= IM_TABSIZE;
+        IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX;
+        IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size-1);
+    }
+
+    // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons)
+    SetGlyphVisible((ImWchar)' ', false);
+    SetGlyphVisible((ImWchar)'\t', false);
+
+    // Setup fall-backs
+    FallbackGlyph = FindGlyphNoFallback(FallbackChar);
+    FallbackAdvanceX = FallbackGlyph ? FallbackGlyph->AdvanceX : 0.0f;
+    for (int i = 0; i < max_codepoint + 1; i++)
+        if (IndexAdvanceX[i] < 0.0f)
+            IndexAdvanceX[i] = FallbackAdvanceX;
+}
+
+// API is designed this way to avoid exposing the 4K page size
+// e.g. use with IsGlyphRangeUnused(0, 255)
+bool ImFont::IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last)
+{
+    unsigned int page_begin = (c_begin / 4096);
+    unsigned int page_last = (c_last / 4096);
+    for (unsigned int page_n = page_begin; page_n <= page_last; page_n++)
+        if ((page_n >> 3) < sizeof(Used4kPagesMap))
+            if (Used4kPagesMap[page_n >> 3] & (1 << (page_n & 7)))
+                return false;
+    return true;
+}
+
+void ImFont::SetGlyphVisible(ImWchar c, bool visible)
+{
+    if (ImFontGlyph* glyph = (ImFontGlyph*)(void*)FindGlyph((ImWchar)c))
+        glyph->Visible = visible ? 1 : 0;
+}
+
+void ImFont::SetFallbackChar(ImWchar c)
+{
+    FallbackChar = c;
+    BuildLookupTable();
+}
+
+void ImFont::GrowIndex(int new_size)
+{
+    IM_ASSERT(IndexAdvanceX.Size == IndexLookup.Size);
+    if (new_size <= IndexLookup.Size)
+        return;
+    IndexAdvanceX.resize(new_size, -1.0f);
+    IndexLookup.resize(new_size, (ImWchar)-1);
+}
+
+// x0/y0/x1/y1 are offset from the character upper-left layout position, in pixels. Therefore x0/y0 are often fairly close to zero.
+// Not to be mistaken with texture coordinates, which are held by u0/v0/u1/v1 in normalized format (0.0..1.0 on each texture axis).
+void ImFont::AddGlyph(ImWchar codepoint, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x)
+{
+    Glyphs.resize(Glyphs.Size + 1);
+    ImFontGlyph& glyph = Glyphs.back();
+    glyph.Codepoint = (unsigned int)codepoint;
+    glyph.Visible = (x0 != x1) && (y0 != y1);
+    glyph.X0 = x0;
+    glyph.Y0 = y0;
+    glyph.X1 = x1;
+    glyph.Y1 = y1;
+    glyph.U0 = u0;
+    glyph.V0 = v0;
+    glyph.U1 = u1;
+    glyph.V1 = v1;
+    glyph.AdvanceX = advance_x + ConfigData->GlyphExtraSpacing.x;  // Bake spacing into AdvanceX
+
+    if (ConfigData->PixelSnapH)
+        glyph.AdvanceX = IM_ROUND(glyph.AdvanceX);
+
+    // Compute rough surface usage metrics (+1 to account for average padding, +0.99 to round)
+    DirtyLookupTables = true;
+    MetricsTotalSurface += (int)((glyph.U1 - glyph.U0) * ContainerAtlas->TexWidth + 1.99f) * (int)((glyph.V1 - glyph.V0) * ContainerAtlas->TexHeight + 1.99f);
+}
+
+void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst)
+{
+    IM_ASSERT(IndexLookup.Size > 0);    // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function.
+    unsigned int index_size = (unsigned int)IndexLookup.Size;
+
+    if (dst < index_size && IndexLookup.Data[dst] == (ImWchar)-1 && !overwrite_dst) // 'dst' already exists
+        return;
+    if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op
+        return;
+
+    GrowIndex(dst + 1);
+    IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (ImWchar)-1;
+    IndexAdvanceX[dst] = (src < index_size) ? IndexAdvanceX.Data[src] : 1.0f;
+}
+
+const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
+{
+    if (c >= (size_t)IndexLookup.Size)
+        return FallbackGlyph;
+    const ImWchar i = IndexLookup.Data[c];
+    if (i == (ImWchar)-1)
+        return FallbackGlyph;
+    return &Glyphs.Data[i];
+}
+
+const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
+{
+    if (c >= (size_t)IndexLookup.Size)
+        return NULL;
+    const ImWchar i = IndexLookup.Data[c];
+    if (i == (ImWchar)-1)
+        return NULL;
+    return &Glyphs.Data[i];
+}
+
+const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const
+{
+    // Simple word-wrapping for English, not full-featured. Please submit failing cases!
+    // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.)
+
+    // For references, possible wrap point marked with ^
+    //  "aaa bbb, ccc,ddd. eee   fff. ggg!"
+    //      ^    ^    ^   ^   ^__    ^    ^
+
+    // List of hardcoded separators: .,;!?'"
+
+    // Skip extra blanks after a line returns (that includes not counting them in width computation)
+    // e.g. "Hello    world" --> "Hello" "World"
+
+    // Cut words that cannot possibly fit within one line.
+    // e.g.: "The tropical fish" with ~5 characters worth of width --> "The tr" "opical" "fish"
+
+    float line_width = 0.0f;
+    float word_width = 0.0f;
+    float blank_width = 0.0f;
+    wrap_width /= scale; // We work with unscaled widths to avoid scaling every characters
+
+    const char* word_end = text;
+    const char* prev_word_end = NULL;
+    bool inside_word = true;
+
+    const char* s = text;
+    while (s < text_end)
+    {
+        unsigned int c = (unsigned int)*s;
+        const char* next_s;
+        if (c < 0x80)
+            next_s = s + 1;
+        else
+            next_s = s + ImTextCharFromUtf8(&c, s, text_end);
+        if (c == 0)
+            break;
+
+        if (c < 32)
+        {
+            if (c == '\n')
+            {
+                line_width = word_width = blank_width = 0.0f;
+                inside_word = true;
+                s = next_s;
+                continue;
+            }
+            if (c == '\r')
+            {
+                s = next_s;
+                continue;
+            }
+        }
+
+        const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX);
+        if (ImCharIsBlankW(c))
+        {
+            if (inside_word)
+            {
+                line_width += blank_width;
+                blank_width = 0.0f;
+                word_end = s;
+            }
+            blank_width += char_width;
+            inside_word = false;
+        }
+        else
+        {
+            word_width += char_width;
+            if (inside_word)
+            {
+                word_end = next_s;
+            }
+            else
+            {
+                prev_word_end = word_end;
+                line_width += word_width + blank_width;
+                word_width = blank_width = 0.0f;
+            }
+
+            // Allow wrapping after punctuation.
+            inside_word = !(c == '.' || c == ',' || c == ';' || c == '!' || c == '?' || c == '\"');
+        }
+
+        // We ignore blank width at the end of the line (they can be skipped)
+        if (line_width + word_width > wrap_width)
+        {
+            // Words that cannot possibly fit within an entire line will be cut anywhere.
+            if (word_width < wrap_width)
+                s = prev_word_end ? prev_word_end : word_end;
+            break;
+        }
+
+        s = next_s;
+    }
+
+    return s;
+}
+
+ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining) const
+{
+    if (!text_end)
+        text_end = text_begin + strlen(text_begin); // FIXME-OPT: Need to avoid this.
+
+    const float line_height = size;
+    const float scale = size / FontSize;
+
+    ImVec2 text_size = ImVec2(0,0);
+    float line_width = 0.0f;
+
+    const bool word_wrap_enabled = (wrap_width > 0.0f);
+    const char* word_wrap_eol = NULL;
+
+    const char* s = text_begin;
+    while (s < text_end)
+    {
+        if (word_wrap_enabled)
+        {
+            // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
+            if (!word_wrap_eol)
+            {
+                word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width);
+                if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
+                    word_wrap_eol++;    // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
+            }
+
+            if (s >= word_wrap_eol)
+            {
+                if (text_size.x < line_width)
+                    text_size.x = line_width;
+                text_size.y += line_height;
+                line_width = 0.0f;
+                word_wrap_eol = NULL;
+
+                // Wrapping skips upcoming blanks
+                while (s < text_end)
+                {
+                    const char c = *s;
+                    if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
+                }
+                continue;
+            }
+        }
+
+        // Decode and advance source
+        const char* prev_s = s;
+        unsigned int c = (unsigned int)*s;
+        if (c < 0x80)
+        {
+            s += 1;
+        }
+        else
+        {
+            s += ImTextCharFromUtf8(&c, s, text_end);
+            if (c == 0) // Malformed UTF-8?
+                break;
+        }
+
+        if (c < 32)
+        {
+            if (c == '\n')
+            {
+                text_size.x = ImMax(text_size.x, line_width);
+                text_size.y += line_height;
+                line_width = 0.0f;
+                continue;
+            }
+            if (c == '\r')
+                continue;
+        }
+
+        const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX) * scale;
+        if (line_width + char_width >= max_width)
+        {
+            s = prev_s;
+            break;
+        }
+
+        line_width += char_width;
+    }
+
+    if (text_size.x < line_width)
+        text_size.x = line_width;
+
+    if (line_width > 0 || text_size.y == 0.0f)
+        text_size.y += line_height;
+
+    if (remaining)
+        *remaining = s;
+
+    return text_size;
+}
+
+void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const
+{
+    const ImFontGlyph* glyph = FindGlyph(c);
+    if (!glyph || !glyph->Visible)
+        return;
+    float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f;
+    pos.x = IM_FLOOR(pos.x + DisplayOffset.x);
+    pos.y = IM_FLOOR(pos.y + DisplayOffset.y);
+    draw_list->PrimReserve(6, 4);
+    draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col);
+}
+
+void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const
+{
+    if (!text_end)
+        text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls.
+
+    // Align to be pixel perfect
+    pos.x = IM_FLOOR(pos.x + DisplayOffset.x);
+    pos.y = IM_FLOOR(pos.y + DisplayOffset.y);
+    float x = pos.x;
+    float y = pos.y;
+    if (y > clip_rect.w)
+        return;
+
+    const float scale = size / FontSize;
+    const float line_height = FontSize * scale;
+    const bool word_wrap_enabled = (wrap_width > 0.0f);
+    const char* word_wrap_eol = NULL;
+
+    // Fast-forward to first visible line
+    const char* s = text_begin;
+    if (y + line_height < clip_rect.y && !word_wrap_enabled)
+        while (y + line_height < clip_rect.y && s < text_end)
+        {
+            s = (const char*)memchr(s, '\n', text_end - s);
+            s = s ? s + 1 : text_end;
+            y += line_height;
+        }
+
+    // For large text, scan for the last visible line in order to avoid over-reserving in the call to PrimReserve()
+    // Note that very large horizontal line will still be affected by the issue (e.g. a one megabyte string buffer without a newline will likely crash atm)
+    if (text_end - s > 10000 && !word_wrap_enabled)
+    {
+        const char* s_end = s;
+        float y_end = y;
+        while (y_end < clip_rect.w && s_end < text_end)
+        {
+            s_end = (const char*)memchr(s_end, '\n', text_end - s_end);
+            s_end = s_end ? s_end + 1 : text_end;
+            y_end += line_height;
+        }
+        text_end = s_end;
+    }
+    if (s == text_end)
+        return;
+
+    // Reserve vertices for remaining worse case (over-reserving is useful and easily amortized)
+    const int vtx_count_max = (int)(text_end - s) * 4;
+    const int idx_count_max = (int)(text_end - s) * 6;
+    const int idx_expected_size = draw_list->IdxBuffer.Size + idx_count_max;
+    draw_list->PrimReserve(idx_count_max, vtx_count_max);
+
+    ImDrawVert* vtx_write = draw_list->_VtxWritePtr;
+    ImDrawIdx* idx_write = draw_list->_IdxWritePtr;
+    unsigned int vtx_current_idx = draw_list->_VtxCurrentIdx;
+
+    while (s < text_end)
+    {
+        if (word_wrap_enabled)
+        {
+            // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
+            if (!word_wrap_eol)
+            {
+                word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.x));
+                if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
+                    word_wrap_eol++;    // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
+            }
+
+            if (s >= word_wrap_eol)
+            {
+                x = pos.x;
+                y += line_height;
+                word_wrap_eol = NULL;
+
+                // Wrapping skips upcoming blanks
+                while (s < text_end)
+                {
+                    const char c = *s;
+                    if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
+                }
+                continue;
+            }
+        }
+
+        // Decode and advance source
+        unsigned int c = (unsigned int)*s;
+        if (c < 0x80)
+        {
+            s += 1;
+        }
+        else
+        {
+            s += ImTextCharFromUtf8(&c, s, text_end);
+            if (c == 0) // Malformed UTF-8?
+                break;
+        }
+
+        if (c < 32)
+        {
+            if (c == '\n')
+            {
+                x = pos.x;
+                y += line_height;
+                if (y > clip_rect.w)
+                    break; // break out of main loop
+                continue;
+            }
+            if (c == '\r')
+                continue;
+        }
+
+        const ImFontGlyph* glyph = FindGlyph((ImWchar)c);
+        if (glyph == NULL)
+            continue;
+
+        float char_width = glyph->AdvanceX * scale;
+        if (glyph->Visible)
+        {
+            // We don't do a second finer clipping test on the Y axis as we've already skipped anything before clip_rect.y and exit once we pass clip_rect.w
+            float x1 = x + glyph->X0 * scale;
+            float x2 = x + glyph->X1 * scale;
+            float y1 = y + glyph->Y0 * scale;
+            float y2 = y + glyph->Y1 * scale;
+            if (x1 <= clip_rect.z && x2 >= clip_rect.x)
+            {
+                // Render a character
+                float u1 = glyph->U0;
+                float v1 = glyph->V0;
+                float u2 = glyph->U1;
+                float v2 = glyph->V1;
+
+                // CPU side clipping used to fit text in their frame when the frame is too small. Only does clipping for axis aligned quads.
+                if (cpu_fine_clip)
+                {
+                    if (x1 < clip_rect.x)
+                    {
+                        u1 = u1 + (1.0f - (x2 - clip_rect.x) / (x2 - x1)) * (u2 - u1);
+                        x1 = clip_rect.x;
+                    }
+                    if (y1 < clip_rect.y)
+                    {
+                        v1 = v1 + (1.0f - (y2 - clip_rect.y) / (y2 - y1)) * (v2 - v1);
+                        y1 = clip_rect.y;
+                    }
+                    if (x2 > clip_rect.z)
+                    {
+                        u2 = u1 + ((clip_rect.z - x1) / (x2 - x1)) * (u2 - u1);
+                        x2 = clip_rect.z;
+                    }
+                    if (y2 > clip_rect.w)
+                    {
+                        v2 = v1 + ((clip_rect.w - y1) / (y2 - y1)) * (v2 - v1);
+                        y2 = clip_rect.w;
+                    }
+                    if (y1 >= y2)
+                    {
+                        x += char_width;
+                        continue;
+                    }
+                }
+
+                // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug builds. Inlined here:
+                {
+                    idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2);
+                    idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3);
+                    vtx_write[0].pos.x = x1; vtx_write[0].pos.y = y1; vtx_write[0].col = col; vtx_write[0].uv.x = u1; vtx_write[0].uv.y = v1;
+                    vtx_write[1].pos.x = x2; vtx_write[1].pos.y = y1; vtx_write[1].col = col; vtx_write[1].uv.x = u2; vtx_write[1].uv.y = v1;
+                    vtx_write[2].pos.x = x2; vtx_write[2].pos.y = y2; vtx_write[2].col = col; vtx_write[2].uv.x = u2; vtx_write[2].uv.y = v2;
+                    vtx_write[3].pos.x = x1; vtx_write[3].pos.y = y2; vtx_write[3].col = col; vtx_write[3].uv.x = u1; vtx_write[3].uv.y = v2;
+                    vtx_write += 4;
+                    vtx_current_idx += 4;
+                    idx_write += 6;
+                }
+            }
+        }
+        x += char_width;
+    }
+
+    // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action.
+    draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink()
+    draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data);
+    draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size);
+    draw_list->_VtxWritePtr = vtx_write;
+    draw_list->_IdxWritePtr = idx_write;
+    draw_list->_VtxCurrentIdx = vtx_current_idx;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGui Internal Render Helpers
+//-----------------------------------------------------------------------------
+// Vaguely redesigned to stop accessing ImGui global state:
+// - RenderArrow()
+// - RenderBullet()
+// - RenderCheckMark()
+// - RenderMouseCursor()
+// - RenderArrowPointingAt()
+// - RenderRectFilledRangeH()
+//-----------------------------------------------------------------------------
+// Function in need of a redesign (legacy mess)
+// - RenderColorRectWithAlphaCheckerboard()
+//-----------------------------------------------------------------------------
+
+// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
+void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
+{
+    const float h = draw_list->_Data->FontSize * 1.00f;
+    float r = h * 0.40f * scale;
+    ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
+
+    ImVec2 a, b, c;
+    switch (dir)
+    {
+    case ImGuiDir_Up:
+    case ImGuiDir_Down:
+        if (dir == ImGuiDir_Up) r = -r;
+        a = ImVec2(+0.000f, +0.750f) * r;
+        b = ImVec2(-0.866f, -0.750f) * r;
+        c = ImVec2(+0.866f, -0.750f) * r;
+        break;
+    case ImGuiDir_Left:
+    case ImGuiDir_Right:
+        if (dir == ImGuiDir_Left) r = -r;
+        a = ImVec2(+0.750f, +0.000f) * r;
+        b = ImVec2(-0.750f, +0.866f) * r;
+        c = ImVec2(-0.750f, -0.866f) * r;
+        break;
+    case ImGuiDir_None:
+    case ImGuiDir_COUNT:
+        IM_ASSERT(0);
+        break;
+    }
+    draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
+}
+
+void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
+{
+    draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
+}
+
+void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz)
+{
+    float thickness = ImMax(sz / 5.0f, 1.0f);
+    sz -= thickness * 0.5f;
+    pos += ImVec2(thickness * 0.25f, thickness * 0.25f);
+
+    float third = sz / 3.0f;
+    float bx = pos.x + third;
+    float by = pos.y + sz - third * 0.5f;
+    draw_list->PathLineTo(ImVec2(bx - third, by - third));
+    draw_list->PathLineTo(ImVec2(bx, by));
+    draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f));
+    draw_list->PathStroke(col, false, thickness);
+}
+
+void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
+{
+    if (mouse_cursor == ImGuiMouseCursor_None)
+        return;
+    IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
+
+    ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
+    ImVec2 offset, size, uv[4];
+    if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
+    {
+        pos -= offset;
+        const ImTextureID tex_id = font_atlas->TexID;
+        draw_list->PushTextureID(tex_id);
+        draw_list->AddImage(tex_id, pos + ImVec2(1,0)*scale, pos + ImVec2(1,0)*scale + size*scale, uv[2], uv[3], col_shadow);
+        draw_list->AddImage(tex_id, pos + ImVec2(2,0)*scale, pos + ImVec2(2,0)*scale + size*scale, uv[2], uv[3], col_shadow);
+        draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[2], uv[3], col_border);
+        draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[0], uv[1], col_fill);
+        draw_list->PopTextureID();
+    }
+}
+
+// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
+void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
+{
+    switch (direction)
+    {
+    case ImGuiDir_Left:  draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return;
+    case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return;
+    case ImGuiDir_Up:    draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return;
+    case ImGuiDir_Down:  draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return;
+    case ImGuiDir_None: case ImGuiDir_COUNT: break; // Fix warnings
+    }
+}
+
+static inline float ImAcos01(float x)
+{
+    if (x <= 0.0f) return IM_PI * 0.5f;
+    if (x >= 1.0f) return 0.0f;
+    return ImAcos(x);
+    //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do.
+}
+
+// FIXME: Cleanup and move code to ImDrawList.
+void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
+{
+    if (x_end_norm == x_start_norm)
+        return;
+    if (x_start_norm > x_end_norm)
+        ImSwap(x_start_norm, x_end_norm);
+
+    ImVec2 p0 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_start_norm), rect.Min.y);
+    ImVec2 p1 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_end_norm), rect.Max.y);
+    if (rounding == 0.0f)
+    {
+        draw_list->AddRectFilled(p0, p1, col, 0.0f);
+        return;
+    }
+
+    rounding = ImClamp(ImMin((rect.Max.x - rect.Min.x) * 0.5f, (rect.Max.y - rect.Min.y) * 0.5f) - 1.0f, 0.0f, rounding);
+    const float inv_rounding = 1.0f / rounding;
+    const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding);
+    const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding);
+    const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return.
+    const float x0 = ImMax(p0.x, rect.Min.x + rounding);
+    if (arc0_b == arc0_e)
+    {
+        draw_list->PathLineTo(ImVec2(x0, p1.y));
+        draw_list->PathLineTo(ImVec2(x0, p0.y));
+    }
+    else if (arc0_b == 0.0f && arc0_e == half_pi)
+    {
+        draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL
+        draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR
+    }
+    else
+    {
+        draw_list->PathArcTo(ImVec2(x0, p1.y - rounding), rounding, IM_PI - arc0_e, IM_PI - arc0_b, 3); // BL
+        draw_list->PathArcTo(ImVec2(x0, p0.y + rounding), rounding, IM_PI + arc0_b, IM_PI + arc0_e, 3); // TR
+    }
+    if (p1.x > rect.Min.x + rounding)
+    {
+        const float arc1_b = ImAcos01(1.0f - (rect.Max.x - p1.x) * inv_rounding);
+        const float arc1_e = ImAcos01(1.0f - (rect.Max.x - p0.x) * inv_rounding);
+        const float x1 = ImMin(p1.x, rect.Max.x - rounding);
+        if (arc1_b == arc1_e)
+        {
+            draw_list->PathLineTo(ImVec2(x1, p0.y));
+            draw_list->PathLineTo(ImVec2(x1, p1.y));
+        }
+        else if (arc1_b == 0.0f && arc1_e == half_pi)
+        {
+            draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR
+            draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3);  // BR
+        }
+        else
+        {
+            draw_list->PathArcTo(ImVec2(x1, p0.y + rounding), rounding, -arc1_e, -arc1_b, 3); // TR
+            draw_list->PathArcTo(ImVec2(x1, p1.y - rounding), rounding, +arc1_b, +arc1_e, 3); // BR
+        }
+    }
+    draw_list->PathFillConvex(col);
+}
+
+// Helper for ColorPicker4()
+// NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that.
+// Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding alltogether.
+// FIXME: uses ImGui::GetColorU32
+void ImGui::RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 col, float grid_step, ImVec2 grid_off, float rounding, int rounding_corners_flags)
+{
+    if (((col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) < 0xFF)
+    {
+        ImU32 col_bg1 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col));
+        ImU32 col_bg2 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col));
+        draw_list->AddRectFilled(p_min, p_max, col_bg1, rounding, rounding_corners_flags);
+
+        int yi = 0;
+        for (float y = p_min.y + grid_off.y; y < p_max.y; y += grid_step, yi++)
+        {
+            float y1 = ImClamp(y, p_min.y, p_max.y), y2 = ImMin(y + grid_step, p_max.y);
+            if (y2 <= y1)
+                continue;
+            for (float x = p_min.x + grid_off.x + (yi & 1) * grid_step; x < p_max.x; x += grid_step * 2.0f)
+            {
+                float x1 = ImClamp(x, p_min.x, p_max.x), x2 = ImMin(x + grid_step, p_max.x);
+                if (x2 <= x1)
+                    continue;
+                int rounding_corners_flags_cell = 0;
+                if (y1 <= p_min.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopRight; }
+                if (y2 >= p_max.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotRight; }
+                rounding_corners_flags_cell &= rounding_corners_flags;
+                draw_list->AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding_corners_flags_cell ? rounding : 0.0f, rounding_corners_flags_cell);
+            }
+        }
+    }
+    else
+    {
+        draw_list->AddRectFilled(p_min, p_max, col, rounding, rounding_corners_flags);
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Decompression code
+//-----------------------------------------------------------------------------
+// Compressed with stb_compress() then converted to a C array and encoded as base85.
+// Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file.
+// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
+// Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h
+//-----------------------------------------------------------------------------
+
+static unsigned int stb_decompress_length(const unsigned char *input)
+{
+    return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11];
+}
+
+static unsigned char *stb__barrier_out_e, *stb__barrier_out_b;
+static const unsigned char *stb__barrier_in_b;
+static unsigned char *stb__dout;
+static void stb__match(const unsigned char *data, unsigned int length)
+{
+    // INVERSE of memmove... write each byte before copying the next...
+    IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
+    if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
+    if (data < stb__barrier_out_b) { stb__dout = stb__barrier_out_e+1; return; }
+    while (length--) *stb__dout++ = *data++;
+}
+
+static void stb__lit(const unsigned char *data, unsigned int length)
+{
+    IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
+    if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
+    if (data < stb__barrier_in_b) { stb__dout = stb__barrier_out_e+1; return; }
+    memcpy(stb__dout, data, length);
+    stb__dout += length;
+}
+
+#define stb__in2(x)   ((i[x] << 8) + i[(x)+1])
+#define stb__in3(x)   ((i[x] << 16) + stb__in2((x)+1))
+#define stb__in4(x)   ((i[x] << 24) + stb__in3((x)+1))
+
+static const unsigned char *stb_decompress_token(const unsigned char *i)
+{
+    if (*i >= 0x20) { // use fewer if's for cases that expand small
+        if (*i >= 0x80)       stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2;
+        else if (*i >= 0x40)  stb__match(stb__dout-(stb__in2(0) - 0x4000 + 1), i[2]+1), i += 3;
+        else /* *i >= 0x20 */ stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1);
+    } else { // more ifs for cases that expand large, since overhead is amortized
+        if (*i >= 0x18)       stb__match(stb__dout-(stb__in3(0) - 0x180000 + 1), i[3]+1), i += 4;
+        else if (*i >= 0x10)  stb__match(stb__dout-(stb__in3(0) - 0x100000 + 1), stb__in2(3)+1), i += 5;
+        else if (*i >= 0x08)  stb__lit(i+2, stb__in2(0) - 0x0800 + 1), i += 2 + (stb__in2(0) - 0x0800 + 1);
+        else if (*i == 0x07)  stb__lit(i+3, stb__in2(1) + 1), i += 3 + (stb__in2(1) + 1);
+        else if (*i == 0x06)  stb__match(stb__dout-(stb__in3(1)+1), i[4]+1), i += 5;
+        else if (*i == 0x04)  stb__match(stb__dout-(stb__in3(1)+1), stb__in2(4)+1), i += 6;
+    }
+    return i;
+}
+
+static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen)
+{
+    const unsigned long ADLER_MOD = 65521;
+    unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16;
+    unsigned long blocklen = buflen % 5552;
+
+    unsigned long i;
+    while (buflen) {
+        for (i=0; i + 7 < blocklen; i += 8) {
+            s1 += buffer[0], s2 += s1;
+            s1 += buffer[1], s2 += s1;
+            s1 += buffer[2], s2 += s1;
+            s1 += buffer[3], s2 += s1;
+            s1 += buffer[4], s2 += s1;
+            s1 += buffer[5], s2 += s1;
+            s1 += buffer[6], s2 += s1;
+            s1 += buffer[7], s2 += s1;
+
+            buffer += 8;
+        }
+
+        for (; i < blocklen; ++i)
+            s1 += *buffer++, s2 += s1;
+
+        s1 %= ADLER_MOD, s2 %= ADLER_MOD;
+        buflen -= blocklen;
+        blocklen = 5552;
+    }
+    return (unsigned int)(s2 << 16) + (unsigned int)s1;
+}
+
+static unsigned int stb_decompress(unsigned char *output, const unsigned char *i, unsigned int /*length*/)
+{
+    if (stb__in4(0) != 0x57bC0000) return 0;
+    if (stb__in4(4) != 0)          return 0; // error! stream is > 4GB
+    const unsigned int olen = stb_decompress_length(i);
+    stb__barrier_in_b = i;
+    stb__barrier_out_e = output + olen;
+    stb__barrier_out_b = output;
+    i += 16;
+
+    stb__dout = output;
+    for (;;) {
+        const unsigned char *old_i = i;
+        i = stb_decompress_token(i);
+        if (i == old_i) {
+            if (*i == 0x05 && i[1] == 0xfa) {
+                IM_ASSERT(stb__dout == output + olen);
+                if (stb__dout != output + olen) return 0;
+                if (stb_adler32(1, output, olen) != (unsigned int) stb__in4(2))
+                    return 0;
+                return olen;
+            } else {
+                IM_ASSERT(0); /* NOTREACHED */
+                return 0;
+            }
+        }
+        IM_ASSERT(stb__dout <= output + olen);
+        if (stb__dout > output + olen)
+            return 0;
+    }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Default font data (ProggyClean.ttf)
+//-----------------------------------------------------------------------------
+// ProggyClean.ttf
+// Copyright (c) 2004, 2005 Tristan Grimmer
+// MIT license (see License.txt in http://www.upperbounds.net/download/ProggyClean.ttf.zip)
+// Download and more information at http://upperbounds.net
+//-----------------------------------------------------------------------------
+// File: 'ProggyClean.ttf' (41208 bytes)
+// Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding).
+// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
+//-----------------------------------------------------------------------------
+static const char proggy_clean_ttf_compressed_data_base85[11980+1] =
+    "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/"
+    "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#"
+    "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL"
+    "i@^rMl9t=cWq6##weg>$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;-<nLENhvx>-VsM.M0rJfLH2eTM`*oJMHRC`N"
+    "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`&#0j@'DbG&#^$PG.Ll+DNa<XCMKEV*N)LN/N"
+    "*b=%Q6pia-Xg8I$<MR&,VdJe$<(7G;Ckl'&hF;;$<_=X(b.RS%%)###MPBuuE1V:v&cX&#2m#(&cV]`k9OhLMbn%s$G2,B$BfD3X*sp5#l,$R#]x_X1xKX%b5U*[r5iMfUo9U`N99hG)"
+    "tm+/Us9pG)XPu`<0s-)WTt(gCRxIg(%6sfh=ktMKn3j)<6<b5Sk_/0(^]AaN#(p/L>&VZ>1i%h1S9u5o@YaaW$e+b<TWFn/Z:Oh(Cx2$lNEoN^e)#CFY@@I;BOQ*sRwZtZxRcU7uW6CX"
+    "ow0i(?$Q[cjOd[P4d)]>ROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc."
+    "x]Ip.PH^'/aqUO/$1WxLoW0[iLA<QT;5HKD+@qQ'NQ(3_PLhE48R.qAPSwQ0/WK?Z,[x?-J;jQTWA0X@KJ(_Y8N-:/M74:/-ZpKrUss?d#dZq]DAbkU*JqkL+nwX@@47`5>w=4h(9.`G"
+    "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?G<Nald$qs]@]L<J7bR*>gv:[7MI2k).'2($5FNP&EQ(,)"
+    "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#"
+    "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM"
+    "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0<q-]L_?^)1vw'.,MRsqVr.L;aN&#/EgJ)PBc[-f>+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu"
+    "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/"
+    "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[K<L"
+    "%a2E-grWVM3@2=-k22tL]4$##6We'8UJCKE[d_=%wI;'6X-GsLX4j^SgJ$##R*w,vP3wK#iiW&#*h^D&R?jp7+/u&#(AP##XU8c$fSYW-J95_-Dp[g9wcO&#M-h1OcJlc-*vpw0xUX&#"
+    "OQFKNX@QI'IoPp7nb,QU//MQ&ZDkKP)X<WSVL(68uVl&#c'[0#(s1X&xm$Y%B7*K:eDA323j998GXbA#pwMs-jgD$9QISB-A_(aN4xoFM^@C58D0+Q+q3n0#3U1InDjF682-SjMXJK)("
+    "h$hxua_K]ul92%'BOU&#BRRh-slg8KDlr:%L71Ka:.A;%YULjDPmL<LYs8i#XwJOYaKPKc1h:'9Ke,g)b),78=I39B;xiY$bgGw-&.Zi9InXDuYa%G*f2Bq7mn9^#p1vv%#(Wi-;/Z5h"
+    "o;#2:;%d&#x9v68C5g?ntX0X)pT`;%pB3q7mgGN)3%(P8nTd5L7GeA-GL@+%J3u2:(Yf>et`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO"
+    "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J<j$UpK<Q4a1]MupW^-"
+    "sj_$%[HK%'F####QRZJ::Y3EGl4'@%FkiAOg#p[##O`gukTfBHagL<LHw%q&OV0##F=6/:chIm0@eCP8X]:kFI%hl8hgO@RcBhS-@Qb$%+m=hPDLg*%K8ln(wcf3/'DW-$.lR?n[nCH-"
+    "eXOONTJlh:.RYF%3'p6sq:UIMA945&^HFS87@$EP2iG<-lCO$%c`uKGD3rC$x0BL8aFn--`ke%#HMP'vh1/R&O_J9'um,.<tx[@%wsJk&bUT2`0uMv7gg#qp/ij.L56'hl;.s5CUrxjO"
+    "M7-##.l+Au'A&O:-T72L]P`&=;ctp'XScX*rU.>-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%"
+    "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$M<Jnq79VsJW/mWS*PUiq76;]/NM_>hLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]"
+    "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et"
+    "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$<M-SGZ':+Q_k+uvOSLiEo(<aD/K<CCc`'Lx>'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:"
+    "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VB<HFF*qL("
+    "$/V,;(kXZejWO`<[5?\?ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<"
+    "nKnw'Ho8C=Y>pqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<<aG/1N$#FX$0V5Y6x'aErI3I$7x%E`v<-BY,)%-?Psf*l?%C3.mM(=/M0:JxG'?"
+    "7WhH%o'a<-80g0NBxoO(GH<dM]n.+%q@jH?f.UsJ2Ggs&4<-e47&Kl+f//9@`b+?.TeN_&B8Ss?v;^Trk;f#YvJkl&w$]>-+k?'(<S:68tq*WoDfZu';mM?8X[ma8W%*`-=;D.(nc7/;"
+    ")g:T1=^J$&BRV(-lTmNB6xqB[@0*o.erM*<SWF]u2=st-*(6v>^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M"
+    "D?@f&1'BW-)Ju<L25gl8uhVm1hL$##*8###'A3/LkKW+(^rWX?5W_8g)a(m&K8P>#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX("
+    "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs"
+    "bIu)'Z,*[>br5fX^:FPAWr-m2KgL<LUN098kTF&#lvo58=/vjDo;.;)Ka*hLR#/k=rKbxuV`>Q_nN6'8uTG&#1T5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q"
+    "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aeg<Z'<$#4H)6,>e0jT6'N#(q%.O=?2S]u*(m<-"
+    "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i"
+    "sZ88+dKQ)W6>J%CL<KE>`.d*(B`-n8D9oK<Up]c$X$(,)M8Zt7/[rdkqTgl-0cuGMv'?>-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P&#9r+$%CE=68>K8r0=dSC%%(@p7"
+    ".m7jilQ02'0-VWAg<a/''3u.=4L$Y)6k/K:_[3=&jvL<L0C/2'v:^;-DIBW,B4E68:kZ;%?8(Q8BH=kO65BW?xSG&#@uU,DS*,?.+(o(#1vCS8#CHF>TlGW'b)Tq7VT9q^*^$$.:&N@@"
+    "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*"
+    "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u"
+    "@-W$U%VEQ/,,>>#)D<h#`)h0:<Q6909ua+&VU%n2:cG3FJ-%@Bj-DgLr`Hw&HAKjKjseK</xKT*)B,N9X3]krc12t'pgTV(Lv-tL[xg_%=M_q7a^x?7Ubd>#%8cY#YZ?=,`Wdxu/ae&#"
+    "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$s<Eh#c&)q.MXI%#v9ROa5FZO%sF7q7Nwb&#ptUJ:aqJe$Sl68%.D###EC><?-aF&#RNQv>o8lKN%5/$(vdfq7+ebA#"
+    "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(<c`Q8N)jEIF*+?P2a8g%)$q]o2aH8C&<SibC/q,(e:v;-b#6[$NtDZ84Je2KNvB#$P5?tQ3nt(0"
+    "d=j.LQf./Ll33+(;q3L-w=8dX$#WF&uIJ@-bfI>%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoF&#4DoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8"
+    "6e%B/:=>)N4xeW.*wft-;$'58-ESqr<b?UI(_%@[P46>#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#"
+    "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjL<Lni;''X.`$#8+1GD"
+    ":k$YUWsbn8ogh6rxZ2Z9]%nd+>V#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#<NEdtg(n'=S1A(Q1/I&4([%dM`,Iu'1:_hL>SfD07&6D<fp8dHM7/g+"
+    "tlPN9J*rKaPct&?'uBCem^jn%9_K)<,C5K3s=5g&GmJb*[SYq7K;TRLGCsM-$$;S%:Y@r7AK0pprpL<Lrh,q7e/%KWK:50I^+m'vi`3?%Zp+<-d+$L-Sv:@.o19n$s0&39;kn;S%BSq*"
+    "$3WoJSCLweV[aZ'MQIjO<7;X-X;&+dMLvu#^UsGEC9WEc[X(wI7#2.(F0jV*eZf<-Qv3J-c+J5AlrB#$p(H68LvEA'q3n0#m,[`*8Ft)FcYgEud]CWfm68,(aLA$@EFTgLXoBq/UPlp7"
+    ":d[/;r_ix=:TF`S5H-b<LI&HY(K=h#)]Lk$K14lVfm:x$H<3^Ql<M`$OhapBnkup'D#L$Pb_`N*g]2e;X/Dtg,bsj&K#2[-:iYr'_wgH)NUIR8a1n#S?Yej'h8^58UbZd+^FKD*T@;6A"
+    "7aQC[K8d-(v6GI$x:T<&'Gp5Uf>@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-<aN((^7('#Z0wK#5GX@7"
+    "u][`*S^43933A4rl][`*O4CgLEl]v$1Q3AeF37dbXk,.)vj#x'd`;qgbQR%FW,2(?LO=s%Sc68%NP'##Aotl8x=BE#j1UD([3$M(]UI2LX3RpKN@;/#f'f/&_mt&F)XdF<9t4)Qa.*kT"
+    "LwQ'(TTB9.xH'>#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5<N?)NBS)QN*_I,?&)2'IM%L3I)X((e/dl2&8'<M"
+    ":^#M*Q+[T.Xri.LYS3v%fF`68h;b-X[/En'CR.q7E)p'/kle2HM,u;^%OKC-N+Ll%F9CF<Nf'^#t2L,;27W:0O@6##U6W7:$rJfLWHj$#)woqBefIZ.PK<b*t7ed;p*_m;4ExK#h@&]>"
+    "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%"
+    "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;"
+    "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmL<LD)F^%[tC'8;+9E#C$g%#5Y>q9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:"
+    "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3<n-&%H%b<FDj2M<hH=&Eh<2Len$b*aTX=-8QxN)k11IM1c^j%"
+    "9s<L<NFSo)B?+<-(GxsF,^-Eh@$4dXhN$+#rxK8'je'D7k`e;)2pYwPA'_p9&@^18ml1^[@g4t*[JOa*[=Qp7(qJ_oOL^('7fB&Hq-:sf,sNj8xq^>$U4O]GKx'm9)b@p7YsvK3w^YR-"
+    "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*"
+    "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdF<TddF<9Ah-6&9tWoDlh]&1SpGMq>Ti1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IX<N+T+0MlMBPQ*Vj>SsD<U4JHY"
+    "8kD2)2fU/M#$e.)T4,_=8hLim[&);?UkK'-x?'(:siIfL<$pFM`i<?%W(mGDHM%>iWP,##P`%/L<eXi:@Z9C.7o=@(pXdAO/NLQ8lPl+HPOQa8wD8=^GlPa8TKI1CjhsCTSLJM'/Wl>-"
+    "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n<bhPmUkMw>%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL<LoNs'6,'85`"
+    "0?t/'_U59@]ddF<#LdF<eWdF<OuN/45rY<-L@&#+fm>69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdF<gR@2L=FNU-<b[(9c/ML3m;Z[$oF3g)GAWqpARc=<ROu7cL5l;-[A]%/"
+    "+fsd;l#SafT/f*W]0=O'$(Tb<[)*@e775R-:Yob%g*>l*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj"
+    "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#<IGe;__.thjZl<%w(Wk2xmp4Q@I#I9,DF]u7-P=.-_:YJ]aS@V"
+    "?6*C()dOp7:WL,b&3Rg/.cmM9&r^>$(>.Z-I&J(Q0Hd5Q%7Co-b`-c<N(6r@ip+AurK<m86QIth*#v;-OBqi+L7wDE-Ir8K['m+DDSLwK&/.?-V%U_%3:qKNu$_b*B-kp7NaD'QdWQPK"
+    "Yq[@>P)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8<FfNkgg^oIbah*#8/Qt$F&:K*-(N/'+1vMB,u()-a.VUU*#[e%gAAO(S>WlA2);Sa"
+    ">gXm8YB`1d@K#n]76-a$U,mF<fX]idqd)<3,]J7JmW4`6]uks=4-72L(jEk+:bJ0M^q-8Dm_Z?0olP1C9Sa&H[d&c$ooQUj]Exd*3ZM@-WGW2%s',B-_M%>%Ul:#/'xoFM9QX-$.QN'>"
+    "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B</R90;eZ]%Ncq;-Tl]#F>2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I"
+    "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1<Vc52=u`3^o-n1'g4v58Hj&6_t7$##?M)c<$bgQ_'SY((-xkA#"
+    "Y(,p'H9rIVY-b,'%bCPF7.J<Up^,(dU1VY*5#WkTU>h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-u<Hp,3@e^9UB1J+ak9-TN/mhKPg+AJYd$"
+    "MlvAF_jCK*.O-^(63adMT->W%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)"
+    "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo"
+    "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P"
+    "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*<h`e-GI7)?OK2A.d7_c)?wQ5AS@DL3r#7fSkgl6-++D:'A,uq7SvlB$pcpH'q3n0#_%dY#xCpr-l<F0NR@-##FEV6NTF6##$l84N1w?AO>'IAO"
+    "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#"
+    ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T<XoIB&hx=T1PcDaB&;HH+-AFr?(m9HZV)FKS8JCw;SD=6[^/DZUL`EUDf]GGlG&>"
+    "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#<xU?#@.i?#D:%@#HF7@#LRI@#P_[@#Tkn@#Xw*A#]-=A#a9OA#"
+    "d<F&#*;G##.GY##2Sl##6`($#:l:$#>xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4&#3^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4"
+    "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#"
+    "/QHC#3^ZC#7jmC#;v)D#?,<D#C8ND#GDaD#KPsD#O]/E#g1A5#KA*1#gC17#MGd;#8(02#L-d3#rWM4#Hga1#,<w0#T.j<#O#'2#CYN1#qa^:#_4m3#o@/=#eG8=#t8J5#`+78#4uI-#"
+    "m3B2#SB[8#Q0@8#i[*9#iOn8#1Nm;#^sN9#qh<9#:=x-#P;K2#$%X9#bC+.#Rg;<#mN=.#MTF.#RZO.#2?)4#Y#(/#[)1/#b;L/#dAU/#0Sv;#lY$0#n`-0#sf60#(F24#wrH0#%/e0#"
+    "TmD<#%JSMFove:CTBEXI:<eh2g)B,3h2^G3i;#d3jD>)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP"
+    "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp"
+    "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#";
+
+static const char* GetDefaultCompressedFontDataTTFBase85()
+{
+    return proggy_clean_ttf_compressed_data_base85;
+}
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imgui_impl_glfw.cpp
@@ -1,0 +1,369 @@
+// dear imgui: Platform Binding for GLFW
+// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..)
+// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.)
+// (Requires: GLFW 3.1+)
+
+// Implemented features:
+//  [X] Platform: Clipboard support.
+//  [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
+//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+).
+//  [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE).
+
+// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
+// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
+// https://github.com/ocornut/imgui
+
+// CHANGELOG
+// (minor and older changes stripped away, please see git history for details)
+//  2020-01-17: Inputs: Disable error callback while assigning mouse cursors because some X11 setup don't have them and it generates errors.
+//  2019-12-05: Inputs: Added support for new mouse cursors added in GLFW 3.4+ (resizing cursors, not allowed cursor).
+//  2019-10-18: Misc: Previously installed user callbacks are now restored on shutdown.
+//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
+//  2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter().
+//  2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized.
+//  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
+//  2018-11-07: Inputs: When installing our GLFW callbacks, we save user's previously installed ones - if any - and chain call them.
+//  2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls.
+//  2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor.
+//  2018-06-08: Misc: Extracted imgui_impl_glfw.cpp/.h away from the old combined GLFW+OpenGL/Vulkan examples.
+//  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag.
+//  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value, passed to glfwSetCursor()).
+//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
+//  2018-02-06: Inputs: Added mapping for ImGuiKey_Space.
+//  2018-01-25: Inputs: Added gamepad support if ImGuiConfigFlags_NavEnableGamepad is set.
+//  2018-01-25: Inputs: Honoring the io.WantSetMousePos by repositioning the mouse (when using navigation and ImGuiConfigFlags_NavMoveMouse is set).
+//  2018-01-20: Inputs: Added Horizontal Mouse Wheel support.
+//  2018-01-18: Inputs: Added mapping for ImGuiKey_Insert.
+//  2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1).
+//  2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers.
+
+#include "imgui.h"
+#include "imgui_impl_glfw.h"
+
+// GLFW
+#include <GLFW/glfw3.h>
+#ifdef _WIN32
+#undef APIENTRY
+#define GLFW_EXPOSE_NATIVE_WIN32
+#include <GLFW/glfw3native.h>   // for glfwGetWin32Window
+#endif
+#define GLFW_HAS_WINDOW_TOPMOST       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ GLFW_FLOATING
+#define GLFW_HAS_WINDOW_HOVERED       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ GLFW_HOVERED
+#define GLFW_HAS_WINDOW_ALPHA         (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity
+#define GLFW_HAS_PER_MONITOR_DPI      (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetMonitorContentScale
+#define GLFW_HAS_VULKAN               (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwCreateWindowSurface
+#ifdef GLFW_RESIZE_NESW_CURSOR  // let's be nice to people who pulled GLFW between 2019-04-16 (3.4 define) and 2019-11-29 (cursors defines) // FIXME: Remove when GLFW 3.4 is released?
+#define GLFW_HAS_NEW_CURSORS          (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3400) // 3.4+ GLFW_RESIZE_ALL_CURSOR, GLFW_RESIZE_NESW_CURSOR, GLFW_RESIZE_NWSE_CURSOR, GLFW_NOT_ALLOWED_CURSOR
+#else
+#define GLFW_HAS_NEW_CURSORS          (0)
+#endif
+
+// Data
+enum GlfwClientApi
+{
+    GlfwClientApi_Unknown,
+    GlfwClientApi_OpenGL,
+    GlfwClientApi_Vulkan
+};
+static GLFWwindow*          g_Window = NULL;    // Main window
+static GlfwClientApi        g_ClientApi = GlfwClientApi_Unknown;
+static double               g_Time = 0.0;
+static bool                 g_MouseJustPressed[5] = { false, false, false, false, false };
+static GLFWcursor*          g_MouseCursors[ImGuiMouseCursor_COUNT] = {};
+static bool                 g_InstalledCallbacks = false;
+
+// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
+static GLFWmousebuttonfun   g_PrevUserCallbackMousebutton = NULL;
+static GLFWscrollfun        g_PrevUserCallbackScroll = NULL;
+static GLFWkeyfun           g_PrevUserCallbackKey = NULL;
+static GLFWcharfun          g_PrevUserCallbackChar = NULL;
+
+static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data)
+{
+    return glfwGetClipboardString((GLFWwindow*)user_data);
+}
+
+static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
+{
+    glfwSetClipboardString((GLFWwindow*)user_data, text);
+}
+
+void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods)
+{
+    if (g_PrevUserCallbackMousebutton != NULL)
+        g_PrevUserCallbackMousebutton(window, button, action, mods);
+
+    if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(g_MouseJustPressed))
+        g_MouseJustPressed[button] = true;
+}
+
+void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset)
+{
+    if (g_PrevUserCallbackScroll != NULL)
+        g_PrevUserCallbackScroll(window, xoffset, yoffset);
+
+    ImGuiIO& io = ImGui::GetIO();
+    io.MouseWheelH += (float)xoffset;
+    io.MouseWheel += (float)yoffset;
+}
+
+void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
+{
+    if (g_PrevUserCallbackKey != NULL)
+        g_PrevUserCallbackKey(window, key, scancode, action, mods);
+
+    ImGuiIO& io = ImGui::GetIO();
+    if (action == GLFW_PRESS)
+        io.KeysDown[key] = true;
+    if (action == GLFW_RELEASE)
+        io.KeysDown[key] = false;
+
+    // Modifiers are not reliable across systems
+    io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL];
+    io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT];
+    io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT];
+#ifdef _WIN32
+    io.KeySuper = false;
+#else
+    io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER];
+#endif
+}
+
+void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c)
+{
+    if (g_PrevUserCallbackChar != NULL)
+        g_PrevUserCallbackChar(window, c);
+
+    ImGuiIO& io = ImGui::GetIO();
+    io.AddInputCharacter(c);
+}
+
+static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, GlfwClientApi client_api)
+{
+    g_Window = window;
+    g_Time = 0.0;
+
+    // Setup back-end capabilities flags
+    ImGuiIO& io = ImGui::GetIO();
+    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;         // We can honor GetMouseCursor() values (optional)
+    io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;          // We can honor io.WantSetMousePos requests (optional, rarely used)
+    io.BackendPlatformName = "imgui_impl_glfw";
+
+    // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array.
+    io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;
+    io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT;
+    io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT;
+    io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP;
+    io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN;
+    io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP;
+    io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN;
+    io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME;
+    io.KeyMap[ImGuiKey_End] = GLFW_KEY_END;
+    io.KeyMap[ImGuiKey_Insert] = GLFW_KEY_INSERT;
+    io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE;
+    io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE;
+    io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE;
+    io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER;
+    io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE;
+    io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER;
+    io.KeyMap[ImGuiKey_A] = GLFW_KEY_A;
+    io.KeyMap[ImGuiKey_C] = GLFW_KEY_C;
+    io.KeyMap[ImGuiKey_V] = GLFW_KEY_V;
+    io.KeyMap[ImGuiKey_X] = GLFW_KEY_X;
+    io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
+    io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
+
+    io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText;
+    io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText;
+    io.ClipboardUserData = g_Window;
+#if defined(_WIN32)
+    io.ImeWindowHandle = (void*)glfwGetWin32Window(g_Window);
+#endif
+
+    // Create mouse cursors
+    // (By design, on X11 cursors are user configurable and some cursors may be missing. When a cursor doesn't exist,
+    // GLFW will emit an error which will often be printed by the app, so we temporarily disable error reporting.
+    // Missing cursors will return NULL and our _UpdateMouseCursor() function will use the Arrow cursor instead.)
+    GLFWerrorfun prev_error_callback = glfwSetErrorCallback(NULL);
+    g_MouseCursors[ImGuiMouseCursor_Arrow] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_TextInput] = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeNS] = glfwCreateStandardCursor(GLFW_VRESIZE_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeEW] = glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_Hand] = glfwCreateStandardCursor(GLFW_HAND_CURSOR);
+#if GLFW_HAS_NEW_CURSORS
+    g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_RESIZE_ALL_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_RESIZE_NESW_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_NOT_ALLOWED_CURSOR);
+#else
+    g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
+    g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
+#endif
+    glfwSetErrorCallback(prev_error_callback);
+
+    // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
+    g_PrevUserCallbackMousebutton = NULL;
+    g_PrevUserCallbackScroll = NULL;
+    g_PrevUserCallbackKey = NULL;
+    g_PrevUserCallbackChar = NULL;
+    if (install_callbacks)
+    {
+        g_InstalledCallbacks = true;
+        g_PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback);
+        g_PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback);
+        g_PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback);
+        g_PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback);
+    }
+
+    g_ClientApi = client_api;
+    return true;
+}
+
+bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks)
+{
+    return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_OpenGL);
+}
+
+bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks)
+{
+    return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Vulkan);
+}
+
+void ImGui_ImplGlfw_Shutdown()
+{
+    if (g_InstalledCallbacks)
+    {
+        glfwSetMouseButtonCallback(g_Window, g_PrevUserCallbackMousebutton);
+        glfwSetScrollCallback(g_Window, g_PrevUserCallbackScroll);
+        glfwSetKeyCallback(g_Window, g_PrevUserCallbackKey);
+        glfwSetCharCallback(g_Window, g_PrevUserCallbackChar);
+        g_InstalledCallbacks = false;
+    }
+
+    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
+    {
+        glfwDestroyCursor(g_MouseCursors[cursor_n]);
+        g_MouseCursors[cursor_n] = NULL;
+    }
+    g_ClientApi = GlfwClientApi_Unknown;
+}
+
+static void ImGui_ImplGlfw_UpdateMousePosAndButtons()
+{
+    // Update buttons
+    ImGuiIO& io = ImGui::GetIO();
+    for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++)
+    {
+        // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
+        io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0;
+        g_MouseJustPressed[i] = false;
+    }
+
+    // Update mouse position
+    const ImVec2 mouse_pos_backup = io.MousePos;
+    io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
+#ifdef __EMSCRIPTEN__
+    const bool focused = true; // Emscripten
+#else
+    const bool focused = glfwGetWindowAttrib(g_Window, GLFW_FOCUSED) != 0;
+#endif
+    if (focused)
+    {
+        if (io.WantSetMousePos)
+        {
+            glfwSetCursorPos(g_Window, (double)mouse_pos_backup.x, (double)mouse_pos_backup.y);
+        }
+        else
+        {
+            double mouse_x, mouse_y;
+            glfwGetCursorPos(g_Window, &mouse_x, &mouse_y);
+            io.MousePos = ImVec2((float)mouse_x, (float)mouse_y);
+        }
+    }
+}
+
+static void ImGui_ImplGlfw_UpdateMouseCursor()
+{
+    ImGuiIO& io = ImGui::GetIO();
+    if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(g_Window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED)
+        return;
+
+    ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
+    if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor)
+    {
+        // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
+        glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
+    }
+    else
+    {
+        // Show OS mouse cursor
+        // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here.
+        glfwSetCursor(g_Window, g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]);
+        glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
+    }
+}
+
+static void ImGui_ImplGlfw_UpdateGamepads()
+{
+    ImGuiIO& io = ImGui::GetIO();
+    memset(io.NavInputs, 0, sizeof(io.NavInputs));
+    if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0)
+        return;
+
+    // Update gamepad inputs
+    #define MAP_BUTTON(NAV_NO, BUTTON_NO)       { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; }
+    #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; }
+    int axes_count = 0, buttons_count = 0;
+    const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count);
+    const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count);
+    MAP_BUTTON(ImGuiNavInput_Activate,   0);     // Cross / A
+    MAP_BUTTON(ImGuiNavInput_Cancel,     1);     // Circle / B
+    MAP_BUTTON(ImGuiNavInput_Menu,       2);     // Square / X
+    MAP_BUTTON(ImGuiNavInput_Input,      3);     // Triangle / Y
+    MAP_BUTTON(ImGuiNavInput_DpadLeft,   13);    // D-Pad Left
+    MAP_BUTTON(ImGuiNavInput_DpadRight,  11);    // D-Pad Right
+    MAP_BUTTON(ImGuiNavInput_DpadUp,     10);    // D-Pad Up
+    MAP_BUTTON(ImGuiNavInput_DpadDown,   12);    // D-Pad Down
+    MAP_BUTTON(ImGuiNavInput_FocusPrev,  4);     // L1 / LB
+    MAP_BUTTON(ImGuiNavInput_FocusNext,  5);     // R1 / RB
+    MAP_BUTTON(ImGuiNavInput_TweakSlow,  4);     // L1 / LB
+    MAP_BUTTON(ImGuiNavInput_TweakFast,  5);     // R1 / RB
+    MAP_ANALOG(ImGuiNavInput_LStickLeft, 0,  -0.3f,  -0.9f);
+    MAP_ANALOG(ImGuiNavInput_LStickRight,0,  +0.3f,  +0.9f);
+    MAP_ANALOG(ImGuiNavInput_LStickUp,   1,  +0.3f,  +0.9f);
+    MAP_ANALOG(ImGuiNavInput_LStickDown, 1,  -0.3f,  -0.9f);
+    #undef MAP_BUTTON
+    #undef MAP_ANALOG
+    if (axes_count > 0 && buttons_count > 0)
+        io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
+    else
+        io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad;
+}
+
+void ImGui_ImplGlfw_NewFrame()
+{
+    ImGuiIO& io = ImGui::GetIO();
+    IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame().");
+
+    // Setup display size (every frame to accommodate for window resizing)
+    int w, h;
+    int display_w, display_h;
+    glfwGetWindowSize(g_Window, &w, &h);
+    glfwGetFramebufferSize(g_Window, &display_w, &display_h);
+    io.DisplaySize = ImVec2((float)w, (float)h);
+    if (w > 0 && h > 0)
+        io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h);
+
+    // Setup time step
+    double current_time = glfwGetTime();
+    io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f);
+    g_Time = current_time;
+
+    ImGui_ImplGlfw_UpdateMousePosAndButtons();
+    ImGui_ImplGlfw_UpdateMouseCursor();
+
+    // Update game controllers (if enabled and available)
+    ImGui_ImplGlfw_UpdateGamepads();
+}
--- /dev/null
+++ b/DoConfig/imgui/imgui_impl_glfw.h
@@ -1,0 +1,34 @@
+// dear imgui: Platform Binding for GLFW
+// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..)
+// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.)
+
+// Implemented features:
+//  [X] Platform: Clipboard support.
+//  [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
+//  [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: 3 cursors types are missing from GLFW.
+//  [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE).
+
+// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
+// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
+// https://github.com/ocornut/imgui
+
+// About GLSL version:
+// The 'glsl_version' initialization parameter defaults to "#version 150" if NULL.
+// Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure!
+
+#pragma once
+
+struct GLFWwindow;
+
+IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks);
+IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks);
+IMGUI_IMPL_API void     ImGui_ImplGlfw_Shutdown();
+IMGUI_IMPL_API void     ImGui_ImplGlfw_NewFrame();
+
+// GLFW callbacks
+// - When calling Init with 'install_callbacks=true': GLFW callbacks will be installed for you. They will call user's previously installed callbacks, if any.
+// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call those function yourself from your own GLFW callbacks.
+IMGUI_IMPL_API void     ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods);
+IMGUI_IMPL_API void     ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset);
+IMGUI_IMPL_API void     ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
+IMGUI_IMPL_API void     ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c);
--- /dev/null
+++ b/DoConfig/imgui/imgui_impl_opengl3.cpp
@@ -1,0 +1,687 @@
+// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline
+// - Desktop GL: 2.x 3.x 4.x
+// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
+// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
+
+// Implemented features:
+//  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
+//  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
+
+// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
+// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
+// https://github.com/ocornut/imgui
+
+// CHANGELOG
+// (minor and older changes stripped away, please see git history for details)
+//  2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader.
+//  2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader.
+//  2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders.
+//  2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility.
+//  2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call.
+//  2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag.
+//  2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
+//  2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop.
+//  2019-03-15: OpenGL: Added a dummy GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early.
+//  2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0).
+//  2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader.
+//  2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display.
+//  2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450).
+//  2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
+//  2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN.
+//  2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used.
+//  2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES".
+//  2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation.
+//  2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link.
+//  2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples.
+//  2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
+//  2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state.
+//  2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer.
+//  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150".
+//  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context.
+//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself.
+//  2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150.
+//  2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode.
+//  2017-05-01: OpenGL: Fixed save and restore of current blend func state.
+//  2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE.
+//  2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle.
+//  2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752)
+
+//----------------------------------------
+// OpenGL    GLSL      GLSL
+// version   version   string
+//----------------------------------------
+//  2.0       110       "#version 110"
+//  2.1       120       "#version 120"
+//  3.0       130       "#version 130"
+//  3.1       140       "#version 140"
+//  3.2       150       "#version 150"
+//  3.3       330       "#version 330 core"
+//  4.0       400       "#version 400 core"
+//  4.1       410       "#version 410 core"
+//  4.2       420       "#version 410 core"
+//  4.3       430       "#version 430 core"
+//  ES 2.0    100       "#version 100"      = WebGL 1.0
+//  ES 3.0    300       "#version 300 es"   = WebGL 2.0
+//----------------------------------------
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#include "imgui_impl_opengl3.h"
+#include <stdio.h>
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h>     // intptr_t
+#else
+#include <stdint.h>     // intptr_t
+#endif
+#if defined(__APPLE__)
+#include "TargetConditionals.h"
+#endif
+
+// Auto-enable GLES on matching platforms
+#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3)
+#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__))
+#define IMGUI_IMPL_OPENGL_ES3           // iOS, Android  -> GL ES 3, "#version 300 es"
+#elif defined(__EMSCRIPTEN__)
+#define IMGUI_IMPL_OPENGL_ES2           // Emscripten    -> GL ES 2, "#version 100"
+#endif
+#endif
+
+#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3)
+#undef IMGUI_IMPL_OPENGL_LOADER_GL3W
+#undef IMGUI_IMPL_OPENGL_LOADER_GLEW
+#undef IMGUI_IMPL_OPENGL_LOADER_GLAD
+#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
+#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
+#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM
+#endif
+
+// GL includes
+#if defined(IMGUI_IMPL_OPENGL_ES2)
+#include <GLES2/gl2.h>
+#elif defined(IMGUI_IMPL_OPENGL_ES3)
+#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV))
+#include <OpenGLES/ES3/gl.h>    // Use GL ES 3
+#else
+#include <GLES3/gl3.h>          // Use GL ES 3
+#endif
+#else
+// About Desktop OpenGL function loaders:
+//  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
+//  Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad).
+//  You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own.
+#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)
+#include <GL/gl3w.h>            // Needs to be initialized with gl3wInit() in user's code
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)
+#include <GL/glew.h>            // Needs to be initialized with glewInit() in user's code.
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
+#include <glad/glad.h>          // Needs to be initialized with gladLoadGL() in user's code.
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
+#define GLFW_INCLUDE_NONE       // GLFW including OpenGL headers causes ambiguity or multiple definition errors.
+#include <glbinding/Binding.h>  // Needs to be initialized with glbinding::Binding::initialize() in user's code.
+#include <glbinding/gl/gl.h>
+using namespace gl;
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
+#define GLFW_INCLUDE_NONE       // GLFW including OpenGL headers causes ambiguity or multiple definition errors.
+#include <glbinding/glbinding.h>// Needs to be initialized with glbinding::initialize() in user's code.
+#include <glbinding/gl/gl.h>
+using namespace gl;
+#else
+#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM
+#endif
+#endif
+
+// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have.
+#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) || !defined(GL_VERSION_3_2)
+#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET   0
+#else
+#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET   1
+#endif
+
+// OpenGL Data
+static GLuint       g_GlVersion = 0;                // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries.
+static char         g_GlslVersionString[32] = "";   // Specified by user or detected based on compile time GL settings.
+static GLuint       g_FontTexture = 0;
+static GLuint       g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0;
+static int          g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0;                                // Uniforms location
+static int          g_AttribLocationVtxPos = 0, g_AttribLocationVtxUV = 0, g_AttribLocationVtxColor = 0; // Vertex attributes location
+static unsigned int g_VboHandle = 0, g_ElementsHandle = 0;
+
+// Functions
+bool    ImGui_ImplOpenGL3_Init(const char* glsl_version)
+{
+    // Query for GL version
+#if !defined(IMGUI_IMPL_OPENGL_ES2)
+    GLint major, minor;
+    glGetIntegerv(GL_MAJOR_VERSION, &major);
+    glGetIntegerv(GL_MINOR_VERSION, &minor);
+    g_GlVersion = major * 1000 + minor;
+#else
+    g_GlVersion = 2000; // GLES 2
+#endif
+
+    // Setup back-end capabilities flags
+    ImGuiIO& io = ImGui::GetIO();
+    io.BackendRendererName = "imgui_impl_opengl3";
+#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
+    if (g_GlVersion >= 3200)
+        io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset;  // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
+#endif
+
+    // Store GLSL version string so we can refer to it later in case we recreate shaders.
+    // Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure.
+#if defined(IMGUI_IMPL_OPENGL_ES2)
+    if (glsl_version == NULL)
+        glsl_version = "#version 100";
+#elif defined(IMGUI_IMPL_OPENGL_ES3)
+    if (glsl_version == NULL)
+        glsl_version = "#version 300 es";
+#else
+    if (glsl_version == NULL)
+        glsl_version = "#version 130";
+#endif
+    IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(g_GlslVersionString));
+    strcpy(g_GlslVersionString, glsl_version);
+    strcat(g_GlslVersionString, "\n");
+
+    // Dummy construct to make it easily visible in the IDE and debugger which GL loader has been selected.
+    // The code actually never uses the 'gl_loader' variable! It is only here so you can read it!
+    // If auto-detection fails or doesn't select the same GL loader file as used by your application,
+    // you are likely to get a crash below.
+    // You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
+    const char* gl_loader = "Unknown";
+    IM_UNUSED(gl_loader);
+#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)
+    gl_loader = "GL3W";
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)
+    gl_loader = "GLEW";
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
+    gl_loader = "GLAD";
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
+    gl_loader = "glbinding2";
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
+    gl_loader = "glbinding3";
+#elif defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
+    gl_loader = "custom";
+#else
+    gl_loader = "none";
+#endif
+
+    // Make a dummy GL call (we don't actually need the result)
+    // IF YOU GET A CRASH HERE: it probably means that you haven't initialized the OpenGL function loader used by this code.
+    // Desktop OpenGL 3/4 need a function loader. See the IMGUI_IMPL_OPENGL_LOADER_xxx explanation above.
+    GLint current_texture;
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &current_texture);
+
+    return true;
+}
+
+void    ImGui_ImplOpenGL3_Shutdown()
+{
+    ImGui_ImplOpenGL3_DestroyDeviceObjects();
+}
+
+void    ImGui_ImplOpenGL3_NewFrame()
+{
+    if (!g_ShaderHandle)
+        ImGui_ImplOpenGL3_CreateDeviceObjects();
+}
+
+static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object)
+{
+    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
+    glEnable(GL_BLEND);
+    glBlendEquation(GL_FUNC_ADD);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glDisable(GL_CULL_FACE);
+    glDisable(GL_DEPTH_TEST);
+    glEnable(GL_SCISSOR_TEST);
+#ifdef GL_POLYGON_MODE
+    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+#endif
+
+    // Setup viewport, orthographic projection matrix
+    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps.
+    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
+    float L = draw_data->DisplayPos.x;
+    float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x;
+    float T = draw_data->DisplayPos.y;
+    float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y;
+    const float ortho_projection[4][4] =
+    {
+        { 2.0f/(R-L),   0.0f,         0.0f,   0.0f },
+        { 0.0f,         2.0f/(T-B),   0.0f,   0.0f },
+        { 0.0f,         0.0f,        -1.0f,   0.0f },
+        { (R+L)/(L-R),  (T+B)/(B-T),  0.0f,   1.0f },
+    };
+    glUseProgram(g_ShaderHandle);
+    glUniform1i(g_AttribLocationTex, 0);
+    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
+#ifdef GL_SAMPLER_BINDING
+    glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise.
+#endif
+
+    (void)vertex_array_object;
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    glBindVertexArray(vertex_array_object);
+#endif
+
+    // Bind vertex/index buffers and setup attributes for ImDrawVert
+    glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle);
+    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle);
+    glEnableVertexAttribArray(g_AttribLocationVtxPos);
+    glEnableVertexAttribArray(g_AttribLocationVtxUV);
+    glEnableVertexAttribArray(g_AttribLocationVtxColor);
+    glVertexAttribPointer(g_AttribLocationVtxPos,   2, GL_FLOAT,         GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos));
+    glVertexAttribPointer(g_AttribLocationVtxUV,    2, GL_FLOAT,         GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv));
+    glVertexAttribPointer(g_AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE,  sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col));
+}
+
+// OpenGL3 Render function.
+// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop)
+// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so.
+void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
+{
+    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
+    int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x);
+    int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y);
+    if (fb_width <= 0 || fb_height <= 0)
+        return;
+
+    // Backup GL state
+    GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture);
+    glActiveTexture(GL_TEXTURE0);
+    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
+    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
+#ifdef GL_SAMPLER_BINDING
+    GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
+#endif
+    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    GLint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array_object);
+#endif
+#ifdef GL_POLYGON_MODE
+    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
+#endif
+    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
+    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
+    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
+    GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb);
+    GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha);
+    GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha);
+    GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb);
+    GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha);
+    GLboolean last_enable_blend = glIsEnabled(GL_BLEND);
+    GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE);
+    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
+    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
+    bool clip_origin_lower_left = true;
+#if defined(GL_CLIP_ORIGIN) && !defined(__APPLE__)
+    GLenum last_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&last_clip_origin); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT)
+    if (last_clip_origin == GL_UPPER_LEFT)
+        clip_origin_lower_left = false;
+#endif
+
+    // Setup desired GL state
+    // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts)
+    // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound.
+    GLuint vertex_array_object = 0;
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    glGenVertexArrays(1, &vertex_array_object);
+#endif
+    ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
+
+    // Will project scissor/clipping rectangles into framebuffer space
+    ImVec2 clip_off = draw_data->DisplayPos;         // (0,0) unless using multi-viewports
+    ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2)
+
+    // Render command lists
+    for (int n = 0; n < draw_data->CmdListsCount; n++)
+    {
+        const ImDrawList* cmd_list = draw_data->CmdLists[n];
+
+        // Upload vertex/index buffers
+        glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW);
+        glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW);
+
+        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+        {
+            const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
+            if (pcmd->UserCallback != NULL)
+            {
+                // User callback, registered via ImDrawList::AddCallback()
+                // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
+                if (pcmd->UserCallback == ImDrawCallback_ResetRenderState)
+                    ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
+                else
+                    pcmd->UserCallback(cmd_list, pcmd);
+            }
+            else
+            {
+                // Project scissor/clipping rectangles into framebuffer space
+                ImVec4 clip_rect;
+                clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x;
+                clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y;
+                clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x;
+                clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y;
+
+                if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
+                {
+                    // Apply scissor/clipping rectangle
+                    if (clip_origin_lower_left)
+                        glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y));
+                    else
+                        glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT)
+
+                    // Bind texture, Draw
+                    glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId);
+#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
+                    if (g_GlVersion >= 3200)
+                        glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset);
+                    else
+#endif
+                    glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)));
+                }
+            }
+        }
+    }
+
+    // Destroy the temporary VAO
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    glDeleteVertexArrays(1, &vertex_array_object);
+#endif
+
+    // Restore modified GL state
+    glUseProgram(last_program);
+    glBindTexture(GL_TEXTURE_2D, last_texture);
+#ifdef GL_SAMPLER_BINDING
+    glBindSampler(0, last_sampler);
+#endif
+    glActiveTexture(last_active_texture);
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    glBindVertexArray(last_vertex_array_object);
+#endif
+    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
+    glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha);
+    glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha);
+    if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND);
+    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
+    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
+    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
+#ifdef GL_POLYGON_MODE
+    glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]);
+#endif
+    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
+    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
+}
+
+bool ImGui_ImplOpenGL3_CreateFontsTexture()
+{
+    // Build texture atlas
+    ImGuiIO& io = ImGui::GetIO();
+    unsigned char* pixels;
+    int width, height;
+    io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);   // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.
+
+    // Upload texture to graphics system
+    GLint last_texture;
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
+    glGenTextures(1, &g_FontTexture);
+    glBindTexture(GL_TEXTURE_2D, g_FontTexture);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+#ifdef GL_UNPACK_ROW_LENGTH
+    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+#endif
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
+
+    // Store our identifier
+    io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture;
+
+    // Restore state
+    glBindTexture(GL_TEXTURE_2D, last_texture);
+
+    return true;
+}
+
+void ImGui_ImplOpenGL3_DestroyFontsTexture()
+{
+    if (g_FontTexture)
+    {
+        ImGuiIO& io = ImGui::GetIO();
+        glDeleteTextures(1, &g_FontTexture);
+        io.Fonts->TexID = 0;
+        g_FontTexture = 0;
+    }
+}
+
+// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file.
+static bool CheckShader(GLuint handle, const char* desc)
+{
+    GLint status = 0, log_length = 0;
+    glGetShaderiv(handle, GL_COMPILE_STATUS, &status);
+    glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length);
+    if ((GLboolean)status == GL_FALSE)
+        fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s!\n", desc);
+    if (log_length > 1)
+    {
+        ImVector<char> buf;
+        buf.resize((int)(log_length + 1));
+        glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
+        fprintf(stderr, "%s\n", buf.begin());
+    }
+    return (GLboolean)status == GL_TRUE;
+}
+
+// If you get an error please report on GitHub. You may try different GL context version or GLSL version.
+static bool CheckProgram(GLuint handle, const char* desc)
+{
+    GLint status = 0, log_length = 0;
+    glGetProgramiv(handle, GL_LINK_STATUS, &status);
+    glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length);
+    if ((GLboolean)status == GL_FALSE)
+        fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! (with GLSL '%s')\n", desc, g_GlslVersionString);
+    if (log_length > 1)
+    {
+        ImVector<char> buf;
+        buf.resize((int)(log_length + 1));
+        glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
+        fprintf(stderr, "%s\n", buf.begin());
+    }
+    return (GLboolean)status == GL_TRUE;
+}
+
+bool    ImGui_ImplOpenGL3_CreateDeviceObjects()
+{
+    // Backup GL state
+    GLint last_texture, last_array_buffer;
+    glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
+    glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    GLint last_vertex_array;
+    glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
+#endif
+
+    // Parse GLSL version string
+    int glsl_version = 130;
+    sscanf(g_GlslVersionString, "#version %d", &glsl_version);
+
+    const GLchar* vertex_shader_glsl_120 =
+        "uniform mat4 ProjMtx;\n"
+        "attribute vec2 Position;\n"
+        "attribute vec2 UV;\n"
+        "attribute vec4 Color;\n"
+        "varying vec2 Frag_UV;\n"
+        "varying vec4 Frag_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Frag_UV = UV;\n"
+        "    Frag_Color = Color;\n"
+        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
+        "}\n";
+
+    const GLchar* vertex_shader_glsl_130 =
+        "uniform mat4 ProjMtx;\n"
+        "in vec2 Position;\n"
+        "in vec2 UV;\n"
+        "in vec4 Color;\n"
+        "out vec2 Frag_UV;\n"
+        "out vec4 Frag_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Frag_UV = UV;\n"
+        "    Frag_Color = Color;\n"
+        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
+        "}\n";
+
+    const GLchar* vertex_shader_glsl_300_es =
+        "precision mediump float;\n"
+        "layout (location = 0) in vec2 Position;\n"
+        "layout (location = 1) in vec2 UV;\n"
+        "layout (location = 2) in vec4 Color;\n"
+        "uniform mat4 ProjMtx;\n"
+        "out vec2 Frag_UV;\n"
+        "out vec4 Frag_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Frag_UV = UV;\n"
+        "    Frag_Color = Color;\n"
+        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
+        "}\n";
+
+    const GLchar* vertex_shader_glsl_410_core =
+        "layout (location = 0) in vec2 Position;\n"
+        "layout (location = 1) in vec2 UV;\n"
+        "layout (location = 2) in vec4 Color;\n"
+        "uniform mat4 ProjMtx;\n"
+        "out vec2 Frag_UV;\n"
+        "out vec4 Frag_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Frag_UV = UV;\n"
+        "    Frag_Color = Color;\n"
+        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
+        "}\n";
+
+    const GLchar* fragment_shader_glsl_120 =
+        "#ifdef GL_ES\n"
+        "    precision mediump float;\n"
+        "#endif\n"
+        "uniform sampler2D Texture;\n"
+        "varying vec2 Frag_UV;\n"
+        "varying vec4 Frag_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n"
+        "}\n";
+
+    const GLchar* fragment_shader_glsl_130 =
+        "uniform sampler2D Texture;\n"
+        "in vec2 Frag_UV;\n"
+        "in vec4 Frag_Color;\n"
+        "out vec4 Out_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
+        "}\n";
+
+    const GLchar* fragment_shader_glsl_300_es =
+        "precision mediump float;\n"
+        "uniform sampler2D Texture;\n"
+        "in vec2 Frag_UV;\n"
+        "in vec4 Frag_Color;\n"
+        "layout (location = 0) out vec4 Out_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
+        "}\n";
+
+    const GLchar* fragment_shader_glsl_410_core =
+        "in vec2 Frag_UV;\n"
+        "in vec4 Frag_Color;\n"
+        "uniform sampler2D Texture;\n"
+        "layout (location = 0) out vec4 Out_Color;\n"
+        "void main()\n"
+        "{\n"
+        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
+        "}\n";
+
+    // Select shaders matching our GLSL versions
+    const GLchar* vertex_shader = NULL;
+    const GLchar* fragment_shader = NULL;
+    if (glsl_version < 130)
+    {
+        vertex_shader = vertex_shader_glsl_120;
+        fragment_shader = fragment_shader_glsl_120;
+    }
+    else if (glsl_version >= 410)
+    {
+        vertex_shader = vertex_shader_glsl_410_core;
+        fragment_shader = fragment_shader_glsl_410_core;
+    }
+    else if (glsl_version == 300)
+    {
+        vertex_shader = vertex_shader_glsl_300_es;
+        fragment_shader = fragment_shader_glsl_300_es;
+    }
+    else
+    {
+        vertex_shader = vertex_shader_glsl_130;
+        fragment_shader = fragment_shader_glsl_130;
+    }
+
+    // Create shaders
+    const GLchar* vertex_shader_with_version[2] = { g_GlslVersionString, vertex_shader };
+    g_VertHandle = glCreateShader(GL_VERTEX_SHADER);
+    glShaderSource(g_VertHandle, 2, vertex_shader_with_version, NULL);
+    glCompileShader(g_VertHandle);
+    CheckShader(g_VertHandle, "vertex shader");
+
+    const GLchar* fragment_shader_with_version[2] = { g_GlslVersionString, fragment_shader };
+    g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER);
+    glShaderSource(g_FragHandle, 2, fragment_shader_with_version, NULL);
+    glCompileShader(g_FragHandle);
+    CheckShader(g_FragHandle, "fragment shader");
+
+    g_ShaderHandle = glCreateProgram();
+    glAttachShader(g_ShaderHandle, g_VertHandle);
+    glAttachShader(g_ShaderHandle, g_FragHandle);
+    glLinkProgram(g_ShaderHandle);
+    CheckProgram(g_ShaderHandle, "shader program");
+
+    g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture");
+    g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx");
+    g_AttribLocationVtxPos = glGetAttribLocation(g_ShaderHandle, "Position");
+    g_AttribLocationVtxUV = glGetAttribLocation(g_ShaderHandle, "UV");
+    g_AttribLocationVtxColor = glGetAttribLocation(g_ShaderHandle, "Color");
+
+    // Create buffers
+    glGenBuffers(1, &g_VboHandle);
+    glGenBuffers(1, &g_ElementsHandle);
+
+    ImGui_ImplOpenGL3_CreateFontsTexture();
+
+    // Restore modified GL state
+    glBindTexture(GL_TEXTURE_2D, last_texture);
+    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
+#ifndef IMGUI_IMPL_OPENGL_ES2
+    glBindVertexArray(last_vertex_array);
+#endif
+
+    return true;
+}
+
+void    ImGui_ImplOpenGL3_DestroyDeviceObjects()
+{
+    if (g_VboHandle)        { glDeleteBuffers(1, &g_VboHandle); g_VboHandle = 0; }
+    if (g_ElementsHandle)   { glDeleteBuffers(1, &g_ElementsHandle); g_ElementsHandle = 0; }
+    if (g_ShaderHandle && g_VertHandle) { glDetachShader(g_ShaderHandle, g_VertHandle); }
+    if (g_ShaderHandle && g_FragHandle) { glDetachShader(g_ShaderHandle, g_FragHandle); }
+    if (g_VertHandle)       { glDeleteShader(g_VertHandle); g_VertHandle = 0; }
+    if (g_FragHandle)       { glDeleteShader(g_FragHandle); g_FragHandle = 0; }
+    if (g_ShaderHandle)     { glDeleteProgram(g_ShaderHandle); g_ShaderHandle = 0; }
+
+    ImGui_ImplOpenGL3_DestroyFontsTexture();
+}
--- /dev/null
+++ b/DoConfig/imgui/imgui_impl_opengl3.h
@@ -1,0 +1,70 @@
+// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline
+// - Desktop GL: 2.x 3.x 4.x
+// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
+// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
+
+// Implemented features:
+//  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
+//  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
+
+// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
+// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
+// https://github.com/ocornut/imgui
+
+// About Desktop OpenGL function loaders:
+//  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
+//  Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad).
+//  You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own.
+
+// About GLSL version:
+//  The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string.
+//  On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es"
+//  Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp.
+
+#pragma once
+
+// Backend API
+IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL);
+IMGUI_IMPL_API void     ImGui_ImplOpenGL3_Shutdown();
+IMGUI_IMPL_API void     ImGui_ImplOpenGL3_NewFrame();
+IMGUI_IMPL_API void     ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data);
+
+// (Optional) Called by Init/NewFrame/Shutdown
+IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_CreateFontsTexture();
+IMGUI_IMPL_API void     ImGui_ImplOpenGL3_DestroyFontsTexture();
+IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_CreateDeviceObjects();
+IMGUI_IMPL_API void     ImGui_ImplOpenGL3_DestroyDeviceObjects();
+
+// Specific OpenGL versions
+//#define IMGUI_IMPL_OPENGL_ES2     // Auto-detected on Emscripten
+//#define IMGUI_IMPL_OPENGL_ES3     // Auto-detected on iOS/Android
+
+// Desktop OpenGL: attempt to detect default GL loader based on available header files.
+// If auto-detection fails or doesn't select the same GL loader file as used by your application,
+// you are likely to get a crash in ImGui_ImplOpenGL3_Init().
+// You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
+#if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) \
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) \
+ && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
+    #if defined(__has_include)
+        #if __has_include(<GL/glew.h>)
+            #define IMGUI_IMPL_OPENGL_LOADER_GLEW
+        #elif __has_include(<glad/glad.h>)
+            #define IMGUI_IMPL_OPENGL_LOADER_GLAD
+        #elif __has_include(<GL/gl3w.h>)
+            #define IMGUI_IMPL_OPENGL_LOADER_GL3W
+        #elif __has_include(<glbinding/glbinding.h>)
+            #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
+        #elif __has_include(<glbinding/Binding.h>)
+            #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
+        #else
+            #error "Cannot detect OpenGL loader!"
+        #endif
+    #else
+        #define IMGUI_IMPL_OPENGL_LOADER_GL3W       // Default to GL3W
+    #endif
+#endif
+
--- /dev/null
+++ b/DoConfig/imgui/imgui_internal.h
@@ -1,0 +1,2252 @@
+// dear imgui, v1.76 WIP
+// (internal structures/api)
+
+// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
+// Set:
+//   #define IMGUI_DEFINE_MATH_OPERATORS
+// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
+
+/*
+
+Index of this file:
+// Header mess
+// Forward declarations
+// STB libraries includes
+// Context pointer
+// Generic helpers
+// Misc data structures
+// Main imgui context
+// Tab bar, tab item
+// Internal API
+
+*/
+
+#pragma once
+#ifndef IMGUI_DISABLE
+
+//-----------------------------------------------------------------------------
+// Header mess
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_VERSION
+#error Must include imgui.h before imgui_internal.h
+#endif
+
+#include <stdio.h>      // FILE*, sscanf
+#include <stdlib.h>     // NULL, malloc, free, qsort, atoi, atof
+#include <math.h>       // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
+#include <limits.h>     // INT_MIN, INT_MAX
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport)
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"        // for stb_textedit.h
+#pragma clang diagnostic ignored "-Wmissing-prototypes"     // for stb_textedit.h
+#pragma clang diagnostic ignored "-Wold-style-cast"
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+// Legacy defines
+#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS                // Renamed in 1.74
+#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+#endif
+#ifdef IMGUI_DISABLE_MATH_FUNCTIONS                         // Renamed in 1.74
+#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+#endif
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+
+struct ImBitVector;                 // Store 1-bit per value
+struct ImRect;                      // An axis-aligned rectangle (2 points)
+struct ImDrawDataBuilder;           // Helper to build a ImDrawData instance
+struct ImDrawListSharedData;        // Data shared between all ImDrawList instances
+struct ImGuiColorMod;               // Stacked color modifier, backup of modified data so we can restore it
+struct ImGuiColumnData;             // Storage data for a single column
+struct ImGuiColumns;                // Storage data for a columns set
+struct ImGuiContext;                // Main Dear ImGui context
+struct ImGuiDataTypeInfo;           // Type information associated to a ImGuiDataType enum
+struct ImGuiGroupData;              // Stacked storage data for BeginGroup()/EndGroup()
+struct ImGuiInputTextState;         // Internal state of the currently focused/edited text input box
+struct ImGuiItemHoveredDataBackup;  // Backup and restore IsItemHovered() internal data
+struct ImGuiMenuColumns;            // Simple column measurement, currently used for MenuItem() only
+struct ImGuiNavMoveResult;          // Result of a directional navigation move query result
+struct ImGuiNextWindowData;         // Storage for SetNextWindow** functions
+struct ImGuiNextItemData;           // Storage for SetNextItem** functions
+struct ImGuiPopupData;              // Storage for current popup stack
+struct ImGuiSettingsHandler;        // Storage for one type registered in the .ini file
+struct ImGuiStyleMod;               // Stacked style modifier, backup of modified data so we can restore it
+struct ImGuiTabBar;                 // Storage for a tab bar
+struct ImGuiTabItem;                // Storage for a tab item (within a tab bar)
+struct ImGuiTable;                  // Storage for a table
+struct ImGuiTableColumn;            // Storage for one column of a table
+struct ImGuiTableSettings;          // Storage for a table .ini settings
+struct ImGuiTableColumnsSettings;   // Storage for a column .ini settings
+struct ImGuiWindow;                 // Storage for one window
+struct ImGuiWindowTempData;         // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame)
+struct ImGuiWindowSettings;         // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
+
+// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
+typedef int ImGuiLayoutType;            // -> enum ImGuiLayoutType_         // Enum: Horizontal or vertical
+typedef int ImGuiButtonFlags;           // -> enum ImGuiButtonFlags_        // Flags: for ButtonEx(), ButtonBehavior()
+typedef int ImGuiColumnsFlags;          // -> enum ImGuiColumnsFlags_       // Flags: BeginColumns()
+typedef int ImGuiDragFlags;             // -> enum ImGuiDragFlags_          // Flags: for DragBehavior()
+typedef int ImGuiItemFlags;             // -> enum ImGuiItemFlags_          // Flags: for PushItemFlag()
+typedef int ImGuiItemStatusFlags;       // -> enum ImGuiItemStatusFlags_    // Flags: for DC.LastItemStatusFlags
+typedef int ImGuiNavHighlightFlags;     // -> enum ImGuiNavHighlightFlags_  // Flags: for RenderNavHighlight()
+typedef int ImGuiNavDirSourceFlags;     // -> enum ImGuiNavDirSourceFlags_  // Flags: for GetNavInputAmount2d()
+typedef int ImGuiNavMoveFlags;          // -> enum ImGuiNavMoveFlags_       // Flags: for navigation requests
+typedef int ImGuiNextItemDataFlags;     // -> enum ImGuiNextItemDataFlags_  // Flags: for SetNextItemXXX() functions
+typedef int ImGuiNextWindowDataFlags;   // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
+typedef int ImGuiSeparatorFlags;        // -> enum ImGuiSeparatorFlags_     // Flags: for SeparatorEx()
+typedef int ImGuiSliderFlags;           // -> enum ImGuiSliderFlags_        // Flags: for SliderBehavior()
+typedef int ImGuiTextFlags;             // -> enum ImGuiTextFlags_          // Flags: for TextEx()
+typedef int ImGuiTooltipFlags;          // -> enum ImGuiTooltipFlags_       // Flags: for BeginTooltipEx()
+
+//-------------------------------------------------------------------------
+// STB libraries includes
+//-------------------------------------------------------------------------
+
+namespace ImStb
+{
+
+#undef STB_TEXTEDIT_STRING
+#undef STB_TEXTEDIT_CHARTYPE
+#define STB_TEXTEDIT_STRING             ImGuiInputTextState
+#define STB_TEXTEDIT_CHARTYPE           ImWchar
+#define STB_TEXTEDIT_GETWIDTH_NEWLINE   -1.0f
+#define STB_TEXTEDIT_UNDOSTATECOUNT     99
+#define STB_TEXTEDIT_UNDOCHARCOUNT      999
+#include "imstb_textedit.h"
+
+} // namespace ImStb
+
+//-----------------------------------------------------------------------------
+// Context pointer
+//-----------------------------------------------------------------------------
+
+#ifndef GImGui
+extern IMGUI_API ImGuiContext* GImGui;  // Current implicit context pointer
+#endif
+
+//-----------------------------------------------------------------------------
+// Macros
+//-----------------------------------------------------------------------------
+
+// Debug Logging
+#ifndef IMGUI_DEBUG_LOG
+#define IMGUI_DEBUG_LOG(_FMT,...)       printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__)
+#endif
+
+// Static Asserts
+#if (__cplusplus >= 201100)
+#define IM_STATIC_ASSERT(_COND)         static_assert(_COND, "")
+#else
+#define IM_STATIC_ASSERT(_COND)         typedef char static_assertion_##__line__[(_COND)?1:-1]
+#endif
+
+// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much.
+// We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code.
+//#define IMGUI_DEBUG_PARANOID
+#ifdef IMGUI_DEBUG_PARANOID
+#define IM_ASSERT_PARANOID(_EXPR)       IM_ASSERT(_EXPR)
+#else
+#define IM_ASSERT_PARANOID(_EXPR)
+#endif
+
+// Error handling
+// Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults.
+#ifndef IM_ASSERT_USER_ERROR
+#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG)   // Recoverable User Error
+#endif
+
+// Misc Macros
+#define IM_PI                           3.14159265358979323846f
+#ifdef _WIN32
+#define IM_NEWLINE                      "\r\n"   // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
+#else
+#define IM_NEWLINE                      "\n"
+#endif
+#define IM_TABSIZE                      (4)
+#define IM_F32_TO_INT8_UNBOUND(_VAL)    ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f)))   // Unsaturated, for display purpose
+#define IM_F32_TO_INT8_SAT(_VAL)        ((int)(ImSaturate(_VAL) * 255.0f + 0.5f))               // Saturated, always output 0..255
+#define IM_FLOOR(_VAL)                  ((float)(int)(_VAL))                                    // ImFloor() is not inlined in MSVC debug builds
+#define IM_ROUND(_VAL)                  ((float)(int)((_VAL) + 0.5f))                           //
+
+// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
+#ifdef _MSC_VER
+#define IMGUI_CDECL __cdecl
+#else
+#define IMGUI_CDECL
+#endif
+
+//-----------------------------------------------------------------------------
+// Generic helpers
+// Note that the ImXXX helpers functions are lower-level than ImGui functions.
+// ImGui functions or the ImGui context are never called/used from other ImXXX functions.
+//-----------------------------------------------------------------------------
+// - Helpers: Misc
+// - Helpers: Bit manipulation
+// - Helpers: String, Formatting
+// - Helpers: UTF-8 <> wchar conversions
+// - Helpers: ImVec2/ImVec4 operators
+// - Helpers: Maths
+// - Helpers: Geometry
+// - Helpers: Bit arrays
+// - Helper: ImBitArray
+// - Helper: ImBitVector
+// - Helper: ImSpan<>, ImSpanAllocator<>
+// - Helper: ImPool<>
+// - Helper: ImChunkStream<>
+//-----------------------------------------------------------------------------
+
+// Helpers: Misc
+#define ImQsort         qsort
+IMGUI_API ImU32         ImHashData(const void* data, size_t data_size, ImU32 seed = 0);
+IMGUI_API ImU32         ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0);
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+static inline ImU32     ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68]
+#endif
+
+// Helpers: Color Blending
+IMGUI_API ImU32         ImAlphaBlendColors(ImU32 col_a, ImU32 col_b);
+
+// Helpers: Bit manipulation
+static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 && (v & (v - 1)) == 0; }
+static inline bool      ImIsPowerOfTwo(ImU64 v)         { return v != 0 && (v & (v - 1)) == 0; }
+static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
+
+// Helpers: String, Formatting
+IMGUI_API int           ImStricmp(const char* str1, const char* str2);
+IMGUI_API int           ImStrnicmp(const char* str1, const char* str2, size_t count);
+IMGUI_API void          ImStrncpy(char* dst, const char* src, size_t count);
+IMGUI_API char*         ImStrdup(const char* str);
+IMGUI_API char*         ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
+IMGUI_API const char*   ImStrchrRange(const char* str_begin, const char* str_end, char c);
+IMGUI_API int           ImStrlenW(const ImWchar* str);
+IMGUI_API const char*   ImStreolRange(const char* str, const char* str_end);                // End end-of-line
+IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin);   // Find beginning-of-line
+IMGUI_API const char*   ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
+IMGUI_API void          ImStrTrimBlanks(char* str);
+IMGUI_API const char*   ImStrSkipBlank(const char* str);
+IMGUI_API int           ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3);
+IMGUI_API int           ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
+IMGUI_API const char*   ImParseFormatFindStart(const char* format);
+IMGUI_API const char*   ImParseFormatFindEnd(const char* format);
+IMGUI_API const char*   ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
+IMGUI_API int           ImParseFormatPrecision(const char* format, int default_value);
+static inline bool      ImCharIsBlankA(char c)          { return c == ' ' || c == '\t'; }
+static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ' || c == '\t' || c == 0x3000; }
+
+// Helpers: UTF-8 <> wchar conversions
+IMGUI_API int           ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end);      // return output UTF-8 bytes count
+IMGUI_API int           ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end);          // read one character. return input UTF-8 bytes count
+IMGUI_API int           ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL);   // return input UTF-8 bytes count
+IMGUI_API int           ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end);                            // return number of UTF-8 code-points (NOT bytes count)
+IMGUI_API int           ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end);                        // return number of bytes to express one char in UTF-8
+IMGUI_API int           ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end);                   // return number of bytes to express string in UTF-8
+
+// Helpers: ImVec2/ImVec4 operators
+// We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.)
+// We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself.
+#ifdef IMGUI_DEFINE_MATH_OPERATORS
+static inline ImVec2 operator*(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x*rhs, lhs.y*rhs); }
+static inline ImVec2 operator/(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x/rhs, lhs.y/rhs); }
+static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x+rhs.x, lhs.y+rhs.y); }
+static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x-rhs.x, lhs.y-rhs.y); }
+static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x*rhs.x, lhs.y*rhs.y); }
+static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x/rhs.x, lhs.y/rhs.y); }
+static inline ImVec2& operator*=(ImVec2& lhs, const float rhs)                  { lhs.x *= rhs; lhs.y *= rhs; return lhs; }
+static inline ImVec2& operator/=(ImVec2& lhs, const float rhs)                  { lhs.x /= rhs; lhs.y /= rhs; return lhs; }
+static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; }
+static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; }
+static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; }
+static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; }
+static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z, lhs.w+rhs.w); }
+static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); }
+static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x*rhs.x, lhs.y*rhs.y, lhs.z*rhs.z, lhs.w*rhs.w); }
+#endif
+
+// Helpers: File System
+#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
+#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+typedef void* ImFileHandle;
+static inline ImFileHandle  ImFileOpen(const char*, const char*)                    { return NULL; }
+static inline bool          ImFileClose(ImFileHandle)                               { return false; }
+static inline ImU64         ImFileGetSize(ImFileHandle)                             { return (ImU64)-1; }
+static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle)           { return 0; }
+static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFileHandle)    { return 0; }
+#endif
+
+#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+typedef FILE* ImFileHandle;
+IMGUI_API ImFileHandle      ImFileOpen(const char* filename, const char* mode);
+IMGUI_API bool              ImFileClose(ImFileHandle file);
+IMGUI_API ImU64             ImFileGetSize(ImFileHandle file);
+IMGUI_API ImU64             ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file);
+IMGUI_API ImU64             ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file);
+#else
+#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions
+#endif
+IMGUI_API void*             ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0);
+
+// Helpers: Maths
+// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
+#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+#define ImFabs(X)           fabsf(X)
+#define ImSqrt(X)           sqrtf(X)
+#define ImFmod(X, Y)        fmodf((X), (Y))
+#define ImCos(X)            cosf(X)
+#define ImSin(X)            sinf(X)
+#define ImAcos(X)           acosf(X)
+#define ImAtan2(Y, X)       atan2f((Y), (X))
+#define ImAtof(STR)         atof(STR)
+#define ImFloorStd(X)       floorf(X)           // We already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by e.g. stb_truetype)
+#define ImCeil(X)           ceilf(X)
+static inline float  ImPow(float x, float y)    { return powf(x, y); }          // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
+static inline double ImPow(double x, double y)  { return pow(x, y); }
+#endif
+// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
+// (Exceptionally using templates here but we could also redefine them for those types)
+template<typename T> static inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ? lhs : rhs; }
+template<typename T> static inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ? lhs : rhs; }
+template<typename T> static inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? mn : (v > mx) ? mx : v; }
+template<typename T> static inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b - a) * t); }
+template<typename T> static inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; b = tmp; }
+template<typename T> static inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
+template<typename T> static inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
+// - Misc maths helpers
+static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
+static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
+static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx)      { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); }
+static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)          { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); }
+static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t)  { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); }
+static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)          { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); }
+static inline float  ImSaturate(float f)                                        { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
+static inline float  ImLengthSqr(const ImVec2& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y; }
+static inline float  ImLengthSqr(const ImVec4& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; }
+static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; }
+static inline float  ImFloor(float f)                                           { return (float)(int)(f); }
+static inline ImVec2 ImFloor(const ImVec2& v)                                   { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
+static inline int    ImModPositive(int a, int b)                                { return (a + b) % b; }
+static inline float  ImDot(const ImVec2& a, const ImVec2& b)                    { return a.x * b.x + a.y * b.y; }
+static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)        { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
+static inline float  ImLinearSweep(float current, float target, float speed)    { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
+static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
+
+// Helpers: Geometry
+IMGUI_API ImVec2     ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t);                                         // Cubic Bezier
+IMGUI_API ImVec2     ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments);       // For curves with explicit number of segments
+IMGUI_API ImVec2     ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol
+IMGUI_API ImVec2     ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
+IMGUI_API bool       ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API ImVec2     ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API void       ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
+inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; }
+IMGUI_API ImGuiDir   ImGetDirQuadrantFromDelta(float dx, float dy);
+
+// Helpers: Bit arrays
+inline bool          ImBitArrayTestBit(const ImU32* arr, int n)         { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; }
+inline void          ImBitArrayClearBit(ImU32* arr, int n)              { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; }
+inline void          ImBitArraySetBit(ImU32* arr, int n)                { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; }
+inline void          ImBitArraySetBitRange(ImU32* arr, int n, int n2)
+{
+    while (n <= n2)
+    {
+        int a_mod = (n & 31);
+        int b_mod = ((n2 >= n + 31) ? 31 : (n2 & 31)) + 1;
+        ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1);
+        arr[n >> 5] |= mask;
+        n = (n + 32) & ~31;
+    }
+}
+
+// Helper: ImBitArray (wrapper over ImBitArray functions)
+// Store 1-bit per value. NOT CLEARED by constructor.
+template<int BITCOUNT>
+struct IMGUI_API ImBitArray
+{
+    ImU32           Storage[(BITCOUNT + 31) >> 5];
+    ImBitArray()                                { }
+    void            ClearBits()                 { memset(Storage, 0, sizeof(Storage)); }
+    bool            TestBit(int n) const        { IM_ASSERT(n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
+    void            SetBit(int n)               { IM_ASSERT(n < BITCOUNT); ImBitArraySetBit(Storage, n); }
+    void            ClearBit(int n)             { IM_ASSERT(n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
+    void            SetBitRange(int n1, int n2) { ImBitArraySetBitRange(Storage, n1, n2); }
+};
+
+// Helper: ImBitVector
+// Store 1-bit per value.
+struct IMGUI_API ImBitVector
+{
+    ImVector<ImU32> Storage;
+    void            Create(int sz)              { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
+    void            Clear()                     { Storage.clear(); }
+    bool            TestBit(int n) const        { IM_ASSERT(n < (Storage.Size << 5)); return ImBitArrayTestBit(Storage.Data, n); }
+    void            SetBit(int n)               { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); }
+    void            ClearBit(int n)             { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); }
+};
+
+// Helper: ImSpan<>
+// Pointing to a span of data we don't own.
+template<typename T>
+struct ImSpan
+{
+    T*                  Data;
+    T*                  DataEnd;
+
+    // Constructors, destructor
+    inline ImSpan()                                 { Data = DataEnd = NULL; }
+    inline ImSpan(T* data, int size)                { Data = data; DataEnd = data + size; }
+    inline ImSpan(T* data, T* data_end)             { Data = data; DataEnd = data_end; }
+
+    inline void         set(T* data, int size)      { Data = data; DataEnd = data + size; }
+    inline void         set(T* data, T* data_end)   { Data = data; DataEnd = data_end; }
+    inline int          size() const                { return (int)(ptrdiff_t)(DataEnd - Data); }
+    inline T&           operator[](int i)           { T* p = Data + i; IM_ASSERT(p < DataEnd); return *p; }
+    inline const T&     operator[](int i) const     { const T* p = Data + i; IM_ASSERT(p < DataEnd); return *p; }
+
+    inline T*           begin()                     { return Data; }
+    inline const T*     begin() const               { return Data; }
+    inline T*           end()                       { return DataEnd; }
+    inline const T*     end() const                 { return DataEnd; }
+
+    // Utilities
+    inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; }
+};
+
+// Helper: ImSpanAllocator<>
+// Facilitate storing multiple chunks into a single large block (the "arena")
+template<int CHUNKS>
+struct ImSpanAllocator
+{
+    char*   BasePtr;
+    int     TotalSize;
+    int     CurrSpan;
+    int     Offsets[CHUNKS];
+
+    ImSpanAllocator()                               { memset(this, 0, sizeof(*this)); }
+    inline void  ReserveBytes(int n, size_t sz)     { IM_ASSERT(n == CurrSpan && n < CHUNKS); Offsets[CurrSpan++] = TotalSize; TotalSize += (int)sz; }
+    inline int   GetArenaSizeInBytes()              { return TotalSize; }
+    inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_ptr; }
+    inline void* GetSpanPtrBegin(int n)             { IM_ASSERT(n >= 0 && n < CHUNKS && CurrSpan == CHUNKS); return (void*)(BasePtr + Offsets[n]); }
+    inline void* GetSpanPtrEnd(int n)               { IM_ASSERT(n >= 0 && n < CHUNKS && CurrSpan == CHUNKS); return (n + 1 < CHUNKS) ? BasePtr + Offsets[n + 1] : (void*)(BasePtr + TotalSize); }
+    template<typename T> 
+    inline void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); }
+};
+
+// Helper: ImPool<>
+// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
+// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
+typedef int ImPoolIdx;
+template<typename T>
+struct IMGUI_API ImPool
+{
+    ImVector<T>     Buf;        // Contiguous data
+    ImGuiStorage    Map;        // ID->Index
+    ImPoolIdx       FreeIdx;    // Next free idx to use
+
+    ImPool()    { FreeIdx = 0; }
+    ~ImPool()   { Clear(); }
+    T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
+    T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
+    ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
+    T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
+    bool        Contains(const T* p) const          { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
+    void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = 0; }
+    T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); return &Buf[idx]; }
+    void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p)); }
+    void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); }
+    void        Reserve(int capacity)               { Buf.reserve(capacity); Map.Data.reserve(capacity); }
+    int         GetSize() const                     { return Buf.Size; }
+};
+
+// Helper: ImChunkStream<>
+// Build and iterate a contiguous stream of variable-sized structures.
+// This is used by Settings to store persistent data while reducing allocation count.
+// We store the chunk size first, and align the final size on 4 bytes boundaries (this what the '(X + 3) & ~3' statement is for)
+// The tedious/zealous amount of casting is to avoid -Wcast-align warnings.
+template<typename T>
+struct IMGUI_API ImChunkStream
+{
+    ImVector<char>  Buf;
+
+    void    clear()                     { Buf.clear(); }
+    bool    empty() const               { return Buf.Size == 0; }
+    int     size() const                { return Buf.Size; }
+    T*      alloc_chunk(size_t sz)      { size_t HDR_SZ = 4; sz = ((HDR_SZ + sz) + 3u) & ~3u; int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); }
+    T*      begin()                     { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); }
+    T*      next_chunk(T* p)            { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; }
+    int     chunk_size(const T* p)      { return ((const int*)p)[-1]; }
+    T*      end()                       { return (T*)(void*)(Buf.Data + Buf.Size); }
+    int     offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; }
+    T*      ptr_from_offset(int off)    { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); }
+};
+
+//-----------------------------------------------------------------------------
+// Misc data structures
+//-----------------------------------------------------------------------------
+
+enum ImGuiButtonFlags_
+{
+    ImGuiButtonFlags_None                   = 0,
+    ImGuiButtonFlags_Repeat                 = 1 << 0,   // hold to repeat
+    ImGuiButtonFlags_PressedOnClick         = 1 << 1,   // return true on click (mouse down event)
+    ImGuiButtonFlags_PressedOnClickRelease  = 1 << 2,   // [Default] return true on click + release on same item <-- this is what the majority of Button are using
+    ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 3, // return true on click + release even if the release event is not done while hovering the item
+    ImGuiButtonFlags_PressedOnRelease       = 1 << 4,   // return true on release (default requires click+release)
+    ImGuiButtonFlags_PressedOnDoubleClick   = 1 << 5,   // return true on double-click (default requires click+release)
+    ImGuiButtonFlags_PressedOnDragDropHold  = 1 << 6,   // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers)
+    ImGuiButtonFlags_FlattenChildren        = 1 << 7,   // allow interactions even if a child window is overlapping
+    ImGuiButtonFlags_AllowItemOverlap       = 1 << 8,   // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
+    ImGuiButtonFlags_DontClosePopups        = 1 << 9,   // disable automatically closing parent popup on press // [UNUSED]
+    ImGuiButtonFlags_Disabled               = 1 << 10,  // disable interactions
+    ImGuiButtonFlags_AlignTextBaseLine      = 1 << 11,  // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
+    ImGuiButtonFlags_NoKeyModifiers         = 1 << 12,  // disable mouse interaction if a key modifier is held
+    ImGuiButtonFlags_NoHoldingActiveId      = 1 << 13,  // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
+    ImGuiButtonFlags_NoNavFocus             = 1 << 14,  // don't override navigation focus when activated
+    ImGuiButtonFlags_NoHoveredOnFocus       = 1 << 15,  // don't report as hovered when nav focus is on this item
+    ImGuiButtonFlags_MouseButtonLeft        = 1 << 16,  // [Default] react on left mouse button
+    ImGuiButtonFlags_MouseButtonRight       = 1 << 17,  // react on right mouse button
+    ImGuiButtonFlags_MouseButtonMiddle      = 1 << 18,  // react on center mouse button
+
+    ImGuiButtonFlags_MouseButtonMask_       = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle,
+    ImGuiButtonFlags_MouseButtonShift_      = 16,
+    ImGuiButtonFlags_MouseButtonDefault_    = ImGuiButtonFlags_MouseButtonLeft,
+    ImGuiButtonFlags_PressedOnMask_         = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
+    ImGuiButtonFlags_PressedOnDefault_      = ImGuiButtonFlags_PressedOnClickRelease
+};
+
+enum ImGuiSliderFlags_
+{
+    ImGuiSliderFlags_None                   = 0,
+    ImGuiSliderFlags_Vertical               = 1 << 0
+};
+
+enum ImGuiDragFlags_
+{
+    ImGuiDragFlags_None                     = 0,
+    ImGuiDragFlags_Vertical                 = 1 << 0
+};
+
+enum ImGuiColumnsFlags_
+{
+    // Default: 0
+    ImGuiColumnsFlags_None                  = 0,
+    ImGuiColumnsFlags_NoBorder              = 1 << 0,   // Disable column dividers
+    ImGuiColumnsFlags_NoResize              = 1 << 1,   // Disable resizing columns when clicking on the dividers
+    ImGuiColumnsFlags_NoPreserveWidths      = 1 << 2,   // Disable column width preservation when adjusting columns
+    ImGuiColumnsFlags_NoForceWithinWindow   = 1 << 3,   // Disable forcing columns to fit within window
+    ImGuiColumnsFlags_GrowParentContentsSize= 1 << 4    // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
+};
+
+// Extend ImGuiSelectableFlags_
+enum ImGuiSelectableFlagsPrivate_
+{
+    // NB: need to be in sync with last value of ImGuiSelectableFlags_
+    ImGuiSelectableFlags_NoHoldingActiveID  = 1 << 20,
+    ImGuiSelectableFlags_SelectOnClick      = 1 << 21,  // Override button behavior to react on Click (default is Click+Release)
+    ImGuiSelectableFlags_SelectOnRelease    = 1 << 22,  // Override button behavior to react on Release (default is Click+Release)
+    ImGuiSelectableFlags_SpanAvailWidth     = 1 << 23,  // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus)
+    ImGuiSelectableFlags_DrawHoveredWhenHeld= 1 << 24,  // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
+    ImGuiSelectableFlags_SetNavIdOnHover    = 1 << 25
+};
+
+// Extend ImGuiTreeNodeFlags_
+enum ImGuiTreeNodeFlagsPrivate_
+{
+    ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20
+};
+
+enum ImGuiSeparatorFlags_
+{
+    ImGuiSeparatorFlags_None                = 0,
+    ImGuiSeparatorFlags_Horizontal          = 1 << 0,   // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
+    ImGuiSeparatorFlags_Vertical            = 1 << 1,
+    ImGuiSeparatorFlags_SpanAllColumns      = 1 << 2
+};
+
+// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
+// This is going to be exposed in imgui.h when stabilized enough.
+enum ImGuiItemFlags_
+{
+    ImGuiItemFlags_None                     = 0,
+    ImGuiItemFlags_NoTabStop                = 1 << 0,  // false
+    ImGuiItemFlags_ButtonRepeat             = 1 << 1,  // false    // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
+    ImGuiItemFlags_Disabled                 = 1 << 2,  // false    // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
+    ImGuiItemFlags_NoNav                    = 1 << 3,  // false
+    ImGuiItemFlags_NoNavDefaultFocus        = 1 << 4,  // false
+    ImGuiItemFlags_SelectableDontClosePopup = 1 << 5,  // false    // MenuItem/Selectable() automatically closes current Popup window
+    ImGuiItemFlags_MixedValue               = 1 << 6,  // false    // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
+    ImGuiItemFlags_Default_                 = 0
+};
+
+// Storage for LastItem data
+enum ImGuiItemStatusFlags_
+{
+    ImGuiItemStatusFlags_None               = 0,
+    ImGuiItemStatusFlags_HoveredRect        = 1 << 0,
+    ImGuiItemStatusFlags_HasDisplayRect     = 1 << 1,
+    ImGuiItemStatusFlags_Edited             = 1 << 2,   // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
+    ImGuiItemStatusFlags_ToggledSelection   = 1 << 3,   // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected" because reporting the change allows us to handle clipping with less issues.
+    ImGuiItemStatusFlags_ToggledOpen        = 1 << 4,   // Set when TreeNode() reports toggling their open state.
+    ImGuiItemStatusFlags_HasDeactivated     = 1 << 5,   // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
+    ImGuiItemStatusFlags_Deactivated        = 1 << 6    // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+    , // [imgui_tests only]
+    ImGuiItemStatusFlags_Openable           = 1 << 10,  //
+    ImGuiItemStatusFlags_Opened             = 1 << 11,  //
+    ImGuiItemStatusFlags_Checkable          = 1 << 12,  //
+    ImGuiItemStatusFlags_Checked            = 1 << 13   //
+#endif
+};
+
+enum ImGuiTextFlags_
+{
+    ImGuiTextFlags_None = 0,
+    ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
+};
+
+enum ImGuiTooltipFlags_
+{
+    ImGuiTooltipFlags_None = 0,
+    ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0      // Override will clear/ignore previously submitted tooltip (defaults to append)
+};
+
+// FIXME: this is in development, not exposed/functional as a generic feature yet.
+// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
+enum ImGuiLayoutType_
+{
+    ImGuiLayoutType_Horizontal = 0,
+    ImGuiLayoutType_Vertical = 1
+};
+
+enum ImGuiLogType
+{
+    ImGuiLogType_None = 0,
+    ImGuiLogType_TTY,
+    ImGuiLogType_File,
+    ImGuiLogType_Buffer,
+    ImGuiLogType_Clipboard
+};
+
+// X/Y enums are fixed to 0/1 so they may be used to index ImVec2
+enum ImGuiAxis
+{
+    ImGuiAxis_None = -1,
+    ImGuiAxis_X = 0,
+    ImGuiAxis_Y = 1
+};
+
+enum ImGuiPlotType
+{
+    ImGuiPlotType_Lines,
+    ImGuiPlotType_Histogram
+};
+
+enum ImGuiInputSource
+{
+    ImGuiInputSource_None = 0,
+    ImGuiInputSource_Mouse,
+    ImGuiInputSource_Nav,
+    ImGuiInputSource_NavKeyboard,   // Only used occasionally for storage, not tested/handled by most code
+    ImGuiInputSource_NavGamepad,    // "
+    ImGuiInputSource_COUNT
+};
+
+// FIXME-NAV: Clarify/expose various repeat delay/rate
+enum ImGuiInputReadMode
+{
+    ImGuiInputReadMode_Down,
+    ImGuiInputReadMode_Pressed,
+    ImGuiInputReadMode_Released,
+    ImGuiInputReadMode_Repeat,
+    ImGuiInputReadMode_RepeatSlow,
+    ImGuiInputReadMode_RepeatFast
+};
+
+enum ImGuiNavHighlightFlags_
+{
+    ImGuiNavHighlightFlags_None         = 0,
+    ImGuiNavHighlightFlags_TypeDefault  = 1 << 0,
+    ImGuiNavHighlightFlags_TypeThin     = 1 << 1,
+    ImGuiNavHighlightFlags_AlwaysDraw   = 1 << 2,       // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
+    ImGuiNavHighlightFlags_NoRounding   = 1 << 3
+};
+
+enum ImGuiNavDirSourceFlags_
+{
+    ImGuiNavDirSourceFlags_None         = 0,
+    ImGuiNavDirSourceFlags_Keyboard     = 1 << 0,
+    ImGuiNavDirSourceFlags_PadDPad      = 1 << 1,
+    ImGuiNavDirSourceFlags_PadLStick    = 1 << 2
+};
+
+enum ImGuiNavMoveFlags_
+{
+    ImGuiNavMoveFlags_None                  = 0,
+    ImGuiNavMoveFlags_LoopX                 = 1 << 0,   // On failed request, restart from opposite side
+    ImGuiNavMoveFlags_LoopY                 = 1 << 1,
+    ImGuiNavMoveFlags_WrapX                 = 1 << 2,   // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
+    ImGuiNavMoveFlags_WrapY                 = 1 << 3,   // This is not super useful for provided for completeness
+    ImGuiNavMoveFlags_AllowCurrentNavId     = 1 << 4,   // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place)
+    ImGuiNavMoveFlags_AlsoScoreVisibleSet   = 1 << 5,   // Store alternate result in NavMoveResultLocalVisibleSet that only comprise elements that are already fully visible.
+    ImGuiNavMoveFlags_ScrollToEdge          = 1 << 6
+};
+
+enum ImGuiNavForward
+{
+    ImGuiNavForward_None,
+    ImGuiNavForward_ForwardQueued,
+    ImGuiNavForward_ForwardActive
+};
+
+enum ImGuiNavLayer
+{
+    ImGuiNavLayer_Main  = 0,    // Main scrolling layer
+    ImGuiNavLayer_Menu  = 1,    // Menu layer (access with Alt/ImGuiNavInput_Menu)
+    ImGuiNavLayer_COUNT
+};
+
+enum ImGuiPopupPositionPolicy
+{
+    ImGuiPopupPositionPolicy_Default,
+    ImGuiPopupPositionPolicy_ComboBox
+};
+
+// 1D vector (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
+struct ImVec1
+{
+    float   x;
+    ImVec1()         { x = 0.0f; }
+    ImVec1(float _x) { x = _x; }
+};
+
+// 2D vector (half-size integer)
+struct ImVec2ih
+{
+    short   x, y;
+    ImVec2ih()                           { x = y = 0; }
+    ImVec2ih(short _x, short _y)         { x = _x; y = _y; }
+    explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; }
+};
+
+// 2D axis aligned bounding-box
+// NB: we can't rely on ImVec2 math operators being available here
+struct IMGUI_API ImRect
+{
+    ImVec2      Min;    // Upper-left
+    ImVec2      Max;    // Lower-right
+
+    ImRect()                                        : Min(0.0f, 0.0f), Max(0.0f, 0.0f)              {}
+    ImRect(const ImVec2& min, const ImVec2& max)    : Min(min), Max(max)                            {}
+    ImRect(const ImVec4& v)                         : Min(v.x, v.y), Max(v.z, v.w)                  {}
+    ImRect(float x1, float y1, float x2, float y2)  : Min(x1, y1), Max(x2, y2)                      {}
+
+    ImVec2      GetCenter() const                   { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
+    ImVec2      GetSize() const                     { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
+    float       GetWidth() const                    { return Max.x - Min.x; }
+    float       GetHeight() const                   { return Max.y - Min.y; }
+    ImVec2      GetTL() const                       { return Min; }                   // Top-left
+    ImVec2      GetTR() const                       { return ImVec2(Max.x, Min.y); }  // Top-right
+    ImVec2      GetBL() const                       { return ImVec2(Min.x, Max.y); }  // Bottom-left
+    ImVec2      GetBR() const                       { return Max; }                   // Bottom-right
+    bool        Contains(const ImVec2& p) const     { return p.x     >= Min.x && p.y     >= Min.y && p.x     <  Max.x && p.y     <  Max.y; }
+    bool        Contains(const ImRect& r) const     { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; }
+    bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max.y && r.Max.y >  Min.y && r.Min.x <  Max.x && r.Max.x >  Min.x; }
+    void        Add(const ImVec2& p)                { if (Min.x > p.x)     Min.x = p.x;     if (Min.y > p.y)     Min.y = p.y;     if (Max.x < p.x)     Max.x = p.x;     if (Max.y < p.y)     Max.y = p.y; }
+    void        Add(const ImRect& r)                { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; }
+    void        Expand(const float amount)          { Min.x -= amount;   Min.y -= amount;   Max.x += amount;   Max.y += amount; }
+    void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
+    void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; }
+    void        TranslateX(float dx)                { Min.x += dx; Max.x += dx; }
+    void        TranslateY(float dy)                { Min.y += dy; Max.y += dy; }
+    void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); }                   // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
+    void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
+    void        Floor()                             { Min.x = IM_FLOOR(Min.x); Min.y = IM_FLOOR(Min.y); Max.x = IM_FLOOR(Max.x); Max.y = IM_FLOOR(Max.y); }
+    bool        IsInverted() const                  { return Min.x > Max.x || Min.y > Max.y; }
+    ImVec4      ToVec4() const                      { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
+};
+
+// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
+struct ImGuiDataTypeInfo
+{
+    size_t      Size;           // Size in byte
+    const char* PrintFmt;       // Default printf format for the type
+    const char* ScanFmt;        // Default scanf format for the type
+};
+
+// Stacked color modifier, backup of modified data so we can restore it
+struct ImGuiColorMod
+{
+    ImGuiCol    Col;
+    ImVec4      BackupValue;
+};
+
+// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
+struct ImGuiStyleMod
+{
+    ImGuiStyleVar   VarIdx;
+    union           { int BackupInt[2]; float BackupFloat[2]; };
+    ImGuiStyleMod(ImGuiStyleVar idx, int v)     { VarIdx = idx; BackupInt[0] = v; }
+    ImGuiStyleMod(ImGuiStyleVar idx, float v)   { VarIdx = idx; BackupFloat[0] = v; }
+    ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v)  { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
+};
+
+// Stacked storage data for BeginGroup()/EndGroup()
+struct ImGuiGroupData
+{
+    ImVec2      BackupCursorPos;
+    ImVec2      BackupCursorMaxPos;
+    ImVec1      BackupIndent;
+    ImVec1      BackupGroupOffset;
+    ImVec2      BackupCurrLineSize;
+    float       BackupCurrLineTextBaseOffset;
+    ImGuiID     BackupActiveIdIsAlive;
+    bool        BackupActiveIdPreviousFrameIsAlive;
+    bool        EmitItem;
+};
+
+// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
+struct IMGUI_API ImGuiMenuColumns
+{
+    float       Spacing;
+    float       Width, NextWidth;
+    float       Pos[3], NextWidths[3];
+
+    ImGuiMenuColumns();
+    void        Update(int count, float spacing, bool clear);
+    float       DeclColumns(float w0, float w1, float w2);
+    float       CalcExtraSpace(float avail_w) const;
+};
+
+// Internal state of the currently focused/edited text input box
+// For a given item ID, access with ImGui::GetInputTextState()
+struct IMGUI_API ImGuiInputTextState
+{
+    ImGuiID                 ID;                     // widget id owning the text state
+    int                     CurLenW, CurLenA;       // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not.
+    ImVector<ImWchar>       TextW;                  // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer.
+    ImVector<char>          TextA;                  // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
+    ImVector<char>          InitialTextA;           // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
+    bool                    TextAIsValid;           // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
+    int                     BufCapacityA;           // end-user buffer capacity
+    float                   ScrollX;                // horizontal scrolling/offset
+    ImStb::STB_TexteditState Stb;                   // state for stb_textedit.h
+    float                   CursorAnim;             // timer for cursor blink, reset on every user action so the cursor reappears immediately
+    bool                    CursorFollow;           // set when we want scrolling to follow the current cursor position (not always!)
+    bool                    SelectedAllMouseLock;   // after a double-click to select all, we ignore further mouse drags to update selection
+    ImGuiInputTextFlags     UserFlags;              // Temporarily set while we call user's callback
+    ImGuiInputTextCallback  UserCallback;           // "
+    void*                   UserCallbackData;       // "
+
+    ImGuiInputTextState()                   { memset(this, 0, sizeof(*this)); }
+    void        ClearText()                 { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
+    void        ClearFreeMemory()           { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
+    int         GetUndoAvailCount() const   { return Stb.undostate.undo_point; }
+    int         GetRedoAvailCount() const   { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
+    void        OnKeyPressed(int key);      // Cannot be inline because we call in code in stb_textedit.h implementation
+
+    // Cursor & Selection
+    void        CursorAnimReset()           { CursorAnim = -0.30f; }                                   // After a user-input the cursor stays on for a while without blinking
+    void        CursorClamp()               { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
+    bool        HasSelection() const        { return Stb.select_start != Stb.select_end; }
+    void        ClearSelection()            { Stb.select_start = Stb.select_end = Stb.cursor; }
+    void        SelectAll()                 { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
+};
+
+// Windows data saved in imgui.ini file
+// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily.
+// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure)
+struct ImGuiWindowSettings
+{
+    ImGuiID     ID;
+    ImVec2ih    Pos;
+    ImVec2ih    Size;
+    bool        Collapsed;
+
+    ImGuiWindowSettings()       { ID = 0; Pos = Size = ImVec2ih(0, 0); Collapsed = false; }
+    char* GetName()             { return (char*)(this + 1); }
+};
+
+struct ImGuiSettingsHandler
+{
+    const char* TypeName;       // Short description stored in .ini file. Disallowed characters: '[' ']'
+    ImGuiID     TypeHash;       // == ImHashStr(TypeName)
+    void*       (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name);              // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
+    void        (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
+    void        (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf);      // Write: Output every entries into 'out_buf'
+    void*       UserData;
+
+    ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
+};
+
+// Storage for current popup stack
+struct ImGuiPopupData
+{
+    ImGuiID             PopupId;        // Set on OpenPopup()
+    ImGuiWindow*        Window;         // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
+    ImGuiWindow*        SourceWindow;   // Set on OpenPopup() copy of NavWindow at the time of opening the popup
+    int                 OpenFrameCount; // Set on OpenPopup()
+    ImGuiID             OpenParentId;   // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
+    ImVec2              OpenPopupPos;   // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
+    ImVec2              OpenMousePos;   // Set on OpenPopup(), copy of mouse position at the time of opening popup
+
+    ImGuiPopupData() { PopupId = 0; Window = SourceWindow = NULL; OpenFrameCount = -1; OpenParentId = 0; }
+};
+
+struct ImGuiColumnData
+{
+    float               OffsetNorm;         // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
+    float               OffsetNormBeforeResize;
+    ImGuiColumnsFlags   Flags;              // Not exposed
+    ImRect              ClipRect;
+
+    ImGuiColumnData()   { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = ImGuiColumnsFlags_None; }
+};
+
+struct ImGuiColumns
+{
+    ImGuiID             ID;
+    ImGuiColumnsFlags   Flags;
+    bool                IsFirstFrame;
+    bool                IsBeingResized;
+    int                 Current;
+    int                 Count;
+    float               OffMinX, OffMaxX;       // Offsets from HostWorkRect.Min.x
+    float               LineMinY, LineMaxY;
+    float               HostCursorPosY;         // Backup of CursorPos at the time of BeginColumns()
+    float               HostCursorMaxPosX;      // Backup of CursorMaxPos at the time of BeginColumns()
+    ImRect              HostClipRect;           // Backup of ClipRect at the time of BeginColumns()
+    ImRect              HostWorkRect;           // Backup of WorkRect at the time of BeginColumns()
+    ImVector<ImGuiColumnData> Columns;
+    ImDrawListSplitter  Splitter;
+
+    ImGuiColumns()      { Clear(); }
+    void Clear()
+    {
+        ID = 0;
+        Flags = ImGuiColumnsFlags_None;
+        IsFirstFrame = false;
+        IsBeingResized = false;
+        Current = 0;
+        Count = 1;
+        OffMinX = OffMaxX = 0.0f;
+        LineMinY = LineMaxY = 0.0f;
+        HostCursorPosY = 0.0f;
+        HostCursorMaxPosX = 0.0f;
+        Columns.clear();
+    }
+};
+
+// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN                     12
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX                     512
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR)    ImClamp((int)((IM_PI * 2.0f) / ImAcos(((_RAD) - (_MAXERROR)) / (_RAD))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
+
+// ImDrawList: You may set this to higher values (e.g. 2 or 3) to increase tessellation of fast rounded corners path.
+#ifndef IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER
+#define IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER             1
+#endif
+
+// Data shared between all ImDrawList instances
+// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
+struct IMGUI_API ImDrawListSharedData
+{
+    ImVec2          TexUvWhitePixel;            // UV of white pixel in the atlas
+    ImFont*         Font;                       // Current/default font (optional, for simplified AddText overload)
+    float           FontSize;                   // Current/default font size (optional, for simplified AddText overload)
+    float           CurveTessellationTol;       // Tessellation tolerance when using PathBezierCurveTo()
+    float           CircleSegmentMaxError;      // Number of circle segments to use per pixel of radius for AddCircle() etc
+    ImVec4          ClipRectFullscreen;         // Value for PushClipRectFullscreen()
+    ImDrawListFlags InitialFlags;               // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
+
+    // [Internal] Lookup tables
+    ImVec2          ArcFastVtx[12 * IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER];  // FIXME: Bake rounded corners fill/borders in atlas
+    ImU8            CircleSegmentCounts[64];    // Precomputed segment count for given radius (array index + 1) before we calculate it dynamically (to avoid calculation overhead)
+
+    ImDrawListSharedData();
+    void SetCircleSegmentMaxError(float max_error);
+};
+
+struct ImDrawDataBuilder
+{
+    ImVector<ImDrawList*>   Layers[2];           // Global layers for: regular, tooltip
+
+    void Clear()            { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].resize(0); }
+    void ClearFreeMemory()  { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].clear(); }
+    IMGUI_API void FlattenIntoSingleLayer();
+};
+
+struct ImGuiNavMoveResult
+{
+    ImGuiWindow*    Window;             // Best candidate window
+    ImGuiID         ID;                 // Best candidate ID
+    ImGuiID         FocusScopeId;       // Best candidate focus scope ID
+    float           DistBox;            // Best candidate box distance to current NavId
+    float           DistCenter;         // Best candidate center distance to current NavId
+    float           DistAxial;
+    ImRect          RectRel;            // Best candidate bounding box in window relative space
+
+    ImGuiNavMoveResult() { Clear(); }
+    void Clear()         { Window = NULL; ID = FocusScopeId = 0; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); }
+};
+
+enum ImGuiNextWindowDataFlags_
+{
+    ImGuiNextWindowDataFlags_None               = 0,
+    ImGuiNextWindowDataFlags_HasPos             = 1 << 0,
+    ImGuiNextWindowDataFlags_HasSize            = 1 << 1,
+    ImGuiNextWindowDataFlags_HasContentSize     = 1 << 2,
+    ImGuiNextWindowDataFlags_HasCollapsed       = 1 << 3,
+    ImGuiNextWindowDataFlags_HasSizeConstraint  = 1 << 4,
+    ImGuiNextWindowDataFlags_HasFocus           = 1 << 5,
+    ImGuiNextWindowDataFlags_HasBgAlpha         = 1 << 6
+};
+
+// Storage for SetNexWindow** functions
+struct ImGuiNextWindowData
+{
+    ImGuiNextWindowDataFlags    Flags;
+    ImGuiCond                   PosCond;
+    ImGuiCond                   SizeCond;
+    ImGuiCond                   CollapsedCond;
+    ImVec2                      PosVal;
+    ImVec2                      PosPivotVal;
+    ImVec2                      SizeVal;
+    ImVec2                      ContentSizeVal;
+    bool                        CollapsedVal;
+    ImRect                      SizeConstraintRect;
+    ImGuiSizeCallback           SizeCallback;
+    void*                       SizeCallbackUserData;
+    float                       BgAlphaVal;             // Override background alpha
+    ImVec2                      MenuBarOffsetMinVal;    // *Always on* This is not exposed publicly, so we don't clear it.
+
+    ImGuiNextWindowData()       { memset(this, 0, sizeof(*this)); }
+    inline void ClearFlags()    { Flags = ImGuiNextWindowDataFlags_None; }
+};
+
+enum ImGuiNextItemDataFlags_
+{
+    ImGuiNextItemDataFlags_None     = 0,
+    ImGuiNextItemDataFlags_HasWidth = 1 << 0,
+    ImGuiNextItemDataFlags_HasOpen  = 1 << 1
+};
+
+struct ImGuiNextItemData
+{
+    ImGuiNextItemDataFlags      Flags;
+    float                       Width;          // Set by SetNextItemWidth()
+    ImGuiID                     FocusScopeId;   // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging)
+    ImGuiCond                   OpenCond;
+    bool                        OpenVal;        // Set by SetNextItemOpen()
+
+    ImGuiNextItemData()         { memset(this, 0, sizeof(*this)); }
+    inline void ClearFlags()    { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()!
+};
+
+//-----------------------------------------------------------------------------
+// Tabs
+//-----------------------------------------------------------------------------
+
+struct ImGuiShrinkWidthItem
+{
+    int             Index;
+    float           Width;
+};
+
+struct ImGuiPtrOrIndex
+{
+    void*           Ptr;                // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
+    int             Index;              // Usually index in a main pool.
+
+    ImGuiPtrOrIndex(void* ptr)          { Ptr = ptr; Index = -1; }
+    ImGuiPtrOrIndex(int index)          { Ptr = NULL; Index = index; }
+};
+
+//-----------------------------------------------------------------------------
+// Main Dear ImGui context
+//-----------------------------------------------------------------------------
+
+struct ImGuiContext
+{
+    bool                    Initialized;
+    bool                    FontAtlasOwnedByContext;            // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
+    ImGuiIO                 IO;
+    ImGuiStyle              Style;
+    ImFont*                 Font;                               // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
+    float                   FontSize;                           // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
+    float                   FontBaseSize;                       // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
+    ImDrawListSharedData    DrawListSharedData;
+    double                  Time;
+    int                     FrameCount;
+    int                     FrameCountEnded;
+    int                     FrameCountRendered;
+    bool                    WithinFrameScope;                   // Set by NewFrame(), cleared by EndFrame()
+    bool                    WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
+    bool                    WithinEndChild;                     // Set within EndChild()
+
+    // Windows state
+    ImVector<ImGuiWindow*>  Windows;                            // Windows, sorted in display order, back to front
+    ImVector<ImGuiWindow*>  WindowsFocusOrder;                  // Windows, sorted in focus order, back to front. (FIXME: We could only store root windows here! Need to sort out the Docking equivalent which is RootWindowDockStop and is unfortunately a little more dynamic)
+    ImVector<ImGuiWindow*>  WindowsTempSortBuffer;              // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child
+    ImVector<ImGuiWindow*>  CurrentWindowStack;
+    ImGuiStorage            WindowsById;                        // Map window's ImGuiID to ImGuiWindow*
+    int                     WindowsActiveCount;                 // Number of unique windows submitted by frame
+    ImGuiWindow*            CurrentWindow;                      // Window being drawn into
+    ImGuiWindow*            HoveredWindow;                      // Will catch mouse inputs
+    ImGuiWindow*            HoveredRootWindow;                  // Will catch mouse inputs (for focus/move only)
+    ImGuiWindow*            MovingWindow;                       // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow.
+    ImGuiWindow*            WheelingWindow;                     // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window.
+    ImVec2                  WheelingWindowRefMousePos;
+    float                   WheelingWindowTimer;
+
+    // Item/widgets state and tracking information
+    ImGuiID                 HoveredId;                          // Hovered widget
+    bool                    HoveredIdAllowOverlap;
+    ImGuiID                 HoveredIdPreviousFrame;
+    float                   HoveredIdTimer;                     // Measure contiguous hovering time
+    float                   HoveredIdNotActiveTimer;            // Measure contiguous hovering time where the item has not been active
+    ImGuiID                 ActiveId;                           // Active widget
+    ImGuiID                 ActiveIdIsAlive;                    // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
+    float                   ActiveIdTimer;
+    bool                    ActiveIdIsJustActivated;            // Set at the time of activation for one frame
+    bool                    ActiveIdAllowOverlap;               // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
+    bool                    ActiveIdHasBeenPressedBefore;       // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch.
+    bool                    ActiveIdHasBeenEditedBefore;        // Was the value associated to the widget Edited over the course of the Active state.
+    bool                    ActiveIdHasBeenEditedThisFrame;
+    ImU32                   ActiveIdUsingNavDirMask;            // Active widget will want to read those directional navigation requests (e.g. can activate a button and move away from it)
+    ImU32                   ActiveIdUsingNavInputMask;          // Active widget will want to read those nav inputs.
+    ImU64                   ActiveIdUsingKeyInputMask;          // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
+    ImVec2                  ActiveIdClickOffset;                // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
+    ImGuiWindow*            ActiveIdWindow;
+    ImGuiInputSource        ActiveIdSource;                     // Activating with mouse or nav (gamepad/keyboard)
+    int                     ActiveIdMouseButton;
+    ImGuiID                 ActiveIdPreviousFrame;
+    bool                    ActiveIdPreviousFrameIsAlive;
+    bool                    ActiveIdPreviousFrameHasBeenEditedBefore;
+    ImGuiWindow*            ActiveIdPreviousFrameWindow;
+    ImGuiID                 LastActiveId;                       // Store the last non-zero ActiveId, useful for animation.
+    float                   LastActiveIdTimer;                  // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
+
+    // Next window/item data
+    ImGuiNextWindowData     NextWindowData;                     // Storage for SetNextWindow** functions
+    ImGuiNextItemData       NextItemData;                       // Storage for SetNextItem** functions
+
+    // Shared stacks
+    ImVector<ImGuiColorMod> ColorModifiers;                     // Stack for PushStyleColor()/PopStyleColor()
+    ImVector<ImGuiStyleMod> StyleModifiers;                     // Stack for PushStyleVar()/PopStyleVar()
+    ImVector<ImFont*>       FontStack;                          // Stack for PushFont()/PopFont()
+    ImVector<ImGuiPopupData>OpenPopupStack;                     // Which popups are open (persistent)
+    ImVector<ImGuiPopupData>BeginPopupStack;                    // Which level of BeginPopup() we are in (reset every frame)
+
+    // Gamepad/keyboard Navigation
+    ImGuiWindow*            NavWindow;                          // Focused window for navigation. Could be called 'FocusWindow'
+    ImGuiID                 NavId;                              // Focused item for navigation
+    ImGuiID                 NavFocusScopeId;
+    ImGuiID                 NavActivateId;                      // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem()
+    ImGuiID                 NavActivateDownId;                  // ~~ IsNavInputDown(ImGuiNavInput_Activate) ? NavId : 0
+    ImGuiID                 NavActivatePressedId;               // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0
+    ImGuiID                 NavInputId;                         // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0
+    ImGuiID                 NavJustTabbedId;                    // Just tabbed to this id.
+    ImGuiID                 NavJustMovedToId;                   // Just navigated to this id (result of a successfully MoveRequest).
+    ImGuiID                 NavJustMovedToFocusScopeId;         // Just navigated to this focus scope id (result of a successfully MoveRequest).
+    ImGuiID                 NavNextActivateId;                  // Set by ActivateItem(), queued until next frame.
+    ImGuiInputSource        NavInputSource;                     // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard.
+    ImRect                  NavScoringRectScreen;               // Rectangle used for scoring, in screen space. Based of window->DC.NavRefRectRel[], modified for directional navigation scoring.
+    int                     NavScoringCount;                    // Metrics for debugging
+    ImGuiNavLayer           NavLayer;                           // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
+    int                     NavIdTabCounter;                    // == NavWindow->DC.FocusIdxTabCounter at time of NavId processing
+    bool                    NavIdIsAlive;                       // Nav widget has been seen this frame ~~ NavRefRectRel is valid
+    bool                    NavMousePosDirty;                   // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
+    bool                    NavDisableHighlight;                // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover)
+    bool                    NavDisableMouseHover;               // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again.
+    bool                    NavAnyRequest;                      // ~~ NavMoveRequest || NavInitRequest
+    bool                    NavInitRequest;                     // Init request for appearing window to select first item
+    bool                    NavInitRequestFromMove;
+    ImGuiID                 NavInitResultId;
+    ImRect                  NavInitResultRectRel;
+    bool                    NavMoveFromClampedRefRect;          // Set by manual scrolling, if we scroll to a point where NavId isn't visible we reset navigation from visible items
+    bool                    NavMoveRequest;                     // Move request for this frame
+    ImGuiNavMoveFlags       NavMoveRequestFlags;
+    ImGuiNavForward         NavMoveRequestForward;              // None / ForwardQueued / ForwardActive (this is used to navigate sibling parent menus from a child menu)
+    ImGuiDir                NavMoveDir, NavMoveDirLast;         // Direction of the move request (left/right/up/down), direction of the previous move request
+    ImGuiDir                NavMoveClipDir;                     // FIXME-NAV: Describe the purpose of this better. Might want to rename?
+    ImGuiNavMoveResult      NavMoveResultLocal;                 // Best move request candidate within NavWindow
+    ImGuiNavMoveResult      NavMoveResultLocalVisibleSet;       // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
+    ImGuiNavMoveResult      NavMoveResultOther;                 // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
+
+    // Navigation: Windowing (CTRL+TAB, holding Menu button + directional pads to move/resize)
+    ImGuiWindow*            NavWindowingTarget;                 // When selecting a window (holding Menu+FocusPrev/Next, or equivalent of CTRL-TAB) this window is temporarily displayed top-most.
+    ImGuiWindow*            NavWindowingTargetAnim;             // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f
+    ImGuiWindow*            NavWindowingList;
+    float                   NavWindowingTimer;
+    float                   NavWindowingHighlightAlpha;
+    bool                    NavWindowingToggleLayer;
+
+    // Legacy Focus/Tabbing system (older than Nav, active even if Nav is disabled, misnamed. FIXME-NAV: This needs a redesign!)
+    ImGuiWindow*            FocusRequestCurrWindow;             //
+    ImGuiWindow*            FocusRequestNextWindow;             //
+    int                     FocusRequestCurrCounterRegular;     // Any item being requested for focus, stored as an index (we on layout to be stable between the frame pressing TAB and the next frame, semi-ouch)
+    int                     FocusRequestCurrCounterTabStop;     // Tab item being requested for focus, stored as an index
+    int                     FocusRequestNextCounterRegular;     // Stored for next frame
+    int                     FocusRequestNextCounterTabStop;     // "
+    bool                    FocusTabPressed;                    //
+
+    // Render
+    ImDrawData              DrawData;                           // Main ImDrawData instance to pass render information to the user
+    ImDrawDataBuilder       DrawDataBuilder;
+    float                   DimBgRatio;                         // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
+    ImDrawList              BackgroundDrawList;                 // First draw list to be rendered.
+    ImDrawList              ForegroundDrawList;                 // Last draw list to be rendered. This is where we the render software mouse cursor (if io.MouseDrawCursor is set) and most debug overlays.
+    ImGuiMouseCursor        MouseCursor;
+
+    // Drag and Drop
+    bool                    DragDropActive;
+    bool                    DragDropWithinSource;               // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source.
+    bool                    DragDropWithinTarget;               // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target.
+    ImGuiDragDropFlags      DragDropSourceFlags;
+    int                     DragDropSourceFrameCount;
+    int                     DragDropMouseButton;
+    ImGuiPayload            DragDropPayload;
+    ImRect                  DragDropTargetRect;                 // Store rectangle of current target candidate (we favor small targets when overlapping)
+    ImGuiID                 DragDropTargetId;
+    ImGuiDragDropFlags      DragDropAcceptFlags;
+    float                   DragDropAcceptIdCurrRectSurface;    // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
+    ImGuiID                 DragDropAcceptIdCurr;               // Target item id (set at the time of accepting the payload)
+    ImGuiID                 DragDropAcceptIdPrev;               // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
+    int                     DragDropAcceptFrameCount;           // Last time a target expressed a desire to accept the source
+    ImVector<unsigned char> DragDropPayloadBufHeap;             // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
+    unsigned char           DragDropPayloadBufLocal[16];        // Local buffer for small payloads
+
+    // Table
+    ImGuiTable*                     CurrentTable;
+    ImPool<ImGuiTable>              Tables;
+    ImVector<ImGuiPtrOrIndex>       CurrentTableStack;
+    ImVector<ImDrawChannel>         DrawChannelsTempMergeBuffer;
+
+    // Tab bars
+    ImGuiTabBar*                    CurrentTabBar;
+    ImPool<ImGuiTabBar>             TabBars;
+    ImVector<ImGuiPtrOrIndex>       CurrentTabBarStack;
+    ImVector<ImGuiShrinkWidthItem>  ShrinkWidthBuffer;
+
+    // Widget state
+    ImVec2                  LastValidMousePos;
+    ImGuiInputTextState     InputTextState;
+    ImFont                  InputTextPasswordFont;
+    ImGuiID                 TempInputId;                        // Temporary text input when CTRL+clicking on a slider, etc.
+    ImGuiColorEditFlags     ColorEditOptions;                   // Store user options for color edit widgets
+    float                   ColorEditLastHue;                   // Backup of last Hue associated to LastColor[3], so we can restore Hue in lossy RGB<>HSV round trips
+    float                   ColorEditLastSat;                   // Backup of last Saturation associated to LastColor[3], so we can restore Saturation in lossy RGB<>HSV round trips
+    float                   ColorEditLastColor[3];
+    ImVec4                  ColorPickerRef;                     // Initial/reference color at the time of opening the color picker.
+    bool                    DragCurrentAccumDirty;
+    float                   DragCurrentAccum;                   // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
+    float                   DragSpeedDefaultRatio;              // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
+    float                   ScrollbarClickDeltaToGrabCenter;    // Distance between mouse and center of grab box, normalized in parent space. Use storage?
+    int                     TooltipOverrideCount;
+    ImVector<char>          PrivateClipboard;                   // If no custom clipboard handler is defined
+    ImVector<ImGuiID>       MenusIdSubmittedThisFrame;          // A list of menu IDs that were rendered at least once
+
+    // Platform support
+    ImVec2                  PlatformImePos;                     // Cursor position request & last passed to the OS Input Method Editor
+    ImVec2                  PlatformImeLastPos;
+
+    // Settings
+    bool                    SettingsLoaded;
+    float                   SettingsDirtyTimer;                 // Save .ini Settings to memory when time reaches zero
+    ImGuiTextBuffer         SettingsIniData;                    // In memory .ini settings
+    ImVector<ImGuiSettingsHandler>      SettingsHandlers;       // List of .ini settings handlers
+    ImChunkStream<ImGuiWindowSettings>  SettingsWindows;        // ImGuiWindow .ini settings entries
+    ImChunkStream<ImGuiTableSettings>   SettingsTables;         // ImGuiTable .ini settings entries
+
+    // Capture/Logging
+    bool                    LogEnabled;
+    ImGuiLogType            LogType;
+    ImFileHandle            LogFile;                            // If != NULL log to stdout/ file
+    ImGuiTextBuffer         LogBuffer;                          // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
+    float                   LogLinePosY;
+    bool                    LogLineFirstItem;
+    int                     LogDepthRef;
+    int                     LogDepthToExpand;
+    int                     LogDepthToExpandDefault;            // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
+
+    // Debug Tools
+    bool                    DebugItemPickerActive;
+    ImGuiID                 DebugItemPickerBreakId;             // Will call IM_DEBUG_BREAK() when encountering this id
+
+    // Misc
+    float                   FramerateSecPerFrame[120];          // Calculate estimate of framerate for user over the last 2 seconds.
+    int                     FramerateSecPerFrameIdx;
+    float                   FramerateSecPerFrameAccum;
+    int                     WantCaptureMouseNextFrame;          // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags
+    int                     WantCaptureKeyboardNextFrame;
+    int                     WantTextInputNextFrame;
+    char                    TempBuffer[1024*3+1];               // Temporary text buffer
+
+    ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData)
+    {
+        Initialized = false;
+        Font = NULL;
+        FontSize = FontBaseSize = 0.0f;
+        FontAtlasOwnedByContext = shared_font_atlas ? false : true;
+        IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
+        Time = 0.0f;
+        FrameCount = 0;
+        FrameCountEnded = FrameCountRendered = -1;
+        WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false;
+
+        WindowsActiveCount = 0;
+        CurrentWindow = NULL;
+        HoveredWindow = NULL;
+        HoveredRootWindow = NULL;
+        MovingWindow = NULL;
+        WheelingWindow = NULL;
+        WheelingWindowTimer = 0.0f;
+
+        HoveredId = 0;
+        HoveredIdAllowOverlap = false;
+        HoveredIdPreviousFrame = 0;
+        HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
+        ActiveId = 0;
+        ActiveIdIsAlive = 0;
+        ActiveIdTimer = 0.0f;
+        ActiveIdIsJustActivated = false;
+        ActiveIdAllowOverlap = false;
+        ActiveIdHasBeenPressedBefore = false;
+        ActiveIdHasBeenEditedBefore = false;
+        ActiveIdHasBeenEditedThisFrame = false;
+        ActiveIdUsingNavDirMask = 0x00;
+        ActiveIdUsingNavInputMask = 0x00;
+        ActiveIdUsingKeyInputMask = 0x00;
+        ActiveIdClickOffset = ImVec2(-1,-1);
+        ActiveIdWindow = NULL;
+        ActiveIdSource = ImGuiInputSource_None;
+        ActiveIdMouseButton = 0;
+        ActiveIdPreviousFrame = 0;
+        ActiveIdPreviousFrameIsAlive = false;
+        ActiveIdPreviousFrameHasBeenEditedBefore = false;
+        ActiveIdPreviousFrameWindow = NULL;
+        LastActiveId = 0;
+        LastActiveIdTimer = 0.0f;
+
+        NavWindow = NULL;
+        NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavInputId = 0;
+        NavJustTabbedId = NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0;
+        NavInputSource = ImGuiInputSource_None;
+        NavScoringRectScreen = ImRect();
+        NavScoringCount = 0;
+        NavLayer = ImGuiNavLayer_Main;
+        NavIdTabCounter = INT_MAX;
+        NavIdIsAlive = false;
+        NavMousePosDirty = false;
+        NavDisableHighlight = true;
+        NavDisableMouseHover = false;
+        NavAnyRequest = false;
+        NavInitRequest = false;
+        NavInitRequestFromMove = false;
+        NavInitResultId = 0;
+        NavMoveFromClampedRefRect = false;
+        NavMoveRequest = false;
+        NavMoveRequestFlags = ImGuiNavMoveFlags_None;
+        NavMoveRequestForward = ImGuiNavForward_None;
+        NavMoveDir = NavMoveDirLast = NavMoveClipDir = ImGuiDir_None;
+
+        NavWindowingTarget = NavWindowingTargetAnim = NavWindowingList = NULL;
+        NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
+        NavWindowingToggleLayer = false;
+
+        FocusRequestCurrWindow = FocusRequestNextWindow = NULL;
+        FocusRequestCurrCounterRegular = FocusRequestCurrCounterTabStop = INT_MAX;
+        FocusRequestNextCounterRegular = FocusRequestNextCounterTabStop = INT_MAX;
+        FocusTabPressed = false;
+
+        DimBgRatio = 0.0f;
+        BackgroundDrawList._OwnerName = "##Background"; // Give it a name for debugging
+        ForegroundDrawList._OwnerName = "##Foreground"; // Give it a name for debugging
+        MouseCursor = ImGuiMouseCursor_Arrow;
+
+        DragDropActive = DragDropWithinSource = DragDropWithinTarget = false;
+        DragDropSourceFlags = ImGuiDragDropFlags_None;
+        DragDropSourceFrameCount = -1;
+        DragDropMouseButton = -1;
+        DragDropTargetId = 0;
+        DragDropAcceptFlags = ImGuiDragDropFlags_None;
+        DragDropAcceptIdCurrRectSurface = 0.0f;
+        DragDropAcceptIdPrev = DragDropAcceptIdCurr = 0;
+        DragDropAcceptFrameCount = -1;
+        memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal));
+
+        CurrentTable = NULL;
+        CurrentTabBar = NULL;
+
+        LastValidMousePos = ImVec2(0.0f, 0.0f);
+        TempInputId = 0;
+        ColorEditOptions = ImGuiColorEditFlags__OptionsDefault;
+        ColorEditLastHue = ColorEditLastSat = 0.0f;
+        ColorEditLastColor[0] = ColorEditLastColor[1] = ColorEditLastColor[2] = FLT_MAX;
+        DragCurrentAccumDirty = false;
+        DragCurrentAccum = 0.0f;
+        DragSpeedDefaultRatio = 1.0f / 100.0f;
+        ScrollbarClickDeltaToGrabCenter = 0.0f;
+        TooltipOverrideCount = 0;
+
+        PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX);
+
+        SettingsLoaded = false;
+        SettingsDirtyTimer = 0.0f;
+
+        LogEnabled = false;
+        LogType = ImGuiLogType_None;
+        LogFile = NULL;
+        LogLinePosY = FLT_MAX;
+        LogLineFirstItem = false;
+        LogDepthRef = 0;
+        LogDepthToExpand = LogDepthToExpandDefault = 2;
+
+        DebugItemPickerActive = false;
+        DebugItemPickerBreakId = 0;
+
+        memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
+        FramerateSecPerFrameIdx = 0;
+        FramerateSecPerFrameAccum = 0.0f;
+        WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1;
+        memset(TempBuffer, 0, sizeof(TempBuffer));
+    }
+};
+
+//-----------------------------------------------------------------------------
+// ImGuiWindow
+//-----------------------------------------------------------------------------
+
+// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
+// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered.
+struct IMGUI_API ImGuiWindowTempData
+{
+    // Layout
+    ImVec2                  CursorPos;              // Current emitting position, in absolute coordinates.
+    ImVec2                  CursorPosPrevLine;
+    ImVec2                  CursorStartPos;         // Initial position after Begin(), generally ~ window position + WindowPadding.
+    ImVec2                  CursorMaxPos;           // Used to implicitly calculate the size of our contents, always growing during the frame. Used to calculate window->ContentSize at the beginning of next frame
+    ImVec2                  CurrLineSize;
+    ImVec2                  PrevLineSize;
+    float                   CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
+    float                   PrevLineTextBaseOffset;
+    ImVec1                  Indent;                 // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
+    ImVec1                  ColumnsOffset;          // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
+    ImVec1                  GroupOffset;
+
+    // Last item status
+    ImGuiID                 LastItemId;             // ID for last item
+    ImGuiItemStatusFlags    LastItemStatusFlags;    // Status flags for last item (see ImGuiItemStatusFlags_)
+    ImRect                  LastItemRect;           // Interaction rect for last item
+    ImRect                  LastItemDisplayRect;    // End-user display rect for last item (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect)
+
+    // Keyboard/Gamepad navigation
+    ImGuiNavLayer           NavLayerCurrent;        // Current layer, 0..31 (we currently only use 0..1)
+    int                     NavLayerCurrentMask;    // = (1 << NavLayerCurrent) used by ItemAdd prior to clipping.
+    int                     NavLayerActiveMask;     // Which layer have been written to (result from previous frame)
+    int                     NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame)
+    ImGuiID                 NavFocusScopeIdCurrent; // Current focus scope ID while appending
+    bool                    NavHideHighlightOneFrame;
+    bool                    NavHasScroll;           // Set when scrolling can be used (ScrollMax > 0.0f)
+
+    // Miscellaneous
+    bool                    MenuBarAppending;       // FIXME: Remove this
+    ImVec2                  MenuBarOffset;          // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
+    ImGuiMenuColumns        MenuColumns;            // Simplified columns storage for menu items measurement
+    int                     TreeDepth;              // Current tree depth.
+    ImU32                   TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
+    ImVector<ImGuiWindow*>  ChildWindows;
+    ImGuiStorage*           StateStorage;           // Current persistent per-window storage (store e.g. tree node open/close state)
+    ImGuiColumns*           CurrentColumns;         // Current columns set
+    ImGuiTable*             CurrentTable;           // Current table set
+    ImGuiLayoutType         LayoutType;
+    ImGuiLayoutType         ParentLayoutType;       // Layout type of parent window at the time of Begin()
+    int                     FocusCounterRegular;    // (Legacy Focus/Tabbing system) Sequential counter, start at -1 and increase as assigned via FocusableItemRegister() (FIXME-NAV: Needs redesign)
+    int                     FocusCounterTabStop;    // (Legacy Focus/Tabbing system) Same, but only count widgets which you can Tab through.
+
+    // Local parameters stacks
+    // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
+    ImGuiItemFlags          ItemFlags;              // == ItemFlagsStack.back() [empty == ImGuiItemFlags_Default]
+    float                   ItemWidth;              // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window
+    float                   TextWrapPos;            // == TextWrapPosStack.back() [empty == -1.0f]
+    ImVector<ImGuiItemFlags>ItemFlagsStack;
+    ImVector<float>         ItemWidthStack;
+    ImVector<float>         TextWrapPosStack;
+    ImVector<ImGuiGroupData>GroupStack;
+    short                   StackSizesBackup[6];    // Store size of various stacks for asserting
+
+    ImGuiWindowTempData()
+    {
+        CursorPos = CursorPosPrevLine = CursorStartPos = CursorMaxPos = ImVec2(0.0f, 0.0f);
+        CurrLineSize = PrevLineSize = ImVec2(0.0f, 0.0f);
+        CurrLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f;
+        Indent = ImVec1(0.0f);
+        ColumnsOffset = ImVec1(0.0f);
+        GroupOffset = ImVec1(0.0f);
+
+        LastItemId = 0;
+        LastItemStatusFlags = ImGuiItemStatusFlags_None;
+        LastItemRect = LastItemDisplayRect = ImRect();
+
+        NavLayerActiveMask = NavLayerActiveMaskNext = 0x00;
+        NavLayerCurrent = ImGuiNavLayer_Main;
+        NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+        NavFocusScopeIdCurrent = 0;
+        NavHideHighlightOneFrame = false;
+        NavHasScroll = false;
+
+        MenuBarAppending = false;
+        MenuBarOffset = ImVec2(0.0f, 0.0f);
+        TreeDepth = 0;
+        TreeJumpToParentOnPopMask = 0x00;
+        StateStorage = NULL;
+        CurrentColumns = NULL;
+        CurrentTable = NULL;
+        LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical;
+        FocusCounterRegular = FocusCounterTabStop = -1;
+
+        ItemFlags = ImGuiItemFlags_Default_;
+        ItemWidth = 0.0f;
+        TextWrapPos = -1.0f;
+        memset(StackSizesBackup, 0, sizeof(StackSizesBackup));
+    }
+};
+
+// Storage for one window
+struct IMGUI_API ImGuiWindow
+{
+    char*                   Name;                               // Window name, owned by the window.
+    ImGuiID                 ID;                                 // == ImHashStr(Name)
+    ImGuiWindowFlags        Flags;                              // See enum ImGuiWindowFlags_
+    ImVec2                  Pos;                                // Position (always rounded-up to nearest pixel)
+    ImVec2                  Size;                               // Current size (==SizeFull or collapsed title bar size)
+    ImVec2                  SizeFull;                           // Size when non collapsed
+    ImVec2                  ContentSize;                        // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding.
+    ImVec2                  ContentSizeExplicit;                // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
+    ImVec2                  WindowPadding;                      // Window padding at the time of Begin().
+    float                   WindowRounding;                     // Window rounding at the time of Begin().
+    float                   WindowBorderSize;                   // Window border size at the time of Begin().
+    int                     NameBufLen;                         // Size of buffer storing Name. May be larger than strlen(Name)!
+    ImGuiID                 MoveId;                             // == window->GetID("#MOVE")
+    ImGuiID                 ChildId;                            // ID of corresponding item in parent window (for navigation to return from child window to parent window)
+    ImVec2                  Scroll;
+    ImVec2                  ScrollMax;
+    ImVec2                  ScrollTarget;                       // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
+    ImVec2                  ScrollTargetCenterRatio;            // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
+    ImVec2                  ScrollbarSizes;                     // Size taken by scrollbars on each axis
+    bool                    ScrollbarX, ScrollbarY;             // Are scrollbars visible?
+    bool                    Active;                             // Set to true on Begin(), unless Collapsed
+    bool                    WasActive;
+    bool                    WriteAccessed;                      // Set to true when any widget access the current window
+    bool                    Collapsed;                          // Set when collapsing window to become only title-bar
+    bool                    WantCollapseToggle;
+    bool                    SkipItems;                          // Set when items can safely be all clipped (e.g. window not visible or collapsed)
+    bool                    Appearing;                          // Set during the frame where the window is appearing (or re-appearing)
+    bool                    Hidden;                             // Do not display (== (HiddenFrames*** > 0))
+    bool                    IsFallbackWindow;                   // Set on the "Debug##Default" window.
+    bool                    HasCloseButton;                     // Set when the window has a close button (p_open != NULL)
+    signed char             ResizeBorderHeld;                   // Current border being held for resize (-1: none, otherwise 0-3)
+    short                   BeginCount;                         // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
+    short                   BeginOrderWithinParent;             // Order within immediate parent window, if we are a child window. Otherwise 0.
+    short                   BeginOrderWithinContext;            // Order within entire imgui context. This is mostly used for debugging submission order related issues.
+    ImGuiID                 PopupId;                            // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
+    ImS8                    AutoFitFramesX, AutoFitFramesY;
+    ImS8                    AutoFitChildAxises;
+    bool                    AutoFitOnlyGrows;
+    ImGuiDir                AutoPosLastDirection;
+    int                     HiddenFramesCanSkipItems;           // Hide the window for N frames
+    int                     HiddenFramesCannotSkipItems;        // Hide the window for N frames while allowing items to be submitted so we can measure their size
+    ImGuiCond               SetWindowPosAllowFlags;             // store acceptable condition flags for SetNextWindowPos() use.
+    ImGuiCond               SetWindowSizeAllowFlags;            // store acceptable condition flags for SetNextWindowSize() use.
+    ImGuiCond               SetWindowCollapsedAllowFlags;       // store acceptable condition flags for SetNextWindowCollapsed() use.
+    ImVec2                  SetWindowPosVal;                    // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
+    ImVec2                  SetWindowPosPivot;                  // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
+
+    ImVector<ImGuiID>       IDStack;                            // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
+    ImGuiWindowTempData     DC;                                 // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
+
+    // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer.
+    // The main 'OuterRect', omitted as a field, is window->Rect().
+    ImRect                  OuterRectClipped;                   // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
+    ImRect                  InnerRect;                          // Inner rectangle (omit title bar, menu bar, scroll bar)
+    ImRect                  InnerClipRect;                      // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
+    ImRect                  WorkRect;                           // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward).
+    ImRect                  ClipRect;                           // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
+    ImRect                  ContentRegionRect;                  // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
+
+    int                     LastFrameActive;                    // Last frame number the window was Active.
+    float                   LastTimeActive;                     // Last timestamp the window was Active (using float as we don't need high precision there)
+    float                   ItemWidthDefault;
+    ImGuiStorage            StateStorage;
+    ImVector<ImGuiColumns>  ColumnsStorage;
+    float                   FontWindowScale;                    // User scale multiplier per-window, via SetWindowFontScale()
+    int                     SettingsOffset;                     // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
+
+    ImDrawList*             DrawList;                           // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
+    ImDrawList              DrawListInst;
+    ImGuiWindow*            ParentWindow;                       // If we are a child _or_ popup window, this is pointing to our parent. Otherwise NULL.
+    ImGuiWindow*            RootWindow;                         // Point to ourself or first ancestor that is not a child window.
+    ImGuiWindow*            RootWindowForTitleBarHighlight;     // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
+    ImGuiWindow*            RootWindowForNav;                   // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
+
+    ImGuiWindow*            NavLastChildNavWindow;              // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.)
+    ImGuiID                 NavLastIds[ImGuiNavLayer_COUNT];    // Last known NavId for this window, per layer (0/1)
+    ImRect                  NavRectRel[ImGuiNavLayer_COUNT];    // Reference rectangle, in window relative space
+
+    bool                    MemoryCompacted;
+    int                     MemoryDrawListIdxCapacity;
+    int                     MemoryDrawListVtxCapacity;
+
+public:
+    ImGuiWindow(ImGuiContext* context, const char* name);
+    ~ImGuiWindow();
+
+    ImGuiID     GetID(const char* str, const char* str_end = NULL);
+    ImGuiID     GetID(const void* ptr);
+    ImGuiID     GetID(int n);
+    ImGuiID     GetIDNoKeepAlive(const char* str, const char* str_end = NULL);
+    ImGuiID     GetIDNoKeepAlive(const void* ptr);
+    ImGuiID     GetIDNoKeepAlive(int n);
+    ImGuiID     GetIDFromRectangle(const ImRect& r_abs);
+
+    // We don't use g.FontSize because the window may be != g.CurrentWidow.
+    ImRect      Rect() const                { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); }
+    float       CalcFontSize() const        { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
+    float       TitleBarHeight() const      { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; }
+    ImRect      TitleBarRect() const        { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
+    float       MenuBarHeight() const       { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; }
+    ImRect      MenuBarRect() const         { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
+};
+
+// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
+struct ImGuiItemHoveredDataBackup
+{
+    ImGuiID                 LastItemId;
+    ImGuiItemStatusFlags    LastItemStatusFlags;
+    ImRect                  LastItemRect;
+    ImRect                  LastItemDisplayRect;
+
+    ImGuiItemHoveredDataBackup() { Backup(); }
+    void Backup()           { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemStatusFlags = window->DC.LastItemStatusFlags; LastItemRect = window->DC.LastItemRect; LastItemDisplayRect = window->DC.LastItemDisplayRect; }
+    void Restore() const    { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemStatusFlags = LastItemStatusFlags; window->DC.LastItemRect = LastItemRect; window->DC.LastItemDisplayRect = LastItemDisplayRect; }
+};
+
+//-----------------------------------------------------------------------------
+// Tab bar, tab item
+//-----------------------------------------------------------------------------
+
+// Extend ImGuiTabBarFlags_
+enum ImGuiTabBarFlagsPrivate_
+{
+    ImGuiTabBarFlags_DockNode                   = 1 << 20,  // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around]
+    ImGuiTabBarFlags_IsFocused                  = 1 << 21,
+    ImGuiTabBarFlags_SaveSettings               = 1 << 22   // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs
+};
+
+// Extend ImGuiTabItemFlags_
+enum ImGuiTabItemFlagsPrivate_
+{
+    ImGuiTabItemFlags_NoCloseButton             = 1 << 20   // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout)
+};
+
+// Storage for one active tab item (sizeof() 26~32 bytes)
+struct ImGuiTabItem
+{
+    ImGuiID             ID;
+    ImGuiTabItemFlags   Flags;
+    int                 LastFrameVisible;
+    int                 LastFrameSelected;      // This allows us to infer an ordered list of the last activated tabs with little maintenance
+    int                 NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
+    float               Offset;                 // Position relative to beginning of tab
+    float               Width;                  // Width currently displayed
+    float               ContentWidth;           // Width of actual contents, stored during BeginTabItem() call
+
+    ImGuiTabItem()      { ID = 0; Flags = ImGuiTabItemFlags_None; LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; Offset = Width = ContentWidth = 0.0f; }
+};
+
+// Storage for a tab bar (sizeof() 92~96 bytes)
+struct ImGuiTabBar
+{
+    ImVector<ImGuiTabItem> Tabs;
+    ImGuiID             ID;                     // Zero for tab-bars used by docking
+    ImGuiID             SelectedTabId;          // Selected tab/window
+    ImGuiID             NextSelectedTabId;
+    ImGuiID             VisibleTabId;           // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
+    int                 CurrFrameVisible;
+    int                 PrevFrameVisible;
+    ImRect              BarRect;
+    float               LastTabContentHeight;   // Record the height of contents submitted below the tab bar
+    float               OffsetMax;              // Distance from BarRect.Min.x, locked during layout
+    float               OffsetMaxIdeal;         // Ideal offset if all tabs were visible and not clipped
+    float               OffsetNextTab;          // Distance from BarRect.Min.x, incremented with each BeginTabItem() call, not used if ImGuiTabBarFlags_Reorderable if set.
+    float               ScrollingAnim;
+    float               ScrollingTarget;
+    float               ScrollingTargetDistToVisibility;
+    float               ScrollingSpeed;
+    ImGuiTabBarFlags    Flags;
+    ImGuiID             ReorderRequestTabId;
+    ImS8                ReorderRequestDir;
+    bool                WantLayout;
+    bool                VisibleTabWasSubmitted;
+    short               LastTabItemIdx;         // For BeginTabItem()/EndTabItem()
+    ImVec2              FramePadding;           // style.FramePadding locked at the time of BeginTabBar()
+    ImGuiTextBuffer     TabsNames;              // For non-docking tab bar we re-append names in a contiguous buffer.
+
+    ImGuiTabBar();
+    int                 GetTabOrder(const ImGuiTabItem* tab) const  { return Tabs.index_from_ptr(tab); }
+    const char*         GetTabName(const ImGuiTabItem* tab) const
+    {
+        IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
+        return TabsNames.Buf.Data + tab->NameOffset;
+    }
+};
+
+//-----------------------------------------------------------------------------
+// Internal API
+// No guarantee of forward compatibility here.
+//-----------------------------------------------------------------------------
+
+namespace ImGui
+{
+    // Windows
+    // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
+    // If this ever crash because g.CurrentWindow is NULL it means that either
+    // - ImGui::NewFrame() has never been called, which is illegal.
+    // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
+    inline    ImGuiWindow*  GetCurrentWindowRead()      { ImGuiContext& g = *GImGui; return g.CurrentWindow; }
+    inline    ImGuiWindow*  GetCurrentWindow()          { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; }
+    IMGUI_API ImGuiWindow*  FindWindowByID(ImGuiID id);
+    IMGUI_API ImGuiWindow*  FindWindowByName(const char* name);
+    IMGUI_API void          UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window);
+    IMGUI_API ImVec2        CalcWindowExpectedSize(ImGuiWindow* window);
+    IMGUI_API bool          IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
+    IMGUI_API bool          IsWindowNavFocusable(ImGuiWindow* window);
+    IMGUI_API ImRect        GetWindowAllowedExtentRect(ImGuiWindow* window);
+    IMGUI_API void          SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
+    IMGUI_API void          SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
+    IMGUI_API void          SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
+
+    // Windows: Display Order and Focus Order
+    IMGUI_API void          FocusWindow(ImGuiWindow* window);
+    IMGUI_API void          FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window);
+    IMGUI_API void          BringWindowToFocusFront(ImGuiWindow* window);
+    IMGUI_API void          BringWindowToDisplayFront(ImGuiWindow* window);
+    IMGUI_API void          BringWindowToDisplayBack(ImGuiWindow* window);
+
+    // Fonts, drawing
+    IMGUI_API void          SetCurrentFont(ImFont* font);
+    inline ImFont*          GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
+    inline ImDrawList*      GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); ImGuiContext& g = *GImGui; return &g.ForegroundDrawList; } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches.
+
+    // Init
+    IMGUI_API void          Initialize(ImGuiContext* context);
+    IMGUI_API void          Shutdown(ImGuiContext* context);    // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
+
+    // NewFrame
+    IMGUI_API void          UpdateHoveredWindowAndCaptureFlags();
+    IMGUI_API void          StartMouseMovingWindow(ImGuiWindow* window);
+    IMGUI_API void          UpdateMouseMovingWindowNewFrame();
+    IMGUI_API void          UpdateMouseMovingWindowEndFrame();
+
+    // Settings
+    IMGUI_API void                  MarkIniSettingsDirty();
+    IMGUI_API void                  MarkIniSettingsDirty(ImGuiWindow* window);
+    IMGUI_API ImGuiWindowSettings*  CreateNewWindowSettings(const char* name);
+    IMGUI_API ImGuiWindowSettings*  FindWindowSettings(ImGuiID id);
+    IMGUI_API ImGuiWindowSettings*  FindOrCreateWindowSettings(const char* name);
+    IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
+
+    // Scrolling
+    IMGUI_API void          SetScrollX(ImGuiWindow* window, float new_scroll_x);
+    IMGUI_API void          SetScrollY(ImGuiWindow* window, float new_scroll_y);
+    IMGUI_API void          SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio = 0.5f);
+    IMGUI_API void          SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio = 0.5f);
+    IMGUI_API ImVec2        ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect);
+
+    // Basic Accessors
+    inline ImGuiID          GetItemID()     { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemId; }
+    inline ImGuiItemStatusFlags GetItemStatusFlags() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemStatusFlags; }
+    inline ImGuiID          GetActiveID()   { ImGuiContext& g = *GImGui; return g.ActiveId; }
+    inline ImGuiID          GetFocusID()    { ImGuiContext& g = *GImGui; return g.NavId; }
+    IMGUI_API void          SetActiveID(ImGuiID id, ImGuiWindow* window);
+    IMGUI_API void          SetFocusID(ImGuiID id, ImGuiWindow* window);
+    IMGUI_API void          ClearActiveID();
+    IMGUI_API ImGuiID       GetHoveredID();
+    IMGUI_API void          SetHoveredID(ImGuiID id);
+    IMGUI_API void          KeepAliveID(ImGuiID id);
+    IMGUI_API void          MarkItemEdited(ImGuiID id);     // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function.
+    IMGUI_API void          PushOverrideID(ImGuiID id);     // Push given value at the top of the ID stack (whereas PushID combines old and new hashes)
+
+    // Basic Helpers for widget code
+    IMGUI_API void          ItemSize(const ImVec2& size, float text_baseline_y = -1.0f);
+    IMGUI_API void          ItemSize(const ImRect& bb, float text_baseline_y = -1.0f);
+    IMGUI_API bool          ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL);
+    IMGUI_API bool          ItemHoverable(const ImRect& bb, ImGuiID id);
+    IMGUI_API bool          IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
+    IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, ImGuiID id);   // Return true if focus is requested
+    IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window);
+    IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_w, float default_h);
+    IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
+    IMGUI_API void          PushMultiItemsWidths(int components, float width_full);
+    IMGUI_API void          PushItemFlag(ImGuiItemFlags option, bool enabled);
+    IMGUI_API void          PopItemFlag();
+    IMGUI_API bool          IsItemToggledSelection();                           // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
+    IMGUI_API ImVec2        GetContentRegionMaxAbs();
+    IMGUI_API void          ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
+
+    // Logging/Capture
+    IMGUI_API void          LogBegin(ImGuiLogType type, int auto_open_depth);   // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
+    IMGUI_API void          LogToBuffer(int auto_open_depth = -1);              // Start logging/capturing to internal buffer
+
+    // Popups, Modals, Tooltips
+    IMGUI_API bool          BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags);
+    IMGUI_API void          OpenPopupEx(ImGuiID id);
+    IMGUI_API void          ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
+    IMGUI_API void          ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
+    IMGUI_API bool          IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack!
+    IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
+    IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags);
+    IMGUI_API ImGuiWindow*  GetTopMostPopupModal();
+    IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window);
+    IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default);
+
+    // Navigation
+    IMGUI_API void          NavInitWindow(ImGuiWindow* window, bool force_reinit);
+    IMGUI_API bool          NavMoveRequestButNoResultYet();
+    IMGUI_API void          NavMoveRequestCancel();
+    IMGUI_API void          NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags);
+    IMGUI_API void          NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags);
+    IMGUI_API float         GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode);
+    IMGUI_API ImVec2        GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f);
+    IMGUI_API int           CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
+    IMGUI_API void          ActivateItem(ImGuiID id);   // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again.
+    IMGUI_API void          SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id);
+    IMGUI_API void          SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
+
+    // Focus scope (WIP)
+    IMGUI_API void          PushFocusScope(ImGuiID id);     // Note: this is storing in same stack as IDStack, so Push/Pop mismatch will be reported there.
+    IMGUI_API void          PopFocusScope();
+    inline ImGuiID          GetFocusScopeID()               { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; }
+
+    // Inputs
+    // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
+    inline bool             IsActiveIdUsingNavDir(ImGuiDir dir)                         { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
+    inline bool             IsActiveIdUsingNavInput(ImGuiNavInput input)                { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
+    inline bool             IsActiveIdUsingKey(ImGuiKey key)                            { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; }
+    IMGUI_API bool          IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
+    inline bool             IsKeyPressedMap(ImGuiKey key, bool repeat = true)           { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; }
+    inline bool             IsNavInputDown(ImGuiNavInput n)                             { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
+    inline bool             IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm)      { return (GetNavInputAmount(n, rm) > 0.0f); }
+
+    // Drag and Drop
+    IMGUI_API bool          BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
+    IMGUI_API void          ClearDragDrop();
+    IMGUI_API bool          IsDragDropPayloadBeingAccepted();
+
+    // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables api)
+    IMGUI_API void          BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
+    IMGUI_API void          EndColumns();                                                             // close columns
+    IMGUI_API void          PushColumnClipRect(int column_index);
+    IMGUI_API void          PushColumnsBackground();
+    IMGUI_API void          PopColumnsBackground();
+    IMGUI_API ImGuiID       GetColumnsID(const char* str_id, int count);
+    IMGUI_API ImGuiColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id);
+    IMGUI_API float         GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm);
+    IMGUI_API float         GetColumnNormFromOffset(const ImGuiColumns* columns, float offset);
+}
+
+#define IM_COL32_DISABLE                IM_COL32(0,0,0,1)   // Special sentinel code
+#define IMGUI_TABLE_MAX_COLUMNS         64                  // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
+#define IMGUI_TABLE_MAX_DRAW_CHANNELS   (2 + 64 * 2)        // See TableUpdateDrawChannels()
+
+// [Internal] sizeof() ~ 100
+// We use the terminology "Active" to refer to a column that is not Hidden by user or programmatically. We don't use the term "Visible" because it is ambiguous since an Active column can be non-visible because of scrolling.
+struct ImGuiTableColumn
+{
+    ImRect                  ClipRect;                       // Clipping rectangle for the column
+    ImGuiID                 UserID;                         // Optional, value passed to TableSetupColumn()
+    ImGuiTableColumnFlags   FlagsIn;                        // Flags as they were provided by user. See ImGuiTableColumnFlags_
+    ImGuiTableColumnFlags   Flags;                          // Effective flags. See ImGuiTableColumnFlags_
+    float                   MinX;                           // Absolute positions
+    float                   MaxX;
+    float                   ResizeWeight;                   //  ~1.0f. Master width data when (Flags & _WidthStretch)
+    float                   WidthRequested;                 // Master width data when !(Flags & _WidthStretch)
+    float                   WidthGiven;                     // == (MaxX - MinX). FIXME-TABLE: Store all persistent width in multiple of FontSize?
+    float                   StartXRows;                     // Start position for the frame, currently ~(MinX + CellPaddingX)
+    float                   StartXHeaders;                  
+    float                   ContentMaxPosRowsFrozen;        // Submitted contents absolute maximum position, from which we can infer width.
+    float                   ContentMaxPosRowsUnfrozen;      // (kept as float because we need to manipulate those between each cell change)
+    float                   ContentMaxPosHeadersUsed;
+    float                   ContentMaxPosHeadersDesired;
+    ImS16                   ContentWidthRowsFrozen;         // Contents width. Because row freezing is not correlated with headers/not-headers we need all 4 variants (ImDrawCmd merging uses different data than alignment code).
+    ImS16                   ContentWidthRowsUnfrozen;       // (encoded as ImS16 because we actually rarely use those width)
+    ImS16                   ContentWidthHeadersUsed;        // TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls
+    ImS16                   ContentWidthHeadersDesired;
+    ImS16                   NameOffset;                     // Offset into parent ColumnsNames[]
+    bool                    IsActive;                       // Is the column not marked Hidden by the user (regardless of clipping). We're not calling this "Visible" here because visibility also depends on clipping.
+    bool                    IsActiveNextFrame;
+    bool                    IsClipped;                      // Set when not overlapping the host window clipping rectangle. We don't use the opposite "!Visible" name because Clipped can be altered by events.
+    bool                    SkipItems;
+    ImS8                    DisplayOrder;                   // Index within Table's IndexToDisplayOrder[] (column may be reordered by users)
+    ImS8                    IndexWithinActiveSet;           // Index within active/visible set (<= IndexToDisplayOrder)
+    ImS8                    DrawChannelCurrent;             // Index within DrawSplitter.Channels[]
+    ImS8                    DrawChannelRowsBeforeFreeze;
+    ImS8                    DrawChannelRowsAfterFreeze;
+    ImS8                    PrevActiveColumn;               // Index of prev active column within Columns[], -1 if first active column
+    ImS8                    NextActiveColumn;               // Index of next active column within Columns[], -1 if last active column
+    ImS8                    AutoFitQueue;                   // Queue of 8 values for the next 8 frames to request auto-fit
+    ImS8                    CannotSkipItemsQueue;           // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem
+    ImS8                    SortOrder;                      // -1: Not sorting on this column
+    ImS8                    SortDirection;                  // enum ImGuiSortDirection_
+
+    ImGuiTableColumn()
+    {
+        memset(this, 0, sizeof(*this));
+        ResizeWeight = WidthRequested = WidthGiven = -1.0f;
+        NameOffset = -1;
+        IsActive = IsActiveNextFrame = true;
+        DisplayOrder = IndexWithinActiveSet = -1;
+        DrawChannelCurrent = DrawChannelRowsBeforeFreeze = DrawChannelRowsAfterFreeze = -1;
+        PrevActiveColumn = NextActiveColumn = -1;
+        AutoFitQueue = CannotSkipItemsQueue = (1 << 3) - 1; // Skip for three frames
+        SortOrder = -1;
+        SortDirection = ImGuiSortDirection_Ascending;
+    }
+};
+
+struct ImGuiTable
+{
+    ImGuiID                     ID;
+    ImGuiTableFlags             Flags;
+    ImVector<char>              RawData;
+    ImSpan<ImGuiTableColumn>    Columns;                    // Point within RawData[]
+    ImSpan<ImS8>                DisplayOrderToIndex;        // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1)
+    ImU64                       ActiveMaskByIndex;          // Column Index -> IsActive map (Active == not hidden by user/api) in a format adequate for iterating column without touching cold data
+    ImU64                       ActiveMaskByDisplayOrder;   // Column DisplayOrder -> IsActive map
+    ImU64                       VisibleMaskByIndex;         // Visible (== Active and not Clipped)
+    ImGuiTableFlags             SettingsSaveFlags;          // Pre-compute which data we are going to save into the .ini file (e.g. when order is not altered we won't save order)
+    int                         SettingsOffset;             // Offset in g.SettingsTables
+    int                         LastFrameActive;
+    int                         ColumnsCount;               // Number of columns declared in BeginTable()
+    int                         ColumnsActiveCount;         // Number of non-hidden columns (<= ColumnsCount)
+    int                         CurrentColumn;
+    int                         CurrentRow;
+    ImS16                       InstanceNo;                 // Count of BeginTable() calls with same ID in the same frame (generally 0)
+    ImS16                       InstanceInteracted;         // Mark which instance (generally 0) of the same ID is being interacted with
+    float                       RowPosY1;
+    float                       RowPosY2;
+    float                       RowMinHeight;               // Height submitted to TableNextRow()
+    float                       RowTextBaseline;
+    float                       RowIndentOffsetX;
+    ImGuiTableRowFlags          RowFlags : 16;              // Current row flags, see ImGuiTableRowFlags_
+    ImGuiTableRowFlags          LastRowFlags : 16;
+    int                         RowBgColorCounter;          // Counter for alternating background colors (can be fast-forwarded by e.g clipper)
+    ImU32                       RowBgColor;                 // Request for current row background color
+    ImU32                       BorderColorStrong;
+    ImU32                       BorderColorLight;
+    float                       BorderX1;
+    float                       BorderX2;
+    float                       HostIndentX;
+    float                       CellPaddingX1;              // Padding from each borders
+    float                       CellPaddingX2;
+    float                       CellPaddingY;
+    float                       CellSpacingX;               // Spacing between non-bordered cells
+    float                       LastOuterHeight;            // Outer height from last frame
+    float                       LastFirstRowHeight;         // Height of first row from last frame
+    float                       ColumnsTotalWidth;
+    float                       InnerWidth;
+    float                       ResizedColumnNextWidth;
+    ImRect                      OuterRect;                  // Note: OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
+    ImRect                      WorkRect;
+    ImRect                      InnerClipRect;
+    ImRect                      BackgroundClipRect;         // We use this to cpu-clip cell background color fill
+    ImRect                      HostClipRect;               // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window.
+    ImRect                      HostWorkRect;               // Backup of InnerWindow->WorkRect at the end of BeginTable()
+    ImVec2                      HostCursorMaxPos;           // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable()
+    ImGuiWindow*                OuterWindow;                // Parent window for the table
+    ImGuiWindow*                InnerWindow;                // Window holding the table data (== OuterWindow or a child window)
+    ImGuiTextBuffer             ColumnsNames;               // Contiguous buffer holding columns names
+    ImDrawListSplitter          DrawSplitter;               // We carry our own ImDrawList splitter to allow recursion (FIXME: could be stored outside, worst case we need 1 splitter per recursing table)
+    ImVector<ImGuiTableSortSpecsColumn> SortSpecsData;      // FIXME-OPT: Fixed-size array / small-vector pattern, optimize for single sort spec
+    ImGuiTableSortSpecs         SortSpecs;                  // Public facing sorts specs, this is what we return in TableGetSortSpecs()
+    ImS8                        SortSpecsCount;
+    ImS8                        DeclColumnsCount;           // Count calls to TableSetupColumn()
+    ImS8                        HoveredColumnBody;          // [DEBUG] Unlike HoveredColumnBorder this doesn't fulfill all Hovering rules properly. Used for debugging/tools for now.
+    ImS8                        HoveredColumnBorder;        // Index of column whose right-border is being hovered (for resizing).
+    ImS8                        ResizedColumn;              // Index of column being resized. Reset by InstanceNo==0.
+    ImS8                        LastResizedColumn;          // Index of column being resized from previous frame.
+    ImS8                        HeldHeaderColumn;           // Index of column header being held. 
+    ImS8                        ReorderColumn;              // Index of column being reordered. (not cleared)
+    ImS8                        ReorderColumnDir;           // -1 or +1
+    ImS8                        RightMostActiveColumn;      // Index of right-most non-hidden column.
+    ImS8                        LeftMostStretchedColumnDisplayOrder; // Display order of left-most stretched column.
+    ImS8                        ContextPopupColumn;         // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot
+    ImS8                        DummyDrawChannel;           // Redirect non-visible columns here.
+    ImS8                        FreezeRowsRequest;          // Requested frozen rows count
+    ImS8                        FreezeRowsCount;            // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset)
+    ImS8                        FreezeColumnsRequest;       // Requested frozen columns count
+    ImS8                        FreezeColumnsCount;         // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset)
+    bool                        IsLayoutLocked;             // Set by TableUpdateLayout() which is called when beginning the first row.
+    bool                        IsInsideRow;                // Set when inside TableBeginRow()/TableEndRow().
+    bool                        IsInitializing;
+    bool                        IsSortSpecsDirty;
+    bool                        IsUsingHeaders;             // Set when the first row had the ImGuiTableRowFlags_Headers flag.
+    bool                        IsContextPopupOpen;         // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted).
+    bool                        IsSettingsRequestLoad;
+    bool                        IsSettingsLoaded;
+    bool                        IsSettingsDirty;            // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data.
+    bool                        IsDefaultDisplayOrder;      // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1)
+    bool                        IsResetDisplayOrderRequest;
+    bool                        IsFreezeRowsPassed;         // Set when we got past the frozen row (the first one).
+    bool                        HostSkipItems;              // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis
+
+    ImGuiTable()
+    {
+        memset(this, 0, sizeof(*this));
+        SettingsOffset = -1;
+        InstanceInteracted = -1;
+        LastFrameActive = -1;
+        LastResizedColumn = -1;
+        ContextPopupColumn = -1;
+        ReorderColumn = -1;
+    }
+};
+
+// sizeof() ~ 12
+struct ImGuiTableColumnSettings
+{
+    float   WidthOrWeight;
+    ImGuiID UserID;
+    ImS8    Index;
+    ImS8    DisplayOrder;
+    ImS8    SortOrder;
+    ImS8    SortDirection : 7;
+    ImU8    Visible : 1;        // This is called Active in ImGuiTableColumn, in .ini file we call it Visible.
+
+    ImGuiTableColumnSettings()
+    {
+        WidthOrWeight = 0.0f;
+        UserID = 0;
+        Index = -1;
+        DisplayOrder = SortOrder = -1;
+        SortDirection = ImGuiSortDirection_None;
+        Visible = 1;
+    }
+};
+
+// This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.)
+struct ImGuiTableSettings
+{
+    ImGuiID                     ID;                     // Set to 0 to invalidate/delete the setting
+    ImGuiTableFlags             SaveFlags;
+    ImS8                        ColumnsCount;
+    ImS8                        ColumnsCountMax;
+
+    ImGuiTableSettings()        { memset(this, 0, sizeof(*this)); }
+    ImGuiTableColumnSettings*   GetColumnSettings()     { return (ImGuiTableColumnSettings*)(this + 1); }
+};
+
+namespace ImGui
+{
+    // [Internal]
+    IMGUI_API bool          BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
+    IMGUI_API void          TableBeginUpdateColumns(ImGuiTable* table);
+    IMGUI_API void          TableUpdateDrawChannels(ImGuiTable* table);
+    IMGUI_API void          TableUpdateLayout(ImGuiTable* table);
+    IMGUI_API void          TableUpdateBorders(ImGuiTable* table);
+    IMGUI_API void          TableSetColumnWidth(int column_n, float width);
+    IMGUI_API void          TableSetColumnWidth(ImGuiTable* table, ImGuiTableColumn* column, float width);
+    IMGUI_API void          TableDrawBorders(ImGuiTable* table);
+    IMGUI_API void          TableDrawMergeChannels(ImGuiTable* table);
+    IMGUI_API void          TableDrawContextMenu(ImGuiTable* table, int column_n);
+    IMGUI_API void          TableSortSpecsClickColumn(ImGuiTable* table, ImGuiTableColumn* column, bool add_to_existing_sort_orders);
+    IMGUI_API void          TableSortSpecsSanitize(ImGuiTable* table);
+    IMGUI_API void          TableBeginRow(ImGuiTable* table);
+    IMGUI_API void          TableEndRow(ImGuiTable* table);
+    IMGUI_API void          TableBeginCell(ImGuiTable* table, int column_n);
+    IMGUI_API void          TableEndCell(ImGuiTable* table);
+    IMGUI_API ImRect        TableGetCellRect();
+    IMGUI_API const char*   TableGetColumnName(ImGuiTable* table, int column_n);
+    IMGUI_API void          TableSetColumnAutofit(ImGuiTable* table, int column_n);
+    IMGUI_API void          PushTableBackground();
+    IMGUI_API void          PopTableBackground();
+    IMGUI_API void          TableLoadSettings(ImGuiTable* table);
+    IMGUI_API void          TableSaveSettings(ImGuiTable* table);
+    IMGUI_API ImGuiTableSettings* TableFindSettings(ImGuiTable* table);
+    IMGUI_API void*         TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
+    IMGUI_API void          TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
+    IMGUI_API void          TableSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
+
+    // Tab Bars
+    IMGUI_API bool          BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
+    IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+    IMGUI_API void          TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+    IMGUI_API void          TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
+    IMGUI_API void          TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir);
+    IMGUI_API bool          TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags);
+    IMGUI_API ImVec2        TabItemCalcSize(const char* label, bool has_close_button);
+    IMGUI_API void          TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
+    IMGUI_API bool          TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id);
+
+    // Render helpers
+    // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
+    // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
+    IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
+    IMGUI_API void          RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
+    IMGUI_API void          RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL);
+    IMGUI_API void          RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
+    IMGUI_API void          RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known);
+    IMGUI_API void          RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
+    IMGUI_API void          RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
+    IMGUI_API void          RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
+    IMGUI_API void          RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
+    IMGUI_API const char*   FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
+    IMGUI_API void          LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
+
+    // Render helpers (those functions don't access any ImGui state!)
+    IMGUI_API void          RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
+    IMGUI_API void          RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
+    IMGUI_API void          RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
+    IMGUI_API void          RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
+    IMGUI_API void          RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
+    IMGUI_API void          RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+    // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while]
+    inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); }
+    inline void RenderBullet(ImVec2 pos)                                { ImGuiWindow* window = GetCurrentWindow(); RenderBullet(window->DrawList, pos, GetColorU32(ImGuiCol_Text)); }
+#endif
+
+    // Widgets
+    IMGUI_API void          TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
+    IMGUI_API bool          ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0);
+    IMGUI_API bool          CloseButton(ImGuiID id, const ImVec2& pos);
+    IMGUI_API bool          CollapseButton(ImGuiID id, const ImVec2& pos);
+    IMGUI_API bool          ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0);
+    IMGUI_API void          Scrollbar(ImGuiAxis axis);
+    IMGUI_API bool          ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawCornerFlags rounding_corners);
+    IMGUI_API ImGuiID       GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis);
+    IMGUI_API ImGuiID       GetWindowResizeID(ImGuiWindow* window, int n); // 0..3: corners, 4..7: borders
+    IMGUI_API void          SeparatorEx(ImGuiSeparatorFlags flags);
+
+    // Widgets low-level behaviors
+    IMGUI_API bool          ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
+    IMGUI_API bool          DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags);
+    IMGUI_API bool          SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
+    IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
+    IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
+    IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextItemOpen() data, if any. May return true when logging
+    IMGUI_API void          TreePushOverrideID(ImGuiID id);
+
+    // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
+    // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
+    // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
+    template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragFlags flags);
+    template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
+    template<typename T, typename FLOAT_T>                      IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos);
+    template<typename T, typename SIGNED_T>                     IMGUI_API T     RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
+
+    // Data type helpers
+    IMGUI_API const ImGuiDataTypeInfo*  DataTypeGetInfo(ImGuiDataType data_type);
+    IMGUI_API int           DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format);
+    IMGUI_API void          DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2);
+    IMGUI_API bool          DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format);
+
+    // InputText
+    IMGUI_API bool          InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+    IMGUI_API bool          TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags);
+    IMGUI_API bool          TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format);
+    inline bool             TempInputIsActive(ImGuiID id)       { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); }
+    inline ImGuiInputTextState* GetInputTextState(ImGuiID id)   { ImGuiContext& g = *GImGui; return (g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active
+
+    // Color
+    IMGUI_API void          ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
+    IMGUI_API void          ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
+    IMGUI_API void          ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
+
+    // Plot
+    IMGUI_API void          PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size);
+
+    // Shade functions (write over already created vertices)
+    IMGUI_API void          ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
+    IMGUI_API void          ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
+
+    // Garbage collection
+    IMGUI_API void          GcCompactTransientWindowBuffers(ImGuiWindow* window);
+    IMGUI_API void          GcAwakeTransientWindowBuffers(ImGuiWindow* window);
+
+    // Debug Tools
+    inline void             DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255))    { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max, col); }
+    inline void             DebugStartItemPicker()                                  { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
+
+} // namespace ImGui
+
+// ImFontAtlas internals
+IMGUI_API bool              ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas);
+IMGUI_API void              ImFontAtlasBuildInit(ImFontAtlas* atlas);
+IMGUI_API void              ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
+IMGUI_API void              ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
+IMGUI_API void              ImFontAtlasBuildFinish(ImFontAtlas* atlas);
+IMGUI_API void              ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
+IMGUI_API void              ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
+
+// Debug Tools
+// Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item.
+#ifndef IM_DEBUG_BREAK
+#if defined(__clang__)
+#define IM_DEBUG_BREAK()    __builtin_debugtrap()
+#elif defined (_MSC_VER)
+#define IM_DEBUG_BREAK()    __debugbreak()
+#else
+#define IM_DEBUG_BREAK()    IM_ASSERT(0)    // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger!
+#endif
+#endif // #ifndef IM_DEBUG_BREAK
+
+// Test Engine Hooks (imgui_tests)
+//#define IMGUI_ENABLE_TEST_ENGINE
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+extern void                 ImGuiTestEngineHook_PreNewFrame(ImGuiContext* ctx);
+extern void                 ImGuiTestEngineHook_PostNewFrame(ImGuiContext* ctx);
+extern void                 ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
+extern void                 ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
+extern void                 ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID)                ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID)               // Register item bounding box
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS)   // Register item label and status flags (optional)
+#define IMGUI_TEST_ENGINE_LOG(_FMT, ...)                    ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__)          // Custom log entry from user land into test log
+#else
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID)                do { } while (0)
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    do { } while (0)
+#define IMGUI_TEST_ENGINE_LOG(_FMT, ...)                    do { } while (0)
+#endif
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (pop)
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imgui_widgets.cpp
@@ -1,0 +1,10112 @@
+// dear imgui, v1.76 WIP
+// (widgets code)
+
+/*
+
+Index of this file:
+
+// [SECTION] Forward Declarations
+// [SECTION] Widgets: Text, etc.
+// [SECTION] Widgets: Main (Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc.)
+// [SECTION] Widgets: Low-level Layout helpers (Spacing, Dummy, NewLine, Separator, etc.)
+// [SECTION] Widgets: ComboBox
+// [SECTION] Data Type and Data Formatting Helpers
+// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
+// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
+// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
+// [SECTION] Widgets: InputText, InputTextMultiline
+// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
+// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
+// [SECTION] Widgets: Selectable
+// [SECTION] Widgets: ListBox
+// [SECTION] Widgets: PlotLines, PlotHistogram
+// [SECTION] Widgets: Value helpers
+// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc.
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
+// [SECTION] Widgets: BeginTable, EndTable, etc.
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+#include <ctype.h>      // toupper
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h>     // intptr_t
+#else
+#include <stdint.h>     // intptr_t
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127)     // condition expression is constant
+#pragma warning (disable: 4996)     // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054)     // operator '|': deprecated between enumerations of different types
+#endif
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok.
+#pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
+#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
+#endif
+#if __has_warning("-Wdouble-promotion")
+#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#endif
+#if __has_warning("-Wdeprecated-enum-enum-conversion")
+#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked
+#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-------------------------------------------------------------------------
+// Data
+//-------------------------------------------------------------------------
+
+// Those MIN/MAX values are not define because we need to point to them
+static const signed char    IM_S8_MIN  = -128;
+static const signed char    IM_S8_MAX  = 127;
+static const unsigned char  IM_U8_MIN  = 0;
+static const unsigned char  IM_U8_MAX  = 0xFF;
+static const signed short   IM_S16_MIN = -32768;
+static const signed short   IM_S16_MAX = 32767;
+static const unsigned short IM_U16_MIN = 0;
+static const unsigned short IM_U16_MAX = 0xFFFF;
+static const ImS32          IM_S32_MIN = INT_MIN;    // (-2147483647 - 1), (0x80000000);
+static const ImS32          IM_S32_MAX = INT_MAX;    // (2147483647), (0x7FFFFFFF)
+static const ImU32          IM_U32_MIN = 0;
+static const ImU32          IM_U32_MAX = UINT_MAX;   // (0xFFFFFFFF)
+#ifdef LLONG_MIN
+static const ImS64          IM_S64_MIN = LLONG_MIN;  // (-9223372036854775807ll - 1ll);
+static const ImS64          IM_S64_MAX = LLONG_MAX;  // (9223372036854775807ll);
+#else
+static const ImS64          IM_S64_MIN = -9223372036854775807LL - 1;
+static const ImS64          IM_S64_MAX = 9223372036854775807LL;
+#endif
+static const ImU64          IM_U64_MIN = 0;
+#ifdef ULLONG_MAX
+static const ImU64          IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull);
+#else
+static const ImU64          IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
+#endif
+
+//-------------------------------------------------------------------------
+// [SECTION] Forward Declarations
+//-------------------------------------------------------------------------
+
+// For InputTextEx()
+static bool             InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data);
+static int              InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
+static ImVec2           InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Text, etc.
+//-------------------------------------------------------------------------
+// - TextEx() [Internal]
+// - TextUnformatted()
+// - Text()
+// - TextV()
+// - TextColored()
+// - TextColoredV()
+// - TextDisabled()
+// - TextDisabledV()
+// - TextWrapped()
+// - TextWrappedV()
+// - LabelText()
+// - LabelTextV()
+// - BulletText()
+// - BulletTextV()
+//-------------------------------------------------------------------------
+
+void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(text != NULL);
+    const char* text_begin = text;
+    if (text_end == NULL)
+        text_end = text + strlen(text); // FIXME-OPT
+
+    const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
+    const float wrap_pos_x = window->DC.TextWrapPos;
+    const bool wrap_enabled = (wrap_pos_x >= 0.0f);
+    if (text_end - text > 2000 && !wrap_enabled)
+    {
+        // Long text!
+        // Perform manual coarse clipping to optimize for long multi-line text
+        // - From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled.
+        // - We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line.
+        // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
+        const char* line = text;
+        const float line_height = GetTextLineHeight();
+        ImVec2 text_size(0,0);
+
+        // Lines to skip (can't skip when logging text)
+        ImVec2 pos = text_pos;
+        if (!g.LogEnabled)
+        {
+            int lines_skippable = (int)((window->ClipRect.Min.y - text_pos.y) / line_height);
+            if (lines_skippable > 0)
+            {
+                int lines_skipped = 0;
+                while (line < text_end && lines_skipped < lines_skippable)
+                {
+                    const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+                    if (!line_end)
+                        line_end = text_end;
+                    if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+                        text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+                    line = line_end + 1;
+                    lines_skipped++;
+                }
+                pos.y += lines_skipped * line_height;
+            }
+        }
+
+        // Lines to render
+        if (line < text_end)
+        {
+            ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height));
+            while (line < text_end)
+            {
+                if (IsClippedEx(line_rect, 0, false))
+                    break;
+
+                const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+                if (!line_end)
+                    line_end = text_end;
+                text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+                RenderText(pos, line, line_end, false);
+                line = line_end + 1;
+                line_rect.Min.y += line_height;
+                line_rect.Max.y += line_height;
+                pos.y += line_height;
+            }
+
+            // Count remaining lines
+            int lines_skipped = 0;
+            while (line < text_end)
+            {
+                const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+                if (!line_end)
+                    line_end = text_end;
+                if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+                    text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+                line = line_end + 1;
+                lines_skipped++;
+            }
+            pos.y += lines_skipped * line_height;
+        }
+        text_size.y = (pos - text_pos).y;
+
+        ImRect bb(text_pos, text_pos + text_size);
+        ItemSize(text_size, 0.0f);
+        ItemAdd(bb, 0);
+    }
+    else
+    {
+        const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f;
+        const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width);
+
+        ImRect bb(text_pos, text_pos + text_size);
+        ItemSize(text_size, 0.0f);
+        if (!ItemAdd(bb, 0))
+            return;
+
+        // Render (we don't hide text after ## in this end-user function)
+        RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width);
+    }
+}
+
+void ImGui::TextUnformatted(const char* text, const char* text_end)
+{
+    TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
+}
+
+void ImGui::Text(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    TextV(fmt, args);
+    va_end(args);
+}
+
+void ImGui::TextV(const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
+    TextEx(g.TempBuffer, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
+}
+
+void ImGui::TextColored(const ImVec4& col, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    TextColoredV(col, fmt, args);
+    va_end(args);
+}
+
+void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args)
+{
+    PushStyleColor(ImGuiCol_Text, col);
+    TextV(fmt, args);
+    PopStyleColor();
+}
+
+void ImGui::TextDisabled(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    TextDisabledV(fmt, args);
+    va_end(args);
+}
+
+void ImGui::TextDisabledV(const char* fmt, va_list args)
+{
+    PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]);
+    TextV(fmt, args);
+    PopStyleColor();
+}
+
+void ImGui::TextWrapped(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    TextWrappedV(fmt, args);
+    va_end(args);
+}
+
+void ImGui::TextWrappedV(const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    bool need_backup = (window->DC.TextWrapPos < 0.0f);  // Keep existing wrap position if one is already set
+    if (need_backup)
+        PushTextWrapPos(0.0f);
+    TextV(fmt, args);
+    if (need_backup)
+        PopTextWrapPos();
+}
+
+void ImGui::LabelText(const char* label, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    LabelTextV(label, fmt, args);
+    va_end(args);
+}
+
+// Add a label+text combo aligned to other label+value widgets
+void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const float w = CalcItemWidth();
+
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2));
+    const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size);
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, 0))
+        return;
+
+    // Render
+    const char* value_text_begin = &g.TempBuffer[0];
+    const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
+    RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f));
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label);
+}
+
+void ImGui::BulletText(const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    BulletTextV(fmt, args);
+    va_end(args);
+}
+
+// Text with a little bullet aligned to the typical tree node.
+void ImGui::BulletTextV(const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+
+    const char* text_begin = g.TempBuffer;
+    const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
+    const ImVec2 label_size = CalcTextSize(text_begin, text_end, false);
+    const ImVec2 total_size = ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x * 2) : 0.0f), label_size.y);  // Empty text doesn't add padding
+    ImVec2 pos = window->DC.CursorPos;
+    pos.y += window->DC.CurrLineTextBaseOffset;
+    ItemSize(total_size, 0.0f);
+    const ImRect bb(pos, pos + total_size);
+    if (!ItemAdd(bb, 0))
+        return;
+
+    // Render
+    ImU32 text_col = GetColorU32(ImGuiCol_Text);
+    RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, g.FontSize*0.5f), text_col);
+    RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Main
+//-------------------------------------------------------------------------
+// - ButtonBehavior() [Internal]
+// - Button()
+// - SmallButton()
+// - InvisibleButton()
+// - ArrowButton()
+// - CloseButton() [Internal]
+// - CollapseButton() [Internal]
+// - ScrollbarEx() [Internal]
+// - Scrollbar() [Internal]
+// - Image()
+// - ImageButton()
+// - Checkbox()
+// - CheckboxFlags()
+// - RadioButton()
+// - ProgressBar()
+// - Bullet()
+//-------------------------------------------------------------------------
+
+// The ButtonBehavior() function is key to many interactions and used by many/most widgets.
+// Because we handle so many cases (keyboard/gamepad navigation, drag and drop) and many specific behavior (via ImGuiButtonFlags_),
+// this code is a little complex.
+// By far the most common path is interacting with the Mouse using the default ImGuiButtonFlags_PressedOnClickRelease button behavior.
+// See the series of events below and the corresponding state reported by dear imgui:
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClickRelease:             return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
+//   Frame N+0 (mouse is outside bb)        -             -                -               -                  -                    -
+//   Frame N+1 (mouse moves inside bb)      -             true             -               -                  -                    -
+//   Frame N+2 (mouse button is down)       -             true             true            true               -                    true
+//   Frame N+3 (mouse button is down)       -             true             true            -                  -                    -
+//   Frame N+4 (mouse moves outside bb)     -             -                true            -                  -                    -
+//   Frame N+5 (mouse moves inside bb)      -             true             true            -                  -                    -
+//   Frame N+6 (mouse button is released)   true          true             -               -                  true                 -
+//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
+//   Frame N+8 (mouse moves outside bb)     -             -                -               -                  -                    -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClick:                    return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
+//   Frame N+2 (mouse button is down)       true          true             true            true               -                    true
+//   Frame N+3 (mouse button is down)       -             true             true            -                  -                    -
+//   Frame N+6 (mouse button is released)   -             true             -               -                  true                 -
+//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnRelease:                  return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
+//   Frame N+2 (mouse button is down)       -             true             -               -                  -                    true
+//   Frame N+3 (mouse button is down)       -             true             -               -                  -                    -
+//   Frame N+6 (mouse button is released)   true          true             -               -                  -                    -
+//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnDoubleClick:              return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
+//   Frame N+0 (mouse button is down)       -             true             -               -                  -                    true
+//   Frame N+1 (mouse button is down)       -             true             -               -                  -                    -
+//   Frame N+2 (mouse button is released)   -             true             -               -                  -                    -
+//   Frame N+3 (mouse button is released)   -             true             -               -                  -                    -
+//   Frame N+4 (mouse button is down)       true          true             true            true               -                    true
+//   Frame N+5 (mouse button is down)       -             true             true            -                  -                    -
+//   Frame N+6 (mouse button is released)   -             true             -               -                  true                 -
+//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// Note that some combinations are supported,
+// - PressedOnDragDropHold can generally be associated with any flag.
+// - PressedOnDoubleClick can be associated by PressedOnClickRelease/PressedOnRelease, in which case the second release event won't be reported.
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// The behavior of the return-value changes when ImGuiButtonFlags_Repeat is set:
+//                                         Repeat+                  Repeat+           Repeat+             Repeat+
+//                                         PressedOnClickRelease    PressedOnClick    PressedOnRelease    PressedOnDoubleClick
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+//   Frame N+0 (mouse button is down)       -                        true              -                   true
+//   ...                                    -                        -                 -                   -
+//   Frame N + RepeatDelay                  true                     true              -                   true
+//   ...                                    -                        -                 -                   -
+//   Frame N + RepeatDelay + RepeatRate*N   true                     true              -                   true
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+
+    if (flags & ImGuiButtonFlags_Disabled)
+    {
+        if (out_hovered) *out_hovered = false;
+        if (out_held) *out_held = false;
+        if (g.ActiveId == id) ClearActiveID();
+        return false;
+    }
+
+    // Default only reacts to left mouse button
+    if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0)
+        flags |= ImGuiButtonFlags_MouseButtonDefault_;
+
+    // Default behavior requires click + release inside bounding box
+    if ((flags & ImGuiButtonFlags_PressedOnMask_) == 0)
+        flags |= ImGuiButtonFlags_PressedOnDefault_;
+
+    ImGuiWindow* backup_hovered_window = g.HoveredWindow;
+    const bool flatten_hovered_children = (flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window;
+    if (flatten_hovered_children)
+        g.HoveredWindow = window;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+    if (id != 0 && window->DC.LastItemId != id)
+        ImGuiTestEngineHook_ItemAdd(&g, bb, id);
+#endif
+
+    bool pressed = false;
+    bool hovered = ItemHoverable(bb, id);
+
+    // Drag source doesn't report as hovered
+    if (hovered && g.DragDropActive && g.DragDropPayload.SourceId == id && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoDisableHover))
+        hovered = false;
+
+    // Special mode for Drag and Drop where holding button pressed for a long time while dragging another item triggers the button
+    if (g.DragDropActive && (flags & ImGuiButtonFlags_PressedOnDragDropHold) && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
+        if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+        {
+            hovered = true;
+            SetHoveredID(id);
+            if (CalcTypematicRepeatAmount(g.HoveredIdTimer + 0.0001f - g.IO.DeltaTime, g.HoveredIdTimer + 0.0001f, 0.70f, 0.00f))
+            {
+                pressed = true;
+                FocusWindow(window);
+            }
+        }
+
+    if (flatten_hovered_children)
+        g.HoveredWindow = backup_hovered_window;
+
+    // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
+    if (hovered && (flags & ImGuiButtonFlags_AllowItemOverlap) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0))
+        hovered = false;
+
+    // Mouse handling
+    if (hovered)
+    {
+        if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt))
+        {
+            // Poll buttons
+            int mouse_button_clicked = -1;
+            int mouse_button_released = -1;
+            if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseClicked[0])         { mouse_button_clicked = 0; }
+            else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseClicked[1])   { mouse_button_clicked = 1; }
+            else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseClicked[2])  { mouse_button_clicked = 2; }
+            if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0])        { mouse_button_released = 0; }
+            else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1])  { mouse_button_released = 1; }
+            else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; }
+
+            if (mouse_button_clicked != -1 && g.ActiveId != id)
+            {
+                if (flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere))
+                {
+                    SetActiveID(id, window);
+                    g.ActiveIdMouseButton = mouse_button_clicked;
+                    if (!(flags & ImGuiButtonFlags_NoNavFocus))
+                        SetFocusID(id, window);
+                    FocusWindow(window);
+                }
+                if ((flags & ImGuiButtonFlags_PressedOnClick) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[mouse_button_clicked]))
+                {
+                    pressed = true;
+                    if (flags & ImGuiButtonFlags_NoHoldingActiveId)
+                        ClearActiveID();
+                    else
+                        SetActiveID(id, window); // Hold on ID
+                    g.ActiveIdMouseButton = mouse_button_clicked;
+                    FocusWindow(window);
+                }
+            }
+            if ((flags & ImGuiButtonFlags_PressedOnRelease) && mouse_button_released != -1)
+            {
+                // Repeat mode trumps on release behavior
+                if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay))
+                    pressed = true;
+                ClearActiveID();
+            }
+
+            // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above).
+            // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings.
+            if (g.ActiveId == id && (flags & ImGuiButtonFlags_Repeat))
+                if (g.IO.MouseDownDuration[g.ActiveIdMouseButton] > 0.0f && IsMouseClicked(g.ActiveIdMouseButton, true))
+                    pressed = true;
+        }
+
+        if (pressed)
+            g.NavDisableHighlight = true;
+    }
+
+    // Gamepad/Keyboard navigation
+    // We report navigated item as hovered but we don't set g.HoveredId to not interfere with mouse.
+    if (g.NavId == id && !g.NavDisableHighlight && g.NavDisableMouseHover && (g.ActiveId == 0 || g.ActiveId == id || g.ActiveId == window->MoveId))
+        if (!(flags & ImGuiButtonFlags_NoHoveredOnFocus))
+            hovered = true;
+    if (g.NavActivateDownId == id)
+    {
+        bool nav_activated_by_code = (g.NavActivateId == id);
+        bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed);
+        if (nav_activated_by_code || nav_activated_by_inputs)
+            pressed = true;
+        if (nav_activated_by_code || nav_activated_by_inputs || g.ActiveId == id)
+        {
+            // Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button.
+            g.NavActivateId = id; // This is so SetActiveId assign a Nav source
+            SetActiveID(id, window);
+            if ((nav_activated_by_code || nav_activated_by_inputs) && !(flags & ImGuiButtonFlags_NoNavFocus))
+                SetFocusID(id, window);
+        }
+    }
+
+    bool held = false;
+    if (g.ActiveId == id)
+    {
+        if (g.ActiveIdSource == ImGuiInputSource_Mouse)
+        {
+            if (g.ActiveIdIsJustActivated)
+                g.ActiveIdClickOffset = g.IO.MousePos - bb.Min;
+
+            const int mouse_button = g.ActiveIdMouseButton;
+            IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT);
+            if (g.IO.MouseDown[mouse_button])
+            {
+                held = true;
+            }
+            else
+            {
+                bool release_in = hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease) != 0;
+                bool release_anywhere = (flags & ImGuiButtonFlags_PressedOnClickReleaseAnywhere) != 0;
+                if ((release_in || release_anywhere) && !g.DragDropActive)
+                {
+                    bool is_double_click_release = (flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDownWasDoubleClick[mouse_button];
+                    bool is_repeating_already = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button] >= g.IO.KeyRepeatDelay; // Repeat mode trumps <on release>
+                    if (!is_double_click_release && !is_repeating_already)
+                        pressed = true;
+                }
+                ClearActiveID();
+            }
+            if (!(flags & ImGuiButtonFlags_NoNavFocus))
+                g.NavDisableHighlight = true;
+        }
+        else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+        {
+            if (g.NavActivateDownId != id)
+                ClearActiveID();
+        }
+        if (pressed)
+            g.ActiveIdHasBeenPressedBefore = true;
+    }
+
+    if (out_hovered) *out_hovered = hovered;
+    if (out_held) *out_held = held;
+
+    return pressed;
+}
+
+bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+    ImVec2 pos = window->DC.CursorPos;
+    if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
+        pos.y += window->DC.CurrLineTextBaseOffset - style.FramePadding.y;
+    ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);
+
+    const ImRect bb(pos, pos + size);
+    ItemSize(size, style.FramePadding.y);
+    if (!ItemAdd(bb, id))
+        return false;
+
+    if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat)
+        flags |= ImGuiButtonFlags_Repeat;
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+    // Render
+    const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+    RenderNavHighlight(bb, id);
+    RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
+    RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
+
+    // Automatically close popups
+    //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
+    //    CloseCurrentPopup();
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
+    return pressed;
+}
+
+bool ImGui::Button(const char* label, const ImVec2& size_arg)
+{
+    return ButtonEx(label, size_arg, 0);
+}
+
+// Small buttons fits within text without additional vertical spacing.
+bool ImGui::SmallButton(const char* label)
+{
+    ImGuiContext& g = *GImGui;
+    float backup_padding_y = g.Style.FramePadding.y;
+    g.Style.FramePadding.y = 0.0f;
+    bool pressed = ButtonEx(label, ImVec2(0, 0), ImGuiButtonFlags_AlignTextBaseLine);
+    g.Style.FramePadding.y = backup_padding_y;
+    return pressed;
+}
+
+// Tip: use ImGui::PushID()/PopID() to push indices or pointers in the ID stack.
+// Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id)
+bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    // Cannot use zero-size for InvisibleButton(). Unlike Button() there is not way to fallback using the label size.
+    IM_ASSERT(size_arg.x != 0.0f && size_arg.y != 0.0f);
+
+    const ImGuiID id = window->GetID(str_id);
+    ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f);
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    ItemSize(size);
+    if (!ItemAdd(bb, id))
+        return false;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+
+    return pressed;
+}
+
+bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiButtonFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiID id = window->GetID(str_id);
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    const float default_size = GetFrameHeight();
+    ItemSize(size, (size.y >= default_size) ? g.Style.FramePadding.y : -1.0f);
+    if (!ItemAdd(bb, id))
+        return false;
+
+    if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat)
+        flags |= ImGuiButtonFlags_Repeat;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+    // Render
+    const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+    const ImU32 text_col = GetColorU32(ImGuiCol_Text);
+    RenderNavHighlight(bb, id);
+    RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding);
+    RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir);
+
+    return pressed;
+}
+
+bool ImGui::ArrowButton(const char* str_id, ImGuiDir dir)
+{
+    float sz = GetFrameHeight();
+    return ArrowButtonEx(str_id, dir, ImVec2(sz, sz), ImGuiButtonFlags_None);
+}
+
+// Button to close a window
+bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    // We intentionally allow interaction when clipped so that a mechanical Alt,Right,Validate sequence close a window.
+    // (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible).
+    const ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
+    bool is_clipped = !ItemAdd(bb, id);
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+    if (is_clipped)
+        return pressed;
+
+    // Render
+    ImU32 col = GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered);
+    ImVec2 center = bb.GetCenter();
+    if (hovered)
+        window->DrawList->AddCircleFilled(center, ImMax(2.0f, g.FontSize * 0.5f + 1.0f), col, 12);
+
+    float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f;
+    ImU32 cross_col = GetColorU32(ImGuiCol_Text);
+    center -= ImVec2(0.5f, 0.5f);
+    window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), cross_col, 1.0f);
+    window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), cross_col, 1.0f);
+
+    return pressed;
+}
+
+bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
+    ItemAdd(bb, id);
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
+
+    // Render
+    ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+    ImU32 text_col = GetColorU32(ImGuiCol_Text);
+    ImVec2 center = bb.GetCenter();
+    if (hovered || held)
+        window->DrawList->AddCircleFilled(center/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col, 12);
+    RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
+
+    // Switch to moving the window after mouse is moved beyond the initial drag threshold
+    if (IsItemActive() && IsMouseDragging(0))
+        StartMouseMovingWindow(window);
+
+    return pressed;
+}
+
+ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
+{
+    return window->GetIDNoKeepAlive(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY");
+}
+
+// Vertical/Horizontal scrollbar
+// The entire piece of code below is rather confusing because:
+// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
+// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar
+// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal.
+// Still, the code should probably be made simpler..
+bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float size_avail_v, float size_contents_v, ImDrawCornerFlags rounding_corners)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return false;
+
+    const float bb_frame_width = bb_frame.GetWidth();
+    const float bb_frame_height = bb_frame.GetHeight();
+    if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f)
+        return false;
+
+    // When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the resize grab)
+    float alpha = 1.0f;
+    if ((axis == ImGuiAxis_Y) && bb_frame_height < g.FontSize + g.Style.FramePadding.y * 2.0f)
+        alpha = ImSaturate((bb_frame_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f));
+    if (alpha <= 0.0f)
+        return false;
+
+    const ImGuiStyle& style = g.Style;
+    const bool allow_interaction = (alpha >= 1.0f);
+    const bool horizontal = (axis == ImGuiAxis_X);
+
+    ImRect bb = bb_frame;
+    bb.Expand(ImVec2(-ImClamp(IM_FLOOR((bb_frame_width - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp(IM_FLOOR((bb_frame_height - 2.0f) * 0.5f), 0.0f, 3.0f)));
+
+    // V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
+    const float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight();
+
+    // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount)
+    // But we maintain a minimum size in pixel to allow for the user to still aim inside.
+    IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
+    const float win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), 1.0f);
+    const float grab_h_pixels = ImClamp(scrollbar_size_v * (size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v);
+    const float grab_h_norm = grab_h_pixels / scrollbar_size_v;
+
+    // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar().
+    bool held = false;
+    bool hovered = false;
+    ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus);
+
+    float scroll_max = ImMax(1.0f, size_contents_v - size_avail_v);
+    float scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
+    float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
+    if (held && allow_interaction && grab_h_norm < 1.0f)
+    {
+        float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y;
+        float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
+
+        // Click position in scrollbar normalized space (0.0f->1.0f)
+        const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v);
+        SetHoveredID(id);
+
+        bool seek_absolute = false;
+        if (g.ActiveIdIsJustActivated)
+        {
+            // On initial click calculate the distance between mouse and the center of the grab
+            seek_absolute = (clicked_v_norm < grab_v_norm || clicked_v_norm > grab_v_norm + grab_h_norm);
+            if (seek_absolute)
+                g.ScrollbarClickDeltaToGrabCenter = 0.0f;
+            else
+                g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
+        }
+
+        // Apply scroll
+        // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position
+        const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm));
+        *p_scroll_v = IM_ROUND(scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v));
+
+        // Update values for rendering
+        scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
+        grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
+
+        // Update distance to grab now that we have seeked and saturated
+        if (seek_absolute)
+            g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
+    }
+
+    // Render
+    window->DrawList->AddRectFilled(bb_frame.Min, bb_frame.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, rounding_corners);
+    const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha);
+    ImRect grab_rect;
+    if (horizontal)
+        grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y);
+    else
+        grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels);
+    window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding);
+
+    return held;
+}
+
+void ImGui::Scrollbar(ImGuiAxis axis)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    const ImGuiID id = GetWindowScrollbarID(window, axis);
+    KeepAliveID(id);
+
+    // Calculate scrollbar bounding box
+    const ImRect outer_rect = window->Rect();
+    const ImRect inner_rect = window->InnerRect;
+    const float border_size = window->WindowBorderSize;
+    const float scrollbar_size = window->ScrollbarSizes[axis ^ 1];
+    IM_ASSERT(scrollbar_size > 0.0f);
+    const float other_scrollbar_size = window->ScrollbarSizes[axis];
+    ImDrawCornerFlags rounding_corners = (other_scrollbar_size <= 0.0f) ? ImDrawCornerFlags_BotRight : 0;
+    ImRect bb;
+    if (axis == ImGuiAxis_X)
+    {
+        bb.Min = ImVec2(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size));
+        bb.Max = ImVec2(inner_rect.Max.x, outer_rect.Max.y);
+        rounding_corners |= ImDrawCornerFlags_BotLeft;
+    }
+    else
+    {
+        bb.Min = ImVec2(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y);
+        bb.Max = ImVec2(outer_rect.Max.x, window->InnerRect.Max.y);
+        rounding_corners |= ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0;
+    }
+    ScrollbarEx(bb, id, axis, &window->Scroll[axis], inner_rect.Max[axis] - inner_rect.Min[axis], window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f, rounding_corners);
+}
+
+void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    if (border_col.w > 0.0f)
+        bb.Max += ImVec2(2, 2);
+    ItemSize(bb);
+    if (!ItemAdd(bb, 0))
+        return;
+
+    if (border_col.w > 0.0f)
+    {
+        window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(border_col), 0.0f);
+        window->DrawList->AddImage(user_texture_id, bb.Min + ImVec2(1, 1), bb.Max - ImVec2(1, 1), uv0, uv1, GetColorU32(tint_col));
+    }
+    else
+    {
+        window->DrawList->AddImage(user_texture_id, bb.Min, bb.Max, uv0, uv1, GetColorU32(tint_col));
+    }
+}
+
+// frame_padding < 0: uses FramePadding from style (default)
+// frame_padding = 0: no framing
+// frame_padding > 0: set framing size
+// The color used are the button colors.
+bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col, const ImVec4& tint_col)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+
+    // Default to using texture ID as ID. User can still push string/integer prefixes.
+    // We could hash the size/uv to create a unique ID but that would prevent the user from animating UV.
+    PushID((void*)(intptr_t)user_texture_id);
+    const ImGuiID id = window->GetID("#image");
+    PopID();
+
+    const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : style.FramePadding;
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding * 2);
+    const ImRect image_bb(window->DC.CursorPos + padding, window->DC.CursorPos + padding + size);
+    ItemSize(bb);
+    if (!ItemAdd(bb, id))
+        return false;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+
+    // Render
+    const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+    RenderNavHighlight(bb, id);
+    RenderFrame(bb.Min, bb.Max, col, true, ImClamp((float)ImMin(padding.x, padding.y), 0.0f, style.FrameRounding));
+    if (bg_col.w > 0.0f)
+        window->DrawList->AddRectFilled(image_bb.Min, image_bb.Max, GetColorU32(bg_col));
+    window->DrawList->AddImage(user_texture_id, image_bb.Min, image_bb.Max, uv0, uv1, GetColorU32(tint_col));
+
+    return pressed;
+}
+
+bool ImGui::Checkbox(const char* label, bool* v)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+    const float square_sz = GetFrameHeight();
+    const ImVec2 pos = window->DC.CursorPos;
+    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, id))
+        return false;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
+    if (pressed)
+    {
+        *v = !(*v);
+        MarkItemEdited(id);
+    }
+
+    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
+    RenderNavHighlight(total_bb, id);
+    RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
+    ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
+    if (window->DC.ItemFlags & ImGuiItemFlags_MixedValue)
+    {
+        // Undocumented tristate/mixed/indeterminate checkbox (#2644)
+        ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)));
+        window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
+    }
+    else if (*v)
+    {
+        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
+        RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f);
+    }
+
+    if (g.LogEnabled)
+        LogRenderedText(&total_bb.Min, *v ? "[x]" : "[ ]");
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
+    return pressed;
+}
+
+bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value)
+{
+    bool v = ((*flags & flags_value) == flags_value);
+    bool pressed = Checkbox(label, &v);
+    if (pressed)
+    {
+        if (v)
+            *flags |= flags_value;
+        else
+            *flags &= ~flags_value;
+    }
+
+    return pressed;
+}
+
+bool ImGui::RadioButton(const char* label, bool active)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+    const float square_sz = GetFrameHeight();
+    const ImVec2 pos = window->DC.CursorPos;
+    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
+    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, id))
+        return false;
+
+    ImVec2 center = check_bb.GetCenter();
+    center.x = IM_ROUND(center.x);
+    center.y = IM_ROUND(center.y);
+    const float radius = (square_sz - 1.0f) * 0.5f;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
+    if (pressed)
+        MarkItemEdited(id);
+
+    RenderNavHighlight(total_bb, id);
+    window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16);
+    if (active)
+    {
+        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
+        window->DrawList->AddCircleFilled(center, radius - pad, GetColorU32(ImGuiCol_CheckMark), 16);
+    }
+
+    if (style.FrameBorderSize > 0.0f)
+    {
+        window->DrawList->AddCircle(center + ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
+        window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize);
+    }
+
+    if (g.LogEnabled)
+        LogRenderedText(&total_bb.Min, active ? "(x)" : "( )");
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
+
+    return pressed;
+}
+
+// FIXME: This would work nicely if it was a public template, e.g. 'template<T> RadioButton(const char* label, T* v, T v_button)', but I'm not sure how we would expose it..
+bool ImGui::RadioButton(const char* label, int* v, int v_button)
+{
+    const bool pressed = RadioButton(label, *v == v_button);
+    if (pressed)
+        *v = v_button;
+    return pressed;
+}
+
+// size_arg (for each axis) < 0.0f: align to end, 0.0f: auto, > 0.0f: specified size
+void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* overlay)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+
+    ImVec2 pos = window->DC.CursorPos;
+    ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f);
+    ImRect bb(pos, pos + size);
+    ItemSize(size, style.FramePadding.y);
+    if (!ItemAdd(bb, 0))
+        return;
+
+    // Render
+    fraction = ImSaturate(fraction);
+    RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+    bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize));
+    const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y);
+    RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding);
+
+    // Default displaying the fraction as percentage string, but user can override it
+    char overlay_buf[32];
+    if (!overlay)
+    {
+        ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction*100+0.01f);
+        overlay = overlay_buf;
+    }
+
+    ImVec2 overlay_size = CalcTextSize(overlay, NULL);
+    if (overlay_size.x > 0.0f)
+        RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb);
+}
+
+void ImGui::Bullet()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height));
+    ItemSize(bb);
+    if (!ItemAdd(bb, 0))
+    {
+        SameLine(0, style.FramePadding.x*2);
+        return;
+    }
+
+    // Render and stay on same line
+    ImU32 text_col = GetColorU32(ImGuiCol_Text);
+    RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col);
+    SameLine(0, style.FramePadding.x * 2.0f);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Low-level Layout helpers
+//-------------------------------------------------------------------------
+// - Spacing()
+// - Dummy()
+// - NewLine()
+// - AlignTextToFramePadding()
+// - SeparatorEx() [Internal]
+// - Separator()
+// - SplitterBehavior() [Internal]
+// - ShrinkWidths() [Internal]
+//-------------------------------------------------------------------------
+
+void ImGui::Spacing()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+    ItemSize(ImVec2(0,0));
+}
+
+void ImGui::Dummy(const ImVec2& size)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    ItemSize(size);
+    ItemAdd(bb, 0);
+}
+
+void ImGui::NewLine()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiLayoutType backup_layout_type = window->DC.LayoutType;
+    window->DC.LayoutType = ImGuiLayoutType_Vertical;
+    if (window->DC.CurrLineSize.y > 0.0f)     // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
+        ItemSize(ImVec2(0,0));
+    else
+        ItemSize(ImVec2(0.0f, g.FontSize));
+    window->DC.LayoutType = backup_layout_type;
+}
+
+void ImGui::AlignTextToFramePadding()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    window->DC.CurrLineSize.y = ImMax(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2);
+    window->DC.CurrLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, g.Style.FramePadding.y);
+}
+
+// Horizontal/vertical separating line
+void ImGui::SeparatorEx(ImGuiSeparatorFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(ImIsPowerOfTwo(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical)));   // Check that only 1 option is selected
+
+    float thickness_draw = 1.0f;
+    float thickness_layout = 0.0f;
+    if (flags & ImGuiSeparatorFlags_Vertical)
+    {
+        // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
+        float y1 = window->DC.CursorPos.y;
+        float y2 = window->DC.CursorPos.y + window->DC.CurrLineSize.y;
+        const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + thickness_draw, y2));
+        ItemSize(ImVec2(thickness_layout, 0.0f));
+        if (!ItemAdd(bb, 0))
+            return;
+
+        // Draw
+        window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
+        if (g.LogEnabled)
+            LogText(" |");
+    }
+    else if (flags & ImGuiSeparatorFlags_Horizontal)
+    {
+        // Horizontal Separator
+        float x1 = window->Pos.x;
+        float x2 = window->Pos.x + window->Size.x;
+        if (!window->DC.GroupStack.empty())
+            x1 += window->DC.Indent.x;
+
+        ImGuiColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL;
+        if (columns)
+            PushColumnsBackground();
+
+        // We don't provide our width to the layout so that it doesn't get feed back into AutoFit
+        const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw));
+        ItemSize(ImVec2(0.0f, thickness_layout));
+        const bool item_visible = ItemAdd(bb, 0);
+        if (item_visible)
+        {
+            // Draw
+            window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x, bb.Min.y), GetColorU32(ImGuiCol_Separator));
+            if (g.LogEnabled)
+                LogRenderedText(&bb.Min, "--------------------------------");
+        }
+        if (columns)
+        {
+            PopColumnsBackground();
+            columns->LineMinY = window->DC.CursorPos.y;
+        }
+    }
+}
+
+void ImGui::Separator()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    // Those flags should eventually be overridable by the user
+    ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
+    flags |= ImGuiSeparatorFlags_SpanAllColumns;
+    SeparatorEx(flags);
+}
+
+// Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise.
+bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
+    window->DC.ItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus;
+    bool item_add = ItemAdd(bb, id);
+    window->DC.ItemFlags = item_flags_backup;
+    if (!item_add)
+        return false;
+
+    bool hovered, held;
+    ImRect bb_interact = bb;
+    bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f));
+    ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap);
+    if (g.ActiveId != id)
+        SetItemAllowOverlap();
+
+    if (held || (g.HoveredId == id && g.HoveredIdPreviousFrame == id && g.HoveredIdTimer >= hover_visibility_delay))
+        SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW);
+
+    ImRect bb_render = bb;
+    if (held)
+    {
+        ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min;
+        float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
+
+        // Minimum pane size
+        float size_1_maximum_delta = ImMax(0.0f, *size1 - min_size1);
+        float size_2_maximum_delta = ImMax(0.0f, *size2 - min_size2);
+        if (mouse_delta < -size_1_maximum_delta)
+            mouse_delta = -size_1_maximum_delta;
+        if (mouse_delta > size_2_maximum_delta)
+            mouse_delta = size_2_maximum_delta;
+
+        // Apply resize
+        if (mouse_delta != 0.0f)
+        {
+            if (mouse_delta < 0.0f)
+                IM_ASSERT(*size1 + mouse_delta >= min_size1);
+            if (mouse_delta > 0.0f)
+                IM_ASSERT(*size2 - mouse_delta >= min_size2);
+            *size1 += mouse_delta;
+            *size2 -= mouse_delta;
+            bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
+            MarkItemEdited(id);
+        }
+    }
+
+    // Render
+    const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+    window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, col, 0.0f);
+
+    return held;
+}
+
+static int IMGUI_CDECL ShrinkWidthItemComparer(const void* lhs, const void* rhs)
+{
+    const ImGuiShrinkWidthItem* a = (const ImGuiShrinkWidthItem*)lhs;
+    const ImGuiShrinkWidthItem* b = (const ImGuiShrinkWidthItem*)rhs;
+    if (int d = (int)(b->Width - a->Width))
+        return d;
+    return (b->Index - a->Index);
+}
+
+// Shrink excess width from a set of item, by removing width from the larger items first.
+void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess)
+{
+    if (count == 1)
+    {
+        items[0].Width = ImMax(items[0].Width - width_excess, 1.0f);
+        return;
+    }
+    ImQsort(items, (size_t)count, sizeof(ImGuiShrinkWidthItem), ShrinkWidthItemComparer);
+    int count_same_width = 1;
+    while (width_excess > 0.0f && count_same_width < count)
+    {
+        while (count_same_width < count && items[0].Width <= items[count_same_width].Width)
+            count_same_width++;
+        float max_width_to_remove_per_item = (count_same_width < count) ? (items[0].Width - items[count_same_width].Width) : (items[0].Width - 1.0f);
+        float width_to_remove_per_item = ImMin(width_excess / count_same_width, max_width_to_remove_per_item);
+        for (int item_n = 0; item_n < count_same_width; item_n++)
+            items[item_n].Width -= width_to_remove_per_item;
+        width_excess -= width_to_remove_per_item * count_same_width;
+    }
+
+    // Round width and redistribute remainder left-to-right (could make it an option of the function?)
+    // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator.
+    width_excess = 0.0f;
+    for (int n = 0; n < count; n++)
+    {
+        float width_rounded = ImFloor(items[n].Width);
+        width_excess += items[n].Width - width_rounded;
+        items[n].Width = width_rounded;
+    }
+    if (width_excess > 0.0f)
+        for (int n = 0; n < count; n++)
+            if (items[n].Index < (int)(width_excess + 0.01f))
+                items[n].Width += 1.0f;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ComboBox
+//-------------------------------------------------------------------------
+// - BeginCombo()
+// - EndCombo()
+// - Combo()
+//-------------------------------------------------------------------------
+
+static float CalcMaxPopupHeightFromItemCount(int items_count)
+{
+    ImGuiContext& g = *GImGui;
+    if (items_count <= 0)
+        return FLT_MAX;
+    return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2);
+}
+
+bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags)
+{
+    // Always consume the SetNextWindowSizeConstraint() call in our early return paths
+    ImGuiContext& g = *GImGui;
+    bool has_window_size_constraint = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) != 0;
+    g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint;
+
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together
+
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+
+    const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const float expected_w = CalcItemWidth();
+    const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w;
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
+    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, id, &frame_bb))
+        return false;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
+    bool popup_open = IsPopupOpen(id);
+
+    const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+    const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size);
+    RenderNavHighlight(frame_bb, id);
+    if (!(flags & ImGuiComboFlags_NoPreview))
+        window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(value_x2, frame_bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Left);
+    if (!(flags & ImGuiComboFlags_NoArrowButton))
+    {
+        ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+        ImU32 text_col = GetColorU32(ImGuiCol_Text);
+        window->DrawList->AddRectFilled(ImVec2(value_x2, frame_bb.Min.y), frame_bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Right);
+        if (value_x2 + arrow_size - style.FramePadding.x <= frame_bb.Max.x)
+            RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f);
+    }
+    RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding);
+    if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview))
+        RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
+    if (label_size.x > 0)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    if ((pressed || g.NavActivateId == id) && !popup_open)
+    {
+        if (window->DC.NavLayerCurrent == 0)
+            window->NavLastIds[0] = id;
+        OpenPopupEx(id);
+        popup_open = true;
+    }
+
+    if (!popup_open)
+        return false;
+
+    if (has_window_size_constraint)
+    {
+        g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
+        g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w);
+    }
+    else
+    {
+        if ((flags & ImGuiComboFlags_HeightMask_) == 0)
+            flags |= ImGuiComboFlags_HeightRegular;
+        IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiComboFlags_HeightMask_));    // Only one
+        int popup_max_height_in_items = -1;
+        if (flags & ImGuiComboFlags_HeightRegular)     popup_max_height_in_items = 8;
+        else if (flags & ImGuiComboFlags_HeightSmall)  popup_max_height_in_items = 4;
+        else if (flags & ImGuiComboFlags_HeightLarge)  popup_max_height_in_items = 20;
+        SetNextWindowSizeConstraints(ImVec2(w, 0.0f), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
+    }
+
+    char name[16];
+    ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
+
+    // Peak into expected window size so we can position it
+    if (ImGuiWindow* popup_window = FindWindowByName(name))
+        if (popup_window->WasActive)
+        {
+            ImVec2 size_expected = CalcWindowExpectedSize(popup_window);
+            if (flags & ImGuiComboFlags_PopupAlignLeft)
+                popup_window->AutoPosLastDirection = ImGuiDir_Left;
+            ImRect r_outer = GetWindowAllowedExtentRect(popup_window);
+            ImVec2 pos = FindBestWindowPosForPopupEx(frame_bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, frame_bb, ImGuiPopupPositionPolicy_ComboBox);
+            SetNextWindowPos(pos);
+        }
+
+    // We don't use BeginPopupEx() solely because we have a custom name string, which we could make an argument to BeginPopupEx()
+    ImGuiWindowFlags window_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove;
+
+    // Horizontally align ourselves with the framed text
+    PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(style.FramePadding.x, style.WindowPadding.y));
+    bool ret = Begin(name, NULL, window_flags);
+    PopStyleVar();
+    if (!ret)
+    {
+        EndPopup();
+        IM_ASSERT(0);   // This should never happen as we tested for IsPopupOpen() above
+        return false;
+    }
+    return true;
+}
+
+void ImGui::EndCombo()
+{
+    EndPopup();
+}
+
+// Getter for the old Combo() API: const char*[]
+static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
+{
+    const char* const* items = (const char* const*)data;
+    if (out_text)
+        *out_text = items[idx];
+    return true;
+}
+
+// Getter for the old Combo() API: "item1\0item2\0item3\0"
+static bool Items_SingleStringGetter(void* data, int idx, const char** out_text)
+{
+    // FIXME-OPT: we could pre-compute the indices to fasten this. But only 1 active combo means the waste is limited.
+    const char* items_separated_by_zeros = (const char*)data;
+    int items_count = 0;
+    const char* p = items_separated_by_zeros;
+    while (*p)
+    {
+        if (idx == items_count)
+            break;
+        p += strlen(p) + 1;
+        items_count++;
+    }
+    if (!*p)
+        return false;
+    if (out_text)
+        *out_text = p;
+    return true;
+}
+
+// Old API, prefer using BeginCombo() nowadays if you can.
+bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_max_height_in_items)
+{
+    ImGuiContext& g = *GImGui;
+
+    // Call the getter to obtain the preview string which is a parameter to BeginCombo()
+    const char* preview_value = NULL;
+    if (*current_item >= 0 && *current_item < items_count)
+        items_getter(data, *current_item, &preview_value);
+
+    // The old Combo() API exposed "popup_max_height_in_items". The new more general BeginCombo() API doesn't have/need it, but we emulate it here.
+    if (popup_max_height_in_items != -1 && !(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint))
+        SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
+
+    if (!BeginCombo(label, preview_value, ImGuiComboFlags_None))
+        return false;
+
+    // Display items
+    // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed)
+    bool value_changed = false;
+    for (int i = 0; i < items_count; i++)
+    {
+        PushID((void*)(intptr_t)i);
+        const bool item_selected = (i == *current_item);
+        const char* item_text;
+        if (!items_getter(data, i, &item_text))
+            item_text = "*Unknown item*";
+        if (Selectable(item_text, item_selected))
+        {
+            value_changed = true;
+            *current_item = i;
+        }
+        if (item_selected)
+            SetItemDefaultFocus();
+        PopID();
+    }
+
+    EndCombo();
+    return value_changed;
+}
+
+// Combo box helper allowing to pass an array of strings.
+bool ImGui::Combo(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items)
+{
+    const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items);
+    return value_changed;
+}
+
+// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
+bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items)
+{
+    int items_count = 0;
+    const char* p = items_separated_by_zeros;       // FIXME-OPT: Avoid computing this, or at least only when combo is open
+    while (*p)
+    {
+        p += strlen(p) + 1;
+        items_count++;
+    }
+    bool value_changed = Combo(label, current_item, Items_SingleStringGetter, (void*)items_separated_by_zeros, items_count, height_in_items);
+    return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Data Type and Data Formatting Helpers [Internal]
+//-------------------------------------------------------------------------
+// - PatchFormatStringFloatToInt()
+// - DataTypeGetInfo()
+// - DataTypeFormatString()
+// - DataTypeApplyOp()
+// - DataTypeApplyOpFromText()
+// - GetMinimumStepAtDecimalPrecision
+// - RoundScalarWithFormat<>()
+//-------------------------------------------------------------------------
+
+static const ImGuiDataTypeInfo GDataTypeInfo[] =
+{
+    { sizeof(char),             "%d",   "%d"    },  // ImGuiDataType_S8
+    { sizeof(unsigned char),    "%u",   "%u"    },
+    { sizeof(short),            "%d",   "%d"    },  // ImGuiDataType_S16
+    { sizeof(unsigned short),   "%u",   "%u"    },
+    { sizeof(int),              "%d",   "%d"    },  // ImGuiDataType_S32
+    { sizeof(unsigned int),     "%u",   "%u"    },
+#ifdef _MSC_VER
+    { sizeof(ImS64),            "%I64d","%I64d" },  // ImGuiDataType_S64
+    { sizeof(ImU64),            "%I64u","%I64u" },
+#else
+    { sizeof(ImS64),            "%lld", "%lld"  },  // ImGuiDataType_S64
+    { sizeof(ImU64),            "%llu", "%llu"  },
+#endif
+    { sizeof(float),            "%f",   "%f"    },  // ImGuiDataType_Float (float are promoted to double in va_arg)
+    { sizeof(double),           "%f",   "%lf"   },  // ImGuiDataType_Double
+};
+IM_STATIC_ASSERT(IM_ARRAYSIZE(GDataTypeInfo) == ImGuiDataType_COUNT);
+
+// FIXME-LEGACY: Prior to 1.61 our DragInt() function internally used floats and because of this the compile-time default value for format was "%.0f".
+// Even though we changed the compile-time default, we expect users to have carried %f around, which would break the display of DragInt() calls.
+// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. What could possibly go wrong?!
+static const char* PatchFormatStringFloatToInt(const char* fmt)
+{
+    if (fmt[0] == '%' && fmt[1] == '.' && fmt[2] == '0' && fmt[3] == 'f' && fmt[4] == 0) // Fast legacy path for "%.0f" which is expected to be the most common case.
+        return "%d";
+    const char* fmt_start = ImParseFormatFindStart(fmt);    // Find % (if any, and ignore %%)
+    const char* fmt_end = ImParseFormatFindEnd(fmt_start);  // Find end of format specifier, which itself is an exercise of confidence/recklessness (because snprintf is dependent on libc or user).
+    if (fmt_end > fmt_start && fmt_end[-1] == 'f')
+    {
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+        if (fmt_start == fmt && fmt_end[0] == 0)
+            return "%d";
+        ImGuiContext& g = *GImGui;
+        ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision.
+        return g.TempBuffer;
+#else
+        IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d"
+#endif
+    }
+    return fmt;
+}
+
+const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
+{
+    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
+    return &GDataTypeInfo[data_type];
+}
+
+int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format)
+{
+    // Signedness doesn't matter when pushing integer arguments
+    if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32)
+        return ImFormatString(buf, buf_size, format, *(const ImU32*)p_data);
+    if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
+        return ImFormatString(buf, buf_size, format, *(const ImU64*)p_data);
+    if (data_type == ImGuiDataType_Float)
+        return ImFormatString(buf, buf_size, format, *(const float*)p_data);
+    if (data_type == ImGuiDataType_Double)
+        return ImFormatString(buf, buf_size, format, *(const double*)p_data);
+    if (data_type == ImGuiDataType_S8)
+        return ImFormatString(buf, buf_size, format, *(const ImS8*)p_data);
+    if (data_type == ImGuiDataType_U8)
+        return ImFormatString(buf, buf_size, format, *(const ImU8*)p_data);
+    if (data_type == ImGuiDataType_S16)
+        return ImFormatString(buf, buf_size, format, *(const ImS16*)p_data);
+    if (data_type == ImGuiDataType_U16)
+        return ImFormatString(buf, buf_size, format, *(const ImU16*)p_data);
+    IM_ASSERT(0);
+    return 0;
+}
+
+void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg1, const void* arg2)
+{
+    IM_ASSERT(op == '+' || op == '-');
+    switch (data_type)
+    {
+        case ImGuiDataType_S8:
+            if (op == '+') { *(ImS8*)output  = ImAddClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
+            if (op == '-') { *(ImS8*)output  = ImSubClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
+            return;
+        case ImGuiDataType_U8:
+            if (op == '+') { *(ImU8*)output  = ImAddClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
+            if (op == '-') { *(ImU8*)output  = ImSubClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
+            return;
+        case ImGuiDataType_S16:
+            if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+            if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+            return;
+        case ImGuiDataType_U16:
+            if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+            if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+            return;
+        case ImGuiDataType_S32:
+            if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
+            if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
+            return;
+        case ImGuiDataType_U32:
+            if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
+            if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
+            return;
+        case ImGuiDataType_S64:
+            if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
+            if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
+            return;
+        case ImGuiDataType_U64:
+            if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
+            if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
+            return;
+        case ImGuiDataType_Float:
+            if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; }
+            if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; }
+            return;
+        case ImGuiDataType_Double:
+            if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; }
+            if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; }
+            return;
+        case ImGuiDataType_COUNT: break;
+    }
+    IM_ASSERT(0);
+}
+
+// User can input math operators (e.g. +100) to edit a numerical values.
+// NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess..
+bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format)
+{
+    while (ImCharIsBlankA(*buf))
+        buf++;
+
+    // We don't support '-' op because it would conflict with inputing negative value.
+    // Instead you can use +-100 to subtract from an existing value
+    char op = buf[0];
+    if (op == '+' || op == '*' || op == '/')
+    {
+        buf++;
+        while (ImCharIsBlankA(*buf))
+            buf++;
+    }
+    else
+    {
+        op = 0;
+    }
+    if (!buf[0])
+        return false;
+
+    // Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
+    IM_ASSERT(data_type < ImGuiDataType_COUNT);
+    int data_backup[2];
+    const ImGuiDataTypeInfo* type_info = ImGui::DataTypeGetInfo(data_type);
+    IM_ASSERT(type_info->Size <= sizeof(data_backup));
+    memcpy(data_backup, p_data, type_info->Size);
+
+    if (format == NULL)
+        format = type_info->ScanFmt;
+
+    // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point..
+    int arg1i = 0;
+    if (data_type == ImGuiDataType_S32)
+    {
+        int* v = (int*)p_data;
+        int arg0i = *v;
+        float arg1f = 0.0f;
+        if (op && sscanf(initial_value_buf, format, &arg0i) < 1)
+            return false;
+        // Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision
+        if (op == '+')      { if (sscanf(buf, "%d", &arg1i)) *v = (int)(arg0i + arg1i); }                   // Add (use "+-" to subtract)
+        else if (op == '*') { if (sscanf(buf, "%f", &arg1f)) *v = (int)(arg0i * arg1f); }                   // Multiply
+        else if (op == '/') { if (sscanf(buf, "%f", &arg1f) && arg1f != 0.0f) *v = (int)(arg0i / arg1f); }  // Divide
+        else                { if (sscanf(buf, format, &arg1i) == 1) *v = arg1i; }                           // Assign constant
+    }
+    else if (data_type == ImGuiDataType_Float)
+    {
+        // For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in
+        format = "%f";
+        float* v = (float*)p_data;
+        float arg0f = *v, arg1f = 0.0f;
+        if (op && sscanf(initial_value_buf, format, &arg0f) < 1)
+            return false;
+        if (sscanf(buf, format, &arg1f) < 1)
+            return false;
+        if (op == '+')      { *v = arg0f + arg1f; }                    // Add (use "+-" to subtract)
+        else if (op == '*') { *v = arg0f * arg1f; }                    // Multiply
+        else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
+        else                { *v = arg1f; }                            // Assign constant
+    }
+    else if (data_type == ImGuiDataType_Double)
+    {
+        format = "%lf"; // scanf differentiate float/double unlike printf which forces everything to double because of ellipsis
+        double* v = (double*)p_data;
+        double arg0f = *v, arg1f = 0.0;
+        if (op && sscanf(initial_value_buf, format, &arg0f) < 1)
+            return false;
+        if (sscanf(buf, format, &arg1f) < 1)
+            return false;
+        if (op == '+')      { *v = arg0f + arg1f; }                    // Add (use "+-" to subtract)
+        else if (op == '*') { *v = arg0f * arg1f; }                    // Multiply
+        else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
+        else                { *v = arg1f; }                            // Assign constant
+    }
+    else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
+    {
+        // All other types assign constant
+        // We don't bother handling support for legacy operators since they are a little too crappy. Instead we will later implement a proper expression evaluator in the future.
+        sscanf(buf, format, p_data);
+    }
+    else
+    {
+        // Small types need a 32-bit buffer to receive the result from scanf()
+        int v32;
+        sscanf(buf, format, &v32);
+        if (data_type == ImGuiDataType_S8)
+            *(ImS8*)p_data = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX);
+        else if (data_type == ImGuiDataType_U8)
+            *(ImU8*)p_data = (ImU8)ImClamp(v32, (int)IM_U8_MIN, (int)IM_U8_MAX);
+        else if (data_type == ImGuiDataType_S16)
+            *(ImS16*)p_data = (ImS16)ImClamp(v32, (int)IM_S16_MIN, (int)IM_S16_MAX);
+        else if (data_type == ImGuiDataType_U16)
+            *(ImU16*)p_data = (ImU16)ImClamp(v32, (int)IM_U16_MIN, (int)IM_U16_MAX);
+        else
+            IM_ASSERT(0);
+    }
+
+    return memcmp(data_backup, p_data, type_info->Size) != 0;
+}
+
+static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
+{
+    static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
+    if (decimal_precision < 0)
+        return FLT_MIN;
+    return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision);
+}
+
+template<typename TYPE>
+static const char* ImAtoi(const char* src, TYPE* output)
+{
+    int negative = 0;
+    if (*src == '-') { negative = 1; src++; }
+    if (*src == '+') { src++; }
+    TYPE v = 0;
+    while (*src >= '0' && *src <= '9')
+        v = (v * 10) + (*src++ - '0');
+    *output = negative ? -v : v;
+    return src;
+}
+
+template<typename TYPE, typename SIGNEDTYPE>
+TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, TYPE v)
+{
+    const char* fmt_start = ImParseFormatFindStart(format);
+    if (fmt_start[0] != '%' || fmt_start[1] == '%') // Don't apply if the value is not visible in the format string
+        return v;
+    char v_str[64];
+    ImFormatString(v_str, IM_ARRAYSIZE(v_str), fmt_start, v);
+    const char* p = v_str;
+    while (*p == ' ')
+        p++;
+    if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double)
+        v = (TYPE)ImAtof(p);
+    else
+        ImAtoi(p, (SIGNEDTYPE*)&v);
+    return v;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
+//-------------------------------------------------------------------------
+// - DragBehaviorT<>() [Internal]
+// - DragBehavior() [Internal]
+// - DragScalar()
+// - DragScalarN()
+// - DragFloat()
+// - DragFloat2()
+// - DragFloat3()
+// - DragFloat4()
+// - DragFloatRange2()
+// - DragInt()
+// - DragInt2()
+// - DragInt3()
+// - DragInt4()
+// - DragIntRange2()
+//-------------------------------------------------------------------------
+
+// This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls)
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    const ImGuiAxis axis = (flags & ImGuiDragFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
+    const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
+    const bool is_clamped = (v_min < v_max);
+    const bool is_power = (power != 1.0f && is_decimal && is_clamped && (v_max - v_min < FLT_MAX));
+    const bool is_locked = (v_min > v_max);
+    if (is_locked)
+        return false;
+
+    // Default tweak speed
+    if (v_speed == 0.0f && is_clamped && (v_max - v_min < FLT_MAX))
+        v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio);
+
+    // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
+    float adjust_delta = 0.0f;
+    if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && g.IO.MouseDragMaxDistanceSqr[0] > 1.0f*1.0f)
+    {
+        adjust_delta = g.IO.MouseDelta[axis];
+        if (g.IO.KeyAlt)
+            adjust_delta *= 1.0f / 100.0f;
+        if (g.IO.KeyShift)
+            adjust_delta *= 10.0f;
+    }
+    else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+    {
+        int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0;
+        adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis];
+        v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision));
+    }
+    adjust_delta *= v_speed;
+
+    // For vertical drag we currently assume that Up=higher value (like we do with vertical sliders). This may become a parameter.
+    if (axis == ImGuiAxis_Y)
+        adjust_delta = -adjust_delta;
+
+    // Clear current value on activation
+    // Avoid altering values and clamping when we are _already_ past the limits and heading in the same direction, so e.g. if range is 0..255, current value is 300 and we are pushing to the right side, keep the 300.
+    bool is_just_activated = g.ActiveIdIsJustActivated;
+    bool is_already_past_limits_and_pushing_outward = is_clamped && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f));
+    bool is_drag_direction_change_with_power = is_power && ((adjust_delta < 0 && g.DragCurrentAccum > 0) || (adjust_delta > 0 && g.DragCurrentAccum < 0));
+    if (is_just_activated || is_already_past_limits_and_pushing_outward || is_drag_direction_change_with_power)
+    {
+        g.DragCurrentAccum = 0.0f;
+        g.DragCurrentAccumDirty = false;
+    }
+    else if (adjust_delta != 0.0f)
+    {
+        g.DragCurrentAccum += adjust_delta;
+        g.DragCurrentAccumDirty = true;
+    }
+
+    if (!g.DragCurrentAccumDirty)
+        return false;
+
+    TYPE v_cur = *v;
+    FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f;
+
+    if (is_power)
+    {
+        // Offset + round to user desired precision, with a curve on the v_min..v_max range to get more precision on one side of the range
+        FLOATTYPE v_old_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power);
+        FLOATTYPE v_new_norm_curved = v_old_norm_curved + (g.DragCurrentAccum / (v_max - v_min));
+        v_cur = v_min + (SIGNEDTYPE)ImPow(ImSaturate((float)v_new_norm_curved), power) * (v_max - v_min);
+        v_old_ref_for_accum_remainder = v_old_norm_curved;
+    }
+    else
+    {
+        v_cur += (SIGNEDTYPE)g.DragCurrentAccum;
+    }
+
+    // Round to user desired precision based on format string
+    v_cur = RoundScalarWithFormatT<TYPE, SIGNEDTYPE>(format, data_type, v_cur);
+
+    // Preserve remainder after rounding has been applied. This also allow slow tweaking of values.
+    g.DragCurrentAccumDirty = false;
+    if (is_power)
+    {
+        FLOATTYPE v_cur_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power);
+        g.DragCurrentAccum -= (float)(v_cur_norm_curved - v_old_ref_for_accum_remainder);
+    }
+    else
+    {
+        g.DragCurrentAccum -= (float)((SIGNEDTYPE)v_cur - (SIGNEDTYPE)*v);
+    }
+
+    // Lose zero sign for float/double
+    if (v_cur == (TYPE)-0)
+        v_cur = (TYPE)0;
+
+    // Clamp values (+ handle overflow/wrap-around for integer types)
+    if (*v != v_cur && is_clamped)
+    {
+        if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_decimal))
+            v_cur = v_min;
+        if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f && !is_decimal))
+            v_cur = v_max;
+    }
+
+    // Apply result
+    if (*v == v_cur)
+        return false;
+    *v = v_cur;
+    return true;
+}
+
+bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.ActiveId == id)
+    {
+        if (g.ActiveIdSource == ImGuiInputSource_Mouse && !g.IO.MouseDown[0])
+            ClearActiveID();
+        else if (g.ActiveIdSource == ImGuiInputSource_Nav && g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
+            ClearActiveID();
+    }
+    if (g.ActiveId != id)
+        return false;
+
+    switch (data_type)
+    {
+    case ImGuiDataType_S8:     { ImS32 v32 = (ImS32)*(ImS8*)p_v;  bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS8*) p_min : IM_S8_MIN,  p_max ? *(const ImS8*)p_max  : IM_S8_MAX,  format, power, flags); if (r) *(ImS8*)p_v = (ImS8)v32; return r; }
+    case ImGuiDataType_U8:     { ImU32 v32 = (ImU32)*(ImU8*)p_v;  bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU8*) p_min : IM_U8_MIN,  p_max ? *(const ImU8*)p_max  : IM_U8_MAX,  format, power, flags); if (r) *(ImU8*)p_v = (ImU8)v32; return r; }
+    case ImGuiDataType_S16:    { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS16*)p_min : IM_S16_MIN, p_max ? *(const ImS16*)p_max : IM_S16_MAX, format, power, flags); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
+    case ImGuiDataType_U16:    { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU16*)p_min : IM_U16_MIN, p_max ? *(const ImU16*)p_max : IM_U16_MAX, format, power, flags); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
+    case ImGuiDataType_S32:    return DragBehaviorT<ImS32, ImS32, float >(data_type, (ImS32*)p_v,  v_speed, p_min ? *(const ImS32* )p_min : IM_S32_MIN, p_max ? *(const ImS32* )p_max : IM_S32_MAX, format, power, flags);
+    case ImGuiDataType_U32:    return DragBehaviorT<ImU32, ImS32, float >(data_type, (ImU32*)p_v,  v_speed, p_min ? *(const ImU32* )p_min : IM_U32_MIN, p_max ? *(const ImU32* )p_max : IM_U32_MAX, format, power, flags);
+    case ImGuiDataType_S64:    return DragBehaviorT<ImS64, ImS64, double>(data_type, (ImS64*)p_v,  v_speed, p_min ? *(const ImS64* )p_min : IM_S64_MIN, p_max ? *(const ImS64* )p_max : IM_S64_MAX, format, power, flags);
+    case ImGuiDataType_U64:    return DragBehaviorT<ImU64, ImS64, double>(data_type, (ImU64*)p_v,  v_speed, p_min ? *(const ImU64* )p_min : IM_U64_MIN, p_max ? *(const ImU64* )p_max : IM_U64_MAX, format, power, flags);
+    case ImGuiDataType_Float:  return DragBehaviorT<float, float, float >(data_type, (float*)p_v,  v_speed, p_min ? *(const float* )p_min : -FLT_MAX,   p_max ? *(const float* )p_max : FLT_MAX,    format, power, flags);
+    case ImGuiDataType_Double: return DragBehaviorT<double,double,double>(data_type, (double*)p_v, v_speed, p_min ? *(const double*)p_min : -DBL_MAX,   p_max ? *(const double*)p_max : DBL_MAX,    format, power, flags);
+    case ImGuiDataType_COUNT:  break;
+    }
+    IM_ASSERT(0);
+    return false;
+}
+
+// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional.
+// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    if (power != 1.0f)
+        IM_ASSERT(p_min != NULL && p_max != NULL); // When using a power curve the drag needs to have known bounds
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    const float w = CalcItemWidth();
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
+    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, id, &frame_bb))
+        return false;
+
+    // Default format string when passing NULL
+    if (format == NULL)
+        format = DataTypeGetInfo(data_type)->PrintFmt;
+    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+        format = PatchFormatStringFloatToInt(format);
+
+    // Tabbing or CTRL-clicking on Drag turns it into an input box
+    const bool hovered = ItemHoverable(frame_bb, id);
+    bool temp_input_is_active = TempInputIsActive(id);
+    bool temp_input_start = false;
+    if (!temp_input_is_active)
+    {
+        const bool focus_requested = FocusableItemRegister(window, id);
+        const bool clicked = (hovered && g.IO.MouseClicked[0]);
+        const bool double_clicked = (hovered && g.IO.MouseDoubleClicked[0]);
+        if (focus_requested || clicked || double_clicked || g.NavActivateId == id || g.NavInputId == id)
+        {
+            SetActiveID(id, window);
+            SetFocusID(id, window);
+            FocusWindow(window);
+            g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+            if (focus_requested || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavInputId == id)
+            {
+                temp_input_start = true;
+                FocusableItemUnregister(window);
+            }
+        }
+    }
+    if (temp_input_is_active || temp_input_start)
+        return TempInputScalar(frame_bb, id, label, data_type, p_data, format);
+
+    // Draw frame
+    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+    RenderNavHighlight(frame_bb, id);
+    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding);
+
+    // Drag behavior
+    const bool value_changed = DragBehavior(id, data_type, p_data, v_speed, p_min, p_max, format, power, ImGuiDragFlags_None);
+    if (value_changed)
+        MarkItemEdited(id);
+
+    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+    char value_buf[64];
+    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+    RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f));
+
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
+    return value_changed;
+}
+
+bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    bool value_changed = false;
+    BeginGroup();
+    PushID(label);
+    PushMultiItemsWidths(components, CalcItemWidth());
+    size_t type_size = GDataTypeInfo[data_type].Size;
+    for (int i = 0; i < components; i++)
+    {
+        PushID(i);
+        if (i > 0)
+            SameLine(0, g.Style.ItemInnerSpacing.x);
+        value_changed |= DragScalar("", data_type, p_data, v_speed, p_min, p_max, format, power);
+        PopID();
+        PopItemWidth();
+        p_data = (void*)((char*)p_data + type_size);
+    }
+    PopID();
+
+    const char* label_end = FindRenderedTextEnd(label);
+    if (label != label_end)
+    {
+        SameLine(0, g.Style.ItemInnerSpacing.x);
+        TextEx(label, label_end);
+    }
+
+    EndGroup();
+    return value_changed;
+}
+
+bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power)
+{
+    return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power);
+}
+
+bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power)
+{
+    return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power);
+}
+
+bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power)
+{
+    return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power);
+}
+
+bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power)
+{
+    return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power);
+}
+
+bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    PushID(label);
+    BeginGroup();
+    PushMultiItemsWidths(2, CalcItemWidth());
+
+    bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power);
+    PopItemWidth();
+    SameLine(0, g.Style.ItemInnerSpacing.x);
+    value_changed |= DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, format_max ? format_max : format, power);
+    PopItemWidth();
+    SameLine(0, g.Style.ItemInnerSpacing.x);
+
+    TextEx(label, FindRenderedTextEnd(label));
+    EndGroup();
+    PopID();
+    return value_changed;
+}
+
+// NB: v_speed is float to allow adjusting the drag speed with more precision
+bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format)
+{
+    return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format);
+}
+
+bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format)
+{
+    return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format);
+}
+
+bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format)
+{
+    return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format);
+}
+
+bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format)
+{
+    return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format);
+}
+
+bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    PushID(label);
+    BeginGroup();
+    PushMultiItemsWidths(2, CalcItemWidth());
+
+    bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format);
+    PopItemWidth();
+    SameLine(0, g.Style.ItemInnerSpacing.x);
+    value_changed |= DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, format_max ? format_max : format);
+    PopItemWidth();
+    SameLine(0, g.Style.ItemInnerSpacing.x);
+
+    TextEx(label, FindRenderedTextEnd(label));
+    EndGroup();
+    PopID();
+
+    return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
+//-------------------------------------------------------------------------
+// - SliderBehaviorT<>() [Internal]
+// - SliderBehavior() [Internal]
+// - SliderScalar()
+// - SliderScalarN()
+// - SliderFloat()
+// - SliderFloat2()
+// - SliderFloat3()
+// - SliderFloat4()
+// - SliderAngle()
+// - SliderInt()
+// - SliderInt2()
+// - SliderInt3()
+// - SliderInt4()
+// - VSliderScalar()
+// - VSliderFloat()
+// - VSliderInt()
+//-------------------------------------------------------------------------
+
+template<typename TYPE, typename FLOATTYPE>
+float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, float power, float linear_zero_pos)
+{
+    if (v_min == v_max)
+        return 0.0f;
+
+    const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double);
+    const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min);
+    if (is_power)
+    {
+        if (v_clamped < 0.0f)
+        {
+            const float f = 1.0f - (float)((v_clamped - v_min) / (ImMin((TYPE)0, v_max) - v_min));
+            return (1.0f - ImPow(f, 1.0f/power)) * linear_zero_pos;
+        }
+        else
+        {
+            const float f = (float)((v_clamped - ImMax((TYPE)0, v_min)) / (v_max - ImMax((TYPE)0, v_min)));
+            return linear_zero_pos + ImPow(f, 1.0f/power) * (1.0f - linear_zero_pos);
+        }
+    }
+
+    // Linear slider
+    return (float)((FLOATTYPE)(v_clamped - v_min) / (FLOATTYPE)(v_max - v_min));
+}
+
+// FIXME: Move some of the code into SliderBehavior(). Current responsability is larger than what the equivalent DragBehaviorT<> does, we also do some rendering, etc.
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb)
+{
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+
+    const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
+    const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
+    const bool is_power = (power != 1.0f) && is_decimal;
+
+    const float grab_padding = 2.0f;
+    const float slider_sz = (bb.Max[axis] - bb.Min[axis]) - grab_padding * 2.0f;
+    float grab_sz = style.GrabMinSize;
+    SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max);
+    if (!is_decimal && v_range >= 0)                                             // v_range < 0 may happen on integer overflows
+        grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize);  // For integer sliders: if possible have the grab size represent 1 unit
+    grab_sz = ImMin(grab_sz, slider_sz);
+    const float slider_usable_sz = slider_sz - grab_sz;
+    const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f;
+    const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz * 0.5f;
+
+    // For power curve sliders that cross over sign boundary we want the curve to be symmetric around 0.0f
+    float linear_zero_pos;   // 0.0->1.0f
+    if (is_power && v_min * v_max < 0.0f)
+    {
+        // Different sign
+        const FLOATTYPE linear_dist_min_to_0 = ImPow(v_min >= 0 ? (FLOATTYPE)v_min : -(FLOATTYPE)v_min, (FLOATTYPE)1.0f / power);
+        const FLOATTYPE linear_dist_max_to_0 = ImPow(v_max >= 0 ? (FLOATTYPE)v_max : -(FLOATTYPE)v_max, (FLOATTYPE)1.0f / power);
+        linear_zero_pos = (float)(linear_dist_min_to_0 / (linear_dist_min_to_0 + linear_dist_max_to_0));
+    }
+    else
+    {
+        // Same sign
+        linear_zero_pos = v_min < 0.0f ? 1.0f : 0.0f;
+    }
+
+    // Process interacting with the slider
+    bool value_changed = false;
+    if (g.ActiveId == id)
+    {
+        bool set_new_value = false;
+        float clicked_t = 0.0f;
+        if (g.ActiveIdSource == ImGuiInputSource_Mouse)
+        {
+            if (!g.IO.MouseDown[0])
+            {
+                ClearActiveID();
+            }
+            else
+            {
+                const float mouse_abs_pos = g.IO.MousePos[axis];
+                clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f;
+                if (axis == ImGuiAxis_Y)
+                    clicked_t = 1.0f - clicked_t;
+                set_new_value = true;
+            }
+        }
+        else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+        {
+            const ImVec2 delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 0.0f, 0.0f);
+            float delta = (axis == ImGuiAxis_X) ? delta2.x : -delta2.y;
+            if (g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
+            {
+                ClearActiveID();
+            }
+            else if (delta != 0.0f)
+            {
+                clicked_t = SliderCalcRatioFromValueT<TYPE,FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
+                const int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0;
+                if ((decimal_precision > 0) || is_power)
+                {
+                    delta /= 100.0f;    // Gamepad/keyboard tweak speeds in % of slider bounds
+                    if (IsNavInputDown(ImGuiNavInput_TweakSlow))
+                        delta /= 10.0f;
+                }
+                else
+                {
+                    if ((v_range >= -100.0f && v_range <= 100.0f) || IsNavInputDown(ImGuiNavInput_TweakSlow))
+                        delta = ((delta < 0.0f) ? -1.0f : +1.0f) / (float)v_range; // Gamepad/keyboard tweak speeds in integer steps
+                    else
+                        delta /= 100.0f;
+                }
+                if (IsNavInputDown(ImGuiNavInput_TweakFast))
+                    delta *= 10.0f;
+                set_new_value = true;
+                if ((clicked_t >= 1.0f && delta > 0.0f) || (clicked_t <= 0.0f && delta < 0.0f)) // This is to avoid applying the saturation when already past the limits
+                    set_new_value = false;
+                else
+                    clicked_t = ImSaturate(clicked_t + delta);
+            }
+        }
+
+        if (set_new_value)
+        {
+            TYPE v_new;
+            if (is_power)
+            {
+                // Account for power curve scale on both sides of the zero
+                if (clicked_t < linear_zero_pos)
+                {
+                    // Negative: rescale to the negative range before powering
+                    float a = 1.0f - (clicked_t / linear_zero_pos);
+                    a = ImPow(a, power);
+                    v_new = ImLerp(ImMin(v_max, (TYPE)0), v_min, a);
+                }
+                else
+                {
+                    // Positive: rescale to the positive range before powering
+                    float a;
+                    if (ImFabs(linear_zero_pos - 1.0f) > 1.e-6f)
+                        a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos);
+                    else
+                        a = clicked_t;
+                    a = ImPow(a, power);
+                    v_new = ImLerp(ImMax(v_min, (TYPE)0), v_max, a);
+                }
+            }
+            else
+            {
+                // Linear slider
+                if (is_decimal)
+                {
+                    v_new = ImLerp(v_min, v_max, clicked_t);
+                }
+                else
+                {
+                    // For integer values we want the clicking position to match the grab box so we round above
+                    // This code is carefully tuned to work with large values (e.g. high ranges of U64) while preserving this property..
+                    FLOATTYPE v_new_off_f = (v_max - v_min) * clicked_t;
+                    TYPE v_new_off_floor = (TYPE)(v_new_off_f);
+                    TYPE v_new_off_round = (TYPE)(v_new_off_f + (FLOATTYPE)0.5);
+                    if (v_new_off_floor < v_new_off_round)
+                        v_new = v_min + v_new_off_round;
+                    else
+                        v_new = v_min + v_new_off_floor;
+                }
+            }
+
+            // Round to user desired precision based on format string
+            v_new = RoundScalarWithFormatT<TYPE,SIGNEDTYPE>(format, data_type, v_new);
+
+            // Apply result
+            if (*v != v_new)
+            {
+                *v = v_new;
+                value_changed = true;
+            }
+        }
+    }
+
+    if (slider_sz < 1.0f)
+    {
+        *out_grab_bb = ImRect(bb.Min, bb.Min);
+    }
+    else
+    {
+        // Output grab position so it can be displayed by the caller
+        float grab_t = SliderCalcRatioFromValueT<TYPE, FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
+        if (axis == ImGuiAxis_Y)
+            grab_t = 1.0f - grab_t;
+        const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
+        if (axis == ImGuiAxis_X)
+            *out_grab_bb = ImRect(grab_pos - grab_sz * 0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz * 0.5f, bb.Max.y - grab_padding);
+        else
+            *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz * 0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz * 0.5f);
+    }
+
+    return value_changed;
+}
+
+// For 32-bit and larger types, slider bounds are limited to half the natural type range.
+// So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok.
+// It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders.
+bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb)
+{
+    switch (data_type)
+    {
+    case ImGuiDataType_S8:  { ImS32 v32 = (ImS32)*(ImS8*)p_v;  bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS8*)p_min,  *(const ImS8*)p_max,  format, power, flags, out_grab_bb); if (r) *(ImS8*)p_v  = (ImS8)v32;  return r; }
+    case ImGuiDataType_U8:  { ImU32 v32 = (ImU32)*(ImU8*)p_v;  bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU8*)p_min,  *(const ImU8*)p_max,  format, power, flags, out_grab_bb); if (r) *(ImU8*)p_v  = (ImU8)v32;  return r; }
+    case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
+    case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
+    case ImGuiDataType_S32:
+        IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN/2 && *(const ImS32*)p_max <= IM_S32_MAX/2);
+        return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)p_v,  *(const ImS32*)p_min,  *(const ImS32*)p_max,  format, power, flags, out_grab_bb);
+    case ImGuiDataType_U32:
+        IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX/2);
+        return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)p_v,  *(const ImU32*)p_min,  *(const ImU32*)p_max,  format, power, flags, out_grab_bb);
+    case ImGuiDataType_S64:
+        IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN/2 && *(const ImS64*)p_max <= IM_S64_MAX/2);
+        return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)p_v,  *(const ImS64*)p_min,  *(const ImS64*)p_max,  format, power, flags, out_grab_bb);
+    case ImGuiDataType_U64:
+        IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX/2);
+        return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)p_v,  *(const ImU64*)p_min,  *(const ImU64*)p_max,  format, power, flags, out_grab_bb);
+    case ImGuiDataType_Float:
+        IM_ASSERT(*(const float*)p_min >= -FLT_MAX/2.0f && *(const float*)p_max <= FLT_MAX/2.0f);
+        return SliderBehaviorT<float, float, float >(bb, id, data_type, (float*)p_v,  *(const float*)p_min,  *(const float*)p_max,  format, power, flags, out_grab_bb);
+    case ImGuiDataType_Double:
+        IM_ASSERT(*(const double*)p_min >= -DBL_MAX/2.0f && *(const double*)p_max <= DBL_MAX/2.0f);
+        return SliderBehaviorT<double,double,double>(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, power, flags, out_grab_bb);
+    case ImGuiDataType_COUNT: break;
+    }
+    IM_ASSERT(0);
+    return false;
+}
+
+// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required.
+// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    const float w = CalcItemWidth();
+
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
+    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, id, &frame_bb))
+        return false;
+
+    // Default format string when passing NULL
+    if (format == NULL)
+        format = DataTypeGetInfo(data_type)->PrintFmt;
+    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+        format = PatchFormatStringFloatToInt(format);
+
+    // Tabbing or CTRL-clicking on Slider turns it into an input box
+    const bool hovered = ItemHoverable(frame_bb, id);
+    bool temp_input_is_active = TempInputIsActive(id);
+    bool temp_input_start = false;
+    if (!temp_input_is_active)
+    {
+        const bool focus_requested = FocusableItemRegister(window, id);
+        const bool clicked = (hovered && g.IO.MouseClicked[0]);
+        if (focus_requested || clicked || g.NavActivateId == id || g.NavInputId == id)
+        {
+            SetActiveID(id, window);
+            SetFocusID(id, window);
+            FocusWindow(window);
+            g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+            if (focus_requested || (clicked && g.IO.KeyCtrl) || g.NavInputId == id)
+            {
+                temp_input_start = true;
+                FocusableItemUnregister(window);
+            }
+        }
+    }
+    if (temp_input_is_active || temp_input_start)
+        return TempInputScalar(frame_bb, id, label, data_type, p_data, format);
+
+    // Draw frame
+    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+    RenderNavHighlight(frame_bb, id);
+    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
+
+    // Slider behavior
+    ImRect grab_bb;
+    const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_None, &grab_bb);
+    if (value_changed)
+        MarkItemEdited(id);
+
+    // Render grab
+    if (grab_bb.Max.x > grab_bb.Min.x)
+        window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+
+    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+    char value_buf[64];
+    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+    RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f));
+
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
+    return value_changed;
+}
+
+// Add multiple sliders on 1 line for compact edition of multiple components
+bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    bool value_changed = false;
+    BeginGroup();
+    PushID(label);
+    PushMultiItemsWidths(components, CalcItemWidth());
+    size_t type_size = GDataTypeInfo[data_type].Size;
+    for (int i = 0; i < components; i++)
+    {
+        PushID(i);
+        if (i > 0)
+            SameLine(0, g.Style.ItemInnerSpacing.x);
+        value_changed |= SliderScalar("", data_type, v, v_min, v_max, format, power);
+        PopID();
+        PopItemWidth();
+        v = (void*)((char*)v + type_size);
+    }
+    PopID();
+
+    const char* label_end = FindRenderedTextEnd(label);
+    if (label != label_end)
+    {
+        SameLine(0, g.Style.ItemInnerSpacing.x);
+        TextEx(label, label_end);
+    }
+
+    EndGroup();
+    return value_changed;
+}
+
+bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power)
+{
+    return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power);
+}
+
+bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power)
+{
+    return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power);
+}
+
+bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power)
+{
+    return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power);
+}
+
+bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power)
+{
+    return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power);
+}
+
+bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format)
+{
+    if (format == NULL)
+        format = "%.0f deg";
+    float v_deg = (*v_rad) * 360.0f / (2*IM_PI);
+    bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, 1.0f);
+    *v_rad = v_deg * (2*IM_PI) / 360.0f;
+    return value_changed;
+}
+
+bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format)
+{
+    return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format);
+}
+
+bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format)
+{
+    return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format);
+}
+
+bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format)
+{
+    return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format);
+}
+
+bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format)
+{
+    return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format);
+}
+
+bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+    ItemSize(bb, style.FramePadding.y);
+    if (!ItemAdd(frame_bb, id))
+        return false;
+
+    // Default format string when passing NULL
+    if (format == NULL)
+        format = DataTypeGetInfo(data_type)->PrintFmt;
+    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+        format = PatchFormatStringFloatToInt(format);
+
+    const bool hovered = ItemHoverable(frame_bb, id);
+    if ((hovered && g.IO.MouseClicked[0]) || g.NavActivateId == id || g.NavInputId == id)
+    {
+        SetActiveID(id, window);
+        SetFocusID(id, window);
+        FocusWindow(window);
+        g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+    }
+
+    // Draw frame
+    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+    RenderNavHighlight(frame_bb, id);
+    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
+
+    // Slider behavior
+    ImRect grab_bb;
+    const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_Vertical, &grab_bb);
+    if (value_changed)
+        MarkItemEdited(id);
+
+    // Render grab
+    if (grab_bb.Max.y > grab_bb.Min.y)
+        window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+
+    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+    // For the vertical slider we allow centered text to overlap the frame padding
+    char value_buf[64];
+    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+    RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f));
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    return value_changed;
+}
+
+bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power)
+{
+    return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, power);
+}
+
+bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format)
+{
+    return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
+//-------------------------------------------------------------------------
+// - ImParseFormatFindStart() [Internal]
+// - ImParseFormatFindEnd() [Internal]
+// - ImParseFormatTrimDecorations() [Internal]
+// - ImParseFormatPrecision() [Internal]
+// - TempInputTextScalar() [Internal]
+// - InputScalar()
+// - InputScalarN()
+// - InputFloat()
+// - InputFloat2()
+// - InputFloat3()
+// - InputFloat4()
+// - InputInt()
+// - InputInt2()
+// - InputInt3()
+// - InputInt4()
+// - InputDouble()
+//-------------------------------------------------------------------------
+
+// We don't use strchr() because our strings are usually very short and often start with '%'
+const char* ImParseFormatFindStart(const char* fmt)
+{
+    while (char c = fmt[0])
+    {
+        if (c == '%' && fmt[1] != '%')
+            return fmt;
+        else if (c == '%')
+            fmt++;
+        fmt++;
+    }
+    return fmt;
+}
+
+const char* ImParseFormatFindEnd(const char* fmt)
+{
+    // Printf/scanf types modifiers: I/L/h/j/l/t/w/z. Other uppercase letters qualify as types aka end of the format.
+    if (fmt[0] != '%')
+        return fmt;
+    const unsigned int ignored_uppercase_mask = (1 << ('I'-'A')) | (1 << ('L'-'A'));
+    const unsigned int ignored_lowercase_mask = (1 << ('h'-'a')) | (1 << ('j'-'a')) | (1 << ('l'-'a')) | (1 << ('t'-'a')) | (1 << ('w'-'a')) | (1 << ('z'-'a'));
+    for (char c; (c = *fmt) != 0; fmt++)
+    {
+        if (c >= 'A' && c <= 'Z' && ((1 << (c - 'A')) & ignored_uppercase_mask) == 0)
+            return fmt + 1;
+        if (c >= 'a' && c <= 'z' && ((1 << (c - 'a')) & ignored_lowercase_mask) == 0)
+            return fmt + 1;
+    }
+    return fmt;
+}
+
+// Extract the format out of a format string with leading or trailing decorations
+//  fmt = "blah blah"  -> return fmt
+//  fmt = "%.3f"       -> return fmt
+//  fmt = "hello %.3f" -> return fmt + 6
+//  fmt = "%.3f hello" -> return buf written with "%.3f"
+const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_size)
+{
+    const char* fmt_start = ImParseFormatFindStart(fmt);
+    if (fmt_start[0] != '%')
+        return fmt;
+    const char* fmt_end = ImParseFormatFindEnd(fmt_start);
+    if (fmt_end[0] == 0) // If we only have leading decoration, we don't need to copy the data.
+        return fmt_start;
+    ImStrncpy(buf, fmt_start, ImMin((size_t)(fmt_end - fmt_start) + 1, buf_size));
+    return buf;
+}
+
+// Parse display precision back from the display format string
+// FIXME: This is still used by some navigation code path to infer a minimum tweak step, but we should aim to rework widgets so it isn't needed.
+int ImParseFormatPrecision(const char* fmt, int default_precision)
+{
+    fmt = ImParseFormatFindStart(fmt);
+    if (fmt[0] != '%')
+        return default_precision;
+    fmt++;
+    while (*fmt >= '0' && *fmt <= '9')
+        fmt++;
+    int precision = INT_MAX;
+    if (*fmt == '.')
+    {
+        fmt = ImAtoi<int>(fmt + 1, &precision);
+        if (precision < 0 || precision > 99)
+            precision = default_precision;
+    }
+    if (*fmt == 'e' || *fmt == 'E') // Maximum precision with scientific notation
+        precision = -1;
+    if ((*fmt == 'g' || *fmt == 'G') && precision == INT_MAX)
+        precision = -1;
+    return (precision == INT_MAX) ? default_precision : precision;
+}
+
+// Create text input in place of another active widget (e.g. used when doing a CTRL+Click on drag/slider widgets)
+// FIXME: Facilitate using this in variety of other situations.
+bool ImGui::TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags)
+{
+    // On the first frame, g.TempInputTextId == 0, then on subsequent frames it becomes == id.
+    // We clear ActiveID on the first frame to allow the InputText() taking it back.
+    ImGuiContext& g = *GImGui;
+    const bool init = (g.TempInputId != id);
+    if (init)
+        ClearActiveID();
+
+    g.CurrentWindow->DC.CursorPos = bb.Min;
+    bool value_changed = InputTextEx(label, NULL, buf, buf_size, bb.GetSize(), flags);
+    if (init)
+    {
+        // First frame we started displaying the InputText widget, we expect it to take the active id.
+        IM_ASSERT(g.ActiveId == id);
+        g.TempInputId = g.ActiveId;
+    }
+    return value_changed;
+}
+
+bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format)
+{
+    ImGuiContext& g = *GImGui;
+
+    char fmt_buf[32];
+    char data_buf[32];
+    format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf));
+    DataTypeFormatString(data_buf, IM_ARRAYSIZE(data_buf), data_type, p_data, format);
+    ImStrTrimBlanks(data_buf);
+
+    ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited;
+    flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
+    bool value_changed = TempInputText(bb, id, label, data_buf, IM_ARRAYSIZE(data_buf), flags);
+    if (value_changed)
+    {
+        value_changed = DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, p_data, NULL);
+        if (value_changed)
+            MarkItemEdited(id);
+    }
+    return value_changed;
+}
+
+// Note: p_data, p_step, p_step_fast are _pointers_ to a memory address holding the data. For an Input widget, p_step and p_step_fast are optional.
+// Read code of e.g. InputFloat(), InputInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    ImGuiStyle& style = g.Style;
+
+    if (format == NULL)
+        format = DataTypeGetInfo(data_type)->PrintFmt;
+
+    char buf[64];
+    DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format);
+
+    bool value_changed = false;
+    if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
+        flags |= ImGuiInputTextFlags_CharsDecimal;
+    flags |= ImGuiInputTextFlags_AutoSelectAll;
+    flags |= ImGuiInputTextFlags_NoMarkEdited;  // We call MarkItemEdited() ourselve by comparing the actual data rather than the string.
+
+    if (p_step != NULL)
+    {
+        const float button_size = GetFrameHeight();
+
+        BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive()
+        PushID(label);
+        SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
+        if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view
+            value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format);
+
+        // Step buttons
+        const ImVec2 backup_frame_padding = style.FramePadding;
+        style.FramePadding.x = style.FramePadding.y;
+        ImGuiButtonFlags button_flags = ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups;
+        if (flags & ImGuiInputTextFlags_ReadOnly)
+            button_flags |= ImGuiButtonFlags_Disabled;
+        SameLine(0, style.ItemInnerSpacing.x);
+        if (ButtonEx("-", ImVec2(button_size, button_size), button_flags))
+        {
+            DataTypeApplyOp(data_type, '-', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
+            value_changed = true;
+        }
+        SameLine(0, style.ItemInnerSpacing.x);
+        if (ButtonEx("+", ImVec2(button_size, button_size), button_flags))
+        {
+            DataTypeApplyOp(data_type, '+', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
+            value_changed = true;
+        }
+
+        const char* label_end = FindRenderedTextEnd(label);
+        if (label != label_end)
+        {
+            SameLine(0, style.ItemInnerSpacing.x);
+            TextEx(label, label_end);
+        }
+        style.FramePadding = backup_frame_padding;
+
+        PopID();
+        EndGroup();
+    }
+    else
+    {
+        if (InputText(label, buf, IM_ARRAYSIZE(buf), flags))
+            value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format);
+    }
+    if (value_changed)
+        MarkItemEdited(window->DC.LastItemId);
+
+    return value_changed;
+}
+
+bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    bool value_changed = false;
+    BeginGroup();
+    PushID(label);
+    PushMultiItemsWidths(components, CalcItemWidth());
+    size_t type_size = GDataTypeInfo[data_type].Size;
+    for (int i = 0; i < components; i++)
+    {
+        PushID(i);
+        if (i > 0)
+            SameLine(0, g.Style.ItemInnerSpacing.x);
+        value_changed |= InputScalar("", data_type, p_data, p_step, p_step_fast, format, flags);
+        PopID();
+        PopItemWidth();
+        p_data = (void*)((char*)p_data + type_size);
+    }
+    PopID();
+
+    const char* label_end = FindRenderedTextEnd(label);
+    if (label != label_end)
+    {
+        SameLine(0.0f, g.Style.ItemInnerSpacing.x);
+        TextEx(label, label_end);
+    }
+
+    EndGroup();
+    return value_changed;
+}
+
+bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+    flags |= ImGuiInputTextFlags_CharsScientific;
+    return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, flags);
+}
+
+bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
+}
+
+// Prefer using "const char* format" directly, which is more flexible and consistent with other API.
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags)
+{
+    char format[16] = "%f";
+    if (decimal_precision >= 0)
+        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
+    return InputFloat(label, v, step, step_fast, format, flags);
+}
+
+bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags)
+{
+    char format[16] = "%f";
+    if (decimal_precision >= 0)
+        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
+    return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags)
+{
+    char format[16] = "%f";
+    if (decimal_precision >= 0)
+        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
+    return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags)
+{
+    char format[16] = "%f";
+    if (decimal_precision >= 0)
+        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
+    return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
+}
+#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags)
+{
+    // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
+    const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d";
+    return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, flags);
+}
+
+bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags)
+{
+    return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+    flags |= ImGuiInputTextFlags_CharsScientific;
+    return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, flags);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: InputText, InputTextMultiline, InputTextWithHint
+//-------------------------------------------------------------------------
+// - InputText()
+// - InputTextWithHint()
+// - InputTextMultiline()
+// - InputTextEx() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+    IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
+    return InputTextEx(label, NULL, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data);
+}
+
+bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+    return InputTextEx(label, NULL, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
+}
+
+bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+    IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
+    return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data);
+}
+
+static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end)
+{
+    int line_count = 0;
+    const char* s = text_begin;
+    while (char c = *s++) // We are only matching for \n so we can ignore UTF-8 decoding
+        if (c == '\n')
+            line_count++;
+    s--;
+    if (s[0] != '\n' && s[0] != '\r')
+        line_count++;
+    *out_text_end = s;
+    return line_count;
+}
+
+static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
+{
+    ImGuiContext& g = *GImGui;
+    ImFont* font = g.Font;
+    const float line_height = g.FontSize;
+    const float scale = line_height / font->FontSize;
+
+    ImVec2 text_size = ImVec2(0,0);
+    float line_width = 0.0f;
+
+    const ImWchar* s = text_begin;
+    while (s < text_end)
+    {
+        unsigned int c = (unsigned int)(*s++);
+        if (c == '\n')
+        {
+            text_size.x = ImMax(text_size.x, line_width);
+            text_size.y += line_height;
+            line_width = 0.0f;
+            if (stop_on_new_line)
+                break;
+            continue;
+        }
+        if (c == '\r')
+            continue;
+
+        const float char_width = font->GetCharAdvance((ImWchar)c) * scale;
+        line_width += char_width;
+    }
+
+    if (text_size.x < line_width)
+        text_size.x = line_width;
+
+    if (out_offset)
+        *out_offset = ImVec2(line_width, text_size.y + line_height);  // offset allow for the possibility of sitting after a trailing \n
+
+    if (line_width > 0 || text_size.y == 0.0f)                        // whereas size.y will ignore the trailing \n
+        text_size.y += line_height;
+
+    if (remaining)
+        *remaining = s;
+
+    return text_size;
+}
+
+// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar)
+namespace ImStb
+{
+
+static int     STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj)                             { return obj->CurLenW; }
+static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, int idx)                      { return obj->TextW[idx]; }
+static float   STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx)  { ImWchar c = obj->TextW[line_start_idx + char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *GImGui; return g.Font->GetCharAdvance(c) * (g.FontSize / g.Font->FontSize); }
+static int     STB_TEXTEDIT_KEYTOTEXT(int key)                                                    { return key >= 0x200000 ? 0 : key; }
+static ImWchar STB_TEXTEDIT_NEWLINE = '\n';
+static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* obj, int line_start_idx)
+{
+    const ImWchar* text = obj->TextW.Data;
+    const ImWchar* text_remaining = NULL;
+    const ImVec2 size = InputTextCalcTextSizeW(text + line_start_idx, text + obj->CurLenW, &text_remaining, NULL, true);
+    r->x0 = 0.0f;
+    r->x1 = size.x;
+    r->baseline_y_delta = size.y;
+    r->ymin = 0.0f;
+    r->ymax = size.y;
+    r->num_chars = (int)(text_remaining - (text + line_start_idx));
+}
+
+static bool is_separator(unsigned int c)                                        { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; }
+static int  is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx)      { return idx > 0 ? (is_separator( obj->TextW[idx-1] ) && !is_separator( obj->TextW[idx] ) ) : 1; }
+static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)   { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; }
+#ifdef __APPLE__    // FIXME: Move setting to IO structure
+static int  is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx)       { return idx > 0 ? (!is_separator( obj->TextW[idx-1] ) && is_separator( obj->TextW[idx] ) ) : 1; }
+static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; }
+#else
+static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; }
+#endif
+#define STB_TEXTEDIT_MOVEWORDLEFT   STB_TEXTEDIT_MOVEWORDLEFT_IMPL    // They need to be #define for stb_textedit.h
+#define STB_TEXTEDIT_MOVEWORDRIGHT  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL
+
+static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING* obj, int pos, int n)
+{
+    ImWchar* dst = obj->TextW.Data + pos;
+
+    // We maintain our buffer length in both UTF-8 and wchar formats
+    obj->CurLenA -= ImTextCountUtf8BytesFromStr(dst, dst + n);
+    obj->CurLenW -= n;
+
+    // Offset remaining text (FIXME-OPT: Use memmove)
+    const ImWchar* src = obj->TextW.Data + pos + n;
+    while (ImWchar c = *src++)
+        *dst++ = c;
+    *dst = '\0';
+}
+
+static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const ImWchar* new_text, int new_text_len)
+{
+    const bool is_resizable = (obj->UserFlags & ImGuiInputTextFlags_CallbackResize) != 0;
+    const int text_len = obj->CurLenW;
+    IM_ASSERT(pos <= text_len);
+
+    const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len);
+    if (!is_resizable && (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufCapacityA))
+        return false;
+
+    // Grow internal buffer if needed
+    if (new_text_len + text_len + 1 > obj->TextW.Size)
+    {
+        if (!is_resizable)
+            return false;
+        IM_ASSERT(text_len < obj->TextW.Size);
+        obj->TextW.resize(text_len + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1);
+    }
+
+    ImWchar* text = obj->TextW.Data;
+    if (pos != text_len)
+        memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar));
+    memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar));
+
+    obj->CurLenW += new_text_len;
+    obj->CurLenA += new_text_len_utf8;
+    obj->TextW[obj->CurLenW] = '\0';
+
+    return true;
+}
+
+// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols)
+#define STB_TEXTEDIT_K_LEFT         0x200000 // keyboard input to move cursor left
+#define STB_TEXTEDIT_K_RIGHT        0x200001 // keyboard input to move cursor right
+#define STB_TEXTEDIT_K_UP           0x200002 // keyboard input to move cursor up
+#define STB_TEXTEDIT_K_DOWN         0x200003 // keyboard input to move cursor down
+#define STB_TEXTEDIT_K_LINESTART    0x200004 // keyboard input to move cursor to start of line
+#define STB_TEXTEDIT_K_LINEEND      0x200005 // keyboard input to move cursor to end of line
+#define STB_TEXTEDIT_K_TEXTSTART    0x200006 // keyboard input to move cursor to start of text
+#define STB_TEXTEDIT_K_TEXTEND      0x200007 // keyboard input to move cursor to end of text
+#define STB_TEXTEDIT_K_DELETE       0x200008 // keyboard input to delete selection or character under cursor
+#define STB_TEXTEDIT_K_BACKSPACE    0x200009 // keyboard input to delete selection or character left of cursor
+#define STB_TEXTEDIT_K_UNDO         0x20000A // keyboard input to perform undo
+#define STB_TEXTEDIT_K_REDO         0x20000B // keyboard input to perform redo
+#define STB_TEXTEDIT_K_WORDLEFT     0x20000C // keyboard input to move cursor left one word
+#define STB_TEXTEDIT_K_WORDRIGHT    0x20000D // keyboard input to move cursor right one word
+#define STB_TEXTEDIT_K_SHIFT        0x400000
+
+#define STB_TEXTEDIT_IMPLEMENTATION
+#include "imstb_textedit.h"
+
+// stb_textedit internally allows for a single undo record to do addition and deletion, but somehow, calling
+// the stb_textedit_paste() function creates two separate records, so we perform it manually. (FIXME: Report to nothings/stb?)
+static void stb_textedit_replace(STB_TEXTEDIT_STRING* str, STB_TexteditState* state, const STB_TEXTEDIT_CHARTYPE* text, int text_len)
+{
+    stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len);
+    ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW);
+    if (text_len <= 0)
+        return;
+    if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len))
+    {
+        state->cursor = text_len;
+        state->has_preferred_x = 0;
+        return;
+    }
+    IM_ASSERT(0); // Failed to insert character, normally shouldn't happen because of how we currently use stb_textedit_replace()
+}
+
+} // namespace ImStb
+
+void ImGuiInputTextState::OnKeyPressed(int key)
+{
+    stb_textedit_key(this, &Stb, key);
+    CursorFollow = true;
+    CursorAnimReset();
+}
+
+ImGuiInputTextCallbackData::ImGuiInputTextCallbackData()
+{
+    memset(this, 0, sizeof(*this));
+}
+
+// Public API to manipulate UTF-8 text
+// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
+// FIXME: The existence of this rarely exercised code path is a bit of a nuisance.
+void ImGuiInputTextCallbackData::DeleteChars(int pos, int bytes_count)
+{
+    IM_ASSERT(pos + bytes_count <= BufTextLen);
+    char* dst = Buf + pos;
+    const char* src = Buf + pos + bytes_count;
+    while (char c = *src++)
+        *dst++ = c;
+    *dst = '\0';
+
+    if (CursorPos + bytes_count >= pos)
+        CursorPos -= bytes_count;
+    else if (CursorPos >= pos)
+        CursorPos = pos;
+    SelectionStart = SelectionEnd = CursorPos;
+    BufDirty = true;
+    BufTextLen -= bytes_count;
+}
+
+void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, const char* new_text_end)
+{
+    const bool is_resizable = (Flags & ImGuiInputTextFlags_CallbackResize) != 0;
+    const int new_text_len = new_text_end ? (int)(new_text_end - new_text) : (int)strlen(new_text);
+    if (new_text_len + BufTextLen >= BufSize)
+    {
+        if (!is_resizable)
+            return;
+
+        // Contrary to STB_TEXTEDIT_INSERTCHARS() this is working in the UTF8 buffer, hence the midly similar code (until we remove the U16 buffer alltogether!)
+        ImGuiContext& g = *GImGui;
+        ImGuiInputTextState* edit_state = &g.InputTextState;
+        IM_ASSERT(edit_state->ID != 0 && g.ActiveId == edit_state->ID);
+        IM_ASSERT(Buf == edit_state->TextA.Data);
+        int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1;
+        edit_state->TextA.reserve(new_buf_size + 1);
+        Buf = edit_state->TextA.Data;
+        BufSize = edit_state->BufCapacityA = new_buf_size;
+    }
+
+    if (BufTextLen != pos)
+        memmove(Buf + pos + new_text_len, Buf + pos, (size_t)(BufTextLen - pos));
+    memcpy(Buf + pos, new_text, (size_t)new_text_len * sizeof(char));
+    Buf[BufTextLen + new_text_len] = '\0';
+
+    if (CursorPos >= pos)
+        CursorPos += new_text_len;
+    SelectionStart = SelectionEnd = CursorPos;
+    BufDirty = true;
+    BufTextLen += new_text_len;
+}
+
+// Return false to discard a character.
+static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+    unsigned int c = *p_char;
+
+    // Filter non-printable (NB: isprint is unreliable! see #2467)
+    if (c < 0x20)
+    {
+        bool pass = false;
+        pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline));
+        pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput));
+        if (!pass)
+            return false;
+    }
+
+    // We ignore Ascii representation of delete (emitted from Backspace on OSX, see #2578, #2817)
+    if (c == 127)
+        return false;
+
+    // Filter private Unicode range. GLFW on OSX seems to send private characters for special keys like arrow keys (FIXME)
+    if (c >= 0xE000 && c <= 0xF8FF)
+        return false;
+
+    // Filter Unicode ranges we are not handling in this build.
+    if (c > IM_UNICODE_CODEPOINT_MAX)
+        return false;
+
+    // Generic named filters
+    if (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_CharsScientific))
+    {
+        if (flags & ImGuiInputTextFlags_CharsDecimal)
+            if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/'))
+                return false;
+
+        if (flags & ImGuiInputTextFlags_CharsScientific)
+            if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/') && (c != 'e') && (c != 'E'))
+                return false;
+
+        if (flags & ImGuiInputTextFlags_CharsHexadecimal)
+            if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F'))
+                return false;
+
+        if (flags & ImGuiInputTextFlags_CharsUppercase)
+            if (c >= 'a' && c <= 'z')
+                *p_char = (c += (unsigned int)('A'-'a'));
+
+        if (flags & ImGuiInputTextFlags_CharsNoBlank)
+            if (ImCharIsBlankW(c))
+                return false;
+    }
+
+    // Custom callback filter
+    if (flags & ImGuiInputTextFlags_CallbackCharFilter)
+    {
+        ImGuiInputTextCallbackData callback_data;
+        memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
+        callback_data.EventFlag = ImGuiInputTextFlags_CallbackCharFilter;
+        callback_data.EventChar = (ImWchar)c;
+        callback_data.Flags = flags;
+        callback_data.UserData = user_data;
+        if (callback(&callback_data) != 0)
+            return false;
+        *p_char = callback_data.EventChar;
+        if (!callback_data.EventChar)
+            return false;
+    }
+
+    return true;
+}
+
+// Edit a string of text
+// - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!".
+//   This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match
+//   Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator.
+// - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while the InputText is active has no effect.
+// - If you want to use ImGui::InputText() with std::string, see misc/cpp/imgui_stdlib.h
+// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are
+//  doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
+bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline)));        // Can't use both together (they both use up/down keys)
+    IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key)
+
+    ImGuiContext& g = *GImGui;
+    ImGuiIO& io = g.IO;
+    const ImGuiStyle& style = g.Style;
+
+    const bool RENDER_SELECTION_WHEN_INACTIVE = false;
+    const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
+    const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0;
+    const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
+    const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
+    const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0;
+    if (is_resizable)
+        IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
+
+    if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope,
+        BeginGroup();
+    const ImGuiID id = window->GetID(label);
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line
+    const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y);
+
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+    const ImRect total_bb(frame_bb.Min, frame_bb.Min + total_size);
+
+    ImGuiWindow* draw_window = window;
+    ImVec2 inner_size = frame_size;
+    if (is_multiline)
+    {
+        if (!ItemAdd(total_bb, id, &frame_bb))
+        {
+            ItemSize(total_bb, style.FramePadding.y);
+            EndGroup();
+            return false;
+        }
+
+        // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug.
+        PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
+        PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
+        PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
+        PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
+        bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding);
+        PopStyleVar(3);
+        PopStyleColor();
+        if (!child_visible)
+        {
+            EndChild();
+            EndGroup();
+            return false;
+        }
+        draw_window = g.CurrentWindow; // Child window
+        draw_window->DC.NavLayerActiveMaskNext |= draw_window->DC.NavLayerCurrentMask; // This is to ensure that EndChild() will display a navigation highlight so we can "enter" into it.
+        inner_size.x -= draw_window->ScrollbarSizes.x;
+    }
+    else
+    {
+        ItemSize(total_bb, style.FramePadding.y);
+        if (!ItemAdd(total_bb, id, &frame_bb))
+            return false;
+    }
+    const bool hovered = ItemHoverable(frame_bb, id);
+    if (hovered)
+        g.MouseCursor = ImGuiMouseCursor_TextInput;
+
+    // We are only allowed to access the state if we are already the active widget.
+    ImGuiInputTextState* state = GetInputTextState(id);
+
+    const bool focus_requested = FocusableItemRegister(window, id);
+    const bool focus_requested_by_code = focus_requested && (g.FocusRequestCurrWindow == window && g.FocusRequestCurrCounterRegular == window->DC.FocusCounterRegular);
+    const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code;
+
+    const bool user_clicked = hovered && io.MouseClicked[0];
+    const bool user_nav_input_start = (g.ActiveId != id) && ((g.NavInputId == id) || (g.NavActivateId == id && g.NavInputSource == ImGuiInputSource_NavKeyboard));
+    const bool user_scroll_finish = is_multiline && state != NULL && g.ActiveId == 0 && g.ActiveIdPreviousFrame == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
+    const bool user_scroll_active = is_multiline && state != NULL && g.ActiveId == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
+
+    bool clear_active_id = false;
+    bool select_all = (g.ActiveId != id) && ((flags & ImGuiInputTextFlags_AutoSelectAll) != 0 || user_nav_input_start) && (!is_multiline);
+
+    const bool init_make_active = (focus_requested || user_clicked || user_scroll_finish || user_nav_input_start);
+    const bool init_state = (init_make_active || user_scroll_active);
+    if (init_state && g.ActiveId != id)
+    {
+        // Access state even if we don't own it yet.
+        state = &g.InputTextState;
+        state->CursorAnimReset();
+
+        // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar)
+        // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode)
+        const int buf_len = (int)strlen(buf);
+        state->InitialTextA.resize(buf_len + 1);    // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string.
+        memcpy(state->InitialTextA.Data, buf, buf_len + 1);
+
+        // Start edition
+        const char* buf_end = NULL;
+        state->TextW.resize(buf_size + 1);          // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string.
+        state->TextA.resize(0);
+        state->TextAIsValid = false;                // TextA is not valid yet (we will display buf until then)
+        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end);
+        state->CurLenA = (int)(buf_end - buf);      // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8.
+
+        // Preserve cursor position and undo/redo stack if we come back to same widget
+        // FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed.
+        const bool recycle_state = (state->ID == id);
+        if (recycle_state)
+        {
+            // Recycle existing cursor/selection/undo stack but clamp position
+            // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler.
+            state->CursorClamp();
+        }
+        else
+        {
+            state->ID = id;
+            state->ScrollX = 0.0f;
+            stb_textedit_initialize_state(&state->Stb, !is_multiline);
+            if (!is_multiline && focus_requested_by_code)
+                select_all = true;
+        }
+        if (flags & ImGuiInputTextFlags_AlwaysInsertMode)
+            state->Stb.insert_mode = 1;
+        if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl)))
+            select_all = true;
+    }
+
+    if (g.ActiveId != id && init_make_active)
+    {
+        IM_ASSERT(state && state->ID == id);
+        SetActiveID(id, window);
+        SetFocusID(id, window);
+        FocusWindow(window);
+
+        // Declare our inputs
+        IM_ASSERT(ImGuiNavInput_COUNT < 32);
+        g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+        if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory))
+            g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+        g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);
+        g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Home) | ((ImU64)1 << ImGuiKey_End);
+        if (is_multiline)
+            g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_PageUp) | ((ImU64)1 << ImGuiKey_PageDown); // FIXME-NAV: Page up/down actually not supported yet by widget, but claim them ahead.
+        if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput))  // Disable keyboard tabbing out as we will use the \t character.
+            g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Tab);
+    }
+
+    // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function)
+    if (g.ActiveId == id && state == NULL)
+        ClearActiveID();
+
+    // Release focus when we click outside
+    if (g.ActiveId == id && io.MouseClicked[0] && !init_state && !init_make_active) //-V560
+        clear_active_id = true;
+
+    // Lock the decision of whether we are going to take the path displaying the cursor or selection
+    const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
+    bool render_selection = state && state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
+    bool value_changed = false;
+    bool enter_pressed = false;
+
+    // When read-only we always use the live data passed to the function
+    // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :(
+    if (is_readonly && state != NULL && (render_cursor || render_selection))
+    {
+        const char* buf_end = NULL;
+        state->TextW.resize(buf_size + 1);
+        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, buf, NULL, &buf_end);
+        state->CurLenA = (int)(buf_end - buf);
+        state->CursorClamp();
+        render_selection &= state->HasSelection();
+    }
+
+    // Select the buffer to render.
+    const bool buf_display_from_state = (render_cursor || render_selection || g.ActiveId == id) && !is_readonly && state && state->TextAIsValid;
+    const bool is_displaying_hint = (hint != NULL && (buf_display_from_state ? state->TextA.Data : buf)[0] == 0);
+
+    // Password pushes a temporary font with only a fallback glyph
+    if (is_password && !is_displaying_hint)
+    {
+        const ImFontGlyph* glyph = g.Font->FindGlyph('*');
+        ImFont* password_font = &g.InputTextPasswordFont;
+        password_font->FontSize = g.Font->FontSize;
+        password_font->Scale = g.Font->Scale;
+        password_font->DisplayOffset = g.Font->DisplayOffset;
+        password_font->Ascent = g.Font->Ascent;
+        password_font->Descent = g.Font->Descent;
+        password_font->ContainerAtlas = g.Font->ContainerAtlas;
+        password_font->FallbackGlyph = glyph;
+        password_font->FallbackAdvanceX = glyph->AdvanceX;
+        IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
+        PushFont(password_font);
+    }
+
+    // Process mouse inputs and character inputs
+    int backup_current_text_length = 0;
+    if (g.ActiveId == id)
+    {
+        IM_ASSERT(state != NULL);
+        backup_current_text_length = state->CurLenA;
+        state->BufCapacityA = buf_size;
+        state->UserFlags = flags;
+        state->UserCallback = callback;
+        state->UserCallbackData = callback_user_data;
+
+        // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
+        // Down the line we should have a cleaner library-wide concept of Selected vs Active.
+        g.ActiveIdAllowOverlap = !io.MouseDown[0];
+        g.WantTextInputNextFrame = 1;
+
+        // Edit in progress
+        const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX;
+        const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
+
+        const bool is_osx = io.ConfigMacOSXBehaviors;
+        if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0]))
+        {
+            state->SelectAll();
+            state->SelectedAllMouseLock = true;
+        }
+        else if (hovered && is_osx && io.MouseDoubleClicked[0])
+        {
+            // Double-click select a word only, OS X style (by simulating keystrokes)
+            state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
+            state->OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
+        }
+        else if (io.MouseClicked[0] && !state->SelectedAllMouseLock)
+        {
+            if (hovered)
+            {
+                stb_textedit_click(state, &state->Stb, mouse_x, mouse_y);
+                state->CursorAnimReset();
+            }
+        }
+        else if (io.MouseDown[0] && !state->SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
+        {
+            stb_textedit_drag(state, &state->Stb, mouse_x, mouse_y);
+            state->CursorAnimReset();
+            state->CursorFollow = true;
+        }
+        if (state->SelectedAllMouseLock && !io.MouseDown[0])
+            state->SelectedAllMouseLock = false;
+
+        // It is ill-defined whether the back-end needs to send a \t character when pressing the TAB keys.
+        // Win32 and GLFW naturally do it but not SDL.
+        const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper);
+        if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly)
+            if (!io.InputQueueCharacters.contains('\t'))
+            {
+                unsigned int c = '\t'; // Insert TAB
+                if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
+                    state->OnKeyPressed((int)c);
+            }
+
+        // Process regular text input (before we check for Return because using some IME will effectively send a Return?)
+        // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters.
+        if (io.InputQueueCharacters.Size > 0)
+        {
+            if (!ignore_char_inputs && !is_readonly && !user_nav_input_start)
+                for (int n = 0; n < io.InputQueueCharacters.Size; n++)
+                {
+                    // Insert character if they pass filtering
+                    unsigned int c = (unsigned int)io.InputQueueCharacters[n];
+                    if (c == '\t' && io.KeyShift)
+                        continue;
+                    if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
+                        state->OnKeyPressed((int)c);
+                }
+
+            // Consume characters
+            io.InputQueueCharacters.resize(0);
+        }
+    }
+
+    // Process other shortcuts/key-presses
+    bool cancel_edit = false;
+    if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id)
+    {
+        IM_ASSERT(state != NULL);
+        const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0);
+        const bool is_osx = io.ConfigMacOSXBehaviors;
+        const bool is_shortcut_key = (is_osx ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl
+        const bool is_osx_shift_shortcut = is_osx && io.KeySuper && io.KeyShift && !io.KeyCtrl && !io.KeyAlt;
+        const bool is_wordmove_key_down = is_osx ? io.KeyAlt : io.KeyCtrl;                     // OS X style: Text editing cursor movement using Alt instead of Ctrl
+        const bool is_startend_key_down = is_osx && io.KeySuper && !io.KeyCtrl && !io.KeyAlt;  // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End
+        const bool is_ctrl_key_only = io.KeyCtrl && !io.KeyShift && !io.KeyAlt && !io.KeySuper;
+        const bool is_shift_key_only = io.KeyShift && !io.KeyCtrl && !io.KeyAlt && !io.KeySuper;
+
+        const bool is_cut   = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection());
+        const bool is_copy  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only  && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection());
+        const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_readonly;
+        const bool is_undo  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && !is_readonly && is_undoable);
+        const bool is_redo  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && !is_readonly && is_undoable;
+
+        if (IsKeyPressedMap(ImGuiKey_LeftArrow))                        { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_RightArrow))                  { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline)     { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline)   { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_Home))                        { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_End))                         { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_Delete) && !is_readonly)      { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
+        else if (IsKeyPressedMap(ImGuiKey_Backspace) && !is_readonly)
+        {
+            if (!state->HasSelection())
+            {
+                if (is_wordmove_key_down)
+                    state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT);
+                else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl)
+                    state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
+            }
+            state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
+        }
+        else if (IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter))
+        {
+            bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
+            if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
+            {
+                enter_pressed = clear_active_id = true;
+            }
+            else if (!is_readonly)
+            {
+                unsigned int c = '\n'; // Insert new line
+                if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
+                    state->OnKeyPressed((int)c);
+            }
+        }
+        else if (IsKeyPressedMap(ImGuiKey_Escape))
+        {
+            clear_active_id = cancel_edit = true;
+        }
+        else if (is_undo || is_redo)
+        {
+            state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO);
+            state->ClearSelection();
+        }
+        else if (is_shortcut_key && IsKeyPressedMap(ImGuiKey_A))
+        {
+            state->SelectAll();
+            state->CursorFollow = true;
+        }
+        else if (is_cut || is_copy)
+        {
+            // Cut, Copy
+            if (io.SetClipboardTextFn)
+            {
+                const int ib = state->HasSelection() ? ImMin(state->Stb.select_start, state->Stb.select_end) : 0;
+                const int ie = state->HasSelection() ? ImMax(state->Stb.select_start, state->Stb.select_end) : state->CurLenW;
+                const int clipboard_data_len = ImTextCountUtf8BytesFromStr(state->TextW.Data + ib, state->TextW.Data + ie) + 1;
+                char* clipboard_data = (char*)IM_ALLOC(clipboard_data_len * sizeof(char));
+                ImTextStrToUtf8(clipboard_data, clipboard_data_len, state->TextW.Data + ib, state->TextW.Data + ie);
+                SetClipboardText(clipboard_data);
+                MemFree(clipboard_data);
+            }
+            if (is_cut)
+            {
+                if (!state->HasSelection())
+                    state->SelectAll();
+                state->CursorFollow = true;
+                stb_textedit_cut(state, &state->Stb);
+            }
+        }
+        else if (is_paste)
+        {
+            if (const char* clipboard = GetClipboardText())
+            {
+                // Filter pasted buffer
+                const int clipboard_len = (int)strlen(clipboard);
+                ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len+1) * sizeof(ImWchar));
+                int clipboard_filtered_len = 0;
+                for (const char* s = clipboard; *s; )
+                {
+                    unsigned int c;
+                    s += ImTextCharFromUtf8(&c, s, NULL);
+                    if (c == 0)
+                        break;
+                    if (!InputTextFilterCharacter(&c, flags, callback, callback_user_data))
+                        continue;
+                    clipboard_filtered[clipboard_filtered_len++] = (ImWchar)c;
+                }
+                clipboard_filtered[clipboard_filtered_len] = 0;
+                if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation
+                {
+                    stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
+                    state->CursorFollow = true;
+                }
+                MemFree(clipboard_filtered);
+            }
+        }
+
+        // Update render selection flag after events have been handled, so selection highlight can be displayed during the same frame.
+        render_selection |= state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
+    }
+
+    // Process callbacks and apply result back to user's buffer.
+    if (g.ActiveId == id)
+    {
+        IM_ASSERT(state != NULL);
+        const char* apply_new_text = NULL;
+        int apply_new_text_length = 0;
+        if (cancel_edit)
+        {
+            // Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
+            if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0)
+            {
+                // Push records into the undo stack so we can CTRL+Z the revert operation itself
+                apply_new_text = state->InitialTextA.Data;
+                apply_new_text_length = state->InitialTextA.Size - 1;
+                ImVector<ImWchar> w_text;
+                if (apply_new_text_length > 0)
+                {
+                    w_text.resize(ImTextCountCharsFromUtf8(apply_new_text, apply_new_text + apply_new_text_length) + 1);
+                    ImTextStrFromUtf8(w_text.Data, w_text.Size, apply_new_text, apply_new_text + apply_new_text_length);
+                }
+                stb_textedit_replace(state, &state->Stb, w_text.Data, (apply_new_text_length > 0) ? (w_text.Size - 1) : 0);
+            }
+        }
+
+        // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame.
+        // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail.
+        // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize).
+        bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0);
+        if (apply_edit_back_to_user_buffer)
+        {
+            // Apply new value immediately - copy modified buffer back
+            // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer
+            // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect.
+            // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks.
+            if (!is_readonly)
+            {
+                state->TextAIsValid = true;
+                state->TextA.resize(state->TextW.Size * 4 + 1);
+                ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL);
+            }
+
+            // User callback
+            if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackAlways)) != 0)
+            {
+                IM_ASSERT(callback != NULL);
+
+                // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment.
+                ImGuiInputTextFlags event_flag = 0;
+                ImGuiKey event_key = ImGuiKey_COUNT;
+                if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressedMap(ImGuiKey_Tab))
+                {
+                    event_flag = ImGuiInputTextFlags_CallbackCompletion;
+                    event_key = ImGuiKey_Tab;
+                }
+                else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_UpArrow))
+                {
+                    event_flag = ImGuiInputTextFlags_CallbackHistory;
+                    event_key = ImGuiKey_UpArrow;
+                }
+                else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_DownArrow))
+                {
+                    event_flag = ImGuiInputTextFlags_CallbackHistory;
+                    event_key = ImGuiKey_DownArrow;
+                }
+                else if (flags & ImGuiInputTextFlags_CallbackAlways)
+                    event_flag = ImGuiInputTextFlags_CallbackAlways;
+
+                if (event_flag)
+                {
+                    ImGuiInputTextCallbackData callback_data;
+                    memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
+                    callback_data.EventFlag = event_flag;
+                    callback_data.Flags = flags;
+                    callback_data.UserData = callback_user_data;
+
+                    callback_data.EventKey = event_key;
+                    callback_data.Buf = state->TextA.Data;
+                    callback_data.BufTextLen = state->CurLenA;
+                    callback_data.BufSize = state->BufCapacityA;
+                    callback_data.BufDirty = false;
+
+                    // We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188)
+                    ImWchar* text = state->TextW.Data;
+                    const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + state->Stb.cursor);
+                    const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_start);
+                    const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_end);
+
+                    // Call user code
+                    callback(&callback_data);
+
+                    // Read back what user may have modified
+                    IM_ASSERT(callback_data.Buf == state->TextA.Data);  // Invalid to modify those fields
+                    IM_ASSERT(callback_data.BufSize == state->BufCapacityA);
+                    IM_ASSERT(callback_data.Flags == flags);
+                    if (callback_data.CursorPos != utf8_cursor_pos)            { state->Stb.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); state->CursorFollow = true; }
+                    if (callback_data.SelectionStart != utf8_selection_start)  { state->Stb.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); }
+                    if (callback_data.SelectionEnd != utf8_selection_end)      { state->Stb.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); }
+                    if (callback_data.BufDirty)
+                    {
+                        IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text!
+                        if (callback_data.BufTextLen > backup_current_text_length && is_resizable)
+                            state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length));
+                        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL);
+                        state->CurLenA = callback_data.BufTextLen;  // Assume correct length and valid UTF-8 from user, saves us an extra strlen()
+                        state->CursorAnimReset();
+                    }
+                }
+            }
+
+            // Will copy result string if modified
+            if (!is_readonly && strcmp(state->TextA.Data, buf) != 0)
+            {
+                apply_new_text = state->TextA.Data;
+                apply_new_text_length = state->CurLenA;
+            }
+        }
+
+        // Copy result to user buffer
+        if (apply_new_text)
+        {
+            // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size
+            // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used
+            // without any storage on user's side.
+            IM_ASSERT(apply_new_text_length >= 0);
+            if (is_resizable)
+            {
+                ImGuiInputTextCallbackData callback_data;
+                callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize;
+                callback_data.Flags = flags;
+                callback_data.Buf = buf;
+                callback_data.BufTextLen = apply_new_text_length;
+                callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1);
+                callback_data.UserData = callback_user_data;
+                callback(&callback_data);
+                buf = callback_data.Buf;
+                buf_size = callback_data.BufSize;
+                apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
+                IM_ASSERT(apply_new_text_length <= buf_size);
+            }
+            //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length);
+
+            // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
+            ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
+            value_changed = true;
+        }
+
+        // Clear temporary user storage
+        state->UserFlags = 0;
+        state->UserCallback = NULL;
+        state->UserCallbackData = NULL;
+    }
+
+    // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
+    if (clear_active_id && g.ActiveId == id)
+        ClearActiveID();
+
+    // Render frame
+    if (!is_multiline)
+    {
+        RenderNavHighlight(frame_bb, id);
+        RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+    }
+
+    const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + inner_size.x, frame_bb.Min.y + inner_size.y); // Not using frame_bb.Max because we have adjusted size
+    ImVec2 draw_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding;
+    ImVec2 text_size(0.0f, 0.0f);
+
+    // Set upper limit of single-line InputTextEx() at 2 million characters strings. The current pathological worst case is a long line
+    // without any carriage return, which would makes ImFont::RenderText() reserve too many vertices and probably crash. Avoid it altogether.
+    // Note that we only use this limit on single-line InputText(), so a pathologically large line on a InputTextMultiline() would still crash.
+    const int buf_display_max_length = 2 * 1024 * 1024;
+    const char* buf_display = buf_display_from_state ? state->TextA.Data : buf; //-V595
+    const char* buf_display_end = NULL; // We have specialized paths below for setting the length
+    if (is_displaying_hint)
+    {
+        buf_display = hint;
+        buf_display_end = hint + strlen(hint);
+    }
+
+    // Render text. We currently only render selection when the widget is active or while scrolling.
+    // FIXME: We could remove the '&& render_cursor' to keep rendering selection when inactive.
+    if (render_cursor || render_selection)
+    {
+        IM_ASSERT(state != NULL);
+        if (!is_displaying_hint)
+            buf_display_end = buf_display + state->CurLenA;
+
+        // Render text (with cursor and selection)
+        // This is going to be messy. We need to:
+        // - Display the text (this alone can be more easily clipped)
+        // - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation)
+        // - Measure text height (for scrollbar)
+        // We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort)
+        // FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8.
+        const ImWchar* text_begin = state->TextW.Data;
+        ImVec2 cursor_offset, select_start_offset;
+
+        {
+            // Find lines numbers straddling 'cursor' (slot 0) and 'select_start' (slot 1) positions.
+            const ImWchar* searches_input_ptr[2] = { NULL, NULL };
+            int searches_result_line_no[2] = { -1000, -1000 };
+            int searches_remaining = 0;
+            if (render_cursor)
+            {
+                searches_input_ptr[0] = text_begin + state->Stb.cursor;
+                searches_result_line_no[0] = -1;
+                searches_remaining++;
+            }
+            if (render_selection)
+            {
+                searches_input_ptr[1] = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+                searches_result_line_no[1] = -1;
+                searches_remaining++;
+            }
+
+            // Iterate all lines to find our line numbers
+            // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter.
+            searches_remaining += is_multiline ? 1 : 0;
+            int line_count = 0;
+            //for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++)  // FIXME-OPT: Could use this when wchar_t are 16-bit
+            for (const ImWchar* s = text_begin; *s != 0; s++)
+                if (*s == '\n')
+                {
+                    line_count++;
+                    if (searches_result_line_no[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_no[0] = line_count; if (--searches_remaining <= 0) break; }
+                    if (searches_result_line_no[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_no[1] = line_count; if (--searches_remaining <= 0) break; }
+                }
+            line_count++;
+            if (searches_result_line_no[0] == -1)
+                searches_result_line_no[0] = line_count;
+            if (searches_result_line_no[1] == -1)
+                searches_result_line_no[1] = line_count;
+
+            // Calculate 2d position by finding the beginning of the line and measuring distance
+            cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x;
+            cursor_offset.y = searches_result_line_no[0] * g.FontSize;
+            if (searches_result_line_no[1] >= 0)
+            {
+                select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x;
+                select_start_offset.y = searches_result_line_no[1] * g.FontSize;
+            }
+
+            // Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224)
+            if (is_multiline)
+                text_size = ImVec2(inner_size.x, line_count * g.FontSize);
+        }
+
+        // Scroll
+        if (render_cursor && state->CursorFollow)
+        {
+            // Horizontal scroll in chunks of quarter width
+            if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll))
+            {
+                const float scroll_increment_x = inner_size.x * 0.25f;
+                if (cursor_offset.x < state->ScrollX)
+                    state->ScrollX = IM_FLOOR(ImMax(0.0f, cursor_offset.x - scroll_increment_x));
+                else if (cursor_offset.x - inner_size.x >= state->ScrollX)
+                    state->ScrollX = IM_FLOOR(cursor_offset.x - inner_size.x + scroll_increment_x);
+            }
+            else
+            {
+                state->ScrollX = 0.0f;
+            }
+
+            // Vertical scroll
+            if (is_multiline)
+            {
+                float scroll_y = draw_window->Scroll.y;
+                if (cursor_offset.y - g.FontSize < scroll_y)
+                    scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize);
+                else if (cursor_offset.y - inner_size.y >= scroll_y)
+                    scroll_y = cursor_offset.y - inner_size.y;
+                draw_pos.y += (draw_window->Scroll.y - scroll_y);   // Manipulate cursor pos immediately avoid a frame of lag
+                draw_window->Scroll.y = scroll_y;
+            }
+
+            state->CursorFollow = false;
+        }
+
+        // Draw selection
+        const ImVec2 draw_scroll = ImVec2(state->ScrollX, 0.0f);
+        if (render_selection)
+        {
+            const ImWchar* text_selected_begin = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+            const ImWchar* text_selected_end = text_begin + ImMax(state->Stb.select_start, state->Stb.select_end);
+
+            ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg, render_cursor ? 1.0f : 0.6f); // FIXME: current code flow mandate that render_cursor is always true here, we are leaving the transparent one for tests.
+            float bg_offy_up = is_multiline ? 0.0f : -1.0f;    // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection.
+            float bg_offy_dn = is_multiline ? 0.0f : 2.0f;
+            ImVec2 rect_pos = draw_pos + select_start_offset - draw_scroll;
+            for (const ImWchar* p = text_selected_begin; p < text_selected_end; )
+            {
+                if (rect_pos.y > clip_rect.w + g.FontSize)
+                    break;
+                if (rect_pos.y < clip_rect.y)
+                {
+                    //p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p);  // FIXME-OPT: Could use this when wchar_t are 16-bit
+                    //p = p ? p + 1 : text_selected_end;
+                    while (p < text_selected_end)
+                        if (*p++ == '\n')
+                            break;
+                }
+                else
+                {
+                    ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true);
+                    if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines
+                    ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn));
+                    rect.ClipWith(clip_rect);
+                    if (rect.Overlaps(clip_rect))
+                        draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color);
+                }
+                rect_pos.x = draw_pos.x - draw_scroll.x;
+                rect_pos.y += g.FontSize;
+            }
+        }
+
+        // We test for 'buf_display_max_length' as a way to avoid some pathological cases (e.g. single-line 1 MB string) which would make ImDrawList crash.
+        if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+        {
+            ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+            draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+        }
+
+        // Draw blinking cursor
+        if (render_cursor)
+        {
+            state->CursorAnim += io.DeltaTime;
+            bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (state->CursorAnim <= 0.0f) || ImFmod(state->CursorAnim, 1.20f) <= 0.80f;
+            ImVec2 cursor_screen_pos = draw_pos + cursor_offset - draw_scroll;
+            ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5f, cursor_screen_pos.x + 1.0f, cursor_screen_pos.y - 1.5f);
+            if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
+                draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text));
+
+            // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
+            if (!is_readonly)
+                g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
+        }
+    }
+    else
+    {
+        // Render text only (no selection, no cursor)
+        if (is_multiline)
+            text_size = ImVec2(inner_size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_display_end) * g.FontSize); // We don't need width
+        else if (!is_displaying_hint && g.ActiveId == id)
+            buf_display_end = buf_display + state->CurLenA;
+        else if (!is_displaying_hint)
+            buf_display_end = buf_display + strlen(buf_display);
+
+        if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+        {
+            ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+            draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+        }
+    }
+
+    if (is_multiline)
+    {
+        Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line
+        EndChild();
+        EndGroup();
+    }
+
+    if (is_password && !is_displaying_hint)
+        PopFont();
+
+    // Log as text
+    if (g.LogEnabled && !(is_password && !is_displaying_hint))
+        LogRenderedText(&draw_pos, buf_display, buf_display_end);
+
+    if (label_size.x > 0)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited))
+        MarkItemEdited(id);
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
+    if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0)
+        return enter_pressed;
+    else
+        return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
+//-------------------------------------------------------------------------
+// - ColorEdit3()
+// - ColorEdit4()
+// - ColorPicker3()
+// - RenderColorRectWithAlphaCheckerboard() [Internal]
+// - ColorPicker4()
+// - ColorButton()
+// - SetColorEditOptions()
+// - ColorTooltip() [Internal]
+// - ColorEditOptionsPopup() [Internal]
+// - ColorPickerOptionsPopup() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags)
+{
+    return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha);
+}
+
+// Edit colors components (each component in 0.0f..1.0f range).
+// See enum ImGuiColorEditFlags_ for available options. e.g. Only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// With typical options: Left-click on colored square to open color picker. Right-click to open option menu. CTRL-Click over input fields to edit them and TAB to go to next item.
+bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const float square_sz = GetFrameHeight();
+    const float w_full = CalcItemWidth();
+    const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
+    const float w_inputs = w_full - w_button;
+    const char* label_display_end = FindRenderedTextEnd(label);
+    g.NextItemData.ClearFlags();
+
+    BeginGroup();
+    PushID(label);
+
+    // If we're not showing any slider there's no point in doing any HSV conversions
+    const ImGuiColorEditFlags flags_untouched = flags;
+    if (flags & ImGuiColorEditFlags_NoInputs)
+        flags = (flags & (~ImGuiColorEditFlags__DisplayMask)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions;
+
+    // Context menu: display and modify options (before defaults are applied)
+    if (!(flags & ImGuiColorEditFlags_NoOptions))
+        ColorEditOptionsPopup(col, flags);
+
+    // Read stored options
+    if (!(flags & ImGuiColorEditFlags__DisplayMask))
+        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DisplayMask);
+    if (!(flags & ImGuiColorEditFlags__DataTypeMask))
+        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask);
+    if (!(flags & ImGuiColorEditFlags__PickerMask))
+        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask);
+    if (!(flags & ImGuiColorEditFlags__InputMask))
+        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask);
+    flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask));
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));   // Check that only 1 is selected
+
+    const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
+    const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
+    const int components = alpha ? 4 : 3;
+
+    // Convert to the formats we need
+    float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
+    if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
+        ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+    else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
+    {
+        // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
+        ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+        if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
+        {
+            if (f[1] == 0)
+                f[0] = g.ColorEditLastHue;
+            if (f[2] == 0)
+                f[1] = g.ColorEditLastSat;
+        }
+    }
+    int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
+
+    bool value_changed = false;
+    bool value_changed_as_float = false;
+
+    const ImVec2 pos = window->DC.CursorPos;
+    const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f;
+    window->DC.CursorPos.x = pos.x + inputs_offset_x;
+
+    if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+    {
+        // RGB/HSV 0..255 Sliders
+        const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
+        const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
+
+        const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
+        static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
+        static const char* fmt_table_int[3][4] =
+        {
+            {   "%3d",   "%3d",   "%3d",   "%3d" }, // Short display
+            { "R:%3d", "G:%3d", "B:%3d", "A:%3d" }, // Long display for RGBA
+            { "H:%3d", "S:%3d", "V:%3d", "A:%3d" }  // Long display for HSVA
+        };
+        static const char* fmt_table_float[3][4] =
+        {
+            {   "%0.3f",   "%0.3f",   "%0.3f",   "%0.3f" }, // Short display
+            { "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA
+            { "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" }  // Long display for HSVA
+        };
+        const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_DisplayHSV) ? 2 : 1;
+
+        for (int n = 0; n < components; n++)
+        {
+            if (n > 0)
+                SameLine(0, style.ItemInnerSpacing.x);
+            SetNextItemWidth((n + 1 < components) ? w_item_one : w_item_last);
+
+            // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0.
+            if (flags & ImGuiColorEditFlags_Float)
+            {
+                value_changed |= DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
+                value_changed_as_float |= value_changed;
+            }
+            else
+            {
+                value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
+            }
+            if (!(flags & ImGuiColorEditFlags_NoOptions))
+                OpenPopupOnItemClick("context");
+        }
+    }
+    else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+    {
+        // RGB Hexadecimal Input
+        char buf[64];
+        if (alpha)
+            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
+        else
+            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
+        SetNextItemWidth(w_inputs);
+        if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
+        {
+            value_changed = true;
+            char* p = buf;
+            while (*p == '#' || ImCharIsBlankA(*p))
+                p++;
+            i[0] = i[1] = i[2] = i[3] = 0;
+            if (alpha)
+                sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned)
+            else
+                sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]);
+        }
+        if (!(flags & ImGuiColorEditFlags_NoOptions))
+            OpenPopupOnItemClick("context");
+    }
+
+    ImGuiWindow* picker_active_window = NULL;
+    if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
+    {
+        const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x;
+        window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y);
+
+        const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
+        if (ColorButton("##ColorButton", col_v4, flags))
+        {
+            if (!(flags & ImGuiColorEditFlags_NoPicker))
+            {
+                // Store current color and open a picker
+                g.ColorPickerRef = col_v4;
+                OpenPopup("picker");
+                SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1,style.ItemSpacing.y));
+            }
+        }
+        if (!(flags & ImGuiColorEditFlags_NoOptions))
+            OpenPopupOnItemClick("context");
+
+        if (BeginPopup("picker"))
+        {
+            picker_active_window = g.CurrentWindow;
+            if (label != label_display_end)
+            {
+                TextEx(label, label_display_end);
+                Spacing();
+            }
+            ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
+            ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
+            SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
+            value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
+            EndPopup();
+        }
+    }
+
+    if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
+    {
+        const float text_offset_x = (flags & ImGuiColorEditFlags_NoInputs) ? w_button : w_full + style.ItemInnerSpacing.x;
+        window->DC.CursorPos = ImVec2(pos.x + text_offset_x, pos.y + style.FramePadding.y);
+        TextEx(label, label_display_end);
+    }
+
+    // Convert back
+    if (value_changed && picker_active_window == NULL)
+    {
+        if (!value_changed_as_float)
+            for (int n = 0; n < 4; n++)
+                f[n] = i[n] / 255.0f;
+        if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
+        {
+            g.ColorEditLastHue = f[0];
+            g.ColorEditLastSat = f[1];
+            ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+            memcpy(g.ColorEditLastColor, f, sizeof(float) * 3);
+        }
+        if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
+            ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+
+        col[0] = f[0];
+        col[1] = f[1];
+        col[2] = f[2];
+        if (alpha)
+            col[3] = f[3];
+    }
+
+    PopID();
+    EndGroup();
+
+    // Drag and Drop Target
+    // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
+    if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget())
+    {
+        bool accepted_drag_drop = false;
+        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
+        {
+            memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512
+            value_changed = accepted_drag_drop = true;
+        }
+        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
+        {
+            memcpy((float*)col, payload->Data, sizeof(float) * components);
+            value_changed = accepted_drag_drop = true;
+        }
+
+        // Drag-drop payloads are always RGB
+        if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV))
+            ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]);
+        EndDragDropTarget();
+    }
+
+    // When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4().
+    if (picker_active_window && g.ActiveId != 0 && g.ActiveIdWindow == picker_active_window)
+        window->DC.LastItemId = g.ActiveId;
+
+    if (value_changed)
+        MarkItemEdited(window->DC.LastItemId);
+
+    return value_changed;
+}
+
+bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags)
+{
+    float col4[4] = { col[0], col[1], col[2], 1.0f };
+    if (!ColorPicker4(label, col4, flags | ImGuiColorEditFlags_NoAlpha))
+        return false;
+    col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2];
+    return true;
+}
+
+// Helper for ColorPicker4()
+static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha)
+{
+    ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
+    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1,         pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
+    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x,             pos.y), half_sz,                              ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
+    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left,  IM_COL32(0,0,0,alpha8));
+    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x,     pos.y), half_sz,                              ImGuiDir_Left,  IM_COL32(255,255,255,alpha8));
+}
+
+// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.)
+// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
+// FIXME: this is trying to be aware of style.Alpha but not fully correct. Also, the color wheel will have overlapping glitches with (style.Alpha < 1.0)
+bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImDrawList* draw_list = window->DrawList;
+    ImGuiStyle& style = g.Style;
+    ImGuiIO& io = g.IO;
+
+    const float width = CalcItemWidth();
+    g.NextItemData.ClearFlags();
+
+    PushID(label);
+    BeginGroup();
+
+    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+        flags |= ImGuiColorEditFlags_NoSmallPreview;
+
+    // Context menu: display and store options.
+    if (!(flags & ImGuiColorEditFlags_NoOptions))
+        ColorPickerOptionsPopup(col, flags);
+
+    // Read stored options
+    if (!(flags & ImGuiColorEditFlags__PickerMask))
+        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
+    if (!(flags & ImGuiColorEditFlags__InputMask))
+        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));  // Check that only 1 is selected
+    if (!(flags & ImGuiColorEditFlags_NoOptions))
+        flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
+
+    // Setup
+    int components = (flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4;
+    bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha);
+    ImVec2 picker_pos = window->DC.CursorPos;
+    float square_sz = GetFrameHeight();
+    float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
+    float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
+    float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
+    float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
+    float bars_triangles_half_sz = IM_FLOOR(bars_width * 0.20f);
+
+    float backup_initial_col[4];
+    memcpy(backup_initial_col, col, components * sizeof(float));
+
+    float wheel_thickness = sv_picker_size * 0.08f;
+    float wheel_r_outer = sv_picker_size * 0.50f;
+    float wheel_r_inner = wheel_r_outer - wheel_thickness;
+    ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size*0.5f);
+
+    // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
+    float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f);
+    ImVec2 triangle_pa = ImVec2(triangle_r, 0.0f); // Hue point.
+    ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
+    ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
+
+    float H = col[0], S = col[1], V = col[2];
+    float R = col[0], G = col[1], B = col[2];
+    if (flags & ImGuiColorEditFlags_InputRGB)
+    {
+        // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
+        ColorConvertRGBtoHSV(R, G, B, H, S, V);
+        if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
+        {
+            if (S == 0)
+                H = g.ColorEditLastHue;
+            if (V == 0)
+                S = g.ColorEditLastSat;
+        }
+    }
+    else if (flags & ImGuiColorEditFlags_InputHSV)
+    {
+        ColorConvertHSVtoRGB(H, S, V, R, G, B);
+    }
+
+    bool value_changed = false, value_changed_h = false, value_changed_sv = false;
+
+    PushItemFlag(ImGuiItemFlags_NoNav, true);
+    if (flags & ImGuiColorEditFlags_PickerHueWheel)
+    {
+        // Hue wheel + SV triangle logic
+        InvisibleButton("hsv", ImVec2(sv_picker_size + style.ItemInnerSpacing.x + bars_width, sv_picker_size));
+        if (IsItemActive())
+        {
+            ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center;
+            ImVec2 current_off = g.IO.MousePos - wheel_center;
+            float initial_dist2 = ImLengthSqr(initial_off);
+            if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1))
+            {
+                // Interactive with Hue wheel
+                H = ImAtan2(current_off.y, current_off.x) / IM_PI*0.5f;
+                if (H < 0.0f)
+                    H += 1.0f;
+                value_changed = value_changed_h = true;
+            }
+            float cos_hue_angle = ImCos(-H * 2.0f * IM_PI);
+            float sin_hue_angle = ImSin(-H * 2.0f * IM_PI);
+            if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle)))
+            {
+                // Interacting with SV triangle
+                ImVec2 current_off_unrotated = ImRotate(current_off, cos_hue_angle, sin_hue_angle);
+                if (!ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated))
+                    current_off_unrotated = ImTriangleClosestPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated);
+                float uu, vv, ww;
+                ImTriangleBarycentricCoords(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated, uu, vv, ww);
+                V = ImClamp(1.0f - vv, 0.0001f, 1.0f);
+                S = ImClamp(uu / V, 0.0001f, 1.0f);
+                value_changed = value_changed_sv = true;
+            }
+        }
+        if (!(flags & ImGuiColorEditFlags_NoOptions))
+            OpenPopupOnItemClick("context");
+    }
+    else if (flags & ImGuiColorEditFlags_PickerHueBar)
+    {
+        // SV rectangle logic
+        InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size));
+        if (IsItemActive())
+        {
+            S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size-1));
+            V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+            value_changed = value_changed_sv = true;
+        }
+        if (!(flags & ImGuiColorEditFlags_NoOptions))
+            OpenPopupOnItemClick("context");
+
+        // Hue bar logic
+        SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y));
+        InvisibleButton("hue", ImVec2(bars_width, sv_picker_size));
+        if (IsItemActive())
+        {
+            H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+            value_changed = value_changed_h = true;
+        }
+    }
+
+    // Alpha bar logic
+    if (alpha_bar)
+    {
+        SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y));
+        InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size));
+        if (IsItemActive())
+        {
+            col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
+            value_changed = true;
+        }
+    }
+    PopItemFlag(); // ImGuiItemFlags_NoNav
+
+    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+    {
+        SameLine(0, style.ItemInnerSpacing.x);
+        BeginGroup();
+    }
+
+    if (!(flags & ImGuiColorEditFlags_NoLabel))
+    {
+        const char* label_display_end = FindRenderedTextEnd(label);
+        if (label != label_display_end)
+        {
+            if ((flags & ImGuiColorEditFlags_NoSidePreview))
+                SameLine(0, style.ItemInnerSpacing.x);
+            TextEx(label, label_display_end);
+        }
+    }
+
+    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+    {
+        PushItemFlag(ImGuiItemFlags_NoNavDefaultFocus, true);
+        ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+        if ((flags & ImGuiColorEditFlags_NoLabel))
+            Text("Current");
+
+        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip;
+        ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2));
+        if (ref_col != NULL)
+        {
+            Text("Original");
+            ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]);
+            if (ColorButton("##original", ref_col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)))
+            {
+                memcpy(col, ref_col, components * sizeof(float));
+                value_changed = true;
+            }
+        }
+        PopItemFlag();
+        EndGroup();
+    }
+
+    // Convert back color to RGB
+    if (value_changed_h || value_changed_sv)
+    {
+        if (flags & ImGuiColorEditFlags_InputRGB)
+        {
+            ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
+            g.ColorEditLastHue = H;
+            g.ColorEditLastSat = S;
+            memcpy(g.ColorEditLastColor, col, sizeof(float) * 3);
+        }
+        else if (flags & ImGuiColorEditFlags_InputHSV)
+        {
+            col[0] = H;
+            col[1] = S;
+            col[2] = V;
+        }
+    }
+
+    // R,G,B and H,S,V slider color editor
+    bool value_changed_fix_hue_wrap = false;
+    if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
+    {
+        PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
+        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
+        ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
+        if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+            if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB))
+            {
+                // FIXME: Hackily differenciating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget.
+                // For the later we don't want to run the hue-wrap canceling code. If you are well versed in HSV picker please provide your input! (See #2050)
+                value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap);
+                value_changed = true;
+            }
+        if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+            value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV);
+        if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
+            value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex);
+        PopItemWidth();
+    }
+
+    // Try to cancel hue wrap (after ColorEdit4 call), if any
+    if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB))
+    {
+        float new_H, new_S, new_V;
+        ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
+        if (new_H <= 0 && H > 0)
+        {
+            if (new_V <= 0 && V != new_V)
+                ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]);
+            else if (new_S <= 0)
+                ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]);
+        }
+    }
+
+    if (value_changed)
+    {
+        if (flags & ImGuiColorEditFlags_InputRGB)
+        {
+            R = col[0];
+            G = col[1];
+            B = col[2];
+            ColorConvertRGBtoHSV(R, G, B, H, S, V);
+            if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) // Fix local Hue as display below will use it immediately.
+            {
+                if (S == 0)
+                    H = g.ColorEditLastHue;
+                if (V == 0)
+                    S = g.ColorEditLastSat;
+            }
+        }
+        else if (flags & ImGuiColorEditFlags_InputHSV)
+        {
+            H = col[0];
+            S = col[1];
+            V = col[2];
+            ColorConvertHSVtoRGB(H, S, V, R, G, B);
+        }
+    }
+
+    const int style_alpha8 = IM_F32_TO_INT8_SAT(style.Alpha);
+    const ImU32 col_black = IM_COL32(0,0,0,style_alpha8);
+    const ImU32 col_white = IM_COL32(255,255,255,style_alpha8);
+    const ImU32 col_midgrey = IM_COL32(128,128,128,style_alpha8);
+    const ImU32 col_hues[6 + 1] = { IM_COL32(255,0,0,style_alpha8), IM_COL32(255,255,0,style_alpha8), IM_COL32(0,255,0,style_alpha8), IM_COL32(0,255,255,style_alpha8), IM_COL32(0,0,255,style_alpha8), IM_COL32(255,0,255,style_alpha8), IM_COL32(255,0,0,style_alpha8) };
+
+    ImVec4 hue_color_f(1, 1, 1, style.Alpha); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
+    ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
+    ImU32 user_col32_striped_of_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, style.Alpha)); // Important: this is still including the main rendering/style alpha!!
+
+    ImVec2 sv_cursor_pos;
+
+    if (flags & ImGuiColorEditFlags_PickerHueWheel)
+    {
+        // Render Hue Wheel
+        const float aeps = 0.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
+        const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12);
+        for (int n = 0; n < 6; n++)
+        {
+            const float a0 = (n)     /6.0f * 2.0f * IM_PI - aeps;
+            const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
+            const int vert_start_idx = draw_list->VtxBuffer.Size;
+            draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
+            draw_list->PathStroke(col_white, false, wheel_thickness);
+            const int vert_end_idx = draw_list->VtxBuffer.Size;
+
+            // Paint colors over existing vertices
+            ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner);
+            ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner);
+            ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n+1]);
+        }
+
+        // Render Cursor + preview on Hue Wheel
+        float cos_hue_angle = ImCos(H * 2.0f * IM_PI);
+        float sin_hue_angle = ImSin(H * 2.0f * IM_PI);
+        ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f);
+        float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f;
+        int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32);
+        draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments);
+        draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, col_midgrey, hue_cursor_segments);
+        draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments);
+
+        // Render SV triangle (rotated according to hue)
+        ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle);
+        ImVec2 trb = wheel_center + ImRotate(triangle_pb, cos_hue_angle, sin_hue_angle);
+        ImVec2 trc = wheel_center + ImRotate(triangle_pc, cos_hue_angle, sin_hue_angle);
+        ImVec2 uv_white = GetFontTexUvWhitePixel();
+        draw_list->PrimReserve(6, 6);
+        draw_list->PrimVtx(tra, uv_white, hue_color32);
+        draw_list->PrimVtx(trb, uv_white, hue_color32);
+        draw_list->PrimVtx(trc, uv_white, col_white);
+        draw_list->PrimVtx(tra, uv_white, 0);
+        draw_list->PrimVtx(trb, uv_white, col_black);
+        draw_list->PrimVtx(trc, uv_white, 0);
+        draw_list->AddTriangle(tra, trb, trc, col_midgrey, 1.5f);
+        sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V));
+    }
+    else if (flags & ImGuiColorEditFlags_PickerHueBar)
+    {
+        // Render SV Square
+        draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), col_white, hue_color32, hue_color32, col_white);
+        draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0, 0, col_black, col_black);
+        RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0.0f);
+        sv_cursor_pos.x = ImClamp(IM_ROUND(picker_pos.x + ImSaturate(S)     * sv_picker_size), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much
+        sv_cursor_pos.y = ImClamp(IM_ROUND(picker_pos.y + ImSaturate(1 - V) * sv_picker_size), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2);
+
+        // Render Hue Bar
+        for (int i = 0; i < 6; ++i)
+            draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), col_hues[i], col_hues[i], col_hues[i + 1], col_hues[i + 1]);
+        float bar0_line_y = IM_ROUND(picker_pos.y + H * sv_picker_size);
+        RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f);
+        RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
+    }
+
+    // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
+    float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f;
+    draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12);
+    draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, col_midgrey, 12);
+    draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12);
+
+    // Render alpha bar
+    if (alpha_bar)
+    {
+        float alpha = ImSaturate(col[3]);
+        ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size);
+        RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
+        draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, user_col32_striped_of_alpha & ~IM_COL32_A_MASK, user_col32_striped_of_alpha & ~IM_COL32_A_MASK);
+        float bar1_line_y = IM_ROUND(picker_pos.y + (1.0f - alpha) * sv_picker_size);
+        RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f);
+        RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
+    }
+
+    EndGroup();
+
+    if (value_changed && memcmp(backup_initial_col, col, components * sizeof(float)) == 0)
+        value_changed = false;
+    if (value_changed)
+        MarkItemEdited(window->DC.LastItemId);
+
+    PopID();
+
+    return value_changed;
+}
+
+// A little colored square. Return true when clicked.
+// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
+// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
+// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set.
+bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiID id = window->GetID(desc_id);
+    float default_size = GetFrameHeight();
+    if (size.x == 0.0f)
+        size.x = default_size;
+    if (size.y == 0.0f)
+        size.y = default_size;
+    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+    ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
+    if (!ItemAdd(bb, id))
+        return false;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+
+    if (flags & ImGuiColorEditFlags_NoAlpha)
+        flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
+
+    ImVec4 col_rgb = col;
+    if (flags & ImGuiColorEditFlags_InputHSV)
+        ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z);
+
+    ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f);
+    float grid_step = ImMin(size.x, size.y) / 2.99f;
+    float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
+    ImRect bb_inner = bb;
+    float off = 0.0f;
+    if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
+    {
+        off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
+        bb_inner.Expand(off);
+    }
+    if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f)
+    {
+        float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f);
+        RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
+        window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
+    }
+    else
+    {
+        // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
+        ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha;
+        if (col_source.w < 1.0f)
+            RenderColorRectWithAlphaCheckerboard(window->DrawList, bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
+        else
+            window->DrawList->AddRectFilled(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), rounding, ImDrawCornerFlags_All);
+    }
+    RenderNavHighlight(bb, id);
+    if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
+    {
+        if (g.Style.FrameBorderSize > 0.0f)
+            RenderFrameBorder(bb.Min, bb.Max, rounding);
+        else
+            window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), rounding); // Color button are often in need of some sort of border
+    }
+
+    // Drag and Drop Source
+    // NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test.
+    if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource())
+    {
+        if (flags & ImGuiColorEditFlags_NoAlpha)
+            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once);
+        else
+            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once);
+        ColorButton(desc_id, col, flags);
+        SameLine();
+        TextEx("Color");
+        EndDragDropSource();
+    }
+
+    // Tooltip
+    if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered)
+        ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
+
+    return pressed;
+}
+
+// Initialize/override default color options
+void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    if ((flags & ImGuiColorEditFlags__DisplayMask) == 0)
+        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DisplayMask;
+    if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0)
+        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask;
+    if ((flags & ImGuiColorEditFlags__PickerMask) == 0)
+        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask;
+    if ((flags & ImGuiColorEditFlags__InputMask) == 0)
+        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask;
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask));    // Check only 1 option is selected
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask));   // Check only 1 option is selected
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask));     // Check only 1 option is selected
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));      // Check only 1 option is selected
+    g.ColorEditOptions = flags;
+}
+
+// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+
+    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
+    const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
+    if (text_end > text)
+    {
+        TextEx(text, text_end);
+        Separator();
+    }
+
+    ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
+    ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+    int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+    ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
+    SameLine();
+    if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask))
+    {
+        if (flags & ImGuiColorEditFlags_NoAlpha)
+            Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
+        else
+            Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
+    }
+    else if (flags & ImGuiColorEditFlags_InputHSV)
+    {
+        if (flags & ImGuiColorEditFlags_NoAlpha)
+            Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]);
+        else
+            Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]);
+    }
+    EndTooltip();
+}
+
+void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
+{
+    bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__DisplayMask);
+    bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask);
+    if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context"))
+        return;
+    ImGuiContext& g = *GImGui;
+    ImGuiColorEditFlags opts = g.ColorEditOptions;
+    if (allow_opt_inputs)
+    {
+        if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayRGB;
+        if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHSV;
+        if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHex;
+    }
+    if (allow_opt_datatype)
+    {
+        if (allow_opt_inputs) Separator();
+        if (RadioButton("0..255",     (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8;
+        if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float;
+    }
+
+    if (allow_opt_inputs || allow_opt_datatype)
+        Separator();
+    if (Button("Copy as..", ImVec2(-1,0)))
+        OpenPopup("Copy");
+    if (BeginPopup("Copy"))
+    {
+        int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+        char buf[64];
+        ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+        if (Selectable(buf))
+            SetClipboardText(buf);
+        ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca);
+        if (Selectable(buf))
+            SetClipboardText(buf);
+        ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", cr, cg, cb);
+        if (Selectable(buf))
+            SetClipboardText(buf);
+        if (!(flags & ImGuiColorEditFlags_NoAlpha))
+        {
+            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", cr, cg, cb, ca);
+            if (Selectable(buf))
+                SetClipboardText(buf);
+        }
+        EndPopup();
+    }
+
+    g.ColorEditOptions = opts;
+    EndPopup();
+}
+
+void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags)
+{
+    bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask);
+    bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
+    if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context"))
+        return;
+    ImGuiContext& g = *GImGui;
+    if (allow_opt_picker)
+    {
+        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
+        PushItemWidth(picker_size.x);
+        for (int picker_type = 0; picker_type < 2; picker_type++)
+        {
+            // Draw small/thumbnail version of each picker type (over an invisible button for selection)
+            if (picker_type > 0) Separator();
+            PushID(picker_type);
+            ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha);
+            if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
+            if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
+            ImVec2 backup_pos = GetCursorScreenPos();
+            if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
+                g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
+            SetCursorScreenPos(backup_pos);
+            ImVec4 dummy_ref_col;
+            memcpy(&dummy_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4));
+            ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
+            PopID();
+        }
+        PopItemWidth();
+    }
+    if (allow_opt_alpha_bar)
+    {
+        if (allow_opt_picker) Separator();
+        CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
+    }
+    EndPopup();
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
+//-------------------------------------------------------------------------
+// - TreeNode()
+// - TreeNodeV()
+// - TreeNodeEx()
+// - TreeNodeExV()
+// - TreeNodeBehavior() [Internal]
+// - TreePush()
+// - TreePop()
+// - GetTreeNodeToLabelSpacing()
+// - SetNextItemOpen()
+// - CollapsingHeader()
+//-------------------------------------------------------------------------
+
+bool ImGui::TreeNode(const char* str_id, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    bool is_open = TreeNodeExV(str_id, 0, fmt, args);
+    va_end(args);
+    return is_open;
+}
+
+bool ImGui::TreeNode(const void* ptr_id, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    bool is_open = TreeNodeExV(ptr_id, 0, fmt, args);
+    va_end(args);
+    return is_open;
+}
+
+bool ImGui::TreeNode(const char* label)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+    return TreeNodeBehavior(window->GetID(label), 0, label, NULL);
+}
+
+bool ImGui::TreeNodeV(const char* str_id, const char* fmt, va_list args)
+{
+    return TreeNodeExV(str_id, 0, fmt, args);
+}
+
+bool ImGui::TreeNodeV(const void* ptr_id, const char* fmt, va_list args)
+{
+    return TreeNodeExV(ptr_id, 0, fmt, args);
+}
+
+bool ImGui::TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    return TreeNodeBehavior(window->GetID(label), flags, label, NULL);
+}
+
+bool ImGui::TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    bool is_open = TreeNodeExV(str_id, flags, fmt, args);
+    va_end(args);
+    return is_open;
+}
+
+bool ImGui::TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
+{
+    va_list args;
+    va_start(args, fmt);
+    bool is_open = TreeNodeExV(ptr_id, flags, fmt, args);
+    va_end(args);
+    return is_open;
+}
+
+bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
+    return TreeNodeBehavior(window->GetID(str_id), flags, g.TempBuffer, label_end);
+}
+
+bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
+    return TreeNodeBehavior(window->GetID(ptr_id), flags, g.TempBuffer, label_end);
+}
+
+bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
+{
+    if (flags & ImGuiTreeNodeFlags_Leaf)
+        return true;
+
+    // We only write to the tree storage if the user clicks (or explicitly use the SetNextItemOpen function)
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiStorage* storage = window->DC.StateStorage;
+
+    bool is_open;
+    if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasOpen)
+    {
+        if (g.NextItemData.OpenCond & ImGuiCond_Always)
+        {
+            is_open = g.NextItemData.OpenVal;
+            storage->SetInt(id, is_open);
+        }
+        else
+        {
+            // We treat ImGuiCond_Once and ImGuiCond_FirstUseEver the same because tree node state are not saved persistently.
+            const int stored_value = storage->GetInt(id, -1);
+            if (stored_value == -1)
+            {
+                is_open = g.NextItemData.OpenVal;
+                storage->SetInt(id, is_open);
+            }
+            else
+            {
+                is_open = stored_value != 0;
+            }
+        }
+    }
+    else
+    {
+        is_open = storage->GetInt(id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0;
+    }
+
+    // When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior).
+    // NB- If we are above max depth we still allow manually opened nodes to be logged.
+    if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && (window->DC.TreeDepth - g.LogDepthRef) < g.LogDepthToExpand)
+        is_open = true;
+
+    return is_open;
+}
+
+bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0;
+    const ImVec2 padding = (display_frame || (flags & ImGuiTreeNodeFlags_FramePadding)) ? style.FramePadding : ImVec2(style.FramePadding.x, ImMin(window->DC.CurrLineTextBaseOffset, style.FramePadding.y));
+
+    if (!label_end)
+        label_end = FindRenderedTextEnd(label);
+    const ImVec2 label_size = CalcTextSize(label, label_end, false);
+
+    // We vertically grow up to current line height up the typical widget height.
+    const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2);
+    ImRect frame_bb;
+    frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x;
+    frame_bb.Min.y = window->DC.CursorPos.y;
+    frame_bb.Max.x = window->WorkRect.Max.x;
+    frame_bb.Max.y = window->DC.CursorPos.y + frame_height;
+    if (display_frame)
+    {
+        // Framed header expand a little outside the default padding, to the edge of InnerClipRect
+        // (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f)
+        frame_bb.Min.x -= IM_FLOOR(window->WindowPadding.x * 0.5f - 1.0f);
+        frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f);
+    }
+
+    const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2);               // Collapser arrow width + Spacing
+    const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset);                    // Latch before ItemSize changes it
+    const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f);    // Include collapser
+    ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y);
+    ItemSize(ImVec2(text_width, frame_height), padding.y);
+
+    // For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing
+    ImRect interact_bb = frame_bb;
+    if (!display_frame && (flags & (ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth)) == 0)
+        interact_bb.Max.x = frame_bb.Min.x + text_width + style.ItemSpacing.x * 2.0f;
+
+    // Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child.
+    // For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop().
+    // This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero.
+    const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0;
+    bool is_open = TreeNodeBehaviorIsOpen(id, flags);
+    if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+        window->DC.TreeJumpToParentOnPopMask |= (1 << window->DC.TreeDepth);
+
+    bool item_add = ItemAdd(interact_bb, id);
+    window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDisplayRect;
+    window->DC.LastItemDisplayRect = frame_bb;
+
+    if (!item_add)
+    {
+        if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+            TreePushOverrideID(id);
+        IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
+        return is_open;
+    }
+
+    // Flags that affects opening behavior:
+    // - 0 (default) .................... single-click anywhere to open
+    // - OpenOnDoubleClick .............. double-click anywhere to open
+    // - OpenOnArrow .................... single-click on arrow to open
+    // - OpenOnDoubleClick|OpenOnArrow .. single-click on arrow or double-click anywhere to open
+    ImGuiButtonFlags button_flags = 0;
+    if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
+        button_flags |= ImGuiButtonFlags_AllowItemOverlap;
+    if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
+        button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0);
+    else
+        button_flags |= ImGuiButtonFlags_PressedOnClickRelease;
+    if (!is_leaf)
+        button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+
+    // We allow clicking on the arrow section with keyboard modifiers held, in order to easily
+    // allow browsing a tree while preserving selection with code implementing multi-selection patterns.
+    // When clicking on the rest of the tree node we always disallow keyboard modifiers.
+    const float hit_padding_x = style.TouchExtraPadding.x;
+    const float arrow_hit_x1 = (text_pos.x - text_offset_x) - hit_padding_x;
+    const float arrow_hit_x2 = (text_pos.x - text_offset_x) + (g.FontSize + padding.x * 2.0f) + hit_padding_x;
+    if (window != g.HoveredWindow || !(g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2))
+        button_flags |= ImGuiButtonFlags_NoKeyModifiers;
+
+    bool selected = (flags & ImGuiTreeNodeFlags_Selected) != 0;
+    const bool was_selected = selected;
+
+    bool hovered, held;
+    bool pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags);
+    bool toggled = false;
+    if (!is_leaf)
+    {
+        if (pressed)
+        {
+            if ((flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) == 0 || (g.NavActivateId == id))
+                toggled = true;
+            if (flags & ImGuiTreeNodeFlags_OpenOnArrow)
+                toggled |= (g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2) && (!g.NavDisableMouseHover); // Lightweight equivalent of IsMouseHoveringRect() since ButtonBehavior() already did the job
+            if ((flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) && g.IO.MouseDoubleClicked[0])
+                toggled = true;
+            if (g.DragDropActive && is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
+                toggled = false;
+        }
+
+        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Left && is_open)
+        {
+            toggled = true;
+            NavMoveRequestCancel();
+        }
+        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right && !is_open) // If there's something upcoming on the line we may want to give it the priority?
+        {
+            toggled = true;
+            NavMoveRequestCancel();
+        }
+
+        if (toggled)
+        {
+            is_open = !is_open;
+            window->DC.StateStorage->SetInt(id, is_open);
+            window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledOpen;
+        }
+    }
+    if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
+        SetItemAllowOverlap();
+
+    // In this branch, TreeNodeBehavior() cannot toggle the selection so this will never trigger.
+    if (selected != was_selected) //-V547
+        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
+    // Render
+    const ImU32 text_col = GetColorU32(ImGuiCol_Text);
+    ImGuiNavHighlightFlags nav_highlight_flags = ImGuiNavHighlightFlags_TypeThin;
+    if (display_frame)
+    {
+        // Framed type
+        const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+        RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, true, style.FrameRounding);
+        RenderNavHighlight(frame_bb, id, nav_highlight_flags);
+        if (flags & ImGuiTreeNodeFlags_Bullet)
+            RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.60f, text_pos.y + g.FontSize * 0.5f), text_col);
+        else if (!is_leaf)
+            RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
+        else // Leaf without bullet, left-adjusted text
+            text_pos.x -= text_offset_x;
+        if (flags & ImGuiTreeNodeFlags_ClipLabelForTrailingButton)
+            frame_bb.Max.x -= g.FontSize + style.FramePadding.x;
+        if (g.LogEnabled)
+        {
+            // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
+            const char log_prefix[] = "\n##";
+            const char log_suffix[] = "##";
+            LogRenderedText(&text_pos, log_prefix, log_prefix+3);
+            RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
+            LogRenderedText(&text_pos, log_suffix, log_suffix+2);
+        }
+        else
+        {
+            RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
+        }
+    }
+    else
+    {
+        // Unframed typed for tree nodes
+        if (hovered || selected)
+        {
+            const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+            RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false);
+            RenderNavHighlight(frame_bb, id, nav_highlight_flags);
+        }
+        if (flags & ImGuiTreeNodeFlags_Bullet)
+            RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
+        else if (!is_leaf)
+            RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
+        if (g.LogEnabled)
+            LogRenderedText(&text_pos, ">");
+        RenderText(text_pos, label, label_end, false);
+    }
+
+    if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+        TreePushOverrideID(id);
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
+    return is_open;
+}
+
+void ImGui::TreePush(const char* str_id)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    Indent();
+    window->DC.TreeDepth++;
+    PushID(str_id ? str_id : "#TreePush");
+}
+
+void ImGui::TreePush(const void* ptr_id)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    Indent();
+    window->DC.TreeDepth++;
+    PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
+}
+
+void ImGui::TreePushOverrideID(ImGuiID id)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    Indent();
+    window->DC.TreeDepth++;
+    window->IDStack.push_back(id);
+}
+
+void ImGui::TreePop()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    Unindent();
+
+    window->DC.TreeDepth--;
+    ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
+
+    // Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled)
+    if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet())
+        if (g.NavIdIsAlive && (window->DC.TreeJumpToParentOnPopMask & tree_depth_mask))
+        {
+            SetNavID(window->IDStack.back(), g.NavLayer, 0);
+            NavMoveRequestCancel();
+        }
+    window->DC.TreeJumpToParentOnPopMask &= tree_depth_mask - 1;
+
+    IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.
+    PopID();
+}
+
+// Horizontal distance preceding label when using TreeNode() or Bullet()
+float ImGui::GetTreeNodeToLabelSpacing()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize + (g.Style.FramePadding.x * 2.0f);
+}
+
+// Set next TreeNode/CollapsingHeader open state.
+void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.CurrentWindow->SkipItems)
+        return;
+    g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
+    g.NextItemData.OpenVal = is_open;
+    g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always;
+}
+
+// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
+// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode().
+bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    return TreeNodeBehavior(window->GetID(label), flags | ImGuiTreeNodeFlags_CollapsingHeader, label);
+}
+
+bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    if (p_open && !*p_open)
+        return false;
+
+    ImGuiID id = window->GetID(label);
+    flags |= ImGuiTreeNodeFlags_CollapsingHeader;
+    if (p_open)
+        flags |= ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_ClipLabelForTrailingButton;
+    bool is_open = TreeNodeBehavior(id, flags, label);
+    if (p_open)
+    {
+        // Create a small overlapping close button
+        // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
+        // FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
+        ImGuiContext& g = *GImGui;
+        ImGuiItemHoveredDataBackup last_item_backup;
+        float button_size = g.FontSize;
+        float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
+        float button_y = window->DC.LastItemRect.Min.y;
+        if (CloseButton(window->GetID((void*)((intptr_t)id + 1)), ImVec2(button_x, button_y)))
+            *p_open = false;
+        last_item_backup.Restore();
+    }
+
+    return is_open;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Selectable
+//-------------------------------------------------------------------------
+// - Selectable()
+//-------------------------------------------------------------------------
+
+// Tip: pass a non-visible label (e.g. "##dummy") then you can use the space to draw other text or image.
+// But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id.
+// With this scheme, ImGuiSelectableFlags_SpanAllColumns and ImGuiSelectableFlags_AllowItemOverlap are also frequently used flags.
+// FIXME: Selectable() with (size.x == 0.0f) and (SelectableTextAlign.x > 0.0f) followed by SameLine() is currently not supported.
+bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+
+    if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) // FIXME-OPT: Avoid if vertically clipped.
+        PushColumnsBackground();
+    else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable) // FIXME-TABLE: Make it possible to colorize a whole line
+        PushTableBackground();
+
+    // Submit label or explicit size to ItemSize(), whereas ItemAdd() will submit a larger/spanning rectangle.
+    ImGuiID id = window->GetID(label);
+    ImVec2 label_size = CalcTextSize(label, NULL, true);
+    ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y);
+    ImVec2 pos = window->DC.CursorPos;
+    pos.y += window->DC.CurrLineTextBaseOffset;
+    ItemSize(size, 0.0f);
+
+    // Fill horizontal space
+    // FIXME-TABLE: Span row min
+    const float min_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Min.x : pos.x;
+    const float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Max.x : GetContentRegionMaxAbs().x;
+    if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_SpanAvailWidth))
+        size.x = ImMax(label_size.x, max_x - min_x);
+
+    // Text stays at the submission position, but bounding box may be extended on both sides
+    const ImVec2 text_min = pos;
+    const ImVec2 text_max(min_x + size.x, pos.y + size.y);
+
+    // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable.
+    ImRect bb_enlarged(min_x, pos.y, text_max.x, text_max.y);
+    const float spacing_x = style.ItemSpacing.x;
+    const float spacing_y = style.ItemSpacing.y;
+    const float spacing_L = IM_FLOOR(spacing_x * 0.50f);
+    const float spacing_U = IM_FLOOR(spacing_y * 0.50f);
+    bb_enlarged.Min.x -= spacing_L;
+    bb_enlarged.Min.y -= spacing_U;
+    bb_enlarged.Max.x += (spacing_x - spacing_L);
+    bb_enlarged.Max.y += (spacing_y - spacing_U);
+    //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_align.Min, bb_align.Max, IM_COL32(255, 0, 0, 255)); }
+    //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_enlarged.Min, bb_enlarged.Max, IM_COL32(0, 255, 0, 255)); }
+
+    bool item_add;
+    if (flags & ImGuiSelectableFlags_Disabled)
+    {
+        ImGuiItemFlags backup_item_flags = window->DC.ItemFlags;
+        window->DC.ItemFlags |= ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNavDefaultFocus;
+        item_add = ItemAdd(bb_enlarged, id);
+        window->DC.ItemFlags = backup_item_flags;
+    }
+    else
+    {
+        item_add = ItemAdd(bb_enlarged, id);
+    }
+    if (!item_add)
+    {
+        if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
+            PopColumnsBackground();
+        else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable)
+            PopTableBackground();
+        return false;
+    }
+
+    // We use NoHoldingActiveID on menus so user can click and _hold_ on a menu then drag to browse child entries
+    ImGuiButtonFlags button_flags = 0;
+    if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; }
+    if (flags & ImGuiSelectableFlags_SelectOnClick)     { button_flags |= ImGuiButtonFlags_PressedOnClick; }
+    if (flags & ImGuiSelectableFlags_SelectOnRelease)   { button_flags |= ImGuiButtonFlags_PressedOnRelease; }
+    if (flags & ImGuiSelectableFlags_Disabled)          { button_flags |= ImGuiButtonFlags_Disabled; }
+    if (flags & ImGuiSelectableFlags_AllowDoubleClick)  { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; }
+    if (flags & ImGuiSelectableFlags_AllowItemOverlap)  { button_flags |= ImGuiButtonFlags_AllowItemOverlap; }
+
+    if (flags & ImGuiSelectableFlags_Disabled)
+        selected = false;
+
+    const bool was_selected = selected;
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb_enlarged, id, &hovered, &held, button_flags);
+
+    // Update NavId when clicking or when Hovering (this doesn't happen on most widgets), so navigation can be resumed with gamepad/keyboard
+    if (pressed || (hovered && (flags & ImGuiSelectableFlags_SetNavIdOnHover)))
+    {
+        if (!g.NavDisableMouseHover && g.NavWindow == window && g.NavLayer == window->DC.NavLayerCurrent)
+        {
+            g.NavDisableHighlight = true;
+            SetNavID(id, window->DC.NavLayerCurrent, window->DC.NavFocusScopeIdCurrent);
+        }
+    }
+    if (pressed)
+        MarkItemEdited(id);
+
+    if (flags & ImGuiSelectableFlags_AllowItemOverlap)
+        SetItemAllowOverlap();
+
+    // In this branch, Selectable() cannot toggle the selection so this will never trigger.
+    if (selected != was_selected) //-V547
+        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
+    // Render
+    if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld))
+        hovered = true;
+    if (hovered || selected)
+    {
+        const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+        RenderFrame(bb_enlarged.Min, bb_enlarged.Max, col, false, 0.0f);
+        RenderNavHighlight(bb_enlarged, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding);
+    }
+
+    if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
+        PopColumnsBackground();
+    else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable)
+        PopTableBackground();
+
+    if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]);
+    RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb_enlarged);
+    if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
+
+    // Automatically close popups
+    if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(window->DC.ItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
+        CloseCurrentPopup();
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
+    return pressed;
+}
+
+bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
+{
+    if (Selectable(label, *p_selected, flags, size_arg))
+    {
+        *p_selected = !*p_selected;
+        return true;
+    }
+    return false;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ListBox
+//-------------------------------------------------------------------------
+// - ListBox()
+// - ListBoxHeader()
+// - ListBoxFooter()
+//-------------------------------------------------------------------------
+// FIXME: This is an old API. We should redesign some of it, rename ListBoxHeader->BeginListBox, ListBoxFooter->EndListBox
+// and promote using them over existing ListBox() functions, similarly to change with combo boxes.
+//-------------------------------------------------------------------------
+
+// FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature.
+// Helper to calculate the size of a listbox and display a label on the right.
+// Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty"
+bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = GetID(label);
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+    // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar.
+    ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y);
+    ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y));
+    ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+    ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+    window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy.
+    g.NextItemData.ClearFlags();
+
+    if (!IsRectVisible(bb.Min, bb.Max))
+    {
+        ItemSize(bb.GetSize(), style.FramePadding.y);
+        ItemAdd(bb, 0, &frame_bb);
+        return false;
+    }
+
+    BeginGroup();
+    if (label_size.x > 0)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+    BeginChildFrame(id, frame_bb.GetSize());
+    return true;
+}
+
+// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature.
+bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items)
+{
+    // Size default to hold ~7.25 items.
+    // We add +25% worth of item height to allow the user to see at a glance if there are more items up/down, without looking at the scrollbar.
+    // We don't add this extra bit if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size.
+    // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution.
+    if (height_in_items < 0)
+        height_in_items = ImMin(items_count, 7);
+    const ImGuiStyle& style = GetStyle();
+    float height_in_items_f = (height_in_items < items_count) ? (height_in_items + 0.25f) : (height_in_items + 0.00f);
+
+    // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild().
+    ImVec2 size;
+    size.x = 0.0f;
+    size.y = ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f);
+    return ListBoxHeader(label, size);
+}
+
+// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature.
+void ImGui::ListBoxFooter()
+{
+    ImGuiWindow* parent_window = GetCurrentWindow()->ParentWindow;
+    const ImRect bb = parent_window->DC.LastItemRect;
+    const ImGuiStyle& style = GetStyle();
+
+    EndChildFrame();
+
+    // Redeclare item size so that it includes the label (we have stored the full size in LastItemRect)
+    // We call SameLine() to restore DC.CurrentLine* data
+    SameLine();
+    parent_window->DC.CursorPos = bb.Min;
+    ItemSize(bb, style.FramePadding.y);
+    EndGroup();
+}
+
+bool ImGui::ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_items)
+{
+    const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items);
+    return value_changed;
+}
+
+bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
+{
+    if (!ListBoxHeader(label, items_count, height_in_items))
+        return false;
+
+    // Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper.
+    ImGuiContext& g = *GImGui;
+    bool value_changed = false;
+    ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
+    while (clipper.Step())
+        for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+        {
+            const bool item_selected = (i == *current_item);
+            const char* item_text;
+            if (!items_getter(data, i, &item_text))
+                item_text = "*Unknown item*";
+
+            PushID(i);
+            if (Selectable(item_text, item_selected))
+            {
+                *current_item = i;
+                value_changed = true;
+            }
+            if (item_selected)
+                SetItemDefaultFocus();
+            PopID();
+        }
+    ListBoxFooter();
+    if (value_changed)
+        MarkItemEdited(g.CurrentWindow->DC.LastItemId);
+
+    return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: PlotLines, PlotHistogram
+//-------------------------------------------------------------------------
+// - PlotEx() [Internal]
+// - PlotLines()
+// - PlotHistogram()
+//-------------------------------------------------------------------------
+
+void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+
+    const ImVec2 label_size = CalcTextSize(label, NULL, true);
+    if (frame_size.x == 0.0f)
+        frame_size.x = CalcItemWidth();
+    if (frame_size.y == 0.0f)
+        frame_size.y = label_size.y + (style.FramePadding.y * 2);
+
+    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+    const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
+    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));
+    ItemSize(total_bb, style.FramePadding.y);
+    if (!ItemAdd(total_bb, 0, &frame_bb))
+        return;
+    const bool hovered = ItemHoverable(frame_bb, id);
+
+    // Determine scale from values if not specified
+    if (scale_min == FLT_MAX || scale_max == FLT_MAX)
+    {
+        float v_min = FLT_MAX;
+        float v_max = -FLT_MAX;
+        for (int i = 0; i < values_count; i++)
+        {
+            const float v = values_getter(data, i);
+            if (v != v) // Ignore NaN values
+                continue;
+            v_min = ImMin(v_min, v);
+            v_max = ImMax(v_max, v);
+        }
+        if (scale_min == FLT_MAX)
+            scale_min = v_min;
+        if (scale_max == FLT_MAX)
+            scale_max = v_max;
+    }
+
+    RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+
+    const int values_count_min = (plot_type == ImGuiPlotType_Lines) ? 2 : 1;
+    if (values_count >= values_count_min)
+    {
+        int res_w = ImMin((int)frame_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
+        int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
+
+        // Tooltip on hover
+        int v_hovered = -1;
+        if (hovered && inner_bb.Contains(g.IO.MousePos))
+        {
+            const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
+            const int v_idx = (int)(t * item_count);
+            IM_ASSERT(v_idx >= 0 && v_idx < values_count);
+
+            const float v0 = values_getter(data, (v_idx + values_offset) % values_count);
+            const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count);
+            if (plot_type == ImGuiPlotType_Lines)
+                SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1);
+            else if (plot_type == ImGuiPlotType_Histogram)
+                SetTooltip("%d: %8.4g", v_idx, v0);
+            v_hovered = v_idx;
+        }
+
+        const float t_step = 1.0f / (float)res_w;
+        const float inv_scale = (scale_min == scale_max) ? 0.0f : (1.0f / (scale_max - scale_min));
+
+        float v0 = values_getter(data, (0 + values_offset) % values_count);
+        float t0 = 0.0f;
+        ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) * inv_scale) );                       // Point in the normalized space of our target rectangle
+        float histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (-scale_min * inv_scale) : (scale_min < 0.0f ? 0.0f : 1.0f);   // Where does the zero line stands
+
+        const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
+        const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
+
+        for (int n = 0; n < res_w; n++)
+        {
+            const float t1 = t0 + t_step;
+            const int v1_idx = (int)(t0 * item_count + 0.5f);
+            IM_ASSERT(v1_idx >= 0 && v1_idx < values_count);
+            const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count);
+            const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) * inv_scale) );
+
+            // NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
+            ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
+            ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t));
+            if (plot_type == ImGuiPlotType_Lines)
+            {
+                window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
+            }
+            else if (plot_type == ImGuiPlotType_Histogram)
+            {
+                if (pos1.x >= pos0.x + 2.0f)
+                    pos1.x -= 1.0f;
+                window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
+            }
+
+            t0 = t1;
+            tp0 = tp1;
+        }
+    }
+
+    // Text overlay
+    if (overlay_text)
+        RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f));
+
+    if (label_size.x > 0.0f)
+        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
+}
+
+struct ImGuiPlotArrayGetterData
+{
+    const float* Values;
+    int Stride;
+
+    ImGuiPlotArrayGetterData(const float* values, int stride) { Values = values; Stride = stride; }
+};
+
+static float Plot_ArrayGetter(void* data, int idx)
+{
+    ImGuiPlotArrayGetterData* plot_data = (ImGuiPlotArrayGetterData*)data;
+    const float v = *(const float*)(const void*)((const unsigned char*)plot_data->Values + (size_t)idx * plot_data->Stride);
+    return v;
+}
+
+void ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
+{
+    ImGuiPlotArrayGetterData data(values, stride);
+    PlotEx(ImGuiPlotType_Lines, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
+{
+    PlotEx(ImGuiPlotType_Lines, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotHistogram(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
+{
+    ImGuiPlotArrayGetterData data(values, stride);
+    PlotEx(ImGuiPlotType_Histogram, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
+{
+    PlotEx(ImGuiPlotType_Histogram, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Value helpers
+// Those is not very useful, legacy API.
+//-------------------------------------------------------------------------
+// - Value()
+//-------------------------------------------------------------------------
+
+void ImGui::Value(const char* prefix, bool b)
+{
+    Text("%s: %s", prefix, (b ? "true" : "false"));
+}
+
+void ImGui::Value(const char* prefix, int v)
+{
+    Text("%s: %d", prefix, v);
+}
+
+void ImGui::Value(const char* prefix, unsigned int v)
+{
+    Text("%s: %d", prefix, v);
+}
+
+void ImGui::Value(const char* prefix, float v, const char* float_format)
+{
+    if (float_format)
+    {
+        char fmt[64];
+        ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format);
+        Text(fmt, prefix, v);
+    }
+    else
+    {
+        Text("%s: %.3f", prefix, v);
+    }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] MenuItem, BeginMenu, EndMenu, etc.
+//-------------------------------------------------------------------------
+// - ImGuiMenuColumns [Internal]
+// - BeginMenuBar()
+// - EndMenuBar()
+// - BeginMainMenuBar()
+// - EndMainMenuBar()
+// - BeginMenu()
+// - EndMenu()
+// - MenuItem()
+//-------------------------------------------------------------------------
+
+// Helpers for internal use
+ImGuiMenuColumns::ImGuiMenuColumns()
+{
+    Spacing = Width = NextWidth = 0.0f;
+    memset(Pos, 0, sizeof(Pos));
+    memset(NextWidths, 0, sizeof(NextWidths));
+}
+
+void ImGuiMenuColumns::Update(int count, float spacing, bool clear)
+{
+    IM_ASSERT(count == IM_ARRAYSIZE(Pos));
+    IM_UNUSED(count);
+    Width = NextWidth = 0.0f;
+    Spacing = spacing;
+    if (clear)
+        memset(NextWidths, 0, sizeof(NextWidths));
+    for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
+    {
+        if (i > 0 && NextWidths[i] > 0.0f)
+            Width += Spacing;
+        Pos[i] = IM_FLOOR(Width);
+        Width += NextWidths[i];
+        NextWidths[i] = 0.0f;
+    }
+}
+
+float ImGuiMenuColumns::DeclColumns(float w0, float w1, float w2) // not using va_arg because they promote float to double
+{
+    NextWidth = 0.0f;
+    NextWidths[0] = ImMax(NextWidths[0], w0);
+    NextWidths[1] = ImMax(NextWidths[1], w1);
+    NextWidths[2] = ImMax(NextWidths[2], w2);
+    for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
+        NextWidth += NextWidths[i] + ((i > 0 && NextWidths[i] > 0.0f) ? Spacing : 0.0f);
+    return ImMax(Width, NextWidth);
+}
+
+float ImGuiMenuColumns::CalcExtraSpace(float avail_w) const
+{
+    return ImMax(0.0f, avail_w - Width);
+}
+
+// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
+// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
+// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
+// Then later the same system could be used for multiple menu-bars, scrollbars, side-bars.
+bool ImGui::BeginMenuBar()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+    if (!(window->Flags & ImGuiWindowFlags_MenuBar))
+        return false;
+
+    IM_ASSERT(!window->DC.MenuBarAppending);
+    BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore
+    PushID("##menubar");
+
+    // We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect.
+    // We remove 1 worth of rounding to Max.x to that text in long menus and small windows don't tend to display over the lower-right rounded area, which looks particularly glitchy.
+    ImRect bar_rect = window->MenuBarRect();
+    ImRect clip_rect(IM_ROUND(bar_rect.Min.x + window->WindowBorderSize), IM_ROUND(bar_rect.Min.y + window->WindowBorderSize), IM_ROUND(ImMax(bar_rect.Min.x, bar_rect.Max.x - ImMax(window->WindowRounding, window->WindowBorderSize))), IM_ROUND(bar_rect.Max.y));
+    clip_rect.ClipWith(window->OuterRectClipped);
+    PushClipRect(clip_rect.Min, clip_rect.Max, false);
+
+    window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y);
+    window->DC.LayoutType = ImGuiLayoutType_Horizontal;
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
+    window->DC.MenuBarAppending = true;
+    AlignTextToFramePadding();
+    return true;
+}
+
+void ImGui::EndMenuBar()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return;
+    ImGuiContext& g = *GImGui;
+
+    // Nav: When a move request within one of our child menu failed, capture the request to navigate among our siblings.
+    if (NavMoveRequestButNoResultYet() && (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) && (g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
+    {
+        ImGuiWindow* nav_earliest_child = g.NavWindow;
+        while (nav_earliest_child->ParentWindow && (nav_earliest_child->ParentWindow->Flags & ImGuiWindowFlags_ChildMenu))
+            nav_earliest_child = nav_earliest_child->ParentWindow;
+        if (nav_earliest_child->ParentWindow == window && nav_earliest_child->DC.ParentLayoutType == ImGuiLayoutType_Horizontal && g.NavMoveRequestForward == ImGuiNavForward_None)
+        {
+            // To do so we claim focus back, restore NavId and then process the movement request for yet another frame.
+            // This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth the hassle/cost)
+            const ImGuiNavLayer layer = ImGuiNavLayer_Menu;
+            IM_ASSERT(window->DC.NavLayerActiveMaskNext & (1 << layer)); // Sanity check
+            FocusWindow(window);
+            SetNavIDWithRectRel(window->NavLastIds[layer], layer, 0, window->NavRectRel[layer]);
+            g.NavLayer = layer;
+            g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection.
+            g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
+            NavMoveRequestCancel();
+        }
+    }
+
+    IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar);
+    IM_ASSERT(window->DC.MenuBarAppending);
+    PopClipRect();
+    PopID();
+    window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->MenuBarRect().Min.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos.
+    window->DC.GroupStack.back().EmitItem = false;
+    EndGroup(); // Restore position on layer 0
+    window->DC.LayoutType = ImGuiLayoutType_Vertical;
+    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
+    window->DC.MenuBarAppending = false;
+}
+
+// For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set.
+bool ImGui::BeginMainMenuBar()
+{
+    ImGuiContext& g = *GImGui;
+    g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f));
+    SetNextWindowPos(ImVec2(0.0f, 0.0f));
+    SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.NextWindowData.MenuBarOffsetMinVal.y + g.FontBaseSize + g.Style.FramePadding.y));
+    PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
+    PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0));
+    ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar;
+    bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar();
+    PopStyleVar(2);
+    g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
+    if (!is_open)
+    {
+        End();
+        return false;
+    }
+    return true; //-V1020
+}
+
+void ImGui::EndMainMenuBar()
+{
+    EndMenuBar();
+
+    // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
+    // FIXME: With this strategy we won't be able to restore a NULL focus.
+    ImGuiContext& g = *GImGui;
+    if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest)
+        FocusTopMostWindowUnderOne(g.NavWindow, NULL);
+
+    End();
+}
+
+bool ImGui::BeginMenu(const char* label, bool enabled)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = window->GetID(label);
+    bool menu_is_open = IsPopupOpen(id);
+
+    // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu)
+    ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus;
+    if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu))
+        flags |= ImGuiWindowFlags_ChildWindow;
+
+    // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin().
+    // We are relying on a O(N) search - so O(N log N) over the frame - which seems like the most efficient for the expected small amount of BeginMenu() calls per frame.
+    // If somehow this is ever becoming a problem we can switch to use e.g. a ImGuiStorager mapping key to last frame used.
+    if (g.MenusIdSubmittedThisFrame.contains(id))
+    {
+        if (menu_is_open)
+            menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+        else
+            g.NextWindowData.ClearFlags();          // we behave like Begin() and need to consume those values
+        return menu_is_open;
+    }
+
+    // Tag menu as used. Next time BeginMenu() with same ID is called it will append to existing menu
+    g.MenusIdSubmittedThisFrame.push_back(id);
+
+    ImVec2 label_size = CalcTextSize(label, NULL, true);
+    bool pressed;
+    bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back());
+    ImGuiWindow* backed_nav_window = g.NavWindow;
+    if (menuset_is_open)
+        g.NavWindow = window;  // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent)
+
+    // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu,
+    // However the final position is going to be different! It is choosen by FindBestWindowPosForPopup().
+    // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering.
+    ImVec2 popup_pos, pos = window->DC.CursorPos;
+    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+    {
+        // Menu inside an horizontal menu bar
+        // Selectable extend their highlight by half ItemSpacing in each direction.
+        // For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
+        popup_pos = ImVec2(pos.x - 1.0f - IM_FLOOR(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight());
+        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
+        PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
+        float w = label_size.x;
+        pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
+        PopStyleVar();
+        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
+    }
+    else
+    {
+        // Menu inside a menu
+        // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
+        //  Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
+        popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y);
+        float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, 0.0f, IM_FLOOR(g.FontSize * 1.20f)); // Feedback to next frame
+        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
+        pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_SpanAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(min_w, 0.0f));
+        ImU32 text_col = GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled);
+        RenderArrow(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), text_col, ImGuiDir_Right);
+    }
+
+    const bool hovered = enabled && ItemHoverable(window->DC.LastItemRect, id);
+    if (menuset_is_open)
+        g.NavWindow = backed_nav_window;
+
+    bool want_open = false;
+    bool want_close = false;
+    if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
+    {
+        // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu
+        // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive.
+        bool moving_toward_other_child_menu = false;
+
+        ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL;
+        if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar))
+        {
+            // FIXME-DPI: Values should be derived from a master "scale" factor.
+            ImRect next_window_rect = child_menu_window->Rect();
+            ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta;
+            ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR();
+            ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR();
+            float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f);    // add a bit of extra slack.
+            ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues
+            tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f);                // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
+            tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
+            moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
+            //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
+        }
+        if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu)
+            want_close = true;
+
+        if (!menu_is_open && hovered && pressed) // Click to open
+            want_open = true;
+        else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open
+            want_open = true;
+
+        if (g.NavActivateId == id)
+        {
+            want_close = menu_is_open;
+            want_open = !menu_is_open;
+        }
+        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open
+        {
+            want_open = true;
+            NavMoveRequestCancel();
+        }
+    }
+    else
+    {
+        // Menu bar
+        if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it
+        {
+            want_close = true;
+            want_open = menu_is_open = false;
+        }
+        else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others
+        {
+            want_open = true;
+        }
+        else if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Down) // Nav-Down to open
+        {
+            want_open = true;
+            NavMoveRequestCancel();
+        }
+    }
+
+    if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }'
+        want_close = true;
+    if (want_close && IsPopupOpen(id))
+        ClosePopupToLevel(g.BeginPopupStack.Size, true);
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0));
+
+    if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size)
+    {
+        // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame.
+        OpenPopup(label);
+        return false;
+    }
+
+    menu_is_open |= want_open;
+    if (want_open)
+        OpenPopup(label);
+
+    if (menu_is_open)
+    {
+        SetNextWindowPos(popup_pos, ImGuiCond_Always);
+        menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+    }
+    else
+    {
+        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+    }
+
+    return menu_is_open;
+}
+
+void ImGui::EndMenu()
+{
+    // Nav: When a left move request _within our child menu_ failed, close ourselves (the _parent_ menu).
+    // A menu doesn't close itself because EndMenuBar() wants the catch the last Left<>Right inputs.
+    // However, it means that with the current code, a BeginMenu() from outside another menu or a menu-bar won't be closable with the Left direction.
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (g.NavWindow && g.NavWindow->ParentWindow == window && g.NavMoveDir == ImGuiDir_Left && NavMoveRequestButNoResultYet() && window->DC.LayoutType == ImGuiLayoutType_Vertical)
+    {
+        ClosePopupToLevel(g.BeginPopupStack.Size, true);
+        NavMoveRequestCancel();
+    }
+
+    EndPopup();
+}
+
+bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, bool enabled)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems)
+        return false;
+
+    ImGuiContext& g = *GImGui;
+    ImGuiStyle& style = g.Style;
+    ImVec2 pos = window->DC.CursorPos;
+    ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+    // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73),
+    // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only.
+    ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
+    bool pressed;
+    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+    {
+        // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
+        // Note that in this situation we render neither the shortcut neither the selected tick mark
+        float w = label_size.x;
+        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
+        PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
+        pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
+        PopStyleVar();
+        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
+    }
+    else
+    {
+        // Menu item inside a vertical menu
+        // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
+        //  Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
+        float shortcut_w = shortcut ? CalcTextSize(shortcut, NULL).x : 0.0f;
+        float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame
+        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
+        pressed = Selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f));
+        if (shortcut_w > 0.0f)
+        {
+            PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
+            RenderText(pos + ImVec2(window->DC.MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
+            PopStyleColor();
+        }
+        if (selected)
+            RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f);
+    }
+
+    IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
+    return pressed;
+}
+
+bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled)
+{
+    if (MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled))
+    {
+        if (p_selected)
+            *p_selected = !*p_selected;
+        return true;
+    }
+    return false;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+//-------------------------------------------------------------------------
+// - BeginTabBar()
+// - BeginTabBarEx() [Internal]
+// - EndTabBar()
+// - TabBarLayout() [Internal]
+// - TabBarCalcTabID() [Internal]
+// - TabBarCalcMaxTabWidth() [Internal]
+// - TabBarFindTabById() [Internal]
+// - TabBarRemoveTab() [Internal]
+// - TabBarCloseTab() [Internal]
+// - TabBarScrollClamp()v
+// - TabBarScrollToTab() [Internal]
+// - TabBarQueueChangeTabOrder() [Internal]
+// - TabBarScrollingButtons() [Internal]
+// - TabBarTabListPopupButton() [Internal]
+//-------------------------------------------------------------------------
+
+namespace ImGui
+{
+    static void             TabBarLayout(ImGuiTabBar* tab_bar);
+    static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label);
+    static float            TabBarCalcMaxTabWidth();
+    static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling);
+    static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
+    static ImGuiTabItem*    TabBarScrollingButtons(ImGuiTabBar* tab_bar);
+    static ImGuiTabItem*    TabBarTabListPopupButton(ImGuiTabBar* tab_bar);
+}
+
+ImGuiTabBar::ImGuiTabBar()
+{
+    ID = 0;
+    SelectedTabId = NextSelectedTabId = VisibleTabId = 0;
+    CurrFrameVisible = PrevFrameVisible = -1;
+    LastTabContentHeight = 0.0f;
+    OffsetMax = OffsetMaxIdeal = OffsetNextTab = 0.0f;
+    ScrollingAnim = ScrollingTarget = ScrollingTargetDistToVisibility = ScrollingSpeed = 0.0f;
+    Flags = ImGuiTabBarFlags_None;
+    ReorderRequestTabId = 0;
+    ReorderRequestDir = 0;
+    WantLayout = VisibleTabWasSubmitted = false;
+    LastTabItemIdx = -1;
+}
+
+static int IMGUI_CDECL TabItemComparerByVisibleOffset(const void* lhs, const void* rhs)
+{
+    const ImGuiTabItem* a = (const ImGuiTabItem*)lhs;
+    const ImGuiTabItem* b = (const ImGuiTabItem*)rhs;
+    return (int)(a->Offset - b->Offset);
+}
+
+static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
+{
+    ImGuiContext& g = *GImGui;
+    return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index);
+}
+
+static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
+{
+    ImGuiContext& g = *GImGui;
+    if (g.TabBars.Contains(tab_bar))
+        return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar));
+    return ImGuiPtrOrIndex(tab_bar);
+}
+
+bool    ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return false;
+
+    ImGuiID id = window->GetID(str_id);
+    ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id);
+    ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2);
+    tab_bar->ID = id;
+    return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused);
+}
+
+bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImGuiTabBarFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return false;
+
+    if ((flags & ImGuiTabBarFlags_DockNode) == 0)
+        PushOverrideID(tab_bar->ID);
+
+    // Add to stack
+    g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
+    g.CurrentTabBar = tab_bar;
+
+    if (tab_bar->CurrFrameVisible == g.FrameCount)
+    {
+        //IMGUI_DEBUG_LOG("BeginTabBarEx already called this frame\n", g.FrameCount);
+        IM_ASSERT(0);
+        return true;
+    }
+
+    // When toggling back from ordered to manually-reorderable, shuffle tabs to enforce the last visible order.
+    // Otherwise, the most recently inserted tabs would move at the end of visible list which can be a little too confusing or magic for the user.
+    if ((flags & ImGuiTabBarFlags_Reorderable) && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable) && tab_bar->Tabs.Size > 1 && tab_bar->PrevFrameVisible != -1)
+        ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByVisibleOffset);
+
+    // Flags
+    if ((flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+        flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+
+    tab_bar->Flags = flags;
+    tab_bar->BarRect = tab_bar_bb;
+    tab_bar->WantLayout = true; // Layout will be done on the first call to ItemTab()
+    tab_bar->PrevFrameVisible = tab_bar->CurrFrameVisible;
+    tab_bar->CurrFrameVisible = g.FrameCount;
+    tab_bar->FramePadding = g.Style.FramePadding;
+
+    // Layout
+    ItemSize(ImVec2(tab_bar->OffsetMaxIdeal, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y);
+    window->DC.CursorPos.x = tab_bar->BarRect.Min.x;
+
+    // Draw separator
+    const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive);
+    const float y = tab_bar->BarRect.Max.y - 1.0f;
+    {
+        const float separator_min_x = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f);
+        const float separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f);
+        window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f);
+    }
+    return true;
+}
+
+void    ImGui::EndTabBar()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    ImGuiTabBar* tab_bar = g.CurrentTabBar;
+    if (tab_bar == NULL)
+    {
+        IM_ASSERT_USER_ERROR(tab_bar != NULL, "Mismatched BeginTabBar()/EndTabBar()!");
+        return;
+    }
+    if (tab_bar->WantLayout)
+        TabBarLayout(tab_bar);
+
+    // Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
+    const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+    if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing)
+        tab_bar->LastTabContentHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, 0.0f);
+    else
+        window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->LastTabContentHeight;
+
+    if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+        PopID();
+
+    g.CurrentTabBarStack.pop_back();
+    g.CurrentTabBar = g.CurrentTabBarStack.empty() ? NULL : GetTabBarFromTabBarRef(g.CurrentTabBarStack.back());
+}
+
+// This is called only once a frame before by the first call to ItemTab()
+// The reason we're not calling it in BeginTabBar() is to leave a chance to the user to call the SetTabItemClosed() functions.
+static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
+{
+    ImGuiContext& g = *GImGui;
+    tab_bar->WantLayout = false;
+
+    // Garbage collect
+    int tab_dst_n = 0;
+    for (int tab_src_n = 0; tab_src_n < tab_bar->Tabs.Size; tab_src_n++)
+    {
+        ImGuiTabItem* tab = &tab_bar->Tabs[tab_src_n];
+        if (tab->LastFrameVisible < tab_bar->PrevFrameVisible)
+        {
+            if (tab->ID == tab_bar->SelectedTabId)
+                tab_bar->SelectedTabId = 0;
+            continue;
+        }
+        if (tab_dst_n != tab_src_n)
+            tab_bar->Tabs[tab_dst_n] = tab_bar->Tabs[tab_src_n];
+        tab_dst_n++;
+    }
+    if (tab_bar->Tabs.Size != tab_dst_n)
+        tab_bar->Tabs.resize(tab_dst_n);
+
+    // Setup next selected tab
+    ImGuiID scroll_track_selected_tab_id = 0;
+    if (tab_bar->NextSelectedTabId)
+    {
+        tab_bar->SelectedTabId = tab_bar->NextSelectedTabId;
+        tab_bar->NextSelectedTabId = 0;
+        scroll_track_selected_tab_id = tab_bar->SelectedTabId;
+    }
+
+    // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot).
+    if (tab_bar->ReorderRequestTabId != 0)
+    {
+        if (ImGuiTabItem* tab1 = TabBarFindTabByID(tab_bar, tab_bar->ReorderRequestTabId))
+        {
+            //IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_Reorderable); // <- this may happen when using debug tools
+            int tab2_order = tab_bar->GetTabOrder(tab1) + tab_bar->ReorderRequestDir;
+            if (tab2_order >= 0 && tab2_order < tab_bar->Tabs.Size)
+            {
+                ImGuiTabItem* tab2 = &tab_bar->Tabs[tab2_order];
+                ImGuiTabItem item_tmp = *tab1;
+                *tab1 = *tab2;
+                *tab2 = item_tmp;
+                if (tab2->ID == tab_bar->SelectedTabId)
+                    scroll_track_selected_tab_id = tab2->ID;
+                tab1 = tab2 = NULL;
+            }
+            if (tab_bar->Flags & ImGuiTabBarFlags_SaveSettings)
+                MarkIniSettingsDirty();
+        }
+        tab_bar->ReorderRequestTabId = 0;
+    }
+
+    // Tab List Popup (will alter tab_bar->BarRect and therefore the available width!)
+    const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0;
+    if (tab_list_popup_button)
+        if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Max.x!
+            scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
+
+    // Compute ideal widths
+    g.ShrinkWidthBuffer.resize(tab_bar->Tabs.Size);
+    float width_total_contents = 0.0f;
+    ImGuiTabItem* most_recently_selected_tab = NULL;
+    bool found_selected_tab_id = false;
+    for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+    {
+        ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+        IM_ASSERT(tab->LastFrameVisible >= tab_bar->PrevFrameVisible);
+
+        if (most_recently_selected_tab == NULL || most_recently_selected_tab->LastFrameSelected < tab->LastFrameSelected)
+            most_recently_selected_tab = tab;
+        if (tab->ID == tab_bar->SelectedTabId)
+            found_selected_tab_id = true;
+
+        // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar.
+        // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet,
+        // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window.
+        const char* tab_name = tab_bar->GetTabName(tab);
+        const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true;
+        tab->ContentWidth = TabItemCalcSize(tab_name, has_close_button).x;
+
+        width_total_contents += (tab_n > 0 ? g.Style.ItemInnerSpacing.x : 0.0f) + tab->ContentWidth;
+
+        // Store data so we can build an array sorted by width if we need to shrink tabs down
+        g.ShrinkWidthBuffer[tab_n].Index = tab_n;
+        g.ShrinkWidthBuffer[tab_n].Width = tab->ContentWidth;
+    }
+
+    // Compute width
+    const float initial_offset_x = 0.0f; // g.Style.ItemInnerSpacing.x;
+    const float width_avail = ImMax(tab_bar->BarRect.GetWidth() - initial_offset_x, 0.0f);
+    float width_excess = (width_avail < width_total_contents) ? (width_total_contents - width_avail) : 0.0f;
+    if (width_excess > 0.0f && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyResizeDown))
+    {
+        // If we don't have enough room, resize down the largest tabs first
+        ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess);
+        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+            tab_bar->Tabs[g.ShrinkWidthBuffer[tab_n].Index].Width = IM_FLOOR(g.ShrinkWidthBuffer[tab_n].Width);
+    }
+    else
+    {
+        const float tab_max_width = TabBarCalcMaxTabWidth();
+        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+        {
+            ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+            tab->Width = ImMin(tab->ContentWidth, tab_max_width);
+            IM_ASSERT(tab->Width > 0.0f);
+        }
+    }
+
+    // Layout all active tabs
+    float offset_x = initial_offset_x;
+    float offset_x_ideal = offset_x;
+    tab_bar->OffsetNextTab = offset_x; // This is used by non-reorderable tab bar where the submission order is always honored.
+    for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+    {
+        ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+        tab->Offset = offset_x;
+        if (scroll_track_selected_tab_id == 0 && g.NavJustMovedToId == tab->ID)
+            scroll_track_selected_tab_id = tab->ID;
+        offset_x += tab->Width + g.Style.ItemInnerSpacing.x;
+        offset_x_ideal += tab->ContentWidth + g.Style.ItemInnerSpacing.x;
+    }
+    tab_bar->OffsetMax = ImMax(offset_x - g.Style.ItemInnerSpacing.x, 0.0f);
+    tab_bar->OffsetMaxIdeal = ImMax(offset_x_ideal - g.Style.ItemInnerSpacing.x, 0.0f);
+
+    // Horizontal scrolling buttons
+    const bool scrolling_buttons = (tab_bar->OffsetMax > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll);
+    if (scrolling_buttons)
+        if (ImGuiTabItem* tab_to_select = TabBarScrollingButtons(tab_bar)) // NB: Will alter BarRect.Max.x!
+            scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
+
+    // If we have lost the selected tab, select the next most recently active one
+    if (found_selected_tab_id == false)
+        tab_bar->SelectedTabId = 0;
+    if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL)
+        scroll_track_selected_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
+
+    // Lock in visible tab
+    tab_bar->VisibleTabId = tab_bar->SelectedTabId;
+    tab_bar->VisibleTabWasSubmitted = false;
+
+    // Update scrolling
+    if (scroll_track_selected_tab_id)
+        if (ImGuiTabItem* scroll_track_selected_tab = TabBarFindTabByID(tab_bar, scroll_track_selected_tab_id))
+            TabBarScrollToTab(tab_bar, scroll_track_selected_tab);
+    tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim);
+    tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget);
+    if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget)
+    {
+        // Scrolling speed adjust itself so we can always reach our target in 1/3 seconds.
+        // Teleport if we are aiming far off the visible line
+        tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, 70.0f * g.FontSize);
+        tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, ImFabs(tab_bar->ScrollingTarget - tab_bar->ScrollingAnim) / 0.3f);
+        const bool teleport = (tab_bar->PrevFrameVisible + 1 < g.FrameCount) || (tab_bar->ScrollingTargetDistToVisibility > 10.0f * g.FontSize);
+        tab_bar->ScrollingAnim = teleport ? tab_bar->ScrollingTarget : ImLinearSweep(tab_bar->ScrollingAnim, tab_bar->ScrollingTarget, g.IO.DeltaTime * tab_bar->ScrollingSpeed);
+    }
+    else
+    {
+        tab_bar->ScrollingSpeed = 0.0f;
+    }
+
+    // Clear name buffers
+    if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+        tab_bar->TabsNames.Buf.resize(0);
+}
+
+// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack.
+static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label)
+{
+    if (tab_bar->Flags & ImGuiTabBarFlags_DockNode)
+    {
+        ImGuiID id = ImHashStr(label);
+        KeepAliveID(id);
+        return id;
+    }
+    else
+    {
+        ImGuiWindow* window = GImGui->CurrentWindow;
+        return window->GetID(label);
+    }
+}
+
+static float ImGui::TabBarCalcMaxTabWidth()
+{
+    ImGuiContext& g = *GImGui;
+    return g.FontSize * 20.0f;
+}
+
+ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+    if (tab_id != 0)
+        for (int n = 0; n < tab_bar->Tabs.Size; n++)
+            if (tab_bar->Tabs[n].ID == tab_id)
+                return &tab_bar->Tabs[n];
+    return NULL;
+}
+
+// The *TabId fields be already set by the docking system _before_ the actual TabItem was created, so we clear them regardless.
+void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+    if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
+        tab_bar->Tabs.erase(tab);
+    if (tab_bar->VisibleTabId == tab_id)      { tab_bar->VisibleTabId = 0; }
+    if (tab_bar->SelectedTabId == tab_id)     { tab_bar->SelectedTabId = 0; }
+    if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
+}
+
+// Called on manual closure attempt
+void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
+{
+    if ((tab_bar->VisibleTabId == tab->ID) && !(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+    {
+        // This will remove a frame of lag for selecting another tab on closure.
+        // However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
+        tab->LastFrameVisible = -1;
+        tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
+    }
+    else if ((tab_bar->VisibleTabId != tab->ID) && (tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+    {
+        // Actually select before expecting closure
+        tab_bar->NextSelectedTabId = tab->ID;
+    }
+}
+
+static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling)
+{
+    scrolling = ImMin(scrolling, tab_bar->OffsetMax - tab_bar->BarRect.GetWidth());
+    return ImMax(scrolling, 0.0f);
+}
+
+static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
+{
+    ImGuiContext& g = *GImGui;
+    float margin = g.FontSize * 1.0f; // When to scroll to make Tab N+1 visible always make a bit of N visible to suggest more scrolling area (since we don't have a scrollbar)
+    int order = tab_bar->GetTabOrder(tab);
+    float tab_x1 = tab->Offset + (order > 0 ? -margin : 0.0f);
+    float tab_x2 = tab->Offset + tab->Width + (order + 1 < tab_bar->Tabs.Size ? margin : 1.0f);
+    tab_bar->ScrollingTargetDistToVisibility = 0.0f;
+    if (tab_bar->ScrollingTarget > tab_x1 || (tab_x2 - tab_x1 >= tab_bar->BarRect.GetWidth()))
+    {
+        tab_bar->ScrollingTargetDistToVisibility = ImMax(tab_bar->ScrollingAnim - tab_x2, 0.0f);
+        tab_bar->ScrollingTarget = tab_x1;
+    }
+    else if (tab_bar->ScrollingTarget < tab_x2 - tab_bar->BarRect.GetWidth())
+    {
+        tab_bar->ScrollingTargetDistToVisibility = ImMax((tab_x1 - tab_bar->BarRect.GetWidth()) - tab_bar->ScrollingAnim, 0.0f);
+        tab_bar->ScrollingTarget = tab_x2 - tab_bar->BarRect.GetWidth();
+    }
+}
+
+void ImGui::TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir)
+{
+    IM_ASSERT(dir == -1 || dir == +1);
+    IM_ASSERT(tab_bar->ReorderRequestTabId == 0);
+    tab_bar->ReorderRequestTabId = tab->ID;
+    tab_bar->ReorderRequestDir = (ImS8)dir;
+}
+
+static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    const ImVec2 arrow_button_size(g.FontSize - 2.0f, g.FontSize + g.Style.FramePadding.y * 2.0f);
+    const float scrolling_buttons_width = arrow_button_size.x * 2.0f;
+
+    const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+    //window->DrawList->AddRect(ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y), ImVec2(tab_bar->BarRect.Max.x, tab_bar->BarRect.Max.y), IM_COL32(255,0,0,255));
+
+    const ImRect avail_bar_rect = tab_bar->BarRect;
+    bool want_clip_rect = !avail_bar_rect.Contains(ImRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(scrolling_buttons_width, 0.0f)));
+    if (want_clip_rect)
+        PushClipRect(tab_bar->BarRect.Min, tab_bar->BarRect.Max + ImVec2(g.Style.ItemInnerSpacing.x, 0.0f), true);
+
+    ImGuiTabItem* tab_to_select = NULL;
+
+    int select_dir = 0;
+    ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+    arrow_col.w *= 0.5f;
+
+    PushStyleColor(ImGuiCol_Text, arrow_col);
+    PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+    const float backup_repeat_delay = g.IO.KeyRepeatDelay;
+    const float backup_repeat_rate = g.IO.KeyRepeatRate;
+    g.IO.KeyRepeatDelay = 0.250f;
+    g.IO.KeyRepeatRate = 0.200f;
+    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y);
+    if (ArrowButtonEx("##<", ImGuiDir_Left, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+        select_dir = -1;
+    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width + arrow_button_size.x, tab_bar->BarRect.Min.y);
+    if (ArrowButtonEx("##>", ImGuiDir_Right, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+        select_dir = +1;
+    PopStyleColor(2);
+    g.IO.KeyRepeatRate = backup_repeat_rate;
+    g.IO.KeyRepeatDelay = backup_repeat_delay;
+
+    if (want_clip_rect)
+        PopClipRect();
+
+    if (select_dir != 0)
+        if (ImGuiTabItem* tab_item = TabBarFindTabByID(tab_bar, tab_bar->SelectedTabId))
+        {
+            int selected_order = tab_bar->GetTabOrder(tab_item);
+            int target_order = selected_order + select_dir;
+            tab_to_select = &tab_bar->Tabs[(target_order >= 0 && target_order < tab_bar->Tabs.Size) ? target_order : selected_order]; // If we are at the end of the list, still scroll to make our tab visible
+        }
+    window->DC.CursorPos = backup_cursor_pos;
+    tab_bar->BarRect.Max.x -= scrolling_buttons_width + 1.0f;
+
+    return tab_to_select;
+}
+
+static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    // We use g.Style.FramePadding.y to match the square ArrowButton size
+    const float tab_list_popup_button_width = g.FontSize + g.Style.FramePadding.y;
+    const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x - g.Style.FramePadding.y, tab_bar->BarRect.Min.y);
+    tab_bar->BarRect.Min.x += tab_list_popup_button_width;
+
+    ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+    arrow_col.w *= 0.5f;
+    PushStyleColor(ImGuiCol_Text, arrow_col);
+    PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+    bool open = BeginCombo("##v", NULL, ImGuiComboFlags_NoPreview);
+    PopStyleColor(2);
+
+    ImGuiTabItem* tab_to_select = NULL;
+    if (open)
+    {
+        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+        {
+            ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+            const char* tab_name = tab_bar->GetTabName(tab);
+            if (Selectable(tab_name, tab_bar->SelectedTabId == tab->ID))
+                tab_to_select = tab;
+        }
+        EndCombo();
+    }
+
+    window->DC.CursorPos = backup_cursor_pos;
+    return tab_to_select;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+//-------------------------------------------------------------------------
+// - BeginTabItem()
+// - EndTabItem()
+// - TabItemEx() [Internal]
+// - SetTabItemClosed()
+// - TabItemCalcSize() [Internal]
+// - TabItemBackground() [Internal]
+// - TabItemLabelAndCloseButton() [Internal]
+//-------------------------------------------------------------------------
+
+bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return false;
+
+    ImGuiTabBar* tab_bar = g.CurrentTabBar;
+    if (tab_bar == NULL)
+    {
+        IM_ASSERT_USER_ERROR(tab_bar, "BeginTabItem() Needs to be called between BeginTabBar() and EndTabBar()!");
+        return false;
+    }
+    bool ret = TabItemEx(tab_bar, label, p_open, flags);
+    if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
+    {
+        ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+        PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
+    }
+    return ret;
+}
+
+void    ImGui::EndTabItem()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    ImGuiTabBar* tab_bar = g.CurrentTabBar;
+    if (tab_bar == NULL)
+    {
+        IM_ASSERT(tab_bar != NULL && "Needs to be called between BeginTabBar() and EndTabBar()!");
+        return;
+    }
+    IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
+    ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+    if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
+        window->IDStack.pop_back();
+}
+
+bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+    // Layout whole tab bar if not already done
+    if (tab_bar->WantLayout)
+        TabBarLayout(tab_bar);
+
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return false;
+
+    const ImGuiStyle& style = g.Style;
+    const ImGuiID id = TabBarCalcTabID(tab_bar, label);
+
+    // If the user called us with *p_open == false, we early out and don't render. We make a dummy call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
+    if (p_open && !*p_open)
+    {
+        PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
+        ItemAdd(ImRect(), id);
+        PopItemFlag();
+        return false;
+    }
+
+    // Store into ImGuiTabItemFlags_NoCloseButton, also honor ImGuiTabItemFlags_NoCloseButton passed by user (although not documented)
+    if (flags & ImGuiTabItemFlags_NoCloseButton)
+        p_open = NULL;
+    else if (p_open == NULL)
+        flags |= ImGuiTabItemFlags_NoCloseButton;
+
+    // Calculate tab contents size
+    ImVec2 size = TabItemCalcSize(label, p_open != NULL);
+
+    // Acquire tab data
+    ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id);
+    bool tab_is_new = false;
+    if (tab == NULL)
+    {
+        tab_bar->Tabs.push_back(ImGuiTabItem());
+        tab = &tab_bar->Tabs.back();
+        tab->ID = id;
+        tab->Width = size.x;
+        tab_is_new = true;
+    }
+    tab_bar->LastTabItemIdx = (short)tab_bar->Tabs.index_from_ptr(tab);
+    tab->ContentWidth = size.x;
+
+    const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+    const bool tab_bar_focused = (tab_bar->Flags & ImGuiTabBarFlags_IsFocused) != 0;
+    const bool tab_appearing = (tab->LastFrameVisible + 1 < g.FrameCount);
+    tab->LastFrameVisible = g.FrameCount;
+    tab->Flags = flags;
+
+    // Append name with zero-terminator
+    tab->NameOffset = tab_bar->TabsNames.size();
+    tab_bar->TabsNames.append(label, label + strlen(label) + 1);
+
+    // If we are not reorderable, always reset offset based on submission order.
+    // (We already handled layout and sizing using the previous known order, but sizing is not affected by order!)
+    if (!tab_appearing && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
+    {
+        tab->Offset = tab_bar->OffsetNextTab;
+        tab_bar->OffsetNextTab += tab->Width + g.Style.ItemInnerSpacing.x;
+    }
+
+    // Update selected tab
+    if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0)
+        if (!tab_bar_appearing || tab_bar->SelectedTabId == 0)
+            tab_bar->NextSelectedTabId = id;  // New tabs gets activated
+    if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // SetSelected can only be passed on explicit tab bar
+        tab_bar->NextSelectedTabId = id;
+
+    // Lock visibility
+    bool tab_contents_visible = (tab_bar->VisibleTabId == id);
+    if (tab_contents_visible)
+        tab_bar->VisibleTabWasSubmitted = true;
+
+    // On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
+    if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
+        if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
+            tab_contents_visible = true;
+
+    if (tab_appearing && !(tab_bar_appearing && !tab_is_new))
+    {
+        PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
+        ItemAdd(ImRect(), id);
+        PopItemFlag();
+        return tab_contents_visible;
+    }
+
+    if (tab_bar->SelectedTabId == id)
+        tab->LastFrameSelected = g.FrameCount;
+
+    // Backup current layout position
+    const ImVec2 backup_main_cursor_pos = window->DC.CursorPos;
+
+    // Layout
+    size.x = tab->Width;
+    window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2(IM_FLOOR(tab->Offset - tab_bar->ScrollingAnim), 0.0f);
+    ImVec2 pos = window->DC.CursorPos;
+    ImRect bb(pos, pos + size);
+
+    // We don't have CPU clipping primitives to clip the CloseButton (until it becomes a texture), so need to add an extra draw call (temporary in the case of vertical animation)
+    bool want_clip_rect = (bb.Min.x < tab_bar->BarRect.Min.x) || (bb.Max.x > tab_bar->BarRect.Max.x);
+    if (want_clip_rect)
+        PushClipRect(ImVec2(ImMax(bb.Min.x, tab_bar->BarRect.Min.x), bb.Min.y - 1), ImVec2(tab_bar->BarRect.Max.x, bb.Max.y), true);
+
+    ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
+    ItemSize(bb.GetSize(), style.FramePadding.y);
+    window->DC.CursorMaxPos = backup_cursor_max_pos;
+
+    if (!ItemAdd(bb, id))
+    {
+        if (want_clip_rect)
+            PopClipRect();
+        window->DC.CursorPos = backup_main_cursor_pos;
+        return tab_contents_visible;
+    }
+
+    // Click to Select a tab
+    ImGuiButtonFlags button_flags = (ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_AllowItemOverlap);
+    if (g.DragDropActive)
+        button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+    bool hovered, held;
+    bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+    if (pressed)
+        tab_bar->NextSelectedTabId = id;
+    hovered |= (g.HoveredId == id);
+
+    // Allow the close button to overlap unless we are dragging (in which case we don't want any overlapping tabs to be hovered)
+    if (!held)
+        SetItemAllowOverlap();
+
+    // Drag and drop: re-order tabs
+    if (held && !tab_appearing && IsMouseDragging(0))
+    {
+        if (!g.DragDropActive && (tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
+        {
+            // While moving a tab it will jump on the other side of the mouse, so we also test for MouseDelta.x
+            if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < bb.Min.x)
+            {
+                if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
+                    TabBarQueueChangeTabOrder(tab_bar, tab, -1);
+            }
+            else if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > bb.Max.x)
+            {
+                if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
+                    TabBarQueueChangeTabOrder(tab_bar, tab, +1);
+            }
+        }
+    }
+
+#if 0
+    if (hovered && g.HoveredIdNotActiveTimer > 0.50f && bb.GetWidth() < tab->ContentWidth)
+    {
+        // Enlarge tab display when hovering
+        bb.Max.x = bb.Min.x + IM_FLOOR(ImLerp(bb.GetWidth(), tab->ContentWidth, ImSaturate((g.HoveredIdNotActiveTimer - 0.40f) * 6.0f)));
+        display_draw_list = GetForegroundDrawList(window);
+        TabItemBackground(display_draw_list, bb, flags, GetColorU32(ImGuiCol_TitleBgActive));
+    }
+#endif
+
+    // Render tab shape
+    ImDrawList* display_draw_list = window->DrawList;
+    const ImU32 tab_col = GetColorU32((held || hovered) ? ImGuiCol_TabHovered : tab_contents_visible ? (tab_bar_focused ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive) : (tab_bar_focused ? ImGuiCol_Tab : ImGuiCol_TabUnfocused));
+    TabItemBackground(display_draw_list, bb, flags, tab_col);
+    RenderNavHighlight(bb, id);
+
+    // Select with right mouse button. This is so the common idiom for context menu automatically highlight the current widget.
+    const bool hovered_unblocked = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
+    if (hovered_unblocked && (IsMouseClicked(1) || IsMouseReleased(1)))
+        tab_bar->NextSelectedTabId = id;
+
+    if (tab_bar->Flags & ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)
+        flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton;
+
+    // Render tab label, process close button
+    const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0;
+    bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id);
+    if (just_closed && p_open != NULL)
+    {
+        *p_open = false;
+        TabBarCloseTab(tab_bar, tab);
+    }
+
+    // Restore main window position so user can draw there
+    if (want_clip_rect)
+        PopClipRect();
+    window->DC.CursorPos = backup_main_cursor_pos;
+
+    // Tooltip (FIXME: Won't work over the close button because ItemOverlap systems messes up with HoveredIdTimer)
+    // We test IsItemHovered() to discard e.g. when another item is active or drag and drop over the tab bar (which g.HoveredId ignores)
+    if (g.HoveredId == id && !held && g.HoveredIdNotActiveTimer > 0.50f && IsItemHovered())
+        if (!(tab_bar->Flags & ImGuiTabBarFlags_NoTooltip))
+            SetTooltip("%.*s", (int)(FindRenderedTextEnd(label) - label), label);
+
+    return tab_contents_visible;
+}
+
+// [Public] This is call is 100% optional but it allows to remove some one-frame glitches when a tab has been unexpectedly removed.
+// To use it to need to call the function SetTabItemClosed() after BeginTabBar() and before any call to BeginTabItem()
+void    ImGui::SetTabItemClosed(const char* label)
+{
+    ImGuiContext& g = *GImGui;
+    bool is_within_manual_tab_bar = g.CurrentTabBar && !(g.CurrentTabBar->Flags & ImGuiTabBarFlags_DockNode);
+    if (is_within_manual_tab_bar)
+    {
+        ImGuiTabBar* tab_bar = g.CurrentTabBar;
+        IM_ASSERT(tab_bar->WantLayout);         // Needs to be called AFTER BeginTabBar() and BEFORE the first call to BeginTabItem()
+        ImGuiID tab_id = TabBarCalcTabID(tab_bar, label);
+        TabBarRemoveTab(tab_bar, tab_id);
+    }
+}
+
+ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)
+{
+    ImGuiContext& g = *GImGui;
+    ImVec2 label_size = CalcTextSize(label, NULL, true);
+    ImVec2 size = ImVec2(label_size.x + g.Style.FramePadding.x, label_size.y + g.Style.FramePadding.y * 2.0f);
+    if (has_close_button)
+        size.x += g.Style.FramePadding.x + (g.Style.ItemInnerSpacing.x + g.FontSize); // We use Y intentionally to fit the close button circle.
+    else
+        size.x += g.Style.FramePadding.x + 1.0f;
+    return ImVec2(ImMin(size.x, TabBarCalcMaxTabWidth()), size.y);
+}
+
+void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col)
+{
+    // While rendering tabs, we trim 1 pixel off the top of our bounding box so they can fit within a regular frame height while looking "detached" from it.
+    ImGuiContext& g = *GImGui;
+    const float width = bb.GetWidth();
+    IM_UNUSED(flags);
+    IM_ASSERT(width > 0.0f);
+    const float rounding = ImMax(0.0f, ImMin(g.Style.TabRounding, width * 0.5f - 1.0f));
+    const float y1 = bb.Min.y + 1.0f;
+    const float y2 = bb.Max.y - 1.0f;
+    draw_list->PathLineTo(ImVec2(bb.Min.x, y2));
+    draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9);
+    draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12);
+    draw_list->PathLineTo(ImVec2(bb.Max.x, y2));
+    draw_list->PathFillConvex(col);
+    if (g.Style.TabBorderSize > 0.0f)
+    {
+        draw_list->PathLineTo(ImVec2(bb.Min.x + 0.5f, y2));
+        draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9);
+        draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12);
+        draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2));
+        draw_list->PathStroke(GetColorU32(ImGuiCol_Border), false, g.Style.TabBorderSize);
+    }
+}
+
+// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic
+// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter.
+bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id)
+{
+    ImGuiContext& g = *GImGui;
+    ImVec2 label_size = CalcTextSize(label, NULL, true);
+    if (bb.GetWidth() <= 1.0f)
+        return false;
+
+    // Render text label (with clipping + alpha gradient) + unsaved marker
+    const char* TAB_UNSAVED_MARKER = "*";
+    ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y);
+    if (flags & ImGuiTabItemFlags_UnsavedDocument)
+    {
+        text_pixel_clip_bb.Max.x -= CalcTextSize(TAB_UNSAVED_MARKER, NULL, false).x;
+        ImVec2 unsaved_marker_pos(ImMin(bb.Min.x + frame_padding.x + label_size.x + 2, text_pixel_clip_bb.Max.x), bb.Min.y + frame_padding.y + IM_FLOOR(-g.FontSize * 0.25f));
+        RenderTextClippedEx(draw_list, unsaved_marker_pos, bb.Max - frame_padding, TAB_UNSAVED_MARKER, NULL, NULL);
+    }
+    ImRect text_ellipsis_clip_bb = text_pixel_clip_bb;
+
+    // Close Button
+    // We are relying on a subtle and confusing distinction between 'hovered' and 'g.HoveredId' which happens because we are using ImGuiButtonFlags_AllowOverlapMode + SetItemAllowOverlap()
+    //  'hovered' will be true when hovering the Tab but NOT when hovering the close button
+    //  'g.HoveredId==id' will be true when hovering the Tab including when hovering the close button
+    //  'g.ActiveId==close_button_id' will be true when we are holding on the close button, in which case both hovered booleans are false
+    bool close_button_pressed = false;
+    bool close_button_visible = false;
+    if (close_button_id != 0)
+        if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id)
+            close_button_visible = true;
+    if (close_button_visible)
+    {
+        ImGuiItemHoveredDataBackup last_item_backup;
+        const float close_button_sz = g.FontSize;
+        PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
+        if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y)))
+            close_button_pressed = true;
+        PopStyleVar();
+        last_item_backup.Restore();
+
+        // Close with middle mouse button
+        if (!(flags & ImGuiTabItemFlags_NoCloseWithMiddleMouseButton) && IsMouseClicked(2))
+            close_button_pressed = true;
+
+        text_pixel_clip_bb.Max.x -= close_button_sz;
+    }
+
+    float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f;
+    RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size);
+
+    return close_button_pressed;
+}
+
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
+// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system.
+//-------------------------------------------------------------------------
+// - GetColumnIndex()
+// - GetColumnCount()
+// - GetColumnOffset()
+// - GetColumnWidth()
+// - SetColumnOffset()
+// - SetColumnWidth()
+// - PushColumnClipRect() [Internal]
+// - PushColumnsBackground() [Internal]
+// - PopColumnsBackground() [Internal]
+// - FindOrCreateColumns() [Internal]
+// - GetColumnsID() [Internal]
+// - BeginColumns()
+// - NextColumn()
+// - EndColumns()
+// - Columns()
+//-------------------------------------------------------------------------
+
+int ImGui::GetColumnIndex()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CurrentColumns ? window->DC.CurrentColumns->Current : 0;
+}
+
+int ImGui::GetColumnsCount()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    return window->DC.CurrentColumns ? window->DC.CurrentColumns->Count : 1;
+}
+
+float ImGui::GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm)
+{
+    return offset_norm * (columns->OffMaxX - columns->OffMinX);
+}
+
+float ImGui::GetColumnNormFromOffset(const ImGuiColumns* columns, float offset)
+{
+    return offset / (columns->OffMaxX - columns->OffMinX);
+}
+
+static const float COLUMNS_HIT_RECT_HALF_WIDTH = 4.0f;
+
+static float GetDraggedColumnOffset(ImGuiColumns* columns, int column_index)
+{
+    // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
+    // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    IM_ASSERT(column_index > 0); // We are not supposed to drag column 0.
+    IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index));
+
+    float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + COLUMNS_HIT_RECT_HALF_WIDTH - window->Pos.x;
+    x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing);
+    if ((columns->Flags & ImGuiColumnsFlags_NoPreserveWidths))
+        x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing);
+
+    return x;
+}
+
+float ImGui::GetColumnOffset(int column_index)
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (columns == NULL)
+        return 0.0f;
+
+    if (column_index < 0)
+        column_index = columns->Current;
+    IM_ASSERT(column_index < columns->Columns.Size);
+
+    const float t = columns->Columns[column_index].OffsetNorm;
+    const float x_offset = ImLerp(columns->OffMinX, columns->OffMaxX, t);
+    return x_offset;
+}
+
+static float GetColumnWidthEx(ImGuiColumns* columns, int column_index, bool before_resize = false)
+{
+    if (column_index < 0)
+        column_index = columns->Current;
+
+    float offset_norm;
+    if (before_resize)
+        offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize;
+    else
+        offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm;
+    return ImGui::GetColumnOffsetFromNorm(columns, offset_norm);
+}
+
+float ImGui::GetColumnWidth(int column_index)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (columns == NULL)
+        return GetContentRegionAvail().x;
+
+    if (column_index < 0)
+        column_index = columns->Current;
+    return GetColumnOffsetFromNorm(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm);
+}
+
+void ImGui::SetColumnOffset(int column_index, float offset)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    IM_ASSERT(columns != NULL);
+
+    if (column_index < 0)
+        column_index = columns->Current;
+    IM_ASSERT(column_index < columns->Columns.Size);
+
+    const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1);
+    const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f;
+
+    if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
+        offset = ImMin(offset, columns->OffMaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index));
+    columns->Columns[column_index].OffsetNorm = GetColumnNormFromOffset(columns, offset - columns->OffMinX);
+
+    if (preserve_width)
+        SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
+}
+
+void ImGui::SetColumnWidth(int column_index, float width)
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    IM_ASSERT(columns != NULL);
+
+    if (column_index < 0)
+        column_index = columns->Current;
+    SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width);
+}
+
+void ImGui::PushColumnClipRect(int column_index)
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (column_index < 0)
+        column_index = columns->Current;
+
+    ImGuiColumnData* column = &columns->Columns[column_index];
+    PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
+}
+
+// Get into the columns background draw command (which is generally the same draw command as before we called BeginColumns)
+void ImGui::PushColumnsBackground()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (columns->Count == 1)
+        return;
+    columns->Splitter.SetCurrentChannel(window->DrawList, 0);
+    int cmd_size = window->DrawList->CmdBuffer.Size;
+    PushClipRect(columns->HostClipRect.Min, columns->HostClipRect.Max, false);
+    IM_UNUSED(cmd_size);
+    IM_ASSERT(cmd_size == window->DrawList->CmdBuffer.Size); // Being in channel 0 this should not have created an ImDrawCmd
+}
+
+void ImGui::PopColumnsBackground()
+{
+    ImGuiWindow* window = GetCurrentWindowRead();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (columns->Count == 1)
+        return;
+    columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
+    PopClipRect();
+}
+
+ImGuiColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID id)
+{
+    // We have few columns per window so for now we don't need bother much with turning this into a faster lookup.
+    for (int n = 0; n < window->ColumnsStorage.Size; n++)
+        if (window->ColumnsStorage[n].ID == id)
+            return &window->ColumnsStorage[n];
+
+    window->ColumnsStorage.push_back(ImGuiColumns());
+    ImGuiColumns* columns = &window->ColumnsStorage.back();
+    columns->ID = id;
+    return columns;
+}
+
+ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+
+    // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
+    // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
+    PushID(0x11223347 + (str_id ? 0 : columns_count));
+    ImGuiID id = window->GetID(str_id ? str_id : "columns");
+    PopID();
+
+    return id;
+}
+
+void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlags flags)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+
+    IM_ASSERT(columns_count >= 1 && columns_count <= 64);   // Maximum 64 columns
+    IM_ASSERT(window->DC.CurrentColumns == NULL);           // Nested columns are currently not supported
+
+    // Acquire storage for the columns set
+    ImGuiID id = GetColumnsID(str_id, columns_count);
+    ImGuiColumns* columns = FindOrCreateColumns(window, id);
+    IM_ASSERT(columns->ID == id);
+    columns->Current = 0;
+    columns->Count = columns_count;
+    columns->Flags = flags;
+    window->DC.CurrentColumns = columns;
+
+    columns->HostCursorPosY = window->DC.CursorPos.y;
+    columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x;
+    columns->HostClipRect = window->ClipRect;
+    columns->HostWorkRect = window->WorkRect;
+
+    // Set state for first column
+    // We aim so that the right-most column will have the same clipping width as other after being clipped by parent ClipRect
+    const float column_padding = g.Style.ItemSpacing.x;
+    const float half_clip_extend_x = ImFloor(ImMax(window->WindowPadding.x * 0.5f, window->WindowBorderSize));
+    const float max_1 = window->WorkRect.Max.x + column_padding - ImMax(column_padding - window->WindowPadding.x, 0.0f);
+    const float max_2 = window->WorkRect.Max.x + half_clip_extend_x;
+    columns->OffMinX = window->DC.Indent.x - column_padding + ImMax(column_padding - window->WindowPadding.x, 0.0f);
+    columns->OffMaxX = ImMax(ImMin(max_1, max_2) - window->Pos.x, columns->OffMinX + 1.0f);
+    columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y;
+
+    // Clear data if columns count changed
+    if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1)
+        columns->Columns.resize(0);
+
+    // Initialize default widths
+    columns->IsFirstFrame = (columns->Columns.Size == 0);
+    if (columns->Columns.Size == 0)
+    {
+        columns->Columns.reserve(columns_count + 1);
+        for (int n = 0; n < columns_count + 1; n++)
+        {
+            ImGuiColumnData column;
+            column.OffsetNorm = n / (float)columns_count;
+            columns->Columns.push_back(column);
+        }
+    }
+
+    for (int n = 0; n < columns_count; n++)
+    {
+        // Compute clipping rectangle
+        ImGuiColumnData* column = &columns->Columns[n];
+        float clip_x1 = IM_ROUND(window->Pos.x + GetColumnOffset(n));
+        float clip_x2 = IM_ROUND(window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
+        column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
+        column->ClipRect.ClipWith(window->ClipRect);
+    }
+
+    if (columns->Count > 1)
+    {
+        columns->Splitter.Split(window->DrawList, 1 + columns->Count);
+        columns->Splitter.SetCurrentChannel(window->DrawList, 1);
+        PushColumnClipRect(0);
+    }
+
+    // We don't generally store Indent.x inside ColumnsOffset because it may be manipulated by the user.
+    float offset_0 = GetColumnOffset(columns->Current);
+    float offset_1 = GetColumnOffset(columns->Current + 1);
+    float width = offset_1 - offset_0;
+    PushItemWidth(width * 0.65f);
+    window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+    window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::NextColumn()
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    if (window->SkipItems || window->DC.CurrentColumns == NULL)
+        return;
+
+    ImGuiContext& g = *GImGui;
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+
+    if (columns->Count == 1)
+    {
+        window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+        IM_ASSERT(columns->Current == 0);
+        return;
+    }
+    PopItemWidth();
+    PopClipRect();
+
+    const float column_padding = g.Style.ItemSpacing.x;
+    columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+    if (++columns->Current < columns->Count)
+    {
+        // Columns 1+ ignore IndentX (by canceling it out)
+        // FIXME-COLUMNS: Unnecessary, could be locked?
+        window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + column_padding;
+        columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
+    }
+    else
+    {
+        // New row/line
+        // Column 0 honor IndentX
+        window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+        columns->Splitter.SetCurrentChannel(window->DrawList, 1);
+        columns->Current = 0;
+        columns->LineMinY = columns->LineMaxY;
+    }
+    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+    window->DC.CursorPos.y = columns->LineMinY;
+    window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+    window->DC.CurrLineTextBaseOffset = 0.0f;
+
+    PushColumnClipRect(columns->Current);     // FIXME-COLUMNS: Could it be an overwrite?
+
+    // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup.
+    float offset_0 = GetColumnOffset(columns->Current);
+    float offset_1 = GetColumnOffset(columns->Current + 1);
+    float width = offset_1 - offset_0;
+    PushItemWidth(width * 0.65f);
+    window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::EndColumns()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = GetCurrentWindow();
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    IM_ASSERT(columns != NULL);
+
+    PopItemWidth();
+    if (columns->Count > 1)
+    {
+        PopClipRect();
+        columns->Splitter.Merge(window->DrawList);
+    }
+
+    const ImGuiColumnsFlags flags = columns->Flags;
+    columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+    window->DC.CursorPos.y = columns->LineMaxY;
+    if (!(flags & ImGuiColumnsFlags_GrowParentContentsSize))
+        window->DC.CursorMaxPos.x = columns->HostCursorMaxPosX;  // Restore cursor max pos, as columns don't grow parent
+
+    // Draw columns borders and handle resize
+    // The IsBeingResized flag ensure we preserve pre-resize columns width so back-and-forth are not lossy
+    bool is_being_resized = false;
+    if (!(flags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems)
+    {
+        // We clip Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.
+        const float y1 = ImMax(columns->HostCursorPosY, window->ClipRect.Min.y);
+        const float y2 = ImMin(window->DC.CursorPos.y, window->ClipRect.Max.y);
+        int dragging_column = -1;
+        for (int n = 1; n < columns->Count; n++)
+        {
+            ImGuiColumnData* column = &columns->Columns[n];
+            float x = window->Pos.x + GetColumnOffset(n);
+            const ImGuiID column_id = columns->ID + ImGuiID(n);
+            const float column_hit_hw = COLUMNS_HIT_RECT_HALF_WIDTH;
+            const ImRect column_hit_rect(ImVec2(x - column_hit_hw, y1), ImVec2(x + column_hit_hw, y2));
+            KeepAliveID(column_id);
+            if (IsClippedEx(column_hit_rect, column_id, false))
+                continue;
+
+            bool hovered = false, held = false;
+            if (!(flags & ImGuiColumnsFlags_NoResize))
+            {
+                ButtonBehavior(column_hit_rect, column_id, &hovered, &held);
+                if (hovered || held)
+                    g.MouseCursor = ImGuiMouseCursor_ResizeEW;
+                if (held && !(column->Flags & ImGuiColumnsFlags_NoResize))
+                    dragging_column = n;
+            }
+
+            // Draw column
+            const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+            const float xi = IM_FLOOR(x);
+            window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col);
+        }
+
+        // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
+        if (dragging_column != -1)
+        {
+            if (!columns->IsBeingResized)
+                for (int n = 0; n < columns->Count + 1; n++)
+                    columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm;
+            columns->IsBeingResized = is_being_resized = true;
+            float x = GetDraggedColumnOffset(columns, dragging_column);
+            SetColumnOffset(dragging_column, x);
+        }
+    }
+    columns->IsBeingResized = is_being_resized;
+
+    window->WorkRect = columns->HostWorkRect;
+    window->DC.CurrentColumns = NULL;
+    window->DC.ColumnsOffset.x = 0.0f;
+    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+}
+
+// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]
+void ImGui::Columns(int columns_count, const char* id, bool border)
+{
+    ImGuiWindow* window = GetCurrentWindow();
+    IM_ASSERT(columns_count >= 1);
+
+    ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder);
+    //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior
+    ImGuiColumns* columns = window->DC.CurrentColumns;
+    if (columns != NULL && columns->Count == columns_count && columns->Flags == flags)
+        return;
+
+    if (columns != NULL)
+        EndColumns();
+
+    if (columns_count != 1)
+        BeginColumns(id, columns_count, flags);
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTable, EndTable, etc.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typical call flow: (root level is public API):
+// - BeginTable()                               user begin into a table
+//    - BeginChild()                            - (if ScrollX/ScrollY is set)
+//    - TableBeginUpdateColumns()               - apply resize/order requests, lock columns active state, order
+// - TableSetupColumn()                         user submit columns details (optional)
+// - TableAutoHeaders() or TableHeader()        user submit a headers row (optional)
+//    - TableSortSpecsClickColumn()             - when clicked: alter sort order and sort direction
+// - TableGetSortSpecs()                        user queries updated sort specs (optional)
+// - TableNextRow() / TableNextCell()           user begin into the first row, also automatically called by TableAutoHeaders()
+//    - TableUpdateLayout()                     - called by the FIRST call to TableNextRow()!
+//      - TableUpdateDrawChannels()               - setup ImDrawList channels
+//      - TableUpdateBorders()                    - detect hovering columns for resize, ahead of contents submission
+//      - TableDrawContextMenu()                  - draw right-click context menu
+//    - TableEndCell()                          - close existing cell if not the first time
+//    - TableBeginCell()                        - enter into current cell
+// - [...]                                      user emit contents
+// - EndTable()                                 user ends the table
+//    - TableDrawBorders()                      - draw outer borders, inner vertical borders
+//    - TableDrawMergeChannels()                - merge draw channels if clipping isn't required
+//    - TableSetColumnWidth()                   - apply resizing width
+//      - TableUpdateColumnsWeightFromWidth()     - recompute columns weights (of weighted columns) from their respective width
+//      - EndChild()                              - (if ScrollX/ScrollY is set)
+//-----------------------------------------------------------------------------
+
+// Configuration
+static const float TABLE_RESIZE_SEPARATOR_HALF_THICKNESS = 4.0f;    // Extend outside inner borders.
+static const float TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER = 0.06f;   // Delay/timer before making the hover feedback (color+cursor) visible because tables/columns tends to be more cramped.
+
+// Helper
+inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags)
+{
+    // Adjust flags: set default sizing policy
+    if ((flags & ImGuiTableFlags_SizingPolicyMaskX_) == 0)
+        flags |= (flags & ImGuiTableFlags_ScrollX) ? ImGuiTableFlags_SizingPolicyFixedX : ImGuiTableFlags_SizingPolicyStretchX;
+
+    // Adjust flags: MultiSortable automatically enable Sortable
+    if (flags & ImGuiTableFlags_MultiSortable)
+        flags |= ImGuiTableFlags_Sortable;
+
+    // Adjust flags: disable saved settings if there's nothing to save
+    if ((flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Sortable)) == 0)
+        flags |= ImGuiTableFlags_NoSavedSettings;
+
+    // Adjust flags: enforce borders when resizable
+    if (flags & ImGuiTableFlags_Resizable)
+        flags |= ImGuiTableFlags_BordersVInner;
+
+    // Adjust flags: disable top rows freezing if there's no scrolling
+    // In theory we could want to assert if ScrollFreeze was set without the corresponding scroll flag, but that would hinder demos.
+    if ((flags & ImGuiTableFlags_ScrollX) == 0)
+        flags &= ~ImGuiTableFlags_ScrollFreezeColumnsMask_;
+    if ((flags & ImGuiTableFlags_ScrollY) == 0)
+        flags &= ~ImGuiTableFlags_ScrollFreezeRowsMask_;
+
+    // Adjust flags: disable NoHostExtendY if we have any scrolling going on
+    if ((flags & ImGuiTableFlags_NoHostExtendY) && (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0)
+        flags &= ~ImGuiTableFlags_NoHostExtendY;
+
+    // Adjust flags: we don't support NoClipX with (FreezeColumns > 0), we could with some work but it doesn't appear to be worth the effort
+    if (flags & ImGuiTableFlags_ScrollFreezeColumnsMask_)
+        flags &= ~ImGuiTableFlags_NoClipX;
+
+    return flags;
+}
+
+// About 'outer_size':
+//   The meaning of outer_size needs to differ slightly depending of if we are using ScrollX/ScrollY flags.
+//   With ScrollX/ScrollY: using a child window for scrolling:
+//   - outer_size.y < 0.0f  ->  bottom align
+//   - outer_size.y = 0.0f  ->  bottom align: consistent with BeginChild(), best to preserve (0,0) default arg
+//   - outer_size.y > 0.0f  ->  fixed child height
+//   Without scrolling, we output table directly in parent window:
+//   - outer_size.y < 0.0f  ->  bottom align (will auto extend, unless NoHostExtendV is set)
+//   - outer_size.y = 0.0f  ->  zero minimum height (will auto extend, unless NoHostExtendV is set)
+//   - outer_size.y > 0.0f  ->  minimum height (will auto extend, unless NoHostExtendV is set)
+// About: 'inner_width':
+//   With ScrollX:
+//   - inner_width  < 0.0f  ->  *illegal* fit in known width (right align from outer_size.x) <-- weird
+//   - inner_width  = 0.0f  ->  auto enlarge: *only* fixed size columns, which will take space they need (proportional columns becomes fixed columns) <-- desired default :(
+//   - inner_width  > 0.0f  ->  fit in known width: fixed column take space they need if possible (otherwise shrink down), proportional columns share remaining space.
+//   Without ScrollX:
+//   - inner_width  < 0.0f  ->  fit in known width (right align from outer_size.x) <-- desired default
+//   - inner_width  = 0.0f  ->  auto enlarge: will emit contents size in parent window
+//   - inner_width  > 0.0f  ->  fit in known width (bypass outer_size.x, permitted but not useful, should instead alter outer_width)
+// FIXME-TABLE: This is currently not very useful.
+// FIXME-TABLE: Replace enlarge vs fixed width by a flag.
+// Even if not really useful, we allow 'inner_scroll_width < outer_size.x' for consistency and to facilitate understanding of what the value does.
+bool    ImGui::BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
+{
+    ImGuiID id = GetID(str_id);
+    return BeginTableEx(str_id, id, columns_count, flags, outer_size, inner_width);
+}
+
+bool    ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* outer_window = GetCurrentWindow();
+    if (outer_window->SkipItems) // Consistent with other tables + beneficial side effect that assert on miscalling EndTable() will be more visible.
+        return false;
+
+    // Sanity checks
+    IM_ASSERT(columns_count > 0 && columns_count <= IMGUI_TABLE_MAX_COLUMNS && "Only 1..64 columns allowed!");
+    if (flags & ImGuiTableFlags_ScrollX)
+        IM_ASSERT(inner_width >= 0.0f);
+
+    const bool use_child_window = (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0;
+    const ImVec2 avail_size = GetContentRegionAvail();
+    ImVec2 actual_outer_size = CalcItemSize(outer_size, ImMax(avail_size.x, 1.0f), use_child_window ? ImMax(avail_size.y, 1.0f) : 0.0f);
+    ImRect outer_rect(outer_window->DC.CursorPos, outer_window->DC.CursorPos + actual_outer_size);
+
+    // If an outer size is specified ahead we will be able to early out when not visible. Exact clipping rules may evolve.
+    if (use_child_window && IsClippedEx(outer_rect, 0, false))
+    {
+        ItemSize(outer_rect);
+        return false;
+    }
+
+    flags = TableFixFlags(flags);
+    if (outer_window->Flags & ImGuiWindowFlags_NoSavedSettings)
+        flags |= ImGuiTableFlags_NoSavedSettings;
+
+    // Acquire storage for the table
+    ImGuiTable* table = g.Tables.GetOrAddByKey(id);
+    const ImGuiTableFlags table_last_flags = table->Flags;
+    const int instance_no = (table->LastFrameActive != g.FrameCount) ? 0 : table->InstanceNo + 1;
+    const ImGuiID instance_id = id + instance_no;
+    if (instance_no > 0)
+        IM_ASSERT(table->ColumnsCount == columns_count && "BeginTable(): Cannot change columns count mid-frame while preserving same ID");
+
+    // Initialize
+    table->ID = id;
+    table->Flags = flags;
+    table->InstanceNo = (ImS16)instance_no;
+    table->LastFrameActive = g.FrameCount;
+    table->OuterWindow = table->InnerWindow = outer_window;
+    table->ColumnsCount = columns_count;
+    table->ColumnsNames.Buf.resize(0);
+    table->IsInitializing = false;
+    table->IsLayoutLocked = false;
+    table->InnerWidth = inner_width;
+    table->OuterRect = outer_rect;
+    table->WorkRect = outer_rect;
+
+    if (use_child_window)
+    {
+        // Ensure no vertical scrollbar appears if we only want horizontal one, to make flag consistent (we have no other way to disable vertical scrollbar of a window while keeping the horizontal one showing)
+        ImVec2 override_content_size(FLT_MAX, FLT_MAX);
+        if ((flags & ImGuiTableFlags_ScrollX) && !(flags & ImGuiTableFlags_ScrollY))
+            override_content_size.y = FLT_MIN;
+
+        // Ensure specified width (when not specified, Stretched columns will act as if the width == OuterWidth and never lead to any scrolling)
+        // We don't handle inner_width < 0.0f, we could potentially use it to right-align based on the right side of the child window work rect,
+        // which would require knowing ahead if we are going to have decoration taking horizontal spaces (typically a vertical scrollbar).
+        if (inner_width != 0.0f)
+            override_content_size.x = inner_width;
+
+        if (override_content_size.x != FLT_MAX || override_content_size.y != FLT_MAX)
+            SetNextWindowContentSize(ImVec2(override_content_size.x != FLT_MAX ? override_content_size.x : 0.0f, override_content_size.y != FLT_MAX ? override_content_size.y : 0.0f));
+
+        // Create scrolling region (without border = zero window padding)
+        ImGuiWindowFlags child_flags = (flags & ImGuiTableFlags_ScrollX) ? ImGuiWindowFlags_HorizontalScrollbar : ImGuiWindowFlags_None;
+        BeginChildEx(name, instance_id, table->OuterRect.GetSize(), false, child_flags);
+        table->InnerWindow = g.CurrentWindow;
+        table->WorkRect = table->InnerWindow->WorkRect;
+        table->OuterRect = table->InnerWindow->Rect();
+    }
+    else
+    {
+        // WorkRect.Max will grow as we append contents.
+        PushID(instance_id);
+    }
+
+    // Backup a copy of host window members we will modify
+    ImGuiWindow* inner_window = table->InnerWindow;
+    table->HostIndentX = inner_window->DC.Indent.x;
+    table->HostClipRect = inner_window->ClipRect;
+    table->HostSkipItems = inner_window->SkipItems;
+    table->HostWorkRect = inner_window->WorkRect;
+    table->HostCursorMaxPos = inner_window->DC.CursorMaxPos;
+
+    // Borders
+    // - None               ........Content..... Pad .....Content........
+    // - VOuter             | Pad ..Content..... Pad .....Content.. Pad |       // FIXME-TABLE: Not handled properly
+    // - VInner             ........Content.. Pad | Pad ..Content........       // FIXME-TABLE: Not handled properly
+    // - VOuter+VInner      | Pad ..Content.. Pad | Pad ..Content.. Pad |
+
+    const bool has_cell_padding_x = (flags & ImGuiTableFlags_BordersVOuter) != 0;
+    table->CellPaddingX1 = has_cell_padding_x ? g.Style.CellPadding.x + 1.0f : 0.0f;
+    table->CellPaddingX2 = has_cell_padding_x ? g.Style.CellPadding.x : 0.0f;
+    table->CellPaddingY = g.Style.CellPadding.y;
+    table->CellSpacingX = has_cell_padding_x ? 0.0f : g.Style.CellPadding.x;
+
+    table->CurrentColumn = -1;
+    table->CurrentRow = -1;
+    table->RowBgColorCounter = 0;
+    table->LastRowFlags = ImGuiTableRowFlags_None;
+    table->InnerClipRect = (inner_window == outer_window) ? table->WorkRect : inner_window->ClipRect;
+    table->InnerClipRect.ClipWith(table->WorkRect);     // We need this to honor inner_width
+    table->InnerClipRect.ClipWith(table->HostClipRect);
+    table->InnerClipRect.Max.y = (flags & ImGuiTableFlags_NoHostExtendY) ? table->WorkRect.Max.y : inner_window->ClipRect.Max.y;
+    table->BackgroundClipRect = table->InnerClipRect;
+    table->RowPosY1 = table->RowPosY2 = table->WorkRect.Min.y; // This is needed somehow
+    table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
+    table->FreezeRowsRequest = (ImS8)((flags & ImGuiTableFlags_ScrollFreezeRowsMask_) >> ImGuiTableFlags_ScrollFreezeRowsShift_);
+    table->FreezeRowsCount = (inner_window->Scroll.y != 0.0f) ? table->FreezeRowsRequest : 0;
+    table->FreezeColumnsRequest = (ImS8)((flags & ImGuiTableFlags_ScrollFreezeColumnsMask_) >> ImGuiTableFlags_ScrollFreezeColumnsShift_);
+    table->FreezeColumnsCount = (inner_window->Scroll.x != 0.0f) ? table->FreezeColumnsRequest : 0;
+    table->IsFreezeRowsPassed = (table->FreezeRowsCount == 0);
+    table->DeclColumnsCount = 0;
+    table->HoveredColumnBody = -1;
+    table->HoveredColumnBorder = -1;
+    table->RightMostActiveColumn = -1;
+
+    // Using opaque colors facilitate overlapping elements of the grid
+    table->BorderColorStrong = GetColorU32(ImGuiCol_TableBorderStrong);
+    table->BorderColorLight = GetColorU32(ImGuiCol_TableBorderLight);
+    table->BorderX1 = table->InnerClipRect.Min.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : -1.0f);
+    table->BorderX2 = table->InnerClipRect.Max.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : +1.0f);
+
+    // Make table current
+    g.CurrentTableStack.push_back(ImGuiPtrOrIndex(g.Tables.GetIndex(table)));
+    g.CurrentTable = table;
+    outer_window->DC.CurrentTable = table;
+    if ((table_last_flags & ImGuiTableFlags_Reorderable) && !(flags & ImGuiTableFlags_Reorderable))
+        table->IsResetDisplayOrderRequest = true;
+
+    // Setup default columns state. Clear data if columns count changed
+    const int stored_size = table->Columns.size();
+    if (stored_size != 0 && stored_size != columns_count)
+        table->RawData.resize(0);
+    if (table->RawData.Size == 0)
+    {
+        // Allocate single buffer for our arrays
+        ImSpanAllocator<2> span_allocator;
+        span_allocator.ReserveBytes(0, columns_count * sizeof(ImGuiTableColumn));
+        span_allocator.ReserveBytes(1, columns_count * sizeof(ImS8));
+        table->RawData.resize(span_allocator.GetArenaSizeInBytes());
+        span_allocator.SetArenaBasePtr(table->RawData.Data);
+        span_allocator.GetSpan(0, &table->Columns);
+        span_allocator.GetSpan(1, &table->DisplayOrderToIndex);
+
+        for (int n = 0; n < columns_count; n++)
+        {
+            table->Columns[n] = ImGuiTableColumn();
+            table->Columns[n].DisplayOrder = table->DisplayOrderToIndex[n] = (ImS8)n;
+        }
+        table->IsInitializing = table->IsSettingsRequestLoad = table->IsSortSpecsDirty = true;
+    }
+
+    // Load settings
+    if (table->IsSettingsRequestLoad)
+        TableLoadSettings(table);
+
+    // Disable output until user calls TableNextRow() or TableNextCell() leading to the TableUpdateLayout() call..
+    // This is not strictly necessary but will reduce cases were misleading "out of table" output will be confusing to the user.
+    // Because we cannot safely assert in EndTable() when no rows have been created, this seems like our best option.
+    inner_window->SkipItems = true;
+
+    // Update/lock which columns will be Active for the frame
+    TableBeginUpdateColumns(table);
+
+    return true;
+}
+
+void ImGui::TableBeginUpdateColumns(ImGuiTable* table)
+{
+    // Handle resizing request
+    // (We process this at the first TableBegin of the frame)
+    // FIXME-TABLE: Preserve contents width _while resizing down_ until releasing.
+    // FIXME-TABLE: Contains columns if our work area doesn't allow for scrolling.
+    if (table->InstanceNo == 0)
+    {
+        if (table->ResizedColumn != -1 && table->ResizedColumnNextWidth != FLT_MAX)
+            TableSetColumnWidth(table, &table->Columns[table->ResizedColumn], table->ResizedColumnNextWidth);
+        table->LastResizedColumn = table->ResizedColumn;
+        table->ResizedColumnNextWidth = FLT_MAX;
+        table->ResizedColumn = -1;
+    }
+
+    // Handle reordering request
+    // Note: we don't clear ReorderColumn after handling the request.
+    if (table->InstanceNo == 0)
+    {
+        if (table->HeldHeaderColumn == -1 && table->ReorderColumn != -1)
+            table->ReorderColumn = -1;
+        table->HeldHeaderColumn = -1;
+        if (table->ReorderColumn != -1 && table->ReorderColumnDir != 0)
+        {
+            // We need to handle reordering across hidden columns.
+            // In the configuration below, moving C to the right of E will lead to:
+            //    ... C [D] E  --->  ... [D] E  C   (Column name/index)
+            //    ... 2  3  4        ...  2  3  4   (Display order)
+            const int reorder_dir = table->ReorderColumnDir;
+            IM_ASSERT(reorder_dir == -1 || reorder_dir == +1);
+            IM_ASSERT(table->Flags & ImGuiTableFlags_Reorderable);
+            ImGuiTableColumn* src_column = &table->Columns[table->ReorderColumn];
+            ImGuiTableColumn* dst_column = &table->Columns[(reorder_dir == -1) ? src_column->PrevActiveColumn : src_column->NextActiveColumn];
+            IM_UNUSED(dst_column);
+            const int src_order = src_column->DisplayOrder;
+            const int dst_order = dst_column->DisplayOrder;
+            src_column->DisplayOrder = (ImS8)dst_order;
+            for (int order_n = src_order + reorder_dir; order_n != dst_order + reorder_dir; order_n += reorder_dir)
+                table->Columns[table->DisplayOrderToIndex[order_n]].DisplayOrder -= (ImS8)reorder_dir;
+            IM_ASSERT(dst_column->DisplayOrder == dst_order - reorder_dir);
+
+            // Display order is stored in both columns->IndexDisplayOrder and table->DisplayOrder[], rebuild the later from the former.
+            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+                table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImS8)column_n;
+            table->ReorderColumnDir = 0;
+            table->IsSettingsDirty = true;
+        }
+    }
+
+    // Handle display order reset request
+    if (table->IsResetDisplayOrderRequest)
+    {
+        for (int n = 0; n < table->ColumnsCount; n++)
+            table->DisplayOrderToIndex[n] = table->Columns[n].DisplayOrder = (ImS8)n;
+        table->IsResetDisplayOrderRequest = false;
+        table->IsSettingsDirty = true;
+    }
+
+    // Setup and lock Active state and order
+    table->ColumnsActiveCount = 0;
+    table->IsDefaultDisplayOrder = true;
+    ImGuiTableColumn* last_active_column = NULL;
+    bool want_column_auto_fit = false;
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        const int column_n = table->DisplayOrderToIndex[order_n];
+        if (column_n != order_n)
+            table->IsDefaultDisplayOrder = false;
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        column->NameOffset = -1;
+        if (!(table->Flags & ImGuiTableFlags_Hideable) || (column->Flags & ImGuiTableColumnFlags_NoHide))
+            column->IsActiveNextFrame = true;
+        if (column->IsActive != column->IsActiveNextFrame)
+        {
+            column->IsActive = column->IsActiveNextFrame;
+            table->IsSettingsDirty = true;
+            if (!column->IsActive && column->SortOrder != -1)
+                table->IsSortSpecsDirty = true;
+        }
+        if (column->SortOrder > 0 && !(table->Flags & ImGuiTableFlags_MultiSortable))
+            table->IsSortSpecsDirty = true;
+        if (column->AutoFitQueue != 0x00)
+            want_column_auto_fit = true;
+
+        ImU64 index_mask = (ImU64)1 << column_n;
+        ImU64 display_order_mask = (ImU64)1 << column->DisplayOrder;
+        if (column->IsActive)
+        {
+            column->PrevActiveColumn = column->NextActiveColumn = -1;
+            if (last_active_column)
+            {
+                last_active_column->NextActiveColumn = (ImS8)column_n;
+                column->PrevActiveColumn = (ImS8)table->Columns.index_from_ptr(last_active_column);
+            }
+            column->IndexWithinActiveSet = (ImS8)table->ColumnsActiveCount;
+            table->ColumnsActiveCount++;
+            table->ActiveMaskByIndex |= index_mask;
+            table->ActiveMaskByDisplayOrder |= display_order_mask;
+            last_active_column = column;
+        }
+        else
+        {
+            column->IndexWithinActiveSet = -1;
+            table->ActiveMaskByIndex &= ~index_mask;
+            table->ActiveMaskByDisplayOrder &= ~display_order_mask;
+        }
+        IM_ASSERT(column->IndexWithinActiveSet <= column->DisplayOrder);
+    }
+    table->VisibleMaskByIndex = table->ActiveMaskByIndex; // Columns will be masked out by TableUpdateLayout() when Clipped
+    table->RightMostActiveColumn = (ImS8)(last_active_column ? table->Columns.index_from_ptr(last_active_column) : -1);
+
+    // Disable child window clipping while fitting columns. This is not strictly necessary but makes it possible to avoid
+    // the column fitting to wait until the first visible frame of the child container (may or not be a good thing).
+    if (want_column_auto_fit && table->OuterWindow != table->InnerWindow)
+        table->InnerWindow->SkipItems = false;
+}
+
+void ImGui::TableUpdateDrawChannels(ImGuiTable* table)
+{
+    // Allocate draw channels.
+    // - We allocate them following the storage order instead of the display order so reordering columns won't needlessly increase overall dormant memory cost.
+    // - We isolate headers draw commands in their own channels instead of just altering clip rects. This is in order to facilitate merging of draw commands.
+    // - After crossing FreezeRowsCount, all columns see their current draw channel changed to a second set of draw channels.
+    // - We only use the dummy draw channel so we can push a null clipping rectangle into it without affecting other channels, while simplifying per-row/per-cell overhead. It will be empty and discarded when merged.
+    // Draw channel allocation (before merging):
+    // - NoClip                       --> 1+1 channels: background + foreground (same clip rect == 1 draw call)
+    // - Clip                         --> 1+N channels
+    // - FreezeRows || FreezeColumns  --> 1+N*2 (unless scrolling value is zero)
+    // - FreezeRows && FreezeColunns  --> 2+N*2 (unless scrolling value is zero)
+    const int freeze_row_multiplier = (table->FreezeRowsCount > 0) ? 2 : 1;
+    const int channels_for_row = (table->Flags & ImGuiTableFlags_NoClipX) ? 1 : table->ColumnsActiveCount;
+    const int channels_for_background = 1;
+    const int channels_for_dummy = (table->ColumnsActiveCount < table->ColumnsCount || table->VisibleMaskByIndex != table->ActiveMaskByIndex) ? +1 : 0;
+    const int channels_total = channels_for_background + (channels_for_row * freeze_row_multiplier) + channels_for_dummy;
+    table->DrawSplitter.Split(table->InnerWindow->DrawList, channels_total);
+    table->DummyDrawChannel = channels_for_dummy ? (ImS8)(channels_total - 1) : -1;
+
+    int draw_channel_current = 1;
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        if (!column->IsClipped)
+        {
+            column->DrawChannelRowsBeforeFreeze = (ImS8)(draw_channel_current);
+            column->DrawChannelRowsAfterFreeze = (ImS8)(draw_channel_current + (table->FreezeRowsCount > 0 ? channels_for_row : 0));
+            if (!(table->Flags & ImGuiTableFlags_NoClipX))
+                draw_channel_current++;
+        }
+        else
+        {
+            column->DrawChannelRowsBeforeFreeze = column->DrawChannelRowsAfterFreeze = table->DummyDrawChannel;
+        }
+        column->DrawChannelCurrent = column->DrawChannelRowsBeforeFreeze;
+    }
+}
+
+// Adjust flags: default width mode + weighted columns are not allowed when auto extending
+static ImGuiTableColumnFlags TableFixColumnFlags(ImGuiTable* table, ImGuiTableColumnFlags flags)
+{
+    // Sizing Policy
+    if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0)
+    {
+        // FIXME-TABLE: Inconsistent to promote columns to WidthAlwaysAutoResize
+        if (table->Flags & ImGuiTableFlags_SizingPolicyFixedX)
+            flags |= ((table->Flags & ImGuiTableFlags_Resizable) && !(flags & ImGuiTableColumnFlags_NoResize)) ? ImGuiTableColumnFlags_WidthFixed : ImGuiTableColumnFlags_WidthAlwaysAutoResize;
+        else
+            flags |= ImGuiTableColumnFlags_WidthStretch;
+    }
+    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_WidthMask_)); // Check that only 1 of each set is used.
+    if ((flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize))// || ((flags & ImGuiTableColumnFlags_WidthStretch) && (table->Flags & ImGuiTableFlags_SizingPolicyStretchX)))
+        flags |= ImGuiTableColumnFlags_NoResize;
+    //if ((flags & ImGuiTableColumnFlags_WidthStretch) && (table->Flags & ImGuiTableFlags_SizingPolicyFixedX))
+    //    flags = (flags & ~ImGuiTableColumnFlags_WidthMask_) | ImGuiTableColumnFlags_WidthFixed;
+
+    // Sorting
+    if ((flags & ImGuiTableColumnFlags_NoSortAscending) && (flags & ImGuiTableColumnFlags_NoSortDescending))
+        flags |= ImGuiTableColumnFlags_NoSort;
+
+    // Alignment
+    //if ((flags & ImGuiTableColumnFlags_AlignMask_) == 0)
+    //    flags |= ImGuiTableColumnFlags_AlignCenter;
+    //IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_AlignMask_)); // Check that only 1 of each set is used.
+
+    return flags;
+}
+
+static void TableFixColumnSortDirection(ImGuiTableColumn* column)
+{
+    // Handle NoSortAscending/NoSortDescending
+    if (column->SortDirection == ImGuiSortDirection_Ascending && (column->Flags & ImGuiTableColumnFlags_NoSortAscending))
+        column->SortDirection = ImGuiSortDirection_Descending;
+    else if (column->SortDirection == ImGuiSortDirection_Descending && (column->Flags & ImGuiTableColumnFlags_NoSortDescending))
+        column->SortDirection = ImGuiSortDirection_Ascending;
+}
+
+static float TableGetMinColumnWidth()
+{
+    ImGuiContext& g = *GImGui;
+    // return g.Style.ColumnsMinSpacing;
+    return g.Style.FramePadding.x * 3.0f;
+}
+
+// Layout columns for the frame
+// Runs on the first call to TableNextRow(), to give a chance for TableSetupColumn() to be called first.
+// FIXME-TABLE: Our width (and therefore our WorkRect) will be minimal in the first frame for WidthAlwaysAutoResize columns,
+// increase feedback side-effect with widgets relying on WorkRect.Max.x. Maybe provide a default distribution for WidthAlwaysAutoResize columns?
+void    ImGui::TableUpdateLayout(ImGuiTable* table)
+{
+    IM_ASSERT(table->IsLayoutLocked == false);
+
+    // Compute offset, clip rect for the frame
+    const ImRect work_rect = table->WorkRect;
+    const float padding_auto_x = table->CellPaddingX2; // Can't make auto padding larger than what WorkRect knows about so right-alignment matches.
+    const float min_column_width = TableGetMinColumnWidth();
+
+    int count_fixed = 0;
+    float width_fixed = 0.0f;
+    float total_weights = 0.0f;
+    table->LeftMostStretchedColumnDisplayOrder = -1;
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+            continue;
+        const int column_n = table->DisplayOrderToIndex[order_n];
+        ImGuiTableColumn* column = &table->Columns[column_n];
+
+        // Adjust flags: default width mode + weighted columns are not allowed when auto extending
+        // FIXME-TABLE: Clarify why we need to do this again here and not just in TableSetupColumn()
+        column->Flags = TableFixColumnFlags(table, column->FlagsIn);
+        if ((column->Flags & ImGuiTableColumnFlags_IndentMask_) == 0)
+            column->Flags |= (column_n == 0) ? ImGuiTableColumnFlags_IndentEnable : ImGuiTableColumnFlags_IndentDisable;
+
+        // We have a unusual edge case where if the user doesn't call TableGetSortSpecs() but has sorting enabled
+        // or varying sorting flags, we still want the sorting arrows to honor those flags.
+        if (table->Flags & ImGuiTableFlags_Sortable)
+            TableFixColumnSortDirection(column);
+
+        if (column->Flags & (ImGuiTableColumnFlags_WidthAlwaysAutoResize | ImGuiTableColumnFlags_WidthFixed))
+        {
+            // Latch initial size for fixed columns
+            count_fixed += 1;
+            const bool init_size = (column->AutoFitQueue != 0x00) || (column->Flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize);
+            if (init_size)
+            {
+                // Combine width from regular rows + width from headers unless requested not to
+                float width_request = (float)ImMax(column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen);
+                if (!(table->Flags & ImGuiTableFlags_NoHeadersWidth) && !(column->Flags & ImGuiTableColumnFlags_NoHeaderWidth))
+                    width_request = ImMax(width_request, (float)column->ContentWidthHeadersDesired);
+                column->WidthRequested = ImMax(width_request + padding_auto_x, min_column_width);
+
+                // FIXME-TABLE: Increase minimum size during init frame to avoid biasing auto-fitting widgets (e.g. TextWrapped) too much.
+                // Otherwise what tends to happen is that TextWrapped would output a very large height (= first frame scrollbar display very off + clipper would skip lots of items)
+                // This is merely making the side-effect less extreme, but doesn't properly fixes it.
+                if (column->AutoFitQueue > 0x01 && table->IsInitializing)
+                    column->WidthRequested = ImMax(column->WidthRequested, min_column_width * 4.0f);
+            }
+            width_fixed += column->WidthRequested;
+        }
+        else
+        {
+            IM_ASSERT(column->Flags & ImGuiTableColumnFlags_WidthStretch);
+            const int init_size = (column->ResizeWeight < 0.0f);
+            if (init_size)
+                column->ResizeWeight = 1.0f;
+            total_weights += column->ResizeWeight;
+            if (table->LeftMostStretchedColumnDisplayOrder == -1)
+                table->LeftMostStretchedColumnDisplayOrder = (ImS8)column->DisplayOrder;
+        }
+    }
+
+    // Layout
+    // Remove -1.0f to cancel out the +1.0f we are doing in EndTable() to make last column line visible
+    const float width_spacings = table->CellSpacingX * (table->ColumnsActiveCount - 1);
+    float width_avail;
+    if ((table->Flags & ImGuiTableFlags_ScrollX) && (table->InnerWidth == 0.0f))
+        width_avail = table->InnerClipRect.GetWidth() - width_spacings - 1.0f;
+    else
+        width_avail = work_rect.GetWidth() - width_spacings - 1.0f;
+    const float width_avail_for_stretched_columns = width_avail - width_fixed;
+    float width_remaining_for_stretched_columns = width_avail_for_stretched_columns;
+
+    // Apply final width based on requested widths
+    // Mark some columns as not resizable
+    int count_resizable = 0;
+    table->ColumnsTotalWidth = width_spacings;
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+            continue;
+        ImGuiTableColumn* column = &table->Columns[table->DisplayOrderToIndex[order_n]];
+
+        // Allocate width for stretched/weighted columns
+        if (column->Flags & ImGuiTableColumnFlags_WidthStretch)
+        {
+            float weight_ratio = column->ResizeWeight / total_weights;
+            column->WidthRequested = IM_FLOOR(ImMax(width_avail_for_stretched_columns * weight_ratio, min_column_width) + 0.01f);
+            width_remaining_for_stretched_columns -= column->WidthRequested;
+
+            // [Resize Rule 2] Resizing from right-side of a weighted column before a fixed column froward sizing to left-side of fixed column
+            // We also need to copy the NoResize flag..
+            if (column->NextActiveColumn != -1)
+                if (ImGuiTableColumn* next_column = &table->Columns[column->NextActiveColumn])
+                    if (next_column->Flags & ImGuiTableColumnFlags_WidthFixed)
+                        column->Flags |= (next_column->Flags & ImGuiTableColumnFlags_NoDirectResize_);
+        }
+
+        // [Resize Rule 1] The right-most active column is not resizable if there is at least one Stretch column (see comments in TableResizeColumn().)
+        if (column->NextActiveColumn == -1 && table->LeftMostStretchedColumnDisplayOrder != -1)
+            column->Flags |= ImGuiTableColumnFlags_NoDirectResize_;
+
+        if (!(column->Flags & ImGuiTableColumnFlags_NoResize))
+            count_resizable++;
+
+        // Assign final width, record width in case we will need to shrink
+        column->WidthGiven = ImFloor(ImMax(column->WidthRequested, min_column_width));
+        table->ColumnsTotalWidth += column->WidthGiven;
+    }
+
+#if 0
+    const float width_excess = table->ColumnsTotalWidth - work_rect.GetWidth();
+    if ((table->Flags & ImGuiTableFlags_SizingPolicyStretchX) && width_excess > 0.0f)
+    {
+        // Shrink widths when the total does not fit
+        // FIXME-TABLE: This is working but confuses/conflicts with manual resizing.
+        // FIXME-TABLE: Policy to shrink down below below ideal/requested width if there's no room?
+        g.ShrinkWidthBuffer.resize(table->ColumnsActiveCount);
+        for (int order_n = 0, active_n = 0; order_n < table->ColumnsCount; order_n++)
+        {
+            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+                continue;
+            const int column_n = table->DisplayOrder[order_n];
+            g.ShrinkWidthBuffer[active_n].Index = column_n;
+            g.ShrinkWidthBuffer[active_n].Width = table->Columns[column_n].WidthGiven;
+            active_n++;
+        }
+        ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess);
+        for (int n = 0; n < g.ShrinkWidthBuffer.Size; n++)
+            table->Columns[g.ShrinkWidthBuffer.Data[n].Index].WidthGiven = ImMax(g.ShrinkWidthBuffer.Data[n].Width, min_column_size);
+        // FIXME: Need to alter table->ColumnsTotalWidth
+    }
+    else
+#endif
+
+    // Redistribute remainder width due to rounding (remainder width is < 1.0f * number of Stretch column)
+    // Using right-to-left distribution (more likely to match resizing cursor), could be adjusted depending where the mouse cursor is and/or relative weights.
+    // FIXME-TABLE: May be simpler to store floating width and floor final positions only
+    // FIXME-TABLE: Make it optional? User might prefer to preserve pixel perfect same size?
+    if (width_remaining_for_stretched_columns >= 1.0f)
+        for (int order_n = table->ColumnsCount - 1; total_weights > 0.0f && width_remaining_for_stretched_columns >= 1.0f && order_n >= 0; order_n--)
+        {
+            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+                continue;
+            ImGuiTableColumn* column = &table->Columns[table->DisplayOrderToIndex[order_n]];
+            if (!(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+                continue;
+            column->WidthRequested += 1.0f;
+            column->WidthGiven += 1.0f;
+            width_remaining_for_stretched_columns -= 1.0f;
+        }
+
+    // Setup final position, offset and clipping rectangles
+    int active_n = 0;
+    float offset_x = (table->FreezeColumnsCount > 0) ? table->OuterRect.Min.x : work_rect.Min.x;
+    ImRect host_clip_rect = table->InnerClipRect;
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        const int column_n = table->DisplayOrderToIndex[order_n];
+        ImGuiTableColumn* column = &table->Columns[column_n];
+
+        if (table->FreezeColumnsCount > 0 && table->FreezeColumnsCount == active_n)
+            offset_x += work_rect.Min.x - table->OuterRect.Min.x;
+
+        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+        {
+            // Hidden column: clear a few fields and we are done with it for the remainder of the function.
+            // We set a zero-width clip rect however we pay attention to set Min.y/Max.y properly to not interfere with the clipper.
+            column->MinX = column->MaxX = offset_x;
+            column->StartXRows = column->StartXHeaders = offset_x;
+            column->WidthGiven = 0.0f;
+            column->ClipRect.Min.x = offset_x;
+            column->ClipRect.Min.y = work_rect.Min.y;
+            column->ClipRect.Max.x = offset_x;
+            column->ClipRect.Max.y = FLT_MAX;
+            column->ClipRect.ClipWithFull(host_clip_rect);
+            column->IsClipped = column->SkipItems = true;
+            continue;
+        }
+
+        float max_x = FLT_MAX;
+        if (table->Flags & ImGuiTableFlags_ScrollX)
+        {
+            // Frozen columns can't reach beyond visible width else scrolling will naturally break.
+            if (order_n < table->FreezeColumnsRequest)
+                max_x = table->InnerClipRect.Max.x - (table->FreezeColumnsRequest - order_n) * min_column_width;
+        }
+        else
+        {
+            // If horizontal scrolling if disabled, we apply a final lossless shrinking of columns in order to make sure they are all visible.
+            // Because of this we also know that all of the columns will always fit in table->WorkRect and therefore in table->InnerRect (because ScrollX is off)
+            if (!(table->Flags & ImGuiTableFlags_NoKeepColumnsVisible))
+                max_x = table->WorkRect.Max.x - (table->ColumnsActiveCount - (column->IndexWithinActiveSet + 1)) * min_column_width;
+        }
+        if (offset_x + column->WidthGiven > max_x)
+            column->WidthGiven = ImMax(max_x - offset_x, min_column_width);
+
+        column->MinX = offset_x;
+        column->MaxX = column->MinX + column->WidthGiven;
+
+        //// A one pixel padding on the right side makes clipping more noticeable and contents look less cramped.
+        column->ClipRect.Min.x = column->MinX;
+        column->ClipRect.Min.y = work_rect.Min.y;
+        column->ClipRect.Max.x = column->MaxX;// -1.0f;
+        column->ClipRect.Max.y = FLT_MAX;
+        column->ClipRect.ClipWithFull(host_clip_rect);
+
+        column->IsClipped = (column->ClipRect.Max.x <= column->ClipRect.Min.x) && (column->AutoFitQueue & 1) == 0 && (column->CannotSkipItemsQueue & 1) == 0;
+        column->SkipItems = column->IsClipped || table->HostSkipItems;
+        if (column->IsClipped)
+        {
+            // Columns with the _WidthAlwaysAutoResize sizing policy will never be updated then.
+            table->VisibleMaskByIndex &= ~((ImU64)1 << column_n);
+        }
+        else
+        {
+            // Starting cursor position
+            column->StartXRows = column->StartXHeaders = column->MinX + table->CellPaddingX1;
+
+            // Alignment
+            // FIXME-TABLE: This align based on the whole column width, not per-cell, and therefore isn't useful in many cases.
+            // (To be able to honor this we might be able to store a log of cells width, per row, for visible rows, but nav/programmatic scroll would have visible artifacts.)
+            //if (column->Flags & ImGuiTableColumnFlags_AlignRight)
+            //    column->StartXRows = ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen);
+            //else if (column->Flags & ImGuiTableColumnFlags_AlignCenter)
+            //    column->StartXRows = ImLerp(column->StartXRows, ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f);
+
+            // Reset content width variables
+            const float initial_max_pos_x = column->MinX + table->CellPaddingX1;
+            column->ContentMaxPosRowsFrozen = column->ContentMaxPosRowsUnfrozen = initial_max_pos_x;
+            column->ContentMaxPosHeadersUsed = column->ContentMaxPosHeadersDesired = initial_max_pos_x;
+        }
+
+        // Don't decrement auto-fit counters until container window got a chance to submit its items
+        if (table->HostSkipItems == false)
+        {
+            column->AutoFitQueue >>= 1;
+            column->CannotSkipItemsQueue >>= 1;
+        }
+
+        if (active_n < table->FreezeColumnsCount)
+            host_clip_rect.Min.x = ImMax(host_clip_rect.Min.x, column->MaxX + 2.0f);
+
+        offset_x += column->WidthGiven + table->CellSpacingX;
+        active_n++;
+    }
+
+    // Clear Resizable flag if none of our column are actually resizable (either via an explicit _NoResize flag, either because of using _WidthAlwaysAutoResize/_WidthStretch)
+    // This will hide the resizing option from the context menu.
+    if (count_resizable == 0 && (table->Flags & ImGuiTableFlags_Resizable))
+        table->Flags &= ~ImGuiTableFlags_Resizable;
+
+    // Allocate draw channels
+    TableUpdateDrawChannels(table);
+
+    // Borders
+    if (table->Flags & ImGuiTableFlags_Resizable)
+        TableUpdateBorders(table);
+
+    // Reset fields after we used them in TableSetupResize()
+    table->LastFirstRowHeight = 0.0f;
+    table->IsLayoutLocked = true;
+    table->IsUsingHeaders = false;
+
+    // Context menu
+    if (table->IsContextPopupOpen && table->InstanceNo == table->InstanceInteracted)
+    {
+        if (BeginPopup("##TableContextMenu"))
+        {
+            TableDrawContextMenu(table, table->ContextPopupColumn);
+            EndPopup();
+        }
+        else
+        {
+            table->IsContextPopupOpen = false;
+        }
+    }
+
+    // Initial state
+    ImGuiWindow* inner_window = table->InnerWindow;
+    if (table->Flags & ImGuiTableFlags_NoClipX)
+        table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 1);
+    else
+        inner_window->DrawList->PushClipRect(inner_window->ClipRect.Min, inner_window->ClipRect.Max, false);
+}
+
+// Process interaction on resizing borders. Actual size change will be applied in EndTable()
+// - Set table->HoveredColumnBorder with a short delay/timer to reduce feedback noise
+// - Submit ahead of table contents and header, use ImGuiButtonFlags_AllowItemOverlap to prioritize widgets overlapping the same area.
+void    ImGui::TableUpdateBorders(ImGuiTable* table)
+{
+    ImGuiContext& g = *GImGui;
+    IM_ASSERT(table->Flags & ImGuiTableFlags_Resizable);
+
+    // At this point OuterRect height may be zero or under actual final height, so we rely on temporal coherency and use
+    // the final height from last frame. Because this is only affecting _interaction_ with columns, it is not really problematic.
+    // (whereas the actual visual will be displayed in EndTable() and using the current frame height)
+    // Actual columns highlight/render will be performed in EndTable() and not be affected.
+    const bool borders_full_height = (table->IsUsingHeaders == false) || (table->Flags & ImGuiTableFlags_BordersVFullHeight);
+    const float hit_half_width = TABLE_RESIZE_SEPARATOR_HALF_THICKNESS;
+    const float hit_y1 = table->OuterRect.Min.y;
+    const float hit_y2_full = ImMax(table->OuterRect.Max.y, hit_y1 + table->LastOuterHeight);
+    const float hit_y2 = borders_full_height ? hit_y2_full : (hit_y1 + table->LastFirstRowHeight);
+    const float mouse_x_hover_body = (g.IO.MousePos.y >= hit_y1 && g.IO.MousePos.y < hit_y2_full) ? g.IO.MousePos.x : FLT_MAX;
+
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+            continue;
+
+        const int column_n = table->DisplayOrderToIndex[order_n];
+        ImGuiTableColumn* column = &table->Columns[column_n];
+
+        // Detect hovered column:
+        // - we perform an unusually low-level check here.. not using IsMouseHoveringRect() to avoid touch padding.
+        // - we don't care about the full set of IsItemHovered() feature either.
+        if (mouse_x_hover_body >= column->MinX && mouse_x_hover_body < column->MaxX)
+            table->HoveredColumnBody = (ImS8)column_n;
+
+        if (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_))
+            continue;
+
+        ImGuiID column_id = table->ID + (table->InstanceNo * table->ColumnsCount) + column_n;
+        ImRect hit_rect(column->MaxX - hit_half_width, hit_y1, column->MaxX + hit_half_width, hit_y2);
+        //GetForegroundDrawList()->AddRect(hit_rect.Min, hit_rect.Max, IM_COL32(255, 0, 0, 100));
+        KeepAliveID(column_id);
+
+        bool hovered = false, held = false;
+        bool pressed = ButtonBehavior(hit_rect, column_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick);
+        if (pressed && IsMouseDoubleClicked(0) && !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+        {
+            // FIXME-TABLE: Double-clicking on column edge could auto-fit weighted column?
+            TableSetColumnAutofit(table, column_n);
+            ClearActiveID();
+            held = hovered = false;
+        }
+        if (held)
+        {
+            table->ResizedColumn = (ImS8)column_n;
+            table->InstanceInteracted = table->InstanceNo;
+        }
+        if ((hovered && g.HoveredIdTimer > TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER) || held)
+        {
+            table->HoveredColumnBorder = (ImS8)column_n;
+            SetMouseCursor(ImGuiMouseCursor_ResizeEW);
+        }
+    }
+}
+
+void    ImGui::EndTable()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL && "Only call EndTable() if BeginTable() returns true!");
+
+    // This assert would be very useful to catch a common error... unfortunately it would probably trigger in some cases,
+    // and for consistency user may sometimes output empty tables (and still benefit from e.g. outer border)
+    //IM_ASSERT(table->IsLayoutLocked && "Table unused: never called TableNextRow(), is that the intent?");
+
+    // If the user never got to call TableNextRow() or TableNextCell(), we call layout ourselves to ensure all our
+    // code paths are consistent (instead of just hoping that TableBegin/TableEnd will work), get borders drawn, etc.
+    if (!table->IsLayoutLocked)
+        TableUpdateLayout(table);
+
+    const ImGuiTableFlags flags = table->Flags;
+    ImGuiWindow* inner_window = table->InnerWindow;
+    ImGuiWindow* outer_window = table->OuterWindow;
+    IM_ASSERT(inner_window == g.CurrentWindow);
+    IM_ASSERT(outer_window == inner_window || outer_window == inner_window->ParentWindow);
+
+    if (table->IsInsideRow)
+        TableEndRow(table);
+
+    // Finalize table height
+    inner_window->SkipItems = table->HostSkipItems;
+    inner_window->DC.CursorMaxPos = table->HostCursorMaxPos;
+    if (inner_window != outer_window)
+    {
+        table->OuterRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->Pos.y + inner_window->Size.y);
+        inner_window->DC.CursorMaxPos.y = table->RowPosY2;
+    }
+    else if (!(flags & ImGuiTableFlags_NoHostExtendY))
+    {
+        table->OuterRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->DC.CursorPos.y);
+        inner_window->DC.CursorMaxPos.y = table->RowPosY2;
+    }
+    table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y);
+    table->LastOuterHeight = table->OuterRect.GetHeight();
+
+    // Store content width reference for each column
+    float max_pos_x = inner_window->DC.CursorMaxPos.x;
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+
+        // Store content width (for both Headers and Rows)
+        //float ref_x = column->MinX;
+        float ref_x_rows = column->StartXRows - table->CellPaddingX1;
+        float ref_x_headers = column->StartXHeaders - table->CellPaddingX1;
+        column->ContentWidthRowsFrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsFrozen - ref_x_rows);
+        column->ContentWidthRowsUnfrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsUnfrozen - ref_x_rows);
+        column->ContentWidthHeadersUsed = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersUsed - ref_x_headers);
+        column->ContentWidthHeadersDesired = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersDesired - ref_x_headers);
+
+        if (table->ActiveMaskByIndex & ((ImU64)1 << column_n))
+            max_pos_x = ImMax(max_pos_x, column->MaxX);
+    }
+
+    // Add an extra 1 pixel so we can see the last column vertical line if it lies on the right-most edge.
+    inner_window->DC.CursorMaxPos.x = max_pos_x + 1;
+
+    if (!(flags & ImGuiTableFlags_NoClipX))
+        inner_window->DrawList->PopClipRect();
+    inner_window->ClipRect = inner_window->DrawList->_ClipRectStack.back();
+
+    // Draw borders
+    if ((flags & ImGuiTableFlags_Borders) != 0)
+        TableDrawBorders(table);
+
+    // Flatten channels and merge draw calls
+    table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 0);
+    TableDrawMergeChannels(table);
+
+    // When releasing a column being resized, scroll to keep the resulting column in sight
+    const float min_column_width = TableGetMinColumnWidth();
+    if (!(table->Flags & ImGuiTableFlags_ScrollX) && inner_window != outer_window)
+    {
+        inner_window->Scroll.x = 0.0f;
+    }
+    else if (table->LastResizedColumn != -1 && table->ResizedColumn == -1 && inner_window->ScrollbarX && table->InstanceInteracted == table->InstanceNo)
+    {
+        ImGuiTableColumn* column = &table->Columns[table->LastResizedColumn];
+        if (column->MaxX < table->InnerClipRect.Min.x)
+            SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x - min_column_width, 1.0f);
+        else if (column->MaxX > table->InnerClipRect.Max.x)
+            SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x + min_column_width, 1.0f);
+    }
+
+    // Apply resizing/dragging at the end of the frame
+    if (table->ResizedColumn != -1)
+    {
+        ImGuiTableColumn* column = &table->Columns[table->ResizedColumn];
+        const float new_x2 = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + TABLE_RESIZE_SEPARATOR_HALF_THICKNESS);
+        const float new_width = ImFloor(new_x2 - column->MinX);
+        table->ResizedColumnNextWidth = new_width;
+    }
+
+    // Layout in outer window
+    inner_window->WorkRect = table->HostWorkRect;
+    inner_window->SkipItems = table->HostSkipItems;
+    outer_window->DC.CursorPos = table->OuterRect.Min;
+    outer_window->DC.ColumnsOffset.x = 0.0f;
+    if (inner_window != outer_window)
+    {
+        // Override EndChild's ItemSize with our own to enable auto-resize on the X axis when possible
+        float backup_outer_cursor_pos_x = outer_window->DC.CursorPos.x;
+        EndChild();
+        outer_window->DC.CursorMaxPos.x = backup_outer_cursor_pos_x + table->ColumnsTotalWidth + 1.0f + inner_window->ScrollbarSizes.x;
+    }
+    else
+    {
+        PopID();
+        ImVec2 item_size = table->OuterRect.GetSize();
+        item_size.x = table->ColumnsTotalWidth;
+        ItemSize(item_size);
+    }
+
+    // Save settings
+    if (table->IsSettingsDirty)
+        TableSaveSettings(table);
+
+    // Clear or restore current table, if any
+    IM_ASSERT(g.CurrentWindow == outer_window);
+    IM_ASSERT(g.CurrentTable == table);
+    outer_window->DC.CurrentTable = NULL;
+    g.CurrentTableStack.pop_back();
+    g.CurrentTable = g.CurrentTableStack.Size ? g.Tables.GetByIndex(g.CurrentTableStack.back().Index) : NULL;
+}
+
+// FIXME-TABLE: This is a mess, need to redesign how we render borders.
+void ImGui::TableDrawBorders(ImGuiTable* table)
+{
+    ImGuiWindow* inner_window = table->InnerWindow;
+    ImGuiWindow* outer_window = table->OuterWindow;
+    table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 0);
+    if (inner_window->Hidden || !table->HostClipRect.Overlaps(table->InnerClipRect))
+        return;
+    ImDrawList* inner_drawlist = inner_window->DrawList;
+    ImDrawList* outer_drawlist = outer_window->DrawList;
+
+    // Draw inner border and resizing feedback
+    const float draw_y1 = table->OuterRect.Min.y;
+    float draw_y2_base = (table->FreezeRowsCount >= 1 ? table->OuterRect.Min.y : table->WorkRect.Min.y) + table->LastFirstRowHeight;
+    float draw_y2_full = table->OuterRect.Max.y;
+    ImU32 border_base_col;
+    if (!table->IsUsingHeaders || (table->Flags & ImGuiTableFlags_BordersVFullHeight))
+    {
+        draw_y2_base = draw_y2_full;
+        border_base_col = table->BorderColorLight;
+    }
+    else
+    {
+        border_base_col = table->BorderColorStrong;
+    }
+
+    if ((table->Flags & ImGuiTableFlags_BordersVOuter) && (table->InnerWindow == table->OuterWindow))
+        inner_drawlist->AddLine(ImVec2(table->OuterRect.Min.x, draw_y1), ImVec2(table->OuterRect.Min.x, draw_y2_base), border_base_col, 1.0f);
+
+    if (table->Flags & ImGuiTableFlags_BordersVInner)
+    {
+        for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+        {
+            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+                continue;
+
+            const int column_n = table->DisplayOrderToIndex[order_n];
+            ImGuiTableColumn* column = &table->Columns[column_n];
+            const bool is_hovered = (table->HoveredColumnBorder == column_n);
+            const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceNo);
+            const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0;
+            bool draw_right_border = (column->MaxX <= table->InnerClipRect.Max.x) || (is_resized || is_hovered);
+            if (column->NextActiveColumn == -1 && !is_resizable)
+                draw_right_border = false;
+            if (draw_right_border && column->MaxX > column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size..
+            {
+                // Draw in outer window so right-most column won't be clipped
+                // Always draw full height border when:
+                // - not using headers
+                // - user specify ImGuiTableFlags_BordersFullHeight
+                // - being interacted with
+                // - on the delimitation of frozen column scrolling
+                const ImU32 col = is_resized ? GetColorU32(ImGuiCol_SeparatorActive) : is_hovered ? GetColorU32(ImGuiCol_SeparatorHovered) : border_base_col;
+                float draw_y2 = draw_y2_base;
+                if (is_hovered || is_resized || (table->FreezeColumnsCount != -1 && table->FreezeColumnsCount == order_n + 1))
+                    draw_y2 = draw_y2_full;
+                inner_drawlist->AddLine(ImVec2(column->MaxX, draw_y1), ImVec2(column->MaxX, draw_y2), col, 1.0f);
+            }
+        }
+    }
+
+    // Draw outer border
+    if (table->Flags & ImGuiTableFlags_BordersOuter)
+    {
+        // Display outer border offset by 1 which is a simple way to display it without adding an extra draw call
+        // (Without the offset, in outer_window it would be rendered behind cells, because child windows are above their parent.
+        // In inner_window, it won't reach out over scrollbars. Another weird solution would be to display part of it in inner window,
+        // and the part that's over scrollbars in the outer window..)
+        // Either solution currently won't allow us to use a larger border size: the border would clipped.
+        ImRect outer_border = table->OuterRect;
+        const ImU32 outer_col = table->BorderColorStrong;
+        if (inner_window != outer_window)
+            outer_border.Expand(1.0f);
+        if ((table->Flags & ImGuiTableFlags_BordersOuter) == ImGuiTableFlags_BordersOuter)
+            outer_drawlist->AddRect(outer_border.Min, outer_border.Max, outer_col);
+        else if (table->Flags & ImGuiTableFlags_BordersVOuter)
+        {
+            outer_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Min.x, outer_border.Max.y), outer_col);
+            outer_drawlist->AddLine(ImVec2(outer_border.Max.x, outer_border.Min.y), outer_border.Max, outer_col);
+        }
+        else if (table->Flags & ImGuiTableFlags_BordersHOuter)
+        {
+            outer_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Max.x, outer_border.Min.y), outer_col);
+            outer_drawlist->AddLine(ImVec2(outer_border.Min.x, outer_border.Max.y), outer_border.Max, outer_col);
+        }
+    }
+    if ((table->Flags & ImGuiTableFlags_BordersHInner) && table->RowPosY2 < table->OuterRect.Max.y)
+    {
+        // Draw bottom-most row border
+        const float border_y = table->RowPosY2;
+        if (border_y >= table->BackgroundClipRect.Min.y && border_y < table->BackgroundClipRect.Max.y)
+            inner_drawlist->AddLine(ImVec2(table->BorderX1, border_y), ImVec2(table->BorderX2, border_y), table->BorderColorLight);
+    }
+}
+
+static void TableUpdateColumnsWeightFromWidth(ImGuiTable* table)
+{
+    IM_ASSERT(table->LeftMostStretchedColumnDisplayOrder != -1);
+
+    // Measure existing quantity
+    float visible_weight = 0.0f;
+    float visible_width = 0.0f;
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        if (!column->IsActive || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+            continue;
+        visible_weight += column->ResizeWeight;
+        visible_width += column->WidthRequested;
+    }
+    IM_ASSERT(visible_weight > 0.0f && visible_width > 0.0f);
+
+    // Apply new weights
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        if (!column->IsActive || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+            continue;
+        column->ResizeWeight = (column->WidthRequested + 0.0f) / visible_width;
+    }
+}
+
+// Public wrapper
+void ImGui::TableSetColumnWidth(int column_n, float width)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL);
+    IM_ASSERT(table->IsLayoutLocked == false);
+    IM_ASSERT(column_n >= 0 && column_n < table->ColumnsCount);
+    TableSetColumnWidth(table, &table->Columns[column_n], width);
+}
+
+// [Internal]
+void ImGui::TableSetColumnWidth(ImGuiTable* table, ImGuiTableColumn* column_0, float column_0_width)
+{
+    // Constraints
+    float min_width = TableGetMinColumnWidth();
+    float max_width_0 = FLT_MAX;
+    if (!(table->Flags & ImGuiTableFlags_ScrollX))
+        max_width_0 = (table->WorkRect.Max.x - column_0->MinX) - (table->ColumnsActiveCount - (column_0->IndexWithinActiveSet + 1)) * min_width;
+    column_0_width = ImClamp(column_0_width, min_width, max_width_0);
+
+    // Compare both requested and actual given width to avoid overwriting requested width when column is stuck (minimum size, bounded)
+    if (column_0->WidthGiven == column_0_width || column_0->WidthRequested == column_0_width)
+        return;
+
+    ImGuiTableColumn* column_1 = (column_0->NextActiveColumn != -1) ? &table->Columns[column_0->NextActiveColumn] : NULL;
+
+    // In this surprisingly not simple because of how we support mixing Fixed and Stretch columns.
+    // When forwarding resize from Wn| to Fn+1| we need to be considerate of the _NoResize flag on Fn+1.
+    // FIXME-TABLE: Find a way to rewrite all of this so interactions feel more consistent for the user.
+    // Scenarios:
+    // - F1 F2 F3  resize from F1| or F2|   --> ok: alter ->WidthRequested of Fixed column. Subsequent columns will be offset.
+    // - F1 F2 F3  resize from F3|          --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered.
+    // - F1 F2 W3  resize from F1| or F2|   --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered, but it doesn't make much sense as the Weighted column will always be minimal size.
+    // - F1 F2 W3  resize from W3|          --> ok: no-op (disabled by Resize Rule 1)
+    // - W1 W2 W3  resize from W1| or W2|   --> FIXME
+    // - W1 W2 W3  resize from W3|          --> ok: no-op (disabled by Resize Rule 1)
+    // - W1 F2 F3  resize from F3|          --> ok: no-op (disabled by Resize Rule 1)
+    // - W1 F2     resize from F2|          --> ok: no-op (disabled by Resize Rule 1)
+    // - W1 W2 F3  resize from W1| or W2|   --> ok
+    // - W1 F2 W3  resize from W1| or F2|   --> FIXME
+    // - F1 W2 F3  resize from W2|          --> ok
+    // - W1 F2 F3  resize from W1|          --> ok: equivalent to resizing |F2. F3 will not move. (forwarded by Resize Rule 2)
+    // - W1 F2 F3  resize from F2|          --> FIXME should resize F2, F3 and not have effect on W1 (Stretch columns are _before_ the Fixed column).
+
+    // Rules:
+    // - [Resize Rule 1] Can't resize from right of right-most visible column if there is any Stretch column. Implemented in TableUpdateLayout().
+    // - [Resize Rule 2] Resizing from right-side of a Stretch column before a fixed column froward sizing to left-side of fixed column.
+    // - [Resize Rule 3] If we are are followed by a fixed column and we have a Stretch column before, we need to ensure that our left border won't move.
+
+    if (column_0->Flags & ImGuiTableColumnFlags_WidthFixed)
+    {
+        // [Resize Rule 3] If we are are followed by a fixed column and we have a Stretch column before, we need to
+        // ensure that our left border won't move, which we can do by making sure column_a/column_b resizes cancels each others.
+        if (column_1 && (column_1->Flags & ImGuiTableColumnFlags_WidthFixed))
+            if (table->LeftMostStretchedColumnDisplayOrder != -1 && table->LeftMostStretchedColumnDisplayOrder < column_0->DisplayOrder)
+            {
+                // (old_a + old_b == new_a + new_b) --> (new_a == old_a + old_b - new_b)
+                float column_1_width = ImMax(column_1->WidthRequested - (column_0_width - column_0->WidthRequested), min_width);
+                column_0_width = column_0->WidthRequested + column_1->WidthRequested - column_1_width;
+                column_1->WidthRequested = column_1_width;
+            }
+
+        // Apply
+        //IMGUI_DEBUG_LOG("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthRequested, column_0_width);
+        column_0->WidthRequested = column_0_width;
+    }
+    else if (column_0->Flags & ImGuiTableColumnFlags_WidthStretch)
+    {
+        // [Resize Rule 2]
+        if (column_1 && (column_1->Flags & ImGuiTableColumnFlags_WidthFixed))
+        {
+            float off = (column_0->WidthGiven - column_0_width);
+            float column_1_width = column_1->WidthGiven + off;
+            column_1->WidthRequested = ImMax(min_width, column_1_width);
+            return;
+        }
+
+        // (old_a + old_b == new_a + new_b) --> (new_a == old_a + old_b - new_b)
+        float column_1_width = ImMax(column_1->WidthRequested - (column_0_width - column_0->WidthRequested), min_width);
+        column_0_width = column_0->WidthRequested + column_1->WidthRequested - column_1_width;
+        column_1->WidthRequested = column_1_width;
+        column_0->WidthRequested = column_0_width;
+        TableUpdateColumnsWeightFromWidth(table);
+    }
+    table->IsSettingsDirty = true;
+}
+
+// Columns where the contents didn't stray off their local clip rectangle can be merged into a same draw command.
+// To achieve this we merge their clip rect and make them contiguous in the channel list so they can be merged.
+// So here we'll reorder the draw cmd which can be merged, by arranging them into a maximum of 4 distinct groups:
+//
+//   1 group:               2 groups:              2 groups:              4 groups:
+//   [ 0. ] no freeze       [ 0. ] row freeze      [ 01 ] col freeze      [ 01 ] row+col freeze
+//   [ .. ]  or no scroll   [ 1. ]  and v-scroll   [ .. ]  and h-scroll   [ 23 ]  and v+h-scroll
+//
+// Each column itself can use 1 channel (row freeze disabled) or 2 channels (row freeze enabled).
+// When the contents of a column didn't stray off its limit, we move its channels into the corresponding group
+// based on its position (within frozen rows/columns groups or not).
+// At the end of the operation our 1-4 groups will each have a ImDrawCmd using the same ClipRect, and they will be merged by the DrawSplitter.Merge() call.
+//
+// Column channels will not be merged into one of the 1-4 groups in the following cases:
+// - The contents stray off its clipping rectangle (we only compare the MaxX value, not the MinX value).
+//   Direct ImDrawList calls won't be taken into account by default, if you use them make sure the ImGui:: bounds matches, by e.g. calling SetCursorScreenPos().
+// - The channel uses more than one draw command itself. We drop all our merging stuff here.. we could do better but it's going to be rare.
+//
+// This function is particularly tricky to understand.. take a breath.
+void    ImGui::TableDrawMergeChannels(ImGuiTable* table)
+{
+    ImGuiContext& g = *GImGui;
+    ImDrawListSplitter* splitter = &table->DrawSplitter;
+    const bool is_frozen_v = (table->FreezeRowsCount > 0);
+    const bool is_frozen_h = (table->FreezeColumnsCount > 0);
+
+    // Track which groups we are going to attempt to merge, and which channels goes into each group.
+    struct MergeGroup
+    {
+        ImRect  ClipRect;
+        int     ChannelsCount;
+        ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> ChannelsMask;
+    };
+    int merge_group_mask = 0x00;
+    MergeGroup merge_groups[4];
+    memset(merge_groups, 0, sizeof(merge_groups));
+    bool merge_groups_all_fit_within_inner_rect = (table->Flags & ImGuiTableFlags_NoHostExtendY) == 0;
+
+    // 1. Scan channels and take note of those which can be merged
+    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+    {
+        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
+            continue;
+        const int column_n = table->DisplayOrderToIndex[order_n];
+        ImGuiTableColumn* column = &table->Columns[column_n];
+
+        const int merge_group_sub_count = is_frozen_v ? 2 : 1;
+        for (int merge_group_sub_n = 0; merge_group_sub_n < merge_group_sub_count; merge_group_sub_n++)
+        {
+            const int channel_no = (merge_group_sub_n == 0) ? column->DrawChannelRowsBeforeFreeze : column->DrawChannelRowsAfterFreeze;
+
+            // Don't attempt to merge if there are multiple draw calls within the column
+            ImDrawChannel* src_channel = &splitter->_Channels[channel_no];
+            if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0)
+                src_channel->_CmdBuffer.pop_back();
+            if (src_channel->_CmdBuffer.Size != 1)
+                continue;
+
+            // Find out the width of this merge group and check if it will fit in our column.
+            float width_contents;
+            if (merge_group_sub_count == 1)     // No row freeze (same as testing !is_frozen_v)
+                width_contents = ImMax(column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed);
+            else if (merge_group_sub_n == 0)    // Row freeze: use width before freeze
+                width_contents = ImMax(column->ContentWidthRowsFrozen, column->ContentWidthHeadersUsed);
+            else                                // Row freeze: use width after freeze
+                width_contents = column->ContentWidthRowsUnfrozen;
+            if (width_contents > column->WidthGiven && !(column->Flags & ImGuiTableColumnFlags_NoClipX))
+                continue;
+
+            const int merge_group_dst_n = (is_frozen_h && column_n < table->FreezeColumnsCount ? 0 : 2) + (is_frozen_v ? merge_group_sub_n : 1);
+            IM_ASSERT(channel_no < IMGUI_TABLE_MAX_DRAW_CHANNELS);
+            MergeGroup* merge_group = &merge_groups[merge_group_dst_n];
+            if (merge_group->ChannelsCount == 0)
+                merge_group->ClipRect = ImRect(+FLT_MAX, +FLT_MAX, -FLT_MAX, -FLT_MAX);
+            merge_group->ChannelsMask.SetBit(channel_no);
+            merge_group->ChannelsCount++;
+            merge_group->ClipRect.Add(src_channel->_CmdBuffer[0].ClipRect);
+            merge_group_mask |= (1 << merge_group_dst_n);
+
+            // If we end with a single group and hosted by the outer window, we'll attempt to merge our draw command with
+            // the existing outer window command. But we can only do so if our columns all fit within the expected clip rect,
+            // otherwise clipping will be incorrect when ScrollX is disabled.
+            // FIXME-TABLE FIXME-WORKRECT: We are wasting a merge opportunity on tables without scrolling if column don't fit within host clip rect, solely because of the half-padding difference between window->WorkRect and window->InnerClipRect
+
+            // 2019/10/22: (1) This is breaking table_2_draw_calls but I cannot seem to repro what it is attempting to fix...
+            // cf git fce2e8dc "Fixed issue with clipping when outerwindow==innerwindow / support ScrollH without ScrollV."
+            // 2019/10/22: (2) Clamping code in TableUpdateLayout() seemingly made this not necessary...
+#if 0
+            if (column->MinX < table->InnerClipRect.Min.x || column->MaxX > table->InnerClipRect.Max.x)
+                merge_groups_all_fit_within_inner_rect = false;
+#endif
+        }
+
+        // Invalidate current draw channel (we don't clear DrawChannelBeforeRowFreeze/DrawChannelAfterRowFreeze solely to facilitate debugging)
+        column->DrawChannelCurrent = -1;
+    }
+
+    // 2. Rewrite channel list in our preferred order
+    if (merge_group_mask != 0)
+    {
+        // Use shared temporary storage so the allocation gets amortized
+        g.DrawChannelsTempMergeBuffer.resize(splitter->_Count - 1);
+        ImDrawChannel* dst_tmp = g.DrawChannelsTempMergeBuffer.Data;
+        ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> remaining_mask;
+        remaining_mask.ClearBits();
+        remaining_mask.SetBitRange(1, splitter->_Count - 1); // Background channel 0 not part of the merge (see channel allocation in TableUpdateDrawChannels)
+        int remaining_count = splitter->_Count - 1;
+        const bool may_extend_clip_rect_to_host_rect = ImIsPowerOfTwo(merge_group_mask);
+        for (int merge_group_n = 0; merge_group_n < 4; merge_group_n++)
+            if (int merge_channels_count = merge_groups[merge_group_n].ChannelsCount)
+            {
+                MergeGroup* merge_group = &merge_groups[merge_group_n];
+                ImRect merge_clip_rect = merge_groups[merge_group_n].ClipRect;
+                if (may_extend_clip_rect_to_host_rect)
+                {
+                    //GetOverlayDrawList()->AddRect(table->HostClipRect.Min, table->HostClipRect.Max, IM_COL32(255, 0, 0, 200), 0.0f, ~0, 3.0f);
+                    //GetOverlayDrawList()->AddRect(table->InnerClipRect.Min, table->InnerClipRect.Max, IM_COL32(0, 255, 0, 200), 0.0f, ~0, 1.0f);
+                    //GetOverlayDrawList()->AddRect(merge_clip_rect.Min, merge_clip_rect.Max, IM_COL32(255, 0, 0, 200), 0.0f, ~0, 2.0f);
+                    merge_clip_rect.Add(merge_groups_all_fit_within_inner_rect ? table->HostClipRect : table->InnerClipRect);
+                    //GetOverlayDrawList()->AddRect(merge_clip_rect.Min, merge_clip_rect.Max, IM_COL32(0, 255, 0, 200));
+                }
+                remaining_count -= merge_group->ChannelsCount;
+                for (int n = 0; n < IM_ARRAYSIZE(remaining_mask.Storage); n++)
+                    remaining_mask.Storage[n] &= ~merge_group->ChannelsMask.Storage[n];
+                for (int n = 0; n < splitter->_Count && merge_channels_count != 0; n++)
+                {
+                    // Copy + overwrite new clip rect
+                    if (!merge_group->ChannelsMask.TestBit(n))
+                        continue;
+                    merge_group->ChannelsMask.ClearBit(n);
+                    merge_channels_count--;
+
+                    ImDrawChannel* channel = &splitter->_Channels[n];
+                    IM_ASSERT(channel->_CmdBuffer.Size == 1 && merge_clip_rect.Contains(ImRect(channel->_CmdBuffer[0].ClipRect)));
+                    channel->_CmdBuffer[0].ClipRect = merge_clip_rect.ToVec4();
+                    memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
+                }
+            }
+
+        // Append unmergeable channels that we didn't reorder at the end of the list
+        for (int n = 0; n < splitter->_Count && remaining_count != 0; n++)
+        {
+            if (!remaining_mask.TestBit(n))
+                continue;
+            ImDrawChannel* channel = &splitter->_Channels[n];
+            memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
+            remaining_count--;
+        }
+        IM_ASSERT(dst_tmp == g.DrawChannelsTempMergeBuffer.Data + g.DrawChannelsTempMergeBuffer.Size);
+        memcpy(splitter->_Channels.Data + 1, g.DrawChannelsTempMergeBuffer.Data, (splitter->_Count - 1) * sizeof(ImDrawChannel));
+    }
+
+    // 3. Actually merge (channels using the same clip rect will be contiguous and naturally merged)
+    splitter->Merge(table->InnerWindow->DrawList);
+}
+
+// We use a default parameter of 'init_width_or_weight == -1'
+//  ImGuiTableColumnFlags_WidthFixed,    width  <= 0 --> init width == auto
+//  ImGuiTableColumnFlags_WidthFixed,    width  >  0 --> init width == manual
+//  ImGuiTableColumnFlags_WidthStretch,  weight <  0 --> init weight == 1.0f
+//  ImGuiTableColumnFlags_WidthStretch,  weight >= 0 --> init weight == custom
+// Use a different API?
+void    ImGui::TableSetupColumn(const char* label, ImGuiTableColumnFlags flags, float init_width_or_weight, ImGuiID user_id)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL && "Need to call TableSetupColumn() after BeginTable()!");
+    IM_ASSERT(!table->IsLayoutLocked && "Need to call call TableSetupColumn() before first row!");
+    IM_ASSERT(table->DeclColumnsCount >= 0 && table->DeclColumnsCount < table->ColumnsCount && "Called TableSetupColumn() too many times!");
+
+    ImGuiTableColumn* column = &table->Columns[table->DeclColumnsCount];
+    table->DeclColumnsCount++;
+
+    // When passing a width automatically enforce WidthFixed policy (vs TableFixColumnFlags would default to WidthAlwaysAutoResize)
+    // (we write down to FlagsIn which is a little misleading, another solution would be to pass init_width_or_weight to TableFixColumnFlags)
+    if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0)
+        if ((table->Flags & ImGuiTableFlags_SizingPolicyFixedX) && (init_width_or_weight > 0.0f))
+            flags |= ImGuiTableColumnFlags_WidthFixed;
+
+    column->UserID = user_id;
+    column->FlagsIn = flags;
+    column->Flags = TableFixColumnFlags(table, column->FlagsIn);
+    flags = column->Flags;
+
+    // Initialize defaults
+    // FIXME-TABLE: We don't restore widths/weight so let's avoid using IsSettingsLoaded for now
+    if (table->IsInitializing && column->WidthRequested < 0.0f && column->ResizeWeight < 0.0f)// && !table->IsSettingsLoaded)
+    {
+        // Init width or weight
+        // Disable auto-fit if a default fixed width has been specified
+        if ((flags & ImGuiTableColumnFlags_WidthFixed) && init_width_or_weight > 0.0f)
+        {
+            column->WidthRequested = init_width_or_weight;
+            column->AutoFitQueue = 0x00;
+        }
+        if (flags & ImGuiTableColumnFlags_WidthStretch)
+        {
+            IM_ASSERT(init_width_or_weight < 0.0f || init_width_or_weight > 0.0f);
+            column->ResizeWeight = (init_width_or_weight < 0.0f ? 1.0f : init_width_or_weight);
+        }
+        else
+        {
+            column->ResizeWeight = 1.0f;
+        }
+    }
+    if (table->IsInitializing && !table->IsSettingsLoaded)
+    {
+        // Init default visibility/sort state
+        if (flags & ImGuiTableColumnFlags_DefaultHide)
+            column->IsActive = column->IsActiveNextFrame = false;
+        if (flags & ImGuiTableColumnFlags_DefaultSort)
+        {
+            column->SortOrder = 0; // Multiple columns using _DefaultSort will be reordered when building the sort specs.
+            column->SortDirection = (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
+        }
+    }
+
+    // Store name (append with zero-terminator in contiguous buffer)
+    IM_ASSERT(column->NameOffset == -1);
+    if (label != NULL)
+    {
+        column->NameOffset = (ImS16)table->ColumnsNames.size();
+        table->ColumnsNames.append(label, label + strlen(label) + 1);
+    }
+}
+
+// Starts into the first cell of a new row
+void    ImGui::TableNextRow(ImGuiTableRowFlags row_flags, float row_min_height)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+
+    if (table->CurrentRow == -1)
+        TableUpdateLayout(table);
+    else if (table->IsInsideRow)
+        TableEndRow(table);
+
+    table->LastRowFlags = table->RowFlags;
+    table->RowFlags = row_flags;
+    table->RowMinHeight = row_min_height;
+    TableBeginRow(table);
+
+    // We honor min_row_height requested by user, but cannot guarantee per-row maximum height,
+    // because that would essentially require a unique clipping rectangle per-cell.
+    table->RowPosY2 += table->CellPaddingY * 2.0f;
+    table->RowPosY2 = ImMax(table->RowPosY2, table->RowPosY1 + row_min_height);
+
+    TableBeginCell(table, 0);
+}
+
+// [Internal]
+void    ImGui::TableBeginRow(ImGuiTable* table)
+{
+    ImGuiWindow* window = table->InnerWindow;
+    IM_ASSERT(!table->IsInsideRow);
+
+    // New row
+    table->CurrentRow++;
+    table->CurrentColumn = -1;
+    table->RowBgColor = IM_COL32_DISABLE;
+    table->IsInsideRow = true;
+
+    // Begin frozen rows
+    float next_y1 = table->RowPosY2;
+    if (table->CurrentRow == 0 && table->FreezeRowsCount > 0)
+        next_y1 = window->DC.CursorPos.y = table->OuterRect.Min.y;
+
+    table->RowPosY1 = table->RowPosY2 = next_y1;
+    table->RowTextBaseline = 0.0f;
+    table->RowIndentOffsetX = window->DC.Indent.x - table->HostIndentX; // Lock indent
+    window->DC.PrevLineTextBaseOffset = 0.0f;
+    window->DC.CursorMaxPos.y = next_y1;
+
+    // Making the header BG color non-transparent will allow us to overlay it multiple times when handling smooth dragging.
+    if (table->RowFlags & ImGuiTableRowFlags_Headers)
+    {
+        table->RowBgColor = GetColorU32(ImGuiCol_TableHeaderBg);
+        if (table->CurrentRow == 0)
+            table->IsUsingHeaders = true;
+    }
+}
+
+// [Internal]
+void    ImGui::TableEndRow(ImGuiTable* table)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    IM_ASSERT(window == table->InnerWindow);
+    IM_ASSERT(table->IsInsideRow);
+
+    TableEndCell(table);
+
+    // Position cursor at the bottom of our row so it can be used for e.g. clipping calculation.
+    // However it is likely that the next call to TableBeginCell() will reposition the cursor to take account of vertical padding.
+    window->DC.CursorPos.y = table->RowPosY2;
+
+    // Row background fill
+    const float bg_y1 = table->RowPosY1;
+    const float bg_y2 = table->RowPosY2;
+
+    if (table->CurrentRow == 0)
+        table->LastFirstRowHeight = bg_y2 - bg_y1;
+
+    if (table->CurrentRow >= 0 && bg_y2 >= table->InnerClipRect.Min.y && bg_y1 <= table->InnerClipRect.Max.y)
+    {
+        // Decide of background color for the row
+        ImU32 bg_col = 0;
+        if (table->RowBgColor != IM_COL32_DISABLE)
+            bg_col = table->RowBgColor;
+        else if (table->Flags & ImGuiTableFlags_RowBg)
+            bg_col = GetColorU32((table->RowBgColorCounter & 1) ? ImGuiCol_TableRowBgAlt : ImGuiCol_TableRowBg);
+
+        // Decide of top border color
+        ImU32 border_col = 0;
+        if (table->CurrentRow != 0 || table->InnerWindow == table->OuterWindow)
+        {
+            if (table->Flags & ImGuiTableFlags_BordersHInner)
+            {
+                //if (table->CurrentRow == 0 && table->InnerWindow == table->OuterWindow)
+                //    border_col = table->BorderOuterColor;
+                //else
+                if (table->CurrentRow > 0)// && !(table->LastRowFlags & ImGuiTableRowFlags_Headers))
+                    border_col = (table->LastRowFlags & ImGuiTableRowFlags_Headers) ? table->BorderColorStrong : table->BorderColorLight;
+            }
+            else
+            {
+                //if (table->RowFlags & ImGuiTableRowFlags_Headers)
+                //    border_col = table->BorderOuterColor;
+            }
+        }
+
+        if (bg_col != 0 || border_col != 0)
+            table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
+
+        // Draw background
+        // We soft/cpu clip this so all backgrounds and borders can share the same clipping rectangle
+        if (bg_col)
+        {
+            ImRect bg_rect(table->WorkRect.Min.x, bg_y1, table->WorkRect.Max.x, bg_y2);
+            bg_rect.ClipWith(table->BackgroundClipRect);
+            if (bg_rect.Min.y < bg_rect.Max.y)
+                window->DrawList->AddRectFilledMultiColor(bg_rect.Min, bg_rect.Max, bg_col, bg_col, bg_col, bg_col);
+        }
+
+        // Draw top border
+        const float border_y = bg_y1;
+        if (border_col && border_y >= table->BackgroundClipRect.Min.y && border_y < table->BackgroundClipRect.Max.y)
+            window->DrawList->AddLine(ImVec2(table->BorderX1, border_y), ImVec2(table->BorderX2, border_y), border_col);
+    }
+
+    const bool unfreeze_rows = (table->CurrentRow + 1 == table->FreezeRowsCount && table->FreezeRowsCount > 0);
+
+    // Draw bottom border (always strong)
+    const bool draw_separating_border = unfreeze_rows;// || (table->RowFlags & ImGuiTableRowFlags_Headers);
+    if (draw_separating_border)
+        if (bg_y2 >= table->BackgroundClipRect.Min.y && bg_y2 < table->BackgroundClipRect.Max.y)
+            window->DrawList->AddLine(ImVec2(table->BorderX1, bg_y2), ImVec2(table->BorderX2, bg_y2), table->BorderColorStrong);
+
+    // End frozen rows (when we are past the last frozen row line, teleport cursor and alter clipping rectangle)
+    // We need to do that in TableEndRow() instead of TableBeginRow() so the list clipper can mark end of row and get the new cursor position.
+    if (unfreeze_rows)
+    {
+        IM_ASSERT(table->IsFreezeRowsPassed == false);
+        table->IsFreezeRowsPassed = true;
+        table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
+
+        ImRect r;
+        r.Min.x = table->InnerClipRect.Min.x;
+        r.Min.y = ImMax(table->RowPosY2 + 1, window->InnerClipRect.Min.y);
+        r.Max.x = table->InnerClipRect.Max.x;
+        r.Max.y = window->InnerClipRect.Max.y;
+        table->BackgroundClipRect = r;
+
+        float row_height = table->RowPosY2 - table->RowPosY1;
+        table->RowPosY2 = window->DC.CursorPos.y = table->WorkRect.Min.y + table->RowPosY2 - table->OuterRect.Min.y;
+        table->RowPosY1 = table->RowPosY2 - row_height;
+        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+        {
+            ImGuiTableColumn* column = &table->Columns[column_n];
+            column->DrawChannelCurrent = column->DrawChannelRowsAfterFreeze;
+            column->ClipRect.Min.y = r.Min.y;
+        }
+    }
+
+    if (!(table->RowFlags & ImGuiTableRowFlags_Headers))
+        table->RowBgColorCounter++;
+    table->IsInsideRow = false;
+}
+
+// [Internal] Called by TableNextCell()!
+// This is called very frequently, so we need to be mindful of unnecessary overhead.
+// FIXME-TABLE FIXME-OPT: Could probably shortcut some things for non-active or clipped columns.
+void    ImGui::TableBeginCell(ImGuiTable* table, int column_n)
+{
+    table->CurrentColumn = column_n;
+    ImGuiTableColumn* column = &table->Columns[column_n];
+    ImGuiWindow* window = table->InnerWindow;
+
+    // Start position is roughly ~~ CellRect.Min + CellPadding + Indent
+    float start_x = (table->RowFlags & ImGuiTableRowFlags_Headers) ? column->StartXHeaders : column->StartXRows;
+    if (column->Flags & ImGuiTableColumnFlags_IndentEnable)
+        start_x += table->RowIndentOffsetX; // ~~ += window.DC.Indent.x - table->HostIndentX, except we locked it for the row.
+
+    window->DC.CursorPos.x = start_x;
+    window->DC.CursorPos.y = table->RowPosY1 + table->CellPaddingY;
+    window->DC.CursorMaxPos.x = window->DC.CursorPos.x;
+    window->DC.ColumnsOffset.x = start_x - window->Pos.x - window->DC.Indent.x; // FIXME-WORKRECT
+    window->DC.CurrLineTextBaseOffset = table->RowTextBaseline;
+    window->DC.LastItemId = 0;
+
+    window->WorkRect.Min.y = window->DC.CursorPos.y;
+    window->WorkRect.Min.x = column->MinX + table->CellPaddingX1;
+    window->WorkRect.Max.x = column->MaxX - table->CellPaddingX2;
+
+    // To allow ImGuiListClipper to function we propagate our row height
+    if (!column->IsActive)
+        window->DC.CursorPos.y = ImMax(window->DC.CursorPos.y, table->RowPosY2);
+
+    window->SkipItems = column->SkipItems;
+    if (table->Flags & ImGuiTableFlags_NoClipX)
+    {
+        table->DrawSplitter.SetCurrentChannel(window->DrawList, 1);
+    }
+    else
+    {
+        table->DrawSplitter.SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
+        //window->ClipRect = column->ClipRect;
+        //IM_ASSERT(column->ClipRect.Max.x > column->ClipRect.Min.x && column->ClipRect.Max.y > column->ClipRect.Min.y);
+        //window->DrawList->_ClipRectStack.back() = ImVec4(column->ClipRect.Min.x, column->ClipRect.Min.y, column->ClipRect.Max.x, column->ClipRect.Max.y);
+        //window->DrawList->UpdateClipRect();
+        window->DrawList->PopClipRect();
+        window->DrawList->PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
+        //IMGUI_DEBUG_LOG("%d (%.0f,%.0f)(%.0f,%.0f)\n", column_n, column->ClipRect.Min.x, column->ClipRect.Min.y, column->ClipRect.Max.x, column->ClipRect.Max.y);
+        window->ClipRect = window->DrawList->_ClipRectStack.back();
+    }
+}
+
+// [Internal] Called by TableNextRow()/TableNextCell()!
+void    ImGui::TableEndCell(ImGuiTable* table)
+{
+    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
+    ImGuiWindow* window = table->InnerWindow;
+
+    // Report maximum position so we can infer content size per column.
+    float* p_max_pos_x;
+    if (table->RowFlags & ImGuiTableRowFlags_Headers)
+        p_max_pos_x = &column->ContentMaxPosHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call
+    else
+        p_max_pos_x = table->IsFreezeRowsPassed ? &column->ContentMaxPosRowsUnfrozen : &column->ContentMaxPosRowsFrozen;
+    *p_max_pos_x = ImMax(*p_max_pos_x, window->DC.CursorMaxPos.x);
+    table->RowPosY2 = ImMax(table->RowPosY2, window->DC.CursorMaxPos.y + table->CellPaddingY);
+
+    // Propagate text baseline for the entire row
+    // FIXME-TABLE: Here we propagate text baseline from the last line of the cell.. instead of the first one.
+    table->RowTextBaseline = ImMax(table->RowTextBaseline, window->DC.PrevLineTextBaseOffset);
+}
+
+// Append into the next cell
+// FIXME-TABLE: Wrapping to next row should be optional?
+bool    ImGui::TableNextCell()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+
+    if (table->CurrentColumn != -1 && table->CurrentColumn + 1 < table->ColumnsCount)
+    {
+        TableEndCell(table);
+        TableBeginCell(table, table->CurrentColumn + 1);
+    }
+    else
+    {
+        TableNextRow();
+    }
+
+    int column_n = table->CurrentColumn;
+    return (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) != 0;
+}
+
+const char*   ImGui::TableGetColumnName(int column_n)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    if (!table)
+        return NULL;
+    if (column_n < 0)
+        column_n = table->CurrentColumn;
+    return TableGetColumnName(table, column_n);
+}
+
+bool    ImGui::TableGetColumnIsVisible(int column_n)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    if (!table)
+        return false;
+    if (column_n < 0)
+        column_n = table->CurrentColumn;
+    return (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) != 0;
+}
+
+int     ImGui::TableGetColumnIndex()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    if (!table)
+        return 0;
+    return table->CurrentColumn;
+}
+
+bool    ImGui::TableSetColumnIndex(int column_idx)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    if (!table)
+        return false;
+
+    if (table->CurrentColumn != column_idx)
+    {
+        if (table->CurrentColumn != -1)
+            TableEndCell(table);
+        IM_ASSERT(column_idx >= 0 && table->ColumnsCount);
+        TableBeginCell(table, column_idx);
+    }
+
+    return (table->VisibleMaskByIndex & ((ImU64)1 << column_idx)) != 0;
+}
+
+// Return the cell rectangle based on currently known height.
+// Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations.
+// The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it.
+ImRect  ImGui::TableGetCellRect()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
+    return ImRect(column->MinX, table->RowPosY1, column->MaxX, table->RowPosY2);
+}
+
+const char* ImGui::TableGetColumnName(ImGuiTable* table, int column_n)
+{
+    ImGuiTableColumn* column = &table->Columns[column_n];
+    if (column->NameOffset == -1)
+        return NULL;
+    return &table->ColumnsNames.Buf[column->NameOffset];
+}
+
+void    ImGui::TableSetColumnAutofit(ImGuiTable* table, int column_n)
+{
+    // Disable clipping then auto-fit, will take 2 frames
+    // (we don't take a shortcut for unclipped columns to reduce inconsistencies when e.g. resizing multiple columns)
+    ImGuiTableColumn* column = &table->Columns[column_n];
+    column->CannotSkipItemsQueue = (1 << 0);
+    column->AutoFitQueue = (1 << 1);
+}
+
+void    ImGui::PushTableBackground()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiTable* table = g.CurrentTable;
+    table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
+    PushClipRect(table->HostClipRect.Min, table->HostClipRect.Max, false);
+}
+
+void    ImGui::PopTableBackground()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    ImGuiTable* table = g.CurrentTable;
+    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
+    table->DrawSplitter.SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
+    PopClipRect();
+}
+
+// Output context menu into current window (generally a popup)
+// FIXME-TABLE: Ideally this should be writable by the user. Full programmatic access to that data?
+void    ImGui::TableDrawContextMenu(ImGuiTable* table, int selected_column_n)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    bool want_separator = false;
+    selected_column_n  = ImClamp(selected_column_n, -1, table->ColumnsCount - 1);
+
+    // Sizing
+    if (table->Flags & ImGuiTableFlags_Resizable)
+    {
+        if (ImGuiTableColumn* selected_column = (selected_column_n != -1) ? &table->Columns[selected_column_n] : NULL)
+        {
+            const bool can_resize = !(selected_column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_WidthStretch)) && selected_column->IsActive;
+            if (MenuItem("Size column to fit", NULL, false, can_resize))
+                TableSetColumnAutofit(table, selected_column_n);
+        }
+
+        if (MenuItem("Size all columns to fit", NULL))
+        {
+            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+            {
+                ImGuiTableColumn* column = &table->Columns[column_n];
+                if (column->IsActive)
+                    TableSetColumnAutofit(table, column_n);
+            }
+        }
+        want_separator = true;
+    }
+
+    // Ordering
+    if (table->Flags & ImGuiTableFlags_Reorderable)
+    {
+        if (MenuItem("Reset order", NULL, false, !table->IsDefaultDisplayOrder))
+            table->IsResetDisplayOrderRequest = true;
+        want_separator = true;
+    }
+
+    // Hiding / Visibility
+    if (table->Flags & ImGuiTableFlags_Hideable)
+    {
+        if (want_separator)
+            Separator();
+        want_separator = false;
+
+        PushItemFlag(ImGuiItemFlags_SelectableDontClosePopup, true);
+        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+        {
+            ImGuiTableColumn* column = &table->Columns[column_n];
+            const char* name = TableGetColumnName(table, column_n);
+            if (name == NULL)
+                name = "<Unknown>";
+
+            // Make sure we can't hide the last active column
+            bool menu_item_active = (column->Flags & ImGuiTableColumnFlags_NoHide) ? false : true;
+            if (column->IsActive && table->ColumnsActiveCount <= 1)
+                menu_item_active = false;
+            if (MenuItem(name, NULL, column->IsActive, menu_item_active))
+                column->IsActiveNextFrame = !column->IsActive;
+        }
+        PopItemFlag();
+    }
+}
+
+// This is a helper to output TableHeader() calls based on the column names declared in TableSetupColumn().
+// The intent is that advanced users willing to create customized headers would not need to use this helper and may create their own.
+// However presently this function uses too many internal structures/calls.
+void    ImGui::TableAutoHeaders()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL && "Need to call TableAutoHeaders() after BeginTable()!");
+    const int columns_count = table->ColumnsCount;
+
+    // Calculate row height (for the unlikely case that labels may be are multi-line)
+    float row_height = GetTextLineHeight();
+    for (int column_n = 0; column_n < columns_count; column_n++)
+        if (TableGetColumnIsVisible(column_n))
+            row_height = ImMax(row_height, CalcTextSize(TableGetColumnName(column_n)).y);
+    row_height += g.Style.CellPadding.y * 2.0f;
+
+    // Open row
+    TableNextRow(ImGuiTableRowFlags_Headers, row_height);
+    if (table->HostSkipItems) // Merely an optimization
+        return;
+
+    // This for loop is constructed to not make use of internal functions,
+    // as this is intended to be a base template to copy and build from.
+    int open_context_popup = INT_MAX;
+    for (int column_n = 0; column_n < columns_count; column_n++)
+    {
+        if (!TableSetColumnIndex(column_n))
+            continue;
+
+        const char* name = TableGetColumnName(column_n);
+
+        // [DEBUG] Test custom user elements
+#if 0
+        if (column_n < 2)
+        {
+            static bool b[2] = {};
+            PushID(column_n);
+            PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
+            Checkbox("##", &b[column_n]);
+            PopStyleVar();
+            PopID();
+            SameLine(0.0f, g.Style.ItemInnerSpacing.x);
+        }
+#endif
+
+        // [DEBUG]
+        //if (g.IO.KeyCtrl) { static char buf[32]; name = buf; ImGuiTableColumn* c = &table->Columns[column_n]; if (c->Flags & ImGuiTableColumnFlags_WidthStretch) ImFormatString(buf, 32, "%.3f>%.1f", c->ResizeWeight, c->WidthGiven); else ImFormatString(buf, 32, "%.1f", c->WidthGiven); }
+
+        // Push an id to allow unnamed labels (generally accidental, but let's behave nicely with them)
+        PushID(table->InstanceNo * table->ColumnsCount + column_n);
+        TableHeader(name);
+        PopID();
+
+        // We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
+        if (IsMouseReleased(1) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+            open_context_popup = column_n;
+    }
+
+    // FIXME-TABLE: This is not user-land code any more + need to explain WHY this is here!
+    window->SkipItems = table->HostSkipItems;
+
+    // Allow opening popup from the right-most section after the last column
+    // FIXME-TABLE: This is not user-land code any more... perhaps instead we should expose hovered column.
+    // and allow some sort of row-centric IsItemHovered() for full flexibility?
+    float unused_x1 = table->WorkRect.Min.x;
+    if (table->RightMostActiveColumn != -1)
+        unused_x1 = ImMax(unused_x1, table->Columns[table->RightMostActiveColumn].MaxX);
+    if (unused_x1 < table->WorkRect.Max.x)
+    {
+        // FIXME: We inherit ClipRect/SkipItem from last submitted column (active or not), let's temporarily override it.
+        // Because we don't perform any rendering here we just overwrite window->ClipRect used by logic.
+        window->ClipRect = table->InnerClipRect;
+
+        ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
+        window->DC.CursorPos = ImVec2(unused_x1, table->RowPosY1);
+        ImVec2 size = ImVec2(table->WorkRect.Max.x - window->DC.CursorPos.x, table->RowPosY2 - table->RowPosY1);
+        if (size.x > 0.0f && size.y > 0.0f)
+        {
+            InvisibleButton("##RemainingSpace", size);
+            window->DC.CursorPos.y -= g.Style.ItemSpacing.y;
+            window->DC.CursorMaxPos = backup_cursor_max_pos;    // Don't feed back into the width of the Header row
+
+            // We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
+            if (IsMouseReleased(1) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+                open_context_popup = -1;
+        }
+
+        window->ClipRect = window->DrawList->_ClipRectStack.back();
+    }
+
+    // Open Context Menu
+    if (open_context_popup != INT_MAX)
+        if (table->Flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
+        {
+            table->IsContextPopupOpen = true;
+            table->ContextPopupColumn = (ImS8)open_context_popup;
+            table->InstanceInteracted = table->InstanceNo;
+            OpenPopup("##TableContextMenu");
+        }
+}
+
+// Emit a column header (text + optional sort order)
+// We cpu-clip text here so that all columns headers can be merged into a same draw call.
+// Note that because of how we cpu-clip and display sorting indicators, you _cannot_ use SameLine() after a TableHeader()
+// FIXME-TABLE: Should hold a selection state.
+// FIXME-TABLE: Style confusion between CellPadding.y and FramePadding.y
+void    ImGui::TableHeader(const char* label)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiWindow* window = g.CurrentWindow;
+    if (window->SkipItems)
+        return;
+
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL && "Need to call TableAutoHeaders() after BeginTable()!");
+    IM_ASSERT(table->CurrentColumn != -1);
+    const int column_n = table->CurrentColumn;
+    ImGuiTableColumn* column = &table->Columns[column_n];
+
+    // Label
+    if (label == NULL)
+        label = "";
+    const char* label_end = FindRenderedTextEnd(label);
+    ImVec2 label_size = CalcTextSize(label, label_end, true);
+    ImVec2 label_pos = window->DC.CursorPos;
+
+    // If we already got a row height, there's use that.
+    ImRect cell_r = TableGetCellRect();
+    float label_height = ImMax(label_size.y, table->RowMinHeight - g.Style.CellPadding.y * 2.0f);
+
+    //GetForegroundDrawList()->AddRect(cell_r.Min, cell_r.Max, IM_COL32(255, 0, 0, 255)); // [DEBUG]
+    ImRect work_r = cell_r;
+    work_r.Min.x = window->DC.CursorPos.x;
+    work_r.Max.y = work_r.Min.y + label_height;
+    float ellipsis_max = work_r.Max.x;
+
+    // Selectable
+    PushID(label);
+
+    // FIXME-TABLE: Fix when padding are disabled.
+    //window->DC.CursorPos.x = column->MinX + table->CellPadding.x;
+
+    // Keep header highlighted when context menu is open. (FIXME-TABLE: however we cannot assume the ID of said popup if it has been created by the user...)
+    const bool selected = (table->IsContextPopupOpen && table->ContextPopupColumn == column_n && table->InstanceInteracted == table->InstanceNo);
+    const bool pressed = Selectable("", selected, ImGuiSelectableFlags_DrawHoveredWhenHeld | ImGuiSelectableFlags_DontClosePopups, ImVec2(0.0f, label_height));
+    const bool held = IsItemActive();
+    if (held)
+        table->HeldHeaderColumn = (ImS8)column_n;
+    window->DC.CursorPos.y -= g.Style.ItemSpacing.y * 0.5f;
+
+    // Drag and drop to re-order columns.
+    // FIXME-TABLE: Scroll request while reordering a column and it lands out of the scrolling zone.
+    if (held && (table->Flags & ImGuiTableFlags_Reorderable) && IsMouseDragging(0) && !g.DragDropActive)
+    {
+        // While moving a column it will jump on the other side of the mouse, so we also test for MouseDelta.x
+        table->ReorderColumn = (ImS8)column_n;
+        table->InstanceInteracted = table->InstanceNo;
+
+        // We don't reorder: through the frozen<>unfrozen line, or through a column that is marked with ImGuiTableColumnFlags_NoReorder.
+        if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < cell_r.Min.x)
+            if (ImGuiTableColumn* prev_column = (column->PrevActiveColumn != -1) ? &table->Columns[column->PrevActiveColumn] : NULL)
+                if (!((column->Flags | prev_column->Flags) & ImGuiTableColumnFlags_NoReorder))
+                    if ((column->IndexWithinActiveSet < table->FreezeColumnsRequest) == (prev_column->IndexWithinActiveSet < table->FreezeColumnsRequest))
+                        table->ReorderColumnDir = -1;
+        if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > cell_r.Max.x)
+            if (ImGuiTableColumn* next_column = (column->NextActiveColumn != -1) ? &table->Columns[column->NextActiveColumn] : NULL)
+                if (!((column->Flags | next_column->Flags) & ImGuiTableColumnFlags_NoReorder))
+                    if ((column->IndexWithinActiveSet < table->FreezeColumnsRequest) == (next_column->IndexWithinActiveSet < table->FreezeColumnsRequest))
+                        table->ReorderColumnDir = +1;
+    }
+
+    // Sort order arrow
+    float w_arrow = 0.0f;
+    float w_sort_text = 0.0f;
+    if ((table->Flags & ImGuiTableFlags_Sortable) && !(column->Flags & ImGuiTableColumnFlags_NoSort))
+    {
+        const float ARROW_SCALE = 0.65f;
+        w_arrow = ImFloor(g.FontSize * ARROW_SCALE + g.Style.FramePadding.x);// table->CellPadding.x);
+        if (column->SortOrder != -1)
+        {
+            w_sort_text = 0.0f;
+
+            char sort_order_suf[8];
+            if (column->SortOrder > 0)
+            {
+                ImFormatString(sort_order_suf, IM_ARRAYSIZE(sort_order_suf), "%d", column->SortOrder + 1);
+                w_sort_text = g.Style.ItemInnerSpacing.x + CalcTextSize(sort_order_suf).x;
+            }
+
+            float x = ImMax(cell_r.Min.x, work_r.Max.x - w_arrow - w_sort_text);
+            ellipsis_max -= w_arrow + w_sort_text;
+
+            float y = label_pos.y;
+            ImU32 col = GetColorU32(ImGuiCol_Text);
+            if (column->SortOrder > 0)
+            {
+                PushStyleColor(ImGuiCol_Text, GetColorU32(ImGuiCol_Text, 0.70f));
+                RenderText(ImVec2(x + g.Style.ItemInnerSpacing.x, y), sort_order_suf);
+                PopStyleColor();
+                x += w_sort_text;
+            }
+            RenderArrow(window->DrawList, ImVec2(x, y), col, column->SortDirection == ImGuiSortDirection_Ascending ? ImGuiDir_Up : ImGuiDir_Down, ARROW_SCALE);
+        }
+
+        // Handle clicking on column header to adjust Sort Order
+        if (pressed && table->ReorderColumn != column_n)
+            TableSortSpecsClickColumn(table, column, g.IO.KeyShift);
+    }
+
+    // Render clipped label
+    // Clipping here ensure that in the majority of situations, all our header cells will be merged into a single draw call.
+    //window->DrawList->AddCircleFilled(ImVec2(ellipsis_max, label_pos.y), 40, IM_COL32_WHITE);
+    RenderTextEllipsis(window->DrawList, label_pos, ImVec2(ellipsis_max, label_pos.y + label_height + g.Style.FramePadding.y), ellipsis_max, ellipsis_max, label, label_end, &label_size);
+
+    // We feed our unclipped width to the column without writing on CursorMaxPos, so that column is still considering for merging.
+    // FIXME-TABLE: Clarify policies of how label width and potential decorations (arrows) fit into auto-resize of the column
+    float max_pos_x = label_pos.x + label_size.x + w_sort_text + w_arrow;
+    column->ContentMaxPosHeadersUsed = ImMax(column->ContentMaxPosHeadersUsed, work_r.Max.x);// ImMin(max_pos_x, work_r.Max.x));
+    column->ContentMaxPosHeadersDesired = ImMax(column->ContentMaxPosHeadersDesired, max_pos_x);
+
+    PopID();
+}
+
+void ImGui::TableSortSpecsClickColumn(ImGuiTable* table, ImGuiTableColumn* clicked_column, bool add_to_existing_sort_orders)
+{
+    if (!(table->Flags & ImGuiTableFlags_MultiSortable))
+        add_to_existing_sort_orders = false;
+
+    ImS8 sort_order_max = 0;
+    if (add_to_existing_sort_orders)
+        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+            sort_order_max = ImMax(sort_order_max, table->Columns[column_n].SortOrder);
+
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        if (column == clicked_column)
+        {
+            // Set new sort direction and sort order
+            // - If the PreferSortDescending flag is set, we will default to a Descending direction on the first click.
+            // - Note that the PreferSortAscending flag is never checked, it is essentially the default and therefore a no-op.
+            // - Note that the NoSortAscending/NoSortDescending flags are processed in TableSortSpecsSanitize(), and they may change/revert
+            //   the value of SortDirection. We could technically also do it here but it would be unnecessary and duplicate code.
+            if (column->SortOrder == -1)
+                column->SortDirection = (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
+            else
+                column->SortDirection = (ImU8)((column->SortDirection == ImGuiSortDirection_Ascending) ? ImGuiSortDirection_Descending : ImGuiSortDirection_Ascending);
+            if (column->SortOrder == -1 || !add_to_existing_sort_orders)
+                column->SortOrder = add_to_existing_sort_orders ? sort_order_max + 1 : 0;
+        }
+        else
+        {
+            if (!add_to_existing_sort_orders)
+                column->SortOrder = -1;
+        }
+        TableFixColumnSortDirection(column);
+    }
+    table->IsSettingsDirty = true;
+    table->IsSortSpecsDirty = true;
+}
+
+// Return NULL if no sort specs (most often when ImGuiTableFlags_Sortable is not set) 
+// You can sort your data again when 'SpecsChanged == true'. It will be true with sorting specs have changed since last call, or the first time.
+// Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable()!
+const ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    IM_ASSERT(table != NULL);
+
+    if (!(table->Flags & ImGuiTableFlags_Sortable))
+        return NULL;
+
+    // Flatten sort specs into user facing data
+    const bool was_dirty = table->IsSortSpecsDirty;
+    if (was_dirty)
+    {
+        TableSortSpecsSanitize(table);
+
+        // Write output
+        table->SortSpecsData.resize(table->SortSpecsCount);
+        table->SortSpecs.ColumnsMask = 0x00;
+        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+        {
+            ImGuiTableColumn* column = &table->Columns[column_n];
+            if (column->SortOrder == -1)
+                continue;
+            ImGuiTableSortSpecsColumn* sort_spec = &table->SortSpecsData[column->SortOrder];
+            sort_spec->ColumnUserID = column->UserID;
+            sort_spec->ColumnIndex = (ImU8)column_n;
+            sort_spec->SortOrder = (ImU8)column->SortOrder;
+            sort_spec->SortDirection = column->SortDirection;
+            table->SortSpecs.ColumnsMask |= (ImU64)1 << column_n;
+        }
+    }
+
+    // User facing data
+    table->SortSpecs.Specs = table->SortSpecsData.Data;
+    table->SortSpecs.SpecsCount = table->SortSpecsData.Size;
+    table->SortSpecs.SpecsChanged = was_dirty;
+    table->IsSortSpecsDirty = false;
+    return table->SortSpecs.SpecsCount ? &table->SortSpecs : NULL;
+}
+
+bool ImGui::TableGetColumnIsSorted(int column_n)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTable* table = g.CurrentTable;
+    if (!table)
+        return false;
+    if (column_n < 0)
+        column_n = table->CurrentColumn;
+    ImGuiTableColumn* column = &table->Columns[column_n];
+    return (column->SortOrder != -1);
+}
+
+void ImGui::TableSortSpecsSanitize(ImGuiTable* table)
+{
+    // Clear SortOrder from hidden column and verify that there's no gap or duplicate.
+    int sort_order_count = 0;
+    ImU64 sort_order_mask = 0x00;
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+    {
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        if (column->SortOrder != -1 && !column->IsActive)
+            column->SortOrder = -1;
+        if (column->SortOrder == -1)
+            continue;
+        sort_order_count++;
+        sort_order_mask |= ((ImU64)1 << column->SortOrder);
+        IM_ASSERT(sort_order_count < (int)sizeof(sort_order_mask) * 8);
+    }
+
+    const bool need_fix_linearize = ((ImU64)1 << sort_order_count) != (sort_order_mask + 1);
+    const bool need_fix_single_sort_order = (sort_order_count > 1) && !(table->Flags & ImGuiTableFlags_MultiSortable);
+    if (need_fix_linearize || need_fix_single_sort_order)
+    {
+        ImU64 fixed_mask = 0x00;
+        for (int sort_n = 0; sort_n < sort_order_count; sort_n++)
+        {
+            // Fix: Rewrite sort order fields if needed so they have no gap or duplicate.
+            // (e.g. SortOrder 0 disappeared, SortOrder 1..2 exists --> rewrite then as SortOrder 0..1)
+            int column_with_smallest_sort_order = -1;
+            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+                if ((fixed_mask & ((ImU64)1 << (ImU64)column_n)) == 0 && table->Columns[column_n].SortOrder != -1)
+                    if (column_with_smallest_sort_order == -1 || table->Columns[column_n].SortOrder < table->Columns[column_with_smallest_sort_order].SortOrder)
+                        column_with_smallest_sort_order = column_n;
+            IM_ASSERT(column_with_smallest_sort_order != -1);
+            fixed_mask |= ((ImU64)1 << column_with_smallest_sort_order);
+            table->Columns[column_with_smallest_sort_order].SortOrder = (ImS8)sort_n;
+
+            // Fix: Make sure only one column has a SortOrder if ImGuiTableFlags_MultiSortable is not set.
+            if (need_fix_single_sort_order)
+            {
+                for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+                    if (column_n != column_with_smallest_sort_order)
+                        table->Columns[column_n].SortOrder = -1;
+                break;
+            }
+        }
+    }
+
+    // Fallback default sort order (if no column has the ImGuiTableColumnFlags_DefaultSort flag)
+    if (sort_order_count == 0 && table->IsInitializing)
+        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+        {
+            ImGuiTableColumn* column = &table->Columns[column_n];
+            if (!(column->Flags & ImGuiTableColumnFlags_NoSort) && column->IsActive)
+            {
+                sort_order_count = 1;
+                column->SortOrder = 0;
+                break;
+            }
+        }
+
+    table->SortSpecsCount = (ImS8)sort_order_count;
+}
+
+//-------------------------------------------------------------------------
+// TABLE - .ini settings
+//-------------------------------------------------------------------------
+// [Init] 1: TableSettingsHandler_ReadXXXX()   Load and parse .ini file into TableSettings.
+// [Main] 2: TableLoadSettings()               When table is created, bind Table to TableSettings, serialize TableSettings data into Table.
+// [Main] 3: TableSaveSettings()               When table properties are modified, serialize Table data into bound or new TableSettings, mark .ini as dirty.
+// [Main] 4: TableSettingsHandler_WriteAll()   When .ini file is dirty (which can come from other source), save TableSettings into .ini file.
+//-------------------------------------------------------------------------
+
+static ImGuiTableSettings* CreateTableSettings(ImGuiID id, int columns_count)
+{
+    ImGuiContext& g = *GImGui;
+    ImGuiTableSettings* settings = g.SettingsTables.alloc_chunk(sizeof(ImGuiTableSettings) + (size_t)columns_count * sizeof(ImGuiTableColumnSettings));
+    IM_PLACEMENT_NEW(settings) ImGuiTableSettings();
+    ImGuiTableColumnSettings* settings_column = settings->GetColumnSettings();
+    for (int n = 0; n < columns_count; n++, settings_column++)
+        IM_PLACEMENT_NEW(settings_column) ImGuiTableColumnSettings();
+    settings->ID = id;
+    settings->ColumnsCount = settings->ColumnsCountMax = (ImS8)columns_count;
+    return settings;
+}
+
+static ImGuiTableSettings* FindTableSettingsByID(ImGuiID id)
+{
+    // FIXME-OPT: Might want to store a lookup map for this?
+    ImGuiContext& g = *GImGui;
+    for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+        if (settings->ID == id)
+            return settings;
+    return NULL;
+}
+
+ImGuiTableSettings* ImGui::TableFindSettings(ImGuiTable* table)
+{
+    if (table->SettingsOffset == -1)
+        return NULL;
+
+    ImGuiContext& g = *GImGui;
+    ImGuiTableSettings* settings = g.SettingsTables.ptr_from_offset(table->SettingsOffset);
+    IM_ASSERT(settings->ID == table->ID);
+    if (settings->ColumnsCountMax < table->ColumnsCount)
+    {
+        settings->ID = 0; // Ditch storage if we won't fit because of a count change
+        return NULL;
+    }
+    return settings;
+}
+
+void ImGui::TableSaveSettings(ImGuiTable* table)
+{
+    table->IsSettingsDirty = false;
+    if (table->Flags & ImGuiTableFlags_NoSavedSettings)
+        return;
+
+    // Bind or create settings data
+    ImGuiContext& g = *GImGui;
+    ImGuiTableSettings* settings = TableFindSettings(table);
+    if (settings == NULL)
+    {
+        settings = CreateTableSettings(table->ID, table->ColumnsCount);
+        table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
+    }
+    settings->ColumnsCount = (ImS8)table->ColumnsCount;
+
+    // Serialize ImGuiTableSettings/ImGuiTableColumnSettings --> ImGuiTable/ImGuiTableColumn
+    IM_ASSERT(settings->ID == table->ID);
+    IM_ASSERT(settings->ColumnsCount == table->ColumnsCount && settings->ColumnsCountMax >= settings->ColumnsCount);
+    ImGuiTableColumn* column = table->Columns.Data;
+    ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
+
+    // FIXME-TABLE: Logic to avoid saving default widths?
+    settings->SaveFlags = ImGuiTableFlags_Resizable;
+    for (int n = 0; n < table->ColumnsCount; n++, column++, column_settings++)
+    {
+        //column_settings->WidthOrWeight = column->WidthRequested; // FIXME-WIP
+        column_settings->Index = (ImS8)n;
+        column_settings->DisplayOrder = column->DisplayOrder;
+        column_settings->SortOrder = column->SortOrder;
+        column_settings->SortDirection = column->SortDirection;
+        column_settings->Visible = column->IsActive;
+
+        // We skip saving some data in the .ini file when they are unnecessary to restore our state
+        // FIXME-TABLE: We don't have logic to easily compare SortOrder to DefaultSortOrder yet.
+        if (column->DisplayOrder != n)
+            settings->SaveFlags |= ImGuiTableFlags_Reorderable;
+        if (column_settings->SortOrder != -1)
+            settings->SaveFlags |= ImGuiTableFlags_Sortable;
+        if (column_settings->Visible != ((column->Flags & ImGuiTableColumnFlags_DefaultHide) == 0))
+            settings->SaveFlags |= ImGuiTableFlags_Hideable;
+    }
+    settings->SaveFlags &= table->Flags;
+
+    MarkIniSettingsDirty();
+}
+
+void ImGui::TableLoadSettings(ImGuiTable* table)
+{
+    ImGuiContext& g = *GImGui;
+    table->IsSettingsRequestLoad = false;
+    if (table->Flags & ImGuiTableFlags_NoSavedSettings)
+        return;
+
+    // Bind settings
+    ImGuiTableSettings* settings;
+    if (table->SettingsOffset == -1)
+    {
+        settings = FindTableSettingsByID(table->ID);
+        if (settings == NULL)
+            return;
+        table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
+    }
+    else
+    {
+        settings = g.SettingsTables.ptr_from_offset(table->SettingsOffset);
+    }
+    table->IsSettingsLoaded = true;
+    settings->SaveFlags = table->Flags;
+
+    // Serialize ImGuiTable/ImGuiTableColumn --> ImGuiTableSettings/ImGuiTableColumnSettings
+    ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
+    for (int data_n = 0; data_n < settings->ColumnsCount; data_n++, column_settings++)
+    {
+        int column_n = column_settings->Index;
+        if (column_n < 0 || column_n >= table->ColumnsCount)
+            continue;
+        ImGuiTableColumn* column = &table->Columns[column_n];
+        //column->WidthRequested = column_settings->WidthOrWeight; // FIXME-WIP
+        if (column_settings->DisplayOrder != -1)
+            column->DisplayOrder = column_settings->DisplayOrder;
+        if (column_settings->SortOrder != -1)
+        {
+            column->SortOrder = column_settings->SortOrder;
+            column->SortDirection = column_settings->SortDirection;
+        }
+        column->IsActive = column->IsActiveNextFrame = column_settings->Visible;
+    }
+
+    // FIXME-TABLE: Need to validate .ini data
+    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+        table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImS8)column_n;
+}
+
+void*   ImGui::TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
+{
+    ImGuiID id = 0;
+    int columns_count = 0;
+    if (sscanf(name, "0x%08X,%d", &id, &columns_count) < 2)
+        return NULL;
+    return CreateTableSettings(id, columns_count);
+}
+
+void    ImGui::TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
+{
+    // "Column 0  UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
+    ImGuiTableSettings* settings = (ImGuiTableSettings*)entry;
+    int column_n = 0, r = 0, n = 0;
+    if (sscanf(line, "Column %d%n", &column_n, &r) == 1)        { line = ImStrSkipBlank(line + r); } else { return; }
+    if (column_n < 0 || column_n >= settings->ColumnsCount)
+        return;
+
+    char c = 0;
+    ImGuiTableColumnSettings* column = settings->GetColumnSettings() + column_n;
+    column->Index = (ImS8)column_n;
+    if (sscanf(line, "UserID=0x%08X%n", (ImU32*)&n, &r) == 1)   { line = ImStrSkipBlank(line + r); column->UserID = (ImGuiID)n; }
+    if (sscanf(line, "Width=%d%n", &n, &r) == 1)                { line = ImStrSkipBlank(line + r); /* .. */ settings->SaveFlags |= ImGuiTableFlags_Resizable; }
+    if (sscanf(line, "Visible=%d%n", &n, &r) == 1)              { line = ImStrSkipBlank(line + r); column->Visible = (ImU8)n; settings->SaveFlags |= ImGuiTableFlags_Hideable; }
+    if (sscanf(line, "Order=%d%n", &n, &r) == 1)                { line = ImStrSkipBlank(line + r); column->DisplayOrder = (ImS8)n; settings->SaveFlags |= ImGuiTableFlags_Reorderable; }
+    if (sscanf(line, "Sort=%d%c%n", &n, &c, &r) == 2)           { line = ImStrSkipBlank(line + r); column->SortOrder = (ImS8)n; column->SortDirection = (c == '^') ? ImGuiSortDirection_Descending : ImGuiSortDirection_Ascending; settings->SaveFlags |= ImGuiTableFlags_Sortable; }
+}
+
+void    ImGui::TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
+{
+    ImGuiContext& g = *ctx;
+    for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+    {
+        if (settings->ID == 0) // Skip ditched settings
+            continue;
+
+        // TableSaveSettings() may clear some of those flags when we establish that the data can be stripped (e.g. Order was unchanged)
+        const bool save_size    = (settings->SaveFlags & ImGuiTableFlags_Resizable) != 0;
+        const bool save_visible = (settings->SaveFlags & ImGuiTableFlags_Hideable) != 0;
+        const bool save_order   = (settings->SaveFlags & ImGuiTableFlags_Reorderable) != 0;
+        const bool save_sort    = (settings->SaveFlags & ImGuiTableFlags_Sortable) != 0;
+        if (!save_size && !save_visible && !save_order && !save_sort)
+            continue;
+
+        buf->reserve(buf->size() + 30 + settings->ColumnsCount * 50); // ballpark reserve
+        buf->appendf("[%s][0x%08X,%d]\n", handler->TypeName, settings->ID, settings->ColumnsCount);
+        ImGuiTableColumnSettings* column = settings->GetColumnSettings();
+        for (int column_n = 0; column_n < settings->ColumnsCount; column_n++, column++)
+        {
+            // "Column 0  UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
+            if (column->UserID != 0)
+                buf->appendf("Column %-2d UserID=%08X", column_n, column->UserID);
+            else
+                buf->appendf("Column %-2d", column_n);
+            if (save_size)                              buf->appendf(" Width=%d", 0);// (int)settings_column->WidthOrWeight);  // FIXME-TABLE
+            if (save_visible)                           buf->appendf(" Visible=%d", column->Visible);
+            if (save_order)                             buf->appendf(" Order=%d", column->DisplayOrder);
+            if (save_sort && column->SortOrder != -1)   buf->appendf(" Sort=%d%c", column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? 'v' : '^');
+            buf->append("\n");
+        }
+        buf->append("\n");
+    }
+}
+
+//-------------------------------------------------------------------------
+
+#endif // #ifndef IMGUI_DISABLE
--- /dev/null
+++ b/DoConfig/imgui/imstb_rectpack.h
@@ -1,0 +1,639 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_rect_pack.h 1.00.
+// Those changes would need to be pushed into nothings/stb:
+// - Added STBRP__CDECL
+// Grep for [DEAR IMGUI] to find the changes.
+
+// stb_rect_pack.h - v1.00 - public domain - rectangle packing
+// Sean Barrett 2014
+//
+// Useful for e.g. packing rectangular textures into an atlas.
+// Does not do rotation.
+//
+// Not necessarily the awesomest packing method, but better than
+// the totally naive one in stb_truetype (which is primarily what
+// this is meant to replace).
+//
+// Has only had a few tests run, may have issues.
+//
+// More docs to come.
+//
+// No memory allocations; uses qsort() and assert() from stdlib.
+// Can override those by defining STBRP_SORT and STBRP_ASSERT.
+//
+// This library currently uses the Skyline Bottom-Left algorithm.
+//
+// Please note: better rectangle packers are welcome! Please
+// implement them to the same API, but with a different init
+// function.
+//
+// Credits
+//
+//  Library
+//    Sean Barrett
+//  Minor features
+//    Martins Mozeiko
+//    github:IntellectualKitty
+//    
+//  Bugfixes / warning fixes
+//    Jeremy Jaussaud
+//    Fabian Giesen
+//
+// Version history:
+//
+//     1.00  (2019-02-25)  avoid small space waste; gracefully fail too-wide rectangles
+//     0.99  (2019-02-07)  warning fixes
+//     0.11  (2017-03-03)  return packing success/fail result
+//     0.10  (2016-10-25)  remove cast-away-const to avoid warnings
+//     0.09  (2016-08-27)  fix compiler warnings
+//     0.08  (2015-09-13)  really fix bug with empty rects (w=0 or h=0)
+//     0.07  (2015-09-13)  fix bug with empty rects (w=0 or h=0)
+//     0.06  (2015-04-15)  added STBRP_SORT to allow replacing qsort
+//     0.05:  added STBRP_ASSERT to allow replacing assert
+//     0.04:  fixed minor bug in STBRP_LARGE_RECTS support
+//     0.01:  initial release
+//
+// LICENSE
+//
+//   See end of file for license information.
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//       INCLUDE SECTION
+//
+
+#ifndef STB_INCLUDE_STB_RECT_PACK_H
+#define STB_INCLUDE_STB_RECT_PACK_H
+
+#define STB_RECT_PACK_VERSION  1
+
+#ifdef STBRP_STATIC
+#define STBRP_DEF static
+#else
+#define STBRP_DEF extern
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct stbrp_context stbrp_context;
+typedef struct stbrp_node    stbrp_node;
+typedef struct stbrp_rect    stbrp_rect;
+
+#ifdef STBRP_LARGE_RECTS
+typedef int            stbrp_coord;
+#else
+typedef unsigned short stbrp_coord;
+#endif
+
+STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
+// Assign packed locations to rectangles. The rectangles are of type
+// 'stbrp_rect' defined below, stored in the array 'rects', and there
+// are 'num_rects' many of them.
+//
+// Rectangles which are successfully packed have the 'was_packed' flag
+// set to a non-zero value and 'x' and 'y' store the minimum location
+// on each axis (i.e. bottom-left in cartesian coordinates, top-left
+// if you imagine y increasing downwards). Rectangles which do not fit
+// have the 'was_packed' flag set to 0.
+//
+// You should not try to access the 'rects' array from another thread
+// while this function is running, as the function temporarily reorders
+// the array while it executes.
+//
+// To pack into another rectangle, you need to call stbrp_init_target
+// again. To continue packing into the same rectangle, you can call
+// this function again. Calling this multiple times with multiple rect
+// arrays will probably produce worse packing results than calling it
+// a single time with the full rectangle array, but the option is
+// available.
+//
+// The function returns 1 if all of the rectangles were successfully
+// packed and 0 otherwise.
+
+struct stbrp_rect
+{
+   // reserved for your use:
+   int            id;
+
+   // input:
+   stbrp_coord    w, h;
+
+   // output:
+   stbrp_coord    x, y;
+   int            was_packed;  // non-zero if valid packing
+
+}; // 16 bytes, nominally
+
+
+STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes);
+// Initialize a rectangle packer to:
+//    pack a rectangle that is 'width' by 'height' in dimensions
+//    using temporary storage provided by the array 'nodes', which is 'num_nodes' long
+//
+// You must call this function every time you start packing into a new target.
+//
+// There is no "shutdown" function. The 'nodes' memory must stay valid for
+// the following stbrp_pack_rects() call (or calls), but can be freed after
+// the call (or calls) finish.
+//
+// Note: to guarantee best results, either:
+//       1. make sure 'num_nodes' >= 'width'
+//   or  2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
+//
+// If you don't do either of the above things, widths will be quantized to multiples
+// of small integers to guarantee the algorithm doesn't run out of temporary storage.
+//
+// If you do #2, then the non-quantized algorithm will be used, but the algorithm
+// may run out of temporary storage and be unable to pack some rectangles.
+
+STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem);
+// Optionally call this function after init but before doing any packing to
+// change the handling of the out-of-temp-memory scenario, described above.
+// If you call init again, this will be reset to the default (false).
+
+
+STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic);
+// Optionally select which packing heuristic the library should use. Different
+// heuristics will produce better/worse results for different data sets.
+// If you call init again, this will be reset to the default.
+
+enum
+{
+   STBRP_HEURISTIC_Skyline_default=0,
+   STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
+   STBRP_HEURISTIC_Skyline_BF_sortHeight
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// the details of the following structures don't matter to you, but they must
+// be visible so you can handle the memory allocations for them
+
+struct stbrp_node
+{
+   stbrp_coord  x,y;
+   stbrp_node  *next;
+};
+
+struct stbrp_context
+{
+   int width;
+   int height;
+   int align;
+   int init_mode;
+   int heuristic;
+   int num_nodes;
+   stbrp_node *active_head;
+   stbrp_node *free_head;
+   stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//     IMPLEMENTATION SECTION
+//
+
+#ifdef STB_RECT_PACK_IMPLEMENTATION
+#ifndef STBRP_SORT
+#include <stdlib.h>
+#define STBRP_SORT qsort
+#endif
+
+#ifndef STBRP_ASSERT
+#include <assert.h>
+#define STBRP_ASSERT assert
+#endif
+
+// [DEAR IMGUI] Added STBRP__CDECL
+#ifdef _MSC_VER
+#define STBRP__NOTUSED(v)  (void)(v)
+#define STBRP__CDECL __cdecl
+#else
+#define STBRP__NOTUSED(v)  (void)sizeof(v)
+#define STBRP__CDECL
+#endif
+
+enum
+{
+   STBRP__INIT_skyline = 1
+};
+
+STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
+{
+   switch (context->init_mode) {
+      case STBRP__INIT_skyline:
+         STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
+         context->heuristic = heuristic;
+         break;
+      default:
+         STBRP_ASSERT(0);
+   }
+}
+
+STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem)
+{
+   if (allow_out_of_mem)
+      // if it's ok to run out of memory, then don't bother aligning them;
+      // this gives better packing, but may fail due to OOM (even though
+      // the rectangles easily fit). @TODO a smarter approach would be to only
+      // quantize once we've hit OOM, then we could get rid of this parameter.
+      context->align = 1;
+   else {
+      // if it's not ok to run out of memory, then quantize the widths
+      // so that num_nodes is always enough nodes.
+      //
+      // I.e. num_nodes * align >= width
+      //                  align >= width / num_nodes
+      //                  align = ceil(width/num_nodes)
+
+      context->align = (context->width + context->num_nodes-1) / context->num_nodes;
+   }
+}
+
+STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
+{
+   int i;
+#ifndef STBRP_LARGE_RECTS
+   STBRP_ASSERT(width <= 0xffff && height <= 0xffff);
+#endif
+
+   for (i=0; i < num_nodes-1; ++i)
+      nodes[i].next = &nodes[i+1];
+   nodes[i].next = NULL;
+   context->init_mode = STBRP__INIT_skyline;
+   context->heuristic = STBRP_HEURISTIC_Skyline_default;
+   context->free_head = &nodes[0];
+   context->active_head = &context->extra[0];
+   context->width = width;
+   context->height = height;
+   context->num_nodes = num_nodes;
+   stbrp_setup_allow_out_of_mem(context, 0);
+
+   // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
+   context->extra[0].x = 0;
+   context->extra[0].y = 0;
+   context->extra[0].next = &context->extra[1];
+   context->extra[1].x = (stbrp_coord) width;
+#ifdef STBRP_LARGE_RECTS
+   context->extra[1].y = (1<<30);
+#else
+   context->extra[1].y = 65535;
+#endif
+   context->extra[1].next = NULL;
+}
+
+// find minimum y position if it starts at x1
+static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste)
+{
+   stbrp_node *node = first;
+   int x1 = x0 + width;
+   int min_y, visited_width, waste_area;
+
+   STBRP__NOTUSED(c);
+
+   STBRP_ASSERT(first->x <= x0);
+
+   #if 0
+   // skip in case we're past the node
+   while (node->next->x <= x0)
+      ++node;
+   #else
+   STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
+   #endif
+
+   STBRP_ASSERT(node->x <= x0);
+
+   min_y = 0;
+   waste_area = 0;
+   visited_width = 0;
+   while (node->x < x1) {
+      if (node->y > min_y) {
+         // raise min_y higher.
+         // we've accounted for all waste up to min_y,
+         // but we'll now add more waste for everything we've visted
+         waste_area += visited_width * (node->y - min_y);
+         min_y = node->y;
+         // the first time through, visited_width might be reduced
+         if (node->x < x0)
+            visited_width += node->next->x - x0;
+         else
+            visited_width += node->next->x - node->x;
+      } else {
+         // add waste area
+         int under_width = node->next->x - node->x;
+         if (under_width + visited_width > width)
+            under_width = width - visited_width;
+         waste_area += under_width * (min_y - node->y);
+         visited_width += under_width;
+      }
+      node = node->next;
+   }
+
+   *pwaste = waste_area;
+   return min_y;
+}
+
+typedef struct
+{
+   int x,y;
+   stbrp_node **prev_link;
+} stbrp__findresult;
+
+static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height)
+{
+   int best_waste = (1<<30), best_x, best_y = (1 << 30);
+   stbrp__findresult fr;
+   stbrp_node **prev, *node, *tail, **best = NULL;
+
+   // align to multiple of c->align
+   width = (width + c->align - 1);
+   width -= width % c->align;
+   STBRP_ASSERT(width % c->align == 0);
+
+   // if it can't possibly fit, bail immediately
+   if (width > c->width || height > c->height) {
+      fr.prev_link = NULL;
+      fr.x = fr.y = 0;
+      return fr;
+   }
+
+   node = c->active_head;
+   prev = &c->active_head;
+   while (node->x + width <= c->width) {
+      int y,waste;
+      y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
+      if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL
+         // bottom left
+         if (y < best_y) {
+            best_y = y;
+            best = prev;
+         }
+      } else {
+         // best-fit
+         if (y + height <= c->height) {
+            // can only use it if it first vertically
+            if (y < best_y || (y == best_y && waste < best_waste)) {
+               best_y = y;
+               best_waste = waste;
+               best = prev;
+            }
+         }
+      }
+      prev = &node->next;
+      node = node->next;
+   }
+
+   best_x = (best == NULL) ? 0 : (*best)->x;
+
+   // if doing best-fit (BF), we also have to try aligning right edge to each node position
+   //
+   // e.g, if fitting
+   //
+   //     ____________________
+   //    |____________________|
+   //
+   //            into
+   //
+   //   |                         |
+   //   |             ____________|
+   //   |____________|
+   //
+   // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
+   //
+   // This makes BF take about 2x the time
+
+   if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
+      tail = c->active_head;
+      node = c->active_head;
+      prev = &c->active_head;
+      // find first node that's admissible
+      while (tail->x < width)
+         tail = tail->next;
+      while (tail) {
+         int xpos = tail->x - width;
+         int y,waste;
+         STBRP_ASSERT(xpos >= 0);
+         // find the left position that matches this
+         while (node->next->x <= xpos) {
+            prev = &node->next;
+            node = node->next;
+         }
+         STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
+         y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
+         if (y + height <= c->height) {
+            if (y <= best_y) {
+               if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
+                  best_x = xpos;
+                  STBRP_ASSERT(y <= best_y);
+                  best_y = y;
+                  best_waste = waste;
+                  best = prev;
+               }
+            }
+         }
+         tail = tail->next;
+      }         
+   }
+
+   fr.prev_link = best;
+   fr.x = best_x;
+   fr.y = best_y;
+   return fr;
+}
+
+static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height)
+{
+   // find best position according to heuristic
+   stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
+   stbrp_node *node, *cur;
+
+   // bail if:
+   //    1. it failed
+   //    2. the best node doesn't fit (we don't always check this)
+   //    3. we're out of memory
+   if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
+      res.prev_link = NULL;
+      return res;
+   }
+
+   // on success, create new node
+   node = context->free_head;
+   node->x = (stbrp_coord) res.x;
+   node->y = (stbrp_coord) (res.y + height);
+
+   context->free_head = node->next;
+
+   // insert the new node into the right starting point, and
+   // let 'cur' point to the remaining nodes needing to be
+   // stiched back in
+
+   cur = *res.prev_link;
+   if (cur->x < res.x) {
+      // preserve the existing one, so start testing with the next one
+      stbrp_node *next = cur->next;
+      cur->next = node;
+      cur = next;
+   } else {
+      *res.prev_link = node;
+   }
+
+   // from here, traverse cur and free the nodes, until we get to one
+   // that shouldn't be freed
+   while (cur->next && cur->next->x <= res.x + width) {
+      stbrp_node *next = cur->next;
+      // move the current node to the free list
+      cur->next = context->free_head;
+      context->free_head = cur;
+      cur = next;
+   }
+
+   // stitch the list back in
+   node->next = cur;
+
+   if (cur->x < res.x + width)
+      cur->x = (stbrp_coord) (res.x + width);
+
+#ifdef _DEBUG
+   cur = context->active_head;
+   while (cur->x < context->width) {
+      STBRP_ASSERT(cur->x < cur->next->x);
+      cur = cur->next;
+   }
+   STBRP_ASSERT(cur->next == NULL);
+
+   {
+      int count=0;
+      cur = context->active_head;
+      while (cur) {
+         cur = cur->next;
+         ++count;
+      }
+      cur = context->free_head;
+      while (cur) {
+         cur = cur->next;
+         ++count;
+      }
+      STBRP_ASSERT(count == context->num_nodes+2);
+   }
+#endif
+
+   return res;
+}
+
+// [DEAR IMGUI] Added STBRP__CDECL
+static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
+{
+   const stbrp_rect *p = (const stbrp_rect *) a;
+   const stbrp_rect *q = (const stbrp_rect *) b;
+   if (p->h > q->h)
+      return -1;
+   if (p->h < q->h)
+      return  1;
+   return (p->w > q->w) ? -1 : (p->w < q->w);
+}
+
+// [DEAR IMGUI] Added STBRP__CDECL
+static int STBRP__CDECL rect_original_order(const void *a, const void *b)
+{
+   const stbrp_rect *p = (const stbrp_rect *) a;
+   const stbrp_rect *q = (const stbrp_rect *) b;
+   return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
+}
+
+#ifdef STBRP_LARGE_RECTS
+#define STBRP__MAXVAL  0xffffffff
+#else
+#define STBRP__MAXVAL  0xffff
+#endif
+
+STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
+{
+   int i, all_rects_packed = 1;
+
+   // we use the 'was_packed' field internally to allow sorting/unsorting
+   for (i=0; i < num_rects; ++i) {
+      rects[i].was_packed = i;
+   }
+
+   // sort according to heuristic
+   STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
+
+   for (i=0; i < num_rects; ++i) {
+      if (rects[i].w == 0 || rects[i].h == 0) {
+         rects[i].x = rects[i].y = 0;  // empty rect needs no space
+      } else {
+         stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
+         if (fr.prev_link) {
+            rects[i].x = (stbrp_coord) fr.x;
+            rects[i].y = (stbrp_coord) fr.y;
+         } else {
+            rects[i].x = rects[i].y = STBRP__MAXVAL;
+         }
+      }
+   }
+
+   // unsort
+   STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
+
+   // set was_packed flags and all_rects_packed status
+   for (i=0; i < num_rects; ++i) {
+      rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
+      if (!rects[i].was_packed)
+         all_rects_packed = 0;
+   }
+
+   // return the all_rects_packed status
+   return all_rects_packed;
+}
+#endif
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of 
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
+of the Software, and to permit persons to whom the Software is furnished to do 
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
+software, either in source code form or as a compiled binary, for any purpose, 
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this 
+software dedicate any and all copyright interest in the software to the public 
+domain. We make this dedication for the benefit of the public at large and to 
+the detriment of our heirs and successors. We intend this dedication to be an 
+overt act of relinquishment in perpetuity of all present and future rights to 
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
--- /dev/null
+++ b/DoConfig/imgui/imstb_textedit.h
@@ -1,0 +1,1417 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_textedit.h 1.13. 
+// Those changes would need to be pushed into nothings/stb:
+// - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321)
+// Grep for [DEAR IMGUI] to find the changes.
+
+// stb_textedit.h - v1.13  - public domain - Sean Barrett
+// Development of this library was sponsored by RAD Game Tools
+//
+// This C header file implements the guts of a multi-line text-editing
+// widget; you implement display, word-wrapping, and low-level string
+// insertion/deletion, and stb_textedit will map user inputs into
+// insertions & deletions, plus updates to the cursor position,
+// selection state, and undo state.
+//
+// It is intended for use in games and other systems that need to build
+// their own custom widgets and which do not have heavy text-editing
+// requirements (this library is not recommended for use for editing large
+// texts, as its performance does not scale and it has limited undo).
+//
+// Non-trivial behaviors are modelled after Windows text controls.
+// 
+//
+// LICENSE
+//
+// See end of file for license information.
+//
+//
+// DEPENDENCIES
+//
+// Uses the C runtime function 'memmove', which you can override
+// by defining STB_TEXTEDIT_memmove before the implementation.
+// Uses no other functions. Performs no runtime allocations.
+//
+//
+// VERSION HISTORY
+//
+//   1.13 (2019-02-07) fix bug in undo size management
+//   1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash
+//   1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield
+//   1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual
+//   1.9  (2016-08-27) customizable move-by-word
+//   1.8  (2016-04-02) better keyboard handling when mouse button is down
+//   1.7  (2015-09-13) change y range handling in case baseline is non-0
+//   1.6  (2015-04-15) allow STB_TEXTEDIT_memmove
+//   1.5  (2014-09-10) add support for secondary keys for OS X
+//   1.4  (2014-08-17) fix signed/unsigned warnings
+//   1.3  (2014-06-19) fix mouse clicking to round to nearest char boundary
+//   1.2  (2014-05-27) fix some RAD types that had crept into the new code
+//   1.1  (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE )
+//   1.0  (2012-07-26) improve documentation, initial public release
+//   0.3  (2012-02-24) bugfixes, single-line mode; insert mode
+//   0.2  (2011-11-28) fixes to undo/redo
+//   0.1  (2010-07-08) initial version
+//
+// ADDITIONAL CONTRIBUTORS
+//
+//   Ulf Winklemann: move-by-word in 1.1
+//   Fabian Giesen: secondary key inputs in 1.5
+//   Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6
+//
+//   Bugfixes:
+//      Scott Graham
+//      Daniel Keller
+//      Omar Cornut
+//      Dan Thompson
+//
+// USAGE
+//
+// This file behaves differently depending on what symbols you define
+// before including it.
+//
+//
+// Header-file mode:
+//
+//   If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this,
+//   it will operate in "header file" mode. In this mode, it declares a
+//   single public symbol, STB_TexteditState, which encapsulates the current
+//   state of a text widget (except for the string, which you will store
+//   separately).
+//
+//   To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a
+//   primitive type that defines a single character (e.g. char, wchar_t, etc).
+//
+//   To save space or increase undo-ability, you can optionally define the
+//   following things that are used by the undo system:
+//
+//      STB_TEXTEDIT_POSITIONTYPE         small int type encoding a valid cursor position
+//      STB_TEXTEDIT_UNDOSTATECOUNT       the number of undo states to allow
+//      STB_TEXTEDIT_UNDOCHARCOUNT        the number of characters to store in the undo buffer
+//
+//   If you don't define these, they are set to permissive types and
+//   moderate sizes. The undo system does no memory allocations, so
+//   it grows STB_TexteditState by the worst-case storage which is (in bytes):
+//
+//        [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATE_COUNT
+//      +          sizeof(STB_TEXTEDIT_CHARTYPE)      * STB_TEXTEDIT_UNDOCHAR_COUNT
+//
+//
+// Implementation mode:
+//
+//   If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it
+//   will compile the implementation of the text edit widget, depending
+//   on a large number of symbols which must be defined before the include.
+//
+//   The implementation is defined only as static functions. You will then
+//   need to provide your own APIs in the same file which will access the
+//   static functions.
+//
+//   The basic concept is that you provide a "string" object which
+//   behaves like an array of characters. stb_textedit uses indices to
+//   refer to positions in the string, implicitly representing positions
+//   in the displayed textedit. This is true for both plain text and
+//   rich text; even with rich text stb_truetype interacts with your
+//   code as if there was an array of all the displayed characters.
+//
+// Symbols that must be the same in header-file and implementation mode:
+//
+//     STB_TEXTEDIT_CHARTYPE             the character type
+//     STB_TEXTEDIT_POSITIONTYPE         small type that is a valid cursor position
+//     STB_TEXTEDIT_UNDOSTATECOUNT       the number of undo states to allow
+//     STB_TEXTEDIT_UNDOCHARCOUNT        the number of characters to store in the undo buffer
+//
+// Symbols you must define for implementation mode:
+//
+//    STB_TEXTEDIT_STRING               the type of object representing a string being edited,
+//                                      typically this is a wrapper object with other data you need
+//
+//    STB_TEXTEDIT_STRINGLEN(obj)       the length of the string (ideally O(1))
+//    STB_TEXTEDIT_LAYOUTROW(&r,obj,n)  returns the results of laying out a line of characters
+//                                        starting from character #n (see discussion below)
+//    STB_TEXTEDIT_GETWIDTH(obj,n,i)    returns the pixel delta from the xpos of the i'th character
+//                                        to the xpos of the i+1'th char for a line of characters
+//                                        starting at character #n (i.e. accounts for kerning
+//                                        with previous char)
+//    STB_TEXTEDIT_KEYTOTEXT(k)         maps a keyboard input to an insertable character
+//                                        (return type is int, -1 means not valid to insert)
+//    STB_TEXTEDIT_GETCHAR(obj,i)       returns the i'th character of obj, 0-based
+//    STB_TEXTEDIT_NEWLINE              the character returned by _GETCHAR() we recognize
+//                                        as manually wordwrapping for end-of-line positioning
+//
+//    STB_TEXTEDIT_DELETECHARS(obj,i,n)      delete n characters starting at i
+//    STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n)   insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*)
+//
+//    STB_TEXTEDIT_K_SHIFT       a power of two that is or'd in to a keyboard input to represent the shift key
+//
+//    STB_TEXTEDIT_K_LEFT        keyboard input to move cursor left
+//    STB_TEXTEDIT_K_RIGHT       keyboard input to move cursor right
+//    STB_TEXTEDIT_K_UP          keyboard input to move cursor up
+//    STB_TEXTEDIT_K_DOWN        keyboard input to move cursor down
+//    STB_TEXTEDIT_K_LINESTART   keyboard input to move cursor to start of line  // e.g. HOME
+//    STB_TEXTEDIT_K_LINEEND     keyboard input to move cursor to end of line    // e.g. END
+//    STB_TEXTEDIT_K_TEXTSTART   keyboard input to move cursor to start of text  // e.g. ctrl-HOME
+//    STB_TEXTEDIT_K_TEXTEND     keyboard input to move cursor to end of text    // e.g. ctrl-END
+//    STB_TEXTEDIT_K_DELETE      keyboard input to delete selection or character under cursor
+//    STB_TEXTEDIT_K_BACKSPACE   keyboard input to delete selection or character left of cursor
+//    STB_TEXTEDIT_K_UNDO        keyboard input to perform undo
+//    STB_TEXTEDIT_K_REDO        keyboard input to perform redo
+//
+// Optional:
+//    STB_TEXTEDIT_K_INSERT              keyboard input to toggle insert mode
+//    STB_TEXTEDIT_IS_SPACE(ch)          true if character is whitespace (e.g. 'isspace'),
+//                                          required for default WORDLEFT/WORDRIGHT handlers
+//    STB_TEXTEDIT_MOVEWORDLEFT(obj,i)   custom handler for WORDLEFT, returns index to move cursor to
+//    STB_TEXTEDIT_MOVEWORDRIGHT(obj,i)  custom handler for WORDRIGHT, returns index to move cursor to
+//    STB_TEXTEDIT_K_WORDLEFT            keyboard input to move cursor left one word // e.g. ctrl-LEFT
+//    STB_TEXTEDIT_K_WORDRIGHT           keyboard input to move cursor right one word // e.g. ctrl-RIGHT
+//    STB_TEXTEDIT_K_LINESTART2          secondary keyboard input to move cursor to start of line
+//    STB_TEXTEDIT_K_LINEEND2            secondary keyboard input to move cursor to end of line
+//    STB_TEXTEDIT_K_TEXTSTART2          secondary keyboard input to move cursor to start of text
+//    STB_TEXTEDIT_K_TEXTEND2            secondary keyboard input to move cursor to end of text
+//
+// Todo:
+//    STB_TEXTEDIT_K_PGUP        keyboard input to move cursor up a page
+//    STB_TEXTEDIT_K_PGDOWN      keyboard input to move cursor down a page
+//
+// Keyboard input must be encoded as a single integer value; e.g. a character code
+// and some bitflags that represent shift states. to simplify the interface, SHIFT must
+// be a bitflag, so we can test the shifted state of cursor movements to allow selection,
+// i.e. (STB_TEXTED_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow.
+//
+// You can encode other things, such as CONTROL or ALT, in additional bits, and
+// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example,
+// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN
+// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit,
+// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the
+// API below. The control keys will only match WM_KEYDOWN events because of the
+// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN
+// bit so it only decodes WM_CHAR events.
+//
+// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed
+// row of characters assuming they start on the i'th character--the width and
+// the height and the number of characters consumed. This allows this library
+// to traverse the entire layout incrementally. You need to compute word-wrapping
+// here.
+//
+// Each textfield keeps its own insert mode state, which is not how normal
+// applications work. To keep an app-wide insert mode, update/copy the
+// "insert_mode" field of STB_TexteditState before/after calling API functions.
+//
+// API
+//
+//    void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
+//
+//    void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+//    void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+//    int  stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+//    int  stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
+//    void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key)
+//
+//    Each of these functions potentially updates the string and updates the
+//    state.
+//
+//      initialize_state:
+//          set the textedit state to a known good default state when initially
+//          constructing the textedit.
+//
+//      click:
+//          call this with the mouse x,y on a mouse down; it will update the cursor
+//          and reset the selection start/end to the cursor point. the x,y must
+//          be relative to the text widget, with (0,0) being the top left.
+//     
+//      drag:
+//          call this with the mouse x,y on a mouse drag/up; it will update the
+//          cursor and the selection end point
+//     
+//      cut:
+//          call this to delete the current selection; returns true if there was
+//          one. you should FIRST copy the current selection to the system paste buffer.
+//          (To copy, just copy the current selection out of the string yourself.)
+//     
+//      paste:
+//          call this to paste text at the current cursor point or over the current
+//          selection if there is one.
+//     
+//      key:
+//          call this for keyboard inputs sent to the textfield. you can use it
+//          for "key down" events or for "translated" key events. if you need to
+//          do both (as in Win32), or distinguish Unicode characters from control
+//          inputs, set a high bit to distinguish the two; then you can define the
+//          various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit
+//          set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is
+//          clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to
+//          anything other type you wante before including.
+//
+//     
+//   When rendering, you can read the cursor position and selection state from
+//   the STB_TexteditState.
+//
+//
+// Notes:
+//
+// This is designed to be usable in IMGUI, so it allows for the possibility of
+// running in an IMGUI that has NOT cached the multi-line layout. For this
+// reason, it provides an interface that is compatible with computing the
+// layout incrementally--we try to make sure we make as few passes through
+// as possible. (For example, to locate the mouse pointer in the text, we
+// could define functions that return the X and Y positions of characters
+// and binary search Y and then X, but if we're doing dynamic layout this
+// will run the layout algorithm many times, so instead we manually search
+// forward in one pass. Similar logic applies to e.g. up-arrow and
+// down-arrow movement.)
+//
+// If it's run in a widget that *has* cached the layout, then this is less
+// efficient, but it's not horrible on modern computers. But you wouldn't
+// want to edit million-line files with it.
+
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+////
+////   Header-file mode
+////
+////
+
+#ifndef INCLUDE_STB_TEXTEDIT_H
+#define INCLUDE_STB_TEXTEDIT_H
+
+////////////////////////////////////////////////////////////////////////
+//
+//     STB_TexteditState
+//
+// Definition of STB_TexteditState which you should store
+// per-textfield; it includes cursor position, selection state,
+// and undo state.
+//
+
+#ifndef STB_TEXTEDIT_UNDOSTATECOUNT
+#define STB_TEXTEDIT_UNDOSTATECOUNT   99
+#endif
+#ifndef STB_TEXTEDIT_UNDOCHARCOUNT
+#define STB_TEXTEDIT_UNDOCHARCOUNT   999
+#endif
+#ifndef STB_TEXTEDIT_CHARTYPE
+#define STB_TEXTEDIT_CHARTYPE        int
+#endif
+#ifndef STB_TEXTEDIT_POSITIONTYPE
+#define STB_TEXTEDIT_POSITIONTYPE    int
+#endif
+
+typedef struct
+{
+   // private data
+   STB_TEXTEDIT_POSITIONTYPE  where;
+   STB_TEXTEDIT_POSITIONTYPE  insert_length;
+   STB_TEXTEDIT_POSITIONTYPE  delete_length;
+   int                        char_storage;
+} StbUndoRecord;
+
+typedef struct
+{
+   // private data
+   StbUndoRecord          undo_rec [STB_TEXTEDIT_UNDOSTATECOUNT];
+   STB_TEXTEDIT_CHARTYPE  undo_char[STB_TEXTEDIT_UNDOCHARCOUNT];
+   short undo_point, redo_point;
+   int undo_char_point, redo_char_point;
+} StbUndoState;
+
+typedef struct
+{
+   /////////////////////
+   //
+   // public data
+   //
+
+   int cursor;
+   // position of the text cursor within the string
+
+   int select_start;          // selection start point
+   int select_end;
+   // selection start and end point in characters; if equal, no selection.
+   // note that start may be less than or greater than end (e.g. when
+   // dragging the mouse, start is where the initial click was, and you
+   // can drag in either direction)
+
+   unsigned char insert_mode;
+   // each textfield keeps its own insert mode state. to keep an app-wide
+   // insert mode, copy this value in/out of the app state
+
+   /////////////////////
+   //
+   // private data
+   //
+   unsigned char cursor_at_end_of_line; // not implemented yet
+   unsigned char initialized;
+   unsigned char has_preferred_x;
+   unsigned char single_line;
+   unsigned char padding1, padding2, padding3;
+   float preferred_x; // this determines where the cursor up/down tries to seek to along x
+   StbUndoState undostate;
+} STB_TexteditState;
+
+
+////////////////////////////////////////////////////////////////////////
+//
+//     StbTexteditRow
+//
+// Result of layout query, used by stb_textedit to determine where
+// the text in each row is.
+
+// result of layout query
+typedef struct
+{
+   float x0,x1;             // starting x location, end x location (allows for align=right, etc)
+   float baseline_y_delta;  // position of baseline relative to previous row's baseline
+   float ymin,ymax;         // height of row above and below baseline
+   int num_chars;
+} StbTexteditRow;
+#endif //INCLUDE_STB_TEXTEDIT_H
+
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+////
+////   Implementation mode
+////
+////
+
+
+// implementation isn't include-guarded, since it might have indirectly
+// included just the "header" portion
+#ifdef STB_TEXTEDIT_IMPLEMENTATION
+
+#ifndef STB_TEXTEDIT_memmove
+#include <string.h>
+#define STB_TEXTEDIT_memmove memmove
+#endif
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//      Mouse input handling
+//
+
+// traverse the layout to locate the nearest character to a display position
+static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y)
+{
+   StbTexteditRow r;
+   int n = STB_TEXTEDIT_STRINGLEN(str);
+   float base_y = 0, prev_x;
+   int i=0, k;
+
+   r.x0 = r.x1 = 0;
+   r.ymin = r.ymax = 0;
+   r.num_chars = 0;
+
+   // search rows to find one that straddles 'y'
+   while (i < n) {
+      STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+      if (r.num_chars <= 0)
+         return n;
+
+      if (i==0 && y < base_y + r.ymin)
+         return 0;
+
+      if (y < base_y + r.ymax)
+         break;
+
+      i += r.num_chars;
+      base_y += r.baseline_y_delta;
+   }
+
+   // below all text, return 'after' last character
+   if (i >= n)
+      return n;
+
+   // check if it's before the beginning of the line
+   if (x < r.x0)
+      return i;
+
+   // check if it's before the end of the line
+   if (x < r.x1) {
+      // search characters in row for one that straddles 'x'
+      prev_x = r.x0;
+      for (k=0; k < r.num_chars; ++k) {
+         float w = STB_TEXTEDIT_GETWIDTH(str, i, k);
+         if (x < prev_x+w) {
+            if (x < prev_x+w/2)
+               return k+i;
+            else
+               return k+i+1;
+         }
+         prev_x += w;
+      }
+      // shouldn't happen, but if it does, fall through to end-of-line case
+   }
+
+   // if the last character is a newline, return that. otherwise return 'after' the last character
+   if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE)
+      return i+r.num_chars-1;
+   else
+      return i+r.num_chars;
+}
+
+// API click: on mouse down, move the cursor to the clicked location, and reset the selection
+static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+{
+   // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
+   // goes off the top or bottom of the text
+   if( state->single_line )
+   {
+      StbTexteditRow r;
+      STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+      y = r.ymin;
+   }
+
+   state->cursor = stb_text_locate_coord(str, x, y);
+   state->select_start = state->cursor;
+   state->select_end = state->cursor;
+   state->has_preferred_x = 0;
+}
+
+// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location
+static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+{
+   int p = 0;
+
+   // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
+   // goes off the top or bottom of the text
+   if( state->single_line )
+   {
+      StbTexteditRow r;
+      STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+      y = r.ymin;
+   }
+
+   if (state->select_start == state->select_end)
+      state->select_start = state->cursor;
+
+   p = stb_text_locate_coord(str, x, y);
+   state->cursor = state->select_end = p;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//      Keyboard input handling
+//
+
+// forward declarations
+static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
+static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
+static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length);
+static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length);
+static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length);
+
+typedef struct
+{
+   float x,y;    // position of n'th character
+   float height; // height of line
+   int first_char, length; // first char of row, and length
+   int prev_first;  // first char of previous row
+} StbFindState;
+
+// find the x/y location of a character, and remember info about the previous row in
+// case we get a move-up event (for page up, we'll have to rescan)
+static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line)
+{
+   StbTexteditRow r;
+   int prev_start = 0;
+   int z = STB_TEXTEDIT_STRINGLEN(str);
+   int i=0, first;
+
+   if (n == z) {
+      // if it's at the end, then find the last line -- simpler than trying to
+      // explicitly handle this case in the regular code
+      if (single_line) {
+         STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+         find->y = 0;
+         find->first_char = 0;
+         find->length = z;
+         find->height = r.ymax - r.ymin;
+         find->x = r.x1;
+      } else {
+         find->y = 0;
+         find->x = 0;
+         find->height = 1;
+         while (i < z) {
+            STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+            prev_start = i;
+            i += r.num_chars;
+         }
+         find->first_char = i;
+         find->length = 0;
+         find->prev_first = prev_start;
+      }
+      return;
+   }
+
+   // search rows to find the one that straddles character n
+   find->y = 0;
+
+   for(;;) {
+      STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+      if (n < i + r.num_chars)
+         break;
+      prev_start = i;
+      i += r.num_chars;
+      find->y += r.baseline_y_delta;
+   }
+
+   find->first_char = first = i;
+   find->length = r.num_chars;
+   find->height = r.ymax - r.ymin;
+   find->prev_first = prev_start;
+
+   // now scan to find xpos
+   find->x = r.x0;
+   for (i=0; first+i < n; ++i)
+      find->x += STB_TEXTEDIT_GETWIDTH(str, first, i);
+}
+
+#define STB_TEXT_HAS_SELECTION(s)   ((s)->select_start != (s)->select_end)
+
+// make the selection/cursor state valid if client altered the string
+static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   int n = STB_TEXTEDIT_STRINGLEN(str);
+   if (STB_TEXT_HAS_SELECTION(state)) {
+      if (state->select_start > n) state->select_start = n;
+      if (state->select_end   > n) state->select_end = n;
+      // if clamping forced them to be equal, move the cursor to match
+      if (state->select_start == state->select_end)
+         state->cursor = state->select_start;
+   }
+   if (state->cursor > n) state->cursor = n;
+}
+
+// delete characters while updating undo
+static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len)
+{
+   stb_text_makeundo_delete(str, state, where, len);
+   STB_TEXTEDIT_DELETECHARS(str, where, len);
+   state->has_preferred_x = 0;
+}
+
+// delete the section
+static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   stb_textedit_clamp(str, state);
+   if (STB_TEXT_HAS_SELECTION(state)) {
+      if (state->select_start < state->select_end) {
+         stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start);
+         state->select_end = state->cursor = state->select_start;
+      } else {
+         stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end);
+         state->select_start = state->cursor = state->select_end;
+      }
+      state->has_preferred_x = 0;
+   }
+}
+
+// canoncialize the selection so start <= end
+static void stb_textedit_sortselection(STB_TexteditState *state)
+{
+   if (state->select_end < state->select_start) {
+      int temp = state->select_end;
+      state->select_end = state->select_start;
+      state->select_start = temp;
+   }
+}
+
+// move cursor to first character of selection
+static void stb_textedit_move_to_first(STB_TexteditState *state)
+{
+   if (STB_TEXT_HAS_SELECTION(state)) {
+      stb_textedit_sortselection(state);
+      state->cursor = state->select_start;
+      state->select_end = state->select_start;
+      state->has_preferred_x = 0;
+   }
+}
+
+// move cursor to last character of selection
+static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   if (STB_TEXT_HAS_SELECTION(state)) {
+      stb_textedit_sortselection(state);
+      stb_textedit_clamp(str, state);
+      state->cursor = state->select_end;
+      state->select_start = state->select_end;
+      state->has_preferred_x = 0;
+   }
+}
+
+#ifdef STB_TEXTEDIT_IS_SPACE
+static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
+{
+   return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1;
+}
+
+#ifndef STB_TEXTEDIT_MOVEWORDLEFT
+static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c )
+{
+   --c; // always move at least one character
+   while( c >= 0 && !is_word_boundary( str, c ) )
+      --c;
+
+   if( c < 0 )
+      c = 0;
+
+   return c;
+}
+#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous
+#endif
+
+#ifndef STB_TEXTEDIT_MOVEWORDRIGHT
+static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c )
+{
+   const int len = STB_TEXTEDIT_STRINGLEN(str);
+   ++c; // always move at least one character
+   while( c < len && !is_word_boundary( str, c ) )
+      ++c;
+
+   if( c > len )
+      c = len;
+
+   return c;
+}
+#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next
+#endif
+
+#endif
+
+// update selection and cursor to match each other
+static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
+{
+   if (!STB_TEXT_HAS_SELECTION(state))
+      state->select_start = state->select_end = state->cursor;
+   else
+      state->cursor = state->select_end;
+}
+
+// API cut: delete selection
+static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   if (STB_TEXT_HAS_SELECTION(state)) {
+      stb_textedit_delete_selection(str,state); // implicitly clamps
+      state->has_preferred_x = 0;
+      return 1;
+   }
+   return 0;
+}
+
+// API paste: replace existing selection with passed-in text
+static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
+{
+   // if there's a selection, the paste should delete it
+   stb_textedit_clamp(str, state);
+   stb_textedit_delete_selection(str,state);
+   // try to insert the characters
+   if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) {
+      stb_text_makeundo_insert(state, state->cursor, len);
+      state->cursor += len;
+      state->has_preferred_x = 0;
+      return 1;
+   }
+   // remove the undo since we didn't actually insert the characters
+   if (state->undostate.undo_point)
+      --state->undostate.undo_point;
+   return 0;
+}
+
+#ifndef STB_TEXTEDIT_KEYTYPE
+#define STB_TEXTEDIT_KEYTYPE int
+#endif
+
+// API key: process a keyboard input
+static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key)
+{
+retry:
+   switch (key) {
+      default: {
+         int c = STB_TEXTEDIT_KEYTOTEXT(key);
+         if (c > 0) {
+            STB_TEXTEDIT_CHARTYPE ch = (STB_TEXTEDIT_CHARTYPE) c;
+
+            // can't add newline in single-line mode
+            if (c == '\n' && state->single_line)
+               break;
+
+            if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) {
+               stb_text_makeundo_replace(str, state, state->cursor, 1, 1);
+               STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1);
+               if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
+                  ++state->cursor;
+                  state->has_preferred_x = 0;
+               }
+            } else {
+               stb_textedit_delete_selection(str,state); // implicitly clamps
+               if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
+                  stb_text_makeundo_insert(state, state->cursor, 1);
+                  ++state->cursor;
+                  state->has_preferred_x = 0;
+               }
+            }
+         }
+         break;
+      }
+
+#ifdef STB_TEXTEDIT_K_INSERT
+      case STB_TEXTEDIT_K_INSERT:
+         state->insert_mode = !state->insert_mode;
+         break;
+#endif
+         
+      case STB_TEXTEDIT_K_UNDO:
+         stb_text_undo(str, state);
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_REDO:
+         stb_text_redo(str, state);
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_LEFT:
+         // if currently there's a selection, move cursor to start of selection
+         if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_move_to_first(state);
+         else 
+            if (state->cursor > 0)
+               --state->cursor;
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_RIGHT:
+         // if currently there's a selection, move cursor to end of selection
+         if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_move_to_last(str, state);
+         else
+            ++state->cursor;
+         stb_textedit_clamp(str, state);
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT:
+         stb_textedit_clamp(str, state);
+         stb_textedit_prep_selection_at_cursor(state);
+         // move selection left
+         if (state->select_end > 0)
+            --state->select_end;
+         state->cursor = state->select_end;
+         state->has_preferred_x = 0;
+         break;
+
+#ifdef STB_TEXTEDIT_MOVEWORDLEFT
+      case STB_TEXTEDIT_K_WORDLEFT:
+         if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_move_to_first(state);
+         else {
+            state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
+            stb_textedit_clamp( str, state );
+         }
+         break;
+
+      case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT:
+         if( !STB_TEXT_HAS_SELECTION( state ) )
+            stb_textedit_prep_selection_at_cursor(state);
+
+         state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
+         state->select_end = state->cursor;
+
+         stb_textedit_clamp( str, state );
+         break;
+#endif
+
+#ifdef STB_TEXTEDIT_MOVEWORDRIGHT
+      case STB_TEXTEDIT_K_WORDRIGHT:
+         if (STB_TEXT_HAS_SELECTION(state)) 
+            stb_textedit_move_to_last(str, state);
+         else {
+            state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
+            stb_textedit_clamp( str, state );
+         }
+         break;
+
+      case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT:
+         if( !STB_TEXT_HAS_SELECTION( state ) )
+            stb_textedit_prep_selection_at_cursor(state);
+
+         state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
+         state->select_end = state->cursor;
+
+         stb_textedit_clamp( str, state );
+         break;
+#endif
+
+      case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT:
+         stb_textedit_prep_selection_at_cursor(state);
+         // move selection right
+         ++state->select_end;
+         stb_textedit_clamp(str, state);
+         state->cursor = state->select_end;
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_DOWN:
+      case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT: {
+         StbFindState find;
+         StbTexteditRow row;
+         int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
+
+         if (state->single_line) {
+            // on windows, up&down in single-line behave like left&right
+            key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT);
+            goto retry;
+         }
+
+         if (sel)
+            stb_textedit_prep_selection_at_cursor(state);
+         else if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_move_to_last(str,state);
+
+         // compute current position of cursor point
+         stb_textedit_clamp(str, state);
+         stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
+
+         // now find character position down a row
+         if (find.length) {
+            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
+            float x;
+            int start = find.first_char + find.length;
+            state->cursor = start;
+            STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
+            x = row.x0;
+            for (i=0; i < row.num_chars; ++i) {
+               float dx = STB_TEXTEDIT_GETWIDTH(str, start, i);
+               #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
+               if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
+                  break;
+               #endif
+               x += dx;
+               if (x > goal_x)
+                  break;
+               ++state->cursor;
+            }
+            stb_textedit_clamp(str, state);
+
+            state->has_preferred_x = 1;
+            state->preferred_x = goal_x;
+
+            if (sel)
+               state->select_end = state->cursor;
+         }
+         break;
+      }
+         
+      case STB_TEXTEDIT_K_UP:
+      case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: {
+         StbFindState find;
+         StbTexteditRow row;
+         int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
+
+         if (state->single_line) {
+            // on windows, up&down become left&right
+            key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT);
+            goto retry;
+         }
+
+         if (sel)
+            stb_textedit_prep_selection_at_cursor(state);
+         else if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_move_to_first(state);
+
+         // compute current position of cursor point
+         stb_textedit_clamp(str, state);
+         stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
+
+         // can only go up if there's a previous row
+         if (find.prev_first != find.first_char) {
+            // now find character position up a row
+            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
+            float x;
+            state->cursor = find.prev_first;
+            STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
+            x = row.x0;
+            for (i=0; i < row.num_chars; ++i) {
+               float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i);
+               #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
+               if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
+                  break;
+               #endif
+               x += dx;
+               if (x > goal_x)
+                  break;
+               ++state->cursor;
+            }
+            stb_textedit_clamp(str, state);
+
+            state->has_preferred_x = 1;
+            state->preferred_x = goal_x;
+
+            if (sel)
+               state->select_end = state->cursor;
+         }
+         break;
+      }
+
+      case STB_TEXTEDIT_K_DELETE:
+      case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT:
+         if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_delete_selection(str, state);
+         else {
+            int n = STB_TEXTEDIT_STRINGLEN(str);
+            if (state->cursor < n)
+               stb_textedit_delete(str, state, state->cursor, 1);
+         }
+         state->has_preferred_x = 0;
+         break;
+
+      case STB_TEXTEDIT_K_BACKSPACE:
+      case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT:
+         if (STB_TEXT_HAS_SELECTION(state))
+            stb_textedit_delete_selection(str, state);
+         else {
+            stb_textedit_clamp(str, state);
+            if (state->cursor > 0) {
+               stb_textedit_delete(str, state, state->cursor-1, 1);
+               --state->cursor;
+            }
+         }
+         state->has_preferred_x = 0;
+         break;
+         
+#ifdef STB_TEXTEDIT_K_TEXTSTART2
+      case STB_TEXTEDIT_K_TEXTSTART2:
+#endif
+      case STB_TEXTEDIT_K_TEXTSTART:
+         state->cursor = state->select_start = state->select_end = 0;
+         state->has_preferred_x = 0;
+         break;
+
+#ifdef STB_TEXTEDIT_K_TEXTEND2
+      case STB_TEXTEDIT_K_TEXTEND2:
+#endif
+      case STB_TEXTEDIT_K_TEXTEND:
+         state->cursor = STB_TEXTEDIT_STRINGLEN(str);
+         state->select_start = state->select_end = 0;
+         state->has_preferred_x = 0;
+         break;
+        
+#ifdef STB_TEXTEDIT_K_TEXTSTART2
+      case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+      case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT:
+         stb_textedit_prep_selection_at_cursor(state);
+         state->cursor = state->select_end = 0;
+         state->has_preferred_x = 0;
+         break;
+
+#ifdef STB_TEXTEDIT_K_TEXTEND2
+      case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+      case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT:
+         stb_textedit_prep_selection_at_cursor(state);
+         state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str);
+         state->has_preferred_x = 0;
+         break;
+
+
+#ifdef STB_TEXTEDIT_K_LINESTART2
+      case STB_TEXTEDIT_K_LINESTART2:
+#endif
+      case STB_TEXTEDIT_K_LINESTART:
+         stb_textedit_clamp(str, state);
+         stb_textedit_move_to_first(state);
+         if (state->single_line)
+            state->cursor = 0;
+         else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
+            --state->cursor;
+         state->has_preferred_x = 0;
+         break;
+
+#ifdef STB_TEXTEDIT_K_LINEEND2
+      case STB_TEXTEDIT_K_LINEEND2:
+#endif
+      case STB_TEXTEDIT_K_LINEEND: {
+         int n = STB_TEXTEDIT_STRINGLEN(str);
+         stb_textedit_clamp(str, state);
+         stb_textedit_move_to_first(state);
+         if (state->single_line)
+             state->cursor = n;
+         else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
+             ++state->cursor;
+         state->has_preferred_x = 0;
+         break;
+      }
+
+#ifdef STB_TEXTEDIT_K_LINESTART2
+      case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+      case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT:
+         stb_textedit_clamp(str, state);
+         stb_textedit_prep_selection_at_cursor(state);
+         if (state->single_line)
+            state->cursor = 0;
+         else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
+            --state->cursor;
+         state->select_end = state->cursor;
+         state->has_preferred_x = 0;
+         break;
+
+#ifdef STB_TEXTEDIT_K_LINEEND2
+      case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+      case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: {
+         int n = STB_TEXTEDIT_STRINGLEN(str);
+         stb_textedit_clamp(str, state);
+         stb_textedit_prep_selection_at_cursor(state);
+         if (state->single_line)
+             state->cursor = n;
+         else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
+            ++state->cursor;
+         state->select_end = state->cursor;
+         state->has_preferred_x = 0;
+         break;
+      }
+
+// @TODO:
+//    STB_TEXTEDIT_K_PGUP      - move cursor up a page
+//    STB_TEXTEDIT_K_PGDOWN    - move cursor down a page
+   }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+//      Undo processing
+//
+// @OPTIMIZE: the undo/redo buffer should be circular
+
+static void stb_textedit_flush_redo(StbUndoState *state)
+{
+   state->redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
+   state->redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
+}
+
+// discard the oldest entry in the undo list
+static void stb_textedit_discard_undo(StbUndoState *state)
+{
+   if (state->undo_point > 0) {
+      // if the 0th undo state has characters, clean those up
+      if (state->undo_rec[0].char_storage >= 0) {
+         int n = state->undo_rec[0].insert_length, i;
+         // delete n characters from all other records
+         state->undo_char_point -= n;
+         STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE)));
+         for (i=0; i < state->undo_point; ++i)
+            if (state->undo_rec[i].char_storage >= 0)
+               state->undo_rec[i].char_storage -= n; // @OPTIMIZE: get rid of char_storage and infer it
+      }
+      --state->undo_point;
+      STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0])));
+   }
+}
+
+// discard the oldest entry in the redo list--it's bad if this
+// ever happens, but because undo & redo have to store the actual
+// characters in different cases, the redo character buffer can
+// fill up even though the undo buffer didn't
+static void stb_textedit_discard_redo(StbUndoState *state)
+{
+   int k = STB_TEXTEDIT_UNDOSTATECOUNT-1;
+
+   if (state->redo_point <= k) {
+      // if the k'th undo state has characters, clean those up
+      if (state->undo_rec[k].char_storage >= 0) {
+         int n = state->undo_rec[k].insert_length, i;
+         // move the remaining redo character data to the end of the buffer
+         state->redo_char_point += n;
+         STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE)));
+         // adjust the position of all the other records to account for above memmove
+         for (i=state->redo_point; i < k; ++i)
+            if (state->undo_rec[i].char_storage >= 0)
+               state->undo_rec[i].char_storage += n;
+      }
+      // now move all the redo records towards the end of the buffer; the first one is at 'redo_point'
+      // {DEAR IMGUI]
+      size_t move_size = (size_t)((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point - 1) * sizeof(state->undo_rec[0]));
+      const char* buf_begin = (char*)state->undo_rec; (void)buf_begin;
+      const char* buf_end   = (char*)state->undo_rec + sizeof(state->undo_rec); (void)buf_end;
+      IM_ASSERT(((char*)(state->undo_rec + state->redo_point)) >= buf_begin);
+      IM_ASSERT(((char*)(state->undo_rec + state->redo_point + 1) + move_size) <= buf_end);
+      STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point+1, state->undo_rec + state->redo_point, move_size);
+
+      // now move redo_point to point to the new one
+      ++state->redo_point;
+   }
+}
+
+static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars)
+{
+   // any time we create a new undo record, we discard redo
+   stb_textedit_flush_redo(state);
+
+   // if we have no free records, we have to make room, by sliding the
+   // existing records down
+   if (state->undo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+      stb_textedit_discard_undo(state);
+
+   // if the characters to store won't possibly fit in the buffer, we can't undo
+   if (numchars > STB_TEXTEDIT_UNDOCHARCOUNT) {
+      state->undo_point = 0;
+      state->undo_char_point = 0;
+      return NULL;
+   }
+
+   // if we don't have enough free characters in the buffer, we have to make room
+   while (state->undo_char_point + numchars > STB_TEXTEDIT_UNDOCHARCOUNT)
+      stb_textedit_discard_undo(state);
+
+   return &state->undo_rec[state->undo_point++];
+}
+
+static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len)
+{
+   StbUndoRecord *r = stb_text_create_undo_record(state, insert_len);
+   if (r == NULL)
+      return NULL;
+
+   r->where = pos;
+   r->insert_length = (STB_TEXTEDIT_POSITIONTYPE) insert_len;
+   r->delete_length = (STB_TEXTEDIT_POSITIONTYPE) delete_len;
+
+   if (insert_len == 0) {
+      r->char_storage = -1;
+      return NULL;
+   } else {
+      r->char_storage = state->undo_char_point;
+      state->undo_char_point += insert_len;
+      return &state->undo_char[r->char_storage];
+   }
+}
+
+static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   StbUndoState *s = &state->undostate;
+   StbUndoRecord u, *r;
+   if (s->undo_point == 0)
+      return;
+
+   // we need to do two things: apply the undo record, and create a redo record
+   u = s->undo_rec[s->undo_point-1];
+   r = &s->undo_rec[s->redo_point-1];
+   r->char_storage = -1;
+
+   r->insert_length = u.delete_length;
+   r->delete_length = u.insert_length;
+   r->where = u.where;
+
+   if (u.delete_length) {
+      // if the undo record says to delete characters, then the redo record will
+      // need to re-insert the characters that get deleted, so we need to store
+      // them.
+
+      // there are three cases:
+      //    there's enough room to store the characters
+      //    characters stored for *redoing* don't leave room for redo
+      //    characters stored for *undoing* don't leave room for redo
+      // if the last is true, we have to bail
+
+      if (s->undo_char_point + u.delete_length >= STB_TEXTEDIT_UNDOCHARCOUNT) {
+         // the undo records take up too much character space; there's no space to store the redo characters
+         r->insert_length = 0;
+      } else {
+         int i;
+
+         // there's definitely room to store the characters eventually
+         while (s->undo_char_point + u.delete_length > s->redo_char_point) {
+            // should never happen:
+            if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+               return;
+            // there's currently not enough room, so discard a redo record
+            stb_textedit_discard_redo(s);
+         }
+         r = &s->undo_rec[s->redo_point-1];
+
+         r->char_storage = s->redo_char_point - u.delete_length;
+         s->redo_char_point = s->redo_char_point - u.delete_length;
+
+         // now save the characters
+         for (i=0; i < u.delete_length; ++i)
+            s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i);
+      }
+
+      // now we can carry out the deletion
+      STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length);
+   }
+
+   // check type of recorded action:
+   if (u.insert_length) {
+      // easy case: was a deletion, so we need to insert n characters
+      STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length);
+      s->undo_char_point -= u.insert_length;
+   }
+
+   state->cursor = u.where + u.insert_length;
+
+   s->undo_point--;
+   s->redo_point--;
+}
+
+static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+   StbUndoState *s = &state->undostate;
+   StbUndoRecord *u, r;
+   if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+      return;
+
+   // we need to do two things: apply the redo record, and create an undo record
+   u = &s->undo_rec[s->undo_point];
+   r = s->undo_rec[s->redo_point];
+
+   // we KNOW there must be room for the undo record, because the redo record
+   // was derived from an undo record
+
+   u->delete_length = r.insert_length;
+   u->insert_length = r.delete_length;
+   u->where = r.where;
+   u->char_storage = -1;
+
+   if (r.delete_length) {
+      // the redo record requires us to delete characters, so the undo record
+      // needs to store the characters
+
+      if (s->undo_char_point + u->insert_length > s->redo_char_point) {
+         u->insert_length = 0;
+         u->delete_length = 0;
+      } else {
+         int i;
+         u->char_storage = s->undo_char_point;
+         s->undo_char_point = s->undo_char_point + u->insert_length;
+
+         // now save the characters
+         for (i=0; i < u->insert_length; ++i)
+            s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i);
+      }
+
+      STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length);
+   }
+
+   if (r.insert_length) {
+      // easy case: need to insert n characters
+      STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length);
+      s->redo_char_point += r.insert_length;
+   }
+
+   state->cursor = r.where + r.insert_length;
+
+   s->undo_point++;
+   s->redo_point++;
+}
+
+static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length)
+{
+   stb_text_createundo(&state->undostate, where, 0, length);
+}
+
+static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length)
+{
+   int i;
+   STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0);
+   if (p) {
+      for (i=0; i < length; ++i)
+         p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
+   }
+}
+
+static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length)
+{
+   int i;
+   STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length);
+   if (p) {
+      for (i=0; i < old_length; ++i)
+         p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
+   }
+}
+
+// reset the state to default
+static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line)
+{
+   state->undostate.undo_point = 0;
+   state->undostate.undo_char_point = 0;
+   state->undostate.redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
+   state->undostate.redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
+   state->select_end = state->select_start = 0;
+   state->cursor = 0;
+   state->has_preferred_x = 0;
+   state->preferred_x = 0;
+   state->cursor_at_end_of_line = 0;
+   state->initialized = 1;
+   state->single_line = (unsigned char) is_single_line;
+   state->insert_mode = 0;
+}
+
+// API initialize
+static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
+{
+   stb_textedit_clear_state(state, is_single_line);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+
+static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len)
+{
+   return stb_textedit_paste_internal(str, state, (STB_TEXTEDIT_CHARTYPE *) ctext, len);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif//STB_TEXTEDIT_IMPLEMENTATION
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of 
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
+of the Software, and to permit persons to whom the Software is furnished to do 
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
+software, either in source code form or as a compiled binary, for any purpose, 
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this 
+software dedicate any and all copyright interest in the software to the public 
+domain. We make this dedication for the benefit of the public at large and to 
+the detriment of our heirs and successors. We intend this dedication to be an 
+overt act of relinquishment in perpetuity of all present and future rights to 
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
--- /dev/null
+++ b/DoConfig/imgui/imstb_truetype.h
@@ -1,0 +1,4903 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_truetype.h 1.20.
+// Mostly fixing for compiler and static analyzer warnings.
+// Grep for [DEAR IMGUI] to find the changes.
+
+// stb_truetype.h - v1.20 - public domain
+// authored from 2009-2016 by Sean Barrett / RAD Game Tools
+//
+//   This library processes TrueType files:
+//        parse files
+//        extract glyph metrics
+//        extract glyph shapes
+//        render glyphs to one-channel bitmaps with antialiasing (box filter)
+//        render glyphs to one-channel SDF bitmaps (signed-distance field/function)
+//
+//   Todo:
+//        non-MS cmaps
+//        crashproof on bad data
+//        hinting? (no longer patented)
+//        cleartype-style AA?
+//        optimize: use simple memory allocator for intermediates
+//        optimize: build edge-list directly from curves
+//        optimize: rasterize directly from curves?
+//
+// ADDITIONAL CONTRIBUTORS
+//
+//   Mikko Mononen: compound shape support, more cmap formats
+//   Tor Andersson: kerning, subpixel rendering
+//   Dougall Johnson: OpenType / Type 2 font handling
+//   Daniel Ribeiro Maciel: basic GPOS-based kerning
+//
+//   Misc other:
+//       Ryan Gordon
+//       Simon Glass
+//       github:IntellectualKitty
+//       Imanol Celaya
+//       Daniel Ribeiro Maciel
+//
+//   Bug/warning reports/fixes:
+//       "Zer" on mollyrocket       Fabian "ryg" Giesen
+//       Cass Everitt               Martins Mozeiko
+//       stoiko (Haemimont Games)   Cap Petschulat
+//       Brian Hook                 Omar Cornut
+//       Walter van Niftrik         github:aloucks
+//       David Gow                  Peter LaValle
+//       David Given                Sergey Popov
+//       Ivan-Assen Ivanov          Giumo X. Clanjor
+//       Anthony Pesch              Higor Euripedes
+//       Johan Duparc               Thomas Fields
+//       Hou Qiming                 Derek Vinyard
+//       Rob Loach                  Cort Stratton
+//       Kenney Phillis Jr.         github:oyvindjam
+//       Brian Costabile            github:vassvik
+//       
+// VERSION HISTORY
+//
+//   1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
+//   1.19 (2018-02-11) GPOS kerning, STBTT_fmod
+//   1.18 (2018-01-29) add missing function
+//   1.17 (2017-07-23) make more arguments const; doc fix
+//   1.16 (2017-07-12) SDF support
+//   1.15 (2017-03-03) make more arguments const
+//   1.14 (2017-01-16) num-fonts-in-TTC function
+//   1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
+//   1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
+//   1.11 (2016-04-02) fix unused-variable warning
+//   1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef
+//   1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly
+//   1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
+//   1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
+//                     variant PackFontRanges to pack and render in separate phases;
+//                     fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
+//                     fixed an assert() bug in the new rasterizer
+//                     replace assert() with STBTT_assert() in new rasterizer
+//
+//   Full history can be found at the end of this file.
+//
+// LICENSE
+//
+//   See end of file for license information.
+//
+// USAGE
+//
+//   Include this file in whatever places need to refer to it. In ONE C/C++
+//   file, write:
+//      #define STB_TRUETYPE_IMPLEMENTATION
+//   before the #include of this file. This expands out the actual
+//   implementation into that C/C++ file.
+//
+//   To make the implementation private to the file that generates the implementation,
+//      #define STBTT_STATIC
+//
+//   Simple 3D API (don't ship this, but it's fine for tools and quick start)
+//           stbtt_BakeFontBitmap()               -- bake a font to a bitmap for use as texture
+//           stbtt_GetBakedQuad()                 -- compute quad to draw for a given char
+//
+//   Improved 3D API (more shippable):
+//           #include "stb_rect_pack.h"           -- optional, but you really want it
+//           stbtt_PackBegin()
+//           stbtt_PackSetOversampling()          -- for improved quality on small fonts
+//           stbtt_PackFontRanges()               -- pack and renders
+//           stbtt_PackEnd()
+//           stbtt_GetPackedQuad()
+//
+//   "Load" a font file from a memory buffer (you have to keep the buffer loaded)
+//           stbtt_InitFont()
+//           stbtt_GetFontOffsetForIndex()        -- indexing for TTC font collections
+//           stbtt_GetNumberOfFonts()             -- number of fonts for TTC font collections
+//
+//   Render a unicode codepoint to a bitmap
+//           stbtt_GetCodepointBitmap()           -- allocates and returns a bitmap
+//           stbtt_MakeCodepointBitmap()          -- renders into bitmap you provide
+//           stbtt_GetCodepointBitmapBox()        -- how big the bitmap must be
+//
+//   Character advance/positioning
+//           stbtt_GetCodepointHMetrics()
+//           stbtt_GetFontVMetrics()
+//           stbtt_GetFontVMetricsOS2()
+//           stbtt_GetCodepointKernAdvance()
+//
+//   Starting with version 1.06, the rasterizer was replaced with a new,
+//   faster and generally-more-precise rasterizer. The new rasterizer more
+//   accurately measures pixel coverage for anti-aliasing, except in the case
+//   where multiple shapes overlap, in which case it overestimates the AA pixel
+//   coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If
+//   this turns out to be a problem, you can re-enable the old rasterizer with
+//        #define STBTT_RASTERIZER_VERSION 1
+//   which will incur about a 15% speed hit.
+//
+// ADDITIONAL DOCUMENTATION
+//
+//   Immediately after this block comment are a series of sample programs.
+//
+//   After the sample programs is the "header file" section. This section
+//   includes documentation for each API function.
+//
+//   Some important concepts to understand to use this library:
+//
+//      Codepoint
+//         Characters are defined by unicode codepoints, e.g. 65 is
+//         uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is
+//         the hiragana for "ma".
+//
+//      Glyph
+//         A visual character shape (every codepoint is rendered as
+//         some glyph)
+//
+//      Glyph index
+//         A font-specific integer ID representing a glyph
+//
+//      Baseline
+//         Glyph shapes are defined relative to a baseline, which is the
+//         bottom of uppercase characters. Characters extend both above
+//         and below the baseline.
+//
+//      Current Point
+//         As you draw text to the screen, you keep track of a "current point"
+//         which is the origin of each character. The current point's vertical
+//         position is the baseline. Even "baked fonts" use this model.
+//
+//      Vertical Font Metrics
+//         The vertical qualities of the font, used to vertically position
+//         and space the characters. See docs for stbtt_GetFontVMetrics.
+//
+//      Font Size in Pixels or Points
+//         The preferred interface for specifying font sizes in stb_truetype
+//         is to specify how tall the font's vertical extent should be in pixels.
+//         If that sounds good enough, skip the next paragraph.
+//
+//         Most font APIs instead use "points", which are a common typographic
+//         measurement for describing font size, defined as 72 points per inch.
+//         stb_truetype provides a point API for compatibility. However, true
+//         "per inch" conventions don't make much sense on computer displays
+//         since different monitors have different number of pixels per
+//         inch. For example, Windows traditionally uses a convention that
+//         there are 96 pixels per inch, thus making 'inch' measurements have
+//         nothing to do with inches, and thus effectively defining a point to
+//         be 1.333 pixels. Additionally, the TrueType font data provides
+//         an explicit scale factor to scale a given font's glyphs to points,
+//         but the author has observed that this scale factor is often wrong
+//         for non-commercial fonts, thus making fonts scaled in points
+//         according to the TrueType spec incoherently sized in practice.
+//
+// DETAILED USAGE:
+//
+//  Scale:
+//    Select how high you want the font to be, in points or pixels.
+//    Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute
+//    a scale factor SF that will be used by all other functions.
+//
+//  Baseline:
+//    You need to select a y-coordinate that is the baseline of where
+//    your text will appear. Call GetFontBoundingBox to get the baseline-relative
+//    bounding box for all characters. SF*-y0 will be the distance in pixels
+//    that the worst-case character could extend above the baseline, so if
+//    you want the top edge of characters to appear at the top of the
+//    screen where y=0, then you would set the baseline to SF*-y0.
+//
+//  Current point:
+//    Set the current point where the first character will appear. The
+//    first character could extend left of the current point; this is font
+//    dependent. You can either choose a current point that is the leftmost
+//    point and hope, or add some padding, or check the bounding box or
+//    left-side-bearing of the first character to be displayed and set
+//    the current point based on that.
+//
+//  Displaying a character:
+//    Compute the bounding box of the character. It will contain signed values
+//    relative to <current_point, baseline>. I.e. if it returns x0,y0,x1,y1,
+//    then the character should be displayed in the rectangle from
+//    <current_point+SF*x0, baseline+SF*y0> to <current_point+SF*x1,baseline+SF*y1).
+//
+//  Advancing for the next character:
+//    Call GlyphHMetrics, and compute 'current_point += SF * advance'.
+// 
+//
+// ADVANCED USAGE
+//
+//   Quality:
+//
+//    - Use the functions with Subpixel at the end to allow your characters
+//      to have subpixel positioning. Since the font is anti-aliased, not
+//      hinted, this is very import for quality. (This is not possible with
+//      baked fonts.)
+//
+//    - Kerning is now supported, and if you're supporting subpixel rendering
+//      then kerning is worth using to give your text a polished look.
+//
+//   Performance:
+//
+//    - Convert Unicode codepoints to glyph indexes and operate on the glyphs;
+//      if you don't do this, stb_truetype is forced to do the conversion on
+//      every call.
+//
+//    - There are a lot of memory allocations. We should modify it to take
+//      a temp buffer and allocate from the temp buffer (without freeing),
+//      should help performance a lot.
+//
+// NOTES
+//
+//   The system uses the raw data found in the .ttf file without changing it
+//   and without building auxiliary data structures. This is a bit inefficient
+//   on little-endian systems (the data is big-endian), but assuming you're
+//   caching the bitmaps or glyph shapes this shouldn't be a big deal.
+//
+//   It appears to be very hard to programmatically determine what font a
+//   given file is in a general way. I provide an API for this, but I don't
+//   recommend it.
+//
+//
+// SOURCE STATISTICS (based on v0.6c, 2050 LOC)
+//
+//   Documentation & header file        520 LOC  \___ 660 LOC documentation
+//   Sample code                        140 LOC  /
+//   Truetype parsing                   620 LOC  ---- 620 LOC TrueType
+//   Software rasterization             240 LOC  \.
+//   Curve tessellation                 120 LOC   \__ 550 LOC Bitmap creation
+//   Bitmap management                  100 LOC   /
+//   Baked bitmap interface              70 LOC  /
+//   Font name matching & access        150 LOC  ---- 150 
+//   C runtime library abstraction       60 LOC  ----  60
+//
+//
+// PERFORMANCE MEASUREMENTS FOR 1.06:
+//
+//                      32-bit     64-bit
+//   Previous release:  8.83 s     7.68 s
+//   Pool allocations:  7.72 s     6.34 s
+//   Inline sort     :  6.54 s     5.65 s
+//   New rasterizer  :  5.63 s     5.00 s
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////
+////  SAMPLE PROGRAMS
+////
+//
+//  Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless
+//
+#if 0
+#define STB_TRUETYPE_IMPLEMENTATION  // force following include to generate implementation
+#include "stb_truetype.h"
+
+unsigned char ttf_buffer[1<<20];
+unsigned char temp_bitmap[512*512];
+
+stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs
+GLuint ftex;
+
+void my_stbtt_initfont(void)
+{
+   fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb"));
+   stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits!
+   // can free ttf_buffer at this point
+   glGenTextures(1, &ftex);
+   glBindTexture(GL_TEXTURE_2D, ftex);
+   glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap);
+   // can free temp_bitmap at this point
+   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+}
+
+void my_stbtt_print(float x, float y, char *text)
+{
+   // assume orthographic projection with units = screen pixels, origin at top left
+   glEnable(GL_TEXTURE_2D);
+   glBindTexture(GL_TEXTURE_2D, ftex);
+   glBegin(GL_QUADS);
+   while (*text) {
+      if (*text >= 32 && *text < 128) {
+         stbtt_aligned_quad q;
+         stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9
+         glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0);
+         glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0);
+         glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1);
+         glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1);
+      }
+      ++text;
+   }
+   glEnd();
+}
+#endif
+//
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Complete program (this compiles): get a single bitmap, print as ASCII art
+//
+#if 0
+#include <stdio.h>
+#define STB_TRUETYPE_IMPLEMENTATION  // force following include to generate implementation
+#include "stb_truetype.h"
+
+char ttf_buffer[1<<25];
+
+int main(int argc, char **argv)
+{
+   stbtt_fontinfo font;
+   unsigned char *bitmap;
+   int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20);
+
+   fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb"));
+
+   stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));
+   bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0);
+
+   for (j=0; j < h; ++j) {
+      for (i=0; i < w; ++i)
+         putchar(" .:ioVM@"[bitmap[j*w+i]>>5]);
+      putchar('\n');
+   }
+   return 0;
+}
+#endif 
+//
+// Output:
+//
+//     .ii.
+//    @@@@@@.
+//   V@Mio@@o
+//   :i.  V@V
+//     :oM@@M
+//   :@@@MM@M
+//   @@o  o@M
+//  :@@.  M@M
+//   @@@o@@@@
+//   :M@@V:@@.
+//  
+//////////////////////////////////////////////////////////////////////////////
+// 
+// Complete program: print "Hello World!" banner, with bugs
+//
+#if 0
+char buffer[24<<20];
+unsigned char screen[20][79];
+
+int main(int arg, char **argv)
+{
+   stbtt_fontinfo font;
+   int i,j,ascent,baseline,ch=0;
+   float scale, xpos=2; // leave a little padding in case the character extends left
+   char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness
+
+   fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb"));
+   stbtt_InitFont(&font, buffer, 0);
+
+   scale = stbtt_ScaleForPixelHeight(&font, 15);
+   stbtt_GetFontVMetrics(&font, &ascent,0,0);
+   baseline = (int) (ascent*scale);
+
+   while (text[ch]) {
+      int advance,lsb,x0,y0,x1,y1;
+      float x_shift = xpos - (float) floor(xpos);
+      stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb);
+      stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1);
+      stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]);
+      // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong
+      // because this API is really for baking character bitmaps into textures. if you want to render
+      // a sequence of characters, you really need to render each bitmap to a temp buffer, then
+      // "alpha blend" that into the working buffer
+      xpos += (advance * scale);
+      if (text[ch+1])
+         xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]);
+      ++ch;
+   }
+
+   for (j=0; j < 20; ++j) {
+      for (i=0; i < 78; ++i)
+         putchar(" .:ioVM@"[screen[j][i]>>5]);
+      putchar('\n');
+   }
+
+   return 0;
+}
+#endif
+
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////
+////   INTEGRATION WITH YOUR CODEBASE
+////
+////   The following sections allow you to supply alternate definitions
+////   of C library functions used by stb_truetype, e.g. if you don't
+////   link with the C runtime library.
+
+#ifdef STB_TRUETYPE_IMPLEMENTATION
+   // #define your own (u)stbtt_int8/16/32 before including to override this
+   #ifndef stbtt_uint8
+   typedef unsigned char   stbtt_uint8;
+   typedef signed   char   stbtt_int8;
+   typedef unsigned short  stbtt_uint16;
+   typedef signed   short  stbtt_int16;
+   typedef unsigned int    stbtt_uint32;
+   typedef signed   int    stbtt_int32;
+   #endif
+
+   typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1];
+   typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1];
+
+   // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h
+   #ifndef STBTT_ifloor
+   #include <math.h>
+   #define STBTT_ifloor(x)   ((int) floor(x))
+   #define STBTT_iceil(x)    ((int) ceil(x))
+   #endif
+
+   #ifndef STBTT_sqrt
+   #include <math.h>
+   #define STBTT_sqrt(x)      sqrt(x)
+   #define STBTT_pow(x,y)     pow(x,y)
+   #endif
+
+   #ifndef STBTT_fmod
+   #include <math.h>
+   #define STBTT_fmod(x,y)    fmod(x,y)
+   #endif
+
+   #ifndef STBTT_cos
+   #include <math.h>
+   #define STBTT_cos(x)       cos(x)
+   #define STBTT_acos(x)      acos(x)
+   #endif
+
+   #ifndef STBTT_fabs
+   #include <math.h>
+   #define STBTT_fabs(x)      fabs(x)
+   #endif
+
+   // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h
+   #ifndef STBTT_malloc
+   #include <stdlib.h>
+   #define STBTT_malloc(x,u)  ((void)(u),malloc(x))
+   #define STBTT_free(x,u)    ((void)(u),free(x))
+   #endif
+
+   #ifndef STBTT_assert
+   #include <assert.h>
+   #define STBTT_assert(x)    assert(x)
+   #endif
+
+   #ifndef STBTT_strlen
+   #include <string.h>
+   #define STBTT_strlen(x)    strlen(x)
+   #endif
+
+   #ifndef STBTT_memcpy
+   #include <string.h>
+   #define STBTT_memcpy       memcpy
+   #define STBTT_memset       memset
+   #endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+////
+////   INTERFACE
+////
+////
+
+#ifndef __STB_INCLUDE_STB_TRUETYPE_H__
+#define __STB_INCLUDE_STB_TRUETYPE_H__
+
+#ifdef STBTT_STATIC
+#define STBTT_DEF static
+#else
+#define STBTT_DEF extern
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// private structure
+typedef struct
+{
+   unsigned char *data;
+   int cursor;
+   int size;
+} stbtt__buf;
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// TEXTURE BAKING API
+//
+// If you use this API, you only have to call two functions ever.
+//
+
+typedef struct
+{
+   unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
+   float xoff,yoff,xadvance;
+} stbtt_bakedchar;
+
+STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,  // font location (use offset=0 for plain .ttf)
+                                float pixel_height,                     // height of font in pixels
+                                unsigned char *pixels, int pw, int ph,  // bitmap to be filled in
+                                int first_char, int num_chars,          // characters to bake
+                                stbtt_bakedchar *chardata);             // you allocate this, it's num_chars long
+// if return is positive, the first unused row of the bitmap
+// if return is negative, returns the negative of the number of characters that fit
+// if return is 0, no characters fit and no rows were used
+// This uses a very crappy packing.
+
+typedef struct
+{
+   float x0,y0,s0,t0; // top-left
+   float x1,y1,s1,t1; // bottom-right
+} stbtt_aligned_quad;
+
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph,  // same data as above
+                               int char_index,             // character to display
+                               float *xpos, float *ypos,   // pointers to current position in screen pixel space
+                               stbtt_aligned_quad *q,      // output: quad to draw
+                               int opengl_fillrule);       // true if opengl fill rule; false if DX9 or earlier
+// Call GetBakedQuad with char_index = 'character - first_char', and it
+// creates the quad you need to draw and advances the current position.
+//
+// The coordinate system used assumes y increases downwards.
+//
+// Characters will extend both above and below the current position;
+// see discussion of "BASELINE" above.
+//
+// It's inefficient; you might want to c&p it and optimize it.
+
+STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap);
+// Query the font vertical metrics without having to create a font first.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// NEW TEXTURE BAKING API
+//
+// This provides options for packing multiple fonts into one atlas, not
+// perfectly but better than nothing.
+
+typedef struct
+{
+   unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
+   float xoff,yoff,xadvance;
+   float xoff2,yoff2;
+} stbtt_packedchar;
+
+typedef struct stbtt_pack_context stbtt_pack_context;
+typedef struct stbtt_fontinfo stbtt_fontinfo;
+#ifndef STB_RECT_PACK_VERSION
+typedef struct stbrp_rect stbrp_rect;
+#endif
+
+STBTT_DEF int  stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context);
+// Initializes a packing context stored in the passed-in stbtt_pack_context.
+// Future calls using this context will pack characters into the bitmap passed
+// in here: a 1-channel bitmap that is width * height. stride_in_bytes is
+// the distance from one row to the next (or 0 to mean they are packed tightly
+// together). "padding" is the amount of padding to leave between each
+// character (normally you want '1' for bitmaps you'll use as textures with
+// bilinear filtering).
+//
+// Returns 0 on failure, 1 on success.
+
+STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc);
+// Cleans up the packing context and frees all memory.
+
+#define STBTT_POINT_SIZE(x)   (-(x))
+
+STBTT_DEF int  stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
+                                int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range);
+// Creates character bitmaps from the font_index'th font found in fontdata (use
+// font_index=0 if you don't know what that is). It creates num_chars_in_range
+// bitmaps for characters with unicode values starting at first_unicode_char_in_range
+// and increasing. Data for how to render them is stored in chardata_for_range;
+// pass these to stbtt_GetPackedQuad to get back renderable quads.
+//
+// font_size is the full height of the character from ascender to descender,
+// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed
+// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE()
+// and pass that result as 'font_size':
+//       ...,                  20 , ... // font max minus min y is 20 pixels tall
+//       ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall
+
+typedef struct
+{
+   float font_size;
+   int first_unicode_codepoint_in_range;  // if non-zero, then the chars are continuous, and this is the first codepoint
+   int *array_of_unicode_codepoints;       // if non-zero, then this is an array of unicode codepoints
+   int num_chars;
+   stbtt_packedchar *chardata_for_range; // output
+   unsigned char h_oversample, v_oversample; // don't set these, they're used internally
+} stbtt_pack_range;
+
+STBTT_DEF int  stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges);
+// Creates character bitmaps from multiple ranges of characters stored in
+// ranges. This will usually create a better-packed bitmap than multiple
+// calls to stbtt_PackFontRange. Note that you can call this multiple
+// times within a single PackBegin/PackEnd.
+
+STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample);
+// Oversampling a font increases the quality by allowing higher-quality subpixel
+// positioning, and is especially valuable at smaller text sizes.
+//
+// This function sets the amount of oversampling for all following calls to
+// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given
+// pack context. The default (no oversampling) is achieved by h_oversample=1
+// and v_oversample=1. The total number of pixels required is
+// h_oversample*v_oversample larger than the default; for example, 2x2
+// oversampling requires 4x the storage of 1x1. For best results, render
+// oversampled textures with bilinear filtering. Look at the readme in
+// stb/tests/oversample for information about oversampled fonts
+//
+// To use with PackFontRangesGather etc., you must set it before calls
+// call to PackFontRangesGatherRects.
+
+STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip);
+// If skip != 0, this tells stb_truetype to skip any codepoints for which
+// there is no corresponding glyph. If skip=0, which is the default, then
+// codepoints without a glyph recived the font's "missing character" glyph,
+// typically an empty box by convention.
+
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph,  // same data as above
+                               int char_index,             // character to display
+                               float *xpos, float *ypos,   // pointers to current position in screen pixel space
+                               stbtt_aligned_quad *q,      // output: quad to draw
+                               int align_to_integer);
+
+STBTT_DEF int  stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects);
+STBTT_DEF int  stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+// Calling these functions in sequence is roughly equivalent to calling
+// stbtt_PackFontRanges(). If you more control over the packing of multiple
+// fonts, or if you want to pack custom data into a font texture, take a look
+// at the source to of stbtt_PackFontRanges() and create a custom version 
+// using these functions, e.g. call GatherRects multiple times,
+// building up a single array of rects, then call PackRects once,
+// then call RenderIntoRects repeatedly. This may result in a
+// better packing than calling PackFontRanges multiple times
+// (or it may not).
+
+// this is an opaque structure that you shouldn't mess with which holds
+// all the context needed from PackBegin to PackEnd.
+struct stbtt_pack_context {
+   void *user_allocator_context;
+   void *pack_info;
+   int   width;
+   int   height;
+   int   stride_in_bytes;
+   int   padding;
+   int   skip_missing;
+   unsigned int   h_oversample, v_oversample;
+   unsigned char *pixels;
+   void  *nodes;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// FONT LOADING
+//
+//
+
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data);
+// This function will determine the number of fonts in a font file.  TrueType
+// collection (.ttc) files may contain multiple fonts, while TrueType font
+// (.ttf) files only contain one font. The number of fonts can be used for
+// indexing with the previous function where the index is between zero and one
+// less than the total fonts. If an error occurs, -1 is returned.
+
+STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index);
+// Each .ttf/.ttc file may have more than one font. Each font has a sequential
+// index number starting from 0. Call this function to get the font offset for
+// a given index; it returns -1 if the index is out of range. A regular .ttf
+// file will only define one font and it always be at offset 0, so it will
+// return '0' for index 0, and -1 for all other indices.
+
+// The following structure is defined publicly so you can declare one on
+// the stack or as a global or etc, but you should treat it as opaque.
+struct stbtt_fontinfo
+{
+   void           * userdata;
+   unsigned char  * data;              // pointer to .ttf file
+   int              fontstart;         // offset of start of font
+
+   int numGlyphs;                     // number of glyphs, needed for range checking
+
+   int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf
+   int index_map;                     // a cmap mapping for our chosen character encoding
+   int indexToLocFormat;              // format needed to map from glyph index to glyph
+
+   stbtt__buf cff;                    // cff font data
+   stbtt__buf charstrings;            // the charstring index
+   stbtt__buf gsubrs;                 // global charstring subroutines index
+   stbtt__buf subrs;                  // private charstring subroutines index
+   stbtt__buf fontdicts;              // array of font dicts
+   stbtt__buf fdselect;               // map from glyph to fontdict
+};
+
+STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset);
+// Given an offset into the file that defines a font, this function builds
+// the necessary cached info for the rest of the system. You must allocate
+// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't
+// need to do anything special to free it, because the contents are pure
+// value data with no additional data structures. Returns 0 on failure.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// CHARACTER TO GLYPH-INDEX CONVERSIOn
+
+STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint);
+// If you're going to perform multiple operations on the same character
+// and you want a speed-up, call this function with the character you're
+// going to process, then use glyph-based functions instead of the
+// codepoint-based functions.
+// Returns 0 if the character codepoint is not defined in the font.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// CHARACTER PROPERTIES
+//
+
+STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels);
+// computes a scale factor to produce a font whose "height" is 'pixels' tall.
+// Height is measured as the distance from the highest ascender to the lowest
+// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics
+// and computing:
+//       scale = pixels / (ascent - descent)
+// so if you prefer to measure height by the ascent only, use a similar calculation.
+
+STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels);
+// computes a scale factor to produce a font whose EM size is mapped to
+// 'pixels' tall. This is probably what traditional APIs compute, but
+// I'm not positive.
+
+STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap);
+// ascent is the coordinate above the baseline the font extends; descent
+// is the coordinate below the baseline the font extends (i.e. it is typically negative)
+// lineGap is the spacing between one row's descent and the next row's ascent...
+// so you should advance the vertical position by "*ascent - *descent + *lineGap"
+//   these are expressed in unscaled coordinates, so you must multiply by
+//   the scale factor for a given size
+
+STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap);
+// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2
+// table (specific to MS/Windows TTF files).
+//
+// Returns 1 on success (table present), 0 on failure.
+
+STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1);
+// the bounding box around all possible characters
+
+STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing);
+// leftSideBearing is the offset from the current horizontal position to the left edge of the character
+// advanceWidth is the offset from the current horizontal position to the next horizontal position
+//   these are expressed in unscaled coordinates
+
+STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2);
+// an additional amount to add to the 'advance' value between ch1 and ch2
+
+STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1);
+// Gets the bounding box of the visible part of the glyph, in unscaled coordinates
+
+STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing);
+STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2);
+STBTT_DEF int  stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
+// as above, but takes one or more glyph indices for greater efficiency
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// GLYPH SHAPES (you probably don't need these, but they have to go before
+// the bitmaps for C declaration-order reasons)
+//
+
+#ifndef STBTT_vmove // you can predefine these to use different values (but why?)
+   enum {
+      STBTT_vmove=1,
+      STBTT_vline,
+      STBTT_vcurve,
+      STBTT_vcubic
+   };
+#endif
+
+#ifndef stbtt_vertex // you can predefine this to use different values
+                   // (we share this with other code at RAD)
+   #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file
+   typedef struct
+   {
+      stbtt_vertex_type x,y,cx,cy,cx1,cy1;
+      unsigned char type,padding;
+   } stbtt_vertex;
+#endif
+
+STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index);
+// returns non-zero if nothing is drawn for this glyph
+
+STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices);
+STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices);
+// returns # of vertices and fills *vertices with the pointer to them
+//   these are expressed in "unscaled" coordinates
+//
+// The shape is a series of contours. Each one starts with
+// a STBTT_moveto, then consists of a series of mixed
+// STBTT_lineto and STBTT_curveto segments. A lineto
+// draws a line from previous endpoint to its x,y; a curveto
+// draws a quadratic bezier from previous endpoint to
+// its x,y, using cx,cy as the bezier control point.
+
+STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices);
+// frees the data allocated above
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// BITMAP RENDERING
+//
+
+STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata);
+// frees the bitmap allocated below
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
+// allocates a large-enough single-channel 8bpp bitmap and renders the
+// specified character/glyph at the specified scale into it, with
+// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque).
+// *width & *height are filled out with the width & height of the bitmap,
+// which is stored left-to-right, top-to-bottom.
+//
+// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
+// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel
+// shift for the character
+
+STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint);
+// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap
+// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap
+// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the
+// width and height and positioning info for it first.
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint);
+// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel
+// shift for the character
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint);
+// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering
+// is performed (see stbtt_PackSetOversampling)
+
+STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
+// get the bbox of the bitmap centered around the glyph origin; so the
+// bitmap width is ix1-ix0, height is iy1-iy0, and location to place
+// the bitmap top left is (leftSideBearing*scale,iy0).
+// (Note that the bitmap uses y-increases-down, but the shape uses
+// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.)
+
+STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
+// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel
+// shift for the character
+
+// the following functions are equivalent to the above functions, but operate
+// on glyph indices instead of Unicode codepoints (for efficiency)
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph);
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph);
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph);
+STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
+STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
+
+
+// @TODO: don't expose this structure
+typedef struct
+{
+   int w,h,stride;
+   unsigned char *pixels;
+} stbtt__bitmap;
+
+// rasterize a shape with quadratic beziers into a bitmap
+STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result,        // 1-channel bitmap to draw into
+                               float flatness_in_pixels,     // allowable error of curve in pixels
+                               stbtt_vertex *vertices,       // array of vertices defining shape
+                               int num_verts,                // number of vertices in above array
+                               float scale_x, float scale_y, // scale applied to input vertices
+                               float shift_x, float shift_y, // translation applied to input vertices
+                               int x_off, int y_off,         // another translation applied to input
+                               int invert,                   // if non-zero, vertically flip shape
+                               void *userdata);              // context for to STBTT_MALLOC
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Signed Distance Function (or Field) rendering
+
+STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata);
+// frees the SDF bitmap allocated below
+
+STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
+// These functions compute a discretized SDF field for a single character, suitable for storing
+// in a single-channel texture, sampling with bilinear filtering, and testing against
+// larger than some threshold to produce scalable fonts.
+//        info              --  the font
+//        scale             --  controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap
+//        glyph/codepoint   --  the character to generate the SDF for
+//        padding           --  extra "pixels" around the character which are filled with the distance to the character (not 0),
+//                                 which allows effects like bit outlines
+//        onedge_value      --  value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character)
+//        pixel_dist_scale  --  what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale)
+//                                 if positive, > onedge_value is inside; if negative, < onedge_value is inside
+//        width,height      --  output height & width of the SDF bitmap (including padding)
+//        xoff,yoff         --  output origin of the character
+//        return value      --  a 2D array of bytes 0..255, width*height in size
+//
+// pixel_dist_scale & onedge_value are a scale & bias that allows you to make
+// optimal use of the limited 0..255 for your application, trading off precision
+// and special effects. SDF values outside the range 0..255 are clamped to 0..255.
+//
+// Example:
+//      scale = stbtt_ScaleForPixelHeight(22)
+//      padding = 5
+//      onedge_value = 180
+//      pixel_dist_scale = 180/5.0 = 36.0
+//
+//      This will create an SDF bitmap in which the character is about 22 pixels
+//      high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled
+//      shape, sample the SDF at each pixel and fill the pixel if the SDF value
+//      is greater than or equal to 180/255. (You'll actually want to antialias,
+//      which is beyond the scope of this example.) Additionally, you can compute
+//      offset outlines (e.g. to stroke the character border inside & outside,
+//      or only outside). For example, to fill outside the character up to 3 SDF
+//      pixels, you would compare against (180-36.0*3)/255 = 72/255. The above
+//      choice of variables maps a range from 5 pixels outside the shape to
+//      2 pixels inside the shape to 0..255; this is intended primarily for apply
+//      outside effects only (the interior range is needed to allow proper
+//      antialiasing of the font at *smaller* sizes)
+//
+// The function computes the SDF analytically at each SDF pixel, not by e.g.
+// building a higher-res bitmap and approximating it. In theory the quality
+// should be as high as possible for an SDF of this size & representation, but
+// unclear if this is true in practice (perhaps building a higher-res bitmap
+// and computing from that can allow drop-out prevention).
+//
+// The algorithm has not been optimized at all, so expect it to be slow
+// if computing lots of characters or very large sizes. 
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Finding the right font...
+//
+// You should really just solve this offline, keep your own tables
+// of what font is what, and don't try to get it out of the .ttf file.
+// That's because getting it out of the .ttf file is really hard, because
+// the names in the file can appear in many possible encodings, in many
+// possible languages, and e.g. if you need a case-insensitive comparison,
+// the details of that depend on the encoding & language in a complex way
+// (actually underspecified in truetype, but also gigantic).
+//
+// But you can use the provided functions in two possible ways:
+//     stbtt_FindMatchingFont() will use *case-sensitive* comparisons on
+//             unicode-encoded names to try to find the font you want;
+//             you can run this before calling stbtt_InitFont()
+//
+//     stbtt_GetFontNameString() lets you get any of the various strings
+//             from the file yourself and do your own comparisons on them.
+//             You have to have called stbtt_InitFont() first.
+
+
+STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags);
+// returns the offset (not index) of the font that matches, or -1 if none
+//   if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold".
+//   if you use any other flag, use a font name like "Arial"; this checks
+//     the 'macStyle' header field; i don't know if fonts set this consistently
+#define STBTT_MACSTYLE_DONTCARE     0
+#define STBTT_MACSTYLE_BOLD         1
+#define STBTT_MACSTYLE_ITALIC       2
+#define STBTT_MACSTYLE_UNDERSCORE   4
+#define STBTT_MACSTYLE_NONE         8   // <= not same as 0, this makes us check the bitfield is 0
+
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2);
+// returns 1/0 whether the first string interpreted as utf8 is identical to
+// the second string interpreted as big-endian utf16... useful for strings from next func
+
+STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID);
+// returns the string (which may be big-endian double byte, e.g. for unicode)
+// and puts the length in bytes in *length.
+//
+// some of the values for the IDs are below; for more see the truetype spec:
+//     http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html
+//     http://www.microsoft.com/typography/otspec/name.htm
+
+enum { // platformID
+   STBTT_PLATFORM_ID_UNICODE   =0,
+   STBTT_PLATFORM_ID_MAC       =1,
+   STBTT_PLATFORM_ID_ISO       =2,
+   STBTT_PLATFORM_ID_MICROSOFT =3
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_UNICODE
+   STBTT_UNICODE_EID_UNICODE_1_0    =0,
+   STBTT_UNICODE_EID_UNICODE_1_1    =1,
+   STBTT_UNICODE_EID_ISO_10646      =2,
+   STBTT_UNICODE_EID_UNICODE_2_0_BMP=3,
+   STBTT_UNICODE_EID_UNICODE_2_0_FULL=4
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT
+   STBTT_MS_EID_SYMBOL        =0,
+   STBTT_MS_EID_UNICODE_BMP   =1,
+   STBTT_MS_EID_SHIFTJIS      =2,
+   STBTT_MS_EID_UNICODE_FULL  =10
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes
+   STBTT_MAC_EID_ROMAN        =0,   STBTT_MAC_EID_ARABIC       =4,
+   STBTT_MAC_EID_JAPANESE     =1,   STBTT_MAC_EID_HEBREW       =5,
+   STBTT_MAC_EID_CHINESE_TRAD =2,   STBTT_MAC_EID_GREEK        =6,
+   STBTT_MAC_EID_KOREAN       =3,   STBTT_MAC_EID_RUSSIAN      =7
+};
+
+enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID...
+       // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs
+   STBTT_MS_LANG_ENGLISH     =0x0409,   STBTT_MS_LANG_ITALIAN     =0x0410,
+   STBTT_MS_LANG_CHINESE     =0x0804,   STBTT_MS_LANG_JAPANESE    =0x0411,
+   STBTT_MS_LANG_DUTCH       =0x0413,   STBTT_MS_LANG_KOREAN      =0x0412,
+   STBTT_MS_LANG_FRENCH      =0x040c,   STBTT_MS_LANG_RUSSIAN     =0x0419,
+   STBTT_MS_LANG_GERMAN      =0x0407,   STBTT_MS_LANG_SPANISH     =0x0409,
+   STBTT_MS_LANG_HEBREW      =0x040d,   STBTT_MS_LANG_SWEDISH     =0x041D
+};
+
+enum { // languageID for STBTT_PLATFORM_ID_MAC
+   STBTT_MAC_LANG_ENGLISH      =0 ,   STBTT_MAC_LANG_JAPANESE     =11,
+   STBTT_MAC_LANG_ARABIC       =12,   STBTT_MAC_LANG_KOREAN       =23,
+   STBTT_MAC_LANG_DUTCH        =4 ,   STBTT_MAC_LANG_RUSSIAN      =32,
+   STBTT_MAC_LANG_FRENCH       =1 ,   STBTT_MAC_LANG_SPANISH      =6 ,
+   STBTT_MAC_LANG_GERMAN       =2 ,   STBTT_MAC_LANG_SWEDISH      =5 ,
+   STBTT_MAC_LANG_HEBREW       =10,   STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33,
+   STBTT_MAC_LANG_ITALIAN      =3 ,   STBTT_MAC_LANG_CHINESE_TRAD =19
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __STB_INCLUDE_STB_TRUETYPE_H__
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+////
+////   IMPLEMENTATION
+////
+////
+
+#ifdef STB_TRUETYPE_IMPLEMENTATION
+
+#ifndef STBTT_MAX_OVERSAMPLE
+#define STBTT_MAX_OVERSAMPLE   8
+#endif
+
+#if STBTT_MAX_OVERSAMPLE > 255
+#error "STBTT_MAX_OVERSAMPLE cannot be > 255"
+#endif
+
+typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1];
+
+#ifndef STBTT_RASTERIZER_VERSION
+#define STBTT_RASTERIZER_VERSION 2
+#endif
+
+#ifdef _MSC_VER
+#define STBTT__NOTUSED(v)  (void)(v)
+#else
+#define STBTT__NOTUSED(v)  (void)sizeof(v)
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+//
+// stbtt__buf helpers to parse data from file
+//
+
+static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
+{
+   if (b->cursor >= b->size)
+      return 0;
+   return b->data[b->cursor++];
+}
+
+static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
+{
+   if (b->cursor >= b->size)
+      return 0;
+   return b->data[b->cursor];
+}
+
+static void stbtt__buf_seek(stbtt__buf *b, int o)
+{
+   STBTT_assert(!(o > b->size || o < 0));
+   b->cursor = (o > b->size || o < 0) ? b->size : o;
+}
+
+static void stbtt__buf_skip(stbtt__buf *b, int o)
+{
+   stbtt__buf_seek(b, b->cursor + o);
+}
+
+static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
+{
+   stbtt_uint32 v = 0;
+   int i;
+   STBTT_assert(n >= 1 && n <= 4);
+   for (i = 0; i < n; i++)
+      v = (v << 8) | stbtt__buf_get8(b);
+   return v;
+}
+
+static stbtt__buf stbtt__new_buf(const void *p, size_t size)
+{
+   stbtt__buf r;
+   STBTT_assert(size < 0x40000000);
+   r.data = (stbtt_uint8*) p;
+   r.size = (int) size;
+   r.cursor = 0;
+   return r;
+}
+
+#define stbtt__buf_get16(b)  stbtt__buf_get((b), 2)
+#define stbtt__buf_get32(b)  stbtt__buf_get((b), 4)
+
+static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
+{
+   stbtt__buf r = stbtt__new_buf(NULL, 0);
+   if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r;
+   r.data = b->data + o;
+   r.size = s;
+   return r;
+}
+
+static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
+{
+   int count, start, offsize;
+   start = b->cursor;
+   count = stbtt__buf_get16(b);
+   if (count) {
+      offsize = stbtt__buf_get8(b);
+      STBTT_assert(offsize >= 1 && offsize <= 4);
+      stbtt__buf_skip(b, offsize * count);
+      stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1);
+   }
+   return stbtt__buf_range(b, start, b->cursor - start);
+}
+
+static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
+{
+   int b0 = stbtt__buf_get8(b);
+   if (b0 >= 32 && b0 <= 246)       return b0 - 139;
+   else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108;
+   else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108;
+   else if (b0 == 28)               return stbtt__buf_get16(b);
+   else if (b0 == 29)               return stbtt__buf_get32(b);
+   STBTT_assert(0);
+   return 0;
+}
+
+static void stbtt__cff_skip_operand(stbtt__buf *b) {
+   int v, b0 = stbtt__buf_peek8(b);
+   STBTT_assert(b0 >= 28);
+   if (b0 == 30) {
+      stbtt__buf_skip(b, 1);
+      while (b->cursor < b->size) {
+         v = stbtt__buf_get8(b);
+         if ((v & 0xF) == 0xF || (v >> 4) == 0xF)
+            break;
+      }
+   } else {
+      stbtt__cff_int(b);
+   }
+}
+
+static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
+{
+   stbtt__buf_seek(b, 0);
+   while (b->cursor < b->size) {
+      int start = b->cursor, end, op;
+      while (stbtt__buf_peek8(b) >= 28)
+         stbtt__cff_skip_operand(b);
+      end = b->cursor;
+      op = stbtt__buf_get8(b);
+      if (op == 12)  op = stbtt__buf_get8(b) | 0x100;
+      if (op == key) return stbtt__buf_range(b, start, end-start);
+   }
+   return stbtt__buf_range(b, 0, 0);
+}
+
+static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out)
+{
+   int i;
+   stbtt__buf operands = stbtt__dict_get(b, key);
+   for (i = 0; i < outcount && operands.cursor < operands.size; i++)
+      out[i] = stbtt__cff_int(&operands);
+}
+
+static int stbtt__cff_index_count(stbtt__buf *b)
+{
+   stbtt__buf_seek(b, 0);
+   return stbtt__buf_get16(b);
+}
+
+static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
+{
+   int count, offsize, start, end;
+   stbtt__buf_seek(&b, 0);
+   count = stbtt__buf_get16(&b);
+   offsize = stbtt__buf_get8(&b);
+   STBTT_assert(i >= 0 && i < count);
+   STBTT_assert(offsize >= 1 && offsize <= 4);
+   stbtt__buf_skip(&b, i*offsize);
+   start = stbtt__buf_get(&b, offsize);
+   end = stbtt__buf_get(&b, offsize);
+   return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// accessors to parse data from file
+//
+
+// on platforms that don't allow misaligned reads, if we want to allow
+// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE
+
+#define ttBYTE(p)     (* (stbtt_uint8 *) (p))
+#define ttCHAR(p)     (* (stbtt_int8 *) (p))
+#define ttFixed(p)    ttLONG(p)
+
+static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
+static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
+static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
+static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
+
+#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3))
+#define stbtt_tag(p,str)           stbtt_tag4(p,str[0],str[1],str[2],str[3])
+
+static int stbtt__isfont(stbtt_uint8 *font)
+{
+   // check the version number
+   if (stbtt_tag4(font, '1',0,0,0))  return 1; // TrueType 1
+   if (stbtt_tag(font, "typ1"))   return 1; // TrueType with type 1 font -- we don't support this!
+   if (stbtt_tag(font, "OTTO"))   return 1; // OpenType with CFF
+   if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0
+   if (stbtt_tag(font, "true"))   return 1; // Apple specification for TrueType fonts
+   return 0;
+}
+
+// @OPTIMIZE: binary search
+static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag)
+{
+   stbtt_int32 num_tables = ttUSHORT(data+fontstart+4);
+   stbtt_uint32 tabledir = fontstart + 12;
+   stbtt_int32 i;
+   for (i=0; i < num_tables; ++i) {
+      stbtt_uint32 loc = tabledir + 16*i;
+      if (stbtt_tag(data+loc+0, tag))
+         return ttULONG(data+loc+8);
+   }
+   return 0;
+}
+
+static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index)
+{
+   // if it's just a font, there's only one valid index
+   if (stbtt__isfont(font_collection))
+      return index == 0 ? 0 : -1;
+
+   // check if it's a TTC
+   if (stbtt_tag(font_collection, "ttcf")) {
+      // version 1?
+      if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
+         stbtt_int32 n = ttLONG(font_collection+8);
+         if (index >= n)
+            return -1;
+         return ttULONG(font_collection+12+index*4);
+      }
+   }
+   return -1;
+}
+
+static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
+{
+   // if it's just a font, there's only one valid font
+   if (stbtt__isfont(font_collection))
+      return 1;
+
+   // check if it's a TTC
+   if (stbtt_tag(font_collection, "ttcf")) {
+      // version 1?
+      if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
+         return ttLONG(font_collection+8);
+      }
+   }
+   return 0;
+}
+
+static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
+{
+   stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 };
+   stbtt__buf pdict;
+   stbtt__dict_get_ints(&fontdict, 18, 2, private_loc);
+   if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0);
+   pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]);
+   stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff);
+   if (!subrsoff) return stbtt__new_buf(NULL, 0);
+   stbtt__buf_seek(&cff, private_loc[1]+subrsoff);
+   return stbtt__cff_get_index(&cff);
+}
+
+static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
+{
+   stbtt_uint32 cmap, t;
+   stbtt_int32 i,numTables;
+
+   info->data = data;
+   info->fontstart = fontstart;
+   info->cff = stbtt__new_buf(NULL, 0);
+
+   cmap = stbtt__find_table(data, fontstart, "cmap");       // required
+   info->loca = stbtt__find_table(data, fontstart, "loca"); // required
+   info->head = stbtt__find_table(data, fontstart, "head"); // required
+   info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required
+   info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required
+   info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required
+   info->kern = stbtt__find_table(data, fontstart, "kern"); // not required
+   info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required
+
+   if (!cmap || !info->head || !info->hhea || !info->hmtx)
+      return 0;
+   if (info->glyf) {
+      // required for truetype
+      if (!info->loca) return 0;
+   } else {
+      // initialization for CFF / Type2 fonts (OTF)
+      stbtt__buf b, topdict, topdictidx;
+      stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0;
+      stbtt_uint32 cff;
+
+      cff = stbtt__find_table(data, fontstart, "CFF ");
+      if (!cff) return 0;
+
+      info->fontdicts = stbtt__new_buf(NULL, 0);
+      info->fdselect = stbtt__new_buf(NULL, 0);
+
+      // @TODO this should use size from table (not 512MB)
+      info->cff = stbtt__new_buf(data+cff, 512*1024*1024);
+      b = info->cff;
+
+      // read the header
+      stbtt__buf_skip(&b, 2);
+      stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize
+
+      // @TODO the name INDEX could list multiple fonts,
+      // but we just use the first one.
+      stbtt__cff_get_index(&b);  // name INDEX
+      topdictidx = stbtt__cff_get_index(&b);
+      topdict = stbtt__cff_index_get(topdictidx, 0);
+      stbtt__cff_get_index(&b);  // string INDEX
+      info->gsubrs = stbtt__cff_get_index(&b);
+
+      stbtt__dict_get_ints(&topdict, 17, 1, &charstrings);
+      stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype);
+      stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff);
+      stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff);
+      info->subrs = stbtt__get_subrs(b, topdict);
+
+      // we only support Type 2 charstrings
+      if (cstype != 2) return 0;
+      if (charstrings == 0) return 0;
+
+      if (fdarrayoff) {
+         // looks like a CID font
+         if (!fdselectoff) return 0;
+         stbtt__buf_seek(&b, fdarrayoff);
+         info->fontdicts = stbtt__cff_get_index(&b);
+         info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff);
+      }
+
+      stbtt__buf_seek(&b, charstrings);
+      info->charstrings = stbtt__cff_get_index(&b);
+   }
+
+   t = stbtt__find_table(data, fontstart, "maxp");
+   if (t)
+      info->numGlyphs = ttUSHORT(data+t+4);
+   else
+      info->numGlyphs = 0xffff;
+
+   // find a cmap encoding table we understand *now* to avoid searching
+   // later. (todo: could make this installable)
+   // the same regardless of glyph.
+   numTables = ttUSHORT(data + cmap + 2);
+   info->index_map = 0;
+   for (i=0; i < numTables; ++i) {
+      stbtt_uint32 encoding_record = cmap + 4 + 8 * i;
+      // find an encoding we understand:
+      switch(ttUSHORT(data+encoding_record)) {
+         case STBTT_PLATFORM_ID_MICROSOFT:
+            switch (ttUSHORT(data+encoding_record+2)) {
+               case STBTT_MS_EID_UNICODE_BMP:
+               case STBTT_MS_EID_UNICODE_FULL:
+                  // MS/Unicode
+                  info->index_map = cmap + ttULONG(data+encoding_record+4);
+                  break;
+            }
+            break;
+        case STBTT_PLATFORM_ID_UNICODE:
+            // Mac/iOS has these
+            // all the encodingIDs are unicode, so we don't bother to check it
+            info->index_map = cmap + ttULONG(data+encoding_record+4);
+            break;
+      }
+   }
+   if (info->index_map == 0)
+      return 0;
+
+   info->indexToLocFormat = ttUSHORT(data+info->head + 50);
+   return 1;
+}
+
+STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint)
+{
+   stbtt_uint8 *data = info->data;
+   stbtt_uint32 index_map = info->index_map;
+
+   stbtt_uint16 format = ttUSHORT(data + index_map + 0);
+   if (format == 0) { // apple byte encoding
+      stbtt_int32 bytes = ttUSHORT(data + index_map + 2);
+      if (unicode_codepoint < bytes-6)
+         return ttBYTE(data + index_map + 6 + unicode_codepoint);
+      return 0;
+   } else if (format == 6) {
+      stbtt_uint32 first = ttUSHORT(data + index_map + 6);
+      stbtt_uint32 count = ttUSHORT(data + index_map + 8);
+      if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count)
+         return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2);
+      return 0;
+   } else if (format == 2) {
+      STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean
+      return 0;
+   } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges
+      stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1;
+      stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1;
+      stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10);
+      stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1;
+
+      // do a binary search of the segments
+      stbtt_uint32 endCount = index_map + 14;
+      stbtt_uint32 search = endCount;
+
+      if (unicode_codepoint > 0xffff)
+         return 0;
+
+      // they lie from endCount .. endCount + segCount
+      // but searchRange is the nearest power of two, so...
+      if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2))
+         search += rangeShift*2;
+
+      // now decrement to bias correctly to find smallest
+      search -= 2;
+      while (entrySelector) {
+         stbtt_uint16 end;
+         searchRange >>= 1;
+         end = ttUSHORT(data + search + searchRange*2);
+         if (unicode_codepoint > end)
+            search += searchRange*2;
+         --entrySelector;
+      }
+      search += 2;
+
+      {
+         stbtt_uint16 offset, start;
+         stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1);
+
+         STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item));
+         start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item);
+         if (unicode_codepoint < start)
+            return 0;
+
+         offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item);
+         if (offset == 0)
+            return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item));
+
+         return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item);
+      }
+   } else if (format == 12 || format == 13) {
+      stbtt_uint32 ngroups = ttULONG(data+index_map+12);
+      stbtt_int32 low,high;
+      low = 0; high = (stbtt_int32)ngroups;
+      // Binary search the right group.
+      while (low < high) {
+         stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high
+         stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12);
+         stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4);
+         if ((stbtt_uint32) unicode_codepoint < start_char)
+            high = mid;
+         else if ((stbtt_uint32) unicode_codepoint > end_char)
+            low = mid+1;
+         else {
+            stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8);
+            if (format == 12)
+               return start_glyph + unicode_codepoint-start_char;
+            else // format == 13
+               return start_glyph;
+         }
+      }
+      return 0; // not found
+   }
+   // @TODO
+   STBTT_assert(0);
+   return 0;
+}
+
+STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices)
+{
+   return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices);
+}
+
+static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy)
+{
+   v->type = type;
+   v->x = (stbtt_int16) x;
+   v->y = (stbtt_int16) y;
+   v->cx = (stbtt_int16) cx;
+   v->cy = (stbtt_int16) cy;
+}
+
+static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index)
+{
+   int g1,g2;
+
+   STBTT_assert(!info->cff.size);
+
+   if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range
+   if (info->indexToLocFormat >= 2)    return -1; // unknown index->glyph map format
+
+   if (info->indexToLocFormat == 0) {
+      g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2;
+      g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2;
+   } else {
+      g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4);
+      g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4);
+   }
+
+   return g1==g2 ? -1 : g1; // if length is 0, return -1
+}
+
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
+
+STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
+{
+   if (info->cff.size) {
+      stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1);
+   } else {
+      int g = stbtt__GetGlyfOffset(info, glyph_index);
+      if (g < 0) return 0;
+
+      if (x0) *x0 = ttSHORT(info->data + g + 2);
+      if (y0) *y0 = ttSHORT(info->data + g + 4);
+      if (x1) *x1 = ttSHORT(info->data + g + 6);
+      if (y1) *y1 = ttSHORT(info->data + g + 8);
+   }
+   return 1;
+}
+
+STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1)
+{
+   return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1);
+}
+
+STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index)
+{
+   stbtt_int16 numberOfContours;
+   int g;
+   if (info->cff.size)
+      return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0;
+   g = stbtt__GetGlyfOffset(info, glyph_index);
+   if (g < 0) return 1;
+   numberOfContours = ttSHORT(info->data + g);
+   return numberOfContours == 0;
+}
+
+static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off,
+    stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy)
+{
+   if (start_off) {
+      if (was_off)
+         stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy);
+      stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy);
+   } else {
+      if (was_off)
+         stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy);
+      else
+         stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0);
+   }
+   return num_vertices;
+}
+
+static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+   stbtt_int16 numberOfContours;
+   stbtt_uint8 *endPtsOfContours;
+   stbtt_uint8 *data = info->data;
+   stbtt_vertex *vertices=0;
+   int num_vertices=0;
+   int g = stbtt__GetGlyfOffset(info, glyph_index);
+
+   *pvertices = NULL;
+
+   if (g < 0) return 0;
+
+   numberOfContours = ttSHORT(data + g);
+
+   if (numberOfContours > 0) {
+      stbtt_uint8 flags=0,flagcount;
+      stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0;
+      stbtt_int32 x,y,cx,cy,sx,sy, scx,scy;
+      stbtt_uint8 *points;
+      endPtsOfContours = (data + g + 10);
+      ins = ttUSHORT(data + g + 10 + numberOfContours * 2);
+      points = data + g + 10 + numberOfContours * 2 + 2 + ins;
+
+      n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2);
+
+      m = n + 2*numberOfContours;  // a loose bound on how many vertices we might need
+      vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata);
+      if (vertices == 0)
+         return 0;
+
+      next_move = 0;
+      flagcount=0;
+
+      // in first pass, we load uninterpreted data into the allocated array
+      // above, shifted to the end of the array so we won't overwrite it when
+      // we create our final data starting from the front
+
+      off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated
+
+      // first load flags
+
+      for (i=0; i < n; ++i) {
+         if (flagcount == 0) {
+            flags = *points++;
+            if (flags & 8)
+               flagcount = *points++;
+         } else
+            --flagcount;
+         vertices[off+i].type = flags;
+      }
+
+      // now load x coordinates
+      x=0;
+      for (i=0; i < n; ++i) {
+         flags = vertices[off+i].type;
+         if (flags & 2) {
+            stbtt_int16 dx = *points++;
+            x += (flags & 16) ? dx : -dx; // ???
+         } else {
+            if (!(flags & 16)) {
+               x = x + (stbtt_int16) (points[0]*256 + points[1]);
+               points += 2;
+            }
+         }
+         vertices[off+i].x = (stbtt_int16) x;
+      }
+
+      // now load y coordinates
+      y=0;
+      for (i=0; i < n; ++i) {
+         flags = vertices[off+i].type;
+         if (flags & 4) {
+            stbtt_int16 dy = *points++;
+            y += (flags & 32) ? dy : -dy; // ???
+         } else {
+            if (!(flags & 32)) {
+               y = y + (stbtt_int16) (points[0]*256 + points[1]);
+               points += 2;
+            }
+         }
+         vertices[off+i].y = (stbtt_int16) y;
+      }
+
+      // now convert them to our format
+      num_vertices=0;
+      sx = sy = cx = cy = scx = scy = 0;
+      for (i=0; i < n; ++i) {
+         flags = vertices[off+i].type;
+         x     = (stbtt_int16) vertices[off+i].x;
+         y     = (stbtt_int16) vertices[off+i].y;
+
+         if (next_move == i) {
+            if (i != 0)
+               num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
+
+            // now start the new one               
+            start_off = !(flags & 1);
+            if (start_off) {
+               // if we start off with an off-curve point, then when we need to find a point on the curve
+               // where we can start, and we need to save some state for when we wraparound.
+               scx = x;
+               scy = y;
+               if (!(vertices[off+i+1].type & 1)) {
+                  // next point is also a curve point, so interpolate an on-point curve
+                  sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1;
+                  sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1;
+               } else {
+                  // otherwise just use the next point as our start point
+                  sx = (stbtt_int32) vertices[off+i+1].x;
+                  sy = (stbtt_int32) vertices[off+i+1].y;
+                  ++i; // we're using point i+1 as the starting point, so skip it
+               }
+            } else {
+               sx = x;
+               sy = y;
+            }
+            stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0);
+            was_off = 0;
+            next_move = 1 + ttUSHORT(endPtsOfContours+j*2);
+            ++j;
+         } else {
+            if (!(flags & 1)) { // if it's a curve
+               if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint
+                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy);
+               cx = x;
+               cy = y;
+               was_off = 1;
+            } else {
+               if (was_off)
+                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy);
+               else
+                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0);
+               was_off = 0;
+            }
+         }
+      }
+      num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
+   } else if (numberOfContours == -1) {
+      // Compound shapes.
+      int more = 1;
+      stbtt_uint8 *comp = data + g + 10;
+      num_vertices = 0;
+      vertices = 0;
+      while (more) {
+         stbtt_uint16 flags, gidx;
+         int comp_num_verts = 0, i;
+         stbtt_vertex *comp_verts = 0, *tmp = 0;
+         float mtx[6] = {1,0,0,1,0,0}, m, n;
+         
+         flags = ttSHORT(comp); comp+=2;
+         gidx = ttSHORT(comp); comp+=2;
+
+         if (flags & 2) { // XY values
+            if (flags & 1) { // shorts
+               mtx[4] = ttSHORT(comp); comp+=2;
+               mtx[5] = ttSHORT(comp); comp+=2;
+            } else {
+               mtx[4] = ttCHAR(comp); comp+=1;
+               mtx[5] = ttCHAR(comp); comp+=1;
+            }
+         }
+         else {
+            // @TODO handle matching point
+            STBTT_assert(0);
+         }
+         if (flags & (1<<3)) { // WE_HAVE_A_SCALE
+            mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+            mtx[1] = mtx[2] = 0;
+         } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE
+            mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
+            mtx[1] = mtx[2] = 0;
+            mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+         } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO
+            mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
+            mtx[1] = ttSHORT(comp)/16384.0f; comp+=2;
+            mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
+            mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+         }
+         
+         // Find transformation scales.
+         m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
+         n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
+
+         // Get indexed glyph.
+         comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts);
+         if (comp_num_verts > 0) {
+            // Transform vertices.
+            for (i = 0; i < comp_num_verts; ++i) {
+               stbtt_vertex* v = &comp_verts[i];
+               stbtt_vertex_type x,y;
+               x=v->x; y=v->y;
+               v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
+               v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
+               x=v->cx; y=v->cy;
+               v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
+               v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
+            }
+            // Append vertices.
+            tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata);
+            if (!tmp) {
+               if (vertices) STBTT_free(vertices, info->userdata);
+               if (comp_verts) STBTT_free(comp_verts, info->userdata);
+               return 0;
+            }
+            if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); //-V595
+            STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex));
+            if (vertices) STBTT_free(vertices, info->userdata);
+            vertices = tmp;
+            STBTT_free(comp_verts, info->userdata);
+            num_vertices += comp_num_verts;
+         }
+         // More components ?
+         more = flags & (1<<5);
+      }
+   } else if (numberOfContours < 0) {
+      // @TODO other compound variations?
+      STBTT_assert(0);
+   } else {
+      // numberOfCounters == 0, do nothing
+   }
+
+   *pvertices = vertices;
+   return num_vertices;
+}
+
+typedef struct
+{
+   int bounds;
+   int started;
+   float first_x, first_y;
+   float x, y;
+   stbtt_int32 min_x, max_x, min_y, max_y;
+
+   stbtt_vertex *pvertices;
+   int num_vertices;
+} stbtt__csctx;
+
+#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0}
+
+static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y)
+{
+   if (x > c->max_x || !c->started) c->max_x = x;
+   if (y > c->max_y || !c->started) c->max_y = y;
+   if (x < c->min_x || !c->started) c->min_x = x;
+   if (y < c->min_y || !c->started) c->min_y = y;
+   c->started = 1;
+}
+
+static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1)
+{
+   if (c->bounds) {
+      stbtt__track_vertex(c, x, y);
+      if (type == STBTT_vcubic) {
+         stbtt__track_vertex(c, cx, cy);
+         stbtt__track_vertex(c, cx1, cy1);
+      }
+   } else {
+      stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy);
+      c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1;
+      c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1;
+   }
+   c->num_vertices++;
+}
+
+static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
+{
+   if (ctx->first_x != ctx->x || ctx->first_y != ctx->y)
+      stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
+{
+   stbtt__csctx_close_shape(ctx);
+   ctx->first_x = ctx->x = ctx->x + dx;
+   ctx->first_y = ctx->y = ctx->y + dy;
+   stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
+{
+   ctx->x += dx;
+   ctx->y += dy;
+   stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3)
+{
+   float cx1 = ctx->x + dx1;
+   float cy1 = ctx->y + dy1;
+   float cx2 = cx1 + dx2;
+   float cy2 = cy1 + dy2;
+   ctx->x = cx2 + dx3;
+   ctx->y = cy2 + dy3;
+   stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2);
+}
+
+static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
+{
+   int count = stbtt__cff_index_count(&idx);
+   int bias = 107;
+   if (count >= 33900)
+      bias = 32768;
+   else if (count >= 1240)
+      bias = 1131;
+   n += bias;
+   if (n < 0 || n >= count)
+      return stbtt__new_buf(NULL, 0);
+   return stbtt__cff_index_get(idx, n);
+}
+
+static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index)
+{
+   stbtt__buf fdselect = info->fdselect;
+   int nranges, start, end, v, fmt, fdselector = -1, i;
+
+   stbtt__buf_seek(&fdselect, 0);
+   fmt = stbtt__buf_get8(&fdselect);
+   if (fmt == 0) {
+      // untested
+      stbtt__buf_skip(&fdselect, glyph_index);
+      fdselector = stbtt__buf_get8(&fdselect);
+   } else if (fmt == 3) {
+      nranges = stbtt__buf_get16(&fdselect);
+      start = stbtt__buf_get16(&fdselect);
+      for (i = 0; i < nranges; i++) {
+         v = stbtt__buf_get8(&fdselect);
+         end = stbtt__buf_get16(&fdselect);
+         if (glyph_index >= start && glyph_index < end) {
+            fdselector = v;
+            break;
+         }
+         start = end;
+      }
+   }
+   if (fdselector == -1) stbtt__new_buf(NULL, 0);
+   return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector));
+}
+
+static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
+{
+   int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
+   int has_subrs = 0, clear_stack;
+   float s[48];
+   stbtt__buf subr_stack[10], subrs = info->subrs, b;
+   float f;
+
+#define STBTT__CSERR(s) (0)
+
+   // this currently ignores the initial width value, which isn't needed if we have hmtx
+   b = stbtt__cff_index_get(info->charstrings, glyph_index);
+   while (b.cursor < b.size) {
+      i = 0;
+      clear_stack = 1;
+      b0 = stbtt__buf_get8(&b);
+      switch (b0) {
+      // @TODO implement hinting
+      case 0x13: // hintmask
+      case 0x14: // cntrmask
+         if (in_header)
+            maskbits += (sp / 2); // implicit "vstem"
+         in_header = 0;
+         stbtt__buf_skip(&b, (maskbits + 7) / 8);
+         break;
+
+      case 0x01: // hstem
+      case 0x03: // vstem
+      case 0x12: // hstemhm
+      case 0x17: // vstemhm
+         maskbits += (sp / 2);
+         break;
+
+      case 0x15: // rmoveto
+         in_header = 0;
+         if (sp < 2) return STBTT__CSERR("rmoveto stack");
+         stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]);
+         break;
+      case 0x04: // vmoveto
+         in_header = 0;
+         if (sp < 1) return STBTT__CSERR("vmoveto stack");
+         stbtt__csctx_rmove_to(c, 0, s[sp-1]);
+         break;
+      case 0x16: // hmoveto
+         in_header = 0;
+         if (sp < 1) return STBTT__CSERR("hmoveto stack");
+         stbtt__csctx_rmove_to(c, s[sp-1], 0);
+         break;
+
+      case 0x05: // rlineto
+         if (sp < 2) return STBTT__CSERR("rlineto stack");
+         for (; i + 1 < sp; i += 2)
+            stbtt__csctx_rline_to(c, s[i], s[i+1]);
+         break;
+
+      // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
+      // starting from a different place.
+
+      case 0x07: // vlineto
+         if (sp < 1) return STBTT__CSERR("vlineto stack");
+         goto vlineto;
+      case 0x06: // hlineto
+         if (sp < 1) return STBTT__CSERR("hlineto stack");
+         for (;;) {
+            if (i >= sp) break;
+            stbtt__csctx_rline_to(c, s[i], 0);
+            i++;
+      vlineto:
+            if (i >= sp) break;
+            stbtt__csctx_rline_to(c, 0, s[i]);
+            i++;
+         }
+         break;
+
+      case 0x1F: // hvcurveto
+         if (sp < 4) return STBTT__CSERR("hvcurveto stack");
+         goto hvcurveto;
+      case 0x1E: // vhcurveto
+         if (sp < 4) return STBTT__CSERR("vhcurveto stack");
+         for (;;) {
+            if (i + 3 >= sp) break;
+            stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f);
+            i += 4;
+      hvcurveto:
+            if (i + 3 >= sp) break;
+            stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]);
+            i += 4;
+         }
+         break;
+
+      case 0x08: // rrcurveto
+         if (sp < 6) return STBTT__CSERR("rcurveline stack");
+         for (; i + 5 < sp; i += 6)
+            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+         break;
+
+      case 0x18: // rcurveline
+         if (sp < 8) return STBTT__CSERR("rcurveline stack");
+         for (; i + 5 < sp - 2; i += 6)
+            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+         if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack");
+         stbtt__csctx_rline_to(c, s[i], s[i+1]);
+         break;
+
+      case 0x19: // rlinecurve
+         if (sp < 8) return STBTT__CSERR("rlinecurve stack");
+         for (; i + 1 < sp - 6; i += 2)
+            stbtt__csctx_rline_to(c, s[i], s[i+1]);
+         if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack");
+         stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+         break;
+
+      case 0x1A: // vvcurveto
+      case 0x1B: // hhcurveto
+         if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack");
+         f = 0.0;
+         if (sp & 1) { f = s[i]; i++; }
+         for (; i + 3 < sp; i += 4) {
+            if (b0 == 0x1B)
+               stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0);
+            else
+               stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]);
+            f = 0.0;
+         }
+         break;
+
+      case 0x0A: // callsubr
+         if (!has_subrs) {
+            if (info->fdselect.size)
+               subrs = stbtt__cid_get_glyph_subrs(info, glyph_index);
+            has_subrs = 1;
+         }
+         // fallthrough
+      case 0x1D: // callgsubr
+         if (sp < 1) return STBTT__CSERR("call(g|)subr stack");
+         v = (int) s[--sp];
+         if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit");
+         subr_stack[subr_stack_height++] = b;
+         b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v);
+         if (b.size == 0) return STBTT__CSERR("subr not found");
+         b.cursor = 0;
+         clear_stack = 0;
+         break;
+
+      case 0x0B: // return
+         if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr");
+         b = subr_stack[--subr_stack_height];
+         clear_stack = 0;
+         break;
+
+      case 0x0E: // endchar
+         stbtt__csctx_close_shape(c);
+         return 1;
+
+      case 0x0C: { // two-byte escape
+         float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6;
+         float dx, dy;
+         int b1 = stbtt__buf_get8(&b);
+         switch (b1) {
+         // @TODO These "flex" implementations ignore the flex-depth and resolution,
+         // and always draw beziers.
+         case 0x22: // hflex
+            if (sp < 7) return STBTT__CSERR("hflex stack");
+            dx1 = s[0];
+            dx2 = s[1];
+            dy2 = s[2];
+            dx3 = s[3];
+            dx4 = s[4];
+            dx5 = s[5];
+            dx6 = s[6];
+            stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0);
+            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0);
+            break;
+
+         case 0x23: // flex
+            if (sp < 13) return STBTT__CSERR("flex stack");
+            dx1 = s[0];
+            dy1 = s[1];
+            dx2 = s[2];
+            dy2 = s[3];
+            dx3 = s[4];
+            dy3 = s[5];
+            dx4 = s[6];
+            dy4 = s[7];
+            dx5 = s[8];
+            dy5 = s[9];
+            dx6 = s[10];
+            dy6 = s[11];
+            //fd is s[12]
+            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+            break;
+
+         case 0x24: // hflex1
+            if (sp < 9) return STBTT__CSERR("hflex1 stack");
+            dx1 = s[0];
+            dy1 = s[1];
+            dx2 = s[2];
+            dy2 = s[3];
+            dx3 = s[4];
+            dx4 = s[5];
+            dx5 = s[6];
+            dy5 = s[7];
+            dx6 = s[8];
+            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0);
+            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5));
+            break;
+
+         case 0x25: // flex1
+            if (sp < 11) return STBTT__CSERR("flex1 stack");
+            dx1 = s[0];
+            dy1 = s[1];
+            dx2 = s[2];
+            dy2 = s[3];
+            dx3 = s[4];
+            dy3 = s[5];
+            dx4 = s[6];
+            dy4 = s[7];
+            dx5 = s[8];
+            dy5 = s[9];
+            dx6 = dy6 = s[10];
+            dx = dx1+dx2+dx3+dx4+dx5;
+            dy = dy1+dy2+dy3+dy4+dy5;
+            if (STBTT_fabs(dx) > STBTT_fabs(dy))
+               dy6 = -dy;
+            else
+               dx6 = -dx;
+            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+            break;
+
+         default:
+            return STBTT__CSERR("unimplemented");
+         }
+      } break;
+
+      default:
+         if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) //-V560
+            return STBTT__CSERR("reserved operator");
+
+         // push immediate
+         if (b0 == 255) {
+            f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000;
+         } else {
+            stbtt__buf_skip(&b, -1);
+            f = (float)(stbtt_int16)stbtt__cff_int(&b);
+         }
+         if (sp >= 48) return STBTT__CSERR("push stack overflow");
+         s[sp++] = f;
+         clear_stack = 0;
+         break;
+      }
+      if (clear_stack) sp = 0;
+   }
+   return STBTT__CSERR("no endchar");
+
+#undef STBTT__CSERR
+}
+
+static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+   // runs the charstring twice, once to count and once to output (to avoid realloc)
+   stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1);
+   stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0);
+   if (stbtt__run_charstring(info, glyph_index, &count_ctx)) {
+      *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata);
+      output_ctx.pvertices = *pvertices;
+      if (stbtt__run_charstring(info, glyph_index, &output_ctx)) {
+         STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices);
+         return output_ctx.num_vertices;
+      }
+   }
+   *pvertices = NULL;
+   return 0;
+}
+
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
+{
+   stbtt__csctx c = STBTT__CSCTX_INIT(1);
+   int r = stbtt__run_charstring(info, glyph_index, &c);
+   if (x0)  *x0 = r ? c.min_x : 0;
+   if (y0)  *y0 = r ? c.min_y : 0;
+   if (x1)  *x1 = r ? c.max_x : 0;
+   if (y1)  *y1 = r ? c.max_y : 0;
+   return r ? c.num_vertices : 0;
+}
+
+STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+   if (!info->cff.size)
+      return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices);
+   else
+      return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices);
+}
+
+STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing)
+{
+   stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34);
+   if (glyph_index < numOfLongHorMetrics) {
+      if (advanceWidth)     *advanceWidth    = ttSHORT(info->data + info->hmtx + 4*glyph_index);
+      if (leftSideBearing)  *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2);
+   } else {
+      if (advanceWidth)     *advanceWidth    = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1));
+      if (leftSideBearing)  *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics));
+   }
+}
+
+static int  stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
+{
+   stbtt_uint8 *data = info->data + info->kern;
+   stbtt_uint32 needle, straw;
+   int l, r, m;
+
+   // we only look at the first table. it must be 'horizontal' and format 0.
+   if (!info->kern)
+      return 0;
+   if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
+      return 0;
+   if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
+      return 0;
+
+   l = 0;
+   r = ttUSHORT(data+10) - 1;
+   needle = glyph1 << 16 | glyph2;
+   while (l <= r) {
+      m = (l + r) >> 1;
+      straw = ttULONG(data+18+(m*6)); // note: unaligned read
+      if (needle < straw)
+         r = m - 1;
+      else if (needle > straw)
+         l = m + 1;
+      else
+         return ttSHORT(data+22+(m*6));
+   }
+   return 0;
+}
+
+static stbtt_int32  stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph)
+{
+    stbtt_uint16 coverageFormat = ttUSHORT(coverageTable);
+    switch(coverageFormat) {
+        case 1: {
+            stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2);
+
+            // Binary search.
+            stbtt_int32 l=0, r=glyphCount-1, m;
+            int straw, needle=glyph;
+            while (l <= r) {
+                stbtt_uint8 *glyphArray = coverageTable + 4;
+                stbtt_uint16 glyphID;
+                m = (l + r) >> 1;
+                glyphID = ttUSHORT(glyphArray + 2 * m);
+                straw = glyphID;
+                if (needle < straw)
+                    r = m - 1;
+                else if (needle > straw)
+                    l = m + 1;
+                else {
+                     return m;
+                }
+            }
+        } break;
+
+        case 2: {
+            stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2);
+            stbtt_uint8 *rangeArray = coverageTable + 4;
+
+            // Binary search.
+            stbtt_int32 l=0, r=rangeCount-1, m;
+            int strawStart, strawEnd, needle=glyph;
+            while (l <= r) {
+                stbtt_uint8 *rangeRecord;
+                m = (l + r) >> 1;
+                rangeRecord = rangeArray + 6 * m;
+                strawStart = ttUSHORT(rangeRecord);
+                strawEnd = ttUSHORT(rangeRecord + 2);
+                if (needle < strawStart)
+                    r = m - 1;
+                else if (needle > strawEnd)
+                    l = m + 1;
+                else {
+                    stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4);
+                    return startCoverageIndex + glyph - strawStart;
+                }
+            }
+        } break;
+
+        default: {
+            // There are no other cases.
+            STBTT_assert(0);
+        } break;
+    }
+
+    return -1;
+}
+
+static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph)
+{
+    stbtt_uint16 classDefFormat = ttUSHORT(classDefTable);
+    switch(classDefFormat)
+    {
+        case 1: {
+            stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2);
+            stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4);
+            stbtt_uint8 *classDef1ValueArray = classDefTable + 6;
+
+            if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount)
+                return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID));
+
+            // [DEAR IMGUI] Commented to fix static analyzer warning
+            //classDefTable = classDef1ValueArray + 2 * glyphCount;
+        } break;
+
+        case 2: {
+            stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2);
+            stbtt_uint8 *classRangeRecords = classDefTable + 4;
+
+            // Binary search.
+            stbtt_int32 l=0, r=classRangeCount-1, m;
+            int strawStart, strawEnd, needle=glyph;
+            while (l <= r) {
+                stbtt_uint8 *classRangeRecord;
+                m = (l + r) >> 1;
+                classRangeRecord = classRangeRecords + 6 * m;
+                strawStart = ttUSHORT(classRangeRecord);
+                strawEnd = ttUSHORT(classRangeRecord + 2);
+                if (needle < strawStart)
+                    r = m - 1;
+                else if (needle > strawEnd)
+                    l = m + 1;
+                else
+                    return (stbtt_int32)ttUSHORT(classRangeRecord + 4);
+            }
+
+            // [DEAR IMGUI] Commented to fix static analyzer warning
+            //classDefTable = classRangeRecords + 6 * classRangeCount;
+        } break;
+
+        default: {
+            // There are no other cases.
+            STBTT_assert(0);
+        } break;
+    }
+
+    return -1;
+}
+
+// Define to STBTT_assert(x) if you want to break on unimplemented formats.
+#define STBTT_GPOS_TODO_assert(x)
+
+static stbtt_int32  stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
+{
+    stbtt_uint16 lookupListOffset;
+    stbtt_uint8 *lookupList;
+    stbtt_uint16 lookupCount;
+    stbtt_uint8 *data;
+    stbtt_int32 i;
+
+    if (!info->gpos) return 0;
+
+    data = info->data + info->gpos;
+
+    if (ttUSHORT(data+0) != 1) return 0; // Major version 1
+    if (ttUSHORT(data+2) != 0) return 0; // Minor version 0
+
+    lookupListOffset = ttUSHORT(data+8);
+    lookupList = data + lookupListOffset;
+    lookupCount = ttUSHORT(lookupList);
+
+    for (i=0; i<lookupCount; ++i) {
+        stbtt_uint16 lookupOffset = ttUSHORT(lookupList + 2 + 2 * i);
+        stbtt_uint8 *lookupTable = lookupList + lookupOffset;
+
+        stbtt_uint16 lookupType = ttUSHORT(lookupTable);
+        stbtt_uint16 subTableCount = ttUSHORT(lookupTable + 4);
+        stbtt_uint8 *subTableOffsets = lookupTable + 6;
+        switch(lookupType) {
+            case 2: { // Pair Adjustment Positioning Subtable
+                stbtt_int32 sti;
+                for (sti=0; sti<subTableCount; sti++) {
+                    stbtt_uint16 subtableOffset = ttUSHORT(subTableOffsets + 2 * sti);
+                    stbtt_uint8 *table = lookupTable + subtableOffset;
+                    stbtt_uint16 posFormat = ttUSHORT(table);
+                    stbtt_uint16 coverageOffset = ttUSHORT(table + 2);
+                    stbtt_int32 coverageIndex = stbtt__GetCoverageIndex(table + coverageOffset, glyph1);
+                    if (coverageIndex == -1) continue;
+
+                    switch (posFormat) {
+                        case 1: {
+                            stbtt_int32 l, r, m;
+                            int straw, needle;
+                            stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
+                            stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
+                            stbtt_int32 valueRecordPairSizeInBytes = 2;
+                            stbtt_uint16 pairSetCount = ttUSHORT(table + 8);
+                            stbtt_uint16 pairPosOffset = ttUSHORT(table + 10 + 2 * coverageIndex);
+                            stbtt_uint8 *pairValueTable = table + pairPosOffset;
+                            stbtt_uint16 pairValueCount = ttUSHORT(pairValueTable);
+                            stbtt_uint8 *pairValueArray = pairValueTable + 2;
+                            // TODO: Support more formats.
+                            STBTT_GPOS_TODO_assert(valueFormat1 == 4);
+                            if (valueFormat1 != 4) return 0;
+                            STBTT_GPOS_TODO_assert(valueFormat2 == 0);
+                            if (valueFormat2 != 0) return 0;
+
+                            STBTT_assert(coverageIndex < pairSetCount);
+                            STBTT__NOTUSED(pairSetCount);
+
+                            needle=glyph2;
+                            r=pairValueCount-1;
+                            l=0;
+
+                            // Binary search.
+                            while (l <= r) {
+                                stbtt_uint16 secondGlyph;
+                                stbtt_uint8 *pairValue;
+                                m = (l + r) >> 1;
+                                pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m;
+                                secondGlyph = ttUSHORT(pairValue);
+                                straw = secondGlyph;
+                                if (needle < straw)
+                                    r = m - 1;
+                                else if (needle > straw)
+                                    l = m + 1;
+                                else {
+                                    stbtt_int16 xAdvance = ttSHORT(pairValue + 2);
+                                    return xAdvance;
+                                }
+                            }
+                        } break;
+
+                        case 2: {
+                            stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
+                            stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
+
+                            stbtt_uint16 classDef1Offset = ttUSHORT(table + 8);
+                            stbtt_uint16 classDef2Offset = ttUSHORT(table + 10);
+                            int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1);
+                            int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2);
+
+                            stbtt_uint16 class1Count = ttUSHORT(table + 12);
+                            stbtt_uint16 class2Count = ttUSHORT(table + 14);
+                            STBTT_assert(glyph1class < class1Count);
+                            STBTT_assert(glyph2class < class2Count);
+
+                            // TODO: Support more formats.
+                            STBTT_GPOS_TODO_assert(valueFormat1 == 4);
+                            if (valueFormat1 != 4) return 0;
+                            STBTT_GPOS_TODO_assert(valueFormat2 == 0);
+                            if (valueFormat2 != 0) return 0;
+
+                            if (glyph1class >= 0 && glyph1class < class1Count && glyph2class >= 0 && glyph2class < class2Count) {
+                                stbtt_uint8 *class1Records = table + 16;
+                                stbtt_uint8 *class2Records = class1Records + 2 * (glyph1class * class2Count);
+                                stbtt_int16 xAdvance = ttSHORT(class2Records + 2 * glyph2class);
+                                return xAdvance;
+                            }
+                        } break;
+
+                        default: {
+                            // There are no other cases.
+                            STBTT_assert(0);
+                            break;
+                        } // [DEAR IMGUI] removed ;
+                    }
+                }
+                break;
+            } // [DEAR IMGUI] removed ;
+
+            default:
+                // TODO: Implement other stuff.
+                break;
+        }
+    }
+
+    return 0;
+}
+
+STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2)
+{
+   int xAdvance = 0;
+
+   if (info->gpos)
+      xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2);
+
+   if (info->kern)
+      xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2);
+
+   return xAdvance;
+}
+
+STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2)
+{
+   if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs
+      return 0;
+   return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2));
+}
+
+STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing)
+{
+   stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing);
+}
+
+STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap)
+{
+   if (ascent ) *ascent  = ttSHORT(info->data+info->hhea + 4);
+   if (descent) *descent = ttSHORT(info->data+info->hhea + 6);
+   if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8);
+}
+
+STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap)
+{
+   int tab = stbtt__find_table(info->data, info->fontstart, "OS/2");
+   if (!tab)
+      return 0;
+   if (typoAscent ) *typoAscent  = ttSHORT(info->data+tab + 68);
+   if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70);
+   if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72);
+   return 1;
+}
+
+STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1)
+{
+   *x0 = ttSHORT(info->data + info->head + 36);
+   *y0 = ttSHORT(info->data + info->head + 38);
+   *x1 = ttSHORT(info->data + info->head + 40);
+   *y1 = ttSHORT(info->data + info->head + 42);
+}
+
+STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height)
+{
+   int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6);
+   return (float) height / fheight;
+}
+
+STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels)
+{
+   int unitsPerEm = ttUSHORT(info->data + info->head + 18);
+   return pixels / unitsPerEm;
+}
+
+STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
+{
+   STBTT_free(v, info->userdata);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// antialiasing software rasterizer
+//
+
+STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+   int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning
+   if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) {
+      // e.g. space character
+      if (ix0) *ix0 = 0;
+      if (iy0) *iy0 = 0;
+      if (ix1) *ix1 = 0;
+      if (iy1) *iy1 = 0;
+   } else {
+      // move to integral bboxes (treating pixels as little squares, what pixels get touched)?
+      if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x);
+      if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y);
+      if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x);
+      if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y);
+   }
+}
+
+STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+   stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1);
+}
+
+STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+   stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1);
+}
+
+STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+   stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+//  Rasterizer
+
+typedef struct stbtt__hheap_chunk
+{
+   struct stbtt__hheap_chunk *next;
+} stbtt__hheap_chunk;
+
+typedef struct stbtt__hheap
+{
+   struct stbtt__hheap_chunk *head;
+   void   *first_free;
+   int    num_remaining_in_head_chunk;
+} stbtt__hheap;
+
+static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata)
+{
+   if (hh->first_free) {
+      void *p = hh->first_free;
+      hh->first_free = * (void **) p;
+      return p;
+   } else {
+      if (hh->num_remaining_in_head_chunk == 0) {
+         int count = (size < 32 ? 2000 : size < 128 ? 800 : 100);
+         stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata);
+         if (c == NULL)
+            return NULL;
+         c->next = hh->head;
+         hh->head = c;
+         hh->num_remaining_in_head_chunk = count;
+      }
+      --hh->num_remaining_in_head_chunk;
+      return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk;
+   }
+}
+
+static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
+{
+   *(void **) p = hh->first_free;
+   hh->first_free = p;
+}
+
+static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
+{
+   stbtt__hheap_chunk *c = hh->head;
+   while (c) {
+      stbtt__hheap_chunk *n = c->next;
+      STBTT_free(c, userdata);
+      c = n;
+   }
+}
+
+typedef struct stbtt__edge {
+   float x0,y0, x1,y1;
+   int invert;
+} stbtt__edge;
+
+
+typedef struct stbtt__active_edge
+{
+   struct stbtt__active_edge *next;
+   #if STBTT_RASTERIZER_VERSION==1
+   int x,dx;
+   float ey;
+   int direction;
+   #elif STBTT_RASTERIZER_VERSION==2
+   float fx,fdx,fdy;
+   float direction;
+   float sy;
+   float ey;
+   #else
+   #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+   #endif
+} stbtt__active_edge;
+
+#if STBTT_RASTERIZER_VERSION == 1
+#define STBTT_FIXSHIFT   10
+#define STBTT_FIX        (1 << STBTT_FIXSHIFT)
+#define STBTT_FIXMASK    (STBTT_FIX-1)
+
+static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
+{
+   stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
+   float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
+   STBTT_assert(z != NULL);
+   if (!z) return z;
+   
+   // round dx down to avoid overshooting
+   if (dxdy < 0)
+      z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
+   else
+      z->dx = STBTT_ifloor(STBTT_FIX * dxdy);
+
+   z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount
+   z->x -= off_x * STBTT_FIX;
+
+   z->ey = e->y1;
+   z->next = 0;
+   z->direction = e->invert ? 1 : -1;
+   return z;
+}
+#elif STBTT_RASTERIZER_VERSION == 2
+static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
+{
+   stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
+   float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
+   STBTT_assert(z != NULL);
+   //STBTT_assert(e->y0 <= start_point);
+   if (!z) return z;
+   z->fdx = dxdy;
+   z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f;
+   z->fx = e->x0 + dxdy * (start_point - e->y0);
+   z->fx -= off_x;
+   z->direction = e->invert ? 1.0f : -1.0f;
+   z->sy = e->y0;
+   z->ey = e->y1;
+   z->next = 0;
+   return z;
+}
+#else
+#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+
+#if STBTT_RASTERIZER_VERSION == 1
+// note: this routine clips fills that extend off the edges... ideally this
+// wouldn't happen, but it could happen if the truetype glyph bounding boxes
+// are wrong, or if the user supplies a too-small bitmap
+static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight)
+{
+   // non-zero winding fill
+   int x0=0, w=0;
+
+   while (e) {
+      if (w == 0) {
+         // if we're currently at zero, we need to record the edge start point
+         x0 = e->x; w += e->direction;
+      } else {
+         int x1 = e->x; w += e->direction;
+         // if we went to zero, we need to draw
+         if (w == 0) {
+            int i = x0 >> STBTT_FIXSHIFT;
+            int j = x1 >> STBTT_FIXSHIFT;
+
+            if (i < len && j >= 0) {
+               if (i == j) {
+                  // x0,x1 are the same pixel, so compute combined coverage
+                  scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT);
+               } else {
+                  if (i >= 0) // add antialiasing for x0
+                     scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT);
+                  else
+                     i = -1; // clip
+
+                  if (j < len) // add antialiasing for x1
+                     scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT);
+                  else
+                     j = len; // clip
+
+                  for (++i; i < j; ++i) // fill pixels between x0 and x1
+                     scanline[i] = scanline[i] + (stbtt_uint8) max_weight;
+               }
+            }
+         }
+      }
+      
+      e = e->next;
+   }
+}
+
+static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
+{
+   stbtt__hheap hh = { 0, 0, 0 };
+   stbtt__active_edge *active = NULL;
+   int y,j=0;
+   int max_weight = (255 / vsubsample);  // weight per vertical scanline
+   int s; // vertical subsample index
+   unsigned char scanline_data[512], *scanline;
+
+   if (result->w > 512)
+      scanline = (unsigned char *) STBTT_malloc(result->w, userdata);
+   else
+      scanline = scanline_data;
+
+   y = off_y * vsubsample;
+   e[n].y0 = (off_y + result->h) * (float) vsubsample + 1;
+
+   while (j < result->h) {
+      STBTT_memset(scanline, 0, result->w);
+      for (s=0; s < vsubsample; ++s) {
+         // find center of pixel for this scanline
+         float scan_y = y + 0.5f;
+         stbtt__active_edge **step = &active;
+
+         // update all active edges;
+         // remove all active edges that terminate before the center of this scanline
+         while (*step) {
+            stbtt__active_edge * z = *step;
+            if (z->ey <= scan_y) {
+               *step = z->next; // delete from list
+               STBTT_assert(z->direction);
+               z->direction = 0;
+               stbtt__hheap_free(&hh, z);
+            } else {
+               z->x += z->dx; // advance to position for current scanline
+               step = &((*step)->next); // advance through list
+            }
+         }
+
+         // resort the list if needed
+         for(;;) {
+            int changed=0;
+            step = &active;
+            while (*step && (*step)->next) {
+               if ((*step)->x > (*step)->next->x) {
+                  stbtt__active_edge *t = *step;
+                  stbtt__active_edge *q = t->next;
+
+                  t->next = q->next;
+                  q->next = t;
+                  *step = q;
+                  changed = 1;
+               }
+               step = &(*step)->next;
+            }
+            if (!changed) break;
+         }
+
+         // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline
+         while (e->y0 <= scan_y) {
+            if (e->y1 > scan_y) {
+               stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata);
+               if (z != NULL) {
+                  // find insertion point
+                  if (active == NULL)
+                     active = z;
+                  else if (z->x < active->x) {
+                     // insert at front
+                     z->next = active;
+                     active = z;
+                  } else {
+                     // find thing to insert AFTER
+                     stbtt__active_edge *p = active;
+                     while (p->next && p->next->x < z->x)
+                        p = p->next;
+                     // at this point, p->next->x is NOT < z->x
+                     z->next = p->next;
+                     p->next = z;
+                  }
+               }
+            }
+            ++e;
+         }
+
+         // now process all active edges in XOR fashion
+         if (active)
+            stbtt__fill_active_edges(scanline, result->w, active, max_weight);
+
+         ++y;
+      }
+      STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w);
+      ++j;
+   }
+
+   stbtt__hheap_cleanup(&hh, userdata);
+
+   if (scanline != scanline_data)
+      STBTT_free(scanline, userdata);
+}
+
+#elif STBTT_RASTERIZER_VERSION == 2
+
+// the edge passed in here does not cross the vertical line at x or the vertical line at x+1
+// (i.e. it has already been clipped to those)
+static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1)
+{
+   if (y0 == y1) return;
+   STBTT_assert(y0 < y1);
+   STBTT_assert(e->sy <= e->ey);
+   if (y0 > e->ey) return;
+   if (y1 < e->sy) return;
+   if (y0 < e->sy) {
+      x0 += (x1-x0) * (e->sy - y0) / (y1-y0);
+      y0 = e->sy;
+   }
+   if (y1 > e->ey) {
+      x1 += (x1-x0) * (e->ey - y1) / (y1-y0);
+      y1 = e->ey;
+   }
+
+   if (x0 == x)
+      STBTT_assert(x1 <= x+1);
+   else if (x0 == x+1)
+      STBTT_assert(x1 >= x);
+   else if (x0 <= x)
+      STBTT_assert(x1 <= x);
+   else if (x0 >= x+1)
+      STBTT_assert(x1 >= x+1);
+   else
+      STBTT_assert(x1 >= x && x1 <= x+1);
+
+   if (x0 <= x && x1 <= x)
+      scanline[x] += e->direction * (y1-y0);
+   else if (x0 >= x+1 && x1 >= x+1)
+      ;
+   else {
+      STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1);
+      scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position
+   }
+}
+
+static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top)
+{
+   float y_bottom = y_top+1;
+
+   while (e) {
+      // brute force every pixel
+
+      // compute intersection points with top & bottom
+      STBTT_assert(e->ey >= y_top);
+
+      if (e->fdx == 0) {
+         float x0 = e->fx;
+         if (x0 < len) {
+            if (x0 >= 0) {
+               stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom);
+               stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom);
+            } else {
+               stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom);
+            }
+         }
+      } else {
+         float x0 = e->fx;
+         float dx = e->fdx;
+         float xb = x0 + dx;
+         float x_top, x_bottom;
+         float sy0,sy1;
+         float dy = e->fdy;
+         STBTT_assert(e->sy <= y_bottom && e->ey >= y_top);
+
+         // compute endpoints of line segment clipped to this scanline (if the
+         // line segment starts on this scanline. x0 is the intersection of the
+         // line with y_top, but that may be off the line segment.
+         if (e->sy > y_top) {
+            x_top = x0 + dx * (e->sy - y_top);
+            sy0 = e->sy;
+         } else {
+            x_top = x0;
+            sy0 = y_top;
+         }
+         if (e->ey < y_bottom) {
+            x_bottom = x0 + dx * (e->ey - y_top);
+            sy1 = e->ey;
+         } else {
+            x_bottom = xb;
+            sy1 = y_bottom;
+         }
+
+         if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) {
+            // from here on, we don't have to range check x values
+
+            if ((int) x_top == (int) x_bottom) {
+               float height;
+               // simple case, only spans one pixel
+               int x = (int) x_top;
+               height = sy1 - sy0;
+               STBTT_assert(x >= 0 && x < len);
+               scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2)  * height;
+               scanline_fill[x] += e->direction * height; // everything right of this pixel is filled
+            } else {
+               int x,x1,x2;
+               float y_crossing, step, sign, area;
+               // covers 2+ pixels
+               if (x_top > x_bottom) {
+                  // flip scanline vertically; signed area is the same
+                  float t;
+                  sy0 = y_bottom - (sy0 - y_top);
+                  sy1 = y_bottom - (sy1 - y_top);
+                  t = sy0, sy0 = sy1, sy1 = t;
+                  t = x_bottom, x_bottom = x_top, x_top = t;
+                  dx = -dx;
+                  dy = -dy;
+                  t = x0, x0 = xb, xb = t;
+                  // [DEAR IMGUI] Fix static analyzer warning
+                  (void)dx; // [ImGui: fix static analyzer warning]
+               }
+
+               x1 = (int) x_top;
+               x2 = (int) x_bottom;
+               // compute intersection with y axis at x1+1
+               y_crossing = (x1+1 - x0) * dy + y_top;
+
+               sign = e->direction;
+               // area of the rectangle covered from y0..y_crossing
+               area = sign * (y_crossing-sy0);
+               // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing)
+               scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2);
+
+               step = sign * dy;
+               for (x = x1+1; x < x2; ++x) {
+                  scanline[x] += area + step/2;
+                  area += step;
+               }
+               y_crossing += dy * (x2 - (x1+1));
+
+               STBTT_assert(STBTT_fabs(area) <= 1.01f);
+
+               scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing);
+
+               scanline_fill[x2] += sign * (sy1-sy0);
+            }
+         } else {
+            // if edge goes outside of box we're drawing, we require
+            // clipping logic. since this does not match the intended use
+            // of this library, we use a different, very slow brute
+            // force implementation
+            int x;
+            for (x=0; x < len; ++x) {
+               // cases:
+               //
+               // there can be up to two intersections with the pixel. any intersection
+               // with left or right edges can be handled by splitting into two (or three)
+               // regions. intersections with top & bottom do not necessitate case-wise logic.
+               //
+               // the old way of doing this found the intersections with the left & right edges,
+               // then used some simple logic to produce up to three segments in sorted order
+               // from top-to-bottom. however, this had a problem: if an x edge was epsilon
+               // across the x border, then the corresponding y position might not be distinct
+               // from the other y segment, and it might ignored as an empty segment. to avoid
+               // that, we need to explicitly produce segments based on x positions.
+
+               // rename variables to clearly-defined pairs
+               float y0 = y_top;
+               float x1 = (float) (x);
+               float x2 = (float) (x+1);
+               float x3 = xb;
+               float y3 = y_bottom;
+
+               // x = e->x + e->dx * (y-y_top)
+               // (y-y_top) = (x - e->x) / e->dx
+               // y = (x - e->x) / e->dx + y_top
+               float y1 = (x - x0) / dx + y_top;
+               float y2 = (x+1 - x0) / dx + y_top;
+
+               if (x0 < x1 && x3 > x2) {         // three segments descending down-right
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2);
+                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+               } else if (x3 < x1 && x0 > x2) {  // three segments descending down-left
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1);
+                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+               } else if (x0 < x1 && x3 > x1) {  // two segments across x, down-right
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+               } else if (x3 < x1 && x0 > x1) {  // two segments across x, down-left
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+               } else if (x0 < x2 && x3 > x2) {  // two segments across x+1, down-right
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+               } else if (x3 < x2 && x0 > x2) {  // two segments across x+1, down-left
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+               } else {  // one segment
+                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3);
+               }
+            }
+         }
+      }
+      e = e->next;
+   }
+}
+
+// directly AA rasterize edges w/o supersampling
+static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
+{
+   stbtt__hheap hh = { 0, 0, 0 };
+   stbtt__active_edge *active = NULL;
+   int y,j=0, i;
+   float scanline_data[129], *scanline, *scanline2;
+
+   STBTT__NOTUSED(vsubsample);
+
+   if (result->w > 64)
+      scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata);
+   else
+      scanline = scanline_data;
+
+   scanline2 = scanline + result->w;
+
+   y = off_y;
+   e[n].y0 = (float) (off_y + result->h) + 1;
+
+   while (j < result->h) {
+      // find center of pixel for this scanline
+      float scan_y_top    = y + 0.0f;
+      float scan_y_bottom = y + 1.0f;
+      stbtt__active_edge **step = &active;
+
+      STBTT_memset(scanline , 0, result->w*sizeof(scanline[0]));
+      STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0]));
+
+      // update all active edges;
+      // remove all active edges that terminate before the top of this scanline
+      while (*step) {
+         stbtt__active_edge * z = *step;
+         if (z->ey <= scan_y_top) {
+            *step = z->next; // delete from list
+            STBTT_assert(z->direction);
+            z->direction = 0;
+            stbtt__hheap_free(&hh, z);
+         } else {
+            step = &((*step)->next); // advance through list
+         }
+      }
+
+      // insert all edges that start before the bottom of this scanline
+      while (e->y0 <= scan_y_bottom) {
+         if (e->y0 != e->y1) {
+            stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata);
+            if (z != NULL) {
+               if (j == 0 && off_y != 0) {
+                  if (z->ey < scan_y_top) {
+                     // this can happen due to subpixel positioning and some kind of fp rounding error i think
+                     z->ey = scan_y_top;
+                  }
+               }
+               STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds
+               // insert at front
+               z->next = active;
+               active = z;
+            }
+         }
+         ++e;
+      }
+
+      // now process all active edges
+      if (active)
+         stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top);
+
+      {
+         float sum = 0;
+         for (i=0; i < result->w; ++i) {
+            float k;
+            int m;
+            sum += scanline2[i];
+            k = scanline[i] + sum;
+            k = (float) STBTT_fabs(k)*255 + 0.5f;
+            m = (int) k;
+            if (m > 255) m = 255;
+            result->pixels[j*result->stride + i] = (unsigned char) m;
+         }
+      }
+      // advance all the edges
+      step = &active;
+      while (*step) {
+         stbtt__active_edge *z = *step;
+         z->fx += z->fdx; // advance to position for current scanline
+         step = &((*step)->next); // advance through list
+      }
+
+      ++y;
+      ++j;
+   }
+
+   stbtt__hheap_cleanup(&hh, userdata);
+
+   if (scanline != scanline_data)
+      STBTT_free(scanline, userdata);
+}
+#else
+#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+
+#define STBTT__COMPARE(a,b)  ((a)->y0 < (b)->y0)
+
+static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
+{
+   int i,j;
+   for (i=1; i < n; ++i) {
+      stbtt__edge t = p[i], *a = &t;
+      j = i;
+      while (j > 0) {
+         stbtt__edge *b = &p[j-1];
+         int c = STBTT__COMPARE(a,b);
+         if (!c) break;
+         p[j] = p[j-1];
+         --j;
+      }
+      if (i != j)
+         p[j] = t;
+   }
+}
+
+static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
+{
+   /* threshold for transitioning to insertion sort */
+   while (n > 12) {
+      stbtt__edge t;
+      int c01,c12,c,m,i,j;
+
+      /* compute median of three */
+      m = n >> 1;
+      c01 = STBTT__COMPARE(&p[0],&p[m]);
+      c12 = STBTT__COMPARE(&p[m],&p[n-1]);
+      /* if 0 >= mid >= end, or 0 < mid < end, then use mid */
+      if (c01 != c12) {
+         /* otherwise, we'll need to swap something else to middle */
+         int z;
+         c = STBTT__COMPARE(&p[0],&p[n-1]);
+         /* 0>mid && mid<n:  0>n => n; 0<n => 0 */
+         /* 0<mid && mid>n:  0>n => 0; 0<n => n */
+         z = (c == c12) ? 0 : n-1;
+         t = p[z];
+         p[z] = p[m];
+         p[m] = t;
+      }
+      /* now p[m] is the median-of-three */
+      /* swap it to the beginning so it won't move around */
+      t = p[0];
+      p[0] = p[m];
+      p[m] = t;
+
+      /* partition loop */
+      i=1;
+      j=n-1;
+      for(;;) {
+         /* handling of equality is crucial here */
+         /* for sentinels & efficiency with duplicates */
+         for (;;++i) {
+            if (!STBTT__COMPARE(&p[i], &p[0])) break;
+         }
+         for (;;--j) {
+            if (!STBTT__COMPARE(&p[0], &p[j])) break;
+         }
+         /* make sure we haven't crossed */
+         if (i >= j) break;
+         t = p[i];
+         p[i] = p[j];
+         p[j] = t;
+
+         ++i;
+         --j;
+      }
+      /* recurse on smaller side, iterate on larger */
+      if (j < (n-i)) {
+         stbtt__sort_edges_quicksort(p,j);
+         p = p+i;
+         n = n-i;
+      } else {
+         stbtt__sort_edges_quicksort(p+i, n-i);
+         n = j;
+      }
+   }
+}
+
+static void stbtt__sort_edges(stbtt__edge *p, int n)
+{
+   stbtt__sort_edges_quicksort(p, n);
+   stbtt__sort_edges_ins_sort(p, n);
+}
+
+typedef struct
+{
+   float x,y;
+} stbtt__point;
+
+static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata)
+{
+   float y_scale_inv = invert ? -scale_y : scale_y;
+   stbtt__edge *e;
+   int n,i,j,k,m;
+#if STBTT_RASTERIZER_VERSION == 1
+   int vsubsample = result->h < 8 ? 15 : 5;
+#elif STBTT_RASTERIZER_VERSION == 2
+   int vsubsample = 1;
+#else
+   #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+   // vsubsample should divide 255 evenly; otherwise we won't reach full opacity
+
+   // now we have to blow out the windings into explicit edge lists
+   n = 0;
+   for (i=0; i < windings; ++i)
+      n += wcount[i];
+
+   e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel
+   if (e == 0) return;
+   n = 0;
+
+   m=0;
+   for (i=0; i < windings; ++i) {
+      stbtt__point *p = pts + m;
+      m += wcount[i];
+      j = wcount[i]-1;
+      for (k=0; k < wcount[i]; j=k++) {
+         int a=k,b=j;
+         // skip the edge if horizontal
+         if (p[j].y == p[k].y)
+            continue;
+         // add edge from j to k to the list
+         e[n].invert = 0;
+         if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) {
+            e[n].invert = 1;
+            a=j,b=k;
+         }
+         e[n].x0 = p[a].x * scale_x + shift_x;
+         e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample;
+         e[n].x1 = p[b].x * scale_x + shift_x;
+         e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample;
+         ++n;
+      }
+   }
+
+   // now sort the edges by their highest point (should snap to integer, and then by x)
+   //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare);
+   stbtt__sort_edges(e, n);
+
+   // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule
+   stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata);
+
+   STBTT_free(e, userdata);
+}
+
+static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
+{
+   if (!points) return; // during first pass, it's unallocated
+   points[n].x = x;
+   points[n].y = y;
+}
+
+// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching
+static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n)
+{
+   // midpoint
+   float mx = (x0 + 2*x1 + x2)/4;
+   float my = (y0 + 2*y1 + y2)/4;
+   // versus directly drawn line
+   float dx = (x0+x2)/2 - mx;
+   float dy = (y0+y2)/2 - my;
+   if (n > 16) // 65536 segments on one curve better be enough!
+      return 1;
+   if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA
+      stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1);
+      stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1);
+   } else {
+      stbtt__add_point(points, *num_points,x2,y2);
+      *num_points = *num_points+1;
+   }
+   return 1;
+}
+
+static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n)
+{
+   // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough
+   float dx0 = x1-x0;
+   float dy0 = y1-y0;
+   float dx1 = x2-x1;
+   float dy1 = y2-y1;
+   float dx2 = x3-x2;
+   float dy2 = y3-y2;
+   float dx = x3-x0;
+   float dy = y3-y0;
+   float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2));
+   float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy);
+   float flatness_squared = longlen*longlen-shortlen*shortlen;
+
+   if (n > 16) // 65536 segments on one curve better be enough!
+      return;
+
+   if (flatness_squared > objspace_flatness_squared) {
+      float x01 = (x0+x1)/2;
+      float y01 = (y0+y1)/2;
+      float x12 = (x1+x2)/2;
+      float y12 = (y1+y2)/2;
+      float x23 = (x2+x3)/2;
+      float y23 = (y2+y3)/2;
+
+      float xa = (x01+x12)/2;
+      float ya = (y01+y12)/2;
+      float xb = (x12+x23)/2;
+      float yb = (y12+y23)/2;
+
+      float mx = (xa+xb)/2;
+      float my = (ya+yb)/2;
+
+      stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1);
+      stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1);
+   } else {
+      stbtt__add_point(points, *num_points,x3,y3);
+      *num_points = *num_points+1;
+   }
+}
+
+// returns number of contours
+static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata)
+{
+   stbtt__point *points=0;
+   int num_points=0;
+
+   float objspace_flatness_squared = objspace_flatness * objspace_flatness;
+   int i,n=0,start=0, pass;
+
+   // count how many "moves" there are to get the contour count
+   for (i=0; i < num_verts; ++i)
+      if (vertices[i].type == STBTT_vmove)
+         ++n;
+
+   *num_contours = n;
+   if (n == 0) return 0;
+
+   *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata);
+
+   if (*contour_lengths == 0) {
+      *num_contours = 0;
+      return 0;
+   }
+
+   // make two passes through the points so we don't need to realloc
+   for (pass=0; pass < 2; ++pass) {
+      float x=0,y=0;
+      if (pass == 1) {
+         points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata);
+         if (points == NULL) goto error;
+      }
+      num_points = 0;
+      n= -1;
+      for (i=0; i < num_verts; ++i) {
+         switch (vertices[i].type) {
+            case STBTT_vmove:
+               // start the next contour
+               if (n >= 0)
+                  (*contour_lengths)[n] = num_points - start;
+               ++n;
+               start = num_points;
+
+               x = vertices[i].x, y = vertices[i].y;
+               stbtt__add_point(points, num_points++, x,y);
+               break;
+            case STBTT_vline:
+               x = vertices[i].x, y = vertices[i].y;
+               stbtt__add_point(points, num_points++, x, y);
+               break;
+            case STBTT_vcurve:
+               stbtt__tesselate_curve(points, &num_points, x,y,
+                                        vertices[i].cx, vertices[i].cy,
+                                        vertices[i].x,  vertices[i].y,
+                                        objspace_flatness_squared, 0);
+               x = vertices[i].x, y = vertices[i].y;
+               break;
+            case STBTT_vcubic:
+               stbtt__tesselate_cubic(points, &num_points, x,y,
+                                        vertices[i].cx, vertices[i].cy,
+                                        vertices[i].cx1, vertices[i].cy1,
+                                        vertices[i].x,  vertices[i].y,
+                                        objspace_flatness_squared, 0);
+               x = vertices[i].x, y = vertices[i].y;
+               break;
+         }
+      }
+      (*contour_lengths)[n] = num_points - start;
+   }
+
+   return points;
+error:
+   STBTT_free(points, userdata);
+   STBTT_free(*contour_lengths, userdata);
+   *contour_lengths = 0;
+   *num_contours = 0;
+   return NULL;
+}
+
+STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata)
+{
+   float scale            = scale_x > scale_y ? scale_y : scale_x;
+   int winding_count      = 0;
+   int *winding_lengths   = NULL;
+   stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata);
+   if (windings) {
+      stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata);
+      STBTT_free(winding_lengths, userdata);
+      STBTT_free(windings, userdata);
+   }
+}
+
+STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
+{
+   STBTT_free(bitmap, userdata);
+}
+
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff)
+{
+   int ix0,iy0,ix1,iy1;
+   stbtt__bitmap gbm;
+   stbtt_vertex *vertices;   
+   int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
+
+   if (scale_x == 0) scale_x = scale_y;
+   if (scale_y == 0) {
+      if (scale_x == 0) {
+         STBTT_free(vertices, info->userdata);
+         return NULL;
+      }
+      scale_y = scale_x;
+   }
+
+   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1);
+
+   // now we get the size
+   gbm.w = (ix1 - ix0);
+   gbm.h = (iy1 - iy0);
+   gbm.pixels = NULL; // in case we error
+
+   if (width ) *width  = gbm.w;
+   if (height) *height = gbm.h;
+   if (xoff  ) *xoff   = ix0;
+   if (yoff  ) *yoff   = iy0;
+   
+   if (gbm.w && gbm.h) {
+      gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
+      if (gbm.pixels) {
+         gbm.stride = gbm.w;
+
+         stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata);
+      }
+   }
+   STBTT_free(vertices, info->userdata);
+   return gbm.pixels;
+}   
+
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
+{
+   return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff);
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph)
+{
+   int ix0,iy0;
+   stbtt_vertex *vertices;
+   int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
+   stbtt__bitmap gbm;   
+
+   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
+   gbm.pixels = output;
+   gbm.w = out_w;
+   gbm.h = out_h;
+   gbm.stride = out_stride;
+
+   if (gbm.w && gbm.h)
+      stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata);
+
+   STBTT_free(vertices, info->userdata);
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph)
+{
+   stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph);
+}
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
+{
+   return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
+}   
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint)
+{
+   stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint));
+}
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint)
+{
+   stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint));
+}
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
+{
+   return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
+}   
+
+STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
+{
+   stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// bitmap baking
+//
+// This is SUPER-CRAPPY packing to keep source code small
+
+static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset,  // font location (use offset=0 for plain .ttf)
+                                float pixel_height,                     // height of font in pixels
+                                unsigned char *pixels, int pw, int ph,  // bitmap to be filled in
+                                int first_char, int num_chars,          // characters to bake
+                                stbtt_bakedchar *chardata)
+{
+   float scale;
+   int x,y,bottom_y, i;
+   stbtt_fontinfo f;
+   f.userdata = NULL;
+   if (!stbtt_InitFont(&f, data, offset))
+      return -1;
+   STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
+   x=y=1;
+   bottom_y = 1;
+
+   scale = stbtt_ScaleForPixelHeight(&f, pixel_height);
+
+   for (i=0; i < num_chars; ++i) {
+      int advance, lsb, x0,y0,x1,y1,gw,gh;
+      int g = stbtt_FindGlyphIndex(&f, first_char + i);
+      stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb);
+      stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1);
+      gw = x1-x0;
+      gh = y1-y0;
+      if (x + gw + 1 >= pw)
+         y = bottom_y, x = 1; // advance to next row
+      if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row
+         return -i;
+      STBTT_assert(x+gw < pw);
+      STBTT_assert(y+gh < ph);
+      stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g);
+      chardata[i].x0 = (stbtt_int16) x;
+      chardata[i].y0 = (stbtt_int16) y;
+      chardata[i].x1 = (stbtt_int16) (x + gw);
+      chardata[i].y1 = (stbtt_int16) (y + gh);
+      chardata[i].xadvance = scale * advance;
+      chardata[i].xoff     = (float) x0;
+      chardata[i].yoff     = (float) y0;
+      x = x + gw + 1;
+      if (y+gh+1 > bottom_y)
+         bottom_y = y+gh+1;
+   }
+   return bottom_y;
+}
+
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule)
+{
+   float d3d_bias = opengl_fillrule ? 0 : -0.5f;
+   float ipw = 1.0f / pw, iph = 1.0f / ph;
+   const stbtt_bakedchar *b = chardata + char_index;
+   int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f);
+   int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f);
+
+   q->x0 = round_x + d3d_bias;
+   q->y0 = round_y + d3d_bias;
+   q->x1 = round_x + b->x1 - b->x0 + d3d_bias;
+   q->y1 = round_y + b->y1 - b->y0 + d3d_bias;
+
+   q->s0 = b->x0 * ipw;
+   q->t0 = b->y0 * iph;
+   q->s1 = b->x1 * ipw;
+   q->t1 = b->y1 * iph;
+
+   *xpos += b->xadvance;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// rectangle packing replacement routines if you don't have stb_rect_pack.h
+//
+
+#ifndef STB_RECT_PACK_VERSION
+
+typedef int stbrp_coord;
+
+////////////////////////////////////////////////////////////////////////////////////
+//                                                                                //
+//                                                                                //
+// COMPILER WARNING ?!?!?                                                         //
+//                                                                                //
+//                                                                                //
+// if you get a compile warning due to these symbols being defined more than      //
+// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h"         //
+//                                                                                //
+////////////////////////////////////////////////////////////////////////////////////
+
+typedef struct
+{
+   int width,height;
+   int x,y,bottom_y;
+} stbrp_context;
+
+typedef struct
+{
+   unsigned char x;
+} stbrp_node;
+
+struct stbrp_rect
+{
+   stbrp_coord x,y;
+   int id,w,h,was_packed;
+};
+
+static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes)
+{
+   con->width  = pw;
+   con->height = ph;
+   con->x = 0;
+   con->y = 0;
+   con->bottom_y = 0;
+   STBTT__NOTUSED(nodes);
+   STBTT__NOTUSED(num_nodes);   
+}
+
+static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
+{
+   int i;
+   for (i=0; i < num_rects; ++i) {
+      if (con->x + rects[i].w > con->width) {
+         con->x = 0;
+         con->y = con->bottom_y;
+      }
+      if (con->y + rects[i].h > con->height)
+         break;
+      rects[i].x = con->x;
+      rects[i].y = con->y;
+      rects[i].was_packed = 1;
+      con->x += rects[i].w;
+      if (con->y + rects[i].h > con->bottom_y)
+         con->bottom_y = con->y + rects[i].h;
+   }
+   for (   ; i < num_rects; ++i)
+      rects[i].was_packed = 0;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// bitmap baking
+//
+// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If
+// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy.
+
+STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context)
+{
+   stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context)            ,alloc_context);
+   int            num_nodes = pw - padding;
+   stbrp_node    *nodes   = (stbrp_node    *) STBTT_malloc(sizeof(*nodes  ) * num_nodes,alloc_context);
+
+   if (context == NULL || nodes == NULL) {
+      if (context != NULL) STBTT_free(context, alloc_context);
+      if (nodes   != NULL) STBTT_free(nodes  , alloc_context);
+      return 0;
+   }
+
+   spc->user_allocator_context = alloc_context;
+   spc->width = pw;
+   spc->height = ph;
+   spc->pixels = pixels;
+   spc->pack_info = context;
+   spc->nodes = nodes;
+   spc->padding = padding;
+   spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw;
+   spc->h_oversample = 1;
+   spc->v_oversample = 1;
+   spc->skip_missing = 0;
+
+   stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes);
+
+   if (pixels)
+      STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
+
+   return 1;
+}
+
+STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
+{
+   STBTT_free(spc->nodes    , spc->user_allocator_context);
+   STBTT_free(spc->pack_info, spc->user_allocator_context);
+}
+
+STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample)
+{
+   STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE);
+   STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE);
+   if (h_oversample <= STBTT_MAX_OVERSAMPLE)
+      spc->h_oversample = h_oversample;
+   if (v_oversample <= STBTT_MAX_OVERSAMPLE)
+      spc->v_oversample = v_oversample;
+}
+
+STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip)
+{
+   spc->skip_missing = skip;
+}
+
+#define STBTT__OVER_MASK  (STBTT_MAX_OVERSAMPLE-1)
+
+static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
+{
+   unsigned char buffer[STBTT_MAX_OVERSAMPLE];
+   int safe_w = w - kernel_width;
+   int j;
+   STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
+   for (j=0; j < h; ++j) {
+      int i;
+      unsigned int total;
+      STBTT_memset(buffer, 0, kernel_width);
+
+      total = 0;
+
+      // make kernel_width a constant in common cases so compiler can optimize out the divide
+      switch (kernel_width) {
+         case 2:
+            for (i=0; i <= safe_w; ++i) {
+               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+               pixels[i] = (unsigned char) (total / 2);
+            }
+            break;
+         case 3:
+            for (i=0; i <= safe_w; ++i) {
+               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+               pixels[i] = (unsigned char) (total / 3);
+            }
+            break;
+         case 4:
+            for (i=0; i <= safe_w; ++i) {
+               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+               pixels[i] = (unsigned char) (total / 4);
+            }
+            break;
+         case 5:
+            for (i=0; i <= safe_w; ++i) {
+               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+               pixels[i] = (unsigned char) (total / 5);
+            }
+            break;
+         default:
+            for (i=0; i <= safe_w; ++i) {
+               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+               pixels[i] = (unsigned char) (total / kernel_width);
+            }
+            break;
+      }
+
+      for (; i < w; ++i) {
+         STBTT_assert(pixels[i] == 0);
+         total -= buffer[i & STBTT__OVER_MASK];
+         pixels[i] = (unsigned char) (total / kernel_width);
+      }
+
+      pixels += stride_in_bytes;
+   }
+}
+
+static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
+{
+   unsigned char buffer[STBTT_MAX_OVERSAMPLE];
+   int safe_h = h - kernel_width;
+   int j;
+   STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
+   for (j=0; j < w; ++j) {
+      int i;
+      unsigned int total;
+      STBTT_memset(buffer, 0, kernel_width);
+
+      total = 0;
+
+      // make kernel_width a constant in common cases so compiler can optimize out the divide
+      switch (kernel_width) {
+         case 2:
+            for (i=0; i <= safe_h; ++i) {
+               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+               pixels[i*stride_in_bytes] = (unsigned char) (total / 2);
+            }
+            break;
+         case 3:
+            for (i=0; i <= safe_h; ++i) {
+               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+               pixels[i*stride_in_bytes] = (unsigned char) (total / 3);
+            }
+            break;
+         case 4:
+            for (i=0; i <= safe_h; ++i) {
+               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+               pixels[i*stride_in_bytes] = (unsigned char) (total / 4);
+            }
+            break;
+         case 5:
+            for (i=0; i <= safe_h; ++i) {
+               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+               pixels[i*stride_in_bytes] = (unsigned char) (total / 5);
+            }
+            break;
+         default:
+            for (i=0; i <= safe_h; ++i) {
+               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+               pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
+            }
+            break;
+      }
+
+      for (; i < h; ++i) {
+         STBTT_assert(pixels[i*stride_in_bytes] == 0);
+         total -= buffer[i & STBTT__OVER_MASK];
+         pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
+      }
+
+      pixels += 1;
+   }
+}
+
+static float stbtt__oversample_shift(int oversample)
+{
+   if (!oversample)
+      return 0.0f;
+
+   // The prefilter is a box filter of width "oversample",
+   // which shifts phase by (oversample - 1)/2 pixels in
+   // oversampled space. We want to shift in the opposite
+   // direction to counter this.
+   return (float)-(oversample - 1) / (2.0f * (float)oversample);
+}
+
+// rects array must be big enough to accommodate all characters in the given ranges
+STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+{
+   int i,j,k;
+
+   k=0;
+   for (i=0; i < num_ranges; ++i) {
+      float fh = ranges[i].font_size;
+      float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
+      ranges[i].h_oversample = (unsigned char) spc->h_oversample;
+      ranges[i].v_oversample = (unsigned char) spc->v_oversample;
+      for (j=0; j < ranges[i].num_chars; ++j) {
+         int x0,y0,x1,y1;
+         int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
+         int glyph = stbtt_FindGlyphIndex(info, codepoint);
+         if (glyph == 0 && spc->skip_missing) {
+            rects[k].w = rects[k].h = 0;
+         } else {
+            stbtt_GetGlyphBitmapBoxSubpixel(info,glyph,
+                                            scale * spc->h_oversample,
+                                            scale * spc->v_oversample,
+                                            0,0,
+                                            &x0,&y0,&x1,&y1);
+            rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1);
+            rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1);
+         }
+         ++k;
+      }
+   }
+
+   return k;
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph)
+{
+   stbtt_MakeGlyphBitmapSubpixel(info,
+                                 output,
+                                 out_w - (prefilter_x - 1),
+                                 out_h - (prefilter_y - 1),
+                                 out_stride,
+                                 scale_x,
+                                 scale_y,
+                                 shift_x,
+                                 shift_y,
+                                 glyph);
+
+   if (prefilter_x > 1)
+      stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x);
+
+   if (prefilter_y > 1)
+      stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y);
+
+   *sub_x = stbtt__oversample_shift(prefilter_x);
+   *sub_y = stbtt__oversample_shift(prefilter_y);
+}
+
+// rects array must be big enough to accommodate all characters in the given ranges
+STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+{
+   int i,j,k, return_value = 1;
+
+   // save current values
+   int old_h_over = spc->h_oversample;
+   int old_v_over = spc->v_oversample;
+
+   k = 0;
+   for (i=0; i < num_ranges; ++i) {
+      float fh = ranges[i].font_size;
+      float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
+      float recip_h,recip_v,sub_x,sub_y;
+      spc->h_oversample = ranges[i].h_oversample;
+      spc->v_oversample = ranges[i].v_oversample;
+      recip_h = 1.0f / spc->h_oversample;
+      recip_v = 1.0f / spc->v_oversample;
+      sub_x = stbtt__oversample_shift(spc->h_oversample);
+      sub_y = stbtt__oversample_shift(spc->v_oversample);
+      for (j=0; j < ranges[i].num_chars; ++j) {
+         stbrp_rect *r = &rects[k];
+         if (r->was_packed && r->w != 0 && r->h != 0) {
+            stbtt_packedchar *bc = &ranges[i].chardata_for_range[j];
+            int advance, lsb, x0,y0,x1,y1;
+            int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
+            int glyph = stbtt_FindGlyphIndex(info, codepoint);
+            stbrp_coord pad = (stbrp_coord) spc->padding;
+
+            // pad on left and top
+            r->x += pad;
+            r->y += pad;
+            r->w -= pad;
+            r->h -= pad;
+            stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb);
+            stbtt_GetGlyphBitmapBox(info, glyph,
+                                    scale * spc->h_oversample,
+                                    scale * spc->v_oversample,
+                                    &x0,&y0,&x1,&y1);
+            stbtt_MakeGlyphBitmapSubpixel(info,
+                                          spc->pixels + r->x + r->y*spc->stride_in_bytes,
+                                          r->w - spc->h_oversample+1,
+                                          r->h - spc->v_oversample+1,
+                                          spc->stride_in_bytes,
+                                          scale * spc->h_oversample,
+                                          scale * spc->v_oversample,
+                                          0,0,
+                                          glyph);
+
+            if (spc->h_oversample > 1)
+               stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
+                                  r->w, r->h, spc->stride_in_bytes,
+                                  spc->h_oversample);
+
+            if (spc->v_oversample > 1)
+               stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
+                                  r->w, r->h, spc->stride_in_bytes,
+                                  spc->v_oversample);
+
+            bc->x0       = (stbtt_int16)  r->x;
+            bc->y0       = (stbtt_int16)  r->y;
+            bc->x1       = (stbtt_int16) (r->x + r->w);
+            bc->y1       = (stbtt_int16) (r->y + r->h);
+            bc->xadvance =                scale * advance;
+            bc->xoff     =       (float)  x0 * recip_h + sub_x;
+            bc->yoff     =       (float)  y0 * recip_v + sub_y;
+            bc->xoff2    =                (x0 + r->w) * recip_h + sub_x;
+            bc->yoff2    =                (y0 + r->h) * recip_v + sub_y;
+         } else {
+            return_value = 0; // if any fail, report failure
+         }
+
+         ++k;
+      }
+   }
+
+   // restore original values
+   spc->h_oversample = old_h_over;
+   spc->v_oversample = old_v_over;
+
+   return return_value;
+}
+
+STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects)
+{
+   stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects);
+}
+
+STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges)
+{
+   stbtt_fontinfo info;
+   int i,j,n, return_value; // [DEAR IMGUI] removed = 1
+   //stbrp_context *context = (stbrp_context *) spc->pack_info;
+   stbrp_rect    *rects;
+
+   // flag all characters as NOT packed
+   for (i=0; i < num_ranges; ++i)
+      for (j=0; j < ranges[i].num_chars; ++j)
+         ranges[i].chardata_for_range[j].x0 =
+         ranges[i].chardata_for_range[j].y0 =
+         ranges[i].chardata_for_range[j].x1 =
+         ranges[i].chardata_for_range[j].y1 = 0;
+
+   n = 0;
+   for (i=0; i < num_ranges; ++i)
+      n += ranges[i].num_chars;
+         
+   rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
+   if (rects == NULL)
+      return 0;
+
+   info.userdata = spc->user_allocator_context;
+   stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index));
+
+   n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
+
+   stbtt_PackFontRangesPackRects(spc, rects, n);
+  
+   return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
+
+   STBTT_free(rects, spc->user_allocator_context);
+   return return_value;
+}
+
+STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
+            int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range)
+{
+   stbtt_pack_range range;
+   range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range;
+   range.array_of_unicode_codepoints = NULL;
+   range.num_chars                   = num_chars_in_range;
+   range.chardata_for_range          = chardata_for_range;
+   range.font_size                   = font_size;
+   return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1);
+}
+
+STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap)
+{
+   int i_ascent, i_descent, i_lineGap;
+   float scale;
+   stbtt_fontinfo info;
+   stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index));
+   scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size);
+   stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap);
+   *ascent  = (float) i_ascent  * scale;
+   *descent = (float) i_descent * scale;
+   *lineGap = (float) i_lineGap * scale;
+}
+
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
+{
+   float ipw = 1.0f / pw, iph = 1.0f / ph;
+   const stbtt_packedchar *b = chardata + char_index;
+
+   if (align_to_integer) {
+      float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f);
+      float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f);
+      q->x0 = x;
+      q->y0 = y;
+      q->x1 = x + b->xoff2 - b->xoff;
+      q->y1 = y + b->yoff2 - b->yoff;
+   } else {
+      q->x0 = *xpos + b->xoff;
+      q->y0 = *ypos + b->yoff;
+      q->x1 = *xpos + b->xoff2;
+      q->y1 = *ypos + b->yoff2;
+   }
+
+   q->s0 = b->x0 * ipw;
+   q->t0 = b->y0 * iph;
+   q->s1 = b->x1 * ipw;
+   q->t1 = b->y1 * iph;
+
+   *xpos += b->xadvance;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// sdf computation
+//
+
+#define STBTT_min(a,b)  ((a) < (b) ? (a) : (b))
+#define STBTT_max(a,b)  ((a) < (b) ? (b) : (a))
+
+static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2])
+{
+   float q0perp = q0[1]*ray[0] - q0[0]*ray[1];
+   float q1perp = q1[1]*ray[0] - q1[0]*ray[1];
+   float q2perp = q2[1]*ray[0] - q2[0]*ray[1];
+   float roperp = orig[1]*ray[0] - orig[0]*ray[1];
+
+   float a = q0perp - 2*q1perp + q2perp;
+   float b = q1perp - q0perp;
+   float c = q0perp - roperp;
+
+   float s0 = 0., s1 = 0.;
+   int num_s = 0;
+
+   if (a != 0.0) {
+      float discr = b*b - a*c;
+      if (discr > 0.0) {
+         float rcpna = -1 / a;
+         float d = (float) STBTT_sqrt(discr);
+         s0 = (b+d) * rcpna;
+         s1 = (b-d) * rcpna;
+         if (s0 >= 0.0 && s0 <= 1.0)
+            num_s = 1;
+         if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) {
+            if (num_s == 0) s0 = s1;
+            ++num_s;
+         }
+      }
+   } else {
+      // 2*b*s + c = 0
+      // s = -c / (2*b)
+      s0 = c / (-2 * b);
+      if (s0 >= 0.0 && s0 <= 1.0)
+         num_s = 1;
+   }
+
+   if (num_s == 0)
+      return 0;
+   else {
+      float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]);
+      float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2;
+
+      float q0d =   q0[0]*rayn_x +   q0[1]*rayn_y;
+      float q1d =   q1[0]*rayn_x +   q1[1]*rayn_y;
+      float q2d =   q2[0]*rayn_x +   q2[1]*rayn_y;
+      float rod = orig[0]*rayn_x + orig[1]*rayn_y;
+
+      float q10d = q1d - q0d;
+      float q20d = q2d - q0d;
+      float q0rd = q0d - rod;
+
+      hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d;
+      hits[0][1] = a*s0+b;
+
+      if (num_s > 1) {
+         hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d;
+         hits[1][1] = a*s1+b;
+         return 2;
+      } else {
+         return 1;
+      }
+   }
+}
+
+static int equal(float *a, float *b)
+{
+   return (a[0] == b[0] && a[1] == b[1]);
+}
+
+static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts)
+{
+   int i;
+   float orig[2], ray[2] = { 1, 0 };
+   float y_frac;
+   int winding = 0;
+
+   orig[0] = x;
+   //orig[1] = y; // [DEAR IMGUI] commmented double assignment
+
+   // make sure y never passes through a vertex of the shape
+   y_frac = (float) STBTT_fmod(y, 1.0f);
+   if (y_frac < 0.01f)
+      y += 0.01f;
+   else if (y_frac > 0.99f)
+      y -= 0.01f;
+   orig[1] = y;
+
+   // test a ray from (-infinity,y) to (x,y)
+   for (i=0; i < nverts; ++i) {
+      if (verts[i].type == STBTT_vline) {
+         int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y;
+         int x1 = (int) verts[i  ].x, y1 = (int) verts[i  ].y;
+         if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
+            float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
+            if (x_inter < x)  
+               winding += (y0 < y1) ? 1 : -1;
+         }
+      }
+      if (verts[i].type == STBTT_vcurve) {
+         int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ;
+         int x1 = (int) verts[i  ].cx, y1 = (int) verts[i  ].cy;
+         int x2 = (int) verts[i  ].x , y2 = (int) verts[i  ].y ;
+         int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2));
+         int by = STBTT_max(y0,STBTT_max(y1,y2));
+         if (y > ay && y < by && x > ax) {
+            float q0[2],q1[2],q2[2];
+            float hits[2][2];
+            q0[0] = (float)x0;
+            q0[1] = (float)y0;
+            q1[0] = (float)x1;
+            q1[1] = (float)y1;
+            q2[0] = (float)x2;
+            q2[1] = (float)y2;
+            if (equal(q0,q1) || equal(q1,q2)) {
+               x0 = (int)verts[i-1].x;
+               y0 = (int)verts[i-1].y;
+               x1 = (int)verts[i  ].x;
+               y1 = (int)verts[i  ].y;
+               if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
+                  float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
+                  if (x_inter < x)  
+                     winding += (y0 < y1) ? 1 : -1;
+               }
+            } else {
+               int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits);
+               if (num_hits >= 1)
+                  if (hits[0][0] < 0)
+                     winding += (hits[0][1] < 0 ? -1 : 1);
+               if (num_hits >= 2)
+                  if (hits[1][0] < 0)
+                     winding += (hits[1][1] < 0 ? -1 : 1);
+            }
+         } 
+      }
+   }
+   return winding;
+}
+
+static float stbtt__cuberoot( float x )
+{
+   if (x<0)
+      return -(float) STBTT_pow(-x,1.0f/3.0f);
+   else
+      return  (float) STBTT_pow( x,1.0f/3.0f);
+}
+
+// x^3 + c*x^2 + b*x + a = 0
+static int stbtt__solve_cubic(float a, float b, float c, float* r)
+{
+	float s = -a / 3;
+	float p = b - a*a / 3;
+	float q = a * (2*a*a - 9*b) / 27 + c;
+   float p3 = p*p*p;
+	float d = q*q + 4*p3 / 27;
+	if (d >= 0) {
+		float z = (float) STBTT_sqrt(d);
+		float u = (-q + z) / 2;
+		float v = (-q - z) / 2;
+		u = stbtt__cuberoot(u);
+		v = stbtt__cuberoot(v);
+		r[0] = s + u + v;
+		return 1;
+	} else {
+	   float u = (float) STBTT_sqrt(-p/3);
+	   float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative
+	   float m = (float) STBTT_cos(v);
+      float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f;
+	   r[0] = s + u * 2 * m;
+	   r[1] = s - u * (m + n);
+	   r[2] = s - u * (m - n);
+
+      //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f);  // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe?
+      //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f);
+      //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f);
+   	return 3;
+   }
+}
+
+STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
+{
+   float scale_x = scale, scale_y = scale;
+   int ix0,iy0,ix1,iy1;
+   int w,h;
+   unsigned char *data;
+
+   // if one scale is 0, use same scale for both
+   if (scale_x == 0) scale_x = scale_y;
+   if (scale_y == 0) {
+      if (scale_x == 0) return NULL;  // if both scales are 0, return NULL
+      scale_y = scale_x;
+   }
+
+   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1);
+
+   // if empty, return NULL
+   if (ix0 == ix1 || iy0 == iy1)
+      return NULL;
+
+   ix0 -= padding;
+   iy0 -= padding;
+   ix1 += padding;
+   iy1 += padding;
+
+   w = (ix1 - ix0);
+   h = (iy1 - iy0);
+
+   if (width ) *width  = w;
+   if (height) *height = h;
+   if (xoff  ) *xoff   = ix0;
+   if (yoff  ) *yoff   = iy0;
+
+   // invert for y-downwards bitmaps
+   scale_y = -scale_y;
+      
+   {
+      int x,y,i,j;
+      float *precompute;
+      stbtt_vertex *verts;
+      int num_verts = stbtt_GetGlyphShape(info, glyph, &verts);
+      data = (unsigned char *) STBTT_malloc(w * h, info->userdata);
+      precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata);
+
+      for (i=0,j=num_verts-1; i < num_verts; j=i++) {
+         if (verts[i].type == STBTT_vline) {
+            float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
+            float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y;
+            float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
+            precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist;
+         } else if (verts[i].type == STBTT_vcurve) {
+            float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y;
+            float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y;
+            float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y;
+            float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
+            float len2 = bx*bx + by*by;
+            if (len2 != 0.0f)
+               precompute[i] = 1.0f / (bx*bx + by*by);
+            else
+               precompute[i] = 0.0f;
+         } else
+            precompute[i] = 0.0f;
+      }
+
+      for (y=iy0; y < iy1; ++y) {
+         for (x=ix0; x < ix1; ++x) {
+            float val;
+            float min_dist = 999999.0f;
+            float sx = (float) x + 0.5f;
+            float sy = (float) y + 0.5f;
+            float x_gspace = (sx / scale_x);
+            float y_gspace = (sy / scale_y);
+
+            int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path
+
+            for (i=0; i < num_verts; ++i) {
+               float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
+
+               // check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve
+               float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy);
+               if (dist2 < min_dist*min_dist)
+                  min_dist = (float) STBTT_sqrt(dist2);
+
+               if (verts[i].type == STBTT_vline) {
+                  float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y;
+
+                  // coarse culling against bbox
+                  //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist &&
+                  //    sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist)
+                  float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i];
+                  STBTT_assert(i != 0);
+                  if (dist < min_dist) {
+                     // check position along line
+                     // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0)
+                     // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy)
+                     float dx = x1-x0, dy = y1-y0;
+                     float px = x0-sx, py = y0-sy;
+                     // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy
+                     // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve
+                     float t = -(px*dx + py*dy) / (dx*dx + dy*dy);
+                     if (t >= 0.0f && t <= 1.0f)
+                        min_dist = dist;
+                  }
+               } else if (verts[i].type == STBTT_vcurve) {
+                  float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y;
+                  float x1 = verts[i  ].cx*scale_x, y1 = verts[i  ].cy*scale_y;
+                  float box_x0 = STBTT_min(STBTT_min(x0,x1),x2);
+                  float box_y0 = STBTT_min(STBTT_min(y0,y1),y2);
+                  float box_x1 = STBTT_max(STBTT_max(x0,x1),x2);
+                  float box_y1 = STBTT_max(STBTT_max(y0,y1),y2);
+                  // coarse culling against bbox to avoid computing cubic unnecessarily
+                  if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) {
+                     int num=0;
+                     float ax = x1-x0, ay = y1-y0;
+                     float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
+                     float mx = x0 - sx, my = y0 - sy;
+                     float res[3],px,py,t,it;
+                     float a_inv = precompute[i];
+                     if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula
+                        float a = 3*(ax*bx + ay*by);
+                        float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by);
+                        float c = mx*ax+my*ay;
+                        if (a == 0.0) { // if a is 0, it's linear
+                           if (b != 0.0) {
+                              res[num++] = -c/b;
+                           }
+                        } else {
+                           float discriminant = b*b - 4*a*c;
+                           if (discriminant < 0)
+                              num = 0;
+                           else {
+                              float root = (float) STBTT_sqrt(discriminant);
+                              res[0] = (-b - root)/(2*a);
+                              res[1] = (-b + root)/(2*a);
+                              num = 2; // don't bother distinguishing 1-solution case, as code below will still work
+                           }
+                        }
+                     } else {
+                        float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point
+                        float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv;
+                        float d = (mx*ax+my*ay) * a_inv;
+                        num = stbtt__solve_cubic(b, c, d, res);
+                     }
+                     if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) {
+                        t = res[0], it = 1.0f - t;
+                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+                        if (dist2 < min_dist * min_dist)
+                           min_dist = (float) STBTT_sqrt(dist2);
+                     }
+                     if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) {
+                        t = res[1], it = 1.0f - t;
+                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+                        if (dist2 < min_dist * min_dist)
+                           min_dist = (float) STBTT_sqrt(dist2);
+                     }
+                     if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) {
+                        t = res[2], it = 1.0f - t;
+                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+                        if (dist2 < min_dist * min_dist)
+                           min_dist = (float) STBTT_sqrt(dist2);
+                     }
+                  }
+               }
+            }
+            if (winding == 0)
+               min_dist = -min_dist;  // if outside the shape, value is negative
+            val = onedge_value + pixel_dist_scale * min_dist;
+            if (val < 0)
+               val = 0;
+            else if (val > 255)
+               val = 255;
+            data[(y-iy0)*w+(x-ix0)] = (unsigned char) val;
+         }
+      }
+      STBTT_free(precompute, info->userdata);
+      STBTT_free(verts, info->userdata);
+   }
+   return data;
+}   
+
+STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
+{
+   return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff);
+}
+
+STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
+{
+   STBTT_free(bitmap, userdata);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// font name matching -- recommended not to use this
+//
+
+// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
+static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) 
+{
+   stbtt_int32 i=0;
+
+   // convert utf16 to utf8 and compare the results while converting
+   while (len2) {
+      stbtt_uint16 ch = s2[0]*256 + s2[1];
+      if (ch < 0x80) {
+         if (i >= len1) return -1;
+         if (s1[i++] != ch) return -1;
+      } else if (ch < 0x800) {
+         if (i+1 >= len1) return -1;
+         if (s1[i++] != 0xc0 + (ch >> 6)) return -1;
+         if (s1[i++] != 0x80 + (ch & 0x3f)) return -1;
+      } else if (ch >= 0xd800 && ch < 0xdc00) {
+         stbtt_uint32 c;
+         stbtt_uint16 ch2 = s2[2]*256 + s2[3];
+         if (i+3 >= len1) return -1;
+         c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000;
+         if (s1[i++] != 0xf0 + (c >> 18)) return -1;
+         if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1;
+         if (s1[i++] != 0x80 + ((c >>  6) & 0x3f)) return -1;
+         if (s1[i++] != 0x80 + ((c      ) & 0x3f)) return -1;
+         s2 += 2; // plus another 2 below
+         len2 -= 2;
+      } else if (ch >= 0xdc00 && ch < 0xe000) {
+         return -1;
+      } else {
+         if (i+2 >= len1) return -1;
+         if (s1[i++] != 0xe0 + (ch >> 12)) return -1;
+         if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1;
+         if (s1[i++] != 0x80 + ((ch     ) & 0x3f)) return -1;
+      }
+      s2 += 2;
+      len2 -= 2;
+   }
+   return i;
+}
+
+static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) 
+{
+   return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
+}
+
+// returns results in whatever encoding you request... but note that 2-byte encodings
+// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare
+STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID)
+{
+   stbtt_int32 i,count,stringOffset;
+   stbtt_uint8 *fc = font->data;
+   stbtt_uint32 offset = font->fontstart;
+   stbtt_uint32 nm = stbtt__find_table(fc, offset, "name");
+   if (!nm) return NULL;
+
+   count = ttUSHORT(fc+nm+2);
+   stringOffset = nm + ttUSHORT(fc+nm+4);
+   for (i=0; i < count; ++i) {
+      stbtt_uint32 loc = nm + 6 + 12 * i;
+      if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2)
+          && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) {
+         *length = ttUSHORT(fc+loc+8);
+         return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10));
+      }
+   }
+   return NULL;
+}
+
+static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id)
+{
+   stbtt_int32 i;
+   stbtt_int32 count = ttUSHORT(fc+nm+2);
+   stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4);
+
+   for (i=0; i < count; ++i) {
+      stbtt_uint32 loc = nm + 6 + 12 * i;
+      stbtt_int32 id = ttUSHORT(fc+loc+6);
+      if (id == target_id) {
+         // find the encoding
+         stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4);
+
+         // is this a Unicode encoding?
+         if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) {
+            stbtt_int32 slen = ttUSHORT(fc+loc+8);
+            stbtt_int32 off = ttUSHORT(fc+loc+10);
+
+            // check if there's a prefix match
+            stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen);
+            if (matchlen >= 0) {
+               // check for target_id+1 immediately following, with same encoding & language
+               if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) {
+                  slen = ttUSHORT(fc+loc+12+8);
+                  off = ttUSHORT(fc+loc+12+10);
+                  if (slen == 0) {
+                     if (matchlen == nlen)
+                        return 1;
+                  } else if (matchlen < nlen && name[matchlen] == ' ') {
+                     ++matchlen;
+                     if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen))
+                        return 1;
+                  }
+               } else {
+                  // if nothing immediately following
+                  if (matchlen == nlen)
+                     return 1;
+               }
+            }
+         }
+
+         // @TODO handle other encodings
+      }
+   }
+   return 0;
+}
+
+static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags)
+{
+   stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name);
+   stbtt_uint32 nm,hd;
+   if (!stbtt__isfont(fc+offset)) return 0;
+
+   // check italics/bold/underline flags in macStyle...
+   if (flags) {
+      hd = stbtt__find_table(fc, offset, "head");
+      if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0;
+   }
+
+   nm = stbtt__find_table(fc, offset, "name");
+   if (!nm) return 0;
+
+   if (flags) {
+      // if we checked the macStyle flags, then just check the family and ignore the subfamily
+      if (stbtt__matchpair(fc, nm, name, nlen, 16, -1))  return 1;
+      if (stbtt__matchpair(fc, nm, name, nlen,  1, -1))  return 1;
+      if (stbtt__matchpair(fc, nm, name, nlen,  3, -1))  return 1;
+   } else {
+      if (stbtt__matchpair(fc, nm, name, nlen, 16, 17))  return 1;
+      if (stbtt__matchpair(fc, nm, name, nlen,  1,  2))  return 1;
+      if (stbtt__matchpair(fc, nm, name, nlen,  3, -1))  return 1;
+   }
+
+   return 0;
+}
+
+static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags)
+{
+   stbtt_int32 i;
+   for (i=0;;++i) {
+      stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i);
+      if (off < 0) return off;
+      if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags))
+         return off;
+   }
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+
+STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
+                                float pixel_height, unsigned char *pixels, int pw, int ph,
+                                int first_char, int num_chars, stbtt_bakedchar *chardata)
+{
+   return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata);
+}
+
+STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
+{
+   return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);   
+}
+
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
+{
+   return stbtt_GetNumberOfFonts_internal((unsigned char *) data);
+}
+
+STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset)
+{
+   return stbtt_InitFont_internal(info, (unsigned char *) data, offset);
+}
+
+STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags)
+{
+   return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags);
+}
+
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
+{
+   return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif // STB_TRUETYPE_IMPLEMENTATION
+
+
+// FULL VERSION HISTORY
+//
+//   1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod
+//   1.18 (2018-01-29) add missing function
+//   1.17 (2017-07-23) make more arguments const; doc fix
+//   1.16 (2017-07-12) SDF support
+//   1.15 (2017-03-03) make more arguments const
+//   1.14 (2017-01-16) num-fonts-in-TTC function
+//   1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
+//   1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
+//   1.11 (2016-04-02) fix unused-variable warning
+//   1.10 (2016-04-02) allow user-defined fabs() replacement
+//                     fix memory leak if fontsize=0.0
+//                     fix warning from duplicate typedef
+//   1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges
+//   1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
+//   1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
+//                     allow PackFontRanges to pack and render in separate phases;
+//                     fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
+//                     fixed an assert() bug in the new rasterizer
+//                     replace assert() with STBTT_assert() in new rasterizer
+//   1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine)
+//                     also more precise AA rasterizer, except if shapes overlap
+//                     remove need for STBTT_sort
+//   1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC
+//   1.04 (2015-04-15) typo in example
+//   1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes
+//   1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++
+//   1.01 (2014-12-08) fix subpixel position when oversampling to exactly match
+//                        non-oversampled; STBTT_POINT_SIZE for packed case only
+//   1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling
+//   0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg)
+//   0.9  (2014-08-07) support certain mac/iOS fonts without an MS platformID
+//   0.8b (2014-07-07) fix a warning
+//   0.8  (2014-05-25) fix a few more warnings
+//   0.7  (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back
+//   0.6c (2012-07-24) improve documentation
+//   0.6b (2012-07-20) fix a few more warnings
+//   0.6  (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels,
+//                        stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty
+//   0.5  (2011-12-09) bugfixes:
+//                        subpixel glyph renderer computed wrong bounding box
+//                        first vertex of shape can be off-curve (FreeSans)
+//   0.4b (2011-12-03) fixed an error in the font baking example
+//   0.4  (2011-12-01) kerning, subpixel rendering (tor)
+//                    bugfixes for:
+//                        codepoint-to-glyph conversion using table fmt=12
+//                        codepoint-to-glyph conversion using table fmt=4
+//                        stbtt_GetBakedQuad with non-square texture (Zer)
+//                    updated Hello World! sample to use kerning and subpixel
+//                    fixed some warnings
+//   0.3  (2009-06-24) cmap fmt=12, compound shapes (MM)
+//                    userdata, malloc-from-userdata, non-zero fill (stb)
+//   0.2  (2009-03-11) Fix unsigned/signed char warnings
+//   0.1  (2009-03-09) First public release
+//
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of 
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
+of the Software, and to permit persons to whom the Software is furnished to do 
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all 
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
+software, either in source code form or as a compiled binary, for any purpose, 
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this 
+software dedicate any and all copyright interest in the software to the public 
+domain. We make this dedication for the benefit of the public at large and to 
+the detriment of our heirs and successors. We intend this dedication to be an 
+overt act of relinquishment in perpetuity of all present and future rights to 
+this software under copyright law.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
binary files a/DoConfig/new/1.ico /dev/null differ
--- a/DoConfig/new/CMakeLists.txt
+++ /dev/null
@@ -1,50 +1,0 @@
-cmake_minimum_required(VERSION 3.12)
-
-project(DoConfig LANGUAGES C CXX)
-
-add_executable(DoConfig WIN32
-	"icon.rc"
-	"../../external/glad/include/glad/glad.h"
-	"../../external/glad/include/KHR/khrplatform.h"
-	"../../external/glad/src/glad.c"
-	"DoConfig.cpp"
-	"imgui/imconfig.h"
-	"imgui/imgui.cpp"
-	"imgui/imgui.h"
-	"imgui/imgui_demo.cpp"
-	"imgui/imgui_draw.cpp"
-	"imgui/imgui_impl_glfw.cpp"
-	"imgui/imgui_impl_glfw.h"
-	"imgui/imgui_impl_opengl3.cpp"
-	"imgui/imgui_impl_opengl3.h"
-	"imgui/imgui_internal.h"
-	"imgui/imgui_widgets.cpp"
-	"imgui/imstb_rectpack.h"
-	"imgui/imstb_textedit.h"
-	"imgui/imstb_truetype.h"
-)
-
-set_target_properties(DoConfig PROPERTIES
-	C_STANDARD 90
-	C_STANDARD_REQUIRED ON
-	C_EXTENSIONS OFF
-	CXX_STANDARD 98
-	CXX_STANDARD_REQUIRED ON
-	CXX_EXTENSIONS OFF
-)
-
-target_link_libraries(DoConfig PRIVATE ${CMAKE_DL_LIBS})
-
-target_include_directories(DoConfig PRIVATE "../../external/glad/include")
-target_compile_definitions(DoConfig PRIVATE IMGUI_IMPL_OPENGL_LOADER_GLAD)
-
-if(MSVC)
-	# Disable warnings that normally fire up on MSVC when using "unsafe" functions instead of using MSVC's "safe" _s functions
-	target_compile_definitions(CSE2 PRIVATE _CRT_SECURE_NO_WARNINGS)
-
-	# Use `main` instead of `WinMain`
-	set_target_properties(CSE2 PROPERTIES LINK_FLAGS "/ENTRY:mainCRTStartup")
-endif()
-
-find_package(glfw3 REQUIRED)
-target_link_libraries(DoConfig PRIVATE glfw)
--- a/DoConfig/new/DoConfig.cpp
+++ /dev/null
@@ -1,286 +1,0 @@
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "glad/glad.h"
-#include <GLFW/glfw3.h>
-
-#include "imgui/imgui.h"
-#include "imgui/imgui_impl_glfw.h"
-#include "imgui/imgui_impl_opengl3.h"
-
-#define WINDOW_WIDTH 360
-#define WINDOW_HEIGHT 290
-
-struct Config
-{
-	char proof[0x20];
-	char font_name[0x40];
-	int move_button_mode;
-	int attack_button_mode;
-	int ok_button_mode;
-	int display_mode;
-	bool bJoystick;
-	int joystick_button[8];
-};
-
-const char *proof = "DOUKUTSU20041206";
-
-int main(int argc, char *argv[])
-{
-	char base_directory[0x400];
-
-	strcpy(base_directory, argv[0]);
-
-	for (size_t i = strlen(base_directory);; --i)
-	{
-		if (i == 0 || base_directory[i] == '\\' || base_directory[i] == '/')
-		{
-			base_directory[i] = '\0';
-			break;
-		}
-	}
-
-	/////////////////////
-	// Initialise GLFW //
-	/////////////////////
-
-	if (glfwInit())
-	{
-		const char *glsl_version = "#version 150 core";
-		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
-		glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
-		glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-		glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
-
-		glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
-
-		GLFWwindow *window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "DoConfig - Doukutsu Monogatari Settings", NULL, NULL);
-
-		if (window != NULL)
-		{
-			glfwMakeContextCurrent(window);
-			glfwSwapInterval(1);
-
-			if (gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
-			{
-				// Check if the platform supports OpenGL 3.2
-				if (GLAD_GL_VERSION_3_2)
-				{
-					///////////////////////////
-					// Initialise Dear ImGui //
-					///////////////////////////
-
-					IMGUI_CHECKVERSION();
-					ImGui::CreateContext();
-
-					ImGui_ImplGlfw_InitForOpenGL(window, true);
-					ImGui_ImplOpenGL3_Init(glsl_version);
-
-					/////////////////////
-					// Load Config.dat //
-					/////////////////////
-
-					Config configuration;
-
-					char config_path[0x400];
-					sprintf(config_path, "%s/Config.dat", base_directory);
-
-					FILE *file = fopen(config_path, "rb");
-
-					if (file != NULL)
-					{
-						// Read from file
-						fread(configuration.proof, 1, sizeof(configuration.proof), file);
-						fread(configuration.font_name, 1, sizeof(configuration.font_name), file);
-						configuration.move_button_mode = fgetc(file);
-						fseek(file, 3, SEEK_CUR);
-						configuration.attack_button_mode = fgetc(file);
-						fseek(file, 3, SEEK_CUR);
-						configuration.ok_button_mode = fgetc(file);
-						fseek(file, 3, SEEK_CUR);
-						configuration.display_mode = fgetc(file);
-						fseek(file, 3, SEEK_CUR);
-						configuration.bJoystick = fgetc(file);
-
-						for (unsigned int i = 0; i < 8; ++i)
-						{
-							const int decode_table[6] = {0, 1, 2, 4, 5, 3};
-
-							fseek(file, 3, SEEK_CUR);
-							configuration.joystick_button[i] = decode_table[fgetc(file) - 1];
-						}
-
-						fclose(file);
-					}
-
-					if (file == NULL || memcmp(configuration.proof, proof, strlen(proof)))
-					{
-						// Reset to defaults
-						memset(&configuration, 0, sizeof(configuration));
-						strcpy(configuration.proof, proof);
-						strcpy(configuration.font_name, "Courier New");
-
-						for (unsigned int i = 0; i < 8; ++i)
-							configuration.joystick_button[i] = i % 6;
-					}
-
-					//////////////
-					// Mainloop //
-					//////////////
-
-					while (!glfwWindowShouldClose(window))
-					{
-						glfwPollEvents();
-
-						ImGui_ImplOpenGL3_NewFrame();
-						ImGui_ImplGlfw_NewFrame();
-						ImGui::NewFrame();
-
-						ImGui::SetNextWindowPos(ImVec2(0, 0));
-						ImGui::SetNextWindowSize(ImVec2(WINDOW_WIDTH, WINDOW_HEIGHT));
-
-						ImGui::Begin("Main window", NULL, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground);
-
-							if (ImGui::BeginTable("Block1", 2, ImGuiTableFlags_Borders))
-							{
-								ImGui::TableNextRow();
-
-								ImGui::TableSetColumnIndex(0);
-								ImGui::RadioButton("Arrows for Movement", &configuration.move_button_mode, 0);
-								ImGui::RadioButton("<>? for Movement", &configuration.move_button_mode, 1);
-
-								ImGui::TableSetColumnIndex(1);
-								ImGui::RadioButton("Jump=Okay", &configuration.ok_button_mode, 0);
-								ImGui::RadioButton("Attack=Okay", &configuration.ok_button_mode, 1);
-
-								ImGui::TableNextRow();
-
-								ImGui::TableSetColumnIndex(0);
-								ImGui::RadioButton("Z=Jump; X=Attack", &configuration.attack_button_mode, 0);
-								ImGui::RadioButton("X=Jump; Z=Attack", &configuration.attack_button_mode, 1);
-
-								ImGui::TableSetColumnIndex(1);
-								ImGui::SetNextItemWidth(-1.0f);
-								const char *items[] = {"Fullscreen 16-bit", "Windowed 320x240", "Windowed 640x480", "Fullscreen 24-bit", "Fullscreen 32-bit"};
-								ImGui::Combo("", &configuration.display_mode, items, IM_ARRAYSIZE(items));
-								ImGui::Checkbox("Use Joypad", &configuration.bJoystick);
-
-								ImGui::EndTable();
-							}
-
-							// Joypad binding
-
-							if (ImGui::BeginTable("Joypad binding", 9))
-							{
-								ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 60.0f);
-
-								for (int y = 0; y < 7; ++y)
-								{
-									ImGui::TableNextRow();
-
-									if (y == 0)
-									{
-										for (int x = 1; x < 9; ++x)
-										{
-											ImGui::TableSetColumnIndex(x);
-											ImGui::Text(" %d", x);
-										}
-									}
-									else
-									{
-										for (int x = 0; x < 9; ++x)
-										{
-											ImGui::TableSetColumnIndex(x);
-
-											if (x == 0)
-											{
-												const char *inputs[6] = {"Jump:", "Attack:", "Weapon+:", "Weapon-:", "Items:", "Map:"};
-												ImGui::Text(inputs[y - 1]);
-											}
-											else
-											{
-												static char name_buffer[5] = {'#', '#', '0', '0', '\0'};
-												name_buffer[2] = '0' + x;
-												name_buffer[3] = '0' + y;
-												ImGui::RadioButton(name_buffer, &configuration.joystick_button[x - 1], y - 1);
-											}
-										}
-									}
-								}
-
-								ImGui::EndTable();
-
-								if (ImGui::Button("Okay", ImVec2(ImGui::GetContentRegionAvail().x / 2, 0.0f)))
-								{
-									glfwSetWindowShouldClose(window, 1);
-
-									// Save to file
-									FILE *file = fopen(config_path, "wb");
-
-									if (file != NULL)
-									{
-										fwrite(configuration.proof, 1, sizeof(configuration.proof), file);
-										fwrite(configuration.font_name, 1, sizeof(configuration.font_name), file);
-										fputc(configuration.move_button_mode, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(configuration.attack_button_mode, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(configuration.ok_button_mode, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(configuration.display_mode, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(configuration.bJoystick, file);
-										fputc(0, file);
-										fputc(0, file);
-										fputc(0, file);
-
-										for (unsigned int i = 0; i < 8; ++i)
-										{
-											const int encode_table[6] = {0, 1, 2, 5, 3, 4};
-
-											fputc(encode_table[configuration.joystick_button[i]] + 1, file);
-											fputc(0, file);
-											fputc(0, file);
-											fputc(0, file);
-										}
-
-										fclose(file);
-									}
-								}
-
-								ImGui::SameLine();
-
-								if (ImGui::Button("Cancel", ImVec2(ImGui::GetContentRegionAvail().x, 0.0f)))
-									glfwSetWindowShouldClose(window, 1);
-							}
-
-						ImGui::End();
-
-						ImGui::Render();
-						glClear(GL_COLOR_BUFFER_BIT);
-						ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
-						glfwSwapBuffers(window);
-					}
-				}
-			}
-		}
-
-		ImGui_ImplOpenGL3_Shutdown();
-		ImGui_ImplGlfw_Shutdown();
-		ImGui::DestroyContext();
-
-		glfwDestroyWindow(window);
-		glfwTerminate();
-	}
-
-	return 0;
-}
--- a/DoConfig/new/icon.rc
+++ /dev/null
@@ -1,1 +1,0 @@
-102 ICON "1.ico"
--- a/DoConfig/new/imgui.ini
+++ /dev/null
@@ -1,98 +1,0 @@
-[Window][Debug##Default]
-Pos=145,89
-Size=400,400
-Collapsed=0
-
-[Window][Sound Data Creation]
-Pos=0,0
-Size=400,500
-Collapsed=0
-
-[Window][Sound Creation]
-Pos=92,257
-Size=32,35
-Collapsed=0
-
-[Window][Sound Data]
-Pos=88,233
-Size=32,35
-Collapsed=0
-
-[Window][Sounds]
-Pos=108,234
-Size=186,165
-Collapsed=0
-
-[Window][Sound Controls]
-Pos=141,235
-Size=32,35
-Collapsed=0
-
-[Window][Dear ImGui Demo]
-Pos=106,281
-Size=550,680
-Collapsed=0
-
-[Window][Example: Console]
-Pos=60,60
-Size=520,600
-Collapsed=0
-
-[Window][Example: Simple layout]
-Pos=60,60
-Size=500,440
-Collapsed=0
-
-[Window][Example: Auto-resizing window]
-Pos=60,60
-Size=450,267
-Collapsed=0
-
-[Window][Example: Constrained Resize]
-Pos=60,60
-Size=688,293
-Collapsed=0
-
-[Window][Same title as another window##1]
-Pos=100,100
-Size=450,61
-Collapsed=0
-
-[Window][Same title as another window##2]
-Pos=100,200
-Size=450,61
-Collapsed=0
-
-[Window][###AnimatedTitle]
-Pos=100,300
-Size=247,48
-Collapsed=0
-
-[Window][Main window]
-Pos=0,0
-Size=360,290
-Collapsed=0
-
-[Table][0xD3F25573,3]
-Column 0  Width=0
-Column 1  Width=0
-Column 2  Width=0
-
-[Table][0xBF3CBA1D,3]
-Column 0  Width=0
-Column 1  Width=0
-Column 2  Width=0
-
-[Table][0xC0F825AD,2]
-Column 0  Width=0
-Column 1  Width=0
-
-[Table][0xB8B66D71,2]
-Column 0  Width=0
-Column 1  Width=0
-
-[Table][0x22B77DC7,3]
-Column 0  Width=0 Sort=0v
-Column 1  Width=0
-Column 2  Width=0
-
--- a/DoConfig/new/imgui/LICENSE.txt
+++ /dev/null
@@ -1,21 +1,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014-2020 Omar Cornut
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
--- a/DoConfig/new/imgui/imconfig.h
+++ /dev/null
@@ -1,108 +1,0 @@
-//-----------------------------------------------------------------------------
-// COMPILE-TIME OPTIONS FOR DEAR IMGUI
-// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
-// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
-//-----------------------------------------------------------------------------
-// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/branch with your modifications to imconfig.h)
-// B) or add configuration directives in your own file and compile with #define IMGUI_USER_CONFIG "myfilename.h"
-// If you do so you need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include
-// the imgui*.cpp files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures.
-// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
-// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using.
-//-----------------------------------------------------------------------------
-
-#pragma once
-
-//---- Define assertion handler. Defaults to calling assert().
-// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement.
-//#define IM_ASSERT(_EXPR)  MyAssert(_EXPR)
-//#define IM_ASSERT(_EXPR)  ((void)(_EXPR))     // Disable asserts
-
-//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows
-// Using dear imgui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
-//#define IMGUI_API __declspec( dllexport )
-//#define IMGUI_API __declspec( dllimport )
-
-//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names.
-//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-
-//---- Disable all of Dear ImGui or don't implement standard windows.
-// It is very strongly recommended to NOT disable the demo windows during development. Please read comments in imgui_demo.cpp.
-//#define IMGUI_DISABLE                                     // Disable everything: all headers and source files will be empty.
-//#define IMGUI_DISABLE_DEMO_WINDOWS                        // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty. Not recommended.
-//#define IMGUI_DISABLE_METRICS_WINDOW                      // Disable debug/metrics window: ShowMetricsWindow() will be empty.
-
-//---- Don't implement some functions to reduce linkage requirements.
-//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc.
-//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow.
-//#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function (clipboard, ime).
-//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS      // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
-//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS            // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
-//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS              // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
-//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS              // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
-//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
-
-//---- Include imgui_user.h at the end of imgui.h as a convenience
-//#define IMGUI_INCLUDE_IMGUI_USER_H
-
-//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another)
-//#define IMGUI_USE_BGRA_PACKED_COLOR
-
-//---- Use 32-bit for ImWchar (default is 16-bit) to support full unicode code points.
-//#define IMGUI_USE_WCHAR32
-
-//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
-// By default the embedded implementations are declared static and not available outside of imgui cpp files.
-//#define IMGUI_STB_TRUETYPE_FILENAME   "my_folder/stb_truetype.h"
-//#define IMGUI_STB_RECT_PACK_FILENAME  "my_folder/stb_rect_pack.h"
-//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
-//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
-
-//---- Unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined, use the much faster STB sprintf library implementation of vsnprintf instead of the one from the default C library.
-// Note that stb_sprintf.h is meant to be provided by the user and available in the include path at compile time. Also, the compatibility checks of the arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by STB sprintf.
-// #define IMGUI_USE_STB_SPRINTF
-
-//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
-// This will be inlined as part of ImVec2 and ImVec4 class declarations.
-/*
-#define IM_VEC2_CLASS_EXTRA                                                 \
-        ImVec2(const MyVec2& f) { x = f.x; y = f.y; }                       \
-        operator MyVec2() const { return MyVec2(x,y); }
-
-#define IM_VEC4_CLASS_EXTRA                                                 \
-        ImVec4(const MyVec4& f) { x = f.x; y = f.y; z = f.z; w = f.w; }     \
-        operator MyVec4() const { return MyVec4(x,y,z,w); }
-*/
-
-//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
-// Your renderer back-end will need to support it (most example renderer back-ends support both 16/32-bit indices).
-// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
-// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
-//#define ImDrawIdx unsigned int
-
-//---- Override ImDrawCallback signature (will need to modify renderer back-ends accordingly)
-//struct ImDrawList;
-//struct ImDrawCmd;
-//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data);
-//#define ImDrawCallback MyImDrawCallback
-
-//---- Debug Tools: Macro to break in Debugger
-// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.)
-//#define IM_DEBUG_BREAK  IM_ASSERT(0)
-//#define IM_DEBUG_BREAK  __debugbreak()
-
-//---- Debug Tools: Have the Item Picker break in the ItemAdd() function instead of ItemHoverable(),
-// (which comes earlier in the code, will catch a few extra items, allow picking items other than Hovered one.)
-// This adds a small runtime cost which is why it is not enabled by default.
-//#define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
-
-//---- Debug Tools: Enable slower asserts
-//#define IMGUI_DEBUG_PARANOID
-
-//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files.
-/*
-namespace ImGui
-{
-    void MyFunction(const char* name, const MyMatrix44& v);
-}
-*/
--- a/DoConfig/new/imgui/imgui.cpp
+++ /dev/null
@@ -1,10555 +1,0 @@
-// dear imgui, v1.76 WIP
-// (main code and documentation)
-
-// Help:
-// - Read FAQ at http://dearimgui.org/faq
-// - Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
-// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
-// Read imgui.cpp for details, links and comments.
-
-// Resources:
-// - FAQ                   http://dearimgui.org/faq
-// - Homepage & latest     https://github.com/ocornut/imgui
-// - Releases & changelog  https://github.com/ocornut/imgui/releases
-// - Gallery               https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!)
-// - Glossary              https://github.com/ocornut/imgui/wiki/Glossary
-// - Wiki                  https://github.com/ocornut/imgui/wiki
-// - Issues & support      https://github.com/ocornut/imgui/issues
-
-// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
-// See LICENSE.txt for copyright and licensing details (standard MIT License).
-// This library is free but I need your support to sustain development and maintenance.
-// Businesses: you can support continued development via invoiced technical support, maintenance and sponsoring contracts. Please reach out to "contact AT dearimgui.org".
-// Individuals: you can support continued development via donations. See docs/README or web page.
-
-// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library.
-// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without
-// modifying imgui.h or imgui.cpp. You may include imgui_internal.h to access internal data structures, but it doesn't
-// come with any guarantee of forward compatibility. Discussing your changes on the GitHub Issue Tracker may lead you
-// to a better solution or official support for them.
-
-/*
-
-Index of this file:
-
-DOCUMENTATION
-
-- MISSION STATEMENT
-- END-USER GUIDE
-- PROGRAMMER GUIDE
-  - READ FIRST
-  - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
-  - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
-  - HOW A SIMPLE APPLICATION MAY LOOK LIKE (2 variations)
-  - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
-  - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
-- API BREAKING CHANGES (read me when you update!)
-- FREQUENTLY ASKED QUESTIONS (FAQ)
-  - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)
-
-CODE
-(search for "[SECTION]" in the code to find them)
-
-// [SECTION] INCLUDES
-// [SECTION] FORWARD DECLARATIONS
-// [SECTION] CONTEXT AND MEMORY ALLOCATORS
-// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
-// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
-// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
-// [SECTION] MISC HELPERS/UTILITIES (File functions)
-// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
-// [SECTION] MISC HELPERS/UTILITIES (Color functions)
-// [SECTION] ImGuiStorage
-// [SECTION] ImGuiTextFilter
-// [SECTION] ImGuiTextBuffer
-// [SECTION] ImGuiListClipper
-// [SECTION] STYLING
-// [SECTION] RENDER HELPERS
-// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
-// [SECTION] ERROR CHECKING
-// [SECTION] LAYOUT
-// [SECTION] SCROLLING
-// [SECTION] TOOLTIPS
-// [SECTION] POPUPS
-// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
-// [SECTION] DRAG AND DROP
-// [SECTION] LOGGING/CAPTURING
-// [SECTION] SETTINGS
-// [SECTION] PLATFORM DEPENDENT HELPERS
-// [SECTION] METRICS/DEBUG WINDOW
-
-*/
-
-//-----------------------------------------------------------------------------
-// DOCUMENTATION
-//-----------------------------------------------------------------------------
-
-/*
-
- MISSION STATEMENT
- =================
-
- - Easy to use to create code-driven and data-driven tools.
- - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
- - Easy to hack and improve.
- - Minimize screen real-estate usage.
- - Minimize setup and maintenance.
- - Minimize state storage on user side.
- - Portable, minimize dependencies, run on target (consoles, phones, etc.).
- - Efficient runtime and memory consumption (NB- we do allocate when "growing" content e.g. creating a window,.
-   opening a tree node for the first time, etc. but a typical frame should not allocate anything).
-
- Designed for developers and content-creators, not the typical end-user! Some of the weaknesses includes:
- - Doesn't look fancy, doesn't animate.
- - Limited layout features, intricate layouts are typically crafted in code.
-
-
- END-USER GUIDE
- ==============
-
- - Double-click on title bar to collapse window.
- - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin().
- - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents).
- - Click and drag on any empty space to move window.
- - TAB/SHIFT+TAB to cycle through keyboard editable fields.
- - CTRL+Click on a slider or drag box to input value as text.
- - Use mouse wheel to scroll.
- - Text editor:
-   - Hold SHIFT or use mouse to select text.
-   - CTRL+Left/Right to word jump.
-   - CTRL+Shift+Left/Right to select words.
-   - CTRL+A our Double-Click to select all.
-   - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/
-   - CTRL+Z,CTRL+Y to undo/redo.
-   - ESCAPE to revert text to its original value.
-   - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!)
-   - Controls are automatically adjusted for OSX to match standard OSX text editing operations.
- - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard.
- - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://goo.gl/9LgVZW
-
-
- PROGRAMMER GUIDE
- ================
-
- READ FIRST
- ----------
- - Remember to read the FAQ (https://www.dearimgui.org/faq)
- - Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction
-   or destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, less bugs.
- - Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features.
- - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build.
- - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori).
-   You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links docs/README.md.
- - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances.
-   For every application frame your UI code will be called only once. This is in contrast to e.g. Unity's own implementation of an IMGUI,
-   where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches.
- - Our origin are on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right.
- - This codebase is also optimized to yield decent performances with typical "Debug" builds settings.
- - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected).
-   If you get an assert, read the messages and comments around the assert.
- - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace.
- - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types.
-   See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that.
-   However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase.
- - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!).
-
- HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
- ----------------------------------------------
- - Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h)
- - Or maintain your own branch where you have imconfig.h modified.
- - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes.
-   If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed
-   from the public API. If you have a problem with a missing function/symbols, search for its name in the code, there will
-   likely be a comment about it. Please report any issue to the GitHub page!
- - Try to keep your copy of dear imgui reasonably up to date.
-
- GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
- ---------------------------------------------------------------
- - Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library.
- - In the majority of cases you should be able to use unmodified back-ends files available in the examples/ folder.
- - Add the Dear ImGui source files to your projects or using your preferred build system.
-   It is recommended you build and statically link the .cpp files as part of your project and NOT as shared library (DLL).
- - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types.
- - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
- - Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide.
-   Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render"
-   phases of your own application. All rendering information are stored into command-lists that you will retrieve after calling ImGui::Render().
- - Refer to the bindings and demo applications in the examples/ folder for instruction on how to setup your code.
- - If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder.
-
- HOW A SIMPLE APPLICATION MAY LOOK LIKE
- --------------------------------------
- EXHIBIT 1: USING THE EXAMPLE BINDINGS (imgui_impl_XXX.cpp files from the examples/ folder).
-
-     // Application init: create a dear imgui context, setup some options, load fonts
-     ImGui::CreateContext();
-     ImGuiIO& io = ImGui::GetIO();
-     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
-     // TODO: Fill optional fields of the io structure later.
-     // TODO: Load TTF/OTF fonts if you don't want to use the default font.
-
-     // Initialize helper Platform and Renderer bindings (here we are using imgui_impl_win32.cpp and imgui_impl_dx11.cpp)
-     ImGui_ImplWin32_Init(hwnd);
-     ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
-
-     // Application main loop
-     while (true)
-     {
-         // Feed inputs to dear imgui, start new frame
-         ImGui_ImplDX11_NewFrame();
-         ImGui_ImplWin32_NewFrame();
-         ImGui::NewFrame();
-
-         // Any application code here
-         ImGui::Text("Hello, world!");
-
-         // Render dear imgui into screen
-         ImGui::Render();
-         ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
-         g_pSwapChain->Present(1, 0);
-     }
-
-     // Shutdown
-     ImGui_ImplDX11_Shutdown();
-     ImGui_ImplWin32_Shutdown();
-     ImGui::DestroyContext();
-
- EXHIBIT 2: IMPLEMENTING CUSTOM BINDING / CUSTOM ENGINE
-
-     // Application init: create a dear imgui context, setup some options, load fonts
-     ImGui::CreateContext();
-     ImGuiIO& io = ImGui::GetIO();
-     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
-     // TODO: Fill optional fields of the io structure later.
-     // TODO: Load TTF/OTF fonts if you don't want to use the default font.
-
-     // Build and load the texture atlas into a texture
-     // (In the examples/ app this is usually done within the ImGui_ImplXXX_Init() function from one of the demo Renderer)
-     int width, height;
-     unsigned char* pixels = NULL;
-     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
-
-     // At this point you've got the texture data and you need to upload that your your graphic system:
-     // After we have created the texture, store its pointer/identifier (_in whichever format your engine uses_) in 'io.Fonts->TexID'.
-     // This will be passed back to your via the renderer. Basically ImTextureID == void*. Read FAQ for details about ImTextureID.
-     MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA32)
-     io.Fonts->TexID = (void*)texture;
-
-     // Application main loop
-     while (true)
-     {
-        // Setup low-level inputs, e.g. on Win32: calling GetKeyboardState(), or write to those fields from your Windows message handlers, etc.
-        // (In the examples/ app this is usually done within the ImGui_ImplXXX_NewFrame() function from one of the demo Platform bindings)
-        io.DeltaTime = 1.0f/60.0f;              // set the time elapsed since the previous frame (in seconds)
-        io.DisplaySize.x = 1920.0f;             // set the current display width
-        io.DisplaySize.y = 1280.0f;             // set the current display height here
-        io.MousePos = my_mouse_pos;             // set the mouse position
-        io.MouseDown[0] = my_mouse_buttons[0];  // set the mouse button states
-        io.MouseDown[1] = my_mouse_buttons[1];
-
-        // Call NewFrame(), after this point you can use ImGui::* functions anytime
-        // (So you want to try calling NewFrame() as early as you can in your mainloop to be able to use Dear ImGui everywhere)
-        ImGui::NewFrame();
-
-        // Most of your application code here
-        ImGui::Text("Hello, world!");
-        MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
-        MyGameRender(); // may use any Dear ImGui functions as well!
-
-        // Render dear imgui, swap buffers
-        // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code)
-        ImGui::EndFrame();
-        ImGui::Render();
-        ImDrawData* draw_data = ImGui::GetDrawData();
-        MyImGuiRenderFunction(draw_data);
-        SwapBuffers();
-     }
-
-     // Shutdown
-     ImGui::DestroyContext();
-
- HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
- ---------------------------------------------
-    void void MyImGuiRenderFunction(ImDrawData* draw_data)
-    {
-       // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
-       // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
-       // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
-       // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
-       for (int n = 0; n < draw_data->CmdListsCount; n++)
-       {
-          const ImDrawList* cmd_list = draw_data->CmdLists[n];
-          const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data;  // vertex buffer generated by Dear ImGui
-          const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data;   // index buffer generated by Dear ImGui
-          for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
-          {
-             const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
-             if (pcmd->UserCallback)
-             {
-                 pcmd->UserCallback(cmd_list, pcmd);
-             }
-             else
-             {
-                 // The texture for the draw call is specified by pcmd->TextureId.
-                 // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization.
-                 MyEngineBindTexture((MyTexture*)pcmd->TextureId);
-
-                 // We are using scissoring to clip some objects. All low-level graphics API should supports it.
-                 // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches
-                 //   (some elements visible outside their bounds) but you can fix that once everything else works!
-                 // - Clipping coordinates are provided in imgui coordinates space (from draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize)
-                 //   In a single viewport application, draw_data->DisplayPos will always be (0,0) and draw_data->DisplaySize will always be == io.DisplaySize.
-                 //   However, in the interest of supporting multi-viewport applications in the future (see 'viewport' branch on github),
-                 //   always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space.
-                 // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min)
-                 ImVec2 pos = draw_data->DisplayPos;
-                 MyEngineScissor((int)(pcmd->ClipRect.x - pos.x), (int)(pcmd->ClipRect.y - pos.y), (int)(pcmd->ClipRect.z - pos.x), (int)(pcmd->ClipRect.w - pos.y));
-
-                 // Render 'pcmd->ElemCount/3' indexed triangles.
-                 // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices.
-                 MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer);
-             }
-             idx_buffer += pcmd->ElemCount;
-          }
-       }
-    }
-
- - The examples/ folders contains many actual implementation of the pseudo-codes above.
- - When calling NewFrame(), the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags are updated.
-   They tell you if Dear ImGui intends to use your inputs. When a flag is set you want to hide the corresponding inputs from the
-   rest of your application. In every cases you need to pass on the inputs to Dear ImGui.
- - Refer to the FAQ for more information. Amusingly, it is called a FAQ because people frequently run into the same issues!
-
- USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
- ------------------------------------------
- - The gamepad/keyboard navigation is fairly functional and keeps being improved.
- - Gamepad support is particularly useful to use Dear ImGui on a console system (e.g. PS4, Switch, XB1) without a mouse!
- - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787
- - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable.
- - Keyboard:
-    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable.
-      NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
-    - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag
-      will be set. For more advanced uses, you may want to read from:
-       - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
-       - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used).
-       - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions.
-      Please reach out if you think the game vs navigation input sharing could be improved.
- - Gamepad:
-    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable.
-    - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame().
-      Note that io.NavInputs[] is cleared by EndFrame().
-    - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. For each entry of io.NavInputs[], set the following values:
-         0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks.
-    - We uses a simple >0.0f test for activation testing, and won't attempt to test for a dead-zone.
-      Your code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.).
-    - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://goo.gl/9LgVZW.
-    - If you need to share inputs between your game and the imgui parts, the easiest approach is to go all-or-nothing, with a buttons combo
-      to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved.
- - Mouse:
-    - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
-    - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard.
-    - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag.
-      Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements.
-      When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved.
-      When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that.
-      (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!)
-      (In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want
-       to set a boolean to ignore your other external mouse positions until the external source is moved again.)
-
-
- API BREAKING CHANGES
- ====================
-
- Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix.
- Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code.
- When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
- You can read releases logs https://github.com/ocornut/imgui/releases for more details.
-
- - 2020/01/22 (1.75) - ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius any more.
- - 2019/12/17 (1.75) - made Columns() limited to 64 columns by asserting above that limit. While the current code technically supports it, future code may not so we're putting the restriction ahead.
- - 2019/12/13 (1.75) - [imgui_internal.h] changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it, you may need to fix your initial value.
- - 2019/12/08 (1.75) - removed redirecting functions/enums that were marked obsolete in 1.53 (December 2017):
-                       - ShowTestWindow()                    -> use ShowDemoWindow()
-                       - IsRootWindowFocused()               -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow)
-                       - IsRootWindowOrAnyChildFocused()     -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)
-                       - SetNextWindowContentWidth(w)        -> use SetNextWindowContentSize(ImVec2(w, 0.0f)
-                       - GetItemsLineHeightWithSpacing()     -> use GetFrameHeightWithSpacing()
-                       - ImGuiCol_ChildWindowBg              -> use ImGuiCol_ChildBg
-                       - ImGuiStyleVar_ChildWindowRounding   -> use ImGuiStyleVar_ChildRounding
-                       - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap
-                       - IMGUI_DISABLE_TEST_WINDOWS          -> use IMGUI_DISABLE_DEMO_WINDOWS
- - 2019/12/08 (1.75) - obsoleted calling ImDrawList::PrimReserve() with a negative count (which was the vaguely documented and rarely if ever used). Instead we added an explicit PrimUnreserve() API.
- - 2019/12/06 (1.75) - removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it).
- - 2019/11/21 (1.74) - ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert.
- - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS for consistency.
- - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS for consistency.
- - 2019/10/22 (1.74) - removed redirecting functions/enums that were marked obsolete in 1.52 (October 2017):
-                       - Begin() [old 5 args version]        -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed
-                       - IsRootWindowOrAnyChildHovered()     -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)
-                       - AlignFirstTextHeightToWidgets()     -> use AlignTextToFramePadding()
-                       - SetNextWindowPosCenter()            -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f)
-                       - ImFont::Glyph                       -> use ImFontGlyph
- - 2019/10/14 (1.74) - inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function.
-                       if you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can add +io.KeyRepeatDelay to it to compensate for the fix.
-                       The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay).
-                       If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you.
- - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete).
- - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
- - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names, or see how they were implemented until 1.71.
- - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have
-                       overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering.
-                       This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows.
-                       Please reach out if you are affected.
- - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
- - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
- - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now.
- - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete).
- - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete).
- - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete).
- - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with a dummy small value!
- - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
- - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
- - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete).
- - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects.
- - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags.
- - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
- - 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete).
- - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
-                       If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths.
- - 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427)
- - 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp.
-                       NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTION HAS BEEN MOVED.
-                       Because of this, any local modifications to imgui.cpp will likely conflict when you update. Read docs/CHANGELOG.txt for suggestions.
- - 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
- - 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
- - 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
- - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature.
- - 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency.
- - 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time.
- - 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
- - 2018/06/08 (1.62) - examples: the imgui_impl_xxx files have been split to separate platform (Win32, Glfw, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan,  etc.).
-                       old bindings will still work as is, however prefer using the separated bindings as they will be updated to support multi-viewports.
-                       when adopting new bindings follow the main.cpp code of your preferred examples/ folder to know which functions to call.
-                       in particular, note that old bindings called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function.
- - 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set.
- - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
- - 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
-                       If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
-                       To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
-                       If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to help you find them.
- - 2018/04/28 (1.61) - obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format",
-                       consistent with other functions. Kept redirection functions (will obsolete).
- - 2018/04/09 (1.61) - IM_DELETE() helper function added in 1.60 doesn't clear the input _pointer_ reference, more consistent with expectation and allows passing r-value.
- - 2018/03/20 (1.60) - renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some binding ahead of merging the Nav branch).
- - 2018/03/12 (1.60) - removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now.
- - 2018/03/08 (1.60) - changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically.
- - 2018/03/03 (1.60) - renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums.
- - 2018/02/18 (1.60) - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment.
- - 2018/02/16 (1.60) - obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). Use ImGui::GetDrawData() to retrieve the ImDrawData* to display.
- - 2018/02/07 (1.60) - reorganized context handling to be more explicit,
-                       - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END.
-                       - removed Shutdown() function, as DestroyContext() serve this purpose.
-                       - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance.
-                       - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts.
-                       - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts.
- - 2018/01/31 (1.60) - moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths.
- - 2018/01/11 (1.60) - obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete).
- - 2018/01/11 (1.60) - obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete).
- - 2018/01/03 (1.60) - renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData.
- - 2017/12/29 (1.60) - removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it it's easy to replicate on your side.
- - 2017/12/24 (1.53) - renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). Kept redirection function (will obsolete).
- - 2017/12/21 (1.53) - ImDrawList: renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags
- - 2017/12/21 (1.53) - ImDrawList: removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame.
- - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set.
- - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete).
- - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete).
-                     - obsoleted IsRootWindowOrAnyChildFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows). Kept redirection function (will obsolete).
- - 2017/12/12 (1.53) - renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. Kept redirection enum (will obsolete).
- - 2017/12/10 (1.53) - removed SetNextWindowContentWidth(), prefer using SetNextWindowContentSize(). Kept redirection function (will obsolete).
- - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed.
- - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up.
-                       Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions.
- - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency.
- - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg.
- - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding.
- - 2017/11/02 (1.53) - obsoleted IsRootWindowOrAnyChildHovered() in favor of using IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows);
- - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
- - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
- - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
-                       removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
-                         IsItemHoveredRect()        --> IsItemHovered(ImGuiHoveredFlags_RectOnly)
-                         IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
-                         IsMouseHoveringWindow()    --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior]
- - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
- - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
- - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete).
- - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
- - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
- - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
-                     - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
-                     - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
- - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
- - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
- - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type.
- - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
- - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete).
- - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete).
- - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
- - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
-                     - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
-                     - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0))'
- - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse
- - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset.
- - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity.
- - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetId() and use it instead of passing string to BeginChild().
- - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
- - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
- - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully breakage should be minimal.
- - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore.
-                       If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you, otherwise if <1.0f you need tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar.
-                       This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color:
-                       ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); }
-                       If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color.
- - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext().
- - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection.
- - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen).
- - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDrawList::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer.
- - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref github issue #337).
- - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337)
- - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete).
- - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert.
- - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you.
- - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis.
- - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete.
- - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position.
-                       GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side.
-                       GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out!
- - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize
- - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project.
- - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason
- - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure.
-                       you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text.
- - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost.
-                       this necessary change will break your rendering function! the fix should be very easy. sorry for that :(
-                     - if you are using a vanilla copy of one of the imgui_impl_XXXX.cpp provided in the example, you just need to update your copy and you can ignore the rest.
-                     - the signature of the io.RenderDrawListsFn handler has changed!
-                       old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
-                       new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data).
-                         parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
-                         ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new.
-                         ImDrawCmd:  'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'.
-                     - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer.
-                     - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering!
-                     - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade!
- - 2015/07/10 (1.43) - changed SameLine() parameters from int to float.
- - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete).
- - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount.
- - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence
- - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely be used. Sorry!
- - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete).
- - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete).
- - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons.
- - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened.
- - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same).
- - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50.
- - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API
- - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive.
- - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead.
- - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50.
- - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing
- - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50.
- - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing)
- - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50.
- - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once.
- - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now.
- - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
- - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
- - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused)
- - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions.
- - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader.
- - 2015/01/11 (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels.
-                       - old:  const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); [..Upload texture to GPU..];
-                       - new:  unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); [..Upload texture to GPU..]; io.Fonts->TexId = YourTexIdentifier;
-                       you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. It is now recommended that you sample the font texture with bilinear interpolation.
- - 2015/01/11 (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to set io.Fonts->TexID.
- - 2015/01/11 (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix)
- - 2015/01/11 (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets
- - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver)
- - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph)
- - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility
- - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered()
- - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly)
- - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity)
- - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale()
- - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn
- - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically)
- - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite
- - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes
-
-
- FREQUENTLY ASKED QUESTIONS (FAQ)
- ================================
-
- Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)
- Some answers are copied down here to facilitate searching in code.
-
- Q&A: Basics
- ===========
-
- Q: Where is the documentation?
- A: This library is poorly documented at the moment and expects of the user to be acquainted with C/C++.
-    - Run the examples/ and explore them.
-    - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function.
-    - The demo covers most features of Dear ImGui, so you can read the code and see its output.
-    - See documentation and comments at the top of imgui.cpp + effectively imgui.h.
-    - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the
-      examples/ folder to explain how to integrate Dear ImGui with your own engine/application.
-    - The Wiki (https://github.com/ocornut/imgui/wiki) has many resources and links.
-    - The Glossary (https://github.com/ocornut/imgui/wiki/Glossary) page also may be useful.
-    - Your programming IDE is your friend, find the type or function declaration to find comments
-      associated to it.
-
- Q: What is this library called?
- Q: Which version should I get?
- >> This library is called "Dear ImGui", please don't call it "ImGui" :)
- >> See https://www.dearimgui.org/faq
-
- Q&A: Integration
- ================
-
- Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or to my application?
- A: You should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
- >> See https://www.dearimgui.org/faq for fully detailed answer. You really want to read this.
-
- Q. How can I enable keyboard controls?
- Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display)
- Q: I integrated Dear ImGui in my engine and the text or lines are blurry..
- Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
- >> See https://www.dearimgui.org/faq
-
- Q&A: Usage
- ----------
-
- Q: Why are multiple widgets reacting when I interact with a single one?
- Q: How can I have multiple widgets with the same label or with an empty label?
- A: A primer on labels and the ID Stack...
-
-    Dear ImGui internally need to uniquely identify UI elements.
-    Elements that are typically not clickable (such as calls to the Text functions) don't need an ID.
-    Interactive widgets (such as calls to Button buttons) need a unique ID.
-    Unique ID are used internally to track active widgets and occasionally associate state to widgets.
-    Unique ID are implicitly built from the hash of multiple elements that identify the "path" to the UI element.
-
-   - Unique ID are often derived from a string label:
-
-       Button("OK");          // Label = "OK",     ID = hash of (..., "OK")
-       Button("Cancel");      // Label = "Cancel", ID = hash of (..., "Cancel")
-
-   - ID are uniquely scoped within windows, tree nodes, etc. which all pushes to the ID stack. Having
-     two buttons labeled "OK" in different windows or different tree locations is fine.
-     We used "..." above to signify whatever was already pushed to the ID stack previously:
-
-       Begin("MyWindow");
-       Button("OK");          // Label = "OK",     ID = hash of ("MyWindow", "OK")
-       End();
-       Begin("MyOtherWindow");
-       Button("OK");          // Label = "OK",     ID = hash of ("MyOtherWindow", "OK")
-       End();
-
-   - If you have a same ID twice in the same location, you'll have a conflict:
-
-       Button("OK");
-       Button("OK");          // ID collision! Interacting with either button will trigger the first one.
-
-     Fear not! this is easy to solve and there are many ways to solve it!
-
-   - Solving ID conflict in a simple/local context:
-     When passing a label you can optionally specify extra ID information within string itself.
-     Use "##" to pass a complement to the ID that won't be visible to the end-user.
-     This helps solving the simple collision cases when you know e.g. at compilation time which items
-     are going to be created:
-
-       Begin("MyWindow");
-       Button("Play");        // Label = "Play",   ID = hash of ("MyWindow", "Play")
-       Button("Play##foo1");  // Label = "Play",   ID = hash of ("MyWindow", "Play##foo1")  // Different from above
-       Button("Play##foo2");  // Label = "Play",   ID = hash of ("MyWindow", "Play##foo2")  // Different from above
-       End();
-
-   - If you want to completely hide the label, but still need an ID:
-
-       Checkbox("##On", &b);  // Label = "",       ID = hash of (..., "##On")   // No visible label, just a checkbox!
-
-   - Occasionally/rarely you might want change a label while preserving a constant ID. This allows
-     you to animate labels. For example you may want to include varying information in a window title bar,
-     but windows are uniquely identified by their ID. Use "###" to pass a label that isn't part of ID:
-
-       Button("Hello###ID");  // Label = "Hello",  ID = hash of (..., "###ID")
-       Button("World###ID");  // Label = "World",  ID = hash of (..., "###ID")  // Same as above, even though the label looks different
-
-       sprintf(buf, "My game (%f FPS)###MyGame", fps);
-       Begin(buf);            // Variable title,   ID = hash of "MyGame"
-
-   - Solving ID conflict in a more general manner:
-     Use PushID() / PopID() to create scopes and manipulate the ID stack, as to avoid ID conflicts
-     within the same window. This is the most convenient way of distinguishing ID when iterating and
-     creating many UI elements programmatically.
-     You can push a pointer, a string or an integer value into the ID stack.
-     Remember that ID are formed from the concatenation of _everything_ pushed into the ID stack.
-     At each level of the stack we store the seed used for items at this level of the ID stack.
-
-     Begin("Window");
-       for (int i = 0; i < 100; i++)
-       {
-         PushID(i);           // Push i to the id tack
-         Button("Click");     // Label = "Click",  ID = hash of ("Window", i, "Click")
-         PopID();
-       }
-       for (int i = 0; i < 100; i++)
-       {
-         MyObject* obj = Objects[i];
-         PushID(obj);
-         Button("Click");     // Label = "Click",  ID = hash of ("Window", obj pointer, "Click")
-         PopID();
-       }
-       for (int i = 0; i < 100; i++)
-       {
-         MyObject* obj = Objects[i];
-         PushID(obj->Name);
-         Button("Click");     // Label = "Click",  ID = hash of ("Window", obj->Name, "Click")
-         PopID();
-       }
-       End();
-
-   - You can stack multiple prefixes into the ID stack:
-
-       Button("Click");       // Label = "Click",  ID = hash of (..., "Click")
-       PushID("node");
-       Button("Click");       // Label = "Click",  ID = hash of (..., "node", "Click")
-         PushID(my_ptr);
-           Button("Click");   // Label = "Click",  ID = hash of (..., "node", my_ptr, "Click")
-         PopID();
-       PopID();
-
-   - Tree nodes implicitly creates a scope for you by calling PushID().
-
-       Button("Click");       // Label = "Click",  ID = hash of (..., "Click")
-       if (TreeNode("node"))  // <-- this function call will do a PushID() for you (unless instructed not to, with a special flag)
-       {
-         Button("Click");     // Label = "Click",  ID = hash of (..., "node", "Click")
-         TreePop();
-       }
-
-   - When working with trees, ID are used to preserve the open/close state of each tree node.
-     Depending on your use cases you may want to use strings, indices or pointers as ID.
-      e.g. when following a single pointer that may change over time, using a static string as ID
-       will preserve your node open/closed state when the targeted object change.
-      e.g. when displaying a list of objects, using indices or pointers as ID will preserve the
-       node open/closed state differently. See what makes more sense in your situation!
-
- Q: How can I display an image? What is ImTextureID, how does it works?
- >> See https://www.dearimgui.org/faq and https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
-
- Q: How can I use my own math types instead of ImVec2/ImVec4?
- Q: How can I interact with standard C++ types (such as std::string and std::vector)?
- Q: How can I display custom shapes? (using low-level ImDrawList API)
- >> See https://www.dearimgui.org/faq
-
- Q&A: Fonts, Text
- ================
-
- Q: How can I load a different font than the default?
- Q: How can I easily use icons in my application?
- Q: How can I load multiple fonts?
- Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
- >> See https://www.dearimgui.org/faq and docs/FONTS.txt
-
- Q&A: Concerns
- =============
-
- Q: Who uses Dear ImGui?
- Q: Can you create elaborate/serious tools with Dear ImGui?
- Q: Can you reskin the look of Dear ImGui?
- Q: Why using C++ (as opposed to C)?
- >> See https://www.dearimgui.org/faq
-
- Q&A: Community
- ==============
-
- Q: How can I help?
- A: - Businesses: please reach out to "contact AT dearimgui.org" if you work in a place using Dear ImGui!
-      We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts.
-      This is among the most useful thing you can do for Dear ImGui. With increased funding we can hire more people working on this project.
-    - Individuals: you can support continued development via PayPal donations. See README.
-    - If you are experienced with Dear ImGui and C++, look at the github issues, look at the Wiki, read docs/TODO.txt
-      and see how you want to help and can help!
-    - Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc.
-      You may post screenshot or links in the gallery threads (github.com/ocornut/imgui/issues/3075). Visuals are ideal as they inspire other programmers.
-      But even without visuals, disclosing your use of dear imgui help the library grow credibility, and help other teams and programmers with taking decisions.
-    - If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on github or privately).
-
-*/
-
-//-------------------------------------------------------------------------
-// [SECTION] INCLUDES
-//-------------------------------------------------------------------------
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "imgui.h"
-#ifndef IMGUI_DISABLE
-
-#ifndef IMGUI_DEFINE_MATH_OPERATORS
-#define IMGUI_DEFINE_MATH_OPERATORS
-#endif
-#include "imgui_internal.h"
-
-// System includes
-#include <ctype.h>      // toupper
-#include <stdio.h>      // vsnprintf, sscanf, printf
-#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
-#include <stddef.h>     // intptr_t
-#else
-#include <stdint.h>     // intptr_t
-#endif
-
-// [Windows] OS specific includes (optional)
-#if defined(_WIN32) && defined(IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
-#define IMGUI_DISABLE_WIN32_FUNCTIONS
-#endif
-#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-#ifndef __MINGW32__
-#include <Windows.h>        // _wfopen, OpenClipboard
-#else
-#include <windows.h>
-#endif
-#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have all Win32 functions
-#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
-#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
-#endif
-#endif
-
-// [Apple] OS specific includes
-#if defined(__APPLE__)
-#include <TargetConditionals.h>
-#endif
-
-// Visual Studio warnings
-#ifdef _MSC_VER
-#pragma warning (disable: 4127)             // condition expression is constant
-#pragma warning (disable: 4996)             // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
-#if defined(_MSC_VER) && _MSC_VER >= 1922   // MSVC 2019 16.2 or later
-#pragma warning (disable: 5054)             // operator '|': deprecated between enumerations of different types
-#endif
-#endif
-
-// Clang/GCC warnings with -Weverything
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wunknown-pragmas"        // warning : unknown warning group '-Wformat-pedantic *'        // not all warnings are known by all clang versions.. so ignoring warnings triggers new warnings on some configuration. great!
-#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
-#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok.
-#pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
-#pragma clang diagnostic ignored "-Wexit-time-destructors"  // warning : declaration requires an exit-time destructor       // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
-#pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is.
-#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
-#pragma clang diagnostic ignored "-Wformat-pedantic"        // warning : format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
-#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"       // warning : cast to 'void *' from smaller integer type 'int'
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
-#endif
-#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
-#endif
-#elif defined(__GNUC__)
-// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association.
-#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used
-#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size
-#pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
-#pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function
-#pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked
-#pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
-#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
-
-// Debug options
-#define IMGUI_DEBUG_NAV_SCORING     0   // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL
-#define IMGUI_DEBUG_NAV_RECTS       0   // Display the reference navigation rectangle for each window
-#define IMGUI_DEBUG_INI_SETTINGS    0   // Save additional comments in .ini file (particularly helps for Docking, but makes saving slower)
-
-// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
-static const float NAV_WINDOWING_HIGHLIGHT_DELAY            = 0.20f;    // Time before the highlight and screen dimming starts fading in
-static const float NAV_WINDOWING_LIST_APPEAR_DELAY          = 0.15f;    // Time before the window list starts to appear
-
-// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by back-end)
-static const float WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS = 4.0f;     // Extend outside and inside windows. Affect FindHoveredWindow().
-static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f;    // Reduce visual noise by only highlighting the border after a certain time.
-static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER    = 2.00f;    // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certaint time, unless mouse moved.
-
-//-------------------------------------------------------------------------
-// [SECTION] FORWARD DECLARATIONS
-//-------------------------------------------------------------------------
-
-static void             SetCurrentWindow(ImGuiWindow* window);
-static void             FindHoveredWindow();
-static ImGuiWindow*     CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags);
-static ImVec2           CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges);
-
-static void             AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
-static void             AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
-
-static ImRect           GetViewportRect();
-
-// Settings
-static void*            WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
-static void             WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
-static void             WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
-
-// Platform Dependents default implementation for IO functions
-static const char*      GetClipboardTextFn_DefaultImpl(void* user_data);
-static void             SetClipboardTextFn_DefaultImpl(void* user_data, const char* text);
-static void             ImeSetInputScreenPosFn_DefaultImpl(int x, int y);
-
-namespace ImGui
-{
-// Navigation
-static void             NavUpdate();
-static void             NavUpdateWindowing();
-static void             NavUpdateWindowingOverlay();
-static void             NavUpdateMoveResult();
-static float            NavUpdatePageUpPageDown();
-static inline void      NavUpdateAnyRequestFlag();
-static bool             NavScoreItem(ImGuiNavMoveResult* result, ImRect cand);
-static void             NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
-static ImVec2           NavCalcPreferredRefPos();
-static void             NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
-static ImGuiWindow*     NavRestoreLastChildNavWindow(ImGuiWindow* window);
-static int              FindWindowFocusIndex(ImGuiWindow* window);
-
-// Error Checking
-static void             ErrorCheckNewFrameSanityChecks();
-static void             ErrorCheckEndFrameSanityChecks();
-static void             ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write);
-
-// Misc
-static void             UpdateSettings();
-static void             UpdateMouseInputs();
-static void             UpdateMouseWheel();
-static void             UpdateTabFocus();
-static void             UpdateDebugToolItemPicker();
-static bool             UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]);
-static void             RenderWindowOuterBorders(ImGuiWindow* window);
-static void             RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
-static void             RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);
-
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] CONTEXT AND MEMORY ALLOCATORS
-//-----------------------------------------------------------------------------
-
-// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL.
-// ImGui::CreateContext() will automatically set this pointer if it is NULL. Change to a different context by calling ImGui::SetCurrentContext().
-// 1) Important: globals are not shared across DLL boundaries! If you use DLLs or any form of hot-reloading: you will need to call
-//    SetCurrentContext() (with the pointer you got from CreateContext) from each unique static/DLL boundary, and after each hot-reloading.
-//    In your debugger, add GImGui to your watch window and notice how its value changes depending on which location you are currently stepping into.
-// 2) Important: Dear ImGui functions are not thread-safe because of this pointer.
-//    If you want thread-safety to allow N threads to access N different contexts, you can:
-//    - Change this variable to use thread local storage so each thread can refer to a different context, in imconfig.h:
-//          struct ImGuiContext;
-//          extern thread_local ImGuiContext* MyImGuiTLS;
-//          #define GImGui MyImGuiTLS
-//      And then define MyImGuiTLS in one of your cpp file. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword.
-//    - Future development aim to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
-//    - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from different namespace.
-#ifndef GImGui
-ImGuiContext*   GImGui = NULL;
-#endif
-
-// Memory Allocator functions. Use SetAllocatorFunctions() to change them.
-// If you use DLL hotreloading you might need to call SetAllocatorFunctions() after reloading code from this file.
-// Otherwise, you probably don't want to modify them mid-program, and if you use global/static e.g. ImVector<> instances you may need to keep them accessible during program destruction.
-#ifndef IMGUI_DISABLE_DEFAULT_ALLOCATORS
-static void*   MallocWrapper(size_t size, void* user_data)    { IM_UNUSED(user_data); return malloc(size); }
-static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSED(user_data); free(ptr); }
-#else
-static void*   MallocWrapper(size_t size, void* user_data)    { IM_UNUSED(user_data); IM_UNUSED(size); IM_ASSERT(0); return NULL; }
-static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSED(user_data); IM_UNUSED(ptr); IM_ASSERT(0); }
-#endif
-
-static void*  (*GImAllocatorAllocFunc)(size_t size, void* user_data) = MallocWrapper;
-static void   (*GImAllocatorFreeFunc)(void* ptr, void* user_data) = FreeWrapper;
-static void*    GImAllocatorUserData = NULL;
-
-//-----------------------------------------------------------------------------
-// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
-//-----------------------------------------------------------------------------
-
-ImGuiStyle::ImGuiStyle()
-{
-    Alpha                   = 1.0f;             // Global alpha applies to everything in ImGui
-    WindowPadding           = ImVec2(8,8);      // Padding within a window
-    WindowRounding          = 7.0f;             // Radius of window corners rounding. Set to 0.0f to have rectangular windows
-    WindowBorderSize        = 1.0f;             // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
-    WindowMinSize           = ImVec2(32,32);    // Minimum window size
-    WindowTitleAlign        = ImVec2(0.0f,0.5f);// Alignment for title bar text
-    WindowMenuButtonPosition= ImGuiDir_Left;    // Position of the collapsing/docking button in the title bar (left/right). Defaults to ImGuiDir_Left.
-    ChildRounding           = 0.0f;             // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
-    ChildBorderSize         = 1.0f;             // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested.
-    PopupRounding           = 0.0f;             // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows
-    PopupBorderSize         = 1.0f;             // Thickness of border around popup or tooltip windows. Generally set to 0.0f or 1.0f. Other values not well tested.
-    FramePadding            = ImVec2(4,3);      // Padding within a framed rectangle (used by most widgets)
-    FrameRounding           = 0.0f;             // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets).
-    FrameBorderSize         = 0.0f;             // Thickness of border around frames. Generally set to 0.0f or 1.0f. Other values not well tested.
-    ItemSpacing             = ImVec2(8,4);      // Horizontal and vertical spacing between widgets/lines
-    ItemInnerSpacing        = ImVec2(4,4);      // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
-    CellPadding             = ImVec2(4,2);      // Padding within a table cell
-    TouchExtraPadding       = ImVec2(0,0);      // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
-    IndentSpacing           = 21.0f;            // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
-    ColumnsMinSpacing       = 6.0f;             // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
-    ScrollbarSize           = 14.0f;            // Width of the vertical scrollbar, Height of the horizontal scrollbar
-    ScrollbarRounding       = 9.0f;             // Radius of grab corners rounding for scrollbar
-    GrabMinSize             = 10.0f;            // Minimum width/height of a grab box for slider/scrollbar
-    GrabRounding            = 0.0f;             // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
-    TabRounding             = 4.0f;             // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
-    TabBorderSize           = 0.0f;             // Thickness of border around tabs.
-    ColorButtonPosition     = ImGuiDir_Right;   // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
-    ButtonTextAlign         = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
-    SelectableTextAlign     = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
-    DisplayWindowPadding    = ImVec2(19,19);    // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
-    DisplaySafeAreaPadding  = ImVec2(3,3);      // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
-    MouseCursorScale        = 1.0f;             // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
-    AntiAliasedLines        = true;             // Enable anti-aliasing on lines/borders. Disable if you are really short on CPU/GPU.
-    AntiAliasedFill         = true;             // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
-    CurveTessellationTol    = 1.25f;            // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
-    CircleSegmentMaxError   = 1.60f;            // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
-
-    // Default theme
-    ImGui::StyleColorsDark(this);
-}
-
-// To scale your entire UI (e.g. if you want your app to use High DPI or generally be DPI aware) you may use this helper function. Scaling the fonts is done separately and is up to you.
-// Important: This operation is lossy because we round all sizes to integer. If you need to change your scale multiples, call this over a freshly initialized ImGuiStyle structure rather than scaling multiple times.
-void ImGuiStyle::ScaleAllSizes(float scale_factor)
-{
-    WindowPadding = ImFloor(WindowPadding * scale_factor);
-    WindowRounding = ImFloor(WindowRounding * scale_factor);
-    WindowMinSize = ImFloor(WindowMinSize * scale_factor);
-    ChildRounding = ImFloor(ChildRounding * scale_factor);
-    PopupRounding = ImFloor(PopupRounding * scale_factor);
-    FramePadding = ImFloor(FramePadding * scale_factor);
-    FrameRounding = ImFloor(FrameRounding * scale_factor);
-    ItemSpacing = ImFloor(ItemSpacing * scale_factor);
-    ItemInnerSpacing = ImFloor(ItemInnerSpacing * scale_factor);
-    CellPadding = ImFloor(CellPadding * scale_factor);
-    TouchExtraPadding = ImFloor(TouchExtraPadding * scale_factor);
-    IndentSpacing = ImFloor(IndentSpacing * scale_factor);
-    ColumnsMinSpacing = ImFloor(ColumnsMinSpacing * scale_factor);
-    ScrollbarSize = ImFloor(ScrollbarSize * scale_factor);
-    ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor);
-    GrabMinSize = ImFloor(GrabMinSize * scale_factor);
-    GrabRounding = ImFloor(GrabRounding * scale_factor);
-    TabRounding = ImFloor(TabRounding * scale_factor);
-    DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor);
-    DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor);
-    MouseCursorScale = ImFloor(MouseCursorScale * scale_factor);
-}
-
-ImGuiIO::ImGuiIO()
-{
-    // Most fields are initialized with zero
-    memset(this, 0, sizeof(*this));
-    IM_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT); // Our pre-C++11 IM_STATIC_ASSERT() macros triggers warning on modern compilers so we don't use it here.
-
-    // Settings
-    ConfigFlags = ImGuiConfigFlags_None;
-    BackendFlags = ImGuiBackendFlags_None;
-    DisplaySize = ImVec2(-1.0f, -1.0f);
-    DeltaTime = 1.0f/60.0f;
-    IniSavingRate = 5.0f;
-    IniFilename = "imgui.ini";
-    LogFilename = "imgui_log.txt";
-    MouseDoubleClickTime = 0.30f;
-    MouseDoubleClickMaxDist = 6.0f;
-    for (int i = 0; i < ImGuiKey_COUNT; i++)
-        KeyMap[i] = -1;
-    KeyRepeatDelay = 0.275f;
-    KeyRepeatRate = 0.050f;
-    UserData = NULL;
-
-    Fonts = NULL;
-    FontGlobalScale = 1.0f;
-    FontDefault = NULL;
-    FontAllowUserScaling = false;
-    DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
-
-    // Miscellaneous options
-    MouseDrawCursor = false;
-#ifdef __APPLE__
-    ConfigMacOSXBehaviors = true;  // Set Mac OS X style defaults based on __APPLE__ compile time flag
-#else
-    ConfigMacOSXBehaviors = false;
-#endif
-    ConfigInputTextCursorBlink = true;
-    ConfigWindowsResizeFromEdges = true;
-    ConfigWindowsMoveFromTitleBarOnly = false;
-    ConfigWindowsMemoryCompactTimer = 60.0f;
-
-    // Platform Functions
-    BackendPlatformName = BackendRendererName = NULL;
-    BackendPlatformUserData = BackendRendererUserData = BackendLanguageUserData = NULL;
-    GetClipboardTextFn = GetClipboardTextFn_DefaultImpl;   // Platform dependent default implementations
-    SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
-    ClipboardUserData = NULL;
-    ImeSetInputScreenPosFn = ImeSetInputScreenPosFn_DefaultImpl;
-    ImeWindowHandle = NULL;
-
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    RenderDrawListsFn = NULL;
-#endif
-
-    // Input (NB: we already have memset zero the entire structure!)
-    MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
-    MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
-    MouseDragThreshold = 6.0f;
-    for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
-    for (int i = 0; i < IM_ARRAYSIZE(KeysDownDuration); i++) KeysDownDuration[i]  = KeysDownDurationPrev[i] = -1.0f;
-    for (int i = 0; i < IM_ARRAYSIZE(NavInputsDownDuration); i++) NavInputsDownDuration[i] = -1.0f;
-}
-
-// Pass in translated ASCII characters for text input.
-// - with glfw you can get those from the callback set in glfwSetCharCallback()
-// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message
-void ImGuiIO::AddInputCharacter(unsigned int c)
-{
-    InputQueueCharacters.push_back(c > 0 && c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID);
-}
-
-// UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so
-// we should save the high surrogate.
-void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c)
-{
-    if ((c & 0xFC00) == 0xD800) // High surrogate, must save
-    {
-        if (InputQueueSurrogate != 0)
-            InputQueueCharacters.push_back(0xFFFD);
-        InputQueueSurrogate = c;
-        return;
-    }
-
-    ImWchar cp = c;
-    if (InputQueueSurrogate != 0)
-    {
-        if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate
-            InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID);
-        else if (IM_UNICODE_CODEPOINT_MAX == (0xFFFF)) // Codepoint will not fit in ImWchar (extra parenthesis around 0xFFFF somehow fixes -Wunreachable-code with Clang)
-            cp = IM_UNICODE_CODEPOINT_INVALID;
-        else
-            cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000);
-        InputQueueSurrogate = 0;
-    }
-    InputQueueCharacters.push_back(cp);
-}
-
-void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
-{
-    while (*utf8_chars != 0)
-    {
-        unsigned int c = 0;
-        utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL);
-        if (c > 0)
-            InputQueueCharacters.push_back((ImWchar)c);
-    }
-}
-
-void ImGuiIO::ClearInputCharacters()
-{
-    InputQueueCharacters.resize(0);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
-//-----------------------------------------------------------------------------
-
-ImVec2 ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments)
-{
-    IM_ASSERT(num_segments > 0); // Use ImBezierClosestPointCasteljau()
-    ImVec2 p_last = p1;
-    ImVec2 p_closest;
-    float p_closest_dist2 = FLT_MAX;
-    float t_step = 1.0f / (float)num_segments;
-    for (int i_step = 1; i_step <= num_segments; i_step++)
-    {
-        ImVec2 p_current = ImBezierCalc(p1, p2, p3, p4, t_step * i_step);
-        ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
-        float dist2 = ImLengthSqr(p - p_line);
-        if (dist2 < p_closest_dist2)
-        {
-            p_closest = p_line;
-            p_closest_dist2 = dist2;
-        }
-        p_last = p_current;
-    }
-    return p_closest;
-}
-
-// Closely mimics PathBezierToCasteljau() in imgui_draw.cpp
-static void BezierClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, ImVec2& p_last, float& p_closest_dist2, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
-{
-    float dx = x4 - x1;
-    float dy = y4 - y1;
-    float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
-    float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
-    d2 = (d2 >= 0) ? d2 : -d2;
-    d3 = (d3 >= 0) ? d3 : -d3;
-    if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy))
-    {
-        ImVec2 p_current(x4, y4);
-        ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
-        float dist2 = ImLengthSqr(p - p_line);
-        if (dist2 < p_closest_dist2)
-        {
-            p_closest = p_line;
-            p_closest_dist2 = dist2;
-        }
-        p_last = p_current;
-    }
-    else if (level < 10)
-    {
-        float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f;
-        float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f;
-        float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f;
-        float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f;
-        float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f;
-        float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f;
-        BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1);
-        BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1);
-    }
-}
-
-// tess_tol is generally the same value you would find in ImGui::GetStyle().CurveTessellationTol
-// Because those ImXXX functions are lower-level than ImGui:: we cannot access this value automatically.
-ImVec2 ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol)
-{
-    IM_ASSERT(tess_tol > 0.0f);
-    ImVec2 p_last = p1;
-    ImVec2 p_closest;
-    float p_closest_dist2 = FLT_MAX;
-    BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, tess_tol, 0);
-    return p_closest;
-}
-
-ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
-{
-    ImVec2 ap = p - a;
-    ImVec2 ab_dir = b - a;
-    float dot = ap.x * ab_dir.x + ap.y * ab_dir.y;
-    if (dot < 0.0f)
-        return a;
-    float ab_len_sqr = ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y;
-    if (dot > ab_len_sqr)
-        return b;
-    return a + ab_dir * dot / ab_len_sqr;
-}
-
-bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
-{
-    bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f;
-    bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f;
-    bool b3 = ((p.x - a.x) * (c.y - a.y) - (p.y - a.y) * (c.x - a.x)) < 0.0f;
-    return ((b1 == b2) && (b2 == b3));
-}
-
-void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w)
-{
-    ImVec2 v0 = b - a;
-    ImVec2 v1 = c - a;
-    ImVec2 v2 = p - a;
-    const float denom = v0.x * v1.y - v1.x * v0.y;
-    out_v = (v2.x * v1.y - v1.x * v2.y) / denom;
-    out_w = (v0.x * v2.y - v2.x * v0.y) / denom;
-    out_u = 1.0f - out_v - out_w;
-}
-
-ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
-{
-    ImVec2 proj_ab = ImLineClosestPoint(a, b, p);
-    ImVec2 proj_bc = ImLineClosestPoint(b, c, p);
-    ImVec2 proj_ca = ImLineClosestPoint(c, a, p);
-    float dist2_ab = ImLengthSqr(p - proj_ab);
-    float dist2_bc = ImLengthSqr(p - proj_bc);
-    float dist2_ca = ImLengthSqr(p - proj_ca);
-    float m = ImMin(dist2_ab, ImMin(dist2_bc, dist2_ca));
-    if (m == dist2_ab)
-        return proj_ab;
-    if (m == dist2_bc)
-        return proj_bc;
-    return proj_ca;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
-//-----------------------------------------------------------------------------
-
-// Consider using _stricmp/_strnicmp under Windows or strcasecmp/strncasecmp. We don't actually use either ImStricmp/ImStrnicmp in the codebase any more.
-int ImStricmp(const char* str1, const char* str2)
-{
-    int d;
-    while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; }
-    return d;
-}
-
-int ImStrnicmp(const char* str1, const char* str2, size_t count)
-{
-    int d = 0;
-    while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
-    return d;
-}
-
-void ImStrncpy(char* dst, const char* src, size_t count)
-{
-    if (count < 1)
-        return;
-    if (count > 1)
-        strncpy(dst, src, count - 1);
-    dst[count - 1] = 0;
-}
-
-char* ImStrdup(const char* str)
-{
-    size_t len = strlen(str);
-    void* buf = IM_ALLOC(len + 1);
-    return (char*)memcpy(buf, (const void*)str, len + 1);
-}
-
-char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
-{
-    size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1;
-    size_t src_size = strlen(src) + 1;
-    if (dst_buf_size < src_size)
-    {
-        IM_FREE(dst);
-        dst = (char*)IM_ALLOC(src_size);
-        if (p_dst_size)
-            *p_dst_size = src_size;
-    }
-    return (char*)memcpy(dst, (const void*)src, src_size);
-}
-
-const char* ImStrchrRange(const char* str, const char* str_end, char c)
-{
-    const char* p = (const char*)memchr(str, (int)c, str_end - str);
-    return p;
-}
-
-int ImStrlenW(const ImWchar* str)
-{
-    //return (int)wcslen((const wchar_t*)str);  // FIXME-OPT: Could use this when wchar_t are 16-bit
-    int n = 0;
-    while (*str++) n++;
-    return n;
-}
-
-// Find end-of-line. Return pointer will point to either first \n, either str_end.
-const char* ImStreolRange(const char* str, const char* str_end)
-{
-    const char* p = (const char*)memchr(str, '\n', str_end - str);
-    return p ? p : str_end;
-}
-
-const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin) // find beginning-of-line
-{
-    while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n')
-        buf_mid_line--;
-    return buf_mid_line;
-}
-
-const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end)
-{
-    if (!needle_end)
-        needle_end = needle + strlen(needle);
-
-    const char un0 = (char)toupper(*needle);
-    while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
-    {
-        if (toupper(*haystack) == un0)
-        {
-            const char* b = needle + 1;
-            for (const char* a = haystack + 1; b < needle_end; a++, b++)
-                if (toupper(*a) != toupper(*b))
-                    break;
-            if (b == needle_end)
-                return haystack;
-        }
-        haystack++;
-    }
-    return NULL;
-}
-
-// Trim str by offsetting contents when there's leading data + writing a \0 at the trailing position. We use this in situation where the cost is negligible.
-void ImStrTrimBlanks(char* buf)
-{
-    char* p = buf;
-    while (p[0] == ' ' || p[0] == '\t')     // Leading blanks
-        p++;
-    char* p_start = p;
-    while (*p != 0)                         // Find end of string
-        p++;
-    while (p > p_start && (p[-1] == ' ' || p[-1] == '\t'))  // Trailing blanks
-        p--;
-    if (p_start != buf)                     // Copy memory if we had leading blanks
-        memmove(buf, p_start, p - p_start);
-    buf[p - p_start] = 0;                   // Zero terminate
-}
-
-const char* ImStrSkipBlank(const char* str)
-{
-    while (str[0] == ' ' || str[0] == '\t')
-        str++;
-    return str;
-}
-
-// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
-// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
-// B) When buf==NULL vsnprintf() will return the output size.
-#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
-
-// We support stb_sprintf which is much faster (see: https://github.com/nothings/stb/blob/master/stb_sprintf.h)
-// You may set IMGUI_USE_STB_SPRINTF to use our default wrapper, or set IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
-// and setup the wrapper yourself. (FIXME-OPT: Some of our high-level operations such as ImGuiTextBuffer::appendfv() are
-// designed using two-passes worst case, which probably could be improved using the stbsp_vsprintfcb() function.)
-#ifdef IMGUI_USE_STB_SPRINTF
-#define STB_SPRINTF_IMPLEMENTATION
-#include "stb_sprintf.h"
-#endif
-
-#if defined(_MSC_VER) && !defined(vsnprintf)
-#define vsnprintf _vsnprintf
-#endif
-
-int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-#ifdef IMGUI_USE_STB_SPRINTF
-    int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
-#else
-    int w = vsnprintf(buf, buf_size, fmt, args);
-#endif
-    va_end(args);
-    if (buf == NULL)
-        return w;
-    if (w == -1 || w >= (int)buf_size)
-        w = (int)buf_size - 1;
-    buf[w] = 0;
-    return w;
-}
-
-int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args)
-{
-#ifdef IMGUI_USE_STB_SPRINTF
-    int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
-#else
-    int w = vsnprintf(buf, buf_size, fmt, args);
-#endif
-    if (buf == NULL)
-        return w;
-    if (w == -1 || w >= (int)buf_size)
-        w = (int)buf_size - 1;
-    buf[w] = 0;
-    return w;
-}
-#endif // #ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
-
-// CRC32 needs a 1KB lookup table (not cache friendly)
-// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily:
-// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe.
-static const ImU32 GCrc32LookupTable[256] =
-{
-    0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
-    0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
-    0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
-    0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
-    0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
-    0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
-    0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
-    0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
-    0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
-    0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
-    0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
-    0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
-    0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
-    0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
-    0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
-    0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D,
-};
-
-// Known size hash
-// It is ok to call ImHashData on a string with known length but the ### operator won't be supported.
-// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
-ImU32 ImHashData(const void* data_p, size_t data_size, ImU32 seed)
-{
-    ImU32 crc = ~seed;
-    const unsigned char* data = (const unsigned char*)data_p;
-    const ImU32* crc32_lut = GCrc32LookupTable;
-    while (data_size-- != 0)
-        crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++];
-    return ~crc;
-}
-
-// Zero-terminated string hash, with support for ### to reset back to seed value
-// We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed.
-// Because this syntax is rarely used we are optimizing for the common case.
-// - If we reach ### in the string we discard the hash so far and reset to the seed.
-// - We don't do 'current += 2; continue;' after handling ### to keep the code smaller/faster (measured ~10% diff in Debug build)
-// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
-ImU32 ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
-{
-    seed = ~seed;
-    ImU32 crc = seed;
-    const unsigned char* data = (const unsigned char*)data_p;
-    const ImU32* crc32_lut = GCrc32LookupTable;
-    if (data_size != 0)
-    {
-        while (data_size-- != 0)
-        {
-            unsigned char c = *data++;
-            if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#')
-                crc = seed;
-            crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
-        }
-    }
-    else
-    {
-        while (unsigned char c = *data++)
-        {
-            if (c == '#' && data[0] == '#' && data[1] == '#')
-                crc = seed;
-            crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
-        }
-    }
-    return ~crc;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPERS/UTILITIES (File functions)
-//-----------------------------------------------------------------------------
-
-// Default file functions
-#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
-
-ImFileHandle ImFileOpen(const char* filename, const char* mode)
-{
-#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(__CYGWIN__) && !defined(__GNUC__)
-    // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames.
-    // Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
-    const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
-    const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
-    ImVector<ImWchar> buf;
-    buf.resize(filename_wsize + mode_wsize);
-    ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize);
-    ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize);
-    return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]);
-#else
-    return fopen(filename, mode);
-#endif
-}
-
-// We should in theory be using fseeko()/ftello() with off_t and _fseeki64()/_ftelli64() with __int64, waiting for the PR that does that in a very portable pre-C++11 zero-warnings way.
-bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
-ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return ((off = ftell(f)) != -1 && !fseek(f, 0, SEEK_END) && (sz = ftell(f)) != -1 && !fseek(f, off, SEEK_SET)) ? (ImU64)sz : (ImU64)-1; }
-ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)           { return fread(data, (size_t)sz, (size_t)count, f); }
-ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandle f)    { return fwrite(data, (size_t)sz, (size_t)count, f); }
-#endif // #ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
-
-// Helper: Load file content into memory
-// Memory allocated with IM_ALLOC(), must be freed by user using IM_FREE() == ImGui::MemFree()
-// This can't really be used with "rt" because fseek size won't match read size.
-void*   ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size, int padding_bytes)
-{
-    IM_ASSERT(filename && mode);
-    if (out_file_size)
-        *out_file_size = 0;
-
-    ImFileHandle f;
-    if ((f = ImFileOpen(filename, mode)) == NULL)
-        return NULL;
-
-    size_t file_size = (size_t)ImFileGetSize(f);
-    if (file_size == (size_t)-1)
-    {
-        ImFileClose(f);
-        return NULL;
-    }
-
-    void* file_data = IM_ALLOC(file_size + padding_bytes);
-    if (file_data == NULL)
-    {
-        ImFileClose(f);
-        return NULL;
-    }
-    if (ImFileRead(file_data, 1, file_size, f) != file_size)
-    {
-        ImFileClose(f);
-        IM_FREE(file_data);
-        return NULL;
-    }
-    if (padding_bytes > 0)
-        memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes);
-
-    ImFileClose(f);
-    if (out_file_size)
-        *out_file_size = file_size;
-
-    return file_data;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
-//-----------------------------------------------------------------------------
-
-// Convert UTF-8 to 32-bit character, process single character input.
-// Based on stb_from_utf8() from github.com/nothings/stb/
-// We handle UTF-8 decoding error by skipping forward.
-int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end)
-{
-    unsigned int c = (unsigned int)-1;
-    const unsigned char* str = (const unsigned char*)in_text;
-    if (!(*str & 0x80))
-    {
-        c = (unsigned int)(*str++);
-        *out_char = c;
-        return 1;
-    }
-    if ((*str & 0xe0) == 0xc0)
-    {
-        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
-        if (in_text_end && in_text_end - (const char*)str < 2) return 1;
-        if (*str < 0xc2) return 2;
-        c = (unsigned int)((*str++ & 0x1f) << 6);
-        if ((*str & 0xc0) != 0x80) return 2;
-        c += (*str++ & 0x3f);
-        *out_char = c;
-        return 2;
-    }
-    if ((*str & 0xf0) == 0xe0)
-    {
-        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
-        if (in_text_end && in_text_end - (const char*)str < 3) return 1;
-        if (*str == 0xe0 && (str[1] < 0xa0 || str[1] > 0xbf)) return 3;
-        if (*str == 0xed && str[1] > 0x9f) return 3; // str[1] < 0x80 is checked below
-        c = (unsigned int)((*str++ & 0x0f) << 12);
-        if ((*str & 0xc0) != 0x80) return 3;
-        c += (unsigned int)((*str++ & 0x3f) << 6);
-        if ((*str & 0xc0) != 0x80) return 3;
-        c += (*str++ & 0x3f);
-        *out_char = c;
-        return 3;
-    }
-    if ((*str & 0xf8) == 0xf0)
-    {
-        *out_char = IM_UNICODE_CODEPOINT_INVALID; // will be invalid but not end of string
-        if (in_text_end && in_text_end - (const char*)str < 4) return 1;
-        if (*str > 0xf4) return 4;
-        if (*str == 0xf0 && (str[1] < 0x90 || str[1] > 0xbf)) return 4;
-        if (*str == 0xf4 && str[1] > 0x8f) return 4; // str[1] < 0x80 is checked below
-        c = (unsigned int)((*str++ & 0x07) << 18);
-        if ((*str & 0xc0) != 0x80) return 4;
-        c += (unsigned int)((*str++ & 0x3f) << 12);
-        if ((*str & 0xc0) != 0x80) return 4;
-        c += (unsigned int)((*str++ & 0x3f) << 6);
-        if ((*str & 0xc0) != 0x80) return 4;
-        c += (*str++ & 0x3f);
-        // utf-8 encodings of values used in surrogate pairs are invalid
-        if ((c & 0xFFFFF800) == 0xD800) return 4;
-        // If codepoint does not fit in ImWchar, use replacement character U+FFFD instead
-        if (c > IM_UNICODE_CODEPOINT_MAX) c = IM_UNICODE_CODEPOINT_INVALID;
-        *out_char = c;
-        return 4;
-    }
-    *out_char = 0;
-    return 0;
-}
-
-int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_text_remaining)
-{
-    ImWchar* buf_out = buf;
-    ImWchar* buf_end = buf + buf_size;
-    while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text)
-    {
-        unsigned int c;
-        in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
-        if (c == 0)
-            break;
-        *buf_out++ = (ImWchar)c;
-    }
-    *buf_out = 0;
-    if (in_text_remaining)
-        *in_text_remaining = in_text;
-    return (int)(buf_out - buf);
-}
-
-int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
-{
-    int char_count = 0;
-    while ((!in_text_end || in_text < in_text_end) && *in_text)
-    {
-        unsigned int c;
-        in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
-        if (c == 0)
-            break;
-        char_count++;
-    }
-    return char_count;
-}
-
-// Based on stb_to_utf8() from github.com/nothings/stb/
-static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c)
-{
-    if (c < 0x80)
-    {
-        buf[0] = (char)c;
-        return 1;
-    }
-    if (c < 0x800)
-    {
-        if (buf_size < 2) return 0;
-        buf[0] = (char)(0xc0 + (c >> 6));
-        buf[1] = (char)(0x80 + (c & 0x3f));
-        return 2;
-    }
-    if (c < 0x10000)
-    {
-        if (buf_size < 3) return 0;
-        buf[0] = (char)(0xe0 + (c >> 12));
-        buf[1] = (char)(0x80 + ((c>> 6) & 0x3f));
-        buf[2] = (char)(0x80 + ((c ) & 0x3f));
-        return 3;
-    }
-    if (c <= 0x10FFFF)
-    {
-        if (buf_size < 4) return 0;
-        buf[0] = (char)(0xf0 + (c >> 18));
-        buf[1] = (char)(0x80 + ((c >> 12) & 0x3f));
-        buf[2] = (char)(0x80 + ((c >> 6) & 0x3f));
-        buf[3] = (char)(0x80 + ((c ) & 0x3f));
-        return 4;
-    }
-    // Invalid code point, the max unicode is 0x10FFFF
-    return 0;
-}
-
-// Not optimal but we very rarely use this function.
-int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end)
-{
-    unsigned int dummy = 0;
-    return ImTextCharFromUtf8(&dummy, in_text, in_text_end);
-}
-
-static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
-{
-    if (c < 0x80) return 1;
-    if (c < 0x800) return 2;
-    if (c < 0x10000) return 3;
-    if (c <= 0x10FFFF) return 4;
-    return 3;
-}
-
-int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end)
-{
-    char* buf_out = buf;
-    const char* buf_end = buf + buf_size;
-    while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text)
-    {
-        unsigned int c = (unsigned int)(*in_text++);
-        if (c < 0x80)
-            *buf_out++ = (char)c;
-        else
-            buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end-buf_out-1), c);
-    }
-    *buf_out = 0;
-    return (int)(buf_out - buf);
-}
-
-int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end)
-{
-    int bytes_count = 0;
-    while ((!in_text_end || in_text < in_text_end) && *in_text)
-    {
-        unsigned int c = (unsigned int)(*in_text++);
-        if (c < 0x80)
-            bytes_count++;
-        else
-            bytes_count += ImTextCountUtf8BytesFromChar(c);
-    }
-    return bytes_count;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MISC HELPERS/UTILITIES (Color functions)
-// Note: The Convert functions are early design which are not consistent with other API.
-//-----------------------------------------------------------------------------
-
-IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
-{
-    float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f;
-    int r = ImLerp((int)(col_a >> IM_COL32_R_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_R_SHIFT) & 0xFF, t);
-    int g = ImLerp((int)(col_a >> IM_COL32_G_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_G_SHIFT) & 0xFF, t);
-    int b = ImLerp((int)(col_a >> IM_COL32_B_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_B_SHIFT) & 0xFF, t);
-    return IM_COL32(r, g, b, 0xFF);
-}
-
-ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
-{
-    float s = 1.0f/255.0f;
-    return ImVec4(
-        ((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
-        ((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
-        ((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
-        ((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
-}
-
-ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
-{
-    ImU32 out;
-    out  = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
-    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
-    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
-    out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
-    return out;
-}
-
-// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
-// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
-void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
-{
-    float K = 0.f;
-    if (g < b)
-    {
-        ImSwap(g, b);
-        K = -1.f;
-    }
-    if (r < g)
-    {
-        ImSwap(r, g);
-        K = -2.f / 6.f - K;
-    }
-
-    const float chroma = r - (g < b ? g : b);
-    out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f));
-    out_s = chroma / (r + 1e-20f);
-    out_v = r;
-}
-
-// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593
-// also http://en.wikipedia.org/wiki/HSL_and_HSV
-void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
-{
-    if (s == 0.0f)
-    {
-        // gray
-        out_r = out_g = out_b = v;
-        return;
-    }
-
-    h = ImFmod(h, 1.0f) / (60.0f/360.0f);
-    int   i = (int)h;
-    float f = h - (float)i;
-    float p = v * (1.0f - s);
-    float q = v * (1.0f - s * f);
-    float t = v * (1.0f - s * (1.0f - f));
-
-    switch (i)
-    {
-    case 0: out_r = v; out_g = t; out_b = p; break;
-    case 1: out_r = q; out_g = v; out_b = p; break;
-    case 2: out_r = p; out_g = v; out_b = t; break;
-    case 3: out_r = p; out_g = q; out_b = v; break;
-    case 4: out_r = t; out_g = p; out_b = v; break;
-    case 5: default: out_r = v; out_g = p; out_b = q; break;
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImGuiStorage
-// Helper: Key->value storage
-//-----------------------------------------------------------------------------
-
-// std::lower_bound but without the bullshit
-static ImGuiStorage::ImGuiStoragePair* LowerBound(ImVector<ImGuiStorage::ImGuiStoragePair>& data, ImGuiID key)
-{
-    ImGuiStorage::ImGuiStoragePair* first = data.Data;
-    ImGuiStorage::ImGuiStoragePair* last = data.Data + data.Size;
-    size_t count = (size_t)(last - first);
-    while (count > 0)
-    {
-        size_t count2 = count >> 1;
-        ImGuiStorage::ImGuiStoragePair* mid = first + count2;
-        if (mid->key < key)
-        {
-            first = ++mid;
-            count -= count2 + 1;
-        }
-        else
-        {
-            count = count2;
-        }
-    }
-    return first;
-}
-
-// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
-void ImGuiStorage::BuildSortByKey()
-{
-    struct StaticFunc
-    {
-        static int IMGUI_CDECL PairCompareByID(const void* lhs, const void* rhs)
-        {
-            // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
-            if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1;
-            if (((const ImGuiStoragePair*)lhs)->key < ((const ImGuiStoragePair*)rhs)->key) return -1;
-            return 0;
-        }
-    };
-    if (Data.Size > 1)
-        ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairCompareByID);
-}
-
-int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
-{
-    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
-    if (it == Data.end() || it->key != key)
-        return default_val;
-    return it->val_i;
-}
-
-bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const
-{
-    return GetInt(key, default_val ? 1 : 0) != 0;
-}
-
-float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const
-{
-    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
-    if (it == Data.end() || it->key != key)
-        return default_val;
-    return it->val_f;
-}
-
-void* ImGuiStorage::GetVoidPtr(ImGuiID key) const
-{
-    ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
-    if (it == Data.end() || it->key != key)
-        return NULL;
-    return it->val_p;
-}
-
-// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
-int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-        it = Data.insert(it, ImGuiStoragePair(key, default_val));
-    return &it->val_i;
-}
-
-bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val)
-{
-    return (bool*)GetIntRef(key, default_val ? 1 : 0);
-}
-
-float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-        it = Data.insert(it, ImGuiStoragePair(key, default_val));
-    return &it->val_f;
-}
-
-void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-        it = Data.insert(it, ImGuiStoragePair(key, default_val));
-    return &it->val_p;
-}
-
-// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame)
-void ImGuiStorage::SetInt(ImGuiID key, int val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-    {
-        Data.insert(it, ImGuiStoragePair(key, val));
-        return;
-    }
-    it->val_i = val;
-}
-
-void ImGuiStorage::SetBool(ImGuiID key, bool val)
-{
-    SetInt(key, val ? 1 : 0);
-}
-
-void ImGuiStorage::SetFloat(ImGuiID key, float val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-    {
-        Data.insert(it, ImGuiStoragePair(key, val));
-        return;
-    }
-    it->val_f = val;
-}
-
-void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val)
-{
-    ImGuiStoragePair* it = LowerBound(Data, key);
-    if (it == Data.end() || it->key != key)
-    {
-        Data.insert(it, ImGuiStoragePair(key, val));
-        return;
-    }
-    it->val_p = val;
-}
-
-void ImGuiStorage::SetAllInt(int v)
-{
-    for (int i = 0; i < Data.Size; i++)
-        Data[i].val_i = v;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImGuiTextFilter
-//-----------------------------------------------------------------------------
-
-// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
-ImGuiTextFilter::ImGuiTextFilter(const char* default_filter)
-{
-    if (default_filter)
-    {
-        ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf));
-        Build();
-    }
-    else
-    {
-        InputBuf[0] = 0;
-        CountGrep = 0;
-    }
-}
-
-bool ImGuiTextFilter::Draw(const char* label, float width)
-{
-    if (width != 0.0f)
-        ImGui::SetNextItemWidth(width);
-    bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
-    if (value_changed)
-        Build();
-    return value_changed;
-}
-
-void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRange>* out) const
-{
-    out->resize(0);
-    const char* wb = b;
-    const char* we = wb;
-    while (we < e)
-    {
-        if (*we == separator)
-        {
-            out->push_back(ImGuiTextRange(wb, we));
-            wb = we + 1;
-        }
-        we++;
-    }
-    if (wb != we)
-        out->push_back(ImGuiTextRange(wb, we));
-}
-
-void ImGuiTextFilter::Build()
-{
-    Filters.resize(0);
-    ImGuiTextRange input_range(InputBuf, InputBuf+strlen(InputBuf));
-    input_range.split(',', &Filters);
-
-    CountGrep = 0;
-    for (int i = 0; i != Filters.Size; i++)
-    {
-        ImGuiTextRange& f = Filters[i];
-        while (f.b < f.e && ImCharIsBlankA(f.b[0]))
-            f.b++;
-        while (f.e > f.b && ImCharIsBlankA(f.e[-1]))
-            f.e--;
-        if (f.empty())
-            continue;
-        if (Filters[i].b[0] != '-')
-            CountGrep += 1;
-    }
-}
-
-bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
-{
-    if (Filters.empty())
-        return true;
-
-    if (text == NULL)
-        text = "";
-
-    for (int i = 0; i != Filters.Size; i++)
-    {
-        const ImGuiTextRange& f = Filters[i];
-        if (f.empty())
-            continue;
-        if (f.b[0] == '-')
-        {
-            // Subtract
-            if (ImStristr(text, text_end, f.b + 1, f.e) != NULL)
-                return false;
-        }
-        else
-        {
-            // Grep
-            if (ImStristr(text, text_end, f.b, f.e) != NULL)
-                return true;
-        }
-    }
-
-    // Implicit * grep
-    if (CountGrep == 0)
-        return true;
-
-    return false;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImGuiTextBuffer
-//-----------------------------------------------------------------------------
-
-// On some platform vsnprintf() takes va_list by reference and modifies it.
-// va_copy is the 'correct' way to copy a va_list but Visual Studio prior to 2013 doesn't have it.
-#ifndef va_copy
-#if defined(__GNUC__) || defined(__clang__)
-#define va_copy(dest, src) __builtin_va_copy(dest, src)
-#else
-#define va_copy(dest, src) (dest = src)
-#endif
-#endif
-
-char ImGuiTextBuffer::EmptyString[1] = { 0 };
-
-void ImGuiTextBuffer::append(const char* str, const char* str_end)
-{
-    int len = str_end ? (int)(str_end - str) : (int)strlen(str);
-
-    // Add zero-terminator the first time
-    const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
-    const int needed_sz = write_off + len;
-    if (write_off + len >= Buf.Capacity)
-    {
-        int new_capacity = Buf.Capacity * 2;
-        Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
-    }
-
-    Buf.resize(needed_sz);
-    memcpy(&Buf[write_off - 1], str, (size_t)len);
-    Buf[write_off - 1 + len] = 0;
-}
-
-void ImGuiTextBuffer::appendf(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    appendfv(fmt, args);
-    va_end(args);
-}
-
-// Helper: Text buffer for logging/accumulating text
-void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
-{
-    va_list args_copy;
-    va_copy(args_copy, args);
-
-    int len = ImFormatStringV(NULL, 0, fmt, args);         // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
-    if (len <= 0)
-    {
-        va_end(args_copy);
-        return;
-    }
-
-    // Add zero-terminator the first time
-    const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
-    const int needed_sz = write_off + len;
-    if (write_off + len >= Buf.Capacity)
-    {
-        int new_capacity = Buf.Capacity * 2;
-        Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
-    }
-
-    Buf.resize(needed_sz);
-    ImFormatStringV(&Buf[write_off - 1], (size_t)len + 1, fmt, args_copy);
-    va_end(args_copy);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImGuiListClipper
-// This is currently not as flexible/powerful as it should be and really confusing/spaghetti, mostly because we changed
-// the API mid-way through development and support two ways to using the clipper, needs some rework (see TODO)
-//-----------------------------------------------------------------------------
-
-// FIXME-TABLE: This prevents us from using ImGuiListClipper _inside_ a table cell.
-// The problem we have is that without a Begin/End scheme for rows using the clipper is ambiguous.
-static bool GetSkipItemForListClipping()
-{
-    ImGuiContext& g = *GImGui;
-    return (g.CurrentTable ? g.CurrentTable->HostSkipItems : g.CurrentWindow->SkipItems);
-}
-
-// Helper to calculate coarse clipping of large list of evenly sized items.
-// NB: Prefer using the ImGuiListClipper higher-level helper if you can! Read comments and instructions there on how those use this sort of pattern.
-// NB: 'items_count' is only used to clamp the result, if you don't know your count you can use INT_MAX
-void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.LogEnabled)
-    {
-        // If logging is active, do not perform any clipping
-        *out_items_display_start = 0;
-        *out_items_display_end = items_count;
-        return;
-    }
-    if (GetSkipItemForListClipping())
-    {
-        *out_items_display_start = *out_items_display_end = 0;
-        return;
-    }
-
-    // We create the union of the ClipRect and the NavScoringRect which at worst should be 1 page away from ClipRect
-    ImRect unclipped_rect = window->ClipRect;
-    if (g.NavMoveRequest)
-        unclipped_rect.Add(g.NavScoringRectScreen);
-
-    const ImVec2 pos = window->DC.CursorPos;
-    int start = (int)((unclipped_rect.Min.y - pos.y) / items_height);
-    int end = (int)((unclipped_rect.Max.y - pos.y) / items_height);
-
-    // When performing a navigation request, ensure we have one item extra in the direction we are moving to
-    if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Up)
-        start--;
-    if (g.NavMoveRequest && g.NavMoveClipDir == ImGuiDir_Down)
-        end++;
-
-    start = ImClamp(start, 0, items_count);
-    end = ImClamp(end + 1, start, items_count);
-    *out_items_display_start = start;
-    *out_items_display_end = end;
-}
-
-static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height)
-{
-    // Set cursor position and a few other things so that SetScrollHereY() and Columns() can work when seeking cursor.
-    // FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue.
-    // The clipper should probably have a 4th step to display the last item in a regular manner.
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    float off_y = pos_y - window->DC.CursorPos.y;
-    window->DC.CursorPos.y = pos_y;
-    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, pos_y);
-    window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height;  // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage.
-    window->DC.PrevLineSize.y = (line_height - g.Style.ItemSpacing.y);      // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list.
-    if (ImGuiColumns* columns = window->DC.CurrentColumns)
-        columns->LineMinY = window->DC.CursorPos.y;                         // Setting this so that cell Y position are set properly // FIXME-TABLE
-    if (ImGuiTable* table = g.CurrentTable)
-    {
-        if (table->IsInsideRow)
-            ImGui::TableEndRow(table);
-        table->RowPosY2 = window->DC.CursorPos.y;
-        table->RowBgColorCounter += (int)((off_y / line_height) + 0.5f);
-    }
-}
-
-// Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1
-// Use case B: Begin() called from constructor with items_height>0
-// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style.
-void ImGuiListClipper::Begin(int count, float items_height)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    if (ImGuiTable* table = g.CurrentTable)
-        if (table->IsInsideRow)
-            ImGui::TableEndRow(table);
-
-    StartPosY = window->DC.CursorPos.y;
-    ItemsHeight = items_height;
-    ItemsCount = count;
-    StepNo = 0;
-    DisplayEnd = DisplayStart = -1;
-    if (ItemsHeight > 0.0f)
-    {
-        ImGui::CalcListClipping(ItemsCount, ItemsHeight, &DisplayStart, &DisplayEnd); // calculate how many to clip/display
-        if (DisplayStart > 0)
-            SetCursorPosYAndSetupDummyPrevLine(StartPosY + DisplayStart * ItemsHeight, ItemsHeight); // advance cursor
-        StepNo = 2;
-    }
-}
-
-void ImGuiListClipper::End()
-{
-    if (ItemsCount < 0)
-        return;
-    // In theory here we should assert that ImGui::GetCursorPosY() == StartPosY + DisplayEnd * ItemsHeight, but it feels saner to just seek at the end and not assert/crash the user.
-    if (ItemsCount < INT_MAX)
-        SetCursorPosYAndSetupDummyPrevLine(StartPosY + ItemsCount * ItemsHeight, ItemsHeight); // advance cursor
-    ItemsCount = -1;
-    StepNo = 3;
-}
-
-bool ImGuiListClipper::Step()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    ImGuiTable* table = g.CurrentTable;
-    if (table && table->IsInsideRow)
-        ImGui::TableEndRow(table);
-
-    if (ItemsCount == 0 || GetSkipItemForListClipping())
-    {
-        ItemsCount = -1;
-        return false;
-    }
-    if (StepNo == 0) // Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height.
-    {
-        DisplayStart = 0;
-        DisplayEnd = 1;
-        StartPosY = window->DC.CursorPos.y;
-        StepNo = 1;
-        return true;
-    }
-    if (StepNo == 1) // Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
-    {
-        if (ItemsCount == 1) { ItemsCount = -1; return false; }
-
-        float items_height;
-        if (table)
-        {
-            const float pos_y1 = table->RowPosY1;   // Using this instead of StartPosY to handle clipper straddling the frozen row
-            const float pos_y2 = table->RowPosY2;   // Using this instead of CursorPos.y to take account of tallest cell.
-            items_height = pos_y2 - pos_y1;
-            window->DC.CursorPos.y = pos_y2;
-            IM_ASSERT(items_height > 0.0f);   // If this triggers, it means Item 0 hasn't moved the cursor vertically
-        }
-        else
-        {
-            items_height = window->DC.CursorPos.y - StartPosY;
-            IM_ASSERT(items_height > 0.0f);         // If this triggers, it means Item 0 hasn't moved the cursor vertically
-        }
-        Begin(ItemsCount - 1, items_height);
-        DisplayStart++;
-        DisplayEnd++;
-        StepNo = 3;
-        return true;
-    }
-    if (StepNo == 2) // Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user still call Step(). Does nothing and switch to Step 3.
-    {
-        IM_ASSERT(DisplayStart >= 0 && DisplayEnd >= 0);
-        StepNo = 3;
-        return true;
-    }
-    if (StepNo == 3) // Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop.
-        End();
-    return false;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] STYLING
-//-----------------------------------------------------------------------------
-
-ImGuiStyle& ImGui::GetStyle()
-{
-    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
-    return GImGui->Style;
-}
-
-ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
-{
-    ImGuiStyle& style = GImGui->Style;
-    ImVec4 c = style.Colors[idx];
-    c.w *= style.Alpha * alpha_mul;
-    return ColorConvertFloat4ToU32(c);
-}
-
-ImU32 ImGui::GetColorU32(const ImVec4& col)
-{
-    ImGuiStyle& style = GImGui->Style;
-    ImVec4 c = col;
-    c.w *= style.Alpha;
-    return ColorConvertFloat4ToU32(c);
-}
-
-const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
-{
-    ImGuiStyle& style = GImGui->Style;
-    return style.Colors[idx];
-}
-
-ImU32 ImGui::GetColorU32(ImU32 col)
-{
-    ImGuiStyle& style = GImGui->Style;
-    if (style.Alpha >= 1.0f)
-        return col;
-    ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
-    a = (ImU32)(a * style.Alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
-    return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
-}
-
-// FIXME: This may incur a round-trip (if the end user got their data from a float4) but eventually we aim to store the in-flight colors as ImU32
-void ImGui::PushStyleColor(ImGuiCol idx, ImU32 col)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiColorMod backup;
-    backup.Col = idx;
-    backup.BackupValue = g.Style.Colors[idx];
-    g.ColorModifiers.push_back(backup);
-    g.Style.Colors[idx] = ColorConvertU32ToFloat4(col);
-}
-
-void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiColorMod backup;
-    backup.Col = idx;
-    backup.BackupValue = g.Style.Colors[idx];
-    g.ColorModifiers.push_back(backup);
-    g.Style.Colors[idx] = col;
-}
-
-void ImGui::PopStyleColor(int count)
-{
-    ImGuiContext& g = *GImGui;
-    while (count > 0)
-    {
-        ImGuiColorMod& backup = g.ColorModifiers.back();
-        g.Style.Colors[backup.Col] = backup.BackupValue;
-        g.ColorModifiers.pop_back();
-        count--;
-    }
-}
-
-struct ImGuiStyleVarInfo
-{
-    ImGuiDataType   Type;
-    ImU32           Count;
-    ImU32           Offset;
-    void*           GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
-};
-
-static const ImGuiStyleVarInfo GStyleVarInfo[] =
-{
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) },               // ImGuiStyleVar_Alpha
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) },       // ImGuiStyleVar_WindowPadding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) },      // ImGuiStyleVar_WindowRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) },    // ImGuiStyleVar_WindowBorderSize
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) },       // ImGuiStyleVar_WindowMinSize
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) },    // ImGuiStyleVar_WindowTitleAlign
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) },       // ImGuiStyleVar_ChildRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) },     // ImGuiStyleVar_ChildBorderSize
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) },       // ImGuiStyleVar_PopupRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) },     // ImGuiStyleVar_PopupBorderSize
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) },        // ImGuiStyleVar_FramePadding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) },       // ImGuiStyleVar_FrameRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) },     // ImGuiStyleVar_FrameBorderSize
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) },         // ImGuiStyleVar_ItemSpacing
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) },    // ImGuiStyleVar_ItemInnerSpacing
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) },       // ImGuiStyleVar_IndentSpacing
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, CellPadding) },         // ImGuiStyleVar_CellPadding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) },       // ImGuiStyleVar_ScrollbarSize
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) },   // ImGuiStyleVar_ScrollbarRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) },         // ImGuiStyleVar_GrabMinSize
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) },        // ImGuiStyleVar_GrabRounding
-    { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) },         // ImGuiStyleVar_TabRounding
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) },     // ImGuiStyleVar_ButtonTextAlign
-    { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
-};
-
-static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
-{
-    IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT);
-    IM_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT);
-    return &GStyleVarInfo[idx];
-}
-
-void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
-{
-    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
-    if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1)
-    {
-        ImGuiContext& g = *GImGui;
-        float* pvar = (float*)var_info->GetVarPtr(&g.Style);
-        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
-        *pvar = val;
-        return;
-    }
-    IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");
-}
-
-void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
-{
-    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
-    if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)
-    {
-        ImGuiContext& g = *GImGui;
-        ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
-        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
-        *pvar = val;
-        return;
-    }
-    IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");
-}
-
-void ImGui::PopStyleVar(int count)
-{
-    ImGuiContext& g = *GImGui;
-    while (count > 0)
-    {
-        // We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it.
-        ImGuiStyleMod& backup = g.StyleModifiers.back();
-        const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
-        void* data = info->GetVarPtr(&g.Style);
-        if (info->Type == ImGuiDataType_Float && info->Count == 1)      { ((float*)data)[0] = backup.BackupFloat[0]; }
-        else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; }
-        g.StyleModifiers.pop_back();
-        count--;
-    }
-}
-
-const char* ImGui::GetStyleColorName(ImGuiCol idx)
-{
-    // Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1";
-    switch (idx)
-    {
-    case ImGuiCol_Text: return "Text";
-    case ImGuiCol_TextDisabled: return "TextDisabled";
-    case ImGuiCol_WindowBg: return "WindowBg";
-    case ImGuiCol_ChildBg: return "ChildBg";
-    case ImGuiCol_PopupBg: return "PopupBg";
-    case ImGuiCol_Border: return "Border";
-    case ImGuiCol_BorderShadow: return "BorderShadow";
-    case ImGuiCol_FrameBg: return "FrameBg";
-    case ImGuiCol_FrameBgHovered: return "FrameBgHovered";
-    case ImGuiCol_FrameBgActive: return "FrameBgActive";
-    case ImGuiCol_TitleBg: return "TitleBg";
-    case ImGuiCol_TitleBgActive: return "TitleBgActive";
-    case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
-    case ImGuiCol_MenuBarBg: return "MenuBarBg";
-    case ImGuiCol_ScrollbarBg: return "ScrollbarBg";
-    case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab";
-    case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered";
-    case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive";
-    case ImGuiCol_CheckMark: return "CheckMark";
-    case ImGuiCol_SliderGrab: return "SliderGrab";
-    case ImGuiCol_SliderGrabActive: return "SliderGrabActive";
-    case ImGuiCol_Button: return "Button";
-    case ImGuiCol_ButtonHovered: return "ButtonHovered";
-    case ImGuiCol_ButtonActive: return "ButtonActive";
-    case ImGuiCol_Header: return "Header";
-    case ImGuiCol_HeaderHovered: return "HeaderHovered";
-    case ImGuiCol_HeaderActive: return "HeaderActive";
-    case ImGuiCol_Separator: return "Separator";
-    case ImGuiCol_SeparatorHovered: return "SeparatorHovered";
-    case ImGuiCol_SeparatorActive: return "SeparatorActive";
-    case ImGuiCol_ResizeGrip: return "ResizeGrip";
-    case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered";
-    case ImGuiCol_ResizeGripActive: return "ResizeGripActive";
-    case ImGuiCol_Tab: return "Tab";
-    case ImGuiCol_TabHovered: return "TabHovered";
-    case ImGuiCol_TabActive: return "TabActive";
-    case ImGuiCol_TabUnfocused: return "TabUnfocused";
-    case ImGuiCol_TabUnfocusedActive: return "TabUnfocusedActive";
-    case ImGuiCol_PlotLines: return "PlotLines";
-    case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered";
-    case ImGuiCol_PlotHistogram: return "PlotHistogram";
-    case ImGuiCol_PlotHistogramHovered: return "PlotHistogramHovered";
-    case ImGuiCol_TableHeaderBg: return "TableHeaderBg";
-    case ImGuiCol_TableBorderStrong: return "TableBorderStrong";
-    case ImGuiCol_TableBorderLight: return "TableBorderLight";
-    case ImGuiCol_TableRowBg: return "TableRowBg";
-    case ImGuiCol_TableRowBgAlt: return "TableRowBgAlt";
-    case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
-    case ImGuiCol_DragDropTarget: return "DragDropTarget";
-    case ImGuiCol_NavHighlight: return "NavHighlight";
-    case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight";
-    case ImGuiCol_NavWindowingDimBg: return "NavWindowingDimBg";
-    case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg";
-    }
-    IM_ASSERT(0);
-    return "Unknown";
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] RENDER HELPERS
-// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change,
-// we need a nicer separation between low-level functions and high-level functions relying on the ImGui context.
-// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: context.
-//-----------------------------------------------------------------------------
-
-const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end)
-{
-    const char* text_display_end = text;
-    if (!text_end)
-        text_end = (const char*)-1;
-
-    while (text_display_end < text_end && *text_display_end != '\0' && (text_display_end[0] != '#' || text_display_end[1] != '#'))
-        text_display_end++;
-    return text_display_end;
-}
-
-// Internal ImGui functions to render text
-// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
-void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    // Hide anything after a '##' string
-    const char* text_display_end;
-    if (hide_text_after_hash)
-    {
-        text_display_end = FindRenderedTextEnd(text, text_end);
-    }
-    else
-    {
-        if (!text_end)
-            text_end = text + strlen(text); // FIXME-OPT
-        text_display_end = text_end;
-    }
-
-    if (text != text_display_end)
-    {
-        window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end);
-        if (g.LogEnabled)
-            LogRenderedText(&pos, text, text_display_end);
-    }
-}
-
-void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    if (!text_end)
-        text_end = text + strlen(text); // FIXME-OPT
-
-    if (text != text_end)
-    {
-        window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width);
-        if (g.LogEnabled)
-            LogRenderedText(&pos, text, text_end);
-    }
-}
-
-// Default clip_rect uses (pos_min,pos_max)
-// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges)
-void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
-{
-    // Perform CPU side clipping for single clipped element to avoid using scissor state
-    ImVec2 pos = pos_min;
-    const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f);
-
-    const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min;
-    const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max;
-    bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y);
-    if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min
-        need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);
-
-    // Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment.
-    if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x);
-    if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y);
-
-    // Render
-    if (need_clipping)
-    {
-        ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y);
-        draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
-    }
-    else
-    {
-        draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
-    }
-}
-
-void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
-{
-    // Hide anything after a '##' string
-    const char* text_display_end = FindRenderedTextEnd(text, text_end);
-    const int text_len = (int)(text_display_end - text);
-    if (text_len == 0)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect);
-    if (g.LogEnabled)
-        LogRenderedText(&pos_min, text, text_display_end);
-}
-
-
-// Another overly complex function until we reorganize everything into a nice all-in-one helper.
-// This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define _where_ the ellipsis is, from actual clipping of text and limit of the ellipsis display.
-// This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move.
-void ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known)
-{
-    ImGuiContext& g = *GImGui;
-    if (text_end_full == NULL)
-        text_end_full = FindRenderedTextEnd(text);
-    const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f);
-
-    //draw_list->AddLine(ImVec2(pos_max.x, pos_min.y - 4), ImVec2(pos_max.x, pos_max.y + 4), IM_COL32(0, 0, 255, 255));
-    //draw_list->AddLine(ImVec2(ellipsis_max_x, pos_min.y-2), ImVec2(ellipsis_max_x, pos_max.y+2), IM_COL32(0, 255, 0, 255));
-    //draw_list->AddLine(ImVec2(clip_max_x, pos_min.y), ImVec2(clip_max_x, pos_max.y), IM_COL32(255, 0, 0, 255));
-    // FIXME: We could technically remove (last_glyph->AdvanceX - last_glyph->X1) from text_size.x here and save a few pixels.
-    if (text_size.x > pos_max.x - pos_min.x)
-    {
-        // Hello wo...
-        // |       |   |
-        // min   max   ellipsis_max
-        //          <-> this is generally some padding value
-
-        const ImFont* font = draw_list->_Data->Font;
-        const float font_size = draw_list->_Data->FontSize;
-        const char* text_end_ellipsis = NULL;
-
-        ImWchar ellipsis_char = font->EllipsisChar;
-        int ellipsis_char_count = 1;
-        if (ellipsis_char == (ImWchar)-1)
-        {
-            ellipsis_char = (ImWchar)'.';
-            ellipsis_char_count = 3;
-        }
-        const ImFontGlyph* glyph = font->FindGlyph(ellipsis_char);
-
-        float ellipsis_glyph_width = glyph->X1;                 // Width of the glyph with no padding on either side
-        float ellipsis_total_width = ellipsis_glyph_width;      // Full width of entire ellipsis
-
-        if (ellipsis_char_count > 1)
-        {
-            // Full ellipsis size without free spacing after it.
-            const float spacing_between_dots = 1.0f * (draw_list->_Data->FontSize / font->FontSize);
-            ellipsis_glyph_width = glyph->X1 - glyph->X0 + spacing_between_dots;
-            ellipsis_total_width = ellipsis_glyph_width * (float)ellipsis_char_count - spacing_between_dots;
-        }
-
-        // We can now claim the space between pos_max.x and ellipsis_max.x
-        const float text_avail_width = ImMax((ImMax(pos_max.x, ellipsis_max_x) - ellipsis_total_width) - pos_min.x, 1.0f);
-        float text_size_clipped_x = font->CalcTextSizeA(font_size, text_avail_width, 0.0f, text, text_end_full, &text_end_ellipsis).x;
-        if (text == text_end_ellipsis && text_end_ellipsis < text_end_full)
-        {
-            // Always display at least 1 character if there's no room for character + ellipsis
-            text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full);
-            text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x;
-        }
-        while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1]))
-        {
-            // Trim trailing space before ellipsis (FIXME: Supporting non-ascii blanks would be nice, for this we need a function to backtrack in UTF-8 text)
-            text_end_ellipsis--;
-            text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte
-        }
-
-        // Render text, render ellipsis
-        RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f));
-        float ellipsis_x = pos_min.x + text_size_clipped_x;
-        if (ellipsis_x + ellipsis_total_width <= ellipsis_max_x)
-            for (int i = 0; i < ellipsis_char_count; i++)
-            {
-                font->RenderChar(draw_list, font_size, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_char);
-                ellipsis_x += ellipsis_glyph_width;
-            }
-    }
-    else
-    {
-        RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f));
-    }
-
-    if (g.LogEnabled)
-        LogRenderedText(&pos_min, text, text_end_full);
-}
-
-// Render a rectangle shaped with optional rounding and borders
-void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding);
-    const float border_size = g.Style.FrameBorderSize;
-    if (border && border_size > 0.0f)
-    {
-        window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
-        window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
-    }
-}
-
-void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    const float border_size = g.Style.FrameBorderSize;
-    if (border_size > 0.0f)
-    {
-        window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size);
-        window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
-    }
-}
-
-void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    if (id != g.NavId)
-        return;
-    if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysDraw))
-        return;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->DC.NavHideHighlightOneFrame)
-        return;
-
-    float rounding = (flags & ImGuiNavHighlightFlags_NoRounding) ? 0.0f : g.Style.FrameRounding;
-    ImRect display_rect = bb;
-    display_rect.ClipWith(window->ClipRect);
-    if (flags & ImGuiNavHighlightFlags_TypeDefault)
-    {
-        const float THICKNESS = 2.0f;
-        const float DISTANCE = 3.0f + THICKNESS * 0.5f;
-        display_rect.Expand(ImVec2(DISTANCE,DISTANCE));
-        bool fully_visible = window->ClipRect.Contains(display_rect);
-        if (!fully_visible)
-            window->DrawList->PushClipRect(display_rect.Min, display_rect.Max);
-        window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, ImDrawCornerFlags_All, THICKNESS);
-        if (!fully_visible)
-            window->DrawList->PopClipRect();
-    }
-    if (flags & ImGuiNavHighlightFlags_TypeThin)
-    {
-        window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), rounding, ~0, 1.0f);
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
-//-----------------------------------------------------------------------------
-
-// ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods
-ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name)
-    : DrawListInst(&context->DrawListSharedData)
-{
-    Name = ImStrdup(name);
-    ID = ImHashStr(name);
-    IDStack.push_back(ID);
-    Flags = ImGuiWindowFlags_None;
-    Pos = ImVec2(0.0f, 0.0f);
-    Size = SizeFull = ImVec2(0.0f, 0.0f);
-    ContentSize = ContentSizeExplicit = ImVec2(0.0f, 0.0f);
-    WindowPadding = ImVec2(0.0f, 0.0f);
-    WindowRounding = 0.0f;
-    WindowBorderSize = 0.0f;
-    NameBufLen = (int)strlen(name) + 1;
-    MoveId = GetID("#MOVE");
-    ChildId = 0;
-    Scroll = ImVec2(0.0f, 0.0f);
-    ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
-    ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f);
-    ScrollbarSizes = ImVec2(0.0f, 0.0f);
-    ScrollbarX = ScrollbarY = false;
-    Active = WasActive = false;
-    WriteAccessed = false;
-    Collapsed = false;
-    WantCollapseToggle = false;
-    SkipItems = false;
-    Appearing = false;
-    Hidden = false;
-    IsFallbackWindow = false;
-    HasCloseButton = false;
-    ResizeBorderHeld = -1;
-    BeginCount = 0;
-    BeginOrderWithinParent = -1;
-    BeginOrderWithinContext = -1;
-    PopupId = 0;
-    AutoFitFramesX = AutoFitFramesY = -1;
-    AutoFitChildAxises = 0x00;
-    AutoFitOnlyGrows = false;
-    AutoPosLastDirection = ImGuiDir_None;
-    HiddenFramesCanSkipItems = HiddenFramesCannotSkipItems = 0;
-    SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing;
-    SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
-
-    InnerRect = ImRect(0.0f, 0.0f, 0.0f, 0.0f); // Clear so the InnerRect.GetSize() code in Begin() doesn't lead to overflow even if the result isn't used.
-
-    LastFrameActive = -1;
-    LastTimeActive = -1.0f;
-    ItemWidthDefault = 0.0f;
-    FontWindowScale = 1.0f;
-    SettingsOffset = -1;
-
-    DrawList = &DrawListInst;
-    DrawList->_OwnerName = Name;
-    ParentWindow = NULL;
-    RootWindow = NULL;
-    RootWindowForTitleBarHighlight = NULL;
-    RootWindowForNav = NULL;
-
-    NavLastIds[0] = NavLastIds[1] = 0;
-    NavRectRel[0] = NavRectRel[1] = ImRect();
-    NavLastChildNavWindow = NULL;
-
-    MemoryCompacted = false;
-    MemoryDrawListIdxCapacity = MemoryDrawListVtxCapacity = 0;
-}
-
-ImGuiWindow::~ImGuiWindow()
-{
-    IM_ASSERT(DrawList == &DrawListInst);
-    IM_DELETE(Name);
-    for (int i = 0; i != ColumnsStorage.Size; i++)
-        ColumnsStorage[i].~ImGuiColumns();
-}
-
-ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
-{
-    ImGuiID seed = IDStack.back();
-    ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
-    ImGui::KeepAliveID(id);
-    return id;
-}
-
-ImGuiID ImGuiWindow::GetID(const void* ptr)
-{
-    ImGuiID seed = IDStack.back();
-    ImGuiID id = ImHashData(&ptr, sizeof(void*), seed);
-    ImGui::KeepAliveID(id);
-    return id;
-}
-
-ImGuiID ImGuiWindow::GetID(int n)
-{
-    ImGuiID seed = IDStack.back();
-    ImGuiID id = ImHashData(&n, sizeof(n), seed);
-    ImGui::KeepAliveID(id);
-    return id;
-}
-
-ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
-{
-    ImGuiID seed = IDStack.back();
-    return ImHashStr(str, str_end ? (str_end - str) : 0, seed);
-}
-
-ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr)
-{
-    ImGuiID seed = IDStack.back();
-    return ImHashData(&ptr, sizeof(void*), seed);
-}
-
-ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n)
-{
-    ImGuiID seed = IDStack.back();
-    return ImHashData(&n, sizeof(n), seed);
-}
-
-// This is only used in rare/specific situations to manufacture an ID out of nowhere.
-ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
-{
-    ImGuiID seed = IDStack.back();
-    const int r_rel[4] = { (int)(r_abs.Min.x - Pos.x), (int)(r_abs.Min.y - Pos.y), (int)(r_abs.Max.x - Pos.x), (int)(r_abs.Max.y - Pos.y) };
-    ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed);
-    ImGui::KeepAliveID(id);
-    return id;
-}
-
-static void SetCurrentWindow(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    g.CurrentWindow = window;
-    if (window)
-        g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
-}
-
-// Free up/compact internal window buffers, we can use this when a window becomes unused.
-// This is currently unused by the library, but you may call this yourself for easy GC.
-// Not freed:
-// - ImGuiWindow, ImGuiWindowSettings, Name
-// - StateStorage, ColumnsStorage (may hold useful data)
-// This should have no noticeable visual effect. When the window reappear however, expect new allocation/buffer growth/copy cost.
-void ImGui::GcCompactTransientWindowBuffers(ImGuiWindow* window)
-{
-    window->MemoryCompacted = true;
-    window->MemoryDrawListIdxCapacity = window->DrawList->IdxBuffer.Capacity;
-    window->MemoryDrawListVtxCapacity = window->DrawList->VtxBuffer.Capacity;
-    window->IDStack.clear();
-    window->DrawList->ClearFreeMemory();
-    window->DC.ChildWindows.clear();
-    window->DC.ItemFlagsStack.clear();
-    window->DC.ItemWidthStack.clear();
-    window->DC.TextWrapPosStack.clear();
-    window->DC.GroupStack.clear();
-}
-
-void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window)
-{
-    // We stored capacity of the ImDrawList buffer to reduce growth-caused allocation/copy when awakening.
-    // The other buffers tends to amortize much faster.
-    window->MemoryCompacted = false;
-    window->DrawList->IdxBuffer.reserve(window->MemoryDrawListIdxCapacity);
-    window->DrawList->VtxBuffer.reserve(window->MemoryDrawListVtxCapacity);
-    window->MemoryDrawListIdxCapacity = window->MemoryDrawListVtxCapacity = 0;
-}
-
-void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    g.ActiveIdIsJustActivated = (g.ActiveId != id);
-    if (g.ActiveIdIsJustActivated)
-    {
-        g.ActiveIdTimer = 0.0f;
-        g.ActiveIdHasBeenPressedBefore = false;
-        g.ActiveIdHasBeenEditedBefore = false;
-        if (id != 0)
-        {
-            g.LastActiveId = id;
-            g.LastActiveIdTimer = 0.0f;
-        }
-    }
-    g.ActiveId = id;
-    g.ActiveIdAllowOverlap = false;
-    g.ActiveIdWindow = window;
-    g.ActiveIdHasBeenEditedThisFrame = false;
-    if (id)
-    {
-        g.ActiveIdIsAlive = id;
-        g.ActiveIdSource = (g.NavActivateId == id || g.NavInputId == id || g.NavJustTabbedId == id || g.NavJustMovedToId == id) ? ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
-    }
-
-    // Clear declaration of inputs claimed by the widget
-    // (Please note that this is WIP and not all keys/inputs are thoroughly declared by all widgets yet)
-    g.ActiveIdUsingNavDirMask = 0x00;
-    g.ActiveIdUsingNavInputMask = 0x00;
-    g.ActiveIdUsingKeyInputMask = 0x00;
-}
-
-void ImGui::ClearActiveID()
-{
-    SetActiveID(0, NULL);
-}
-
-void ImGui::SetHoveredID(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    g.HoveredId = id;
-    g.HoveredIdAllowOverlap = false;
-    if (id != 0 && g.HoveredIdPreviousFrame != id)
-        g.HoveredIdTimer = g.HoveredIdNotActiveTimer = 0.0f;
-}
-
-ImGuiID ImGui::GetHoveredID()
-{
-    ImGuiContext& g = *GImGui;
-    return g.HoveredId ? g.HoveredId : g.HoveredIdPreviousFrame;
-}
-
-void ImGui::KeepAliveID(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.ActiveId == id)
-        g.ActiveIdIsAlive = id;
-    if (g.ActiveIdPreviousFrame == id)
-        g.ActiveIdPreviousFrameIsAlive = true;
-}
-
-void ImGui::MarkItemEdited(ImGuiID id)
-{
-    // This marking is solely to be able to provide info for IsItemDeactivatedAfterEdit().
-    // ActiveId might have been released by the time we call this (as in the typical press/release button behavior) but still need need to fill the data.
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive);
-    IM_UNUSED(id); // Avoid unused variable warnings when asserts are compiled out.
-    //IM_ASSERT(g.CurrentWindow->DC.LastItemId == id);
-    g.ActiveIdHasBeenEditedThisFrame = true;
-    g.ActiveIdHasBeenEditedBefore = true;
-    g.CurrentWindow->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
-}
-
-static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
-{
-    // An active popup disable hovering on other windows (apart from its own children)
-    // FIXME-OPT: This could be cached/stored within the window.
-    ImGuiContext& g = *GImGui;
-    if (g.NavWindow)
-        if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
-            if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
-            {
-                // For the purpose of those flags we differentiate "standard popup" from "modal popup"
-                // NB: The order of those two tests is important because Modal windows are also Popups.
-                if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
-                    return false;
-                if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-                    return false;
-            }
-    return true;
-}
-
-// This is roughly matching the behavior of internal-facing ItemHoverable()
-// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered()
-// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
-bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.NavDisableMouseHover && !g.NavDisableHighlight)
-        return IsItemFocused();
-
-    // Test for bounding box overlap, as updated as ItemAdd()
-    if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect))
-        return false;
-    IM_ASSERT((flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows)) == 0);   // Flags not supported by this function
-
-    // Test if we are hovering the right window (our window could be behind another window)
-    // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable to use IsItemHovered() after EndChild() itself.
-    // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while.
-    //if (g.HoveredWindow != window)
-    //    return false;
-    if (g.HoveredRootWindow != window->RootWindow && !(flags & ImGuiHoveredFlags_AllowWhenOverlapped))
-        return false;
-
-    // Test if another item is active (e.g. being dragged)
-    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
-        if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
-            return false;
-
-    // Test if interactions on this window are blocked by an active popup or modal.
-    // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here.
-    if (!IsWindowContentHoverable(window, flags))
-        return false;
-
-    // Test if the item is disabled
-    if ((window->DC.ItemFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled))
-        return false;
-
-    // Special handling for the dummy item after Begin() which represent the title bar or tab.
-    // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case.
-    if (window->DC.LastItemId == window->MoveId && window->WriteAccessed)
-        return false;
-    return true;
-}
-
-// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
-bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap)
-        return false;
-
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.HoveredWindow != window)
-        return false;
-    if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap)
-        return false;
-    if (!IsMouseHoveringRect(bb.Min, bb.Max))
-        return false;
-    if (g.NavDisableMouseHover || !IsWindowContentHoverable(window, ImGuiHoveredFlags_None))
-        return false;
-    if (window->DC.ItemFlags & ImGuiItemFlags_Disabled)
-        return false;
-
-    SetHoveredID(id);
-
-    // [DEBUG] Item Picker tool!
-    // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making
-    // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered
-    // items if we perform the test in ItemAdd(), but that would incur a small runtime cost.
-    // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd().
-    if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id)
-        GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255));
-    if (g.DebugItemPickerBreakId == id)
-        IM_DEBUG_BREAK();
-
-    return true;
-}
-
-bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (!bb.Overlaps(window->ClipRect))
-        if (id == 0 || id != g.ActiveId)
-            if (clip_even_when_logged || !g.LogEnabled)
-                return true;
-    return false;
-}
-
-// Process TAB/Shift+TAB. Be mindful that this function may _clear_ the ActiveID when tabbing out.
-bool ImGui::FocusableItemRegister(ImGuiWindow* window, ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-
-    // Increment counters
-    const bool is_tab_stop = (window->DC.ItemFlags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
-    window->DC.FocusCounterRegular++;
-    if (is_tab_stop)
-        window->DC.FocusCounterTabStop++;
-
-    // Process TAB/Shift-TAB to tab *OUT* of the currently focused item.
-    // (Note that we can always TAB out of a widget that doesn't allow tabbing in)
-    if (g.ActiveId == id && g.FocusTabPressed && !IsActiveIdUsingKey(ImGuiKey_Tab) && g.FocusRequestNextWindow == NULL)
-    {
-        g.FocusRequestNextWindow = window;
-        g.FocusRequestNextCounterTabStop = window->DC.FocusCounterTabStop + (g.IO.KeyShift ? (is_tab_stop ? -1 : 0) : +1); // Modulo on index will be applied at the end of frame once we've got the total counter of items.
-    }
-
-    // Handle focus requests
-    if (g.FocusRequestCurrWindow == window)
-    {
-        if (window->DC.FocusCounterRegular == g.FocusRequestCurrCounterRegular)
-            return true;
-        if (is_tab_stop && window->DC.FocusCounterTabStop == g.FocusRequestCurrCounterTabStop)
-        {
-            g.NavJustTabbedId = id;
-            return true;
-        }
-
-        // If another item is about to be focused, we clear our own active id
-        if (g.ActiveId == id)
-            ClearActiveID();
-    }
-
-    return false;
-}
-
-void ImGui::FocusableItemUnregister(ImGuiWindow* window)
-{
-    window->DC.FocusCounterRegular--;
-    window->DC.FocusCounterTabStop--;
-}
-
-float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
-{
-    if (wrap_pos_x < 0.0f)
-        return 0.0f;
-
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    if (wrap_pos_x == 0.0f)
-        wrap_pos_x = window->WorkRect.Max.x;
-    else if (wrap_pos_x > 0.0f)
-        wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space
-
-    return ImMax(wrap_pos_x - pos.x, 1.0f);
-}
-
-// IM_ALLOC() == ImGui::MemAlloc()
-void* ImGui::MemAlloc(size_t size)
-{
-    if (ImGuiContext* ctx = GImGui)
-        ctx->IO.MetricsActiveAllocations++;
-    return GImAllocatorAllocFunc(size, GImAllocatorUserData);
-}
-
-// IM_FREE() == ImGui::MemFree()
-void ImGui::MemFree(void* ptr)
-{
-    if (ptr)
-        if (ImGuiContext* ctx = GImGui)
-            ctx->IO.MetricsActiveAllocations--;
-    return GImAllocatorFreeFunc(ptr, GImAllocatorUserData);
-}
-
-const char* ImGui::GetClipboardText()
-{
-    ImGuiContext& g = *GImGui;
-    return g.IO.GetClipboardTextFn ? g.IO.GetClipboardTextFn(g.IO.ClipboardUserData) : "";
-}
-
-void ImGui::SetClipboardText(const char* text)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.IO.SetClipboardTextFn)
-        g.IO.SetClipboardTextFn(g.IO.ClipboardUserData, text);
-}
-
-const char* ImGui::GetVersion()
-{
-    return IMGUI_VERSION;
-}
-
-// Internal state access - if you want to share Dear ImGui state between modules (e.g. DLL) or allocate it yourself
-// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module
-ImGuiContext* ImGui::GetCurrentContext()
-{
-    return GImGui;
-}
-
-void ImGui::SetCurrentContext(ImGuiContext* ctx)
-{
-#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC
-    IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this.
-#else
-    GImGui = ctx;
-#endif
-}
-
-void ImGui::SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data)
-{
-    GImAllocatorAllocFunc = alloc_func;
-    GImAllocatorFreeFunc = free_func;
-    GImAllocatorUserData = user_data;
-}
-
-ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
-{
-    ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas);
-    if (GImGui == NULL)
-        SetCurrentContext(ctx);
-    Initialize(ctx);
-    return ctx;
-}
-
-void ImGui::DestroyContext(ImGuiContext* ctx)
-{
-    if (ctx == NULL)
-        ctx = GImGui;
-    Shutdown(ctx);
-    if (GImGui == ctx)
-        SetCurrentContext(NULL);
-    IM_DELETE(ctx);
-}
-
-ImGuiIO& ImGui::GetIO()
-{
-    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
-    return GImGui->IO;
-}
-
-// Same value as passed to the old io.RenderDrawListsFn function. Valid after Render() and until the next call to NewFrame()
-ImDrawData* ImGui::GetDrawData()
-{
-    ImGuiContext& g = *GImGui;
-    return g.DrawData.Valid ? &g.DrawData : NULL;
-}
-
-double ImGui::GetTime()
-{
-    return GImGui->Time;
-}
-
-int ImGui::GetFrameCount()
-{
-    return GImGui->FrameCount;
-}
-
-ImDrawList* ImGui::GetBackgroundDrawList()
-{
-    return &GImGui->BackgroundDrawList;
-}
-
-ImDrawList* ImGui::GetForegroundDrawList()
-{
-    return &GImGui->ForegroundDrawList;
-}
-
-ImDrawListSharedData* ImGui::GetDrawListSharedData()
-{
-    return &GImGui->DrawListSharedData;
-}
-
-void ImGui::StartMouseMovingWindow(ImGuiWindow* window)
-{
-    // Set ActiveId even if the _NoMove flag is set. Without it, dragging away from a window with _NoMove would activate hover on other windows.
-    // We _also_ call this when clicking in a window empty space when io.ConfigWindowsMoveFromTitleBarOnly is set, but clear g.MovingWindow afterward.
-    // This is because we want ActiveId to be set even when the window is not permitted to move.
-    ImGuiContext& g = *GImGui;
-    FocusWindow(window);
-    SetActiveID(window->MoveId, window);
-    g.NavDisableHighlight = true;
-    g.ActiveIdClickOffset = g.IO.MousePos - window->RootWindow->Pos;
-
-    bool can_move_window = true;
-    if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindow->Flags & ImGuiWindowFlags_NoMove))
-        can_move_window = false;
-    if (can_move_window)
-        g.MovingWindow = window;
-}
-
-// Handle mouse moving window
-// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing()
-// FIXME: We don't have strong guarantee that g.MovingWindow stay synched with g.ActiveId == g.MovingWindow->MoveId.
-// This is currently enforced by the fact that BeginDragDropSource() is setting all g.ActiveIdUsingXXXX flags to inhibit navigation inputs,
-// but if we should more thoroughly test cases where g.ActiveId or g.MovingWindow gets changed and not the other.
-void ImGui::UpdateMouseMovingWindowNewFrame()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.MovingWindow != NULL)
-    {
-        // We actually want to move the root window. g.MovingWindow == window we clicked on (could be a child window).
-        // We track it to preserve Focus and so that generally ActiveIdWindow == MovingWindow and ActiveId == MovingWindow->MoveId for consistency.
-        KeepAliveID(g.ActiveId);
-        IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow);
-        ImGuiWindow* moving_window = g.MovingWindow->RootWindow;
-        if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos))
-        {
-            ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset;
-            if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y)
-            {
-                MarkIniSettingsDirty(moving_window);
-                SetWindowPos(moving_window, pos, ImGuiCond_Always);
-            }
-            FocusWindow(g.MovingWindow);
-        }
-        else
-        {
-            ClearActiveID();
-            g.MovingWindow = NULL;
-        }
-    }
-    else
-    {
-        // When clicking/dragging from a window that has the _NoMove flag, we still set the ActiveId in order to prevent hovering others.
-        if (g.ActiveIdWindow && g.ActiveIdWindow->MoveId == g.ActiveId)
-        {
-            KeepAliveID(g.ActiveId);
-            if (!g.IO.MouseDown[0])
-                ClearActiveID();
-        }
-    }
-}
-
-// Initiate moving window when clicking on empty space or title bar.
-// Handle left-click and right-click focus.
-void ImGui::UpdateMouseMovingWindowEndFrame()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.ActiveId != 0 || g.HoveredId != 0)
-        return;
-
-    // Unless we just made a window/popup appear
-    if (g.NavWindow && g.NavWindow->Appearing)
-        return;
-
-    // Click to focus window and start moving (after we're done with all our widgets)
-    if (g.IO.MouseClicked[0])
-    {
-        if (g.HoveredRootWindow != NULL)
-        {
-            StartMouseMovingWindow(g.HoveredWindow);
-            if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoTitleBar))
-                if (!g.HoveredRootWindow->TitleBarRect().Contains(g.IO.MouseClickedPos[0]))
-                    g.MovingWindow = NULL;
-        }
-        else if (g.NavWindow != NULL && GetTopMostPopupModal() == NULL)
-        {
-            // Clicking on void disable focus
-            FocusWindow(NULL);
-        }
-    }
-
-    // With right mouse button we close popups without changing focus based on where the mouse is aimed
-    // Instead, focus will be restored to the window under the bottom-most closed popup.
-    // (The left mouse button path calls FocusWindow on the hovered window, which will lead NewFrame->ClosePopupsOverWindow to trigger)
-    if (g.IO.MouseClicked[1])
-    {
-        // Find the top-most window between HoveredWindow and the top-most Modal Window.
-        // This is where we can trim the popup stack.
-        ImGuiWindow* modal = GetTopMostPopupModal();
-        bool hovered_window_above_modal = false;
-        if (modal == NULL)
-            hovered_window_above_modal = true;
-        for (int i = g.Windows.Size - 1; i >= 0 && hovered_window_above_modal == false; i--)
-        {
-            ImGuiWindow* window = g.Windows[i];
-            if (window == modal)
-                break;
-            if (window == g.HoveredWindow)
-                hovered_window_above_modal = true;
-        }
-        ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal, true);
-    }
-}
-
-static bool IsWindowActiveAndVisible(ImGuiWindow* window)
-{
-    return (window->Active) && (!window->Hidden);
-}
-
-static void ImGui::UpdateMouseInputs()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well)
-    if (IsMousePosValid(&g.IO.MousePos))
-        g.IO.MousePos = g.LastValidMousePos = ImFloor(g.IO.MousePos);
-
-    // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
-    if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev))
-        g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev;
-    else
-        g.IO.MouseDelta = ImVec2(0.0f, 0.0f);
-    if (g.IO.MouseDelta.x != 0.0f || g.IO.MouseDelta.y != 0.0f)
-        g.NavDisableMouseHover = false;
-
-    g.IO.MousePosPrev = g.IO.MousePos;
-    for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++)
-    {
-        g.IO.MouseClicked[i] = g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] < 0.0f;
-        g.IO.MouseReleased[i] = !g.IO.MouseDown[i] && g.IO.MouseDownDuration[i] >= 0.0f;
-        g.IO.MouseDownDurationPrev[i] = g.IO.MouseDownDuration[i];
-        g.IO.MouseDownDuration[i] = g.IO.MouseDown[i] ? (g.IO.MouseDownDuration[i] < 0.0f ? 0.0f : g.IO.MouseDownDuration[i] + g.IO.DeltaTime) : -1.0f;
-        g.IO.MouseDoubleClicked[i] = false;
-        if (g.IO.MouseClicked[i])
-        {
-            if ((float)(g.Time - g.IO.MouseClickedTime[i]) < g.IO.MouseDoubleClickTime)
-            {
-                ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f);
-                if (ImLengthSqr(delta_from_click_pos) < g.IO.MouseDoubleClickMaxDist * g.IO.MouseDoubleClickMaxDist)
-                    g.IO.MouseDoubleClicked[i] = true;
-                g.IO.MouseClickedTime[i] = -DBL_MAX;    // so the third click isn't turned into a double-click
-            }
-            else
-            {
-                g.IO.MouseClickedTime[i] = g.Time;
-            }
-            g.IO.MouseClickedPos[i] = g.IO.MousePos;
-            g.IO.MouseDownWasDoubleClick[i] = g.IO.MouseDoubleClicked[i];
-            g.IO.MouseDragMaxDistanceAbs[i] = ImVec2(0.0f, 0.0f);
-            g.IO.MouseDragMaxDistanceSqr[i] = 0.0f;
-        }
-        else if (g.IO.MouseDown[i])
-        {
-            // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold
-            ImVec2 delta_from_click_pos = IsMousePosValid(&g.IO.MousePos) ? (g.IO.MousePos - g.IO.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f);
-            g.IO.MouseDragMaxDistanceSqr[i] = ImMax(g.IO.MouseDragMaxDistanceSqr[i], ImLengthSqr(delta_from_click_pos));
-            g.IO.MouseDragMaxDistanceAbs[i].x = ImMax(g.IO.MouseDragMaxDistanceAbs[i].x, delta_from_click_pos.x < 0.0f ? -delta_from_click_pos.x : delta_from_click_pos.x);
-            g.IO.MouseDragMaxDistanceAbs[i].y = ImMax(g.IO.MouseDragMaxDistanceAbs[i].y, delta_from_click_pos.y < 0.0f ? -delta_from_click_pos.y : delta_from_click_pos.y);
-        }
-        if (!g.IO.MouseDown[i] && !g.IO.MouseReleased[i])
-            g.IO.MouseDownWasDoubleClick[i] = false;
-        if (g.IO.MouseClicked[i]) // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation
-            g.NavDisableMouseHover = false;
-    }
-}
-
-static void StartLockWheelingWindow(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.WheelingWindow == window)
-        return;
-    g.WheelingWindow = window;
-    g.WheelingWindowRefMousePos = g.IO.MousePos;
-    g.WheelingWindowTimer = WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER;
-}
-
-void ImGui::UpdateMouseWheel()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Reset the locked window if we move the mouse or after the timer elapses
-    if (g.WheelingWindow != NULL)
-    {
-        g.WheelingWindowTimer -= g.IO.DeltaTime;
-        if (IsMousePosValid() && ImLengthSqr(g.IO.MousePos - g.WheelingWindowRefMousePos) > g.IO.MouseDragThreshold * g.IO.MouseDragThreshold)
-            g.WheelingWindowTimer = 0.0f;
-        if (g.WheelingWindowTimer <= 0.0f)
-        {
-            g.WheelingWindow = NULL;
-            g.WheelingWindowTimer = 0.0f;
-        }
-    }
-
-    if (g.IO.MouseWheel == 0.0f && g.IO.MouseWheelH == 0.0f)
-        return;
-
-    ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
-    if (!window || window->Collapsed)
-        return;
-
-    // Zoom / Scale window
-    // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned.
-    if (g.IO.MouseWheel != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
-    {
-        StartLockWheelingWindow(window);
-        const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
-        const float scale = new_font_scale / window->FontWindowScale;
-        window->FontWindowScale = new_font_scale;
-        if (!(window->Flags & ImGuiWindowFlags_ChildWindow))
-        {
-            const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
-            SetWindowPos(window, window->Pos + offset, 0);
-            window->Size = ImFloor(window->Size * scale);
-            window->SizeFull = ImFloor(window->SizeFull * scale);
-        }
-        return;
-    }
-
-    // Mouse wheel scrolling
-    // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent
-
-    // Vertical Mouse Wheel scrolling
-    const float wheel_y = (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
-    if (wheel_y != 0.0f && !g.IO.KeyCtrl)
-    {
-        StartLockWheelingWindow(window);
-        while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
-            window = window->ParentWindow;
-        if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
-        {
-            float max_step = window->InnerRect.GetHeight() * 0.67f;
-            float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step));
-            SetScrollY(window, window->Scroll.y - wheel_y * scroll_step);
-        }
-    }
-
-    // Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held
-    const float wheel_x = (g.IO.MouseWheelH != 0.0f && !g.IO.KeyShift) ? g.IO.MouseWheelH : (g.IO.MouseWheel != 0.0f && g.IO.KeyShift) ? g.IO.MouseWheel : 0.0f;
-    if (wheel_x != 0.0f && !g.IO.KeyCtrl)
-    {
-        StartLockWheelingWindow(window);
-        while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
-            window = window->ParentWindow;
-        if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
-        {
-            float max_step = window->InnerRect.GetWidth() * 0.67f;
-            float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step));
-            SetScrollX(window, window->Scroll.x - wheel_x * scroll_step);
-        }
-    }
-}
-
-void ImGui::UpdateTabFocus()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Pressing TAB activate widget focus
-    g.FocusTabPressed = (g.NavWindow && g.NavWindow->Active && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab));
-    if (g.ActiveId == 0 && g.FocusTabPressed)
-    {
-        // Note that SetKeyboardFocusHere() sets the Next fields mid-frame. To be consistent we also
-        // manipulate the Next fields even, even though they will be turned into Curr fields by the code below.
-        g.FocusRequestNextWindow = g.NavWindow;
-        g.FocusRequestNextCounterRegular = INT_MAX;
-        if (g.NavId != 0 && g.NavIdTabCounter != INT_MAX)
-            g.FocusRequestNextCounterTabStop = g.NavIdTabCounter + 1 + (g.IO.KeyShift ? -1 : 1);
-        else
-            g.FocusRequestNextCounterTabStop = g.IO.KeyShift ? -1 : 0;
-    }
-
-    // Turn queued focus request into current one
-    g.FocusRequestCurrWindow = NULL;
-    g.FocusRequestCurrCounterRegular = g.FocusRequestCurrCounterTabStop = INT_MAX;
-    if (g.FocusRequestNextWindow != NULL)
-    {
-        ImGuiWindow* window = g.FocusRequestNextWindow;
-        g.FocusRequestCurrWindow = window;
-        if (g.FocusRequestNextCounterRegular != INT_MAX && window->DC.FocusCounterRegular != -1)
-            g.FocusRequestCurrCounterRegular = ImModPositive(g.FocusRequestNextCounterRegular, window->DC.FocusCounterRegular + 1);
-        if (g.FocusRequestNextCounterTabStop != INT_MAX && window->DC.FocusCounterTabStop != -1)
-            g.FocusRequestCurrCounterTabStop = ImModPositive(g.FocusRequestNextCounterTabStop, window->DC.FocusCounterTabStop + 1);
-        g.FocusRequestNextWindow = NULL;
-        g.FocusRequestNextCounterRegular = g.FocusRequestNextCounterTabStop = INT_MAX;
-    }
-
-    g.NavIdTabCounter = INT_MAX;
-}
-
-// The reason this is exposed in imgui_internal.h is: on touch-based system that don't have hovering, we want to dispatch inputs to the right target (imgui vs imgui+app)
-void ImGui::UpdateHoveredWindowAndCaptureFlags()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Find the window hovered by mouse:
-    // - Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow.
-    // - When moving a window we can skip the search, which also conveniently bypasses the fact that window->WindowRectClipped is lagging as this point of the frame.
-    // - We also support the moved window toggling the NoInputs flag after moving has started in order to be able to detect windows below it, which is useful for e.g. docking mechanisms.
-    FindHoveredWindow();
-
-    // Modal windows prevents cursor from hovering behind them.
-    ImGuiWindow* modal_window = GetTopMostPopupModal();
-    if (modal_window)
-        if (g.HoveredRootWindow && !IsWindowChildOf(g.HoveredRootWindow, modal_window))
-            g.HoveredRootWindow = g.HoveredWindow = NULL;
-
-    // Disabled mouse?
-    if (g.IO.ConfigFlags & ImGuiConfigFlags_NoMouse)
-        g.HoveredWindow = g.HoveredRootWindow = NULL;
-
-    // We track click ownership. When clicked outside of a window the click is owned by the application and won't report hovering nor request capture even while dragging over our windows afterward.
-    int mouse_earliest_button_down = -1;
-    bool mouse_any_down = false;
-    for (int i = 0; i < IM_ARRAYSIZE(g.IO.MouseDown); i++)
-    {
-        if (g.IO.MouseClicked[i])
-            g.IO.MouseDownOwned[i] = (g.HoveredWindow != NULL) || (!g.OpenPopupStack.empty());
-        mouse_any_down |= g.IO.MouseDown[i];
-        if (g.IO.MouseDown[i])
-            if (mouse_earliest_button_down == -1 || g.IO.MouseClickedTime[i] < g.IO.MouseClickedTime[mouse_earliest_button_down])
-                mouse_earliest_button_down = i;
-    }
-    const bool mouse_avail_to_imgui = (mouse_earliest_button_down == -1) || g.IO.MouseDownOwned[mouse_earliest_button_down];
-
-    // If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
-    // FIXME: For patterns of drag and drop across OS windows, we may need to rework/remove this test (first committed 311c0ca9 on 2015/02)
-    const bool mouse_dragging_extern_payload = g.DragDropActive && (g.DragDropSourceFlags & ImGuiDragDropFlags_SourceExtern) != 0;
-    if (!mouse_avail_to_imgui && !mouse_dragging_extern_payload)
-        g.HoveredWindow = g.HoveredRootWindow = NULL;
-
-    // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to imgui, false = dispatch mouse info to Dear ImGui + app)
-    if (g.WantCaptureMouseNextFrame != -1)
-        g.IO.WantCaptureMouse = (g.WantCaptureMouseNextFrame != 0);
-    else
-        g.IO.WantCaptureMouse = (mouse_avail_to_imgui && (g.HoveredWindow != NULL || mouse_any_down)) || (!g.OpenPopupStack.empty());
-
-    // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to imgui, false = dispatch keyboard info to Dear ImGui + app)
-    if (g.WantCaptureKeyboardNextFrame != -1)
-        g.IO.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0);
-    else
-        g.IO.WantCaptureKeyboard = (g.ActiveId != 0) || (modal_window != NULL);
-    if (g.IO.NavActive && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard))
-        g.IO.WantCaptureKeyboard = true;
-
-    // Update io.WantTextInput flag, this is to allow systems without a keyboard (e.g. mobile, hand-held) to show a software keyboard if possible
-    g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
-}
-
-static ImGuiKeyModFlags GetMergedKeyModFlags()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiKeyModFlags key_mod_flags = ImGuiKeyModFlags_None;
-    if (g.IO.KeyCtrl)   { key_mod_flags |= ImGuiKeyModFlags_Ctrl; }
-    if (g.IO.KeyShift)  { key_mod_flags |= ImGuiKeyModFlags_Shift; }
-    if (g.IO.KeyAlt)    { key_mod_flags |= ImGuiKeyModFlags_Alt; }
-    if (g.IO.KeySuper)  { key_mod_flags |= ImGuiKeyModFlags_Super; }
-    return key_mod_flags;
-}
-
-void ImGui::NewFrame()
-{
-    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
-    ImGuiContext& g = *GImGui;
-
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-    ImGuiTestEngineHook_PreNewFrame(&g);
-#endif
-
-    // Check and assert for various common IO and Configuration mistakes
-    ErrorCheckNewFrameSanityChecks();
-
-    // Load settings on first frame, save settings when modified (after a delay)
-    UpdateSettings();
-
-    g.Time += g.IO.DeltaTime;
-    g.WithinFrameScope = true;
-    g.FrameCount += 1;
-    g.TooltipOverrideCount = 0;
-    g.WindowsActiveCount = 0;
-    g.MenusIdSubmittedThisFrame.resize(0);
-
-    // Calculate frame-rate for the user, as a purely luxurious feature
-    g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx];
-    g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx] = g.IO.DeltaTime;
-    g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame);
-    g.IO.Framerate = (g.FramerateSecPerFrameAccum > 0.0f) ? (1.0f / (g.FramerateSecPerFrameAccum / (float)IM_ARRAYSIZE(g.FramerateSecPerFrame))) : FLT_MAX;
-
-    // Setup current font and draw list shared data
-    g.IO.Fonts->Locked = true;
-    SetCurrentFont(GetDefaultFont());
-    IM_ASSERT(g.Font->IsLoaded());
-    g.DrawListSharedData.ClipRectFullscreen = ImVec4(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
-    g.DrawListSharedData.CurveTessellationTol = g.Style.CurveTessellationTol;
-    g.DrawListSharedData.SetCircleSegmentMaxError(g.Style.CircleSegmentMaxError);
-    g.DrawListSharedData.InitialFlags = ImDrawListFlags_None;
-    if (g.Style.AntiAliasedLines)
-        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLines;
-    if (g.Style.AntiAliasedFill)
-        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedFill;
-    if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)
-        g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AllowVtxOffset;
-
-    g.BackgroundDrawList.Clear();
-    g.BackgroundDrawList.PushTextureID(g.IO.Fonts->TexID);
-    g.BackgroundDrawList.PushClipRectFullScreen();
-
-    g.ForegroundDrawList.Clear();
-    g.ForegroundDrawList.PushTextureID(g.IO.Fonts->TexID);
-    g.ForegroundDrawList.PushClipRectFullScreen();
-
-    // Mark rendering data as invalid to prevent user who may have a handle on it to use it.
-    g.DrawData.Clear();
-
-    // Drag and drop keep the source ID alive so even if the source disappear our state is consistent
-    if (g.DragDropActive && g.DragDropPayload.SourceId == g.ActiveId)
-        KeepAliveID(g.DragDropPayload.SourceId);
-
-    // Update HoveredId data
-    if (!g.HoveredIdPreviousFrame)
-        g.HoveredIdTimer = 0.0f;
-    if (!g.HoveredIdPreviousFrame || (g.HoveredId && g.ActiveId == g.HoveredId))
-        g.HoveredIdNotActiveTimer = 0.0f;
-    if (g.HoveredId)
-        g.HoveredIdTimer += g.IO.DeltaTime;
-    if (g.HoveredId && g.ActiveId != g.HoveredId)
-        g.HoveredIdNotActiveTimer += g.IO.DeltaTime;
-    g.HoveredIdPreviousFrame = g.HoveredId;
-    g.HoveredId = 0;
-    g.HoveredIdAllowOverlap = false;
-
-    // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore)
-    if (g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
-        ClearActiveID();
-    if (g.ActiveId)
-        g.ActiveIdTimer += g.IO.DeltaTime;
-    g.LastActiveIdTimer += g.IO.DeltaTime;
-    g.ActiveIdPreviousFrame = g.ActiveId;
-    g.ActiveIdPreviousFrameWindow = g.ActiveIdWindow;
-    g.ActiveIdPreviousFrameHasBeenEditedBefore = g.ActiveIdHasBeenEditedBefore;
-    g.ActiveIdIsAlive = 0;
-    g.ActiveIdHasBeenEditedThisFrame = false;
-    g.ActiveIdPreviousFrameIsAlive = false;
-    g.ActiveIdIsJustActivated = false;
-    if (g.TempInputId != 0 && g.ActiveId != g.TempInputId)
-        g.TempInputId = 0;
-    if (g.ActiveId == 0)
-    {
-        g.ActiveIdUsingNavDirMask = 0x00;
-        g.ActiveIdUsingNavInputMask = 0x00;
-        g.ActiveIdUsingKeyInputMask = 0x00;
-    }
-
-    // Drag and drop
-    g.DragDropAcceptIdPrev = g.DragDropAcceptIdCurr;
-    g.DragDropAcceptIdCurr = 0;
-    g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
-    g.DragDropWithinSource = false;
-    g.DragDropWithinTarget = false;
-
-    // Update keyboard input state
-    // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools
-    g.IO.KeyMods = GetMergedKeyModFlags();
-    memcpy(g.IO.KeysDownDurationPrev, g.IO.KeysDownDuration, sizeof(g.IO.KeysDownDuration));
-    for (int i = 0; i < IM_ARRAYSIZE(g.IO.KeysDown); i++)
-        g.IO.KeysDownDuration[i] = g.IO.KeysDown[i] ? (g.IO.KeysDownDuration[i] < 0.0f ? 0.0f : g.IO.KeysDownDuration[i] + g.IO.DeltaTime) : -1.0f;
-
-    // Update gamepad/keyboard directional navigation
-    NavUpdate();
-
-    // Update mouse input state
-    UpdateMouseInputs();
-
-    // Find hovered window
-    // (needs to be before UpdateMouseMovingWindowNewFrame so we fill g.HoveredWindowUnderMovingWindow on the mouse release frame)
-    UpdateHoveredWindowAndCaptureFlags();
-
-    // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering)
-    UpdateMouseMovingWindowNewFrame();
-
-    // Background darkening/whitening
-    if (GetTopMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f))
-        g.DimBgRatio = ImMin(g.DimBgRatio + g.IO.DeltaTime * 6.0f, 1.0f);
-    else
-        g.DimBgRatio = ImMax(g.DimBgRatio - g.IO.DeltaTime * 10.0f, 0.0f);
-
-    g.MouseCursor = ImGuiMouseCursor_Arrow;
-    g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
-    g.PlatformImePos = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
-
-    // Mouse wheel scrolling, scale
-    UpdateMouseWheel();
-
-    // Update legacy TAB focus
-    UpdateTabFocus();
-
-    // Mark all windows as not visible and compact unused memory.
-    IM_ASSERT(g.WindowsFocusOrder.Size == g.Windows.Size);
-    const float memory_compact_start_time = (g.IO.ConfigWindowsMemoryCompactTimer >= 0.0f) ? (float)g.Time - g.IO.ConfigWindowsMemoryCompactTimer : FLT_MAX;
-    for (int i = 0; i != g.Windows.Size; i++)
-    {
-        ImGuiWindow* window = g.Windows[i];
-        window->WasActive = window->Active;
-        window->BeginCount = 0;
-        window->Active = false;
-        window->WriteAccessed = false;
-
-        // Garbage collect transient buffers of recently unused windows
-        if (!window->WasActive && !window->MemoryCompacted && window->LastTimeActive < memory_compact_start_time)
-            GcCompactTransientWindowBuffers(window);
-    }
-
-    // Closing the focused window restore focus to the first active root window in descending z-order
-    if (g.NavWindow && !g.NavWindow->WasActive)
-        FocusTopMostWindowUnderOne(NULL, NULL);
-
-    // No window should be open at the beginning of the frame.
-    // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
-    g.CurrentWindowStack.resize(0);
-    g.BeginPopupStack.resize(0);
-    ClosePopupsOverWindow(g.NavWindow, false);
-
-    // [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
-    UpdateDebugToolItemPicker();
-
-    // Create implicit/fallback window - which we will only render it if the user has added something to it.
-    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
-    // This fallback is particularly important as it avoid ImGui:: calls from crashing.
-    g.WithinFrameScopeWithImplicitWindow = true;
-    SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
-    Begin("Debug##Default");
-    IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true);
-
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-    ImGuiTestEngineHook_PostNewFrame(&g);
-#endif
-}
-
-// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
-void ImGui::UpdateDebugToolItemPicker()
-{
-    ImGuiContext& g = *GImGui;
-    g.DebugItemPickerBreakId = 0;
-    if (g.DebugItemPickerActive)
-    {
-        const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
-        ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);
-        if (ImGui::IsKeyPressedMap(ImGuiKey_Escape))
-            g.DebugItemPickerActive = false;
-        if (ImGui::IsMouseClicked(0) && hovered_id)
-        {
-            g.DebugItemPickerBreakId = hovered_id;
-            g.DebugItemPickerActive = false;
-        }
-        ImGui::SetNextWindowBgAlpha(0.60f);
-        ImGui::BeginTooltip();
-        ImGui::Text("HoveredId: 0x%08X", hovered_id);
-        ImGui::Text("Press ESC to abort picking.");
-        ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
-        ImGui::EndTooltip();
-    }
-}
-
-void ImGui::Initialize(ImGuiContext* context)
-{
-    ImGuiContext& g = *context;
-    IM_ASSERT(!g.Initialized && !g.SettingsLoaded);
-
-    // Add .ini handle for ImGuiWindow type
-    {
-        ImGuiSettingsHandler ini_handler;
-        ini_handler.TypeName = "Window";
-        ini_handler.TypeHash = ImHashStr("Window");
-        ini_handler.ReadOpenFn = WindowSettingsHandler_ReadOpen;
-        ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine;
-        ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll;
-        g.SettingsHandlers.push_back(ini_handler);
-    }
-
-#ifdef IMGUI_HAS_TABLE
-    // Add .ini handle for ImGuiTable type
-    {
-        ImGuiSettingsHandler ini_handler;
-        ini_handler.TypeName = "Table";
-        ini_handler.TypeHash = ImHashStr("Table");
-        ini_handler.ReadOpenFn = TableSettingsHandler_ReadOpen;
-        ini_handler.ReadLineFn = TableSettingsHandler_ReadLine;
-        ini_handler.WriteAllFn = TableSettingsHandler_WriteAll;
-        g.SettingsHandlers.push_back(ini_handler);
-    }
-#endif // #ifdef IMGUI_HAS_TABLE
-
-#ifdef IMGUI_HAS_DOCK
-#endif // #ifdef IMGUI_HAS_DOCK
-
-    g.Initialized = true;
-}
-
-// This function is merely here to free heap allocations.
-void ImGui::Shutdown(ImGuiContext* context)
-{
-    // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame)
-    ImGuiContext& g = *context;
-    if (g.IO.Fonts && g.FontAtlasOwnedByContext)
-    {
-        g.IO.Fonts->Locked = false;
-        IM_DELETE(g.IO.Fonts);
-    }
-    g.IO.Fonts = NULL;
-
-    // Cleanup of other data are conditional on actually having initialized Dear ImGui.
-    if (!g.Initialized)
-        return;
-
-    // Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file)
-    if (g.SettingsLoaded && g.IO.IniFilename != NULL)
-    {
-        ImGuiContext* backup_context = GImGui;
-        SetCurrentContext(context);
-        SaveIniSettingsToDisk(g.IO.IniFilename);
-        SetCurrentContext(backup_context);
-    }
-
-    // Clear everything else
-    for (int i = 0; i < g.Windows.Size; i++)
-        IM_DELETE(g.Windows[i]);
-    g.Windows.clear();
-    g.WindowsFocusOrder.clear();
-    g.WindowsTempSortBuffer.clear();
-    g.CurrentWindow = NULL;
-    g.CurrentWindowStack.clear();
-    g.WindowsById.Clear();
-    g.NavWindow = NULL;
-    g.HoveredWindow = g.HoveredRootWindow = NULL;
-    g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL;
-    g.MovingWindow = NULL;
-    g.ColorModifiers.clear();
-    g.StyleModifiers.clear();
-    g.FontStack.clear();
-    g.OpenPopupStack.clear();
-    g.BeginPopupStack.clear();
-    g.DrawDataBuilder.ClearFreeMemory();
-    g.BackgroundDrawList.ClearFreeMemory();
-    g.ForegroundDrawList.ClearFreeMemory();
-
-    g.TabBars.Clear();
-    g.CurrentTabBarStack.clear();
-    g.ShrinkWidthBuffer.clear();
-
-    g.Tables.Clear();
-    g.CurrentTableStack.clear();
-    g.DrawChannelsTempMergeBuffer.clear();
-
-    g.PrivateClipboard.clear();
-    g.MenusIdSubmittedThisFrame.clear();
-    g.InputTextState.ClearFreeMemory();
-
-    g.SettingsWindows.clear();
-    g.SettingsHandlers.clear();
-
-    if (g.LogFile)
-    {
-#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
-        if (g.LogFile != stdout)
-#endif
-            ImFileClose(g.LogFile);
-        g.LogFile = NULL;
-    }
-    g.LogBuffer.clear();
-
-    g.Initialized = false;
-}
-
-// FIXME: Add a more explicit sort order in the window structure.
-static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs)
-{
-    const ImGuiWindow* const a = *(const ImGuiWindow* const *)lhs;
-    const ImGuiWindow* const b = *(const ImGuiWindow* const *)rhs;
-    if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup))
-        return d;
-    if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip))
-        return d;
-    return (a->BeginOrderWithinParent - b->BeginOrderWithinParent);
-}
-
-static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window)
-{
-    out_sorted_windows->push_back(window);
-    if (window->Active)
-    {
-        int count = window->DC.ChildWindows.Size;
-        if (count > 1)
-            ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
-        for (int i = 0; i < count; i++)
-        {
-            ImGuiWindow* child = window->DC.ChildWindows[i];
-            if (child->Active)
-                AddWindowToSortBuffer(out_sorted_windows, child);
-        }
-    }
-}
-
-static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list)
-{
-    if (draw_list->CmdBuffer.empty())
-        return;
-
-    // Remove trailing command if unused
-    ImDrawCmd& last_cmd = draw_list->CmdBuffer.back();
-    if (last_cmd.ElemCount == 0 && last_cmd.UserCallback == NULL)
-    {
-        draw_list->CmdBuffer.pop_back();
-        if (draw_list->CmdBuffer.empty())
-            return;
-    }
-
-    // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
-    // May trigger for you if you are using PrimXXX functions incorrectly.
-    IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
-    IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
-    if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset))
-        IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
-
-    // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window)
-    // If this assert triggers because you are drawing lots of stuff manually:
-    // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds.
-    //   Be mindful that the ImDrawList API doesn't filter vertices. Use the Metrics window to inspect draw list contents.
-    // - If you want large meshes with more than 64K vertices, you can either:
-    //   (A) Handle the ImDrawCmd::VtxOffset value in your renderer back-end, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'.
-    //       Most example back-ends already support this from 1.71. Pre-1.71 back-ends won't.
-    //       Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them.
-    //   (B) Or handle 32-bit indices in your renderer back-end, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h.
-    //       Most example back-ends already support this. For example, the OpenGL example code detect index size at compile-time:
-    //         glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
-    //       Your own engine or render API may use different parameters or function calls to specify index sizes.
-    //       2 and 4 bytes indices are generally supported by most graphics API.
-    // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching
-    //   the 64K limit to split your draw commands in multiple draw lists.
-    if (sizeof(ImDrawIdx) == 2)
-        IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
-
-    out_list->push_back(draw_list);
-}
-
-static void AddWindowToDrawData(ImVector<ImDrawList*>* out_render_list, ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    g.IO.MetricsRenderWindows++;
-    AddDrawListToDrawData(out_render_list, window->DrawList);
-    for (int i = 0; i < window->DC.ChildWindows.Size; i++)
-    {
-        ImGuiWindow* child = window->DC.ChildWindows[i];
-        if (IsWindowActiveAndVisible(child)) // clipped children may have been marked not active
-            AddWindowToDrawData(out_render_list, child);
-    }
-}
-
-// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
-static void AddRootWindowToDrawData(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    int layer = (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0;
-    AddWindowToDrawData(&g.DrawDataBuilder.Layers[layer], window);
-}
-
-void ImDrawDataBuilder::FlattenIntoSingleLayer()
-{
-    int n = Layers[0].Size;
-    int size = n;
-    for (int i = 1; i < IM_ARRAYSIZE(Layers); i++)
-        size += Layers[i].Size;
-    Layers[0].resize(size);
-    for (int layer_n = 1; layer_n < IM_ARRAYSIZE(Layers); layer_n++)
-    {
-        ImVector<ImDrawList*>& layer = Layers[layer_n];
-        if (layer.empty())
-            continue;
-        memcpy(&Layers[0][n], &layer[0], layer.Size * sizeof(ImDrawList*));
-        n += layer.Size;
-        layer.resize(0);
-    }
-}
-
-static void SetupDrawData(ImVector<ImDrawList*>* draw_lists, ImDrawData* draw_data)
-{
-    ImGuiIO& io = ImGui::GetIO();
-    draw_data->Valid = true;
-    draw_data->CmdLists = (draw_lists->Size > 0) ? draw_lists->Data : NULL;
-    draw_data->CmdListsCount = draw_lists->Size;
-    draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0;
-    draw_data->DisplayPos = ImVec2(0.0f, 0.0f);
-    draw_data->DisplaySize = io.DisplaySize;
-    draw_data->FramebufferScale = io.DisplayFramebufferScale;
-    for (int n = 0; n < draw_lists->Size; n++)
-    {
-        draw_data->TotalVtxCount += draw_lists->Data[n]->VtxBuffer.Size;
-        draw_data->TotalIdxCount += draw_lists->Data[n]->IdxBuffer.Size;
-    }
-}
-
-// When using this function it is sane to ensure that float are perfectly rounded to integer values, to that e.g. (int)(max.x-min.x) in user's render produce correct result.
-void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DrawList->PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
-    window->ClipRect = window->DrawList->_ClipRectStack.back();
-}
-
-void ImGui::PopClipRect()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DrawList->PopClipRect();
-    window->ClipRect = window->DrawList->_ClipRectStack.back();
-}
-
-// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal.
-void ImGui::EndFrame()
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.Initialized);
-    
-    // Don't process EndFrame() multiple times.
-    if (g.FrameCountEnded == g.FrameCount)
-        return;
-    IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?");
-
-    ErrorCheckEndFrameSanityChecks();
-
-    // Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
-    if (g.IO.ImeSetInputScreenPosFn && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f))
-    {
-        g.IO.ImeSetInputScreenPosFn((int)g.PlatformImePos.x, (int)g.PlatformImePos.y);
-        g.PlatformImeLastPos = g.PlatformImePos;
-    }
-
-    // Hide implicit/fallback "Debug" window if it hasn't been used
-    g.WithinFrameScopeWithImplicitWindow = false;
-    if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed)
-        g.CurrentWindow->Active = false;
-    End();
-
-    // Show CTRL+TAB list window
-    if (g.NavWindowingTarget != NULL)
-        NavUpdateWindowingOverlay();
-
-    // Drag and Drop: Elapse payload (if delivered, or if source stops being submitted)
-    if (g.DragDropActive)
-    {
-        bool is_delivered = g.DragDropPayload.Delivery;
-        bool is_elapsed = (g.DragDropPayload.DataFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton));
-        if (is_delivered || is_elapsed)
-            ClearDragDrop();
-    }
-
-    // Drag and Drop: Fallback for source tooltip. This is not ideal but better than nothing.
-    if (g.DragDropActive && g.DragDropSourceFrameCount < g.FrameCount)
-    {
-        g.DragDropWithinSource = true;
-        SetTooltip("...");
-        g.DragDropWithinSource = false;
-    }
-
-    // End frame
-    g.WithinFrameScope = false;
-    g.FrameCountEnded = g.FrameCount;
-
-    // Initiate moving window + handle left-click and right-click focus
-    UpdateMouseMovingWindowEndFrame();
-
-    // Sort the window list so that all child windows are after their parent
-    // We cannot do that on FocusWindow() because childs may not exist yet
-    g.WindowsTempSortBuffer.resize(0);
-    g.WindowsTempSortBuffer.reserve(g.Windows.Size);
-    for (int i = 0; i != g.Windows.Size; i++)
-    {
-        ImGuiWindow* window = g.Windows[i];
-        if (window->Active && (window->Flags & ImGuiWindowFlags_ChildWindow))       // if a child is active its parent will add it
-            continue;
-        AddWindowToSortBuffer(&g.WindowsTempSortBuffer, window);
-    }
-
-    // This usually assert if there is a mismatch between the ImGuiWindowFlags_ChildWindow / ParentWindow values and DC.ChildWindows[] in parents, aka we've done something wrong.
-    IM_ASSERT(g.Windows.Size == g.WindowsTempSortBuffer.Size);
-    g.Windows.swap(g.WindowsTempSortBuffer);
-    g.IO.MetricsActiveWindows = g.WindowsActiveCount;
-
-    // Unlock font atlas
-    g.IO.Fonts->Locked = false;
-
-    // Clear Input data for next frame
-    g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f;
-    g.IO.InputQueueCharacters.resize(0);
-    memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs));
-}
-
-void ImGui::Render()
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.Initialized);
-
-    if (g.FrameCountEnded != g.FrameCount)
-        EndFrame();
-    g.FrameCountRendered = g.FrameCount;
-    g.IO.MetricsRenderWindows = 0;
-    g.DrawDataBuilder.Clear();
-
-    // Add background ImDrawList
-    if (!g.BackgroundDrawList.VtxBuffer.empty())
-        AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.BackgroundDrawList);
-
-    // Add ImDrawList to render
-    ImGuiWindow* windows_to_render_top_most[2];
-    windows_to_render_top_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL;
-    windows_to_render_top_most[1] = (g.NavWindowingTarget ? g.NavWindowingList : NULL);
-    for (int n = 0; n != g.Windows.Size; n++)
-    {
-        ImGuiWindow* window = g.Windows[n];
-        if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_top_most[0] && window != windows_to_render_top_most[1])
-            AddRootWindowToDrawData(window);
-    }
-    for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_top_most); n++)
-        if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
-            AddRootWindowToDrawData(windows_to_render_top_most[n]);
-    g.DrawDataBuilder.FlattenIntoSingleLayer();
-
-    // Draw software mouse cursor if requested
-    if (g.IO.MouseDrawCursor)
-        RenderMouseCursor(&g.ForegroundDrawList, g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
-
-    // Add foreground ImDrawList
-    if (!g.ForegroundDrawList.VtxBuffer.empty())
-        AddDrawListToDrawData(&g.DrawDataBuilder.Layers[0], &g.ForegroundDrawList);
-
-    // Setup ImDrawData structure for end-user
-    SetupDrawData(&g.DrawDataBuilder.Layers[0], &g.DrawData);
-    g.IO.MetricsRenderVertices = g.DrawData.TotalVtxCount;
-    g.IO.MetricsRenderIndices = g.DrawData.TotalIdxCount;
-
-    // (Legacy) Call the Render callback function. The current prefer way is to let the user retrieve GetDrawData() and call the render function themselves.
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    if (g.DrawData.CmdListsCount > 0 && g.IO.RenderDrawListsFn != NULL)
-        g.IO.RenderDrawListsFn(&g.DrawData);
-#endif
-}
-
-// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
-// CalcTextSize("") should return ImVec2(0.0f, g.FontSize)
-ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
-{
-    ImGuiContext& g = *GImGui;
-
-    const char* text_display_end;
-    if (hide_text_after_double_hash)
-        text_display_end = FindRenderedTextEnd(text, text_end);      // Hide anything after a '##' string
-    else
-        text_display_end = text_end;
-
-    ImFont* font = g.Font;
-    const float font_size = g.FontSize;
-    if (text == text_display_end)
-        return ImVec2(0.0f, font_size);
-    ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
-
-    // Round
-    text_size.x = IM_FLOOR(text_size.x + 0.95f);
-
-    return text_size;
-}
-
-// Find window given position, search front-to-back
-// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programatically
-// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
-// called, aka before the next Begin(). Moving window isn't affected.
-static void FindHoveredWindow()
-{
-    ImGuiContext& g = *GImGui;
-
-    ImGuiWindow* hovered_window = NULL;
-    if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
-        hovered_window = g.MovingWindow;
-
-    ImVec2 padding_regular = g.Style.TouchExtraPadding;
-    ImVec2 padding_for_resize_from_edges = g.IO.ConfigWindowsResizeFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS)) : padding_regular;
-    for (int i = g.Windows.Size - 1; i >= 0; i--)
-    {
-        ImGuiWindow* window = g.Windows[i];
-        if (!window->Active || window->Hidden)
-            continue;
-        if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
-            continue;
-
-        // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
-        ImRect bb(window->OuterRectClipped);
-        if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize))
-            bb.Expand(padding_regular);
-        else
-            bb.Expand(padding_for_resize_from_edges);
-        if (!bb.Contains(g.IO.MousePos))
-            continue;
-
-        // Those seemingly unnecessary extra tests are because the code here is a little different in viewport/docking branches.
-        if (hovered_window == NULL)
-            hovered_window = window;
-        if (hovered_window)
-            break;
-    }
-
-    g.HoveredWindow = hovered_window;
-    g.HoveredRootWindow = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
-
-}
-
-// Test if mouse cursor is hovering given rectangle
-// NB- Rectangle is clipped by our current clip setting
-// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding)
-bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip)
-{
-    ImGuiContext& g = *GImGui;
-
-    // Clip
-    ImRect rect_clipped(r_min, r_max);
-    if (clip)
-        rect_clipped.ClipWith(g.CurrentWindow->ClipRect);
-
-    // Expand for touch input
-    const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding);
-    if (!rect_for_touch.Contains(g.IO.MousePos))
-        return false;
-    return true;
-}
-
-int ImGui::GetKeyIndex(ImGuiKey imgui_key)
-{
-    IM_ASSERT(imgui_key >= 0 && imgui_key < ImGuiKey_COUNT);
-    ImGuiContext& g = *GImGui;
-    return g.IO.KeyMap[imgui_key];
-}
-
-// Note that dear imgui doesn't know the semantic of each entry of io.KeysDown[]!
-// Use your own indices/enums according to how your back-end/engine stored them into io.KeysDown[]!
-bool ImGui::IsKeyDown(int user_key_index)
-{
-    if (user_key_index < 0)
-        return false;
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
-    return g.IO.KeysDown[user_key_index];
-}
-
-// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime)
-// t1 = current time (e.g.: g.Time)
-// An event is triggered at:
-//  t = 0.0f     t = repeat_delay,    t = repeat_delay + repeat_rate*N
-int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate)
-{
-    if (t1 == 0.0f)
-        return 1;
-    if (t0 >= t1)
-        return 0;
-    if (repeat_rate <= 0.0f)
-        return (t0 < repeat_delay) && (t1 >= repeat_delay);
-    const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate);
-    const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate);
-    const int count = count_t1 - count_t0;
-    return count;
-}
-
-int ImGui::GetKeyPressedAmount(int key_index, float repeat_delay, float repeat_rate)
-{
-    ImGuiContext& g = *GImGui;
-    if (key_index < 0)
-        return 0;
-    IM_ASSERT(key_index >= 0 && key_index < IM_ARRAYSIZE(g.IO.KeysDown));
-    const float t = g.IO.KeysDownDuration[key_index];
-    return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate);
-}
-
-bool ImGui::IsKeyPressed(int user_key_index, bool repeat)
-{
-    ImGuiContext& g = *GImGui;
-    if (user_key_index < 0)
-        return false;
-    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
-    const float t = g.IO.KeysDownDuration[user_key_index];
-    if (t == 0.0f)
-        return true;
-    if (repeat && t > g.IO.KeyRepeatDelay)
-        return GetKeyPressedAmount(user_key_index, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0;
-    return false;
-}
-
-bool ImGui::IsKeyReleased(int user_key_index)
-{
-    ImGuiContext& g = *GImGui;
-    if (user_key_index < 0) return false;
-    IM_ASSERT(user_key_index >= 0 && user_key_index < IM_ARRAYSIZE(g.IO.KeysDown));
-    return g.IO.KeysDownDurationPrev[user_key_index] >= 0.0f && !g.IO.KeysDown[user_key_index];
-}
-
-bool ImGui::IsMouseDown(ImGuiMouseButton button)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    return g.IO.MouseDown[button];
-}
-
-bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    const float t = g.IO.MouseDownDuration[button];
-    if (t == 0.0f)
-        return true;
-
-    if (repeat && t > g.IO.KeyRepeatDelay)
-    {
-        // FIXME: 2019/05/03: Our old repeat code was wrong here and led to doubling the repeat rate, which made it an ok rate for repeat on mouse hold.
-        int amount = CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate * 0.50f);
-        if (amount > 0)
-            return true;
-    }
-    return false;
-}
-
-bool ImGui::IsMouseReleased(ImGuiMouseButton button)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    return g.IO.MouseReleased[button];
-}
-
-bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    return g.IO.MouseDoubleClicked[button];
-}
-
-// [Internal] This doesn't test if the button is pressed
-bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    if (lock_threshold < 0.0f)
-        lock_threshold = g.IO.MouseDragThreshold;
-    return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold;
-}
-
-bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    if (!g.IO.MouseDown[button])
-        return false;
-    return IsMouseDragPastThreshold(button, lock_threshold);
-}
-
-ImVec2 ImGui::GetMousePos()
-{
-    ImGuiContext& g = *GImGui;
-    return g.IO.MousePos;
-}
-
-// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed!
-ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.BeginPopupStack.Size > 0)
-        return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos;
-    return g.IO.MousePos;
-}
-
-// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position.
-bool ImGui::IsMousePosValid(const ImVec2* mouse_pos)
-{
-    // The assert is only to silence a false-positive in XCode Static Analysis.
-    // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions).
-    IM_ASSERT(GImGui != NULL);
-    const float MOUSE_INVALID = -256000.0f;
-    ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos;
-    return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID;
-}
-
-bool ImGui::IsAnyMouseDown()
-{
-    ImGuiContext& g = *GImGui;
-    for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++)
-        if (g.IO.MouseDown[n])
-            return true;
-    return false;
-}
-
-// Return the delta from the initial clicking position while the mouse button is clicked or was just released.
-// This is locked and return 0.0f until the mouse moves past a distance threshold at least once.
-// NB: This is only valid if IsMousePosValid(). Back-ends in theory should always keep mouse position valid when dragging even outside the client window.
-ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    if (lock_threshold < 0.0f)
-        lock_threshold = g.IO.MouseDragThreshold;
-    if (g.IO.MouseDown[button] || g.IO.MouseReleased[button])
-        if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold)
-            if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button]))
-                return g.IO.MousePos - g.IO.MouseClickedPos[button];
-    return ImVec2(0.0f, 0.0f);
-}
-
-void ImGui::ResetMouseDragDelta(ImGuiMouseButton button)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
-    // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr
-    g.IO.MouseClickedPos[button] = g.IO.MousePos;
-}
-
-ImGuiMouseCursor ImGui::GetMouseCursor()
-{
-    return GImGui->MouseCursor;
-}
-
-void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type)
-{
-    GImGui->MouseCursor = cursor_type;
-}
-
-void ImGui::CaptureKeyboardFromApp(bool capture)
-{
-    GImGui->WantCaptureKeyboardNextFrame = capture ? 1 : 0;
-}
-
-void ImGui::CaptureMouseFromApp(bool capture)
-{
-    GImGui->WantCaptureMouseNextFrame = capture ? 1 : 0;
-}
-
-bool ImGui::IsItemActive()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.ActiveId)
-    {
-        ImGuiWindow* window = g.CurrentWindow;
-        return g.ActiveId == window->DC.LastItemId;
-    }
-    return false;
-}
-
-bool ImGui::IsItemActivated()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.ActiveId)
-    {
-        ImGuiWindow* window = g.CurrentWindow;
-        if (g.ActiveId == window->DC.LastItemId && g.ActiveIdPreviousFrame != window->DC.LastItemId)
-            return true;
-    }
-    return false;
-}
-
-bool ImGui::IsItemDeactivated()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDeactivated)
-        return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Deactivated) != 0;
-    return (g.ActiveIdPreviousFrame == window->DC.LastItemId && g.ActiveIdPreviousFrame != 0 && g.ActiveId != window->DC.LastItemId);
-}
-
-bool ImGui::IsItemDeactivatedAfterEdit()
-{
-    ImGuiContext& g = *GImGui;
-    return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEditedBefore || (g.ActiveId == 0 && g.ActiveIdHasBeenEditedBefore));
-}
-
-bool ImGui::IsItemFocused()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    if (g.NavId == 0 || g.NavDisableHighlight || g.NavId != window->DC.LastItemId)
-        return false;
-    return true;
-}
-
-bool ImGui::IsItemClicked(ImGuiMouseButton mouse_button)
-{
-    return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_None);
-}
-
-bool ImGui::IsItemToggledOpen()
-{
-    ImGuiContext& g = *GImGui;
-    return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledOpen) ? true : false;
-}
-
-bool ImGui::IsItemToggledSelection()
-{
-    ImGuiContext& g = *GImGui;
-    return (g.CurrentWindow->DC.LastItemStatusFlags & ImGuiItemStatusFlags_ToggledSelection) ? true : false;
-}
-
-bool ImGui::IsAnyItemHovered()
-{
-    ImGuiContext& g = *GImGui;
-    return g.HoveredId != 0 || g.HoveredIdPreviousFrame != 0;
-}
-
-bool ImGui::IsAnyItemActive()
-{
-    ImGuiContext& g = *GImGui;
-    return g.ActiveId != 0;
-}
-
-bool ImGui::IsAnyItemFocused()
-{
-    ImGuiContext& g = *GImGui;
-    return g.NavId != 0 && !g.NavDisableHighlight;
-}
-
-bool ImGui::IsItemVisible()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->ClipRect.Overlaps(window->DC.LastItemRect);
-}
-
-bool ImGui::IsItemEdited()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_Edited) != 0;
-}
-
-// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority.
-void ImGui::SetItemAllowOverlap()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.HoveredId == g.CurrentWindow->DC.LastItemId)
-        g.HoveredIdAllowOverlap = true;
-    if (g.ActiveId == g.CurrentWindow->DC.LastItemId)
-        g.ActiveIdAllowOverlap = true;
-}
-
-ImVec2 ImGui::GetItemRectMin()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.LastItemRect.Min;
-}
-
-ImVec2 ImGui::GetItemRectMax()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.LastItemRect.Max;
-}
-
-ImVec2 ImGui::GetItemRectSize()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.LastItemRect.GetSize();
-}
-
-static ImRect GetViewportRect()
-{
-    ImGuiContext& g = *GImGui;
-    return ImRect(0.0f, 0.0f, g.IO.DisplaySize.x, g.IO.DisplaySize.y);
-}
-
-bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* parent_window = g.CurrentWindow;
-
-    flags |= ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
-    flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove);  // Inherit the NoMove flag
-
-    // Size
-    const ImVec2 content_avail = GetContentRegionAvail();
-    ImVec2 size = ImFloor(size_arg);
-    const int auto_fit_axises = ((size.x == 0.0f) ? (1 << ImGuiAxis_X) : 0x00) | ((size.y == 0.0f) ? (1 << ImGuiAxis_Y) : 0x00);
-    if (size.x <= 0.0f)
-        size.x = ImMax(content_avail.x + size.x, 4.0f); // Arbitrary minimum child size (0.0f causing too much issues)
-    if (size.y <= 0.0f)
-        size.y = ImMax(content_avail.y + size.y, 4.0f);
-    SetNextWindowSize(size);
-
-    // Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value.
-    char title[256];
-    if (name)
-        ImFormatString(title, IM_ARRAYSIZE(title), "%s/%s_%08X", parent_window->Name, name, id);
-    else
-        ImFormatString(title, IM_ARRAYSIZE(title), "%s/%08X", parent_window->Name, id);
-
-    const float backup_border_size = g.Style.ChildBorderSize;
-    if (!border)
-        g.Style.ChildBorderSize = 0.0f;
-    bool ret = Begin(title, NULL, flags);
-    g.Style.ChildBorderSize = backup_border_size;
-
-    ImGuiWindow* child_window = g.CurrentWindow;
-    child_window->ChildId = id;
-    child_window->AutoFitChildAxises = (ImS8)auto_fit_axises;
-
-    // Set the cursor to handle case where the user called SetNextWindowPos()+BeginChild() manually.
-    // While this is not really documented/defined, it seems that the expected thing to do.
-    if (child_window->BeginCount == 1)
-        parent_window->DC.CursorPos = child_window->Pos;
-
-    // Process navigation-in immediately so NavInit can run on first frame
-    if (g.NavActivateId == id && !(flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayerActiveMask != 0 || child_window->DC.NavHasScroll))
-    {
-        FocusWindow(child_window);
-        NavInitWindow(child_window, false);
-        SetActiveID(id+1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item
-        g.ActiveIdSource = ImGuiInputSource_Nav;
-    }
-    return ret;
-}
-
-bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    return BeginChildEx(str_id, window->GetID(str_id), size_arg, border, extra_flags);
-}
-
-bool ImGui::BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
-{
-    IM_ASSERT(id != 0);
-    return BeginChildEx(NULL, id, size_arg, border, extra_flags);
-}
-
-void ImGui::EndChild()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    IM_ASSERT(g.WithinEndChild == false);
-    IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow);   // Mismatched BeginChild()/EndChild() calls
-
-    g.WithinEndChild = true;
-    if (window->BeginCount > 1)
-    {
-        End();
-    }
-    else
-    {
-        ImVec2 sz = window->Size;
-        if (window->AutoFitChildAxises & (1 << ImGuiAxis_X)) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f
-            sz.x = ImMax(4.0f, sz.x);
-        if (window->AutoFitChildAxises & (1 << ImGuiAxis_Y))
-            sz.y = ImMax(4.0f, sz.y);
-        End();
-
-        ImGuiWindow* parent_window = g.CurrentWindow;
-        ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + sz);
-        ItemSize(sz);
-        if ((window->DC.NavLayerActiveMask != 0 || window->DC.NavHasScroll) && !(window->Flags & ImGuiWindowFlags_NavFlattened))
-        {
-            ItemAdd(bb, window->ChildId);
-            RenderNavHighlight(bb, window->ChildId);
-
-            // When browsing a window that has no activable items (scroll only) we keep a highlight on the child
-            if (window->DC.NavLayerActiveMask == 0 && window == g.NavWindow)
-                RenderNavHighlight(ImRect(bb.Min - ImVec2(2,2), bb.Max + ImVec2(2,2)), g.NavId, ImGuiNavHighlightFlags_TypeThin);
-        }
-        else
-        {
-            // Not navigable into
-            ItemAdd(bb, 0);
-        }
-    }
-    g.WithinEndChild = false;
-}
-
-// Helper to create a child window / scrolling region that looks like a normal widget frame.
-bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags)
-{
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
-    PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
-    PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
-    PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
-    bool ret = BeginChild(id, size, true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags);
-    PopStyleVar(3);
-    PopStyleColor();
-    return ret;
-}
-
-void ImGui::EndChildFrame()
-{
-    EndChild();
-}
-
-static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled)
-{
-    window->SetWindowPosAllowFlags       = enabled ? (window->SetWindowPosAllowFlags       | flags) : (window->SetWindowPosAllowFlags       & ~flags);
-    window->SetWindowSizeAllowFlags      = enabled ? (window->SetWindowSizeAllowFlags      | flags) : (window->SetWindowSizeAllowFlags      & ~flags);
-    window->SetWindowCollapsedAllowFlags = enabled ? (window->SetWindowCollapsedAllowFlags | flags) : (window->SetWindowCollapsedAllowFlags & ~flags);
-}
-
-ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    return (ImGuiWindow*)g.WindowsById.GetVoidPtr(id);
-}
-
-ImGuiWindow* ImGui::FindWindowByName(const char* name)
-{
-    ImGuiID id = ImHashStr(name);
-    return FindWindowByID(id);
-}
-
-static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    //IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
-
-    // Create window the first time
-    ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
-    window->Flags = flags;
-    g.WindowsById.SetVoidPtr(window->ID, window);
-
-    // Default/arbitrary window position. Use SetNextWindowPos() with the appropriate condition flag to change the initial position of a window.
-    window->Pos = ImVec2(60, 60);
-
-    // User can disable loading and saving of settings. Tooltip and child windows also don't store settings.
-    if (!(flags & ImGuiWindowFlags_NoSavedSettings))
-        if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
-        {
-            // Retrieve settings from .ini file
-            window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
-            SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
-            window->Pos = ImVec2(settings->Pos.x, settings->Pos.y);
-            window->Collapsed = settings->Collapsed;
-            if (settings->Size.x > 0 && settings->Size.y > 0)
-                size = ImVec2(settings->Size.x, settings->Size.y);
-        }
-    window->Size = window->SizeFull = ImFloor(size);
-    window->DC.CursorStartPos = window->DC.CursorMaxPos = window->Pos; // So first call to CalcContentSize() doesn't return crazy values
-
-    if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0)
-    {
-        window->AutoFitFramesX = window->AutoFitFramesY = 2;
-        window->AutoFitOnlyGrows = false;
-    }
-    else
-    {
-        if (window->Size.x <= 0.0f)
-            window->AutoFitFramesX = 2;
-        if (window->Size.y <= 0.0f)
-            window->AutoFitFramesY = 2;
-        window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0);
-    }
-
-    g.WindowsFocusOrder.push_back(window);
-    if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus)
-        g.Windows.push_front(window); // Quite slow but rare and only once
-    else
-        g.Windows.push_back(window);
-    return window;
-}
-
-static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
-    {
-        // Using -1,-1 on either X/Y axis to preserve the current size.
-        ImRect cr = g.NextWindowData.SizeConstraintRect;
-        new_size.x = (cr.Min.x >= 0 && cr.Max.x >= 0) ? ImClamp(new_size.x, cr.Min.x, cr.Max.x) : window->SizeFull.x;
-        new_size.y = (cr.Min.y >= 0 && cr.Max.y >= 0) ? ImClamp(new_size.y, cr.Min.y, cr.Max.y) : window->SizeFull.y;
-        if (g.NextWindowData.SizeCallback)
-        {
-            ImGuiSizeCallbackData data;
-            data.UserData = g.NextWindowData.SizeCallbackUserData;
-            data.Pos = window->Pos;
-            data.CurrentSize = window->SizeFull;
-            data.DesiredSize = new_size;
-            g.NextWindowData.SizeCallback(&data);
-            new_size = data.DesiredSize;
-        }
-        new_size.x = IM_FLOOR(new_size.x);
-        new_size.y = IM_FLOOR(new_size.y);
-    }
-
-    // Minimum size
-    if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize)))
-    {
-        ImGuiWindow* window_for_height = window;
-        new_size = ImMax(new_size, g.Style.WindowMinSize);
-        new_size.y = ImMax(new_size.y, window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight() + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
-    }
-    return new_size;
-}
-
-static ImVec2 CalcWindowContentSize(ImGuiWindow* window)
-{
-    if (window->Collapsed)
-        if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
-            return window->ContentSize;
-    if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0)
-        return window->ContentSize;
-
-    ImVec2 sz;
-    sz.x = IM_FLOOR((window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : window->DC.CursorMaxPos.x - window->DC.CursorStartPos.x);
-    sz.y = IM_FLOOR((window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : window->DC.CursorMaxPos.y - window->DC.CursorStartPos.y);
-    return sz;
-}
-
-static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_contents)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiStyle& style = g.Style;
-    ImVec2 size_decorations = ImVec2(0.0f, window->TitleBarHeight() + window->MenuBarHeight());
-    ImVec2 size_pad = window->WindowPadding * 2.0f;
-    ImVec2 size_desired = size_contents + size_pad + size_decorations;
-    if (window->Flags & ImGuiWindowFlags_Tooltip)
-    {
-        // Tooltip always resize
-        return size_desired;
-    }
-    else
-    {
-        // Maximum window size is determined by the viewport size or monitor size
-        const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0;
-        const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0;
-        ImVec2 size_min = style.WindowMinSize;
-        if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
-            size_min = ImMin(size_min, ImVec2(4.0f, 4.0f));
-        ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, g.IO.DisplaySize - style.DisplaySafeAreaPadding * 2.0f));
-
-        // When the window cannot fit all contents (either because of constraints, either because screen is too small),
-        // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
-        ImVec2 size_auto_fit_after_constraint = CalcWindowSizeAfterConstraint(window, size_auto_fit);
-        bool will_have_scrollbar_x = (size_auto_fit_after_constraint.x - size_pad.x - size_decorations.x < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar);
-        bool will_have_scrollbar_y = (size_auto_fit_after_constraint.y - size_pad.y - size_decorations.y < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysVerticalScrollbar);
-        if (will_have_scrollbar_x)
-            size_auto_fit.y += style.ScrollbarSize;
-        if (will_have_scrollbar_y)
-            size_auto_fit.x += style.ScrollbarSize;
-        return size_auto_fit;
-    }
-}
-
-ImVec2 ImGui::CalcWindowExpectedSize(ImGuiWindow* window)
-{
-    ImVec2 size_contents = CalcWindowContentSize(window);
-    ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, size_contents);
-    ImVec2 size_final = CalcWindowSizeAfterConstraint(window, size_auto_fit);
-    return size_final;
-}
-
-static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags)
-{
-    if (flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup))
-        return ImGuiCol_PopupBg;
-    if (flags & ImGuiWindowFlags_ChildWindow)
-        return ImGuiCol_ChildBg;
-    return ImGuiCol_WindowBg;
-}
-
-static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& corner_target, const ImVec2& corner_norm, ImVec2* out_pos, ImVec2* out_size)
-{
-    ImVec2 pos_min = ImLerp(corner_target, window->Pos, corner_norm);                // Expected window upper-left
-    ImVec2 pos_max = ImLerp(window->Pos + window->Size, corner_target, corner_norm); // Expected window lower-right
-    ImVec2 size_expected = pos_max - pos_min;
-    ImVec2 size_constrained = CalcWindowSizeAfterConstraint(window, size_expected);
-    *out_pos = pos_min;
-    if (corner_norm.x == 0.0f)
-        out_pos->x -= (size_constrained.x - size_expected.x);
-    if (corner_norm.y == 0.0f)
-        out_pos->y -= (size_constrained.y - size_expected.y);
-    *out_size = size_constrained;
-}
-
-struct ImGuiResizeGripDef
-{
-    ImVec2  CornerPosN;
-    ImVec2  InnerDir;
-    int     AngleMin12, AngleMax12;
-};
-
-static const ImGuiResizeGripDef resize_grip_def[4] =
-{
-    { ImVec2(1,1), ImVec2(-1,-1), 0, 3 }, // Lower-right
-    { ImVec2(0,1), ImVec2(+1,-1), 3, 6 }, // Lower-left
-    { ImVec2(0,0), ImVec2(+1,+1), 6, 9 }, // Upper-left (Unused)
-    { ImVec2(1,0), ImVec2(-1,+1), 9,12 }, // Upper-right (Unused)
-};
-
-static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness)
-{
-    ImRect rect = window->Rect();
-    if (thickness == 0.0f) rect.Max -= ImVec2(1,1);
-    if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness,    rect.Max.x - perp_padding, rect.Min.y + thickness);      // Top
-    if (border_n == 1) return ImRect(rect.Max.x - thickness,    rect.Min.y + perp_padding, rect.Max.x + thickness,    rect.Max.y - perp_padding);   // Right
-    if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness,    rect.Max.x - perp_padding, rect.Max.y + thickness);      // Bottom
-    if (border_n == 3) return ImRect(rect.Min.x - thickness,    rect.Min.y + perp_padding, rect.Min.x + thickness,    rect.Max.y - perp_padding);   // Left
-    IM_ASSERT(0);
-    return ImRect();
-}
-
-// 0..3: corners (Lower-right, Lower-left, Unused, Unused)
-// 4..7: borders (Top, Right, Bottom, Left)
-ImGuiID ImGui::GetWindowResizeID(ImGuiWindow* window, int n)
-{
-    IM_ASSERT(n >= 0 && n <= 7);
-    ImGuiID id = window->ID;
-    id = ImHashStr("#RESIZE", 0, id);
-    id = ImHashData(&n, sizeof(int), id);
-    return id;
-}
-
-// Handle resize for: Resize Grips, Borders, Gamepad
-// Return true when using auto-fit (double click on resize grip)
-static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4])
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindowFlags flags = window->Flags;
-
-    if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
-        return false;
-    if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit/fallback Debug window.
-        return false;
-
-    bool ret_auto_fit = false;
-    const int resize_border_count = g.IO.ConfigWindowsResizeFromEdges ? 4 : 0;
-    const float grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
-    const float grip_hover_inner_size = IM_FLOOR(grip_draw_size * 0.75f);
-    const float grip_hover_outer_size = g.IO.ConfigWindowsResizeFromEdges ? WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS : 0.0f;
-
-    ImVec2 pos_target(FLT_MAX, FLT_MAX);
-    ImVec2 size_target(FLT_MAX, FLT_MAX);
-
-    // Resize grips and borders are on layer 1
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
-
-    // Manual resize grips
-    PushID("#RESIZE");
-    for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
-    {
-        const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
-        const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
-
-        // Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
-        ImRect resize_rect(corner - grip.InnerDir * grip_hover_outer_size, corner + grip.InnerDir * grip_hover_inner_size);
-        if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x);
-        if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
-        bool hovered, held;
-        ButtonBehavior(resize_rect, window->GetID(resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
-        //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
-        if (hovered || held)
-            g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
-
-        if (held && g.IO.MouseDoubleClicked[0] && resize_grip_n == 0)
-        {
-            // Manual auto-fit when double-clicking
-            size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit);
-            ret_auto_fit = true;
-            ClearActiveID();
-        }
-        else if (held)
-        {
-            // Resize from any of the four corners
-            // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
-            ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPosN); // Corner of the window corresponding to our corner grip
-            CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPosN, &pos_target, &size_target);
-        }
-        if (resize_grip_n == 0 || held || hovered)
-            resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip);
-    }
-    for (int border_n = 0; border_n < resize_border_count; border_n++)
-    {
-        bool hovered, held;
-        ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS);
-        ButtonBehavior(border_rect, window->GetID(border_n + 4), &hovered, &held, ImGuiButtonFlags_FlattenChildren);
-        //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
-        if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held)
-        {
-            g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
-            if (held)
-                *border_held = border_n;
-        }
-        if (held)
-        {
-            ImVec2 border_target = window->Pos;
-            ImVec2 border_posn;
-            if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Top
-            if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Right
-            if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Bottom
-            if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + WINDOWS_RESIZE_FROM_EDGES_HALF_THICKNESS); } // Left
-            CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target);
-        }
-    }
-    PopID();
-
-    // Restore nav layer
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
-
-    // Navigation resize (keyboard/gamepad)
-    if (g.NavWindowingTarget && g.NavWindowingTarget->RootWindow == window)
-    {
-        ImVec2 nav_resize_delta;
-        if (g.NavInputSource == ImGuiInputSource_NavKeyboard && g.IO.KeyShift)
-            nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down);
-        if (g.NavInputSource == ImGuiInputSource_NavGamepad)
-            nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_Down);
-        if (nav_resize_delta.x != 0.0f || nav_resize_delta.y != 0.0f)
-        {
-            const float NAV_RESIZE_SPEED = 600.0f;
-            nav_resize_delta *= ImFloor(NAV_RESIZE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y));
-            g.NavWindowingToggleLayer = false;
-            g.NavDisableMouseHover = true;
-            resize_grip_col[0] = GetColorU32(ImGuiCol_ResizeGripActive);
-            // FIXME-NAV: Should store and accumulate into a separate size buffer to handle sizing constraints properly, right now a constraint will make us stuck.
-            size_target = CalcWindowSizeAfterConstraint(window, window->SizeFull + nav_resize_delta);
-        }
-    }
-
-    // Apply back modified position/size to window
-    if (size_target.x != FLT_MAX)
-    {
-        window->SizeFull = size_target;
-        MarkIniSettingsDirty(window);
-    }
-    if (pos_target.x != FLT_MAX)
-    {
-        window->Pos = ImFloor(pos_target);
-        MarkIniSettingsDirty(window);
-    }
-
-    window->Size = window->SizeFull;
-    return ret_auto_fit;
-}
-
-static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& rect, const ImVec2& padding)
-{
-    ImGuiContext& g = *GImGui;
-    ImVec2 size_for_clamping = (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) ? ImVec2(window->Size.x, window->TitleBarHeight()) : window->Size;
-    window->Pos = ImMin(rect.Max - padding, ImMax(window->Pos + size_for_clamping, rect.Min + padding) - size_for_clamping);
-}
-
-static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    float rounding = window->WindowRounding;
-    float border_size = window->WindowBorderSize;
-    if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground))
-        window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size);
-
-    int border_held = window->ResizeBorderHeld;
-    if (border_held != -1)
-    {
-        struct ImGuiResizeBorderDef
-        {
-            ImVec2 InnerDir;
-            ImVec2 CornerPosN1, CornerPosN2;
-            float  OuterAngle;
-        };
-        static const ImGuiResizeBorderDef resize_border_def[4] =
-        {
-            { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top
-            { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right
-            { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom
-            { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f }  // Left
-        };
-        const ImGuiResizeBorderDef& def = resize_border_def[border_held];
-        ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
-        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle);
-        window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI*0.25f);
-        window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual
-    }
-    if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
-    {
-        float y = window->Pos.y + window->TitleBarHeight() - 1;
-        window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize);
-    }
-}
-
-// Draw background and borders
-// Draw and handle scrollbars
-void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiStyle& style = g.Style;
-    ImGuiWindowFlags flags = window->Flags;
-
-    // Ensure that ScrollBar doesn't read last frame's SkipItems
-    window->SkipItems = false;
-
-    // Draw window + handle manual resize
-    // As we highlight the title bar when want_focus is set, multiple reappearing windows will have have their title bar highlighted on their reappearing frame.
-    const float window_rounding = window->WindowRounding;
-    const float window_border_size = window->WindowBorderSize;
-    if (window->Collapsed)
-    {
-        // Title bar only
-        float backup_border_size = style.FrameBorderSize;
-        g.Style.FrameBorderSize = window->WindowBorderSize;
-        ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);
-        RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);
-        g.Style.FrameBorderSize = backup_border_size;
-    }
-    else
-    {
-        // Window background
-        if (!(flags & ImGuiWindowFlags_NoBackground))
-        {
-            ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
-            bool override_alpha = false;
-            float alpha = 1.0f;
-            if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha)
-            {
-                alpha = g.NextWindowData.BgAlphaVal;
-                override_alpha = true;
-            }
-            if (override_alpha)
-                bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT);
-            window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
-        }
-
-        // Title bar
-        if (!(flags & ImGuiWindowFlags_NoTitleBar))
-        {
-            ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
-            window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top);
-        }
-
-        // Menu bar
-        if (flags & ImGuiWindowFlags_MenuBar)
-        {
-            ImRect menu_bar_rect = window->MenuBarRect();
-            menu_bar_rect.ClipWith(window->Rect());  // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
-            window->DrawList->AddRectFilled(menu_bar_rect.Min + ImVec2(window_border_size, 0), menu_bar_rect.Max - ImVec2(window_border_size, 0), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawCornerFlags_Top);
-            if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
-                window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
-        }
-
-        // Scrollbars
-        if (window->ScrollbarX)
-            Scrollbar(ImGuiAxis_X);
-        if (window->ScrollbarY)
-            Scrollbar(ImGuiAxis_Y);
-
-        // Render resize grips (after their input handling so we don't have a frame of latency)
-        if (!(flags & ImGuiWindowFlags_NoResize))
-        {
-            for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
-            {
-                const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
-                const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
-                window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, resize_grip_draw_size) : ImVec2(resize_grip_draw_size, window_border_size)));
-                window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(resize_grip_draw_size, window_border_size) : ImVec2(window_border_size, resize_grip_draw_size)));
-                window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12);
-                window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]);
-            }
-        }
-
-        // Borders
-        RenderWindowOuterBorders(window);
-    }
-}
-
-// Render title text, collapse button, close button
-void ImGui::RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiStyle& style = g.Style;
-    ImGuiWindowFlags flags = window->Flags;
-
-    const bool has_close_button = (p_open != NULL);
-    const bool has_collapse_button = !(flags & ImGuiWindowFlags_NoCollapse) && (style.WindowMenuButtonPosition != ImGuiDir_None);
-
-    // Close & Collapse button are on the Menu NavLayer and don't default focus (unless there's nothing else on that layer)
-    const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
-    window->DC.ItemFlags |= ImGuiItemFlags_NoNavDefaultFocus;
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
-
-    // Layout buttons
-    // FIXME: Would be nice to generalize the subtleties expressed here into reusable code.
-    float pad_l = style.FramePadding.x;
-    float pad_r = style.FramePadding.x;
-    float button_sz = g.FontSize;
-    ImVec2 close_button_pos;
-    ImVec2 collapse_button_pos;
-    if (has_close_button)
-    {
-        pad_r += button_sz;
-        close_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
-    }
-    if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Right)
-    {
-        pad_r += button_sz;
-        collapse_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
-    }
-    if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Left)
-    {
-        collapse_button_pos = ImVec2(title_bar_rect.Min.x + pad_l - style.FramePadding.x, title_bar_rect.Min.y);
-        pad_l += button_sz;
-    }
-
-    // Collapse button (submitting first so it gets priority when choosing a navigation init fallback)
-    if (has_collapse_button)
-        if (CollapseButton(window->GetID("#COLLAPSE"), collapse_button_pos))
-            window->WantCollapseToggle = true; // Defer actual collapsing to next frame as we are too far in the Begin() function
-
-    // Close button
-    if (has_close_button)
-        if (CloseButton(window->GetID("#CLOSE"), close_button_pos))
-            *p_open = false;
-
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
-    window->DC.ItemFlags = item_flags_backup;
-
-    // Title bar text (with: horizontal alignment, avoiding collapse/close button, optional "unsaved document" marker)
-    // FIXME: Refactor text alignment facilities along with RenderText helpers, this is WAY too much messy code..
-    const char* UNSAVED_DOCUMENT_MARKER = "*";
-    const float marker_size_x = (flags & ImGuiWindowFlags_UnsavedDocument) ? CalcTextSize(UNSAVED_DOCUMENT_MARKER, NULL, false).x : 0.0f;
-    const ImVec2 text_size = CalcTextSize(name, NULL, true) + ImVec2(marker_size_x, 0.0f);
-
-    // As a nice touch we try to ensure that centered title text doesn't get affected by visibility of Close/Collapse button,
-    // while uncentered title text will still reach edges correct.
-    if (pad_l > style.FramePadding.x)
-        pad_l += g.Style.ItemInnerSpacing.x;
-    if (pad_r > style.FramePadding.x)
-        pad_r += g.Style.ItemInnerSpacing.x;
-    if (style.WindowTitleAlign.x > 0.0f && style.WindowTitleAlign.x < 1.0f)
-    {
-        float centerness = ImSaturate(1.0f - ImFabs(style.WindowTitleAlign.x - 0.5f) * 2.0f); // 0.0f on either edges, 1.0f on center
-        float pad_extend = ImMin(ImMax(pad_l, pad_r), title_bar_rect.GetWidth() - pad_l - pad_r - text_size.x);
-        pad_l = ImMax(pad_l, pad_extend * centerness);
-        pad_r = ImMax(pad_r, pad_extend * centerness);
-    }
-
-    ImRect layout_r(title_bar_rect.Min.x + pad_l, title_bar_rect.Min.y, title_bar_rect.Max.x - pad_r, title_bar_rect.Max.y);
-    ImRect clip_r(layout_r.Min.x, layout_r.Min.y, layout_r.Max.x + g.Style.ItemInnerSpacing.x, layout_r.Max.y);
-    //if (g.IO.KeyCtrl) window->DrawList->AddRect(layout_r.Min, layout_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG]
-    RenderTextClipped(layout_r.Min, layout_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_r);
-    if (flags & ImGuiWindowFlags_UnsavedDocument)
-    {
-        ImVec2 marker_pos = ImVec2(ImMax(layout_r.Min.x, layout_r.Min.x + (layout_r.GetWidth() - text_size.x) * style.WindowTitleAlign.x) + text_size.x, layout_r.Min.y) + ImVec2(2 - marker_size_x, 0.0f);
-        ImVec2 off = ImVec2(0.0f, IM_FLOOR(-g.FontSize * 0.25f));
-        RenderTextClipped(marker_pos + off, layout_r.Max + off, UNSAVED_DOCUMENT_MARKER, NULL, NULL, ImVec2(0, style.WindowTitleAlign.y), &clip_r);
-    }
-}
-
-void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window)
-{
-    window->ParentWindow = parent_window;
-    window->RootWindow = window->RootWindowForTitleBarHighlight = window->RootWindowForNav = window;
-    if (parent_window && (flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
-        window->RootWindow = parent_window->RootWindow;
-    if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
-        window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight;
-    while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened)
-    {
-        IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL);
-        window->RootWindowForNav = window->RootWindowForNav->ParentWindow;
-    }
-}
-
-// Push a new Dear ImGui window to add widgets to.
-// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
-// - Begin/End can be called multiple times during the frame with the same window name to append content.
-// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file).
-//   You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file.
-// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned.
-// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed.
-bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    IM_ASSERT(name != NULL && name[0] != '\0');     // Window name required
-    IM_ASSERT(g.WithinFrameScope);                  // Forgot to call ImGui::NewFrame()
-    IM_ASSERT(g.FrameCountEnded != g.FrameCount);   // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet
-
-    // Find or create
-    ImGuiWindow* window = FindWindowByName(name);
-    const bool window_just_created = (window == NULL);
-    if (window_just_created)
-    {
-        ImVec2 size_on_first_use = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize) ? g.NextWindowData.SizeVal : ImVec2(0.0f, 0.0f); // Any condition flag will do since we are creating a new window here.
-        window = CreateNewWindow(name, size_on_first_use, flags);
-    }
-
-    // Automatically disable manual moving/resizing when NoInputs is set
-    if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs)
-        flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
-
-    if (flags & ImGuiWindowFlags_NavFlattened)
-        IM_ASSERT(flags & ImGuiWindowFlags_ChildWindow);
-
-    const int current_frame = g.FrameCount;
-    const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
-    window->IsFallbackWindow = (g.CurrentWindowStack.Size == 0 && g.WithinFrameScopeWithImplicitWindow);
-
-    // Update the Appearing flag
-    bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1);   // Not using !WasActive because the implicit "Debug" window would always toggle off->on
-    const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0);
-    if (flags & ImGuiWindowFlags_Popup)
-    {
-        ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
-        window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
-        window_just_activated_by_user |= (window != popup_ref.Window);
-    }
-    window->Appearing = (window_just_activated_by_user || window_just_appearing_after_hidden_for_resize);
-    if (window->Appearing)
-        SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
-
-    // Update Flags, LastFrameActive, BeginOrderXXX fields
-    if (first_begin_of_the_frame)
-    {
-        window->Flags = (ImGuiWindowFlags)flags;
-        window->LastFrameActive = current_frame;
-        window->LastTimeActive = (float)g.Time;
-        window->BeginOrderWithinParent = 0;
-        window->BeginOrderWithinContext = (short)(g.WindowsActiveCount++);
-    }
-    else
-    {
-        flags = window->Flags;
-    }
-
-    // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
-    ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back();
-    ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow;
-    IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
-
-    // We allow window memory to be compacted so recreate the base stack when needed.
-    if (window->IDStack.Size == 0)
-        window->IDStack.push_back(window->ID);
-
-    // Add to stack
-    // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
-    g.CurrentWindowStack.push_back(window);
-    g.CurrentWindow = NULL;
-    ErrorCheckBeginEndCompareStacksSize(window, true);
-    if (flags & ImGuiWindowFlags_Popup)
-    {
-        ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
-        popup_ref.Window = window;
-        g.BeginPopupStack.push_back(popup_ref);
-        window->PopupId = popup_ref.PopupId;
-    }
-
-    if (window_just_appearing_after_hidden_for_resize && !(flags & ImGuiWindowFlags_ChildWindow))
-        window->NavLastIds[0] = 0;
-
-    // Update ->RootWindow and others pointers (before any possible call to FocusWindow)
-    if (first_begin_of_the_frame)
-        UpdateWindowParentAndRootLinks(window, flags, parent_window);
-
-    // Process SetNextWindow***() calls
-    bool window_pos_set_by_api = false;
-    bool window_size_x_set_by_api = false, window_size_y_set_by_api = false;
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos)
-    {
-        window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0;
-        if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f)
-        {
-            // May be processed on the next frame if this is our first frame and we are measuring size
-            // FIXME: Look into removing the branch so everything can go through this same code path for consistency.
-            window->SetWindowPosVal = g.NextWindowData.PosVal;
-            window->SetWindowPosPivot = g.NextWindowData.PosPivotVal;
-            window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
-        }
-        else
-        {
-            SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
-        }
-    }
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)
-    {
-        window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
-        window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
-        SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
-    }
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize)
-        window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal;
-    else if (first_begin_of_the_frame)
-        window->ContentSizeExplicit = ImVec2(0.0f, 0.0f);
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed)
-        SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
-    if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus)
-        FocusWindow(window);
-    if (window->Appearing)
-        SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
-
-    // When reusing window again multiple times a frame, just append content (don't need to setup again)
-    if (first_begin_of_the_frame)
-    {
-        // Initialize
-        const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345)
-        window->Active = true;
-        window->HasCloseButton = (p_open != NULL);
-        window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX);
-        window->IDStack.resize(1);
-
-        // Restore buffer capacity when woken from a compacted state, to avoid
-        if (window->MemoryCompacted)
-            GcAwakeTransientWindowBuffers(window);
-
-        // Update stored window name when it changes (which can _only_ happen with the "###" operator, so the ID would stay unchanged).
-        // The title bar always display the 'name' parameter, so we only update the string storage if it needs to be visible to the end-user elsewhere.
-        bool window_title_visible_elsewhere = false;
-        if (g.NavWindowingList != NULL && (window->Flags & ImGuiWindowFlags_NoNavFocus) == 0)   // Window titles visible when using CTRL+TAB
-            window_title_visible_elsewhere = true;
-        if (window_title_visible_elsewhere && !window_just_created && strcmp(name, window->Name) != 0)
-        {
-            size_t buf_len = (size_t)window->NameBufLen;
-            window->Name = ImStrdupcpy(window->Name, &buf_len, name);
-            window->NameBufLen = (int)buf_len;
-        }
-
-        // UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS
-
-        // Update contents size from last frame for auto-fitting (or use explicit size)
-        window->ContentSize = CalcWindowContentSize(window);
-        if (window->HiddenFramesCanSkipItems > 0)
-            window->HiddenFramesCanSkipItems--;
-        if (window->HiddenFramesCannotSkipItems > 0)
-            window->HiddenFramesCannotSkipItems--;
-
-        // Hide new windows for one frame until they calculate their size
-        if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api))
-            window->HiddenFramesCannotSkipItems = 1;
-
-        // Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows)
-        // We reset Size/ContentSize for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size.
-        if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0)
-        {
-            window->HiddenFramesCannotSkipItems = 1;
-            if (flags & ImGuiWindowFlags_AlwaysAutoResize)
-            {
-                if (!window_size_x_set_by_api)
-                    window->Size.x = window->SizeFull.x = 0.f;
-                if (!window_size_y_set_by_api)
-                    window->Size.y = window->SizeFull.y = 0.f;
-                window->ContentSize = ImVec2(0.f, 0.f);
-            }
-        }
-
-        // SELECT VIEWPORT
-        // FIXME-VIEWPORT: In the docking/viewport branch, this is the point where we select the current viewport (which may affect the style)
-        SetCurrentWindow(window);
-
-        // LOCK BORDER SIZE AND PADDING FOR THE FRAME (so that altering them doesn't cause inconsistencies)
-
-        if (flags & ImGuiWindowFlags_ChildWindow)
-            window->WindowBorderSize = style.ChildBorderSize;
-        else
-            window->WindowBorderSize = ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
-        window->WindowPadding = style.WindowPadding;
-        if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
-            window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
-
-        // Collapse window by double-clicking on title bar
-        // At this point we don't have a clipping rectangle setup yet, so we can use the title bar area for hit detection and drawing
-        if (!(flags & ImGuiWindowFlags_NoTitleBar) && !(flags & ImGuiWindowFlags_NoCollapse))
-        {
-            // We don't use a regular button+id to test for double-click on title bar (mostly due to legacy reason, could be fixed), so verify that we don't have items over the title bar.
-            ImRect title_bar_rect = window->TitleBarRect();
-            if (g.HoveredWindow == window && g.HoveredId == 0 && g.HoveredIdPreviousFrame == 0 && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseDoubleClicked[0])
-                window->WantCollapseToggle = true;
-            if (window->WantCollapseToggle)
-            {
-                window->Collapsed = !window->Collapsed;
-                MarkIniSettingsDirty(window);
-                FocusWindow(window);
-            }
-        }
-        else
-        {
-            window->Collapsed = false;
-        }
-        window->WantCollapseToggle = false;
-
-        // SIZE
-
-        // Calculate auto-fit size, handle automatic resize
-        const ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, window->ContentSize);
-        bool use_current_size_for_scrollbar_x = window_just_created;
-        bool use_current_size_for_scrollbar_y = window_just_created;
-        if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window->Collapsed)
-        {
-            // Using SetNextWindowSize() overrides ImGuiWindowFlags_AlwaysAutoResize, so it can be used on tooltips/popups, etc.
-            if (!window_size_x_set_by_api)
-            {
-                window->SizeFull.x = size_auto_fit.x;
-                use_current_size_for_scrollbar_x = true;
-            }
-            if (!window_size_y_set_by_api)
-            {
-                window->SizeFull.y = size_auto_fit.y;
-                use_current_size_for_scrollbar_y = true;
-            }
-        }
-        else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
-        {
-            // Auto-fit may only grow window during the first few frames
-            // We still process initial auto-fit on collapsed windows to get a window width, but otherwise don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed.
-            if (!window_size_x_set_by_api && window->AutoFitFramesX > 0)
-            {
-                window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
-                use_current_size_for_scrollbar_x = true;
-            }
-            if (!window_size_y_set_by_api && window->AutoFitFramesY > 0)
-            {
-                window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
-                use_current_size_for_scrollbar_y = true;
-            }
-            if (!window->Collapsed)
-                MarkIniSettingsDirty(window);
-        }
-
-        // Apply minimum/maximum window size constraints and final size
-        window->SizeFull = CalcWindowSizeAfterConstraint(window, window->SizeFull);
-        window->Size = window->Collapsed && !(flags & ImGuiWindowFlags_ChildWindow) ? window->TitleBarRect().GetSize() : window->SizeFull;
-
-        // Decoration size
-        const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
-
-        // POSITION
-
-        // Popup latch its initial position, will position itself when it appears next frame
-        if (window_just_activated_by_user)
-        {
-            window->AutoPosLastDirection = ImGuiDir_None;
-            if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api)
-                window->Pos = g.BeginPopupStack.back().OpenPopupPos;
-        }
-
-        // Position child window
-        if (flags & ImGuiWindowFlags_ChildWindow)
-        {
-            IM_ASSERT(parent_window && parent_window->Active);
-            window->BeginOrderWithinParent = (short)parent_window->DC.ChildWindows.Size;
-            parent_window->DC.ChildWindows.push_back(window);
-            if (!(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api && !window_is_child_tooltip)
-                window->Pos = parent_window->DC.CursorPos;
-        }
-
-        const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
-        if (window_pos_with_pivot)
-            SetWindowPos(window, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
-        else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
-            window->Pos = FindBestWindowPosForPopup(window);
-        else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
-            window->Pos = FindBestWindowPosForPopup(window);
-        else if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api && !window_is_child_tooltip)
-            window->Pos = FindBestWindowPosForPopup(window);
-
-        // Clamp position/size so window stays visible within its viewport or monitor
-        // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
-        ImRect viewport_rect(GetViewportRect());
-        if (!window_pos_set_by_api && !(flags & ImGuiWindowFlags_ChildWindow) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
-        {
-            ImVec2 clamp_padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding);
-            if (viewport_rect.GetWidth() > 0 && viewport_rect.GetHeight() > 0.0f)
-            {
-                ClampWindowRect(window, viewport_rect, clamp_padding);
-            }
-        }
-        window->Pos = ImFloor(window->Pos);
-
-        // Lock window rounding for the frame (so that altering them doesn't cause inconsistencies)
-        window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
-
-        // Apply window focus (new and reactivated windows are moved to front)
-        bool want_focus = false;
-        if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
-        {
-            if (flags & ImGuiWindowFlags_Popup)
-                want_focus = true;
-            else if ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) == 0)
-                want_focus = true;
-        }
-
-        // Handle manual resize: Resize Grips, Borders, Gamepad
-        int border_held = -1;
-        ImU32 resize_grip_col[4] = {};
-        const int resize_grip_count = g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it.
-        const float resize_grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
-        if (!window->Collapsed)
-            if (UpdateWindowManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0]))
-                use_current_size_for_scrollbar_x = use_current_size_for_scrollbar_y = true;
-        window->ResizeBorderHeld = (signed char)border_held;
-
-        // SCROLLBAR VISIBILITY
-
-        // Update scrollbar visibility (based on the Size that was effective during last frame or the auto-resized Size).
-        if (!window->Collapsed)
-        {
-            // When reading the current size we need to read it after size constraints have been applied.
-            // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again.
-            ImVec2 avail_size_from_current_frame = ImVec2(window->SizeFull.x, window->SizeFull.y - decoration_up_height);
-            ImVec2 avail_size_from_last_frame = window->InnerRect.GetSize() + window->ScrollbarSizes;
-            ImVec2 needed_size_from_last_frame = window_just_created ? ImVec2(0, 0) : window->ContentSize + window->WindowPadding * 2.0f;
-            float size_x_for_scrollbars = use_current_size_for_scrollbar_x ? avail_size_from_current_frame.x : avail_size_from_last_frame.x;
-            float size_y_for_scrollbars = use_current_size_for_scrollbar_y ? avail_size_from_current_frame.y : avail_size_from_last_frame.y;
-            //bool scrollbar_y_from_last_frame = window->ScrollbarY; // FIXME: May want to use that in the ScrollbarX expression? How many pros vs cons?
-            window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar));
-            window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((needed_size_from_last_frame.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
-            if (window->ScrollbarX && !window->ScrollbarY)
-                window->ScrollbarY = (needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar);
-            window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
-        }
-
-        // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
-        // Update various regions. Variables they depends on should be set above in this function.
-        // We set this up after processing the resize grip so that our rectangles doesn't lag by a frame.
-
-        // Outer rectangle
-        // Not affected by window border size. Used by:
-        // - FindHoveredWindow() (w/ extra padding when border resize is enabled)
-        // - Begin() initial clipping rect for drawing window background and borders.
-        // - Begin() clipping whole child
-        const ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect;
-        const ImRect outer_rect = window->Rect();
-        const ImRect title_bar_rect = window->TitleBarRect();
-        window->OuterRectClipped = outer_rect;
-        window->OuterRectClipped.ClipWith(host_rect);
-
-        // Inner rectangle
-        // Not affected by window border size. Used by:
-        // - InnerClipRect
-        // - ScrollToBringRectIntoView()
-        // - NavUpdatePageUpPageDown()
-        // - Scrollbar()
-        window->InnerRect.Min.x = window->Pos.x;
-        window->InnerRect.Min.y = window->Pos.y + decoration_up_height;
-        window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
-        window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
-
-        // Inner clipping rectangle.
-        // Will extend a little bit outside the normal work region.
-        // This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
-        // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
-        // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
-        // Affected by window/frame border size. Used by:
-        // - Begin() initial clip rect
-        float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize);
-        window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
-        window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size);
-        window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
-        window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize);
-        window->InnerClipRect.ClipWithFull(host_rect);
-
-        // Default item width. Make it proportional to window size if window manually resizes
-        if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize))
-            window->ItemWidthDefault = ImFloor(window->Size.x * 0.65f);
-        else
-            window->ItemWidthDefault = ImFloor(g.FontSize * 16.0f);
-
-        // SCROLLING
-
-        // Lock down maximum scrolling
-        // The value of ScrollMax are ahead from ScrollbarX/ScrollbarY which is intentionally using InnerRect from previous rect in order to accommodate
-        // for right/bottom aligned items without creating a scrollbar.
-        window->ScrollMax.x = ImMax(0.0f, window->ContentSize.x + window->WindowPadding.x * 2.0f - window->InnerRect.GetWidth());
-        window->ScrollMax.y = ImMax(0.0f, window->ContentSize.y + window->WindowPadding.y * 2.0f - window->InnerRect.GetHeight());
-
-        // Apply scrolling
-        window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window, true);
-        window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
-
-        // DRAWING
-
-        // Setup draw list and outer clipping rectangle
-        window->DrawList->Clear();
-        window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
-        PushClipRect(host_rect.Min, host_rect.Max, false);
-
-        // Draw modal window background (darkens what is behind them, all viewports)
-        const bool dim_bg_for_modal = (flags & ImGuiWindowFlags_Modal) && window == GetTopMostPopupModal() && window->HiddenFramesCannotSkipItems <= 0;
-        const bool dim_bg_for_window_list = g.NavWindowingTargetAnim && (window == g.NavWindowingTargetAnim->RootWindow);
-        if (dim_bg_for_modal || dim_bg_for_window_list)
-        {
-            const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio);
-            window->DrawList->AddRectFilled(viewport_rect.Min, viewport_rect.Max, dim_bg_col);
-        }
-
-        // Draw navigation selection/windowing rectangle background
-        if (dim_bg_for_window_list && window == g.NavWindowingTargetAnim)
-        {
-            ImRect bb = window->Rect();
-            bb.Expand(g.FontSize);
-            if (!bb.Contains(viewport_rect)) // Avoid drawing if the window covers all the viewport anyway
-                window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha * 0.25f), g.Style.WindowRounding);
-        }
-
-        // Since 1.71, child window can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call.
-        // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order.
-        // We disable this when the parent window has zero vertices, which is a common pattern leading to laying out multiple overlapping child.
-        // We also disabled this when we have dimming overlay behind this specific one child.
-        // FIXME: More code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected.
-        {
-            bool render_decorations_in_parent = false;
-            if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
-                if (window->DrawList->CmdBuffer.back().ElemCount == 0 && parent_window->DrawList->VtxBuffer.Size > 0)
-                    render_decorations_in_parent = true;
-            if (render_decorations_in_parent)
-                window->DrawList = parent_window->DrawList;
-
-            // Handle title bar, scrollbar, resize grips and resize borders
-            const ImGuiWindow* window_to_highlight = g.NavWindowingTarget ? g.NavWindowingTarget : g.NavWindow;
-            const bool title_bar_is_highlight = want_focus || (window_to_highlight && window->RootWindowForTitleBarHighlight == window_to_highlight->RootWindowForTitleBarHighlight);
-            RenderWindowDecorations(window, title_bar_rect, title_bar_is_highlight, resize_grip_count, resize_grip_col, resize_grip_draw_size);
-
-            if (render_decorations_in_parent)
-                window->DrawList = &window->DrawListInst;
-        }
-
-        // Draw navigation selection/windowing rectangle border
-        if (g.NavWindowingTargetAnim == window)
-        {
-            float rounding = ImMax(window->WindowRounding, g.Style.WindowRounding);
-            ImRect bb = window->Rect();
-            bb.Expand(g.FontSize);
-            if (bb.Contains(viewport_rect)) // If a window fits the entire viewport, adjust its highlight inward
-            {
-                bb.Expand(-g.FontSize - 1.0f);
-                rounding = window->WindowRounding;
-            }
-            window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), rounding, ~0, 3.0f);
-        }
-
-        // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
-
-        // Work rectangle.
-        // Affected by window padding and border size. Used by:
-        // - Columns() for right-most edge
-        // - TreeNode(), CollapsingHeader() for right-most edge
-        // - BeginTabBar() for right-most edge
-        const bool allow_scrollbar_x = !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar);
-        const bool allow_scrollbar_y = !(flags & ImGuiWindowFlags_NoScrollbar);
-        const float work_rect_size_x = (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : ImMax(allow_scrollbar_x ? window->ContentSize.x : 0.0f, window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
-        const float work_rect_size_y = (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : ImMax(allow_scrollbar_y ? window->ContentSize.y : 0.0f, window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
-        window->WorkRect.Min.x = ImFloor(window->InnerRect.Min.x - window->Scroll.x + ImMax(window->WindowPadding.x, window->WindowBorderSize));
-        window->WorkRect.Min.y = ImFloor(window->InnerRect.Min.y - window->Scroll.y + ImMax(window->WindowPadding.y, window->WindowBorderSize));
-        window->WorkRect.Max.x = window->WorkRect.Min.x + work_rect_size_x;
-        window->WorkRect.Max.y = window->WorkRect.Min.y + work_rect_size_y;
-
-        // [LEGACY] Content Region
-        // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
-        // Used by:
-        // - Mouse wheel scrolling + many other things
-        window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x;
-        window->ContentRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + decoration_up_height;
-        window->ContentRegionRect.Max.x = window->ContentRegionRect.Min.x + (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : (window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
-        window->ContentRegionRect.Max.y = window->ContentRegionRect.Min.y + (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : (window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
-
-        // Setup drawing context
-        // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
-        window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x;
-        window->DC.GroupOffset.x = 0.0f;
-        window->DC.ColumnsOffset.x = 0.0f;
-        window->DC.CursorStartPos = window->Pos + ImVec2(window->DC.Indent.x + window->DC.ColumnsOffset.x, decoration_up_height + window->WindowPadding.y - window->Scroll.y);
-        window->DC.CursorPos = window->DC.CursorStartPos;
-        window->DC.CursorPosPrevLine = window->DC.CursorPos;
-        window->DC.CursorMaxPos = window->DC.CursorStartPos;
-        window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f);
-        window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f;
-
-        window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
-        window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
-        window->DC.NavLayerActiveMask = window->DC.NavLayerActiveMaskNext;
-        window->DC.NavLayerActiveMaskNext = 0x00;
-        window->DC.NavFocusScopeIdCurrent = parent_window ? parent_window->DC.NavFocusScopeIdCurrent : 0;
-        window->DC.NavHideHighlightOneFrame = false;
-        window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f);
-
-        window->DC.MenuBarAppending = false;
-        window->DC.MenuBarOffset.x = ImMax(ImMax(window->WindowPadding.x, style.ItemSpacing.x), g.NextWindowData.MenuBarOffsetMinVal.x);
-        window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y;
-        window->DC.MenuColumns.Update(3, style.ItemSpacing.x, window_just_activated_by_user);
-        window->DC.TreeDepth = 0;
-        window->DC.TreeJumpToParentOnPopMask = 0x00;
-        window->DC.ChildWindows.resize(0);
-        window->DC.StateStorage = &window->StateStorage;
-        window->DC.CurrentColumns = NULL;
-        window->DC.LayoutType = ImGuiLayoutType_Vertical;
-        window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical;
-        window->DC.FocusCounterRegular = window->DC.FocusCounterTabStop = -1;
-
-        window->DC.ItemWidth = window->ItemWidthDefault;
-        window->DC.TextWrapPos = -1.0f; // disabled
-        window->DC.ItemFlagsStack.resize(0);
-        window->DC.ItemWidthStack.resize(0);
-        window->DC.TextWrapPosStack.resize(0);
-        window->DC.GroupStack.resize(0);
-        window->DC.ItemFlags = parent_window ? parent_window->DC.ItemFlags : ImGuiItemFlags_Default_;
-        if (parent_window)
-            window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
-
-        if (window->AutoFitFramesX > 0)
-            window->AutoFitFramesX--;
-        if (window->AutoFitFramesY > 0)
-            window->AutoFitFramesY--;
-
-        // Apply focus (we need to call FocusWindow() AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
-        if (want_focus)
-        {
-            FocusWindow(window);
-            NavInitWindow(window, false);
-        }
-
-        // Title bar
-        if (!(flags & ImGuiWindowFlags_NoTitleBar))
-            RenderWindowTitleBarContents(window, title_bar_rect, name, p_open);
-
-        // Pressing CTRL+C while holding on a window copy its content to the clipboard
-        // This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope.
-        // Maybe we can support CTRL+C on every element?
-        /*
-        if (g.ActiveId == move_id)
-            if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C))
-                LogToClipboard();
-        */
-
-        // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
-        // This is useful to allow creating context menus on title bar only, etc.
-        window->DC.LastItemId = window->MoveId;
-        window->DC.LastItemStatusFlags = IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0;
-        window->DC.LastItemRect = title_bar_rect;
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-        if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
-            IMGUI_TEST_ENGINE_ITEM_ADD(window->DC.LastItemRect, window->DC.LastItemId);
-#endif
-    }
-    else
-    {
-        // Append
-        SetCurrentWindow(window);
-    }
-
-    PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true);
-
-    // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
-    if (first_begin_of_the_frame)
-        window->WriteAccessed = false;
-
-    window->BeginCount++;
-    g.NextWindowData.ClearFlags();
-
-    if (flags & ImGuiWindowFlags_ChildWindow)
-    {
-        // Child window can be out of sight and have "negative" clip windows.
-        // Mark them as collapsed so commands are skipped earlier (we can't manually collapse them because they have no title bar).
-        IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0);
-        if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
-            if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y)
-                window->HiddenFramesCanSkipItems = 1;
-
-        // Hide along with parent or if parent is collapsed
-        if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0))
-            window->HiddenFramesCanSkipItems = 1;
-        if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0))
-            window->HiddenFramesCannotSkipItems = 1;
-    }
-
-    // Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point)
-    if (style.Alpha <= 0.0f)
-        window->HiddenFramesCanSkipItems = 1;
-
-    // Update the Hidden flag
-    window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0);
-
-    // Update the SkipItems flag, used to early out of all items functions (no layout required)
-    bool skip_items = false;
-    if (window->Collapsed || !window->Active || window->Hidden)
-        if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0)
-            skip_items = true;
-    window->SkipItems = skip_items;
-
-    return !skip_items;
-}
-
-void ImGui::End()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    // Error checking: verify that user hasn't called End() too many times!
-    if (g.CurrentWindowStack.Size <= 1 && g.WithinFrameScopeWithImplicitWindow)
-    {
-        IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size > 1, "Calling End() too many times!");
-        return;
-    }
-    IM_ASSERT(g.CurrentWindowStack.Size > 0);
-
-    // Error checking: verify that user doesn't directly call End() on a child window.
-    if (window->Flags & ImGuiWindowFlags_ChildWindow)
-        IM_ASSERT_USER_ERROR(g.WithinEndChild, "Must call EndChild() and not End()!");
-
-    // Close anything that is open
-    if (window->DC.CurrentColumns)
-        EndColumns();
-    PopClipRect();   // Inner window clip rectangle
-
-    // Stop logging
-    if (!(window->Flags & ImGuiWindowFlags_ChildWindow))    // FIXME: add more options for scope of logging
-        LogFinish();
-
-    // Pop from window stack
-    g.CurrentWindowStack.pop_back();
-    if (window->Flags & ImGuiWindowFlags_Popup)
-        g.BeginPopupStack.pop_back();
-    ErrorCheckBeginEndCompareStacksSize(window, false);
-    SetCurrentWindow(g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back());
-}
-
-void ImGui::BringWindowToFocusFront(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.WindowsFocusOrder.back() == window)
-        return;
-    for (int i = g.WindowsFocusOrder.Size - 2; i >= 0; i--) // We can ignore the top-most window
-        if (g.WindowsFocusOrder[i] == window)
-        {
-            memmove(&g.WindowsFocusOrder[i], &g.WindowsFocusOrder[i + 1], (size_t)(g.WindowsFocusOrder.Size - i - 1) * sizeof(ImGuiWindow*));
-            g.WindowsFocusOrder[g.WindowsFocusOrder.Size - 1] = window;
-            break;
-        }
-}
-
-void ImGui::BringWindowToDisplayFront(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* current_front_window = g.Windows.back();
-    if (current_front_window == window || current_front_window->RootWindow == window)
-        return;
-    for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window
-        if (g.Windows[i] == window)
-        {
-            memmove(&g.Windows[i], &g.Windows[i + 1], (size_t)(g.Windows.Size - i - 1) * sizeof(ImGuiWindow*));
-            g.Windows[g.Windows.Size - 1] = window;
-            break;
-        }
-}
-
-void ImGui::BringWindowToDisplayBack(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.Windows[0] == window)
-        return;
-    for (int i = 0; i < g.Windows.Size; i++)
-        if (g.Windows[i] == window)
-        {
-            memmove(&g.Windows[1], &g.Windows[0], (size_t)i * sizeof(ImGuiWindow*));
-            g.Windows[0] = window;
-            break;
-        }
-}
-
-// Moving window to front of display and set focus (which happens to be back of our sorted list)
-void ImGui::FocusWindow(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-
-    if (g.NavWindow != window)
-    {
-        g.NavWindow = window;
-        if (window && g.NavDisableMouseHover)
-            g.NavMousePosDirty = true;
-        g.NavInitRequest = false;
-        g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId
-        g.NavFocusScopeId = 0;
-        g.NavIdIsAlive = false;
-        g.NavLayer = ImGuiNavLayer_Main;
-        //IMGUI_DEBUG_LOG("FocusWindow(\"%s\")\n", window ? window->Name : NULL);
-    }
-
-    // Close popups if any
-    ClosePopupsOverWindow(window, false);
-
-    // Passing NULL allow to disable keyboard focus
-    if (!window)
-        return;
-
-    // Move the root window to the top of the pile
-    IM_ASSERT(window->RootWindow != NULL);
-    ImGuiWindow* focus_front_window = window->RootWindow; // NB: In docking branch this is window->RootWindowDockStop
-    ImGuiWindow* display_front_window = window->RootWindow;
-
-    // Steal focus on active widgets
-    if (focus_front_window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement may be unnecessary? Need further testing before removing it..
-        if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != focus_front_window)
-            ClearActiveID();
-
-    // Bring to front
-    BringWindowToFocusFront(focus_front_window);
-    if (((window->Flags | display_front_window->Flags) & ImGuiWindowFlags_NoBringToFrontOnFocus) == 0)
-        BringWindowToDisplayFront(display_front_window);
-}
-
-void ImGui::FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window)
-{
-    ImGuiContext& g = *GImGui;
-
-    int start_idx = g.WindowsFocusOrder.Size - 1;
-    if (under_this_window != NULL)
-    {
-        int under_this_window_idx = FindWindowFocusIndex(under_this_window);
-        if (under_this_window_idx != -1)
-            start_idx = under_this_window_idx - 1;
-    }
-    for (int i = start_idx; i >= 0; i--)
-    {
-        // We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user.
-        ImGuiWindow* window = g.WindowsFocusOrder[i];
-        if (window != ignore_window && window->WasActive && !(window->Flags & ImGuiWindowFlags_ChildWindow))
-            if ((window->Flags & (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs)) != (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs))
-            {
-                ImGuiWindow* focus_window = NavRestoreLastChildNavWindow(window);
-                FocusWindow(focus_window);
-                return;
-            }
-    }
-    FocusWindow(NULL);
-}
-
-void ImGui::SetCurrentFont(ImFont* font)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(font && font->IsLoaded());    // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
-    IM_ASSERT(font->Scale > 0.0f);
-    g.Font = font;
-    g.FontBaseSize = ImMax(1.0f, g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale);
-    g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f;
-
-    ImFontAtlas* atlas = g.Font->ContainerAtlas;
-    g.DrawListSharedData.TexUvWhitePixel = atlas->TexUvWhitePixel;
-    g.DrawListSharedData.Font = g.Font;
-    g.DrawListSharedData.FontSize = g.FontSize;
-}
-
-void ImGui::PushFont(ImFont* font)
-{
-    ImGuiContext& g = *GImGui;
-    if (!font)
-        font = GetDefaultFont();
-    SetCurrentFont(font);
-    g.FontStack.push_back(font);
-    g.CurrentWindow->DrawList->PushTextureID(font->ContainerAtlas->TexID);
-}
-
-void  ImGui::PopFont()
-{
-    ImGuiContext& g = *GImGui;
-    g.CurrentWindow->DrawList->PopTextureID();
-    g.FontStack.pop_back();
-    SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back());
-}
-
-void ImGui::PushItemFlag(ImGuiItemFlags option, bool enabled)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (enabled)
-        window->DC.ItemFlags |= option;
-    else
-        window->DC.ItemFlags &= ~option;
-    window->DC.ItemFlagsStack.push_back(window->DC.ItemFlags);
-}
-
-void ImGui::PopItemFlag()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.ItemFlagsStack.pop_back();
-    window->DC.ItemFlags = window->DC.ItemFlagsStack.empty() ? ImGuiItemFlags_Default_ : window->DC.ItemFlagsStack.back();
-}
-
-// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system.
-void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus)
-{
-    PushItemFlag(ImGuiItemFlags_NoTabStop, !allow_keyboard_focus);
-}
-
-void ImGui::PopAllowKeyboardFocus()
-{
-    PopItemFlag();
-}
-
-void ImGui::PushButtonRepeat(bool repeat)
-{
-    PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat);
-}
-
-void ImGui::PopButtonRepeat()
-{
-    PopItemFlag();
-}
-
-void ImGui::PushTextWrapPos(float wrap_pos_x)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.TextWrapPos = wrap_pos_x;
-    window->DC.TextWrapPosStack.push_back(wrap_pos_x);
-}
-
-void ImGui::PopTextWrapPos()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.TextWrapPosStack.pop_back();
-    window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back();
-}
-
-bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent)
-{
-    if (window->RootWindow == potential_parent)
-        return true;
-    while (window != NULL)
-    {
-        if (window == potential_parent)
-            return true;
-        window = window->ParentWindow;
-    }
-    return false;
-}
-
-bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
-{
-    IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function
-    ImGuiContext& g = *GImGui;
-
-    if (flags & ImGuiHoveredFlags_AnyWindow)
-    {
-        if (g.HoveredWindow == NULL)
-            return false;
-    }
-    else
-    {
-        switch (flags & (ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows))
-        {
-        case ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows:
-            if (g.HoveredRootWindow != g.CurrentWindow->RootWindow)
-                return false;
-            break;
-        case ImGuiHoveredFlags_RootWindow:
-            if (g.HoveredWindow != g.CurrentWindow->RootWindow)
-                return false;
-            break;
-        case ImGuiHoveredFlags_ChildWindows:
-            if (g.HoveredWindow == NULL || !IsWindowChildOf(g.HoveredWindow, g.CurrentWindow))
-                return false;
-            break;
-        default:
-            if (g.HoveredWindow != g.CurrentWindow)
-                return false;
-            break;
-        }
-    }
-
-    if (!IsWindowContentHoverable(g.HoveredWindow, flags))
-        return false;
-    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
-        if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != g.HoveredWindow->MoveId)
-            return false;
-    return true;
-}
-
-bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-
-    if (flags & ImGuiFocusedFlags_AnyWindow)
-        return g.NavWindow != NULL;
-
-    IM_ASSERT(g.CurrentWindow);     // Not inside a Begin()/End()
-    switch (flags & (ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows))
-    {
-    case ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows:
-        return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow;
-    case ImGuiFocusedFlags_RootWindow:
-        return g.NavWindow == g.CurrentWindow->RootWindow;
-    case ImGuiFocusedFlags_ChildWindows:
-        return g.NavWindow && IsWindowChildOf(g.NavWindow, g.CurrentWindow);
-    default:
-        return g.NavWindow == g.CurrentWindow;
-    }
-}
-
-// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext)
-// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmaticaly.
-// If you want a window to never be focused, you may use the e.g. NoInputs flag.
-bool ImGui::IsWindowNavFocusable(ImGuiWindow* window)
-{
-    return window->Active && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus);
-}
-
-float ImGui::GetWindowWidth()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->Size.x;
-}
-
-float ImGui::GetWindowHeight()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->Size.y;
-}
-
-ImVec2 ImGui::GetWindowPos()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    return window->Pos;
-}
-
-void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
-{
-    // Test condition (NB: bit 0 is always true) and clear flags for next time
-    if (cond && (window->SetWindowPosAllowFlags & cond) == 0)
-        return;
-
-    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
-    window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
-    window->SetWindowPosVal = ImVec2(FLT_MAX, FLT_MAX);
-
-    // Set
-    const ImVec2 old_pos = window->Pos;
-    window->Pos = ImFloor(pos);
-    ImVec2 offset = window->Pos - old_pos;
-    window->DC.CursorPos += offset;         // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
-    window->DC.CursorMaxPos += offset;      // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected.
-    window->DC.CursorStartPos += offset;
-}
-
-void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond)
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    SetWindowPos(window, pos, cond);
-}
-
-void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond)
-{
-    if (ImGuiWindow* window = FindWindowByName(name))
-        SetWindowPos(window, pos, cond);
-}
-
-ImVec2 ImGui::GetWindowSize()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->Size;
-}
-
-void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
-{
-    // Test condition (NB: bit 0 is always true) and clear flags for next time
-    if (cond && (window->SetWindowSizeAllowFlags & cond) == 0)
-        return;
-
-    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
-    window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
-
-    // Set
-    if (size.x > 0.0f)
-    {
-        window->AutoFitFramesX = 0;
-        window->SizeFull.x = IM_FLOOR(size.x);
-    }
-    else
-    {
-        window->AutoFitFramesX = 2;
-        window->AutoFitOnlyGrows = false;
-    }
-    if (size.y > 0.0f)
-    {
-        window->AutoFitFramesY = 0;
-        window->SizeFull.y = IM_FLOOR(size.y);
-    }
-    else
-    {
-        window->AutoFitFramesY = 2;
-        window->AutoFitOnlyGrows = false;
-    }
-}
-
-void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond)
-{
-    SetWindowSize(GImGui->CurrentWindow, size, cond);
-}
-
-void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond)
-{
-    if (ImGuiWindow* window = FindWindowByName(name))
-        SetWindowSize(window, size, cond);
-}
-
-void ImGui::SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
-{
-    // Test condition (NB: bit 0 is always true) and clear flags for next time
-    if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0)
-        return;
-    window->SetWindowCollapsedAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
-
-    // Set
-    window->Collapsed = collapsed;
-}
-
-void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
-{
-    SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
-}
-
-bool ImGui::IsWindowCollapsed()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->Collapsed;
-}
-
-bool ImGui::IsWindowAppearing()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->Appearing;
-}
-
-void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
-{
-    if (ImGuiWindow* window = FindWindowByName(name))
-        SetWindowCollapsed(window, collapsed, cond);
-}
-
-void ImGui::SetWindowFocus()
-{
-    FocusWindow(GImGui->CurrentWindow);
-}
-
-void ImGui::SetWindowFocus(const char* name)
-{
-    if (name)
-    {
-        if (ImGuiWindow* window = FindWindowByName(name))
-            FocusWindow(window);
-    }
-    else
-    {
-        FocusWindow(NULL);
-    }
-}
-
-void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pivot)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos;
-    g.NextWindowData.PosVal = pos;
-    g.NextWindowData.PosPivotVal = pivot;
-    g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always;
-}
-
-void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize;
-    g.NextWindowData.SizeVal = size;
-    g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always;
-}
-
-void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data)
-{
-    ImGuiContext& g = *GImGui;
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
-    g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max);
-    g.NextWindowData.SizeCallback = custom_callback;
-    g.NextWindowData.SizeCallbackUserData = custom_callback_user_data;
-}
-
-// Content size = inner scrollable rectangle, padded with WindowPadding.
-// SetNextWindowContentSize(ImVec2(100,100) + ImGuiWindowFlags_AlwaysAutoResize will always allow submitting a 100x100 item.
-void ImGui::SetNextWindowContentSize(const ImVec2& size)
-{
-    ImGuiContext& g = *GImGui;
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize;
-    g.NextWindowData.ContentSizeVal = size;
-}
-
-void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed;
-    g.NextWindowData.CollapsedVal = collapsed;
-    g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always;
-}
-
-void ImGui::SetNextWindowFocus()
-{
-    ImGuiContext& g = *GImGui;
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus;
-}
-
-void ImGui::SetNextWindowBgAlpha(float alpha)
-{
-    ImGuiContext& g = *GImGui;
-    g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha;
-    g.NextWindowData.BgAlphaVal = alpha;
-}
-
-ImDrawList* ImGui::GetWindowDrawList()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    return window->DrawList;
-}
-
-ImFont* ImGui::GetFont()
-{
-    return GImGui->Font;
-}
-
-float ImGui::GetFontSize()
-{
-    return GImGui->FontSize;
-}
-
-ImVec2 ImGui::GetFontTexUvWhitePixel()
-{
-    return GImGui->DrawListSharedData.TexUvWhitePixel;
-}
-
-void ImGui::SetWindowFontScale(float scale)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    window->FontWindowScale = scale;
-    g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
-}
-
-void ImGui::ActivateItem(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    g.NavNextActivateId = id;
-}
-
-void ImGui::PushFocusScope(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    window->IDStack.push_back(window->DC.NavFocusScopeIdCurrent);
-    window->DC.NavFocusScopeIdCurrent = id;
-}
-
-void ImGui::PopFocusScope()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    window->DC.NavFocusScopeIdCurrent = window->IDStack.back();
-    window->IDStack.pop_back();
-}
-
-void ImGui::SetKeyboardFocusHere(int offset)
-{
-    IM_ASSERT(offset >= -1);    // -1 is allowed but not below
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    g.FocusRequestNextWindow = window;
-    g.FocusRequestNextCounterRegular = window->DC.FocusCounterRegular + 1 + offset;
-    g.FocusRequestNextCounterTabStop = INT_MAX;
-}
-
-void ImGui::SetItemDefaultFocus()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (!window->Appearing)
-        return;
-    if (g.NavWindow == window->RootWindowForNav && (g.NavInitRequest || g.NavInitResultId != 0) && g.NavLayer == g.NavWindow->DC.NavLayerCurrent)
-    {
-        g.NavInitRequest = false;
-        g.NavInitResultId = g.NavWindow->DC.LastItemId;
-        g.NavInitResultRectRel = ImRect(g.NavWindow->DC.LastItemRect.Min - g.NavWindow->Pos, g.NavWindow->DC.LastItemRect.Max - g.NavWindow->Pos);
-        NavUpdateAnyRequestFlag();
-        if (!IsItemVisible())
-            SetScrollHereY();
-    }
-}
-
-void ImGui::SetStateStorage(ImGuiStorage* tree)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->DC.StateStorage = tree ? tree : &window->StateStorage;
-}
-
-ImGuiStorage* ImGui::GetStateStorage()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->DC.StateStorage;
-}
-
-void ImGui::PushID(const char* str_id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id));
-}
-
-void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id_begin, str_id_end));
-}
-
-void ImGui::PushID(const void* ptr_id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
-}
-
-void ImGui::PushID(int int_id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.push_back(window->GetIDNoKeepAlive(int_id));
-}
-
-// Push a given id value ignoring the ID stack as a seed.
-void ImGui::PushOverrideID(ImGuiID id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.push_back(id);
-}
-
-void ImGui::PopID()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    window->IDStack.pop_back();
-}
-
-ImGuiID ImGui::GetID(const char* str_id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->GetID(str_id);
-}
-
-ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->GetID(str_id_begin, str_id_end);
-}
-
-ImGuiID ImGui::GetID(const void* ptr_id)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->GetID(ptr_id);
-}
-
-bool ImGui::IsRectVisible(const ImVec2& size)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size));
-}
-
-bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ClipRect.Overlaps(ImRect(rect_min, rect_max));
-}
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] ERROR CHECKING
-//-----------------------------------------------------------------------------
-
-// Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui.
-// Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit
-// If the user has inconsistent compilation settings, imgui configuration #define, packing pragma, etc. your user code
-// may see different structures than what imgui.cpp sees, which is problematic.
-// We usually require settings to be in imconfig.h to make sure that they are accessible to all compilation units involved with Dear ImGui.
-bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx)
-{
-    bool error = false;
-    if (strcmp(version, IMGUI_VERSION) != 0) { error = true; IM_ASSERT(strcmp(version, IMGUI_VERSION) == 0 && "Mismatched version string!"); }
-    if (sz_io != sizeof(ImGuiIO)) { error = true; IM_ASSERT(sz_io == sizeof(ImGuiIO) && "Mismatched struct layout!"); }
-    if (sz_style != sizeof(ImGuiStyle)) { error = true; IM_ASSERT(sz_style == sizeof(ImGuiStyle) && "Mismatched struct layout!"); }
-    if (sz_vec2 != sizeof(ImVec2)) { error = true; IM_ASSERT(sz_vec2 == sizeof(ImVec2) && "Mismatched struct layout!"); }
-    if (sz_vec4 != sizeof(ImVec4)) { error = true; IM_ASSERT(sz_vec4 == sizeof(ImVec4) && "Mismatched struct layout!"); }
-    if (sz_vert != sizeof(ImDrawVert)) { error = true; IM_ASSERT(sz_vert == sizeof(ImDrawVert) && "Mismatched struct layout!"); }
-    if (sz_idx != sizeof(ImDrawIdx)) { error = true; IM_ASSERT(sz_idx == sizeof(ImDrawIdx) && "Mismatched struct layout!"); }
-    return !error;
-}
-
-static void ImGui::ErrorCheckNewFrameSanityChecks()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Check user data
-    // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
-    IM_ASSERT(g.Initialized);
-    IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0)              && "Need a positive DeltaTime!");
-    IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount)  && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
-    IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f  && "Invalid DisplaySize value!");
-    IM_ASSERT(g.IO.Fonts->Fonts.Size > 0                                && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
-    IM_ASSERT(g.IO.Fonts->Fonts[0]->IsLoaded()                          && "Font Atlas not built. Did you call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8() ?");
-    IM_ASSERT(g.Style.CurveTessellationTol > 0.0f                       && "Invalid style setting!");
-    IM_ASSERT(g.Style.CircleSegmentMaxError > 0.0f                      && "Invalid style setting!");
-    IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f            && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!");
-    IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting.");
-    IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
-    for (int n = 0; n < ImGuiKey_COUNT; n++)
-        IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
-
-    // Perform simple check: required key mapping (we intentionally do NOT check all keys to not pressure user into setting up everything, but Space is required and was only recently added in 1.60 WIP)
-    if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard)
-        IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation.");
-
-    // Perform simple check: the beta io.ConfigWindowsResizeFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
-    if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
-        g.IO.ConfigWindowsResizeFromEdges = false;
-}
-
-static void ImGui::ErrorCheckEndFrameSanityChecks()
-{
-    ImGuiContext& g = *GImGui;
-
-    // Verify that io.KeyXXX fields haven't been tampered with. Key mods shoudl not be modified between NewFrame() and EndFrame()
-    const ImGuiKeyModFlags expected_key_mod_flags = GetMergedKeyModFlags();
-    IM_ASSERT(g.IO.KeyMods == expected_key_mod_flags && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods");
-    IM_UNUSED(expected_key_mod_flags);
-
-    // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you
-    // to always call End/EndChild even if Begin/BeginChild returns false! (this is unfortunately inconsistent with most other Begin* API).
-    if (g.CurrentWindowStack.Size != 1)
-    {
-        if (g.CurrentWindowStack.Size > 1)
-        {
-            IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
-            while (g.CurrentWindowStack.Size > 1)
-                End();
-        }
-        else
-        {
-            IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you call End/EndChild too much?");
-        }
-    }
-}
-
-// Save and compare stack sizes on Begin()/End() to detect usage errors
-// Begin() calls this with write=true
-// End() calls this with write=false
-static void ImGui::ErrorCheckBeginEndCompareStacksSize(ImGuiWindow* window, bool write)
-{
-    ImGuiContext& g = *GImGui;
-    short* p = &window->DC.StackSizesBackup[0];
-
-    // Window stacks
-    // NOT checking: DC.ItemWidth, DC.AllowKeyboardFocus, DC.ButtonRepeat, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin)
-    { int n = window->IDStack.Size;       if (write) *p = (short)n; else IM_ASSERT(*p == n && "PushID/PopID or TreeNode/TreePop Mismatch!");   p++; }    // Too few or too many PopID()/TreePop()
-    { int n = window->DC.GroupStack.Size; if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginGroup/EndGroup Mismatch!");                p++; }    // Too few or too many EndGroup()
-
-    // Global stacks
-    // For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them.
-    { int n = g.BeginPopupStack.Size;     if (write) *p = (short)n; else IM_ASSERT(*p == n && "BeginMenu/EndMenu or BeginPopup/EndPopup Mismatch!"); p++; }// Too few or too many EndMenu()/EndPopup()
-    { int n = g.ColorModifiers.Size;      if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleColor/PopStyleColor Mismatch!");       p++; }    // Too few or too many PopStyleColor()
-    { int n = g.StyleModifiers.Size;      if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushStyleVar/PopStyleVar Mismatch!");           p++; }    // Too few or too many PopStyleVar()
-    { int n = g.FontStack.Size;           if (write) *p = (short)n; else IM_ASSERT(*p >= n && "PushFont/PopFont Mismatch!");                   p++; }    // Too few or too many PopFont()
-    IM_ASSERT(p == window->DC.StackSizesBackup + IM_ARRAYSIZE(window->DC.StackSizesBackup));
-}
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] LAYOUT
-//-----------------------------------------------------------------------------
-// - ItemSize()
-// - ItemAdd()
-// - SameLine()
-// - GetCursorScreenPos()
-// - SetCursorScreenPos()
-// - GetCursorPos(), GetCursorPosX(), GetCursorPosY()
-// - SetCursorPos(), SetCursorPosX(), SetCursorPosY()
-// - GetCursorStartPos()
-// - Indent()
-// - Unindent()
-// - SetNextItemWidth()
-// - PushItemWidth()
-// - PushMultiItemsWidths()
-// - PopItemWidth()
-// - CalcItemWidth()
-// - CalcItemSize()
-// - GetTextLineHeight()
-// - GetTextLineHeightWithSpacing()
-// - GetFrameHeight()
-// - GetFrameHeightWithSpacing()
-// - GetContentRegionMax()
-// - GetContentRegionMaxAbs() [Internal]
-// - GetContentRegionAvail(),
-// - GetWindowContentRegionMin(), GetWindowContentRegionMax()
-// - GetWindowContentRegionWidth()
-// - BeginGroup()
-// - EndGroup()
-// Also see in imgui_widgets: tab bars, columns.
-//-----------------------------------------------------------------------------
-
-// Advance cursor given item size for layout.
-// Register minimum needed size so it can extend the bounding box used for auto-fit calculation.
-// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different.
-void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    // We increase the height in this function to accommodate for baseline offset.
-    // In theory we should be offsetting the starting position (window->DC.CursorPos), that will be the topic of a larger refactor,
-    // but since ItemSize() is not yet an API that moves the cursor (to handle e.g. wrapping) enlarging the height has the same effect.
-    const float offset_to_match_baseline_y = (text_baseline_y >= 0) ? ImMax(0.0f, window->DC.CurrLineTextBaseOffset - text_baseline_y) : 0.0f;
-    const float line_height = ImMax(window->DC.CurrLineSize.y, size.y + offset_to_match_baseline_y);
-
-    // Always align ourselves on pixel boundaries
-    //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG]
-    window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x;
-    window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y;
-    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);    // Next line
-    window->DC.CursorPos.y = IM_FLOOR(window->DC.CursorPos.y + line_height + g.Style.ItemSpacing.y);        // Next line
-    window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x);
-    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y);
-    //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG]
-
-    window->DC.PrevLineSize.y = line_height;
-    window->DC.CurrLineSize.y = 0.0f;
-    window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y);
-    window->DC.CurrLineTextBaseOffset = 0.0f;
-
-    // Horizontal layout mode
-    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
-        SameLine();
-}
-
-void ImGui::ItemSize(const ImRect& bb, float text_baseline_y)
-{
-    ItemSize(bb.GetSize(), text_baseline_y);
-}
-
-// Declare item bounding box for clipping and interaction.
-// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
-// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction.
-bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    if (id != 0)
-    {
-        // Navigation processing runs prior to clipping early-out
-        //  (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
-        //  (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
-        //      unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of
-        //      thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame.
-        //      We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able
-        //      to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick).
-        // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null.
-        // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere.
-        window->DC.NavLayerActiveMaskNext |= window->DC.NavLayerCurrentMask;
-        if (g.NavId == id || g.NavAnyRequest)
-            if (g.NavWindow->RootWindowForNav == window->RootWindowForNav)
-                if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
-                    NavProcessItem(window, nav_bb_arg ? *nav_bb_arg : bb, id);
-
-        // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd()
-#ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
-        if (id == g.DebugItemPickerBreakId)
-        {
-            IM_DEBUG_BREAK();
-            g.DebugItemPickerBreakId = 0;
-        }
-#endif
-    }
-
-    window->DC.LastItemId = id;
-    window->DC.LastItemRect = bb;
-    window->DC.LastItemStatusFlags = ImGuiItemStatusFlags_None;
-    g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
-
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-    if (id != 0)
-        IMGUI_TEST_ENGINE_ITEM_ADD(nav_bb_arg ? *nav_bb_arg : bb, id);
-#endif
-
-    // Clipping test
-    const bool is_clipped = IsClippedEx(bb, id, false);
-    if (is_clipped)
-        return false;
-    //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
-
-    // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
-    if (IsMouseHoveringRect(bb.Min, bb.Max))
-        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HoveredRect;
-    return true;
-}
-
-// Gets back to previous line and continue with horizontal layout
-//      offset_from_start_x == 0 : follow right after previous item
-//      offset_from_start_x != 0 : align to specified x position (relative to window/group left)
-//      spacing_w < 0            : use default spacing if pos_x == 0, no spacing if pos_x != 0
-//      spacing_w >= 0           : enforce spacing amount
-void ImGui::SameLine(float offset_from_start_x, float spacing_w)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    if (offset_from_start_x != 0.0f)
-    {
-        if (spacing_w < 0.0f) spacing_w = 0.0f;
-        window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x;
-        window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
-    }
-    else
-    {
-        if (spacing_w < 0.0f) spacing_w = g.Style.ItemSpacing.x;
-        window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w;
-        window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
-    }
-    window->DC.CurrLineSize = window->DC.PrevLineSize;
-    window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
-}
-
-ImVec2 ImGui::GetCursorScreenPos()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CursorPos;
-}
-
-void ImGui::SetCursorScreenPos(const ImVec2& pos)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.CursorPos = pos;
-    window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
-}
-
-// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient.
-// Conversion happens as we pass the value to user, but it makes our naming convention confusing because GetCursorPos() == (DC.CursorPos - window.Pos). May want to rename 'DC.CursorPos'.
-ImVec2 ImGui::GetCursorPos()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CursorPos - window->Pos + window->Scroll;
-}
-
-float ImGui::GetCursorPosX()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CursorPos.x - window->Pos.x + window->Scroll.x;
-}
-
-float ImGui::GetCursorPosY()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CursorPos.y - window->Pos.y + window->Scroll.y;
-}
-
-void ImGui::SetCursorPos(const ImVec2& local_pos)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.CursorPos = window->Pos - window->Scroll + local_pos;
-    window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
-}
-
-void ImGui::SetCursorPosX(float x)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + x;
-    window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x);
-}
-
-void ImGui::SetCursorPosY(float y)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.CursorPos.y = window->Pos.y - window->Scroll.y + y;
-    window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y);
-}
-
-ImVec2 ImGui::GetCursorStartPos()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CursorStartPos - window->Pos;
-}
-
-void ImGui::Indent(float indent_w)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
-    window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
-}
-
-void ImGui::Unindent(float indent_w)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
-    window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
-}
-
-// Affect large frame+labels widgets only.
-void ImGui::SetNextItemWidth(float item_width)
-{
-    ImGuiContext& g = *GImGui;
-    g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasWidth;
-    g.NextItemData.Width = item_width;
-}
-
-void ImGui::PushItemWidth(float item_width)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
-    window->DC.ItemWidthStack.push_back(window->DC.ItemWidth);
-    g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
-}
-
-void ImGui::PushMultiItemsWidths(int components, float w_full)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    const ImGuiStyle& style = g.Style;
-    const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
-    const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
-    window->DC.ItemWidthStack.push_back(w_item_last);
-    for (int i = 0; i < components-1; i++)
-        window->DC.ItemWidthStack.push_back(w_item_one);
-    window->DC.ItemWidth = window->DC.ItemWidthStack.back();
-    g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
-}
-
-void ImGui::PopItemWidth()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->DC.ItemWidthStack.pop_back();
-    window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back();
-}
-
-// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
-// The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags()
-float ImGui::CalcItemWidth()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    float w;
-    if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth)
-        w = g.NextItemData.Width;
-    else
-        w = window->DC.ItemWidth;
-    if (w < 0.0f)
-    {
-        float region_max_x = GetContentRegionMaxAbs().x;
-        w = ImMax(1.0f, region_max_x - window->DC.CursorPos.x + w);
-    }
-    w = IM_FLOOR(w);
-    return w;
-}
-
-// [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth().
-// Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical.
-// Note that only CalcItemWidth() is publicly exposed.
-// The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable)
-ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-
-    ImVec2 region_max;
-    if (size.x < 0.0f || size.y < 0.0f)
-        region_max = GetContentRegionMaxAbs();
-
-    if (size.x == 0.0f)
-        size.x = default_w;
-    else if (size.x < 0.0f)
-        size.x = ImMax(4.0f, region_max.x - window->DC.CursorPos.x + size.x);
-
-    if (size.y == 0.0f)
-        size.y = default_h;
-    else if (size.y < 0.0f)
-        size.y = ImMax(4.0f, region_max.y - window->DC.CursorPos.y + size.y);
-
-    return size;
-}
-
-float ImGui::GetTextLineHeight()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize;
-}
-
-float ImGui::GetTextLineHeightWithSpacing()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize + g.Style.ItemSpacing.y;
-}
-
-float ImGui::GetFrameHeight()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize + g.Style.FramePadding.y * 2.0f;
-}
-
-float ImGui::GetFrameHeightWithSpacing()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize + g.Style.FramePadding.y * 2.0f + g.Style.ItemSpacing.y;
-}
-
-// FIXME: All the Contents Region function are messy or misleading. WE WILL AIM TO OBSOLETE ALL OF THEM WITH A NEW "WORK RECT" API. Thanks for your patience!
-
-// FIXME: This is in window space (not screen space!).
-ImVec2 ImGui::GetContentRegionMax()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImVec2 mx = window->ContentRegionRect.Max - window->Pos;
-    if (window->DC.CurrentColumns || g.CurrentTable)
-        mx.x = window->WorkRect.Max.x - window->Pos.x;
-    return mx;
-}
-
-// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
-ImVec2 ImGui::GetContentRegionMaxAbs()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImVec2 mx = window->ContentRegionRect.Max;
-    if (window->DC.CurrentColumns || g.CurrentTable)
-        mx.x = window->WorkRect.Max.x;
-    return mx;
-}
-
-ImVec2 ImGui::GetContentRegionAvail()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return GetContentRegionMaxAbs() - window->DC.CursorPos;
-}
-
-// In window space (not screen space!)
-ImVec2 ImGui::GetWindowContentRegionMin()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ContentRegionRect.Min - window->Pos;
-}
-
-ImVec2 ImGui::GetWindowContentRegionMax()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ContentRegionRect.Max - window->Pos;
-}
-
-float ImGui::GetWindowContentRegionWidth()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ContentRegionRect.GetWidth();
-}
-
-// Lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
-void ImGui::BeginGroup()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-
-    window->DC.GroupStack.resize(window->DC.GroupStack.Size + 1);
-    ImGuiGroupData& group_data = window->DC.GroupStack.back();
-    group_data.BackupCursorPos = window->DC.CursorPos;
-    group_data.BackupCursorMaxPos = window->DC.CursorMaxPos;
-    group_data.BackupIndent = window->DC.Indent;
-    group_data.BackupGroupOffset = window->DC.GroupOffset;
-    group_data.BackupCurrLineSize = window->DC.CurrLineSize;
-    group_data.BackupCurrLineTextBaseOffset = window->DC.CurrLineTextBaseOffset;
-    group_data.BackupActiveIdIsAlive = g.ActiveIdIsAlive;
-    group_data.BackupActiveIdPreviousFrameIsAlive = g.ActiveIdPreviousFrameIsAlive;
-    group_data.EmitItem = true;
-
-    window->DC.GroupOffset.x = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffset.x;
-    window->DC.Indent = window->DC.GroupOffset;
-    window->DC.CursorMaxPos = window->DC.CursorPos;
-    window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
-    if (g.LogEnabled)
-        g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
-}
-
-void ImGui::EndGroup()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    IM_ASSERT(!window->DC.GroupStack.empty());  // Mismatched BeginGroup()/EndGroup() calls
-
-    ImGuiGroupData& group_data = window->DC.GroupStack.back();
-
-    ImRect group_bb(group_data.BackupCursorPos, ImMax(window->DC.CursorMaxPos, group_data.BackupCursorPos));
-
-    window->DC.CursorPos = group_data.BackupCursorPos;
-    window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos);
-    window->DC.Indent = group_data.BackupIndent;
-    window->DC.GroupOffset = group_data.BackupGroupOffset;
-    window->DC.CurrLineSize = group_data.BackupCurrLineSize;
-    window->DC.CurrLineTextBaseOffset = group_data.BackupCurrLineTextBaseOffset;
-    if (g.LogEnabled)
-        g.LogLinePosY = -FLT_MAX; // To enforce Log carriage return
-
-    if (!group_data.EmitItem)
-    {
-        window->DC.GroupStack.pop_back();
-        return;
-    }
-
-    window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset);      // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
-    ItemSize(group_bb.GetSize());
-    ItemAdd(group_bb, 0);
-
-    // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group.
-    // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets.
-    // Also if you grep for LastItemId you'll notice it is only used in that context.
-    // (The tests not symmetrical because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.)
-    const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId;
-    const bool group_contains_prev_active_id = !group_data.BackupActiveIdPreviousFrameIsAlive && g.ActiveIdPreviousFrameIsAlive;
-    if (group_contains_curr_active_id)
-        window->DC.LastItemId = g.ActiveId;
-    else if (group_contains_prev_active_id)
-        window->DC.LastItemId = g.ActiveIdPreviousFrame;
-    window->DC.LastItemRect = group_bb;
-
-    // Forward Edited flag
-    if (group_contains_curr_active_id && g.ActiveIdHasBeenEditedThisFrame)
-        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Edited;
-
-    // Forward Deactivated flag
-    window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDeactivated;
-    if (group_contains_prev_active_id && g.ActiveId != g.ActiveIdPreviousFrame)
-        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_Deactivated;
-
-    window->DC.GroupStack.pop_back();
-    //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255));   // [Debug]
-}
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] SCROLLING
-//-----------------------------------------------------------------------------
-
-static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window, bool snap_on_edges)
-{
-    ImGuiContext& g = *GImGui;
-    ImVec2 scroll = window->Scroll;
-    if (window->ScrollTarget.x < FLT_MAX)
-    {
-        float cr_x = window->ScrollTargetCenterRatio.x;
-        float target_x = window->ScrollTarget.x;
-        if (snap_on_edges && cr_x <= 0.0f && target_x <= window->WindowPadding.x)
-            target_x = 0.0f;
-        else if (snap_on_edges && cr_x >= 1.0f && target_x >= window->ContentSize.x + window->WindowPadding.x + g.Style.ItemSpacing.x)
-            target_x = window->ContentSize.x + window->WindowPadding.x * 2.0f;
-        scroll.x = target_x - cr_x * (window->SizeFull.x - window->ScrollbarSizes.x);
-    }
-    if (window->ScrollTarget.y < FLT_MAX)
-    {
-        // 'snap_on_edges' allows for a discontinuity at the edge of scrolling limits to take account of WindowPadding so that scrolling to make the last item visible scroll far enough to see the padding.
-        float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
-        float cr_y = window->ScrollTargetCenterRatio.y;
-        float target_y = window->ScrollTarget.y;
-        if (snap_on_edges && cr_y <= 0.0f && target_y <= window->WindowPadding.y)
-            target_y = 0.0f;
-        if (snap_on_edges && cr_y >= 1.0f && target_y >= window->ContentSize.y + window->WindowPadding.y + g.Style.ItemSpacing.y)
-            target_y = window->ContentSize.y + window->WindowPadding.y * 2.0f;
-        scroll.y = target_y - cr_y * (window->SizeFull.y - window->ScrollbarSizes.y - decoration_up_height);
-    }
-    scroll.x = IM_FLOOR(ImMax(scroll.x, 0.0f));
-    scroll.y = IM_FLOOR(ImMax(scroll.y, 0.0f));
-    if (!window->Collapsed && !window->SkipItems)
-    {
-        scroll.x = ImMin(scroll.x, window->ScrollMax.x);
-        scroll.y = ImMin(scroll.y, window->ScrollMax.y);
-    }
-    return scroll;
-}
-
-// Scroll to keep newly navigated item fully into view
-ImVec2 ImGui::ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect)
-{
-    ImGuiContext& g = *GImGui;
-    ImRect window_rect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1));
-    //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
-
-    ImVec2 delta_scroll;
-    if (!window_rect.Contains(item_rect))
-    {
-        if (window->ScrollbarX && item_rect.Min.x < window_rect.Min.x)
-            SetScrollFromPosX(window, item_rect.Min.x - window->Pos.x + g.Style.ItemSpacing.x, 0.0f);
-        else if (window->ScrollbarX && item_rect.Max.x >= window_rect.Max.x)
-            SetScrollFromPosX(window, item_rect.Max.x - window->Pos.x + g.Style.ItemSpacing.x, 1.0f);
-        if (item_rect.Min.y < window_rect.Min.y)
-            SetScrollFromPosY(window, item_rect.Min.y - window->Pos.y - g.Style.ItemSpacing.y, 0.0f);
-        else if (item_rect.Max.y >= window_rect.Max.y)
-            SetScrollFromPosY(window, item_rect.Max.y - window->Pos.y + g.Style.ItemSpacing.y, 1.0f);
-
-        ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window, false);
-        delta_scroll = next_scroll - window->Scroll;
-    }
-
-    // Also scroll parent window to keep us into view if necessary
-    if (window->Flags & ImGuiWindowFlags_ChildWindow)
-        delta_scroll += ScrollToBringRectIntoView(window->ParentWindow, ImRect(item_rect.Min - delta_scroll, item_rect.Max - delta_scroll));
-
-    return delta_scroll;
-}
-
-float ImGui::GetScrollX()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->Scroll.x;
-}
-
-float ImGui::GetScrollY()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->Scroll.y;
-}
-
-float ImGui::GetScrollMaxX()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ScrollMax.x;
-}
-
-float ImGui::GetScrollMaxY()
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    return window->ScrollMax.y;
-}
-
-void ImGui::SetScrollX(float scroll_x)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->ScrollTarget.x = scroll_x;
-    window->ScrollTargetCenterRatio.x = 0.0f;
-}
-
-void ImGui::SetScrollY(float scroll_y)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    window->ScrollTarget.y = scroll_y;
-    window->ScrollTargetCenterRatio.y = 0.0f;
-}
-
-void ImGui::SetScrollX(ImGuiWindow* window, float new_scroll_x)
-{
-    window->ScrollTarget.x = new_scroll_x;
-    window->ScrollTargetCenterRatio.x = 0.0f;
-}
-
-void ImGui::SetScrollY(ImGuiWindow* window, float new_scroll_y)
-{
-    window->ScrollTarget.y = new_scroll_y;
-    window->ScrollTargetCenterRatio.y = 0.0f;
-}
-
-
-void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio)
-{
-    // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
-    IM_ASSERT(center_x_ratio >= 0.0f && center_x_ratio <= 1.0f);
-    window->ScrollTarget.x = IM_FLOOR(local_x + window->Scroll.x);
-    window->ScrollTargetCenterRatio.x = center_x_ratio;
-}
-
-void ImGui::SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio)
-{
-    // We store a target position so centering can occur on the next frame when we are guaranteed to have a known window size
-    IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
-    const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
-    local_y -= decoration_up_height;
-    window->ScrollTarget.y = IM_FLOOR(local_y + window->Scroll.y);
-    window->ScrollTargetCenterRatio.y = center_y_ratio;
-}
-
-void ImGui::SetScrollFromPosX(float local_x, float center_x_ratio)
-{
-    ImGuiContext& g = *GImGui;
-    SetScrollFromPosX(g.CurrentWindow, local_x, center_x_ratio);
-}
-
-void ImGui::SetScrollFromPosY(float local_y, float center_y_ratio)
-{
-    ImGuiContext& g = *GImGui;
-    SetScrollFromPosY(g.CurrentWindow, local_y, center_y_ratio);
-}
-
-// center_x_ratio: 0.0f left of last item, 0.5f horizontal center of last item, 1.0f right of last item.
-void ImGui::SetScrollHereX(float center_x_ratio)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    float target_x = window->DC.LastItemRect.Min.x - window->Pos.x; // Left of last item, in window space
-    float last_item_width = window->DC.LastItemRect.GetWidth();
-    target_x += (last_item_width * center_x_ratio) + (g.Style.ItemSpacing.x * (center_x_ratio - 0.5f) * 2.0f); // Precisely aim before, in the middle or after the last item.
-    SetScrollFromPosX(target_x, center_x_ratio);
-}
-
-// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
-void ImGui::SetScrollHereY(float center_y_ratio)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    float target_y = window->DC.CursorPosPrevLine.y - window->Pos.y; // Top of last item, in window space
-    target_y += (window->DC.PrevLineSize.y * center_y_ratio) + (g.Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line.
-    SetScrollFromPosY(target_y, center_y_ratio);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] TOOLTIPS
-//-----------------------------------------------------------------------------
-
-void ImGui::BeginTooltip()
-{
-    BeginTooltipEx(ImGuiWindowFlags_None, ImGuiTooltipFlags_None);
-}
-
-void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags)
-{
-    ImGuiContext& g = *GImGui;
-
-    if (g.DragDropWithinSource || g.DragDropWithinTarget)
-    {
-        // The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
-        // In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
-        // Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
-        //ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
-        ImVec2 tooltip_pos = g.IO.MousePos + ImVec2(16 * g.Style.MouseCursorScale, 8 * g.Style.MouseCursorScale);
-        SetNextWindowPos(tooltip_pos);
-        SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
-        //PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
-        tooltip_flags |= ImGuiTooltipFlags_OverridePreviousTooltip;
-    }
-
-    char window_name[16];
-    ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount);
-    if (tooltip_flags & ImGuiTooltipFlags_OverridePreviousTooltip)
-        if (ImGuiWindow* window = FindWindowByName(window_name))
-            if (window->Active)
-            {
-                // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
-                window->Hidden = true;
-                window->HiddenFramesCanSkipItems = 1;
-                ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
-            }
-    ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
-    Begin(window_name, NULL, flags | extra_flags);
-}
-
-void ImGui::EndTooltip()
-{
-    IM_ASSERT(GetCurrentWindowRead()->Flags & ImGuiWindowFlags_Tooltip);   // Mismatched BeginTooltip()/EndTooltip() calls
-    End();
-}
-
-void ImGui::SetTooltipV(const char* fmt, va_list args)
-{
-    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
-    TextV(fmt, args);
-    EndTooltip();
-}
-
-void ImGui::SetTooltip(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    SetTooltipV(fmt, args);
-    va_end(args);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] POPUPS
-//-----------------------------------------------------------------------------
-
-bool ImGui::IsPopupOpen(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id;
-}
-
-bool ImGui::IsPopupOpen(const char* str_id)
-{
-    ImGuiContext& g = *GImGui;
-    return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == g.CurrentWindow->GetID(str_id);
-}
-
-ImGuiWindow* ImGui::GetTopMostPopupModal()
-{
-    ImGuiContext& g = *GImGui;
-    for (int n = g.OpenPopupStack.Size-1; n >= 0; n--)
-        if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window)
-            if (popup->Flags & ImGuiWindowFlags_Modal)
-                return popup;
-    return NULL;
-}
-
-void ImGui::OpenPopup(const char* str_id)
-{
-    ImGuiContext& g = *GImGui;
-    OpenPopupEx(g.CurrentWindow->GetID(str_id));
-}
-
-// Mark popup as open (toggle toward open state).
-// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block.
-// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
-// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL)
-void ImGui::OpenPopupEx(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* parent_window = g.CurrentWindow;
-    int current_stack_size = g.BeginPopupStack.Size;
-    ImGuiPopupData popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack.
-    popup_ref.PopupId = id;
-    popup_ref.Window = NULL;
-    popup_ref.SourceWindow = g.NavWindow;
-    popup_ref.OpenFrameCount = g.FrameCount;
-    popup_ref.OpenParentId = parent_window->IDStack.back();
-    popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
-    popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
-
-    //IMGUI_DEBUG_LOG("OpenPopupEx(0x%08X)\n", g.FrameCount, id);
-    if (g.OpenPopupStack.Size < current_stack_size + 1)
-    {
-        g.OpenPopupStack.push_back(popup_ref);
-    }
-    else
-    {
-        // Gently handle the user mistakenly calling OpenPopup() every frame. It is a programming mistake! However, if we were to run the regular code path, the ui
-        // would become completely unusable because the popup will always be in hidden-while-calculating-size state _while_ claiming focus. Which would be a very confusing
-        // situation for the programmer. Instead, we silently allow the popup to proceed, it will keep reappearing and the programming error will be more obvious to understand.
-        if (g.OpenPopupStack[current_stack_size].PopupId == id && g.OpenPopupStack[current_stack_size].OpenFrameCount == g.FrameCount - 1)
-        {
-            g.OpenPopupStack[current_stack_size].OpenFrameCount = popup_ref.OpenFrameCount;
-        }
-        else
-        {
-            // Close child popups if any, then flag popup for open/reopen
-            g.OpenPopupStack.resize(current_stack_size + 1);
-            g.OpenPopupStack[current_stack_size] = popup_ref;
-        }
-
-        // When reopening a popup we first refocus its parent, otherwise if its parent is itself a popup it would get closed by ClosePopupsOverWindow().
-        // This is equivalent to what ClosePopupToLevel() does.
-        //if (g.OpenPopupStack[current_stack_size].PopupId == id)
-        //    FocusWindow(parent_window);
-    }
-}
-
-void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.OpenPopupStack.empty())
-        return;
-
-    // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
-    // Don't close our own child popup windows.
-    int popup_count_to_keep = 0;
-    if (ref_window)
-    {
-        // Find the highest popup which is a descendant of the reference window (generally reference window = NavWindow)
-        for (; popup_count_to_keep < g.OpenPopupStack.Size; popup_count_to_keep++)
-        {
-            ImGuiPopupData& popup = g.OpenPopupStack[popup_count_to_keep];
-            if (!popup.Window)
-                continue;
-            IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0);
-            if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
-                continue;
-
-            // Trim the stack when popups are not direct descendant of the reference window (the reference window is often the NavWindow)
-            bool popup_or_descendent_is_ref_window = false;
-            for (int m = popup_count_to_keep; m < g.OpenPopupStack.Size && !popup_or_descendent_is_ref_window; m++)
-                if (ImGuiWindow* popup_window = g.OpenPopupStack[m].Window)
-                    if (popup_window->RootWindow == ref_window->RootWindow)
-                        popup_or_descendent_is_ref_window = true;
-            if (!popup_or_descendent_is_ref_window)
-                break;
-        }
-    }
-    if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
-    {
-        //IMGUI_DEBUG_LOG("ClosePopupsOverWindow(%s) -> ClosePopupToLevel(%d)\n", ref_window->Name, popup_count_to_keep);
-        ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
-    }
-}
-
-void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
-    ImGuiWindow* focus_window = g.OpenPopupStack[remaining].SourceWindow;
-    ImGuiWindow* popup_window = g.OpenPopupStack[remaining].Window;
-    g.OpenPopupStack.resize(remaining);
-
-    if (restore_focus_to_window_under_popup)
-    {
-        if (focus_window && !focus_window->WasActive && popup_window)
-        {
-            // Fallback
-            FocusTopMostWindowUnderOne(popup_window, NULL);
-        }
-        else
-        {
-            if (g.NavLayer == 0 && focus_window)
-                focus_window = NavRestoreLastChildNavWindow(focus_window);
-            FocusWindow(focus_window);
-        }
-    }
-}
-
-// Close the popup we have begin-ed into.
-void ImGui::CloseCurrentPopup()
-{
-    ImGuiContext& g = *GImGui;
-    int popup_idx = g.BeginPopupStack.Size - 1;
-    if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
-        return;
-
-    // Closing a menu closes its top-most parent popup (unless a modal)
-    while (popup_idx > 0)
-    {
-        ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window;
-        ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window;
-        bool close_parent = false;
-        if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu))
-            if (parent_popup_window == NULL || !(parent_popup_window->Flags & ImGuiWindowFlags_Modal))
-                close_parent = true;
-        if (!close_parent)
-            break;
-        popup_idx--;
-    }
-    //IMGUI_DEBUG_LOG("CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
-    ClosePopupToLevel(popup_idx, true);
-
-    // A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
-    // To improve this usage pattern, we avoid nav highlight for a single frame in the parent window.
-    // Similarly, we could avoid mouse hover highlight in this window but it is less visually problematic.
-    if (ImGuiWindow* window = g.NavWindow)
-        window->DC.NavHideHighlightOneFrame = true;
-}
-
-bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    if (!IsPopupOpen(id))
-    {
-        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
-        return false;
-    }
-
-    char name[20];
-    if (flags & ImGuiWindowFlags_ChildMenu)
-        ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
-    else
-        ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
-
-    flags |= ImGuiWindowFlags_Popup;
-    bool is_open = Begin(name, NULL, flags);
-    if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
-        EndPopup();
-
-    return is_open;
-}
-
-bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance
-    {
-        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
-        return false;
-    }
-    flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings;
-    return BeginPopupEx(g.CurrentWindow->GetID(str_id), flags);
-}
-
-// If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup.
-// Note that popup visibility status is owned by Dear ImGui (and manipulated with e.g. OpenPopup) so the actual value of *p_open is meaningless here.
-bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    const ImGuiID id = window->GetID(name);
-    if (!IsPopupOpen(id))
-    {
-        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
-        return false;
-    }
-
-    // Center modal windows by default
-    // FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
-    if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
-        SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
-
-    flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoSavedSettings;
-    const bool is_open = Begin(name, p_open, flags);
-    if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
-    {
-        EndPopup();
-        if (is_open)
-            ClosePopupToLevel(g.BeginPopupStack.Size, true);
-        return false;
-    }
-    return is_open;
-}
-
-void ImGui::EndPopup()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup);  // Mismatched BeginPopup()/EndPopup() calls
-    IM_ASSERT(g.BeginPopupStack.Size > 0);
-
-    // Make all menus and popups wrap around for now, may need to expose that policy.
-    NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
-
-    // Child-popups don't need to be layed out
-    IM_ASSERT(g.WithinEndChild == false);
-    if (window->Flags & ImGuiWindowFlags_ChildWindow)
-        g.WithinEndChild = true;
-    End();
-    g.WithinEndChild = false;
-}
-
-bool ImGui::OpenPopupOnItemClick(const char* str_id, ImGuiMouseButton mouse_button)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-    {
-        ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
-        IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
-        OpenPopupEx(id);
-        return true;
-    }
-    return false;
-}
-
-// This is a helper to handle the simplest case of associating one named popup to one given widget.
-// You may want to handle this on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters).
-// You can pass a NULL str_id to use the identifier of the last item.
-bool ImGui::BeginPopupContextItem(const char* str_id, ImGuiMouseButton mouse_button)
-{
-    ImGuiWindow* window = GImGui->CurrentWindow;
-    if (window->SkipItems)
-        return false;
-    ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
-    IM_ASSERT(id != 0);                                                  // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
-    if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-        OpenPopupEx(id);
-    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
-}
-
-bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mouse_button, bool also_over_items)
-{
-    if (!str_id)
-        str_id = "window_context";
-    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
-    if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-        if (also_over_items || !IsAnyItemHovered())
-            OpenPopupEx(id);
-    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
-}
-
-bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiMouseButton mouse_button)
-{
-    if (!str_id)
-        str_id = "void_context";
-    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
-    if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow))
-        OpenPopupEx(id);
-    return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings);
-}
-
-// r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.)
-// r_outer = the visible area rectangle, minus safe area padding. If our popup size won't fit because of safe area padding we ignore it.
-ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy)
-{
-    ImVec2 base_pos_clamped = ImClamp(ref_pos, r_outer.Min, r_outer.Max - size);
-    //GetForegroundDrawList()->AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255));
-    //GetForegroundDrawList()->AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255));
-
-    // Combo Box policy (we want a connecting edge)
-    if (policy == ImGuiPopupPositionPolicy_ComboBox)
-    {
-        const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Down, ImGuiDir_Right, ImGuiDir_Left, ImGuiDir_Up };
-        for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
-        {
-            const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
-            if (n != -1 && dir == *last_dir) // Already tried this direction?
-                continue;
-            ImVec2 pos;
-            if (dir == ImGuiDir_Down)  pos = ImVec2(r_avoid.Min.x, r_avoid.Max.y);          // Below, Toward Right (default)
-            if (dir == ImGuiDir_Right) pos = ImVec2(r_avoid.Min.x, r_avoid.Min.y - size.y); // Above, Toward Right
-            if (dir == ImGuiDir_Left)  pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Max.y); // Below, Toward Left
-            if (dir == ImGuiDir_Up)    pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Min.y - size.y); // Above, Toward Left
-            if (!r_outer.Contains(ImRect(pos, pos + size)))
-                continue;
-            *last_dir = dir;
-            return pos;
-        }
-    }
-
-    // Default popup policy
-    const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Right, ImGuiDir_Down, ImGuiDir_Up, ImGuiDir_Left };
-    for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
-    {
-        const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
-        if (n != -1 && dir == *last_dir) // Already tried this direction?
-            continue;
-        float avail_w = (dir == ImGuiDir_Left ? r_avoid.Min.x : r_outer.Max.x) - (dir == ImGuiDir_Right ? r_avoid.Max.x : r_outer.Min.x);
-        float avail_h = (dir == ImGuiDir_Up ? r_avoid.Min.y : r_outer.Max.y) - (dir == ImGuiDir_Down ? r_avoid.Max.y : r_outer.Min.y);
-        if (avail_w < size.x || avail_h < size.y)
-            continue;
-        ImVec2 pos;
-        pos.x = (dir == ImGuiDir_Left) ? r_avoid.Min.x - size.x : (dir == ImGuiDir_Right) ? r_avoid.Max.x : base_pos_clamped.x;
-        pos.y = (dir == ImGuiDir_Up)   ? r_avoid.Min.y - size.y : (dir == ImGuiDir_Down)  ? r_avoid.Max.y : base_pos_clamped.y;
-        *last_dir = dir;
-        return pos;
-    }
-
-    // Fallback, try to keep within display
-    *last_dir = ImGuiDir_None;
-    ImVec2 pos = ref_pos;
-    pos.x = ImMax(ImMin(pos.x + size.x, r_outer.Max.x) - size.x, r_outer.Min.x);
-    pos.y = ImMax(ImMin(pos.y + size.y, r_outer.Max.y) - size.y, r_outer.Min.y);
-    return pos;
-}
-
-ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow* window)
-{
-    IM_UNUSED(window);
-    ImVec2 padding = GImGui->Style.DisplaySafeAreaPadding;
-    ImRect r_screen = GetViewportRect();
-    r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f));
-    return r_screen;
-}
-
-ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-
-    ImRect r_outer = GetWindowAllowedExtentRect(window);
-    if (window->Flags & ImGuiWindowFlags_ChildMenu)
-    {
-        // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds.
-        // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu.
-        IM_ASSERT(g.CurrentWindow == window);
-        ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2];
-        float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x).
-        ImRect r_avoid;
-        if (parent_window->DC.MenuBarAppending)
-            r_avoid = ImRect(-FLT_MAX, parent_window->ClipRect.Min.y, FLT_MAX, parent_window->ClipRect.Max.y); // Avoid parent menu-bar. If we wanted multi-line menu-bar, we may instead want to have the calling window setup e.g. a NextWindowData.PosConstraintAvoidRect field
-        else
-            r_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
-        return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
-    }
-    if (window->Flags & ImGuiWindowFlags_Popup)
-    {
-        ImRect r_avoid = ImRect(window->Pos.x - 1, window->Pos.y - 1, window->Pos.x + 1, window->Pos.y + 1);
-        return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
-    }
-    if (window->Flags & ImGuiWindowFlags_Tooltip)
-    {
-        // Position tooltip (always follows mouse)
-        float sc = g.Style.MouseCursorScale;
-        ImVec2 ref_pos = NavCalcPreferredRefPos();
-        ImRect r_avoid;
-        if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos))
-            r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 16, ref_pos.y + 8);
-        else
-            r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24 * sc, ref_pos.y + 24 * sc); // FIXME: Hard-coded based on mouse cursor shape expectation. Exact dimension not very important.
-        ImVec2 pos = FindBestWindowPosForPopupEx(ref_pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid);
-        if (window->AutoPosLastDirection == ImGuiDir_None)
-            pos = ref_pos + ImVec2(2, 2); // If there's not enough room, for tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
-        return pos;
-    }
-    IM_ASSERT(0);
-    return window->Pos;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
-//-----------------------------------------------------------------------------
-
-// FIXME-NAV: The existence of SetNavID vs SetNavIDWithRectRel vs SetFocusID is incredibly messy and confusing,
-// and needs some explanation or serious refactoring.
-void ImGui::SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.NavWindow);
-    IM_ASSERT(nav_layer == 0 || nav_layer == 1);
-    g.NavId = id;
-    g.NavFocusScopeId = focus_scope_id;
-    g.NavWindow->NavLastIds[nav_layer] = id;
-}
-
-void ImGui::SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel)
-{
-    ImGuiContext& g = *GImGui;
-    SetNavID(id, nav_layer, focus_scope_id);
-    g.NavWindow->NavRectRel[nav_layer] = rect_rel;
-    g.NavMousePosDirty = true;
-    g.NavDisableHighlight = false;
-    g.NavDisableMouseHover = true;
-}
-
-void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(id != 0);
-
-    // Assume that SetFocusID() is called in the context where its window->DC.NavLayerCurrent and window->DC.NavFocusScopeIdCurrent are valid.
-    // Note that window may be != g.CurrentWindow (e.g. SetFocusID call in InputTextEx for multi-line text)
-    const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent;
-    if (g.NavWindow != window)
-        g.NavInitRequest = false;
-    g.NavWindow = window;
-    g.NavId = id;
-    g.NavLayer = nav_layer;
-    g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
-    window->NavLastIds[nav_layer] = id;
-    if (window->DC.LastItemId == id)
-        window->NavRectRel[nav_layer] = ImRect(window->DC.LastItemRect.Min - window->Pos, window->DC.LastItemRect.Max - window->Pos);
-
-    if (g.ActiveIdSource == ImGuiInputSource_Nav)
-        g.NavDisableMouseHover = true;
-    else
-        g.NavDisableHighlight = true;
-}
-
-ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
-{
-    if (ImFabs(dx) > ImFabs(dy))
-        return (dx > 0.0f) ? ImGuiDir_Right : ImGuiDir_Left;
-    return (dy > 0.0f) ? ImGuiDir_Down : ImGuiDir_Up;
-}
-
-static float inline NavScoreItemDistInterval(float a0, float a1, float b0, float b1)
-{
-    if (a1 < b0)
-        return a1 - b0;
-    if (b1 < a0)
-        return a0 - b1;
-    return 0.0f;
-}
-
-static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir, ImRect& r, const ImRect& clip_rect)
-{
-    if (move_dir == ImGuiDir_Left || move_dir == ImGuiDir_Right)
-    {
-        r.Min.y = ImClamp(r.Min.y, clip_rect.Min.y, clip_rect.Max.y);
-        r.Max.y = ImClamp(r.Max.y, clip_rect.Min.y, clip_rect.Max.y);
-    }
-    else
-    {
-        r.Min.x = ImClamp(r.Min.x, clip_rect.Min.x, clip_rect.Max.x);
-        r.Max.x = ImClamp(r.Max.x, clip_rect.Min.x, clip_rect.Max.x);
-    }
-}
-
-// Scoring function for directional navigation. Based on https://gist.github.com/rygorous/6981057
-static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.NavLayer != window->DC.NavLayerCurrent)
-        return false;
-
-    const ImRect& curr = g.NavScoringRectScreen; // Current modified source rect (NB: we've applied Max.x = Min.x in NavUpdate() to inhibit the effect of having varied item width)
-    g.NavScoringCount++;
-
-    // When entering through a NavFlattened border, we consider child window items as fully clipped for scoring
-    if (window->ParentWindow == g.NavWindow)
-    {
-        IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened);
-        if (!window->ClipRect.Overlaps(cand))
-            return false;
-        cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window
-    }
-
-    // We perform scoring on items bounding box clipped by the current clipping rectangle on the other axis (clipping on our movement axis would give us equal scores for all clipped items)
-    // For example, this ensure that items in one column are not reached when moving vertically from items in another column.
-    NavClampRectToVisibleAreaForMoveDir(g.NavMoveClipDir, cand, window->ClipRect);
-
-    // Compute distance between boxes
-    // FIXME-NAV: Introducing biases for vertical navigation, needs to be removed.
-    float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x);
-    float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items
-    if (dby != 0.0f && dbx != 0.0f)
-       dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f);
-    float dist_box = ImFabs(dbx) + ImFabs(dby);
-
-    // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter)
-    float dcx = (cand.Min.x + cand.Max.x) - (curr.Min.x + curr.Max.x);
-    float dcy = (cand.Min.y + cand.Max.y) - (curr.Min.y + curr.Max.y);
-    float dist_center = ImFabs(dcx) + ImFabs(dcy); // L1 metric (need this for our connectedness guarantee)
-
-    // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance
-    ImGuiDir quadrant;
-    float dax = 0.0f, day = 0.0f, dist_axial = 0.0f;
-    if (dbx != 0.0f || dby != 0.0f)
-    {
-        // For non-overlapping boxes, use distance between boxes
-        dax = dbx;
-        day = dby;
-        dist_axial = dist_box;
-        quadrant = ImGetDirQuadrantFromDelta(dbx, dby);
-    }
-    else if (dcx != 0.0f || dcy != 0.0f)
-    {
-        // For overlapping boxes with different centers, use distance between centers
-        dax = dcx;
-        day = dcy;
-        dist_axial = dist_center;
-        quadrant = ImGetDirQuadrantFromDelta(dcx, dcy);
-    }
-    else
-    {
-        // Degenerate case: two overlapping buttons with same center, break ties arbitrarily (note that LastItemId here is really the _previous_ item order, but it doesn't matter)
-        quadrant = (window->DC.LastItemId < g.NavId) ? ImGuiDir_Left : ImGuiDir_Right;
-    }
-
-#if IMGUI_DEBUG_NAV_SCORING
-    char buf[128];
-    if (IsMouseHoveringRect(cand.Min, cand.Max))
-    {
-        ImFormatString(buf, IM_ARRAYSIZE(buf), "dbox (%.2f,%.2f->%.4f)\ndcen (%.2f,%.2f->%.4f)\nd (%.2f,%.2f->%.4f)\nnav %c, quadrant %c", dbx, dby, dist_box, dcx, dcy, dist_center, dax, day, dist_axial, "WENS"[g.NavMoveDir], "WENS"[quadrant]);
-        ImDrawList* draw_list = GetForegroundDrawList(window);
-        draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100));
-        draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200));
-        draw_list->AddRectFilled(cand.Max - ImVec2(4,4), cand.Max + CalcTextSize(buf) + ImVec2(4,4), IM_COL32(40,0,0,150));
-        draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf);
-    }
-    else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate.
-    {
-        if (IsKeyPressedMap(ImGuiKey_C)) { g.NavMoveDirLast = (ImGuiDir)((g.NavMoveDirLast + 1) & 3); g.IO.KeysDownDuration[g.IO.KeyMap[ImGuiKey_C]] = 0.01f; }
-        if (quadrant == g.NavMoveDir)
-        {
-            ImFormatString(buf, IM_ARRAYSIZE(buf), "%.0f/%.0f", dist_box, dist_center);
-            ImDrawList* draw_list = GetForegroundDrawList(window);
-            draw_list->AddRectFilled(cand.Min, cand.Max, IM_COL32(255, 0, 0, 200));
-            draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf);
-        }
-    }
- #endif
-
-    // Is it in the quadrant we're interesting in moving to?
-    bool new_best = false;
-    if (quadrant == g.NavMoveDir)
-    {
-        // Does it beat the current best candidate?
-        if (dist_box < result->DistBox)
-        {
-            result->DistBox = dist_box;
-            result->DistCenter = dist_center;
-            return true;
-        }
-        if (dist_box == result->DistBox)
-        {
-            // Try using distance between center points to break ties
-            if (dist_center < result->DistCenter)
-            {
-                result->DistCenter = dist_center;
-                new_best = true;
-            }
-            else if (dist_center == result->DistCenter)
-            {
-                // Still tied! we need to be extra-careful to make sure everything gets linked properly. We consistently break ties by symbolically moving "later" items
-                // (with higher index) to the right/downwards by an infinitesimal amount since we the current "best" button already (so it must have a lower index),
-                // this is fairly easy. This rule ensures that all buttons with dx==dy==0 will end up being linked in order of appearance along the x axis.
-                if (((g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down) ? dby : dbx) < 0.0f) // moving bj to the right/down decreases distance
-                    new_best = true;
-            }
-        }
-    }
-
-    // Axial check: if 'curr' has no link at all in some direction and 'cand' lies roughly in that direction, add a tentative link. This will only be kept if no "real" matches
-    // are found, so it only augments the graph produced by the above method using extra links. (important, since it doesn't guarantee strong connectedness)
-    // This is just to avoid buttons having no links in a particular direction when there's a suitable neighbor. you get good graphs without this too.
-    // 2017/09/29: FIXME: This now currently only enabled inside menu bars, ideally we'd disable it everywhere. Menus in particular need to catch failure. For general navigation it feels awkward.
-    // Disabling it may lead to disconnected graphs when nodes are very spaced out on different axis. Perhaps consider offering this as an option?
-    if (result->DistBox == FLT_MAX && dist_axial < result->DistAxial)  // Check axial match
-        if (g.NavLayer == 1 && !(g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
-            if ((g.NavMoveDir == ImGuiDir_Left && dax < 0.0f) || (g.NavMoveDir == ImGuiDir_Right && dax > 0.0f) || (g.NavMoveDir == ImGuiDir_Up && day < 0.0f) || (g.NavMoveDir == ImGuiDir_Down && day > 0.0f))
-            {
-                result->DistAxial = dist_axial;
-                new_best = true;
-            }
-
-    return new_best;
-}
-
-// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
-static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    //if (!g.IO.NavActive)  // [2017/10/06] Removed this possibly redundant test but I am not sure of all the side-effects yet. Some of the feature here will need to work regardless of using a _NoNavInputs flag.
-    //    return;
-
-    const ImGuiItemFlags item_flags = window->DC.ItemFlags;
-    const ImRect nav_bb_rel(nav_bb.Min - window->Pos, nav_bb.Max - window->Pos);
-
-    // Process Init Request
-    if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent)
-    {
-        // Even if 'ImGuiItemFlags_NoNavDefaultFocus' is on (typically collapse/close button) we record the first ResultId so they can be used as a fallback
-        if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus) || g.NavInitResultId == 0)
-        {
-            g.NavInitResultId = id;
-            g.NavInitResultRectRel = nav_bb_rel;
-        }
-        if (!(item_flags & ImGuiItemFlags_NoNavDefaultFocus))
-        {
-            g.NavInitRequest = false; // Found a match, clear request
-            NavUpdateAnyRequestFlag();
-        }
-    }
-
-    // Process Move Request (scoring for navigation)
-    // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy)
-    if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled|ImGuiItemFlags_NoNav)))
-    {
-        ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
-#if IMGUI_DEBUG_NAV_SCORING
-        // [DEBUG] Score all items in NavWindow at all times
-        if (!g.NavMoveRequest)
-            g.NavMoveDir = g.NavMoveDirLast;
-        bool new_best = NavScoreItem(result, nav_bb) && g.NavMoveRequest;
-#else
-        bool new_best = g.NavMoveRequest && NavScoreItem(result, nav_bb);
-#endif
-        if (new_best)
-        {
-            result->Window = window;
-            result->ID = id;
-            result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
-            result->RectRel = nav_bb_rel;
-        }
-
-        // Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
-        const float VISIBLE_RATIO = 0.70f;
-        if ((g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
-            if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
-                if (NavScoreItem(&g.NavMoveResultLocalVisibleSet, nav_bb))
-                {
-                    result = &g.NavMoveResultLocalVisibleSet;
-                    result->Window = window;
-                    result->ID = id;
-                    result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
-                    result->RectRel = nav_bb_rel;
-                }
-    }
-
-    // Update window-relative bounding box of navigated item
-    if (g.NavId == id)
-    {
-        g.NavWindow = window;                                           // Always refresh g.NavWindow, because some operations such as FocusItem() don't have a window.
-        g.NavLayer = window->DC.NavLayerCurrent;
-        g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
-        g.NavIdIsAlive = true;
-        g.NavIdTabCounter = window->DC.FocusCounterTabStop;
-        window->NavRectRel[window->DC.NavLayerCurrent] = nav_bb_rel;    // Store item bounding box (relative to window position)
-    }
-}
-
-bool ImGui::NavMoveRequestButNoResultYet()
-{
-    ImGuiContext& g = *GImGui;
-    return g.NavMoveRequest && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0;
-}
-
-void ImGui::NavMoveRequestCancel()
-{
-    ImGuiContext& g = *GImGui;
-    g.NavMoveRequest = false;
-    NavUpdateAnyRequestFlag();
-}
-
-void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_None);
-    NavMoveRequestCancel();
-    g.NavMoveDir = move_dir;
-    g.NavMoveClipDir = clip_dir;
-    g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
-    g.NavMoveRequestFlags = move_flags;
-    g.NavWindow->NavRectRel[g.NavLayer] = bb_rel;
-}
-
-void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.NavWindow != window || !NavMoveRequestButNoResultYet() || g.NavMoveRequestForward != ImGuiNavForward_None || g.NavLayer != 0)
-        return;
-    IM_ASSERT(move_flags != 0); // No points calling this with no wrapping
-    ImRect bb_rel = window->NavRectRel[0];
-
-    ImGuiDir clip_dir = g.NavMoveDir;
-    if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
-    {
-        bb_rel.Min.x = bb_rel.Max.x = ImMax(window->SizeFull.x, window->ContentSize.x + window->WindowPadding.x * 2.0f) - window->Scroll.x;
-        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(-bb_rel.GetHeight()); clip_dir = ImGuiDir_Up; }
-        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
-    }
-    if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
-    {
-        bb_rel.Min.x = bb_rel.Max.x = -window->Scroll.x;
-        if (move_flags & ImGuiNavMoveFlags_WrapX) { bb_rel.TranslateY(+bb_rel.GetHeight()); clip_dir = ImGuiDir_Down; }
-        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
-    }
-    if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
-    {
-        bb_rel.Min.y = bb_rel.Max.y = ImMax(window->SizeFull.y, window->ContentSize.y + window->WindowPadding.y * 2.0f) - window->Scroll.y;
-        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(-bb_rel.GetWidth()); clip_dir = ImGuiDir_Left; }
-        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
-    }
-    if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
-    {
-        bb_rel.Min.y = bb_rel.Max.y = -window->Scroll.y;
-        if (move_flags & ImGuiNavMoveFlags_WrapY) { bb_rel.TranslateX(+bb_rel.GetWidth()); clip_dir = ImGuiDir_Right; }
-        NavMoveRequestForward(g.NavMoveDir, clip_dir, bb_rel, move_flags);
-    }
-}
-
-// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0).
-// This way we could find the last focused window among our children. It would be much less confusing this way?
-static void ImGui::NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window)
-{
-    ImGuiWindow* parent_window = nav_window;
-    while (parent_window && (parent_window->Flags & ImGuiWindowFlags_ChildWindow) != 0 && (parent_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
-        parent_window = parent_window->ParentWindow;
-    if (parent_window && parent_window != nav_window)
-        parent_window->NavLastChildNavWindow = nav_window;
-}
-
-// Restore the last focused child.
-// Call when we are expected to land on the Main Layer (0) after FocusWindow()
-static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window)
-{
-    return window->NavLastChildNavWindow ? window->NavLastChildNavWindow : window;
-}
-
-static void NavRestoreLayer(ImGuiNavLayer layer)
-{
-    ImGuiContext& g = *GImGui;
-    g.NavLayer = layer;
-    if (layer == 0)
-        g.NavWindow = ImGui::NavRestoreLastChildNavWindow(g.NavWindow);
-    ImGuiWindow* window = g.NavWindow;
-    if (layer == 0 && window->NavLastIds[0] != 0)
-        ImGui::SetNavIDWithRectRel(window->NavLastIds[0], layer, 0, window->NavRectRel[0]);
-    else
-        ImGui::NavInitWindow(window, true);
-}
-
-static inline void ImGui::NavUpdateAnyRequestFlag()
-{
-    ImGuiContext& g = *GImGui;
-    g.NavAnyRequest = g.NavMoveRequest || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL);
-    if (g.NavAnyRequest)
-        IM_ASSERT(g.NavWindow != NULL);
-}
-
-// This needs to be called before we submit any widget (aka in or before Begin)
-void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(window == g.NavWindow);
-    bool init_for_nav = false;
-    if (!(window->Flags & ImGuiWindowFlags_NoNavInputs))
-        if (!(window->Flags & ImGuiWindowFlags_ChildWindow) || (window->Flags & ImGuiWindowFlags_Popup) || (window->NavLastIds[0] == 0) || force_reinit)
-            init_for_nav = true;
-    //IMGUI_DEBUG_LOG("[Nav] NavInitWindow() init_for_nav=%d, window=\"%s\", layer=%d\n", init_for_nav, window->Name, g.NavLayer);
-    if (init_for_nav)
-    {
-        SetNavID(0, g.NavLayer, 0);
-        g.NavInitRequest = true;
-        g.NavInitRequestFromMove = false;
-        g.NavInitResultId = 0;
-        g.NavInitResultRectRel = ImRect();
-        NavUpdateAnyRequestFlag();
-    }
-    else
-    {
-        g.NavId = window->NavLastIds[0];
-        g.NavFocusScopeId = 0;
-    }
-}
-
-static ImVec2 ImGui::NavCalcPreferredRefPos()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.NavDisableHighlight || !g.NavDisableMouseHover || !g.NavWindow)
-    {
-        // Mouse (we need a fallback in case the mouse becomes invalid after being used)
-        if (IsMousePosValid(&g.IO.MousePos))
-            return g.IO.MousePos;
-        return g.LastValidMousePos;
-    }
-    else
-    {
-        // When navigation is active and mouse is disabled, decide on an arbitrary position around the bottom left of the currently navigated item.
-        const ImRect& rect_rel = g.NavWindow->NavRectRel[g.NavLayer];
-        ImVec2 pos = g.NavWindow->Pos + ImVec2(rect_rel.Min.x + ImMin(g.Style.FramePadding.x * 4, rect_rel.GetWidth()), rect_rel.Max.y - ImMin(g.Style.FramePadding.y, rect_rel.GetHeight()));
-        ImRect visible_rect = GetViewportRect();
-        return ImFloor(ImClamp(pos, visible_rect.Min, visible_rect.Max));   // ImFloor() is important because non-integer mouse position application in back-end might be lossy and result in undesirable non-zero delta.
-    }
-}
-
-float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode)
-{
-    ImGuiContext& g = *GImGui;
-    if (mode == ImGuiInputReadMode_Down)
-        return g.IO.NavInputs[n];                         // Instant, read analog input (0.0f..1.0f, as provided by user)
-
-    const float t = g.IO.NavInputsDownDuration[n];
-    if (t < 0.0f && mode == ImGuiInputReadMode_Released)  // Return 1.0f when just released, no repeat, ignore analog input.
-        return (g.IO.NavInputsDownDurationPrev[n] >= 0.0f ? 1.0f : 0.0f);
-    if (t < 0.0f)
-        return 0.0f;
-    if (mode == ImGuiInputReadMode_Pressed)               // Return 1.0f when just pressed, no repeat, ignore analog input.
-        return (t == 0.0f) ? 1.0f : 0.0f;
-    if (mode == ImGuiInputReadMode_Repeat)
-        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.80f);
-    if (mode == ImGuiInputReadMode_RepeatSlow)
-        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 1.25f, g.IO.KeyRepeatRate * 2.00f);
-    if (mode == ImGuiInputReadMode_RepeatFast)
-        return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.30f);
-    return 0.0f;
-}
-
-ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor, float fast_factor)
-{
-    ImVec2 delta(0.0f, 0.0f);
-    if (dir_sources & ImGuiNavDirSourceFlags_Keyboard)
-        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_KeyRight_, mode)   - GetNavInputAmount(ImGuiNavInput_KeyLeft_,   mode), GetNavInputAmount(ImGuiNavInput_KeyDown_,   mode) - GetNavInputAmount(ImGuiNavInput_KeyUp_,   mode));
-    if (dir_sources & ImGuiNavDirSourceFlags_PadDPad)
-        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_DpadRight, mode)   - GetNavInputAmount(ImGuiNavInput_DpadLeft,   mode), GetNavInputAmount(ImGuiNavInput_DpadDown,   mode) - GetNavInputAmount(ImGuiNavInput_DpadUp,   mode));
-    if (dir_sources & ImGuiNavDirSourceFlags_PadLStick)
-        delta += ImVec2(GetNavInputAmount(ImGuiNavInput_LStickRight, mode) - GetNavInputAmount(ImGuiNavInput_LStickLeft, mode), GetNavInputAmount(ImGuiNavInput_LStickDown, mode) - GetNavInputAmount(ImGuiNavInput_LStickUp, mode));
-    if (slow_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakSlow))
-        delta *= slow_factor;
-    if (fast_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakFast))
-        delta *= fast_factor;
-    return delta;
-}
-
-static void ImGui::NavUpdate()
-{
-    ImGuiContext& g = *GImGui;
-    g.IO.WantSetMousePos = false;
-#if 0
-    if (g.NavScoringCount > 0) IMGUI_DEBUG_LOG("NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
-#endif
-
-    // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard)
-    // (do it before we map Keyboard input!)
-    bool nav_keyboard_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0;
-    bool nav_gamepad_active = (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (g.IO.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0;
-    if (nav_gamepad_active)
-        if (g.IO.NavInputs[ImGuiNavInput_Activate] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Input] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Cancel] > 0.0f || g.IO.NavInputs[ImGuiNavInput_Menu] > 0.0f)
-            g.NavInputSource = ImGuiInputSource_NavGamepad;
-
-    // Update Keyboard->Nav inputs mapping
-    if (nav_keyboard_active)
-    {
-        #define NAV_MAP_KEY(_KEY, _NAV_INPUT)  do { if (IsKeyDown(g.IO.KeyMap[_KEY])) { g.IO.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_NavKeyboard; } } while (0)
-        NAV_MAP_KEY(ImGuiKey_Space,     ImGuiNavInput_Activate );
-        NAV_MAP_KEY(ImGuiKey_Enter,     ImGuiNavInput_Input    );
-        NAV_MAP_KEY(ImGuiKey_Escape,    ImGuiNavInput_Cancel   );
-        NAV_MAP_KEY(ImGuiKey_LeftArrow, ImGuiNavInput_KeyLeft_ );
-        NAV_MAP_KEY(ImGuiKey_RightArrow,ImGuiNavInput_KeyRight_);
-        NAV_MAP_KEY(ImGuiKey_UpArrow,   ImGuiNavInput_KeyUp_   );
-        NAV_MAP_KEY(ImGuiKey_DownArrow, ImGuiNavInput_KeyDown_ );
-        if (g.IO.KeyCtrl)
-            g.IO.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f;
-        if (g.IO.KeyShift)
-            g.IO.NavInputs[ImGuiNavInput_TweakFast] = 1.0f;
-        if (g.IO.KeyAlt && !g.IO.KeyCtrl) // AltGR is Alt+Ctrl, also even on keyboards without AltGR we don't want Alt+Ctrl to open menu.
-            g.IO.NavInputs[ImGuiNavInput_KeyMenu_]  = 1.0f;
-        #undef NAV_MAP_KEY
-    }
-    memcpy(g.IO.NavInputsDownDurationPrev, g.IO.NavInputsDownDuration, sizeof(g.IO.NavInputsDownDuration));
-    for (int i = 0; i < IM_ARRAYSIZE(g.IO.NavInputs); i++)
-        g.IO.NavInputsDownDuration[i] = (g.IO.NavInputs[i] > 0.0f) ? (g.IO.NavInputsDownDuration[i] < 0.0f ? 0.0f : g.IO.NavInputsDownDuration[i] + g.IO.DeltaTime) : -1.0f;
-
-    // Process navigation init request (select first/default focus)
-    // In very rare cases g.NavWindow may be null (e.g. clearing focus after requesting an init request, which does happen when releasing Alt while clicking on void)
-    if (g.NavInitResultId != 0 && (!g.NavDisableHighlight || g.NavInitRequestFromMove) && g.NavWindow)
-    {
-        // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
-        //IMGUI_DEBUG_LOG("[Nav] Apply NavInitRequest result: 0x%08X Layer %d in \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name);
-        if (g.NavInitRequestFromMove)
-            SetNavIDWithRectRel(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel);
-        else
-            SetNavID(g.NavInitResultId, g.NavLayer, 0);
-        g.NavWindow->NavRectRel[g.NavLayer] = g.NavInitResultRectRel;
-    }
-    g.NavInitRequest = false;
-    g.NavInitRequestFromMove = false;
-    g.NavInitResultId = 0;
-    g.NavJustMovedToId = 0;
-
-    // Process navigation move request
-    if (g.NavMoveRequest)
-        NavUpdateMoveResult();
-
-    // When a forwarded move request failed, we restore the highlight that we disabled during the forward frame
-    if (g.NavMoveRequestForward == ImGuiNavForward_ForwardActive)
-    {
-        IM_ASSERT(g.NavMoveRequest);
-        if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0)
-            g.NavDisableHighlight = false;
-        g.NavMoveRequestForward = ImGuiNavForward_None;
-    }
-
-    // Apply application mouse position movement, after we had a chance to process move request result.
-    if (g.NavMousePosDirty && g.NavIdIsAlive)
-    {
-        // Set mouse position given our knowledge of the navigated item position from last frame
-        if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) && (g.IO.BackendFlags & ImGuiBackendFlags_HasSetMousePos))
-        {
-            if (!g.NavDisableHighlight && g.NavDisableMouseHover && g.NavWindow)
-            {
-                g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredRefPos();
-                g.IO.WantSetMousePos = true;
-            }
-        }
-        g.NavMousePosDirty = false;
-    }
-    g.NavIdIsAlive = false;
-    g.NavJustTabbedId = 0;
-    IM_ASSERT(g.NavLayer == 0 || g.NavLayer == 1);
-
-    // Store our return window (for returning from Layer 1 to Layer 0) and clear it as soon as we step back in our own Layer 0
-    if (g.NavWindow)
-        NavSaveLastChildNavWindowIntoParent(g.NavWindow);
-    if (g.NavWindow && g.NavWindow->NavLastChildNavWindow != NULL && g.NavLayer == 0)
-        g.NavWindow->NavLastChildNavWindow = NULL;
-
-    // Update CTRL+TAB and Windowing features (hold Square to move/resize/etc.)
-    NavUpdateWindowing();
-
-    // Set output flags for user application
-    g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs);
-    g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL);
-
-    // Process NavCancel input (to close a popup, get back to parent, clear focus)
-    if (IsNavInputTest(ImGuiNavInput_Cancel, ImGuiInputReadMode_Pressed))
-    {
-        if (g.ActiveId != 0)
-        {
-            if (!IsActiveIdUsingNavInput(ImGuiNavInput_Cancel))
-                ClearActiveID();
-        }
-        else if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow) && !(g.NavWindow->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->ParentWindow)
-        {
-            // Exit child window
-            ImGuiWindow* child_window = g.NavWindow;
-            ImGuiWindow* parent_window = g.NavWindow->ParentWindow;
-            IM_ASSERT(child_window->ChildId != 0);
-            FocusWindow(parent_window);
-            SetNavID(child_window->ChildId, 0, 0);
-            // Reassigning with same value, we're being explicit here.
-            g.NavIdIsAlive = false;     // -V1048
-            if (g.NavDisableMouseHover)
-                g.NavMousePosDirty = true;
-        }
-        else if (g.OpenPopupStack.Size > 0)
-        {
-            // Close open popup/menu
-            if (!(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal))
-                ClosePopupToLevel(g.OpenPopupStack.Size - 1, true);
-        }
-        else if (g.NavLayer != 0)
-        {
-            // Leave the "menu" layer
-            NavRestoreLayer(ImGuiNavLayer_Main);
-        }
-        else
-        {
-            // Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were
-            if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup) || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow)))
-                g.NavWindow->NavLastIds[0] = 0;
-            g.NavId = g.NavFocusScopeId = 0;
-        }
-    }
-
-    // Process manual activation request
-    g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = 0;
-    if (g.NavId != 0 && !g.NavDisableHighlight && !g.NavWindowingTarget && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
-    {
-        bool activate_down = IsNavInputDown(ImGuiNavInput_Activate);
-        bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiInputReadMode_Pressed);
-        if (g.ActiveId == 0 && activate_pressed)
-            g.NavActivateId = g.NavId;
-        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_down)
-            g.NavActivateDownId = g.NavId;
-        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_pressed)
-            g.NavActivatePressedId = g.NavId;
-        if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && IsNavInputTest(ImGuiNavInput_Input, ImGuiInputReadMode_Pressed))
-            g.NavInputId = g.NavId;
-    }
-    if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
-        g.NavDisableHighlight = true;
-    if (g.NavActivateId != 0)
-        IM_ASSERT(g.NavActivateDownId == g.NavActivateId);
-    g.NavMoveRequest = false;
-
-    // Process programmatic activation request
-    if (g.NavNextActivateId != 0)
-        g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavInputId = g.NavNextActivateId;
-    g.NavNextActivateId = 0;
-
-    // Initiate directional inputs request
-    if (g.NavMoveRequestForward == ImGuiNavForward_None)
-    {
-        g.NavMoveDir = ImGuiDir_None;
-        g.NavMoveRequestFlags = ImGuiNavMoveFlags_None;
-        if (g.NavWindow && !g.NavWindowingTarget && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
-        {
-            const ImGuiInputReadMode read_mode = ImGuiInputReadMode_Repeat;
-            if (!IsActiveIdUsingNavDir(ImGuiDir_Left)  && (IsNavInputTest(ImGuiNavInput_DpadLeft,  read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_,  read_mode))) { g.NavMoveDir = ImGuiDir_Left; }
-            if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; }
-            if (!IsActiveIdUsingNavDir(ImGuiDir_Up)    && (IsNavInputTest(ImGuiNavInput_DpadUp,    read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_,    read_mode))) { g.NavMoveDir = ImGuiDir_Up; }
-            if (!IsActiveIdUsingNavDir(ImGuiDir_Down)  && (IsNavInputTest(ImGuiNavInput_DpadDown,  read_mode) || IsNavInputTest(ImGuiNavInput_KeyDown_,  read_mode))) { g.NavMoveDir = ImGuiDir_Down; }
-        }
-        g.NavMoveClipDir = g.NavMoveDir;
-    }
-    else
-    {
-        // Forwarding previous request (which has been modified, e.g. wrap around menus rewrite the requests with a starting rectangle at the other side of the window)
-        // (Preserve g.NavMoveRequestFlags, g.NavMoveClipDir which were set by the NavMoveRequestForward() function)
-        IM_ASSERT(g.NavMoveDir != ImGuiDir_None && g.NavMoveClipDir != ImGuiDir_None);
-        IM_ASSERT(g.NavMoveRequestForward == ImGuiNavForward_ForwardQueued);
-        g.NavMoveRequestForward = ImGuiNavForward_ForwardActive;
-    }
-
-    // Update PageUp/PageDown/Home/End scroll
-    // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag?
-    float nav_scoring_rect_offset_y = 0.0f;
-    if (nav_keyboard_active)
-        nav_scoring_rect_offset_y = NavUpdatePageUpPageDown();
-
-    // If we initiate a movement request and have no current NavId, we initiate a InitDefautRequest that will be used as a fallback if the direction fails to find a match
-    if (g.NavMoveDir != ImGuiDir_None)
-    {
-        g.NavMoveRequest = true;
-        g.NavMoveDirLast = g.NavMoveDir;
-    }
-    if (g.NavMoveRequest && g.NavId == 0)
-    {
-        //IMGUI_DEBUG_LOG("[Nav] NavInitRequest from move, window \"%s\", layer=%d\n", g.NavWindow->Name, g.NavLayer);
-        g.NavInitRequest = g.NavInitRequestFromMove = true;
-        // Reassigning with same value, we're being explicit here.
-        g.NavInitResultId = 0;     // -V1048
-        g.NavDisableHighlight = false;
-    }
-    NavUpdateAnyRequestFlag();
-
-    // Scrolling
-    if (g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.NavWindowingTarget)
-    {
-        // *Fallback* manual-scroll with Nav directional keys when window has no navigable item
-        ImGuiWindow* window = g.NavWindow;
-        const float scroll_speed = IM_ROUND(window->CalcFontSize() * 100 * g.IO.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported.
-        if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll && g.NavMoveRequest)
-        {
-            if (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right)
-                SetScrollX(window, ImFloor(window->Scroll.x + ((g.NavMoveDir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed));
-            if (g.NavMoveDir == ImGuiDir_Up || g.NavMoveDir == ImGuiDir_Down)
-                SetScrollY(window, ImFloor(window->Scroll.y + ((g.NavMoveDir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed));
-        }
-
-        // *Normal* Manual scroll with NavScrollXXX keys
-        // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds.
-        ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f/10.0f, 10.0f);
-        if (scroll_dir.x != 0.0f && window->ScrollbarX)
-        {
-            SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed));
-            g.NavMoveFromClampedRefRect = true;
-        }
-        if (scroll_dir.y != 0.0f)
-        {
-            SetScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed));
-            g.NavMoveFromClampedRefRect = true;
-        }
-    }
-
-    // Reset search results
-    g.NavMoveResultLocal.Clear();
-    g.NavMoveResultLocalVisibleSet.Clear();
-    g.NavMoveResultOther.Clear();
-
-    // When we have manually scrolled (without using navigation) and NavId becomes out of bounds, we project its bounding box to the visible area to restart navigation within visible items
-    if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == 0)
-    {
-        ImGuiWindow* window = g.NavWindow;
-        ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1,1), window->InnerRect.Max - window->Pos + ImVec2(1,1));
-        if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
-        {
-            float pad = window->CalcFontSize() * 0.5f;
-            window_rect_rel.Expand(ImVec2(-ImMin(window_rect_rel.GetWidth(), pad), -ImMin(window_rect_rel.GetHeight(), pad))); // Terrible approximation for the intent of starting navigation from first fully visible item
-            window->NavRectRel[g.NavLayer].ClipWith(window_rect_rel);
-            g.NavId = g.NavFocusScopeId = 0;
-        }
-        g.NavMoveFromClampedRefRect = false;
-    }
-
-    // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items)
-    ImRect nav_rect_rel = (g.NavWindow && !g.NavWindow->NavRectRel[g.NavLayer].IsInverted()) ? g.NavWindow->NavRectRel[g.NavLayer] : ImRect(0,0,0,0);
-    g.NavScoringRectScreen = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect();
-    g.NavScoringRectScreen.TranslateY(nav_scoring_rect_offset_y);
-    g.NavScoringRectScreen.Min.x = ImMin(g.NavScoringRectScreen.Min.x + 1.0f, g.NavScoringRectScreen.Max.x);
-    g.NavScoringRectScreen.Max.x = g.NavScoringRectScreen.Min.x;
-    IM_ASSERT(!g.NavScoringRectScreen.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem().
-    //GetForegroundDrawList()->AddRect(g.NavScoringRectScreen.Min, g.NavScoringRectScreen.Max, IM_COL32(255,200,0,255)); // [DEBUG]
-    g.NavScoringCount = 0;
-#if IMGUI_DEBUG_NAV_RECTS
-    if (g.NavWindow)
-    {
-        ImDrawList* draw_list = GetForegroundDrawList(g.NavWindow);
-        if (1) { for (int layer = 0; layer < 2; layer++) draw_list->AddRect(g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Min, g.NavWindow->Pos + g.NavWindow->NavRectRel[layer].Max, IM_COL32(255,200,0,255)); } // [DEBUG]
-        if (1) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); draw_list->AddCircleFilled(p, 3.0f, col); draw_list->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); }
-    }
-#endif
-}
-
-// Apply result from previous frame navigation directional move request
-static void ImGui::NavUpdateMoveResult()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0)
-    {
-        // In a situation when there is no results but NavId != 0, re-enable the Navigation highlight (because g.NavId is not considered as a possible result)
-        if (g.NavId != 0)
-        {
-            g.NavDisableHighlight = false;
-            g.NavDisableMouseHover = true;
-        }
-        return;
-    }
-
-    // Select which result to use
-    ImGuiNavMoveResult* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
-
-    // PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page.
-    if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet)
-        if (g.NavMoveResultLocalVisibleSet.ID != 0 && g.NavMoveResultLocalVisibleSet.ID != g.NavId)
-            result = &g.NavMoveResultLocalVisibleSet;
-
-    // Maybe entering a flattened child from the outside? In this case solve the tie using the regular scoring rules.
-    if (result != &g.NavMoveResultOther && g.NavMoveResultOther.ID != 0 && g.NavMoveResultOther.Window->ParentWindow == g.NavWindow)
-        if ((g.NavMoveResultOther.DistBox < result->DistBox) || (g.NavMoveResultOther.DistBox == result->DistBox && g.NavMoveResultOther.DistCenter < result->DistCenter))
-            result = &g.NavMoveResultOther;
-    IM_ASSERT(g.NavWindow && result->Window);
-
-    // Scroll to keep newly navigated item fully into view.
-    if (g.NavLayer == 0)
-    {
-        ImVec2 delta_scroll;
-        if (g.NavMoveRequestFlags & ImGuiNavMoveFlags_ScrollToEdge)
-        {
-            float scroll_target = (g.NavMoveDir == ImGuiDir_Up) ? result->Window->ScrollMax.y : 0.0f;
-            delta_scroll.y = result->Window->Scroll.y - scroll_target;
-            SetScrollY(result->Window, scroll_target);
-        }
-        else
-        {
-            ImRect rect_abs = ImRect(result->RectRel.Min + result->Window->Pos, result->RectRel.Max + result->Window->Pos);
-            delta_scroll = ScrollToBringRectIntoView(result->Window, rect_abs);
-        }
-
-        // Offset our result position so mouse position can be applied immediately after in NavUpdate()
-        result->RectRel.TranslateX(-delta_scroll.x);
-        result->RectRel.TranslateY(-delta_scroll.y);
-    }
-
-    ClearActiveID();
-    g.NavWindow = result->Window;
-    if (g.NavId != result->ID)
-    {
-        // Don't set NavJustMovedToId if just landed on the same spot (which may happen with ImGuiNavMoveFlags_AllowCurrentNavId)
-        g.NavJustMovedToId = result->ID;
-        g.NavJustMovedToFocusScopeId = result->FocusScopeId;
-
-    }
-    SetNavIDWithRectRel(result->ID, g.NavLayer, result->FocusScopeId, result->RectRel);
-    g.NavMoveFromClampedRefRect = false;
-}
-
-// Handle PageUp/PageDown/Home/End keys
-static float ImGui::NavUpdatePageUpPageDown()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.NavMoveDir != ImGuiDir_None || g.NavWindow == NULL)
-        return 0.0f;
-    if ((g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL || g.NavLayer != 0)
-        return 0.0f;
-
-    ImGuiWindow* window = g.NavWindow;
-    const bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && !IsActiveIdUsingKey(ImGuiKey_PageUp);
-    const bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && !IsActiveIdUsingKey(ImGuiKey_PageDown);
-    const bool home_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_Home]) && !IsActiveIdUsingKey(ImGuiKey_Home);
-    const bool end_pressed = IsKeyPressed(g.IO.KeyMap[ImGuiKey_End]) && !IsActiveIdUsingKey(ImGuiKey_End);
-    if (page_up_held != page_down_held || home_pressed != end_pressed) // If either (not both) are pressed
-    {
-        if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll)
-        {
-            // Fallback manual-scroll when window has no navigable item
-            if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
-                SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight());
-            else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
-                SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight());
-            else if (home_pressed)
-                SetScrollY(window, 0.0f);
-            else if (end_pressed)
-                SetScrollY(window, window->ScrollMax.y);
-        }
-        else
-        {
-            ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
-            const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
-            float nav_scoring_rect_offset_y = 0.0f;
-            if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageUp], true))
-            {
-                nav_scoring_rect_offset_y = -page_offset_y;
-                g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
-                g.NavMoveClipDir = ImGuiDir_Up;
-                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
-            }
-            else if (IsKeyPressed(g.IO.KeyMap[ImGuiKey_PageDown], true))
-            {
-                nav_scoring_rect_offset_y = +page_offset_y;
-                g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
-                g.NavMoveClipDir = ImGuiDir_Down;
-                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
-            }
-            else if (home_pressed)
-            {
-                // FIXME-NAV: handling of Home/End is assuming that the top/bottom most item will be visible with Scroll.y == 0/ScrollMax.y
-                // Scrolling will be handled via the ImGuiNavMoveFlags_ScrollToEdge flag, we don't scroll immediately to avoid scrolling happening before nav result.
-                // Preserve current horizontal position if we have any.
-                nav_rect_rel.Min.y = nav_rect_rel.Max.y = -window->Scroll.y;
-                if (nav_rect_rel.IsInverted())
-                    nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
-                g.NavMoveDir = ImGuiDir_Down;
-                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
-            }
-            else if (end_pressed)
-            {
-                nav_rect_rel.Min.y = nav_rect_rel.Max.y = window->ScrollMax.y + window->SizeFull.y - window->Scroll.y;
-                if (nav_rect_rel.IsInverted())
-                    nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
-                g.NavMoveDir = ImGuiDir_Up;
-                g.NavMoveRequestFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdge;
-            }
-            return nav_scoring_rect_offset_y;
-        }
-    }
-    return 0.0f;
-}
-
-static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N)
-{
-    ImGuiContext& g = *GImGui;
-    for (int i = g.WindowsFocusOrder.Size-1; i >= 0; i--)
-        if (g.WindowsFocusOrder[i] == window)
-            return i;
-    return -1;
-}
-
-static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int dir) // FIXME-OPT O(N)
-{
-    ImGuiContext& g = *GImGui;
-    for (int i = i_start; i >= 0 && i < g.WindowsFocusOrder.Size && i != i_stop; i += dir)
-        if (ImGui::IsWindowNavFocusable(g.WindowsFocusOrder[i]))
-            return g.WindowsFocusOrder[i];
-    return NULL;
-}
-
-static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.NavWindowingTarget);
-    if (g.NavWindowingTarget->Flags & ImGuiWindowFlags_Modal)
-        return;
-
-    const int i_current = ImGui::FindWindowFocusIndex(g.NavWindowingTarget);
-    ImGuiWindow* window_target = FindWindowNavFocusable(i_current + focus_change_dir, -INT_MAX, focus_change_dir);
-    if (!window_target)
-        window_target = FindWindowNavFocusable((focus_change_dir < 0) ? (g.WindowsFocusOrder.Size - 1) : 0, i_current, focus_change_dir);
-    if (window_target) // Don't reset windowing target if there's a single window in the list
-        g.NavWindowingTarget = g.NavWindowingTargetAnim = window_target;
-    g.NavWindowingToggleLayer = false;
-}
-
-// Windowing management mode
-// Keyboard: CTRL+Tab (change focus/move/resize), Alt (toggle menu layer)
-// Gamepad:  Hold Menu/Square (change focus/move/resize), Tap Menu/Square (toggle menu layer)
-static void ImGui::NavUpdateWindowing()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* apply_focus_window = NULL;
-    bool apply_toggle_layer = false;
-
-    ImGuiWindow* modal_window = GetTopMostPopupModal();
-    if (modal_window != NULL)
-    {
-        g.NavWindowingTarget = NULL;
-        return;
-    }
-
-    // Fade out
-    if (g.NavWindowingTargetAnim && g.NavWindowingTarget == NULL)
-    {
-        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha - g.IO.DeltaTime * 10.0f, 0.0f);
-        if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f)
-            g.NavWindowingTargetAnim = NULL;
-    }
-
-    // Start CTRL-TAB or Square+L/R window selection
-    bool start_windowing_with_gamepad = !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiInputReadMode_Pressed);
-    bool start_windowing_with_keyboard = !g.NavWindowingTarget && g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_Tab) && (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard);
-    if (start_windowing_with_gamepad || start_windowing_with_keyboard)
-        if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavFocusable(g.WindowsFocusOrder.Size - 1, -INT_MAX, -1))
-        {
-            g.NavWindowingTarget = g.NavWindowingTargetAnim = window->RootWindow; // FIXME-DOCK: Will need to use RootWindowDockStop
-            g.NavWindowingTimer = g.NavWindowingHighlightAlpha = 0.0f;
-            g.NavWindowingToggleLayer = start_windowing_with_keyboard ? false : true;
-            g.NavInputSource = start_windowing_with_keyboard ? ImGuiInputSource_NavKeyboard : ImGuiInputSource_NavGamepad;
-        }
-
-    // Gamepad update
-    g.NavWindowingTimer += g.IO.DeltaTime;
-    if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavGamepad)
-    {
-        // Highlight only appears after a brief time holding the button, so that a fast tap on PadMenu (to toggle NavLayer) doesn't add visual noise
-        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f));
-
-        // Select window to focus
-        const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiInputReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiInputReadMode_RepeatSlow);
-        if (focus_change_dir != 0)
-        {
-            NavUpdateWindowingHighlightWindow(focus_change_dir);
-            g.NavWindowingHighlightAlpha = 1.0f;
-        }
-
-        // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered top-most)
-        if (!IsNavInputDown(ImGuiNavInput_Menu))
-        {
-            g.NavWindowingToggleLayer &= (g.NavWindowingHighlightAlpha < 1.0f); // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore.
-            if (g.NavWindowingToggleLayer && g.NavWindow)
-                apply_toggle_layer = true;
-            else if (!g.NavWindowingToggleLayer)
-                apply_focus_window = g.NavWindowingTarget;
-            g.NavWindowingTarget = NULL;
-        }
-    }
-
-    // Keyboard: Focus
-    if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_NavKeyboard)
-    {
-        // Visuals only appears after a brief time after pressing TAB the first time, so that a fast CTRL+TAB doesn't add visual noise
-        g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // 1.0f
-        if (IsKeyPressedMap(ImGuiKey_Tab, true))
-            NavUpdateWindowingHighlightWindow(g.IO.KeyShift ? +1 : -1);
-        if (!g.IO.KeyCtrl)
-            apply_focus_window = g.NavWindowingTarget;
-    }
-
-    // Keyboard: Press and Release ALT to toggle menu layer
-    // FIXME: We lack an explicit IO variable for "is the imgui window focused", so compare mouse validity to detect the common case of back-end clearing releases all keys on ALT-TAB
-    if (IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Pressed))
-        g.NavWindowingToggleLayer = true;
-    if ((g.ActiveId == 0 || g.ActiveIdAllowOverlap) && g.NavWindowingToggleLayer && IsNavInputTest(ImGuiNavInput_KeyMenu_, ImGuiInputReadMode_Released))
-        if (IsMousePosValid(&g.IO.MousePos) == IsMousePosValid(&g.IO.MousePosPrev))
-            apply_toggle_layer = true;
-
-    // Move window
-    if (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoMove))
-    {
-        ImVec2 move_delta;
-        if (g.NavInputSource == ImGuiInputSource_NavKeyboard && !g.IO.KeyShift)
-            move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard, ImGuiInputReadMode_Down);
-        if (g.NavInputSource == ImGuiInputSource_NavGamepad)
-            move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down);
-        if (move_delta.x != 0.0f || move_delta.y != 0.0f)
-        {
-            const float NAV_MOVE_SPEED = 800.0f;
-            const float move_speed = ImFloor(NAV_MOVE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y)); // FIXME: Doesn't code variable framerate very well
-            SetWindowPos(g.NavWindowingTarget->RootWindow, g.NavWindowingTarget->RootWindow->Pos + move_delta * move_speed, ImGuiCond_Always);
-            g.NavDisableMouseHover = true;
-            MarkIniSettingsDirty(g.NavWindowingTarget);
-        }
-    }
-
-    // Apply final focus
-    if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindow))
-    {
-        ClearActiveID();
-        g.NavDisableHighlight = false;
-        g.NavDisableMouseHover = true;
-        apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window);
-        ClosePopupsOverWindow(apply_focus_window, false);
-        FocusWindow(apply_focus_window);
-        if (apply_focus_window->NavLastIds[0] == 0)
-            NavInitWindow(apply_focus_window, false);
-
-        // If the window only has a menu layer, select it directly
-        if (apply_focus_window->DC.NavLayerActiveMask == (1 << ImGuiNavLayer_Menu))
-            g.NavLayer = ImGuiNavLayer_Menu;
-    }
-    if (apply_focus_window)
-        g.NavWindowingTarget = NULL;
-
-    // Apply menu/layer toggle
-    if (apply_toggle_layer && g.NavWindow)
-    {
-        // Move to parent menu if necessary
-        ImGuiWindow* new_nav_window = g.NavWindow;
-        while (new_nav_window->ParentWindow
-            && (new_nav_window->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) == 0
-            && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0
-            && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
-            new_nav_window = new_nav_window->ParentWindow;
-        if (new_nav_window != g.NavWindow)
-        {
-            ImGuiWindow* old_nav_window = g.NavWindow;
-            FocusWindow(new_nav_window);
-            new_nav_window->NavLastChildNavWindow = old_nav_window;
-        }
-        g.NavDisableHighlight = false;
-        g.NavDisableMouseHover = true;
-
-        // When entering a regular menu bar with the Alt key, we always reinitialize the navigation ID.
-        const ImGuiNavLayer new_nav_layer = (g.NavWindow->DC.NavLayerActiveMask & (1 << ImGuiNavLayer_Menu)) ? (ImGuiNavLayer)((int)g.NavLayer ^ 1) : ImGuiNavLayer_Main;
-        NavRestoreLayer(new_nav_layer);
-    }
-}
-
-// Window has already passed the IsWindowNavFocusable()
-static const char* GetFallbackWindowNameForWindowingList(ImGuiWindow* window)
-{
-    if (window->Flags & ImGuiWindowFlags_Popup)
-        return "(Popup)";
-    if ((window->Flags & ImGuiWindowFlags_MenuBar) && strcmp(window->Name, "##MainMenuBar") == 0)
-        return "(Main menu bar)";
-    return "(Untitled)";
-}
-
-// Overlay displayed when using CTRL+TAB. Called by EndFrame().
-void ImGui::NavUpdateWindowingOverlay()
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.NavWindowingTarget != NULL);
-
-    if (g.NavWindowingTimer < NAV_WINDOWING_LIST_APPEAR_DELAY)
-        return;
-
-    if (g.NavWindowingList == NULL)
-        g.NavWindowingList = FindWindowByName("###NavWindowingList");
-    SetNextWindowSizeConstraints(ImVec2(g.IO.DisplaySize.x * 0.20f, g.IO.DisplaySize.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
-    SetNextWindowPos(g.IO.DisplaySize * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
-    PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
-    Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings);
-    for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--)
-    {
-        ImGuiWindow* window = g.WindowsFocusOrder[n];
-        if (!IsWindowNavFocusable(window))
-            continue;
-        const char* label = window->Name;
-        if (label == FindRenderedTextEnd(label))
-            label = GetFallbackWindowNameForWindowingList(window);
-        Selectable(label, g.NavWindowingTarget == window);
-    }
-    End();
-    PopStyleVar();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] DRAG AND DROP
-//-----------------------------------------------------------------------------
-
-void ImGui::ClearDragDrop()
-{
-    ImGuiContext& g = *GImGui;
-    g.DragDropActive = false;
-    g.DragDropPayload.Clear();
-    g.DragDropAcceptFlags = ImGuiDragDropFlags_None;
-    g.DragDropAcceptIdCurr = g.DragDropAcceptIdPrev = 0;
-    g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
-    g.DragDropAcceptFrameCount = -1;
-
-    g.DragDropPayloadBufHeap.clear();
-    memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
-}
-
-// Call when current ID is active.
-// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource()
-bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    bool source_drag_active = false;
-    ImGuiID source_id = 0;
-    ImGuiID source_parent_id = 0;
-    ImGuiMouseButton mouse_button = ImGuiMouseButton_Left;
-    if (!(flags & ImGuiDragDropFlags_SourceExtern))
-    {
-        source_id = window->DC.LastItemId;
-        if (source_id != 0 && g.ActiveId != source_id) // Early out for most common case
-            return false;
-        if (g.IO.MouseDown[mouse_button] == false)
-            return false;
-
-        if (source_id == 0)
-        {
-            // If you want to use BeginDragDropSource() on an item with no unique identifier for interaction, such as Text() or Image(), you need to:
-            // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag, C) Swallow your programmer pride.
-            if (!(flags & ImGuiDragDropFlags_SourceAllowNullID))
-            {
-                IM_ASSERT(0);
-                return false;
-            }
-
-            // Early out
-            if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) == 0 && (g.ActiveId == 0 || g.ActiveIdWindow != window))
-                return false;
-
-            // Magic fallback (=somehow reprehensible) to handle items with no assigned ID, e.g. Text(), Image()
-            // We build a throwaway ID based on current ID stack + relative AABB of items in window.
-            // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING OF THE WIDGET, so if your widget moves your dragging operation will be canceled.
-            // We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive.
-            source_id = window->DC.LastItemId = window->GetIDFromRectangle(window->DC.LastItemRect);
-            bool is_hovered = ItemHoverable(window->DC.LastItemRect, source_id);
-            if (is_hovered && g.IO.MouseClicked[mouse_button])
-            {
-                SetActiveID(source_id, window);
-                FocusWindow(window);
-            }
-            if (g.ActiveId == source_id) // Allow the underlying widget to display/return hovered during the mouse release frame, else we would get a flicker.
-                g.ActiveIdAllowOverlap = is_hovered;
-        }
-        else
-        {
-            g.ActiveIdAllowOverlap = false;
-        }
-        if (g.ActiveId != source_id)
-            return false;
-        source_parent_id = window->IDStack.back();
-        source_drag_active = IsMouseDragging(mouse_button);
-
-        // Disable navigation and key inputs while dragging
-        g.ActiveIdUsingNavDirMask = ~(ImU32)0;
-        g.ActiveIdUsingNavInputMask = ~(ImU32)0;
-        g.ActiveIdUsingKeyInputMask = ~(ImU64)0;
-    }
-    else
-    {
-        window = NULL;
-        source_id = ImHashStr("#SourceExtern");
-        source_drag_active = true;
-    }
-
-    if (source_drag_active)
-    {
-        if (!g.DragDropActive)
-        {
-            IM_ASSERT(source_id != 0);
-            ClearDragDrop();
-            ImGuiPayload& payload = g.DragDropPayload;
-            payload.SourceId = source_id;
-            payload.SourceParentId = source_parent_id;
-            g.DragDropActive = true;
-            g.DragDropSourceFlags = flags;
-            g.DragDropMouseButton = mouse_button;
-        }
-        g.DragDropSourceFrameCount = g.FrameCount;
-        g.DragDropWithinSource = true;
-
-        if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
-        {
-            // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
-            // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
-            BeginTooltip();
-            if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
-            {
-                ImGuiWindow* tooltip_window = g.CurrentWindow;
-                tooltip_window->SkipItems = true;
-                tooltip_window->HiddenFramesCanSkipItems = 1;
-            }
-        }
-
-        if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
-            window->DC.LastItemStatusFlags &= ~ImGuiItemStatusFlags_HoveredRect;
-
-        return true;
-    }
-    return false;
-}
-
-void ImGui::EndDragDropSource()
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.DragDropActive);
-    IM_ASSERT(g.DragDropWithinSource && "Not after a BeginDragDropSource()?");
-
-    if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
-        EndTooltip();
-
-    // Discard the drag if have not called SetDragDropPayload()
-    if (g.DragDropPayload.DataFrameCount == -1)
-        ClearDragDrop();
-    g.DragDropWithinSource = false;
-}
-
-// Use 'cond' to choose to submit payload on drag start or every frame
-bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiPayload& payload = g.DragDropPayload;
-    if (cond == 0)
-        cond = ImGuiCond_Always;
-
-    IM_ASSERT(type != NULL);
-    IM_ASSERT(strlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long");
-    IM_ASSERT((data != NULL && data_size > 0) || (data == NULL && data_size == 0));
-    IM_ASSERT(cond == ImGuiCond_Always || cond == ImGuiCond_Once);
-    IM_ASSERT(payload.SourceId != 0);                               // Not called between BeginDragDropSource() and EndDragDropSource()
-
-    if (cond == ImGuiCond_Always || payload.DataFrameCount == -1)
-    {
-        // Copy payload
-        ImStrncpy(payload.DataType, type, IM_ARRAYSIZE(payload.DataType));
-        g.DragDropPayloadBufHeap.resize(0);
-        if (data_size > sizeof(g.DragDropPayloadBufLocal))
-        {
-            // Store in heap
-            g.DragDropPayloadBufHeap.resize((int)data_size);
-            payload.Data = g.DragDropPayloadBufHeap.Data;
-            memcpy(payload.Data, data, data_size);
-        }
-        else if (data_size > 0)
-        {
-            // Store locally
-            memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
-            payload.Data = g.DragDropPayloadBufLocal;
-            memcpy(payload.Data, data, data_size);
-        }
-        else
-        {
-            payload.Data = NULL;
-        }
-        payload.DataSize = (int)data_size;
-    }
-    payload.DataFrameCount = g.FrameCount;
-
-    return (g.DragDropAcceptFrameCount == g.FrameCount) || (g.DragDropAcceptFrameCount == g.FrameCount - 1);
-}
-
-bool ImGui::BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    if (!g.DragDropActive)
-        return false;
-
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow)
-        return false;
-    IM_ASSERT(id != 0);
-    if (!IsMouseHoveringRect(bb.Min, bb.Max) || (id == g.DragDropPayload.SourceId))
-        return false;
-    if (window->SkipItems)
-        return false;
-
-    IM_ASSERT(g.DragDropWithinTarget == false);
-    g.DragDropTargetRect = bb;
-    g.DragDropTargetId = id;
-    g.DragDropWithinTarget = true;
-    return true;
-}
-
-// We don't use BeginDragDropTargetCustom() and duplicate its code because:
-// 1) we use LastItemRectHoveredRect which handles items that pushes a temporarily clip rectangle in their code. Calling BeginDragDropTargetCustom(LastItemRect) would not handle them.
-// 2) and it's faster. as this code may be very frequently called, we want to early out as fast as we can.
-// Also note how the HoveredWindow test is positioned differently in both functions (in both functions we optimize for the cheapest early out case)
-bool ImGui::BeginDragDropTarget()
-{
-    ImGuiContext& g = *GImGui;
-    if (!g.DragDropActive)
-        return false;
-
-    ImGuiWindow* window = g.CurrentWindow;
-    if (!(window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect))
-        return false;
-    if (g.HoveredWindow == NULL || window->RootWindow != g.HoveredWindow->RootWindow)
-        return false;
-
-    const ImRect& display_rect = (window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect) ? window->DC.LastItemDisplayRect : window->DC.LastItemRect;
-    ImGuiID id = window->DC.LastItemId;
-    if (id == 0)
-        id = window->GetIDFromRectangle(display_rect);
-    if (g.DragDropPayload.SourceId == id)
-        return false;
-
-    IM_ASSERT(g.DragDropWithinTarget == false);
-    g.DragDropTargetRect = display_rect;
-    g.DragDropTargetId = id;
-    g.DragDropWithinTarget = true;
-    return true;
-}
-
-bool ImGui::IsDragDropPayloadBeingAccepted()
-{
-    ImGuiContext& g = *GImGui;
-    return g.DragDropActive && g.DragDropAcceptIdPrev != 0;
-}
-
-const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiPayload& payload = g.DragDropPayload;
-    IM_ASSERT(g.DragDropActive);                        // Not called between BeginDragDropTarget() and EndDragDropTarget() ?
-    IM_ASSERT(payload.DataFrameCount != -1);            // Forgot to call EndDragDropTarget() ?
-    if (type != NULL && !payload.IsDataType(type))
-        return NULL;
-
-    // Accept smallest drag target bounding box, this allows us to nest drag targets conveniently without ordering constraints.
-    // NB: We currently accept NULL id as target. However, overlapping targets requires a unique ID to function!
-    const bool was_accepted_previously = (g.DragDropAcceptIdPrev == g.DragDropTargetId);
-    ImRect r = g.DragDropTargetRect;
-    float r_surface = r.GetWidth() * r.GetHeight();
-    if (r_surface < g.DragDropAcceptIdCurrRectSurface)
-    {
-        g.DragDropAcceptFlags = flags;
-        g.DragDropAcceptIdCurr = g.DragDropTargetId;
-        g.DragDropAcceptIdCurrRectSurface = r_surface;
-    }
-
-    // Render default drop visuals
-    payload.Preview = was_accepted_previously;
-    flags |= (g.DragDropSourceFlags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect); // Source can also inhibit the preview (useful for external sources that lives for 1 frame)
-    if (!(flags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect) && payload.Preview)
-    {
-        // FIXME-DRAG: Settle on a proper default visuals for drop target.
-        r.Expand(3.5f);
-        bool push_clip_rect = !window->ClipRect.Contains(r);
-        if (push_clip_rect) window->DrawList->PushClipRect(r.Min-ImVec2(1,1), r.Max+ImVec2(1,1));
-        window->DrawList->AddRect(r.Min, r.Max, GetColorU32(ImGuiCol_DragDropTarget), 0.0f, ~0, 2.0f);
-        if (push_clip_rect) window->DrawList->PopClipRect();
-    }
-
-    g.DragDropAcceptFrameCount = g.FrameCount;
-    payload.Delivery = was_accepted_previously && !IsMouseDown(g.DragDropMouseButton); // For extern drag sources affecting os window focus, it's easier to just test !IsMouseDown() instead of IsMouseReleased()
-    if (!payload.Delivery && !(flags & ImGuiDragDropFlags_AcceptBeforeDelivery))
-        return NULL;
-
-    return &payload;
-}
-
-const ImGuiPayload* ImGui::GetDragDropPayload()
-{
-    ImGuiContext& g = *GImGui;
-    return g.DragDropActive ? &g.DragDropPayload : NULL;
-}
-
-// We don't really use/need this now, but added it for the sake of consistency and because we might need it later.
-void ImGui::EndDragDropTarget()
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.DragDropActive);
-    IM_ASSERT(g.DragDropWithinTarget);
-    g.DragDropWithinTarget = false;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] LOGGING/CAPTURING
-//-----------------------------------------------------------------------------
-// All text output from the interface can be captured into tty/file/clipboard.
-// By default, tree nodes are automatically opened during logging.
-//-----------------------------------------------------------------------------
-
-// Pass text data straight to log (without being displayed)
-void ImGui::LogText(const char* fmt, ...)
-{
-    ImGuiContext& g = *GImGui;
-    if (!g.LogEnabled)
-        return;
-
-    va_list args;
-    va_start(args, fmt);
-    if (g.LogFile)
-    {
-        g.LogBuffer.Buf.resize(0);
-        g.LogBuffer.appendfv(fmt, args);
-        ImFileWrite(g.LogBuffer.c_str(), sizeof(char), (ImU64)g.LogBuffer.size(), g.LogFile);
-    }
-    else
-    {
-        g.LogBuffer.appendfv(fmt, args);
-    }
-    va_end(args);
-}
-
-// Internal version that takes a position to decide on newline placement and pad items according to their depth.
-// We split text into individual lines to add current tree level padding
-void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    if (!text_end)
-        text_end = FindRenderedTextEnd(text, text_end);
-
-    const bool log_new_line = ref_pos && (ref_pos->y > g.LogLinePosY + 1);
-    if (ref_pos)
-        g.LogLinePosY = ref_pos->y;
-    if (log_new_line)
-        g.LogLineFirstItem = true;
-
-    const char* text_remaining = text;
-    if (g.LogDepthRef > window->DC.TreeDepth)  // Re-adjust padding if we have popped out of our starting depth
-        g.LogDepthRef = window->DC.TreeDepth;
-    const int tree_depth = (window->DC.TreeDepth - g.LogDepthRef);
-    for (;;)
-    {
-        // Split the string. Each new line (after a '\n') is followed by spacing corresponding to the current depth of our log entry.
-        // We don't add a trailing \n to allow a subsequent item on the same line to be captured.
-        const char* line_start = text_remaining;
-        const char* line_end = ImStreolRange(line_start, text_end);
-        const bool is_first_line = (line_start == text);
-        const bool is_last_line = (line_end == text_end);
-        if (!is_last_line || (line_start != line_end))
-        {
-            const int char_count = (int)(line_end - line_start);
-            if (log_new_line || !is_first_line)
-                LogText(IM_NEWLINE "%*s%.*s", tree_depth * 4, "", char_count, line_start);
-            else if (g.LogLineFirstItem)
-                LogText("%*s%.*s", tree_depth * 4, "", char_count, line_start);
-            else
-                LogText(" %.*s", char_count, line_start);
-            g.LogLineFirstItem = false;
-        }
-        else if (log_new_line)
-        {
-            // An empty "" string at a different Y position should output a carriage return.
-            LogText(IM_NEWLINE);
-            break;
-        }
-
-        if (is_last_line)
-            break;
-        text_remaining = line_end + 1;
-    }
-}
-
-// Start logging/capturing text output
-void ImGui::LogBegin(ImGuiLogType type, int auto_open_depth)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    IM_ASSERT(g.LogEnabled == false);
-    IM_ASSERT(g.LogFile == NULL);
-    IM_ASSERT(g.LogBuffer.empty());
-    g.LogEnabled = true;
-    g.LogType = type;
-    g.LogDepthRef = window->DC.TreeDepth;
-    g.LogDepthToExpand = ((auto_open_depth >= 0) ? auto_open_depth : g.LogDepthToExpandDefault);
-    g.LogLinePosY = FLT_MAX;
-    g.LogLineFirstItem = true;
-}
-
-void ImGui::LogToTTY(int auto_open_depth)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.LogEnabled)
-        return;
-    IM_UNUSED(auto_open_depth);
-#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
-    LogBegin(ImGuiLogType_TTY, auto_open_depth);
-    g.LogFile = stdout;
-#endif
-}
-
-// Start logging/capturing text output to given file
-void ImGui::LogToFile(int auto_open_depth, const char* filename)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.LogEnabled)
-        return;
-
-    // FIXME: We could probably open the file in text mode "at", however note that clipboard/buffer logging will still
-    // be subject to outputting OS-incompatible carriage return if within strings the user doesn't use IM_NEWLINE.
-    // By opening the file in binary mode "ab" we have consistent output everywhere.
-    if (!filename)
-        filename = g.IO.LogFilename;
-    if (!filename || !filename[0])
-        return;
-    ImFileHandle f = ImFileOpen(filename, "ab");
-    if (!f)
-    {
-        IM_ASSERT(0);
-        return;
-    }
-
-    LogBegin(ImGuiLogType_File, auto_open_depth);
-    g.LogFile = f;
-}
-
-// Start logging/capturing text output to clipboard
-void ImGui::LogToClipboard(int auto_open_depth)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.LogEnabled)
-        return;
-    LogBegin(ImGuiLogType_Clipboard, auto_open_depth);
-}
-
-void ImGui::LogToBuffer(int auto_open_depth)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.LogEnabled)
-        return;
-    LogBegin(ImGuiLogType_Buffer, auto_open_depth);
-}
-
-void ImGui::LogFinish()
-{
-    ImGuiContext& g = *GImGui;
-    if (!g.LogEnabled)
-        return;
-
-    LogText(IM_NEWLINE);
-    switch (g.LogType)
-    {
-    case ImGuiLogType_TTY:
-#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
-        fflush(g.LogFile);
-#endif
-        break;
-    case ImGuiLogType_File:
-        ImFileClose(g.LogFile);
-        break;
-    case ImGuiLogType_Buffer:
-        break;
-    case ImGuiLogType_Clipboard:
-        if (!g.LogBuffer.empty())
-            SetClipboardText(g.LogBuffer.begin());
-        break;
-    case ImGuiLogType_None:
-        IM_ASSERT(0);
-        break;
-    }
-
-    g.LogEnabled = false;
-    g.LogType = ImGuiLogType_None;
-    g.LogFile = NULL;
-    g.LogBuffer.clear();
-}
-
-// Helper to display logging buttons
-// FIXME-OBSOLETE: We should probably obsolete this and let the user have their own helper (this is one of the oldest function alive!)
-void ImGui::LogButtons()
-{
-    ImGuiContext& g = *GImGui;
-
-    PushID("LogButtons");
-#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
-    const bool log_to_tty = Button("Log To TTY"); SameLine();
-#else
-    const bool log_to_tty = false;
-#endif
-    const bool log_to_file = Button("Log To File"); SameLine();
-    const bool log_to_clipboard = Button("Log To Clipboard"); SameLine();
-    PushAllowKeyboardFocus(false);
-    SetNextItemWidth(80.0f);
-    SliderInt("Default Depth", &g.LogDepthToExpandDefault, 0, 9, NULL);
-    PopAllowKeyboardFocus();
-    PopID();
-
-    // Start logging at the end of the function so that the buttons don't appear in the log
-    if (log_to_tty)
-        LogToTTY();
-    if (log_to_file)
-        LogToFile();
-    if (log_to_clipboard)
-        LogToClipboard();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] SETTINGS
-//-----------------------------------------------------------------------------
-
-// Called by NewFrame()
-void ImGui::UpdateSettings()
-{
-    // Load settings on first frame (if not explicitly loaded manually before)
-    ImGuiContext& g = *GImGui;
-    if (!g.SettingsLoaded)
-    {
-        IM_ASSERT(g.SettingsWindows.empty());
-        if (g.IO.IniFilename)
-            LoadIniSettingsFromDisk(g.IO.IniFilename);
-        g.SettingsLoaded = true;
-    }
-
-    // Save settings (with a delay after the last modification, so we don't spam disk too much)
-    if (g.SettingsDirtyTimer > 0.0f)
-    {
-        g.SettingsDirtyTimer -= g.IO.DeltaTime;
-        if (g.SettingsDirtyTimer <= 0.0f)
-        {
-            if (g.IO.IniFilename != NULL)
-                SaveIniSettingsToDisk(g.IO.IniFilename);
-            else
-                g.IO.WantSaveIniSettings = true;  // Let user know they can call SaveIniSettingsToMemory(). user will need to clear io.WantSaveIniSettings themselves.
-            g.SettingsDirtyTimer = 0.0f;
-        }
-    }
-}
-
-void ImGui::MarkIniSettingsDirty()
-{
-    ImGuiContext& g = *GImGui;
-    if (g.SettingsDirtyTimer <= 0.0f)
-        g.SettingsDirtyTimer = g.IO.IniSavingRate;
-}
-
-void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
-{
-    ImGuiContext& g = *GImGui;
-    if (!(window->Flags & ImGuiWindowFlags_NoSavedSettings))
-        if (g.SettingsDirtyTimer <= 0.0f)
-            g.SettingsDirtyTimer = g.IO.IniSavingRate;
-}
-
-ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
-{
-    ImGuiContext& g = *GImGui;
-
-#if !IMGUI_DEBUG_INI_SETTINGS
-    // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
-    // Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier.
-    if (const char* p = strstr(name, "###"))
-        name = p;
-#endif
-    const size_t name_len = strlen(name);
-
-    // Allocate chunk
-    const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1;
-    ImGuiWindowSettings* settings = g.SettingsWindows.alloc_chunk(chunk_size);
-    IM_PLACEMENT_NEW(settings) ImGuiWindowSettings();
-    settings->ID = ImHashStr(name, name_len);
-    memcpy(settings->GetName(), name, name_len + 1);   // Store with zero terminator
-
-    return settings;
-}
-
-ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
-{
-    ImGuiContext& g = *GImGui;
-    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
-        if (settings->ID == id)
-            return settings;
-    return NULL;
-}
-
-ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
-{
-    if (ImGuiWindowSettings* settings = FindWindowSettings(ImHashStr(name)))
-        return settings;
-    return CreateNewWindowSettings(name);
-}
-
-void ImGui::LoadIniSettingsFromDisk(const char* ini_filename)
-{
-    size_t file_data_size = 0;
-    char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_data_size);
-    if (!file_data)
-        return;
-    LoadIniSettingsFromMemory(file_data, (size_t)file_data_size);
-    IM_FREE(file_data);
-}
-
-ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
-{
-    ImGuiContext& g = *GImGui;
-    const ImGuiID type_hash = ImHashStr(type_name);
-    for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
-        if (g.SettingsHandlers[handler_n].TypeHash == type_hash)
-            return &g.SettingsHandlers[handler_n];
-    return NULL;
-}
-
-// Zero-tolerance, no error reporting, cheap .ini parsing
-void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(g.Initialized);
-    IM_ASSERT(g.SettingsLoaded == false && g.FrameCount == 0);
-
-    // For user convenience, we allow passing a non zero-terminated string (hence the ini_size parameter).
-    // For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy..
-    if (ini_size == 0)
-        ini_size = strlen(ini_data);
-    char* buf = (char*)IM_ALLOC(ini_size + 1);
-    char* buf_end = buf + ini_size;
-    memcpy(buf, ini_data, ini_size);
-    buf[ini_size] = 0;
-
-    void* entry_data = NULL;
-    ImGuiSettingsHandler* entry_handler = NULL;
-
-    char* line_end = NULL;
-    for (char* line = buf; line < buf_end; line = line_end + 1)
-    {
-        // Skip new lines markers, then find end of the line
-        while (*line == '\n' || *line == '\r')
-            line++;
-        line_end = line;
-        while (line_end < buf_end && *line_end != '\n' && *line_end != '\r')
-            line_end++;
-        line_end[0] = 0;
-        if (line[0] == ';')
-            continue;
-        if (line[0] == '[' && line_end > line && line_end[-1] == ']')
-        {
-            // Parse "[Type][Name]". Note that 'Name' can itself contains [] characters, which is acceptable with the current format and parsing code.
-            line_end[-1] = 0;
-            const char* name_end = line_end - 1;
-            const char* type_start = line + 1;
-            char* type_end = (char*)(void*)ImStrchrRange(type_start, name_end, ']');
-            const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL;
-            if (!type_end || !name_start)
-                continue;
-            *type_end = 0; // Overwrite first ']'
-            name_start++;  // Skip second '['
-            entry_handler = FindSettingsHandler(type_start);
-            entry_data = entry_handler ? entry_handler->ReadOpenFn(&g, entry_handler, name_start) : NULL;
-        }
-        else if (entry_handler != NULL && entry_data != NULL)
-        {
-            // Let type handler parse the line
-            entry_handler->ReadLineFn(&g, entry_handler, entry_data, line);
-        }
-    }
-    IM_FREE(buf);
-    g.SettingsLoaded = true;
-}
-
-void ImGui::SaveIniSettingsToDisk(const char* ini_filename)
-{
-    ImGuiContext& g = *GImGui;
-    g.SettingsDirtyTimer = 0.0f;
-    if (!ini_filename)
-        return;
-
-    size_t ini_data_size = 0;
-    const char* ini_data = SaveIniSettingsToMemory(&ini_data_size);
-    ImFileHandle f = ImFileOpen(ini_filename, "wt");
-    if (!f)
-        return;
-    ImFileWrite(ini_data, sizeof(char), ini_data_size, f);
-    ImFileClose(f);
-}
-
-// Call registered handlers (e.g. SettingsHandlerWindow_WriteAll() + custom handlers) to write their stuff into a text buffer
-const char* ImGui::SaveIniSettingsToMemory(size_t* out_size)
-{
-    ImGuiContext& g = *GImGui;
-    g.SettingsDirtyTimer = 0.0f;
-    g.SettingsIniData.Buf.resize(0);
-    g.SettingsIniData.Buf.push_back(0);
-    for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
-    {
-        ImGuiSettingsHandler* handler = &g.SettingsHandlers[handler_n];
-        handler->WriteAllFn(&g, handler, &g.SettingsIniData);
-    }
-    if (out_size)
-        *out_size = (size_t)g.SettingsIniData.size();
-    return g.SettingsIniData.c_str();
-}
-
-static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
-{
-    ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHashStr(name));
-    if (!settings)
-        settings = ImGui::CreateNewWindowSettings(name);
-    return (void*)settings;
-}
-
-static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
-{
-    ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry;
-    int x, y;
-    int i;
-    if (sscanf(line, "Pos=%i,%i", &x, &y) == 2)         settings->Pos = ImVec2ih((short)x, (short)y);
-    else if (sscanf(line, "Size=%i,%i", &x, &y) == 2)   settings->Size = ImVec2ih((short)x, (short)y);
-    else if (sscanf(line, "Collapsed=%d", &i) == 1)     settings->Collapsed = (i != 0);
-}
-
-static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
-{
-    // Gather data from windows that were active during this session
-    // (if a window wasn't opened in this session we preserve its settings)
-    ImGuiContext& g = *ctx;
-    for (int i = 0; i != g.Windows.Size; i++)
-    {
-        ImGuiWindow* window = g.Windows[i];
-        if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
-            continue;
-
-        ImGuiWindowSettings* settings = (window->SettingsOffset != -1) ? g.SettingsWindows.ptr_from_offset(window->SettingsOffset) : ImGui::FindWindowSettings(window->ID);
-        if (!settings)
-        {
-            settings = ImGui::CreateNewWindowSettings(window->Name);
-            window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
-        }
-        IM_ASSERT(settings->ID == window->ID);
-        settings->Pos = ImVec2ih((short)window->Pos.x, (short)window->Pos.y);
-        settings->Size = ImVec2ih((short)window->SizeFull.x, (short)window->SizeFull.y);
-        settings->Collapsed = window->Collapsed;
-    }
-
-    // Write to text buffer
-    buf->reserve(buf->size() + g.SettingsWindows.size() * 6); // ballpark reserve
-    for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
-    {
-        const char* settings_name = settings->GetName();
-        buf->appendf("[%s][%s]\n", handler->TypeName, settings_name);
-        buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y);
-        buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y);
-        buf->appendf("Collapsed=%d\n", settings->Collapsed);
-        buf->append("\n");
-    }
-}
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] VIEWPORTS, PLATFORM WINDOWS
-//-----------------------------------------------------------------------------
-
-// (this section is filled in the 'docking' branch)
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] DOCKING
-//-----------------------------------------------------------------------------
-
-// (this section is filled in the 'docking' branch)
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] PLATFORM DEPENDENT HELPERS
-//-----------------------------------------------------------------------------
-
-#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
-
-#ifdef _MSC_VER
-#pragma comment(lib, "user32")
-#pragma comment(lib, "kernel32")
-#endif
-
-// Win32 clipboard implementation
-static const char* GetClipboardTextFn_DefaultImpl(void*)
-{
-    static ImVector<char> buf_local;
-    buf_local.clear();
-    if (!::OpenClipboard(NULL))
-        return NULL;
-    HANDLE wbuf_handle = ::GetClipboardData(CF_UNICODETEXT);
-    if (wbuf_handle == NULL)
-    {
-        ::CloseClipboard();
-        return NULL;
-    }
-    if (const WCHAR* wbuf_global = (const WCHAR*)::GlobalLock(wbuf_handle))
-    {
-        int buf_len = ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, NULL, 0, NULL, NULL);
-        buf_local.resize(buf_len);
-        ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, buf_local.Data, buf_len, NULL, NULL);
-    }
-    ::GlobalUnlock(wbuf_handle);
-    ::CloseClipboard();
-    return buf_local.Data;
-}
-
-static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
-{
-    if (!::OpenClipboard(NULL))
-        return;
-    const int wbuf_length = ::MultiByteToWideChar(CP_UTF8, 0, text, -1, NULL, 0);
-    HGLOBAL wbuf_handle = ::GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(WCHAR));
-    if (wbuf_handle == NULL)
-    {
-        ::CloseClipboard();
-        return;
-    }
-    WCHAR* wbuf_global = (WCHAR*)::GlobalLock(wbuf_handle);
-    ::MultiByteToWideChar(CP_UTF8, 0, text, -1, wbuf_global, wbuf_length);
-    ::GlobalUnlock(wbuf_handle);
-    ::EmptyClipboard();
-    if (::SetClipboardData(CF_UNICODETEXT, wbuf_handle) == NULL)
-        ::GlobalFree(wbuf_handle);
-    ::CloseClipboard();
-}
-
-#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS)
-
-#include <Carbon/Carbon.h>  // Use old API to avoid need for separate .mm file
-static PasteboardRef main_clipboard = 0;
-
-// OSX clipboard implementation
-// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line!
-static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
-{
-    if (!main_clipboard)
-        PasteboardCreate(kPasteboardClipboard, &main_clipboard);
-    PasteboardClear(main_clipboard);
-    CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text));
-    if (cf_data)
-    {
-        PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0);
-        CFRelease(cf_data);
-    }
-}
-
-static const char* GetClipboardTextFn_DefaultImpl(void*)
-{
-    if (!main_clipboard)
-        PasteboardCreate(kPasteboardClipboard, &main_clipboard);
-    PasteboardSynchronize(main_clipboard);
-
-    ItemCount item_count = 0;
-    PasteboardGetItemCount(main_clipboard, &item_count);
-    for (ItemCount i = 0; i < item_count; i++)
-    {
-        PasteboardItemID item_id = 0;
-        PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id);
-        CFArrayRef flavor_type_array = 0;
-        PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array);
-        for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++)
-        {
-            CFDataRef cf_data;
-            if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr)
-            {
-                static ImVector<char> clipboard_text;
-                int length = (int)CFDataGetLength(cf_data);
-                clipboard_text.resize(length + 1);
-                CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)clipboard_text.Data);
-                clipboard_text[length] = 0;
-                CFRelease(cf_data);
-                return clipboard_text.Data;
-            }
-        }
-    }
-    return NULL;
-}
-
-#else
-
-// Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers.
-static const char* GetClipboardTextFn_DefaultImpl(void*)
-{
-    ImGuiContext& g = *GImGui;
-    return g.PrivateClipboard.empty() ? NULL : g.PrivateClipboard.begin();
-}
-
-static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
-{
-    ImGuiContext& g = *GImGui;
-    g.PrivateClipboard.clear();
-    const char* text_end = text + strlen(text);
-    g.PrivateClipboard.resize((int)(text_end - text) + 1);
-    memcpy(&g.PrivateClipboard[0], text, (size_t)(text_end - text));
-    g.PrivateClipboard[(int)(text_end - text)] = 0;
-}
-
-#endif
-
-// Win32 API IME support (for Asian languages, etc.)
-#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
-
-#include <imm.h>
-#ifdef _MSC_VER
-#pragma comment(lib, "imm32")
-#endif
-
-static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y)
-{
-    // Notify OS Input Method Editor of text input position
-    ImGuiIO& io = ImGui::GetIO();
-    if (HWND hwnd = (HWND)io.ImeWindowHandle)
-        if (HIMC himc = ::ImmGetContext(hwnd))
-        {
-            COMPOSITIONFORM cf;
-            cf.ptCurrentPos.x = x;
-            cf.ptCurrentPos.y = y;
-            cf.dwStyle = CFS_FORCE_POSITION;
-            ::ImmSetCompositionWindow(himc, &cf);
-            ::ImmReleaseContext(hwnd, himc);
-        }
-}
-
-#else
-
-static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
-
-#endif
-
-//-----------------------------------------------------------------------------
-// [SECTION] METRICS/DEBUG WINDOW
-//-----------------------------------------------------------------------------
-
-#ifndef IMGUI_DISABLE_METRICS_WINDOW
-// Avoid naming collision with imgui_demo.cpp's HelpMarker() for unity builds.
-static void MetricsHelpMarker(const char* desc)
-{
-    ImGui::TextDisabled("(?)");
-    if (ImGui::IsItemHovered())
-    {
-        ImGui::BeginTooltip();
-        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
-        ImGui::TextUnformatted(desc);
-        ImGui::PopTextWrapPos();
-        ImGui::EndTooltip();
-    }
-}
-
-void ImGui::ShowMetricsWindow(bool* p_open)
-{
-    if (!ImGui::Begin("Dear ImGui Metrics", p_open))
-    {
-        ImGui::End();
-        return;
-    }
-
-    // Debugging enums
-    enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type
-    const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" };
-    enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersDesired, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type
-    const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersDesired", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" };
-
-    // State
-    static bool show_windows_rects = false;
-    static int  show_windows_rect_type = WRT_WorkRect;
-    static bool show_windows_begin_order = false;
-    static bool show_tables_rects = false;
-    static int  show_tables_rect_type = TRT_WorkRect;
-    static bool show_drawcmd_details = true;
-
-    // Basic info
-    ImGuiContext& g = *GImGui;
-    ImGuiIO& io = ImGui::GetIO();
-    ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
-    ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
-    ImGui::Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
-    ImGui::Text("%d active windows (%d visible)", io.MetricsActiveWindows, io.MetricsRenderWindows);
-    ImGui::Text("%d active allocations", io.MetricsActiveAllocations);
-    ImGui::Separator();
-
-    // Helper functions to display common structures:
-    // - NodeDrawList()
-    // - NodeColumns()
-    // - NodeWindow()
-    // - NodeWindows()
-    // - NodeTabBar()
-    // - NodeStorage()
-    struct Funcs
-    {
-        static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
-        {
-            if (rect_type == TRT_OuterRect)                 { return table->OuterRect; }
-            else if (rect_type == TRT_WorkRect)             { return table->WorkRect; }
-            else if (rect_type == TRT_HostClipRect)         { return table->HostClipRect; }
-            else if (rect_type == TRT_InnerClipRect)        { return table->InnerClipRect; }
-            else if (rect_type == TRT_BackgroundClipRect)   { return table->BackgroundClipRect; }
-            else if (rect_type == TRT_ColumnsRect)                  { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table->LastOuterHeight); }
-            else if (rect_type == TRT_ColumnsClipRect)              { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; }
-            else if (rect_type == TRT_ColumnsContentHeadersUsed)    { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersUsed, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }    // Note: y1/y2 not always accurate
-            else if (rect_type == TRT_ColumnsContentHeadersDesired) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthHeadersDesired, table->InnerClipRect.Min.y + table->LastFirstRowHeight); } // "
-            else if (rect_type == TRT_ColumnsContentRowsFrozen)     { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MinX + c->ContentWidthRowsFrozen, table->InnerClipRect.Min.y + table->LastFirstRowHeight); }     // "
-            else if (rect_type == TRT_ColumnsContentRowsUnfrozen)   { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y + table->LastFirstRowHeight, c->MinX + c->ContentWidthRowsUnfrozen, table->InnerClipRect.Max.y); }   // "
-            IM_ASSERT(0);
-            return ImRect();
-        }
-
-        static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
-        {
-            if (rect_type == WRT_OuterRect)                 { return window->Rect(); }
-            else if (rect_type == WRT_OuterRectClipped)     { return window->OuterRectClipped; }
-            else if (rect_type == WRT_InnerRect)            { return window->InnerRect; }
-            else if (rect_type == WRT_InnerClipRect)        { return window->InnerClipRect; }
-            else if (rect_type == WRT_WorkRect)             { return window->WorkRect; }
-            else if (rect_type == WRT_Content)              { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSize); }
-            else if (rect_type == WRT_ContentRegionRect)    { return window->ContentRegionRect; }
-            IM_ASSERT(0);
-            return ImRect();
-        }
-
-        static void NodeDrawList(ImGuiWindow* window, ImDrawList* draw_list, const char* label)
-        {
-            bool node_open = ImGui::TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, draw_list->CmdBuffer.Size);
-            if (draw_list == ImGui::GetWindowDrawList())
-            {
-                ImGui::SameLine();
-                ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
-                if (node_open) ImGui::TreePop();
-                return;
-            }
-
-            ImDrawList* fg_draw_list = GetForegroundDrawList(window); // Render additional visuals into the top-most draw list
-            if (window && IsItemHovered())
-                fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
-            if (!node_open)
-                return;
-
-            if (window && !window->WasActive)
-                ImGui::TextDisabled("Warning: owning Window is inactive. This DrawList is not being rendered!");
-
-            unsigned int elem_offset = 0;
-            for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.begin(); pcmd < draw_list->CmdBuffer.end(); elem_offset += pcmd->ElemCount, pcmd++)
-            {
-                if (pcmd->UserCallback == NULL && pcmd->ElemCount == 0)
-                    continue;
-                if (pcmd->UserCallback)
-                {
-                    ImGui::BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData);
-                    continue;
-                }
-
-                ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL;
-                char buf[300];
-                ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd: %4d triangles, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)",
-                    pcmd->ElemCount/3, (void*)(intptr_t)pcmd->TextureId,
-                    pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w);
-                bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf);
-                if (show_drawcmd_details && fg_draw_list && ImGui::IsItemHovered())
-                {
-                    ImRect clip_rect = pcmd->ClipRect;
-                    ImRect vtxs_rect(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX);
-                    for (unsigned int i = elem_offset; i < elem_offset + (int)pcmd->ElemCount; i++)
-                        vtxs_rect.Add(draw_list->VtxBuffer[idx_buffer ? idx_buffer[i] : i].pos);
-                    fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255,0,255,255));
-                    fg_draw_list->AddRect(ImFloor(vtxs_rect.Min), ImFloor(vtxs_rect.Max), IM_COL32(255,255,0,255));
-                }
-                if (!pcmd_node_open)
-                    continue;
-
-                // Calculate approximate coverage area (touched pixel count)
-                // This will be in pixels squared as long there's no post-scaling happening to the renderer output.
-                float total_area = 0.0f;
-                for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3)
-                {
-                    ImVec2 triangle[3];
-                    for (int n = 0; n < 3; n++)
-                        triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos;
-                    total_area += ImTriangleArea(triangle[0], triangle[1], triangle[2]);
-                }
-
-                // Display vertex information summary. Hover to get all triangles drawn in wire-frame
-                ImFormatString(buf, IM_ARRAYSIZE(buf), "Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d, Area: ~%0.f px", pcmd->ElemCount, pcmd->VtxOffset, pcmd->IdxOffset, total_area);
-                ImGui::Selectable(buf);
-                if (fg_draw_list && ImGui::IsItemHovered() && show_drawcmd_details)
-                {
-                    // Draw wire-frame version of everything
-                    ImDrawListFlags backup_flags = fg_draw_list->Flags;
-                    fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
-                    ImRect clip_rect = pcmd->ClipRect;
-                    fg_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255, 0, 255, 255));
-                    for (unsigned int base_idx = elem_offset; base_idx < (elem_offset + pcmd->ElemCount); base_idx += 3)
-                    {
-                        ImVec2 triangle[3];
-                        for (int n = 0; n < 3; n++)
-                            triangle[n] = draw_list->VtxBuffer[idx_buffer ? idx_buffer[base_idx + n] : (base_idx + n)].pos;
-                        fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), true, 1.0f);
-                    }
-                    fg_draw_list->Flags = backup_flags;
-                }
-
-                // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted.
-                ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible.
-                while (clipper.Step())
-                    for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
-                    {
-                        char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf);
-                        ImVec2 triangle[3];
-                        for (int n = 0; n < 3; n++, idx_i++)
-                        {
-                            ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[idx_i] : idx_i];
-                            triangle[n] = v.pos;
-                            buf_p += ImFormatString(buf_p, buf_end - buf_p, "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n",
-                                (n == 0) ? "Vert:" : "     ", idx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
-                        }
-
-                        ImGui::Selectable(buf, false);
-                        if (fg_draw_list && ImGui::IsItemHovered())
-                        {
-                            ImDrawListFlags backup_flags = fg_draw_list->Flags;
-                            fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
-                            fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255,255,0,255), true, 1.0f);
-                            fg_draw_list->Flags = backup_flags;
-                        }
-                    }
-                ImGui::TreePop();
-            }
-            ImGui::TreePop();
-        }
-
-        static void NodeColumns(const ImGuiColumns* columns)
-        {
-            if (!ImGui::TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags))
-                return;
-            ImGui::BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->OffMaxX - columns->OffMinX, columns->OffMinX, columns->OffMaxX);
-            for (int column_n = 0; column_n < columns->Columns.Size; column_n++)
-                ImGui::BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, GetColumnOffsetFromNorm(columns, columns->Columns[column_n].OffsetNorm));
-            ImGui::TreePop();
-        }
-
-        static void NodeWindows(ImVector<ImGuiWindow*>& windows, const char* label)
-        {
-            if (!ImGui::TreeNode(label, "%s (%d)", label, windows.Size))
-                return;
-            for (int i = 0; i < windows.Size; i++)
-            {
-                ImGui::PushID(windows[i]);
-                Funcs::NodeWindow(windows[i], "Window");
-                ImGui::PopID();
-            }
-            ImGui::TreePop();
-        }
-
-        static void NodeWindow(ImGuiWindow* window, const char* label)
-        {
-            if (window == NULL)
-            {
-                ImGui::BulletText("%s: NULL", label);
-                return;
-            }
-            bool open = ImGui::TreeNode(label, "%s '%s', %d @ 0x%p", label, window->Name, (window->Active || window->WasActive), window);
-            if (ImGui::IsItemHovered() && window->WasActive)
-                ImGui::GetForegroundDrawList()->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
-            if (!open)
-                return;
-            ImGuiWindowFlags flags = window->Flags;
-            NodeDrawList(window, window->DrawList, "DrawList");
-            ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y);
-            ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
-                (flags & ImGuiWindowFlags_ChildWindow)  ? "Child " : "",      (flags & ImGuiWindowFlags_Tooltip)     ? "Tooltip "   : "",  (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
-                (flags & ImGuiWindowFlags_Modal)        ? "Modal " : "",      (flags & ImGuiWindowFlags_ChildMenu)   ? "ChildMenu " : "",  (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
-                (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
-            ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f) Scrollbar:%s%s", window->Scroll.x, window->ScrollMax.x, window->Scroll.y, window->ScrollMax.y, window->ScrollbarX ? "X" : "", window->ScrollbarY ? "Y" : "");
-            ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
-            ImGui::BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems);
-            ImGui::BulletText("NavLastIds: 0x%08X,0x%08X, NavLayerActiveMask: %X", window->NavLastIds[0], window->NavLastIds[1], window->DC.NavLayerActiveMask);
-            ImGui::BulletText("NavLastChildNavWindow: %s", window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL");
-            if (!window->NavRectRel[0].IsInverted())
-                ImGui::BulletText("NavRectRel[0]: (%.1f,%.1f)(%.1f,%.1f)", window->NavRectRel[0].Min.x, window->NavRectRel[0].Min.y, window->NavRectRel[0].Max.x, window->NavRectRel[0].Max.y);
-            else
-                ImGui::BulletText("NavRectRel[0]: <None>");
-            if (window->RootWindow != window) NodeWindow(window->RootWindow, "RootWindow");
-            if (window->ParentWindow != NULL) NodeWindow(window->ParentWindow, "ParentWindow");
-            if (window->DC.ChildWindows.Size > 0) NodeWindows(window->DC.ChildWindows, "ChildWindows");
-            if (window->ColumnsStorage.Size > 0 && ImGui::TreeNode("Columns", "Columns sets (%d)", window->ColumnsStorage.Size))
-            {
-                for (int n = 0; n < window->ColumnsStorage.Size; n++)
-                    NodeColumns(&window->ColumnsStorage[n]);
-                ImGui::TreePop();
-            }
-            NodeStorage(&window->StateStorage, "Storage");
-            ImGui::TreePop();
-        }
-
-        static void NodeTabBar(ImGuiTabBar* tab_bar)
-        {
-            // Standalone tab bars (not associated to docking/windows functionality) currently hold no discernible strings.
-            char buf[256];
-            char* p = buf;
-            const char* buf_end = buf + IM_ARRAYSIZE(buf);
-            p += ImFormatString(p, buf_end - p, "TabBar (%d tabs)%s", tab_bar->Tabs.Size, (tab_bar->PrevFrameVisible < ImGui::GetFrameCount() - 2) ? " *Inactive*" : "");
-            if (ImGui::TreeNode(tab_bar, "%s", buf))
-            {
-                for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-                {
-                    const ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
-                    ImGui::PushID(tab);
-                    if (ImGui::SmallButton("<")) { TabBarQueueChangeTabOrder(tab_bar, tab, -1); } ImGui::SameLine(0, 2);
-                    if (ImGui::SmallButton(">")) { TabBarQueueChangeTabOrder(tab_bar, tab, +1); } ImGui::SameLine();
-                    ImGui::Text("%02d%c Tab 0x%08X '%s'", tab_n, (tab->ID == tab_bar->SelectedTabId) ? '*' : ' ', tab->ID, (tab->NameOffset != -1) ? tab_bar->GetTabName(tab) : "");
-                    ImGui::PopID();
-                }
-                ImGui::TreePop();
-            }
-        }
-
-        static void NodeStorage(ImGuiStorage* storage, const char* label)
-        {
-            if (!ImGui::TreeNode(label, "%s: %d entries, %d bytes", label, storage->Data.Size, storage->Data.size_in_bytes()))
-                return;
-            for (int n = 0; n < storage->Data.Size; n++)
-            {
-                const ImGuiStorage::ImGuiStoragePair& p = storage->Data[n];
-                ImGui::BulletText("Key 0x%08X Value { i: %d }", p.key, p.val_i); // Important: we currently don't store a type, real value may not be integer.
-            }
-            ImGui::TreePop();
-        }
-
-        static void NodeTable(ImGuiTable* table)
-        {
-            char buf[256];
-            char* p = buf;
-            const char* buf_end = buf + IM_ARRAYSIZE(buf);
-            ImFormatString(p, buf_end - p, "Table 0x%08X (%d columns, in '%s')%s", table->ID, table->ColumnsCount, table->OuterWindow->Name, (table->LastFrameActive < ImGui::GetFrameCount() - 2) ? " *Inactive*" : "");
-            bool open = ImGui::TreeNode(table, "%s", buf);
-            if (ImGui::IsItemHovered())
-                ImGui::GetForegroundDrawList()->AddRect(table->OuterRect.Min, table->OuterRect.Max, IM_COL32(255, 255, 0, 255));
-            if (open)
-            {
-                for (int n = 0; n < table->ColumnsCount; n++)
-                {
-                    ImGuiTableColumn* column = &table->Columns[n];
-                    const char* name = TableGetColumnName(table, n);
-                    ImGui::BulletText("Column %d order %d name '%s': +%.1f to +%.1f\n"
-                        "Active: %d, Clipped: %d, DrawChannels: %d,%d\n"
-                        "WidthGiven/Requested: %.1f/%.1f, Weight: %.2f\n"
-                        "ContentWidth: RowsFrozen %d, RowsUnfrozen %d, HeadersUsed/Desired %d/%d\n"
-                        "SortOrder: %d, SortDir: %s\n"
-                        "UserID: 0x%08X, Flags: 0x%04X: %s%s%s%s..",
-                        n, column->DisplayOrder, name ? name : "NULL", column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x,
-                        column->IsActive, column->IsClipped, column->DrawChannelRowsBeforeFreeze, column->DrawChannelRowsAfterFreeze,
-                        column->WidthGiven, column->WidthRequested, column->ResizeWeight,
-                        column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed, column->ContentWidthHeadersDesired,
-                        column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? "Ascending" : (column->SortDirection == ImGuiSortDirection_Descending) ? "Descending" : "None",
-                        column->UserID, column->Flags,
-                        (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? "WidthFixed " : "",
-                        (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? "WidthStretch " : "",
-                        (column->Flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize) ? "WidthAlwaysAutoResize " : "",
-                        (column->Flags & ImGuiTableColumnFlags_NoResize) ? "NoResize " : "");
-                }
-                ImGuiTableSettings* settings = TableFindSettings(table);
-                if (settings && ImGui::TreeNode("Settings"))
-                {
-                    ImGui::BulletText("SaveFlags: 0x%08X", settings->SaveFlags);
-                    ImGui::BulletText("ColumnsCount: %d (max %d)", settings->ColumnsCount, settings->ColumnsCountMax);
-                    for (int n = 0; n < settings->ColumnsCount; n++)
-                    {
-                        ImGuiTableColumnSettings* column_settings = &settings->GetColumnSettings()[n];
-                        ImGuiSortDirection sort_dir = (column_settings->SortOrder != -1) ? (ImGuiSortDirection)column_settings->SortDirection : ImGuiSortDirection_None;
-                        ImGui::BulletText("Column %d Order %d SortOrder %d %s Visible %d UserID 0x%08X WidthOrWeight %.3f",
-                            n, column_settings->DisplayOrder, column_settings->SortOrder,
-                            (sort_dir == ImGuiSortDirection_Ascending) ? "Asc" : (sort_dir == ImGuiSortDirection_Descending) ? "Des" : "---",
-                            column_settings->Visible, column_settings->UserID, column_settings->WidthOrWeight);
-                    }
-                    ImGui::TreePop();
-                }
-                ImGui::TreePop();
-            }
-        }
-    };
-
-    Funcs::NodeWindows(g.Windows, "Windows");
-    //Funcs::NodeWindows(g.WindowsFocusOrder, "WindowsFocusOrder");
-    if (ImGui::TreeNode("DrawLists", "Active DrawLists (%d)", g.DrawDataBuilder.Layers[0].Size))
-    {
-        for (int i = 0; i < g.DrawDataBuilder.Layers[0].Size; i++)
-            Funcs::NodeDrawList(NULL, g.DrawDataBuilder.Layers[0][i], "DrawList");
-        ImGui::TreePop();
-    }
-
-    // Details for Popups
-    if (ImGui::TreeNode("Popups", "Popups (%d)", g.OpenPopupStack.Size))
-    {
-        for (int i = 0; i < g.OpenPopupStack.Size; i++)
-        {
-            ImGuiWindow* window = g.OpenPopupStack[i].Window;
-            ImGui::BulletText("PopupID: %08x, Window: '%s'%s%s", g.OpenPopupStack[i].PopupId, window ? window->Name : "NULL", window && (window->Flags & ImGuiWindowFlags_ChildWindow) ? " ChildWindow" : "", window && (window->Flags & ImGuiWindowFlags_ChildMenu) ? " ChildMenu" : "");
-        }
-        ImGui::TreePop();
-    }
-
-    // Details for TabBars
-    if (ImGui::TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetSize()))
-    {
-        for (int n = 0; n < g.TabBars.GetSize(); n++)
-            Funcs::NodeTabBar(g.TabBars.GetByIndex(n));
-        ImGui::TreePop();
-    }
-
-    // Details for Tables
-#ifdef IMGUI_HAS_TABLE
-    if (ImGui::TreeNode("Tables", "Tables (%d)", g.Tables.GetSize()))
-    {
-        for (int n = 0; n < g.Tables.GetSize(); n++)
-            Funcs::NodeTable(g.Tables.GetByIndex(n));
-        ImGui::TreePop();
-    }
-#endif // #define IMGUI_HAS_TABLE
-
-    // Details for Docking
-#ifdef IMGUI_HAS_DOCK
-    if (ImGui::TreeNode("Docking"))
-    {
-        ImGui::TreePop();
-    }
-#endif // #define IMGUI_HAS_DOCK
-
-    // Misc Details
-    if (ImGui::TreeNode("Internal state"))
-    {
-        const char* input_source_names[] = { "None", "Mouse", "Nav", "NavKeyboard", "NavGamepad" }; IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT);
-        ImGui::Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL");
-        ImGui::Text("HoveredRootWindow: '%s'", g.HoveredRootWindow ? g.HoveredRootWindow->Name : "NULL");
-        ImGui::Text("HoveredId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredId, g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Data is "in-flight" so depending on when the Metrics window is called we may see current frame information or not
-        ImGui::Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, input_source_names[g.ActiveIdSource]);
-        ImGui::Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL");
-        ImGui::Text("MovingWindow: '%s'", g.MovingWindow ? g.MovingWindow->Name : "NULL");
-        ImGui::Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL");
-        ImGui::Text("NavId: 0x%08X, NavLayer: %d", g.NavId, g.NavLayer);
-        ImGui::Text("NavInputSource: %s", input_source_names[g.NavInputSource]);
-        ImGui::Text("NavActive: %d, NavVisible: %d", g.IO.NavActive, g.IO.NavVisible);
-        ImGui::Text("NavActivateId: 0x%08X, NavInputId: 0x%08X", g.NavActivateId, g.NavInputId);
-        ImGui::Text("NavDisableHighlight: %d, NavDisableMouseHover: %d", g.NavDisableHighlight, g.NavDisableMouseHover);
-        ImGui::Text("NavWindowingTarget: '%s'", g.NavWindowingTarget ? g.NavWindowingTarget->Name : "NULL");
-        ImGui::Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize);
-        ImGui::TreePop();
-    }
-
-    // Tools
-    if (ImGui::TreeNode("Tools"))
-    {
-        // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
-        if (ImGui::Button("Item Picker.."))
-            ImGui::DebugStartItemPicker();
-        ImGui::SameLine();
-        MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash.");
-
-        ImGui::Checkbox("Show windows begin order", &show_windows_begin_order);
-        ImGui::Checkbox("Show windows rectangles", &show_windows_rects);
-        ImGui::SameLine();
-        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
-        show_windows_rects |= ImGui::Combo("##show_windows_rect_type", &show_windows_rect_type, wrt_rects_names, WRT_Count, WRT_Count);
-        if (show_windows_rects && g.NavWindow)
-        {
-            ImGui::BulletText("'%s':", g.NavWindow->Name);
-            ImGui::Indent();
-            for (int rect_n = 0; rect_n < WRT_Count; rect_n++)
-            {
-                ImRect r = Funcs::GetWindowRect(g.NavWindow, rect_n);
-                ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), wrt_rects_names[rect_n]);
-            }
-            ImGui::Unindent();
-        }
-
-        ImGui::Checkbox("Show tables rectangles", &show_tables_rects);
-        ImGui::SameLine();
-        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
-        show_tables_rects |= ImGui::Combo("##show_table_rects_type", &show_tables_rect_type, trt_rects_names, TRT_Count, TRT_Count);
-        if (show_tables_rects && g.NavWindow)
-        {
-            for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++)
-            {
-                ImGuiTable* table = g.Tables.GetByIndex(table_n);
-                if (table->LastFrameActive < g.FrameCount - 1 || table->OuterWindow != g.NavWindow)
-                    continue;
-
-                ImGui::BulletText("Table 0x%08X (%d columns, in '%s')", table->ID, table->ColumnsCount, table->OuterWindow->Name);
-                if (ImGui::IsItemHovered())
-                    ImGui::GetForegroundDrawList()->AddRect(table->OuterRect.Min - ImVec2(1, 1), table->OuterRect.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
-                ImGui::Indent();
-                for (int rect_n = 0; rect_n < TRT_Count; rect_n++)
-                {
-                    if (rect_n >= TRT_ColumnsRect)
-                    {
-                        if (rect_n != TRT_ColumnsRect && rect_n != TRT_ColumnsClipRect)
-                            continue;
-                        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-                        {
-                            ImRect r = Funcs::GetTableRect(table, rect_n, column_n);
-                            ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) Col %d %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), column_n, trt_rects_names[rect_n]);
-                            if (ImGui::IsItemHovered())
-                                ImGui::GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
-                        }
-                    }
-                    else
-                    {
-                        ImRect r = Funcs::GetTableRect(table, rect_n, -1);
-                        ImGui::Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), trt_rects_names[rect_n]);
-                        if (ImGui::IsItemHovered())
-                            ImGui::GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, ~0, 2.0f);
-                    }
-                }
-                ImGui::Unindent();
-            }
-        }
-
-        ImGui::Checkbox("Show details when hovering ImDrawCmd node", &show_drawcmd_details);
-        ImGui::TreePop();
-    }
-
-    // Overlay: Display windows Rectangles and Begin Order
-    if (show_windows_rects || show_windows_begin_order)
-    {
-        for (int n = 0; n < g.Windows.Size; n++)
-        {
-            ImGuiWindow* window = g.Windows[n];
-            if (!window->WasActive)
-                continue;
-            ImDrawList* draw_list = GetForegroundDrawList(window);
-            if (show_windows_rects)
-            {
-                ImRect r = Funcs::GetWindowRect(window, show_windows_rect_type);
-                draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
-            }
-            if (show_windows_begin_order && !(window->Flags & ImGuiWindowFlags_ChildWindow))
-            {
-                char buf[32];
-                ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext);
-                float font_size = ImGui::GetFontSize();
-                draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255));
-                draw_list->AddText(window->Pos, IM_COL32(255, 255, 255, 255), buf);
-            }
-        }
-    }
-
-#ifdef IMGUI_HAS_TABLE
-    // Overlay: Display Tables Rectangles
-    if (show_tables_rects)
-    {
-        for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++)
-        {
-            ImGuiTable* table = g.Tables.GetByIndex(table_n);
-            if (table->LastFrameActive < g.FrameCount - 1)
-                continue;
-            ImDrawList* draw_list = GetForegroundDrawList(table->OuterWindow);
-            if (show_tables_rect_type >= TRT_ColumnsRect)
-            {
-                for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-                {
-                    ImRect r = Funcs::GetTableRect(table, show_tables_rect_type, column_n);
-                    ImU32 col = (table->HoveredColumnBody == column_n) ? IM_COL32(255, 255, 128, 255) : IM_COL32(255, 0, 128, 255);
-                    float thickness = (table->HoveredColumnBody == column_n) ? 3.0f : 1.0f;
-                    draw_list->AddRect(r.Min, r.Max, col, 0.0f, ~0, thickness);
-                }
-            }
-            else
-            {
-                ImRect r = Funcs::GetTableRect(table, show_tables_rect_type, -1);
-                draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
-            }
-        }
-    }
-#endif // #define IMGUI_HAS_TABLE
-
-#ifdef IMGUI_HAS_DOCK
-    // Overlay: Display Docking info
-    if (show_docking_nodes && g.IO.KeyCtrl)
-    {
-    }
-#endif // #define IMGUI_HAS_DOCK
-
-    ImGui::End();
-}
-
-#else
-
-void ImGui::ShowMetricsWindow(bool*) { }
-
-#endif
-
-//-----------------------------------------------------------------------------
-
-// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed.
-// Prefer just including imgui_internal.h from your code rather than using this define. If a declaration is missing from imgui_internal.h add it or request it on the github.
-#ifdef IMGUI_INCLUDE_IMGUI_USER_INL
-#include "imgui_user.inl"
-#endif
-
-//-----------------------------------------------------------------------------
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imgui.h
+++ /dev/null
@@ -1,2502 +1,0 @@
-// dear imgui, v1.76 WIP
-// (headers)
-
-// Help:
-// - Read FAQ at http://dearimgui.org/faq
-// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
-// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
-// Read imgui.cpp for details, links and comments.
-
-// Resources:
-// - FAQ                   http://dearimgui.org/faq
-// - Homepage & latest     https://github.com/ocornut/imgui
-// - Releases & changelog  https://github.com/ocornut/imgui/releases
-// - Gallery               https://github.com/ocornut/imgui/issues/3075 (please post your screenshots/video there!)
-// - Glossary              https://github.com/ocornut/imgui/wiki/Glossary
-// - Wiki                  https://github.com/ocornut/imgui/wiki
-// - Issues & support      https://github.com/ocornut/imgui/issues
-
-/*
-
-Index of this file:
-// Header mess
-// Forward declarations and basic types
-// ImGui API (Dear ImGui end-user API)
-// Flags & Enumerations
-// Memory allocations macros
-// ImVector<>
-// ImGuiStyle
-// ImGuiIO
-// Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload)
-// Obsolete functions
-// Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
-// Draw List API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
-// Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
-
-// FIXME-TABLE: Add ImGuiTableSortSpecsColumn and ImGuiTableSortSpecs in "Misc data structures" section above (we don't do it right now to facilitate merging various branches)
-
-*/
-
-#pragma once
-
-// Configuration file with compile-time options (edit imconfig.h or #define IMGUI_USER_CONFIG to your own filename)
-#ifdef IMGUI_USER_CONFIG
-#include IMGUI_USER_CONFIG
-#endif
-#if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H)
-#include "imconfig.h"
-#endif
-
-#ifndef IMGUI_DISABLE
-
-//-----------------------------------------------------------------------------
-// Header mess
-//-----------------------------------------------------------------------------
-
-// Includes
-#include <float.h>                  // FLT_MIN, FLT_MAX
-#include <stdarg.h>                 // va_list, va_start, va_end
-#include <stddef.h>                 // ptrdiff_t, NULL
-#include <string.h>                 // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
-
-// Version
-// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
-#define IMGUI_VERSION               "1.76 WIP"
-#define IMGUI_VERSION_NUM           17502
-#define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
-
-// Define attributes of all API symbols declarations (e.g. for DLL under Windows)
-// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default bindings files (imgui_impl_xxx.h)
-// Using dear imgui via a shared library is not recommended, because we don't guarantee backward nor forward ABI compatibility (also function call overhead, as dear imgui is a call-heavy API)
-#ifndef IMGUI_API
-#define IMGUI_API
-#endif
-#ifndef IMGUI_IMPL_API
-#define IMGUI_IMPL_API              IMGUI_API
-#endif
-
-// Helper Macros
-#ifndef IM_ASSERT
-#include <assert.h>
-#define IM_ASSERT(_EXPR)            assert(_EXPR)                               // You can override the default assert handler by editing imconfig.h
-#endif
-#if !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__))
-#define IM_FMTARGS(FMT)             __attribute__((format(printf, FMT, FMT+1))) // To apply printf-style warnings to our functions.
-#define IM_FMTLIST(FMT)             __attribute__((format(printf, FMT, 0)))
-#else
-#define IM_FMTARGS(FMT)
-#define IM_FMTLIST(FMT)
-#endif
-#define IM_ARRAYSIZE(_ARR)          ((int)(sizeof(_ARR) / sizeof(*_ARR)))       // Size of a static C-style array. Don't use on pointers!
-#define IM_UNUSED(_VAR)             ((void)_VAR)                                // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
-#if (__cplusplus >= 201100)
-#define IM_OFFSETOF(_TYPE,_MEMBER)  offsetof(_TYPE, _MEMBER)                    // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
-#else
-#define IM_OFFSETOF(_TYPE,_MEMBER)  ((size_t)&(((_TYPE*)0)->_MEMBER))           // Offset of _MEMBER within _TYPE. Old style macro.
-#endif
-
-// Warnings
-#if defined(__clang__)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wold-style-cast"
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
-#endif
-#elif defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
-
-//-----------------------------------------------------------------------------
-// Forward declarations and basic types
-//-----------------------------------------------------------------------------
-
-// Forward declarations
-struct ImDrawChannel;               // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit()
-struct ImDrawCmd;                   // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback)
-struct ImDrawData;                  // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix.
-struct ImDrawList;                  // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder)
-struct ImDrawListSharedData;        // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
-struct ImDrawListSplitter;          // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back.
-struct ImDrawVert;                  // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
-struct ImFont;                      // Runtime data for a single font within a parent ImFontAtlas
-struct ImFontAtlas;                 // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
-struct ImFontConfig;                // Configuration data when adding a font or merging fonts
-struct ImFontGlyph;                 // A single font glyph (code point + coordinates within in ImFontAtlas + offset)
-struct ImFontGlyphRangesBuilder;    // Helper to build glyph ranges from text/string data
-struct ImColor;                     // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using)
-struct ImGuiContext;                // Dear ImGui context (opaque structure, unless including imgui_internal.h)
-struct ImGuiIO;                     // Main configuration and I/O between your application and ImGui
-struct ImGuiInputTextCallbackData;  // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use)
-struct ImGuiListClipper;            // Helper to manually clip large list of items
-struct ImGuiOnceUponAFrame;         // Helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro
-struct ImGuiPayload;                // User data payload for drag and drop operations
-struct ImGuiSizeCallbackData;       // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use)
-struct ImGuiStorage;                // Helper for key->value storage
-struct ImGuiStyle;                  // Runtime data for styling/colors
-struct ImGuiTableSortSpecs;         // Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
-struct ImGuiTableSortSpecsColumn;   // Sorting specification for one column of a table
-struct ImGuiTextBuffer;             // Helper to hold and append into a text buffer (~string builder)
-struct ImGuiTextFilter;             // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]")
-
-// Enums/Flags (declared as int for compatibility with old C++, to allow using as flags and to not pollute the top of this file)
-// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists!
-//   In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
-//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
-typedef int ImGuiCol;               // -> enum ImGuiCol_             // Enum: A color identifier for styling
-typedef int ImGuiCond;              // -> enum ImGuiCond_            // Enum: A condition for many Set*() functions
-typedef int ImGuiDataType;          // -> enum ImGuiDataType_        // Enum: A primary data type
-typedef int ImGuiDir;               // -> enum ImGuiDir_             // Enum: A cardinal direction
-typedef int ImGuiKey;               // -> enum ImGuiKey_             // Enum: A key identifier (ImGui-side enum)
-typedef int ImGuiNavInput;          // -> enum ImGuiNavInput_        // Enum: An input identifier for navigation
-typedef int ImGuiMouseButton;       // -> enum ImGuiMouseButton_     // Enum: A mouse button identifier (0=left, 1=right, 2=middle)
-typedef int ImGuiMouseCursor;       // -> enum ImGuiMouseCursor_     // Enum: A mouse cursor identifier
-typedef int ImGuiSortDirection;     // -> enum ImGuiSortDirection_   // Enum: A sorting direction (ascending or descending)
-typedef int ImGuiStyleVar;          // -> enum ImGuiStyleVar_        // Enum: A variable identifier for styling
-typedef int ImDrawCornerFlags;      // -> enum ImDrawCornerFlags_    // Flags: for ImDrawList::AddRect(), AddRectFilled() etc.
-typedef int ImDrawListFlags;        // -> enum ImDrawListFlags_      // Flags: for ImDrawList
-typedef int ImFontAtlasFlags;       // -> enum ImFontAtlasFlags_     // Flags: for ImFontAtlas
-typedef int ImGuiBackendFlags;      // -> enum ImGuiBackendFlags_    // Flags: for io.BackendFlags
-typedef int ImGuiColorEditFlags;    // -> enum ImGuiColorEditFlags_  // Flags: for ColorEdit4(), ColorPicker4() etc.
-typedef int ImGuiConfigFlags;       // -> enum ImGuiConfigFlags_     // Flags: for io.ConfigFlags
-typedef int ImGuiComboFlags;        // -> enum ImGuiComboFlags_      // Flags: for BeginCombo()
-typedef int ImGuiDragDropFlags;     // -> enum ImGuiDragDropFlags_   // Flags: for BeginDragDropSource(), AcceptDragDropPayload()
-typedef int ImGuiFocusedFlags;      // -> enum ImGuiFocusedFlags_    // Flags: for IsWindowFocused()
-typedef int ImGuiHoveredFlags;      // -> enum ImGuiHoveredFlags_    // Flags: for IsItemHovered(), IsWindowHovered() etc.
-typedef int ImGuiInputTextFlags;    // -> enum ImGuiInputTextFlags_  // Flags: for InputText(), InputTextMultiline()
-typedef int ImGuiKeyModFlags;       // -> enum ImGuiKeyModFlags_     // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super)
-typedef int ImGuiSelectableFlags;   // -> enum ImGuiSelectableFlags_ // Flags: for Selectable()
-typedef int ImGuiTabBarFlags;       // -> enum ImGuiTabBarFlags_     // Flags: for BeginTabBar()
-typedef int ImGuiTabItemFlags;      // -> enum ImGuiTabItemFlags_    // Flags: for BeginTabItem()
-typedef int ImGuiTableFlags;        // -> enum ImGuiTableFlags_      // Flags: For BeginTable()
-typedef int ImGuiTableColumnFlags;  // -> enum ImGuiTableColumnFlags_// Flags: For TableSetupColumn() 
-typedef int ImGuiTableRowFlags;     // -> enum ImGuiTableRowFlags_   // Flags: For TableNextRow()
-typedef int ImGuiTreeNodeFlags;     // -> enum ImGuiTreeNodeFlags_   // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader()
-typedef int ImGuiWindowFlags;       // -> enum ImGuiWindowFlags_     // Flags: for Begin(), BeginChild()
-
-// Other types
-#ifndef ImTextureID                 // ImTextureID [configurable type: override in imconfig.h with '#define ImTextureID xxx']
-typedef void* ImTextureID;          // User data for rendering back-end to identify a texture. This is whatever to you want it to be! read the FAQ about ImTextureID for details.
-#endif
-typedef unsigned int ImGuiID;       // A unique ID used by widgets, typically hashed from a stack of string.
-typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data);
-typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data);
-
-// Decoded character types
-// (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display)
-typedef unsigned short ImWchar16;   // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings.
-typedef unsigned int ImWchar32;     // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings.
-#ifdef IMGUI_USE_WCHAR32            // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16]
-typedef ImWchar32 ImWchar;
-#else
-typedef ImWchar16 ImWchar;
-#endif
-
-// Basic scalar data types
-typedef signed char         ImS8;   // 8-bit signed integer
-typedef unsigned char       ImU8;   // 8-bit unsigned integer
-typedef signed short        ImS16;  // 16-bit signed integer
-typedef unsigned short      ImU16;  // 16-bit unsigned integer
-typedef signed int          ImS32;  // 32-bit signed integer == int
-typedef unsigned int        ImU32;  // 32-bit unsigned integer (often used to store packed colors)
-#if defined(_MSC_VER) && !defined(__clang__)
-typedef signed   __int64    ImS64;  // 64-bit signed integer (pre and post C++11 with Visual Studio)
-typedef unsigned __int64    ImU64;  // 64-bit unsigned integer (pre and post C++11 with Visual Studio)
-#elif (defined(__clang__) || defined(__GNUC__)) && (__cplusplus < 201100)
-#include <stdint.h>
-typedef int64_t             ImS64;  // 64-bit signed integer (pre C++11)
-typedef uint64_t            ImU64;  // 64-bit unsigned integer (pre C++11)
-#else
-typedef signed   long long  ImS64;  // 64-bit signed integer (post C++11)
-typedef unsigned long long  ImU64;  // 64-bit unsigned integer (post C++11)
-#endif
-
-// 2D vector (often used to store positions or sizes)
-struct ImVec2
-{
-    float                                   x, y;
-    ImVec2()                                { x = y = 0.0f; }
-    ImVec2(float _x, float _y)              { x = _x; y = _y; }
-    float  operator[] (size_t idx) const    { IM_ASSERT(idx <= 1); return (&x)[idx]; }    // We very rarely use this [] operator, the assert overhead is fine.
-    float& operator[] (size_t idx)          { IM_ASSERT(idx <= 1); return (&x)[idx]; }    // We very rarely use this [] operator, the assert overhead is fine.
-#ifdef IM_VEC2_CLASS_EXTRA
-    IM_VEC2_CLASS_EXTRA     // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2.
-#endif
-};
-
-// 4D vector (often used to store floating-point colors)
-struct ImVec4
-{
-    float                                   x, y, z, w;
-    ImVec4()                                { x = y = z = w = 0.0f; }
-    ImVec4(float _x, float _y, float _z, float _w)  { x = _x; y = _y; z = _z; w = _w; }
-#ifdef IM_VEC4_CLASS_EXTRA
-    IM_VEC4_CLASS_EXTRA     // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
-#endif
-};
-
-//-----------------------------------------------------------------------------
-// ImGui: Dear ImGui end-user API
-// (This is a namespace. You can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!)
-//-----------------------------------------------------------------------------
-
-namespace ImGui
-{
-    // Context creation and access
-    // Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between imgui contexts.
-    // None of those functions is reliant on the current context.
-    IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
-    IMGUI_API void          DestroyContext(ImGuiContext* ctx = NULL);   // NULL = destroy current context
-    IMGUI_API ImGuiContext* GetCurrentContext();
-    IMGUI_API void          SetCurrentContext(ImGuiContext* ctx);
-
-    // Main
-    IMGUI_API ImGuiIO&      GetIO();                                    // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags)
-    IMGUI_API ImGuiStyle&   GetStyle();                                 // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame!
-    IMGUI_API void          NewFrame();                                 // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame().
-    IMGUI_API void          EndFrame();                                 // ends the Dear ImGui frame. automatically called by Render(). If you don't need to render data (skipping rendering) you may call EndFrame() without Render()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all!
-    IMGUI_API void          Render();                                   // ends the Dear ImGui frame, finalize the draw data. You can get call GetDrawData() to obtain it and run your rendering function (up to v1.60, this used to call io.RenderDrawListsFn(). Nowadays, we allow and prefer calling your render function yourself.)
-    IMGUI_API ImDrawData*   GetDrawData();                              // valid after Render() and until the next call to NewFrame(). this is what you have to render.
-
-    // Demo, Debug, Information
-    IMGUI_API void          ShowDemoWindow(bool* p_open = NULL);        // create Demo window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
-    IMGUI_API void          ShowAboutWindow(bool* p_open = NULL);       // create About window. display Dear ImGui version, credits and build/system information.
-    IMGUI_API void          ShowMetricsWindow(bool* p_open = NULL);     // create Debug/Metrics window. display Dear ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc.
-    IMGUI_API void          ShowStyleEditor(ImGuiStyle* ref = NULL);    // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
-    IMGUI_API bool          ShowStyleSelector(const char* label);       // add style selector block (not a window), essentially a combo listing the default styles.
-    IMGUI_API void          ShowFontSelector(const char* label);        // add font selector block (not a window), essentially a combo listing the loaded fonts.
-    IMGUI_API void          ShowUserGuide();                            // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
-    IMGUI_API const char*   GetVersion();                               // get the compiled version string e.g. "1.23" (essentially the compiled value for IMGUI_VERSION)
-
-    // Styles
-    IMGUI_API void          StyleColorsDark(ImGuiStyle* dst = NULL);    // new, recommended style (default)
-    IMGUI_API void          StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style
-    IMGUI_API void          StyleColorsLight(ImGuiStyle* dst = NULL);   // best used with borders and a custom, thicker font
-
-    // Windows
-    // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack.
-    // - You may append multiple times to the same window during the same frame.
-    // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window,
-    //   which clicking will set the boolean to false when clicked.
-    // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
-    //   anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
-    //   [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
-    //    BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
-    //    returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
-    // - Note that the bottom of window stack always contains a window called "Debug".
-    IMGUI_API bool          Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
-    IMGUI_API void          End();
-
-    // Child Windows
-    // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
-    // - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
-    // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
-    //   Always call a matching EndChild() for each BeginChild() call, regardless of its return value [as with Begin: this is due to legacy reason and inconsistent with most BeginXXX functions apart from the regular Begin() which behaves like BeginChild().]
-    IMGUI_API bool          BeginChild(const char* str_id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
-    IMGUI_API bool          BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0,0), bool border = false, ImGuiWindowFlags flags = 0);
-    IMGUI_API void          EndChild();
-
-    // Windows Utilities
-    // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into.
-    IMGUI_API bool          IsWindowAppearing();
-    IMGUI_API bool          IsWindowCollapsed();
-    IMGUI_API bool          IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
-    IMGUI_API bool          IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
-    IMGUI_API ImDrawList*   GetWindowDrawList();                        // get draw list associated to the current window, to append your own drawing primitives
-    IMGUI_API ImVec2        GetWindowPos();                             // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
-    IMGUI_API ImVec2        GetWindowSize();                            // get current window size
-    IMGUI_API float         GetWindowWidth();                           // get current window width (shortcut for GetWindowSize().x)
-    IMGUI_API float         GetWindowHeight();                          // get current window height (shortcut for GetWindowSize().y)
-
-    // Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin).
-    IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
-    IMGUI_API void          SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0);                  // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
-    IMGUI_API void          SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
-    IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                               // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin()
-    IMGUI_API void          SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                 // set next window collapsed state. call before Begin()
-    IMGUI_API void          SetNextWindowFocus();                                                       // set next window to be focused / top-most. call before Begin()
-    IMGUI_API void          SetNextWindowBgAlpha(float alpha);                                          // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
-    IMGUI_API void          SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0);                        // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
-    IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
-    IMGUI_API void          SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                     // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
-    IMGUI_API void          SetWindowFocus();                                                           // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus().
-    IMGUI_API void          SetWindowFontScale(float scale);                                            // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes().
-    IMGUI_API void          SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0);      // set named window position.
-    IMGUI_API void          SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0);    // set named window size. set axis to 0.0f to force an auto-fit on this axis.
-    IMGUI_API void          SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0);   // set named window collapsed state
-    IMGUI_API void          SetWindowFocus(const char* name);                                           // set named window to be focused / top-most. use NULL to remove focus.
-
-    // Content region
-    // - Those functions are bound to be redesigned soon (they are confusing, incomplete and return values in local window coordinates which increases confusion)
-    IMGUI_API ImVec2        GetContentRegionMax();                                          // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
-    IMGUI_API ImVec2        GetContentRegionAvail();                                        // == GetContentRegionMax() - GetCursorPos()
-    IMGUI_API ImVec2        GetWindowContentRegionMin();                                    // content boundaries min (roughly (0,0)-Scroll), in window coordinates
-    IMGUI_API ImVec2        GetWindowContentRegionMax();                                    // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
-    IMGUI_API float         GetWindowContentRegionWidth();                                  //
-
-    // Windows Scrolling
-    IMGUI_API float         GetScrollX();                                                   // get scrolling amount [0..GetScrollMaxX()]
-    IMGUI_API float         GetScrollY();                                                   // get scrolling amount [0..GetScrollMaxY()]
-    IMGUI_API float         GetScrollMaxX();                                                // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X
-    IMGUI_API float         GetScrollMaxY();                                                // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y
-    IMGUI_API void          SetScrollX(float scroll_x);                                     // set scrolling amount [0..GetScrollMaxX()]
-    IMGUI_API void          SetScrollY(float scroll_y);                                     // set scrolling amount [0..GetScrollMaxY()]
-    IMGUI_API void          SetScrollHereX(float center_x_ratio = 0.5f);                    // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
-    IMGUI_API void          SetScrollHereY(float center_y_ratio = 0.5f);                    // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
-    IMGUI_API void          SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f);  // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
-    IMGUI_API void          SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f);  // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
-
-    // Parameters stacks (shared)
-    IMGUI_API void          PushFont(ImFont* font);                                         // use NULL as a shortcut to push default font
-    IMGUI_API void          PopFont();
-    IMGUI_API void          PushStyleColor(ImGuiCol idx, ImU32 col);
-    IMGUI_API void          PushStyleColor(ImGuiCol idx, const ImVec4& col);
-    IMGUI_API void          PopStyleColor(int count = 1);
-    IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, float val);
-    IMGUI_API void          PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
-    IMGUI_API void          PopStyleVar(int count = 1);
-    IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx);                                // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in.
-    IMGUI_API ImFont*       GetFont();                                                      // get current font
-    IMGUI_API float         GetFontSize();                                                  // get current font size (= height in pixels) of current font with current scale applied
-    IMGUI_API ImVec2        GetFontTexUvWhitePixel();                                       // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
-    IMGUI_API ImU32         GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f);              // retrieve given style color with style alpha applied and optional extra alpha multiplier
-    IMGUI_API ImU32         GetColorU32(const ImVec4& col);                                 // retrieve given color with style alpha applied
-    IMGUI_API ImU32         GetColorU32(ImU32 col);                                         // retrieve given color with style alpha applied
-
-    // Parameters stacks (current window)
-    IMGUI_API void          PushItemWidth(float item_width);                                // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side). 0.0f = default to ~2/3 of windows width,
-    IMGUI_API void          PopItemWidth();
-    IMGUI_API void          SetNextItemWidth(float item_width);                             // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side)
-    IMGUI_API float         CalcItemWidth();                                                // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
-    IMGUI_API void          PushTextWrapPos(float wrap_local_pos_x = 0.0f);                 // push word-wrapping position for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
-    IMGUI_API void          PopTextWrapPos();
-    IMGUI_API void          PushAllowKeyboardFocus(bool allow_keyboard_focus);              // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
-    IMGUI_API void          PopAllowKeyboardFocus();
-    IMGUI_API void          PushButtonRepeat(bool repeat);                                  // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
-    IMGUI_API void          PopButtonRepeat();
-
-    // Cursor / Layout
-    // - By "cursor" we mean the current output position.
-    // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
-    // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceeding widget.
-    // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
-    //    Window-local coordinates:   SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
-    //    Absolute coordinate:        GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions.
-    IMGUI_API void          Separator();                                                    // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
-    IMGUI_API void          SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f);  // call between widgets or groups to layout them horizontally. X position given in window coordinates.
-    IMGUI_API void          NewLine();                                                      // undo a SameLine() or force a new line when in an horizontal-layout context.
-    IMGUI_API void          Spacing();                                                      // add vertical spacing.
-    IMGUI_API void          Dummy(const ImVec2& size);                                      // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into.
-    IMGUI_API void          Indent(float indent_w = 0.0f);                                  // move content position toward the right, by style.IndentSpacing or indent_w if != 0
-    IMGUI_API void          Unindent(float indent_w = 0.0f);                                // move content position back to the left, by style.IndentSpacing or indent_w if != 0
-    IMGUI_API void          BeginGroup();                                                   // lock horizontal starting position
-    IMGUI_API void          EndGroup();                                                     // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
-    IMGUI_API ImVec2        GetCursorPos();                                                 // cursor position in window coordinates (relative to window position)
-    IMGUI_API float         GetCursorPosX();                                                //   (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
-    IMGUI_API float         GetCursorPosY();                                                //    other functions such as GetCursorScreenPos or everything in ImDrawList::
-    IMGUI_API void          SetCursorPos(const ImVec2& local_pos);                          //    are using the main, absolute coordinate system.
-    IMGUI_API void          SetCursorPosX(float local_x);                                   //    GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
-    IMGUI_API void          SetCursorPosY(float local_y);                                   //
-    IMGUI_API ImVec2        GetCursorStartPos();                                            // initial cursor position in window coordinates
-    IMGUI_API ImVec2        GetCursorScreenPos();                                           // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API)
-    IMGUI_API void          SetCursorScreenPos(const ImVec2& pos);                          // cursor position in absolute screen coordinates [0..io.DisplaySize]
-    IMGUI_API void          AlignTextToFramePadding();                                      // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item)
-    IMGUI_API float         GetTextLineHeight();                                            // ~ FontSize
-    IMGUI_API float         GetTextLineHeightWithSpacing();                                 // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
-    IMGUI_API float         GetFrameHeight();                                               // ~ FontSize + style.FramePadding.y * 2
-    IMGUI_API float         GetFrameHeightWithSpacing();                                    // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
-
-    // ID stack/scopes
-    // - Read the FAQ for more details about how ID are handled in dear imgui. If you are creating widgets in a loop you most
-    //   likely want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
-    // - The resulting ID are hashes of the entire stack.
-    // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others.
-    // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed and used as an ID,
-    //   whereas "str_id" denote a string that is only used as an ID and not normally displayed.
-    IMGUI_API void          PushID(const char* str_id);                                     // push string into the ID stack (will hash string).
-    IMGUI_API void          PushID(const char* str_id_begin, const char* str_id_end);       // push string into the ID stack (will hash string).
-    IMGUI_API void          PushID(const void* ptr_id);                                     // push pointer into the ID stack (will hash pointer).
-    IMGUI_API void          PushID(int int_id);                                             // push integer into the ID stack (will hash integer).
-    IMGUI_API void          PopID();                                                        // pop from the ID stack.
-    IMGUI_API ImGuiID       GetID(const char* str_id);                                      // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
-    IMGUI_API ImGuiID       GetID(const char* str_id_begin, const char* str_id_end);
-    IMGUI_API ImGuiID       GetID(const void* ptr_id);
-
-    // Widgets: Text
-    IMGUI_API void          TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
-    IMGUI_API void          Text(const char* fmt, ...)                                      IM_FMTARGS(1); // formatted text
-    IMGUI_API void          TextV(const char* fmt, va_list args)                            IM_FMTLIST(1);
-    IMGUI_API void          TextColored(const ImVec4& col, const char* fmt, ...)            IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
-    IMGUI_API void          TextColoredV(const ImVec4& col, const char* fmt, va_list args)  IM_FMTLIST(2);
-    IMGUI_API void          TextDisabled(const char* fmt, ...)                              IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
-    IMGUI_API void          TextDisabledV(const char* fmt, va_list args)                    IM_FMTLIST(1);
-    IMGUI_API void          TextWrapped(const char* fmt, ...)                               IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
-    IMGUI_API void          TextWrappedV(const char* fmt, va_list args)                     IM_FMTLIST(1);
-    IMGUI_API void          LabelText(const char* label, const char* fmt, ...)              IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
-    IMGUI_API void          LabelTextV(const char* label, const char* fmt, va_list args)    IM_FMTLIST(2);
-    IMGUI_API void          BulletText(const char* fmt, ...)                                IM_FMTARGS(1); // shortcut for Bullet()+Text()
-    IMGUI_API void          BulletTextV(const char* fmt, va_list args)                      IM_FMTLIST(1);
-
-    // Widgets: Main
-    // - Most widgets return true when the value has been changed or when pressed/selected
-    // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state.
-    IMGUI_API bool          Button(const char* label, const ImVec2& size = ImVec2(0,0));    // button
-    IMGUI_API bool          SmallButton(const char* label);                                 // button with FramePadding=(0,0) to easily embed within text
-    IMGUI_API bool          InvisibleButton(const char* str_id, const ImVec2& size);        // button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
-    IMGUI_API bool          ArrowButton(const char* str_id, ImGuiDir dir);                  // square button with an arrow shape
-    IMGUI_API void          Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
-    IMGUI_API bool          ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0),  const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1));    // <0 frame_padding uses default frame padding settings. 0 for no padding
-    IMGUI_API bool          Checkbox(const char* label, bool* v);
-    IMGUI_API bool          CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
-    IMGUI_API bool          RadioButton(const char* label, bool active);                    // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; }
-    IMGUI_API bool          RadioButton(const char* label, int* v, int v_button);           // shortcut to handle the above pattern when value is an integer
-    IMGUI_API void          ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL);
-    IMGUI_API void          Bullet();                                                       // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
-
-    // Widgets: Combo Box
-    // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
-    // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose.
-    IMGUI_API bool          BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
-    IMGUI_API void          EndCombo(); // only call EndCombo() if BeginCombo() returns true!
-    IMGUI_API bool          Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
-    IMGUI_API bool          Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1);      // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0"
-    IMGUI_API bool          Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1);
-
-    // Widgets: Drags
-    // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
-    // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
-    // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
-    // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
-    // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits.
-    // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum.
-    // - Use v_min > v_max to lock edits.
-    IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);     // If v_min >= v_max we have no bound
-    IMGUI_API bool          DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, float power = 1.0f);
-    IMGUI_API bool          DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");                                       // If v_min >= v_max we have no bound
-    IMGUI_API bool          DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
-    IMGUI_API bool          DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
-    IMGUI_API bool          DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d");
-    IMGUI_API bool          DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL);
-    IMGUI_API bool          DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f);
-    IMGUI_API bool          DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, float power = 1.0f);
-
-    // Widgets: Sliders
-    // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped and can go off-bounds.
-    // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
-    IMGUI_API bool          SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);     // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for power curve sliders
-    IMGUI_API bool          SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg");
-    IMGUI_API bool          SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d");
-    IMGUI_API bool          SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d");
-    IMGUI_API bool          SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d");
-    IMGUI_API bool          SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d");
-    IMGUI_API bool          SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
-    IMGUI_API bool          SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
-    IMGUI_API bool          VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", float power = 1.0f);
-    IMGUI_API bool          VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d");
-    IMGUI_API bool          VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, float power = 1.0f);
-
-    // Widgets: Input with Keyboard
-    // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp.
-    // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc.
-    IMGUI_API bool          InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
-    IMGUI_API bool          InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0,0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
-    IMGUI_API bool          InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
-    IMGUI_API bool          InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool          InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
-
-    // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little colored preview square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
-    // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible.
-    // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
-    IMGUI_API bool          ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
-    IMGUI_API bool          ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
-    IMGUI_API bool          ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
-    IMGUI_API bool          ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
-    IMGUI_API bool          ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0,0));  // display a colored square/button, hover for details, return true when pressed.
-    IMGUI_API void          SetColorEditOptions(ImGuiColorEditFlags flags);                     // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
-
-    // Widgets: Trees
-    // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
-    IMGUI_API bool          TreeNode(const char* label);
-    IMGUI_API bool          TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2);   // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
-    IMGUI_API bool          TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2);   // "
-    IMGUI_API bool          TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
-    IMGUI_API bool          TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
-    IMGUI_API bool          TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
-    IMGUI_API bool          TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
-    IMGUI_API bool          TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
-    IMGUI_API bool          TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
-    IMGUI_API bool          TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
-    IMGUI_API void          TreePush(const char* str_id);                                       // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired.
-    IMGUI_API void          TreePush(const void* ptr_id = NULL);                                // "
-    IMGUI_API void          TreePop();                                                          // ~ Unindent()+PopId()
-    IMGUI_API float         GetTreeNodeToLabelSpacing();                                        // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
-    IMGUI_API bool          CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0);  // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
-    IMGUI_API bool          CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header
-    IMGUI_API void          SetNextItemOpen(bool is_open, ImGuiCond cond = 0);                  // set next TreeNode/CollapsingHeader open state.
-
-    // Widgets: Selectables
-    // - A selectable highlights when hovered, and can display another color when selected.
-    // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous.
-    IMGUI_API bool          Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0));  // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
-    IMGUI_API bool          Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0,0));       // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
-
-    // Widgets: List Boxes
-    // - FIXME: To be consistent with all the newer API, ListBoxHeader/ListBoxFooter should in reality be called BeginListBox/EndListBox. Will rename them.
-    IMGUI_API bool          ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1);
-    IMGUI_API bool          ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
-    IMGUI_API bool          ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0,0)); // use if you want to reimplement ListBox() will custom data or interactions. if the function return true, you can output elements then call ListBoxFooter() afterwards.
-    IMGUI_API bool          ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // "
-    IMGUI_API void          ListBoxFooter();                                                    // terminate the scrolling region. only call ListBoxFooter() if ListBoxHeader() returned true!
-
-    // Widgets: Data Plotting
-    IMGUI_API void          PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
-    IMGUI_API void          PlotLines(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
-    IMGUI_API void          PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
-    IMGUI_API void          PlotHistogram(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
-
-    // Widgets: Value() Helpers.
-    // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
-    IMGUI_API void          Value(const char* prefix, bool b);
-    IMGUI_API void          Value(const char* prefix, int v);
-    IMGUI_API void          Value(const char* prefix, unsigned int v);
-    IMGUI_API void          Value(const char* prefix, float v, const char* float_format = NULL);
-
-    // Widgets: Menus
-    // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar.
-    // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it.
-    // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it.
-    IMGUI_API bool          BeginMenuBar();                                                     // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
-    IMGUI_API void          EndMenuBar();                                                       // only call EndMenuBar() if BeginMenuBar() returns true!
-    IMGUI_API bool          BeginMainMenuBar();                                                 // create and append to a full screen menu-bar.
-    IMGUI_API void          EndMainMenuBar();                                                   // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
-    IMGUI_API bool          BeginMenu(const char* label, bool enabled = true);                  // create a sub-menu entry. only call EndMenu() if this returns true!
-    IMGUI_API void          EndMenu();                                                          // only call EndMenu() if BeginMenu() returns true!
-    IMGUI_API bool          MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true);  // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment
-    IMGUI_API bool          MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true);              // return true when activated + toggle (*p_selected) if p_selected != NULL
-
-    // Tooltips
-    // - Tooltip are windows following the mouse which do not take focus away.
-    IMGUI_API void          BeginTooltip();                                                     // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
-    IMGUI_API void          EndTooltip();
-    IMGUI_API void          SetTooltip(const char* fmt, ...) IM_FMTARGS(1);                     // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
-    IMGUI_API void          SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
-
-    // Popups, Modals
-    // The properties of popups windows are:
-    // - They block normal mouse hovering detection outside them. (*)
-    // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
-    // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
-    //   User can manipulate the visibility state by calling OpenPopup().
-    // - We default to use the right mouse (ImGuiMouseButton_Right=1) for the Popup Context functions.
-    // (*) You can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
-    // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
-    IMGUI_API void          OpenPopup(const char* str_id);                                      // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
-    IMGUI_API bool          BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0);                                             // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true!
-    IMGUI_API bool          BeginPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                    // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
-    IMGUI_API bool          BeginPopupContextWindow(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1, bool also_over_items = true);  // helper to open and begin popup when clicked on current window.
-    IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                    // helper to open and begin popup when clicked in void (where there are no imgui windows).
-    IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);                     // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
-    IMGUI_API void          EndPopup();                                                                                             // only call EndPopup() if BeginPopupXXX() returns true!
-    IMGUI_API bool          OpenPopupOnItemClick(const char* str_id = NULL, ImGuiMouseButton mouse_button = 1);                     // helper to open popup when clicked on last item (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors). return true when just opened.
-    IMGUI_API bool          IsPopupOpen(const char* str_id);                                    // return true if the popup is open at the current begin-ed level of the popup stack.
-    IMGUI_API void          CloseCurrentPopup();                                                // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
-
-    // Columns
-    // - You can also use SameLine(pos_x) to mimic simplified columns.
-    // - The columns API is work-in-progress and rather lacking (columns are arguably the worst part of dear imgui at the moment!)
-    // - There is a maximum of 64 columns.
-    // - Currently working on new 'Tables' api which will replace columns around Q2 2020 (see GitHub #2957).
-    IMGUI_API void          Columns(int count = 1, const char* id = NULL, bool border = true);
-    IMGUI_API void          NextColumn();                                                       // next column, defaults to current row or next row if the current row is finished
-    IMGUI_API int           GetColumnIndex();                                                   // get current column index
-    IMGUI_API float         GetColumnWidth(int column_index = -1);                              // get column width (in pixels). pass -1 to use current column
-    IMGUI_API void          SetColumnWidth(int column_index, float width);                      // set column width (in pixels). pass -1 to use current column
-    IMGUI_API float         GetColumnOffset(int column_index = -1);                             // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
-    IMGUI_API void          SetColumnOffset(int column_index, float offset_x);                  // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
-    IMGUI_API int           GetColumnsCount();
-
-    // Tables
-    // [ALPHA API] API will evolve! (FIXME-TABLE)
-    // - Full-featured replacement for old Columns API
-    // - In most situations you can use TableNextRow() + TableSetColumnIndex() to populate a table.
-    // - If you are using tables as a sort of grid, populating every columns with the same type of contents,
-    //   you may prefer using TableNextCell() instead of TableNextRow() + TableSetColumnIndex().
-    // - See Demo->Tables for details.
-    // - See ImGuiTableFlags_ enums for a description of available flags. 
-    #define IMGUI_HAS_TABLE 1
-    IMGUI_API bool          BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
-    IMGUI_API void          EndTable();                                 // only call EndTable() if BeginTable() returns true!
-    IMGUI_API void          TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row.
-    IMGUI_API bool          TableNextCell();                            // append into the next column (next column, or next row if currently in last column). Return true if column is visible.
-    IMGUI_API bool          TableSetColumnIndex(int column_n);          // append into the specified column. Return true if column is visible.
-    IMGUI_API int           TableGetColumnIndex();                      // return current column index.
-    IMGUI_API const char*   TableGetColumnName(int column_n = -1);      // return NULL if column didn't have a name declared by TableSetupColumn(). Pass -1 to use current column.
-    IMGUI_API bool          TableGetColumnIsVisible(int column_n = -1); // return true if column is visible. Same value is also returned by TableNextCell() and TableSetColumnIndex(). Pass -1 to use current column.
-    IMGUI_API bool          TableGetColumnIsSorted(int column_n = -1);  // return true if column is included in the sort specs. Rarely used, can be useful to tell if a data change should trigger resort. Equivalent to test ImGuiTableSortSpecs's ->ColumnsMask & (1 << column_n). Pass -1 to use current column.
-    // Tables: Headers & Columns declaration
-    // - Use TableSetupColumn() to specify label, resizing policy, default width, id, various other flags etc.
-    // - The name passed to TableSetupColumn() is used by TableAutoHeaders() and by the context-menu
-    // - Use TableAutoHeaders() to submit the whole header row, otherwise you may treat the header row as a regular row, manually call TableHeader() and other widgets.
-    // - Headers are required to perform some interactions: reordering, sorting, context menu // FIXME-TABLE: remove context from this list!
-    IMGUI_API void          TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = -1.0f, ImU32 user_id = 0);
-    IMGUI_API void          TableAutoHeaders();                         // submit all headers cells based on data provided to TableSetupColumn() + submit context menu
-    IMGUI_API void          TableHeader(const char* label);             // submit one header cell manually.
-    // Tables: Sorting
-    // - Call TableGetSortSpecs() to retrieve latest sort specs for the table. Return value will be NULL if no sorting.
-    // - You can sort your data again when 'SpecsChanged == true'. It will be true with sorting specs have changed since last call, or the first time.
-    // - Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable()!
-    IMGUI_API const ImGuiTableSortSpecs* TableGetSortSpecs();           // get latest sort specs for the table (NULL if not sorting).
-
-    // Tab Bars, Tabs
-    IMGUI_API bool          BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0);        // create and append into a TabBar
-    IMGUI_API void          EndTabBar();                                                        // only call EndTabBar() if BeginTabBar() returns true!
-    IMGUI_API bool          BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0);// create a Tab. Returns true if the Tab is selected.
-    IMGUI_API void          EndTabItem();                                                       // only call EndTabItem() if BeginTabItem() returns true!
-    IMGUI_API void          SetTabItemClosed(const char* tab_or_docked_window_label);           // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name.
-
-    // Logging/Capture
-    // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
-    IMGUI_API void          LogToTTY(int auto_open_depth = -1);                                 // start logging to tty (stdout)
-    IMGUI_API void          LogToFile(int auto_open_depth = -1, const char* filename = NULL);   // start logging to file
-    IMGUI_API void          LogToClipboard(int auto_open_depth = -1);                           // start logging to OS clipboard
-    IMGUI_API void          LogFinish();                                                        // stop logging (close file, etc.)
-    IMGUI_API void          LogButtons();                                                       // helper to display buttons for logging to tty/file/clipboard
-    IMGUI_API void          LogText(const char* fmt, ...) IM_FMTARGS(1);                        // pass text data straight to log (without being displayed)
-
-    // Drag and Drop
-    // - [BETA API] API may evolve!
-    IMGUI_API bool          BeginDragDropSource(ImGuiDragDropFlags flags = 0);                                      // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
-    IMGUI_API bool          SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0);  // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
-    IMGUI_API void          EndDragDropSource();                                                                    // only call EndDragDropSource() if BeginDragDropSource() returns true!
-    IMGUI_API bool                  BeginDragDropTarget();                                                          // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
-    IMGUI_API const ImGuiPayload*   AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0);          // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
-    IMGUI_API void                  EndDragDropTarget();                                                            // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
-    IMGUI_API const ImGuiPayload*   GetDragDropPayload();                                                           // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
-
-    // Clipping
-    IMGUI_API void          PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
-    IMGUI_API void          PopClipRect();
-
-    // Focus, Activation
-    // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item"
-    IMGUI_API void          SetItemDefaultFocus();                                              // make last item the default focused item of a window.
-    IMGUI_API void          SetKeyboardFocusHere(int offset = 0);                               // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
-
-    // Item/Widgets Utilities
-    // - Most of the functions are referring to the last/previous item we submitted.
-    // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions.
-    IMGUI_API bool          IsItemHovered(ImGuiHoveredFlags flags = 0);                         // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options.
-    IMGUI_API bool          IsItemActive();                                                     // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false)
-    IMGUI_API bool          IsItemFocused();                                                    // is the last item focused for keyboard/gamepad navigation?
-    IMGUI_API bool          IsItemClicked(ImGuiMouseButton mouse_button = 0);                   // is the last item clicked? (e.g. button/node just clicked on) == IsMouseClicked(mouse_button) && IsItemHovered()
-    IMGUI_API bool          IsItemVisible();                                                    // is the last item visible? (items may be out of sight because of clipping/scrolling)
-    IMGUI_API bool          IsItemEdited();                                                     // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets.
-    IMGUI_API bool          IsItemActivated();                                                  // was the last item just made active (item was previously inactive).
-    IMGUI_API bool          IsItemDeactivated();                                                // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing.
-    IMGUI_API bool          IsItemDeactivatedAfterEdit();                                       // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item).
-    IMGUI_API bool          IsItemToggledOpen();                                                // was the last item open state toggled? set by TreeNode().
-    IMGUI_API bool          IsAnyItemHovered();                                                 // is any item hovered?
-    IMGUI_API bool          IsAnyItemActive();                                                  // is any item active?
-    IMGUI_API bool          IsAnyItemFocused();                                                 // is any item focused?
-    IMGUI_API ImVec2        GetItemRectMin();                                                   // get upper-left bounding rectangle of the last item (screen space)
-    IMGUI_API ImVec2        GetItemRectMax();                                                   // get lower-right bounding rectangle of the last item (screen space)
-    IMGUI_API ImVec2        GetItemRectSize();                                                  // get size of last item
-    IMGUI_API void          SetItemAllowOverlap();                                              // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
-
-    // Miscellaneous Utilities
-    IMGUI_API bool          IsRectVisible(const ImVec2& size);                                  // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
-    IMGUI_API bool          IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max);      // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
-    IMGUI_API double        GetTime();                                                          // get global imgui time. incremented by io.DeltaTime every frame.
-    IMGUI_API int           GetFrameCount();                                                    // get global imgui frame count. incremented by 1 every frame.
-    IMGUI_API ImDrawList*   GetBackgroundDrawList();                                            // this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
-    IMGUI_API ImDrawList*   GetForegroundDrawList();                                            // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
-    IMGUI_API ImDrawListSharedData* GetDrawListSharedData();                                    // you may use this when creating your own ImDrawList instances.
-    IMGUI_API const char*   GetStyleColorName(ImGuiCol idx);                                    // get a string corresponding to the enum value (for display, saving, etc.).
-    IMGUI_API void          SetStateStorage(ImGuiStorage* storage);                             // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
-    IMGUI_API ImGuiStorage* GetStateStorage();
-    IMGUI_API void          CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end);    // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can.
-    IMGUI_API bool          BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
-    IMGUI_API void          EndChildFrame();                                                    // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
-
-    // Text Utilities
-    IMGUI_API ImVec2        CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
-
-    // Color Utilities
-    IMGUI_API ImVec4        ColorConvertU32ToFloat4(ImU32 in);
-    IMGUI_API ImU32         ColorConvertFloat4ToU32(const ImVec4& in);
-    IMGUI_API void          ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v);
-    IMGUI_API void          ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
-
-    // Inputs Utilities: Keyboard
-    // - For 'int user_key_index' you can use your own indices/enums according to how your backend/engine stored them in io.KeysDown[].
-    // - We don't know the meaning of those value. You can use GetKeyIndex() to map a ImGuiKey_ value into the user index.
-    IMGUI_API int           GetKeyIndex(ImGuiKey imgui_key);                                    // map ImGuiKey_* values into user's key index. == io.KeyMap[key]
-    IMGUI_API bool          IsKeyDown(int user_key_index);                                      // is key being held. == io.KeysDown[user_key_index].
-    IMGUI_API bool          IsKeyPressed(int user_key_index, bool repeat = true);               // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
-    IMGUI_API bool          IsKeyReleased(int user_key_index);                                  // was key released (went from Down to !Down)?
-    IMGUI_API int           GetKeyPressedAmount(int key_index, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
-    IMGUI_API void          CaptureKeyboardFromApp(bool want_capture_keyboard_value = true);    // attention: misleading name! manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard_value"; after the next NewFrame() call.
-
-    // Inputs Utilities: Mouse
-    // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right.
-    // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle.
-    // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold')
-    IMGUI_API bool          IsMouseDown(ImGuiMouseButton button);                               // is mouse button held?
-    IMGUI_API bool          IsMouseClicked(ImGuiMouseButton button, bool repeat = false);       // did mouse button clicked? (went from !Down to Down)
-    IMGUI_API bool          IsMouseReleased(ImGuiMouseButton button);                           // did mouse button released? (went from Down to !Down)
-    IMGUI_API bool          IsMouseDoubleClicked(ImGuiMouseButton button);                      // did mouse button double-clicked? a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime.
-    IMGUI_API bool          IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
-    IMGUI_API bool          IsMousePosValid(const ImVec2* mouse_pos = NULL);                    // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
-    IMGUI_API bool          IsAnyMouseDown();                                                   // is any mouse button held?
-    IMGUI_API ImVec2        GetMousePos();                                                      // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
-    IMGUI_API ImVec2        GetMousePosOnOpeningCurrentPopup();                                 // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves)
-    IMGUI_API bool          IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f);         // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
-    IMGUI_API ImVec2        GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f);   // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
-    IMGUI_API void          ResetMouseDragDelta(ImGuiMouseButton button = 0);                   //
-    IMGUI_API ImGuiMouseCursor GetMouseCursor();                                                // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
-    IMGUI_API void          SetMouseCursor(ImGuiMouseCursor cursor_type);                       // set desired cursor type
-    IMGUI_API void          CaptureMouseFromApp(bool want_capture_mouse_value = true);          // attention: misleading name! manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse_value;" after the next NewFrame() call.
-
-    // Clipboard Utilities
-    // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard.
-    IMGUI_API const char*   GetClipboardText();
-    IMGUI_API void          SetClipboardText(const char* text);
-
-    // Settings/.Ini Utilities
-    // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
-    // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
-    IMGUI_API void          LoadIniSettingsFromDisk(const char* ini_filename);                  // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
-    IMGUI_API void          LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source.
-    IMGUI_API void          SaveIniSettingsToDisk(const char* ini_filename);                    // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext).
-    IMGUI_API const char*   SaveIniSettingsToMemory(size_t* out_ini_size = NULL);               // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings.
-
-    // Debug Utilities
-    IMGUI_API bool          DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro.
-
-    // Memory Allocators
-    // - All those functions are not reliant on the current context.
-    // - If you reload the contents of imgui.cpp at runtime, you may need to call SetCurrentContext() + SetAllocatorFunctions() again because we use global storage for those.
-    IMGUI_API void          SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = NULL);
-    IMGUI_API void*         MemAlloc(size_t size);
-    IMGUI_API void          MemFree(void* ptr);
-
-} // namespace ImGui
-
-//-----------------------------------------------------------------------------
-// Flags & Enumerations
-//-----------------------------------------------------------------------------
-
-// Flags for ImGui::Begin()
-enum ImGuiWindowFlags_
-{
-    ImGuiWindowFlags_None                   = 0,
-    ImGuiWindowFlags_NoTitleBar             = 1 << 0,   // Disable title-bar
-    ImGuiWindowFlags_NoResize               = 1 << 1,   // Disable user resizing with the lower-right grip
-    ImGuiWindowFlags_NoMove                 = 1 << 2,   // Disable user moving the window
-    ImGuiWindowFlags_NoScrollbar            = 1 << 3,   // Disable scrollbars (window can still scroll with mouse or programmatically)
-    ImGuiWindowFlags_NoScrollWithMouse      = 1 << 4,   // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
-    ImGuiWindowFlags_NoCollapse             = 1 << 5,   // Disable user collapsing window by double-clicking on it
-    ImGuiWindowFlags_AlwaysAutoResize       = 1 << 6,   // Resize every window to its content every frame
-    ImGuiWindowFlags_NoBackground           = 1 << 7,   // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
-    ImGuiWindowFlags_NoSavedSettings        = 1 << 8,   // Never load/save settings in .ini file
-    ImGuiWindowFlags_NoMouseInputs          = 1 << 9,   // Disable catching mouse, hovering test with pass through.
-    ImGuiWindowFlags_MenuBar                = 1 << 10,  // Has a menu-bar
-    ImGuiWindowFlags_HorizontalScrollbar    = 1 << 11,  // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
-    ImGuiWindowFlags_NoFocusOnAppearing     = 1 << 12,  // Disable taking focus when transitioning from hidden to visible state
-    ImGuiWindowFlags_NoBringToFrontOnFocus  = 1 << 13,  // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
-    ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,  // Always show vertical scrollbar (even if ContentSize.y < Size.y)
-    ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,  // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
-    ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,  // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
-    ImGuiWindowFlags_NoNavInputs            = 1 << 18,  // No gamepad/keyboard navigation within the window
-    ImGuiWindowFlags_NoNavFocus             = 1 << 19,  // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
-    ImGuiWindowFlags_UnsavedDocument        = 1 << 20,  // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. When used in a tab/docking context, tab is selected on closure and closure is deferred by one frame to allow code to cancel the closure (with a confirmation popup, etc.) without flicker.
-    ImGuiWindowFlags_NoNav                  = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
-    ImGuiWindowFlags_NoDecoration           = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
-    ImGuiWindowFlags_NoInputs               = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
-
-    // [Internal]
-    ImGuiWindowFlags_NavFlattened           = 1 << 23,  // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
-    ImGuiWindowFlags_ChildWindow            = 1 << 24,  // Don't use! For internal use by BeginChild()
-    ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip()
-    ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup()
-    ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal()
-    ImGuiWindowFlags_ChildMenu              = 1 << 28   // Don't use! For internal use by BeginMenu()
-
-    // [Obsolete]
-    //ImGuiWindowFlags_ShowBorders          = 1 << 7,   // --> Set style.FrameBorderSize=1.0f or style.WindowBorderSize=1.0f to enable borders around items or windows.
-    //ImGuiWindowFlags_ResizeFromAnySide    = 1 << 17,  // --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by back-end (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
-};
-
-// Flags for ImGui::InputText()
-enum ImGuiInputTextFlags_
-{
-    ImGuiInputTextFlags_None                = 0,
-    ImGuiInputTextFlags_CharsDecimal        = 1 << 0,   // Allow 0123456789.+-*/
-    ImGuiInputTextFlags_CharsHexadecimal    = 1 << 1,   // Allow 0123456789ABCDEFabcdef
-    ImGuiInputTextFlags_CharsUppercase      = 1 << 2,   // Turn a..z into A..Z
-    ImGuiInputTextFlags_CharsNoBlank        = 1 << 3,   // Filter out spaces, tabs
-    ImGuiInputTextFlags_AutoSelectAll       = 1 << 4,   // Select entire text when first taking mouse focus
-    ImGuiInputTextFlags_EnterReturnsTrue    = 1 << 5,   // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function.
-    ImGuiInputTextFlags_CallbackCompletion  = 1 << 6,   // Callback on pressing TAB (for completion handling)
-    ImGuiInputTextFlags_CallbackHistory     = 1 << 7,   // Callback on pressing Up/Down arrows (for history handling)
-    ImGuiInputTextFlags_CallbackAlways      = 1 << 8,   // Callback on each iteration. User code may query cursor position, modify text buffer.
-    ImGuiInputTextFlags_CallbackCharFilter  = 1 << 9,   // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
-    ImGuiInputTextFlags_AllowTabInput       = 1 << 10,  // Pressing TAB input a '\t' character into the text field
-    ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11,  // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
-    ImGuiInputTextFlags_NoHorizontalScroll  = 1 << 12,  // Disable following the cursor horizontally
-    ImGuiInputTextFlags_AlwaysInsertMode    = 1 << 13,  // Insert mode
-    ImGuiInputTextFlags_ReadOnly            = 1 << 14,  // Read-only mode
-    ImGuiInputTextFlags_Password            = 1 << 15,  // Password mode, display all characters as '*'
-    ImGuiInputTextFlags_NoUndoRedo          = 1 << 16,  // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID().
-    ImGuiInputTextFlags_CharsScientific     = 1 << 17,  // Allow 0123456789.+-*/eE (Scientific notation input)
-    ImGuiInputTextFlags_CallbackResize      = 1 << 18,  // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this)
-    // [Internal]
-    ImGuiInputTextFlags_Multiline           = 1 << 20,  // For internal use by InputTextMultiline()
-    ImGuiInputTextFlags_NoMarkEdited        = 1 << 21   // For internal use by functions using InputText() before reformatting data
-};
-
-// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
-enum ImGuiTreeNodeFlags_
-{
-    ImGuiTreeNodeFlags_None                 = 0,
-    ImGuiTreeNodeFlags_Selected             = 1 << 0,   // Draw as selected
-    ImGuiTreeNodeFlags_Framed               = 1 << 1,   // Full colored frame (e.g. for CollapsingHeader)
-    ImGuiTreeNodeFlags_AllowItemOverlap     = 1 << 2,   // Hit testing to allow subsequent widgets to overlap this one
-    ImGuiTreeNodeFlags_NoTreePushOnOpen     = 1 << 3,   // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
-    ImGuiTreeNodeFlags_NoAutoOpenOnLog      = 1 << 4,   // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
-    ImGuiTreeNodeFlags_DefaultOpen          = 1 << 5,   // Default node to be open
-    ImGuiTreeNodeFlags_OpenOnDoubleClick    = 1 << 6,   // Need double-click to open node
-    ImGuiTreeNodeFlags_OpenOnArrow          = 1 << 7,   // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
-    ImGuiTreeNodeFlags_Leaf                 = 1 << 8,   // No collapsing, no arrow (use as a convenience for leaf nodes).
-    ImGuiTreeNodeFlags_Bullet               = 1 << 9,   // Display a bullet instead of arrow
-    ImGuiTreeNodeFlags_FramePadding         = 1 << 10,  // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
-    ImGuiTreeNodeFlags_SpanAvailWidth       = 1 << 11,  // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
-    ImGuiTreeNodeFlags_SpanFullWidth        = 1 << 12,  // Extend hit box to the left-most and right-most edges (bypass the indented area).
-    ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13,  // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
-    //ImGuiTreeNodeFlags_NoScrollOnOpen     = 1 << 14,  // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
-    ImGuiTreeNodeFlags_CollapsingHeader     = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
-};
-
-// Flags for ImGui::Selectable()
-enum ImGuiSelectableFlags_
-{
-    ImGuiSelectableFlags_None               = 0,
-    ImGuiSelectableFlags_DontClosePopups    = 1 << 0,   // Clicking this don't close parent popup window
-    ImGuiSelectableFlags_SpanAllColumns     = 1 << 1,   // Selectable frame can span all columns (text will still fit in current column)
-    ImGuiSelectableFlags_AllowDoubleClick   = 1 << 2,   // Generate press events on double clicks too
-    ImGuiSelectableFlags_Disabled           = 1 << 3,   // Cannot be selected, display grayed out text
-    ImGuiSelectableFlags_AllowItemOverlap   = 1 << 4    // (WIP) Hit testing to allow subsequent widgets to overlap this one
-};
-
-// Flags for ImGui::BeginCombo()
-enum ImGuiComboFlags_
-{
-    ImGuiComboFlags_None                    = 0,
-    ImGuiComboFlags_PopupAlignLeft          = 1 << 0,   // Align the popup toward the left by default
-    ImGuiComboFlags_HeightSmall             = 1 << 1,   // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
-    ImGuiComboFlags_HeightRegular           = 1 << 2,   // Max ~8 items visible (default)
-    ImGuiComboFlags_HeightLarge             = 1 << 3,   // Max ~20 items visible
-    ImGuiComboFlags_HeightLargest           = 1 << 4,   // As many fitting items as possible
-    ImGuiComboFlags_NoArrowButton           = 1 << 5,   // Display on the preview box without the square arrow button
-    ImGuiComboFlags_NoPreview               = 1 << 6,   // Display only a square arrow button
-    ImGuiComboFlags_HeightMask_             = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
-};
-
-// Flags for ImGui::BeginTabBar()
-enum ImGuiTabBarFlags_
-{
-    ImGuiTabBarFlags_None                           = 0,
-    ImGuiTabBarFlags_Reorderable                    = 1 << 0,   // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
-    ImGuiTabBarFlags_AutoSelectNewTabs              = 1 << 1,   // Automatically select new tabs when they appear
-    ImGuiTabBarFlags_TabListPopupButton             = 1 << 2,   // Disable buttons to open the tab list popup
-    ImGuiTabBarFlags_NoCloseWithMiddleMouseButton   = 1 << 3,   // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
-    ImGuiTabBarFlags_NoTabListScrollingButtons      = 1 << 4,   // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll)
-    ImGuiTabBarFlags_NoTooltip                      = 1 << 5,   // Disable tooltips when hovering a tab
-    ImGuiTabBarFlags_FittingPolicyResizeDown        = 1 << 6,   // Resize tabs when they don't fit
-    ImGuiTabBarFlags_FittingPolicyScroll            = 1 << 7,   // Add scroll buttons when tabs don't fit
-    ImGuiTabBarFlags_FittingPolicyMask_             = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
-    ImGuiTabBarFlags_FittingPolicyDefault_          = ImGuiTabBarFlags_FittingPolicyResizeDown
-};
-
-// Flags for ImGui::BeginTabItem()
-enum ImGuiTabItemFlags_
-{
-    ImGuiTabItemFlags_None                          = 0,
-    ImGuiTabItemFlags_UnsavedDocument               = 1 << 0,   // Append '*' to title without affecting the ID, as a convenience to avoid using the ### operator. Also: tab is selected on closure and closure is deferred by one frame to allow code to undo it without flicker.
-    ImGuiTabItemFlags_SetSelected                   = 1 << 1,   // Trigger flag to programmatically make the tab selected when calling BeginTabItem()
-    ImGuiTabItemFlags_NoCloseWithMiddleMouseButton  = 1 << 2,   // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
-    ImGuiTabItemFlags_NoPushId                      = 1 << 3    // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem()
-};
-
-// Flags for ImGui::BeginTable()
-// - Columns can either varying resizing policy: "Fixed", "Stretch" or "AlwaysAutoResize". Toggling ScrollX needs to alter default sizing policy.
-// - Sizing policy have many subtle side effects which may be hard to fully comprehend at first.. They'll eventually make sense.
-//   - with SizingPolicyFixedX (default is ScrollX is on):     Columns can be enlarged as needed. Enable scrollbar if ScrollX is enabled, otherwise extend parent window's contents rect. Only Fixed columns allowed. Weighted columns will calculate their width assuming no scrolling.
-//   - with SizingPolicyStretchX (default is ScrollX is off):  Fit all columns within available table width (so it doesn't make sense to use ScrollX with Stretch columns!). Fixed and Weighted columns allowed.
-enum ImGuiTableFlags_
-{
-    // Features
-    ImGuiTableFlags_None                            = 0,
-    ImGuiTableFlags_Resizable                       = 1 << 0,   // Allow resizing columns.
-    ImGuiTableFlags_Reorderable                     = 1 << 1,   // Allow reordering columns (need calling TableSetupColumn() + TableAutoHeaders() or TableHeaders() to display headers)
-    ImGuiTableFlags_Hideable                        = 1 << 2,   // Allow hiding columns (with right-click on header) (FIXME-TABLE: allow without headers).
-    ImGuiTableFlags_Sortable                        = 1 << 3,   // Allow sorting on one column (sort_specs_count will always be == 1). Call TableGetSortSpecs() to obtain sort specs.
-    ImGuiTableFlags_MultiSortable                   = 1 << 4,   // Allow sorting on multiple columns by holding Shift (sort_specs_count may be > 1). Call TableGetSortSpecs() to obtain sort specs.
-    ImGuiTableFlags_NoSavedSettings                 = 1 << 5,   // Disable persisting columns order, width and sort settings in the .ini file.
-    // Decoration
-    ImGuiTableFlags_RowBg                           = 1 << 6,   // Use ImGuiCol_TableRowBg and ImGuiCol_TableRowBgAlt colors behind each rows.
-    ImGuiTableFlags_BordersHInner                   = 1 << 7,   // Draw horizontal borders between rows.
-    ImGuiTableFlags_BordersHOuter                   = 1 << 8,   // Draw horizontal borders at the top and bottom.
-    ImGuiTableFlags_BordersVInner                   = 1 << 9,   // Draw vertical borders between columns.
-    ImGuiTableFlags_BordersVOuter                   = 1 << 10,  // Draw vertical borders on the left and right sides.
-    ImGuiTableFlags_BordersH                        = ImGuiTableFlags_BordersHInner | ImGuiTableFlags_BordersHOuter, // Draw horizontal borders.
-    ImGuiTableFlags_BordersV                        = ImGuiTableFlags_BordersVInner | ImGuiTableFlags_BordersVOuter, // Draw vertical borders.
-    ImGuiTableFlags_BordersInner                    = ImGuiTableFlags_BordersVInner | ImGuiTableFlags_BordersHInner, // Draw inner borders.
-    ImGuiTableFlags_BordersOuter                    = ImGuiTableFlags_BordersVOuter | ImGuiTableFlags_BordersHOuter, // Draw outer borders.
-    ImGuiTableFlags_Borders                         = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,   // Draw all borders.
-    ImGuiTableFlags_BordersVFullHeight              = 1 << 11,  // Borders covers all rows even when Headers are being used. Allow resizing from any rows.
-    // Padding, Sizing
-    ImGuiTableFlags_NoClipX                         = 1 << 12,  // Disable pushing clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow)
-    ImGuiTableFlags_SizingPolicyFixedX              = 1 << 13,  // Default if ScrollX is on. Columns will default to use WidthFixed or WidthAlwaysAutoResize policy. Read description above for more details.
-    ImGuiTableFlags_SizingPolicyStretchX            = 1 << 14,  // Default if ScrollX is off. Columns will default to use WidthStretch policy. Read description above for more details.
-    ImGuiTableFlags_NoHeadersWidth                  = 1 << 15,  // Disable header width contribution to automatic width calculation.
-    ImGuiTableFlags_NoHostExtendY                   = 1 << 16,  // (FIXME-TABLE: Reword as SizingPolicy?) Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible)
-    ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 17,  // (FIXME-TABLE) Disable code that keeps column always minimally visible when table width gets too small.
-    // Scrolling
-    ImGuiTableFlags_ScrollX                         = 1 << 18,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Because this create a child window, ScrollY is currently generally recommended when using ScrollX.
-    ImGuiTableFlags_ScrollY                         = 1 << 19,  // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
-    ImGuiTableFlags_Scroll                          = ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY,
-    ImGuiTableFlags_ScrollFreezeTopRow              = 1 << 20,  // We can lock 1 to 3 rows (starting from the top). Use with ScrollY enabled.
-    ImGuiTableFlags_ScrollFreeze2Rows               = 2 << 20,
-    ImGuiTableFlags_ScrollFreeze3Rows               = 3 << 20,
-    ImGuiTableFlags_ScrollFreezeLeftColumn          = 1 << 22,  // We can lock 1 to 3 columns (starting from the left). Use with ScrollX enabled.
-    ImGuiTableFlags_ScrollFreeze2Columns            = 2 << 22,
-    ImGuiTableFlags_ScrollFreeze3Columns            = 3 << 22,
-
-    // [Internal] Combinations and masks
-    ImGuiTableFlags_SizingPolicyMaskX_              = ImGuiTableFlags_SizingPolicyStretchX | ImGuiTableFlags_SizingPolicyFixedX,
-    ImGuiTableFlags_ScrollFreezeRowsShift_          = 20,
-    ImGuiTableFlags_ScrollFreezeColumnsShift_       = 22,
-    ImGuiTableFlags_ScrollFreezeRowsMask_           = 0x03 << ImGuiTableFlags_ScrollFreezeRowsShift_,
-    ImGuiTableFlags_ScrollFreezeColumnsMask_        = 0x03 << ImGuiTableFlags_ScrollFreezeColumnsShift_
-};
-
-// Flags for ImGui::TableSetupColumn()
-// FIXME-TABLE: Rename to ImGuiColumns_*, stick old columns api flags in there under an obsolete api block
-enum ImGuiTableColumnFlags_
-{
-    ImGuiTableColumnFlags_None                      = 0,
-    ImGuiTableColumnFlags_DefaultHide               = 1 << 0,   // Default as a hidden column.
-    ImGuiTableColumnFlags_DefaultSort               = 1 << 1,   // Default as a sorting column.
-    ImGuiTableColumnFlags_WidthFixed                = 1 << 2,   // Column will keep a fixed size, preferable with horizontal scrolling enabled (default if table sizing policy is SizingPolicyFixedX and table is resizable).
-    ImGuiTableColumnFlags_WidthStretch              = 1 << 3,   // Column will stretch, preferable with horizontal scrolling disabled (default if table sizing policy is SizingPolicyStretchX).
-    ImGuiTableColumnFlags_WidthAlwaysAutoResize     = 1 << 4,   // Column will keep resizing based on submitted contents (with a one frame delay) == Fixed with auto resize (default if table sizing policy is SizingPolicyFixedX and table is not resizable).
-    ImGuiTableColumnFlags_NoResize                  = 1 << 5,   // Disable manual resizing.
-    ImGuiTableColumnFlags_NoClipX                   = 1 << 6,   // Disable clipping for this column (all NoClipX columns will render in a same draw command).
-    ImGuiTableColumnFlags_NoSort                    = 1 << 7,   // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
-    ImGuiTableColumnFlags_NoSortAscending           = 1 << 8,   // Disable ability to sort in the ascending direction.
-    ImGuiTableColumnFlags_NoSortDescending          = 1 << 9,   // Disable ability to sort in the descending direction.
-    ImGuiTableColumnFlags_NoHide                    = 1 << 10,  // Disable hiding this column.
-    ImGuiTableColumnFlags_NoHeaderWidth             = 1 << 11,  // Header width don't contribute to automatic column width.
-    ImGuiTableColumnFlags_PreferSortAscending       = 1 << 12,  // Make the initial sort direction Ascending when first sorting on this column (default).
-    ImGuiTableColumnFlags_PreferSortDescending      = 1 << 13,  // Make the initial sort direction Descending when first sorting on this column.
-    ImGuiTableColumnFlags_IndentEnable              = 1 << 14,  // Use current Indent value when entering cell (default for 1st column).
-    ImGuiTableColumnFlags_IndentDisable             = 1 << 15,  // Ignore current Indent value when entering cell (default for columns after the 1st one). Indentation changes _within_ the cell will still be honored.
-    ImGuiTableColumnFlags_NoReorder                 = 1 << 16,  // Disable reordering this column, this will also prevent other columns from crossing over this column.
-
-    // [Internal] Combinations and masks
-    ImGuiTableColumnFlags_WidthMask_                = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthAlwaysAutoResize,
-    ImGuiTableColumnFlags_IndentMask_               = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable,
-    ImGuiTableColumnFlags_NoDirectResize_           = 1 << 20   // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge)
-};
-
-// Flags for ImGui::TableNextRow()
-enum ImGuiTableRowFlags_
-{
-    ImGuiTableRowFlags_None                         = 0,
-    ImGuiTableRowFlags_Headers                      = 1 << 0    // Identify header row (set default background color + width of its contents accounted different for auto column width)
-};
-
-// Flags for ImGui::IsWindowFocused()
-enum ImGuiFocusedFlags_
-{
-    ImGuiFocusedFlags_None                          = 0,
-    ImGuiFocusedFlags_ChildWindows                  = 1 << 0,   // IsWindowFocused(): Return true if any children of the window is focused
-    ImGuiFocusedFlags_RootWindow                    = 1 << 1,   // IsWindowFocused(): Test from root window (top most parent of the current hierarchy)
-    ImGuiFocusedFlags_AnyWindow                     = 1 << 2,   // IsWindowFocused(): Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use ImGui::GetIO().WantCaptureMouse instead.
-    ImGuiFocusedFlags_RootAndChildWindows           = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows
-};
-
-// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
-// Note: if you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that. Please read the FAQ!
-// Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls.
-enum ImGuiHoveredFlags_
-{
-    ImGuiHoveredFlags_None                          = 0,        // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
-    ImGuiHoveredFlags_ChildWindows                  = 1 << 0,   // IsWindowHovered() only: Return true if any children of the window is hovered
-    ImGuiHoveredFlags_RootWindow                    = 1 << 1,   // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy)
-    ImGuiHoveredFlags_AnyWindow                     = 1 << 2,   // IsWindowHovered() only: Return true if any window is hovered
-    ImGuiHoveredFlags_AllowWhenBlockedByPopup       = 1 << 3,   // Return true even if a popup window is normally blocking access to this item/window
-    //ImGuiHoveredFlags_AllowWhenBlockedByModal     = 1 << 4,   // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
-    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem  = 1 << 5,   // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
-    ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 6,   // Return true even if the position is obstructed or overlapped by another window
-    ImGuiHoveredFlags_AllowWhenDisabled             = 1 << 7,   // Return true even if the item is disabled
-    ImGuiHoveredFlags_RectOnly                      = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
-    ImGuiHoveredFlags_RootAndChildWindows           = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
-};
-
-// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
-enum ImGuiDragDropFlags_
-{
-    ImGuiDragDropFlags_None                         = 0,
-    // BeginDragDropSource() flags
-    ImGuiDragDropFlags_SourceNoPreviewTooltip       = 1 << 0,   // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior.
-    ImGuiDragDropFlags_SourceNoDisableHover         = 1 << 1,   // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
-    ImGuiDragDropFlags_SourceNoHoldToOpenOthers     = 1 << 2,   // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item.
-    ImGuiDragDropFlags_SourceAllowNullID            = 1 << 3,   // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit.
-    ImGuiDragDropFlags_SourceExtern                 = 1 << 4,   // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
-    ImGuiDragDropFlags_SourceAutoExpirePayload      = 1 << 5,   // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged)
-    // AcceptDragDropPayload() flags
-    ImGuiDragDropFlags_AcceptBeforeDelivery         = 1 << 10,  // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered.
-    ImGuiDragDropFlags_AcceptNoDrawDefaultRect      = 1 << 11,  // Do not draw the default highlight rectangle when hovering over target.
-    ImGuiDragDropFlags_AcceptNoPreviewTooltip       = 1 << 12,  // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site.
-    ImGuiDragDropFlags_AcceptPeekOnly               = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect  // For peeking ahead and inspecting the payload before delivery.
-};
-
-// Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui.
-#define IMGUI_PAYLOAD_TYPE_COLOR_3F     "_COL3F"    // float[3]: Standard type for colors, without alpha. User code may use this type.
-#define IMGUI_PAYLOAD_TYPE_COLOR_4F     "_COL4F"    // float[4]: Standard type for colors. User code may use this type.
-
-// A primary data type
-enum ImGuiDataType_
-{
-    ImGuiDataType_S8,       // signed char / char (with sensible compilers)
-    ImGuiDataType_U8,       // unsigned char
-    ImGuiDataType_S16,      // short
-    ImGuiDataType_U16,      // unsigned short
-    ImGuiDataType_S32,      // int
-    ImGuiDataType_U32,      // unsigned int
-    ImGuiDataType_S64,      // long long / __int64
-    ImGuiDataType_U64,      // unsigned long long / unsigned __int64
-    ImGuiDataType_Float,    // float
-    ImGuiDataType_Double,   // double
-    ImGuiDataType_COUNT
-};
-
-// A cardinal direction
-enum ImGuiDir_
-{
-    ImGuiDir_None    = -1,
-    ImGuiDir_Left    = 0,
-    ImGuiDir_Right   = 1,
-    ImGuiDir_Up      = 2,
-    ImGuiDir_Down    = 3,
-    ImGuiDir_COUNT
-};
-
-// A sorting direction
-enum ImGuiSortDirection_
-{
-    ImGuiSortDirection_None         = 0,
-    ImGuiSortDirection_Ascending    = 1,    // Ascending = 0->9, A->Z etc.
-    ImGuiSortDirection_Descending   = 2     // Descending = 9->0, Z->A etc.
-};
-
-// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
-enum ImGuiKey_
-{
-    ImGuiKey_Tab,
-    ImGuiKey_LeftArrow,
-    ImGuiKey_RightArrow,
-    ImGuiKey_UpArrow,
-    ImGuiKey_DownArrow,
-    ImGuiKey_PageUp,
-    ImGuiKey_PageDown,
-    ImGuiKey_Home,
-    ImGuiKey_End,
-    ImGuiKey_Insert,
-    ImGuiKey_Delete,
-    ImGuiKey_Backspace,
-    ImGuiKey_Space,
-    ImGuiKey_Enter,
-    ImGuiKey_Escape,
-    ImGuiKey_KeyPadEnter,
-    ImGuiKey_A,                 // for text edit CTRL+A: select all
-    ImGuiKey_C,                 // for text edit CTRL+C: copy
-    ImGuiKey_V,                 // for text edit CTRL+V: paste
-    ImGuiKey_X,                 // for text edit CTRL+X: cut
-    ImGuiKey_Y,                 // for text edit CTRL+Y: redo
-    ImGuiKey_Z,                 // for text edit CTRL+Z: undo
-    ImGuiKey_COUNT
-};
-
-// To test io.KeyMods (which is a combination of individual fields io.KeyCtrl, io.KeyShift, io.KeyAlt set by user/back-end)
-enum ImGuiKeyModFlags_
-{
-    ImGuiKeyModFlags_None       = 0,
-    ImGuiKeyModFlags_Ctrl       = 1 << 0,
-    ImGuiKeyModFlags_Shift      = 1 << 1,
-    ImGuiKeyModFlags_Alt        = 1 << 2,
-    ImGuiKeyModFlags_Super      = 1 << 3
-};
-
-// Gamepad/Keyboard directional navigation
-// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
-// Gamepad:  Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Back-end: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame().
-// Read instructions in imgui.cpp for more details. Download PNG/PSD at http://goo.gl/9LgVZW.
-enum ImGuiNavInput_
-{
-    // Gamepad Mapping
-    ImGuiNavInput_Activate,      // activate / open / toggle / tweak value       // e.g. Cross  (PS4), A (Xbox), A (Switch), Space (Keyboard)
-    ImGuiNavInput_Cancel,        // cancel / close / exit                        // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard)
-    ImGuiNavInput_Input,         // text input / on-screen keyboard              // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
-    ImGuiNavInput_Menu,          // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
-    ImGuiNavInput_DpadLeft,      // move / tweak / resize window (w/ PadMenu)    // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
-    ImGuiNavInput_DpadRight,     //
-    ImGuiNavInput_DpadUp,        //
-    ImGuiNavInput_DpadDown,      //
-    ImGuiNavInput_LStickLeft,    // scroll / move window (w/ PadMenu)            // e.g. Left Analog Stick Left/Right/Up/Down
-    ImGuiNavInput_LStickRight,   //
-    ImGuiNavInput_LStickUp,      //
-    ImGuiNavInput_LStickDown,    //
-    ImGuiNavInput_FocusPrev,     // next window (w/ PadMenu)                     // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
-    ImGuiNavInput_FocusNext,     // prev window (w/ PadMenu)                     // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
-    ImGuiNavInput_TweakSlow,     // slower tweaks                                // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
-    ImGuiNavInput_TweakFast,     // faster tweaks                                // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
-
-    // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them.
-    // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from io.KeysDown[] instead of io.NavInputs[].
-    ImGuiNavInput_KeyMenu_,      // toggle menu                                  // = io.KeyAlt
-    ImGuiNavInput_KeyLeft_,      // move left                                    // = Arrow keys
-    ImGuiNavInput_KeyRight_,     // move right
-    ImGuiNavInput_KeyUp_,        // move up
-    ImGuiNavInput_KeyDown_,      // move down
-    ImGuiNavInput_COUNT,
-    ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyMenu_
-};
-
-// Configuration flags stored in io.ConfigFlags. Set by user/application.
-enum ImGuiConfigFlags_
-{
-    ImGuiConfigFlags_None                   = 0,
-    ImGuiConfigFlags_NavEnableKeyboard      = 1 << 0,   // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeysDown[].
-    ImGuiConfigFlags_NavEnableGamepad       = 1 << 1,   // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad.
-    ImGuiConfigFlags_NavEnableSetMousePos   = 1 << 2,   // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth.
-    ImGuiConfigFlags_NavNoCaptureKeyboard   = 1 << 3,   // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set.
-    ImGuiConfigFlags_NoMouse                = 1 << 4,   // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the back-end.
-    ImGuiConfigFlags_NoMouseCursorChange    = 1 << 5,   // Instruct back-end to not alter mouse cursor shape and visibility. Use if the back-end cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead.
-
-    // User storage (to allow your back-end/engine to communicate to code that may be shared between multiple projects. Those flags are not used by core Dear ImGui)
-    ImGuiConfigFlags_IsSRGB                 = 1 << 20,  // Application is SRGB-aware.
-    ImGuiConfigFlags_IsTouchScreen          = 1 << 21   // Application is using a touch screen instead of a mouse.
-};
-
-// Back-end capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom back-end.
-enum ImGuiBackendFlags_
-{
-    ImGuiBackendFlags_None                  = 0,
-    ImGuiBackendFlags_HasGamepad            = 1 << 0,   // Back-end Platform supports gamepad and currently has one connected.
-    ImGuiBackendFlags_HasMouseCursors       = 1 << 1,   // Back-end Platform supports honoring GetMouseCursor() value to change the OS cursor shape.
-    ImGuiBackendFlags_HasSetMousePos        = 1 << 2,   // Back-end Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
-    ImGuiBackendFlags_RendererHasVtxOffset  = 1 << 3    // Back-end Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices.
-};
-
-// Enumeration for PushStyleColor() / PopStyleColor()
-enum ImGuiCol_
-{
-    ImGuiCol_Text,
-    ImGuiCol_TextDisabled,
-    ImGuiCol_WindowBg,              // Background of normal windows
-    ImGuiCol_ChildBg,               // Background of child windows
-    ImGuiCol_PopupBg,               // Background of popups, menus, tooltips windows
-    ImGuiCol_Border,
-    ImGuiCol_BorderShadow,
-    ImGuiCol_FrameBg,               // Background of checkbox, radio button, plot, slider, text input
-    ImGuiCol_FrameBgHovered,
-    ImGuiCol_FrameBgActive,
-    ImGuiCol_TitleBg,
-    ImGuiCol_TitleBgActive,
-    ImGuiCol_TitleBgCollapsed,
-    ImGuiCol_MenuBarBg,
-    ImGuiCol_ScrollbarBg,
-    ImGuiCol_ScrollbarGrab,
-    ImGuiCol_ScrollbarGrabHovered,
-    ImGuiCol_ScrollbarGrabActive,
-    ImGuiCol_CheckMark,
-    ImGuiCol_SliderGrab,
-    ImGuiCol_SliderGrabActive,
-    ImGuiCol_Button,
-    ImGuiCol_ButtonHovered,
-    ImGuiCol_ButtonActive,
-    ImGuiCol_Header,                // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem
-    ImGuiCol_HeaderHovered,
-    ImGuiCol_HeaderActive,
-    ImGuiCol_Separator,
-    ImGuiCol_SeparatorHovered,
-    ImGuiCol_SeparatorActive,
-    ImGuiCol_ResizeGrip,
-    ImGuiCol_ResizeGripHovered,
-    ImGuiCol_ResizeGripActive,
-    ImGuiCol_Tab,
-    ImGuiCol_TabHovered,
-    ImGuiCol_TabActive,
-    ImGuiCol_TabUnfocused,
-    ImGuiCol_TabUnfocusedActive,
-    ImGuiCol_PlotLines,
-    ImGuiCol_PlotLinesHovered,
-    ImGuiCol_PlotHistogram,
-    ImGuiCol_PlotHistogramHovered,
-    ImGuiCol_TableHeaderBg,         // Table header background
-    ImGuiCol_TableBorderStrong,     // Table outer and header borders (prefer using Alpha=1.0 here)
-    ImGuiCol_TableBorderLight,      // Table inner borders (prefer using Alpha=1.0 here)
-    ImGuiCol_TableRowBg,            // Table row background (even rows)
-    ImGuiCol_TableRowBgAlt,         // Table row background (odd rows)
-    ImGuiCol_TextSelectedBg,
-    ImGuiCol_DragDropTarget,
-    ImGuiCol_NavHighlight,          // Gamepad/keyboard: current highlighted item
-    ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB
-    ImGuiCol_NavWindowingDimBg,     // Darken/colorize entire screen behind the CTRL+TAB window list, when active
-    ImGuiCol_ModalWindowDimBg,      // Darken/colorize entire screen behind a modal window, when one is active
-    ImGuiCol_COUNT
-
-    // Obsolete names (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    , ImGuiCol_ModalWindowDarkening = ImGuiCol_ModalWindowDimBg                      // [renamed in 1.63]
-    //, ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered// [unused since 1.60+] the close button now uses regular button colors.
-#endif
-};
-
-// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
-// - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code. 
-//   During initialization or between frames, feel free to just poke into ImGuiStyle directly.
-// - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description.
-//   In Visual Studio IDE: CTRL+comma ("Edit.NavigateTo") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
-//   With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
-// - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
-enum ImGuiStyleVar_
-{
-    // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
-    ImGuiStyleVar_Alpha,               // float     Alpha
-    ImGuiStyleVar_WindowPadding,       // ImVec2    WindowPadding
-    ImGuiStyleVar_WindowRounding,      // float     WindowRounding
-    ImGuiStyleVar_WindowBorderSize,    // float     WindowBorderSize
-    ImGuiStyleVar_WindowMinSize,       // ImVec2    WindowMinSize
-    ImGuiStyleVar_WindowTitleAlign,    // ImVec2    WindowTitleAlign
-    ImGuiStyleVar_ChildRounding,       // float     ChildRounding
-    ImGuiStyleVar_ChildBorderSize,     // float     ChildBorderSize
-    ImGuiStyleVar_PopupRounding,       // float     PopupRounding
-    ImGuiStyleVar_PopupBorderSize,     // float     PopupBorderSize
-    ImGuiStyleVar_FramePadding,        // ImVec2    FramePadding
-    ImGuiStyleVar_FrameRounding,       // float     FrameRounding
-    ImGuiStyleVar_FrameBorderSize,     // float     FrameBorderSize
-    ImGuiStyleVar_ItemSpacing,         // ImVec2    ItemSpacing
-    ImGuiStyleVar_ItemInnerSpacing,    // ImVec2    ItemInnerSpacing
-    ImGuiStyleVar_IndentSpacing,       // float     IndentSpacing
-    ImGuiStyleVar_CellPadding,         // ImVec2    CellPadding
-    ImGuiStyleVar_ScrollbarSize,       // float     ScrollbarSize
-    ImGuiStyleVar_ScrollbarRounding,   // float     ScrollbarRounding
-    ImGuiStyleVar_GrabMinSize,         // float     GrabMinSize
-    ImGuiStyleVar_GrabRounding,        // float     GrabRounding
-    ImGuiStyleVar_TabRounding,         // float     TabRounding
-    ImGuiStyleVar_ButtonTextAlign,     // ImVec2    ButtonTextAlign
-    ImGuiStyleVar_SelectableTextAlign, // ImVec2    SelectableTextAlign
-    ImGuiStyleVar_COUNT
-
-    // Obsolete names (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    , ImGuiStyleVar_Count_ = ImGuiStyleVar_COUNT                    // [renamed in 1.60]
-#endif
-};
-
-// Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
-enum ImGuiColorEditFlags_
-{
-    ImGuiColorEditFlags_None            = 0,
-    ImGuiColorEditFlags_NoAlpha         = 1 << 1,   //              // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
-    ImGuiColorEditFlags_NoPicker        = 1 << 2,   //              // ColorEdit: disable picker when clicking on colored square.
-    ImGuiColorEditFlags_NoOptions       = 1 << 3,   //              // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
-    ImGuiColorEditFlags_NoSmallPreview  = 1 << 4,   //              // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs)
-    ImGuiColorEditFlags_NoInputs        = 1 << 5,   //              // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square).
-    ImGuiColorEditFlags_NoTooltip       = 1 << 6,   //              // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
-    ImGuiColorEditFlags_NoLabel         = 1 << 7,   //              // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
-    ImGuiColorEditFlags_NoSidePreview   = 1 << 8,   //              // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead.
-    ImGuiColorEditFlags_NoDragDrop      = 1 << 9,   //              // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
-    ImGuiColorEditFlags_NoBorder        = 1 << 10,  //              // ColorButton: disable border (which is enforced by default)
-
-    // User Options (right-click on widget to change some of them).
-    ImGuiColorEditFlags_AlphaBar        = 1 << 16,  //              // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
-    ImGuiColorEditFlags_AlphaPreview    = 1 << 17,  //              // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
-    ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18,  //              // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
-    ImGuiColorEditFlags_HDR             = 1 << 19,  //              // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
-    ImGuiColorEditFlags_DisplayRGB      = 1 << 20,  // [Display]    // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex.
-    ImGuiColorEditFlags_DisplayHSV      = 1 << 21,  // [Display]    // "
-    ImGuiColorEditFlags_DisplayHex      = 1 << 22,  // [Display]    // "
-    ImGuiColorEditFlags_Uint8           = 1 << 23,  // [DataType]   // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
-    ImGuiColorEditFlags_Float           = 1 << 24,  // [DataType]   // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
-    ImGuiColorEditFlags_PickerHueBar    = 1 << 25,  // [Picker]     // ColorPicker: bar for Hue, rectangle for Sat/Value.
-    ImGuiColorEditFlags_PickerHueWheel  = 1 << 26,  // [Picker]     // ColorPicker: wheel for Hue, triangle for Sat/Value.
-    ImGuiColorEditFlags_InputRGB        = 1 << 27,  // [Input]      // ColorEdit, ColorPicker: input and output data in RGB format.
-    ImGuiColorEditFlags_InputHSV        = 1 << 28,  // [Input]      // ColorEdit, ColorPicker: input and output data in HSV format.
-
-    // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to
-    // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup.
-    ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar,
-
-    // [Internal] Masks
-    ImGuiColorEditFlags__DisplayMask    = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex,
-    ImGuiColorEditFlags__DataTypeMask   = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float,
-    ImGuiColorEditFlags__PickerMask     = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar,
-    ImGuiColorEditFlags__InputMask      = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV
-
-    // Obsolete names (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    , ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex  // [renamed in 1.69]
-#endif
-};
-
-// Identify a mouse button.
-// Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience.
-enum ImGuiMouseButton_
-{
-    ImGuiMouseButton_Left = 0,
-    ImGuiMouseButton_Right = 1,
-    ImGuiMouseButton_Middle = 2,
-    ImGuiMouseButton_COUNT = 5
-};
-
-// Enumeration for GetMouseCursor()
-// User code may request binding to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here
-enum ImGuiMouseCursor_
-{
-    ImGuiMouseCursor_None = -1,
-    ImGuiMouseCursor_Arrow = 0,
-    ImGuiMouseCursor_TextInput,         // When hovering over InputText, etc.
-    ImGuiMouseCursor_ResizeAll,         // (Unused by Dear ImGui functions)
-    ImGuiMouseCursor_ResizeNS,          // When hovering over an horizontal border
-    ImGuiMouseCursor_ResizeEW,          // When hovering over a vertical border or a column
-    ImGuiMouseCursor_ResizeNESW,        // When hovering over the bottom-left corner of a window
-    ImGuiMouseCursor_ResizeNWSE,        // When hovering over the bottom-right corner of a window
-    ImGuiMouseCursor_Hand,              // (Unused by Dear ImGui functions. Use for e.g. hyperlinks)
-    ImGuiMouseCursor_NotAllowed,        // When hovering something with disallowed interaction. Usually a crossed circle.
-    ImGuiMouseCursor_COUNT
-
-    // Obsolete names (will be removed)
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    , ImGuiMouseCursor_Count_ = ImGuiMouseCursor_COUNT      // [renamed in 1.60]
-#endif
-};
-
-// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
-// Represent a condition.
-// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
-enum ImGuiCond_
-{
-    ImGuiCond_Always        = 1 << 0,   // Set the variable
-    ImGuiCond_Once          = 1 << 1,   // Set the variable once per runtime session (only the first call with succeed)
-    ImGuiCond_FirstUseEver  = 1 << 2,   // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
-    ImGuiCond_Appearing     = 1 << 3    // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
-};
-
-//-----------------------------------------------------------------------------
-// Helpers: Memory allocations macros
-// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
-// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
-// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
-//-----------------------------------------------------------------------------
-
-struct ImNewDummy {};
-inline void* operator new(size_t, ImNewDummy, void* ptr) { return ptr; }
-inline void  operator delete(void*, ImNewDummy, void*)   {} // This is only required so we can use the symmetrical new()
-#define IM_ALLOC(_SIZE)                     ImGui::MemAlloc(_SIZE)
-#define IM_FREE(_PTR)                       ImGui::MemFree(_PTR)
-#define IM_PLACEMENT_NEW(_PTR)              new(ImNewDummy(), _PTR)
-#define IM_NEW(_TYPE)                       new(ImNewDummy(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
-template<typename T> void IM_DELETE(T* p)   { if (p) { p->~T(); ImGui::MemFree(p); } }
-
-//-----------------------------------------------------------------------------
-// Helper: ImVector<>
-// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug).
-//-----------------------------------------------------------------------------
-// - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it.
-// - We use std-like naming convention here, which is a little unusual for this codebase.
-// - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs.
-// - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,
-//   Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset.
-//-----------------------------------------------------------------------------
-
-template<typename T>
-struct ImVector
-{
-    int                 Size;
-    int                 Capacity;
-    T*                  Data;
-
-    // Provide standard typedefs but we don't use them ourselves.
-    typedef T                   value_type;
-    typedef value_type*         iterator;
-    typedef const value_type*   const_iterator;
-
-    // Constructors, destructor
-    inline ImVector()                                       { Size = Capacity = 0; Data = NULL; }
-    inline ImVector(const ImVector<T>& src)                 { Size = Capacity = 0; Data = NULL; operator=(src); }
-    inline ImVector<T>& operator=(const ImVector<T>& src)   { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; }
-    inline ~ImVector()                                      { if (Data) IM_FREE(Data); }
-
-    inline bool         empty() const                       { return Size == 0; }
-    inline int          size() const                        { return Size; }
-    inline int          size_in_bytes() const               { return Size * (int)sizeof(T); }
-    inline int          capacity() const                    { return Capacity; }
-    inline T&           operator[](int i)                   { IM_ASSERT(i < Size); return Data[i]; }
-    inline const T&     operator[](int i) const             { IM_ASSERT(i < Size); return Data[i]; }
-
-    inline void         clear()                             { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } }
-    inline T*           begin()                             { return Data; }
-    inline const T*     begin() const                       { return Data; }
-    inline T*           end()                               { return Data + Size; }
-    inline const T*     end() const                         { return Data + Size; }
-    inline T&           front()                             { IM_ASSERT(Size > 0); return Data[0]; }
-    inline const T&     front() const                       { IM_ASSERT(Size > 0); return Data[0]; }
-    inline T&           back()                              { IM_ASSERT(Size > 0); return Data[Size - 1]; }
-    inline const T&     back() const                        { IM_ASSERT(Size > 0); return Data[Size - 1]; }
-    inline void         swap(ImVector<T>& rhs)              { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
-
-    inline int          _grow_capacity(int sz) const        { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; }
-    inline void         resize(int new_size)                { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
-    inline void         resize(int new_size, const T& v)    { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
-    inline void         shrink(int new_size)                { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation
-    inline void         reserve(int new_capacity)           { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; }
-
-    // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
-    inline void         push_back(const T& v)               { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
-    inline void         pop_back()                          { IM_ASSERT(Size > 0); Size--; }
-    inline void         push_front(const T& v)              { if (Size == 0) push_back(v); else insert(Data, v); }
-    inline T*           erase(const T* it)                  { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; }
-    inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; }
-    inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >= Data && it < Data+Size);  const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; }
-    inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
-    inline bool         contains(const T& v) const          { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
-    inline T*           find(const T& v)                    { T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
-    inline const T*     find(const T& v) const              { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
-    inline bool         find_erase(const T& v)              { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; }
-    inline bool         find_erase_unsorted(const T& v)     { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; }
-    inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; }
-};
-
-//-----------------------------------------------------------------------------
-// ImGuiStyle
-// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
-// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
-// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
-//-----------------------------------------------------------------------------
-
-struct ImGuiStyle
-{
-    float       Alpha;                      // Global alpha applies to everything in Dear ImGui.
-    ImVec2      WindowPadding;              // Padding within a window.
-    float       WindowRounding;             // Radius of window corners rounding. Set to 0.0f to have rectangular windows.
-    float       WindowBorderSize;           // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
-    ImVec2      WindowMinSize;              // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
-    ImVec2      WindowTitleAlign;           // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
-    ImGuiDir    WindowMenuButtonPosition;   // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
-    float       ChildRounding;              // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
-    float       ChildBorderSize;            // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
-    float       PopupRounding;              // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
-    float       PopupBorderSize;            // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
-    ImVec2      FramePadding;               // Padding within a framed rectangle (used by most widgets).
-    float       FrameRounding;              // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
-    float       FrameBorderSize;            // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
-    ImVec2      ItemSpacing;                // Horizontal and vertical spacing between widgets/lines.
-    ImVec2      ItemInnerSpacing;           // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
-    ImVec2      CellPadding;                // Padding within a table cell
-    ImVec2      TouchExtraPadding;          // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
-    float       IndentSpacing;              // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
-    float       ColumnsMinSpacing;          // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
-    float       ScrollbarSize;              // Width of the vertical scrollbar, Height of the horizontal scrollbar.
-    float       ScrollbarRounding;          // Radius of grab corners for scrollbar.
-    float       GrabMinSize;                // Minimum width/height of a grab box for slider/scrollbar.
-    float       GrabRounding;               // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
-    float       TabRounding;                // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
-    float       TabBorderSize;              // Thickness of border around tabs.
-    ImGuiDir    ColorButtonPosition;        // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
-    ImVec2      ButtonTextAlign;            // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
-    ImVec2      SelectableTextAlign;        // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
-    ImVec2      DisplayWindowPadding;       // Window position are clamped to be visible within the display area by at least this amount. Only applies to regular windows.
-    ImVec2      DisplaySafeAreaPadding;     // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
-    float       MouseCursorScale;           // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
-    bool        AntiAliasedLines;           // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU.
-    bool        AntiAliasedFill;            // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
-    float       CurveTessellationTol;       // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
-    float       CircleSegmentMaxError;      // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
-    ImVec4      Colors[ImGuiCol_COUNT];
-
-    IMGUI_API ImGuiStyle();
-    IMGUI_API void ScaleAllSizes(float scale_factor);
-};
-
-//-----------------------------------------------------------------------------
-// ImGuiIO
-// Communicate most settings and inputs/outputs to Dear ImGui using this structure.
-// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage.
-//-----------------------------------------------------------------------------
-
-struct ImGuiIO
-{
-    //------------------------------------------------------------------
-    // Configuration (fill once)                // Default value
-    //------------------------------------------------------------------
-
-    ImGuiConfigFlags   ConfigFlags;             // = 0              // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
-    ImGuiBackendFlags  BackendFlags;            // = 0              // See ImGuiBackendFlags_ enum. Set by back-end (imgui_impl_xxx files or custom back-end) to communicate features supported by the back-end.
-    ImVec2      DisplaySize;                    // <unset>          // Main display size, in pixels.
-    float       DeltaTime;                      // = 1.0f/60.0f     // Time elapsed since last frame, in seconds.
-    float       IniSavingRate;                  // = 5.0f           // Minimum time between saving positions/sizes to .ini file, in seconds.
-    const char* IniFilename;                    // = "imgui.ini"    // Path to .ini file. Set NULL to disable automatic .ini loading/saving, if e.g. you want to manually load/save from memory.
-    const char* LogFilename;                    // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
-    float       MouseDoubleClickTime;           // = 0.30f          // Time for a double-click, in seconds.
-    float       MouseDoubleClickMaxDist;        // = 6.0f           // Distance threshold to stay in to validate a double-click, in pixels.
-    float       MouseDragThreshold;             // = 6.0f           // Distance threshold before considering we are dragging.
-    int         KeyMap[ImGuiKey_COUNT];         // <unset>          // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state.
-    float       KeyRepeatDelay;                 // = 0.250f         // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
-    float       KeyRepeatRate;                  // = 0.050f         // When holding a key/button, rate at which it repeats, in seconds.
-    void*       UserData;                       // = NULL           // Store your own data for retrieval by callbacks.
-
-    ImFontAtlas*Fonts;                          // <auto>           // Font atlas: load, rasterize and pack one or more fonts into a single texture.
-    float       FontGlobalScale;                // = 1.0f           // Global scale all fonts
-    bool        FontAllowUserScaling;           // = false          // Allow user scaling text of individual window with CTRL+Wheel.
-    ImFont*     FontDefault;                    // = NULL           // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
-    ImVec2      DisplayFramebufferScale;        // = (1, 1)         // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
-
-    // Miscellaneous options
-    bool        MouseDrawCursor;                // = false          // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by back-end implementations.
-    bool        ConfigMacOSXBehaviors;          // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl (was called io.OptMacOSXBehaviors prior to 1.63)
-    bool        ConfigInputTextCursorBlink;     // = true           // Set to false to disable blinking cursor, for users who consider it distracting. (was called: io.OptCursorBlink prior to 1.63)
-    bool        ConfigWindowsResizeFromEdges;   // = true           // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
-    bool        ConfigWindowsMoveFromTitleBarOnly; // = false       // [BETA] Set to true to only allow moving windows when clicked+dragged from the title bar. Windows without a title bar are not affected.
-    float       ConfigWindowsMemoryCompactTimer;// = 60.0f          // [BETA] Compact window memory usage when unused. Set to -1.0f to disable.
-
-    //------------------------------------------------------------------
-    // Platform Functions
-    // (the imgui_impl_xxxx back-end files are setting those up for you)
-    //------------------------------------------------------------------
-
-    // Optional: Platform/Renderer back-end name (informational only! will be displayed in About Window) + User data for back-end/wrappers to store their own stuff.
-    const char* BackendPlatformName;            // = NULL
-    const char* BackendRendererName;            // = NULL
-    void*       BackendPlatformUserData;        // = NULL           // User data for platform back-end
-    void*       BackendRendererUserData;        // = NULL           // User data for renderer back-end
-    void*       BackendLanguageUserData;        // = NULL           // User data for non C++ programming language back-end
-
-    // Optional: Access OS clipboard
-    // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
-    const char* (*GetClipboardTextFn)(void* user_data);
-    void        (*SetClipboardTextFn)(void* user_data, const char* text);
-    void*       ClipboardUserData;
-
-    // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
-    // (default to use native imm32 api on Windows)
-    void        (*ImeSetInputScreenPosFn)(int x, int y);
-    void*       ImeWindowHandle;                // = NULL           // (Windows) Set this to your HWND to get automatic IME cursor positioning.
-
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    // [OBSOLETE since 1.60+] Rendering function, will be automatically called in Render(). Please call your rendering function yourself now!
-    // You can obtain the ImDrawData* by calling ImGui::GetDrawData() after Render(). See example applications if you are unsure of how to implement this.
-    void        (*RenderDrawListsFn)(ImDrawData* data);
-#else
-    // This is only here to keep ImGuiIO the same size/layout, so that IMGUI_DISABLE_OBSOLETE_FUNCTIONS can exceptionally be used outside of imconfig.h.
-    void*       RenderDrawListsFnUnused;
-#endif
-
-    //------------------------------------------------------------------
-    // Input - Fill before calling NewFrame()
-    //------------------------------------------------------------------
-
-    ImVec2      MousePos;                       // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.)
-    bool        MouseDown[5];                   // Mouse buttons: 0=left, 1=right, 2=middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
-    float       MouseWheel;                     // Mouse wheel Vertical: 1 unit scrolls about 5 lines text.
-    float       MouseWheelH;                    // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all back-ends.
-    bool        KeyCtrl;                        // Keyboard modifier pressed: Control
-    bool        KeyShift;                       // Keyboard modifier pressed: Shift
-    bool        KeyAlt;                         // Keyboard modifier pressed: Alt
-    bool        KeySuper;                       // Keyboard modifier pressed: Cmd/Super/Windows
-    bool        KeysDown[512];                  // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys).
-    float       NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame().
-
-    // Functions
-    IMGUI_API void  AddInputCharacter(unsigned int c);          // Queue new character input
-    IMGUI_API void  AddInputCharacterUTF16(ImWchar16 c);        // Queue new character input from an UTF-16 character, it can be a surrogate
-    IMGUI_API void  AddInputCharactersUTF8(const char* str);    // Queue new characters input from an UTF-8 string
-    IMGUI_API void  ClearInputCharacters();                     // Clear the text input buffer manually
-
-    //------------------------------------------------------------------
-    // Output - Retrieve after calling NewFrame()
-    //------------------------------------------------------------------
-
-    bool        WantCaptureMouse;               // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
-    bool        WantCaptureKeyboard;            // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
-    bool        WantTextInput;                  // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
-    bool        WantSetMousePos;                // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
-    bool        WantSaveIniSettings;            // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. IMPORTANT: You need to clear io.WantSaveIniSettings yourself.
-    bool        NavActive;                      // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
-    bool        NavVisible;                     // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
-    float       Framerate;                      // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames
-    int         MetricsRenderVertices;          // Vertices output during last call to Render()
-    int         MetricsRenderIndices;           // Indices output during last call to Render() = number of triangles * 3
-    int         MetricsRenderWindows;           // Number of visible windows
-    int         MetricsActiveWindows;           // Number of active windows
-    int         MetricsActiveAllocations;       // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
-    ImVec2      MouseDelta;                     // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
-
-    //------------------------------------------------------------------
-    // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
-    //------------------------------------------------------------------
-
-    ImGuiKeyModFlags KeyMods;                   // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame()
-    ImVec2      MousePosPrev;                   // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
-    ImVec2      MouseClickedPos[5];             // Position at time of clicking
-    double      MouseClickedTime[5];            // Time of last click (used to figure out double-click)
-    bool        MouseClicked[5];                // Mouse button went from !Down to Down
-    bool        MouseDoubleClicked[5];          // Has mouse button been double-clicked?
-    bool        MouseReleased[5];               // Mouse button went from Down to !Down
-    bool        MouseDownOwned[5];              // Track if button was clicked inside a dear imgui window. We don't request mouse capture from the application if click started outside ImGui bounds.
-    bool        MouseDownWasDoubleClick[5];     // Track if button down was a double-click
-    float       MouseDownDuration[5];           // Duration the mouse button has been down (0.0f == just clicked)
-    float       MouseDownDurationPrev[5];       // Previous time the mouse button has been down
-    ImVec2      MouseDragMaxDistanceAbs[5];     // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point
-    float       MouseDragMaxDistanceSqr[5];     // Squared maximum distance of how much mouse has traveled from the clicking point
-    float       KeysDownDuration[512];          // Duration the keyboard key has been down (0.0f == just pressed)
-    float       KeysDownDurationPrev[512];      // Previous duration the key has been down
-    float       NavInputsDownDuration[ImGuiNavInput_COUNT];
-    float       NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
-    ImWchar16   InputQueueSurrogate;            // For AddInputCharacterUTF16
-    ImVector<ImWchar> InputQueueCharacters;     // Queue of _characters_ input (obtained by platform back-end). Fill using AddInputCharacter() helper.
-
-    IMGUI_API   ImGuiIO();
-};
-
-//-----------------------------------------------------------------------------
-// Misc data structures
-//-----------------------------------------------------------------------------
-
-// Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used.
-// The callback function should return 0 by default.
-// Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details)
-// - ImGuiInputTextFlags_CallbackCompletion:  Callback on pressing TAB
-// - ImGuiInputTextFlags_CallbackHistory:     Callback on pressing Up/Down arrows
-// - ImGuiInputTextFlags_CallbackAlways:      Callback on each iteration
-// - ImGuiInputTextFlags_CallbackCharFilter:  Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
-// - ImGuiInputTextFlags_CallbackResize:      Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
-struct ImGuiInputTextCallbackData
-{
-    ImGuiInputTextFlags EventFlag;      // One ImGuiInputTextFlags_Callback*    // Read-only
-    ImGuiInputTextFlags Flags;          // What user passed to InputText()      // Read-only
-    void*               UserData;       // What user passed to InputText()      // Read-only
-
-    // Arguments for the different callback events
-    // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary.
-    // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state.
-    ImWchar             EventChar;      // Character input                      // Read-write   // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0;
-    ImGuiKey            EventKey;       // Key pressed (Up/Down/TAB)            // Read-only    // [Completion,History]
-    char*               Buf;            // Text buffer                          // Read-write   // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer!
-    int                 BufTextLen;     // Text length (in bytes)               // Read-write   // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length()
-    int                 BufSize;        // Buffer size (in bytes) = capacity+1  // Read-only    // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1
-    bool                BufDirty;       // Set if you modify Buf/BufTextLen!    // Write        // [Completion,History,Always]
-    int                 CursorPos;      //                                      // Read-write   // [Completion,History,Always]
-    int                 SelectionStart; //                                      // Read-write   // [Completion,History,Always] == to SelectionEnd when no selection)
-    int                 SelectionEnd;   //                                      // Read-write   // [Completion,History,Always]
-
-    // Helper functions for text manipulation.
-    // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
-    IMGUI_API ImGuiInputTextCallbackData();
-    IMGUI_API void      DeleteChars(int pos, int bytes_count);
-    IMGUI_API void      InsertChars(int pos, const char* text, const char* text_end = NULL);
-    bool                HasSelection() const { return SelectionStart != SelectionEnd; }
-};
-
-// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
-// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
-struct ImGuiSizeCallbackData
-{
-    void*   UserData;       // Read-only.   What user passed to SetNextWindowSizeConstraints()
-    ImVec2  Pos;            // Read-only.   Window position, for reference.
-    ImVec2  CurrentSize;    // Read-only.   Current window size.
-    ImVec2  DesiredSize;    // Read-write.  Desired size, based on user's mouse position. Write to this field to restrain resizing.
-};
-
-// Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload()
-struct ImGuiPayload
-{
-    // Members
-    void*           Data;               // Data (copied and owned by dear imgui)
-    int             DataSize;           // Data size
-
-    // [Internal]
-    ImGuiID         SourceId;           // Source item id
-    ImGuiID         SourceParentId;     // Source parent id (if available)
-    int             DataFrameCount;     // Data timestamp
-    char            DataType[32+1];     // Data type tag (short user-supplied string, 32 characters max)
-    bool            Preview;            // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
-    bool            Delivery;           // Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
-
-    ImGuiPayload()  { Clear(); }
-    void Clear()    { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; }
-    bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; }
-    bool IsPreview() const                  { return Preview; }
-    bool IsDelivery() const                 { return Delivery; }
-};
-
-// Sorting specification for one column of a table (sizeof == 8 bytes)
-struct ImGuiTableSortSpecsColumn
-{
-    ImGuiID                     ColumnUserID;       // User id of the column (if specified by a TableSetupColumn() call)
-    ImU8                        ColumnIndex;        // Index of the column
-    ImU8                        SortOrder;          // Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
-    ImGuiSortDirection          SortDirection : 8;  // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending (you can use this or SortSign, whichever is more convenient for your sort function)
-
-    ImGuiTableSortSpecsColumn() { ColumnUserID = 0; ColumnIndex = 0; SortOrder = 0; SortDirection = ImGuiSortDirection_Ascending; }
-};
-
-// Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
-// Obtained by calling TableGetSortSpecs()
-struct ImGuiTableSortSpecs
-{
-    const ImGuiTableSortSpecsColumn* Specs;         // Pointer to sort spec array.
-    int                         SpecsCount;         // Sort spec count. Most often 1 unless e.g. ImGuiTableFlags_MultiSortable is enabled.
-    bool                        SpecsChanged;       // Set to true by TableGetSortSpecs() call if the specs have changed since the previous call. Use this to sort again!
-    ImU64                       ColumnsMask;        // Set to the mask of column indexes included in the Specs array. e.g. (1 << N) when column N is sorted.
-
-    ImGuiTableSortSpecs()       { Specs = NULL; SpecsCount = 0; SpecsChanged = false; ColumnsMask = 0x00; }
-};
-
-//-----------------------------------------------------------------------------
-// Obsolete functions (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
-// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead.
-//-----------------------------------------------------------------------------
-
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-namespace ImGui
-{
-    // OBSOLETED in 1.72 (from July 2019)
-    static inline void  TreeAdvanceToLabelPos()               { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); }
-    // OBSOLETED in 1.71 (from June 2019)
-    static inline void  SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); }
-    // OBSOLETED in 1.70 (from May 2019)
-    static inline float GetContentRegionAvailWidth()          { return GetContentRegionAvail().x; }
-    // OBSOLETED in 1.69 (from Mar 2019)
-    static inline ImDrawList* GetOverlayDrawList()            { return GetForegroundDrawList(); }
-    // OBSOLETED in 1.66 (from Sep 2018)
-    static inline void  SetScrollHere(float center_ratio=0.5f){ SetScrollHereY(center_ratio); }
-    // OBSOLETED in 1.63 (between Aug 2018 and Sept 2018)
-    static inline bool  IsItemDeactivatedAfterChange()        { return IsItemDeactivatedAfterEdit(); }
-    // OBSOLETED in 1.61 (between Apr 2018 and Aug 2018)
-    IMGUI_API bool      InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags = 0); // Use the 'const char* format' version instead of 'decimal_precision'!
-    IMGUI_API bool      InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool      InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags = 0);
-    IMGUI_API bool      InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags = 0);
-    // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018)
-    static inline bool  IsAnyWindowFocused()                  { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); }
-    static inline bool  IsAnyWindowHovered()                  { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); }
-    static inline ImVec2 CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = 0.f) { IM_UNUSED(on_edge); IM_UNUSED(outward); IM_ASSERT(0); return pos; }
-}
-typedef ImGuiInputTextCallback      ImGuiTextEditCallback;    // OBSOLETED in 1.63 (from Aug 2018): made the names consistent
-typedef ImGuiInputTextCallbackData  ImGuiTextEditCallbackData;
-#endif
-
-//-----------------------------------------------------------------------------
-// Helpers
-//-----------------------------------------------------------------------------
-
-// Helper: Unicode defines
-#define IM_UNICODE_CODEPOINT_INVALID 0xFFFD     // Invalid Unicode code point (standard value).
-#ifdef IMGUI_USE_WCHAR32
-#define IM_UNICODE_CODEPOINT_MAX     0x10FFFF   // Maximum Unicode code point supported by this build.
-#else
-#define IM_UNICODE_CODEPOINT_MAX     0xFFFF     // Maximum Unicode code point supported by this build.
-#endif
-
-// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
-// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
-struct ImGuiOnceUponAFrame
-{
-    ImGuiOnceUponAFrame() { RefFrame = -1; }
-    mutable int RefFrame;
-    operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
-};
-
-// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
-struct ImGuiTextFilter
-{
-    IMGUI_API           ImGuiTextFilter(const char* default_filter = "");
-    IMGUI_API bool      Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f);  // Helper calling InputText+Build
-    IMGUI_API bool      PassFilter(const char* text, const char* text_end = NULL) const;
-    IMGUI_API void      Build();
-    void                Clear()          { InputBuf[0] = 0; Build(); }
-    bool                IsActive() const { return !Filters.empty(); }
-
-    // [Internal]
-    struct ImGuiTextRange
-    {
-        const char*     b;
-        const char*     e;
-
-        ImGuiTextRange()                                { b = e = NULL; }
-        ImGuiTextRange(const char* _b, const char* _e)  { b = _b; e = _e; }
-        bool            empty() const                   { return b == e; }
-        IMGUI_API void  split(char separator, ImVector<ImGuiTextRange>* out) const;
-    };
-    char                    InputBuf[256];
-    ImVector<ImGuiTextRange>Filters;
-    int                     CountGrep;
-};
-
-// Helper: Growable text buffer for logging/accumulating text
-// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder')
-struct ImGuiTextBuffer
-{
-    ImVector<char>      Buf;
-    IMGUI_API static char EmptyString[1];
-
-    ImGuiTextBuffer()   { }
-    inline char         operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
-    const char*         begin() const           { return Buf.Data ? &Buf.front() : EmptyString; }
-    const char*         end() const             { return Buf.Data ? &Buf.back() : EmptyString; }   // Buf is zero-terminated, so end() will point on the zero-terminator
-    int                 size() const            { return Buf.Size ? Buf.Size - 1 : 0; }
-    bool                empty() const           { return Buf.Size <= 1; }
-    void                clear()                 { Buf.clear(); }
-    void                reserve(int capacity)   { Buf.reserve(capacity); }
-    const char*         c_str() const           { return Buf.Data ? Buf.Data : EmptyString; }
-    IMGUI_API void      append(const char* str, const char* str_end = NULL);
-    IMGUI_API void      appendf(const char* fmt, ...) IM_FMTARGS(2);
-    IMGUI_API void      appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
-};
-
-// Helper: Key->Value storage
-// Typically you don't have to worry about this since a storage is held within each Window.
-// We use it to e.g. store collapse state for a tree (Int 0/1)
-// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
-// You can use it as custom user storage for temporary values. Declare your own storage if, for example:
-// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
-// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
-// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
-struct ImGuiStorage
-{
-    // [Internal]
-    struct ImGuiStoragePair
-    {
-        ImGuiID key;
-        union { int val_i; float val_f; void* val_p; };
-        ImGuiStoragePair(ImGuiID _key, int _val_i)      { key = _key; val_i = _val_i; }
-        ImGuiStoragePair(ImGuiID _key, float _val_f)    { key = _key; val_f = _val_f; }
-        ImGuiStoragePair(ImGuiID _key, void* _val_p)    { key = _key; val_p = _val_p; }
-    };
-
-    ImVector<ImGuiStoragePair>      Data;
-
-    // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
-    // - Set***() functions find pair, insertion on demand if missing.
-    // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
-    void                Clear() { Data.clear(); }
-    IMGUI_API int       GetInt(ImGuiID key, int default_val = 0) const;
-    IMGUI_API void      SetInt(ImGuiID key, int val);
-    IMGUI_API bool      GetBool(ImGuiID key, bool default_val = false) const;
-    IMGUI_API void      SetBool(ImGuiID key, bool val);
-    IMGUI_API float     GetFloat(ImGuiID key, float default_val = 0.0f) const;
-    IMGUI_API void      SetFloat(ImGuiID key, float val);
-    IMGUI_API void*     GetVoidPtr(ImGuiID key) const; // default_val is NULL
-    IMGUI_API void      SetVoidPtr(ImGuiID key, void* val);
-
-    // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
-    // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
-    // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct)
-    //      float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
-    IMGUI_API int*      GetIntRef(ImGuiID key, int default_val = 0);
-    IMGUI_API bool*     GetBoolRef(ImGuiID key, bool default_val = false);
-    IMGUI_API float*    GetFloatRef(ImGuiID key, float default_val = 0.0f);
-    IMGUI_API void**    GetVoidPtrRef(ImGuiID key, void* default_val = NULL);
-
-    // Use on your own storage if you know only integer are being stored (open/close all tree nodes)
-    IMGUI_API void      SetAllInt(int val);
-
-    // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
-    IMGUI_API void      BuildSortByKey();
-};
-
-// Helper: Manually clip large list of items.
-// If you are submitting lots of evenly spaced items and you have a random access to the list, you can perform coarse clipping based on visibility to save yourself from processing those items at all.
-// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped.
-// ImGui already clip items based on their bounds but it needs to measure text size to do so. Coarse clipping before submission makes this cost and your own data fetching/submission cost null.
-// Usage:
-//     ImGuiListClipper clipper(1000);  // we have 1000 elements, evenly spaced.
-//     while (clipper.Step())
-//         for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
-//             ImGui::Text("line number %d", i);
-// - Step 0: the clipper let you process the first element, regardless of it being visible or not, so we can measure the element height (step skipped if we passed a known height as second arg to constructor).
-// - Step 1: the clipper infer height from first element, calculate the actual range of elements to display, and position the cursor before the first element.
-// - (Step 2: dummy step only required if an explicit items_height was passed to constructor or Begin() and user call Step(). Does nothing and switch to Step 3.)
-// - Step 3: the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd), advance the cursor to the end of the list and then returns 'false' to end the loop.
-struct ImGuiListClipper
-{
-    int     DisplayStart, DisplayEnd;
-    int     ItemsCount;
-
-    // [Internal]
-    int     StepNo;
-    float   ItemsHeight;
-    float   StartPosY;
-
-    // items_count:  Use -1 to ignore (you can call Begin later). Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step).
-    // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing().
-    // If you don't specify an items_height, you NEED to call Step(). If you specify items_height you may call the old Begin()/End() api directly, but prefer calling Step().
-    ImGuiListClipper(int items_count = -1, float items_height = -1.0f)  { Begin(items_count, items_height); } // NB: Begin() initialize every fields (as we allow user to call Begin/End multiple times on a same instance if they want).
-    ~ImGuiListClipper()                                                 { IM_ASSERT(ItemsCount == -1); }      // Assert if user forgot to call End() or Step() until false.
-
-    IMGUI_API bool Step();                                              // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items.
-    IMGUI_API void Begin(int items_count, float items_height = -1.0f);  // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1.
-    IMGUI_API void End();                                               // Automatically called on the last call of Step() that returns false.
-};
-
-// Helpers macros to generate 32-bit encoded colors
-#ifdef IMGUI_USE_BGRA_PACKED_COLOR
-#define IM_COL32_R_SHIFT    16
-#define IM_COL32_G_SHIFT    8
-#define IM_COL32_B_SHIFT    0
-#define IM_COL32_A_SHIFT    24
-#define IM_COL32_A_MASK     0xFF000000
-#else
-#define IM_COL32_R_SHIFT    0
-#define IM_COL32_G_SHIFT    8
-#define IM_COL32_B_SHIFT    16
-#define IM_COL32_A_SHIFT    24
-#define IM_COL32_A_MASK     0xFF000000
-#endif
-#define IM_COL32(R,G,B,A)    (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
-#define IM_COL32_WHITE       IM_COL32(255,255,255,255)  // Opaque white = 0xFFFFFFFF
-#define IM_COL32_BLACK       IM_COL32(0,0,0,255)        // Opaque black
-#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0)          // Transparent black = 0x00000000
-
-// Helper: ImColor() implicitly converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
-// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
-// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
-// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
-struct ImColor
-{
-    ImVec4              Value;
-
-    ImColor()                                                       { Value.x = Value.y = Value.z = Value.w = 0.0f; }
-    ImColor(int r, int g, int b, int a = 255)                       { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; }
-    ImColor(ImU32 rgba)                                             { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; }
-    ImColor(float r, float g, float b, float a = 1.0f)              { Value.x = r; Value.y = g; Value.z = b; Value.w = a; }
-    ImColor(const ImVec4& col)                                      { Value = col; }
-    inline operator ImU32() const                                   { return ImGui::ColorConvertFloat4ToU32(Value); }
-    inline operator ImVec4() const                                  { return Value; }
-
-    // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
-    inline void    SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
-    static ImColor HSV(float h, float s, float v, float a = 1.0f)   { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); }
-};
-
-//-----------------------------------------------------------------------------
-// Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
-// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
-//-----------------------------------------------------------------------------
-
-// ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h]
-// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering,
-// you can poke into the draw list for that! Draw callback may be useful for example to:
-//  A) Change your GPU render state,
-//  B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
-// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }'
-// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering back-end accordingly.
-#ifndef ImDrawCallback
-typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
-#endif
-
-// Special Draw callback value to request renderer back-end to reset the graphics/render state.
-// The renderer back-end needs to handle this special value, otherwise it will crash trying to call a function at this address.
-// This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored.
-// It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call).
-#define ImDrawCallback_ResetRenderState     (ImDrawCallback)(-1)
-
-// Typically, 1 command = 1 GPU draw call (unless command is a callback)
-// Pre 1.71 back-ends will typically ignore the VtxOffset/IdxOffset fields. When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset'
-// is enabled, those fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
-struct ImDrawCmd
-{
-    unsigned int    ElemCount;              // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
-    ImVec4          ClipRect;               // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
-    ImTextureID     TextureId;              // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
-    unsigned int    VtxOffset;              // Start offset in vertex buffer. Pre-1.71 or without ImGuiBackendFlags_RendererHasVtxOffset: always 0. With ImGuiBackendFlags_RendererHasVtxOffset: may be >0 to support meshes larger than 64K vertices with 16-bit indices.
-    unsigned int    IdxOffset;              // Start offset in index buffer. Always equal to sum of ElemCount drawn so far.
-    ImDrawCallback  UserCallback;           // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
-    void*           UserCallbackData;       // The draw callback code can access this.
-
-    ImDrawCmd() { ElemCount = 0; TextureId = (ImTextureID)NULL; VtxOffset = IdxOffset = 0;  UserCallback = NULL; UserCallbackData = NULL; }
-};
-
-// Vertex index, default to 16-bit
-// To allow large meshes with 16-bit indices: set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset in the renderer back-end (recommended).
-// To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in imconfig.h.
-#ifndef ImDrawIdx
-typedef unsigned short ImDrawIdx;
-#endif
-
-// Vertex layout
-#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT
-struct ImDrawVert
-{
-    ImVec2  pos;
-    ImVec2  uv;
-    ImU32   col;
-};
-#else
-// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
-// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
-// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up.
-// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
-IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
-#endif
-
-// For use by ImDrawListSplitter.
-struct ImDrawChannel
-{
-    ImVector<ImDrawCmd>         _CmdBuffer;
-    ImVector<ImDrawIdx>         _IdxBuffer;
-};
-
-// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order.
-// This is used by the Columns api, so items of each column can be batched together in a same draw call.
-struct ImDrawListSplitter
-{
-    int                         _Current;    // Current channel number (0)
-    int                         _Count;      // Number of active channels (1+)
-    ImVector<ImDrawChannel>     _Channels;   // Draw channels (not resized down so _Count might be < Channels.Size)
-
-    inline ImDrawListSplitter()  { Clear(); }
-    inline ~ImDrawListSplitter() { ClearFreeMemory(); }
-    inline void                 Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
-    IMGUI_API void              ClearFreeMemory();
-    IMGUI_API void              Split(ImDrawList* draw_list, int count);
-    IMGUI_API void              Merge(ImDrawList* draw_list);
-    IMGUI_API void              SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
-};
-
-enum ImDrawCornerFlags_
-{
-    ImDrawCornerFlags_None      = 0,
-    ImDrawCornerFlags_TopLeft   = 1 << 0, // 0x1
-    ImDrawCornerFlags_TopRight  = 1 << 1, // 0x2
-    ImDrawCornerFlags_BotLeft   = 1 << 2, // 0x4
-    ImDrawCornerFlags_BotRight  = 1 << 3, // 0x8
-    ImDrawCornerFlags_Top       = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight,   // 0x3
-    ImDrawCornerFlags_Bot       = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight,   // 0xC
-    ImDrawCornerFlags_Left      = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft,    // 0x5
-    ImDrawCornerFlags_Right     = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight,  // 0xA
-    ImDrawCornerFlags_All       = 0xF     // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience
-};
-
-enum ImDrawListFlags_
-{
-    ImDrawListFlags_None             = 0,
-    ImDrawListFlags_AntiAliasedLines = 1 << 0,  // Lines are anti-aliased (*2 the number of triangles for 1.0f wide line, otherwise *3 the number of triangles)
-    ImDrawListFlags_AntiAliasedFill  = 1 << 1,  // Filled shapes have anti-aliased edges (*2 the number of vertices)
-    ImDrawListFlags_AllowVtxOffset   = 1 << 2   // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled.
-};
-
-// Draw command list
-// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame,
-// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
-// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to
-// access the current window draw list and draw custom primitives.
-// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
-// All positions are generally in pixel coordinates (top-left at (0,0), bottom-right at io.DisplaySize), but you are totally free to apply whatever transformation matrix to want to the data (if you apply such transformation you'll want to apply it to ClipRect as well)
-// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
-struct ImDrawList
-{
-    // This is what you have to render
-    ImVector<ImDrawCmd>     CmdBuffer;          // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
-    ImVector<ImDrawIdx>     IdxBuffer;          // Index buffer. Each command consume ImDrawCmd::ElemCount of those
-    ImVector<ImDrawVert>    VtxBuffer;          // Vertex buffer.
-    ImDrawListFlags         Flags;              // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
-
-    // [Internal, used while building lists]
-    const ImDrawListSharedData* _Data;          // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
-    const char*             _OwnerName;         // Pointer to owner window's name for debugging
-    unsigned int            _VtxCurrentOffset;  // [Internal] Always 0 unless 'Flags & ImDrawListFlags_AllowVtxOffset'.
-    unsigned int            _VtxCurrentIdx;     // [Internal] Generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
-    ImDrawVert*             _VtxWritePtr;       // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
-    ImDrawIdx*              _IdxWritePtr;       // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
-    ImVector<ImVec4>        _ClipRectStack;     // [Internal]
-    ImVector<ImTextureID>   _TextureIdStack;    // [Internal]
-    ImVector<ImVec2>        _Path;              // [Internal] current path building
-    ImDrawListSplitter      _Splitter;          // [Internal] for channels api
-
-    // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
-    ImDrawList(const ImDrawListSharedData* shared_data) { _Data = shared_data; _OwnerName = NULL; Clear(); }
-    ~ImDrawList() { ClearFreeMemory(); }
-    IMGUI_API void  PushClipRect(ImVec2 clip_rect_min, ImVec2 clip_rect_max, bool intersect_with_current_clip_rect = false);  // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
-    IMGUI_API void  PushClipRectFullScreen();
-    IMGUI_API void  PopClipRect();
-    IMGUI_API void  PushTextureID(ImTextureID texture_id);
-    IMGUI_API void  PopTextureID();
-    inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
-    inline ImVec2   GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
-
-    // Primitives
-    // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners.
-    // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred).
-    //   In future versions we will use textures to provide cheaper and higher-quality circles.
-    //   Use AddNgon() and AddNgonFilled() functions if you need to guaranteed a specific number of sides.
-    IMGUI_API void  AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f);
-    IMGUI_API void  AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All, float thickness = 1.0f);   // a: upper-left, b: lower-right (== upper-left + size), rounding_corners_flags: 4 bits corresponding to which corner to round
-    IMGUI_API void  AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);                     // a: upper-left, b: lower-right (== upper-left + size)
-    IMGUI_API void  AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
-    IMGUI_API void  AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f);
-    IMGUI_API void  AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col);
-    IMGUI_API void  AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f);
-    IMGUI_API void  AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col);
-    IMGUI_API void  AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 12, float thickness = 1.0f);
-    IMGUI_API void  AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 12);
-    IMGUI_API void  AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f);
-    IMGUI_API void  AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments);
-    IMGUI_API void  AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
-    IMGUI_API void  AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
-    IMGUI_API void  AddPolyline(const ImVec2* points, int num_points, ImU32 col, bool closed, float thickness);
-    IMGUI_API void  AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col); // Note: Anti-aliased filling requires points to be in clockwise order.
-    IMGUI_API void  AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0);
-
-    // Image primitives
-    // - Read FAQ to understand what ImTextureID is.
-    // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle.
-    // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture.
-    IMGUI_API void  AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE);
-    IMGUI_API void  AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE);
-    IMGUI_API void  AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
-
-    // Stateful path API, add points then finish with PathFillConvex() or PathStroke()
-    inline    void  PathClear()                                                 { _Path.Size = 0; }
-    inline    void  PathLineTo(const ImVec2& pos)                               { _Path.push_back(pos); }
-    inline    void  PathLineToMergeDuplicate(const ImVec2& pos)                 { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); }
-    inline    void  PathFillConvex(ImU32 col)                                   { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }  // Note: Anti-aliased filling requires points to be in clockwise order.
-    inline    void  PathStroke(ImU32 col, bool closed, float thickness = 1.0f)  { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; }
-    IMGUI_API void  PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10);
-    IMGUI_API void  PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12);                                            // Use precomputed angles for a 12 steps circle
-    IMGUI_API void  PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0);
-    IMGUI_API void  PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawCornerFlags rounding_corners = ImDrawCornerFlags_All);
-
-    // Advanced
-    IMGUI_API void  AddCallback(ImDrawCallback callback, void* callback_data);  // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles.
-    IMGUI_API void  AddDrawCmd();                                               // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible
-    IMGUI_API ImDrawList* CloneOutput() const;                                  // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
-
-    // Advanced: Channels
-    // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives)
-    // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end)
-    // - FIXME-OBSOLETE: This API shouldn't have been in ImDrawList in the first place!
-    //   Prefer using your own persistent copy of ImDrawListSplitter as you can stack them.
-    //   Using the ImDrawList::ChannelsXXXX you cannot stack a split over another.
-    inline void     ChannelsSplit(int count)    { _Splitter.Split(this, count); }
-    inline void     ChannelsMerge()             { _Splitter.Merge(this); }
-    inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChannel(this, n); }
-
-    // Internal helpers
-    // NB: all primitives needs to be reserved via PrimReserve() beforehand!
-    IMGUI_API void  Clear();
-    IMGUI_API void  ClearFreeMemory();
-    IMGUI_API void  PrimReserve(int idx_count, int vtx_count);
-    IMGUI_API void  PrimUnreserve(int idx_count, int vtx_count);
-    IMGUI_API void  PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col);      // Axis aligned rectangle (composed of two triangles)
-    IMGUI_API void  PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col);
-    IMGUI_API void  PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col);
-    inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col){ _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; }
-    inline    void  PrimWriteIdx(ImDrawIdx idx)                                 { *_IdxWritePtr = idx; _IdxWritePtr++; }
-    inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col)     { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); }
-    IMGUI_API void  UpdateClipRect();
-    IMGUI_API void  UpdateTextureID();
-};
-
-// All draw data to render a Dear ImGui frame
-// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose,
-// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
-struct ImDrawData
-{
-    bool            Valid;                  // Only valid after Render() is called and before the next NewFrame() is called.
-    ImDrawList**    CmdLists;               // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here.
-    int             CmdListsCount;          // Number of ImDrawList* to render
-    int             TotalIdxCount;          // For convenience, sum of all ImDrawList's IdxBuffer.Size
-    int             TotalVtxCount;          // For convenience, sum of all ImDrawList's VtxBuffer.Size
-    ImVec2          DisplayPos;             // Upper-left position of the viewport to render (== upper-left of the orthogonal projection matrix to use)
-    ImVec2          DisplaySize;            // Size of the viewport to render (== io.DisplaySize for the main viewport) (DisplayPos + DisplaySize == lower-right of the orthogonal projection matrix to use)
-    ImVec2          FramebufferScale;       // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
-
-    // Functions
-    ImDrawData()    { Valid = false; Clear(); }
-    ~ImDrawData()   { Clear(); }
-    void Clear()    { Valid = false; CmdLists = NULL; CmdListsCount = TotalVtxCount = TotalIdxCount = 0; DisplayPos = DisplaySize = FramebufferScale = ImVec2(0.f, 0.f); } // The ImDrawList are owned by ImGuiContext!
-    IMGUI_API void  DeIndexAllBuffers();                    // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
-    IMGUI_API void  ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
-};
-
-//-----------------------------------------------------------------------------
-// Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont)
-//-----------------------------------------------------------------------------
-
-struct ImFontConfig
-{
-    void*           FontData;               //          // TTF/OTF data
-    int             FontDataSize;           //          // TTF/OTF data size
-    bool            FontDataOwnedByAtlas;   // true     // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
-    int             FontNo;                 // 0        // Index of font within TTF/OTF file
-    float           SizePixels;             //          // Size in pixels for rasterizer (more or less maps to the resulting font height).
-    int             OversampleH;            // 3        // Rasterize at higher quality for sub-pixel positioning. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
-    int             OversampleV;            // 1        // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis.
-    bool            PixelSnapH;             // false    // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
-    ImVec2          GlyphExtraSpacing;      // 0, 0     // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
-    ImVec2          GlyphOffset;            // 0, 0     // Offset all glyphs from this font input.
-    const ImWchar*  GlyphRanges;            // NULL     // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
-    float           GlyphMinAdvanceX;       // 0        // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font
-    float           GlyphMaxAdvanceX;       // FLT_MAX  // Maximum AdvanceX for glyphs
-    bool            MergeMode;              // false    // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
-    unsigned int    RasterizerFlags;        // 0x00     // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one.
-    float           RasterizerMultiply;     // 1.0f     // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
-    ImWchar         EllipsisChar;           // -1       // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
-
-    // [Internal]
-    char            Name[40];               // Name (strictly to ease debugging)
-    ImFont*         DstFont;
-
-    IMGUI_API ImFontConfig();
-};
-
-// Hold rendering data for one glyph.
-// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this)
-struct ImFontGlyph
-{
-    unsigned int    Codepoint : 31;     // 0x0000..0xFFFF
-    unsigned int    Visible : 1;        // Flag to allow early out when rendering
-    float           AdvanceX;           // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
-    float           X0, Y0, X1, Y1;     // Glyph corners
-    float           U0, V0, U1, V1;     // Texture coordinates
-};
-
-// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges().
-// This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
-struct ImFontGlyphRangesBuilder
-{
-    ImVector<ImU32> UsedChars;            // Store 1-bit per Unicode code point (0=unused, 1=used)
-
-    ImFontGlyphRangesBuilder()              { Clear(); }
-    inline void     Clear()                 { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
-    inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; }  // Get bit n in the array
-    inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; }               // Set bit n in the array
-    inline void     AddChar(ImWchar c)      { SetBit(c); }                      // Add character
-    IMGUI_API void  AddText(const char* text, const char* text_end = NULL);     // Add string (each character of the UTF-8 string are added)
-    IMGUI_API void  AddRanges(const ImWchar* ranges);                           // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
-    IMGUI_API void  BuildRanges(ImVector<ImWchar>* out_ranges);                 // Output new ranges
-};
-
-// See ImFontAtlas::AddCustomRectXXX functions.
-struct ImFontAtlasCustomRect
-{
-    unsigned int    ID;             // Input    // User ID. Use < 0x110000 to map into a font glyph, >= 0x110000 for other/internal/custom texture data.
-    unsigned short  Width, Height;  // Input    // Desired rectangle dimension
-    unsigned short  X, Y;           // Output   // Packed position in Atlas
-    float           GlyphAdvanceX;  // Input    // For custom font glyphs only (ID < 0x110000): glyph xadvance
-    ImVec2          GlyphOffset;    // Input    // For custom font glyphs only (ID < 0x110000): glyph display offset
-    ImFont*         Font;           // Input    // For custom font glyphs only (ID < 0x110000): target font
-    ImFontAtlasCustomRect()         { ID = 0xFFFFFFFF; Width = Height = 0; X = Y = 0xFFFF; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0,0); Font = NULL; }
-    bool IsPacked() const           { return X != 0xFFFF; }
-};
-
-enum ImFontAtlasFlags_
-{
-    ImFontAtlasFlags_None               = 0,
-    ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0,   // Don't round the height to next power of two
-    ImFontAtlasFlags_NoMouseCursors     = 1 << 1    // Don't build software mouse cursors into the atlas
-};
-
-// Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding:
-//  - One or more fonts.
-//  - Custom graphics data needed to render the shapes needed by Dear ImGui.
-//  - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas).
-// It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api.
-//  - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you.
-//  - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
-//  - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples)
-//  - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
-//    This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details.
-// Common pitfalls:
-// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
-//   atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
-// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction.
-//   You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
-// - Even though many functions are suffixed with "TTF", OTF data is supported just as well.
-// - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future!
-struct ImFontAtlas
-{
-    IMGUI_API ImFontAtlas();
-    IMGUI_API ~ImFontAtlas();
-    IMGUI_API ImFont*           AddFont(const ImFontConfig* font_cfg);
-    IMGUI_API ImFont*           AddFontDefault(const ImFontConfig* font_cfg = NULL);
-    IMGUI_API ImFont*           AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
-    IMGUI_API ImFont*           AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed.
-    IMGUI_API ImFont*           AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp.
-    IMGUI_API ImFont*           AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);              // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter.
-    IMGUI_API void              ClearInputData();           // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
-    IMGUI_API void              ClearTexData();             // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory.
-    IMGUI_API void              ClearFonts();               // Clear output font data (glyphs storage, UV coordinates).
-    IMGUI_API void              Clear();                    // Clear all input and output.
-
-    // Build atlas, retrieve pixel data.
-    // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
-    // The pitch is always = Width * BytesPerPixels (1 or 4)
-    // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
-    // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste.
-    IMGUI_API bool              Build();                    // Build pixels data. This is called automatically for you by the GetTexData*** functions.
-    IMGUI_API void              GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL);  // 1 byte per-pixel
-    IMGUI_API void              GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL);  // 4 bytes-per-pixel
-    bool                        IsBuilt() const             { return Fonts.Size > 0 && (TexPixelsAlpha8 != NULL || TexPixelsRGBA32 != NULL); }
-    void                        SetTexID(ImTextureID id)    { TexID = id; }
-
-    //-------------------------------------------
-    // Glyph Ranges
-    //-------------------------------------------
-
-    // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
-    // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
-    // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data.
-    IMGUI_API const ImWchar*    GetGlyphRangesDefault();                // Basic Latin, Extended Latin
-    IMGUI_API const ImWchar*    GetGlyphRangesKorean();                 // Default + Korean characters
-    IMGUI_API const ImWchar*    GetGlyphRangesJapanese();               // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs
-    IMGUI_API const ImWchar*    GetGlyphRangesChineseFull();            // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs
-    IMGUI_API const ImWchar*    GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese
-    IMGUI_API const ImWchar*    GetGlyphRangesCyrillic();               // Default + about 400 Cyrillic characters
-    IMGUI_API const ImWchar*    GetGlyphRangesThai();                   // Default + Thai characters
-    IMGUI_API const ImWchar*    GetGlyphRangesVietnamese();             // Default + Vietnamese characters
-
-    //-------------------------------------------
-    // [BETA] Custom Rectangles/Glyphs API
-    //-------------------------------------------
-
-    // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
-    // After calling Build(), you can query the rectangle position and render your pixels.
-    // You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
-    // so you can render e.g. custom colorful icons and use them as regular glyphs.
-    // Read docs/FONTS.txt for more details about using colorful icons.
-    IMGUI_API int               AddCustomRectRegular(unsigned int id, int width, int height);                                                                   // Id needs to be >= 0x110000. Id >= 0x80000000 are reserved for ImGui and ImDrawList
-    IMGUI_API int               AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0,0));   // Id needs to be < 0x110000 to register a rectangle to map into a specific font.
-    const ImFontAtlasCustomRect*GetCustomRectByIndex(int index) const { if (index < 0) return NULL; return &CustomRects[index]; }
-
-    // [Internal]
-    IMGUI_API void              CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const;
-    IMGUI_API bool              GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
-
-    //-------------------------------------------
-    // Members
-    //-------------------------------------------
-
-    bool                        Locked;             // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
-    ImFontAtlasFlags            Flags;              // Build flags (see ImFontAtlasFlags_)
-    ImTextureID                 TexID;              // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
-    int                         TexDesiredWidth;    // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
-    int                         TexGlyphPadding;    // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0.
-
-    // [Internal]
-    // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
-    unsigned char*              TexPixelsAlpha8;    // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
-    unsigned int*               TexPixelsRGBA32;    // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
-    int                         TexWidth;           // Texture width calculated during Build().
-    int                         TexHeight;          // Texture height calculated during Build().
-    ImVec2                      TexUvScale;         // = (1.0f/TexWidth, 1.0f/TexHeight)
-    ImVec2                      TexUvWhitePixel;    // Texture coordinates to a white pixel
-    ImVector<ImFont*>           Fonts;              // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
-    ImVector<ImFontAtlasCustomRect> CustomRects;    // Rectangles for packing custom texture data into the atlas.
-    ImVector<ImFontConfig>      ConfigData;         // Internal data
-    int                         CustomRectIds[1];   // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList
-
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    typedef ImFontAtlasCustomRect    CustomRect;         // OBSOLETED in 1.72+
-    typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+
-#endif
-};
-
-// Font runtime data and rendering
-// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
-struct ImFont
-{
-    // Members: Hot ~20/24 bytes (for CalcTextSize)
-    ImVector<float>             IndexAdvanceX;      // 12-16 // out //            // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
-    float                       FallbackAdvanceX;   // 4     // out // = FallbackGlyph->AdvanceX
-    float                       FontSize;           // 4     // in  //            // Height of characters/line, set during loading (don't change after loading)
-
-    // Members: Hot ~36/48 bytes (for CalcTextSize + render loop)
-    ImVector<ImWchar>           IndexLookup;        // 12-16 // out //            // Sparse. Index glyphs by Unicode code-point.
-    ImVector<ImFontGlyph>       Glyphs;             // 12-16 // out //            // All glyphs.
-    const ImFontGlyph*          FallbackGlyph;      // 4-8   // out // = FindGlyph(FontFallbackChar)
-    ImVec2                      DisplayOffset;      // 8     // in  // = (0,0)    // Offset font rendering by xx pixels
-
-    // Members: Cold ~32/40 bytes
-    ImFontAtlas*                ContainerAtlas;     // 4-8   // out //            // What we has been loaded into
-    const ImFontConfig*         ConfigData;         // 4-8   // in  //            // Pointer within ContainerAtlas->ConfigData
-    short                       ConfigDataCount;    // 2     // in  // ~ 1        // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
-    ImWchar                     FallbackChar;       // 2     // in  // = '?'      // Replacement character if a glyph isn't found. Only set via SetFallbackChar()
-    ImWchar                     EllipsisChar;       // 2     // out // = -1       // Character used for ellipsis rendering.
-    bool                        DirtyLookupTables;  // 1     // out //
-    float                       Scale;              // 4     // in  // = 1.f      // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
-    float                       Ascent, Descent;    // 4+4   // out //            // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
-    int                         MetricsTotalSurface;// 4     // out //            // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
-    ImU8                        Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations accross all used codepoints.
-
-    // Methods
-    IMGUI_API ImFont();
-    IMGUI_API ~ImFont();
-    IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
-    IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
-    float                       GetCharAdvance(ImWchar c) const     { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
-    bool                        IsLoaded() const                    { return ContainerAtlas != NULL; }
-    const char*                 GetDebugName() const                { return ConfigData ? ConfigData->Name : "<unknown>"; }
-
-    // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
-    // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
-    IMGUI_API ImVec2            CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8
-    IMGUI_API const char*       CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const;
-    IMGUI_API void              RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const;
-    IMGUI_API void              RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
-
-    // [Internal] Don't use!
-    IMGUI_API void              BuildLookupTable();
-    IMGUI_API void              ClearOutputData();
-    IMGUI_API void              GrowIndex(int new_size);
-    IMGUI_API void              AddGlyph(ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
-    IMGUI_API void              AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
-    IMGUI_API void              SetGlyphVisible(ImWchar c, bool visible);
-    IMGUI_API void              SetFallbackChar(ImWchar c);
-    IMGUI_API bool              IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last);
-};
-
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#elif defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
-// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
-#ifdef IMGUI_INCLUDE_IMGUI_USER_H
-#include "imgui_user.h"
-#endif
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imgui_demo.cpp
+++ /dev/null
@@ -1,6058 +1,0 @@
-// dear imgui, v1.76 WIP
-// (demo code)
-
-// Help:
-// - Read FAQ at http://dearimgui.org/faq
-// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
-// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp for demo code. All applications in examples/ are doing that.
-// Read imgui.cpp for more details, documentation and comments.
-// Get latest version at https://github.com/ocornut/imgui
-
-// Message to the person tempted to delete this file when integrating Dear ImGui into their code base:
-// Do NOT remove this file from your project! Think again! It is the most useful reference code that you and other coders
-// will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available debug menu of
-// your game/app! Removing this file from your project is hindering access to documentation for everyone in your team,
-// likely leading you to poorer usage of the library.
-// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowDemoWindow().
-// If you want to link core Dear ImGui in your shipped builds but want a thorough guarantee that the demo will not be linked,
-// you can setup your imconfig.h with #define IMGUI_DISABLE_DEMO_WINDOWS and those functions will be empty.
-// In other situation, whenever you have Dear ImGui available you probably want this to be available for reference.
-// Thank you,
-// -Your beloved friend, imgui_demo.cpp (which you won't delete)
-
-// Message to beginner C/C++ programmers about the meaning of the 'static' keyword:
-// In this demo code, we frequently we use 'static' variables inside functions. A static variable persist across calls, so it is
-// essentially like a global variable but declared inside the scope of the function. We do this as a way to gather code and data
-// in the same place, to make the demo source code faster to read, faster to write, and smaller in size.
-// It also happens to be a convenient way of storing simple UI related information as long as your function doesn't need to be
-// reentrant or used in multiple threads. This might be a pattern you will want to use in your code, but most of the real data
-// you would be editing is likely going to be stored outside your functions.
-
-// The Demo code in this file is designed to be easy to copy-and-paste in into your application!
-// Because of this:
-// - We never omit the ImGui:: namespace when calling functions, even though most of our code is already in the same namespace.
-// - We try to declare static variables in the local scope, as close as possible to the code using them.
-// - We never use any of the helpers/facilities used internally by Dear ImGui, unless it has been exposed in the public API (imgui.h).
-// - We never use maths operators on ImVec2/ImVec4. For other of our sources files, they are provided by imgui_internal.h w/ IMGUI_DEFINE_MATH_OPERATORS.
-//   For your own sources file they are optional and require you either enable those, either provide your own via IM_VEC2_CLASS_EXTRA in imconfig.h.
-//   Because we don't want to assume anything about your support of maths operators, we don't use them in imgui_demo.cpp.
-
-/*
-
-Index of this file:
-
-// [SECTION] Forward Declarations, Helpers
-// [SECTION] Demo Window / ShowDemoWindow()
-// [SECTION] About Window / ShowAboutWindow()
-// [SECTION] Style Editor / ShowStyleEditor()
-// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
-// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
-// [SECTION] Example App: Debug Log / ShowExampleAppLog()
-// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
-// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
-// [SECTION] Example App: Long Text / ShowExampleAppLongText()
-// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
-// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
-// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
-// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
-// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
-// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
-
-*/
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "imgui.h"
-#ifndef IMGUI_DISABLE
-
-#include <ctype.h>          // toupper
-#include <limits.h>         // INT_MIN, INT_MAX
-#include <math.h>           // sqrtf, powf, cosf, sinf, floorf, ceilf
-#include <stdio.h>          // vsnprintf, sscanf, printf
-#include <stdlib.h>         // NULL, malloc, free, atoi
-#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
-#include <stddef.h>         // intptr_t
-#else
-#include <stdint.h>         // intptr_t
-#endif
-
-#ifdef _MSC_VER
-#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
-#endif
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wold-style-cast"             // warning : use of old-style cast                              // yes, they are more terse.
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"    // warning : 'xx' is deprecated: The POSIX name for this item.. // for strdup used in demo code (so user can copy & paste the code)
-#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"   // warning : cast to 'void *' from smaller integer type 'int'
-#pragma clang diagnostic ignored "-Wformat-security"            // warning : warning: format string is not a string literal
-#pragma clang diagnostic ignored "-Wexit-time-destructors"      // warning : declaration requires an exit-time destructor       // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
-#pragma clang diagnostic ignored "-Wunused-macros"              // warning : warning: macro is not used                         // we define snprintf/vsnprintf on Windows so they are available, but not always used.
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant                  // some standard header variations use #define NULL 0
-#endif
-#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion"           // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
-#endif
-#if __has_warning("-Wreserved-id-macro")
-#pragma clang diagnostic ignored "-Wreserved-id-macro"          // warning : macro name is a reserved identifier                //
-#endif
-#elif defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wpragmas"                      // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"          // warning: cast to pointer from integer of different size
-#pragma GCC diagnostic ignored "-Wformat-security"              // warning : format string is not a string literal (potentially insecure)
-#pragma GCC diagnostic ignored "-Wdouble-promotion"             // warning: implicit conversion from 'float' to 'double' when passing argument to function
-#pragma GCC diagnostic ignored "-Wconversion"                   // warning: conversion to 'xxxx' from 'xxxx' may alter its value
-#pragma GCC diagnostic ignored "-Wmisleading-indentation"       // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement      // GCC 6.0+ only. See #883 on GitHub.
-#endif
-
-// Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
-#ifdef _WIN32
-#define IM_NEWLINE  "\r\n"
-#else
-#define IM_NEWLINE  "\n"
-#endif
-
-#if defined(_MSC_VER) && !defined(snprintf)
-#define snprintf    _snprintf
-#endif
-#if defined(_MSC_VER) && !defined(vsnprintf)
-#define vsnprintf   _vsnprintf
-#endif
-
-// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
-#ifndef IMGUI_CDECL
-#ifdef _MSC_VER
-#define IMGUI_CDECL __cdecl
-#else
-#define IMGUI_CDECL
-#endif
-#endif
-
-//-----------------------------------------------------------------------------
-// [SECTION] Forward Declarations, Helpers
-//-----------------------------------------------------------------------------
-
-#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
-
-// Forward Declarations
-static void ShowExampleAppDocuments(bool* p_open);
-static void ShowExampleAppMainMenuBar();
-static void ShowExampleAppConsole(bool* p_open);
-static void ShowExampleAppLog(bool* p_open);
-static void ShowExampleAppLayout(bool* p_open);
-static void ShowExampleAppPropertyEditor(bool* p_open);
-static void ShowExampleAppLongText(bool* p_open);
-static void ShowExampleAppAutoResize(bool* p_open);
-static void ShowExampleAppConstrainedResize(bool* p_open);
-static void ShowExampleAppSimpleOverlay(bool* p_open);
-static void ShowExampleAppWindowTitles(bool* p_open);
-static void ShowExampleAppCustomRendering(bool* p_open);
-static void ShowExampleMenuFile();
-
-// Helper to display a little (?) mark which shows a tooltip when hovered.
-// In your own code you may want to display an actual icon if you are using a merged icon fonts (see docs/FONTS.txt)
-static void HelpMarker(const char* desc)
-{
-    ImGui::TextDisabled("(?)");
-    if (ImGui::IsItemHovered())
-    {
-        ImGui::BeginTooltip();
-        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
-        ImGui::TextUnformatted(desc);
-        ImGui::PopTextWrapPos();
-        ImGui::EndTooltip();
-    }
-}
-
-// Helper to display basic user controls.
-void ImGui::ShowUserGuide()
-{
-    ImGuiIO& io = ImGui::GetIO();
-    ImGui::BulletText("Double-click on title bar to collapse window.");
-    ImGui::BulletText("Click and drag on lower corner to resize window\n(double-click to auto fit window to its contents).");
-    ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text.");
-    ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
-    if (io.FontAllowUserScaling)
-        ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
-    ImGui::BulletText("While inputing text:\n");
-    ImGui::Indent();
-    ImGui::BulletText("CTRL+Left/Right to word jump.");
-    ImGui::BulletText("CTRL+A or double-click to select all.");
-    ImGui::BulletText("CTRL+X/C/V to use clipboard cut/copy/paste.");
-    ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo.");
-    ImGui::BulletText("ESCAPE to revert.");
-    ImGui::BulletText("You can apply arithmetic operators +,*,/ on numerical values.\nUse +- to subtract.");
-    ImGui::Unindent();
-    ImGui::BulletText("With keyboard navigation enabled:");
-    ImGui::Indent();
-    ImGui::BulletText("Arrow keys to navigate.");
-    ImGui::BulletText("Space to activate a widget.");
-    ImGui::BulletText("Return to input text into a widget.");
-    ImGui::BulletText("Escape to deactivate a widget, close popup, exit child window.");
-    ImGui::BulletText("Alt to jump to the menu layer of a window.");
-    ImGui::BulletText("CTRL+Tab to select a window.");
-    ImGui::Unindent();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Demo Window / ShowDemoWindow()
-//-----------------------------------------------------------------------------
-// - ShowDemoWindowWidgets()
-// - ShowDemoWindowLayout()
-// - ShowDemoWindowPopups()
-// - ShowDemoWindowTables()
-// - ShowDemoWindowColumns()
-// - ShowDemoWindowMisc()
-//-----------------------------------------------------------------------------
-
-// We split the contents of the big ShowDemoWindow() function into smaller functions (because the link time of very large functions grow non-linearly)
-static void ShowDemoWindowWidgets();
-static void ShowDemoWindowLayout();
-static void ShowDemoWindowPopups();
-static void ShowDemoWindowTables();
-static void ShowDemoWindowColumns();
-static void ShowDemoWindowMisc();
-
-// Demonstrate most Dear ImGui features (this is big function!)
-// You may execute this function to experiment with the UI and understand what it does. You may then search for keywords in the code when you are interested by a specific feature.
-void ImGui::ShowDemoWindow(bool* p_open)
-{
-    IM_ASSERT(ImGui::GetCurrentContext() != NULL && "Missing dear imgui context. Refer to examples app!"); // Exceptionally add an extra assert here for people confused with initial dear imgui setup
-
-    // Examples Apps (accessible from the "Examples" menu)
-    static bool show_app_documents = false;
-    static bool show_app_main_menu_bar = false;
-    static bool show_app_console = false;
-    static bool show_app_log = false;
-    static bool show_app_layout = false;
-    static bool show_app_property_editor = false;
-    static bool show_app_long_text = false;
-    static bool show_app_auto_resize = false;
-    static bool show_app_constrained_resize = false;
-    static bool show_app_simple_overlay = false;
-    static bool show_app_window_titles = false;
-    static bool show_app_custom_rendering = false;
-
-    if (show_app_documents)           ShowExampleAppDocuments(&show_app_documents);
-    if (show_app_main_menu_bar)       ShowExampleAppMainMenuBar();
-    if (show_app_console)             ShowExampleAppConsole(&show_app_console);
-    if (show_app_log)                 ShowExampleAppLog(&show_app_log);
-    if (show_app_layout)              ShowExampleAppLayout(&show_app_layout);
-    if (show_app_property_editor)     ShowExampleAppPropertyEditor(&show_app_property_editor);
-    if (show_app_long_text)           ShowExampleAppLongText(&show_app_long_text);
-    if (show_app_auto_resize)         ShowExampleAppAutoResize(&show_app_auto_resize);
-    if (show_app_constrained_resize)  ShowExampleAppConstrainedResize(&show_app_constrained_resize);
-    if (show_app_simple_overlay)      ShowExampleAppSimpleOverlay(&show_app_simple_overlay);
-    if (show_app_window_titles)       ShowExampleAppWindowTitles(&show_app_window_titles);
-    if (show_app_custom_rendering)    ShowExampleAppCustomRendering(&show_app_custom_rendering);
-
-    // Dear ImGui Apps (accessible from the "Tools" menu)
-    static bool show_app_metrics = false;
-    static bool show_app_style_editor = false;
-    static bool show_app_about = false;
-
-    if (show_app_metrics)             { ImGui::ShowMetricsWindow(&show_app_metrics); }
-    if (show_app_style_editor)        { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); }
-    if (show_app_about)               { ImGui::ShowAboutWindow(&show_app_about); }
-
-    // Demonstrate the various window flags. Typically you would just use the default!
-    static bool no_titlebar = false;
-    static bool no_scrollbar = false;
-    static bool no_menu = false;
-    static bool no_move = false;
-    static bool no_resize = false;
-    static bool no_collapse = false;
-    static bool no_close = false;
-    static bool no_nav = false;
-    static bool no_background = false;
-    static bool no_bring_to_front = false;
-
-    ImGuiWindowFlags window_flags = 0;
-    if (no_titlebar)        window_flags |= ImGuiWindowFlags_NoTitleBar;
-    if (no_scrollbar)       window_flags |= ImGuiWindowFlags_NoScrollbar;
-    if (!no_menu)           window_flags |= ImGuiWindowFlags_MenuBar;
-    if (no_move)            window_flags |= ImGuiWindowFlags_NoMove;
-    if (no_resize)          window_flags |= ImGuiWindowFlags_NoResize;
-    if (no_collapse)        window_flags |= ImGuiWindowFlags_NoCollapse;
-    if (no_nav)             window_flags |= ImGuiWindowFlags_NoNav;
-    if (no_background)      window_flags |= ImGuiWindowFlags_NoBackground;
-    if (no_bring_to_front)  window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;
-    if (no_close)           p_open = NULL; // Don't pass our bool* to Begin
-
-    // We specify a default position/size in case there's no data in the .ini file. Typically this isn't required! We only do it to make the Demo applications a little more welcoming.
-    ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);
-    ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver);
-
-    // Main body of the Demo window starts here.
-    if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags))
-    {
-        // Early out if the window is collapsed, as an optimization.
-        ImGui::End();
-        return;
-    }
-
-    // Most "big" widgets share a common width settings by default.
-    //ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.65f);    // Use 2/3 of the space for widgets and 1/3 for labels (default)
-    ImGui::PushItemWidth(ImGui::GetFontSize() * -12);           // Use fixed width for labels (by passing a negative value), the rest goes to widgets. We choose a width proportional to our font size.
-
-    // Menu Bar
-    if (ImGui::BeginMenuBar())
-    {
-        if (ImGui::BeginMenu("Menu"))
-        {
-            ShowExampleMenuFile();
-            ImGui::EndMenu();
-        }
-        if (ImGui::BeginMenu("Examples"))
-        {
-            ImGui::MenuItem("Main menu bar", NULL, &show_app_main_menu_bar);
-            ImGui::MenuItem("Console", NULL, &show_app_console);
-            ImGui::MenuItem("Log", NULL, &show_app_log);
-            ImGui::MenuItem("Simple layout", NULL, &show_app_layout);
-            ImGui::MenuItem("Property editor", NULL, &show_app_property_editor);
-            ImGui::MenuItem("Long text display", NULL, &show_app_long_text);
-            ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize);
-            ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize);
-            ImGui::MenuItem("Simple overlay", NULL, &show_app_simple_overlay);
-            ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles);
-            ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering);
-            ImGui::MenuItem("Documents", NULL, &show_app_documents);
-            ImGui::EndMenu();
-        }
-        if (ImGui::BeginMenu("Tools"))
-        {
-            ImGui::MenuItem("Metrics", NULL, &show_app_metrics);
-            ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
-            ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about);
-            ImGui::EndMenu();
-        }
-        ImGui::EndMenuBar();
-    }
-
-    ImGui::Text("dear imgui says hello. (%s)", IMGUI_VERSION);
-    ImGui::Spacing();
-
-    if (ImGui::CollapsingHeader("Help"))
-    {
-        ImGui::Text("ABOUT THIS DEMO:");
-        ImGui::BulletText("Sections below are demonstrating many aspects of the library.");
-        ImGui::BulletText("The \"Examples\" menu above leads to more demo contents.");
-        ImGui::BulletText("The \"Tools\" menu above gives access to: About Box, Style Editor,\n"
-                          "and Metrics (general purpose Dear ImGui debugging tool).");
-        ImGui::Separator();
-
-        ImGui::Text("PROGRAMMER GUIDE:");
-        ImGui::BulletText("See the ShowDemoWindow() code in imgui_demo.cpp. <- you are here!");
-        ImGui::BulletText("See comments in imgui.cpp.");
-        ImGui::BulletText("See example applications in the examples/ folder.");
-        ImGui::BulletText("Read the FAQ at http://www.dearimgui.org/faq/");
-        ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableKeyboard' for keyboard controls.");
-        ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableGamepad' for gamepad controls.");
-        ImGui::Separator();
-
-        ImGui::Text("USER GUIDE:");
-        ImGui::ShowUserGuide();
-    }
-
-    if (ImGui::CollapsingHeader("Configuration"))
-    {
-        ImGuiIO& io = ImGui::GetIO();
-
-        if (ImGui::TreeNode("Configuration##2"))
-        {
-            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard);
-            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad);
-            ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details.");
-            ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos);
-            ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos.");
-            ImGui::CheckboxFlags("io.ConfigFlags: NoMouse", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouse);
-            if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) // Create a way to restore this flag otherwise we could be stuck completely!
-            {
-                if (fmodf((float)ImGui::GetTime(), 0.40f) < 0.20f)
-                {
-                    ImGui::SameLine();
-                    ImGui::Text("<<PRESS SPACE TO DISABLE>>");
-                }
-                if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space)))
-                    io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
-            }
-            ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange);
-            ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility.");
-            ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
-            ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting");
-            ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges);
-            ImGui::SameLine(); HelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback.");
-            ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
-            ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor);
-            ImGui::SameLine(); HelpMarker("Instruct Dear ImGui to render a mouse cursor for you. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something).");
-            ImGui::TreePop();
-            ImGui::Separator();
-        }
-
-        if (ImGui::TreeNode("Backend Flags"))
-        {
-            HelpMarker("Those flags are set by the back-ends (imgui_impl_xxx files) to specify their capabilities.\nHere we expose then as read-only fields to avoid breaking interactions with your back-end.");
-            ImGuiBackendFlags backend_flags = io.BackendFlags; // Make a local copy to avoid modifying actual back-end flags.
-            ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasGamepad);
-            ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasMouseCursors);
-            ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos", (unsigned int *)&backend_flags, ImGuiBackendFlags_HasSetMousePos);
-            ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int *)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset);
-            ImGui::TreePop();
-            ImGui::Separator();
-        }
-
-        if (ImGui::TreeNode("Style"))
-        {
-            HelpMarker("The same contents can be accessed in 'Tools->Style Editor' or by calling the ShowStyleEditor() function.");
-            ImGui::ShowStyleEditor();
-            ImGui::TreePop();
-            ImGui::Separator();
-        }
-
-        if (ImGui::TreeNode("Capture/Logging"))
-        {
-            ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded.");
-            HelpMarker("Try opening any of the contents below in this window and then click one of the \"Log To\" button.");
-            ImGui::LogButtons();
-            ImGui::TextWrapped("You can also call ImGui::LogText() to output directly to the log without a visual output.");
-            if (ImGui::Button("Copy \"Hello, world!\" to clipboard"))
-            {
-                ImGui::LogToClipboard();
-                ImGui::LogText("Hello, world!");
-                ImGui::LogFinish();
-            }
-            ImGui::TreePop();
-        }
-    }
-
-    if (ImGui::CollapsingHeader("Window options"))
-    {
-        ImGui::Checkbox("No titlebar", &no_titlebar); ImGui::SameLine(150);
-        ImGui::Checkbox("No scrollbar", &no_scrollbar); ImGui::SameLine(300);
-        ImGui::Checkbox("No menu", &no_menu);
-        ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150);
-        ImGui::Checkbox("No resize", &no_resize); ImGui::SameLine(300);
-        ImGui::Checkbox("No collapse", &no_collapse);
-        ImGui::Checkbox("No close", &no_close); ImGui::SameLine(150);
-        ImGui::Checkbox("No nav", &no_nav); ImGui::SameLine(300);
-        ImGui::Checkbox("No background", &no_background);
-        ImGui::Checkbox("No bring to front", &no_bring_to_front);
-    }
-
-    // All demo contents
-    ShowDemoWindowWidgets();
-    ShowDemoWindowLayout();
-    ShowDemoWindowPopups();
-    ShowDemoWindowTables();
-    ShowDemoWindowMisc();
-
-    // End of ShowDemoWindow()
-    ImGui::End();
-}
-
-static void ShowDemoWindowWidgets()
-{
-    if (!ImGui::CollapsingHeader("Widgets"))
-        return;
-
-    if (ImGui::TreeNode("Basic"))
-    {
-        static int clicked = 0;
-        if (ImGui::Button("Button"))
-            clicked++;
-        if (clicked & 1)
-        {
-            ImGui::SameLine();
-            ImGui::Text("Thanks for clicking me!");
-        }
-
-        static bool check = true;
-        ImGui::Checkbox("checkbox", &check);
-
-        static int e = 0;
-        ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
-        ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
-        ImGui::RadioButton("radio c", &e, 2);
-
-        // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
-        for (int i = 0; i < 7; i++)
-        {
-            if (i > 0)
-                ImGui::SameLine();
-            ImGui::PushID(i);
-            ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f));
-            ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.7f));
-            ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i/7.0f, 0.8f, 0.8f));
-            ImGui::Button("Click");
-            ImGui::PopStyleColor(3);
-            ImGui::PopID();
-        }
-
-        // Use AlignTextToFramePadding() to align text baseline to the baseline of framed elements (otherwise a Text+SameLine+Button sequence will have the text a little too high by default)
-        ImGui::AlignTextToFramePadding();
-        ImGui::Text("Hold to repeat:");
-        ImGui::SameLine();
-
-        // Arrow buttons with Repeater
-        static int counter = 0;
-        float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
-        ImGui::PushButtonRepeat(true);
-        if (ImGui::ArrowButton("##left", ImGuiDir_Left)) { counter--; }
-        ImGui::SameLine(0.0f, spacing);
-        if (ImGui::ArrowButton("##right", ImGuiDir_Right)) { counter++; }
-        ImGui::PopButtonRepeat();
-        ImGui::SameLine();
-        ImGui::Text("%d", counter);
-
-        ImGui::Text("Hover over me");
-        if (ImGui::IsItemHovered())
-            ImGui::SetTooltip("I am a tooltip");
-
-        ImGui::SameLine();
-        ImGui::Text("- or me");
-        if (ImGui::IsItemHovered())
-        {
-            ImGui::BeginTooltip();
-            ImGui::Text("I am a fancy tooltip");
-            static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
-            ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
-            ImGui::EndTooltip();
-        }
-
-        ImGui::Separator();
-
-        ImGui::LabelText("label", "Value");
-
-        {
-            // Using the _simplified_ one-liner Combo() api here
-            // See "Combo" section for examples of how to use the more complete BeginCombo()/EndCombo() api.
-            const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
-            static int item_current = 0;
-            ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items));
-            ImGui::SameLine(); HelpMarker("Refer to the \"Combo\" section below for an explanation of the full BeginCombo/EndCombo API, and demonstration of various flags.\n");
-        }
-
-        {
-            // To wire InputText() with std::string or any other custom string type,
-            // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
-            static char str0[128] = "Hello, world!";
-            ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
-            ImGui::SameLine(); HelpMarker("USER:\nHold SHIFT or use mouse to select text.\n" "CTRL+Left/Right to word jump.\n" "CTRL+A or double-click to select all.\n" "CTRL+X,CTRL+C,CTRL+V clipboard.\n" "CTRL+Z,CTRL+Y undo/redo.\n" "ESCAPE to revert.\n\nPROGRAMMER:\nYou can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated in imgui_demo.cpp).");
-
-            static char str1[128] = "";
-            ImGui::InputTextWithHint("input text (w/ hint)", "enter text here", str1, IM_ARRAYSIZE(str1));
-
-            static int i0 = 123;
-            ImGui::InputInt("input int", &i0);
-            ImGui::SameLine(); HelpMarker("You can apply arithmetic operators +,*,/ on numerical values.\n  e.g. [ 100 ], input \'*2\', result becomes [ 200 ]\nUse +- to subtract.\n");
-
-            static float f0 = 0.001f;
-            ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f");
-
-            static double d0 = 999999.00000001;
-            ImGui::InputDouble("input double", &d0, 0.01f, 1.0f, "%.8f");
-
-            static float f1 = 1.e10f;
-            ImGui::InputFloat("input scientific", &f1, 0.0f, 0.0f, "%e");
-            ImGui::SameLine(); HelpMarker("You can input value using the scientific notation,\n  e.g. \"1e+8\" becomes \"100000000\".\n");
-
-            static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
-            ImGui::InputFloat3("input float3", vec4a);
-        }
-
-        {
-            static int i1 = 50, i2 = 42;
-            ImGui::DragInt("drag int", &i1, 1);
-            ImGui::SameLine(); HelpMarker("Click and drag to edit value.\nHold SHIFT/ALT for faster/slower edit.\nDouble-click or CTRL+click to input value.");
-
-            ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%");
-
-            static float f1=1.00f, f2=0.0067f;
-            ImGui::DragFloat("drag float", &f1, 0.005f);
-            ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
-        }
-
-        {
-            static int i1=0;
-            ImGui::SliderInt("slider int", &i1, -1, 3);
-            ImGui::SameLine(); HelpMarker("CTRL+click to input value.");
-
-            static float f1=0.123f, f2=0.0f;
-            ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
-            ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f);
-
-            static float angle = 0.0f;
-            ImGui::SliderAngle("slider angle", &angle);
-
-            // Using the format string to display a name instead of an integer.
-            // Here we completely omit '%d' from the format string, so it'll only display a name.
-            // This technique can also be used with DragInt().
-            enum Element { Element_Fire, Element_Earth, Element_Air, Element_Water, Element_COUNT };
-            const char* element_names[Element_COUNT] = { "Fire", "Earth", "Air", "Water" };
-            static int current_element = Element_Fire;
-            const char* current_element_name = (current_element >= 0 && current_element < Element_COUNT) ? element_names[current_element] : "Unknown";
-            ImGui::SliderInt("slider enum", &current_element, 0, Element_COUNT - 1, current_element_name);
-            ImGui::SameLine(); HelpMarker("Using the format string parameter to display a name instead of the underlying integer.");
-        }
-
-        {
-            static float col1[3] = { 1.0f,0.0f,0.2f };
-            static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
-            ImGui::ColorEdit3("color 1", col1);
-            ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nClick and hold to use drag and drop.\nRight-click on the colored square to show options.\nCTRL+click on individual component to input value.\n");
-
-            ImGui::ColorEdit4("color 2", col2);
-        }
-
-        {
-            // List box
-            const char* listbox_items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
-            static int listbox_item_current = 1;
-            ImGui::ListBox("listbox\n(single select)", &listbox_item_current, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
-
-            //static int listbox_item_current2 = 2;
-            //ImGui::SetNextItemWidth(-1);
-            //ImGui::ListBox("##listbox2", &listbox_item_current2, listbox_items, IM_ARRAYSIZE(listbox_items), 4);
-        }
-
-        ImGui::TreePop();
-    }
-
-    // Testing ImGuiOnceUponAFrame helper.
-    //static ImGuiOnceUponAFrame once;
-    //for (int i = 0; i < 5; i++)
-    //    if (once)
-    //        ImGui::Text("This will be displayed only once.");
-
-    if (ImGui::TreeNode("Trees"))
-    {
-        if (ImGui::TreeNode("Basic trees"))
-        {
-            for (int i = 0; i < 5; i++)
-            {
-                // Use SetNextItemOpen() so set the default state of a node to be open.
-                // We could also use TreeNodeEx() with the ImGuiTreeNodeFlags_DefaultOpen flag to achieve the same thing!
-                if (i == 0)
-                    ImGui::SetNextItemOpen(true, ImGuiCond_Once);
-
-                if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i))
-                {
-                    ImGui::Text("blah blah");
-                    ImGui::SameLine();
-                    if (ImGui::SmallButton("button")) {}
-                    ImGui::TreePop();
-                }
-            }
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Advanced, with Selectable nodes"))
-        {
-            HelpMarker("This is a more typical looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open.");
-            static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_SpanAvailWidth;
-            static bool align_label_with_current_x_position = false;
-            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnArrow", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnArrow);
-            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnDoubleClick", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_OpenOnDoubleClick);
-            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAvailWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanAvailWidth); ImGui::SameLine(); HelpMarker("Extend hit area to all available width instead of allowing more items to be layed out after the node.");
-            ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", (unsigned int*)&base_flags, ImGuiTreeNodeFlags_SpanFullWidth);
-            ImGui::Checkbox("Align label with current X position", &align_label_with_current_x_position);
-            ImGui::Text("Hello!");
-            if (align_label_with_current_x_position)
-                ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing());
-
-            static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit.
-            int node_clicked = -1;                // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc.
-            for (int i = 0; i < 6; i++)
-            {
-                // Disable the default open on single-click behavior and pass in Selected flag according to our selection state.
-                ImGuiTreeNodeFlags node_flags = base_flags;
-                const bool is_selected = (selection_mask & (1 << i)) != 0;
-                if (is_selected)
-                    node_flags |= ImGuiTreeNodeFlags_Selected;
-                if (i < 3)
-                {
-                    // Items 0..2 are Tree Node
-                    bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i);
-                    if (ImGui::IsItemClicked())
-                        node_clicked = i;
-                    if (node_open)
-                    {
-                        ImGui::BulletText("Blah blah\nBlah Blah");
-                        ImGui::TreePop();
-                    }
-                }
-                else
-                {
-                    // Items 3..5 are Tree Leaves
-                    // The only reason we use TreeNode at all is to allow selection of the leaf.
-                    // Otherwise we can use BulletText() or advance the cursor by GetTreeNodeToLabelSpacing() and call Text().
-                    node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet
-                    ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i);
-                    if (ImGui::IsItemClicked())
-                        node_clicked = i;
-                }
-            }
-            if (node_clicked != -1)
-            {
-                // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame.
-                if (ImGui::GetIO().KeyCtrl)
-                    selection_mask ^= (1 << node_clicked);          // CTRL+click to toggle
-                else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection
-                    selection_mask = (1 << node_clicked);           // Click to single-select
-            }
-            if (align_label_with_current_x_position)
-                ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing());
-            ImGui::TreePop();
-        }
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Collapsing Headers"))
-    {
-        static bool closable_group = true;
-        ImGui::Checkbox("Show 2nd header", &closable_group);
-        if (ImGui::CollapsingHeader("Header", ImGuiTreeNodeFlags_None))
-        {
-            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
-            for (int i = 0; i < 5; i++)
-                ImGui::Text("Some content %d", i);
-        }
-        if (ImGui::CollapsingHeader("Header with a close button", &closable_group))
-        {
-            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
-            for (int i = 0; i < 5; i++)
-                ImGui::Text("More content %d", i);
-        }
-        /*
-        if (ImGui::CollapsingHeader("Header with a bullet", ImGuiTreeNodeFlags_Bullet))
-            ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
-        */
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Bullets"))
-    {
-        ImGui::BulletText("Bullet point 1");
-        ImGui::BulletText("Bullet point 2\nOn multiple lines");
-        if (ImGui::TreeNode("Tree node"))
-        {
-            ImGui::BulletText("Another bullet point");
-            ImGui::TreePop();
-        }
-        ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)");
-        ImGui::Bullet(); ImGui::SmallButton("Button");
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Text"))
-    {
-        if (ImGui::TreeNode("Colored Text"))
-        {
-            // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
-            ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink");
-            ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow");
-            ImGui::TextDisabled("Disabled");
-            ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle.");
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Word Wrapping"))
-        {
-            // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility.
-            ImGui::TextWrapped("This text should automatically wrap on the edge of the window. The current implementation for text wrapping follows simple rules suitable for English and possibly other languages.");
-            ImGui::Spacing();
-
-            static float wrap_width = 200.0f;
-            ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f");
-
-            ImGui::Text("Test paragraph 1:");
-            ImVec2 pos = ImGui::GetCursorScreenPos();
-            ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
-            ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
-            ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
-            ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
-            ImGui::PopTextWrapPos();
-
-            ImGui::Text("Test paragraph 2:");
-            pos = ImGui::GetCursorScreenPos();
-            ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
-            ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
-            ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee   ffffffff. gggggggg!hhhhhhhh");
-            ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
-            ImGui::PopTextWrapPos();
-
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("UTF-8 Text"))
-        {
-            // UTF-8 test with Japanese characters
-            // (Needs a suitable font, try Noto, or Arial Unicode, or M+ fonts. Read docs/FONTS.txt for details.)
-            // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8
-            // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. Visual Studio save your file as 'UTF-8 without signature')
-            // - FOR THIS DEMO FILE ONLY, BECAUSE WE WANT TO SUPPORT OLD COMPILERS, WE ARE *NOT* INCLUDING RAW UTF-8 CHARACTERS IN THIS SOURCE FILE.
-            //   Instead we are encoding a few strings with hexadecimal constants. Don't do this in your application!
-            //   Please use u8"text in any language" in your application!
-            // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application.
-            ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->AddFontFromFileTTF() manually to load extra character ranges. Read docs/FONTS.txt for details.");
-            ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string.
-            ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
-            static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
-            //static char buf[32] = u8"NIHONGO"; // <- this is how you would write it with C++11, using real kanjis
-            ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
-            ImGui::TreePop();
-        }
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Images"))
-    {
-        ImGuiIO& io = ImGui::GetIO();
-        ImGui::TextWrapped("Below we are displaying the font texture (which is the only texture we have access to in this demo). Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. Hover the texture for a zoomed view!");
-
-        // Here we are grabbing the font texture because that's the only one we have access to inside the demo code.
-        // Remember that ImTextureID is just storage for whatever you want it to be, it is essentially a value that will be passed to the render function inside the ImDrawCmd structure.
-        // If you use one of the default imgui_impl_XXXX.cpp renderer, they all have comments at the top of their file to specify what they expect to be stored in ImTextureID.
-        // (for example, the imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer. The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier etc.)
-        // If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers to ImGui::Image(), and gather width/height through your own functions, etc.
-        // Using ShowMetricsWindow() as a "debugger" to inspect the draw data that are being passed to your render will help you debug issues if you are confused about this.
-        // Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage().
-        ImTextureID my_tex_id = io.Fonts->TexID;
-        float my_tex_w = (float)io.Fonts->TexWidth;
-        float my_tex_h = (float)io.Fonts->TexHeight;
-
-        ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h);
-        ImVec2 pos = ImGui::GetCursorScreenPos();
-        ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), ImVec2(0,0), ImVec2(1,1), ImVec4(1.0f,1.0f,1.0f,1.0f), ImVec4(1.0f,1.0f,1.0f,0.5f));
-        if (ImGui::IsItemHovered())
-        {
-            ImGui::BeginTooltip();
-            float region_sz = 32.0f;
-            float region_x = io.MousePos.x - pos.x - region_sz * 0.5f; if (region_x < 0.0f) region_x = 0.0f; else if (region_x > my_tex_w - region_sz) region_x = my_tex_w - region_sz;
-            float region_y = io.MousePos.y - pos.y - region_sz * 0.5f; if (region_y < 0.0f) region_y = 0.0f; else if (region_y > my_tex_h - region_sz) region_y = my_tex_h - region_sz;
-            float zoom = 4.0f;
-            ImGui::Text("Min: (%.2f, %.2f)", region_x, region_y);
-            ImGui::Text("Max: (%.2f, %.2f)", region_x + region_sz, region_y + region_sz);
-            ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
-            ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
-            ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f));
-            ImGui::EndTooltip();
-        }
-        ImGui::TextWrapped("And now some textured buttons..");
-        static int pressed_count = 0;
-        for (int i = 0; i < 8; i++)
-        {
-            ImGui::PushID(i);
-            int frame_padding = -1 + i;     // -1 = uses default padding
-            if (ImGui::ImageButton(my_tex_id, ImVec2(32,32), ImVec2(0,0), ImVec2(32.0f/my_tex_w,32/my_tex_h), frame_padding, ImVec4(0.0f,0.0f,0.0f,1.0f)))
-                pressed_count += 1;
-            ImGui::PopID();
-            ImGui::SameLine();
-        }
-        ImGui::NewLine();
-        ImGui::Text("Pressed %d times.", pressed_count);
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Combo"))
-    {
-        // Expose flags as checkbox for the demo
-        static ImGuiComboFlags flags = 0;
-        ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", (unsigned int*)&flags, ImGuiComboFlags_PopupAlignLeft);
-        ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
-        if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", (unsigned int*)&flags, ImGuiComboFlags_NoArrowButton))
-            flags &= ~ImGuiComboFlags_NoPreview;     // Clear the other flag, as we cannot combine both
-        if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", (unsigned int*)&flags, ImGuiComboFlags_NoPreview))
-            flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both
-
-        // General BeginCombo() API, you have full control over your selection data and display type.
-        // (your selection data could be an index, a pointer to the object, an id for the object, a flag stored in the object itself, etc.)
-        const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
-        static const char* item_current = items[0];            // Here our selection is a single pointer stored outside the object.
-        if (ImGui::BeginCombo("combo 1", item_current, flags)) // The second parameter is the label previewed before opening the combo.
-        {
-            for (int n = 0; n < IM_ARRAYSIZE(items); n++)
-            {
-                bool is_selected = (item_current == items[n]);
-                if (ImGui::Selectable(items[n], is_selected))
-                    item_current = items[n];
-                if (is_selected)
-                    ImGui::SetItemDefaultFocus();   // Set the initial focus when opening the combo (scrolling + for keyboard navigation support in the upcoming navigation branch)
-            }
-            ImGui::EndCombo();
-        }
-
-        // Simplified one-liner Combo() API, using values packed in a single constant string
-        static int item_current_2 = 0;
-        ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
-
-        // Simplified one-liner Combo() using an array of const char*
-        static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview
-        ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items));
-
-        // Simplified one-liner Combo() using an accessor function
-        struct FuncHolder { static bool ItemGetter(void* data, int idx, const char** out_str) { *out_str = ((const char**)data)[idx]; return true; } };
-        static int item_current_4 = 0;
-        ImGui::Combo("combo 4 (function)", &item_current_4, &FuncHolder::ItemGetter, items, IM_ARRAYSIZE(items));
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Selectables"))
-    {
-        // Selectable() has 2 overloads:
-        // - The one taking "bool selected" as a read-only selection information. When Selectable() has been clicked is returns true and you can alter selection state accordingly.
-        // - The one taking "bool* p_selected" as a read-write selection information (convenient in some cases)
-        // The earlier is more flexible, as in real application your selection may be stored in a different manner (in flags within objects, as an external list, etc).
-        if (ImGui::TreeNode("Basic"))
-        {
-            static bool selection[5] = { false, true, false, false, false };
-            ImGui::Selectable("1. I am selectable", &selection[0]);
-            ImGui::Selectable("2. I am selectable", &selection[1]);
-            ImGui::Text("3. I am not selectable");
-            ImGui::Selectable("4. I am selectable", &selection[3]);
-            if (ImGui::Selectable("5. I am double clickable", selection[4], ImGuiSelectableFlags_AllowDoubleClick))
-                if (ImGui::IsMouseDoubleClicked(0))
-                    selection[4] = !selection[4];
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("Selection State: Single Selection"))
-        {
-            static int selected = -1;
-            for (int n = 0; n < 5; n++)
-            {
-                char buf[32];
-                sprintf(buf, "Object %d", n);
-                if (ImGui::Selectable(buf, selected == n))
-                    selected = n;
-            }
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("Selection State: Multiple Selection"))
-        {
-            HelpMarker("Hold CTRL and click to select multiple items.");
-            static bool selection[5] = { false, false, false, false, false };
-            for (int n = 0; n < 5; n++)
-            {
-                char buf[32];
-                sprintf(buf, "Object %d", n);
-                if (ImGui::Selectable(buf, selection[n]))
-                {
-                    if (!ImGui::GetIO().KeyCtrl)    // Clear selection when CTRL is not held
-                        memset(selection, 0, sizeof(selection));
-                    selection[n] ^= 1;
-                }
-            }
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("Rendering more text into the same line"))
-        {
-            // Using the Selectable() override that takes "bool* p_selected" parameter and toggle your booleans automatically.
-            static bool selected[3] = { false, false, false };
-            ImGui::Selectable("main.c",    &selected[0]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
-            ImGui::Selectable("Hello.cpp", &selected[1]); ImGui::SameLine(300); ImGui::Text("12,345 bytes");
-            ImGui::Selectable("Hello.h",   &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("In columns"))
-        {
-            ImGui::Columns(3, NULL, false);
-            static bool selected[16] = {};
-            for (int i = 0; i < 16; i++)
-            {
-                char label[32]; sprintf(label, "Item %d", i);
-                if (ImGui::Selectable(label, &selected[i])) {}
-                ImGui::NextColumn();
-            }
-            ImGui::Columns(1);
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("Grid"))
-        {
-            static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true };
-            for (int i = 0; i < 4*4; i++)
-            {
-                ImGui::PushID(i);
-                if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50)))
-                {
-                    // Note: We _unnecessarily_ test for both x/y and i here only to silence some static analyzer. The second part of each test is unnecessary.
-                    int x = i % 4;
-                    int y = i / 4;
-                    if (x > 0)           { selected[i - 1] ^= 1; }
-                    if (x < 3 && i < 15) { selected[i + 1] ^= 1; }
-                    if (y > 0 && i > 3)  { selected[i - 4] ^= 1; }
-                    if (y < 3 && i < 12) { selected[i + 4] ^= 1; }
-                }
-                if ((i % 4) < 3) ImGui::SameLine();
-                ImGui::PopID();
-            }
-            ImGui::TreePop();
-        }
-        if (ImGui::TreeNode("Alignment"))
-        {
-            HelpMarker("By default, Selectables uses style.SelectableTextAlign but it can be overriden on a per-item basis using PushStyleVar(). You'll probably want to always keep your default situation to left-align otherwise it becomes difficult to layout multiple items on a same line");
-            static bool selected[3*3] = { true, false, true, false, true, false, true, false, true };
-            for (int y = 0; y < 3; y++)
-            {
-                for (int x = 0; x < 3; x++)
-                {
-                    ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f);
-                    char name[32];
-                    sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y);
-                    if (x > 0) ImGui::SameLine();
-                    ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
-                    ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80));
-                    ImGui::PopStyleVar();
-                }
-            }
-            ImGui::TreePop();
-        }
-        ImGui::TreePop();
-    }
-
-    // To wire InputText() with std::string or any other custom string type,
-    // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
-    if (ImGui::TreeNode("Text Input"))
-    {
-        if (ImGui::TreeNode("Multi-line Text Input"))
-        {
-            // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize
-            // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings.
-            static char text[1024 * 16] =
-                "/*\n"
-                " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n"
-                " the hexadecimal encoding of one offending instruction,\n"
-                " more formally, the invalid operand with locked CMPXCHG8B\n"
-                " instruction bug, is a design flaw in the majority of\n"
-                " Intel Pentium, Pentium MMX, and Pentium OverDrive\n"
-                " processors (all in the P5 microarchitecture).\n"
-                "*/\n\n"
-                "label:\n"
-                "\tlock cmpxchg8b eax\n";
-
-            static ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput;
-            HelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp because we don't want to include <string> in here)");
-            ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", (unsigned int*)&flags, ImGuiInputTextFlags_ReadOnly);
-            ImGui::CheckboxFlags("ImGuiInputTextFlags_AllowTabInput", (unsigned int*)&flags, ImGuiInputTextFlags_AllowTabInput);
-            ImGui::CheckboxFlags("ImGuiInputTextFlags_CtrlEnterForNewLine", (unsigned int*)&flags, ImGuiInputTextFlags_CtrlEnterForNewLine);
-            ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16), flags);
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Filtered Text Input"))
-        {
-            static char buf1[64] = ""; ImGui::InputText("default", buf1, 64);
-            static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
-            static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
-            static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
-            static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
-            struct TextFilters { static int FilterImGuiLetters(ImGuiInputTextCallbackData* data) { if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar)) return 0; return 1; } };
-            static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
-
-            ImGui::Text("Password input");
-            static char password[64] = "password123";
-            ImGui::InputText("password", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
-            ImGui::SameLine(); HelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n");
-            ImGui::InputTextWithHint("password (w/ hint)", "<password>", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
-            ImGui::InputText("password (clear)", password, IM_ARRAYSIZE(password));
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Resize Callback"))
-        {
-            // To wire InputText() with std::string or any other custom string type,
-            // you can use the ImGuiInputTextFlags_CallbackResize flag + create a custom ImGui::InputText() wrapper using your prefered type.
-            // See misc/cpp/imgui_stdlib.h for an implementation of this using std::string.
-            HelpMarker("Demonstrate using ImGuiInputTextFlags_CallbackResize to wire your resizable string type to InputText().\n\nSee misc/cpp/imgui_stdlib.h for an implementation of this for std::string.");
-            struct Funcs
-            {
-                static int MyResizeCallback(ImGuiInputTextCallbackData* data)
-                {
-                    if (data->EventFlag == ImGuiInputTextFlags_CallbackResize)
-                    {
-                        ImVector<char>* my_str = (ImVector<char>*)data->UserData;
-                        IM_ASSERT(my_str->begin() == data->Buf);
-                        my_str->resize(data->BufSize);  // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1
-                        data->Buf = my_str->begin();
-                    }
-                    return 0;
-                }
-
-                // Tip: Because ImGui:: is a namespace you would typicall add your own function into the namespace in your own source files.
-                // For example, you may add a function called ImGui::InputText(const char* label, MyString* my_str).
-                static bool MyInputTextMultiline(const char* label, ImVector<char>* my_str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0)
-                {
-                    IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
-                    return ImGui::InputTextMultiline(label, my_str->begin(), (size_t)my_str->size(), size, flags | ImGuiInputTextFlags_CallbackResize, Funcs::MyResizeCallback, (void*)my_str);
-                }
-            };
-
-            // For this demo we are using ImVector as a string container.
-            // Note that because we need to store a terminating zero character, our size/capacity are 1 more than usually reported by a typical string class.
-            static ImVector<char> my_str;
-            if (my_str.empty())
-                my_str.push_back(0);
-            Funcs::MyInputTextMultiline("##MyStr", &my_str, ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16));
-            ImGui::Text("Data: %p\nSize: %d\nCapacity: %d", (void*)my_str.begin(), my_str.size(), my_str.capacity());
-            ImGui::TreePop();
-        }
-
-        ImGui::TreePop();
-    }
-
-    // Plot/Graph widgets are currently fairly limited.
-    // Consider writing your own plotting widget, or using a third-party one (see "Wiki->Useful Widgets", or github.com/ocornut/imgui/issues/2747)
-    if (ImGui::TreeNode("Plots Widgets"))
-    {
-        static bool animate = true;
-        ImGui::Checkbox("Animate", &animate);
-
-        static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
-        ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
-
-        // Create a dummy array of contiguous float values to plot
-        // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float and the sizeof() of your structure in the Stride parameter.
-        static float values[90] = {};
-        static int values_offset = 0;
-        static double refresh_time = 0.0;
-        if (!animate || refresh_time == 0.0)
-            refresh_time = ImGui::GetTime();
-        while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo
-        {
-            static float phase = 0.0f;
-            values[values_offset] = cosf(phase);
-            values_offset = (values_offset+1) % IM_ARRAYSIZE(values);
-            phase += 0.10f*values_offset;
-            refresh_time += 1.0f/60.0f;
-        }
-
-        // Plots can display overlay texts
-        // (in this example, we will display an average value)
-        {
-            float average = 0.0f;
-            for (int n = 0; n < IM_ARRAYSIZE(values); n++)
-                average += values[n];
-            average /= (float)IM_ARRAYSIZE(values);
-            char overlay[32];
-            sprintf(overlay, "avg %f", average);
-            ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, overlay, -1.0f, 1.0f, ImVec2(0,80));
-        }
-        ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0,80));
-
-        // Use functions to generate output
-        // FIXME: This is rather awkward because current plot API only pass in indices. We probably want an API passing floats and user provide sample rate/count.
-        struct Funcs
-        {
-            static float Sin(void*, int i) { return sinf(i * 0.1f); }
-            static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
-        };
-        static int func_type = 0, display_count = 70;
-        ImGui::Separator();
-        ImGui::SetNextItemWidth(100);
-        ImGui::Combo("func", &func_type, "Sin\0Saw\0");
-        ImGui::SameLine();
-        ImGui::SliderInt("Sample count", &display_count, 1, 400);
-        float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
-        ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
-        ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80));
-        ImGui::Separator();
-
-        // Animate a simple progress bar
-        static float progress = 0.0f, progress_dir = 1.0f;
-        if (animate)
-        {
-            progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
-            if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
-            if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
-        }
-
-        // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width,
-        // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
-        ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f));
-        ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
-        ImGui::Text("Progress Bar");
-
-        float progress_saturated = (progress < 0.0f) ? 0.0f : (progress > 1.0f) ? 1.0f : progress;
-        char buf[32];
-        sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753);
-        ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf);
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Color/Picker Widgets"))
-    {
-        static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f);
-
-        static bool alpha_preview = true;
-        static bool alpha_half_preview = false;
-        static bool drag_and_drop = true;
-        static bool options_menu = true;
-        static bool hdr = false;
-        ImGui::Checkbox("With Alpha Preview", &alpha_preview);
-        ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview);
-        ImGui::Checkbox("With Drag and Drop", &drag_and_drop);
-        ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); HelpMarker("Right-click on the individual color widget to show options.");
-        ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); HelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
-        ImGuiColorEditFlags misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
-
-        ImGui::Text("Color widget:");
-        ImGui::SameLine(); HelpMarker("Click on the colored square to open a color picker.\nCTRL+click on individual component to input value.\n");
-        ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags);
-
-        ImGui::Text("Color widget HSV with Alpha:");
-        ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags);
-
-        ImGui::Text("Color widget with Float Display:");
-        ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags);
-
-        ImGui::Text("Color button with Picker:");
-        ImGui::SameLine(); HelpMarker("With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\nWith the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only be used for the tooltip and picker popup.");
-        ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags);
-
-        ImGui::Text("Color button with Custom Picker Popup:");
-
-        // Generate a dummy default palette. The palette will persist and can be edited.
-        static bool saved_palette_init = true;
-        static ImVec4 saved_palette[32] = {};
-        if (saved_palette_init)
-        {
-            for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
-            {
-                ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f, saved_palette[n].x, saved_palette[n].y, saved_palette[n].z);
-                saved_palette[n].w = 1.0f; // Alpha
-            }
-            saved_palette_init = false;
-        }
-
-        static ImVec4 backup_color;
-        bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags);
-        ImGui::SameLine(0, ImGui::GetStyle().ItemInnerSpacing.x);
-        open_popup |= ImGui::Button("Palette");
-        if (open_popup)
-        {
-            ImGui::OpenPopup("mypicker");
-            backup_color = color;
-        }
-        if (ImGui::BeginPopup("mypicker"))
-        {
-            ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!");
-            ImGui::Separator();
-            ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview);
-            ImGui::SameLine();
-
-            ImGui::BeginGroup(); // Lock X position
-            ImGui::Text("Current");
-            ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40));
-            ImGui::Text("Previous");
-            if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40)))
-                color = backup_color;
-            ImGui::Separator();
-            ImGui::Text("Palette");
-            for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
-            {
-                ImGui::PushID(n);
-                if ((n % 8) != 0)
-                    ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
-                if (ImGui::ColorButton("##palette", saved_palette[n], ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip, ImVec2(20,20)))
-                    color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha!
-
-                // Allow user to drop colors into each palette entry
-                // (Note that ColorButton is already a drag source by default, unless using ImGuiColorEditFlags_NoDragDrop)
-                if (ImGui::BeginDragDropTarget())
-                {
-                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
-                        memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3);
-                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
-                        memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4);
-                    ImGui::EndDragDropTarget();
-                }
-
-                ImGui::PopID();
-            }
-            ImGui::EndGroup();
-            ImGui::EndPopup();
-        }
-
-        ImGui::Text("Color button only:");
-        static bool no_border = false;
-        ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border);
-        ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80,80));
-
-        ImGui::Text("Color picker:");
-        static bool alpha = true;
-        static bool alpha_bar = true;
-        static bool side_preview = true;
-        static bool ref_color = false;
-        static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f);
-        static int display_mode = 0;
-        static int picker_mode = 0;
-        ImGui::Checkbox("With Alpha", &alpha);
-        ImGui::Checkbox("With Alpha Bar", &alpha_bar);
-        ImGui::Checkbox("With Side Preview", &side_preview);
-        if (side_preview)
-        {
-            ImGui::SameLine();
-            ImGui::Checkbox("With Ref Color", &ref_color);
-            if (ref_color)
-            {
-                ImGui::SameLine();
-                ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags);
-            }
-        }
-        ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0");
-        ImGui::SameLine(); HelpMarker("ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, but the user can change it with a right-click.\n\nColorPicker defaults to displaying RGB+HSV+Hex if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions().");
-        ImGui::Combo("Picker Mode", &picker_mode, "Auto/Current\0Hue bar + SV rect\0Hue wheel + SV triangle\0");
-        ImGui::SameLine(); HelpMarker("User can right-click the picker to change mode.");
-        ImGuiColorEditFlags flags = misc_flags;
-        if (!alpha)            flags |= ImGuiColorEditFlags_NoAlpha;        // This is by default if you call ColorPicker3() instead of ColorPicker4()
-        if (alpha_bar)         flags |= ImGuiColorEditFlags_AlphaBar;
-        if (!side_preview)     flags |= ImGuiColorEditFlags_NoSidePreview;
-        if (picker_mode == 1)  flags |= ImGuiColorEditFlags_PickerHueBar;
-        if (picker_mode == 2)  flags |= ImGuiColorEditFlags_PickerHueWheel;
-        if (display_mode == 1) flags |= ImGuiColorEditFlags_NoInputs;       // Disable all RGB/HSV/Hex displays
-        if (display_mode == 2) flags |= ImGuiColorEditFlags_DisplayRGB;     // Override display mode
-        if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV;
-        if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex;
-        ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL);
-
-        ImGui::Text("Programmatically set defaults:");
-        ImGui::SameLine(); HelpMarker("SetColorEditOptions() is designed to allow you to set boot-time default.\nWe don't have Push/Pop functions because you can force options on a per-widget basis if needed, and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid encouraging you to persistently save values that aren't forward-compatible.");
-        if (ImGui::Button("Default: Uint8 + HSV + Hue Bar"))
-            ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar);
-        if (ImGui::Button("Default: Float + HDR + Hue Wheel"))
-            ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel);
-
-        // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0)
-        static ImVec4 color_stored_as_hsv(0.23f, 1.0f, 1.0f, 1.0f);
-        ImGui::Spacing();
-        ImGui::Text("HSV encoded colors");
-        ImGui::SameLine(); HelpMarker("By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the added benefit that you can manipulate hue values with the picker even when saturation or value are zero.");
-        ImGui::Text("Color widget with InputHSV:");
-        ImGui::ColorEdit4("HSV shown as RGB##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
-        ImGui::ColorEdit4("HSV shown as HSV##1", (float*)&color_stored_as_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
-        ImGui::DragFloat4("Raw HSV values", (float*)&color_stored_as_hsv, 0.01f, 0.0f, 1.0f);
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Range Widgets"))
-    {
-        static float begin = 10, end = 90;
-        static int begin_i = 100, end_i = 1000;
-        ImGui::DragFloatRange2("range", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%");
-        ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %d units", "Max: %d units");
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Data Types"))
-    {
-        // The DragScalar/InputScalar/SliderScalar functions allow various data types: signed/unsigned int/long long and float/double
-        // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum to pass the type,
-        // and passing all arguments by address.
-        // This is the reason the test code below creates local variables to hold "zero" "one" etc. for each types.
-        // In practice, if you frequently use a given type that is not covered by the normal API entry points, you can wrap it
-        // yourself inside a 1 line function which can take typed argument as value instead of void*, and then pass their address
-        // to the generic function. For example:
-        //   bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld")
-        //   {
-        //      return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format);
-        //   }
-
-        // Limits (as helper variables that we can take the address of)
-        // Note that the SliderScalar function has a maximum usable range of half the natural type maximum, hence the /2 below.
-        #ifndef LLONG_MIN
-        ImS64 LLONG_MIN = -9223372036854775807LL - 1;
-        ImS64 LLONG_MAX = 9223372036854775807LL;
-        ImU64 ULLONG_MAX = (2ULL * 9223372036854775807LL + 1);
-        #endif
-        const char    s8_zero  = 0,   s8_one  = 1,   s8_fifty  = 50, s8_min  = -128,        s8_max = 127;
-        const ImU8    u8_zero  = 0,   u8_one  = 1,   u8_fifty  = 50, u8_min  = 0,           u8_max = 255;
-        const short   s16_zero = 0,   s16_one = 1,   s16_fifty = 50, s16_min = -32768,      s16_max = 32767;
-        const ImU16   u16_zero = 0,   u16_one = 1,   u16_fifty = 50, u16_min = 0,           u16_max = 65535;
-        const ImS32   s32_zero = 0,   s32_one = 1,   s32_fifty = 50, s32_min = INT_MIN/2,   s32_max = INT_MAX/2,    s32_hi_a = INT_MAX/2 - 100,    s32_hi_b = INT_MAX/2;
-        const ImU32   u32_zero = 0,   u32_one = 1,   u32_fifty = 50, u32_min = 0,           u32_max = UINT_MAX/2,   u32_hi_a = UINT_MAX/2 - 100,   u32_hi_b = UINT_MAX/2;
-        const ImS64   s64_zero = 0,   s64_one = 1,   s64_fifty = 50, s64_min = LLONG_MIN/2, s64_max = LLONG_MAX/2,  s64_hi_a = LLONG_MAX/2 - 100,  s64_hi_b = LLONG_MAX/2;
-        const ImU64   u64_zero = 0,   u64_one = 1,   u64_fifty = 50, u64_min = 0,           u64_max = ULLONG_MAX/2, u64_hi_a = ULLONG_MAX/2 - 100, u64_hi_b = ULLONG_MAX/2;
-        const float   f32_zero = 0.f, f32_one = 1.f, f32_lo_a = -10000000000.0f, f32_hi_a = +10000000000.0f;
-        const double  f64_zero = 0.,  f64_one = 1.,  f64_lo_a = -1000000000000000.0, f64_hi_a = +1000000000000000.0;
-
-        // State
-        static char   s8_v  = 127;
-        static ImU8   u8_v  = 255;
-        static short  s16_v = 32767;
-        static ImU16  u16_v = 65535;
-        static ImS32  s32_v = -1;
-        static ImU32  u32_v = (ImU32)-1;
-        static ImS64  s64_v = -1;
-        static ImU64  u64_v = (ImU64)-1;
-        static float  f32_v = 0.123f;
-        static double f64_v = 90000.01234567890123456789;
-
-        const float drag_speed = 0.2f;
-        static bool drag_clamp = false;
-        ImGui::Text("Drags:");
-        ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp); ImGui::SameLine(); HelpMarker("As with every widgets in dear imgui, we never modify values unless there is a user interaction.\nYou can override the clamping limits by using CTRL+Click to input a value.");
-        ImGui::DragScalar("drag s8",        ImGuiDataType_S8,     &s8_v,  drag_speed, drag_clamp ? &s8_zero  : NULL, drag_clamp ? &s8_fifty  : NULL);
-        ImGui::DragScalar("drag u8",        ImGuiDataType_U8,     &u8_v,  drag_speed, drag_clamp ? &u8_zero  : NULL, drag_clamp ? &u8_fifty  : NULL, "%u ms");
-        ImGui::DragScalar("drag s16",       ImGuiDataType_S16,    &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL);
-        ImGui::DragScalar("drag u16",       ImGuiDataType_U16,    &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms");
-        ImGui::DragScalar("drag s32",       ImGuiDataType_S32,    &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL);
-        ImGui::DragScalar("drag u32",       ImGuiDataType_U32,    &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms");
-        ImGui::DragScalar("drag s64",       ImGuiDataType_S64,    &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL);
-        ImGui::DragScalar("drag u64",       ImGuiDataType_U64,    &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL);
-        ImGui::DragScalar("drag float",     ImGuiDataType_Float,  &f32_v, 0.005f,  &f32_zero, &f32_one, "%f", 1.0f);
-        ImGui::DragScalar("drag float ^2",  ImGuiDataType_Float,  &f32_v, 0.005f,  &f32_zero, &f32_one, "%f", 2.0f); ImGui::SameLine(); HelpMarker("You can use the 'power' parameter to increase tweaking precision on one side of the range.");
-        ImGui::DragScalar("drag double",    ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, NULL,     "%.10f grams", 1.0f);
-        ImGui::DragScalar("drag double ^2", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, &f64_one, "0 < %.10f < 1", 2.0f);
-
-        ImGui::Text("Sliders");
-        ImGui::SliderScalar("slider s8 full",     ImGuiDataType_S8,     &s8_v,  &s8_min,   &s8_max,   "%d");
-        ImGui::SliderScalar("slider u8 full",     ImGuiDataType_U8,     &u8_v,  &u8_min,   &u8_max,   "%u");
-        ImGui::SliderScalar("slider s16 full",    ImGuiDataType_S16,    &s16_v, &s16_min,  &s16_max,  "%d");
-        ImGui::SliderScalar("slider u16 full",    ImGuiDataType_U16,    &u16_v, &u16_min,  &u16_max,  "%u");
-        ImGui::SliderScalar("slider s32 low",     ImGuiDataType_S32,    &s32_v, &s32_zero, &s32_fifty,"%d");
-        ImGui::SliderScalar("slider s32 high",    ImGuiDataType_S32,    &s32_v, &s32_hi_a, &s32_hi_b, "%d");
-        ImGui::SliderScalar("slider s32 full",    ImGuiDataType_S32,    &s32_v, &s32_min,  &s32_max,  "%d");
-        ImGui::SliderScalar("slider u32 low",     ImGuiDataType_U32,    &u32_v, &u32_zero, &u32_fifty,"%u");
-        ImGui::SliderScalar("slider u32 high",    ImGuiDataType_U32,    &u32_v, &u32_hi_a, &u32_hi_b, "%u");
-        ImGui::SliderScalar("slider u32 full",    ImGuiDataType_U32,    &u32_v, &u32_min,  &u32_max,  "%u");
-        ImGui::SliderScalar("slider s64 low",     ImGuiDataType_S64,    &s64_v, &s64_zero, &s64_fifty,"%I64d");
-        ImGui::SliderScalar("slider s64 high",    ImGuiDataType_S64,    &s64_v, &s64_hi_a, &s64_hi_b, "%I64d");
-        ImGui::SliderScalar("slider s64 full",    ImGuiDataType_S64,    &s64_v, &s64_min,  &s64_max,  "%I64d");
-        ImGui::SliderScalar("slider u64 low",     ImGuiDataType_U64,    &u64_v, &u64_zero, &u64_fifty,"%I64u ms");
-        ImGui::SliderScalar("slider u64 high",    ImGuiDataType_U64,    &u64_v, &u64_hi_a, &u64_hi_b, "%I64u ms");
-        ImGui::SliderScalar("slider u64 full",    ImGuiDataType_U64,    &u64_v, &u64_min,  &u64_max,  "%I64u ms");
-        ImGui::SliderScalar("slider float low",   ImGuiDataType_Float,  &f32_v, &f32_zero, &f32_one);
-        ImGui::SliderScalar("slider float low^2", ImGuiDataType_Float,  &f32_v, &f32_zero, &f32_one,  "%.10f", 2.0f);
-        ImGui::SliderScalar("slider float high",  ImGuiDataType_Float,  &f32_v, &f32_lo_a, &f32_hi_a, "%e");
-        ImGui::SliderScalar("slider double low",  ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one,  "%.10f grams", 1.0f);
-        ImGui::SliderScalar("slider double low^2",ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one,  "%.10f", 2.0f);
-        ImGui::SliderScalar("slider double high", ImGuiDataType_Double, &f64_v, &f64_lo_a, &f64_hi_a, "%e grams", 1.0f);
-
-        static bool inputs_step = true;
-        ImGui::Text("Inputs");
-        ImGui::Checkbox("Show step buttons", &inputs_step);
-        ImGui::InputScalar("input s8",      ImGuiDataType_S8,     &s8_v,  inputs_step ? &s8_one  : NULL, NULL, "%d");
-        ImGui::InputScalar("input u8",      ImGuiDataType_U8,     &u8_v,  inputs_step ? &u8_one  : NULL, NULL, "%u");
-        ImGui::InputScalar("input s16",     ImGuiDataType_S16,    &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d");
-        ImGui::InputScalar("input u16",     ImGuiDataType_U16,    &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u");
-        ImGui::InputScalar("input s32",     ImGuiDataType_S32,    &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d");
-        ImGui::InputScalar("input s32 hex", ImGuiDataType_S32,    &s32_v, inputs_step ? &s32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal);
-        ImGui::InputScalar("input u32",     ImGuiDataType_U32,    &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u");
-        ImGui::InputScalar("input u32 hex", ImGuiDataType_U32,    &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X", ImGuiInputTextFlags_CharsHexadecimal);
-        ImGui::InputScalar("input s64",     ImGuiDataType_S64,    &s64_v, inputs_step ? &s64_one : NULL);
-        ImGui::InputScalar("input u64",     ImGuiDataType_U64,    &u64_v, inputs_step ? &u64_one : NULL);
-        ImGui::InputScalar("input float",   ImGuiDataType_Float,  &f32_v, inputs_step ? &f32_one : NULL);
-        ImGui::InputScalar("input double",  ImGuiDataType_Double, &f64_v, inputs_step ? &f64_one : NULL);
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Multi-component Widgets"))
-    {
-        static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
-        static int vec4i[4] = { 1, 5, 100, 255 };
-
-        ImGui::InputFloat2("input float2", vec4f);
-        ImGui::DragFloat2("drag float2", vec4f, 0.01f, 0.0f, 1.0f);
-        ImGui::SliderFloat2("slider float2", vec4f, 0.0f, 1.0f);
-        ImGui::InputInt2("input int2", vec4i);
-        ImGui::DragInt2("drag int2", vec4i, 1, 0, 255);
-        ImGui::SliderInt2("slider int2", vec4i, 0, 255);
-        ImGui::Spacing();
-
-        ImGui::InputFloat3("input float3", vec4f);
-        ImGui::DragFloat3("drag float3", vec4f, 0.01f, 0.0f, 1.0f);
-        ImGui::SliderFloat3("slider float3", vec4f, 0.0f, 1.0f);
-        ImGui::InputInt3("input int3", vec4i);
-        ImGui::DragInt3("drag int3", vec4i, 1, 0, 255);
-        ImGui::SliderInt3("slider int3", vec4i, 0, 255);
-        ImGui::Spacing();
-
-        ImGui::InputFloat4("input float4", vec4f);
-        ImGui::DragFloat4("drag float4", vec4f, 0.01f, 0.0f, 1.0f);
-        ImGui::SliderFloat4("slider float4", vec4f, 0.0f, 1.0f);
-        ImGui::InputInt4("input int4", vec4i);
-        ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
-        ImGui::SliderInt4("slider int4", vec4i, 0, 255);
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Vertical Sliders"))
-    {
-        const float spacing = 4;
-        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
-
-        static int int_value = 0;
-        ImGui::VSliderInt("##int", ImVec2(18,160), &int_value, 0, 5);
-        ImGui::SameLine();
-
-        static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f };
-        ImGui::PushID("set1");
-        for (int i = 0; i < 7; i++)
-        {
-            if (i > 0) ImGui::SameLine();
-            ImGui::PushID(i);
-            ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i/7.0f, 0.5f, 0.5f));
-            ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.5f));
-            ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.5f));
-            ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i/7.0f, 0.9f, 0.9f));
-            ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, "");
-            if (ImGui::IsItemActive() || ImGui::IsItemHovered())
-                ImGui::SetTooltip("%.3f", values[i]);
-            ImGui::PopStyleColor(4);
-            ImGui::PopID();
-        }
-        ImGui::PopID();
-
-        ImGui::SameLine();
-        ImGui::PushID("set2");
-        static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f };
-        const int rows = 3;
-        const ImVec2 small_slider_size(18, (float)(int)((160.0f - (rows - 1) * spacing) / rows));
-        for (int nx = 0; nx < 4; nx++)
-        {
-            if (nx > 0) ImGui::SameLine();
-            ImGui::BeginGroup();
-            for (int ny = 0; ny < rows; ny++)
-            {
-                ImGui::PushID(nx*rows+ny);
-                ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, "");
-                if (ImGui::IsItemActive() || ImGui::IsItemHovered())
-                    ImGui::SetTooltip("%.3f", values2[nx]);
-                ImGui::PopID();
-            }
-            ImGui::EndGroup();
-        }
-        ImGui::PopID();
-
-        ImGui::SameLine();
-        ImGui::PushID("set3");
-        for (int i = 0; i < 4; i++)
-        {
-            if (i > 0) ImGui::SameLine();
-            ImGui::PushID(i);
-            ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40);
-            ImGui::VSliderFloat("##v", ImVec2(40,160), &values[i], 0.0f, 1.0f, "%.2f\nsec");
-            ImGui::PopStyleVar();
-            ImGui::PopID();
-        }
-        ImGui::PopID();
-        ImGui::PopStyleVar();
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Drag and Drop"))
-    {
-        if (ImGui::TreeNode("Drag and drop in standard widgets"))
-        {
-            // ColorEdit widgets automatically act as drag source and drag target.
-            // They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F to allow your own widgets
-            // to use colors in their drag and drop interaction. Also see the demo in Color Picker -> Palette demo.
-            HelpMarker("You can drag from the colored squares.");
-            static float col1[3] = { 1.0f, 0.0f, 0.2f };
-            static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f };
-            ImGui::ColorEdit3("color 1", col1);
-            ImGui::ColorEdit4("color 2", col2);
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Drag and drop to copy/swap items"))
-        {
-            enum Mode
-            {
-                Mode_Copy,
-                Mode_Move,
-                Mode_Swap
-            };
-            static int mode = 0;
-            if (ImGui::RadioButton("Copy", mode == Mode_Copy)) { mode = Mode_Copy; } ImGui::SameLine();
-            if (ImGui::RadioButton("Move", mode == Mode_Move)) { mode = Mode_Move; } ImGui::SameLine();
-            if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; }
-            static const char* names[9] = { "Bobby", "Beatrice", "Betty", "Brianna", "Barry", "Bernard", "Bibi", "Blaine", "Bryn" };
-            for (int n = 0; n < IM_ARRAYSIZE(names); n++)
-            {
-                ImGui::PushID(n);
-                if ((n % 3) != 0)
-                    ImGui::SameLine();
-                ImGui::Button(names[n], ImVec2(60,60));
-
-                // Our buttons are both drag sources and drag targets here!
-                if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None))
-                {
-                    ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int));    // Set payload to carry the index of our item (could be anything)
-                    if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); }    // Display preview (could be anything, e.g. when dragging an image we could decide to display the filename and a small preview of the image, etc.)
-                    if (mode == Mode_Move) { ImGui::Text("Move %s", names[n]); }
-                    if (mode == Mode_Swap) { ImGui::Text("Swap %s", names[n]); }
-                    ImGui::EndDragDropSource();
-                }
-                if (ImGui::BeginDragDropTarget())
-                {
-                    if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DEMO_CELL"))
-                    {
-                        IM_ASSERT(payload->DataSize == sizeof(int));
-                        int payload_n = *(const int*)payload->Data;
-                        if (mode == Mode_Copy)
-                        {
-                            names[n] = names[payload_n];
-                        }
-                        if (mode == Mode_Move)
-                        {
-                            names[n] = names[payload_n];
-                            names[payload_n] = "";
-                        }
-                        if (mode == Mode_Swap)
-                        {
-                            const char* tmp = names[n];
-                            names[n] = names[payload_n];
-                            names[payload_n] = tmp;
-                        }
-                    }
-                    ImGui::EndDragDropTarget();
-                }
-                ImGui::PopID();
-            }
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Drag to reorder items (simple)"))
-        {
-            // Simple reordering
-            HelpMarker("We don't use the drag and drop api at all here! Instead we query when the item is held but not hovered, and order items accordingly.");
-            static const char* item_names[] = { "Item One", "Item Two", "Item Three", "Item Four", "Item Five" };
-            for (int n = 0; n < IM_ARRAYSIZE(item_names); n++)
-            {
-                const char* item = item_names[n];
-                ImGui::Selectable(item);
-
-                if (ImGui::IsItemActive() && !ImGui::IsItemHovered())
-                {
-                    int n_next = n + (ImGui::GetMouseDragDelta(0).y < 0.f ? -1 : 1);
-                    if (n_next >= 0 && n_next < IM_ARRAYSIZE(item_names))
-                    {
-                        item_names[n] = item_names[n_next];
-                        item_names[n_next] = item;
-                        ImGui::ResetMouseDragDelta();
-                    }
-                }
-            }
-            ImGui::TreePop();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Querying Status (Active/Focused/Hovered etc.)"))
-    {
-        // Submit an item (various types available) so we can query their status in the following block.
-        static int item_type = 1;
-        ImGui::Combo("Item Type", &item_type, "Text\0Button\0Button (w/ repeat)\0Checkbox\0SliderFloat\0InputText\0InputFloat\0InputFloat3\0ColorEdit4\0MenuItem\0TreeNode\0TreeNode (w/ double-click)\0ListBox\0", 20);
-        ImGui::SameLine();
-        HelpMarker("Testing how various types of items are interacting with the IsItemXXX functions.");
-        bool ret = false;
-        static bool b = false;
-        static float col4f[4] = { 1.0f, 0.5, 0.0f, 1.0f };
-        static char str[16] = {};
-        if (item_type == 0) { ImGui::Text("ITEM: Text"); }                                              // Testing text items with no identifier/interaction
-        if (item_type == 1) { ret = ImGui::Button("ITEM: Button"); }                                    // Testing button
-        if (item_type == 2) { ImGui::PushButtonRepeat(true); ret = ImGui::Button("ITEM: Button"); ImGui::PopButtonRepeat(); } // Testing button (with repeater)
-        if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); }                            // Testing checkbox
-        if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); }   // Testing basic item
-        if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); }  // Testing input text (which handles tabbing)
-        if (item_type == 6) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); }               // Testing +/- buttons on scalar input
-        if (item_type == 7) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); }                   // Testing multi-component items (IsItemXXX flags are reported merged)
-        if (item_type == 8) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); }                     // Testing multi-component items (IsItemXXX flags are reported merged)
-        if (item_type == 9) { ret = ImGui::MenuItem("ITEM: MenuItem"); }                                // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
-        if (item_type == 10){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); }     // Testing tree node
-        if (item_type == 11){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
-        if (item_type == 12){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", &current, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
-
-        // Display the value of IsItemHovered() and other common item state functions.
-        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
-        // Because BulletText is an item itself and that would affect the output of IsItemXXX functions,
-        // we query every state in a single call to avoid storing them and to simplify the code
-        ImGui::BulletText(
-            "Return value = %d\n"
-            "IsItemFocused() = %d\n"
-            "IsItemHovered() = %d\n"
-            "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n"
-            "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n"
-            "IsItemHovered(_AllowWhenOverlapped) = %d\n"
-            "IsItemHovered(_RectOnly) = %d\n"
-            "IsItemActive() = %d\n"
-            "IsItemEdited() = %d\n"
-            "IsItemActivated() = %d\n"
-            "IsItemDeactivated() = %d\n"
-            "IsItemDeactivatedAfterEdit() = %d\n"
-            "IsItemVisible() = %d\n"
-            "IsItemClicked() = %d\n"
-            "IsItemToggledOpen() = %d\n"
-            "GetItemRectMin() = (%.1f, %.1f)\n"
-            "GetItemRectMax() = (%.1f, %.1f)\n"
-            "GetItemRectSize() = (%.1f, %.1f)",
-            ret,
-            ImGui::IsItemFocused(),
-            ImGui::IsItemHovered(),
-            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
-            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
-            ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped),
-            ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly),
-            ImGui::IsItemActive(),
-            ImGui::IsItemEdited(),
-            ImGui::IsItemActivated(),
-            ImGui::IsItemDeactivated(),
-            ImGui::IsItemDeactivatedAfterEdit(),
-            ImGui::IsItemVisible(),
-            ImGui::IsItemClicked(),
-            ImGui::IsItemToggledOpen(),
-            ImGui::GetItemRectMin().x, ImGui::GetItemRectMin().y,
-            ImGui::GetItemRectMax().x, ImGui::GetItemRectMax().y,
-            ImGui::GetItemRectSize().x, ImGui::GetItemRectSize().y
-        );
-
-        static bool embed_all_inside_a_child_window = false;
-        ImGui::Checkbox("Embed everything inside a child window (for additional testing)", &embed_all_inside_a_child_window);
-        if (embed_all_inside_a_child_window)
-            ImGui::BeginChild("outer_child", ImVec2(0, ImGui::GetFontSize() * 20), true);
-
-        // Testing IsWindowFocused() function with its various flags.
-        // Note that the ImGuiFocusedFlags_XXX flags can be combined.
-        ImGui::BulletText(
-            "IsWindowFocused() = %d\n"
-            "IsWindowFocused(_ChildWindows) = %d\n"
-            "IsWindowFocused(_ChildWindows|_RootWindow) = %d\n"
-            "IsWindowFocused(_RootWindow) = %d\n"
-            "IsWindowFocused(_AnyWindow) = %d\n",
-            ImGui::IsWindowFocused(),
-            ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows),
-            ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_RootWindow),
-            ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow),
-            ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow));
-
-        // Testing IsWindowHovered() function with its various flags.
-        // Note that the ImGuiHoveredFlags_XXX flags can be combined.
-        ImGui::BulletText(
-            "IsWindowHovered() = %d\n"
-            "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
-            "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n"
-            "IsWindowHovered(_ChildWindows) = %d\n"
-            "IsWindowHovered(_ChildWindows|_RootWindow) = %d\n"
-            "IsWindowHovered(_ChildWindows|_AllowWhenBlockedByPopup) = %d\n"
-            "IsWindowHovered(_RootWindow) = %d\n"
-            "IsWindowHovered(_AnyWindow) = %d\n",
-            ImGui::IsWindowHovered(),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_AllowWhenBlockedByPopup),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow),
-            ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow));
-
-        ImGui::BeginChild("child", ImVec2(0, 50), true);
-        ImGui::Text("This is another child window for testing the _ChildWindows flag.");
-        ImGui::EndChild();
-        if (embed_all_inside_a_child_window)
-            ImGui::EndChild();
-
-        static char dummy_str[] = "This is a dummy field to be able to tab-out of the widgets above.";
-        ImGui::InputText("dummy", dummy_str, IM_ARRAYSIZE(dummy_str), ImGuiInputTextFlags_ReadOnly);
-
-        // Calling IsItemHovered() after begin returns the hovered status of the title bar.
-        // This is useful in particular if you want to create a context menu (with BeginPopupContextItem) associated to the title bar of a window.
-        static bool test_window = false;
-        ImGui::Checkbox("Hovered/Active tests after Begin() for title bar testing", &test_window);
-        if (test_window)
-        {
-            ImGui::Begin("Title bar Hovered/Active tests", &test_window);
-            if (ImGui::BeginPopupContextItem()) // <-- This is using IsItemHovered()
-            {
-                if (ImGui::MenuItem("Close")) { test_window = false; }
-                ImGui::EndPopup();
-            }
-            ImGui::Text(
-                "IsItemHovered() after begin = %d (== is title bar hovered)\n"
-                "IsItemActive() after begin = %d (== is window being clicked/moved)\n",
-                ImGui::IsItemHovered(), ImGui::IsItemActive());
-            ImGui::End();
-        }
-
-        ImGui::TreePop();
-    }
-}
-
-static void ShowDemoWindowLayout()
-{
-    if (!ImGui::CollapsingHeader("Layout"))
-        return;
-
-    if (ImGui::TreeNode("Child windows"))
-    {
-        HelpMarker("Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window.");
-        static bool disable_mouse_wheel = false;
-        static bool disable_menu = false;
-        ImGui::Checkbox("Disable Mouse Wheel", &disable_mouse_wheel);
-        ImGui::Checkbox("Disable Menu", &disable_menu);
-
-        static int line = 50;
-        bool goto_line = ImGui::Button("Goto");
-        ImGui::SameLine();
-        ImGui::SetNextItemWidth(100);
-        goto_line |= ImGui::InputInt("##Line", &line, 0, 0, ImGuiInputTextFlags_EnterReturnsTrue);
-
-        // Child 1: no border, enable horizontal scrollbar
-        {
-            ImGuiWindowFlags window_flags = ImGuiWindowFlags_HorizontalScrollbar | (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0);
-            ImGui::BeginChild("ChildL", ImVec2(ImGui::GetWindowContentRegionWidth() * 0.5f, 260), false, window_flags);
-            for (int i = 0; i < 100; i++)
-            {
-                ImGui::Text("%04d: scrollable region", i);
-                if (goto_line && line == i)
-                    ImGui::SetScrollHereY();
-            }
-            if (goto_line && line >= 100)
-                ImGui::SetScrollHereY();
-            ImGui::EndChild();
-        }
-
-        ImGui::SameLine();
-
-        // Child 2: rounded border
-        {
-            ImGuiWindowFlags window_flags = (disable_mouse_wheel ? ImGuiWindowFlags_NoScrollWithMouse : 0) | (disable_menu ? 0 : ImGuiWindowFlags_MenuBar);
-            ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f);
-            ImGui::BeginChild("ChildR", ImVec2(0, 260), true, window_flags);
-            if (!disable_menu && ImGui::BeginMenuBar())
-            {
-                if (ImGui::BeginMenu("Menu"))
-                {
-                    ShowExampleMenuFile();
-                    ImGui::EndMenu();
-                }
-                ImGui::EndMenuBar();
-            }
-            ImGui::Columns(2);
-            for (int i = 0; i < 100; i++)
-            {
-                char buf[32];
-                sprintf(buf, "%03d", i);
-                ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
-                ImGui::NextColumn();
-            }
-            ImGui::EndChild();
-            ImGui::PopStyleVar();
-        }
-
-        ImGui::Separator();
-
-        // Demonstrate a few extra things
-        // - Changing ImGuiCol_ChildBg (which is transparent black in default styles)
-        // - Using SetCursorPos() to position the child window (because the child window is an item from the POV of the parent window)
-        //   You can also call SetNextWindowPos() to position the child window. The parent window will effectively layout from this position.
-        // - Using ImGui::GetItemRectMin/Max() to query the "item" state (because the child window is an item from the POV of the parent window)
-        //   See "Widgets" -> "Querying Status (Active/Focused/Hovered etc.)" section for more details about this.
-        {
-            ImGui::SetCursorPosX(ImGui::GetCursorPosX() + 10);
-            ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(255, 0, 0, 100));
-            ImGui::BeginChild("Red", ImVec2(200, 100), true, ImGuiWindowFlags_None);
-            for (int n = 0; n < 50; n++)
-                ImGui::Text("Some test %d", n);
-            ImGui::EndChild();
-            ImVec2 child_rect_min = ImGui::GetItemRectMin();
-            ImVec2 child_rect_max = ImGui::GetItemRectMax();
-            ImGui::PopStyleColor();
-            ImGui::Text("Rect of child window is: (%.0f,%.0f) (%.0f,%.0f)", child_rect_min.x, child_rect_min.y, child_rect_max.x, child_rect_max.y);
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Widgets Width"))
-    {
-        // Use SetNextItemWidth() to set the width of a single upcoming item.
-        // Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
-        static float f = 0.0f;
-        ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
-        ImGui::SameLine(); HelpMarker("Fixed width.");
-        ImGui::SetNextItemWidth(100);
-        ImGui::DragFloat("float##1", &f);
-
-        ImGui::Text("SetNextItemWidth/PushItemWidth(GetWindowWidth() * 0.5f)");
-        ImGui::SameLine(); HelpMarker("Half of window width.");
-        ImGui::SetNextItemWidth(ImGui::GetWindowWidth() * 0.5f);
-        ImGui::DragFloat("float##2", &f);
-
-        ImGui::Text("SetNextItemWidth/PushItemWidth(GetContentRegionAvail().x * 0.5f)");
-        ImGui::SameLine(); HelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)");
-        ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.5f);
-        ImGui::DragFloat("float##3", &f);
-
-        ImGui::Text("SetNextItemWidth/PushItemWidth(-100)");
-        ImGui::SameLine(); HelpMarker("Align to right edge minus 100");
-        ImGui::SetNextItemWidth(-100);
-        ImGui::DragFloat("float##4", &f);
-
-        // Demonstrate using PushItemWidth to surround three items. Calling SetNextItemWidth() before each of them would have the same effect.
-        ImGui::Text("SetNextItemWidth/PushItemWidth(-1)");
-        ImGui::SameLine(); HelpMarker("Align to right edge");
-        ImGui::PushItemWidth(-1);
-        ImGui::DragFloat("##float5a", &f);
-        ImGui::DragFloat("##float5b", &f);
-        ImGui::DragFloat("##float5c", &f);
-        ImGui::PopItemWidth();
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Basic Horizontal Layout"))
-    {
-        ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)");
-
-        // Text
-        ImGui::Text("Two items: Hello"); ImGui::SameLine();
-        ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
-
-        // Adjust spacing
-        ImGui::Text("More spacing: Hello"); ImGui::SameLine(0, 20);
-        ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
-
-        // Button
-        ImGui::AlignTextToFramePadding();
-        ImGui::Text("Normal buttons"); ImGui::SameLine();
-        ImGui::Button("Banana"); ImGui::SameLine();
-        ImGui::Button("Apple"); ImGui::SameLine();
-        ImGui::Button("Corniflower");
-
-        // Button
-        ImGui::Text("Small buttons"); ImGui::SameLine();
-        ImGui::SmallButton("Like this one"); ImGui::SameLine();
-        ImGui::Text("can fit within a text block.");
-
-        // Aligned to arbitrary position. Easy/cheap column.
-        ImGui::Text("Aligned");
-        ImGui::SameLine(150); ImGui::Text("x=150");
-        ImGui::SameLine(300); ImGui::Text("x=300");
-        ImGui::Text("Aligned");
-        ImGui::SameLine(150); ImGui::SmallButton("x=150");
-        ImGui::SameLine(300); ImGui::SmallButton("x=300");
-
-        // Checkbox
-        static bool c1 = false, c2 = false, c3 = false, c4 = false;
-        ImGui::Checkbox("My", &c1); ImGui::SameLine();
-        ImGui::Checkbox("Tailor", &c2); ImGui::SameLine();
-        ImGui::Checkbox("Is", &c3); ImGui::SameLine();
-        ImGui::Checkbox("Rich", &c4);
-
-        // Various
-        static float f0 = 1.0f, f1 = 2.0f, f2 = 3.0f;
-        ImGui::PushItemWidth(80);
-        const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD" };
-        static int item = -1;
-        ImGui::Combo("Combo", &item, items, IM_ARRAYSIZE(items)); ImGui::SameLine();
-        ImGui::SliderFloat("X", &f0, 0.0f, 5.0f); ImGui::SameLine();
-        ImGui::SliderFloat("Y", &f1, 0.0f, 5.0f); ImGui::SameLine();
-        ImGui::SliderFloat("Z", &f2, 0.0f, 5.0f);
-        ImGui::PopItemWidth();
-
-        ImGui::PushItemWidth(80);
-        ImGui::Text("Lists:");
-        static int selection[4] = { 0, 1, 2, 3 };
-        for (int i = 0; i < 4; i++)
-        {
-            if (i > 0) ImGui::SameLine();
-            ImGui::PushID(i);
-            ImGui::ListBox("", &selection[i], items, IM_ARRAYSIZE(items));
-            ImGui::PopID();
-            //if (ImGui::IsItemHovered()) ImGui::SetTooltip("ListBox %d hovered", i);
-        }
-        ImGui::PopItemWidth();
-
-        // Dummy
-        ImVec2 button_sz(40, 40);
-        ImGui::Button("A", button_sz); ImGui::SameLine();
-        ImGui::Dummy(button_sz); ImGui::SameLine();
-        ImGui::Button("B", button_sz);
-
-        // Manually wrapping (we should eventually provide this as an automatic layout feature, but for now you can do it manually)
-        ImGui::Text("Manually wrapping:");
-        ImGuiStyle& style = ImGui::GetStyle();
-        int buttons_count = 20;
-        float window_visible_x2 = ImGui::GetWindowPos().x + ImGui::GetWindowContentRegionMax().x;
-        for (int n = 0; n < buttons_count; n++)
-        {
-            ImGui::PushID(n);
-            ImGui::Button("Box", button_sz);
-            float last_button_x2 = ImGui::GetItemRectMax().x;
-            float next_button_x2 = last_button_x2 + style.ItemSpacing.x + button_sz.x; // Expected position if next button was on same line
-            if (n + 1 < buttons_count && next_button_x2 < window_visible_x2)
-                ImGui::SameLine();
-            ImGui::PopID();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Tabs"))
-    {
-        if (ImGui::TreeNode("Basic"))
-        {
-            ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_None;
-            if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
-            {
-                if (ImGui::BeginTabItem("Avocado"))
-                {
-                    ImGui::Text("This is the Avocado tab!\nblah blah blah blah blah");
-                    ImGui::EndTabItem();
-                }
-                if (ImGui::BeginTabItem("Broccoli"))
-                {
-                    ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah");
-                    ImGui::EndTabItem();
-                }
-                if (ImGui::BeginTabItem("Cucumber"))
-                {
-                    ImGui::Text("This is the Cucumber tab!\nblah blah blah blah blah");
-                    ImGui::EndTabItem();
-                }
-                ImGui::EndTabBar();
-            }
-            ImGui::Separator();
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Advanced & Close Button"))
-        {
-            // Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0).
-            static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable;
-            ImGui::CheckboxFlags("ImGuiTabBarFlags_Reorderable", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_Reorderable);
-            ImGui::CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_AutoSelectNewTabs);
-            ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton);
-            ImGui::CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton);
-            if ((tab_bar_flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
-                tab_bar_flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
-            if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown))
-                tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown);
-            if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", (unsigned int*)&tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll))
-                tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll);
-
-            // Tab Bar
-            const char* names[4] = { "Artichoke", "Beetroot", "Celery", "Daikon" };
-            static bool opened[4] = { true, true, true, true }; // Persistent user state
-            for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
-            {
-                if (n > 0) { ImGui::SameLine(); }
-                ImGui::Checkbox(names[n], &opened[n]);
-            }
-
-            // Passing a bool* to BeginTabItem() is similar to passing one to Begin(): the underlying bool will be set to false when the tab is closed.
-            if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
-            {
-                for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
-                    if (opened[n] && ImGui::BeginTabItem(names[n], &opened[n], ImGuiTabItemFlags_None))
-                    {
-                        ImGui::Text("This is the %s tab!", names[n]);
-                        if (n & 1)
-                            ImGui::Text("I am an odd tab.");
-                        ImGui::EndTabItem();
-                    }
-                ImGui::EndTabBar();
-            }
-            ImGui::Separator();
-            ImGui::TreePop();
-        }
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Groups"))
-    {
-        HelpMarker("BeginGroup() basically locks the horizontal position for new line. EndGroup() bundles the whole group so that you can use \"item\" functions such as IsItemHovered()/IsItemActive() or SameLine() etc. on the whole group.");
-        ImGui::BeginGroup();
-        {
-            ImGui::BeginGroup();
-            ImGui::Button("AAA");
-            ImGui::SameLine();
-            ImGui::Button("BBB");
-            ImGui::SameLine();
-            ImGui::BeginGroup();
-            ImGui::Button("CCC");
-            ImGui::Button("DDD");
-            ImGui::EndGroup();
-            ImGui::SameLine();
-            ImGui::Button("EEE");
-            ImGui::EndGroup();
-            if (ImGui::IsItemHovered())
-                ImGui::SetTooltip("First group hovered");
-        }
-        // Capture the group size and create widgets using the same size
-        ImVec2 size = ImGui::GetItemRectSize();
-        const float values[5] = { 0.5f, 0.20f, 0.80f, 0.60f, 0.25f };
-        ImGui::PlotHistogram("##values", values, IM_ARRAYSIZE(values), 0, NULL, 0.0f, 1.0f, size);
-
-        ImGui::Button("ACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y));
-        ImGui::SameLine();
-        ImGui::Button("REACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x)*0.5f, size.y));
-        ImGui::EndGroup();
-        ImGui::SameLine();
-
-        ImGui::Button("LEVERAGE\nBUZZWORD", size);
-        ImGui::SameLine();
-
-        if (ImGui::ListBoxHeader("List", size))
-        {
-            ImGui::Selectable("Selected", true);
-            ImGui::Selectable("Not Selected", false);
-            ImGui::ListBoxFooter();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Text Baseline Alignment"))
-    {
-        {
-            ImGui::BulletText("Text baseline:");
-            ImGui::SameLine();
-            HelpMarker("This is testing the vertical alignment that gets applied on text to keep it aligned with widgets. Lines only composed of text or \"small\" widgets fit in less vertical spaces than lines with normal widgets.");
-            ImGui::Indent();
-
-            ImGui::Text("KO Blahblah"); ImGui::SameLine();
-            ImGui::Button("Some framed item"); ImGui::SameLine();
-            HelpMarker("Baseline of button will look misaligned with text..");
-
-            // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
-            // Because we don't know what's coming after the Text() statement, we need to move the text baseline down by FramePadding.y
-            ImGui::AlignTextToFramePadding();
-            ImGui::Text("OK Blahblah"); ImGui::SameLine();
-            ImGui::Button("Some framed item"); ImGui::SameLine();
-            HelpMarker("We call AlignTextToFramePadding() to vertically align the text baseline by +FramePadding.y");
-
-            // SmallButton() uses the same vertical padding as Text
-            ImGui::Button("TEST##1"); ImGui::SameLine();
-            ImGui::Text("TEST"); ImGui::SameLine();
-            ImGui::SmallButton("TEST##2");
-
-            // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
-            ImGui::AlignTextToFramePadding();
-            ImGui::Text("Text aligned to framed item"); ImGui::SameLine();
-            ImGui::Button("Item##1"); ImGui::SameLine();
-            ImGui::Text("Item"); ImGui::SameLine();
-            ImGui::SmallButton("Item##2"); ImGui::SameLine();
-            ImGui::Button("Item##3");
-
-            ImGui::Unindent();
-        }
-
-        ImGui::Spacing();
-
-        {
-            ImGui::BulletText("Multi-line text:");
-            ImGui::Indent();
-            ImGui::Text("One\nTwo\nThree"); ImGui::SameLine();
-            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
-            ImGui::Text("Banana");
-
-            ImGui::Text("Banana"); ImGui::SameLine();
-            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
-            ImGui::Text("One\nTwo\nThree");
-
-            ImGui::Button("HOP##1"); ImGui::SameLine();
-            ImGui::Text("Banana"); ImGui::SameLine();
-            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
-            ImGui::Text("Banana");
-
-            ImGui::Button("HOP##2"); ImGui::SameLine();
-            ImGui::Text("Hello\nWorld"); ImGui::SameLine();
-            ImGui::Text("Banana");
-            ImGui::Unindent();
-        }
-
-        ImGui::Spacing();
-
-        {
-            ImGui::BulletText("Misc items:");
-            ImGui::Indent();
-
-            // SmallButton() sets FramePadding to zero. Text baseline is aligned to match baseline of previous Button
-            ImGui::Button("80x80", ImVec2(80, 80));
-            ImGui::SameLine();
-            ImGui::Button("50x50", ImVec2(50, 50));
-            ImGui::SameLine();
-            ImGui::Button("Button()");
-            ImGui::SameLine();
-            ImGui::SmallButton("SmallButton()");
-
-            // Tree
-            const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
-            ImGui::Button("Button##1");
-            ImGui::SameLine(0.0f, spacing);
-            if (ImGui::TreeNode("Node##1")) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); }    // Dummy tree data
-
-            ImGui::AlignTextToFramePadding();           // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget. Otherwise you can use SmallButton (smaller fit).
-            bool node_open = ImGui::TreeNode("Node##2");// Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add child content.
-            ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
-            if (node_open) { for (int i = 0; i < 6; i++) ImGui::BulletText("Item %d..", i); ImGui::TreePop(); }   // Dummy tree data
-
-            // Bullet
-            ImGui::Button("Button##3");
-            ImGui::SameLine(0.0f, spacing);
-            ImGui::BulletText("Bullet text");
-
-            ImGui::AlignTextToFramePadding();
-            ImGui::BulletText("Node");
-            ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
-            ImGui::Unindent();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Scrolling"))
-    {
-        // Vertical scroll functions
-        HelpMarker("Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given vertical position.");
-
-        static int track_item = 50;
-        static bool enable_track = true;
-        static bool enable_extra_decorations = false;
-        static float scroll_to_off_px = 0.0f;
-        static float scroll_to_pos_px = 200.0f;
-
-        ImGui::Checkbox("Decoration", &enable_extra_decorations);
-        ImGui::SameLine();
-        HelpMarker("We expose this for testing because scrolling sometimes had issues with window decoration such as menu-bars.");
-
-        ImGui::Checkbox("Track", &enable_track);
-        ImGui::PushItemWidth(100);
-        ImGui::SameLine(140); enable_track |= ImGui::DragInt("##item", &track_item, 0.25f, 0, 99, "Item = %d");
-
-        bool scroll_to_off = ImGui::Button("Scroll Offset");
-        ImGui::SameLine(140); scroll_to_off |= ImGui::DragFloat("##off", &scroll_to_off_px, 1.00f, 0, FLT_MAX, "+%.0f px");
-
-        bool scroll_to_pos = ImGui::Button("Scroll To Pos");
-        ImGui::SameLine(140); scroll_to_pos |= ImGui::DragFloat("##pos", &scroll_to_pos_px, 1.00f, -10, FLT_MAX, "X/Y = %.0f px");
-        ImGui::PopItemWidth();
-
-        if (scroll_to_off || scroll_to_pos)
-            enable_track = false;
-
-        ImGuiStyle& style = ImGui::GetStyle();
-        float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5;
-        if (child_w < 1.0f)
-            child_w = 1.0f;
-        ImGui::PushID("##VerticalScrolling");
-        for (int i = 0; i < 5; i++)
-        {
-            if (i > 0) ImGui::SameLine();
-            ImGui::BeginGroup();
-            const char* names[] = { "Top", "25%", "Center", "75%", "Bottom" };
-            ImGui::TextUnformatted(names[i]);
-
-            ImGuiWindowFlags child_flags = enable_extra_decorations ? ImGuiWindowFlags_MenuBar : 0;
-            bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(child_w, 200.0f), true, child_flags);
-            if (ImGui::BeginMenuBar())
-            {
-                ImGui::TextUnformatted("abc");
-                ImGui::EndMenuBar();
-            }
-            if (scroll_to_off)
-                ImGui::SetScrollY(scroll_to_off_px);
-            if (scroll_to_pos)
-                ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_pos_px, i * 0.25f);
-            if (window_visible) // Avoid calling SetScrollHereY when running with culled items
-            {
-                for (int item = 0; item < 100; item++)
-                {
-                    if (enable_track && item == track_item)
-                    {
-                        ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
-                        ImGui::SetScrollHereY(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom
-                    }
-                    else
-                    {
-                        ImGui::Text("Item %d", item);
-                    }
-                }
-            }
-            float scroll_y = ImGui::GetScrollY();
-            float scroll_max_y = ImGui::GetScrollMaxY();
-            ImGui::EndChild();
-            ImGui::Text("%.0f/%.0f", scroll_y, scroll_max_y);
-            ImGui::EndGroup();
-        }
-        ImGui::PopID();
-
-        // Horizontal scroll functions
-        ImGui::Spacing();
-        HelpMarker("Use SetScrollHereX() or SetScrollFromPosX() to scroll to a given horizontal position.\n\nUsing the \"Scroll To Pos\" button above will make the discontinuity at edges visible: scrolling to the top/bottom/left/right-most item will add an additional WindowPadding to reflect on reaching the edge of the list.\n\nBecause the clipping rectangle of most window hides half worth of WindowPadding on the left/right, using SetScrollFromPosX(+1) will usually result in clipped text whereas the equivalent SetScrollFromPosY(+1) wouldn't.");
-        ImGui::PushID("##HorizontalScrolling");
-        for (int i = 0; i < 5; i++)
-        {
-            float child_height = ImGui::GetTextLineHeight() + style.ScrollbarSize + style.WindowPadding.y * 2.0f;
-            ImGuiWindowFlags child_flags = ImGuiWindowFlags_HorizontalScrollbar | (enable_extra_decorations ? ImGuiWindowFlags_AlwaysVerticalScrollbar : 0);
-            bool window_visible = ImGui::BeginChild(ImGui::GetID((void*)(intptr_t)i), ImVec2(-100, child_height), true, child_flags);
-            if (scroll_to_off)
-                ImGui::SetScrollX(scroll_to_off_px);
-            if (scroll_to_pos)
-                ImGui::SetScrollFromPosX(ImGui::GetCursorStartPos().x + scroll_to_pos_px, i * 0.25f);
-            if (window_visible) // Avoid calling SetScrollHereY when running with culled items
-            {
-                for (int item = 0; item < 100; item++)
-                {
-                    if (enable_track && item == track_item)
-                    {
-                        ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
-                        ImGui::SetScrollHereX(i * 0.25f); // 0.0f:left, 0.5f:center, 1.0f:right
-                    }
-                    else
-                    {
-                        ImGui::Text("Item %d", item);
-                    }
-                    ImGui::SameLine();
-                }
-            }
-            float scroll_x = ImGui::GetScrollX();
-            float scroll_max_x = ImGui::GetScrollMaxX();
-            ImGui::EndChild();
-            ImGui::SameLine();
-            const char* names[] = { "Left", "25%", "Center", "75%", "Right" };
-            ImGui::Text("%s\n%.0f/%.0f", names[i], scroll_x, scroll_max_x);
-            ImGui::Spacing();
-        }
-        ImGui::PopID();
-
-        // Miscellaneous Horizontal Scrolling Demo
-        HelpMarker("Horizontal scrolling for a window has to be enabled explicitly via the ImGuiWindowFlags_HorizontalScrollbar flag.\n\nYou may want to explicitly specify content width by calling SetNextWindowContentWidth() before Begin().");
-        static int lines = 7;
-        ImGui::SliderInt("Lines", &lines, 1, 15);
-        ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
-        ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 1.0f));
-        ImGui::BeginChild("scrolling", ImVec2(0, ImGui::GetFrameHeightWithSpacing() * 7 + 30), true, ImGuiWindowFlags_HorizontalScrollbar);
-        for (int line = 0; line < lines; line++)
-        {
-            // Display random stuff (for the sake of this trivial demo we are using basic Button+SameLine. If you want to create your own time line for a real application you may be better off
-            // manipulating the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets yourself. You may also want to use the lower-level ImDrawList API)
-            int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3);
-            for (int n = 0; n < num_buttons; n++)
-            {
-                if (n > 0) ImGui::SameLine();
-                ImGui::PushID(n + line * 1000);
-                char num_buf[16];
-                sprintf(num_buf, "%d", n);
-                const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf;
-                float hue = n*0.05f;
-                ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f));
-                ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f));
-                ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f));
-                ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f));
-                ImGui::PopStyleColor(3);
-                ImGui::PopID();
-            }
-        }
-        float scroll_x = ImGui::GetScrollX();
-        float scroll_max_x = ImGui::GetScrollMaxX();
-        ImGui::EndChild();
-        ImGui::PopStyleVar(2);
-        float scroll_x_delta = 0.0f;
-        ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
-        ImGui::Text("Scroll from code"); ImGui::SameLine();
-        ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine();
-        ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x);
-        if (scroll_x_delta != 0.0f)
-        {
-            ImGui::BeginChild("scrolling"); // Demonstrate a trick: you can use Begin to set yourself in the context of another window (here we are already out of your child window)
-            ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta);
-            ImGui::EndChild();
-        }
-        ImGui::Spacing();
-
-        static bool show_horizontal_contents_size_demo_window = false;
-        ImGui::Checkbox("Show Horizontal contents size demo window", &show_horizontal_contents_size_demo_window);
-
-        if (show_horizontal_contents_size_demo_window)
-        {
-            static bool show_h_scrollbar = true;
-            static bool show_button = true;
-            static bool show_tree_nodes = true;
-            static bool show_text_wrapped = false;
-            static bool show_columns = true;
-            static bool show_tab_bar = true;
-            static bool show_child = false;
-            static bool explicit_content_size = false;
-            static float contents_size_x = 300.0f;
-            if (explicit_content_size)
-                ImGui::SetNextWindowContentSize(ImVec2(contents_size_x, 0.0f));
-            ImGui::Begin("Horizontal contents size demo window", &show_horizontal_contents_size_demo_window, show_h_scrollbar ? ImGuiWindowFlags_HorizontalScrollbar : 0);
-            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2, 0));
-            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 0));
-            HelpMarker("Test of different widgets react and impact the work rectangle growing when horizontal scrolling is enabled.\n\nUse 'Metrics->Tools->Show windows rectangles' to visualize rectangles.");
-            ImGui::Checkbox("H-scrollbar", &show_h_scrollbar);
-            ImGui::Checkbox("Button", &show_button);            // Will grow contents size (unless explicitly overwritten)
-            ImGui::Checkbox("Tree nodes", &show_tree_nodes);    // Will grow contents size and display highlight over full width
-            ImGui::Checkbox("Text wrapped", &show_text_wrapped);// Will grow and use contents size
-            ImGui::Checkbox("Columns", &show_columns);          // Will use contents size
-            ImGui::Checkbox("Tab bar", &show_tab_bar);          // Will use contents size
-            ImGui::Checkbox("Child", &show_child);              // Will grow and use contents size
-            ImGui::Checkbox("Explicit content size", &explicit_content_size);
-            ImGui::Text("Scroll %.1f/%.1f %.1f/%.1f", ImGui::GetScrollX(), ImGui::GetScrollMaxX(), ImGui::GetScrollY(), ImGui::GetScrollMaxY());
-            if (explicit_content_size)
-            {
-                ImGui::SameLine();
-                ImGui::SetNextItemWidth(100);
-                ImGui::DragFloat("##csx", &contents_size_x);
-                ImVec2 p = ImGui::GetCursorScreenPos();
-                ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + 10, p.y + 10), IM_COL32_WHITE);
-                ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(p.x + contents_size_x - 10, p.y), ImVec2(p.x + contents_size_x, p.y + 10), IM_COL32_WHITE);
-                ImGui::Dummy(ImVec2(0, 10));
-            }
-            ImGui::PopStyleVar(2);
-            ImGui::Separator();
-            if (show_button)
-            {
-                ImGui::Button("this is a 300-wide button", ImVec2(300, 0));
-            }
-            if (show_tree_nodes)
-            {
-                bool open = true;
-                if (ImGui::TreeNode("this is a tree node"))
-                {
-                    if (ImGui::TreeNode("another one of those tree node..."))
-                    {
-                        ImGui::Text("Some tree contents");
-                        ImGui::TreePop();
-                    }
-                    ImGui::TreePop();
-                }
-                ImGui::CollapsingHeader("CollapsingHeader", &open);
-            }
-            if (show_text_wrapped)
-            {
-                ImGui::TextWrapped("This text should automatically wrap on the edge of the work rectangle.");
-            }
-            if (show_columns)
-            {
-                ImGui::Columns(4);
-                for (int n = 0; n < 4; n++)
-                {
-                    ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
-                    ImGui::NextColumn();
-                }
-                ImGui::Columns(1);
-            }
-            if (show_tab_bar && ImGui::BeginTabBar("Hello"))
-            {
-                if (ImGui::BeginTabItem("OneOneOne")) { ImGui::EndTabItem(); }
-                if (ImGui::BeginTabItem("TwoTwoTwo")) { ImGui::EndTabItem(); }
-                if (ImGui::BeginTabItem("ThreeThreeThree")) { ImGui::EndTabItem(); }
-                if (ImGui::BeginTabItem("FourFourFour")) { ImGui::EndTabItem(); }
-                ImGui::EndTabBar();
-            }
-            if (show_child)
-            {
-                ImGui::BeginChild("child", ImVec2(0,0), true);
-                ImGui::EndChild();
-            }
-            ImGui::End();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Clipping"))
-    {
-        static ImVec2 size(100, 100), offset(50, 20);
-        ImGui::TextWrapped("On a per-widget basis we are occasionally clipping text CPU-side if it won't fit in its frame. Otherwise we are doing coarser clipping + passing a scissor rectangle to the renderer. The system is designed to try minimizing both execution and CPU/GPU rendering cost.");
-        ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f");
-        ImGui::TextWrapped("(Click and drag)");
-        ImVec2 pos = ImGui::GetCursorScreenPos();
-        ImVec4 clip_rect(pos.x, pos.y, pos.x + size.x, pos.y + size.y);
-        ImGui::InvisibleButton("##dummy", size);
-        if (ImGui::IsItemActive() && ImGui::IsMouseDragging(0)) { offset.x += ImGui::GetIO().MouseDelta.x; offset.y += ImGui::GetIO().MouseDelta.y; }
-        ImGui::GetWindowDrawList()->AddRectFilled(pos, ImVec2(pos.x + size.x, pos.y + size.y), IM_COL32(90, 90, 120, 255));
-        ImGui::GetWindowDrawList()->AddText(ImGui::GetFont(), ImGui::GetFontSize()*2.0f, ImVec2(pos.x + offset.x, pos.y + offset.y), IM_COL32(255, 255, 255, 255), "Line 1 hello\nLine 2 clip me!", NULL, 0.0f, &clip_rect);
-        ImGui::TreePop();
-    }
-}
-
-static void ShowDemoWindowPopups()
-{
-    if (!ImGui::CollapsingHeader("Popups & Modal windows"))
-        return;
-
-    // The properties of popups windows are:
-    // - They block normal mouse hovering detection outside them. (*)
-    // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
-    // - Their visibility state (~bool) is held internally by Dear ImGui instead of being held by the programmer as we are used to with regular Begin() calls.
-    //   User can manipulate the visibility state by calling OpenPopup().
-    // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
-    // Those three properties are connected. The library needs to hold their visibility state because it can close popups at any time.
-
-    // Typical use for regular windows:
-    //   bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End();
-    // Typical use for popups:
-    //   if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); }
-
-    // With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state.
-    // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below.
-
-    if (ImGui::TreeNode("Popups"))
-    {
-        ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it.");
-
-        static int selected_fish = -1;
-        const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" };
-        static bool toggles[] = { true, false, false, false, false };
-
-        // Simple selection popup
-        // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label)
-        if (ImGui::Button("Select.."))
-            ImGui::OpenPopup("my_select_popup");
-        ImGui::SameLine();
-        ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
-        if (ImGui::BeginPopup("my_select_popup"))
-        {
-            ImGui::Text("Aquarium");
-            ImGui::Separator();
-            for (int i = 0; i < IM_ARRAYSIZE(names); i++)
-                if (ImGui::Selectable(names[i]))
-                    selected_fish = i;
-            ImGui::EndPopup();
-        }
-
-        // Showing a menu with toggles
-        if (ImGui::Button("Toggle.."))
-            ImGui::OpenPopup("my_toggle_popup");
-        if (ImGui::BeginPopup("my_toggle_popup"))
-        {
-            for (int i = 0; i < IM_ARRAYSIZE(names); i++)
-                ImGui::MenuItem(names[i], "", &toggles[i]);
-            if (ImGui::BeginMenu("Sub-menu"))
-            {
-                ImGui::MenuItem("Click me");
-                ImGui::EndMenu();
-            }
-
-            ImGui::Separator();
-            ImGui::Text("Tooltip here");
-            if (ImGui::IsItemHovered())
-                ImGui::SetTooltip("I am a tooltip over a popup");
-
-            if (ImGui::Button("Stacked Popup"))
-                ImGui::OpenPopup("another popup");
-            if (ImGui::BeginPopup("another popup"))
-            {
-                for (int i = 0; i < IM_ARRAYSIZE(names); i++)
-                    ImGui::MenuItem(names[i], "", &toggles[i]);
-                if (ImGui::BeginMenu("Sub-menu"))
-                {
-                    ImGui::MenuItem("Click me");
-                    if (ImGui::Button("Stacked Popup"))
-                        ImGui::OpenPopup("another popup");
-                    if (ImGui::BeginPopup("another popup"))
-                    {
-                        ImGui::Text("I am the last one here.");
-                        ImGui::EndPopup();
-                    }
-                    ImGui::EndMenu();
-                }
-                ImGui::EndPopup();
-            }
-            ImGui::EndPopup();
-        }
-
-        // Call the more complete ShowExampleMenuFile which we use in various places of this demo
-        if (ImGui::Button("File Menu.."))
-            ImGui::OpenPopup("my_file_popup");
-        if (ImGui::BeginPopup("my_file_popup"))
-        {
-            ShowExampleMenuFile();
-            ImGui::EndPopup();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Context menus"))
-    {
-        // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
-        //    if (IsItemHovered() && IsMouseReleased(0))
-        //       OpenPopup(id);
-        //    return BeginPopup(id);
-        // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation.
-        static float value = 0.5f;
-        ImGui::Text("Value = %.3f (<-- right-click here)", value);
-        if (ImGui::BeginPopupContextItem("item context menu"))
-        {
-            if (ImGui::Selectable("Set to zero")) value = 0.0f;
-            if (ImGui::Selectable("Set to PI")) value = 3.1415f;
-            ImGui::SetNextItemWidth(-1);
-            ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
-            ImGui::EndPopup();
-        }
-
-        // We can also use OpenPopupOnItemClick() which is the same as BeginPopupContextItem() but without the Begin call.
-        // So here we will make it that clicking on the text field with the right mouse button (1) will toggle the visibility of the popup above.
-        ImGui::Text("(You can also right-click me to open the same popup as above.)");
-        ImGui::OpenPopupOnItemClick("item context menu", 1);
-
-        // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
-        // BeginPopupContextItem() will use the last item ID as the popup ID.
-        // In addition here, we want to include your editable label inside the button label. We use the ### operator to override the ID (read FAQ about ID for details)
-        static char name[32] = "Label1";
-        char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
-        ImGui::Button(buf);
-        if (ImGui::BeginPopupContextItem())
-        {
-            ImGui::Text("Edit name:");
-            ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
-            if (ImGui::Button("Close"))
-                ImGui::CloseCurrentPopup();
-            ImGui::EndPopup();
-        }
-        ImGui::SameLine(); ImGui::Text("(<-- right-click here)");
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Modals"))
-    {
-        ImGui::TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside the window.");
-
-        if (ImGui::Button("Delete.."))
-            ImGui::OpenPopup("Delete?");
-
-        if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
-        {
-            ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
-            ImGui::Separator();
-
-            //static int dummy_i = 0;
-            //ImGui::Combo("Combo", &dummy_i, "Delete\0Delete harder\0");
-
-            static bool dont_ask_me_next_time = false;
-            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
-            ImGui::Checkbox("Don't ask me next time", &dont_ask_me_next_time);
-            ImGui::PopStyleVar();
-
-            if (ImGui::Button("OK", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
-            ImGui::SetItemDefaultFocus();
-            ImGui::SameLine();
-            if (ImGui::Button("Cancel", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
-            ImGui::EndPopup();
-        }
-
-        if (ImGui::Button("Stacked modals.."))
-            ImGui::OpenPopup("Stacked 1");
-        if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar))
-        {
-            if (ImGui::BeginMenuBar())
-            {
-                if (ImGui::BeginMenu("File"))
-                {
-                    if (ImGui::MenuItem("Dummy menu item")) {}
-                    ImGui::EndMenu();
-                }
-                ImGui::EndMenuBar();
-            }
-            ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
-
-            // Testing behavior of widgets stacking their own regular popups over the modal.
-            static int item = 1;
-            static float color[4] = { 0.4f,0.7f,0.0f,0.5f };
-            ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
-            ImGui::ColorEdit4("color", color);
-
-            if (ImGui::Button("Add another modal.."))
-                ImGui::OpenPopup("Stacked 2");
-
-            // Also demonstrate passing a bool* to BeginPopupModal(), this will create a regular close button which will close the popup.
-            // Note that the visibility state of popups is owned by imgui, so the input value of the bool actually doesn't matter here.
-            bool dummy_open = true;
-            if (ImGui::BeginPopupModal("Stacked 2", &dummy_open))
-            {
-                ImGui::Text("Hello from Stacked The Second!");
-                if (ImGui::Button("Close"))
-                    ImGui::CloseCurrentPopup();
-                ImGui::EndPopup();
-            }
-
-            if (ImGui::Button("Close"))
-                ImGui::CloseCurrentPopup();
-            ImGui::EndPopup();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Menus inside a regular window"))
-    {
-        ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
-        ImGui::Separator();
-        // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
-        // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
-        // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
-        ImGui::PushID("foo");
-        ImGui::MenuItem("Menu item", "CTRL+M");
-        if (ImGui::BeginMenu("Menu inside a regular window"))
-        {
-            ShowExampleMenuFile();
-            ImGui::EndMenu();
-        }
-        ImGui::PopID();
-        ImGui::Separator();
-        ImGui::TreePop();
-    }
-}
-
-// Dummy data structure that we use for the Table demo.
-// (pre-C++11 doesn't allow us to instantiate ImVector<MyItem> template if this structure if defined inside the demo function)
-namespace
-{
-// We are passing our own identifier to TableSetupColumn() to facilitate identifying columns in the sorting code.
-// This identifier will be passed down into ImGuiTableSortSpec::ColumnUserID.
-// But it is possible to omit the user id parameter of TableSetupColumn() and just use the column index instead! (ImGuiTableSortSpec::ColumnIndex)
-// If you don't use sorting, you will generally never care about giving column an ID!
-enum MyItemColumnID
-{
-    MyItemColumnID_ID,
-    MyItemColumnID_Name,
-    MyItemColumnID_Action,
-    MyItemColumnID_Quantity,
-    MyItemColumnID_Description
-};
-
-struct MyItem
-{
-    int         ID;
-    const char* Name;
-    int         Quantity;
-
-    // We have a problem which is affecting _only this demo_ and should not affect your code:
-    // As we don't rely on std:: or other third-party library to compile dear imgui, we only have reliable access to qsort(), 
-    // however qsort doesn't allow passing user data to comparing function.
-    // As a workaround, we are storing the sort specs in a static/global for the comparing function to access.
-    // In your own use case you would probably pass the sort specs to your sorting/comparing functions directly and not use a global.
-    static const ImGuiTableSortSpecs* s_current_sort_specs;
-
-    // Compare function to be used by qsort()
-    static int IMGUI_CDECL CompareWithSortSpecs(const void* lhs, const void* rhs)
-    {
-        const MyItem* a = (const MyItem*)lhs;
-        const MyItem* b = (const MyItem*)rhs;
-        for (int n = 0; n < s_current_sort_specs->SpecsCount; n++)
-        {
-            // Here we identify columns using the ColumnUserID value that we ourselves passed to TableSetupColumn()
-            // We could also choose to identify columns based on their index (sort_spec->ColumnIndex), which is simpler!
-            const ImGuiTableSortSpecsColumn* sort_spec = &s_current_sort_specs->Specs[n];
-            int delta = 0;
-            switch (sort_spec->ColumnUserID)
-            {
-            case MyItemColumnID_ID:             delta = (a->ID - b->ID);                break;
-            case MyItemColumnID_Name:           delta = (strcmp(a->Name, b->Name));     break;
-            case MyItemColumnID_Quantity:       delta = (a->Quantity - b->Quantity);    break;
-            case MyItemColumnID_Description:    delta = (strcmp(a->Name, b->Name));     break;
-            default: IM_ASSERT(0); break;
-            }
-            if (delta > 0)
-                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? +1 : -1;
-            if (delta < 0)
-                return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? -1 : +1;
-        }
-
-        // qsort() is instable so always return a way to differenciate items.
-        // Your own compare function may want to avoid fallback on implicit sort specs e.g. a Name compare if it wasn't already part of the sort specs.
-        return (a->ID - b->ID);
-    }
-};
-const ImGuiTableSortSpecs* MyItem::s_current_sort_specs = NULL;
-}
-
-static void ShowDemoWindowTables()
-{
-    //ImGui::SetNextItemOpen(true, ImGuiCond_Once);
-    if (!ImGui::CollapsingHeader("Tables & Columns"))
-        return;
-
-    ImGui::PushID("Tables");
-
-    int open_action = -1;
-    if (ImGui::Button("Open all"))
-        open_action = 1;
-    ImGui::SameLine();
-    if (ImGui::Button("Close all"))
-        open_action = 0;
-    ImGui::SameLine();
-
-    // Options
-    static bool disable_indent = false;
-    ImGui::Checkbox("Disable tree indentation", &disable_indent);
-    ImGui::SameLine();
-    HelpMarker("Disable the indenting of tree nodes so demo tables can use the full window width.");
-    ImGui::Separator();
-    if (disable_indent)
-        ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0.0f);
-
-    // About Styling of tables
-    // Most settings are configured on a per-table basis via the flags passed to BeginTable() and TableSetupColumns APIs.
-    // There are however a few settings that a shared and part of the ImGuiStyle structure:
-    //   style.CellPadding                          // Padding within each cell
-    //   style.Colors[ImGuiCol_TableHeaderBg]       // Table header background
-    //   style.Colors[ImGuiCol_TableBorderStrong]   // Table outer and header borders
-    //   style.Colors[ImGuiCol_TableBorderLight]    // Table inner borders
-    //   style.Colors[ImGuiCol_TableRowBg]          // Table row background when ImGuiTableFlags_RowBg is enabled (even rows)
-    //   style.Colors[ImGuiCol_TableRowBgAlt]       // Table row background when ImGuiTableFlags_RowBg is enabled (odds rows)
-
-    // Demos
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Basic"))
-    {
-        // Here we will showcase 4 different ways to output a table. They are very simple variations of a same thing!
-        
-        // Basic use of tables using TableNextRow() to create a new row, and TableSetColumnIndex() to select the column.
-        // In many situations, this is the most flexible and easy to use pattern. 
-        HelpMarker("Using TableNextRow() + calling TableSetColumnIndex() _before_ each cell, in a loop.");
-        if (ImGui::BeginTable("##table1", 3))
-        {
-            for (int row = 0; row < 4; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("Row %d Column %d", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-
-        // This essentially the same as above, except instead of using a for loop we call TableSetColumnIndex() manually.
-        // Sometimes this makes more sense.
-        HelpMarker("Using TableNextRow() + calling TableSetColumnIndex() _before_ each cell, manually.");
-        if (ImGui::BeginTable("##table2", 3))
-        {
-            for (int row = 0; row < 4; row++)
-            {
-                ImGui::TableNextRow();
-                ImGui::TableSetColumnIndex(0);
-                ImGui::Text("Row %d", row);
-                ImGui::TableSetColumnIndex(1);
-                ImGui::Text("Some contents");
-                ImGui::TableSetColumnIndex(2);
-                ImGui::Text("123.456");
-            }
-            ImGui::EndTable();
-        }
-
-        // Another subtle variant, we call TableNextCell() _before_ each cell. At the end of a row, TableNextCell() will create a new row.
-        // Note that we don't call TableNextRow() here! 
-        // If we want to call TableNextRow(), then we don't need to call TableNextCell() for the first cell.
-        HelpMarker("Only using TableNextCell(), which tends to be convenient for tables where every cells contains the same type of contents.\nThis is also more similar to the old NextColumn() function of the Columns API, and provided to facilitate the Columns->Tables API transition.");
-        if (ImGui::BeginTable("##table4", 3))
-        {
-            for (int item = 0; item < 14; item++)
-            {
-                ImGui::TableNextCell();
-                ImGui::Text("Item %d", item);
-            }
-            ImGui::EndTable();
-        }
-
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Borders, background"))
-    {
-        // Expose a few Borders related flags interactively
-        static ImGuiTableFlags flags = ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg;
-        static bool display_width = false;
-        ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
-        ImGui::CheckboxFlags("ImGuiTableFlags_Borders", (unsigned int*)&flags, ImGuiTableFlags_Borders);
-        ImGui::SameLine(); HelpMarker("ImGuiTableFlags_Borders\n = ImGuiTableFlags_BordersVInner\n | ImGuiTableFlags_BordersVOuter\n | ImGuiTableFlags_BordersHInner\n | ImGuiTableFlags_BordersHOuter");
-        ImGui::Indent();
-
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
-        ImGui::Indent();
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
-        ImGui::Unindent();
-
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
-        ImGui::Indent();
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
-        ImGui::Unindent();
-
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersInner", (unsigned int*)&flags, ImGuiTableFlags_BordersInner);
-        ImGui::Unindent();
-        ImGui::Checkbox("Debug Display width", &display_width);
-
-        if (ImGui::BeginTable("##table1", 3, flags))
-        {
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    if (display_width)
-                    {
-                        ImVec2 p = ImGui::GetCursorScreenPos();
-                        ImDrawList* draw_list = ImGui::GetWindowDrawList();
-                        float x1 = p.x;
-                        float x2 = ImGui::GetWindowPos().x + ImGui::GetContentRegionMax().x;
-                        float x3 = draw_list->GetClipRectMax().x;
-                        float y2 = p.y + ImGui::GetTextLineHeight();
-                        draw_list->AddLine(ImVec2(x1, y2), ImVec2(x3, y2), IM_COL32(255, 255, 0, 255)); // Hard clipping limit
-                        draw_list->AddLine(ImVec2(x1, y2), ImVec2(x2, y2), IM_COL32(255, 0, 0, 255));   // Normal limit
-                        ImGui::Text("w=%.2f", x2 - x1);
-                    }
-                    else
-                    {
-                        ImGui::Text("Hello %d,%d", row, column);
-                    }
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Resizable, stretch"))
-    {
-        // By default, if we don't enable ScrollX the sizing policy for each columns is "Stretch"
-        // Each columns maintain a sizing weight, and they will occupy all available width.
-        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
-        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
-        ImGui::SameLine(); HelpMarker("Using the _Resizable flag automatically enables the _BordersV flag as well.");
-        
-        if (ImGui::BeginTable("##table1", 3, flags))
-        {
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("Hello %d,%d", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Resizable, fixed"))
-    {
-        // Here we use ImGuiTableFlags_SizingPolicyFixedX (even though _ScrollX is not set)
-        // So columns will adopt the "Fixed" policy and will maintain a fixed weight regardless of the whole available width.
-        // If there is not enough available width to fit all columns, they will however be resized down.
-        // FIXME-TABLE: Providing a stretch-on-init would make sense especially for tables which don't have saved settings
-        HelpMarker("Using _Resizable + _SizingPolicyFixedX flags.\nFixed-width columns generally makes more sense if you want to use horizontal scrolling.");
-        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
-        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX); // FIXME-TABLE: Explain or fix the effect of enable Scroll on outer_size
-        if (ImGui::BeginTable("##table1", 3, flags))
-        {
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("Hello %d,%d", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Resizable, mixed"))
-    {
-        HelpMarker("Using columns flag to alter resizing policy on a per-column basis.");
-        static ImGuiTableFlags flags = ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
-        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX); // FIXME-TABLE: Explain or fix the effect of enable Scroll on outer_size
-
-        if (ImGui::BeginTable("##table1", 3, flags, ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 6)))
-        {
-            ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);// | ImGuiTableColumnFlags_NoResize);
-            ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
-            ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthStretch);
-            ImGui::TableAutoHeaders();
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("%s %d,%d", (column == 2) ? "Stretch" : "Fixed", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        if (ImGui::BeginTable("##table2", 6, flags, ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 6)))
-        {
-            ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);
-            ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
-            ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_DefaultHide);
-            ImGui::TableSetupColumn("DDD", ImGuiTableColumnFlags_WidthStretch);
-            ImGui::TableSetupColumn("EEE", ImGuiTableColumnFlags_WidthStretch);
-            ImGui::TableSetupColumn("FFF", ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_DefaultHide);
-            ImGui::TableAutoHeaders();
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 6; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("%s %d,%d", (column >= 3) ? "Stretch" : "Fixed", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Reorderable, hideable, with headers"))
-    {
-        HelpMarker("Click and drag column headers to reorder columns.\n\nYou can also right-click on a header to open a context menu.");
-        static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
-        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
-        ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", (unsigned int*)&flags, ImGuiTableFlags_Reorderable);
-        ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", (unsigned int*)&flags, ImGuiTableFlags_Hideable);
-        
-        if (ImGui::BeginTable("##table1", 3, flags))
-        {
-            // Submit columns name with TableSetupColumn() and call TableAutoHeaders() to create a row with a header in each column.
-            // (Later we will show how TableSetupColumn() has other uses, optional flags, sizing weight etc.)
-            ImGui::TableSetupColumn("One");
-            ImGui::TableSetupColumn("Two");
-            ImGui::TableSetupColumn("Three");
-            ImGui::TableAutoHeaders();
-            for (int row = 0; row < 6; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("Hello %d,%d", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Vertical scrolling, with clipping"))
-    {
-        HelpMarker("Here we activate ScrollY, which will create a child window container to allow hosting scrollable contents.\n\nWe also demonstrate using ImGuiListClipper to virtualize the submission of many items.");
-        ImVec2 size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 7);
-        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
-        
-        if (ImGui::BeginTable("##table1", 3, flags, size))
-        {
-            ImGui::TableSetupColumn("One", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
-            ImGui::TableAutoHeaders();
-            ImGuiListClipper clipper;
-            clipper.Begin(1000);
-            while (clipper.Step())
-            {
-                for (int row = clipper.DisplayStart; row < clipper.DisplayEnd; row++)
-                {
-                    ImGui::TableNextRow();
-                    for (int column = 0; column < 3; column++)
-                    {
-                        ImGui::TableSetColumnIndex(column);
-                        ImGui::Text("Hello %d,%d", row, column);
-                    }
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Horizontal scrolling"))
-    {
-        HelpMarker("When ScrollX is enabled, the default sizing policy becomes ImGuiTableFlags_SizingPolicyFixedX, as automatically stretching columns doesn't make much sense with horizontal scrolling.\n\nAlso note that as of the current version, you will almost always want to enable ScrollY along with ScrollX, because the container window won't automatically extend vertically to fix contents (this may be improved in future versions).");
-        ImVec2 size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 10);
-        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_ScrollFreezeLeftColumn | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
-
-        if (ImGui::BeginTable("##table1", 7, flags, size))
-        {
-            ImGui::TableSetupColumn("Line #", ImGuiTableColumnFlags_NoHide); // Make the first column not hideable to match our use of ImGuiTableFlags_ScrollFreezeLeftColumn
-            ImGui::TableSetupColumn("One", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Four", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Five", ImGuiTableColumnFlags_None);
-            ImGui::TableSetupColumn("Six", ImGuiTableColumnFlags_None);
-            ImGui::TableAutoHeaders();
-            for (int row = 0; row < 20; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 7; column++)
-                {
-                    // Both TableNextCell() and TableSetColumnIndex() return false when a column is not visible, which can be used for clipping.
-                    if (!ImGui::TableSetColumnIndex(column))
-                        continue;
-                    if (column == 0)
-                        ImGui::Text("Line %d", row);
-                    else
-                        ImGui::Text("Hello world %d,%d", row, column);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Columns flags"))
-    {
-        // Create a first table just to show all the options/flags we want to make visible in our example!
-        const int column_count = 3;
-        const char* column_names[column_count] = { "One", "Two", "Three" };
-        static ImGuiTableColumnFlags column_flags[column_count] = { ImGuiTableColumnFlags_DefaultSort, ImGuiTableColumnFlags_None, ImGuiTableColumnFlags_DefaultHide };
-
-        if (ImGui::BeginTable("##flags", column_count, ImGuiTableFlags_None))
-        {
-            for (int column = 0; column < column_count; column++)
-            {
-                // Make the UI compact because there are so many fields
-                ImGui::TableNextCell();
-                ImGuiStyle& style = ImGui::GetStyle();
-                ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 2));
-                ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
-                ImGui::PushID(column);
-                ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation
-                ImGui::Text("Flags for '%s'", column_names[column]);
-                ImGui::CheckboxFlags("_NoResize", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoResize);
-                ImGui::CheckboxFlags("_NoClipX", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoClipX);
-                ImGui::CheckboxFlags("_NoHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoHide);
-                ImGui::CheckboxFlags("_NoReorder", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoReorder);
-                ImGui::CheckboxFlags("_DefaultSort", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_DefaultSort);
-                ImGui::CheckboxFlags("_DefaultHide", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_DefaultHide);
-                ImGui::CheckboxFlags("_NoSort", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSort);
-                ImGui::CheckboxFlags("_NoSortAscending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSortAscending);
-                ImGui::CheckboxFlags("_NoSortDescending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_NoSortDescending);
-                ImGui::CheckboxFlags("_PreferSortAscending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_PreferSortAscending);
-                ImGui::CheckboxFlags("_PreferSortDescending", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_PreferSortDescending);
-                ImGui::CheckboxFlags("_IndentEnable", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_IndentEnable);
-                ImGui::CheckboxFlags("_IndentDisable", (unsigned int*)&column_flags[column], ImGuiTableColumnFlags_IndentDisable);
-                ImGui::PopID();
-                ImGui::PopStyleVar(2);
-            }
-            ImGui::EndTable();
-        }
-
-        // Create the real table we care about for the example!
-        const ImGuiTableFlags flags = ImGuiTableFlags_SizingPolicyFixedX | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable;
-        if (ImGui::BeginTable("##table", column_count, flags))
-        {
-            for (int column = 0; column < column_count; column++)
-                ImGui::TableSetupColumn(column_names[column], column_flags[column]);
-            ImGui::TableAutoHeaders();
-            for (int row = 0; row < 8; row++)
-            {
-                ImGui::Indent(2.0f); // Add some indentation to demonstrate usage of per-column IndentEnable/IndentDisable flags.
-                ImGui::TableNextRow();
-                for (int column = 0; column < column_count; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Text("%s %s", (column == 0) ? "Indented" : "Hello", ImGui::TableGetColumnName(column));
-                }
-            }
-            ImGui::Unindent(2.0f * 8.0f);
-
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Recursive"))
-    {
-        HelpMarker("This demonstrate embedding a table into another table cell.");
-        
-        if (ImGui::BeginTable("recurse1", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_BordersVFullHeight | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable))
-        {
-            ImGui::TableSetupColumn("A0");
-            ImGui::TableSetupColumn("A1");
-            ImGui::TableAutoHeaders();
-
-            ImGui::TableNextRow();  ImGui::Text("A0 Cell 0");
-            {
-                float rows_height = ImGui::GetTextLineHeightWithSpacing() * 2;
-                if (ImGui::BeginTable("recurse2", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_BordersVFullHeight | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable))
-                {
-                    ImGui::TableSetupColumn("B0");
-                    ImGui::TableSetupColumn("B1");
-                    ImGui::TableAutoHeaders();
-
-                    ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
-                    ImGui::Text("B0 Cell 0");
-                    ImGui::TableNextCell();
-                    ImGui::Text("B0 Cell 1");
-                    ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
-                    ImGui::Text("B1 Cell 0");
-                    ImGui::TableNextCell();
-                    ImGui::Text("B1 Cell 1");
-
-                    ImGui::EndTable();
-                }
-            }
-            ImGui::TableNextCell(); ImGui::Text("A0 Cell 1");
-            ImGui::TableNextRow();  ImGui::Text("A1 Cell 0");
-            ImGui::TableNextCell(); ImGui::Text("A1 Cell 1");
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Sizing policies, cell contents"))
-    {
-        HelpMarker("This section allows you to interact and see the effect of StretchX vs FixedX sizing policies depending on whether Scroll is enabled and the contents of your columns.");
-        enum ContentsType { CT_ShortText, CT_LongText, CT_Button, CT_StretchButton, CT_InputText };
-        static int contents_type = CT_StretchButton;
-        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 12);
-        ImGui::Combo("Contents", &contents_type, "Short Text\0Long Text\0Button\0Stretch Button\0InputText\0");
-
-        static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg;
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX);
-        ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
-        if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyStretchX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyStretchX))
-            flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyStretchX);  // Can't specify both sizing polices so we clear the other
-        ImGui::SameLine(); HelpMarker("Default if _ScrollX if disabled.");
-        if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyFixedX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyFixedX))
-            flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyFixedX);    // Can't specify both sizing polices so we clear the other
-        ImGui::SameLine(); HelpMarker("Default if _ScrollX if enabled.");
-        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
-        ImGui::CheckboxFlags("ImGuiTableFlags_NoClipX", (unsigned int*)&flags, ImGuiTableFlags_NoClipX);
-
-        if (ImGui::BeginTable("##3ways", 3, flags, ImVec2(0, 100)))
-        {
-            for (int row = 0; row < 10; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    char label[32];
-                    static char text_buf[32] = "";
-                    sprintf(label, "Hello %d,%d", row, column);
-                    switch (contents_type)
-                    {
-                    case CT_ShortText:      ImGui::TextUnformatted(label); break;
-                    case CT_LongText:       ImGui::Text("Some longer text %d,%d\nOver two lines..", row, column); break;
-                    case CT_Button:         ImGui::Button(label); break;
-                    case CT_StretchButton:  ImGui::Button(label, ImVec2(-FLT_MIN, 0.0f)); break;
-                    case CT_InputText:      ImGui::SetNextItemWidth(-FLT_MIN); ImGui::InputText("##", text_buf, IM_ARRAYSIZE(text_buf)); break;
-                    }
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Compact table"))
-    {
-        // FIXME-TABLE: Vertical border not overridden the same way as horizontal one
-        HelpMarker("Setting style.CellPadding to (0,0).");
-
-        static ImGuiTableFlags flags = ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg;
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersOuter);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
-        ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
-        ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
-        ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
-
-        static bool no_widget_frame = false;
-        ImGui::Checkbox("no_widget_frame", &no_widget_frame);
-
-        ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(0, 0));
-        if (ImGui::BeginTable("##3ways", 3, flags))
-        {
-            for (int row = 0; row < 10; row++)
-            {
-                static char text_buf[32] = "";
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::SetNextItemWidth(-FLT_MIN);
-                    ImGui::PushID(row * 3 + column);
-                    if (no_widget_frame)
-                        ImGui::PushStyleColor(ImGuiCol_FrameBg, 0);
-                    ImGui::InputText("##cell", text_buf, IM_ARRAYSIZE(text_buf));
-                    if (no_widget_frame)
-                        ImGui::PopStyleColor();
-                    ImGui::PopID();
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::PopStyleVar();
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Row height"))
-    {
-        HelpMarker("You can pass a 'min_row_height' to TableNextRow().\n\nRows are padded with 'style.CellPadding.y' on top and bottom, so effectively the minimum row height will always be >= 'style.CellPadding.y * 2.0f'.\n\nWe cannot honor a _maximum_ row height as that would requires a unique clipping rectangle per row.");
-        if (ImGui::BeginTable("##2ways", 2, ImGuiTableFlags_Borders))
-        {
-            float min_row_height = ImGui::GetFontSize() + ImGui::GetStyle().CellPadding.y * 2.0f;
-            ImGui::TableNextRow(ImGuiTableRowFlags_None, min_row_height);
-            ImGui::Text("min_row_height = %.2f", min_row_height);
-            for (int row = 0; row < 10; row++)
-            {
-                min_row_height = (float)(int)(ImGui::GetFontSize() * 0.30f * row);
-                ImGui::TableNextRow(ImGuiTableRowFlags_None, min_row_height);
-                ImGui::Text("min_row_height = %.2f", min_row_height);
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Tree view"))
-    {
-        static ImGuiTableFlags flags = ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersHOuter | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg;
-        //ImGui::CheckboxFlags("ImGuiTableFlags_Scroll", (unsigned int*)&flags, ImGuiTableFlags_Scroll);
-        //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
-
-        if (ImGui::BeginTable("##3ways", 3, flags))
-        {
-            // The first column will use the default _WidthStretch when ScrollX is Off and _WidthFixed when ScrollX is On
-            ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
-            ImGui::TableSetupColumn("Size", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 6);
-            ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed, ImGui::GetFontSize() * 10);
-            ImGui::TableAutoHeaders();
-
-            // Simple storage to output a dummy file-system.
-            struct MyTreeNode 
-            { 
-                const char*     Name; 
-                const char*     Type; 
-                int             Size; 
-                int             ChildIdx; 
-                int             ChildCount; 
-                static void DisplayNode(const MyTreeNode* node, const MyTreeNode* all_nodes)
-                {
-                    ImGui::TableNextRow();
-                    const bool is_folder = (node->ChildCount > 0);
-                    if (is_folder)
-                    {
-                        bool open = ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_SpanFullWidth);
-                        ImGui::TableNextCell();
-                        ImGui::TextDisabled("--");
-                        ImGui::TableNextCell();
-                        ImGui::TextUnformatted(node->Type);
-                        if (open)
-                        {
-                            for (int child_n = 0; child_n < node->ChildCount; child_n++)
-                                DisplayNode(&all_nodes[node->ChildIdx + child_n], all_nodes);
-                            ImGui::TreePop();
-                        }
-                    }
-                    else
-                    {
-                        ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_Bullet | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_SpanFullWidth);
-                        ImGui::TableNextCell();
-                        ImGui::Text("%d", node->Size);
-                        ImGui::TableNextCell();
-                        ImGui::TextUnformatted(node->Type);
-                    }
-                }
-            };
-            static const MyTreeNode nodes[] =
-            {
-                { "Root",                         "Folder",       -1,       1, 3    }, // 0
-                { "Music",                        "Folder",       -1,       4, 2    }, // 1
-                { "Textures",                     "Folder",       -1,       6, 3    }, // 2
-                { "desktop.ini",                  "System file",  1024,    -1,-1    }, // 3
-                { "File1_a.wav",                  "Audio file",   123000,  -1,-1    }, // 4
-                { "File1_b.wav",                  "Audio file",   456000,  -1,-1    }, // 5
-                { "Image001.png",                 "Image file",   203128,  -1,-1    }, // 6
-                { "Copy of Image001.png",         "Image file",   203256,  -1,-1    }, // 7
-                { "Copy of Image001 (Final2).png","Image file",   203512,  -1,-1    }, // 8
-            };
-
-            MyTreeNode::DisplayNode(&nodes[0], nodes);
-
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    // Demonstrate using TableHeader() calls instead of TableAutoHeaders()
-    // FIXME-TABLE: Currently this doesn't get us feature-parity with TableAutoHeaders(), e.g. missing context menu.  Tables API needs some work! 
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Custom headers"))
-    {
-        const int COLUMNS_COUNT = 3;
-        if (ImGui::BeginTable("##table1", COLUMNS_COUNT, ImGuiTableFlags_Borders | ImGuiTableFlags_Reorderable))
-        {
-            ImGui::TableSetupColumn("Apricot");
-            ImGui::TableSetupColumn("Banana");
-            ImGui::TableSetupColumn("Cherry");
-
-            // Dummy entire-column selection storage
-            // FIXME: It would be nice to actually demonstrate full-featured selection using those checkbox.
-            static bool column_selected[3] = {};
-
-            // Instead of calling TableAutoHeaders() we'll submit custom headers ourselves
-            ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
-            for (int column = 0; column < COLUMNS_COUNT; column++)
-            {
-                ImGui::TableSetColumnIndex(column);
-                const char* column_name = ImGui::TableGetColumnName(column); // Retrieve name passed to TableSetupColumn()
-                ImGui::PushID(column);
-                ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
-                ImGui::Checkbox("##checkall", &column_selected[column]);
-                ImGui::PopStyleVar();
-                ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
-                ImGui::TableHeader(column_name);
-                ImGui::PopID();
-            }
-
-            for (int row = 0; row < 5; row++)
-            {
-                ImGui::TableNextRow();
-                for (int column = 0; column < 3; column++)
-                {
-                    char buf[32];
-                    sprintf(buf, "Cell %d,%d", row, column);
-                    ImGui::TableSetColumnIndex(column);
-                    ImGui::Selectable(buf, column_selected[column]);
-                }
-            }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    static const char* template_items_names[] =
-    {
-        "Banana", "Apple", "Cherry", "Watermelon", "Grapefruit", "Strawberry", "Mango",
-        "Kiwi", "Orange", "Pineapple", "Blueberry", "Plum", "Coconut", "Pear", "Apricot"
-    };
-
-    // This is a simplified version of the "Advanced" example, where we mostly focus on the code necessary to handle sorting.
-    // Note that the "Advanced" example also showcase manually triggering a sort (e.g. if item quantities have been modified)
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Sorting"))
-    {
-        HelpMarker("Use Shift+Click to sort on multiple columns");
-
-        // Create item list
-        static ImVector<MyItem> items;
-        if (items.Size == 0)
-        {
-            items.resize(50, MyItem());
-            for (int n = 0; n < items.Size; n++)
-            {
-                const int template_n = n % IM_ARRAYSIZE(template_items_names);
-                MyItem& item = items[n];
-                item.ID = n;
-                item.Name = template_items_names[template_n];
-                item.Quantity = (n * n - n) % 20; // Assign default quantities
-            }
-        }
-
-        static ImGuiTableFlags flags =
-            ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable
-            | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV
-            | ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollFreezeTopRow;
-        if (ImGui::BeginTable("##table", 4, flags, ImVec2(0, 250), 0.0f))
-        {
-            // Declare columns
-            // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
-            // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
-            // Demonstrate using a mixture of flags among available sort-related flags:
-            // - ImGuiTableColumnFlags_DefaultSort
-            // - ImGuiTableColumnFlags_NoSort / ImGuiTableColumnFlags_NoSortAscending / ImGuiTableColumnFlags_NoSortDescending
-            // - ImGuiTableColumnFlags_PreferSortAscending / ImGuiTableColumnFlags_PreferSortDescending
-            ImGui::TableSetupColumn("ID",       ImGuiTableColumnFlags_DefaultSort          | ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_ID);
-            ImGui::TableSetupColumn("Name",                                                  ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_Name);
-            ImGui::TableSetupColumn("Action",   ImGuiTableColumnFlags_NoSort               | ImGuiTableColumnFlags_WidthFixed,   -1.0f, MyItemColumnID_Action);
-            ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, -1.0f, MyItemColumnID_Quantity);
-
-            // Sort our data if sort specs have been changed!
-            if (const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
-                if (sorts_specs->SpecsChanged && items.Size > 1)
-                {
-                    MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
-                    qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
-                    MyItem::s_current_sort_specs = NULL;
-                }
-
-            // Display data
-            ImGui::TableAutoHeaders();
-            ImGuiListClipper clipper;
-            clipper.Begin(items.Size);
-            while (clipper.Step())
-                for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
-                {
-                    MyItem* item = &items[row_n];
-                    ImGui::PushID(item->ID);
-                    ImGui::TableNextRow();
-                    ImGui::TableSetColumnIndex(0);
-                    ImGui::Text("%04d", item->ID);
-                    ImGui::TableSetColumnIndex(1);
-                    ImGui::TextUnformatted(item->Name);
-                    ImGui::TableSetColumnIndex(2);
-                    ImGui::SmallButton("None");
-                    ImGui::TableSetColumnIndex(3);
-                    ImGui::Text("%d", item->Quantity);
-                    ImGui::PopID();
-                }
-            ImGui::EndTable();
-        }
-        ImGui::TreePop();
-    }
-
-    if (open_action != -1)
-        ImGui::SetNextItemOpen(open_action != 0);
-    if (ImGui::TreeNode("Advanced"))
-    {
-        static ImGuiTableFlags flags =
-            ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable
-            | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders
-            | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY
-            | ImGuiTableFlags_ScrollFreezeTopRow | ImGuiTableFlags_ScrollFreezeLeftColumn
-            | ImGuiTableFlags_SizingPolicyFixedX
-            ;
-
-        enum ContentsType { CT_Text, CT_Button, CT_SmallButton, CT_Selectable };
-        static int contents_type = CT_Button;
-        const char* contents_type_names[] = { "Text", "Button", "SmallButton", "Selectable" };
-
-        static int items_count = IM_ARRAYSIZE(template_items_names);
-        static ImVec2 outer_size_value = ImVec2(0, 250);
-        static float row_min_height = 0.0f; // Auto
-        static float inner_width_without_scroll = 0.0f; // Fill 
-        static float inner_width_with_scroll = 0.0f; // Auto-extend
-        static bool outer_size_enabled = true;
-        static bool lock_first_column_visibility = false;
-        static bool show_headers = true;
-        static bool show_wrapped_text = false;
-        //static ImGuiTextFilter filter;
-        //ImGui::SetNextItemOpen(true, ImGuiCond_Once); // FIXME-TABLE: Enabling this results in initial clipped first pass on table which affects sizing
-        if (ImGui::TreeNodeEx("Options"))
-        {
-            // Make the UI compact because there are so many fields
-            ImGuiStyle& style = ImGui::GetStyle();
-            ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, 1));
-            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, 2));
-            ImGui::PushItemWidth(200);
-
-            ImGui::BulletText("Features:");
-            ImGui::Indent();
-            ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", (unsigned int*)&flags, ImGuiTableFlags_Resizable);
-            ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", (unsigned int*)&flags, ImGuiTableFlags_Reorderable);
-            ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", (unsigned int*)&flags, ImGuiTableFlags_Hideable);
-            ImGui::CheckboxFlags("ImGuiTableFlags_Sortable", (unsigned int*)&flags, ImGuiTableFlags_Sortable);
-            ImGui::CheckboxFlags("ImGuiTableFlags_MultiSortable", (unsigned int*)&flags, ImGuiTableFlags_MultiSortable);
-            ImGui::CheckboxFlags("ImGuiTableFlags_NoSavedSettings", (unsigned int*)&flags, ImGuiTableFlags_NoSavedSettings);
-            ImGui::Unindent();
-
-            ImGui::BulletText("Decoration:");
-            ImGui::Indent();
-            ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", (unsigned int*)&flags, ImGuiTableFlags_RowBg);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", (unsigned int*)&flags, ImGuiTableFlags_BordersV);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersVOuter);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVInner", (unsigned int*)&flags, ImGuiTableFlags_BordersVInner);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", (unsigned int*)&flags, ImGuiTableFlags_BordersH);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersHOuter", (unsigned int*)&flags, ImGuiTableFlags_BordersHOuter);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersHInner", (unsigned int*)&flags, ImGuiTableFlags_BordersHInner);
-            ImGui::CheckboxFlags("ImGuiTableFlags_BordersVFullHeight", (unsigned int*)&flags, ImGuiTableFlags_BordersVFullHeight);
-            ImGui::Unindent();
-
-            ImGui::BulletText("Padding, Sizing:");
-            ImGui::Indent();
-            ImGui::CheckboxFlags("ImGuiTableFlags_NoClipX", (unsigned int*)&flags, ImGuiTableFlags_NoClipX);
-            if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyStretchX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyStretchX))
-                flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyStretchX);  // Can't specify both sizing polices so we clear the other
-            ImGui::SameLine(); HelpMarker("[Default if ScrollX is off]\nFit all columns within available width (or specified inner_width). Fixed and Stretch columns allowed.");
-            if (ImGui::CheckboxFlags("ImGuiTableFlags_SizingPolicyFixedX", (unsigned int*)&flags, ImGuiTableFlags_SizingPolicyFixedX))
-                flags &= ~(ImGuiTableFlags_SizingPolicyMaskX_ ^ ImGuiTableFlags_SizingPolicyFixedX);    // Can't specify both sizing polices so we clear the other
-            ImGui::SameLine(); HelpMarker("[Default if ScrollX is on]\nEnlarge as needed: enable scrollbar if ScrollX is enabled, otherwise extend parent window's contents rectangle. Only Fixed columns allowed. Stretched columns will calculate their width assuming no scrolling.");
-            ImGui::CheckboxFlags("ImGuiTableFlags_NoHeadersWidth", (unsigned int*)&flags, ImGuiTableFlags_NoHeadersWidth);
-            ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendY", (unsigned int*)&flags, ImGuiTableFlags_NoHostExtendY);
-            ImGui::Unindent();
-
-            ImGui::BulletText("Scrolling:");
-            ImGui::Indent();
-            ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", (unsigned int*)&flags, ImGuiTableFlags_ScrollX);
-            ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", (unsigned int*)&flags, ImGuiTableFlags_ScrollY);
-
-            // For the purpose of our "advanced" demo, we expose the 3 freezing variants on both axises instead of only exposing the most common flag.
-            //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeTopRow", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeTopRow);
-            //ImGui::CheckboxFlags("ImGuiTableFlags_ScrollFreezeLeftColumn", (unsigned int*)&flags, ImGuiTableFlags_ScrollFreezeLeftColumn);
-            int freeze_row_count = (flags & ImGuiTableFlags_ScrollFreezeRowsMask_) >> ImGuiTableFlags_ScrollFreezeRowsShift_;
-            int freeze_col_count = (flags & ImGuiTableFlags_ScrollFreezeColumnsMask_) >> ImGuiTableFlags_ScrollFreezeColumnsShift_;
-            ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
-            if (ImGui::DragInt("ImGuiTableFlags_ScrollFreezeTopRow/2Rows/3Rows", &freeze_row_count, 0.2f, 0, 3))
-                if (freeze_row_count >= 0 && freeze_row_count <= 3)
-                    flags = (flags & ~ImGuiTableFlags_ScrollFreezeRowsMask_) | (freeze_row_count << ImGuiTableFlags_ScrollFreezeRowsShift_);
-            ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
-            if (ImGui::DragInt("ImGuiTableFlags_ScrollFreezeLeftColumn/2Columns/3Columns", &freeze_col_count, 0.2f, 0, 3))
-                if (freeze_col_count >= 0 && freeze_col_count <= 3)
-                    flags = (flags & ~ImGuiTableFlags_ScrollFreezeColumnsMask_) | (freeze_col_count << ImGuiTableFlags_ScrollFreezeColumnsShift_);
-
-            ImGui::Unindent();
-
-            ImGui::BulletText("Other:");
-            ImGui::Indent();
-            ImGui::DragFloat2("##OuterSize", &outer_size_value.x);
-            ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
-            ImGui::Checkbox("outer_size", &outer_size_enabled);
-            ImGui::SameLine();
-            HelpMarker("If scrolling is disabled (ScrollX and ScrollY not set), the table is output directly in the parent window. OuterSize.y then becomes the minimum size for the table, which will extend vertically if there are more rows (unless NoHostExtendV is set).");
-
-            // From a user point of view we will tend to use 'inner_width' differently depending on whether our table is embedding scrolling.
-            // To facilitate experimentation we expose two values and will select the right one depending on active flags.
-            if (flags & ImGuiTableFlags_ScrollX)
-                ImGui::DragFloat("inner_width (when ScrollX active)", &inner_width_with_scroll, 1.0f, 0.0f, FLT_MAX);
-            else
-                ImGui::DragFloat("inner_width (when ScrollX inactive)", &inner_width_without_scroll, 1.0f, 0.0f, FLT_MAX);
-            ImGui::DragFloat("row_min_height", &row_min_height, 1.0f, 0.0f, FLT_MAX);
-            ImGui::SameLine(); HelpMarker("Specify height of the Selectable item.");
-            ImGui::DragInt("items_count", &items_count, 0.1f, 0, 5000);
-            ImGui::Combo("contents_type (first column)", &contents_type, contents_type_names, IM_ARRAYSIZE(contents_type_names));
-            //filter.Draw("filter");
-            ImGui::Checkbox("show_headers", &show_headers);
-            ImGui::Checkbox("show_wrapped_text", &show_wrapped_text);
-            ImGui::Checkbox("lock_first_column_visibility", &lock_first_column_visibility);
-            ImGui::Unindent();
-
-            ImGui::PopItemWidth();
-            ImGui::PopStyleVar(2);
-            ImGui::Spacing();
-            ImGui::TreePop();
-        }
-
-        // Recreate/reset item list if we changed the number of items
-        static ImVector<MyItem> items;
-        static ImVector<int> selection;
-        static bool items_need_sort = false;
-        if (items.Size != items_count)
-        {
-            items.resize(items_count, MyItem());
-            for (int n = 0; n < items_count; n++)
-            {
-                const int template_n = n % IM_ARRAYSIZE(template_items_names);
-                MyItem& item = items[n];
-                item.ID = n;
-                item.Name = template_items_names[template_n];
-                item.Quantity = (template_n == 3) ? 10 : (template_n == 4) ? 20 : 0; // Assign default quantities
-            }
-        }
-
-        const ImDrawList* parent_draw_list = ImGui::GetWindowDrawList();
-        const int parent_draw_list_draw_cmd_count = parent_draw_list->CmdBuffer.Size;
-        ImVec2 table_scroll_cur, table_scroll_max; // For debug display
-        const ImDrawList* table_draw_list = NULL;  // "
-
-        const float inner_width_to_use = (flags & ImGuiTableFlags_ScrollX) ? inner_width_with_scroll : inner_width_without_scroll;
-        if (ImGui::BeginTable("##table", 6, flags, outer_size_enabled ? outer_size_value : ImVec2(0, 0), inner_width_to_use))
-        {
-            // Declare columns
-            // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
-            // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
-            ImGui::TableSetupColumn("ID",          ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | (lock_first_column_visibility ? ImGuiTableColumnFlags_NoHide : 0), -1.0f, MyItemColumnID_ID);
-            ImGui::TableSetupColumn("Name",        ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Name);
-            ImGui::TableSetupColumn("Action",      ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action);
-            ImGui::TableSetupColumn("Quantity Long Label", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Quantity);// , ImGuiTableColumnFlags_None | ImGuiTableColumnFlags_WidthAlwaysAutoResize);
-            ImGui::TableSetupColumn("Description", ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Description);// , ImGuiTableColumnFlags_WidthAlwaysAutoResize);
-            ImGui::TableSetupColumn("Hidden",      ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort);
-
-            // Sort our data if sort specs have been changed!
-            const ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
-            if (sorts_specs && sorts_specs->SpecsChanged)
-                items_need_sort = true;
-            if (sorts_specs && items_need_sort && items.Size > 1)
-            {
-                MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
-                qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
-                MyItem::s_current_sort_specs = NULL;
-            }
-            items_need_sort = false;
-
-            // Take note of whether we are currently sorting based on the Quantity field,
-            // we will use this to trigger sorting when we know the data of this column has been modified.
-            const bool sorts_specs_using_quantity = ImGui::TableGetColumnIsSorted(3);
-
-            // Show headers
-            if (show_headers)
-                ImGui::TableAutoHeaders();
-
-            // Show data
-            // FIXME-TABLE FIXME-NAV: How we can get decent up/down even though we have the buttons here?
-            ImGui::PushButtonRepeat(true);
-#if 1
-            ImGuiListClipper clipper;
-            clipper.Begin(items.Size);
-            while (clipper.Step())
-            {
-                for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
-#else
-            {
-                for (int row_n = 0; row_n < items_count; n++)
-#endif
-                {
-                    MyItem* item = &items[row_n];
-                    //if (!filter.PassFilter(item->Name))
-                    //    continue;
-
-                    const bool item_is_selected = selection.contains(item->ID);
-                    ImGui::PushID(item->ID);
-                    ImGui::TableNextRow(ImGuiTableRowFlags_None, row_min_height);
-
-                    // For the demo purpose we can select among different type of items submitted in the first column
-                    char label[32];
-                    sprintf(label, "%04d", item->ID);
-                    if (contents_type == CT_Text)
-                        ImGui::TextUnformatted(label);
-                    else if (contents_type == CT_Button)
-                        ImGui::Button(label);
-                    else if (contents_type == CT_SmallButton)
-                        ImGui::SmallButton(label);
-                    else if (contents_type == CT_Selectable)
-                    {
-                        if (ImGui::Selectable(label, item_is_selected, ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowItemOverlap, ImVec2(0, row_min_height)))
-                        {
-                            if (ImGui::GetIO().KeyCtrl)
-                            {
-                                if (item_is_selected)
-                                    selection.find_erase_unsorted(item->ID);
-                                else
-                                    selection.push_back(item->ID);
-                            }
-                            else
-                            {
-                                selection.clear();
-                                selection.push_back(item->ID);
-                            }
-                        }
-                    }
-
-                    ImGui::TableNextCell();
-                    ImGui::TextUnformatted(item->Name);
-
-                    // Here we demonstrate marking our data set as needing to be sorted again if we modified a quantity,
-                    // and we are currently sorting on the column showing the Quantity.
-                    // To avoid triggering a sort while holding the button, we only trigger it when the button has been released.
-                    // You will probably need a more advanced system in your code if you want to automatically sort when a specific entry changes.
-                    if (ImGui::TableNextCell())
-                    {
-                        if (ImGui::SmallButton("Chop")) { item->Quantity += 1; }
-                        if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
-                        ImGui::SameLine();
-                        if (ImGui::SmallButton("Eat")) { item->Quantity -= 1; }
-                        if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
-                    }
-
-                    ImGui::TableNextCell();
-                    ImGui::Text("%d", item->Quantity);
-
-                    ImGui::TableNextCell();
-                    if (show_wrapped_text)
-                        ImGui::TextWrapped("Lorem ipsum dolor sit amet");
-                    else
-                        ImGui::Text("Lorem ipsum dolor sit amet");
-
-                    ImGui::TableNextCell();
-                    ImGui::Text("1234");
-
-                    ImGui::PopID();
-                }
-            }
-            ImGui::PopButtonRepeat();
-
-            table_scroll_cur = ImVec2(ImGui::GetScrollX(), ImGui::GetScrollY());
-            table_scroll_max = ImVec2(ImGui::GetScrollMaxX(), ImGui::GetScrollMaxY());
-            table_draw_list = ImGui::GetWindowDrawList();
-            ImGui::EndTable();
-        }
-        static bool show_debug_details = false;
-        ImGui::Checkbox("Debug details", &show_debug_details);
-        if (show_debug_details && table_draw_list)
-        {
-            ImGui::SameLine(0.0f, 0.0f);
-            const int table_draw_list_draw_cmd_count = table_draw_list->CmdBuffer.Size;
-            if (table_draw_list == parent_draw_list)
-                ImGui::Text(": DrawCmd: +%d (in same window)", table_draw_list_draw_cmd_count - parent_draw_list_draw_cmd_count);
-            else
-                ImGui::Text(": DrawCmd: +%d (in child window), Scroll: (%.f/%.f) (%.f/%.f)",
-                    table_draw_list_draw_cmd_count - 1, table_scroll_cur.x, table_scroll_max.x, table_scroll_cur.y, table_scroll_max.y);
-        }
-        ImGui::TreePop();
-    }
-
-    ImGui::PopID();
-
-    ShowDemoWindowColumns();
-
-    if (disable_indent)
-        ImGui::PopStyleVar();
-}
-
-// Demonstrate old/legacy Columns API!
-// [2020: Columns are under-featured and not maintained. Prefer using the more flexible and powerful BeginTable() API!]
-static void ShowDemoWindowColumns()
-{
-    bool open = ImGui::TreeNode("Legacy Columns API");
-    ImGui::SameLine();
-    HelpMarker("Columns() is an old API! Prefer using the more flexible and powerful BeginTable() API!");
-    if (!open)
-        return;
-
-    // Basic columns
-    if (ImGui::TreeNode("Basic"))
-    {
-        ImGui::Text("Without border:");
-        ImGui::Columns(3, "mycolumns3", false);  // 3-ways, no border
-        ImGui::Separator();
-        for (int n = 0; n < 14; n++)
-        {
-            char label[32];
-            sprintf(label, "Item %d", n);
-            if (ImGui::Selectable(label)) {}
-            //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {}
-            ImGui::NextColumn();
-        }
-        ImGui::Columns(1);
-        ImGui::Separator();
-
-        ImGui::Text("With border:");
-        ImGui::Columns(4, "mycolumns"); // 4-ways, with border
-        ImGui::Separator();
-        ImGui::Text("ID"); ImGui::NextColumn();
-        ImGui::Text("Name"); ImGui::NextColumn();
-        ImGui::Text("Path"); ImGui::NextColumn();
-        ImGui::Text("Hovered"); ImGui::NextColumn();
-        ImGui::Separator();
-        const char* names[3] = { "One", "Two", "Three" };
-        const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
-        static int selected = -1;
-        for (int i = 0; i < 3; i++)
-        {
-            char label[32];
-            sprintf(label, "%04d", i);
-            if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
-                selected = i;
-            bool hovered = ImGui::IsItemHovered();
-            ImGui::NextColumn();
-            ImGui::Text(names[i]); ImGui::NextColumn();
-            ImGui::Text(paths[i]); ImGui::NextColumn();
-            ImGui::Text("%d", hovered); ImGui::NextColumn();
-        }
-        ImGui::Columns(1);
-        ImGui::Separator();
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Borders"))
-    {
-        // NB: Future columns API should allow automatic horizontal borders.
-        static bool h_borders = true;
-        static bool v_borders = true;
-        static int columns_count = 4;
-        const int lines_count = 3;
-        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
-        ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
-        if (columns_count < 2)
-            columns_count = 2;
-        ImGui::SameLine();
-        ImGui::Checkbox("horizontal", &h_borders);
-        ImGui::SameLine();
-        ImGui::Checkbox("vertical", &v_borders);
-        ImGui::Columns(columns_count, NULL, v_borders);
-        for (int i = 0; i < columns_count * lines_count; i++)
-        {
-            if (h_borders && ImGui::GetColumnIndex() == 0)
-                ImGui::Separator();
-            ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i);
-            ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
-            ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
-            ImGui::Text("Offset %.2f", ImGui::GetColumnOffset());
-            ImGui::Text("Long text that is likely to clip");
-            ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f));
-            ImGui::NextColumn();
-        }
-        ImGui::Columns(1);
-        if (h_borders)
-            ImGui::Separator();
-        ImGui::TreePop();
-    }
-
-    // Create multiple items in a same cell before switching to next column
-    if (ImGui::TreeNode("Mixed items"))
-    {
-        ImGui::Columns(3, "mixed");
-        ImGui::Separator();
-
-        ImGui::Text("Hello");
-        ImGui::Button("Banana");
-        ImGui::NextColumn();
-
-        ImGui::Text("ImGui");
-        ImGui::Button("Apple");
-        static float foo = 1.0f;
-        ImGui::InputFloat("red", &foo, 0.05f, 0, "%.3f");
-        ImGui::Text("An extra line here.");
-        ImGui::NextColumn();
-
-        ImGui::Text("Sailor");
-        ImGui::Button("Corniflower");
-        static float bar = 1.0f;
-        ImGui::InputFloat("blue", &bar, 0.05f, 0, "%.3f");
-        ImGui::NextColumn();
-
-        if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
-        if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
-        if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
-        ImGui::Columns(1);
-        ImGui::Separator();
-        ImGui::TreePop();
-    }
-
-    // Word wrapping
-    if (ImGui::TreeNode("Word-wrapping"))
-    {
-        ImGui::Columns(2, "word-wrapping");
-        ImGui::Separator();
-        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
-        ImGui::TextWrapped("Hello Left");
-        ImGui::NextColumn();
-        ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
-        ImGui::TextWrapped("Hello Right");
-        ImGui::Columns(1);
-        ImGui::Separator();
-        ImGui::TreePop();
-    }
-
-    // Scrolling columns
-    /*
-    if (ImGui::TreeNode("Vertical Scrolling"))
-    {
-        ImGui::BeginChild("##header", ImVec2(0, ImGui::GetTextLineHeightWithSpacing()+ImGui::GetStyle().ItemSpacing.y));
-        ImGui::Columns(3);
-        ImGui::Text("ID"); ImGui::NextColumn();
-        ImGui::Text("Name"); ImGui::NextColumn();
-        ImGui::Text("Path"); ImGui::NextColumn();
-        ImGui::Columns(1);
-        ImGui::Separator();
-        ImGui::EndChild();
-        ImGui::BeginChild("##scrollingregion", ImVec2(0, 60));
-        ImGui::Columns(3);
-        for (int i = 0; i < 10; i++)
-        {
-            ImGui::Text("%04d", i); ImGui::NextColumn();
-            ImGui::Text("Foobar"); ImGui::NextColumn();
-            ImGui::Text("/path/foobar/%04d/", i); ImGui::NextColumn();
-        }
-        ImGui::Columns(1);
-        ImGui::EndChild();
-        ImGui::TreePop();
-    }
-    */
-
-    if (ImGui::TreeNode("Horizontal Scrolling"))
-    {
-        ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f));
-        ImGui::BeginChild("##ScrollingRegion", ImVec2(0, ImGui::GetFontSize() * 20), false, ImGuiWindowFlags_HorizontalScrollbar);
-        ImGui::Columns(10);
-        int ITEMS_COUNT = 2000;
-        ImGuiListClipper clipper(ITEMS_COUNT);  // Also demonstrate using the clipper for large list
-        while (clipper.Step())
-        {
-            for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
-                for (int j = 0; j < 10; j++)
-                {
-                    ImGui::Text("Line %d Column %d...", i, j);
-                    ImGui::NextColumn();
-                }
-        }
-        ImGui::Columns(1);
-        ImGui::EndChild();
-        ImGui::TreePop();
-    }
-
-    if (ImGui::TreeNode("Tree"))
-    {
-        ImGui::Columns(2, "tree", true);
-        for (int x = 0; x < 3; x++)
-        {
-            bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x);
-            ImGui::NextColumn();
-            ImGui::Text("Node contents");
-            ImGui::NextColumn();
-            if (open1)
-            {
-                for (int y = 0; y < 3; y++)
-                {
-                    bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y);
-                    ImGui::NextColumn();
-                    ImGui::Text("Node contents");
-                    if (open2)
-                    {
-                        ImGui::Text("Even more contents");
-                        if (ImGui::TreeNode("Tree in column"))
-                        {
-                            ImGui::Text("The quick brown fox jumps over the lazy dog");
-                            ImGui::TreePop();
-                        }
-                    }
-                    ImGui::NextColumn();
-                    if (open2)
-                        ImGui::TreePop();
-                }
-                ImGui::TreePop();
-            }
-        }
-        ImGui::Columns(1);
-        ImGui::TreePop();
-    }
-
-    ImGui::TreePop();
-}
-
-static void ShowDemoWindowMisc()
-{
-    if (ImGui::CollapsingHeader("Filtering"))
-    {
-        // Helper class to easy setup a text filter.
-        // You may want to implement a more feature-full filtering scheme in your own application.
-        static ImGuiTextFilter filter;
-        ImGui::Text("Filter usage:\n"
-                    "  \"\"         display all lines\n"
-                    "  \"xxx\"      display lines containing \"xxx\"\n"
-                    "  \"xxx,yyy\"  display lines containing \"xxx\" or \"yyy\"\n"
-                    "  \"-xxx\"     hide lines containing \"xxx\"");
-        filter.Draw();
-        const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" };
-        for (int i = 0; i < IM_ARRAYSIZE(lines); i++)
-            if (filter.PassFilter(lines[i]))
-                ImGui::BulletText("%s", lines[i]);
-    }
-
-    if (ImGui::CollapsingHeader("Inputs, Navigation & Focus"))
-    {
-        ImGuiIO& io = ImGui::GetIO();
-
-        // Display ImGuiIO output flags
-        ImGui::Text("WantCaptureMouse: %d", io.WantCaptureMouse);
-        ImGui::Text("WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
-        ImGui::Text("WantTextInput: %d", io.WantTextInput);
-        ImGui::Text("WantSetMousePos: %d", io.WantSetMousePos);
-        ImGui::Text("NavActive: %d, NavVisible: %d", io.NavActive, io.NavVisible);
-
-        // Display Keyboard/Mouse state
-        if (ImGui::TreeNode("Keyboard, Mouse & Navigation State"))
-        {
-            if (ImGui::IsMousePosValid())
-                ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
-            else
-                ImGui::Text("Mouse pos: <INVALID>");
-            ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y);
-            ImGui::Text("Mouse down:");     for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseDownDuration[i] >= 0.0f)   { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
-            ImGui::Text("Mouse clicked:");  for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseClicked(i))          { ImGui::SameLine(); ImGui::Text("b%d", i); }
-            ImGui::Text("Mouse dbl-clicked:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDoubleClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
-            ImGui::Text("Mouse released:"); for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseReleased(i))         { ImGui::SameLine(); ImGui::Text("b%d", i); }
-            ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
-
-            ImGui::Text("Keys down:");      for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (io.KeysDownDuration[i] >= 0.0f)     { ImGui::SameLine(); ImGui::Text("%d (0x%X) (%.02f secs)", i, i, io.KeysDownDuration[i]); }
-            ImGui::Text("Keys pressed:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyPressed(i))             { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
-            ImGui::Text("Keys release:");   for (int i = 0; i < IM_ARRAYSIZE(io.KeysDown); i++) if (ImGui::IsKeyReleased(i))            { ImGui::SameLine(); ImGui::Text("%d (0x%X)", i, i); }
-            ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
-            ImGui::Text("Chars queue:");    for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine();  ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
-
-            ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f)                    { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputs[i]); }
-            ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f)    { ImGui::SameLine(); ImGui::Text("[%d]", i); }
-            ImGui::Text("NavInputs duration:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] >= 0.0f)   { ImGui::SameLine(); ImGui::Text("[%d] %.2f", i, io.NavInputsDownDuration[i]); }
-
-            ImGui::Button("Hovering me sets the\nkeyboard capture flag");
-            if (ImGui::IsItemHovered())
-                ImGui::CaptureKeyboardFromApp(true);
-            ImGui::SameLine();
-            ImGui::Button("Holding me clears the\nthe keyboard capture flag");
-            if (ImGui::IsItemActive())
-                ImGui::CaptureKeyboardFromApp(false);
-
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Tabbing"))
-        {
-            ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields.");
-            static char buf[32] = "dummy";
-            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
-            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
-            ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
-            ImGui::PushAllowKeyboardFocus(false);
-            ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
-            //ImGui::SameLine(); HelpMarker("Use ImGui::PushAllowKeyboardFocus(bool)\nto disable tabbing through certain widgets.");
-            ImGui::PopAllowKeyboardFocus();
-            ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Focus from code"))
-        {
-            bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine();
-            bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine();
-            bool focus_3 = ImGui::Button("Focus on 3");
-            int has_focus = 0;
-            static char buf[128] = "click on a button to set focus";
-
-            if (focus_1) ImGui::SetKeyboardFocusHere();
-            ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
-            if (ImGui::IsItemActive()) has_focus = 1;
-
-            if (focus_2) ImGui::SetKeyboardFocusHere();
-            ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
-            if (ImGui::IsItemActive()) has_focus = 2;
-
-            ImGui::PushAllowKeyboardFocus(false);
-            if (focus_3) ImGui::SetKeyboardFocusHere();
-            ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
-            if (ImGui::IsItemActive()) has_focus = 3;
-            ImGui::PopAllowKeyboardFocus();
-
-            if (has_focus)
-                ImGui::Text("Item with focus: %d", has_focus);
-            else
-                ImGui::Text("Item with focus: <none>");
-
-            // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
-            static float f3[3] = { 0.0f, 0.0f, 0.0f };
-            int focus_ahead = -1;
-            if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine();
-            if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine();
-            if (ImGui::Button("Focus on Z")) { focus_ahead = 2; }
-            if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
-            ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);
-
-            ImGui::TextWrapped("NB: Cursor & selection are preserved when refocusing last used item in code.");
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Dragging"))
-        {
-            ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
-            for (int button = 0; button < 3; button++)
-                ImGui::Text("IsMouseDragging(%d):\n  w/ default threshold: %d,\n  w/ zero threshold: %d\n  w/ large threshold: %d",
-                    button, ImGui::IsMouseDragging(button), ImGui::IsMouseDragging(button, 0.0f), ImGui::IsMouseDragging(button, 20.0f));
-
-            ImGui::Button("Drag Me");
-            if (ImGui::IsItemActive())
-                ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor
-
-            // Drag operations gets "unlocked" when the mouse has moved past a certain threshold (the default threshold is stored in io.MouseDragThreshold)
-            // You can request a lower or higher threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta()
-            ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
-            ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
-            ImVec2 mouse_delta = io.MouseDelta;
-            ImGui::Text("GetMouseDragDelta(0):\n  w/ default threshold: (%.1f, %.1f),\n  w/ zero threshold: (%.1f, %.1f)\nMouseDelta: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y, value_raw.x, value_raw.y, mouse_delta.x, mouse_delta.y);
-            ImGui::TreePop();
-        }
-
-        if (ImGui::TreeNode("Mouse cursors"))
-        {
-            const char* mouse_cursors_names[] = { "Arrow", "TextInput", "ResizeAll", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE", "Hand", "NotAllowed" };
-            IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_COUNT);
-
-            ImGui::Text("Current mouse cursor = %d: %s", ImGui::GetMouseCursor(), mouse_cursors_names[ImGui::GetMouseCursor()]);
-            ImGui::Text("Hover to see mouse cursors:");
-            ImGui::SameLine(); HelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it.");
-            for (int i = 0; i < ImGuiMouseCursor_COUNT; i++)
-            {
-                char label[32];
-                sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]);
-                ImGui::Bullet(); ImGui::Selectable(label, false);
-                if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
-                    ImGui::SetMouseCursor(i);
-            }
-            ImGui::TreePop();
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] About Window / ShowAboutWindow()
-// Access from Dear ImGui Demo -> Tools -> About
-//-----------------------------------------------------------------------------
-
-void ImGui::ShowAboutWindow(bool* p_open)
-{
-    if (!ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize))
-    {
-        ImGui::End();
-        return;
-    }
-    ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
-    ImGui::Separator();
-    ImGui::Text("By Omar Cornut and all Dear ImGui contributors.");
-    ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information.");
-
-    static bool show_config_info = false;
-    ImGui::Checkbox("Config/Build Information", &show_config_info);
-    if (show_config_info)
-    {
-        ImGuiIO& io = ImGui::GetIO();
-        ImGuiStyle& style = ImGui::GetStyle();
-
-        bool copy_to_clipboard = ImGui::Button("Copy to clipboard");
-        ImGui::BeginChildFrame(ImGui::GetID("cfginfos"), ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18), ImGuiWindowFlags_NoMove);
-        if (copy_to_clipboard)
-        {
-            ImGui::LogToClipboard();
-            ImGui::LogText("```\n"); // Back quotes will make the text appears without formatting when pasting to GitHub
-        }
-
-        ImGui::Text("Dear ImGui %s (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM);
-        ImGui::Separator();
-        ImGui::Text("sizeof(size_t): %d, sizeof(ImDrawIdx): %d, sizeof(ImDrawVert): %d", (int)sizeof(size_t), (int)sizeof(ImDrawIdx), (int)sizeof(ImDrawVert));
-        ImGui::Text("define: __cplusplus=%d", (int)__cplusplus);
-#ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_WIN32_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_WIN32_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
-        ImGui::Text("define: IMGUI_DISABLE_FILE_FUNCTIONS");
-#endif
-#ifdef IMGUI_DISABLE_DEFAULT_ALLOCATORS
-        ImGui::Text("define: IMGUI_DISABLE_DEFAULT_ALLOCATORS");
-#endif
-#ifdef IMGUI_USE_BGRA_PACKED_COLOR
-        ImGui::Text("define: IMGUI_USE_BGRA_PACKED_COLOR");
-#endif
-#ifdef _WIN32
-        ImGui::Text("define: _WIN32");
-#endif
-#ifdef _WIN64
-        ImGui::Text("define: _WIN64");
-#endif
-#ifdef __linux__
-        ImGui::Text("define: __linux__");
-#endif
-#ifdef __APPLE__
-        ImGui::Text("define: __APPLE__");
-#endif
-#ifdef _MSC_VER
-        ImGui::Text("define: _MSC_VER=%d", _MSC_VER);
-#endif
-#ifdef __MINGW32__
-        ImGui::Text("define: __MINGW32__");
-#endif
-#ifdef __MINGW64__
-        ImGui::Text("define: __MINGW64__");
-#endif
-#ifdef __GNUC__
-        ImGui::Text("define: __GNUC__=%d", (int)__GNUC__);
-#endif
-#ifdef __clang_version__
-        ImGui::Text("define: __clang_version__=%s", __clang_version__);
-#endif
-        ImGui::Separator();
-        ImGui::Text("io.BackendPlatformName: %s", io.BackendPlatformName ? io.BackendPlatformName : "NULL");
-        ImGui::Text("io.BackendRendererName: %s", io.BackendRendererName ? io.BackendRendererName : "NULL");
-        ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags);
-        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard)        ImGui::Text(" NavEnableKeyboard");
-        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad)         ImGui::Text(" NavEnableGamepad");
-        if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos)     ImGui::Text(" NavEnableSetMousePos");
-        if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard)     ImGui::Text(" NavNoCaptureKeyboard");
-        if (io.ConfigFlags & ImGuiConfigFlags_NoMouse)                  ImGui::Text(" NoMouse");
-        if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange)      ImGui::Text(" NoMouseCursorChange");
-        if (io.MouseDrawCursor)                                         ImGui::Text("io.MouseDrawCursor");
-        if (io.ConfigMacOSXBehaviors)                                   ImGui::Text("io.ConfigMacOSXBehaviors");
-        if (io.ConfigInputTextCursorBlink)                              ImGui::Text("io.ConfigInputTextCursorBlink");
-        if (io.ConfigWindowsResizeFromEdges)                            ImGui::Text("io.ConfigWindowsResizeFromEdges");
-        if (io.ConfigWindowsMoveFromTitleBarOnly)                       ImGui::Text("io.ConfigWindowsMoveFromTitleBarOnly");
-        if (io.ConfigWindowsMemoryCompactTimer >= 0.0f)                 ImGui::Text("io.ConfigWindowsMemoryCompactTimer = %.1ff", io.ConfigWindowsMemoryCompactTimer);
-        ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags);
-        if (io.BackendFlags & ImGuiBackendFlags_HasGamepad)             ImGui::Text(" HasGamepad");
-        if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)        ImGui::Text(" HasMouseCursors");
-        if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos)         ImGui::Text(" HasSetMousePos");
-        if (io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)   ImGui::Text(" RendererHasVtxOffset");
-        ImGui::Separator();
-        ImGui::Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight);
-        ImGui::Text("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y);
-        ImGui::Text("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
-        ImGui::Separator();
-        ImGui::Text("style.WindowPadding: %.2f,%.2f", style.WindowPadding.x, style.WindowPadding.y);
-        ImGui::Text("style.WindowBorderSize: %.2f", style.WindowBorderSize);
-        ImGui::Text("style.FramePadding: %.2f,%.2f", style.FramePadding.x, style.FramePadding.y);
-        ImGui::Text("style.FrameRounding: %.2f", style.FrameRounding);
-        ImGui::Text("style.FrameBorderSize: %.2f", style.FrameBorderSize);
-        ImGui::Text("style.ItemSpacing: %.2f,%.2f", style.ItemSpacing.x, style.ItemSpacing.y);
-        ImGui::Text("style.ItemInnerSpacing: %.2f,%.2f", style.ItemInnerSpacing.x, style.ItemInnerSpacing.y);
-
-        if (copy_to_clipboard)
-        {
-            ImGui::LogText("\n```\n");
-            ImGui::LogFinish();
-        }
-        ImGui::EndChildFrame();
-    }
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Style Editor / ShowStyleEditor()
-//-----------------------------------------------------------------------------
-// - ShowStyleSelector()
-// - ShowFontSelector()
-// - ShowStyleEditor()
-//-----------------------------------------------------------------------------
-
-// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
-// Here we use the simplified Combo() api that packs items into a single literal string. Useful for quick combo boxes where the choices are known locally.
-bool ImGui::ShowStyleSelector(const char* label)
-{
-    static int style_idx = -1;
-    if (ImGui::Combo(label, &style_idx, "Classic\0Dark\0Light\0"))
-    {
-        switch (style_idx)
-        {
-        case 0: ImGui::StyleColorsClassic(); break;
-        case 1: ImGui::StyleColorsDark(); break;
-        case 2: ImGui::StyleColorsLight(); break;
-        }
-        return true;
-    }
-    return false;
-}
-
-// Demo helper function to select among loaded fonts.
-// Here we use the regular BeginCombo()/EndCombo() api which is more the more flexible one.
-void ImGui::ShowFontSelector(const char* label)
-{
-    ImGuiIO& io = ImGui::GetIO();
-    ImFont* font_current = ImGui::GetFont();
-    if (ImGui::BeginCombo(label, font_current->GetDebugName()))
-    {
-        for (int n = 0; n < io.Fonts->Fonts.Size; n++)
-        {
-            ImFont* font = io.Fonts->Fonts[n];
-            ImGui::PushID((void*)font);
-            if (ImGui::Selectable(font->GetDebugName(), font == font_current))
-                io.FontDefault = font;
-            ImGui::PopID();
-        }
-        ImGui::EndCombo();
-    }
-    ImGui::SameLine();
-    HelpMarker(
-        "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n"
-        "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
-        "- Read FAQ and docs/FONTS.txt for more details.\n"
-        "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame().");
-}
-
-void ImGui::ShowStyleEditor(ImGuiStyle* ref)
-{
-    // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it compares to an internally stored reference)
-    ImGuiStyle& style = ImGui::GetStyle();
-    static ImGuiStyle ref_saved_style;
-
-    // Default to using internal storage as reference
-    static bool init = true;
-    if (init && ref == NULL)
-        ref_saved_style = style;
-    init = false;
-    if (ref == NULL)
-        ref = &ref_saved_style;
-
-    ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.50f);
-
-    if (ImGui::ShowStyleSelector("Colors##Selector"))
-        ref_saved_style = style;
-    ImGui::ShowFontSelector("Fonts##Selector");
-
-    // Simplified Settings
-    if (ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f"))
-        style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding
-    { bool window_border = (style.WindowBorderSize > 0.0f); if (ImGui::Checkbox("WindowBorder", &window_border)) style.WindowBorderSize = window_border ? 1.0f : 0.0f; }
-    ImGui::SameLine();
-    { bool frame_border = (style.FrameBorderSize > 0.0f); if (ImGui::Checkbox("FrameBorder", &frame_border)) style.FrameBorderSize = frame_border ? 1.0f : 0.0f; }
-    ImGui::SameLine();
-    { bool popup_border = (style.PopupBorderSize > 0.0f); if (ImGui::Checkbox("PopupBorder", &popup_border)) style.PopupBorderSize = popup_border ? 1.0f : 0.0f; }
-
-    // Save/Revert button
-    if (ImGui::Button("Save Ref"))
-        *ref = ref_saved_style = style;
-    ImGui::SameLine();
-    if (ImGui::Button("Revert Ref"))
-        style = *ref;
-    ImGui::SameLine();
-    HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. Use \"Export\" below to save them somewhere.");
-
-    ImGui::Separator();
-
-    if (ImGui::BeginTabBar("##tabs", ImGuiTabBarFlags_None))
-    {
-        if (ImGui::BeginTabItem("Sizes"))
-        {
-            ImGui::Text("Main");
-            ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat2("CellPadding", (float*)&style.CellPadding, 0.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
-            ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
-            ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
-            ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
-            ImGui::Text("Borders");
-            ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
-            ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
-            ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
-            ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
-            ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f");
-            ImGui::Text("Rounding");
-            ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::SliderFloat("TabRounding", &style.TabRounding, 0.0f, 12.0f, "%.0f");
-            ImGui::Text("Alignment");
-            ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
-            int window_menu_button_position = style.WindowMenuButtonPosition + 1;
-            if (ImGui::Combo("WindowMenuButtonPosition", (int*)&window_menu_button_position, "None\0Left\0Right\0"))
-                style.WindowMenuButtonPosition = window_menu_button_position - 1;
-            ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0");
-            ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content.");
-            ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Alignment applies when a selectable is larger than its text content.");
-            ImGui::Text("Safe Area Padding"); ImGui::SameLine(); HelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
-            ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
-            ImGui::EndTabItem();
-        }
-
-        if (ImGui::BeginTabItem("Colors"))
-        {
-            static int output_dest = 0;
-            static bool output_only_modified = true;
-            if (ImGui::Button("Export"))
-            {
-                if (output_dest == 0)
-                    ImGui::LogToClipboard();
-                else
-                    ImGui::LogToTTY();
-                ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
-                for (int i = 0; i < ImGuiCol_COUNT; i++)
-                {
-                    const ImVec4& col = style.Colors[i];
-                    const char* name = ImGui::GetStyleColorName(i);
-                    if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
-                        ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE, name, 23 - (int)strlen(name), "", col.x, col.y, col.z, col.w);
-                }
-                ImGui::LogFinish();
-            }
-            ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");
-            ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
-
-            static ImGuiTextFilter filter;
-            filter.Draw("Filter colors", ImGui::GetFontSize() * 16);
-
-            static ImGuiColorEditFlags alpha_flags = 0;
-            if (ImGui::RadioButton("Opaque", alpha_flags == 0))                                     { alpha_flags = 0; } ImGui::SameLine();
-            if (ImGui::RadioButton("Alpha",  alpha_flags == ImGuiColorEditFlags_AlphaPreview))      { alpha_flags = ImGuiColorEditFlags_AlphaPreview; } ImGui::SameLine();
-            if (ImGui::RadioButton("Both",   alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf))  { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine();
-            HelpMarker("In the color list:\nLeft-click on colored square to open color picker,\nRight-click to open edit options menu.");
-
-            ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
-            ImGui::PushItemWidth(-160);
-            for (int i = 0; i < ImGuiCol_COUNT; i++)
-            {
-                const char* name = ImGui::GetStyleColorName(i);
-                if (!filter.PassFilter(name))
-                    continue;
-                ImGui::PushID(i);
-                ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
-                if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
-                {
-                    // Tips: in a real user application, you may want to merge and use an icon font into the main font, so instead of "Save"/"Revert" you'd use icons.
-                    // Read the FAQ and docs/FONTS.txt about using icon fonts. It's really easy and super convenient!
-                    ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) ref->Colors[i] = style.Colors[i];
-                    ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) style.Colors[i] = ref->Colors[i];
-                }
-                ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
-                ImGui::TextUnformatted(name);
-                ImGui::PopID();
-            }
-            ImGui::PopItemWidth();
-            ImGui::EndChild();
-
-            ImGui::EndTabItem();
-        }
-
-        if (ImGui::BeginTabItem("Fonts"))
-        {
-            ImGuiIO& io = ImGui::GetIO();
-            ImFontAtlas* atlas = io.Fonts;
-            HelpMarker("Read FAQ and docs/FONTS.txt for details on font loading.");
-            ImGui::PushItemWidth(120);
-            for (int i = 0; i < atlas->Fonts.Size; i++)
-            {
-                ImFont* font = atlas->Fonts[i];
-                ImGui::PushID(font);
-                bool font_details_opened = ImGui::TreeNode(font, "Font %d: \"%s\"\n%.2f px, %d glyphs, %d file(s)", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size, font->ConfigDataCount);
-                ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) { io.FontDefault = font; }
-                if (font_details_opened)
-                {
-                    ImGui::PushFont(font);
-                    ImGui::Text("The quick brown fox jumps over the lazy dog");
-                    ImGui::PopFont();
-                    ImGui::DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f");   // Scale only this font
-                    ImGui::SameLine(); HelpMarker("Note than the default embedded font is NOT meant to be scaled.\n\nFont are currently rendered into bitmaps at a given size at the time of building the atlas. You may oversample them to get some flexibility with scaling. You can also render at multiple sizes and select which one to use at runtime.\n\n(Glimmer of hope: the atlas system should hopefully be rewritten in the future to make scaling more natural and automatic.)");
-                    ImGui::InputFloat("Font offset", &font->DisplayOffset.y, 1, 1, "%.0f");
-                    ImGui::Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
-                    ImGui::Text("Fallback character: '%c' (U+%04X)", font->FallbackChar, font->FallbackChar);
-                    ImGui::Text("Ellipsis character: '%c' (U+%04X)", font->EllipsisChar, font->EllipsisChar);
-                    const float surface_sqrt = sqrtf((float)font->MetricsTotalSurface);
-                    ImGui::Text("Texture Area: about %d px ~%dx%d px", font->MetricsTotalSurface, (int)surface_sqrt, (int)surface_sqrt);
-                    for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
-                        if (font->ConfigData)
-                            if (const ImFontConfig* cfg = &font->ConfigData[config_i])
-                                ImGui::BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d", config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH);
-                    if (ImGui::TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
-                    {
-                        // Display all glyphs of the fonts in separate pages of 256 characters
-                        for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256)
-                        {
-                            // Skip ahead if a large bunch of glyphs are not present in the font (test in chunks of 4k)
-                            // This is only a small optimization to reduce the number of iterations when IM_UNICODE_MAX_CODEPOINT is large.
-                            // (if ImWchar==ImWchar32 we will do at least about 272 queries here)
-                            if (!(base & 4095) && font->IsGlyphRangeUnused(base, base + 4095))
-                            {
-                                base += 4096 - 256;
-                                continue;
-                            }
-
-                            int count = 0;
-                            for (unsigned int n = 0; n < 256; n++)
-                                count += font->FindGlyphNoFallback((ImWchar)(base + n)) ? 1 : 0;
-                            if (count > 0 && ImGui::TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base + 255, count, count > 1 ? "glyphs" : "glyph"))
-                            {
-                                float cell_size = font->FontSize * 1;
-                                float cell_spacing = style.ItemSpacing.y;
-                                ImVec2 base_pos = ImGui::GetCursorScreenPos();
-                                ImDrawList* draw_list = ImGui::GetWindowDrawList();
-                                for (unsigned int n = 0; n < 256; n++)
-                                {
-                                    ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing));
-                                    ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size);
-                                    const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n));
-                                    draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50));
-                                    if (glyph)
-                                        font->RenderChar(draw_list, cell_size, cell_p1, ImGui::GetColorU32(ImGuiCol_Text), (ImWchar)(base + n)); // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions available to generate a string.
-                                    if (glyph && ImGui::IsMouseHoveringRect(cell_p1, cell_p2))
-                                    {
-                                        ImGui::BeginTooltip();
-                                        ImGui::Text("Codepoint: U+%04X", base + n);
-                                        ImGui::Separator();
-                                        ImGui::Text("Visible: %d", glyph->Visible);
-                                        ImGui::Text("AdvanceX: %.1f", glyph->AdvanceX);
-                                        ImGui::Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
-                                        ImGui::Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
-                                        ImGui::EndTooltip();
-                                    }
-                                }
-                                ImGui::Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16));
-                                ImGui::TreePop();
-                            }
-                        }
-                        ImGui::TreePop();
-                    }
-                    ImGui::TreePop();
-                }
-                ImGui::PopID();
-            }
-            if (ImGui::TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
-            {
-                ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
-                ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
-                ImGui::Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0, 0), ImVec2(1, 1), tint_col, border_col);
-                ImGui::TreePop();
-            }
-
-            HelpMarker("Those are old settings provided for convenience.\nHowever, the _correct_ way of scaling your UI is currently to reload your font at the designed size, rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.");
-            static float window_scale = 1.0f;
-            if (ImGui::DragFloat("window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.2f"))   // scale only this window
-                ImGui::SetWindowFontScale(window_scale);
-            ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, 0.3f, 2.0f, "%.2f");      // scale everything
-            ImGui::PopItemWidth();
-
-            ImGui::EndTabItem();
-        }
-
-        if (ImGui::BeginTabItem("Rendering"))
-        {
-            ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines); ImGui::SameLine(); HelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
-            ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
-            ImGui::PushItemWidth(100);
-            ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f");
-            if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
-            ImGui::DragFloat("Circle segment Max Error", &style.CircleSegmentMaxError, 0.01f, 0.10f, 10.0f, "%.2f");
-            ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero.
-            ImGui::PopItemWidth();
-
-            ImGui::EndTabItem();
-        }
-
-        ImGui::EndTabBar();
-    }
-
-    ImGui::PopItemWidth();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
-//-----------------------------------------------------------------------------
-// - ShowExampleAppMainMenuBar()
-// - ShowExampleMenuFile()
-//-----------------------------------------------------------------------------
-
-// Demonstrate creating a "main" fullscreen menu bar and populating it.
-// Note the difference between BeginMainMenuBar() and BeginMenuBar():
-// - BeginMenuBar() = menu-bar inside current window we Begin()-ed into (the window needs the ImGuiWindowFlags_MenuBar flag)
-// - BeginMainMenuBar() = helper to create menu-bar-sized window at the top of the main viewport + call BeginMenuBar() into it.
-static void ShowExampleAppMainMenuBar()
-{
-    if (ImGui::BeginMainMenuBar())
-    {
-        if (ImGui::BeginMenu("File"))
-        {
-            ShowExampleMenuFile();
-            ImGui::EndMenu();
-        }
-        if (ImGui::BeginMenu("Edit"))
-        {
-            if (ImGui::MenuItem("Undo", "CTRL+Z")) {}
-            if (ImGui::MenuItem("Redo", "CTRL+Y", false, false)) {}  // Disabled item
-            ImGui::Separator();
-            if (ImGui::MenuItem("Cut", "CTRL+X")) {}
-            if (ImGui::MenuItem("Copy", "CTRL+C")) {}
-            if (ImGui::MenuItem("Paste", "CTRL+V")) {}
-            ImGui::EndMenu();
-        }
-        ImGui::EndMainMenuBar();
-    }
-}
-
-// Note that shortcuts are currently provided for display only (future version will add flags to BeginMenu to process shortcuts)
-static void ShowExampleMenuFile()
-{
-    ImGui::MenuItem("(dummy menu)", NULL, false, false);
-    if (ImGui::MenuItem("New")) {}
-    if (ImGui::MenuItem("Open", "Ctrl+O")) {}
-    if (ImGui::BeginMenu("Open Recent"))
-    {
-        ImGui::MenuItem("fish_hat.c");
-        ImGui::MenuItem("fish_hat.inl");
-        ImGui::MenuItem("fish_hat.h");
-        if (ImGui::BeginMenu("More.."))
-        {
-            ImGui::MenuItem("Hello");
-            ImGui::MenuItem("Sailor");
-            if (ImGui::BeginMenu("Recurse.."))
-            {
-                ShowExampleMenuFile();
-                ImGui::EndMenu();
-            }
-            ImGui::EndMenu();
-        }
-        ImGui::EndMenu();
-    }
-    if (ImGui::MenuItem("Save", "Ctrl+S")) {}
-    if (ImGui::MenuItem("Save As..")) {}
-
-    ImGui::Separator();
-    if (ImGui::BeginMenu("Options"))
-    {
-        static bool enabled = true;
-        ImGui::MenuItem("Enabled", "", &enabled);
-        ImGui::BeginChild("child", ImVec2(0, 60), true);
-        for (int i = 0; i < 10; i++)
-            ImGui::Text("Scrolling Text %d", i);
-        ImGui::EndChild();
-        static float f = 0.5f;
-        static int n = 0;
-        ImGui::SliderFloat("Value", &f, 0.0f, 1.0f);
-        ImGui::InputFloat("Input", &f, 0.1f);
-        ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0");
-        ImGui::EndMenu();
-    }
-
-    if (ImGui::BeginMenu("Colors"))
-    {
-        float sz = ImGui::GetTextLineHeight();
-        for (int i = 0; i < ImGuiCol_COUNT; i++)
-        {
-            const char* name = ImGui::GetStyleColorName((ImGuiCol)i);
-            ImVec2 p = ImGui::GetCursorScreenPos();
-            ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x+sz, p.y+sz), ImGui::GetColorU32((ImGuiCol)i));
-            ImGui::Dummy(ImVec2(sz, sz));
-            ImGui::SameLine();
-            ImGui::MenuItem(name);
-        }
-        ImGui::EndMenu();
-    }
-
-    // Here we demonstrate appending again to the "Options" menu (which we already created above)
-    // Of course in this demo it is a little bit silly that this function calls BeginMenu("Options") twice.
-    // In a real code-base using it would make senses to use this feature from very different code locations.
-    if (ImGui::BeginMenu("Options")) // <-- Append!
-    {
-        static bool b = true;
-        ImGui::Checkbox("SomeOption", &b);
-        ImGui::EndMenu();
-    }
-
-    if (ImGui::BeginMenu("Disabled", false)) // Disabled
-    {
-        IM_ASSERT(0);
-    }
-    if (ImGui::MenuItem("Checked", NULL, true)) {}
-    if (ImGui::MenuItem("Quit", "Alt+F4")) {}
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
-//-----------------------------------------------------------------------------
-
-// Demonstrate creating a simple console window, with scrolling, filtering, completion and history.
-// For the console example, here we are using a more C++ like approach of declaring a class to hold the data and the functions.
-struct ExampleAppConsole
-{
-    char                  InputBuf[256];
-    ImVector<char*>       Items;
-    ImVector<const char*> Commands;
-    ImVector<char*>       History;
-    int                   HistoryPos;    // -1: new line, 0..History.Size-1 browsing history.
-    ImGuiTextFilter       Filter;
-    bool                  AutoScroll;
-    bool                  ScrollToBottom;
-
-    ExampleAppConsole()
-    {
-        ClearLog();
-        memset(InputBuf, 0, sizeof(InputBuf));
-        HistoryPos = -1;
-        Commands.push_back("HELP");
-        Commands.push_back("HISTORY");
-        Commands.push_back("CLEAR");
-        Commands.push_back("CLASSIFY");  // "classify" is only here to provide an example of "C"+[tab] completing to "CL" and displaying matches.
-        AutoScroll = true;
-        ScrollToBottom = false;
-        AddLog("Welcome to Dear ImGui!");
-    }
-    ~ExampleAppConsole()
-    {
-        ClearLog();
-        for (int i = 0; i < History.Size; i++)
-            free(History[i]);
-    }
-
-    // Portable helpers
-    static int   Stricmp(const char* str1, const char* str2)         { int d; while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; } return d; }
-    static int   Strnicmp(const char* str1, const char* str2, int n) { int d = 0; while (n > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; n--; } return d; }
-    static char* Strdup(const char *str)                             { size_t len = strlen(str) + 1; void* buf = malloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)str, len); }
-    static void  Strtrim(char* str)                                  { char* str_end = str + strlen(str); while (str_end > str && str_end[-1] == ' ') str_end--; *str_end = 0; }
-
-    void    ClearLog()
-    {
-        for (int i = 0; i < Items.Size; i++)
-            free(Items[i]);
-        Items.clear();
-    }
-
-    void    AddLog(const char* fmt, ...) IM_FMTARGS(2)
-    {
-        // FIXME-OPT
-        char buf[1024];
-        va_list args;
-        va_start(args, fmt);
-        vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
-        buf[IM_ARRAYSIZE(buf)-1] = 0;
-        va_end(args);
-        Items.push_back(Strdup(buf));
-    }
-
-    void    Draw(const char* title, bool* p_open)
-    {
-        ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
-        if (!ImGui::Begin(title, p_open))
-        {
-            ImGui::End();
-            return;
-        }
-
-        // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar. So e.g. IsItemHovered() will return true when hovering the title bar.
-        // Here we create a context menu only available from the title bar.
-        if (ImGui::BeginPopupContextItem())
-        {
-            if (ImGui::MenuItem("Close Console"))
-                *p_open = false;
-            ImGui::EndPopup();
-        }
-
-        ImGui::TextWrapped("This example implements a console with basic coloring, completion and history. A more elaborate implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
-        ImGui::TextWrapped("Enter 'HELP' for help, press TAB to use text completion.");
-
-        // TODO: display items starting from the bottom
-
-        if (ImGui::SmallButton("Add Dummy Text"))  { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine();
-        if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine();
-        if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine();
-        bool copy_to_clipboard = ImGui::SmallButton("Copy");
-        //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
-
-        ImGui::Separator();
-
-        // Options menu
-        if (ImGui::BeginPopup("Options"))
-        {
-            ImGui::Checkbox("Auto-scroll", &AutoScroll);
-            ImGui::EndPopup();
-        }
-
-        // Options, Filter
-        if (ImGui::Button("Options"))
-            ImGui::OpenPopup("Options");
-        ImGui::SameLine();
-        Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
-        ImGui::Separator();
-
-        const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing(); // 1 separator, 1 input text
-        ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags_HorizontalScrollbar); // Leave room for 1 separator + 1 InputText
-        if (ImGui::BeginPopupContextWindow())
-        {
-            if (ImGui::Selectable("Clear")) ClearLog();
-            ImGui::EndPopup();
-        }
-
-        // Display every line as a separate entry so we can change their color or add custom widgets. If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end());
-        // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping to only process visible items.
-        // You can seek and display only the lines that are visible using the ImGuiListClipper helper, if your elements are evenly spaced and you have cheap random access to the elements.
-        // To use the clipper we could replace the 'for (int i = 0; i < Items.Size; i++)' loop with:
-        //     ImGuiListClipper clipper(Items.Size);
-        //     while (clipper.Step())
-        //         for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
-        // However, note that you can not use this code as is if a filter is active because it breaks the 'cheap random-access' property. We would need random-access on the post-filtered list.
-        // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices that passed the filtering test, recomputing this array when user changes the filter,
-        // and appending newly elements as they are inserted. This is left as a task to the user until we can manage to improve this example code!
-        // If your items are of variable size you may want to implement code similar to what ImGuiListClipper does. Or split your data into fixed height items to allow random-seeking into your list.
-        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing
-        if (copy_to_clipboard)
-            ImGui::LogToClipboard();
-        for (int i = 0; i < Items.Size; i++)
-        {
-            const char* item = Items[i];
-            if (!Filter.PassFilter(item))
-                continue;
-
-            // Normally you would store more information in your item (e.g. make Items[] an array of structure, store color/type etc.)
-            bool pop_color = false;
-            if (strstr(item, "[error]"))            { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.4f, 0.4f, 1.0f)); pop_color = true; }
-            else if (strncmp(item, "# ", 2) == 0)   { ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.8f, 0.6f, 1.0f)); pop_color = true; }
-            ImGui::TextUnformatted(item);
-            if (pop_color)
-                ImGui::PopStyleColor();
-        }
-        if (copy_to_clipboard)
-            ImGui::LogFinish();
-
-        if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
-            ImGui::SetScrollHereY(1.0f);
-        ScrollToBottom = false;
-
-        ImGui::PopStyleVar();
-        ImGui::EndChild();
-        ImGui::Separator();
-
-        // Command-line
-        bool reclaim_focus = false;
-        if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this))
-        {
-            char* s = InputBuf;
-            Strtrim(s);
-            if (s[0])
-                ExecCommand(s);
-            strcpy(s, "");
-            reclaim_focus = true;
-        }
-
-        // Auto-focus on window apparition
-        ImGui::SetItemDefaultFocus();
-        if (reclaim_focus)
-            ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget
-
-        ImGui::End();
-    }
-
-    void    ExecCommand(const char* command_line)
-    {
-        AddLog("# %s\n", command_line);
-
-        // Insert into history. First find match and delete it so it can be pushed to the back. This isn't trying to be smart or optimal.
-        HistoryPos = -1;
-        for (int i = History.Size-1; i >= 0; i--)
-            if (Stricmp(History[i], command_line) == 0)
-            {
-                free(History[i]);
-                History.erase(History.begin() + i);
-                break;
-            }
-        History.push_back(Strdup(command_line));
-
-        // Process command
-        if (Stricmp(command_line, "CLEAR") == 0)
-        {
-            ClearLog();
-        }
-        else if (Stricmp(command_line, "HELP") == 0)
-        {
-            AddLog("Commands:");
-            for (int i = 0; i < Commands.Size; i++)
-                AddLog("- %s", Commands[i]);
-        }
-        else if (Stricmp(command_line, "HISTORY") == 0)
-        {
-            int first = History.Size - 10;
-            for (int i = first > 0 ? first : 0; i < History.Size; i++)
-                AddLog("%3d: %s\n", i, History[i]);
-        }
-        else
-        {
-            AddLog("Unknown command: '%s'\n", command_line);
-        }
-
-        // On commad input, we scroll to bottom even if AutoScroll==false
-        ScrollToBottom = true;
-    }
-
-    static int TextEditCallbackStub(ImGuiInputTextCallbackData* data) // In C++11 you are better off using lambdas for this sort of forwarding callbacks
-    {
-        ExampleAppConsole* console = (ExampleAppConsole*)data->UserData;
-        return console->TextEditCallback(data);
-    }
-
-    int     TextEditCallback(ImGuiInputTextCallbackData* data)
-    {
-        //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd);
-        switch (data->EventFlag)
-        {
-        case ImGuiInputTextFlags_CallbackCompletion:
-            {
-                // Example of TEXT COMPLETION
-
-                // Locate beginning of current word
-                const char* word_end = data->Buf + data->CursorPos;
-                const char* word_start = word_end;
-                while (word_start > data->Buf)
-                {
-                    const char c = word_start[-1];
-                    if (c == ' ' || c == '\t' || c == ',' || c == ';')
-                        break;
-                    word_start--;
-                }
-
-                // Build a list of candidates
-                ImVector<const char*> candidates;
-                for (int i = 0; i < Commands.Size; i++)
-                    if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) == 0)
-                        candidates.push_back(Commands[i]);
-
-                if (candidates.Size == 0)
-                {
-                    // No match
-                    AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start);
-                }
-                else if (candidates.Size == 1)
-                {
-                    // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing
-                    data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start));
-                    data->InsertChars(data->CursorPos, candidates[0]);
-                    data->InsertChars(data->CursorPos, " ");
-                }
-                else
-                {
-                    // Multiple matches. Complete as much as we can, so inputing "C" will complete to "CL" and display "CLEAR" and "CLASSIFY"
-                    int match_len = (int)(word_end - word_start);
-                    for (;;)
-                    {
-                        int c = 0;
-                        bool all_candidates_matches = true;
-                        for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
-                            if (i == 0)
-                                c = toupper(candidates[i][match_len]);
-                            else if (c == 0 || c != toupper(candidates[i][match_len]))
-                                all_candidates_matches = false;
-                        if (!all_candidates_matches)
-                            break;
-                        match_len++;
-                    }
-
-                    if (match_len > 0)
-                    {
-                        data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start));
-                        data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len);
-                    }
-
-                    // List matches
-                    AddLog("Possible matches:\n");
-                    for (int i = 0; i < candidates.Size; i++)
-                        AddLog("- %s\n", candidates[i]);
-                }
-
-                break;
-            }
-        case ImGuiInputTextFlags_CallbackHistory:
-            {
-                // Example of HISTORY
-                const int prev_history_pos = HistoryPos;
-                if (data->EventKey == ImGuiKey_UpArrow)
-                {
-                    if (HistoryPos == -1)
-                        HistoryPos = History.Size - 1;
-                    else if (HistoryPos > 0)
-                        HistoryPos--;
-                }
-                else if (data->EventKey == ImGuiKey_DownArrow)
-                {
-                    if (HistoryPos != -1)
-                        if (++HistoryPos >= History.Size)
-                            HistoryPos = -1;
-                }
-
-                // A better implementation would preserve the data on the current input line along with cursor position.
-                if (prev_history_pos != HistoryPos)
-                {
-                    const char* history_str = (HistoryPos >= 0) ? History[HistoryPos] : "";
-                    data->DeleteChars(0, data->BufTextLen);
-                    data->InsertChars(0, history_str);
-                }
-            }
-        }
-        return 0;
-    }
-};
-
-static void ShowExampleAppConsole(bool* p_open)
-{
-    static ExampleAppConsole console;
-    console.Draw("Example: Console", p_open);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Debug Log / ShowExampleAppLog()
-//-----------------------------------------------------------------------------
-
-// Usage:
-//  static ExampleAppLog my_log;
-//  my_log.AddLog("Hello %d world\n", 123);
-//  my_log.Draw("title");
-struct ExampleAppLog
-{
-    ImGuiTextBuffer     Buf;
-    ImGuiTextFilter     Filter;
-    ImVector<int>       LineOffsets;        // Index to lines offset. We maintain this with AddLog() calls, allowing us to have a random access on lines
-    bool                AutoScroll;     // Keep scrolling if already at the bottom
-
-    ExampleAppLog()
-    {
-        AutoScroll = true;
-        Clear();
-    }
-
-    void    Clear()
-    {
-        Buf.clear();
-        LineOffsets.clear();
-        LineOffsets.push_back(0);
-    }
-
-    void    AddLog(const char* fmt, ...) IM_FMTARGS(2)
-    {
-        int old_size = Buf.size();
-        va_list args;
-        va_start(args, fmt);
-        Buf.appendfv(fmt, args);
-        va_end(args);
-        for (int new_size = Buf.size(); old_size < new_size; old_size++)
-            if (Buf[old_size] == '\n')
-                LineOffsets.push_back(old_size + 1);
-    }
-
-    void    Draw(const char* title, bool* p_open = NULL)
-    {
-        if (!ImGui::Begin(title, p_open))
-        {
-            ImGui::End();
-            return;
-        }
-
-        // Options menu
-        if (ImGui::BeginPopup("Options"))
-        {
-            ImGui::Checkbox("Auto-scroll", &AutoScroll);
-            ImGui::EndPopup();
-        }
-
-        // Main window
-        if (ImGui::Button("Options"))
-            ImGui::OpenPopup("Options");
-        ImGui::SameLine();
-        bool clear = ImGui::Button("Clear");
-        ImGui::SameLine();
-        bool copy = ImGui::Button("Copy");
-        ImGui::SameLine();
-        Filter.Draw("Filter", -100.0f);
-
-        ImGui::Separator();
-        ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_HorizontalScrollbar);
-
-        if (clear)
-            Clear();
-        if (copy)
-            ImGui::LogToClipboard();
-
-        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
-        const char* buf = Buf.begin();
-        const char* buf_end = Buf.end();
-        if (Filter.IsActive())
-        {
-            // In this example we don't use the clipper when Filter is enabled.
-            // This is because we don't have a random access on the result on our filter.
-            // A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
-            // especially if the filtering function is not trivial (e.g. reg-exp).
-            for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
-            {
-                const char* line_start = buf + LineOffsets[line_no];
-                const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
-                if (Filter.PassFilter(line_start, line_end))
-                    ImGui::TextUnformatted(line_start, line_end);
-            }
-        }
-        else
-        {
-            // The simplest and easy way to display the entire buffer:
-            //   ImGui::TextUnformatted(buf_begin, buf_end);
-            // And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines.
-            // Here we instead demonstrate using the clipper to only process lines that are within the visible area.
-            // If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended.
-            // Using ImGuiListClipper requires A) random access into your data, and B) items all being the  same height,
-            // both of which we can handle since we an array pointing to the beginning of each line of text.
-            // When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper.
-            // Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries)
-            ImGuiListClipper clipper;
-            clipper.Begin(LineOffsets.Size);
-            while (clipper.Step())
-            {
-                for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
-                {
-                    const char* line_start = buf + LineOffsets[line_no];
-                    const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
-                    ImGui::TextUnformatted(line_start, line_end);
-                }
-            }
-            clipper.End();
-        }
-        ImGui::PopStyleVar();
-
-        if (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
-            ImGui::SetScrollHereY(1.0f);
-
-        ImGui::EndChild();
-        ImGui::End();
-    }
-};
-
-// Demonstrate creating a simple log window with basic filtering.
-static void ShowExampleAppLog(bool* p_open)
-{
-    static ExampleAppLog log;
-
-    // For the demo: add a debug button _BEFORE_ the normal log window contents
-    // We take advantage of a rarely used feature: multiple calls to Begin()/End() are appending to the _same_ window.
-    // Most of the contents of the window will be added by the log.Draw() call.
-    ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
-    ImGui::Begin("Example: Log", p_open);
-    if (ImGui::SmallButton("[Debug] Add 5 entries"))
-    {
-        static int counter = 0;
-        for (int n = 0; n < 5; n++)
-        {
-            const char* categories[3] = { "info", "warn", "error" };
-            const char* words[] = { "Bumfuzzled", "Cattywampus", "Snickersnee", "Abibliophobia", "Absquatulate", "Nincompoop", "Pauciloquent" };
-            log.AddLog("[%05d] [%s] Hello, current time is %.1f, here's a word: '%s'\n",
-                ImGui::GetFrameCount(), categories[counter % IM_ARRAYSIZE(categories)], ImGui::GetTime(), words[counter % IM_ARRAYSIZE(words)]);
-            counter++;
-        }
-    }
-    ImGui::End();
-
-    // Actually call in the regular Log helper (which will Begin() into the same window as we just did)
-    log.Draw("Example: Log", p_open);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
-//-----------------------------------------------------------------------------
-
-// Demonstrate create a window with multiple child windows.
-static void ShowExampleAppLayout(bool* p_open)
-{
-    ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver);
-    if (ImGui::Begin("Example: Simple layout", p_open, ImGuiWindowFlags_MenuBar))
-    {
-        if (ImGui::BeginMenuBar())
-        {
-            if (ImGui::BeginMenu("File"))
-            {
-                if (ImGui::MenuItem("Close")) *p_open = false;
-                ImGui::EndMenu();
-            }
-            ImGui::EndMenuBar();
-        }
-
-        // left
-        static int selected = 0;
-        ImGui::BeginChild("left pane", ImVec2(150, 0), true);
-        for (int i = 0; i < 100; i++)
-        {
-            char label[128];
-            sprintf(label, "MyObject %d", i);
-            if (ImGui::Selectable(label, selected == i))
-                selected = i;
-        }
-        ImGui::EndChild();
-        ImGui::SameLine();
-
-        // right
-        ImGui::BeginGroup();
-            ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us
-                ImGui::Text("MyObject: %d", selected);
-                ImGui::Separator();
-                if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None))
-                {
-                    if (ImGui::BeginTabItem("Description"))
-                    {
-                        ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
-                        ImGui::EndTabItem();
-                    }
-                    if (ImGui::BeginTabItem("Details"))
-                    {
-                        ImGui::Text("ID: 0123456789");
-                        ImGui::EndTabItem();
-                    }
-                    ImGui::EndTabBar();
-                }
-            ImGui::EndChild();
-            if (ImGui::Button("Revert")) {}
-            ImGui::SameLine();
-            if (ImGui::Button("Save")) {}
-        ImGui::EndGroup();
-    }
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
-//-----------------------------------------------------------------------------
-
-// Demonstrate create a simple property editor.
-static void ShowExampleAppPropertyEditor(bool* p_open)
-{
-    ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiCond_FirstUseEver);
-    if (!ImGui::Begin("Example: Property editor", p_open))
-    {
-        ImGui::End();
-        return;
-    }
-
-    HelpMarker("This example shows how you may implement a property editor using two columns.\nAll objects/fields data are dummies here.\nRemember that in many simple cases, you can use ImGui::SameLine(xxx) to position\nyour cursor horizontally instead of using the Columns() API.");
-
-    ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2));
-    ImGui::Columns(2);
-    ImGui::Separator();
-
-    struct funcs
-    {
-        static void ShowDummyObject(const char* prefix, int uid)
-        {
-            ImGui::PushID(uid);                      // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID.
-            ImGui::AlignTextToFramePadding();  // Text and Tree nodes are less high than regular widgets, here we add vertical spacing to make the tree lines equal high.
-            bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid);
-            ImGui::NextColumn();
-            ImGui::AlignTextToFramePadding();
-            ImGui::Text("my sailor is rich");
-            ImGui::NextColumn();
-            if (node_open)
-            {
-                static float dummy_members[8] = { 0.0f,0.0f,1.0f,3.1416f,100.0f,999.0f };
-                for (int i = 0; i < 8; i++)
-                {
-                    ImGui::PushID(i); // Use field index as identifier.
-                    if (i < 2)
-                    {
-                        ShowDummyObject("Child", 424242);
-                    }
-                    else
-                    {
-                        // Here we use a TreeNode to highlight on hover (we could use e.g. Selectable as well)
-                        ImGui::AlignTextToFramePadding();
-                        ImGui::TreeNodeEx("Field", ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_Bullet, "Field_%d", i);
-                        ImGui::NextColumn();
-                        ImGui::SetNextItemWidth(-1);
-                        if (i >= 5)
-                            ImGui::InputFloat("##value", &dummy_members[i], 1.0f);
-                        else
-                            ImGui::DragFloat("##value", &dummy_members[i], 0.01f);
-                        ImGui::NextColumn();
-                    }
-                    ImGui::PopID();
-                }
-                ImGui::TreePop();
-            }
-            ImGui::PopID();
-        }
-    };
-
-    // Iterate dummy objects with dummy members (all the same data)
-    for (int obj_i = 0; obj_i < 3; obj_i++)
-        funcs::ShowDummyObject("Object", obj_i);
-
-    ImGui::Columns(1);
-    ImGui::Separator();
-    ImGui::PopStyleVar();
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Long Text / ShowExampleAppLongText()
-//-----------------------------------------------------------------------------
-
-// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
-static void ShowExampleAppLongText(bool* p_open)
-{
-    ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver);
-    if (!ImGui::Begin("Example: Long text display", p_open))
-    {
-        ImGui::End();
-        return;
-    }
-
-    static int test_type = 0;
-    static ImGuiTextBuffer log;
-    static int lines = 0;
-    ImGui::Text("Printing unusually long amount of text.");
-    ImGui::Combo("Test type", &test_type, "Single call to TextUnformatted()\0Multiple calls to Text(), clipped\0Multiple calls to Text(), not clipped (slow)\0");
-    ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
-    if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
-    ImGui::SameLine();
-    if (ImGui::Button("Add 1000 lines"))
-    {
-        for (int i = 0; i < 1000; i++)
-            log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines+i);
-        lines += 1000;
-    }
-    ImGui::BeginChild("Log");
-    switch (test_type)
-    {
-    case 0:
-        // Single call to TextUnformatted() with a big buffer
-        ImGui::TextUnformatted(log.begin(), log.end());
-        break;
-    case 1:
-        {
-            // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper.
-            ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));
-            ImGuiListClipper clipper(lines);
-            while (clipper.Step())
-                for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
-                    ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
-            ImGui::PopStyleVar();
-            break;
-        }
-    case 2:
-        // Multiple calls to Text(), not clipped (slow)
-        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));
-        for (int i = 0; i < lines; i++)
-            ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
-        ImGui::PopStyleVar();
-        break;
-    }
-    ImGui::EndChild();
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
-//-----------------------------------------------------------------------------
-
-// Demonstrate creating a window which gets auto-resized according to its content.
-static void ShowExampleAppAutoResize(bool* p_open)
-{
-    if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize))
-    {
-        ImGui::End();
-        return;
-    }
-
-    static int lines = 10;
-    ImGui::Text("Window will resize every-frame to the size of its content.\nNote that you probably don't want to query the window size to\noutput your content because that would create a feedback loop.");
-    ImGui::SliderInt("Number of lines", &lines, 1, 20);
-    for (int i = 0; i < lines; i++)
-        ImGui::Text("%*sThis is line %d", i * 4, "", i); // Pad with space to extend size horizontally
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
-//-----------------------------------------------------------------------------
-
-// Demonstrate creating a window with custom resize constraints.
-static void ShowExampleAppConstrainedResize(bool* p_open)
-{
-    struct CustomConstraints // Helper functions to demonstrate programmatic constraints
-    {
-        static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize.x = data->DesiredSize.y = (data->DesiredSize.x > data->DesiredSize.y ? data->DesiredSize.x : data->DesiredSize.y); }
-        static void Step(ImGuiSizeCallbackData* data)   { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
-    };
-
-    static bool auto_resize = false;
-    static int type = 0;
-    static int display_lines = 10;
-    if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0),    ImVec2(-1, FLT_MAX));      // Vertical only
-    if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1),    ImVec2(FLT_MAX, -1));      // Horizontal only
-    if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
-    if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500
-    if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500
-    if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);                     // Always Square
-    if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step
-
-    ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
-    if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
-    {
-        const char* desc[] =
-        {
-            "Resize vertical only",
-            "Resize horizontal only",
-            "Width > 100, Height > 100",
-            "Width 400-500",
-            "Height 400-500",
-            "Custom: Always Square",
-            "Custom: Fixed Steps (100)",
-        };
-        if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
-        if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
-        if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
-        ImGui::SetNextItemWidth(200);
-        ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc));
-        ImGui::SetNextItemWidth(200);
-        ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
-        ImGui::Checkbox("Auto-resize", &auto_resize);
-        for (int i = 0; i < display_lines; i++)
-            ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
-    }
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Simple Overlay / ShowExampleAppSimpleOverlay()
-//-----------------------------------------------------------------------------
-
-// Demonstrate creating a simple static window with no decoration + a context-menu to choose which corner of the screen to use.
-static void ShowExampleAppSimpleOverlay(bool* p_open)
-{
-    const float DISTANCE = 10.0f;
-    static int corner = 0;
-    ImGuiIO& io = ImGui::GetIO();
-    if (corner != -1)
-    {
-        ImVec2 window_pos = ImVec2((corner & 1) ? io.DisplaySize.x - DISTANCE : DISTANCE, (corner & 2) ? io.DisplaySize.y - DISTANCE : DISTANCE);
-        ImVec2 window_pos_pivot = ImVec2((corner & 1) ? 1.0f : 0.0f, (corner & 2) ? 1.0f : 0.0f);
-        ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
-    }
-    ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
-    if (ImGui::Begin("Example: Simple overlay", p_open, (corner != -1 ? ImGuiWindowFlags_NoMove : 0) | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav))
-    {
-        ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
-        ImGui::Separator();
-        if (ImGui::IsMousePosValid())
-            ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y);
-        else
-            ImGui::Text("Mouse Position: <invalid>");
-        if (ImGui::BeginPopupContextWindow())
-        {
-            if (ImGui::MenuItem("Custom",       NULL, corner == -1)) corner = -1;
-            if (ImGui::MenuItem("Top-left",     NULL, corner == 0)) corner = 0;
-            if (ImGui::MenuItem("Top-right",    NULL, corner == 1)) corner = 1;
-            if (ImGui::MenuItem("Bottom-left",  NULL, corner == 2)) corner = 2;
-            if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
-            if (p_open && ImGui::MenuItem("Close")) *p_open = false;
-            ImGui::EndPopup();
-        }
-    }
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
-//-----------------------------------------------------------------------------
-
-// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
-// This apply to all regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details.
-static void ShowExampleAppWindowTitles(bool*)
-{
-    // By default, Windows are uniquely identified by their title.
-    // You can use the "##" and "###" markers to manipulate the display/ID.
-
-    // Using "##" to display same title but have unique identifier.
-    ImGui::SetNextWindowPos(ImVec2(100, 100), ImGuiCond_FirstUseEver);
-    ImGui::Begin("Same title as another window##1");
-    ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
-    ImGui::End();
-
-    ImGui::SetNextWindowPos(ImVec2(100, 200), ImGuiCond_FirstUseEver);
-    ImGui::Begin("Same title as another window##2");
-    ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
-    ImGui::End();
-
-    // Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
-    char buf[128];
-    sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime() / 0.25f) & 3], ImGui::GetFrameCount());
-    ImGui::SetNextWindowPos(ImVec2(100, 300), ImGuiCond_FirstUseEver);
-    ImGui::Begin(buf);
-    ImGui::Text("This window has a changing title.");
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
-//-----------------------------------------------------------------------------
-
-// Demonstrate using the low-level ImDrawList to draw custom shapes.
-static void ShowExampleAppCustomRendering(bool* p_open)
-{
-    if (!ImGui::Begin("Example: Custom rendering", p_open))
-    {
-        ImGui::End();
-        return;
-    }
-
-    // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of overloaded operators, etc.
-    // Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your types and ImVec2/ImVec4.
-    // ImGui defines overloaded operators but they are internal to imgui.cpp and not exposed outside (to avoid messing with your types)
-    // In this example we are not using the maths operators!
-    ImDrawList* draw_list = ImGui::GetWindowDrawList();
-
-    if (ImGui::BeginTabBar("##TabBar"))
-    {
-        if (ImGui::BeginTabItem("Primitives"))
-        {
-            ImGui::PushItemWidth(-ImGui::GetFontSize() * 10);
-
-            // Draw gradients
-            // (note that those are currently exacerbating our sRGB/Linear issues)
-            ImGui::Text("Gradients");
-            ImVec2 gradient_size = ImVec2(ImGui::CalcItemWidth(), ImGui::GetFrameHeight());
-            {
-                ImVec2 p = ImGui::GetCursorScreenPos();
-                ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 0.0f, 0.0f, 1.0f));
-                ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
-                draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a);
-                ImGui::InvisibleButton("##gradient1", gradient_size);
-            }
-            {
-                ImVec2 p = ImGui::GetCursorScreenPos();
-                ImU32 col_a = ImGui::GetColorU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f));
-                ImU32 col_b = ImGui::GetColorU32(ImVec4(1.0f, 0.0f, 0.0f, 1.0f));
-                draw_list->AddRectFilledMultiColor(p, ImVec2(p.x + gradient_size.x, p.y + gradient_size.y), col_a, col_b, col_b, col_a);
-                ImGui::InvisibleButton("##gradient2", gradient_size);
-            }
-
-            // Draw a bunch of primitives
-            ImGui::Text("All primitives");
-            static float sz = 36.0f;
-            static float thickness = 3.0f;
-            static int ngon_sides = 6;
-            static bool circle_segments_override = false;
-            static int circle_segments_override_v = 12;
-            static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
-            ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 72.0f, "%.0f");
-            ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
-            ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12);
-            ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override);
-            ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
-            if (ImGui::SliderInt("Circle segments", &circle_segments_override_v, 3, 40))
-                circle_segments_override = true;
-            ImGui::ColorEdit4("Color", &colf.x);
-            const ImVec2 p = ImGui::GetCursorScreenPos();
-            const ImU32 col = ImColor(colf);
-            const float spacing = 10.0f;
-            const ImDrawCornerFlags corners_none = 0;
-            const ImDrawCornerFlags corners_all = ImDrawCornerFlags_All;
-            const ImDrawCornerFlags corners_tl_br = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotRight;
-            const int circle_segments = circle_segments_override ? circle_segments_override_v : 0;
-            float x = p.x + 4.0f, y = p.y + 4.0f;
-            for (int n = 0; n < 2; n++)
-            {
-                // First line uses a thickness of 1.0f, second line uses the configurable thickness
-                float th = (n == 0) ? 1.0f : thickness;
-                draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th);         x += sz + spacing;  // N-gon
-                draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th);  x += sz + spacing;  // Circle
-                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f,  corners_none, th);     x += sz + spacing;  // Square
-                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_all, th);      x += sz + spacing;  // Square with all rounded corners
-                draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br, th);    x += sz + spacing;  // Square with two rounded corners
-                draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th);      x += sz + spacing;      // Triangle
-                draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th); x += sz*0.4f + spacing; // Thin triangle
-                draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th);                               x += sz + spacing;  // Horizontal line (note: drawing a filled rectangle will be faster!)
-                draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col, th);                               x += spacing;       // Vertical line (note: drawing a filled rectangle will be faster!)
-                draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col, th);                          x += sz + spacing;  // Diagonal line
-                draw_list->AddBezierCurve(ImVec2(x, y), ImVec2(x + sz*1.3f, y + sz*0.3f), ImVec2(x + sz - sz*1.3f, y + sz - sz*0.3f), ImVec2(x + sz, y + sz), col, th);
-                x = p.x + 4;
-                y += sz + spacing;
-            }
-            draw_list->AddNgonFilled(ImVec2(x + sz * 0.5f, y + sz * 0.5f), sz*0.5f, col, ngon_sides);   x += sz + spacing;  // N-gon
-            draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments);x += sz + spacing;  // Circle
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col);                        x += sz + spacing;  // Square
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f);                 x += sz + spacing;  // Square with all rounded corners
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br);  x += sz + spacing;  // Square with two rounded corners
-            draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col);      x += sz + spacing;      // Triangle
-            draw_list->AddTriangleFilled(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col); x += sz*0.4f + spacing; // Thin triangle
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col);                 x += sz + spacing;  // Horizontal line (faster than AddLine, but only handle integer thickness)
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col);                 x += spacing*2.0f;  // Vertical line (faster than AddLine, but only handle integer thickness)
-            draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col);                          x += sz;            // Pixel (faster than AddLine)
-            draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255));
-            ImGui::Dummy(ImVec2((sz + spacing) * 9.8f, (sz + spacing) * 3));
-
-            ImGui::PopItemWidth();
-            ImGui::EndTabItem();
-        }
-
-        if (ImGui::BeginTabItem("Canvas"))
-        {
-            static ImVector<ImVec2> points;
-            static bool adding_line = false;
-            if (ImGui::Button("Clear")) points.clear();
-            if (points.Size >= 2) { ImGui::SameLine(); if (ImGui::Button("Undo")) { points.pop_back(); points.pop_back(); } }
-            ImGui::Text("Left-click and drag to add lines,\nRight-click to undo");
-
-            // Here we are using InvisibleButton() as a convenience to 1) advance the cursor and 2) allows us to use IsItemHovered()
-            // But you can also draw directly and poll mouse/keyboard by yourself. You can manipulate the cursor using GetCursorPos() and SetCursorPos().
-            // If you only use the ImDrawList API, you can notify the owner window of its extends by using SetCursorPos(max).
-            ImVec2 canvas_pos = ImGui::GetCursorScreenPos();            // ImDrawList API uses screen coordinates!
-            ImVec2 canvas_size = ImGui::GetContentRegionAvail();        // Resize canvas to what's available
-            if (canvas_size.x < 50.0f) canvas_size.x = 50.0f;
-            if (canvas_size.y < 50.0f) canvas_size.y = 50.0f;
-            draw_list->AddRectFilledMultiColor(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(50, 50, 50, 255), IM_COL32(50, 50, 60, 255), IM_COL32(60, 60, 70, 255), IM_COL32(50, 50, 60, 255));
-            draw_list->AddRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), IM_COL32(255, 255, 255, 255));
-
-            bool adding_preview = false;
-            ImGui::InvisibleButton("canvas", canvas_size);
-            ImVec2 mouse_pos_in_canvas = ImVec2(ImGui::GetIO().MousePos.x - canvas_pos.x, ImGui::GetIO().MousePos.y - canvas_pos.y);
-            if (adding_line)
-            {
-                adding_preview = true;
-                points.push_back(mouse_pos_in_canvas);
-                if (!ImGui::IsMouseDown(0))
-                    adding_line = adding_preview = false;
-            }
-            if (ImGui::IsItemHovered())
-            {
-                if (!adding_line && ImGui::IsMouseClicked(0))
-                {
-                    points.push_back(mouse_pos_in_canvas);
-                    adding_line = true;
-                }
-                if (ImGui::IsMouseClicked(1) && !points.empty())
-                {
-                    adding_line = adding_preview = false;
-                    points.pop_back();
-                    points.pop_back();
-                }
-            }
-            draw_list->PushClipRect(canvas_pos, ImVec2(canvas_pos.x + canvas_size.x, canvas_pos.y + canvas_size.y), true);      // clip lines within the canvas (if we resize it, etc.)
-            for (int i = 0; i < points.Size - 1; i += 2)
-                draw_list->AddLine(ImVec2(canvas_pos.x + points[i].x, canvas_pos.y + points[i].y), ImVec2(canvas_pos.x + points[i + 1].x, canvas_pos.y + points[i + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
-            draw_list->PopClipRect();
-            if (adding_preview)
-                points.pop_back();
-            ImGui::EndTabItem();
-        }
-
-        if (ImGui::BeginTabItem("BG/FG draw lists"))
-        {
-            static bool draw_bg = true;
-            static bool draw_fg = true;
-            ImGui::Checkbox("Draw in Background draw list", &draw_bg);
-            ImGui::SameLine(); HelpMarker("The Background draw list will be rendered below every Dear ImGui windows.");
-            ImGui::Checkbox("Draw in Foreground draw list", &draw_fg);
-            ImGui::SameLine(); HelpMarker("The Foreground draw list will be rendered over every Dear ImGui windows.");
-            ImVec2 window_pos = ImGui::GetWindowPos();
-            ImVec2 window_size = ImGui::GetWindowSize();
-            ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f);
-            if (draw_bg)
-                ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10+4);
-            if (draw_fg)
-                ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10);
-            ImGui::EndTabItem();
-        }
-
-        ImGui::EndTabBar();
-    }
-
-    ImGui::End();
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
-//-----------------------------------------------------------------------------
-
-// Simplified structure to mimic a Document model
-struct MyDocument
-{
-    const char* Name;           // Document title
-    bool        Open;           // Set when the document is open (in this demo, we keep an array of all available documents to simplify the demo)
-    bool        OpenPrev;       // Copy of Open from last update.
-    bool        Dirty;          // Set when the document has been modified
-    bool        WantClose;      // Set when the document
-    ImVec4      Color;          // An arbitrary variable associated to the document
-
-    MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f,1.0f,1.0f,1.0f))
-    {
-        Name = name;
-        Open = OpenPrev = open;
-        Dirty = false;
-        WantClose = false;
-        Color = color;
-    }
-    void DoOpen()       { Open = true; }
-    void DoQueueClose() { WantClose = true; }
-    void DoForceClose() { Open = false; Dirty = false; }
-    void DoSave()       { Dirty = false; }
-
-    // Display dummy contents for the Document
-    static void DisplayContents(MyDocument* doc)
-    {
-        ImGui::PushID(doc);
-        ImGui::Text("Document \"%s\"", doc->Name);
-        ImGui::PushStyleColor(ImGuiCol_Text, doc->Color);
-        ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
-        ImGui::PopStyleColor();
-        if (ImGui::Button("Modify", ImVec2(100, 0)))
-            doc->Dirty = true;
-        ImGui::SameLine();
-        if (ImGui::Button("Save", ImVec2(100, 0)))
-            doc->DoSave();
-        ImGui::ColorEdit3("color", &doc->Color.x);  // Useful to test drag and drop and hold-dragged-to-open-tab behavior.
-        ImGui::PopID();
-    }
-
-    // Display context menu for the Document
-    static void DisplayContextMenu(MyDocument* doc)
-    {
-        if (!ImGui::BeginPopupContextItem())
-            return;
-
-        char buf[256];
-        sprintf(buf, "Save %s", doc->Name);
-        if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open))
-            doc->DoSave();
-        if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open))
-            doc->DoQueueClose();
-        ImGui::EndPopup();
-    }
-};
-
-struct ExampleAppDocuments
-{
-    ImVector<MyDocument> Documents;
-
-    ExampleAppDocuments()
-    {
-        Documents.push_back(MyDocument("Lettuce",             true,  ImVec4(0.4f, 0.8f, 0.4f, 1.0f)));
-        Documents.push_back(MyDocument("Eggplant",            true,  ImVec4(0.8f, 0.5f, 1.0f, 1.0f)));
-        Documents.push_back(MyDocument("Carrot",              true,  ImVec4(1.0f, 0.8f, 0.5f, 1.0f)));
-        Documents.push_back(MyDocument("Tomato",              false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f)));
-        Documents.push_back(MyDocument("A Rather Long Title", false));
-        Documents.push_back(MyDocument("Some Document",       false));
-    }
-};
-
-// [Optional] Notify the system of Tabs/Windows closure that happened outside the regular tab interface.
-// If a tab has been closed programmatically (aka closed from another source such as the Checkbox() in the demo, as opposed
-// to clicking on the regular tab closing button) and stops being submitted, it will take a frame for the tab bar to notice its absence.
-// During this frame there will be a gap in the tab bar, and if the tab that has disappeared was the selected one, the tab bar
-// will report no selected tab during the frame. This will effectively give the impression of a flicker for one frame.
-// We call SetTabItemClosed() to manually notify the Tab Bar or Docking system of removed tabs to avoid this glitch.
-// Note that this completely optional, and only affect tab bars with the ImGuiTabBarFlags_Reorderable flag.
-static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
-{
-    for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-    {
-        MyDocument* doc = &app.Documents[doc_n];
-        if (!doc->Open && doc->OpenPrev)
-            ImGui::SetTabItemClosed(doc->Name);
-        doc->OpenPrev = doc->Open;
-    }
-}
-
-void ShowExampleAppDocuments(bool* p_open)
-{
-    static ExampleAppDocuments app;
-
-    // Options
-    static bool opt_reorderable = true;
-    static ImGuiTabBarFlags opt_fitting_flags = ImGuiTabBarFlags_FittingPolicyDefault_;
-
-    bool window_contents_visible = ImGui::Begin("Example: Documents", p_open, ImGuiWindowFlags_MenuBar);
-    if (!window_contents_visible)
-    {
-        ImGui::End();
-        return;
-    }
-
-    // Menu
-    if (ImGui::BeginMenuBar())
-    {
-        if (ImGui::BeginMenu("File"))
-        {
-            int open_count = 0;
-            for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-                open_count += app.Documents[doc_n].Open ? 1 : 0;
-
-            if (ImGui::BeginMenu("Open", open_count < app.Documents.Size))
-            {
-                for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-                {
-                    MyDocument* doc = &app.Documents[doc_n];
-                    if (!doc->Open)
-                        if (ImGui::MenuItem(doc->Name))
-                            doc->DoOpen();
-                }
-                ImGui::EndMenu();
-            }
-            if (ImGui::MenuItem("Close All Documents", NULL, false, open_count > 0))
-                for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-                    app.Documents[doc_n].DoQueueClose();
-            if (ImGui::MenuItem("Exit", "Alt+F4")) {}
-            ImGui::EndMenu();
-        }
-        ImGui::EndMenuBar();
-    }
-
-    // [Debug] List documents with one checkbox for each
-    for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-    {
-        MyDocument* doc = &app.Documents[doc_n];
-        if (doc_n > 0)
-            ImGui::SameLine();
-        ImGui::PushID(doc);
-        if (ImGui::Checkbox(doc->Name, &doc->Open))
-            if (!doc->Open)
-                doc->DoForceClose();
-        ImGui::PopID();
-    }
-
-    ImGui::Separator();
-
-    // Submit Tab Bar and Tabs
-    {
-        ImGuiTabBarFlags tab_bar_flags = (opt_fitting_flags) | (opt_reorderable ? ImGuiTabBarFlags_Reorderable : 0);
-        if (ImGui::BeginTabBar("##tabs", tab_bar_flags))
-        {
-            if (opt_reorderable)
-                NotifyOfDocumentsClosedElsewhere(app);
-
-            // [DEBUG] Stress tests
-            //if ((ImGui::GetFrameCount() % 30) == 0) docs[1].Open ^= 1;            // [DEBUG] Automatically show/hide a tab. Test various interactions e.g. dragging with this on.
-            //if (ImGui::GetIO().KeyCtrl) ImGui::SetTabItemSelected(docs[1].Name);  // [DEBUG] Test SetTabItemSelected(), probably not very useful as-is anyway..
-
-            // Submit Tabs
-            for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-            {
-                MyDocument* doc = &app.Documents[doc_n];
-                if (!doc->Open)
-                    continue;
-
-                ImGuiTabItemFlags tab_flags = (doc->Dirty ? ImGuiTabItemFlags_UnsavedDocument : 0);
-                bool visible = ImGui::BeginTabItem(doc->Name, &doc->Open, tab_flags);
-
-                // Cancel attempt to close when unsaved add to save queue so we can display a popup.
-                if (!doc->Open && doc->Dirty)
-                {
-                    doc->Open = true;
-                    doc->DoQueueClose();
-                }
-
-                MyDocument::DisplayContextMenu(doc);
-                if (visible)
-                {
-                    MyDocument::DisplayContents(doc);
-                    ImGui::EndTabItem();
-                }
-            }
-
-            ImGui::EndTabBar();
-        }
-    }
-
-    // Update closing queue
-    static ImVector<MyDocument*> close_queue;
-    if (close_queue.empty())
-    {
-        // Close queue is locked once we started a popup
-        for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
-        {
-            MyDocument* doc = &app.Documents[doc_n];
-            if (doc->WantClose)
-            {
-                doc->WantClose = false;
-                close_queue.push_back(doc);
-            }
-        }
-    }
-
-    // Display closing confirmation UI
-    if (!close_queue.empty())
-    {
-        int close_queue_unsaved_documents = 0;
-        for (int n = 0; n < close_queue.Size; n++)
-            if (close_queue[n]->Dirty)
-                close_queue_unsaved_documents++;
-
-        if (close_queue_unsaved_documents == 0)
-        {
-            // Close documents when all are unsaved
-            for (int n = 0; n < close_queue.Size; n++)
-                close_queue[n]->DoForceClose();
-            close_queue.clear();
-        }
-        else
-        {
-            if (!ImGui::IsPopupOpen("Save?"))
-                ImGui::OpenPopup("Save?");
-            if (ImGui::BeginPopupModal("Save?"))
-            {
-                ImGui::Text("Save change to the following items?");
-                ImGui::SetNextItemWidth(-1.0f);
-                if (ImGui::ListBoxHeader("##", close_queue_unsaved_documents, 6))
-                {
-                    for (int n = 0; n < close_queue.Size; n++)
-                        if (close_queue[n]->Dirty)
-                            ImGui::Text("%s", close_queue[n]->Name);
-                    ImGui::ListBoxFooter();
-                }
-
-                if (ImGui::Button("Yes", ImVec2(80, 0)))
-                {
-                    for (int n = 0; n < close_queue.Size; n++)
-                    {
-                        if (close_queue[n]->Dirty)
-                            close_queue[n]->DoSave();
-                        close_queue[n]->DoForceClose();
-                    }
-                    close_queue.clear();
-                    ImGui::CloseCurrentPopup();
-                }
-                ImGui::SameLine();
-                if (ImGui::Button("No", ImVec2(80, 0)))
-                {
-                    for (int n = 0; n < close_queue.Size; n++)
-                        close_queue[n]->DoForceClose();
-                    close_queue.clear();
-                    ImGui::CloseCurrentPopup();
-                }
-                ImGui::SameLine();
-                if (ImGui::Button("Cancel", ImVec2(80, 0)))
-                {
-                    close_queue.clear();
-                    ImGui::CloseCurrentPopup();
-                }
-                ImGui::EndPopup();
-            }
-        }
-    }
-
-    ImGui::End();
-}
-
-// End of Demo code
-#else
-
-void ImGui::ShowAboutWindow(bool*) {}
-void ImGui::ShowDemoWindow(bool*) {}
-void ImGui::ShowUserGuide() {}
-void ImGui::ShowStyleEditor(ImGuiStyle*) {}
-
-#endif
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imgui_draw.cpp
+++ /dev/null
@@ -1,3609 +1,0 @@
-// dear imgui, v1.76 WIP
-// (drawing and font code)
-
-/*
-
-Index of this file:
-
-// [SECTION] STB libraries implementation
-// [SECTION] Style functions
-// [SECTION] ImDrawList
-// [SECTION] ImDrawListSplitter
-// [SECTION] ImDrawData
-// [SECTION] Helpers ShadeVertsXXX functions
-// [SECTION] ImFontConfig
-// [SECTION] ImFontAtlas
-// [SECTION] ImFontAtlas glyph ranges helpers
-// [SECTION] ImFontGlyphRangesBuilder
-// [SECTION] ImFont
-// [SECTION] ImGui Internal Render Helpers
-// [SECTION] Decompression code
-// [SECTION] Default font data (ProggyClean.ttf)
-
-*/
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "imgui.h"
-#ifndef IMGUI_DISABLE
-
-#ifndef IMGUI_DEFINE_MATH_OPERATORS
-#define IMGUI_DEFINE_MATH_OPERATORS
-#endif
-#include "imgui_internal.h"
-
-#include <stdio.h>      // vsnprintf, sscanf, printf
-#if !defined(alloca)
-#if defined(__GLIBC__) || defined(__sun) || defined(__CYGWIN__) || defined(__APPLE__) || defined(__SWITCH__)
-#include <alloca.h>     // alloca (glibc uses <alloca.h>. Note that Cygwin may have _WIN32 defined, so the order matters here)
-#elif defined(_WIN32)
-#include <malloc.h>     // alloca
-#if !defined(alloca)
-#define alloca _alloca  // for clang with MS Codegen
-#endif
-#else
-#include <stdlib.h>     // alloca
-#endif
-#endif
-
-// Visual Studio warnings
-#ifdef _MSC_VER
-#pragma warning (disable: 4127) // condition expression is constant
-#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
-#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
-#endif
-
-// Clang/GCC warnings with -Weverything
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
-#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants ok.
-#pragma clang diagnostic ignored "-Wglobal-constructors"    // warning : declaration requires a global destructor           // similar to above, not sure what the exact difference is.
-#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
-#endif
-#if __has_warning("-Wcomma")
-#pragma clang diagnostic ignored "-Wcomma"                  // warning : possible misuse of comma operator here             //
-#endif
-#if __has_warning("-Wreserved-id-macro")
-#pragma clang diagnostic ignored "-Wreserved-id-macro"      // warning : macro name is a reserved identifier                //
-#endif
-#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
-#endif
-#elif defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used
-#pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function
-#pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value
-#pragma GCC diagnostic ignored "-Wstack-protector"          // warning: stack protector not protecting local variables: variable length buffer
-#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
-
-//-------------------------------------------------------------------------
-// [SECTION] STB libraries implementation
-//-------------------------------------------------------------------------
-
-// Compile time options:
-//#define IMGUI_STB_NAMESPACE           ImStb
-//#define IMGUI_STB_TRUETYPE_FILENAME   "my_folder/stb_truetype.h"
-//#define IMGUI_STB_RECT_PACK_FILENAME  "my_folder/stb_rect_pack.h"
-//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
-//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
-
-#ifdef IMGUI_STB_NAMESPACE
-namespace IMGUI_STB_NAMESPACE
-{
-#endif
-
-#ifdef _MSC_VER
-#pragma warning (push)
-#pragma warning (disable: 4456)                             // declaration of 'xx' hides previous local declaration
-#endif
-
-#if defined(__clang__)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-function"
-#pragma clang diagnostic ignored "-Wmissing-prototypes"
-#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
-#pragma clang diagnostic ignored "-Wcast-qual"              // warning : cast from 'const xxxx *' to 'xxx *' drops const qualifier //
-#endif
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wtype-limits"              // warning: comparison is always true due to limited range of data type [-Wtype-limits]
-#pragma GCC diagnostic ignored "-Wcast-qual"                // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers
-#endif
-
-#ifndef STB_RECT_PACK_IMPLEMENTATION                        // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
-#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
-#define STBRP_STATIC
-#define STBRP_ASSERT(x)     IM_ASSERT(x)
-#define STBRP_SORT          ImQsort
-#define STB_RECT_PACK_IMPLEMENTATION
-#endif
-#ifdef IMGUI_STB_RECT_PACK_FILENAME
-#include IMGUI_STB_RECT_PACK_FILENAME
-#else
-#include "imstb_rectpack.h"
-#endif
-#endif
-
-#ifndef STB_TRUETYPE_IMPLEMENTATION                         // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
-#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
-#define STBTT_malloc(x,u)   ((void)(u), IM_ALLOC(x))
-#define STBTT_free(x,u)     ((void)(u), IM_FREE(x))
-#define STBTT_assert(x)     IM_ASSERT(x)
-#define STBTT_fmod(x,y)     ImFmod(x,y)
-#define STBTT_sqrt(x)       ImSqrt(x)
-#define STBTT_pow(x,y)      ImPow(x,y)
-#define STBTT_fabs(x)       ImFabs(x)
-#define STBTT_ifloor(x)     ((int)ImFloorStd(x))
-#define STBTT_iceil(x)      ((int)ImCeil(x))
-#define STBTT_STATIC
-#define STB_TRUETYPE_IMPLEMENTATION
-#else
-#define STBTT_DEF extern
-#endif
-#ifdef IMGUI_STB_TRUETYPE_FILENAME
-#include IMGUI_STB_TRUETYPE_FILENAME
-#else
-#include "imstb_truetype.h"
-#endif
-#endif
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning (pop)
-#endif
-
-#ifdef IMGUI_STB_NAMESPACE
-} // namespace ImStb
-using namespace IMGUI_STB_NAMESPACE;
-#endif
-
-//-----------------------------------------------------------------------------
-// [SECTION] Style functions
-//-----------------------------------------------------------------------------
-
-void ImGui::StyleColorsDark(ImGuiStyle* dst)
-{
-    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
-    ImVec4* colors = style->Colors;
-
-    colors[ImGuiCol_Text]                   = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
-    colors[ImGuiCol_TextDisabled]           = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
-    colors[ImGuiCol_WindowBg]               = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
-    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_PopupBg]                = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
-    colors[ImGuiCol_Border]                 = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
-    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_FrameBg]                = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
-    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
-    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
-    colors[ImGuiCol_TitleBg]                = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
-    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
-    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
-    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
-    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
-    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
-    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
-    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
-    colors[ImGuiCol_CheckMark]              = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_SliderGrab]             = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
-    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_Button]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
-    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_ButtonActive]           = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
-    colors[ImGuiCol_Header]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
-    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
-    colors[ImGuiCol_HeaderActive]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_Separator]              = colors[ImGuiCol_Border];
-    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
-    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
-    colors[ImGuiCol_ResizeGrip]             = ImVec4(0.26f, 0.59f, 0.98f, 0.25f);
-    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
-    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
-    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.80f);
-    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
-    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
-    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
-    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
-    colors[ImGuiCol_PlotLines]              = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
-    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
-    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
-    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
-    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.19f, 0.19f, 0.20f, 1.00f);
-    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.31f, 0.31f, 0.35f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.23f, 0.23f, 0.25f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);
-    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
-    colors[ImGuiCol_DragDropTarget]         = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
-    colors[ImGuiCol_NavHighlight]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
-    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
-    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
-}
-
-void ImGui::StyleColorsClassic(ImGuiStyle* dst)
-{
-    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
-    ImVec4* colors = style->Colors;
-
-    colors[ImGuiCol_Text]                   = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
-    colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
-    colors[ImGuiCol_WindowBg]               = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
-    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_PopupBg]                = ImVec4(0.11f, 0.11f, 0.14f, 0.92f);
-    colors[ImGuiCol_Border]                 = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);
-    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_FrameBg]                = ImVec4(0.43f, 0.43f, 0.43f, 0.39f);
-    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.47f, 0.47f, 0.69f, 0.40f);
-    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.42f, 0.41f, 0.64f, 0.69f);
-    colors[ImGuiCol_TitleBg]                = ImVec4(0.27f, 0.27f, 0.54f, 0.83f);
-    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.32f, 0.32f, 0.63f, 0.87f);
-    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
-    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
-    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
-    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
-    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
-    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
-    colors[ImGuiCol_CheckMark]              = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
-    colors[ImGuiCol_SliderGrab]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
-    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
-    colors[ImGuiCol_Button]                 = ImVec4(0.35f, 0.40f, 0.61f, 0.62f);
-    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.40f, 0.48f, 0.71f, 0.79f);
-    colors[ImGuiCol_ButtonActive]           = ImVec4(0.46f, 0.54f, 0.80f, 1.00f);
-    colors[ImGuiCol_Header]                 = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
-    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
-    colors[ImGuiCol_HeaderActive]           = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
-    colors[ImGuiCol_Separator]              = ImVec4(0.50f, 0.50f, 0.50f, 0.60f);
-    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
-    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
-    colors[ImGuiCol_ResizeGrip]             = ImVec4(1.00f, 1.00f, 1.00f, 0.16f);
-    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.78f, 0.82f, 1.00f, 0.60f);
-    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.78f, 0.82f, 1.00f, 0.90f);
-    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.80f);
-    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
-    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
-    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
-    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
-    colors[ImGuiCol_PlotLines]              = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
-    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
-    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
-    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
-    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.27f, 0.27f, 0.38f, 1.00f);
-    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.31f, 0.31f, 0.45f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.26f, 0.26f, 0.28f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);
-    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
-    colors[ImGuiCol_DragDropTarget]         = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
-    colors[ImGuiCol_NavHighlight]           = colors[ImGuiCol_HeaderHovered];
-    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
-    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
-    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
-}
-
-// Those light colors are better suited with a thicker font than the default one + FrameBorder
-void ImGui::StyleColorsLight(ImGuiStyle* dst)
-{
-    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
-    ImVec4* colors = style->Colors;
-
-    colors[ImGuiCol_Text]                   = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);
-    colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
-    colors[ImGuiCol_WindowBg]               = ImVec4(0.94f, 0.94f, 0.94f, 1.00f);
-    colors[ImGuiCol_ChildBg]                = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_PopupBg]                = ImVec4(1.00f, 1.00f, 1.00f, 0.98f);
-    colors[ImGuiCol_Border]                 = ImVec4(0.00f, 0.00f, 0.00f, 0.30f);
-    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_FrameBg]                = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
-    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
-    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
-    colors[ImGuiCol_TitleBg]                = ImVec4(0.96f, 0.96f, 0.96f, 1.00f);
-    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.82f, 0.82f, 0.82f, 1.00f);
-    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(1.00f, 1.00f, 1.00f, 0.51f);
-    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.86f, 0.86f, 0.86f, 1.00f);
-    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.98f, 0.98f, 0.98f, 0.53f);
-    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.69f, 0.69f, 0.69f, 0.80f);
-    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.49f, 0.49f, 0.49f, 0.80f);
-    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.49f, 0.49f, 0.49f, 1.00f);
-    colors[ImGuiCol_CheckMark]              = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_SliderGrab]             = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
-    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.46f, 0.54f, 0.80f, 0.60f);
-    colors[ImGuiCol_Button]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
-    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_ButtonActive]           = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
-    colors[ImGuiCol_Header]                 = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
-    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
-    colors[ImGuiCol_HeaderActive]           = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
-    colors[ImGuiCol_Separator]              = ImVec4(0.39f, 0.39f, 0.39f, 0.62f);
-    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.14f, 0.44f, 0.80f, 0.78f);
-    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.14f, 0.44f, 0.80f, 1.00f);
-    colors[ImGuiCol_ResizeGrip]             = ImVec4(0.80f, 0.80f, 0.80f, 0.56f);
-    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
-    colors[ImGuiCol_ResizeGripActive]       = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
-    colors[ImGuiCol_Tab]                    = ImLerp(colors[ImGuiCol_Header],       colors[ImGuiCol_TitleBgActive], 0.90f);
-    colors[ImGuiCol_TabHovered]             = colors[ImGuiCol_HeaderHovered];
-    colors[ImGuiCol_TabActive]              = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
-    colors[ImGuiCol_TabUnfocused]           = ImLerp(colors[ImGuiCol_Tab],          colors[ImGuiCol_TitleBg], 0.80f);
-    colors[ImGuiCol_TabUnfocusedActive]     = ImLerp(colors[ImGuiCol_TabActive],    colors[ImGuiCol_TitleBg], 0.40f);
-    colors[ImGuiCol_PlotLines]              = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
-    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
-    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
-    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.45f, 0.00f, 1.00f);
-    colors[ImGuiCol_TableHeaderBg]          = ImVec4(0.78f, 0.87f, 0.98f, 1.00f);
-    colors[ImGuiCol_TableBorderStrong]      = ImVec4(0.57f, 0.57f, 0.64f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableBorderLight]       = ImVec4(0.68f, 0.68f, 0.74f, 1.00f);   // Prefer using Alpha=1.0 here
-    colors[ImGuiCol_TableRowBg]             = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
-    colors[ImGuiCol_TableRowBgAlt]          = ImVec4(0.30f, 0.30f, 0.30f, 0.07f);
-    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
-    colors[ImGuiCol_DragDropTarget]         = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
-    colors[ImGuiCol_NavHighlight]           = colors[ImGuiCol_HeaderHovered];
-    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
-    colors[ImGuiCol_NavWindowingDimBg]      = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
-    colors[ImGuiCol_ModalWindowDimBg]       = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
-}
-
-//-----------------------------------------------------------------------------
-// ImDrawList
-//-----------------------------------------------------------------------------
-
-ImDrawListSharedData::ImDrawListSharedData()
-{
-    Font = NULL;
-    FontSize = 0.0f;
-    CurveTessellationTol = 0.0f;
-    CircleSegmentMaxError = 0.0f;
-    ClipRectFullscreen = ImVec4(-8192.0f, -8192.0f, +8192.0f, +8192.0f);
-    InitialFlags = ImDrawListFlags_None;
-
-    // Lookup tables
-    for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
-    {
-        const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
-        ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
-    }
-    memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError()
-}
-
-void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error)
-{
-    if (CircleSegmentMaxError == max_error)
-        return;
-    CircleSegmentMaxError = max_error;
-    for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++)
-    {
-        const float radius = i + 1.0f;
-        const int segment_count = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError);
-        CircleSegmentCounts[i] = (ImU8)ImMin(segment_count, 255);
-    }
-}
-
-void ImDrawList::Clear()
-{
-    CmdBuffer.resize(0);
-    IdxBuffer.resize(0);
-    VtxBuffer.resize(0);
-    Flags = _Data ? _Data->InitialFlags : ImDrawListFlags_None;
-    _VtxCurrentOffset = 0;
-    _VtxCurrentIdx = 0;
-    _VtxWritePtr = NULL;
-    _IdxWritePtr = NULL;
-    _ClipRectStack.resize(0);
-    _TextureIdStack.resize(0);
-    _Path.resize(0);
-    _Splitter.Clear();
-}
-
-void ImDrawList::ClearFreeMemory()
-{
-    CmdBuffer.clear();
-    IdxBuffer.clear();
-    VtxBuffer.clear();
-    _VtxCurrentIdx = 0;
-    _VtxWritePtr = NULL;
-    _IdxWritePtr = NULL;
-    _ClipRectStack.clear();
-    _TextureIdStack.clear();
-    _Path.clear();
-    _Splitter.ClearFreeMemory();
-}
-
-ImDrawList* ImDrawList::CloneOutput() const
-{
-    ImDrawList* dst = IM_NEW(ImDrawList(_Data));
-    dst->CmdBuffer = CmdBuffer;
-    dst->IdxBuffer = IdxBuffer;
-    dst->VtxBuffer = VtxBuffer;
-    dst->Flags = Flags;
-    return dst;
-}
-
-// Using macros because C++ is a terrible language, we want guaranteed inline, no code in header, and no overhead in Debug builds
-#define GetCurrentClipRect()    (_ClipRectStack.Size ? _ClipRectStack.Data[_ClipRectStack.Size-1]  : _Data->ClipRectFullscreen)
-#define GetCurrentTextureId()   (_TextureIdStack.Size ? _TextureIdStack.Data[_TextureIdStack.Size-1] : (ImTextureID)NULL)
-
-void ImDrawList::AddDrawCmd()
-{
-    ImDrawCmd draw_cmd;
-    draw_cmd.ClipRect = GetCurrentClipRect();
-    draw_cmd.TextureId = GetCurrentTextureId();
-    draw_cmd.VtxOffset = _VtxCurrentOffset;
-    draw_cmd.IdxOffset = IdxBuffer.Size;
-
-    IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w);
-    CmdBuffer.push_back(draw_cmd);
-}
-
-void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
-{
-    ImDrawCmd* current_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL;
-    if (!current_cmd || current_cmd->ElemCount != 0 || current_cmd->UserCallback != NULL)
-    {
-        AddDrawCmd();
-        current_cmd = &CmdBuffer.back();
-    }
-    current_cmd->UserCallback = callback;
-    current_cmd->UserCallbackData = callback_data;
-
-    AddDrawCmd(); // Force a new command after us (see comment below)
-}
-
-// Our scheme may appears a bit unusual, basically we want the most-common calls AddLine AddRect etc. to not have to perform any check so we always have a command ready in the stack.
-// The cost of figuring out if a new command has to be added or if we can merge is paid in those Update** functions only.
-void ImDrawList::UpdateClipRect()
-{
-    // If current command is used with different settings we need to add a new command
-    const ImVec4 curr_clip_rect = GetCurrentClipRect();
-    ImDrawCmd* curr_cmd = CmdBuffer.Size > 0 ? &CmdBuffer.Data[CmdBuffer.Size-1] : NULL;
-    if (!curr_cmd || (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) != 0) || curr_cmd->UserCallback != NULL)
-    {
-        AddDrawCmd();
-        return;
-    }
-
-    // Try to merge with previous command if it matches, else use current command
-    ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL;
-    if (curr_cmd->ElemCount == 0 && prev_cmd && memcmp(&prev_cmd->ClipRect, &curr_clip_rect, sizeof(ImVec4)) == 0 && prev_cmd->TextureId == GetCurrentTextureId() && prev_cmd->UserCallback == NULL)
-        CmdBuffer.pop_back();
-    else
-        curr_cmd->ClipRect = curr_clip_rect;
-}
-
-void ImDrawList::UpdateTextureID()
-{
-    // If current command is used with different settings we need to add a new command
-    const ImTextureID curr_texture_id = GetCurrentTextureId();
-    ImDrawCmd* curr_cmd = CmdBuffer.Size ? &CmdBuffer.back() : NULL;
-    if (!curr_cmd || (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != curr_texture_id) || curr_cmd->UserCallback != NULL)
-    {
-        AddDrawCmd();
-        return;
-    }
-
-    // Try to merge with previous command if it matches, else use current command
-    ImDrawCmd* prev_cmd = CmdBuffer.Size > 1 ? curr_cmd - 1 : NULL;
-    if (curr_cmd->ElemCount == 0 && prev_cmd && prev_cmd->TextureId == curr_texture_id && memcmp(&prev_cmd->ClipRect, &GetCurrentClipRect(), sizeof(ImVec4)) == 0 && prev_cmd->UserCallback == NULL)
-        CmdBuffer.pop_back();
-    else
-        curr_cmd->TextureId = curr_texture_id;
-}
-
-#undef GetCurrentClipRect
-#undef GetCurrentTextureId
-
-// Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
-void ImDrawList::PushClipRect(ImVec2 cr_min, ImVec2 cr_max, bool intersect_with_current_clip_rect)
-{
-    ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y);
-    if (intersect_with_current_clip_rect && _ClipRectStack.Size)
-    {
-        ImVec4 current = _ClipRectStack.Data[_ClipRectStack.Size-1];
-        if (cr.x < current.x) cr.x = current.x;
-        if (cr.y < current.y) cr.y = current.y;
-        if (cr.z > current.z) cr.z = current.z;
-        if (cr.w > current.w) cr.w = current.w;
-    }
-    cr.z = ImMax(cr.x, cr.z);
-    cr.w = ImMax(cr.y, cr.w);
-
-    _ClipRectStack.push_back(cr);
-    UpdateClipRect();
-}
-
-void ImDrawList::PushClipRectFullScreen()
-{
-    PushClipRect(ImVec2(_Data->ClipRectFullscreen.x, _Data->ClipRectFullscreen.y), ImVec2(_Data->ClipRectFullscreen.z, _Data->ClipRectFullscreen.w));
-}
-
-void ImDrawList::PopClipRect()
-{
-    IM_ASSERT(_ClipRectStack.Size > 0);
-    _ClipRectStack.pop_back();
-    UpdateClipRect();
-}
-
-void ImDrawList::PushTextureID(ImTextureID texture_id)
-{
-    _TextureIdStack.push_back(texture_id);
-    UpdateTextureID();
-}
-
-void ImDrawList::PopTextureID()
-{
-    IM_ASSERT(_TextureIdStack.Size > 0);
-    _TextureIdStack.pop_back();
-    UpdateTextureID();
-}
-
-// Reserve space for a number of vertices and indices.
-// You must finish filling your reserved data before calling PrimReserve() again, as it may reallocate or
-// submit the intermediate results. PrimUnreserve() can be used to release unused allocations.
-void ImDrawList::PrimReserve(int idx_count, int vtx_count)
-{
-    // Large mesh support (when enabled)
-    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
-    if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
-    {
-        _VtxCurrentOffset = VtxBuffer.Size;
-        _VtxCurrentIdx = 0;
-        AddDrawCmd();
-    }
-
-    ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1];
-    draw_cmd.ElemCount += idx_count;
-
-    int vtx_buffer_old_size = VtxBuffer.Size;
-    VtxBuffer.resize(vtx_buffer_old_size + vtx_count);
-    _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size;
-
-    int idx_buffer_old_size = IdxBuffer.Size;
-    IdxBuffer.resize(idx_buffer_old_size + idx_count);
-    _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size;
-}
-
-// Release the a number of reserved vertices/indices from the end of the last reservation made with PrimReserve().
-void ImDrawList::PrimUnreserve(int idx_count, int vtx_count)
-{
-    IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
-
-    ImDrawCmd& draw_cmd = CmdBuffer.Data[CmdBuffer.Size - 1];
-    draw_cmd.ElemCount -= idx_count;
-    VtxBuffer.shrink(VtxBuffer.Size - vtx_count);
-    IdxBuffer.shrink(IdxBuffer.Size - idx_count);
-}
-
-// Fully unrolled with inline call to keep our debug builds decently fast.
-void ImDrawList::PrimRect(const ImVec2& a, const ImVec2& c, ImU32 col)
-{
-    ImVec2 b(c.x, a.y), d(a.x, c.y), uv(_Data->TexUvWhitePixel);
-    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
-    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
-    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
-    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
-    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
-    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
-    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col;
-    _VtxWritePtr += 4;
-    _VtxCurrentIdx += 4;
-    _IdxWritePtr += 6;
-}
-
-void ImDrawList::PrimRectUV(const ImVec2& a, const ImVec2& c, const ImVec2& uv_a, const ImVec2& uv_c, ImU32 col)
-{
-    ImVec2 b(c.x, a.y), d(a.x, c.y), uv_b(uv_c.x, uv_a.y), uv_d(uv_a.x, uv_c.y);
-    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
-    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
-    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
-    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
-    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
-    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
-    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
-    _VtxWritePtr += 4;
-    _VtxCurrentIdx += 4;
-    _IdxWritePtr += 6;
-}
-
-void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col)
-{
-    ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
-    _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
-    _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
-    _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
-    _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
-    _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
-    _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
-    _VtxWritePtr += 4;
-    _VtxCurrentIdx += 4;
-    _IdxWritePtr += 6;
-}
-
-// On AddPolyline() and AddConvexPolyFilled() we intentionally avoid using ImVec2 and superflous function calls to optimize debug/non-inlined builds.
-// Those macros expects l-values.
-#define IM_NORMALIZE2F_OVER_ZERO(VX,VY)     do { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = 1.0f / ImSqrt(d2); VX *= inv_len; VY *= inv_len; } } while (0)
-#define IM_FIXNORMAL2F(VX,VY)               do { float d2 = VX*VX + VY*VY; if (d2 < 0.5f) d2 = 0.5f; float inv_lensq = 1.0f / d2; VX *= inv_lensq; VY *= inv_lensq; } while (0)
-
-// TODO: Thickness anti-aliased lines cap are missing their AA fringe.
-// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds.
-void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, bool closed, float thickness)
-{
-    if (points_count < 2)
-        return;
-
-    const ImVec2 uv = _Data->TexUvWhitePixel;
-
-    int count = points_count;
-    if (!closed)
-        count = points_count-1;
-
-    const bool thick_line = thickness > 1.0f;
-    if (Flags & ImDrawListFlags_AntiAliasedLines)
-    {
-        // Anti-aliased stroke
-        const float AA_SIZE = 1.0f;
-        const ImU32 col_trans = col & ~IM_COL32_A_MASK;
-
-        const int idx_count = thick_line ? count*18 : count*12;
-        const int vtx_count = thick_line ? points_count*4 : points_count*3;
-        PrimReserve(idx_count, vtx_count);
-
-        // Temporary buffer
-        ImVec2* temp_normals = (ImVec2*)alloca(points_count * (thick_line ? 5 : 3) * sizeof(ImVec2)); //-V630
-        ImVec2* temp_points = temp_normals + points_count;
-
-        for (int i1 = 0; i1 < count; i1++)
-        {
-            const int i2 = (i1+1) == points_count ? 0 : i1+1;
-            float dx = points[i2].x - points[i1].x;
-            float dy = points[i2].y - points[i1].y;
-            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
-            temp_normals[i1].x = dy;
-            temp_normals[i1].y = -dx;
-        }
-        if (!closed)
-            temp_normals[points_count-1] = temp_normals[points_count-2];
-
-        if (!thick_line)
-        {
-            if (!closed)
-            {
-                temp_points[0] = points[0] + temp_normals[0] * AA_SIZE;
-                temp_points[1] = points[0] - temp_normals[0] * AA_SIZE;
-                temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * AA_SIZE;
-                temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * AA_SIZE;
-            }
-
-            // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
-            unsigned int idx1 = _VtxCurrentIdx;
-            for (int i1 = 0; i1 < count; i1++)
-            {
-                const int i2 = (i1+1) == points_count ? 0 : i1+1;
-                unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3;
-
-                // Average normals
-                float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
-                float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
-                IM_FIXNORMAL2F(dm_x, dm_y);
-                dm_x *= AA_SIZE;
-                dm_y *= AA_SIZE;
-
-                // Add temporary vertexes
-                ImVec2* out_vtx = &temp_points[i2*2];
-                out_vtx[0].x = points[i2].x + dm_x;
-                out_vtx[0].y = points[i2].y + dm_y;
-                out_vtx[1].x = points[i2].x - dm_x;
-                out_vtx[1].y = points[i2].y - dm_y;
-
-                // Add indexes
-                _IdxWritePtr[0] = (ImDrawIdx)(idx2+0); _IdxWritePtr[1] = (ImDrawIdx)(idx1+0); _IdxWritePtr[2] = (ImDrawIdx)(idx1+2);
-                _IdxWritePtr[3] = (ImDrawIdx)(idx1+2); _IdxWritePtr[4] = (ImDrawIdx)(idx2+2); _IdxWritePtr[5] = (ImDrawIdx)(idx2+0);
-                _IdxWritePtr[6] = (ImDrawIdx)(idx2+1); _IdxWritePtr[7] = (ImDrawIdx)(idx1+1); _IdxWritePtr[8] = (ImDrawIdx)(idx1+0);
-                _IdxWritePtr[9] = (ImDrawIdx)(idx1+0); _IdxWritePtr[10]= (ImDrawIdx)(idx2+0); _IdxWritePtr[11]= (ImDrawIdx)(idx2+1);
-                _IdxWritePtr += 12;
-
-                idx1 = idx2;
-            }
-
-            // Add vertexes
-            for (int i = 0; i < points_count; i++)
-            {
-                _VtxWritePtr[0].pos = points[i];          _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
-                _VtxWritePtr[1].pos = temp_points[i*2+0]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;
-                _VtxWritePtr[2].pos = temp_points[i*2+1]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col_trans;
-                _VtxWritePtr += 3;
-            }
-        }
-        else
-        {
-            const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f;
-            if (!closed)
-            {
-                temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE);
-                temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness);
-                temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness);
-                temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE);
-                temp_points[(points_count-1)*4+0] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
-                temp_points[(points_count-1)*4+1] = points[points_count-1] + temp_normals[points_count-1] * (half_inner_thickness);
-                temp_points[(points_count-1)*4+2] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness);
-                temp_points[(points_count-1)*4+3] = points[points_count-1] - temp_normals[points_count-1] * (half_inner_thickness + AA_SIZE);
-            }
-
-            // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
-            unsigned int idx1 = _VtxCurrentIdx;
-            for (int i1 = 0; i1 < count; i1++)
-            {
-                const int i2 = (i1+1) == points_count ? 0 : i1+1;
-                unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+4;
-
-                // Average normals
-                float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
-                float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
-                IM_FIXNORMAL2F(dm_x, dm_y);
-                float dm_out_x = dm_x * (half_inner_thickness + AA_SIZE);
-                float dm_out_y = dm_y * (half_inner_thickness + AA_SIZE);
-                float dm_in_x = dm_x * half_inner_thickness;
-                float dm_in_y = dm_y * half_inner_thickness;
-
-                // Add temporary vertexes
-                ImVec2* out_vtx = &temp_points[i2*4];
-                out_vtx[0].x = points[i2].x + dm_out_x;
-                out_vtx[0].y = points[i2].y + dm_out_y;
-                out_vtx[1].x = points[i2].x + dm_in_x;
-                out_vtx[1].y = points[i2].y + dm_in_y;
-                out_vtx[2].x = points[i2].x - dm_in_x;
-                out_vtx[2].y = points[i2].y - dm_in_y;
-                out_vtx[3].x = points[i2].x - dm_out_x;
-                out_vtx[3].y = points[i2].y - dm_out_y;
-
-                // Add indexes
-                _IdxWritePtr[0]  = (ImDrawIdx)(idx2+1); _IdxWritePtr[1]  = (ImDrawIdx)(idx1+1); _IdxWritePtr[2]  = (ImDrawIdx)(idx1+2);
-                _IdxWritePtr[3]  = (ImDrawIdx)(idx1+2); _IdxWritePtr[4]  = (ImDrawIdx)(idx2+2); _IdxWritePtr[5]  = (ImDrawIdx)(idx2+1);
-                _IdxWritePtr[6]  = (ImDrawIdx)(idx2+1); _IdxWritePtr[7]  = (ImDrawIdx)(idx1+1); _IdxWritePtr[8]  = (ImDrawIdx)(idx1+0);
-                _IdxWritePtr[9]  = (ImDrawIdx)(idx1+0); _IdxWritePtr[10] = (ImDrawIdx)(idx2+0); _IdxWritePtr[11] = (ImDrawIdx)(idx2+1);
-                _IdxWritePtr[12] = (ImDrawIdx)(idx2+2); _IdxWritePtr[13] = (ImDrawIdx)(idx1+2); _IdxWritePtr[14] = (ImDrawIdx)(idx1+3);
-                _IdxWritePtr[15] = (ImDrawIdx)(idx1+3); _IdxWritePtr[16] = (ImDrawIdx)(idx2+3); _IdxWritePtr[17] = (ImDrawIdx)(idx2+2);
-                _IdxWritePtr += 18;
-
-                idx1 = idx2;
-            }
-
-            // Add vertexes
-            for (int i = 0; i < points_count; i++)
-            {
-                _VtxWritePtr[0].pos = temp_points[i*4+0]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col_trans;
-                _VtxWritePtr[1].pos = temp_points[i*4+1]; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
-                _VtxWritePtr[2].pos = temp_points[i*4+2]; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
-                _VtxWritePtr[3].pos = temp_points[i*4+3]; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col_trans;
-                _VtxWritePtr += 4;
-            }
-        }
-        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
-    }
-    else
-    {
-        // Non Anti-aliased Stroke
-        const int idx_count = count*6;
-        const int vtx_count = count*4;      // FIXME-OPT: Not sharing edges
-        PrimReserve(idx_count, vtx_count);
-
-        for (int i1 = 0; i1 < count; i1++)
-        {
-            const int i2 = (i1+1) == points_count ? 0 : i1+1;
-            const ImVec2& p1 = points[i1];
-            const ImVec2& p2 = points[i2];
-
-            float dx = p2.x - p1.x;
-            float dy = p2.y - p1.y;
-            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
-            dx *= (thickness * 0.5f);
-            dy *= (thickness * 0.5f);
-
-            _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
-            _VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
-            _VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
-            _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col;
-            _VtxWritePtr += 4;
-
-            _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+2);
-            _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx+2); _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx+3);
-            _IdxWritePtr += 6;
-            _VtxCurrentIdx += 4;
-        }
-    }
-}
-
-// We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds.
-void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col)
-{
-    if (points_count < 3)
-        return;
-
-    const ImVec2 uv = _Data->TexUvWhitePixel;
-
-    if (Flags & ImDrawListFlags_AntiAliasedFill)
-    {
-        // Anti-aliased Fill
-        const float AA_SIZE = 1.0f;
-        const ImU32 col_trans = col & ~IM_COL32_A_MASK;
-        const int idx_count = (points_count-2)*3 + points_count*6;
-        const int vtx_count = (points_count*2);
-        PrimReserve(idx_count, vtx_count);
-
-        // Add indexes for fill
-        unsigned int vtx_inner_idx = _VtxCurrentIdx;
-        unsigned int vtx_outer_idx = _VtxCurrentIdx+1;
-        for (int i = 2; i < points_count; i++)
-        {
-            _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+((i-1)<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx+(i<<1));
-            _IdxWritePtr += 3;
-        }
-
-        // Compute normals
-        ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630
-        for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
-        {
-            const ImVec2& p0 = points[i0];
-            const ImVec2& p1 = points[i1];
-            float dx = p1.x - p0.x;
-            float dy = p1.y - p0.y;
-            IM_NORMALIZE2F_OVER_ZERO(dx, dy);
-            temp_normals[i0].x = dy;
-            temp_normals[i0].y = -dx;
-        }
-
-        for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++)
-        {
-            // Average normals
-            const ImVec2& n0 = temp_normals[i0];
-            const ImVec2& n1 = temp_normals[i1];
-            float dm_x = (n0.x + n1.x) * 0.5f;
-            float dm_y = (n0.y + n1.y) * 0.5f;
-            IM_FIXNORMAL2F(dm_x, dm_y);
-            dm_x *= AA_SIZE * 0.5f;
-            dm_y *= AA_SIZE * 0.5f;
-
-            // Add vertices
-            _VtxWritePtr[0].pos.x = (points[i1].x - dm_x); _VtxWritePtr[0].pos.y = (points[i1].y - dm_y); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;        // Inner
-            _VtxWritePtr[1].pos.x = (points[i1].x + dm_x); _VtxWritePtr[1].pos.y = (points[i1].y + dm_y); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans;  // Outer
-            _VtxWritePtr += 2;
-
-            // Add indexes for fringes
-            _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx+(i0<<1));
-            _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx+(i1<<1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx+(i1<<1));
-            _IdxWritePtr += 6;
-        }
-        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
-    }
-    else
-    {
-        // Non Anti-aliased Fill
-        const int idx_count = (points_count-2)*3;
-        const int vtx_count = points_count;
-        PrimReserve(idx_count, vtx_count);
-        for (int i = 0; i < vtx_count; i++)
-        {
-            _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
-            _VtxWritePtr++;
-        }
-        for (int i = 2; i < points_count; i++)
-        {
-            _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+i-1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+i);
-            _IdxWritePtr += 3;
-        }
-        _VtxCurrentIdx += (ImDrawIdx)vtx_count;
-    }
-}
-
-void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
-{
-    if (radius == 0.0f || a_min_of_12 > a_max_of_12)
-    {
-        _Path.push_back(center);
-        return;
-    }
-
-    // For legacy reason the PathArcToFast() always takes angles where 2*PI is represented by 12,
-    // but it is possible to set IM_DRAWLIST_ARCFAST_TESSELATION_MULTIPLIER to a higher value. This should compile to a no-op otherwise.
-#if IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER != 1
-    a_min_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
-    a_max_of_12 *= IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER;
-#endif
-
-    _Path.reserve(_Path.Size + (a_max_of_12 - a_min_of_12 + 1));
-    for (int a = a_min_of_12; a <= a_max_of_12; a++)
-    {
-        const ImVec2& c = _Data->ArcFastVtx[a % IM_ARRAYSIZE(_Data->ArcFastVtx)];
-        _Path.push_back(ImVec2(center.x + c.x * radius, center.y + c.y * radius));
-    }
-}
-
-void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
-{
-    if (radius == 0.0f)
-    {
-        _Path.push_back(center);
-        return;
-    }
-
-    // Note that we are adding a point at both a_min and a_max.
-    // If you are trying to draw a full closed circle you don't want the overlapping points!
-    _Path.reserve(_Path.Size + (num_segments + 1));
-    for (int i = 0; i <= num_segments; i++)
-    {
-        const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
-        _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius));
-    }
-}
-
-ImVec2 ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t)
-{
-    float u = 1.0f - t;
-    float w1 = u*u*u;
-    float w2 = 3*u*u*t;
-    float w3 = 3*u*t*t;
-    float w4 = t*t*t;
-    return ImVec2(w1*p1.x + w2*p2.x + w3*p3.x + w4*p4.x, w1*p1.y + w2*p2.y + w3*p3.y + w4*p4.y);
-}
-
-// Closely mimics BezierClosestPointCasteljauStep() in imgui.cpp
-static void PathBezierToCasteljau(ImVector<ImVec2>* path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
-{
-    float dx = x4 - x1;
-    float dy = y4 - y1;
-    float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
-    float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
-    d2 = (d2 >= 0) ? d2 : -d2;
-    d3 = (d3 >= 0) ? d3 : -d3;
-    if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy))
-    {
-        path->push_back(ImVec2(x4, y4));
-    }
-    else if (level < 10)
-    {
-        float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f;
-        float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f;
-        float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f;
-        float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f;
-        float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f;
-        float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f;
-        PathBezierToCasteljau(path, x1,y1,        x12,y12,    x123,y123,  x1234,y1234, tess_tol, level+1);
-        PathBezierToCasteljau(path, x1234,y1234,  x234,y234,  x34,y34,    x4,y4,       tess_tol, level+1);
-    }
-}
-
-void ImDrawList::PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments)
-{
-    ImVec2 p1 = _Path.back();
-    if (num_segments == 0)
-    {
-        PathBezierToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, _Data->CurveTessellationTol, 0); // Auto-tessellated
-    }
-    else
-    {
-        float t_step = 1.0f / (float)num_segments;
-        for (int i_step = 1; i_step <= num_segments; i_step++)
-            _Path.push_back(ImBezierCalc(p1, p2, p3, p4, t_step * i_step));
-    }
-}
-
-void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDrawCornerFlags rounding_corners)
-{
-    rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((rounding_corners & ImDrawCornerFlags_Top)  == ImDrawCornerFlags_Top)  || ((rounding_corners & ImDrawCornerFlags_Bot)   == ImDrawCornerFlags_Bot)   ? 0.5f : 1.0f ) - 1.0f);
-    rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((rounding_corners & ImDrawCornerFlags_Left) == ImDrawCornerFlags_Left) || ((rounding_corners & ImDrawCornerFlags_Right) == ImDrawCornerFlags_Right) ? 0.5f : 1.0f ) - 1.0f);
-
-    if (rounding <= 0.0f || rounding_corners == 0)
-    {
-        PathLineTo(a);
-        PathLineTo(ImVec2(b.x, a.y));
-        PathLineTo(b);
-        PathLineTo(ImVec2(a.x, b.y));
-    }
-    else
-    {
-        const float rounding_tl = (rounding_corners & ImDrawCornerFlags_TopLeft) ? rounding : 0.0f;
-        const float rounding_tr = (rounding_corners & ImDrawCornerFlags_TopRight) ? rounding : 0.0f;
-        const float rounding_br = (rounding_corners & ImDrawCornerFlags_BotRight) ? rounding : 0.0f;
-        const float rounding_bl = (rounding_corners & ImDrawCornerFlags_BotLeft) ? rounding : 0.0f;
-        PathArcToFast(ImVec2(a.x + rounding_tl, a.y + rounding_tl), rounding_tl, 6, 9);
-        PathArcToFast(ImVec2(b.x - rounding_tr, a.y + rounding_tr), rounding_tr, 9, 12);
-        PathArcToFast(ImVec2(b.x - rounding_br, b.y - rounding_br), rounding_br, 0, 3);
-        PathArcToFast(ImVec2(a.x + rounding_bl, b.y - rounding_bl), rounding_bl, 3, 6);
-    }
-}
-
-void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-    PathLineTo(p1 + ImVec2(0.5f, 0.5f));
-    PathLineTo(p2 + ImVec2(0.5f, 0.5f));
-    PathStroke(col, false, thickness);
-}
-
-// p_min = upper-left, p_max = lower-right
-// Note we don't render 1 pixels sized rectangles properly.
-void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-    if (Flags & ImDrawListFlags_AntiAliasedLines)
-        PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.50f,0.50f), rounding, rounding_corners);
-    else
-        PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.49f,0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes.
-    PathStroke(col, true, thickness);
-}
-
-void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-    if (rounding > 0.0f)
-    {
-        PathRect(p_min, p_max, rounding, rounding_corners);
-        PathFillConvex(col);
-    }
-    else
-    {
-        PrimReserve(6, 4);
-        PrimRect(p_min, p_max, col);
-    }
-}
-
-// p_min = upper-left, p_max = lower-right
-void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
-{
-    if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
-        return;
-
-    const ImVec2 uv = _Data->TexUvWhitePixel;
-    PrimReserve(6, 4);
-    PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2));
-    PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3));
-    PrimWriteVtx(p_min, uv, col_upr_left);
-    PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
-    PrimWriteVtx(p_max, uv, col_bot_right);
-    PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);
-}
-
-void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    PathLineTo(p1);
-    PathLineTo(p2);
-    PathLineTo(p3);
-    PathLineTo(p4);
-    PathStroke(col, true, thickness);
-}
-
-void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    PathLineTo(p1);
-    PathLineTo(p2);
-    PathLineTo(p3);
-    PathLineTo(p4);
-    PathFillConvex(col);
-}
-
-void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    PathLineTo(p1);
-    PathLineTo(p2);
-    PathLineTo(p3);
-    PathStroke(col, true, thickness);
-}
-
-void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    PathLineTo(p1);
-    PathLineTo(p2);
-    PathLineTo(p3);
-    PathFillConvex(col);
-}
-
-void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
-        return;
-
-    // Obtain segment count
-    if (num_segments <= 0)
-    {
-        // Automatic segment count
-        const int radius_idx = (int)radius - 1;
-        if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
-            num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value
-        else
-            num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);
-    }
-    else
-    {
-        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
-        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
-    }
-
-    // Because we are filling a closed shape we remove 1 from the count of segments/points
-    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
-    if (num_segments == 12)
-        PathArcToFast(center, radius - 0.5f, 0, 12);
-    else
-        PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
-    PathStroke(col, true, thickness);
-}
-
-void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
-{
-    if ((col & IM_COL32_A_MASK) == 0 || radius <= 0.0f)
-        return;
-
-    // Obtain segment count
-    if (num_segments <= 0)
-    {
-        // Automatic segment count
-        const int radius_idx = (int)radius - 1;
-        if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
-            num_segments = _Data->CircleSegmentCounts[radius_idx]; // Use cached value
-        else
-            num_segments = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);
-    }
-    else
-    {
-        // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
-        num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
-    }
-
-    // Because we are filling a closed shape we remove 1 from the count of segments/points
-    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
-    if (num_segments == 12)
-        PathArcToFast(center, radius, 0, 12);
-    else
-        PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
-    PathFillConvex(col);
-}
-
-// Guaranteed to honor 'num_segments'
-void ImDrawList::AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
-{
-    if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
-        return;
-
-    // Because we are filling a closed shape we remove 1 from the count of segments/points
-    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
-    PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
-    PathStroke(col, true, thickness);
-}
-
-// Guaranteed to honor 'num_segments'
-void ImDrawList::AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
-{
-    if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
-        return;
-
-    // Because we are filling a closed shape we remove 1 from the count of segments/points
-    const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
-    PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
-    PathFillConvex(col);
-}
-
-// Cubic Bezier takes 4 controls points
-void ImDrawList::AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    PathLineTo(p1);
-    PathBezierCurveTo(p2, p3, p4, num_segments);
-    PathStroke(col, false, thickness);
-}
-
-void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    if (text_end == NULL)
-        text_end = text_begin + strlen(text_begin);
-    if (text_begin == text_end)
-        return;
-
-    // Pull default font/size from the shared ImDrawListSharedData instance
-    if (font == NULL)
-        font = _Data->Font;
-    if (font_size == 0.0f)
-        font_size = _Data->FontSize;
-
-    IM_ASSERT(font->ContainerAtlas->TexID == _TextureIdStack.back());  // Use high-level ImGui::PushFont() or low-level ImDrawList::PushTextureId() to change font.
-
-    ImVec4 clip_rect = _ClipRectStack.back();
-    if (cpu_fine_clip_rect)
-    {
-        clip_rect.x = ImMax(clip_rect.x, cpu_fine_clip_rect->x);
-        clip_rect.y = ImMax(clip_rect.y, cpu_fine_clip_rect->y);
-        clip_rect.z = ImMin(clip_rect.z, cpu_fine_clip_rect->z);
-        clip_rect.w = ImMin(clip_rect.w, cpu_fine_clip_rect->w);
-    }
-    font->RenderText(this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect != NULL);
-}
-
-void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end)
-{
-    AddText(NULL, 0.0f, pos, col, text_begin, text_end);
-}
-
-void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
-    if (push_texture_id)
-        PushTextureID(user_texture_id);
-
-    PrimReserve(6, 4);
-    PrimRectUV(p_min, p_max, uv_min, uv_max, col);
-
-    if (push_texture_id)
-        PopTextureID();
-}
-
-void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1, const ImVec2& uv2, const ImVec2& uv3, const ImVec2& uv4, ImU32 col)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
-    if (push_texture_id)
-        PushTextureID(user_texture_id);
-
-    PrimReserve(6, 4);
-    PrimQuadUV(p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
-
-    if (push_texture_id)
-        PopTextureID();
-}
-
-void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawCornerFlags rounding_corners)
-{
-    if ((col & IM_COL32_A_MASK) == 0)
-        return;
-
-    if (rounding <= 0.0f || (rounding_corners & ImDrawCornerFlags_All) == 0)
-    {
-        AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col);
-        return;
-    }
-
-    const bool push_texture_id = _TextureIdStack.empty() || user_texture_id != _TextureIdStack.back();
-    if (push_texture_id)
-        PushTextureID(user_texture_id);
-
-    int vert_start_idx = VtxBuffer.Size;
-    PathRect(p_min, p_max, rounding, rounding_corners);
-    PathFillConvex(col);
-    int vert_end_idx = VtxBuffer.Size;
-    ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, p_min, p_max, uv_min, uv_max, true);
-
-    if (push_texture_id)
-        PopTextureID();
-}
-
-
-//-----------------------------------------------------------------------------
-// ImDrawListSplitter
-//-----------------------------------------------------------------------------
-// FIXME: This may be a little confusing, trying to be a little too low-level/optimal instead of just doing vector swap..
-//-----------------------------------------------------------------------------
-
-void ImDrawListSplitter::ClearFreeMemory()
-{
-    for (int i = 0; i < _Channels.Size; i++)
-    {
-        if (i == _Current)
-            memset(&_Channels[i], 0, sizeof(_Channels[i]));  // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again
-        _Channels[i]._CmdBuffer.clear();
-        _Channels[i]._IdxBuffer.clear();
-    }
-    _Current = 0;
-    _Count = 1;
-    _Channels.clear();
-}
-
-void ImDrawListSplitter::Split(ImDrawList* draw_list, int channels_count)
-{
-    IM_ASSERT(_Current == 0 && _Count <= 1 && "Nested channel splitting is not supported. Please use separate instances of ImDrawListSplitter.");
-    int old_channels_count = _Channels.Size;
-    if (old_channels_count < channels_count)
-        _Channels.resize(channels_count);
-    _Count = channels_count;
-
-    // Channels[] (24/32 bytes each) hold storage that we'll swap with draw_list->_CmdBuffer/_IdxBuffer
-    // The content of Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
-    // When we switch to the next channel, we'll copy draw_list->_CmdBuffer/_IdxBuffer into Channels[0] and then Channels[1] into draw_list->CmdBuffer/_IdxBuffer
-    memset(&_Channels[0], 0, sizeof(ImDrawChannel));
-    for (int i = 1; i < channels_count; i++)
-    {
-        if (i >= old_channels_count)
-        {
-            IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
-        }
-        else
-        {
-            _Channels[i]._CmdBuffer.resize(0);
-            _Channels[i]._IdxBuffer.resize(0);
-        }
-        if (_Channels[i]._CmdBuffer.Size == 0)
-        {
-            ImDrawCmd draw_cmd;
-            draw_cmd.ClipRect = draw_list->_ClipRectStack.back();
-            draw_cmd.TextureId = draw_list->_TextureIdStack.back();
-            _Channels[i]._CmdBuffer.push_back(draw_cmd);
-        }
-    }
-}
-
-static inline bool CanMergeDrawCommands(ImDrawCmd* a, ImDrawCmd* b)
-{
-    return memcmp(&a->ClipRect, &b->ClipRect, sizeof(a->ClipRect)) == 0 && a->TextureId == b->TextureId && a->VtxOffset == b->VtxOffset && !a->UserCallback && !b->UserCallback;
-}
-
-void ImDrawListSplitter::Merge(ImDrawList* draw_list)
-{
-    // Note that we never use or rely on channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use.
-    if (_Count <= 1)
-        return;
-
-    SetCurrentChannel(draw_list, 0);
-    if (draw_list->CmdBuffer.Size != 0 && draw_list->CmdBuffer.back().ElemCount == 0)
-        draw_list->CmdBuffer.pop_back();
-
-    // Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command.
-    int new_cmd_buffer_count = 0;
-    int new_idx_buffer_count = 0;
-    ImDrawCmd* last_cmd = (_Count > 0 && draw_list->CmdBuffer.Size > 0) ? &draw_list->CmdBuffer.back() : NULL;
-    int idx_offset = last_cmd ? last_cmd->IdxOffset + last_cmd->ElemCount : 0;
-    for (int i = 1; i < _Count; i++)
-    {
-        ImDrawChannel& ch = _Channels[i];
-        if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0)
-            ch._CmdBuffer.pop_back();
-        if (ch._CmdBuffer.Size > 0 && last_cmd != NULL && CanMergeDrawCommands(last_cmd, &ch._CmdBuffer[0]))
-        {
-            // Merge previous channel last draw command with current channel first draw command if matching.
-            last_cmd->ElemCount += ch._CmdBuffer[0].ElemCount;
-            idx_offset += ch._CmdBuffer[0].ElemCount;
-            ch._CmdBuffer.erase(ch._CmdBuffer.Data); // FIXME-OPT: Improve for multiple merges.
-        }
-        if (ch._CmdBuffer.Size > 0)
-            last_cmd = &ch._CmdBuffer.back();
-        new_cmd_buffer_count += ch._CmdBuffer.Size;
-        new_idx_buffer_count += ch._IdxBuffer.Size;
-        for (int cmd_n = 0; cmd_n < ch._CmdBuffer.Size; cmd_n++)
-        {
-            ch._CmdBuffer.Data[cmd_n].IdxOffset = idx_offset;
-            idx_offset += ch._CmdBuffer.Data[cmd_n].ElemCount;
-        }
-    }
-    draw_list->CmdBuffer.resize(draw_list->CmdBuffer.Size + new_cmd_buffer_count);
-    draw_list->IdxBuffer.resize(draw_list->IdxBuffer.Size + new_idx_buffer_count);
-
-    // Write commands and indices in order (they are fairly small structures, we don't copy vertices only indices)
-    ImDrawCmd* cmd_write = draw_list->CmdBuffer.Data + draw_list->CmdBuffer.Size - new_cmd_buffer_count;
-    ImDrawIdx* idx_write = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size - new_idx_buffer_count;
-    for (int i = 1; i < _Count; i++)
-    {
-        ImDrawChannel& ch = _Channels[i];
-        if (int sz = ch._CmdBuffer.Size) { memcpy(cmd_write, ch._CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
-        if (int sz = ch._IdxBuffer.Size) { memcpy(idx_write, ch._IdxBuffer.Data, sz * sizeof(ImDrawIdx)); idx_write += sz; }
-    }
-    draw_list->_IdxWritePtr = idx_write;
-    draw_list->UpdateClipRect(); // We call this instead of AddDrawCmd(), so that empty channels won't produce an extra draw call.
-    draw_list->UpdateTextureID();
-    _Count = 1;
-}
-
-void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx)
-{
-    IM_ASSERT(idx >= 0 && idx < _Count);
-    if (_Current == idx)
-        return;
-    // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap()
-    memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer));
-    memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer));
-    _Current = idx;
-    memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
-    memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
-    draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImDrawData
-//-----------------------------------------------------------------------------
-
-// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
-void ImDrawData::DeIndexAllBuffers()
-{
-    ImVector<ImDrawVert> new_vtx_buffer;
-    TotalVtxCount = TotalIdxCount = 0;
-    for (int i = 0; i < CmdListsCount; i++)
-    {
-        ImDrawList* cmd_list = CmdLists[i];
-        if (cmd_list->IdxBuffer.empty())
-            continue;
-        new_vtx_buffer.resize(cmd_list->IdxBuffer.Size);
-        for (int j = 0; j < cmd_list->IdxBuffer.Size; j++)
-            new_vtx_buffer[j] = cmd_list->VtxBuffer[cmd_list->IdxBuffer[j]];
-        cmd_list->VtxBuffer.swap(new_vtx_buffer);
-        cmd_list->IdxBuffer.resize(0);
-        TotalVtxCount += cmd_list->VtxBuffer.Size;
-    }
-}
-
-// Helper to scale the ClipRect field of each ImDrawCmd.
-// Use if your final output buffer is at a different scale than draw_data->DisplaySize,
-// or if there is a difference between your window resolution and framebuffer resolution.
-void ImDrawData::ScaleClipRects(const ImVec2& fb_scale)
-{
-    for (int i = 0; i < CmdListsCount; i++)
-    {
-        ImDrawList* cmd_list = CmdLists[i];
-        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
-        {
-            ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i];
-            cmd->ClipRect = ImVec4(cmd->ClipRect.x * fb_scale.x, cmd->ClipRect.y * fb_scale.y, cmd->ClipRect.z * fb_scale.x, cmd->ClipRect.w * fb_scale.y);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Helpers ShadeVertsXXX functions
-//-----------------------------------------------------------------------------
-
-// Generic linear color gradient, write to RGB fields, leave A untouched.
-void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
-{
-    ImVec2 gradient_extent = gradient_p1 - gradient_p0;
-    float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent);
-    ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
-    ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
-    for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
-    {
-        float d = ImDot(vert->pos - gradient_p0, gradient_extent);
-        float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
-        int r = ImLerp((int)(col0 >> IM_COL32_R_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_R_SHIFT) & 0xFF, t);
-        int g = ImLerp((int)(col0 >> IM_COL32_G_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_G_SHIFT) & 0xFF, t);
-        int b = ImLerp((int)(col0 >> IM_COL32_B_SHIFT) & 0xFF, (int)(col1 >> IM_COL32_B_SHIFT) & 0xFF, t);
-        vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK);
-    }
-}
-
-// Distribute UV over (a, b) rectangle
-void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp)
-{
-    const ImVec2 size = b - a;
-    const ImVec2 uv_size = uv_b - uv_a;
-    const ImVec2 scale = ImVec2(
-        size.x != 0.0f ? (uv_size.x / size.x) : 0.0f,
-        size.y != 0.0f ? (uv_size.y / size.y) : 0.0f);
-
-    ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
-    ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
-    if (clamp)
-    {
-        const ImVec2 min = ImMin(uv_a, uv_b);
-        const ImVec2 max = ImMax(uv_a, uv_b);
-        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
-            vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max);
-    }
-    else
-    {
-        for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
-            vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale);
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImFontConfig
-//-----------------------------------------------------------------------------
-
-ImFontConfig::ImFontConfig()
-{
-    FontData = NULL;
-    FontDataSize = 0;
-    FontDataOwnedByAtlas = true;
-    FontNo = 0;
-    SizePixels = 0.0f;
-    OversampleH = 3; // FIXME: 2 may be a better default?
-    OversampleV = 1;
-    PixelSnapH = false;
-    GlyphExtraSpacing = ImVec2(0.0f, 0.0f);
-    GlyphOffset = ImVec2(0.0f, 0.0f);
-    GlyphRanges = NULL;
-    GlyphMinAdvanceX = 0.0f;
-    GlyphMaxAdvanceX = FLT_MAX;
-    MergeMode = false;
-    RasterizerFlags = 0x00;
-    RasterizerMultiply = 1.0f;
-    EllipsisChar = (ImWchar)-1;
-    memset(Name, 0, sizeof(Name));
-    DstFont = NULL;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImFontAtlas
-//-----------------------------------------------------------------------------
-
-// A work of art lies ahead! (. = white layer, X = black layer, others are blank)
-// The white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes.
-const int FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF = 108;
-const int FONT_ATLAS_DEFAULT_TEX_DATA_H      = 27;
-const unsigned int FONT_ATLAS_DEFAULT_TEX_DATA_ID = 0x80000000;
-static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] =
-{
-    "..-         -XXXXXXX-    X    -           X           -XXXXXXX          -          XXXXXXX-     XX          "
-    "..-         -X.....X-   X.X   -          X.X          -X.....X          -          X.....X-    X..X         "
-    "---         -XXX.XXX-  X...X  -         X...X         -X....X           -           X....X-    X..X         "
-    "X           -  X.X  - X.....X -        X.....X        -X...X            -            X...X-    X..X         "
-    "XX          -  X.X  -X.......X-       X.......X       -X..X.X           -           X.X..X-    X..X         "
-    "X.X         -  X.X  -XXXX.XXXX-       XXXX.XXXX       -X.X X.X          -          X.X X.X-    X..XXX       "
-    "X..X        -  X.X  -   X.X   -          X.X          -XX   X.X         -         X.X   XX-    X..X..XXX    "
-    "X...X       -  X.X  -   X.X   -    XX    X.X    XX    -      X.X        -        X.X      -    X..X..X..XX  "
-    "X....X      -  X.X  -   X.X   -   X.X    X.X    X.X   -       X.X       -       X.X       -    X..X..X..X.X "
-    "X.....X     -  X.X  -   X.X   -  X..X    X.X    X..X  -        X.X      -      X.X        -XXX X..X..X..X..X"
-    "X......X    -  X.X  -   X.X   - X...XXXXXX.XXXXXX...X -         X.X   XX-XX   X.X         -X..XX........X..X"
-    "X.......X   -  X.X  -   X.X   -X.....................X-          X.X X.X-X.X X.X          -X...X...........X"
-    "X........X  -  X.X  -   X.X   - X...XXXXXX.XXXXXX...X -           X.X..X-X..X.X           - X..............X"
-    "X.........X -XXX.XXX-   X.X   -  X..X    X.X    X..X  -            X...X-X...X            -  X.............X"
-    "X..........X-X.....X-   X.X   -   X.X    X.X    X.X   -           X....X-X....X           -  X.............X"
-    "X......XXXXX-XXXXXXX-   X.X   -    XX    X.X    XX    -          X.....X-X.....X          -   X............X"
-    "X...X..X    ---------   X.X   -          X.X          -          XXXXXXX-XXXXXXX          -   X...........X "
-    "X..X X..X   -       -XXXX.XXXX-       XXXX.XXXX       -------------------------------------    X..........X "
-    "X.X  X..X   -       -X.......X-       X.......X       -    XX           XX    -           -    X..........X "
-    "XX    X..X  -       - X.....X -        X.....X        -   X.X           X.X   -           -     X........X  "
-    "      X..X          -  X...X  -         X...X         -  X..X           X..X  -           -     X........X  "
-    "       XX           -   X.X   -          X.X          - X...XXXXXXXXXXXXX...X -           -     XXXXXXXXXX  "
-    "------------        -    X    -           X           -X.....................X-           ------------------"
-    "                    ----------------------------------- X...XXXXXXXXXXXXX...X -                             "
-    "                                                      -  X..X           X..X  -                             "
-    "                                                      -   X.X           X.X   -                             "
-    "                                                      -    XX           XX    -                             "
-};
-
-static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3] =
-{
-    // Pos ........ Size ......... Offset ......
-    { ImVec2( 0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow
-    { ImVec2(13,0), ImVec2( 7,16), ImVec2( 1, 8) }, // ImGuiMouseCursor_TextInput
-    { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_ResizeAll
-    { ImVec2(21,0), ImVec2( 9,23), ImVec2( 4,11) }, // ImGuiMouseCursor_ResizeNS
-    { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 4) }, // ImGuiMouseCursor_ResizeEW
-    { ImVec2(73,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNESW
-    { ImVec2(55,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNWSE
-    { ImVec2(91,0), ImVec2(17,22), ImVec2( 5, 0) }, // ImGuiMouseCursor_Hand
-};
-
-ImFontAtlas::ImFontAtlas()
-{
-    Locked = false;
-    Flags = ImFontAtlasFlags_None;
-    TexID = (ImTextureID)NULL;
-    TexDesiredWidth = 0;
-    TexGlyphPadding = 1;
-
-    TexPixelsAlpha8 = NULL;
-    TexPixelsRGBA32 = NULL;
-    TexWidth = TexHeight = 0;
-    TexUvScale = ImVec2(0.0f, 0.0f);
-    TexUvWhitePixel = ImVec2(0.0f, 0.0f);
-    for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
-        CustomRectIds[n] = -1;
-}
-
-ImFontAtlas::~ImFontAtlas()
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    Clear();
-}
-
-void    ImFontAtlas::ClearInputData()
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    for (int i = 0; i < ConfigData.Size; i++)
-        if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas)
-        {
-            IM_FREE(ConfigData[i].FontData);
-            ConfigData[i].FontData = NULL;
-        }
-
-    // When clearing this we lose access to the font name and other information used to build the font.
-    for (int i = 0; i < Fonts.Size; i++)
-        if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size)
-        {
-            Fonts[i]->ConfigData = NULL;
-            Fonts[i]->ConfigDataCount = 0;
-        }
-    ConfigData.clear();
-    CustomRects.clear();
-    for (int n = 0; n < IM_ARRAYSIZE(CustomRectIds); n++)
-        CustomRectIds[n] = -1;
-}
-
-void    ImFontAtlas::ClearTexData()
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    if (TexPixelsAlpha8)
-        IM_FREE(TexPixelsAlpha8);
-    if (TexPixelsRGBA32)
-        IM_FREE(TexPixelsRGBA32);
-    TexPixelsAlpha8 = NULL;
-    TexPixelsRGBA32 = NULL;
-}
-
-void    ImFontAtlas::ClearFonts()
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    for (int i = 0; i < Fonts.Size; i++)
-        IM_DELETE(Fonts[i]);
-    Fonts.clear();
-}
-
-void    ImFontAtlas::Clear()
-{
-    ClearInputData();
-    ClearTexData();
-    ClearFonts();
-}
-
-void    ImFontAtlas::GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
-{
-    // Build atlas on demand
-    if (TexPixelsAlpha8 == NULL)
-    {
-        if (ConfigData.empty())
-            AddFontDefault();
-        Build();
-    }
-
-    *out_pixels = TexPixelsAlpha8;
-    if (out_width) *out_width = TexWidth;
-    if (out_height) *out_height = TexHeight;
-    if (out_bytes_per_pixel) *out_bytes_per_pixel = 1;
-}
-
-void    ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
-{
-    // Convert to RGBA32 format on demand
-    // Although it is likely to be the most commonly used format, our font rendering is 1 channel / 8 bpp
-    if (!TexPixelsRGBA32)
-    {
-        unsigned char* pixels = NULL;
-        GetTexDataAsAlpha8(&pixels, NULL, NULL);
-        if (pixels)
-        {
-            TexPixelsRGBA32 = (unsigned int*)IM_ALLOC((size_t)TexWidth * (size_t)TexHeight * 4);
-            const unsigned char* src = pixels;
-            unsigned int* dst = TexPixelsRGBA32;
-            for (int n = TexWidth * TexHeight; n > 0; n--)
-                *dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++));
-        }
-    }
-
-    *out_pixels = (unsigned char*)TexPixelsRGBA32;
-    if (out_width) *out_width = TexWidth;
-    if (out_height) *out_height = TexHeight;
-    if (out_bytes_per_pixel) *out_bytes_per_pixel = 4;
-}
-
-ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0);
-    IM_ASSERT(font_cfg->SizePixels > 0.0f);
-
-    // Create new font
-    if (!font_cfg->MergeMode)
-        Fonts.push_back(IM_NEW(ImFont));
-    else
-        IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
-
-    ConfigData.push_back(*font_cfg);
-    ImFontConfig& new_font_cfg = ConfigData.back();
-    if (new_font_cfg.DstFont == NULL)
-        new_font_cfg.DstFont = Fonts.back();
-    if (!new_font_cfg.FontDataOwnedByAtlas)
-    {
-        new_font_cfg.FontData = IM_ALLOC(new_font_cfg.FontDataSize);
-        new_font_cfg.FontDataOwnedByAtlas = true;
-        memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize);
-    }
-
-    if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
-        new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
-
-    // Invalidate texture
-    ClearTexData();
-    return new_font_cfg.DstFont;
-}
-
-// Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder)
-static unsigned int stb_decompress_length(const unsigned char *input);
-static unsigned int stb_decompress(unsigned char *output, const unsigned char *input, unsigned int length);
-static const char*  GetDefaultCompressedFontDataTTFBase85();
-static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; }
-static void         Decode85(const unsigned char* src, unsigned char* dst)
-{
-    while (*src)
-    {
-        unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4]))));
-        dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF);   // We can't assume little-endianness.
-        src += 5;
-        dst += 4;
-    }
-}
-
-// Load embedded ProggyClean.ttf at size 13, disable oversampling
-ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
-{
-    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
-    if (!font_cfg_template)
-    {
-        font_cfg.OversampleH = font_cfg.OversampleV = 1;
-        font_cfg.PixelSnapH = true;
-    }
-    if (font_cfg.SizePixels <= 0.0f)
-        font_cfg.SizePixels = 13.0f * 1.0f;
-    if (font_cfg.Name[0] == '\0')
-        ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels);
-    font_cfg.EllipsisChar = (ImWchar)0x0085;
-
-    const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
-    const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault();
-    ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges);
-    font->DisplayOffset.y = 1.0f;
-    return font;
-}
-
-ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    size_t data_size = 0;
-    void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0);
-    if (!data)
-    {
-        IM_ASSERT_USER_ERROR(0, "Could not load font file!");
-        return NULL;
-    }
-    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
-    if (font_cfg.Name[0] == '\0')
-    {
-        // Store a short copy of filename into into the font name for convenience
-        const char* p;
-        for (p = filename + strlen(filename); p > filename && p[-1] != '/' && p[-1] != '\\'; p--) {}
-        ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "%s, %.0fpx", p, size_pixels);
-    }
-    return AddFontFromMemoryTTF(data, (int)data_size, size_pixels, &font_cfg, glyph_ranges);
-}
-
-// NB: Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build().
-ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
-    IM_ASSERT(font_cfg.FontData == NULL);
-    font_cfg.FontData = ttf_data;
-    font_cfg.FontDataSize = ttf_size;
-    font_cfg.SizePixels = size_pixels;
-    if (glyph_ranges)
-        font_cfg.GlyphRanges = glyph_ranges;
-    return AddFont(&font_cfg);
-}
-
-ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
-{
-    const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data);
-    unsigned char* buf_decompressed_data = (unsigned char *)IM_ALLOC(buf_decompressed_size);
-    stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size);
-
-    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
-    IM_ASSERT(font_cfg.FontData == NULL);
-    font_cfg.FontDataOwnedByAtlas = true;
-    return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges);
-}
-
-ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
-{
-    int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
-    void* compressed_ttf = IM_ALLOC((size_t)compressed_ttf_size);
-    Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf);
-    ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
-    IM_FREE(compressed_ttf);
-    return font;
-}
-
-int ImFontAtlas::AddCustomRectRegular(unsigned int id, int width, int height)
-{
-    // Breaking change on 2019/11/21 (1.74): ImFontAtlas::AddCustomRectRegular() now requires an ID >= 0x110000 (instead of >= 0x10000)
-    IM_ASSERT(id >= 0x110000);
-    IM_ASSERT(width > 0 && width <= 0xFFFF);
-    IM_ASSERT(height > 0 && height <= 0xFFFF);
-    ImFontAtlasCustomRect r;
-    r.ID = id;
-    r.Width = (unsigned short)width;
-    r.Height = (unsigned short)height;
-    CustomRects.push_back(r);
-    return CustomRects.Size - 1; // Return index
-}
-
-int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset)
-{
-    IM_ASSERT(font != NULL);
-    IM_ASSERT(width > 0 && width <= 0xFFFF);
-    IM_ASSERT(height > 0 && height <= 0xFFFF);
-    ImFontAtlasCustomRect r;
-    r.ID = id;
-    r.Width = (unsigned short)width;
-    r.Height = (unsigned short)height;
-    r.GlyphAdvanceX = advance_x;
-    r.GlyphOffset = offset;
-    r.Font = font;
-    CustomRects.push_back(r);
-    return CustomRects.Size - 1; // Return index
-}
-
-void ImFontAtlas::CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const
-{
-    IM_ASSERT(TexWidth > 0 && TexHeight > 0);   // Font atlas needs to be built before we can calculate UV coordinates
-    IM_ASSERT(rect->IsPacked());                // Make sure the rectangle has been packed
-    *out_uv_min = ImVec2((float)rect->X * TexUvScale.x, (float)rect->Y * TexUvScale.y);
-    *out_uv_max = ImVec2((float)(rect->X + rect->Width) * TexUvScale.x, (float)(rect->Y + rect->Height) * TexUvScale.y);
-}
-
-bool ImFontAtlas::GetMouseCursorTexData(ImGuiMouseCursor cursor_type, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2])
-{
-    if (cursor_type <= ImGuiMouseCursor_None || cursor_type >= ImGuiMouseCursor_COUNT)
-        return false;
-    if (Flags & ImFontAtlasFlags_NoMouseCursors)
-        return false;
-
-    IM_ASSERT(CustomRectIds[0] != -1);
-    ImFontAtlasCustomRect& r = CustomRects[CustomRectIds[0]];
-    IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
-    ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][0] + ImVec2((float)r.X, (float)r.Y);
-    ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][1];
-    *out_size = size;
-    *out_offset = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][2];
-    out_uv_border[0] = (pos) * TexUvScale;
-    out_uv_border[1] = (pos + size) * TexUvScale;
-    pos.x += FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
-    out_uv_fill[0] = (pos) * TexUvScale;
-    out_uv_fill[1] = (pos + size) * TexUvScale;
-    return true;
-}
-
-bool    ImFontAtlas::Build()
-{
-    IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
-    return ImFontAtlasBuildWithStbTruetype(this);
-}
-
-void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_brighten_factor)
-{
-    for (unsigned int i = 0; i < 256; i++)
-    {
-        unsigned int value = (unsigned int)(i * in_brighten_factor);
-        out_table[i] = value > 255 ? 255 : (value & 0xFF);
-    }
-}
-
-void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride)
-{
-    unsigned char* data = pixels + x + y * stride;
-    for (int j = h; j > 0; j--, data += stride)
-        for (int i = 0; i < w; i++)
-            data[i] = table[data[i]];
-}
-
-// Temporary data for one source font (multiple source fonts can be merged into one destination ImFont)
-// (C++03 doesn't allow instancing ImVector<> with function-local types so we declare the type here.)
-struct ImFontBuildSrcData
-{
-    stbtt_fontinfo      FontInfo;
-    stbtt_pack_range    PackRange;          // Hold the list of codepoints to pack (essentially points to Codepoints.Data)
-    stbrp_rect*         Rects;              // Rectangle to pack. We first fill in their size and the packer will give us their position.
-    stbtt_packedchar*   PackedChars;        // Output glyphs
-    const ImWchar*      SrcRanges;          // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF)
-    int                 DstIndex;           // Index into atlas->Fonts[] and dst_tmp_array[]
-    int                 GlyphsHighest;      // Highest requested codepoint
-    int                 GlyphsCount;        // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font)
-    ImBitVector         GlyphsSet;          // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB)
-    ImVector<int>       GlyphsList;         // Glyph codepoints list (flattened version of GlyphsMap)
-};
-
-// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont)
-struct ImFontBuildDstData
-{
-    int                 SrcCount;           // Number of source fonts targeting this destination font.
-    int                 GlyphsHighest;
-    int                 GlyphsCount;
-    ImBitVector         GlyphsSet;          // This is used to resolve collision when multiple sources are merged into a same destination font.
-};
-
-static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVector<int>* out)
-{
-    IM_ASSERT(sizeof(in->Storage.Data[0]) == sizeof(int));
-    const ImU32* it_begin = in->Storage.begin();
-    const ImU32* it_end = in->Storage.end();
-    for (const ImU32* it = it_begin; it < it_end; it++)
-        if (ImU32 entries_32 = *it)
-            for (ImU32 bit_n = 0; bit_n < 32; bit_n++)
-                if (entries_32 & ((ImU32)1 << bit_n))
-                    out->push_back((int)(((it - it_begin) << 5) + bit_n));
-}
-
-bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
-{
-    IM_ASSERT(atlas->ConfigData.Size > 0);
-
-    ImFontAtlasBuildInit(atlas);
-
-    // Clear atlas
-    atlas->TexID = (ImTextureID)NULL;
-    atlas->TexWidth = atlas->TexHeight = 0;
-    atlas->TexUvScale = ImVec2(0.0f, 0.0f);
-    atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
-    atlas->ClearTexData();
-
-    // Temporary storage for building
-    ImVector<ImFontBuildSrcData> src_tmp_array;
-    ImVector<ImFontBuildDstData> dst_tmp_array;
-    src_tmp_array.resize(atlas->ConfigData.Size);
-    dst_tmp_array.resize(atlas->Fonts.Size);
-    memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes());
-    memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes());
-
-    // 1. Initialize font loading structure, check font data validity
-    for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        ImFontConfig& cfg = atlas->ConfigData[src_i];
-        IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas));
-
-        // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices)
-        src_tmp.DstIndex = -1;
-        for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++)
-            if (cfg.DstFont == atlas->Fonts[output_i])
-                src_tmp.DstIndex = output_i;
-        IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array?
-        if (src_tmp.DstIndex == -1)
-            return false;
-
-        // Initialize helper structure for font loading and verify that the TTF/OTF data is correct
-        const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
-        IM_ASSERT(font_offset >= 0 && "FontData is incorrect, or FontNo cannot be found.");
-        if (!stbtt_InitFont(&src_tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
-            return false;
-
-        // Measure highest codepoints
-        ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
-        src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault();
-        for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
-            src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]);
-        dst_tmp.SrcCount++;
-        dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest);
-    }
-
-    // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs.
-    int total_glyphs_count = 0;
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
-        src_tmp.GlyphsSet.Create(src_tmp.GlyphsHighest + 1);
-        if (dst_tmp.GlyphsSet.Storage.empty())
-            dst_tmp.GlyphsSet.Create(dst_tmp.GlyphsHighest + 1);
-
-        for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
-            for (unsigned int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++)
-            {
-                if (dst_tmp.GlyphsSet.TestBit(codepoint))    // Don't overwrite existing glyphs. We could make this an option for MergeMode (e.g. MergeOverwrite==true)
-                    continue;
-                if (!stbtt_FindGlyphIndex(&src_tmp.FontInfo, codepoint))    // It is actually in the font?
-                    continue;
-
-                // Add to avail set/counters
-                src_tmp.GlyphsCount++;
-                dst_tmp.GlyphsCount++;
-                src_tmp.GlyphsSet.SetBit(codepoint);
-                dst_tmp.GlyphsSet.SetBit(codepoint);
-                total_glyphs_count++;
-            }
-    }
-
-    // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another)
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount);
-        UnpackBitVectorToFlatIndexList(&src_tmp.GlyphsSet, &src_tmp.GlyphsList);
-        src_tmp.GlyphsSet.Clear();
-        IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount);
-    }
-    for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++)
-        dst_tmp_array[dst_i].GlyphsSet.Clear();
-    dst_tmp_array.clear();
-
-    // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
-    // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity)
-    ImVector<stbrp_rect> buf_rects;
-    ImVector<stbtt_packedchar> buf_packedchars;
-    buf_rects.resize(total_glyphs_count);
-    buf_packedchars.resize(total_glyphs_count);
-    memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes());
-    memset(buf_packedchars.Data, 0, (size_t)buf_packedchars.size_in_bytes());
-
-    // 4. Gather glyphs sizes so we can pack them in our virtual canvas.
-    int total_surface = 0;
-    int buf_rects_out_n = 0;
-    int buf_packedchars_out_n = 0;
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        if (src_tmp.GlyphsCount == 0)
-            continue;
-
-        src_tmp.Rects = &buf_rects[buf_rects_out_n];
-        src_tmp.PackedChars = &buf_packedchars[buf_packedchars_out_n];
-        buf_rects_out_n += src_tmp.GlyphsCount;
-        buf_packedchars_out_n += src_tmp.GlyphsCount;
-
-        // Convert our ranges in the format stb_truetype wants
-        ImFontConfig& cfg = atlas->ConfigData[src_i];
-        src_tmp.PackRange.font_size = cfg.SizePixels;
-        src_tmp.PackRange.first_unicode_codepoint_in_range = 0;
-        src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data;
-        src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size;
-        src_tmp.PackRange.chardata_for_range = src_tmp.PackedChars;
-        src_tmp.PackRange.h_oversample = (unsigned char)cfg.OversampleH;
-        src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV;
-
-        // Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects)
-        const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels);
-        const int padding = atlas->TexGlyphPadding;
-        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++)
-        {
-            int x0, y0, x1, y1;
-            const int glyph_index_in_font = stbtt_FindGlyphIndex(&src_tmp.FontInfo, src_tmp.GlyphsList[glyph_i]);
-            IM_ASSERT(glyph_index_in_font != 0);
-            stbtt_GetGlyphBitmapBoxSubpixel(&src_tmp.FontInfo, glyph_index_in_font, scale * cfg.OversampleH, scale * cfg.OversampleV, 0, 0, &x0, &y0, &x1, &y1);
-            src_tmp.Rects[glyph_i].w = (stbrp_coord)(x1 - x0 + padding + cfg.OversampleH - 1);
-            src_tmp.Rects[glyph_i].h = (stbrp_coord)(y1 - y0 + padding + cfg.OversampleV - 1);
-            total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h;
-        }
-    }
-
-    // We need a width for the skyline algorithm, any width!
-    // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
-    // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface.
-    const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1;
-    atlas->TexHeight = 0;
-    if (atlas->TexDesiredWidth > 0)
-        atlas->TexWidth = atlas->TexDesiredWidth;
-    else
-        atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512;
-
-    // 5. Start packing
-    // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
-    const int TEX_HEIGHT_MAX = 1024 * 32;
-    stbtt_pack_context spc = {};
-    stbtt_PackBegin(&spc, NULL, atlas->TexWidth, TEX_HEIGHT_MAX, 0, atlas->TexGlyphPadding, NULL);
-    ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
-
-    // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point.
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        if (src_tmp.GlyphsCount == 0)
-            continue;
-
-        stbrp_pack_rects((stbrp_context*)spc.pack_info, src_tmp.Rects, src_tmp.GlyphsCount);
-
-        // Extend texture height and mark missing glyphs as non-packed so we won't render them.
-        // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?)
-        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
-            if (src_tmp.Rects[glyph_i].was_packed)
-                atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h);
-    }
-
-    // 7. Allocate texture
-    atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight);
-    atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight);
-    atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight);
-    memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight);
-    spc.pixels = atlas->TexPixelsAlpha8;
-    spc.height = atlas->TexHeight;
-
-    // 8. Render/rasterize font characters into the texture
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontConfig& cfg = atlas->ConfigData[src_i];
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        if (src_tmp.GlyphsCount == 0)
-            continue;
-
-        stbtt_PackFontRangesRenderIntoRects(&spc, &src_tmp.FontInfo, &src_tmp.PackRange, 1, src_tmp.Rects);
-
-        // Apply multiply operator
-        if (cfg.RasterizerMultiply != 1.0f)
-        {
-            unsigned char multiply_table[256];
-            ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply);
-            stbrp_rect* r = &src_tmp.Rects[0];
-            for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++, r++)
-                if (r->was_packed)
-                    ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, atlas->TexPixelsAlpha8, r->x, r->y, r->w, r->h, atlas->TexWidth * 1);
-        }
-        src_tmp.Rects = NULL;
-    }
-
-    // End packing
-    stbtt_PackEnd(&spc);
-    buf_rects.clear();
-
-    // 9. Setup ImFont and glyphs for runtime
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-    {
-        ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
-        if (src_tmp.GlyphsCount == 0)
-            continue;
-
-        ImFontConfig& cfg = atlas->ConfigData[src_i];
-        ImFont* dst_font = cfg.DstFont; // We can have multiple input fonts writing into a same destination font (when using MergeMode=true)
-
-        const float font_scale = stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels);
-        int unscaled_ascent, unscaled_descent, unscaled_line_gap;
-        stbtt_GetFontVMetrics(&src_tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
-
-        const float ascent = ImFloor(unscaled_ascent * font_scale + ((unscaled_ascent > 0.0f) ? +1 : -1));
-        const float descent = ImFloor(unscaled_descent * font_scale + ((unscaled_descent > 0.0f) ? +1 : -1));
-        ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent);
-        const float font_off_x = cfg.GlyphOffset.x;
-        const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent);
-
-        for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
-        {
-            const int codepoint = src_tmp.GlyphsList[glyph_i];
-            const stbtt_packedchar& pc = src_tmp.PackedChars[glyph_i];
-
-            const float char_advance_x_org = pc.xadvance;
-            const float char_advance_x_mod = ImClamp(char_advance_x_org, cfg.GlyphMinAdvanceX, cfg.GlyphMaxAdvanceX);
-            float char_off_x = font_off_x;
-            if (char_advance_x_org != char_advance_x_mod)
-                char_off_x += cfg.PixelSnapH ? ImFloor((char_advance_x_mod - char_advance_x_org) * 0.5f) : (char_advance_x_mod - char_advance_x_org) * 0.5f;
-
-            // Register glyph
-            stbtt_aligned_quad q;
-            float dummy_x = 0.0f, dummy_y = 0.0f;
-            stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &dummy_x, &dummy_y, &q, 0);
-            dst_font->AddGlyph((ImWchar)codepoint, q.x0 + char_off_x, q.y0 + font_off_y, q.x1 + char_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, char_advance_x_mod);
-        }
-    }
-
-    // Cleanup temporary (ImVector doesn't honor destructor)
-    for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
-        src_tmp_array[src_i].~ImFontBuildSrcData();
-
-    ImFontAtlasBuildFinish(atlas);
-    return true;
-}
-
-// Register default custom rectangles (this is called/shared by both the stb_truetype and the FreeType builder)
-void ImFontAtlasBuildInit(ImFontAtlas* atlas)
-{
-    if (atlas->CustomRectIds[0] >= 0)
-        return;
-    if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
-        atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1, FONT_ATLAS_DEFAULT_TEX_DATA_H);
-    else
-        atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_ID, 2, 2);
-}
-
-void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
-{
-    if (!font_config->MergeMode)
-    {
-        font->ClearOutputData();
-        font->FontSize = font_config->SizePixels;
-        font->ConfigData = font_config;
-        font->ContainerAtlas = atlas;
-        font->Ascent = ascent;
-        font->Descent = descent;
-    }
-    font->ConfigDataCount++;
-}
-
-void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
-{
-    stbrp_context* pack_context = (stbrp_context*)stbrp_context_opaque;
-    IM_ASSERT(pack_context != NULL);
-
-    ImVector<ImFontAtlasCustomRect>& user_rects = atlas->CustomRects;
-    IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong.
-
-    ImVector<stbrp_rect> pack_rects;
-    pack_rects.resize(user_rects.Size);
-    memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes());
-    for (int i = 0; i < user_rects.Size; i++)
-    {
-        pack_rects[i].w = user_rects[i].Width;
-        pack_rects[i].h = user_rects[i].Height;
-    }
-    stbrp_pack_rects(pack_context, &pack_rects[0], pack_rects.Size);
-    for (int i = 0; i < pack_rects.Size; i++)
-        if (pack_rects[i].was_packed)
-        {
-            user_rects[i].X = pack_rects[i].x;
-            user_rects[i].Y = pack_rects[i].y;
-            IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height);
-            atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h);
-        }
-}
-
-static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
-{
-    IM_ASSERT(atlas->CustomRectIds[0] >= 0);
-    IM_ASSERT(atlas->TexPixelsAlpha8 != NULL);
-    ImFontAtlasCustomRect& r = atlas->CustomRects[atlas->CustomRectIds[0]];
-    IM_ASSERT(r.ID == FONT_ATLAS_DEFAULT_TEX_DATA_ID);
-    IM_ASSERT(r.IsPacked());
-
-    const int w = atlas->TexWidth;
-    if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
-    {
-        // Render/copy pixels
-        IM_ASSERT(r.Width == FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * 2 + 1 && r.Height == FONT_ATLAS_DEFAULT_TEX_DATA_H);
-        for (int y = 0, n = 0; y < FONT_ATLAS_DEFAULT_TEX_DATA_H; y++)
-            for (int x = 0; x < FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF; x++, n++)
-            {
-                const int offset0 = (int)(r.X + x) + (int)(r.Y + y) * w;
-                const int offset1 = offset0 + FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF + 1;
-                atlas->TexPixelsAlpha8[offset0] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == '.' ? 0xFF : 0x00;
-                atlas->TexPixelsAlpha8[offset1] = FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[n] == 'X' ? 0xFF : 0x00;
-            }
-    }
-    else
-    {
-        IM_ASSERT(r.Width == 2 && r.Height == 2);
-        const int offset = (int)(r.X) + (int)(r.Y) * w;
-        atlas->TexPixelsAlpha8[offset] = atlas->TexPixelsAlpha8[offset + 1] = atlas->TexPixelsAlpha8[offset + w] = atlas->TexPixelsAlpha8[offset + w + 1] = 0xFF;
-    }
-    atlas->TexUvWhitePixel = ImVec2((r.X + 0.5f) * atlas->TexUvScale.x, (r.Y + 0.5f) * atlas->TexUvScale.y);
-}
-
-void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
-{
-    // Render into our custom data block
-    ImFontAtlasBuildRenderDefaultTexData(atlas);
-
-    // Register custom rectangle glyphs
-    for (int i = 0; i < atlas->CustomRects.Size; i++)
-    {
-        const ImFontAtlasCustomRect& r = atlas->CustomRects[i];
-        if (r.Font == NULL || r.ID >= 0x110000)
-            continue;
-
-        IM_ASSERT(r.Font->ContainerAtlas == atlas);
-        ImVec2 uv0, uv1;
-        atlas->CalcCustomRectUV(&r, &uv0, &uv1);
-        r.Font->AddGlyph((ImWchar)r.ID, r.GlyphOffset.x, r.GlyphOffset.y, r.GlyphOffset.x + r.Width, r.GlyphOffset.y + r.Height, uv0.x, uv0.y, uv1.x, uv1.y, r.GlyphAdvanceX);
-    }
-
-    // Build all fonts lookup tables
-    for (int i = 0; i < atlas->Fonts.Size; i++)
-        if (atlas->Fonts[i]->DirtyLookupTables)
-            atlas->Fonts[i]->BuildLookupTable();
-
-    // Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
-    // However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character.
-    // FIXME: Also note that 0x2026 is currently seldomly included in our font ranges. Because of this we are more likely to use three individual dots.
-    for (int i = 0; i < atlas->Fonts.size(); i++)
-    {
-        ImFont* font = atlas->Fonts[i];
-        if (font->EllipsisChar != (ImWchar)-1)
-            continue;
-        const ImWchar ellipsis_variants[] = { (ImWchar)0x2026, (ImWchar)0x0085 };
-        for (int j = 0; j < IM_ARRAYSIZE(ellipsis_variants); j++)
-            if (font->FindGlyphNoFallback(ellipsis_variants[j]) != NULL) // Verify glyph exists
-            {
-                font->EllipsisChar = ellipsis_variants[j];
-                break;
-            }
-    }
-}
-
-// Retrieve list of range (2 int per range, values are inclusive)
-const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0,
-    };
-    return &ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0x3131, 0x3163, // Korean alphabets
-        0xAC00, 0xD79D, // Korean characters
-        0,
-    };
-    return &ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0x2000, 0x206F, // General Punctuation
-        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
-        0x31F0, 0x31FF, // Katakana Phonetic Extensions
-        0xFF00, 0xFFEF, // Half-width characters
-        0x4e00, 0x9FAF, // CJK Ideograms
-        0,
-    };
-    return &ranges[0];
-}
-
-static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short* accumulative_offsets, int accumulative_offsets_count, ImWchar* out_ranges)
-{
-    for (int n = 0; n < accumulative_offsets_count; n++, out_ranges += 2)
-    {
-        out_ranges[0] = out_ranges[1] = (ImWchar)(base_codepoint + accumulative_offsets[n]);
-        base_codepoint += accumulative_offsets[n];
-    }
-    out_ranges[0] = 0;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] ImFontAtlas glyph ranges helpers
-//-------------------------------------------------------------------------
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
-{
-    // Store 2500 regularly used characters for Simplified Chinese.
-    // Sourced from https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8
-    // This table covers 97.97% of all characters used during the month in July, 1987.
-    // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
-    // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
-    static const short accumulative_offsets_from_0x4E00[] =
-    {
-        0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2,
-        1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4,
-        2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1,
-        1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2,
-        3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6,
-        1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1,
-        1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3,
-        2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4,
-        27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12,
-        3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1,
-        1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23,
-        176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6,
-        5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6,
-        1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1,
-        6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5,
-        2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15,
-        2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6,
-        2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4,
-        3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5,
-        3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2,
-        3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16,
-        1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31,
-        140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7,
-        5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2,
-        2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13,
-        4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3,
-        2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4,
-        4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1,
-        3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3,
-        3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11,
-        2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9,
-        5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2,
-        3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3,
-        1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12,
-        4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8,
-        4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5,
-        26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1,
-        3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5,
-        2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6,
-        10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6
-    };
-    static ImWchar base_ranges[] = // not zero-terminated
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0x2000, 0x206F, // General Punctuation
-        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
-        0x31F0, 0x31FF, // Katakana Phonetic Extensions
-        0xFF00, 0xFFEF  // Half-width characters
-    };
-    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
-    if (!full_ranges[0])
-    {
-        memcpy(full_ranges, base_ranges, sizeof(base_ranges));
-        UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
-    }
-    return &full_ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
-{
-    // 1946 common ideograms code points for Japanese
-    // Sourced from http://theinstructionlimit.com/common-kanji-character-ranges-for-xna-spritefont-rendering
-    // FIXME: Source a list of the revised 2136 Joyo Kanji list from 2010 and rebuild this.
-    // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
-    // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
-    static const short accumulative_offsets_from_0x4E00[] =
-    {
-        0,1,2,4,1,1,1,1,2,1,6,2,2,1,8,5,7,11,1,2,10,10,8,2,4,20,2,11,8,2,1,2,1,6,2,1,7,5,3,7,1,1,13,7,9,1,4,6,1,2,1,10,1,1,9,2,2,4,5,6,14,1,1,9,3,18,
-        5,4,2,2,10,7,1,1,1,3,2,4,3,23,2,10,12,2,14,2,4,13,1,6,10,3,1,7,13,6,4,13,5,2,3,17,2,2,5,7,6,4,1,7,14,16,6,13,9,15,1,1,7,16,4,7,1,19,9,2,7,15,
-        2,6,5,13,25,4,14,13,11,25,1,1,1,2,1,2,2,3,10,11,3,3,1,1,4,4,2,1,4,9,1,4,3,5,5,2,7,12,11,15,7,16,4,5,16,2,1,1,6,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1,
-        2,1,12,3,3,9,5,8,1,11,1,2,3,18,20,4,1,3,6,1,7,3,5,5,7,2,2,12,3,1,4,2,3,2,3,11,8,7,4,17,1,9,25,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,6,16,1,2,1,1,3,12,
-        20,2,5,20,8,7,6,2,1,1,1,1,6,2,1,2,10,1,1,6,1,3,1,2,1,4,1,12,4,1,3,1,1,1,1,1,10,4,7,5,13,1,15,1,1,30,11,9,1,15,38,14,1,32,17,20,1,9,31,2,21,9,
-        4,49,22,2,1,13,1,11,45,35,43,55,12,19,83,1,3,2,3,13,2,1,7,3,18,3,13,8,1,8,18,5,3,7,25,24,9,24,40,3,17,24,2,1,6,2,3,16,15,6,7,3,12,1,9,7,3,3,
-        3,15,21,5,16,4,5,12,11,11,3,6,3,2,31,3,2,1,1,23,6,6,1,4,2,6,5,2,1,1,3,3,22,2,6,2,3,17,3,2,4,5,1,9,5,1,1,6,15,12,3,17,2,14,2,8,1,23,16,4,2,23,
-        8,15,23,20,12,25,19,47,11,21,65,46,4,3,1,5,6,1,2,5,26,2,1,1,3,11,1,1,1,2,1,2,3,1,1,10,2,3,1,1,1,3,6,3,2,2,6,6,9,2,2,2,6,2,5,10,2,4,1,2,1,2,2,
-        3,1,1,3,1,2,9,23,9,2,1,1,1,1,5,3,2,1,10,9,6,1,10,2,31,25,3,7,5,40,1,15,6,17,7,27,180,1,3,2,2,1,1,1,6,3,10,7,1,3,6,17,8,6,2,2,1,3,5,5,8,16,14,
-        15,1,1,4,1,2,1,1,1,3,2,7,5,6,2,5,10,1,4,2,9,1,1,11,6,1,44,1,3,7,9,5,1,3,1,1,10,7,1,10,4,2,7,21,15,7,2,5,1,8,3,4,1,3,1,6,1,4,2,1,4,10,8,1,4,5,
-        1,5,10,2,7,1,10,1,1,3,4,11,10,29,4,7,3,5,2,3,33,5,2,19,3,1,4,2,6,31,11,1,3,3,3,1,8,10,9,12,11,12,8,3,14,8,6,11,1,4,41,3,1,2,7,13,1,5,6,2,6,12,
-        12,22,5,9,4,8,9,9,34,6,24,1,1,20,9,9,3,4,1,7,2,2,2,6,2,28,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,8,8,3,2,1,5,1,2,2,3,1,11,11,7,3,6,10,8,6,16,16,
-        22,7,12,6,21,5,4,6,6,3,6,1,3,2,1,2,8,29,1,10,1,6,13,6,6,19,31,1,13,4,4,22,17,26,33,10,4,15,12,25,6,67,10,2,3,1,6,10,2,6,2,9,1,9,4,4,1,2,16,2,
-        5,9,2,3,8,1,8,3,9,4,8,6,4,8,11,3,2,1,1,3,26,1,7,5,1,11,1,5,3,5,2,13,6,39,5,1,5,2,11,6,10,5,1,15,5,3,6,19,21,22,2,4,1,6,1,8,1,4,8,2,4,2,2,9,2,
-        1,1,1,4,3,6,3,12,7,1,14,2,4,10,2,13,1,17,7,3,2,1,3,2,13,7,14,12,3,1,29,2,8,9,15,14,9,14,1,3,1,6,5,9,11,3,38,43,20,7,7,8,5,15,12,19,15,81,8,7,
-        1,5,73,13,37,28,8,8,1,15,18,20,165,28,1,6,11,8,4,14,7,15,1,3,3,6,4,1,7,14,1,1,11,30,1,5,1,4,14,1,4,2,7,52,2,6,29,3,1,9,1,21,3,5,1,26,3,11,14,
-        11,1,17,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,7,7,5,17,3,3,3,1,23,10,4,4,6,3,1,16,17,22,3,10,21,16,16,6,4,10,2,1,1,2,8,8,6,5,3,3,3,39,25,
-        15,1,1,16,6,7,25,15,6,6,12,1,22,13,1,4,9,5,12,2,9,1,12,28,8,3,5,10,22,60,1,2,40,4,61,63,4,1,13,12,1,4,31,12,1,14,89,5,16,6,29,14,2,5,49,18,18,
-        5,29,33,47,1,17,1,19,12,2,9,7,39,12,3,7,12,39,3,1,46,4,12,3,8,9,5,31,15,18,3,2,2,66,19,13,17,5,3,46,124,13,57,34,2,5,4,5,8,1,1,1,4,3,1,17,5,
-        3,5,3,1,8,5,6,3,27,3,26,7,12,7,2,17,3,7,18,78,16,4,36,1,2,1,6,2,1,39,17,7,4,13,4,4,4,1,10,4,2,4,6,3,10,1,19,1,26,2,4,33,2,73,47,7,3,8,2,4,15,
-        18,1,29,2,41,14,1,21,16,41,7,39,25,13,44,2,2,10,1,13,7,1,7,3,5,20,4,8,2,49,1,10,6,1,6,7,10,7,11,16,3,12,20,4,10,3,1,2,11,2,28,9,2,4,7,2,15,1,
-        27,1,28,17,4,5,10,7,3,24,10,11,6,26,3,2,7,2,2,49,16,10,16,15,4,5,27,61,30,14,38,22,2,7,5,1,3,12,23,24,17,17,3,3,2,4,1,6,2,7,5,1,1,5,1,1,9,4,
-        1,3,6,1,8,2,8,4,14,3,5,11,4,1,3,32,1,19,4,1,13,11,5,2,1,8,6,8,1,6,5,13,3,23,11,5,3,16,3,9,10,1,24,3,198,52,4,2,2,5,14,5,4,22,5,20,4,11,6,41,
-        1,5,2,2,11,5,2,28,35,8,22,3,18,3,10,7,5,3,4,1,5,3,8,9,3,6,2,16,22,4,5,5,3,3,18,23,2,6,23,5,27,8,1,33,2,12,43,16,5,2,3,6,1,20,4,2,9,7,1,11,2,
-        10,3,14,31,9,3,25,18,20,2,5,5,26,14,1,11,17,12,40,19,9,6,31,83,2,7,9,19,78,12,14,21,76,12,113,79,34,4,1,1,61,18,85,10,2,2,13,31,11,50,6,33,159,
-        179,6,6,7,4,4,2,4,2,5,8,7,20,32,22,1,3,10,6,7,28,5,10,9,2,77,19,13,2,5,1,4,4,7,4,13,3,9,31,17,3,26,2,6,6,5,4,1,7,11,3,4,2,1,6,2,20,4,1,9,2,6,
-        3,7,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,5,13,8,4,11,23,1,10,6,2,1,3,21,2,2,4,24,31,4,10,10,2,5,192,15,4,16,7,9,51,1,2,1,1,5,1,1,2,1,3,5,3,1,3,4,1,
-        3,1,3,3,9,8,1,2,2,2,4,4,18,12,92,2,10,4,3,14,5,25,16,42,4,14,4,2,21,5,126,30,31,2,1,5,13,3,22,5,6,6,20,12,1,14,12,87,3,19,1,8,2,9,9,3,3,23,2,
-        3,7,6,3,1,2,3,9,1,3,1,6,3,2,1,3,11,3,1,6,10,3,2,3,1,2,1,5,1,1,11,3,6,4,1,7,2,1,2,5,5,34,4,14,18,4,19,7,5,8,2,6,79,1,5,2,14,8,2,9,2,1,36,28,16,
-        4,1,1,1,2,12,6,42,39,16,23,7,15,15,3,2,12,7,21,64,6,9,28,8,12,3,3,41,59,24,51,55,57,294,9,9,2,6,2,15,1,2,13,38,90,9,9,9,3,11,7,1,1,1,5,6,3,2,
-        1,2,2,3,8,1,4,4,1,5,7,1,4,3,20,4,9,1,1,1,5,5,17,1,5,2,6,2,4,1,4,5,7,3,18,11,11,32,7,5,4,7,11,127,8,4,3,3,1,10,1,1,6,21,14,1,16,1,7,1,3,6,9,65,
-        51,4,3,13,3,10,1,1,12,9,21,110,3,19,24,1,1,10,62,4,1,29,42,78,28,20,18,82,6,3,15,6,84,58,253,15,155,264,15,21,9,14,7,58,40,39,
-    };
-    static ImWchar base_ranges[] = // not zero-terminated
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
-        0x31F0, 0x31FF, // Katakana Phonetic Extensions
-        0xFF00, 0xFFEF  // Half-width characters
-    };
-    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
-    if (!full_ranges[0])
-    {
-        memcpy(full_ranges, base_ranges, sizeof(base_ranges));
-        UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
-    }
-    return &full_ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin + Latin Supplement
-        0x0400, 0x052F, // Cyrillic + Cyrillic Supplement
-        0x2DE0, 0x2DFF, // Cyrillic Extended-A
-        0xA640, 0xA69F, // Cyrillic Extended-B
-        0,
-    };
-    return &ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin
-        0x2010, 0x205E, // Punctuations
-        0x0E00, 0x0E7F, // Thai
-        0,
-    };
-    return &ranges[0];
-}
-
-const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
-{
-    static const ImWchar ranges[] =
-    {
-        0x0020, 0x00FF, // Basic Latin
-        0x0102, 0x0103,
-        0x0110, 0x0111,
-        0x0128, 0x0129,
-        0x0168, 0x0169,
-        0x01A0, 0x01A1,
-        0x01AF, 0x01B0,
-        0x1EA0, 0x1EF9,
-        0,
-    };
-    return &ranges[0];
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImFontGlyphRangesBuilder
-//-----------------------------------------------------------------------------
-
-void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end)
-{
-    while (text_end ? (text < text_end) : *text)
-    {
-        unsigned int c = 0;
-        int c_len = ImTextCharFromUtf8(&c, text, text_end);
-        text += c_len;
-        if (c_len == 0)
-            break;
-        AddChar((ImWchar)c);
-    }
-}
-
-void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges)
-{
-    for (; ranges[0]; ranges += 2)
-        for (ImWchar c = ranges[0]; c <= ranges[1]; c++)
-            AddChar(c);
-}
-
-void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
-{
-    const int max_codepoint = IM_UNICODE_CODEPOINT_MAX;
-    for (int n = 0; n <= max_codepoint; n++)
-        if (GetBit(n))
-        {
-            out_ranges->push_back((ImWchar)n);
-            while (n < max_codepoint && GetBit(n + 1))
-                n++;
-            out_ranges->push_back((ImWchar)n);
-        }
-    out_ranges->push_back(0);
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImFont
-//-----------------------------------------------------------------------------
-
-ImFont::ImFont()
-{
-    FontSize = 0.0f;
-    FallbackAdvanceX = 0.0f;
-    FallbackChar = (ImWchar)'?';
-    EllipsisChar = (ImWchar)-1;
-    DisplayOffset = ImVec2(0.0f, 0.0f);
-    FallbackGlyph = NULL;
-    ContainerAtlas = NULL;
-    ConfigData = NULL;
-    ConfigDataCount = 0;
-    DirtyLookupTables = false;
-    Scale = 1.0f;
-    Ascent = Descent = 0.0f;
-    MetricsTotalSurface = 0;
-    memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
-}
-
-ImFont::~ImFont()
-{
-    ClearOutputData();
-}
-
-void    ImFont::ClearOutputData()
-{
-    FontSize = 0.0f;
-    FallbackAdvanceX = 0.0f;
-    Glyphs.clear();
-    IndexAdvanceX.clear();
-    IndexLookup.clear();
-    FallbackGlyph = NULL;
-    ContainerAtlas = NULL;
-    DirtyLookupTables = true;
-    Ascent = Descent = 0.0f;
-    MetricsTotalSurface = 0;
-}
-
-void ImFont::BuildLookupTable()
-{
-    int max_codepoint = 0;
-    for (int i = 0; i != Glyphs.Size; i++)
-        max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
-
-    // Build lookup table
-    IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
-    IndexAdvanceX.clear();
-    IndexLookup.clear();
-    DirtyLookupTables = false;
-    memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
-    GrowIndex(max_codepoint + 1);
-    for (int i = 0; i < Glyphs.Size; i++)
-    {
-        int codepoint = (int)Glyphs[i].Codepoint;
-        IndexAdvanceX[codepoint] = Glyphs[i].AdvanceX;
-        IndexLookup[codepoint] = (ImWchar)i;
-
-        // Mark 4K page as used
-        const int page_n = codepoint / 4096;
-        Used4kPagesMap[page_n >> 3] |= 1 << (page_n & 7);
-    }
-
-    // Create a glyph to handle TAB
-    // FIXME: Needs proper TAB handling but it needs to be contextualized (or we could arbitrary say that each string starts at "column 0" ?)
-    if (FindGlyph((ImWchar)' '))
-    {
-        if (Glyphs.back().Codepoint != '\t')   // So we can call this function multiple times (FIXME: Flaky)
-            Glyphs.resize(Glyphs.Size + 1);
-        ImFontGlyph& tab_glyph = Glyphs.back();
-        tab_glyph = *FindGlyph((ImWchar)' ');
-        tab_glyph.Codepoint = '\t';
-        tab_glyph.AdvanceX *= IM_TABSIZE;
-        IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX;
-        IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size-1);
-    }
-
-    // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons)
-    SetGlyphVisible((ImWchar)' ', false);
-    SetGlyphVisible((ImWchar)'\t', false);
-
-    // Setup fall-backs
-    FallbackGlyph = FindGlyphNoFallback(FallbackChar);
-    FallbackAdvanceX = FallbackGlyph ? FallbackGlyph->AdvanceX : 0.0f;
-    for (int i = 0; i < max_codepoint + 1; i++)
-        if (IndexAdvanceX[i] < 0.0f)
-            IndexAdvanceX[i] = FallbackAdvanceX;
-}
-
-// API is designed this way to avoid exposing the 4K page size
-// e.g. use with IsGlyphRangeUnused(0, 255)
-bool ImFont::IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last)
-{
-    unsigned int page_begin = (c_begin / 4096);
-    unsigned int page_last = (c_last / 4096);
-    for (unsigned int page_n = page_begin; page_n <= page_last; page_n++)
-        if ((page_n >> 3) < sizeof(Used4kPagesMap))
-            if (Used4kPagesMap[page_n >> 3] & (1 << (page_n & 7)))
-                return false;
-    return true;
-}
-
-void ImFont::SetGlyphVisible(ImWchar c, bool visible)
-{
-    if (ImFontGlyph* glyph = (ImFontGlyph*)(void*)FindGlyph((ImWchar)c))
-        glyph->Visible = visible ? 1 : 0;
-}
-
-void ImFont::SetFallbackChar(ImWchar c)
-{
-    FallbackChar = c;
-    BuildLookupTable();
-}
-
-void ImFont::GrowIndex(int new_size)
-{
-    IM_ASSERT(IndexAdvanceX.Size == IndexLookup.Size);
-    if (new_size <= IndexLookup.Size)
-        return;
-    IndexAdvanceX.resize(new_size, -1.0f);
-    IndexLookup.resize(new_size, (ImWchar)-1);
-}
-
-// x0/y0/x1/y1 are offset from the character upper-left layout position, in pixels. Therefore x0/y0 are often fairly close to zero.
-// Not to be mistaken with texture coordinates, which are held by u0/v0/u1/v1 in normalized format (0.0..1.0 on each texture axis).
-void ImFont::AddGlyph(ImWchar codepoint, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x)
-{
-    Glyphs.resize(Glyphs.Size + 1);
-    ImFontGlyph& glyph = Glyphs.back();
-    glyph.Codepoint = (unsigned int)codepoint;
-    glyph.Visible = (x0 != x1) && (y0 != y1);
-    glyph.X0 = x0;
-    glyph.Y0 = y0;
-    glyph.X1 = x1;
-    glyph.Y1 = y1;
-    glyph.U0 = u0;
-    glyph.V0 = v0;
-    glyph.U1 = u1;
-    glyph.V1 = v1;
-    glyph.AdvanceX = advance_x + ConfigData->GlyphExtraSpacing.x;  // Bake spacing into AdvanceX
-
-    if (ConfigData->PixelSnapH)
-        glyph.AdvanceX = IM_ROUND(glyph.AdvanceX);
-
-    // Compute rough surface usage metrics (+1 to account for average padding, +0.99 to round)
-    DirtyLookupTables = true;
-    MetricsTotalSurface += (int)((glyph.U1 - glyph.U0) * ContainerAtlas->TexWidth + 1.99f) * (int)((glyph.V1 - glyph.V0) * ContainerAtlas->TexHeight + 1.99f);
-}
-
-void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst)
-{
-    IM_ASSERT(IndexLookup.Size > 0);    // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function.
-    unsigned int index_size = (unsigned int)IndexLookup.Size;
-
-    if (dst < index_size && IndexLookup.Data[dst] == (ImWchar)-1 && !overwrite_dst) // 'dst' already exists
-        return;
-    if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op
-        return;
-
-    GrowIndex(dst + 1);
-    IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (ImWchar)-1;
-    IndexAdvanceX[dst] = (src < index_size) ? IndexAdvanceX.Data[src] : 1.0f;
-}
-
-const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
-{
-    if (c >= (size_t)IndexLookup.Size)
-        return FallbackGlyph;
-    const ImWchar i = IndexLookup.Data[c];
-    if (i == (ImWchar)-1)
-        return FallbackGlyph;
-    return &Glyphs.Data[i];
-}
-
-const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
-{
-    if (c >= (size_t)IndexLookup.Size)
-        return NULL;
-    const ImWchar i = IndexLookup.Data[c];
-    if (i == (ImWchar)-1)
-        return NULL;
-    return &Glyphs.Data[i];
-}
-
-const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const
-{
-    // Simple word-wrapping for English, not full-featured. Please submit failing cases!
-    // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.)
-
-    // For references, possible wrap point marked with ^
-    //  "aaa bbb, ccc,ddd. eee   fff. ggg!"
-    //      ^    ^    ^   ^   ^__    ^    ^
-
-    // List of hardcoded separators: .,;!?'"
-
-    // Skip extra blanks after a line returns (that includes not counting them in width computation)
-    // e.g. "Hello    world" --> "Hello" "World"
-
-    // Cut words that cannot possibly fit within one line.
-    // e.g.: "The tropical fish" with ~5 characters worth of width --> "The tr" "opical" "fish"
-
-    float line_width = 0.0f;
-    float word_width = 0.0f;
-    float blank_width = 0.0f;
-    wrap_width /= scale; // We work with unscaled widths to avoid scaling every characters
-
-    const char* word_end = text;
-    const char* prev_word_end = NULL;
-    bool inside_word = true;
-
-    const char* s = text;
-    while (s < text_end)
-    {
-        unsigned int c = (unsigned int)*s;
-        const char* next_s;
-        if (c < 0x80)
-            next_s = s + 1;
-        else
-            next_s = s + ImTextCharFromUtf8(&c, s, text_end);
-        if (c == 0)
-            break;
-
-        if (c < 32)
-        {
-            if (c == '\n')
-            {
-                line_width = word_width = blank_width = 0.0f;
-                inside_word = true;
-                s = next_s;
-                continue;
-            }
-            if (c == '\r')
-            {
-                s = next_s;
-                continue;
-            }
-        }
-
-        const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX);
-        if (ImCharIsBlankW(c))
-        {
-            if (inside_word)
-            {
-                line_width += blank_width;
-                blank_width = 0.0f;
-                word_end = s;
-            }
-            blank_width += char_width;
-            inside_word = false;
-        }
-        else
-        {
-            word_width += char_width;
-            if (inside_word)
-            {
-                word_end = next_s;
-            }
-            else
-            {
-                prev_word_end = word_end;
-                line_width += word_width + blank_width;
-                word_width = blank_width = 0.0f;
-            }
-
-            // Allow wrapping after punctuation.
-            inside_word = !(c == '.' || c == ',' || c == ';' || c == '!' || c == '?' || c == '\"');
-        }
-
-        // We ignore blank width at the end of the line (they can be skipped)
-        if (line_width + word_width > wrap_width)
-        {
-            // Words that cannot possibly fit within an entire line will be cut anywhere.
-            if (word_width < wrap_width)
-                s = prev_word_end ? prev_word_end : word_end;
-            break;
-        }
-
-        s = next_s;
-    }
-
-    return s;
-}
-
-ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining) const
-{
-    if (!text_end)
-        text_end = text_begin + strlen(text_begin); // FIXME-OPT: Need to avoid this.
-
-    const float line_height = size;
-    const float scale = size / FontSize;
-
-    ImVec2 text_size = ImVec2(0,0);
-    float line_width = 0.0f;
-
-    const bool word_wrap_enabled = (wrap_width > 0.0f);
-    const char* word_wrap_eol = NULL;
-
-    const char* s = text_begin;
-    while (s < text_end)
-    {
-        if (word_wrap_enabled)
-        {
-            // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
-            if (!word_wrap_eol)
-            {
-                word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width);
-                if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
-                    word_wrap_eol++;    // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
-            }
-
-            if (s >= word_wrap_eol)
-            {
-                if (text_size.x < line_width)
-                    text_size.x = line_width;
-                text_size.y += line_height;
-                line_width = 0.0f;
-                word_wrap_eol = NULL;
-
-                // Wrapping skips upcoming blanks
-                while (s < text_end)
-                {
-                    const char c = *s;
-                    if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
-                }
-                continue;
-            }
-        }
-
-        // Decode and advance source
-        const char* prev_s = s;
-        unsigned int c = (unsigned int)*s;
-        if (c < 0x80)
-        {
-            s += 1;
-        }
-        else
-        {
-            s += ImTextCharFromUtf8(&c, s, text_end);
-            if (c == 0) // Malformed UTF-8?
-                break;
-        }
-
-        if (c < 32)
-        {
-            if (c == '\n')
-            {
-                text_size.x = ImMax(text_size.x, line_width);
-                text_size.y += line_height;
-                line_width = 0.0f;
-                continue;
-            }
-            if (c == '\r')
-                continue;
-        }
-
-        const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX) * scale;
-        if (line_width + char_width >= max_width)
-        {
-            s = prev_s;
-            break;
-        }
-
-        line_width += char_width;
-    }
-
-    if (text_size.x < line_width)
-        text_size.x = line_width;
-
-    if (line_width > 0 || text_size.y == 0.0f)
-        text_size.y += line_height;
-
-    if (remaining)
-        *remaining = s;
-
-    return text_size;
-}
-
-void ImFont::RenderChar(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, ImWchar c) const
-{
-    const ImFontGlyph* glyph = FindGlyph(c);
-    if (!glyph || !glyph->Visible)
-        return;
-    float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f;
-    pos.x = IM_FLOOR(pos.x + DisplayOffset.x);
-    pos.y = IM_FLOOR(pos.y + DisplayOffset.y);
-    draw_list->PrimReserve(6, 4);
-    draw_list->PrimRectUV(ImVec2(pos.x + glyph->X0 * scale, pos.y + glyph->Y0 * scale), ImVec2(pos.x + glyph->X1 * scale, pos.y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col);
-}
-
-void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const
-{
-    if (!text_end)
-        text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls.
-
-    // Align to be pixel perfect
-    pos.x = IM_FLOOR(pos.x + DisplayOffset.x);
-    pos.y = IM_FLOOR(pos.y + DisplayOffset.y);
-    float x = pos.x;
-    float y = pos.y;
-    if (y > clip_rect.w)
-        return;
-
-    const float scale = size / FontSize;
-    const float line_height = FontSize * scale;
-    const bool word_wrap_enabled = (wrap_width > 0.0f);
-    const char* word_wrap_eol = NULL;
-
-    // Fast-forward to first visible line
-    const char* s = text_begin;
-    if (y + line_height < clip_rect.y && !word_wrap_enabled)
-        while (y + line_height < clip_rect.y && s < text_end)
-        {
-            s = (const char*)memchr(s, '\n', text_end - s);
-            s = s ? s + 1 : text_end;
-            y += line_height;
-        }
-
-    // For large text, scan for the last visible line in order to avoid over-reserving in the call to PrimReserve()
-    // Note that very large horizontal line will still be affected by the issue (e.g. a one megabyte string buffer without a newline will likely crash atm)
-    if (text_end - s > 10000 && !word_wrap_enabled)
-    {
-        const char* s_end = s;
-        float y_end = y;
-        while (y_end < clip_rect.w && s_end < text_end)
-        {
-            s_end = (const char*)memchr(s_end, '\n', text_end - s_end);
-            s_end = s_end ? s_end + 1 : text_end;
-            y_end += line_height;
-        }
-        text_end = s_end;
-    }
-    if (s == text_end)
-        return;
-
-    // Reserve vertices for remaining worse case (over-reserving is useful and easily amortized)
-    const int vtx_count_max = (int)(text_end - s) * 4;
-    const int idx_count_max = (int)(text_end - s) * 6;
-    const int idx_expected_size = draw_list->IdxBuffer.Size + idx_count_max;
-    draw_list->PrimReserve(idx_count_max, vtx_count_max);
-
-    ImDrawVert* vtx_write = draw_list->_VtxWritePtr;
-    ImDrawIdx* idx_write = draw_list->_IdxWritePtr;
-    unsigned int vtx_current_idx = draw_list->_VtxCurrentIdx;
-
-    while (s < text_end)
-    {
-        if (word_wrap_enabled)
-        {
-            // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
-            if (!word_wrap_eol)
-            {
-                word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - pos.x));
-                if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
-                    word_wrap_eol++;    // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
-            }
-
-            if (s >= word_wrap_eol)
-            {
-                x = pos.x;
-                y += line_height;
-                word_wrap_eol = NULL;
-
-                // Wrapping skips upcoming blanks
-                while (s < text_end)
-                {
-                    const char c = *s;
-                    if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
-                }
-                continue;
-            }
-        }
-
-        // Decode and advance source
-        unsigned int c = (unsigned int)*s;
-        if (c < 0x80)
-        {
-            s += 1;
-        }
-        else
-        {
-            s += ImTextCharFromUtf8(&c, s, text_end);
-            if (c == 0) // Malformed UTF-8?
-                break;
-        }
-
-        if (c < 32)
-        {
-            if (c == '\n')
-            {
-                x = pos.x;
-                y += line_height;
-                if (y > clip_rect.w)
-                    break; // break out of main loop
-                continue;
-            }
-            if (c == '\r')
-                continue;
-        }
-
-        const ImFontGlyph* glyph = FindGlyph((ImWchar)c);
-        if (glyph == NULL)
-            continue;
-
-        float char_width = glyph->AdvanceX * scale;
-        if (glyph->Visible)
-        {
-            // We don't do a second finer clipping test on the Y axis as we've already skipped anything before clip_rect.y and exit once we pass clip_rect.w
-            float x1 = x + glyph->X0 * scale;
-            float x2 = x + glyph->X1 * scale;
-            float y1 = y + glyph->Y0 * scale;
-            float y2 = y + glyph->Y1 * scale;
-            if (x1 <= clip_rect.z && x2 >= clip_rect.x)
-            {
-                // Render a character
-                float u1 = glyph->U0;
-                float v1 = glyph->V0;
-                float u2 = glyph->U1;
-                float v2 = glyph->V1;
-
-                // CPU side clipping used to fit text in their frame when the frame is too small. Only does clipping for axis aligned quads.
-                if (cpu_fine_clip)
-                {
-                    if (x1 < clip_rect.x)
-                    {
-                        u1 = u1 + (1.0f - (x2 - clip_rect.x) / (x2 - x1)) * (u2 - u1);
-                        x1 = clip_rect.x;
-                    }
-                    if (y1 < clip_rect.y)
-                    {
-                        v1 = v1 + (1.0f - (y2 - clip_rect.y) / (y2 - y1)) * (v2 - v1);
-                        y1 = clip_rect.y;
-                    }
-                    if (x2 > clip_rect.z)
-                    {
-                        u2 = u1 + ((clip_rect.z - x1) / (x2 - x1)) * (u2 - u1);
-                        x2 = clip_rect.z;
-                    }
-                    if (y2 > clip_rect.w)
-                    {
-                        v2 = v1 + ((clip_rect.w - y1) / (y2 - y1)) * (v2 - v1);
-                        y2 = clip_rect.w;
-                    }
-                    if (y1 >= y2)
-                    {
-                        x += char_width;
-                        continue;
-                    }
-                }
-
-                // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug builds. Inlined here:
-                {
-                    idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2);
-                    idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3);
-                    vtx_write[0].pos.x = x1; vtx_write[0].pos.y = y1; vtx_write[0].col = col; vtx_write[0].uv.x = u1; vtx_write[0].uv.y = v1;
-                    vtx_write[1].pos.x = x2; vtx_write[1].pos.y = y1; vtx_write[1].col = col; vtx_write[1].uv.x = u2; vtx_write[1].uv.y = v1;
-                    vtx_write[2].pos.x = x2; vtx_write[2].pos.y = y2; vtx_write[2].col = col; vtx_write[2].uv.x = u2; vtx_write[2].uv.y = v2;
-                    vtx_write[3].pos.x = x1; vtx_write[3].pos.y = y2; vtx_write[3].col = col; vtx_write[3].uv.x = u1; vtx_write[3].uv.y = v2;
-                    vtx_write += 4;
-                    vtx_current_idx += 4;
-                    idx_write += 6;
-                }
-            }
-        }
-        x += char_width;
-    }
-
-    // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action.
-    draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink()
-    draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data);
-    draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size);
-    draw_list->_VtxWritePtr = vtx_write;
-    draw_list->_IdxWritePtr = idx_write;
-    draw_list->_VtxCurrentIdx = vtx_current_idx;
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] ImGui Internal Render Helpers
-//-----------------------------------------------------------------------------
-// Vaguely redesigned to stop accessing ImGui global state:
-// - RenderArrow()
-// - RenderBullet()
-// - RenderCheckMark()
-// - RenderMouseCursor()
-// - RenderArrowPointingAt()
-// - RenderRectFilledRangeH()
-//-----------------------------------------------------------------------------
-// Function in need of a redesign (legacy mess)
-// - RenderColorRectWithAlphaCheckerboard()
-//-----------------------------------------------------------------------------
-
-// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
-void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
-{
-    const float h = draw_list->_Data->FontSize * 1.00f;
-    float r = h * 0.40f * scale;
-    ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
-
-    ImVec2 a, b, c;
-    switch (dir)
-    {
-    case ImGuiDir_Up:
-    case ImGuiDir_Down:
-        if (dir == ImGuiDir_Up) r = -r;
-        a = ImVec2(+0.000f, +0.750f) * r;
-        b = ImVec2(-0.866f, -0.750f) * r;
-        c = ImVec2(+0.866f, -0.750f) * r;
-        break;
-    case ImGuiDir_Left:
-    case ImGuiDir_Right:
-        if (dir == ImGuiDir_Left) r = -r;
-        a = ImVec2(+0.750f, +0.000f) * r;
-        b = ImVec2(-0.750f, +0.866f) * r;
-        c = ImVec2(-0.750f, -0.866f) * r;
-        break;
-    case ImGuiDir_None:
-    case ImGuiDir_COUNT:
-        IM_ASSERT(0);
-        break;
-    }
-    draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
-}
-
-void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
-{
-    draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
-}
-
-void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz)
-{
-    float thickness = ImMax(sz / 5.0f, 1.0f);
-    sz -= thickness * 0.5f;
-    pos += ImVec2(thickness * 0.25f, thickness * 0.25f);
-
-    float third = sz / 3.0f;
-    float bx = pos.x + third;
-    float by = pos.y + sz - third * 0.5f;
-    draw_list->PathLineTo(ImVec2(bx - third, by - third));
-    draw_list->PathLineTo(ImVec2(bx, by));
-    draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f));
-    draw_list->PathStroke(col, false, thickness);
-}
-
-void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
-{
-    if (mouse_cursor == ImGuiMouseCursor_None)
-        return;
-    IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
-
-    ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
-    ImVec2 offset, size, uv[4];
-    if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
-    {
-        pos -= offset;
-        const ImTextureID tex_id = font_atlas->TexID;
-        draw_list->PushTextureID(tex_id);
-        draw_list->AddImage(tex_id, pos + ImVec2(1,0)*scale, pos + ImVec2(1,0)*scale + size*scale, uv[2], uv[3], col_shadow);
-        draw_list->AddImage(tex_id, pos + ImVec2(2,0)*scale, pos + ImVec2(2,0)*scale + size*scale, uv[2], uv[3], col_shadow);
-        draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[2], uv[3], col_border);
-        draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[0], uv[1], col_fill);
-        draw_list->PopTextureID();
-    }
-}
-
-// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
-void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
-{
-    switch (direction)
-    {
-    case ImGuiDir_Left:  draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return;
-    case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return;
-    case ImGuiDir_Up:    draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return;
-    case ImGuiDir_Down:  draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return;
-    case ImGuiDir_None: case ImGuiDir_COUNT: break; // Fix warnings
-    }
-}
-
-static inline float ImAcos01(float x)
-{
-    if (x <= 0.0f) return IM_PI * 0.5f;
-    if (x >= 1.0f) return 0.0f;
-    return ImAcos(x);
-    //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do.
-}
-
-// FIXME: Cleanup and move code to ImDrawList.
-void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
-{
-    if (x_end_norm == x_start_norm)
-        return;
-    if (x_start_norm > x_end_norm)
-        ImSwap(x_start_norm, x_end_norm);
-
-    ImVec2 p0 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_start_norm), rect.Min.y);
-    ImVec2 p1 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_end_norm), rect.Max.y);
-    if (rounding == 0.0f)
-    {
-        draw_list->AddRectFilled(p0, p1, col, 0.0f);
-        return;
-    }
-
-    rounding = ImClamp(ImMin((rect.Max.x - rect.Min.x) * 0.5f, (rect.Max.y - rect.Min.y) * 0.5f) - 1.0f, 0.0f, rounding);
-    const float inv_rounding = 1.0f / rounding;
-    const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding);
-    const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding);
-    const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return.
-    const float x0 = ImMax(p0.x, rect.Min.x + rounding);
-    if (arc0_b == arc0_e)
-    {
-        draw_list->PathLineTo(ImVec2(x0, p1.y));
-        draw_list->PathLineTo(ImVec2(x0, p0.y));
-    }
-    else if (arc0_b == 0.0f && arc0_e == half_pi)
-    {
-        draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL
-        draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR
-    }
-    else
-    {
-        draw_list->PathArcTo(ImVec2(x0, p1.y - rounding), rounding, IM_PI - arc0_e, IM_PI - arc0_b, 3); // BL
-        draw_list->PathArcTo(ImVec2(x0, p0.y + rounding), rounding, IM_PI + arc0_b, IM_PI + arc0_e, 3); // TR
-    }
-    if (p1.x > rect.Min.x + rounding)
-    {
-        const float arc1_b = ImAcos01(1.0f - (rect.Max.x - p1.x) * inv_rounding);
-        const float arc1_e = ImAcos01(1.0f - (rect.Max.x - p0.x) * inv_rounding);
-        const float x1 = ImMin(p1.x, rect.Max.x - rounding);
-        if (arc1_b == arc1_e)
-        {
-            draw_list->PathLineTo(ImVec2(x1, p0.y));
-            draw_list->PathLineTo(ImVec2(x1, p1.y));
-        }
-        else if (arc1_b == 0.0f && arc1_e == half_pi)
-        {
-            draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR
-            draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3);  // BR
-        }
-        else
-        {
-            draw_list->PathArcTo(ImVec2(x1, p0.y + rounding), rounding, -arc1_e, -arc1_b, 3); // TR
-            draw_list->PathArcTo(ImVec2(x1, p1.y - rounding), rounding, +arc1_b, +arc1_e, 3); // BR
-        }
-    }
-    draw_list->PathFillConvex(col);
-}
-
-// Helper for ColorPicker4()
-// NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that.
-// Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding alltogether.
-// FIXME: uses ImGui::GetColorU32
-void ImGui::RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 col, float grid_step, ImVec2 grid_off, float rounding, int rounding_corners_flags)
-{
-    if (((col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) < 0xFF)
-    {
-        ImU32 col_bg1 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col));
-        ImU32 col_bg2 = ImGui::GetColorU32(ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col));
-        draw_list->AddRectFilled(p_min, p_max, col_bg1, rounding, rounding_corners_flags);
-
-        int yi = 0;
-        for (float y = p_min.y + grid_off.y; y < p_max.y; y += grid_step, yi++)
-        {
-            float y1 = ImClamp(y, p_min.y, p_max.y), y2 = ImMin(y + grid_step, p_max.y);
-            if (y2 <= y1)
-                continue;
-            for (float x = p_min.x + grid_off.x + (yi & 1) * grid_step; x < p_max.x; x += grid_step * 2.0f)
-            {
-                float x1 = ImClamp(x, p_min.x, p_max.x), x2 = ImMin(x + grid_step, p_max.x);
-                if (x2 <= x1)
-                    continue;
-                int rounding_corners_flags_cell = 0;
-                if (y1 <= p_min.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_TopRight; }
-                if (y2 >= p_max.y) { if (x1 <= p_min.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotLeft; if (x2 >= p_max.x) rounding_corners_flags_cell |= ImDrawCornerFlags_BotRight; }
-                rounding_corners_flags_cell &= rounding_corners_flags;
-                draw_list->AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding_corners_flags_cell ? rounding : 0.0f, rounding_corners_flags_cell);
-            }
-        }
-    }
-    else
-    {
-        draw_list->AddRectFilled(p_min, p_max, col, rounding, rounding_corners_flags);
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Decompression code
-//-----------------------------------------------------------------------------
-// Compressed with stb_compress() then converted to a C array and encoded as base85.
-// Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file.
-// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
-// Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h
-//-----------------------------------------------------------------------------
-
-static unsigned int stb_decompress_length(const unsigned char *input)
-{
-    return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11];
-}
-
-static unsigned char *stb__barrier_out_e, *stb__barrier_out_b;
-static const unsigned char *stb__barrier_in_b;
-static unsigned char *stb__dout;
-static void stb__match(const unsigned char *data, unsigned int length)
-{
-    // INVERSE of memmove... write each byte before copying the next...
-    IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
-    if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
-    if (data < stb__barrier_out_b) { stb__dout = stb__barrier_out_e+1; return; }
-    while (length--) *stb__dout++ = *data++;
-}
-
-static void stb__lit(const unsigned char *data, unsigned int length)
-{
-    IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
-    if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
-    if (data < stb__barrier_in_b) { stb__dout = stb__barrier_out_e+1; return; }
-    memcpy(stb__dout, data, length);
-    stb__dout += length;
-}
-
-#define stb__in2(x)   ((i[x] << 8) + i[(x)+1])
-#define stb__in3(x)   ((i[x] << 16) + stb__in2((x)+1))
-#define stb__in4(x)   ((i[x] << 24) + stb__in3((x)+1))
-
-static const unsigned char *stb_decompress_token(const unsigned char *i)
-{
-    if (*i >= 0x20) { // use fewer if's for cases that expand small
-        if (*i >= 0x80)       stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2;
-        else if (*i >= 0x40)  stb__match(stb__dout-(stb__in2(0) - 0x4000 + 1), i[2]+1), i += 3;
-        else /* *i >= 0x20 */ stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1);
-    } else { // more ifs for cases that expand large, since overhead is amortized
-        if (*i >= 0x18)       stb__match(stb__dout-(stb__in3(0) - 0x180000 + 1), i[3]+1), i += 4;
-        else if (*i >= 0x10)  stb__match(stb__dout-(stb__in3(0) - 0x100000 + 1), stb__in2(3)+1), i += 5;
-        else if (*i >= 0x08)  stb__lit(i+2, stb__in2(0) - 0x0800 + 1), i += 2 + (stb__in2(0) - 0x0800 + 1);
-        else if (*i == 0x07)  stb__lit(i+3, stb__in2(1) + 1), i += 3 + (stb__in2(1) + 1);
-        else if (*i == 0x06)  stb__match(stb__dout-(stb__in3(1)+1), i[4]+1), i += 5;
-        else if (*i == 0x04)  stb__match(stb__dout-(stb__in3(1)+1), stb__in2(4)+1), i += 6;
-    }
-    return i;
-}
-
-static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen)
-{
-    const unsigned long ADLER_MOD = 65521;
-    unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16;
-    unsigned long blocklen = buflen % 5552;
-
-    unsigned long i;
-    while (buflen) {
-        for (i=0; i + 7 < blocklen; i += 8) {
-            s1 += buffer[0], s2 += s1;
-            s1 += buffer[1], s2 += s1;
-            s1 += buffer[2], s2 += s1;
-            s1 += buffer[3], s2 += s1;
-            s1 += buffer[4], s2 += s1;
-            s1 += buffer[5], s2 += s1;
-            s1 += buffer[6], s2 += s1;
-            s1 += buffer[7], s2 += s1;
-
-            buffer += 8;
-        }
-
-        for (; i < blocklen; ++i)
-            s1 += *buffer++, s2 += s1;
-
-        s1 %= ADLER_MOD, s2 %= ADLER_MOD;
-        buflen -= blocklen;
-        blocklen = 5552;
-    }
-    return (unsigned int)(s2 << 16) + (unsigned int)s1;
-}
-
-static unsigned int stb_decompress(unsigned char *output, const unsigned char *i, unsigned int /*length*/)
-{
-    if (stb__in4(0) != 0x57bC0000) return 0;
-    if (stb__in4(4) != 0)          return 0; // error! stream is > 4GB
-    const unsigned int olen = stb_decompress_length(i);
-    stb__barrier_in_b = i;
-    stb__barrier_out_e = output + olen;
-    stb__barrier_out_b = output;
-    i += 16;
-
-    stb__dout = output;
-    for (;;) {
-        const unsigned char *old_i = i;
-        i = stb_decompress_token(i);
-        if (i == old_i) {
-            if (*i == 0x05 && i[1] == 0xfa) {
-                IM_ASSERT(stb__dout == output + olen);
-                if (stb__dout != output + olen) return 0;
-                if (stb_adler32(1, output, olen) != (unsigned int) stb__in4(2))
-                    return 0;
-                return olen;
-            } else {
-                IM_ASSERT(0); /* NOTREACHED */
-                return 0;
-            }
-        }
-        IM_ASSERT(stb__dout <= output + olen);
-        if (stb__dout > output + olen)
-            return 0;
-    }
-}
-
-//-----------------------------------------------------------------------------
-// [SECTION] Default font data (ProggyClean.ttf)
-//-----------------------------------------------------------------------------
-// ProggyClean.ttf
-// Copyright (c) 2004, 2005 Tristan Grimmer
-// MIT license (see License.txt in http://www.upperbounds.net/download/ProggyClean.ttf.zip)
-// Download and more information at http://upperbounds.net
-//-----------------------------------------------------------------------------
-// File: 'ProggyClean.ttf' (41208 bytes)
-// Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding).
-// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
-//-----------------------------------------------------------------------------
-static const char proggy_clean_ttf_compressed_data_base85[11980+1] =
-    "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/"
-    "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#"
-    "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL"
-    "i@^rMl9t=cWq6##weg>$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;-<nLENhvx>-VsM.M0rJfLH2eTM`*oJMHRC`N"
-    "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`&#0j@'DbG&#^$PG.Ll+DNa<XCMKEV*N)LN/N"
-    "*b=%Q6pia-Xg8I$<MR&,VdJe$<(7G;Ckl'&hF;;$<_=X(b.RS%%)###MPBuuE1V:v&cX&#2m#(&cV]`k9OhLMbn%s$G2,B$BfD3X*sp5#l,$R#]x_X1xKX%b5U*[r5iMfUo9U`N99hG)"
-    "tm+/Us9pG)XPu`<0s-)WTt(gCRxIg(%6sfh=ktMKn3j)<6<b5Sk_/0(^]AaN#(p/L>&VZ>1i%h1S9u5o@YaaW$e+b<TWFn/Z:Oh(Cx2$lNEoN^e)#CFY@@I;BOQ*sRwZtZxRcU7uW6CX"
-    "ow0i(?$Q[cjOd[P4d)]>ROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc."
-    "x]Ip.PH^'/aqUO/$1WxLoW0[iLA<QT;5HKD+@qQ'NQ(3_PLhE48R.qAPSwQ0/WK?Z,[x?-J;jQTWA0X@KJ(_Y8N-:/M74:/-ZpKrUss?d#dZq]DAbkU*JqkL+nwX@@47`5>w=4h(9.`G"
-    "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?G<Nald$qs]@]L<J7bR*>gv:[7MI2k).'2($5FNP&EQ(,)"
-    "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#"
-    "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM"
-    "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0<q-]L_?^)1vw'.,MRsqVr.L;aN&#/EgJ)PBc[-f>+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu"
-    "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/"
-    "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[K<L"
-    "%a2E-grWVM3@2=-k22tL]4$##6We'8UJCKE[d_=%wI;'6X-GsLX4j^SgJ$##R*w,vP3wK#iiW&#*h^D&R?jp7+/u&#(AP##XU8c$fSYW-J95_-Dp[g9wcO&#M-h1OcJlc-*vpw0xUX&#"
-    "OQFKNX@QI'IoPp7nb,QU//MQ&ZDkKP)X<WSVL(68uVl&#c'[0#(s1X&xm$Y%B7*K:eDA323j998GXbA#pwMs-jgD$9QISB-A_(aN4xoFM^@C58D0+Q+q3n0#3U1InDjF682-SjMXJK)("
-    "h$hxua_K]ul92%'BOU&#BRRh-slg8KDlr:%L71Ka:.A;%YULjDPmL<LYs8i#XwJOYaKPKc1h:'9Ke,g)b),78=I39B;xiY$bgGw-&.Zi9InXDuYa%G*f2Bq7mn9^#p1vv%#(Wi-;/Z5h"
-    "o;#2:;%d&#x9v68C5g?ntX0X)pT`;%pB3q7mgGN)3%(P8nTd5L7GeA-GL@+%J3u2:(Yf>et`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO"
-    "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J<j$UpK<Q4a1]MupW^-"
-    "sj_$%[HK%'F####QRZJ::Y3EGl4'@%FkiAOg#p[##O`gukTfBHagL<LHw%q&OV0##F=6/:chIm0@eCP8X]:kFI%hl8hgO@RcBhS-@Qb$%+m=hPDLg*%K8ln(wcf3/'DW-$.lR?n[nCH-"
-    "eXOONTJlh:.RYF%3'p6sq:UIMA945&^HFS87@$EP2iG<-lCO$%c`uKGD3rC$x0BL8aFn--`ke%#HMP'vh1/R&O_J9'um,.<tx[@%wsJk&bUT2`0uMv7gg#qp/ij.L56'hl;.s5CUrxjO"
-    "M7-##.l+Au'A&O:-T72L]P`&=;ctp'XScX*rU.>-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%"
-    "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$M<Jnq79VsJW/mWS*PUiq76;]/NM_>hLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]"
-    "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et"
-    "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$<M-SGZ':+Q_k+uvOSLiEo(<aD/K<CCc`'Lx>'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:"
-    "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VB<HFF*qL("
-    "$/V,;(kXZejWO`<[5?\?ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<"
-    "nKnw'Ho8C=Y>pqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<<aG/1N$#FX$0V5Y6x'aErI3I$7x%E`v<-BY,)%-?Psf*l?%C3.mM(=/M0:JxG'?"
-    "7WhH%o'a<-80g0NBxoO(GH<dM]n.+%q@jH?f.UsJ2Ggs&4<-e47&Kl+f//9@`b+?.TeN_&B8Ss?v;^Trk;f#YvJkl&w$]>-+k?'(<S:68tq*WoDfZu';mM?8X[ma8W%*`-=;D.(nc7/;"
-    ")g:T1=^J$&BRV(-lTmNB6xqB[@0*o.erM*<SWF]u2=st-*(6v>^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M"
-    "D?@f&1'BW-)Ju<L25gl8uhVm1hL$##*8###'A3/LkKW+(^rWX?5W_8g)a(m&K8P>#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX("
-    "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs"
-    "bIu)'Z,*[>br5fX^:FPAWr-m2KgL<LUN098kTF&#lvo58=/vjDo;.;)Ka*hLR#/k=rKbxuV`>Q_nN6'8uTG&#1T5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q"
-    "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aeg<Z'<$#4H)6,>e0jT6'N#(q%.O=?2S]u*(m<-"
-    "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i"
-    "sZ88+dKQ)W6>J%CL<KE>`.d*(B`-n8D9oK<Up]c$X$(,)M8Zt7/[rdkqTgl-0cuGMv'?>-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P&#9r+$%CE=68>K8r0=dSC%%(@p7"
-    ".m7jilQ02'0-VWAg<a/''3u.=4L$Y)6k/K:_[3=&jvL<L0C/2'v:^;-DIBW,B4E68:kZ;%?8(Q8BH=kO65BW?xSG&#@uU,DS*,?.+(o(#1vCS8#CHF>TlGW'b)Tq7VT9q^*^$$.:&N@@"
-    "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*"
-    "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u"
-    "@-W$U%VEQ/,,>>#)D<h#`)h0:<Q6909ua+&VU%n2:cG3FJ-%@Bj-DgLr`Hw&HAKjKjseK</xKT*)B,N9X3]krc12t'pgTV(Lv-tL[xg_%=M_q7a^x?7Ubd>#%8cY#YZ?=,`Wdxu/ae&#"
-    "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$s<Eh#c&)q.MXI%#v9ROa5FZO%sF7q7Nwb&#ptUJ:aqJe$Sl68%.D###EC><?-aF&#RNQv>o8lKN%5/$(vdfq7+ebA#"
-    "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(<c`Q8N)jEIF*+?P2a8g%)$q]o2aH8C&<SibC/q,(e:v;-b#6[$NtDZ84Je2KNvB#$P5?tQ3nt(0"
-    "d=j.LQf./Ll33+(;q3L-w=8dX$#WF&uIJ@-bfI>%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoF&#4DoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8"
-    "6e%B/:=>)N4xeW.*wft-;$'58-ESqr<b?UI(_%@[P46>#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#"
-    "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjL<Lni;''X.`$#8+1GD"
-    ":k$YUWsbn8ogh6rxZ2Z9]%nd+>V#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#<NEdtg(n'=S1A(Q1/I&4([%dM`,Iu'1:_hL>SfD07&6D<fp8dHM7/g+"
-    "tlPN9J*rKaPct&?'uBCem^jn%9_K)<,C5K3s=5g&GmJb*[SYq7K;TRLGCsM-$$;S%:Y@r7AK0pprpL<Lrh,q7e/%KWK:50I^+m'vi`3?%Zp+<-d+$L-Sv:@.o19n$s0&39;kn;S%BSq*"
-    "$3WoJSCLweV[aZ'MQIjO<7;X-X;&+dMLvu#^UsGEC9WEc[X(wI7#2.(F0jV*eZf<-Qv3J-c+J5AlrB#$p(H68LvEA'q3n0#m,[`*8Ft)FcYgEud]CWfm68,(aLA$@EFTgLXoBq/UPlp7"
-    ":d[/;r_ix=:TF`S5H-b<LI&HY(K=h#)]Lk$K14lVfm:x$H<3^Ql<M`$OhapBnkup'D#L$Pb_`N*g]2e;X/Dtg,bsj&K#2[-:iYr'_wgH)NUIR8a1n#S?Yej'h8^58UbZd+^FKD*T@;6A"
-    "7aQC[K8d-(v6GI$x:T<&'Gp5Uf>@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-<aN((^7('#Z0wK#5GX@7"
-    "u][`*S^43933A4rl][`*O4CgLEl]v$1Q3AeF37dbXk,.)vj#x'd`;qgbQR%FW,2(?LO=s%Sc68%NP'##Aotl8x=BE#j1UD([3$M(]UI2LX3RpKN@;/#f'f/&_mt&F)XdF<9t4)Qa.*kT"
-    "LwQ'(TTB9.xH'>#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5<N?)NBS)QN*_I,?&)2'IM%L3I)X((e/dl2&8'<M"
-    ":^#M*Q+[T.Xri.LYS3v%fF`68h;b-X[/En'CR.q7E)p'/kle2HM,u;^%OKC-N+Ll%F9CF<Nf'^#t2L,;27W:0O@6##U6W7:$rJfLWHj$#)woqBefIZ.PK<b*t7ed;p*_m;4ExK#h@&]>"
-    "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%"
-    "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;"
-    "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmL<LD)F^%[tC'8;+9E#C$g%#5Y>q9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:"
-    "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3<n-&%H%b<FDj2M<hH=&Eh<2Len$b*aTX=-8QxN)k11IM1c^j%"
-    "9s<L<NFSo)B?+<-(GxsF,^-Eh@$4dXhN$+#rxK8'je'D7k`e;)2pYwPA'_p9&@^18ml1^[@g4t*[JOa*[=Qp7(qJ_oOL^('7fB&Hq-:sf,sNj8xq^>$U4O]GKx'm9)b@p7YsvK3w^YR-"
-    "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*"
-    "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdF<TddF<9Ah-6&9tWoDlh]&1SpGMq>Ti1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IX<N+T+0MlMBPQ*Vj>SsD<U4JHY"
-    "8kD2)2fU/M#$e.)T4,_=8hLim[&);?UkK'-x?'(:siIfL<$pFM`i<?%W(mGDHM%>iWP,##P`%/L<eXi:@Z9C.7o=@(pXdAO/NLQ8lPl+HPOQa8wD8=^GlPa8TKI1CjhsCTSLJM'/Wl>-"
-    "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n<bhPmUkMw>%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL<LoNs'6,'85`"
-    "0?t/'_U59@]ddF<#LdF<eWdF<OuN/45rY<-L@&#+fm>69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdF<gR@2L=FNU-<b[(9c/ML3m;Z[$oF3g)GAWqpARc=<ROu7cL5l;-[A]%/"
-    "+fsd;l#SafT/f*W]0=O'$(Tb<[)*@e775R-:Yob%g*>l*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj"
-    "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#<IGe;__.thjZl<%w(Wk2xmp4Q@I#I9,DF]u7-P=.-_:YJ]aS@V"
-    "?6*C()dOp7:WL,b&3Rg/.cmM9&r^>$(>.Z-I&J(Q0Hd5Q%7Co-b`-c<N(6r@ip+AurK<m86QIth*#v;-OBqi+L7wDE-Ir8K['m+DDSLwK&/.?-V%U_%3:qKNu$_b*B-kp7NaD'QdWQPK"
-    "Yq[@>P)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8<FfNkgg^oIbah*#8/Qt$F&:K*-(N/'+1vMB,u()-a.VUU*#[e%gAAO(S>WlA2);Sa"
-    ">gXm8YB`1d@K#n]76-a$U,mF<fX]idqd)<3,]J7JmW4`6]uks=4-72L(jEk+:bJ0M^q-8Dm_Z?0olP1C9Sa&H[d&c$ooQUj]Exd*3ZM@-WGW2%s',B-_M%>%Ul:#/'xoFM9QX-$.QN'>"
-    "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B</R90;eZ]%Ncq;-Tl]#F>2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I"
-    "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1<Vc52=u`3^o-n1'g4v58Hj&6_t7$##?M)c<$bgQ_'SY((-xkA#"
-    "Y(,p'H9rIVY-b,'%bCPF7.J<Up^,(dU1VY*5#WkTU>h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-u<Hp,3@e^9UB1J+ak9-TN/mhKPg+AJYd$"
-    "MlvAF_jCK*.O-^(63adMT->W%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)"
-    "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo"
-    "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P"
-    "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*<h`e-GI7)?OK2A.d7_c)?wQ5AS@DL3r#7fSkgl6-++D:'A,uq7SvlB$pcpH'q3n0#_%dY#xCpr-l<F0NR@-##FEV6NTF6##$l84N1w?AO>'IAO"
-    "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#"
-    ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T<XoIB&hx=T1PcDaB&;HH+-AFr?(m9HZV)FKS8JCw;SD=6[^/DZUL`EUDf]GGlG&>"
-    "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#<xU?#@.i?#D:%@#HF7@#LRI@#P_[@#Tkn@#Xw*A#]-=A#a9OA#"
-    "d<F&#*;G##.GY##2Sl##6`($#:l:$#>xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4&#3^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4"
-    "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#"
-    "/QHC#3^ZC#7jmC#;v)D#?,<D#C8ND#GDaD#KPsD#O]/E#g1A5#KA*1#gC17#MGd;#8(02#L-d3#rWM4#Hga1#,<w0#T.j<#O#'2#CYN1#qa^:#_4m3#o@/=#eG8=#t8J5#`+78#4uI-#"
-    "m3B2#SB[8#Q0@8#i[*9#iOn8#1Nm;#^sN9#qh<9#:=x-#P;K2#$%X9#bC+.#Rg;<#mN=.#MTF.#RZO.#2?)4#Y#(/#[)1/#b;L/#dAU/#0Sv;#lY$0#n`-0#sf60#(F24#wrH0#%/e0#"
-    "TmD<#%JSMFove:CTBEXI:<eh2g)B,3h2^G3i;#d3jD>)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP"
-    "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp"
-    "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#";
-
-static const char* GetDefaultCompressedFontDataTTFBase85()
-{
-    return proggy_clean_ttf_compressed_data_base85;
-}
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imgui_impl_glfw.cpp
+++ /dev/null
@@ -1,369 +1,0 @@
-// dear imgui: Platform Binding for GLFW
-// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..)
-// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.)
-// (Requires: GLFW 3.1+)
-
-// Implemented features:
-//  [X] Platform: Clipboard support.
-//  [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
-//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange' (note: the resizing cursors requires GLFW 3.4+).
-//  [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE).
-
-// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
-// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
-// https://github.com/ocornut/imgui
-
-// CHANGELOG
-// (minor and older changes stripped away, please see git history for details)
-//  2020-01-17: Inputs: Disable error callback while assigning mouse cursors because some X11 setup don't have them and it generates errors.
-//  2019-12-05: Inputs: Added support for new mouse cursors added in GLFW 3.4+ (resizing cursors, not allowed cursor).
-//  2019-10-18: Misc: Previously installed user callbacks are now restored on shutdown.
-//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
-//  2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter().
-//  2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized.
-//  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
-//  2018-11-07: Inputs: When installing our GLFW callbacks, we save user's previously installed ones - if any - and chain call them.
-//  2018-08-01: Inputs: Workaround for Emscripten which doesn't seem to handle focus related calls.
-//  2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor.
-//  2018-06-08: Misc: Extracted imgui_impl_glfw.cpp/.h away from the old combined GLFW+OpenGL/Vulkan examples.
-//  2018-03-20: Misc: Setup io.BackendFlags ImGuiBackendFlags_HasMouseCursors flag + honor ImGuiConfigFlags_NoMouseCursorChange flag.
-//  2018-02-20: Inputs: Added support for mouse cursors (ImGui::GetMouseCursor() value, passed to glfwSetCursor()).
-//  2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
-//  2018-02-06: Inputs: Added mapping for ImGuiKey_Space.
-//  2018-01-25: Inputs: Added gamepad support if ImGuiConfigFlags_NavEnableGamepad is set.
-//  2018-01-25: Inputs: Honoring the io.WantSetMousePos by repositioning the mouse (when using navigation and ImGuiConfigFlags_NavMoveMouse is set).
-//  2018-01-20: Inputs: Added Horizontal Mouse Wheel support.
-//  2018-01-18: Inputs: Added mapping for ImGuiKey_Insert.
-//  2017-08-25: Inputs: MousePos set to -FLT_MAX,-FLT_MAX when mouse is unavailable/missing (instead of -1,-1).
-//  2016-10-15: Misc: Added a void* user_data parameter to Clipboard function handlers.
-
-#include "imgui.h"
-#include "imgui_impl_glfw.h"
-
-// GLFW
-#include <GLFW/glfw3.h>
-#ifdef _WIN32
-#undef APIENTRY
-#define GLFW_EXPOSE_NATIVE_WIN32
-#include <GLFW/glfw3native.h>   // for glfwGetWin32Window
-#endif
-#define GLFW_HAS_WINDOW_TOPMOST       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ GLFW_FLOATING
-#define GLFW_HAS_WINDOW_HOVERED       (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ GLFW_HOVERED
-#define GLFW_HAS_WINDOW_ALPHA         (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwSetWindowOpacity
-#define GLFW_HAS_PER_MONITOR_DPI      (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3300) // 3.3+ glfwGetMonitorContentScale
-#define GLFW_HAS_VULKAN               (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3200) // 3.2+ glfwCreateWindowSurface
-#ifdef GLFW_RESIZE_NESW_CURSOR  // let's be nice to people who pulled GLFW between 2019-04-16 (3.4 define) and 2019-11-29 (cursors defines) // FIXME: Remove when GLFW 3.4 is released?
-#define GLFW_HAS_NEW_CURSORS          (GLFW_VERSION_MAJOR * 1000 + GLFW_VERSION_MINOR * 100 >= 3400) // 3.4+ GLFW_RESIZE_ALL_CURSOR, GLFW_RESIZE_NESW_CURSOR, GLFW_RESIZE_NWSE_CURSOR, GLFW_NOT_ALLOWED_CURSOR
-#else
-#define GLFW_HAS_NEW_CURSORS          (0)
-#endif
-
-// Data
-enum GlfwClientApi
-{
-    GlfwClientApi_Unknown,
-    GlfwClientApi_OpenGL,
-    GlfwClientApi_Vulkan
-};
-static GLFWwindow*          g_Window = NULL;    // Main window
-static GlfwClientApi        g_ClientApi = GlfwClientApi_Unknown;
-static double               g_Time = 0.0;
-static bool                 g_MouseJustPressed[5] = { false, false, false, false, false };
-static GLFWcursor*          g_MouseCursors[ImGuiMouseCursor_COUNT] = {};
-static bool                 g_InstalledCallbacks = false;
-
-// Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
-static GLFWmousebuttonfun   g_PrevUserCallbackMousebutton = NULL;
-static GLFWscrollfun        g_PrevUserCallbackScroll = NULL;
-static GLFWkeyfun           g_PrevUserCallbackKey = NULL;
-static GLFWcharfun          g_PrevUserCallbackChar = NULL;
-
-static const char* ImGui_ImplGlfw_GetClipboardText(void* user_data)
-{
-    return glfwGetClipboardString((GLFWwindow*)user_data);
-}
-
-static void ImGui_ImplGlfw_SetClipboardText(void* user_data, const char* text)
-{
-    glfwSetClipboardString((GLFWwindow*)user_data, text);
-}
-
-void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods)
-{
-    if (g_PrevUserCallbackMousebutton != NULL)
-        g_PrevUserCallbackMousebutton(window, button, action, mods);
-
-    if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(g_MouseJustPressed))
-        g_MouseJustPressed[button] = true;
-}
-
-void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset)
-{
-    if (g_PrevUserCallbackScroll != NULL)
-        g_PrevUserCallbackScroll(window, xoffset, yoffset);
-
-    ImGuiIO& io = ImGui::GetIO();
-    io.MouseWheelH += (float)xoffset;
-    io.MouseWheel += (float)yoffset;
-}
-
-void ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
-{
-    if (g_PrevUserCallbackKey != NULL)
-        g_PrevUserCallbackKey(window, key, scancode, action, mods);
-
-    ImGuiIO& io = ImGui::GetIO();
-    if (action == GLFW_PRESS)
-        io.KeysDown[key] = true;
-    if (action == GLFW_RELEASE)
-        io.KeysDown[key] = false;
-
-    // Modifiers are not reliable across systems
-    io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL];
-    io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT];
-    io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT];
-#ifdef _WIN32
-    io.KeySuper = false;
-#else
-    io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER];
-#endif
-}
-
-void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c)
-{
-    if (g_PrevUserCallbackChar != NULL)
-        g_PrevUserCallbackChar(window, c);
-
-    ImGuiIO& io = ImGui::GetIO();
-    io.AddInputCharacter(c);
-}
-
-static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, GlfwClientApi client_api)
-{
-    g_Window = window;
-    g_Time = 0.0;
-
-    // Setup back-end capabilities flags
-    ImGuiIO& io = ImGui::GetIO();
-    io.BackendFlags |= ImGuiBackendFlags_HasMouseCursors;         // We can honor GetMouseCursor() values (optional)
-    io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;          // We can honor io.WantSetMousePos requests (optional, rarely used)
-    io.BackendPlatformName = "imgui_impl_glfw";
-
-    // Keyboard mapping. ImGui will use those indices to peek into the io.KeysDown[] array.
-    io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB;
-    io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT;
-    io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT;
-    io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP;
-    io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN;
-    io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP;
-    io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN;
-    io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME;
-    io.KeyMap[ImGuiKey_End] = GLFW_KEY_END;
-    io.KeyMap[ImGuiKey_Insert] = GLFW_KEY_INSERT;
-    io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE;
-    io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE;
-    io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE;
-    io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER;
-    io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE;
-    io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER;
-    io.KeyMap[ImGuiKey_A] = GLFW_KEY_A;
-    io.KeyMap[ImGuiKey_C] = GLFW_KEY_C;
-    io.KeyMap[ImGuiKey_V] = GLFW_KEY_V;
-    io.KeyMap[ImGuiKey_X] = GLFW_KEY_X;
-    io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y;
-    io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z;
-
-    io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText;
-    io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText;
-    io.ClipboardUserData = g_Window;
-#if defined(_WIN32)
-    io.ImeWindowHandle = (void*)glfwGetWin32Window(g_Window);
-#endif
-
-    // Create mouse cursors
-    // (By design, on X11 cursors are user configurable and some cursors may be missing. When a cursor doesn't exist,
-    // GLFW will emit an error which will often be printed by the app, so we temporarily disable error reporting.
-    // Missing cursors will return NULL and our _UpdateMouseCursor() function will use the Arrow cursor instead.)
-    GLFWerrorfun prev_error_callback = glfwSetErrorCallback(NULL);
-    g_MouseCursors[ImGuiMouseCursor_Arrow] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_TextInput] = glfwCreateStandardCursor(GLFW_IBEAM_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeNS] = glfwCreateStandardCursor(GLFW_VRESIZE_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeEW] = glfwCreateStandardCursor(GLFW_HRESIZE_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_Hand] = glfwCreateStandardCursor(GLFW_HAND_CURSOR);
-#if GLFW_HAS_NEW_CURSORS
-    g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_RESIZE_ALL_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_RESIZE_NESW_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_RESIZE_NWSE_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_NOT_ALLOWED_CURSOR);
-#else
-    g_MouseCursors[ImGuiMouseCursor_ResizeAll] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
-    g_MouseCursors[ImGuiMouseCursor_NotAllowed] = glfwCreateStandardCursor(GLFW_ARROW_CURSOR);
-#endif
-    glfwSetErrorCallback(prev_error_callback);
-
-    // Chain GLFW callbacks: our callbacks will call the user's previously installed callbacks, if any.
-    g_PrevUserCallbackMousebutton = NULL;
-    g_PrevUserCallbackScroll = NULL;
-    g_PrevUserCallbackKey = NULL;
-    g_PrevUserCallbackChar = NULL;
-    if (install_callbacks)
-    {
-        g_InstalledCallbacks = true;
-        g_PrevUserCallbackMousebutton = glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback);
-        g_PrevUserCallbackScroll = glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback);
-        g_PrevUserCallbackKey = glfwSetKeyCallback(window, ImGui_ImplGlfw_KeyCallback);
-        g_PrevUserCallbackChar = glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback);
-    }
-
-    g_ClientApi = client_api;
-    return true;
-}
-
-bool ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks)
-{
-    return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_OpenGL);
-}
-
-bool ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks)
-{
-    return ImGui_ImplGlfw_Init(window, install_callbacks, GlfwClientApi_Vulkan);
-}
-
-void ImGui_ImplGlfw_Shutdown()
-{
-    if (g_InstalledCallbacks)
-    {
-        glfwSetMouseButtonCallback(g_Window, g_PrevUserCallbackMousebutton);
-        glfwSetScrollCallback(g_Window, g_PrevUserCallbackScroll);
-        glfwSetKeyCallback(g_Window, g_PrevUserCallbackKey);
-        glfwSetCharCallback(g_Window, g_PrevUserCallbackChar);
-        g_InstalledCallbacks = false;
-    }
-
-    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
-    {
-        glfwDestroyCursor(g_MouseCursors[cursor_n]);
-        g_MouseCursors[cursor_n] = NULL;
-    }
-    g_ClientApi = GlfwClientApi_Unknown;
-}
-
-static void ImGui_ImplGlfw_UpdateMousePosAndButtons()
-{
-    // Update buttons
-    ImGuiIO& io = ImGui::GetIO();
-    for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++)
-    {
-        // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
-        io.MouseDown[i] = g_MouseJustPressed[i] || glfwGetMouseButton(g_Window, i) != 0;
-        g_MouseJustPressed[i] = false;
-    }
-
-    // Update mouse position
-    const ImVec2 mouse_pos_backup = io.MousePos;
-    io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
-#ifdef __EMSCRIPTEN__
-    const bool focused = true; // Emscripten
-#else
-    const bool focused = glfwGetWindowAttrib(g_Window, GLFW_FOCUSED) != 0;
-#endif
-    if (focused)
-    {
-        if (io.WantSetMousePos)
-        {
-            glfwSetCursorPos(g_Window, (double)mouse_pos_backup.x, (double)mouse_pos_backup.y);
-        }
-        else
-        {
-            double mouse_x, mouse_y;
-            glfwGetCursorPos(g_Window, &mouse_x, &mouse_y);
-            io.MousePos = ImVec2((float)mouse_x, (float)mouse_y);
-        }
-    }
-}
-
-static void ImGui_ImplGlfw_UpdateMouseCursor()
-{
-    ImGuiIO& io = ImGui::GetIO();
-    if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(g_Window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED)
-        return;
-
-    ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
-    if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor)
-    {
-        // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
-        glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
-    }
-    else
-    {
-        // Show OS mouse cursor
-        // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here.
-        glfwSetCursor(g_Window, g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]);
-        glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
-    }
-}
-
-static void ImGui_ImplGlfw_UpdateGamepads()
-{
-    ImGuiIO& io = ImGui::GetIO();
-    memset(io.NavInputs, 0, sizeof(io.NavInputs));
-    if ((io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) == 0)
-        return;
-
-    // Update gamepad inputs
-    #define MAP_BUTTON(NAV_NO, BUTTON_NO)       { if (buttons_count > BUTTON_NO && buttons[BUTTON_NO] == GLFW_PRESS) io.NavInputs[NAV_NO] = 1.0f; }
-    #define MAP_ANALOG(NAV_NO, AXIS_NO, V0, V1) { float v = (axes_count > AXIS_NO) ? axes[AXIS_NO] : V0; v = (v - V0) / (V1 - V0); if (v > 1.0f) v = 1.0f; if (io.NavInputs[NAV_NO] < v) io.NavInputs[NAV_NO] = v; }
-    int axes_count = 0, buttons_count = 0;
-    const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &axes_count);
-    const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &buttons_count);
-    MAP_BUTTON(ImGuiNavInput_Activate,   0);     // Cross / A
-    MAP_BUTTON(ImGuiNavInput_Cancel,     1);     // Circle / B
-    MAP_BUTTON(ImGuiNavInput_Menu,       2);     // Square / X
-    MAP_BUTTON(ImGuiNavInput_Input,      3);     // Triangle / Y
-    MAP_BUTTON(ImGuiNavInput_DpadLeft,   13);    // D-Pad Left
-    MAP_BUTTON(ImGuiNavInput_DpadRight,  11);    // D-Pad Right
-    MAP_BUTTON(ImGuiNavInput_DpadUp,     10);    // D-Pad Up
-    MAP_BUTTON(ImGuiNavInput_DpadDown,   12);    // D-Pad Down
-    MAP_BUTTON(ImGuiNavInput_FocusPrev,  4);     // L1 / LB
-    MAP_BUTTON(ImGuiNavInput_FocusNext,  5);     // R1 / RB
-    MAP_BUTTON(ImGuiNavInput_TweakSlow,  4);     // L1 / LB
-    MAP_BUTTON(ImGuiNavInput_TweakFast,  5);     // R1 / RB
-    MAP_ANALOG(ImGuiNavInput_LStickLeft, 0,  -0.3f,  -0.9f);
-    MAP_ANALOG(ImGuiNavInput_LStickRight,0,  +0.3f,  +0.9f);
-    MAP_ANALOG(ImGuiNavInput_LStickUp,   1,  +0.3f,  +0.9f);
-    MAP_ANALOG(ImGuiNavInput_LStickDown, 1,  -0.3f,  -0.9f);
-    #undef MAP_BUTTON
-    #undef MAP_ANALOG
-    if (axes_count > 0 && buttons_count > 0)
-        io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
-    else
-        io.BackendFlags &= ~ImGuiBackendFlags_HasGamepad;
-}
-
-void ImGui_ImplGlfw_NewFrame()
-{
-    ImGuiIO& io = ImGui::GetIO();
-    IM_ASSERT(io.Fonts->IsBuilt() && "Font atlas not built! It is generally built by the renderer back-end. Missing call to renderer _NewFrame() function? e.g. ImGui_ImplOpenGL3_NewFrame().");
-
-    // Setup display size (every frame to accommodate for window resizing)
-    int w, h;
-    int display_w, display_h;
-    glfwGetWindowSize(g_Window, &w, &h);
-    glfwGetFramebufferSize(g_Window, &display_w, &display_h);
-    io.DisplaySize = ImVec2((float)w, (float)h);
-    if (w > 0 && h > 0)
-        io.DisplayFramebufferScale = ImVec2((float)display_w / w, (float)display_h / h);
-
-    // Setup time step
-    double current_time = glfwGetTime();
-    io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f);
-    g_Time = current_time;
-
-    ImGui_ImplGlfw_UpdateMousePosAndButtons();
-    ImGui_ImplGlfw_UpdateMouseCursor();
-
-    // Update game controllers (if enabled and available)
-    ImGui_ImplGlfw_UpdateGamepads();
-}
--- a/DoConfig/new/imgui/imgui_impl_glfw.h
+++ /dev/null
@@ -1,34 +1,0 @@
-// dear imgui: Platform Binding for GLFW
-// This needs to be used along with a Renderer (e.g. OpenGL3, Vulkan..)
-// (Info: GLFW is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.)
-
-// Implemented features:
-//  [X] Platform: Clipboard support.
-//  [X] Platform: Gamepad support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
-//  [x] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'. FIXME: 3 cursors types are missing from GLFW.
-//  [X] Platform: Keyboard arrays indexed using GLFW_KEY_* codes, e.g. ImGui::IsKeyPressed(GLFW_KEY_SPACE).
-
-// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
-// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
-// https://github.com/ocornut/imgui
-
-// About GLSL version:
-// The 'glsl_version' initialization parameter defaults to "#version 150" if NULL.
-// Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure!
-
-#pragma once
-
-struct GLFWwindow;
-
-IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks);
-IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForVulkan(GLFWwindow* window, bool install_callbacks);
-IMGUI_IMPL_API void     ImGui_ImplGlfw_Shutdown();
-IMGUI_IMPL_API void     ImGui_ImplGlfw_NewFrame();
-
-// GLFW callbacks
-// - When calling Init with 'install_callbacks=true': GLFW callbacks will be installed for you. They will call user's previously installed callbacks, if any.
-// - When calling Init with 'install_callbacks=false': GLFW callbacks won't be installed. You will need to call those function yourself from your own GLFW callbacks.
-IMGUI_IMPL_API void     ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods);
-IMGUI_IMPL_API void     ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset);
-IMGUI_IMPL_API void     ImGui_ImplGlfw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods);
-IMGUI_IMPL_API void     ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c);
--- a/DoConfig/new/imgui/imgui_impl_opengl3.cpp
+++ /dev/null
@@ -1,687 +1,0 @@
-// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline
-// - Desktop GL: 2.x 3.x 4.x
-// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
-// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
-
-// Implemented features:
-//  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
-//  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
-
-// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
-// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
-// https://github.com/ocornut/imgui
-
-// CHANGELOG
-// (minor and older changes stripped away, please see git history for details)
-//  2020-03-24: OpenGL: Added support for glbinding 2.x OpenGL loader.
-//  2020-01-07: OpenGL: Added support for glbinding 3.x OpenGL loader.
-//  2019-10-25: OpenGL: Using a combination of GL define and runtime GL version to decide whether to use glDrawElementsBaseVertex(). Fix building with pre-3.2 GL loaders.
-//  2019-09-22: OpenGL: Detect default GL loader using __has_include compiler facility.
-//  2019-09-16: OpenGL: Tweak initialization code to allow application calling ImGui_ImplOpenGL3_CreateFontsTexture() before the first NewFrame() call.
-//  2019-05-29: OpenGL: Desktop GL only: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag.
-//  2019-04-30: OpenGL: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
-//  2019-03-29: OpenGL: Not calling glBindBuffer more than necessary in the render loop.
-//  2019-03-15: OpenGL: Added a dummy GL call + comments in ImGui_ImplOpenGL3_Init() to detect uninitialized GL function loaders early.
-//  2019-03-03: OpenGL: Fix support for ES 2.0 (WebGL 1.0).
-//  2019-02-20: OpenGL: Fix for OSX not supporting OpenGL 4.5, we don't try to read GL_CLIP_ORIGIN even if defined by the headers/loader.
-//  2019-02-11: OpenGL: Projecting clipping rectangles correctly using draw_data->FramebufferScale to allow multi-viewports for retina display.
-//  2019-02-01: OpenGL: Using GLSL 410 shaders for any version over 410 (e.g. 430, 450).
-//  2018-11-30: Misc: Setting up io.BackendRendererName so it can be displayed in the About Window.
-//  2018-11-13: OpenGL: Support for GL 4.5's glClipControl(GL_UPPER_LEFT) / GL_CLIP_ORIGIN.
-//  2018-08-29: OpenGL: Added support for more OpenGL loaders: glew and glad, with comments indicative that any loader can be used.
-//  2018-08-09: OpenGL: Default to OpenGL ES 3 on iOS and Android. GLSL version default to "#version 300 ES".
-//  2018-07-30: OpenGL: Support for GLSL 300 ES and 410 core. Fixes for Emscripten compilation.
-//  2018-07-10: OpenGL: Support for more GLSL versions (based on the GLSL version string). Added error output when shaders fail to compile/link.
-//  2018-06-08: Misc: Extracted imgui_impl_opengl3.cpp/.h away from the old combined GLFW/SDL+OpenGL3 examples.
-//  2018-06-08: OpenGL: Use draw_data->DisplayPos and draw_data->DisplaySize to setup projection matrix and clipping rectangle.
-//  2018-05-25: OpenGL: Removed unnecessary backup/restore of GL_ELEMENT_ARRAY_BUFFER_BINDING since this is part of the VAO state.
-//  2018-05-14: OpenGL: Making the call to glBindSampler() optional so 3.2 context won't fail if the function is a NULL pointer.
-//  2018-03-06: OpenGL: Added const char* glsl_version parameter to ImGui_ImplOpenGL3_Init() so user can override the GLSL version e.g. "#version 150".
-//  2018-02-23: OpenGL: Create the VAO in the render function so the setup can more easily be used with multiple shared GL context.
-//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself.
-//  2018-01-07: OpenGL: Changed GLSL shader version from 330 to 150.
-//  2017-09-01: OpenGL: Save and restore current bound sampler. Save and restore current polygon mode.
-//  2017-05-01: OpenGL: Fixed save and restore of current blend func state.
-//  2017-05-01: OpenGL: Fixed save and restore of current GL_ACTIVE_TEXTURE.
-//  2016-09-05: OpenGL: Fixed save and restore of current scissor rectangle.
-//  2016-07-29: OpenGL: Explicitly setting GL_UNPACK_ROW_LENGTH to reduce issues because SDL changes it. (#752)
-
-//----------------------------------------
-// OpenGL    GLSL      GLSL
-// version   version   string
-//----------------------------------------
-//  2.0       110       "#version 110"
-//  2.1       120       "#version 120"
-//  3.0       130       "#version 130"
-//  3.1       140       "#version 140"
-//  3.2       150       "#version 150"
-//  3.3       330       "#version 330 core"
-//  4.0       400       "#version 400 core"
-//  4.1       410       "#version 410 core"
-//  4.2       420       "#version 410 core"
-//  4.3       430       "#version 430 core"
-//  ES 2.0    100       "#version 100"      = WebGL 1.0
-//  ES 3.0    300       "#version 300 es"   = WebGL 2.0
-//----------------------------------------
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "imgui.h"
-#include "imgui_impl_opengl3.h"
-#include <stdio.h>
-#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
-#include <stddef.h>     // intptr_t
-#else
-#include <stdint.h>     // intptr_t
-#endif
-#if defined(__APPLE__)
-#include "TargetConditionals.h"
-#endif
-
-// Auto-enable GLES on matching platforms
-#if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3)
-#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__))
-#define IMGUI_IMPL_OPENGL_ES3           // iOS, Android  -> GL ES 3, "#version 300 es"
-#elif defined(__EMSCRIPTEN__)
-#define IMGUI_IMPL_OPENGL_ES2           // Emscripten    -> GL ES 2, "#version 100"
-#endif
-#endif
-
-#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3)
-#undef IMGUI_IMPL_OPENGL_LOADER_GL3W
-#undef IMGUI_IMPL_OPENGL_LOADER_GLEW
-#undef IMGUI_IMPL_OPENGL_LOADER_GLAD
-#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
-#undef IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
-#undef IMGUI_IMPL_OPENGL_LOADER_CUSTOM
-#endif
-
-// GL includes
-#if defined(IMGUI_IMPL_OPENGL_ES2)
-#include <GLES2/gl2.h>
-#elif defined(IMGUI_IMPL_OPENGL_ES3)
-#if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV))
-#include <OpenGLES/ES3/gl.h>    // Use GL ES 3
-#else
-#include <GLES3/gl3.h>          // Use GL ES 3
-#endif
-#else
-// About Desktop OpenGL function loaders:
-//  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
-//  Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad).
-//  You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own.
-#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)
-#include <GL/gl3w.h>            // Needs to be initialized with gl3wInit() in user's code
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)
-#include <GL/glew.h>            // Needs to be initialized with glewInit() in user's code.
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
-#include <glad/glad.h>          // Needs to be initialized with gladLoadGL() in user's code.
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
-#define GLFW_INCLUDE_NONE       // GLFW including OpenGL headers causes ambiguity or multiple definition errors.
-#include <glbinding/Binding.h>  // Needs to be initialized with glbinding::Binding::initialize() in user's code.
-#include <glbinding/gl/gl.h>
-using namespace gl;
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
-#define GLFW_INCLUDE_NONE       // GLFW including OpenGL headers causes ambiguity or multiple definition errors.
-#include <glbinding/glbinding.h>// Needs to be initialized with glbinding::initialize() in user's code.
-#include <glbinding/gl/gl.h>
-using namespace gl;
-#else
-#include IMGUI_IMPL_OPENGL_LOADER_CUSTOM
-#endif
-#endif
-
-// Desktop GL 3.2+ has glDrawElementsBaseVertex() which GL ES and WebGL don't have.
-#if defined(IMGUI_IMPL_OPENGL_ES2) || defined(IMGUI_IMPL_OPENGL_ES3) || !defined(GL_VERSION_3_2)
-#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET   0
-#else
-#define IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET   1
-#endif
-
-// OpenGL Data
-static GLuint       g_GlVersion = 0;                // Extracted at runtime using GL_MAJOR_VERSION, GL_MINOR_VERSION queries.
-static char         g_GlslVersionString[32] = "";   // Specified by user or detected based on compile time GL settings.
-static GLuint       g_FontTexture = 0;
-static GLuint       g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0;
-static int          g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0;                                // Uniforms location
-static int          g_AttribLocationVtxPos = 0, g_AttribLocationVtxUV = 0, g_AttribLocationVtxColor = 0; // Vertex attributes location
-static unsigned int g_VboHandle = 0, g_ElementsHandle = 0;
-
-// Functions
-bool    ImGui_ImplOpenGL3_Init(const char* glsl_version)
-{
-    // Query for GL version
-#if !defined(IMGUI_IMPL_OPENGL_ES2)
-    GLint major, minor;
-    glGetIntegerv(GL_MAJOR_VERSION, &major);
-    glGetIntegerv(GL_MINOR_VERSION, &minor);
-    g_GlVersion = major * 1000 + minor;
-#else
-    g_GlVersion = 2000; // GLES 2
-#endif
-
-    // Setup back-end capabilities flags
-    ImGuiIO& io = ImGui::GetIO();
-    io.BackendRendererName = "imgui_impl_opengl3";
-#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
-    if (g_GlVersion >= 3200)
-        io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset;  // We can honor the ImDrawCmd::VtxOffset field, allowing for large meshes.
-#endif
-
-    // Store GLSL version string so we can refer to it later in case we recreate shaders.
-    // Note: GLSL version is NOT the same as GL version. Leave this to NULL if unsure.
-#if defined(IMGUI_IMPL_OPENGL_ES2)
-    if (glsl_version == NULL)
-        glsl_version = "#version 100";
-#elif defined(IMGUI_IMPL_OPENGL_ES3)
-    if (glsl_version == NULL)
-        glsl_version = "#version 300 es";
-#else
-    if (glsl_version == NULL)
-        glsl_version = "#version 130";
-#endif
-    IM_ASSERT((int)strlen(glsl_version) + 2 < IM_ARRAYSIZE(g_GlslVersionString));
-    strcpy(g_GlslVersionString, glsl_version);
-    strcat(g_GlslVersionString, "\n");
-
-    // Dummy construct to make it easily visible in the IDE and debugger which GL loader has been selected.
-    // The code actually never uses the 'gl_loader' variable! It is only here so you can read it!
-    // If auto-detection fails or doesn't select the same GL loader file as used by your application,
-    // you are likely to get a crash below.
-    // You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
-    const char* gl_loader = "Unknown";
-    IM_UNUSED(gl_loader);
-#if defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)
-    gl_loader = "GL3W";
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)
-    gl_loader = "GLEW";
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD)
-    gl_loader = "GLAD";
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2)
-    gl_loader = "glbinding2";
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3)
-    gl_loader = "glbinding3";
-#elif defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
-    gl_loader = "custom";
-#else
-    gl_loader = "none";
-#endif
-
-    // Make a dummy GL call (we don't actually need the result)
-    // IF YOU GET A CRASH HERE: it probably means that you haven't initialized the OpenGL function loader used by this code.
-    // Desktop OpenGL 3/4 need a function loader. See the IMGUI_IMPL_OPENGL_LOADER_xxx explanation above.
-    GLint current_texture;
-    glGetIntegerv(GL_TEXTURE_BINDING_2D, &current_texture);
-
-    return true;
-}
-
-void    ImGui_ImplOpenGL3_Shutdown()
-{
-    ImGui_ImplOpenGL3_DestroyDeviceObjects();
-}
-
-void    ImGui_ImplOpenGL3_NewFrame()
-{
-    if (!g_ShaderHandle)
-        ImGui_ImplOpenGL3_CreateDeviceObjects();
-}
-
-static void ImGui_ImplOpenGL3_SetupRenderState(ImDrawData* draw_data, int fb_width, int fb_height, GLuint vertex_array_object)
-{
-    // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill
-    glEnable(GL_BLEND);
-    glBlendEquation(GL_FUNC_ADD);
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    glDisable(GL_CULL_FACE);
-    glDisable(GL_DEPTH_TEST);
-    glEnable(GL_SCISSOR_TEST);
-#ifdef GL_POLYGON_MODE
-    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
-#endif
-
-    // Setup viewport, orthographic projection matrix
-    // Our visible imgui space lies from draw_data->DisplayPos (top left) to draw_data->DisplayPos+data_data->DisplaySize (bottom right). DisplayPos is (0,0) for single viewport apps.
-    glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height);
-    float L = draw_data->DisplayPos.x;
-    float R = draw_data->DisplayPos.x + draw_data->DisplaySize.x;
-    float T = draw_data->DisplayPos.y;
-    float B = draw_data->DisplayPos.y + draw_data->DisplaySize.y;
-    const float ortho_projection[4][4] =
-    {
-        { 2.0f/(R-L),   0.0f,         0.0f,   0.0f },
-        { 0.0f,         2.0f/(T-B),   0.0f,   0.0f },
-        { 0.0f,         0.0f,        -1.0f,   0.0f },
-        { (R+L)/(L-R),  (T+B)/(B-T),  0.0f,   1.0f },
-    };
-    glUseProgram(g_ShaderHandle);
-    glUniform1i(g_AttribLocationTex, 0);
-    glUniformMatrix4fv(g_AttribLocationProjMtx, 1, GL_FALSE, &ortho_projection[0][0]);
-#ifdef GL_SAMPLER_BINDING
-    glBindSampler(0, 0); // We use combined texture/sampler state. Applications using GL 3.3 may set that otherwise.
-#endif
-
-    (void)vertex_array_object;
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    glBindVertexArray(vertex_array_object);
-#endif
-
-    // Bind vertex/index buffers and setup attributes for ImDrawVert
-    glBindBuffer(GL_ARRAY_BUFFER, g_VboHandle);
-    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_ElementsHandle);
-    glEnableVertexAttribArray(g_AttribLocationVtxPos);
-    glEnableVertexAttribArray(g_AttribLocationVtxUV);
-    glEnableVertexAttribArray(g_AttribLocationVtxColor);
-    glVertexAttribPointer(g_AttribLocationVtxPos,   2, GL_FLOAT,         GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, pos));
-    glVertexAttribPointer(g_AttribLocationVtxUV,    2, GL_FLOAT,         GL_FALSE, sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, uv));
-    glVertexAttribPointer(g_AttribLocationVtxColor, 4, GL_UNSIGNED_BYTE, GL_TRUE,  sizeof(ImDrawVert), (GLvoid*)IM_OFFSETOF(ImDrawVert, col));
-}
-
-// OpenGL3 Render function.
-// (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop)
-// Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so.
-void    ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data)
-{
-    // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates)
-    int fb_width = (int)(draw_data->DisplaySize.x * draw_data->FramebufferScale.x);
-    int fb_height = (int)(draw_data->DisplaySize.y * draw_data->FramebufferScale.y);
-    if (fb_width <= 0 || fb_height <= 0)
-        return;
-
-    // Backup GL state
-    GLenum last_active_texture; glGetIntegerv(GL_ACTIVE_TEXTURE, (GLint*)&last_active_texture);
-    glActiveTexture(GL_TEXTURE0);
-    GLint last_program; glGetIntegerv(GL_CURRENT_PROGRAM, &last_program);
-    GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
-#ifdef GL_SAMPLER_BINDING
-    GLint last_sampler; glGetIntegerv(GL_SAMPLER_BINDING, &last_sampler);
-#endif
-    GLint last_array_buffer; glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    GLint last_vertex_array_object; glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array_object);
-#endif
-#ifdef GL_POLYGON_MODE
-    GLint last_polygon_mode[2]; glGetIntegerv(GL_POLYGON_MODE, last_polygon_mode);
-#endif
-    GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport);
-    GLint last_scissor_box[4]; glGetIntegerv(GL_SCISSOR_BOX, last_scissor_box);
-    GLenum last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, (GLint*)&last_blend_src_rgb);
-    GLenum last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, (GLint*)&last_blend_dst_rgb);
-    GLenum last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, (GLint*)&last_blend_src_alpha);
-    GLenum last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, (GLint*)&last_blend_dst_alpha);
-    GLenum last_blend_equation_rgb; glGetIntegerv(GL_BLEND_EQUATION_RGB, (GLint*)&last_blend_equation_rgb);
-    GLenum last_blend_equation_alpha; glGetIntegerv(GL_BLEND_EQUATION_ALPHA, (GLint*)&last_blend_equation_alpha);
-    GLboolean last_enable_blend = glIsEnabled(GL_BLEND);
-    GLboolean last_enable_cull_face = glIsEnabled(GL_CULL_FACE);
-    GLboolean last_enable_depth_test = glIsEnabled(GL_DEPTH_TEST);
-    GLboolean last_enable_scissor_test = glIsEnabled(GL_SCISSOR_TEST);
-    bool clip_origin_lower_left = true;
-#if defined(GL_CLIP_ORIGIN) && !defined(__APPLE__)
-    GLenum last_clip_origin = 0; glGetIntegerv(GL_CLIP_ORIGIN, (GLint*)&last_clip_origin); // Support for GL 4.5's glClipControl(GL_UPPER_LEFT)
-    if (last_clip_origin == GL_UPPER_LEFT)
-        clip_origin_lower_left = false;
-#endif
-
-    // Setup desired GL state
-    // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts)
-    // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound.
-    GLuint vertex_array_object = 0;
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    glGenVertexArrays(1, &vertex_array_object);
-#endif
-    ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
-
-    // Will project scissor/clipping rectangles into framebuffer space
-    ImVec2 clip_off = draw_data->DisplayPos;         // (0,0) unless using multi-viewports
-    ImVec2 clip_scale = draw_data->FramebufferScale; // (1,1) unless using retina display which are often (2,2)
-
-    // Render command lists
-    for (int n = 0; n < draw_data->CmdListsCount; n++)
-    {
-        const ImDrawList* cmd_list = draw_data->CmdLists[n];
-
-        // Upload vertex/index buffers
-        glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)cmd_list->VtxBuffer.Size * sizeof(ImDrawVert), (const GLvoid*)cmd_list->VtxBuffer.Data, GL_STREAM_DRAW);
-        glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx), (const GLvoid*)cmd_list->IdxBuffer.Data, GL_STREAM_DRAW);
-
-        for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
-        {
-            const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
-            if (pcmd->UserCallback != NULL)
-            {
-                // User callback, registered via ImDrawList::AddCallback()
-                // (ImDrawCallback_ResetRenderState is a special callback value used by the user to request the renderer to reset render state.)
-                if (pcmd->UserCallback == ImDrawCallback_ResetRenderState)
-                    ImGui_ImplOpenGL3_SetupRenderState(draw_data, fb_width, fb_height, vertex_array_object);
-                else
-                    pcmd->UserCallback(cmd_list, pcmd);
-            }
-            else
-            {
-                // Project scissor/clipping rectangles into framebuffer space
-                ImVec4 clip_rect;
-                clip_rect.x = (pcmd->ClipRect.x - clip_off.x) * clip_scale.x;
-                clip_rect.y = (pcmd->ClipRect.y - clip_off.y) * clip_scale.y;
-                clip_rect.z = (pcmd->ClipRect.z - clip_off.x) * clip_scale.x;
-                clip_rect.w = (pcmd->ClipRect.w - clip_off.y) * clip_scale.y;
-
-                if (clip_rect.x < fb_width && clip_rect.y < fb_height && clip_rect.z >= 0.0f && clip_rect.w >= 0.0f)
-                {
-                    // Apply scissor/clipping rectangle
-                    if (clip_origin_lower_left)
-                        glScissor((int)clip_rect.x, (int)(fb_height - clip_rect.w), (int)(clip_rect.z - clip_rect.x), (int)(clip_rect.w - clip_rect.y));
-                    else
-                        glScissor((int)clip_rect.x, (int)clip_rect.y, (int)clip_rect.z, (int)clip_rect.w); // Support for GL 4.5 rarely used glClipControl(GL_UPPER_LEFT)
-
-                    // Bind texture, Draw
-                    glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId);
-#if IMGUI_IMPL_OPENGL_MAY_HAVE_VTX_OFFSET
-                    if (g_GlVersion >= 3200)
-                        glDrawElementsBaseVertex(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)), (GLint)pcmd->VtxOffset);
-                    else
-#endif
-                    glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, (void*)(intptr_t)(pcmd->IdxOffset * sizeof(ImDrawIdx)));
-                }
-            }
-        }
-    }
-
-    // Destroy the temporary VAO
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    glDeleteVertexArrays(1, &vertex_array_object);
-#endif
-
-    // Restore modified GL state
-    glUseProgram(last_program);
-    glBindTexture(GL_TEXTURE_2D, last_texture);
-#ifdef GL_SAMPLER_BINDING
-    glBindSampler(0, last_sampler);
-#endif
-    glActiveTexture(last_active_texture);
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    glBindVertexArray(last_vertex_array_object);
-#endif
-    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
-    glBlendEquationSeparate(last_blend_equation_rgb, last_blend_equation_alpha);
-    glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha);
-    if (last_enable_blend) glEnable(GL_BLEND); else glDisable(GL_BLEND);
-    if (last_enable_cull_face) glEnable(GL_CULL_FACE); else glDisable(GL_CULL_FACE);
-    if (last_enable_depth_test) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
-    if (last_enable_scissor_test) glEnable(GL_SCISSOR_TEST); else glDisable(GL_SCISSOR_TEST);
-#ifdef GL_POLYGON_MODE
-    glPolygonMode(GL_FRONT_AND_BACK, (GLenum)last_polygon_mode[0]);
-#endif
-    glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]);
-    glScissor(last_scissor_box[0], last_scissor_box[1], (GLsizei)last_scissor_box[2], (GLsizei)last_scissor_box[3]);
-}
-
-bool ImGui_ImplOpenGL3_CreateFontsTexture()
-{
-    // Build texture atlas
-    ImGuiIO& io = ImGui::GetIO();
-    unsigned char* pixels;
-    int width, height;
-    io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);   // Load as RGBA 32-bit (75% of the memory is wasted, but default font is so small) because it is more likely to be compatible with user's existing shaders. If your ImTextureId represent a higher-level concept than just a GL texture id, consider calling GetTexDataAsAlpha8() instead to save on GPU memory.
-
-    // Upload texture to graphics system
-    GLint last_texture;
-    glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
-    glGenTextures(1, &g_FontTexture);
-    glBindTexture(GL_TEXTURE_2D, g_FontTexture);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-#ifdef GL_UNPACK_ROW_LENGTH
-    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
-#endif
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
-
-    // Store our identifier
-    io.Fonts->TexID = (ImTextureID)(intptr_t)g_FontTexture;
-
-    // Restore state
-    glBindTexture(GL_TEXTURE_2D, last_texture);
-
-    return true;
-}
-
-void ImGui_ImplOpenGL3_DestroyFontsTexture()
-{
-    if (g_FontTexture)
-    {
-        ImGuiIO& io = ImGui::GetIO();
-        glDeleteTextures(1, &g_FontTexture);
-        io.Fonts->TexID = 0;
-        g_FontTexture = 0;
-    }
-}
-
-// If you get an error please report on github. You may try different GL context version or GLSL version. See GL<>GLSL version table at the top of this file.
-static bool CheckShader(GLuint handle, const char* desc)
-{
-    GLint status = 0, log_length = 0;
-    glGetShaderiv(handle, GL_COMPILE_STATUS, &status);
-    glGetShaderiv(handle, GL_INFO_LOG_LENGTH, &log_length);
-    if ((GLboolean)status == GL_FALSE)
-        fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to compile %s!\n", desc);
-    if (log_length > 1)
-    {
-        ImVector<char> buf;
-        buf.resize((int)(log_length + 1));
-        glGetShaderInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
-        fprintf(stderr, "%s\n", buf.begin());
-    }
-    return (GLboolean)status == GL_TRUE;
-}
-
-// If you get an error please report on GitHub. You may try different GL context version or GLSL version.
-static bool CheckProgram(GLuint handle, const char* desc)
-{
-    GLint status = 0, log_length = 0;
-    glGetProgramiv(handle, GL_LINK_STATUS, &status);
-    glGetProgramiv(handle, GL_INFO_LOG_LENGTH, &log_length);
-    if ((GLboolean)status == GL_FALSE)
-        fprintf(stderr, "ERROR: ImGui_ImplOpenGL3_CreateDeviceObjects: failed to link %s! (with GLSL '%s')\n", desc, g_GlslVersionString);
-    if (log_length > 1)
-    {
-        ImVector<char> buf;
-        buf.resize((int)(log_length + 1));
-        glGetProgramInfoLog(handle, log_length, NULL, (GLchar*)buf.begin());
-        fprintf(stderr, "%s\n", buf.begin());
-    }
-    return (GLboolean)status == GL_TRUE;
-}
-
-bool    ImGui_ImplOpenGL3_CreateDeviceObjects()
-{
-    // Backup GL state
-    GLint last_texture, last_array_buffer;
-    glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture);
-    glGetIntegerv(GL_ARRAY_BUFFER_BINDING, &last_array_buffer);
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    GLint last_vertex_array;
-    glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &last_vertex_array);
-#endif
-
-    // Parse GLSL version string
-    int glsl_version = 130;
-    sscanf(g_GlslVersionString, "#version %d", &glsl_version);
-
-    const GLchar* vertex_shader_glsl_120 =
-        "uniform mat4 ProjMtx;\n"
-        "attribute vec2 Position;\n"
-        "attribute vec2 UV;\n"
-        "attribute vec4 Color;\n"
-        "varying vec2 Frag_UV;\n"
-        "varying vec4 Frag_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Frag_UV = UV;\n"
-        "    Frag_Color = Color;\n"
-        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
-        "}\n";
-
-    const GLchar* vertex_shader_glsl_130 =
-        "uniform mat4 ProjMtx;\n"
-        "in vec2 Position;\n"
-        "in vec2 UV;\n"
-        "in vec4 Color;\n"
-        "out vec2 Frag_UV;\n"
-        "out vec4 Frag_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Frag_UV = UV;\n"
-        "    Frag_Color = Color;\n"
-        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
-        "}\n";
-
-    const GLchar* vertex_shader_glsl_300_es =
-        "precision mediump float;\n"
-        "layout (location = 0) in vec2 Position;\n"
-        "layout (location = 1) in vec2 UV;\n"
-        "layout (location = 2) in vec4 Color;\n"
-        "uniform mat4 ProjMtx;\n"
-        "out vec2 Frag_UV;\n"
-        "out vec4 Frag_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Frag_UV = UV;\n"
-        "    Frag_Color = Color;\n"
-        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
-        "}\n";
-
-    const GLchar* vertex_shader_glsl_410_core =
-        "layout (location = 0) in vec2 Position;\n"
-        "layout (location = 1) in vec2 UV;\n"
-        "layout (location = 2) in vec4 Color;\n"
-        "uniform mat4 ProjMtx;\n"
-        "out vec2 Frag_UV;\n"
-        "out vec4 Frag_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Frag_UV = UV;\n"
-        "    Frag_Color = Color;\n"
-        "    gl_Position = ProjMtx * vec4(Position.xy,0,1);\n"
-        "}\n";
-
-    const GLchar* fragment_shader_glsl_120 =
-        "#ifdef GL_ES\n"
-        "    precision mediump float;\n"
-        "#endif\n"
-        "uniform sampler2D Texture;\n"
-        "varying vec2 Frag_UV;\n"
-        "varying vec4 Frag_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    gl_FragColor = Frag_Color * texture2D(Texture, Frag_UV.st);\n"
-        "}\n";
-
-    const GLchar* fragment_shader_glsl_130 =
-        "uniform sampler2D Texture;\n"
-        "in vec2 Frag_UV;\n"
-        "in vec4 Frag_Color;\n"
-        "out vec4 Out_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
-        "}\n";
-
-    const GLchar* fragment_shader_glsl_300_es =
-        "precision mediump float;\n"
-        "uniform sampler2D Texture;\n"
-        "in vec2 Frag_UV;\n"
-        "in vec4 Frag_Color;\n"
-        "layout (location = 0) out vec4 Out_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
-        "}\n";
-
-    const GLchar* fragment_shader_glsl_410_core =
-        "in vec2 Frag_UV;\n"
-        "in vec4 Frag_Color;\n"
-        "uniform sampler2D Texture;\n"
-        "layout (location = 0) out vec4 Out_Color;\n"
-        "void main()\n"
-        "{\n"
-        "    Out_Color = Frag_Color * texture(Texture, Frag_UV.st);\n"
-        "}\n";
-
-    // Select shaders matching our GLSL versions
-    const GLchar* vertex_shader = NULL;
-    const GLchar* fragment_shader = NULL;
-    if (glsl_version < 130)
-    {
-        vertex_shader = vertex_shader_glsl_120;
-        fragment_shader = fragment_shader_glsl_120;
-    }
-    else if (glsl_version >= 410)
-    {
-        vertex_shader = vertex_shader_glsl_410_core;
-        fragment_shader = fragment_shader_glsl_410_core;
-    }
-    else if (glsl_version == 300)
-    {
-        vertex_shader = vertex_shader_glsl_300_es;
-        fragment_shader = fragment_shader_glsl_300_es;
-    }
-    else
-    {
-        vertex_shader = vertex_shader_glsl_130;
-        fragment_shader = fragment_shader_glsl_130;
-    }
-
-    // Create shaders
-    const GLchar* vertex_shader_with_version[2] = { g_GlslVersionString, vertex_shader };
-    g_VertHandle = glCreateShader(GL_VERTEX_SHADER);
-    glShaderSource(g_VertHandle, 2, vertex_shader_with_version, NULL);
-    glCompileShader(g_VertHandle);
-    CheckShader(g_VertHandle, "vertex shader");
-
-    const GLchar* fragment_shader_with_version[2] = { g_GlslVersionString, fragment_shader };
-    g_FragHandle = glCreateShader(GL_FRAGMENT_SHADER);
-    glShaderSource(g_FragHandle, 2, fragment_shader_with_version, NULL);
-    glCompileShader(g_FragHandle);
-    CheckShader(g_FragHandle, "fragment shader");
-
-    g_ShaderHandle = glCreateProgram();
-    glAttachShader(g_ShaderHandle, g_VertHandle);
-    glAttachShader(g_ShaderHandle, g_FragHandle);
-    glLinkProgram(g_ShaderHandle);
-    CheckProgram(g_ShaderHandle, "shader program");
-
-    g_AttribLocationTex = glGetUniformLocation(g_ShaderHandle, "Texture");
-    g_AttribLocationProjMtx = glGetUniformLocation(g_ShaderHandle, "ProjMtx");
-    g_AttribLocationVtxPos = glGetAttribLocation(g_ShaderHandle, "Position");
-    g_AttribLocationVtxUV = glGetAttribLocation(g_ShaderHandle, "UV");
-    g_AttribLocationVtxColor = glGetAttribLocation(g_ShaderHandle, "Color");
-
-    // Create buffers
-    glGenBuffers(1, &g_VboHandle);
-    glGenBuffers(1, &g_ElementsHandle);
-
-    ImGui_ImplOpenGL3_CreateFontsTexture();
-
-    // Restore modified GL state
-    glBindTexture(GL_TEXTURE_2D, last_texture);
-    glBindBuffer(GL_ARRAY_BUFFER, last_array_buffer);
-#ifndef IMGUI_IMPL_OPENGL_ES2
-    glBindVertexArray(last_vertex_array);
-#endif
-
-    return true;
-}
-
-void    ImGui_ImplOpenGL3_DestroyDeviceObjects()
-{
-    if (g_VboHandle)        { glDeleteBuffers(1, &g_VboHandle); g_VboHandle = 0; }
-    if (g_ElementsHandle)   { glDeleteBuffers(1, &g_ElementsHandle); g_ElementsHandle = 0; }
-    if (g_ShaderHandle && g_VertHandle) { glDetachShader(g_ShaderHandle, g_VertHandle); }
-    if (g_ShaderHandle && g_FragHandle) { glDetachShader(g_ShaderHandle, g_FragHandle); }
-    if (g_VertHandle)       { glDeleteShader(g_VertHandle); g_VertHandle = 0; }
-    if (g_FragHandle)       { glDeleteShader(g_FragHandle); g_FragHandle = 0; }
-    if (g_ShaderHandle)     { glDeleteProgram(g_ShaderHandle); g_ShaderHandle = 0; }
-
-    ImGui_ImplOpenGL3_DestroyFontsTexture();
-}
--- a/DoConfig/new/imgui/imgui_impl_opengl3.h
+++ /dev/null
@@ -1,70 +1,0 @@
-// dear imgui: Renderer for modern OpenGL with shaders / programmatic pipeline
-// - Desktop GL: 2.x 3.x 4.x
-// - Embedded GL: ES 2.0 (WebGL 1.0), ES 3.0 (WebGL 2.0)
-// This needs to be used along with a Platform Binding (e.g. GLFW, SDL, Win32, custom..)
-
-// Implemented features:
-//  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID!
-//  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices.
-
-// You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this.
-// If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp.
-// https://github.com/ocornut/imgui
-
-// About Desktop OpenGL function loaders:
-//  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers.
-//  Helper libraries are often used for this purpose! Here we are supporting a few common ones (gl3w, glew, glad).
-//  You may use another loader/header of your choice (glext, glLoadGen, etc.), or chose to manually implement your own.
-
-// About GLSL version:
-//  The 'glsl_version' initialization parameter should be NULL (default) or a "#version XXX" string.
-//  On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es"
-//  Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp.
-
-#pragma once
-
-// Backend API
-IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_Init(const char* glsl_version = NULL);
-IMGUI_IMPL_API void     ImGui_ImplOpenGL3_Shutdown();
-IMGUI_IMPL_API void     ImGui_ImplOpenGL3_NewFrame();
-IMGUI_IMPL_API void     ImGui_ImplOpenGL3_RenderDrawData(ImDrawData* draw_data);
-
-// (Optional) Called by Init/NewFrame/Shutdown
-IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_CreateFontsTexture();
-IMGUI_IMPL_API void     ImGui_ImplOpenGL3_DestroyFontsTexture();
-IMGUI_IMPL_API bool     ImGui_ImplOpenGL3_CreateDeviceObjects();
-IMGUI_IMPL_API void     ImGui_ImplOpenGL3_DestroyDeviceObjects();
-
-// Specific OpenGL versions
-//#define IMGUI_IMPL_OPENGL_ES2     // Auto-detected on Emscripten
-//#define IMGUI_IMPL_OPENGL_ES3     // Auto-detected on iOS/Android
-
-// Desktop OpenGL: attempt to detect default GL loader based on available header files.
-// If auto-detection fails or doesn't select the same GL loader file as used by your application,
-// you are likely to get a crash in ImGui_ImplOpenGL3_Init().
-// You can explicitly select a loader by using '#define IMGUI_IMPL_OPENGL_LOADER_XXX' in imconfig.h or compiler command-line.
-#if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W) \
- && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) \
- && !defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) \
- && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING2) \
- && !defined(IMGUI_IMPL_OPENGL_LOADER_GLBINDING3) \
- && !defined(IMGUI_IMPL_OPENGL_LOADER_CUSTOM)
-    #if defined(__has_include)
-        #if __has_include(<GL/glew.h>)
-            #define IMGUI_IMPL_OPENGL_LOADER_GLEW
-        #elif __has_include(<glad/glad.h>)
-            #define IMGUI_IMPL_OPENGL_LOADER_GLAD
-        #elif __has_include(<GL/gl3w.h>)
-            #define IMGUI_IMPL_OPENGL_LOADER_GL3W
-        #elif __has_include(<glbinding/glbinding.h>)
-            #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING3
-        #elif __has_include(<glbinding/Binding.h>)
-            #define IMGUI_IMPL_OPENGL_LOADER_GLBINDING2
-        #else
-            #error "Cannot detect OpenGL loader!"
-        #endif
-    #else
-        #define IMGUI_IMPL_OPENGL_LOADER_GL3W       // Default to GL3W
-    #endif
-#endif
-
--- a/DoConfig/new/imgui/imgui_internal.h
+++ /dev/null
@@ -1,2252 +1,0 @@
-// dear imgui, v1.76 WIP
-// (internal structures/api)
-
-// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
-// Set:
-//   #define IMGUI_DEFINE_MATH_OPERATORS
-// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
-
-/*
-
-Index of this file:
-// Header mess
-// Forward declarations
-// STB libraries includes
-// Context pointer
-// Generic helpers
-// Misc data structures
-// Main imgui context
-// Tab bar, tab item
-// Internal API
-
-*/
-
-#pragma once
-#ifndef IMGUI_DISABLE
-
-//-----------------------------------------------------------------------------
-// Header mess
-//-----------------------------------------------------------------------------
-
-#ifndef IMGUI_VERSION
-#error Must include imgui.h before imgui_internal.h
-#endif
-
-#include <stdio.h>      // FILE*, sscanf
-#include <stdlib.h>     // NULL, malloc, free, qsort, atoi, atof
-#include <math.h>       // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
-#include <limits.h>     // INT_MIN, INT_MAX
-
-// Visual Studio warnings
-#ifdef _MSC_VER
-#pragma warning (push)
-#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport)
-#endif
-
-// Clang/GCC warnings with -Weverything
-#if defined(__clang__)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-function"        // for stb_textedit.h
-#pragma clang diagnostic ignored "-Wmissing-prototypes"     // for stb_textedit.h
-#pragma clang diagnostic ignored "-Wold-style-cast"
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
-#endif
-#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion"
-#endif
-#elif defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
-
-// Legacy defines
-#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS                // Renamed in 1.74
-#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
-#endif
-#ifdef IMGUI_DISABLE_MATH_FUNCTIONS                         // Renamed in 1.74
-#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
-#endif
-
-//-----------------------------------------------------------------------------
-// Forward declarations
-//-----------------------------------------------------------------------------
-
-struct ImBitVector;                 // Store 1-bit per value
-struct ImRect;                      // An axis-aligned rectangle (2 points)
-struct ImDrawDataBuilder;           // Helper to build a ImDrawData instance
-struct ImDrawListSharedData;        // Data shared between all ImDrawList instances
-struct ImGuiColorMod;               // Stacked color modifier, backup of modified data so we can restore it
-struct ImGuiColumnData;             // Storage data for a single column
-struct ImGuiColumns;                // Storage data for a columns set
-struct ImGuiContext;                // Main Dear ImGui context
-struct ImGuiDataTypeInfo;           // Type information associated to a ImGuiDataType enum
-struct ImGuiGroupData;              // Stacked storage data for BeginGroup()/EndGroup()
-struct ImGuiInputTextState;         // Internal state of the currently focused/edited text input box
-struct ImGuiItemHoveredDataBackup;  // Backup and restore IsItemHovered() internal data
-struct ImGuiMenuColumns;            // Simple column measurement, currently used for MenuItem() only
-struct ImGuiNavMoveResult;          // Result of a directional navigation move query result
-struct ImGuiNextWindowData;         // Storage for SetNextWindow** functions
-struct ImGuiNextItemData;           // Storage for SetNextItem** functions
-struct ImGuiPopupData;              // Storage for current popup stack
-struct ImGuiSettingsHandler;        // Storage for one type registered in the .ini file
-struct ImGuiStyleMod;               // Stacked style modifier, backup of modified data so we can restore it
-struct ImGuiTabBar;                 // Storage for a tab bar
-struct ImGuiTabItem;                // Storage for a tab item (within a tab bar)
-struct ImGuiTable;                  // Storage for a table
-struct ImGuiTableColumn;            // Storage for one column of a table
-struct ImGuiTableSettings;          // Storage for a table .ini settings
-struct ImGuiTableColumnsSettings;   // Storage for a column .ini settings
-struct ImGuiWindow;                 // Storage for one window
-struct ImGuiWindowTempData;         // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame)
-struct ImGuiWindowSettings;         // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
-
-// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
-typedef int ImGuiLayoutType;            // -> enum ImGuiLayoutType_         // Enum: Horizontal or vertical
-typedef int ImGuiButtonFlags;           // -> enum ImGuiButtonFlags_        // Flags: for ButtonEx(), ButtonBehavior()
-typedef int ImGuiColumnsFlags;          // -> enum ImGuiColumnsFlags_       // Flags: BeginColumns()
-typedef int ImGuiDragFlags;             // -> enum ImGuiDragFlags_          // Flags: for DragBehavior()
-typedef int ImGuiItemFlags;             // -> enum ImGuiItemFlags_          // Flags: for PushItemFlag()
-typedef int ImGuiItemStatusFlags;       // -> enum ImGuiItemStatusFlags_    // Flags: for DC.LastItemStatusFlags
-typedef int ImGuiNavHighlightFlags;     // -> enum ImGuiNavHighlightFlags_  // Flags: for RenderNavHighlight()
-typedef int ImGuiNavDirSourceFlags;     // -> enum ImGuiNavDirSourceFlags_  // Flags: for GetNavInputAmount2d()
-typedef int ImGuiNavMoveFlags;          // -> enum ImGuiNavMoveFlags_       // Flags: for navigation requests
-typedef int ImGuiNextItemDataFlags;     // -> enum ImGuiNextItemDataFlags_  // Flags: for SetNextItemXXX() functions
-typedef int ImGuiNextWindowDataFlags;   // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
-typedef int ImGuiSeparatorFlags;        // -> enum ImGuiSeparatorFlags_     // Flags: for SeparatorEx()
-typedef int ImGuiSliderFlags;           // -> enum ImGuiSliderFlags_        // Flags: for SliderBehavior()
-typedef int ImGuiTextFlags;             // -> enum ImGuiTextFlags_          // Flags: for TextEx()
-typedef int ImGuiTooltipFlags;          // -> enum ImGuiTooltipFlags_       // Flags: for BeginTooltipEx()
-
-//-------------------------------------------------------------------------
-// STB libraries includes
-//-------------------------------------------------------------------------
-
-namespace ImStb
-{
-
-#undef STB_TEXTEDIT_STRING
-#undef STB_TEXTEDIT_CHARTYPE
-#define STB_TEXTEDIT_STRING             ImGuiInputTextState
-#define STB_TEXTEDIT_CHARTYPE           ImWchar
-#define STB_TEXTEDIT_GETWIDTH_NEWLINE   -1.0f
-#define STB_TEXTEDIT_UNDOSTATECOUNT     99
-#define STB_TEXTEDIT_UNDOCHARCOUNT      999
-#include "imstb_textedit.h"
-
-} // namespace ImStb
-
-//-----------------------------------------------------------------------------
-// Context pointer
-//-----------------------------------------------------------------------------
-
-#ifndef GImGui
-extern IMGUI_API ImGuiContext* GImGui;  // Current implicit context pointer
-#endif
-
-//-----------------------------------------------------------------------------
-// Macros
-//-----------------------------------------------------------------------------
-
-// Debug Logging
-#ifndef IMGUI_DEBUG_LOG
-#define IMGUI_DEBUG_LOG(_FMT,...)       printf("[%05d] " _FMT, GImGui->FrameCount, __VA_ARGS__)
-#endif
-
-// Static Asserts
-#if (__cplusplus >= 201100)
-#define IM_STATIC_ASSERT(_COND)         static_assert(_COND, "")
-#else
-#define IM_STATIC_ASSERT(_COND)         typedef char static_assertion_##__line__[(_COND)?1:-1]
-#endif
-
-// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much.
-// We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code.
-//#define IMGUI_DEBUG_PARANOID
-#ifdef IMGUI_DEBUG_PARANOID
-#define IM_ASSERT_PARANOID(_EXPR)       IM_ASSERT(_EXPR)
-#else
-#define IM_ASSERT_PARANOID(_EXPR)
-#endif
-
-// Error handling
-// Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults.
-#ifndef IM_ASSERT_USER_ERROR
-#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG)   // Recoverable User Error
-#endif
-
-// Misc Macros
-#define IM_PI                           3.14159265358979323846f
-#ifdef _WIN32
-#define IM_NEWLINE                      "\r\n"   // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
-#else
-#define IM_NEWLINE                      "\n"
-#endif
-#define IM_TABSIZE                      (4)
-#define IM_F32_TO_INT8_UNBOUND(_VAL)    ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f)))   // Unsaturated, for display purpose
-#define IM_F32_TO_INT8_SAT(_VAL)        ((int)(ImSaturate(_VAL) * 255.0f + 0.5f))               // Saturated, always output 0..255
-#define IM_FLOOR(_VAL)                  ((float)(int)(_VAL))                                    // ImFloor() is not inlined in MSVC debug builds
-#define IM_ROUND(_VAL)                  ((float)(int)((_VAL) + 0.5f))                           //
-
-// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
-#ifdef _MSC_VER
-#define IMGUI_CDECL __cdecl
-#else
-#define IMGUI_CDECL
-#endif
-
-//-----------------------------------------------------------------------------
-// Generic helpers
-// Note that the ImXXX helpers functions are lower-level than ImGui functions.
-// ImGui functions or the ImGui context are never called/used from other ImXXX functions.
-//-----------------------------------------------------------------------------
-// - Helpers: Misc
-// - Helpers: Bit manipulation
-// - Helpers: String, Formatting
-// - Helpers: UTF-8 <> wchar conversions
-// - Helpers: ImVec2/ImVec4 operators
-// - Helpers: Maths
-// - Helpers: Geometry
-// - Helpers: Bit arrays
-// - Helper: ImBitArray
-// - Helper: ImBitVector
-// - Helper: ImSpan<>, ImSpanAllocator<>
-// - Helper: ImPool<>
-// - Helper: ImChunkStream<>
-//-----------------------------------------------------------------------------
-
-// Helpers: Misc
-#define ImQsort         qsort
-IMGUI_API ImU32         ImHashData(const void* data, size_t data_size, ImU32 seed = 0);
-IMGUI_API ImU32         ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0);
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-static inline ImU32     ImHash(const void* data, int size, ImU32 seed = 0) { return size ? ImHashData(data, (size_t)size, seed) : ImHashStr((const char*)data, 0, seed); } // [moved to ImHashStr/ImHashData in 1.68]
-#endif
-
-// Helpers: Color Blending
-IMGUI_API ImU32         ImAlphaBlendColors(ImU32 col_a, ImU32 col_b);
-
-// Helpers: Bit manipulation
-static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 && (v & (v - 1)) == 0; }
-static inline bool      ImIsPowerOfTwo(ImU64 v)         { return v != 0 && (v & (v - 1)) == 0; }
-static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
-
-// Helpers: String, Formatting
-IMGUI_API int           ImStricmp(const char* str1, const char* str2);
-IMGUI_API int           ImStrnicmp(const char* str1, const char* str2, size_t count);
-IMGUI_API void          ImStrncpy(char* dst, const char* src, size_t count);
-IMGUI_API char*         ImStrdup(const char* str);
-IMGUI_API char*         ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
-IMGUI_API const char*   ImStrchrRange(const char* str_begin, const char* str_end, char c);
-IMGUI_API int           ImStrlenW(const ImWchar* str);
-IMGUI_API const char*   ImStreolRange(const char* str, const char* str_end);                // End end-of-line
-IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin);   // Find beginning-of-line
-IMGUI_API const char*   ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
-IMGUI_API void          ImStrTrimBlanks(char* str);
-IMGUI_API const char*   ImStrSkipBlank(const char* str);
-IMGUI_API int           ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3);
-IMGUI_API int           ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
-IMGUI_API const char*   ImParseFormatFindStart(const char* format);
-IMGUI_API const char*   ImParseFormatFindEnd(const char* format);
-IMGUI_API const char*   ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
-IMGUI_API int           ImParseFormatPrecision(const char* format, int default_value);
-static inline bool      ImCharIsBlankA(char c)          { return c == ' ' || c == '\t'; }
-static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ' || c == '\t' || c == 0x3000; }
-
-// Helpers: UTF-8 <> wchar conversions
-IMGUI_API int           ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWchar* in_text_end);      // return output UTF-8 bytes count
-IMGUI_API int           ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end);          // read one character. return input UTF-8 bytes count
-IMGUI_API int           ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL);   // return input UTF-8 bytes count
-IMGUI_API int           ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end);                            // return number of UTF-8 code-points (NOT bytes count)
-IMGUI_API int           ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end);                        // return number of bytes to express one char in UTF-8
-IMGUI_API int           ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end);                   // return number of bytes to express string in UTF-8
-
-// Helpers: ImVec2/ImVec4 operators
-// We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.)
-// We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself.
-#ifdef IMGUI_DEFINE_MATH_OPERATORS
-static inline ImVec2 operator*(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x*rhs, lhs.y*rhs); }
-static inline ImVec2 operator/(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x/rhs, lhs.y/rhs); }
-static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x+rhs.x, lhs.y+rhs.y); }
-static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x-rhs.x, lhs.y-rhs.y); }
-static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x*rhs.x, lhs.y*rhs.y); }
-static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x/rhs.x, lhs.y/rhs.y); }
-static inline ImVec2& operator*=(ImVec2& lhs, const float rhs)                  { lhs.x *= rhs; lhs.y *= rhs; return lhs; }
-static inline ImVec2& operator/=(ImVec2& lhs, const float rhs)                  { lhs.x /= rhs; lhs.y /= rhs; return lhs; }
-static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; }
-static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; }
-static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; }
-static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; }
-static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z, lhs.w+rhs.w); }
-static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); }
-static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x*rhs.x, lhs.y*rhs.y, lhs.z*rhs.z, lhs.w*rhs.w); }
-#endif
-
-// Helpers: File System
-#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
-#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
-typedef void* ImFileHandle;
-static inline ImFileHandle  ImFileOpen(const char*, const char*)                    { return NULL; }
-static inline bool          ImFileClose(ImFileHandle)                               { return false; }
-static inline ImU64         ImFileGetSize(ImFileHandle)                             { return (ImU64)-1; }
-static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle)           { return 0; }
-static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFileHandle)    { return 0; }
-#endif
-
-#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
-typedef FILE* ImFileHandle;
-IMGUI_API ImFileHandle      ImFileOpen(const char* filename, const char* mode);
-IMGUI_API bool              ImFileClose(ImFileHandle file);
-IMGUI_API ImU64             ImFileGetSize(ImFileHandle file);
-IMGUI_API ImU64             ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file);
-IMGUI_API ImU64             ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file);
-#else
-#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions
-#endif
-IMGUI_API void*             ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0);
-
-// Helpers: Maths
-// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
-#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
-#define ImFabs(X)           fabsf(X)
-#define ImSqrt(X)           sqrtf(X)
-#define ImFmod(X, Y)        fmodf((X), (Y))
-#define ImCos(X)            cosf(X)
-#define ImSin(X)            sinf(X)
-#define ImAcos(X)           acosf(X)
-#define ImAtan2(Y, X)       atan2f((Y), (X))
-#define ImAtof(STR)         atof(STR)
-#define ImFloorStd(X)       floorf(X)           // We already uses our own ImFloor() { return (float)(int)v } internally so the standard one wrapper is named differently (it's used by e.g. stb_truetype)
-#define ImCeil(X)           ceilf(X)
-static inline float  ImPow(float x, float y)    { return powf(x, y); }          // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
-static inline double ImPow(double x, double y)  { return pow(x, y); }
-#endif
-// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
-// (Exceptionally using templates here but we could also redefine them for those types)
-template<typename T> static inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ? lhs : rhs; }
-template<typename T> static inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ? lhs : rhs; }
-template<typename T> static inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? mn : (v > mx) ? mx : v; }
-template<typename T> static inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b - a) * t); }
-template<typename T> static inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; b = tmp; }
-template<typename T> static inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
-template<typename T> static inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
-// - Misc maths helpers
-static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
-static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
-static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx)      { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); }
-static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)          { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); }
-static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t)  { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); }
-static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)          { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); }
-static inline float  ImSaturate(float f)                                        { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
-static inline float  ImLengthSqr(const ImVec2& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y; }
-static inline float  ImLengthSqr(const ImVec4& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; }
-static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; }
-static inline float  ImFloor(float f)                                           { return (float)(int)(f); }
-static inline ImVec2 ImFloor(const ImVec2& v)                                   { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
-static inline int    ImModPositive(int a, int b)                                { return (a + b) % b; }
-static inline float  ImDot(const ImVec2& a, const ImVec2& b)                    { return a.x * b.x + a.y * b.y; }
-static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)        { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
-static inline float  ImLinearSweep(float current, float target, float speed)    { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
-static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)                { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
-
-// Helpers: Geometry
-IMGUI_API ImVec2     ImBezierCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t);                                         // Cubic Bezier
-IMGUI_API ImVec2     ImBezierClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments);       // For curves with explicit number of segments
-IMGUI_API ImVec2     ImBezierClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol
-IMGUI_API ImVec2     ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
-IMGUI_API bool       ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
-IMGUI_API ImVec2     ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
-IMGUI_API void       ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
-inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; }
-IMGUI_API ImGuiDir   ImGetDirQuadrantFromDelta(float dx, float dy);
-
-// Helpers: Bit arrays
-inline bool          ImBitArrayTestBit(const ImU32* arr, int n)         { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; }
-inline void          ImBitArrayClearBit(ImU32* arr, int n)              { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; }
-inline void          ImBitArraySetBit(ImU32* arr, int n)                { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; }
-inline void          ImBitArraySetBitRange(ImU32* arr, int n, int n2)
-{
-    while (n <= n2)
-    {
-        int a_mod = (n & 31);
-        int b_mod = ((n2 >= n + 31) ? 31 : (n2 & 31)) + 1;
-        ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1);
-        arr[n >> 5] |= mask;
-        n = (n + 32) & ~31;
-    }
-}
-
-// Helper: ImBitArray (wrapper over ImBitArray functions)
-// Store 1-bit per value. NOT CLEARED by constructor.
-template<int BITCOUNT>
-struct IMGUI_API ImBitArray
-{
-    ImU32           Storage[(BITCOUNT + 31) >> 5];
-    ImBitArray()                                { }
-    void            ClearBits()                 { memset(Storage, 0, sizeof(Storage)); }
-    bool            TestBit(int n) const        { IM_ASSERT(n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
-    void            SetBit(int n)               { IM_ASSERT(n < BITCOUNT); ImBitArraySetBit(Storage, n); }
-    void            ClearBit(int n)             { IM_ASSERT(n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
-    void            SetBitRange(int n1, int n2) { ImBitArraySetBitRange(Storage, n1, n2); }
-};
-
-// Helper: ImBitVector
-// Store 1-bit per value.
-struct IMGUI_API ImBitVector
-{
-    ImVector<ImU32> Storage;
-    void            Create(int sz)              { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
-    void            Clear()                     { Storage.clear(); }
-    bool            TestBit(int n) const        { IM_ASSERT(n < (Storage.Size << 5)); return ImBitArrayTestBit(Storage.Data, n); }
-    void            SetBit(int n)               { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); }
-    void            ClearBit(int n)             { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); }
-};
-
-// Helper: ImSpan<>
-// Pointing to a span of data we don't own.
-template<typename T>
-struct ImSpan
-{
-    T*                  Data;
-    T*                  DataEnd;
-
-    // Constructors, destructor
-    inline ImSpan()                                 { Data = DataEnd = NULL; }
-    inline ImSpan(T* data, int size)                { Data = data; DataEnd = data + size; }
-    inline ImSpan(T* data, T* data_end)             { Data = data; DataEnd = data_end; }
-
-    inline void         set(T* data, int size)      { Data = data; DataEnd = data + size; }
-    inline void         set(T* data, T* data_end)   { Data = data; DataEnd = data_end; }
-    inline int          size() const                { return (int)(ptrdiff_t)(DataEnd - Data); }
-    inline T&           operator[](int i)           { T* p = Data + i; IM_ASSERT(p < DataEnd); return *p; }
-    inline const T&     operator[](int i) const     { const T* p = Data + i; IM_ASSERT(p < DataEnd); return *p; }
-
-    inline T*           begin()                     { return Data; }
-    inline const T*     begin() const               { return Data; }
-    inline T*           end()                       { return DataEnd; }
-    inline const T*     end() const                 { return DataEnd; }
-
-    // Utilities
-    inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; }
-};
-
-// Helper: ImSpanAllocator<>
-// Facilitate storing multiple chunks into a single large block (the "arena")
-template<int CHUNKS>
-struct ImSpanAllocator
-{
-    char*   BasePtr;
-    int     TotalSize;
-    int     CurrSpan;
-    int     Offsets[CHUNKS];
-
-    ImSpanAllocator()                               { memset(this, 0, sizeof(*this)); }
-    inline void  ReserveBytes(int n, size_t sz)     { IM_ASSERT(n == CurrSpan && n < CHUNKS); Offsets[CurrSpan++] = TotalSize; TotalSize += (int)sz; }
-    inline int   GetArenaSizeInBytes()              { return TotalSize; }
-    inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_ptr; }
-    inline void* GetSpanPtrBegin(int n)             { IM_ASSERT(n >= 0 && n < CHUNKS && CurrSpan == CHUNKS); return (void*)(BasePtr + Offsets[n]); }
-    inline void* GetSpanPtrEnd(int n)               { IM_ASSERT(n >= 0 && n < CHUNKS && CurrSpan == CHUNKS); return (n + 1 < CHUNKS) ? BasePtr + Offsets[n + 1] : (void*)(BasePtr + TotalSize); }
-    template<typename T> 
-    inline void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); }
-};
-
-// Helper: ImPool<>
-// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
-// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
-typedef int ImPoolIdx;
-template<typename T>
-struct IMGUI_API ImPool
-{
-    ImVector<T>     Buf;        // Contiguous data
-    ImGuiStorage    Map;        // ID->Index
-    ImPoolIdx       FreeIdx;    // Next free idx to use
-
-    ImPool()    { FreeIdx = 0; }
-    ~ImPool()   { Clear(); }
-    T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
-    T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
-    ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
-    T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
-    bool        Contains(const T* p) const          { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
-    void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = 0; }
-    T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); return &Buf[idx]; }
-    void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p)); }
-    void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); }
-    void        Reserve(int capacity)               { Buf.reserve(capacity); Map.Data.reserve(capacity); }
-    int         GetSize() const                     { return Buf.Size; }
-};
-
-// Helper: ImChunkStream<>
-// Build and iterate a contiguous stream of variable-sized structures.
-// This is used by Settings to store persistent data while reducing allocation count.
-// We store the chunk size first, and align the final size on 4 bytes boundaries (this what the '(X + 3) & ~3' statement is for)
-// The tedious/zealous amount of casting is to avoid -Wcast-align warnings.
-template<typename T>
-struct IMGUI_API ImChunkStream
-{
-    ImVector<char>  Buf;
-
-    void    clear()                     { Buf.clear(); }
-    bool    empty() const               { return Buf.Size == 0; }
-    int     size() const                { return Buf.Size; }
-    T*      alloc_chunk(size_t sz)      { size_t HDR_SZ = 4; sz = ((HDR_SZ + sz) + 3u) & ~3u; int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); }
-    T*      begin()                     { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); }
-    T*      next_chunk(T* p)            { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; }
-    int     chunk_size(const T* p)      { return ((const int*)p)[-1]; }
-    T*      end()                       { return (T*)(void*)(Buf.Data + Buf.Size); }
-    int     offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; }
-    T*      ptr_from_offset(int off)    { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); }
-};
-
-//-----------------------------------------------------------------------------
-// Misc data structures
-//-----------------------------------------------------------------------------
-
-enum ImGuiButtonFlags_
-{
-    ImGuiButtonFlags_None                   = 0,
-    ImGuiButtonFlags_Repeat                 = 1 << 0,   // hold to repeat
-    ImGuiButtonFlags_PressedOnClick         = 1 << 1,   // return true on click (mouse down event)
-    ImGuiButtonFlags_PressedOnClickRelease  = 1 << 2,   // [Default] return true on click + release on same item <-- this is what the majority of Button are using
-    ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 3, // return true on click + release even if the release event is not done while hovering the item
-    ImGuiButtonFlags_PressedOnRelease       = 1 << 4,   // return true on release (default requires click+release)
-    ImGuiButtonFlags_PressedOnDoubleClick   = 1 << 5,   // return true on double-click (default requires click+release)
-    ImGuiButtonFlags_PressedOnDragDropHold  = 1 << 6,   // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers)
-    ImGuiButtonFlags_FlattenChildren        = 1 << 7,   // allow interactions even if a child window is overlapping
-    ImGuiButtonFlags_AllowItemOverlap       = 1 << 8,   // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
-    ImGuiButtonFlags_DontClosePopups        = 1 << 9,   // disable automatically closing parent popup on press // [UNUSED]
-    ImGuiButtonFlags_Disabled               = 1 << 10,  // disable interactions
-    ImGuiButtonFlags_AlignTextBaseLine      = 1 << 11,  // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
-    ImGuiButtonFlags_NoKeyModifiers         = 1 << 12,  // disable mouse interaction if a key modifier is held
-    ImGuiButtonFlags_NoHoldingActiveId      = 1 << 13,  // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
-    ImGuiButtonFlags_NoNavFocus             = 1 << 14,  // don't override navigation focus when activated
-    ImGuiButtonFlags_NoHoveredOnFocus       = 1 << 15,  // don't report as hovered when nav focus is on this item
-    ImGuiButtonFlags_MouseButtonLeft        = 1 << 16,  // [Default] react on left mouse button
-    ImGuiButtonFlags_MouseButtonRight       = 1 << 17,  // react on right mouse button
-    ImGuiButtonFlags_MouseButtonMiddle      = 1 << 18,  // react on center mouse button
-
-    ImGuiButtonFlags_MouseButtonMask_       = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle,
-    ImGuiButtonFlags_MouseButtonShift_      = 16,
-    ImGuiButtonFlags_MouseButtonDefault_    = ImGuiButtonFlags_MouseButtonLeft,
-    ImGuiButtonFlags_PressedOnMask_         = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
-    ImGuiButtonFlags_PressedOnDefault_      = ImGuiButtonFlags_PressedOnClickRelease
-};
-
-enum ImGuiSliderFlags_
-{
-    ImGuiSliderFlags_None                   = 0,
-    ImGuiSliderFlags_Vertical               = 1 << 0
-};
-
-enum ImGuiDragFlags_
-{
-    ImGuiDragFlags_None                     = 0,
-    ImGuiDragFlags_Vertical                 = 1 << 0
-};
-
-enum ImGuiColumnsFlags_
-{
-    // Default: 0
-    ImGuiColumnsFlags_None                  = 0,
-    ImGuiColumnsFlags_NoBorder              = 1 << 0,   // Disable column dividers
-    ImGuiColumnsFlags_NoResize              = 1 << 1,   // Disable resizing columns when clicking on the dividers
-    ImGuiColumnsFlags_NoPreserveWidths      = 1 << 2,   // Disable column width preservation when adjusting columns
-    ImGuiColumnsFlags_NoForceWithinWindow   = 1 << 3,   // Disable forcing columns to fit within window
-    ImGuiColumnsFlags_GrowParentContentsSize= 1 << 4    // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
-};
-
-// Extend ImGuiSelectableFlags_
-enum ImGuiSelectableFlagsPrivate_
-{
-    // NB: need to be in sync with last value of ImGuiSelectableFlags_
-    ImGuiSelectableFlags_NoHoldingActiveID  = 1 << 20,
-    ImGuiSelectableFlags_SelectOnClick      = 1 << 21,  // Override button behavior to react on Click (default is Click+Release)
-    ImGuiSelectableFlags_SelectOnRelease    = 1 << 22,  // Override button behavior to react on Release (default is Click+Release)
-    ImGuiSelectableFlags_SpanAvailWidth     = 1 << 23,  // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus)
-    ImGuiSelectableFlags_DrawHoveredWhenHeld= 1 << 24,  // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
-    ImGuiSelectableFlags_SetNavIdOnHover    = 1 << 25
-};
-
-// Extend ImGuiTreeNodeFlags_
-enum ImGuiTreeNodeFlagsPrivate_
-{
-    ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20
-};
-
-enum ImGuiSeparatorFlags_
-{
-    ImGuiSeparatorFlags_None                = 0,
-    ImGuiSeparatorFlags_Horizontal          = 1 << 0,   // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
-    ImGuiSeparatorFlags_Vertical            = 1 << 1,
-    ImGuiSeparatorFlags_SpanAllColumns      = 1 << 2
-};
-
-// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
-// This is going to be exposed in imgui.h when stabilized enough.
-enum ImGuiItemFlags_
-{
-    ImGuiItemFlags_None                     = 0,
-    ImGuiItemFlags_NoTabStop                = 1 << 0,  // false
-    ImGuiItemFlags_ButtonRepeat             = 1 << 1,  // false    // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
-    ImGuiItemFlags_Disabled                 = 1 << 2,  // false    // [BETA] Disable interactions but doesn't affect visuals yet. See github.com/ocornut/imgui/issues/211
-    ImGuiItemFlags_NoNav                    = 1 << 3,  // false
-    ImGuiItemFlags_NoNavDefaultFocus        = 1 << 4,  // false
-    ImGuiItemFlags_SelectableDontClosePopup = 1 << 5,  // false    // MenuItem/Selectable() automatically closes current Popup window
-    ImGuiItemFlags_MixedValue               = 1 << 6,  // false    // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
-    ImGuiItemFlags_Default_                 = 0
-};
-
-// Storage for LastItem data
-enum ImGuiItemStatusFlags_
-{
-    ImGuiItemStatusFlags_None               = 0,
-    ImGuiItemStatusFlags_HoveredRect        = 1 << 0,
-    ImGuiItemStatusFlags_HasDisplayRect     = 1 << 1,
-    ImGuiItemStatusFlags_Edited             = 1 << 2,   // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
-    ImGuiItemStatusFlags_ToggledSelection   = 1 << 3,   // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected" because reporting the change allows us to handle clipping with less issues.
-    ImGuiItemStatusFlags_ToggledOpen        = 1 << 4,   // Set when TreeNode() reports toggling their open state.
-    ImGuiItemStatusFlags_HasDeactivated     = 1 << 5,   // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
-    ImGuiItemStatusFlags_Deactivated        = 1 << 6    // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
-
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-    , // [imgui_tests only]
-    ImGuiItemStatusFlags_Openable           = 1 << 10,  //
-    ImGuiItemStatusFlags_Opened             = 1 << 11,  //
-    ImGuiItemStatusFlags_Checkable          = 1 << 12,  //
-    ImGuiItemStatusFlags_Checked            = 1 << 13   //
-#endif
-};
-
-enum ImGuiTextFlags_
-{
-    ImGuiTextFlags_None = 0,
-    ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
-};
-
-enum ImGuiTooltipFlags_
-{
-    ImGuiTooltipFlags_None = 0,
-    ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0      // Override will clear/ignore previously submitted tooltip (defaults to append)
-};
-
-// FIXME: this is in development, not exposed/functional as a generic feature yet.
-// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
-enum ImGuiLayoutType_
-{
-    ImGuiLayoutType_Horizontal = 0,
-    ImGuiLayoutType_Vertical = 1
-};
-
-enum ImGuiLogType
-{
-    ImGuiLogType_None = 0,
-    ImGuiLogType_TTY,
-    ImGuiLogType_File,
-    ImGuiLogType_Buffer,
-    ImGuiLogType_Clipboard
-};
-
-// X/Y enums are fixed to 0/1 so they may be used to index ImVec2
-enum ImGuiAxis
-{
-    ImGuiAxis_None = -1,
-    ImGuiAxis_X = 0,
-    ImGuiAxis_Y = 1
-};
-
-enum ImGuiPlotType
-{
-    ImGuiPlotType_Lines,
-    ImGuiPlotType_Histogram
-};
-
-enum ImGuiInputSource
-{
-    ImGuiInputSource_None = 0,
-    ImGuiInputSource_Mouse,
-    ImGuiInputSource_Nav,
-    ImGuiInputSource_NavKeyboard,   // Only used occasionally for storage, not tested/handled by most code
-    ImGuiInputSource_NavGamepad,    // "
-    ImGuiInputSource_COUNT
-};
-
-// FIXME-NAV: Clarify/expose various repeat delay/rate
-enum ImGuiInputReadMode
-{
-    ImGuiInputReadMode_Down,
-    ImGuiInputReadMode_Pressed,
-    ImGuiInputReadMode_Released,
-    ImGuiInputReadMode_Repeat,
-    ImGuiInputReadMode_RepeatSlow,
-    ImGuiInputReadMode_RepeatFast
-};
-
-enum ImGuiNavHighlightFlags_
-{
-    ImGuiNavHighlightFlags_None         = 0,
-    ImGuiNavHighlightFlags_TypeDefault  = 1 << 0,
-    ImGuiNavHighlightFlags_TypeThin     = 1 << 1,
-    ImGuiNavHighlightFlags_AlwaysDraw   = 1 << 2,       // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
-    ImGuiNavHighlightFlags_NoRounding   = 1 << 3
-};
-
-enum ImGuiNavDirSourceFlags_
-{
-    ImGuiNavDirSourceFlags_None         = 0,
-    ImGuiNavDirSourceFlags_Keyboard     = 1 << 0,
-    ImGuiNavDirSourceFlags_PadDPad      = 1 << 1,
-    ImGuiNavDirSourceFlags_PadLStick    = 1 << 2
-};
-
-enum ImGuiNavMoveFlags_
-{
-    ImGuiNavMoveFlags_None                  = 0,
-    ImGuiNavMoveFlags_LoopX                 = 1 << 0,   // On failed request, restart from opposite side
-    ImGuiNavMoveFlags_LoopY                 = 1 << 1,
-    ImGuiNavMoveFlags_WrapX                 = 1 << 2,   // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
-    ImGuiNavMoveFlags_WrapY                 = 1 << 3,   // This is not super useful for provided for completeness
-    ImGuiNavMoveFlags_AllowCurrentNavId     = 1 << 4,   // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place)
-    ImGuiNavMoveFlags_AlsoScoreVisibleSet   = 1 << 5,   // Store alternate result in NavMoveResultLocalVisibleSet that only comprise elements that are already fully visible.
-    ImGuiNavMoveFlags_ScrollToEdge          = 1 << 6
-};
-
-enum ImGuiNavForward
-{
-    ImGuiNavForward_None,
-    ImGuiNavForward_ForwardQueued,
-    ImGuiNavForward_ForwardActive
-};
-
-enum ImGuiNavLayer
-{
-    ImGuiNavLayer_Main  = 0,    // Main scrolling layer
-    ImGuiNavLayer_Menu  = 1,    // Menu layer (access with Alt/ImGuiNavInput_Menu)
-    ImGuiNavLayer_COUNT
-};
-
-enum ImGuiPopupPositionPolicy
-{
-    ImGuiPopupPositionPolicy_Default,
-    ImGuiPopupPositionPolicy_ComboBox
-};
-
-// 1D vector (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
-struct ImVec1
-{
-    float   x;
-    ImVec1()         { x = 0.0f; }
-    ImVec1(float _x) { x = _x; }
-};
-
-// 2D vector (half-size integer)
-struct ImVec2ih
-{
-    short   x, y;
-    ImVec2ih()                           { x = y = 0; }
-    ImVec2ih(short _x, short _y)         { x = _x; y = _y; }
-    explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs.y; }
-};
-
-// 2D axis aligned bounding-box
-// NB: we can't rely on ImVec2 math operators being available here
-struct IMGUI_API ImRect
-{
-    ImVec2      Min;    // Upper-left
-    ImVec2      Max;    // Lower-right
-
-    ImRect()                                        : Min(0.0f, 0.0f), Max(0.0f, 0.0f)              {}
-    ImRect(const ImVec2& min, const ImVec2& max)    : Min(min), Max(max)                            {}
-    ImRect(const ImVec4& v)                         : Min(v.x, v.y), Max(v.z, v.w)                  {}
-    ImRect(float x1, float y1, float x2, float y2)  : Min(x1, y1), Max(x2, y2)                      {}
-
-    ImVec2      GetCenter() const                   { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
-    ImVec2      GetSize() const                     { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
-    float       GetWidth() const                    { return Max.x - Min.x; }
-    float       GetHeight() const                   { return Max.y - Min.y; }
-    ImVec2      GetTL() const                       { return Min; }                   // Top-left
-    ImVec2      GetTR() const                       { return ImVec2(Max.x, Min.y); }  // Top-right
-    ImVec2      GetBL() const                       { return ImVec2(Min.x, Max.y); }  // Bottom-left
-    ImVec2      GetBR() const                       { return Max; }                   // Bottom-right
-    bool        Contains(const ImVec2& p) const     { return p.x     >= Min.x && p.y     >= Min.y && p.x     <  Max.x && p.y     <  Max.y; }
-    bool        Contains(const ImRect& r) const     { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; }
-    bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max.y && r.Max.y >  Min.y && r.Min.x <  Max.x && r.Max.x >  Min.x; }
-    void        Add(const ImVec2& p)                { if (Min.x > p.x)     Min.x = p.x;     if (Min.y > p.y)     Min.y = p.y;     if (Max.x < p.x)     Max.x = p.x;     if (Max.y < p.y)     Max.y = p.y; }
-    void        Add(const ImRect& r)                { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; }
-    void        Expand(const float amount)          { Min.x -= amount;   Min.y -= amount;   Max.x += amount;   Max.y += amount; }
-    void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
-    void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; }
-    void        TranslateX(float dx)                { Min.x += dx; Max.x += dx; }
-    void        TranslateY(float dy)                { Min.y += dy; Max.y += dy; }
-    void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); }                   // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
-    void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
-    void        Floor()                             { Min.x = IM_FLOOR(Min.x); Min.y = IM_FLOOR(Min.y); Max.x = IM_FLOOR(Max.x); Max.y = IM_FLOOR(Max.y); }
-    bool        IsInverted() const                  { return Min.x > Max.x || Min.y > Max.y; }
-    ImVec4      ToVec4() const                      { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
-};
-
-// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
-struct ImGuiDataTypeInfo
-{
-    size_t      Size;           // Size in byte
-    const char* PrintFmt;       // Default printf format for the type
-    const char* ScanFmt;        // Default scanf format for the type
-};
-
-// Stacked color modifier, backup of modified data so we can restore it
-struct ImGuiColorMod
-{
-    ImGuiCol    Col;
-    ImVec4      BackupValue;
-};
-
-// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
-struct ImGuiStyleMod
-{
-    ImGuiStyleVar   VarIdx;
-    union           { int BackupInt[2]; float BackupFloat[2]; };
-    ImGuiStyleMod(ImGuiStyleVar idx, int v)     { VarIdx = idx; BackupInt[0] = v; }
-    ImGuiStyleMod(ImGuiStyleVar idx, float v)   { VarIdx = idx; BackupFloat[0] = v; }
-    ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v)  { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
-};
-
-// Stacked storage data for BeginGroup()/EndGroup()
-struct ImGuiGroupData
-{
-    ImVec2      BackupCursorPos;
-    ImVec2      BackupCursorMaxPos;
-    ImVec1      BackupIndent;
-    ImVec1      BackupGroupOffset;
-    ImVec2      BackupCurrLineSize;
-    float       BackupCurrLineTextBaseOffset;
-    ImGuiID     BackupActiveIdIsAlive;
-    bool        BackupActiveIdPreviousFrameIsAlive;
-    bool        EmitItem;
-};
-
-// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
-struct IMGUI_API ImGuiMenuColumns
-{
-    float       Spacing;
-    float       Width, NextWidth;
-    float       Pos[3], NextWidths[3];
-
-    ImGuiMenuColumns();
-    void        Update(int count, float spacing, bool clear);
-    float       DeclColumns(float w0, float w1, float w2);
-    float       CalcExtraSpace(float avail_w) const;
-};
-
-// Internal state of the currently focused/edited text input box
-// For a given item ID, access with ImGui::GetInputTextState()
-struct IMGUI_API ImGuiInputTextState
-{
-    ImGuiID                 ID;                     // widget id owning the text state
-    int                     CurLenW, CurLenA;       // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not.
-    ImVector<ImWchar>       TextW;                  // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer.
-    ImVector<char>          TextA;                  // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
-    ImVector<char>          InitialTextA;           // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
-    bool                    TextAIsValid;           // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
-    int                     BufCapacityA;           // end-user buffer capacity
-    float                   ScrollX;                // horizontal scrolling/offset
-    ImStb::STB_TexteditState Stb;                   // state for stb_textedit.h
-    float                   CursorAnim;             // timer for cursor blink, reset on every user action so the cursor reappears immediately
-    bool                    CursorFollow;           // set when we want scrolling to follow the current cursor position (not always!)
-    bool                    SelectedAllMouseLock;   // after a double-click to select all, we ignore further mouse drags to update selection
-    ImGuiInputTextFlags     UserFlags;              // Temporarily set while we call user's callback
-    ImGuiInputTextCallback  UserCallback;           // "
-    void*                   UserCallbackData;       // "
-
-    ImGuiInputTextState()                   { memset(this, 0, sizeof(*this)); }
-    void        ClearText()                 { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
-    void        ClearFreeMemory()           { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
-    int         GetUndoAvailCount() const   { return Stb.undostate.undo_point; }
-    int         GetRedoAvailCount() const   { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
-    void        OnKeyPressed(int key);      // Cannot be inline because we call in code in stb_textedit.h implementation
-
-    // Cursor & Selection
-    void        CursorAnimReset()           { CursorAnim = -0.30f; }                                   // After a user-input the cursor stays on for a while without blinking
-    void        CursorClamp()               { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
-    bool        HasSelection() const        { return Stb.select_start != Stb.select_end; }
-    void        ClearSelection()            { Stb.select_start = Stb.select_end = Stb.cursor; }
-    void        SelectAll()                 { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
-};
-
-// Windows data saved in imgui.ini file
-// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily.
-// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure)
-struct ImGuiWindowSettings
-{
-    ImGuiID     ID;
-    ImVec2ih    Pos;
-    ImVec2ih    Size;
-    bool        Collapsed;
-
-    ImGuiWindowSettings()       { ID = 0; Pos = Size = ImVec2ih(0, 0); Collapsed = false; }
-    char* GetName()             { return (char*)(this + 1); }
-};
-
-struct ImGuiSettingsHandler
-{
-    const char* TypeName;       // Short description stored in .ini file. Disallowed characters: '[' ']'
-    ImGuiID     TypeHash;       // == ImHashStr(TypeName)
-    void*       (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name);              // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
-    void        (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
-    void        (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf);      // Write: Output every entries into 'out_buf'
-    void*       UserData;
-
-    ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
-};
-
-// Storage for current popup stack
-struct ImGuiPopupData
-{
-    ImGuiID             PopupId;        // Set on OpenPopup()
-    ImGuiWindow*        Window;         // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
-    ImGuiWindow*        SourceWindow;   // Set on OpenPopup() copy of NavWindow at the time of opening the popup
-    int                 OpenFrameCount; // Set on OpenPopup()
-    ImGuiID             OpenParentId;   // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
-    ImVec2              OpenPopupPos;   // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
-    ImVec2              OpenMousePos;   // Set on OpenPopup(), copy of mouse position at the time of opening popup
-
-    ImGuiPopupData() { PopupId = 0; Window = SourceWindow = NULL; OpenFrameCount = -1; OpenParentId = 0; }
-};
-
-struct ImGuiColumnData
-{
-    float               OffsetNorm;         // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
-    float               OffsetNormBeforeResize;
-    ImGuiColumnsFlags   Flags;              // Not exposed
-    ImRect              ClipRect;
-
-    ImGuiColumnData()   { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = ImGuiColumnsFlags_None; }
-};
-
-struct ImGuiColumns
-{
-    ImGuiID             ID;
-    ImGuiColumnsFlags   Flags;
-    bool                IsFirstFrame;
-    bool                IsBeingResized;
-    int                 Current;
-    int                 Count;
-    float               OffMinX, OffMaxX;       // Offsets from HostWorkRect.Min.x
-    float               LineMinY, LineMaxY;
-    float               HostCursorPosY;         // Backup of CursorPos at the time of BeginColumns()
-    float               HostCursorMaxPosX;      // Backup of CursorMaxPos at the time of BeginColumns()
-    ImRect              HostClipRect;           // Backup of ClipRect at the time of BeginColumns()
-    ImRect              HostWorkRect;           // Backup of WorkRect at the time of BeginColumns()
-    ImVector<ImGuiColumnData> Columns;
-    ImDrawListSplitter  Splitter;
-
-    ImGuiColumns()      { Clear(); }
-    void Clear()
-    {
-        ID = 0;
-        Flags = ImGuiColumnsFlags_None;
-        IsFirstFrame = false;
-        IsBeingResized = false;
-        Current = 0;
-        Count = 1;
-        OffMinX = OffMaxX = 0.0f;
-        LineMinY = LineMaxY = 0.0f;
-        HostCursorPosY = 0.0f;
-        HostCursorMaxPosX = 0.0f;
-        Columns.clear();
-    }
-};
-
-// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
-#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN                     12
-#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX                     512
-#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR)    ImClamp((int)((IM_PI * 2.0f) / ImAcos(((_RAD) - (_MAXERROR)) / (_RAD))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
-
-// ImDrawList: You may set this to higher values (e.g. 2 or 3) to increase tessellation of fast rounded corners path.
-#ifndef IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER
-#define IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER             1
-#endif
-
-// Data shared between all ImDrawList instances
-// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
-struct IMGUI_API ImDrawListSharedData
-{
-    ImVec2          TexUvWhitePixel;            // UV of white pixel in the atlas
-    ImFont*         Font;                       // Current/default font (optional, for simplified AddText overload)
-    float           FontSize;                   // Current/default font size (optional, for simplified AddText overload)
-    float           CurveTessellationTol;       // Tessellation tolerance when using PathBezierCurveTo()
-    float           CircleSegmentMaxError;      // Number of circle segments to use per pixel of radius for AddCircle() etc
-    ImVec4          ClipRectFullscreen;         // Value for PushClipRectFullscreen()
-    ImDrawListFlags InitialFlags;               // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
-
-    // [Internal] Lookup tables
-    ImVec2          ArcFastVtx[12 * IM_DRAWLIST_ARCFAST_TESSELLATION_MULTIPLIER];  // FIXME: Bake rounded corners fill/borders in atlas
-    ImU8            CircleSegmentCounts[64];    // Precomputed segment count for given radius (array index + 1) before we calculate it dynamically (to avoid calculation overhead)
-
-    ImDrawListSharedData();
-    void SetCircleSegmentMaxError(float max_error);
-};
-
-struct ImDrawDataBuilder
-{
-    ImVector<ImDrawList*>   Layers[2];           // Global layers for: regular, tooltip
-
-    void Clear()            { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].resize(0); }
-    void ClearFreeMemory()  { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].clear(); }
-    IMGUI_API void FlattenIntoSingleLayer();
-};
-
-struct ImGuiNavMoveResult
-{
-    ImGuiWindow*    Window;             // Best candidate window
-    ImGuiID         ID;                 // Best candidate ID
-    ImGuiID         FocusScopeId;       // Best candidate focus scope ID
-    float           DistBox;            // Best candidate box distance to current NavId
-    float           DistCenter;         // Best candidate center distance to current NavId
-    float           DistAxial;
-    ImRect          RectRel;            // Best candidate bounding box in window relative space
-
-    ImGuiNavMoveResult() { Clear(); }
-    void Clear()         { Window = NULL; ID = FocusScopeId = 0; DistBox = DistCenter = DistAxial = FLT_MAX; RectRel = ImRect(); }
-};
-
-enum ImGuiNextWindowDataFlags_
-{
-    ImGuiNextWindowDataFlags_None               = 0,
-    ImGuiNextWindowDataFlags_HasPos             = 1 << 0,
-    ImGuiNextWindowDataFlags_HasSize            = 1 << 1,
-    ImGuiNextWindowDataFlags_HasContentSize     = 1 << 2,
-    ImGuiNextWindowDataFlags_HasCollapsed       = 1 << 3,
-    ImGuiNextWindowDataFlags_HasSizeConstraint  = 1 << 4,
-    ImGuiNextWindowDataFlags_HasFocus           = 1 << 5,
-    ImGuiNextWindowDataFlags_HasBgAlpha         = 1 << 6
-};
-
-// Storage for SetNexWindow** functions
-struct ImGuiNextWindowData
-{
-    ImGuiNextWindowDataFlags    Flags;
-    ImGuiCond                   PosCond;
-    ImGuiCond                   SizeCond;
-    ImGuiCond                   CollapsedCond;
-    ImVec2                      PosVal;
-    ImVec2                      PosPivotVal;
-    ImVec2                      SizeVal;
-    ImVec2                      ContentSizeVal;
-    bool                        CollapsedVal;
-    ImRect                      SizeConstraintRect;
-    ImGuiSizeCallback           SizeCallback;
-    void*                       SizeCallbackUserData;
-    float                       BgAlphaVal;             // Override background alpha
-    ImVec2                      MenuBarOffsetMinVal;    // *Always on* This is not exposed publicly, so we don't clear it.
-
-    ImGuiNextWindowData()       { memset(this, 0, sizeof(*this)); }
-    inline void ClearFlags()    { Flags = ImGuiNextWindowDataFlags_None; }
-};
-
-enum ImGuiNextItemDataFlags_
-{
-    ImGuiNextItemDataFlags_None     = 0,
-    ImGuiNextItemDataFlags_HasWidth = 1 << 0,
-    ImGuiNextItemDataFlags_HasOpen  = 1 << 1
-};
-
-struct ImGuiNextItemData
-{
-    ImGuiNextItemDataFlags      Flags;
-    float                       Width;          // Set by SetNextItemWidth()
-    ImGuiID                     FocusScopeId;   // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging)
-    ImGuiCond                   OpenCond;
-    bool                        OpenVal;        // Set by SetNextItemOpen()
-
-    ImGuiNextItemData()         { memset(this, 0, sizeof(*this)); }
-    inline void ClearFlags()    { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()!
-};
-
-//-----------------------------------------------------------------------------
-// Tabs
-//-----------------------------------------------------------------------------
-
-struct ImGuiShrinkWidthItem
-{
-    int             Index;
-    float           Width;
-};
-
-struct ImGuiPtrOrIndex
-{
-    void*           Ptr;                // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
-    int             Index;              // Usually index in a main pool.
-
-    ImGuiPtrOrIndex(void* ptr)          { Ptr = ptr; Index = -1; }
-    ImGuiPtrOrIndex(int index)          { Ptr = NULL; Index = index; }
-};
-
-//-----------------------------------------------------------------------------
-// Main Dear ImGui context
-//-----------------------------------------------------------------------------
-
-struct ImGuiContext
-{
-    bool                    Initialized;
-    bool                    FontAtlasOwnedByContext;            // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
-    ImGuiIO                 IO;
-    ImGuiStyle              Style;
-    ImFont*                 Font;                               // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
-    float                   FontSize;                           // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
-    float                   FontBaseSize;                       // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
-    ImDrawListSharedData    DrawListSharedData;
-    double                  Time;
-    int                     FrameCount;
-    int                     FrameCountEnded;
-    int                     FrameCountRendered;
-    bool                    WithinFrameScope;                   // Set by NewFrame(), cleared by EndFrame()
-    bool                    WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
-    bool                    WithinEndChild;                     // Set within EndChild()
-
-    // Windows state
-    ImVector<ImGuiWindow*>  Windows;                            // Windows, sorted in display order, back to front
-    ImVector<ImGuiWindow*>  WindowsFocusOrder;                  // Windows, sorted in focus order, back to front. (FIXME: We could only store root windows here! Need to sort out the Docking equivalent which is RootWindowDockStop and is unfortunately a little more dynamic)
-    ImVector<ImGuiWindow*>  WindowsTempSortBuffer;              // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child
-    ImVector<ImGuiWindow*>  CurrentWindowStack;
-    ImGuiStorage            WindowsById;                        // Map window's ImGuiID to ImGuiWindow*
-    int                     WindowsActiveCount;                 // Number of unique windows submitted by frame
-    ImGuiWindow*            CurrentWindow;                      // Window being drawn into
-    ImGuiWindow*            HoveredWindow;                      // Will catch mouse inputs
-    ImGuiWindow*            HoveredRootWindow;                  // Will catch mouse inputs (for focus/move only)
-    ImGuiWindow*            MovingWindow;                       // Track the window we clicked on (in order to preserve focus). The actually window that is moved is generally MovingWindow->RootWindow.
-    ImGuiWindow*            WheelingWindow;                     // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window.
-    ImVec2                  WheelingWindowRefMousePos;
-    float                   WheelingWindowTimer;
-
-    // Item/widgets state and tracking information
-    ImGuiID                 HoveredId;                          // Hovered widget
-    bool                    HoveredIdAllowOverlap;
-    ImGuiID                 HoveredIdPreviousFrame;
-    float                   HoveredIdTimer;                     // Measure contiguous hovering time
-    float                   HoveredIdNotActiveTimer;            // Measure contiguous hovering time where the item has not been active
-    ImGuiID                 ActiveId;                           // Active widget
-    ImGuiID                 ActiveIdIsAlive;                    // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
-    float                   ActiveIdTimer;
-    bool                    ActiveIdIsJustActivated;            // Set at the time of activation for one frame
-    bool                    ActiveIdAllowOverlap;               // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
-    bool                    ActiveIdHasBeenPressedBefore;       // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch.
-    bool                    ActiveIdHasBeenEditedBefore;        // Was the value associated to the widget Edited over the course of the Active state.
-    bool                    ActiveIdHasBeenEditedThisFrame;
-    ImU32                   ActiveIdUsingNavDirMask;            // Active widget will want to read those directional navigation requests (e.g. can activate a button and move away from it)
-    ImU32                   ActiveIdUsingNavInputMask;          // Active widget will want to read those nav inputs.
-    ImU64                   ActiveIdUsingKeyInputMask;          // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
-    ImVec2                  ActiveIdClickOffset;                // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
-    ImGuiWindow*            ActiveIdWindow;
-    ImGuiInputSource        ActiveIdSource;                     // Activating with mouse or nav (gamepad/keyboard)
-    int                     ActiveIdMouseButton;
-    ImGuiID                 ActiveIdPreviousFrame;
-    bool                    ActiveIdPreviousFrameIsAlive;
-    bool                    ActiveIdPreviousFrameHasBeenEditedBefore;
-    ImGuiWindow*            ActiveIdPreviousFrameWindow;
-    ImGuiID                 LastActiveId;                       // Store the last non-zero ActiveId, useful for animation.
-    float                   LastActiveIdTimer;                  // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
-
-    // Next window/item data
-    ImGuiNextWindowData     NextWindowData;                     // Storage for SetNextWindow** functions
-    ImGuiNextItemData       NextItemData;                       // Storage for SetNextItem** functions
-
-    // Shared stacks
-    ImVector<ImGuiColorMod> ColorModifiers;                     // Stack for PushStyleColor()/PopStyleColor()
-    ImVector<ImGuiStyleMod> StyleModifiers;                     // Stack for PushStyleVar()/PopStyleVar()
-    ImVector<ImFont*>       FontStack;                          // Stack for PushFont()/PopFont()
-    ImVector<ImGuiPopupData>OpenPopupStack;                     // Which popups are open (persistent)
-    ImVector<ImGuiPopupData>BeginPopupStack;                    // Which level of BeginPopup() we are in (reset every frame)
-
-    // Gamepad/keyboard Navigation
-    ImGuiWindow*            NavWindow;                          // Focused window for navigation. Could be called 'FocusWindow'
-    ImGuiID                 NavId;                              // Focused item for navigation
-    ImGuiID                 NavFocusScopeId;
-    ImGuiID                 NavActivateId;                      // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem()
-    ImGuiID                 NavActivateDownId;                  // ~~ IsNavInputDown(ImGuiNavInput_Activate) ? NavId : 0
-    ImGuiID                 NavActivatePressedId;               // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0
-    ImGuiID                 NavInputId;                         // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0
-    ImGuiID                 NavJustTabbedId;                    // Just tabbed to this id.
-    ImGuiID                 NavJustMovedToId;                   // Just navigated to this id (result of a successfully MoveRequest).
-    ImGuiID                 NavJustMovedToFocusScopeId;         // Just navigated to this focus scope id (result of a successfully MoveRequest).
-    ImGuiID                 NavNextActivateId;                  // Set by ActivateItem(), queued until next frame.
-    ImGuiInputSource        NavInputSource;                     // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard.
-    ImRect                  NavScoringRectScreen;               // Rectangle used for scoring, in screen space. Based of window->DC.NavRefRectRel[], modified for directional navigation scoring.
-    int                     NavScoringCount;                    // Metrics for debugging
-    ImGuiNavLayer           NavLayer;                           // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
-    int                     NavIdTabCounter;                    // == NavWindow->DC.FocusIdxTabCounter at time of NavId processing
-    bool                    NavIdIsAlive;                       // Nav widget has been seen this frame ~~ NavRefRectRel is valid
-    bool                    NavMousePosDirty;                   // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
-    bool                    NavDisableHighlight;                // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover)
-    bool                    NavDisableMouseHover;               // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again.
-    bool                    NavAnyRequest;                      // ~~ NavMoveRequest || NavInitRequest
-    bool                    NavInitRequest;                     // Init request for appearing window to select first item
-    bool                    NavInitRequestFromMove;
-    ImGuiID                 NavInitResultId;
-    ImRect                  NavInitResultRectRel;
-    bool                    NavMoveFromClampedRefRect;          // Set by manual scrolling, if we scroll to a point where NavId isn't visible we reset navigation from visible items
-    bool                    NavMoveRequest;                     // Move request for this frame
-    ImGuiNavMoveFlags       NavMoveRequestFlags;
-    ImGuiNavForward         NavMoveRequestForward;              // None / ForwardQueued / ForwardActive (this is used to navigate sibling parent menus from a child menu)
-    ImGuiDir                NavMoveDir, NavMoveDirLast;         // Direction of the move request (left/right/up/down), direction of the previous move request
-    ImGuiDir                NavMoveClipDir;                     // FIXME-NAV: Describe the purpose of this better. Might want to rename?
-    ImGuiNavMoveResult      NavMoveResultLocal;                 // Best move request candidate within NavWindow
-    ImGuiNavMoveResult      NavMoveResultLocalVisibleSet;       // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
-    ImGuiNavMoveResult      NavMoveResultOther;                 // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
-
-    // Navigation: Windowing (CTRL+TAB, holding Menu button + directional pads to move/resize)
-    ImGuiWindow*            NavWindowingTarget;                 // When selecting a window (holding Menu+FocusPrev/Next, or equivalent of CTRL-TAB) this window is temporarily displayed top-most.
-    ImGuiWindow*            NavWindowingTargetAnim;             // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f
-    ImGuiWindow*            NavWindowingList;
-    float                   NavWindowingTimer;
-    float                   NavWindowingHighlightAlpha;
-    bool                    NavWindowingToggleLayer;
-
-    // Legacy Focus/Tabbing system (older than Nav, active even if Nav is disabled, misnamed. FIXME-NAV: This needs a redesign!)
-    ImGuiWindow*            FocusRequestCurrWindow;             //
-    ImGuiWindow*            FocusRequestNextWindow;             //
-    int                     FocusRequestCurrCounterRegular;     // Any item being requested for focus, stored as an index (we on layout to be stable between the frame pressing TAB and the next frame, semi-ouch)
-    int                     FocusRequestCurrCounterTabStop;     // Tab item being requested for focus, stored as an index
-    int                     FocusRequestNextCounterRegular;     // Stored for next frame
-    int                     FocusRequestNextCounterTabStop;     // "
-    bool                    FocusTabPressed;                    //
-
-    // Render
-    ImDrawData              DrawData;                           // Main ImDrawData instance to pass render information to the user
-    ImDrawDataBuilder       DrawDataBuilder;
-    float                   DimBgRatio;                         // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
-    ImDrawList              BackgroundDrawList;                 // First draw list to be rendered.
-    ImDrawList              ForegroundDrawList;                 // Last draw list to be rendered. This is where we the render software mouse cursor (if io.MouseDrawCursor is set) and most debug overlays.
-    ImGuiMouseCursor        MouseCursor;
-
-    // Drag and Drop
-    bool                    DragDropActive;
-    bool                    DragDropWithinSource;               // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source.
-    bool                    DragDropWithinTarget;               // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target.
-    ImGuiDragDropFlags      DragDropSourceFlags;
-    int                     DragDropSourceFrameCount;
-    int                     DragDropMouseButton;
-    ImGuiPayload            DragDropPayload;
-    ImRect                  DragDropTargetRect;                 // Store rectangle of current target candidate (we favor small targets when overlapping)
-    ImGuiID                 DragDropTargetId;
-    ImGuiDragDropFlags      DragDropAcceptFlags;
-    float                   DragDropAcceptIdCurrRectSurface;    // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
-    ImGuiID                 DragDropAcceptIdCurr;               // Target item id (set at the time of accepting the payload)
-    ImGuiID                 DragDropAcceptIdPrev;               // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
-    int                     DragDropAcceptFrameCount;           // Last time a target expressed a desire to accept the source
-    ImVector<unsigned char> DragDropPayloadBufHeap;             // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
-    unsigned char           DragDropPayloadBufLocal[16];        // Local buffer for small payloads
-
-    // Table
-    ImGuiTable*                     CurrentTable;
-    ImPool<ImGuiTable>              Tables;
-    ImVector<ImGuiPtrOrIndex>       CurrentTableStack;
-    ImVector<ImDrawChannel>         DrawChannelsTempMergeBuffer;
-
-    // Tab bars
-    ImGuiTabBar*                    CurrentTabBar;
-    ImPool<ImGuiTabBar>             TabBars;
-    ImVector<ImGuiPtrOrIndex>       CurrentTabBarStack;
-    ImVector<ImGuiShrinkWidthItem>  ShrinkWidthBuffer;
-
-    // Widget state
-    ImVec2                  LastValidMousePos;
-    ImGuiInputTextState     InputTextState;
-    ImFont                  InputTextPasswordFont;
-    ImGuiID                 TempInputId;                        // Temporary text input when CTRL+clicking on a slider, etc.
-    ImGuiColorEditFlags     ColorEditOptions;                   // Store user options for color edit widgets
-    float                   ColorEditLastHue;                   // Backup of last Hue associated to LastColor[3], so we can restore Hue in lossy RGB<>HSV round trips
-    float                   ColorEditLastSat;                   // Backup of last Saturation associated to LastColor[3], so we can restore Saturation in lossy RGB<>HSV round trips
-    float                   ColorEditLastColor[3];
-    ImVec4                  ColorPickerRef;                     // Initial/reference color at the time of opening the color picker.
-    bool                    DragCurrentAccumDirty;
-    float                   DragCurrentAccum;                   // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
-    float                   DragSpeedDefaultRatio;              // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
-    float                   ScrollbarClickDeltaToGrabCenter;    // Distance between mouse and center of grab box, normalized in parent space. Use storage?
-    int                     TooltipOverrideCount;
-    ImVector<char>          PrivateClipboard;                   // If no custom clipboard handler is defined
-    ImVector<ImGuiID>       MenusIdSubmittedThisFrame;          // A list of menu IDs that were rendered at least once
-
-    // Platform support
-    ImVec2                  PlatformImePos;                     // Cursor position request & last passed to the OS Input Method Editor
-    ImVec2                  PlatformImeLastPos;
-
-    // Settings
-    bool                    SettingsLoaded;
-    float                   SettingsDirtyTimer;                 // Save .ini Settings to memory when time reaches zero
-    ImGuiTextBuffer         SettingsIniData;                    // In memory .ini settings
-    ImVector<ImGuiSettingsHandler>      SettingsHandlers;       // List of .ini settings handlers
-    ImChunkStream<ImGuiWindowSettings>  SettingsWindows;        // ImGuiWindow .ini settings entries
-    ImChunkStream<ImGuiTableSettings>   SettingsTables;         // ImGuiTable .ini settings entries
-
-    // Capture/Logging
-    bool                    LogEnabled;
-    ImGuiLogType            LogType;
-    ImFileHandle            LogFile;                            // If != NULL log to stdout/ file
-    ImGuiTextBuffer         LogBuffer;                          // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
-    float                   LogLinePosY;
-    bool                    LogLineFirstItem;
-    int                     LogDepthRef;
-    int                     LogDepthToExpand;
-    int                     LogDepthToExpandDefault;            // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
-
-    // Debug Tools
-    bool                    DebugItemPickerActive;
-    ImGuiID                 DebugItemPickerBreakId;             // Will call IM_DEBUG_BREAK() when encountering this id
-
-    // Misc
-    float                   FramerateSecPerFrame[120];          // Calculate estimate of framerate for user over the last 2 seconds.
-    int                     FramerateSecPerFrameIdx;
-    float                   FramerateSecPerFrameAccum;
-    int                     WantCaptureMouseNextFrame;          // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags
-    int                     WantCaptureKeyboardNextFrame;
-    int                     WantTextInputNextFrame;
-    char                    TempBuffer[1024*3+1];               // Temporary text buffer
-
-    ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData)
-    {
-        Initialized = false;
-        Font = NULL;
-        FontSize = FontBaseSize = 0.0f;
-        FontAtlasOwnedByContext = shared_font_atlas ? false : true;
-        IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
-        Time = 0.0f;
-        FrameCount = 0;
-        FrameCountEnded = FrameCountRendered = -1;
-        WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false;
-
-        WindowsActiveCount = 0;
-        CurrentWindow = NULL;
-        HoveredWindow = NULL;
-        HoveredRootWindow = NULL;
-        MovingWindow = NULL;
-        WheelingWindow = NULL;
-        WheelingWindowTimer = 0.0f;
-
-        HoveredId = 0;
-        HoveredIdAllowOverlap = false;
-        HoveredIdPreviousFrame = 0;
-        HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
-        ActiveId = 0;
-        ActiveIdIsAlive = 0;
-        ActiveIdTimer = 0.0f;
-        ActiveIdIsJustActivated = false;
-        ActiveIdAllowOverlap = false;
-        ActiveIdHasBeenPressedBefore = false;
-        ActiveIdHasBeenEditedBefore = false;
-        ActiveIdHasBeenEditedThisFrame = false;
-        ActiveIdUsingNavDirMask = 0x00;
-        ActiveIdUsingNavInputMask = 0x00;
-        ActiveIdUsingKeyInputMask = 0x00;
-        ActiveIdClickOffset = ImVec2(-1,-1);
-        ActiveIdWindow = NULL;
-        ActiveIdSource = ImGuiInputSource_None;
-        ActiveIdMouseButton = 0;
-        ActiveIdPreviousFrame = 0;
-        ActiveIdPreviousFrameIsAlive = false;
-        ActiveIdPreviousFrameHasBeenEditedBefore = false;
-        ActiveIdPreviousFrameWindow = NULL;
-        LastActiveId = 0;
-        LastActiveIdTimer = 0.0f;
-
-        NavWindow = NULL;
-        NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavInputId = 0;
-        NavJustTabbedId = NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0;
-        NavInputSource = ImGuiInputSource_None;
-        NavScoringRectScreen = ImRect();
-        NavScoringCount = 0;
-        NavLayer = ImGuiNavLayer_Main;
-        NavIdTabCounter = INT_MAX;
-        NavIdIsAlive = false;
-        NavMousePosDirty = false;
-        NavDisableHighlight = true;
-        NavDisableMouseHover = false;
-        NavAnyRequest = false;
-        NavInitRequest = false;
-        NavInitRequestFromMove = false;
-        NavInitResultId = 0;
-        NavMoveFromClampedRefRect = false;
-        NavMoveRequest = false;
-        NavMoveRequestFlags = ImGuiNavMoveFlags_None;
-        NavMoveRequestForward = ImGuiNavForward_None;
-        NavMoveDir = NavMoveDirLast = NavMoveClipDir = ImGuiDir_None;
-
-        NavWindowingTarget = NavWindowingTargetAnim = NavWindowingList = NULL;
-        NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
-        NavWindowingToggleLayer = false;
-
-        FocusRequestCurrWindow = FocusRequestNextWindow = NULL;
-        FocusRequestCurrCounterRegular = FocusRequestCurrCounterTabStop = INT_MAX;
-        FocusRequestNextCounterRegular = FocusRequestNextCounterTabStop = INT_MAX;
-        FocusTabPressed = false;
-
-        DimBgRatio = 0.0f;
-        BackgroundDrawList._OwnerName = "##Background"; // Give it a name for debugging
-        ForegroundDrawList._OwnerName = "##Foreground"; // Give it a name for debugging
-        MouseCursor = ImGuiMouseCursor_Arrow;
-
-        DragDropActive = DragDropWithinSource = DragDropWithinTarget = false;
-        DragDropSourceFlags = ImGuiDragDropFlags_None;
-        DragDropSourceFrameCount = -1;
-        DragDropMouseButton = -1;
-        DragDropTargetId = 0;
-        DragDropAcceptFlags = ImGuiDragDropFlags_None;
-        DragDropAcceptIdCurrRectSurface = 0.0f;
-        DragDropAcceptIdPrev = DragDropAcceptIdCurr = 0;
-        DragDropAcceptFrameCount = -1;
-        memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal));
-
-        CurrentTable = NULL;
-        CurrentTabBar = NULL;
-
-        LastValidMousePos = ImVec2(0.0f, 0.0f);
-        TempInputId = 0;
-        ColorEditOptions = ImGuiColorEditFlags__OptionsDefault;
-        ColorEditLastHue = ColorEditLastSat = 0.0f;
-        ColorEditLastColor[0] = ColorEditLastColor[1] = ColorEditLastColor[2] = FLT_MAX;
-        DragCurrentAccumDirty = false;
-        DragCurrentAccum = 0.0f;
-        DragSpeedDefaultRatio = 1.0f / 100.0f;
-        ScrollbarClickDeltaToGrabCenter = 0.0f;
-        TooltipOverrideCount = 0;
-
-        PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX);
-
-        SettingsLoaded = false;
-        SettingsDirtyTimer = 0.0f;
-
-        LogEnabled = false;
-        LogType = ImGuiLogType_None;
-        LogFile = NULL;
-        LogLinePosY = FLT_MAX;
-        LogLineFirstItem = false;
-        LogDepthRef = 0;
-        LogDepthToExpand = LogDepthToExpandDefault = 2;
-
-        DebugItemPickerActive = false;
-        DebugItemPickerBreakId = 0;
-
-        memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
-        FramerateSecPerFrameIdx = 0;
-        FramerateSecPerFrameAccum = 0.0f;
-        WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1;
-        memset(TempBuffer, 0, sizeof(TempBuffer));
-    }
-};
-
-//-----------------------------------------------------------------------------
-// ImGuiWindow
-//-----------------------------------------------------------------------------
-
-// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
-// FIXME: That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered.
-struct IMGUI_API ImGuiWindowTempData
-{
-    // Layout
-    ImVec2                  CursorPos;              // Current emitting position, in absolute coordinates.
-    ImVec2                  CursorPosPrevLine;
-    ImVec2                  CursorStartPos;         // Initial position after Begin(), generally ~ window position + WindowPadding.
-    ImVec2                  CursorMaxPos;           // Used to implicitly calculate the size of our contents, always growing during the frame. Used to calculate window->ContentSize at the beginning of next frame
-    ImVec2                  CurrLineSize;
-    ImVec2                  PrevLineSize;
-    float                   CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
-    float                   PrevLineTextBaseOffset;
-    ImVec1                  Indent;                 // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
-    ImVec1                  ColumnsOffset;          // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
-    ImVec1                  GroupOffset;
-
-    // Last item status
-    ImGuiID                 LastItemId;             // ID for last item
-    ImGuiItemStatusFlags    LastItemStatusFlags;    // Status flags for last item (see ImGuiItemStatusFlags_)
-    ImRect                  LastItemRect;           // Interaction rect for last item
-    ImRect                  LastItemDisplayRect;    // End-user display rect for last item (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect)
-
-    // Keyboard/Gamepad navigation
-    ImGuiNavLayer           NavLayerCurrent;        // Current layer, 0..31 (we currently only use 0..1)
-    int                     NavLayerCurrentMask;    // = (1 << NavLayerCurrent) used by ItemAdd prior to clipping.
-    int                     NavLayerActiveMask;     // Which layer have been written to (result from previous frame)
-    int                     NavLayerActiveMaskNext; // Which layer have been written to (buffer for current frame)
-    ImGuiID                 NavFocusScopeIdCurrent; // Current focus scope ID while appending
-    bool                    NavHideHighlightOneFrame;
-    bool                    NavHasScroll;           // Set when scrolling can be used (ScrollMax > 0.0f)
-
-    // Miscellaneous
-    bool                    MenuBarAppending;       // FIXME: Remove this
-    ImVec2                  MenuBarOffset;          // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
-    ImGuiMenuColumns        MenuColumns;            // Simplified columns storage for menu items measurement
-    int                     TreeDepth;              // Current tree depth.
-    ImU32                   TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
-    ImVector<ImGuiWindow*>  ChildWindows;
-    ImGuiStorage*           StateStorage;           // Current persistent per-window storage (store e.g. tree node open/close state)
-    ImGuiColumns*           CurrentColumns;         // Current columns set
-    ImGuiTable*             CurrentTable;           // Current table set
-    ImGuiLayoutType         LayoutType;
-    ImGuiLayoutType         ParentLayoutType;       // Layout type of parent window at the time of Begin()
-    int                     FocusCounterRegular;    // (Legacy Focus/Tabbing system) Sequential counter, start at -1 and increase as assigned via FocusableItemRegister() (FIXME-NAV: Needs redesign)
-    int                     FocusCounterTabStop;    // (Legacy Focus/Tabbing system) Same, but only count widgets which you can Tab through.
-
-    // Local parameters stacks
-    // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
-    ImGuiItemFlags          ItemFlags;              // == ItemFlagsStack.back() [empty == ImGuiItemFlags_Default]
-    float                   ItemWidth;              // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window
-    float                   TextWrapPos;            // == TextWrapPosStack.back() [empty == -1.0f]
-    ImVector<ImGuiItemFlags>ItemFlagsStack;
-    ImVector<float>         ItemWidthStack;
-    ImVector<float>         TextWrapPosStack;
-    ImVector<ImGuiGroupData>GroupStack;
-    short                   StackSizesBackup[6];    // Store size of various stacks for asserting
-
-    ImGuiWindowTempData()
-    {
-        CursorPos = CursorPosPrevLine = CursorStartPos = CursorMaxPos = ImVec2(0.0f, 0.0f);
-        CurrLineSize = PrevLineSize = ImVec2(0.0f, 0.0f);
-        CurrLineTextBaseOffset = PrevLineTextBaseOffset = 0.0f;
-        Indent = ImVec1(0.0f);
-        ColumnsOffset = ImVec1(0.0f);
-        GroupOffset = ImVec1(0.0f);
-
-        LastItemId = 0;
-        LastItemStatusFlags = ImGuiItemStatusFlags_None;
-        LastItemRect = LastItemDisplayRect = ImRect();
-
-        NavLayerActiveMask = NavLayerActiveMaskNext = 0x00;
-        NavLayerCurrent = ImGuiNavLayer_Main;
-        NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
-        NavFocusScopeIdCurrent = 0;
-        NavHideHighlightOneFrame = false;
-        NavHasScroll = false;
-
-        MenuBarAppending = false;
-        MenuBarOffset = ImVec2(0.0f, 0.0f);
-        TreeDepth = 0;
-        TreeJumpToParentOnPopMask = 0x00;
-        StateStorage = NULL;
-        CurrentColumns = NULL;
-        CurrentTable = NULL;
-        LayoutType = ParentLayoutType = ImGuiLayoutType_Vertical;
-        FocusCounterRegular = FocusCounterTabStop = -1;
-
-        ItemFlags = ImGuiItemFlags_Default_;
-        ItemWidth = 0.0f;
-        TextWrapPos = -1.0f;
-        memset(StackSizesBackup, 0, sizeof(StackSizesBackup));
-    }
-};
-
-// Storage for one window
-struct IMGUI_API ImGuiWindow
-{
-    char*                   Name;                               // Window name, owned by the window.
-    ImGuiID                 ID;                                 // == ImHashStr(Name)
-    ImGuiWindowFlags        Flags;                              // See enum ImGuiWindowFlags_
-    ImVec2                  Pos;                                // Position (always rounded-up to nearest pixel)
-    ImVec2                  Size;                               // Current size (==SizeFull or collapsed title bar size)
-    ImVec2                  SizeFull;                           // Size when non collapsed
-    ImVec2                  ContentSize;                        // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding.
-    ImVec2                  ContentSizeExplicit;                // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
-    ImVec2                  WindowPadding;                      // Window padding at the time of Begin().
-    float                   WindowRounding;                     // Window rounding at the time of Begin().
-    float                   WindowBorderSize;                   // Window border size at the time of Begin().
-    int                     NameBufLen;                         // Size of buffer storing Name. May be larger than strlen(Name)!
-    ImGuiID                 MoveId;                             // == window->GetID("#MOVE")
-    ImGuiID                 ChildId;                            // ID of corresponding item in parent window (for navigation to return from child window to parent window)
-    ImVec2                  Scroll;
-    ImVec2                  ScrollMax;
-    ImVec2                  ScrollTarget;                       // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
-    ImVec2                  ScrollTargetCenterRatio;            // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
-    ImVec2                  ScrollbarSizes;                     // Size taken by scrollbars on each axis
-    bool                    ScrollbarX, ScrollbarY;             // Are scrollbars visible?
-    bool                    Active;                             // Set to true on Begin(), unless Collapsed
-    bool                    WasActive;
-    bool                    WriteAccessed;                      // Set to true when any widget access the current window
-    bool                    Collapsed;                          // Set when collapsing window to become only title-bar
-    bool                    WantCollapseToggle;
-    bool                    SkipItems;                          // Set when items can safely be all clipped (e.g. window not visible or collapsed)
-    bool                    Appearing;                          // Set during the frame where the window is appearing (or re-appearing)
-    bool                    Hidden;                             // Do not display (== (HiddenFrames*** > 0))
-    bool                    IsFallbackWindow;                   // Set on the "Debug##Default" window.
-    bool                    HasCloseButton;                     // Set when the window has a close button (p_open != NULL)
-    signed char             ResizeBorderHeld;                   // Current border being held for resize (-1: none, otherwise 0-3)
-    short                   BeginCount;                         // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
-    short                   BeginOrderWithinParent;             // Order within immediate parent window, if we are a child window. Otherwise 0.
-    short                   BeginOrderWithinContext;            // Order within entire imgui context. This is mostly used for debugging submission order related issues.
-    ImGuiID                 PopupId;                            // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
-    ImS8                    AutoFitFramesX, AutoFitFramesY;
-    ImS8                    AutoFitChildAxises;
-    bool                    AutoFitOnlyGrows;
-    ImGuiDir                AutoPosLastDirection;
-    int                     HiddenFramesCanSkipItems;           // Hide the window for N frames
-    int                     HiddenFramesCannotSkipItems;        // Hide the window for N frames while allowing items to be submitted so we can measure their size
-    ImGuiCond               SetWindowPosAllowFlags;             // store acceptable condition flags for SetNextWindowPos() use.
-    ImGuiCond               SetWindowSizeAllowFlags;            // store acceptable condition flags for SetNextWindowSize() use.
-    ImGuiCond               SetWindowCollapsedAllowFlags;       // store acceptable condition flags for SetNextWindowCollapsed() use.
-    ImVec2                  SetWindowPosVal;                    // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
-    ImVec2                  SetWindowPosPivot;                  // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
-
-    ImVector<ImGuiID>       IDStack;                            // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
-    ImGuiWindowTempData     DC;                                 // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
-
-    // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer.
-    // The main 'OuterRect', omitted as a field, is window->Rect().
-    ImRect                  OuterRectClipped;                   // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
-    ImRect                  InnerRect;                          // Inner rectangle (omit title bar, menu bar, scroll bar)
-    ImRect                  InnerClipRect;                      // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
-    ImRect                  WorkRect;                           // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward).
-    ImRect                  ClipRect;                           // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
-    ImRect                  ContentRegionRect;                  // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
-
-    int                     LastFrameActive;                    // Last frame number the window was Active.
-    float                   LastTimeActive;                     // Last timestamp the window was Active (using float as we don't need high precision there)
-    float                   ItemWidthDefault;
-    ImGuiStorage            StateStorage;
-    ImVector<ImGuiColumns>  ColumnsStorage;
-    float                   FontWindowScale;                    // User scale multiplier per-window, via SetWindowFontScale()
-    int                     SettingsOffset;                     // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
-
-    ImDrawList*             DrawList;                           // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
-    ImDrawList              DrawListInst;
-    ImGuiWindow*            ParentWindow;                       // If we are a child _or_ popup window, this is pointing to our parent. Otherwise NULL.
-    ImGuiWindow*            RootWindow;                         // Point to ourself or first ancestor that is not a child window.
-    ImGuiWindow*            RootWindowForTitleBarHighlight;     // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
-    ImGuiWindow*            RootWindowForNav;                   // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
-
-    ImGuiWindow*            NavLastChildNavWindow;              // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.)
-    ImGuiID                 NavLastIds[ImGuiNavLayer_COUNT];    // Last known NavId for this window, per layer (0/1)
-    ImRect                  NavRectRel[ImGuiNavLayer_COUNT];    // Reference rectangle, in window relative space
-
-    bool                    MemoryCompacted;
-    int                     MemoryDrawListIdxCapacity;
-    int                     MemoryDrawListVtxCapacity;
-
-public:
-    ImGuiWindow(ImGuiContext* context, const char* name);
-    ~ImGuiWindow();
-
-    ImGuiID     GetID(const char* str, const char* str_end = NULL);
-    ImGuiID     GetID(const void* ptr);
-    ImGuiID     GetID(int n);
-    ImGuiID     GetIDNoKeepAlive(const char* str, const char* str_end = NULL);
-    ImGuiID     GetIDNoKeepAlive(const void* ptr);
-    ImGuiID     GetIDNoKeepAlive(int n);
-    ImGuiID     GetIDFromRectangle(const ImRect& r_abs);
-
-    // We don't use g.FontSize because the window may be != g.CurrentWidow.
-    ImRect      Rect() const                { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); }
-    float       CalcFontSize() const        { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
-    float       TitleBarHeight() const      { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; }
-    ImRect      TitleBarRect() const        { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
-    float       MenuBarHeight() const       { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; }
-    ImRect      MenuBarRect() const         { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
-};
-
-// Backup and restore just enough data to be able to use IsItemHovered() on item A after another B in the same window has overwritten the data.
-struct ImGuiItemHoveredDataBackup
-{
-    ImGuiID                 LastItemId;
-    ImGuiItemStatusFlags    LastItemStatusFlags;
-    ImRect                  LastItemRect;
-    ImRect                  LastItemDisplayRect;
-
-    ImGuiItemHoveredDataBackup() { Backup(); }
-    void Backup()           { ImGuiWindow* window = GImGui->CurrentWindow; LastItemId = window->DC.LastItemId; LastItemStatusFlags = window->DC.LastItemStatusFlags; LastItemRect = window->DC.LastItemRect; LastItemDisplayRect = window->DC.LastItemDisplayRect; }
-    void Restore() const    { ImGuiWindow* window = GImGui->CurrentWindow; window->DC.LastItemId = LastItemId; window->DC.LastItemStatusFlags = LastItemStatusFlags; window->DC.LastItemRect = LastItemRect; window->DC.LastItemDisplayRect = LastItemDisplayRect; }
-};
-
-//-----------------------------------------------------------------------------
-// Tab bar, tab item
-//-----------------------------------------------------------------------------
-
-// Extend ImGuiTabBarFlags_
-enum ImGuiTabBarFlagsPrivate_
-{
-    ImGuiTabBarFlags_DockNode                   = 1 << 20,  // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around]
-    ImGuiTabBarFlags_IsFocused                  = 1 << 21,
-    ImGuiTabBarFlags_SaveSettings               = 1 << 22   // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs
-};
-
-// Extend ImGuiTabItemFlags_
-enum ImGuiTabItemFlagsPrivate_
-{
-    ImGuiTabItemFlags_NoCloseButton             = 1 << 20   // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout)
-};
-
-// Storage for one active tab item (sizeof() 26~32 bytes)
-struct ImGuiTabItem
-{
-    ImGuiID             ID;
-    ImGuiTabItemFlags   Flags;
-    int                 LastFrameVisible;
-    int                 LastFrameSelected;      // This allows us to infer an ordered list of the last activated tabs with little maintenance
-    int                 NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
-    float               Offset;                 // Position relative to beginning of tab
-    float               Width;                  // Width currently displayed
-    float               ContentWidth;           // Width of actual contents, stored during BeginTabItem() call
-
-    ImGuiTabItem()      { ID = 0; Flags = ImGuiTabItemFlags_None; LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; Offset = Width = ContentWidth = 0.0f; }
-};
-
-// Storage for a tab bar (sizeof() 92~96 bytes)
-struct ImGuiTabBar
-{
-    ImVector<ImGuiTabItem> Tabs;
-    ImGuiID             ID;                     // Zero for tab-bars used by docking
-    ImGuiID             SelectedTabId;          // Selected tab/window
-    ImGuiID             NextSelectedTabId;
-    ImGuiID             VisibleTabId;           // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
-    int                 CurrFrameVisible;
-    int                 PrevFrameVisible;
-    ImRect              BarRect;
-    float               LastTabContentHeight;   // Record the height of contents submitted below the tab bar
-    float               OffsetMax;              // Distance from BarRect.Min.x, locked during layout
-    float               OffsetMaxIdeal;         // Ideal offset if all tabs were visible and not clipped
-    float               OffsetNextTab;          // Distance from BarRect.Min.x, incremented with each BeginTabItem() call, not used if ImGuiTabBarFlags_Reorderable if set.
-    float               ScrollingAnim;
-    float               ScrollingTarget;
-    float               ScrollingTargetDistToVisibility;
-    float               ScrollingSpeed;
-    ImGuiTabBarFlags    Flags;
-    ImGuiID             ReorderRequestTabId;
-    ImS8                ReorderRequestDir;
-    bool                WantLayout;
-    bool                VisibleTabWasSubmitted;
-    short               LastTabItemIdx;         // For BeginTabItem()/EndTabItem()
-    ImVec2              FramePadding;           // style.FramePadding locked at the time of BeginTabBar()
-    ImGuiTextBuffer     TabsNames;              // For non-docking tab bar we re-append names in a contiguous buffer.
-
-    ImGuiTabBar();
-    int                 GetTabOrder(const ImGuiTabItem* tab) const  { return Tabs.index_from_ptr(tab); }
-    const char*         GetTabName(const ImGuiTabItem* tab) const
-    {
-        IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
-        return TabsNames.Buf.Data + tab->NameOffset;
-    }
-};
-
-//-----------------------------------------------------------------------------
-// Internal API
-// No guarantee of forward compatibility here.
-//-----------------------------------------------------------------------------
-
-namespace ImGui
-{
-    // Windows
-    // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
-    // If this ever crash because g.CurrentWindow is NULL it means that either
-    // - ImGui::NewFrame() has never been called, which is illegal.
-    // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
-    inline    ImGuiWindow*  GetCurrentWindowRead()      { ImGuiContext& g = *GImGui; return g.CurrentWindow; }
-    inline    ImGuiWindow*  GetCurrentWindow()          { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; }
-    IMGUI_API ImGuiWindow*  FindWindowByID(ImGuiID id);
-    IMGUI_API ImGuiWindow*  FindWindowByName(const char* name);
-    IMGUI_API void          UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window);
-    IMGUI_API ImVec2        CalcWindowExpectedSize(ImGuiWindow* window);
-    IMGUI_API bool          IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
-    IMGUI_API bool          IsWindowNavFocusable(ImGuiWindow* window);
-    IMGUI_API ImRect        GetWindowAllowedExtentRect(ImGuiWindow* window);
-    IMGUI_API void          SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
-    IMGUI_API void          SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
-    IMGUI_API void          SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
-
-    // Windows: Display Order and Focus Order
-    IMGUI_API void          FocusWindow(ImGuiWindow* window);
-    IMGUI_API void          FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window);
-    IMGUI_API void          BringWindowToFocusFront(ImGuiWindow* window);
-    IMGUI_API void          BringWindowToDisplayFront(ImGuiWindow* window);
-    IMGUI_API void          BringWindowToDisplayBack(ImGuiWindow* window);
-
-    // Fonts, drawing
-    IMGUI_API void          SetCurrentFont(ImFont* font);
-    inline ImFont*          GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
-    inline ImDrawList*      GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); ImGuiContext& g = *GImGui; return &g.ForegroundDrawList; } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches.
-
-    // Init
-    IMGUI_API void          Initialize(ImGuiContext* context);
-    IMGUI_API void          Shutdown(ImGuiContext* context);    // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
-
-    // NewFrame
-    IMGUI_API void          UpdateHoveredWindowAndCaptureFlags();
-    IMGUI_API void          StartMouseMovingWindow(ImGuiWindow* window);
-    IMGUI_API void          UpdateMouseMovingWindowNewFrame();
-    IMGUI_API void          UpdateMouseMovingWindowEndFrame();
-
-    // Settings
-    IMGUI_API void                  MarkIniSettingsDirty();
-    IMGUI_API void                  MarkIniSettingsDirty(ImGuiWindow* window);
-    IMGUI_API ImGuiWindowSettings*  CreateNewWindowSettings(const char* name);
-    IMGUI_API ImGuiWindowSettings*  FindWindowSettings(ImGuiID id);
-    IMGUI_API ImGuiWindowSettings*  FindOrCreateWindowSettings(const char* name);
-    IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
-
-    // Scrolling
-    IMGUI_API void          SetScrollX(ImGuiWindow* window, float new_scroll_x);
-    IMGUI_API void          SetScrollY(ImGuiWindow* window, float new_scroll_y);
-    IMGUI_API void          SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio = 0.5f);
-    IMGUI_API void          SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio = 0.5f);
-    IMGUI_API ImVec2        ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& item_rect);
-
-    // Basic Accessors
-    inline ImGuiID          GetItemID()     { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemId; }
-    inline ImGuiItemStatusFlags GetItemStatusFlags() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.LastItemStatusFlags; }
-    inline ImGuiID          GetActiveID()   { ImGuiContext& g = *GImGui; return g.ActiveId; }
-    inline ImGuiID          GetFocusID()    { ImGuiContext& g = *GImGui; return g.NavId; }
-    IMGUI_API void          SetActiveID(ImGuiID id, ImGuiWindow* window);
-    IMGUI_API void          SetFocusID(ImGuiID id, ImGuiWindow* window);
-    IMGUI_API void          ClearActiveID();
-    IMGUI_API ImGuiID       GetHoveredID();
-    IMGUI_API void          SetHoveredID(ImGuiID id);
-    IMGUI_API void          KeepAliveID(ImGuiID id);
-    IMGUI_API void          MarkItemEdited(ImGuiID id);     // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function.
-    IMGUI_API void          PushOverrideID(ImGuiID id);     // Push given value at the top of the ID stack (whereas PushID combines old and new hashes)
-
-    // Basic Helpers for widget code
-    IMGUI_API void          ItemSize(const ImVec2& size, float text_baseline_y = -1.0f);
-    IMGUI_API void          ItemSize(const ImRect& bb, float text_baseline_y = -1.0f);
-    IMGUI_API bool          ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL);
-    IMGUI_API bool          ItemHoverable(const ImRect& bb, ImGuiID id);
-    IMGUI_API bool          IsClippedEx(const ImRect& bb, ImGuiID id, bool clip_even_when_logged);
-    IMGUI_API bool          FocusableItemRegister(ImGuiWindow* window, ImGuiID id);   // Return true if focus is requested
-    IMGUI_API void          FocusableItemUnregister(ImGuiWindow* window);
-    IMGUI_API ImVec2        CalcItemSize(ImVec2 size, float default_w, float default_h);
-    IMGUI_API float         CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
-    IMGUI_API void          PushMultiItemsWidths(int components, float width_full);
-    IMGUI_API void          PushItemFlag(ImGuiItemFlags option, bool enabled);
-    IMGUI_API void          PopItemFlag();
-    IMGUI_API bool          IsItemToggledSelection();                           // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
-    IMGUI_API ImVec2        GetContentRegionMaxAbs();
-    IMGUI_API void          ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
-
-    // Logging/Capture
-    IMGUI_API void          LogBegin(ImGuiLogType type, int auto_open_depth);   // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
-    IMGUI_API void          LogToBuffer(int auto_open_depth = -1);              // Start logging/capturing to internal buffer
-
-    // Popups, Modals, Tooltips
-    IMGUI_API bool          BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags);
-    IMGUI_API void          OpenPopupEx(ImGuiID id);
-    IMGUI_API void          ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
-    IMGUI_API void          ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
-    IMGUI_API bool          IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack!
-    IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
-    IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags);
-    IMGUI_API ImGuiWindow*  GetTopMostPopupModal();
-    IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window);
-    IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default);
-
-    // Navigation
-    IMGUI_API void          NavInitWindow(ImGuiWindow* window, bool force_reinit);
-    IMGUI_API bool          NavMoveRequestButNoResultYet();
-    IMGUI_API void          NavMoveRequestCancel();
-    IMGUI_API void          NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, const ImRect& bb_rel, ImGuiNavMoveFlags move_flags);
-    IMGUI_API void          NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags);
-    IMGUI_API float         GetNavInputAmount(ImGuiNavInput n, ImGuiInputReadMode mode);
-    IMGUI_API ImVec2        GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiInputReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f);
-    IMGUI_API int           CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
-    IMGUI_API void          ActivateItem(ImGuiID id);   // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again.
-    IMGUI_API void          SetNavID(ImGuiID id, int nav_layer, ImGuiID focus_scope_id);
-    IMGUI_API void          SetNavIDWithRectRel(ImGuiID id, int nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
-
-    // Focus scope (WIP)
-    IMGUI_API void          PushFocusScope(ImGuiID id);     // Note: this is storing in same stack as IDStack, so Push/Pop mismatch will be reported there.
-    IMGUI_API void          PopFocusScope();
-    inline ImGuiID          GetFocusScopeID()               { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; }
-
-    // Inputs
-    // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
-    inline bool             IsActiveIdUsingNavDir(ImGuiDir dir)                         { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
-    inline bool             IsActiveIdUsingNavInput(ImGuiNavInput input)                { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
-    inline bool             IsActiveIdUsingKey(ImGuiKey key)                            { ImGuiContext& g = *GImGui; IM_ASSERT(key < 64); return (g.ActiveIdUsingKeyInputMask & ((ImU64)1 << key)) != 0; }
-    IMGUI_API bool          IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
-    inline bool             IsKeyPressedMap(ImGuiKey key, bool repeat = true)           { ImGuiContext& g = *GImGui; const int key_index = g.IO.KeyMap[key]; return (key_index >= 0) ? IsKeyPressed(key_index, repeat) : false; }
-    inline bool             IsNavInputDown(ImGuiNavInput n)                             { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
-    inline bool             IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMode rm)      { return (GetNavInputAmount(n, rm) > 0.0f); }
-
-    // Drag and Drop
-    IMGUI_API bool          BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
-    IMGUI_API void          ClearDragDrop();
-    IMGUI_API bool          IsDragDropPayloadBeingAccepted();
-
-    // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables api)
-    IMGUI_API void          BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
-    IMGUI_API void          EndColumns();                                                             // close columns
-    IMGUI_API void          PushColumnClipRect(int column_index);
-    IMGUI_API void          PushColumnsBackground();
-    IMGUI_API void          PopColumnsBackground();
-    IMGUI_API ImGuiID       GetColumnsID(const char* str_id, int count);
-    IMGUI_API ImGuiColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id);
-    IMGUI_API float         GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm);
-    IMGUI_API float         GetColumnNormFromOffset(const ImGuiColumns* columns, float offset);
-}
-
-#define IM_COL32_DISABLE                IM_COL32(0,0,0,1)   // Special sentinel code
-#define IMGUI_TABLE_MAX_COLUMNS         64                  // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
-#define IMGUI_TABLE_MAX_DRAW_CHANNELS   (2 + 64 * 2)        // See TableUpdateDrawChannels()
-
-// [Internal] sizeof() ~ 100
-// We use the terminology "Active" to refer to a column that is not Hidden by user or programmatically. We don't use the term "Visible" because it is ambiguous since an Active column can be non-visible because of scrolling.
-struct ImGuiTableColumn
-{
-    ImRect                  ClipRect;                       // Clipping rectangle for the column
-    ImGuiID                 UserID;                         // Optional, value passed to TableSetupColumn()
-    ImGuiTableColumnFlags   FlagsIn;                        // Flags as they were provided by user. See ImGuiTableColumnFlags_
-    ImGuiTableColumnFlags   Flags;                          // Effective flags. See ImGuiTableColumnFlags_
-    float                   MinX;                           // Absolute positions
-    float                   MaxX;
-    float                   ResizeWeight;                   //  ~1.0f. Master width data when (Flags & _WidthStretch)
-    float                   WidthRequested;                 // Master width data when !(Flags & _WidthStretch)
-    float                   WidthGiven;                     // == (MaxX - MinX). FIXME-TABLE: Store all persistent width in multiple of FontSize?
-    float                   StartXRows;                     // Start position for the frame, currently ~(MinX + CellPaddingX)
-    float                   StartXHeaders;                  
-    float                   ContentMaxPosRowsFrozen;        // Submitted contents absolute maximum position, from which we can infer width.
-    float                   ContentMaxPosRowsUnfrozen;      // (kept as float because we need to manipulate those between each cell change)
-    float                   ContentMaxPosHeadersUsed;
-    float                   ContentMaxPosHeadersDesired;
-    ImS16                   ContentWidthRowsFrozen;         // Contents width. Because row freezing is not correlated with headers/not-headers we need all 4 variants (ImDrawCmd merging uses different data than alignment code).
-    ImS16                   ContentWidthRowsUnfrozen;       // (encoded as ImS16 because we actually rarely use those width)
-    ImS16                   ContentWidthHeadersUsed;        // TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls
-    ImS16                   ContentWidthHeadersDesired;
-    ImS16                   NameOffset;                     // Offset into parent ColumnsNames[]
-    bool                    IsActive;                       // Is the column not marked Hidden by the user (regardless of clipping). We're not calling this "Visible" here because visibility also depends on clipping.
-    bool                    IsActiveNextFrame;
-    bool                    IsClipped;                      // Set when not overlapping the host window clipping rectangle. We don't use the opposite "!Visible" name because Clipped can be altered by events.
-    bool                    SkipItems;
-    ImS8                    DisplayOrder;                   // Index within Table's IndexToDisplayOrder[] (column may be reordered by users)
-    ImS8                    IndexWithinActiveSet;           // Index within active/visible set (<= IndexToDisplayOrder)
-    ImS8                    DrawChannelCurrent;             // Index within DrawSplitter.Channels[]
-    ImS8                    DrawChannelRowsBeforeFreeze;
-    ImS8                    DrawChannelRowsAfterFreeze;
-    ImS8                    PrevActiveColumn;               // Index of prev active column within Columns[], -1 if first active column
-    ImS8                    NextActiveColumn;               // Index of next active column within Columns[], -1 if last active column
-    ImS8                    AutoFitQueue;                   // Queue of 8 values for the next 8 frames to request auto-fit
-    ImS8                    CannotSkipItemsQueue;           // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem
-    ImS8                    SortOrder;                      // -1: Not sorting on this column
-    ImS8                    SortDirection;                  // enum ImGuiSortDirection_
-
-    ImGuiTableColumn()
-    {
-        memset(this, 0, sizeof(*this));
-        ResizeWeight = WidthRequested = WidthGiven = -1.0f;
-        NameOffset = -1;
-        IsActive = IsActiveNextFrame = true;
-        DisplayOrder = IndexWithinActiveSet = -1;
-        DrawChannelCurrent = DrawChannelRowsBeforeFreeze = DrawChannelRowsAfterFreeze = -1;
-        PrevActiveColumn = NextActiveColumn = -1;
-        AutoFitQueue = CannotSkipItemsQueue = (1 << 3) - 1; // Skip for three frames
-        SortOrder = -1;
-        SortDirection = ImGuiSortDirection_Ascending;
-    }
-};
-
-struct ImGuiTable
-{
-    ImGuiID                     ID;
-    ImGuiTableFlags             Flags;
-    ImVector<char>              RawData;
-    ImSpan<ImGuiTableColumn>    Columns;                    // Point within RawData[]
-    ImSpan<ImS8>                DisplayOrderToIndex;        // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1)
-    ImU64                       ActiveMaskByIndex;          // Column Index -> IsActive map (Active == not hidden by user/api) in a format adequate for iterating column without touching cold data
-    ImU64                       ActiveMaskByDisplayOrder;   // Column DisplayOrder -> IsActive map
-    ImU64                       VisibleMaskByIndex;         // Visible (== Active and not Clipped)
-    ImGuiTableFlags             SettingsSaveFlags;          // Pre-compute which data we are going to save into the .ini file (e.g. when order is not altered we won't save order)
-    int                         SettingsOffset;             // Offset in g.SettingsTables
-    int                         LastFrameActive;
-    int                         ColumnsCount;               // Number of columns declared in BeginTable()
-    int                         ColumnsActiveCount;         // Number of non-hidden columns (<= ColumnsCount)
-    int                         CurrentColumn;
-    int                         CurrentRow;
-    ImS16                       InstanceNo;                 // Count of BeginTable() calls with same ID in the same frame (generally 0)
-    ImS16                       InstanceInteracted;         // Mark which instance (generally 0) of the same ID is being interacted with
-    float                       RowPosY1;
-    float                       RowPosY2;
-    float                       RowMinHeight;               // Height submitted to TableNextRow()
-    float                       RowTextBaseline;
-    float                       RowIndentOffsetX;
-    ImGuiTableRowFlags          RowFlags : 16;              // Current row flags, see ImGuiTableRowFlags_
-    ImGuiTableRowFlags          LastRowFlags : 16;
-    int                         RowBgColorCounter;          // Counter for alternating background colors (can be fast-forwarded by e.g clipper)
-    ImU32                       RowBgColor;                 // Request for current row background color
-    ImU32                       BorderColorStrong;
-    ImU32                       BorderColorLight;
-    float                       BorderX1;
-    float                       BorderX2;
-    float                       HostIndentX;
-    float                       CellPaddingX1;              // Padding from each borders
-    float                       CellPaddingX2;
-    float                       CellPaddingY;
-    float                       CellSpacingX;               // Spacing between non-bordered cells
-    float                       LastOuterHeight;            // Outer height from last frame
-    float                       LastFirstRowHeight;         // Height of first row from last frame
-    float                       ColumnsTotalWidth;
-    float                       InnerWidth;
-    float                       ResizedColumnNextWidth;
-    ImRect                      OuterRect;                  // Note: OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
-    ImRect                      WorkRect;
-    ImRect                      InnerClipRect;
-    ImRect                      BackgroundClipRect;         // We use this to cpu-clip cell background color fill
-    ImRect                      HostClipRect;               // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window.
-    ImRect                      HostWorkRect;               // Backup of InnerWindow->WorkRect at the end of BeginTable()
-    ImVec2                      HostCursorMaxPos;           // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable()
-    ImGuiWindow*                OuterWindow;                // Parent window for the table
-    ImGuiWindow*                InnerWindow;                // Window holding the table data (== OuterWindow or a child window)
-    ImGuiTextBuffer             ColumnsNames;               // Contiguous buffer holding columns names
-    ImDrawListSplitter          DrawSplitter;               // We carry our own ImDrawList splitter to allow recursion (FIXME: could be stored outside, worst case we need 1 splitter per recursing table)
-    ImVector<ImGuiTableSortSpecsColumn> SortSpecsData;      // FIXME-OPT: Fixed-size array / small-vector pattern, optimize for single sort spec
-    ImGuiTableSortSpecs         SortSpecs;                  // Public facing sorts specs, this is what we return in TableGetSortSpecs()
-    ImS8                        SortSpecsCount;
-    ImS8                        DeclColumnsCount;           // Count calls to TableSetupColumn()
-    ImS8                        HoveredColumnBody;          // [DEBUG] Unlike HoveredColumnBorder this doesn't fulfill all Hovering rules properly. Used for debugging/tools for now.
-    ImS8                        HoveredColumnBorder;        // Index of column whose right-border is being hovered (for resizing).
-    ImS8                        ResizedColumn;              // Index of column being resized. Reset by InstanceNo==0.
-    ImS8                        LastResizedColumn;          // Index of column being resized from previous frame.
-    ImS8                        HeldHeaderColumn;           // Index of column header being held. 
-    ImS8                        ReorderColumn;              // Index of column being reordered. (not cleared)
-    ImS8                        ReorderColumnDir;           // -1 or +1
-    ImS8                        RightMostActiveColumn;      // Index of right-most non-hidden column.
-    ImS8                        LeftMostStretchedColumnDisplayOrder; // Display order of left-most stretched column.
-    ImS8                        ContextPopupColumn;         // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot
-    ImS8                        DummyDrawChannel;           // Redirect non-visible columns here.
-    ImS8                        FreezeRowsRequest;          // Requested frozen rows count
-    ImS8                        FreezeRowsCount;            // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset)
-    ImS8                        FreezeColumnsRequest;       // Requested frozen columns count
-    ImS8                        FreezeColumnsCount;         // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset)
-    bool                        IsLayoutLocked;             // Set by TableUpdateLayout() which is called when beginning the first row.
-    bool                        IsInsideRow;                // Set when inside TableBeginRow()/TableEndRow().
-    bool                        IsInitializing;
-    bool                        IsSortSpecsDirty;
-    bool                        IsUsingHeaders;             // Set when the first row had the ImGuiTableRowFlags_Headers flag.
-    bool                        IsContextPopupOpen;         // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted).
-    bool                        IsSettingsRequestLoad;
-    bool                        IsSettingsLoaded;
-    bool                        IsSettingsDirty;            // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data.
-    bool                        IsDefaultDisplayOrder;      // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1)
-    bool                        IsResetDisplayOrderRequest;
-    bool                        IsFreezeRowsPassed;         // Set when we got past the frozen row (the first one).
-    bool                        HostSkipItems;              // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis
-
-    ImGuiTable()
-    {
-        memset(this, 0, sizeof(*this));
-        SettingsOffset = -1;
-        InstanceInteracted = -1;
-        LastFrameActive = -1;
-        LastResizedColumn = -1;
-        ContextPopupColumn = -1;
-        ReorderColumn = -1;
-    }
-};
-
-// sizeof() ~ 12
-struct ImGuiTableColumnSettings
-{
-    float   WidthOrWeight;
-    ImGuiID UserID;
-    ImS8    Index;
-    ImS8    DisplayOrder;
-    ImS8    SortOrder;
-    ImS8    SortDirection : 7;
-    ImU8    Visible : 1;        // This is called Active in ImGuiTableColumn, in .ini file we call it Visible.
-
-    ImGuiTableColumnSettings()
-    {
-        WidthOrWeight = 0.0f;
-        UserID = 0;
-        Index = -1;
-        DisplayOrder = SortOrder = -1;
-        SortDirection = ImGuiSortDirection_None;
-        Visible = 1;
-    }
-};
-
-// This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.)
-struct ImGuiTableSettings
-{
-    ImGuiID                     ID;                     // Set to 0 to invalidate/delete the setting
-    ImGuiTableFlags             SaveFlags;
-    ImS8                        ColumnsCount;
-    ImS8                        ColumnsCountMax;
-
-    ImGuiTableSettings()        { memset(this, 0, sizeof(*this)); }
-    ImGuiTableColumnSettings*   GetColumnSettings()     { return (ImGuiTableColumnSettings*)(this + 1); }
-};
-
-namespace ImGui
-{
-    // [Internal]
-    IMGUI_API bool          BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
-    IMGUI_API void          TableBeginUpdateColumns(ImGuiTable* table);
-    IMGUI_API void          TableUpdateDrawChannels(ImGuiTable* table);
-    IMGUI_API void          TableUpdateLayout(ImGuiTable* table);
-    IMGUI_API void          TableUpdateBorders(ImGuiTable* table);
-    IMGUI_API void          TableSetColumnWidth(int column_n, float width);
-    IMGUI_API void          TableSetColumnWidth(ImGuiTable* table, ImGuiTableColumn* column, float width);
-    IMGUI_API void          TableDrawBorders(ImGuiTable* table);
-    IMGUI_API void          TableDrawMergeChannels(ImGuiTable* table);
-    IMGUI_API void          TableDrawContextMenu(ImGuiTable* table, int column_n);
-    IMGUI_API void          TableSortSpecsClickColumn(ImGuiTable* table, ImGuiTableColumn* column, bool add_to_existing_sort_orders);
-    IMGUI_API void          TableSortSpecsSanitize(ImGuiTable* table);
-    IMGUI_API void          TableBeginRow(ImGuiTable* table);
-    IMGUI_API void          TableEndRow(ImGuiTable* table);
-    IMGUI_API void          TableBeginCell(ImGuiTable* table, int column_n);
-    IMGUI_API void          TableEndCell(ImGuiTable* table);
-    IMGUI_API ImRect        TableGetCellRect();
-    IMGUI_API const char*   TableGetColumnName(ImGuiTable* table, int column_n);
-    IMGUI_API void          TableSetColumnAutofit(ImGuiTable* table, int column_n);
-    IMGUI_API void          PushTableBackground();
-    IMGUI_API void          PopTableBackground();
-    IMGUI_API void          TableLoadSettings(ImGuiTable* table);
-    IMGUI_API void          TableSaveSettings(ImGuiTable* table);
-    IMGUI_API ImGuiTableSettings* TableFindSettings(ImGuiTable* table);
-    IMGUI_API void*         TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
-    IMGUI_API void          TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
-    IMGUI_API void          TableSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
-
-    // Tab Bars
-    IMGUI_API bool          BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
-    IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id);
-    IMGUI_API void          TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
-    IMGUI_API void          TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
-    IMGUI_API void          TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir);
-    IMGUI_API bool          TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags);
-    IMGUI_API ImVec2        TabItemCalcSize(const char* label, bool has_close_button);
-    IMGUI_API void          TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
-    IMGUI_API bool          TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id);
-
-    // Render helpers
-    // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
-    // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
-    IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
-    IMGUI_API void          RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
-    IMGUI_API void          RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0,0), const ImRect* clip_rect = NULL);
-    IMGUI_API void          RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
-    IMGUI_API void          RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known);
-    IMGUI_API void          RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
-    IMGUI_API void          RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
-    IMGUI_API void          RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, int rounding_corners_flags = ~0);
-    IMGUI_API void          RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
-    IMGUI_API const char*   FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
-    IMGUI_API void          LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
-
-    // Render helpers (those functions don't access any ImGui state!)
-    IMGUI_API void          RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
-    IMGUI_API void          RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
-    IMGUI_API void          RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
-    IMGUI_API void          RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
-    IMGUI_API void          RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
-    IMGUI_API void          RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
-
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-    // [1.71: 2019/06/07: Updating prototypes of some of the internal functions. Leaving those for reference for a short while]
-    inline void RenderArrow(ImVec2 pos, ImGuiDir dir, float scale=1.0f) { ImGuiWindow* window = GetCurrentWindow(); RenderArrow(window->DrawList, pos, GetColorU32(ImGuiCol_Text), dir, scale); }
-    inline void RenderBullet(ImVec2 pos)                                { ImGuiWindow* window = GetCurrentWindow(); RenderBullet(window->DrawList, pos, GetColorU32(ImGuiCol_Text)); }
-#endif
-
-    // Widgets
-    IMGUI_API void          TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
-    IMGUI_API bool          ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0,0), ImGuiButtonFlags flags = 0);
-    IMGUI_API bool          CloseButton(ImGuiID id, const ImVec2& pos);
-    IMGUI_API bool          CollapseButton(ImGuiID id, const ImVec2& pos);
-    IMGUI_API bool          ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0);
-    IMGUI_API void          Scrollbar(ImGuiAxis axis);
-    IMGUI_API bool          ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float avail_v, float contents_v, ImDrawCornerFlags rounding_corners);
-    IMGUI_API ImGuiID       GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis);
-    IMGUI_API ImGuiID       GetWindowResizeID(ImGuiWindow* window, int n); // 0..3: corners, 4..7: borders
-    IMGUI_API void          SeparatorEx(ImGuiSeparatorFlags flags);
-
-    // Widgets low-level behaviors
-    IMGUI_API bool          ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
-    IMGUI_API bool          DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags);
-    IMGUI_API bool          SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
-    IMGUI_API bool          SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
-    IMGUI_API bool          TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
-    IMGUI_API bool          TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0);                     // Consume previous SetNextItemOpen() data, if any. May return true when logging
-    IMGUI_API void          TreePushOverrideID(ImGuiID id);
-
-    // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
-    // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
-    // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
-    template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, float power, ImGuiDragFlags flags);
-    template<typename T, typename SIGNED_T, typename FLOAT_T>   IMGUI_API bool  SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb);
-    template<typename T, typename FLOAT_T>                      IMGUI_API float SliderCalcRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, float power, float linear_zero_pos);
-    template<typename T, typename SIGNED_T>                     IMGUI_API T     RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
-
-    // Data type helpers
-    IMGUI_API const ImGuiDataTypeInfo*  DataTypeGetInfo(ImGuiDataType data_type);
-    IMGUI_API int           DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format);
-    IMGUI_API void          DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg_1, const void* arg_2);
-    IMGUI_API bool          DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format);
-
-    // InputText
-    IMGUI_API bool          InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
-    IMGUI_API bool          TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags);
-    IMGUI_API bool          TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format);
-    inline bool             TempInputIsActive(ImGuiID id)       { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); }
-    inline ImGuiInputTextState* GetInputTextState(ImGuiID id)   { ImGuiContext& g = *GImGui; return (g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active
-
-    // Color
-    IMGUI_API void          ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
-    IMGUI_API void          ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
-    IMGUI_API void          ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
-
-    // Plot
-    IMGUI_API void          PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size);
-
-    // Shade functions (write over already created vertices)
-    IMGUI_API void          ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
-    IMGUI_API void          ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
-
-    // Garbage collection
-    IMGUI_API void          GcCompactTransientWindowBuffers(ImGuiWindow* window);
-    IMGUI_API void          GcAwakeTransientWindowBuffers(ImGuiWindow* window);
-
-    // Debug Tools
-    inline void             DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255))    { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(window->DC.LastItemRect.Min, window->DC.LastItemRect.Max, col); }
-    inline void             DebugStartItemPicker()                                  { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
-
-} // namespace ImGui
-
-// ImFontAtlas internals
-IMGUI_API bool              ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas);
-IMGUI_API void              ImFontAtlasBuildInit(ImFontAtlas* atlas);
-IMGUI_API void              ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
-IMGUI_API void              ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
-IMGUI_API void              ImFontAtlasBuildFinish(ImFontAtlas* atlas);
-IMGUI_API void              ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
-IMGUI_API void              ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
-
-// Debug Tools
-// Use 'Metrics->Tools->Item Picker' to break into the call-stack of a specific item.
-#ifndef IM_DEBUG_BREAK
-#if defined(__clang__)
-#define IM_DEBUG_BREAK()    __builtin_debugtrap()
-#elif defined (_MSC_VER)
-#define IM_DEBUG_BREAK()    __debugbreak()
-#else
-#define IM_DEBUG_BREAK()    IM_ASSERT(0)    // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger!
-#endif
-#endif // #ifndef IM_DEBUG_BREAK
-
-// Test Engine Hooks (imgui_tests)
-//#define IMGUI_ENABLE_TEST_ENGINE
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-extern void                 ImGuiTestEngineHook_PreNewFrame(ImGuiContext* ctx);
-extern void                 ImGuiTestEngineHook_PostNewFrame(ImGuiContext* ctx);
-extern void                 ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
-extern void                 ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
-extern void                 ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
-#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID)                ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID)               // Register item bounding box
-#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS)   // Register item label and status flags (optional)
-#define IMGUI_TEST_ENGINE_LOG(_FMT, ...)                    ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__)          // Custom log entry from user land into test log
-#else
-#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB, _ID)                do { } while (0)
-#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID, _LABEL, _FLAGS)    do { } while (0)
-#define IMGUI_TEST_ENGINE_LOG(_FMT, ...)                    do { } while (0)
-#endif
-
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#elif defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
-
-#ifdef _MSC_VER
-#pragma warning (pop)
-#endif
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imgui_widgets.cpp
+++ /dev/null
@@ -1,10112 +1,0 @@
-// dear imgui, v1.76 WIP
-// (widgets code)
-
-/*
-
-Index of this file:
-
-// [SECTION] Forward Declarations
-// [SECTION] Widgets: Text, etc.
-// [SECTION] Widgets: Main (Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc.)
-// [SECTION] Widgets: Low-level Layout helpers (Spacing, Dummy, NewLine, Separator, etc.)
-// [SECTION] Widgets: ComboBox
-// [SECTION] Data Type and Data Formatting Helpers
-// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
-// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
-// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
-// [SECTION] Widgets: InputText, InputTextMultiline
-// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
-// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
-// [SECTION] Widgets: Selectable
-// [SECTION] Widgets: ListBox
-// [SECTION] Widgets: PlotLines, PlotHistogram
-// [SECTION] Widgets: Value helpers
-// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc.
-// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
-// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
-// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
-// [SECTION] Widgets: BeginTable, EndTable, etc.
-
-*/
-
-#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-
-#include "imgui.h"
-#ifndef IMGUI_DISABLE
-
-#ifndef IMGUI_DEFINE_MATH_OPERATORS
-#define IMGUI_DEFINE_MATH_OPERATORS
-#endif
-#include "imgui_internal.h"
-
-#include <ctype.h>      // toupper
-#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
-#include <stddef.h>     // intptr_t
-#else
-#include <stdint.h>     // intptr_t
-#endif
-
-// Visual Studio warnings
-#ifdef _MSC_VER
-#pragma warning (disable: 4127)     // condition expression is constant
-#pragma warning (disable: 4996)     // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
-#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
-#pragma warning (disable: 5054)     // operator '|': deprecated between enumerations of different types
-#endif
-#endif
-
-// Clang/GCC warnings with -Weverything
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wold-style-cast"         // warning : use of old-style cast                              // yes, they are more terse.
-#pragma clang diagnostic ignored "-Wfloat-equal"            // warning : comparing floating point with == or != is unsafe   // storing and comparing against same constants (typically 0.0f) is ok.
-#pragma clang diagnostic ignored "-Wformat-nonliteral"      // warning : format string is not a string literal              // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
-#pragma clang diagnostic ignored "-Wsign-conversion"        // warning : implicit conversion changes signedness             //
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning : zero as null pointer constant              // some standard header variations use #define NULL 0
-#endif
-#if __has_warning("-Wdouble-promotion")
-#pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
-#endif
-#if __has_warning("-Wdeprecated-enum-enum-conversion")
-#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
-#endif
-#elif defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
-#pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked
-#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
-#endif
-
-//-------------------------------------------------------------------------
-// Data
-//-------------------------------------------------------------------------
-
-// Those MIN/MAX values are not define because we need to point to them
-static const signed char    IM_S8_MIN  = -128;
-static const signed char    IM_S8_MAX  = 127;
-static const unsigned char  IM_U8_MIN  = 0;
-static const unsigned char  IM_U8_MAX  = 0xFF;
-static const signed short   IM_S16_MIN = -32768;
-static const signed short   IM_S16_MAX = 32767;
-static const unsigned short IM_U16_MIN = 0;
-static const unsigned short IM_U16_MAX = 0xFFFF;
-static const ImS32          IM_S32_MIN = INT_MIN;    // (-2147483647 - 1), (0x80000000);
-static const ImS32          IM_S32_MAX = INT_MAX;    // (2147483647), (0x7FFFFFFF)
-static const ImU32          IM_U32_MIN = 0;
-static const ImU32          IM_U32_MAX = UINT_MAX;   // (0xFFFFFFFF)
-#ifdef LLONG_MIN
-static const ImS64          IM_S64_MIN = LLONG_MIN;  // (-9223372036854775807ll - 1ll);
-static const ImS64          IM_S64_MAX = LLONG_MAX;  // (9223372036854775807ll);
-#else
-static const ImS64          IM_S64_MIN = -9223372036854775807LL - 1;
-static const ImS64          IM_S64_MAX = 9223372036854775807LL;
-#endif
-static const ImU64          IM_U64_MIN = 0;
-#ifdef ULLONG_MAX
-static const ImU64          IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull);
-#else
-static const ImU64          IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
-#endif
-
-//-------------------------------------------------------------------------
-// [SECTION] Forward Declarations
-//-------------------------------------------------------------------------
-
-// For InputTextEx()
-static bool             InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data);
-static int              InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
-static ImVec2           InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Text, etc.
-//-------------------------------------------------------------------------
-// - TextEx() [Internal]
-// - TextUnformatted()
-// - Text()
-// - TextV()
-// - TextColored()
-// - TextColoredV()
-// - TextDisabled()
-// - TextDisabledV()
-// - TextWrapped()
-// - TextWrappedV()
-// - LabelText()
-// - LabelTextV()
-// - BulletText()
-// - BulletTextV()
-//-------------------------------------------------------------------------
-
-void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(text != NULL);
-    const char* text_begin = text;
-    if (text_end == NULL)
-        text_end = text + strlen(text); // FIXME-OPT
-
-    const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
-    const float wrap_pos_x = window->DC.TextWrapPos;
-    const bool wrap_enabled = (wrap_pos_x >= 0.0f);
-    if (text_end - text > 2000 && !wrap_enabled)
-    {
-        // Long text!
-        // Perform manual coarse clipping to optimize for long multi-line text
-        // - From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled.
-        // - We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line.
-        // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
-        const char* line = text;
-        const float line_height = GetTextLineHeight();
-        ImVec2 text_size(0,0);
-
-        // Lines to skip (can't skip when logging text)
-        ImVec2 pos = text_pos;
-        if (!g.LogEnabled)
-        {
-            int lines_skippable = (int)((window->ClipRect.Min.y - text_pos.y) / line_height);
-            if (lines_skippable > 0)
-            {
-                int lines_skipped = 0;
-                while (line < text_end && lines_skipped < lines_skippable)
-                {
-                    const char* line_end = (const char*)memchr(line, '\n', text_end - line);
-                    if (!line_end)
-                        line_end = text_end;
-                    if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
-                        text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
-                    line = line_end + 1;
-                    lines_skipped++;
-                }
-                pos.y += lines_skipped * line_height;
-            }
-        }
-
-        // Lines to render
-        if (line < text_end)
-        {
-            ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height));
-            while (line < text_end)
-            {
-                if (IsClippedEx(line_rect, 0, false))
-                    break;
-
-                const char* line_end = (const char*)memchr(line, '\n', text_end - line);
-                if (!line_end)
-                    line_end = text_end;
-                text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
-                RenderText(pos, line, line_end, false);
-                line = line_end + 1;
-                line_rect.Min.y += line_height;
-                line_rect.Max.y += line_height;
-                pos.y += line_height;
-            }
-
-            // Count remaining lines
-            int lines_skipped = 0;
-            while (line < text_end)
-            {
-                const char* line_end = (const char*)memchr(line, '\n', text_end - line);
-                if (!line_end)
-                    line_end = text_end;
-                if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
-                    text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
-                line = line_end + 1;
-                lines_skipped++;
-            }
-            pos.y += lines_skipped * line_height;
-        }
-        text_size.y = (pos - text_pos).y;
-
-        ImRect bb(text_pos, text_pos + text_size);
-        ItemSize(text_size, 0.0f);
-        ItemAdd(bb, 0);
-    }
-    else
-    {
-        const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f;
-        const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width);
-
-        ImRect bb(text_pos, text_pos + text_size);
-        ItemSize(text_size, 0.0f);
-        if (!ItemAdd(bb, 0))
-            return;
-
-        // Render (we don't hide text after ## in this end-user function)
-        RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width);
-    }
-}
-
-void ImGui::TextUnformatted(const char* text, const char* text_end)
-{
-    TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
-}
-
-void ImGui::Text(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    TextV(fmt, args);
-    va_end(args);
-}
-
-void ImGui::TextV(const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const char* text_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
-    TextEx(g.TempBuffer, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
-}
-
-void ImGui::TextColored(const ImVec4& col, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    TextColoredV(col, fmt, args);
-    va_end(args);
-}
-
-void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args)
-{
-    PushStyleColor(ImGuiCol_Text, col);
-    TextV(fmt, args);
-    PopStyleColor();
-}
-
-void ImGui::TextDisabled(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    TextDisabledV(fmt, args);
-    va_end(args);
-}
-
-void ImGui::TextDisabledV(const char* fmt, va_list args)
-{
-    PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]);
-    TextV(fmt, args);
-    PopStyleColor();
-}
-
-void ImGui::TextWrapped(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    TextWrappedV(fmt, args);
-    va_end(args);
-}
-
-void ImGui::TextWrappedV(const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    bool need_backup = (window->DC.TextWrapPos < 0.0f);  // Keep existing wrap position if one is already set
-    if (need_backup)
-        PushTextWrapPos(0.0f);
-    TextV(fmt, args);
-    if (need_backup)
-        PopTextWrapPos();
-}
-
-void ImGui::LabelText(const char* label, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    LabelTextV(label, fmt, args);
-    va_end(args);
-}
-
-// Add a label+text combo aligned to other label+value widgets
-void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const float w = CalcItemWidth();
-
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2));
-    const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size);
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, 0))
-        return;
-
-    // Render
-    const char* value_text_begin = &g.TempBuffer[0];
-    const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
-    RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f));
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label);
-}
-
-void ImGui::BulletText(const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    BulletTextV(fmt, args);
-    va_end(args);
-}
-
-// Text with a little bullet aligned to the typical tree node.
-void ImGui::BulletTextV(const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-
-    const char* text_begin = g.TempBuffer;
-    const char* text_end = text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
-    const ImVec2 label_size = CalcTextSize(text_begin, text_end, false);
-    const ImVec2 total_size = ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x * 2) : 0.0f), label_size.y);  // Empty text doesn't add padding
-    ImVec2 pos = window->DC.CursorPos;
-    pos.y += window->DC.CurrLineTextBaseOffset;
-    ItemSize(total_size, 0.0f);
-    const ImRect bb(pos, pos + total_size);
-    if (!ItemAdd(bb, 0))
-        return;
-
-    // Render
-    ImU32 text_col = GetColorU32(ImGuiCol_Text);
-    RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, g.FontSize*0.5f), text_col);
-    RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false);
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Main
-//-------------------------------------------------------------------------
-// - ButtonBehavior() [Internal]
-// - Button()
-// - SmallButton()
-// - InvisibleButton()
-// - ArrowButton()
-// - CloseButton() [Internal]
-// - CollapseButton() [Internal]
-// - ScrollbarEx() [Internal]
-// - Scrollbar() [Internal]
-// - Image()
-// - ImageButton()
-// - Checkbox()
-// - CheckboxFlags()
-// - RadioButton()
-// - ProgressBar()
-// - Bullet()
-//-------------------------------------------------------------------------
-
-// The ButtonBehavior() function is key to many interactions and used by many/most widgets.
-// Because we handle so many cases (keyboard/gamepad navigation, drag and drop) and many specific behavior (via ImGuiButtonFlags_),
-// this code is a little complex.
-// By far the most common path is interacting with the Mouse using the default ImGuiButtonFlags_PressedOnClickRelease button behavior.
-// See the series of events below and the corresponding state reported by dear imgui:
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// with PressedOnClickRelease:             return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
-//   Frame N+0 (mouse is outside bb)        -             -                -               -                  -                    -
-//   Frame N+1 (mouse moves inside bb)      -             true             -               -                  -                    -
-//   Frame N+2 (mouse button is down)       -             true             true            true               -                    true
-//   Frame N+3 (mouse button is down)       -             true             true            -                  -                    -
-//   Frame N+4 (mouse moves outside bb)     -             -                true            -                  -                    -
-//   Frame N+5 (mouse moves inside bb)      -             true             true            -                  -                    -
-//   Frame N+6 (mouse button is released)   true          true             -               -                  true                 -
-//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
-//   Frame N+8 (mouse moves outside bb)     -             -                -               -                  -                    -
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// with PressedOnClick:                    return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
-//   Frame N+2 (mouse button is down)       true          true             true            true               -                    true
-//   Frame N+3 (mouse button is down)       -             true             true            -                  -                    -
-//   Frame N+6 (mouse button is released)   -             true             -               -                  true                 -
-//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// with PressedOnRelease:                  return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
-//   Frame N+2 (mouse button is down)       -             true             -               -                  -                    true
-//   Frame N+3 (mouse button is down)       -             true             -               -                  -                    -
-//   Frame N+6 (mouse button is released)   true          true             -               -                  -                    -
-//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// with PressedOnDoubleClick:              return-value  IsItemHovered()  IsItemActive()  IsItemActivated()  IsItemDeactivated()  IsItemClicked()
-//   Frame N+0 (mouse button is down)       -             true             -               -                  -                    true
-//   Frame N+1 (mouse button is down)       -             true             -               -                  -                    -
-//   Frame N+2 (mouse button is released)   -             true             -               -                  -                    -
-//   Frame N+3 (mouse button is released)   -             true             -               -                  -                    -
-//   Frame N+4 (mouse button is down)       true          true             true            true               -                    true
-//   Frame N+5 (mouse button is down)       -             true             true            -                  -                    -
-//   Frame N+6 (mouse button is released)   -             true             -               -                  true                 -
-//   Frame N+7 (mouse button is released)   -             true             -               -                  -                    -
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// Note that some combinations are supported,
-// - PressedOnDragDropHold can generally be associated with any flag.
-// - PressedOnDoubleClick can be associated by PressedOnClickRelease/PressedOnRelease, in which case the second release event won't be reported.
-//------------------------------------------------------------------------------------------------------------------------------------------------
-// The behavior of the return-value changes when ImGuiButtonFlags_Repeat is set:
-//                                         Repeat+                  Repeat+           Repeat+             Repeat+
-//                                         PressedOnClickRelease    PressedOnClick    PressedOnRelease    PressedOnDoubleClick
-//-------------------------------------------------------------------------------------------------------------------------------------------------
-//   Frame N+0 (mouse button is down)       -                        true              -                   true
-//   ...                                    -                        -                 -                   -
-//   Frame N + RepeatDelay                  true                     true              -                   true
-//   ...                                    -                        -                 -                   -
-//   Frame N + RepeatDelay + RepeatRate*N   true                     true              -                   true
-//-------------------------------------------------------------------------------------------------------------------------------------------------
-
-bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-
-    if (flags & ImGuiButtonFlags_Disabled)
-    {
-        if (out_hovered) *out_hovered = false;
-        if (out_held) *out_held = false;
-        if (g.ActiveId == id) ClearActiveID();
-        return false;
-    }
-
-    // Default only reacts to left mouse button
-    if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0)
-        flags |= ImGuiButtonFlags_MouseButtonDefault_;
-
-    // Default behavior requires click + release inside bounding box
-    if ((flags & ImGuiButtonFlags_PressedOnMask_) == 0)
-        flags |= ImGuiButtonFlags_PressedOnDefault_;
-
-    ImGuiWindow* backup_hovered_window = g.HoveredWindow;
-    const bool flatten_hovered_children = (flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredRootWindow == window;
-    if (flatten_hovered_children)
-        g.HoveredWindow = window;
-
-#ifdef IMGUI_ENABLE_TEST_ENGINE
-    if (id != 0 && window->DC.LastItemId != id)
-        ImGuiTestEngineHook_ItemAdd(&g, bb, id);
-#endif
-
-    bool pressed = false;
-    bool hovered = ItemHoverable(bb, id);
-
-    // Drag source doesn't report as hovered
-    if (hovered && g.DragDropActive && g.DragDropPayload.SourceId == id && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoDisableHover))
-        hovered = false;
-
-    // Special mode for Drag and Drop where holding button pressed for a long time while dragging another item triggers the button
-    if (g.DragDropActive && (flags & ImGuiButtonFlags_PressedOnDragDropHold) && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
-        if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
-        {
-            hovered = true;
-            SetHoveredID(id);
-            if (CalcTypematicRepeatAmount(g.HoveredIdTimer + 0.0001f - g.IO.DeltaTime, g.HoveredIdTimer + 0.0001f, 0.70f, 0.00f))
-            {
-                pressed = true;
-                FocusWindow(window);
-            }
-        }
-
-    if (flatten_hovered_children)
-        g.HoveredWindow = backup_hovered_window;
-
-    // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
-    if (hovered && (flags & ImGuiButtonFlags_AllowItemOverlap) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0))
-        hovered = false;
-
-    // Mouse handling
-    if (hovered)
-    {
-        if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt))
-        {
-            // Poll buttons
-            int mouse_button_clicked = -1;
-            int mouse_button_released = -1;
-            if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseClicked[0])         { mouse_button_clicked = 0; }
-            else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseClicked[1])   { mouse_button_clicked = 1; }
-            else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseClicked[2])  { mouse_button_clicked = 2; }
-            if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0])        { mouse_button_released = 0; }
-            else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1])  { mouse_button_released = 1; }
-            else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; }
-
-            if (mouse_button_clicked != -1 && g.ActiveId != id)
-            {
-                if (flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere))
-                {
-                    SetActiveID(id, window);
-                    g.ActiveIdMouseButton = mouse_button_clicked;
-                    if (!(flags & ImGuiButtonFlags_NoNavFocus))
-                        SetFocusID(id, window);
-                    FocusWindow(window);
-                }
-                if ((flags & ImGuiButtonFlags_PressedOnClick) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[mouse_button_clicked]))
-                {
-                    pressed = true;
-                    if (flags & ImGuiButtonFlags_NoHoldingActiveId)
-                        ClearActiveID();
-                    else
-                        SetActiveID(id, window); // Hold on ID
-                    g.ActiveIdMouseButton = mouse_button_clicked;
-                    FocusWindow(window);
-                }
-            }
-            if ((flags & ImGuiButtonFlags_PressedOnRelease) && mouse_button_released != -1)
-            {
-                // Repeat mode trumps on release behavior
-                if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay))
-                    pressed = true;
-                ClearActiveID();
-            }
-
-            // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above).
-            // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings.
-            if (g.ActiveId == id && (flags & ImGuiButtonFlags_Repeat))
-                if (g.IO.MouseDownDuration[g.ActiveIdMouseButton] > 0.0f && IsMouseClicked(g.ActiveIdMouseButton, true))
-                    pressed = true;
-        }
-
-        if (pressed)
-            g.NavDisableHighlight = true;
-    }
-
-    // Gamepad/Keyboard navigation
-    // We report navigated item as hovered but we don't set g.HoveredId to not interfere with mouse.
-    if (g.NavId == id && !g.NavDisableHighlight && g.NavDisableMouseHover && (g.ActiveId == 0 || g.ActiveId == id || g.ActiveId == window->MoveId))
-        if (!(flags & ImGuiButtonFlags_NoHoveredOnFocus))
-            hovered = true;
-    if (g.NavActivateDownId == id)
-    {
-        bool nav_activated_by_code = (g.NavActivateId == id);
-        bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiInputReadMode_Repeat : ImGuiInputReadMode_Pressed);
-        if (nav_activated_by_code || nav_activated_by_inputs)
-            pressed = true;
-        if (nav_activated_by_code || nav_activated_by_inputs || g.ActiveId == id)
-        {
-            // Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button.
-            g.NavActivateId = id; // This is so SetActiveId assign a Nav source
-            SetActiveID(id, window);
-            if ((nav_activated_by_code || nav_activated_by_inputs) && !(flags & ImGuiButtonFlags_NoNavFocus))
-                SetFocusID(id, window);
-        }
-    }
-
-    bool held = false;
-    if (g.ActiveId == id)
-    {
-        if (g.ActiveIdSource == ImGuiInputSource_Mouse)
-        {
-            if (g.ActiveIdIsJustActivated)
-                g.ActiveIdClickOffset = g.IO.MousePos - bb.Min;
-
-            const int mouse_button = g.ActiveIdMouseButton;
-            IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT);
-            if (g.IO.MouseDown[mouse_button])
-            {
-                held = true;
-            }
-            else
-            {
-                bool release_in = hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease) != 0;
-                bool release_anywhere = (flags & ImGuiButtonFlags_PressedOnClickReleaseAnywhere) != 0;
-                if ((release_in || release_anywhere) && !g.DragDropActive)
-                {
-                    bool is_double_click_release = (flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDownWasDoubleClick[mouse_button];
-                    bool is_repeating_already = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button] >= g.IO.KeyRepeatDelay; // Repeat mode trumps <on release>
-                    if (!is_double_click_release && !is_repeating_already)
-                        pressed = true;
-                }
-                ClearActiveID();
-            }
-            if (!(flags & ImGuiButtonFlags_NoNavFocus))
-                g.NavDisableHighlight = true;
-        }
-        else if (g.ActiveIdSource == ImGuiInputSource_Nav)
-        {
-            if (g.NavActivateDownId != id)
-                ClearActiveID();
-        }
-        if (pressed)
-            g.ActiveIdHasBeenPressedBefore = true;
-    }
-
-    if (out_hovered) *out_hovered = hovered;
-    if (out_held) *out_held = held;
-
-    return pressed;
-}
-
-bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-
-    ImVec2 pos = window->DC.CursorPos;
-    if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
-        pos.y += window->DC.CurrLineTextBaseOffset - style.FramePadding.y;
-    ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);
-
-    const ImRect bb(pos, pos + size);
-    ItemSize(size, style.FramePadding.y);
-    if (!ItemAdd(bb, id))
-        return false;
-
-    if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat)
-        flags |= ImGuiButtonFlags_Repeat;
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
-
-    // Render
-    const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
-    RenderNavHighlight(bb, id);
-    RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
-    RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
-
-    // Automatically close popups
-    //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
-    //    CloseCurrentPopup();
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
-    return pressed;
-}
-
-bool ImGui::Button(const char* label, const ImVec2& size_arg)
-{
-    return ButtonEx(label, size_arg, 0);
-}
-
-// Small buttons fits within text without additional vertical spacing.
-bool ImGui::SmallButton(const char* label)
-{
-    ImGuiContext& g = *GImGui;
-    float backup_padding_y = g.Style.FramePadding.y;
-    g.Style.FramePadding.y = 0.0f;
-    bool pressed = ButtonEx(label, ImVec2(0, 0), ImGuiButtonFlags_AlignTextBaseLine);
-    g.Style.FramePadding.y = backup_padding_y;
-    return pressed;
-}
-
-// Tip: use ImGui::PushID()/PopID() to push indices or pointers in the ID stack.
-// Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id)
-bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    // Cannot use zero-size for InvisibleButton(). Unlike Button() there is not way to fallback using the label size.
-    IM_ASSERT(size_arg.x != 0.0f && size_arg.y != 0.0f);
-
-    const ImGuiID id = window->GetID(str_id);
-    ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f);
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    ItemSize(size);
-    if (!ItemAdd(bb, id))
-        return false;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
-
-    return pressed;
-}
-
-bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiButtonFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiID id = window->GetID(str_id);
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    const float default_size = GetFrameHeight();
-    ItemSize(size, (size.y >= default_size) ? g.Style.FramePadding.y : -1.0f);
-    if (!ItemAdd(bb, id))
-        return false;
-
-    if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat)
-        flags |= ImGuiButtonFlags_Repeat;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
-
-    // Render
-    const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
-    const ImU32 text_col = GetColorU32(ImGuiCol_Text);
-    RenderNavHighlight(bb, id);
-    RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding);
-    RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir);
-
-    return pressed;
-}
-
-bool ImGui::ArrowButton(const char* str_id, ImGuiDir dir)
-{
-    float sz = GetFrameHeight();
-    return ArrowButtonEx(str_id, dir, ImVec2(sz, sz), ImGuiButtonFlags_None);
-}
-
-// Button to close a window
-bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    // We intentionally allow interaction when clipped so that a mechanical Alt,Right,Validate sequence close a window.
-    // (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible).
-    const ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
-    bool is_clipped = !ItemAdd(bb, id);
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
-    if (is_clipped)
-        return pressed;
-
-    // Render
-    ImU32 col = GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered);
-    ImVec2 center = bb.GetCenter();
-    if (hovered)
-        window->DrawList->AddCircleFilled(center, ImMax(2.0f, g.FontSize * 0.5f + 1.0f), col, 12);
-
-    float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f;
-    ImU32 cross_col = GetColorU32(ImGuiCol_Text);
-    center -= ImVec2(0.5f, 0.5f);
-    window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), cross_col, 1.0f);
-    window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), cross_col, 1.0f);
-
-    return pressed;
-}
-
-bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
-    ItemAdd(bb, id);
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
-
-    // Render
-    ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
-    ImU32 text_col = GetColorU32(ImGuiCol_Text);
-    ImVec2 center = bb.GetCenter();
-    if (hovered || held)
-        window->DrawList->AddCircleFilled(center/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col, 12);
-    RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
-
-    // Switch to moving the window after mouse is moved beyond the initial drag threshold
-    if (IsItemActive() && IsMouseDragging(0))
-        StartMouseMovingWindow(window);
-
-    return pressed;
-}
-
-ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
-{
-    return window->GetIDNoKeepAlive(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY");
-}
-
-// Vertical/Horizontal scrollbar
-// The entire piece of code below is rather confusing because:
-// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
-// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar
-// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal.
-// Still, the code should probably be made simpler..
-bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, float* p_scroll_v, float size_avail_v, float size_contents_v, ImDrawCornerFlags rounding_corners)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return false;
-
-    const float bb_frame_width = bb_frame.GetWidth();
-    const float bb_frame_height = bb_frame.GetHeight();
-    if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f)
-        return false;
-
-    // When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the resize grab)
-    float alpha = 1.0f;
-    if ((axis == ImGuiAxis_Y) && bb_frame_height < g.FontSize + g.Style.FramePadding.y * 2.0f)
-        alpha = ImSaturate((bb_frame_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f));
-    if (alpha <= 0.0f)
-        return false;
-
-    const ImGuiStyle& style = g.Style;
-    const bool allow_interaction = (alpha >= 1.0f);
-    const bool horizontal = (axis == ImGuiAxis_X);
-
-    ImRect bb = bb_frame;
-    bb.Expand(ImVec2(-ImClamp(IM_FLOOR((bb_frame_width - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp(IM_FLOOR((bb_frame_height - 2.0f) * 0.5f), 0.0f, 3.0f)));
-
-    // V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
-    const float scrollbar_size_v = horizontal ? bb.GetWidth() : bb.GetHeight();
-
-    // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount)
-    // But we maintain a minimum size in pixel to allow for the user to still aim inside.
-    IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
-    const float win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), 1.0f);
-    const float grab_h_pixels = ImClamp(scrollbar_size_v * (size_avail_v / win_size_v), style.GrabMinSize, scrollbar_size_v);
-    const float grab_h_norm = grab_h_pixels / scrollbar_size_v;
-
-    // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar().
-    bool held = false;
-    bool hovered = false;
-    ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus);
-
-    float scroll_max = ImMax(1.0f, size_contents_v - size_avail_v);
-    float scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
-    float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
-    if (held && allow_interaction && grab_h_norm < 1.0f)
-    {
-        float scrollbar_pos_v = horizontal ? bb.Min.x : bb.Min.y;
-        float mouse_pos_v = horizontal ? g.IO.MousePos.x : g.IO.MousePos.y;
-
-        // Click position in scrollbar normalized space (0.0f->1.0f)
-        const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v);
-        SetHoveredID(id);
-
-        bool seek_absolute = false;
-        if (g.ActiveIdIsJustActivated)
-        {
-            // On initial click calculate the distance between mouse and the center of the grab
-            seek_absolute = (clicked_v_norm < grab_v_norm || clicked_v_norm > grab_v_norm + grab_h_norm);
-            if (seek_absolute)
-                g.ScrollbarClickDeltaToGrabCenter = 0.0f;
-            else
-                g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
-        }
-
-        // Apply scroll
-        // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position
-        const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm));
-        *p_scroll_v = IM_ROUND(scroll_v_norm * scroll_max);//(win_size_contents_v - win_size_v));
-
-        // Update values for rendering
-        scroll_ratio = ImSaturate(*p_scroll_v / scroll_max);
-        grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
-
-        // Update distance to grab now that we have seeked and saturated
-        if (seek_absolute)
-            g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
-    }
-
-    // Render
-    window->DrawList->AddRectFilled(bb_frame.Min, bb_frame.Max, GetColorU32(ImGuiCol_ScrollbarBg), window->WindowRounding, rounding_corners);
-    const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha);
-    ImRect grab_rect;
-    if (horizontal)
-        grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y);
-    else
-        grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels);
-    window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding);
-
-    return held;
-}
-
-void ImGui::Scrollbar(ImGuiAxis axis)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    const ImGuiID id = GetWindowScrollbarID(window, axis);
-    KeepAliveID(id);
-
-    // Calculate scrollbar bounding box
-    const ImRect outer_rect = window->Rect();
-    const ImRect inner_rect = window->InnerRect;
-    const float border_size = window->WindowBorderSize;
-    const float scrollbar_size = window->ScrollbarSizes[axis ^ 1];
-    IM_ASSERT(scrollbar_size > 0.0f);
-    const float other_scrollbar_size = window->ScrollbarSizes[axis];
-    ImDrawCornerFlags rounding_corners = (other_scrollbar_size <= 0.0f) ? ImDrawCornerFlags_BotRight : 0;
-    ImRect bb;
-    if (axis == ImGuiAxis_X)
-    {
-        bb.Min = ImVec2(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size));
-        bb.Max = ImVec2(inner_rect.Max.x, outer_rect.Max.y);
-        rounding_corners |= ImDrawCornerFlags_BotLeft;
-    }
-    else
-    {
-        bb.Min = ImVec2(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y);
-        bb.Max = ImVec2(outer_rect.Max.x, window->InnerRect.Max.y);
-        rounding_corners |= ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar)) ? ImDrawCornerFlags_TopRight : 0;
-    }
-    ScrollbarEx(bb, id, axis, &window->Scroll[axis], inner_rect.Max[axis] - inner_rect.Min[axis], window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f, rounding_corners);
-}
-
-void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    if (border_col.w > 0.0f)
-        bb.Max += ImVec2(2, 2);
-    ItemSize(bb);
-    if (!ItemAdd(bb, 0))
-        return;
-
-    if (border_col.w > 0.0f)
-    {
-        window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(border_col), 0.0f);
-        window->DrawList->AddImage(user_texture_id, bb.Min + ImVec2(1, 1), bb.Max - ImVec2(1, 1), uv0, uv1, GetColorU32(tint_col));
-    }
-    else
-    {
-        window->DrawList->AddImage(user_texture_id, bb.Min, bb.Max, uv0, uv1, GetColorU32(tint_col));
-    }
-}
-
-// frame_padding < 0: uses FramePadding from style (default)
-// frame_padding = 0: no framing
-// frame_padding > 0: set framing size
-// The color used are the button colors.
-bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col, const ImVec4& tint_col)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-
-    // Default to using texture ID as ID. User can still push string/integer prefixes.
-    // We could hash the size/uv to create a unique ID but that would prevent the user from animating UV.
-    PushID((void*)(intptr_t)user_texture_id);
-    const ImGuiID id = window->GetID("#image");
-    PopID();
-
-    const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : style.FramePadding;
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding * 2);
-    const ImRect image_bb(window->DC.CursorPos + padding, window->DC.CursorPos + padding + size);
-    ItemSize(bb);
-    if (!ItemAdd(bb, id))
-        return false;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
-
-    // Render
-    const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
-    RenderNavHighlight(bb, id);
-    RenderFrame(bb.Min, bb.Max, col, true, ImClamp((float)ImMin(padding.x, padding.y), 0.0f, style.FrameRounding));
-    if (bg_col.w > 0.0f)
-        window->DrawList->AddRectFilled(image_bb.Min, image_bb.Max, GetColorU32(bg_col));
-    window->DrawList->AddImage(user_texture_id, image_bb.Min, image_bb.Max, uv0, uv1, GetColorU32(tint_col));
-
-    return pressed;
-}
-
-bool ImGui::Checkbox(const char* label, bool* v)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-
-    const float square_sz = GetFrameHeight();
-    const ImVec2 pos = window->DC.CursorPos;
-    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, id))
-        return false;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
-    if (pressed)
-    {
-        *v = !(*v);
-        MarkItemEdited(id);
-    }
-
-    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
-    RenderNavHighlight(total_bb, id);
-    RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
-    ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
-    if (window->DC.ItemFlags & ImGuiItemFlags_MixedValue)
-    {
-        // Undocumented tristate/mixed/indeterminate checkbox (#2644)
-        ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)));
-        window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
-    }
-    else if (*v)
-    {
-        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
-        RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f);
-    }
-
-    if (g.LogEnabled)
-        LogRenderedText(&total_bb.Min, *v ? "[x]" : "[ ]");
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
-    return pressed;
-}
-
-bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value)
-{
-    bool v = ((*flags & flags_value) == flags_value);
-    bool pressed = Checkbox(label, &v);
-    if (pressed)
-    {
-        if (v)
-            *flags |= flags_value;
-        else
-            *flags &= ~flags_value;
-    }
-
-    return pressed;
-}
-
-bool ImGui::RadioButton(const char* label, bool active)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-
-    const float square_sz = GetFrameHeight();
-    const ImVec2 pos = window->DC.CursorPos;
-    const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
-    const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, id))
-        return false;
-
-    ImVec2 center = check_bb.GetCenter();
-    center.x = IM_ROUND(center.x);
-    center.y = IM_ROUND(center.y);
-    const float radius = (square_sz - 1.0f) * 0.5f;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
-    if (pressed)
-        MarkItemEdited(id);
-
-    RenderNavHighlight(total_bb, id);
-    window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16);
-    if (active)
-    {
-        const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
-        window->DrawList->AddCircleFilled(center, radius - pad, GetColorU32(ImGuiCol_CheckMark), 16);
-    }
-
-    if (style.FrameBorderSize > 0.0f)
-    {
-        window->DrawList->AddCircle(center + ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
-        window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize);
-    }
-
-    if (g.LogEnabled)
-        LogRenderedText(&total_bb.Min, active ? "(x)" : "( )");
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y), label);
-
-    return pressed;
-}
-
-// FIXME: This would work nicely if it was a public template, e.g. 'template<T> RadioButton(const char* label, T* v, T v_button)', but I'm not sure how we would expose it..
-bool ImGui::RadioButton(const char* label, int* v, int v_button)
-{
-    const bool pressed = RadioButton(label, *v == v_button);
-    if (pressed)
-        *v = v_button;
-    return pressed;
-}
-
-// size_arg (for each axis) < 0.0f: align to end, 0.0f: auto, > 0.0f: specified size
-void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* overlay)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-
-    ImVec2 pos = window->DC.CursorPos;
-    ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f);
-    ImRect bb(pos, pos + size);
-    ItemSize(size, style.FramePadding.y);
-    if (!ItemAdd(bb, 0))
-        return;
-
-    // Render
-    fraction = ImSaturate(fraction);
-    RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
-    bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize));
-    const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y);
-    RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding);
-
-    // Default displaying the fraction as percentage string, but user can override it
-    char overlay_buf[32];
-    if (!overlay)
-    {
-        ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction*100+0.01f);
-        overlay = overlay_buf;
-    }
-
-    ImVec2 overlay_size = CalcTextSize(overlay, NULL);
-    if (overlay_size.x > 0.0f)
-        RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb);
-}
-
-void ImGui::Bullet()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize);
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height));
-    ItemSize(bb);
-    if (!ItemAdd(bb, 0))
-    {
-        SameLine(0, style.FramePadding.x*2);
-        return;
-    }
-
-    // Render and stay on same line
-    ImU32 text_col = GetColorU32(ImGuiCol_Text);
-    RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col);
-    SameLine(0, style.FramePadding.x * 2.0f);
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Low-level Layout helpers
-//-------------------------------------------------------------------------
-// - Spacing()
-// - Dummy()
-// - NewLine()
-// - AlignTextToFramePadding()
-// - SeparatorEx() [Internal]
-// - Separator()
-// - SplitterBehavior() [Internal]
-// - ShrinkWidths() [Internal]
-//-------------------------------------------------------------------------
-
-void ImGui::Spacing()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-    ItemSize(ImVec2(0,0));
-}
-
-void ImGui::Dummy(const ImVec2& size)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    ItemSize(size);
-    ItemAdd(bb, 0);
-}
-
-void ImGui::NewLine()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiLayoutType backup_layout_type = window->DC.LayoutType;
-    window->DC.LayoutType = ImGuiLayoutType_Vertical;
-    if (window->DC.CurrLineSize.y > 0.0f)     // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
-        ItemSize(ImVec2(0,0));
-    else
-        ItemSize(ImVec2(0.0f, g.FontSize));
-    window->DC.LayoutType = backup_layout_type;
-}
-
-void ImGui::AlignTextToFramePadding()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    window->DC.CurrLineSize.y = ImMax(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2);
-    window->DC.CurrLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, g.Style.FramePadding.y);
-}
-
-// Horizontal/vertical separating line
-void ImGui::SeparatorEx(ImGuiSeparatorFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(ImIsPowerOfTwo(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical)));   // Check that only 1 option is selected
-
-    float thickness_draw = 1.0f;
-    float thickness_layout = 0.0f;
-    if (flags & ImGuiSeparatorFlags_Vertical)
-    {
-        // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
-        float y1 = window->DC.CursorPos.y;
-        float y2 = window->DC.CursorPos.y + window->DC.CurrLineSize.y;
-        const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + thickness_draw, y2));
-        ItemSize(ImVec2(thickness_layout, 0.0f));
-        if (!ItemAdd(bb, 0))
-            return;
-
-        // Draw
-        window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
-        if (g.LogEnabled)
-            LogText(" |");
-    }
-    else if (flags & ImGuiSeparatorFlags_Horizontal)
-    {
-        // Horizontal Separator
-        float x1 = window->Pos.x;
-        float x2 = window->Pos.x + window->Size.x;
-        if (!window->DC.GroupStack.empty())
-            x1 += window->DC.Indent.x;
-
-        ImGuiColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL;
-        if (columns)
-            PushColumnsBackground();
-
-        // We don't provide our width to the layout so that it doesn't get feed back into AutoFit
-        const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw));
-        ItemSize(ImVec2(0.0f, thickness_layout));
-        const bool item_visible = ItemAdd(bb, 0);
-        if (item_visible)
-        {
-            // Draw
-            window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x, bb.Min.y), GetColorU32(ImGuiCol_Separator));
-            if (g.LogEnabled)
-                LogRenderedText(&bb.Min, "--------------------------------");
-        }
-        if (columns)
-        {
-            PopColumnsBackground();
-            columns->LineMinY = window->DC.CursorPos.y;
-        }
-    }
-}
-
-void ImGui::Separator()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    // Those flags should eventually be overridable by the user
-    ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
-    flags |= ImGuiSeparatorFlags_SpanAllColumns;
-    SeparatorEx(flags);
-}
-
-// Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise.
-bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    const ImGuiItemFlags item_flags_backup = window->DC.ItemFlags;
-    window->DC.ItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus;
-    bool item_add = ItemAdd(bb, id);
-    window->DC.ItemFlags = item_flags_backup;
-    if (!item_add)
-        return false;
-
-    bool hovered, held;
-    ImRect bb_interact = bb;
-    bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f));
-    ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap);
-    if (g.ActiveId != id)
-        SetItemAllowOverlap();
-
-    if (held || (g.HoveredId == id && g.HoveredIdPreviousFrame == id && g.HoveredIdTimer >= hover_visibility_delay))
-        SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW);
-
-    ImRect bb_render = bb;
-    if (held)
-    {
-        ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min;
-        float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
-
-        // Minimum pane size
-        float size_1_maximum_delta = ImMax(0.0f, *size1 - min_size1);
-        float size_2_maximum_delta = ImMax(0.0f, *size2 - min_size2);
-        if (mouse_delta < -size_1_maximum_delta)
-            mouse_delta = -size_1_maximum_delta;
-        if (mouse_delta > size_2_maximum_delta)
-            mouse_delta = size_2_maximum_delta;
-
-        // Apply resize
-        if (mouse_delta != 0.0f)
-        {
-            if (mouse_delta < 0.0f)
-                IM_ASSERT(*size1 + mouse_delta >= min_size1);
-            if (mouse_delta > 0.0f)
-                IM_ASSERT(*size2 - mouse_delta >= min_size2);
-            *size1 += mouse_delta;
-            *size2 -= mouse_delta;
-            bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
-            MarkItemEdited(id);
-        }
-    }
-
-    // Render
-    const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
-    window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, col, 0.0f);
-
-    return held;
-}
-
-static int IMGUI_CDECL ShrinkWidthItemComparer(const void* lhs, const void* rhs)
-{
-    const ImGuiShrinkWidthItem* a = (const ImGuiShrinkWidthItem*)lhs;
-    const ImGuiShrinkWidthItem* b = (const ImGuiShrinkWidthItem*)rhs;
-    if (int d = (int)(b->Width - a->Width))
-        return d;
-    return (b->Index - a->Index);
-}
-
-// Shrink excess width from a set of item, by removing width from the larger items first.
-void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess)
-{
-    if (count == 1)
-    {
-        items[0].Width = ImMax(items[0].Width - width_excess, 1.0f);
-        return;
-    }
-    ImQsort(items, (size_t)count, sizeof(ImGuiShrinkWidthItem), ShrinkWidthItemComparer);
-    int count_same_width = 1;
-    while (width_excess > 0.0f && count_same_width < count)
-    {
-        while (count_same_width < count && items[0].Width <= items[count_same_width].Width)
-            count_same_width++;
-        float max_width_to_remove_per_item = (count_same_width < count) ? (items[0].Width - items[count_same_width].Width) : (items[0].Width - 1.0f);
-        float width_to_remove_per_item = ImMin(width_excess / count_same_width, max_width_to_remove_per_item);
-        for (int item_n = 0; item_n < count_same_width; item_n++)
-            items[item_n].Width -= width_to_remove_per_item;
-        width_excess -= width_to_remove_per_item * count_same_width;
-    }
-
-    // Round width and redistribute remainder left-to-right (could make it an option of the function?)
-    // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator.
-    width_excess = 0.0f;
-    for (int n = 0; n < count; n++)
-    {
-        float width_rounded = ImFloor(items[n].Width);
-        width_excess += items[n].Width - width_rounded;
-        items[n].Width = width_rounded;
-    }
-    if (width_excess > 0.0f)
-        for (int n = 0; n < count; n++)
-            if (items[n].Index < (int)(width_excess + 0.01f))
-                items[n].Width += 1.0f;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: ComboBox
-//-------------------------------------------------------------------------
-// - BeginCombo()
-// - EndCombo()
-// - Combo()
-//-------------------------------------------------------------------------
-
-static float CalcMaxPopupHeightFromItemCount(int items_count)
-{
-    ImGuiContext& g = *GImGui;
-    if (items_count <= 0)
-        return FLT_MAX;
-    return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2);
-}
-
-bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags)
-{
-    // Always consume the SetNextWindowSizeConstraint() call in our early return paths
-    ImGuiContext& g = *GImGui;
-    bool has_window_size_constraint = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) != 0;
-    g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint;
-
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together
-
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-
-    const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const float expected_w = CalcItemWidth();
-    const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w;
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
-    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, id, &frame_bb))
-        return false;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held);
-    bool popup_open = IsPopupOpen(id);
-
-    const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
-    const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size);
-    RenderNavHighlight(frame_bb, id);
-    if (!(flags & ImGuiComboFlags_NoPreview))
-        window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(value_x2, frame_bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Left);
-    if (!(flags & ImGuiComboFlags_NoArrowButton))
-    {
-        ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
-        ImU32 text_col = GetColorU32(ImGuiCol_Text);
-        window->DrawList->AddRectFilled(ImVec2(value_x2, frame_bb.Min.y), frame_bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Right);
-        if (value_x2 + arrow_size - style.FramePadding.x <= frame_bb.Max.x)
-            RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f);
-    }
-    RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding);
-    if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview))
-        RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
-    if (label_size.x > 0)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    if ((pressed || g.NavActivateId == id) && !popup_open)
-    {
-        if (window->DC.NavLayerCurrent == 0)
-            window->NavLastIds[0] = id;
-        OpenPopupEx(id);
-        popup_open = true;
-    }
-
-    if (!popup_open)
-        return false;
-
-    if (has_window_size_constraint)
-    {
-        g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
-        g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w);
-    }
-    else
-    {
-        if ((flags & ImGuiComboFlags_HeightMask_) == 0)
-            flags |= ImGuiComboFlags_HeightRegular;
-        IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiComboFlags_HeightMask_));    // Only one
-        int popup_max_height_in_items = -1;
-        if (flags & ImGuiComboFlags_HeightRegular)     popup_max_height_in_items = 8;
-        else if (flags & ImGuiComboFlags_HeightSmall)  popup_max_height_in_items = 4;
-        else if (flags & ImGuiComboFlags_HeightLarge)  popup_max_height_in_items = 20;
-        SetNextWindowSizeConstraints(ImVec2(w, 0.0f), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
-    }
-
-    char name[16];
-    ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
-
-    // Peak into expected window size so we can position it
-    if (ImGuiWindow* popup_window = FindWindowByName(name))
-        if (popup_window->WasActive)
-        {
-            ImVec2 size_expected = CalcWindowExpectedSize(popup_window);
-            if (flags & ImGuiComboFlags_PopupAlignLeft)
-                popup_window->AutoPosLastDirection = ImGuiDir_Left;
-            ImRect r_outer = GetWindowAllowedExtentRect(popup_window);
-            ImVec2 pos = FindBestWindowPosForPopupEx(frame_bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, frame_bb, ImGuiPopupPositionPolicy_ComboBox);
-            SetNextWindowPos(pos);
-        }
-
-    // We don't use BeginPopupEx() solely because we have a custom name string, which we could make an argument to BeginPopupEx()
-    ImGuiWindowFlags window_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove;
-
-    // Horizontally align ourselves with the framed text
-    PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(style.FramePadding.x, style.WindowPadding.y));
-    bool ret = Begin(name, NULL, window_flags);
-    PopStyleVar();
-    if (!ret)
-    {
-        EndPopup();
-        IM_ASSERT(0);   // This should never happen as we tested for IsPopupOpen() above
-        return false;
-    }
-    return true;
-}
-
-void ImGui::EndCombo()
-{
-    EndPopup();
-}
-
-// Getter for the old Combo() API: const char*[]
-static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
-{
-    const char* const* items = (const char* const*)data;
-    if (out_text)
-        *out_text = items[idx];
-    return true;
-}
-
-// Getter for the old Combo() API: "item1\0item2\0item3\0"
-static bool Items_SingleStringGetter(void* data, int idx, const char** out_text)
-{
-    // FIXME-OPT: we could pre-compute the indices to fasten this. But only 1 active combo means the waste is limited.
-    const char* items_separated_by_zeros = (const char*)data;
-    int items_count = 0;
-    const char* p = items_separated_by_zeros;
-    while (*p)
-    {
-        if (idx == items_count)
-            break;
-        p += strlen(p) + 1;
-        items_count++;
-    }
-    if (!*p)
-        return false;
-    if (out_text)
-        *out_text = p;
-    return true;
-}
-
-// Old API, prefer using BeginCombo() nowadays if you can.
-bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_max_height_in_items)
-{
-    ImGuiContext& g = *GImGui;
-
-    // Call the getter to obtain the preview string which is a parameter to BeginCombo()
-    const char* preview_value = NULL;
-    if (*current_item >= 0 && *current_item < items_count)
-        items_getter(data, *current_item, &preview_value);
-
-    // The old Combo() API exposed "popup_max_height_in_items". The new more general BeginCombo() API doesn't have/need it, but we emulate it here.
-    if (popup_max_height_in_items != -1 && !(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint))
-        SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
-
-    if (!BeginCombo(label, preview_value, ImGuiComboFlags_None))
-        return false;
-
-    // Display items
-    // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed)
-    bool value_changed = false;
-    for (int i = 0; i < items_count; i++)
-    {
-        PushID((void*)(intptr_t)i);
-        const bool item_selected = (i == *current_item);
-        const char* item_text;
-        if (!items_getter(data, i, &item_text))
-            item_text = "*Unknown item*";
-        if (Selectable(item_text, item_selected))
-        {
-            value_changed = true;
-            *current_item = i;
-        }
-        if (item_selected)
-            SetItemDefaultFocus();
-        PopID();
-    }
-
-    EndCombo();
-    return value_changed;
-}
-
-// Combo box helper allowing to pass an array of strings.
-bool ImGui::Combo(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items)
-{
-    const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items);
-    return value_changed;
-}
-
-// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
-bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items)
-{
-    int items_count = 0;
-    const char* p = items_separated_by_zeros;       // FIXME-OPT: Avoid computing this, or at least only when combo is open
-    while (*p)
-    {
-        p += strlen(p) + 1;
-        items_count++;
-    }
-    bool value_changed = Combo(label, current_item, Items_SingleStringGetter, (void*)items_separated_by_zeros, items_count, height_in_items);
-    return value_changed;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Data Type and Data Formatting Helpers [Internal]
-//-------------------------------------------------------------------------
-// - PatchFormatStringFloatToInt()
-// - DataTypeGetInfo()
-// - DataTypeFormatString()
-// - DataTypeApplyOp()
-// - DataTypeApplyOpFromText()
-// - GetMinimumStepAtDecimalPrecision
-// - RoundScalarWithFormat<>()
-//-------------------------------------------------------------------------
-
-static const ImGuiDataTypeInfo GDataTypeInfo[] =
-{
-    { sizeof(char),             "%d",   "%d"    },  // ImGuiDataType_S8
-    { sizeof(unsigned char),    "%u",   "%u"    },
-    { sizeof(short),            "%d",   "%d"    },  // ImGuiDataType_S16
-    { sizeof(unsigned short),   "%u",   "%u"    },
-    { sizeof(int),              "%d",   "%d"    },  // ImGuiDataType_S32
-    { sizeof(unsigned int),     "%u",   "%u"    },
-#ifdef _MSC_VER
-    { sizeof(ImS64),            "%I64d","%I64d" },  // ImGuiDataType_S64
-    { sizeof(ImU64),            "%I64u","%I64u" },
-#else
-    { sizeof(ImS64),            "%lld", "%lld"  },  // ImGuiDataType_S64
-    { sizeof(ImU64),            "%llu", "%llu"  },
-#endif
-    { sizeof(float),            "%f",   "%f"    },  // ImGuiDataType_Float (float are promoted to double in va_arg)
-    { sizeof(double),           "%f",   "%lf"   },  // ImGuiDataType_Double
-};
-IM_STATIC_ASSERT(IM_ARRAYSIZE(GDataTypeInfo) == ImGuiDataType_COUNT);
-
-// FIXME-LEGACY: Prior to 1.61 our DragInt() function internally used floats and because of this the compile-time default value for format was "%.0f".
-// Even though we changed the compile-time default, we expect users to have carried %f around, which would break the display of DragInt() calls.
-// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. What could possibly go wrong?!
-static const char* PatchFormatStringFloatToInt(const char* fmt)
-{
-    if (fmt[0] == '%' && fmt[1] == '.' && fmt[2] == '0' && fmt[3] == 'f' && fmt[4] == 0) // Fast legacy path for "%.0f" which is expected to be the most common case.
-        return "%d";
-    const char* fmt_start = ImParseFormatFindStart(fmt);    // Find % (if any, and ignore %%)
-    const char* fmt_end = ImParseFormatFindEnd(fmt_start);  // Find end of format specifier, which itself is an exercise of confidence/recklessness (because snprintf is dependent on libc or user).
-    if (fmt_end > fmt_start && fmt_end[-1] == 'f')
-    {
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-        if (fmt_start == fmt && fmt_end[0] == 0)
-            return "%d";
-        ImGuiContext& g = *GImGui;
-        ImFormatString(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision.
-        return g.TempBuffer;
-#else
-        IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d"
-#endif
-    }
-    return fmt;
-}
-
-const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
-{
-    IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
-    return &GDataTypeInfo[data_type];
-}
-
-int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format)
-{
-    // Signedness doesn't matter when pushing integer arguments
-    if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32)
-        return ImFormatString(buf, buf_size, format, *(const ImU32*)p_data);
-    if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
-        return ImFormatString(buf, buf_size, format, *(const ImU64*)p_data);
-    if (data_type == ImGuiDataType_Float)
-        return ImFormatString(buf, buf_size, format, *(const float*)p_data);
-    if (data_type == ImGuiDataType_Double)
-        return ImFormatString(buf, buf_size, format, *(const double*)p_data);
-    if (data_type == ImGuiDataType_S8)
-        return ImFormatString(buf, buf_size, format, *(const ImS8*)p_data);
-    if (data_type == ImGuiDataType_U8)
-        return ImFormatString(buf, buf_size, format, *(const ImU8*)p_data);
-    if (data_type == ImGuiDataType_S16)
-        return ImFormatString(buf, buf_size, format, *(const ImS16*)p_data);
-    if (data_type == ImGuiDataType_U16)
-        return ImFormatString(buf, buf_size, format, *(const ImU16*)p_data);
-    IM_ASSERT(0);
-    return 0;
-}
-
-void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, void* arg1, const void* arg2)
-{
-    IM_ASSERT(op == '+' || op == '-');
-    switch (data_type)
-    {
-        case ImGuiDataType_S8:
-            if (op == '+') { *(ImS8*)output  = ImAddClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
-            if (op == '-') { *(ImS8*)output  = ImSubClampOverflow(*(const ImS8*)arg1,  *(const ImS8*)arg2,  IM_S8_MIN,  IM_S8_MAX); }
-            return;
-        case ImGuiDataType_U8:
-            if (op == '+') { *(ImU8*)output  = ImAddClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
-            if (op == '-') { *(ImU8*)output  = ImSubClampOverflow(*(const ImU8*)arg1,  *(const ImU8*)arg2,  IM_U8_MIN,  IM_U8_MAX); }
-            return;
-        case ImGuiDataType_S16:
-            if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
-            if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
-            return;
-        case ImGuiDataType_U16:
-            if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
-            if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
-            return;
-        case ImGuiDataType_S32:
-            if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
-            if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
-            return;
-        case ImGuiDataType_U32:
-            if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
-            if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
-            return;
-        case ImGuiDataType_S64:
-            if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
-            if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
-            return;
-        case ImGuiDataType_U64:
-            if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
-            if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
-            return;
-        case ImGuiDataType_Float:
-            if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; }
-            if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; }
-            return;
-        case ImGuiDataType_Double:
-            if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; }
-            if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; }
-            return;
-        case ImGuiDataType_COUNT: break;
-    }
-    IM_ASSERT(0);
-}
-
-// User can input math operators (e.g. +100) to edit a numerical values.
-// NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess..
-bool ImGui::DataTypeApplyOpFromText(const char* buf, const char* initial_value_buf, ImGuiDataType data_type, void* p_data, const char* format)
-{
-    while (ImCharIsBlankA(*buf))
-        buf++;
-
-    // We don't support '-' op because it would conflict with inputing negative value.
-    // Instead you can use +-100 to subtract from an existing value
-    char op = buf[0];
-    if (op == '+' || op == '*' || op == '/')
-    {
-        buf++;
-        while (ImCharIsBlankA(*buf))
-            buf++;
-    }
-    else
-    {
-        op = 0;
-    }
-    if (!buf[0])
-        return false;
-
-    // Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
-    IM_ASSERT(data_type < ImGuiDataType_COUNT);
-    int data_backup[2];
-    const ImGuiDataTypeInfo* type_info = ImGui::DataTypeGetInfo(data_type);
-    IM_ASSERT(type_info->Size <= sizeof(data_backup));
-    memcpy(data_backup, p_data, type_info->Size);
-
-    if (format == NULL)
-        format = type_info->ScanFmt;
-
-    // FIXME-LEGACY: The aim is to remove those operators and write a proper expression evaluator at some point..
-    int arg1i = 0;
-    if (data_type == ImGuiDataType_S32)
-    {
-        int* v = (int*)p_data;
-        int arg0i = *v;
-        float arg1f = 0.0f;
-        if (op && sscanf(initial_value_buf, format, &arg0i) < 1)
-            return false;
-        // Store operand in a float so we can use fractional value for multipliers (*1.1), but constant always parsed as integer so we can fit big integers (e.g. 2000000003) past float precision
-        if (op == '+')      { if (sscanf(buf, "%d", &arg1i)) *v = (int)(arg0i + arg1i); }                   // Add (use "+-" to subtract)
-        else if (op == '*') { if (sscanf(buf, "%f", &arg1f)) *v = (int)(arg0i * arg1f); }                   // Multiply
-        else if (op == '/') { if (sscanf(buf, "%f", &arg1f) && arg1f != 0.0f) *v = (int)(arg0i / arg1f); }  // Divide
-        else                { if (sscanf(buf, format, &arg1i) == 1) *v = arg1i; }                           // Assign constant
-    }
-    else if (data_type == ImGuiDataType_Float)
-    {
-        // For floats we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in
-        format = "%f";
-        float* v = (float*)p_data;
-        float arg0f = *v, arg1f = 0.0f;
-        if (op && sscanf(initial_value_buf, format, &arg0f) < 1)
-            return false;
-        if (sscanf(buf, format, &arg1f) < 1)
-            return false;
-        if (op == '+')      { *v = arg0f + arg1f; }                    // Add (use "+-" to subtract)
-        else if (op == '*') { *v = arg0f * arg1f; }                    // Multiply
-        else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
-        else                { *v = arg1f; }                            // Assign constant
-    }
-    else if (data_type == ImGuiDataType_Double)
-    {
-        format = "%lf"; // scanf differentiate float/double unlike printf which forces everything to double because of ellipsis
-        double* v = (double*)p_data;
-        double arg0f = *v, arg1f = 0.0;
-        if (op && sscanf(initial_value_buf, format, &arg0f) < 1)
-            return false;
-        if (sscanf(buf, format, &arg1f) < 1)
-            return false;
-        if (op == '+')      { *v = arg0f + arg1f; }                    // Add (use "+-" to subtract)
-        else if (op == '*') { *v = arg0f * arg1f; }                    // Multiply
-        else if (op == '/') { if (arg1f != 0.0f) *v = arg0f / arg1f; } // Divide
-        else                { *v = arg1f; }                            // Assign constant
-    }
-    else if (data_type == ImGuiDataType_U32 || data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
-    {
-        // All other types assign constant
-        // We don't bother handling support for legacy operators since they are a little too crappy. Instead we will later implement a proper expression evaluator in the future.
-        sscanf(buf, format, p_data);
-    }
-    else
-    {
-        // Small types need a 32-bit buffer to receive the result from scanf()
-        int v32;
-        sscanf(buf, format, &v32);
-        if (data_type == ImGuiDataType_S8)
-            *(ImS8*)p_data = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX);
-        else if (data_type == ImGuiDataType_U8)
-            *(ImU8*)p_data = (ImU8)ImClamp(v32, (int)IM_U8_MIN, (int)IM_U8_MAX);
-        else if (data_type == ImGuiDataType_S16)
-            *(ImS16*)p_data = (ImS16)ImClamp(v32, (int)IM_S16_MIN, (int)IM_S16_MAX);
-        else if (data_type == ImGuiDataType_U16)
-            *(ImU16*)p_data = (ImU16)ImClamp(v32, (int)IM_U16_MIN, (int)IM_U16_MAX);
-        else
-            IM_ASSERT(0);
-    }
-
-    return memcmp(data_backup, p_data, type_info->Size) != 0;
-}
-
-static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
-{
-    static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
-    if (decimal_precision < 0)
-        return FLT_MIN;
-    return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision);
-}
-
-template<typename TYPE>
-static const char* ImAtoi(const char* src, TYPE* output)
-{
-    int negative = 0;
-    if (*src == '-') { negative = 1; src++; }
-    if (*src == '+') { src++; }
-    TYPE v = 0;
-    while (*src >= '0' && *src <= '9')
-        v = (v * 10) + (*src++ - '0');
-    *output = negative ? -v : v;
-    return src;
-}
-
-template<typename TYPE, typename SIGNEDTYPE>
-TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, TYPE v)
-{
-    const char* fmt_start = ImParseFormatFindStart(format);
-    if (fmt_start[0] != '%' || fmt_start[1] == '%') // Don't apply if the value is not visible in the format string
-        return v;
-    char v_str[64];
-    ImFormatString(v_str, IM_ARRAYSIZE(v_str), fmt_start, v);
-    const char* p = v_str;
-    while (*p == ' ')
-        p++;
-    if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double)
-        v = (TYPE)ImAtof(p);
-    else
-        ImAtoi(p, (SIGNEDTYPE*)&v);
-    return v;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
-//-------------------------------------------------------------------------
-// - DragBehaviorT<>() [Internal]
-// - DragBehavior() [Internal]
-// - DragScalar()
-// - DragScalarN()
-// - DragFloat()
-// - DragFloat2()
-// - DragFloat3()
-// - DragFloat4()
-// - DragFloatRange2()
-// - DragInt()
-// - DragInt2()
-// - DragInt3()
-// - DragInt4()
-// - DragIntRange2()
-//-------------------------------------------------------------------------
-
-// This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls)
-template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
-bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiDragFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    const ImGuiAxis axis = (flags & ImGuiDragFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
-    const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
-    const bool is_clamped = (v_min < v_max);
-    const bool is_power = (power != 1.0f && is_decimal && is_clamped && (v_max - v_min < FLT_MAX));
-    const bool is_locked = (v_min > v_max);
-    if (is_locked)
-        return false;
-
-    // Default tweak speed
-    if (v_speed == 0.0f && is_clamped && (v_max - v_min < FLT_MAX))
-        v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio);
-
-    // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
-    float adjust_delta = 0.0f;
-    if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && g.IO.MouseDragMaxDistanceSqr[0] > 1.0f*1.0f)
-    {
-        adjust_delta = g.IO.MouseDelta[axis];
-        if (g.IO.KeyAlt)
-            adjust_delta *= 1.0f / 100.0f;
-        if (g.IO.KeyShift)
-            adjust_delta *= 10.0f;
-    }
-    else if (g.ActiveIdSource == ImGuiInputSource_Nav)
-    {
-        int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0;
-        adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis];
-        v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision));
-    }
-    adjust_delta *= v_speed;
-
-    // For vertical drag we currently assume that Up=higher value (like we do with vertical sliders). This may become a parameter.
-    if (axis == ImGuiAxis_Y)
-        adjust_delta = -adjust_delta;
-
-    // Clear current value on activation
-    // Avoid altering values and clamping when we are _already_ past the limits and heading in the same direction, so e.g. if range is 0..255, current value is 300 and we are pushing to the right side, keep the 300.
-    bool is_just_activated = g.ActiveIdIsJustActivated;
-    bool is_already_past_limits_and_pushing_outward = is_clamped && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f));
-    bool is_drag_direction_change_with_power = is_power && ((adjust_delta < 0 && g.DragCurrentAccum > 0) || (adjust_delta > 0 && g.DragCurrentAccum < 0));
-    if (is_just_activated || is_already_past_limits_and_pushing_outward || is_drag_direction_change_with_power)
-    {
-        g.DragCurrentAccum = 0.0f;
-        g.DragCurrentAccumDirty = false;
-    }
-    else if (adjust_delta != 0.0f)
-    {
-        g.DragCurrentAccum += adjust_delta;
-        g.DragCurrentAccumDirty = true;
-    }
-
-    if (!g.DragCurrentAccumDirty)
-        return false;
-
-    TYPE v_cur = *v;
-    FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f;
-
-    if (is_power)
-    {
-        // Offset + round to user desired precision, with a curve on the v_min..v_max range to get more precision on one side of the range
-        FLOATTYPE v_old_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power);
-        FLOATTYPE v_new_norm_curved = v_old_norm_curved + (g.DragCurrentAccum / (v_max - v_min));
-        v_cur = v_min + (SIGNEDTYPE)ImPow(ImSaturate((float)v_new_norm_curved), power) * (v_max - v_min);
-        v_old_ref_for_accum_remainder = v_old_norm_curved;
-    }
-    else
-    {
-        v_cur += (SIGNEDTYPE)g.DragCurrentAccum;
-    }
-
-    // Round to user desired precision based on format string
-    v_cur = RoundScalarWithFormatT<TYPE, SIGNEDTYPE>(format, data_type, v_cur);
-
-    // Preserve remainder after rounding has been applied. This also allow slow tweaking of values.
-    g.DragCurrentAccumDirty = false;
-    if (is_power)
-    {
-        FLOATTYPE v_cur_norm_curved = ImPow((FLOATTYPE)(v_cur - v_min) / (FLOATTYPE)(v_max - v_min), (FLOATTYPE)1.0f / power);
-        g.DragCurrentAccum -= (float)(v_cur_norm_curved - v_old_ref_for_accum_remainder);
-    }
-    else
-    {
-        g.DragCurrentAccum -= (float)((SIGNEDTYPE)v_cur - (SIGNEDTYPE)*v);
-    }
-
-    // Lose zero sign for float/double
-    if (v_cur == (TYPE)-0)
-        v_cur = (TYPE)0;
-
-    // Clamp values (+ handle overflow/wrap-around for integer types)
-    if (*v != v_cur && is_clamped)
-    {
-        if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_decimal))
-            v_cur = v_min;
-        if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f && !is_decimal))
-            v_cur = v_max;
-    }
-
-    // Apply result
-    if (*v == v_cur)
-        return false;
-    *v = v_cur;
-    return true;
-}
-
-bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, float power, ImGuiDragFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.ActiveId == id)
-    {
-        if (g.ActiveIdSource == ImGuiInputSource_Mouse && !g.IO.MouseDown[0])
-            ClearActiveID();
-        else if (g.ActiveIdSource == ImGuiInputSource_Nav && g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
-            ClearActiveID();
-    }
-    if (g.ActiveId != id)
-        return false;
-
-    switch (data_type)
-    {
-    case ImGuiDataType_S8:     { ImS32 v32 = (ImS32)*(ImS8*)p_v;  bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS8*) p_min : IM_S8_MIN,  p_max ? *(const ImS8*)p_max  : IM_S8_MAX,  format, power, flags); if (r) *(ImS8*)p_v = (ImS8)v32; return r; }
-    case ImGuiDataType_U8:     { ImU32 v32 = (ImU32)*(ImU8*)p_v;  bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU8*) p_min : IM_U8_MIN,  p_max ? *(const ImU8*)p_max  : IM_U8_MAX,  format, power, flags); if (r) *(ImU8*)p_v = (ImU8)v32; return r; }
-    case ImGuiDataType_S16:    { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS16*)p_min : IM_S16_MIN, p_max ? *(const ImS16*)p_max : IM_S16_MAX, format, power, flags); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
-    case ImGuiDataType_U16:    { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU16*)p_min : IM_U16_MIN, p_max ? *(const ImU16*)p_max : IM_U16_MAX, format, power, flags); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
-    case ImGuiDataType_S32:    return DragBehaviorT<ImS32, ImS32, float >(data_type, (ImS32*)p_v,  v_speed, p_min ? *(const ImS32* )p_min : IM_S32_MIN, p_max ? *(const ImS32* )p_max : IM_S32_MAX, format, power, flags);
-    case ImGuiDataType_U32:    return DragBehaviorT<ImU32, ImS32, float >(data_type, (ImU32*)p_v,  v_speed, p_min ? *(const ImU32* )p_min : IM_U32_MIN, p_max ? *(const ImU32* )p_max : IM_U32_MAX, format, power, flags);
-    case ImGuiDataType_S64:    return DragBehaviorT<ImS64, ImS64, double>(data_type, (ImS64*)p_v,  v_speed, p_min ? *(const ImS64* )p_min : IM_S64_MIN, p_max ? *(const ImS64* )p_max : IM_S64_MAX, format, power, flags);
-    case ImGuiDataType_U64:    return DragBehaviorT<ImU64, ImS64, double>(data_type, (ImU64*)p_v,  v_speed, p_min ? *(const ImU64* )p_min : IM_U64_MIN, p_max ? *(const ImU64* )p_max : IM_U64_MAX, format, power, flags);
-    case ImGuiDataType_Float:  return DragBehaviorT<float, float, float >(data_type, (float*)p_v,  v_speed, p_min ? *(const float* )p_min : -FLT_MAX,   p_max ? *(const float* )p_max : FLT_MAX,    format, power, flags);
-    case ImGuiDataType_Double: return DragBehaviorT<double,double,double>(data_type, (double*)p_v, v_speed, p_min ? *(const double*)p_min : -DBL_MAX,   p_max ? *(const double*)p_max : DBL_MAX,    format, power, flags);
-    case ImGuiDataType_COUNT:  break;
-    }
-    IM_ASSERT(0);
-    return false;
-}
-
-// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional.
-// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
-bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    if (power != 1.0f)
-        IM_ASSERT(p_min != NULL && p_max != NULL); // When using a power curve the drag needs to have known bounds
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    const float w = CalcItemWidth();
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
-    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
-
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, id, &frame_bb))
-        return false;
-
-    // Default format string when passing NULL
-    if (format == NULL)
-        format = DataTypeGetInfo(data_type)->PrintFmt;
-    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
-        format = PatchFormatStringFloatToInt(format);
-
-    // Tabbing or CTRL-clicking on Drag turns it into an input box
-    const bool hovered = ItemHoverable(frame_bb, id);
-    bool temp_input_is_active = TempInputIsActive(id);
-    bool temp_input_start = false;
-    if (!temp_input_is_active)
-    {
-        const bool focus_requested = FocusableItemRegister(window, id);
-        const bool clicked = (hovered && g.IO.MouseClicked[0]);
-        const bool double_clicked = (hovered && g.IO.MouseDoubleClicked[0]);
-        if (focus_requested || clicked || double_clicked || g.NavActivateId == id || g.NavInputId == id)
-        {
-            SetActiveID(id, window);
-            SetFocusID(id, window);
-            FocusWindow(window);
-            g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
-            if (focus_requested || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavInputId == id)
-            {
-                temp_input_start = true;
-                FocusableItemUnregister(window);
-            }
-        }
-    }
-    if (temp_input_is_active || temp_input_start)
-        return TempInputScalar(frame_bb, id, label, data_type, p_data, format);
-
-    // Draw frame
-    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
-    RenderNavHighlight(frame_bb, id);
-    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding);
-
-    // Drag behavior
-    const bool value_changed = DragBehavior(id, data_type, p_data, v_speed, p_min, p_max, format, power, ImGuiDragFlags_None);
-    if (value_changed)
-        MarkItemEdited(id);
-
-    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
-    char value_buf[64];
-    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
-    RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f));
-
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
-    return value_changed;
-}
-
-bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    bool value_changed = false;
-    BeginGroup();
-    PushID(label);
-    PushMultiItemsWidths(components, CalcItemWidth());
-    size_t type_size = GDataTypeInfo[data_type].Size;
-    for (int i = 0; i < components; i++)
-    {
-        PushID(i);
-        if (i > 0)
-            SameLine(0, g.Style.ItemInnerSpacing.x);
-        value_changed |= DragScalar("", data_type, p_data, v_speed, p_min, p_max, format, power);
-        PopID();
-        PopItemWidth();
-        p_data = (void*)((char*)p_data + type_size);
-    }
-    PopID();
-
-    const char* label_end = FindRenderedTextEnd(label);
-    if (label != label_end)
-    {
-        SameLine(0, g.Style.ItemInnerSpacing.x);
-        TextEx(label, label_end);
-    }
-
-    EndGroup();
-    return value_changed;
-}
-
-bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power)
-{
-    return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power);
-}
-
-bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power)
-{
-    return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power);
-}
-
-bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power)
-{
-    return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power);
-}
-
-bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power)
-{
-    return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power);
-}
-
-bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    PushID(label);
-    BeginGroup();
-    PushMultiItemsWidths(2, CalcItemWidth());
-
-    bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format, power);
-    PopItemWidth();
-    SameLine(0, g.Style.ItemInnerSpacing.x);
-    value_changed |= DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, format_max ? format_max : format, power);
-    PopItemWidth();
-    SameLine(0, g.Style.ItemInnerSpacing.x);
-
-    TextEx(label, FindRenderedTextEnd(label));
-    EndGroup();
-    PopID();
-    return value_changed;
-}
-
-// NB: v_speed is float to allow adjusting the drag speed with more precision
-bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format)
-{
-    return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format);
-}
-
-bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format)
-{
-    return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format);
-}
-
-bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format)
-{
-    return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format);
-}
-
-bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format)
-{
-    return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format);
-}
-
-bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    PushID(label);
-    BeginGroup();
-    PushMultiItemsWidths(2, CalcItemWidth());
-
-    bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), format);
-    PopItemWidth();
-    SameLine(0, g.Style.ItemInnerSpacing.x);
-    value_changed |= DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, format_max ? format_max : format);
-    PopItemWidth();
-    SameLine(0, g.Style.ItemInnerSpacing.x);
-
-    TextEx(label, FindRenderedTextEnd(label));
-    EndGroup();
-    PopID();
-
-    return value_changed;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
-//-------------------------------------------------------------------------
-// - SliderBehaviorT<>() [Internal]
-// - SliderBehavior() [Internal]
-// - SliderScalar()
-// - SliderScalarN()
-// - SliderFloat()
-// - SliderFloat2()
-// - SliderFloat3()
-// - SliderFloat4()
-// - SliderAngle()
-// - SliderInt()
-// - SliderInt2()
-// - SliderInt3()
-// - SliderInt4()
-// - VSliderScalar()
-// - VSliderFloat()
-// - VSliderInt()
-//-------------------------------------------------------------------------
-
-template<typename TYPE, typename FLOATTYPE>
-float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, float power, float linear_zero_pos)
-{
-    if (v_min == v_max)
-        return 0.0f;
-
-    const bool is_power = (power != 1.0f) && (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double);
-    const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min);
-    if (is_power)
-    {
-        if (v_clamped < 0.0f)
-        {
-            const float f = 1.0f - (float)((v_clamped - v_min) / (ImMin((TYPE)0, v_max) - v_min));
-            return (1.0f - ImPow(f, 1.0f/power)) * linear_zero_pos;
-        }
-        else
-        {
-            const float f = (float)((v_clamped - ImMax((TYPE)0, v_min)) / (v_max - ImMax((TYPE)0, v_min)));
-            return linear_zero_pos + ImPow(f, 1.0f/power) * (1.0f - linear_zero_pos);
-        }
-    }
-
-    // Linear slider
-    return (float)((FLOATTYPE)(v_clamped - v_min) / (FLOATTYPE)(v_max - v_min));
-}
-
-// FIXME: Move some of the code into SliderBehavior(). Current responsability is larger than what the equivalent DragBehaviorT<> does, we also do some rendering, etc.
-template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
-bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb)
-{
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-
-    const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
-    const bool is_decimal = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
-    const bool is_power = (power != 1.0f) && is_decimal;
-
-    const float grab_padding = 2.0f;
-    const float slider_sz = (bb.Max[axis] - bb.Min[axis]) - grab_padding * 2.0f;
-    float grab_sz = style.GrabMinSize;
-    SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max);
-    if (!is_decimal && v_range >= 0)                                             // v_range < 0 may happen on integer overflows
-        grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize);  // For integer sliders: if possible have the grab size represent 1 unit
-    grab_sz = ImMin(grab_sz, slider_sz);
-    const float slider_usable_sz = slider_sz - grab_sz;
-    const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f;
-    const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz * 0.5f;
-
-    // For power curve sliders that cross over sign boundary we want the curve to be symmetric around 0.0f
-    float linear_zero_pos;   // 0.0->1.0f
-    if (is_power && v_min * v_max < 0.0f)
-    {
-        // Different sign
-        const FLOATTYPE linear_dist_min_to_0 = ImPow(v_min >= 0 ? (FLOATTYPE)v_min : -(FLOATTYPE)v_min, (FLOATTYPE)1.0f / power);
-        const FLOATTYPE linear_dist_max_to_0 = ImPow(v_max >= 0 ? (FLOATTYPE)v_max : -(FLOATTYPE)v_max, (FLOATTYPE)1.0f / power);
-        linear_zero_pos = (float)(linear_dist_min_to_0 / (linear_dist_min_to_0 + linear_dist_max_to_0));
-    }
-    else
-    {
-        // Same sign
-        linear_zero_pos = v_min < 0.0f ? 1.0f : 0.0f;
-    }
-
-    // Process interacting with the slider
-    bool value_changed = false;
-    if (g.ActiveId == id)
-    {
-        bool set_new_value = false;
-        float clicked_t = 0.0f;
-        if (g.ActiveIdSource == ImGuiInputSource_Mouse)
-        {
-            if (!g.IO.MouseDown[0])
-            {
-                ClearActiveID();
-            }
-            else
-            {
-                const float mouse_abs_pos = g.IO.MousePos[axis];
-                clicked_t = (slider_usable_sz > 0.0f) ? ImClamp((mouse_abs_pos - slider_usable_pos_min) / slider_usable_sz, 0.0f, 1.0f) : 0.0f;
-                if (axis == ImGuiAxis_Y)
-                    clicked_t = 1.0f - clicked_t;
-                set_new_value = true;
-            }
-        }
-        else if (g.ActiveIdSource == ImGuiInputSource_Nav)
-        {
-            const ImVec2 delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiInputReadMode_RepeatFast, 0.0f, 0.0f);
-            float delta = (axis == ImGuiAxis_X) ? delta2.x : -delta2.y;
-            if (g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
-            {
-                ClearActiveID();
-            }
-            else if (delta != 0.0f)
-            {
-                clicked_t = SliderCalcRatioFromValueT<TYPE,FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
-                const int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0;
-                if ((decimal_precision > 0) || is_power)
-                {
-                    delta /= 100.0f;    // Gamepad/keyboard tweak speeds in % of slider bounds
-                    if (IsNavInputDown(ImGuiNavInput_TweakSlow))
-                        delta /= 10.0f;
-                }
-                else
-                {
-                    if ((v_range >= -100.0f && v_range <= 100.0f) || IsNavInputDown(ImGuiNavInput_TweakSlow))
-                        delta = ((delta < 0.0f) ? -1.0f : +1.0f) / (float)v_range; // Gamepad/keyboard tweak speeds in integer steps
-                    else
-                        delta /= 100.0f;
-                }
-                if (IsNavInputDown(ImGuiNavInput_TweakFast))
-                    delta *= 10.0f;
-                set_new_value = true;
-                if ((clicked_t >= 1.0f && delta > 0.0f) || (clicked_t <= 0.0f && delta < 0.0f)) // This is to avoid applying the saturation when already past the limits
-                    set_new_value = false;
-                else
-                    clicked_t = ImSaturate(clicked_t + delta);
-            }
-        }
-
-        if (set_new_value)
-        {
-            TYPE v_new;
-            if (is_power)
-            {
-                // Account for power curve scale on both sides of the zero
-                if (clicked_t < linear_zero_pos)
-                {
-                    // Negative: rescale to the negative range before powering
-                    float a = 1.0f - (clicked_t / linear_zero_pos);
-                    a = ImPow(a, power);
-                    v_new = ImLerp(ImMin(v_max, (TYPE)0), v_min, a);
-                }
-                else
-                {
-                    // Positive: rescale to the positive range before powering
-                    float a;
-                    if (ImFabs(linear_zero_pos - 1.0f) > 1.e-6f)
-                        a = (clicked_t - linear_zero_pos) / (1.0f - linear_zero_pos);
-                    else
-                        a = clicked_t;
-                    a = ImPow(a, power);
-                    v_new = ImLerp(ImMax(v_min, (TYPE)0), v_max, a);
-                }
-            }
-            else
-            {
-                // Linear slider
-                if (is_decimal)
-                {
-                    v_new = ImLerp(v_min, v_max, clicked_t);
-                }
-                else
-                {
-                    // For integer values we want the clicking position to match the grab box so we round above
-                    // This code is carefully tuned to work with large values (e.g. high ranges of U64) while preserving this property..
-                    FLOATTYPE v_new_off_f = (v_max - v_min) * clicked_t;
-                    TYPE v_new_off_floor = (TYPE)(v_new_off_f);
-                    TYPE v_new_off_round = (TYPE)(v_new_off_f + (FLOATTYPE)0.5);
-                    if (v_new_off_floor < v_new_off_round)
-                        v_new = v_min + v_new_off_round;
-                    else
-                        v_new = v_min + v_new_off_floor;
-                }
-            }
-
-            // Round to user desired precision based on format string
-            v_new = RoundScalarWithFormatT<TYPE,SIGNEDTYPE>(format, data_type, v_new);
-
-            // Apply result
-            if (*v != v_new)
-            {
-                *v = v_new;
-                value_changed = true;
-            }
-        }
-    }
-
-    if (slider_sz < 1.0f)
-    {
-        *out_grab_bb = ImRect(bb.Min, bb.Min);
-    }
-    else
-    {
-        // Output grab position so it can be displayed by the caller
-        float grab_t = SliderCalcRatioFromValueT<TYPE, FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos);
-        if (axis == ImGuiAxis_Y)
-            grab_t = 1.0f - grab_t;
-        const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
-        if (axis == ImGuiAxis_X)
-            *out_grab_bb = ImRect(grab_pos - grab_sz * 0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz * 0.5f, bb.Max.y - grab_padding);
-        else
-            *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz * 0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz * 0.5f);
-    }
-
-    return value_changed;
-}
-
-// For 32-bit and larger types, slider bounds are limited to half the natural type range.
-// So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok.
-// It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders.
-bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, float power, ImGuiSliderFlags flags, ImRect* out_grab_bb)
-{
-    switch (data_type)
-    {
-    case ImGuiDataType_S8:  { ImS32 v32 = (ImS32)*(ImS8*)p_v;  bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS8*)p_min,  *(const ImS8*)p_max,  format, power, flags, out_grab_bb); if (r) *(ImS8*)p_v  = (ImS8)v32;  return r; }
-    case ImGuiDataType_U8:  { ImU32 v32 = (ImU32)*(ImU8*)p_v;  bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU8*)p_min,  *(const ImU8*)p_max,  format, power, flags, out_grab_bb); if (r) *(ImU8*)p_v  = (ImU8)v32;  return r; }
-    case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
-    case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
-    case ImGuiDataType_S32:
-        IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN/2 && *(const ImS32*)p_max <= IM_S32_MAX/2);
-        return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)p_v,  *(const ImS32*)p_min,  *(const ImS32*)p_max,  format, power, flags, out_grab_bb);
-    case ImGuiDataType_U32:
-        IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX/2);
-        return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)p_v,  *(const ImU32*)p_min,  *(const ImU32*)p_max,  format, power, flags, out_grab_bb);
-    case ImGuiDataType_S64:
-        IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN/2 && *(const ImS64*)p_max <= IM_S64_MAX/2);
-        return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)p_v,  *(const ImS64*)p_min,  *(const ImS64*)p_max,  format, power, flags, out_grab_bb);
-    case ImGuiDataType_U64:
-        IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX/2);
-        return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)p_v,  *(const ImU64*)p_min,  *(const ImU64*)p_max,  format, power, flags, out_grab_bb);
-    case ImGuiDataType_Float:
-        IM_ASSERT(*(const float*)p_min >= -FLT_MAX/2.0f && *(const float*)p_max <= FLT_MAX/2.0f);
-        return SliderBehaviorT<float, float, float >(bb, id, data_type, (float*)p_v,  *(const float*)p_min,  *(const float*)p_max,  format, power, flags, out_grab_bb);
-    case ImGuiDataType_Double:
-        IM_ASSERT(*(const double*)p_min >= -DBL_MAX/2.0f && *(const double*)p_max <= DBL_MAX/2.0f);
-        return SliderBehaviorT<double,double,double>(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, power, flags, out_grab_bb);
-    case ImGuiDataType_COUNT: break;
-    }
-    IM_ASSERT(0);
-    return false;
-}
-
-// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required.
-// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
-bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    const float w = CalcItemWidth();
-
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f));
-    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
-
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, id, &frame_bb))
-        return false;
-
-    // Default format string when passing NULL
-    if (format == NULL)
-        format = DataTypeGetInfo(data_type)->PrintFmt;
-    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
-        format = PatchFormatStringFloatToInt(format);
-
-    // Tabbing or CTRL-clicking on Slider turns it into an input box
-    const bool hovered = ItemHoverable(frame_bb, id);
-    bool temp_input_is_active = TempInputIsActive(id);
-    bool temp_input_start = false;
-    if (!temp_input_is_active)
-    {
-        const bool focus_requested = FocusableItemRegister(window, id);
-        const bool clicked = (hovered && g.IO.MouseClicked[0]);
-        if (focus_requested || clicked || g.NavActivateId == id || g.NavInputId == id)
-        {
-            SetActiveID(id, window);
-            SetFocusID(id, window);
-            FocusWindow(window);
-            g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
-            if (focus_requested || (clicked && g.IO.KeyCtrl) || g.NavInputId == id)
-            {
-                temp_input_start = true;
-                FocusableItemUnregister(window);
-            }
-        }
-    }
-    if (temp_input_is_active || temp_input_start)
-        return TempInputScalar(frame_bb, id, label, data_type, p_data, format);
-
-    // Draw frame
-    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
-    RenderNavHighlight(frame_bb, id);
-    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
-
-    // Slider behavior
-    ImRect grab_bb;
-    const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_None, &grab_bb);
-    if (value_changed)
-        MarkItemEdited(id);
-
-    // Render grab
-    if (grab_bb.Max.x > grab_bb.Min.x)
-        window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
-
-    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
-    char value_buf[64];
-    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
-    RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f));
-
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
-    return value_changed;
-}
-
-// Add multiple sliders on 1 line for compact edition of multiple components
-bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    bool value_changed = false;
-    BeginGroup();
-    PushID(label);
-    PushMultiItemsWidths(components, CalcItemWidth());
-    size_t type_size = GDataTypeInfo[data_type].Size;
-    for (int i = 0; i < components; i++)
-    {
-        PushID(i);
-        if (i > 0)
-            SameLine(0, g.Style.ItemInnerSpacing.x);
-        value_changed |= SliderScalar("", data_type, v, v_min, v_max, format, power);
-        PopID();
-        PopItemWidth();
-        v = (void*)((char*)v + type_size);
-    }
-    PopID();
-
-    const char* label_end = FindRenderedTextEnd(label);
-    if (label != label_end)
-    {
-        SameLine(0, g.Style.ItemInnerSpacing.x);
-        TextEx(label, label_end);
-    }
-
-    EndGroup();
-    return value_changed;
-}
-
-bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power)
-{
-    return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power);
-}
-
-bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power)
-{
-    return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power);
-}
-
-bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power)
-{
-    return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power);
-}
-
-bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power)
-{
-    return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power);
-}
-
-bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format)
-{
-    if (format == NULL)
-        format = "%.0f deg";
-    float v_deg = (*v_rad) * 360.0f / (2*IM_PI);
-    bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, 1.0f);
-    *v_rad = v_deg * (2*IM_PI) / 360.0f;
-    return value_changed;
-}
-
-bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format)
-{
-    return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format);
-}
-
-bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format)
-{
-    return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format);
-}
-
-bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format)
-{
-    return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format);
-}
-
-bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format)
-{
-    return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format);
-}
-
-bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
-
-    ItemSize(bb, style.FramePadding.y);
-    if (!ItemAdd(frame_bb, id))
-        return false;
-
-    // Default format string when passing NULL
-    if (format == NULL)
-        format = DataTypeGetInfo(data_type)->PrintFmt;
-    else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
-        format = PatchFormatStringFloatToInt(format);
-
-    const bool hovered = ItemHoverable(frame_bb, id);
-    if ((hovered && g.IO.MouseClicked[0]) || g.NavActivateId == id || g.NavInputId == id)
-    {
-        SetActiveID(id, window);
-        SetFocusID(id, window);
-        FocusWindow(window);
-        g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
-    }
-
-    // Draw frame
-    const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : g.HoveredId == id ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
-    RenderNavHighlight(frame_bb, id);
-    RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
-
-    // Slider behavior
-    ImRect grab_bb;
-    const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, power, ImGuiSliderFlags_Vertical, &grab_bb);
-    if (value_changed)
-        MarkItemEdited(id);
-
-    // Render grab
-    if (grab_bb.Max.y > grab_bb.Min.y)
-        window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
-
-    // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
-    // For the vertical slider we allow centered text to overlap the frame padding
-    char value_buf[64];
-    const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
-    RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f));
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    return value_changed;
-}
-
-bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, float power)
-{
-    return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, power);
-}
-
-bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format)
-{
-    return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format);
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
-//-------------------------------------------------------------------------
-// - ImParseFormatFindStart() [Internal]
-// - ImParseFormatFindEnd() [Internal]
-// - ImParseFormatTrimDecorations() [Internal]
-// - ImParseFormatPrecision() [Internal]
-// - TempInputTextScalar() [Internal]
-// - InputScalar()
-// - InputScalarN()
-// - InputFloat()
-// - InputFloat2()
-// - InputFloat3()
-// - InputFloat4()
-// - InputInt()
-// - InputInt2()
-// - InputInt3()
-// - InputInt4()
-// - InputDouble()
-//-------------------------------------------------------------------------
-
-// We don't use strchr() because our strings are usually very short and often start with '%'
-const char* ImParseFormatFindStart(const char* fmt)
-{
-    while (char c = fmt[0])
-    {
-        if (c == '%' && fmt[1] != '%')
-            return fmt;
-        else if (c == '%')
-            fmt++;
-        fmt++;
-    }
-    return fmt;
-}
-
-const char* ImParseFormatFindEnd(const char* fmt)
-{
-    // Printf/scanf types modifiers: I/L/h/j/l/t/w/z. Other uppercase letters qualify as types aka end of the format.
-    if (fmt[0] != '%')
-        return fmt;
-    const unsigned int ignored_uppercase_mask = (1 << ('I'-'A')) | (1 << ('L'-'A'));
-    const unsigned int ignored_lowercase_mask = (1 << ('h'-'a')) | (1 << ('j'-'a')) | (1 << ('l'-'a')) | (1 << ('t'-'a')) | (1 << ('w'-'a')) | (1 << ('z'-'a'));
-    for (char c; (c = *fmt) != 0; fmt++)
-    {
-        if (c >= 'A' && c <= 'Z' && ((1 << (c - 'A')) & ignored_uppercase_mask) == 0)
-            return fmt + 1;
-        if (c >= 'a' && c <= 'z' && ((1 << (c - 'a')) & ignored_lowercase_mask) == 0)
-            return fmt + 1;
-    }
-    return fmt;
-}
-
-// Extract the format out of a format string with leading or trailing decorations
-//  fmt = "blah blah"  -> return fmt
-//  fmt = "%.3f"       -> return fmt
-//  fmt = "hello %.3f" -> return fmt + 6
-//  fmt = "%.3f hello" -> return buf written with "%.3f"
-const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_size)
-{
-    const char* fmt_start = ImParseFormatFindStart(fmt);
-    if (fmt_start[0] != '%')
-        return fmt;
-    const char* fmt_end = ImParseFormatFindEnd(fmt_start);
-    if (fmt_end[0] == 0) // If we only have leading decoration, we don't need to copy the data.
-        return fmt_start;
-    ImStrncpy(buf, fmt_start, ImMin((size_t)(fmt_end - fmt_start) + 1, buf_size));
-    return buf;
-}
-
-// Parse display precision back from the display format string
-// FIXME: This is still used by some navigation code path to infer a minimum tweak step, but we should aim to rework widgets so it isn't needed.
-int ImParseFormatPrecision(const char* fmt, int default_precision)
-{
-    fmt = ImParseFormatFindStart(fmt);
-    if (fmt[0] != '%')
-        return default_precision;
-    fmt++;
-    while (*fmt >= '0' && *fmt <= '9')
-        fmt++;
-    int precision = INT_MAX;
-    if (*fmt == '.')
-    {
-        fmt = ImAtoi<int>(fmt + 1, &precision);
-        if (precision < 0 || precision > 99)
-            precision = default_precision;
-    }
-    if (*fmt == 'e' || *fmt == 'E') // Maximum precision with scientific notation
-        precision = -1;
-    if ((*fmt == 'g' || *fmt == 'G') && precision == INT_MAX)
-        precision = -1;
-    return (precision == INT_MAX) ? default_precision : precision;
-}
-
-// Create text input in place of another active widget (e.g. used when doing a CTRL+Click on drag/slider widgets)
-// FIXME: Facilitate using this in variety of other situations.
-bool ImGui::TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags)
-{
-    // On the first frame, g.TempInputTextId == 0, then on subsequent frames it becomes == id.
-    // We clear ActiveID on the first frame to allow the InputText() taking it back.
-    ImGuiContext& g = *GImGui;
-    const bool init = (g.TempInputId != id);
-    if (init)
-        ClearActiveID();
-
-    g.CurrentWindow->DC.CursorPos = bb.Min;
-    bool value_changed = InputTextEx(label, NULL, buf, buf_size, bb.GetSize(), flags);
-    if (init)
-    {
-        // First frame we started displaying the InputText widget, we expect it to take the active id.
-        IM_ASSERT(g.ActiveId == id);
-        g.TempInputId = g.ActiveId;
-    }
-    return value_changed;
-}
-
-bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format)
-{
-    ImGuiContext& g = *GImGui;
-
-    char fmt_buf[32];
-    char data_buf[32];
-    format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf));
-    DataTypeFormatString(data_buf, IM_ARRAYSIZE(data_buf), data_type, p_data, format);
-    ImStrTrimBlanks(data_buf);
-
-    ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited;
-    flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
-    bool value_changed = TempInputText(bb, id, label, data_buf, IM_ARRAYSIZE(data_buf), flags);
-    if (value_changed)
-    {
-        value_changed = DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, p_data, NULL);
-        if (value_changed)
-            MarkItemEdited(id);
-    }
-    return value_changed;
-}
-
-// Note: p_data, p_step, p_step_fast are _pointers_ to a memory address holding the data. For an Input widget, p_step and p_step_fast are optional.
-// Read code of e.g. InputFloat(), InputInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
-bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    ImGuiStyle& style = g.Style;
-
-    if (format == NULL)
-        format = DataTypeGetInfo(data_type)->PrintFmt;
-
-    char buf[64];
-    DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format);
-
-    bool value_changed = false;
-    if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
-        flags |= ImGuiInputTextFlags_CharsDecimal;
-    flags |= ImGuiInputTextFlags_AutoSelectAll;
-    flags |= ImGuiInputTextFlags_NoMarkEdited;  // We call MarkItemEdited() ourselve by comparing the actual data rather than the string.
-
-    if (p_step != NULL)
-    {
-        const float button_size = GetFrameHeight();
-
-        BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive()
-        PushID(label);
-        SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
-        if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view
-            value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format);
-
-        // Step buttons
-        const ImVec2 backup_frame_padding = style.FramePadding;
-        style.FramePadding.x = style.FramePadding.y;
-        ImGuiButtonFlags button_flags = ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups;
-        if (flags & ImGuiInputTextFlags_ReadOnly)
-            button_flags |= ImGuiButtonFlags_Disabled;
-        SameLine(0, style.ItemInnerSpacing.x);
-        if (ButtonEx("-", ImVec2(button_size, button_size), button_flags))
-        {
-            DataTypeApplyOp(data_type, '-', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
-            value_changed = true;
-        }
-        SameLine(0, style.ItemInnerSpacing.x);
-        if (ButtonEx("+", ImVec2(button_size, button_size), button_flags))
-        {
-            DataTypeApplyOp(data_type, '+', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
-            value_changed = true;
-        }
-
-        const char* label_end = FindRenderedTextEnd(label);
-        if (label != label_end)
-        {
-            SameLine(0, style.ItemInnerSpacing.x);
-            TextEx(label, label_end);
-        }
-        style.FramePadding = backup_frame_padding;
-
-        PopID();
-        EndGroup();
-    }
-    else
-    {
-        if (InputText(label, buf, IM_ARRAYSIZE(buf), flags))
-            value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, p_data, format);
-    }
-    if (value_changed)
-        MarkItemEdited(window->DC.LastItemId);
-
-    return value_changed;
-}
-
-bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    bool value_changed = false;
-    BeginGroup();
-    PushID(label);
-    PushMultiItemsWidths(components, CalcItemWidth());
-    size_t type_size = GDataTypeInfo[data_type].Size;
-    for (int i = 0; i < components; i++)
-    {
-        PushID(i);
-        if (i > 0)
-            SameLine(0, g.Style.ItemInnerSpacing.x);
-        value_changed |= InputScalar("", data_type, p_data, p_step, p_step_fast, format, flags);
-        PopID();
-        PopItemWidth();
-        p_data = (void*)((char*)p_data + type_size);
-    }
-    PopID();
-
-    const char* label_end = FindRenderedTextEnd(label);
-    if (label != label_end)
-    {
-        SameLine(0.0f, g.Style.ItemInnerSpacing.x);
-        TextEx(label, label_end);
-    }
-
-    EndGroup();
-    return value_changed;
-}
-
-bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags)
-{
-    flags |= ImGuiInputTextFlags_CharsScientific;
-    return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, flags);
-}
-
-bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
-}
-
-bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
-}
-
-bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
-}
-
-// Prefer using "const char* format" directly, which is more flexible and consistent with other API.
-#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, int decimal_precision, ImGuiInputTextFlags flags)
-{
-    char format[16] = "%f";
-    if (decimal_precision >= 0)
-        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
-    return InputFloat(label, v, step, step_fast, format, flags);
-}
-
-bool ImGui::InputFloat2(const char* label, float v[2], int decimal_precision, ImGuiInputTextFlags flags)
-{
-    char format[16] = "%f";
-    if (decimal_precision >= 0)
-        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
-    return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
-}
-
-bool ImGui::InputFloat3(const char* label, float v[3], int decimal_precision, ImGuiInputTextFlags flags)
-{
-    char format[16] = "%f";
-    if (decimal_precision >= 0)
-        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
-    return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
-}
-
-bool ImGui::InputFloat4(const char* label, float v[4], int decimal_precision, ImGuiInputTextFlags flags)
-{
-    char format[16] = "%f";
-    if (decimal_precision >= 0)
-        ImFormatString(format, IM_ARRAYSIZE(format), "%%.%df", decimal_precision);
-    return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
-}
-#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
-
-bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags)
-{
-    // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
-    const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d";
-    return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, flags);
-}
-
-bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", flags);
-}
-
-bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", flags);
-}
-
-bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags)
-{
-    return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", flags);
-}
-
-bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags)
-{
-    flags |= ImGuiInputTextFlags_CharsScientific;
-    return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, flags);
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: InputText, InputTextMultiline, InputTextWithHint
-//-------------------------------------------------------------------------
-// - InputText()
-// - InputTextWithHint()
-// - InputTextMultiline()
-// - InputTextEx() [Internal]
-//-------------------------------------------------------------------------
-
-bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
-{
-    IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
-    return InputTextEx(label, NULL, buf, (int)buf_size, ImVec2(0,0), flags, callback, user_data);
-}
-
-bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
-{
-    return InputTextEx(label, NULL, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
-}
-
-bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
-{
-    IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
-    return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data);
-}
-
-static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end)
-{
-    int line_count = 0;
-    const char* s = text_begin;
-    while (char c = *s++) // We are only matching for \n so we can ignore UTF-8 decoding
-        if (c == '\n')
-            line_count++;
-    s--;
-    if (s[0] != '\n' && s[0] != '\r')
-        line_count++;
-    *out_text_end = s;
-    return line_count;
-}
-
-static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
-{
-    ImGuiContext& g = *GImGui;
-    ImFont* font = g.Font;
-    const float line_height = g.FontSize;
-    const float scale = line_height / font->FontSize;
-
-    ImVec2 text_size = ImVec2(0,0);
-    float line_width = 0.0f;
-
-    const ImWchar* s = text_begin;
-    while (s < text_end)
-    {
-        unsigned int c = (unsigned int)(*s++);
-        if (c == '\n')
-        {
-            text_size.x = ImMax(text_size.x, line_width);
-            text_size.y += line_height;
-            line_width = 0.0f;
-            if (stop_on_new_line)
-                break;
-            continue;
-        }
-        if (c == '\r')
-            continue;
-
-        const float char_width = font->GetCharAdvance((ImWchar)c) * scale;
-        line_width += char_width;
-    }
-
-    if (text_size.x < line_width)
-        text_size.x = line_width;
-
-    if (out_offset)
-        *out_offset = ImVec2(line_width, text_size.y + line_height);  // offset allow for the possibility of sitting after a trailing \n
-
-    if (line_width > 0 || text_size.y == 0.0f)                        // whereas size.y will ignore the trailing \n
-        text_size.y += line_height;
-
-    if (remaining)
-        *remaining = s;
-
-    return text_size;
-}
-
-// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar)
-namespace ImStb
-{
-
-static int     STB_TEXTEDIT_STRINGLEN(const STB_TEXTEDIT_STRING* obj)                             { return obj->CurLenW; }
-static ImWchar STB_TEXTEDIT_GETCHAR(const STB_TEXTEDIT_STRING* obj, int idx)                      { return obj->TextW[idx]; }
-static float   STB_TEXTEDIT_GETWIDTH(STB_TEXTEDIT_STRING* obj, int line_start_idx, int char_idx)  { ImWchar c = obj->TextW[line_start_idx + char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *GImGui; return g.Font->GetCharAdvance(c) * (g.FontSize / g.Font->FontSize); }
-static int     STB_TEXTEDIT_KEYTOTEXT(int key)                                                    { return key >= 0x200000 ? 0 : key; }
-static ImWchar STB_TEXTEDIT_NEWLINE = '\n';
-static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* obj, int line_start_idx)
-{
-    const ImWchar* text = obj->TextW.Data;
-    const ImWchar* text_remaining = NULL;
-    const ImVec2 size = InputTextCalcTextSizeW(text + line_start_idx, text + obj->CurLenW, &text_remaining, NULL, true);
-    r->x0 = 0.0f;
-    r->x1 = size.x;
-    r->baseline_y_delta = size.y;
-    r->ymin = 0.0f;
-    r->ymax = size.y;
-    r->num_chars = (int)(text_remaining - (text + line_start_idx));
-}
-
-static bool is_separator(unsigned int c)                                        { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; }
-static int  is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx)      { return idx > 0 ? (is_separator( obj->TextW[idx-1] ) && !is_separator( obj->TextW[idx] ) ) : 1; }
-static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)   { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; }
-#ifdef __APPLE__    // FIXME: Move setting to IO structure
-static int  is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx)       { return idx > 0 ? (!is_separator( obj->TextW[idx-1] ) && is_separator( obj->TextW[idx] ) ) : 1; }
-static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; }
-#else
-static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; }
-#endif
-#define STB_TEXTEDIT_MOVEWORDLEFT   STB_TEXTEDIT_MOVEWORDLEFT_IMPL    // They need to be #define for stb_textedit.h
-#define STB_TEXTEDIT_MOVEWORDRIGHT  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL
-
-static void STB_TEXTEDIT_DELETECHARS(STB_TEXTEDIT_STRING* obj, int pos, int n)
-{
-    ImWchar* dst = obj->TextW.Data + pos;
-
-    // We maintain our buffer length in both UTF-8 and wchar formats
-    obj->CurLenA -= ImTextCountUtf8BytesFromStr(dst, dst + n);
-    obj->CurLenW -= n;
-
-    // Offset remaining text (FIXME-OPT: Use memmove)
-    const ImWchar* src = obj->TextW.Data + pos + n;
-    while (ImWchar c = *src++)
-        *dst++ = c;
-    *dst = '\0';
-}
-
-static bool STB_TEXTEDIT_INSERTCHARS(STB_TEXTEDIT_STRING* obj, int pos, const ImWchar* new_text, int new_text_len)
-{
-    const bool is_resizable = (obj->UserFlags & ImGuiInputTextFlags_CallbackResize) != 0;
-    const int text_len = obj->CurLenW;
-    IM_ASSERT(pos <= text_len);
-
-    const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len);
-    if (!is_resizable && (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufCapacityA))
-        return false;
-
-    // Grow internal buffer if needed
-    if (new_text_len + text_len + 1 > obj->TextW.Size)
-    {
-        if (!is_resizable)
-            return false;
-        IM_ASSERT(text_len < obj->TextW.Size);
-        obj->TextW.resize(text_len + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1);
-    }
-
-    ImWchar* text = obj->TextW.Data;
-    if (pos != text_len)
-        memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar));
-    memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar));
-
-    obj->CurLenW += new_text_len;
-    obj->CurLenA += new_text_len_utf8;
-    obj->TextW[obj->CurLenW] = '\0';
-
-    return true;
-}
-
-// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols)
-#define STB_TEXTEDIT_K_LEFT         0x200000 // keyboard input to move cursor left
-#define STB_TEXTEDIT_K_RIGHT        0x200001 // keyboard input to move cursor right
-#define STB_TEXTEDIT_K_UP           0x200002 // keyboard input to move cursor up
-#define STB_TEXTEDIT_K_DOWN         0x200003 // keyboard input to move cursor down
-#define STB_TEXTEDIT_K_LINESTART    0x200004 // keyboard input to move cursor to start of line
-#define STB_TEXTEDIT_K_LINEEND      0x200005 // keyboard input to move cursor to end of line
-#define STB_TEXTEDIT_K_TEXTSTART    0x200006 // keyboard input to move cursor to start of text
-#define STB_TEXTEDIT_K_TEXTEND      0x200007 // keyboard input to move cursor to end of text
-#define STB_TEXTEDIT_K_DELETE       0x200008 // keyboard input to delete selection or character under cursor
-#define STB_TEXTEDIT_K_BACKSPACE    0x200009 // keyboard input to delete selection or character left of cursor
-#define STB_TEXTEDIT_K_UNDO         0x20000A // keyboard input to perform undo
-#define STB_TEXTEDIT_K_REDO         0x20000B // keyboard input to perform redo
-#define STB_TEXTEDIT_K_WORDLEFT     0x20000C // keyboard input to move cursor left one word
-#define STB_TEXTEDIT_K_WORDRIGHT    0x20000D // keyboard input to move cursor right one word
-#define STB_TEXTEDIT_K_SHIFT        0x400000
-
-#define STB_TEXTEDIT_IMPLEMENTATION
-#include "imstb_textedit.h"
-
-// stb_textedit internally allows for a single undo record to do addition and deletion, but somehow, calling
-// the stb_textedit_paste() function creates two separate records, so we perform it manually. (FIXME: Report to nothings/stb?)
-static void stb_textedit_replace(STB_TEXTEDIT_STRING* str, STB_TexteditState* state, const STB_TEXTEDIT_CHARTYPE* text, int text_len)
-{
-    stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len);
-    ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW);
-    if (text_len <= 0)
-        return;
-    if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len))
-    {
-        state->cursor = text_len;
-        state->has_preferred_x = 0;
-        return;
-    }
-    IM_ASSERT(0); // Failed to insert character, normally shouldn't happen because of how we currently use stb_textedit_replace()
-}
-
-} // namespace ImStb
-
-void ImGuiInputTextState::OnKeyPressed(int key)
-{
-    stb_textedit_key(this, &Stb, key);
-    CursorFollow = true;
-    CursorAnimReset();
-}
-
-ImGuiInputTextCallbackData::ImGuiInputTextCallbackData()
-{
-    memset(this, 0, sizeof(*this));
-}
-
-// Public API to manipulate UTF-8 text
-// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
-// FIXME: The existence of this rarely exercised code path is a bit of a nuisance.
-void ImGuiInputTextCallbackData::DeleteChars(int pos, int bytes_count)
-{
-    IM_ASSERT(pos + bytes_count <= BufTextLen);
-    char* dst = Buf + pos;
-    const char* src = Buf + pos + bytes_count;
-    while (char c = *src++)
-        *dst++ = c;
-    *dst = '\0';
-
-    if (CursorPos + bytes_count >= pos)
-        CursorPos -= bytes_count;
-    else if (CursorPos >= pos)
-        CursorPos = pos;
-    SelectionStart = SelectionEnd = CursorPos;
-    BufDirty = true;
-    BufTextLen -= bytes_count;
-}
-
-void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, const char* new_text_end)
-{
-    const bool is_resizable = (Flags & ImGuiInputTextFlags_CallbackResize) != 0;
-    const int new_text_len = new_text_end ? (int)(new_text_end - new_text) : (int)strlen(new_text);
-    if (new_text_len + BufTextLen >= BufSize)
-    {
-        if (!is_resizable)
-            return;
-
-        // Contrary to STB_TEXTEDIT_INSERTCHARS() this is working in the UTF8 buffer, hence the midly similar code (until we remove the U16 buffer alltogether!)
-        ImGuiContext& g = *GImGui;
-        ImGuiInputTextState* edit_state = &g.InputTextState;
-        IM_ASSERT(edit_state->ID != 0 && g.ActiveId == edit_state->ID);
-        IM_ASSERT(Buf == edit_state->TextA.Data);
-        int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1;
-        edit_state->TextA.reserve(new_buf_size + 1);
-        Buf = edit_state->TextA.Data;
-        BufSize = edit_state->BufCapacityA = new_buf_size;
-    }
-
-    if (BufTextLen != pos)
-        memmove(Buf + pos + new_text_len, Buf + pos, (size_t)(BufTextLen - pos));
-    memcpy(Buf + pos, new_text, (size_t)new_text_len * sizeof(char));
-    Buf[BufTextLen + new_text_len] = '\0';
-
-    if (CursorPos >= pos)
-        CursorPos += new_text_len;
-    SelectionStart = SelectionEnd = CursorPos;
-    BufDirty = true;
-    BufTextLen += new_text_len;
-}
-
-// Return false to discard a character.
-static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
-{
-    unsigned int c = *p_char;
-
-    // Filter non-printable (NB: isprint is unreliable! see #2467)
-    if (c < 0x20)
-    {
-        bool pass = false;
-        pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline));
-        pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput));
-        if (!pass)
-            return false;
-    }
-
-    // We ignore Ascii representation of delete (emitted from Backspace on OSX, see #2578, #2817)
-    if (c == 127)
-        return false;
-
-    // Filter private Unicode range. GLFW on OSX seems to send private characters for special keys like arrow keys (FIXME)
-    if (c >= 0xE000 && c <= 0xF8FF)
-        return false;
-
-    // Filter Unicode ranges we are not handling in this build.
-    if (c > IM_UNICODE_CODEPOINT_MAX)
-        return false;
-
-    // Generic named filters
-    if (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_CharsScientific))
-    {
-        if (flags & ImGuiInputTextFlags_CharsDecimal)
-            if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/'))
-                return false;
-
-        if (flags & ImGuiInputTextFlags_CharsScientific)
-            if (!(c >= '0' && c <= '9') && (c != '.') && (c != '-') && (c != '+') && (c != '*') && (c != '/') && (c != 'e') && (c != 'E'))
-                return false;
-
-        if (flags & ImGuiInputTextFlags_CharsHexadecimal)
-            if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F'))
-                return false;
-
-        if (flags & ImGuiInputTextFlags_CharsUppercase)
-            if (c >= 'a' && c <= 'z')
-                *p_char = (c += (unsigned int)('A'-'a'));
-
-        if (flags & ImGuiInputTextFlags_CharsNoBlank)
-            if (ImCharIsBlankW(c))
-                return false;
-    }
-
-    // Custom callback filter
-    if (flags & ImGuiInputTextFlags_CallbackCharFilter)
-    {
-        ImGuiInputTextCallbackData callback_data;
-        memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
-        callback_data.EventFlag = ImGuiInputTextFlags_CallbackCharFilter;
-        callback_data.EventChar = (ImWchar)c;
-        callback_data.Flags = flags;
-        callback_data.UserData = user_data;
-        if (callback(&callback_data) != 0)
-            return false;
-        *p_char = callback_data.EventChar;
-        if (!callback_data.EventChar)
-            return false;
-    }
-
-    return true;
-}
-
-// Edit a string of text
-// - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!".
-//   This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match
-//   Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator.
-// - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while the InputText is active has no effect.
-// - If you want to use ImGui::InputText() with std::string, see misc/cpp/imgui_stdlib.h
-// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are
-//  doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
-bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline)));        // Can't use both together (they both use up/down keys)
-    IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key)
-
-    ImGuiContext& g = *GImGui;
-    ImGuiIO& io = g.IO;
-    const ImGuiStyle& style = g.Style;
-
-    const bool RENDER_SELECTION_WHEN_INACTIVE = false;
-    const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
-    const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0;
-    const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
-    const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
-    const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0;
-    if (is_resizable)
-        IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
-
-    if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope,
-        BeginGroup();
-    const ImGuiID id = window->GetID(label);
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line
-    const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y);
-
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
-    const ImRect total_bb(frame_bb.Min, frame_bb.Min + total_size);
-
-    ImGuiWindow* draw_window = window;
-    ImVec2 inner_size = frame_size;
-    if (is_multiline)
-    {
-        if (!ItemAdd(total_bb, id, &frame_bb))
-        {
-            ItemSize(total_bb, style.FramePadding.y);
-            EndGroup();
-            return false;
-        }
-
-        // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug.
-        PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
-        PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
-        PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
-        PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
-        bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding);
-        PopStyleVar(3);
-        PopStyleColor();
-        if (!child_visible)
-        {
-            EndChild();
-            EndGroup();
-            return false;
-        }
-        draw_window = g.CurrentWindow; // Child window
-        draw_window->DC.NavLayerActiveMaskNext |= draw_window->DC.NavLayerCurrentMask; // This is to ensure that EndChild() will display a navigation highlight so we can "enter" into it.
-        inner_size.x -= draw_window->ScrollbarSizes.x;
-    }
-    else
-    {
-        ItemSize(total_bb, style.FramePadding.y);
-        if (!ItemAdd(total_bb, id, &frame_bb))
-            return false;
-    }
-    const bool hovered = ItemHoverable(frame_bb, id);
-    if (hovered)
-        g.MouseCursor = ImGuiMouseCursor_TextInput;
-
-    // We are only allowed to access the state if we are already the active widget.
-    ImGuiInputTextState* state = GetInputTextState(id);
-
-    const bool focus_requested = FocusableItemRegister(window, id);
-    const bool focus_requested_by_code = focus_requested && (g.FocusRequestCurrWindow == window && g.FocusRequestCurrCounterRegular == window->DC.FocusCounterRegular);
-    const bool focus_requested_by_tab = focus_requested && !focus_requested_by_code;
-
-    const bool user_clicked = hovered && io.MouseClicked[0];
-    const bool user_nav_input_start = (g.ActiveId != id) && ((g.NavInputId == id) || (g.NavActivateId == id && g.NavInputSource == ImGuiInputSource_NavKeyboard));
-    const bool user_scroll_finish = is_multiline && state != NULL && g.ActiveId == 0 && g.ActiveIdPreviousFrame == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
-    const bool user_scroll_active = is_multiline && state != NULL && g.ActiveId == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
-
-    bool clear_active_id = false;
-    bool select_all = (g.ActiveId != id) && ((flags & ImGuiInputTextFlags_AutoSelectAll) != 0 || user_nav_input_start) && (!is_multiline);
-
-    const bool init_make_active = (focus_requested || user_clicked || user_scroll_finish || user_nav_input_start);
-    const bool init_state = (init_make_active || user_scroll_active);
-    if (init_state && g.ActiveId != id)
-    {
-        // Access state even if we don't own it yet.
-        state = &g.InputTextState;
-        state->CursorAnimReset();
-
-        // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar)
-        // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode)
-        const int buf_len = (int)strlen(buf);
-        state->InitialTextA.resize(buf_len + 1);    // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string.
-        memcpy(state->InitialTextA.Data, buf, buf_len + 1);
-
-        // Start edition
-        const char* buf_end = NULL;
-        state->TextW.resize(buf_size + 1);          // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string.
-        state->TextA.resize(0);
-        state->TextAIsValid = false;                // TextA is not valid yet (we will display buf until then)
-        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end);
-        state->CurLenA = (int)(buf_end - buf);      // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8.
-
-        // Preserve cursor position and undo/redo stack if we come back to same widget
-        // FIXME: For non-readonly widgets we might be able to require that TextAIsValid && TextA == buf ? (untested) and discard undo stack if user buffer has changed.
-        const bool recycle_state = (state->ID == id);
-        if (recycle_state)
-        {
-            // Recycle existing cursor/selection/undo stack but clamp position
-            // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler.
-            state->CursorClamp();
-        }
-        else
-        {
-            state->ID = id;
-            state->ScrollX = 0.0f;
-            stb_textedit_initialize_state(&state->Stb, !is_multiline);
-            if (!is_multiline && focus_requested_by_code)
-                select_all = true;
-        }
-        if (flags & ImGuiInputTextFlags_AlwaysInsertMode)
-            state->Stb.insert_mode = 1;
-        if (!is_multiline && (focus_requested_by_tab || (user_clicked && io.KeyCtrl)))
-            select_all = true;
-    }
-
-    if (g.ActiveId != id && init_make_active)
-    {
-        IM_ASSERT(state && state->ID == id);
-        SetActiveID(id, window);
-        SetFocusID(id, window);
-        FocusWindow(window);
-
-        // Declare our inputs
-        IM_ASSERT(ImGuiNavInput_COUNT < 32);
-        g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
-        if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory))
-            g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
-        g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);
-        g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Home) | ((ImU64)1 << ImGuiKey_End);
-        if (is_multiline)
-            g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_PageUp) | ((ImU64)1 << ImGuiKey_PageDown); // FIXME-NAV: Page up/down actually not supported yet by widget, but claim them ahead.
-        if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput))  // Disable keyboard tabbing out as we will use the \t character.
-            g.ActiveIdUsingKeyInputMask |= ((ImU64)1 << ImGuiKey_Tab);
-    }
-
-    // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function)
-    if (g.ActiveId == id && state == NULL)
-        ClearActiveID();
-
-    // Release focus when we click outside
-    if (g.ActiveId == id && io.MouseClicked[0] && !init_state && !init_make_active) //-V560
-        clear_active_id = true;
-
-    // Lock the decision of whether we are going to take the path displaying the cursor or selection
-    const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
-    bool render_selection = state && state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
-    bool value_changed = false;
-    bool enter_pressed = false;
-
-    // When read-only we always use the live data passed to the function
-    // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :(
-    if (is_readonly && state != NULL && (render_cursor || render_selection))
-    {
-        const char* buf_end = NULL;
-        state->TextW.resize(buf_size + 1);
-        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, buf, NULL, &buf_end);
-        state->CurLenA = (int)(buf_end - buf);
-        state->CursorClamp();
-        render_selection &= state->HasSelection();
-    }
-
-    // Select the buffer to render.
-    const bool buf_display_from_state = (render_cursor || render_selection || g.ActiveId == id) && !is_readonly && state && state->TextAIsValid;
-    const bool is_displaying_hint = (hint != NULL && (buf_display_from_state ? state->TextA.Data : buf)[0] == 0);
-
-    // Password pushes a temporary font with only a fallback glyph
-    if (is_password && !is_displaying_hint)
-    {
-        const ImFontGlyph* glyph = g.Font->FindGlyph('*');
-        ImFont* password_font = &g.InputTextPasswordFont;
-        password_font->FontSize = g.Font->FontSize;
-        password_font->Scale = g.Font->Scale;
-        password_font->DisplayOffset = g.Font->DisplayOffset;
-        password_font->Ascent = g.Font->Ascent;
-        password_font->Descent = g.Font->Descent;
-        password_font->ContainerAtlas = g.Font->ContainerAtlas;
-        password_font->FallbackGlyph = glyph;
-        password_font->FallbackAdvanceX = glyph->AdvanceX;
-        IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
-        PushFont(password_font);
-    }
-
-    // Process mouse inputs and character inputs
-    int backup_current_text_length = 0;
-    if (g.ActiveId == id)
-    {
-        IM_ASSERT(state != NULL);
-        backup_current_text_length = state->CurLenA;
-        state->BufCapacityA = buf_size;
-        state->UserFlags = flags;
-        state->UserCallback = callback;
-        state->UserCallbackData = callback_user_data;
-
-        // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
-        // Down the line we should have a cleaner library-wide concept of Selected vs Active.
-        g.ActiveIdAllowOverlap = !io.MouseDown[0];
-        g.WantTextInputNextFrame = 1;
-
-        // Edit in progress
-        const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX;
-        const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
-
-        const bool is_osx = io.ConfigMacOSXBehaviors;
-        if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0]))
-        {
-            state->SelectAll();
-            state->SelectedAllMouseLock = true;
-        }
-        else if (hovered && is_osx && io.MouseDoubleClicked[0])
-        {
-            // Double-click select a word only, OS X style (by simulating keystrokes)
-            state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
-            state->OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
-        }
-        else if (io.MouseClicked[0] && !state->SelectedAllMouseLock)
-        {
-            if (hovered)
-            {
-                stb_textedit_click(state, &state->Stb, mouse_x, mouse_y);
-                state->CursorAnimReset();
-            }
-        }
-        else if (io.MouseDown[0] && !state->SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
-        {
-            stb_textedit_drag(state, &state->Stb, mouse_x, mouse_y);
-            state->CursorAnimReset();
-            state->CursorFollow = true;
-        }
-        if (state->SelectedAllMouseLock && !io.MouseDown[0])
-            state->SelectedAllMouseLock = false;
-
-        // It is ill-defined whether the back-end needs to send a \t character when pressing the TAB keys.
-        // Win32 and GLFW naturally do it but not SDL.
-        const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper);
-        if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressedMap(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly)
-            if (!io.InputQueueCharacters.contains('\t'))
-            {
-                unsigned int c = '\t'; // Insert TAB
-                if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
-                    state->OnKeyPressed((int)c);
-            }
-
-        // Process regular text input (before we check for Return because using some IME will effectively send a Return?)
-        // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters.
-        if (io.InputQueueCharacters.Size > 0)
-        {
-            if (!ignore_char_inputs && !is_readonly && !user_nav_input_start)
-                for (int n = 0; n < io.InputQueueCharacters.Size; n++)
-                {
-                    // Insert character if they pass filtering
-                    unsigned int c = (unsigned int)io.InputQueueCharacters[n];
-                    if (c == '\t' && io.KeyShift)
-                        continue;
-                    if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
-                        state->OnKeyPressed((int)c);
-                }
-
-            // Consume characters
-            io.InputQueueCharacters.resize(0);
-        }
-    }
-
-    // Process other shortcuts/key-presses
-    bool cancel_edit = false;
-    if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id)
-    {
-        IM_ASSERT(state != NULL);
-        const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0);
-        const bool is_osx = io.ConfigMacOSXBehaviors;
-        const bool is_shortcut_key = (is_osx ? (io.KeySuper && !io.KeyCtrl) : (io.KeyCtrl && !io.KeySuper)) && !io.KeyAlt && !io.KeyShift; // OS X style: Shortcuts using Cmd/Super instead of Ctrl
-        const bool is_osx_shift_shortcut = is_osx && io.KeySuper && io.KeyShift && !io.KeyCtrl && !io.KeyAlt;
-        const bool is_wordmove_key_down = is_osx ? io.KeyAlt : io.KeyCtrl;                     // OS X style: Text editing cursor movement using Alt instead of Ctrl
-        const bool is_startend_key_down = is_osx && io.KeySuper && !io.KeyCtrl && !io.KeyAlt;  // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End
-        const bool is_ctrl_key_only = io.KeyCtrl && !io.KeyShift && !io.KeyAlt && !io.KeySuper;
-        const bool is_shift_key_only = io.KeyShift && !io.KeyCtrl && !io.KeyAlt && !io.KeySuper;
-
-        const bool is_cut   = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection());
-        const bool is_copy  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_C)) || (is_ctrl_key_only  && IsKeyPressedMap(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection());
-        const bool is_paste = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressedMap(ImGuiKey_Insert))) && !is_readonly;
-        const bool is_undo  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Z)) && !is_readonly && is_undoable);
-        const bool is_redo  = ((is_shortcut_key && IsKeyPressedMap(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressedMap(ImGuiKey_Z))) && !is_readonly && is_undoable;
-
-        if (IsKeyPressedMap(ImGuiKey_LeftArrow))                        { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_RightArrow))                  { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_UpArrow) && is_multiline)     { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_DownArrow) && is_multiline)   { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_Home))                        { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_End))                         { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_Delete) && !is_readonly)      { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
-        else if (IsKeyPressedMap(ImGuiKey_Backspace) && !is_readonly)
-        {
-            if (!state->HasSelection())
-            {
-                if (is_wordmove_key_down)
-                    state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT);
-                else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl)
-                    state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT);
-            }
-            state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
-        }
-        else if (IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter))
-        {
-            bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
-            if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
-            {
-                enter_pressed = clear_active_id = true;
-            }
-            else if (!is_readonly)
-            {
-                unsigned int c = '\n'; // Insert new line
-                if (InputTextFilterCharacter(&c, flags, callback, callback_user_data))
-                    state->OnKeyPressed((int)c);
-            }
-        }
-        else if (IsKeyPressedMap(ImGuiKey_Escape))
-        {
-            clear_active_id = cancel_edit = true;
-        }
-        else if (is_undo || is_redo)
-        {
-            state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO);
-            state->ClearSelection();
-        }
-        else if (is_shortcut_key && IsKeyPressedMap(ImGuiKey_A))
-        {
-            state->SelectAll();
-            state->CursorFollow = true;
-        }
-        else if (is_cut || is_copy)
-        {
-            // Cut, Copy
-            if (io.SetClipboardTextFn)
-            {
-                const int ib = state->HasSelection() ? ImMin(state->Stb.select_start, state->Stb.select_end) : 0;
-                const int ie = state->HasSelection() ? ImMax(state->Stb.select_start, state->Stb.select_end) : state->CurLenW;
-                const int clipboard_data_len = ImTextCountUtf8BytesFromStr(state->TextW.Data + ib, state->TextW.Data + ie) + 1;
-                char* clipboard_data = (char*)IM_ALLOC(clipboard_data_len * sizeof(char));
-                ImTextStrToUtf8(clipboard_data, clipboard_data_len, state->TextW.Data + ib, state->TextW.Data + ie);
-                SetClipboardText(clipboard_data);
-                MemFree(clipboard_data);
-            }
-            if (is_cut)
-            {
-                if (!state->HasSelection())
-                    state->SelectAll();
-                state->CursorFollow = true;
-                stb_textedit_cut(state, &state->Stb);
-            }
-        }
-        else if (is_paste)
-        {
-            if (const char* clipboard = GetClipboardText())
-            {
-                // Filter pasted buffer
-                const int clipboard_len = (int)strlen(clipboard);
-                ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len+1) * sizeof(ImWchar));
-                int clipboard_filtered_len = 0;
-                for (const char* s = clipboard; *s; )
-                {
-                    unsigned int c;
-                    s += ImTextCharFromUtf8(&c, s, NULL);
-                    if (c == 0)
-                        break;
-                    if (!InputTextFilterCharacter(&c, flags, callback, callback_user_data))
-                        continue;
-                    clipboard_filtered[clipboard_filtered_len++] = (ImWchar)c;
-                }
-                clipboard_filtered[clipboard_filtered_len] = 0;
-                if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation
-                {
-                    stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
-                    state->CursorFollow = true;
-                }
-                MemFree(clipboard_filtered);
-            }
-        }
-
-        // Update render selection flag after events have been handled, so selection highlight can be displayed during the same frame.
-        render_selection |= state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
-    }
-
-    // Process callbacks and apply result back to user's buffer.
-    if (g.ActiveId == id)
-    {
-        IM_ASSERT(state != NULL);
-        const char* apply_new_text = NULL;
-        int apply_new_text_length = 0;
-        if (cancel_edit)
-        {
-            // Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
-            if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0)
-            {
-                // Push records into the undo stack so we can CTRL+Z the revert operation itself
-                apply_new_text = state->InitialTextA.Data;
-                apply_new_text_length = state->InitialTextA.Size - 1;
-                ImVector<ImWchar> w_text;
-                if (apply_new_text_length > 0)
-                {
-                    w_text.resize(ImTextCountCharsFromUtf8(apply_new_text, apply_new_text + apply_new_text_length) + 1);
-                    ImTextStrFromUtf8(w_text.Data, w_text.Size, apply_new_text, apply_new_text + apply_new_text_length);
-                }
-                stb_textedit_replace(state, &state->Stb, w_text.Data, (apply_new_text_length > 0) ? (w_text.Size - 1) : 0);
-            }
-        }
-
-        // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame.
-        // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail.
-        // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize).
-        bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0);
-        if (apply_edit_back_to_user_buffer)
-        {
-            // Apply new value immediately - copy modified buffer back
-            // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer
-            // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect.
-            // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks.
-            if (!is_readonly)
-            {
-                state->TextAIsValid = true;
-                state->TextA.resize(state->TextW.Size * 4 + 1);
-                ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL);
-            }
-
-            // User callback
-            if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackAlways)) != 0)
-            {
-                IM_ASSERT(callback != NULL);
-
-                // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment.
-                ImGuiInputTextFlags event_flag = 0;
-                ImGuiKey event_key = ImGuiKey_COUNT;
-                if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressedMap(ImGuiKey_Tab))
-                {
-                    event_flag = ImGuiInputTextFlags_CallbackCompletion;
-                    event_key = ImGuiKey_Tab;
-                }
-                else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_UpArrow))
-                {
-                    event_flag = ImGuiInputTextFlags_CallbackHistory;
-                    event_key = ImGuiKey_UpArrow;
-                }
-                else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressedMap(ImGuiKey_DownArrow))
-                {
-                    event_flag = ImGuiInputTextFlags_CallbackHistory;
-                    event_key = ImGuiKey_DownArrow;
-                }
-                else if (flags & ImGuiInputTextFlags_CallbackAlways)
-                    event_flag = ImGuiInputTextFlags_CallbackAlways;
-
-                if (event_flag)
-                {
-                    ImGuiInputTextCallbackData callback_data;
-                    memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
-                    callback_data.EventFlag = event_flag;
-                    callback_data.Flags = flags;
-                    callback_data.UserData = callback_user_data;
-
-                    callback_data.EventKey = event_key;
-                    callback_data.Buf = state->TextA.Data;
-                    callback_data.BufTextLen = state->CurLenA;
-                    callback_data.BufSize = state->BufCapacityA;
-                    callback_data.BufDirty = false;
-
-                    // We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188)
-                    ImWchar* text = state->TextW.Data;
-                    const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + state->Stb.cursor);
-                    const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_start);
-                    const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_end);
-
-                    // Call user code
-                    callback(&callback_data);
-
-                    // Read back what user may have modified
-                    IM_ASSERT(callback_data.Buf == state->TextA.Data);  // Invalid to modify those fields
-                    IM_ASSERT(callback_data.BufSize == state->BufCapacityA);
-                    IM_ASSERT(callback_data.Flags == flags);
-                    if (callback_data.CursorPos != utf8_cursor_pos)            { state->Stb.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); state->CursorFollow = true; }
-                    if (callback_data.SelectionStart != utf8_selection_start)  { state->Stb.select_start = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); }
-                    if (callback_data.SelectionEnd != utf8_selection_end)      { state->Stb.select_end = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); }
-                    if (callback_data.BufDirty)
-                    {
-                        IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text!
-                        if (callback_data.BufTextLen > backup_current_text_length && is_resizable)
-                            state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length));
-                        state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL);
-                        state->CurLenA = callback_data.BufTextLen;  // Assume correct length and valid UTF-8 from user, saves us an extra strlen()
-                        state->CursorAnimReset();
-                    }
-                }
-            }
-
-            // Will copy result string if modified
-            if (!is_readonly && strcmp(state->TextA.Data, buf) != 0)
-            {
-                apply_new_text = state->TextA.Data;
-                apply_new_text_length = state->CurLenA;
-            }
-        }
-
-        // Copy result to user buffer
-        if (apply_new_text)
-        {
-            // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size
-            // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used
-            // without any storage on user's side.
-            IM_ASSERT(apply_new_text_length >= 0);
-            if (is_resizable)
-            {
-                ImGuiInputTextCallbackData callback_data;
-                callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize;
-                callback_data.Flags = flags;
-                callback_data.Buf = buf;
-                callback_data.BufTextLen = apply_new_text_length;
-                callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1);
-                callback_data.UserData = callback_user_data;
-                callback(&callback_data);
-                buf = callback_data.Buf;
-                buf_size = callback_data.BufSize;
-                apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
-                IM_ASSERT(apply_new_text_length <= buf_size);
-            }
-            //IMGUI_DEBUG_LOG("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length);
-
-            // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
-            ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
-            value_changed = true;
-        }
-
-        // Clear temporary user storage
-        state->UserFlags = 0;
-        state->UserCallback = NULL;
-        state->UserCallbackData = NULL;
-    }
-
-    // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
-    if (clear_active_id && g.ActiveId == id)
-        ClearActiveID();
-
-    // Render frame
-    if (!is_multiline)
-    {
-        RenderNavHighlight(frame_bb, id);
-        RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
-    }
-
-    const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + inner_size.x, frame_bb.Min.y + inner_size.y); // Not using frame_bb.Max because we have adjusted size
-    ImVec2 draw_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding;
-    ImVec2 text_size(0.0f, 0.0f);
-
-    // Set upper limit of single-line InputTextEx() at 2 million characters strings. The current pathological worst case is a long line
-    // without any carriage return, which would makes ImFont::RenderText() reserve too many vertices and probably crash. Avoid it altogether.
-    // Note that we only use this limit on single-line InputText(), so a pathologically large line on a InputTextMultiline() would still crash.
-    const int buf_display_max_length = 2 * 1024 * 1024;
-    const char* buf_display = buf_display_from_state ? state->TextA.Data : buf; //-V595
-    const char* buf_display_end = NULL; // We have specialized paths below for setting the length
-    if (is_displaying_hint)
-    {
-        buf_display = hint;
-        buf_display_end = hint + strlen(hint);
-    }
-
-    // Render text. We currently only render selection when the widget is active or while scrolling.
-    // FIXME: We could remove the '&& render_cursor' to keep rendering selection when inactive.
-    if (render_cursor || render_selection)
-    {
-        IM_ASSERT(state != NULL);
-        if (!is_displaying_hint)
-            buf_display_end = buf_display + state->CurLenA;
-
-        // Render text (with cursor and selection)
-        // This is going to be messy. We need to:
-        // - Display the text (this alone can be more easily clipped)
-        // - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation)
-        // - Measure text height (for scrollbar)
-        // We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort)
-        // FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8.
-        const ImWchar* text_begin = state->TextW.Data;
-        ImVec2 cursor_offset, select_start_offset;
-
-        {
-            // Find lines numbers straddling 'cursor' (slot 0) and 'select_start' (slot 1) positions.
-            const ImWchar* searches_input_ptr[2] = { NULL, NULL };
-            int searches_result_line_no[2] = { -1000, -1000 };
-            int searches_remaining = 0;
-            if (render_cursor)
-            {
-                searches_input_ptr[0] = text_begin + state->Stb.cursor;
-                searches_result_line_no[0] = -1;
-                searches_remaining++;
-            }
-            if (render_selection)
-            {
-                searches_input_ptr[1] = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
-                searches_result_line_no[1] = -1;
-                searches_remaining++;
-            }
-
-            // Iterate all lines to find our line numbers
-            // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter.
-            searches_remaining += is_multiline ? 1 : 0;
-            int line_count = 0;
-            //for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++)  // FIXME-OPT: Could use this when wchar_t are 16-bit
-            for (const ImWchar* s = text_begin; *s != 0; s++)
-                if (*s == '\n')
-                {
-                    line_count++;
-                    if (searches_result_line_no[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_no[0] = line_count; if (--searches_remaining <= 0) break; }
-                    if (searches_result_line_no[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_no[1] = line_count; if (--searches_remaining <= 0) break; }
-                }
-            line_count++;
-            if (searches_result_line_no[0] == -1)
-                searches_result_line_no[0] = line_count;
-            if (searches_result_line_no[1] == -1)
-                searches_result_line_no[1] = line_count;
-
-            // Calculate 2d position by finding the beginning of the line and measuring distance
-            cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x;
-            cursor_offset.y = searches_result_line_no[0] * g.FontSize;
-            if (searches_result_line_no[1] >= 0)
-            {
-                select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x;
-                select_start_offset.y = searches_result_line_no[1] * g.FontSize;
-            }
-
-            // Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224)
-            if (is_multiline)
-                text_size = ImVec2(inner_size.x, line_count * g.FontSize);
-        }
-
-        // Scroll
-        if (render_cursor && state->CursorFollow)
-        {
-            // Horizontal scroll in chunks of quarter width
-            if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll))
-            {
-                const float scroll_increment_x = inner_size.x * 0.25f;
-                if (cursor_offset.x < state->ScrollX)
-                    state->ScrollX = IM_FLOOR(ImMax(0.0f, cursor_offset.x - scroll_increment_x));
-                else if (cursor_offset.x - inner_size.x >= state->ScrollX)
-                    state->ScrollX = IM_FLOOR(cursor_offset.x - inner_size.x + scroll_increment_x);
-            }
-            else
-            {
-                state->ScrollX = 0.0f;
-            }
-
-            // Vertical scroll
-            if (is_multiline)
-            {
-                float scroll_y = draw_window->Scroll.y;
-                if (cursor_offset.y - g.FontSize < scroll_y)
-                    scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize);
-                else if (cursor_offset.y - inner_size.y >= scroll_y)
-                    scroll_y = cursor_offset.y - inner_size.y;
-                draw_pos.y += (draw_window->Scroll.y - scroll_y);   // Manipulate cursor pos immediately avoid a frame of lag
-                draw_window->Scroll.y = scroll_y;
-            }
-
-            state->CursorFollow = false;
-        }
-
-        // Draw selection
-        const ImVec2 draw_scroll = ImVec2(state->ScrollX, 0.0f);
-        if (render_selection)
-        {
-            const ImWchar* text_selected_begin = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
-            const ImWchar* text_selected_end = text_begin + ImMax(state->Stb.select_start, state->Stb.select_end);
-
-            ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg, render_cursor ? 1.0f : 0.6f); // FIXME: current code flow mandate that render_cursor is always true here, we are leaving the transparent one for tests.
-            float bg_offy_up = is_multiline ? 0.0f : -1.0f;    // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection.
-            float bg_offy_dn = is_multiline ? 0.0f : 2.0f;
-            ImVec2 rect_pos = draw_pos + select_start_offset - draw_scroll;
-            for (const ImWchar* p = text_selected_begin; p < text_selected_end; )
-            {
-                if (rect_pos.y > clip_rect.w + g.FontSize)
-                    break;
-                if (rect_pos.y < clip_rect.y)
-                {
-                    //p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p);  // FIXME-OPT: Could use this when wchar_t are 16-bit
-                    //p = p ? p + 1 : text_selected_end;
-                    while (p < text_selected_end)
-                        if (*p++ == '\n')
-                            break;
-                }
-                else
-                {
-                    ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true);
-                    if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines
-                    ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn));
-                    rect.ClipWith(clip_rect);
-                    if (rect.Overlaps(clip_rect))
-                        draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color);
-                }
-                rect_pos.x = draw_pos.x - draw_scroll.x;
-                rect_pos.y += g.FontSize;
-            }
-        }
-
-        // We test for 'buf_display_max_length' as a way to avoid some pathological cases (e.g. single-line 1 MB string) which would make ImDrawList crash.
-        if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
-        {
-            ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
-            draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
-        }
-
-        // Draw blinking cursor
-        if (render_cursor)
-        {
-            state->CursorAnim += io.DeltaTime;
-            bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (state->CursorAnim <= 0.0f) || ImFmod(state->CursorAnim, 1.20f) <= 0.80f;
-            ImVec2 cursor_screen_pos = draw_pos + cursor_offset - draw_scroll;
-            ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5f, cursor_screen_pos.x + 1.0f, cursor_screen_pos.y - 1.5f);
-            if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
-                draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text));
-
-            // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
-            if (!is_readonly)
-                g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
-        }
-    }
-    else
-    {
-        // Render text only (no selection, no cursor)
-        if (is_multiline)
-            text_size = ImVec2(inner_size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_display_end) * g.FontSize); // We don't need width
-        else if (!is_displaying_hint && g.ActiveId == id)
-            buf_display_end = buf_display + state->CurLenA;
-        else if (!is_displaying_hint)
-            buf_display_end = buf_display + strlen(buf_display);
-
-        if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
-        {
-            ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
-            draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
-        }
-    }
-
-    if (is_multiline)
-    {
-        Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line
-        EndChild();
-        EndGroup();
-    }
-
-    if (is_password && !is_displaying_hint)
-        PopFont();
-
-    // Log as text
-    if (g.LogEnabled && !(is_password && !is_displaying_hint))
-        LogRenderedText(&draw_pos, buf_display, buf_display_end);
-
-    if (label_size.x > 0)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited))
-        MarkItemEdited(id);
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
-    if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0)
-        return enter_pressed;
-    else
-        return value_changed;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
-//-------------------------------------------------------------------------
-// - ColorEdit3()
-// - ColorEdit4()
-// - ColorPicker3()
-// - RenderColorRectWithAlphaCheckerboard() [Internal]
-// - ColorPicker4()
-// - ColorButton()
-// - SetColorEditOptions()
-// - ColorTooltip() [Internal]
-// - ColorEditOptionsPopup() [Internal]
-// - ColorPickerOptionsPopup() [Internal]
-//-------------------------------------------------------------------------
-
-bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags)
-{
-    return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha);
-}
-
-// Edit colors components (each component in 0.0f..1.0f range).
-// See enum ImGuiColorEditFlags_ for available options. e.g. Only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
-// With typical options: Left-click on colored square to open color picker. Right-click to open option menu. CTRL-Click over input fields to edit them and TAB to go to next item.
-bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const float square_sz = GetFrameHeight();
-    const float w_full = CalcItemWidth();
-    const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
-    const float w_inputs = w_full - w_button;
-    const char* label_display_end = FindRenderedTextEnd(label);
-    g.NextItemData.ClearFlags();
-
-    BeginGroup();
-    PushID(label);
-
-    // If we're not showing any slider there's no point in doing any HSV conversions
-    const ImGuiColorEditFlags flags_untouched = flags;
-    if (flags & ImGuiColorEditFlags_NoInputs)
-        flags = (flags & (~ImGuiColorEditFlags__DisplayMask)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions;
-
-    // Context menu: display and modify options (before defaults are applied)
-    if (!(flags & ImGuiColorEditFlags_NoOptions))
-        ColorEditOptionsPopup(col, flags);
-
-    // Read stored options
-    if (!(flags & ImGuiColorEditFlags__DisplayMask))
-        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DisplayMask);
-    if (!(flags & ImGuiColorEditFlags__DataTypeMask))
-        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask);
-    if (!(flags & ImGuiColorEditFlags__PickerMask))
-        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask);
-    if (!(flags & ImGuiColorEditFlags__InputMask))
-        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask);
-    flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask));
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));   // Check that only 1 is selected
-
-    const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
-    const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
-    const int components = alpha ? 4 : 3;
-
-    // Convert to the formats we need
-    float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
-    if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
-        ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
-    else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
-    {
-        // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
-        ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
-        if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
-        {
-            if (f[1] == 0)
-                f[0] = g.ColorEditLastHue;
-            if (f[2] == 0)
-                f[1] = g.ColorEditLastSat;
-        }
-    }
-    int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
-
-    bool value_changed = false;
-    bool value_changed_as_float = false;
-
-    const ImVec2 pos = window->DC.CursorPos;
-    const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f;
-    window->DC.CursorPos.x = pos.x + inputs_offset_x;
-
-    if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
-    {
-        // RGB/HSV 0..255 Sliders
-        const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components));
-        const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1)));
-
-        const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
-        static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
-        static const char* fmt_table_int[3][4] =
-        {
-            {   "%3d",   "%3d",   "%3d",   "%3d" }, // Short display
-            { "R:%3d", "G:%3d", "B:%3d", "A:%3d" }, // Long display for RGBA
-            { "H:%3d", "S:%3d", "V:%3d", "A:%3d" }  // Long display for HSVA
-        };
-        static const char* fmt_table_float[3][4] =
-        {
-            {   "%0.3f",   "%0.3f",   "%0.3f",   "%0.3f" }, // Short display
-            { "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA
-            { "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" }  // Long display for HSVA
-        };
-        const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_DisplayHSV) ? 2 : 1;
-
-        for (int n = 0; n < components; n++)
-        {
-            if (n > 0)
-                SameLine(0, style.ItemInnerSpacing.x);
-            SetNextItemWidth((n + 1 < components) ? w_item_one : w_item_last);
-
-            // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0.
-            if (flags & ImGuiColorEditFlags_Float)
-            {
-                value_changed |= DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
-                value_changed_as_float |= value_changed;
-            }
-            else
-            {
-                value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
-            }
-            if (!(flags & ImGuiColorEditFlags_NoOptions))
-                OpenPopupOnItemClick("context");
-        }
-    }
-    else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
-    {
-        // RGB Hexadecimal Input
-        char buf[64];
-        if (alpha)
-            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255));
-        else
-            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255));
-        SetNextItemWidth(w_inputs);
-        if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
-        {
-            value_changed = true;
-            char* p = buf;
-            while (*p == '#' || ImCharIsBlankA(*p))
-                p++;
-            i[0] = i[1] = i[2] = i[3] = 0;
-            if (alpha)
-                sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned)
-            else
-                sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]);
-        }
-        if (!(flags & ImGuiColorEditFlags_NoOptions))
-            OpenPopupOnItemClick("context");
-    }
-
-    ImGuiWindow* picker_active_window = NULL;
-    if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
-    {
-        const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x;
-        window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y);
-
-        const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
-        if (ColorButton("##ColorButton", col_v4, flags))
-        {
-            if (!(flags & ImGuiColorEditFlags_NoPicker))
-            {
-                // Store current color and open a picker
-                g.ColorPickerRef = col_v4;
-                OpenPopup("picker");
-                SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1,style.ItemSpacing.y));
-            }
-        }
-        if (!(flags & ImGuiColorEditFlags_NoOptions))
-            OpenPopupOnItemClick("context");
-
-        if (BeginPopup("picker"))
-        {
-            picker_active_window = g.CurrentWindow;
-            if (label != label_display_end)
-            {
-                TextEx(label, label_display_end);
-                Spacing();
-            }
-            ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
-            ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
-            SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
-            value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
-            EndPopup();
-        }
-    }
-
-    if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
-    {
-        const float text_offset_x = (flags & ImGuiColorEditFlags_NoInputs) ? w_button : w_full + style.ItemInnerSpacing.x;
-        window->DC.CursorPos = ImVec2(pos.x + text_offset_x, pos.y + style.FramePadding.y);
-        TextEx(label, label_display_end);
-    }
-
-    // Convert back
-    if (value_changed && picker_active_window == NULL)
-    {
-        if (!value_changed_as_float)
-            for (int n = 0; n < 4; n++)
-                f[n] = i[n] / 255.0f;
-        if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
-        {
-            g.ColorEditLastHue = f[0];
-            g.ColorEditLastSat = f[1];
-            ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
-            memcpy(g.ColorEditLastColor, f, sizeof(float) * 3);
-        }
-        if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
-            ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
-
-        col[0] = f[0];
-        col[1] = f[1];
-        col[2] = f[2];
-        if (alpha)
-            col[3] = f[3];
-    }
-
-    PopID();
-    EndGroup();
-
-    // Drag and Drop Target
-    // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
-    if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget())
-    {
-        bool accepted_drag_drop = false;
-        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
-        {
-            memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512
-            value_changed = accepted_drag_drop = true;
-        }
-        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
-        {
-            memcpy((float*)col, payload->Data, sizeof(float) * components);
-            value_changed = accepted_drag_drop = true;
-        }
-
-        // Drag-drop payloads are always RGB
-        if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV))
-            ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]);
-        EndDragDropTarget();
-    }
-
-    // When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4().
-    if (picker_active_window && g.ActiveId != 0 && g.ActiveIdWindow == picker_active_window)
-        window->DC.LastItemId = g.ActiveId;
-
-    if (value_changed)
-        MarkItemEdited(window->DC.LastItemId);
-
-    return value_changed;
-}
-
-bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags)
-{
-    float col4[4] = { col[0], col[1], col[2], 1.0f };
-    if (!ColorPicker4(label, col4, flags | ImGuiColorEditFlags_NoAlpha))
-        return false;
-    col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2];
-    return true;
-}
-
-// Helper for ColorPicker4()
-static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha)
-{
-    ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
-    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1,         pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
-    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x,             pos.y), half_sz,                              ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
-    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left,  IM_COL32(0,0,0,alpha8));
-    ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x,     pos.y), half_sz,                              ImGuiDir_Left,  IM_COL32(255,255,255,alpha8));
-}
-
-// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
-// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.)
-// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
-// FIXME: this is trying to be aware of style.Alpha but not fully correct. Also, the color wheel will have overlapping glitches with (style.Alpha < 1.0)
-bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImDrawList* draw_list = window->DrawList;
-    ImGuiStyle& style = g.Style;
-    ImGuiIO& io = g.IO;
-
-    const float width = CalcItemWidth();
-    g.NextItemData.ClearFlags();
-
-    PushID(label);
-    BeginGroup();
-
-    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
-        flags |= ImGuiColorEditFlags_NoSmallPreview;
-
-    // Context menu: display and store options.
-    if (!(flags & ImGuiColorEditFlags_NoOptions))
-        ColorPickerOptionsPopup(col, flags);
-
-    // Read stored options
-    if (!(flags & ImGuiColorEditFlags__PickerMask))
-        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
-    if (!(flags & ImGuiColorEditFlags__InputMask))
-        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));  // Check that only 1 is selected
-    if (!(flags & ImGuiColorEditFlags_NoOptions))
-        flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
-
-    // Setup
-    int components = (flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4;
-    bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha);
-    ImVec2 picker_pos = window->DC.CursorPos;
-    float square_sz = GetFrameHeight();
-    float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
-    float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
-    float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
-    float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
-    float bars_triangles_half_sz = IM_FLOOR(bars_width * 0.20f);
-
-    float backup_initial_col[4];
-    memcpy(backup_initial_col, col, components * sizeof(float));
-
-    float wheel_thickness = sv_picker_size * 0.08f;
-    float wheel_r_outer = sv_picker_size * 0.50f;
-    float wheel_r_inner = wheel_r_outer - wheel_thickness;
-    ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size*0.5f);
-
-    // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
-    float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f);
-    ImVec2 triangle_pa = ImVec2(triangle_r, 0.0f); // Hue point.
-    ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
-    ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
-
-    float H = col[0], S = col[1], V = col[2];
-    float R = col[0], G = col[1], B = col[2];
-    if (flags & ImGuiColorEditFlags_InputRGB)
-    {
-        // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
-        ColorConvertRGBtoHSV(R, G, B, H, S, V);
-        if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0)
-        {
-            if (S == 0)
-                H = g.ColorEditLastHue;
-            if (V == 0)
-                S = g.ColorEditLastSat;
-        }
-    }
-    else if (flags & ImGuiColorEditFlags_InputHSV)
-    {
-        ColorConvertHSVtoRGB(H, S, V, R, G, B);
-    }
-
-    bool value_changed = false, value_changed_h = false, value_changed_sv = false;
-
-    PushItemFlag(ImGuiItemFlags_NoNav, true);
-    if (flags & ImGuiColorEditFlags_PickerHueWheel)
-    {
-        // Hue wheel + SV triangle logic
-        InvisibleButton("hsv", ImVec2(sv_picker_size + style.ItemInnerSpacing.x + bars_width, sv_picker_size));
-        if (IsItemActive())
-        {
-            ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center;
-            ImVec2 current_off = g.IO.MousePos - wheel_center;
-            float initial_dist2 = ImLengthSqr(initial_off);
-            if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1))
-            {
-                // Interactive with Hue wheel
-                H = ImAtan2(current_off.y, current_off.x) / IM_PI*0.5f;
-                if (H < 0.0f)
-                    H += 1.0f;
-                value_changed = value_changed_h = true;
-            }
-            float cos_hue_angle = ImCos(-H * 2.0f * IM_PI);
-            float sin_hue_angle = ImSin(-H * 2.0f * IM_PI);
-            if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle)))
-            {
-                // Interacting with SV triangle
-                ImVec2 current_off_unrotated = ImRotate(current_off, cos_hue_angle, sin_hue_angle);
-                if (!ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated))
-                    current_off_unrotated = ImTriangleClosestPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated);
-                float uu, vv, ww;
-                ImTriangleBarycentricCoords(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated, uu, vv, ww);
-                V = ImClamp(1.0f - vv, 0.0001f, 1.0f);
-                S = ImClamp(uu / V, 0.0001f, 1.0f);
-                value_changed = value_changed_sv = true;
-            }
-        }
-        if (!(flags & ImGuiColorEditFlags_NoOptions))
-            OpenPopupOnItemClick("context");
-    }
-    else if (flags & ImGuiColorEditFlags_PickerHueBar)
-    {
-        // SV rectangle logic
-        InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size));
-        if (IsItemActive())
-        {
-            S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size-1));
-            V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
-            value_changed = value_changed_sv = true;
-        }
-        if (!(flags & ImGuiColorEditFlags_NoOptions))
-            OpenPopupOnItemClick("context");
-
-        // Hue bar logic
-        SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y));
-        InvisibleButton("hue", ImVec2(bars_width, sv_picker_size));
-        if (IsItemActive())
-        {
-            H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
-            value_changed = value_changed_h = true;
-        }
-    }
-
-    // Alpha bar logic
-    if (alpha_bar)
-    {
-        SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y));
-        InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size));
-        if (IsItemActive())
-        {
-            col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1));
-            value_changed = true;
-        }
-    }
-    PopItemFlag(); // ImGuiItemFlags_NoNav
-
-    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
-    {
-        SameLine(0, style.ItemInnerSpacing.x);
-        BeginGroup();
-    }
-
-    if (!(flags & ImGuiColorEditFlags_NoLabel))
-    {
-        const char* label_display_end = FindRenderedTextEnd(label);
-        if (label != label_display_end)
-        {
-            if ((flags & ImGuiColorEditFlags_NoSidePreview))
-                SameLine(0, style.ItemInnerSpacing.x);
-            TextEx(label, label_display_end);
-        }
-    }
-
-    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
-    {
-        PushItemFlag(ImGuiItemFlags_NoNavDefaultFocus, true);
-        ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
-        if ((flags & ImGuiColorEditFlags_NoLabel))
-            Text("Current");
-
-        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip;
-        ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2));
-        if (ref_col != NULL)
-        {
-            Text("Original");
-            ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]);
-            if (ColorButton("##original", ref_col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)))
-            {
-                memcpy(col, ref_col, components * sizeof(float));
-                value_changed = true;
-            }
-        }
-        PopItemFlag();
-        EndGroup();
-    }
-
-    // Convert back color to RGB
-    if (value_changed_h || value_changed_sv)
-    {
-        if (flags & ImGuiColorEditFlags_InputRGB)
-        {
-            ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
-            g.ColorEditLastHue = H;
-            g.ColorEditLastSat = S;
-            memcpy(g.ColorEditLastColor, col, sizeof(float) * 3);
-        }
-        else if (flags & ImGuiColorEditFlags_InputHSV)
-        {
-            col[0] = H;
-            col[1] = S;
-            col[2] = V;
-        }
-    }
-
-    // R,G,B and H,S,V slider color editor
-    bool value_changed_fix_hue_wrap = false;
-    if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
-    {
-        PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
-        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
-        ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
-        if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
-            if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB))
-            {
-                // FIXME: Hackily differenciating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget.
-                // For the later we don't want to run the hue-wrap canceling code. If you are well versed in HSV picker please provide your input! (See #2050)
-                value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap);
-                value_changed = true;
-            }
-        if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
-            value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV);
-        if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
-            value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex);
-        PopItemWidth();
-    }
-
-    // Try to cancel hue wrap (after ColorEdit4 call), if any
-    if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB))
-    {
-        float new_H, new_S, new_V;
-        ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
-        if (new_H <= 0 && H > 0)
-        {
-            if (new_V <= 0 && V != new_V)
-                ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]);
-            else if (new_S <= 0)
-                ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]);
-        }
-    }
-
-    if (value_changed)
-    {
-        if (flags & ImGuiColorEditFlags_InputRGB)
-        {
-            R = col[0];
-            G = col[1];
-            B = col[2];
-            ColorConvertRGBtoHSV(R, G, B, H, S, V);
-            if (memcmp(g.ColorEditLastColor, col, sizeof(float) * 3) == 0) // Fix local Hue as display below will use it immediately.
-            {
-                if (S == 0)
-                    H = g.ColorEditLastHue;
-                if (V == 0)
-                    S = g.ColorEditLastSat;
-            }
-        }
-        else if (flags & ImGuiColorEditFlags_InputHSV)
-        {
-            H = col[0];
-            S = col[1];
-            V = col[2];
-            ColorConvertHSVtoRGB(H, S, V, R, G, B);
-        }
-    }
-
-    const int style_alpha8 = IM_F32_TO_INT8_SAT(style.Alpha);
-    const ImU32 col_black = IM_COL32(0,0,0,style_alpha8);
-    const ImU32 col_white = IM_COL32(255,255,255,style_alpha8);
-    const ImU32 col_midgrey = IM_COL32(128,128,128,style_alpha8);
-    const ImU32 col_hues[6 + 1] = { IM_COL32(255,0,0,style_alpha8), IM_COL32(255,255,0,style_alpha8), IM_COL32(0,255,0,style_alpha8), IM_COL32(0,255,255,style_alpha8), IM_COL32(0,0,255,style_alpha8), IM_COL32(255,0,255,style_alpha8), IM_COL32(255,0,0,style_alpha8) };
-
-    ImVec4 hue_color_f(1, 1, 1, style.Alpha); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
-    ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
-    ImU32 user_col32_striped_of_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, style.Alpha)); // Important: this is still including the main rendering/style alpha!!
-
-    ImVec2 sv_cursor_pos;
-
-    if (flags & ImGuiColorEditFlags_PickerHueWheel)
-    {
-        // Render Hue Wheel
-        const float aeps = 0.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
-        const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12);
-        for (int n = 0; n < 6; n++)
-        {
-            const float a0 = (n)     /6.0f * 2.0f * IM_PI - aeps;
-            const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
-            const int vert_start_idx = draw_list->VtxBuffer.Size;
-            draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
-            draw_list->PathStroke(col_white, false, wheel_thickness);
-            const int vert_end_idx = draw_list->VtxBuffer.Size;
-
-            // Paint colors over existing vertices
-            ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner);
-            ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner);
-            ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n+1]);
-        }
-
-        // Render Cursor + preview on Hue Wheel
-        float cos_hue_angle = ImCos(H * 2.0f * IM_PI);
-        float sin_hue_angle = ImSin(H * 2.0f * IM_PI);
-        ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f);
-        float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f;
-        int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32);
-        draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments);
-        draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, col_midgrey, hue_cursor_segments);
-        draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments);
-
-        // Render SV triangle (rotated according to hue)
-        ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle);
-        ImVec2 trb = wheel_center + ImRotate(triangle_pb, cos_hue_angle, sin_hue_angle);
-        ImVec2 trc = wheel_center + ImRotate(triangle_pc, cos_hue_angle, sin_hue_angle);
-        ImVec2 uv_white = GetFontTexUvWhitePixel();
-        draw_list->PrimReserve(6, 6);
-        draw_list->PrimVtx(tra, uv_white, hue_color32);
-        draw_list->PrimVtx(trb, uv_white, hue_color32);
-        draw_list->PrimVtx(trc, uv_white, col_white);
-        draw_list->PrimVtx(tra, uv_white, 0);
-        draw_list->PrimVtx(trb, uv_white, col_black);
-        draw_list->PrimVtx(trc, uv_white, 0);
-        draw_list->AddTriangle(tra, trb, trc, col_midgrey, 1.5f);
-        sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V));
-    }
-    else if (flags & ImGuiColorEditFlags_PickerHueBar)
-    {
-        // Render SV Square
-        draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), col_white, hue_color32, hue_color32, col_white);
-        draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0, 0, col_black, col_black);
-        RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0.0f);
-        sv_cursor_pos.x = ImClamp(IM_ROUND(picker_pos.x + ImSaturate(S)     * sv_picker_size), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much
-        sv_cursor_pos.y = ImClamp(IM_ROUND(picker_pos.y + ImSaturate(1 - V) * sv_picker_size), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2);
-
-        // Render Hue Bar
-        for (int i = 0; i < 6; ++i)
-            draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), col_hues[i], col_hues[i], col_hues[i + 1], col_hues[i + 1]);
-        float bar0_line_y = IM_ROUND(picker_pos.y + H * sv_picker_size);
-        RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f);
-        RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
-    }
-
-    // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
-    float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f;
-    draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12);
-    draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, col_midgrey, 12);
-    draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12);
-
-    // Render alpha bar
-    if (alpha_bar)
-    {
-        float alpha = ImSaturate(col[3]);
-        ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size);
-        RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
-        draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, user_col32_striped_of_alpha & ~IM_COL32_A_MASK, user_col32_striped_of_alpha & ~IM_COL32_A_MASK);
-        float bar1_line_y = IM_ROUND(picker_pos.y + (1.0f - alpha) * sv_picker_size);
-        RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f);
-        RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
-    }
-
-    EndGroup();
-
-    if (value_changed && memcmp(backup_initial_col, col, components * sizeof(float)) == 0)
-        value_changed = false;
-    if (value_changed)
-        MarkItemEdited(window->DC.LastItemId);
-
-    PopID();
-
-    return value_changed;
-}
-
-// A little colored square. Return true when clicked.
-// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
-// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
-// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set.
-bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiID id = window->GetID(desc_id);
-    float default_size = GetFrameHeight();
-    if (size.x == 0.0f)
-        size.x = default_size;
-    if (size.y == 0.0f)
-        size.y = default_size;
-    const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
-    ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
-    if (!ItemAdd(bb, id))
-        return false;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held);
-
-    if (flags & ImGuiColorEditFlags_NoAlpha)
-        flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
-
-    ImVec4 col_rgb = col;
-    if (flags & ImGuiColorEditFlags_InputHSV)
-        ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z);
-
-    ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f);
-    float grid_step = ImMin(size.x, size.y) / 2.99f;
-    float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
-    ImRect bb_inner = bb;
-    float off = 0.0f;
-    if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
-    {
-        off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
-        bb_inner.Expand(off);
-    }
-    if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f)
-    {
-        float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f);
-        RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
-        window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
-    }
-    else
-    {
-        // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
-        ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha;
-        if (col_source.w < 1.0f)
-            RenderColorRectWithAlphaCheckerboard(window->DrawList, bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
-        else
-            window->DrawList->AddRectFilled(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), rounding, ImDrawCornerFlags_All);
-    }
-    RenderNavHighlight(bb, id);
-    if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
-    {
-        if (g.Style.FrameBorderSize > 0.0f)
-            RenderFrameBorder(bb.Min, bb.Max, rounding);
-        else
-            window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), rounding); // Color button are often in need of some sort of border
-    }
-
-    // Drag and Drop Source
-    // NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test.
-    if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource())
-    {
-        if (flags & ImGuiColorEditFlags_NoAlpha)
-            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once);
-        else
-            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once);
-        ColorButton(desc_id, col, flags);
-        SameLine();
-        TextEx("Color");
-        EndDragDropSource();
-    }
-
-    // Tooltip
-    if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered)
-        ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
-
-    return pressed;
-}
-
-// Initialize/override default color options
-void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    if ((flags & ImGuiColorEditFlags__DisplayMask) == 0)
-        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DisplayMask;
-    if ((flags & ImGuiColorEditFlags__DataTypeMask) == 0)
-        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask;
-    if ((flags & ImGuiColorEditFlags__PickerMask) == 0)
-        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask;
-    if ((flags & ImGuiColorEditFlags__InputMask) == 0)
-        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask;
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask));    // Check only 1 option is selected
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask));   // Check only 1 option is selected
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask));     // Check only 1 option is selected
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));      // Check only 1 option is selected
-    g.ColorEditOptions = flags;
-}
-
-// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
-void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-
-    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
-    const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
-    if (text_end > text)
-    {
-        TextEx(text, text_end);
-        Separator();
-    }
-
-    ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
-    ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
-    int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
-    ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
-    SameLine();
-    if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask))
-    {
-        if (flags & ImGuiColorEditFlags_NoAlpha)
-            Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
-        else
-            Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
-    }
-    else if (flags & ImGuiColorEditFlags_InputHSV)
-    {
-        if (flags & ImGuiColorEditFlags_NoAlpha)
-            Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]);
-        else
-            Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]);
-    }
-    EndTooltip();
-}
-
-void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
-{
-    bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__DisplayMask);
-    bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask);
-    if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context"))
-        return;
-    ImGuiContext& g = *GImGui;
-    ImGuiColorEditFlags opts = g.ColorEditOptions;
-    if (allow_opt_inputs)
-    {
-        if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayRGB;
-        if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHSV;
-        if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags__DisplayMask) | ImGuiColorEditFlags_DisplayHex;
-    }
-    if (allow_opt_datatype)
-    {
-        if (allow_opt_inputs) Separator();
-        if (RadioButton("0..255",     (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8;
-        if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float;
-    }
-
-    if (allow_opt_inputs || allow_opt_datatype)
-        Separator();
-    if (Button("Copy as..", ImVec2(-1,0)))
-        OpenPopup("Copy");
-    if (BeginPopup("Copy"))
-    {
-        int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
-        char buf[64];
-        ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
-        if (Selectable(buf))
-            SetClipboardText(buf);
-        ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca);
-        if (Selectable(buf))
-            SetClipboardText(buf);
-        ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", cr, cg, cb);
-        if (Selectable(buf))
-            SetClipboardText(buf);
-        if (!(flags & ImGuiColorEditFlags_NoAlpha))
-        {
-            ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", cr, cg, cb, ca);
-            if (Selectable(buf))
-                SetClipboardText(buf);
-        }
-        EndPopup();
-    }
-
-    g.ColorEditOptions = opts;
-    EndPopup();
-}
-
-void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags)
-{
-    bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask);
-    bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
-    if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context"))
-        return;
-    ImGuiContext& g = *GImGui;
-    if (allow_opt_picker)
-    {
-        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
-        PushItemWidth(picker_size.x);
-        for (int picker_type = 0; picker_type < 2; picker_type++)
-        {
-            // Draw small/thumbnail version of each picker type (over an invisible button for selection)
-            if (picker_type > 0) Separator();
-            PushID(picker_type);
-            ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha);
-            if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
-            if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
-            ImVec2 backup_pos = GetCursorScreenPos();
-            if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
-                g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
-            SetCursorScreenPos(backup_pos);
-            ImVec4 dummy_ref_col;
-            memcpy(&dummy_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4));
-            ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
-            PopID();
-        }
-        PopItemWidth();
-    }
-    if (allow_opt_alpha_bar)
-    {
-        if (allow_opt_picker) Separator();
-        CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
-    }
-    EndPopup();
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
-//-------------------------------------------------------------------------
-// - TreeNode()
-// - TreeNodeV()
-// - TreeNodeEx()
-// - TreeNodeExV()
-// - TreeNodeBehavior() [Internal]
-// - TreePush()
-// - TreePop()
-// - GetTreeNodeToLabelSpacing()
-// - SetNextItemOpen()
-// - CollapsingHeader()
-//-------------------------------------------------------------------------
-
-bool ImGui::TreeNode(const char* str_id, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    bool is_open = TreeNodeExV(str_id, 0, fmt, args);
-    va_end(args);
-    return is_open;
-}
-
-bool ImGui::TreeNode(const void* ptr_id, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    bool is_open = TreeNodeExV(ptr_id, 0, fmt, args);
-    va_end(args);
-    return is_open;
-}
-
-bool ImGui::TreeNode(const char* label)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-    return TreeNodeBehavior(window->GetID(label), 0, label, NULL);
-}
-
-bool ImGui::TreeNodeV(const char* str_id, const char* fmt, va_list args)
-{
-    return TreeNodeExV(str_id, 0, fmt, args);
-}
-
-bool ImGui::TreeNodeV(const void* ptr_id, const char* fmt, va_list args)
-{
-    return TreeNodeExV(ptr_id, 0, fmt, args);
-}
-
-bool ImGui::TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    return TreeNodeBehavior(window->GetID(label), flags, label, NULL);
-}
-
-bool ImGui::TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    bool is_open = TreeNodeExV(str_id, flags, fmt, args);
-    va_end(args);
-    return is_open;
-}
-
-bool ImGui::TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
-{
-    va_list args;
-    va_start(args, fmt);
-    bool is_open = TreeNodeExV(ptr_id, flags, fmt, args);
-    va_end(args);
-    return is_open;
-}
-
-bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
-    return TreeNodeBehavior(window->GetID(str_id), flags, g.TempBuffer, label_end);
-}
-
-bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const char* label_end = g.TempBuffer + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args);
-    return TreeNodeBehavior(window->GetID(ptr_id), flags, g.TempBuffer, label_end);
-}
-
-bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
-{
-    if (flags & ImGuiTreeNodeFlags_Leaf)
-        return true;
-
-    // We only write to the tree storage if the user clicks (or explicitly use the SetNextItemOpen function)
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiStorage* storage = window->DC.StateStorage;
-
-    bool is_open;
-    if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasOpen)
-    {
-        if (g.NextItemData.OpenCond & ImGuiCond_Always)
-        {
-            is_open = g.NextItemData.OpenVal;
-            storage->SetInt(id, is_open);
-        }
-        else
-        {
-            // We treat ImGuiCond_Once and ImGuiCond_FirstUseEver the same because tree node state are not saved persistently.
-            const int stored_value = storage->GetInt(id, -1);
-            if (stored_value == -1)
-            {
-                is_open = g.NextItemData.OpenVal;
-                storage->SetInt(id, is_open);
-            }
-            else
-            {
-                is_open = stored_value != 0;
-            }
-        }
-    }
-    else
-    {
-        is_open = storage->GetInt(id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0;
-    }
-
-    // When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior).
-    // NB- If we are above max depth we still allow manually opened nodes to be logged.
-    if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && (window->DC.TreeDepth - g.LogDepthRef) < g.LogDepthToExpand)
-        is_open = true;
-
-    return is_open;
-}
-
-bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0;
-    const ImVec2 padding = (display_frame || (flags & ImGuiTreeNodeFlags_FramePadding)) ? style.FramePadding : ImVec2(style.FramePadding.x, ImMin(window->DC.CurrLineTextBaseOffset, style.FramePadding.y));
-
-    if (!label_end)
-        label_end = FindRenderedTextEnd(label);
-    const ImVec2 label_size = CalcTextSize(label, label_end, false);
-
-    // We vertically grow up to current line height up the typical widget height.
-    const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2);
-    ImRect frame_bb;
-    frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x;
-    frame_bb.Min.y = window->DC.CursorPos.y;
-    frame_bb.Max.x = window->WorkRect.Max.x;
-    frame_bb.Max.y = window->DC.CursorPos.y + frame_height;
-    if (display_frame)
-    {
-        // Framed header expand a little outside the default padding, to the edge of InnerClipRect
-        // (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f)
-        frame_bb.Min.x -= IM_FLOOR(window->WindowPadding.x * 0.5f - 1.0f);
-        frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f);
-    }
-
-    const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2);               // Collapser arrow width + Spacing
-    const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset);                    // Latch before ItemSize changes it
-    const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f);    // Include collapser
-    ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y);
-    ItemSize(ImVec2(text_width, frame_height), padding.y);
-
-    // For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing
-    ImRect interact_bb = frame_bb;
-    if (!display_frame && (flags & (ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth)) == 0)
-        interact_bb.Max.x = frame_bb.Min.x + text_width + style.ItemSpacing.x * 2.0f;
-
-    // Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child.
-    // For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop().
-    // This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero.
-    const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0;
-    bool is_open = TreeNodeBehaviorIsOpen(id, flags);
-    if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
-        window->DC.TreeJumpToParentOnPopMask |= (1 << window->DC.TreeDepth);
-
-    bool item_add = ItemAdd(interact_bb, id);
-    window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_HasDisplayRect;
-    window->DC.LastItemDisplayRect = frame_bb;
-
-    if (!item_add)
-    {
-        if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
-            TreePushOverrideID(id);
-        IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
-        return is_open;
-    }
-
-    // Flags that affects opening behavior:
-    // - 0 (default) .................... single-click anywhere to open
-    // - OpenOnDoubleClick .............. double-click anywhere to open
-    // - OpenOnArrow .................... single-click on arrow to open
-    // - OpenOnDoubleClick|OpenOnArrow .. single-click on arrow or double-click anywhere to open
-    ImGuiButtonFlags button_flags = 0;
-    if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
-        button_flags |= ImGuiButtonFlags_AllowItemOverlap;
-    if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
-        button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0);
-    else
-        button_flags |= ImGuiButtonFlags_PressedOnClickRelease;
-    if (!is_leaf)
-        button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
-
-    // We allow clicking on the arrow section with keyboard modifiers held, in order to easily
-    // allow browsing a tree while preserving selection with code implementing multi-selection patterns.
-    // When clicking on the rest of the tree node we always disallow keyboard modifiers.
-    const float hit_padding_x = style.TouchExtraPadding.x;
-    const float arrow_hit_x1 = (text_pos.x - text_offset_x) - hit_padding_x;
-    const float arrow_hit_x2 = (text_pos.x - text_offset_x) + (g.FontSize + padding.x * 2.0f) + hit_padding_x;
-    if (window != g.HoveredWindow || !(g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2))
-        button_flags |= ImGuiButtonFlags_NoKeyModifiers;
-
-    bool selected = (flags & ImGuiTreeNodeFlags_Selected) != 0;
-    const bool was_selected = selected;
-
-    bool hovered, held;
-    bool pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags);
-    bool toggled = false;
-    if (!is_leaf)
-    {
-        if (pressed)
-        {
-            if ((flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) == 0 || (g.NavActivateId == id))
-                toggled = true;
-            if (flags & ImGuiTreeNodeFlags_OpenOnArrow)
-                toggled |= (g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2) && (!g.NavDisableMouseHover); // Lightweight equivalent of IsMouseHoveringRect() since ButtonBehavior() already did the job
-            if ((flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) && g.IO.MouseDoubleClicked[0])
-                toggled = true;
-            if (g.DragDropActive && is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
-                toggled = false;
-        }
-
-        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Left && is_open)
-        {
-            toggled = true;
-            NavMoveRequestCancel();
-        }
-        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right && !is_open) // If there's something upcoming on the line we may want to give it the priority?
-        {
-            toggled = true;
-            NavMoveRequestCancel();
-        }
-
-        if (toggled)
-        {
-            is_open = !is_open;
-            window->DC.StateStorage->SetInt(id, is_open);
-            window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledOpen;
-        }
-    }
-    if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
-        SetItemAllowOverlap();
-
-    // In this branch, TreeNodeBehavior() cannot toggle the selection so this will never trigger.
-    if (selected != was_selected) //-V547
-        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
-
-    // Render
-    const ImU32 text_col = GetColorU32(ImGuiCol_Text);
-    ImGuiNavHighlightFlags nav_highlight_flags = ImGuiNavHighlightFlags_TypeThin;
-    if (display_frame)
-    {
-        // Framed type
-        const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
-        RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, true, style.FrameRounding);
-        RenderNavHighlight(frame_bb, id, nav_highlight_flags);
-        if (flags & ImGuiTreeNodeFlags_Bullet)
-            RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.60f, text_pos.y + g.FontSize * 0.5f), text_col);
-        else if (!is_leaf)
-            RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
-        else // Leaf without bullet, left-adjusted text
-            text_pos.x -= text_offset_x;
-        if (flags & ImGuiTreeNodeFlags_ClipLabelForTrailingButton)
-            frame_bb.Max.x -= g.FontSize + style.FramePadding.x;
-        if (g.LogEnabled)
-        {
-            // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
-            const char log_prefix[] = "\n##";
-            const char log_suffix[] = "##";
-            LogRenderedText(&text_pos, log_prefix, log_prefix+3);
-            RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
-            LogRenderedText(&text_pos, log_suffix, log_suffix+2);
-        }
-        else
-        {
-            RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
-        }
-    }
-    else
-    {
-        // Unframed typed for tree nodes
-        if (hovered || selected)
-        {
-            const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
-            RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false);
-            RenderNavHighlight(frame_bb, id, nav_highlight_flags);
-        }
-        if (flags & ImGuiTreeNodeFlags_Bullet)
-            RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
-        else if (!is_leaf)
-            RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
-        if (g.LogEnabled)
-            LogRenderedText(&text_pos, ">");
-        RenderText(text_pos, label, label_end, false);
-    }
-
-    if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
-        TreePushOverrideID(id);
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
-    return is_open;
-}
-
-void ImGui::TreePush(const char* str_id)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    Indent();
-    window->DC.TreeDepth++;
-    PushID(str_id ? str_id : "#TreePush");
-}
-
-void ImGui::TreePush(const void* ptr_id)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    Indent();
-    window->DC.TreeDepth++;
-    PushID(ptr_id ? ptr_id : (const void*)"#TreePush");
-}
-
-void ImGui::TreePushOverrideID(ImGuiID id)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    Indent();
-    window->DC.TreeDepth++;
-    window->IDStack.push_back(id);
-}
-
-void ImGui::TreePop()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    Unindent();
-
-    window->DC.TreeDepth--;
-    ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
-
-    // Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled)
-    if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet())
-        if (g.NavIdIsAlive && (window->DC.TreeJumpToParentOnPopMask & tree_depth_mask))
-        {
-            SetNavID(window->IDStack.back(), g.NavLayer, 0);
-            NavMoveRequestCancel();
-        }
-    window->DC.TreeJumpToParentOnPopMask &= tree_depth_mask - 1;
-
-    IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.
-    PopID();
-}
-
-// Horizontal distance preceding label when using TreeNode() or Bullet()
-float ImGui::GetTreeNodeToLabelSpacing()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize + (g.Style.FramePadding.x * 2.0f);
-}
-
-// Set next TreeNode/CollapsingHeader open state.
-void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.CurrentWindow->SkipItems)
-        return;
-    g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
-    g.NextItemData.OpenVal = is_open;
-    g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always;
-}
-
-// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
-// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode().
-bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    return TreeNodeBehavior(window->GetID(label), flags | ImGuiTreeNodeFlags_CollapsingHeader, label);
-}
-
-bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    if (p_open && !*p_open)
-        return false;
-
-    ImGuiID id = window->GetID(label);
-    flags |= ImGuiTreeNodeFlags_CollapsingHeader;
-    if (p_open)
-        flags |= ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_ClipLabelForTrailingButton;
-    bool is_open = TreeNodeBehavior(id, flags, label);
-    if (p_open)
-    {
-        // Create a small overlapping close button
-        // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
-        // FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
-        ImGuiContext& g = *GImGui;
-        ImGuiItemHoveredDataBackup last_item_backup;
-        float button_size = g.FontSize;
-        float button_x = ImMax(window->DC.LastItemRect.Min.x, window->DC.LastItemRect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
-        float button_y = window->DC.LastItemRect.Min.y;
-        if (CloseButton(window->GetID((void*)((intptr_t)id + 1)), ImVec2(button_x, button_y)))
-            *p_open = false;
-        last_item_backup.Restore();
-    }
-
-    return is_open;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Selectable
-//-------------------------------------------------------------------------
-// - Selectable()
-//-------------------------------------------------------------------------
-
-// Tip: pass a non-visible label (e.g. "##dummy") then you can use the space to draw other text or image.
-// But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id.
-// With this scheme, ImGuiSelectableFlags_SpanAllColumns and ImGuiSelectableFlags_AllowItemOverlap are also frequently used flags.
-// FIXME: Selectable() with (size.x == 0.0f) and (SelectableTextAlign.x > 0.0f) followed by SameLine() is currently not supported.
-bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-
-    if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns) // FIXME-OPT: Avoid if vertically clipped.
-        PushColumnsBackground();
-    else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable) // FIXME-TABLE: Make it possible to colorize a whole line
-        PushTableBackground();
-
-    // Submit label or explicit size to ItemSize(), whereas ItemAdd() will submit a larger/spanning rectangle.
-    ImGuiID id = window->GetID(label);
-    ImVec2 label_size = CalcTextSize(label, NULL, true);
-    ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y);
-    ImVec2 pos = window->DC.CursorPos;
-    pos.y += window->DC.CurrLineTextBaseOffset;
-    ItemSize(size, 0.0f);
-
-    // Fill horizontal space
-    // FIXME-TABLE: Span row min
-    const float min_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Min.x : pos.x;
-    const float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? window->ContentRegionRect.Max.x : GetContentRegionMaxAbs().x;
-    if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_SpanAvailWidth))
-        size.x = ImMax(label_size.x, max_x - min_x);
-
-    // Text stays at the submission position, but bounding box may be extended on both sides
-    const ImVec2 text_min = pos;
-    const ImVec2 text_max(min_x + size.x, pos.y + size.y);
-
-    // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable.
-    ImRect bb_enlarged(min_x, pos.y, text_max.x, text_max.y);
-    const float spacing_x = style.ItemSpacing.x;
-    const float spacing_y = style.ItemSpacing.y;
-    const float spacing_L = IM_FLOOR(spacing_x * 0.50f);
-    const float spacing_U = IM_FLOOR(spacing_y * 0.50f);
-    bb_enlarged.Min.x -= spacing_L;
-    bb_enlarged.Min.y -= spacing_U;
-    bb_enlarged.Max.x += (spacing_x - spacing_L);
-    bb_enlarged.Max.y += (spacing_y - spacing_U);
-    //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_align.Min, bb_align.Max, IM_COL32(255, 0, 0, 255)); }
-    //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb_enlarged.Min, bb_enlarged.Max, IM_COL32(0, 255, 0, 255)); }
-
-    bool item_add;
-    if (flags & ImGuiSelectableFlags_Disabled)
-    {
-        ImGuiItemFlags backup_item_flags = window->DC.ItemFlags;
-        window->DC.ItemFlags |= ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNavDefaultFocus;
-        item_add = ItemAdd(bb_enlarged, id);
-        window->DC.ItemFlags = backup_item_flags;
-    }
-    else
-    {
-        item_add = ItemAdd(bb_enlarged, id);
-    }
-    if (!item_add)
-    {
-        if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
-            PopColumnsBackground();
-        else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable)
-            PopTableBackground();
-        return false;
-    }
-
-    // We use NoHoldingActiveID on menus so user can click and _hold_ on a menu then drag to browse child entries
-    ImGuiButtonFlags button_flags = 0;
-    if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; }
-    if (flags & ImGuiSelectableFlags_SelectOnClick)     { button_flags |= ImGuiButtonFlags_PressedOnClick; }
-    if (flags & ImGuiSelectableFlags_SelectOnRelease)   { button_flags |= ImGuiButtonFlags_PressedOnRelease; }
-    if (flags & ImGuiSelectableFlags_Disabled)          { button_flags |= ImGuiButtonFlags_Disabled; }
-    if (flags & ImGuiSelectableFlags_AllowDoubleClick)  { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; }
-    if (flags & ImGuiSelectableFlags_AllowItemOverlap)  { button_flags |= ImGuiButtonFlags_AllowItemOverlap; }
-
-    if (flags & ImGuiSelectableFlags_Disabled)
-        selected = false;
-
-    const bool was_selected = selected;
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb_enlarged, id, &hovered, &held, button_flags);
-
-    // Update NavId when clicking or when Hovering (this doesn't happen on most widgets), so navigation can be resumed with gamepad/keyboard
-    if (pressed || (hovered && (flags & ImGuiSelectableFlags_SetNavIdOnHover)))
-    {
-        if (!g.NavDisableMouseHover && g.NavWindow == window && g.NavLayer == window->DC.NavLayerCurrent)
-        {
-            g.NavDisableHighlight = true;
-            SetNavID(id, window->DC.NavLayerCurrent, window->DC.NavFocusScopeIdCurrent);
-        }
-    }
-    if (pressed)
-        MarkItemEdited(id);
-
-    if (flags & ImGuiSelectableFlags_AllowItemOverlap)
-        SetItemAllowOverlap();
-
-    // In this branch, Selectable() cannot toggle the selection so this will never trigger.
-    if (selected != was_selected) //-V547
-        window->DC.LastItemStatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
-
-    // Render
-    if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld))
-        hovered = true;
-    if (hovered || selected)
-    {
-        const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
-        RenderFrame(bb_enlarged.Min, bb_enlarged.Max, col, false, 0.0f);
-        RenderNavHighlight(bb_enlarged, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding);
-    }
-
-    if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.CurrentColumns)
-        PopColumnsBackground();
-    else if ((flags & ImGuiSelectableFlags_SpanAllColumns) && g.CurrentTable)
-        PopTableBackground();
-
-    if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]);
-    RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb_enlarged);
-    if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor();
-
-    // Automatically close popups
-    if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(window->DC.ItemFlags & ImGuiItemFlags_SelectableDontClosePopup))
-        CloseCurrentPopup();
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
-    return pressed;
-}
-
-bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
-{
-    if (Selectable(label, *p_selected, flags, size_arg))
-    {
-        *p_selected = !*p_selected;
-        return true;
-    }
-    return false;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: ListBox
-//-------------------------------------------------------------------------
-// - ListBox()
-// - ListBoxHeader()
-// - ListBoxFooter()
-//-------------------------------------------------------------------------
-// FIXME: This is an old API. We should redesign some of it, rename ListBoxHeader->BeginListBox, ListBoxFooter->EndListBox
-// and promote using them over existing ListBox() functions, similarly to change with combo boxes.
-//-------------------------------------------------------------------------
-
-// FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature.
-// Helper to calculate the size of a listbox and display a label on the right.
-// Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty"
-bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = GetID(label);
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-
-    // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar.
-    ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y);
-    ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y));
-    ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
-    ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
-    window->DC.LastItemRect = bb; // Forward storage for ListBoxFooter.. dodgy.
-    g.NextItemData.ClearFlags();
-
-    if (!IsRectVisible(bb.Min, bb.Max))
-    {
-        ItemSize(bb.GetSize(), style.FramePadding.y);
-        ItemAdd(bb, 0, &frame_bb);
-        return false;
-    }
-
-    BeginGroup();
-    if (label_size.x > 0)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
-
-    BeginChildFrame(id, frame_bb.GetSize());
-    return true;
-}
-
-// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature.
-bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items)
-{
-    // Size default to hold ~7.25 items.
-    // We add +25% worth of item height to allow the user to see at a glance if there are more items up/down, without looking at the scrollbar.
-    // We don't add this extra bit if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size.
-    // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution.
-    if (height_in_items < 0)
-        height_in_items = ImMin(items_count, 7);
-    const ImGuiStyle& style = GetStyle();
-    float height_in_items_f = (height_in_items < items_count) ? (height_in_items + 0.25f) : (height_in_items + 0.00f);
-
-    // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild().
-    ImVec2 size;
-    size.x = 0.0f;
-    size.y = ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f);
-    return ListBoxHeader(label, size);
-}
-
-// FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature.
-void ImGui::ListBoxFooter()
-{
-    ImGuiWindow* parent_window = GetCurrentWindow()->ParentWindow;
-    const ImRect bb = parent_window->DC.LastItemRect;
-    const ImGuiStyle& style = GetStyle();
-
-    EndChildFrame();
-
-    // Redeclare item size so that it includes the label (we have stored the full size in LastItemRect)
-    // We call SameLine() to restore DC.CurrentLine* data
-    SameLine();
-    parent_window->DC.CursorPos = bb.Min;
-    ItemSize(bb, style.FramePadding.y);
-    EndGroup();
-}
-
-bool ImGui::ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_items)
-{
-    const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items);
-    return value_changed;
-}
-
-bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
-{
-    if (!ListBoxHeader(label, items_count, height_in_items))
-        return false;
-
-    // Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper.
-    ImGuiContext& g = *GImGui;
-    bool value_changed = false;
-    ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
-    while (clipper.Step())
-        for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
-        {
-            const bool item_selected = (i == *current_item);
-            const char* item_text;
-            if (!items_getter(data, i, &item_text))
-                item_text = "*Unknown item*";
-
-            PushID(i);
-            if (Selectable(item_text, item_selected))
-            {
-                *current_item = i;
-                value_changed = true;
-            }
-            if (item_selected)
-                SetItemDefaultFocus();
-            PopID();
-        }
-    ListBoxFooter();
-    if (value_changed)
-        MarkItemEdited(g.CurrentWindow->DC.LastItemId);
-
-    return value_changed;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: PlotLines, PlotHistogram
-//-------------------------------------------------------------------------
-// - PlotEx() [Internal]
-// - PlotLines()
-// - PlotHistogram()
-//-------------------------------------------------------------------------
-
-void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-
-    const ImVec2 label_size = CalcTextSize(label, NULL, true);
-    if (frame_size.x == 0.0f)
-        frame_size.x = CalcItemWidth();
-    if (frame_size.y == 0.0f)
-        frame_size.y = label_size.y + (style.FramePadding.y * 2);
-
-    const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
-    const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
-    const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));
-    ItemSize(total_bb, style.FramePadding.y);
-    if (!ItemAdd(total_bb, 0, &frame_bb))
-        return;
-    const bool hovered = ItemHoverable(frame_bb, id);
-
-    // Determine scale from values if not specified
-    if (scale_min == FLT_MAX || scale_max == FLT_MAX)
-    {
-        float v_min = FLT_MAX;
-        float v_max = -FLT_MAX;
-        for (int i = 0; i < values_count; i++)
-        {
-            const float v = values_getter(data, i);
-            if (v != v) // Ignore NaN values
-                continue;
-            v_min = ImMin(v_min, v);
-            v_max = ImMax(v_max, v);
-        }
-        if (scale_min == FLT_MAX)
-            scale_min = v_min;
-        if (scale_max == FLT_MAX)
-            scale_max = v_max;
-    }
-
-    RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
-
-    const int values_count_min = (plot_type == ImGuiPlotType_Lines) ? 2 : 1;
-    if (values_count >= values_count_min)
-    {
-        int res_w = ImMin((int)frame_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
-        int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
-
-        // Tooltip on hover
-        int v_hovered = -1;
-        if (hovered && inner_bb.Contains(g.IO.MousePos))
-        {
-            const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
-            const int v_idx = (int)(t * item_count);
-            IM_ASSERT(v_idx >= 0 && v_idx < values_count);
-
-            const float v0 = values_getter(data, (v_idx + values_offset) % values_count);
-            const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count);
-            if (plot_type == ImGuiPlotType_Lines)
-                SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1);
-            else if (plot_type == ImGuiPlotType_Histogram)
-                SetTooltip("%d: %8.4g", v_idx, v0);
-            v_hovered = v_idx;
-        }
-
-        const float t_step = 1.0f / (float)res_w;
-        const float inv_scale = (scale_min == scale_max) ? 0.0f : (1.0f / (scale_max - scale_min));
-
-        float v0 = values_getter(data, (0 + values_offset) % values_count);
-        float t0 = 0.0f;
-        ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) * inv_scale) );                       // Point in the normalized space of our target rectangle
-        float histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (-scale_min * inv_scale) : (scale_min < 0.0f ? 0.0f : 1.0f);   // Where does the zero line stands
-
-        const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
-        const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
-
-        for (int n = 0; n < res_w; n++)
-        {
-            const float t1 = t0 + t_step;
-            const int v1_idx = (int)(t0 * item_count + 0.5f);
-            IM_ASSERT(v1_idx >= 0 && v1_idx < values_count);
-            const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count);
-            const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) * inv_scale) );
-
-            // NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
-            ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
-            ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t));
-            if (plot_type == ImGuiPlotType_Lines)
-            {
-                window->DrawList->AddLine(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
-            }
-            else if (plot_type == ImGuiPlotType_Histogram)
-            {
-                if (pos1.x >= pos0.x + 2.0f)
-                    pos1.x -= 1.0f;
-                window->DrawList->AddRectFilled(pos0, pos1, v_hovered == v1_idx ? col_hovered : col_base);
-            }
-
-            t0 = t1;
-            tp0 = tp1;
-        }
-    }
-
-    // Text overlay
-    if (overlay_text)
-        RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f));
-
-    if (label_size.x > 0.0f)
-        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
-}
-
-struct ImGuiPlotArrayGetterData
-{
-    const float* Values;
-    int Stride;
-
-    ImGuiPlotArrayGetterData(const float* values, int stride) { Values = values; Stride = stride; }
-};
-
-static float Plot_ArrayGetter(void* data, int idx)
-{
-    ImGuiPlotArrayGetterData* plot_data = (ImGuiPlotArrayGetterData*)data;
-    const float v = *(const float*)(const void*)((const unsigned char*)plot_data->Values + (size_t)idx * plot_data->Stride);
-    return v;
-}
-
-void ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
-{
-    ImGuiPlotArrayGetterData data(values, stride);
-    PlotEx(ImGuiPlotType_Lines, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
-}
-
-void ImGui::PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
-{
-    PlotEx(ImGuiPlotType_Lines, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
-}
-
-void ImGui::PlotHistogram(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
-{
-    ImGuiPlotArrayGetterData data(values, stride);
-    PlotEx(ImGuiPlotType_Histogram, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
-}
-
-void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
-{
-    PlotEx(ImGuiPlotType_Histogram, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Value helpers
-// Those is not very useful, legacy API.
-//-------------------------------------------------------------------------
-// - Value()
-//-------------------------------------------------------------------------
-
-void ImGui::Value(const char* prefix, bool b)
-{
-    Text("%s: %s", prefix, (b ? "true" : "false"));
-}
-
-void ImGui::Value(const char* prefix, int v)
-{
-    Text("%s: %d", prefix, v);
-}
-
-void ImGui::Value(const char* prefix, unsigned int v)
-{
-    Text("%s: %d", prefix, v);
-}
-
-void ImGui::Value(const char* prefix, float v, const char* float_format)
-{
-    if (float_format)
-    {
-        char fmt[64];
-        ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format);
-        Text(fmt, prefix, v);
-    }
-    else
-    {
-        Text("%s: %.3f", prefix, v);
-    }
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] MenuItem, BeginMenu, EndMenu, etc.
-//-------------------------------------------------------------------------
-// - ImGuiMenuColumns [Internal]
-// - BeginMenuBar()
-// - EndMenuBar()
-// - BeginMainMenuBar()
-// - EndMainMenuBar()
-// - BeginMenu()
-// - EndMenu()
-// - MenuItem()
-//-------------------------------------------------------------------------
-
-// Helpers for internal use
-ImGuiMenuColumns::ImGuiMenuColumns()
-{
-    Spacing = Width = NextWidth = 0.0f;
-    memset(Pos, 0, sizeof(Pos));
-    memset(NextWidths, 0, sizeof(NextWidths));
-}
-
-void ImGuiMenuColumns::Update(int count, float spacing, bool clear)
-{
-    IM_ASSERT(count == IM_ARRAYSIZE(Pos));
-    IM_UNUSED(count);
-    Width = NextWidth = 0.0f;
-    Spacing = spacing;
-    if (clear)
-        memset(NextWidths, 0, sizeof(NextWidths));
-    for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
-    {
-        if (i > 0 && NextWidths[i] > 0.0f)
-            Width += Spacing;
-        Pos[i] = IM_FLOOR(Width);
-        Width += NextWidths[i];
-        NextWidths[i] = 0.0f;
-    }
-}
-
-float ImGuiMenuColumns::DeclColumns(float w0, float w1, float w2) // not using va_arg because they promote float to double
-{
-    NextWidth = 0.0f;
-    NextWidths[0] = ImMax(NextWidths[0], w0);
-    NextWidths[1] = ImMax(NextWidths[1], w1);
-    NextWidths[2] = ImMax(NextWidths[2], w2);
-    for (int i = 0; i < IM_ARRAYSIZE(Pos); i++)
-        NextWidth += NextWidths[i] + ((i > 0 && NextWidths[i] > 0.0f) ? Spacing : 0.0f);
-    return ImMax(Width, NextWidth);
-}
-
-float ImGuiMenuColumns::CalcExtraSpace(float avail_w) const
-{
-    return ImMax(0.0f, avail_w - Width);
-}
-
-// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
-// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
-// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
-// Then later the same system could be used for multiple menu-bars, scrollbars, side-bars.
-bool ImGui::BeginMenuBar()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-    if (!(window->Flags & ImGuiWindowFlags_MenuBar))
-        return false;
-
-    IM_ASSERT(!window->DC.MenuBarAppending);
-    BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore
-    PushID("##menubar");
-
-    // We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect.
-    // We remove 1 worth of rounding to Max.x to that text in long menus and small windows don't tend to display over the lower-right rounded area, which looks particularly glitchy.
-    ImRect bar_rect = window->MenuBarRect();
-    ImRect clip_rect(IM_ROUND(bar_rect.Min.x + window->WindowBorderSize), IM_ROUND(bar_rect.Min.y + window->WindowBorderSize), IM_ROUND(ImMax(bar_rect.Min.x, bar_rect.Max.x - ImMax(window->WindowRounding, window->WindowBorderSize))), IM_ROUND(bar_rect.Max.y));
-    clip_rect.ClipWith(window->OuterRectClipped);
-    PushClipRect(clip_rect.Min, clip_rect.Max, false);
-
-    window->DC.CursorPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y);
-    window->DC.LayoutType = ImGuiLayoutType_Horizontal;
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Menu);
-    window->DC.MenuBarAppending = true;
-    AlignTextToFramePadding();
-    return true;
-}
-
-void ImGui::EndMenuBar()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return;
-    ImGuiContext& g = *GImGui;
-
-    // Nav: When a move request within one of our child menu failed, capture the request to navigate among our siblings.
-    if (NavMoveRequestButNoResultYet() && (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) && (g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
-    {
-        ImGuiWindow* nav_earliest_child = g.NavWindow;
-        while (nav_earliest_child->ParentWindow && (nav_earliest_child->ParentWindow->Flags & ImGuiWindowFlags_ChildMenu))
-            nav_earliest_child = nav_earliest_child->ParentWindow;
-        if (nav_earliest_child->ParentWindow == window && nav_earliest_child->DC.ParentLayoutType == ImGuiLayoutType_Horizontal && g.NavMoveRequestForward == ImGuiNavForward_None)
-        {
-            // To do so we claim focus back, restore NavId and then process the movement request for yet another frame.
-            // This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth the hassle/cost)
-            const ImGuiNavLayer layer = ImGuiNavLayer_Menu;
-            IM_ASSERT(window->DC.NavLayerActiveMaskNext & (1 << layer)); // Sanity check
-            FocusWindow(window);
-            SetNavIDWithRectRel(window->NavLastIds[layer], layer, 0, window->NavRectRel[layer]);
-            g.NavLayer = layer;
-            g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection.
-            g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
-            NavMoveRequestCancel();
-        }
-    }
-
-    IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar);
-    IM_ASSERT(window->DC.MenuBarAppending);
-    PopClipRect();
-    PopID();
-    window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->MenuBarRect().Min.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos.
-    window->DC.GroupStack.back().EmitItem = false;
-    EndGroup(); // Restore position on layer 0
-    window->DC.LayoutType = ImGuiLayoutType_Vertical;
-    window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
-    window->DC.NavLayerCurrentMask = (1 << ImGuiNavLayer_Main);
-    window->DC.MenuBarAppending = false;
-}
-
-// For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set.
-bool ImGui::BeginMainMenuBar()
-{
-    ImGuiContext& g = *GImGui;
-    g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f));
-    SetNextWindowPos(ImVec2(0.0f, 0.0f));
-    SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.NextWindowData.MenuBarOffsetMinVal.y + g.FontBaseSize + g.Style.FramePadding.y));
-    PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
-    PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0));
-    ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar;
-    bool is_open = Begin("##MainMenuBar", NULL, window_flags) && BeginMenuBar();
-    PopStyleVar(2);
-    g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
-    if (!is_open)
-    {
-        End();
-        return false;
-    }
-    return true; //-V1020
-}
-
-void ImGui::EndMainMenuBar()
-{
-    EndMenuBar();
-
-    // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
-    // FIXME: With this strategy we won't be able to restore a NULL focus.
-    ImGuiContext& g = *GImGui;
-    if (g.CurrentWindow == g.NavWindow && g.NavLayer == 0 && !g.NavAnyRequest)
-        FocusTopMostWindowUnderOne(g.NavWindow, NULL);
-
-    End();
-}
-
-bool ImGui::BeginMenu(const char* label, bool enabled)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = window->GetID(label);
-    bool menu_is_open = IsPopupOpen(id);
-
-    // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu)
-    ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus;
-    if (window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu))
-        flags |= ImGuiWindowFlags_ChildWindow;
-
-    // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin().
-    // We are relying on a O(N) search - so O(N log N) over the frame - which seems like the most efficient for the expected small amount of BeginMenu() calls per frame.
-    // If somehow this is ever becoming a problem we can switch to use e.g. a ImGuiStorager mapping key to last frame used.
-    if (g.MenusIdSubmittedThisFrame.contains(id))
-    {
-        if (menu_is_open)
-            menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
-        else
-            g.NextWindowData.ClearFlags();          // we behave like Begin() and need to consume those values
-        return menu_is_open;
-    }
-
-    // Tag menu as used. Next time BeginMenu() with same ID is called it will append to existing menu
-    g.MenusIdSubmittedThisFrame.push_back(id);
-
-    ImVec2 label_size = CalcTextSize(label, NULL, true);
-    bool pressed;
-    bool menuset_is_open = !(window->Flags & ImGuiWindowFlags_Popup) && (g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].OpenParentId == window->IDStack.back());
-    ImGuiWindow* backed_nav_window = g.NavWindow;
-    if (menuset_is_open)
-        g.NavWindow = window;  // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent)
-
-    // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu,
-    // However the final position is going to be different! It is choosen by FindBestWindowPosForPopup().
-    // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering.
-    ImVec2 popup_pos, pos = window->DC.CursorPos;
-    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
-    {
-        // Menu inside an horizontal menu bar
-        // Selectable extend their highlight by half ItemSpacing in each direction.
-        // For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
-        popup_pos = ImVec2(pos.x - 1.0f - IM_FLOOR(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight());
-        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
-        PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
-        float w = label_size.x;
-        pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
-        PopStyleVar();
-        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
-    }
-    else
-    {
-        // Menu inside a menu
-        // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
-        //  Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
-        popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y);
-        float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, 0.0f, IM_FLOOR(g.FontSize * 1.20f)); // Feedback to next frame
-        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
-        pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_SpanAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(min_w, 0.0f));
-        ImU32 text_col = GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled);
-        RenderArrow(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.30f, 0.0f), text_col, ImGuiDir_Right);
-    }
-
-    const bool hovered = enabled && ItemHoverable(window->DC.LastItemRect, id);
-    if (menuset_is_open)
-        g.NavWindow = backed_nav_window;
-
-    bool want_open = false;
-    bool want_close = false;
-    if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
-    {
-        // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu
-        // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive.
-        bool moving_toward_other_child_menu = false;
-
-        ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL;
-        if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar))
-        {
-            // FIXME-DPI: Values should be derived from a master "scale" factor.
-            ImRect next_window_rect = child_menu_window->Rect();
-            ImVec2 ta = g.IO.MousePos - g.IO.MouseDelta;
-            ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR();
-            ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR();
-            float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, 5.0f, 30.0f);    // add a bit of extra slack.
-            ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues
-            tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f);                // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale?
-            tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f);
-            moving_toward_other_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
-            //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
-        }
-        if (menu_is_open && !hovered && g.HoveredWindow == window && g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrame != id && !moving_toward_other_child_menu)
-            want_close = true;
-
-        if (!menu_is_open && hovered && pressed) // Click to open
-            want_open = true;
-        else if (!menu_is_open && hovered && !moving_toward_other_child_menu) // Hover to open
-            want_open = true;
-
-        if (g.NavActivateId == id)
-        {
-            want_close = menu_is_open;
-            want_open = !menu_is_open;
-        }
-        if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open
-        {
-            want_open = true;
-            NavMoveRequestCancel();
-        }
-    }
-    else
-    {
-        // Menu bar
-        if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it
-        {
-            want_close = true;
-            want_open = menu_is_open = false;
-        }
-        else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others
-        {
-            want_open = true;
-        }
-        else if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Down) // Nav-Down to open
-        {
-            want_open = true;
-            NavMoveRequestCancel();
-        }
-    }
-
-    if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }'
-        want_close = true;
-    if (want_close && IsPopupOpen(id))
-        ClosePopupToLevel(g.BeginPopupStack.Size, true);
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0));
-
-    if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size)
-    {
-        // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame.
-        OpenPopup(label);
-        return false;
-    }
-
-    menu_is_open |= want_open;
-    if (want_open)
-        OpenPopup(label);
-
-    if (menu_is_open)
-    {
-        SetNextWindowPos(popup_pos, ImGuiCond_Always);
-        menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
-    }
-    else
-    {
-        g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
-    }
-
-    return menu_is_open;
-}
-
-void ImGui::EndMenu()
-{
-    // Nav: When a left move request _within our child menu_ failed, close ourselves (the _parent_ menu).
-    // A menu doesn't close itself because EndMenuBar() wants the catch the last Left<>Right inputs.
-    // However, it means that with the current code, a BeginMenu() from outside another menu or a menu-bar won't be closable with the Left direction.
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (g.NavWindow && g.NavWindow->ParentWindow == window && g.NavMoveDir == ImGuiDir_Left && NavMoveRequestButNoResultYet() && window->DC.LayoutType == ImGuiLayoutType_Vertical)
-    {
-        ClosePopupToLevel(g.BeginPopupStack.Size, true);
-        NavMoveRequestCancel();
-    }
-
-    EndPopup();
-}
-
-bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, bool enabled)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems)
-        return false;
-
-    ImGuiContext& g = *GImGui;
-    ImGuiStyle& style = g.Style;
-    ImVec2 pos = window->DC.CursorPos;
-    ImVec2 label_size = CalcTextSize(label, NULL, true);
-
-    // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73),
-    // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only.
-    ImGuiSelectableFlags flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover | (enabled ? 0 : ImGuiSelectableFlags_Disabled);
-    bool pressed;
-    if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
-    {
-        // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
-        // Note that in this situation we render neither the shortcut neither the selected tick mark
-        float w = label_size.x;
-        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
-        PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
-        pressed = Selectable(label, false, flags, ImVec2(w, 0.0f));
-        PopStyleVar();
-        window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
-    }
-    else
-    {
-        // Menu item inside a vertical menu
-        // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
-        //  Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
-        float shortcut_w = shortcut ? CalcTextSize(shortcut, NULL).x : 0.0f;
-        float min_w = window->DC.MenuColumns.DeclColumns(label_size.x, shortcut_w, IM_FLOOR(g.FontSize * 1.20f)); // Feedback for next frame
-        float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
-        pressed = Selectable(label, false, flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f));
-        if (shortcut_w > 0.0f)
-        {
-            PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
-            RenderText(pos + ImVec2(window->DC.MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false);
-            PopStyleColor();
-        }
-        if (selected)
-            RenderCheckMark(window->DrawList, pos + ImVec2(window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled), g.FontSize  * 0.866f);
-    }
-
-    IMGUI_TEST_ENGINE_ITEM_INFO(window->DC.LastItemId, label, window->DC.ItemFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
-    return pressed;
-}
-
-bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled)
-{
-    if (MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled))
-    {
-        if (p_selected)
-            *p_selected = !*p_selected;
-        return true;
-    }
-    return false;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
-//-------------------------------------------------------------------------
-// - BeginTabBar()
-// - BeginTabBarEx() [Internal]
-// - EndTabBar()
-// - TabBarLayout() [Internal]
-// - TabBarCalcTabID() [Internal]
-// - TabBarCalcMaxTabWidth() [Internal]
-// - TabBarFindTabById() [Internal]
-// - TabBarRemoveTab() [Internal]
-// - TabBarCloseTab() [Internal]
-// - TabBarScrollClamp()v
-// - TabBarScrollToTab() [Internal]
-// - TabBarQueueChangeTabOrder() [Internal]
-// - TabBarScrollingButtons() [Internal]
-// - TabBarTabListPopupButton() [Internal]
-//-------------------------------------------------------------------------
-
-namespace ImGui
-{
-    static void             TabBarLayout(ImGuiTabBar* tab_bar);
-    static ImU32            TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label);
-    static float            TabBarCalcMaxTabWidth();
-    static float            TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling);
-    static void             TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
-    static ImGuiTabItem*    TabBarScrollingButtons(ImGuiTabBar* tab_bar);
-    static ImGuiTabItem*    TabBarTabListPopupButton(ImGuiTabBar* tab_bar);
-}
-
-ImGuiTabBar::ImGuiTabBar()
-{
-    ID = 0;
-    SelectedTabId = NextSelectedTabId = VisibleTabId = 0;
-    CurrFrameVisible = PrevFrameVisible = -1;
-    LastTabContentHeight = 0.0f;
-    OffsetMax = OffsetMaxIdeal = OffsetNextTab = 0.0f;
-    ScrollingAnim = ScrollingTarget = ScrollingTargetDistToVisibility = ScrollingSpeed = 0.0f;
-    Flags = ImGuiTabBarFlags_None;
-    ReorderRequestTabId = 0;
-    ReorderRequestDir = 0;
-    WantLayout = VisibleTabWasSubmitted = false;
-    LastTabItemIdx = -1;
-}
-
-static int IMGUI_CDECL TabItemComparerByVisibleOffset(const void* lhs, const void* rhs)
-{
-    const ImGuiTabItem* a = (const ImGuiTabItem*)lhs;
-    const ImGuiTabItem* b = (const ImGuiTabItem*)rhs;
-    return (int)(a->Offset - b->Offset);
-}
-
-static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
-{
-    ImGuiContext& g = *GImGui;
-    return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index);
-}
-
-static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
-{
-    ImGuiContext& g = *GImGui;
-    if (g.TabBars.Contains(tab_bar))
-        return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar));
-    return ImGuiPtrOrIndex(tab_bar);
-}
-
-bool    ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return false;
-
-    ImGuiID id = window->GetID(str_id);
-    ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id);
-    ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2);
-    tab_bar->ID = id;
-    return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused);
-}
-
-bool    ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImGuiTabBarFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return false;
-
-    if ((flags & ImGuiTabBarFlags_DockNode) == 0)
-        PushOverrideID(tab_bar->ID);
-
-    // Add to stack
-    g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
-    g.CurrentTabBar = tab_bar;
-
-    if (tab_bar->CurrFrameVisible == g.FrameCount)
-    {
-        //IMGUI_DEBUG_LOG("BeginTabBarEx already called this frame\n", g.FrameCount);
-        IM_ASSERT(0);
-        return true;
-    }
-
-    // When toggling back from ordered to manually-reorderable, shuffle tabs to enforce the last visible order.
-    // Otherwise, the most recently inserted tabs would move at the end of visible list which can be a little too confusing or magic for the user.
-    if ((flags & ImGuiTabBarFlags_Reorderable) && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable) && tab_bar->Tabs.Size > 1 && tab_bar->PrevFrameVisible != -1)
-        ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByVisibleOffset);
-
-    // Flags
-    if ((flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
-        flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
-
-    tab_bar->Flags = flags;
-    tab_bar->BarRect = tab_bar_bb;
-    tab_bar->WantLayout = true; // Layout will be done on the first call to ItemTab()
-    tab_bar->PrevFrameVisible = tab_bar->CurrFrameVisible;
-    tab_bar->CurrFrameVisible = g.FrameCount;
-    tab_bar->FramePadding = g.Style.FramePadding;
-
-    // Layout
-    ItemSize(ImVec2(tab_bar->OffsetMaxIdeal, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y);
-    window->DC.CursorPos.x = tab_bar->BarRect.Min.x;
-
-    // Draw separator
-    const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive);
-    const float y = tab_bar->BarRect.Max.y - 1.0f;
-    {
-        const float separator_min_x = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f);
-        const float separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f);
-        window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f);
-    }
-    return true;
-}
-
-void    ImGui::EndTabBar()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    ImGuiTabBar* tab_bar = g.CurrentTabBar;
-    if (tab_bar == NULL)
-    {
-        IM_ASSERT_USER_ERROR(tab_bar != NULL, "Mismatched BeginTabBar()/EndTabBar()!");
-        return;
-    }
-    if (tab_bar->WantLayout)
-        TabBarLayout(tab_bar);
-
-    // Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
-    const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
-    if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing)
-        tab_bar->LastTabContentHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, 0.0f);
-    else
-        window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->LastTabContentHeight;
-
-    if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
-        PopID();
-
-    g.CurrentTabBarStack.pop_back();
-    g.CurrentTabBar = g.CurrentTabBarStack.empty() ? NULL : GetTabBarFromTabBarRef(g.CurrentTabBarStack.back());
-}
-
-// This is called only once a frame before by the first call to ItemTab()
-// The reason we're not calling it in BeginTabBar() is to leave a chance to the user to call the SetTabItemClosed() functions.
-static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
-{
-    ImGuiContext& g = *GImGui;
-    tab_bar->WantLayout = false;
-
-    // Garbage collect
-    int tab_dst_n = 0;
-    for (int tab_src_n = 0; tab_src_n < tab_bar->Tabs.Size; tab_src_n++)
-    {
-        ImGuiTabItem* tab = &tab_bar->Tabs[tab_src_n];
-        if (tab->LastFrameVisible < tab_bar->PrevFrameVisible)
-        {
-            if (tab->ID == tab_bar->SelectedTabId)
-                tab_bar->SelectedTabId = 0;
-            continue;
-        }
-        if (tab_dst_n != tab_src_n)
-            tab_bar->Tabs[tab_dst_n] = tab_bar->Tabs[tab_src_n];
-        tab_dst_n++;
-    }
-    if (tab_bar->Tabs.Size != tab_dst_n)
-        tab_bar->Tabs.resize(tab_dst_n);
-
-    // Setup next selected tab
-    ImGuiID scroll_track_selected_tab_id = 0;
-    if (tab_bar->NextSelectedTabId)
-    {
-        tab_bar->SelectedTabId = tab_bar->NextSelectedTabId;
-        tab_bar->NextSelectedTabId = 0;
-        scroll_track_selected_tab_id = tab_bar->SelectedTabId;
-    }
-
-    // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot).
-    if (tab_bar->ReorderRequestTabId != 0)
-    {
-        if (ImGuiTabItem* tab1 = TabBarFindTabByID(tab_bar, tab_bar->ReorderRequestTabId))
-        {
-            //IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_Reorderable); // <- this may happen when using debug tools
-            int tab2_order = tab_bar->GetTabOrder(tab1) + tab_bar->ReorderRequestDir;
-            if (tab2_order >= 0 && tab2_order < tab_bar->Tabs.Size)
-            {
-                ImGuiTabItem* tab2 = &tab_bar->Tabs[tab2_order];
-                ImGuiTabItem item_tmp = *tab1;
-                *tab1 = *tab2;
-                *tab2 = item_tmp;
-                if (tab2->ID == tab_bar->SelectedTabId)
-                    scroll_track_selected_tab_id = tab2->ID;
-                tab1 = tab2 = NULL;
-            }
-            if (tab_bar->Flags & ImGuiTabBarFlags_SaveSettings)
-                MarkIniSettingsDirty();
-        }
-        tab_bar->ReorderRequestTabId = 0;
-    }
-
-    // Tab List Popup (will alter tab_bar->BarRect and therefore the available width!)
-    const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0;
-    if (tab_list_popup_button)
-        if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Max.x!
-            scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
-
-    // Compute ideal widths
-    g.ShrinkWidthBuffer.resize(tab_bar->Tabs.Size);
-    float width_total_contents = 0.0f;
-    ImGuiTabItem* most_recently_selected_tab = NULL;
-    bool found_selected_tab_id = false;
-    for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-    {
-        ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
-        IM_ASSERT(tab->LastFrameVisible >= tab_bar->PrevFrameVisible);
-
-        if (most_recently_selected_tab == NULL || most_recently_selected_tab->LastFrameSelected < tab->LastFrameSelected)
-            most_recently_selected_tab = tab;
-        if (tab->ID == tab_bar->SelectedTabId)
-            found_selected_tab_id = true;
-
-        // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar.
-        // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet,
-        // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window.
-        const char* tab_name = tab_bar->GetTabName(tab);
-        const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true;
-        tab->ContentWidth = TabItemCalcSize(tab_name, has_close_button).x;
-
-        width_total_contents += (tab_n > 0 ? g.Style.ItemInnerSpacing.x : 0.0f) + tab->ContentWidth;
-
-        // Store data so we can build an array sorted by width if we need to shrink tabs down
-        g.ShrinkWidthBuffer[tab_n].Index = tab_n;
-        g.ShrinkWidthBuffer[tab_n].Width = tab->ContentWidth;
-    }
-
-    // Compute width
-    const float initial_offset_x = 0.0f; // g.Style.ItemInnerSpacing.x;
-    const float width_avail = ImMax(tab_bar->BarRect.GetWidth() - initial_offset_x, 0.0f);
-    float width_excess = (width_avail < width_total_contents) ? (width_total_contents - width_avail) : 0.0f;
-    if (width_excess > 0.0f && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyResizeDown))
-    {
-        // If we don't have enough room, resize down the largest tabs first
-        ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess);
-        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-            tab_bar->Tabs[g.ShrinkWidthBuffer[tab_n].Index].Width = IM_FLOOR(g.ShrinkWidthBuffer[tab_n].Width);
-    }
-    else
-    {
-        const float tab_max_width = TabBarCalcMaxTabWidth();
-        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-        {
-            ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
-            tab->Width = ImMin(tab->ContentWidth, tab_max_width);
-            IM_ASSERT(tab->Width > 0.0f);
-        }
-    }
-
-    // Layout all active tabs
-    float offset_x = initial_offset_x;
-    float offset_x_ideal = offset_x;
-    tab_bar->OffsetNextTab = offset_x; // This is used by non-reorderable tab bar where the submission order is always honored.
-    for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-    {
-        ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
-        tab->Offset = offset_x;
-        if (scroll_track_selected_tab_id == 0 && g.NavJustMovedToId == tab->ID)
-            scroll_track_selected_tab_id = tab->ID;
-        offset_x += tab->Width + g.Style.ItemInnerSpacing.x;
-        offset_x_ideal += tab->ContentWidth + g.Style.ItemInnerSpacing.x;
-    }
-    tab_bar->OffsetMax = ImMax(offset_x - g.Style.ItemInnerSpacing.x, 0.0f);
-    tab_bar->OffsetMaxIdeal = ImMax(offset_x_ideal - g.Style.ItemInnerSpacing.x, 0.0f);
-
-    // Horizontal scrolling buttons
-    const bool scrolling_buttons = (tab_bar->OffsetMax > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll);
-    if (scrolling_buttons)
-        if (ImGuiTabItem* tab_to_select = TabBarScrollingButtons(tab_bar)) // NB: Will alter BarRect.Max.x!
-            scroll_track_selected_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
-
-    // If we have lost the selected tab, select the next most recently active one
-    if (found_selected_tab_id == false)
-        tab_bar->SelectedTabId = 0;
-    if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL)
-        scroll_track_selected_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
-
-    // Lock in visible tab
-    tab_bar->VisibleTabId = tab_bar->SelectedTabId;
-    tab_bar->VisibleTabWasSubmitted = false;
-
-    // Update scrolling
-    if (scroll_track_selected_tab_id)
-        if (ImGuiTabItem* scroll_track_selected_tab = TabBarFindTabByID(tab_bar, scroll_track_selected_tab_id))
-            TabBarScrollToTab(tab_bar, scroll_track_selected_tab);
-    tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim);
-    tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget);
-    if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget)
-    {
-        // Scrolling speed adjust itself so we can always reach our target in 1/3 seconds.
-        // Teleport if we are aiming far off the visible line
-        tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, 70.0f * g.FontSize);
-        tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, ImFabs(tab_bar->ScrollingTarget - tab_bar->ScrollingAnim) / 0.3f);
-        const bool teleport = (tab_bar->PrevFrameVisible + 1 < g.FrameCount) || (tab_bar->ScrollingTargetDistToVisibility > 10.0f * g.FontSize);
-        tab_bar->ScrollingAnim = teleport ? tab_bar->ScrollingTarget : ImLinearSweep(tab_bar->ScrollingAnim, tab_bar->ScrollingTarget, g.IO.DeltaTime * tab_bar->ScrollingSpeed);
-    }
-    else
-    {
-        tab_bar->ScrollingSpeed = 0.0f;
-    }
-
-    // Clear name buffers
-    if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
-        tab_bar->TabsNames.Buf.resize(0);
-}
-
-// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack.
-static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label)
-{
-    if (tab_bar->Flags & ImGuiTabBarFlags_DockNode)
-    {
-        ImGuiID id = ImHashStr(label);
-        KeepAliveID(id);
-        return id;
-    }
-    else
-    {
-        ImGuiWindow* window = GImGui->CurrentWindow;
-        return window->GetID(label);
-    }
-}
-
-static float ImGui::TabBarCalcMaxTabWidth()
-{
-    ImGuiContext& g = *GImGui;
-    return g.FontSize * 20.0f;
-}
-
-ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id)
-{
-    if (tab_id != 0)
-        for (int n = 0; n < tab_bar->Tabs.Size; n++)
-            if (tab_bar->Tabs[n].ID == tab_id)
-                return &tab_bar->Tabs[n];
-    return NULL;
-}
-
-// The *TabId fields be already set by the docking system _before_ the actual TabItem was created, so we clear them regardless.
-void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id)
-{
-    if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
-        tab_bar->Tabs.erase(tab);
-    if (tab_bar->VisibleTabId == tab_id)      { tab_bar->VisibleTabId = 0; }
-    if (tab_bar->SelectedTabId == tab_id)     { tab_bar->SelectedTabId = 0; }
-    if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
-}
-
-// Called on manual closure attempt
-void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
-{
-    if ((tab_bar->VisibleTabId == tab->ID) && !(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
-    {
-        // This will remove a frame of lag for selecting another tab on closure.
-        // However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
-        tab->LastFrameVisible = -1;
-        tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
-    }
-    else if ((tab_bar->VisibleTabId != tab->ID) && (tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
-    {
-        // Actually select before expecting closure
-        tab_bar->NextSelectedTabId = tab->ID;
-    }
-}
-
-static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling)
-{
-    scrolling = ImMin(scrolling, tab_bar->OffsetMax - tab_bar->BarRect.GetWidth());
-    return ImMax(scrolling, 0.0f);
-}
-
-static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
-{
-    ImGuiContext& g = *GImGui;
-    float margin = g.FontSize * 1.0f; // When to scroll to make Tab N+1 visible always make a bit of N visible to suggest more scrolling area (since we don't have a scrollbar)
-    int order = tab_bar->GetTabOrder(tab);
-    float tab_x1 = tab->Offset + (order > 0 ? -margin : 0.0f);
-    float tab_x2 = tab->Offset + tab->Width + (order + 1 < tab_bar->Tabs.Size ? margin : 1.0f);
-    tab_bar->ScrollingTargetDistToVisibility = 0.0f;
-    if (tab_bar->ScrollingTarget > tab_x1 || (tab_x2 - tab_x1 >= tab_bar->BarRect.GetWidth()))
-    {
-        tab_bar->ScrollingTargetDistToVisibility = ImMax(tab_bar->ScrollingAnim - tab_x2, 0.0f);
-        tab_bar->ScrollingTarget = tab_x1;
-    }
-    else if (tab_bar->ScrollingTarget < tab_x2 - tab_bar->BarRect.GetWidth())
-    {
-        tab_bar->ScrollingTargetDistToVisibility = ImMax((tab_x1 - tab_bar->BarRect.GetWidth()) - tab_bar->ScrollingAnim, 0.0f);
-        tab_bar->ScrollingTarget = tab_x2 - tab_bar->BarRect.GetWidth();
-    }
-}
-
-void ImGui::TabBarQueueChangeTabOrder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int dir)
-{
-    IM_ASSERT(dir == -1 || dir == +1);
-    IM_ASSERT(tab_bar->ReorderRequestTabId == 0);
-    tab_bar->ReorderRequestTabId = tab->ID;
-    tab_bar->ReorderRequestDir = (ImS8)dir;
-}
-
-static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    const ImVec2 arrow_button_size(g.FontSize - 2.0f, g.FontSize + g.Style.FramePadding.y * 2.0f);
-    const float scrolling_buttons_width = arrow_button_size.x * 2.0f;
-
-    const ImVec2 backup_cursor_pos = window->DC.CursorPos;
-    //window->DrawList->AddRect(ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y), ImVec2(tab_bar->BarRect.Max.x, tab_bar->BarRect.Max.y), IM_COL32(255,0,0,255));
-
-    const ImRect avail_bar_rect = tab_bar->BarRect;
-    bool want_clip_rect = !avail_bar_rect.Contains(ImRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(scrolling_buttons_width, 0.0f)));
-    if (want_clip_rect)
-        PushClipRect(tab_bar->BarRect.Min, tab_bar->BarRect.Max + ImVec2(g.Style.ItemInnerSpacing.x, 0.0f), true);
-
-    ImGuiTabItem* tab_to_select = NULL;
-
-    int select_dir = 0;
-    ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
-    arrow_col.w *= 0.5f;
-
-    PushStyleColor(ImGuiCol_Text, arrow_col);
-    PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
-    const float backup_repeat_delay = g.IO.KeyRepeatDelay;
-    const float backup_repeat_rate = g.IO.KeyRepeatRate;
-    g.IO.KeyRepeatDelay = 0.250f;
-    g.IO.KeyRepeatRate = 0.200f;
-    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y);
-    if (ArrowButtonEx("##<", ImGuiDir_Left, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
-        select_dir = -1;
-    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width + arrow_button_size.x, tab_bar->BarRect.Min.y);
-    if (ArrowButtonEx("##>", ImGuiDir_Right, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
-        select_dir = +1;
-    PopStyleColor(2);
-    g.IO.KeyRepeatRate = backup_repeat_rate;
-    g.IO.KeyRepeatDelay = backup_repeat_delay;
-
-    if (want_clip_rect)
-        PopClipRect();
-
-    if (select_dir != 0)
-        if (ImGuiTabItem* tab_item = TabBarFindTabByID(tab_bar, tab_bar->SelectedTabId))
-        {
-            int selected_order = tab_bar->GetTabOrder(tab_item);
-            int target_order = selected_order + select_dir;
-            tab_to_select = &tab_bar->Tabs[(target_order >= 0 && target_order < tab_bar->Tabs.Size) ? target_order : selected_order]; // If we are at the end of the list, still scroll to make our tab visible
-        }
-    window->DC.CursorPos = backup_cursor_pos;
-    tab_bar->BarRect.Max.x -= scrolling_buttons_width + 1.0f;
-
-    return tab_to_select;
-}
-
-static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    // We use g.Style.FramePadding.y to match the square ArrowButton size
-    const float tab_list_popup_button_width = g.FontSize + g.Style.FramePadding.y;
-    const ImVec2 backup_cursor_pos = window->DC.CursorPos;
-    window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x - g.Style.FramePadding.y, tab_bar->BarRect.Min.y);
-    tab_bar->BarRect.Min.x += tab_list_popup_button_width;
-
-    ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
-    arrow_col.w *= 0.5f;
-    PushStyleColor(ImGuiCol_Text, arrow_col);
-    PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
-    bool open = BeginCombo("##v", NULL, ImGuiComboFlags_NoPreview);
-    PopStyleColor(2);
-
-    ImGuiTabItem* tab_to_select = NULL;
-    if (open)
-    {
-        for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
-        {
-            ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
-            const char* tab_name = tab_bar->GetTabName(tab);
-            if (Selectable(tab_name, tab_bar->SelectedTabId == tab->ID))
-                tab_to_select = tab;
-        }
-        EndCombo();
-    }
-
-    window->DC.CursorPos = backup_cursor_pos;
-    return tab_to_select;
-}
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
-//-------------------------------------------------------------------------
-// - BeginTabItem()
-// - EndTabItem()
-// - TabItemEx() [Internal]
-// - SetTabItemClosed()
-// - TabItemCalcSize() [Internal]
-// - TabItemBackground() [Internal]
-// - TabItemLabelAndCloseButton() [Internal]
-//-------------------------------------------------------------------------
-
-bool    ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return false;
-
-    ImGuiTabBar* tab_bar = g.CurrentTabBar;
-    if (tab_bar == NULL)
-    {
-        IM_ASSERT_USER_ERROR(tab_bar, "BeginTabItem() Needs to be called between BeginTabBar() and EndTabBar()!");
-        return false;
-    }
-    bool ret = TabItemEx(tab_bar, label, p_open, flags);
-    if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
-    {
-        ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
-        PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
-    }
-    return ret;
-}
-
-void    ImGui::EndTabItem()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    ImGuiTabBar* tab_bar = g.CurrentTabBar;
-    if (tab_bar == NULL)
-    {
-        IM_ASSERT(tab_bar != NULL && "Needs to be called between BeginTabBar() and EndTabBar()!");
-        return;
-    }
-    IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
-    ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
-    if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
-        window->IDStack.pop_back();
-}
-
-bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
-{
-    // Layout whole tab bar if not already done
-    if (tab_bar->WantLayout)
-        TabBarLayout(tab_bar);
-
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return false;
-
-    const ImGuiStyle& style = g.Style;
-    const ImGuiID id = TabBarCalcTabID(tab_bar, label);
-
-    // If the user called us with *p_open == false, we early out and don't render. We make a dummy call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
-    if (p_open && !*p_open)
-    {
-        PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
-        ItemAdd(ImRect(), id);
-        PopItemFlag();
-        return false;
-    }
-
-    // Store into ImGuiTabItemFlags_NoCloseButton, also honor ImGuiTabItemFlags_NoCloseButton passed by user (although not documented)
-    if (flags & ImGuiTabItemFlags_NoCloseButton)
-        p_open = NULL;
-    else if (p_open == NULL)
-        flags |= ImGuiTabItemFlags_NoCloseButton;
-
-    // Calculate tab contents size
-    ImVec2 size = TabItemCalcSize(label, p_open != NULL);
-
-    // Acquire tab data
-    ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id);
-    bool tab_is_new = false;
-    if (tab == NULL)
-    {
-        tab_bar->Tabs.push_back(ImGuiTabItem());
-        tab = &tab_bar->Tabs.back();
-        tab->ID = id;
-        tab->Width = size.x;
-        tab_is_new = true;
-    }
-    tab_bar->LastTabItemIdx = (short)tab_bar->Tabs.index_from_ptr(tab);
-    tab->ContentWidth = size.x;
-
-    const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
-    const bool tab_bar_focused = (tab_bar->Flags & ImGuiTabBarFlags_IsFocused) != 0;
-    const bool tab_appearing = (tab->LastFrameVisible + 1 < g.FrameCount);
-    tab->LastFrameVisible = g.FrameCount;
-    tab->Flags = flags;
-
-    // Append name with zero-terminator
-    tab->NameOffset = tab_bar->TabsNames.size();
-    tab_bar->TabsNames.append(label, label + strlen(label) + 1);
-
-    // If we are not reorderable, always reset offset based on submission order.
-    // (We already handled layout and sizing using the previous known order, but sizing is not affected by order!)
-    if (!tab_appearing && !(tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
-    {
-        tab->Offset = tab_bar->OffsetNextTab;
-        tab_bar->OffsetNextTab += tab->Width + g.Style.ItemInnerSpacing.x;
-    }
-
-    // Update selected tab
-    if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0)
-        if (!tab_bar_appearing || tab_bar->SelectedTabId == 0)
-            tab_bar->NextSelectedTabId = id;  // New tabs gets activated
-    if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // SetSelected can only be passed on explicit tab bar
-        tab_bar->NextSelectedTabId = id;
-
-    // Lock visibility
-    bool tab_contents_visible = (tab_bar->VisibleTabId == id);
-    if (tab_contents_visible)
-        tab_bar->VisibleTabWasSubmitted = true;
-
-    // On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
-    if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
-        if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
-            tab_contents_visible = true;
-
-    if (tab_appearing && !(tab_bar_appearing && !tab_is_new))
-    {
-        PushItemFlag(ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus, true);
-        ItemAdd(ImRect(), id);
-        PopItemFlag();
-        return tab_contents_visible;
-    }
-
-    if (tab_bar->SelectedTabId == id)
-        tab->LastFrameSelected = g.FrameCount;
-
-    // Backup current layout position
-    const ImVec2 backup_main_cursor_pos = window->DC.CursorPos;
-
-    // Layout
-    size.x = tab->Width;
-    window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2(IM_FLOOR(tab->Offset - tab_bar->ScrollingAnim), 0.0f);
-    ImVec2 pos = window->DC.CursorPos;
-    ImRect bb(pos, pos + size);
-
-    // We don't have CPU clipping primitives to clip the CloseButton (until it becomes a texture), so need to add an extra draw call (temporary in the case of vertical animation)
-    bool want_clip_rect = (bb.Min.x < tab_bar->BarRect.Min.x) || (bb.Max.x > tab_bar->BarRect.Max.x);
-    if (want_clip_rect)
-        PushClipRect(ImVec2(ImMax(bb.Min.x, tab_bar->BarRect.Min.x), bb.Min.y - 1), ImVec2(tab_bar->BarRect.Max.x, bb.Max.y), true);
-
-    ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
-    ItemSize(bb.GetSize(), style.FramePadding.y);
-    window->DC.CursorMaxPos = backup_cursor_max_pos;
-
-    if (!ItemAdd(bb, id))
-    {
-        if (want_clip_rect)
-            PopClipRect();
-        window->DC.CursorPos = backup_main_cursor_pos;
-        return tab_contents_visible;
-    }
-
-    // Click to Select a tab
-    ImGuiButtonFlags button_flags = (ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_AllowItemOverlap);
-    if (g.DragDropActive)
-        button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
-    bool hovered, held;
-    bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
-    if (pressed)
-        tab_bar->NextSelectedTabId = id;
-    hovered |= (g.HoveredId == id);
-
-    // Allow the close button to overlap unless we are dragging (in which case we don't want any overlapping tabs to be hovered)
-    if (!held)
-        SetItemAllowOverlap();
-
-    // Drag and drop: re-order tabs
-    if (held && !tab_appearing && IsMouseDragging(0))
-    {
-        if (!g.DragDropActive && (tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
-        {
-            // While moving a tab it will jump on the other side of the mouse, so we also test for MouseDelta.x
-            if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < bb.Min.x)
-            {
-                if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
-                    TabBarQueueChangeTabOrder(tab_bar, tab, -1);
-            }
-            else if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > bb.Max.x)
-            {
-                if (tab_bar->Flags & ImGuiTabBarFlags_Reorderable)
-                    TabBarQueueChangeTabOrder(tab_bar, tab, +1);
-            }
-        }
-    }
-
-#if 0
-    if (hovered && g.HoveredIdNotActiveTimer > 0.50f && bb.GetWidth() < tab->ContentWidth)
-    {
-        // Enlarge tab display when hovering
-        bb.Max.x = bb.Min.x + IM_FLOOR(ImLerp(bb.GetWidth(), tab->ContentWidth, ImSaturate((g.HoveredIdNotActiveTimer - 0.40f) * 6.0f)));
-        display_draw_list = GetForegroundDrawList(window);
-        TabItemBackground(display_draw_list, bb, flags, GetColorU32(ImGuiCol_TitleBgActive));
-    }
-#endif
-
-    // Render tab shape
-    ImDrawList* display_draw_list = window->DrawList;
-    const ImU32 tab_col = GetColorU32((held || hovered) ? ImGuiCol_TabHovered : tab_contents_visible ? (tab_bar_focused ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive) : (tab_bar_focused ? ImGuiCol_Tab : ImGuiCol_TabUnfocused));
-    TabItemBackground(display_draw_list, bb, flags, tab_col);
-    RenderNavHighlight(bb, id);
-
-    // Select with right mouse button. This is so the common idiom for context menu automatically highlight the current widget.
-    const bool hovered_unblocked = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
-    if (hovered_unblocked && (IsMouseClicked(1) || IsMouseReleased(1)))
-        tab_bar->NextSelectedTabId = id;
-
-    if (tab_bar->Flags & ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)
-        flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton;
-
-    // Render tab label, process close button
-    const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0;
-    bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id);
-    if (just_closed && p_open != NULL)
-    {
-        *p_open = false;
-        TabBarCloseTab(tab_bar, tab);
-    }
-
-    // Restore main window position so user can draw there
-    if (want_clip_rect)
-        PopClipRect();
-    window->DC.CursorPos = backup_main_cursor_pos;
-
-    // Tooltip (FIXME: Won't work over the close button because ItemOverlap systems messes up with HoveredIdTimer)
-    // We test IsItemHovered() to discard e.g. when another item is active or drag and drop over the tab bar (which g.HoveredId ignores)
-    if (g.HoveredId == id && !held && g.HoveredIdNotActiveTimer > 0.50f && IsItemHovered())
-        if (!(tab_bar->Flags & ImGuiTabBarFlags_NoTooltip))
-            SetTooltip("%.*s", (int)(FindRenderedTextEnd(label) - label), label);
-
-    return tab_contents_visible;
-}
-
-// [Public] This is call is 100% optional but it allows to remove some one-frame glitches when a tab has been unexpectedly removed.
-// To use it to need to call the function SetTabItemClosed() after BeginTabBar() and before any call to BeginTabItem()
-void    ImGui::SetTabItemClosed(const char* label)
-{
-    ImGuiContext& g = *GImGui;
-    bool is_within_manual_tab_bar = g.CurrentTabBar && !(g.CurrentTabBar->Flags & ImGuiTabBarFlags_DockNode);
-    if (is_within_manual_tab_bar)
-    {
-        ImGuiTabBar* tab_bar = g.CurrentTabBar;
-        IM_ASSERT(tab_bar->WantLayout);         // Needs to be called AFTER BeginTabBar() and BEFORE the first call to BeginTabItem()
-        ImGuiID tab_id = TabBarCalcTabID(tab_bar, label);
-        TabBarRemoveTab(tab_bar, tab_id);
-    }
-}
-
-ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)
-{
-    ImGuiContext& g = *GImGui;
-    ImVec2 label_size = CalcTextSize(label, NULL, true);
-    ImVec2 size = ImVec2(label_size.x + g.Style.FramePadding.x, label_size.y + g.Style.FramePadding.y * 2.0f);
-    if (has_close_button)
-        size.x += g.Style.FramePadding.x + (g.Style.ItemInnerSpacing.x + g.FontSize); // We use Y intentionally to fit the close button circle.
-    else
-        size.x += g.Style.FramePadding.x + 1.0f;
-    return ImVec2(ImMin(size.x, TabBarCalcMaxTabWidth()), size.y);
-}
-
-void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col)
-{
-    // While rendering tabs, we trim 1 pixel off the top of our bounding box so they can fit within a regular frame height while looking "detached" from it.
-    ImGuiContext& g = *GImGui;
-    const float width = bb.GetWidth();
-    IM_UNUSED(flags);
-    IM_ASSERT(width > 0.0f);
-    const float rounding = ImMax(0.0f, ImMin(g.Style.TabRounding, width * 0.5f - 1.0f));
-    const float y1 = bb.Min.y + 1.0f;
-    const float y2 = bb.Max.y - 1.0f;
-    draw_list->PathLineTo(ImVec2(bb.Min.x, y2));
-    draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9);
-    draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12);
-    draw_list->PathLineTo(ImVec2(bb.Max.x, y2));
-    draw_list->PathFillConvex(col);
-    if (g.Style.TabBorderSize > 0.0f)
-    {
-        draw_list->PathLineTo(ImVec2(bb.Min.x + 0.5f, y2));
-        draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9);
-        draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12);
-        draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2));
-        draw_list->PathStroke(GetColorU32(ImGuiCol_Border), false, g.Style.TabBorderSize);
-    }
-}
-
-// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic
-// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter.
-bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id)
-{
-    ImGuiContext& g = *GImGui;
-    ImVec2 label_size = CalcTextSize(label, NULL, true);
-    if (bb.GetWidth() <= 1.0f)
-        return false;
-
-    // Render text label (with clipping + alpha gradient) + unsaved marker
-    const char* TAB_UNSAVED_MARKER = "*";
-    ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y);
-    if (flags & ImGuiTabItemFlags_UnsavedDocument)
-    {
-        text_pixel_clip_bb.Max.x -= CalcTextSize(TAB_UNSAVED_MARKER, NULL, false).x;
-        ImVec2 unsaved_marker_pos(ImMin(bb.Min.x + frame_padding.x + label_size.x + 2, text_pixel_clip_bb.Max.x), bb.Min.y + frame_padding.y + IM_FLOOR(-g.FontSize * 0.25f));
-        RenderTextClippedEx(draw_list, unsaved_marker_pos, bb.Max - frame_padding, TAB_UNSAVED_MARKER, NULL, NULL);
-    }
-    ImRect text_ellipsis_clip_bb = text_pixel_clip_bb;
-
-    // Close Button
-    // We are relying on a subtle and confusing distinction between 'hovered' and 'g.HoveredId' which happens because we are using ImGuiButtonFlags_AllowOverlapMode + SetItemAllowOverlap()
-    //  'hovered' will be true when hovering the Tab but NOT when hovering the close button
-    //  'g.HoveredId==id' will be true when hovering the Tab including when hovering the close button
-    //  'g.ActiveId==close_button_id' will be true when we are holding on the close button, in which case both hovered booleans are false
-    bool close_button_pressed = false;
-    bool close_button_visible = false;
-    if (close_button_id != 0)
-        if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == close_button_id)
-            close_button_visible = true;
-    if (close_button_visible)
-    {
-        ImGuiItemHoveredDataBackup last_item_backup;
-        const float close_button_sz = g.FontSize;
-        PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
-        if (CloseButton(close_button_id, ImVec2(bb.Max.x - frame_padding.x * 2.0f - close_button_sz, bb.Min.y)))
-            close_button_pressed = true;
-        PopStyleVar();
-        last_item_backup.Restore();
-
-        // Close with middle mouse button
-        if (!(flags & ImGuiTabItemFlags_NoCloseWithMiddleMouseButton) && IsMouseClicked(2))
-            close_button_pressed = true;
-
-        text_pixel_clip_bb.Max.x -= close_button_sz;
-    }
-
-    float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f;
-    RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size);
-
-    return close_button_pressed;
-}
-
-
-//-------------------------------------------------------------------------
-// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
-// In the current version, Columns are very weak. Needs to be replaced with a more full-featured system.
-//-------------------------------------------------------------------------
-// - GetColumnIndex()
-// - GetColumnCount()
-// - GetColumnOffset()
-// - GetColumnWidth()
-// - SetColumnOffset()
-// - SetColumnWidth()
-// - PushColumnClipRect() [Internal]
-// - PushColumnsBackground() [Internal]
-// - PopColumnsBackground() [Internal]
-// - FindOrCreateColumns() [Internal]
-// - GetColumnsID() [Internal]
-// - BeginColumns()
-// - NextColumn()
-// - EndColumns()
-// - Columns()
-//-------------------------------------------------------------------------
-
-int ImGui::GetColumnIndex()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CurrentColumns ? window->DC.CurrentColumns->Current : 0;
-}
-
-int ImGui::GetColumnsCount()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    return window->DC.CurrentColumns ? window->DC.CurrentColumns->Count : 1;
-}
-
-float ImGui::GetColumnOffsetFromNorm(const ImGuiColumns* columns, float offset_norm)
-{
-    return offset_norm * (columns->OffMaxX - columns->OffMinX);
-}
-
-float ImGui::GetColumnNormFromOffset(const ImGuiColumns* columns, float offset)
-{
-    return offset / (columns->OffMaxX - columns->OffMinX);
-}
-
-static const float COLUMNS_HIT_RECT_HALF_WIDTH = 4.0f;
-
-static float GetDraggedColumnOffset(ImGuiColumns* columns, int column_index)
-{
-    // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
-    // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    IM_ASSERT(column_index > 0); // We are not supposed to drag column 0.
-    IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index));
-
-    float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + COLUMNS_HIT_RECT_HALF_WIDTH - window->Pos.x;
-    x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing);
-    if ((columns->Flags & ImGuiColumnsFlags_NoPreserveWidths))
-        x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing);
-
-    return x;
-}
-
-float ImGui::GetColumnOffset(int column_index)
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (columns == NULL)
-        return 0.0f;
-
-    if (column_index < 0)
-        column_index = columns->Current;
-    IM_ASSERT(column_index < columns->Columns.Size);
-
-    const float t = columns->Columns[column_index].OffsetNorm;
-    const float x_offset = ImLerp(columns->OffMinX, columns->OffMaxX, t);
-    return x_offset;
-}
-
-static float GetColumnWidthEx(ImGuiColumns* columns, int column_index, bool before_resize = false)
-{
-    if (column_index < 0)
-        column_index = columns->Current;
-
-    float offset_norm;
-    if (before_resize)
-        offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize;
-    else
-        offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm;
-    return ImGui::GetColumnOffsetFromNorm(columns, offset_norm);
-}
-
-float ImGui::GetColumnWidth(int column_index)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (columns == NULL)
-        return GetContentRegionAvail().x;
-
-    if (column_index < 0)
-        column_index = columns->Current;
-    return GetColumnOffsetFromNorm(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm);
-}
-
-void ImGui::SetColumnOffset(int column_index, float offset)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    IM_ASSERT(columns != NULL);
-
-    if (column_index < 0)
-        column_index = columns->Current;
-    IM_ASSERT(column_index < columns->Columns.Size);
-
-    const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1);
-    const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f;
-
-    if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow))
-        offset = ImMin(offset, columns->OffMaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index));
-    columns->Columns[column_index].OffsetNorm = GetColumnNormFromOffset(columns, offset - columns->OffMinX);
-
-    if (preserve_width)
-        SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
-}
-
-void ImGui::SetColumnWidth(int column_index, float width)
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    IM_ASSERT(columns != NULL);
-
-    if (column_index < 0)
-        column_index = columns->Current;
-    SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width);
-}
-
-void ImGui::PushColumnClipRect(int column_index)
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (column_index < 0)
-        column_index = columns->Current;
-
-    ImGuiColumnData* column = &columns->Columns[column_index];
-    PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
-}
-
-// Get into the columns background draw command (which is generally the same draw command as before we called BeginColumns)
-void ImGui::PushColumnsBackground()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (columns->Count == 1)
-        return;
-    columns->Splitter.SetCurrentChannel(window->DrawList, 0);
-    int cmd_size = window->DrawList->CmdBuffer.Size;
-    PushClipRect(columns->HostClipRect.Min, columns->HostClipRect.Max, false);
-    IM_UNUSED(cmd_size);
-    IM_ASSERT(cmd_size == window->DrawList->CmdBuffer.Size); // Being in channel 0 this should not have created an ImDrawCmd
-}
-
-void ImGui::PopColumnsBackground()
-{
-    ImGuiWindow* window = GetCurrentWindowRead();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (columns->Count == 1)
-        return;
-    columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
-    PopClipRect();
-}
-
-ImGuiColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID id)
-{
-    // We have few columns per window so for now we don't need bother much with turning this into a faster lookup.
-    for (int n = 0; n < window->ColumnsStorage.Size; n++)
-        if (window->ColumnsStorage[n].ID == id)
-            return &window->ColumnsStorage[n];
-
-    window->ColumnsStorage.push_back(ImGuiColumns());
-    ImGuiColumns* columns = &window->ColumnsStorage.back();
-    columns->ID = id;
-    return columns;
-}
-
-ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-
-    // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
-    // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
-    PushID(0x11223347 + (str_id ? 0 : columns_count));
-    ImGuiID id = window->GetID(str_id ? str_id : "columns");
-    PopID();
-
-    return id;
-}
-
-void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlags flags)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-
-    IM_ASSERT(columns_count >= 1 && columns_count <= 64);   // Maximum 64 columns
-    IM_ASSERT(window->DC.CurrentColumns == NULL);           // Nested columns are currently not supported
-
-    // Acquire storage for the columns set
-    ImGuiID id = GetColumnsID(str_id, columns_count);
-    ImGuiColumns* columns = FindOrCreateColumns(window, id);
-    IM_ASSERT(columns->ID == id);
-    columns->Current = 0;
-    columns->Count = columns_count;
-    columns->Flags = flags;
-    window->DC.CurrentColumns = columns;
-
-    columns->HostCursorPosY = window->DC.CursorPos.y;
-    columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x;
-    columns->HostClipRect = window->ClipRect;
-    columns->HostWorkRect = window->WorkRect;
-
-    // Set state for first column
-    // We aim so that the right-most column will have the same clipping width as other after being clipped by parent ClipRect
-    const float column_padding = g.Style.ItemSpacing.x;
-    const float half_clip_extend_x = ImFloor(ImMax(window->WindowPadding.x * 0.5f, window->WindowBorderSize));
-    const float max_1 = window->WorkRect.Max.x + column_padding - ImMax(column_padding - window->WindowPadding.x, 0.0f);
-    const float max_2 = window->WorkRect.Max.x + half_clip_extend_x;
-    columns->OffMinX = window->DC.Indent.x - column_padding + ImMax(column_padding - window->WindowPadding.x, 0.0f);
-    columns->OffMaxX = ImMax(ImMin(max_1, max_2) - window->Pos.x, columns->OffMinX + 1.0f);
-    columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y;
-
-    // Clear data if columns count changed
-    if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1)
-        columns->Columns.resize(0);
-
-    // Initialize default widths
-    columns->IsFirstFrame = (columns->Columns.Size == 0);
-    if (columns->Columns.Size == 0)
-    {
-        columns->Columns.reserve(columns_count + 1);
-        for (int n = 0; n < columns_count + 1; n++)
-        {
-            ImGuiColumnData column;
-            column.OffsetNorm = n / (float)columns_count;
-            columns->Columns.push_back(column);
-        }
-    }
-
-    for (int n = 0; n < columns_count; n++)
-    {
-        // Compute clipping rectangle
-        ImGuiColumnData* column = &columns->Columns[n];
-        float clip_x1 = IM_ROUND(window->Pos.x + GetColumnOffset(n));
-        float clip_x2 = IM_ROUND(window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
-        column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
-        column->ClipRect.ClipWith(window->ClipRect);
-    }
-
-    if (columns->Count > 1)
-    {
-        columns->Splitter.Split(window->DrawList, 1 + columns->Count);
-        columns->Splitter.SetCurrentChannel(window->DrawList, 1);
-        PushColumnClipRect(0);
-    }
-
-    // We don't generally store Indent.x inside ColumnsOffset because it may be manipulated by the user.
-    float offset_0 = GetColumnOffset(columns->Current);
-    float offset_1 = GetColumnOffset(columns->Current + 1);
-    float width = offset_1 - offset_0;
-    PushItemWidth(width * 0.65f);
-    window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
-    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-    window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
-}
-
-void ImGui::NextColumn()
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    if (window->SkipItems || window->DC.CurrentColumns == NULL)
-        return;
-
-    ImGuiContext& g = *GImGui;
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-
-    if (columns->Count == 1)
-    {
-        window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-        IM_ASSERT(columns->Current == 0);
-        return;
-    }
-    PopItemWidth();
-    PopClipRect();
-
-    const float column_padding = g.Style.ItemSpacing.x;
-    columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
-    if (++columns->Current < columns->Count)
-    {
-        // Columns 1+ ignore IndentX (by canceling it out)
-        // FIXME-COLUMNS: Unnecessary, could be locked?
-        window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + column_padding;
-        columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
-    }
-    else
-    {
-        // New row/line
-        // Column 0 honor IndentX
-        window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
-        columns->Splitter.SetCurrentChannel(window->DrawList, 1);
-        columns->Current = 0;
-        columns->LineMinY = columns->LineMaxY;
-    }
-    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-    window->DC.CursorPos.y = columns->LineMinY;
-    window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
-    window->DC.CurrLineTextBaseOffset = 0.0f;
-
-    PushColumnClipRect(columns->Current);     // FIXME-COLUMNS: Could it be an overwrite?
-
-    // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup.
-    float offset_0 = GetColumnOffset(columns->Current);
-    float offset_1 = GetColumnOffset(columns->Current + 1);
-    float width = offset_1 - offset_0;
-    PushItemWidth(width * 0.65f);
-    window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
-}
-
-void ImGui::EndColumns()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = GetCurrentWindow();
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    IM_ASSERT(columns != NULL);
-
-    PopItemWidth();
-    if (columns->Count > 1)
-    {
-        PopClipRect();
-        columns->Splitter.Merge(window->DrawList);
-    }
-
-    const ImGuiColumnsFlags flags = columns->Flags;
-    columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
-    window->DC.CursorPos.y = columns->LineMaxY;
-    if (!(flags & ImGuiColumnsFlags_GrowParentContentsSize))
-        window->DC.CursorMaxPos.x = columns->HostCursorMaxPosX;  // Restore cursor max pos, as columns don't grow parent
-
-    // Draw columns borders and handle resize
-    // The IsBeingResized flag ensure we preserve pre-resize columns width so back-and-forth are not lossy
-    bool is_being_resized = false;
-    if (!(flags & ImGuiColumnsFlags_NoBorder) && !window->SkipItems)
-    {
-        // We clip Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.
-        const float y1 = ImMax(columns->HostCursorPosY, window->ClipRect.Min.y);
-        const float y2 = ImMin(window->DC.CursorPos.y, window->ClipRect.Max.y);
-        int dragging_column = -1;
-        for (int n = 1; n < columns->Count; n++)
-        {
-            ImGuiColumnData* column = &columns->Columns[n];
-            float x = window->Pos.x + GetColumnOffset(n);
-            const ImGuiID column_id = columns->ID + ImGuiID(n);
-            const float column_hit_hw = COLUMNS_HIT_RECT_HALF_WIDTH;
-            const ImRect column_hit_rect(ImVec2(x - column_hit_hw, y1), ImVec2(x + column_hit_hw, y2));
-            KeepAliveID(column_id);
-            if (IsClippedEx(column_hit_rect, column_id, false))
-                continue;
-
-            bool hovered = false, held = false;
-            if (!(flags & ImGuiColumnsFlags_NoResize))
-            {
-                ButtonBehavior(column_hit_rect, column_id, &hovered, &held);
-                if (hovered || held)
-                    g.MouseCursor = ImGuiMouseCursor_ResizeEW;
-                if (held && !(column->Flags & ImGuiColumnsFlags_NoResize))
-                    dragging_column = n;
-            }
-
-            // Draw column
-            const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
-            const float xi = IM_FLOOR(x);
-            window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col);
-        }
-
-        // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
-        if (dragging_column != -1)
-        {
-            if (!columns->IsBeingResized)
-                for (int n = 0; n < columns->Count + 1; n++)
-                    columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm;
-            columns->IsBeingResized = is_being_resized = true;
-            float x = GetDraggedColumnOffset(columns, dragging_column);
-            SetColumnOffset(dragging_column, x);
-        }
-    }
-    columns->IsBeingResized = is_being_resized;
-
-    window->WorkRect = columns->HostWorkRect;
-    window->DC.CurrentColumns = NULL;
-    window->DC.ColumnsOffset.x = 0.0f;
-    window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
-}
-
-// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]
-void ImGui::Columns(int columns_count, const char* id, bool border)
-{
-    ImGuiWindow* window = GetCurrentWindow();
-    IM_ASSERT(columns_count >= 1);
-
-    ImGuiColumnsFlags flags = (border ? 0 : ImGuiColumnsFlags_NoBorder);
-    //flags |= ImGuiColumnsFlags_NoPreserveWidths; // NB: Legacy behavior
-    ImGuiColumns* columns = window->DC.CurrentColumns;
-    if (columns != NULL && columns->Count == columns_count && columns->Flags == flags)
-        return;
-
-    if (columns != NULL)
-        EndColumns();
-
-    if (columns_count != 1)
-        BeginColumns(id, columns_count, flags);
-}
-
-
-//-----------------------------------------------------------------------------
-// [SECTION] Widgets: BeginTable, EndTable, etc.
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// Typical call flow: (root level is public API):
-// - BeginTable()                               user begin into a table
-//    - BeginChild()                            - (if ScrollX/ScrollY is set)
-//    - TableBeginUpdateColumns()               - apply resize/order requests, lock columns active state, order
-// - TableSetupColumn()                         user submit columns details (optional)
-// - TableAutoHeaders() or TableHeader()        user submit a headers row (optional)
-//    - TableSortSpecsClickColumn()             - when clicked: alter sort order and sort direction
-// - TableGetSortSpecs()                        user queries updated sort specs (optional)
-// - TableNextRow() / TableNextCell()           user begin into the first row, also automatically called by TableAutoHeaders()
-//    - TableUpdateLayout()                     - called by the FIRST call to TableNextRow()!
-//      - TableUpdateDrawChannels()               - setup ImDrawList channels
-//      - TableUpdateBorders()                    - detect hovering columns for resize, ahead of contents submission
-//      - TableDrawContextMenu()                  - draw right-click context menu
-//    - TableEndCell()                          - close existing cell if not the first time
-//    - TableBeginCell()                        - enter into current cell
-// - [...]                                      user emit contents
-// - EndTable()                                 user ends the table
-//    - TableDrawBorders()                      - draw outer borders, inner vertical borders
-//    - TableDrawMergeChannels()                - merge draw channels if clipping isn't required
-//    - TableSetColumnWidth()                   - apply resizing width
-//      - TableUpdateColumnsWeightFromWidth()     - recompute columns weights (of weighted columns) from their respective width
-//      - EndChild()                              - (if ScrollX/ScrollY is set)
-//-----------------------------------------------------------------------------
-
-// Configuration
-static const float TABLE_RESIZE_SEPARATOR_HALF_THICKNESS = 4.0f;    // Extend outside inner borders.
-static const float TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER = 0.06f;   // Delay/timer before making the hover feedback (color+cursor) visible because tables/columns tends to be more cramped.
-
-// Helper
-inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags)
-{
-    // Adjust flags: set default sizing policy
-    if ((flags & ImGuiTableFlags_SizingPolicyMaskX_) == 0)
-        flags |= (flags & ImGuiTableFlags_ScrollX) ? ImGuiTableFlags_SizingPolicyFixedX : ImGuiTableFlags_SizingPolicyStretchX;
-
-    // Adjust flags: MultiSortable automatically enable Sortable
-    if (flags & ImGuiTableFlags_MultiSortable)
-        flags |= ImGuiTableFlags_Sortable;
-
-    // Adjust flags: disable saved settings if there's nothing to save
-    if ((flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Sortable)) == 0)
-        flags |= ImGuiTableFlags_NoSavedSettings;
-
-    // Adjust flags: enforce borders when resizable
-    if (flags & ImGuiTableFlags_Resizable)
-        flags |= ImGuiTableFlags_BordersVInner;
-
-    // Adjust flags: disable top rows freezing if there's no scrolling
-    // In theory we could want to assert if ScrollFreeze was set without the corresponding scroll flag, but that would hinder demos.
-    if ((flags & ImGuiTableFlags_ScrollX) == 0)
-        flags &= ~ImGuiTableFlags_ScrollFreezeColumnsMask_;
-    if ((flags & ImGuiTableFlags_ScrollY) == 0)
-        flags &= ~ImGuiTableFlags_ScrollFreezeRowsMask_;
-
-    // Adjust flags: disable NoHostExtendY if we have any scrolling going on
-    if ((flags & ImGuiTableFlags_NoHostExtendY) && (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0)
-        flags &= ~ImGuiTableFlags_NoHostExtendY;
-
-    // Adjust flags: we don't support NoClipX with (FreezeColumns > 0), we could with some work but it doesn't appear to be worth the effort
-    if (flags & ImGuiTableFlags_ScrollFreezeColumnsMask_)
-        flags &= ~ImGuiTableFlags_NoClipX;
-
-    return flags;
-}
-
-// About 'outer_size':
-//   The meaning of outer_size needs to differ slightly depending of if we are using ScrollX/ScrollY flags.
-//   With ScrollX/ScrollY: using a child window for scrolling:
-//   - outer_size.y < 0.0f  ->  bottom align
-//   - outer_size.y = 0.0f  ->  bottom align: consistent with BeginChild(), best to preserve (0,0) default arg
-//   - outer_size.y > 0.0f  ->  fixed child height
-//   Without scrolling, we output table directly in parent window:
-//   - outer_size.y < 0.0f  ->  bottom align (will auto extend, unless NoHostExtendV is set)
-//   - outer_size.y = 0.0f  ->  zero minimum height (will auto extend, unless NoHostExtendV is set)
-//   - outer_size.y > 0.0f  ->  minimum height (will auto extend, unless NoHostExtendV is set)
-// About: 'inner_width':
-//   With ScrollX:
-//   - inner_width  < 0.0f  ->  *illegal* fit in known width (right align from outer_size.x) <-- weird
-//   - inner_width  = 0.0f  ->  auto enlarge: *only* fixed size columns, which will take space they need (proportional columns becomes fixed columns) <-- desired default :(
-//   - inner_width  > 0.0f  ->  fit in known width: fixed column take space they need if possible (otherwise shrink down), proportional columns share remaining space.
-//   Without ScrollX:
-//   - inner_width  < 0.0f  ->  fit in known width (right align from outer_size.x) <-- desired default
-//   - inner_width  = 0.0f  ->  auto enlarge: will emit contents size in parent window
-//   - inner_width  > 0.0f  ->  fit in known width (bypass outer_size.x, permitted but not useful, should instead alter outer_width)
-// FIXME-TABLE: This is currently not very useful.
-// FIXME-TABLE: Replace enlarge vs fixed width by a flag.
-// Even if not really useful, we allow 'inner_scroll_width < outer_size.x' for consistency and to facilitate understanding of what the value does.
-bool    ImGui::BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
-{
-    ImGuiID id = GetID(str_id);
-    return BeginTableEx(str_id, id, columns_count, flags, outer_size, inner_width);
-}
-
-bool    ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* outer_window = GetCurrentWindow();
-    if (outer_window->SkipItems) // Consistent with other tables + beneficial side effect that assert on miscalling EndTable() will be more visible.
-        return false;
-
-    // Sanity checks
-    IM_ASSERT(columns_count > 0 && columns_count <= IMGUI_TABLE_MAX_COLUMNS && "Only 1..64 columns allowed!");
-    if (flags & ImGuiTableFlags_ScrollX)
-        IM_ASSERT(inner_width >= 0.0f);
-
-    const bool use_child_window = (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0;
-    const ImVec2 avail_size = GetContentRegionAvail();
-    ImVec2 actual_outer_size = CalcItemSize(outer_size, ImMax(avail_size.x, 1.0f), use_child_window ? ImMax(avail_size.y, 1.0f) : 0.0f);
-    ImRect outer_rect(outer_window->DC.CursorPos, outer_window->DC.CursorPos + actual_outer_size);
-
-    // If an outer size is specified ahead we will be able to early out when not visible. Exact clipping rules may evolve.
-    if (use_child_window && IsClippedEx(outer_rect, 0, false))
-    {
-        ItemSize(outer_rect);
-        return false;
-    }
-
-    flags = TableFixFlags(flags);
-    if (outer_window->Flags & ImGuiWindowFlags_NoSavedSettings)
-        flags |= ImGuiTableFlags_NoSavedSettings;
-
-    // Acquire storage for the table
-    ImGuiTable* table = g.Tables.GetOrAddByKey(id);
-    const ImGuiTableFlags table_last_flags = table->Flags;
-    const int instance_no = (table->LastFrameActive != g.FrameCount) ? 0 : table->InstanceNo + 1;
-    const ImGuiID instance_id = id + instance_no;
-    if (instance_no > 0)
-        IM_ASSERT(table->ColumnsCount == columns_count && "BeginTable(): Cannot change columns count mid-frame while preserving same ID");
-
-    // Initialize
-    table->ID = id;
-    table->Flags = flags;
-    table->InstanceNo = (ImS16)instance_no;
-    table->LastFrameActive = g.FrameCount;
-    table->OuterWindow = table->InnerWindow = outer_window;
-    table->ColumnsCount = columns_count;
-    table->ColumnsNames.Buf.resize(0);
-    table->IsInitializing = false;
-    table->IsLayoutLocked = false;
-    table->InnerWidth = inner_width;
-    table->OuterRect = outer_rect;
-    table->WorkRect = outer_rect;
-
-    if (use_child_window)
-    {
-        // Ensure no vertical scrollbar appears if we only want horizontal one, to make flag consistent (we have no other way to disable vertical scrollbar of a window while keeping the horizontal one showing)
-        ImVec2 override_content_size(FLT_MAX, FLT_MAX);
-        if ((flags & ImGuiTableFlags_ScrollX) && !(flags & ImGuiTableFlags_ScrollY))
-            override_content_size.y = FLT_MIN;
-
-        // Ensure specified width (when not specified, Stretched columns will act as if the width == OuterWidth and never lead to any scrolling)
-        // We don't handle inner_width < 0.0f, we could potentially use it to right-align based on the right side of the child window work rect,
-        // which would require knowing ahead if we are going to have decoration taking horizontal spaces (typically a vertical scrollbar).
-        if (inner_width != 0.0f)
-            override_content_size.x = inner_width;
-
-        if (override_content_size.x != FLT_MAX || override_content_size.y != FLT_MAX)
-            SetNextWindowContentSize(ImVec2(override_content_size.x != FLT_MAX ? override_content_size.x : 0.0f, override_content_size.y != FLT_MAX ? override_content_size.y : 0.0f));
-
-        // Create scrolling region (without border = zero window padding)
-        ImGuiWindowFlags child_flags = (flags & ImGuiTableFlags_ScrollX) ? ImGuiWindowFlags_HorizontalScrollbar : ImGuiWindowFlags_None;
-        BeginChildEx(name, instance_id, table->OuterRect.GetSize(), false, child_flags);
-        table->InnerWindow = g.CurrentWindow;
-        table->WorkRect = table->InnerWindow->WorkRect;
-        table->OuterRect = table->InnerWindow->Rect();
-    }
-    else
-    {
-        // WorkRect.Max will grow as we append contents.
-        PushID(instance_id);
-    }
-
-    // Backup a copy of host window members we will modify
-    ImGuiWindow* inner_window = table->InnerWindow;
-    table->HostIndentX = inner_window->DC.Indent.x;
-    table->HostClipRect = inner_window->ClipRect;
-    table->HostSkipItems = inner_window->SkipItems;
-    table->HostWorkRect = inner_window->WorkRect;
-    table->HostCursorMaxPos = inner_window->DC.CursorMaxPos;
-
-    // Borders
-    // - None               ........Content..... Pad .....Content........
-    // - VOuter             | Pad ..Content..... Pad .....Content.. Pad |       // FIXME-TABLE: Not handled properly
-    // - VInner             ........Content.. Pad | Pad ..Content........       // FIXME-TABLE: Not handled properly
-    // - VOuter+VInner      | Pad ..Content.. Pad | Pad ..Content.. Pad |
-
-    const bool has_cell_padding_x = (flags & ImGuiTableFlags_BordersVOuter) != 0;
-    table->CellPaddingX1 = has_cell_padding_x ? g.Style.CellPadding.x + 1.0f : 0.0f;
-    table->CellPaddingX2 = has_cell_padding_x ? g.Style.CellPadding.x : 0.0f;
-    table->CellPaddingY = g.Style.CellPadding.y;
-    table->CellSpacingX = has_cell_padding_x ? 0.0f : g.Style.CellPadding.x;
-
-    table->CurrentColumn = -1;
-    table->CurrentRow = -1;
-    table->RowBgColorCounter = 0;
-    table->LastRowFlags = ImGuiTableRowFlags_None;
-    table->InnerClipRect = (inner_window == outer_window) ? table->WorkRect : inner_window->ClipRect;
-    table->InnerClipRect.ClipWith(table->WorkRect);     // We need this to honor inner_width
-    table->InnerClipRect.ClipWith(table->HostClipRect);
-    table->InnerClipRect.Max.y = (flags & ImGuiTableFlags_NoHostExtendY) ? table->WorkRect.Max.y : inner_window->ClipRect.Max.y;
-    table->BackgroundClipRect = table->InnerClipRect;
-    table->RowPosY1 = table->RowPosY2 = table->WorkRect.Min.y; // This is needed somehow
-    table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
-    table->FreezeRowsRequest = (ImS8)((flags & ImGuiTableFlags_ScrollFreezeRowsMask_) >> ImGuiTableFlags_ScrollFreezeRowsShift_);
-    table->FreezeRowsCount = (inner_window->Scroll.y != 0.0f) ? table->FreezeRowsRequest : 0;
-    table->FreezeColumnsRequest = (ImS8)((flags & ImGuiTableFlags_ScrollFreezeColumnsMask_) >> ImGuiTableFlags_ScrollFreezeColumnsShift_);
-    table->FreezeColumnsCount = (inner_window->Scroll.x != 0.0f) ? table->FreezeColumnsRequest : 0;
-    table->IsFreezeRowsPassed = (table->FreezeRowsCount == 0);
-    table->DeclColumnsCount = 0;
-    table->HoveredColumnBody = -1;
-    table->HoveredColumnBorder = -1;
-    table->RightMostActiveColumn = -1;
-
-    // Using opaque colors facilitate overlapping elements of the grid
-    table->BorderColorStrong = GetColorU32(ImGuiCol_TableBorderStrong);
-    table->BorderColorLight = GetColorU32(ImGuiCol_TableBorderLight);
-    table->BorderX1 = table->InnerClipRect.Min.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : -1.0f);
-    table->BorderX2 = table->InnerClipRect.Max.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : +1.0f);
-
-    // Make table current
-    g.CurrentTableStack.push_back(ImGuiPtrOrIndex(g.Tables.GetIndex(table)));
-    g.CurrentTable = table;
-    outer_window->DC.CurrentTable = table;
-    if ((table_last_flags & ImGuiTableFlags_Reorderable) && !(flags & ImGuiTableFlags_Reorderable))
-        table->IsResetDisplayOrderRequest = true;
-
-    // Setup default columns state. Clear data if columns count changed
-    const int stored_size = table->Columns.size();
-    if (stored_size != 0 && stored_size != columns_count)
-        table->RawData.resize(0);
-    if (table->RawData.Size == 0)
-    {
-        // Allocate single buffer for our arrays
-        ImSpanAllocator<2> span_allocator;
-        span_allocator.ReserveBytes(0, columns_count * sizeof(ImGuiTableColumn));
-        span_allocator.ReserveBytes(1, columns_count * sizeof(ImS8));
-        table->RawData.resize(span_allocator.GetArenaSizeInBytes());
-        span_allocator.SetArenaBasePtr(table->RawData.Data);
-        span_allocator.GetSpan(0, &table->Columns);
-        span_allocator.GetSpan(1, &table->DisplayOrderToIndex);
-
-        for (int n = 0; n < columns_count; n++)
-        {
-            table->Columns[n] = ImGuiTableColumn();
-            table->Columns[n].DisplayOrder = table->DisplayOrderToIndex[n] = (ImS8)n;
-        }
-        table->IsInitializing = table->IsSettingsRequestLoad = table->IsSortSpecsDirty = true;
-    }
-
-    // Load settings
-    if (table->IsSettingsRequestLoad)
-        TableLoadSettings(table);
-
-    // Disable output until user calls TableNextRow() or TableNextCell() leading to the TableUpdateLayout() call..
-    // This is not strictly necessary but will reduce cases were misleading "out of table" output will be confusing to the user.
-    // Because we cannot safely assert in EndTable() when no rows have been created, this seems like our best option.
-    inner_window->SkipItems = true;
-
-    // Update/lock which columns will be Active for the frame
-    TableBeginUpdateColumns(table);
-
-    return true;
-}
-
-void ImGui::TableBeginUpdateColumns(ImGuiTable* table)
-{
-    // Handle resizing request
-    // (We process this at the first TableBegin of the frame)
-    // FIXME-TABLE: Preserve contents width _while resizing down_ until releasing.
-    // FIXME-TABLE: Contains columns if our work area doesn't allow for scrolling.
-    if (table->InstanceNo == 0)
-    {
-        if (table->ResizedColumn != -1 && table->ResizedColumnNextWidth != FLT_MAX)
-            TableSetColumnWidth(table, &table->Columns[table->ResizedColumn], table->ResizedColumnNextWidth);
-        table->LastResizedColumn = table->ResizedColumn;
-        table->ResizedColumnNextWidth = FLT_MAX;
-        table->ResizedColumn = -1;
-    }
-
-    // Handle reordering request
-    // Note: we don't clear ReorderColumn after handling the request.
-    if (table->InstanceNo == 0)
-    {
-        if (table->HeldHeaderColumn == -1 && table->ReorderColumn != -1)
-            table->ReorderColumn = -1;
-        table->HeldHeaderColumn = -1;
-        if (table->ReorderColumn != -1 && table->ReorderColumnDir != 0)
-        {
-            // We need to handle reordering across hidden columns.
-            // In the configuration below, moving C to the right of E will lead to:
-            //    ... C [D] E  --->  ... [D] E  C   (Column name/index)
-            //    ... 2  3  4        ...  2  3  4   (Display order)
-            const int reorder_dir = table->ReorderColumnDir;
-            IM_ASSERT(reorder_dir == -1 || reorder_dir == +1);
-            IM_ASSERT(table->Flags & ImGuiTableFlags_Reorderable);
-            ImGuiTableColumn* src_column = &table->Columns[table->ReorderColumn];
-            ImGuiTableColumn* dst_column = &table->Columns[(reorder_dir == -1) ? src_column->PrevActiveColumn : src_column->NextActiveColumn];
-            IM_UNUSED(dst_column);
-            const int src_order = src_column->DisplayOrder;
-            const int dst_order = dst_column->DisplayOrder;
-            src_column->DisplayOrder = (ImS8)dst_order;
-            for (int order_n = src_order + reorder_dir; order_n != dst_order + reorder_dir; order_n += reorder_dir)
-                table->Columns[table->DisplayOrderToIndex[order_n]].DisplayOrder -= (ImS8)reorder_dir;
-            IM_ASSERT(dst_column->DisplayOrder == dst_order - reorder_dir);
-
-            // Display order is stored in both columns->IndexDisplayOrder and table->DisplayOrder[], rebuild the later from the former.
-            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-                table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImS8)column_n;
-            table->ReorderColumnDir = 0;
-            table->IsSettingsDirty = true;
-        }
-    }
-
-    // Handle display order reset request
-    if (table->IsResetDisplayOrderRequest)
-    {
-        for (int n = 0; n < table->ColumnsCount; n++)
-            table->DisplayOrderToIndex[n] = table->Columns[n].DisplayOrder = (ImS8)n;
-        table->IsResetDisplayOrderRequest = false;
-        table->IsSettingsDirty = true;
-    }
-
-    // Setup and lock Active state and order
-    table->ColumnsActiveCount = 0;
-    table->IsDefaultDisplayOrder = true;
-    ImGuiTableColumn* last_active_column = NULL;
-    bool want_column_auto_fit = false;
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        const int column_n = table->DisplayOrderToIndex[order_n];
-        if (column_n != order_n)
-            table->IsDefaultDisplayOrder = false;
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        column->NameOffset = -1;
-        if (!(table->Flags & ImGuiTableFlags_Hideable) || (column->Flags & ImGuiTableColumnFlags_NoHide))
-            column->IsActiveNextFrame = true;
-        if (column->IsActive != column->IsActiveNextFrame)
-        {
-            column->IsActive = column->IsActiveNextFrame;
-            table->IsSettingsDirty = true;
-            if (!column->IsActive && column->SortOrder != -1)
-                table->IsSortSpecsDirty = true;
-        }
-        if (column->SortOrder > 0 && !(table->Flags & ImGuiTableFlags_MultiSortable))
-            table->IsSortSpecsDirty = true;
-        if (column->AutoFitQueue != 0x00)
-            want_column_auto_fit = true;
-
-        ImU64 index_mask = (ImU64)1 << column_n;
-        ImU64 display_order_mask = (ImU64)1 << column->DisplayOrder;
-        if (column->IsActive)
-        {
-            column->PrevActiveColumn = column->NextActiveColumn = -1;
-            if (last_active_column)
-            {
-                last_active_column->NextActiveColumn = (ImS8)column_n;
-                column->PrevActiveColumn = (ImS8)table->Columns.index_from_ptr(last_active_column);
-            }
-            column->IndexWithinActiveSet = (ImS8)table->ColumnsActiveCount;
-            table->ColumnsActiveCount++;
-            table->ActiveMaskByIndex |= index_mask;
-            table->ActiveMaskByDisplayOrder |= display_order_mask;
-            last_active_column = column;
-        }
-        else
-        {
-            column->IndexWithinActiveSet = -1;
-            table->ActiveMaskByIndex &= ~index_mask;
-            table->ActiveMaskByDisplayOrder &= ~display_order_mask;
-        }
-        IM_ASSERT(column->IndexWithinActiveSet <= column->DisplayOrder);
-    }
-    table->VisibleMaskByIndex = table->ActiveMaskByIndex; // Columns will be masked out by TableUpdateLayout() when Clipped
-    table->RightMostActiveColumn = (ImS8)(last_active_column ? table->Columns.index_from_ptr(last_active_column) : -1);
-
-    // Disable child window clipping while fitting columns. This is not strictly necessary but makes it possible to avoid
-    // the column fitting to wait until the first visible frame of the child container (may or not be a good thing).
-    if (want_column_auto_fit && table->OuterWindow != table->InnerWindow)
-        table->InnerWindow->SkipItems = false;
-}
-
-void ImGui::TableUpdateDrawChannels(ImGuiTable* table)
-{
-    // Allocate draw channels.
-    // - We allocate them following the storage order instead of the display order so reordering columns won't needlessly increase overall dormant memory cost.
-    // - We isolate headers draw commands in their own channels instead of just altering clip rects. This is in order to facilitate merging of draw commands.
-    // - After crossing FreezeRowsCount, all columns see their current draw channel changed to a second set of draw channels.
-    // - We only use the dummy draw channel so we can push a null clipping rectangle into it without affecting other channels, while simplifying per-row/per-cell overhead. It will be empty and discarded when merged.
-    // Draw channel allocation (before merging):
-    // - NoClip                       --> 1+1 channels: background + foreground (same clip rect == 1 draw call)
-    // - Clip                         --> 1+N channels
-    // - FreezeRows || FreezeColumns  --> 1+N*2 (unless scrolling value is zero)
-    // - FreezeRows && FreezeColunns  --> 2+N*2 (unless scrolling value is zero)
-    const int freeze_row_multiplier = (table->FreezeRowsCount > 0) ? 2 : 1;
-    const int channels_for_row = (table->Flags & ImGuiTableFlags_NoClipX) ? 1 : table->ColumnsActiveCount;
-    const int channels_for_background = 1;
-    const int channels_for_dummy = (table->ColumnsActiveCount < table->ColumnsCount || table->VisibleMaskByIndex != table->ActiveMaskByIndex) ? +1 : 0;
-    const int channels_total = channels_for_background + (channels_for_row * freeze_row_multiplier) + channels_for_dummy;
-    table->DrawSplitter.Split(table->InnerWindow->DrawList, channels_total);
-    table->DummyDrawChannel = channels_for_dummy ? (ImS8)(channels_total - 1) : -1;
-
-    int draw_channel_current = 1;
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        if (!column->IsClipped)
-        {
-            column->DrawChannelRowsBeforeFreeze = (ImS8)(draw_channel_current);
-            column->DrawChannelRowsAfterFreeze = (ImS8)(draw_channel_current + (table->FreezeRowsCount > 0 ? channels_for_row : 0));
-            if (!(table->Flags & ImGuiTableFlags_NoClipX))
-                draw_channel_current++;
-        }
-        else
-        {
-            column->DrawChannelRowsBeforeFreeze = column->DrawChannelRowsAfterFreeze = table->DummyDrawChannel;
-        }
-        column->DrawChannelCurrent = column->DrawChannelRowsBeforeFreeze;
-    }
-}
-
-// Adjust flags: default width mode + weighted columns are not allowed when auto extending
-static ImGuiTableColumnFlags TableFixColumnFlags(ImGuiTable* table, ImGuiTableColumnFlags flags)
-{
-    // Sizing Policy
-    if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0)
-    {
-        // FIXME-TABLE: Inconsistent to promote columns to WidthAlwaysAutoResize
-        if (table->Flags & ImGuiTableFlags_SizingPolicyFixedX)
-            flags |= ((table->Flags & ImGuiTableFlags_Resizable) && !(flags & ImGuiTableColumnFlags_NoResize)) ? ImGuiTableColumnFlags_WidthFixed : ImGuiTableColumnFlags_WidthAlwaysAutoResize;
-        else
-            flags |= ImGuiTableColumnFlags_WidthStretch;
-    }
-    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_WidthMask_)); // Check that only 1 of each set is used.
-    if ((flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize))// || ((flags & ImGuiTableColumnFlags_WidthStretch) && (table->Flags & ImGuiTableFlags_SizingPolicyStretchX)))
-        flags |= ImGuiTableColumnFlags_NoResize;
-    //if ((flags & ImGuiTableColumnFlags_WidthStretch) && (table->Flags & ImGuiTableFlags_SizingPolicyFixedX))
-    //    flags = (flags & ~ImGuiTableColumnFlags_WidthMask_) | ImGuiTableColumnFlags_WidthFixed;
-
-    // Sorting
-    if ((flags & ImGuiTableColumnFlags_NoSortAscending) && (flags & ImGuiTableColumnFlags_NoSortDescending))
-        flags |= ImGuiTableColumnFlags_NoSort;
-
-    // Alignment
-    //if ((flags & ImGuiTableColumnFlags_AlignMask_) == 0)
-    //    flags |= ImGuiTableColumnFlags_AlignCenter;
-    //IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_AlignMask_)); // Check that only 1 of each set is used.
-
-    return flags;
-}
-
-static void TableFixColumnSortDirection(ImGuiTableColumn* column)
-{
-    // Handle NoSortAscending/NoSortDescending
-    if (column->SortDirection == ImGuiSortDirection_Ascending && (column->Flags & ImGuiTableColumnFlags_NoSortAscending))
-        column->SortDirection = ImGuiSortDirection_Descending;
-    else if (column->SortDirection == ImGuiSortDirection_Descending && (column->Flags & ImGuiTableColumnFlags_NoSortDescending))
-        column->SortDirection = ImGuiSortDirection_Ascending;
-}
-
-static float TableGetMinColumnWidth()
-{
-    ImGuiContext& g = *GImGui;
-    // return g.Style.ColumnsMinSpacing;
-    return g.Style.FramePadding.x * 3.0f;
-}
-
-// Layout columns for the frame
-// Runs on the first call to TableNextRow(), to give a chance for TableSetupColumn() to be called first.
-// FIXME-TABLE: Our width (and therefore our WorkRect) will be minimal in the first frame for WidthAlwaysAutoResize columns,
-// increase feedback side-effect with widgets relying on WorkRect.Max.x. Maybe provide a default distribution for WidthAlwaysAutoResize columns?
-void    ImGui::TableUpdateLayout(ImGuiTable* table)
-{
-    IM_ASSERT(table->IsLayoutLocked == false);
-
-    // Compute offset, clip rect for the frame
-    const ImRect work_rect = table->WorkRect;
-    const float padding_auto_x = table->CellPaddingX2; // Can't make auto padding larger than what WorkRect knows about so right-alignment matches.
-    const float min_column_width = TableGetMinColumnWidth();
-
-    int count_fixed = 0;
-    float width_fixed = 0.0f;
-    float total_weights = 0.0f;
-    table->LeftMostStretchedColumnDisplayOrder = -1;
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-            continue;
-        const int column_n = table->DisplayOrderToIndex[order_n];
-        ImGuiTableColumn* column = &table->Columns[column_n];
-
-        // Adjust flags: default width mode + weighted columns are not allowed when auto extending
-        // FIXME-TABLE: Clarify why we need to do this again here and not just in TableSetupColumn()
-        column->Flags = TableFixColumnFlags(table, column->FlagsIn);
-        if ((column->Flags & ImGuiTableColumnFlags_IndentMask_) == 0)
-            column->Flags |= (column_n == 0) ? ImGuiTableColumnFlags_IndentEnable : ImGuiTableColumnFlags_IndentDisable;
-
-        // We have a unusual edge case where if the user doesn't call TableGetSortSpecs() but has sorting enabled
-        // or varying sorting flags, we still want the sorting arrows to honor those flags.
-        if (table->Flags & ImGuiTableFlags_Sortable)
-            TableFixColumnSortDirection(column);
-
-        if (column->Flags & (ImGuiTableColumnFlags_WidthAlwaysAutoResize | ImGuiTableColumnFlags_WidthFixed))
-        {
-            // Latch initial size for fixed columns
-            count_fixed += 1;
-            const bool init_size = (column->AutoFitQueue != 0x00) || (column->Flags & ImGuiTableColumnFlags_WidthAlwaysAutoResize);
-            if (init_size)
-            {
-                // Combine width from regular rows + width from headers unless requested not to
-                float width_request = (float)ImMax(column->ContentWidthRowsFrozen, column->ContentWidthRowsUnfrozen);
-                if (!(table->Flags & ImGuiTableFlags_NoHeadersWidth) && !(column->Flags & ImGuiTableColumnFlags_NoHeaderWidth))
-                    width_request = ImMax(width_request, (float)column->ContentWidthHeadersDesired);
-                column->WidthRequested = ImMax(width_request + padding_auto_x, min_column_width);
-
-                // FIXME-TABLE: Increase minimum size during init frame to avoid biasing auto-fitting widgets (e.g. TextWrapped) too much.
-                // Otherwise what tends to happen is that TextWrapped would output a very large height (= first frame scrollbar display very off + clipper would skip lots of items)
-                // This is merely making the side-effect less extreme, but doesn't properly fixes it.
-                if (column->AutoFitQueue > 0x01 && table->IsInitializing)
-                    column->WidthRequested = ImMax(column->WidthRequested, min_column_width * 4.0f);
-            }
-            width_fixed += column->WidthRequested;
-        }
-        else
-        {
-            IM_ASSERT(column->Flags & ImGuiTableColumnFlags_WidthStretch);
-            const int init_size = (column->ResizeWeight < 0.0f);
-            if (init_size)
-                column->ResizeWeight = 1.0f;
-            total_weights += column->ResizeWeight;
-            if (table->LeftMostStretchedColumnDisplayOrder == -1)
-                table->LeftMostStretchedColumnDisplayOrder = (ImS8)column->DisplayOrder;
-        }
-    }
-
-    // Layout
-    // Remove -1.0f to cancel out the +1.0f we are doing in EndTable() to make last column line visible
-    const float width_spacings = table->CellSpacingX * (table->ColumnsActiveCount - 1);
-    float width_avail;
-    if ((table->Flags & ImGuiTableFlags_ScrollX) && (table->InnerWidth == 0.0f))
-        width_avail = table->InnerClipRect.GetWidth() - width_spacings - 1.0f;
-    else
-        width_avail = work_rect.GetWidth() - width_spacings - 1.0f;
-    const float width_avail_for_stretched_columns = width_avail - width_fixed;
-    float width_remaining_for_stretched_columns = width_avail_for_stretched_columns;
-
-    // Apply final width based on requested widths
-    // Mark some columns as not resizable
-    int count_resizable = 0;
-    table->ColumnsTotalWidth = width_spacings;
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-            continue;
-        ImGuiTableColumn* column = &table->Columns[table->DisplayOrderToIndex[order_n]];
-
-        // Allocate width for stretched/weighted columns
-        if (column->Flags & ImGuiTableColumnFlags_WidthStretch)
-        {
-            float weight_ratio = column->ResizeWeight / total_weights;
-            column->WidthRequested = IM_FLOOR(ImMax(width_avail_for_stretched_columns * weight_ratio, min_column_width) + 0.01f);
-            width_remaining_for_stretched_columns -= column->WidthRequested;
-
-            // [Resize Rule 2] Resizing from right-side of a weighted column before a fixed column froward sizing to left-side of fixed column
-            // We also need to copy the NoResize flag..
-            if (column->NextActiveColumn != -1)
-                if (ImGuiTableColumn* next_column = &table->Columns[column->NextActiveColumn])
-                    if (next_column->Flags & ImGuiTableColumnFlags_WidthFixed)
-                        column->Flags |= (next_column->Flags & ImGuiTableColumnFlags_NoDirectResize_);
-        }
-
-        // [Resize Rule 1] The right-most active column is not resizable if there is at least one Stretch column (see comments in TableResizeColumn().)
-        if (column->NextActiveColumn == -1 && table->LeftMostStretchedColumnDisplayOrder != -1)
-            column->Flags |= ImGuiTableColumnFlags_NoDirectResize_;
-
-        if (!(column->Flags & ImGuiTableColumnFlags_NoResize))
-            count_resizable++;
-
-        // Assign final width, record width in case we will need to shrink
-        column->WidthGiven = ImFloor(ImMax(column->WidthRequested, min_column_width));
-        table->ColumnsTotalWidth += column->WidthGiven;
-    }
-
-#if 0
-    const float width_excess = table->ColumnsTotalWidth - work_rect.GetWidth();
-    if ((table->Flags & ImGuiTableFlags_SizingPolicyStretchX) && width_excess > 0.0f)
-    {
-        // Shrink widths when the total does not fit
-        // FIXME-TABLE: This is working but confuses/conflicts with manual resizing.
-        // FIXME-TABLE: Policy to shrink down below below ideal/requested width if there's no room?
-        g.ShrinkWidthBuffer.resize(table->ColumnsActiveCount);
-        for (int order_n = 0, active_n = 0; order_n < table->ColumnsCount; order_n++)
-        {
-            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-                continue;
-            const int column_n = table->DisplayOrder[order_n];
-            g.ShrinkWidthBuffer[active_n].Index = column_n;
-            g.ShrinkWidthBuffer[active_n].Width = table->Columns[column_n].WidthGiven;
-            active_n++;
-        }
-        ShrinkWidths(g.ShrinkWidthBuffer.Data, g.ShrinkWidthBuffer.Size, width_excess);
-        for (int n = 0; n < g.ShrinkWidthBuffer.Size; n++)
-            table->Columns[g.ShrinkWidthBuffer.Data[n].Index].WidthGiven = ImMax(g.ShrinkWidthBuffer.Data[n].Width, min_column_size);
-        // FIXME: Need to alter table->ColumnsTotalWidth
-    }
-    else
-#endif
-
-    // Redistribute remainder width due to rounding (remainder width is < 1.0f * number of Stretch column)
-    // Using right-to-left distribution (more likely to match resizing cursor), could be adjusted depending where the mouse cursor is and/or relative weights.
-    // FIXME-TABLE: May be simpler to store floating width and floor final positions only
-    // FIXME-TABLE: Make it optional? User might prefer to preserve pixel perfect same size?
-    if (width_remaining_for_stretched_columns >= 1.0f)
-        for (int order_n = table->ColumnsCount - 1; total_weights > 0.0f && width_remaining_for_stretched_columns >= 1.0f && order_n >= 0; order_n--)
-        {
-            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-                continue;
-            ImGuiTableColumn* column = &table->Columns[table->DisplayOrderToIndex[order_n]];
-            if (!(column->Flags & ImGuiTableColumnFlags_WidthStretch))
-                continue;
-            column->WidthRequested += 1.0f;
-            column->WidthGiven += 1.0f;
-            width_remaining_for_stretched_columns -= 1.0f;
-        }
-
-    // Setup final position, offset and clipping rectangles
-    int active_n = 0;
-    float offset_x = (table->FreezeColumnsCount > 0) ? table->OuterRect.Min.x : work_rect.Min.x;
-    ImRect host_clip_rect = table->InnerClipRect;
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        const int column_n = table->DisplayOrderToIndex[order_n];
-        ImGuiTableColumn* column = &table->Columns[column_n];
-
-        if (table->FreezeColumnsCount > 0 && table->FreezeColumnsCount == active_n)
-            offset_x += work_rect.Min.x - table->OuterRect.Min.x;
-
-        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-        {
-            // Hidden column: clear a few fields and we are done with it for the remainder of the function.
-            // We set a zero-width clip rect however we pay attention to set Min.y/Max.y properly to not interfere with the clipper.
-            column->MinX = column->MaxX = offset_x;
-            column->StartXRows = column->StartXHeaders = offset_x;
-            column->WidthGiven = 0.0f;
-            column->ClipRect.Min.x = offset_x;
-            column->ClipRect.Min.y = work_rect.Min.y;
-            column->ClipRect.Max.x = offset_x;
-            column->ClipRect.Max.y = FLT_MAX;
-            column->ClipRect.ClipWithFull(host_clip_rect);
-            column->IsClipped = column->SkipItems = true;
-            continue;
-        }
-
-        float max_x = FLT_MAX;
-        if (table->Flags & ImGuiTableFlags_ScrollX)
-        {
-            // Frozen columns can't reach beyond visible width else scrolling will naturally break.
-            if (order_n < table->FreezeColumnsRequest)
-                max_x = table->InnerClipRect.Max.x - (table->FreezeColumnsRequest - order_n) * min_column_width;
-        }
-        else
-        {
-            // If horizontal scrolling if disabled, we apply a final lossless shrinking of columns in order to make sure they are all visible.
-            // Because of this we also know that all of the columns will always fit in table->WorkRect and therefore in table->InnerRect (because ScrollX is off)
-            if (!(table->Flags & ImGuiTableFlags_NoKeepColumnsVisible))
-                max_x = table->WorkRect.Max.x - (table->ColumnsActiveCount - (column->IndexWithinActiveSet + 1)) * min_column_width;
-        }
-        if (offset_x + column->WidthGiven > max_x)
-            column->WidthGiven = ImMax(max_x - offset_x, min_column_width);
-
-        column->MinX = offset_x;
-        column->MaxX = column->MinX + column->WidthGiven;
-
-        //// A one pixel padding on the right side makes clipping more noticeable and contents look less cramped.
-        column->ClipRect.Min.x = column->MinX;
-        column->ClipRect.Min.y = work_rect.Min.y;
-        column->ClipRect.Max.x = column->MaxX;// -1.0f;
-        column->ClipRect.Max.y = FLT_MAX;
-        column->ClipRect.ClipWithFull(host_clip_rect);
-
-        column->IsClipped = (column->ClipRect.Max.x <= column->ClipRect.Min.x) && (column->AutoFitQueue & 1) == 0 && (column->CannotSkipItemsQueue & 1) == 0;
-        column->SkipItems = column->IsClipped || table->HostSkipItems;
-        if (column->IsClipped)
-        {
-            // Columns with the _WidthAlwaysAutoResize sizing policy will never be updated then.
-            table->VisibleMaskByIndex &= ~((ImU64)1 << column_n);
-        }
-        else
-        {
-            // Starting cursor position
-            column->StartXRows = column->StartXHeaders = column->MinX + table->CellPaddingX1;
-
-            // Alignment
-            // FIXME-TABLE: This align based on the whole column width, not per-cell, and therefore isn't useful in many cases.
-            // (To be able to honor this we might be able to store a log of cells width, per row, for visible rows, but nav/programmatic scroll would have visible artifacts.)
-            //if (column->Flags & ImGuiTableColumnFlags_AlignRight)
-            //    column->StartXRows = ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen);
-            //else if (column->Flags & ImGuiTableColumnFlags_AlignCenter)
-            //    column->StartXRows = ImLerp(column->StartXRows, ImMax(column->StartXRows, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f);
-
-            // Reset content width variables
-            const float initial_max_pos_x = column->MinX + table->CellPaddingX1;
-            column->ContentMaxPosRowsFrozen = column->ContentMaxPosRowsUnfrozen = initial_max_pos_x;
-            column->ContentMaxPosHeadersUsed = column->ContentMaxPosHeadersDesired = initial_max_pos_x;
-        }
-
-        // Don't decrement auto-fit counters until container window got a chance to submit its items
-        if (table->HostSkipItems == false)
-        {
-            column->AutoFitQueue >>= 1;
-            column->CannotSkipItemsQueue >>= 1;
-        }
-
-        if (active_n < table->FreezeColumnsCount)
-            host_clip_rect.Min.x = ImMax(host_clip_rect.Min.x, column->MaxX + 2.0f);
-
-        offset_x += column->WidthGiven + table->CellSpacingX;
-        active_n++;
-    }
-
-    // Clear Resizable flag if none of our column are actually resizable (either via an explicit _NoResize flag, either because of using _WidthAlwaysAutoResize/_WidthStretch)
-    // This will hide the resizing option from the context menu.
-    if (count_resizable == 0 && (table->Flags & ImGuiTableFlags_Resizable))
-        table->Flags &= ~ImGuiTableFlags_Resizable;
-
-    // Allocate draw channels
-    TableUpdateDrawChannels(table);
-
-    // Borders
-    if (table->Flags & ImGuiTableFlags_Resizable)
-        TableUpdateBorders(table);
-
-    // Reset fields after we used them in TableSetupResize()
-    table->LastFirstRowHeight = 0.0f;
-    table->IsLayoutLocked = true;
-    table->IsUsingHeaders = false;
-
-    // Context menu
-    if (table->IsContextPopupOpen && table->InstanceNo == table->InstanceInteracted)
-    {
-        if (BeginPopup("##TableContextMenu"))
-        {
-            TableDrawContextMenu(table, table->ContextPopupColumn);
-            EndPopup();
-        }
-        else
-        {
-            table->IsContextPopupOpen = false;
-        }
-    }
-
-    // Initial state
-    ImGuiWindow* inner_window = table->InnerWindow;
-    if (table->Flags & ImGuiTableFlags_NoClipX)
-        table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 1);
-    else
-        inner_window->DrawList->PushClipRect(inner_window->ClipRect.Min, inner_window->ClipRect.Max, false);
-}
-
-// Process interaction on resizing borders. Actual size change will be applied in EndTable()
-// - Set table->HoveredColumnBorder with a short delay/timer to reduce feedback noise
-// - Submit ahead of table contents and header, use ImGuiButtonFlags_AllowItemOverlap to prioritize widgets overlapping the same area.
-void    ImGui::TableUpdateBorders(ImGuiTable* table)
-{
-    ImGuiContext& g = *GImGui;
-    IM_ASSERT(table->Flags & ImGuiTableFlags_Resizable);
-
-    // At this point OuterRect height may be zero or under actual final height, so we rely on temporal coherency and use
-    // the final height from last frame. Because this is only affecting _interaction_ with columns, it is not really problematic.
-    // (whereas the actual visual will be displayed in EndTable() and using the current frame height)
-    // Actual columns highlight/render will be performed in EndTable() and not be affected.
-    const bool borders_full_height = (table->IsUsingHeaders == false) || (table->Flags & ImGuiTableFlags_BordersVFullHeight);
-    const float hit_half_width = TABLE_RESIZE_SEPARATOR_HALF_THICKNESS;
-    const float hit_y1 = table->OuterRect.Min.y;
-    const float hit_y2_full = ImMax(table->OuterRect.Max.y, hit_y1 + table->LastOuterHeight);
-    const float hit_y2 = borders_full_height ? hit_y2_full : (hit_y1 + table->LastFirstRowHeight);
-    const float mouse_x_hover_body = (g.IO.MousePos.y >= hit_y1 && g.IO.MousePos.y < hit_y2_full) ? g.IO.MousePos.x : FLT_MAX;
-
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-            continue;
-
-        const int column_n = table->DisplayOrderToIndex[order_n];
-        ImGuiTableColumn* column = &table->Columns[column_n];
-
-        // Detect hovered column:
-        // - we perform an unusually low-level check here.. not using IsMouseHoveringRect() to avoid touch padding.
-        // - we don't care about the full set of IsItemHovered() feature either.
-        if (mouse_x_hover_body >= column->MinX && mouse_x_hover_body < column->MaxX)
-            table->HoveredColumnBody = (ImS8)column_n;
-
-        if (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_))
-            continue;
-
-        ImGuiID column_id = table->ID + (table->InstanceNo * table->ColumnsCount) + column_n;
-        ImRect hit_rect(column->MaxX - hit_half_width, hit_y1, column->MaxX + hit_half_width, hit_y2);
-        //GetForegroundDrawList()->AddRect(hit_rect.Min, hit_rect.Max, IM_COL32(255, 0, 0, 100));
-        KeepAliveID(column_id);
-
-        bool hovered = false, held = false;
-        bool pressed = ButtonBehavior(hit_rect, column_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick);
-        if (pressed && IsMouseDoubleClicked(0) && !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
-        {
-            // FIXME-TABLE: Double-clicking on column edge could auto-fit weighted column?
-            TableSetColumnAutofit(table, column_n);
-            ClearActiveID();
-            held = hovered = false;
-        }
-        if (held)
-        {
-            table->ResizedColumn = (ImS8)column_n;
-            table->InstanceInteracted = table->InstanceNo;
-        }
-        if ((hovered && g.HoveredIdTimer > TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER) || held)
-        {
-            table->HoveredColumnBorder = (ImS8)column_n;
-            SetMouseCursor(ImGuiMouseCursor_ResizeEW);
-        }
-    }
-}
-
-void    ImGui::EndTable()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL && "Only call EndTable() if BeginTable() returns true!");
-
-    // This assert would be very useful to catch a common error... unfortunately it would probably trigger in some cases,
-    // and for consistency user may sometimes output empty tables (and still benefit from e.g. outer border)
-    //IM_ASSERT(table->IsLayoutLocked && "Table unused: never called TableNextRow(), is that the intent?");
-
-    // If the user never got to call TableNextRow() or TableNextCell(), we call layout ourselves to ensure all our
-    // code paths are consistent (instead of just hoping that TableBegin/TableEnd will work), get borders drawn, etc.
-    if (!table->IsLayoutLocked)
-        TableUpdateLayout(table);
-
-    const ImGuiTableFlags flags = table->Flags;
-    ImGuiWindow* inner_window = table->InnerWindow;
-    ImGuiWindow* outer_window = table->OuterWindow;
-    IM_ASSERT(inner_window == g.CurrentWindow);
-    IM_ASSERT(outer_window == inner_window || outer_window == inner_window->ParentWindow);
-
-    if (table->IsInsideRow)
-        TableEndRow(table);
-
-    // Finalize table height
-    inner_window->SkipItems = table->HostSkipItems;
-    inner_window->DC.CursorMaxPos = table->HostCursorMaxPos;
-    if (inner_window != outer_window)
-    {
-        table->OuterRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->Pos.y + inner_window->Size.y);
-        inner_window->DC.CursorMaxPos.y = table->RowPosY2;
-    }
-    else if (!(flags & ImGuiTableFlags_NoHostExtendY))
-    {
-        table->OuterRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->DC.CursorPos.y);
-        inner_window->DC.CursorMaxPos.y = table->RowPosY2;
-    }
-    table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y);
-    table->LastOuterHeight = table->OuterRect.GetHeight();
-
-    // Store content width reference for each column
-    float max_pos_x = inner_window->DC.CursorMaxPos.x;
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-
-        // Store content width (for both Headers and Rows)
-        //float ref_x = column->MinX;
-        float ref_x_rows = column->StartXRows - table->CellPaddingX1;
-        float ref_x_headers = column->StartXHeaders - table->CellPaddingX1;
-        column->ContentWidthRowsFrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsFrozen - ref_x_rows);
-        column->ContentWidthRowsUnfrozen = (ImS16)ImMax(0.0f, column->ContentMaxPosRowsUnfrozen - ref_x_rows);
-        column->ContentWidthHeadersUsed = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersUsed - ref_x_headers);
-        column->ContentWidthHeadersDesired = (ImS16)ImMax(0.0f, column->ContentMaxPosHeadersDesired - ref_x_headers);
-
-        if (table->ActiveMaskByIndex & ((ImU64)1 << column_n))
-            max_pos_x = ImMax(max_pos_x, column->MaxX);
-    }
-
-    // Add an extra 1 pixel so we can see the last column vertical line if it lies on the right-most edge.
-    inner_window->DC.CursorMaxPos.x = max_pos_x + 1;
-
-    if (!(flags & ImGuiTableFlags_NoClipX))
-        inner_window->DrawList->PopClipRect();
-    inner_window->ClipRect = inner_window->DrawList->_ClipRectStack.back();
-
-    // Draw borders
-    if ((flags & ImGuiTableFlags_Borders) != 0)
-        TableDrawBorders(table);
-
-    // Flatten channels and merge draw calls
-    table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 0);
-    TableDrawMergeChannels(table);
-
-    // When releasing a column being resized, scroll to keep the resulting column in sight
-    const float min_column_width = TableGetMinColumnWidth();
-    if (!(table->Flags & ImGuiTableFlags_ScrollX) && inner_window != outer_window)
-    {
-        inner_window->Scroll.x = 0.0f;
-    }
-    else if (table->LastResizedColumn != -1 && table->ResizedColumn == -1 && inner_window->ScrollbarX && table->InstanceInteracted == table->InstanceNo)
-    {
-        ImGuiTableColumn* column = &table->Columns[table->LastResizedColumn];
-        if (column->MaxX < table->InnerClipRect.Min.x)
-            SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x - min_column_width, 1.0f);
-        else if (column->MaxX > table->InnerClipRect.Max.x)
-            SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x + min_column_width, 1.0f);
-    }
-
-    // Apply resizing/dragging at the end of the frame
-    if (table->ResizedColumn != -1)
-    {
-        ImGuiTableColumn* column = &table->Columns[table->ResizedColumn];
-        const float new_x2 = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + TABLE_RESIZE_SEPARATOR_HALF_THICKNESS);
-        const float new_width = ImFloor(new_x2 - column->MinX);
-        table->ResizedColumnNextWidth = new_width;
-    }
-
-    // Layout in outer window
-    inner_window->WorkRect = table->HostWorkRect;
-    inner_window->SkipItems = table->HostSkipItems;
-    outer_window->DC.CursorPos = table->OuterRect.Min;
-    outer_window->DC.ColumnsOffset.x = 0.0f;
-    if (inner_window != outer_window)
-    {
-        // Override EndChild's ItemSize with our own to enable auto-resize on the X axis when possible
-        float backup_outer_cursor_pos_x = outer_window->DC.CursorPos.x;
-        EndChild();
-        outer_window->DC.CursorMaxPos.x = backup_outer_cursor_pos_x + table->ColumnsTotalWidth + 1.0f + inner_window->ScrollbarSizes.x;
-    }
-    else
-    {
-        PopID();
-        ImVec2 item_size = table->OuterRect.GetSize();
-        item_size.x = table->ColumnsTotalWidth;
-        ItemSize(item_size);
-    }
-
-    // Save settings
-    if (table->IsSettingsDirty)
-        TableSaveSettings(table);
-
-    // Clear or restore current table, if any
-    IM_ASSERT(g.CurrentWindow == outer_window);
-    IM_ASSERT(g.CurrentTable == table);
-    outer_window->DC.CurrentTable = NULL;
-    g.CurrentTableStack.pop_back();
-    g.CurrentTable = g.CurrentTableStack.Size ? g.Tables.GetByIndex(g.CurrentTableStack.back().Index) : NULL;
-}
-
-// FIXME-TABLE: This is a mess, need to redesign how we render borders.
-void ImGui::TableDrawBorders(ImGuiTable* table)
-{
-    ImGuiWindow* inner_window = table->InnerWindow;
-    ImGuiWindow* outer_window = table->OuterWindow;
-    table->DrawSplitter.SetCurrentChannel(inner_window->DrawList, 0);
-    if (inner_window->Hidden || !table->HostClipRect.Overlaps(table->InnerClipRect))
-        return;
-    ImDrawList* inner_drawlist = inner_window->DrawList;
-    ImDrawList* outer_drawlist = outer_window->DrawList;
-
-    // Draw inner border and resizing feedback
-    const float draw_y1 = table->OuterRect.Min.y;
-    float draw_y2_base = (table->FreezeRowsCount >= 1 ? table->OuterRect.Min.y : table->WorkRect.Min.y) + table->LastFirstRowHeight;
-    float draw_y2_full = table->OuterRect.Max.y;
-    ImU32 border_base_col;
-    if (!table->IsUsingHeaders || (table->Flags & ImGuiTableFlags_BordersVFullHeight))
-    {
-        draw_y2_base = draw_y2_full;
-        border_base_col = table->BorderColorLight;
-    }
-    else
-    {
-        border_base_col = table->BorderColorStrong;
-    }
-
-    if ((table->Flags & ImGuiTableFlags_BordersVOuter) && (table->InnerWindow == table->OuterWindow))
-        inner_drawlist->AddLine(ImVec2(table->OuterRect.Min.x, draw_y1), ImVec2(table->OuterRect.Min.x, draw_y2_base), border_base_col, 1.0f);
-
-    if (table->Flags & ImGuiTableFlags_BordersVInner)
-    {
-        for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-        {
-            if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-                continue;
-
-            const int column_n = table->DisplayOrderToIndex[order_n];
-            ImGuiTableColumn* column = &table->Columns[column_n];
-            const bool is_hovered = (table->HoveredColumnBorder == column_n);
-            const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceNo);
-            const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0;
-            bool draw_right_border = (column->MaxX <= table->InnerClipRect.Max.x) || (is_resized || is_hovered);
-            if (column->NextActiveColumn == -1 && !is_resizable)
-                draw_right_border = false;
-            if (draw_right_border && column->MaxX > column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size..
-            {
-                // Draw in outer window so right-most column won't be clipped
-                // Always draw full height border when:
-                // - not using headers
-                // - user specify ImGuiTableFlags_BordersFullHeight
-                // - being interacted with
-                // - on the delimitation of frozen column scrolling
-                const ImU32 col = is_resized ? GetColorU32(ImGuiCol_SeparatorActive) : is_hovered ? GetColorU32(ImGuiCol_SeparatorHovered) : border_base_col;
-                float draw_y2 = draw_y2_base;
-                if (is_hovered || is_resized || (table->FreezeColumnsCount != -1 && table->FreezeColumnsCount == order_n + 1))
-                    draw_y2 = draw_y2_full;
-                inner_drawlist->AddLine(ImVec2(column->MaxX, draw_y1), ImVec2(column->MaxX, draw_y2), col, 1.0f);
-            }
-        }
-    }
-
-    // Draw outer border
-    if (table->Flags & ImGuiTableFlags_BordersOuter)
-    {
-        // Display outer border offset by 1 which is a simple way to display it without adding an extra draw call
-        // (Without the offset, in outer_window it would be rendered behind cells, because child windows are above their parent.
-        // In inner_window, it won't reach out over scrollbars. Another weird solution would be to display part of it in inner window,
-        // and the part that's over scrollbars in the outer window..)
-        // Either solution currently won't allow us to use a larger border size: the border would clipped.
-        ImRect outer_border = table->OuterRect;
-        const ImU32 outer_col = table->BorderColorStrong;
-        if (inner_window != outer_window)
-            outer_border.Expand(1.0f);
-        if ((table->Flags & ImGuiTableFlags_BordersOuter) == ImGuiTableFlags_BordersOuter)
-            outer_drawlist->AddRect(outer_border.Min, outer_border.Max, outer_col);
-        else if (table->Flags & ImGuiTableFlags_BordersVOuter)
-        {
-            outer_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Min.x, outer_border.Max.y), outer_col);
-            outer_drawlist->AddLine(ImVec2(outer_border.Max.x, outer_border.Min.y), outer_border.Max, outer_col);
-        }
-        else if (table->Flags & ImGuiTableFlags_BordersHOuter)
-        {
-            outer_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Max.x, outer_border.Min.y), outer_col);
-            outer_drawlist->AddLine(ImVec2(outer_border.Min.x, outer_border.Max.y), outer_border.Max, outer_col);
-        }
-    }
-    if ((table->Flags & ImGuiTableFlags_BordersHInner) && table->RowPosY2 < table->OuterRect.Max.y)
-    {
-        // Draw bottom-most row border
-        const float border_y = table->RowPosY2;
-        if (border_y >= table->BackgroundClipRect.Min.y && border_y < table->BackgroundClipRect.Max.y)
-            inner_drawlist->AddLine(ImVec2(table->BorderX1, border_y), ImVec2(table->BorderX2, border_y), table->BorderColorLight);
-    }
-}
-
-static void TableUpdateColumnsWeightFromWidth(ImGuiTable* table)
-{
-    IM_ASSERT(table->LeftMostStretchedColumnDisplayOrder != -1);
-
-    // Measure existing quantity
-    float visible_weight = 0.0f;
-    float visible_width = 0.0f;
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        if (!column->IsActive || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
-            continue;
-        visible_weight += column->ResizeWeight;
-        visible_width += column->WidthRequested;
-    }
-    IM_ASSERT(visible_weight > 0.0f && visible_width > 0.0f);
-
-    // Apply new weights
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        if (!column->IsActive || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
-            continue;
-        column->ResizeWeight = (column->WidthRequested + 0.0f) / visible_width;
-    }
-}
-
-// Public wrapper
-void ImGui::TableSetColumnWidth(int column_n, float width)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL);
-    IM_ASSERT(table->IsLayoutLocked == false);
-    IM_ASSERT(column_n >= 0 && column_n < table->ColumnsCount);
-    TableSetColumnWidth(table, &table->Columns[column_n], width);
-}
-
-// [Internal]
-void ImGui::TableSetColumnWidth(ImGuiTable* table, ImGuiTableColumn* column_0, float column_0_width)
-{
-    // Constraints
-    float min_width = TableGetMinColumnWidth();
-    float max_width_0 = FLT_MAX;
-    if (!(table->Flags & ImGuiTableFlags_ScrollX))
-        max_width_0 = (table->WorkRect.Max.x - column_0->MinX) - (table->ColumnsActiveCount - (column_0->IndexWithinActiveSet + 1)) * min_width;
-    column_0_width = ImClamp(column_0_width, min_width, max_width_0);
-
-    // Compare both requested and actual given width to avoid overwriting requested width when column is stuck (minimum size, bounded)
-    if (column_0->WidthGiven == column_0_width || column_0->WidthRequested == column_0_width)
-        return;
-
-    ImGuiTableColumn* column_1 = (column_0->NextActiveColumn != -1) ? &table->Columns[column_0->NextActiveColumn] : NULL;
-
-    // In this surprisingly not simple because of how we support mixing Fixed and Stretch columns.
-    // When forwarding resize from Wn| to Fn+1| we need to be considerate of the _NoResize flag on Fn+1.
-    // FIXME-TABLE: Find a way to rewrite all of this so interactions feel more consistent for the user.
-    // Scenarios:
-    // - F1 F2 F3  resize from F1| or F2|   --> ok: alter ->WidthRequested of Fixed column. Subsequent columns will be offset.
-    // - F1 F2 F3  resize from F3|          --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered.
-    // - F1 F2 W3  resize from F1| or F2|   --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered, but it doesn't make much sense as the Weighted column will always be minimal size.
-    // - F1 F2 W3  resize from W3|          --> ok: no-op (disabled by Resize Rule 1)
-    // - W1 W2 W3  resize from W1| or W2|   --> FIXME
-    // - W1 W2 W3  resize from W3|          --> ok: no-op (disabled by Resize Rule 1)
-    // - W1 F2 F3  resize from F3|          --> ok: no-op (disabled by Resize Rule 1)
-    // - W1 F2     resize from F2|          --> ok: no-op (disabled by Resize Rule 1)
-    // - W1 W2 F3  resize from W1| or W2|   --> ok
-    // - W1 F2 W3  resize from W1| or F2|   --> FIXME
-    // - F1 W2 F3  resize from W2|          --> ok
-    // - W1 F2 F3  resize from W1|          --> ok: equivalent to resizing |F2. F3 will not move. (forwarded by Resize Rule 2)
-    // - W1 F2 F3  resize from F2|          --> FIXME should resize F2, F3 and not have effect on W1 (Stretch columns are _before_ the Fixed column).
-
-    // Rules:
-    // - [Resize Rule 1] Can't resize from right of right-most visible column if there is any Stretch column. Implemented in TableUpdateLayout().
-    // - [Resize Rule 2] Resizing from right-side of a Stretch column before a fixed column froward sizing to left-side of fixed column.
-    // - [Resize Rule 3] If we are are followed by a fixed column and we have a Stretch column before, we need to ensure that our left border won't move.
-
-    if (column_0->Flags & ImGuiTableColumnFlags_WidthFixed)
-    {
-        // [Resize Rule 3] If we are are followed by a fixed column and we have a Stretch column before, we need to
-        // ensure that our left border won't move, which we can do by making sure column_a/column_b resizes cancels each others.
-        if (column_1 && (column_1->Flags & ImGuiTableColumnFlags_WidthFixed))
-            if (table->LeftMostStretchedColumnDisplayOrder != -1 && table->LeftMostStretchedColumnDisplayOrder < column_0->DisplayOrder)
-            {
-                // (old_a + old_b == new_a + new_b) --> (new_a == old_a + old_b - new_b)
-                float column_1_width = ImMax(column_1->WidthRequested - (column_0_width - column_0->WidthRequested), min_width);
-                column_0_width = column_0->WidthRequested + column_1->WidthRequested - column_1_width;
-                column_1->WidthRequested = column_1_width;
-            }
-
-        // Apply
-        //IMGUI_DEBUG_LOG("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthRequested, column_0_width);
-        column_0->WidthRequested = column_0_width;
-    }
-    else if (column_0->Flags & ImGuiTableColumnFlags_WidthStretch)
-    {
-        // [Resize Rule 2]
-        if (column_1 && (column_1->Flags & ImGuiTableColumnFlags_WidthFixed))
-        {
-            float off = (column_0->WidthGiven - column_0_width);
-            float column_1_width = column_1->WidthGiven + off;
-            column_1->WidthRequested = ImMax(min_width, column_1_width);
-            return;
-        }
-
-        // (old_a + old_b == new_a + new_b) --> (new_a == old_a + old_b - new_b)
-        float column_1_width = ImMax(column_1->WidthRequested - (column_0_width - column_0->WidthRequested), min_width);
-        column_0_width = column_0->WidthRequested + column_1->WidthRequested - column_1_width;
-        column_1->WidthRequested = column_1_width;
-        column_0->WidthRequested = column_0_width;
-        TableUpdateColumnsWeightFromWidth(table);
-    }
-    table->IsSettingsDirty = true;
-}
-
-// Columns where the contents didn't stray off their local clip rectangle can be merged into a same draw command.
-// To achieve this we merge their clip rect and make them contiguous in the channel list so they can be merged.
-// So here we'll reorder the draw cmd which can be merged, by arranging them into a maximum of 4 distinct groups:
-//
-//   1 group:               2 groups:              2 groups:              4 groups:
-//   [ 0. ] no freeze       [ 0. ] row freeze      [ 01 ] col freeze      [ 01 ] row+col freeze
-//   [ .. ]  or no scroll   [ 1. ]  and v-scroll   [ .. ]  and h-scroll   [ 23 ]  and v+h-scroll
-//
-// Each column itself can use 1 channel (row freeze disabled) or 2 channels (row freeze enabled).
-// When the contents of a column didn't stray off its limit, we move its channels into the corresponding group
-// based on its position (within frozen rows/columns groups or not).
-// At the end of the operation our 1-4 groups will each have a ImDrawCmd using the same ClipRect, and they will be merged by the DrawSplitter.Merge() call.
-//
-// Column channels will not be merged into one of the 1-4 groups in the following cases:
-// - The contents stray off its clipping rectangle (we only compare the MaxX value, not the MinX value).
-//   Direct ImDrawList calls won't be taken into account by default, if you use them make sure the ImGui:: bounds matches, by e.g. calling SetCursorScreenPos().
-// - The channel uses more than one draw command itself. We drop all our merging stuff here.. we could do better but it's going to be rare.
-//
-// This function is particularly tricky to understand.. take a breath.
-void    ImGui::TableDrawMergeChannels(ImGuiTable* table)
-{
-    ImGuiContext& g = *GImGui;
-    ImDrawListSplitter* splitter = &table->DrawSplitter;
-    const bool is_frozen_v = (table->FreezeRowsCount > 0);
-    const bool is_frozen_h = (table->FreezeColumnsCount > 0);
-
-    // Track which groups we are going to attempt to merge, and which channels goes into each group.
-    struct MergeGroup
-    {
-        ImRect  ClipRect;
-        int     ChannelsCount;
-        ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> ChannelsMask;
-    };
-    int merge_group_mask = 0x00;
-    MergeGroup merge_groups[4];
-    memset(merge_groups, 0, sizeof(merge_groups));
-    bool merge_groups_all_fit_within_inner_rect = (table->Flags & ImGuiTableFlags_NoHostExtendY) == 0;
-
-    // 1. Scan channels and take note of those which can be merged
-    for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
-    {
-        if (!(table->ActiveMaskByDisplayOrder & ((ImU64)1 << order_n)))
-            continue;
-        const int column_n = table->DisplayOrderToIndex[order_n];
-        ImGuiTableColumn* column = &table->Columns[column_n];
-
-        const int merge_group_sub_count = is_frozen_v ? 2 : 1;
-        for (int merge_group_sub_n = 0; merge_group_sub_n < merge_group_sub_count; merge_group_sub_n++)
-        {
-            const int channel_no = (merge_group_sub_n == 0) ? column->DrawChannelRowsBeforeFreeze : column->DrawChannelRowsAfterFreeze;
-
-            // Don't attempt to merge if there are multiple draw calls within the column
-            ImDrawChannel* src_channel = &splitter->_Channels[channel_no];
-            if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0)
-                src_channel->_CmdBuffer.pop_back();
-            if (src_channel->_CmdBuffer.Size != 1)
-                continue;
-
-            // Find out the width of this merge group and check if it will fit in our column.
-            float width_contents;
-            if (merge_group_sub_count == 1)     // No row freeze (same as testing !is_frozen_v)
-                width_contents = ImMax(column->ContentWidthRowsUnfrozen, column->ContentWidthHeadersUsed);
-            else if (merge_group_sub_n == 0)    // Row freeze: use width before freeze
-                width_contents = ImMax(column->ContentWidthRowsFrozen, column->ContentWidthHeadersUsed);
-            else                                // Row freeze: use width after freeze
-                width_contents = column->ContentWidthRowsUnfrozen;
-            if (width_contents > column->WidthGiven && !(column->Flags & ImGuiTableColumnFlags_NoClipX))
-                continue;
-
-            const int merge_group_dst_n = (is_frozen_h && column_n < table->FreezeColumnsCount ? 0 : 2) + (is_frozen_v ? merge_group_sub_n : 1);
-            IM_ASSERT(channel_no < IMGUI_TABLE_MAX_DRAW_CHANNELS);
-            MergeGroup* merge_group = &merge_groups[merge_group_dst_n];
-            if (merge_group->ChannelsCount == 0)
-                merge_group->ClipRect = ImRect(+FLT_MAX, +FLT_MAX, -FLT_MAX, -FLT_MAX);
-            merge_group->ChannelsMask.SetBit(channel_no);
-            merge_group->ChannelsCount++;
-            merge_group->ClipRect.Add(src_channel->_CmdBuffer[0].ClipRect);
-            merge_group_mask |= (1 << merge_group_dst_n);
-
-            // If we end with a single group and hosted by the outer window, we'll attempt to merge our draw command with
-            // the existing outer window command. But we can only do so if our columns all fit within the expected clip rect,
-            // otherwise clipping will be incorrect when ScrollX is disabled.
-            // FIXME-TABLE FIXME-WORKRECT: We are wasting a merge opportunity on tables without scrolling if column don't fit within host clip rect, solely because of the half-padding difference between window->WorkRect and window->InnerClipRect
-
-            // 2019/10/22: (1) This is breaking table_2_draw_calls but I cannot seem to repro what it is attempting to fix...
-            // cf git fce2e8dc "Fixed issue with clipping when outerwindow==innerwindow / support ScrollH without ScrollV."
-            // 2019/10/22: (2) Clamping code in TableUpdateLayout() seemingly made this not necessary...
-#if 0
-            if (column->MinX < table->InnerClipRect.Min.x || column->MaxX > table->InnerClipRect.Max.x)
-                merge_groups_all_fit_within_inner_rect = false;
-#endif
-        }
-
-        // Invalidate current draw channel (we don't clear DrawChannelBeforeRowFreeze/DrawChannelAfterRowFreeze solely to facilitate debugging)
-        column->DrawChannelCurrent = -1;
-    }
-
-    // 2. Rewrite channel list in our preferred order
-    if (merge_group_mask != 0)
-    {
-        // Use shared temporary storage so the allocation gets amortized
-        g.DrawChannelsTempMergeBuffer.resize(splitter->_Count - 1);
-        ImDrawChannel* dst_tmp = g.DrawChannelsTempMergeBuffer.Data;
-        ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> remaining_mask;
-        remaining_mask.ClearBits();
-        remaining_mask.SetBitRange(1, splitter->_Count - 1); // Background channel 0 not part of the merge (see channel allocation in TableUpdateDrawChannels)
-        int remaining_count = splitter->_Count - 1;
-        const bool may_extend_clip_rect_to_host_rect = ImIsPowerOfTwo(merge_group_mask);
-        for (int merge_group_n = 0; merge_group_n < 4; merge_group_n++)
-            if (int merge_channels_count = merge_groups[merge_group_n].ChannelsCount)
-            {
-                MergeGroup* merge_group = &merge_groups[merge_group_n];
-                ImRect merge_clip_rect = merge_groups[merge_group_n].ClipRect;
-                if (may_extend_clip_rect_to_host_rect)
-                {
-                    //GetOverlayDrawList()->AddRect(table->HostClipRect.Min, table->HostClipRect.Max, IM_COL32(255, 0, 0, 200), 0.0f, ~0, 3.0f);
-                    //GetOverlayDrawList()->AddRect(table->InnerClipRect.Min, table->InnerClipRect.Max, IM_COL32(0, 255, 0, 200), 0.0f, ~0, 1.0f);
-                    //GetOverlayDrawList()->AddRect(merge_clip_rect.Min, merge_clip_rect.Max, IM_COL32(255, 0, 0, 200), 0.0f, ~0, 2.0f);
-                    merge_clip_rect.Add(merge_groups_all_fit_within_inner_rect ? table->HostClipRect : table->InnerClipRect);
-                    //GetOverlayDrawList()->AddRect(merge_clip_rect.Min, merge_clip_rect.Max, IM_COL32(0, 255, 0, 200));
-                }
-                remaining_count -= merge_group->ChannelsCount;
-                for (int n = 0; n < IM_ARRAYSIZE(remaining_mask.Storage); n++)
-                    remaining_mask.Storage[n] &= ~merge_group->ChannelsMask.Storage[n];
-                for (int n = 0; n < splitter->_Count && merge_channels_count != 0; n++)
-                {
-                    // Copy + overwrite new clip rect
-                    if (!merge_group->ChannelsMask.TestBit(n))
-                        continue;
-                    merge_group->ChannelsMask.ClearBit(n);
-                    merge_channels_count--;
-
-                    ImDrawChannel* channel = &splitter->_Channels[n];
-                    IM_ASSERT(channel->_CmdBuffer.Size == 1 && merge_clip_rect.Contains(ImRect(channel->_CmdBuffer[0].ClipRect)));
-                    channel->_CmdBuffer[0].ClipRect = merge_clip_rect.ToVec4();
-                    memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
-                }
-            }
-
-        // Append unmergeable channels that we didn't reorder at the end of the list
-        for (int n = 0; n < splitter->_Count && remaining_count != 0; n++)
-        {
-            if (!remaining_mask.TestBit(n))
-                continue;
-            ImDrawChannel* channel = &splitter->_Channels[n];
-            memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
-            remaining_count--;
-        }
-        IM_ASSERT(dst_tmp == g.DrawChannelsTempMergeBuffer.Data + g.DrawChannelsTempMergeBuffer.Size);
-        memcpy(splitter->_Channels.Data + 1, g.DrawChannelsTempMergeBuffer.Data, (splitter->_Count - 1) * sizeof(ImDrawChannel));
-    }
-
-    // 3. Actually merge (channels using the same clip rect will be contiguous and naturally merged)
-    splitter->Merge(table->InnerWindow->DrawList);
-}
-
-// We use a default parameter of 'init_width_or_weight == -1'
-//  ImGuiTableColumnFlags_WidthFixed,    width  <= 0 --> init width == auto
-//  ImGuiTableColumnFlags_WidthFixed,    width  >  0 --> init width == manual
-//  ImGuiTableColumnFlags_WidthStretch,  weight <  0 --> init weight == 1.0f
-//  ImGuiTableColumnFlags_WidthStretch,  weight >= 0 --> init weight == custom
-// Use a different API?
-void    ImGui::TableSetupColumn(const char* label, ImGuiTableColumnFlags flags, float init_width_or_weight, ImGuiID user_id)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL && "Need to call TableSetupColumn() after BeginTable()!");
-    IM_ASSERT(!table->IsLayoutLocked && "Need to call call TableSetupColumn() before first row!");
-    IM_ASSERT(table->DeclColumnsCount >= 0 && table->DeclColumnsCount < table->ColumnsCount && "Called TableSetupColumn() too many times!");
-
-    ImGuiTableColumn* column = &table->Columns[table->DeclColumnsCount];
-    table->DeclColumnsCount++;
-
-    // When passing a width automatically enforce WidthFixed policy (vs TableFixColumnFlags would default to WidthAlwaysAutoResize)
-    // (we write down to FlagsIn which is a little misleading, another solution would be to pass init_width_or_weight to TableFixColumnFlags)
-    if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0)
-        if ((table->Flags & ImGuiTableFlags_SizingPolicyFixedX) && (init_width_or_weight > 0.0f))
-            flags |= ImGuiTableColumnFlags_WidthFixed;
-
-    column->UserID = user_id;
-    column->FlagsIn = flags;
-    column->Flags = TableFixColumnFlags(table, column->FlagsIn);
-    flags = column->Flags;
-
-    // Initialize defaults
-    // FIXME-TABLE: We don't restore widths/weight so let's avoid using IsSettingsLoaded for now
-    if (table->IsInitializing && column->WidthRequested < 0.0f && column->ResizeWeight < 0.0f)// && !table->IsSettingsLoaded)
-    {
-        // Init width or weight
-        // Disable auto-fit if a default fixed width has been specified
-        if ((flags & ImGuiTableColumnFlags_WidthFixed) && init_width_or_weight > 0.0f)
-        {
-            column->WidthRequested = init_width_or_weight;
-            column->AutoFitQueue = 0x00;
-        }
-        if (flags & ImGuiTableColumnFlags_WidthStretch)
-        {
-            IM_ASSERT(init_width_or_weight < 0.0f || init_width_or_weight > 0.0f);
-            column->ResizeWeight = (init_width_or_weight < 0.0f ? 1.0f : init_width_or_weight);
-        }
-        else
-        {
-            column->ResizeWeight = 1.0f;
-        }
-    }
-    if (table->IsInitializing && !table->IsSettingsLoaded)
-    {
-        // Init default visibility/sort state
-        if (flags & ImGuiTableColumnFlags_DefaultHide)
-            column->IsActive = column->IsActiveNextFrame = false;
-        if (flags & ImGuiTableColumnFlags_DefaultSort)
-        {
-            column->SortOrder = 0; // Multiple columns using _DefaultSort will be reordered when building the sort specs.
-            column->SortDirection = (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
-        }
-    }
-
-    // Store name (append with zero-terminator in contiguous buffer)
-    IM_ASSERT(column->NameOffset == -1);
-    if (label != NULL)
-    {
-        column->NameOffset = (ImS16)table->ColumnsNames.size();
-        table->ColumnsNames.append(label, label + strlen(label) + 1);
-    }
-}
-
-// Starts into the first cell of a new row
-void    ImGui::TableNextRow(ImGuiTableRowFlags row_flags, float row_min_height)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-
-    if (table->CurrentRow == -1)
-        TableUpdateLayout(table);
-    else if (table->IsInsideRow)
-        TableEndRow(table);
-
-    table->LastRowFlags = table->RowFlags;
-    table->RowFlags = row_flags;
-    table->RowMinHeight = row_min_height;
-    TableBeginRow(table);
-
-    // We honor min_row_height requested by user, but cannot guarantee per-row maximum height,
-    // because that would essentially require a unique clipping rectangle per-cell.
-    table->RowPosY2 += table->CellPaddingY * 2.0f;
-    table->RowPosY2 = ImMax(table->RowPosY2, table->RowPosY1 + row_min_height);
-
-    TableBeginCell(table, 0);
-}
-
-// [Internal]
-void    ImGui::TableBeginRow(ImGuiTable* table)
-{
-    ImGuiWindow* window = table->InnerWindow;
-    IM_ASSERT(!table->IsInsideRow);
-
-    // New row
-    table->CurrentRow++;
-    table->CurrentColumn = -1;
-    table->RowBgColor = IM_COL32_DISABLE;
-    table->IsInsideRow = true;
-
-    // Begin frozen rows
-    float next_y1 = table->RowPosY2;
-    if (table->CurrentRow == 0 && table->FreezeRowsCount > 0)
-        next_y1 = window->DC.CursorPos.y = table->OuterRect.Min.y;
-
-    table->RowPosY1 = table->RowPosY2 = next_y1;
-    table->RowTextBaseline = 0.0f;
-    table->RowIndentOffsetX = window->DC.Indent.x - table->HostIndentX; // Lock indent
-    window->DC.PrevLineTextBaseOffset = 0.0f;
-    window->DC.CursorMaxPos.y = next_y1;
-
-    // Making the header BG color non-transparent will allow us to overlay it multiple times when handling smooth dragging.
-    if (table->RowFlags & ImGuiTableRowFlags_Headers)
-    {
-        table->RowBgColor = GetColorU32(ImGuiCol_TableHeaderBg);
-        if (table->CurrentRow == 0)
-            table->IsUsingHeaders = true;
-    }
-}
-
-// [Internal]
-void    ImGui::TableEndRow(ImGuiTable* table)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    IM_ASSERT(window == table->InnerWindow);
-    IM_ASSERT(table->IsInsideRow);
-
-    TableEndCell(table);
-
-    // Position cursor at the bottom of our row so it can be used for e.g. clipping calculation.
-    // However it is likely that the next call to TableBeginCell() will reposition the cursor to take account of vertical padding.
-    window->DC.CursorPos.y = table->RowPosY2;
-
-    // Row background fill
-    const float bg_y1 = table->RowPosY1;
-    const float bg_y2 = table->RowPosY2;
-
-    if (table->CurrentRow == 0)
-        table->LastFirstRowHeight = bg_y2 - bg_y1;
-
-    if (table->CurrentRow >= 0 && bg_y2 >= table->InnerClipRect.Min.y && bg_y1 <= table->InnerClipRect.Max.y)
-    {
-        // Decide of background color for the row
-        ImU32 bg_col = 0;
-        if (table->RowBgColor != IM_COL32_DISABLE)
-            bg_col = table->RowBgColor;
-        else if (table->Flags & ImGuiTableFlags_RowBg)
-            bg_col = GetColorU32((table->RowBgColorCounter & 1) ? ImGuiCol_TableRowBgAlt : ImGuiCol_TableRowBg);
-
-        // Decide of top border color
-        ImU32 border_col = 0;
-        if (table->CurrentRow != 0 || table->InnerWindow == table->OuterWindow)
-        {
-            if (table->Flags & ImGuiTableFlags_BordersHInner)
-            {
-                //if (table->CurrentRow == 0 && table->InnerWindow == table->OuterWindow)
-                //    border_col = table->BorderOuterColor;
-                //else
-                if (table->CurrentRow > 0)// && !(table->LastRowFlags & ImGuiTableRowFlags_Headers))
-                    border_col = (table->LastRowFlags & ImGuiTableRowFlags_Headers) ? table->BorderColorStrong : table->BorderColorLight;
-            }
-            else
-            {
-                //if (table->RowFlags & ImGuiTableRowFlags_Headers)
-                //    border_col = table->BorderOuterColor;
-            }
-        }
-
-        if (bg_col != 0 || border_col != 0)
-            table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
-
-        // Draw background
-        // We soft/cpu clip this so all backgrounds and borders can share the same clipping rectangle
-        if (bg_col)
-        {
-            ImRect bg_rect(table->WorkRect.Min.x, bg_y1, table->WorkRect.Max.x, bg_y2);
-            bg_rect.ClipWith(table->BackgroundClipRect);
-            if (bg_rect.Min.y < bg_rect.Max.y)
-                window->DrawList->AddRectFilledMultiColor(bg_rect.Min, bg_rect.Max, bg_col, bg_col, bg_col, bg_col);
-        }
-
-        // Draw top border
-        const float border_y = bg_y1;
-        if (border_col && border_y >= table->BackgroundClipRect.Min.y && border_y < table->BackgroundClipRect.Max.y)
-            window->DrawList->AddLine(ImVec2(table->BorderX1, border_y), ImVec2(table->BorderX2, border_y), border_col);
-    }
-
-    const bool unfreeze_rows = (table->CurrentRow + 1 == table->FreezeRowsCount && table->FreezeRowsCount > 0);
-
-    // Draw bottom border (always strong)
-    const bool draw_separating_border = unfreeze_rows;// || (table->RowFlags & ImGuiTableRowFlags_Headers);
-    if (draw_separating_border)
-        if (bg_y2 >= table->BackgroundClipRect.Min.y && bg_y2 < table->BackgroundClipRect.Max.y)
-            window->DrawList->AddLine(ImVec2(table->BorderX1, bg_y2), ImVec2(table->BorderX2, bg_y2), table->BorderColorStrong);
-
-    // End frozen rows (when we are past the last frozen row line, teleport cursor and alter clipping rectangle)
-    // We need to do that in TableEndRow() instead of TableBeginRow() so the list clipper can mark end of row and get the new cursor position.
-    if (unfreeze_rows)
-    {
-        IM_ASSERT(table->IsFreezeRowsPassed == false);
-        table->IsFreezeRowsPassed = true;
-        table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
-
-        ImRect r;
-        r.Min.x = table->InnerClipRect.Min.x;
-        r.Min.y = ImMax(table->RowPosY2 + 1, window->InnerClipRect.Min.y);
-        r.Max.x = table->InnerClipRect.Max.x;
-        r.Max.y = window->InnerClipRect.Max.y;
-        table->BackgroundClipRect = r;
-
-        float row_height = table->RowPosY2 - table->RowPosY1;
-        table->RowPosY2 = window->DC.CursorPos.y = table->WorkRect.Min.y + table->RowPosY2 - table->OuterRect.Min.y;
-        table->RowPosY1 = table->RowPosY2 - row_height;
-        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-        {
-            ImGuiTableColumn* column = &table->Columns[column_n];
-            column->DrawChannelCurrent = column->DrawChannelRowsAfterFreeze;
-            column->ClipRect.Min.y = r.Min.y;
-        }
-    }
-
-    if (!(table->RowFlags & ImGuiTableRowFlags_Headers))
-        table->RowBgColorCounter++;
-    table->IsInsideRow = false;
-}
-
-// [Internal] Called by TableNextCell()!
-// This is called very frequently, so we need to be mindful of unnecessary overhead.
-// FIXME-TABLE FIXME-OPT: Could probably shortcut some things for non-active or clipped columns.
-void    ImGui::TableBeginCell(ImGuiTable* table, int column_n)
-{
-    table->CurrentColumn = column_n;
-    ImGuiTableColumn* column = &table->Columns[column_n];
-    ImGuiWindow* window = table->InnerWindow;
-
-    // Start position is roughly ~~ CellRect.Min + CellPadding + Indent
-    float start_x = (table->RowFlags & ImGuiTableRowFlags_Headers) ? column->StartXHeaders : column->StartXRows;
-    if (column->Flags & ImGuiTableColumnFlags_IndentEnable)
-        start_x += table->RowIndentOffsetX; // ~~ += window.DC.Indent.x - table->HostIndentX, except we locked it for the row.
-
-    window->DC.CursorPos.x = start_x;
-    window->DC.CursorPos.y = table->RowPosY1 + table->CellPaddingY;
-    window->DC.CursorMaxPos.x = window->DC.CursorPos.x;
-    window->DC.ColumnsOffset.x = start_x - window->Pos.x - window->DC.Indent.x; // FIXME-WORKRECT
-    window->DC.CurrLineTextBaseOffset = table->RowTextBaseline;
-    window->DC.LastItemId = 0;
-
-    window->WorkRect.Min.y = window->DC.CursorPos.y;
-    window->WorkRect.Min.x = column->MinX + table->CellPaddingX1;
-    window->WorkRect.Max.x = column->MaxX - table->CellPaddingX2;
-
-    // To allow ImGuiListClipper to function we propagate our row height
-    if (!column->IsActive)
-        window->DC.CursorPos.y = ImMax(window->DC.CursorPos.y, table->RowPosY2);
-
-    window->SkipItems = column->SkipItems;
-    if (table->Flags & ImGuiTableFlags_NoClipX)
-    {
-        table->DrawSplitter.SetCurrentChannel(window->DrawList, 1);
-    }
-    else
-    {
-        table->DrawSplitter.SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
-        //window->ClipRect = column->ClipRect;
-        //IM_ASSERT(column->ClipRect.Max.x > column->ClipRect.Min.x && column->ClipRect.Max.y > column->ClipRect.Min.y);
-        //window->DrawList->_ClipRectStack.back() = ImVec4(column->ClipRect.Min.x, column->ClipRect.Min.y, column->ClipRect.Max.x, column->ClipRect.Max.y);
-        //window->DrawList->UpdateClipRect();
-        window->DrawList->PopClipRect();
-        window->DrawList->PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
-        //IMGUI_DEBUG_LOG("%d (%.0f,%.0f)(%.0f,%.0f)\n", column_n, column->ClipRect.Min.x, column->ClipRect.Min.y, column->ClipRect.Max.x, column->ClipRect.Max.y);
-        window->ClipRect = window->DrawList->_ClipRectStack.back();
-    }
-}
-
-// [Internal] Called by TableNextRow()/TableNextCell()!
-void    ImGui::TableEndCell(ImGuiTable* table)
-{
-    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
-    ImGuiWindow* window = table->InnerWindow;
-
-    // Report maximum position so we can infer content size per column.
-    float* p_max_pos_x;
-    if (table->RowFlags & ImGuiTableRowFlags_Headers)
-        p_max_pos_x = &column->ContentMaxPosHeadersUsed;  // Useful in case user submit contents in header row that is not a TableHeader() call
-    else
-        p_max_pos_x = table->IsFreezeRowsPassed ? &column->ContentMaxPosRowsUnfrozen : &column->ContentMaxPosRowsFrozen;
-    *p_max_pos_x = ImMax(*p_max_pos_x, window->DC.CursorMaxPos.x);
-    table->RowPosY2 = ImMax(table->RowPosY2, window->DC.CursorMaxPos.y + table->CellPaddingY);
-
-    // Propagate text baseline for the entire row
-    // FIXME-TABLE: Here we propagate text baseline from the last line of the cell.. instead of the first one.
-    table->RowTextBaseline = ImMax(table->RowTextBaseline, window->DC.PrevLineTextBaseOffset);
-}
-
-// Append into the next cell
-// FIXME-TABLE: Wrapping to next row should be optional?
-bool    ImGui::TableNextCell()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-
-    if (table->CurrentColumn != -1 && table->CurrentColumn + 1 < table->ColumnsCount)
-    {
-        TableEndCell(table);
-        TableBeginCell(table, table->CurrentColumn + 1);
-    }
-    else
-    {
-        TableNextRow();
-    }
-
-    int column_n = table->CurrentColumn;
-    return (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) != 0;
-}
-
-const char*   ImGui::TableGetColumnName(int column_n)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    if (!table)
-        return NULL;
-    if (column_n < 0)
-        column_n = table->CurrentColumn;
-    return TableGetColumnName(table, column_n);
-}
-
-bool    ImGui::TableGetColumnIsVisible(int column_n)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    if (!table)
-        return false;
-    if (column_n < 0)
-        column_n = table->CurrentColumn;
-    return (table->VisibleMaskByIndex & ((ImU64)1 << column_n)) != 0;
-}
-
-int     ImGui::TableGetColumnIndex()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    if (!table)
-        return 0;
-    return table->CurrentColumn;
-}
-
-bool    ImGui::TableSetColumnIndex(int column_idx)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    if (!table)
-        return false;
-
-    if (table->CurrentColumn != column_idx)
-    {
-        if (table->CurrentColumn != -1)
-            TableEndCell(table);
-        IM_ASSERT(column_idx >= 0 && table->ColumnsCount);
-        TableBeginCell(table, column_idx);
-    }
-
-    return (table->VisibleMaskByIndex & ((ImU64)1 << column_idx)) != 0;
-}
-
-// Return the cell rectangle based on currently known height.
-// Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations.
-// The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it.
-ImRect  ImGui::TableGetCellRect()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
-    return ImRect(column->MinX, table->RowPosY1, column->MaxX, table->RowPosY2);
-}
-
-const char* ImGui::TableGetColumnName(ImGuiTable* table, int column_n)
-{
-    ImGuiTableColumn* column = &table->Columns[column_n];
-    if (column->NameOffset == -1)
-        return NULL;
-    return &table->ColumnsNames.Buf[column->NameOffset];
-}
-
-void    ImGui::TableSetColumnAutofit(ImGuiTable* table, int column_n)
-{
-    // Disable clipping then auto-fit, will take 2 frames
-    // (we don't take a shortcut for unclipped columns to reduce inconsistencies when e.g. resizing multiple columns)
-    ImGuiTableColumn* column = &table->Columns[column_n];
-    column->CannotSkipItemsQueue = (1 << 0);
-    column->AutoFitQueue = (1 << 1);
-}
-
-void    ImGui::PushTableBackground()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiTable* table = g.CurrentTable;
-    table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
-    PushClipRect(table->HostClipRect.Min, table->HostClipRect.Max, false);
-}
-
-void    ImGui::PopTableBackground()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    ImGuiTable* table = g.CurrentTable;
-    ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
-    table->DrawSplitter.SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
-    PopClipRect();
-}
-
-// Output context menu into current window (generally a popup)
-// FIXME-TABLE: Ideally this should be writable by the user. Full programmatic access to that data?
-void    ImGui::TableDrawContextMenu(ImGuiTable* table, int selected_column_n)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    bool want_separator = false;
-    selected_column_n  = ImClamp(selected_column_n, -1, table->ColumnsCount - 1);
-
-    // Sizing
-    if (table->Flags & ImGuiTableFlags_Resizable)
-    {
-        if (ImGuiTableColumn* selected_column = (selected_column_n != -1) ? &table->Columns[selected_column_n] : NULL)
-        {
-            const bool can_resize = !(selected_column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_WidthStretch)) && selected_column->IsActive;
-            if (MenuItem("Size column to fit", NULL, false, can_resize))
-                TableSetColumnAutofit(table, selected_column_n);
-        }
-
-        if (MenuItem("Size all columns to fit", NULL))
-        {
-            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-            {
-                ImGuiTableColumn* column = &table->Columns[column_n];
-                if (column->IsActive)
-                    TableSetColumnAutofit(table, column_n);
-            }
-        }
-        want_separator = true;
-    }
-
-    // Ordering
-    if (table->Flags & ImGuiTableFlags_Reorderable)
-    {
-        if (MenuItem("Reset order", NULL, false, !table->IsDefaultDisplayOrder))
-            table->IsResetDisplayOrderRequest = true;
-        want_separator = true;
-    }
-
-    // Hiding / Visibility
-    if (table->Flags & ImGuiTableFlags_Hideable)
-    {
-        if (want_separator)
-            Separator();
-        want_separator = false;
-
-        PushItemFlag(ImGuiItemFlags_SelectableDontClosePopup, true);
-        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-        {
-            ImGuiTableColumn* column = &table->Columns[column_n];
-            const char* name = TableGetColumnName(table, column_n);
-            if (name == NULL)
-                name = "<Unknown>";
-
-            // Make sure we can't hide the last active column
-            bool menu_item_active = (column->Flags & ImGuiTableColumnFlags_NoHide) ? false : true;
-            if (column->IsActive && table->ColumnsActiveCount <= 1)
-                menu_item_active = false;
-            if (MenuItem(name, NULL, column->IsActive, menu_item_active))
-                column->IsActiveNextFrame = !column->IsActive;
-        }
-        PopItemFlag();
-    }
-}
-
-// This is a helper to output TableHeader() calls based on the column names declared in TableSetupColumn().
-// The intent is that advanced users willing to create customized headers would not need to use this helper and may create their own.
-// However presently this function uses too many internal structures/calls.
-void    ImGui::TableAutoHeaders()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL && "Need to call TableAutoHeaders() after BeginTable()!");
-    const int columns_count = table->ColumnsCount;
-
-    // Calculate row height (for the unlikely case that labels may be are multi-line)
-    float row_height = GetTextLineHeight();
-    for (int column_n = 0; column_n < columns_count; column_n++)
-        if (TableGetColumnIsVisible(column_n))
-            row_height = ImMax(row_height, CalcTextSize(TableGetColumnName(column_n)).y);
-    row_height += g.Style.CellPadding.y * 2.0f;
-
-    // Open row
-    TableNextRow(ImGuiTableRowFlags_Headers, row_height);
-    if (table->HostSkipItems) // Merely an optimization
-        return;
-
-    // This for loop is constructed to not make use of internal functions,
-    // as this is intended to be a base template to copy and build from.
-    int open_context_popup = INT_MAX;
-    for (int column_n = 0; column_n < columns_count; column_n++)
-    {
-        if (!TableSetColumnIndex(column_n))
-            continue;
-
-        const char* name = TableGetColumnName(column_n);
-
-        // [DEBUG] Test custom user elements
-#if 0
-        if (column_n < 2)
-        {
-            static bool b[2] = {};
-            PushID(column_n);
-            PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
-            Checkbox("##", &b[column_n]);
-            PopStyleVar();
-            PopID();
-            SameLine(0.0f, g.Style.ItemInnerSpacing.x);
-        }
-#endif
-
-        // [DEBUG]
-        //if (g.IO.KeyCtrl) { static char buf[32]; name = buf; ImGuiTableColumn* c = &table->Columns[column_n]; if (c->Flags & ImGuiTableColumnFlags_WidthStretch) ImFormatString(buf, 32, "%.3f>%.1f", c->ResizeWeight, c->WidthGiven); else ImFormatString(buf, 32, "%.1f", c->WidthGiven); }
-
-        // Push an id to allow unnamed labels (generally accidental, but let's behave nicely with them)
-        PushID(table->InstanceNo * table->ColumnsCount + column_n);
-        TableHeader(name);
-        PopID();
-
-        // We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
-        if (IsMouseReleased(1) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-            open_context_popup = column_n;
-    }
-
-    // FIXME-TABLE: This is not user-land code any more + need to explain WHY this is here!
-    window->SkipItems = table->HostSkipItems;
-
-    // Allow opening popup from the right-most section after the last column
-    // FIXME-TABLE: This is not user-land code any more... perhaps instead we should expose hovered column.
-    // and allow some sort of row-centric IsItemHovered() for full flexibility?
-    float unused_x1 = table->WorkRect.Min.x;
-    if (table->RightMostActiveColumn != -1)
-        unused_x1 = ImMax(unused_x1, table->Columns[table->RightMostActiveColumn].MaxX);
-    if (unused_x1 < table->WorkRect.Max.x)
-    {
-        // FIXME: We inherit ClipRect/SkipItem from last submitted column (active or not), let's temporarily override it.
-        // Because we don't perform any rendering here we just overwrite window->ClipRect used by logic.
-        window->ClipRect = table->InnerClipRect;
-
-        ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
-        window->DC.CursorPos = ImVec2(unused_x1, table->RowPosY1);
-        ImVec2 size = ImVec2(table->WorkRect.Max.x - window->DC.CursorPos.x, table->RowPosY2 - table->RowPosY1);
-        if (size.x > 0.0f && size.y > 0.0f)
-        {
-            InvisibleButton("##RemainingSpace", size);
-            window->DC.CursorPos.y -= g.Style.ItemSpacing.y;
-            window->DC.CursorMaxPos = backup_cursor_max_pos;    // Don't feed back into the width of the Header row
-
-            // We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
-            if (IsMouseReleased(1) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
-                open_context_popup = -1;
-        }
-
-        window->ClipRect = window->DrawList->_ClipRectStack.back();
-    }
-
-    // Open Context Menu
-    if (open_context_popup != INT_MAX)
-        if (table->Flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
-        {
-            table->IsContextPopupOpen = true;
-            table->ContextPopupColumn = (ImS8)open_context_popup;
-            table->InstanceInteracted = table->InstanceNo;
-            OpenPopup("##TableContextMenu");
-        }
-}
-
-// Emit a column header (text + optional sort order)
-// We cpu-clip text here so that all columns headers can be merged into a same draw call.
-// Note that because of how we cpu-clip and display sorting indicators, you _cannot_ use SameLine() after a TableHeader()
-// FIXME-TABLE: Should hold a selection state.
-// FIXME-TABLE: Style confusion between CellPadding.y and FramePadding.y
-void    ImGui::TableHeader(const char* label)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiWindow* window = g.CurrentWindow;
-    if (window->SkipItems)
-        return;
-
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL && "Need to call TableAutoHeaders() after BeginTable()!");
-    IM_ASSERT(table->CurrentColumn != -1);
-    const int column_n = table->CurrentColumn;
-    ImGuiTableColumn* column = &table->Columns[column_n];
-
-    // Label
-    if (label == NULL)
-        label = "";
-    const char* label_end = FindRenderedTextEnd(label);
-    ImVec2 label_size = CalcTextSize(label, label_end, true);
-    ImVec2 label_pos = window->DC.CursorPos;
-
-    // If we already got a row height, there's use that.
-    ImRect cell_r = TableGetCellRect();
-    float label_height = ImMax(label_size.y, table->RowMinHeight - g.Style.CellPadding.y * 2.0f);
-
-    //GetForegroundDrawList()->AddRect(cell_r.Min, cell_r.Max, IM_COL32(255, 0, 0, 255)); // [DEBUG]
-    ImRect work_r = cell_r;
-    work_r.Min.x = window->DC.CursorPos.x;
-    work_r.Max.y = work_r.Min.y + label_height;
-    float ellipsis_max = work_r.Max.x;
-
-    // Selectable
-    PushID(label);
-
-    // FIXME-TABLE: Fix when padding are disabled.
-    //window->DC.CursorPos.x = column->MinX + table->CellPadding.x;
-
-    // Keep header highlighted when context menu is open. (FIXME-TABLE: however we cannot assume the ID of said popup if it has been created by the user...)
-    const bool selected = (table->IsContextPopupOpen && table->ContextPopupColumn == column_n && table->InstanceInteracted == table->InstanceNo);
-    const bool pressed = Selectable("", selected, ImGuiSelectableFlags_DrawHoveredWhenHeld | ImGuiSelectableFlags_DontClosePopups, ImVec2(0.0f, label_height));
-    const bool held = IsItemActive();
-    if (held)
-        table->HeldHeaderColumn = (ImS8)column_n;
-    window->DC.CursorPos.y -= g.Style.ItemSpacing.y * 0.5f;
-
-    // Drag and drop to re-order columns.
-    // FIXME-TABLE: Scroll request while reordering a column and it lands out of the scrolling zone.
-    if (held && (table->Flags & ImGuiTableFlags_Reorderable) && IsMouseDragging(0) && !g.DragDropActive)
-    {
-        // While moving a column it will jump on the other side of the mouse, so we also test for MouseDelta.x
-        table->ReorderColumn = (ImS8)column_n;
-        table->InstanceInteracted = table->InstanceNo;
-
-        // We don't reorder: through the frozen<>unfrozen line, or through a column that is marked with ImGuiTableColumnFlags_NoReorder.
-        if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < cell_r.Min.x)
-            if (ImGuiTableColumn* prev_column = (column->PrevActiveColumn != -1) ? &table->Columns[column->PrevActiveColumn] : NULL)
-                if (!((column->Flags | prev_column->Flags) & ImGuiTableColumnFlags_NoReorder))
-                    if ((column->IndexWithinActiveSet < table->FreezeColumnsRequest) == (prev_column->IndexWithinActiveSet < table->FreezeColumnsRequest))
-                        table->ReorderColumnDir = -1;
-        if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > cell_r.Max.x)
-            if (ImGuiTableColumn* next_column = (column->NextActiveColumn != -1) ? &table->Columns[column->NextActiveColumn] : NULL)
-                if (!((column->Flags | next_column->Flags) & ImGuiTableColumnFlags_NoReorder))
-                    if ((column->IndexWithinActiveSet < table->FreezeColumnsRequest) == (next_column->IndexWithinActiveSet < table->FreezeColumnsRequest))
-                        table->ReorderColumnDir = +1;
-    }
-
-    // Sort order arrow
-    float w_arrow = 0.0f;
-    float w_sort_text = 0.0f;
-    if ((table->Flags & ImGuiTableFlags_Sortable) && !(column->Flags & ImGuiTableColumnFlags_NoSort))
-    {
-        const float ARROW_SCALE = 0.65f;
-        w_arrow = ImFloor(g.FontSize * ARROW_SCALE + g.Style.FramePadding.x);// table->CellPadding.x);
-        if (column->SortOrder != -1)
-        {
-            w_sort_text = 0.0f;
-
-            char sort_order_suf[8];
-            if (column->SortOrder > 0)
-            {
-                ImFormatString(sort_order_suf, IM_ARRAYSIZE(sort_order_suf), "%d", column->SortOrder + 1);
-                w_sort_text = g.Style.ItemInnerSpacing.x + CalcTextSize(sort_order_suf).x;
-            }
-
-            float x = ImMax(cell_r.Min.x, work_r.Max.x - w_arrow - w_sort_text);
-            ellipsis_max -= w_arrow + w_sort_text;
-
-            float y = label_pos.y;
-            ImU32 col = GetColorU32(ImGuiCol_Text);
-            if (column->SortOrder > 0)
-            {
-                PushStyleColor(ImGuiCol_Text, GetColorU32(ImGuiCol_Text, 0.70f));
-                RenderText(ImVec2(x + g.Style.ItemInnerSpacing.x, y), sort_order_suf);
-                PopStyleColor();
-                x += w_sort_text;
-            }
-            RenderArrow(window->DrawList, ImVec2(x, y), col, column->SortDirection == ImGuiSortDirection_Ascending ? ImGuiDir_Up : ImGuiDir_Down, ARROW_SCALE);
-        }
-
-        // Handle clicking on column header to adjust Sort Order
-        if (pressed && table->ReorderColumn != column_n)
-            TableSortSpecsClickColumn(table, column, g.IO.KeyShift);
-    }
-
-    // Render clipped label
-    // Clipping here ensure that in the majority of situations, all our header cells will be merged into a single draw call.
-    //window->DrawList->AddCircleFilled(ImVec2(ellipsis_max, label_pos.y), 40, IM_COL32_WHITE);
-    RenderTextEllipsis(window->DrawList, label_pos, ImVec2(ellipsis_max, label_pos.y + label_height + g.Style.FramePadding.y), ellipsis_max, ellipsis_max, label, label_end, &label_size);
-
-    // We feed our unclipped width to the column without writing on CursorMaxPos, so that column is still considering for merging.
-    // FIXME-TABLE: Clarify policies of how label width and potential decorations (arrows) fit into auto-resize of the column
-    float max_pos_x = label_pos.x + label_size.x + w_sort_text + w_arrow;
-    column->ContentMaxPosHeadersUsed = ImMax(column->ContentMaxPosHeadersUsed, work_r.Max.x);// ImMin(max_pos_x, work_r.Max.x));
-    column->ContentMaxPosHeadersDesired = ImMax(column->ContentMaxPosHeadersDesired, max_pos_x);
-
-    PopID();
-}
-
-void ImGui::TableSortSpecsClickColumn(ImGuiTable* table, ImGuiTableColumn* clicked_column, bool add_to_existing_sort_orders)
-{
-    if (!(table->Flags & ImGuiTableFlags_MultiSortable))
-        add_to_existing_sort_orders = false;
-
-    ImS8 sort_order_max = 0;
-    if (add_to_existing_sort_orders)
-        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-            sort_order_max = ImMax(sort_order_max, table->Columns[column_n].SortOrder);
-
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        if (column == clicked_column)
-        {
-            // Set new sort direction and sort order
-            // - If the PreferSortDescending flag is set, we will default to a Descending direction on the first click.
-            // - Note that the PreferSortAscending flag is never checked, it is essentially the default and therefore a no-op.
-            // - Note that the NoSortAscending/NoSortDescending flags are processed in TableSortSpecsSanitize(), and they may change/revert
-            //   the value of SortDirection. We could technically also do it here but it would be unnecessary and duplicate code.
-            if (column->SortOrder == -1)
-                column->SortDirection = (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
-            else
-                column->SortDirection = (ImU8)((column->SortDirection == ImGuiSortDirection_Ascending) ? ImGuiSortDirection_Descending : ImGuiSortDirection_Ascending);
-            if (column->SortOrder == -1 || !add_to_existing_sort_orders)
-                column->SortOrder = add_to_existing_sort_orders ? sort_order_max + 1 : 0;
-        }
-        else
-        {
-            if (!add_to_existing_sort_orders)
-                column->SortOrder = -1;
-        }
-        TableFixColumnSortDirection(column);
-    }
-    table->IsSettingsDirty = true;
-    table->IsSortSpecsDirty = true;
-}
-
-// Return NULL if no sort specs (most often when ImGuiTableFlags_Sortable is not set) 
-// You can sort your data again when 'SpecsChanged == true'. It will be true with sorting specs have changed since last call, or the first time.
-// Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable()!
-const ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    IM_ASSERT(table != NULL);
-
-    if (!(table->Flags & ImGuiTableFlags_Sortable))
-        return NULL;
-
-    // Flatten sort specs into user facing data
-    const bool was_dirty = table->IsSortSpecsDirty;
-    if (was_dirty)
-    {
-        TableSortSpecsSanitize(table);
-
-        // Write output
-        table->SortSpecsData.resize(table->SortSpecsCount);
-        table->SortSpecs.ColumnsMask = 0x00;
-        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-        {
-            ImGuiTableColumn* column = &table->Columns[column_n];
-            if (column->SortOrder == -1)
-                continue;
-            ImGuiTableSortSpecsColumn* sort_spec = &table->SortSpecsData[column->SortOrder];
-            sort_spec->ColumnUserID = column->UserID;
-            sort_spec->ColumnIndex = (ImU8)column_n;
-            sort_spec->SortOrder = (ImU8)column->SortOrder;
-            sort_spec->SortDirection = column->SortDirection;
-            table->SortSpecs.ColumnsMask |= (ImU64)1 << column_n;
-        }
-    }
-
-    // User facing data
-    table->SortSpecs.Specs = table->SortSpecsData.Data;
-    table->SortSpecs.SpecsCount = table->SortSpecsData.Size;
-    table->SortSpecs.SpecsChanged = was_dirty;
-    table->IsSortSpecsDirty = false;
-    return table->SortSpecs.SpecsCount ? &table->SortSpecs : NULL;
-}
-
-bool ImGui::TableGetColumnIsSorted(int column_n)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTable* table = g.CurrentTable;
-    if (!table)
-        return false;
-    if (column_n < 0)
-        column_n = table->CurrentColumn;
-    ImGuiTableColumn* column = &table->Columns[column_n];
-    return (column->SortOrder != -1);
-}
-
-void ImGui::TableSortSpecsSanitize(ImGuiTable* table)
-{
-    // Clear SortOrder from hidden column and verify that there's no gap or duplicate.
-    int sort_order_count = 0;
-    ImU64 sort_order_mask = 0x00;
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-    {
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        if (column->SortOrder != -1 && !column->IsActive)
-            column->SortOrder = -1;
-        if (column->SortOrder == -1)
-            continue;
-        sort_order_count++;
-        sort_order_mask |= ((ImU64)1 << column->SortOrder);
-        IM_ASSERT(sort_order_count < (int)sizeof(sort_order_mask) * 8);
-    }
-
-    const bool need_fix_linearize = ((ImU64)1 << sort_order_count) != (sort_order_mask + 1);
-    const bool need_fix_single_sort_order = (sort_order_count > 1) && !(table->Flags & ImGuiTableFlags_MultiSortable);
-    if (need_fix_linearize || need_fix_single_sort_order)
-    {
-        ImU64 fixed_mask = 0x00;
-        for (int sort_n = 0; sort_n < sort_order_count; sort_n++)
-        {
-            // Fix: Rewrite sort order fields if needed so they have no gap or duplicate.
-            // (e.g. SortOrder 0 disappeared, SortOrder 1..2 exists --> rewrite then as SortOrder 0..1)
-            int column_with_smallest_sort_order = -1;
-            for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-                if ((fixed_mask & ((ImU64)1 << (ImU64)column_n)) == 0 && table->Columns[column_n].SortOrder != -1)
-                    if (column_with_smallest_sort_order == -1 || table->Columns[column_n].SortOrder < table->Columns[column_with_smallest_sort_order].SortOrder)
-                        column_with_smallest_sort_order = column_n;
-            IM_ASSERT(column_with_smallest_sort_order != -1);
-            fixed_mask |= ((ImU64)1 << column_with_smallest_sort_order);
-            table->Columns[column_with_smallest_sort_order].SortOrder = (ImS8)sort_n;
-
-            // Fix: Make sure only one column has a SortOrder if ImGuiTableFlags_MultiSortable is not set.
-            if (need_fix_single_sort_order)
-            {
-                for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-                    if (column_n != column_with_smallest_sort_order)
-                        table->Columns[column_n].SortOrder = -1;
-                break;
-            }
-        }
-    }
-
-    // Fallback default sort order (if no column has the ImGuiTableColumnFlags_DefaultSort flag)
-    if (sort_order_count == 0 && table->IsInitializing)
-        for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-        {
-            ImGuiTableColumn* column = &table->Columns[column_n];
-            if (!(column->Flags & ImGuiTableColumnFlags_NoSort) && column->IsActive)
-            {
-                sort_order_count = 1;
-                column->SortOrder = 0;
-                break;
-            }
-        }
-
-    table->SortSpecsCount = (ImS8)sort_order_count;
-}
-
-//-------------------------------------------------------------------------
-// TABLE - .ini settings
-//-------------------------------------------------------------------------
-// [Init] 1: TableSettingsHandler_ReadXXXX()   Load and parse .ini file into TableSettings.
-// [Main] 2: TableLoadSettings()               When table is created, bind Table to TableSettings, serialize TableSettings data into Table.
-// [Main] 3: TableSaveSettings()               When table properties are modified, serialize Table data into bound or new TableSettings, mark .ini as dirty.
-// [Main] 4: TableSettingsHandler_WriteAll()   When .ini file is dirty (which can come from other source), save TableSettings into .ini file.
-//-------------------------------------------------------------------------
-
-static ImGuiTableSettings* CreateTableSettings(ImGuiID id, int columns_count)
-{
-    ImGuiContext& g = *GImGui;
-    ImGuiTableSettings* settings = g.SettingsTables.alloc_chunk(sizeof(ImGuiTableSettings) + (size_t)columns_count * sizeof(ImGuiTableColumnSettings));
-    IM_PLACEMENT_NEW(settings) ImGuiTableSettings();
-    ImGuiTableColumnSettings* settings_column = settings->GetColumnSettings();
-    for (int n = 0; n < columns_count; n++, settings_column++)
-        IM_PLACEMENT_NEW(settings_column) ImGuiTableColumnSettings();
-    settings->ID = id;
-    settings->ColumnsCount = settings->ColumnsCountMax = (ImS8)columns_count;
-    return settings;
-}
-
-static ImGuiTableSettings* FindTableSettingsByID(ImGuiID id)
-{
-    // FIXME-OPT: Might want to store a lookup map for this?
-    ImGuiContext& g = *GImGui;
-    for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
-        if (settings->ID == id)
-            return settings;
-    return NULL;
-}
-
-ImGuiTableSettings* ImGui::TableFindSettings(ImGuiTable* table)
-{
-    if (table->SettingsOffset == -1)
-        return NULL;
-
-    ImGuiContext& g = *GImGui;
-    ImGuiTableSettings* settings = g.SettingsTables.ptr_from_offset(table->SettingsOffset);
-    IM_ASSERT(settings->ID == table->ID);
-    if (settings->ColumnsCountMax < table->ColumnsCount)
-    {
-        settings->ID = 0; // Ditch storage if we won't fit because of a count change
-        return NULL;
-    }
-    return settings;
-}
-
-void ImGui::TableSaveSettings(ImGuiTable* table)
-{
-    table->IsSettingsDirty = false;
-    if (table->Flags & ImGuiTableFlags_NoSavedSettings)
-        return;
-
-    // Bind or create settings data
-    ImGuiContext& g = *GImGui;
-    ImGuiTableSettings* settings = TableFindSettings(table);
-    if (settings == NULL)
-    {
-        settings = CreateTableSettings(table->ID, table->ColumnsCount);
-        table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
-    }
-    settings->ColumnsCount = (ImS8)table->ColumnsCount;
-
-    // Serialize ImGuiTableSettings/ImGuiTableColumnSettings --> ImGuiTable/ImGuiTableColumn
-    IM_ASSERT(settings->ID == table->ID);
-    IM_ASSERT(settings->ColumnsCount == table->ColumnsCount && settings->ColumnsCountMax >= settings->ColumnsCount);
-    ImGuiTableColumn* column = table->Columns.Data;
-    ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
-
-    // FIXME-TABLE: Logic to avoid saving default widths?
-    settings->SaveFlags = ImGuiTableFlags_Resizable;
-    for (int n = 0; n < table->ColumnsCount; n++, column++, column_settings++)
-    {
-        //column_settings->WidthOrWeight = column->WidthRequested; // FIXME-WIP
-        column_settings->Index = (ImS8)n;
-        column_settings->DisplayOrder = column->DisplayOrder;
-        column_settings->SortOrder = column->SortOrder;
-        column_settings->SortDirection = column->SortDirection;
-        column_settings->Visible = column->IsActive;
-
-        // We skip saving some data in the .ini file when they are unnecessary to restore our state
-        // FIXME-TABLE: We don't have logic to easily compare SortOrder to DefaultSortOrder yet.
-        if (column->DisplayOrder != n)
-            settings->SaveFlags |= ImGuiTableFlags_Reorderable;
-        if (column_settings->SortOrder != -1)
-            settings->SaveFlags |= ImGuiTableFlags_Sortable;
-        if (column_settings->Visible != ((column->Flags & ImGuiTableColumnFlags_DefaultHide) == 0))
-            settings->SaveFlags |= ImGuiTableFlags_Hideable;
-    }
-    settings->SaveFlags &= table->Flags;
-
-    MarkIniSettingsDirty();
-}
-
-void ImGui::TableLoadSettings(ImGuiTable* table)
-{
-    ImGuiContext& g = *GImGui;
-    table->IsSettingsRequestLoad = false;
-    if (table->Flags & ImGuiTableFlags_NoSavedSettings)
-        return;
-
-    // Bind settings
-    ImGuiTableSettings* settings;
-    if (table->SettingsOffset == -1)
-    {
-        settings = FindTableSettingsByID(table->ID);
-        if (settings == NULL)
-            return;
-        table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
-    }
-    else
-    {
-        settings = g.SettingsTables.ptr_from_offset(table->SettingsOffset);
-    }
-    table->IsSettingsLoaded = true;
-    settings->SaveFlags = table->Flags;
-
-    // Serialize ImGuiTable/ImGuiTableColumn --> ImGuiTableSettings/ImGuiTableColumnSettings
-    ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
-    for (int data_n = 0; data_n < settings->ColumnsCount; data_n++, column_settings++)
-    {
-        int column_n = column_settings->Index;
-        if (column_n < 0 || column_n >= table->ColumnsCount)
-            continue;
-        ImGuiTableColumn* column = &table->Columns[column_n];
-        //column->WidthRequested = column_settings->WidthOrWeight; // FIXME-WIP
-        if (column_settings->DisplayOrder != -1)
-            column->DisplayOrder = column_settings->DisplayOrder;
-        if (column_settings->SortOrder != -1)
-        {
-            column->SortOrder = column_settings->SortOrder;
-            column->SortDirection = column_settings->SortDirection;
-        }
-        column->IsActive = column->IsActiveNextFrame = column_settings->Visible;
-    }
-
-    // FIXME-TABLE: Need to validate .ini data
-    for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
-        table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImS8)column_n;
-}
-
-void*   ImGui::TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
-{
-    ImGuiID id = 0;
-    int columns_count = 0;
-    if (sscanf(name, "0x%08X,%d", &id, &columns_count) < 2)
-        return NULL;
-    return CreateTableSettings(id, columns_count);
-}
-
-void    ImGui::TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
-{
-    // "Column 0  UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
-    ImGuiTableSettings* settings = (ImGuiTableSettings*)entry;
-    int column_n = 0, r = 0, n = 0;
-    if (sscanf(line, "Column %d%n", &column_n, &r) == 1)        { line = ImStrSkipBlank(line + r); } else { return; }
-    if (column_n < 0 || column_n >= settings->ColumnsCount)
-        return;
-
-    char c = 0;
-    ImGuiTableColumnSettings* column = settings->GetColumnSettings() + column_n;
-    column->Index = (ImS8)column_n;
-    if (sscanf(line, "UserID=0x%08X%n", (ImU32*)&n, &r) == 1)   { line = ImStrSkipBlank(line + r); column->UserID = (ImGuiID)n; }
-    if (sscanf(line, "Width=%d%n", &n, &r) == 1)                { line = ImStrSkipBlank(line + r); /* .. */ settings->SaveFlags |= ImGuiTableFlags_Resizable; }
-    if (sscanf(line, "Visible=%d%n", &n, &r) == 1)              { line = ImStrSkipBlank(line + r); column->Visible = (ImU8)n; settings->SaveFlags |= ImGuiTableFlags_Hideable; }
-    if (sscanf(line, "Order=%d%n", &n, &r) == 1)                { line = ImStrSkipBlank(line + r); column->DisplayOrder = (ImS8)n; settings->SaveFlags |= ImGuiTableFlags_Reorderable; }
-    if (sscanf(line, "Sort=%d%c%n", &n, &c, &r) == 2)           { line = ImStrSkipBlank(line + r); column->SortOrder = (ImS8)n; column->SortDirection = (c == '^') ? ImGuiSortDirection_Descending : ImGuiSortDirection_Ascending; settings->SaveFlags |= ImGuiTableFlags_Sortable; }
-}
-
-void    ImGui::TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
-{
-    ImGuiContext& g = *ctx;
-    for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
-    {
-        if (settings->ID == 0) // Skip ditched settings
-            continue;
-
-        // TableSaveSettings() may clear some of those flags when we establish that the data can be stripped (e.g. Order was unchanged)
-        const bool save_size    = (settings->SaveFlags & ImGuiTableFlags_Resizable) != 0;
-        const bool save_visible = (settings->SaveFlags & ImGuiTableFlags_Hideable) != 0;
-        const bool save_order   = (settings->SaveFlags & ImGuiTableFlags_Reorderable) != 0;
-        const bool save_sort    = (settings->SaveFlags & ImGuiTableFlags_Sortable) != 0;
-        if (!save_size && !save_visible && !save_order && !save_sort)
-            continue;
-
-        buf->reserve(buf->size() + 30 + settings->ColumnsCount * 50); // ballpark reserve
-        buf->appendf("[%s][0x%08X,%d]\n", handler->TypeName, settings->ID, settings->ColumnsCount);
-        ImGuiTableColumnSettings* column = settings->GetColumnSettings();
-        for (int column_n = 0; column_n < settings->ColumnsCount; column_n++, column++)
-        {
-            // "Column 0  UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
-            if (column->UserID != 0)
-                buf->appendf("Column %-2d UserID=%08X", column_n, column->UserID);
-            else
-                buf->appendf("Column %-2d", column_n);
-            if (save_size)                              buf->appendf(" Width=%d", 0);// (int)settings_column->WidthOrWeight);  // FIXME-TABLE
-            if (save_visible)                           buf->appendf(" Visible=%d", column->Visible);
-            if (save_order)                             buf->appendf(" Order=%d", column->DisplayOrder);
-            if (save_sort && column->SortOrder != -1)   buf->appendf(" Sort=%d%c", column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? 'v' : '^');
-            buf->append("\n");
-        }
-        buf->append("\n");
-    }
-}
-
-//-------------------------------------------------------------------------
-
-#endif // #ifndef IMGUI_DISABLE
--- a/DoConfig/new/imgui/imstb_rectpack.h
+++ /dev/null
@@ -1,639 +1,0 @@
-// [DEAR IMGUI]
-// This is a slightly modified version of stb_rect_pack.h 1.00.
-// Those changes would need to be pushed into nothings/stb:
-// - Added STBRP__CDECL
-// Grep for [DEAR IMGUI] to find the changes.
-
-// stb_rect_pack.h - v1.00 - public domain - rectangle packing
-// Sean Barrett 2014
-//
-// Useful for e.g. packing rectangular textures into an atlas.
-// Does not do rotation.
-//
-// Not necessarily the awesomest packing method, but better than
-// the totally naive one in stb_truetype (which is primarily what
-// this is meant to replace).
-//
-// Has only had a few tests run, may have issues.
-//
-// More docs to come.
-//
-// No memory allocations; uses qsort() and assert() from stdlib.
-// Can override those by defining STBRP_SORT and STBRP_ASSERT.
-//
-// This library currently uses the Skyline Bottom-Left algorithm.
-//
-// Please note: better rectangle packers are welcome! Please
-// implement them to the same API, but with a different init
-// function.
-//
-// Credits
-//
-//  Library
-//    Sean Barrett
-//  Minor features
-//    Martins Mozeiko
-//    github:IntellectualKitty
-//    
-//  Bugfixes / warning fixes
-//    Jeremy Jaussaud
-//    Fabian Giesen
-//
-// Version history:
-//
-//     1.00  (2019-02-25)  avoid small space waste; gracefully fail too-wide rectangles
-//     0.99  (2019-02-07)  warning fixes
-//     0.11  (2017-03-03)  return packing success/fail result
-//     0.10  (2016-10-25)  remove cast-away-const to avoid warnings
-//     0.09  (2016-08-27)  fix compiler warnings
-//     0.08  (2015-09-13)  really fix bug with empty rects (w=0 or h=0)
-//     0.07  (2015-09-13)  fix bug with empty rects (w=0 or h=0)
-//     0.06  (2015-04-15)  added STBRP_SORT to allow replacing qsort
-//     0.05:  added STBRP_ASSERT to allow replacing assert
-//     0.04:  fixed minor bug in STBRP_LARGE_RECTS support
-//     0.01:  initial release
-//
-// LICENSE
-//
-//   See end of file for license information.
-
-//////////////////////////////////////////////////////////////////////////////
-//
-//       INCLUDE SECTION
-//
-
-#ifndef STB_INCLUDE_STB_RECT_PACK_H
-#define STB_INCLUDE_STB_RECT_PACK_H
-
-#define STB_RECT_PACK_VERSION  1
-
-#ifdef STBRP_STATIC
-#define STBRP_DEF static
-#else
-#define STBRP_DEF extern
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct stbrp_context stbrp_context;
-typedef struct stbrp_node    stbrp_node;
-typedef struct stbrp_rect    stbrp_rect;
-
-#ifdef STBRP_LARGE_RECTS
-typedef int            stbrp_coord;
-#else
-typedef unsigned short stbrp_coord;
-#endif
-
-STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
-// Assign packed locations to rectangles. The rectangles are of type
-// 'stbrp_rect' defined below, stored in the array 'rects', and there
-// are 'num_rects' many of them.
-//
-// Rectangles which are successfully packed have the 'was_packed' flag
-// set to a non-zero value and 'x' and 'y' store the minimum location
-// on each axis (i.e. bottom-left in cartesian coordinates, top-left
-// if you imagine y increasing downwards). Rectangles which do not fit
-// have the 'was_packed' flag set to 0.
-//
-// You should not try to access the 'rects' array from another thread
-// while this function is running, as the function temporarily reorders
-// the array while it executes.
-//
-// To pack into another rectangle, you need to call stbrp_init_target
-// again. To continue packing into the same rectangle, you can call
-// this function again. Calling this multiple times with multiple rect
-// arrays will probably produce worse packing results than calling it
-// a single time with the full rectangle array, but the option is
-// available.
-//
-// The function returns 1 if all of the rectangles were successfully
-// packed and 0 otherwise.
-
-struct stbrp_rect
-{
-   // reserved for your use:
-   int            id;
-
-   // input:
-   stbrp_coord    w, h;
-
-   // output:
-   stbrp_coord    x, y;
-   int            was_packed;  // non-zero if valid packing
-
-}; // 16 bytes, nominally
-
-
-STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes);
-// Initialize a rectangle packer to:
-//    pack a rectangle that is 'width' by 'height' in dimensions
-//    using temporary storage provided by the array 'nodes', which is 'num_nodes' long
-//
-// You must call this function every time you start packing into a new target.
-//
-// There is no "shutdown" function. The 'nodes' memory must stay valid for
-// the following stbrp_pack_rects() call (or calls), but can be freed after
-// the call (or calls) finish.
-//
-// Note: to guarantee best results, either:
-//       1. make sure 'num_nodes' >= 'width'
-//   or  2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
-//
-// If you don't do either of the above things, widths will be quantized to multiples
-// of small integers to guarantee the algorithm doesn't run out of temporary storage.
-//
-// If you do #2, then the non-quantized algorithm will be used, but the algorithm
-// may run out of temporary storage and be unable to pack some rectangles.
-
-STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem);
-// Optionally call this function after init but before doing any packing to
-// change the handling of the out-of-temp-memory scenario, described above.
-// If you call init again, this will be reset to the default (false).
-
-
-STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic);
-// Optionally select which packing heuristic the library should use. Different
-// heuristics will produce better/worse results for different data sets.
-// If you call init again, this will be reset to the default.
-
-enum
-{
-   STBRP_HEURISTIC_Skyline_default=0,
-   STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
-   STBRP_HEURISTIC_Skyline_BF_sortHeight
-};
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// the details of the following structures don't matter to you, but they must
-// be visible so you can handle the memory allocations for them
-
-struct stbrp_node
-{
-   stbrp_coord  x,y;
-   stbrp_node  *next;
-};
-
-struct stbrp_context
-{
-   int width;
-   int height;
-   int align;
-   int init_mode;
-   int heuristic;
-   int num_nodes;
-   stbrp_node *active_head;
-   stbrp_node *free_head;
-   stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-//
-//     IMPLEMENTATION SECTION
-//
-
-#ifdef STB_RECT_PACK_IMPLEMENTATION
-#ifndef STBRP_SORT
-#include <stdlib.h>
-#define STBRP_SORT qsort
-#endif
-
-#ifndef STBRP_ASSERT
-#include <assert.h>
-#define STBRP_ASSERT assert
-#endif
-
-// [DEAR IMGUI] Added STBRP__CDECL
-#ifdef _MSC_VER
-#define STBRP__NOTUSED(v)  (void)(v)
-#define STBRP__CDECL __cdecl
-#else
-#define STBRP__NOTUSED(v)  (void)sizeof(v)
-#define STBRP__CDECL
-#endif
-
-enum
-{
-   STBRP__INIT_skyline = 1
-};
-
-STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
-{
-   switch (context->init_mode) {
-      case STBRP__INIT_skyline:
-         STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
-         context->heuristic = heuristic;
-         break;
-      default:
-         STBRP_ASSERT(0);
-   }
-}
-
-STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem)
-{
-   if (allow_out_of_mem)
-      // if it's ok to run out of memory, then don't bother aligning them;
-      // this gives better packing, but may fail due to OOM (even though
-      // the rectangles easily fit). @TODO a smarter approach would be to only
-      // quantize once we've hit OOM, then we could get rid of this parameter.
-      context->align = 1;
-   else {
-      // if it's not ok to run out of memory, then quantize the widths
-      // so that num_nodes is always enough nodes.
-      //
-      // I.e. num_nodes * align >= width
-      //                  align >= width / num_nodes
-      //                  align = ceil(width/num_nodes)
-
-      context->align = (context->width + context->num_nodes-1) / context->num_nodes;
-   }
-}
-
-STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
-{
-   int i;
-#ifndef STBRP_LARGE_RECTS
-   STBRP_ASSERT(width <= 0xffff && height <= 0xffff);
-#endif
-
-   for (i=0; i < num_nodes-1; ++i)
-      nodes[i].next = &nodes[i+1];
-   nodes[i].next = NULL;
-   context->init_mode = STBRP__INIT_skyline;
-   context->heuristic = STBRP_HEURISTIC_Skyline_default;
-   context->free_head = &nodes[0];
-   context->active_head = &context->extra[0];
-   context->width = width;
-   context->height = height;
-   context->num_nodes = num_nodes;
-   stbrp_setup_allow_out_of_mem(context, 0);
-
-   // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
-   context->extra[0].x = 0;
-   context->extra[0].y = 0;
-   context->extra[0].next = &context->extra[1];
-   context->extra[1].x = (stbrp_coord) width;
-#ifdef STBRP_LARGE_RECTS
-   context->extra[1].y = (1<<30);
-#else
-   context->extra[1].y = 65535;
-#endif
-   context->extra[1].next = NULL;
-}
-
-// find minimum y position if it starts at x1
-static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste)
-{
-   stbrp_node *node = first;
-   int x1 = x0 + width;
-   int min_y, visited_width, waste_area;
-
-   STBRP__NOTUSED(c);
-
-   STBRP_ASSERT(first->x <= x0);
-
-   #if 0
-   // skip in case we're past the node
-   while (node->next->x <= x0)
-      ++node;
-   #else
-   STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
-   #endif
-
-   STBRP_ASSERT(node->x <= x0);
-
-   min_y = 0;
-   waste_area = 0;
-   visited_width = 0;
-   while (node->x < x1) {
-      if (node->y > min_y) {
-         // raise min_y higher.
-         // we've accounted for all waste up to min_y,
-         // but we'll now add more waste for everything we've visted
-         waste_area += visited_width * (node->y - min_y);
-         min_y = node->y;
-         // the first time through, visited_width might be reduced
-         if (node->x < x0)
-            visited_width += node->next->x - x0;
-         else
-            visited_width += node->next->x - node->x;
-      } else {
-         // add waste area
-         int under_width = node->next->x - node->x;
-         if (under_width + visited_width > width)
-            under_width = width - visited_width;
-         waste_area += under_width * (min_y - node->y);
-         visited_width += under_width;
-      }
-      node = node->next;
-   }
-
-   *pwaste = waste_area;
-   return min_y;
-}
-
-typedef struct
-{
-   int x,y;
-   stbrp_node **prev_link;
-} stbrp__findresult;
-
-static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height)
-{
-   int best_waste = (1<<30), best_x, best_y = (1 << 30);
-   stbrp__findresult fr;
-   stbrp_node **prev, *node, *tail, **best = NULL;
-
-   // align to multiple of c->align
-   width = (width + c->align - 1);
-   width -= width % c->align;
-   STBRP_ASSERT(width % c->align == 0);
-
-   // if it can't possibly fit, bail immediately
-   if (width > c->width || height > c->height) {
-      fr.prev_link = NULL;
-      fr.x = fr.y = 0;
-      return fr;
-   }
-
-   node = c->active_head;
-   prev = &c->active_head;
-   while (node->x + width <= c->width) {
-      int y,waste;
-      y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
-      if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL
-         // bottom left
-         if (y < best_y) {
-            best_y = y;
-            best = prev;
-         }
-      } else {
-         // best-fit
-         if (y + height <= c->height) {
-            // can only use it if it first vertically
-            if (y < best_y || (y == best_y && waste < best_waste)) {
-               best_y = y;
-               best_waste = waste;
-               best = prev;
-            }
-         }
-      }
-      prev = &node->next;
-      node = node->next;
-   }
-
-   best_x = (best == NULL) ? 0 : (*best)->x;
-
-   // if doing best-fit (BF), we also have to try aligning right edge to each node position
-   //
-   // e.g, if fitting
-   //
-   //     ____________________
-   //    |____________________|
-   //
-   //            into
-   //
-   //   |                         |
-   //   |             ____________|
-   //   |____________|
-   //
-   // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
-   //
-   // This makes BF take about 2x the time
-
-   if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
-      tail = c->active_head;
-      node = c->active_head;
-      prev = &c->active_head;
-      // find first node that's admissible
-      while (tail->x < width)
-         tail = tail->next;
-      while (tail) {
-         int xpos = tail->x - width;
-         int y,waste;
-         STBRP_ASSERT(xpos >= 0);
-         // find the left position that matches this
-         while (node->next->x <= xpos) {
-            prev = &node->next;
-            node = node->next;
-         }
-         STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
-         y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
-         if (y + height <= c->height) {
-            if (y <= best_y) {
-               if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
-                  best_x = xpos;
-                  STBRP_ASSERT(y <= best_y);
-                  best_y = y;
-                  best_waste = waste;
-                  best = prev;
-               }
-            }
-         }
-         tail = tail->next;
-      }         
-   }
-
-   fr.prev_link = best;
-   fr.x = best_x;
-   fr.y = best_y;
-   return fr;
-}
-
-static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height)
-{
-   // find best position according to heuristic
-   stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
-   stbrp_node *node, *cur;
-
-   // bail if:
-   //    1. it failed
-   //    2. the best node doesn't fit (we don't always check this)
-   //    3. we're out of memory
-   if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
-      res.prev_link = NULL;
-      return res;
-   }
-
-   // on success, create new node
-   node = context->free_head;
-   node->x = (stbrp_coord) res.x;
-   node->y = (stbrp_coord) (res.y + height);
-
-   context->free_head = node->next;
-
-   // insert the new node into the right starting point, and
-   // let 'cur' point to the remaining nodes needing to be
-   // stiched back in
-
-   cur = *res.prev_link;
-   if (cur->x < res.x) {
-      // preserve the existing one, so start testing with the next one
-      stbrp_node *next = cur->next;
-      cur->next = node;
-      cur = next;
-   } else {
-      *res.prev_link = node;
-   }
-
-   // from here, traverse cur and free the nodes, until we get to one
-   // that shouldn't be freed
-   while (cur->next && cur->next->x <= res.x + width) {
-      stbrp_node *next = cur->next;
-      // move the current node to the free list
-      cur->next = context->free_head;
-      context->free_head = cur;
-      cur = next;
-   }
-
-   // stitch the list back in
-   node->next = cur;
-
-   if (cur->x < res.x + width)
-      cur->x = (stbrp_coord) (res.x + width);
-
-#ifdef _DEBUG
-   cur = context->active_head;
-   while (cur->x < context->width) {
-      STBRP_ASSERT(cur->x < cur->next->x);
-      cur = cur->next;
-   }
-   STBRP_ASSERT(cur->next == NULL);
-
-   {
-      int count=0;
-      cur = context->active_head;
-      while (cur) {
-         cur = cur->next;
-         ++count;
-      }
-      cur = context->free_head;
-      while (cur) {
-         cur = cur->next;
-         ++count;
-      }
-      STBRP_ASSERT(count == context->num_nodes+2);
-   }
-#endif
-
-   return res;
-}
-
-// [DEAR IMGUI] Added STBRP__CDECL
-static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
-{
-   const stbrp_rect *p = (const stbrp_rect *) a;
-   const stbrp_rect *q = (const stbrp_rect *) b;
-   if (p->h > q->h)
-      return -1;
-   if (p->h < q->h)
-      return  1;
-   return (p->w > q->w) ? -1 : (p->w < q->w);
-}
-
-// [DEAR IMGUI] Added STBRP__CDECL
-static int STBRP__CDECL rect_original_order(const void *a, const void *b)
-{
-   const stbrp_rect *p = (const stbrp_rect *) a;
-   const stbrp_rect *q = (const stbrp_rect *) b;
-   return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
-}
-
-#ifdef STBRP_LARGE_RECTS
-#define STBRP__MAXVAL  0xffffffff
-#else
-#define STBRP__MAXVAL  0xffff
-#endif
-
-STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
-{
-   int i, all_rects_packed = 1;
-
-   // we use the 'was_packed' field internally to allow sorting/unsorting
-   for (i=0; i < num_rects; ++i) {
-      rects[i].was_packed = i;
-   }
-
-   // sort according to heuristic
-   STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
-
-   for (i=0; i < num_rects; ++i) {
-      if (rects[i].w == 0 || rects[i].h == 0) {
-         rects[i].x = rects[i].y = 0;  // empty rect needs no space
-      } else {
-         stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
-         if (fr.prev_link) {
-            rects[i].x = (stbrp_coord) fr.x;
-            rects[i].y = (stbrp_coord) fr.y;
-         } else {
-            rects[i].x = rects[i].y = STBRP__MAXVAL;
-         }
-      }
-   }
-
-   // unsort
-   STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
-
-   // set was_packed flags and all_rects_packed status
-   for (i=0; i < num_rects; ++i) {
-      rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
-      if (!rects[i].was_packed)
-         all_rects_packed = 0;
-   }
-
-   // return the all_rects_packed status
-   return all_rects_packed;
-}
-#endif
-
-/*
-------------------------------------------------------------------------------
-This software is available under 2 licenses -- choose whichever you prefer.
-------------------------------------------------------------------------------
-ALTERNATIVE A - MIT License
-Copyright (c) 2017 Sean Barrett
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files (the "Software"), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
-of the Software, and to permit persons to whom the Software is furnished to do 
-so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
-SOFTWARE.
-------------------------------------------------------------------------------
-ALTERNATIVE B - Public Domain (www.unlicense.org)
-This is free and unencumbered software released into the public domain.
-Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
-software, either in source code form or as a compiled binary, for any purpose, 
-commercial or non-commercial, and by any means.
-In jurisdictions that recognize copyright laws, the author or authors of this 
-software dedicate any and all copyright interest in the software to the public 
-domain. We make this dedication for the benefit of the public at large and to 
-the detriment of our heirs and successors. We intend this dedication to be an 
-overt act of relinquishment in perpetuity of all present and future rights to 
-this software under copyright law.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-------------------------------------------------------------------------------
-*/
--- a/DoConfig/new/imgui/imstb_textedit.h
+++ /dev/null
@@ -1,1417 +1,0 @@
-// [DEAR IMGUI]
-// This is a slightly modified version of stb_textedit.h 1.13. 
-// Those changes would need to be pushed into nothings/stb:
-// - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321)
-// Grep for [DEAR IMGUI] to find the changes.
-
-// stb_textedit.h - v1.13  - public domain - Sean Barrett
-// Development of this library was sponsored by RAD Game Tools
-//
-// This C header file implements the guts of a multi-line text-editing
-// widget; you implement display, word-wrapping, and low-level string
-// insertion/deletion, and stb_textedit will map user inputs into
-// insertions & deletions, plus updates to the cursor position,
-// selection state, and undo state.
-//
-// It is intended for use in games and other systems that need to build
-// their own custom widgets and which do not have heavy text-editing
-// requirements (this library is not recommended for use for editing large
-// texts, as its performance does not scale and it has limited undo).
-//
-// Non-trivial behaviors are modelled after Windows text controls.
-// 
-//
-// LICENSE
-//
-// See end of file for license information.
-//
-//
-// DEPENDENCIES
-//
-// Uses the C runtime function 'memmove', which you can override
-// by defining STB_TEXTEDIT_memmove before the implementation.
-// Uses no other functions. Performs no runtime allocations.
-//
-//
-// VERSION HISTORY
-//
-//   1.13 (2019-02-07) fix bug in undo size management
-//   1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash
-//   1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield
-//   1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual
-//   1.9  (2016-08-27) customizable move-by-word
-//   1.8  (2016-04-02) better keyboard handling when mouse button is down
-//   1.7  (2015-09-13) change y range handling in case baseline is non-0
-//   1.6  (2015-04-15) allow STB_TEXTEDIT_memmove
-//   1.5  (2014-09-10) add support for secondary keys for OS X
-//   1.4  (2014-08-17) fix signed/unsigned warnings
-//   1.3  (2014-06-19) fix mouse clicking to round to nearest char boundary
-//   1.2  (2014-05-27) fix some RAD types that had crept into the new code
-//   1.1  (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE )
-//   1.0  (2012-07-26) improve documentation, initial public release
-//   0.3  (2012-02-24) bugfixes, single-line mode; insert mode
-//   0.2  (2011-11-28) fixes to undo/redo
-//   0.1  (2010-07-08) initial version
-//
-// ADDITIONAL CONTRIBUTORS
-//
-//   Ulf Winklemann: move-by-word in 1.1
-//   Fabian Giesen: secondary key inputs in 1.5
-//   Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6
-//
-//   Bugfixes:
-//      Scott Graham
-//      Daniel Keller
-//      Omar Cornut
-//      Dan Thompson
-//
-// USAGE
-//
-// This file behaves differently depending on what symbols you define
-// before including it.
-//
-//
-// Header-file mode:
-//
-//   If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this,
-//   it will operate in "header file" mode. In this mode, it declares a
-//   single public symbol, STB_TexteditState, which encapsulates the current
-//   state of a text widget (except for the string, which you will store
-//   separately).
-//
-//   To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a
-//   primitive type that defines a single character (e.g. char, wchar_t, etc).
-//
-//   To save space or increase undo-ability, you can optionally define the
-//   following things that are used by the undo system:
-//
-//      STB_TEXTEDIT_POSITIONTYPE         small int type encoding a valid cursor position
-//      STB_TEXTEDIT_UNDOSTATECOUNT       the number of undo states to allow
-//      STB_TEXTEDIT_UNDOCHARCOUNT        the number of characters to store in the undo buffer
-//
-//   If you don't define these, they are set to permissive types and
-//   moderate sizes. The undo system does no memory allocations, so
-//   it grows STB_TexteditState by the worst-case storage which is (in bytes):
-//
-//        [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATE_COUNT
-//      +          sizeof(STB_TEXTEDIT_CHARTYPE)      * STB_TEXTEDIT_UNDOCHAR_COUNT
-//
-//
-// Implementation mode:
-//
-//   If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it
-//   will compile the implementation of the text edit widget, depending
-//   on a large number of symbols which must be defined before the include.
-//
-//   The implementation is defined only as static functions. You will then
-//   need to provide your own APIs in the same file which will access the
-//   static functions.
-//
-//   The basic concept is that you provide a "string" object which
-//   behaves like an array of characters. stb_textedit uses indices to
-//   refer to positions in the string, implicitly representing positions
-//   in the displayed textedit. This is true for both plain text and
-//   rich text; even with rich text stb_truetype interacts with your
-//   code as if there was an array of all the displayed characters.
-//
-// Symbols that must be the same in header-file and implementation mode:
-//
-//     STB_TEXTEDIT_CHARTYPE             the character type
-//     STB_TEXTEDIT_POSITIONTYPE         small type that is a valid cursor position
-//     STB_TEXTEDIT_UNDOSTATECOUNT       the number of undo states to allow
-//     STB_TEXTEDIT_UNDOCHARCOUNT        the number of characters to store in the undo buffer
-//
-// Symbols you must define for implementation mode:
-//
-//    STB_TEXTEDIT_STRING               the type of object representing a string being edited,
-//                                      typically this is a wrapper object with other data you need
-//
-//    STB_TEXTEDIT_STRINGLEN(obj)       the length of the string (ideally O(1))
-//    STB_TEXTEDIT_LAYOUTROW(&r,obj,n)  returns the results of laying out a line of characters
-//                                        starting from character #n (see discussion below)
-//    STB_TEXTEDIT_GETWIDTH(obj,n,i)    returns the pixel delta from the xpos of the i'th character
-//                                        to the xpos of the i+1'th char for a line of characters
-//                                        starting at character #n (i.e. accounts for kerning
-//                                        with previous char)
-//    STB_TEXTEDIT_KEYTOTEXT(k)         maps a keyboard input to an insertable character
-//                                        (return type is int, -1 means not valid to insert)
-//    STB_TEXTEDIT_GETCHAR(obj,i)       returns the i'th character of obj, 0-based
-//    STB_TEXTEDIT_NEWLINE              the character returned by _GETCHAR() we recognize
-//                                        as manually wordwrapping for end-of-line positioning
-//
-//    STB_TEXTEDIT_DELETECHARS(obj,i,n)      delete n characters starting at i
-//    STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n)   insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*)
-//
-//    STB_TEXTEDIT_K_SHIFT       a power of two that is or'd in to a keyboard input to represent the shift key
-//
-//    STB_TEXTEDIT_K_LEFT        keyboard input to move cursor left
-//    STB_TEXTEDIT_K_RIGHT       keyboard input to move cursor right
-//    STB_TEXTEDIT_K_UP          keyboard input to move cursor up
-//    STB_TEXTEDIT_K_DOWN        keyboard input to move cursor down
-//    STB_TEXTEDIT_K_LINESTART   keyboard input to move cursor to start of line  // e.g. HOME
-//    STB_TEXTEDIT_K_LINEEND     keyboard input to move cursor to end of line    // e.g. END
-//    STB_TEXTEDIT_K_TEXTSTART   keyboard input to move cursor to start of text  // e.g. ctrl-HOME
-//    STB_TEXTEDIT_K_TEXTEND     keyboard input to move cursor to end of text    // e.g. ctrl-END
-//    STB_TEXTEDIT_K_DELETE      keyboard input to delete selection or character under cursor
-//    STB_TEXTEDIT_K_BACKSPACE   keyboard input to delete selection or character left of cursor
-//    STB_TEXTEDIT_K_UNDO        keyboard input to perform undo
-//    STB_TEXTEDIT_K_REDO        keyboard input to perform redo
-//
-// Optional:
-//    STB_TEXTEDIT_K_INSERT              keyboard input to toggle insert mode
-//    STB_TEXTEDIT_IS_SPACE(ch)          true if character is whitespace (e.g. 'isspace'),
-//                                          required for default WORDLEFT/WORDRIGHT handlers
-//    STB_TEXTEDIT_MOVEWORDLEFT(obj,i)   custom handler for WORDLEFT, returns index to move cursor to
-//    STB_TEXTEDIT_MOVEWORDRIGHT(obj,i)  custom handler for WORDRIGHT, returns index to move cursor to
-//    STB_TEXTEDIT_K_WORDLEFT            keyboard input to move cursor left one word // e.g. ctrl-LEFT
-//    STB_TEXTEDIT_K_WORDRIGHT           keyboard input to move cursor right one word // e.g. ctrl-RIGHT
-//    STB_TEXTEDIT_K_LINESTART2          secondary keyboard input to move cursor to start of line
-//    STB_TEXTEDIT_K_LINEEND2            secondary keyboard input to move cursor to end of line
-//    STB_TEXTEDIT_K_TEXTSTART2          secondary keyboard input to move cursor to start of text
-//    STB_TEXTEDIT_K_TEXTEND2            secondary keyboard input to move cursor to end of text
-//
-// Todo:
-//    STB_TEXTEDIT_K_PGUP        keyboard input to move cursor up a page
-//    STB_TEXTEDIT_K_PGDOWN      keyboard input to move cursor down a page
-//
-// Keyboard input must be encoded as a single integer value; e.g. a character code
-// and some bitflags that represent shift states. to simplify the interface, SHIFT must
-// be a bitflag, so we can test the shifted state of cursor movements to allow selection,
-// i.e. (STB_TEXTED_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow.
-//
-// You can encode other things, such as CONTROL or ALT, in additional bits, and
-// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example,
-// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN
-// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit,
-// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the
-// API below. The control keys will only match WM_KEYDOWN events because of the
-// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN
-// bit so it only decodes WM_CHAR events.
-//
-// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed
-// row of characters assuming they start on the i'th character--the width and
-// the height and the number of characters consumed. This allows this library
-// to traverse the entire layout incrementally. You need to compute word-wrapping
-// here.
-//
-// Each textfield keeps its own insert mode state, which is not how normal
-// applications work. To keep an app-wide insert mode, update/copy the
-// "insert_mode" field of STB_TexteditState before/after calling API functions.
-//
-// API
-//
-//    void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
-//
-//    void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
-//    void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
-//    int  stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-//    int  stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
-//    void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key)
-//
-//    Each of these functions potentially updates the string and updates the
-//    state.
-//
-//      initialize_state:
-//          set the textedit state to a known good default state when initially
-//          constructing the textedit.
-//
-//      click:
-//          call this with the mouse x,y on a mouse down; it will update the cursor
-//          and reset the selection start/end to the cursor point. the x,y must
-//          be relative to the text widget, with (0,0) being the top left.
-//     
-//      drag:
-//          call this with the mouse x,y on a mouse drag/up; it will update the
-//          cursor and the selection end point
-//     
-//      cut:
-//          call this to delete the current selection; returns true if there was
-//          one. you should FIRST copy the current selection to the system paste buffer.
-//          (To copy, just copy the current selection out of the string yourself.)
-//     
-//      paste:
-//          call this to paste text at the current cursor point or over the current
-//          selection if there is one.
-//     
-//      key:
-//          call this for keyboard inputs sent to the textfield. you can use it
-//          for "key down" events or for "translated" key events. if you need to
-//          do both (as in Win32), or distinguish Unicode characters from control
-//          inputs, set a high bit to distinguish the two; then you can define the
-//          various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit
-//          set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is
-//          clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to
-//          anything other type you wante before including.
-//
-//     
-//   When rendering, you can read the cursor position and selection state from
-//   the STB_TexteditState.
-//
-//
-// Notes:
-//
-// This is designed to be usable in IMGUI, so it allows for the possibility of
-// running in an IMGUI that has NOT cached the multi-line layout. For this
-// reason, it provides an interface that is compatible with computing the
-// layout incrementally--we try to make sure we make as few passes through
-// as possible. (For example, to locate the mouse pointer in the text, we
-// could define functions that return the X and Y positions of characters
-// and binary search Y and then X, but if we're doing dynamic layout this
-// will run the layout algorithm many times, so instead we manually search
-// forward in one pass. Similar logic applies to e.g. up-arrow and
-// down-arrow movement.)
-//
-// If it's run in a widget that *has* cached the layout, then this is less
-// efficient, but it's not horrible on modern computers. But you wouldn't
-// want to edit million-line files with it.
-
-
-////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-////
-////   Header-file mode
-////
-////
-
-#ifndef INCLUDE_STB_TEXTEDIT_H
-#define INCLUDE_STB_TEXTEDIT_H
-
-////////////////////////////////////////////////////////////////////////
-//
-//     STB_TexteditState
-//
-// Definition of STB_TexteditState which you should store
-// per-textfield; it includes cursor position, selection state,
-// and undo state.
-//
-
-#ifndef STB_TEXTEDIT_UNDOSTATECOUNT
-#define STB_TEXTEDIT_UNDOSTATECOUNT   99
-#endif
-#ifndef STB_TEXTEDIT_UNDOCHARCOUNT
-#define STB_TEXTEDIT_UNDOCHARCOUNT   999
-#endif
-#ifndef STB_TEXTEDIT_CHARTYPE
-#define STB_TEXTEDIT_CHARTYPE        int
-#endif
-#ifndef STB_TEXTEDIT_POSITIONTYPE
-#define STB_TEXTEDIT_POSITIONTYPE    int
-#endif
-
-typedef struct
-{
-   // private data
-   STB_TEXTEDIT_POSITIONTYPE  where;
-   STB_TEXTEDIT_POSITIONTYPE  insert_length;
-   STB_TEXTEDIT_POSITIONTYPE  delete_length;
-   int                        char_storage;
-} StbUndoRecord;
-
-typedef struct
-{
-   // private data
-   StbUndoRecord          undo_rec [STB_TEXTEDIT_UNDOSTATECOUNT];
-   STB_TEXTEDIT_CHARTYPE  undo_char[STB_TEXTEDIT_UNDOCHARCOUNT];
-   short undo_point, redo_point;
-   int undo_char_point, redo_char_point;
-} StbUndoState;
-
-typedef struct
-{
-   /////////////////////
-   //
-   // public data
-   //
-
-   int cursor;
-   // position of the text cursor within the string
-
-   int select_start;          // selection start point
-   int select_end;
-   // selection start and end point in characters; if equal, no selection.
-   // note that start may be less than or greater than end (e.g. when
-   // dragging the mouse, start is where the initial click was, and you
-   // can drag in either direction)
-
-   unsigned char insert_mode;
-   // each textfield keeps its own insert mode state. to keep an app-wide
-   // insert mode, copy this value in/out of the app state
-
-   /////////////////////
-   //
-   // private data
-   //
-   unsigned char cursor_at_end_of_line; // not implemented yet
-   unsigned char initialized;
-   unsigned char has_preferred_x;
-   unsigned char single_line;
-   unsigned char padding1, padding2, padding3;
-   float preferred_x; // this determines where the cursor up/down tries to seek to along x
-   StbUndoState undostate;
-} STB_TexteditState;
-
-
-////////////////////////////////////////////////////////////////////////
-//
-//     StbTexteditRow
-//
-// Result of layout query, used by stb_textedit to determine where
-// the text in each row is.
-
-// result of layout query
-typedef struct
-{
-   float x0,x1;             // starting x location, end x location (allows for align=right, etc)
-   float baseline_y_delta;  // position of baseline relative to previous row's baseline
-   float ymin,ymax;         // height of row above and below baseline
-   int num_chars;
-} StbTexteditRow;
-#endif //INCLUDE_STB_TEXTEDIT_H
-
-
-////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////
-////
-////   Implementation mode
-////
-////
-
-
-// implementation isn't include-guarded, since it might have indirectly
-// included just the "header" portion
-#ifdef STB_TEXTEDIT_IMPLEMENTATION
-
-#ifndef STB_TEXTEDIT_memmove
-#include <string.h>
-#define STB_TEXTEDIT_memmove memmove
-#endif
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-//      Mouse input handling
-//
-
-// traverse the layout to locate the nearest character to a display position
-static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y)
-{
-   StbTexteditRow r;
-   int n = STB_TEXTEDIT_STRINGLEN(str);
-   float base_y = 0, prev_x;
-   int i=0, k;
-
-   r.x0 = r.x1 = 0;
-   r.ymin = r.ymax = 0;
-   r.num_chars = 0;
-
-   // search rows to find one that straddles 'y'
-   while (i < n) {
-      STB_TEXTEDIT_LAYOUTROW(&r, str, i);
-      if (r.num_chars <= 0)
-         return n;
-
-      if (i==0 && y < base_y + r.ymin)
-         return 0;
-
-      if (y < base_y + r.ymax)
-         break;
-
-      i += r.num_chars;
-      base_y += r.baseline_y_delta;
-   }
-
-   // below all text, return 'after' last character
-   if (i >= n)
-      return n;
-
-   // check if it's before the beginning of the line
-   if (x < r.x0)
-      return i;
-
-   // check if it's before the end of the line
-   if (x < r.x1) {
-      // search characters in row for one that straddles 'x'
-      prev_x = r.x0;
-      for (k=0; k < r.num_chars; ++k) {
-         float w = STB_TEXTEDIT_GETWIDTH(str, i, k);
-         if (x < prev_x+w) {
-            if (x < prev_x+w/2)
-               return k+i;
-            else
-               return k+i+1;
-         }
-         prev_x += w;
-      }
-      // shouldn't happen, but if it does, fall through to end-of-line case
-   }
-
-   // if the last character is a newline, return that. otherwise return 'after' the last character
-   if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE)
-      return i+r.num_chars-1;
-   else
-      return i+r.num_chars;
-}
-
-// API click: on mouse down, move the cursor to the clicked location, and reset the selection
-static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
-{
-   // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
-   // goes off the top or bottom of the text
-   if( state->single_line )
-   {
-      StbTexteditRow r;
-      STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
-      y = r.ymin;
-   }
-
-   state->cursor = stb_text_locate_coord(str, x, y);
-   state->select_start = state->cursor;
-   state->select_end = state->cursor;
-   state->has_preferred_x = 0;
-}
-
-// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location
-static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
-{
-   int p = 0;
-
-   // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
-   // goes off the top or bottom of the text
-   if( state->single_line )
-   {
-      StbTexteditRow r;
-      STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
-      y = r.ymin;
-   }
-
-   if (state->select_start == state->select_end)
-      state->select_start = state->cursor;
-
-   p = stb_text_locate_coord(str, x, y);
-   state->cursor = state->select_end = p;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-//      Keyboard input handling
-//
-
-// forward declarations
-static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
-static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
-static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length);
-static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length);
-static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length);
-
-typedef struct
-{
-   float x,y;    // position of n'th character
-   float height; // height of line
-   int first_char, length; // first char of row, and length
-   int prev_first;  // first char of previous row
-} StbFindState;
-
-// find the x/y location of a character, and remember info about the previous row in
-// case we get a move-up event (for page up, we'll have to rescan)
-static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line)
-{
-   StbTexteditRow r;
-   int prev_start = 0;
-   int z = STB_TEXTEDIT_STRINGLEN(str);
-   int i=0, first;
-
-   if (n == z) {
-      // if it's at the end, then find the last line -- simpler than trying to
-      // explicitly handle this case in the regular code
-      if (single_line) {
-         STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
-         find->y = 0;
-         find->first_char = 0;
-         find->length = z;
-         find->height = r.ymax - r.ymin;
-         find->x = r.x1;
-      } else {
-         find->y = 0;
-         find->x = 0;
-         find->height = 1;
-         while (i < z) {
-            STB_TEXTEDIT_LAYOUTROW(&r, str, i);
-            prev_start = i;
-            i += r.num_chars;
-         }
-         find->first_char = i;
-         find->length = 0;
-         find->prev_first = prev_start;
-      }
-      return;
-   }
-
-   // search rows to find the one that straddles character n
-   find->y = 0;
-
-   for(;;) {
-      STB_TEXTEDIT_LAYOUTROW(&r, str, i);
-      if (n < i + r.num_chars)
-         break;
-      prev_start = i;
-      i += r.num_chars;
-      find->y += r.baseline_y_delta;
-   }
-
-   find->first_char = first = i;
-   find->length = r.num_chars;
-   find->height = r.ymax - r.ymin;
-   find->prev_first = prev_start;
-
-   // now scan to find xpos
-   find->x = r.x0;
-   for (i=0; first+i < n; ++i)
-      find->x += STB_TEXTEDIT_GETWIDTH(str, first, i);
-}
-
-#define STB_TEXT_HAS_SELECTION(s)   ((s)->select_start != (s)->select_end)
-
-// make the selection/cursor state valid if client altered the string
-static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   int n = STB_TEXTEDIT_STRINGLEN(str);
-   if (STB_TEXT_HAS_SELECTION(state)) {
-      if (state->select_start > n) state->select_start = n;
-      if (state->select_end   > n) state->select_end = n;
-      // if clamping forced them to be equal, move the cursor to match
-      if (state->select_start == state->select_end)
-         state->cursor = state->select_start;
-   }
-   if (state->cursor > n) state->cursor = n;
-}
-
-// delete characters while updating undo
-static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len)
-{
-   stb_text_makeundo_delete(str, state, where, len);
-   STB_TEXTEDIT_DELETECHARS(str, where, len);
-   state->has_preferred_x = 0;
-}
-
-// delete the section
-static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   stb_textedit_clamp(str, state);
-   if (STB_TEXT_HAS_SELECTION(state)) {
-      if (state->select_start < state->select_end) {
-         stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start);
-         state->select_end = state->cursor = state->select_start;
-      } else {
-         stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end);
-         state->select_start = state->cursor = state->select_end;
-      }
-      state->has_preferred_x = 0;
-   }
-}
-
-// canoncialize the selection so start <= end
-static void stb_textedit_sortselection(STB_TexteditState *state)
-{
-   if (state->select_end < state->select_start) {
-      int temp = state->select_end;
-      state->select_end = state->select_start;
-      state->select_start = temp;
-   }
-}
-
-// move cursor to first character of selection
-static void stb_textedit_move_to_first(STB_TexteditState *state)
-{
-   if (STB_TEXT_HAS_SELECTION(state)) {
-      stb_textedit_sortselection(state);
-      state->cursor = state->select_start;
-      state->select_end = state->select_start;
-      state->has_preferred_x = 0;
-   }
-}
-
-// move cursor to last character of selection
-static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   if (STB_TEXT_HAS_SELECTION(state)) {
-      stb_textedit_sortselection(state);
-      stb_textedit_clamp(str, state);
-      state->cursor = state->select_end;
-      state->select_start = state->select_end;
-      state->has_preferred_x = 0;
-   }
-}
-
-#ifdef STB_TEXTEDIT_IS_SPACE
-static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
-{
-   return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1;
-}
-
-#ifndef STB_TEXTEDIT_MOVEWORDLEFT
-static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c )
-{
-   --c; // always move at least one character
-   while( c >= 0 && !is_word_boundary( str, c ) )
-      --c;
-
-   if( c < 0 )
-      c = 0;
-
-   return c;
-}
-#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous
-#endif
-
-#ifndef STB_TEXTEDIT_MOVEWORDRIGHT
-static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c )
-{
-   const int len = STB_TEXTEDIT_STRINGLEN(str);
-   ++c; // always move at least one character
-   while( c < len && !is_word_boundary( str, c ) )
-      ++c;
-
-   if( c > len )
-      c = len;
-
-   return c;
-}
-#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next
-#endif
-
-#endif
-
-// update selection and cursor to match each other
-static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
-{
-   if (!STB_TEXT_HAS_SELECTION(state))
-      state->select_start = state->select_end = state->cursor;
-   else
-      state->cursor = state->select_end;
-}
-
-// API cut: delete selection
-static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   if (STB_TEXT_HAS_SELECTION(state)) {
-      stb_textedit_delete_selection(str,state); // implicitly clamps
-      state->has_preferred_x = 0;
-      return 1;
-   }
-   return 0;
-}
-
-// API paste: replace existing selection with passed-in text
-static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
-{
-   // if there's a selection, the paste should delete it
-   stb_textedit_clamp(str, state);
-   stb_textedit_delete_selection(str,state);
-   // try to insert the characters
-   if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) {
-      stb_text_makeundo_insert(state, state->cursor, len);
-      state->cursor += len;
-      state->has_preferred_x = 0;
-      return 1;
-   }
-   // remove the undo since we didn't actually insert the characters
-   if (state->undostate.undo_point)
-      --state->undostate.undo_point;
-   return 0;
-}
-
-#ifndef STB_TEXTEDIT_KEYTYPE
-#define STB_TEXTEDIT_KEYTYPE int
-#endif
-
-// API key: process a keyboard input
-static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key)
-{
-retry:
-   switch (key) {
-      default: {
-         int c = STB_TEXTEDIT_KEYTOTEXT(key);
-         if (c > 0) {
-            STB_TEXTEDIT_CHARTYPE ch = (STB_TEXTEDIT_CHARTYPE) c;
-
-            // can't add newline in single-line mode
-            if (c == '\n' && state->single_line)
-               break;
-
-            if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) {
-               stb_text_makeundo_replace(str, state, state->cursor, 1, 1);
-               STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1);
-               if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
-                  ++state->cursor;
-                  state->has_preferred_x = 0;
-               }
-            } else {
-               stb_textedit_delete_selection(str,state); // implicitly clamps
-               if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
-                  stb_text_makeundo_insert(state, state->cursor, 1);
-                  ++state->cursor;
-                  state->has_preferred_x = 0;
-               }
-            }
-         }
-         break;
-      }
-
-#ifdef STB_TEXTEDIT_K_INSERT
-      case STB_TEXTEDIT_K_INSERT:
-         state->insert_mode = !state->insert_mode;
-         break;
-#endif
-         
-      case STB_TEXTEDIT_K_UNDO:
-         stb_text_undo(str, state);
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_REDO:
-         stb_text_redo(str, state);
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_LEFT:
-         // if currently there's a selection, move cursor to start of selection
-         if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_move_to_first(state);
-         else 
-            if (state->cursor > 0)
-               --state->cursor;
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_RIGHT:
-         // if currently there's a selection, move cursor to end of selection
-         if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_move_to_last(str, state);
-         else
-            ++state->cursor;
-         stb_textedit_clamp(str, state);
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT:
-         stb_textedit_clamp(str, state);
-         stb_textedit_prep_selection_at_cursor(state);
-         // move selection left
-         if (state->select_end > 0)
-            --state->select_end;
-         state->cursor = state->select_end;
-         state->has_preferred_x = 0;
-         break;
-
-#ifdef STB_TEXTEDIT_MOVEWORDLEFT
-      case STB_TEXTEDIT_K_WORDLEFT:
-         if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_move_to_first(state);
-         else {
-            state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
-            stb_textedit_clamp( str, state );
-         }
-         break;
-
-      case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT:
-         if( !STB_TEXT_HAS_SELECTION( state ) )
-            stb_textedit_prep_selection_at_cursor(state);
-
-         state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
-         state->select_end = state->cursor;
-
-         stb_textedit_clamp( str, state );
-         break;
-#endif
-
-#ifdef STB_TEXTEDIT_MOVEWORDRIGHT
-      case STB_TEXTEDIT_K_WORDRIGHT:
-         if (STB_TEXT_HAS_SELECTION(state)) 
-            stb_textedit_move_to_last(str, state);
-         else {
-            state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
-            stb_textedit_clamp( str, state );
-         }
-         break;
-
-      case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT:
-         if( !STB_TEXT_HAS_SELECTION( state ) )
-            stb_textedit_prep_selection_at_cursor(state);
-
-         state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
-         state->select_end = state->cursor;
-
-         stb_textedit_clamp( str, state );
-         break;
-#endif
-
-      case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT:
-         stb_textedit_prep_selection_at_cursor(state);
-         // move selection right
-         ++state->select_end;
-         stb_textedit_clamp(str, state);
-         state->cursor = state->select_end;
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_DOWN:
-      case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT: {
-         StbFindState find;
-         StbTexteditRow row;
-         int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
-
-         if (state->single_line) {
-            // on windows, up&down in single-line behave like left&right
-            key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT);
-            goto retry;
-         }
-
-         if (sel)
-            stb_textedit_prep_selection_at_cursor(state);
-         else if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_move_to_last(str,state);
-
-         // compute current position of cursor point
-         stb_textedit_clamp(str, state);
-         stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
-
-         // now find character position down a row
-         if (find.length) {
-            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
-            float x;
-            int start = find.first_char + find.length;
-            state->cursor = start;
-            STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
-            x = row.x0;
-            for (i=0; i < row.num_chars; ++i) {
-               float dx = STB_TEXTEDIT_GETWIDTH(str, start, i);
-               #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
-               if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
-                  break;
-               #endif
-               x += dx;
-               if (x > goal_x)
-                  break;
-               ++state->cursor;
-            }
-            stb_textedit_clamp(str, state);
-
-            state->has_preferred_x = 1;
-            state->preferred_x = goal_x;
-
-            if (sel)
-               state->select_end = state->cursor;
-         }
-         break;
-      }
-         
-      case STB_TEXTEDIT_K_UP:
-      case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT: {
-         StbFindState find;
-         StbTexteditRow row;
-         int i, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
-
-         if (state->single_line) {
-            // on windows, up&down become left&right
-            key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT);
-            goto retry;
-         }
-
-         if (sel)
-            stb_textedit_prep_selection_at_cursor(state);
-         else if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_move_to_first(state);
-
-         // compute current position of cursor point
-         stb_textedit_clamp(str, state);
-         stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
-
-         // can only go up if there's a previous row
-         if (find.prev_first != find.first_char) {
-            // now find character position up a row
-            float goal_x = state->has_preferred_x ? state->preferred_x : find.x;
-            float x;
-            state->cursor = find.prev_first;
-            STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
-            x = row.x0;
-            for (i=0; i < row.num_chars; ++i) {
-               float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i);
-               #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
-               if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
-                  break;
-               #endif
-               x += dx;
-               if (x > goal_x)
-                  break;
-               ++state->cursor;
-            }
-            stb_textedit_clamp(str, state);
-
-            state->has_preferred_x = 1;
-            state->preferred_x = goal_x;
-
-            if (sel)
-               state->select_end = state->cursor;
-         }
-         break;
-      }
-
-      case STB_TEXTEDIT_K_DELETE:
-      case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT:
-         if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_delete_selection(str, state);
-         else {
-            int n = STB_TEXTEDIT_STRINGLEN(str);
-            if (state->cursor < n)
-               stb_textedit_delete(str, state, state->cursor, 1);
-         }
-         state->has_preferred_x = 0;
-         break;
-
-      case STB_TEXTEDIT_K_BACKSPACE:
-      case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT:
-         if (STB_TEXT_HAS_SELECTION(state))
-            stb_textedit_delete_selection(str, state);
-         else {
-            stb_textedit_clamp(str, state);
-            if (state->cursor > 0) {
-               stb_textedit_delete(str, state, state->cursor-1, 1);
-               --state->cursor;
-            }
-         }
-         state->has_preferred_x = 0;
-         break;
-         
-#ifdef STB_TEXTEDIT_K_TEXTSTART2
-      case STB_TEXTEDIT_K_TEXTSTART2:
-#endif
-      case STB_TEXTEDIT_K_TEXTSTART:
-         state->cursor = state->select_start = state->select_end = 0;
-         state->has_preferred_x = 0;
-         break;
-
-#ifdef STB_TEXTEDIT_K_TEXTEND2
-      case STB_TEXTEDIT_K_TEXTEND2:
-#endif
-      case STB_TEXTEDIT_K_TEXTEND:
-         state->cursor = STB_TEXTEDIT_STRINGLEN(str);
-         state->select_start = state->select_end = 0;
-         state->has_preferred_x = 0;
-         break;
-        
-#ifdef STB_TEXTEDIT_K_TEXTSTART2
-      case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT:
-#endif
-      case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT:
-         stb_textedit_prep_selection_at_cursor(state);
-         state->cursor = state->select_end = 0;
-         state->has_preferred_x = 0;
-         break;
-
-#ifdef STB_TEXTEDIT_K_TEXTEND2
-      case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT:
-#endif
-      case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT:
-         stb_textedit_prep_selection_at_cursor(state);
-         state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str);
-         state->has_preferred_x = 0;
-         break;
-
-
-#ifdef STB_TEXTEDIT_K_LINESTART2
-      case STB_TEXTEDIT_K_LINESTART2:
-#endif
-      case STB_TEXTEDIT_K_LINESTART:
-         stb_textedit_clamp(str, state);
-         stb_textedit_move_to_first(state);
-         if (state->single_line)
-            state->cursor = 0;
-         else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
-            --state->cursor;
-         state->has_preferred_x = 0;
-         break;
-
-#ifdef STB_TEXTEDIT_K_LINEEND2
-      case STB_TEXTEDIT_K_LINEEND2:
-#endif
-      case STB_TEXTEDIT_K_LINEEND: {
-         int n = STB_TEXTEDIT_STRINGLEN(str);
-         stb_textedit_clamp(str, state);
-         stb_textedit_move_to_first(state);
-         if (state->single_line)
-             state->cursor = n;
-         else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
-             ++state->cursor;
-         state->has_preferred_x = 0;
-         break;
-      }
-
-#ifdef STB_TEXTEDIT_K_LINESTART2
-      case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT:
-#endif
-      case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT:
-         stb_textedit_clamp(str, state);
-         stb_textedit_prep_selection_at_cursor(state);
-         if (state->single_line)
-            state->cursor = 0;
-         else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
-            --state->cursor;
-         state->select_end = state->cursor;
-         state->has_preferred_x = 0;
-         break;
-
-#ifdef STB_TEXTEDIT_K_LINEEND2
-      case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT:
-#endif
-      case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: {
-         int n = STB_TEXTEDIT_STRINGLEN(str);
-         stb_textedit_clamp(str, state);
-         stb_textedit_prep_selection_at_cursor(state);
-         if (state->single_line)
-             state->cursor = n;
-         else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
-            ++state->cursor;
-         state->select_end = state->cursor;
-         state->has_preferred_x = 0;
-         break;
-      }
-
-// @TODO:
-//    STB_TEXTEDIT_K_PGUP      - move cursor up a page
-//    STB_TEXTEDIT_K_PGDOWN    - move cursor down a page
-   }
-}
-
-/////////////////////////////////////////////////////////////////////////////
-//
-//      Undo processing
-//
-// @OPTIMIZE: the undo/redo buffer should be circular
-
-static void stb_textedit_flush_redo(StbUndoState *state)
-{
-   state->redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
-   state->redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
-}
-
-// discard the oldest entry in the undo list
-static void stb_textedit_discard_undo(StbUndoState *state)
-{
-   if (state->undo_point > 0) {
-      // if the 0th undo state has characters, clean those up
-      if (state->undo_rec[0].char_storage >= 0) {
-         int n = state->undo_rec[0].insert_length, i;
-         // delete n characters from all other records
-         state->undo_char_point -= n;
-         STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE)));
-         for (i=0; i < state->undo_point; ++i)
-            if (state->undo_rec[i].char_storage >= 0)
-               state->undo_rec[i].char_storage -= n; // @OPTIMIZE: get rid of char_storage and infer it
-      }
-      --state->undo_point;
-      STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0])));
-   }
-}
-
-// discard the oldest entry in the redo list--it's bad if this
-// ever happens, but because undo & redo have to store the actual
-// characters in different cases, the redo character buffer can
-// fill up even though the undo buffer didn't
-static void stb_textedit_discard_redo(StbUndoState *state)
-{
-   int k = STB_TEXTEDIT_UNDOSTATECOUNT-1;
-
-   if (state->redo_point <= k) {
-      // if the k'th undo state has characters, clean those up
-      if (state->undo_rec[k].char_storage >= 0) {
-         int n = state->undo_rec[k].insert_length, i;
-         // move the remaining redo character data to the end of the buffer
-         state->redo_char_point += n;
-         STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE)));
-         // adjust the position of all the other records to account for above memmove
-         for (i=state->redo_point; i < k; ++i)
-            if (state->undo_rec[i].char_storage >= 0)
-               state->undo_rec[i].char_storage += n;
-      }
-      // now move all the redo records towards the end of the buffer; the first one is at 'redo_point'
-      // {DEAR IMGUI]
-      size_t move_size = (size_t)((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point - 1) * sizeof(state->undo_rec[0]));
-      const char* buf_begin = (char*)state->undo_rec; (void)buf_begin;
-      const char* buf_end   = (char*)state->undo_rec + sizeof(state->undo_rec); (void)buf_end;
-      IM_ASSERT(((char*)(state->undo_rec + state->redo_point)) >= buf_begin);
-      IM_ASSERT(((char*)(state->undo_rec + state->redo_point + 1) + move_size) <= buf_end);
-      STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point+1, state->undo_rec + state->redo_point, move_size);
-
-      // now move redo_point to point to the new one
-      ++state->redo_point;
-   }
-}
-
-static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars)
-{
-   // any time we create a new undo record, we discard redo
-   stb_textedit_flush_redo(state);
-
-   // if we have no free records, we have to make room, by sliding the
-   // existing records down
-   if (state->undo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
-      stb_textedit_discard_undo(state);
-
-   // if the characters to store won't possibly fit in the buffer, we can't undo
-   if (numchars > STB_TEXTEDIT_UNDOCHARCOUNT) {
-      state->undo_point = 0;
-      state->undo_char_point = 0;
-      return NULL;
-   }
-
-   // if we don't have enough free characters in the buffer, we have to make room
-   while (state->undo_char_point + numchars > STB_TEXTEDIT_UNDOCHARCOUNT)
-      stb_textedit_discard_undo(state);
-
-   return &state->undo_rec[state->undo_point++];
-}
-
-static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len)
-{
-   StbUndoRecord *r = stb_text_create_undo_record(state, insert_len);
-   if (r == NULL)
-      return NULL;
-
-   r->where = pos;
-   r->insert_length = (STB_TEXTEDIT_POSITIONTYPE) insert_len;
-   r->delete_length = (STB_TEXTEDIT_POSITIONTYPE) delete_len;
-
-   if (insert_len == 0) {
-      r->char_storage = -1;
-      return NULL;
-   } else {
-      r->char_storage = state->undo_char_point;
-      state->undo_char_point += insert_len;
-      return &state->undo_char[r->char_storage];
-   }
-}
-
-static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   StbUndoState *s = &state->undostate;
-   StbUndoRecord u, *r;
-   if (s->undo_point == 0)
-      return;
-
-   // we need to do two things: apply the undo record, and create a redo record
-   u = s->undo_rec[s->undo_point-1];
-   r = &s->undo_rec[s->redo_point-1];
-   r->char_storage = -1;
-
-   r->insert_length = u.delete_length;
-   r->delete_length = u.insert_length;
-   r->where = u.where;
-
-   if (u.delete_length) {
-      // if the undo record says to delete characters, then the redo record will
-      // need to re-insert the characters that get deleted, so we need to store
-      // them.
-
-      // there are three cases:
-      //    there's enough room to store the characters
-      //    characters stored for *redoing* don't leave room for redo
-      //    characters stored for *undoing* don't leave room for redo
-      // if the last is true, we have to bail
-
-      if (s->undo_char_point + u.delete_length >= STB_TEXTEDIT_UNDOCHARCOUNT) {
-         // the undo records take up too much character space; there's no space to store the redo characters
-         r->insert_length = 0;
-      } else {
-         int i;
-
-         // there's definitely room to store the characters eventually
-         while (s->undo_char_point + u.delete_length > s->redo_char_point) {
-            // should never happen:
-            if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
-               return;
-            // there's currently not enough room, so discard a redo record
-            stb_textedit_discard_redo(s);
-         }
-         r = &s->undo_rec[s->redo_point-1];
-
-         r->char_storage = s->redo_char_point - u.delete_length;
-         s->redo_char_point = s->redo_char_point - u.delete_length;
-
-         // now save the characters
-         for (i=0; i < u.delete_length; ++i)
-            s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i);
-      }
-
-      // now we can carry out the deletion
-      STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length);
-   }
-
-   // check type of recorded action:
-   if (u.insert_length) {
-      // easy case: was a deletion, so we need to insert n characters
-      STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length);
-      s->undo_char_point -= u.insert_length;
-   }
-
-   state->cursor = u.where + u.insert_length;
-
-   s->undo_point--;
-   s->redo_point--;
-}
-
-static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
-{
-   StbUndoState *s = &state->undostate;
-   StbUndoRecord *u, r;
-   if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
-      return;
-
-   // we need to do two things: apply the redo record, and create an undo record
-   u = &s->undo_rec[s->undo_point];
-   r = s->undo_rec[s->redo_point];
-
-   // we KNOW there must be room for the undo record, because the redo record
-   // was derived from an undo record
-
-   u->delete_length = r.insert_length;
-   u->insert_length = r.delete_length;
-   u->where = r.where;
-   u->char_storage = -1;
-
-   if (r.delete_length) {
-      // the redo record requires us to delete characters, so the undo record
-      // needs to store the characters
-
-      if (s->undo_char_point + u->insert_length > s->redo_char_point) {
-         u->insert_length = 0;
-         u->delete_length = 0;
-      } else {
-         int i;
-         u->char_storage = s->undo_char_point;
-         s->undo_char_point = s->undo_char_point + u->insert_length;
-
-         // now save the characters
-         for (i=0; i < u->insert_length; ++i)
-            s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i);
-      }
-
-      STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length);
-   }
-
-   if (r.insert_length) {
-      // easy case: need to insert n characters
-      STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length);
-      s->redo_char_point += r.insert_length;
-   }
-
-   state->cursor = r.where + r.insert_length;
-
-   s->undo_point++;
-   s->redo_point++;
-}
-
-static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length)
-{
-   stb_text_createundo(&state->undostate, where, 0, length);
-}
-
-static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length)
-{
-   int i;
-   STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0);
-   if (p) {
-      for (i=0; i < length; ++i)
-         p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
-   }
-}
-
-static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length)
-{
-   int i;
-   STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length);
-   if (p) {
-      for (i=0; i < old_length; ++i)
-         p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
-   }
-}
-
-// reset the state to default
-static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line)
-{
-   state->undostate.undo_point = 0;
-   state->undostate.undo_char_point = 0;
-   state->undostate.redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
-   state->undostate.redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
-   state->select_end = state->select_start = 0;
-   state->cursor = 0;
-   state->has_preferred_x = 0;
-   state->preferred_x = 0;
-   state->cursor_at_end_of_line = 0;
-   state->initialized = 1;
-   state->single_line = (unsigned char) is_single_line;
-   state->insert_mode = 0;
-}
-
-// API initialize
-static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
-{
-   stb_textedit_clear_state(state, is_single_line);
-}
-
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wcast-qual"
-#endif
-
-static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len)
-{
-   return stb_textedit_paste_internal(str, state, (STB_TEXTEDIT_CHARTYPE *) ctext, len);
-}
-
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
-#endif//STB_TEXTEDIT_IMPLEMENTATION
-
-/*
-------------------------------------------------------------------------------
-This software is available under 2 licenses -- choose whichever you prefer.
-------------------------------------------------------------------------------
-ALTERNATIVE A - MIT License
-Copyright (c) 2017 Sean Barrett
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files (the "Software"), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
-of the Software, and to permit persons to whom the Software is furnished to do 
-so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
-SOFTWARE.
-------------------------------------------------------------------------------
-ALTERNATIVE B - Public Domain (www.unlicense.org)
-This is free and unencumbered software released into the public domain.
-Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
-software, either in source code form or as a compiled binary, for any purpose, 
-commercial or non-commercial, and by any means.
-In jurisdictions that recognize copyright laws, the author or authors of this 
-software dedicate any and all copyright interest in the software to the public 
-domain. We make this dedication for the benefit of the public at large and to 
-the detriment of our heirs and successors. We intend this dedication to be an 
-overt act of relinquishment in perpetuity of all present and future rights to 
-this software under copyright law.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-------------------------------------------------------------------------------
-*/
--- a/DoConfig/new/imgui/imstb_truetype.h
+++ /dev/null
@@ -1,4903 +1,0 @@
-// [DEAR IMGUI]
-// This is a slightly modified version of stb_truetype.h 1.20.
-// Mostly fixing for compiler and static analyzer warnings.
-// Grep for [DEAR IMGUI] to find the changes.
-
-// stb_truetype.h - v1.20 - public domain
-// authored from 2009-2016 by Sean Barrett / RAD Game Tools
-//
-//   This library processes TrueType files:
-//        parse files
-//        extract glyph metrics
-//        extract glyph shapes
-//        render glyphs to one-channel bitmaps with antialiasing (box filter)
-//        render glyphs to one-channel SDF bitmaps (signed-distance field/function)
-//
-//   Todo:
-//        non-MS cmaps
-//        crashproof on bad data
-//        hinting? (no longer patented)
-//        cleartype-style AA?
-//        optimize: use simple memory allocator for intermediates
-//        optimize: build edge-list directly from curves
-//        optimize: rasterize directly from curves?
-//
-// ADDITIONAL CONTRIBUTORS
-//
-//   Mikko Mononen: compound shape support, more cmap formats
-//   Tor Andersson: kerning, subpixel rendering
-//   Dougall Johnson: OpenType / Type 2 font handling
-//   Daniel Ribeiro Maciel: basic GPOS-based kerning
-//
-//   Misc other:
-//       Ryan Gordon
-//       Simon Glass
-//       github:IntellectualKitty
-//       Imanol Celaya
-//       Daniel Ribeiro Maciel
-//
-//   Bug/warning reports/fixes:
-//       "Zer" on mollyrocket       Fabian "ryg" Giesen
-//       Cass Everitt               Martins Mozeiko
-//       stoiko (Haemimont Games)   Cap Petschulat
-//       Brian Hook                 Omar Cornut
-//       Walter van Niftrik         github:aloucks
-//       David Gow                  Peter LaValle
-//       David Given                Sergey Popov
-//       Ivan-Assen Ivanov          Giumo X. Clanjor
-//       Anthony Pesch              Higor Euripedes
-//       Johan Duparc               Thomas Fields
-//       Hou Qiming                 Derek Vinyard
-//       Rob Loach                  Cort Stratton
-//       Kenney Phillis Jr.         github:oyvindjam
-//       Brian Costabile            github:vassvik
-//       
-// VERSION HISTORY
-//
-//   1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
-//   1.19 (2018-02-11) GPOS kerning, STBTT_fmod
-//   1.18 (2018-01-29) add missing function
-//   1.17 (2017-07-23) make more arguments const; doc fix
-//   1.16 (2017-07-12) SDF support
-//   1.15 (2017-03-03) make more arguments const
-//   1.14 (2017-01-16) num-fonts-in-TTC function
-//   1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
-//   1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
-//   1.11 (2016-04-02) fix unused-variable warning
-//   1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef
-//   1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly
-//   1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
-//   1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
-//                     variant PackFontRanges to pack and render in separate phases;
-//                     fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
-//                     fixed an assert() bug in the new rasterizer
-//                     replace assert() with STBTT_assert() in new rasterizer
-//
-//   Full history can be found at the end of this file.
-//
-// LICENSE
-//
-//   See end of file for license information.
-//
-// USAGE
-//
-//   Include this file in whatever places need to refer to it. In ONE C/C++
-//   file, write:
-//      #define STB_TRUETYPE_IMPLEMENTATION
-//   before the #include of this file. This expands out the actual
-//   implementation into that C/C++ file.
-//
-//   To make the implementation private to the file that generates the implementation,
-//      #define STBTT_STATIC
-//
-//   Simple 3D API (don't ship this, but it's fine for tools and quick start)
-//           stbtt_BakeFontBitmap()               -- bake a font to a bitmap for use as texture
-//           stbtt_GetBakedQuad()                 -- compute quad to draw for a given char
-//
-//   Improved 3D API (more shippable):
-//           #include "stb_rect_pack.h"           -- optional, but you really want it
-//           stbtt_PackBegin()
-//           stbtt_PackSetOversampling()          -- for improved quality on small fonts
-//           stbtt_PackFontRanges()               -- pack and renders
-//           stbtt_PackEnd()
-//           stbtt_GetPackedQuad()
-//
-//   "Load" a font file from a memory buffer (you have to keep the buffer loaded)
-//           stbtt_InitFont()
-//           stbtt_GetFontOffsetForIndex()        -- indexing for TTC font collections
-//           stbtt_GetNumberOfFonts()             -- number of fonts for TTC font collections
-//
-//   Render a unicode codepoint to a bitmap
-//           stbtt_GetCodepointBitmap()           -- allocates and returns a bitmap
-//           stbtt_MakeCodepointBitmap()          -- renders into bitmap you provide
-//           stbtt_GetCodepointBitmapBox()        -- how big the bitmap must be
-//
-//   Character advance/positioning
-//           stbtt_GetCodepointHMetrics()
-//           stbtt_GetFontVMetrics()
-//           stbtt_GetFontVMetricsOS2()
-//           stbtt_GetCodepointKernAdvance()
-//
-//   Starting with version 1.06, the rasterizer was replaced with a new,
-//   faster and generally-more-precise rasterizer. The new rasterizer more
-//   accurately measures pixel coverage for anti-aliasing, except in the case
-//   where multiple shapes overlap, in which case it overestimates the AA pixel
-//   coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If
-//   this turns out to be a problem, you can re-enable the old rasterizer with
-//        #define STBTT_RASTERIZER_VERSION 1
-//   which will incur about a 15% speed hit.
-//
-// ADDITIONAL DOCUMENTATION
-//
-//   Immediately after this block comment are a series of sample programs.
-//
-//   After the sample programs is the "header file" section. This section
-//   includes documentation for each API function.
-//
-//   Some important concepts to understand to use this library:
-//
-//      Codepoint
-//         Characters are defined by unicode codepoints, e.g. 65 is
-//         uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is
-//         the hiragana for "ma".
-//
-//      Glyph
-//         A visual character shape (every codepoint is rendered as
-//         some glyph)
-//
-//      Glyph index
-//         A font-specific integer ID representing a glyph
-//
-//      Baseline
-//         Glyph shapes are defined relative to a baseline, which is the
-//         bottom of uppercase characters. Characters extend both above
-//         and below the baseline.
-//
-//      Current Point
-//         As you draw text to the screen, you keep track of a "current point"
-//         which is the origin of each character. The current point's vertical
-//         position is the baseline. Even "baked fonts" use this model.
-//
-//      Vertical Font Metrics
-//         The vertical qualities of the font, used to vertically position
-//         and space the characters. See docs for stbtt_GetFontVMetrics.
-//
-//      Font Size in Pixels or Points
-//         The preferred interface for specifying font sizes in stb_truetype
-//         is to specify how tall the font's vertical extent should be in pixels.
-//         If that sounds good enough, skip the next paragraph.
-//
-//         Most font APIs instead use "points", which are a common typographic
-//         measurement for describing font size, defined as 72 points per inch.
-//         stb_truetype provides a point API for compatibility. However, true
-//         "per inch" conventions don't make much sense on computer displays
-//         since different monitors have different number of pixels per
-//         inch. For example, Windows traditionally uses a convention that
-//         there are 96 pixels per inch, thus making 'inch' measurements have
-//         nothing to do with inches, and thus effectively defining a point to
-//         be 1.333 pixels. Additionally, the TrueType font data provides
-//         an explicit scale factor to scale a given font's glyphs to points,
-//         but the author has observed that this scale factor is often wrong
-//         for non-commercial fonts, thus making fonts scaled in points
-//         according to the TrueType spec incoherently sized in practice.
-//
-// DETAILED USAGE:
-//
-//  Scale:
-//    Select how high you want the font to be, in points or pixels.
-//    Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute
-//    a scale factor SF that will be used by all other functions.
-//
-//  Baseline:
-//    You need to select a y-coordinate that is the baseline of where
-//    your text will appear. Call GetFontBoundingBox to get the baseline-relative
-//    bounding box for all characters. SF*-y0 will be the distance in pixels
-//    that the worst-case character could extend above the baseline, so if
-//    you want the top edge of characters to appear at the top of the
-//    screen where y=0, then you would set the baseline to SF*-y0.
-//
-//  Current point:
-//    Set the current point where the first character will appear. The
-//    first character could extend left of the current point; this is font
-//    dependent. You can either choose a current point that is the leftmost
-//    point and hope, or add some padding, or check the bounding box or
-//    left-side-bearing of the first character to be displayed and set
-//    the current point based on that.
-//
-//  Displaying a character:
-//    Compute the bounding box of the character. It will contain signed values
-//    relative to <current_point, baseline>. I.e. if it returns x0,y0,x1,y1,
-//    then the character should be displayed in the rectangle from
-//    <current_point+SF*x0, baseline+SF*y0> to <current_point+SF*x1,baseline+SF*y1).
-//
-//  Advancing for the next character:
-//    Call GlyphHMetrics, and compute 'current_point += SF * advance'.
-// 
-//
-// ADVANCED USAGE
-//
-//   Quality:
-//
-//    - Use the functions with Subpixel at the end to allow your characters
-//      to have subpixel positioning. Since the font is anti-aliased, not
-//      hinted, this is very import for quality. (This is not possible with
-//      baked fonts.)
-//
-//    - Kerning is now supported, and if you're supporting subpixel rendering
-//      then kerning is worth using to give your text a polished look.
-//
-//   Performance:
-//
-//    - Convert Unicode codepoints to glyph indexes and operate on the glyphs;
-//      if you don't do this, stb_truetype is forced to do the conversion on
-//      every call.
-//
-//    - There are a lot of memory allocations. We should modify it to take
-//      a temp buffer and allocate from the temp buffer (without freeing),
-//      should help performance a lot.
-//
-// NOTES
-//
-//   The system uses the raw data found in the .ttf file without changing it
-//   and without building auxiliary data structures. This is a bit inefficient
-//   on little-endian systems (the data is big-endian), but assuming you're
-//   caching the bitmaps or glyph shapes this shouldn't be a big deal.
-//
-//   It appears to be very hard to programmatically determine what font a
-//   given file is in a general way. I provide an API for this, but I don't
-//   recommend it.
-//
-//
-// SOURCE STATISTICS (based on v0.6c, 2050 LOC)
-//
-//   Documentation & header file        520 LOC  \___ 660 LOC documentation
-//   Sample code                        140 LOC  /
-//   Truetype parsing                   620 LOC  ---- 620 LOC TrueType
-//   Software rasterization             240 LOC  \.
-//   Curve tessellation                 120 LOC   \__ 550 LOC Bitmap creation
-//   Bitmap management                  100 LOC   /
-//   Baked bitmap interface              70 LOC  /
-//   Font name matching & access        150 LOC  ---- 150 
-//   C runtime library abstraction       60 LOC  ----  60
-//
-//
-// PERFORMANCE MEASUREMENTS FOR 1.06:
-//
-//                      32-bit     64-bit
-//   Previous release:  8.83 s     7.68 s
-//   Pool allocations:  7.72 s     6.34 s
-//   Inline sort     :  6.54 s     5.65 s
-//   New rasterizer  :  5.63 s     5.00 s
-
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-////
-////  SAMPLE PROGRAMS
-////
-//
-//  Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless
-//
-#if 0
-#define STB_TRUETYPE_IMPLEMENTATION  // force following include to generate implementation
-#include "stb_truetype.h"
-
-unsigned char ttf_buffer[1<<20];
-unsigned char temp_bitmap[512*512];
-
-stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs
-GLuint ftex;
-
-void my_stbtt_initfont(void)
-{
-   fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb"));
-   stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits!
-   // can free ttf_buffer at this point
-   glGenTextures(1, &ftex);
-   glBindTexture(GL_TEXTURE_2D, ftex);
-   glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap);
-   // can free temp_bitmap at this point
-   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-}
-
-void my_stbtt_print(float x, float y, char *text)
-{
-   // assume orthographic projection with units = screen pixels, origin at top left
-   glEnable(GL_TEXTURE_2D);
-   glBindTexture(GL_TEXTURE_2D, ftex);
-   glBegin(GL_QUADS);
-   while (*text) {
-      if (*text >= 32 && *text < 128) {
-         stbtt_aligned_quad q;
-         stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9
-         glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0);
-         glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0);
-         glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1);
-         glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1);
-      }
-      ++text;
-   }
-   glEnd();
-}
-#endif
-//
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-// Complete program (this compiles): get a single bitmap, print as ASCII art
-//
-#if 0
-#include <stdio.h>
-#define STB_TRUETYPE_IMPLEMENTATION  // force following include to generate implementation
-#include "stb_truetype.h"
-
-char ttf_buffer[1<<25];
-
-int main(int argc, char **argv)
-{
-   stbtt_fontinfo font;
-   unsigned char *bitmap;
-   int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20);
-
-   fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb"));
-
-   stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));
-   bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0);
-
-   for (j=0; j < h; ++j) {
-      for (i=0; i < w; ++i)
-         putchar(" .:ioVM@"[bitmap[j*w+i]>>5]);
-      putchar('\n');
-   }
-   return 0;
-}
-#endif 
-//
-// Output:
-//
-//     .ii.
-//    @@@@@@.
-//   V@Mio@@o
-//   :i.  V@V
-//     :oM@@M
-//   :@@@MM@M
-//   @@o  o@M
-//  :@@.  M@M
-//   @@@o@@@@
-//   :M@@V:@@.
-//  
-//////////////////////////////////////////////////////////////////////////////
-// 
-// Complete program: print "Hello World!" banner, with bugs
-//
-#if 0
-char buffer[24<<20];
-unsigned char screen[20][79];
-
-int main(int arg, char **argv)
-{
-   stbtt_fontinfo font;
-   int i,j,ascent,baseline,ch=0;
-   float scale, xpos=2; // leave a little padding in case the character extends left
-   char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness
-
-   fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb"));
-   stbtt_InitFont(&font, buffer, 0);
-
-   scale = stbtt_ScaleForPixelHeight(&font, 15);
-   stbtt_GetFontVMetrics(&font, &ascent,0,0);
-   baseline = (int) (ascent*scale);
-
-   while (text[ch]) {
-      int advance,lsb,x0,y0,x1,y1;
-      float x_shift = xpos - (float) floor(xpos);
-      stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb);
-      stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1);
-      stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]);
-      // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong
-      // because this API is really for baking character bitmaps into textures. if you want to render
-      // a sequence of characters, you really need to render each bitmap to a temp buffer, then
-      // "alpha blend" that into the working buffer
-      xpos += (advance * scale);
-      if (text[ch+1])
-         xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]);
-      ++ch;
-   }
-
-   for (j=0; j < 20; ++j) {
-      for (i=0; i < 78; ++i)
-         putchar(" .:ioVM@"[screen[j][i]>>5]);
-      putchar('\n');
-   }
-
-   return 0;
-}
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////////
-////
-////   INTEGRATION WITH YOUR CODEBASE
-////
-////   The following sections allow you to supply alternate definitions
-////   of C library functions used by stb_truetype, e.g. if you don't
-////   link with the C runtime library.
-
-#ifdef STB_TRUETYPE_IMPLEMENTATION
-   // #define your own (u)stbtt_int8/16/32 before including to override this
-   #ifndef stbtt_uint8
-   typedef unsigned char   stbtt_uint8;
-   typedef signed   char   stbtt_int8;
-   typedef unsigned short  stbtt_uint16;
-   typedef signed   short  stbtt_int16;
-   typedef unsigned int    stbtt_uint32;
-   typedef signed   int    stbtt_int32;
-   #endif
-
-   typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1];
-   typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1];
-
-   // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h
-   #ifndef STBTT_ifloor
-   #include <math.h>
-   #define STBTT_ifloor(x)   ((int) floor(x))
-   #define STBTT_iceil(x)    ((int) ceil(x))
-   #endif
-
-   #ifndef STBTT_sqrt
-   #include <math.h>
-   #define STBTT_sqrt(x)      sqrt(x)
-   #define STBTT_pow(x,y)     pow(x,y)
-   #endif
-
-   #ifndef STBTT_fmod
-   #include <math.h>
-   #define STBTT_fmod(x,y)    fmod(x,y)
-   #endif
-
-   #ifndef STBTT_cos
-   #include <math.h>
-   #define STBTT_cos(x)       cos(x)
-   #define STBTT_acos(x)      acos(x)
-   #endif
-
-   #ifndef STBTT_fabs
-   #include <math.h>
-   #define STBTT_fabs(x)      fabs(x)
-   #endif
-
-   // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h
-   #ifndef STBTT_malloc
-   #include <stdlib.h>
-   #define STBTT_malloc(x,u)  ((void)(u),malloc(x))
-   #define STBTT_free(x,u)    ((void)(u),free(x))
-   #endif
-
-   #ifndef STBTT_assert
-   #include <assert.h>
-   #define STBTT_assert(x)    assert(x)
-   #endif
-
-   #ifndef STBTT_strlen
-   #include <string.h>
-   #define STBTT_strlen(x)    strlen(x)
-   #endif
-
-   #ifndef STBTT_memcpy
-   #include <string.h>
-   #define STBTT_memcpy       memcpy
-   #define STBTT_memset       memset
-   #endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-////
-////   INTERFACE
-////
-////
-
-#ifndef __STB_INCLUDE_STB_TRUETYPE_H__
-#define __STB_INCLUDE_STB_TRUETYPE_H__
-
-#ifdef STBTT_STATIC
-#define STBTT_DEF static
-#else
-#define STBTT_DEF extern
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// private structure
-typedef struct
-{
-   unsigned char *data;
-   int cursor;
-   int size;
-} stbtt__buf;
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// TEXTURE BAKING API
-//
-// If you use this API, you only have to call two functions ever.
-//
-
-typedef struct
-{
-   unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
-   float xoff,yoff,xadvance;
-} stbtt_bakedchar;
-
-STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,  // font location (use offset=0 for plain .ttf)
-                                float pixel_height,                     // height of font in pixels
-                                unsigned char *pixels, int pw, int ph,  // bitmap to be filled in
-                                int first_char, int num_chars,          // characters to bake
-                                stbtt_bakedchar *chardata);             // you allocate this, it's num_chars long
-// if return is positive, the first unused row of the bitmap
-// if return is negative, returns the negative of the number of characters that fit
-// if return is 0, no characters fit and no rows were used
-// This uses a very crappy packing.
-
-typedef struct
-{
-   float x0,y0,s0,t0; // top-left
-   float x1,y1,s1,t1; // bottom-right
-} stbtt_aligned_quad;
-
-STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph,  // same data as above
-                               int char_index,             // character to display
-                               float *xpos, float *ypos,   // pointers to current position in screen pixel space
-                               stbtt_aligned_quad *q,      // output: quad to draw
-                               int opengl_fillrule);       // true if opengl fill rule; false if DX9 or earlier
-// Call GetBakedQuad with char_index = 'character - first_char', and it
-// creates the quad you need to draw and advances the current position.
-//
-// The coordinate system used assumes y increases downwards.
-//
-// Characters will extend both above and below the current position;
-// see discussion of "BASELINE" above.
-//
-// It's inefficient; you might want to c&p it and optimize it.
-
-STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap);
-// Query the font vertical metrics without having to create a font first.
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// NEW TEXTURE BAKING API
-//
-// This provides options for packing multiple fonts into one atlas, not
-// perfectly but better than nothing.
-
-typedef struct
-{
-   unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
-   float xoff,yoff,xadvance;
-   float xoff2,yoff2;
-} stbtt_packedchar;
-
-typedef struct stbtt_pack_context stbtt_pack_context;
-typedef struct stbtt_fontinfo stbtt_fontinfo;
-#ifndef STB_RECT_PACK_VERSION
-typedef struct stbrp_rect stbrp_rect;
-#endif
-
-STBTT_DEF int  stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context);
-// Initializes a packing context stored in the passed-in stbtt_pack_context.
-// Future calls using this context will pack characters into the bitmap passed
-// in here: a 1-channel bitmap that is width * height. stride_in_bytes is
-// the distance from one row to the next (or 0 to mean they are packed tightly
-// together). "padding" is the amount of padding to leave between each
-// character (normally you want '1' for bitmaps you'll use as textures with
-// bilinear filtering).
-//
-// Returns 0 on failure, 1 on success.
-
-STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc);
-// Cleans up the packing context and frees all memory.
-
-#define STBTT_POINT_SIZE(x)   (-(x))
-
-STBTT_DEF int  stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
-                                int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range);
-// Creates character bitmaps from the font_index'th font found in fontdata (use
-// font_index=0 if you don't know what that is). It creates num_chars_in_range
-// bitmaps for characters with unicode values starting at first_unicode_char_in_range
-// and increasing. Data for how to render them is stored in chardata_for_range;
-// pass these to stbtt_GetPackedQuad to get back renderable quads.
-//
-// font_size is the full height of the character from ascender to descender,
-// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed
-// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE()
-// and pass that result as 'font_size':
-//       ...,                  20 , ... // font max minus min y is 20 pixels tall
-//       ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall
-
-typedef struct
-{
-   float font_size;
-   int first_unicode_codepoint_in_range;  // if non-zero, then the chars are continuous, and this is the first codepoint
-   int *array_of_unicode_codepoints;       // if non-zero, then this is an array of unicode codepoints
-   int num_chars;
-   stbtt_packedchar *chardata_for_range; // output
-   unsigned char h_oversample, v_oversample; // don't set these, they're used internally
-} stbtt_pack_range;
-
-STBTT_DEF int  stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges);
-// Creates character bitmaps from multiple ranges of characters stored in
-// ranges. This will usually create a better-packed bitmap than multiple
-// calls to stbtt_PackFontRange. Note that you can call this multiple
-// times within a single PackBegin/PackEnd.
-
-STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample);
-// Oversampling a font increases the quality by allowing higher-quality subpixel
-// positioning, and is especially valuable at smaller text sizes.
-//
-// This function sets the amount of oversampling for all following calls to
-// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given
-// pack context. The default (no oversampling) is achieved by h_oversample=1
-// and v_oversample=1. The total number of pixels required is
-// h_oversample*v_oversample larger than the default; for example, 2x2
-// oversampling requires 4x the storage of 1x1. For best results, render
-// oversampled textures with bilinear filtering. Look at the readme in
-// stb/tests/oversample for information about oversampled fonts
-//
-// To use with PackFontRangesGather etc., you must set it before calls
-// call to PackFontRangesGatherRects.
-
-STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip);
-// If skip != 0, this tells stb_truetype to skip any codepoints for which
-// there is no corresponding glyph. If skip=0, which is the default, then
-// codepoints without a glyph recived the font's "missing character" glyph,
-// typically an empty box by convention.
-
-STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph,  // same data as above
-                               int char_index,             // character to display
-                               float *xpos, float *ypos,   // pointers to current position in screen pixel space
-                               stbtt_aligned_quad *q,      // output: quad to draw
-                               int align_to_integer);
-
-STBTT_DEF int  stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
-STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects);
-STBTT_DEF int  stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
-// Calling these functions in sequence is roughly equivalent to calling
-// stbtt_PackFontRanges(). If you more control over the packing of multiple
-// fonts, or if you want to pack custom data into a font texture, take a look
-// at the source to of stbtt_PackFontRanges() and create a custom version 
-// using these functions, e.g. call GatherRects multiple times,
-// building up a single array of rects, then call PackRects once,
-// then call RenderIntoRects repeatedly. This may result in a
-// better packing than calling PackFontRanges multiple times
-// (or it may not).
-
-// this is an opaque structure that you shouldn't mess with which holds
-// all the context needed from PackBegin to PackEnd.
-struct stbtt_pack_context {
-   void *user_allocator_context;
-   void *pack_info;
-   int   width;
-   int   height;
-   int   stride_in_bytes;
-   int   padding;
-   int   skip_missing;
-   unsigned int   h_oversample, v_oversample;
-   unsigned char *pixels;
-   void  *nodes;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// FONT LOADING
-//
-//
-
-STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data);
-// This function will determine the number of fonts in a font file.  TrueType
-// collection (.ttc) files may contain multiple fonts, while TrueType font
-// (.ttf) files only contain one font. The number of fonts can be used for
-// indexing with the previous function where the index is between zero and one
-// less than the total fonts. If an error occurs, -1 is returned.
-
-STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index);
-// Each .ttf/.ttc file may have more than one font. Each font has a sequential
-// index number starting from 0. Call this function to get the font offset for
-// a given index; it returns -1 if the index is out of range. A regular .ttf
-// file will only define one font and it always be at offset 0, so it will
-// return '0' for index 0, and -1 for all other indices.
-
-// The following structure is defined publicly so you can declare one on
-// the stack or as a global or etc, but you should treat it as opaque.
-struct stbtt_fontinfo
-{
-   void           * userdata;
-   unsigned char  * data;              // pointer to .ttf file
-   int              fontstart;         // offset of start of font
-
-   int numGlyphs;                     // number of glyphs, needed for range checking
-
-   int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf
-   int index_map;                     // a cmap mapping for our chosen character encoding
-   int indexToLocFormat;              // format needed to map from glyph index to glyph
-
-   stbtt__buf cff;                    // cff font data
-   stbtt__buf charstrings;            // the charstring index
-   stbtt__buf gsubrs;                 // global charstring subroutines index
-   stbtt__buf subrs;                  // private charstring subroutines index
-   stbtt__buf fontdicts;              // array of font dicts
-   stbtt__buf fdselect;               // map from glyph to fontdict
-};
-
-STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset);
-// Given an offset into the file that defines a font, this function builds
-// the necessary cached info for the rest of the system. You must allocate
-// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't
-// need to do anything special to free it, because the contents are pure
-// value data with no additional data structures. Returns 0 on failure.
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CHARACTER TO GLYPH-INDEX CONVERSIOn
-
-STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint);
-// If you're going to perform multiple operations on the same character
-// and you want a speed-up, call this function with the character you're
-// going to process, then use glyph-based functions instead of the
-// codepoint-based functions.
-// Returns 0 if the character codepoint is not defined in the font.
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// CHARACTER PROPERTIES
-//
-
-STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels);
-// computes a scale factor to produce a font whose "height" is 'pixels' tall.
-// Height is measured as the distance from the highest ascender to the lowest
-// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics
-// and computing:
-//       scale = pixels / (ascent - descent)
-// so if you prefer to measure height by the ascent only, use a similar calculation.
-
-STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels);
-// computes a scale factor to produce a font whose EM size is mapped to
-// 'pixels' tall. This is probably what traditional APIs compute, but
-// I'm not positive.
-
-STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap);
-// ascent is the coordinate above the baseline the font extends; descent
-// is the coordinate below the baseline the font extends (i.e. it is typically negative)
-// lineGap is the spacing between one row's descent and the next row's ascent...
-// so you should advance the vertical position by "*ascent - *descent + *lineGap"
-//   these are expressed in unscaled coordinates, so you must multiply by
-//   the scale factor for a given size
-
-STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap);
-// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2
-// table (specific to MS/Windows TTF files).
-//
-// Returns 1 on success (table present), 0 on failure.
-
-STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1);
-// the bounding box around all possible characters
-
-STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing);
-// leftSideBearing is the offset from the current horizontal position to the left edge of the character
-// advanceWidth is the offset from the current horizontal position to the next horizontal position
-//   these are expressed in unscaled coordinates
-
-STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2);
-// an additional amount to add to the 'advance' value between ch1 and ch2
-
-STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1);
-// Gets the bounding box of the visible part of the glyph, in unscaled coordinates
-
-STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing);
-STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2);
-STBTT_DEF int  stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
-// as above, but takes one or more glyph indices for greater efficiency
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// GLYPH SHAPES (you probably don't need these, but they have to go before
-// the bitmaps for C declaration-order reasons)
-//
-
-#ifndef STBTT_vmove // you can predefine these to use different values (but why?)
-   enum {
-      STBTT_vmove=1,
-      STBTT_vline,
-      STBTT_vcurve,
-      STBTT_vcubic
-   };
-#endif
-
-#ifndef stbtt_vertex // you can predefine this to use different values
-                   // (we share this with other code at RAD)
-   #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file
-   typedef struct
-   {
-      stbtt_vertex_type x,y,cx,cy,cx1,cy1;
-      unsigned char type,padding;
-   } stbtt_vertex;
-#endif
-
-STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index);
-// returns non-zero if nothing is drawn for this glyph
-
-STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices);
-STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices);
-// returns # of vertices and fills *vertices with the pointer to them
-//   these are expressed in "unscaled" coordinates
-//
-// The shape is a series of contours. Each one starts with
-// a STBTT_moveto, then consists of a series of mixed
-// STBTT_lineto and STBTT_curveto segments. A lineto
-// draws a line from previous endpoint to its x,y; a curveto
-// draws a quadratic bezier from previous endpoint to
-// its x,y, using cx,cy as the bezier control point.
-
-STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices);
-// frees the data allocated above
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// BITMAP RENDERING
-//
-
-STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata);
-// frees the bitmap allocated below
-
-STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
-// allocates a large-enough single-channel 8bpp bitmap and renders the
-// specified character/glyph at the specified scale into it, with
-// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque).
-// *width & *height are filled out with the width & height of the bitmap,
-// which is stored left-to-right, top-to-bottom.
-//
-// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap
-
-STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
-// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel
-// shift for the character
-
-STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint);
-// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap
-// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap
-// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the
-// width and height and positioning info for it first.
-
-STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint);
-// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel
-// shift for the character
-
-STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint);
-// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering
-// is performed (see stbtt_PackSetOversampling)
-
-STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
-// get the bbox of the bitmap centered around the glyph origin; so the
-// bitmap width is ix1-ix0, height is iy1-iy0, and location to place
-// the bitmap top left is (leftSideBearing*scale,iy0).
-// (Note that the bitmap uses y-increases-down, but the shape uses
-// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.)
-
-STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
-// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel
-// shift for the character
-
-// the following functions are equivalent to the above functions, but operate
-// on glyph indices instead of Unicode codepoints (for efficiency)
-STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff);
-STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff);
-STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph);
-STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph);
-STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph);
-STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
-STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
-
-
-// @TODO: don't expose this structure
-typedef struct
-{
-   int w,h,stride;
-   unsigned char *pixels;
-} stbtt__bitmap;
-
-// rasterize a shape with quadratic beziers into a bitmap
-STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result,        // 1-channel bitmap to draw into
-                               float flatness_in_pixels,     // allowable error of curve in pixels
-                               stbtt_vertex *vertices,       // array of vertices defining shape
-                               int num_verts,                // number of vertices in above array
-                               float scale_x, float scale_y, // scale applied to input vertices
-                               float shift_x, float shift_y, // translation applied to input vertices
-                               int x_off, int y_off,         // another translation applied to input
-                               int invert,                   // if non-zero, vertically flip shape
-                               void *userdata);              // context for to STBTT_MALLOC
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Signed Distance Function (or Field) rendering
-
-STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata);
-// frees the SDF bitmap allocated below
-
-STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
-STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
-// These functions compute a discretized SDF field for a single character, suitable for storing
-// in a single-channel texture, sampling with bilinear filtering, and testing against
-// larger than some threshold to produce scalable fonts.
-//        info              --  the font
-//        scale             --  controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap
-//        glyph/codepoint   --  the character to generate the SDF for
-//        padding           --  extra "pixels" around the character which are filled with the distance to the character (not 0),
-//                                 which allows effects like bit outlines
-//        onedge_value      --  value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character)
-//        pixel_dist_scale  --  what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale)
-//                                 if positive, > onedge_value is inside; if negative, < onedge_value is inside
-//        width,height      --  output height & width of the SDF bitmap (including padding)
-//        xoff,yoff         --  output origin of the character
-//        return value      --  a 2D array of bytes 0..255, width*height in size
-//
-// pixel_dist_scale & onedge_value are a scale & bias that allows you to make
-// optimal use of the limited 0..255 for your application, trading off precision
-// and special effects. SDF values outside the range 0..255 are clamped to 0..255.
-//
-// Example:
-//      scale = stbtt_ScaleForPixelHeight(22)
-//      padding = 5
-//      onedge_value = 180
-//      pixel_dist_scale = 180/5.0 = 36.0
-//
-//      This will create an SDF bitmap in which the character is about 22 pixels
-//      high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled
-//      shape, sample the SDF at each pixel and fill the pixel if the SDF value
-//      is greater than or equal to 180/255. (You'll actually want to antialias,
-//      which is beyond the scope of this example.) Additionally, you can compute
-//      offset outlines (e.g. to stroke the character border inside & outside,
-//      or only outside). For example, to fill outside the character up to 3 SDF
-//      pixels, you would compare against (180-36.0*3)/255 = 72/255. The above
-//      choice of variables maps a range from 5 pixels outside the shape to
-//      2 pixels inside the shape to 0..255; this is intended primarily for apply
-//      outside effects only (the interior range is needed to allow proper
-//      antialiasing of the font at *smaller* sizes)
-//
-// The function computes the SDF analytically at each SDF pixel, not by e.g.
-// building a higher-res bitmap and approximating it. In theory the quality
-// should be as high as possible for an SDF of this size & representation, but
-// unclear if this is true in practice (perhaps building a higher-res bitmap
-// and computing from that can allow drop-out prevention).
-//
-// The algorithm has not been optimized at all, so expect it to be slow
-// if computing lots of characters or very large sizes. 
-
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// Finding the right font...
-//
-// You should really just solve this offline, keep your own tables
-// of what font is what, and don't try to get it out of the .ttf file.
-// That's because getting it out of the .ttf file is really hard, because
-// the names in the file can appear in many possible encodings, in many
-// possible languages, and e.g. if you need a case-insensitive comparison,
-// the details of that depend on the encoding & language in a complex way
-// (actually underspecified in truetype, but also gigantic).
-//
-// But you can use the provided functions in two possible ways:
-//     stbtt_FindMatchingFont() will use *case-sensitive* comparisons on
-//             unicode-encoded names to try to find the font you want;
-//             you can run this before calling stbtt_InitFont()
-//
-//     stbtt_GetFontNameString() lets you get any of the various strings
-//             from the file yourself and do your own comparisons on them.
-//             You have to have called stbtt_InitFont() first.
-
-
-STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags);
-// returns the offset (not index) of the font that matches, or -1 if none
-//   if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold".
-//   if you use any other flag, use a font name like "Arial"; this checks
-//     the 'macStyle' header field; i don't know if fonts set this consistently
-#define STBTT_MACSTYLE_DONTCARE     0
-#define STBTT_MACSTYLE_BOLD         1
-#define STBTT_MACSTYLE_ITALIC       2
-#define STBTT_MACSTYLE_UNDERSCORE   4
-#define STBTT_MACSTYLE_NONE         8   // <= not same as 0, this makes us check the bitfield is 0
-
-STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2);
-// returns 1/0 whether the first string interpreted as utf8 is identical to
-// the second string interpreted as big-endian utf16... useful for strings from next func
-
-STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID);
-// returns the string (which may be big-endian double byte, e.g. for unicode)
-// and puts the length in bytes in *length.
-//
-// some of the values for the IDs are below; for more see the truetype spec:
-//     http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html
-//     http://www.microsoft.com/typography/otspec/name.htm
-
-enum { // platformID
-   STBTT_PLATFORM_ID_UNICODE   =0,
-   STBTT_PLATFORM_ID_MAC       =1,
-   STBTT_PLATFORM_ID_ISO       =2,
-   STBTT_PLATFORM_ID_MICROSOFT =3
-};
-
-enum { // encodingID for STBTT_PLATFORM_ID_UNICODE
-   STBTT_UNICODE_EID_UNICODE_1_0    =0,
-   STBTT_UNICODE_EID_UNICODE_1_1    =1,
-   STBTT_UNICODE_EID_ISO_10646      =2,
-   STBTT_UNICODE_EID_UNICODE_2_0_BMP=3,
-   STBTT_UNICODE_EID_UNICODE_2_0_FULL=4
-};
-
-enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT
-   STBTT_MS_EID_SYMBOL        =0,
-   STBTT_MS_EID_UNICODE_BMP   =1,
-   STBTT_MS_EID_SHIFTJIS      =2,
-   STBTT_MS_EID_UNICODE_FULL  =10
-};
-
-enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes
-   STBTT_MAC_EID_ROMAN        =0,   STBTT_MAC_EID_ARABIC       =4,
-   STBTT_MAC_EID_JAPANESE     =1,   STBTT_MAC_EID_HEBREW       =5,
-   STBTT_MAC_EID_CHINESE_TRAD =2,   STBTT_MAC_EID_GREEK        =6,
-   STBTT_MAC_EID_KOREAN       =3,   STBTT_MAC_EID_RUSSIAN      =7
-};
-
-enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID...
-       // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs
-   STBTT_MS_LANG_ENGLISH     =0x0409,   STBTT_MS_LANG_ITALIAN     =0x0410,
-   STBTT_MS_LANG_CHINESE     =0x0804,   STBTT_MS_LANG_JAPANESE    =0x0411,
-   STBTT_MS_LANG_DUTCH       =0x0413,   STBTT_MS_LANG_KOREAN      =0x0412,
-   STBTT_MS_LANG_FRENCH      =0x040c,   STBTT_MS_LANG_RUSSIAN     =0x0419,
-   STBTT_MS_LANG_GERMAN      =0x0407,   STBTT_MS_LANG_SPANISH     =0x0409,
-   STBTT_MS_LANG_HEBREW      =0x040d,   STBTT_MS_LANG_SWEDISH     =0x041D
-};
-
-enum { // languageID for STBTT_PLATFORM_ID_MAC
-   STBTT_MAC_LANG_ENGLISH      =0 ,   STBTT_MAC_LANG_JAPANESE     =11,
-   STBTT_MAC_LANG_ARABIC       =12,   STBTT_MAC_LANG_KOREAN       =23,
-   STBTT_MAC_LANG_DUTCH        =4 ,   STBTT_MAC_LANG_RUSSIAN      =32,
-   STBTT_MAC_LANG_FRENCH       =1 ,   STBTT_MAC_LANG_SPANISH      =6 ,
-   STBTT_MAC_LANG_GERMAN       =2 ,   STBTT_MAC_LANG_SWEDISH      =5 ,
-   STBTT_MAC_LANG_HEBREW       =10,   STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33,
-   STBTT_MAC_LANG_ITALIAN      =3 ,   STBTT_MAC_LANG_CHINESE_TRAD =19
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // __STB_INCLUDE_STB_TRUETYPE_H__
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-////
-////   IMPLEMENTATION
-////
-////
-
-#ifdef STB_TRUETYPE_IMPLEMENTATION
-
-#ifndef STBTT_MAX_OVERSAMPLE
-#define STBTT_MAX_OVERSAMPLE   8
-#endif
-
-#if STBTT_MAX_OVERSAMPLE > 255
-#error "STBTT_MAX_OVERSAMPLE cannot be > 255"
-#endif
-
-typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1];
-
-#ifndef STBTT_RASTERIZER_VERSION
-#define STBTT_RASTERIZER_VERSION 2
-#endif
-
-#ifdef _MSC_VER
-#define STBTT__NOTUSED(v)  (void)(v)
-#else
-#define STBTT__NOTUSED(v)  (void)sizeof(v)
-#endif
-
-//////////////////////////////////////////////////////////////////////////
-//
-// stbtt__buf helpers to parse data from file
-//
-
-static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
-{
-   if (b->cursor >= b->size)
-      return 0;
-   return b->data[b->cursor++];
-}
-
-static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
-{
-   if (b->cursor >= b->size)
-      return 0;
-   return b->data[b->cursor];
-}
-
-static void stbtt__buf_seek(stbtt__buf *b, int o)
-{
-   STBTT_assert(!(o > b->size || o < 0));
-   b->cursor = (o > b->size || o < 0) ? b->size : o;
-}
-
-static void stbtt__buf_skip(stbtt__buf *b, int o)
-{
-   stbtt__buf_seek(b, b->cursor + o);
-}
-
-static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
-{
-   stbtt_uint32 v = 0;
-   int i;
-   STBTT_assert(n >= 1 && n <= 4);
-   for (i = 0; i < n; i++)
-      v = (v << 8) | stbtt__buf_get8(b);
-   return v;
-}
-
-static stbtt__buf stbtt__new_buf(const void *p, size_t size)
-{
-   stbtt__buf r;
-   STBTT_assert(size < 0x40000000);
-   r.data = (stbtt_uint8*) p;
-   r.size = (int) size;
-   r.cursor = 0;
-   return r;
-}
-
-#define stbtt__buf_get16(b)  stbtt__buf_get((b), 2)
-#define stbtt__buf_get32(b)  stbtt__buf_get((b), 4)
-
-static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
-{
-   stbtt__buf r = stbtt__new_buf(NULL, 0);
-   if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r;
-   r.data = b->data + o;
-   r.size = s;
-   return r;
-}
-
-static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
-{
-   int count, start, offsize;
-   start = b->cursor;
-   count = stbtt__buf_get16(b);
-   if (count) {
-      offsize = stbtt__buf_get8(b);
-      STBTT_assert(offsize >= 1 && offsize <= 4);
-      stbtt__buf_skip(b, offsize * count);
-      stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1);
-   }
-   return stbtt__buf_range(b, start, b->cursor - start);
-}
-
-static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
-{
-   int b0 = stbtt__buf_get8(b);
-   if (b0 >= 32 && b0 <= 246)       return b0 - 139;
-   else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108;
-   else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108;
-   else if (b0 == 28)               return stbtt__buf_get16(b);
-   else if (b0 == 29)               return stbtt__buf_get32(b);
-   STBTT_assert(0);
-   return 0;
-}
-
-static void stbtt__cff_skip_operand(stbtt__buf *b) {
-   int v, b0 = stbtt__buf_peek8(b);
-   STBTT_assert(b0 >= 28);
-   if (b0 == 30) {
-      stbtt__buf_skip(b, 1);
-      while (b->cursor < b->size) {
-         v = stbtt__buf_get8(b);
-         if ((v & 0xF) == 0xF || (v >> 4) == 0xF)
-            break;
-      }
-   } else {
-      stbtt__cff_int(b);
-   }
-}
-
-static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
-{
-   stbtt__buf_seek(b, 0);
-   while (b->cursor < b->size) {
-      int start = b->cursor, end, op;
-      while (stbtt__buf_peek8(b) >= 28)
-         stbtt__cff_skip_operand(b);
-      end = b->cursor;
-      op = stbtt__buf_get8(b);
-      if (op == 12)  op = stbtt__buf_get8(b) | 0x100;
-      if (op == key) return stbtt__buf_range(b, start, end-start);
-   }
-   return stbtt__buf_range(b, 0, 0);
-}
-
-static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out)
-{
-   int i;
-   stbtt__buf operands = stbtt__dict_get(b, key);
-   for (i = 0; i < outcount && operands.cursor < operands.size; i++)
-      out[i] = stbtt__cff_int(&operands);
-}
-
-static int stbtt__cff_index_count(stbtt__buf *b)
-{
-   stbtt__buf_seek(b, 0);
-   return stbtt__buf_get16(b);
-}
-
-static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
-{
-   int count, offsize, start, end;
-   stbtt__buf_seek(&b, 0);
-   count = stbtt__buf_get16(&b);
-   offsize = stbtt__buf_get8(&b);
-   STBTT_assert(i >= 0 && i < count);
-   STBTT_assert(offsize >= 1 && offsize <= 4);
-   stbtt__buf_skip(&b, i*offsize);
-   start = stbtt__buf_get(&b, offsize);
-   end = stbtt__buf_get(&b, offsize);
-   return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start);
-}
-
-//////////////////////////////////////////////////////////////////////////
-//
-// accessors to parse data from file
-//
-
-// on platforms that don't allow misaligned reads, if we want to allow
-// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE
-
-#define ttBYTE(p)     (* (stbtt_uint8 *) (p))
-#define ttCHAR(p)     (* (stbtt_int8 *) (p))
-#define ttFixed(p)    ttLONG(p)
-
-static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
-static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
-static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
-static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
-
-#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3))
-#define stbtt_tag(p,str)           stbtt_tag4(p,str[0],str[1],str[2],str[3])
-
-static int stbtt__isfont(stbtt_uint8 *font)
-{
-   // check the version number
-   if (stbtt_tag4(font, '1',0,0,0))  return 1; // TrueType 1
-   if (stbtt_tag(font, "typ1"))   return 1; // TrueType with type 1 font -- we don't support this!
-   if (stbtt_tag(font, "OTTO"))   return 1; // OpenType with CFF
-   if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0
-   if (stbtt_tag(font, "true"))   return 1; // Apple specification for TrueType fonts
-   return 0;
-}
-
-// @OPTIMIZE: binary search
-static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag)
-{
-   stbtt_int32 num_tables = ttUSHORT(data+fontstart+4);
-   stbtt_uint32 tabledir = fontstart + 12;
-   stbtt_int32 i;
-   for (i=0; i < num_tables; ++i) {
-      stbtt_uint32 loc = tabledir + 16*i;
-      if (stbtt_tag(data+loc+0, tag))
-         return ttULONG(data+loc+8);
-   }
-   return 0;
-}
-
-static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index)
-{
-   // if it's just a font, there's only one valid index
-   if (stbtt__isfont(font_collection))
-      return index == 0 ? 0 : -1;
-
-   // check if it's a TTC
-   if (stbtt_tag(font_collection, "ttcf")) {
-      // version 1?
-      if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
-         stbtt_int32 n = ttLONG(font_collection+8);
-         if (index >= n)
-            return -1;
-         return ttULONG(font_collection+12+index*4);
-      }
-   }
-   return -1;
-}
-
-static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
-{
-   // if it's just a font, there's only one valid font
-   if (stbtt__isfont(font_collection))
-      return 1;
-
-   // check if it's a TTC
-   if (stbtt_tag(font_collection, "ttcf")) {
-      // version 1?
-      if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
-         return ttLONG(font_collection+8);
-      }
-   }
-   return 0;
-}
-
-static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
-{
-   stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 };
-   stbtt__buf pdict;
-   stbtt__dict_get_ints(&fontdict, 18, 2, private_loc);
-   if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0);
-   pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]);
-   stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff);
-   if (!subrsoff) return stbtt__new_buf(NULL, 0);
-   stbtt__buf_seek(&cff, private_loc[1]+subrsoff);
-   return stbtt__cff_get_index(&cff);
-}
-
-static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
-{
-   stbtt_uint32 cmap, t;
-   stbtt_int32 i,numTables;
-
-   info->data = data;
-   info->fontstart = fontstart;
-   info->cff = stbtt__new_buf(NULL, 0);
-
-   cmap = stbtt__find_table(data, fontstart, "cmap");       // required
-   info->loca = stbtt__find_table(data, fontstart, "loca"); // required
-   info->head = stbtt__find_table(data, fontstart, "head"); // required
-   info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required
-   info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required
-   info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required
-   info->kern = stbtt__find_table(data, fontstart, "kern"); // not required
-   info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required
-
-   if (!cmap || !info->head || !info->hhea || !info->hmtx)
-      return 0;
-   if (info->glyf) {
-      // required for truetype
-      if (!info->loca) return 0;
-   } else {
-      // initialization for CFF / Type2 fonts (OTF)
-      stbtt__buf b, topdict, topdictidx;
-      stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0;
-      stbtt_uint32 cff;
-
-      cff = stbtt__find_table(data, fontstart, "CFF ");
-      if (!cff) return 0;
-
-      info->fontdicts = stbtt__new_buf(NULL, 0);
-      info->fdselect = stbtt__new_buf(NULL, 0);
-
-      // @TODO this should use size from table (not 512MB)
-      info->cff = stbtt__new_buf(data+cff, 512*1024*1024);
-      b = info->cff;
-
-      // read the header
-      stbtt__buf_skip(&b, 2);
-      stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize
-
-      // @TODO the name INDEX could list multiple fonts,
-      // but we just use the first one.
-      stbtt__cff_get_index(&b);  // name INDEX
-      topdictidx = stbtt__cff_get_index(&b);
-      topdict = stbtt__cff_index_get(topdictidx, 0);
-      stbtt__cff_get_index(&b);  // string INDEX
-      info->gsubrs = stbtt__cff_get_index(&b);
-
-      stbtt__dict_get_ints(&topdict, 17, 1, &charstrings);
-      stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype);
-      stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff);
-      stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff);
-      info->subrs = stbtt__get_subrs(b, topdict);
-
-      // we only support Type 2 charstrings
-      if (cstype != 2) return 0;
-      if (charstrings == 0) return 0;
-
-      if (fdarrayoff) {
-         // looks like a CID font
-         if (!fdselectoff) return 0;
-         stbtt__buf_seek(&b, fdarrayoff);
-         info->fontdicts = stbtt__cff_get_index(&b);
-         info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff);
-      }
-
-      stbtt__buf_seek(&b, charstrings);
-      info->charstrings = stbtt__cff_get_index(&b);
-   }
-
-   t = stbtt__find_table(data, fontstart, "maxp");
-   if (t)
-      info->numGlyphs = ttUSHORT(data+t+4);
-   else
-      info->numGlyphs = 0xffff;
-
-   // find a cmap encoding table we understand *now* to avoid searching
-   // later. (todo: could make this installable)
-   // the same regardless of glyph.
-   numTables = ttUSHORT(data + cmap + 2);
-   info->index_map = 0;
-   for (i=0; i < numTables; ++i) {
-      stbtt_uint32 encoding_record = cmap + 4 + 8 * i;
-      // find an encoding we understand:
-      switch(ttUSHORT(data+encoding_record)) {
-         case STBTT_PLATFORM_ID_MICROSOFT:
-            switch (ttUSHORT(data+encoding_record+2)) {
-               case STBTT_MS_EID_UNICODE_BMP:
-               case STBTT_MS_EID_UNICODE_FULL:
-                  // MS/Unicode
-                  info->index_map = cmap + ttULONG(data+encoding_record+4);
-                  break;
-            }
-            break;
-        case STBTT_PLATFORM_ID_UNICODE:
-            // Mac/iOS has these
-            // all the encodingIDs are unicode, so we don't bother to check it
-            info->index_map = cmap + ttULONG(data+encoding_record+4);
-            break;
-      }
-   }
-   if (info->index_map == 0)
-      return 0;
-
-   info->indexToLocFormat = ttUSHORT(data+info->head + 50);
-   return 1;
-}
-
-STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint)
-{
-   stbtt_uint8 *data = info->data;
-   stbtt_uint32 index_map = info->index_map;
-
-   stbtt_uint16 format = ttUSHORT(data + index_map + 0);
-   if (format == 0) { // apple byte encoding
-      stbtt_int32 bytes = ttUSHORT(data + index_map + 2);
-      if (unicode_codepoint < bytes-6)
-         return ttBYTE(data + index_map + 6 + unicode_codepoint);
-      return 0;
-   } else if (format == 6) {
-      stbtt_uint32 first = ttUSHORT(data + index_map + 6);
-      stbtt_uint32 count = ttUSHORT(data + index_map + 8);
-      if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count)
-         return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2);
-      return 0;
-   } else if (format == 2) {
-      STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean
-      return 0;
-   } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges
-      stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1;
-      stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1;
-      stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10);
-      stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1;
-
-      // do a binary search of the segments
-      stbtt_uint32 endCount = index_map + 14;
-      stbtt_uint32 search = endCount;
-
-      if (unicode_codepoint > 0xffff)
-         return 0;
-
-      // they lie from endCount .. endCount + segCount
-      // but searchRange is the nearest power of two, so...
-      if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2))
-         search += rangeShift*2;
-
-      // now decrement to bias correctly to find smallest
-      search -= 2;
-      while (entrySelector) {
-         stbtt_uint16 end;
-         searchRange >>= 1;
-         end = ttUSHORT(data + search + searchRange*2);
-         if (unicode_codepoint > end)
-            search += searchRange*2;
-         --entrySelector;
-      }
-      search += 2;
-
-      {
-         stbtt_uint16 offset, start;
-         stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1);
-
-         STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item));
-         start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item);
-         if (unicode_codepoint < start)
-            return 0;
-
-         offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item);
-         if (offset == 0)
-            return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item));
-
-         return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item);
-      }
-   } else if (format == 12 || format == 13) {
-      stbtt_uint32 ngroups = ttULONG(data+index_map+12);
-      stbtt_int32 low,high;
-      low = 0; high = (stbtt_int32)ngroups;
-      // Binary search the right group.
-      while (low < high) {
-         stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high
-         stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12);
-         stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4);
-         if ((stbtt_uint32) unicode_codepoint < start_char)
-            high = mid;
-         else if ((stbtt_uint32) unicode_codepoint > end_char)
-            low = mid+1;
-         else {
-            stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8);
-            if (format == 12)
-               return start_glyph + unicode_codepoint-start_char;
-            else // format == 13
-               return start_glyph;
-         }
-      }
-      return 0; // not found
-   }
-   // @TODO
-   STBTT_assert(0);
-   return 0;
-}
-
-STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices)
-{
-   return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices);
-}
-
-static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy)
-{
-   v->type = type;
-   v->x = (stbtt_int16) x;
-   v->y = (stbtt_int16) y;
-   v->cx = (stbtt_int16) cx;
-   v->cy = (stbtt_int16) cy;
-}
-
-static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index)
-{
-   int g1,g2;
-
-   STBTT_assert(!info->cff.size);
-
-   if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range
-   if (info->indexToLocFormat >= 2)    return -1; // unknown index->glyph map format
-
-   if (info->indexToLocFormat == 0) {
-      g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2;
-      g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2;
-   } else {
-      g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4);
-      g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4);
-   }
-
-   return g1==g2 ? -1 : g1; // if length is 0, return -1
-}
-
-static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
-
-STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
-{
-   if (info->cff.size) {
-      stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1);
-   } else {
-      int g = stbtt__GetGlyfOffset(info, glyph_index);
-      if (g < 0) return 0;
-
-      if (x0) *x0 = ttSHORT(info->data + g + 2);
-      if (y0) *y0 = ttSHORT(info->data + g + 4);
-      if (x1) *x1 = ttSHORT(info->data + g + 6);
-      if (y1) *y1 = ttSHORT(info->data + g + 8);
-   }
-   return 1;
-}
-
-STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1)
-{
-   return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1);
-}
-
-STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index)
-{
-   stbtt_int16 numberOfContours;
-   int g;
-   if (info->cff.size)
-      return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0;
-   g = stbtt__GetGlyfOffset(info, glyph_index);
-   if (g < 0) return 1;
-   numberOfContours = ttSHORT(info->data + g);
-   return numberOfContours == 0;
-}
-
-static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off,
-    stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy)
-{
-   if (start_off) {
-      if (was_off)
-         stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy);
-      stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy);
-   } else {
-      if (was_off)
-         stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy);
-      else
-         stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0);
-   }
-   return num_vertices;
-}
-
-static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
-{
-   stbtt_int16 numberOfContours;
-   stbtt_uint8 *endPtsOfContours;
-   stbtt_uint8 *data = info->data;
-   stbtt_vertex *vertices=0;
-   int num_vertices=0;
-   int g = stbtt__GetGlyfOffset(info, glyph_index);
-
-   *pvertices = NULL;
-
-   if (g < 0) return 0;
-
-   numberOfContours = ttSHORT(data + g);
-
-   if (numberOfContours > 0) {
-      stbtt_uint8 flags=0,flagcount;
-      stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0;
-      stbtt_int32 x,y,cx,cy,sx,sy, scx,scy;
-      stbtt_uint8 *points;
-      endPtsOfContours = (data + g + 10);
-      ins = ttUSHORT(data + g + 10 + numberOfContours * 2);
-      points = data + g + 10 + numberOfContours * 2 + 2 + ins;
-
-      n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2);
-
-      m = n + 2*numberOfContours;  // a loose bound on how many vertices we might need
-      vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata);
-      if (vertices == 0)
-         return 0;
-
-      next_move = 0;
-      flagcount=0;
-
-      // in first pass, we load uninterpreted data into the allocated array
-      // above, shifted to the end of the array so we won't overwrite it when
-      // we create our final data starting from the front
-
-      off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated
-
-      // first load flags
-
-      for (i=0; i < n; ++i) {
-         if (flagcount == 0) {
-            flags = *points++;
-            if (flags & 8)
-               flagcount = *points++;
-         } else
-            --flagcount;
-         vertices[off+i].type = flags;
-      }
-
-      // now load x coordinates
-      x=0;
-      for (i=0; i < n; ++i) {
-         flags = vertices[off+i].type;
-         if (flags & 2) {
-            stbtt_int16 dx = *points++;
-            x += (flags & 16) ? dx : -dx; // ???
-         } else {
-            if (!(flags & 16)) {
-               x = x + (stbtt_int16) (points[0]*256 + points[1]);
-               points += 2;
-            }
-         }
-         vertices[off+i].x = (stbtt_int16) x;
-      }
-
-      // now load y coordinates
-      y=0;
-      for (i=0; i < n; ++i) {
-         flags = vertices[off+i].type;
-         if (flags & 4) {
-            stbtt_int16 dy = *points++;
-            y += (flags & 32) ? dy : -dy; // ???
-         } else {
-            if (!(flags & 32)) {
-               y = y + (stbtt_int16) (points[0]*256 + points[1]);
-               points += 2;
-            }
-         }
-         vertices[off+i].y = (stbtt_int16) y;
-      }
-
-      // now convert them to our format
-      num_vertices=0;
-      sx = sy = cx = cy = scx = scy = 0;
-      for (i=0; i < n; ++i) {
-         flags = vertices[off+i].type;
-         x     = (stbtt_int16) vertices[off+i].x;
-         y     = (stbtt_int16) vertices[off+i].y;
-
-         if (next_move == i) {
-            if (i != 0)
-               num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
-
-            // now start the new one               
-            start_off = !(flags & 1);
-            if (start_off) {
-               // if we start off with an off-curve point, then when we need to find a point on the curve
-               // where we can start, and we need to save some state for when we wraparound.
-               scx = x;
-               scy = y;
-               if (!(vertices[off+i+1].type & 1)) {
-                  // next point is also a curve point, so interpolate an on-point curve
-                  sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1;
-                  sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1;
-               } else {
-                  // otherwise just use the next point as our start point
-                  sx = (stbtt_int32) vertices[off+i+1].x;
-                  sy = (stbtt_int32) vertices[off+i+1].y;
-                  ++i; // we're using point i+1 as the starting point, so skip it
-               }
-            } else {
-               sx = x;
-               sy = y;
-            }
-            stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0);
-            was_off = 0;
-            next_move = 1 + ttUSHORT(endPtsOfContours+j*2);
-            ++j;
-         } else {
-            if (!(flags & 1)) { // if it's a curve
-               if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint
-                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy);
-               cx = x;
-               cy = y;
-               was_off = 1;
-            } else {
-               if (was_off)
-                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy);
-               else
-                  stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0);
-               was_off = 0;
-            }
-         }
-      }
-      num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
-   } else if (numberOfContours == -1) {
-      // Compound shapes.
-      int more = 1;
-      stbtt_uint8 *comp = data + g + 10;
-      num_vertices = 0;
-      vertices = 0;
-      while (more) {
-         stbtt_uint16 flags, gidx;
-         int comp_num_verts = 0, i;
-         stbtt_vertex *comp_verts = 0, *tmp = 0;
-         float mtx[6] = {1,0,0,1,0,0}, m, n;
-         
-         flags = ttSHORT(comp); comp+=2;
-         gidx = ttSHORT(comp); comp+=2;
-
-         if (flags & 2) { // XY values
-            if (flags & 1) { // shorts
-               mtx[4] = ttSHORT(comp); comp+=2;
-               mtx[5] = ttSHORT(comp); comp+=2;
-            } else {
-               mtx[4] = ttCHAR(comp); comp+=1;
-               mtx[5] = ttCHAR(comp); comp+=1;
-            }
-         }
-         else {
-            // @TODO handle matching point
-            STBTT_assert(0);
-         }
-         if (flags & (1<<3)) { // WE_HAVE_A_SCALE
-            mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
-            mtx[1] = mtx[2] = 0;
-         } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE
-            mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
-            mtx[1] = mtx[2] = 0;
-            mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
-         } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO
-            mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
-            mtx[1] = ttSHORT(comp)/16384.0f; comp+=2;
-            mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
-            mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
-         }
-         
-         // Find transformation scales.
-         m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
-         n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
-
-         // Get indexed glyph.
-         comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts);
-         if (comp_num_verts > 0) {
-            // Transform vertices.
-            for (i = 0; i < comp_num_verts; ++i) {
-               stbtt_vertex* v = &comp_verts[i];
-               stbtt_vertex_type x,y;
-               x=v->x; y=v->y;
-               v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
-               v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
-               x=v->cx; y=v->cy;
-               v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
-               v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
-            }
-            // Append vertices.
-            tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata);
-            if (!tmp) {
-               if (vertices) STBTT_free(vertices, info->userdata);
-               if (comp_verts) STBTT_free(comp_verts, info->userdata);
-               return 0;
-            }
-            if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); //-V595
-            STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex));
-            if (vertices) STBTT_free(vertices, info->userdata);
-            vertices = tmp;
-            STBTT_free(comp_verts, info->userdata);
-            num_vertices += comp_num_verts;
-         }
-         // More components ?
-         more = flags & (1<<5);
-      }
-   } else if (numberOfContours < 0) {
-      // @TODO other compound variations?
-      STBTT_assert(0);
-   } else {
-      // numberOfCounters == 0, do nothing
-   }
-
-   *pvertices = vertices;
-   return num_vertices;
-}
-
-typedef struct
-{
-   int bounds;
-   int started;
-   float first_x, first_y;
-   float x, y;
-   stbtt_int32 min_x, max_x, min_y, max_y;
-
-   stbtt_vertex *pvertices;
-   int num_vertices;
-} stbtt__csctx;
-
-#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0}
-
-static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y)
-{
-   if (x > c->max_x || !c->started) c->max_x = x;
-   if (y > c->max_y || !c->started) c->max_y = y;
-   if (x < c->min_x || !c->started) c->min_x = x;
-   if (y < c->min_y || !c->started) c->min_y = y;
-   c->started = 1;
-}
-
-static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1)
-{
-   if (c->bounds) {
-      stbtt__track_vertex(c, x, y);
-      if (type == STBTT_vcubic) {
-         stbtt__track_vertex(c, cx, cy);
-         stbtt__track_vertex(c, cx1, cy1);
-      }
-   } else {
-      stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy);
-      c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1;
-      c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1;
-   }
-   c->num_vertices++;
-}
-
-static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
-{
-   if (ctx->first_x != ctx->x || ctx->first_y != ctx->y)
-      stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0);
-}
-
-static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
-{
-   stbtt__csctx_close_shape(ctx);
-   ctx->first_x = ctx->x = ctx->x + dx;
-   ctx->first_y = ctx->y = ctx->y + dy;
-   stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
-}
-
-static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
-{
-   ctx->x += dx;
-   ctx->y += dy;
-   stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
-}
-
-static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3)
-{
-   float cx1 = ctx->x + dx1;
-   float cy1 = ctx->y + dy1;
-   float cx2 = cx1 + dx2;
-   float cy2 = cy1 + dy2;
-   ctx->x = cx2 + dx3;
-   ctx->y = cy2 + dy3;
-   stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2);
-}
-
-static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
-{
-   int count = stbtt__cff_index_count(&idx);
-   int bias = 107;
-   if (count >= 33900)
-      bias = 32768;
-   else if (count >= 1240)
-      bias = 1131;
-   n += bias;
-   if (n < 0 || n >= count)
-      return stbtt__new_buf(NULL, 0);
-   return stbtt__cff_index_get(idx, n);
-}
-
-static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index)
-{
-   stbtt__buf fdselect = info->fdselect;
-   int nranges, start, end, v, fmt, fdselector = -1, i;
-
-   stbtt__buf_seek(&fdselect, 0);
-   fmt = stbtt__buf_get8(&fdselect);
-   if (fmt == 0) {
-      // untested
-      stbtt__buf_skip(&fdselect, glyph_index);
-      fdselector = stbtt__buf_get8(&fdselect);
-   } else if (fmt == 3) {
-      nranges = stbtt__buf_get16(&fdselect);
-      start = stbtt__buf_get16(&fdselect);
-      for (i = 0; i < nranges; i++) {
-         v = stbtt__buf_get8(&fdselect);
-         end = stbtt__buf_get16(&fdselect);
-         if (glyph_index >= start && glyph_index < end) {
-            fdselector = v;
-            break;
-         }
-         start = end;
-      }
-   }
-   if (fdselector == -1) stbtt__new_buf(NULL, 0);
-   return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector));
-}
-
-static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
-{
-   int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
-   int has_subrs = 0, clear_stack;
-   float s[48];
-   stbtt__buf subr_stack[10], subrs = info->subrs, b;
-   float f;
-
-#define STBTT__CSERR(s) (0)
-
-   // this currently ignores the initial width value, which isn't needed if we have hmtx
-   b = stbtt__cff_index_get(info->charstrings, glyph_index);
-   while (b.cursor < b.size) {
-      i = 0;
-      clear_stack = 1;
-      b0 = stbtt__buf_get8(&b);
-      switch (b0) {
-      // @TODO implement hinting
-      case 0x13: // hintmask
-      case 0x14: // cntrmask
-         if (in_header)
-            maskbits += (sp / 2); // implicit "vstem"
-         in_header = 0;
-         stbtt__buf_skip(&b, (maskbits + 7) / 8);
-         break;
-
-      case 0x01: // hstem
-      case 0x03: // vstem
-      case 0x12: // hstemhm
-      case 0x17: // vstemhm
-         maskbits += (sp / 2);
-         break;
-
-      case 0x15: // rmoveto
-         in_header = 0;
-         if (sp < 2) return STBTT__CSERR("rmoveto stack");
-         stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]);
-         break;
-      case 0x04: // vmoveto
-         in_header = 0;
-         if (sp < 1) return STBTT__CSERR("vmoveto stack");
-         stbtt__csctx_rmove_to(c, 0, s[sp-1]);
-         break;
-      case 0x16: // hmoveto
-         in_header = 0;
-         if (sp < 1) return STBTT__CSERR("hmoveto stack");
-         stbtt__csctx_rmove_to(c, s[sp-1], 0);
-         break;
-
-      case 0x05: // rlineto
-         if (sp < 2) return STBTT__CSERR("rlineto stack");
-         for (; i + 1 < sp; i += 2)
-            stbtt__csctx_rline_to(c, s[i], s[i+1]);
-         break;
-
-      // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
-      // starting from a different place.
-
-      case 0x07: // vlineto
-         if (sp < 1) return STBTT__CSERR("vlineto stack");
-         goto vlineto;
-      case 0x06: // hlineto
-         if (sp < 1) return STBTT__CSERR("hlineto stack");
-         for (;;) {
-            if (i >= sp) break;
-            stbtt__csctx_rline_to(c, s[i], 0);
-            i++;
-      vlineto:
-            if (i >= sp) break;
-            stbtt__csctx_rline_to(c, 0, s[i]);
-            i++;
-         }
-         break;
-
-      case 0x1F: // hvcurveto
-         if (sp < 4) return STBTT__CSERR("hvcurveto stack");
-         goto hvcurveto;
-      case 0x1E: // vhcurveto
-         if (sp < 4) return STBTT__CSERR("vhcurveto stack");
-         for (;;) {
-            if (i + 3 >= sp) break;
-            stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f);
-            i += 4;
-      hvcurveto:
-            if (i + 3 >= sp) break;
-            stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]);
-            i += 4;
-         }
-         break;
-
-      case 0x08: // rrcurveto
-         if (sp < 6) return STBTT__CSERR("rcurveline stack");
-         for (; i + 5 < sp; i += 6)
-            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
-         break;
-
-      case 0x18: // rcurveline
-         if (sp < 8) return STBTT__CSERR("rcurveline stack");
-         for (; i + 5 < sp - 2; i += 6)
-            stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
-         if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack");
-         stbtt__csctx_rline_to(c, s[i], s[i+1]);
-         break;
-
-      case 0x19: // rlinecurve
-         if (sp < 8) return STBTT__CSERR("rlinecurve stack");
-         for (; i + 1 < sp - 6; i += 2)
-            stbtt__csctx_rline_to(c, s[i], s[i+1]);
-         if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack");
-         stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
-         break;
-
-      case 0x1A: // vvcurveto
-      case 0x1B: // hhcurveto
-         if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack");
-         f = 0.0;
-         if (sp & 1) { f = s[i]; i++; }
-         for (; i + 3 < sp; i += 4) {
-            if (b0 == 0x1B)
-               stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0);
-            else
-               stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]);
-            f = 0.0;
-         }
-         break;
-
-      case 0x0A: // callsubr
-         if (!has_subrs) {
-            if (info->fdselect.size)
-               subrs = stbtt__cid_get_glyph_subrs(info, glyph_index);
-            has_subrs = 1;
-         }
-         // fallthrough
-      case 0x1D: // callgsubr
-         if (sp < 1) return STBTT__CSERR("call(g|)subr stack");
-         v = (int) s[--sp];
-         if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit");
-         subr_stack[subr_stack_height++] = b;
-         b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v);
-         if (b.size == 0) return STBTT__CSERR("subr not found");
-         b.cursor = 0;
-         clear_stack = 0;
-         break;
-
-      case 0x0B: // return
-         if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr");
-         b = subr_stack[--subr_stack_height];
-         clear_stack = 0;
-         break;
-
-      case 0x0E: // endchar
-         stbtt__csctx_close_shape(c);
-         return 1;
-
-      case 0x0C: { // two-byte escape
-         float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6;
-         float dx, dy;
-         int b1 = stbtt__buf_get8(&b);
-         switch (b1) {
-         // @TODO These "flex" implementations ignore the flex-depth and resolution,
-         // and always draw beziers.
-         case 0x22: // hflex
-            if (sp < 7) return STBTT__CSERR("hflex stack");
-            dx1 = s[0];
-            dx2 = s[1];
-            dy2 = s[2];
-            dx3 = s[3];
-            dx4 = s[4];
-            dx5 = s[5];
-            dx6 = s[6];
-            stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0);
-            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0);
-            break;
-
-         case 0x23: // flex
-            if (sp < 13) return STBTT__CSERR("flex stack");
-            dx1 = s[0];
-            dy1 = s[1];
-            dx2 = s[2];
-            dy2 = s[3];
-            dx3 = s[4];
-            dy3 = s[5];
-            dx4 = s[6];
-            dy4 = s[7];
-            dx5 = s[8];
-            dy5 = s[9];
-            dx6 = s[10];
-            dy6 = s[11];
-            //fd is s[12]
-            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
-            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
-            break;
-
-         case 0x24: // hflex1
-            if (sp < 9) return STBTT__CSERR("hflex1 stack");
-            dx1 = s[0];
-            dy1 = s[1];
-            dx2 = s[2];
-            dy2 = s[3];
-            dx3 = s[4];
-            dx4 = s[5];
-            dx5 = s[6];
-            dy5 = s[7];
-            dx6 = s[8];
-            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0);
-            stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5));
-            break;
-
-         case 0x25: // flex1
-            if (sp < 11) return STBTT__CSERR("flex1 stack");
-            dx1 = s[0];
-            dy1 = s[1];
-            dx2 = s[2];
-            dy2 = s[3];
-            dx3 = s[4];
-            dy3 = s[5];
-            dx4 = s[6];
-            dy4 = s[7];
-            dx5 = s[8];
-            dy5 = s[9];
-            dx6 = dy6 = s[10];
-            dx = dx1+dx2+dx3+dx4+dx5;
-            dy = dy1+dy2+dy3+dy4+dy5;
-            if (STBTT_fabs(dx) > STBTT_fabs(dy))
-               dy6 = -dy;
-            else
-               dx6 = -dx;
-            stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
-            stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
-            break;
-
-         default:
-            return STBTT__CSERR("unimplemented");
-         }
-      } break;
-
-      default:
-         if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) //-V560
-            return STBTT__CSERR("reserved operator");
-
-         // push immediate
-         if (b0 == 255) {
-            f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000;
-         } else {
-            stbtt__buf_skip(&b, -1);
-            f = (float)(stbtt_int16)stbtt__cff_int(&b);
-         }
-         if (sp >= 48) return STBTT__CSERR("push stack overflow");
-         s[sp++] = f;
-         clear_stack = 0;
-         break;
-      }
-      if (clear_stack) sp = 0;
-   }
-   return STBTT__CSERR("no endchar");
-
-#undef STBTT__CSERR
-}
-
-static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
-{
-   // runs the charstring twice, once to count and once to output (to avoid realloc)
-   stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1);
-   stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0);
-   if (stbtt__run_charstring(info, glyph_index, &count_ctx)) {
-      *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata);
-      output_ctx.pvertices = *pvertices;
-      if (stbtt__run_charstring(info, glyph_index, &output_ctx)) {
-         STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices);
-         return output_ctx.num_vertices;
-      }
-   }
-   *pvertices = NULL;
-   return 0;
-}
-
-static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
-{
-   stbtt__csctx c = STBTT__CSCTX_INIT(1);
-   int r = stbtt__run_charstring(info, glyph_index, &c);
-   if (x0)  *x0 = r ? c.min_x : 0;
-   if (y0)  *y0 = r ? c.min_y : 0;
-   if (x1)  *x1 = r ? c.max_x : 0;
-   if (y1)  *y1 = r ? c.max_y : 0;
-   return r ? c.num_vertices : 0;
-}
-
-STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
-{
-   if (!info->cff.size)
-      return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices);
-   else
-      return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices);
-}
-
-STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing)
-{
-   stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34);
-   if (glyph_index < numOfLongHorMetrics) {
-      if (advanceWidth)     *advanceWidth    = ttSHORT(info->data + info->hmtx + 4*glyph_index);
-      if (leftSideBearing)  *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2);
-   } else {
-      if (advanceWidth)     *advanceWidth    = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1));
-      if (leftSideBearing)  *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics));
-   }
-}
-
-static int  stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
-{
-   stbtt_uint8 *data = info->data + info->kern;
-   stbtt_uint32 needle, straw;
-   int l, r, m;
-
-   // we only look at the first table. it must be 'horizontal' and format 0.
-   if (!info->kern)
-      return 0;
-   if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
-      return 0;
-   if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
-      return 0;
-
-   l = 0;
-   r = ttUSHORT(data+10) - 1;
-   needle = glyph1 << 16 | glyph2;
-   while (l <= r) {
-      m = (l + r) >> 1;
-      straw = ttULONG(data+18+(m*6)); // note: unaligned read
-      if (needle < straw)
-         r = m - 1;
-      else if (needle > straw)
-         l = m + 1;
-      else
-         return ttSHORT(data+22+(m*6));
-   }
-   return 0;
-}
-
-static stbtt_int32  stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph)
-{
-    stbtt_uint16 coverageFormat = ttUSHORT(coverageTable);
-    switch(coverageFormat) {
-        case 1: {
-            stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2);
-
-            // Binary search.
-            stbtt_int32 l=0, r=glyphCount-1, m;
-            int straw, needle=glyph;
-            while (l <= r) {
-                stbtt_uint8 *glyphArray = coverageTable + 4;
-                stbtt_uint16 glyphID;
-                m = (l + r) >> 1;
-                glyphID = ttUSHORT(glyphArray + 2 * m);
-                straw = glyphID;
-                if (needle < straw)
-                    r = m - 1;
-                else if (needle > straw)
-                    l = m + 1;
-                else {
-                     return m;
-                }
-            }
-        } break;
-
-        case 2: {
-            stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2);
-            stbtt_uint8 *rangeArray = coverageTable + 4;
-
-            // Binary search.
-            stbtt_int32 l=0, r=rangeCount-1, m;
-            int strawStart, strawEnd, needle=glyph;
-            while (l <= r) {
-                stbtt_uint8 *rangeRecord;
-                m = (l + r) >> 1;
-                rangeRecord = rangeArray + 6 * m;
-                strawStart = ttUSHORT(rangeRecord);
-                strawEnd = ttUSHORT(rangeRecord + 2);
-                if (needle < strawStart)
-                    r = m - 1;
-                else if (needle > strawEnd)
-                    l = m + 1;
-                else {
-                    stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4);
-                    return startCoverageIndex + glyph - strawStart;
-                }
-            }
-        } break;
-
-        default: {
-            // There are no other cases.
-            STBTT_assert(0);
-        } break;
-    }
-
-    return -1;
-}
-
-static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph)
-{
-    stbtt_uint16 classDefFormat = ttUSHORT(classDefTable);
-    switch(classDefFormat)
-    {
-        case 1: {
-            stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2);
-            stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4);
-            stbtt_uint8 *classDef1ValueArray = classDefTable + 6;
-
-            if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount)
-                return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID));
-
-            // [DEAR IMGUI] Commented to fix static analyzer warning
-            //classDefTable = classDef1ValueArray + 2 * glyphCount;
-        } break;
-
-        case 2: {
-            stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2);
-            stbtt_uint8 *classRangeRecords = classDefTable + 4;
-
-            // Binary search.
-            stbtt_int32 l=0, r=classRangeCount-1, m;
-            int strawStart, strawEnd, needle=glyph;
-            while (l <= r) {
-                stbtt_uint8 *classRangeRecord;
-                m = (l + r) >> 1;
-                classRangeRecord = classRangeRecords + 6 * m;
-                strawStart = ttUSHORT(classRangeRecord);
-                strawEnd = ttUSHORT(classRangeRecord + 2);
-                if (needle < strawStart)
-                    r = m - 1;
-                else if (needle > strawEnd)
-                    l = m + 1;
-                else
-                    return (stbtt_int32)ttUSHORT(classRangeRecord + 4);
-            }
-
-            // [DEAR IMGUI] Commented to fix static analyzer warning
-            //classDefTable = classRangeRecords + 6 * classRangeCount;
-        } break;
-
-        default: {
-            // There are no other cases.
-            STBTT_assert(0);
-        } break;
-    }
-
-    return -1;
-}
-
-// Define to STBTT_assert(x) if you want to break on unimplemented formats.
-#define STBTT_GPOS_TODO_assert(x)
-
-static stbtt_int32  stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
-{
-    stbtt_uint16 lookupListOffset;
-    stbtt_uint8 *lookupList;
-    stbtt_uint16 lookupCount;
-    stbtt_uint8 *data;
-    stbtt_int32 i;
-
-    if (!info->gpos) return 0;
-
-    data = info->data + info->gpos;
-
-    if (ttUSHORT(data+0) != 1) return 0; // Major version 1
-    if (ttUSHORT(data+2) != 0) return 0; // Minor version 0
-
-    lookupListOffset = ttUSHORT(data+8);
-    lookupList = data + lookupListOffset;
-    lookupCount = ttUSHORT(lookupList);
-
-    for (i=0; i<lookupCount; ++i) {
-        stbtt_uint16 lookupOffset = ttUSHORT(lookupList + 2 + 2 * i);
-        stbtt_uint8 *lookupTable = lookupList + lookupOffset;
-
-        stbtt_uint16 lookupType = ttUSHORT(lookupTable);
-        stbtt_uint16 subTableCount = ttUSHORT(lookupTable + 4);
-        stbtt_uint8 *subTableOffsets = lookupTable + 6;
-        switch(lookupType) {
-            case 2: { // Pair Adjustment Positioning Subtable
-                stbtt_int32 sti;
-                for (sti=0; sti<subTableCount; sti++) {
-                    stbtt_uint16 subtableOffset = ttUSHORT(subTableOffsets + 2 * sti);
-                    stbtt_uint8 *table = lookupTable + subtableOffset;
-                    stbtt_uint16 posFormat = ttUSHORT(table);
-                    stbtt_uint16 coverageOffset = ttUSHORT(table + 2);
-                    stbtt_int32 coverageIndex = stbtt__GetCoverageIndex(table + coverageOffset, glyph1);
-                    if (coverageIndex == -1) continue;
-
-                    switch (posFormat) {
-                        case 1: {
-                            stbtt_int32 l, r, m;
-                            int straw, needle;
-                            stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
-                            stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
-                            stbtt_int32 valueRecordPairSizeInBytes = 2;
-                            stbtt_uint16 pairSetCount = ttUSHORT(table + 8);
-                            stbtt_uint16 pairPosOffset = ttUSHORT(table + 10 + 2 * coverageIndex);
-                            stbtt_uint8 *pairValueTable = table + pairPosOffset;
-                            stbtt_uint16 pairValueCount = ttUSHORT(pairValueTable);
-                            stbtt_uint8 *pairValueArray = pairValueTable + 2;
-                            // TODO: Support more formats.
-                            STBTT_GPOS_TODO_assert(valueFormat1 == 4);
-                            if (valueFormat1 != 4) return 0;
-                            STBTT_GPOS_TODO_assert(valueFormat2 == 0);
-                            if (valueFormat2 != 0) return 0;
-
-                            STBTT_assert(coverageIndex < pairSetCount);
-                            STBTT__NOTUSED(pairSetCount);
-
-                            needle=glyph2;
-                            r=pairValueCount-1;
-                            l=0;
-
-                            // Binary search.
-                            while (l <= r) {
-                                stbtt_uint16 secondGlyph;
-                                stbtt_uint8 *pairValue;
-                                m = (l + r) >> 1;
-                                pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m;
-                                secondGlyph = ttUSHORT(pairValue);
-                                straw = secondGlyph;
-                                if (needle < straw)
-                                    r = m - 1;
-                                else if (needle > straw)
-                                    l = m + 1;
-                                else {
-                                    stbtt_int16 xAdvance = ttSHORT(pairValue + 2);
-                                    return xAdvance;
-                                }
-                            }
-                        } break;
-
-                        case 2: {
-                            stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
-                            stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
-
-                            stbtt_uint16 classDef1Offset = ttUSHORT(table + 8);
-                            stbtt_uint16 classDef2Offset = ttUSHORT(table + 10);
-                            int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1);
-                            int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2);
-
-                            stbtt_uint16 class1Count = ttUSHORT(table + 12);
-                            stbtt_uint16 class2Count = ttUSHORT(table + 14);
-                            STBTT_assert(glyph1class < class1Count);
-                            STBTT_assert(glyph2class < class2Count);
-
-                            // TODO: Support more formats.
-                            STBTT_GPOS_TODO_assert(valueFormat1 == 4);
-                            if (valueFormat1 != 4) return 0;
-                            STBTT_GPOS_TODO_assert(valueFormat2 == 0);
-                            if (valueFormat2 != 0) return 0;
-
-                            if (glyph1class >= 0 && glyph1class < class1Count && glyph2class >= 0 && glyph2class < class2Count) {
-                                stbtt_uint8 *class1Records = table + 16;
-                                stbtt_uint8 *class2Records = class1Records + 2 * (glyph1class * class2Count);
-                                stbtt_int16 xAdvance = ttSHORT(class2Records + 2 * glyph2class);
-                                return xAdvance;
-                            }
-                        } break;
-
-                        default: {
-                            // There are no other cases.
-                            STBTT_assert(0);
-                            break;
-                        } // [DEAR IMGUI] removed ;
-                    }
-                }
-                break;
-            } // [DEAR IMGUI] removed ;
-
-            default:
-                // TODO: Implement other stuff.
-                break;
-        }
-    }
-
-    return 0;
-}
-
-STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2)
-{
-   int xAdvance = 0;
-
-   if (info->gpos)
-      xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2);
-
-   if (info->kern)
-      xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2);
-
-   return xAdvance;
-}
-
-STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2)
-{
-   if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs
-      return 0;
-   return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2));
-}
-
-STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing)
-{
-   stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing);
-}
-
-STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap)
-{
-   if (ascent ) *ascent  = ttSHORT(info->data+info->hhea + 4);
-   if (descent) *descent = ttSHORT(info->data+info->hhea + 6);
-   if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8);
-}
-
-STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap)
-{
-   int tab = stbtt__find_table(info->data, info->fontstart, "OS/2");
-   if (!tab)
-      return 0;
-   if (typoAscent ) *typoAscent  = ttSHORT(info->data+tab + 68);
-   if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70);
-   if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72);
-   return 1;
-}
-
-STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1)
-{
-   *x0 = ttSHORT(info->data + info->head + 36);
-   *y0 = ttSHORT(info->data + info->head + 38);
-   *x1 = ttSHORT(info->data + info->head + 40);
-   *y1 = ttSHORT(info->data + info->head + 42);
-}
-
-STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height)
-{
-   int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6);
-   return (float) height / fheight;
-}
-
-STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels)
-{
-   int unitsPerEm = ttUSHORT(info->data + info->head + 18);
-   return pixels / unitsPerEm;
-}
-
-STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
-{
-   STBTT_free(v, info->userdata);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// antialiasing software rasterizer
-//
-
-STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
-{
-   int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning
-   if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) {
-      // e.g. space character
-      if (ix0) *ix0 = 0;
-      if (iy0) *iy0 = 0;
-      if (ix1) *ix1 = 0;
-      if (iy1) *iy1 = 0;
-   } else {
-      // move to integral bboxes (treating pixels as little squares, what pixels get touched)?
-      if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x);
-      if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y);
-      if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x);
-      if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y);
-   }
-}
-
-STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
-{
-   stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1);
-}
-
-STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
-{
-   stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1);
-}
-
-STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
-{
-   stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-//  Rasterizer
-
-typedef struct stbtt__hheap_chunk
-{
-   struct stbtt__hheap_chunk *next;
-} stbtt__hheap_chunk;
-
-typedef struct stbtt__hheap
-{
-   struct stbtt__hheap_chunk *head;
-   void   *first_free;
-   int    num_remaining_in_head_chunk;
-} stbtt__hheap;
-
-static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata)
-{
-   if (hh->first_free) {
-      void *p = hh->first_free;
-      hh->first_free = * (void **) p;
-      return p;
-   } else {
-      if (hh->num_remaining_in_head_chunk == 0) {
-         int count = (size < 32 ? 2000 : size < 128 ? 800 : 100);
-         stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata);
-         if (c == NULL)
-            return NULL;
-         c->next = hh->head;
-         hh->head = c;
-         hh->num_remaining_in_head_chunk = count;
-      }
-      --hh->num_remaining_in_head_chunk;
-      return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk;
-   }
-}
-
-static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
-{
-   *(void **) p = hh->first_free;
-   hh->first_free = p;
-}
-
-static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
-{
-   stbtt__hheap_chunk *c = hh->head;
-   while (c) {
-      stbtt__hheap_chunk *n = c->next;
-      STBTT_free(c, userdata);
-      c = n;
-   }
-}
-
-typedef struct stbtt__edge {
-   float x0,y0, x1,y1;
-   int invert;
-} stbtt__edge;
-
-
-typedef struct stbtt__active_edge
-{
-   struct stbtt__active_edge *next;
-   #if STBTT_RASTERIZER_VERSION==1
-   int x,dx;
-   float ey;
-   int direction;
-   #elif STBTT_RASTERIZER_VERSION==2
-   float fx,fdx,fdy;
-   float direction;
-   float sy;
-   float ey;
-   #else
-   #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
-   #endif
-} stbtt__active_edge;
-
-#if STBTT_RASTERIZER_VERSION == 1
-#define STBTT_FIXSHIFT   10
-#define STBTT_FIX        (1 << STBTT_FIXSHIFT)
-#define STBTT_FIXMASK    (STBTT_FIX-1)
-
-static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
-{
-   stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
-   float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
-   STBTT_assert(z != NULL);
-   if (!z) return z;
-   
-   // round dx down to avoid overshooting
-   if (dxdy < 0)
-      z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
-   else
-      z->dx = STBTT_ifloor(STBTT_FIX * dxdy);
-
-   z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount
-   z->x -= off_x * STBTT_FIX;
-
-   z->ey = e->y1;
-   z->next = 0;
-   z->direction = e->invert ? 1 : -1;
-   return z;
-}
-#elif STBTT_RASTERIZER_VERSION == 2
-static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
-{
-   stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
-   float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
-   STBTT_assert(z != NULL);
-   //STBTT_assert(e->y0 <= start_point);
-   if (!z) return z;
-   z->fdx = dxdy;
-   z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f;
-   z->fx = e->x0 + dxdy * (start_point - e->y0);
-   z->fx -= off_x;
-   z->direction = e->invert ? 1.0f : -1.0f;
-   z->sy = e->y0;
-   z->ey = e->y1;
-   z->next = 0;
-   return z;
-}
-#else
-#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
-#endif
-
-#if STBTT_RASTERIZER_VERSION == 1
-// note: this routine clips fills that extend off the edges... ideally this
-// wouldn't happen, but it could happen if the truetype glyph bounding boxes
-// are wrong, or if the user supplies a too-small bitmap
-static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight)
-{
-   // non-zero winding fill
-   int x0=0, w=0;
-
-   while (e) {
-      if (w == 0) {
-         // if we're currently at zero, we need to record the edge start point
-         x0 = e->x; w += e->direction;
-      } else {
-         int x1 = e->x; w += e->direction;
-         // if we went to zero, we need to draw
-         if (w == 0) {
-            int i = x0 >> STBTT_FIXSHIFT;
-            int j = x1 >> STBTT_FIXSHIFT;
-
-            if (i < len && j >= 0) {
-               if (i == j) {
-                  // x0,x1 are the same pixel, so compute combined coverage
-                  scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT);
-               } else {
-                  if (i >= 0) // add antialiasing for x0
-                     scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT);
-                  else
-                     i = -1; // clip
-
-                  if (j < len) // add antialiasing for x1
-                     scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT);
-                  else
-                     j = len; // clip
-
-                  for (++i; i < j; ++i) // fill pixels between x0 and x1
-                     scanline[i] = scanline[i] + (stbtt_uint8) max_weight;
-               }
-            }
-         }
-      }
-      
-      e = e->next;
-   }
-}
-
-static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
-{
-   stbtt__hheap hh = { 0, 0, 0 };
-   stbtt__active_edge *active = NULL;
-   int y,j=0;
-   int max_weight = (255 / vsubsample);  // weight per vertical scanline
-   int s; // vertical subsample index
-   unsigned char scanline_data[512], *scanline;
-
-   if (result->w > 512)
-      scanline = (unsigned char *) STBTT_malloc(result->w, userdata);
-   else
-      scanline = scanline_data;
-
-   y = off_y * vsubsample;
-   e[n].y0 = (off_y + result->h) * (float) vsubsample + 1;
-
-   while (j < result->h) {
-      STBTT_memset(scanline, 0, result->w);
-      for (s=0; s < vsubsample; ++s) {
-         // find center of pixel for this scanline
-         float scan_y = y + 0.5f;
-         stbtt__active_edge **step = &active;
-
-         // update all active edges;
-         // remove all active edges that terminate before the center of this scanline
-         while (*step) {
-            stbtt__active_edge * z = *step;
-            if (z->ey <= scan_y) {
-               *step = z->next; // delete from list
-               STBTT_assert(z->direction);
-               z->direction = 0;
-               stbtt__hheap_free(&hh, z);
-            } else {
-               z->x += z->dx; // advance to position for current scanline
-               step = &((*step)->next); // advance through list
-            }
-         }
-
-         // resort the list if needed
-         for(;;) {
-            int changed=0;
-            step = &active;
-            while (*step && (*step)->next) {
-               if ((*step)->x > (*step)->next->x) {
-                  stbtt__active_edge *t = *step;
-                  stbtt__active_edge *q = t->next;
-
-                  t->next = q->next;
-                  q->next = t;
-                  *step = q;
-                  changed = 1;
-               }
-               step = &(*step)->next;
-            }
-            if (!changed) break;
-         }
-
-         // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline
-         while (e->y0 <= scan_y) {
-            if (e->y1 > scan_y) {
-               stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata);
-               if (z != NULL) {
-                  // find insertion point
-                  if (active == NULL)
-                     active = z;
-                  else if (z->x < active->x) {
-                     // insert at front
-                     z->next = active;
-                     active = z;
-                  } else {
-                     // find thing to insert AFTER
-                     stbtt__active_edge *p = active;
-                     while (p->next && p->next->x < z->x)
-                        p = p->next;
-                     // at this point, p->next->x is NOT < z->x
-                     z->next = p->next;
-                     p->next = z;
-                  }
-               }
-            }
-            ++e;
-         }
-
-         // now process all active edges in XOR fashion
-         if (active)
-            stbtt__fill_active_edges(scanline, result->w, active, max_weight);
-
-         ++y;
-      }
-      STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w);
-      ++j;
-   }
-
-   stbtt__hheap_cleanup(&hh, userdata);
-
-   if (scanline != scanline_data)
-      STBTT_free(scanline, userdata);
-}
-
-#elif STBTT_RASTERIZER_VERSION == 2
-
-// the edge passed in here does not cross the vertical line at x or the vertical line at x+1
-// (i.e. it has already been clipped to those)
-static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1)
-{
-   if (y0 == y1) return;
-   STBTT_assert(y0 < y1);
-   STBTT_assert(e->sy <= e->ey);
-   if (y0 > e->ey) return;
-   if (y1 < e->sy) return;
-   if (y0 < e->sy) {
-      x0 += (x1-x0) * (e->sy - y0) / (y1-y0);
-      y0 = e->sy;
-   }
-   if (y1 > e->ey) {
-      x1 += (x1-x0) * (e->ey - y1) / (y1-y0);
-      y1 = e->ey;
-   }
-
-   if (x0 == x)
-      STBTT_assert(x1 <= x+1);
-   else if (x0 == x+1)
-      STBTT_assert(x1 >= x);
-   else if (x0 <= x)
-      STBTT_assert(x1 <= x);
-   else if (x0 >= x+1)
-      STBTT_assert(x1 >= x+1);
-   else
-      STBTT_assert(x1 >= x && x1 <= x+1);
-
-   if (x0 <= x && x1 <= x)
-      scanline[x] += e->direction * (y1-y0);
-   else if (x0 >= x+1 && x1 >= x+1)
-      ;
-   else {
-      STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1);
-      scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position
-   }
-}
-
-static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top)
-{
-   float y_bottom = y_top+1;
-
-   while (e) {
-      // brute force every pixel
-
-      // compute intersection points with top & bottom
-      STBTT_assert(e->ey >= y_top);
-
-      if (e->fdx == 0) {
-         float x0 = e->fx;
-         if (x0 < len) {
-            if (x0 >= 0) {
-               stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom);
-               stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom);
-            } else {
-               stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom);
-            }
-         }
-      } else {
-         float x0 = e->fx;
-         float dx = e->fdx;
-         float xb = x0 + dx;
-         float x_top, x_bottom;
-         float sy0,sy1;
-         float dy = e->fdy;
-         STBTT_assert(e->sy <= y_bottom && e->ey >= y_top);
-
-         // compute endpoints of line segment clipped to this scanline (if the
-         // line segment starts on this scanline. x0 is the intersection of the
-         // line with y_top, but that may be off the line segment.
-         if (e->sy > y_top) {
-            x_top = x0 + dx * (e->sy - y_top);
-            sy0 = e->sy;
-         } else {
-            x_top = x0;
-            sy0 = y_top;
-         }
-         if (e->ey < y_bottom) {
-            x_bottom = x0 + dx * (e->ey - y_top);
-            sy1 = e->ey;
-         } else {
-            x_bottom = xb;
-            sy1 = y_bottom;
-         }
-
-         if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) {
-            // from here on, we don't have to range check x values
-
-            if ((int) x_top == (int) x_bottom) {
-               float height;
-               // simple case, only spans one pixel
-               int x = (int) x_top;
-               height = sy1 - sy0;
-               STBTT_assert(x >= 0 && x < len);
-               scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2)  * height;
-               scanline_fill[x] += e->direction * height; // everything right of this pixel is filled
-            } else {
-               int x,x1,x2;
-               float y_crossing, step, sign, area;
-               // covers 2+ pixels
-               if (x_top > x_bottom) {
-                  // flip scanline vertically; signed area is the same
-                  float t;
-                  sy0 = y_bottom - (sy0 - y_top);
-                  sy1 = y_bottom - (sy1 - y_top);
-                  t = sy0, sy0 = sy1, sy1 = t;
-                  t = x_bottom, x_bottom = x_top, x_top = t;
-                  dx = -dx;
-                  dy = -dy;
-                  t = x0, x0 = xb, xb = t;
-                  // [DEAR IMGUI] Fix static analyzer warning
-                  (void)dx; // [ImGui: fix static analyzer warning]
-               }
-
-               x1 = (int) x_top;
-               x2 = (int) x_bottom;
-               // compute intersection with y axis at x1+1
-               y_crossing = (x1+1 - x0) * dy + y_top;
-
-               sign = e->direction;
-               // area of the rectangle covered from y0..y_crossing
-               area = sign * (y_crossing-sy0);
-               // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing)
-               scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2);
-
-               step = sign * dy;
-               for (x = x1+1; x < x2; ++x) {
-                  scanline[x] += area + step/2;
-                  area += step;
-               }
-               y_crossing += dy * (x2 - (x1+1));
-
-               STBTT_assert(STBTT_fabs(area) <= 1.01f);
-
-               scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing);
-
-               scanline_fill[x2] += sign * (sy1-sy0);
-            }
-         } else {
-            // if edge goes outside of box we're drawing, we require
-            // clipping logic. since this does not match the intended use
-            // of this library, we use a different, very slow brute
-            // force implementation
-            int x;
-            for (x=0; x < len; ++x) {
-               // cases:
-               //
-               // there can be up to two intersections with the pixel. any intersection
-               // with left or right edges can be handled by splitting into two (or three)
-               // regions. intersections with top & bottom do not necessitate case-wise logic.
-               //
-               // the old way of doing this found the intersections with the left & right edges,
-               // then used some simple logic to produce up to three segments in sorted order
-               // from top-to-bottom. however, this had a problem: if an x edge was epsilon
-               // across the x border, then the corresponding y position might not be distinct
-               // from the other y segment, and it might ignored as an empty segment. to avoid
-               // that, we need to explicitly produce segments based on x positions.
-
-               // rename variables to clearly-defined pairs
-               float y0 = y_top;
-               float x1 = (float) (x);
-               float x2 = (float) (x+1);
-               float x3 = xb;
-               float y3 = y_bottom;
-
-               // x = e->x + e->dx * (y-y_top)
-               // (y-y_top) = (x - e->x) / e->dx
-               // y = (x - e->x) / e->dx + y_top
-               float y1 = (x - x0) / dx + y_top;
-               float y2 = (x+1 - x0) / dx + y_top;
-
-               if (x0 < x1 && x3 > x2) {         // three segments descending down-right
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
-                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2);
-                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
-               } else if (x3 < x1 && x0 > x2) {  // three segments descending down-left
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
-                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1);
-                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
-               } else if (x0 < x1 && x3 > x1) {  // two segments across x, down-right
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
-                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
-               } else if (x3 < x1 && x0 > x1) {  // two segments across x, down-left
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
-                  stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
-               } else if (x0 < x2 && x3 > x2) {  // two segments across x+1, down-right
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
-                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
-               } else if (x3 < x2 && x0 > x2) {  // two segments across x+1, down-left
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
-                  stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
-               } else {  // one segment
-                  stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3);
-               }
-            }
-         }
-      }
-      e = e->next;
-   }
-}
-
-// directly AA rasterize edges w/o supersampling
-static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
-{
-   stbtt__hheap hh = { 0, 0, 0 };
-   stbtt__active_edge *active = NULL;
-   int y,j=0, i;
-   float scanline_data[129], *scanline, *scanline2;
-
-   STBTT__NOTUSED(vsubsample);
-
-   if (result->w > 64)
-      scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata);
-   else
-      scanline = scanline_data;
-
-   scanline2 = scanline + result->w;
-
-   y = off_y;
-   e[n].y0 = (float) (off_y + result->h) + 1;
-
-   while (j < result->h) {
-      // find center of pixel for this scanline
-      float scan_y_top    = y + 0.0f;
-      float scan_y_bottom = y + 1.0f;
-      stbtt__active_edge **step = &active;
-
-      STBTT_memset(scanline , 0, result->w*sizeof(scanline[0]));
-      STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0]));
-
-      // update all active edges;
-      // remove all active edges that terminate before the top of this scanline
-      while (*step) {
-         stbtt__active_edge * z = *step;
-         if (z->ey <= scan_y_top) {
-            *step = z->next; // delete from list
-            STBTT_assert(z->direction);
-            z->direction = 0;
-            stbtt__hheap_free(&hh, z);
-         } else {
-            step = &((*step)->next); // advance through list
-         }
-      }
-
-      // insert all edges that start before the bottom of this scanline
-      while (e->y0 <= scan_y_bottom) {
-         if (e->y0 != e->y1) {
-            stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata);
-            if (z != NULL) {
-               if (j == 0 && off_y != 0) {
-                  if (z->ey < scan_y_top) {
-                     // this can happen due to subpixel positioning and some kind of fp rounding error i think
-                     z->ey = scan_y_top;
-                  }
-               }
-               STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds
-               // insert at front
-               z->next = active;
-               active = z;
-            }
-         }
-         ++e;
-      }
-
-      // now process all active edges
-      if (active)
-         stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top);
-
-      {
-         float sum = 0;
-         for (i=0; i < result->w; ++i) {
-            float k;
-            int m;
-            sum += scanline2[i];
-            k = scanline[i] + sum;
-            k = (float) STBTT_fabs(k)*255 + 0.5f;
-            m = (int) k;
-            if (m > 255) m = 255;
-            result->pixels[j*result->stride + i] = (unsigned char) m;
-         }
-      }
-      // advance all the edges
-      step = &active;
-      while (*step) {
-         stbtt__active_edge *z = *step;
-         z->fx += z->fdx; // advance to position for current scanline
-         step = &((*step)->next); // advance through list
-      }
-
-      ++y;
-      ++j;
-   }
-
-   stbtt__hheap_cleanup(&hh, userdata);
-
-   if (scanline != scanline_data)
-      STBTT_free(scanline, userdata);
-}
-#else
-#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
-#endif
-
-#define STBTT__COMPARE(a,b)  ((a)->y0 < (b)->y0)
-
-static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
-{
-   int i,j;
-   for (i=1; i < n; ++i) {
-      stbtt__edge t = p[i], *a = &t;
-      j = i;
-      while (j > 0) {
-         stbtt__edge *b = &p[j-1];
-         int c = STBTT__COMPARE(a,b);
-         if (!c) break;
-         p[j] = p[j-1];
-         --j;
-      }
-      if (i != j)
-         p[j] = t;
-   }
-}
-
-static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
-{
-   /* threshold for transitioning to insertion sort */
-   while (n > 12) {
-      stbtt__edge t;
-      int c01,c12,c,m,i,j;
-
-      /* compute median of three */
-      m = n >> 1;
-      c01 = STBTT__COMPARE(&p[0],&p[m]);
-      c12 = STBTT__COMPARE(&p[m],&p[n-1]);
-      /* if 0 >= mid >= end, or 0 < mid < end, then use mid */
-      if (c01 != c12) {
-         /* otherwise, we'll need to swap something else to middle */
-         int z;
-         c = STBTT__COMPARE(&p[0],&p[n-1]);
-         /* 0>mid && mid<n:  0>n => n; 0<n => 0 */
-         /* 0<mid && mid>n:  0>n => 0; 0<n => n */
-         z = (c == c12) ? 0 : n-1;
-         t = p[z];
-         p[z] = p[m];
-         p[m] = t;
-      }
-      /* now p[m] is the median-of-three */
-      /* swap it to the beginning so it won't move around */
-      t = p[0];
-      p[0] = p[m];
-      p[m] = t;
-
-      /* partition loop */
-      i=1;
-      j=n-1;
-      for(;;) {
-         /* handling of equality is crucial here */
-         /* for sentinels & efficiency with duplicates */
-         for (;;++i) {
-            if (!STBTT__COMPARE(&p[i], &p[0])) break;
-         }
-         for (;;--j) {
-            if (!STBTT__COMPARE(&p[0], &p[j])) break;
-         }
-         /* make sure we haven't crossed */
-         if (i >= j) break;
-         t = p[i];
-         p[i] = p[j];
-         p[j] = t;
-
-         ++i;
-         --j;
-      }
-      /* recurse on smaller side, iterate on larger */
-      if (j < (n-i)) {
-         stbtt__sort_edges_quicksort(p,j);
-         p = p+i;
-         n = n-i;
-      } else {
-         stbtt__sort_edges_quicksort(p+i, n-i);
-         n = j;
-      }
-   }
-}
-
-static void stbtt__sort_edges(stbtt__edge *p, int n)
-{
-   stbtt__sort_edges_quicksort(p, n);
-   stbtt__sort_edges_ins_sort(p, n);
-}
-
-typedef struct
-{
-   float x,y;
-} stbtt__point;
-
-static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata)
-{
-   float y_scale_inv = invert ? -scale_y : scale_y;
-   stbtt__edge *e;
-   int n,i,j,k,m;
-#if STBTT_RASTERIZER_VERSION == 1
-   int vsubsample = result->h < 8 ? 15 : 5;
-#elif STBTT_RASTERIZER_VERSION == 2
-   int vsubsample = 1;
-#else
-   #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
-#endif
-   // vsubsample should divide 255 evenly; otherwise we won't reach full opacity
-
-   // now we have to blow out the windings into explicit edge lists
-   n = 0;
-   for (i=0; i < windings; ++i)
-      n += wcount[i];
-
-   e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel
-   if (e == 0) return;
-   n = 0;
-
-   m=0;
-   for (i=0; i < windings; ++i) {
-      stbtt__point *p = pts + m;
-      m += wcount[i];
-      j = wcount[i]-1;
-      for (k=0; k < wcount[i]; j=k++) {
-         int a=k,b=j;
-         // skip the edge if horizontal
-         if (p[j].y == p[k].y)
-            continue;
-         // add edge from j to k to the list
-         e[n].invert = 0;
-         if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) {
-            e[n].invert = 1;
-            a=j,b=k;
-         }
-         e[n].x0 = p[a].x * scale_x + shift_x;
-         e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample;
-         e[n].x1 = p[b].x * scale_x + shift_x;
-         e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample;
-         ++n;
-      }
-   }
-
-   // now sort the edges by their highest point (should snap to integer, and then by x)
-   //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare);
-   stbtt__sort_edges(e, n);
-
-   // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule
-   stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata);
-
-   STBTT_free(e, userdata);
-}
-
-static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
-{
-   if (!points) return; // during first pass, it's unallocated
-   points[n].x = x;
-   points[n].y = y;
-}
-
-// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching
-static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n)
-{
-   // midpoint
-   float mx = (x0 + 2*x1 + x2)/4;
-   float my = (y0 + 2*y1 + y2)/4;
-   // versus directly drawn line
-   float dx = (x0+x2)/2 - mx;
-   float dy = (y0+y2)/2 - my;
-   if (n > 16) // 65536 segments on one curve better be enough!
-      return 1;
-   if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA
-      stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1);
-      stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1);
-   } else {
-      stbtt__add_point(points, *num_points,x2,y2);
-      *num_points = *num_points+1;
-   }
-   return 1;
-}
-
-static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n)
-{
-   // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough
-   float dx0 = x1-x0;
-   float dy0 = y1-y0;
-   float dx1 = x2-x1;
-   float dy1 = y2-y1;
-   float dx2 = x3-x2;
-   float dy2 = y3-y2;
-   float dx = x3-x0;
-   float dy = y3-y0;
-   float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2));
-   float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy);
-   float flatness_squared = longlen*longlen-shortlen*shortlen;
-
-   if (n > 16) // 65536 segments on one curve better be enough!
-      return;
-
-   if (flatness_squared > objspace_flatness_squared) {
-      float x01 = (x0+x1)/2;
-      float y01 = (y0+y1)/2;
-      float x12 = (x1+x2)/2;
-      float y12 = (y1+y2)/2;
-      float x23 = (x2+x3)/2;
-      float y23 = (y2+y3)/2;
-
-      float xa = (x01+x12)/2;
-      float ya = (y01+y12)/2;
-      float xb = (x12+x23)/2;
-      float yb = (y12+y23)/2;
-
-      float mx = (xa+xb)/2;
-      float my = (ya+yb)/2;
-
-      stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1);
-      stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1);
-   } else {
-      stbtt__add_point(points, *num_points,x3,y3);
-      *num_points = *num_points+1;
-   }
-}
-
-// returns number of contours
-static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata)
-{
-   stbtt__point *points=0;
-   int num_points=0;
-
-   float objspace_flatness_squared = objspace_flatness * objspace_flatness;
-   int i,n=0,start=0, pass;
-
-   // count how many "moves" there are to get the contour count
-   for (i=0; i < num_verts; ++i)
-      if (vertices[i].type == STBTT_vmove)
-         ++n;
-
-   *num_contours = n;
-   if (n == 0) return 0;
-
-   *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata);
-
-   if (*contour_lengths == 0) {
-      *num_contours = 0;
-      return 0;
-   }
-
-   // make two passes through the points so we don't need to realloc
-   for (pass=0; pass < 2; ++pass) {
-      float x=0,y=0;
-      if (pass == 1) {
-         points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata);
-         if (points == NULL) goto error;
-      }
-      num_points = 0;
-      n= -1;
-      for (i=0; i < num_verts; ++i) {
-         switch (vertices[i].type) {
-            case STBTT_vmove:
-               // start the next contour
-               if (n >= 0)
-                  (*contour_lengths)[n] = num_points - start;
-               ++n;
-               start = num_points;
-
-               x = vertices[i].x, y = vertices[i].y;
-               stbtt__add_point(points, num_points++, x,y);
-               break;
-            case STBTT_vline:
-               x = vertices[i].x, y = vertices[i].y;
-               stbtt__add_point(points, num_points++, x, y);
-               break;
-            case STBTT_vcurve:
-               stbtt__tesselate_curve(points, &num_points, x,y,
-                                        vertices[i].cx, vertices[i].cy,
-                                        vertices[i].x,  vertices[i].y,
-                                        objspace_flatness_squared, 0);
-               x = vertices[i].x, y = vertices[i].y;
-               break;
-            case STBTT_vcubic:
-               stbtt__tesselate_cubic(points, &num_points, x,y,
-                                        vertices[i].cx, vertices[i].cy,
-                                        vertices[i].cx1, vertices[i].cy1,
-                                        vertices[i].x,  vertices[i].y,
-                                        objspace_flatness_squared, 0);
-               x = vertices[i].x, y = vertices[i].y;
-               break;
-         }
-      }
-      (*contour_lengths)[n] = num_points - start;
-   }
-
-   return points;
-error:
-   STBTT_free(points, userdata);
-   STBTT_free(*contour_lengths, userdata);
-   *contour_lengths = 0;
-   *num_contours = 0;
-   return NULL;
-}
-
-STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata)
-{
-   float scale            = scale_x > scale_y ? scale_y : scale_x;
-   int winding_count      = 0;
-   int *winding_lengths   = NULL;
-   stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata);
-   if (windings) {
-      stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata);
-      STBTT_free(winding_lengths, userdata);
-      STBTT_free(windings, userdata);
-   }
-}
-
-STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
-{
-   STBTT_free(bitmap, userdata);
-}
-
-STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff)
-{
-   int ix0,iy0,ix1,iy1;
-   stbtt__bitmap gbm;
-   stbtt_vertex *vertices;   
-   int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
-
-   if (scale_x == 0) scale_x = scale_y;
-   if (scale_y == 0) {
-      if (scale_x == 0) {
-         STBTT_free(vertices, info->userdata);
-         return NULL;
-      }
-      scale_y = scale_x;
-   }
-
-   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1);
-
-   // now we get the size
-   gbm.w = (ix1 - ix0);
-   gbm.h = (iy1 - iy0);
-   gbm.pixels = NULL; // in case we error
-
-   if (width ) *width  = gbm.w;
-   if (height) *height = gbm.h;
-   if (xoff  ) *xoff   = ix0;
-   if (yoff  ) *yoff   = iy0;
-   
-   if (gbm.w && gbm.h) {
-      gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
-      if (gbm.pixels) {
-         gbm.stride = gbm.w;
-
-         stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata);
-      }
-   }
-   STBTT_free(vertices, info->userdata);
-   return gbm.pixels;
-}   
-
-STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
-{
-   return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff);
-}
-
-STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph)
-{
-   int ix0,iy0;
-   stbtt_vertex *vertices;
-   int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
-   stbtt__bitmap gbm;   
-
-   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
-   gbm.pixels = output;
-   gbm.w = out_w;
-   gbm.h = out_h;
-   gbm.stride = out_stride;
-
-   if (gbm.w && gbm.h)
-      stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata);
-
-   STBTT_free(vertices, info->userdata);
-}
-
-STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph)
-{
-   stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph);
-}
-
-STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
-{
-   return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
-}   
-
-STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint)
-{
-   stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint));
-}
-
-STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint)
-{
-   stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint));
-}
-
-STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
-{
-   return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
-}   
-
-STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
-{
-   stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// bitmap baking
-//
-// This is SUPER-CRAPPY packing to keep source code small
-
-static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset,  // font location (use offset=0 for plain .ttf)
-                                float pixel_height,                     // height of font in pixels
-                                unsigned char *pixels, int pw, int ph,  // bitmap to be filled in
-                                int first_char, int num_chars,          // characters to bake
-                                stbtt_bakedchar *chardata)
-{
-   float scale;
-   int x,y,bottom_y, i;
-   stbtt_fontinfo f;
-   f.userdata = NULL;
-   if (!stbtt_InitFont(&f, data, offset))
-      return -1;
-   STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
-   x=y=1;
-   bottom_y = 1;
-
-   scale = stbtt_ScaleForPixelHeight(&f, pixel_height);
-
-   for (i=0; i < num_chars; ++i) {
-      int advance, lsb, x0,y0,x1,y1,gw,gh;
-      int g = stbtt_FindGlyphIndex(&f, first_char + i);
-      stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb);
-      stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1);
-      gw = x1-x0;
-      gh = y1-y0;
-      if (x + gw + 1 >= pw)
-         y = bottom_y, x = 1; // advance to next row
-      if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row
-         return -i;
-      STBTT_assert(x+gw < pw);
-      STBTT_assert(y+gh < ph);
-      stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g);
-      chardata[i].x0 = (stbtt_int16) x;
-      chardata[i].y0 = (stbtt_int16) y;
-      chardata[i].x1 = (stbtt_int16) (x + gw);
-      chardata[i].y1 = (stbtt_int16) (y + gh);
-      chardata[i].xadvance = scale * advance;
-      chardata[i].xoff     = (float) x0;
-      chardata[i].yoff     = (float) y0;
-      x = x + gw + 1;
-      if (y+gh+1 > bottom_y)
-         bottom_y = y+gh+1;
-   }
-   return bottom_y;
-}
-
-STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule)
-{
-   float d3d_bias = opengl_fillrule ? 0 : -0.5f;
-   float ipw = 1.0f / pw, iph = 1.0f / ph;
-   const stbtt_bakedchar *b = chardata + char_index;
-   int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f);
-   int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f);
-
-   q->x0 = round_x + d3d_bias;
-   q->y0 = round_y + d3d_bias;
-   q->x1 = round_x + b->x1 - b->x0 + d3d_bias;
-   q->y1 = round_y + b->y1 - b->y0 + d3d_bias;
-
-   q->s0 = b->x0 * ipw;
-   q->t0 = b->y0 * iph;
-   q->s1 = b->x1 * ipw;
-   q->t1 = b->y1 * iph;
-
-   *xpos += b->xadvance;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// rectangle packing replacement routines if you don't have stb_rect_pack.h
-//
-
-#ifndef STB_RECT_PACK_VERSION
-
-typedef int stbrp_coord;
-
-////////////////////////////////////////////////////////////////////////////////////
-//                                                                                //
-//                                                                                //
-// COMPILER WARNING ?!?!?                                                         //
-//                                                                                //
-//                                                                                //
-// if you get a compile warning due to these symbols being defined more than      //
-// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h"         //
-//                                                                                //
-////////////////////////////////////////////////////////////////////////////////////
-
-typedef struct
-{
-   int width,height;
-   int x,y,bottom_y;
-} stbrp_context;
-
-typedef struct
-{
-   unsigned char x;
-} stbrp_node;
-
-struct stbrp_rect
-{
-   stbrp_coord x,y;
-   int id,w,h,was_packed;
-};
-
-static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes)
-{
-   con->width  = pw;
-   con->height = ph;
-   con->x = 0;
-   con->y = 0;
-   con->bottom_y = 0;
-   STBTT__NOTUSED(nodes);
-   STBTT__NOTUSED(num_nodes);   
-}
-
-static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
-{
-   int i;
-   for (i=0; i < num_rects; ++i) {
-      if (con->x + rects[i].w > con->width) {
-         con->x = 0;
-         con->y = con->bottom_y;
-      }
-      if (con->y + rects[i].h > con->height)
-         break;
-      rects[i].x = con->x;
-      rects[i].y = con->y;
-      rects[i].was_packed = 1;
-      con->x += rects[i].w;
-      if (con->y + rects[i].h > con->bottom_y)
-         con->bottom_y = con->y + rects[i].h;
-   }
-   for (   ; i < num_rects; ++i)
-      rects[i].was_packed = 0;
-}
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// bitmap baking
-//
-// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If
-// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy.
-
-STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context)
-{
-   stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context)            ,alloc_context);
-   int            num_nodes = pw - padding;
-   stbrp_node    *nodes   = (stbrp_node    *) STBTT_malloc(sizeof(*nodes  ) * num_nodes,alloc_context);
-
-   if (context == NULL || nodes == NULL) {
-      if (context != NULL) STBTT_free(context, alloc_context);
-      if (nodes   != NULL) STBTT_free(nodes  , alloc_context);
-      return 0;
-   }
-
-   spc->user_allocator_context = alloc_context;
-   spc->width = pw;
-   spc->height = ph;
-   spc->pixels = pixels;
-   spc->pack_info = context;
-   spc->nodes = nodes;
-   spc->padding = padding;
-   spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw;
-   spc->h_oversample = 1;
-   spc->v_oversample = 1;
-   spc->skip_missing = 0;
-
-   stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes);
-
-   if (pixels)
-      STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
-
-   return 1;
-}
-
-STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
-{
-   STBTT_free(spc->nodes    , spc->user_allocator_context);
-   STBTT_free(spc->pack_info, spc->user_allocator_context);
-}
-
-STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample)
-{
-   STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE);
-   STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE);
-   if (h_oversample <= STBTT_MAX_OVERSAMPLE)
-      spc->h_oversample = h_oversample;
-   if (v_oversample <= STBTT_MAX_OVERSAMPLE)
-      spc->v_oversample = v_oversample;
-}
-
-STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip)
-{
-   spc->skip_missing = skip;
-}
-
-#define STBTT__OVER_MASK  (STBTT_MAX_OVERSAMPLE-1)
-
-static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
-{
-   unsigned char buffer[STBTT_MAX_OVERSAMPLE];
-   int safe_w = w - kernel_width;
-   int j;
-   STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
-   for (j=0; j < h; ++j) {
-      int i;
-      unsigned int total;
-      STBTT_memset(buffer, 0, kernel_width);
-
-      total = 0;
-
-      // make kernel_width a constant in common cases so compiler can optimize out the divide
-      switch (kernel_width) {
-         case 2:
-            for (i=0; i <= safe_w; ++i) {
-               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
-               pixels[i] = (unsigned char) (total / 2);
-            }
-            break;
-         case 3:
-            for (i=0; i <= safe_w; ++i) {
-               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
-               pixels[i] = (unsigned char) (total / 3);
-            }
-            break;
-         case 4:
-            for (i=0; i <= safe_w; ++i) {
-               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
-               pixels[i] = (unsigned char) (total / 4);
-            }
-            break;
-         case 5:
-            for (i=0; i <= safe_w; ++i) {
-               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
-               pixels[i] = (unsigned char) (total / 5);
-            }
-            break;
-         default:
-            for (i=0; i <= safe_w; ++i) {
-               total += pixels[i] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
-               pixels[i] = (unsigned char) (total / kernel_width);
-            }
-            break;
-      }
-
-      for (; i < w; ++i) {
-         STBTT_assert(pixels[i] == 0);
-         total -= buffer[i & STBTT__OVER_MASK];
-         pixels[i] = (unsigned char) (total / kernel_width);
-      }
-
-      pixels += stride_in_bytes;
-   }
-}
-
-static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
-{
-   unsigned char buffer[STBTT_MAX_OVERSAMPLE];
-   int safe_h = h - kernel_width;
-   int j;
-   STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
-   for (j=0; j < w; ++j) {
-      int i;
-      unsigned int total;
-      STBTT_memset(buffer, 0, kernel_width);
-
-      total = 0;
-
-      // make kernel_width a constant in common cases so compiler can optimize out the divide
-      switch (kernel_width) {
-         case 2:
-            for (i=0; i <= safe_h; ++i) {
-               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
-               pixels[i*stride_in_bytes] = (unsigned char) (total / 2);
-            }
-            break;
-         case 3:
-            for (i=0; i <= safe_h; ++i) {
-               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
-               pixels[i*stride_in_bytes] = (unsigned char) (total / 3);
-            }
-            break;
-         case 4:
-            for (i=0; i <= safe_h; ++i) {
-               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
-               pixels[i*stride_in_bytes] = (unsigned char) (total / 4);
-            }
-            break;
-         case 5:
-            for (i=0; i <= safe_h; ++i) {
-               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
-               pixels[i*stride_in_bytes] = (unsigned char) (total / 5);
-            }
-            break;
-         default:
-            for (i=0; i <= safe_h; ++i) {
-               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
-               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
-               pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
-            }
-            break;
-      }
-
-      for (; i < h; ++i) {
-         STBTT_assert(pixels[i*stride_in_bytes] == 0);
-         total -= buffer[i & STBTT__OVER_MASK];
-         pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
-      }
-
-      pixels += 1;
-   }
-}
-
-static float stbtt__oversample_shift(int oversample)
-{
-   if (!oversample)
-      return 0.0f;
-
-   // The prefilter is a box filter of width "oversample",
-   // which shifts phase by (oversample - 1)/2 pixels in
-   // oversampled space. We want to shift in the opposite
-   // direction to counter this.
-   return (float)-(oversample - 1) / (2.0f * (float)oversample);
-}
-
-// rects array must be big enough to accommodate all characters in the given ranges
-STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
-{
-   int i,j,k;
-
-   k=0;
-   for (i=0; i < num_ranges; ++i) {
-      float fh = ranges[i].font_size;
-      float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
-      ranges[i].h_oversample = (unsigned char) spc->h_oversample;
-      ranges[i].v_oversample = (unsigned char) spc->v_oversample;
-      for (j=0; j < ranges[i].num_chars; ++j) {
-         int x0,y0,x1,y1;
-         int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
-         int glyph = stbtt_FindGlyphIndex(info, codepoint);
-         if (glyph == 0 && spc->skip_missing) {
-            rects[k].w = rects[k].h = 0;
-         } else {
-            stbtt_GetGlyphBitmapBoxSubpixel(info,glyph,
-                                            scale * spc->h_oversample,
-                                            scale * spc->v_oversample,
-                                            0,0,
-                                            &x0,&y0,&x1,&y1);
-            rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1);
-            rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1);
-         }
-         ++k;
-      }
-   }
-
-   return k;
-}
-
-STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph)
-{
-   stbtt_MakeGlyphBitmapSubpixel(info,
-                                 output,
-                                 out_w - (prefilter_x - 1),
-                                 out_h - (prefilter_y - 1),
-                                 out_stride,
-                                 scale_x,
-                                 scale_y,
-                                 shift_x,
-                                 shift_y,
-                                 glyph);
-
-   if (prefilter_x > 1)
-      stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x);
-
-   if (prefilter_y > 1)
-      stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y);
-
-   *sub_x = stbtt__oversample_shift(prefilter_x);
-   *sub_y = stbtt__oversample_shift(prefilter_y);
-}
-
-// rects array must be big enough to accommodate all characters in the given ranges
-STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
-{
-   int i,j,k, return_value = 1;
-
-   // save current values
-   int old_h_over = spc->h_oversample;
-   int old_v_over = spc->v_oversample;
-
-   k = 0;
-   for (i=0; i < num_ranges; ++i) {
-      float fh = ranges[i].font_size;
-      float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
-      float recip_h,recip_v,sub_x,sub_y;
-      spc->h_oversample = ranges[i].h_oversample;
-      spc->v_oversample = ranges[i].v_oversample;
-      recip_h = 1.0f / spc->h_oversample;
-      recip_v = 1.0f / spc->v_oversample;
-      sub_x = stbtt__oversample_shift(spc->h_oversample);
-      sub_y = stbtt__oversample_shift(spc->v_oversample);
-      for (j=0; j < ranges[i].num_chars; ++j) {
-         stbrp_rect *r = &rects[k];
-         if (r->was_packed && r->w != 0 && r->h != 0) {
-            stbtt_packedchar *bc = &ranges[i].chardata_for_range[j];
-            int advance, lsb, x0,y0,x1,y1;
-            int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
-            int glyph = stbtt_FindGlyphIndex(info, codepoint);
-            stbrp_coord pad = (stbrp_coord) spc->padding;
-
-            // pad on left and top
-            r->x += pad;
-            r->y += pad;
-            r->w -= pad;
-            r->h -= pad;
-            stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb);
-            stbtt_GetGlyphBitmapBox(info, glyph,
-                                    scale * spc->h_oversample,
-                                    scale * spc->v_oversample,
-                                    &x0,&y0,&x1,&y1);
-            stbtt_MakeGlyphBitmapSubpixel(info,
-                                          spc->pixels + r->x + r->y*spc->stride_in_bytes,
-                                          r->w - spc->h_oversample+1,
-                                          r->h - spc->v_oversample+1,
-                                          spc->stride_in_bytes,
-                                          scale * spc->h_oversample,
-                                          scale * spc->v_oversample,
-                                          0,0,
-                                          glyph);
-
-            if (spc->h_oversample > 1)
-               stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
-                                  r->w, r->h, spc->stride_in_bytes,
-                                  spc->h_oversample);
-
-            if (spc->v_oversample > 1)
-               stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
-                                  r->w, r->h, spc->stride_in_bytes,
-                                  spc->v_oversample);
-
-            bc->x0       = (stbtt_int16)  r->x;
-            bc->y0       = (stbtt_int16)  r->y;
-            bc->x1       = (stbtt_int16) (r->x + r->w);
-            bc->y1       = (stbtt_int16) (r->y + r->h);
-            bc->xadvance =                scale * advance;
-            bc->xoff     =       (float)  x0 * recip_h + sub_x;
-            bc->yoff     =       (float)  y0 * recip_v + sub_y;
-            bc->xoff2    =                (x0 + r->w) * recip_h + sub_x;
-            bc->yoff2    =                (y0 + r->h) * recip_v + sub_y;
-         } else {
-            return_value = 0; // if any fail, report failure
-         }
-
-         ++k;
-      }
-   }
-
-   // restore original values
-   spc->h_oversample = old_h_over;
-   spc->v_oversample = old_v_over;
-
-   return return_value;
-}
-
-STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects)
-{
-   stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects);
-}
-
-STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges)
-{
-   stbtt_fontinfo info;
-   int i,j,n, return_value; // [DEAR IMGUI] removed = 1
-   //stbrp_context *context = (stbrp_context *) spc->pack_info;
-   stbrp_rect    *rects;
-
-   // flag all characters as NOT packed
-   for (i=0; i < num_ranges; ++i)
-      for (j=0; j < ranges[i].num_chars; ++j)
-         ranges[i].chardata_for_range[j].x0 =
-         ranges[i].chardata_for_range[j].y0 =
-         ranges[i].chardata_for_range[j].x1 =
-         ranges[i].chardata_for_range[j].y1 = 0;
-
-   n = 0;
-   for (i=0; i < num_ranges; ++i)
-      n += ranges[i].num_chars;
-         
-   rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
-   if (rects == NULL)
-      return 0;
-
-   info.userdata = spc->user_allocator_context;
-   stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index));
-
-   n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
-
-   stbtt_PackFontRangesPackRects(spc, rects, n);
-  
-   return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
-
-   STBTT_free(rects, spc->user_allocator_context);
-   return return_value;
-}
-
-STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
-            int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range)
-{
-   stbtt_pack_range range;
-   range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range;
-   range.array_of_unicode_codepoints = NULL;
-   range.num_chars                   = num_chars_in_range;
-   range.chardata_for_range          = chardata_for_range;
-   range.font_size                   = font_size;
-   return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1);
-}
-
-STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap)
-{
-   int i_ascent, i_descent, i_lineGap;
-   float scale;
-   stbtt_fontinfo info;
-   stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index));
-   scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size);
-   stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap);
-   *ascent  = (float) i_ascent  * scale;
-   *descent = (float) i_descent * scale;
-   *lineGap = (float) i_lineGap * scale;
-}
-
-STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
-{
-   float ipw = 1.0f / pw, iph = 1.0f / ph;
-   const stbtt_packedchar *b = chardata + char_index;
-
-   if (align_to_integer) {
-      float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f);
-      float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f);
-      q->x0 = x;
-      q->y0 = y;
-      q->x1 = x + b->xoff2 - b->xoff;
-      q->y1 = y + b->yoff2 - b->yoff;
-   } else {
-      q->x0 = *xpos + b->xoff;
-      q->y0 = *ypos + b->yoff;
-      q->x1 = *xpos + b->xoff2;
-      q->y1 = *ypos + b->yoff2;
-   }
-
-   q->s0 = b->x0 * ipw;
-   q->t0 = b->y0 * iph;
-   q->s1 = b->x1 * ipw;
-   q->t1 = b->y1 * iph;
-
-   *xpos += b->xadvance;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// sdf computation
-//
-
-#define STBTT_min(a,b)  ((a) < (b) ? (a) : (b))
-#define STBTT_max(a,b)  ((a) < (b) ? (b) : (a))
-
-static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2])
-{
-   float q0perp = q0[1]*ray[0] - q0[0]*ray[1];
-   float q1perp = q1[1]*ray[0] - q1[0]*ray[1];
-   float q2perp = q2[1]*ray[0] - q2[0]*ray[1];
-   float roperp = orig[1]*ray[0] - orig[0]*ray[1];
-
-   float a = q0perp - 2*q1perp + q2perp;
-   float b = q1perp - q0perp;
-   float c = q0perp - roperp;
-
-   float s0 = 0., s1 = 0.;
-   int num_s = 0;
-
-   if (a != 0.0) {
-      float discr = b*b - a*c;
-      if (discr > 0.0) {
-         float rcpna = -1 / a;
-         float d = (float) STBTT_sqrt(discr);
-         s0 = (b+d) * rcpna;
-         s1 = (b-d) * rcpna;
-         if (s0 >= 0.0 && s0 <= 1.0)
-            num_s = 1;
-         if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) {
-            if (num_s == 0) s0 = s1;
-            ++num_s;
-         }
-      }
-   } else {
-      // 2*b*s + c = 0
-      // s = -c / (2*b)
-      s0 = c / (-2 * b);
-      if (s0 >= 0.0 && s0 <= 1.0)
-         num_s = 1;
-   }
-
-   if (num_s == 0)
-      return 0;
-   else {
-      float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]);
-      float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2;
-
-      float q0d =   q0[0]*rayn_x +   q0[1]*rayn_y;
-      float q1d =   q1[0]*rayn_x +   q1[1]*rayn_y;
-      float q2d =   q2[0]*rayn_x +   q2[1]*rayn_y;
-      float rod = orig[0]*rayn_x + orig[1]*rayn_y;
-
-      float q10d = q1d - q0d;
-      float q20d = q2d - q0d;
-      float q0rd = q0d - rod;
-
-      hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d;
-      hits[0][1] = a*s0+b;
-
-      if (num_s > 1) {
-         hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d;
-         hits[1][1] = a*s1+b;
-         return 2;
-      } else {
-         return 1;
-      }
-   }
-}
-
-static int equal(float *a, float *b)
-{
-   return (a[0] == b[0] && a[1] == b[1]);
-}
-
-static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts)
-{
-   int i;
-   float orig[2], ray[2] = { 1, 0 };
-   float y_frac;
-   int winding = 0;
-
-   orig[0] = x;
-   //orig[1] = y; // [DEAR IMGUI] commmented double assignment
-
-   // make sure y never passes through a vertex of the shape
-   y_frac = (float) STBTT_fmod(y, 1.0f);
-   if (y_frac < 0.01f)
-      y += 0.01f;
-   else if (y_frac > 0.99f)
-      y -= 0.01f;
-   orig[1] = y;
-
-   // test a ray from (-infinity,y) to (x,y)
-   for (i=0; i < nverts; ++i) {
-      if (verts[i].type == STBTT_vline) {
-         int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y;
-         int x1 = (int) verts[i  ].x, y1 = (int) verts[i  ].y;
-         if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
-            float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
-            if (x_inter < x)  
-               winding += (y0 < y1) ? 1 : -1;
-         }
-      }
-      if (verts[i].type == STBTT_vcurve) {
-         int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ;
-         int x1 = (int) verts[i  ].cx, y1 = (int) verts[i  ].cy;
-         int x2 = (int) verts[i  ].x , y2 = (int) verts[i  ].y ;
-         int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2));
-         int by = STBTT_max(y0,STBTT_max(y1,y2));
-         if (y > ay && y < by && x > ax) {
-            float q0[2],q1[2],q2[2];
-            float hits[2][2];
-            q0[0] = (float)x0;
-            q0[1] = (float)y0;
-            q1[0] = (float)x1;
-            q1[1] = (float)y1;
-            q2[0] = (float)x2;
-            q2[1] = (float)y2;
-            if (equal(q0,q1) || equal(q1,q2)) {
-               x0 = (int)verts[i-1].x;
-               y0 = (int)verts[i-1].y;
-               x1 = (int)verts[i  ].x;
-               y1 = (int)verts[i  ].y;
-               if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
-                  float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
-                  if (x_inter < x)  
-                     winding += (y0 < y1) ? 1 : -1;
-               }
-            } else {
-               int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits);
-               if (num_hits >= 1)
-                  if (hits[0][0] < 0)
-                     winding += (hits[0][1] < 0 ? -1 : 1);
-               if (num_hits >= 2)
-                  if (hits[1][0] < 0)
-                     winding += (hits[1][1] < 0 ? -1 : 1);
-            }
-         } 
-      }
-   }
-   return winding;
-}
-
-static float stbtt__cuberoot( float x )
-{
-   if (x<0)
-      return -(float) STBTT_pow(-x,1.0f/3.0f);
-   else
-      return  (float) STBTT_pow( x,1.0f/3.0f);
-}
-
-// x^3 + c*x^2 + b*x + a = 0
-static int stbtt__solve_cubic(float a, float b, float c, float* r)
-{
-	float s = -a / 3;
-	float p = b - a*a / 3;
-	float q = a * (2*a*a - 9*b) / 27 + c;
-   float p3 = p*p*p;
-	float d = q*q + 4*p3 / 27;
-	if (d >= 0) {
-		float z = (float) STBTT_sqrt(d);
-		float u = (-q + z) / 2;
-		float v = (-q - z) / 2;
-		u = stbtt__cuberoot(u);
-		v = stbtt__cuberoot(v);
-		r[0] = s + u + v;
-		return 1;
-	} else {
-	   float u = (float) STBTT_sqrt(-p/3);
-	   float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative
-	   float m = (float) STBTT_cos(v);
-      float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f;
-	   r[0] = s + u * 2 * m;
-	   r[1] = s - u * (m + n);
-	   r[2] = s - u * (m - n);
-
-      //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f);  // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe?
-      //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f);
-      //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f);
-   	return 3;
-   }
-}
-
-STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
-{
-   float scale_x = scale, scale_y = scale;
-   int ix0,iy0,ix1,iy1;
-   int w,h;
-   unsigned char *data;
-
-   // if one scale is 0, use same scale for both
-   if (scale_x == 0) scale_x = scale_y;
-   if (scale_y == 0) {
-      if (scale_x == 0) return NULL;  // if both scales are 0, return NULL
-      scale_y = scale_x;
-   }
-
-   stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1);
-
-   // if empty, return NULL
-   if (ix0 == ix1 || iy0 == iy1)
-      return NULL;
-
-   ix0 -= padding;
-   iy0 -= padding;
-   ix1 += padding;
-   iy1 += padding;
-
-   w = (ix1 - ix0);
-   h = (iy1 - iy0);
-
-   if (width ) *width  = w;
-   if (height) *height = h;
-   if (xoff  ) *xoff   = ix0;
-   if (yoff  ) *yoff   = iy0;
-
-   // invert for y-downwards bitmaps
-   scale_y = -scale_y;
-      
-   {
-      int x,y,i,j;
-      float *precompute;
-      stbtt_vertex *verts;
-      int num_verts = stbtt_GetGlyphShape(info, glyph, &verts);
-      data = (unsigned char *) STBTT_malloc(w * h, info->userdata);
-      precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata);
-
-      for (i=0,j=num_verts-1; i < num_verts; j=i++) {
-         if (verts[i].type == STBTT_vline) {
-            float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
-            float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y;
-            float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
-            precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist;
-         } else if (verts[i].type == STBTT_vcurve) {
-            float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y;
-            float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y;
-            float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y;
-            float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
-            float len2 = bx*bx + by*by;
-            if (len2 != 0.0f)
-               precompute[i] = 1.0f / (bx*bx + by*by);
-            else
-               precompute[i] = 0.0f;
-         } else
-            precompute[i] = 0.0f;
-      }
-
-      for (y=iy0; y < iy1; ++y) {
-         for (x=ix0; x < ix1; ++x) {
-            float val;
-            float min_dist = 999999.0f;
-            float sx = (float) x + 0.5f;
-            float sy = (float) y + 0.5f;
-            float x_gspace = (sx / scale_x);
-            float y_gspace = (sy / scale_y);
-
-            int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path
-
-            for (i=0; i < num_verts; ++i) {
-               float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
-
-               // check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve
-               float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy);
-               if (dist2 < min_dist*min_dist)
-                  min_dist = (float) STBTT_sqrt(dist2);
-
-               if (verts[i].type == STBTT_vline) {
-                  float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y;
-
-                  // coarse culling against bbox
-                  //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist &&
-                  //    sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist)
-                  float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i];
-                  STBTT_assert(i != 0);
-                  if (dist < min_dist) {
-                     // check position along line
-                     // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0)
-                     // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy)
-                     float dx = x1-x0, dy = y1-y0;
-                     float px = x0-sx, py = y0-sy;
-                     // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy
-                     // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve
-                     float t = -(px*dx + py*dy) / (dx*dx + dy*dy);
-                     if (t >= 0.0f && t <= 1.0f)
-                        min_dist = dist;
-                  }
-               } else if (verts[i].type == STBTT_vcurve) {
-                  float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y;
-                  float x1 = verts[i  ].cx*scale_x, y1 = verts[i  ].cy*scale_y;
-                  float box_x0 = STBTT_min(STBTT_min(x0,x1),x2);
-                  float box_y0 = STBTT_min(STBTT_min(y0,y1),y2);
-                  float box_x1 = STBTT_max(STBTT_max(x0,x1),x2);
-                  float box_y1 = STBTT_max(STBTT_max(y0,y1),y2);
-                  // coarse culling against bbox to avoid computing cubic unnecessarily
-                  if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) {
-                     int num=0;
-                     float ax = x1-x0, ay = y1-y0;
-                     float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
-                     float mx = x0 - sx, my = y0 - sy;
-                     float res[3],px,py,t,it;
-                     float a_inv = precompute[i];
-                     if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula
-                        float a = 3*(ax*bx + ay*by);
-                        float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by);
-                        float c = mx*ax+my*ay;
-                        if (a == 0.0) { // if a is 0, it's linear
-                           if (b != 0.0) {
-                              res[num++] = -c/b;
-                           }
-                        } else {
-                           float discriminant = b*b - 4*a*c;
-                           if (discriminant < 0)
-                              num = 0;
-                           else {
-                              float root = (float) STBTT_sqrt(discriminant);
-                              res[0] = (-b - root)/(2*a);
-                              res[1] = (-b + root)/(2*a);
-                              num = 2; // don't bother distinguishing 1-solution case, as code below will still work
-                           }
-                        }
-                     } else {
-                        float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point
-                        float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv;
-                        float d = (mx*ax+my*ay) * a_inv;
-                        num = stbtt__solve_cubic(b, c, d, res);
-                     }
-                     if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) {
-                        t = res[0], it = 1.0f - t;
-                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
-                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
-                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
-                        if (dist2 < min_dist * min_dist)
-                           min_dist = (float) STBTT_sqrt(dist2);
-                     }
-                     if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) {
-                        t = res[1], it = 1.0f - t;
-                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
-                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
-                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
-                        if (dist2 < min_dist * min_dist)
-                           min_dist = (float) STBTT_sqrt(dist2);
-                     }
-                     if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) {
-                        t = res[2], it = 1.0f - t;
-                        px = it*it*x0 + 2*t*it*x1 + t*t*x2;
-                        py = it*it*y0 + 2*t*it*y1 + t*t*y2;
-                        dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
-                        if (dist2 < min_dist * min_dist)
-                           min_dist = (float) STBTT_sqrt(dist2);
-                     }
-                  }
-               }
-            }
-            if (winding == 0)
-               min_dist = -min_dist;  // if outside the shape, value is negative
-            val = onedge_value + pixel_dist_scale * min_dist;
-            if (val < 0)
-               val = 0;
-            else if (val > 255)
-               val = 255;
-            data[(y-iy0)*w+(x-ix0)] = (unsigned char) val;
-         }
-      }
-      STBTT_free(precompute, info->userdata);
-      STBTT_free(verts, info->userdata);
-   }
-   return data;
-}   
-
-STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
-{
-   return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff);
-}
-
-STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
-{
-   STBTT_free(bitmap, userdata);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//
-// font name matching -- recommended not to use this
-//
-
-// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
-static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) 
-{
-   stbtt_int32 i=0;
-
-   // convert utf16 to utf8 and compare the results while converting
-   while (len2) {
-      stbtt_uint16 ch = s2[0]*256 + s2[1];
-      if (ch < 0x80) {
-         if (i >= len1) return -1;
-         if (s1[i++] != ch) return -1;
-      } else if (ch < 0x800) {
-         if (i+1 >= len1) return -1;
-         if (s1[i++] != 0xc0 + (ch >> 6)) return -1;
-         if (s1[i++] != 0x80 + (ch & 0x3f)) return -1;
-      } else if (ch >= 0xd800 && ch < 0xdc00) {
-         stbtt_uint32 c;
-         stbtt_uint16 ch2 = s2[2]*256 + s2[3];
-         if (i+3 >= len1) return -1;
-         c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000;
-         if (s1[i++] != 0xf0 + (c >> 18)) return -1;
-         if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1;
-         if (s1[i++] != 0x80 + ((c >>  6) & 0x3f)) return -1;
-         if (s1[i++] != 0x80 + ((c      ) & 0x3f)) return -1;
-         s2 += 2; // plus another 2 below
-         len2 -= 2;
-      } else if (ch >= 0xdc00 && ch < 0xe000) {
-         return -1;
-      } else {
-         if (i+2 >= len1) return -1;
-         if (s1[i++] != 0xe0 + (ch >> 12)) return -1;
-         if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1;
-         if (s1[i++] != 0x80 + ((ch     ) & 0x3f)) return -1;
-      }
-      s2 += 2;
-      len2 -= 2;
-   }
-   return i;
-}
-
-static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) 
-{
-   return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
-}
-
-// returns results in whatever encoding you request... but note that 2-byte encodings
-// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare
-STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID)
-{
-   stbtt_int32 i,count,stringOffset;
-   stbtt_uint8 *fc = font->data;
-   stbtt_uint32 offset = font->fontstart;
-   stbtt_uint32 nm = stbtt__find_table(fc, offset, "name");
-   if (!nm) return NULL;
-
-   count = ttUSHORT(fc+nm+2);
-   stringOffset = nm + ttUSHORT(fc+nm+4);
-   for (i=0; i < count; ++i) {
-      stbtt_uint32 loc = nm + 6 + 12 * i;
-      if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2)
-          && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) {
-         *length = ttUSHORT(fc+loc+8);
-         return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10));
-      }
-   }
-   return NULL;
-}
-
-static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id)
-{
-   stbtt_int32 i;
-   stbtt_int32 count = ttUSHORT(fc+nm+2);
-   stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4);
-
-   for (i=0; i < count; ++i) {
-      stbtt_uint32 loc = nm + 6 + 12 * i;
-      stbtt_int32 id = ttUSHORT(fc+loc+6);
-      if (id == target_id) {
-         // find the encoding
-         stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4);
-
-         // is this a Unicode encoding?
-         if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) {
-            stbtt_int32 slen = ttUSHORT(fc+loc+8);
-            stbtt_int32 off = ttUSHORT(fc+loc+10);
-
-            // check if there's a prefix match
-            stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen);
-            if (matchlen >= 0) {
-               // check for target_id+1 immediately following, with same encoding & language
-               if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) {
-                  slen = ttUSHORT(fc+loc+12+8);
-                  off = ttUSHORT(fc+loc+12+10);
-                  if (slen == 0) {
-                     if (matchlen == nlen)
-                        return 1;
-                  } else if (matchlen < nlen && name[matchlen] == ' ') {
-                     ++matchlen;
-                     if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen))
-                        return 1;
-                  }
-               } else {
-                  // if nothing immediately following
-                  if (matchlen == nlen)
-                     return 1;
-               }
-            }
-         }
-
-         // @TODO handle other encodings
-      }
-   }
-   return 0;
-}
-
-static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags)
-{
-   stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name);
-   stbtt_uint32 nm,hd;
-   if (!stbtt__isfont(fc+offset)) return 0;
-
-   // check italics/bold/underline flags in macStyle...
-   if (flags) {
-      hd = stbtt__find_table(fc, offset, "head");
-      if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0;
-   }
-
-   nm = stbtt__find_table(fc, offset, "name");
-   if (!nm) return 0;
-
-   if (flags) {
-      // if we checked the macStyle flags, then just check the family and ignore the subfamily
-      if (stbtt__matchpair(fc, nm, name, nlen, 16, -1))  return 1;
-      if (stbtt__matchpair(fc, nm, name, nlen,  1, -1))  return 1;
-      if (stbtt__matchpair(fc, nm, name, nlen,  3, -1))  return 1;
-   } else {
-      if (stbtt__matchpair(fc, nm, name, nlen, 16, 17))  return 1;
-      if (stbtt__matchpair(fc, nm, name, nlen,  1,  2))  return 1;
-      if (stbtt__matchpair(fc, nm, name, nlen,  3, -1))  return 1;
-   }
-
-   return 0;
-}
-
-static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags)
-{
-   stbtt_int32 i;
-   for (i=0;;++i) {
-      stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i);
-      if (off < 0) return off;
-      if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags))
-         return off;
-   }
-}
-
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wcast-qual"
-#endif
-
-STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
-                                float pixel_height, unsigned char *pixels, int pw, int ph,
-                                int first_char, int num_chars, stbtt_bakedchar *chardata)
-{
-   return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata);
-}
-
-STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
-{
-   return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);   
-}
-
-STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
-{
-   return stbtt_GetNumberOfFonts_internal((unsigned char *) data);
-}
-
-STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset)
-{
-   return stbtt_InitFont_internal(info, (unsigned char *) data, offset);
-}
-
-STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags)
-{
-   return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags);
-}
-
-STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
-{
-   return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2);
-}
-
-#if defined(__GNUC__) || defined(__clang__)
-#pragma GCC diagnostic pop
-#endif
-
-#endif // STB_TRUETYPE_IMPLEMENTATION
-
-
-// FULL VERSION HISTORY
-//
-//   1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod
-//   1.18 (2018-01-29) add missing function
-//   1.17 (2017-07-23) make more arguments const; doc fix
-//   1.16 (2017-07-12) SDF support
-//   1.15 (2017-03-03) make more arguments const
-//   1.14 (2017-01-16) num-fonts-in-TTC function
-//   1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
-//   1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
-//   1.11 (2016-04-02) fix unused-variable warning
-//   1.10 (2016-04-02) allow user-defined fabs() replacement
-//                     fix memory leak if fontsize=0.0
-//                     fix warning from duplicate typedef
-//   1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges
-//   1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
-//   1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
-//                     allow PackFontRanges to pack and render in separate phases;
-//                     fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
-//                     fixed an assert() bug in the new rasterizer
-//                     replace assert() with STBTT_assert() in new rasterizer
-//   1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine)
-//                     also more precise AA rasterizer, except if shapes overlap
-//                     remove need for STBTT_sort
-//   1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC
-//   1.04 (2015-04-15) typo in example
-//   1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes
-//   1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++
-//   1.01 (2014-12-08) fix subpixel position when oversampling to exactly match
-//                        non-oversampled; STBTT_POINT_SIZE for packed case only
-//   1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling
-//   0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg)
-//   0.9  (2014-08-07) support certain mac/iOS fonts without an MS platformID
-//   0.8b (2014-07-07) fix a warning
-//   0.8  (2014-05-25) fix a few more warnings
-//   0.7  (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back
-//   0.6c (2012-07-24) improve documentation
-//   0.6b (2012-07-20) fix a few more warnings
-//   0.6  (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels,
-//                        stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty
-//   0.5  (2011-12-09) bugfixes:
-//                        subpixel glyph renderer computed wrong bounding box
-//                        first vertex of shape can be off-curve (FreeSans)
-//   0.4b (2011-12-03) fixed an error in the font baking example
-//   0.4  (2011-12-01) kerning, subpixel rendering (tor)
-//                    bugfixes for:
-//                        codepoint-to-glyph conversion using table fmt=12
-//                        codepoint-to-glyph conversion using table fmt=4
-//                        stbtt_GetBakedQuad with non-square texture (Zer)
-//                    updated Hello World! sample to use kerning and subpixel
-//                    fixed some warnings
-//   0.3  (2009-06-24) cmap fmt=12, compound shapes (MM)
-//                    userdata, malloc-from-userdata, non-zero fill (stb)
-//   0.2  (2009-03-11) Fix unsigned/signed char warnings
-//   0.1  (2009-03-09) First public release
-//
-
-/*
-------------------------------------------------------------------------------
-This software is available under 2 licenses -- choose whichever you prefer.
-------------------------------------------------------------------------------
-ALTERNATIVE A - MIT License
-Copyright (c) 2017 Sean Barrett
-Permission is hereby granted, free of charge, to any person obtaining a copy of 
-this software and associated documentation files (the "Software"), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 
-of the Software, and to permit persons to whom the Software is furnished to do 
-so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all 
-copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
-SOFTWARE.
-------------------------------------------------------------------------------
-ALTERNATIVE B - Public Domain (www.unlicense.org)
-This is free and unencumbered software released into the public domain.
-Anyone is free to copy, modify, publish, use, compile, sell, or distribute this 
-software, either in source code form or as a compiled binary, for any purpose, 
-commercial or non-commercial, and by any means.
-In jurisdictions that recognize copyright laws, the author or authors of this 
-software dedicate any and all copyright interest in the software to the public 
-domain. We make this dedication for the benefit of the public at large and to 
-the detriment of our heirs and successors. We intend this dedication to be an 
-overt act of relinquishment in perpetuity of all present and future rights to 
-this software under copyright law.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
-AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
-ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-------------------------------------------------------------------------------
-*/
--